ソースを参照

增补运力修复

donglang 1 日 前
コミット
bd0301849d

+ 1 - 1
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/repository/KwcContractLogisticsRepository.java

@@ -127,7 +127,7 @@ public class KwcContractLogisticsRepository extends ServiceImpl<KwcContractLogis
                 .eq(KwcContractLogistics::getDelFlag, 0));
     }
 
-    public List<KwcContractLogistics> queryBycontractIdList(List<Long> ids) {
+    public List<KwcContractLogistics> queryBycontractIdList(Set<Long> ids) {
         return list(Wrappers.<KwcContractLogistics>lambdaQuery()
                 .in(KwcContractLogistics::getId, ids)
                 .eq(KwcContractLogistics::getDispatchWay, 1)

+ 53 - 8
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/service/operateService/KwcContractTradeService.java

@@ -2296,23 +2296,68 @@ public class KwcContractTradeService {
             throw new BusinessPlatfromException(ErrorCodeEnum.PARAM_ERROR, "商品id不能为空!");
         }
 
-        //查询供应商企业物流合同信息
+        //1. 查询供应商企业物流合同信息
         List<KwcContractLogisticsUnit> contractLogisticsUnits = kwcContractLogisticsUnitRepository.queryByEntIdAndType(entId);
         if (CollectionUtils.isEmpty(contractLogisticsUnits)) {
             return Collections.emptyList();
         }
         Set<Long> unitContractIds = contractLogisticsUnits.stream().map(KwcContractLogisticsUnit::getContractId).collect(Collectors.toSet());
 
-        //查询物流商品合同信息
-        List<KwcContractLogisticsGoods> contractLogisticsGoods = kwcContractLogisticsGoodsRepository.queryByLogIdsAndGoodsId(unitContractIds, goodsId);
-        if (CollectionUtils.isEmpty(contractLogisticsGoods)) {
+        //2. 查询手动派车物流合同信息
+        List<KwcContractLogistics> contractLogisticsList = contractLogisticsRepository.queryBycontractIdList(unitContractIds);
+        if (CollectionUtils.isEmpty(contractLogisticsList)) {
             return Collections.emptyList();
         }
-        List<Long> goodContractIds = contractLogisticsGoods.stream().map(KwcContractLogisticsGoods::getContractId).distinct().collect(Collectors.toList());
 
-        //查询自动派车物流合同
-        List<KwcContractLogistics> contractLogisticsList = contractLogisticsRepository.queryBycontractIdList(goodContractIds);
-        return toLogisticsEntDtoVO(entId, contractLogisticsList);
+        // 3. 拆分合同:通用价格>0的直接保留,通用价格=0的需要校验商品id
+        List<Long> validContractIds = new ArrayList<>();
+        List<Long> needCheckGoodsContractIds = new ArrayList<>();
+
+        for (KwcContractLogistics contractLogistics : contractLogisticsList) {
+            if (contractLogistics.getCommonPrice().compareTo(BigDecimal.ZERO) > 0) {
+                //通用价格大于0,无需校验goodsIds
+                validContractIds.add(contractLogistics.getId());
+            } else {
+                // 通用价格=0,需要校验商品
+                needCheckGoodsContractIds.add(contractLogistics.getId());
+            }
+        }
+
+        // 4. 处理需要校验商品的合同ID
+        if (CollectionUtils.isNotEmpty(needCheckGoodsContractIds)) {
+            //查询物流商品合同信息
+            List<KwcContractLogisticsGoods> contractLogisticsGoods = kwcContractLogisticsGoodsRepository.queryByContractIds(unitContractIds);
+            if (CollectionUtils.isNotEmpty(contractLogisticsGoods)) {
+                // 按合同ID分组商品信息
+                Map<Long, List<KwcContractLogisticsGoods>> logisticsGoodsMap = contractLogisticsGoods.stream().collect(Collectors.groupingBy(KwcContractLogisticsGoods::getContractId));
+                for (Long contractId : needCheckGoodsContractIds) {
+                    List<KwcContractLogisticsGoods> logisticsGoodList = logisticsGoodsMap.get(contractId);
+                    // 提取当前合同下的所有商品ID
+                    Set<Long> currentGoodsIds = logisticsGoodList.stream().map(KwcContractLogisticsGoods::getGoodsId).filter(Objects::nonNull).collect(Collectors.toSet());
+                    // 校验目标商品ID是否包含
+                    boolean isContains = currentGoodsIds.contains(goodsId);
+                    if (isContains) {
+                        validContractIds.add(contractId);
+                    }
+                }
+            }
+        }
+        if (CollectionUtils.isEmpty(validContractIds)) {
+            return Collections.emptyList();
+        }
+        //过滤满足商品数据
+        List<KwcContractLogistics> finalContractList = contractLogisticsList.stream()
+                .filter(contract -> validContractIds.contains(contract.getId()))
+                .collect(Collectors.toList());
+
+        //过滤有效期合同
+        List<KwcContractLogistics> filteredLogistics = finalContractList.stream().filter(Objects::nonNull)
+                .filter(con -> con.getStartTime() != null)
+                .filter(con -> {
+                    return !con.getStartTime().after(new Date());
+                }).collect(Collectors.toList());
+
+        return toLogisticsEntDtoVO(entId, filteredLogistics);
     }
 
 

+ 4 - 9
sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTradeOrderService.java

@@ -2599,16 +2599,11 @@ public class KwoTradeOrderService {
         }
         //查询满足手动派单的物流合同
         List<LogisticsEntDtoVO> contractLogisticsList = remoteContractService.queryContractLogOrder(param.getSupEntId(), param.getGoodsId());
-        List<LogisticsEntDtoVO> validContractLog = contractLogisticsList.stream().filter(Objects::nonNull).filter(log -> log.getStartTime() != null && log.getEndTime() != null).filter(log -> {
-            boolean startTimeOk = log.getStartTime().after(kwoTradeOrder.getStartTime());
-            boolean endTimeOk = kwoTradeOrder.getEndTime() == null || log.getEndTime().before(kwoTradeOrder.getEndTime());
-            return startTimeOk && endTimeOk;
-        }).collect(Collectors.toList());
-        if (CollectionUtils.isEmpty(validContractLog)) {
-            throw new BusinessException("未找到该商品有效的自动派车物流合同,请先签订自动派车物流合同");
+        if (CollectionUtils.isEmpty(contractLogisticsList)) {
+            throw new BusinessException("未找到该商品有效的手动派车物流合同");
         }
         //填充运输单价
-        for (LogisticsEntDtoVO vo : validContractLog) {
+        for (LogisticsEntDtoVO vo : contractLogisticsList) {
             LogisticsGoodsDto dto = remoteContractService.queryLogGoodsByContractId(vo.getContractId(), param.getGoodsId());
             if (dto.getPrice() == null || dto.getPrice().compareTo(BigDecimal.ZERO) == 0) {
                 vo.setTransportPrice(vo.getCommonPrice());
@@ -2617,7 +2612,7 @@ public class KwoTradeOrderService {
             }
         }
         List<ContractLogisticsVO> contractLogisticsVOS = new ArrayList<>();
-        for (LogisticsEntDtoVO vo : validContractLog) {
+        for (LogisticsEntDtoVO vo : contractLogisticsList) {
             ContractLogisticsVO logisticsVO = new ContractLogisticsVO();
             logisticsVO.setContractId(vo.getContractId());
             logisticsVO.setContractNo(vo.getContractNo());