From 5d75fcaea0a3774052b7484a4ffe755258502363 Mon Sep 17 00:00:00 2001
From: wlzboy <66905212@qq.com>
Date: 星期六, 06 十二月 2025 20:49:11 +0800
Subject: [PATCH] fix:开始执行人员就绪按钮

---
 ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysTaskServiceImpl.java |   92 ++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 92 insertions(+), 0 deletions(-)

diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysTaskServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysTaskServiceImpl.java
index b983222..a6bca50 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysTaskServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysTaskServiceImpl.java
@@ -36,6 +36,7 @@
 import com.ruoyi.system.service.ISysTaskEmergencyService;
 import com.ruoyi.system.service.ITaskAttachmentSyncService;
 import com.ruoyi.system.service.IMapService;
+import com.ruoyi.system.service.ISysConfigService;
 import com.ruoyi.system.event.TaskCreatedEvent;
 import com.ruoyi.system.event.TaskAssignedEvent;
 import com.ruoyi.system.event.TaskStatusChangedEvent;
@@ -99,6 +100,9 @@
 
     @Autowired(required = false)
     private IMapService mapService;
+
+    @Autowired
+    private ISysConfigService configService;
 
     /**
      * 鏌ヨ浠诲姟绠$悊
@@ -2344,6 +2348,22 @@
             }
         }
         
+        // 3. 妫�鏌ユ墽琛屼汉鏄惁鍏ㄩ儴灏辩华锛堝彈閰嶇疆寮�鍏虫帶鍒讹級
+        String readyCheckEnabled = configService.selectConfigByKey("task.assignee.ready.check.enabled");
+        if ("true".equalsIgnoreCase(readyCheckEnabled)) {
+             assignees = task.getAssignees();
+            if (assignees != null && !assignees.isEmpty()) {
+                boolean allReady = assignees.stream()
+                    .allMatch(a -> "1".equals(a.getIsReady()));
+                if (!allReady) {
+                    Map<String, Object> conflict = new HashMap<>();
+                    conflict.put("type", "assigneeReady");
+                    conflict.put("message", "瀛樺湪鏈氨缁殑鎵ц浜猴紝璇风瓑寰呮墍鏈夋墽琛屼汉鐐瑰嚮灏辩华鍚庡啀鍑鸿溅");
+                    conflicts.add(conflict);
+                }
+            }
+        }
+        
         // 杩斿洖缁撴灉
         Map<String, Object> result = new HashMap<>();
         result.put("valid", conflicts.isEmpty());
@@ -2351,5 +2371,77 @@
         
         return com.ruoyi.common.core.domain.AjaxResult.success(result);
     }
+
+    /**
+     * 鎵ц浜虹偣鍑诲氨缁�
+     * 
+     * @param taskId 浠诲姟ID
+     * @param userId 鐢ㄦ埛ID
+     * @return 缁撴灉
+     */
+    @Override
+    @Transactional
+    public com.ruoyi.common.core.domain.AjaxResult setAssigneeReady(Long taskId, Long userId) {
+        // 1. 鏌ヨ鎵ц浜哄叧鑱斾俊鎭�
+        List<SysTaskAssignee> assignees = sysTaskAssigneeMapper.selectSysTaskAssigneeByTaskId(taskId);
+        SysTaskAssignee targetAssignee = assignees.stream()
+            .filter(a -> a.getUserId().equals(userId))
+            .findFirst()
+            .orElse(null);
+        
+        if (targetAssignee == null) {
+            return com.ruoyi.common.core.domain.AjaxResult.error("鎮ㄤ笉鏄浠诲姟鐨勬墽琛屼汉");
+        }
+        
+        // 2. 鏇存柊灏辩华鐘舵��
+        targetAssignee.setIsReady("1");
+        targetAssignee.setReadyTime(new Date());
+        targetAssignee.setUpdateBy(SecurityUtils.getUsername());
+        targetAssignee.setUpdateTime(new Date());
+        
+        sysTaskAssigneeMapper.updateSysTaskAssignee(targetAssignee);
+        
+        // 3. 妫�鏌ユ槸鍚︽墍鏈夋墽琛屼汉閮藉凡灏辩华
+        boolean allReady = assignees.stream()
+            .allMatch(a -> a.getUserId().equals(userId) || "1".equals(a.getIsReady()));
+        
+        Map<String, Object> result = new HashMap<>();
+        result.put("allReady", allReady);
+        result.put("message", "灏辩华鎴愬姛");
+        
+        return com.ruoyi.common.core.domain.AjaxResult.success(result);
+    }
+
+    /**
+     * 鍙栨秷鎵ц浜哄氨缁�
+     * 
+     * @param taskId 浠诲姟ID
+     * @param userId 鐢ㄦ埛ID
+     * @return 缁撴灉
+     */
+    @Override
+    @Transactional
+    public com.ruoyi.common.core.domain.AjaxResult cancelAssigneeReady(Long taskId, Long userId) {
+        // 鏌ヨ鎵ц浜哄叧鑱斾俊鎭�
+        List<SysTaskAssignee> assignees = sysTaskAssigneeMapper.selectSysTaskAssigneeByTaskId(taskId);
+        SysTaskAssignee targetAssignee = assignees.stream()
+            .filter(a -> a.getUserId().equals(userId))
+            .findFirst()
+            .orElse(null);
+        
+        if (targetAssignee == null) {
+            return com.ruoyi.common.core.domain.AjaxResult.error("鎮ㄤ笉鏄浠诲姟鐨勬墽琛屼汉");
+        }
+        
+        // 鏇存柊灏辩华鐘舵��
+        targetAssignee.setIsReady("0");
+        targetAssignee.setReadyTime(null);
+        targetAssignee.setUpdateBy(SecurityUtils.getUsername());
+        targetAssignee.setUpdateTime(new Date());
+        
+        sysTaskAssigneeMapper.updateSysTaskAssignee(targetAssignee);
+        
+        return com.ruoyi.common.core.domain.AjaxResult.success("宸插彇娑堝氨缁�");
+    }
    
 }

--
Gitblit v1.9.1