From 800d4421f6939c20d409dcc821caa4026fae181e Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期六, 09 九月 2023 09:15:33 +0800
Subject: [PATCH] #
---
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | 173 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 168 insertions(+), 5 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 731db7f..9259abd 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -69,6 +69,8 @@
@Autowired
private BasShuttleErrLogService basShuttleErrLogService;
@Autowired
+ private BasLiftErrLogService basLiftErrLogService;
+ @Autowired
private BasShuttleErrService basShuttleErrService;
@Autowired
private BasCrnErrorMapper basCrnErrorMapper;
@@ -721,6 +723,10 @@
if (!shuttleProtocol.isIdle()) {
return false;
}
+ //鍒ゆ柇灏忚溅浠ょ墝鏄惁鏈鍗犻
+ if (shuttleProtocol.getToken() != 0) {
+ return false;//灏忚溅宸茶鐙崰锛岀姝㈠啀娲惧彂浠诲姟
+ }
//鍒ゆ柇灏忚溅鏄惁鍒拌揪杈撻�佺珯鐐瑰簱浣�
if (!shuttleProtocol.getCurrentLocNo().equals(basDevp.getLocNo())) {
@@ -746,6 +752,7 @@
wrkMast.setWrkSts(5L);//4.鎻愬崌鏈烘惉杩愬畬鎴� => 5.灏忚溅鎼繍涓�
wrkMast.setModiTime(new Date());
+ shuttleProtocol.setToken(wrkMast.getWrkNo());//鐙崰灏忚溅浠ょ墝
if (wrkMastMapper.updateById(wrkMast) > 0) {
//涓嬪彂浠诲姟
MessageQueue.offer(SlaveType.Shuttle, assignCommand.getShuttleNo().intValue(), new Task(3, assignCommand));
@@ -793,6 +800,10 @@
if (!shuttleProtocol.isIdle()) {
return false;
}
+ //鍒ゆ柇灏忚溅浠ょ墝鏄惁鏈鍗犻
+ if (shuttleProtocol.getToken() != 0) {
+ return false;//灏忚溅宸茶鐙崰锛岀姝㈠啀娲惧彂浠诲姟
+ }
//鑾峰彇鐩爣绔欏搴旂殑杈撻�佺珯鐐�
BasDevp targetBasDevp = basDevpService.selectByLevAndLiftNo(Utils.getLev(wrkMast.getSourceLocNo()), wrkMast.getLiftNo());
@@ -824,6 +835,7 @@
wrkMast.setWrkSts(22L);//21.鐢熸垚鍑哄簱浠诲姟 => 22.灏忚溅鎼繍涓�
wrkMast.setModiTime(new Date());
+ shuttleProtocol.setToken(wrkMast.getWrkNo());//鐙崰灏忚溅浠ょ墝
if (wrkMastMapper.updateById(wrkMast) > 0) {
//涓嬪彂浠诲姟
MessageQueue.offer(SlaveType.Shuttle, assignCommand.getShuttleNo().intValue(), new Task(3, assignCommand));
@@ -856,11 +868,17 @@
switch (wrkMast.getWrkSts().intValue()) {
case 5://5.灏忚溅鎼繍涓� ==> 9.鍏ュ簱瀹屾垚
wrkMast.setWrkSts(9L);
- //浠诲姟鍙锋竻闆�
- shuttleProtocol.setTaskNo(0);
+ if (shuttleProtocol.getToken() == wrkMast.getWrkNo()) {
+ //閲婃斁灏忚溅浠ょ墝
+ shuttleProtocol.setToken(0);
+ }
break;
case 22://22.灏忚溅鎼繍涓� ==> 23.灏忚溅鎼繍瀹屾垚
wrkMast.setWrkSts(23L);
+ if (shuttleProtocol.getToken() == wrkMast.getWrkNo()) {
+ //閲婃斁灏忚溅浠ょ墝
+ shuttleProtocol.setToken(0);
+ }
break;
case 102://102.灏忚溅鍒版彁鍗囨満涓� ==> 103.灏忚溅鍒版彁鍗囨満瀹屾垚
wrkMast.setWrkSts(103L);
@@ -870,6 +888,10 @@
break;
case 108://108.灏忚溅绉诲姩涓� ==> 109.灏忚溅绉诲姩瀹屾垚
wrkMast.setWrkSts(109L);
+ if (shuttleProtocol.getToken() == wrkMast.getWrkNo()) {
+ //閲婃斁灏忚溅浠ょ墝
+ shuttleProtocol.setToken(0);
+ }
break;
default:
}
@@ -961,6 +983,10 @@
if (!liftProtocol.isIdle(wrkMast.getWrkNo().shortValue())) {
return false;
}
+ //鍒ゆ柇鎻愬崌鏈轰护鐗屾槸鍚︽湭琚崰棰�
+ if (liftProtocol.getToken() != 0) {
+ return false;//鎻愬崌鏈哄凡琚嫭鍗狅紝绂佹鍐嶆淳鍙戜换鍔�
+ }
//鍒ゆ柇鎻愬崌鏈烘槸鍚︽湁鍏朵粬浠诲姟
WrkMast liftWrkMast = wrkMastMapper.selectLiftWrkMast(liftThread.getSlave().getId());
if (liftWrkMast != null) {
@@ -991,6 +1017,7 @@
wrkMast.setWrkSts(3L);//2.璁惧涓婅蛋 ==> 3.鎻愬崌鏈烘惉杩愪腑
wrkMast.setLiftNo(liftThread.getSlave().getId());//浠诲姟妗g粦瀹氭彁鍗囨満鍙�
wrkMast.setModiTime(now);
+ liftProtocol.setToken(wrkMast.getWrkNo());//鐙崰鎻愬崌鏈轰护鐗�
if (wrkMastMapper.updateById(wrkMast) > 0) {
//涓嬪彂浠诲姟
MessageQueue.offer(SlaveType.Lift, liftProtocol.getLiftNo().intValue(), new Task(3, assignCommand));
@@ -1023,6 +1050,10 @@
if (!liftProtocol.isIdle(wrkMast.getWrkNo().shortValue())) {
return false;
}
+ //鍒ゆ柇鎻愬崌鏈轰护鐗屾槸鍚︽湭琚崰棰�
+ if (liftProtocol.getToken() != 0) {
+ return false;//鎻愬崌鏈哄凡琚嫭鍗狅紝绂佹鍐嶆淳鍙戜换鍔�
+ }
//鍒ゆ柇鎻愬崌鏈烘槸鍚︽湁鍏朵粬浠诲姟
WrkMast liftWrkMast = wrkMastMapper.selectLiftWrkMast(liftThread.getSlave().getId());
if (liftWrkMast != null) {
@@ -1053,6 +1084,7 @@
wrkMast.setWrkSts(24L);//23.灏忚溅鎼繍瀹屾垚 ==> 24.鎻愬崌鏈烘惉杩愪腑
wrkMast.setLiftNo(liftThread.getSlave().getId());//浠诲姟妗g粦瀹氭彁鍗囨満鍙�
wrkMast.setModiTime(now);
+ liftProtocol.setToken(wrkMast.getWrkNo());//鐙崰鎻愬崌鏈轰护鐗�
if (wrkMastMapper.updateById(wrkMast) > 0) {
//涓嬪彂浠诲姟
MessageQueue.offer(SlaveType.Lift, liftProtocol.getLiftNo().intValue(), new Task(3, assignCommand));
@@ -1088,11 +1120,19 @@
case 3://3.鎻愬崌鏈烘惉杩愪腑 ==> 4.鎻愬崌鏈烘惉杩愬畬鎴�
wrkMast.setWrkSts(4L);
wrkMast.setLiftNo(null);//閲婃斁鎻愬崌鏈�
+ if (liftProtocol.getToken() == wrkMast.getWrkNo()) {
+ //閲婃斁鎻愬崌鏈轰护鐗�
+ liftProtocol.setToken(0);
+ }
break;
case 24://24.鎻愬崌鏈烘惉杩愪腑 ==> 25.鎻愬崌鏈烘惉杩愬畬鎴�
wrkMast.setWrkSts(25L);
if (wrkMast.getIoType() == 11) {//搴撲綅绉昏浆
wrkMast.setWrkSts(4L);//4.鎻愬崌鏈烘惉杩愬畬鎴�
+ }
+ if (liftProtocol.getToken() == wrkMast.getWrkNo()) {
+ //閲婃斁鎻愬崌鏈轰护鐗�
+ liftProtocol.setToken(0);
}
break;
case 104://104.鎻愬崌鏈烘惉杩愪腑 ==> 105.鎻愬崌鏈烘惉杩愬畬鎴�
@@ -1415,6 +1455,7 @@
public void recErr() {
try {
this.recShuttleErr();
+ this.recLiftErr();
} catch (Exception e) {
News.error("recErr fail", e);
}
@@ -1446,7 +1487,7 @@
if (wrkMast == null) {
continue;
}
- BasShuttleErr basShuttleErr = basShuttleErrService.queryByCode(shuttleProtocol.getErrCode().get(0));
+ BasShuttleErr basShuttleErr = basShuttleErrService.queryByCode(shuttleProtocol.getErrCode());
String errName = basShuttleErr==null? "鏈煡寮傚父":basShuttleErr.getErrName();
BasShuttleErrLog basShuttleErrLog = new BasShuttleErrLog(
null, // 缂栧彿
@@ -1462,14 +1503,15 @@
wrkMast.getSourceStaNo(), // 婧愮珯
wrkMast.getSourceLocNo(), // 婧愬簱浣�
wrkMast.getBarcode(), // 鏉$爜
- shuttleProtocol.getErrCode().get(0), // 寮傚父鐮�
+ shuttleProtocol.getErrCode(), // 寮傚父鐮�
errName, // 寮傚父
1, // 寮傚父鎯呭喌
now, // 娣诲姞鏃堕棿
null, // 娣诲姞浜哄憳
now, // 淇敼鏃堕棿
null, // 淇敼浜哄憳
- "浠诲姟涓紓甯�" // 澶囨敞
+ "浠诲姟涓紓甯�", // 澶囨敞
+ JSON.toJSONString(shuttleProtocol) // 绯荤粺鐘舵�佹暟鎹�
);
if (!basShuttleErrLogService.insert(basShuttleErrLog)) {
News.error("鍥涘悜绌挎杞lc寮傚父璁板綍澶辫触 ===>> [id:{}] [error:{}]", shuttleSlave.getId(), errName);
@@ -1534,6 +1576,91 @@
// }
// }
// }
+ }
+ }
+ }
+
+ /**
+ * 鎻愬崌鏈哄紓甯镐俊鎭褰�
+ */
+ private void recLiftErr() {
+ Date now = new Date();
+ for (LiftSlave liftSlave : slaveProperties.getLift()) {
+ // 鑾峰彇鎻愬崌鏈轰俊鎭�
+ LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, liftSlave.getId());
+ if (liftThread == null) {
+ continue;
+ }
+ LiftProtocol liftProtocol = liftThread.getLiftProtocol();
+ if (liftProtocol == null) {
+ continue;
+ }
+
+ if (liftProtocol.getTaskNo() != 0) {
+ //鏈変换鍔�
+ BasLiftErrLog latest = basLiftErrLogService.findLatestByTaskNo(liftSlave.getId(), liftProtocol.getTaskNo().intValue());
+ // 鏈夊紓甯�
+ if (latest == null) {
+ if (liftProtocol.getDeviceError() != null && liftProtocol.getDeviceError()) {
+ WrkMast wrkMast = wrkMastMapper.selectById(liftProtocol.getTaskNo());
+ if (wrkMast == null) {
+ continue;
+ }
+
+ String errName = "";
+ if (liftProtocol.getFrontOverrun()) {
+ errName = "鍓嶈秴闄�";
+ } else if (liftProtocol.getBackOverrun()) {
+ errName = "鍚庤秴闄�";
+ } else if (liftProtocol.getLeftOverrun()) {
+ errName = "宸﹁秴闄�";
+ } else if (liftProtocol.getRightOverrun()) {
+ errName = "鍙宠秴闄�";
+ } else if (liftProtocol.getOverHeight()) {
+ errName = "瓒呴珮";
+ } else if (liftProtocol.getOverWeight()) {
+ errName = "瓒呴噸";
+ }
+
+ BasLiftErrLog basLiftErrLog = new BasLiftErrLog(
+ null, // 缂栧彿
+ wrkMast.getWrkNo(), // 宸ヤ綔鍙�
+ now, // 鍙戠敓鏃堕棿
+ null, // 缁撴潫鏃堕棿
+ wrkMast.getWrkSts(), // 宸ヤ綔鐘舵��
+ wrkMast.getIoType(), // 鍏ュ嚭搴撶被鍨�
+ liftSlave.getId(), // 鎻愬崌鏈�
+ null, // plc
+ wrkMast.getLocNo(), // 鐩爣搴撲綅
+ wrkMast.getStaNo(), // 鐩爣绔�
+ wrkMast.getSourceStaNo(), // 婧愮珯
+ wrkMast.getSourceLocNo(), // 婧愬簱浣�
+ wrkMast.getBarcode(), // 鏉$爜
+ null, // 寮傚父鐮�
+ errName, // 寮傚父
+ 1, // 寮傚父鎯呭喌
+ now, // 娣诲姞鏃堕棿
+ null, // 娣诲姞浜哄憳
+ now, // 淇敼鏃堕棿
+ null, // 淇敼浜哄憳
+ "浠诲姟涓紓甯�", // 澶囨敞
+ JSON.toJSONString(liftProtocol) // 绯荤粺鐘舵�佹暟鎹�
+ );
+ if (!basLiftErrLogService.insert(basLiftErrLog)) {
+ News.error("鎻愬崌鏈簆lc寮傚父璁板綍澶辫触 ===>> [id:{}] [error:{}]", liftSlave.getId(), errName);
+ }
+ }
+ } else {
+ // 寮傚父淇
+ if (liftProtocol.getDeviceError() == null || !liftProtocol.getDeviceError()) {
+ latest.setEndTime(now);
+ latest.setUpdateTime(now);
+ latest.setStatus(2);
+ if (!basLiftErrLogService.updateById(latest)) {
+ News.error("鎻愬崌鏈簆lc寮傚父璁板綍淇澶辫触 ===>> [id:{}] [errLogId:{}]", liftSlave.getId(), latest.getId());
+ }
+ }
+ }
}
}
}
@@ -1984,6 +2111,11 @@
return false;
}
+ //鍒ゆ柇灏忚溅浠ょ墝鏄惁鏈鍗犻
+ if (shuttleProtocol.getToken() != 0) {
+ return false;//灏忚溅宸茶鐙崰锛岀姝㈠啀娲惧彂浠诲姟
+ }
+
if (Utils.getLev(wrkMast.getLocNo()) == shuttleProtocol.getPoint().getZ()) {
//鐩爣搴撲綅鍜屽皬杞﹀簱浣嶅浜庡悓涓�妤煎眰锛岄渶瑕侀�氳繃鎻愬崌鏈鸿皟搴�
return true;//鐩存帴杩涘叆108.灏忚溅绉诲姩涓�
@@ -2062,6 +2194,7 @@
wrkMast.setWrkSts(102L);//灏忚溅绉诲姩鍒版彁鍗囨満涓� 101.鐢熸垚灏忚溅绉诲簱浠诲姟 ==> 102.灏忚溅鍒版彁鍗囨満涓�
wrkMast.setLiftNo(basLift.getLiftNo());//鎻愬崌鏈哄彿(閿佸畾鎻愬崌鏈洪槻姝㈣鍏朵粬浠诲姟鎶㈠崰)
wrkMast.setModiTime(now);
+ shuttleProtocol.setToken(wrkMast.getWrkNo());//鐙崰璇ュ皬杞︿护鐗�
if (wrkMastMapper.updateById(wrkMast) > 0) {
//涓嬪彂浠诲姟
MessageQueue.offer(SlaveType.Shuttle, assignCommand.getShuttleNo().intValue(), new Task(3, assignCommand));
@@ -2092,6 +2225,10 @@
}
if (!liftProtocol.isIdle(wrkMast.getWrkNo().shortValue())) {
return false;
+ }
+ //鍒ゆ柇鎻愬崌鏈轰护鐗屾槸鍚︽湭琚崰棰�
+ if (liftProtocol.getToken() != 0) {
+ return false;//鎻愬崌鏈哄凡琚嫭鍗狅紝绂佹鍐嶆淳鍙戜换鍔�
}
//鑾峰彇鍥涘悜绌挎杞︾嚎绋�
@@ -2133,6 +2270,7 @@
wrkMast.setWrkSts(104L);//鎻愬崌鏈烘惉杩愪腑 103.灏忚溅鍒版彁鍗囨満瀹屾垚 ==> 104.鎻愬崌鏈烘惉杩愪腑
wrkMast.setLiftNo(liftThread.getSlave().getId());//閿佸畾鎻愬崌鏈洪槻姝㈣鍗犵敤
wrkMast.setModiTime(now);
+ liftProtocol.setToken(wrkMast.getWrkNo());//鐙崰鎻愬崌鏈轰护鐗�
if (wrkMastMapper.updateById(wrkMast) > 0) {
//涓嬪彂浠诲姟
MessageQueue.offer(SlaveType.Lift, liftProtocol.getLiftNo().intValue(), new Task(3, assignCommand));
@@ -2166,6 +2304,11 @@
return false;
}
+ //鍒ゆ柇鎻愬崌鏈轰护鐗屾槸鍚︿负褰撳墠浠诲姟
+ if (liftProtocol.getToken() != wrkMast.getWrkNo()) {
+ return false;
+ }
+
//鑾峰彇鍥涘悜绌挎杞︾嚎绋�
NyShuttleThread shuttleThread = (NyShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo());
if (shuttleThread == null) {
@@ -2178,6 +2321,11 @@
//灏忚溅澶勪簬绌洪棽鐘舵��
if (!shuttleProtocol.isIdleNoCharge()) {
+ return false;
+ }
+
+ //鍒ゆ柇灏忚溅浠ょ墝鏄惁涓哄綋鍓嶄换鍔�
+ if (shuttleProtocol.getToken() != wrkMast.getWrkNo()) {
return false;
}
@@ -2233,6 +2381,15 @@
//灏忚溅绉诲姩鍒扮洰鏍囧簱浣嶄腑 107.灏忚溅杩佸嚭鎻愬崌鏈哄畬鎴� ==> 108.灏忚溅绉诲姩涓�
if (wrkMast.getWrkSts() == 107) {
+ LiftThread liftThread = (LiftThread) SlaveConnection.get(SlaveType.Lift, wrkMast.getLiftNo());
+ if (liftThread == null) {
+ return false;
+ }
+ LiftProtocol liftProtocol = liftThread.getLiftProtocol();
+ if (liftProtocol == null) {
+ return false;
+ }
+
//鑾峰彇鍥涘悜绌挎杞︾嚎绋�
NyShuttleThread shuttleThread = (NyShuttleThread) SlaveConnection.get(SlaveType.Shuttle, wrkMast.getShuttleNo());
if (shuttleThread == null) {
@@ -2245,6 +2402,11 @@
//灏忚溅澶勪簬绌洪棽鐘舵��
if (!shuttleProtocol.isIdleNoCharge()) {
+ return false;
+ }
+
+ //鍒ゆ柇灏忚溅浠ょ墝鏄惁涓哄綋鍓嶄换鍔�
+ if (shuttleProtocol.getToken() != wrkMast.getWrkNo()) {
return false;
}
@@ -2283,6 +2445,7 @@
wrkMast.setWrkSts(108L);//灏忚溅绉诲姩鍒扮洰鏍囧簱浣嶄腑 107.灏忚溅杩佸嚭鎻愬崌鏈哄畬鎴� ==> 108.灏忚溅绉诲姩涓�
wrkMast.setLiftNo(null);//閲婃斁鎻愬崌鏈�
wrkMast.setModiTime(now);
+ liftProtocol.setToken(0);//閲婃斁鎻愬崌鏈轰护鐗�
if (wrkMastMapper.updateById(wrkMast) > 0) {
//涓嬪彂浠诲姟
MessageQueue.offer(SlaveType.Shuttle, assignCommand.getShuttleNo().intValue(), new Task(3, assignCommand));
--
Gitblit v1.9.1