From 29cfbeea17c6d124a00864d1e8f0f79983059530 Mon Sep 17 00:00:00 2001
From: dubin <bindu_bean@163.com>
Date: 星期一, 09 三月 2026 15:27:39 +0800
Subject: [PATCH] 下发任务工位调整
---
src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java | 241 +++++++++++++++++++++++++++++------------------
1 files changed, 149 insertions(+), 92 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 d0b351d..3a910f6 100644
--- a/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/MainServiceImpl.java
@@ -47,6 +47,7 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport;
@@ -100,6 +101,8 @@
private BasRgvMapService basRgvMapService;
@Autowired
private BasCrnOptService crnOptService;
+ @Autowired
+ private MainServiceImpl mainService;
@Value("${wms.url}")
private String wmsUrl;
@@ -483,9 +486,10 @@
try {
// 淇濆瓨宸ヤ綔鏄庣粏妗e巻鍙叉。
+ if (wrkMast.getIoType() != 104){
if (wrkMastMapper.saveWrkDetlLog(wrkMast.getWrkNo()) == 0) {
throw new CoolException("淇濆瓨宸ヤ綔鏄庣粏妗e巻鍙叉。澶辫触");
- }
+ }}
// 淇濆瓨宸ヤ綔涓绘。鍘嗗彶妗�
if (wrkMastMapper.saveWrkMastLog(wrkMast.getWrkNo()) == 0) {
throw new CoolException("淇濆瓨宸ヤ綔涓绘。鍘嗗彶妗eけ璐�");
@@ -916,58 +920,70 @@
// 鍫嗗灈鏈哄伐浣�1鏈夌墿鏂�
WrkMast wrkMast = wrkMastMapper.selectByPltType(crn.getId(), 1);
if (wrkMast != null) {
- //鍏堝垽鏂槸鍑哄簱杩樻槸鍏ュ簱
- //鍐嶅垽鏂槸杩樻湁娌℃湁鍚岀被鍨嬬殑宸ヤ綔妗�
+ // determine outbound or inbound
+ // check whether same-type work remains
if (wrkMast.getIoType() >= 100) {
WrkMast wrkMast1 = wrkMastMapper.selectPakOutStep1(crn.getId(), wrkMast.getSourceStaNo());
if (wrkMast1 != null) {
- if (Integer.parseInt(wrkMast1.getSourceLocNo().substring(2,5)) == 1 || (staProtocol.isAutoing()&&staProtocol.isLoading())){
+ if (shouldPrioritizePut(crn.getId(), wrkMast1.getSourceLocNo(), 1) || (staProtocol.isAutoing() && staProtocol.isLoading())){
this.outPut(crn, crnProtocol, mark);
- continue;
+ //continue;
+ }else {
+ this.outTake(crn, crnProtocol, 0, mark);
}
- this.outTake(crn, crnProtocol, 2, mark);
+ //this.outTake(crn, crnProtocol, 0, mark);
} else {
this.outPut(crn, crnProtocol, mark);
}
} else {
WrkMast wrkMast1 = wrkMastMapper.selectPakInStep1All(wrkMast.getSourceStaNo(), crn.getId());
if (wrkMast1 != null) {
- this.inTake(crn, crnProtocol, 2, mark);
+ if (shouldPrioritizePut(crn.getId(), wrkMast1.getLocNo(), 1)) {
+ this.inPut(crn, crnProtocol, mark);
+ } else {
+ this.inTake(crn, crnProtocol, 0, mark);
+ }
} else {
this.inPut(crn, crnProtocol, mark);
}
}
} else {
- log.error("" + mark + " - 1" + " - 鏈夌墿鏂欐棤宸ヤ綔妗� ===銆嬪紓甯�");
+ log.error("" + mark + " - 1" + " - loaded station without work record");
}
} else if (crnProtocol.getLoaded() == 0 && crnProtocol.getLoadedTwo() == 1) {
- //News.error("宸ヤ綅1鏃犵墿锛屽伐浣�2鏈夌墿");
- // 鍫嗗灈鏈哄伐浣�2鏈夌墿鏂�
+ //News.error("station 1 empty, station 2 loaded");
+ // stacker station 2 has load
WrkMast wrkMast = wrkMastMapper.selectByPltType(crn.getId(), 2);
if (wrkMast != null) {
- //鍏堝垽鏂槸鍑哄簱杩樻槸鍏ュ簱
- //鍐嶅垽鏂槸杩樻湁娌℃湁鍚岀被鍨嬬殑宸ヤ綔妗�
+ // determine outbound or inbound
+ // check whether same-type work remains
if (wrkMast.getIoType() >= 100) {
WrkMast wrkMast1 = wrkMastMapper.selectPakOutStep1(crn.getId(), wrkMast.getSourceStaNo());
if (wrkMast1 != null) {
- if (Integer.parseInt(wrkMast1.getSourceLocNo().substring(2,5)) == 29 || (staProtocol.isAutoing()&&staProtocol.isLoading())){
+ if (shouldPrioritizePut(crn.getId(), wrkMast1.getSourceLocNo(), 2) || (staProtocol.isAutoing() && staProtocol.isLoading())){
this.outPut(crn, crnProtocol, mark);
- continue;
+ //continue;
+ }else {
+ this.outTake(crn, crnProtocol, 0, mark);
}
- this.outTake(crn, crnProtocol, 1, mark);
+ //this.outTake(crn, crnProtocol, 0, mark);
} else {
this.outPut(crn, crnProtocol, mark);
}
} else {
WrkMast wrkMast1 = wrkMastMapper.selectPakInStep1All(wrkMast.getSourceStaNo(), crn.getId());
if (wrkMast1 != null) {
- this.inTake(crn, crnProtocol, 1, mark);
+ if (shouldPrioritizePut(crn.getId(), wrkMast1.getLocNo(), 2)) {
+ this.inPut(crn, crnProtocol, mark);
+ } else {
+ this.inTake(crn, crnProtocol, 0, mark);
+ }
} else {
this.inPut(crn, crnProtocol, mark);
}
}
} else {
- log.error("" + mark + " - 1" + " - 鏈夌墿鏂欐棤宸ヤ綔妗� ===銆嬪紓甯�");
+ log.error("" + mark + " - 1" + " - loaded station without work record");
}
}
}
@@ -1000,6 +1016,27 @@
return 1;
}
}
+
+ private int getLocBay(String locNo) {
+ return Integer.parseInt(locNo.substring(2, 5));
+ }
+
+ private boolean canFallbackStation(String locNo) {
+ int bay = getLocBay(locNo);
+ return bay != 1 && bay != 29;
+ }
+
+ private boolean shouldPrioritizePut(Integer crnId, String locNo, int loadedStation) {
+ int preferredStation = getCrnStation(locNo);
+ if (preferredStation == loadedStation) {
+ return true;
+ }
+ if (!canFallbackStation(locNo)) {
+ return false;
+ }
+ return wrkMastMapper.selectByPltType(crnId, preferredStation) != null;
+ }
+
/**
@@ -1064,11 +1101,17 @@
crnStation = getCrnStation(wrkMast.getLocNo());
}
if (wrkMastMapper.selectByPltType(slave.getId(), crnStation) != null) {
- News.error("" + mark + " - 1" + " - 9" + " - 鍫嗗灈鏈烘敼宸ヤ綅瀛樺湪宸ヤ綔妗�,宸ヤ綅={}", crnStation);
- break;
+ if (!canFallbackStation(wrkMast.getLocNo())) {
+ log.warn("CRN station fixed for bay={}, workNo={}, station={}", getLocBay(wrkMast.getLocNo()), wrkMast.getWrkNo(), crnStation);
+ continue;
+ }
+ int alternateStation = crnStation == 1 ? 2 : 1;
+ if (wrkMastMapper.selectByPltType(slave.getId(), alternateStation) != null) {
+ log.warn("CRN station busy for workNo={}, preferredStation={}", wrkMast.getWrkNo(), crnStation);
+ continue;
+ }
+ crnStation = alternateStation;
}
-
- // 宸茬粡瀛樺湪鍚婅溅鎵ц浠诲姟鏃讹紝鍒欒繃婊�
if (wrkMastMapper.selectWorking(slave.getId()) != null) {
continue;
}
@@ -1303,8 +1346,16 @@
crnStation = getCrnStation(wrkMast.getSourceLocNo());
}
if (wrkMastMapper.selectByPltType(slave.getId(), crnStation) != null) {
- News.error("" + mark + " - 1" + " - 9" + " - 鍫嗗灈鏈烘敼宸ヤ綅瀛樺湪宸ヤ綔妗�,宸ヤ綅={}", crnStation);
- break;
+ if (!canFallbackStation(wrkMast.getSourceLocNo())) {
+ log.warn("CRN station fixed for bay={}, workNo={}, station={}", getLocBay(wrkMast.getSourceLocNo()), wrkMast.getWrkNo(), crnStation);
+ continue;
+ }
+ int alternateStation = crnStation == 1 ? 2 : 1;
+ if (wrkMastMapper.selectByPltType(slave.getId(), alternateStation) != null) {
+ log.warn("CRN station busy for workNo={}, preferredStation={}", wrkMast.getWrkNo(), crnStation);
+ continue;
+ }
+ crnStation = alternateStation;
}
// 宸茬粡瀛樺湪鍚婅溅鎵ц浠诲姟鏃讹紝鍒欒繃婊�
@@ -2778,79 +2829,85 @@
if (null == loc) {
News.error("" + mark + "moveLocForDeepLoc" + " - 1" + " - 鍙屾繁搴撲綅 --- 娴呭簱浣嶉樆濉炲紓甯革紒 寰呯Щ杞祬搴撲綅锛�" + shallowLoc.getLocNo());
- throw new CoolException("鍙屾繁搴撲綅 --- 娴呭簱浣嶉樆濉炲紓甯革紒 寰呯Щ杞祬搴撲綅锛�" + shallowLoc.getLocNo());
+// throw new CoolException("鍙屾繁搴撲綅 --- 娴呭簱浣嶉樆濉炲紓甯革紒 寰呯Щ杞祬搴撲綅锛�" + shallowLoc.getLocNo());
+ }else {
+ mainService.createMoveWrkMast(crn, shallowLoc, loc);
}
- // 鑾峰彇宸ヤ綔鍙�
- int workNo = commonService.getWorkNo(0);
- // 淇濆瓨宸ヤ綔妗�
- WrkMast wrkMast = new WrkMast();
- wrkMast.setWrkNo(workNo);
- wrkMast.setIoTime(new Date());
- wrkMast.setWrkSts(11L); // 宸ヤ綔鐘舵�侊細11.鐢熸垚鍑哄簱ID
- wrkMast.setIoType(11); // 鍏ュ嚭搴撶姸鎬侊細 11.搴撴牸绉昏浇
- wrkMast.setIoPri(13D);
- wrkMast.setCrnNo(crn.getId());
- wrkMast.setSourceLocNo(shallowLoc.getLocNo()); // 婧愬簱浣�
- wrkMast.setLocNo(loc.getLocNo()); // 鐩爣搴撲綅
- wrkMast.setFullPlt(shallowLoc.getFullPlt()); // 婊℃澘
- wrkMast.setPicking("N"); // 鎷f枡
- wrkMast.setExitMk("N"); // 閫�鍑�
- wrkMast.setEmptyMk(shallowLoc.getLocSts().equals("D") ? "Y" : "N"); // 绌烘澘
- wrkMast.setBarcode(shallowLoc.getBarcode()); // 鎵樼洏鐮�
- wrkMast.setLinkMis("N");
- wrkMast.setAppeTime(new Date());
- wrkMast.setModiTime(new Date());
- int res = wrkMastMapper.insert(wrkMast);
- if (res == 0) {
- News.errorNoLog("" + mark + "moveLocForDeepLoc" + " - 2" + " - 淇濆瓨宸ヤ綔妗eけ璐�");
- throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�");
- }
- // 宸ヤ綔妗f槑缁嗕繚瀛�
- if (shallowLoc.getLocSts().equals("F")) {
- List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>().eq("loc_no", shallowLoc.getLocNo()));
- for (LocDetl locDetl : locDetls) {
- WrkDetl wrkDetl = new WrkDetl();
- wrkDetl.setWrkNo(workNo);
- wrkDetl.setIoTime(new Date());
- wrkDetl.setAnfme(locDetl.getAnfme());
- VersionUtils.setWrkDetl(wrkDetl, locDetl); // 鐗堟湰鎺у埗
- wrkDetl.setAppeTime(new Date());
- wrkDetl.setModiTime(new Date());
- if (!wrkDetlService.insert(wrkDetl)) {
- News.errorNoLog("" + mark + "moveLocForDeepLoc" + " - 3" + " - 淇濆瓨宸ヤ綔妗f槑缁嗗け璐�");
- throw new CoolException("淇濆瓨宸ヤ綔妗f槑缁嗗け璐�");
- }
- }
- }
- // 淇敼婧愬簱浣嶇姸鎬�
- if (shallowLoc.getLocSts().equals("D") || shallowLoc.getLocSts().equals("F")) {
- shallowLoc.setLocSts("R"); // R.鍑哄簱棰勭害
- shallowLoc.setModiTime(new Date());
- if (!locMastService.updateById(shallowLoc)) {
- News.errorNoLog("" + mark + "moveLocForDeepLoc" + " - 4" + " - 鏇存柊婧愬簱浣嶇姸鎬佸け璐�");
- throw new CoolException("鏇存柊婧愬簱浣嶇姸鎬佸け璐�");
- }
- } else {
- News.errorNoLog("" + mark + "moveLocForDeepLoc" + " - 5" + " - 婧愬簱浣嶅嚭搴撳け璐�");
- throw new CoolException("婧愬簱浣嶅嚭搴撳け璐�");
- }
- // 淇敼鐩爣搴撲綅鐘舵��
- if (loc.getLocSts().equals("O")) {
- loc.setLocSts("S"); // S.鍏ュ簱棰勭害
- loc.setModiTime(new Date());
- if (!locMastService.updateById(loc)) {
- News.errorNoLog("" + mark + "moveLocForDeepLoc" + " - 6" + " - 鏇存柊鐩爣搴撲綅鐘舵�佸け璐�");
- throw new CoolException("鏇存柊鐩爣搴撲綅鐘舵�佸け璐�");
- }
- } else {
- News.errorNoLog("" + mark + "moveLocForDeepLoc" + " - 7" + " - 绉昏浆澶辫触");
- throw new CoolException("绉昏浆澶辫触");
- }
+
} catch (Exception e) {
News.error("" + mark + "moveLocForDeepLoc" + " - 8" + " - 鍙屾繁搴撲綅闃诲锛屽娴呭簱浣嶈繘琛岀Щ杞け璐�", e);
- e.printStackTrace();
- TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
+
+ }
+ }
+
+ @Transactional(rollbackFor = Exception.class,propagation = Propagation.REQUIRES_NEW)
+ public void createMoveWrkMast(CrnSlave crn, LocMast shallowLoc, LocMast loc) {
+ // 鑾峰彇宸ヤ綔鍙�
+ int workNo = commonService.getWorkNo(0);
+ // 淇濆瓨宸ヤ綔妗�
+ WrkMast wrkMast = new WrkMast();
+ wrkMast.setWrkNo(workNo);
+ wrkMast.setIoTime(new Date());
+ wrkMast.setWrkSts(11L); // 宸ヤ綔鐘舵�侊細11.鐢熸垚鍑哄簱ID
+ wrkMast.setIoType(11); // 鍏ュ嚭搴撶姸鎬侊細 11.搴撴牸绉昏浇
+ wrkMast.setIoPri(13D);
+ wrkMast.setCrnNo(crn.getId());
+ wrkMast.setSourceLocNo(shallowLoc.getLocNo()); // 婧愬簱浣�
+ wrkMast.setLocNo(loc.getLocNo()); // 鐩爣搴撲綅
+ wrkMast.setFullPlt(shallowLoc.getFullPlt()); // 婊℃澘
+ wrkMast.setPicking("N"); // 鎷f枡
+ wrkMast.setExitMk("N"); // 閫�鍑�
+ wrkMast.setEmptyMk(shallowLoc.getLocSts().equals("D") ? "Y" : "N"); // 绌烘澘
+ wrkMast.setBarcode(shallowLoc.getBarcode()); // 鎵樼洏鐮�
+ wrkMast.setLinkMis("N");
+ wrkMast.setAppeTime(new Date());
+ wrkMast.setModiTime(new Date());
+ int res = wrkMastMapper.insert(wrkMast);
+ if (res == 0) {
+ News.errorNoLog("" + "moveLocForDeepLoc" + " - 2" + " - 淇濆瓨宸ヤ綔妗eけ璐�");
+ throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�");
+ }
+ // 宸ヤ綔妗f槑缁嗕繚瀛�
+ if (shallowLoc.getLocSts().equals("F")) {
+ List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>().eq("loc_no", shallowLoc.getLocNo()));
+ for (LocDetl locDetl : locDetls) {
+ WrkDetl wrkDetl = new WrkDetl();
+ wrkDetl.setWrkNo(workNo);
+ wrkDetl.setIoTime(new Date());
+ wrkDetl.setAnfme(locDetl.getAnfme());
+ VersionUtils.setWrkDetl(wrkDetl, locDetl); // 鐗堟湰鎺у埗
+ wrkDetl.setAppeTime(new Date());
+ wrkDetl.setModiTime(new Date());
+ if (!wrkDetlService.insert(wrkDetl)) {
+ News.errorNoLog("" + "moveLocForDeepLoc" + " - 3" + " - 淇濆瓨宸ヤ綔妗f槑缁嗗け璐�");
+ throw new CoolException("淇濆瓨宸ヤ綔妗f槑缁嗗け璐�");
+ }
+ }
+ }
+ // 淇敼婧愬簱浣嶇姸鎬�
+ if (shallowLoc.getLocSts().equals("D") || shallowLoc.getLocSts().equals("F")) {
+ shallowLoc.setLocSts("R"); // R.鍑哄簱棰勭害
+ shallowLoc.setModiTime(new Date());
+ if (!locMastService.updateById(shallowLoc)) {
+ News.errorNoLog("" + "moveLocForDeepLoc" + " - 4" + " - 鏇存柊婧愬簱浣嶇姸鎬佸け璐�");
+ throw new CoolException("鏇存柊婧愬簱浣嶇姸鎬佸け璐�");
+ }
+ } else {
+ News.errorNoLog("" + "moveLocForDeepLoc" + " - 5" + " - 婧愬簱浣嶅嚭搴撳け璐�");
+ throw new CoolException("婧愬簱浣嶅嚭搴撳け璐�");
+ }
+ // 淇敼鐩爣搴撲綅鐘舵��
+ if (loc.getLocSts().equals("O")) {
+ loc.setLocSts("S"); // S.鍏ュ簱棰勭害
+ loc.setModiTime(new Date());
+ if (!locMastService.updateById(loc)) {
+ News.errorNoLog("" + "moveLocForDeepLoc" + " - 6" + " - 鏇存柊鐩爣搴撲綅鐘舵�佸け璐�");
+ throw new CoolException("鏇存柊鐩爣搴撲綅鐘舵�佸け璐�");
+ }
+ } else {
+ News.errorNoLog("" + "moveLocForDeepLoc" + " - 7" + " - 绉昏浆澶辫触");
+ throw new CoolException("绉昏浆澶辫触");
}
}
--
Gitblit v1.9.1