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.system.api.ISysBaseAPI;
import com.jero.modules.activiti.entity.ProcessNode;
import com.jero.modules.activiti.service.ProcessNodeService;
import lombok.extern.slf4j.Slf4j;
import org.activiti.engine.RepositoryService;
import org.activiti.engine.RuntimeService;
@@ -33,7 +35,7 @@ public class ActFlowCommonService {
private TaskService taskService;
@Resource
private ISysBaseAPI sysBaseAPI;
private ProcessNodeService processNodeService;
/**
* 启动流程实例
@@ -170,4 +172,18 @@ public class ActFlowCommonService {
Task task = taskService.createTaskQuery().taskId(taskId).singleResult();
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;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
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.modules.activiti.entity.ProcessAll;
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.FinishFlagEnum;
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.ProcessApprovalRecordService;
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.util.EnterpriseStandardUtil;
import com.jero.modules.sys.utils.UserUtils;
@@ -56,9 +59,6 @@ public class ProcessEsInitChangeServiceImpl extends ServiceImpl<ProcessEsInitCha
@Resource
private ProcessApprovalRecordService processApprovalRecordService;
@Resource
private TaskService taskService;
@Resource
private EnterpriseStandardUtil esUtil;
@@ -68,11 +68,15 @@ public class ProcessEsInitChangeServiceImpl extends ServiceImpl<ProcessEsInitCha
@Resource
private ProcessNodeLinkService processNodeLinkService;
@Resource
private ProcessNodeService processNodeService;
@Override
public InitChangeDataVO getHandleData(String taskId) {
InitChangeDataVO initChangeDataVO = new InitChangeDataVO();
// 使用流程引擎根据taskId找到流程实例Id
String processInstanceId = actFlowCommonService.getProcessInstanceIdByTaskId(taskId);
String processDefinitionId = actFlowCommonService.getProcessDefId(processInstanceId);
// 获取流程通用数据
ProcessAll process = processAllService.getByProcessInstanceId(processInstanceId);
CommonVO commonVO = new CommonVO();
@@ -86,7 +90,19 @@ public class ProcessEsInitChangeServiceImpl extends ServiceImpl<ProcessEsInitCha
lambdaQueryWrapper.eq(ProcessEsInitChange::getDelFlag, YesOrNoEnum.NO.getValue());
List<ProcessEsInitChange> dataList = list(lambdaQueryWrapper);
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;
}
@@ -117,7 +133,7 @@ public class ProcessEsInitChangeServiceImpl extends ServiceImpl<ProcessEsInitCha
// 保存到业务流程表
saveBatch(esInitChangeList);
// 保存选人信息
processNodeLinkService.saveNodeUserLink(processDefinitionId, processInstanceId, variables);
processNodeLinkService.saveNodeUserLink(processDefinitionId, processInstanceId, this.getUserMap(variables));
// 根据流程实例id更新流程总表
ProcessAll process = processAllService.getByProcessInstanceId(processInstanceId);
@@ -136,10 +152,13 @@ public class ProcessEsInitChangeServiceImpl extends ServiceImpl<ProcessEsInitCha
@Override
public void approvalInitChange(InitChangeDataVO initChangeDataVO, boolean pass) {
String userId = UserUtils.getUserId();
CommonVO commonVO = initChangeDataVO.getCommonVO();
String taskId = commonVO.getTaskId();
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 (!esUtil.verifyEnStandardNumber(esInitChangeList.get(0).getOriginEnStandardNo())) {
@@ -147,10 +166,13 @@ public class ProcessEsInitChangeServiceImpl extends ServiceImpl<ProcessEsInitCha
}
// 更新业务流程数据
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);
approvalRecord.setCommitFlag(pass ? CommitFlagEnum.PASS.getValue() : CommitFlagEnum.REJECT.getValue());
@@ -160,7 +182,14 @@ public class ProcessEsInitChangeServiceImpl extends ServiceImpl<ProcessEsInitCha
approvalRecord.setEndTime(new Date());
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
@@ -170,20 +199,36 @@ public class ProcessEsInitChangeServiceImpl extends ServiceImpl<ProcessEsInitCha
List<ProcessEsInitChange> esInitChange = initChangeData.getDataList();
saveOrUpdateBatch(esInitChange);
// 先删后增
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);
if (StrUtil.isBlank(taskId)) {
// 第一个节点点击保存没有taskId
LambdaUpdateWrapper<ProcessDraft> draftWrapper = new LambdaUpdateWrapper<>();
draftWrapper.eq(ProcessDraft::getPrcType, ProcessTypeEnum.B.getValue());
draftWrapper.eq(ProcessDraft::getCreateBy, UserUtils.getUserId());
processDraftService.remove(draftWrapper);
List<ProcessDraft> draftList = new ArrayList<>();
for (ProcessEsInitChange esInitChangeItem : esInitChange) {
ProcessDraft draft = new ProcessDraft();
draft.setProjectId(esInitChangeItem.getId());
draft.setPrcType(ProcessTypeEnum.B.getValue());
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) {