fix: 子流程結束把主流程結束BUG

This commit is contained in:
2024-07-16 19:17:40 +08:00
parent 0d4e811471
commit 048f5b681e
2 changed files with 55 additions and 41 deletions
@@ -36,6 +36,9 @@ import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Component;
import java.util.*;
import java.util.concurrent.atomic.AtomicBoolean;
import static com.jero.modules.activiti.process.fb.common.ProcessDefinitionKey.*;
/**
* @author liJiaRao
@@ -44,6 +47,7 @@ import java.util.*;
@Slf4j
@Component("myGlobalEventListener")
public class MyGlobalEventListener implements ActivitiEventListener {
@Override
public void onEvent(ActivitiEvent event) {
//log.info("========================MyGlobalEventListener========================");
@@ -94,7 +98,7 @@ public class MyGlobalEventListener implements ActivitiEventListener {
String processDefinitionId = execution.getProcessDefinitionId();
ExecutionEntityImpl parent = execution.getParent();
String mainInstanceId = (String) execution.getVariable(ActivitiCommon.MAIN_INSTANCE_ID);
if (mainInstanceId != null){
if (mainInstanceId != null) {
return;
}
String name = parent.getProcessDefinitionName();
@@ -144,11 +148,11 @@ public class MyGlobalEventListener implements ActivitiEventListener {
log.info("execution.getActivityId() = " + execution.getActivityId());
//判断是否需要创建待办
LambdaQueryWrapper<ProcessNode> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(ProcessNode::getProcessDefinitionId,processDefinitionId);
wrapper.eq(ProcessNode::getNodeName,name);
wrapper.eq(ProcessNode::getProcessDefinitionId, processDefinitionId);
wrapper.eq(ProcessNode::getNodeName, name);
wrapper.eq(ProcessNode::getIsView, YesOrNoEnum.YES.getValue());
int count = processNodeService.count(wrapper);
if (count == 0 || "123".equals(assignee)){
if (count == 0 || "123".equals(assignee)) {
// 标准化发起流程不走这个逻辑
if (!processDefinitionId.contains("es-annual-init")) {
return;
@@ -174,8 +178,8 @@ public class MyGlobalEventListener implements ActivitiEventListener {
//更新最新接受任务时间
ProcessAll processAll = processAllService.getByProcessInstanceId(processInstanceId);
LambdaUpdateWrapper<ProcessAll> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.eq(ProcessAll::getId,processAll.getId());
updateWrapper.set(ProcessAll::getReceivedTaskTime,createTime);
updateWrapper.eq(ProcessAll::getId, processAll.getId());
updateWrapper.set(ProcessAll::getReceivedTaskTime, createTime);
processAllService.update(updateWrapper);
// 对接统一平台生成待办任务
@@ -199,15 +203,15 @@ public class MyGlobalEventListener implements ActivitiEventListener {
ProcessApprovalRecordService recordService = SpringContextUtil.getBean(ProcessApprovalRecordService.class);
LambdaQueryWrapper<ProcessApprovalRecord> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(ProcessApprovalRecord::getTaskId,taskId);
wrapper.eq(ProcessApprovalRecord::getTaskId, taskId);
ProcessApprovalRecord approvalRecord = recordService.getOne(wrapper);
if (approvalRecord == null){
if (approvalRecord == null) {
return;
}
String userId = approvalRecord.getUserId();
if (!Objects.equals(assignee,userId)) {
log.info(""+userId+"转办给"+assignee);
if (!Objects.equals(assignee, userId)) {
log.info("" + userId + "转办给" + assignee);
// 对接统一平台生成完成任务
PushWorkflowIntegrationAPI pushWorkflowIntegrationAPI = SpringContextUtil.getBean(PushWorkflowIntegrationAPI.class);
List<UnifiedTodoVO> list = new ArrayList<>();
@@ -250,9 +254,9 @@ public class MyGlobalEventListener implements ActivitiEventListener {
String processDefinitionId = delegateTask.getProcessDefinitionId();
//更新审批信息为完成
LambdaQueryWrapper<ProcessApprovalRecord> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(ProcessApprovalRecord::getTaskId,taskId);
wrapper.eq(ProcessApprovalRecord::getTaskId, taskId);
ProcessApprovalRecord approvalRecord = recordService.getOne(wrapper);
if (approvalRecord == null){
if (approvalRecord == null) {
return;
}
Date createTime = approvalRecord.getCreateTime();
@@ -264,7 +268,7 @@ public class MyGlobalEventListener implements ActivitiEventListener {
DateBetween between = date.between(createTime);
// 征求意见流程 超期待办特殊处理
if (YesOrNoEnum.NO.getValue().equals(approvalRecord.getOverDue())){
if (YesOrNoEnum.NO.getValue().equals(approvalRecord.getOverDue())) {
approvalRecord.setFinishFlag(FinishFlagEnum.COMPLETE.getValue());
approvalRecord.setEndTime(date);
approvalRecord.setOverTime(between.toString());
@@ -297,8 +301,8 @@ public class MyGlobalEventListener implements ActivitiEventListener {
//更新最新完成任务时间
ProcessAll processAll = processAllService.getByProcessInstanceId(processInstanceId);
LambdaUpdateWrapper<ProcessAll> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.eq(ProcessAll::getId,processAll.getId());
updateWrapper.set(ProcessAll::getCompletedTaskTime,date);
updateWrapper.eq(ProcessAll::getId, processAll.getId());
updateWrapper.set(ProcessAll::getCompletedTaskTime, date);
processAllService.update(updateWrapper);
// 对接统一平台生成完成任务
@@ -316,9 +320,9 @@ public class MyGlobalEventListener implements ActivitiEventListener {
log.info("===================任务删除事件===================");
ActivitiEntityEventImpl activitiEntityEvent = (ActivitiEntityEventImpl) event;
TaskEntity delegateTask;
if (activitiEntityEvent.getEntity() instanceof TaskEntity){
if (activitiEntityEvent.getEntity() instanceof TaskEntity) {
delegateTask = (TaskEntity) activitiEntityEvent.getEntity();
}else {
} else {
return;
}
ExecutionEntity execution = delegateTask.getExecution();
@@ -328,15 +332,15 @@ public class MyGlobalEventListener implements ActivitiEventListener {
String processDefinitionId = delegateTask.getProcessDefinitionId();
//更新审批信息为完成
LambdaQueryWrapper<ProcessApprovalRecord> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(ProcessApprovalRecord::getTaskId,taskId);
wrapper.ne(ProcessApprovalRecord::getFinishFlag,FinishFlagEnum.COMPLETE.getValue());
wrapper.ne(ProcessApprovalRecord::getFinishFlag,FinishFlagEnum.WITHDRAWN.getValue());
wrapper.eq(ProcessApprovalRecord::getTaskId, taskId);
wrapper.ne(ProcessApprovalRecord::getFinishFlag, FinishFlagEnum.COMPLETE.getValue());
wrapper.ne(ProcessApprovalRecord::getFinishFlag, FinishFlagEnum.WITHDRAWN.getValue());
ProcessApprovalRecord approvalRecord = recordService.getOne(wrapper);
if (approvalRecord == null){
if (approvalRecord == null) {
return;
}
Integer finishFlag = approvalRecord.getFinishFlag();
if (FinishFlagEnum.COMPLETE.getValue().equals(finishFlag)){
if (FinishFlagEnum.COMPLETE.getValue().equals(finishFlag)) {
return;
}
log.info("id = " + delegateTask.getId());
@@ -374,26 +378,40 @@ public class MyGlobalEventListener implements ActivitiEventListener {
DateTime date = DateUtil.date();
DateBetween between = date.between(createTime);
//更新流程总表信息为已完成
LambdaUpdateWrapper<ProcessAll> wrapper = new LambdaUpdateWrapper<>();
wrapper.eq(ProcessAll::getProcessInstanceId, processInstanceId);
wrapper.set(ProcessAll::getPrcStatus, ProcessStatusEnum.COMPLETED.getValue());
wrapper.set(ProcessAll::getEndTime, date);
wrapper.set(ProcessAll::getOverTime, between.toString());
processAllService.update(wrapper);
// 更新流程总表信息为已完成
// 复杂流程的子流程不需要更新流程状态
AtomicBoolean updateStatusFlag = new AtomicBoolean(true);
List<String> childProcessDefinitionIdList = Arrays.asList(
STANDARD_COMPLIANCE_CHECK_DISTRIBUTE,
STANDARD_COMPLIANCE_CHECK_REDISTRIBUTE);
childProcessDefinitionIdList.forEach(s -> {
if (processDefinitionId.contains(s)) {
updateStatusFlag.set(false);
}
});
if (updateStatusFlag.get()) {
LambdaUpdateWrapper<ProcessAll> wrapper = new LambdaUpdateWrapper<>();
wrapper.eq(ProcessAll::getProcessInstanceId, processInstanceId);
wrapper.set(ProcessAll::getPrcStatus, ProcessStatusEnum.COMPLETED.getValue());
wrapper.set(ProcessAll::getEndTime, date);
wrapper.set(ProcessAll::getOverTime, between.toString());
processAllService.update(wrapper);
}
//如果有父id,判断所有子流程是否都完成,如果都完成,那么父流程的任务开始流转
String parentTaskId = (String) execution.getVariable(ActivitiCommon.PARENT_TASK_ID);
if (StringUtils.isNotBlank(parentTaskId)){
if (StringUtils.isNotBlank(parentTaskId)) {
int i = processAllService.countByParentTaskId(parentTaskId);
if (i == 0){
if (i == 0) {
TaskService taskService = SpringContextUtil.getBean(TaskService.class);
taskService.complete(parentTaskId);
}
}else {
} else {
//查询所有审批信息
ProcessApprovalRecordService recordService = SpringContextUtil.getBean(ProcessApprovalRecordService.class);
LambdaQueryWrapper<ProcessApprovalRecord> wrapper1 = new LambdaQueryWrapper<>();
wrapper1.eq(ProcessApprovalRecord::getProcessInstanceId,processInstanceId);
wrapper1.eq(ProcessApprovalRecord::getProcessInstanceId, processInstanceId);
List<ProcessApprovalRecord> approvalRecordList = recordService.list(wrapper1);
//对接统一平台生成办结
@@ -54,9 +54,9 @@ import java.io.InputStream;
import java.util.*;
import java.util.stream.Collectors;
import static com.jero.modules.activiti.common.ActivitiCommon.DISTRIBUTE;
import static com.jero.modules.activiti.common.ActivitiCommon.PASS;
import static com.jero.modules.activiti.common.ActivitiCommon.*;
import static com.jero.modules.activiti.process.standardComplianceCheck.common.ProcessStandardComplianceCheckConstants.*;
import static com.jero.modules.activiti.process.standardComplianceCheck.common.ProcessStandardComplianceCheckConstants.UNALLOCATED_QUANTITY;
/**
* @author ThinkBook
@@ -159,6 +159,7 @@ public class ProcessStandardComplianceCheckServiceImpl extends ServiceImpl<Proce
save(standardInfo);
// 给流程中设置主表流程变量Id
runtimeService.setVariable(processInstanceId, CHECK_ID, standardInfo.getId());
runtimeService.setVariable(processInstanceId, MAIN_INSTANCE_ID, processInstanceId);
// 子表设置流程实例Id
List<ProcessStandardComplianceCheckDetail> detailInfoList = businessInfoDTO.getDetailInfoList();
detailInfoList.forEach(detail -> {
@@ -398,13 +399,8 @@ public class ProcessStandardComplianceCheckServiceImpl extends ServiceImpl<Proce
processSccVO.setDetailInfoList(detailList);
break;
case DESIGNER_ENGINEER_EVALUATION:
this.setDesignerEngineerEvaluationHandleData(processSccVO, taskId);
break;
case MAIN_CHECK_USER_APPROVAL:
detailList = detailList.stream()
.filter(detail -> processInstanceId.equals(detail.getProcessInstanceId()))
.collect(Collectors.toList());
processSccVO.setDetailInfoList(detailList);
this.setDesignerEngineerEvaluationHandleData(processSccVO, taskId);
break;
}
result.setBusinessInfoDTO(processSccVO);