From 6e02d92c3b9c240fa78a343b67ddf0db12d840e6 Mon Sep 17 00:00:00 2001 From: Junjie <540245094@qq.com> Date: 星期五, 22 八月 2025 17:00:56 +0800 Subject: [PATCH] # --- src/main/java/com/zy/core/task/ShuttleExecuteScheduler.java | 4 src/main/java/com/zy/common/utils/ShuttleOperaUtils.java | 20 ++ src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | 90 +++++++++--- src/main/java/com/zy/core/action/ShuttleAction.java | 136 +++--------------- src/main/java/com/zy/common/utils/NavigateUtils.java | 23 +++ src/main/java/com/zy/core/thread/impl/TrafficControlImplThread.java | 16 + src/main/java/com/zy/core/enums/RedisKeyType.java | 7 + src/main/java/com/zy/asrs/service/impl/ForkMainServiceImpl.java | 16 +- src/main/webapp/views/shuttleNew.html | 2 src/main/java/com/zy/core/News.java | 83 +++++++++++ 10 files changed, 242 insertions(+), 155 deletions(-) diff --git a/src/main/java/com/zy/asrs/service/impl/ForkMainServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/ForkMainServiceImpl.java index 7386072..b9ab5de 100644 --- a/src/main/java/com/zy/asrs/service/impl/ForkMainServiceImpl.java +++ b/src/main/java/com/zy/asrs/service/impl/ForkMainServiceImpl.java @@ -187,10 +187,10 @@ } //妫�娴嬮殰纰嶇墿杞� - boolean checkObstacle = shuttleOperaUtils.checkObstacle(wrkMast.getLocNo(), new ArrayList<Integer>() {{ + int checkObstacle = shuttleOperaUtils.checkObstacle(wrkMast.getLocNo(), new ArrayList<Integer>() {{ add(shuttleProtocol.getShuttleNo()); }}, new ArrayList<>()); - if (checkObstacle) { + if (checkObstacle > 0) { News.info("{}浠诲姟锛岄伩闅滆寖鍥存湁灏忚溅锛岀瓑寰呴殰纰嶅皬杞﹁皟绂讳腑", wrkMast.getWrkNo()); return false; } @@ -378,10 +378,10 @@ //鍒ゆ柇灏忚溅鏄惁鍒拌揪璐х墿搴撲綅 if (!shuttleProtocol.getCurrentLocNo().equals(wrkMast.getSourceLocNo())) { //妫�娴嬮殰纰嶇墿杞� - boolean checkObstacle = shuttleOperaUtils.checkObstacle(wrkMast.getSourceLocNo(), new ArrayList<Integer>() {{ + int checkObstacle = shuttleOperaUtils.checkObstacle(wrkMast.getSourceLocNo(), new ArrayList<Integer>() {{ add(shuttleProtocol.getShuttleNo()); }}, new ArrayList<>()); - if (checkObstacle) { + if (checkObstacle > 0) { News.info("{}浠诲姟锛岄伩闅滆寖鍥存湁灏忚溅锛岀瓑寰呴殰纰嶅皬杞﹁皟绂讳腑", wrkMast.getWrkNo()); return false; } @@ -520,10 +520,10 @@ } //妫�娴嬮殰纰嶇墿杞� - boolean checkObstacle = shuttleOperaUtils.checkObstacle(wrkMast.getLocNo(), new ArrayList<Integer>() {{ + int checkObstacle = shuttleOperaUtils.checkObstacle(wrkMast.getLocNo(), new ArrayList<Integer>() {{ add(shuttleProtocol.getShuttleNo()); }}, new ArrayList<>()); - if (checkObstacle) { + if (checkObstacle > 0) { News.info("{}浠诲姟锛岄伩闅滆寖鍥存湁灏忚溅锛岀瓑寰呴殰纰嶅皬杞﹁皟绂讳腑", wrkMast.getWrkNo()); return false; } @@ -1390,10 +1390,10 @@ } //妫�娴嬮殰纰嶇墿杞� - boolean checkObstacle = shuttleOperaUtils.checkObstacle(basShuttleCharge.getWaitLocNo(), new ArrayList<Integer>() {{ + int checkObstacle = shuttleOperaUtils.checkObstacle(basShuttleCharge.getWaitLocNo(), new ArrayList<Integer>() {{ add(shuttleProtocol.getShuttleNo()); }}, new ArrayList<>()); - if (checkObstacle) { + if (checkObstacle > 0) { News.info("{}浠诲姟锛岄伩闅滆寖鍥存湁灏忚溅锛岀瓑寰呴殰纰嶅皬杞﹁皟绂讳腑", wrkMast.getWrkNo()); return false; } 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 6bc7288..9f5533e 100644 --- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java +++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java @@ -182,10 +182,10 @@ } //妫�娴嬮殰纰嶇墿杞� - boolean checkObstacle = shuttleOperaUtils.checkObstacle(wrkMast.getLocNo(), new ArrayList<Integer>() {{ + int checkObstacle = shuttleOperaUtils.checkObstacle(wrkMast.getLocNo(), new ArrayList<Integer>() {{ add(shuttleProtocol.getShuttleNo()); }}, new ArrayList<>()); - if (checkObstacle) { + if (checkObstacle > 0) { News.info("{}浠诲姟锛岄伩闅滆寖鍥存湁灏忚溅锛岀瓑寰呴殰纰嶅皬杞﹁皟绂讳腑", wrkMast.getWrkNo()); return false; } @@ -373,10 +373,10 @@ //鍒ゆ柇灏忚溅鏄惁鍒拌揪璐х墿搴撲綅 if (!shuttleProtocol.getCurrentLocNo().equals(wrkMast.getSourceLocNo())) { //妫�娴嬮殰纰嶇墿杞� - boolean checkObstacle = shuttleOperaUtils.checkObstacle(wrkMast.getSourceLocNo(), new ArrayList<Integer>() {{ + int checkObstacle = shuttleOperaUtils.checkObstacle(wrkMast.getSourceLocNo(), new ArrayList<Integer>() {{ add(shuttleProtocol.getShuttleNo()); }}, new ArrayList<>()); - if (checkObstacle) { + if (checkObstacle > 0) { News.info("{}浠诲姟锛岄伩闅滆寖鍥存湁灏忚溅锛岀瓑寰呴殰纰嶅皬杞﹁皟绂讳腑", wrkMast.getWrkNo()); return false; } @@ -515,10 +515,10 @@ } //妫�娴嬮殰纰嶇墿杞� - boolean checkObstacle = shuttleOperaUtils.checkObstacle(wrkMast.getLocNo(), new ArrayList<Integer>() {{ + int checkObstacle = shuttleOperaUtils.checkObstacle(wrkMast.getLocNo(), new ArrayList<Integer>() {{ add(shuttleProtocol.getShuttleNo()); }}, new ArrayList<>()); - if (checkObstacle) { + if (checkObstacle > 0) { News.info("{}浠诲姟锛岄伩闅滆寖鍥存湁灏忚溅锛岀瓑寰呴殰纰嶅皬杞﹁皟绂讳腑", wrkMast.getWrkNo()); return false; } @@ -1387,10 +1387,10 @@ } //妫�娴嬮殰纰嶇墿杞� - boolean checkObstacle = shuttleOperaUtils.checkObstacle(basShuttleCharge.getWaitLocNo(), new ArrayList<Integer>() {{ + int checkObstacle = shuttleOperaUtils.checkObstacle(basShuttleCharge.getWaitLocNo(), new ArrayList<Integer>() {{ add(shuttleProtocol.getShuttleNo()); }}, new ArrayList<>()); - if (checkObstacle) { + if (checkObstacle > 0) { News.info("{}浠诲姟锛岄伩闅滆寖鍥存湁灏忚溅锛岀瓑寰呴殰纰嶅皬杞﹁皟绂讳腑", wrkMast.getWrkNo()); return false; } @@ -1489,7 +1489,7 @@ } //鎼滅储鏈�杩戜笖鏃犳晠闅滄彁鍗囨満 - LiftStaProtocol recentLiftStation = liftDispatchUtils.getRecentLiftStation(shuttleProtocol.getShuttleNo(), Utils.getLev(wrkMast.getLocNo())); + LiftStaProtocol recentLiftStation = liftDispatchUtils.getRecentLiftStation(shuttleProtocol.getShuttleNo(), Utils.getLev(shuttleProtocol.getCurrentLocNo())); if(recentLiftStation == null) { News.info("{}鍙峰皬杞︼紝{}鐩爣搴撲綅锛屾病鏈夊彲鐢ㄧ┖闂茶緭閫佺珯鐐�", shuttleProtocol.getShuttleNo(), wrkMast.getLocNo()); return false; @@ -1499,12 +1499,6 @@ if(targetLiftSta == null) { return false; } - - ShuttleAssignCommand assignCommand = new ShuttleAssignCommand(); - assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo()); // 鍥涘悜绌挎杞︾紪鍙� - assignCommand.setTaskMode(ShuttleTaskModeType.MOVE_LOC_NO.id);//灏忚溅绉诲簱浠诲姟 - assignCommand.setTaskNo(wrkMast.getWrkNo());//浠诲姟鍙� - assignCommand.setAuto(true);//鑷姩妯″紡 //璁$畻杩戠偣浣嶇疆 String endLocation = navigateUtils.calcEndLocation(shuttleProtocol.getCurrentLocNo(), recentLiftStation.getLocNo(), NavigationMapType.getMapTypes(NavigationMapType.NORMAL), null, null, 1); @@ -1523,6 +1517,14 @@ wrkMastService.updateById(wrkMast); return true; } + + ShuttleAssignCommand assignCommand = new ShuttleAssignCommand(); + assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo()); // 鍥涘悜绌挎杞︾紪鍙� + assignCommand.setTaskMode(ShuttleTaskModeType.MOVE_LOC_NO.id);//灏忚溅绉诲簱浠诲姟 + assignCommand.setTaskNo(wrkMast.getWrkNo());//浠诲姟鍙� + assignCommand.setSourceLocNo(shuttleProtocol.getCurrentLocNo());//婧愬簱浣� + assignCommand.setLocNo(endLocation); + assignCommand.setAuto(true);//鑷姩妯″紡 //鑾峰彇灏忚溅鍒拌繎鐐硅璧板懡浠� List<ShuttleCommand> commands = shuttleOperaUtils.getStartToTargetCommands(shuttleProtocol.getCurrentLocNo(), endLocation, NavigationMapType.getMapTypes(NavigationMapType.NORMAL, NavigationMapType.SHUTTLE), assignCommand, shuttleThread); @@ -1624,8 +1626,9 @@ return false; } + Object object = redisUtil.get(RedisKeyType.LIFT_MOVE_TO_SHUTTLE_LIMIT.key + wrkMast.getWrkNo()); int targetLev = Utils.getLev(shuttleProtocol.getCurrentLocNo()); - if (liftProtocol.getLev() != targetLev) { + if (object == null || liftProtocol.getLev() != targetLev) { //鑾峰彇鎻愬崌鏈哄懡浠� LiftCommand liftCommand = liftThread.getMoveCommand(wrkMast.getWrkNo(), liftProtocol.getLev(), targetLev); ArrayList<LiftCommand> commands = new ArrayList<>(); @@ -1640,17 +1643,22 @@ //涓嬪彂浠诲姟 liftAction.assignWork(wrkMast.getLiftNo(), assignCommand); News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}鍙锋彁鍗囨満鍦▄}灞傦紝鎻愬崌鏈轰笉鍦ㄥ皬杞﹀眰锛岃皟搴︾Щ鍔ㄤ腑", wrkMast.getWrkNo(), liftProtocol.getLev(), wrkMast.getLiftNo()); + redisUtil.set(RedisKeyType.LIFT_MOVE_TO_SHUTTLE_LIMIT.key + wrkMast.getWrkNo(), "lift_moving", 60 * 3); return false; } + + String liftLocNo = liftThread.getCurrentLocNo(); ShuttleAssignCommand assignCommand = new ShuttleAssignCommand(); assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo()); // 鍥涘悜绌挎杞︾紪鍙� assignCommand.setTaskMode(ShuttleTaskModeType.MOVE_LOC_NO.id);//灏忚溅绉诲簱浠诲姟 assignCommand.setTaskNo(wrkMast.getWrkNo());//浠诲姟鍙� + assignCommand.setSourceLocNo(shuttleProtocol.getCurrentLocNo());//婧愬簱浣� + assignCommand.setLocNo(liftLocNo); assignCommand.setAuto(true);//鑷姩妯″紡 //鑾峰彇灏忚溅鍒版彁鍗囨満琛岃蛋鍛戒护 - List<ShuttleCommand> commands = shuttleOperaUtils.getStartToTargetCommands(shuttleProtocol.getCurrentLocNo(), liftThread.getCurrentLocNo(), NavigationMapType.getNormalWithDevice(), assignCommand, shuttleThread, "inLift"); + List<ShuttleCommand> commands = shuttleOperaUtils.getStartToTargetCommands(shuttleProtocol.getCurrentLocNo(), liftLocNo, NavigationMapType.getNormalWithDevice(), assignCommand, shuttleThread, "inLift"); if (commands == null) { News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅锛岃矾寰勮绠楀け璐�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); return false;//璺緞瑙i攣澶辫触 @@ -1761,25 +1769,57 @@ return false; } + if (Utils.getLev(shuttleProtocol.getCurrentLocNo()) != Utils.getLev(wrkMast.getLocNo())) { + Object object = redisUtil.get(RedisKeyType.SHUTTLE_UPDATE_LOCATION.key + shuttleProtocol.getShuttleNo()); + if(object != null) { + return false; + } + + ShuttleAssignCommand assignCommand = new ShuttleAssignCommand(); + assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo()); // 鍥涘悜绌挎杞︾紪鍙� + assignCommand.setTaskMode(ShuttleTaskModeType.UPDATE_LOCATION.id);//鏇存柊鍧愭爣 + assignCommand.setTaskNo(wrkMast.getWrkNo());//浠诲姟鍙� + assignCommand.setAuto(true);//鑷姩妯″紡 + assignCommand.setSourceLocNo(shuttleProtocol.getCurrentLocNo());//婧愬簱浣� + assignCommand.setLocNo(wrkMast.getLocNo());//鐩爣搴撲綅 + + //鏇存柊灏忚溅鍧愭爣 + ShuttleCommand command = shuttleThread.getUpdateLocationCommand(wrkMast.getWrkNo(), wrkMast.getLocNo()); + ArrayList<ShuttleCommand> commands = new ArrayList<>(); + commands.add(command); + + assignCommand.setCommands(commands); + //涓嬪彂浠诲姟 + shuttleAction.assignWork(shuttleProtocol.getShuttleNo(), assignCommand); + redisUtil.set(RedisKeyType.SHUTTLE_UPDATE_LOCATION.key + shuttleProtocol.getShuttleNo(), "update", 10); + return false; + } + + String targetLocNo = navigateUtils.calcFirstLocation(shuttleProtocol.getCurrentLocNo(), wrkMast.getLocNo(), NavigationMapType.getMapTypes(NavigationMapType.NORMAL), null, null, 5); + if (targetLocNo == null) {//鍑烘彁鍗囨満杩戠偣璁$畻澶辫触 + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅锛屽嚭鎻愬崌鏈鸿繎鐐硅绠楀け璐�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); + return false; + } + ShuttleAssignCommand assignCommand = new ShuttleAssignCommand(); assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo()); // 鍥涘悜绌挎杞︾紪鍙� - assignCommand.setTaskMode(ShuttleTaskModeType.UPDATE_LOCATION.id);//鏇存柊鍧愭爣 + assignCommand.setTaskMode(ShuttleTaskModeType.MOVE_LOC_NO.id);//灏忚溅绉诲簱浠诲姟 assignCommand.setTaskNo(wrkMast.getWrkNo());//浠诲姟鍙� assignCommand.setAuto(true);//鑷姩妯″紡 assignCommand.setSourceLocNo(shuttleProtocol.getCurrentLocNo());//婧愬簱浣� - assignCommand.setLocNo(wrkMast.getLocNo());//鐩爣搴撲綅 + assignCommand.setLocNo(targetLocNo);//鐩爣搴撲綅 - //鏇存柊灏忚溅鍧愭爣 - ShuttleCommand command = shuttleThread.getUpdateLocationCommand(wrkMast.getWrkNo(), wrkMast.getLocNo()); - ArrayList<ShuttleCommand> commands = new ArrayList<>(); - commands.add(command); - + //鑾峰彇灏忚溅鍒拌繎鐐瑰懡浠� + List<ShuttleCommand> commands = shuttleOperaUtils.getStartToTargetCommands(shuttleProtocol.getCurrentLocNo(), targetLocNo, NavigationMapType.getMapTypes(NavigationMapType.NORMAL), assignCommand, shuttleThread); + if (commands == null) { + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅锛岃矾寰勮绠楀け璐�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); + return false;//璺緞璁$畻澶辫触 + } assignCommand.setCommands(commands); wrkMast.setWrkSts(WrkStsType.MOVE_OUT_LIFT.sts);//灏忚溅杩佸嚭鎻愬崌鏈轰腑 wrkMast.setSystemMsg("");//娓呯┖娑堟伅 wrkMast.setModiTime(now); - if (wrkMastService.updateById(wrkMast)) { //涓嬪彂浠诲姟 shuttleAction.assignWork(shuttleProtocol.getShuttleNo(), assignCommand); diff --git a/src/main/java/com/zy/common/utils/NavigateUtils.java b/src/main/java/com/zy/common/utils/NavigateUtils.java index d49b64b..14430c1 100644 --- a/src/main/java/com/zy/common/utils/NavigateUtils.java +++ b/src/main/java/com/zy/common/utils/NavigateUtils.java @@ -231,6 +231,29 @@ return findTargetLocation(endPath); } + public String calcFirstLocation(String startPoint, String endPoint, List<NavigationMapType> mapTypes, List<int[]> shuttlePoints, List<int[]> whites, int firstPathNumber) { + //璁$畻璺緞 + List<NavigateNode> navigateNodes = calc(startPoint, endPoint, mapTypes, shuttlePoints, whites); + if (navigateNodes == null) { + News.error("{} dash {} can't find navigate path!", startPoint, endPoint); + return null; + } + + //鑾峰彇鍒嗘璺緞 + List<List<NavigateNode>> partList = this.getSectionPath(navigateNodes); + List<NavigateNode> firstList = partList.get(0); + + NavigateNode targetNode = null; + if(firstList.size() <= firstPathNumber){ + targetNode = firstList.get(firstList.size() - 1); + }else { + targetNode = firstList.get(firstPathNumber); + } + + String locNo = NavigatePositionConvert.nodeToLocNo(targetNode); + return locNo; + } + public String findTargetLocation(List<List<NavigateNode>> partList) { List<NavigateNode> nodes = partList.get(partList.size() - 1); NavigateNode targetNode = nodes.get(0); diff --git a/src/main/java/com/zy/common/utils/ShuttleOperaUtils.java b/src/main/java/com/zy/common/utils/ShuttleOperaUtils.java index db9ab33..c7dbe39 100644 --- a/src/main/java/com/zy/common/utils/ShuttleOperaUtils.java +++ b/src/main/java/com/zy/common/utils/ShuttleOperaUtils.java @@ -59,6 +59,8 @@ } public synchronized List<ShuttleCommand> getStartToTargetCommands(String startLocNo, String endLocNo, List<NavigationMapType> mapTypes, List<int[]> whites, ShuttleAssignCommand assignCommand, ShuttleThread shuttleThread, String moveType) { + long getStartTime = System.currentTimeMillis(); + ShuttleProtocol shuttleProtocol = shuttleThread.getStatus(); if (shuttleProtocol == null) { return null; @@ -99,7 +101,7 @@ //鑾峰彇鍒嗘璺緞 List<List<NavigateNode>> data = navigateUtils.getSectionPath(nodeList); long endTime = System.currentTimeMillis(); - News.info("getSection path time:{}", (endTime - startTime)); + News.info("[RCS Debug] getSection path time:{}", (endTime - startTime)); //灏嗘瘡涓�娈佃矾寰勫垎鎴恈ommand鎸囦护 for (int i = 0; i < data.size(); i++) { List<NavigateNode> nodes = data.get(i); @@ -141,6 +143,8 @@ } } assignCommand.setShuttleMoveCommandsContinuously(shuttleMoveCommandsContinuously); + + News.info("{}浠诲姟锛寋}灏忚溅锛寋} - {} 璺緞鍛戒护鍖呰绠楁垚鍔燂紝鑰楁椂:{}ms", assignCommand.getTaskNo(), shuttleProtocol.getShuttleNo(), startLocNo, endLocNo, System.currentTimeMillis() - startTime); return commands; } @@ -168,8 +172,11 @@ return commands; } - //妫�娴嬮殰纰嶇墿杞� - public synchronized boolean checkObstacle(String locNo, List<Integer> whiteShuttles, List<NavigateNode> whiteNodes) { + /** + * 妫�娴嬮殰纰嶇墿杞� + * @return 0:鏃犻殰纰� 1:鏈夐殰纰嶈皟搴︽垚鍔� 2:鏈夐殰纰嶈皟搴﹀け璐� + */ + public synchronized int checkObstacle(String locNo, List<Integer> whiteShuttles, List<NavigateNode> whiteNodes) { int innerCircle = 0; int outerCircle = 3; Config avoidInnerCircleConfig = configService.selectOne(new EntityWrapper<Config>().eq("code", "avoidInnerCircle")); @@ -202,7 +209,7 @@ List<NavigateNode> innerNodes = getInnerNodes(locNo, innerCircle, whiteShuttlePointList); List<Integer> nodesCar = findNodesCar(innerNodes); if (nodesCar.isEmpty()) { - return false;//鍐呭湀涓棤杞� + return 0;//鍐呭湀涓棤杞� } //鑾峰彇澶栧湀鑺傜偣 @@ -239,10 +246,11 @@ if (targetLocNo == null) { continue; } - shuttleDispatchUtils.dispatchShuttle(null, targetLocNo, shuttleNo); + boolean dispatched = shuttleDispatchUtils.dispatchShuttle(null, targetLocNo, shuttleNo); + return dispatched ? 1 : 2; } - return true;//鍐呭湀涓湁杞� + return 2;//鍐呭湀涓湁杞� } private HashMap<String, Integer> findCarMap() { diff --git a/src/main/java/com/zy/core/News.java b/src/main/java/com/zy/core/News.java index 956d860..0b650b5 100644 --- a/src/main/java/com/zy/core/News.java +++ b/src/main/java/com/zy/core/News.java @@ -1,8 +1,13 @@ package com.zy.core; +import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.core.common.SpringUtils; import com.zy.asrs.entity.WrkMast; import com.zy.asrs.service.WrkMastService; +import com.zy.common.utils.RedisUtil; +import com.zy.core.enums.RedisKeyType; +import com.zy.system.entity.Config; +import com.zy.system.service.ConfigService; import lombok.extern.slf4j.Slf4j; import java.lang.reflect.Array; @@ -98,16 +103,94 @@ } public static void info(String format, Object... arguments) { + if (format.contains("[RCS Debug]")) { + ConfigService configService = SpringUtils.getBean(ConfigService.class); + if(configService != null) { + boolean show = true; + Config config = configService.selectOne(new EntityWrapper<Config>().eq("code", "rcsDebugShowLog")); + if(config != null) { + show = config.getValue().equals("true"); + } + + if (!show) { + return; + } + } + } + RedisUtil redisUtil = null; + try { + redisUtil = SpringUtils.getBean(RedisUtil.class); + if(redisUtil != null) { + Object object = redisUtil.get(RedisKeyType.LOG_LIMIT.key + format); + if (object != null) { + return; + } + redisUtil.set(RedisKeyType.LOG_LIMIT.key + format, "lock", 3); + } + }catch (Exception e) {} + log.info(format, arguments); offer(NewsLevel.INFO, format, arguments); } public static void warn(String format, Object... arguments) { + if (format.contains("[RCS Debug]")) { + ConfigService configService = SpringUtils.getBean(ConfigService.class); + if(configService != null) { + boolean show = true; + Config config = configService.selectOne(new EntityWrapper<Config>().eq("code", "rcsDebugShowLog")); + if(config != null) { + show = config.getValue().equals("true"); + } + + if (!show) { + return; + } + } + } + RedisUtil redisUtil = null; + try { + redisUtil = SpringUtils.getBean(RedisUtil.class); + if(redisUtil != null) { + Object object = redisUtil.get(RedisKeyType.LOG_LIMIT.key + format); + if (object != null) { + return; + } + redisUtil.set(RedisKeyType.LOG_LIMIT.key + format, "lock", 3); + } + }catch (Exception e) {} + log.warn(format, arguments); offer(NewsLevel.WARN, format, arguments); } public static void error(String format, Object... arguments) { + if (format.contains("[RCS Debug]")) { + ConfigService configService = SpringUtils.getBean(ConfigService.class); + if(configService != null) { + boolean show = true; + Config config = configService.selectOne(new EntityWrapper<Config>().eq("code", "rcsDebugShowLog")); + if(config != null) { + show = config.getValue().equals("true"); + } + + if (!show) { + return; + } + } + } + RedisUtil redisUtil = null; + try { + redisUtil = SpringUtils.getBean(RedisUtil.class); + if(redisUtil != null) { + Object object = redisUtil.get(RedisKeyType.LOG_LIMIT.key + format); + if (object != null) { + return; + } + redisUtil.set(RedisKeyType.LOG_LIMIT.key + format, "lock", 3); + } + }catch (Exception e) {} + log.error(format, arguments); offer(NewsLevel.ERROR, format, arguments); } diff --git a/src/main/java/com/zy/core/action/ShuttleAction.java b/src/main/java/com/zy/core/action/ShuttleAction.java index 55bba24..d709041 100644 --- a/src/main/java/com/zy/core/action/ShuttleAction.java +++ b/src/main/java/com/zy/core/action/ShuttleAction.java @@ -119,10 +119,10 @@ return false; } - News.info("execute check command {},{}", shuttleNo, taskNo); + News.info("[RCS Debug] Execute check command {},{}", shuttleNo, taskNo); //妫�娴嬪懡浠� int checked = checkCommand(redisCommand, shuttleNo); - News.info("execute check command complete {},{}", shuttleNo, taskNo); + News.info("[RCS Debug] Execute check command complete {},{}", shuttleNo, taskNo); if (checked == 0) { return false; } @@ -171,24 +171,19 @@ Object object = redisUtil.get(RedisKeyType.TRAFFIC_CONTROL_LOCK_APPLY.key + shuttleNo); if (object == null) { //鐢宠绠″埗 - News.info("execute apply control {},{}", shuttleNo, taskNo); + News.info("[RCS Debug] Execute apply control {},{}", shuttleNo, taskNo); redisUtil.set(RedisKeyType.TRAFFIC_CONTROL_LOCK_APPLY.key + shuttleNo, "lock", 10); applyTrafficControl(commands, nodes, shuttleNo, taskNo); - News.info("execute apply control complete {},{}", shuttleNo, taskNo); + News.info("[RCS Debug] Execute apply control complete {},{}", shuttleNo, taskNo); } - News.info("execute query control {},{}", shuttleNo, taskNo); + News.info("[RCS Debug] Execute query control {},{}", shuttleNo, taskNo); //鏌ヨ绠″埗 boolean apply = queryTrafficControl(shuttleNo, taskNo); - News.info("execute query control complete {},{}", shuttleNo, taskNo); + News.info("[RCS Debug] Execute query control complete {},{}", shuttleNo, taskNo); if(!apply){ return false;//鐢宠澶辫触 } -// //妫�娴嬭矾寰勬槸鍚﹀啿绐� -// int conflict = searchShuttlePathConflict(nodes, shuttleNo); -// if(conflict == 2){ -// return false;//妫�娴嬪悗鏈夊啿绐� -// } if (checked == 2) { nodes.remove(0); @@ -203,10 +198,10 @@ } } - News.info("execute send command {},{}", shuttleNo, taskNo); + News.info("[RCS Debug] Execute send command {},{}", shuttleNo, taskNo); // 涓嬪彂鍛戒护 CommandResponse response = write(command, shuttleNo); - News.info("execute send command complete {},{}", shuttleNo, taskNo); + News.info("[RCS Debug] Execute send command complete {},{}", shuttleNo, taskNo); //淇濆瓨鍛戒护鏃ュ織 BasShuttleOpt basShuttleOpt = new BasShuttleOpt(); @@ -342,16 +337,24 @@ // 绯荤粺浠诲姟 if (assignCommand.getAuto()) { - if (!assignCommand.getCharge()) { - //瀵逛富绾跨▼鎶涘嚭绛夊緟纭鐘舵�亀aiting - shuttleThread.setProtocolStatus(ShuttleProtocolStatusType.WAITING); - } else { - shuttleThread.setProtocolStatus(ShuttleProtocolStatusType.CHARGING_WAITING); + if (assignCommand.getTaskMode() == ShuttleTaskModeType.UPDATE_LOCATION.id) {//鏇存柊鍧愭爣鏃犻渶绛夊緟纭 + //鐩存帴澶嶄綅绌洪棽鐘舵�� + shuttleThread.setProtocolStatus(ShuttleProtocolStatusType.IDLE); + //浠诲姟鍙锋竻闆� + shuttleThread.setSyncTaskNo(0); + //鏍囪澶嶄綅 + shuttleThread.setPakMk(true); + News.info("鍥涘悜绌挎杞︽洿鏂板潗鏍囦换鍔℃墽琛屽畬鎴愶紝绌挎杞﹀彿={}锛屼换鍔℃暟鎹�={}", shuttleProtocol.getShuttleNo(), JSON.toJSON(endCommand)); + }else { + if (!assignCommand.getCharge()) { + //瀵逛富绾跨▼鎶涘嚭绛夊緟纭鐘舵�亀aiting + shuttleThread.setProtocolStatus(ShuttleProtocolStatusType.WAITING); + } else { + shuttleThread.setProtocolStatus(ShuttleProtocolStatusType.CHARGING_WAITING); + } + News.info("鍥涘悜绌挎杞︿换鍔℃墽琛屼笅鍙戝畬鎴愮瓑寰呮墽琛岀粨鏉燂紝绌挎杞﹀彿={}锛屼换鍔℃暟鎹�={}", shuttleProtocol.getShuttleNo(), JSON.toJSON(endCommand)); } - News.info("鍥涘悜绌挎杞︿换鍔℃墽琛屼笅鍙戝畬鎴愮瓑寰呮墽琛岀粨鏉燂紝绌挎杞﹀彿={}锛屼换鍔℃暟鎹�={}", shuttleProtocol.getShuttleNo(), JSON.toJSON(endCommand)); - - // 鎵嬪姩浠诲姟 - } else { + } else {// 鎵嬪姩浠诲姟 //鎵嬪姩妯″紡涓嶆姏鍑虹瓑寰呯姸鎬侊紝鐩存帴澶嶄綅绌洪棽鐘舵�� shuttleThread.setProtocolStatus(ShuttleProtocolStatusType.IDLE); //浠诲姟鍙锋竻闆� @@ -430,9 +433,9 @@ return false; } //涓婃姤浜ょ - News.info("execute check command report traffic {},{}", shuttleNo, shuttleProtocol.getTaskNo()); + News.info("[RCS Debug] Execute check command report traffic {},{}", shuttleNo, shuttleProtocol.getTaskNo()); trafficControlThread.trafficReport(command.getNodesDeepCopy(), shuttleNo, shuttleProtocol.getTaskNo()); - News.info("execute check command report traffic complete {},{}", shuttleNo, shuttleProtocol.getTaskNo()); + News.info("[RCS Debug] Execute check command report traffic complete {},{}", shuttleNo, shuttleProtocol.getTaskNo()); String currentLocNo = shuttleProtocol.getCurrentLocNo(); if (currentLocNo == null) { @@ -528,91 +531,6 @@ redisUtil.set(RedisKeyType.TRAFFIC_CONTROL_CANCEL_LIST.key + shuttleNo + "_" + taskNo, model); return true; } - -// /** -// * 鎼滅储灏忚溅璺緞鏄惁瀛樺湪鍐茬獊 -// * 0:鏈娴� 1:妫�娴嬫棤鍐茬獊 2:妫�娴嬫湁鍐茬獊 -// */ -// public int searchShuttlePathConflict(List<NavigateNode> nodeList, Integer shuttleNo) { -// ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, shuttleNo); -// if (shuttleThread == null) { -// return 0; -// } -// -// ShuttleProtocol shuttleProtocol = shuttleThread.getStatus(); -// if (shuttleProtocol == null) { -// return 0; -// } -// -// int lev = Utils.getLev(shuttleProtocol.getCurrentLocNo()); -// -// TrafficControlThread trafficControlThread = (TrafficControlThread) SlaveConnection.get(SlaveType.TrafficControl, 1); -// if (trafficControlThread == null) { -// return 2; -// } -// HashMap<String, List<Integer>> nodeMap = trafficControlThread.getNodesMapByLev(lev); -// if (nodeMap == null || nodeMap.isEmpty()) { -// return 2; -// } -// -// List<String> conflictLocList = new ArrayList<>(); -// for (NavigateNode node : nodeList) { -// String locNo = Utils.getLocNo(node.getX(), node.getY(), lev); -// if(!nodeMap.containsKey(locNo)) { -// return 2; -// } -// -// List<Integer> shuttleNos = nodeMap.get(locNo); -// if (shuttleNos.size() > 1) { -// //璺緞瀛樺湪澶氳溅锛屽啿绐� -// conflictLocList.add(locNo); -// } -// } -// -// if (conflictLocList.isEmpty()) { -// //鏃犲啿绐侊紝瑙i櫎浜ら�氱鍒� -// shuttleThread.setTrafficControl(false, null); -// return 1;//妫�娴嬪悗鏃犲啿绐� -// } -// -// //璺緞瀛樺湪鍐茬獊锛屾娴嬪彲鎵ц杞﹁締鏄惁涓哄綋鍓嶅皬杞� -// //涓婃姤灏忚溅鐘舵��-浜ら�氱鍒朵腑 -// shuttleThread.setTrafficControl(true, nodeList); -// -// HashMap<String, Integer> deviceMap = trafficControlThread.getDeviceMap(); -// if(deviceMap == null) { -// return 2; -// } -// -// boolean detected = false; -//// for (Map.Entry<String, Integer> entry : deviceMap.entrySet()) { -//// List<String> mainList = JSON.parseArray(entry.getKey(), String.class); -//// Integer device = entry.getValue(); -//// if(result) { -//// //鍒ゆ柇绠″埗杞﹁締鏄惁鍖归厤 -//// if(shuttleNo.equals(device)) { -//// detected = true; -//// break; -//// } -//// } -//// } -// -// for (Map.Entry<String, Integer> entry : deviceMap.entrySet()) { -// String key = entry.getKey(); -// Integer value = entry.getValue(); -// if(shuttleNo.equals(value)) { -// //鍒ゆ柇绠″埗杞﹁締鏄惁鍖归厤 -// detected = true; -// break; -// } -// } -// -// if (detected) { -// return 1;//妫�娴嬪悗鏃犲啿绐侊紝浜ら�氱鍒跺凡鍏佽姝ゅ皬杞﹁繍琛� -// } -// -// return 2;//妫�娴嬪悗鏈夊啿绐� -// } //婕旂ず妯″紡 public synchronized void demo(Integer shuttleNo) { diff --git a/src/main/java/com/zy/core/enums/RedisKeyType.java b/src/main/java/com/zy/core/enums/RedisKeyType.java index 9880268..31f830a 100644 --- a/src/main/java/com/zy/core/enums/RedisKeyType.java +++ b/src/main/java/com/zy/core/enums/RedisKeyType.java @@ -19,6 +19,11 @@ //灏忚溅閲嶆柊瑙勫垝璺緞棰戠巼 SHUTTLE_RESTART_CALC_PATH("shuttle_restart_calc_path_"), + //灏忚溅鏇存柊妤煎眰鍧愭爣棰戠巼 + SHUTTLE_UPDATE_LOCATION("shuttle_update_location_"), + + //鎻愬崌鏈虹Щ鍔ㄨ嚦灏忚溅灞傞鐜� + LIFT_MOVE_TO_SHUTTLE_LIMIT("lift_move_to_shuttle_LIMIT_"), //浜ょ淇℃伅 TRAFFIC_CONTROL_MAP("traffic_control_map"), @@ -46,6 +51,8 @@ DEVICE_CONFIG("deviceConfig"), //铏氭嫙璁惧閰嶇疆鏂囦欢 FAKE_DEVICE_CONFIG("fakeDeviceConfig"), + + LOG_LIMIT("log_limit_"), ; public String key; diff --git a/src/main/java/com/zy/core/task/ShuttleExecuteScheduler.java b/src/main/java/com/zy/core/task/ShuttleExecuteScheduler.java index 4839cb1..e0d1ffe 100644 --- a/src/main/java/com/zy/core/task/ShuttleExecuteScheduler.java +++ b/src/main/java/com/zy/core/task/ShuttleExecuteScheduler.java @@ -70,7 +70,7 @@ if (taskNo != 0) { //瀛樺湪浠诲姟闇�瑕佹墽琛� long startTime = System.currentTimeMillis(); - News.info("execute {},{}", deviceConfig.getDeviceNo(), taskNo); + News.info("[RCS Debug] Execute {},{}", deviceConfig.getDeviceNo(), taskNo); // 鍦ㄥ惊鐜腑浣跨敤 boolean result = TimeoutExecutor.executeWithTimeout( () -> shuttleAction.executeWork(deviceConfig.getDeviceNo(), taskNo), @@ -78,7 +78,7 @@ TimeUnit.SECONDS ); Thread.sleep(100); - News.info("execute end {},{},{}", deviceConfig.getDeviceNo(), taskNo, System.currentTimeMillis() - startTime); + News.info("[RCS Debug] Execute end {},{},{}", deviceConfig.getDeviceNo(), taskNo, System.currentTimeMillis() - startTime); } } }catch (Exception e){ diff --git a/src/main/java/com/zy/core/thread/impl/TrafficControlImplThread.java b/src/main/java/com/zy/core/thread/impl/TrafficControlImplThread.java index 721e5ee..f1655fa 100644 --- a/src/main/java/com/zy/core/thread/impl/TrafficControlImplThread.java +++ b/src/main/java/com/zy/core/thread/impl/TrafficControlImplThread.java @@ -174,10 +174,14 @@ Long idleTime = pathIdleShuttleMap.get(shuttleProtocol.getShuttleNo()); if((System.currentTimeMillis() - idleTime) > 1000 * 10) { //妫�娴嬮殰纰嶇墿杞� - boolean checkObstacle = shuttleOperaUtils.checkObstacle(shuttleProtocol.getCurrentLocNo(), new ArrayList<Integer>() {{ + int checkObstacle = shuttleOperaUtils.checkObstacle(shuttleProtocol.getCurrentLocNo(), new ArrayList<Integer>() {{ add(shuttleNo); }}, totalNodeList); pathIdleShuttleMap.remove(shuttleProtocol.getShuttleNo()); + + if (checkObstacle == 2) { + pathShuttleThread.restartCalcPath(); + } } }else { pathIdleShuttleMap.put(shuttleProtocol.getShuttleNo(), System.currentTimeMillis()); @@ -198,6 +202,10 @@ } if(totalLocList.contains(locNo)) { + String first = totalLocList.get(0); + if(first.equals(locNo)) {//filter first node + continue; + } return false; } } @@ -211,7 +219,7 @@ applyRecordsMap.remove(shuttleNo); redisUtil.set(RedisKeyType.TRAFFIC_CONTROL_SUCCESS_APPLY.key + shuttleNo + "_" + taskNo, 1, 60 * 60); - News.info("receipt traffic {},{}", shuttleNo, taskNo); + News.info("[RCS Debug] receipt traffic {},{}", shuttleNo, taskNo); return true; } @@ -335,7 +343,7 @@ public synchronized boolean operateTrafficControl(OperateTrafficControlParam param) { long startTime = System.currentTimeMillis(); String operaType = param.getOperaType(); - News.info("Operate Traffic Control is Start " + operaType); + News.info("[RCS Debug] Operate Traffic Control is Start " + operaType); boolean result = false; if (operaType.equals("add")) { @@ -354,7 +362,7 @@ new ArrayList<>(model.getTotalNodeList()) )) .collect(Collectors.toList()); - News.info("Operate Traffic Control is end " + (System.currentTimeMillis() - startTime) + "ms"); + News.info("[RCS Debug] Operate Traffic Control is end " + (System.currentTimeMillis() - startTime) + "ms"); return result; } diff --git a/src/main/webapp/views/shuttleNew.html b/src/main/webapp/views/shuttleNew.html index db1afad..1314abe 100644 --- a/src/main/webapp/views/shuttleNew.html +++ b/src/main/webapp/views/shuttleNew.html @@ -571,7 +571,7 @@ requestParam.shuttleTaskMode = 17; }else if (type == 'writeTaskNo') { requestParam.workNo = this.controlData.taskNo; - requestParam.pakMk = null; + requestParam.pakMk = "Y"; $.ajax({ url: baseUrl + "/shuttle/detl/update", -- Gitblit v1.9.1