fix: 修复流程保存报错

This commit is contained in:
2023-10-26 15:25:25 +08:00
parent f341d1c16f
commit 97f937ddd9
2 changed files with 84 additions and 23 deletions
@@ -2,6 +2,8 @@ package com.jero.modules.activiti.process.common.service;
import com.jero.common.exception.JeroBootException; import com.jero.common.exception.JeroBootException;
import com.jero.common.system.api.ISysBaseAPI; import com.jero.common.system.api.ISysBaseAPI;
import com.jero.modules.activiti.entity.ProcessNode;
import com.jero.modules.activiti.service.ProcessNodeService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.activiti.engine.RepositoryService; import org.activiti.engine.RepositoryService;
import org.activiti.engine.RuntimeService; import org.activiti.engine.RuntimeService;
@@ -33,7 +35,7 @@ public class ActFlowCommonService {
private TaskService taskService; private TaskService taskService;
@Resource @Resource
private ISysBaseAPI sysBaseAPI; private ProcessNodeService processNodeService;
/** /**
* 启动流程实例 * 启动流程实例
@@ -170,4 +172,18 @@ public class ActFlowCommonService {
Task task = taskService.createTaskQuery().taskId(taskId).singleResult(); Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
return task.getProcessInstanceId(); return task.getProcessInstanceId();
} }
public String getProcessDefId(String processInstanceId) {
ProcessInstance processInstance =
runtimeService.createProcessInstanceQuery()
.processInstanceId(processInstanceId)
.singleResult();
// 从ProcessInstance对象中获取processDefId
if (processInstance != null) {
return processInstance.getProcessDefinitionId();
} else {
throw new JeroBootException("未找到流程定义Id");
}
}
} }
@@ -1,5 +1,6 @@
package com.jero.modules.activiti.process.esInitChange.service.impl; package com.jero.modules.activiti.process.esInitChange.service.impl;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -7,6 +8,7 @@ import com.jero.common.constant.enums.YesOrNoEnum;
import com.jero.common.exception.JeroBootException; import com.jero.common.exception.JeroBootException;
import com.jero.modules.activiti.entity.ProcessAll; import com.jero.modules.activiti.entity.ProcessAll;
import com.jero.modules.activiti.entity.ProcessApprovalRecord; import com.jero.modules.activiti.entity.ProcessApprovalRecord;
import com.jero.modules.activiti.entity.ProcessNode;
import com.jero.modules.activiti.enums.CommitFlagEnum; import com.jero.modules.activiti.enums.CommitFlagEnum;
import com.jero.modules.activiti.enums.FinishFlagEnum; import com.jero.modules.activiti.enums.FinishFlagEnum;
import com.jero.modules.activiti.enums.ProcessTypeEnum; import com.jero.modules.activiti.enums.ProcessTypeEnum;
@@ -23,6 +25,7 @@ import com.jero.modules.activiti.process.esInitChange.mapper.ProcessEsInitChange
import com.jero.modules.activiti.service.ProcessAllService; import com.jero.modules.activiti.service.ProcessAllService;
import com.jero.modules.activiti.service.ProcessApprovalRecordService; import com.jero.modules.activiti.service.ProcessApprovalRecordService;
import com.jero.modules.activiti.service.ProcessNodeLinkService; import com.jero.modules.activiti.service.ProcessNodeLinkService;
import com.jero.modules.activiti.service.ProcessNodeService;
import com.jero.modules.laws.enterprise.service.ESSequenceNumberProvider; import com.jero.modules.laws.enterprise.service.ESSequenceNumberProvider;
import com.jero.modules.laws.enterprise.util.EnterpriseStandardUtil; import com.jero.modules.laws.enterprise.util.EnterpriseStandardUtil;
import com.jero.modules.sys.utils.UserUtils; import com.jero.modules.sys.utils.UserUtils;
@@ -56,9 +59,6 @@ public class ProcessEsInitChangeServiceImpl extends ServiceImpl<ProcessEsInitCha
@Resource @Resource
private ProcessApprovalRecordService processApprovalRecordService; private ProcessApprovalRecordService processApprovalRecordService;
@Resource
private TaskService taskService;
@Resource @Resource
private EnterpriseStandardUtil esUtil; private EnterpriseStandardUtil esUtil;
@@ -68,11 +68,15 @@ public class ProcessEsInitChangeServiceImpl extends ServiceImpl<ProcessEsInitCha
@Resource @Resource
private ProcessNodeLinkService processNodeLinkService; private ProcessNodeLinkService processNodeLinkService;
@Resource
private ProcessNodeService processNodeService;
@Override @Override
public InitChangeDataVO getHandleData(String taskId) { public InitChangeDataVO getHandleData(String taskId) {
InitChangeDataVO initChangeDataVO = new InitChangeDataVO(); InitChangeDataVO initChangeDataVO = new InitChangeDataVO();
// 使用流程引擎根据taskId找到流程实例Id // 使用流程引擎根据taskId找到流程实例Id
String processInstanceId = actFlowCommonService.getProcessInstanceIdByTaskId(taskId); String processInstanceId = actFlowCommonService.getProcessInstanceIdByTaskId(taskId);
String processDefinitionId = actFlowCommonService.getProcessDefId(processInstanceId);
// 获取流程通用数据 // 获取流程通用数据
ProcessAll process = processAllService.getByProcessInstanceId(processInstanceId); ProcessAll process = processAllService.getByProcessInstanceId(processInstanceId);
CommonVO commonVO = new CommonVO(); CommonVO commonVO = new CommonVO();
@@ -86,7 +90,19 @@ public class ProcessEsInitChangeServiceImpl extends ServiceImpl<ProcessEsInitCha
lambdaQueryWrapper.eq(ProcessEsInitChange::getDelFlag, YesOrNoEnum.NO.getValue()); lambdaQueryWrapper.eq(ProcessEsInitChange::getDelFlag, YesOrNoEnum.NO.getValue());
List<ProcessEsInitChange> dataList = list(lambdaQueryWrapper); List<ProcessEsInitChange> dataList = list(lambdaQueryWrapper);
initChangeDataVO.setDataList(dataList); initChangeDataVO.setDataList(dataList);
// TODO 选人组件内容填充 // 选人组件内容填充
List<ProcessNode> nodeList = processNodeService.getNodeList(processDefinitionId, processInstanceId);
FlowUserInfoVO flowUserInfoVO = new FlowUserInfoVO();
Map<String, ProcessNode> userMap = nodeList.stream().collect(Collectors.toMap(ProcessNode::getVariableName, node -> node));
flowUserInfoVO.setCreateUser(userMap.get("createUser").getLinkUserIds());
flowUserInfoVO.setCreateUser(userMap.get("contactUser").getLinkUserIds());
flowUserInfoVO.setCreateUser(userMap.get("mainDraftUserLeader").getLinkUserIds());
flowUserInfoVO.setCreateUser(userMap.get("mainDraftUserLeaderLeader").getLinkUserIds());
flowUserInfoVO.setCreateUser(userMap.get("standardizationApprovalUser").getLinkUserIds());
flowUserInfoVO.setCreateUser(userMap.get("newMainDraftUserLeaderLeader").getLinkUserIds());
flowUserInfoVO.setCreateUser(userMap.get("newMainDraftUserLeader").getLinkUserIds());
flowUserInfoVO.setCreateUser(userMap.get("copyUser").getLinkUserIds());
initChangeDataVO.setFlowUserInfoVO(flowUserInfoVO);
return initChangeDataVO; return initChangeDataVO;
} }
@@ -117,7 +133,7 @@ public class ProcessEsInitChangeServiceImpl extends ServiceImpl<ProcessEsInitCha
// 保存到业务流程表 // 保存到业务流程表
saveBatch(esInitChangeList); saveBatch(esInitChangeList);
// 保存选人信息 // 保存选人信息
processNodeLinkService.saveNodeUserLink(processDefinitionId, processInstanceId, variables); processNodeLinkService.saveNodeUserLink(processDefinitionId, processInstanceId, this.getUserMap(variables));
// 根据流程实例id更新流程总表 // 根据流程实例id更新流程总表
ProcessAll process = processAllService.getByProcessInstanceId(processInstanceId); ProcessAll process = processAllService.getByProcessInstanceId(processInstanceId);
@@ -136,10 +152,13 @@ public class ProcessEsInitChangeServiceImpl extends ServiceImpl<ProcessEsInitCha
@Override @Override
public void approvalInitChange(InitChangeDataVO initChangeDataVO, boolean pass) { public void approvalInitChange(InitChangeDataVO initChangeDataVO, boolean pass) {
String userId = UserUtils.getUserId();
CommonVO commonVO = initChangeDataVO.getCommonVO(); CommonVO commonVO = initChangeDataVO.getCommonVO();
String taskId = commonVO.getTaskId(); String taskId = commonVO.getTaskId();
List<ProcessEsInitChange> esInitChangeList = initChangeDataVO.getDataList(); List<ProcessEsInitChange> esInitChangeList = initChangeDataVO.getDataList();
Map<String, Object> map = new HashMap<>(); Map<String, Object> variables = new HashMap<>();
String processInstanceId = actFlowCommonService.getProcessInstanceIdByTaskId(taskId);
String processDefinitionId = actFlowCommonService.getProcessDefId(processInstanceId);
if (pass) { if (pass) {
// 校验企标编号是否冲突 // 校验企标编号是否冲突
if (!esUtil.verifyEnStandardNumber(esInitChangeList.get(0).getOriginEnStandardNo())) { if (!esUtil.verifyEnStandardNumber(esInitChangeList.get(0).getOriginEnStandardNo())) {
@@ -147,10 +166,13 @@ public class ProcessEsInitChangeServiceImpl extends ServiceImpl<ProcessEsInitCha
} }
// 更新业务流程数据 // 更新业务流程数据
saveOrUpdateBatch(esInitChangeList); saveOrUpdateBatch(esInitChangeList);
map = setVariables(initChangeDataVO); variables = setVariables(initChangeDataVO);
// 保存选人信息
Map<String, Object> userMap = this.getUserMap(variables);
processNodeLinkService.saveNodeUserLink(processDefinitionId, processInstanceId, userMap);
} }
// 设置流程变量 // 设置流程变量
map.put("pass", pass); variables.put("pass", pass);
//更新审批表为完成,填充数据 //更新审批表为完成,填充数据
ProcessApprovalRecord approvalRecord = processApprovalRecordService.getToDoByTaskId(taskId); ProcessApprovalRecord approvalRecord = processApprovalRecordService.getToDoByTaskId(taskId);
approvalRecord.setCommitFlag(pass ? CommitFlagEnum.PASS.getValue() : CommitFlagEnum.REJECT.getValue()); approvalRecord.setCommitFlag(pass ? CommitFlagEnum.PASS.getValue() : CommitFlagEnum.REJECT.getValue());
@@ -160,7 +182,14 @@ public class ProcessEsInitChangeServiceImpl extends ServiceImpl<ProcessEsInitCha
approvalRecord.setEndTime(new Date()); approvalRecord.setEndTime(new Date());
processApprovalRecordService.updateById(approvalRecord); processApprovalRecordService.updateById(approvalRecord);
//审批节点 //审批节点
taskService.complete(taskId, map); actFlowCommonService.completeTask(taskId, userId, variables);
}
private Map<String, Object> getUserMap(Map<String, Object> variables) {
variables.remove("pass");
variables.remove("applicationCategory");
variables.remove("projectType");
return variables;
} }
@Override @Override
@@ -170,20 +199,36 @@ public class ProcessEsInitChangeServiceImpl extends ServiceImpl<ProcessEsInitCha
List<ProcessEsInitChange> esInitChange = initChangeData.getDataList(); List<ProcessEsInitChange> esInitChange = initChangeData.getDataList();
saveOrUpdateBatch(esInitChange); saveOrUpdateBatch(esInitChange);
// 先删后增 // 先删后增
String processInstanceId = actFlowCommonService.getProcessInstanceIdByTaskId(taskId); if (StrUtil.isBlank(taskId)) {
LambdaUpdateWrapper<ProcessDraft> draftWrapper = new LambdaUpdateWrapper<>(); // 第一个节点点击保存没有taskId
draftWrapper.in(ProcessDraft::getProjectId, esInitChange.stream().map(ProcessEsInitChange::getId).collect(Collectors.toList())); LambdaUpdateWrapper<ProcessDraft> draftWrapper = new LambdaUpdateWrapper<>();
processDraftService.remove(draftWrapper); draftWrapper.eq(ProcessDraft::getPrcType, ProcessTypeEnum.B.getValue());
List<ProcessDraft> draftList = new ArrayList<>(); draftWrapper.eq(ProcessDraft::getCreateBy, UserUtils.getUserId());
for (ProcessEsInitChange esInitChangeItem : esInitChange) { processDraftService.remove(draftWrapper);
ProcessDraft draft = new ProcessDraft(); List<ProcessDraft> draftList = new ArrayList<>();
draft.setProjectId(esInitChangeItem.getId()); for (ProcessEsInitChange esInitChangeItem : esInitChange) {
draft.setProcessInstanceId(processInstanceId); ProcessDraft draft = new ProcessDraft();
draft.setPrcName(commonVO.getPrcName()); draft.setProjectId(esInitChangeItem.getId());
draft.setPrcType(ProcessTypeEnum.B.getValue()); draft.setPrcType(ProcessTypeEnum.B.getValue());
draftList.add(draft); draftList.add(draft);
}
processDraftService.saveBatch(draftList);
} else {
String processInstanceId = actFlowCommonService.getProcessInstanceIdByTaskId(taskId);
LambdaUpdateWrapper<ProcessDraft> draftWrapper = new LambdaUpdateWrapper<>();
draftWrapper.in(ProcessDraft::getProjectId, esInitChange.stream().map(ProcessEsInitChange::getId).collect(Collectors.toList()));
processDraftService.remove(draftWrapper);
List<ProcessDraft> draftList = new ArrayList<>();
for (ProcessEsInitChange esInitChangeItem : esInitChange) {
ProcessDraft draft = new ProcessDraft();
draft.setProjectId(esInitChangeItem.getId());
draft.setProcessInstanceId(processInstanceId);
draft.setPrcName(commonVO.getPrcName());
draft.setPrcType(ProcessTypeEnum.B.getValue());
draftList.add(draft);
}
processDraftService.saveBatch(draftList);
} }
processDraftService.saveBatch(draftList);
} }
public Map<String, Object> setVariables(InitChangeDataVO initChangeData) { public Map<String, Object> setVariables(InitChangeDataVO initChangeData) {