From 15b5002fd412a5d33be5d5c6deb63b3d02c77c41 Mon Sep 17 00:00:00 2001 From: zjj <3272660260@qq.com> Date: 星期二, 23 九月 2025 14:35:39 +0800 Subject: [PATCH] # --- src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | 95 +++++++++++++++++++++++++++++++++++++---------- 1 files changed, 75 insertions(+), 20 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 f2292f5..d307a5c 100644 --- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java +++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java @@ -2,6 +2,7 @@ import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.mapper.EntityWrapper; +import com.core.common.SpringUtils; import com.zy.asrs.domain.enums.NotifyMsgType; import com.zy.asrs.entity.*; import com.zy.asrs.service.*; @@ -75,6 +76,8 @@ private DeviceConfigService deviceConfigService; @Autowired private LiftDispatchUtils liftDispatchUtils; + @Autowired + private BasShuttleService basShuttleService; /** * 鍒濆鍖栧疄鏃跺湴鍥� @@ -99,7 +102,7 @@ } //灏嗘暟鎹簱鍦板浘鏁版嵁瀛樺叆redis - redisUtil.set(RedisKeyType.MAP.key + lev, JSON.toJSONString(basMap)); + redisUtil.set(RedisKeyType.MAP.key + lev, lists); } } @@ -299,12 +302,12 @@ } if (liftSta.getHasCar()) { - News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}绔欑偣瀛樺湪灏忚溅锛岀姝㈡淳鍙�", wrkMast.getWrkNo(), liftSta.getStaNo()); + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}绔欑偣瀛樺湪灏忚溅锛岀姝㈡淳鍙�", wrkMast.getWrkNo(), liftSta.getSiteId()); return false; } if (liftSta.getHasTray()) { - News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}绔欑偣鏈夋墭鐩橈紝绂佹娲惧彂", wrkMast.getWrkNo(), liftSta.getStaNo()); + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}绔欑偣鏈夋墭鐩橈紝绂佹娲惧彂", wrkMast.getWrkNo(), liftSta.getSiteId()); return false; } @@ -424,7 +427,7 @@ assignCommand.setCommands(commands); wrkMast.setWrkSts(WrkStsType.OUTBOUND_SHUTTLE_RUN.sts);//灏忚溅鎼繍涓� 101.鐢熸垚鍑哄簱浠诲姟 ==> 102.灏忚溅鎼繍涓� - wrkMast.setSourceStaNo(liftSta.getStaNo()); + wrkMast.setSourceStaNo(liftSta.getSiteId()); wrkMast.setModiTime(new Date()); wrkMast.setSystemMsg("");//娓呯┖娑堟伅 if (wrkMastService.updateById(wrkMast)) { @@ -501,6 +504,12 @@ //鍒ゆ柇灏忚溅鏄惁鍒拌揪璐х墿搴撲綅 if (!shuttleProtocol.getCurrentLocNo().equals(wrkMast.getSourceLocNo())) { + //浠诲姟琚伩闅滃彇娑� + Object cancelLock = redisUtil.get(RedisKeyType.TRAFFIC_CONTROL_SHUTTLE_OBSTACLE_CANCEL_TASK_LOCK.key + wrkMast.getShuttleNo()); + if(cancelLock != null) { + return false; + } + //灏忚溅鏈埌杈惧彇璐т綅缃� shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), wrkMast.getSourceLocNo(), wrkMast.getShuttleNo());//璋冨害灏忚溅鍒拌揣鐗╂墍鍦ㄥ簱浣嶈繘琛屽彇璐� News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屽皬杞︽湭鍒拌揪鍙栬揣浣嶇疆", wrkMast.getWrkNo(), wrkMast.getSourceLocNo()); @@ -766,12 +775,12 @@ } if (liftSta.getHasCar()) { - News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}绔欑偣瀛樺湪灏忚溅锛岀姝㈡淳鍙�", wrkMast.getWrkNo(), liftSta.getStaNo()); + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}绔欑偣瀛樺湪灏忚溅锛岀姝㈡淳鍙�", wrkMast.getWrkNo(), liftSta.getSiteId()); return false; } if (!liftSta.getHasTray()) { - News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}绔欑偣鏃犳墭鐩橈紝绂佹娲惧彂", wrkMast.getWrkNo(), liftSta.getStaNo()); + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}绔欑偣鏃犳墭鐩橈紝绂佹娲惧彂", wrkMast.getWrkNo(), liftSta.getSiteId()); return false; } @@ -1094,8 +1103,26 @@ } //鍒ゆ柇褰撳墠灏忚溅鏄惁婊¤冻闇�瑕佸厖鐢佃姹� - if (!shuttleThread.isRequireCharge()) { - continue; + if (shuttleThread.isRequireCharge().equals(ShuttleRequireChargeType.NONE)) { + continue;//鏃犻渶鍏呯數 + } + + boolean forceCharge = true; + if (shuttleThread.isRequireCharge().equals(ShuttleRequireChargeType.SUGGEST_CHARGE)) { + BasShuttle basShuttle = basShuttleService.selectOne(new EntityWrapper<BasShuttle>().eq("shuttle_no", device.getDeviceNo())); + if (basShuttle != null) { + Integer suggestChargeLine = basShuttle.getSuggestChargeLine(); + boolean chargeSuggestResult = Integer.parseInt(shuttleProtocol.getBatteryPower()) < suggestChargeLine; + if (chargeSuggestResult) { + //妫�娴嬬郴缁熸槸鍚︽湁浠诲姟 + List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>().in("io_type", 1, 101, 201)); + if (wrkMasts.isEmpty()) { + forceCharge = false; + }else { + continue; + } + } + } } WrkMast wrkMast1 = wrkMastService.selectShuttleWorking(shuttleProtocol.getShuttleNo()); @@ -1171,7 +1198,7 @@ wrkMast.setIoPri((double) 999); wrkMast.setLocNo(chargeLocNo); wrkMast.setShuttleNo(device.getDeviceNo()); - wrkMast.setMemo("charge"); + wrkMast.setMemo(forceCharge ? "forceCharge" : "suggestCharge"); wrkMast.setAppeTime(new Date()); if (!wrkMastService.insert(wrkMast)) { News.error("淇濆瓨{}鍙峰洓鍚戠┛姊溅鍏呯數浠诲姟澶辫触!!!", device.getDeviceNo()); @@ -1321,7 +1348,7 @@ List<ShuttleCommand> commands = shuttleOperaUtils.getShuttleChargeCommand(assignCommand, shuttleThread, true); assignCommand.setCommands(commands);//杩愯鍛戒护 - wrkMast.setWrkSts(WrkStsType.CHARGE_SHUTTLE_WORKING.sts); + wrkMast.setWrkSts(WrkStsType.CHARGE_SHUTTLE_START_CHARGING.sts); wrkMast.setModiTime(new Date()); if (!wrkMastService.updateById(wrkMast)) { return false; @@ -1338,7 +1365,7 @@ //灏忚溅鍋滄鍏呯數 private synchronized boolean executeShuttleChargeStepStopCharge(WrkMast wrkMast) { - if (wrkMast.getWrkSts() == WrkStsType.CHARGE_SHUTTLE_WORKING.sts) { + if (wrkMast.getWrkSts() == WrkStsType.CHARGE_SHUTTLE_CHARGING.sts) { ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo()); if (shuttleThread == null) { return false; @@ -1348,7 +1375,16 @@ return false; } - if (!shuttleThread.isChargingCompleted()) { + boolean stopCharge = false; + if (wrkMast.getMemo().equals("suggestChargeTaskStop")) { + stopCharge = true; + }else { + if (shuttleThread.isChargingCompleted()) { + stopCharge = true; + } + } + + if (!stopCharge) { return false; } @@ -1371,7 +1407,7 @@ //灏忚溅绂诲紑鍏呯數妗� private synchronized boolean executeShuttleChargeStepLeaveCharge(WrkMast wrkMast) { - if (wrkMast.getWrkSts() == WrkStsType.CHARGE_SHUTTLE_COMPLETE.sts) { + if (wrkMast.getWrkSts() == WrkStsType.CHARGE_SHUTTLE_CHARGING_COMPLETE.sts) { ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo()); if (shuttleThread == null) { return false; @@ -1510,8 +1546,8 @@ //灏忚溅宸插湪杩戠偣浣嶇疆鏃犻渶鍓嶅線 if (shuttleProtocol.getCurrentLocNo().equals(endLocation)) { wrkMast.setWrkSts(WrkStsType.MOVE_NEARBY_COMPLETE.sts);//灏忚溅绉诲姩鍒版彁鍗囨満涓� 301.鐢熸垚灏忚溅绉诲簱浠诲姟 ==> 303.灏忚溅绉诲姩鑷宠繎鐐瑰畬鎴� - wrkMast.setSourceStaNo(recentLiftStation.getStaNo()); - wrkMast.setStaNo(targetLiftSta.getStaNo()); + wrkMast.setSourceStaNo(recentLiftStation.getSiteId()); + wrkMast.setStaNo(targetLiftSta.getSiteId()); wrkMast.setModiTime(now); wrkMast.setSystemMsg("");//娓呯┖娑堟伅 wrkMastService.updateById(wrkMast); @@ -1536,8 +1572,8 @@ assignCommand.setCommands(commands); wrkMast.setWrkSts(WrkStsType.MOVE_NEARBY.sts);//灏忚溅绉诲姩鍒版彁鍗囨満涓� 301.鐢熸垚灏忚溅绉诲簱浠诲姟 ==> 302.灏忚溅绉诲姩鑷宠繎鐐逛腑 - wrkMast.setSourceStaNo(recentLiftStation.getStaNo()); - wrkMast.setStaNo(targetLiftSta.getStaNo()); + wrkMast.setSourceStaNo(recentLiftStation.getSiteId()); + wrkMast.setStaNo(targetLiftSta.getSiteId()); wrkMast.setModiTime(now); wrkMast.setSystemMsg("");//娓呯┖娑堟伅 if (wrkMastService.updateById(wrkMast)) { @@ -1630,7 +1666,13 @@ int targetLev = Utils.getLev(shuttleProtocol.getCurrentLocNo()); if (object == null || liftProtocol.getLev() != targetLev) { //鑾峰彇鎻愬崌鏈哄懡浠� - LiftCommand liftCommand = liftThread.getMoveCommand(wrkMast.getWrkNo(), liftProtocol.getLev(), targetLev); + LiftStaProtocol startSta = LiftUtils.getLiftStaByLev(liftProtocol.getLiftNo(), liftProtocol.getLev()); + LiftStaProtocol targetSta = LiftUtils.getLiftStaByLev(liftProtocol.getLiftNo(), targetLev); + if (startSta == null || targetSta == null) { + News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}鍙锋彁鍗囨満锛岀珯鐐规暟鎹笉瀛樺湪", wrkMast.getWrkNo(), wrkMast.getLiftNo()); + return false; + } + LiftCommand liftCommand = liftThread.getMoveCommand(commonService.getWorkNo(WrkIoType.PREVIEW_LIFT_MOVE.id), startSta.getSiteId(), targetSta.getSiteId()); ArrayList<LiftCommand> commands = new ArrayList<>(); commands.add(liftCommand); @@ -1644,6 +1686,12 @@ 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); + redisUtil.set(RedisKeyType.TASK_RUN_LIMIT.key + wrkMast.getWrkNo(), "lock", 8); + return false; + } + + Object limitObj = redisUtil.get(RedisKeyType.TASK_RUN_LIMIT.key + wrkMast.getWrkNo()); + if (limitObj != null) { return false; } @@ -1720,7 +1768,7 @@ } //鑾峰彇鎻愬崌鏈哄懡浠� - LiftCommand liftCommand = liftThread.getShuttleSwitchCommand(wrkMast.getWrkNo(), sourceLiftSta.getLev(), liftSta.getLev()); + LiftCommand liftCommand = liftThread.getShuttleSwitchCommand(wrkMast.getWrkNo(), sourceLiftSta.getSiteId(), liftSta.getSiteId()); ArrayList<LiftCommand> commands = new ArrayList<>(); commands.add(liftCommand); @@ -1795,7 +1843,14 @@ return false; } - String targetLocNo = navigateUtils.calcFirstLocation(shuttleProtocol.getCurrentLocNo(), wrkMast.getLocNo(), NavigationMapType.getMapTypes(NavigationMapType.NORMAL), null, null, 2); + //灏忚溅鍑烘彁鍗囨満杩戠偣璺濈 + int shuttleOutLiftLocationDistance = 2; + Config shuttleOutLiftLocationDistanceConfig = configService.selectOne(new EntityWrapper<Config>().eq("code", "shuttleOutLiftLocationDistance")); + if (shuttleOutLiftLocationDistanceConfig != null) { + shuttleOutLiftLocationDistance = Integer.parseInt(shuttleOutLiftLocationDistanceConfig.getValue()); + } + + String targetLocNo = navigateUtils.calcFirstLocation(shuttleProtocol.getCurrentLocNo(), wrkMast.getLocNo(), NavigationMapType.getMapTypes(NavigationMapType.NORMAL), null, null, shuttleOutLiftLocationDistance); if (targetLocNo == null) {//鍑烘彁鍗囨満杩戠偣璁$畻澶辫触 News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅锛屽嚭鎻愬崌鏈鸿繎鐐硅绠楀け璐�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo()); return false; -- Gitblit v1.9.1