外协人员excel导入优化

This commit is contained in:
2025-12-18 09:27:45 +08:00
parent 235b95a653
commit 4b45b69291
12 changed files with 1697 additions and 53 deletions

View File

@@ -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);
}

View File

@@ -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();
}
}