From 320efd494252d86cb61fc0961ecc3289266e933f Mon Sep 17 00:00:00 2001
From: chen.llin <1442464845@qq.comm>
Date: 星期二, 13 一月 2026 14:22:03 +0800
Subject: [PATCH] 库位移转
---
src/main/java/com/zy/service/impl/MainServiceImpl.java | 104 +++++++++++++++++++++++++++++++++++++++-------------
1 files changed, 78 insertions(+), 26 deletions(-)
diff --git a/src/main/java/com/zy/service/impl/MainServiceImpl.java b/src/main/java/com/zy/service/impl/MainServiceImpl.java
index 6beaae6..aef2d1d 100644
--- a/src/main/java/com/zy/service/impl/MainServiceImpl.java
+++ b/src/main/java/com/zy/service/impl/MainServiceImpl.java
@@ -222,6 +222,16 @@
ledThread.errorReset();
}
} else {
+ // WMS杩斿洖閿欒鏃讹紝鍏堟鏌ユ槸鍚︽槸鎷f枡鍏ュ簱锛屽鏋滄槸鍒欒烦杩囧洖閫�锛岃鎷f枡鍏ュ簱娴佺▼澶勭悊
+ WrkMast pickWrkMast = wrkMastMapper.selectPickStep(barcode);
+ if (pickWrkMast != null) {
+ // 鏄嫞鏂欏叆搴擄紝璺宠繃鍥為��锛岃鎷f枡鍏ュ簱娴佺▼澶勭悊
+ News.info("鏉$爜{}鏄嫞鏂欏叆搴擄紙宸ヤ綔鍙凤細{}锛屽伐浣滅姸鎬侊細{}锛屽叆鍑哄簱绫诲瀷锛歿}锛夛紝璺宠繃鏅�氬叆搴撳洖閫�锛屼氦鐢辨嫞鏂欏叆搴撴祦绋嬪鐞�",
+ barcode, pickWrkMast.getWrkNo(), pickWrkMast.getWrkSts(), pickWrkMast.getIoType());
+ continue;
+ }
+
+ // 涓嶆槸鎷f枡鍏ュ簱锛屾墽琛屽洖閫�
staProtocol.setWorkNo(wrkNo);
wrkNo++;
staProtocol.setStaNo(inSta.getBackSta().shortValue());
@@ -277,26 +287,46 @@
staProtocol = staProtocol.clone();
}
- if (staProtocol.isAutoing() && staProtocol.isLoading() && staProtocol.isInEnable() && staProtocol.isPakMk() && staProtocol.getWorkNo() == 9999) {
+ if (staProtocol.isAutoing() //鑷姩
+ && staProtocol.isLoading() //鏈夌墿
+ && staProtocol.isInEnable() //鍙叆
+ && staProtocol.isPakMk() //閿佸畾鏍囪
+// && staProtocol.getWorkNo() == 9999
+
+ ) {
News.warnNoLog(""+mark+" - 0"+" - 寮�濮嬫墽琛�");
WrkMast wrkMast = wrkMastMapper.selectPickStep(barcode);
if (wrkMast == null) {
// 鏃犳嫞鏂欐暟鎹�
continue;
}
- if ((wrkMast.getIoType() != 103 && wrkMast.getIoType() != 104 && wrkMast.getIoType() != 107)
- || Cools.isEmpty(wrkMast.getStaNo()) || Cools.isEmpty(wrkMast.getSourceStaNo())) {
+ // 鍒ゆ柇宸ヤ綔妗g被鍨嬶細鏈浆鎹㈢姸鎬�(103/104/107)鎴栧凡杞崲鐘舵��(53/54/57)
+ boolean isValidIoType = (wrkMast.getIoType() == 103 || wrkMast.getIoType() == 104 || wrkMast.getIoType() == 107)
+ || (wrkMast.getIoType() == 53 || wrkMast.getIoType() == 54 || wrkMast.getIoType() == 57);
+ if (!isValidIoType || Cools.isEmpty(wrkMast.getStaNo()) || Cools.isEmpty(wrkMast.getSourceStaNo())) {
continue;
}
+ // 鍒ゆ柇宸ヤ綔妗f槸鍚﹀凡杞崲锛氬凡杞崲鐘舵��(53/54/57)鎴栨湭杞崲鐘舵��(103/104/107)
+ boolean isConverted = (wrkMast.getIoType() == 53 || wrkMast.getIoType() == 54 || wrkMast.getIoType() == 57);
+
+ // 瀵逛簬宸茶浆鎹㈢姸鎬佺殑宸ヤ綔妗o紝妫�鏌ユ槸鍚﹀凡缁忎笅鍙戣繃锛堥伩鍏嶉噸澶嶅鐞嗭級
+ if (isConverted && staProtocol.getWorkNo() != null && staProtocol.getWorkNo().equals(wrkMast.getWrkNo())) {
+ // 宸ヤ綔鍙峰凡鍖归厤锛岃鏄庡凡缁忎笅鍙戣繃锛岃烦杩�
+ News.info("鎷f枡鍏ュ簱宸ヤ綔妗}宸蹭笅鍙戯紝璺宠繃閲嶅澶勭悊", wrkMast.getWrkNo());
+ continue;
+ }
+
+ Integer typeNo = isConverted ? wrkMast.getIoType() : (wrkMast.getIoType() - 50);
+
// 鑾峰彇鐩爣绔�
Wrapper<StaDesc> wrapper = new EntityWrapper<StaDesc>()
- .eq("type_no", wrkMast.getIoType() - 50)
+ .eq("type_no", typeNo)
.eq("stn_no", pickSta.getStaNo()) // 浣滀笟绔欑偣 = 鎷f枡鍑哄簱鐨勭洰鏍囩珯
.eq("crn_no", wrkMast.getCrnNo()); // 鍫嗗灈鏈哄彿
StaDesc staDesc = staDescService.selectOne(wrapper);
if (Cools.isEmpty(staDesc)) {
- News.error(""+mark+" - 2"+" - 鍏ュ簱璺緞涓嶅瓨鍦紒type_no={},stn_no={},crn_no={}", wrkMast.getIoType(), pickSta.getStaNo(), wrkMast.getCrnNo());
+ News.error(""+mark+" - 2"+" - 鍏ュ簱璺緞涓嶅瓨鍦紒type_no={},stn_no={},crn_no={}", typeNo, pickSta.getStaNo(), wrkMast.getCrnNo());
staProtocol.setWorkNo(wrkNo);
wrkNo++;
staProtocol.setStaNo((short) (pickSta.getStaNo().shortValue()-(short)1));
@@ -313,6 +343,9 @@
continue;
}
+ // 鍫嗗灈鏈虹珯鐐�(鐩爣绔�)
+ Integer staNo = staDesc.getCrnStn();
+
try {
// 淇濆瓨宸ヤ綔鏄庣粏妗e巻鍙叉。
if (wrkMastMapper.saveWrkDetlLog(wrkMast.getWrkNo()) == 0) {
@@ -324,28 +357,32 @@
}
Date now = new Date();
- // 鍫嗗灈鏈虹珯鐐�(鐩爣绔�)
- Integer staNo = staDesc.getCrnStn();
// 鏇存柊宸ヤ綔妗f暟鎹姸鎬�
wrkMast.setIoTime(now);
- wrkMast.setIoType(wrkMast.getIoType() - 50); // 鍏ュ嚭搴撶被鍨�: 103->53,104->54,107->57
- wrkMast.setWrkSts(2L); // 宸ヤ綔鐘舵��: 2.璁惧涓婅蛋
- wrkMast.setSourceStaNo(wrkMast.getStaNo()); // 婧愮珯
- wrkMast.setStaNo(staNo); // 鐩爣绔�
- wrkMast.setLocNo(wrkMast.getSourceLocNo()); // 鐩爣搴撲綅 = 鍑哄簱鏃剁殑婧愬簱浣�
- wrkMast.setSourceLocNo(""); // 婧愬簱浣嶆竻绌�
+ // 濡傛灉鏈浆鎹紝鍒欒浆鎹负鍏ュ簱绫诲瀷锛涘鏋滃凡杞崲锛屽垯淇濇寔涓嶅彉
+ if (!isConverted) {
+ wrkMast.setIoType(wrkMast.getIoType() - 50); // 鍏ュ嚭搴撶被鍨�: 103->53,104->54,107->57
+ wrkMast.setWrkSts(2L); // 宸ヤ綔鐘舵��: 2.璁惧涓婅蛋
+ wrkMast.setSourceStaNo(wrkMast.getStaNo()); // 婧愮珯
+ wrkMast.setStaNo(staNo); // 鐩爣绔�
+ wrkMast.setLocNo(wrkMast.getSourceLocNo()); // 鐩爣搴撲綅 = 鍑哄簱鏃剁殑婧愬簱浣�
+ wrkMast.setSourceLocNo(""); // 婧愬簱浣嶆竻绌�
+ }
+ // 瀵逛簬宸茶浆鎹㈢姸鎬侊紝鍙洿鏂版椂闂达紝涓嶄慨鏀瑰叾浠栧瓧娈碉紙閬垮厤瑕嗙洊宸叉湁淇℃伅锛�
wrkMast.setModiTime(now);
if (wrkMastMapper.updateById(wrkMast) == 0) {
throw new CoolException("鏇存柊宸ヤ綔妗f暟鎹姸鎬佸け璐�");
}
// 鏇存柊鏄庣粏妗o_time (鍘嗗彶妗e叧鑱斾娇鐢級
wrkDetlService.updateIoTime(wrkMast.getWrkNo(), now);
- // 淇敼搴撲綅鐘舵�� Q.鎷f枡/鐩樼偣/骞舵澘鍐嶅叆搴�
+ // 淇敼搴撲綅鐘舵�� Q.鎷f枡/鐩樼偣/骞舵澘鍐嶅叆搴擄紙濡傛灉搴撲綅鐘舵�佷笉鏄疩锛�
LocMast locMast = locMastService.selectById(wrkMast.getLocNo());
- locMast.setLocSts("Q");
- locMast.setModiTime(new Date());
- if (!locMastService.updateById(locMast)) {
- throw new CoolException("淇敼搴撲綅鐘舵�佸け璐�");
+ if (locMast != null && !"Q".equals(locMast.getLocSts())) {
+ locMast.setLocSts("Q");
+ locMast.setModiTime(new Date());
+ if (!locMastService.updateById(locMast)) {
+ throw new CoolException("淇敼搴撲綅鐘舵�佸け璐�");
+ }
}
} catch (Exception e) {
e.printStackTrace();
@@ -353,12 +390,14 @@
continue;
}
- // 鏇存柊绔欑偣淇℃伅 涓� 涓嬪彂plc鍛戒护
+ // 鏇存柊绔欑偣淇℃伅 涓� 涓嬪彂plc鍛戒护锛堝弬鑰冨叏鐗堝叆搴撶殑鏂瑰紡锛�
staProtocol.setWorkNo(wrkMast.getWrkNo());
- staProtocol.setStaNo(staProtocol.getSiteId().shortValue());
+ // 瀵逛簬宸茶浆鎹㈢姸鎬侊紝浣跨敤宸ヤ綔妗d腑宸叉湁鐨勭洰鏍囩珯锛涘浜庢湭杞崲鐘舵�侊紝浣跨敤鏂拌绠楃殑鐩爣绔�
+ Integer targetStaNo = isConverted ? wrkMast.getStaNo() : staNo;
+ staProtocol.setStaNo(targetStaNo.shortValue()); // 鐩爣绔欙細鍫嗗灈鏈虹珯鐐瑰彿
devpThread.setPakMk(staProtocol.getSiteId(), false);
boolean result = MessageQueue.offer(SlaveType.Devp, devp.getId(), new Task(2, staProtocol));
- log.error("杈撻�佺嚎涓嬪彂5锛�"+wrkMast.getWrkNo()+","+wrkMast.getStaNo());
+ log.error("杈撻�佺嚎涓嬪彂5锛�"+wrkMast.getWrkNo()+","+targetStaNo);
if (!result) {
News.error(""+mark+" - 3"+" - 鍙戝竷鍛戒护鑷宠緭閫佺嚎闃熷垪澶辫触锛侊紒锛� [plc缂栧彿锛歿}]", devp.getId());
}
@@ -382,7 +421,7 @@
for (CrnSlave crnSlave : slaveProperties.getCrn()) {
try {
// 姣忓彴鍫嗗灈鏈虹殑鎵�鏈夊嚭搴撶珯澶勭悊鍦ㄥ悓涓�涓簨鍔′腑鎵ц锛屽揩閫熸彁浜ら噴鏀鹃攣
- processCrnStnToOutStnForCrn(crnSlave, mark);
+ mainService.processCrnStnToOutStnForCrn(crnSlave, mark);
} catch (Exception e) {
News.error(""+mark+" - crnStnToOutStn"+" - 澶勭悊鍫嗗灈鏈簕}鏃跺彂鐢熷紓甯�", crnSlave.getId(), e);
// 缁х画澶勭悊涓嬩竴鍙板爢鍨涙満锛屼笉涓柇鏁翠釜娴佺▼
@@ -392,13 +431,12 @@
/**
* 澶勭悊鍗曞彴鍫嗗灈鏈虹殑鎵�鏈夊嚭搴撶珯鎿嶄綔锛堜娇鐢ㄧ嫭绔嬩簨鍔★紝蹇�熸彁浜ら噴鏀鹃攣锛�
- * 娉ㄦ剰锛氬繀椤绘槸public鏂规硶锛孲pring AOP鎵嶈兘浠g悊浜嬪姟
*/
@Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRES_NEW)
public void processCrnStnToOutStnForCrn(CrnSlave crnSlave, Integer mark) {
// 閬嶅巻鍫嗗灈鏈哄嚭搴撶珯
for (CrnSlave.CrnStn crnStn : crnSlave.getCrnOutStn()) {
- processCrnStnToOutStn(crnStn, mark);
+ mainService.processCrnStnToOutStn(crnStn, mark);
}
}
@@ -474,7 +512,7 @@
for (CrnSlave crn : slaveProperties.getCrn()) {
try {
// 姣忎釜鍫嗗灈鏈虹殑澶勭悊鍦ㄧ嫭绔嬩簨鍔′腑鎵ц锛屽揩閫熸彁浜ら噴鏀鹃攣
- processCrnIo(crn, mark);
+ mainService.processCrnIo(crn, mark);
} catch (Exception e) {
News.error(""+mark+" - crnIoExecute"+" - 澶勭悊鍫嗗灈鏈簕}鏃跺彂鐢熷紓甯�", crn.getId(), e);
// 缁х画澶勭悊涓嬩竴涓爢鍨涙満锛屼笉涓柇鏁翠釜娴佺▼
@@ -959,9 +997,16 @@
continue;
}
// 鍏ュ簱 + 搴撲綅杞Щ ==> 4.鍏ュ簱瀹屾垚
- if (wrkMast.getWrkSts() == 3 || (wrkMast.getWrkSts() == 12 && wrkMast.getIoType() == 11)) {
+ // 鏀寔鏅�氬叆搴�(io_type=1/10)鍜屾嫞鏂欏叆搴�(io_type=53/54/57)鐨勭姸鎬�3瀹屾垚纭
+ // 鏀寔搴撲綅绉昏浆(io_type=11)鐨勭姸鎬�12瀹屾垚纭
+ boolean canFinish = (wrkMast.getWrkSts() == 3) || (wrkMast.getWrkSts() == 12 && wrkMast.getIoType() == 11);
+ if (canFinish) {
+ News.info(""+mark+" - 1"+" - 鍏ュ簱浠诲姟瀹屾垚纭锛氬伐浣滃彿={}锛屽伐浣滅姸鎬�={}锛屽叆鍑哄簱绫诲瀷={}锛屽崟鎹紪鍙�={}锛屾墭鐩樼爜={}",
+ wrkMast.getWrkNo(), wrkMast.getWrkSts(), wrkMast.getIoType(), wrkMast.getSheetNo(), wrkMast.getBarcode());
wrkMast.setWrkSts(4L);
} else {
+ News.warn(""+mark+" - 1"+" - 鍏ュ簱浠诲姟鐘舵�佷笉绗﹀悎瀹屾垚鏉′欢锛氬伐浣滃彿={}锛屽伐浣滅姸鎬�={}锛屽叆鍑哄簱绫诲瀷={}锛屽崟鎹紪鍙�={}锛岃烦杩�",
+ wrkMast.getWrkNo(), wrkMast.getWrkSts(), wrkMast.getIoType(), wrkMast.getSheetNo());
continue;
}
Date now = new Date();
@@ -972,6 +1017,13 @@
// 鍫嗗灈鏈哄浣�
News.warnNoLog(""+mark+" - 2"+" - 淇敼鎴愬姛鍚庡浣嶅爢鍨涙満 : 鍫嗗灈鏈哄彿={}",crnThread.getCrnProtocol().getCrnNo());
crnThread.setResetFlag(true);
+
+ // 瀵逛簬鎷f枡鍏ュ簱锛坕o_type=53/54/57锛夛紝璁板綍瀹屾垚淇℃伅锛屾柟渚縒MS绯荤粺鏌ヨ璁㈠崟鐘舵��
+ if (wrkMast.getIoType() == 53 || wrkMast.getIoType() == 54 || wrkMast.getIoType() == 57) {
+ News.info(""+mark+" - 2"+" - 銆愭嫞鏂欏叆搴撳畬鎴愩�戝伐浣滃彿={}锛屽叆鍑哄簱绫诲瀷={}锛屽伐浣滅姸鎬�={}锛屽崟鎹紪鍙�={}锛屾墭鐩樼爜={}锛屽簱浣嶅彿={}锛屽畬鎴愭椂闂�={}",
+ wrkMast.getWrkNo(), wrkMast.getIoType(), wrkMast.getWrkSts(),
+ wrkMast.getSheetNo(), wrkMast.getBarcode(), wrkMast.getLocNo(), now);
+ }
}
}
--
Gitblit v1.9.1