From 13d295c4210ee589b3e524bd157f85c63bca5a3e Mon Sep 17 00:00:00 2001
From: zwl <1051256694@qq.com>
Date: 星期四, 30 四月 2026 13:12:08 +0800
Subject: [PATCH] 1.出库单据转历史档有问题 2.新增单据历史档 3.修复入库完成转明细失败
---
src/main/java/com/zy/asrs/task/handler/WorkErpReportHandler.java | 82 +++++++++++++++++++++++++++++++++-------
1 files changed, 67 insertions(+), 15 deletions(-)
diff --git a/src/main/java/com/zy/asrs/task/handler/WorkErpReportHandler.java b/src/main/java/com/zy/asrs/task/handler/WorkErpReportHandler.java
index 87043a6..f11a8ec 100644
--- a/src/main/java/com/zy/asrs/task/handler/WorkErpReportHandler.java
+++ b/src/main/java/com/zy/asrs/task/handler/WorkErpReportHandler.java
@@ -16,12 +16,14 @@
import com.zy.asrs.task.core.ReturnT;
import com.zy.common.entity.Parameter;
import com.zy.common.utils.HttpHandler;
+import com.zy.integration.iot.biz.IotInstructionService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
+import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
@@ -36,6 +38,7 @@
public static final String ERP_REPORT_PENDING_FLAG = "P";
public static final String ERP_REPORT_SUCCESS_FLAG = "Y";
public static final String ERP_REPORT_FAIL_FLAG = "F";
+ public static final String ERP_REPORT_SKIPPED_FLAG = "S";
private static final String DATE_TIME_PATTERN = "yyyy-MM-dd HH:mm:ss";
@@ -47,6 +50,8 @@
private WaitPakinService waitPakinService;
@Autowired
private ApiLogService apiLogService;
+ @Autowired
+ private IotInstructionService iotInstructionService;
@Value("${erp.switch.ErpReportOld}")
private boolean erpReportOld;
@@ -64,6 +69,13 @@
return SUCCESS;
}
+ // 鍘嗗彶/杩愯涓暟鎹彲鑳藉凡缁忓湪瀹屽伐鏃惰缃负 ERP 寰呬笂鎶ャ��
+ // 璋冨害鍣ㄦ墽琛屽墠鍐嶅仛涓�娆℃潵婧愬垽鏂紝纭繚 MQTT 鏉ユ簮浠诲姟鍗充娇宸茶繘鍏ュ緟涓婃姤鐘舵�侊紝涔熶細琚敼鍥炲畬鎴愭�佸苟璺宠繃 ERP HTTP 璋冪敤銆�
+ if (iotInstructionService.isMqttOriginWork(wrkMast)) {
+ skipReport(wrkMast);
+ return SUCCESS;
+ }
+
if (!isErpReportEnabled()) {
finishReport(wrkMast, false, getRetryTimes(wrkMast), "ERP reporting is disabled", false);
return FAIL.setMsg("ERP reporting is disabled");
@@ -77,6 +89,22 @@
WaitPakin waitPakin = findWaitPakin(wrkMast.getBarcode());
ErpPakinReportParam param = buildParam(wrkMast, wrkDetls, waitPakin);
+
+ // 搴綅杞夋彌
+ String locId = param.getLocId();
+ String row = locId.substring(0, 2);
+ String col = locId.substring(2, 5);
+ String lev = locId.substring(5, 7);
+ if(Integer.parseInt(row) >= 37) {
+ row = "C" + row;
+ } else if(Integer.parseInt(row) >= 13) {
+ row = "B" + row;
+ } else {
+ row = "A" + row;
+ }
+ String newLocId = row + "-" + col + "-" + lev;
+ param.setLocId(newLocId);
+
String request = JSON.toJSONString(param);
String response = "";
boolean success = false;
@@ -141,13 +169,25 @@
param.setPalletId(resolvePalletId(wrkMast, wrkDetls));
param.setAnfme(sumAnfme(wrkDetls));
param.setLocId(wrkMast.getLocNo());
- param.setWeight(sumWeight(wrkDetls));
+// param.setWeight(sumWeight(wrkDetls));
+ param.setWeight(adjustErpReportWeight(wrkMast.getScWeight()));
param.setCreateTime(formatDate(resolveCreateTime(wrkMast)));
param.setBizNo(resolveBizNo(wrkDetls, waitPakin));
param.setStartTime(formatDate(resolveStartTime(wrkMast, waitPakin)));
+ param.setPhotos(wrkDetls.get(0).getPic());
return param;
}
+ /** 涓婃姤 ERP 閲嶉噺锛氣墹20 浼� 0锛�>20 鍑� 10 */
+ private static BigDecimal adjustErpReportWeight(BigDecimal scWeight) {
+ BigDecimal base = scWeight == null ? BigDecimal.ZERO : scWeight;
+ if (base.compareTo(new BigDecimal("20")) <= 0) {
+ return BigDecimal.ZERO;
+ }
+ return base.subtract(new BigDecimal("20.8"));
+ // BigDecimal v = base.subtract(new BigDecimal("10"));
+ // return v.compareTo(BigDecimal.ZERO) < 0 ? BigDecimal.ZERO : v;
+ }
private String resolvePalletId(WrkMast wrkMast, List<WrkDetl> wrkDetls) {
if (!Cools.isEmpty(wrkMast.getBarcode())) {
return wrkMast.getBarcode();
@@ -170,22 +210,19 @@
return total;
}
- private Double sumWeight(List<WrkDetl> wrkDetls) {
- double total = 0D;
- for (WrkDetl wrkDetl : wrkDetls) {
- if (Cools.isEmpty(wrkDetl.getWeight())) {
- continue;
- }
- double qty = Cools.isEmpty(wrkDetl.getAnfme()) ? 1D : wrkDetl.getAnfme();
- total += wrkDetl.getWeight() * qty;
- }
- return total;
- }
+// private Double sumWeight(List<WrkDetl> wrkDetls) {
+// double total = 0D;
+// for (WrkDetl wrkDetl : wrkDetls) {
+// if (Cools.isEmpty(wrkDetl.getWeight())) {
+// continue;
+// }
+// double qty = Cools.isEmpty(wrkDetl.getAnfme()) ? 1D : wrkDetl.getAnfme();
+// total += wrkDetl.getWeight() * qty;
+// }
+// return total;
+// }
private Date resolveCreateTime(WrkMast wrkMast) {
- if (!Cools.isEmpty(wrkMast.getCrnEndTime())) {
- return wrkMast.getCrnEndTime();
- }
if (!Cools.isEmpty(wrkMast.getModiTime())) {
return wrkMast.getModiTime();
}
@@ -309,6 +346,21 @@
}
}
+ private void skipReport(WrkMast wrkMast) {
+ Date now = new Date();
+ wrkMast.setWrkSts(ERP_REPORT_FINISHED_WRK_STS);
+ wrkMast.setLogMk(ERP_REPORT_SKIPPED_FLAG);
+ wrkMast.setExpTime(0D);
+ wrkMast.setLogErrMemo(null);
+ wrkMast.setLogErrTime(null);
+ wrkMast.setModiTime(now);
+ if (!wrkMastService.updateById(wrkMast)) {
+ throw new IllegalStateException("skip inbound erp report failed, workNo=" + wrkMast.getWrkNo());
+ }
+ // 鍏煎宸茶繘鍏� ERP 寰呬笂鎶ョ殑鏃т换鍔★細璺宠繃 ERP 鍚庤ˉ涓�娆� MQTT 瀹屽伐鍏ラ槦锛屽凡鏈夎褰曟椂 queueWorkCompletion 浼氱洿鎺ヨ繑鍥炪��
+ iotInstructionService.queueWorkCompletion(wrkMast);
+ }
+
private String truncate(String message, int maxLength) {
if (message == null || message.length() <= maxLength) {
return message;
--
Gitblit v1.9.1