From cac27c083bacfcb1fe602d722729676f87ee7023 Mon Sep 17 00:00:00 2001
From: zwl <1051256694@qq.com>
Date: 星期五, 24 四月 2026 15:20:25 +0800
Subject: [PATCH] 完善电视机出库托数延时高的问题
---
src/main/java/com/zy/api/service/impl/WcsApiServiceImpl.java | 117 +++++++++++++++++++++++++++++++++++++---------------------
1 files changed, 75 insertions(+), 42 deletions(-)
diff --git a/src/main/java/com/zy/api/service/impl/WcsApiServiceImpl.java b/src/main/java/com/zy/api/service/impl/WcsApiServiceImpl.java
index 3d39bb7..4fc62b5 100644
--- a/src/main/java/com/zy/api/service/impl/WcsApiServiceImpl.java
+++ b/src/main/java/com/zy/api/service/impl/WcsApiServiceImpl.java
@@ -17,6 +17,7 @@
import com.zy.api.service.WcsApiService;
import com.zy.asrs.entity.*;
import com.zy.asrs.service.*;
+import com.zy.asrs.task.support.OutboundBatchSeqReleaseGuard;
import com.zy.asrs.utils.Utils;
import com.zy.common.constant.MesConstant;
import com.zy.common.model.LocTypeDto;
@@ -49,6 +50,8 @@
private static final long OUT_LOCK_REPORT_PENDING_WRK_STS = 13L;
private static final long OUT_LOCK_REPORT_SUCCESS_WRK_STS = 21L;
private static final long OUT_LOCK_REPORT_FAIL_WRK_STS = 22L;
+ private static final long OUTBOUND_CRN_COMPLETE_WRK_STS = 25L;
+ private static final long OUTBOUND_STATION_COMPLETE_WRK_STS = 26L;
private static final String OUT_LOCK_REPORT_PENDING_FLAG = "P";
/** 鍚屼竴 WCS 璺緞銆佸悓涓�鍗曞彿涓嬩竴缁勪笅鍙戠殑浠诲姟鏉℃暟涓婇檺 */
@@ -108,6 +111,8 @@
private RowLastnoService rowLastnoService;
@Autowired
private RedisUtil redisUtil;
+ @Autowired
+ private OutboundBatchSeqReleaseGuard outboundBatchSeqReleaseGuard;
/**
@@ -127,6 +132,10 @@
String validateMsg = validatePubTask(params, wrkMast);
if (!Cools.isEmpty(validateMsg)) {
return R.error(validateMsg);
+ }
+ String batchBlockMsg = validateOutboundBatchSeqReady(params, wrkMast);
+ if (!Cools.isEmpty(batchBlockMsg)) {
+ return R.error(batchBlockMsg);
}
String url = resolveTaskPath(params);
String requestJson = JSON.toJSONString(params);
@@ -485,49 +494,19 @@
return null;
}
WorkTaskParams head = chunk.get(0);
- if (!"out".equalsIgnoreCase(head.getType())) {
- return null;
- }
- WrkMast headMast = wrkMastMap.get(head.getTaskNo());
- String userNo = sortUserNoForPub(head, headMast);
- if (Cools.isEmpty(userNo)) {
- return null;
- }
- String batchSeq = sortBatchGroupForPub(head, headMast);
- String blockingBatchSeq = findFirstUnfinishedOutboundBatchSeq(userNo);
- if (blockingBatchSeq == null || compareBatchSeqNatural(batchSeq, blockingBatchSeq) == 0) {
- return null;
- }
- return "鍑哄簱鎵规鏈畬鎴愶紝鏆傚仠鍚庣画涓嬪彂, userNo=" + userNo
- + ", blockingBatchSeq=" + normalizeBatchSeq(blockingBatchSeq)
- + ", nextBatchSeq=" + normalizeBatchSeq(batchSeq);
+ return validateOutboundBatchSeqReady(head, wrkMastMap.get(head.getTaskNo()));
}
- private String findFirstUnfinishedOutboundBatchSeq(String userNo) {
- EntityWrapper<WrkMast> wrapper = new EntityWrapper<>();
- if (Cools.isEmpty(userNo)) {
- wrapper.isNull("user_no");
- } else {
- wrapper.eq("user_no", userNo);
- }
- wrapper.eq("io_type", 101);
- wrapper.last(" and (wrk_sts < 14 or wrk_sts in ("
- + OUT_LOCK_REPORT_SUCCESS_WRK_STS + "," + OUT_LOCK_REPORT_FAIL_WRK_STS + "))");
- List<WrkMast> rows = wrkMastService.selectList(wrapper);
- if (rows == null || rows.isEmpty()) {
+ private String validateOutboundBatchSeqReady(WorkTaskParams params, WrkMast wrkMast) {
+ if (params == null || !"out".equalsIgnoreCase(params.getType())) {
return null;
}
- String firstBatchSeq = null;
- for (WrkMast row : rows) {
- if (row == null) {
- continue;
- }
- String batchSeq = sortBatchGroupForPub(null, row);
- if (firstBatchSeq == null || compareBatchSeqNatural(batchSeq, firstBatchSeq) < 0) {
- firstBatchSeq = batchSeq;
- }
+ if (wrkMast == null || !Objects.equals(wrkMast.getIoType(), 101)) {
+ return null;
}
- return firstBatchSeq;
+ return outboundBatchSeqReleaseGuard.validateReady(
+ sortUserNoForPub(params, wrkMast),
+ sortBatchGroupForPub(params, wrkMast));
}
private boolean outboundPltSlotReleasedInWms(String userNo, String batchSeq, int pltType) {
@@ -714,9 +693,27 @@
throw new CoolException("浠诲姟鐘舵�佷慨鏀瑰け璐ワ紒锛�");
}
}
- } else if (params.getNotifyType().equals("task")) {
+ } else if (isOutboundCrnTaskComplete(params)) {
+ // WCS鍑哄簱浠诲姟瀹屾垚锛氬爢鍨涙満鍑哄簱浠诲姟鎵ц瀹屾垚锛屽伐浣滅姸鎬� -> 25銆�
+ if (isOutboundTask(mast) && canMarkOutboundCrnComplete(mast)) {
+ mast.setWrkSts(OUTBOUND_CRN_COMPLETE_WRK_STS);
+ mast.setModiTime(new Date());
+ if (!wrkMastService.updateById(mast)) {
+ throw new CoolException("浠诲姟鐘舵�佷慨鏀瑰け璐ワ紒锛�");
+ }
+ }
+ } else if (isOutboundStationTaskRunComplete(params)) {
+ // WCS杈撻�佺珯鐐瑰嚭搴撲换鍔¤繍琛屽畬鎴愶細鎵樼洏宸插埌鐩殑鍦帮紝宸ヤ綔鐘舵�� -> 26銆�
+ if (isOutboundTask(mast) && canMarkOutboundStationComplete(mast)) {
+ mast.setWrkSts(OUTBOUND_STATION_COMPLETE_WRK_STS);
+ mast.setModiTime(new Date());
+ if (!wrkMastService.updateById(mast)) {
+ throw new CoolException("浠诲姟鐘舵�佷慨鏀瑰け璐ワ紒锛�");
+ }
+ }
+ } else if ("task".equalsIgnoreCase(params.getNotifyType())) {
//浠诲姟
- if (params.getMsgType().equals("task_complete")) {
+ if ("task_complete".equalsIgnoreCase(params.getMsgType())) {
if (mast.getIoType() == 1 || mast.getIoType() == 2 ||mast.getIoType() == 10) {
mast.setWrkSts(4L);
@@ -730,7 +727,7 @@
throw new CoolException("浠诲姟鐘舵�佷慨鏀瑰け璐ワ紒锛�");
}
//wcs浠诲姟鍙栨秷鎺ュ彛
- } else if (params.getMsgType().equals("task_cancel")) {
+ } else if ("task_cancel".equalsIgnoreCase(params.getMsgType())) {
workService.cancelWrkMast(String.valueOf(mast.getWrkNo()), 9955L);
}
}
@@ -743,8 +740,29 @@
&& "crn_out_task_run".equalsIgnoreCase(params.getMsgType());
}
+ private boolean isOutboundCrnTaskComplete(ReceviceTaskParams params) {
+ return params != null
+ && "Crn".equalsIgnoreCase(params.getNotifyType())
+ && "crn_out_task_complete".equalsIgnoreCase(params.getMsgType());
+ }
+
+ private boolean isOutboundStationTaskRunComplete(ReceviceTaskParams params) {
+ return params != null
+ && "Devp".equalsIgnoreCase(params.getNotifyType())
+ && "station_out_task_run_complete".equalsIgnoreCase(params.getMsgType());
+ }
+
private boolean isOutboundTask(WrkMast mast) {
return mast != null && mast.getIoType() != null && (mast.getIoType() == 101 || mast.getIoType() == 110);
+ }
+
+ private boolean canMarkOutboundCrnComplete(WrkMast mast) {
+ if (mast == null || mast.getWrkSts() == null) {
+ return false;
+ }
+ return mast.getWrkSts() < 14
+ || mast.getWrkSts().equals(OUT_LOCK_REPORT_SUCCESS_WRK_STS)
+ || mast.getWrkSts().equals(OUT_LOCK_REPORT_FAIL_WRK_STS);
}
private boolean canMarkOutboundTaskComplete(WrkMast mast) {
@@ -753,7 +771,19 @@
}
return mast.getWrkSts() < 14
|| mast.getWrkSts().equals(OUT_LOCK_REPORT_SUCCESS_WRK_STS)
- || mast.getWrkSts().equals(OUT_LOCK_REPORT_FAIL_WRK_STS);
+ || mast.getWrkSts().equals(OUT_LOCK_REPORT_FAIL_WRK_STS)
+ || mast.getWrkSts().equals(OUTBOUND_CRN_COMPLETE_WRK_STS)
+ || mast.getWrkSts().equals(OUTBOUND_STATION_COMPLETE_WRK_STS);
+ }
+
+ private boolean canMarkOutboundStationComplete(WrkMast mast) {
+ if (mast == null || mast.getWrkSts() == null) {
+ return false;
+ }
+ return mast.getWrkSts() < 14
+ || mast.getWrkSts().equals(OUT_LOCK_REPORT_SUCCESS_WRK_STS)
+ || mast.getWrkSts().equals(OUT_LOCK_REPORT_FAIL_WRK_STS)
+ || mast.getWrkSts().equals(OUTBOUND_CRN_COMPLETE_WRK_STS);
}
@Override
@@ -886,6 +916,9 @@
if ("Y".equalsIgnoreCase(wrkMast.getPauseMk())) {
return "task paused";
}
+ if (Objects.equals(wrkMast.getIoType(), 101) && Cools.isEmpty(wrkMast.getBatchSeq())) {
+ return "鍑哄簱杩涗粨缂栧彿(batchSeq)涓虹┖锛岃烦杩囦笅鍙�";
+ }
if (requiresOutboundErpConfirm(wrkMast) && !"Y".equalsIgnoreCase(wrkMast.getPdcType())) {
return "task not confirmed by erp";
}
--
Gitblit v1.9.1