|
|
@@ -1,12 +1,11 @@
|
|
|
package com.sckw.transport.service.app;
|
|
|
|
|
|
|
|
|
-import cn.hutool.core.map.MapUtil;
|
|
|
import com.alibaba.fastjson.JSON;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
-import com.google.common.collect.Maps;
|
|
|
+import com.google.common.collect.Lists;
|
|
|
import com.sckw.core.common.enums.enums.DictEnum;
|
|
|
import com.sckw.core.common.enums.enums.DictTypeEnum;
|
|
|
import com.sckw.core.common.enums.enums.ErrorCodeEnum;
|
|
|
@@ -18,7 +17,6 @@ import com.sckw.core.model.enums.LogisticsOrderV1Enum;
|
|
|
import com.sckw.core.model.enums.UnitTypeEnum;
|
|
|
import com.sckw.core.utils.CollectionUtils;
|
|
|
import com.sckw.core.utils.DateUtils;
|
|
|
-import com.sckw.core.utils.DistanceUtils;
|
|
|
import com.sckw.core.web.response.result.PageDataResult;
|
|
|
import com.sckw.fleet.api.RemoteFleetService;
|
|
|
import com.sckw.fleet.api.model.vo.RTruckVo;
|
|
|
@@ -28,7 +26,6 @@ import com.sckw.order.api.model.OrderUnitInfoDetailVO;
|
|
|
import com.sckw.product.api.dubbo.GoodsInfoService;
|
|
|
import com.sckw.product.api.model.KwpGoods;
|
|
|
import com.sckw.system.api.RemoteSystemService;
|
|
|
-import com.sckw.system.api.model.dto.res.SysDictResDto;
|
|
|
import com.sckw.system.api.model.dto.res.UserCacheResDto;
|
|
|
import com.sckw.transport.handler.*;
|
|
|
import com.sckw.transport.model.*;
|
|
|
@@ -36,7 +33,7 @@ import com.sckw.transport.model.param.*;
|
|
|
import com.sckw.transport.model.vo.OrderTotalTakeVo;
|
|
|
import com.sckw.transport.model.vo.StatisticsWaybillResp;
|
|
|
import com.sckw.transport.repository.*;
|
|
|
-import com.sckw.transport.service.*;
|
|
|
+import com.sckw.transport.service.KwtWaybillOrderV1Service;
|
|
|
import jakarta.annotation.Resource;
|
|
|
import lombok.RequiredArgsConstructor;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
@@ -203,6 +200,9 @@ public class WaybillOrderService {
|
|
|
if (StringUtils.isBlank(param.getTruckNo())) {
|
|
|
return PageDataResult.empty(param.getPageNum(), param.getPageSize());
|
|
|
}
|
|
|
+ //查询车辆信息
|
|
|
+ RTruckVo rTruckVo = getTruck(param.getTruckNo());
|
|
|
+
|
|
|
List<KwtLogisticsOrderCirculate> circulateList = logisticsOrderCirculateRepository.queryOrderCirculateByEntId(param.getEntId(), param.getTruckNo());
|
|
|
if (CollectionUtils.isEmpty(circulateList)) {
|
|
|
log.info("当前车辆无派单订单,truckNo:{}", param.getTruckNo());
|
|
|
@@ -215,14 +215,7 @@ public class WaybillOrderService {
|
|
|
List<Long> logOrderIdList = circulateList.stream().map(KwtLogisticsOrderCirculate::getLOrderId).filter(Objects::nonNull).collect(Collectors.toList());
|
|
|
|
|
|
//物流订单
|
|
|
- LambdaQueryWrapper<KwtLogisticsOrder> queryWrapper = Wrappers.<KwtLogisticsOrder>lambdaQuery()
|
|
|
- .in(KwtLogisticsOrder::getId, logOrderIdList)
|
|
|
- .eq(KwtLogisticsOrder::getDelFlag,0)
|
|
|
- .eq(KwtLogisticsOrder::getStatus, LogisticsOrderV1Enum.IN_TRANSIT.getCode())
|
|
|
- .orderByDesc(KwtLogisticsOrder::getCreateTime)
|
|
|
- .orderByDesc(KwtLogisticsOrder::getId);
|
|
|
- Page<KwtLogisticsOrder> page = logisticsOrderRepository.page(new Page<>(param.getPageNum(), param.getPageSize()), queryWrapper);
|
|
|
- List<KwtLogisticsOrder> logOrderList = page.getRecords();
|
|
|
+ List<KwtLogisticsOrder> logOrderList = logisticsOrderRepository.queryByLogOrderIds(logOrderIdList);
|
|
|
if (CollectionUtils.isEmpty(logOrderList)) {
|
|
|
log.info("当前车辆无物流订单,truckNo:{}", param.getTruckNo());
|
|
|
throw new BusinessPlatfromException(ErrorCodeEnum.DRIVER_STATUS_ERROR, "当前车辆无物流订单");
|
|
|
@@ -297,12 +290,82 @@ public class WaybillOrderService {
|
|
|
.map(order -> {
|
|
|
return getLogisticsOrderResp(order, logOrderIdAndGoodsMap, goodsIdAndGoodsMap, logOrderIdAndUnitMap,
|
|
|
tOrderIdAndUnitMap, logOrderIdAndAddressMap, logOrderIdAndCirculateMap, tradeIdAndOrderDetailVoMap,
|
|
|
- tradeIdAndLogOrderList,logOrderIdAndSubtaskMap,dictValueAndDictResDtoMap);
|
|
|
- }).collect(Collectors.toList());
|
|
|
+ tradeIdAndLogOrderList, logOrderIdAndSubtaskMap, dictValueAndDictResDtoMap);
|
|
|
+ })
|
|
|
+ .filter(logisticsOrderResp -> {
|
|
|
+ // 校验是否满足车辆任务量,满足才保留
|
|
|
+ return checkCurTruckLoadVolume(rTruckVo, logisticsOrderResp.getOrderSurplus());
|
|
|
+ })
|
|
|
+ .collect(Collectors.toList());
|
|
|
+
|
|
|
+ //内存分页
|
|
|
+ List<List<LogisticsOrderResp>> pageList = Lists.partition(ordderList, param.getPageSize());
|
|
|
+ List<LogisticsOrderResp> walletPageList = pageList.size() >= param.getPageNum() ?
|
|
|
+ pageList.get(param.getPageNum() - 1) : Collections.emptyList();
|
|
|
+
|
|
|
+ PageDataResult<LogisticsOrderResp> walletPageResponse = PageDataResult.success(param.getPageNum(), param.getPageSize(), (long) walletPageList.size(), walletPageList);
|
|
|
log.info("查询司机关联车辆的物流订单成功!");
|
|
|
- return PageDataResult.success(param.getPageNum(), param.getPageSize(), page.getTotal(), ordderList);
|
|
|
+ return walletPageResponse;
|
|
|
+
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 校验车辆状态
|
|
|
+ * @param param
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private RTruckVo getTruck(String truckNo) {
|
|
|
+ RTruckVo truckVO = remoteFleetService.findTruckByTruckNo(truckNo);
|
|
|
+ if (truckVO == null) {
|
|
|
+ throw new BusinessPlatfromException(ErrorCodeEnum.TRUCK_NOT_FOUND, "当前车辆不存在");
|
|
|
+ }
|
|
|
+ //核定载重
|
|
|
+ if (truckVO.getLegalLoad() == null || BigDecimal.ZERO.compareTo(truckVO.getLegalLoad()) == 0) {
|
|
|
+ throw new BusinessPlatfromException(ErrorCodeEnum.RESOURCE_NOT_FOUND, "车辆核定载重不能为空!");
|
|
|
+ }
|
|
|
+
|
|
|
+ return truckVO;
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 校验当前车辆任务量:
|
|
|
+ * 若有皮重:任务量 = 核定载重 - 皮重
|
|
|
+ * 若无皮重:任务量 = 核定载重 × 80%
|
|
|
+ * <p>
|
|
|
+ * 1.当订单余量>=车辆的(法定载重-首次皮重)且<(法定载重-首次皮重 + 2)时,接取的任务量为车辆的(法定载重-首次皮重);
|
|
|
+ * 2.订单余量<车辆的(法定载重-首次皮重)时,该车辆无法接单;
|
|
|
+ * 3.当订单余量>= (法定载重-首次皮重 + 2)时,接取的任务量为 (法定载重-首次皮重 + 2)
|
|
|
+ *
|
|
|
+ * @param truckNo
|
|
|
+ */
|
|
|
+ private Boolean checkCurTruckLoadVolume(RTruckVo truckNo, BigDecimal orderSurplus) {
|
|
|
+ log.info("开始校验当前车辆任务量!");
|
|
|
+ //核定载重
|
|
|
+ BigDecimal actualWeight = truckNo.getLegalLoad();
|
|
|
+ //首次皮重
|
|
|
+ BigDecimal tareWeight = truckNo.getTareWeight();
|
|
|
+ //任务量
|
|
|
+ BigDecimal loadVolume;
|
|
|
+ if (tareWeight != null) {
|
|
|
+ // 有皮重:任务量 = 核定载重 - 皮重
|
|
|
+ loadVolume = actualWeight.subtract(tareWeight);
|
|
|
+ log.info("车辆有皮重,皮重:{}, 任务量:{}", tareWeight, loadVolume);
|
|
|
+
|
|
|
+ } else {
|
|
|
+ // 无皮重:任务量 = 核定载重 × 80%
|
|
|
+ loadVolume = actualWeight.multiply(EIGHTY_PERCENT);
|
|
|
+ log.info("车辆无皮重,按80%核定载重计算,车辆任务量:{}", loadVolume);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (orderSurplus.compareTo(loadVolume) < 0) {
|
|
|
+ // 规则2:订单余量 < 任务量 → 无法接单
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
/**
|
|
|
* 装卸货地址
|
|
|
* @param logOrderIdList
|
|
|
@@ -388,7 +451,7 @@ public class WaybillOrderService {
|
|
|
orderResp.setStatus(Optional.ofNullable(order.getStatus()).map(String::valueOf).orElse(null));
|
|
|
orderResp.setStatusDesc(LogisticsOrderV1Enum.IN_TRANSIT.getCode().equals(order.getStatus()) ? "待接单" : "未知状态");
|
|
|
//设置余量
|
|
|
- String orderSurplus = getSupAmount(order.getTOrderId(), tradeIdAndOrderDetailVoMap, tradeIdAndLogOrderList, logisticsOrderIdAndSubtaskList);
|
|
|
+ BigDecimal orderSurplus = getSupAmount(order.getTOrderId(), tradeIdAndOrderDetailVoMap, tradeIdAndLogOrderList, logisticsOrderIdAndSubtaskList);
|
|
|
orderResp.setOrderSurplus(orderSurplus);
|
|
|
return orderResp;
|
|
|
}
|
|
|
@@ -741,7 +804,7 @@ public class WaybillOrderService {
|
|
|
wbOrderResp.setChargeTypeDesc(DictEnum.getLabel(DictTypeEnum.CHARGING_TYPE.getType(), logOrder.getBillingMode()));
|
|
|
//设置余量
|
|
|
KwtLogisticsOrder order = logOrderMap.getOrDefault(wbOrder.getLOrderId(), new KwtLogisticsOrder());
|
|
|
- String supAmount = getSupAmount(order.getTOrderId(), tradeIdAndOrderDetailVoMap, tradeIdAndLogOrderList, logisticsOrderIdAndSubtaskList);
|
|
|
+ BigDecimal supAmount = getSupAmount(order.getTOrderId(), tradeIdAndOrderDetailVoMap, tradeIdAndLogOrderList, logisticsOrderIdAndSubtaskList);
|
|
|
wbOrderResp.setOrderSurplus(supAmount);
|
|
|
//托运企业
|
|
|
KwtLogisticsOrderUnit consignEnt = logOrderIdAndUnitMap.getOrDefault(wbOrder.getLOrderId() + "-" + UnitTypeEnum.CONSIGN.getCode(), new KwtLogisticsOrderUnit());
|
|
|
@@ -818,7 +881,7 @@ public class WaybillOrderService {
|
|
|
|
|
|
}
|
|
|
|
|
|
- private static String getSupAmount(Long tradeOrderId,
|
|
|
+ private static BigDecimal getSupAmount(Long tradeOrderId,
|
|
|
Map<Long, OrderDetailVo> tradeIdAndOrderDetailVoMap,
|
|
|
Map<Long, List<KwtLogisticsOrder>> tradeIdAndLogOrderList,
|
|
|
Map<Long, List<KwtWaybillOrderSubtask>> logisticsOrderIdAndSubtaskList) {
|
|
|
@@ -837,7 +900,6 @@ public class WaybillOrderService {
|
|
|
.map(KwtWaybillOrderSubtask::getEntrustAmount)
|
|
|
.filter(Objects::nonNull)
|
|
|
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
- //logTotatalAmount = logTotatalAmount.add(loadAmountSum);
|
|
|
if (org.apache.commons.lang3.StringUtils.equals(billingMode, DictEnum.CHARGING_TYPE_1.getValue())){
|
|
|
BigDecimal unloadAmountSum = waybillOrderSubtasks.stream()
|
|
|
.filter(x->!Objects.equals(x.getStatus(),CarWaybillV1Enum.CANCELLED.getCode()))
|
|
|
@@ -857,8 +919,9 @@ public class WaybillOrderService {
|
|
|
//logTotatalAmount = logTotatalAmount.add(unloadAmountSum);
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
BigDecimal subSurplus = tradeAmount.subtract(logTotatalAmount).compareTo(BigDecimal.ZERO) <= 0 ? BigDecimal.ZERO : tradeAmount.subtract(logTotatalAmount);
|
|
|
- return subSurplus.setScale(2, RoundingMode.HALF_UP).toPlainString();
|
|
|
+ return subSurplus.setScale(2, RoundingMode.HALF_UP);
|
|
|
}
|
|
|
|
|
|
/**
|