From d8cbfdcac8292522dd3c39e5cafdf19a43d15a5d Mon Sep 17 00:00:00 2001
From: cl <1442464845@qq.com>
Date: 星期四, 30 四月 2026 11:21:08 +0800
Subject: [PATCH] 强制组托单号必填

---
 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WaitPakinServiceImpl.java |   84 ++++++++++++++++++++++++++++++++++++++---
 1 files changed, 77 insertions(+), 7 deletions(-)

diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WaitPakinServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WaitPakinServiceImpl.java
index b912340..c469ace 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WaitPakinServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WaitPakinServiceImpl.java
@@ -49,6 +49,8 @@
     private MatnrMapper matnrMapper;
     @Autowired
     private ConfigService configService;
+    @Autowired
+    private CusBarcodeSyncMatnrService cusBarcodeSyncMatnrService;
 
 
     /**
@@ -67,6 +69,13 @@
         }
         if (StringUtils.isBlank(waitPakin.getBarcode())) {
             throw new CoolException("鍙傛暟閿欒锛氭枡绠辩爜涓虹┖锛侊紒");
+        }
+        if (isPdaPakinAsnRequired()) {
+            for (PakinItem it : waitPakin.getItems()) {
+                if (StringUtils.isBlank(it.getAsnCode())) {
+                    throw new CoolException("璇峰厛鎵弿WMS鍗曞彿");
+                }
+            }
         }
         WaitPakin pakin = waitPakinService.getOne(new LambdaQueryWrapper<WaitPakin>()
                 .eq(WaitPakin::getBarcode, waitPakin.getBarcode()));
@@ -115,8 +124,49 @@
 
         List<WaitPakinItem> items = new ArrayList<>();
         if (directWaitPakin) {
-            // DirectWaitPakin 鍚敤锛氱粍鎵樻潵鑷敹璐у尯锛宲aram 涓� id 涓� WarehouseAreasItem.id
+            // DirectWaitPakin 鍚敤锛氱粍鎵樺彲鏉ヨ嚜鏀惰揣鍖猴紙鏈� id锛夋垨鏃犺鍗曠粍鎵橈紙id 涓� null锛屼粎鐗╂枡+鏁伴噺锛�
             for (PakinItem pakinItem1 : waitPakin.getItems()) {
+                if (pakinItem1.getId() == null) {
+                    // 鏃犺鍗曠粍鎵橈細鏃犳敹璐у尯鏉ユ簮锛屾寜 matnrId + receiptQty 寤虹粍鎵樻槑缁�
+                    if (pakinItem1.getMatnrId() == null) {
+                        throw new CoolException("鏃犺鍗曠粍鎵樻椂鐗╂枡ID涓嶈兘涓虹┖锛侊紒");
+                    }
+                    Matnr matnr = matnrMapper.selectById(pakinItem1.getMatnrId());
+                    if (matnr == null) {
+                        throw new CoolException("鐗╂枡淇℃伅涓嶅瓨鍦紝鐗╂枡ID锛�" + pakinItem1.getMatnrId());
+                    }
+                    cusBarcodeSyncMatnrService.syncFromMatnrCodes(Collections.singletonList(matnr.getCode()), userId);
+                    matnr = matnrMapper.selectById(pakinItem1.getMatnrId());
+                    if (matnr == null) {
+                        throw new CoolException("鐗╂枡淇℃伅涓嶅瓨鍦紝鐗╂枡ID锛�" + pakinItem1.getMatnrId());
+                    }
+                    if (pakinItem1.getReceiptQty() == null || pakinItem1.getReceiptQty().compareTo(0.0) <= 0) {
+                        throw new CoolException("缁勬墭鏁伴噺涓嶈兘灏忎簬绛変簬闆讹紒锛�");
+                    }
+                    WaitPakinItem pakinItem = new WaitPakinItem();
+                    pakinItem.setPakinId(waitPakin1.getId())
+                            .setSource(null)
+                            .setAsnId(null)
+                            .setAsnCode(null)
+                            .setAsnItemId(null)
+                            .setIsptResult(null)
+                            .setPlatItemId(null)
+                            .setPlatOrderCode(null)
+                            .setPlatWorkCode(null)
+                            .setProjectCode(null)
+                            .setBatch(null)
+                            .setUnit(matnr.getStockUnit() != null ? matnr.getStockUnit() : "涓�")
+                            .setFieldsIndex(matnr.getFieldsIndex())
+                            .setMatnrId(matnr.getId())
+                            .setMaktx(matnr.getName())
+                            .setUpdateBy(userId)
+                            .setCreateBy(userId)
+                            .setMatnrCode(matnr.getCode())
+                            .setAnfme(QuantityUtils.roundToScale(pakinItem1.getReceiptQty()))
+                            .setTrackCode(pakinItem1.getTrackCode());
+                    items.add(pakinItem);
+                    continue;
+                }
                 WarehouseAreasItem areaItem = warehouseAreasItemService.getById(pakinItem1.getId());
                 if (areaItem == null) {
                     throw new CoolException("鐗╂枡鏈�佽嚦鏀惰揣鍖猴紒锛�");
@@ -142,7 +192,7 @@
                         .setMatnrCode(areaItem.getMatnrCode());
                 WkOrder order = asnOrderService.getById(areaItem.getAsnId());
                 if (order != null) {
-                    pakinItem.setType(order.getType()).setWkType(StringUtils.isNotBlank(order.getWkType()) ? Short.parseShort(order.getWkType()) : null);
+                    pakinItem.setType(order.getType()).setWkType(order.getWkType());
                 }
                 if (pakinItem1.getReceiptQty() == null || pakinItem1.getReceiptQty().compareTo(0.0) <= 0) {
                     throw new CoolException("缁勬墭鏁伴噺涓嶈兘灏忎簬绛変簬闆讹紒锛�");
@@ -157,6 +207,9 @@
                 throw new CoolException("缁勬墭鏄庣粏淇濆瓨澶辫触锛侊紒");
             }
             for (WaitPakinItem pakinItem : items) {
+                if (pakinItem.getSource() == null) {
+                    continue; // 鏃犺鍗曠粍鎵樻棤鏀惰揣鍖烘潵婧愶紝涓嶆洿鏂版敹璐у尯
+                }
                 WarehouseAreasItem one = warehouseAreasItemService.getOne(new LambdaQueryWrapper<WarehouseAreasItem>().eq(WarehouseAreasItem::getId, pakinItem.getSource()));
                 if (one == null) {
                     throw new CoolException("鏀惰揣鍖烘暟鎹敊璇紒锛�");
@@ -197,7 +250,11 @@
 
         for (PakinItem pakinItem1 : waitPakin.getItems()) {
             WaitPakinItem pakinItem = new WaitPakinItem();
-            if (StringUtils.isBlank(pakinItem1.getAsnCode())) {
+            // 鍘熼�昏緫锛歩f (StringUtils.isBlank(pakinItem1.getAsnCode())) { ... } else { 鎸夊崟鎹檺鍒� ... }
+            // 鍙湁鍗曟嵁鍙峰瓨鍦ㄤ笖鑳芥煡鍒板崟鎹椂鎵嶆寜鍗曟嵁闄愬埗
+            WkOrder bindOrder = StringUtils.isBlank(pakinItem1.getAsnCode()) ? null :
+                    asnOrderService.getOne(new LambdaQueryWrapper<WkOrder>().eq(WkOrder::getCode, pakinItem1.getAsnCode()));
+            if (bindOrder == null) {
                 if (Objects.isNull(pakinItem1.getMatnrId())) {
                     throw new CoolException("鐗╂枡ID涓嶈兘涓虹┖锛侊紒");
                 }
@@ -240,9 +297,9 @@
                 if (null == orderItem) {
                     throw new CoolException("璁㈠崟鏄庣粏涓嶅瓨鍦紒锛�");
                 }
-                WkOrder order = asnOrderService.getById(orderItem.getOrderId());
-                if (null == order) {
-                    throw new CoolException("璁㈠崟涓嶅瓨鍦紒锛�");
+                WkOrder order = bindOrder;
+                if (orderItem.getOrderId() == null || !orderItem.getOrderId().equals(order.getId())) {
+                    throw new CoolException("鐗╂枡涓嶅湪褰撳墠鍗曟嵁涓紝涓嶈兘鎸夊崟鎹粍鎵橈紒锛�");
                 }
                 pakinItem.setAnfme(QuantityUtils.roundToScale(orderItem.getAnfme()))
                         .setPakinId(waitPakin1.getId())
@@ -264,7 +321,7 @@
                         .setCreateBy(userId)
                         .setMatnrCode(orderItem.getMatnrCode());
                 pakinItem.setType(null == order.getType() ? null : order.getType())
-                        .setWkType(StringUtils.isNotBlank(order.getWkType()) ? Short.parseShort(order.getWkType()) : null);
+                        .setWkType(order.getWkType());
 
                 for (PakinItem waitPakinItem : waitPakin.getItems()) {
                     if (waitPakinItem.getId().equals(orderItem.getId())) {
@@ -458,4 +515,17 @@
 
         return R.ok("Delete Success").add(pakinIds);
     }
+
+    private boolean isPdaPakinAsnRequired() {
+        Config c = configService.getOne(new LambdaQueryWrapper<Config>()
+                .eq(Config::getFlag, GlobalConfigCode.PDA_PAKIN_ASN_REQUIRED)
+                .eq(Config::getDeleted, 0)
+                .last("LIMIT 1"));
+        boolean required = true;
+        if (c != null && StringUtils.isNotBlank(c.getVal())) {
+            String v = c.getVal().trim();
+            required = Boolean.parseBoolean(v) || "1".equals(v);
+        }
+        return required;
+    }
 }

--
Gitblit v1.9.1