|
@@ -6,19 +6,21 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
import com.sckw.contract.api.RemoteContractService;
|
|
import com.sckw.contract.api.RemoteContractService;
|
|
|
-import com.sckw.core.common.enums.enums.DictTypeEnum;
|
|
|
|
|
import com.sckw.core.common.enums.enums.ErrorCodeEnum;
|
|
import com.sckw.core.common.enums.enums.ErrorCodeEnum;
|
|
|
import com.sckw.core.exception.BusinessPlatfromException;
|
|
import com.sckw.core.exception.BusinessPlatfromException;
|
|
|
import com.sckw.core.model.enums.ForkliftStatusEnum;
|
|
import com.sckw.core.model.enums.ForkliftStatusEnum;
|
|
|
|
|
+import com.sckw.core.model.enums.LoadingTypeEnum;
|
|
|
import com.sckw.core.utils.CollectionUtils;
|
|
import com.sckw.core.utils.CollectionUtils;
|
|
|
import com.sckw.core.utils.StringUtils;
|
|
import com.sckw.core.utils.StringUtils;
|
|
|
import com.sckw.core.web.response.result.PageDataResult;
|
|
import com.sckw.core.web.response.result.PageDataResult;
|
|
|
import com.sckw.order.api.dubbo.TradeOrderInfoService;
|
|
import com.sckw.order.api.dubbo.TradeOrderInfoService;
|
|
|
import com.sckw.order.api.model.OrderUnitInfoDetailVO;
|
|
import com.sckw.order.api.model.OrderUnitInfoDetailVO;
|
|
|
import com.sckw.product.api.dubbo.GoodsInfoService;
|
|
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.RemoteSystemService;
|
|
|
-import com.sckw.transport.model.*;
|
|
|
|
|
|
|
+import com.sckw.transport.model.KwtForkliftWaybillOrder;
|
|
|
|
|
+import com.sckw.transport.model.KwtLogisticsOrder;
|
|
|
|
|
+import com.sckw.transport.model.KwtWaybillOrder;
|
|
|
|
|
+import com.sckw.transport.model.KwtWaybillOrderTicket;
|
|
|
import com.sckw.transport.model.param.WaybillOrderLoadingParam;
|
|
import com.sckw.transport.model.param.WaybillOrderLoadingParam;
|
|
|
import com.sckw.transport.model.param.forklift.reponse.ForkliftOrderResp;
|
|
import com.sckw.transport.model.param.forklift.reponse.ForkliftOrderResp;
|
|
|
import com.sckw.transport.model.param.forklift.request.ForkliftOrderCancelParam;
|
|
import com.sckw.transport.model.param.forklift.request.ForkliftOrderCancelParam;
|
|
@@ -97,7 +99,8 @@ public class ForkliftOrderService {
|
|
|
public PageDataResult<ForkliftOrderResp> pageQueryForkliftOrder(ForkliftOrderQueryParam param) {
|
|
public PageDataResult<ForkliftOrderResp> pageQueryForkliftOrder(ForkliftOrderQueryParam param) {
|
|
|
log.info("查询铲车司机订单:{}", JSON.toJSONString(param));
|
|
log.info("查询铲车司机订单:{}", JSON.toJSONString(param));
|
|
|
LambdaQueryWrapper<KwtForkliftWaybillOrder> wrapper = Wrappers.<KwtForkliftWaybillOrder>lambdaQuery()
|
|
LambdaQueryWrapper<KwtForkliftWaybillOrder> wrapper = Wrappers.<KwtForkliftWaybillOrder>lambdaQuery()
|
|
|
- .eq(KwtForkliftWaybillOrder::getDriverId, param.getDriverId())
|
|
|
|
|
|
|
+ .eq(param.getDriverId() != null, KwtForkliftWaybillOrder::getDriverId, param.getDriverId())
|
|
|
|
|
+ .in(CollectionUtils.isNotEmpty(param.getDictIdList()),KwtForkliftWaybillOrder::getDictId, param.getDictIdList())
|
|
|
.orderByDesc(KwtForkliftWaybillOrder::getCreateTime)
|
|
.orderByDesc(KwtForkliftWaybillOrder::getCreateTime)
|
|
|
.orderByDesc(KwtForkliftWaybillOrder::getId);
|
|
.orderByDesc(KwtForkliftWaybillOrder::getId);
|
|
|
if (ForkliftStatusEnum.PENDING_ORDERS.getCode().equals(param.getStatus())) {
|
|
if (ForkliftStatusEnum.PENDING_ORDERS.getCode().equals(param.getStatus())) {
|
|
@@ -186,6 +189,7 @@ public class ForkliftOrderService {
|
|
|
forklift.setWaybillOrderId(forkliftOrder.getWOrderId());
|
|
forklift.setWaybillOrderId(forkliftOrder.getWOrderId());
|
|
|
forklift.setLogisticsOrderId(forkliftOrder.getLOrderId());
|
|
forklift.setLogisticsOrderId(forkliftOrder.getLOrderId());
|
|
|
forklift.setLoadingType(forkliftOrder.getLoadingType());
|
|
forklift.setLoadingType(forkliftOrder.getLoadingType());
|
|
|
|
|
+ forklift.setLoadingTypeDesc(LoadingTypeEnum.geDesc(forkliftOrder.getLoadingType()));
|
|
|
forklift.setStatus(forkliftOrder.getStatus());
|
|
forklift.setStatus(forkliftOrder.getStatus());
|
|
|
forklift.setStatusDesc(ForkliftStatusEnum.getDesc(forkliftOrder.getStatus()));
|
|
forklift.setStatusDesc(ForkliftStatusEnum.getDesc(forkliftOrder.getStatus()));
|
|
|
forklift.setDriverId(forkliftOrder.getDriverId());
|
|
forklift.setDriverId(forkliftOrder.getDriverId());
|
|
@@ -193,7 +197,6 @@ public class ForkliftOrderService {
|
|
|
forklift.setDriverPhone(forkliftOrder.getDriverPhone());
|
|
forklift.setDriverPhone(forkliftOrder.getDriverPhone());
|
|
|
forklift.setAcceptOrderTime(forkliftOrder.getForkliftAcceptTime());
|
|
forklift.setAcceptOrderTime(forkliftOrder.getForkliftAcceptTime());
|
|
|
forklift.setFinishTime(forkliftOrder.getFinishTime());
|
|
forklift.setFinishTime(forkliftOrder.getFinishTime());
|
|
|
- forklift.setFinishTime(forkliftOrder.getWaybillAcceptTime());
|
|
|
|
|
forklift.setWaybillAcceptTime(forkliftOrder.getWaybillAcceptTime());
|
|
forklift.setWaybillAcceptTime(forkliftOrder.getWaybillAcceptTime());
|
|
|
forklift.setCarAxisName(forkliftOrder.getCarAxis());
|
|
forklift.setCarAxisName(forkliftOrder.getCarAxis());
|
|
|
forklift.setTruckType(forkliftOrder.getTruckType());
|
|
forklift.setTruckType(forkliftOrder.getTruckType());
|
|
@@ -232,40 +235,46 @@ public class ForkliftOrderService {
|
|
|
log.info("铲车订单状态统计:{}", JSON.toJSONString(param));
|
|
log.info("铲车订单状态统计:{}", JSON.toJSONString(param));
|
|
|
StatisticsWaybillResp resp = new StatisticsWaybillResp();
|
|
StatisticsWaybillResp resp = new StatisticsWaybillResp();
|
|
|
if (StringUtils.isBlank(param.getDriverId())) {
|
|
if (StringUtils.isBlank(param.getDriverId())) {
|
|
|
- resp.setOrderStatusStatistics(buildDefaultStatusStatistics());
|
|
|
|
|
- return resp;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- LambdaQueryWrapper<KwtForkliftWaybillOrder> queryWrapper = Wrappers.<KwtForkliftWaybillOrder>lambdaQuery()
|
|
|
|
|
- .eq(KwtForkliftWaybillOrder::getDriverId, param.getDriverId())
|
|
|
|
|
- .eq( param.getStatus() != null, KwtForkliftWaybillOrder::getStatus, param.getStatus())
|
|
|
|
|
- .orderByDesc(KwtForkliftWaybillOrder::getCreateTime)
|
|
|
|
|
- .orderByDesc(KwtForkliftWaybillOrder::getId);
|
|
|
|
|
-
|
|
|
|
|
- //查询铲车订单
|
|
|
|
|
- Page<KwtForkliftWaybillOrder> forkliftOrderPage = forkliftWaybillOrderRepository.page(new Page<>(param.getPageNum(), param.getPageSize()), queryWrapper);
|
|
|
|
|
- List<KwtForkliftWaybillOrder> records = forkliftOrderPage.getRecords();
|
|
|
|
|
- if (CollectionUtils.isEmpty(records)) {
|
|
|
|
|
- log.info("当前铲车司机的无铲车运单,统计结果为空, 铲车司机id:{}", param.getDriverId());
|
|
|
|
|
resp.setOrderStatusStatistics(buildDefaultStatusStatistics());
|
|
resp.setOrderStatusStatistics(buildDefaultStatusStatistics());
|
|
|
return resp;
|
|
return resp;
|
|
|
}
|
|
}
|
|
|
- List<ForkliftOrderResp> forkliftOrderPageResult = getForkliftOrderPageResult(records);
|
|
|
|
|
- Map<Integer, Long> statusCountMap = forkliftOrderPageResult.stream().collect(Collectors.groupingBy(ForkliftOrderResp::getStatus, Collectors.counting()));
|
|
|
|
|
- List<StatisticsWaybillResp.OrderBillStatusStatistics> orderStatusStatistics = new ArrayList<>();
|
|
|
|
|
- for (int targetStatus : Arrays.asList(1, 5, 10)) {
|
|
|
|
|
- Long count = statusCountMap.getOrDefault(targetStatus, 0L);
|
|
|
|
|
- StatisticsWaybillResp.OrderBillStatusStatistics aggregateStat = new StatisticsWaybillResp.OrderBillStatusStatistics();
|
|
|
|
|
- aggregateStat.setOrderStatus(String.valueOf(targetStatus));
|
|
|
|
|
- aggregateStat.setOrderStatusDesc(ForkliftStatusEnum.getDesc(targetStatus));
|
|
|
|
|
- aggregateStat.setOrderNum(String.valueOf(count));
|
|
|
|
|
-
|
|
|
|
|
- orderStatusStatistics.add(aggregateStat);
|
|
|
|
|
- resp.setOrderStatusStatistics(orderStatusStatistics);
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ List<StatisticsWaybillResp.OrderBillStatusStatistics> resultList = new ArrayList<>();
|
|
|
|
|
+
|
|
|
|
|
+ //1. 统计“待接单”
|
|
|
|
|
+ long pendingCount = forkliftWaybillOrderRepository.count(Wrappers.<KwtForkliftWaybillOrder>lambdaQuery()
|
|
|
|
|
+ .eq(KwtForkliftWaybillOrder::getStatus, 1));
|
|
|
|
|
+ resultList.add(buildStatItem("1", ForkliftStatusEnum.getDesc(1), pendingCount));
|
|
|
|
|
+
|
|
|
|
|
+ //2. 统计“已接单、已装载”
|
|
|
|
|
+ long acceptedCount = forkliftWaybillOrderRepository.count(
|
|
|
|
|
+ Wrappers.<KwtForkliftWaybillOrder>lambdaQuery()
|
|
|
|
|
+ .eq(KwtForkliftWaybillOrder::getDriverId, param.getDriverId())
|
|
|
|
|
+ .eq(KwtForkliftWaybillOrder::getStatus, 5));
|
|
|
|
|
+ resultList.add(buildStatItem("5", ForkliftStatusEnum.getDesc(5), acceptedCount));
|
|
|
|
|
+
|
|
|
|
|
+ // 3. 统计“已装载”
|
|
|
|
|
+ long loadedCount = forkliftWaybillOrderRepository.count(
|
|
|
|
|
+ Wrappers.<KwtForkliftWaybillOrder>lambdaQuery()
|
|
|
|
|
+ .eq(KwtForkliftWaybillOrder::getDriverId, param.getDriverId())
|
|
|
|
|
+ .eq(KwtForkliftWaybillOrder::getStatus, 10));
|
|
|
|
|
+ resultList.add(buildStatItem("10", ForkliftStatusEnum.getDesc(10), loadedCount));
|
|
|
|
|
+
|
|
|
|
|
+ // 组装返回结果
|
|
|
|
|
+ resp.setOrderStatusStatistics(resultList);
|
|
|
return resp;
|
|
return resp;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 构建统计项
|
|
|
|
|
+ */
|
|
|
|
|
+ private StatisticsWaybillResp.OrderBillStatusStatistics buildStatItem(String status, String desc, Long count) {
|
|
|
|
|
+ StatisticsWaybillResp.OrderBillStatusStatistics item = new StatisticsWaybillResp.OrderBillStatusStatistics();
|
|
|
|
|
+ item.setOrderStatus(status);
|
|
|
|
|
+ item.setOrderStatusDesc(desc);
|
|
|
|
|
+ item.setOrderNum(String.valueOf(count));
|
|
|
|
|
+ return item;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* 构建默认的状态统计列表(三种状态,数量均为0)
|
|
* 构建默认的状态统计列表(三种状态,数量均为0)
|
|
@@ -301,8 +310,6 @@ public class ForkliftOrderService {
|
|
|
*/
|
|
*/
|
|
|
public void forkliftOrderTaking(ForkliftOrderTakingParam param) {
|
|
public void forkliftOrderTaking(ForkliftOrderTakingParam param) {
|
|
|
log.info("铲车接单:{}", JSON.toJSONString(param));
|
|
log.info("铲车接单:{}", JSON.toJSONString(param));
|
|
|
- //校验运单状态
|
|
|
|
|
- KwtWaybillOrder waybillOrder = checkWOrderStatus(param);
|
|
|
|
|
|
|
|
|
|
// 1. 幂等性校验
|
|
// 1. 幂等性校验
|
|
|
checkIdempotent(param);
|
|
checkIdempotent(param);
|
|
@@ -324,7 +331,7 @@ public class ForkliftOrderService {
|
|
|
checkIdempotent(param);
|
|
checkIdempotent(param);
|
|
|
|
|
|
|
|
// 5. 执行接单
|
|
// 5. 执行接单
|
|
|
- createForkliftWaybillOrder(param, waybillOrder);
|
|
|
|
|
|
|
+ createForkliftWaybillOrder(param);
|
|
|
|
|
|
|
|
} finally {
|
|
} finally {
|
|
|
// 6. 释放分布式锁
|
|
// 6. 释放分布式锁
|
|
@@ -335,20 +342,6 @@ public class ForkliftOrderService {
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- /**
|
|
|
|
|
- * 校验运单状态
|
|
|
|
|
- * @param param
|
|
|
|
|
- */
|
|
|
|
|
- private KwtWaybillOrder checkWOrderStatus(ForkliftOrderTakingParam param) {
|
|
|
|
|
- //校验
|
|
|
|
|
- KwtWaybillOrder waybillOrder = waybillOrderRepository.getById(param.getForkliftOrderId());
|
|
|
|
|
- if (waybillOrder == null) {
|
|
|
|
|
- throw new BusinessPlatfromException(ErrorCodeEnum.WAYBILL_ORDER_STATUS_ERROR, "当前运单不是可接单状态!");
|
|
|
|
|
- }
|
|
|
|
|
- return waybillOrder;
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
-
|
|
|
|
|
/**
|
|
/**
|
|
|
* 幂等性校验:检查是否已经存在该铲车针对该物流运单的有效运单
|
|
* 幂等性校验:检查是否已经存在该铲车针对该物流运单的有效运单
|
|
|
* @param param 接单参数
|
|
* @param param 接单参数
|
|
@@ -414,22 +407,26 @@ public class ForkliftOrderService {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
- * 创建铲车订单
|
|
|
|
|
|
|
+ * 铲车接单
|
|
|
* @param param
|
|
* @param param
|
|
|
- * @param waybillOrder
|
|
|
|
|
*/
|
|
*/
|
|
|
- private void createForkliftWaybillOrder(ForkliftOrderTakingParam param, KwtWaybillOrder waybillOrder) {
|
|
|
|
|
|
|
+ private void createForkliftWaybillOrder(ForkliftOrderTakingParam param) {
|
|
|
log.info("生成铲车订单,入参参数:{}", JSON.toJSONString(param));
|
|
log.info("生成铲车订单,入参参数:{}", JSON.toJSONString(param));
|
|
|
KwtForkliftWaybillOrder forkliftWaybillOrder = forkliftWaybillOrderRepository.queryForkliftWaybillOrderByFOrderId(param.getForkliftOrderId());
|
|
KwtForkliftWaybillOrder forkliftWaybillOrder = forkliftWaybillOrderRepository.queryForkliftWaybillOrderByFOrderId(param.getForkliftOrderId());
|
|
|
if (forkliftWaybillOrder == null) {
|
|
if (forkliftWaybillOrder == null) {
|
|
|
throw new BusinessPlatfromException(ErrorCodeEnum.FORKLIFT_ORDER_NOT_FOUND, "当前铲车订单不存在!");
|
|
throw new BusinessPlatfromException(ErrorCodeEnum.FORKLIFT_ORDER_NOT_FOUND, "当前铲车订单不存在!");
|
|
|
}
|
|
}
|
|
|
- if (ForkliftStatusEnum.PENDING_ORDERS.getCode().equals(forkliftWaybillOrder.getStatus())) {
|
|
|
|
|
|
|
+ if (!ForkliftStatusEnum.PENDING_ORDERS.getCode().equals(forkliftWaybillOrder.getStatus())) {
|
|
|
throw new BusinessPlatfromException(ErrorCodeEnum.FORKLIFT_ORDER_STATUS_ERROR, "当前铲车订单状态异常,不能接单!");
|
|
throw new BusinessPlatfromException(ErrorCodeEnum.FORKLIFT_ORDER_STATUS_ERROR, "当前铲车订单状态异常,不能接单!");
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
forkliftWaybillOrder.setStatus(ForkliftStatusEnum.ORDER_TAKING.getCode());
|
|
forkliftWaybillOrder.setStatus(ForkliftStatusEnum.ORDER_TAKING.getCode());
|
|
|
- log.info("创建铲车订单成功,订单ID:{}", waybillOrder.getId());
|
|
|
|
|
|
|
+ forkliftWaybillOrder.setDriverId(param.getDriverId());
|
|
|
|
|
+ forkliftWaybillOrder.setDriverPhone(param.getDriverPhone());
|
|
|
|
|
+ forkliftWaybillOrder.setDriverName(param.getDriverName());
|
|
|
|
|
+ forkliftWaybillOrder.setForkliftAcceptTime(new Date());
|
|
|
|
|
+ forkliftWaybillOrderRepository.updateById(forkliftWaybillOrder);
|
|
|
|
|
+ log.info("铲车接单成功,订单ID:{}", forkliftWaybillOrder.getWOrderId());
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
@@ -444,7 +441,7 @@ public class ForkliftOrderService {
|
|
|
if (forkliftWaybillOrder == null) {
|
|
if (forkliftWaybillOrder == null) {
|
|
|
throw new BusinessPlatfromException(ErrorCodeEnum.FORKLIFT_ORDER_NOT_FOUND, "当前铲车订单不存在!");
|
|
throw new BusinessPlatfromException(ErrorCodeEnum.FORKLIFT_ORDER_NOT_FOUND, "当前铲车订单不存在!");
|
|
|
}
|
|
}
|
|
|
- if (ForkliftStatusEnum.ORDER_TAKING.getCode().equals(forkliftWaybillOrder.getStatus())) {
|
|
|
|
|
|
|
+ if (!ForkliftStatusEnum.ORDER_TAKING.getCode().equals(forkliftWaybillOrder.getStatus())) {
|
|
|
throw new BusinessPlatfromException(ErrorCodeEnum.FORKLIFT_ORDER_STATUS_ERROR, "当前铲车订单状态异常,不能取消订单!");
|
|
throw new BusinessPlatfromException(ErrorCodeEnum.FORKLIFT_ORDER_STATUS_ERROR, "当前铲车订单状态异常,不能取消订单!");
|
|
|
}
|
|
}
|
|
|
forkliftWaybillOrder.setStatus(ForkliftStatusEnum.PENDING_ORDERS.getCode());
|
|
forkliftWaybillOrder.setStatus(ForkliftStatusEnum.PENDING_ORDERS.getCode());
|
|
@@ -462,11 +459,12 @@ public class ForkliftOrderService {
|
|
|
if (forkliftWaybillOrder == null) {
|
|
if (forkliftWaybillOrder == null) {
|
|
|
throw new BusinessPlatfromException(ErrorCodeEnum.FORKLIFT_ORDER_NOT_FOUND, "当前铲车订单不存在!");
|
|
throw new BusinessPlatfromException(ErrorCodeEnum.FORKLIFT_ORDER_NOT_FOUND, "当前铲车订单不存在!");
|
|
|
}
|
|
}
|
|
|
- if (ForkliftStatusEnum.ORDER_TAKING.getCode().equals(forkliftWaybillOrder.getStatus())) {
|
|
|
|
|
|
|
+ if (!ForkliftStatusEnum.ORDER_TAKING.getCode().equals(forkliftWaybillOrder.getStatus())) {
|
|
|
throw new BusinessPlatfromException(ErrorCodeEnum.FORKLIFT_ORDER_STATUS_ERROR, "当前铲车订单状态异常,不能装载完成!");
|
|
throw new BusinessPlatfromException(ErrorCodeEnum.FORKLIFT_ORDER_STATUS_ERROR, "当前铲车订单状态异常,不能装载完成!");
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
forkliftWaybillOrder.setStatus(ForkliftStatusEnum.COMPLETED.getCode());
|
|
forkliftWaybillOrder.setStatus(ForkliftStatusEnum.COMPLETED.getCode());
|
|
|
|
|
+ forkliftWaybillOrder.setFinishTime(new Date());
|
|
|
forkliftWaybillOrderRepository.updateById(forkliftWaybillOrder);
|
|
forkliftWaybillOrderRepository.updateById(forkliftWaybillOrder);
|
|
|
|
|
|
|
|
//更新物流运单的状态(已装货)
|
|
//更新物流运单的状态(已装货)
|