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