From 273f2e5d3941b0e720e5eabd7dba9cfc042c3267 Mon Sep 17 00:00:00 2001
From: skyouc
Date: 星期二, 17 六月 2025 17:04:53 +0800
Subject: [PATCH] 出库单生成波次功能开发

---
 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/OutStockServiceImpl.java |   46 +++++++++++++++++++++++++---------------------
 1 files changed, 25 insertions(+), 21 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 849a6fd..46d5648 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
@@ -279,13 +279,13 @@
         if (Objects.isNull(ids) || ids.isEmpty()) {
             throw new CoolException("鍙傛暟涓嶈兘涓虹┖锛侊紒");
         }
-        List<AsnOrder> orders = this.list(new LambdaQueryWrapper<AsnOrder>()
-                .in(AsnOrder::getId, ids)
-                .eq(AsnOrder::getExceStatus, AsnExceStatus.OUT_STOCK_STATUS_TASK_INIT.val));
+        List<AsnOrder> orders = this.list(new LambdaQueryWrapper<AsnOrder>().in(AsnOrder::getId, ids));
         if (orders.isEmpty()) {
             throw new CoolException("褰撳墠鍗曟嵁鐘舵�佷笉鑳芥墽琛屾尝娆$敓鎴愭搷浣滐紒锛�");
         }
-        double sum = orders.stream().mapToDouble(AsnOrder::getAnfme).sum();
+        Double sum = orders.stream().mapToDouble(AsnOrder::getAnfme).sum();
+        Double workQty = orders.stream().mapToDouble(AsnOrder::getWorkQty).sum();
+        Double anfme = Math.round((sum - workQty) * 10000) / 10000.0;
         Wave wave = new Wave();
         String ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_WAVE_TYPE, null);
         if (Objects.isNull(ruleCode) || StringUtils.isBlank(ruleCode)) {
@@ -295,7 +295,7 @@
                 .setType(Short.parseShort("1"))
                 .setCode(ruleCode)
                 .setExceStatus(WaveExceStatus.WAVE_EXCE_STATUS_INIT.val)
-                .setAnfme(sum);
+                .setAnfme(anfme);
         if (!waveService.save(wave)) {
             throw new CoolException("娉㈡淇濆瓨澶辫触锛侊紒");
         }
@@ -306,13 +306,13 @@
         if (orderItems.isEmpty()) {
             throw new CoolException("鍗曟嵁涓嶅瓨鍦紒锛�");
         }
-
+        //鍚堝苟鐗╂枡锛岀敓鎴愭尝娆℃槑缁�
         List<WaveItem> waveItems = mergeWave(orderItems, wave);
         if (!waveItemService.saveBatch(waveItems)) {
             throw new CoolException("娉㈡鏄庣粏淇濆瓨澶辫触锛侊紒");
         }
         double sum1 = waveItems.stream().mapToDouble(WaveItem::getAnfme).sum();
-        wave.setAnfme(sum1);
+        wave.setAnfme(sum1).setGroupQty(waveItems.size());
         if (!waveService.saveOrUpdate(wave)) {
             throw new CoolException("涓诲崟淇敼澶辫触锛侊紒");
         }
@@ -325,14 +325,17 @@
             throw new CoolException("鍑哄簱鍗曟墽琛屾暟閲忎慨鏀瑰け璐ワ紒锛�");
         }
 
-        double sum2 = orderItems.stream().mapToDouble(AsnOrderItem::getWorkQty).sum();
-        if (!this.update(new LambdaUpdateWrapper<AsnOrder>()
-                .set(AsnOrder::getWaveId, wave.getId())
-                .set(AsnOrder::getWorkQty, sum2)
-                .set(AsnOrder::getExceStatus, AsnExceStatus.OUT_STOCK_STATUS_TASK_WAVE.val)
-                .in(AsnOrder::getId, ids))) {
-            throw new CoolException("鎵ц鐘舵�佷慨鏀逛慨鏀瑰け璐ワ紒锛�");
+        for (AsnOrder order : orders) {
+            Double wkQty = Math.round((order.getWorkQty() + order.getAnfme()) * 10000) / 10000.0;
+            if (!this.update(new LambdaUpdateWrapper<AsnOrder>()
+                    .set(AsnOrder::getWaveId, wave.getId())
+                    .set(AsnOrder::getWorkQty, wkQty)
+                    .set(AsnOrder::getExceStatus, AsnExceStatus.OUT_STOCK_STATUS_TASK_WAVE.val)
+                    .in(AsnOrder::getId, ids))) {
+                throw new CoolException("鎵ц鐘舵�佷慨鏀逛慨鏀瑰け璐ワ紒锛�");
+            }
         }
+
         return R.ok("鎿嶄綔瀹屾垚锛侊紒");
     }
 
@@ -442,12 +445,14 @@
             throw new CoolException("鍙傛暟涓嶈兘涓虹┖锛侊紒");
         }
         //浼樺厛鐢熸垚娴呭簱浣嶄换鍔�
-        List<OutStockToTaskParams> Items = params.stream().sorted(Comparator.comparing(OutStockToTaskParams::getLocCode).thenComparing(item -> {
+        List<OutStockToTaskParams> Items = params.stream()
+                .sorted(Comparator.comparing(OutStockToTaskParams::getLocCode)
+                        .thenComparing(item -> {
             return LocUtils.isShallowLoc(item.getLocCode()) ? 1 : 0;
         }).reversed()).collect(Collectors.toList());
 
         for (OutStockToTaskParams param : Items) {
-            if (Objects.isNull(param)) {
+            if (Objects.isNull(param) || StringUtils.isBlank(param.getLocCode())) {
                 continue;
             }
             Loc loc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getCode, param.getLocCode()).eq(Loc::getBarcode, param.getBarcode()));
@@ -697,12 +702,11 @@
     private List<WaveItem> mergeWave(List<AsnOrderItem> orderItems, Wave wave) {
         List<WaveItem> items = new ArrayList<>();
         orderItems.forEach(order -> {
+            Double anfme = Math.round((order.getAnfme() - order.getWorkQty()) * 10000) / 10000.0;
             WaveItem item = new WaveItem();
             BeanUtils.copyProperties(order, item);
-            item.setOrderItemId(order.getId())
-                    .setId(null)
-                    .setOrderCode(order.getAsnCode())
-                    .setOrderId(order.getAsnId())
+                item.setId(null)
+                    .setAnfme(anfme)
                     .setMatnrId(order.getMatnrId())
                     .setMaktx(order.getMaktx())
                     .setWaveId(wave.getId())
@@ -735,7 +739,7 @@
                         p1.getUpdateBy(),
                         p1.getMemo()
                 ),
-                WaveItem::getSplrBatch, WaveItem::getMatnrCode, WaveItem::getFieldsIndex
+                WaveItem::getSplrBatch, WaveItem::getMatnrId, WaveItem::getFieldsIndex
         );
 
         return waveItems;

--
Gitblit v1.9.1