From 849409866c1372f5daf7becf9aec054922e260b2 Mon Sep 17 00:00:00 2001
From: zhangc <zc@123>
Date: 星期五, 14 二月 2025 13:20:23 +0800
Subject: [PATCH] 兼容四期
---
src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java | 238 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
1 files changed, 234 insertions(+), 4 deletions(-)
diff --git a/src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java
index 376531f..f3158bd 100644
--- a/src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java
@@ -7,10 +7,12 @@
import com.core.common.Cools;
import com.core.common.SnowflakeIdWorker;
import com.core.exception.CoolException;
+import com.zy.asrs.constant.AsrsConstants;
import com.zy.asrs.entity.*;
import com.zy.asrs.entity.param.LocDetlAdjustParam;
import com.zy.asrs.entity.param.StockOutParam;
import com.zy.asrs.service.*;
+import com.zy.asrs.utils.OrderUtils;
import com.zy.asrs.utils.Utils;
import com.zy.common.model.LocDto;
import com.zy.common.model.OrderDto;
@@ -31,6 +33,7 @@
import java.util.Iterator;
import java.util.List;
import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.concurrent.atomic.AtomicReference;
/**
* Created by vincent on 2020/6/11
@@ -507,6 +510,9 @@
case 30:
br = 3;
break;
+ case 31:
+ br = 6;
+ break;
case 40:
br = 5;
break;
@@ -517,6 +523,7 @@
if (agvBasDevp.getLocType1() != br) {
throw new CoolException("绔欑偣绫诲瀷鍜岃揣鏋剁被鍨嬩笉绗︼紒");
}
+ AtomicReference<String> factory = new AtomicReference<>();
if (containerType == 40) {
locType = 5;
} else if (containerType == 21 && agvBasDevp.getFloor() == 3) {
@@ -525,6 +532,8 @@
locType = 2;
} else if (containerType == 30) {
locType = 3;
+ } else if (containerType == 31) {
+ locType = 6;
} else {
locType = agvBasDevp.getLocType1();
}
@@ -553,6 +562,7 @@
if (!Cools.isEmpty(agvWaitPakinList)) {
AtomicBoolean isCurrLev = new AtomicBoolean(false);
agvWaitPakinList.forEach(agvWaitPakin -> {
+ factory.set(OrderUtils.getFactory(agvWaitPakin.getThreeCode()));
if (!Cools.isEmpty(agvWaitPakin.getProcessSts())) {
if (agvWaitPakin.getProcessSts() == 1) {
isCurrLev.set(true);
@@ -585,8 +595,164 @@
String devNo = agvBasDevp.getDevNo();
String locNo = agvLocMast.getLocNo();
+
//鐢熸垚宸ヤ綔妗�
AgvWrkMast wrkMast = createWrkMast(1, 201L, devNo, locNo, containerCode, now, userId, containerType, agvLocMast.getPltType());
+ //鐢熸垚宸ヤ綔妗f槑缁�
+ long flowId = snowflakeIdWorker.nextId();
+ agvWaitPakinList.forEach(wp -> {
+ createWrkDetlReWrite(wp.getMatnr(), wrkMast.getWrkNo(), wp.getOrderNo(), wp.getBatch(), wp.getAnfme(), wp.getSuppCode(), now, userId, wp.getThreeCode(), wp.getDeadTime(), wp.getProcessSts());
+ });
+ //淇敼鍏ュ簱閫氱煡妗g姸鎬�
+ agvWaitPakinService.updateIoStatus(containerCode, "Y");
+ //鏇存柊婧愮珯鐐圭姸鎬�
+ updateAgvBasDevp(agvBasDevp, "R", containerType);
+ } else {
+ //鏌ヨ宸ヤ綔妗�
+ AgvWrkMast agvWrkMast1 = agvWrkMastService.selectByContainerCode(containerCode);
+ if (!Cools.isEmpty(agvWrkMast1)) {
+ throw new CoolException("褰撳墠璐ф灦宸叉湁鍏ュ簱浠诲姟锛屾棤娉曡繘琛屽叆搴�");
+ }
+ agvLocMast = agvCommonService.getLocNo(locType, agvBasDevp.getFloor(), true, true);
+ // 鐢熸垚宸ヤ綔妗� 10.绌烘澘鍏ュ簱
+ createWrkMast(10, 201L, agvBasDevp.getDevNo(), agvLocMast.getLocNo(), containerCode, now, userId, containerType, agvLocMast.getPltType());
+ //鏇存柊婧愮珯鐐圭姸鎬�
+ updateAgvBasDevp(agvBasDevp, "R", containerType, containerCode);
+ }
+
+ //鏇存柊鐩爣搴撲綅鐘舵�佸拰淇℃伅
+ updateAgvLocMast(agvLocMast, "S");
+ return agvLocMast.getLocNo();
+ }
+
+ /*
+ 鍏ュ簱
+ */
+ @Transactional
+ public String emptyPlateInV2(String station, String containerCode, Short containerType, Long userId, boolean emptyAutoIn, String code) {
+
+ Date now = new Date();
+
+ Short locType = 0;
+
+ AgvBasDevp agvBasDevp = agvBasDevpService.selectById(station);
+ if (Cools.isEmpty(agvBasDevp)) {
+ throw new CoolException("鏆傛棤" + station + "绔欑偣");
+ }
+ int br = 0;
+ if (containerType == 21 && agvBasDevp.getFloor() == 2) {
+ containerType = 20;
+ }
+ switch (containerType) {
+ case 10:
+ br = 1;
+ break;
+ case 20:
+ br = 2;
+ break;
+ case 21:
+ br = 4;
+ break;
+ case 30:
+ br = 3;
+ break;
+ case 31:
+ br = 6;
+ break;
+ case 40:
+ br = 5;
+ break;
+ }
+ if (br == 4 && agvBasDevp.getLocType1() == 2) {
+ br = 2;
+ }
+ if (agvBasDevp.getLocType1() != br) {
+ throw new CoolException("绔欑偣绫诲瀷鍜岃揣鏋剁被鍨嬩笉绗︼紒");
+ }
+ AtomicReference<String> factory = new AtomicReference<>();
+ if (containerType == 40) {
+ locType = 5;
+ } else if (containerType == 21 && agvBasDevp.getFloor() == 3) {
+ locType = 4;
+ } else if (containerType == 20 && agvBasDevp.getFloor() == 3) {
+ locType = 2;
+ } else if (containerType == 30) {
+ locType = 3;
+ } else if (containerType == 31) {
+ locType = 6;
+ } else {
+ locType = agvBasDevp.getLocType1();
+ }
+
+ if (!Cools.eq(agvBasDevp.getBarcode(), containerCode) && !agvBasDevp.getLocSts().equals("O") && !emptyAutoIn) {
+ throw new CoolException("褰撳墠宸ヤ綔浣嶇姸鎬佷负" + agvBasDevp.getLocSts() + ",鏃犳硶杩涜鍏ュ簱");
+ }
+
+ //鏌ヨ宸ヤ綔妗�
+ AgvWrkMast agvWrkMast = agvWrkMastService.selectByContainerCode(containerCode);
+ if (!Cools.isEmpty(agvWrkMast) && !emptyAutoIn) {
+ throw new CoolException("褰撳墠璐ф灦宸叉湁鍏ュ簱浠诲姟锛屾棤娉曡繘琛屽叆搴�");
+ }
+
+ //妫�绱㈠簱浣嶏紝閫夋嫨鍚堥�傜殑搴撲綅
+ AgvLocMast agvLocMast = new AgvLocMast();
+
+ //鏌ヨ搴撳瓨
+ AgvLocMast locMast = agvLocMastService.selectOne(new EntityWrapper<AgvLocMast>().eq("barcode", containerCode));
+ if (!Cools.isEmpty(locMast)) {
+ throw new CoolException("褰撳墠璐ф灦宸插湪搴撳瓨涓紝鏃犳硶杩涜鍏ュ簱");
+ }
+
+ //鏌ヨ鍏ュ簱閫氱煡妗�
+ List<AgvWaitPakin> agvWaitPakinList = agvWaitPakinService.selectByContainerCode(containerCode);
+ if (!Cools.isEmpty(agvWaitPakinList)) {
+ AtomicBoolean isCurrLev = new AtomicBoolean(false);
+ agvWaitPakinList.forEach(agvWaitPakin -> {
+ factory.set(OrderUtils.getFactory(agvWaitPakin.getThreeCode()));
+ if (!Cools.isEmpty(agvWaitPakin.getProcessSts())) {
+ if (agvWaitPakin.getProcessSts() == 1) {
+ isCurrLev.set(true);
+ }
+ }
+ });
+
+
+// Config config = configService.selectOne(new EntityWrapper<Config>().eq("code", "elevatorTasks"));
+// if (Cools.isEmpty(config)) {
+// if (isCurrLev.get()) {
+// agvLocMast = agvCommonService.getLocNo(locType, agvBasDevp.getFloor(), false, true);
+// } else {
+// agvLocMast = agvCommonService.getLocNo(locType, agvBasDevp.getFloor(), false, false);
+// }
+// } else {
+// List<AgvWrkMast> agvWrkMasts = agvWrkMastService.selectList(new EntityWrapper<AgvWrkMast>().like("loc_no", "02F1").like("source_loc_no", "F1"));
+// if (Integer.parseInt(config.getValue()) <= agvWrkMasts.size()) {
+// agvLocMast = agvCommonService.getLocNo(locType, agvBasDevp.getFloor(), false, true);
+// } else {
+// if (isCurrLev.get()) {
+// agvLocMast = agvCommonService.getLocNo(locType, agvBasDevp.getFloor(), false, true);
+// } else {
+// agvLocMast = agvCommonService.getLocNo(locType, agvBasDevp.getFloor(), false, false);
+// }
+// //agvLocMast = agvCommonService.getLocNo(locType,agvBasDevp.getFloor(),false,false);
+// }
+// }
+ agvLocMast = agvCommonService.getLocByLocRule(3, 1, code);
+
+
+ String devNo = agvBasDevp.getDevNo();
+ String locNo = agvLocMast.getLocNo();
+ String ctnNo = null;
+ // 鎵撴爣璁帮紝鑻ュ簱浣嶄笉澶燂紝鍏ュ簱鍒板埆鐨勬ゼ灞傦紝閭d箞闇�瑕佽法灞傜Щ搴�
+ if (!Cools.isEmpty(code)) {
+ if (agvLocMast.getLev1() == 1 && !code.equals(AsrsConstants.SANCHANG)) {
+ ctnNo = "1";
+ } else if (agvLocMast.getLev1() == 2 && !code.equals(AsrsConstants.ERCHANG)) {
+ ctnNo = "1";
+ }
+ }
+ //鐢熸垚宸ヤ綔妗�
+ AgvWrkMast wrkMast = createWrkMastV2(1, 201L, devNo, locNo, containerCode, now, userId, containerType, agvLocMast.getPltType(), ctnNo);
//鐢熸垚宸ヤ綔妗f槑缁�
long flowId = snowflakeIdWorker.nextId();
agvWaitPakinList.forEach(wp -> {
@@ -623,6 +789,9 @@
// 绔欑偣妫�娴�
AgvBasDevp agvBasDevp = agvBasDevpService.selectById(station);
+ if (Cools.isEmpty(agvBasDevp)) {
+ throw new CoolException("绔欑偣淇℃伅涓嶅瓨鍦�");
+ }
if (!agvBasDevp.getLocSts().equals("O")) {
throw new CoolException("褰撳墠宸ヤ綔浣嶇姸鎬佷负" + agvBasDevp.getLocSts() + ",鏃犳硶杩涜绌烘澘鍑哄簱");
}
@@ -632,7 +801,11 @@
}
//瀵绘壘鐩稿簲绫诲瀷鐨勭┖璐ф灦
- AgvLocMast agvLocMast = agvLocMastService.selectEmptyZpallet(containerType, agvBasDevp.getFloor());
+ Integer floor = agvBasDevp.getFloor();
+ if (floor == 4) {
+ floor = 1;
+ }
+ AgvLocMast agvLocMast = agvLocMastService.selectEmptyZpallet(containerType, floor);
if (containerType == 0) {
//绌烘澘鑷姩鍑哄簱锛屾牴鎹珯鐐圭被鍨嬮�夋嫨
agvLocMastService.selectEmptyZpalletByLocType1(agvBasDevp.getLocType1());
@@ -1037,9 +1210,11 @@
// 鏇存柊璁㈠崟
for (AgvLocDetl agvLocDetl : agvLocDetls) {
OrderDetl orderDetl = orderDetlService.selectOne(new EntityWrapper<OrderDetl>().eq("order_no", "DB" + agvLocDetl.getOrderNo()).eq("matnr", agvLocDetl.getMatnr()).eq("three_code", agvLocDetl.getThreeCode()));
- orderDetl.setQty(orderDetl.getQty() - agvLocDetl.getAnfme());
- if (!orderDetlService.update(orderDetl, new EntityWrapper<OrderDetl>().eq("order_no", "DB" + agvLocDetl.getOrderNo()).eq("matnr", agvLocDetl.getMatnr()).eq("three_code", agvLocDetl.getThreeCode()))) {
- throw new CoolException("淇敼璁㈠崟鏄庣粏澶辫触锛岃鑱旂郴绠$悊鍛�" + agvLocDetl.getOrderNo() + agvLocDetl.getMatnr());
+ if (orderDetl != null) {
+ orderDetl.setQty(orderDetl.getQty() - agvLocDetl.getAnfme());
+ if (!orderDetlService.update(orderDetl, new EntityWrapper<OrderDetl>().eq("order_no", "DB" + agvLocDetl.getOrderNo()).eq("matnr", agvLocDetl.getMatnr()).eq("three_code", agvLocDetl.getThreeCode()))) {
+ throw new CoolException("淇敼璁㈠崟鏄庣粏澶辫触锛岃鑱旂郴绠$悊鍛�" + agvLocDetl.getOrderNo() + agvLocDetl.getMatnr());
+ }
}
// FlowLog flowLog = new FlowLog();
// flowLog.setFid(String.valueOf(flowId));
@@ -1242,6 +1417,9 @@
throw new CoolException(matnr + "鍟嗗搧缁存姢澶辫触");
}
OrderDetl orderDetl = orderDetlService.selectItem(orderNo, mat.getMatnr(), batch, csocode);
+ if (orderDetl == null) {
+ throw new CoolException("璁㈠崟鏄庣粏涓嶅瓨鍦�");
+ }
AgvWrkDetl wrkDetl = new AgvWrkDetl();
wrkDetl.sync(mat);
if (orderDetl != null) {
@@ -1324,8 +1502,13 @@
wrkMast.setAppeTime(now);
wrkMast.setModiUser(userId);
wrkMast.setModiTime(now);
+ if (!Cools.isEmpty(locNo) && Cools.isEmpty(pltType)) {
+ AgvLocMast agvLocMast = agvLocMastService.selectById(locNo);
+ pltType = agvLocMast.getPltType();
+ }
wrkMast.setPltType(pltType);
wrkMast.setLogErrMemo("createWaitPainWrkMastStart");
+
if (!agvWrkMastService.insertByIncrease(wrkMast)) {
throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�");
@@ -1339,6 +1522,53 @@
return wrkMast;
}
+ /*
+ 鐢熸垚宸ヤ綔妗�
+ */
+ private AgvWrkMast createWrkMastV2(int ioType, long wrkSts, String sourceLocNo, String locNo, String barcode, Date now, Long userId, int containerType, Integer pltType, String ctnNo) {
+ AgvWrkMast wrkMast = new AgvWrkMast();
+ //宸ヤ綔鐘舵��
+ wrkMast.setWrkSts(wrkSts);
+ //鍏ュ嚭搴撶被鍨�
+ wrkMast.setIoType(ioType);
+ wrkMast.setIoTime(now);
+ //浼樺厛绾�
+ wrkMast.setIoPri(300.0);
+ //婧愮珯鐐�
+ wrkMast.setSourceLocNo(sourceLocNo);
+ //鐩爣绔欑偣
+ wrkMast.setLocNo(locNo);
+ //璐ф灦缂栫爜
+ wrkMast.setBarcode(barcode);
+ //璐ф灦绫诲瀷
+ wrkMast.setWhsType(containerType);
+
+ wrkMast.setAppeUser(userId);
+ wrkMast.setAppeTime(now);
+ wrkMast.setModiUser(userId);
+ wrkMast.setModiTime(now);
+ if (!Cools.isEmpty(locNo) && Cools.isEmpty(pltType)) {
+ AgvLocMast agvLocMast = agvLocMastService.selectById(locNo);
+ pltType = agvLocMast.getPltType();
+ }
+ wrkMast.setPltType(pltType);
+ wrkMast.setLogErrMemo("createWaitPainWrkMastStart");
+ wrkMast.setCtnNo(ctnNo);
+
+
+ if (!agvWrkMastService.insertByIncrease(wrkMast)) {
+ throw new CoolException("淇濆瓨宸ヤ綔妗eけ璐�");
+ }
+
+ //鏆傚瓨浣嶄换鍔�+1
+ addInQty(locNo);
+
+ wrkMast = agvWrkMastService.selectOne(new EntityWrapper<AgvWrkMast>().eq("loc_no", locNo).eq("source_loc_no", sourceLocNo));
+
+ return wrkMast;
+ }
+
+
private boolean isPakOut(String locNo, TaskDto taskDto) {
Double allAnfme = agvLocDetlService.selectSumAnfmeByLocNo(locNo);
Double pakOutAnfme = 0.0;
--
Gitblit v1.9.1