From ff66ddf96807fac02e01c7d2ecdfd1ba808af9c5 Mon Sep 17 00:00:00 2001
From: zwl <1051256694@qq.com>
Date: 星期六, 25 四月 2026 18:42:10 +0800
Subject: [PATCH] wms下发任务给wcs时上锁,防止erp发送中止任务
---
src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java | 72 +++++++++++++++++++++++++++++------
1 files changed, 59 insertions(+), 13 deletions(-)
diff --git a/src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
index fae0285..fb7b29f 100644
--- a/src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
+++ b/src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
@@ -14,6 +14,7 @@
import com.zy.asrs.mapper.TagMapper;
import com.zy.asrs.service.*;
import com.zy.asrs.task.core.ReturnT;
+import com.zy.asrs.task.support.WorkPublishLockKeys;
import com.zy.asrs.utils.MatUtils;
import com.zy.asrs.utils.OrderInAndOutUtil;
import com.zy.asrs.utils.Utils;
@@ -28,6 +29,7 @@
import com.zy.common.service.CommonService;
import com.zy.common.utils.HttpHandler;
import com.zy.common.utils.NodeUtils;
+import com.zy.common.utils.RedisUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
@@ -121,6 +123,8 @@
private WcsApiService wcsApiService;
@Autowired
private WorkService workService;
+ @Autowired
+ private RedisUtil redisUtil;
@Autowired
private BasCrnpService basCrnpService;
@Autowired
@@ -406,6 +410,10 @@
}
if (param.getExecute() == null) {
throw new CoolException("execute涓嶈兘涓虹┖");
+ }
+ if (Objects.equals(param.getExecute(), 2)
+ && redisUtil.hasKey(WorkPublishLockKeys.outboundUserNoLock(param.getOrderId()))) {
+ return R.error("姝e湪涓嬪彂浠诲姟缁橶CS锛屾棤娉曚腑姝�");
}
List<WrkMast> activeTasks = findActiveOutboundTasks(param.getOrderId());
@@ -1471,6 +1479,11 @@
waitPakin.setIoStatus("N"); // 鍏ュ嚭鐘舵��
waitPakin.setAnfme(param.getAnfme()); // 鏁伴噺
waitPakin.setFreqType(param.getFreqType());
+ waitPakin.setContainerNo(param.getContainerNo());
+ waitPakin.setTeu(param.getTeu());
+ waitPakin.setPlateNo(param.getPlateNo());
+ waitPakin.setTrainNo(param.getTrainNo());
+ waitPakin.setCubeNumber(param.getCubeNumber());
waitPakin.setStatus("Y"); // 鐘舵��
waitPakin.setAppeUser(9995L);
waitPakin.setAppeTime(now);
@@ -1499,7 +1512,11 @@
* 7.11 鍑哄簱閫氱煡鍗曪紙浼犻�掓湁搴忔棤搴忚鍒欙級鍗曟潯寤哄崟銆�
*/
@Override
- public R outOrder(OutTaskParam param,int count) {
+ public R outOrder(OutTaskParam param,int count,int i) {
+ return outOrder(param, count, 0 ,i);
+ }
+
+ private R outOrder(OutTaskParam param, int count, int teu , int i) {
LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_sts", "F").eq("barcode", param.getPalletId()));
if (locMast == null) {
throw new CoolException("娌℃湁鎵惧埌鎵樼洏鐮�=" + param.getPalletId() + "瀵瑰簲鐨勫簱浣�");
@@ -1546,6 +1563,12 @@
wrkMast.setEmptyMk("N"); // 绌烘澘
wrkMast.setLinkMis("N");
wrkMast.setPdcType("N");
+ wrkMast.setContainerNo(param.getContainerNo());
+ wrkMast.setTeu(teu);
+ wrkMast.setPlateNo(param.getPlateNo());
+ wrkMast.setTrainNo(param.getTrainNo());
+ wrkMast.setFreqType(param.getFreqType());
+ wrkMast.setCubeNumber(param.getCubeNumber());
// 7.11锛歰rderId 瀛� userNo锛宐atchSeq 瀛樻壒娆℃爣璇嗭紝seq 瀛樻壒娆″唴椤哄簭銆�
wrkMast.setUserNo(param.getOrderId());//璁㈠崟鍙�
wrkMast.setBatchSeq(param.getBatchSeq());//璁㈠崟鍐呮壒娆℃爣璇�
@@ -1575,10 +1598,17 @@
wrkDetl.setAppeUser(9995L);
wrkDetl.setModiTime(now);
wrkDetl.setModiUser(9995L);
+ wrkDetl.setTeu(teu);
+ wrkDetl.setContainerNo(param.getContainerNo());
+ wrkDetl.setPlateNo(param.getPlateNo());
+ wrkDetl.setTrainNo(param.getTrainNo());
+ wrkDetl.setFreqType(param.getFreqType());
+ wrkDetl.setCubeNumber(param.getCubeNumber());
// 7.11锛歟ntryWmsCode銆乷utDoorNo 澶嶇敤鏄庣粏澶囩敤瀛楁銆�
wrkDetl.setStandby1(param.getEntryWmsCode());
wrkDetl.setStandby2(param.getOutDoorNo());
- wrkDetl.setSupp(param.getSeq()+"/"+count);
+ wrkDetl.setSupp(count+"");
+ wrkDetl.setTeu(param.getTeu());
if (!wrkDetlService.insert(wrkDetl)) {
throw new CoolException("淇濆瓨宸ヤ綔妗f槑缁嗗け璐�");
@@ -1605,18 +1635,22 @@
*/
@Override
@Transactional(rollbackFor = Exception.class)
- public R outOrderBatch(List<OutTaskParam> params) {
- int n = params.size();
- Map<String, Integer> batchLineCounts = new HashMap<>();
- for (OutTaskParam outTaskParam : params) {
- batchLineCounts.merge(buildOutOrderBatchKey(outTaskParam), 1, Integer::sum);
- }
- for (OutTaskParam outTaskParam : params) {
- int count = batchLineCounts.getOrDefault(buildOutOrderBatchKey(outTaskParam), n);
- R r = outOrder(outTaskParam, count);
- if (!Objects.equals(r.get("code"), 200)) {
- throw new CoolException("鍑哄簱寤哄崟澶辫触");
+ public R outOrderBatch(Map<String, List<OutTaskParam>> linesByBatchSeq,int count) {
+ int i = 0;
+ for (Map.Entry<String, List<OutTaskParam>> entry : linesByBatchSeq.entrySet()) {
+ for (OutTaskParam outTaskParam : entry.getValue()) {
+ if(outTaskParam.getSeq()!=0){
+ i= outTaskParam.getSeq();
+ }else{
+ i++;
+ }
+ int teu = Cools.isEmpty(outTaskParam.getTeu())?0:outTaskParam.getTeu();
+ R r = outOrder(outTaskParam, count, teu ,i);
+ if (!Objects.equals(r.get("code"), 200)) {
+ throw new CoolException("鍑哄簱寤哄崟澶辫触");
+ }
}
+
}
return R.ok();
}
@@ -1707,6 +1741,18 @@
return param.getOrderId() + "#" + param.getBatchSeq();
}
+ private Map<String, Integer> buildOutOrderBatchTeuCounts(List<OutTaskParam> params) {
+ Map<String, Set<String>> batchOrderIds = new HashMap<>();
+ for (OutTaskParam param : params) {
+ batchOrderIds.computeIfAbsent(param.getBatchSeq(), k -> new LinkedHashSet<>()).add(param.getOrderId());
+ }
+ Map<String, Integer> batchTeuCounts = new HashMap<>();
+ for (Map.Entry<String, Set<String>> entry : batchOrderIds.entrySet()) {
+ batchTeuCounts.put(entry.getKey(), entry.getValue().size());
+ }
+ return batchTeuCounts;
+ }
+
private String resolveOutboundOrderId(String palletId) {
List<WrkMast> wrkMasts = wrkMastService.selectList(new EntityWrapper<WrkMast>()
.eq("io_type", 101)
--
Gitblit v1.9.1