Commit abbe2e07ab97804e0b499fab90599801530f33da

Authored by 易文鹏
1 parent c8c80de7

feat: 自动出库组盘新增规则:批次管理的物料(存货档案,字段:是否批次="是"),自动组盘时,要求先进先出(参考生产日期,若没有生产日期,看入库日期)

src/main/java/com/huaheng/pc/shipment/shippingCombination/service/ShippingCombinationService.java
... ... @@ -54,16 +54,19 @@ public class ShippingCombinationService {
54 54  
55 55  
56 56 //根据分配规则查找库存
57   - public List<InventoryDetail> getInventorys(ShipmentDetail shipmentDetail, boolean isAuto, boolean isFlatWarehouse, boolean openExhibitionRestrictions) {
  57 + public List<InventoryDetail> getInventorys(ShipmentDetail shipmentDetail, boolean isAuto, boolean isFlatWarehouse,
  58 + boolean openExhibitionRestrictions) {
58 59 String materialCode = shipmentDetail.getMaterialCode();
59   - String noticeNo = shipmentDetail.getNoticeNo();
60   - noticeNo = Optional.ofNullable(noticeNo).orElse("");
  60 + checkNotEmpty(materialCode, "出库明细没有物料编码");
  61 +
  62 + String noticeNo = Optional.ofNullable(shipmentDetail.getNoticeNo()).orElse("");
61 63 String containerCode = shipmentDetail.getContainerCode();
62 64 String receiptCode = shipmentDetail.getReceiptCode();
63   - checkNotEmpty(materialCode, "出库明细没有物料编码");
  65 +
64 66 Material material = getMaterialByCode(materialCode);
65 67 String policy = Optional.ofNullable(material.getPolicy()).orElse("");
66   - //String isBatchMaterial = Optional.ofNullable(material.getIsBatch()).orElse("");
  68 + String isBatchMaterial = Optional.ofNullable(material.getIsBatch()).orElse("");
  69 +
67 70 ShipmentHeader shipmentHeader = shipmentHeaderService.getById(shipmentDetail.getShipmentId());
68 71 String warehouse = shipmentHeader.getWarehouse();
69 72 String color = shipmentHeader.getMaterialColor();
... ... @@ -94,27 +97,38 @@ public class ShippingCombinationService {
94 97 }
95 98  
96 99  
97   - //排序:主体颜色加喷漆状态、喷漆状态、主体颜色、喷漆状态(底漆)、无颜色、先进先出
98   - String finalNoticeNo1 = noticeNo;
99   - return list.stream()
100   - .sorted(Comparator.comparing((InventoryDetail detail) -> {
101   - if (StringUtils.isNotEmpty(finalNoticeNo1) && finalNoticeNo1.equals(detail.getNoticeCode())) {
102   - return 1;
103   - } else if (StringUtils.isNotEmpty(color) && StringUtils.isNotEmpty(paintStatus) && color.equals(detail.getMaterialColor()) && paintStatus.equals(detail.getPaintStatus())) {
104   - return 2;
105   - } else if (StringUtils.isNotEmpty(paintStatus) && paintStatus.equals(detail.getPaintStatus())) {
106   - return 3;
107   - } else if (StringUtils.isNotEmpty(color) && color.equals(detail.getMaterialColor())) {
108   - return 4;
109   - } else if ("底漆".equals(detail.getPaintStatus())) {
110   - return 5;
111   - } else if (StringUtils.isEmpty(detail.getMaterialColor())) {
112   - return 6;
113   - } else {
114   - return 7;
115   - }
116   - }))
117   - .collect(Collectors.toList());
  100 + // 批次管控的物料,优先按生产日期、创建时间、通知单号、颜色、喷漆状态、入库单号排序
  101 + if (StringUtils.isNotEmpty(isBatchMaterial) && isBatchMaterial.equals("是")) {
  102 + list.sort(Comparator.comparing(InventoryDetail::getProductionDate)
  103 + .thenComparing(InventoryDetail::getCreated)
  104 + .thenComparing(InventoryDetail::getNoticeCode)
  105 + .thenComparing(InventoryDetail::getMaterialColor)
  106 + .thenComparing(InventoryDetail::getPaintStatus)
  107 + .thenComparing(InventoryDetail::getReceiptCode));
  108 + } else {
  109 + // 排序:通知单号匹配、主体颜色加喷漆状态、喷漆状态、主体颜色、喷漆状态(底漆)、无颜色、先进先出
  110 + String finalNoticeNo1 = noticeNo;
  111 + list.sort(Comparator.comparing((InventoryDetail detail) -> {
  112 + if (StringUtils.isNotEmpty(finalNoticeNo1) && finalNoticeNo1.equals(detail.getNoticeCode())) {
  113 + return 1;
  114 + } else if (StringUtils.isNotEmpty(color) && StringUtils.isNotEmpty(paintStatus) && color.equals(detail.getMaterialColor()) && paintStatus.equals(detail.getPaintStatus())) {
  115 + return 2;
  116 + } else if (StringUtils.isNotEmpty(paintStatus) && paintStatus.equals(detail.getPaintStatus())) {
  117 + return 3;
  118 + } else if (StringUtils.isNotEmpty(color) && color.equals(detail.getMaterialColor())) {
  119 + return 4;
  120 + } else if ("底漆".equals(detail.getPaintStatus())) {
  121 + return 5;
  122 + } else if (StringUtils.isEmpty(detail.getMaterialColor())) {
  123 + return 6;
  124 + } else {
  125 + return 7;
  126 + }
  127 + })
  128 + .thenComparing(InventoryDetail::getCreated)
  129 + .thenComparing(InventoryDetail::getReceiptCode));
  130 + }
  131 + return list;
118 132  
119 133  
120 134 //批次管控的物料,出库时优先按,生产日期,先进先出
... ...