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 |   68 +++++++++++++++++++++++++--------
 1 files changed, 51 insertions(+), 17 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 c0ac56b..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;
@@ -61,6 +66,13 @@
     public ReturnT<String> start(WrkMast source) {
         WrkMast wrkMast = wrkMastService.selectById(source.getWrkNo());
         if (wrkMast == null || !Long.valueOf(ERP_REPORT_PENDING_WRK_STS).equals(wrkMast.getWrkSts())) {
+            return SUCCESS;
+        }
+
+        // 鍘嗗彶/杩愯涓暟鎹彲鑳藉凡缁忓湪瀹屽伐鏃惰缃负 ERP 寰呬笂鎶ャ��
+        // 璋冨害鍣ㄦ墽琛屽墠鍐嶅仛涓�娆℃潵婧愬垽鏂紝纭繚 MQTT 鏉ユ簮浠诲姟鍗充娇宸茶繘鍏ュ緟涓婃姤鐘舵�侊紝涔熶細琚敼鍥炲畬鎴愭�佸苟璺宠繃 ERP HTTP 璋冪敤銆�
+        if (iotInstructionService.isMqttOriginWork(wrkMast)) {
+            skipReport(wrkMast);
             return SUCCESS;
         }
 
@@ -92,8 +104,6 @@
         }
         String newLocId = row + "-" + col + "-" + lev;
         param.setLocId(newLocId);
-        // TODO锛氭ā鎿姝婚噸閲�1000KG锛岄渶寰岀簩鍒櫎
-        param.setWeight(1000.0);
 
         String request = JSON.toJSONString(param);
         String response = "";
@@ -159,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();
@@ -188,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();
         }
@@ -327,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