From 9b8ba51387d0a8db467bafaf7ecd09d93bded873 Mon Sep 17 00:00:00 2001
From: skyouc
Date: 星期一, 28 四月 2025 13:23:37 +0800
Subject: [PATCH] 添加简略出库策略

---
 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WaveServiceImpl.java |   60 +++++++++++++++++++++++++++++++++++-------------------------
 1 files changed, 35 insertions(+), 25 deletions(-)

diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WaveServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WaveServiceImpl.java
index 111ac2f..96355b3 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WaveServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/WaveServiceImpl.java
@@ -17,15 +17,14 @@
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.vincent.rsf.server.manager.utils.OptimalAlgorithmUtil;
 import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
-import java.util.Objects;
+import java.util.*;
 import java.util.stream.Collectors;
+import java.util.stream.IntStream;
 
 @Service("waveService")
 public class WaveServiceImpl extends ServiceImpl<WaveMapper, Wave> implements WaveService {
@@ -53,10 +52,11 @@
     @Override
     @Transactional(rollbackFor = Exception.class)
     public R publicTask(Map<String, Object> map) {
-        List<Long> ids = (List<Long>) map.get("ids");
-        if (Objects.isNull(ids) || ids.isEmpty()) {
+        List<WaveItem> itemParams = (List<WaveItem>) map.get("wave");
+        if (Objects.isNull(itemParams) || itemParams.isEmpty()) {
             throw new CoolException("鍙傛暟涓嶈兘涓虹┖锛侊紒");
         }
+        List<Long> ids = itemParams.stream().map(WaveItem::getWaveId).collect(Collectors.toList());
         List<Wave> waves = this.list(new LambdaQueryWrapper<Wave>().in(Wave::getId, ids));
         if (Objects.isNull(waves) || waves.isEmpty()) {
             throw new CoolException("娉㈡鏁版嵁涓嶅瓨鍦紒锛�");
@@ -67,10 +67,9 @@
             throw new CoolException("娉㈡鏄庣粏涓嶅瓨鍦紒锛�");
         }
         List<Long> orderIds = waveItems.stream().map(WaveItem::getOrderId).collect(Collectors.toList());
-
         /**鏌ヨ姣忔潯鏄庣粏鍖归厤鐨勫簱浣�*/
         try {
-            List<WaveItem> items = getLocs(waveItems);
+//            List<WaveItem> items = getLocs(waveItems);
         } catch (Exception e) {
             throw new CoolException("搴撲綅鑾峰彇澶辫触锛侊紒锛�");
         }
@@ -78,16 +77,16 @@
         // 2. 鏍规嵁鐗╂枡SKU瀵绘壘绗﹀悎鐗╂枡搴撲綅  {1. 鏍规嵁鐗╂枡缂栫爜锛屾壒娆★紝鍔ㄦ�佸瓧娈� 鏌ヨ绗﹀悎鐨勫簱浣嶏紝鍐嶆牴鎹簱浣嶄腑鐗╂枡鐨勬暟閲忛�夋嫨鏈�閫傚悎鐨勫簱浣� 2. 鍒ゆ柇褰撳墠璁㈠崟鏄叏鎷栧嚭搴撹繕鏄嫞鏂欏叆搴搣
         // 3. 淇敼涓诲崟銆佹尝娆℃墽琛屾暟閲�
         // 4. 鍒ゆ柇鍏ㄤ粨鍑哄簱鎴栨嫞鏂欏嚭搴�
-        List<AsnOrder> orders = asnOrderService.list(new LambdaQueryWrapper<AsnOrder>().in(AsnOrder::getId, orderIds));
-        /**淇敼鍘熷嚭搴撳崟鐘舵��*/
-        if (!asnOrderService.update(new LambdaQueryWrapper<AsnOrder>()
-                .eq(AsnOrder::getExceStatus, AsnExceStatus.OUT_STOCK_STATUS_TASK_WORKING.val)
-                .in(AsnOrder::getId, orders))) {
-            throw new CoolException("鍑哄簱鍗曟嵁鐘舵�佷慨鏀瑰け璐ワ紒锛�");
-        }
-        if (!this.update(new LambdaUpdateWrapper<Wave>().set(Wave::getExceStatus, WaveExceStatus.WAVE_EXCE_STATUS_TASK).in(Wave::getId, ids))) {
-            throw new CoolException("娉㈡鐘舵�佷慨鏀瑰け璐ワ紒锛�");
-        }
+//        List<AsnOrder> orders = asnOrderService.list(new LambdaQueryWrapper<AsnOrder>().in(AsnOrder::getId, orderIds));
+//        /**淇敼鍘熷嚭搴撳崟鐘舵��*/
+//        if (!asnOrderService.update(new LambdaQueryWrapper<AsnOrder>()
+//                .eq(AsnOrder::getExceStatus, AsnExceStatus.OUT_STOCK_STATUS_TASK_WORKING.val)
+//                .in(AsnOrder::getId, orders))) {
+//            throw new CoolException("鍑哄簱鍗曟嵁鐘舵�佷慨鏀瑰け璐ワ紒锛�");
+//        }
+//        if (!this.update(new LambdaUpdateWrapper<Wave>().set(Wave::getExceStatus, WaveExceStatus.WAVE_EXCE_STATUS_TASK).in(Wave::getId, ids))) {
+//            throw new CoolException("娉㈡鐘舵�佷慨鏀瑰け璐ワ紒锛�");
+//        }
         return R.ok();
     }
 
@@ -136,15 +135,26 @@
                     .eq(LocItem::getSplrBatch, waveItem.getSplrBatch())
                     .eq(StringUtils.isNotBlank(waveItem.getFieldsIndex()), LocItem::getFieldsIndex, waveItem.getFieldsIndex())
                     .groupBy(LocItem::getMatnrCode, LocItem::getSplrBatch, LocItem::getFieldsIndex, LocItem::getId));
+            List<Double> doubles1 = locItems.stream().map(LocItem::getAnfme).collect(Collectors.toList());
+            double[] doubles = doubles1.stream().mapToDouble(Double::doubleValue).toArray();
 
-            Double[] doubles = locItems.stream().map(LocItem::getAnfme).toArray(Double[]::new);
-            List<Double> result = OptimalAlgorithmUtil.findBestCombination(doubles, waveItem.getAnfme());
-            String locs = JSONArray.toJSONString(new ArrayList<>());
-            if (!locItems.isEmpty()) {
-                List<String> codes = locItems.stream().map(LocItem::getLocCode).collect(Collectors.toList());
-                locs = JSONArray.toJSONString(codes);
+            /**浣跨敤鍥炴函绠楁硶璁$畻锛岃幏鍙栫鍚堝嚭搴撻噺鐨勬渶绠�缁勫悎*/
+            List<Integer> result = OptimalAlgorithmUtil.findCombination(doubles, waveItem.getAnfme());
+            String locs = "[]";
+            if (Objects.isNull(result)) {
+                waveItem.setStockLocs(locs).setStockQty(0.0);
+            } else {
+                /**杩囨护闆嗗悎涓渶绠�鐭殑缁勫悎*/
+                List<LocItem> locsInfo = result.stream()
+                        .filter(i -> i >= 0 && i < locItems.size())
+                        .map(locItems::get).collect(Collectors.toList());
+                locs = JSONArray.toJSONString(locsInfo);
+                double sumQty = locItems.stream().mapToDouble(LocItem::getAnfme).sum();
+                double surQty = locItems.stream().mapToDouble(LocItem::getWorkQty).sum();
+                double qty = locItems.stream().mapToDouble(LocItem::getQty).sum();
+                double v = sumQty - surQty - qty;
+                waveItem.setStockLocs(locs).setStockQty(v);
             }
-            waveItem.setStockLocs(locs);
         });
         return waveItems;
     }

--
Gitblit v1.9.1