From c312a110ee4823a4a1f912a05e9648edc56f96e7 Mon Sep 17 00:00:00 2001
From: skyouc
Date: 星期五, 06 六月 2025 15:48:42 +0800
Subject: [PATCH] DO 单生成出库单功能优化

---
 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/OutStockServiceImpl.java |   90 ++++++++++++++++++++++----------------------
 1 files changed, 45 insertions(+), 45 deletions(-)

diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/OutStockServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/OutStockServiceImpl.java
index d6d4e80..e034a1f 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/OutStockServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/OutStockServiceImpl.java
@@ -120,30 +120,25 @@
                     if (!deliveryItemService.updateById(deliveryItem)) {
                         throw new CoolException("DO鍗曟槑缁嗘洿鏂板け璐ワ紒锛�");
                     }
+
+                    Delivery delivery = deliveryService.getOne(new LambdaQueryWrapper<Delivery>().eq(Delivery::getCode, orderItem.getPoCode()));
+                    if (!Objects.isNull(delivery)) {
+                        Double wkQty = Math.round((delivery.getWorkQty() - delivery.getAnfme()) * 10000) / 10000.0;
+                        delivery.setWorkQty(wkQty.compareTo(0.0) >= 0 ? wkQty : 0).setExceStatus(POExceStatus.PO_EXCE_STATUS_UN_EXCE.val);
+                        if (!deliveryService.updateById(delivery)) {
+                            throw new CoolException("DO鍗曟嵁淇敼澶辫触锛侊紒");
+                        }
+                    }
                 }
             }
         }
 
-        if (!Objects.isNull(order.getPoId())) {
-            Delivery delivery = deliveryService.getById(order.getPoId());
-            if (!Objects.isNull(delivery)) {
-                Double sum = orderItems.stream().mapToDouble(AsnOrderItem::getAnfme).sum();
-                Double workQty = Math.round((delivery.getWorkQty() - sum) * 10000) / 10000.0;
-                delivery.setWorkQty(workQty.compareTo(0.0) >= 0 ? workQty : 0).setExceStatus(POExceStatus.PO_EXCE_STATUS_UN_EXCE.val);
-                if (!deliveryService.updateById(delivery)) {
-                    throw new CoolException("DO鍗曟嵁淇敼澶辫触锛侊紒");
-                }
-            }
-        }
         if (!this.remove(new LambdaQueryWrapper<AsnOrder>().eq(AsnOrder::getId, id))) {
             throw new CoolException("涓诲崟鍒犻櫎澶辫触锛侊紒");
         }
         if (!outStockItemService.remove(new LambdaQueryWrapper<AsnOrderItem>().eq(AsnOrderItem::getAsnId, id))) {
             throw new CoolException("鍗曟嵁鏄庣粏鍒犻櫎澶辫触锛侊紒");
         }
-//        if (!this.saveOrUpdate(order)) {
-//            throw new CoolException("鍗曟嵁鍙栨秷澶辫触锛侊紒");
-//        }
         return R.ok("鎿嶄綔鎴愬姛");
     }
 
@@ -166,37 +161,38 @@
             throw new CoolException("鍗曟嵁涓嶅瓨鍦紒锛�");
         }
         Map<Long, List<DeliveryItem>> listMap = items.stream().collect(Collectors.groupingBy(DeliveryItem::getDeliveryId));
+        //鑾峰彇绗竴涓狪D
+        Long deliveryId = items.stream().findFirst().get().getDeliveryId();
+        Delivery delivery = deliveryService.getById(deliveryId);
+        if (Objects.isNull(delivery)) {
+            throw new CoolException("涓诲崟鎹笉瀛樺湪锛侊紒");
+        }
+        AsnOrder order = new AsnOrder();
+        BeanUtils.copyProperties(delivery, order);
+        String ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_OUT_STOCK_CODE, order);
+        if (Objects.isNull(ruleCode) || StringUtils.isBlank(ruleCode)) {
+            throw new CoolException("缂栫爜瑙勫垯閿欒锛氳妫�鏌� 銆孲YS_OUT_STOCK_CODE銆嶇紪鐮佹槸鍚﹁缃垚鍔�");
+        }
+        order.setExceStatus(AsnExceStatus.OUT_STOCK_STATUS_TASK_INIT.val)
+                .setType(delivery.getType())
+                .setWkType(delivery.getWkType())
+                .setCode(ruleCode)
+                .setId(null)
+                .setUpdateBy(loginUserId)
+                .setCreateBy(loginUserId);
+        if (!this.save(order)) {
+            throw new CoolException("涓诲崟淇濆瓨澶辫触锛侊紒");
+        }
+
         listMap.keySet().forEach(key -> {
-            //TODO 鍒ゆ柇鍗曟嵁鏄惁宸茬粡瀛樺湪锛屽瀛樺湪鍒欑疮鍔犱慨鏀瑰瓙琛紝涓嶅瓨鍦ㄦ墠鏂板缓
-            Delivery delivery = deliveryService.getById(key);
-            if (Objects.isNull(delivery)) {
-                throw new CoolException("鍗曟嵁涓嶅瓨鍦紒锛�");
-            }
-            AsnOrder order = new AsnOrder();
-            BeanUtils.copyProperties(delivery, order);
-            String ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_OUT_STOCK_CODE, order);
-            if (Objects.isNull(ruleCode) || StringUtils.isBlank(ruleCode)) {
-                throw new CoolException("缂栫爜瑙勫垯閿欒锛氳妫�鏌� 銆孲YS_OUT_STOCK_CODE銆嶇紪鐮佹槸鍚﹁缃垚鍔�");
-            }
-            order.setExceStatus(AsnExceStatus.OUT_STOCK_STATUS_TASK_INIT.val)
-                    .setType(delivery.getType())
-                    .setWkType(delivery.getWkType())
-                    .setCode(ruleCode)
-                    .setPoId(delivery.getId())
-                    .setId(null)
-                    .setUpdateBy(loginUserId)
-                    .setCreateBy(loginUserId)
-                    .setPoCode(delivery.getCode());
-            if (!this.save(order)) {
-                throw new CoolException("涓诲崟淇濆瓨澶辫触锛侊紒");
-            }
+            Delivery delivery1 = deliveryService.getById(key);
             List<AsnOrderItem> orderItems = new ArrayList<>();
             listMap.get(key).forEach(item -> {
                 AsnOrderItem orderItem = new AsnOrderItem();
                 Double anfme = Math.round((item.getAnfme() - item.getWorkQty() - item.getQty()) * 10000) / 10000.0;
                 BeanUtils.copyProperties(item, orderItem);
                 orderItem.setId(null)
-                        .setPoCode(order.getPoCode())
+                        .setPoCode(delivery1.getCode())
                         .setMaktx(item.getMaktx())
                         .setMatnrCode(item.getMatnrCode())
                         .setFieldsIndex(item.getFieldsIndex())
@@ -210,6 +206,7 @@
                         .setPlatOrderCode(item.getPlatOrderCode())
                         .setProjectCode(item.getProjectCode())
                         .setPlatItemId(item.getPlatItemId())
+                        .setFieldsIndex(item.getFieldsIndex())
                         .setUpdateBy(loginUserId)
                         .setCreateBy(loginUserId)
                         .setPoDetlId(item.getId());
@@ -223,17 +220,13 @@
             });
 
             Double sum = orderItems.stream().mapToDouble(AsnOrderItem::getAnfme).sum();
-            //淇敼璁″垝鏁伴噺
-            order.setAnfme(sum).setWorkQty(0.0);
-            if (!this.saveOrUpdate(order)) {
-                throw new CoolException("涓诲崟鏁伴噺淇敼澶辫触锛侊紒");
-            }
+
             if (!asnOrderItemService.saveBatch(orderItems)) {
                 throw new CoolException("鏄庣粏淇濆瓨澶辫触锛侊紒");
             }
 
             Short exceStatus = POExceStatus.PO_EXCE_STATUS_SECTION_DONE.val;
-            if (delivery.getAnfme().compareTo(order.getAnfme()) <= 0) {
+            if (delivery1.getAnfme().compareTo(sum) <= 0) {
                 exceStatus = AsnExceStatus.ASN_EXCE_STATUS_TASK_DONE.val;
             }
 
@@ -243,8 +236,15 @@
                     .eq(Delivery::getId, key))) {
                 throw new CoolException("涓诲崟淇敼澶辫触锛侊紒");
             }
-
         });
+
+        Double sum = items.stream().mapToDouble(DeliveryItem::getAnfme).sum();
+        //淇敼璁″垝鏁伴噺
+        order.setAnfme(sum).setWorkQty(0.0);
+        if (!this.saveOrUpdate(order)) {
+            throw new CoolException("涓诲崟鏁伴噺淇敼澶辫触锛侊紒");
+        }
+
         return R.ok();
     }
 

--
Gitblit v1.9.1