chenxiaofei 10 часов назад
Родитель
Сommit
afb1f0f9da

+ 34 - 0
sckw-modules-api/sckw-transport-api/src/main/java/com/sckw/transport/api/feign/TransportStatisticsFeignService.java

@@ -0,0 +1,34 @@
+package com.sckw.transport.api.feign;
+
+import com.sckw.core.web.response.BaseResult;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+/**
+ * 运输统计远程调用 Feign 客户端。
+ */
+@FeignClient(name = "sckw-ng-transport", contextId = "transportStatisticsFeignService")
+public interface TransportStatisticsFeignService {
+
+    /**
+     * 按时间范围汇总贸易订单已完成运单的完成量。
+     *
+     * @param tradeOrderId 贸易订单ID
+     * @param chargeType   计费方式:1-装货量,2-卸货量
+     * @param startTime    开始时间
+     * @param endTime      结束时间
+     * @return 完成量
+     */
+    @GetMapping("/transport/statistics/remote/sum-completed-waybill-volume")
+    BaseResult<BigDecimal> sumCompletedWaybillVolumeByTimeRange(@RequestParam("tradeOrderId") Long tradeOrderId,
+                                                                @RequestParam("chargeType") Integer chargeType,
+                                                                @RequestParam(value = "startTime", required = false)
+                                                                @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) LocalDateTime startTime,
+                                                                @RequestParam(value = "endTime", required = false)
+                                                                @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) LocalDateTime endTime);
+}

+ 26 - 6
sckw-modules/sckw-order/src/main/java/com/sckw/order/serivce/KwoTradeOrderService.java

@@ -84,6 +84,7 @@ import com.sckw.system.api.model.dto.res.*;
 import com.sckw.transport.api.dubbo.TransportRemoteStatisticsService;
 import com.sckw.transport.api.dubbo.TransportRemoteStatisticsService;
 import com.sckw.transport.api.dubbo.TransportRemoteService;
 import com.sckw.transport.api.dubbo.TransportRemoteService;
 import com.sckw.transport.api.feign.ParkingWalletFeeFeignService;
 import com.sckw.transport.api.feign.ParkingWalletFeeFeignService;
+import com.sckw.transport.api.feign.TransportStatisticsFeignService;
 import com.sckw.transport.api.model.param.AddLogisticOrderParam;
 import com.sckw.transport.api.model.param.AddLogisticOrderParam;
 import com.sckw.transport.api.model.param.LogisticInfo;
 import com.sckw.transport.api.model.param.LogisticInfo;
 import com.sckw.transport.api.model.param.OrderFinishParam;
 import com.sckw.transport.api.model.param.OrderFinishParam;
@@ -190,6 +191,7 @@ public class KwoTradeOrderService {
     private final KwoTradeOrderAmountService tradeOrderAmountService;
     private final KwoTradeOrderAmountService tradeOrderAmountService;
     private final KwoTradeOrderTransportService kwoTradeOrderTransportService;
     private final KwoTradeOrderTransportService kwoTradeOrderTransportService;
     private final KwoTradeOrderUnitRepository kwoTradeOrderUnitRepository;
     private final KwoTradeOrderUnitRepository kwoTradeOrderUnitRepository;
+    private final TransportStatisticsFeignService transportStatisticsFeignService;
     @Resource
     @Resource
     private KwoTradeOrderGoodsMapper kwoTradeOrderGoodsMapper;
     private KwoTradeOrderGoodsMapper kwoTradeOrderGoodsMapper;
     @Resource
     @Resource
@@ -2166,9 +2168,10 @@ public class KwoTradeOrderService {
     private BigDecimal getCompletedWaybillVolume(Long tOrderId, Integer chargeType,
     private BigDecimal getCompletedWaybillVolume(Long tOrderId, Integer chargeType,
                                                  LocalDateTime startTime, LocalDateTime endTime) {
                                                  LocalDateTime startTime, LocalDateTime endTime) {
         try {
         try {
-            return Optional.ofNullable(transportRemoteStatisticsService.sumCompletedWaybillVolumeByTimeRange(
-                            tOrderId, chargeType, startTime, endTime))
-                    .orElse(BigDecimal.ZERO);
+            return resolveTransportStatisticsFeignResult(
+                    transportStatisticsFeignService.sumCompletedWaybillVolumeByTimeRange(
+                            tOrderId, chargeType, startTime, endTime),
+                    "查询贸易订单运单完成量");
         } catch (Exception e) {
         } catch (Exception e) {
             log.error("查询贸易订单运单完成量失败,tOrderId={}, chargeType={}, startTime={}, endTime={}",
             log.error("查询贸易订单运单完成量失败,tOrderId={}, chargeType={}, startTime={}, endTime={}",
                     tOrderId, chargeType, startTime, endTime, e);
                     tOrderId, chargeType, startTime, endTime, e);
@@ -3446,6 +3449,22 @@ public class KwoTradeOrderService {
         return result.getData();
         return result.getData();
     }
     }
 
 
+    /**
+     * 解析运输统计 Feign 调用结果,完成量为 0 时按 0 处理。
+     */
+    private BigDecimal resolveTransportStatisticsFeignResult(BaseResult<BigDecimal> result, String operationName) {
+        if (result == null) {
+            log.error("{}失败,运输统计Feign响应为空", operationName);
+            throw new BusinessException(operationName + "失败,运输统计响应为空");
+        }
+        if (result.getCode() != HttpStatus.SUCCESS_CODE) {
+            log.error("{}失败,运输统计Feign返回失败,code:{},message:{}",
+                    operationName, result.getCode(), result.getMessage());
+            throw new BusinessException(operationName + "失败:" + result.getMessage());
+        }
+        return Optional.ofNullable(result.getData()).orElse(BigDecimal.ZERO);
+    }
+
     @NotNull
     @NotNull
     private List<LogisticsEntDtoVO> checkAutoContractLogOrder(Map<String, KwoTradeOrderUnit> unitMap, KwoTradeOrderGoods byOrderId, TradeContractResDto tradeContractResDto) {
     private List<LogisticsEntDtoVO> checkAutoContractLogOrder(Map<String, KwoTradeOrderUnit> unitMap, KwoTradeOrderGoods byOrderId, TradeContractResDto tradeContractResDto) {
         KwoTradeOrderUnit tradeOrderUnit = unitMap.get(String.valueOf(Global.NUMERICAL_TWO));
         KwoTradeOrderUnit tradeOrderUnit = unitMap.get(String.valueOf(Global.NUMERICAL_TWO));
@@ -3674,9 +3693,10 @@ public class KwoTradeOrderService {
      */
      */
     private BigDecimal queryTransportNetWeight(KwoTradeOrder order) {
     private BigDecimal queryTransportNetWeight(KwoTradeOrder order) {
         try {
         try {
-            return Optional.ofNullable(transportRemoteStatisticsService.sumCompletedWaybillVolumeByTimeRange(
-                            order.getId(), order.getChargeType(), null, null))
-                    .orElse(BigDecimal.ZERO);
+            return resolveTransportStatisticsFeignResult(
+                    transportStatisticsFeignService.sumCompletedWaybillVolumeByTimeRange(
+                            order.getId(), order.getChargeType(), null, null),
+                    "查询贸易订单运输净重量");
         } catch (Exception e) {
         } catch (Exception e) {
             log.error("查询贸易订单运输净重量失败,订单ID:{}, 订单号:{}, 计费方式:{}",
             log.error("查询贸易订单运输净重量失败,订单ID:{}, 订单号:{}, 计费方式:{}",
                     order.getId(), order.getTOrderNo(), order.getChargeType(), e);
                     order.getId(), order.getTOrderNo(), order.getChargeType(), e);

+ 46 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/TransportStatisticsRemoteController.java

@@ -0,0 +1,46 @@
+package com.sckw.transport.controller;
+
+import com.sckw.core.web.response.BaseResult;
+import com.sckw.transport.api.dubbo.TransportRemoteStatisticsService;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+/**
+ * 运输统计远程调用接口。
+ */
+@Slf4j
+@RestController
+@RequestMapping("/transport/statistics")
+@RequiredArgsConstructor
+public class TransportStatisticsRemoteController {
+
+    private final TransportRemoteStatisticsService transportRemoteStatisticsService;
+
+    /**
+     * 按时间范围汇总贸易订单已完成运单的完成量。
+     */
+    @GetMapping("/remote/sum-completed-waybill-volume")
+    public BaseResult<BigDecimal> sumCompletedWaybillVolumeByTimeRange(@RequestParam("tradeOrderId") Long tradeOrderId,
+                                                                       @RequestParam("chargeType") Integer chargeType,
+                                                                       @RequestParam(value = "startTime", required = false)
+                                                                       @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) LocalDateTime startTime,
+                                                                       @RequestParam(value = "endTime", required = false)
+                                                                       @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) LocalDateTime endTime) {
+        try {
+            return BaseResult.success(transportRemoteStatisticsService.sumCompletedWaybillVolumeByTimeRange(
+                    tradeOrderId, chargeType, startTime, endTime));
+        } catch (Exception e) {
+            log.error("Feign调用汇总已完成运单完成量失败,tradeOrderId:{},chargeType:{},startTime:{},endTime:{}",
+                    tradeOrderId, chargeType, startTime, endTime, e);
+            return BaseResult.failed(e.getMessage());
+        }
+    }
+}

+ 2 - 1
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/ParkingWalletFeeService.java

@@ -302,7 +302,8 @@ public class ParkingWalletFeeService {
                 .le(param.getMaxFee() != null, KwtParkingWalletFeeBalance::getTradeAmount, param.getMaxFee())
                 .le(param.getMaxFee() != null, KwtParkingWalletFeeBalance::getTradeAmount, param.getMaxFee())
                 .ge(param.getStartCreateTime() != null, KwtParkingWalletFeeBalance::getCreateTime, param.getStartCreateTime())
                 .ge(param.getStartCreateTime() != null, KwtParkingWalletFeeBalance::getCreateTime, param.getStartCreateTime())
                 .le(param.getEndCreateTime() != null, KwtParkingWalletFeeBalance::getCreateTime, param.getEndCreateTime())
                 .le(param.getEndCreateTime() != null, KwtParkingWalletFeeBalance::getCreateTime, param.getEndCreateTime())
-                .orderByDesc(KwtParkingWalletFeeBalance::getCreateTime);
+                .orderByDesc(KwtParkingWalletFeeBalance::getCreateTime)
+                .orderByDesc(KwtParkingWalletFeeBalance::getId);
     }
     }
 
 
     /**
     /**