From d8e984c274d2745a02128dc4f2daddc23ece64d2 Mon Sep 17 00:00:00 2001
From: luxiaotao1123 <t1341870251@63.com>
Date: 星期五, 11 三月 2022 08:34:53 +0800
Subject: [PATCH] #
---
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | 532 ++++++++++++++++++++++++++++++++++++++++++++++------------
1 files changed, 422 insertions(+), 110 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 66d737b..e6cdc65 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -428,7 +428,7 @@
}
if (staProtocol.isAutoing() && staProtocol.isLoading() && (staProtocol.getWorkNo() == 0 || staProtocol.getStaNo() == null)) {
// 鏌ヨ宸ヤ綔妗�
- WrkMast wrkMast = wrkMastMapper.selectPakOutStep2(staProtocol.getSiteId());
+ WrkMast wrkMast = wrkMastMapper.selectPakOutStep15(staProtocol.getSiteId());
if (wrkMast == null) {
continue;
}
@@ -457,14 +457,14 @@
continue;
}
- // 鏇存柊宸ヤ綔妗g姸鎬佷负14澶辫触
- wrkMast.setWrkSts(14L);
+ // 鏇存柊宸ヤ綔妗g姸鎬佷负 16.鍑哄簱瀹屾垚
+ wrkMast.setWrkSts(16L);
wrkMast.setCrnEndTime(new Date());
if (wrkMastMapper.updateById(wrkMast) != 0) {
// 澶嶄綅鍫嗗灈鏈�
crnThread.setResetFlag(true);
} else {
- log.error("鏇存柊宸ヤ綔妗g殑宸ヤ綔鐘舵�佷负14澶辫触锛侊紒锛� [宸ヤ綔鍙�:{}]", wrkMast.getWrkNo());
+ log.error("鏇存柊宸ヤ綔妗g殑宸ヤ綔鐘舵�佷负 16.鍑哄簱瀹屾垚 澶辫触锛侊紒锛� [宸ヤ綔鍙�:{}]", wrkMast.getWrkNo());
}
}
@@ -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");
+ }
}
}
}
@@ -519,7 +523,7 @@
/**
* 鍏ュ簱 ===>> 鍫嗗灈鏈虹珯鍒板簱浣�
*/
- public void crnStnToLoc(CrnSlave slave, CrnProtocol crnProtocol){
+ public boolean crnStnToLoc(CrnSlave slave, CrnProtocol crnProtocol){
for (CrnSlave.CrnStn crnStn : slave.getCrnInStn()) {
boolean flag = false;
// 鑾峰彇鍫嗗灈鏈哄叆搴撶珯淇℃伅
@@ -543,8 +547,8 @@
if (!flag) {
continue;
}
- // 鑾峰彇宸ヤ綔鐘舵�佷负2锛堣澶囦笂璧帮級鐨勫叆搴撳伐浣滄。
- WrkMast wrkMast = wrkMastMapper.selectPakInStep2(slave.getId(), staProtocol.getWorkNo().intValue(), crnStn.getStaNo());
+ // 鑾峰彇宸ヤ綔鐘舵�佷负 2,3,4,5,6 鐨勫叆搴撳伐浣滄。
+ WrkMast wrkMast = wrkMastMapper.selectPakInStep23456(slave.getId(), staProtocol.getWorkNo().intValue(), crnStn.getStaNo());
if(null == wrkMast) {
// log.error("鏌ヨ鏃犲緟鍏ュ簱鏁版嵁--wrk_sts=2, 宸ヤ綔鍙�={}", staProtocol.getWorkNo());
continue;
@@ -560,11 +564,6 @@
continue;
}
- // 鍫嗗灈鏈烘帶鍒惰繃婊�
- if (!crnProtocol.getStatusType().equals(CrnStatusType.IDLE) || crnProtocol.getTaskNo() != 0) {
- continue;
- }
- // todo锛氬皬杞﹁縼鍏ュ嚭
// 鐩爣搴撲綅 ===>> 鏈�澶栧眰搴撲綅
if (locMastService.isOutMost(wrkMast.getLocNo())) {
// 鍒ゆ柇灏忚溅鏄惁鍦ㄦ渶澶栧眰搴撲綅锛屽鏋滄槸鍒欐惉璧帮紝濡傛灉涓嶆槸锛屽垯鐩存帴鍫嗗灈鏈哄叆搴�
@@ -572,17 +571,22 @@
// 鏈夊皬杞�
if (steNo != null) {
// 灏忚溅琛岃蛋鍒板爢鍨涙満寰呮惉绉荤偣
- if (wrkMast.getWrkSts() == 2L) {
+ if (wrkMast.getWrkSts() == 2L && wrkMast.getStaNo() == null) {
this.letCarBeReady(wrkMast, steNo);
}
// 灏忚溅鎼蛋
if (wrkMast.getWrkSts() == 3L) {
- this.carMoveOut(wrkMast, steNo);
+ this.carMoveOut(wrkMast, steNo, crnProtocol);
}
// 娌℃湁灏忚溅
} else {
- // 鍫嗗灈鏈哄叆搴�
- // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
+
+ // 宸茬粡瀛樺湪鍚婅溅鎵ц浠诲姟鏃讹紝鍒欒繃婊�
+ if (wrkMastMapper.selectWorking(slave.getId()) != null) {
+ continue;
+ }
+
+ // 鍫嗗灈鏈哄叆搴� 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
CrnCommand crnCommand = new CrnCommand();
crnCommand.setCrnNo(slave.getId()); // 鍫嗗灈鏈虹紪鍙�
crnCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); // 宸ヤ綔鍙�
@@ -597,41 +601,90 @@
if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) {
log.error("鍫嗗灈鏈哄懡浠や笅鍙戝け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand));
} else {
-
- // 淇敼宸ヤ綔妗g姸鎬� 2.璁惧涓婅蛋 => 7.鍚婅溅鍏ュ簱涓�
+ // 淇敼宸ヤ綔妗g姸鎬� 7.鍚婅溅鍏ュ簱涓�
Date now = new Date();
wrkMast.setWrkSts(7L);
wrkMast.setCrnStrTime(now);
wrkMast.setModiTime(now);
if (wrkMastMapper.updateById(wrkMast) == 0) {
- log.error("淇敼宸ヤ綔妗g姸鎬� 2.璁惧涓婅蛋 => 3.鍚婅溅鍏ュ簱涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
+ log.error("淇敼宸ヤ綔妗g姸鎬� {} => 7.鍚婅溅鍏ュ簱涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkSts$(), wrkMast.getWrkNo());
}
+ return true;
}
}
// 鐩爣搴撲綅 ===>> 闈炴渶澶栧眰搴撲綅
} else {
- // 鍒ゆ柇灏忚溅鏄惁鍦ㄥ綋鍓嶇粍搴撲綅锛屽鏋滄槸鍒欏爢鍨涙満灏嗚揣鐗╂斁缃皬杞︿笂锛屽鏋滀笉鏄紝鍒欑洿鎺ュ爢鍨涙満鎼Щ灏忚溅鑷冲綋鍓嶇粍鐨勬渶澶栧眰搴撲綅
+ // 鍒ゆ柇灏忚溅鏄惁鍦ㄥ綋鍓嶇粍搴撲綅锛屽鏋滄槸鍒欏皢绌挎杞︾Щ鑷虫渶澶栧眰锛岀瓑寰呭爢鍨涙満鏀捐揣锛涘鏋滀笉鏄紝鍒欏爢鍨涙満瀵绘壘绌挎杞︼紝骞舵斁缃綋鍓嶇粍鏈�澶栧眰
+ Integer steNo = this.hasCarOfIdle(wrkMast.getLocNo());
+ // 鏈夊皬杞�
+ if (steNo != null) {
+ // 灏忚溅琛岃蛋鍒板爢鍨涙満寰呮惉绉荤偣
+ if (wrkMast.getWrkSts() == 2L && wrkMast.getStaNo() == null) {
+ this.letCarBeReady(wrkMast, steNo);
+ }
+ // 鍫嗗灈鏈哄皢璐ф斁鑷冲皬杞︿笂 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()); // 鍫嗗灈鏈虹紪鍙�
+ crnCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); // 宸ヤ綔鍙�
+ crnCommand.setAckFinish((short) 0); // 浠诲姟瀹屾垚纭浣�
+ crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); // 浠诲姟妯″紡: 搴撲綅绉昏浆
+ crnCommand.setSourcePosX(crnStn.getRow().shortValue()); // 婧愬簱浣嶆帓
+ crnCommand.setSourcePosY(crnStn.getBay().shortValue()); // 婧愬簱浣嶅垪
+ crnCommand.setSourcePosZ(crnStn.getLev().shortValue()); // 婧愬簱浣嶅眰
+ 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.灏忚溅寰呮惉 ===>> 7.鍚婅溅鍏ュ簱涓�
+ Date now = new Date();
+ wrkMast.setWrkSts(7L);
+ wrkMast.setCrnStrTime(now);
+ wrkMast.setModiTime(now);
+ if (wrkMastMapper.updateById(wrkMast) == 0) {
+ log.error("淇敼宸ヤ綔妗g姸鎬� 3.灏忚溅寰呮惉/6.灏忚溅寰呭叆 => 7.鍚婅溅鍏ュ簱涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
+ }
+ return true;
+ }
+ }
+ }
+ // 娌℃湁灏忚溅
+ } 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);
+ }
+ }
}
-
-
- this.carMoveIn(wrkMast);
-
-
- // 宸茬粡瀛樺湪鍚婅溅鎵ц浠诲姟鏃讹紝鍒欒繃婊�
- if (wrkMastMapper.selectWorking(slave.getId()) != null) {
- return;
- }
-
}
+ return false;
}
/**
* 褰撳墠搴撲綅缁勬槸鍚﹀瓨鍦ㄧ┖闂插皬杞�
- * @param locNo
- * @return
*/
public Integer hasCarOfIdle(String locNo) {
for (SteSlave ste : slaveProperties.getSte()) {
@@ -667,13 +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);
- wrkMast.setCrnStrTime(now);
- wrkMast.setModiTime(now);
+ // 淇敼宸ヤ綔妗g姸鎬� 缁戝畾绌挎杞�
+ wrkMast.setSteNo(steNo);
+ wrkMast.setModiTime(new Date());
if (wrkMastMapper.updateById(wrkMast) == 0) {
- log.error("淇敼宸ヤ綔妗g姸鎬� 2.璁惧涓婅蛋 => 3.灏忚溅寰呮惉 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
+ log.error("淇敼宸ヤ綔妗g姸鎬� 缁戝畾绌挎杞� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
}
}
}
@@ -682,18 +733,44 @@
/**
* 鍏ュ簱 ===>> 鍫嗗灈鏈烘惉鍏ュ皬杞�
*/
- public void carMoveIn(WrkMast wrkMast) {
- 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)) {
+ 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());
+ }
+ }
-
-
+ }
}
-
}
}
@@ -701,15 +778,49 @@
/**
* 鍏ュ簱 ===>> 鍫嗗灈鏈烘惉鍑哄皬杞�
*/
- public void carMoveOut(WrkMast wrkMast, Integer steNo) {
+ public void carMoveOut(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) {
+ BasSte basSte = basSteService.selectById(steNo);
+ if (basSte == null) {
+ log.error("{}鍙风┛姊溅鍦ㄦ暟鎹簱涓嶅瓨鍦紒锛侊紒", steNo);
+ return;
+ }
+ String idleLocNo = basSte.getIdleLoc();
+ // 鍫嗗灈鏈哄懡浠や笅鍙戝尯 --------------------------------------------------------------------------
+ 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((short) Utils.getRow(idleLocNo)); // 鐩爣搴撲綅鎺�
+ crnCommand.setDestinationPosY((short) Utils.getBay(idleLocNo)); // 鐩爣搴撲綅鍒�
+ crnCommand.setDestinationPosZ((short) Utils.getLev(idleLocNo)); // 鐩爣搴撲綅灞�
+ if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) {
+ log.error("鍫嗗灈鏈哄懡浠や笅鍙戝け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand));
+ } else {
+ // 淇敼宸ヤ綔妗g姸鎬� 3.灏忚溅寰呮惉 => 5.杩佸嚭灏忚溅
+ Date now = new Date();
+ wrkMast.setWrkSts(5L);
+ wrkMast.setCrnStrTime(now);
+ wrkMast.setModiTime(now);
+ if (wrkMastMapper.updateById(wrkMast) == 0) {
+ log.error("淇敼宸ヤ綔妗g姸鎬� 3.灏忚溅寰呮惉 => 5.杩佸嚭灏忚溅 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
+ }
+ }
+ }
}
}
@@ -720,7 +831,7 @@
public void locToCrnStn(CrnSlave slave, CrnProtocol crnProtocol){
for (CrnSlave.CrnStn crnStn : slave.getCrnOutStn()) {
// 鑾峰彇宸ヤ綔鐘舵�佷负11锛堢敓鎴愬嚭搴揑D锛夌殑鍑哄簱宸ヤ綔妗�
- WrkMast wrkMast = wrkMastMapper.selectPakOutStep1(slave.getId(), crnStn.getStaNo());
+ WrkMast wrkMast = wrkMastMapper.selectPakOutStep11(slave.getId(), crnStn.getStaNo());
if (wrkMast == null) {
continue;
}
@@ -759,65 +870,105 @@
continue;
}
- // 鍙屾繁搴撲綅涓旀祬搴撲綅鏈夎揣锛屽垯闇�鍏堝娴呭簱浣嶈繘琛屽簱浣嶇Щ杞�
- if (Utils.isDeepLoc(slaveProperties, wrkMast.getSourceLocNo())) {
- String shallowLocNo = Utils.getShallowLoc(slaveProperties, wrkMast.getSourceLocNo());
- LocMast shallowLoc = locMastService.selectById(shallowLocNo);
- // O.绌哄簱浣嶃�丵.鎷f枡/鐩樼偣/骞舵澘鍐嶅叆搴撱�丼.鍏ュ簱棰勭害銆乆.绂佺敤 鐩存帴鎼紒
- if (shallowLoc.getLocSts().equals("P") || shallowLoc.getLocSts().equals("R")) {
- WrkMast waitWrkMast = wrkMastMapper.selectByLocNo(shallowLocNo);
- if (null == waitWrkMast) {
- log.error("{}搴撲綅寮傚父锛屾湭妫�绱㈠埌鐩稿簲宸ヤ綔妗o紒", shallowLocNo);
- } else {
- waitWrkMast.setIoPri(15D);
- waitWrkMast.setModiTime(new Date());
- if (wrkMastMapper.updateById(waitWrkMast) == 0) {
- log.error("璋冩暣宸ヤ綔妗d紭鍏堢骇澶辫触锛佸伐浣滃彿={}", waitWrkMast.getWrkNo());
- }
- }
- continue;
- } else if (shallowLoc.getLocSts().equals("F") || shallowLoc.getLocSts().equals("D")) {
- // 姝ゆ爣璁伴伩鍏嶅娆℃墽琛岀Щ搴撲换鍔�
- if (Cools.isEmpty(wrkMast.getUpdMk()) || "N".equals(wrkMast.getUpdMk())) {
- wrkMast.setUpdMk("Y");
- wrkMastMapper.updateById(wrkMast);
- // 鐢熸垚宸ヤ綔妗c�佹敼鍙樻祬搴撲綅鐨勬簮搴�/鐩爣搴� 搴撲綅鐘舵�併�佷笅鍙戝爢鍨涙満鍛戒护锛堢珛椹墽琛�)
- moveLocForDeepLoc(slave, shallowLoc);
- }
- log.error("{}浠诲姟鍑哄簱澶辫触锛屾祬搴撲綅鍫靛锛�", wrkMast.getWrkNo());
- continue;
- }
- }
// 宸茬粡瀛樺湪鍚婅溅鎵ц浠诲姟鏃讹紝鍒欒繃婊�
if (wrkMastMapper.selectWorking(slave.getId()) != null) {
return;
}
- // 1.鍫嗗灈鏈哄紑濮嬬Щ鍔�
- CrnCommand crnCommand = new CrnCommand();
- crnCommand.setCrnNo(slave.getId()); // 鍫嗗灈鏈虹紪鍙�
- crnCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); // 宸ヤ綔鍙�
- crnCommand.setAckFinish((short) 0); // 浠诲姟瀹屾垚纭浣�
- crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); // 浠诲姟妯″紡: 搴撲綅绉昏浆
- crnCommand.setSourcePosX(sourceSta.getRow1().shortValue()); // 婧愬簱浣嶆帓
- crnCommand.setSourcePosY(sourceSta.getBay1().shortValue()); // 婧愬簱浣嶅垪
- crnCommand.setSourcePosZ(sourceSta.getLev1().shortValue()); // 婧愬簱浣嶅眰
- crnCommand.setDestinationPosX(crnStn.getRow().shortValue()); // 鐩爣搴撲綅鎺�
- crnCommand.setDestinationPosY(crnStn.getBay().shortValue()); // 鐩爣搴撲綅鍒�
- crnCommand.setDestinationPosZ(crnStn.getLev().shortValue()); // 鐩爣搴撲綅灞�
- if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) {
- log.error("鍫嗗灈鏈哄懡浠や笅鍙戝け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand));
+
+ // 鏈�澶栧眰搴撲綅锛岀洿鎺ュ爢鍨涙満鍑哄簱
+ if (locMastService.isOutMost(wrkMast.getLocNo())) {
+ // 1.鍫嗗灈鏈哄紑濮嬬Щ鍔�
+ CrnCommand crnCommand = new CrnCommand();
+ crnCommand.setCrnNo(slave.getId()); // 鍫嗗灈鏈虹紪鍙�
+ crnCommand.setTaskNo(wrkMast.getWrkNo().shortValue()); // 宸ヤ綔鍙�
+ crnCommand.setAckFinish((short) 0); // 浠诲姟瀹屾垚纭浣�
+ crnCommand.setTaskMode(CrnTaskModeType.LOC_MOVE); // 浠诲姟妯″紡: 搴撲綅绉昏浆
+ crnCommand.setSourcePosX(sourceSta.getRow1().shortValue()); // 婧愬簱浣嶆帓
+ crnCommand.setSourcePosY(sourceSta.getBay1().shortValue()); // 婧愬簱浣嶅垪
+ crnCommand.setSourcePosZ(sourceSta.getLev1().shortValue()); // 婧愬簱浣嶅眰
+ crnCommand.setDestinationPosX(crnStn.getRow().shortValue()); // 鐩爣搴撲綅鎺�
+ crnCommand.setDestinationPosY(crnStn.getBay().shortValue()); // 鐩爣搴撲綅鍒�
+ crnCommand.setDestinationPosZ(crnStn.getLev().shortValue()); // 鐩爣搴撲綅灞�
+ if (!MessageQueue.offer(SlaveType.Crn, wrkMast.getCrnNo(), new Task(2, crnCommand))) {
+ log.error("鍫嗗灈鏈哄懡浠や笅鍙戝け璐ワ紝鍫嗗灈鏈哄彿={}锛屼换鍔℃暟鎹�={}", wrkMast.getCrnNo(), JSON.toJSON(crnCommand));
+ } else {
+ // 淇敼宸ヤ綔妗g姸鎬� 11.鐢熸垚鍑哄簱ID => 15.鍚婅溅鍑哄簱涓�
+ Date now = new Date();
+ wrkMast.setWrkSts(15L);
+ wrkMast.setCrnStrTime(now);
+ wrkMast.setModiTime(now);
+ if (wrkMastMapper.updateById(wrkMast) == 0) {
+ log.error("淇敼宸ヤ綔妗g姸鎬� 11.鐢熸垚鍑哄簱ID => 15.鍚婅溅鍑哄簱涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
+ }
+ }
+ // 涓嶆槸鏈�澶栧眰搴撲綅锛岄渶瑕佷娇鐢ㄧ┛姊溅鎼繍鍚庯紝鍐嶅爢鍨涙満鍑哄簱
} else {
- // 淇敼宸ヤ綔妗g姸鎬� 11.鐢熸垚鍑哄簱ID => 12.鍚婅溅鍑哄簱涓�
- Date now = new Date();
- wrkMast.setWrkSts(12L);
- wrkMast.setCrnStrTime(now);
- wrkMast.setModiTime(now);
- if (wrkMastMapper.updateById(wrkMast) == 0) {
- log.error("淇敼宸ヤ綔妗g姸鎬� 11.鐢熸垚鍑哄簱ID => 12.鍚婅溅鍑哄簱涓� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
+ // 褰撳墠缁勫簱浣嶆槸鍚︽湁绌挎杞�
+ Integer steNo = this.hasCarOfIdle(wrkMast.getLocNo());
+ // 鏈夊皬杞�
+ if (steNo != null) {
+ if (wrkMast.getWrkSts() == 11L && wrkMast.getSteNo() == null) {
+
+ // 缁欑┛姊溅涓嬪彂鍛戒护 璁╁叾灏嗚揣鐗╂尓鑷冲爢鍨涙満鎼繍鐐�
+ SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, steNo);
+ SteProtocol steProtocol = steThread.getSteProtocol();
+ if (steProtocol == null) { continue; }
+ if (steProtocol.getStatusType().equals(SteStatusType.IDLE)) {
+
+ // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
+ SteCommand steCommand = new SteCommand();
+ steCommand.setSteNo(steNo); // 绌挎杞︾紪鍙�
+ steCommand.setTaskNo(wrkMast.getWrkNo()); // 宸ヤ綔鍙�
+ steCommand.setTaskMode(SteTaskModeType.TO_B); // 浠诲姟妯″紡: 鍘昏繎鐐� 绛夊緟鍫嗗灈鏈哄弶鍙�
+ // todo:luxiaotao
+ if (!MessageQueue.offer(SlaveType.Ste, steNo, new Task(2, steCommand))) {
+ log.error("绌挎杞﹀懡浠や笅鍙戝け璐ワ紝绌挎杞﹀彿={}锛屼换鍔℃暟鎹�={}", steNo, JSON.toJSON(steCommand));
+ } else {
+ // 淇敼宸ヤ綔妗g姸鎬� 11.鐢熸垚鍑哄簱ID => 14.灏忚溅寰呭嚭
+ Date now = new Date();
+ wrkMast.setWrkSts(14L);
+ wrkMast.setSteNo(steNo);
+ wrkMast.setCrnStrTime(now);
+ wrkMast.setModiTime(now);
+ if (wrkMastMapper.updateById(wrkMast) > 0) {
+ } else {
+ log.error("淇敼宸ヤ綔妗g姸鎬� 11.鐢熸垚鍑哄簱ID => 14.灏忚溅寰呭嚭 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
+ }
+ }
+ }
+ }
+
+
+ // 娌℃湁灏忚溅
+ } else {
+ if (wrkMast.getWrkSts() == 11L && 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);
+ }
}
}
+
+
+
+
+
+
+
+
+
+
+
+
}
}
}
@@ -890,11 +1041,12 @@
}
+
/**
- * 鎵ц瀵瑰伐浣滄。鐨勫畬鎴愭搷浣�
+ * 鍫嗗灈鏈洪拡瀵逛簬灏忚溅杩佺Щ宸ヤ綔鐨勫畬鎴�
*/
@Async
- public void storeFinished() {
+ public void carMoveFinished() {
for (CrnSlave crn : slaveProperties.getCrn()) {
// 鑾峰彇鍫嗗灈鏈轰俊鎭�
CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getId());
@@ -903,14 +1055,14 @@
// 鐘舵�侊細绛夊緟纭 骞朵笖 浠诲姟瀹屾垚浣� = 1
if (crnProtocol.statusType == CrnStatusType.WAITING && crnProtocol.getTaskNo() != 0) {
// 鑾峰彇鍏ュ簱寰呯‘璁ゅ伐浣滄。
- WrkMast wrkMast = wrkMastMapper.selectPakInStep3(crnProtocol.getTaskNo().intValue());
+ WrkMast wrkMast = wrkMastMapper.selectPakInStep45(crnProtocol.getTaskNo().intValue());
if (wrkMast == null) {
log.error("鍫嗗灈鏈哄浜庣瓑寰呯‘璁や笖浠诲姟瀹屾垚鐘舵�侊紝浣嗘湭鎵惧埌宸ヤ綔妗c�傚爢鍨涙満鍙�={}锛屽伐浣滃彿={}", crn.getId(), crnProtocol.getTaskNo());
continue;
}
- // 鍏ュ簱 + 搴撲綅杞Щ ==> 4.鍏ュ簱瀹屾垚
- if (wrkMast.getWrkSts() == 3 || (wrkMast.getWrkSts() == 12 && wrkMast.getIoType() == 11)){
- wrkMast.setWrkSts(4L);
+ // 鍏ュ簱 + 搴撲綅杞Щ ==> 6.灏忚溅寰呭叆
+ if ((wrkMast.getWrkSts() == 4 || wrkMast.getWrkSts() == 5) || (wrkMast.getWrkSts() == 12 && wrkMast.getIoType() == 11)){
+ wrkMast.setWrkSts(6L);
} else {
continue;
}
@@ -928,6 +1080,166 @@
}
/**
+ * 鎵ц瀵瑰伐浣滄。鐨勫畬鎴愭搷浣�
+ */
+ @Async
+ @Transactional
+ public void storeFinished() {
+ for (CrnSlave crn : slaveProperties.getCrn()) {
+ // 鑾峰彇鍫嗗灈鏈轰俊鎭�
+ CrnThread crnThread = (CrnThread) SlaveConnection.get(SlaveType.Crn, crn.getId());
+ CrnProtocol crnProtocol = crnThread.getCrnProtocol();
+ if (crnProtocol == null) { continue; }
+ // 鐘舵�侊細绛夊緟纭 骞朵笖 浠诲姟瀹屾垚浣� = 1
+ if (crnProtocol.statusType == CrnStatusType.WAITING && crnProtocol.getTaskNo() != 0) {
+ // 鑾峰彇鍏ュ簱寰呯‘璁ゅ伐浣滄。
+ WrkMast wrkMast = wrkMastMapper.selectPakInStep7(crnProtocol.getTaskNo().intValue());
+ if (wrkMast == null) {
+ log.error("鍫嗗灈鏈哄浜庣瓑寰呯‘璁や笖浠诲姟瀹屾垚鐘舵�侊紝浣嗘湭鎵惧埌宸ヤ綔妗c�傚爢鍨涙満鍙�={}锛屽伐浣滃彿={}", crn.getId(), crnProtocol.getTaskNo());
+ continue;
+ }
+ // 鍏ュ簱 + 搴撲綅杞Щ
+ if (wrkMast.getWrkSts() == 7 || (wrkMast.getWrkSts() == 15 && wrkMast.getIoType() == 11)){
+ // 鍒ゆ柇鏄惁闇�瑕佸皬杞﹀叆搴�
+ if (locMastService.isOutMost(wrkMast.getLocNo())) {
+ // ==> 9.鍏ュ簱瀹屾垚
+ wrkMast.setWrkSts(9L);
+ Date now = new Date();
+ wrkMast.setCrnEndTime(now);
+ wrkMast.setModiTime(now);
+ // 淇敼鎴愬姛鍚庡浣嶅爢鍨涙満
+ if (wrkMastMapper.updateById(wrkMast) > 0) {
+ // 鍫嗗灈鏈哄浣�
+ crnThread.setResetFlag(true);
+ } else {
+ log.error("淇敼宸ヤ綔妗g姸鎬� 7.鍚婅溅鍏ュ簱涓� => 9.鍏ュ簱瀹屾垚 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
+ }
+ } else {
+ // 缁欑┛姊溅涓嬪彂鍛戒护
+ Integer steNo = wrkMast.getSteNo();
+ SteThread steThread = (SteThread) SlaveConnection.get(SlaveType.Ste, steNo);
+ SteProtocol steProtocol = steThread.getSteProtocol();
+ if (steProtocol == null) { continue; }
+ if (steProtocol.getStatusType().equals(SteStatusType.IDLE)) {
+ // 鍛戒护涓嬪彂鍖� --------------------------------------------------------------------------
+ SteCommand steCommand = new SteCommand();
+ steCommand.setSteNo(steNo); // 绌挎杞︾紪鍙�
+ steCommand.setTaskNo(wrkMast.getWrkNo()); // 宸ヤ綔鍙�
+ steCommand.setTaskMode(SteTaskModeType.TO_B); // 浠诲姟妯″紡: 鍘昏繎鐐� 绛夊緟鍫嗗灈鏈哄弶鍙�
+ // todo:luxiaotao
+ if (!MessageQueue.offer(SlaveType.Ste, steNo, new Task(2, steCommand))) {
+ log.error("绌挎杞﹀懡浠や笅鍙戝け璐ワ紝绌挎杞﹀彿={}锛屼换鍔℃暟鎹�={}", steNo, JSON.toJSON(steCommand));
+ } else {
+ // 淇敼宸ヤ綔妗g姸鎬� 7.鍚婅溅鍏ュ簱涓� => 8.灏忚溅鎼叆搴�
+ Date now = new Date();
+ wrkMast.setWrkSts(8L);
+ wrkMast.setCrnStrTime(now);
+ wrkMast.setModiTime(now);
+ if (wrkMastMapper.updateById(wrkMast) > 0) {
+ // 鍫嗗灈鏈哄浣�
+ crnThread.setResetFlag(true);
+ } else {
+ log.error("淇敼宸ヤ綔妗g姸鎬� 7.鍚婅溅鍏ュ簱涓� => 8.灏忚溅鎼叆搴� 澶辫触锛侊紒锛屽伐浣滃彿={}", wrkMast.getWrkNo());
+ }
+ }
+ }
+ }
+ // 杩佸叆灏忚溅 瀹屾垚
+ } 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