From 0f4477b271b03277b79ad6c28240dfa841b7c33a Mon Sep 17 00:00:00 2001
From: 1 <1@123>
Date: 星期二, 10 三月 2026 10:37:34 +0800
Subject: [PATCH] lsh#

---
 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/OutStockServiceImpl.java |  100 ++++++++++++++++++++++++++++++++++++++++++++++++++
 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/OutStockService.java          |    1 
 rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/ReceiveMsgServiceImpl.java   |    2 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/Wave.java                      |    6 +++
 4 files changed, 108 insertions(+), 1 deletions(-)

diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/ReceiveMsgServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/ReceiveMsgServiceImpl.java
index 845766e..52fb504 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/ReceiveMsgServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/ReceiveMsgServiceImpl.java
@@ -639,7 +639,7 @@
 //                return;
 //            }
 //            outStockService.genOutStockTask(tasks, loginUserId, orderId);
-            outStockService.generateWaves(genWaveParams);
+            R r = outStockService.generateWavesOrderAuto(genWaveParams, stationId);
 
             log.info("璁㈠崟ID {} 鑷姩杞尝娆�", orderId);
         } catch (Exception e) {
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/Wave.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/Wave.java
index 0572776..9b30d44 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/Wave.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/Wave.java
@@ -141,6 +141,12 @@
     @ApiModelProperty(value= "澶囨敞")
     private String memo;
 
+    /**
+     * 鎸囧畾绔欑偣
+     */
+    @ApiModelProperty(value= "鎸囧畾绔欑偣")
+    private String stationId;
+
     public Wave() {}
 
     public Wave(String code,Short type,Short exceStatus,Double anfme,Double qty,Integer orderNum,Integer status,Long tenantId,Date createTime,Long createBy,Date updateTime,Long updateBy,Integer deleted,String memo) {
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/OutStockService.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/OutStockService.java
index e17259f..36af791 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/OutStockService.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/OutStockService.java
@@ -20,6 +20,7 @@
     R genOutStock(List<DeliveryItem> ids, Long loginUserId);
 
     R generateWaves(GenWaveParams ids);
+    R generateWavesOrderAuto(GenWaveParams ids,String stationId);
 
     R saveOutStock(AsnOrderAndItemsParams params, Long loginUserId);
 
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 33f3510..174a19a 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
@@ -276,6 +276,106 @@
      */
     @Override
     @Transactional(rollbackFor = Exception.class)
+    public R generateWavesOrderAuto(GenWaveParams params,String stationId) {
+        if (Objects.isNull(params.getIds()) || params.getIds().isEmpty()) {
+            throw new CoolException("鍙傛暟涓嶈兘涓虹┖锛侊紒");
+        }
+        List<WkOrder> orders = this.list(new LambdaQueryWrapper<WkOrder>()
+                .eq(WkOrder::getExceStatus, AsnExceStatus.OUT_STOCK_STATUS_TASK_INIT.val)
+                .in(WkOrder::getId, params.getIds()));
+        if (orders.isEmpty()) {
+            throw new CoolException("褰撳墠鍗曟嵁鐘舵�佷笉鑳芥墽琛屾尝娆$敓鎴愭搷浣滐紒锛�");
+        }
+        Double sum = orders.stream().mapToDouble(WkOrder::getAnfme).sum();
+        Double workQty = orders.stream().mapToDouble(WkOrder::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 (StringUtils.isBlank(ruleCode)) {
+            throw new CoolException("缂栫爜瑙勫垯閿欒锛氳瑕佹煡鐪嬨�孲YS_WAVE_TYPE銆嶆槸鍚﹁缃垚鍔燂紒锛�");
+        }
+        wave.setOrderNum(params.getIds().size())
+                .setType(Short.parseShort("1"))
+                .setCode(ruleCode)
+                .setExceStatus(WaveExceStatus.WAVE_EXCE_STATUS_INIT.val)
+                .setAnfme(anfme);
+        if (!waveService.save(wave)) {
+            throw new CoolException("娉㈡淇濆瓨澶辫触锛侊紒");
+        }
+
+        List<Long> list = orders.stream().map(WkOrder::getId).collect(Collectors.toList());
+        List<WkOrderItem> orderItems = asnOrderItemService
+                .list(new LambdaQueryWrapper<WkOrderItem>()
+                        .in(WkOrderItem::getOrderId, list).apply("anfme > work_qty"));
+        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).setGroupQty(waveItems.size());
+        wave.setStationId(stationId);
+        if (!waveService.saveOrUpdate(wave)) {
+            throw new CoolException("涓诲崟淇敼澶辫触锛侊紒");
+        }
+        for (int i = 0; i < orderItems.size(); i++) {
+            orderItems.get(i).setWorkQty(orderItems.get(i).getAnfme());
+        }
+
+        /**
+         *璁㈠崟淇℃伅瀛樺偍鑷抽�昏緫鍏宠仈琛�
+         */
+        for (WaveItem item : waveItems) {
+            List<WkOrderItem> items = orderItems.stream()
+                    .filter(orderItem -> item.getMatnrId()
+                            .equals(orderItem.getMatnrId()))
+                    .collect(Collectors.toList());
+
+            items.forEach(orderItem -> {
+                WaveOrderRela orderRela = new WaveOrderRela();
+                orderRela.setId(null)
+                        .setOrderId(orderItem.getOrderId())
+                        .setOrderItemId(orderItem.getId())
+                        .setWaveId(wave.getId())
+                        .setWaveItemId(item.getId());
+                if (!waveOrderRelaService.saveOrUpdate(orderRela)) {
+                    throw new CoolException("<UNK>");
+                }
+            });
+        }
+
+
+        if (!asnOrderItemService.saveOrUpdateBatch(orderItems)) {
+            throw new CoolException("鍑哄簱鍗曟墽琛屾暟閲忎慨鏀瑰け璐ワ紒锛�");
+        }
+        for (WkOrder order : orders) {
+            Double wkQty = Math.round((order.getWorkQty() + order.getAnfme()) * 10000) / 10000.0;
+            if (!this.update(new LambdaUpdateWrapper<WkOrder>()
+                    .set(WkOrder::getWaveId, wave.getId())
+                    .set(WkOrder::getWorkQty, wkQty)
+                    .set(WkOrder::getExceStatus, AsnExceStatus.OUT_STOCK_STATUS_TASK_WAVE.val)
+                    .eq(WkOrder::getId, order.getId()))) {
+                throw new CoolException("鎵ц鐘舵�佷慨鏀逛慨鏀瑰け璐ワ紒锛�");
+            }
+        }
+
+        return R.ok("鎿嶄綔瀹屾垚锛侊紒");
+    }
+
+    /**
+     * @param
+     * @return
+     * @author Ryan
+     * @description 鐢熸垚娉㈡
+     * @time 2025/4/24 15:04
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
     public R generateWaves(GenWaveParams params) {
         if (Objects.isNull(params.getIds()) || params.getIds().isEmpty()) {
             throw new CoolException("鍙傛暟涓嶈兘涓虹┖锛侊紒");

--
Gitblit v1.9.1