Commit b78beaff846b8388b5ad64817960aa9fa019d8d0
1 parent
3a44e4c7
fix: 库存查询接口调整
Showing
3 changed files
with
44 additions
and
45 deletions
src/main/java/com/huaheng/api/mes/domain/MaterialDataQuery.java
... | ... | @@ -7,11 +7,20 @@ import java.util.List; |
7 | 7 | |
8 | 8 | @Data |
9 | 9 | public class MaterialDataQuery { |
10 | + | |
11 | + /** | |
12 | + * 主工单号:MES那边将orderCode放在物料信息中 | |
13 | + */ | |
14 | + private String orderCode; | |
10 | 15 | /** |
11 | 16 | * 物料编码 |
12 | 17 | */ |
13 | 18 | private String materialCode; |
14 | 19 | /** |
20 | + * 是否原材料,true:是,false:否 | |
21 | + */ | |
22 | + private Boolean isMaterial; | |
23 | + /** | |
15 | 24 | * 可用总数量 |
16 | 25 | */ |
17 | 26 | private BigDecimal usableQty; |
... | ... |
src/main/java/com/huaheng/api/mes/domain/MesUnUsableQtyData.java
src/main/java/com/huaheng/api/mes/service/MesServiceImpl.java
... | ... | @@ -63,6 +63,7 @@ import org.springframework.transaction.annotation.Transactional; |
63 | 63 | |
64 | 64 | import javax.annotation.Resource; |
65 | 65 | import java.math.BigDecimal; |
66 | +import java.time.LocalDateTime; | |
66 | 67 | import java.util.*; |
67 | 68 | import java.util.stream.Collectors; |
68 | 69 | |
... | ... | @@ -872,17 +873,16 @@ public class MesServiceImpl implements MesService { |
872 | 873 | public AjaxResultMES searchInventory(MesSearch mesSearch) { |
873 | 874 | List<MaterialDataQuery> mesSearchMaterialDataList = new ArrayList<>(); |
874 | 875 | List<MaterialDataQuery> materialDataList = mesSearch.getMaterialDataList(); |
875 | - String searchOrderCode = mesSearch.getOrderCode(); | |
876 | - String searchShipmentReferCode = mesSearch.getShipmentReferCode(); | |
877 | 876 | for (MaterialDataQuery materialData : materialDataList) { |
878 | 877 | Material material = materialService.getMaterialByCode(materialData.getMaterialCode(), QuantityConstant.DEFAULT_WAREHOUSE); |
879 | 878 | if (material == null) { |
880 | - throw new MesServiceException("根据物料编码" + materialData.getMaterialCode() + "没有找到对应物料信息"); | |
879 | + throw new MesServiceException(StringUtils.format("根据物料编码:{} 没有找到对应物料信息", materialData.getMaterialCode())); | |
881 | 880 | } |
882 | - | |
881 | + // 计算固化时间 | |
883 | 882 | LambdaQueryWrapper<InventoryDetail> inventoryDetailQueryWrapper = Wrappers.lambdaQuery(); |
884 | 883 | inventoryDetailQueryWrapper |
885 | - .eq(InventoryDetail::getMaterialCode, materialData.getMaterialCode()); | |
884 | + .eq(InventoryDetail::getMaterialCode, materialData.getMaterialCode()) | |
885 | + .apply("taskQty != qty AND TIMESTAMPDIFF(HOUR, created, now()) >= solidifyTime"); | |
886 | 886 | // 获取某物料的全部库存 |
887 | 887 | List<InventoryDetail> inventoryDetailList = inventoryDetailService.list(inventoryDetailQueryWrapper); |
888 | 888 | if (StringUtils.isEmpty(inventoryDetailList)) { |
... | ... | @@ -892,57 +892,42 @@ public class MesServiceImpl implements MesService { |
892 | 892 | continue; |
893 | 893 | } |
894 | 894 | // 查询出所有库存 |
895 | - List<Integer> headerIds = inventoryDetailList.stream().map(InventoryDetail::getInventoryHeaderId).distinct().collect(Collectors.toList()); | |
896 | - List<InventoryHeader> inventoryHeaderList = inventoryHeaderService.getByIds(headerIds); | |
895 | + String searchOrderCode = materialData.getOrderCode(); | |
897 | 896 | // 若工单号不为空,则根据工单号过滤 |
898 | 897 | if (StringUtils.isNotEmpty(searchOrderCode)) { |
899 | - inventoryHeaderList = inventoryHeaderList.stream() | |
900 | - .filter(inventoryHeader -> searchOrderCode.equals(inventoryHeader.getOrderCode())) | |
901 | - .collect(Collectors.toList()); | |
902 | - } | |
903 | - // 若领料单不为空,则根据领料单过滤 | |
904 | - if (StringUtils.isNotEmpty(searchShipmentReferCode)) { | |
905 | - inventoryHeaderList = inventoryHeaderList.stream() | |
906 | - .filter(inventoryHeader -> searchShipmentReferCode.equals(inventoryHeader.getShipmentReferCode())) | |
898 | + inventoryDetailList = inventoryDetailList.stream() | |
899 | + .filter(inventoryDetail -> searchOrderCode.equals(inventoryDetail.getOrderCode())) | |
907 | 900 | .collect(Collectors.toList()); |
908 | 901 | } |
909 | 902 | // 查询出的库存 |
910 | - BigDecimal allInventorQty = inventoryHeaderList.stream().map(InventoryHeader::getTotalQty).reduce(BigDecimal.ZERO, BigDecimal::add); | |
911 | - List<MesUnUsableQtyData> mesUnUsableQtyDataList = new ArrayList<>(); | |
912 | - // 可用数量 | |
913 | - BigDecimal usableQty = inventoryHeaderList.stream() | |
914 | - .filter(header -> StringUtils.isEmpty(header.getShipmentReferCode())) | |
915 | - .map(InventoryHeader::getTotalQty) | |
903 | + BigDecimal allInventoryQty = inventoryDetailList.stream() | |
904 | + .map(InventoryDetail::getQty) | |
916 | 905 | .reduce(BigDecimal.ZERO, BigDecimal::add); |
917 | - // 被领料单锁定的数量 | |
918 | - Map<String, List<InventoryHeader>> groupByReferCodeMap = inventoryHeaderList.stream() | |
919 | - .filter(header -> StringUtils.isNotEmpty(header.getShipmentReferCode())) | |
920 | - .collect(Collectors.groupingBy(InventoryHeader::getShipmentReferCode)); | |
921 | - // 领料单不可用数量 | |
922 | - for (Map.Entry<String, List<InventoryHeader>> entry : groupByReferCodeMap.entrySet()) { | |
923 | - String shipmentReferCode = entry.getKey(); | |
924 | - List<InventoryHeader> invHeaderList = entry.getValue(); | |
925 | - BigDecimal shipmentReferLockQty = invHeaderList.stream().map(InventoryHeader::getTotalQty).reduce(BigDecimal.ZERO, BigDecimal::add); | |
906 | + List<MesUnUsableQtyData> mesUnUsableQtyDataList = new ArrayList<>(); | |
907 | + BigDecimal usableQty = BigDecimal.ZERO; | |
908 | + // 根据工单号加领料单号分组,统计每种分组的 不可用数量 | |
909 | + Map<String, List<InventoryDetail>> groupMap = inventoryDetailList.stream() | |
910 | + .filter(inventoryDetail -> StringUtils.isNotEmpty(inventoryDetail.getOrderCode())) | |
911 | + .collect(Collectors.groupingBy(inventoryDetail -> inventoryDetail.getOrderCode() + "_" + StringUtils.nvl(inventoryDetail.getShipmentReferCode(), ""))); | |
912 | + // 工单/领料单 不可用数量 | |
913 | + for (Map.Entry<String, List<InventoryDetail>> entry : groupMap.entrySet()) { | |
914 | + String orderCode = entry.getKey().split("_", -1)[0]; | |
915 | + String shipmentReferCode = entry.getKey().split("_", -1)[1]; | |
916 | + List<InventoryDetail> inventoryDetails = entry.getValue(); | |
917 | + BigDecimal qty = inventoryDetails.stream().map(InventoryDetail::getQty).reduce(BigDecimal.ZERO, BigDecimal::add); | |
918 | + if (StringUtils.isEmpty(shipmentReferCode)) { | |
919 | + usableQty = usableQty.add(qty); | |
920 | + continue; | |
921 | + } | |
926 | 922 | MesUnUsableQtyData mesUnUsableQtyData = new MesUnUsableQtyData(); |
923 | + mesUnUsableQtyData.setOrderCode(orderCode); | |
927 | 924 | mesUnUsableQtyData.setShipmentReferCode(shipmentReferCode); |
928 | - mesUnUsableQtyData.setUnUsableQty(shipmentReferLockQty); | |
929 | - mesUnUsableQtyDataList.add(mesUnUsableQtyData); | |
930 | - } | |
931 | - // 被工单锁定的数量 | |
932 | - Map<String, List<InventoryHeader>> groupByOrderCodeMap = inventoryHeaderList.stream() | |
933 | - .filter(header -> StringUtils.isEmpty(header.getOrderCode())) | |
934 | - .collect(Collectors.groupingBy(InventoryHeader::getOrderCode)); | |
935 | - for (Map.Entry<String, List<InventoryHeader>> entry : groupByOrderCodeMap.entrySet()) { | |
936 | - String orderCode = entry.getKey(); | |
937 | - List<InventoryHeader> invHeaderList = entry.getValue(); | |
938 | - BigDecimal orderCodeLockQty = invHeaderList.stream().map(InventoryHeader::getTotalQty).reduce(BigDecimal.ZERO, BigDecimal::add); | |
939 | - MesUnUsableQtyData mesUnUsableQtyData = new MesUnUsableQtyData(); | |
940 | - mesUnUsableQtyData.setChidOrderCode(orderCode); | |
941 | - mesUnUsableQtyData.setUnUsableQty(orderCodeLockQty); | |
925 | + mesUnUsableQtyData.setUnUsableQty(qty); | |
942 | 926 | mesUnUsableQtyDataList.add(mesUnUsableQtyData); |
927 | + | |
943 | 928 | } |
944 | 929 | materialData.setUsableQty(usableQty); |
945 | - materialData.setUnUsableQty(allInventorQty.subtract(usableQty)); | |
930 | + materialData.setUnUsableQty(allInventoryQty.subtract(usableQty)); | |
946 | 931 | materialData.setMaterialCode(material.getCode()); |
947 | 932 | materialData.setUnUsableQtyDataList(mesUnUsableQtyDataList); |
948 | 933 | mesSearchMaterialDataList.add(materialData); |
... | ... |