From 7635dc25bd2a4d565df496b2d96354639966768d Mon Sep 17 00:00:00 2001
From: Junjie <xjj@123>
Date: 星期四, 25 九月 2025 11:09:44 +0800
Subject: [PATCH] #
---
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | 103 +++++++++++++++++++++++++++++++++++++++++----------
1 files changed, 82 insertions(+), 21 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 9f5533e..94dfa94 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,21 @@
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;
+ }
+
+ Object limitObj = redisUtil.get(RedisKeyType.TASK_RUN_LIMIT.key + wrkMast.getWrkNo());
+ if (limitObj != null) {
return false;
}
@@ -1364,6 +1405,7 @@
//涓嬪彂浠诲姟
shuttleAction.assignWork(shuttleProtocol.getShuttleNo(), assignCommand);
+ redisUtil.set(RedisKeyType.TASK_RUN_LIMIT.key + wrkMast.getWrkNo(), "limit", 10);
return false;
}
return true;
@@ -1371,7 +1413,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 +1552,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 +1578,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 +1672,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 +1692,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;
}
@@ -1658,7 +1712,7 @@
assignCommand.setAuto(true);//鑷姩妯″紡
//鑾峰彇灏忚溅鍒版彁鍗囨満琛岃蛋鍛戒护
- List<ShuttleCommand> commands = shuttleOperaUtils.getStartToTargetCommands(shuttleProtocol.getCurrentLocNo(), liftLocNo, NavigationMapType.getNormalWithDevice(), assignCommand, shuttleThread, "inLift");
+ List<ShuttleCommand> commands = shuttleOperaUtils.getStartToTargetCommands(shuttleProtocol.getCurrentLocNo(), liftLocNo, NavigationMapType.getMapTypes(NavigationMapType.NORMAL), assignCommand, shuttleThread, "inLift");
if (commands == null) {
News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅锛岃矾寰勮绠楀け璐�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
return false;//璺緞瑙i攣澶辫触
@@ -1720,7 +1774,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 +1849,14 @@
return false;
}
- String targetLocNo = navigateUtils.calcFirstLocation(shuttleProtocol.getCurrentLocNo(), wrkMast.getLocNo(), NavigationMapType.getMapTypes(NavigationMapType.NORMAL), null, null, 5);
+ //灏忚溅鍑烘彁鍗囨満杩戠偣璺濈
+ 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