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; //批次管控的物料,出库时优先按,生产日期,先进先出