Explorar o código

Merge remote-tracking branch 'origin/dev_20251130' into dev_20251130

donglang hai 1 mes
pai
achega
e7db48fe05

+ 7 - 0
sckw-modules-api/sckw-transport-api/src/main/java/com/sckw/transport/api/dubbo/TransportRemoteService.java

@@ -183,4 +183,11 @@ public interface TransportRemoteService {
      * @return 订单列表
      */
     List<KwtLogisticsOrderVO> getLogisticOrderList(OrderFinishParam param);
+
+    /**
+     * 根据物流合同id获取运单
+     * @param logContractIds 物流合同id集合
+     *@return 运单
+     */
+    List<RWaybillSubOrderVo> queryWaybillOrderByLogContractIds(Set<Long> logContractIds);
 }

+ 12 - 0
sckw-modules-api/sckw-transport-api/src/main/java/com/sckw/transport/api/model/vo/RWaybillSubOrderVo.java

@@ -20,6 +20,10 @@ public class RWaybillSubOrderVo implements Serializable {
      * 交易订单
      */
     private Long tradeId;
+    /**
+     * 物流合同id
+     */
+    private Long logContractId;
     private List<BillSubOrder> subOrders;
     private List<LogisticGoodsInfo> logisticGoodsInfos;
 
@@ -59,6 +63,10 @@ public class RWaybillSubOrderVo implements Serializable {
          * 托量单位
          */
         private String unit;
+        /**
+         * 运单状态
+         */
+        private Integer status;
 
         /**
          * 已委托量
@@ -94,6 +102,10 @@ public class RWaybillSubOrderVo implements Serializable {
          * 亏吨扣款
          */
         private BigDecimal deficitPrice;
+        /**
+         * 计费方式
+         */
+        private String billMode;
     }
     @Data
     public static class LogisticGoodsInfo implements Serializable{

+ 95 - 59
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/service/operateService/KwcContractLogisticsService.java

@@ -29,10 +29,7 @@ import com.sckw.core.common.enums.enums.DictTypeEnum;
 import com.sckw.core.exception.BusinessException;
 import com.sckw.core.exception.SystemException;
 import com.sckw.core.model.constant.Global;
-import com.sckw.core.model.enums.ContractStatusEnum;
-import com.sckw.core.model.enums.ContractTrackEnum;
-import com.sckw.core.model.enums.CooperateTypeEnum;
-import com.sckw.core.model.enums.EntTypeEnum;
+import com.sckw.core.model.enums.*;
 import com.sckw.core.model.page.PageHelperUtil;
 import com.sckw.core.model.page.PageResult;
 import com.sckw.core.utils.*;
@@ -50,6 +47,7 @@ import com.sckw.system.api.model.dto.res.EntCacheResDto;
 import com.sckw.system.api.model.dto.res.KwsUserResDto;
 import com.sckw.system.api.model.dto.res.SysDictResDto;
 import com.sckw.system.api.model.dto.res.UserCacheResDto;
+import com.sckw.transport.api.dubbo.TransportRemoteService;
 import com.sckw.transport.api.model.vo.RWaybillSubOrderVo;
 import jakarta.servlet.http.HttpServletResponse;
 import lombok.RequiredArgsConstructor;
@@ -108,6 +106,9 @@ public class KwcContractLogisticsService {
     @DubboReference(version = "1.0.0", group = "design", check = false)
     private GoodsInfoService goodsInfoService;
 
+    @DubboReference(version = "1.0.0", group = "design", check = false)
+    private TransportRemoteService transportRemoteService;
+
     //销售合同
     @Value(value = "${jumpUrl.saleSendContract}")
     private String saleSendContract;
@@ -1115,71 +1116,106 @@ public class KwcContractLogisticsService {
                             Function.identity(), (x, y) -> x));
         }
 
+        // 根据物流合同查询运单
+        List<RWaybillSubOrderVo> rWaybillSubOrderVos = transportRemoteService.queryWaybillOrderByLogContractIds(contractIds);
+        Map<Long, RWaybillSubOrderVo> logTradeOrderIdAndWaybillMap = Maps.newHashMap();
+        if (CollectionUtils.isNotEmpty(rWaybillSubOrderVos)){
+            logTradeOrderIdAndWaybillMap = rWaybillSubOrderVos.stream()
+                    .collect(Collectors.toMap(RWaybillSubOrderVo::getLogContractId, Function.identity(), (x, y) -> x));
+        }
+
         Map<Long, UserCacheResDto> finalLongUserCacheResDtoMap = longUserCacheResDtoMap;
         Map<String, KwcContractLogisticsUnit> finalContractUniTypeAndUnitMap = contractUniTypeAndUnitMap;
         Map<Long, List<KwcContractLogisticsGoods>> finalContractIdAndGoodsMap = contractIdAndGoodsMap;
-        List<QueryLogisticListResp> resp = records.stream().map(r -> {
-            QueryLogisticListResp queryLogisticListResp = new QueryLogisticListResp();
-            queryLogisticListResp.setId(r.getId());
-            queryLogisticListResp.setContractStatus(r.getStatus());
-            queryLogisticListResp.setContractStatusDesc(ContractStatusEnum.getNameByCode(r.getStatus()));
-            KwcContractLogisticsUnit logisticsUnit = finalContractUniTypeAndUnitMap.get(r.getId() + "-" + CooperateTypeEnum.CONSIGN.getCode());
-            if (Objects.nonNull(logisticsUnit)){
-                queryLogisticListResp.setConsignUnit(String.valueOf(logisticsUnit.getEntId()));
-                queryLogisticListResp.setConsignUnitName(logisticsUnit.getFirmName());
-            }
-            KwcContractLogisticsUnit carriageUnit =
-                    finalContractUniTypeAndUnitMap.get(r.getId() + "-" + CooperateTypeEnum.CARRIAGE.getCode());
-            if (Objects.nonNull(carriageUnit)){
-                queryLogisticListResp.setCarriageUnit(String.valueOf(carriageUnit.getEntId()));
-                queryLogisticListResp.setCarriageUnitName(carriageUnit.getFirmName());
-            }
-
-
-            queryLogisticListResp.setContractCode(r.getContractNo());
-            queryLogisticListResp.setContractName(r.getName());
-            queryLogisticListResp.setSignWay(r.getSigningWay());
-            queryLogisticListResp.setSignWayDesc(DictEnum.getLabel(DictTypeEnum.SIGNING_TYPE.getType(),
-                    String.valueOf( r.getSigningWay())));
-            queryLogisticListResp.setContractTransportAmount(Objects.nonNull(r.getAmount())?
-                    r.getAmount().toPlainString():null);
-            queryLogisticListResp.setPerformedAmount(Objects.nonNull(r.getPerformedAmount())
-                    ? r.getPerformedAmount().toPlainString() : null);
-            List<KwcContractLogisticsGoods> goods = finalContractIdAndGoodsMap.get(r.getId());
-            if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(goods)){
-                boolean b = goods.stream().anyMatch(g -> Objects.isNull(g.getAmount()));
-                if (b){
-                    queryLogisticListResp.setContractTransportAmount(null);
-                }else {
-                    BigDecimal totalTransportAmount = goods.stream()
-                            .map(KwcContractLogisticsGoods::getAmount)
-                            .filter(Objects::nonNull)
-                            .reduce(BigDecimal.ZERO, BigDecimal::add);
-                    queryLogisticListResp.setTotalTransportAmount(totalTransportAmount.setScale(2, RoundingMode.HALF_UP).toPlainString());
-                }
-
+        Map<Long, RWaybillSubOrderVo> finalLogTradeOrderIdAndWaybillMap = logTradeOrderIdAndWaybillMap;
+        List<QueryLogisticListResp> resp = records.stream()
+                .map(r -> getQueryLogisticListResp(r, finalContractUniTypeAndUnitMap, finalContractIdAndGoodsMap, finalLongUserCacheResDtoMap, finalLogTradeOrderIdAndWaybillMap))
+                .collect(Collectors.toList());
 
-             }
+        return PageDataResult.of(page, resp);
+    }
 
+    @NotNull
+    private static QueryLogisticListResp getQueryLogisticListResp(KwcContractLogistics r,
+                                                                  Map<String, KwcContractLogisticsUnit> finalContractUniTypeAndUnitMap,
+                                                                  Map<Long, List<KwcContractLogisticsGoods>> finalContractIdAndGoodsMap,
+                                                                  Map<Long, UserCacheResDto> finalLongUserCacheResDtoMap,
+                                                                  Map<Long, RWaybillSubOrderVo> logTradeOrderIdAndWaybillMap) {
+        QueryLogisticListResp queryLogisticListResp = new QueryLogisticListResp();
+        queryLogisticListResp.setId(r.getId());
+        queryLogisticListResp.setContractStatus(r.getStatus());
+        queryLogisticListResp.setContractStatusDesc(ContractStatusEnum.getNameByCode(r.getStatus()));
+        KwcContractLogisticsUnit logisticsUnit = finalContractUniTypeAndUnitMap.get(r.getId() + "-" + CooperateTypeEnum.CONSIGN.getCode());
+        if (Objects.nonNull(logisticsUnit)){
+            queryLogisticListResp.setConsignUnit(String.valueOf(logisticsUnit.getEntId()));
+            queryLogisticListResp.setConsignUnitName(logisticsUnit.getFirmName());
+        }
+        KwcContractLogisticsUnit carriageUnit =
+                finalContractUniTypeAndUnitMap.get(r.getId() + "-" + CooperateTypeEnum.CARRIAGE.getCode());
+        if (Objects.nonNull(carriageUnit)){
+            queryLogisticListResp.setCarriageUnit(String.valueOf(carriageUnit.getEntId()));
+            queryLogisticListResp.setCarriageUnitName(carriageUnit.getFirmName());
+        }
+
+
+        queryLogisticListResp.setContractCode(r.getContractNo());
+        queryLogisticListResp.setContractName(r.getName());
+        queryLogisticListResp.setSignWay(r.getSigningWay());
+        queryLogisticListResp.setSignWayDesc(DictEnum.getLabel(DictTypeEnum.SIGNING_TYPE.getType(),
+                String.valueOf( r.getSigningWay())));
+
+        queryLogisticListResp.setPerformedAmount(Objects.nonNull(r.getPerformedAmount())
+                ? r.getPerformedAmount().toPlainString() : null);
+        List<KwcContractLogisticsGoods> goods = finalContractIdAndGoodsMap.get(r.getId());
+        if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(goods)){
+            boolean b = goods.stream().anyMatch(g -> Objects.isNull(g.getAmount()));
+            if (b){
+                queryLogisticListResp.setContractTransportAmount(null);
+            }else {
+                BigDecimal contractTransportAmount = goods.stream()
+                        .map(KwcContractLogisticsGoods::getAmount)
+                        .filter(Objects::nonNull)
+                        .reduce(BigDecimal.ZERO, BigDecimal::add);
 
-            String startDate = DateUtils.format(r.getStartTime(), DateUtils.DATE_PATTERN);
-            queryLogisticListResp.setStartDate(startDate);
-            String endDate = DateUtils.format(r.getEndTime(), DateUtils.DATE_PATTERN);
-            queryLogisticListResp.setEndDate(org.apache.commons.lang3.StringUtils.equals(endDate,"9999-12-30") ? "": endDate);
-            queryLogisticListResp.setInitiatorId(r.getCreateBy());
-            UserCacheResDto userCacheResDto = finalLongUserCacheResDtoMap.getOrDefault(r.getCreateBy(), new UserCacheResDto());
-            queryLogisticListResp.setInitiator(userCacheResDto.getName());
-            EntCacheResDto entInfo = userCacheResDto.getEntInfo();
-            queryLogisticListResp.setInitiatorUnit(Objects.nonNull(entInfo) ? entInfo.getFirmName() : null);
-            queryLogisticListResp.setInitiatorTime(DateUtils.format(r.getCreateTime(), DateUtils.DATE_TIME_PATTERN));
-            queryLogisticListResp.setRemark(r.getRemark());
+                queryLogisticListResp.setContractTransportAmount(contractTransportAmount.setScale(2, RoundingMode.HALF_UP).toPlainString());
+            }
+         }
+        RWaybillSubOrderVo waybillSubOrderVo = logTradeOrderIdAndWaybillMap.getOrDefault(r.getId(), new RWaybillSubOrderVo());
+        List<RWaybillSubOrderVo.BillSubOrder> subOrders = waybillSubOrderVo.getSubOrders();
+        BigDecimal totalTransportAmount = BigDecimal.ZERO;
+        if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(subOrders)){
+            String billMode = subOrders.get(0).getBillMode();
+            if (org.apache.commons.lang3.StringUtils.equals(billMode, DictEnum.LOAD_UNLOAD_WAY_1.getValue())){
+                totalTransportAmount = subOrders.stream()
+                        .filter(x->Arrays.asList(CarWaybillV1Enum.COMPLETION_LOADING.getCode(),CarWaybillV1Enum.WAIT_UNLOADING.getCode()).contains(x.getStatus()))
+                        .map(RWaybillSubOrderVo.BillSubOrder::getLoadAmount)
+                        .filter(Objects::nonNull)
+                        .reduce(BigDecimal.ZERO, BigDecimal::add);
+            }else {
+                totalTransportAmount = subOrders.stream()
+                        .filter(x->Objects.equals(x.getStatus(), CarWaybillV1Enum.WAIT_UNLOADING.getCode()))
+                        .map(RWaybillSubOrderVo.BillSubOrder::getUnloadAmount)
+                        .filter(Objects::nonNull)
+                        .reduce(BigDecimal.ZERO, BigDecimal::add);
+            }
+            queryLogisticListResp.setTotalTransportAmount(totalTransportAmount.setScale(2, RoundingMode.HALF_UP).toPlainString());
+        }
 
 
+        String startDate = DateUtils.format(r.getStartTime(), DateUtils.DATE_PATTERN);
+        queryLogisticListResp.setStartDate(startDate);
+        String endDate = DateUtils.format(r.getEndTime(), DateUtils.DATE_PATTERN);
+        queryLogisticListResp.setEndDate(org.apache.commons.lang3.StringUtils.equals(endDate,"9999-12-30") ? "": endDate);
+        queryLogisticListResp.setInitiatorId(r.getCreateBy());
+        UserCacheResDto userCacheResDto = finalLongUserCacheResDtoMap.getOrDefault(r.getCreateBy(), new UserCacheResDto());
+        queryLogisticListResp.setInitiator(userCacheResDto.getName());
+        EntCacheResDto entInfo = userCacheResDto.getEntInfo();
+        queryLogisticListResp.setInitiatorUnit(Objects.nonNull(entInfo) ? entInfo.getFirmName() : null);
+        queryLogisticListResp.setInitiatorTime(DateUtils.format(r.getCreateTime(), DateUtils.DATE_TIME_PATTERN));
+        queryLogisticListResp.setRemark(r.getRemark());
 
-            return queryLogisticListResp;
-        }).collect(Collectors.toList());
 
-        return PageDataResult.of(page, resp);
+        return queryLogisticListResp;
     }
 
     @Transactional(rollbackFor = Exception.class)

+ 15 - 4
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/service/operateService/KwcContractTradeService.java

@@ -1651,10 +1651,21 @@ public class KwcContractTradeService {
         BigDecimal unloadQty = BigDecimal.ZERO;
         BigDecimal performedAmountMoney = BigDecimal.ZERO;
         if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(subOrders)){
-            unloadQty = subOrders.stream()
-                    .map(RWaybillSubOrderVo.BillSubOrder::getUnloadAmount)
-                    .filter(Objects::nonNull)
-                    .reduce(BigDecimal.ZERO, BigDecimal::add);
+            if (Objects.equals(t.getUnloadWay(),Integer.parseInt(DictEnum.LOAD_UNLOAD_WAY_1.getValue()))){
+                unloadQty = subOrders.stream()
+                        .filter(x->Arrays.asList(CarWaybillV1Enum.COMPLETION_LOADING.getCode(),CarWaybillV1Enum.WAIT_UNLOADING.getCode())
+                                .contains(x.getStatus()))
+                        .map(RWaybillSubOrderVo.BillSubOrder::getLoadAmount)
+                        .filter(Objects::nonNull)
+                        .reduce(BigDecimal.ZERO, BigDecimal::add);
+            }else {
+                unloadQty = subOrders.stream()
+                        .filter(x->Objects.equals(x.getStatus(),CarWaybillV1Enum.WAIT_UNLOADING.getCode()))
+                        .map(RWaybillSubOrderVo.BillSubOrder::getUnloadAmount)
+                        .filter(Objects::nonNull)
+                        .reduce(BigDecimal.ZERO, BigDecimal::add);
+            }
+
             performedAmountMoney = subOrders.stream()
                     .filter(x -> Objects.nonNull(x.getUnloadAmount()))
                     .map(x -> {

+ 3 - 0
sckw-modules/sckw-system/src/main/java/com/sckw/system/dubbo/RemoteBaseService.java

@@ -64,6 +64,9 @@ public class RemoteBaseService {
 
 
     public KwsEnterpriseResDto queryEnterpriseById(Long id) {
+        if (Objects.isNull(id)) {
+            return null;
+        }
         KwsEnterprise kwsEnterprise = kwsEnterpriseService.queryKwsEnterpriseById(id);
         if (Objects.isNull(kwsEnterprise)) {
             return null;

+ 59 - 2
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/dubbo/TransportServiceImpl.java

@@ -911,7 +911,7 @@ public class TransportServiceImpl implements TransportRemoteService {
                 List<KwtWaybillOrderSubtask> waybillOrderSubtasks = logIdAndSubtasksMap.get(l.getId());
                 if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(waybillOrderSubtasks)) {
                     List<RWaybillSubOrderVo.BillSubOrder> collect = waybillOrderSubtasks.stream()
-                            .map(x -> getRWaybillSubOrderVo(x, goods.getGoodsId()))
+                            .map(x -> getRWaybillSubOrderVo(x, goods.getGoodsId(),null))
                             .collect(Collectors.toList());
                     subOrdersList.addAll(collect);
                 }
@@ -1058,7 +1058,7 @@ public class TransportServiceImpl implements TransportRemoteService {
     }
 
     @NotNull
-    private static RWaybillSubOrderVo.BillSubOrder getRWaybillSubOrderVo(KwtWaybillOrderSubtask subtask,Long goodsId) {
+    private static RWaybillSubOrderVo.BillSubOrder getRWaybillSubOrderVo(KwtWaybillOrderSubtask subtask,Long goodsId,KwtLogisticsOrder logisticsOrder) {
         RWaybillSubOrderVo.BillSubOrder billSubOrder = new RWaybillSubOrderVo.BillSubOrder();
         billSubOrder.setEntId(subtask.getEntId());
         billSubOrder.setLOrderId(subtask.getLOrderId());
@@ -1073,6 +1073,10 @@ public class TransportServiceImpl implements TransportRemoteService {
         billSubOrder.setDeficitAmount(subtask.getDeficitAmount());
         billSubOrder.setDeficitPrice(subtask.getDeficitPrice());
         billSubOrder.setGoodId(goodsId);
+        billSubOrder.setStatus(subtask.getStatus());
+        if (Objects.nonNull(logisticsOrder)) {
+            billSubOrder.setBillMode(logisticsOrder.getBillingMode());
+        }
         return billSubOrder;
     }
 
@@ -1190,6 +1194,59 @@ public class TransportServiceImpl implements TransportRemoteService {
 
     }
 
+    @Override
+    public List<RWaybillSubOrderVo> queryWaybillOrderByLogContractIds(Set<Long> logContractIds) {
+        if (CollectionUtils.isEmpty(logContractIds)){
+            return List.of();
+        }
+        //根据物流合同查询物流id
+        List<KwtLogisticsOrderContract> logisticsOrderContracts = logisticsOrderContractRepository.queryByLogContractIds(logContractIds);
+        if (CollectionUtils.isEmpty(logisticsOrderContracts)){
+            return List.of();
+        }
+        List<Long> logIds = logisticsOrderContracts.stream()
+                .map(KwtLogisticsOrderContract::getLOrderId)
+                .distinct()
+                .collect(Collectors.toList());
+        if (CollectionUtils.isEmpty(logIds)){
+            return List.of();
+        }
+        //查询物流运单
+        List<KwtWaybillOrderSubtask> waybillOrderSubtasks = waybillOrderSubtaskRepository.queryByLogIds(logIds);
+        if (CollectionUtils.isEmpty(waybillOrderSubtasks)){
+            return List.of();
+        }
+        Map<Long, List<KwtWaybillOrderSubtask>> logIdAndWaybillOrderSubtasksMap = waybillOrderSubtasks.stream()
+                .collect(Collectors.groupingBy(KwtWaybillOrderSubtask::getLOrderId));
+        //查询物流 订单
+        List<KwtLogisticsOrder> logOrders = logisticsOrderRepository.queryByLogisticsOrderIds(logIds);
+        if (CollectionUtils.isEmpty(logOrders)){
+            return List.of();
+        }
+        Map<Long, KwtLogisticsOrder> logIdAndLogOrderMap = logOrders.stream()
+                .collect(Collectors.toMap(KwtLogisticsOrder::getId, Function.identity(), (x, y) -> x));
+        //查询物流订单和的商品关系
+        List<KwtLogisticsOrderGoods> logOrderGoods = logisticsOrderGoodsRepository.queryByLogIds(logIds);
+        Map<Long, KwtLogisticsOrderGoods> logisticsOrderGoodsMap = Maps.newHashMap();
+        if (CollectionUtils.isNotEmpty(logOrderGoods)){
+            logisticsOrderGoodsMap = logOrderGoods.stream()
+                    .collect(Collectors.toMap(KwtLogisticsOrderGoods::getLOrderId, Function.identity(), (x, y) -> x));
+        }
+        Map<Long, KwtLogisticsOrderGoods> finalLogisticsOrderGoodsMap = logisticsOrderGoodsMap;
+        return logisticsOrderContracts.stream().map(x->{
+            RWaybillSubOrderVo rWaybillSubOrderVo = new RWaybillSubOrderVo();
+            rWaybillSubOrderVo.setLogContractId(x.getContractId());
+            KwtLogisticsOrder logisticsOrder = logIdAndLogOrderMap.getOrDefault(x.getLOrderId(), new KwtLogisticsOrder());
+            KwtLogisticsOrderGoods goods = finalLogisticsOrderGoodsMap.getOrDefault(x.getLOrderId(), new KwtLogisticsOrderGoods());
+           List<KwtWaybillOrderSubtask> subtasks = logIdAndWaybillOrderSubtasksMap.getOrDefault(x.getLOrderId(), new ArrayList<>());
+            subtasks.stream()
+                    .map(s -> getRWaybillSubOrderVo(s, goods.getGoodsId(),logisticsOrder))
+                            .collect(Collectors.toList());
+            return rWaybillSubOrderVo;
+        }).collect(Collectors.toList());
+
+    }
+
     @NotNull
     private static AddLogisticOrderDTO getAddLogisticOrderDTO(AddLogisticOrderParam param) {
         AddLogisticOrderDTO addLogisticOrderDTO = new AddLogisticOrderDTO();

+ 4 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/repository/KwtLogisticsOrderContractRepository.java

@@ -37,4 +37,8 @@ public class KwtLogisticsOrderContractRepository extends ServiceImpl<KwtLogistic
                 .eq(KwtLogisticsOrderContract::getDelFlag,0)
                 .eq(KwtLogisticsOrderContract::getContractId,contractId));
     }
+
+    public List<KwtLogisticsOrderContract> queryByLogContractIds(Set<Long> logContractIds) {
+        return null;
+    }
 }