|
|
@@ -14,6 +14,7 @@ import com.google.common.collect.Sets;
|
|
|
import com.sckw.contract.api.RemoteContractService;
|
|
|
import com.sckw.contract.api.feign.LogisticsScoreFeignService;
|
|
|
import com.sckw.contract.api.model.dto.req.LogisticsScoreDetailFeignDto;
|
|
|
+import com.sckw.contract.api.model.vo.TradeContractGoodsDto;
|
|
|
import com.sckw.contract.api.model.vo.TradeContractUnitDto;
|
|
|
import com.sckw.core.common.enums.enums.DictEnum;
|
|
|
import com.sckw.core.common.enums.enums.DictTypeEnum;
|
|
|
@@ -85,7 +86,8 @@ import java.text.SimpleDateFormat;
|
|
|
import java.time.LocalDateTime;
|
|
|
import java.time.ZoneId;
|
|
|
import java.util.*;
|
|
|
-import java.util.concurrent.CompletableFuture;
|
|
|
+import java.util.concurrent.*;
|
|
|
+import java.util.concurrent.atomic.AtomicInteger;
|
|
|
import java.util.concurrent.atomic.AtomicReference;
|
|
|
import java.util.function.Function;
|
|
|
import java.util.stream.Collectors;
|
|
|
@@ -3793,6 +3795,8 @@ public class KwtWaybillOrderV1Service {
|
|
|
return order;
|
|
|
}
|
|
|
|
|
|
+ @Resource(name = "traceTaskExecutor")
|
|
|
+ private Executor traceTaskExecutor;
|
|
|
|
|
|
|
|
|
public WaybillOrderDetailResp queryBillOrderDetail(WaybillOrderRequest req) {
|
|
|
@@ -3811,40 +3815,71 @@ public class KwtWaybillOrderV1Service {
|
|
|
// 并行执行多个不相互依赖的查询
|
|
|
log.debug("开始并行查询相关数据,主运单ID: {}", billOrder.getId());
|
|
|
CompletableFuture<RTruckVo> truckFuture = CompletableFuture.supplyAsync(() ->
|
|
|
- remoteFleetService.findTruck(billOrder.getTruckId()));
|
|
|
+ remoteFleetService.findTruck(billOrder.getTruckId())).exceptionally(ex -> {
|
|
|
+ log.error("异步任务执行失败", ex);
|
|
|
+ throw new BusinessException("查询车型信息失败");
|
|
|
+ });;
|
|
|
|
|
|
CompletableFuture<RFleetVo> fleetFuture = CompletableFuture.supplyAsync(() ->
|
|
|
- getFleetInfo(billOrder.getTruckId()));
|
|
|
+ getFleetInfo(billOrder.getTruckId()),traceTaskExecutor);
|
|
|
|
|
|
CompletableFuture<List<KwtLogisticsOrderAddress>> addressFuture = CompletableFuture.supplyAsync(() ->
|
|
|
- kwtLogisticsOrderAddressRepository.queryByLogOrderId(subtask.getLOrderId()));
|
|
|
+ kwtLogisticsOrderAddressRepository.queryByLogOrderId(subtask.getLOrderId()),traceTaskExecutor);
|
|
|
|
|
|
CompletableFuture<List<KwtWaybillOrderTicket>> ticketFuture = CompletableFuture.supplyAsync(() ->
|
|
|
- kwtWaybillOrderTicketRepository.queryByWOrderId(req.getOrderId()));
|
|
|
+ kwtWaybillOrderTicketRepository.queryByWOrderId(req.getOrderId()),traceTaskExecutor);
|
|
|
|
|
|
CompletableFuture<UserCacheResDto> userFuture = CompletableFuture.supplyAsync(() ->
|
|
|
- getUserInfo(subtask.getUnloadOperator()));
|
|
|
+ getUserInfo(subtask.getUnloadOperator()),traceTaskExecutor).exceptionally(ex -> {
|
|
|
+ log.error("异步任务执行失败", ex);
|
|
|
+ throw new BusinessException("查询用户信息失败");
|
|
|
+ });
|
|
|
|
|
|
CompletableFuture<KwtLogisticsOrderGoods> goodsFuture = CompletableFuture.supplyAsync(() ->
|
|
|
- kwtLogisticsOrderGoodsRepository.queryByLogOrderId(logOrder.getId()));
|
|
|
+ kwtLogisticsOrderGoodsRepository.queryByLogOrderId(logOrder.getId()),traceTaskExecutor);
|
|
|
|
|
|
CompletableFuture<OrderDetailVo> orderDetailFuture = CompletableFuture.supplyAsync(() ->
|
|
|
- getOrderDetail(logOrder.getTOrderId()));
|
|
|
+ getOrderDetail(logOrder.getTOrderId()),traceTaskExecutor).exceptionally(ex -> {
|
|
|
+ log.error("异步任务执行失败", ex);
|
|
|
+ throw new BusinessException("查询订单详情失败");
|
|
|
+ });
|
|
|
|
|
|
CompletableFuture<List<KwtLogisticsOrderUnit>> unitFuture = CompletableFuture.supplyAsync(() ->
|
|
|
- kwtLogisticsOrderUnitRepository.queryByLOrderId(logOrder.getId()));
|
|
|
+ kwtLogisticsOrderUnitRepository.queryByLOrderId(logOrder.getId()),traceTaskExecutor);
|
|
|
|
|
|
CompletableFuture<List<KwtWaybillOrderNode>> nodeFuture = CompletableFuture.supplyAsync(() ->
|
|
|
- kwtWaybillOrderNodeRepository.queryNodesByOrderId(billOrder.getId(), subtask.getId()));
|
|
|
+ kwtWaybillOrderNodeRepository.queryNodesByOrderId(billOrder.getId(), subtask.getId()),traceTaskExecutor);
|
|
|
|
|
|
CompletableFuture<List<KwtWaybillOrderSubtask>> waybillSubtaskFuture = CompletableFuture.supplyAsync(() ->
|
|
|
- kwtWaybillOrderSubtaskRepository.queryByLogId(logOrder.getId()));
|
|
|
-
|
|
|
+ kwtWaybillOrderSubtaskRepository.queryByLogId(logOrder.getId()),traceTaskExecutor);
|
|
|
+
|
|
|
+
|
|
|
+ CompletableFuture<TradeContractGoodsDto> contractFuture =
|
|
|
+ goodsFuture.thenCompose(goods -> {
|
|
|
+ Long goodsId = Optional.ofNullable(goods)
|
|
|
+ .map(KwtLogisticsOrderGoods::getGoodsId)
|
|
|
+ .orElse(null);
|
|
|
+ log.debug("开始查询合同信息,贸易订单ID: {}, 商品ID: {}", logOrder.getTOrderId(), goodsId);
|
|
|
+
|
|
|
+ return CompletableFuture
|
|
|
+ .supplyAsync(
|
|
|
+ () -> tradeOrderInfoService.queryByContractByTradeOrderId(logOrder.getTOrderId()), traceTaskExecutor)
|
|
|
+ .thenCompose(tradeOrderInfo -> {
|
|
|
+ log.debug("贸易订单合同信息查询完成,合同ID: {}", tradeOrderInfo.getContractId());
|
|
|
+ return CompletableFuture.supplyAsync(
|
|
|
+ () -> remoteContractService.queryContractGoodsByContractId(tradeOrderInfo.getContractId(), goodsId), traceTaskExecutor
|
|
|
+ );
|
|
|
+ });
|
|
|
+ }).exceptionally(ex -> {
|
|
|
+ log.error("异步任务执行失败", ex);
|
|
|
+ throw new BusinessException("查询合同信息失败");
|
|
|
+ });
|
|
|
// 等待所有并行查询完成
|
|
|
log.debug("等待所有并行查询完成");
|
|
|
CompletableFuture.allOf(
|
|
|
truckFuture, fleetFuture, addressFuture, ticketFuture, userFuture,
|
|
|
- goodsFuture, orderDetailFuture, unitFuture, nodeFuture, waybillSubtaskFuture
|
|
|
+ goodsFuture, orderDetailFuture, unitFuture, nodeFuture, waybillSubtaskFuture,
|
|
|
+ contractFuture
|
|
|
).join();
|
|
|
log.debug("所有并行查询完成");
|
|
|
|
|
|
@@ -3852,7 +3887,7 @@ public class KwtWaybillOrderV1Service {
|
|
|
return buildWaybillOrderDetailResp(billOrder, subtask, logOrder, truckFuture.join(),
|
|
|
fleetFuture.join(), addressFuture.join(), ticketFuture.join(), userFuture.join(),
|
|
|
goodsFuture.join(), orderDetailFuture.join(), unitFuture.join(),
|
|
|
- nodeFuture.join(), waybillSubtaskFuture.join());
|
|
|
+ nodeFuture.join(), waybillSubtaskFuture.join(),contractFuture.join());
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -3949,7 +3984,8 @@ public class KwtWaybillOrderV1Service {
|
|
|
OrderDetailVo orderDetailVo,
|
|
|
List<KwtLogisticsOrderUnit> unitList,
|
|
|
List<KwtWaybillOrderNode> kwtWaybillOrderNodes,
|
|
|
- List<KwtWaybillOrderSubtask> waybillOrderSubtasks) {
|
|
|
+ List<KwtWaybillOrderSubtask> waybillOrderSubtasks,
|
|
|
+ TradeContractGoodsDto contractGoodsDto) {
|
|
|
log.debug("开始处理查询结果,主运单ID: {}, 子运单ID: {}", billOrder.getId(), subtask.getId());
|
|
|
|
|
|
if (CollectionUtils.isEmpty(orderTicketList)) {
|
|
|
@@ -3991,7 +4027,7 @@ public class KwtWaybillOrderV1Service {
|
|
|
log.info("运单详情查询完成,运单ID: {}", billOrder.getId());
|
|
|
return getWaybillOrderDetailResp(subtask, billOrder, logOrder, truck, fleet, goods,
|
|
|
keyAndAddressMap, kwpGoods, logisticsOrderUnitMap, nodeList, userCacheResDto,
|
|
|
- billOrders, ticketMap, dictValueAndDictResDtoMap, tradeContractUnitDtos);
|
|
|
+ billOrders, ticketMap, dictValueAndDictResDtoMap, tradeContractUnitDtos,contractGoodsDto);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -4128,7 +4164,8 @@ public class KwtWaybillOrderV1Service {
|
|
|
List<KwtWaybillOrder> billOrders,
|
|
|
Map<String, KwtWaybillOrderTicket> ticketMap,
|
|
|
Map<String, Map<String, String>> dictValueAndDictResDtoMap,
|
|
|
- List<TradeContractUnitDto> tradeContractUnitDtos) {
|
|
|
+ List<TradeContractUnitDto> tradeContractUnitDtos,
|
|
|
+ TradeContractGoodsDto contractGoodsDto) {
|
|
|
WaybillOrderDetailResp resp = new WaybillOrderDetailResp();
|
|
|
|
|
|
// 基本信息设置
|
|
|
@@ -4138,6 +4175,21 @@ public class KwtWaybillOrderV1Service {
|
|
|
resp.setLogisticOrderNo(logOrder.getLOrderNo());
|
|
|
resp.setPriceType(String.valueOf(logOrder.getBillingMode()));
|
|
|
resp.setPriceTypeDesc(DictEnum.getLabel(DictTypeEnum.CHARGING_TYPE.getType(), logOrder.getBillingMode()));
|
|
|
+ if (org.apache.commons.lang3.StringUtils.equals(logOrder.getBillingMode(), DictEnum.CHARGING_TYPE_1.getValue())){
|
|
|
+ BigDecimal actualPrice = Objects.nonNull(logOrder.getPrice()) && Objects.nonNull(subtask.getLoadAmount()) ?
|
|
|
+ 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)+"元");
|
|
|
+ }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.setTruckNo(billOrder.getTruckNo());
|
|
|
resp.setCarAxis(truck != null ? truck.getCarAxis() : "");
|
|
|
resp.setFleetName(fleet != null ? fleet.getName() : "");
|