From 02d3a25e8b5ffc7d322273fbbe5210046b0f117c Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期二, 22 四月 2025 13:14:06 +0800
Subject: [PATCH] #
---
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | 371 +++++++++++++++++++++++++++++++---------------------
1 files changed, 221 insertions(+), 150 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 88d0687..893a5ee 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -26,7 +26,6 @@
import com.zy.system.service.ConfigService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import java.util.*;
@@ -39,8 +38,6 @@
@Service("mainService")
public class MainServiceImpl {
- @Value("${wms.url}")
- private String wmsUrl;
@Autowired
private SlaveProperties slaveProperties;
@Autowired
@@ -77,36 +74,35 @@
private ForkLiftAction forkLiftAction;
@Autowired
private NotifyUtils notifyUtils;
+ @Autowired
+ private BasShuttleChargeService basShuttleChargeService;
/**
* 鍒濆鍖栧疄鏃跺湴鍥�
*/
public synchronized void initRealtimeBasMap() {
try {
- for (int i = 1; i <= 4; i++) {//鎬诲叡鍥涘眰妤�
- Object data = redisUtil.get(RedisKeyType.MAP.key + i);
- if (data == null) {//redis鍦板浘鏁版嵁涓虹┖锛屼粠鏁版嵁搴撲腑鑾峰彇
- BasMap basMap = basMapService.selectLatestMap(i);
- if (basMap == null) {
- //鏁版嵁搴撲腑涔熶笉瀛樺湪鍦板浘鏁版嵁锛屼粠鍦板浘鏂囦欢涓幏鍙�
- //杞藉叆鍦板浘
- List<List<MapNode>> lists = navigateMapData.getJsonData(i, -1, null, null);//鑾峰彇瀹屾暣鍦板浘(鍖呮嫭鍏ュ簱鍑哄簱)
- //瀛樺叆鏁版嵁搴�
- basMap = new BasMap();
- basMap.setData(JSON.toJSONString(lists));
- basMap.setCreateTime(new Date());
- basMap.setUpdateTime(new Date());
- basMap.setLev(i);
+ List<BasMap> basMaps = basMapService.selectList(new EntityWrapper<BasMap>().orderBy("lev", true));
+ for (BasMap basMap : basMaps) {
+ Integer lev = basMap.getLev();
+ Object data = redisUtil.get(RedisKeyType.MAP.key + lev);
+ if (data == null) {//redis鍦板浘鏁版嵁涓虹┖
+ //杞藉叆鍦板浘
+ List<List<MapNode>> lists = navigateMapData.getJsonData(lev, -1, null, null);//鑾峰彇瀹屾暣鍦板浘(鍖呮嫭鍏ュ簱鍑哄簱)
- if (!basMapService.insert(basMap)) {
- log.info("鍦板浘鏁版嵁瀛樺偍澶辫触");
- }
+ //瀛樺叆鏁版嵁搴�
+ basMap.setData(JSON.toJSONString(lists));
+ basMap.setCreateTime(new Date());
+ basMap.setUpdateTime(new Date());
+ if (!basMapService.updateById(basMap)) {
+ log.info("鍦板浘鏁版嵁瀛樺偍澶辫触");
}
//灏嗘暟鎹簱鍦板浘鏁版嵁瀛樺叆redis
- redisUtil.set(RedisKeyType.MAP.key + i, JSON.toJSONString(basMap));
+ redisUtil.set(RedisKeyType.MAP.key + lev, JSON.toJSONString(basMap));
}
+
}
} catch (Exception e) {
e.printStackTrace();
@@ -124,6 +120,7 @@
));
for (WrkMast wrkMast : wrkMasts) {
boolean step1 = this.shuttleInExecuteStep1(wrkMast);//灏忚溅鎼叆搴撲腑
+ Thread.sleep(100);
if (!step1) {
continue;
}
@@ -138,7 +135,7 @@
* 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false
* ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue
*/
- public boolean shuttleInExecuteStep1(WrkMast wrkMast) {
+ public synchronized boolean shuttleInExecuteStep1(WrkMast wrkMast) {
if (wrkMast.getWrkSts() == WrkStsType.INBOUND_LIFT_RUN_COMPLETE.sts) {
//鑾峰彇鐩爣绔�
ForkLiftStaProtocol liftSta = ForkLiftUtils.getLiftStaByStaNo(wrkMast.getStaNo());
@@ -182,6 +179,15 @@
return false;
}
+// //妫�娴嬮殰纰嶇墿杞�
+// boolean checkObstacle = shuttleOperaUtils.checkObstacle(wrkMast.getLocNo(), new ArrayList<Integer>() {{
+// add(shuttleProtocol.getShuttleNo());
+// }});
+// if (checkObstacle) {
+// News.info("{}浠诲姟锛岄伩闅滆寖鍥存湁灏忚溅锛岀瓑寰呴殰纰嶅皬杞﹁皟绂讳腑", wrkMast.getWrkNo());
+// return false;
+// }
+
ShuttleAssignCommand assignCommand = new ShuttleAssignCommand();
assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo()); // 鍥涘悜绌挎杞︾紪鍙�
assignCommand.setTaskMode(ShuttleTaskModeType.TRANSPORT.id);//灏忚溅绉诲簱浠诲姟
@@ -218,7 +224,7 @@
//涓嬪彂浠诲姟
shuttleAction.assignWork(shuttleProtocol.getShuttleNo(), assignCommand);
//瑙﹀彂閫氱煡
- notifyUtils.notify(String.valueOf(SlaveType.Shuttle), shuttleProtocol.getShuttleNo(), String.valueOf(wrkMast.getWrkNo()), NotifyMsgType.SHUTTLE_TRANSPORT);
+ notifyUtils.notify(String.valueOf(SlaveType.Shuttle), shuttleProtocol.getShuttleNo(), String.valueOf(wrkMast.getWrkNo()), wrkMast.getWmsWrkNo(), NotifyMsgType.SHUTTLE_TRANSPORT);
return false;
}
return false;
@@ -237,6 +243,7 @@
));
for (WrkMast wrkMast : wrkMasts) {
boolean step1 = this.shuttleOutExecuteStep1(wrkMast);//灏忚溅鎼嚭搴撲腑
+ Thread.sleep(100);
if (!step1) {
continue;
}
@@ -251,7 +258,7 @@
* 濡傞渶涓绘柟娉曟墽琛宑ontinue锛岃杩斿洖false
* ps:杩斿洖鍊紅rue骞朵笉浠h〃璇ユ柟娉曟墽琛屾垚鍔燂紝杩斿洖鍊间粎鍋氭爣璁扮敤浜庝富鏂规硶鏄惁鎵цcontinue
*/
- public boolean shuttleOutExecuteStep1(WrkMast wrkMast) {
+ public synchronized boolean shuttleOutExecuteStep1(WrkMast wrkMast) {
//101.鐢熸垚鍑哄簱浠诲姟 => 102.灏忚溅鎼繍涓�
if (wrkMast.getWrkSts() == WrkStsType.NEW_OUTBOUND.sts) {
Integer liftNo = wrkMast.getLiftNo();
@@ -262,20 +269,6 @@
News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屾湭鎵惧埌鍖归厤鐨勬彁鍗囨満", wrkMast.getWrkNo());
return false;
}
-
- //鍒ゆ柇鎻愬崌鏈烘槸鍚︽湁鍏朵粬浠诲姟
- WrkMast liftWrkMast = wrkMastService.selectLiftWrkMast(liftNo);
- if (liftWrkMast != null) {
- if (!liftWrkMast.getWrkNo().equals(wrkMast.getWrkNo())) {//鎻愬崌鏈轰换鍔″拰褰撳墠浠诲姟涓嶇浉鍚�
- News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満瀛樺湪鏈畬鎴愪换鍔★紝绂佹娲惧彂", wrkMast.getWrkNo(), wrkMast.getLiftNo());
- return false;
- }
- }
-
- wrkMast.setLiftNo(liftNo);
- wrkMast.setModiTime(new Date());
- wrkMastService.updateById(wrkMast);
- return false;
}
ForkLiftThread forkLiftThread = (ForkLiftThread) SlaveConnection.get(SlaveType.ForkLift, liftNo);
@@ -357,6 +350,15 @@
return false;
}
+// //妫�娴嬮殰纰嶇墿杞�
+// boolean checkObstacle = shuttleOperaUtils.checkObstacle(liftSta.getLocNo(), new ArrayList<Integer>() {{
+// add(shuttleProtocol.getShuttleNo());
+// }});
+// if (checkObstacle) {
+// News.info("{}浠诲姟锛岄伩闅滆寖鍥存湁灏忚溅锛岀瓑寰呴殰纰嶅皬杞﹁皟绂讳腑", wrkMast.getWrkNo());
+// return false;
+// }
+
ShuttleAssignCommand assignCommand = new ShuttleAssignCommand();
assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo()); // 鍥涘悜绌挎杞︾紪鍙�
assignCommand.setTaskMode(ShuttleTaskModeType.TRANSPORT.id);//灏忚溅绉诲簱浠诲姟
@@ -394,7 +396,7 @@
//涓嬪彂浠诲姟
shuttleAction.assignWork(shuttleProtocol.getShuttleNo(), assignCommand);
//瑙﹀彂閫氱煡
- notifyUtils.notify(String.valueOf(SlaveType.Shuttle), shuttleProtocol.getShuttleNo(), String.valueOf(wrkMast.getWrkNo()), NotifyMsgType.SHUTTLE_TRANSPORT);
+ notifyUtils.notify(String.valueOf(SlaveType.Shuttle), shuttleProtocol.getShuttleNo(), String.valueOf(wrkMast.getWrkNo()), wrkMast.getWmsWrkNo(), NotifyMsgType.SHUTTLE_TRANSPORT);
return false;
}
return false;
@@ -436,23 +438,26 @@
shuttleThread.setSyncTaskNo(0);
} else if (wrkMast.getWrkSts() == WrkStsType.MOVE_OUT_LIFT.sts) {
//308.灏忚溅杩佸嚭鎻愬崌鏈轰腑 ==> 309.灏忚溅杩佸嚭鎻愬崌鏈哄畬鎴�
+ if (Utils.getLev(shuttleProtocol.getCurrentLocNo()) != Utils.getLev(wrkMast.getLocNo())) {
+ continue;//灏忚溅鏈埌杈剧洰鏍囧眰
+ }
wrkMast.setWrkSts(WrkStsType.MOVE_OUT_LIFT_COMPLETE.sts);
shuttleThread.setSyncTaskNo(0);
} else if (wrkMast.getWrkSts() == WrkStsType.MOVE_SHUTTLE.sts) {
//310.灏忚溅绉诲姩涓� ==> 311.灏忚溅绉诲姩瀹屾垚
wrkMast.setWrkSts(WrkStsType.COMPLETE_MOVE.sts);
shuttleThread.setSyncTaskNo(0);
- notifyUtils.notify(String.valueOf(SlaveType.Shuttle), shuttleProtocol.getShuttleNo(), String.valueOf(wrkMast.getWrkNo()), NotifyMsgType.SHUTTLE_MOVE_COMPLETE);//瑙﹀彂閫氱煡
+ notifyUtils.notify(String.valueOf(SlaveType.Shuttle), shuttleProtocol.getShuttleNo(), String.valueOf(wrkMast.getWrkNo()), wrkMast.getWmsWrkNo(), NotifyMsgType.SHUTTLE_MOVE_COMPLETE);//瑙﹀彂閫氱煡
} else if (wrkMast.getWrkSts() == WrkStsType.CHARGE_SHUTTLE_WORKING.sts) {
//204.灏忚溅鍏呯數涓� ==> 205.灏忚溅鍏呯數瀹屾垚
wrkMast.setWrkSts(WrkStsType.CHARGE_SHUTTLE_COMPLETE.sts);
shuttleThread.setSyncTaskNo(0);
- notifyUtils.notify(String.valueOf(SlaveType.Shuttle), shuttleProtocol.getShuttleNo(), String.valueOf(wrkMast.getWrkNo()), NotifyMsgType.SHUTTLE_POWER_COMPLETE);//瑙﹀彂閫氱煡
+ notifyUtils.notify(String.valueOf(SlaveType.Shuttle), shuttleProtocol.getShuttleNo(), String.valueOf(wrkMast.getWrkNo()), wrkMast.getWmsWrkNo(), NotifyMsgType.SHUTTLE_POWER_COMPLETE);//瑙﹀彂閫氱煡
} else if (wrkMast.getWrkSts() == WrkStsType.LOC_MOVE_SHUTTLE_RUN.sts) {
//502.灏忚溅鎼繍涓� ==> 509.绉诲簱瀹屾垚
wrkMast.setWrkSts(WrkStsType.COMPLETE_LOC_MOVE.sts);
shuttleThread.setSyncTaskNo(0);
- notifyUtils.notify(String.valueOf(SlaveType.Shuttle), shuttleProtocol.getShuttleNo(), String.valueOf(wrkMast.getWrkNo()), NotifyMsgType.SHUTTLE_DELIVERY);//瑙﹀彂閫氱煡
+ notifyUtils.notify(String.valueOf(SlaveType.Shuttle), shuttleProtocol.getShuttleNo(), String.valueOf(wrkMast.getWrkNo()), wrkMast.getWmsWrkNo(), NotifyMsgType.SHUTTLE_DELIVERY);//瑙﹀彂閫氱煡
} else {
continue;
}
@@ -573,7 +578,7 @@
//涓嬪彂浠诲姟
shuttleAction.assignWork(shuttleProtocol.getShuttleNo(), assignCommand);
//瑙﹀彂閫氱煡
- notifyUtils.notify(String.valueOf(SlaveType.Shuttle), shuttleProtocol.getShuttleNo(), String.valueOf(wrkMast.getWrkNo()), NotifyMsgType.SHUTTLE_MOVING);
+ notifyUtils.notify(String.valueOf(SlaveType.Shuttle), shuttleProtocol.getShuttleNo(), String.valueOf(wrkMast.getWrkNo()), wrkMast.getWmsWrkNo(), NotifyMsgType.SHUTTLE_MOVING);
return false;
}
return false;
@@ -594,59 +599,6 @@
}
for (WrkMast wrkMast : wrkMasts) {
- Integer liftNo = wrkMast.getLiftNo();
- if (liftNo == null) {
- //鏈垎閰嶆彁鍗囨満
- Integer staNo = wrkMast.getIoType() == WrkIoType.IN.id ? wrkMast.getSourceStaNo() : wrkMast.getStaNo();
- liftNo = ForkLiftUtils.getConveyorBindLiftNo(staNo);
- if(liftNo == null) {
- News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屾湭鎵惧埌鍖归厤鐨勬彁鍗囨満", wrkMast.getWrkNo());
- continue;
- }
-
- ForkLiftThread forkLiftThread = (ForkLiftThread) SlaveConnection.get(SlaveType.ForkLift, liftNo);
- if (forkLiftThread == null) {
- continue;
- }
- ForkLiftProtocol forkLiftProtocol = forkLiftThread.getStatus();
- if (forkLiftProtocol == null) {
- continue;
- }
-
- if (!forkLiftThread.isIdle()) {
- News.info("{}鍙锋彁鍗囨満锛屽繖纰屼腑", liftNo);
- continue;
- }
-
- //鍒ゆ柇鎻愬崌鏈烘槸鍚︽湁鍏朵粬浠诲姟
- WrkMast liftWrkMast = wrkMastService.selectLiftWrkMast(wrkMast.getLiftNo());
- if (liftWrkMast != null) {
- if (!liftWrkMast.getWrkNo().equals(wrkMast.getWrkNo())) {//鎻愬崌鏈轰换鍔″拰褰撳墠浠诲姟涓嶇浉鍚�
- News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満瀛樺湪鏈畬鎴愪换鍔★紝绂佹娲惧彂", wrkMast.getWrkNo(), wrkMast.getLiftNo());
- continue;//褰撳墠鎻愬崌鏈哄瓨鍦ㄦ湭瀹屾垚浠诲姟锛岀瓑寰呬笅涓�娆¤疆璇�
- }
- }
-
- wrkMast.setLiftNo(liftNo);
- wrkMast.setModiTime(new Date());
- wrkMastService.updateById(wrkMast);
- continue;
- }
-
- ForkLiftThread forkLiftThread = (ForkLiftThread) SlaveConnection.get(SlaveType.ForkLift, liftNo);
- if (forkLiftThread == null) {
- continue;
- }
- ForkLiftProtocol forkLiftProtocol = forkLiftThread.getStatus();
- if (forkLiftProtocol == null) {
- continue;
- }
-
- if (!forkLiftThread.isIdle()) {
- News.info("{}鍙锋彁鍗囨満锛屽繖纰屼腑", liftNo);
- continue;
- }
-
boolean stepIn = this.liftIoExecuteStepIn(wrkMast);//鎻愬崌鏈哄叆搴�
if (!stepIn) {
continue;
@@ -689,7 +641,18 @@
return false;
}
- ForkLiftThread forkLiftThread = (ForkLiftThread) SlaveConnection.get(SlaveType.ForkLift, liftSta.getLiftNo());
+ Integer liftNo = wrkMast.getLiftNo();
+ if (liftNo == null) {
+ //鏈垎閰嶆彁鍗囨満
+ Integer staNo = wrkMast.getSourceStaNo();
+ liftNo = ForkLiftUtils.getConveyorBindLiftNo(staNo);
+ if(liftNo == null) {
+ News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屾湭鎵惧埌鍖归厤鐨勬彁鍗囨満", wrkMast.getWrkNo());
+ return false;
+ }
+ }
+
+ ForkLiftThread forkLiftThread = (ForkLiftThread) SlaveConnection.get(SlaveType.ForkLift, liftNo);
if (forkLiftThread == null) {
return false;
}
@@ -717,7 +680,7 @@
}
}
- //妫�娴嬫ゼ灞傛槸鍚︽湁绌挎杞�
+ //妫�娴嬫ゼ灞傛槸鍚︽湁鍙敤绌挎杞�
boolean checkLevHasShuttle = Utils.checkLevHasShuttle(liftSta.getLev());
if (!checkLevHasShuttle) {
if (wrkMast.getShuttleNo() != null) {
@@ -740,6 +703,13 @@
return false;
}
+ //璇锋眰涓婄骇绯荤粺锛屾槸鍚﹀厑璁稿叆搴�
+ boolean inMission = ForkLiftUtils.queryInMission(wrkMast.getSourceStaNo(), liftSta.getLiftNo(), wrkMast.getWmsWrkNo());
+ if (!inMission) {
+ News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屼笂绾х郴缁熶笉鍏佽鍏ュ簱", wrkMast.getWrkNo());
+ return false;
+ }
+
//鑾峰彇鎻愬崌鏈哄懡浠�
List<ForkLiftCommand> liftCommands = forkLiftThread.getPickAndPutCommand(wrkMast.getWrkNo(), wrkMast.getSourceStaNo(), liftSta.getLev());
ArrayList<ForkLiftCommand> commands = new ArrayList<>();
@@ -748,11 +718,12 @@
//鎻愪氦鍒扮嚎绋嬪幓宸ヤ綔
LiftAssignCommand assignCommand = new LiftAssignCommand();
assignCommand.setCommands(commands);
- assignCommand.setLiftNo(wrkMast.getLiftNo().shortValue());
+ assignCommand.setLiftNo(liftNo.shortValue());
assignCommand.setTaskNo(wrkMast.getWrkNo().shortValue());
assignCommand.setTaskMode(ForkLiftTaskModeType.PICK_PUT.id.shortValue());
wrkMast.setWrkSts(WrkStsType.INBOUND_LIFT_RUN.sts);//鎻愬崌鏈烘惉杩愪腑 1.鐢熸垚鍏ュ簱浠诲姟 ==> 3.鎻愬崌鏈烘惉杩愪腑
+ wrkMast.setLiftNo(liftNo);
wrkMast.setSystemMsg("");//娓呯┖娑堟伅
wrkMast.setModiTime(now);
if (wrkMastService.updateById(wrkMast)) {
@@ -773,15 +744,6 @@
//--------------------------------------鎻愬崌鏈哄嚭搴�-----------------------------------------//
//103.灏忚溅鎼繍瀹屾垚 ==> 104.鎻愬崌鏈烘惉杩愪腑
if (wrkMast.getWrkSts() == WrkStsType.OUTBOUND_SHUTTLE_RUN_COMPLETE.sts) {
- ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo());
- if (shuttleThread == null) {
- return false;
- }
- ShuttleProtocol shuttleProtocol = shuttleThread.getStatus();
- if(shuttleProtocol == null) {
- return false;
- }
-
//鑾峰彇婧愮珯
ForkLiftStaProtocol liftSta = ForkLiftUtils.getLiftStaByStaNo(wrkMast.getSourceStaNo());
if (liftSta == null) {
@@ -789,20 +751,38 @@
return false;//鎵句笉鍒扮珯鐐�
}
- if (shuttleProtocol.getCurrentLocNo().equals(liftSta.getLocNo())) {
- //灏忚溅杩樺湪杈撻�佺珯鐐�
- //鑾峰彇灏忚溅寰呮満浣�
- String standbyLocNo = Utils.getShuttleStandbyLocNo(liftSta.getLocNo());
- if(standbyLocNo == null) {
- News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛岃幏鍙栧皬杞﹀緟鏈轰綅澶辫触", wrkMast.getWrkNo());
+ if(wrkMast.getShuttleNo() != null) {
+ ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo());
+ if (shuttleThread == null) {
return false;
}
- //璋冨害灏忚溅鍘诲緟鏈轰綅
- boolean dispatchShuttle = shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), standbyLocNo, wrkMast.getShuttleNo());
- if (!dispatchShuttle) {
- News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屽皬杞﹀湪杈撻�佺珯鐐硅皟搴﹀皬杞﹂伩璁╁け璐�", wrkMast.getWrkNo());
+ ShuttleProtocol shuttleProtocol = shuttleThread.getStatus();
+ if(shuttleProtocol == null) {
return false;
}
+
+ if (shuttleProtocol.getCurrentLocNo().equals(liftSta.getLocNo())) {
+ //灏忚溅杩樺湪杈撻�佺珯鐐�
+ //鑾峰彇灏忚溅寰呮満浣�
+ String standbyLocNo = Utils.getShuttleStandbyLocNo(liftSta.getLocNo());
+ if (standbyLocNo == null) {
+ News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛岃幏鍙栧皬杞﹀緟鏈轰綅澶辫触", wrkMast.getWrkNo());
+ return false;
+ }
+ //璋冨害灏忚溅鍘诲緟鏈轰綅
+ boolean dispatchShuttle = shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), standbyLocNo, wrkMast.getShuttleNo());
+ if (!dispatchShuttle) {
+ News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屽皬杞﹀湪杈撻�佺珯鐐硅皟搴﹀皬杞﹂伩璁╁け璐�", wrkMast.getWrkNo());
+ return false;
+ }
+ } else {
+ //灏忚溅宸蹭笉鍦ㄨ緭閫佺珯鐐逛綅缃紝閲婃斁灏忚溅
+ wrkMast.setShuttleNo(null);//閲婃斁灏忚溅
+ wrkMast.setModiTime(new Date());
+ wrkMastService.updateById(wrkMast);
+ return false;
+ }
+ return false;
}
if (liftSta.getHasCar()) {
@@ -815,7 +795,18 @@
return false;
}
- ForkLiftThread forkLiftThread = (ForkLiftThread) SlaveConnection.get(SlaveType.ForkLift, liftSta.getLiftNo());
+ Integer liftNo = wrkMast.getLiftNo();
+ if (liftNo == null) {
+ //鏈垎閰嶆彁鍗囨満
+ Integer staNo = wrkMast.getStaNo();
+ liftNo = ForkLiftUtils.getConveyorBindLiftNo(staNo);
+ if(liftNo == null) {
+ News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屾湭鎵惧埌鍖归厤鐨勬彁鍗囨満", wrkMast.getWrkNo());
+ return false;
+ }
+ }
+
+ ForkLiftThread forkLiftThread = (ForkLiftThread) SlaveConnection.get(SlaveType.ForkLift, liftNo);
if (forkLiftThread == null) {
return false;
}
@@ -858,11 +849,12 @@
//鎻愪氦鍒扮嚎绋嬪幓宸ヤ綔
LiftAssignCommand assignCommand = new LiftAssignCommand();
assignCommand.setCommands(commands);
- assignCommand.setLiftNo(wrkMast.getLiftNo().shortValue());
+ assignCommand.setLiftNo(liftNo.shortValue());
assignCommand.setTaskNo(wrkMast.getWrkNo().shortValue());
assignCommand.setTaskMode(ForkLiftTaskModeType.PICK_PUT.id.shortValue());
wrkMast.setWrkSts(WrkStsType.OUTBOUND_LIFT_RUN.sts);//鎻愬崌鏈烘惉杩愪腑 103.鐢熸垚鍏ュ簱浠诲姟 ==> 104.鎻愬崌鏈烘惉杩愪腑
+ wrkMast.setLiftNo(liftNo);
wrkMast.setShuttleNo(null);//閲婃斁灏忚溅
wrkMast.setSystemMsg("");//娓呯┖娑堟伅
wrkMast.setModiTime(new Date());
@@ -905,12 +897,12 @@
wrkMast.setWrkSts(WrkStsType.COMPLETE_OUTBOUND.sts);
wrkMast.setLiftNo(null);//閲婃斁鎻愬崌鏈�
forkLiftThread.setSyncTaskNo(0);
+ redisUtil.set(RedisKeyType.FORK_LIFT_PUT_COMPLETE.key + forkLiftProtocol.getLiftNo(), wrkMast.getWmsWrkNo(), 60 * 3);
} else if (wrkMast.getWrkSts() == WrkStsType.MOVE_LIFT_RUN.sts) {
//306.鎻愬崌鏈烘惉杩愪腑 ==> 307.鎻愬崌鏈烘惉杩愬畬鎴�
wrkMast.setWrkSts(WrkStsType.MOVE_LIFT_RUN_COMPLETE.sts);
forkLiftThread.setSyncTaskNo(0);
}
-
wrkMast.setModiTime(new Date());
if (wrkMastService.updateById(wrkMast)) {
forkLiftThread.reset();
@@ -1088,6 +1080,12 @@
*/
public synchronized void loopShuttleCharge() {
try {
+
+ List<BasShuttleCharge> charges = basShuttleChargeService.selectList(new EntityWrapper<BasShuttleCharge>().orderBy("charge_id", true));
+ if (charges.isEmpty()) {
+ return;//鏃犲厖鐢垫々
+ }
+
for (ShuttleSlave shuttle : slaveProperties.getShuttle()) {
//鑾峰彇鍥涘悜绌挎杞︾嚎绋�
ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, shuttle.getId());
@@ -1108,17 +1106,21 @@
//灏忚溅鎵�鍦ㄦゼ灞�
int lev = Utils.getLev(shuttleProtocol.getCurrentLocNo());
- ShuttleChargeType shuttleCharge = null;
+ BasShuttleCharge shuttleCharge = null;
//鎼滅储灏忚溅鎵�鍦ㄦゼ灞傛湁娌℃湁鍏呯數妗�
- for (ShuttleChargeType chargeType : ShuttleChargeType.values()) {
- if (lev != Utils.getLev(chargeType.locNo)) {
+ for (BasShuttleCharge charge : charges) {
+ if (lev != Utils.getLev(charge.getLocNo())) {
continue;//灏忚溅鍜屽厖鐢垫々涓嶅湪鍚屼竴灞�
}
+ if (charge.getStatus() == 0) {
+ continue;//鍏呯數妗╄绂佺敤
+ }
+
//灏忚溅鍜屽厖鐢垫々鍦ㄥ悓涓�灞�
- if (wrkMastService.selectChargeWorkingByChargeSta(chargeType.id) == null) {
- shuttleCharge = chargeType;
+ if (wrkMastService.selectChargeWorkingByChargeSta(charge.getChargeId()) == null) {
+ shuttleCharge = charge;
break;
}
}
@@ -1126,17 +1128,22 @@
if (shuttleCharge == null) {
//鍚屾ゼ灞傛病鏈夋壘鍒板厖鐢垫々锛屾壘鍙敤鍏呯數妗�
//灏忚溅鍚屾ゼ灞傛病鏈夊厖鐢垫々锛屽彧瑕佸厖鐢垫々鍙敤灏辩敓鎴愬厖鐢典换鍔�
- for (ShuttleChargeType chargeType : ShuttleChargeType.values()) {
- if (wrkMastService.selectChargeWorkingByChargeSta(chargeType.id) == null) {
- //鍒ゆ柇褰撳墠鍏呯數妗╂ゼ灞傛槸鍚︽湁灏忚溅锛屽鏈夊皬杞︼紝涓嶅垎閰嶈鍏呯數妗�
- int chargeLev = Utils.getLev(chargeType.locNo);//鍏呯數妗╂ゼ灞�
- boolean checkLevHasShuttle = Utils.checkLevHasShuttle(chargeLev);//妫�娴嬫ゼ灞傛槸鍚︽湁绌挎杞�
- if (checkLevHasShuttle) {
- //褰撳墠鍏呯數妗╂ゼ灞傛湁绌挎杞︼紝涓嶅垎閰嶈鍏呯數妗�
+ for (BasShuttleCharge charge : charges) {
+ if (wrkMastService.selectChargeWorkingByChargeSta(charge.getChargeId()) == null) {
+ //鍒ゆ柇褰撳墠鍏呯數妗╂槸鍚︽湁灏忚溅锛屽鏈夊皬杞︼紝涓嶅垎閰嶈鍏呯數妗�
+ ArrayList<String> locs = new ArrayList<>();
+ locs.add(charge.getLocNo());
+ Integer checkHasShuttle = Utils.checkGroupLocHasShuttle(locs);
+ if(checkHasShuttle != null) {
+ //褰撳墠鍏呯數妗╂湁绌挎杞︼紝涓嶅垎閰嶈鍏呯數妗�
continue;
}
- shuttleCharge = chargeType;
+ if (charge.getStatus() == 0) {
+ continue;//鍏呯數妗╄绂佺敤
+ }
+
+ shuttleCharge = charge;
break;
}
}
@@ -1146,9 +1153,9 @@
continue;
}
- String chargeLocNo = shuttleCharge.locNo;
+ String chargeLocNo = shuttleCharge.getLocNo();
wrkMast = new WrkMast();
- wrkMast.setMk(String.valueOf(shuttleCharge.id));
+ wrkMast.setMk(String.valueOf(shuttleCharge.getChargeId()));
wrkMast.setWrkNo(commonService.getWorkNo(WrkIoType.SHUTTLE_CHARGE.id));
wrkMast.setWrkSts(WrkStsType.NEW_CHARGE.sts);
wrkMast.setIoType(WrkIoType.SHUTTLE_CHARGE.id);//300.鍏呯數
@@ -1312,7 +1319,7 @@
//涓嬪彂浠诲姟
shuttleAction.assignWork(shuttleProtocol.getShuttleNo(), assignCommand);
- notifyUtils.notify(String.valueOf(SlaveType.Shuttle), shuttleProtocol.getShuttleNo(), String.valueOf(wrkMast.getWrkNo()), NotifyMsgType.SHUTTLE_POWER_START);//瑙﹀彂閫氱煡
+ notifyUtils.notify(String.valueOf(SlaveType.Shuttle), shuttleProtocol.getShuttleNo(), String.valueOf(wrkMast.getWrkNo()), wrkMast.getWmsWrkNo(), NotifyMsgType.SHUTTLE_POWER_START);//瑙﹀彂閫氱煡
return false;
}
return true;
@@ -1363,13 +1370,22 @@
return false;
}
- ShuttleChargeType chargeType = ShuttleChargeType.get(Integer.parseInt(wrkMast.getMk()));
- if(chargeType == null) {
+ BasShuttleCharge basShuttleCharge = basShuttleChargeService.selectOne(new EntityWrapper<BasShuttleCharge>().eq("charge_id", wrkMast.getMk()));
+ if(basShuttleCharge == null) {
return false;
}
+// //妫�娴嬮殰纰嶇墿杞�
+// boolean checkObstacle = shuttleOperaUtils.checkObstacle(basShuttleCharge.getWaitLocNo(), new ArrayList<Integer>() {{
+// add(shuttleProtocol.getShuttleNo());
+// }});
+// if (checkObstacle) {
+// News.info("{}浠诲姟锛岄伩闅滆寖鍥存湁灏忚溅锛岀瓑寰呴殰纰嶅皬杞﹁皟绂讳腑", wrkMast.getWrkNo());
+// return false;
+// }
+
//璋冨害灏忚溅鍘诲緟鏈轰綅
- boolean dispatched = shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), chargeType.waitLocNo, wrkMast.getShuttleNo());
+ boolean dispatched = shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), basShuttleCharge.getWaitLocNo(), wrkMast.getShuttleNo());
if (!dispatched) {
return false;
}
@@ -1462,11 +1478,45 @@
return false;//鎵句笉鍒扮珯鐐�
}
- //鍒ゆ柇鎻愬崌鏈烘槸鍚︽湁鍏朵粬浠诲姟(璇ヤ换鍔¢渶瑕佹崲灞傚繀椤绘彁鍓嶇嫭鍗犳彁鍗囨満)
- WrkMast liftWrkMast = wrkMastService.selectLiftWrkMast(liftSta.getLiftNo());
- if (liftWrkMast != null) {
- News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満瀛樺湪鏈畬鎴愪换鍔★紝绂佹娲惧彂", wrkMast.getWrkNo(), liftSta.getLiftNo());
- return false;//褰撳墠鎻愬崌鏈哄瓨鍦ㄦ湭瀹屾垚浠诲姟锛岀瓑寰呬笅涓�娆¤疆璇�
+ if (liftSta.getHasTray()) {
+ News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屾簮绔欏瓨鍦ㄦ墭鐩�", wrkMast.getWrkNo());
+ return false;
+ }
+
+ if (liftSta.getHasCar()) {
+ News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屾簮绔欏瓨鍦ㄥ皬杞�", wrkMast.getWrkNo());
+ return false;
+ }
+
+ //鑾峰彇鐩爣杈撻�佺珯
+ ForkLiftStaProtocol liftStaTarget = ForkLiftUtils.getLiftStaByStaNo(wrkMast.getStaNo());
+ if (liftStaTarget == null) {
+ return false;//鎵句笉鍒扮珯鐐�
+ }
+
+ if (liftStaTarget.getHasTray()) {
+ News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛岀洰鏍囩珯瀛樺湪鎵樼洏", wrkMast.getWrkNo());
+ return false;
+ }
+
+ if (liftStaTarget.getHasCar()) {
+ News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛岀洰鏍囩珯瀛樺湪灏忚溅", wrkMast.getWrkNo());
+ return false;
+ }
+
+ if (wrkMast.getLiftNo() == null) {
+ //鍒ゆ柇鎻愬崌鏈烘槸鍚︽湁鍏朵粬浠诲姟(璇ヤ换鍔¢渶瑕佹崲灞傚繀椤绘彁鍓嶇嫭鍗犳彁鍗囨満)
+ WrkMast liftWrkMast = wrkMastService.selectLiftWrkMast(liftSta.getLiftNo());
+ if (liftWrkMast != null) {
+ News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満瀛樺湪鏈畬鎴愪换鍔★紝绂佹娲惧彂", wrkMast.getWrkNo(), liftSta.getLiftNo());
+ return false;//褰撳墠鎻愬崌鏈哄瓨鍦ㄦ湭瀹屾垚浠诲姟锛岀瓑寰呬笅涓�娆¤疆璇�
+ }
+
+ wrkMast.setModiTime(now);
+ wrkMast.setLiftNo(liftSta.getLiftNo());//鎻愬墠閿佸畾鎻愬崌鏈�
+ wrkMast.setSystemMsg("");//娓呯┖娑堟伅
+ wrkMastService.updateById(wrkMast);
+ return false;
}
//*************灏濊瘯閿佸畾鐩爣绔欒矾寰�***************
@@ -1507,14 +1557,12 @@
wrkMast.setWrkSts(WrkStsType.MOVE_SITE.sts);//灏忚溅绉诲姩鍒版彁鍗囨満涓� 301.鐢熸垚灏忚溅绉诲簱浠诲姟 ==> 302.灏忚溅绉诲姩鑷崇珯鐐�
wrkMast.setModiTime(now);
- wrkMast.setLiftNo(liftSta.getLiftNo());//鎻愬墠閿佸畾鎻愬崌鏈�
wrkMast.setSystemMsg("");//娓呯┖娑堟伅
-// shuttleProtocol.setToken(wrkMast.getWrkNo());//鐙崰璇ュ皬杞︿护鐗�
if (wrkMastService.updateById(wrkMast)) {
//涓嬪彂浠诲姟
shuttleAction.assignWork(shuttleProtocol.getShuttleNo(), assignCommand);
+ notifyUtils.notify(String.valueOf(SlaveType.Shuttle), shuttleProtocol.getShuttleNo(), String.valueOf(wrkMast.getWrkNo()), wrkMast.getWmsWrkNo(), NotifyMsgType.SHUTTLE_MOVING);
//瑙﹀彂閫氱煡
- notifyUtils.notify(String.valueOf(SlaveType.Shuttle), shuttleProtocol.getShuttleNo(), String.valueOf(wrkMast.getWrkNo()), NotifyMsgType.SHUTTLE_MOVING);
return false;
}
return false;
@@ -1693,6 +1741,10 @@
List<ShuttleCommand> commands = null;
//璺ㄦゼ灞傜Щ鍔ㄤ换鍔�
if (Utils.getLev(wrkMast.getSourceLocNo()) != Utils.getLev(wrkMast.getLocNo())) {
+ if (Utils.getLev(shuttleProtocol.getCurrentLocNo()) != Utils.getLev(wrkMast.getLocNo())) {
+ return false;//灏忚溅鏈埌杈剧洰鏍囧眰
+ }
+
//闇�瑕佸皢鍓嶄袱涓妭鐐逛綔涓虹櫧鍚嶅崟鑺傜偣浼犲叆
List<NavigateNode> targetNodes = ForkLiftUtils.getLiftStaNodes(wrkMast.getStaNo());
if (targetNodes == null) {
@@ -1714,6 +1766,15 @@
News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅锛岃矾寰勮绠楀け璐�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
return false;//璺緞璁$畻澶辫触
}
+
+// //妫�娴嬮殰纰嶇墿杞�
+// boolean checkObstacle = shuttleOperaUtils.checkObstacle(wrkMast.getLocNo(), new ArrayList<Integer>() {{
+// add(shuttleProtocol.getShuttleNo());
+// }});
+// if (checkObstacle) {
+// News.info("{}浠诲姟锛岄伩闅滆寖鍥存湁灏忚溅锛岀瓑寰呴殰纰嶅皬杞﹁皟绂讳腑", wrkMast.getWrkNo());
+// return false;
+// }
assignCommand.setCommands(commands);
@@ -1743,9 +1804,19 @@
continue;
}
+ List<Integer> liftAllStaNo = ForkLiftUtils.getLiftAllStaNo(liftNo);
+ if (liftAllStaNo.isEmpty()) {
+ continue;
+ }
+
+ List<Integer> conveyorBindLiftAllStaNo = ForkLiftUtils.getConveyorBindLiftAllStaNo(liftNo);
+ if (conveyorBindLiftAllStaNo.isEmpty()) {
+ continue;
+ }
+
//鑾峰彇鍏ュ簱浠诲姟
List<WrkMast> inWrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>()
- .eq("lift_no", liftNo)
+ .in("sta_no", liftAllStaNo)
.in("wrk_sts"
, WrkStsType.NEW_INBOUND.sts
, WrkStsType.INBOUND_DEVICE_RUN.sts
@@ -1757,7 +1828,7 @@
//鑾峰彇鍑哄簱浠诲姟
List<WrkMast> outWrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>()
- .eq("lift_no", liftNo)
+ .eq("sta_no", conveyorBindLiftAllStaNo)
.in("wrk_sts"
, WrkStsType.NEW_OUTBOUND.sts
, WrkStsType.OUTBOUND_SHUTTLE_RUN.sts
--
Gitblit v1.9.1