Commit b78beaff846b8388b5ad64817960aa9fa019d8d0

Authored by pengyongcheng
1 parent 3a44e4c7

fix: 库存查询接口调整

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
... ... @@ -9,6 +9,11 @@ import java.math.BigDecimal;
9 9 */
10 10 @Data
11 11 public class MesUnUsableQtyData {
  12 +
  13 + /**
  14 + * 主工单号
  15 + */
  16 + private String orderCode;
12 17 /**
13 18 * 日工单号
14 19 */
... ...
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);
... ...