From 5f2bb7dd02cce1696dcc37d9591830864509eb27 Mon Sep 17 00:00:00 2001
From: Junjie <fallin.jie@qq.com>
Date: 星期五, 19 九月 2025 16:43:10 +0800
Subject: [PATCH] #

---
 src/main/java/com/zy/asrs/controller/OutController.java |  115 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 114 insertions(+), 1 deletions(-)

diff --git a/src/main/java/com/zy/asrs/controller/OutController.java b/src/main/java/com/zy/asrs/controller/OutController.java
index a03e8db..ad89948 100644
--- a/src/main/java/com/zy/asrs/controller/OutController.java
+++ b/src/main/java/com/zy/asrs/controller/OutController.java
@@ -12,6 +12,8 @@
 import com.zy.common.model.TaskDto;
 import com.zy.common.web.BaseController;
 import com.zy.system.entity.User;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
@@ -20,6 +22,9 @@
 
 import javax.annotation.Resource;
 import java.math.BigDecimal;
+import java.text.SimpleDateFormat;
+import java.time.LocalDate;
+import java.time.ZoneId;
 import java.util.*;
 import java.util.stream.Collectors;
 
@@ -30,6 +35,7 @@
 @RestController
 public class OutController extends BaseController {
 
+    private static final Logger log = LoggerFactory.getLogger(OutController.class);
     @Autowired
     private OrderService orderService;
     @Autowired
@@ -65,7 +71,11 @@
         if (Cools.isEmpty(ids)) {
             return R.parse(BaseRes.PARAM);
         }
-        String cstateid = param.getOrDefault("cstateid", "").toString();
+        String cstateid = null;
+        Object cstateidObj = param.get("cstateid");
+        if (!Cools.isEmpty(cstateidObj)) {
+            cstateid = String.valueOf(cstateidObj);
+        }
 
         List<OrderDetlPakout> orderDetlPakouts = orderDetlPakoutService.selectBatchIds(ids);
 
@@ -153,11 +163,114 @@
                 }
                 List<LocDetl> locDetls = locDetlService.queryStockAll(null, exist, orderDetl.getMatnr(), orderDetl.getBatch(),
                         orderDetl.getBrand(), orderDetl.getStandby1(), orderDetl.getStandby2(), orderDetl.getStandby3(), orderDetl.getBoxType1(), orderDetl.getBoxType2(), orderDetl.getBoxType3(), cstateid);
+
+                HashMap<String, Double> locAnfmeMap = new HashMap<>();
+                HashMap<String, Date> locTimeMap = new HashMap<>();
+                HashMap<String, List<LocDetl>> map = new HashMap<>();
                 for (LocDetl locDetl : locDetls) {
                     if (disableCstateidList.contains(locDetl.getCstateid())) {
                         continue;
                     }
 
+                    if (map.containsKey(locDetl.getLocNo())) {
+                        List<LocDetl> list = map.get(locDetl.getLocNo());
+                        list.add(locDetl);
+                        map.put(locDetl.getLocNo(), list);
+
+                        Double originAnfme = locAnfmeMap.get(locDetl.getLocNo());
+                        originAnfme += locDetl.getAnfme();
+                        locAnfmeMap.put(locDetl.getLocNo(), originAnfme);
+                    }else {
+                        List<LocDetl> list = new ArrayList<>();
+                        list.add(locDetl);
+                        map.put(locDetl.getLocNo(), list);
+                        locAnfmeMap.put(locDetl.getLocNo(), locDetl.getAnfme());
+                        locTimeMap.put(locDetl.getLocNo(), locDetl.getAppeTime());
+                    }
+                }
+
+                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+                // 浣跨敤 TreeMap锛堣嚜鍔ㄦ寜 key 鍗囧簭鎺掑簭锛�
+                Map<String, List<Map.Entry<String, Date>>> sortedByDayAsc = locTimeMap.entrySet()
+                        .stream()
+                        .collect(Collectors.groupingBy(
+                                entry -> sdf.format(entry.getValue()),
+                                TreeMap::new, // 鑷姩鎸夐敭锛堟棩鏈燂級鍗囧簭鎺掑簭
+                                Collectors.toList()
+                        ));
+
+                //鏈尮閰嶄笂鏁存墭搴撳瓨
+                HashMap<String, Double> lessMap = new HashMap<>();
+
+                List<LocDetl> allLoc = new ArrayList<>();
+                List<LocDetl> lessLoc = new ArrayList<>();
+
+//                //浼樺厛鎵炬暣鎵�
+//                for (Map.Entry<String, List<Map.Entry<String, Date>>> listEntry : sortedByDayAsc.entrySet()) {
+//                    for (Map.Entry<String, Date> dateEntry : listEntry.getValue()) {
+//                        if (issued <= 0) {
+//                            break;
+//                        }
+//                        String locNo = dateEntry.getKey();
+//                        Double anfme = locAnfmeMap.get(locNo);
+//                        if(anfme > orderDetl.getAnfme()) {
+//                            lessMap.put(locNo, anfme);
+//                            continue;
+//                        }
+//                        List<LocDetl> list = map.get(locNo);
+//                        allLoc.addAll(list);
+//
+//                        // 鍓╀綑寰呭嚭鏁伴噺閫掑噺
+//                        issuedBigDecimal = issuedBigDecimal.subtract(BigDecimal.valueOf(anfme));
+//                        issued = issuedBigDecimal.doubleValue();
+//                    }
+//                }
+//
+//                if(issued > 0) {
+//                    //闆舵暎鎼滅储
+//                    for (Map.Entry<String, Double> entry : lessMap.entrySet()) {
+//                        if (issued <= 0) {
+//                            break;
+//                        }
+//
+//                        String locNo = entry.getKey();
+//                        Double anfme = entry.getValue();
+//                        if (anfme >= issued) {
+//                            List<LocDetl> list = map.get(locNo);
+//                            lessLoc.addAll(list);
+//                            // 鍓╀綑寰呭嚭鏁伴噺閫掑噺
+//                            issuedBigDecimal = issuedBigDecimal.subtract(BigDecimal.valueOf(anfme));
+//                            issued = issuedBigDecimal.doubleValue();
+//                        }
+//                    }
+//                }
+//                allLoc.addAll(lessLoc);
+
+                //蹇呴』鎶婂綋澶╁簱瀛樼敤瀹�
+                for (Map.Entry<String, List<Map.Entry<String, Date>>> listEntry : sortedByDayAsc.entrySet()) {
+                    for (Map.Entry<String, Date> dateEntry : listEntry.getValue()) {
+                        if (issued <= 0) {
+                            break;
+                        }
+                        String locNo = dateEntry.getKey();
+                        Double anfme = locAnfmeMap.get(locNo);
+
+                        List<LocDetl> list = map.get(locNo);
+                        allLoc.addAll(list);
+
+                        // 鍓╀綑寰呭嚭鏁伴噺閫掑噺
+                        issuedBigDecimal = issuedBigDecimal.subtract(BigDecimal.valueOf(anfme));
+                        issued = issuedBigDecimal.doubleValue();
+                    }
+                }
+
+                issuedBigDecimal = Optional.of(BigDecimal.valueOf(orderDetl.getAnfme()).subtract(BigDecimal.valueOf(orderDetl.getWorkQty()))).orElse(new BigDecimal(0));
+                issued = issuedBigDecimal.doubleValue();
+                for (LocDetl locDetl : allLoc) {
+                    if (disableCstateidList.contains(locDetl.getCstateid())) {
+                        continue;
+                    }
+
                     if (issued > 0) {
                         LocDto locDto = new LocDto(locDetl.getLocNo(), locDetl.getMatnr(), locDetl.getMaktx(), locDetl.getBatch(), orderDetl.getOrderNo(),
                                 issued >= locDetl.getAnfme() ? locDetl.getAnfme() : issued);

--
Gitblit v1.9.1