From 8d6708ad6b4353fd1da4d3d950fa61514ed41add Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期四, 11 五月 2023 09:07:22 +0800
Subject: [PATCH] 四向穿梭车命令封装

---
 src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java |   81 +++++++++++++++++++++++++++++++++-------
 1 files changed, 66 insertions(+), 15 deletions(-)

diff --git a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
index 21c409f..ca20843 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -84,6 +84,8 @@
     @Autowired
     private WrkChargeMapper wrkChargeMapper;
     @Autowired
+    private BasMapService basMapService;
+    @Autowired
     private ErpService erpService;
     @Autowired
     private OrderMapper orderMapper;
@@ -544,10 +546,35 @@
     }
 
     /**
-     * 鑾峰彇/鏇存柊瀹炴椂鍦板浘
+     * 鍒濆鍖栧疄鏃跺湴鍥�
      */
-    public synchronized void refreshMap() {
+    public synchronized void initRealtimeBasMap() {
+        for (int i = 1; i <= 4; i++) {//鎬诲叡鍥涘眰妤�
+            Object data = redisUtil.get("realtimeBasMap_" + i);
+            if (data == null) {//redis鍦板浘鏁版嵁涓虹┖锛屼粠鏁版嵁搴撲腑鑾峰彇
+                BasMap basMap = basMapService.selectLatestMap(i);
+                if (basMap == null) {
+                    //鏁版嵁搴撲腑涔熶笉瀛樺湪鍦板浘鏁版嵁锛屼粠鍦板浘鏂囦欢涓幏鍙�
+                    //杞藉叆鍦板浘
+                    NavigateMapData mapData = new NavigateMapData(i);
+                    List<List<MapNode>> lists = mapData.getJsonData(-1);//鑾峰彇瀹屾暣鍦板浘(鍖呮嫭鍏ュ簱鍑哄簱)
 
+                    //瀛樺叆鏁版嵁搴�
+                    basMap = new BasMap();
+                    basMap.setData(JSON.toJSONString(lists));
+                    basMap.setCreateTime(new Date());
+                    basMap.setUpdateTime(new Date());
+                    basMap.setLev(i);
+
+                    if (!basMapService.insert(basMap)) {
+                        log.info("鍦板浘鏁版嵁瀛樺偍澶辫触");
+                    }
+                }
+
+                //灏嗘暟鎹簱鍦板浘鏁版嵁瀛樺叆redis
+                redisUtil.set("realtimeBasMap_" + i, JSON.toJSONString(basMap));
+            }
+        }
     }
 
     /**
@@ -681,7 +708,7 @@
                             if (wrkMast.getWrkSts() == 8 || Boolean.parseBoolean(searchIdleShuttle.get("sameLay").toString())) {
                                 //鍚屼竴灞傜洿鎺ュ彇璐ф棤闇�缁忚繃鎻愬崌鏈�
                                 //鐩存帴璁$畻杞﹀埌鎻愬崌鏈哄彇璐у啀鍒板簱浣嶈矾寰勬寚浠�
-                                List<ShuttleCommand> commands = this.shuttleAssignCommand(currentLocNo, liftLocNo, locNo);
+                                List<ShuttleCommand> commands = this.shuttleAssignCommand(currentLocNo, liftLocNo, locNo, assignCommand);
                                 if (wrkMast.getWrkSts() == 8) {
                                     //姝ゆ椂杞﹀湪鎻愬崌鏈哄唴閮紝闇�瑕佸涓嬭揪涓�姝ユ寚浠よ杞︾Щ鍔ㄥ埌鎻愬崌鏈哄彛
                                     BasDevp basDevp = basDevpService.selectById(109);//鑾峰彇鎻愬崌鏈轰俊鎭�
@@ -705,7 +732,7 @@
                                 //涓嶅悓灞傦紝灏嗙洰鏍囧簱浣嶅垎閰嶆垚鎻愬崌鏈哄簱浣嶅彿
 
                                 //灏忚溅绉诲姩鍒版彁鍗囨満鍙o紝璁$畻璺緞
-                                List<ShuttleCommand> commands = this.shuttleAssignCommand(currentLocNo, liftLocNo, ShuttleTaskModeType.PAK_IN.id);
+                                List<ShuttleCommand> commands = this.shuttleAssignCommand(currentLocNo, liftLocNo, ShuttleTaskModeType.PAK_IN.id, assignCommand);
                                 //鍒嗛厤鐩爣搴撲綅
                                 shuttleProtocol.setLocNo(liftLocNo);
                                 //鐩爣搴撲綅
@@ -729,13 +756,16 @@
     }
 
     //鑾峰彇璧风偣-缁堢偣鎸囦护銆俶apType锛�1=銆嬫棤璐у湴鍥撅紝2=銆嬫湁璐у湴鍥�
-    public synchronized List<ShuttleCommand> shuttleAssignCommand(String startLocNo, String locNO,Integer mapType) {
+    public synchronized List<ShuttleCommand> shuttleAssignCommand(String startLocNo, String locNo, Integer mapType, ShuttleAssignCommand assignCommand) {
         //璁$畻灏忚溅璧风偣鍒颁腑鐐规墍闇�鍛戒护
-        List<NavigateNode> calc = NavigateUtils.calc(startLocNo, locNO, mapType);
+        List<NavigateNode> calc = NavigateUtils.calc(startLocNo, locNo, mapType);
         List<ShuttleCommand> commands = new ArrayList<>();
         if (calc == null) {
             return null;
         }
+
+        List<NavigateNode> allNode = new ArrayList<>();
+        allNode.addAll(calc);
 
         //鑾峰彇鍒嗘璺緞
         ArrayList<ArrayList<NavigateNode>> data = NavigateUtils.getSectionPath(calc);
@@ -771,17 +801,26 @@
             command.setCommandEnd((short) 1);
             commands.add(command);
         }
+
+        assignCommand.setNodes(allNode);//褰撳墠浠诲姟鎵�鍗犵敤鐨勮妭鐐筶ist
+        //鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹氱鐢�
+        NavigateMapData navigateMapData = new NavigateMapData(Utils.getLev(startLocNo));
+        navigateMapData.writeNavigateNodeToRedisMap(allNode, true);////鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹氱鐢�
+
         return commands;
     }
 
     //鑾峰彇璧风偣-涓偣-缁堢偣鎸囦护
-    public synchronized List<ShuttleCommand> shuttleAssignCommand(String startLocNo, String middleLocNo, String locNO) {
+    public synchronized List<ShuttleCommand> shuttleAssignCommand(String startLocNo, String middleLocNo, String locNo, ShuttleAssignCommand assignCommand) {
         //璁$畻灏忚溅璧风偣鍒颁腑鐐规墍闇�鍛戒护
         List<NavigateNode> calc = NavigateUtils.calc(startLocNo, middleLocNo, 1);//灏忚溅鏃犺揣锛岃蛋鍏ュ簱鍦板浘
         List<ShuttleCommand> commands = new ArrayList<>();
         if (calc == null) {
             return null;
         }
+
+        List<NavigateNode> allNode = new ArrayList<>();
+        allNode.addAll(calc);
 
         //鑾峰彇鍒嗘璺緞
         ArrayList<ArrayList<NavigateNode>> data = NavigateUtils.getSectionPath(calc);
@@ -826,10 +865,12 @@
         commands.add(command);
 
         //璁$畻灏忚溅涓偣鍒扮粓鐐规墍闇�鍛戒护
-        List<NavigateNode> calc2 = NavigateUtils.calc(middleLocNo, locNO, 2);//灏忚溅鏈夎揣锛岃蛋鍑哄簱鍦板浘(鍑哄簱鍦板浘鏈変笓鐢ㄨ揣閬�)
+        List<NavigateNode> calc2 = NavigateUtils.calc(middleLocNo, locNo, 2);//灏忚溅鏈夎揣锛岃蛋鍑哄簱鍦板浘(鍑哄簱鍦板浘鏈変笓鐢ㄨ揣閬�)
         if (calc2 == null) {
             return null;
         }
+
+        allNode.addAll(calc2);
 
         //鑾峰彇鍒嗘璺緞
         ArrayList<ArrayList<NavigateNode>> data2 = NavigateUtils.getSectionPath(calc2);
@@ -871,6 +912,11 @@
         command.setPalletLift((short) 2);
         command.setCommandEnd((short) 1);
         commands.add(command);
+
+        assignCommand.setNodes(allNode);//褰撳墠浠诲姟鎵�鍗犵敤鐨勮妭鐐筶ist
+        //鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹氱鐢�
+        NavigateMapData navigateMapData = new NavigateMapData(Utils.getLev(startLocNo));
+        navigateMapData.writeNavigateNodeToRedisMap(allNode, true);////鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹氱鐢�
 
         return commands;
     }
@@ -955,7 +1001,7 @@
                         if (Boolean.parseBoolean(searchIdleShuttle.get("sameLay").toString())) {
                             //鍚屼竴灞�(灏嗗皬杞︾Щ鍔ㄥ埌璐х墿浣嶇疆)
 
-                            List<ShuttleCommand> commands = this.shuttleAssignCommand(currentLocNo, wrkMast.getSourceLocNo(), liftLocNo);
+                            List<ShuttleCommand> commands = this.shuttleAssignCommand(currentLocNo, wrkMast.getSourceLocNo(), liftLocNo, assignCommand);
                             //鍒嗛厤鐩爣搴撲綅
                             shuttleProtocol.setLocNo(wrkMast.getSourceLocNo());
                             //鐩爣搴撲綅
@@ -966,7 +1012,7 @@
                             //涓嶅悓灞傦紝灏嗙洰鏍囧簱浣嶅垎閰嶆垚鎻愬崌鏈哄簱浣嶅彿(灏嗗皬杞︾Щ鍔ㄥ埌鎻愬崌鏈轰綅缃�)
 
                             //灏忚溅鍒版彁鍗囨満鍙f寚浠�
-                            List<ShuttleCommand> commands = this.shuttleAssignCommand(currentLocNo, liftLocNo, ShuttleTaskModeType.PAK_IN.id);
+                            List<ShuttleCommand> commands = this.shuttleAssignCommand(currentLocNo, liftLocNo, ShuttleTaskModeType.PAK_IN.id, assignCommand);
                             shuttleProtocol.setLocNo(liftLocNo);
                             //鐩爣搴撲綅
                             assignCommand.setLocNo(liftLocNo);
@@ -974,7 +1020,7 @@
                             wrkMast.setWrkSts(22L);//灏忚溅杩佺Щ鐘舵��
                         }
                     } else if (wrkMast.getWrkSts() == 25) {
-                        List<ShuttleCommand> commands = this.shuttleAssignCommand(currentLocNo, wrkMast.getSourceLocNo(), liftLocNo);
+                        List<ShuttleCommand> commands = this.shuttleAssignCommand(currentLocNo, wrkMast.getSourceLocNo(), liftLocNo, assignCommand);
                         //姝ゆ椂杞﹀湪鎻愬崌鏈哄唴閮紝闇�瑕佸涓嬭揪涓�姝ユ寚浠よ杞︾Щ鍔ㄥ埌鎻愬崌鏈哄彛
                         BasDevp basDevp = basDevpService.selectById(109);//鑾峰彇鎻愬崌鏈轰俊鎭�
                         ShuttleCommand moveCommand = new ShuttleCommand();
@@ -2211,11 +2257,14 @@
             if (currentLev == chargeLocNoLev) {
                 //鍚屼竴灞傛棤闇�缁忚繃鎻愬崌鏈�
                 //鐩存帴璁$畻杞﹀埌鍏呯數搴撲綅
+
+                ShuttleAssignCommand assignCommand = new ShuttleAssignCommand();
+
                 //鑾峰彇灏忚溅鍒板厖鐢靛簱浣嶈矾寰勬寚浠�
-                List<ShuttleCommand> commands = this.shuttleAssignCommand(currentLocNo, chargeLocNo, ShuttleTaskModeType.PAK_IN.id);
+                List<ShuttleCommand> commands = this.shuttleAssignCommand(currentLocNo, chargeLocNo, ShuttleTaskModeType.PAK_IN.id, assignCommand);
                 //杩涜鍏呯數涓�
                 shuttleProtocol.setProtocolStatus(ShuttleProtocolStatusType.CHARGING);
-                ShuttleAssignCommand assignCommand = new ShuttleAssignCommand();
+
                 assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo());
                 assignCommand.setTaskMode((short) 9);//鍏呯數
                 assignCommand.setTaskNo(wrkCharge.getWrkNo().shortValue());
@@ -2240,12 +2289,14 @@
             }else {
                 //涓嶅悓灞傦紝灏嗙洰鏍囧簱浣嶅垎閰嶆垚鎻愬崌鏈哄簱浣嶅彿
 
+                ShuttleAssignCommand assignCommand = new ShuttleAssignCommand();
+
                 //灏忚溅绉诲姩鍒版彁鍗囨満鍙o紝璁$畻璺緞
-                List<ShuttleCommand> commands = this.shuttleAssignCommand(currentLocNo, liftLocNo, ShuttleTaskModeType.PAK_IN.id);
+                List<ShuttleCommand> commands = this.shuttleAssignCommand(currentLocNo, liftLocNo, ShuttleTaskModeType.PAK_IN.id, assignCommand);
                 //鍒嗛厤鐩爣搴撲綅
                 shuttleProtocol.setLocNo(liftLocNo);
 
-                ShuttleAssignCommand assignCommand = new ShuttleAssignCommand();
+
                 assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo());
                 assignCommand.setTaskMode((short) 9);//鍏呯數
                 assignCommand.setTaskNo(wrkCharge.getWrkNo().shortValue());

--
Gitblit v1.9.1