From e4abcf00a4be207814968b8be9b92be33ce1b0c9 Mon Sep 17 00:00:00 2001
From: luxiaotao1123 <t1341870251@63.com>
Date: 星期四, 10 三月 2022 17:14:39 +0800
Subject: [PATCH] #
---
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | 237 +++++++++++++++++++++++++++++++++++++++-------------------
1 files changed, 158 insertions(+), 79 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 3d1ad57..1c42ffe 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -493,8 +493,10 @@
// 濡傛灉鏈�杩戜竴娆℃槸鍏ュ簱妯″紡
if (crnProtocol.getLastIo().equals("I")) {
if (basCrnp.getInEnable().equals("Y")) {
- this.crnStnToLoc(crn, crnProtocol); // 鍏ュ簱
- crnProtocol.setLastIo("O");
+ // 鍏ュ簱
+ if (this.crnStnToLoc(crn, crnProtocol)) {
+ crnProtocol.setLastIo("O");
+ }
} else if (basCrnp.getOutEnable().equals("Y")) {
this.locToCrnStn(crn, crnProtocol); // 鍑哄簱
crnProtocol.setLastIo("I");
@@ -506,8 +508,10 @@
this.locToCrnStn(crn, crnProtocol); // 鍑哄簱
crnProtocol.setLastIo("I");
} else if (basCrnp.getInEnable().equals("Y")) {
- this.crnStnToLoc(crn, crnProtocol); // 鍏ュ簱
- crnProtocol.setLastIo("O");
+ // 鍏ュ簱
+ if (this.crnStnToLoc(crn, crnProtocol)) {
+ crnProtocol.setLastIo("O");
+ }
}
}
}
@@ -560,7 +564,6 @@
continue;
}
- // todo锛氬皬杞﹁縼鍏ュ嚭
// 鐩爣搴撲綅 ===>> 鏈�澶栧眰搴撲綅
if (locMastService.isOutMost(wrkMast.getLocNo())) {
// 鍒ゆ柇灏忚溅鏄惁鍦ㄦ渶澶栧眰搴撲綅锛屽鏋滄槸鍒欐惉璧帮紝濡傛灉涓嶆槸锛屽垯鐩存帴鍫嗗灈鏈哄叆搴�
@@ -577,6 +580,12 @@
}
// 娌℃湁灏忚溅
} else {
+
+ // 宸茬粡瀛樺湪鍚婅溅鎵ц浠诲姟鏃讹紝鍒欒繃婊�
+ if (wrkMastMapper.selectWorking(slave.getId()) != null) {
+ continue;
+ }
+
// 鍫嗗灈鏈哄叆搴� 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
CrnCommand crnCommand = new CrnCommand();
crnCommand.setCrnNo(slave.getId()); // 鍫嗗灈鏈虹紪鍙�
@@ -611,16 +620,21 @@
// 鏈夊皬杞�
if (steNo != null) {
// 灏忚溅琛岃蛋鍒板爢鍨涙満寰呮惉绉荤偣
- if (wrkMast.getWrkSts() == 2L) {
+ if (wrkMast.getWrkSts() == 2L && wrkMast.getStaNo() == null) {
this.letCarBeReady(wrkMast, steNo);
}
- // 鍫嗗灈鏈哄皢璐ф斁鑷冲皬杞︿笂 3.灏忚溅寰呮惉 ===>> 7.鍚婅溅鍏ュ簱涓�
- if (wrkMast.getWrkSts() == 3L) {
+ // 鍫嗗灈鏈哄皢璐ф斁鑷冲皬杞︿笂 3.灏忚溅寰呮惉锛堝皬杞︿笉鐢ㄦ惉杩愶紝宸茬粡鍦ㄥ綋鍓嶇粍搴撲綅锛� / 6.灏忚溅寰呭叆 ===>> 7.鍚婅溅鍏ュ簱涓�
+ if (wrkMast.getWrkSts() == 3L || wrkMast.getWrkSts() == 6L) {
// 灏忚溅澶勪簬绌洪棽
SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, steNo);
SteProtocol steProtocol = steThread.getSteProtocol();
if (steProtocol == null) { continue; }
if (steProtocol.getStatusType().equals(SteStatusType.IDLE)) {
+
+ // 宸茬粡瀛樺湪鍚婅溅鎵ц浠诲姟鏃讹紝鍒欒繃婊�
+ if (wrkMastMapper.selectWorking(slave.getId()) != null) {
+ continue;
+ }
// 鍫嗗灈鏈哄叆搴� 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
CrnCommand crnCommand = new CrnCommand();
crnCommand.setCrnNo(slave.getId()); // 鍫嗗灈鏈虹紪鍙�
@@ -642,7 +656,7 @@
wrkMast.setCrnStrTime(now);
wrkMast.setModiTime(now);
if (wrkMastMapper.updateById(wrkMast) == 0) {
- log.error("淇敼宸ヤ綔妗g姸鎬� 3.灏忚溅寰呮惉 => 7.鍚婅溅鍏ュ簱涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
+ log.error("淇敼宸ヤ綔妗g姸鎬� 3.灏忚溅寰呮惉/6.灏忚溅寰呭叆 => 7.鍚婅溅鍏ュ簱涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
}
return true;
}
@@ -650,17 +664,20 @@
}
// 娌℃湁灏忚溅
} else {
-
+ if (wrkMast.getWrkSts() == 2L && wrkMast.getStaNo() == null) {
+ // 瀵绘壘鏈�杩戠殑灏忚溅
+ SteThread steThread = queryIdleCar(wrkMast);
+ if (steThread != null) {
+ // 璁╁皬杞︾瓑寰呮惉杩愬緟缁�
+ this.letCarBeReady(wrkMast, steThread.getSlave().getId());
+ }
+ }
+ // 鍫嗗灈鏈烘惉杩愬皬杞�
+ if (wrkMast.getWrkSts() == 3L) {
+ this.carMoveIn(wrkMast, wrkMast.getSteNo(), crnProtocol);
+ }
}
-
-
}
-
- // 宸茬粡瀛樺湪鍚婅溅鎵ц浠诲姟鏃讹紝鍒欒繃婊�
- if (wrkMastMapper.selectWorking(slave.getId()) != null) {
- continue;
- }
-
}
return false;
@@ -703,14 +720,11 @@
if (!MessageQueue.offer(SlaveType.Ste, steNo, new Task(2, steCommand))) {
log.error("绌挎杞﹀懡浠や笅鍙戝け璐ワ紝绌挎杞﹀彿={}锛屼换鍔℃暟鎹�={}", steNo, JSON.toJSON(steCommand));
} else {
- // 淇敼宸ヤ綔妗g姸鎬� 2.璁惧涓婅蛋 => 3.灏忚溅寰呮惉
- Date now = new Date();
- wrkMast.setWrkSts(3L);
+ // 淇敼宸ヤ綔妗g姸鎬� 缁戝畾绌挎杞�
wrkMast.setSteNo(steNo);
- wrkMast.setCrnStrTime(now);
- wrkMast.setModiTime(now);
+ wrkMast.setModiTime(new Date());
if (wrkMastMapper.updateById(wrkMast) == 0) {
- log.error("淇敼宸ヤ綔妗g姸鎬� 2.璁惧涓婅蛋 => 3.灏忚溅寰呮惉 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
+ log.error("淇敼宸ヤ綔妗g姸鎬� 缁戝畾绌挎杞� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
}
}
}
@@ -719,44 +733,46 @@
/**
* 鍏ュ簱 ===>> 鍫嗗灈鏈烘惉鍏ュ皬杞�
*/
- public void carMoveIn(WrkMast wrkMast, Integer steNo) {
+ public void carMoveIn(WrkMast wrkMast, Integer steNo, CrnProtocol crnProtocol) {
// 鑾峰彇鍫嗗灈鏈轰俊鎭�
SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, steNo);
SteProtocol steProtocol = steThread.getSteProtocol();
if (steProtocol == null) { return; }
if (steProtocol.getStatusType().equals(SteStatusType.IDLE)) {
+ // 鍫嗗灈鏈虹┖闂�
+ if (crnProtocol.getStatusType().equals(CrnStatusType.IDLE) || crnProtocol.getTaskNo() == 0) {
+ LocMast locMast;
+ if (wrkMast.getWrkSts() <= 10) {
+ locMast = locMastService.selectById(wrkMast.getLocNo());
+ // 鍫嗗灈鏈哄懡浠や笅鍙戝尯 --------------------------------------------------------------------------
+ CrnCommand crnCommand = new CrnCommand();
+ crnCommand.setCrnNo(crnProtocol.getCrnNo()); // 鍫嗗灈鏈虹紪鍙�
+ crnCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); // 宸ヤ綔鍙�
+ crnCommand.setAckFinish((short) 0); // 浠诲姟瀹屾垚纭浣�
+ crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); // 浠诲姟妯″紡: 搴撲綅绉昏浆
+ crnCommand.setSourcePosX(steProtocol.getRow()); // 婧愬簱浣嶆帓
+ crnCommand.setSourcePosY(steProtocol.getBay()); // 婧愬簱浣嶅垪
+ crnCommand.setSourcePosZ(steProtocol.getLev()); // 婧愬簱浣嶅眰
+ crnCommand.setDestinationPosX(Utils.getGroupRow(locMast.getLocNo()).shortValue()); // 鐩爣搴撲綅鎺�
+ crnCommand.setDestinationPosY(locMast.getBay1().shortValue()); // 鐩爣搴撲綅鍒�
+ crnCommand.setDestinationPosZ(locMast.getLev1().shortValue()); // 鐩爣搴撲綅灞�
+ if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) {
+ log.error("鍫嗗灈鏈哄懡浠や笅鍙戝け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand));
+ } else {
+ // 淇敼宸ヤ綔妗g姸鎬� 3.灏忚溅寰呮惉 => 4.杩佸叆灏忚溅
+ Date now = new Date();
+ wrkMast.setWrkSts(4L);
+ wrkMast.setCrnStrTime(now);
+ wrkMast.setModiTime(now);
+ if (wrkMastMapper.updateById(wrkMast) == 0) {
+ log.error("淇敼宸ヤ綔妗g姸鎬� 3.灏忚溅寰呮惉 => 4.杩佸叆灏忚溅 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
+ }
+ }
- String locNo = Utils.append(steProtocol.getRow(), steProtocol.getBay(), steProtocol.getLev());
- LocMast locMast = locMastService.selectById(locNo);
-
- // 鍫嗗灈鏈哄懡浠や笅鍙戝尯 --------------------------------------------------------------------------
- CrnCommand crnCommand = new CrnCommand();
- crnCommand.setCrnNo(locMast.getCrnNo()); // 鍫嗗灈鏈虹紪鍙�
- crnCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); // 宸ヤ綔鍙�
- crnCommand.setAckFinish((short) 0); // 浠诲姟瀹屾垚纭浣�
- crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); // 浠诲姟妯″紡: 搴撲綅绉昏浆
- crnCommand.setSourcePosX(steProtocol.getRow()); // 婧愬簱浣嶆帓
- crnCommand.setSourcePosY(steProtocol.getBay()); // 婧愬簱浣嶅垪
- crnCommand.setSourcePosZ(steProtocol.getLev()); // 婧愬簱浣嶅眰
- crnCommand.setDestinationPosX(locMast.getRow1().shortValue()); // 鐩爣搴撲綅鎺�
- crnCommand.setDestinationPosY(locMast.getBay1().shortValue()); // 鐩爣搴撲綅鍒�
- crnCommand.setDestinationPosZ(locMast.getLev1().shortValue()); // 鐩爣搴撲綅灞�
- if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) {
- log.error("鍫嗗灈鏈哄懡浠や笅鍙戝け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand));
- } else {
-
- // 淇敼宸ヤ綔妗g姸鎬� 2.璁惧涓婅蛋 => 4.杩佸叆灏忚溅
- Date now = new Date();
- wrkMast.setWrkSts(4L);
- wrkMast.setCrnStrTime(now);
- wrkMast.setModiTime(now);
- if (wrkMastMapper.updateById(wrkMast) == 0) {
- log.error("淇敼宸ヤ綔妗g姸鎬� 2.璁惧涓婅蛋 => 3.鍚婅溅鍏ュ簱涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
}
}
}
-
}
/**
@@ -977,33 +993,6 @@
}
- /**
- * 绌挎杞﹀叆搴�
- */
- public void carGenerateStore() {
- for (SteSlave ste : slaveProperties.getSte()) {
- // 鑾峰彇鍫嗗灈鏈轰俊鎭�
- SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, ste.getId());
- SteProtocol steProtocol = steThread.getSteProtocol();
- if (steProtocol == null) { continue; }
- if (steProtocol.getStatusType().equals(SteStatusType.IDLE)) {
- // 鏌ヨ鏄惁鏈夊緟鍏ュ簱鐨勪换鍔�
- WrkMast wrkMast = wrkMastMapper.selectPakInStep8(steProtocol.getSteNo().intValue());
- if (wrkMast == null) { continue; }
-
- // 淇敼宸ヤ綔妗g姸鎬� 8.灏忚溅鎼叆搴� => 9.鍏ュ簱瀹屾垚
- Date now = new Date();
- wrkMast.setWrkSts(9L);
- wrkMast.setCrnStrTime(now);
- wrkMast.setModiTime(now);
- if (wrkMastMapper.updateById(wrkMast) == 0) {
- log.error("淇敼宸ヤ綔妗g姸鎬� 8.灏忚溅鎼叆搴� => 9.鍏ュ簱瀹屾垚 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
- } else {
- steThread.setResetFlag(true);
- }
- }
- }
- }
/**
* 鍫嗗灈鏈洪拡瀵逛簬灏忚溅杩佺Щ宸ヤ綔鐨勫畬鎴�
@@ -1107,12 +1096,102 @@
}
}
}
+ // 杩佸叆灏忚溅 瀹屾垚
+ } else if (wrkMast.getWrkSts() == 4) {
+ // 4.杩佸叆灏忚溅 ==> 6.灏忚溅寰呭叆
+ wrkMast.setWrkSts(6L);
+ Date now = new Date();
+ wrkMast.setCrnEndTime(now);
+ wrkMast.setModiTime(now);
+ // 淇敼鎴愬姛鍚庡浣嶅爢鍨涙満
+ if (wrkMastMapper.updateById(wrkMast) > 0) {
+ // 鍫嗗灈鏈哄浣�
+ crnThread.setResetFlag(true);
+ } else {
+ log.error("淇敼宸ヤ綔妗g姸鎬� 4.杩佸叆灏忚溅 => 6.灏忚溅寰呭叆 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
+ }
+ // 杩佸嚭灏忚溅 瀹屾垚
+ } else if (wrkMast.getWrkSts() == 5) {
+ // 5.杩佸嚭灏忚溅 ==> 6.灏忚溅寰呭叆
+ wrkMast.setWrkSts(6L);
+ Date now = new Date();
+ wrkMast.setCrnEndTime(now);
+ wrkMast.setModiTime(now);
+ // 淇敼鎴愬姛鍚庡浣嶅爢鍨涙満
+ if (wrkMastMapper.updateById(wrkMast) > 0) {
+ // 鍫嗗灈鏈哄浣�
+ crnThread.setResetFlag(true);
+ } else {
+ log.error("淇敼宸ヤ綔妗g姸鎬� 5.杩佸嚭灏忚溅 => 6.灏忚溅寰呭叆 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
+ }
}
}
}
}
/**
+ * 鎵ц瀵瑰伐浣滄。鐨勫畬鎴愭搷浣�
+ */
+ public void carGenerateStore() {
+ Date now = new Date();
+ for (SteSlave ste : slaveProperties.getSte()) {
+ // 鑾峰彇绌挎杞︿俊鎭�
+ SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, ste.getId());
+ SteProtocol steProtocol = steThread.getSteProtocol();
+ if (steProtocol == null) { continue; }
+ if (steProtocol.getStatusType().equals(SteStatusType.WAITING) && steProtocol.getTaskNo() != 0) {
+ // 鏌ヨ鏄惁鏈夊緟鍏ュ簱鐨勪换鍔�
+ WrkMast wrkMast = wrkMastMapper.selectPakInStep8(steProtocol.getSteNo().intValue());
+ if (wrkMast == null) { continue; }
+
+ switch (wrkMast.getWrkSts().intValue()) {
+ case 2:
+ // 淇敼宸ヤ綔妗g姸鎬� 2.璁惧涓婅蛋 => 3.灏忚溅寰呮惉
+ wrkMast.setWrkSts(3L);
+ wrkMast.setCrnStrTime(now);
+ wrkMast.setModiTime(now);
+ if (wrkMastMapper.updateById(wrkMast) == 0) {
+ log.error("淇敼宸ヤ綔妗g姸鎬� 2.璁惧涓婅蛋 => 3.灏忚溅寰呮惉 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
+ } else {
+ steThread.setResetFlag(true);
+ }
+ break;
+ case 8:
+ // 淇敼宸ヤ綔妗g姸鎬� 8.灏忚溅鎼叆搴� => 9.鍏ュ簱瀹屾垚
+ wrkMast.setWrkSts(9L);
+ wrkMast.setCrnStrTime(now);
+ wrkMast.setModiTime(now);
+ if (wrkMastMapper.updateById(wrkMast) == 0) {
+ log.error("淇敼宸ヤ綔妗g姸鎬� 8.灏忚溅鎼叆搴� => 9.鍏ュ簱瀹屾垚 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
+ } else {
+ steThread.setResetFlag(true);
+ }
+ break;
+ }
+
+
+ }
+ }
+ }
+
+ /**
+ * 鏌ユ壘褰撳墠搴撲綅鏈�閫傚悎鐨勭┛姊溅鏉ヤ綔涓�
+ */
+ public SteThread queryIdleCar(WrkMast wrkMast) {
+ Integer crnNo = wrkMast.getCrnNo();
+ BasSte basSte = basSteService.findByCrnNo(crnNo);
+ // 鑾峰彇绌挎杞︿俊鎭�
+ SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, basSte.getSteNo());
+ SteProtocol steProtocol = steThread.getSteProtocol();
+ if (steProtocol != null) {
+ if (steProtocol.getStatusType().equals(SteStatusType.IDLE)) {
+ return steThread;
+ }
+ }
+ return null;
+ }
+
+ /**
* 鍫嗗灈鏈哄紓甯镐俊鎭褰�
*/
@Async
--
Gitblit v1.9.1