瀏覽代碼

update 优化 工作流后台发起或审批可以手动设置办理人

疯狂的狮子Li 10 月之前
父節點
當前提交
2b0dd82d3d

+ 5 - 0
ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/domain/dto/CompleteTaskDTO.java

@@ -50,6 +50,11 @@ public class CompleteTaskDTO implements Serializable {
      */
      */
     private String notice;
     private String notice;
 
 
+    /**
+     * 办理人(可不填 用于覆盖当前节点办理人)
+     */
+    private String handler;
+
     /**
     /**
      * 流程变量
      * 流程变量
      */
      */

+ 5 - 0
ruoyi-common/ruoyi-common-core/src/main/java/org/dromara/common/core/domain/dto/StartProcessDTO.java

@@ -30,6 +30,11 @@ public class StartProcessDTO implements Serializable {
      */
      */
     private String flowCode;
     private String flowCode;
 
 
+    /**
+     * 办理人(可不填 用于覆盖当前节点办理人)
+     */
+    private String handler;
+
     /**
     /**
      * 流程变量,前端会提交一个元素{'entity': {业务详情数据对象}}
      * 流程变量,前端会提交一个元素{'entity': {业务详情数据对象}}
      */
      */

+ 5 - 0
ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/CompleteTaskBo.java

@@ -53,6 +53,11 @@ public class CompleteTaskBo implements Serializable {
      */
      */
     private String notice;
     private String notice;
 
 
+    /**
+     * 办理人(可不填 用于覆盖当前节点办理人)
+     */
+    private String handler;
+
     /**
     /**
      * 流程变量
      * 流程变量
      */
      */

+ 5 - 0
ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/StartProcessBo.java

@@ -34,6 +34,11 @@ public class StartProcessBo implements Serializable {
     @NotBlank(message = "流程定义编码不能为空", groups = {AddGroup.class})
     @NotBlank(message = "流程定义编码不能为空", groups = {AddGroup.class})
     private String flowCode;
     private String flowCode;
 
 
+    /**
+     * 办理人(可不填 用于覆盖当前节点办理人)
+     */
+    private String handler;
+
     /**
     /**
      * 流程变量,前端会提交一个元素{'entity': {业务详情数据对象}}
      * 流程变量,前端会提交一个元素{'entity': {业务详情数据对象}}
      */
      */

+ 2 - 0
ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java

@@ -126,6 +126,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
         variables.put(FlowConstant.AUTO_PASS, autoPass);
         variables.put(FlowConstant.AUTO_PASS, autoPass);
 
 
         FlowParams flowParams = FlowParams.build()
         FlowParams flowParams = FlowParams.build()
+            .handler(startProcessBo.getHandler())
             .flowCode(startProcessBo.getFlowCode())
             .flowCode(startProcessBo.getFlowCode())
             .variable(startProcessBo.getVariables())
             .variable(startProcessBo.getVariables())
             .flowStatus(BusinessStatusEnum.DRAFT.getStatus());
             .flowStatus(BusinessStatusEnum.DRAFT.getStatus());
@@ -186,6 +187,7 @@ public class FlwTaskServiceImpl implements IFlwTaskService {
             }
             }
             // 构建流程参数,包括变量、跳转类型、消息、处理人、权限等信息
             // 构建流程参数,包括变量、跳转类型、消息、处理人、权限等信息
             FlowParams flowParams = FlowParams.build()
             FlowParams flowParams = FlowParams.build()
+                .handler(completeTaskBo.getHandler())
                 .variable(variables)
                 .variable(variables)
                 .skipType(SkipType.PASS.getKey())
                 .skipType(SkipType.PASS.getKey())
                 .message(completeTaskBo.getMessage())
                 .message(completeTaskBo.getMessage())

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

@@ -9,12 +9,10 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import lombok.RequiredArgsConstructor;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
-import org.dromara.common.core.domain.dto.CompleteTaskDTO;
 import org.dromara.common.core.domain.dto.StartProcessDTO;
 import org.dromara.common.core.domain.dto.StartProcessDTO;
-import org.dromara.common.core.domain.dto.StartProcessReturnDTO;
-import org.dromara.common.core.domain.event.ProcessTaskEvent;
 import org.dromara.common.core.domain.event.ProcessDeleteEvent;
 import org.dromara.common.core.domain.event.ProcessDeleteEvent;
 import org.dromara.common.core.domain.event.ProcessEvent;
 import org.dromara.common.core.domain.event.ProcessEvent;
+import org.dromara.common.core.domain.event.ProcessTaskEvent;
 import org.dromara.common.core.enums.BusinessStatusEnum;
 import org.dromara.common.core.enums.BusinessStatusEnum;
 import org.dromara.common.core.exception.ServiceException;
 import org.dromara.common.core.exception.ServiceException;
 import org.dromara.common.core.service.WorkflowService;
 import org.dromara.common.core.service.WorkflowService;
@@ -132,12 +130,14 @@ public class TestLeaveServiceImpl implements ITestLeaveService {
             // 后端发起需要忽略权限
             // 后端发起需要忽略权限
             bo.getParams().put("ignore", true);
             bo.getParams().put("ignore", true);
 
 
+            StartProcessDTO startProcess = new StartProcessDTO();
+            startProcess.setBusinessId(leave.getId().toString());
+            startProcess.setFlowCode(StringUtils.isEmpty(bo.getFlowCode()) ? "leave1" : bo.getFlowCode());
+            startProcess.setVariables(bo.getParams());
+            // 后端发起 如果没有登录用户 比如定时任务 可以手动设置一个处理人id
+            // startProcess.setHandler("0");
 
 
-            boolean flag1 = workflowService.startCompleteTask(new StartProcessDTO() {{
-                setBusinessId(leave.getId().toString());
-                setFlowCode(StringUtils.isEmpty(bo.getFlowCode()) ? "leave1" : bo.getFlowCode());
-                setVariables(bo.getParams());
-            }});
+            boolean flag1 = workflowService.startCompleteTask(startProcess);
             if (!flag1) {
             if (!flag1) {
                 throw new ServiceException("流程发起异常");
                 throw new ServiceException("流程发起异常");
             }
             }

+ 14 - 10
ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/WorkflowServiceImpl.java

@@ -161,16 +161,20 @@ public class WorkflowServiceImpl implements WorkflowService {
     @Transactional(rollbackFor = Exception.class)
     @Transactional(rollbackFor = Exception.class)
     public boolean startCompleteTask(StartProcessDTO startProcess) {
     public boolean startCompleteTask(StartProcessDTO startProcess) {
         try {
         try {
-            StartProcessReturnDTO result = flwTaskService.startWorkFlow(new StartProcessBo() {{
-                setBusinessId(startProcess.getBusinessId());
-                setFlowCode(startProcess.getFlowCode());
-                setVariables(startProcess.getVariables());
-            }});
-            boolean flag = flwTaskService.completeTask(new CompleteTaskBo() {{
-                setTaskId(result.getTaskId());
-                setMessageType(Collections.singletonList(MessageTypeEnum.SYSTEM_MESSAGE.getCode()));
-                setVariables(startProcess.getVariables());
-            }});
+            StartProcessBo processBo = new StartProcessBo();
+            processBo.setBusinessId(startProcess.getBusinessId());
+            processBo.setFlowCode(startProcess.getFlowCode());
+            processBo.setVariables(startProcess.getVariables());
+            processBo.setHandler(startProcess.getHandler());
+
+            StartProcessReturnDTO result = flwTaskService.startWorkFlow(processBo);
+            CompleteTaskBo taskBo = new CompleteTaskBo();
+            taskBo.setTaskId(result.getTaskId());
+            taskBo.setMessageType(Collections.singletonList(MessageTypeEnum.SYSTEM_MESSAGE.getCode()));
+            taskBo.setVariables(startProcess.getVariables());
+            taskBo.setHandler(startProcess.getHandler());
+
+            boolean flag = flwTaskService.completeTask(taskBo);
             if (!flag) {
             if (!flag) {
                 throw new ServiceException("流程发起异常");
                 throw new ServiceException("流程发起异常");
             }
             }