瀏覽代碼

提交物流运单列表新增实际运费字段

chenxiaofei 5 月之前
父節點
當前提交
284c4ec7f7

+ 49 - 0
sckw-common/sckw-common-core/src/main/java/com/sckw/core/utils/ParallelQueryExecutor.java

@@ -0,0 +1,49 @@
+package com.sckw.core.utils;
+
+
+import com.sckw.core.exception.BusinessException;
+import lombok.extern.slf4j.Slf4j;
+
+import java.util.Map;
+import java.util.concurrent.*;
+import java.util.function.Supplier;
+import java.util.stream.Collectors;
+
+// 创建并行任务管理器类
+@Slf4j
+public class ParallelQueryExecutor {
+    private final Map<String, CompletableFuture<?>> futures = new ConcurrentHashMap<>();
+    
+    public <T> CompletableFuture<T> addTask(String taskName, Supplier<T> supplier, Executor executor) {
+        CompletableFuture<T> future = CompletableFuture.supplyAsync(supplier, executor)
+            .exceptionally(e -> {
+                log.error("并行任务执行失败: {}", taskName, e);
+                return null; // 或根据业务返回默认值
+            });
+        futures.put(taskName, future);
+        return future;
+    }
+    
+    public void awaitAll(long timeout, TimeUnit unit) {
+        CompletableFuture<?>[] futureArray = futures.values().toArray(new CompletableFuture[0]);
+        try {
+            CompletableFuture.allOf(futureArray).get(timeout, unit);
+        } catch (TimeoutException e) {
+            log.warn("并行查询超时,已完成任务: {}", 
+                futures.entrySet().stream()
+                    .filter(entry -> entry.getValue().isDone())
+                    .map(Map.Entry::getKey)
+                    .collect(Collectors.toList()));
+            throw new BusinessException("查询超时");
+        } catch (Exception e) {
+            throw new BusinessException("查询失败");
+        }
+    }
+    
+    @SuppressWarnings("unchecked")
+    public <T> T getResult(String taskName) {
+        CompletableFuture<T> future = (CompletableFuture<T>) futures.get(taskName);
+        return future != null ? future.join() : null;
+    }
+
+}

+ 3 - 0
sckw-modules-api/sckw-contract-api/src/main/java/com/sckw/contract/api/RemoteContractService.java

@@ -7,6 +7,7 @@ import java.math.BigDecimal;
 import java.time.LocalDateTime;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 import java.util.concurrent.CompletionStage;
 
 /**
@@ -141,4 +142,6 @@ public interface RemoteContractService {
     KwcContractLogisticsDto findLogContractByEntId(Long entId);
 
     TradeContractGoodsDto queryContractGoodsByContractId(Long contractId, Long goodsId);
+
+    List<TradeContractGoodsDto> queryContractGoodsByContractIds(Set<Long> contractIds, Set<Long> goodsIds);
 }

+ 2 - 0
sckw-modules-api/sckw-contract-api/src/main/java/com/sckw/contract/api/model/vo/TradeContractGoodsDto.java

@@ -12,6 +12,8 @@ public class TradeContractGoodsDto implements Serializable {
 
     @Serial
     private static final long serialVersionUID = 2656035411576510101L;
+    private Long contractId;
+    private Long goodsId;
 
     private BigDecimal price;
 

+ 2 - 0
sckw-modules-api/sckw-order-api/src/main/java/com/sckw/order/api/dubbo/TradeOrderInfoService.java

@@ -158,4 +158,6 @@ public interface TradeOrderInfoService {
     List<TradeOrderContractVo> queryByTradeContactIds(Set<Long> tradeContractIds);
 
     TradeOrderContractVo queryByContractByTradeOrderId(Long tOrderId);
+
+    List<TradeOrderContractVo>  queryTradeOrderIds(Set<Long> tradeOrderIds);
 }

+ 15 - 0
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/dubbo/RemoteContractServiceImpl.java

@@ -487,5 +487,20 @@ public class RemoteContractServiceImpl implements RemoteContractService {
 
     }
 
+    @Override
+    public List<TradeContractGoodsDto> queryContractGoodsByContractIds(Set<Long> contractIds, Set<Long> goodsIds) {
+        List<KwcContractTradeGoods> contractTradeGoods = kwcContractTradeGoodsRepository.queryByContractIdsAndGoodsIds(contractIds, goodsIds);
+        if(Objects.isNull(contractTradeGoods)){
+            return List.of();
+        }
+       return contractTradeGoods.stream().map(contractTrade -> {
+            TradeContractGoodsDto tradeContractGoodsDto = new TradeContractGoodsDto();
+            tradeContractGoodsDto.setContractId(contractTrade.getContractId());
+            tradeContractGoodsDto.setGoodsId(contractTrade.getGoodsId());
+            tradeContractGoodsDto.setPrice(contractTrade.getPrice());
+            return tradeContractGoodsDto;
+        }).collect(Collectors.toList());
+    }
+
 
 }

+ 8 - 0
sckw-modules/sckw-contract/src/main/java/com/sckw/contract/repository/KwcContractTradeGoodsRepository.java

@@ -59,4 +59,12 @@ public class KwcContractTradeGoodsRepository extends ServiceImpl<KwcContractTrad
                 .orderByDesc(KwcContractTradeGoods::getId)
                 .last("limit 1"));
     }
+
+    public List<KwcContractTradeGoods> queryByContractIdsAndGoodsIds(Set<Long> contractIds, Set<Long> goodsIds) {
+        return list(Wrappers.<KwcContractTradeGoods>lambdaQuery()
+                .eq(KwcContractTradeGoods::getDelFlag,0)
+                .in(KwcContractTradeGoods::getContractId, contractIds)
+                .in(KwcContractTradeGoods::getGoodsId, goodsIds)
+        );
+    }
 }

+ 14 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/dubbo/TradeOrderInfoServiceImpl.java

@@ -649,6 +649,20 @@ public class TradeOrderInfoServiceImpl implements TradeOrderInfoService {
     }
 
     @Override
+    public List<TradeOrderContractVo> queryTradeOrderIds(Set<Long> tradeOrderIds) {
+        List<KwoTradeOrderContract> kwoTradeOrderContracts = kwoTradeOrderContractRepository.queryTradeOrderIds(tradeOrderIds);
+        if (CollectionUtils.isEmpty(kwoTradeOrderContracts)) {
+            return List.of();
+        }
+        return kwoTradeOrderContracts.stream().map(item -> {
+            TradeOrderContractVo tradeOrderContractVo = new TradeOrderContractVo();
+            tradeOrderContractVo.setContractId(item.getContractId());
+            tradeOrderContractVo.setContractNo(item.getContractNo());
+            tradeOrderContractVo.setTOrderId(item.getTOrderId());
+            tradeOrderContractVo.setTOrderNo(item.getTOrderNo());
+            return tradeOrderContractVo;
+        }).collect(Collectors.toList());
+    }
     public List<OrderSaleVo> queryRecentSale(LocalDateTime start, LocalDateTime end) {
         return kwoTradeOrderService.queryRecentSale(start, end);
     }

+ 6 - 0
sckw-modules/sckw-order/src/main/java/com/sckw/order/repository/KwoTradeOrderContractRepository.java

@@ -36,4 +36,10 @@ public class KwoTradeOrderContractRepository extends ServiceImpl<KwoTradeOrderCo
                 .eq(BaseModel::getDelFlag,0)
                 .in(KwoTradeOrderContract::getContractId, tradeContractIds));
     }
+
+    public List<KwoTradeOrderContract> queryTradeOrderIds(Set<Long> tradeOrderIds) {
+        return list(Wrappers.<KwoTradeOrderContract>lambdaQuery()
+                .eq(BaseModel::getDelFlag,0)
+                .in(KwoTradeOrderContract::getTOrderId, tradeOrderIds));
+    }
 }

+ 161 - 15
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtWaybillOrderV1Service.java

@@ -41,6 +41,7 @@ import com.sckw.fleet.api.model.vo.*;
 import com.sckw.mongo.model.SckwWaybillOrder;
 import com.sckw.order.api.dubbo.TradeOrderInfoService;
 import com.sckw.order.api.model.OrderDetailVo;
+import com.sckw.order.api.model.TradeOrderContractVo;
 import com.sckw.order.api.model.TradeOrderSettlePara;
 import com.sckw.product.api.dubbo.GoodsInfoService;
 import com.sckw.product.api.model.KwpGoods;
@@ -170,7 +171,8 @@ public class KwtWaybillOrderV1Service {
     LogisticsScoreFeignService logisticsScoreFeignService;
     @Autowired
     private KwtLogisticsOrderAddressRepository kwtLogisticsOrderAddressRepository;
-
+    // 定义超时时间常量
+    private static final long PARALLEL_TIMEOUT_SECONDS = 60;
     /**
      * @param params 请求参数
      * @desc 统计
@@ -3011,6 +3013,9 @@ public class KwtWaybillOrderV1Service {
             Map<String, Map<String, String>> result = queryDictionaryData();
             log.debug("字典数据查询完成");
             return result;
+        },traceTaskExecutor).exceptionally(ex -> {
+            log.error("字典查询失败", ex);
+            throw new BusinessException("字典查询失败");
         });
 
         // 等待物流订单ID和运单ID查询完成
@@ -3047,21 +3052,130 @@ public class KwtWaybillOrderV1Service {
         OrderIds orderIds = extractOrderIds(records);
 
         // 并行执行批量查询和获取字典数据
-        log.debug("开始并行执行批量查询和获取字典数据");
-        CompletableFuture<OrderData> orderDataFuture = CompletableFuture.supplyAsync(() -> batchQueryOrderData(orderIds));
+        log.debug("开始并行执行订单数据查询");
+        CompletableFuture<OrderData> orderDataFuture = CompletableFuture.supplyAsync(() -> {
+            log.debug("开始查询订单数据,订单ID数量: {}", orderIds.getWayBillOrderIds().size());
+            OrderData result = batchQueryOrderData(orderIds);
+            log.debug("订单数据查询完成");
+            return result;
+        }, traceTaskExecutor).exceptionally(ex -> {
+            log.error("查询订单失败", ex);
+            throw new BusinessException("查询订单失败");
+        });
+
+        log.debug("开始查询物流订单,物流订单ID数量: {}", orderIds.getLogicsOrderIds().size());
+        CompletableFuture<List<KwtLogisticsOrder>> logisticsOrderFuture = CompletableFuture.supplyAsync(() -> 
+                logisticsOrderRepository.queryByLogOrderIds(orderIds.getLogicsOrderIds()), traceTaskExecutor)
+                .exceptionally(ex -> {
+                    log.error("查询物流订单失败", ex);
+                    throw new BusinessException("查询物流订单失败");
+                });
+
+        log.debug("开始查询商品信息,物流订单ID数量: {}", orderIds.getLogicsOrderIds().size());
+        CompletableFuture<List<KwtLogisticsOrderGoods>> goodsInfoFuture = CompletableFuture.supplyAsync(() ->
+                        kwtLogisticsOrderGoodsRepository.queryByLogIds(new ArrayList<>(orderIds.getLogicsOrderIds())), traceTaskExecutor)
+                .exceptionally(ex -> {
+                    log.error("查询物流商品失败", ex);
+                    throw new BusinessException("查询物流商品失败");
+                });
+
+        // ====== 提取 tradeOrderIds ======
+        log.debug("开始提取贸易订单ID");
+        CompletableFuture<Set<Long>> tradeOrderIdsFuture =
+                logisticsOrderFuture.thenApply(list -> {
+                    log.debug("物流订单数据处理完成,数量: {}", list.size());
+                    return list.stream()
+                            .map(KwtLogisticsOrder::getTOrderId)
+                            .filter(Objects::nonNull)
+                            .collect(Collectors.toSet());
+                });
+
+        // ====== 提取 goodsIds ======
+        log.debug("开始提取商品ID");
+        CompletableFuture<Set<Long>> goodsIdsFuture =
+                goodsInfoFuture.thenApply(list -> {
+                    log.debug("商品信息数据处理完成,数量: {}", list.size());
+                    return list.stream()
+                            .map(KwtLogisticsOrderGoods::getGoodsId)
+                            .filter(Objects::nonNull)
+                            .collect(Collectors.toSet());
+                }).handle(((goodsIds, ex) -> {
+                    if (ex != null) {
+                        log.error("查询商品ID失败", ex);
+                        return Set.of();
+                    } else {
+                        log.debug("商品ID提取完成,数量: {}", goodsIds.size());
+                        return goodsIds;
+                    }
+                }));
+
+        // ====== 查询贸易订单合同 ======
+        log.debug("开始查询贸易订单合同");
+        CompletableFuture<List<TradeOrderContractVo>> tradeOrderContractFuture =
+                tradeOrderIdsFuture.thenCompose(tradeOrderIds -> {
+                    log.debug("贸易订单ID准备完成,数量: {}", tradeOrderIds.size());
+                    return CompletableFuture.supplyAsync(() -> {
+                        log.debug("开始查询贸易订单合同,贸易订单ID数量: {}", tradeOrderIds.size());
+                        List<TradeOrderContractVo> result = tradeOrderInfoService.queryTradeOrderIds(tradeOrderIds);
+                        log.debug("贸易订单合同查询完成,数量: {}", result.size());
+                        return result;
+                    });
+                }).exceptionally(ex -> {
+                    log.error("查询贸易订单合同失败", ex);
+                    throw new BusinessException("查询贸易订单合同失败");
+                });
+
+        // ====== 查询贸易合同商品 ======
+        log.debug("开始查询贸易合同商品");
+        CompletableFuture<List<TradeContractGoodsDto>> contractGoodsFuture =
+                tradeOrderContractFuture.thenCombine(goodsIdsFuture, (contracts, goodsIds) -> {
+                    log.debug("贸易合同和商品ID准备完成,合同数量: {}, 商品ID数量: {}", 
+                            Optional.ofNullable(contracts).map(List::size).orElse(0), 
+                            goodsIds.size());
+                    Set<Long> contractIds = Optional.ofNullable(contracts)
+                            .orElse(List.of())
+                            .stream()
+                            .map(TradeOrderContractVo::getContractId)
+                            .filter(Objects::nonNull)
+                            .collect(Collectors.toSet());
+                    log.debug("合同ID提取完成,数量: {}", contractIds.size());
+                    List<TradeContractGoodsDto> result = remoteContractService.queryContractGoodsByContractIds(contractIds, goodsIds);
+                    log.debug("贸易合同商品查询完成,数量: {}", result.size());
+                    return result;
+                }).thenApply(goods -> Optional.ofNullable(goods).orElse(List.of()))
+                .exceptionally(ex -> {
+                    log.error("查询贸易订单商品失败", ex);
+                    throw new BusinessException("查询贸易订单商品失败");
+                });
+
+        log.debug("所有异步任务创建完成");
+
+
 
         // 等待所有并行操作完成
         log.debug("等待所有并行操作完成");
-        CompletableFuture.allOf(orderDataFuture, dictFuture).join();
-
+        CompletableFuture.allOf(orderDataFuture,logisticsOrderFuture,
+                goodsInfoFuture, tradeOrderIdsFuture, goodsIdsFuture,
+                tradeOrderContractFuture, dictFuture,contractGoodsFuture).join();
+        log.debug("所有并行操作完成");
         OrderData orderData = orderDataFuture.join();
         Map<String, Map<String, String>> dictValueAndDictResDtoMap = dictFuture.join();
         log.debug("批量查询和字典数据获取完成");
+        Map<Long, KwtLogisticsOrder> logisticsOrderMap = Optional.ofNullable(logisticsOrderFuture.join())
+                .orElse(List.of()).stream()
+                .collect(Collectors.toMap(KwtLogisticsOrder::getId, Function.identity(), (k1, k2) -> k1));
+
+        Map<Long, TradeOrderContractVo> tradeOrderContractVoMap = Optional.ofNullable(tradeOrderContractFuture.join())
+                .orElse(List.of()).stream()
+                .collect(Collectors.toMap(TradeOrderContractVo::getTOrderId, Function.identity(), (k1, k2) -> k1));
+        Map<String, TradeContractGoodsDto> orderContracGoodstoMap = Optional.ofNullable(contractGoodsFuture.join())
+                .orElse(List.of()).stream()
+                .collect(Collectors.toMap(x->x.getContractId()+"-"+x.getGoodsId(), Function.identity(), (k1, k2) -> k1));
 
         // 转换为响应对象
         log.debug("开始转换为响应对象");
         List<WaybillOrderResp> resps = convertToWaybillOrderRespList(
-                records, orderData, dictValueAndDictResDtoMap);
+                records, orderData, dictValueAndDictResDtoMap,logisticsOrderMap, tradeOrderContractVoMap,orderContracGoodstoMap);
         log.info("转换完成,响应对象数量: {}", resps.size());
 
         return PageDataResult.of(page, resps);
@@ -3264,10 +3378,13 @@ public class KwtWaybillOrderV1Service {
     private List<WaybillOrderResp> convertToWaybillOrderRespList(
             List<KwtWaybillOrderSubtask> records,
             OrderData orderData,
-            Map<String, Map<String, String>> dictValueAndDictResDtoMap) {
+            Map<String, Map<String, String>> dictValueAndDictResDtoMap,
+            Map<Long, KwtLogisticsOrder> logisticsOrderMap,
+            Map<Long, TradeOrderContractVo> tradeOrderContractVoMap,
+            Map<String, TradeContractGoodsDto> orderContracGoodstoMap) {
 
         return records.stream()
-                .map(record -> buildWaybillOrderResp(record, orderData, dictValueAndDictResDtoMap))
+                .map(record -> buildWaybillOrderResp(record, orderData, dictValueAndDictResDtoMap,logisticsOrderMap, tradeOrderContractVoMap,orderContracGoodstoMap))
                 .collect(Collectors.toList());
     }
 
@@ -3277,7 +3394,10 @@ public class KwtWaybillOrderV1Service {
     private WaybillOrderResp buildWaybillOrderResp(
             KwtWaybillOrderSubtask record,
             OrderData orderData,
-            Map<String, Map<String, String>> dictValueAndDictResDtoMap) {
+            Map<String, Map<String, String>> dictValueAndDictResDtoMap,
+            Map<Long, KwtLogisticsOrder> logisticsOrderMap,
+            Map<Long, TradeOrderContractVo> tradeOrderContractVoMap,
+            Map<String, TradeContractGoodsDto> orderContracGoodstoMap) {
 
         return getWaybillOrderResp(
                 record,
@@ -3289,7 +3409,10 @@ public class KwtWaybillOrderV1Service {
                 orderData.getWaybillOrderNodeMap(),
                 orderData.getLogIdAndOrderMap(),
                 dictValueAndDictResDtoMap,
-                orderData.getWOrderIdAndOffsiteNodeMap());
+                orderData.getWOrderIdAndOffsiteNodeMap(),
+                logisticsOrderMap,
+                tradeOrderContractVoMap,
+                orderContracGoodstoMap);
     }
 
     /**
@@ -3709,7 +3832,10 @@ public class KwtWaybillOrderV1Service {
                                                         Map<String, KwtWaybillOrderNode> waybillOrderNodeMap,
                                                         Map<Long, KwtLogisticsOrder> finalLogIdAndOrderMap,
                                                         Map<String, Map<String, String>> dictValueAndDictResDtoMap,
-                                                        Map<Long, KwtWaybillOrderNode> wOrderIdAndOffsiteNodeMap) {
+                                                        Map<Long, KwtWaybillOrderNode> wOrderIdAndOffsiteNodeMap,
+                                                        Map<Long, KwtLogisticsOrder> logisticsOrderMap,
+                                                        Map<Long, TradeOrderContractVo> tradeOrderContractVoMap,
+                                                        Map<String, TradeContractGoodsDto> orderContracGoodstoMap) {
         WaybillOrderResp waybillOrderResp = new WaybillOrderResp();
         KwtWaybillOrder billOrder = finalWaybillOrderIdAndBillOrderMap.getOrDefault(record.getWOrderId(),
                 new KwtWaybillOrder());
@@ -3782,6 +3908,26 @@ public class KwtWaybillOrderV1Service {
 
         waybillOrderResp.setStatus(String.valueOf(record.getStatus()));
         waybillOrderResp.setStatusDesc(CarWaybillV1Enum.geDesc(record.getStatus()));
+        KwtLogisticsOrder logOrder = logisticsOrderMap.getOrDefault(lOrderId, new KwtLogisticsOrder());
+        KwtLogisticsOrderGoods kwtLogisticsOrderGoods = finalLogOrderIdAndGoodsIdMap.getOrDefault(lOrderId, new KwtLogisticsOrderGoods());
+        TradeOrderContractVo tradeOrderContractVo = tradeOrderContractVoMap.getOrDefault(logOrder.getTOrderId(), new TradeOrderContractVo());
+        TradeContractGoodsDto contractGoodsDto = orderContracGoodstoMap.getOrDefault(tradeOrderContractVo.getContractId()+"-"+kwtLogisticsOrderGoods.getGoodsId(), new TradeContractGoodsDto());
+        if (org.apache.commons.lang3.StringUtils.equals(logOrder.getBillingMode(), DictEnum.CHARGING_TYPE_1.getValue())){
+            BigDecimal actualPrice = Objects.nonNull(logOrder.getPrice()) && Objects.nonNull(record.getLoadAmount()) ?
+                    logOrder.getPrice().multiply(record.getLoadAmount()) : BigDecimal.ZERO;
+            BigDecimal actualGoodsPrice = Objects.nonNull(contractGoodsDto.getPrice()) && Objects.nonNull(record.getLoadAmount()) ?
+                    contractGoodsDto.getPrice().multiply(record.getLoadAmount()) : BigDecimal.ZERO;
+            waybillOrderResp.setActualPrice(actualPrice.setScale(2, RoundingMode.HALF_UP).toPlainString());
+            waybillOrderResp.setActualGoodsPrice(actualGoodsPrice.setScale(2, RoundingMode.HALF_UP).toPlainString());
+        }else if (org.apache.commons.lang3.StringUtils.equals(logOrder.getBillingMode(), DictEnum.CHARGING_TYPE_2.getValue())){
+            BigDecimal actualPrice = Objects.nonNull(logOrder.getPrice()) && Objects.nonNull(record.getUnloadAmount()) ?
+                    logOrder.getPrice().multiply(record.getUnloadAmount()) : BigDecimal.ZERO;
+            BigDecimal actualGoodsPrice = Objects.nonNull(contractGoodsDto.getPrice()) && Objects.nonNull(record.getUnloadAmount()) ?
+                    contractGoodsDto.getPrice().multiply(record.getUnloadAmount()) : BigDecimal.ZERO;
+            waybillOrderResp.setActualPrice(actualPrice.setScale(2, RoundingMode.HALF_UP).toPlainString());
+            waybillOrderResp.setActualGoodsPrice(actualGoodsPrice.setScale(2, RoundingMode.HALF_UP).toPlainString());
+        }
+
         return waybillOrderResp;
     }
 
@@ -4180,15 +4326,15 @@ public class KwtWaybillOrderV1Service {
                     logOrder.getPrice().multiply(subtask.getLoadAmount()) : BigDecimal.ZERO;
             BigDecimal actualGoodsPrice = Objects.nonNull(contractGoodsDto.getPrice()) && Objects.nonNull(subtask.getLoadAmount()) ?
                     contractGoodsDto.getPrice().multiply(subtask.getLoadAmount()) : BigDecimal.ZERO;
-            resp.setActualPrice(actualPrice.setScale(2, RoundingMode.HALF_UP) +"元");
-            resp.setActualGoodsPrice(actualGoodsPrice.setScale(2, RoundingMode.HALF_UP)+"元");
+            resp.setActualPrice(actualPrice.setScale(2, RoundingMode.HALF_UP).toPlainString() +"元");
+            resp.setActualGoodsPrice(actualGoodsPrice.setScale(2, RoundingMode.HALF_UP).toPlainString()+"元");
         }else if (org.apache.commons.lang3.StringUtils.equals(logOrder.getBillingMode(), DictEnum.CHARGING_TYPE_2.getValue())){
             BigDecimal actualPrice = Objects.nonNull(logOrder.getPrice()) && Objects.nonNull(subtask.getUnloadAmount()) ?
                     logOrder.getPrice().multiply(subtask.getUnloadAmount()) : BigDecimal.ZERO;
             BigDecimal actualGoodsPrice = Objects.nonNull(contractGoodsDto.getPrice()) && Objects.nonNull(subtask.getUnloadAmount()) ?
                     contractGoodsDto.getPrice().multiply(subtask.getUnloadAmount()) : BigDecimal.ZERO;
-            resp.setActualPrice(actualPrice.setScale(2, RoundingMode.HALF_UP)+"元");
-            resp.setActualGoodsPrice(actualGoodsPrice.setScale(2, RoundingMode.HALF_UP)+"元");
+            resp.setActualPrice(actualPrice.setScale(2, RoundingMode.HALF_UP).toPlainString()+"元");
+            resp.setActualGoodsPrice(actualGoodsPrice.setScale(2, RoundingMode.HALF_UP).toPlainString()+"元");
         }
         resp.setTruckNo(billOrder.getTruckNo());
         resp.setCarAxis(truck != null ? truck.getCarAxis() : "");