From 37f55514ad2f02397fd75c7d98cea25e371243c7 Mon Sep 17 00:00:00 2001
From: zhangc <zc@123>
Date: 星期一, 20 一月 2025 16:54:29 +0800
Subject: [PATCH] 添加库位规则查找,优化自动移动逻辑

---
 src/main/java/com/zy/common/service/AgvCommonService.java   |   23 +++++
 src/main/java/com/zy/asrs/task/core/ProcesTimeData.java     |   19 ++++
 src/main/java/com/zy/asrs/task/AutoMoveScheduler.java       |   93 ++++++++++-------------
 src/main/java/com/zy/asrs/utils/TimeUtils.java              |   29 +++++++
 src/main/java/com/zy/asrs/task/handler/AutoMoveHandler.java |   23 ++++-
 5 files changed, 129 insertions(+), 58 deletions(-)

diff --git a/src/main/java/com/zy/asrs/task/AutoMoveScheduler.java b/src/main/java/com/zy/asrs/task/AutoMoveScheduler.java
index b267d6b..2182cb5 100644
--- a/src/main/java/com/zy/asrs/task/AutoMoveScheduler.java
+++ b/src/main/java/com/zy/asrs/task/AutoMoveScheduler.java
@@ -11,7 +11,9 @@
 import com.zy.asrs.service.AgvBasDevpService;
 import com.zy.asrs.service.AgvLocMastService;
 import com.zy.asrs.service.AgvWrkMastService;
+import com.zy.asrs.task.core.ProcesTimeData;
 import com.zy.asrs.task.handler.AutoMoveHandler;
+import com.zy.asrs.utils.TimeUtils;
 import com.zy.system.entity.Config;
 import com.zy.system.service.ConfigService;
 import lombok.extern.slf4j.Slf4j;
@@ -66,13 +68,7 @@
      */
     @Scheduled(cron = "0/1 * * * * ? ")
     private synchronized void execute2() {
-        List<AgvWrkMast> agvWrkMastList = agvWrkMastService.selectList(new EntityWrapper<AgvWrkMast>()
-                .eq("wrk_sts", 22)
-                .andNew().eq("io_type", 108)
-                .andNew()
-                .eq("crn_no", 2).or().eq("crn_no", 3)
-                .orderBy("io_pri", false).orderBy("appe_time", true)
-        );
+        List<AgvWrkMast> agvWrkMastList = agvWrkMastService.selectList(new EntityWrapper<AgvWrkMast>().eq("wrk_sts", 22).andNew().eq("io_type", 108).andNew().eq("crn_no", 2).or().eq("crn_no", 3).orderBy("io_pri", false).orderBy("appe_time", true));
         if (agvWrkMastList.isEmpty()) {
             return;
         }
@@ -116,12 +112,7 @@
      */
     @Scheduled(cron = "0/2 * * * * ? ")
     private void execute3() {
-        List<AgvWrkMast> agvWrkMastList = agvWrkMastService.selectList(new EntityWrapper<AgvWrkMast>()
-                .eq("wrk_sts", 22)
-                .andNew().eq("io_type", 111)
-                .orderBy("io_pri", false)
-                .orderBy("appe_time", true)
-        );
+        List<AgvWrkMast> agvWrkMastList = agvWrkMastService.selectList(new EntityWrapper<AgvWrkMast>().eq("wrk_sts", 22).andNew().eq("io_type", 111).orderBy("io_pri", false).orderBy("appe_time", true));
         if (agvWrkMastList.isEmpty()) {
             return;
         }
@@ -137,12 +128,7 @@
 
     @Scheduled(cron = "0/2 * * * * ? ")
     private void execute4() {
-        List<AgvWrkMast> agvWrkMastList = agvWrkMastService.selectList(new EntityWrapper<AgvWrkMast>()
-                .eq("wrk_sts", 22)
-                .andNew().eq("io_type", 114)
-                .orderBy("io_pri", false)
-                .orderBy("appe_time", true)
-        );
+        List<AgvWrkMast> agvWrkMastList = agvWrkMastService.selectList(new EntityWrapper<AgvWrkMast>().eq("wrk_sts", 22).andNew().eq("io_type", 114).orderBy("io_pri", false).orderBy("appe_time", true));
         if (agvWrkMastList.isEmpty()) {
             return;
         }
@@ -186,11 +172,7 @@
     @Scheduled(cron = "0/2 * * * * ? ")
     private void autoEmptyBack3() {
         // 宸ヤ綔妗d负201 涓� 鍏ュ嚭搴撶被鍨嬩负109
-        List<AgvWrkMast> agvWrkMastList = agvWrkMastService.selectList(new EntityWrapper<AgvWrkMast>()
-                .eq("wrk_sts", 214)
-                .eq("loc_no", "")
-                .eq("io_type", 113)
-                .orderBy("io_pri", false));
+        List<AgvWrkMast> agvWrkMastList = agvWrkMastService.selectList(new EntityWrapper<AgvWrkMast>().eq("wrk_sts", 214).eq("loc_no", "").eq("io_type", 113).orderBy("io_pri", false));
         if (agvWrkMastList.isEmpty()) {
             return;
         }
@@ -234,13 +216,9 @@
     @Scheduled(cron = "0/2 * * * * ? ")
     private void autoEmptyBack4() {
         // 鏌ヨ 涓嶄负1妤肩殑绌鸿揣鏋�
-        List<AgvLocMast> agvLocMasts = agvLocMastService.selectList(
-                new EntityWrapper<AgvLocMast>()
-                        // TODO 鍥涙湡
-                        .eq("loc_sts", "D")
-                        .eq("loc_type1", 3)
-                        .ne("floor", 1)
-                        .ne("lev1", 1));
+        List<AgvLocMast> agvLocMasts = agvLocMastService.selectList(new EntityWrapper<AgvLocMast>()
+                // TODO 鍥涙湡
+                .eq("loc_sts", "D").eq("loc_type1", 3).ne("floor", 1).ne("lev1", 1));
         if (agvLocMasts.isEmpty()) {
             return;
         }
@@ -255,16 +233,37 @@
 
 
     /**
-     // TODO 鍥涙湡
+     * 灏嗕簩鍘傜殑6绫诲瀷鐨勭┖璐ф灦璋冩嫧鍥炲惛濉戜簩妤�
      */
+    // TODO 鍥涙湡
     @Scheduled(cron = "0/2 * * * * ? ")
     private void autoEmptyBackSiqi() {
+        // 鏌ヨ6绫诲瀷绌鸿揣鏋惰繑鍥炵殑鎵ц鏃堕棿鐐�
+        Config config = configService.selectOne(new EntityWrapper<Config>().eq("code", "RETURN_6_TIME"));
+        if (config != null && !Cools.isEmpty(config.getValue())) {
+            boolean flag = false;
+            try {
+                // 鍒ゆ柇鏄惁鍦ㄦ墽琛屾椂闂村唴
+                ProcesTimeData procesTimeData = JSONObject.parseObject(config.getValue(), ProcesTimeData.class);
+                if (procesTimeData != null && TimeUtils.between(procesTimeData)) {
+                    flag = true;
+                }
+            } catch (Exception e) {
+                log.error("6绫诲瀷绌鸿揣鏋惰繑鍥炵殑鎵ц鏃堕棿鐐硅В鏋愬紓甯革細===銆嬪紓甯稿師鍥狅細" + e.getMessage());
+                flag = true;
+            }
+            if (flag) {
+                executeLocType6();
+            }
+        } else {
+            executeLocType6();
+        }
+    }
+
+
+    private void executeLocType6() {
         // 鏌ヨ 浜屽巶鐨勭殑鍗婃垚鍝佺澹崇被鍨嬬殑绌鸿揣鏋�
-        List<AgvLocMast> agvLocMasts = agvLocMastService.selectList(
-                new EntityWrapper<AgvLocMast>()
-                        .eq("loc_sts", "D")
-                        .eq("loc_type1", 6)
-                        .eq("floor", 2));
+        List<AgvLocMast> agvLocMasts = agvLocMastService.selectList(new EntityWrapper<AgvLocMast>().eq("loc_sts", "D").eq("loc_type1", 6).eq("floor", 2));
         if (agvLocMasts.isEmpty()) {
             return;
         }
@@ -276,7 +275,6 @@
             }
         }
     }
-
 
     private boolean determineFloorConnection(Integer floor) {
         try {
@@ -304,10 +302,7 @@
      */
     @Scheduled(cron = "0/2 * * * * ? ")
     private void autoEmptyBack5() {
-        List<AgvBasDevp> agvBasDevps = agvBasDevpService.selectList(new EntityWrapper<AgvBasDevp>()
-                .ne("floor", 1)
-                .eq("loc_sts", "F")
-                .like("dev_no", "DB"));
+        List<AgvBasDevp> agvBasDevps = agvBasDevpService.selectList(new EntityWrapper<AgvBasDevp>().ne("floor", 1).eq("loc_sts", "F").like("dev_no", "DB"));
         if (agvBasDevps.isEmpty()) {
             return;
         }
@@ -326,10 +321,7 @@
      */
     @Scheduled(cron = "0/2 * * * * ? ")
     private void autoEmptyBack6() {
-        List<AgvBasDevp> agvBasDevps = agvBasDevpService.selectList(new EntityWrapper<AgvBasDevp>()
-                .eq("floor", 1)
-                .eq("loc_sts", "F")
-                .like("dev_no", "DB"));
+        List<AgvBasDevp> agvBasDevps = agvBasDevpService.selectList(new EntityWrapper<AgvBasDevp>().eq("floor", 1).eq("loc_sts", "F").like("dev_no", "DB"));
         if (agvBasDevps.isEmpty()) {
             return;
         }
@@ -374,12 +366,7 @@
                     return;
                 }
 
-                List<AgvLocMast> agvLocMasts = agvLocMastService.selectList(
-                        new EntityWrapper<AgvLocMast>()
-                                .eq("floor", 1)
-                                .eq("lev1", 1)
-                                .eq("loc_sts", "F")
-                                .eq("loc_type1", 3));
+                List<AgvLocMast> agvLocMasts = agvLocMastService.selectList(new EntityWrapper<AgvLocMast>().eq("floor", 1).eq("lev1", 1).eq("loc_sts", "F").eq("loc_type1", 3));
                 if (agvLocMasts.isEmpty()) {
                     return;
                 }
@@ -393,4 +380,6 @@
             }
         }
     }
+
+
 }
diff --git a/src/main/java/com/zy/asrs/task/core/ProcesTimeData.java b/src/main/java/com/zy/asrs/task/core/ProcesTimeData.java
new file mode 100644
index 0000000..24df2df
--- /dev/null
+++ b/src/main/java/com/zy/asrs/task/core/ProcesTimeData.java
@@ -0,0 +1,19 @@
+package com.zy.asrs.task.core;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+public class ProcesTimeData implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    private Integer startHour;
+
+    private Integer startMinute;
+
+    private Integer endHour;
+
+    private Integer endMinute;
+
+}
diff --git a/src/main/java/com/zy/asrs/task/handler/AutoMoveHandler.java b/src/main/java/com/zy/asrs/task/handler/AutoMoveHandler.java
index 054bd68..344ef5b 100644
--- a/src/main/java/com/zy/asrs/task/handler/AutoMoveHandler.java
+++ b/src/main/java/com/zy/asrs/task/handler/AutoMoveHandler.java
@@ -9,6 +9,8 @@
 import com.zy.asrs.task.AbstractHandler;
 import com.zy.asrs.task.core.ReturnT;
 import com.zy.common.service.AgvCommonService;
+import com.zy.system.entity.Config;
+import com.zy.system.service.ConfigService;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -34,6 +36,8 @@
     private AgvWrkDetlService agvWrkDetlService;
     @Autowired
     AgvBasDevpService agvBasDevpService;
+    @Autowired
+    private ConfigService configService;
 
 //    public ReturnT<String> start(AgvLocMast agvLocMast) {
 //        // locType 1. 鑷姩锛� 2. 鎵嬪姩
@@ -490,10 +494,15 @@
             floor = "F2";
         }
         List<AgvWrkMast> agvWrkMasts = agvWrkMastService.selectList(new EntityWrapper<AgvWrkMast>().eq("io_type", 109).like("source_loc_no", floor).or().eq("io_type", 113));
-        if (agvWrkMasts.size() >= 5) {
-            //log.error("鏆傚仠鍥炴祦");
-            return FAIL;
-            //throw new CoolException("鏆傚仠鍥炴祦");
+        Config config = configService.selectOne(new EntityWrapper<Config>().eq("code", "RETURN_6_MAX"));
+        if (config == null && !Cools.isEmpty(config.getValue())) {
+            if (agvWrkMasts.size() >= Integer.parseInt(config.getValue())) {
+                return FAIL;
+            }
+        } else {
+            if (agvWrkMasts.size() >= 5) {
+                return FAIL;
+            }
         }
         //妫�绱㈢┖闂插彲鍏ユ帴椹充綅 娌℃湁绌洪棽鍙叆鎺ラ┏浣� 鐩存帴鎵惧簱浣�
         AgvBasDevp devpNo = agvCommonService.getDevpNo(6, agvLocMast.getFloor(), "Y", "Y");
@@ -503,12 +512,14 @@
             ioType = 109;
         } else {
             //妫�绱㈠簱浣嶏紝閫夋嫨鍚堥�傜殑搴撲綅
-            locMast = agvCommonService.getLocNo(6, 1, true, true);
+            locMast = agvCommonService.getLocByFloorAndLev1(6, 1, 2);
             locNo = locMast.getLocNo();
             wrkSts = 201L;
             ioType = 109;
         }
-
+        if (locMast == null) {
+            throw new CoolException("娌℃湁鍙敤鐨勫簱浣�");
+        }
         //鐢熸垚宸ヤ綔妗�
         AgvWrkMast mast = new AgvWrkMast();
         //宸ヤ綔鐘舵��
diff --git a/src/main/java/com/zy/asrs/utils/TimeUtils.java b/src/main/java/com/zy/asrs/utils/TimeUtils.java
new file mode 100644
index 0000000..a6c26b8
--- /dev/null
+++ b/src/main/java/com/zy/asrs/utils/TimeUtils.java
@@ -0,0 +1,29 @@
+package com.zy.asrs.utils;
+
+import com.zy.asrs.task.core.ProcesTimeData;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.LocalTime;
+
+public class TimeUtils {
+
+    public static boolean between(ProcesTimeData procesTimeData) {
+        if (procesTimeData.getEndHour() == 24) {
+            procesTimeData.setEndHour(0);
+            procesTimeData.setEndMinute(0);
+        }
+        LocalDateTime startTime = LocalDateTime.of(LocalDate.now(), LocalTime.of(procesTimeData.getStartHour(), procesTimeData.getStartMinute()));
+        LocalDateTime endTime = LocalDateTime.of(LocalDate.now(), LocalTime.of(procesTimeData.getEndHour(), procesTimeData.getEndMinute()));
+        if (procesTimeData.getStartHour() > procesTimeData.getEndHour()) {
+            endTime = endTime.plusDays(1);
+        }
+        LocalDateTime currentTime = LocalDateTime.now(); // 鑾峰彇褰撳墠鏃堕棿
+        System.out.println(startTime);
+        System.out.println(endTime);
+        if (currentTime.isAfter(startTime) && currentTime.isBefore(endTime)) {
+            return true;
+        }
+        return false;
+    }
+}
diff --git a/src/main/java/com/zy/common/service/AgvCommonService.java b/src/main/java/com/zy/common/service/AgvCommonService.java
index d917ed1..cde29ff 100644
--- a/src/main/java/com/zy/common/service/AgvCommonService.java
+++ b/src/main/java/com/zy/common/service/AgvCommonService.java
@@ -182,6 +182,29 @@
     }
 
     /*
+  搴撲綅瑙勫垯鏌ユ壘
+   */
+    public AgvLocMast getLocByFloorAndLev1(int type, int floor, int lev1) {
+
+        try {
+            EntityWrapper<AgvLocMast> wrapper = new EntityWrapper<>();
+            wrapper.eq("loc_sts", "O").eq("loc_type1", type);
+            wrapper.eq("floor", floor).eq("lev1", lev1);
+
+            List<AgvLocMast> agvLocMasts = agvLocMastService.selectList(wrapper);
+            for (AgvLocMast agvLocMast : agvLocMasts) {
+                AgvLocMast agvLocMast1 = agvLocMastService.selectOne(new EntityWrapper<AgvLocMast>().eq("loc_no", agvLocMast.getLocNo()));
+                if (agvLocMast1.getLocSts().equals("O")) {
+                    return agvLocMast1;
+                }
+            }
+            return null;
+        } catch (Exception e) {
+            throw new CoolException("鎼滅储搴撲綅鏃讹紝鏈壘鍒板彲鍏ュ簱搴撲綅銆�");
+        }
+    }
+
+    /*
     搴撲綅瑙勫垯鏌ユ壘
      */
     private AgvLocMast getLocByLocCodeRule(AgvWaitPakin agvWaitPakin, int floor) {

--
Gitblit v1.9.1