diff --git a/src/main/java/neatlogic/framework/process/notify/constvalue/ProcessTaskStepNotifyTriggerType.java b/src/main/java/neatlogic/framework/process/notify/constvalue/ProcessTaskStepNotifyTriggerType.java index 49a09488d3332a07bcf90be431c4695f7352adf3..cb11f81adf7e0d6909766a47160dcdf422935a05 100755 --- a/src/main/java/neatlogic/framework/process/notify/constvalue/ProcessTaskStepNotifyTriggerType.java +++ b/src/main/java/neatlogic/framework/process/notify/constvalue/ProcessTaskStepNotifyTriggerType.java @@ -33,6 +33,8 @@ public enum ProcessTaskStepNotifyTriggerType implements INotifyTriggerType { Arrays.asList(ProcessTaskGroupSearch.PROCESSUSERTYPE.getValue() + "#" + ProcessUserType.WORKER.getValue())), RETREAT("retreat", "nfpnc.processtaskstepnotifytriggertype.text.retreat", "nfpnc.processtaskstepnotifytriggertype.description.retreat", Arrays.asList(ProcessTaskGroupSearch.PROCESSUSERTYPE.getValue() + "#" + ProcessUserType.MAJOR.getValue())), + REVOKE("revoke", "nfpnc.processtaskstepnotifytriggertype.text.revoke", "nfpnc.processtaskstepnotifytriggertype.description.revoke", + Arrays.asList(ProcessTaskGroupSearch.PROCESSUSERTYPE.getValue() + "#" + ProcessUserType.MAJOR.getValue())), PAUSE("pause", "nfpnc.processtaskstepnotifytriggertype.text.pause", "nfpnc.processtaskstepnotifytriggertype.description.pause", Arrays.asList(ProcessTaskGroupSearch.PROCESSUSERTYPE.getValue() + "#" + ProcessUserType.WORKER.getValue())), RECOVER("recover", "nfpnc.processtaskstepnotifytriggertype.text.recover", "nfpnc.processtaskstepnotifytriggertype.description.recover", diff --git a/src/main/java/neatlogic/framework/process/stephandler/core/IProcessStepHandler.java b/src/main/java/neatlogic/framework/process/stephandler/core/IProcessStepHandler.java index 8725f8c2cf9492f83ae12091e36359d0d52c3e5a..af737fce6a1641ee412c93c614729768ec98ba59 100644 --- a/src/main/java/neatlogic/framework/process/stephandler/core/IProcessStepHandler.java +++ b/src/main/java/neatlogic/framework/process/stephandler/core/IProcessStepHandler.java @@ -21,6 +21,7 @@ import neatlogic.framework.process.dto.ProcessTaskStepWorkerVo; import neatlogic.framework.process.dto.ProcessTaskVo; import neatlogic.framework.process.exception.processtask.ProcessTaskException; import com.alibaba.fastjson.JSONObject; +import neatlogic.framework.process.operationauth.core.IOperationType; import org.springframework.transaction.annotation.Isolation; import org.springframework.transaction.annotation.Propagation; import org.springframework.transaction.annotation.Transactional; @@ -107,7 +108,7 @@ public interface IProcessStepHandler { * @return 1代表成功 */ @Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.READ_COMMITTED) - int hang(ProcessTaskStepVo currentProcessTaskStepVo); + int hang(ProcessTaskStepVo currentProcessTaskStepVo, IOperationType operationType); /** * 开始流程步骤 diff --git a/src/main/java/neatlogic/framework/process/stephandler/core/ProcessStepHandlerBase.java b/src/main/java/neatlogic/framework/process/stephandler/core/ProcessStepHandlerBase.java index ea05422d22b73325ac55e36b5513831733e55495..f39364fdae62a32b9277d5386489f23a9437b09e 100644 --- a/src/main/java/neatlogic/framework/process/stephandler/core/ProcessStepHandlerBase.java +++ b/src/main/java/neatlogic/framework/process/stephandler/core/ProcessStepHandlerBase.java @@ -247,7 +247,7 @@ public abstract class ProcessStepHandlerBase implements IProcessStepHandler { /* 遍历后续节点所有步骤,写入汇聚步骤数据 **/ resetConvergeInfo(currentProcessTaskStepVo); /* 如果当前步骤是二次进入(后续路径已经走过),则需要对所有后续流转过的步骤都进行挂起操作 **/ - hangPostStep(currentProcessTaskStepVo); + hangPostStep(currentProcessTaskStepVo, ProcessTaskStepOperationType.STEP_ACTIVE); resetPostStepRelIsHit(currentProcessTaskStepVo.getProcessTaskId(), currentProcessTaskStepVo.getId()); if (this.getMode().equals(ProcessStepMode.MT)) { if (!this.disableAssign()) { @@ -621,7 +621,7 @@ public abstract class ProcessStepHandlerBase implements IProcessStepHandler { * hang操作原则上不允许出现任何异常,所有异常都必须解决以便流程可以顺利挂起,否则流程可能会卡死在某个节点不能前进或后退 */ @Override - public final int hang(ProcessTaskStepVo currentProcessTaskStepVo) { + public final int hang(ProcessTaskStepVo currentProcessTaskStepVo, IOperationType operationType) { try { IProcessTaskCrossoverMapper processTaskCrossoverMapper = CrossoverServiceFactory.getApi(IProcessTaskCrossoverMapper.class); // 锁定当前流程 @@ -638,7 +638,17 @@ public abstract class ProcessStepHandlerBase implements IProcessStepHandler { processTaskCrossoverMapper.deleteProcessTaskConvergeByStepId(currentProcessTaskStepVo.getId()); // 获取流转过的路径 - hangPostStep(currentProcessTaskStepVo); + hangPostStep(currentProcessTaskStepVo, operationType); + + if (operationType == ProcessTaskStepOperationType.STEP_RETREAT) { + List workerList = processTaskCrossoverMapper.getProcessTaskStepWorkerByProcessTaskIdAndProcessTaskStepId(currentProcessTaskStepVo.getProcessTaskId(), currentProcessTaskStepVo.getId()); + currentProcessTaskStepVo.setWorkerList(workerList); + IProcessStepHandlerCrossoverUtil processStepHandlerCrossoverUtil = CrossoverServiceFactory.getApi(IProcessStepHandlerCrossoverUtil.class); + /* 触发通知 **/ + processStepHandlerCrossoverUtil.notify(currentProcessTaskStepVo, ProcessTaskStepNotifyTriggerType.REVOKE); + /* 执行动作 **/ + processStepHandlerCrossoverUtil.action(currentProcessTaskStepVo, ProcessTaskStepNotifyTriggerType.REVOKE); + } ProcessTaskStepWorkerVo processTaskStepWorkerVo = new ProcessTaskStepWorkerVo(); processTaskStepWorkerVo.setProcessTaskId(currentProcessTaskStepVo.getProcessTaskId()); processTaskStepWorkerVo.setProcessTaskStepId(currentProcessTaskStepVo.getId()); @@ -654,11 +664,6 @@ public abstract class ProcessStepHandlerBase implements IProcessStepHandler { currentProcessTaskStepVo.setIsActive(0); currentProcessTaskStepVo.setStatus(ProcessTaskStepStatus.HANG.getValue()); updateProcessTaskStepStatus(currentProcessTaskStepVo); - /* 触发通知 **/ -// processStepHandlerUtilService.notify(currentProcessTaskStepVo, TaskStepNotifyTriggerType.HANG); - - /* 执行动作 **/ -// processStepHandlerUtilService.action(currentProcessTaskStepVo, TaskStepNotifyTriggerType.HANG); } catch (Exception e) { logger.error(e.getMessage(), e); // currentProcessTaskStepVo.setIsActive(2); @@ -1376,7 +1381,7 @@ public abstract class ProcessStepHandlerBase implements IProcessStepHandler { resetConvergeInfo(currentProcessTaskStepVo); /* 如果当前步骤是二次进入(后续路径已经走过),则需要对所有后续流转过的步骤都进行挂起操作 **/ - hangPostStep(currentProcessTaskStepVo); + hangPostStep(currentProcessTaskStepVo, ProcessTaskStepOperationType.STEP_RETREAT); resetPostStepRelIsHit(currentProcessTaskStepVo.getProcessTaskId(), currentProcessTaskStepVo.getId()); /* 获取当前步骤状态 **/ @@ -2665,8 +2670,9 @@ public abstract class ProcessStepHandlerBase implements IProcessStepHandler { * 将当前步骤的所有后续步骤中流转过的步骤都进行挂起操作 * * @param currentProcessTaskStepVo 步骤信息 + * @param operationType 导致步骤挂起的操作 */ - private void hangPostStep(ProcessTaskStepVo currentProcessTaskStepVo) { + private void hangPostStep(ProcessTaskStepVo currentProcessTaskStepVo, IOperationType operationType) { //// if (!currentProcessTaskStepVo.getId().equals(currentProcessTaskStepVo.getStartProcessTaskStepId())) { // List nextTaskStepRelList = processTaskMapper.getProcessTaskStepRelByFromId(currentProcessTaskStepVo.getId()); // for (ProcessTaskStepRelVo nextTaskStepRelVo : nextTaskStepRelList) { @@ -2713,7 +2719,7 @@ public abstract class ProcessStepHandlerBase implements IProcessStepHandler { protected void myExecute(ProcessTaskStepVo processTaskStepVo) { IProcessStepHandler processStepHandler = ProcessStepHandlerFactory.getHandler(processTaskStepVo.getHandler()); if (processStepHandler != null) { - processStepHandler.hang(processTaskStepVo); + processStepHandler.hang(processTaskStepVo, operationType); } } }; @@ -2984,7 +2990,7 @@ public abstract class ProcessStepHandlerBase implements IProcessStepHandler { resetConvergeInfo(currentProcessTaskStepVo); /* 如果当前步骤是二次进入(后续路径已经走过),则需要对所有后续流转过的步骤都进行挂起操作 **/ - hangPostStep(currentProcessTaskStepVo); + hangPostStep(currentProcessTaskStepVo, ProcessTaskStepOperationType.STEP_REDO); resetPostStepRelIsHit(currentProcessTaskStepVo.getProcessTaskId(), currentProcessTaskStepVo.getId()); /* 获取当前步骤状态 **/