From d9505e143cdf452c3a33752b380ee1b3a410601d Mon Sep 17 00:00:00 2001
From: Junjie <xjj@123>
Date: 星期四, 16 十月 2025 14:48:52 +0800
Subject: [PATCH] #
---
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | 790 ++++++++++++++++++++++++++++++--------------------------
1 files changed, 424 insertions(+), 366 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 cd2efe4..24d2bb0 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -12,9 +12,10 @@
import com.zy.common.service.CommonService;
import com.zy.common.utils.*;
import com.zy.core.News;
-import com.zy.core.action.ForkLiftAction;
+import com.zy.core.action.LiftAction;
import com.zy.core.action.ShuttleAction;
import com.zy.core.cache.SlaveConnection;
+import com.zy.core.dispatcher.LiftDispatchUtils;
import com.zy.core.dispatcher.ShuttleDispatchUtils;
import com.zy.core.enums.*;
import com.zy.core.model.command.*;
@@ -57,8 +58,6 @@
@Autowired
private ConfigService configService;
@Autowired
- private NavigateMapUtils navigateMapUtils;
- @Autowired
private NavigateMapData navigateMapData;
@Autowired
private NavigateUtils navigateUtils;
@@ -67,13 +66,17 @@
@Autowired
private ShuttleAction shuttleAction;
@Autowired
- private ForkLiftAction forkLiftAction;
+ private LiftAction liftAction;
@Autowired
private NotifyUtils notifyUtils;
@Autowired
private BasShuttleChargeService basShuttleChargeService;
@Autowired
private DeviceConfigService deviceConfigService;
+ @Autowired
+ private LiftDispatchUtils liftDispatchUtils;
+ @Autowired
+ private BasShuttleService basShuttleService;
/**
* 鍒濆鍖栧疄鏃跺湴鍥�
@@ -87,7 +90,7 @@
Object data = redisUtil.get(RedisKeyType.MAP.key + lev);
if (data == null) {//redis鍦板浘鏁版嵁涓虹┖
//杞藉叆鍦板浘
- List<List<MapNode>> lists = navigateMapData.getJsonData(lev, NavigationMapType.getMapTypes(NavigationMapType.NONE), null, null);//鑾峰彇瀹屾暣鍦板浘(鍖呮嫭鍏ュ簱鍑哄簱)
+ List<List<MapNode>> lists = navigateMapData.getJsonOriginData(lev, NavigationMapType.getMapTypes(NavigationMapType.NONE), null, null);//鑾峰彇瀹屾暣鍦板浘(鍖呮嫭鍏ュ簱鍑哄簱)
//瀛樺叆鏁版嵁搴�
basMap.setData(JSON.toJSONString(lists));
@@ -98,7 +101,7 @@
}
//灏嗘暟鎹簱鍦板浘鏁版嵁瀛樺叆redis
- redisUtil.set(RedisKeyType.MAP.key + lev, JSON.toJSONString(basMap));
+ redisUtil.set(RedisKeyType.MAP.key + lev, lists);
}
}
@@ -139,7 +142,7 @@
public synchronized boolean shuttleInExecuteStep1(WrkMast wrkMast) {
if (wrkMast.getWrkSts() == WrkStsType.INBOUND_LIFT_RUN_COMPLETE.sts) {
//鑾峰彇鐩爣绔�
- ForkLiftStaProtocol liftSta = ForkLiftUtils.getLiftStaByStaNo(wrkMast.getStaNo());
+ LiftStaProtocol liftSta = LiftUtils.getLiftStaByStaNo(wrkMast.getStaNo());
if (liftSta == null) {
News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛岀己灏戠珯鐐逛俊鎭紝绂佹娲惧彂", wrkMast.getWrkNo());
return false;
@@ -181,10 +184,10 @@
}
//妫�娴嬮殰纰嶇墿杞�
- boolean checkObstacle = shuttleOperaUtils.checkObstacle(wrkMast.getLocNo(), new ArrayList<Integer>() {{
+ int checkObstacle = shuttleOperaUtils.checkObstacle(wrkMast.getLocNo(), new ArrayList<Integer>() {{
add(shuttleProtocol.getShuttleNo());
- }});
- if (checkObstacle) {
+ }}, new ArrayList<>());
+ if (checkObstacle > 0) {
News.info("{}浠诲姟锛岄伩闅滆寖鍥存湁灏忚溅锛岀瓑寰呴殰纰嶅皬杞﹁皟绂讳腑", wrkMast.getWrkNo());
return false;
}
@@ -193,9 +196,11 @@
assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo()); // 鍥涘悜绌挎杞︾紪鍙�
assignCommand.setTaskMode(ShuttleTaskModeType.TRANSPORT.id);//灏忚溅绉诲簱浠诲姟
assignCommand.setTaskNo(wrkMast.getWrkNo());//浠诲姟鍙�
+ assignCommand.setSourceLocNo(shuttleProtocol.getCurrentLocNo());//婧愬簱浣�
+ assignCommand.setLocNo(wrkMast.getLocNo());//鐩爣搴撲綅
assignCommand.setAuto(true);//鑷姩妯″紡
- //鑾峰彇灏忚溅鍒拌緭閫佺珯鐐硅璧板懡浠�
+ //鑾峰彇灏忚溅鍒扮洰鏍囧簱浣嶅懡浠�
List<ShuttleCommand> commands = shuttleOperaUtils.getStartToTargetCommands(liftSta.getLocNo(), wrkMast.getLocNo(), NavigationMapType.getDfxWithDevice(), assignCommand, shuttleThread);
if (commands == null) {
News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅锛岃矾寰勮绠楀け璐�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
@@ -268,42 +273,42 @@
Integer liftNo = wrkMast.getLiftNo();
if (liftNo == null) {
//閫氳繃杈撻�佺嚎绔欏彿鑾峰彇鎻愬崌鏈哄彿
- liftNo = ForkLiftUtils.getConveyorBindLiftNo(wrkMast.getStaNo());
+ liftNo = LiftUtils.getConveyorBindLiftNo(wrkMast.getStaNo());
if (liftNo == null) {
News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屾湭鎵惧埌鍖归厤鐨勬彁鍗囨満", wrkMast.getWrkNo());
return false;
}
}
- ForkLiftThread forkLiftThread = (ForkLiftThread) SlaveConnection.get(SlaveType.ForkLift, liftNo);
- if (forkLiftThread == null) {
+ LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, liftNo);
+ if (liftThread == null) {
return false;
}
- ForkLiftProtocol forkLiftProtocol = forkLiftThread.getStatus();
- if (forkLiftProtocol == null) {
+ LiftProtocol liftProtocol = liftThread.getStatus();
+ if (liftProtocol == null) {
return false;
}
//鍒ゆ柇鎻愬崌鏈烘槸鍚﹀浜庡嚭搴撴ā寮�
- if (!forkLiftProtocol.getIOModeType().equals(ForkLiftIoModeType.OUT)) {
+ if (!liftProtocol.getIOModeType().equals(LiftIoModeType.OUT)) {
News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屾彁鍗囨満涓嶅浜庡嚭搴撴ā寮忥紝绂佹鍑哄簱", wrkMast.getWrkNo());
return false;
}
//鑾峰彇婧愮珯
- ForkLiftStaProtocol liftSta = ForkLiftUtils.getLiftStaByLev(liftNo, Utils.getLev(wrkMast.getSourceLocNo()));
+ LiftStaProtocol liftSta = LiftUtils.getLiftStaByLev(liftNo, Utils.getLev(wrkMast.getSourceLocNo()));
if (liftSta == null) {
News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛岀己灏戠珯鐐逛俊鎭紝绂佹娲惧彂", wrkMast.getWrkNo());
return false;
}
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;
}
@@ -372,10 +377,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());
- }});
- if (checkObstacle) {
+ }}, new ArrayList<>());
+ if (checkObstacle > 0) {
News.info("{}浠诲姟锛岄伩闅滆寖鍥存湁灏忚溅锛岀瓑寰呴殰纰嶅皬杞﹁皟绂讳腑", wrkMast.getWrkNo());
return false;
}
@@ -386,10 +391,19 @@
return false;
}
+ //妫�娴嬫槸鍚﹀瓨鍦ㄧЩ鍔ㄤ换鍔�
+ WrkMast moveWorking = wrkMastService.selectShuttleHasMoveWorking(wrkMast.getShuttleNo());
+ if (moveWorking != null) {
+ News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屽皬杞﹀瓨鍦ㄧЩ鍔ㄤ换鍔�", wrkMast.getWrkNo());
+ return false;
+ }
+
ShuttleAssignCommand assignCommand = new ShuttleAssignCommand();
assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo()); // 鍥涘悜绌挎杞︾紪鍙�
assignCommand.setTaskMode(ShuttleTaskModeType.TRANSPORT.id);//灏忚溅绉诲簱浠诲姟
assignCommand.setTaskNo(wrkMast.getWrkNo());//浠诲姟鍙�
+ assignCommand.setSourceLocNo(shuttleProtocol.getCurrentLocNo());//婧愬簱浣�
+ assignCommand.setLocNo(liftSta.getLocNo());//鐩爣搴撲綅
assignCommand.setAuto(true);//鑷姩妯″紡
//鑾峰彇灏忚溅鍒拌緭閫佺珯鐐硅璧板懡浠�
@@ -416,7 +430,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)) {
@@ -487,16 +501,36 @@
return false;
}
+ if (shuttleProtocol.getCurrentLocNo() == null) {
+ return false;
+ }
+
+ //鍒ゆ柇灏忚溅鏄惁鍒拌揪璐х墿搴撲綅
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());
return false;
}
+ //妫�娴嬫槸鍚﹀瓨鍦ㄧЩ鍔ㄤ换鍔�
+ WrkMast moveWorking = wrkMastService.selectShuttleHasMoveWorking(wrkMast.getShuttleNo());
+ if (moveWorking != null) {
+ News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屽皬杞﹀瓨鍦ㄧЩ鍔ㄤ换鍔�", wrkMast.getWrkNo());
+ return false;
+ }
+
//妫�娴嬮殰纰嶇墿杞�
- boolean checkObstacle = shuttleOperaUtils.checkObstacle(wrkMast.getLocNo(), new ArrayList<Integer>() {{
+ int checkObstacle = shuttleOperaUtils.checkObstacle(wrkMast.getLocNo(), new ArrayList<Integer>() {{
add(shuttleProtocol.getShuttleNo());
- }});
- if (checkObstacle) {
+ }}, new ArrayList<>());
+ if (checkObstacle > 0) {
News.info("{}浠诲姟锛岄伩闅滆寖鍥存湁灏忚溅锛岀瓑寰呴殰纰嶅皬杞﹁皟绂讳腑", wrkMast.getWrkNo());
return false;
}
@@ -505,10 +539,12 @@
assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo()); // 鍥涘悜绌挎杞︾紪鍙�
assignCommand.setTaskMode(ShuttleTaskModeType.TRANSPORT.id);//灏忚溅绉诲簱浠诲姟
assignCommand.setTaskNo(wrkMast.getWrkNo());//浠诲姟鍙�
+ assignCommand.setSourceLocNo(shuttleProtocol.getCurrentLocNo());//婧愬簱浣�
+ assignCommand.setLocNo(wrkMast.getLocNo());//鐩爣搴撲綅
assignCommand.setAuto(true);//鑷姩妯″紡
//鑾峰彇灏忚溅鍒拌緭閫佺珯鐐硅璧板懡浠�
- List<ShuttleCommand> commands = shuttleOperaUtils.getStartToTargetCommands(wrkMast.getSourceLocNo(), wrkMast.getLocNo(), NavigationMapType.getDfxWithDevice(), assignCommand, shuttleThread);
+ List<ShuttleCommand> commands = shuttleOperaUtils.getStartToTargetCommands(wrkMast.getSourceLocNo(), wrkMast.getLocNo(), NavigationMapType.getMapTypes(NavigationMapType.DFX), assignCommand, shuttleThread);
if (commands == null) {
News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅锛岃矾寰勮绠楀け璐�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
return false;
@@ -546,9 +582,9 @@
}
/**
- * 璐у弶鎻愬崌鏈轰换鍔�
+ * 鎻愬崌鏈轰换鍔�
*/
- public synchronized void forkLiftIoExecute() {
+ public synchronized void liftIoExecute() {
try {
//鎼滅储鏄惁鏈夊緟澶勭悊鐨勪换鍔�
List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>()
@@ -584,19 +620,25 @@
//1.鐢熸垚鍏ュ簱浠诲姟 ==> 3.鎻愬崌鏈烘惉杩愪腑
if (wrkMast.getWrkSts() == WrkStsType.NEW_INBOUND.sts) {
+ //鑾峰彇婧愯緭閫佺珯
+ LiftStaProtocol sourceLiftSta = LiftUtils.getLiftStaByStaNo(wrkMast.getSourceStaNo());
+ if (sourceLiftSta == null) {
+ return false;//鎵句笉鍒扮珯鐐�
+ }
+
+ if (!sourceLiftSta.getHasTray()) {
+ News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屾簮绔欐棤鎵樼洏", wrkMast.getWrkNo());
+ return false;
+ }
+
//鑾峰彇鐩爣杈撻�佺珯
- ForkLiftStaProtocol liftSta = ForkLiftUtils.getLiftStaByStaNo(wrkMast.getStaNo());
+ LiftStaProtocol liftSta = LiftUtils.getLiftStaByStaNo(wrkMast.getStaNo());
if (liftSta == null) {
return false;//鎵句笉鍒扮珯鐐�
}
if (liftSta.getHasTray()) {
News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛岀洰鏍囩珯瀛樺湪鎵樼洏", wrkMast.getWrkNo());
- return false;
- }
-
- if (liftSta.getHasCar()) {
- News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛岀洰鏍囩珯瀛樺湪灏忚溅", wrkMast.getWrkNo());
return false;
}
@@ -607,17 +649,16 @@
return false;
}
- //鑾峰彇灏忚溅寰呮満浣�
- String standbyLocNo = Utils.getShuttleStandbyLocNo(liftSta.getLocNo());
- if (standbyLocNo == null) {
- News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛岃幏鍙栧皬杞﹀緟鏈轰綅澶辫触", wrkMast.getWrkNo());
+ String targetLocNo = navigateUtils.calcEndLocation(wrkMast.getLocNo(), liftSta.getLocNo(), NavigationMapType.getMapTypes(NavigationMapType.NORMAL), null, null, 2);
+ if (targetLocNo == null) {//鍑鸿緭閫佺嚎绔欑偣璁$畻澶辫触
+ News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛岃皟搴﹀皬杞﹀幓鍏ュ簱灞傝繎鐐硅绠楀け璐�", wrkMast.getWrkNo());
return false;
}
//璋冨害灏忚溅鍘诲緟鏈轰綅
- boolean dispatchShuttle = shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), standbyLocNo);
+ boolean dispatchShuttle = shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), targetLocNo);
if (!dispatchShuttle) {
- News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛岃皟搴﹀皬杞﹀け璐�", wrkMast.getWrkNo());
+ News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛岃皟搴﹀皬杞﹀幓鍏ュ簱灞傚け璐�", wrkMast.getWrkNo());
return false;
}
return false;
@@ -627,65 +668,65 @@
if (liftNo == null) {
//鏈垎閰嶆彁鍗囨満
Integer staNo = wrkMast.getSourceStaNo();
- liftNo = ForkLiftUtils.getConveyorBindLiftNo(staNo);
+ liftNo = LiftUtils.getConveyorBindLiftNo(staNo);
if(liftNo == null) {
News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屾湭鎵惧埌鍖归厤鐨勬彁鍗囨満", wrkMast.getWrkNo());
return false;
}
//鐢宠鎻愬崌鏈鸿祫婧�
- boolean applyForkLift = forkLiftAction.applyForkLift(liftNo, wrkMast.getWrkNo());
- if(!applyForkLift) {
+ boolean applyLift = liftAction.applyLift(liftNo, wrkMast.getWrkNo());
+ if(!applyLift) {
News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛岀敵璇锋彁鍗囨満璧勬簮澶辫触锛岀姝㈠叆搴�", wrkMast.getWrkNo());
return false;
}
return false;
}
- ForkLiftThread forkLiftThread = (ForkLiftThread) SlaveConnection.get(SlaveType.ForkLift, liftNo);
- if (forkLiftThread == null) {
+ LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, liftNo);
+ if (liftThread == null) {
return false;
}
- ForkLiftProtocol forkLiftProtocol = forkLiftThread.getStatus();
- if (forkLiftProtocol == null) {
+ LiftProtocol liftProtocol = liftThread.getStatus();
+ if (liftProtocol == null) {
return false;
}
- if (!forkLiftThread.isIdle()) {
+ if (!liftThread.isIdle()) {
News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}鍙锋彁鍗囨満锛屽繖纰屼腑", wrkMast.getWrkNo(), liftSta.getLiftNo());
return false;
}
//鍒ゆ柇鎻愬崌鏈烘槸鍚﹀浜庡叆搴撴ā寮�
- if (!forkLiftProtocol.getIOModeType().equals(ForkLiftIoModeType.IN)) {
+ if (!liftProtocol.getIOModeType().equals(LiftIoModeType.IN)) {
News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屾彁鍗囨満涓嶅浜庡叆搴撴ā寮忥紝绂佹鍏ュ簱", wrkMast.getWrkNo());
return false;
}
//璇锋眰涓婄骇绯荤粺锛屾槸鍚﹀厑璁稿叆搴�
- boolean inMission = ForkLiftUtils.queryInMission(wrkMast.getSourceStaNo(), liftSta.getLiftNo(), wrkMast.getWmsWrkNo());
+ boolean inMission = LiftUtils.queryInMission(wrkMast.getSourceStaNo(), liftSta.getLiftNo(), wrkMast.getWmsWrkNo());
if (!inMission) {
News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屼笂绾х郴缁熶笉鍏佽鍏ュ簱", wrkMast.getWrkNo());
return false;
}
//鑾峰彇鎻愬崌鏈哄懡浠�
- ForkLiftCommand liftCommand = forkLiftThread.getPickAndPutCommand(wrkMast.getWrkNo(), wrkMast.getSourceStaNo(), liftSta.getLev());
- ArrayList<ForkLiftCommand> commands = new ArrayList<>();
+ LiftCommand liftCommand = liftThread.getPickAndPutCommand(wrkMast.getWrkNo(), wrkMast.getSourceStaNo(), liftSta.getSiteId());
+ ArrayList<LiftCommand> commands = new ArrayList<>();
commands.add(liftCommand);
//鎻愪氦鍒扮嚎绋嬪幓宸ヤ綔
LiftAssignCommand assignCommand = new LiftAssignCommand();
assignCommand.setCommands(commands);
- assignCommand.setLiftNo(liftNo.shortValue());
- assignCommand.setTaskNo(wrkMast.getWrkNo().shortValue());
- assignCommand.setTaskMode(ForkLiftTaskModeType.PICK_PUT.id.shortValue());
+ assignCommand.setLiftNo(liftNo);
+ assignCommand.setTaskNo(wrkMast.getWrkNo());
+ assignCommand.setTaskMode(LiftTaskModeType.PICK_PUT.id);
wrkMast.setWrkSts(WrkStsType.INBOUND_LIFT_RUN.sts);//鎻愬崌鏈烘惉杩愪腑 1.鐢熸垚鍏ュ簱浠诲姟 ==> 3.鎻愬崌鏈烘惉杩愪腑
wrkMast.setSystemMsg("");//娓呯┖娑堟伅
wrkMast.setModiTime(now);
if (wrkMastService.updateById(wrkMast)) {
//涓嬪彂浠诲姟
- forkLiftAction.assignWork(wrkMast.getLiftNo(), assignCommand);
+ liftAction.assignWork(wrkMast.getLiftNo(), assignCommand);
}
return false;
}
@@ -702,7 +743,7 @@
//103.灏忚溅鎼繍瀹屾垚 ==> 104.鎻愬崌鏈烘惉杩愪腑
if (wrkMast.getWrkSts() == WrkStsType.OUTBOUND_SHUTTLE_RUN_COMPLETE.sts) {
//鑾峰彇婧愮珯
- ForkLiftStaProtocol liftSta = ForkLiftUtils.getLiftStaByStaNo(wrkMast.getSourceStaNo());
+ LiftStaProtocol liftSta = LiftUtils.getLiftStaByStaNo(wrkMast.getSourceStaNo());
if (liftSta == null) {
News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屾壘涓嶅埌绔欑偣锛岀姝㈡淳鍙�", wrkMast.getWrkNo());
return false;//鎵句笉鍒扮珯鐐�
@@ -720,14 +761,21 @@
if (shuttleProtocol.getCurrentLocNo().equals(liftSta.getLocNo())) {
//灏忚溅杩樺湪杈撻�佺珯鐐�
- //鑾峰彇灏忚溅寰呮満浣�
- String standbyLocNo = Utils.getShuttleStandbyLocNo(liftSta.getLocNo());
- if (standbyLocNo == null) {
- News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛岃幏鍙栧皬杞﹀緟鏈轰綅澶辫触", wrkMast.getWrkNo());
+ //灏忚溅鍑烘彁鍗囨満杩戠偣璺濈
+ 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.getSourceLocNo(), NavigationMapType.getMapTypes(NavigationMapType.NORMAL), null, null, shuttleOutLiftLocationDistance);
+ if (targetLocNo == null) {//鍑鸿緭閫佺嚎绔欑偣璁$畻澶辫触
+ News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅锛屽嚭杈撻�佺嚎绔欑偣璁$畻澶辫触", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
return false;
}
+
//璋冨害灏忚溅鍘诲緟鏈轰綅
- boolean dispatchShuttle = shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), standbyLocNo, wrkMast.getShuttleNo());
+ boolean dispatchShuttle = shuttleDispatchUtils.dispatchShuttle(wrkMast.getWrkNo(), targetLocNo, wrkMast.getShuttleNo());
if (!dispatchShuttle) {
News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屽皬杞﹀湪杈撻�佺珯鐐硅皟搴﹀皬杞﹂伩璁╁け璐�", wrkMast.getWrkNo());
return false;
@@ -742,13 +790,8 @@
return false;
}
- if (liftSta.getHasCar()) {
- News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}绔欑偣瀛樺湪灏忚溅锛岀姝㈡淳鍙�", wrkMast.getWrkNo(), liftSta.getStaNo());
- return false;
- }
-
if (!liftSta.getHasTray()) {
- News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}绔欑偣鏃犳墭鐩橈紝绂佹娲惧彂", wrkMast.getWrkNo(), liftSta.getStaNo());
+ News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}绔欑偣鏃犳墭鐩橈紝绂佹娲惧彂", wrkMast.getWrkNo(), liftSta.getSiteId());
return false;
}
@@ -756,57 +799,57 @@
if (liftNo == null) {
//鏈垎閰嶆彁鍗囨満
Integer staNo = wrkMast.getStaNo();
- liftNo = ForkLiftUtils.getConveyorBindLiftNo(staNo);
+ liftNo = LiftUtils.getConveyorBindLiftNo(staNo);
if(liftNo == null) {
News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屾湭鎵惧埌鍖归厤鐨勬彁鍗囨満", wrkMast.getWrkNo());
return false;
}
//鐢宠鎻愬崌鏈鸿祫婧�
- boolean applyForkLift = forkLiftAction.applyForkLift(liftSta.getLiftNo(), wrkMast.getWrkNo());
- if(!applyForkLift) {
+ boolean applyLift = liftAction.applyLift(liftSta.getLiftNo(), wrkMast.getWrkNo());
+ if(!applyLift) {
News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛岀敵璇锋彁鍗囨満璧勬簮澶辫触锛岀姝㈡墽琛屽嚭搴�", wrkMast.getWrkNo());
return false;
}
return false;
}
- ForkLiftThread forkLiftThread = (ForkLiftThread) SlaveConnection.get(SlaveType.ForkLift, liftNo);
- if (forkLiftThread == null) {
+ LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, liftNo);
+ if (liftThread == null) {
return false;
}
- ForkLiftProtocol forkLiftProtocol = forkLiftThread.getStatus();
- if (forkLiftProtocol == null) {
+ LiftProtocol liftProtocol = liftThread.getStatus();
+ if (liftProtocol == null) {
return false;
}
- if (!forkLiftThread.isIdle()) {
+ if (!liftThread.isIdle()) {
News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}鍙锋彁鍗囨満锛屽繖纰屼腑", wrkMast.getWrkNo(), liftSta.getLiftNo());
return false;
}
//鍒ゆ柇鎻愬崌鏈烘槸鍚﹀浜庡嚭搴撴ā寮�
- if (!forkLiftProtocol.getIOModeType().equals(ForkLiftIoModeType.OUT)) {
+ if (!liftProtocol.getIOModeType().equals(LiftIoModeType.OUT)) {
News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屾彁鍗囨満涓嶅浜庡嚭搴撴ā寮忥紝绂佹鍑哄簱", wrkMast.getWrkNo());
return false;
}
//璇锋眰涓婄骇绯荤粺锛屾槸鍚﹀厑璁稿嚭搴�
- boolean outMission = ForkLiftUtils.queryOutMission(wrkMast.getStaNo());
+ boolean outMission = LiftUtils.queryOutMission(wrkMast.getStaNo());
if (!outMission) {
News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屼笂绾х郴缁熶笉鍏佽鍑哄簱", wrkMast.getWrkNo());
return false;
}
//鑾峰彇鎻愬崌鏈哄懡浠�
- ForkLiftCommand liftCommand = forkLiftThread.getPickAndPutCommand(wrkMast.getWrkNo(), liftSta.getLev(), wrkMast.getStaNo());
- ArrayList<ForkLiftCommand> commands = new ArrayList<>();
+ LiftCommand liftCommand = liftThread.getPickAndPutCommand(wrkMast.getWrkNo(), liftSta.getSiteId(), wrkMast.getStaNo());
+ ArrayList<LiftCommand> commands = new ArrayList<>();
commands.add(liftCommand);
//鎻愪氦鍒扮嚎绋嬪幓宸ヤ綔
LiftAssignCommand assignCommand = new LiftAssignCommand();
assignCommand.setCommands(commands);
- assignCommand.setLiftNo(liftNo.shortValue());
- assignCommand.setTaskNo(wrkMast.getWrkNo().shortValue());
- assignCommand.setTaskMode(ForkLiftTaskModeType.PICK_PUT.id.shortValue());
+ assignCommand.setLiftNo(liftNo);
+ assignCommand.setTaskNo(wrkMast.getWrkNo());
+ assignCommand.setTaskMode(LiftTaskModeType.PICK_PUT.id);
wrkMast.setWrkSts(WrkStsType.OUTBOUND_LIFT_RUN.sts);//鎻愬崌鏈烘惉杩愪腑 103.鐢熸垚鍏ュ簱浠诲姟 ==> 104.鎻愬崌鏈烘惉杩愪腑
wrkMast.setShuttleNo(null);//閲婃斁灏忚溅
@@ -814,7 +857,7 @@
wrkMast.setModiTime(new Date());
if (wrkMastService.updateById(wrkMast)) {
//涓嬪彂浠诲姟
- forkLiftAction.assignWork(wrkMast.getLiftNo(), assignCommand);
+ liftAction.assignWork(wrkMast.getLiftNo(), assignCommand);
}
return false;
}
@@ -822,61 +865,67 @@
}
/**
- * 璐у弶鎻愬崌鏈轰换鍔″畬鎴�
+ * 鎻愬崌鏈轰换鍔″畬鎴�
*/
- public synchronized void forkLiftFinished() {
+ public synchronized void liftFinished() {
try {
- List<DeviceConfig> forkliftList = deviceConfigService.selectList(new EntityWrapper<DeviceConfig>()
- .eq("device_type", String.valueOf(SlaveType.ForkLift)));
- for (DeviceConfig device : forkliftList) {
+ List<DeviceConfig> liftList = deviceConfigService.selectList(new EntityWrapper<DeviceConfig>()
+ .eq("device_type", String.valueOf(SlaveType.Lift)));
+ for (DeviceConfig device : liftList) {
//鑾峰彇鎻愬崌鏈轰俊鎭�
- ForkLiftThread forkLiftThread = (ForkLiftThread) SlaveConnection.get(SlaveType.ForkLift, device.getDeviceNo());
- if(forkLiftThread == null) {
+ LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, device.getDeviceNo());
+ if(liftThread == null) {
continue;
}
- ForkLiftProtocol forkLiftProtocol = forkLiftThread.getStatus();
- if (forkLiftProtocol == null) {
+ LiftProtocol liftProtocol = liftThread.getStatus();
+ if (liftProtocol == null) {
+ continue;
+ }
+
+ if (!liftThread.isDeviceIdle()) {
continue;
}
//鎻愬崌鏈轰负绛夊緟纭涓旂┖闂�
- if (forkLiftProtocol.getProtocolStatus() == ForkLiftProtocolStatusType.WAITING.id
- && forkLiftProtocol.getWrkNo() != 0
+ if (liftProtocol.getProtocolStatus() == LiftProtocolStatusType.WAITING.id
+ && liftProtocol.getTaskNo() != 0
) {
//灏嗕换鍔℃。鏍囪涓哄畬鎴�
- WrkMast wrkMast = wrkMastService.selectByWorkNo(forkLiftProtocol.getWrkNo());
+ WrkMast wrkMast = wrkMastService.selectByWorkNo(liftProtocol.getTaskNo());
if (wrkMast != null) {
if (wrkMast.getWrkSts() == WrkStsType.INBOUND_LIFT_RUN.sts) {
//3.鎻愬崌鏈烘惉杩愪腑 ==> 4.鎻愬崌鏈烘惉杩愬畬鎴�
wrkMast.setWrkSts(WrkStsType.INBOUND_LIFT_RUN_COMPLETE.sts);
wrkMast.setLiftNo(null);//閲婃斁鎻愬崌鏈�
- forkLiftThread.setSyncTaskNo(0);
+ }else if (wrkMast.getWrkSts() == WrkStsType.MOVE_NEARBY_COMPLETE.sts) {
+ //303.灏忚溅绉诲姩鑷宠繎鐐瑰畬鎴� -- 璋冨害鎻愬崌鏈哄埌灏忚溅灞�
} else if (wrkMast.getWrkSts() == WrkStsType.OUTBOUND_LIFT_RUN.sts) {
- //104.鎻愬崌鏈烘惉杩愪腑 ==> 109.鍑哄簱瀹屾垚
+ //304.鎻愬崌鏈烘惉杩愪腑 ==> 109.鍑哄簱瀹屾垚
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);
+ } else {
+ News.error("鎻愬崌鏈虹‘璁ゅけ璐ワ紝鎻愬崌鏈哄彿={}锛屽伐浣滃彿={}", liftProtocol.getLiftNo(), liftProtocol.getTaskNo());
+ return;
}
+
wrkMast.setModiTime(new Date());
if (wrkMastService.updateById(wrkMast)) {
- forkLiftThread.reset();
- News.info("鎻愬崌鏈哄凡纭涓斾换鍔″畬鎴愮姸鎬併�傛彁鍗囨満鍙�={}", forkLiftProtocol.getLiftNo());
+ liftThread.reset();
+ News.info("鎻愬崌鏈哄凡纭涓斾换鍔″畬鎴愮姸鎬併�傛彁鍗囨満鍙�={}", liftProtocol.getLiftNo());
} else {
- News.error("鎻愬崌鏈哄凡纭涓斾换鍔″畬鎴愮姸鎬�,澶嶄綅澶辫触锛屼絾鏈壘鍒板伐浣滄。銆傛彁鍗囨満鍙�={}锛屽伐浣滃彿={}", forkLiftProtocol.getLiftNo(), forkLiftProtocol.getWrkNo());
+ News.error("鎻愬崌鏈哄凡纭涓斾换鍔″畬鎴愮姸鎬�,澶嶄綅澶辫触锛屼絾鏈壘鍒板伐浣滄。銆傛彁鍗囨満鍙�={}锛屽伐浣滃彿={}", liftProtocol.getLiftNo(), liftProtocol.getTaskNo());
}
}else {
- boolean checkPreviewDispatchForkLift = commonService.checkWorkNoContainMk(forkLiftProtocol.getWrkNo(), WrkIoType.FORKLIFT_MOVE.id);
- if (checkPreviewDispatchForkLift) {
+ boolean checkPreviewDispatchLift = commonService.checkWorkNoContainMk(liftProtocol.getTaskNo(), WrkIoType.PREVIEW_LIFT_MOVE.id);
+ if (checkPreviewDispatchLift) {
//灞炰簬鎻愬崌鏈洪璋冨害绉诲姩浠诲姟
//鏃犲伐浣滄。鏀拺锛岀洿鎺ョ‘璁ゅ畬鎴�
- forkLiftThread.setSyncTaskNo(0);
- forkLiftThread.reset();
- News.info("宸茬‘璁ゆ彁鍗囨満棰勮皟搴︾Щ鍔ㄤ换鍔°�傛彁鍗囨満鍙�={}", forkLiftProtocol.getLiftNo());
+ liftThread.setSyncTaskNo(0);
+ liftThread.reset();
+ News.info("宸茬‘璁ゆ彁鍗囨満棰勮皟搴︾Щ鍔ㄤ换鍔°�傛彁鍗囨満鍙�={}", liftProtocol.getLiftNo());
}
}
}
@@ -977,31 +1026,31 @@
*/
private void recLiftErr() {
Date now = new Date();
- List<DeviceConfig> forkliftList = deviceConfigService.selectList(new EntityWrapper<DeviceConfig>()
- .eq("device_type", String.valueOf(SlaveType.ForkLift)));
- for (DeviceConfig device : forkliftList) {
+ List<DeviceConfig> liftList = deviceConfigService.selectList(new EntityWrapper<DeviceConfig>()
+ .eq("device_type", String.valueOf(SlaveType.Lift)));
+ for (DeviceConfig device : liftList) {
// 鑾峰彇鎻愬崌鏈轰俊鎭�
- ForkLiftThread forkLiftThread = (ForkLiftThread) SlaveConnection.get(SlaveType.ForkLift, device.getDeviceNo());
- if (forkLiftThread == null) {
+ LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, device.getDeviceNo());
+ if (liftThread == null) {
continue;
}
- ForkLiftProtocol forkLiftProtocol = forkLiftThread.getStatus();
- if (forkLiftProtocol == null) {
+ LiftProtocol liftProtocol = liftThread.getStatus();
+ if (liftProtocol == null) {
continue;
}
- if (forkLiftProtocol.getTaskNo() != 0) {
+ if (liftProtocol.getTaskNo() != 0) {
//鏈変换鍔�
- BasLiftErrLog latest = basLiftErrLogService.findLatestByTaskNo(device.getDeviceNo(), forkLiftProtocol.getTaskNo());
+ BasLiftErrLog latest = basLiftErrLogService.findLatestByTaskNo(device.getDeviceNo(), liftProtocol.getTaskNo());
// 鏈夊紓甯�
if (latest == null) {
- if (forkLiftProtocol.getErrorCode() != null && forkLiftProtocol.getErrorCode() != 0) {
- WrkMast wrkMast = wrkMastService.selectByWorkNo(forkLiftProtocol.getWrkNo());
+ if (liftProtocol.getErrorCode() != null && liftProtocol.getErrorCode() != 0) {
+ WrkMast wrkMast = wrkMastService.selectByWorkNo(liftProtocol.getTaskNo());
if (wrkMast == null) {
continue;
}
- BasLiftErr basLiftErr = basLiftErrService.queryByCode(forkLiftProtocol.getErrorCode());
+ BasLiftErr basLiftErr = basLiftErrService.queryByCode(liftProtocol.getErrorCode());
String errName = basLiftErr==null? "鏈煡寮傚父":basLiftErr.getErrName();
BasLiftErrLog basLiftErrLog = new BasLiftErrLog(
@@ -1026,7 +1075,7 @@
now, // 淇敼鏃堕棿
null, // 淇敼浜哄憳
"浠诲姟涓紓甯�", // 澶囨敞
- JSON.toJSONString(forkLiftProtocol) // 绯荤粺鐘舵�佹暟鎹�
+ JSON.toJSONString(liftProtocol) // 绯荤粺鐘舵�佹暟鎹�
);
if (!basLiftErrLogService.insert(basLiftErrLog)) {
News.error("鎻愬崌鏈簆lc寮傚父璁板綍澶辫触 ===>> [id:{}] [error:{}]", device.getDeviceNo(), errName);
@@ -1034,7 +1083,7 @@
}
} else {
// 寮傚父淇
- if (forkLiftProtocol.getErrorCode() == null || forkLiftProtocol.getErrorCode() == 0) {
+ if (liftProtocol.getErrorCode() == null || liftProtocol.getErrorCode() == 0) {
latest.setEndTime(now);
latest.setUpdateTime(now);
latest.setStatus(2);
@@ -1069,7 +1118,35 @@
}
//鍒ゆ柇褰撳墠灏忚溅鏄惁婊¤冻闇�瑕佸厖鐢佃姹�
- if (!shuttleThread.isRequireCharge()) {
+ 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());
+ if (wrkMast1 != null) {
+ continue;
+ }
+
+ WrkMast wrkMast2 = wrkMastService.selectShuttleHasMoveWorking(shuttleProtocol.getShuttleNo());
+ if (wrkMast2 != null) {
continue;
}
@@ -1136,7 +1213,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());
@@ -1286,7 +1363,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;
@@ -1303,7 +1380,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;
@@ -1313,7 +1390,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;
}
@@ -1329,6 +1420,7 @@
//涓嬪彂浠诲姟
shuttleAction.assignWork(shuttleProtocol.getShuttleNo(), assignCommand);
+ redisUtil.set(RedisKeyType.TASK_RUN_LIMIT.key + wrkMast.getWrkNo(), "limit", 10);
return false;
}
return true;
@@ -1336,7 +1428,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;
@@ -1352,10 +1444,10 @@
}
//妫�娴嬮殰纰嶇墿杞�
- boolean checkObstacle = shuttleOperaUtils.checkObstacle(basShuttleCharge.getWaitLocNo(), new ArrayList<Integer>() {{
+ int checkObstacle = shuttleOperaUtils.checkObstacle(basShuttleCharge.getWaitLocNo(), new ArrayList<Integer>() {{
add(shuttleProtocol.getShuttleNo());
- }});
- if (checkObstacle) {
+ }}, new ArrayList<>());
+ if (checkObstacle > 0) {
News.info("{}浠诲姟锛岄伩闅滆寖鍥存湁灏忚溅锛岀瓑寰呴殰纰嶅皬杞﹁皟绂讳腑", wrkMast.getWrkNo());
return false;
}
@@ -1453,46 +1545,20 @@
return false;
}
- //鑾峰彇婧愯緭閫佺珯
- ForkLiftStaProtocol liftSta = ForkLiftUtils.getLiftStaByStaNo(wrkMast.getSourceStaNo());
- if (liftSta == null) {
- return false;//鎵句笉鍒扮珯鐐�
- }
-
- if (liftSta.getHasTray()) {
- News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屾簮绔欏瓨鍦ㄦ墭鐩�", wrkMast.getWrkNo());
+ //鎼滅储鏈�杩戜笖鏃犳晠闅滄彁鍗囨満
+ LiftStaProtocol recentLiftStation = liftDispatchUtils.getRecentLiftStation(shuttleProtocol.getShuttleNo(), Utils.getLev(shuttleProtocol.getCurrentLocNo()));
+ if(recentLiftStation == null) {
+ News.info("{}鍙峰皬杞︼紝{}鐩爣搴撲綅锛屾病鏈夊彲鐢ㄧ┖闂茶緭閫佺珯鐐�", shuttleProtocol.getShuttleNo(), wrkMast.getLocNo());
return false;
}
- if (liftSta.getHasCar()) {
- News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屾簮绔欏瓨鍦ㄥ皬杞�", wrkMast.getWrkNo());
+ LiftStaProtocol targetLiftSta = LiftUtils.getLiftStaByLev(recentLiftStation.getLiftNo(), Utils.getLev(wrkMast.getLocNo()));
+ if(targetLiftSta == null) {
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;
- }
-
- 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(), liftSta.getLocNo(), NavigationMapType.getMapTypes(NavigationMapType.NORMAL), null, null, 1);
+ String endLocation = navigateUtils.calcEndLocation(shuttleProtocol.getCurrentLocNo(), recentLiftStation.getLocNo(), NavigationMapType.getMapTypes(NavigationMapType.NORMAL), null, null, 1);
if (endLocation == null) {
News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屽皬杞﹁繎鐐逛綅缃绠楀け璐�", wrkMast.getWrkNo());
return false;
@@ -1501,11 +1567,21 @@
//灏忚溅宸插湪杩戠偣浣嶇疆鏃犻渶鍓嶅線
if (shuttleProtocol.getCurrentLocNo().equals(endLocation)) {
wrkMast.setWrkSts(WrkStsType.MOVE_NEARBY_COMPLETE.sts);//灏忚溅绉诲姩鍒版彁鍗囨満涓� 301.鐢熸垚灏忚溅绉诲簱浠诲姟 ==> 303.灏忚溅绉诲姩鑷宠繎鐐瑰畬鎴�
+ wrkMast.setSourceStaNo(recentLiftStation.getSiteId());
+ wrkMast.setStaNo(targetLiftSta.getSiteId());
wrkMast.setModiTime(now);
wrkMast.setSystemMsg("");//娓呯┖娑堟伅
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);
@@ -1517,6 +1593,8 @@
assignCommand.setCommands(commands);
wrkMast.setWrkSts(WrkStsType.MOVE_NEARBY.sts);//灏忚溅绉诲姩鍒版彁鍗囨満涓� 301.鐢熸垚灏忚溅绉诲簱浠诲姟 ==> 302.灏忚溅绉诲姩鑷宠繎鐐逛腑
+ wrkMast.setSourceStaNo(recentLiftStation.getSiteId());
+ wrkMast.setStaNo(targetLiftSta.getSiteId());
wrkMast.setModiTime(now);
wrkMast.setSystemMsg("");//娓呯┖娑堟伅
if (wrkMastService.updateById(wrkMast)) {
@@ -1559,14 +1637,9 @@
}
//鑾峰彇婧愯緭閫佺珯
- ForkLiftStaProtocol liftSta = ForkLiftUtils.getLiftStaByStaNo(wrkMast.getSourceStaNo());
+ LiftStaProtocol liftSta = LiftUtils.getLiftStaByStaNo(wrkMast.getSourceStaNo());
if (liftSta == null) {
return false;//鎵句笉鍒扮珯鐐�
- }
-
- if (liftSta.getHasTray()) {
- News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屾簮绔欏瓨鍦ㄦ墭鐩�", wrkMast.getWrkNo());
- return false;
}
if (liftSta.getHasCar()) {
@@ -1575,14 +1648,9 @@
}
//鑾峰彇鐩爣杈撻�佺珯
- ForkLiftStaProtocol liftStaTarget = ForkLiftUtils.getLiftStaByStaNo(wrkMast.getStaNo());
+ LiftStaProtocol liftStaTarget = LiftUtils.getLiftStaByStaNo(wrkMast.getStaNo());
if (liftStaTarget == null) {
return false;//鎵句笉鍒扮珯鐐�
- }
-
- if (liftStaTarget.getHasTray()) {
- News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛岀洰鏍囩珯瀛樺湪鎵樼洏", wrkMast.getWrkNo());
- return false;
}
if (liftStaTarget.getHasCar()) {
@@ -1590,40 +1658,76 @@
return false;
}
- List<WrkMast> outWrkMastList = wrkMastService.selectList(new EntityWrapper<WrkMast>()
- .eq("io_type", 101)
- .in("wrk_sts"
- , WrkStsType.OUTBOUND_SHUTTLE_RUN.sts
- , WrkStsType.OUTBOUND_SHUTTLE_RUN_COMPLETE.sts
- , WrkStsType.OUTBOUND_LIFT_RUN.sts
- , WrkStsType.OUTBOUND_LIFT_RUN_COMPLETE.sts
- )
- );
- for (WrkMast outWrkMast : outWrkMastList) {
- if(Utils.getLev(outWrkMast.getSourceLocNo()) == Utils.getLev(wrkMast.getLocNo())) {
- News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛屽瓨鍦ㄦ鍦ㄦ墽琛岀殑灏忚溅鍑哄簱浠诲姟锛岀姝㈢Щ鍔ㄨ嚦绔欑偣", wrkMast.getWrkNo());
- return false;
- }
- }
-
if (wrkMast.getLiftNo() == null) {
- //鐢宠鎻愬崌鏈鸿祫婧�(璇ヤ换鍔¢渶瑕佹崲灞傚繀椤绘彁鍓嶇嫭鍗犳彁鍗囨満)
- boolean applyForkLift = forkLiftAction.applyForkLift(liftSta.getLiftNo(), wrkMast.getWrkNo());
- if(!applyForkLift) {
- News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛岀敵璇锋彁鍗囨満璧勬簮澶辫触锛岀姝㈢Щ鍔ㄨ嚦绔欑偣", wrkMast.getWrkNo());
+ //鐢宠鎻愬崌鏈鸿祫婧�
+ boolean applyLift = liftAction.applyLift(liftSta.getLiftNo(), wrkMast.getWrkNo());
+ if(!applyLift) {
+ News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛岀敵璇锋彁鍗囨満璧勬簮澶辫触锛岀姝㈢Щ鍔�", wrkMast.getWrkNo());
return false;
}
return false;
}
+ LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, wrkMast.getLiftNo());
+ if (liftThread == null) {
+ return false;
+ }
+
+ LiftProtocol liftProtocol = liftThread.getStatus();
+ if (liftProtocol == null) {
+ return false;
+ }
+
+ if (!liftThread.isIdle()) {
+ News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満蹇欑涓紝绂佹娲惧彂", wrkMast.getWrkNo(), wrkMast.getLiftNo());
+ return false;
+ }
+
+ Object object = redisUtil.get(RedisKeyType.LIFT_MOVE_TO_SHUTTLE_LIMIT.key + wrkMast.getWrkNo());
+ int targetLev = Utils.getLev(shuttleProtocol.getCurrentLocNo());
+ if (object == null || 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);
+
+ //鎻愪氦鍒扮嚎绋嬪幓宸ヤ綔
+ LiftAssignCommand assignCommand = new LiftAssignCommand();
+ assignCommand.setCommands(commands);
+ assignCommand.setLiftNo(wrkMast.getLiftNo());
+ assignCommand.setTaskNo(wrkMast.getWrkNo());
+ assignCommand.setTaskMode(LiftTaskModeType.MOVE.id);
+ //涓嬪彂浠诲姟
+ 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;
+ }
+
+ 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(), liftSta.getLocNo(), NavigationMapType.getNormalWithDevice(), assignCommand, shuttleThread);
+ 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攣澶辫触
@@ -1657,51 +1761,51 @@
//鎻愬崌鏈烘惉杩愪腑 305.灏忚溅杩佸叆鎻愬崌鏈哄畬鎴� ==> 306.鎻愬崌鏈烘惉杩愪腑
if (wrkMast.getWrkSts() == WrkStsType.MOVE_IN_LIFT_COMPLETE.sts) {
- ForkLiftThread forkLiftThread = (ForkLiftThread) SlaveConnection.get(SlaveType.ForkLift, wrkMast.getLiftNo());
- if (forkLiftThread == null) {
+ LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, wrkMast.getLiftNo());
+ if (liftThread == null) {
return false;
}
- ForkLiftProtocol forkLiftProtocol = forkLiftThread.getStatus();
- if (forkLiftProtocol == null) {
+ LiftProtocol liftProtocol = liftThread.getStatus();
+ if (liftProtocol == null) {
return false;
}
- if (!forkLiftThread.isIdle()) {
+ if (!liftThread.isIdle()) {
News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}鍙锋彁鍗囨満锛屾彁鍗囨満蹇欑涓紝绂佹娲惧彂", wrkMast.getWrkNo(), wrkMast.getLiftNo());
return false;
}
//鑾峰彇婧愮珯
- ForkLiftStaProtocol sourceLiftSta = ForkLiftUtils.getLiftStaByStaNo(wrkMast.getSourceStaNo());
+ LiftStaProtocol sourceLiftSta = LiftUtils.getLiftStaByStaNo(wrkMast.getSourceStaNo());
//鑾峰彇鐩爣绔�
- ForkLiftStaProtocol liftSta = ForkLiftUtils.getLiftStaByStaNo(wrkMast.getStaNo());
+ LiftStaProtocol liftSta = LiftUtils.getLiftStaByStaNo(wrkMast.getStaNo());
if (sourceLiftSta == null || liftSta == null) {
News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛岀己灏戠珯鐐逛俊鎭紝绂佹娲惧彂", wrkMast.getWrkNo());
return false;//缂哄皯绔欑偣淇℃伅
}
- if (liftSta.getHasTray()) {
- News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛岀洰鏍囩珯瀛樺湪鎵樼洏锛岀姝㈡淳鍙�", wrkMast.getWrkNo());
+ if (liftSta.getHasCar()) {
+ News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛岀洰鏍囩珯瀛樺湪灏忚溅锛岀姝㈡淳鍙�", wrkMast.getWrkNo());
return false;//鏈夋墭鐩樿烦杩�
}
//鑾峰彇鎻愬崌鏈哄懡浠�
- ForkLiftCommand liftCommand = forkLiftThread.getShuttleSwitchCommand(wrkMast.getWrkNo(), sourceLiftSta.getLev(), liftSta.getLev());
- ArrayList<ForkLiftCommand> commands = new ArrayList<>();
+ LiftCommand liftCommand = liftThread.getShuttleSwitchCommand(wrkMast.getWrkNo(), sourceLiftSta.getSiteId(), liftSta.getSiteId());
+ ArrayList<LiftCommand> commands = new ArrayList<>();
commands.add(liftCommand);
//鎻愪氦鍒扮嚎绋嬪幓宸ヤ綔
LiftAssignCommand assignCommand = new LiftAssignCommand();
assignCommand.setCommands(commands);
- assignCommand.setLiftNo(wrkMast.getLiftNo().shortValue());
- assignCommand.setTaskNo(wrkMast.getWrkNo().shortValue());
- assignCommand.setTaskMode(ForkLiftTaskModeType.SHUTTLE_SWITCH.id.shortValue());
+ assignCommand.setLiftNo(wrkMast.getLiftNo());
+ assignCommand.setTaskNo(wrkMast.getWrkNo());
+ assignCommand.setTaskMode(LiftTaskModeType.SHUTTLE_SWITCH.id);
wrkMast.setWrkSts(WrkStsType.MOVE_LIFT_RUN.sts);//鎻愬崌鏈烘惉杩愪腑 305.灏忚溅杩佸叆鎻愬崌鏈哄畬鎴� ==> 306.鎻愬崌鏈烘惉杩愪腑
wrkMast.setSystemMsg("");//娓呯┖娑堟伅
wrkMast.setModiTime(now);
if (wrkMastService.updateById(wrkMast)) {
//涓嬪彂浠诲姟
- forkLiftAction.assignWork(wrkMast.getLiftNo(), assignCommand);
+ liftAction.assignWork(wrkMast.getLiftNo(), assignCommand);
}
}
return true;
@@ -1734,25 +1838,64 @@
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;
+ }
+
+ //灏忚溅鍑烘彁鍗囨満杩戠偣璺濈
+ 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;
+ }
+
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);
@@ -1807,7 +1950,7 @@
assignCommand.setLocNo(wrkMast.getLocNo());//鐩爣搴撲綅
//鑾峰彇灏忚溅鍒扮洰鏍囧簱浣嶅懡浠�
- List<ShuttleCommand> commands = shuttleOperaUtils.getStartToTargetCommands(shuttleProtocol.getCurrentLocNo(), wrkMast.getLocNo(), NavigationMapType.getNormalWithDevice(), assignCommand, shuttleThread);
+ List<ShuttleCommand> commands = shuttleOperaUtils.getStartToTargetCommands(shuttleProtocol.getCurrentLocNo(), wrkMast.getLocNo(), NavigationMapType.getMapTypes(NavigationMapType.NORMAL), assignCommand, shuttleThread);
if (commands == null) {
News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}灏忚溅锛岃矾寰勮绠楀け璐�", wrkMast.getWrkNo(), shuttleProtocol.getShuttleNo());
return false;//璺緞璁$畻澶辫触
@@ -1828,158 +1971,73 @@
}
//鑷姩鍒囨崲鍑哄叆搴撴ā寮�
- public void autoSwitchForkLiftIOMode() {
-// List<DeviceConfig> forkliftList = deviceConfigService.selectList(new EntityWrapper<DeviceConfig>()
-// .eq("device_type", String.valueOf(SlaveType.ForkLift)));
-// for (DeviceConfig device : forkliftList) {
-// Integer liftNo = device.getDeviceNo();
-// ForkLiftThread forkLiftThread = (ForkLiftThread) SlaveConnection.get(SlaveType.ForkLift, liftNo);
-// if (forkLiftThread == null) {
-// continue;
-// }
-// ForkLiftProtocol forkLiftProtocol = forkLiftThread.getStatus();
-// if (forkLiftProtocol == null) {
-// 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>()
-// .in("sta_no", liftAllStaNo)
-// .in("wrk_sts"
-// , WrkStsType.NEW_INBOUND.sts
-// , WrkStsType.INBOUND_DEVICE_RUN.sts
-// , WrkStsType.INBOUND_LIFT_RUN.sts
-// , WrkStsType.INBOUND_LIFT_RUN_COMPLETE.sts
-// , WrkStsType.INBOUND_SHUTTLE_RUN.sts
-// , WrkStsType.INBOUND_SHUTTLE_RUN_COMPLETE.sts
-// ));
-//
-// //鑾峰彇鍑哄簱浠诲姟
-// List<WrkMast> outWrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>()
-// .in("sta_no", conveyorBindLiftAllStaNo)
-// .in("wrk_sts"
-// , WrkStsType.NEW_OUTBOUND.sts
-// , WrkStsType.OUTBOUND_SHUTTLE_RUN.sts
-// , WrkStsType.OUTBOUND_SHUTTLE_RUN_COMPLETE.sts
-// , WrkStsType.OUTBOUND_LIFT_RUN.sts
-// , WrkStsType.OUTBOUND_LIFT_RUN_COMPLETE.sts
-// ));
-//
-// if (forkLiftProtocol.getIOModeType().equals(ForkLiftIoModeType.NONE)) {
-// //鏈煡妯″紡
-// if (!inWrkMasts.isEmpty()) {
-// forkLiftThread.switchIOMode(ForkLiftIoModeType.IN);
-// } else if (!outWrkMasts.isEmpty()) {
-// forkLiftThread.switchIOMode(ForkLiftIoModeType.OUT);
-// }else {
-// forkLiftThread.switchIOMode(ForkLiftIoModeType.IN);
-// }
-// } else if (forkLiftProtocol.getIOModeType().equals(ForkLiftIoModeType.IN)) {
-// //鍏ュ簱妯″紡
-// if (inWrkMasts.isEmpty() && !outWrkMasts.isEmpty()) {
-// forkLiftThread.switchIOMode(ForkLiftIoModeType.OUT);
-// }
-// } else if (forkLiftProtocol.getIOModeType().equals(ForkLiftIoModeType.OUT)) {
-// //鍑哄簱妯″紡
-// if (outWrkMasts.isEmpty() && !inWrkMasts.isEmpty()) {
-// forkLiftThread.switchIOMode(ForkLiftIoModeType.IN);
-// }
-// }
-// }
- }
-
- //鍑哄簱浠诲姟棰勮皟搴︽彁鍗囨満
- 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){
+ public void autoSwitchLiftIOMode() {
+ List<DeviceConfig> liftList = deviceConfigService.selectList(new EntityWrapper<DeviceConfig>()
+ .eq("device_type", String.valueOf(SlaveType.Lift)));
+ for (DeviceConfig device : liftList) {
+ Integer liftNo = device.getDeviceNo();
+ LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, liftNo);
+ if (liftThread == null) {
+ continue;
+ }
+ LiftProtocol liftProtocol = liftThread.getStatus();
+ if (liftProtocol == null) {
continue;
}
- //鑾峰彇鍥涘悜绌挎杞︾嚎绋�
- ShuttleThread shuttleThread = (ShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo());
- if (shuttleThread == null) {
+ List<Integer> liftAllStaNo = LiftUtils.getLiftAllStaNo(liftNo);
+ if (liftAllStaNo.isEmpty()) {
continue;
}
- ShuttleProtocol shuttleProtocol = shuttleThread.getStatus();
- if (shuttleProtocol == null) {
+ List<Integer> conveyorBindLiftAllStaNo = LiftUtils.getConveyorBindLiftAllStaNo(liftNo);
+ if (conveyorBindLiftAllStaNo.isEmpty()) {
continue;
}
- if(shuttleProtocol.getCurrentLocNo() == null){
- continue;
+ //鑾峰彇鍏ュ簱浠诲姟
+ List<WrkMast> inWrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>()
+ .in("sta_no", liftAllStaNo)
+ .in("wrk_sts"
+ , WrkStsType.NEW_INBOUND.sts
+ , WrkStsType.INBOUND_DEVICE_RUN.sts
+ , WrkStsType.INBOUND_LIFT_RUN.sts
+ , WrkStsType.INBOUND_LIFT_RUN_COMPLETE.sts
+ , WrkStsType.INBOUND_SHUTTLE_RUN.sts
+ , WrkStsType.INBOUND_SHUTTLE_RUN_COMPLETE.sts
+ ));
+
+ //鑾峰彇鍑哄簱浠诲姟
+ List<WrkMast> outWrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>()
+ .in("sta_no", conveyorBindLiftAllStaNo)
+ .in("wrk_sts"
+ , WrkStsType.NEW_OUTBOUND.sts
+ , WrkStsType.OUTBOUND_SHUTTLE_RUN.sts
+ , WrkStsType.OUTBOUND_SHUTTLE_RUN_COMPLETE.sts
+ , WrkStsType.OUTBOUND_LIFT_RUN.sts
+ , WrkStsType.OUTBOUND_LIFT_RUN_COMPLETE.sts
+ ));
+
+ if (liftProtocol.getIOModeType().equals(LiftIoModeType.NONE)) {
+ //鏈煡妯″紡
+ if (!inWrkMasts.isEmpty()) {
+ liftThread.switchIOMode(LiftIoModeType.IN);
+ } else if (!outWrkMasts.isEmpty()) {
+ liftThread.switchIOMode(LiftIoModeType.OUT);
+ }else {
+ liftThread.switchIOMode(LiftIoModeType.IN);
+ }
+ } else if (liftProtocol.getIOModeType().equals(LiftIoModeType.IN)) {
+ //鍏ュ簱妯″紡
+ if (inWrkMasts.isEmpty() && !outWrkMasts.isEmpty()) {
+ liftThread.switchIOMode(LiftIoModeType.OUT);
+ }
+ } else if (liftProtocol.getIOModeType().equals(LiftIoModeType.OUT)) {
+ //鍑哄簱妯″紡
+ if (outWrkMasts.isEmpty() && !inWrkMasts.isEmpty()) {
+ liftThread.switchIOMode(LiftIoModeType.IN);
+ }
}
-
- //閫氳繃杈撻�佺嚎绔欏彿鑾峰彇鎻愬崌鏈哄彿
- 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;
- }
-
- //鐢宠鎻愬崌鏈鸿祫婧�
- boolean applyForkLift = forkLiftAction.applyForkLift(liftNo, null);
- if(!applyForkLift) {
- continue;//鎻愬崌鏈哄凡琚粦瀹氾紝涓嶅啀鎵ц棰勮皟搴︿换鍔�
- }
-
- if (!forkLiftThread.isIdle()) {
- continue;
- }
-
- //鎻愬崌鏈轰笉鍦ㄥ嚭搴撳眰
- if (forkLiftProtocol.getLev().equals(Utils.getLev(wrkMast.getSourceLocNo()))) {
- continue;
- }
-
- //绉诲姩
- int workNo = commonService.getWorkNo(WrkIoType.FORKLIFT_MOVE.id);//鑾峰彇浠诲姟鍙�
-
- //鑾峰彇鎻愬崌鏈哄懡浠�
- ForkLiftCommand liftCommand = forkLiftThread.getMoveCommand(workNo, forkLiftProtocol.getLev(), Utils.getLev(wrkMast.getSourceLocNo()));
- ArrayList<ForkLiftCommand> commands = new ArrayList<>();
- commands.add(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