From 2a08feb00e3da1aacf1427751788fa37346dd2a2 Mon Sep 17 00:00:00 2001
From: zhangc <zc@123>
Date: 星期六, 15 三月 2025 14:12:00 +0800
Subject: [PATCH] 四期

---
 src/main/java/com/zy/common/service/AgvCommonService.java |  259 ++++++++++++++++++++++++++++++++++++++++++++-------
 1 files changed, 222 insertions(+), 37 deletions(-)

diff --git a/src/main/java/com/zy/common/service/AgvCommonService.java b/src/main/java/com/zy/common/service/AgvCommonService.java
index 76a2b87..e09b94e 100644
--- a/src/main/java/com/zy/common/service/AgvCommonService.java
+++ b/src/main/java/com/zy/common/service/AgvCommonService.java
@@ -6,6 +6,8 @@
 import com.zy.asrs.entity.*;
 import com.zy.asrs.service.*;
 import com.zy.asrs.utils.LocUtils;
+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;
@@ -35,6 +37,9 @@
     private LocRuleService locRuleService;
     @Autowired
     AgvBasDevpService agvBasDevpService;
+
+    @Autowired
+    private ConfigService configService;
 
     @Autowired
     private LocUtils locUtils;
@@ -76,9 +81,10 @@
 
     /**
      * 妫�绱㈠簱浣嶅彿
+     *
      * @return locNo 妫�绱㈠埌鐨勫簱浣嶅彿
      */
-    public AgvLocMast getLocNo(int type, int floor, boolean isEmpty, boolean isCurrLev, String factory) {
+    public AgvLocMast getLocNo(int type, int floor, boolean isEmpty, boolean isCurrLev) {
         // 鐩爣搴撲綅
         AgvLocMast locMast = null;
 //        if(Cools.isEmpty(agvWaitPakinList)){
@@ -118,18 +124,21 @@
 
         try {
             // 寮�濮嬫煡鎵惧簱浣� ==============================>>
-            // 鍥涙湡椤圭洰锛氶渶瑕佹敼鏌ユ壘搴撲綅閫昏緫
             // 绠卞3鍏ュ簱
-            if (type == 3) {
-                //浼樺厛鍏ュ簱鍚稿1妤硷紝鍦�2妤�
-                locMast = locUtils.getLocNoRuleByFactory(type, factory);
-            } else if (type == 6) {
-                //鍗婃垚鍝佺澹冲叆搴擄紝鍏ュ埌鍚稿2妤肩殑370涓簱浣嶉噷
-                locMast = locUtils.getLocNoRuleByFloor(type, floor, 2);
+//            if (type == 3 && factory != null) {
+//                //浼樺厛鍏ュ簱鍚稿1妤硷紝鍦�2妤�
+//                locMast = locUtils.getLocNoRuleByFactory(type, isEmpty, factory);
+//            } else if (type == 6) {
+//                //鍗婃垚鍝佺澹冲叆搴擄紝鍏ュ埌鍚稿2妤肩殑370涓簱浣嶉噷
+//                locMast = locUtils.getLocNoRuleByFloor(type, floor, isEmpty, 2);
+//            } else {
+//                //涓嶅姩杩欎釜閫昏緫
+            if (type == 6) {
+                locMast = locUtils.getLocNoRuleByFloor(type, floor);
             } else {
-                //涓嶅姩杩欎釜閫昏緫
                 locMast = getLocNoRule(type, floor, isEmpty, isCurrLev);
             }
+//            }
             if (locMast != null) {
                 return locMast;
             }
@@ -141,38 +150,168 @@
         throw new CoolException(floor + "妤硷紱璇ユゼ灞傛病鏈夌┖搴撲綅");
     }
 
-    /*
-    搴撲綅瑙勫垯鏌ユ壘
+    /**
+     * 搴撲綅瑙勫垯鏌ユ壘锛屼細棰勭暀20涓簱浣�
      */
-    private AgvLocMast getLocByLocRule(AgvWaitPakin agvWaitPakin, int floor) {
-        List<AgvLocRule> agvLocRules = null;
-        agvLocRules = agvLocRuleService.selectList(new EntityWrapper<AgvLocRule>()
-                .eq("matnr", agvWaitPakin.getMatnr())
-                .eq("batch", agvWaitPakin.getModel())
-                .eq("floor", floor));
-        if (Cools.isEmpty(agvLocRules)) {
-            agvLocRules = agvLocRuleService.selectList(new EntityWrapper<AgvLocRule>()
-                    .eq("matnr", agvWaitPakin.getMatnr())
-                    .eq("floor", floor));
+    public synchronized AgvLocMast getLocByLocRule20(int type, int floor, String factory, boolean flag) {
+
+        try {
+            EntityWrapper<AgvLocMast> wrapper = new EntityWrapper<>();
+            wrapper.eq("loc_sts", "O").eq("loc_type1", type);
+            List<AgvLocMast> agvLocMasts = new ArrayList<>();
+            //涓嶆槸绌烘澘浼樺厛鎵�2灞�
+            if (Cools.isEmpty(factory)) {
+                wrapper.eq("floor", floor).orderBy("lev1", true);
+            } else {
+                //B鏄簩鍘傦紝G鏄笁鍘�
+                if (factory.equals("B")) {
+                    wrapper.eq("floor", floor).orderBy("lev1", false).orderBy("row1", flag);
+
+                } else {
+                    wrapper.eq("floor", floor).orderBy("lev1", true);
+
+                }
+            }
+            int num = 20;
+            Config config = configService.selectOne(new EntityWrapper<Config>().eq("code", "LOC_3_NUM"));
+            if (config != null && !Cools.isEmpty(config.getValue())) {
+                num = Integer.parseInt(config.getValue());
+            }
+            agvLocMasts = agvLocMastService.selectList(wrapper);
+            int er = 0;
+            for (AgvLocMast agvLocMast : agvLocMasts) {
+                if (agvLocMast.getLev1() == 2) {
+                    er++;
+                }
+            }
+            for (AgvLocMast agvLocMast : agvLocMasts) {
+                AgvLocMast agvLocMast1 = agvLocMastService.selectOne(new EntityWrapper<AgvLocMast>().eq("loc_no", agvLocMast.getLocNo()));
+                if (agvLocMast1.getLocSts().equals("O")) {
+                    if (agvLocMast1.getLev1() == 2) {
+                        if (er > num) {
+                            return agvLocMast1;
+                        }
+                    } else {
+                        return agvLocMast1;
+                    }
+
+                }
+            }
+            throw new CoolException("鎼滅储搴撲綅鏃讹紝鏈壘鍒板彲鍏ュ簱搴撲綅銆�");
+        } catch (Exception e) {
+            throw new CoolException("鎼滅储搴撲綅鏃讹紝鏈壘鍒板彲鍏ュ簱搴撲綅銆�");
         }
-        if (Cools.isEmpty(agvLocRules)) {
+
+
+    }
+
+    /**
+     * 搴撲綅瑙勫垯鏌ユ壘
+     */
+    public synchronized AgvLocMast getLocByLocRule(int type, int floor, String factory, boolean flag) {
+
+        try {
+            EntityWrapper<AgvLocMast> wrapper = new EntityWrapper<>();
+            wrapper.eq("loc_sts", "O").eq("loc_type1", type);
+            List<AgvLocMast> agvLocMasts = new ArrayList<>();
+            //涓嶆槸绌烘澘浼樺厛鎵�2灞�
+            if (Cools.isEmpty(factory)) {
+                wrapper.eq("floor", floor).orderBy("lev1", true);
+            } else {
+                //B鏄簩鍘傦紝G鏄笁鍘�
+                switch (factory) {
+                    case "B":
+                        wrapper.eq("floor", floor).orderBy("lev1", false).orderBy("row1", flag);
+                        break;
+                    case "G":
+                        wrapper.eq("floor", floor).orderBy("lev1", true);
+                        break;
+                    default:
+                        wrapper.eq("floor", floor).orderBy("lev1", true);
+                        break;
+                }
+            }
+
+            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;
+                }
+            }
+            throw new CoolException("鎼滅储搴撲綅鏃讹紝鏈壘鍒板彲鍏ュ簱搴撲綅銆�");
+        } catch (Exception e) {
+            throw new CoolException("鎼滅储搴撲綅鏃讹紝鏈壘鍒板彲鍏ュ簱搴撲綅銆�");
+        }
+
+
+    }
+
+    /**
+     * 搴撲綅瑙勫垯鏌ユ壘
+     */
+    public AgvLocMast getLocByLocRule(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;
+                }
+            }
+            throw new CoolException("鎼滅储搴撲綅鏃讹紝鏈壘鍒板彲鍏ュ簱搴撲綅銆�");
+        } catch (Exception e) {
+            throw new CoolException("鎼滅储搴撲綅鏃讹紝鏈壘鍒板彲鍏ュ簱搴撲綅銆�");
+        }
+    }
+
+    /*
+  搴撲綅瑙勫垯鏌ユ壘
+   */
+    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("鎼滅储搴撲綅鏃讹紝鏈壘鍒板彲鍏ュ簱搴撲綅銆�");
+        }
+    }
+
+    /*
+搴撲綅瑙勫垯鏌ユ壘
+ */
+    public AgvLocMast getLocByFloor(int type, int floor) {
+        try {
+            EntityWrapper<AgvLocMast> wrapper = new EntityWrapper<>();
+            wrapper.eq("loc_sts", "O").eq("loc_type1", type);
+            wrapper.eq("floor", floor).orderBy("lev1", false);
+
+            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) {
             return null;
         }
-
-        for (AgvLocRule agvLocRule : agvLocRules) {
-            EntityWrapper<AgvLocMast> wrapper = new EntityWrapper<>();
-            wrapper.between("row1", agvLocRule.getRowBeg(), agvLocRule.getRowEnd())
-                    .between("bay1", agvLocRule.getBayBeg(), agvLocRule.getBayEnd())
-                    .between("lev1", agvLocRule.getLevBeg(), agvLocRule.getLevEnd())
-                    .eq("floor", floor)
-                    .eq("loc_sts", "O");
-            AgvLocMast agvLocMast = agvLocMastService.selectOne(wrapper);
-            if (!Cools.isEmpty(agvLocMast)) {
-                return agvLocMast;
-            }
-        }
-
-        return null;
     }
 
     /*
@@ -248,6 +387,49 @@
         throw new CoolException("鎼滅储搴撲綅鏃讹紝妤煎眰鍑洪敊銆�");
     }
 
+    public AgvLocMast getLocNoOnXiSuer(int type, int floor) {
+        EntityWrapper<AgvLocMast> wrapper = new EntityWrapper<>();
+        wrapper.eq("loc_sts", "O").eq("loc_type1", type);
+        wrapper.eq("floor", floor).orderBy("lev1", false);
+        List<AgvLocMast> agvLocMasts = agvLocMastService.selectList(wrapper);
+        if (Cools.isEmpty(agvLocMasts)) {
+            return null;
+        } else {
+            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;
+    }
+
+    public AgvLocMast getLocNoOnXiSuer20(int type, int floor) {
+        EntityWrapper<AgvLocMast> wrapper = new EntityWrapper<>();
+        wrapper.eq("loc_sts", "O").eq("loc_type1", type);
+        wrapper.eq("floor", floor).eq("lev1", 2);
+        List<AgvLocMast> agvLocMasts = agvLocMastService.selectList(wrapper);
+        if (Cools.isEmpty(agvLocMasts)) {
+            return null;
+        } else {
+            int num = 15;
+            Config config = configService.selectOne(new EntityWrapper<Config>().eq("code", "LOC_6_NUM"));
+            if (config != null && !Cools.isEmpty(config.getValue())) {
+                num = Integer.parseInt(config.getValue());
+            }
+            if (agvLocMasts.size()>num){
+                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;
+    }
+
 
     //闅忔満鍙栦竴涓揣浣�
     private AgvLocMast getLocNoRule(int type, int floor, boolean isEmpty, boolean isCurrLev) {
@@ -306,6 +488,7 @@
 
     /**
      * 妫�绱㈠簱浣嶅彿
+     *
      * @return locNo 妫�绱㈠埌鐨勫簱浣嶅彿
      */
     public AgvBasDevp getDevpNo(int type, int floor) {
@@ -325,6 +508,7 @@
 
     /**
      * 妫�绱㈠簱浣嶅彿
+     *
      * @return locNo 妫�绱㈣嚜鍔ㄦ帴椹充綅
      */
     public AgvBasDevp getDevpNo(int type, int floor, String auto) {
@@ -343,6 +527,7 @@
 
     /**
      * 妫�绱㈠簱浣嶅彿
+     *
      * @return locNo 妫�绱㈠彲鍏ユ帴椹充綅
      */
     public AgvBasDevp getDevpNo(int type, int floor, String auto, String inEable) {

--
Gitblit v1.9.1