Bladeren bron

add 添加撤销,终止,驳回,作废等状态校验

songgaoshuai 1 jaar geleden
bovenliggende
commit
d4685e5f95

+ 59 - 0
ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/enums/BusinessStatusEnum.java

@@ -89,5 +89,64 @@ public enum BusinessStatusEnum {
             throw new ServiceException("流程状态为空!");
         }
     }
+
+    /**
+     * 撤销流程校验
+     *
+     * @param status 状态
+     */
+    public static void checkCancelStatus(String status) {
+        if (CANCEL.getStatus().equals(status)) {
+            throw new ServiceException("该单据已撤销!");
+        } else if (FINISH.getStatus().equals(status)) {
+            throw new ServiceException("该单据已完成申请!");
+        } else if (INVALID.getStatus().equals(status)) {
+            throw new ServiceException("该单据已作废!");
+        } else if (TERMINATION.getStatus().equals(status)) {
+            throw new ServiceException("该单据已终止!");
+        } else if (BACK.getStatus().equals(status)) {
+            throw new ServiceException("该单据已退回!");
+        } else if (StringUtils.isBlank(status)) {
+            throw new ServiceException("流程状态为空!");
+        }
+    }
+
+    /**
+     * 驳回流程校验
+     *
+     * @param status 状态
+     */
+    public static void checkBackStatus(String status) {
+        if (BACK.getStatus().equals(status)) {
+            throw new ServiceException("该单据已退回!");
+        } else if (FINISH.getStatus().equals(status)) {
+            throw new ServiceException("该单据已完成申请!");
+        } else if (INVALID.getStatus().equals(status)) {
+            throw new ServiceException("该单据已作废!");
+        } else if (TERMINATION.getStatus().equals(status)) {
+            throw new ServiceException("该单据已终止!");
+        } else if (CANCEL.getStatus().equals(status)) {
+            throw new ServiceException("该单据已撤销!");
+        } else if (StringUtils.isBlank(status)) {
+            throw new ServiceException("流程状态为空!");
+        }
+    }
+
+    /**
+     * 作废,终止流程校验
+     *
+     * @param status 状态
+     */
+    public static void checkInvalidStatus(String status) {
+        if (FINISH.getStatus().equals(status)) {
+            throw new ServiceException("该单据已完成申请!");
+        } else if (INVALID.getStatus().equals(status)) {
+            throw new ServiceException("该单据已作废!");
+        } else if (TERMINATION.getStatus().equals(status)) {
+            throw new ServiceException("该单据已终止!");
+        } else if (StringUtils.isBlank(status)) {
+            throw new ServiceException("流程状态为空!");
+        }
+    }
 }
 

+ 3 - 8
ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActProcessInstanceServiceImpl.java

@@ -60,7 +60,6 @@ import java.util.List;
 import java.util.*;
 import java.util.stream.Collectors;
 
-
 /**
  * 流程实例 服务层实现
  *
@@ -464,10 +463,8 @@ public class ActProcessInstanceServiceImpl implements IActProcessInstanceService
             for (Task task : StreamUtils.filter(list, e -> StringUtils.isBlank(e.getParentTaskId()))) {
                 taskService.addComment(task.getId(), task.getProcessInstanceId(), TaskStatusEnum.INVALID.getStatus(), deleteReason);
             }
-            HistoricProcessInstance historicProcessInstance =  QueryUtils.hisInstanceQuery(processInvalidBo.getProcessInstanceId()).singleResult();
-            if (ObjectUtil.isNotEmpty(historicProcessInstance) && BusinessStatusEnum.FINISH.getStatus().equals(historicProcessInstance.getBusinessStatus())) {
-                throw new ServiceException("该单据已完成申请!");
-            }
+            HistoricProcessInstance historicProcessInstance = QueryUtils.hisInstanceQuery(processInvalidBo.getProcessInstanceId()).singleResult();
+            BusinessStatusEnum.checkInvalidStatus(historicProcessInstance.getBusinessStatus());
             runtimeService.updateBusinessStatus(processInvalidBo.getProcessInstanceId(), BusinessStatusEnum.INVALID.getStatus());
             runtimeService.deleteProcessInstance(processInvalidBo.getProcessInstanceId(), deleteReason);
             FlowProcessEventHandler processHandler = flowEventStrategy.getProcessHandler(historicProcessInstance.getProcessDefinitionKey());
@@ -577,9 +574,7 @@ public class ActProcessInstanceServiceImpl implements IActProcessInstanceService
             if (processInstance.isSuspended()) {
                 throw new ServiceException(FlowConstant.MESSAGE_SUSPENDED);
             }
-            if (BusinessStatusEnum.CANCEL.getStatus().equals(processInstance.getBusinessStatus())) {
-                throw new ServiceException("该单据已撤销!");
-            }
+            BusinessStatusEnum.checkCancelStatus(processInstance.getBusinessStatus());
             List<Task> taskList = QueryUtils.taskQuery(processInstanceId).list();
             for (Task task : taskList) {
                 taskService.setAssignee(task.getId(), String.valueOf(LoginHelper.getUserId()));

+ 2 - 3
ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActTaskServiceImpl.java

@@ -474,9 +474,7 @@ public class ActTaskServiceImpl implements IActTaskService {
         }
         HistoricProcessInstance historicProcessInstance = QueryUtils.hisInstanceQuery()
             .processInstanceBusinessKey(task.getProcessInstanceId()).singleResult();
-        if (ObjectUtil.isNotEmpty(historicProcessInstance) && BusinessStatusEnum.TERMINATION.getStatus().equals(historicProcessInstance.getBusinessStatus())) {
-            throw new ServiceException("该单据已终止!");
-        }
+        BusinessStatusEnum.checkInvalidStatus(historicProcessInstance.getBusinessStatus());
         try {
             if (StringUtils.isBlank(terminationBo.getComment())) {
                 terminationBo.setComment(LoginHelper.getLoginUser().getNickname() + "终止了申请");
@@ -654,6 +652,7 @@ public class ActTaskServiceImpl implements IActTaskService {
             if (BusinessStatusEnum.BACK.getStatus().equals(processInstance.getBusinessStatus())) {
                 throw new ServiceException("该单据已退回!");
             }
+            BusinessStatusEnum.checkBackStatus(processInstance.getBusinessStatus());
             //判断是否有多个任务
             List<Task> taskList = QueryUtils.taskQuery(processInstanceId).list();
             //申请人节点