From c5244cbb8e98b5b3f2e6306ebfabf0333d76c6d6 Mon Sep 17 00:00:00 2001
From: Junjie <xjj@123>
Date: 星期五, 26 九月 2025 11:17:55 +0800
Subject: [PATCH] #
---
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | 162 ++++++++++++++++++++++++++++++++++++++++--------------
1 files changed, 120 insertions(+), 42 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 e1d18d0..1a31154 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -2,7 +2,6 @@
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.*;
@@ -143,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;
@@ -272,30 +271,30 @@
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;
@@ -617,18 +616,13 @@
//1.鐢熸垚鍏ュ簱浠诲姟 ==> 3.鎻愬崌鏈烘惉杩愪腑
if (wrkMast.getWrkSts() == WrkStsType.NEW_INBOUND.sts) {
//鑾峰彇鐩爣杈撻�佺珯
- 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;
}
@@ -701,7 +695,7 @@
}
//鑾峰彇鎻愬崌鏈哄懡浠�
- LiftCommand liftCommand = liftThread.getPickAndPutCommand(wrkMast.getWrkNo(), wrkMast.getSourceStaNo(), liftSta.getLev());
+ LiftCommand liftCommand = liftThread.getPickAndPutCommand(wrkMast.getWrkNo(), wrkMast.getSourceStaNo(), liftSta.getSiteId());
ArrayList<LiftCommand> commands = new ArrayList<>();
commands.add(liftCommand);
@@ -710,7 +704,7 @@
assignCommand.setCommands(commands);
assignCommand.setLiftNo(liftNo);
assignCommand.setTaskNo(wrkMast.getWrkNo());
- assignCommand.setTaskMode(ForkLiftTaskModeType.PICK_PUT.id);
+ assignCommand.setTaskMode(LiftTaskModeType.PICK_PUT.id);
wrkMast.setWrkSts(WrkStsType.INBOUND_LIFT_RUN.sts);//鎻愬崌鏈烘惉杩愪腑 1.鐢熸垚鍏ュ簱浠诲姟 ==> 3.鎻愬崌鏈烘惉杩愪腑
wrkMast.setSystemMsg("");//娓呯┖娑堟伅
@@ -774,11 +768,6 @@
return false;
}
- if (liftSta.getHasCar()) {
- News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}绔欑偣瀛樺湪灏忚溅锛岀姝㈡淳鍙�", wrkMast.getWrkNo(), liftSta.getSiteId());
- return false;
- }
-
if (!liftSta.getHasTray()) {
News.taskInfo(wrkMast.getWrkNo(), "{}浠诲姟锛寋}绔欑偣鏃犳墭鐩橈紝绂佹娲惧彂", wrkMast.getWrkNo(), liftSta.getSiteId());
return false;
@@ -788,7 +777,7 @@
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;
@@ -838,7 +827,7 @@
assignCommand.setCommands(commands);
assignCommand.setLiftNo(liftNo);
assignCommand.setTaskNo(wrkMast.getWrkNo());
- assignCommand.setTaskMode(ForkLiftTaskModeType.PICK_PUT.id);
+ assignCommand.setTaskMode(LiftTaskModeType.PICK_PUT.id);
wrkMast.setWrkSts(WrkStsType.OUTBOUND_LIFT_RUN.sts);//鎻愬崌鏈烘惉杩愪腑 103.鐢熸垚鍏ュ簱浠诲姟 ==> 104.鎻愬崌鏈烘惉杩愪腑
wrkMast.setShuttleNo(null);//閲婃斁灏忚溅
@@ -904,8 +893,8 @@
News.error("鎻愬崌鏈哄凡纭涓斾换鍔″畬鎴愮姸鎬�,澶嶄綅澶辫触锛屼絾鏈壘鍒板伐浣滄。銆傛彁鍗囨満鍙�={}锛屽伐浣滃彿={}", liftProtocol.getLiftNo(), liftProtocol.getTaskNo());
}
}else {
- boolean checkPreviewDispatchForkLift = commonService.checkWorkNoContainMk(liftProtocol.getTaskNo(), WrkIoType.PREVIEW_LIFT_MOVE.id);
- if (checkPreviewDispatchForkLift) {
+ boolean checkPreviewDispatchLift = commonService.checkWorkNoContainMk(liftProtocol.getTaskNo(), WrkIoType.PREVIEW_LIFT_MOVE.id);
+ if (checkPreviewDispatchLift) {
//灞炰簬鎻愬崌鏈洪璋冨害绉诲姩浠诲姟
//鏃犲伐浣滄。鏀拺锛岀洿鎺ョ‘璁ゅ畬鎴�
liftThread.setSyncTaskNo(0);
@@ -1011,31 +1000,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(
@@ -1060,7 +1049,7 @@
now, // 淇敼鏃堕棿
null, // 淇敼浜哄憳
"浠诲姟涓紓甯�", // 澶囨敞
- JSON.toJSONString(forkLiftProtocol) // 绯荤粺鐘舵�佹暟鎹�
+ JSON.toJSONString(liftProtocol) // 绯荤粺鐘舵�佹暟鎹�
);
if (!basLiftErrLogService.insert(basLiftErrLog)) {
News.error("鎻愬崌鏈簆lc寮傚父璁板綍澶辫触 ===>> [id:{}] [error:{}]", device.getDeviceNo(), errName);
@@ -1068,7 +1057,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);
@@ -1388,6 +1377,11 @@
return false;
}
+ Object limitObj = redisUtil.get(RedisKeyType.TASK_RUN_LIMIT.key + wrkMast.getWrkNo());
+ if (limitObj != null) {
+ return false;
+ }
+
//灏忚溅宸茬粡鍦ㄥ厖鐢垫々浣嶇疆锛屼笅鍙戝仠姝㈠厖鐢靛懡浠�
ShuttleAssignCommand assignCommand = new ShuttleAssignCommand();
assignCommand.setShuttleNo(shuttleProtocol.getShuttleNo());//鍥涘悜绌挎杞﹀彿
@@ -1400,6 +1394,7 @@
//涓嬪彂浠诲姟
shuttleAction.assignWork(shuttleProtocol.getShuttleNo(), assignCommand);
+ redisUtil.set(RedisKeyType.TASK_RUN_LIMIT.key + wrkMast.getWrkNo(), "limit", 10);
return false;
}
return true;
@@ -1666,7 +1661,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);
@@ -1680,6 +1681,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;
}
@@ -1756,7 +1763,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);
@@ -1937,4 +1944,75 @@
return true;
}
+ //鑷姩鍒囨崲鍑哄叆搴撴ā寮�
+ 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;
+ }
+
+ List<Integer> liftAllStaNo = LiftUtils.getLiftAllStaNo(liftNo);
+ if (liftAllStaNo.isEmpty()) {
+ continue;
+ }
+
+ List<Integer> conveyorBindLiftAllStaNo = LiftUtils.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 (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);
+ }
+ }
+ }
+ }
+
}
--
Gitblit v1.9.1