From 98435cefa29bddac143ea3c2c6762595ef31518f Mon Sep 17 00:00:00 2001
From: xuhy <3313886187@qq.com>
Date: 星期三, 09 七月 2025 09:17:09 +0800
Subject: [PATCH] bug修改

---
 ruoyi-admin/src/main/java/com/ruoyi/web/controller/task/TaskUtil.java |   29 +++++++++++++++++++++++++----
 1 files changed, 25 insertions(+), 4 deletions(-)

diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/task/TaskUtil.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/task/TaskUtil.java
index 0cb80f4..adf3fd3 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/task/TaskUtil.java
+++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/task/TaskUtil.java
@@ -11,6 +11,7 @@
 import com.ruoyi.system.model.*;
 import com.ruoyi.system.service.*;
 import javafx.concurrent.Task;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.poi.ss.formula.functions.T;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.scheduling.annotation.Scheduled;
@@ -27,6 +28,7 @@
  * @author xiaochen
  * @date 2025/6/11 18:39
  */
+@Slf4j
 @Component
 public class TaskUtil {
 
@@ -90,7 +92,7 @@
         // 通过模板id查询员工巡检员
         List<SysUser> sysUsers = sysUserService.selectUserByTempLateId(template.getId());
         // 创建任务
-        list.forEach(detail -> {
+        for (TTemplateDetail detail : list) {
             // 计算周期
             int cycle = detail.getCycle();
             switch (detail.getCycleType()){
@@ -116,6 +118,13 @@
             int num3 = detail.getNum3();
             // 获取点位类型的占比
             String num4 = detail.getNum4();
+
+            // 未绑定员工
+            if(CollectionUtils.isEmpty(sysUsers)){
+                continue;
+            }
+
+
 
             SysUser sysUser = sysUsers.get(0);
             List<TProjectDept> projectDeptLists = new ArrayList<>();
@@ -189,6 +198,10 @@
             }
             int dayCleanerCount = cleanerSums / cycle;
 
+            if((cycle == detail.getCurrentValue()) && cleanerSums % cycle != 0){
+                dayCleanerCount++;
+            }
+
             // 获取保洁员权重
             List<String> cleanerIds = redisCache.getCacheList(detail.getId() + CLEANER_WEIGHT);
             // 获取保洁员列表
@@ -209,6 +222,10 @@
 
             // 抽取保洁员
             List<TCleaner> tCleaners = randomSelection(cleaners, dayCleanerCount);
+            if(CollectionUtils.isEmpty(tCleaners)){
+                log.error("没有可抽取的保洁员");
+                continue;
+            }
             if(tCleaners.size() < dayCleanerCount){
                 List<String> cleanIds = tCleaners.stream().map(TCleaner::getId).collect(Collectors.toList());
                 List<TCleaner> cleaners1 = cleanerService.list(Wrappers.lambdaQuery(TCleaner.class)
@@ -217,7 +234,8 @@
                 redisCache.deleteObject(detail.getId() + CLEANER_WEIGHT);
                 List<TCleaner> tCleaners1 = randomSelection(cleaners1, dayCleanerCount - tCleaners.size());
                 List<String> cleanIds1 = tCleaners1.stream().map(TCleaner::getId).collect(Collectors.toList());
-                // 将已抽取的项目部id保存到redis中
+                // 将已抽取的保洁员id保存到redis中
+                cleanIds1.addAll(cleanIds);
                 redisCache.setCacheList(detail.getId() + CLEANER_WEIGHT, cleanIds1);
                 tCleaners.addAll(tCleaners1);
             }else {
@@ -266,6 +284,10 @@
                 detail.setCurrentValue(0);
                 // 将重复点位置空
                 redisCache.deleteObject(detail.getId() + REPEAT_LOCATION);
+                // 将项目部权重置空
+                redisCache.deleteObject(detail.getId() + PROJECT_DEPT_WEIGHT);
+                // 将保洁员权重置空
+                redisCache.deleteObject(detail.getId() + CLEANER_WEIGHT);
             }
 
             // 创建任务
@@ -303,8 +325,7 @@
             template.setTaskCount(tasks.size());
             templateService.updateById(template);
             templateDetailService.updateById(detail);
-        });
-
+        }
     }
 
     /**

--
Gitblit v1.7.1