From 1b007b8d43f82cf86e3cf5f2a316f30bae51deb2 Mon Sep 17 00:00:00 2001
From: Junjie <xjj@123>
Date: 星期五, 23 五月 2025 12:53:40 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/shuttle_rcs' into shuttle_rcs
---
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | 227 +++++++++++++++++++++++++++++++++++++++++++-------------
1 files changed, 172 insertions(+), 55 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 ffb8a10..c21959d 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -117,7 +117,10 @@
List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>()
.in("wrk_sts"
, WrkStsType.INBOUND_LIFT_RUN_COMPLETE.sts
- ));
+ )
+ .orderBy("io_pri", false)
+ .orderBy("appe_time", true)
+ );
for (WrkMast wrkMast : wrkMasts) {
boolean step1 = this.shuttleInExecuteStep1(wrkMast);//灏忚溅鎼叆搴撲腑
Thread.sleep(100);
@@ -240,7 +243,10 @@
List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>()
.in("wrk_sts"
, WrkStsType.NEW_OUTBOUND.sts
- ));
+ )
+ .orderBy("io_pri", false)
+ .orderBy("appe_time", true)
+ );
for (WrkMast wrkMast : wrkMasts) {
boolean step1 = this.shuttleOutExecuteStep1(wrkMast);//灏忚溅鎼嚭搴撲腑
Thread.sleep(100);
@@ -269,19 +275,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(), liftNo);
- return false;
- }
- }
-
- wrkMast.setLiftNo(liftNo);
- wrkMast.setModiTime(new Date());
- wrkMastService.updateById(wrkMast);
}
ForkLiftThread forkLiftThread = (ForkLiftThread) SlaveConnection.get(SlaveType.ForkLift, liftNo);
@@ -313,6 +306,12 @@
if (liftSta.getHasTray()) {
News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}绔欑偣鏈夋墭鐩橈紝绂佹娲惧彂", wrkMast.getWrkNo(), liftSta.getStaNo());
+ return false;
+ }
+
+ boolean checkLocPathIsAvailable = navigateUtils.checkLocPathIsAvailable(wrkMast.getSourceLocNo(), liftSta.getLocNo());
+ if(!checkLocPathIsAvailable) {
+ News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屾湭璁$畻鍒板彲鎵ц璺緞锛岀瓑寰呬腑", wrkMast.getWrkNo());
return false;
}
@@ -357,18 +356,18 @@
//鍒ゆ柇灏忚溅鏄惁鍒拌揪璐х墿搴撲綅
if (!shuttleProtocol.getCurrentLocNo().equals(wrkMast.getSourceLocNo())) {
+ //妫�娴嬮殰纰嶇墿杞�
+ boolean checkObstacle = shuttleOperaUtils.checkObstacle(wrkMast.getSourceLocNo(), new ArrayList<Integer>() {{
+ add(shuttleProtocol.getShuttleNo());
+ }});
+ if (checkObstacle) {
+ News.info("{}浠诲姟锛岄伩闅滆寖鍥存湁灏忚溅锛岀瓑寰呴殰纰嶅皬杞﹁皟绂讳腑", wrkMast.getWrkNo());
+ return false;
+ }
+
//灏忚溅涓嶅湪杈撻�佺珯鐐逛綅缃�
shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), wrkMast.getSourceLocNo(), wrkMast.getShuttleNo());//璋冨害灏忚溅鍒拌揣鐗╂墍鍦ㄥ簱浣嶈繘琛屽彇璐�
News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅锛屾湭鍒拌揪杈撻�佺珯鐐癸紝绯荤粺绛夊緟涓�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
- return false;
- }
-
- //妫�娴嬮殰纰嶇墿杞�
- boolean checkObstacle = shuttleOperaUtils.checkObstacle(liftSta.getLocNo(), new ArrayList<Integer>() {{
- add(shuttleProtocol.getShuttleNo());
- }});
- if (checkObstacle) {
- News.info("{}浠诲姟锛岄伩闅滆寖鍥存湁灏忚溅锛岀瓑寰呴殰纰嶅皬杞﹁皟绂讳腑", wrkMast.getWrkNo());
return false;
}
@@ -510,7 +509,11 @@
public synchronized void shuttleLocMoveExecute() {
try {
//鏌ヨ绉诲簱浠诲姟
- List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>().in("wrk_sts", WrkStsType.NEW_LOC_MOVE.sts));
+ List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>()
+ .in("wrk_sts", WrkStsType.NEW_LOC_MOVE.sts)
+ .orderBy("io_pri", false)
+ .orderBy("appe_time", true)
+ );
for (WrkMast wrkMast : wrkMasts) {
boolean stepToTarget = this.shuttleLocMoveExecuteToTarget(wrkMast);//绉诲簱浠诲姟-灏忚溅鍘荤洰鏍囩偣
if (!stepToTarget) {
@@ -534,6 +537,12 @@
//灏忚溅绉诲姩鑷崇珯鐐� 501.鐢熸垚绉诲簱浠诲姟 ==> 502.灏忚溅鎼繍涓�
if (wrkMast.getWrkSts() == WrkStsType.NEW_LOC_MOVE.sts) {
+ boolean checkLocPathIsAvailable = navigateUtils.checkLocPathIsAvailable(wrkMast.getSourceLocNo(), wrkMast.getLocNo());
+ if(!checkLocPathIsAvailable) {
+ News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屾湭璁$畻鍒板彲鎵ц璺緞锛岀瓑寰呬腑", wrkMast.getWrkNo());
+ return false;
+ }
+
if (wrkMast.getShuttleNo() == null) {//娌℃湁缁戝畾灏忚溅锛岃繘琛岃皟搴�
boolean result = shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), wrkMast.getSourceLocNo());//璋冨害灏忚溅鍒拌揣鐗╃偣杩涜鍙栬揣
News.info("{}浠诲姟锛岃皟搴﹀皬杞}绯荤粺绛夊緟涓�", wrkMast.getWrkNo(), result ? "鎴愬姛" : "澶辫触");
@@ -552,6 +561,15 @@
if (!shuttleProtocol.getCurrentLocNo().equals(wrkMast.getSourceLocNo())) {
News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屽皬杞︽湭鍒拌揪鍙栬揣浣嶇疆", wrkMast.getWrkNo(), wrkMast.getSourceLocNo());
+ return false;
+ }
+
+ //妫�娴嬮殰纰嶇墿杞�
+ boolean checkObstacle = shuttleOperaUtils.checkObstacle(wrkMast.getLocNo(), new ArrayList<Integer>() {{
+ add(shuttleProtocol.getShuttleNo());
+ }});
+ if (checkObstacle) {
+ News.info("{}浠诲姟锛岄伩闅滆寖鍥存湁灏忚溅锛岀瓑寰呴殰纰嶅皬杞﹁皟绂讳腑", wrkMast.getWrkNo());
return false;
}
@@ -757,15 +775,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) {
@@ -773,20 +782,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()) {
@@ -913,6 +940,15 @@
News.info("鎻愬崌鏈哄凡纭涓斾换鍔″畬鎴愮姸鎬併�傛彁鍗囨満鍙�={}", forkLiftProtocol.getLiftNo());
} else {
News.error("鎻愬崌鏈哄凡纭涓斾换鍔″畬鎴愮姸鎬�,澶嶄綅澶辫触锛屼絾鏈壘鍒板伐浣滄。銆傛彁鍗囨満鍙�={}锛屽伐浣滃彿={}", forkLiftProtocol.getLiftNo(), forkLiftProtocol.getWrkNo());
+ }
+ }else {
+ boolean checkPreviewDispatchForkLift = commonService.checkWorkNoContainMk(forkLiftProtocol.getWrkNo(), WrkIoType.FORKLIFT_MOVE.id);
+ if (checkPreviewDispatchForkLift) {
+ //灞炰簬鎻愬崌鏈洪璋冨害绉诲姩浠诲姟
+ //鏃犲伐浣滄。鏀拺锛岀洿鎺ョ‘璁ゅ畬鎴�
+ forkLiftThread.setSyncTaskNo(0);
+ forkLiftThread.reset();
+ News.info("宸茬‘璁ゆ彁鍗囨満棰勮皟搴︾Щ鍔ㄤ换鍔°�傛彁鍗囨満鍙�={}", forkLiftProtocol.getLiftNo());
}
}
}
@@ -1278,7 +1314,7 @@
return false;
}
- if (!shuttleProtocol.getCurrentLocNo().equals(wrkMast.getLocNo())) {
+ if (!wrkMast.getLocNo().equals(shuttleProtocol.getCurrentLocNo())) {
return false;
}
@@ -1771,15 +1807,6 @@
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);
wrkMast.setWrkSts(WrkStsType.MOVE_SHUTTLE.sts);//灏忚溅绉诲姩鍒扮洰鏍囧簱浣嶄腑 309.灏忚溅杩佸嚭鎻愬崌鏈哄畬鎴� ==> 310.灏忚溅绉诲姩涓�
@@ -1813,6 +1840,11 @@
continue;
}
+ List<Integer> conveyorBindLiftAllStaNo = ForkLiftUtils.getConveyorBindLiftAllStaNo(liftNo);
+ if (conveyorBindLiftAllStaNo.isEmpty()) {
+ continue;
+ }
+
//鑾峰彇鍏ュ簱浠诲姟
List<WrkMast> inWrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>()
.in("sta_no", liftAllStaNo)
@@ -1827,7 +1859,7 @@
//鑾峰彇鍑哄簱浠诲姟
List<WrkMast> outWrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>()
- .eq("lift_no", liftNo)
+ .in("sta_no", conveyorBindLiftAllStaNo)
.in("wrk_sts"
, WrkStsType.NEW_OUTBOUND.sts
, WrkStsType.OUTBOUND_SHUTTLE_RUN.sts
@@ -1859,4 +1891,89 @@
}
}
+ //鍑哄簱浠诲姟棰勮皟搴︽彁鍗囨満
+ public void outTaskPreviewDispatchForkLift() {
+ List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>()
+ .in("wrk_sts"
+ , WrkStsType.OUTBOUND_SHUTTLE_RUN_COMPLETE.sts
+ ));
+ for (WrkMast wrkMast : wrkMasts) {
+ if(wrkMast.getShuttleNo() == null){
+ continue;
+ }
+
+ //鑾峰彇鍥涘悜绌挎杞︾嚎绋�
+ ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo());
+ if (shuttleThread == null) {
+ continue;
+ }
+
+ ShuttleProtocol shuttleProtocol = shuttleThread.getStatus();
+ if (shuttleProtocol == null) {
+ continue;
+ }
+
+ if(shuttleProtocol.getCurrentLocNo() == null){
+ continue;
+ }
+
+ //閫氳繃杈撻�佺嚎绔欏彿鑾峰彇鎻愬崌鏈哄彿
+ Integer liftNo = ForkLiftUtils.getConveyorBindLiftNo(wrkMast.getStaNo());
+ 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;
+ }
+
+ //瀛樺湪璋冨害閿�
+ Object object = redisUtil.get(RedisKeyType.OUT_TASK_PREVIEW_DISPATCH_FORKLIFT.key + forkLiftProtocol.getLiftNo());
+ if (object != null) {
+ continue;
+ }
+
+ //鍒ゆ柇鎻愬崌鏈烘槸鍚︽湁鍏朵粬浠诲姟
+ WrkMast liftWrkMast = wrkMastService.selectLiftWrkMast(wrkMast.getLiftNo());
+ if (liftWrkMast != null) {
+ continue;//鎻愬崌鏈哄凡琚粦瀹氾紝涓嶅啀鎵ц棰勮皟搴︿换鍔�
+ }
+
+ if (!forkLiftThread.isIdle()) {
+ continue;
+ }
+
+ //鎻愬崌鏈轰笉鍦ㄥ嚭搴撳眰
+ if (forkLiftProtocol.getLev().equals(Utils.getLev(wrkMast.getSourceLocNo()))) {
+ continue;
+ }
+
+ //绉诲姩
+ int workNo = commonService.getWorkNo(WrkIoType.FORKLIFT_MOVE.id);//鑾峰彇浠诲姟鍙�
+
+ //鑾峰彇鎻愬崌鏈哄懡浠�
+ List<ForkLiftCommand> liftCommand = forkLiftThread.getMoveCommand(workNo, forkLiftProtocol.getLev(), Utils.getLev(wrkMast.getSourceLocNo()));
+ ArrayList<ForkLiftCommand> commands = new ArrayList<>();
+ commands.addAll(liftCommand);
+
+ //鎻愪氦鍒扮嚎绋嬪幓宸ヤ綔
+ LiftAssignCommand assignCommand = new LiftAssignCommand();
+ assignCommand.setCommands(commands);
+ assignCommand.setLiftNo(forkLiftProtocol.getLiftNo().shortValue());
+ assignCommand.setTaskNo((short) workNo);
+ assignCommand.setTaskMode(ForkLiftTaskModeType.MOVE.id.shortValue());
+
+ forkLiftAction.assignWork(forkLiftProtocol.getLiftNo(), assignCommand);
+
+ redisUtil.set(RedisKeyType.OUT_TASK_PREVIEW_DISPATCH_FORKLIFT.key + forkLiftProtocol.getLiftNo(), "lock", 30);//30绉掍笉鍐嶈皟搴�
+ }
+ }
+
}
--
Gitblit v1.9.1