外协人员excel导入优化
This commit is contained in:
@@ -0,0 +1,8 @@
|
||||
package com.jeelowcode.module.biz.service;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
public interface IOutsideBatchApprovalService {
|
||||
|
||||
void updateOutsidePersonStatus(String tableName, String id, Map<String,Object> dataMap);
|
||||
}
|
||||
@@ -0,0 +1,156 @@
|
||||
package com.jeelowcode.module.biz.service.impl;
|
||||
|
||||
import cn.hutool.json.JSONObject;
|
||||
import com.jeelowcode.core.framework.controller.BaseController;
|
||||
import com.jeelowcode.core.framework.enums.ApproveStatusEnum;
|
||||
import com.jeelowcode.core.framework.service.IFormService;
|
||||
import com.jeelowcode.core.framework.service.IFrameService;
|
||||
import com.jeelowcode.framework.utils.model.ResultDataModel;
|
||||
import com.jeelowcode.framework.utils.tool.CollectionUtil;
|
||||
import com.jeelowcode.framework.utils.tool.NumberUtil;
|
||||
import com.jeelowcode.module.biz.service.IOutsideBatchApprovalService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 批量审批服务实现
|
||||
* 根据lc_outside_batch_approval的审批状态,同步更新lc_outside_person表的审批状态和流程实例ID
|
||||
*/
|
||||
@Slf4j
|
||||
@Service
|
||||
public class OutsideBatchApprovalService extends BaseController implements IOutsideBatchApprovalService {
|
||||
|
||||
@Autowired
|
||||
private IFormService dbFormService;
|
||||
|
||||
@Autowired
|
||||
private IFrameService frameService;
|
||||
|
||||
@Override
|
||||
public void updateOutsidePersonStatus(String tableName, String id, Map<String, Object> dataMap) {
|
||||
// 只处理批量审批表
|
||||
if (!"lc_outside_batch_approval".equals(tableName)) {
|
||||
log.debug("表名 {} 不是批量审批表,跳过处理", tableName);
|
||||
return;
|
||||
}
|
||||
|
||||
if (id == null || id.trim().isEmpty()) {
|
||||
log.warn("批量审批记录ID为空,跳过同步");
|
||||
return;
|
||||
}
|
||||
|
||||
Long dataId = NumberUtil.toLong(id);
|
||||
if (dataId == null) {
|
||||
log.warn("批量审批记录ID {} 无法转换为Long类型,跳过同步", id);
|
||||
return;
|
||||
}
|
||||
|
||||
Long personFormId = dbFormService.getDbFormIdByTableName("lc_outside_person");
|
||||
Long batchFormId = dbFormService.getDbFormIdByTableName("lc_outside_batch_approval");
|
||||
|
||||
// 获取批量审批记录详情
|
||||
ResultDataModel resultDataModel = frameService.getDataDetail(batchFormId, dataId, new HashMap<>());
|
||||
|
||||
if (CollectionUtil.isEmpty(resultDataModel.getRecords())) {
|
||||
log.warn("批量审批记录 {} 不存在,跳过同步", dataId);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!resultDataModel.getRecords().get(0).containsKey("jeelowcode_subtable_data")) {
|
||||
log.warn("批量审批记录 {} 没有子表数据,跳过同步", dataId);
|
||||
return;
|
||||
}
|
||||
|
||||
HashMap<String, Object> details = (HashMap<String, Object>) resultDataModel.getRecords().get(0).get("jeelowcode_subtable_data");
|
||||
if (!details.containsKey("lc_outside_batch_approval_detail")) {
|
||||
log.warn("批量审批记录 {} 没有明细数据,跳过同步", dataId);
|
||||
return;
|
||||
}
|
||||
|
||||
List<HashMap<String, Object>> detailList = (List<HashMap<String, Object>>) details.get("lc_outside_batch_approval_detail");
|
||||
|
||||
// 从dataMap中获取审批状态和流程实例ID
|
||||
// 尝试多种可能的字段名(框架可能返回不同的大小写格式)
|
||||
Object approveStatusObj = dataMap.get(ApproveStatusEnum.codeField);
|
||||
if (approveStatusObj == null) {
|
||||
approveStatusObj = dataMap.get("approveStatus");
|
||||
}
|
||||
Object processInstanceIdObj = dataMap.get("processInstanceId");
|
||||
if (processInstanceIdObj == null) {
|
||||
processInstanceIdObj = dataMap.get("ProcessInstanceId");
|
||||
}
|
||||
|
||||
if (approveStatusObj == null) {
|
||||
log.warn("批量审批记录 {} 的审批状态为空,跳过同步", dataId);
|
||||
return;
|
||||
}
|
||||
|
||||
Integer approveStatus = NumberUtil.toInt(approveStatusObj.toString());
|
||||
String processInstanceId = processInstanceIdObj != null ? processInstanceIdObj.toString() : null;
|
||||
|
||||
// 根据审批状态获取对应的描述
|
||||
String approveStatusName = getApproveStatusName(approveStatus);
|
||||
|
||||
if (CollectionUtil.isEmpty(detailList)) {
|
||||
log.warn("批量审批记录 {} 没有关联的明细数据,跳过同步", dataId);
|
||||
return;
|
||||
}
|
||||
|
||||
// 收集需要更新的外协人员ID
|
||||
List<Long> outsideIdList = new ArrayList<>();
|
||||
for (Map<String, Object> detail : detailList) {
|
||||
Object outsideIdObj = detail.get("outsideId");
|
||||
if (outsideIdObj != null) {
|
||||
Long outsideId = NumberUtil.toLong(outsideIdObj.toString());
|
||||
if (outsideId != null) {
|
||||
outsideIdList.add(outsideId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (CollectionUtil.isEmpty(outsideIdList)) {
|
||||
log.warn("批量审批记录 {} 没有有效的外协人员ID,跳过同步", dataId);
|
||||
return;
|
||||
}
|
||||
|
||||
// 批量更新外协人员表的审批状态和流程实例ID
|
||||
List<JSONObject> updateList = new ArrayList<>();
|
||||
for (Long outsideId : outsideIdList) {
|
||||
JSONObject updateData = new JSONObject();
|
||||
updateData.put("id", outsideId);
|
||||
updateData.put(ApproveStatusEnum.codeField, approveStatus);
|
||||
updateData.put(ApproveStatusEnum.nameField, approveStatusName);
|
||||
if (processInstanceId != null) {
|
||||
updateData.put("processInstanceId", processInstanceId);
|
||||
}
|
||||
updateList.add(updateData);
|
||||
}
|
||||
|
||||
// 执行批量更新
|
||||
if (CollectionUtil.isNotEmpty(updateList)) {
|
||||
super.editJsonData(personFormId, updateList);
|
||||
log.info("批量审批记录 {} 同步更新了 {} 条外协人员记录的审批状态", dataId, updateList.size());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据审批状态码获取对应的描述
|
||||
*/
|
||||
private String getApproveStatusName(Integer approveStatus) {
|
||||
if (approveStatus == null) {
|
||||
return ApproveStatusEnum.UNAPPROVED.getDesc();
|
||||
}
|
||||
for (ApproveStatusEnum statusEnum : ApproveStatusEnum.values()) {
|
||||
if (statusEnum.getCode() == approveStatus) {
|
||||
return statusEnum.getDesc();
|
||||
}
|
||||
}
|
||||
return ApproveStatusEnum.UNAPPROVED.getDesc();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user