From 900f7032f7e701efd4741c2bcabeaad969e5fd3f Mon Sep 17 00:00:00 2001
From: Junjie <xjj@123>
Date: 星期二, 14 一月 2025 15:20:27 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/core/model/protocol/ShuttleProtocol.java |   13 ++
 src/main/java/com/zy/core/thread/impl/NyShuttleThread.java    |    9 +
 src/main/java/com/zy/asrs/controller/ShuttleController.java   |  157 ++++++++++++++++---------------
 src/main/java/com/zy/core/thread/ShuttleThread.java           |    2 
 src/main/java/com/zy/core/action/ShuttleAction.java           |   81 ++++++++++++++++
 src/main/java/com/zy/core/enums/ShuttleTaskModeType.java      |    2 
 src/main/webapp/views/shuttle.html                            |    4 
 7 files changed, 191 insertions(+), 77 deletions(-)

diff --git a/src/main/java/com/zy/asrs/controller/ShuttleController.java b/src/main/java/com/zy/asrs/controller/ShuttleController.java
index d2c475c..30721f7 100644
--- a/src/main/java/com/zy/asrs/controller/ShuttleController.java
+++ b/src/main/java/com/zy/asrs/controller/ShuttleController.java
@@ -286,84 +286,87 @@
             assignCommand.setLocNo(param.getDistLocNo());
         }
 
-        for (ShuttleSlave shuttleSlave : slaveProperties.getShuttle()) {
-            if (param.getShuttleNo().equals(shuttleSlave.getId())) {
-                ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, shuttleSlave.getId());
-                if (shuttleThread == null) {
-                    throw new CoolException("鍥涘悜绌挎杞︿笉鍦ㄧ嚎");
-                }
-                ShuttleProtocol shuttleProtocol = shuttleThread.getStatus();
-                if (shuttleProtocol == null) {
-                    throw new CoolException("鍥涘悜绌挎杞︿笉鍦ㄧ嚎");
-                }
-
-                ShuttleTaskModeType shuttleTaskModeType = ShuttleTaskModeType.get(param.getShuttleTaskMode().intValue());
-                assignCommand.setShuttleNo(shuttleSlave.getId()); // 鍥涘悜绌挎杞︾紪鍙�
-                assignCommand.setTaskMode(shuttleTaskModeType.id);
-                assignCommand.setTaskNo(commonService.getWorkNo(99));//鑾峰彇浠诲姟鍙�
-                assignCommand.setAuto(false);//鎵嬪姩妯″紡
-
-                if (shuttleTaskModeType == ShuttleTaskModeType.MOVE_LOC_NO) {
-                    //绉诲姩鍒扮洰鏍囧簱浣�
-                    Integer mapType = NavigationMapType.NORMAL.id;
-                    if (shuttleProtocol.getHasLift()) {
-                        mapType = NavigationMapType.DFX.id;
-                    }
-                    List<ShuttleCommand> commands = shuttleOperaUtils.getStartToTargetCommands(shuttleProtocol.getCurrentLocNo(), param.getDistLocNo(), mapType, assignCommand, shuttleThread);
-                    if (commands == null) {
-                        throw new CoolException("璺緞璁$畻澶辫触");
-                    }
-
-                    assignCommand.setCommands(commands);
-
-                    //灏濊瘯閿佸畾鐩爣绔欒矾寰�
-                    boolean result2 = navigateMapUtils.writeNavigateNodeToRedisMap(Utils.getLev(param.getDistLocNo()), shuttleProtocol.getShuttleNo(), assignCommand.getNodesDeepCopy(), true);//鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹氱鐢�
-                    if (!result2) {
-                        News.info("{}浠诲姟锛寋}灏忚溅锛岃矾寰勯攣瀹氬け璐ワ紝绂佹娲惧彂", param.getDistLocNo(), shuttleProtocol.getShuttleNo());
-                        throw new CoolException("璺緞閿佸畾澶辫触");
-                    }
-
-                } else if (shuttleTaskModeType == ShuttleTaskModeType.PALLET_LIFT) {
-                    //鎵樼洏椤跺崌
-                    List<ShuttleCommand> commands = shuttleOperaUtils.getShuttleLiftCommand(assignCommand, shuttleThread, true);
-                    assignCommand.setCommands(commands);
-                } else if (shuttleTaskModeType == ShuttleTaskModeType.PALLET_DOWN) {
-                    //鎵樼洏涓嬮檷
-                    List<ShuttleCommand> commands = shuttleOperaUtils.getShuttleLiftCommand(assignCommand, shuttleThread, false);
-                    assignCommand.setCommands(commands);
-                } else if (shuttleTaskModeType == ShuttleTaskModeType.CHARGE) {
-                    //鍏呯數寮�鍏�
-                    boolean charge = false;
-                    if (shuttleProtocol.getHasCharge()) {
-                        //宸插厖鐢碉紝鍏抽棴鍏呯數
-                        charge = false;
-                    }else {
-                        //寮�鍚厖鐢�
-                        charge = true;
-                    }
-                    List<ShuttleCommand> commands = shuttleOperaUtils.getShuttleChargeCommand(assignCommand, shuttleThread, charge);
-                    assignCommand.setCommands(commands);
-                } else if (shuttleTaskModeType == ShuttleTaskModeType.RESET) {
-                    //澶嶄綅
-                    shuttleThread.setSyncTaskNo(0);//宸ヤ綔鍙锋竻绌�
-                    shuttleThread.setProtocolStatus(ShuttleProtocolStatusType.IDLE);//浠诲姟鐘舵��-绌洪棽
-                    shuttleThread.setPakMk(true);//浣滀笟鏍囪澶嶄綅
-
-                    shuttleThread.enableMoveLoc(null, false);
-                    return R.ok();
-                } else if (shuttleTaskModeType == ShuttleTaskModeType.MOVE_LOC_NO_TASK) {
-                    //绉诲姩鍒扮洰鏍囧簱浣�(鐢熸垚绉诲姩浠诲姟)
-                    shuttleDispatchUtils.dispatchShuttle(commonService.getWorkNo(3), param.getDistLocNo(), param.getShuttleNo());
-                    return R.ok();
-                } else {
-                    throw new CoolException("鏈煡鍛戒护");
-                }
-
-                shuttleAction.assignWork(shuttleProtocol.getShuttleNo(), assignCommand);
-                return R.ok();
-            }
+        ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, param.getShuttleNo());
+        if (shuttleThread == null) {
+            throw new CoolException("鍥涘悜绌挎杞︿笉鍦ㄧ嚎");
         }
-        return R.error();
+        ShuttleProtocol shuttleProtocol = shuttleThread.getStatus();
+        if (shuttleProtocol == null) {
+            throw new CoolException("鍥涘悜绌挎杞︿笉鍦ㄧ嚎");
+        }
+
+        ShuttleTaskModeType shuttleTaskModeType = ShuttleTaskModeType.get(param.getShuttleTaskMode().intValue());
+        assignCommand.setShuttleNo(param.getShuttleNo()); // 鍥涘悜绌挎杞︾紪鍙�
+        assignCommand.setTaskMode(shuttleTaskModeType.id);
+        assignCommand.setTaskNo(commonService.getWorkNo(99));//鑾峰彇浠诲姟鍙�
+        assignCommand.setAuto(false);//鎵嬪姩妯″紡
+
+        if (shuttleTaskModeType == ShuttleTaskModeType.MOVE_LOC_NO) {
+            //绉诲姩鍒扮洰鏍囧簱浣�
+            Integer mapType = NavigationMapType.NORMAL.id;
+            if (shuttleProtocol.getHasLift()) {
+                mapType = NavigationMapType.DFX.id;
+            }
+            List<ShuttleCommand> commands = shuttleOperaUtils.getStartToTargetCommands(shuttleProtocol.getCurrentLocNo(), param.getDistLocNo(), mapType, assignCommand, shuttleThread);
+            if (commands == null) {
+                throw new CoolException("璺緞璁$畻澶辫触");
+            }
+
+            assignCommand.setCommands(commands);
+
+            //灏濊瘯閿佸畾鐩爣绔欒矾寰�
+            boolean result2 = navigateMapUtils.writeNavigateNodeToRedisMap(Utils.getLev(param.getDistLocNo()), shuttleProtocol.getShuttleNo(), assignCommand.getNodesDeepCopy(), true);//鎵�浣跨敤鐨勮矾寰勮繘琛岄攣瀹氱鐢�
+            if (!result2) {
+                News.info("{}浠诲姟锛寋}灏忚溅锛岃矾寰勯攣瀹氬け璐ワ紝绂佹娲惧彂", param.getDistLocNo(), shuttleProtocol.getShuttleNo());
+                throw new CoolException("璺緞閿佸畾澶辫触");
+            }
+
+        } else if (shuttleTaskModeType == ShuttleTaskModeType.PALLET_LIFT) {
+            //鎵樼洏椤跺崌
+            List<ShuttleCommand> commands = shuttleOperaUtils.getShuttleLiftCommand(assignCommand, shuttleThread, true);
+            assignCommand.setCommands(commands);
+        } else if (shuttleTaskModeType == ShuttleTaskModeType.PALLET_DOWN) {
+            //鎵樼洏涓嬮檷
+            List<ShuttleCommand> commands = shuttleOperaUtils.getShuttleLiftCommand(assignCommand, shuttleThread, false);
+            assignCommand.setCommands(commands);
+        } else if (shuttleTaskModeType == ShuttleTaskModeType.CHARGE) {
+            //鍏呯數寮�鍏�
+            boolean charge = false;
+            if (shuttleProtocol.getHasCharge()) {
+                //宸插厖鐢碉紝鍏抽棴鍏呯數
+                charge = false;
+            }else {
+                //寮�鍚厖鐢�
+                charge = true;
+            }
+            List<ShuttleCommand> commands = shuttleOperaUtils.getShuttleChargeCommand(assignCommand, shuttleThread, charge);
+            assignCommand.setCommands(commands);
+        } else if (shuttleTaskModeType == ShuttleTaskModeType.RESET) {
+            //澶嶄綅
+            shuttleThread.setSyncTaskNo(0);//宸ヤ綔鍙锋竻绌�
+            shuttleThread.setProtocolStatus(ShuttleProtocolStatusType.IDLE);//浠诲姟鐘舵��-绌洪棽
+            shuttleThread.setPakMk(true);//浣滀笟鏍囪澶嶄綅
+
+            shuttleThread.enableMoveLoc(null, false);
+            return R.ok();
+        } else if (shuttleTaskModeType == ShuttleTaskModeType.MOVE_LOC_NO_TASK) {
+            //绉诲姩鍒扮洰鏍囧簱浣�(鐢熸垚绉诲姩浠诲姟)
+            shuttleDispatchUtils.dispatchShuttle(commonService.getWorkNo(3), param.getDistLocNo(), param.getShuttleNo());
+            return R.ok();
+        } else if (shuttleTaskModeType == ShuttleTaskModeType.SHUTTLE_DEMO_OPEN) {
+            //婕旂ず妯″紡-寮�
+            shuttleThread.enableDemo(true);
+            return R.ok();
+        } else if (shuttleTaskModeType == ShuttleTaskModeType.SHUTTLE_DEMO_CLOSE) {
+            //婕旂ず妯″紡-鍏�
+            shuttleThread.enableDemo(false);
+            return R.ok();
+        } else {
+            throw new CoolException("鏈煡鍛戒护");
+        }
+
+        shuttleAction.assignWork(shuttleProtocol.getShuttleNo(), assignCommand);
+        return R.ok();
     }
 
     @PostMapping("/detl/update")
diff --git a/src/main/java/com/zy/core/action/ShuttleAction.java b/src/main/java/com/zy/core/action/ShuttleAction.java
index a083581..67e1a26 100644
--- a/src/main/java/com/zy/core/action/ShuttleAction.java
+++ b/src/main/java/com/zy/core/action/ShuttleAction.java
@@ -2,19 +2,25 @@
 
 import com.alibaba.fastjson.JSON;
 import com.alibaba.fastjson.serializer.SerializerFeature;
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.fasterxml.jackson.core.type.TypeReference;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.zy.asrs.entity.BasShuttleOpt;
+import com.zy.asrs.entity.LocMast;
+import com.zy.asrs.entity.WrkMast;
 import com.zy.asrs.service.BasShuttleOptService;
 import com.zy.asrs.service.BasShuttleService;
 import com.zy.asrs.service.LocMastService;
+import com.zy.asrs.service.WrkMastService;
 import com.zy.asrs.utils.Utils;
 import com.zy.common.ExecuteSupport;
 import com.zy.common.model.NavigateNode;
 import com.zy.common.utils.NavigateMapUtils;
 import com.zy.common.utils.RedisUtil;
+import com.zy.common.utils.ShuttleOperaUtils;
 import com.zy.core.News;
 import com.zy.core.cache.SlaveConnection;
+import com.zy.core.dispatcher.ShuttleDispatchUtils;
 import com.zy.core.enums.*;
 import com.zy.core.model.CommandResponse;
 import com.zy.core.model.command.ShuttleAssignCommand;
@@ -27,6 +33,7 @@
 import org.springframework.stereotype.Component;
 
 import java.io.IOException;
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 
@@ -47,6 +54,10 @@
     private ConfigService configService;
     @Autowired
     private BasShuttleOptService basShuttleOptService;
+    @Autowired
+    private WrkMastService wrkMastService;
+    @Autowired
+    private ShuttleDispatchUtils shuttleDispatchUtils;
 
     public synchronized boolean assignWork(Integer shuttleNo, ShuttleAssignCommand assignCommand) {
         ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, shuttleNo);
@@ -268,6 +279,76 @@
         return true;
     }
 
+    //婕旂ず妯″紡
+    public synchronized void demo(Integer shuttleNo) {
+        ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, shuttleNo);
+        if (shuttleThread == null) {
+            return;
+        }
+
+        ShuttleProtocol shuttleProtocol = shuttleThread.getStatus();
+        if (shuttleProtocol == null) {
+            return;
+        }
+
+        if (!shuttleProtocol.getDemo()) {
+            return;
+        }
+
+        WrkMast moveWorking = wrkMastService.selectShuttleHasMoveWorking(shuttleNo);
+        if (moveWorking != null) {
+            return;
+        }
+
+        WrkMast shuttleWorking = wrkMastService.selectShuttleWorking(shuttleNo);
+        if(shuttleWorking != null) {
+            return;
+        }
+
+        WrkMast chargeWorking = wrkMastService.selectChargeWorking(shuttleNo);
+        if (chargeWorking != null) {
+            return;
+        }
+
+        if (shuttleThread.isRequireCharge()) {
+            return;
+        }
+
+        if (!shuttleThread.isIdle()) {
+            return;
+        }
+
+        String currentLocNo = shuttleProtocol.getCurrentLocNo();
+        int lev = Utils.getLev(currentLocNo);
+
+        LocMast targetLoc = null;
+        EntityWrapper<LocMast> wrapper = new EntityWrapper<>();
+        wrapper.eq("lev1", lev);
+        wrapper.eq("loc_sts", "O");
+        wrapper.last("ORDER BY RAND() LIMIT 1");
+        for (int i = 0; i < 3; i++) {
+            LocMast locMast = locMastService.selectOne(wrapper);
+            if(locMast == null) {
+                continue;
+            }
+
+            ArrayList<String> locs = new ArrayList<>();
+            locs.add(locMast.getLocNo());
+            Integer shuttle = Utils.checkGroupLocHasShuttle(locs);
+            if(shuttle != null) {
+                continue;
+            }
+
+            targetLoc = locMast;
+        }
+
+        if(targetLoc == null) {
+            return;
+        }
+
+        shuttleDispatchUtils.dispatchShuttle(null, targetLoc.getLocNo(), shuttleNo);
+    }
+
 //    //璺戝簱绋嬪簭
 //    public synchronized void moveLoc(Integer shuttleNo) {
 //        ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, shuttleNo);
diff --git a/src/main/java/com/zy/core/enums/ShuttleTaskModeType.java b/src/main/java/com/zy/core/enums/ShuttleTaskModeType.java
index 884a137..264c19c 100644
--- a/src/main/java/com/zy/core/enums/ShuttleTaskModeType.java
+++ b/src/main/java/com/zy/core/enums/ShuttleTaskModeType.java
@@ -14,6 +14,8 @@
     TRANSPORT(9, "鎼繍浠诲姟"),
     SHUTTLE_CONTROL(10, "灏忚溅绠″埗"),
     SHUTTLE_CANCEL_CONTROL(11, "灏忚溅鍙栨秷绠″埗"),
+    SHUTTLE_DEMO_OPEN(12, "婕旂ず妯″紡-寮�"),
+    SHUTTLE_DEMO_CLOSE(13, "婕旂ず妯″紡-鍏�"),
     ;
 
     public Integer id;
diff --git a/src/main/java/com/zy/core/model/protocol/ShuttleProtocol.java b/src/main/java/com/zy/core/model/protocol/ShuttleProtocol.java
index 9f7b0bd..4cb41ef 100644
--- a/src/main/java/com/zy/core/model/protocol/ShuttleProtocol.java
+++ b/src/main/java/com/zy/core/model/protocol/ShuttleProtocol.java
@@ -164,6 +164,11 @@
     private Integer yCurrent = 0;
 
     /**
+     * 婕旂ず妯″紡
+     */
+    private Boolean demo = false;
+
+    /**
      * 鏃ュ織閲囬泦鏃堕棿
      */
     private Long deviceDataLog = System.currentTimeMillis();
@@ -319,6 +324,14 @@
         return this.pakMk ? "Y" : "N";
     }
 
+    public String getDemo$() {
+        if (this.demo == null) {
+            return "";
+        }
+
+        return this.demo ? "Y" : "N";
+    }
+
     public HashMap<String, Object> getPoint() {
         HashMap<String, Object> map = new HashMap<>();
         if (this.currentCode == null) {
diff --git a/src/main/java/com/zy/core/thread/ShuttleThread.java b/src/main/java/com/zy/core/thread/ShuttleThread.java
index 9e243ca..57c4bf6 100644
--- a/src/main/java/com/zy/core/thread/ShuttleThread.java
+++ b/src/main/java/com/zy/core/thread/ShuttleThread.java
@@ -61,6 +61,8 @@
 
     boolean requestWaiting();
 
+    boolean enableDemo(boolean enable);//婕旂ず妯″紡
+
     //***************鑾峰彇鍛戒护*****************
 
     ShuttleCommand getMoveCommand(Integer taskNo, String startCodeNum, String distCodeNum, Integer allDistance, Integer runDirection, Integer runSpeed, List<NavigateNode> nodes);//鑾峰彇绉诲姩鍛戒护
diff --git a/src/main/java/com/zy/core/thread/impl/NyShuttleThread.java b/src/main/java/com/zy/core/thread/impl/NyShuttleThread.java
index 52f5643..a585d5e 100644
--- a/src/main/java/com/zy/core/thread/impl/NyShuttleThread.java
+++ b/src/main/java/com/zy/core/thread/impl/NyShuttleThread.java
@@ -120,6 +120,9 @@
 //                    //灏忚溅绌洪棽涓旀湁璺戝簱绋嬪簭
 //                    shuttleAction.moveLoc(slave.getId());
 
+                    //婕旂ず妯″紡
+                    shuttleAction.demo(slave.getId());
+
                     Thread.sleep(200);
                 } catch (Exception e) {
                     e.printStackTrace();
@@ -804,6 +807,12 @@
     }
 
     @Override
+    public boolean enableDemo(boolean enable) {
+        shuttleProtocol.setDemo(enable);
+        return true;
+    }
+
+    @Override
     public ShuttleCommand getMoveCommand(Integer taskNo, String startCodeNum, String distCodeNum, Integer allDistance, Integer runDirection, Integer runSpeed, List<NavigateNode> nodes) {
         NavigateMapData navigateMapData = SpringUtils.getBean(NavigateMapData.class);
         NyShuttleHttpCommand httpStandard = getHttpStandard(slave.getId(), taskNo);
diff --git a/src/main/webapp/views/shuttle.html b/src/main/webapp/views/shuttle.html
index b559d4f..b23cc49 100644
--- a/src/main/webapp/views/shuttle.html
+++ b/src/main/webapp/views/shuttle.html
@@ -46,6 +46,7 @@
                         <th>鏁呴殰鐮�</th>
                         <th>绠″埗鐘舵��</th>
                         <th>浣庣數閲�</th>
+                        <th>婕旂ず妯″紡</th>
                     </tr>
                     </thead>
                     <tbody>
@@ -131,6 +132,8 @@
                                         <button class="item" onclick="shuttleOperator(2)">鎵樼洏涓嬮檷</button>
                                         <button class="item" onclick="shuttleOperator(6)">鍏呯數寮�鍏�</button>
                                         <button class="item" onclick="shuttleOperator(3)">澶嶄綅</button>
+                                        <button class="item" onclick="shuttleOperator(12)">婕旂ず妯″紡-寮�</button>
+                                        <button class="item" onclick="shuttleOperator(13)">婕旂ず妯″紡-鍏�</button>
                                     </div>
                                 </div>
                             </div>
@@ -344,6 +347,7 @@
                 setVal(tr.children("td").eq(11), table[i-1].statusErrorCode$);
                 setVal(tr.children("td").eq(12), suspendState);
                 setVal(tr.children("td").eq(13), table[i-1].lowerPower);
+                setVal(tr.children("td").eq(14), table[i-1].demo$);
             }
         } else if (res.code === 403){
             window.location.href = baseUrl+"/login";

--
Gitblit v1.9.1