From abbe2e07ab97804e0b499fab90599801530f33da Mon Sep 17 00:00:00 2001
From: yiwenpeng <ywp303@163.com>
Date: Thu, 6 Jun 2024 09:14:03 +0800
Subject: [PATCH] feat: 自动出库组盘新增规则:批次管理的物料(存货档案,字段:是否批次="是"),自动组盘时,要求先进先出(参考生产日期,若没有生产日期,看入库日期)

---
 src/main/java/com/huaheng/pc/shipment/shippingCombination/service/ShippingCombinationService.java | 66 ++++++++++++++++++++++++++++++++++++++++--------------------------
 1 file changed, 40 insertions(+), 26 deletions(-)

diff --git a/src/main/java/com/huaheng/pc/shipment/shippingCombination/service/ShippingCombinationService.java b/src/main/java/com/huaheng/pc/shipment/shippingCombination/service/ShippingCombinationService.java
index c146c30..845b91c 100644
--- a/src/main/java/com/huaheng/pc/shipment/shippingCombination/service/ShippingCombinationService.java
+++ b/src/main/java/com/huaheng/pc/shipment/shippingCombination/service/ShippingCombinationService.java
@@ -54,16 +54,19 @@ public class ShippingCombinationService {
 
 
     //根据分配规则查找库存
-    public List<InventoryDetail> getInventorys(ShipmentDetail shipmentDetail, boolean isAuto, boolean isFlatWarehouse, boolean openExhibitionRestrictions) {
+    public List<InventoryDetail> getInventorys(ShipmentDetail shipmentDetail, boolean isAuto, boolean isFlatWarehouse,
+                                               boolean openExhibitionRestrictions) {
         String materialCode = shipmentDetail.getMaterialCode();
-        String noticeNo = shipmentDetail.getNoticeNo();
-        noticeNo = Optional.ofNullable(noticeNo).orElse("");
+        checkNotEmpty(materialCode, "出库明细没有物料编码");
+
+        String noticeNo = Optional.ofNullable(shipmentDetail.getNoticeNo()).orElse("");
         String containerCode = shipmentDetail.getContainerCode();
         String receiptCode = shipmentDetail.getReceiptCode();
-        checkNotEmpty(materialCode, "出库明细没有物料编码");
+
         Material material = getMaterialByCode(materialCode);
         String policy = Optional.ofNullable(material.getPolicy()).orElse("");
-        //String isBatchMaterial = Optional.ofNullable(material.getIsBatch()).orElse("");
+        String isBatchMaterial = Optional.ofNullable(material.getIsBatch()).orElse("");
+
         ShipmentHeader shipmentHeader = shipmentHeaderService.getById(shipmentDetail.getShipmentId());
         String warehouse = shipmentHeader.getWarehouse();
         String color = shipmentHeader.getMaterialColor();
@@ -94,27 +97,38 @@ public class ShippingCombinationService {
         }
 
 
-        //排序:主体颜色加喷漆状态、喷漆状态、主体颜色、喷漆状态(底漆)、无颜色、先进先出
-        String finalNoticeNo1 = noticeNo;
-        return list.stream()
-                .sorted(Comparator.comparing((InventoryDetail detail) -> {
-                    if (StringUtils.isNotEmpty(finalNoticeNo1) && finalNoticeNo1.equals(detail.getNoticeCode())) {
-                        return 1;
-                    } else if (StringUtils.isNotEmpty(color) && StringUtils.isNotEmpty(paintStatus) && color.equals(detail.getMaterialColor()) && paintStatus.equals(detail.getPaintStatus())) {
-                        return 2;
-                    } else if (StringUtils.isNotEmpty(paintStatus) && paintStatus.equals(detail.getPaintStatus())) {
-                        return 3;
-                    } else if (StringUtils.isNotEmpty(color) && color.equals(detail.getMaterialColor())) {
-                        return 4;
-                    } else if ("底漆".equals(detail.getPaintStatus())) {
-                        return 5;
-                    } else if (StringUtils.isEmpty(detail.getMaterialColor())) {
-                        return 6;
-                    } else {
-                        return 7;
-                    }
-                }))
-                .collect(Collectors.toList());
+        // 批次管控的物料,优先按生产日期、创建时间、通知单号、颜色、喷漆状态、入库单号排序
+        if (StringUtils.isNotEmpty(isBatchMaterial) && isBatchMaterial.equals("是")) {
+            list.sort(Comparator.comparing(InventoryDetail::getProductionDate)
+                    .thenComparing(InventoryDetail::getCreated)
+                    .thenComparing(InventoryDetail::getNoticeCode)
+                    .thenComparing(InventoryDetail::getMaterialColor)
+                    .thenComparing(InventoryDetail::getPaintStatus)
+                    .thenComparing(InventoryDetail::getReceiptCode));
+        } else {
+            // 排序:通知单号匹配、主体颜色加喷漆状态、喷漆状态、主体颜色、喷漆状态(底漆)、无颜色、先进先出
+            String finalNoticeNo1 = noticeNo;
+            list.sort(Comparator.comparing((InventoryDetail detail) -> {
+                        if (StringUtils.isNotEmpty(finalNoticeNo1) && finalNoticeNo1.equals(detail.getNoticeCode())) {
+                            return 1;
+                        } else if (StringUtils.isNotEmpty(color) && StringUtils.isNotEmpty(paintStatus) && color.equals(detail.getMaterialColor()) && paintStatus.equals(detail.getPaintStatus())) {
+                            return 2;
+                        } else if (StringUtils.isNotEmpty(paintStatus) && paintStatus.equals(detail.getPaintStatus())) {
+                            return 3;
+                        } else if (StringUtils.isNotEmpty(color) && color.equals(detail.getMaterialColor())) {
+                            return 4;
+                        } else if ("底漆".equals(detail.getPaintStatus())) {
+                            return 5;
+                        } else if (StringUtils.isEmpty(detail.getMaterialColor())) {
+                            return 6;
+                        } else {
+                            return 7;
+                        }
+                    })
+                    .thenComparing(InventoryDetail::getCreated)
+                    .thenComparing(InventoryDetail::getReceiptCode));
+        }
+        return list;
 
 
         //批次管控的物料,出库时优先按,生产日期,先进先出
--
libgit2 0.22.2