From 296466fa134e689368c5e34265a2030a1deb37b1 Mon Sep 17 00:00:00 2001
From: 疯狂的狮子Li <15040126243@163.com>
Date: 星期五, 24 一月 2025 13:08:28 +0800
Subject: [PATCH] !640 发布 5.3.0 新春版 祝大家新年快乐 Merge pull request !640 from 疯狂的狮子Li/dev

---
 ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java |   46 ++++++++++++++++++++++++++++++++--------------
 1 files changed, 32 insertions(+), 14 deletions(-)

diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java
index faa7d93..21a54d7 100644
--- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java
+++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/FlwTaskServiceImpl.java
@@ -11,6 +11,7 @@
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.dromara.common.core.domain.dto.StartProcessReturnDTO;
 import org.dromara.common.core.domain.dto.UserDTO;
 import org.dromara.common.core.enums.BusinessStatusEnum;
 import org.dromara.common.core.exception.ServiceException;
@@ -86,7 +87,7 @@
      */
     @Override
     @Transactional(rollbackFor = Exception.class)
-    public Map<String, Object> startWorkFlow(StartProcessBo startProcessBo) {
+    public StartProcessReturnDTO startWorkFlow(StartProcessBo startProcessBo) {
         String businessId = startProcessBo.getBusinessId();
         if (StringUtils.isBlank(businessId)) {
             throw new ServiceException("鍚姩宸ヤ綔娴佹椂蹇呴』鍖呭惈涓氬姟ID");
@@ -102,7 +103,10 @@
         if (ObjectUtil.isNotNull(flowInstance)) {
             BusinessStatusEnum.checkStartStatus(flowInstance.getFlowStatus());
             List<Task> taskList = taskService.list(new FlowTask().setInstanceId(flowInstance.getId()));
-            return Map.of(PROCESS_INSTANCE_ID, taskList.get(0).getInstanceId(), TASK_ID, taskList.get(0).getId());
+            StartProcessReturnDTO dto = new StartProcessReturnDTO();
+            dto.setProcessInstanceId(taskList.get(0).getInstanceId());
+            dto.setTaskId(taskList.get(0).getId());
+            return dto;
         }
         FlowParams flowParams = new FlowParams();
         flowParams.flowCode(startProcessBo.getFlowCode());
@@ -119,7 +123,10 @@
         if (taskList.size() > 1) {
             throw new ServiceException("璇锋鏌ユ祦绋嬬涓�涓幆鑺傛槸鍚︿负鐢宠浜猴紒");
         }
-        return Map.of(PROCESS_INSTANCE_ID, instance.getId(), TASK_ID, taskList.get(0).getId());
+        StartProcessReturnDTO dto = new StartProcessReturnDTO();
+        dto.setProcessInstanceId(instance.getId());
+        dto.setTaskId(taskList.get(0).getId());
+        return dto;
     }
 
     /**
@@ -138,12 +145,15 @@
             // 鑾峰彇鎶勯�佷汉
             List<FlowCopyBo> flowCopyList = completeTaskBo.getFlowCopyList();
             FlowTask flowTask = flowTaskMapper.selectById(taskId);
+            if (ObjectUtil.isNull(flowTask)) {
+                throw new ServiceException("娴佺▼浠诲姟涓嶅瓨鍦ㄦ垨浠诲姟宸插鎵癸紒");
+            }
             Instance ins = insService.getById(flowTask.getInstanceId());
             // 鑾峰彇娴佺▼瀹氫箟淇℃伅
             Definition definition = defService.getById(flowTask.getDefinitionId());
             // 妫�鏌ユ祦绋嬬姸鎬佹槸鍚︿负鑽夌銆佸凡鎾ら攢鎴栧凡閫�鍥炵姸鎬侊紝鑻ユ槸鍒欐墽琛屾祦绋嬫彁浜ょ洃鍚�
             if (BusinessStatusEnum.isDraftOrCancelOrBack(ins.getFlowStatus())) {
-                flowProcessEventHandler.processHandler(definition.getFlowCode(), ins.getBusinessId(), ins.getFlowStatus(), true);
+                flowProcessEventHandler.processHandler(definition.getFlowCode(), ins.getBusinessId(), ins.getFlowStatus(), null, true);
             }
             // 鏋勫缓娴佺▼鍙傛暟锛屽寘鎷彉閲忋�佽烦杞被鍨嬨�佹秷鎭�佸鐞嗕汉銆佹潈闄愮瓑淇℃伅
             FlowParams flowParams = new FlowParams();
@@ -180,23 +190,30 @@
         this.setCopy(task, flowCopyList);
         // 鏍规嵁娴佺▼瀹炰緥ID鏌ヨ鎵�鏈夊叧鑱旂殑浠诲姟
         List<FlowTask> flowTasks = this.selectByInstId(instance.getId());
+        if (CollUtil.isEmpty(flowTasks)) {
+            return;
+        }
+        List<Long> taskIdList = StreamUtils.toList(flowTasks, FlowTask::getId);
+        // 鑾峰彇涓庡綋鍓嶄换鍔″叧鑱旂殑鐢ㄦ埛鍒楄〃
+        List<User> associatedUsers = WorkflowUtils.getFlowUserService().getByAssociateds(taskIdList);
+        if (CollUtil.isEmpty(associatedUsers)) {
+            return;
+        }
         List<User> userList = new ArrayList<>();
         // 閬嶅巻浠诲姟鍒楄〃锛屽鐞嗘瘡涓换鍔$殑鍔炵悊浜�
         for (FlowTask flowTask : flowTasks) {
-            // 鑾峰彇涓庡綋鍓嶄换鍔″叧鑱旂殑鐢ㄦ埛鍒楄〃
-            List<User> associatedUsers = WorkflowUtils.getFlowUserService().getByAssociateds(Collections.singletonList(flowTask.getId()));
-            if (CollUtil.isNotEmpty(associatedUsers)) {
-                userList.addAll(WorkflowUtils.buildUser(associatedUsers, flowTask.getId()));
+            List<User> users = StreamUtils.filter(associatedUsers, user -> Objects.equals(user.getAssociated(), flowTask.getId()));
+            if (CollUtil.isNotEmpty(users)) {
+                userList.addAll(WorkflowUtils.buildUser(users, flowTask.getId()));
             }
         }
         // 鎵归噺鍒犻櫎鐜版湁浠诲姟鐨勫姙鐞嗕汉璁板綍
-        if (CollUtil.isNotEmpty(flowTasks)) {
-            WorkflowUtils.getFlowUserService().deleteByTaskIds(StreamUtils.toList(flowTasks, FlowTask::getId));
-        }
+        WorkflowUtils.getFlowUserService().deleteByTaskIds(taskIdList);
         // 纭繚瑕佷繚瀛樼殑 userList 涓嶄负绌�
-        if (CollUtil.isNotEmpty(userList)) {
-            WorkflowUtils.getFlowUserService().saveBatch(userList);
+        if (CollUtil.isEmpty(userList)) {
+            return;
         }
+        WorkflowUtils.getFlowUserService().saveBatch(userList);
     }
 
     /**
@@ -337,7 +354,7 @@
         wrapper.in(CollUtil.isNotEmpty(flowTaskBo.getCreateByIds()), "t.create_by", flowTaskBo.getCreateByIds());
         if (StringUtils.isNotBlank(flowTaskBo.getCategory())) {
             List<Long> categoryIds = flwCategoryMapper.selectCategoryIdsByParentId(Convert.toLong(flowTaskBo.getCategory()));
-            wrapper.in("t.category", categoryIds);
+            wrapper.in("t.category", StreamUtils.toList(categoryIds, Convert::toStr));
         }
         wrapper.orderByDesc("t.create_time");
         return wrapper;
@@ -371,6 +388,7 @@
             flowParams.skipType(SkipType.REJECT.getKey());
             flowParams.flowStatus(applyNodeCode.equals(bo.getNodeCode()) ? TaskStatusEnum.BACK.getStatus() : TaskStatusEnum.WAITING.getStatus())
                 .hisStatus(TaskStatusEnum.BACK.getStatus());
+            flowParams.hisTaskExt(bo.getFileId());
             taskService.skip(task.getId(), flowParams);
 
             Instance instance = insService.getById(inst.getId());

--
Gitblit v1.9.3