|
|
@@ -5,23 +5,31 @@ 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.sckw.contract.api.RemoteContractService;
|
|
|
+import com.sckw.core.common.enums.enums.DictTypeEnum;
|
|
|
import com.sckw.core.common.enums.enums.ErrorCodeEnum;
|
|
|
import com.sckw.core.exception.BusinessPlatfromException;
|
|
|
import com.sckw.core.model.enums.ForkliftStatusEnum;
|
|
|
import com.sckw.core.utils.CollectionUtils;
|
|
|
+import com.sckw.core.utils.StringUtils;
|
|
|
import com.sckw.core.web.response.result.PageDataResult;
|
|
|
-import com.sckw.transport.model.KwtForkliftWaybillOrder;
|
|
|
-import com.sckw.transport.model.KwtWaybillOrder;
|
|
|
+import com.sckw.order.api.dubbo.TradeOrderInfoService;
|
|
|
+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.transport.model.*;
|
|
|
import com.sckw.transport.model.param.WaybillOrderLoadingParam;
|
|
|
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.ForkliftOrderQueryParam;
|
|
|
import com.sckw.transport.model.param.forklift.request.ForkliftOrderTakingParam;
|
|
|
-import com.sckw.transport.repository.KwtForkliftWaybillOrderRepository;
|
|
|
-import com.sckw.transport.repository.KwtWaybillOrderRepository;
|
|
|
+import com.sckw.transport.model.vo.StatisticsWaybillResp;
|
|
|
+import com.sckw.transport.repository.*;
|
|
|
import jakarta.annotation.Resource;
|
|
|
import lombok.RequiredArgsConstructor;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.apache.dubbo.config.annotation.DubboReference;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.data.redis.core.RedisTemplate;
|
|
|
import org.springframework.data.redis.core.script.DefaultRedisScript;
|
|
|
@@ -44,9 +52,25 @@ import java.util.stream.Collectors;
|
|
|
@RequiredArgsConstructor
|
|
|
public class ForkliftOrderService {
|
|
|
|
|
|
+ private final KwtForkliftWaybillOrderRepository forkliftWaybillOrderRepository;
|
|
|
private final KwtWaybillOrderRepository waybillOrderRepository;
|
|
|
+ private final KwtWaybillOrderSubtaskRepository waybillOrderSubtaskRepository;
|
|
|
+ private final KwtWaybillOrderTicketRepository waybillOrderTicketRepository;
|
|
|
+ private final KwtLogisticsOrderRepository logisticsOrderRepository;
|
|
|
+ private final KwtLogisticsOrderGoodsRepository logisticsOrderGoodsRepository;
|
|
|
+
|
|
|
+ @DubboReference(version = "1.0.0", group = "design", check = false)
|
|
|
+ private RemoteContractService remoteContractService;
|
|
|
+
|
|
|
+ @DubboReference(version = "1.0.0", group = "design", check = false, timeout = 80000)
|
|
|
+ TradeOrderInfoService tradeOrderInfoService;
|
|
|
+
|
|
|
+ @DubboReference(version = "1.0.0", group = "design", check = false, timeout = 6000)
|
|
|
+ RemoteSystemService remoteSystemService;
|
|
|
+
|
|
|
+ @DubboReference(version = "1.0.0", group = "design", check = false, timeout = 6000)
|
|
|
+ GoodsInfoService goodsInfoService;
|
|
|
|
|
|
- private final KwtForkliftWaybillOrderRepository forkliftWaybillOrderRepository;
|
|
|
|
|
|
@Autowired
|
|
|
WaybillOrderService waybillOrderService;
|
|
|
@@ -64,29 +88,6 @@ public class ForkliftOrderService {
|
|
|
// 锁重试间隔100毫秒
|
|
|
private static final long LOCK_RETRY_INTERVAL = 100;
|
|
|
|
|
|
- /**
|
|
|
- * 分页查询铲车运单
|
|
|
- * @param param
|
|
|
- * @return
|
|
|
- */
|
|
|
- public PageDataResult<ForkliftOrderResp> pageQueryForkliftWaybillOrder(ForkliftOrderQueryParam param) {
|
|
|
- log.info("查询铲车司机的物流运单:{}", JSON.toJSONString(param));
|
|
|
- //查询到底装货点的运单
|
|
|
- Page<KwtWaybillOrder> pageByStatus = waybillOrderRepository.findPageByStatus(param.getPageNum(), param.getPageSize());
|
|
|
- List<KwtWaybillOrder> records = pageByStatus.getRecords();
|
|
|
- if (CollectionUtils.isEmpty(records)) {
|
|
|
- return PageDataResult.empty(param.getPageNum(), param.getPageSize());
|
|
|
- }
|
|
|
- List<ForkliftOrderResp> forkliftOrderList = new ArrayList<>();
|
|
|
- for (KwtWaybillOrder record : records) {
|
|
|
- ForkliftOrderResp forklift = new ForkliftOrderResp();
|
|
|
- forklift.setDriverId(record.getDriverId());
|
|
|
- forklift.setDriverName(record.getDriverName());
|
|
|
- forkliftOrderList.add(forklift);
|
|
|
- }
|
|
|
- return PageDataResult.success(param.getPageNum(), param.getPageSize(), pageByStatus.getTotal(), forkliftOrderList);
|
|
|
- }
|
|
|
-
|
|
|
|
|
|
/**
|
|
|
* 分页查询铲车订单
|
|
|
@@ -106,32 +107,231 @@ public class ForkliftOrderService {
|
|
|
} else if (ForkliftStatusEnum.COMPLETED.getCode().equals(param.getStatus())) {
|
|
|
wrapper.eq(KwtForkliftWaybillOrder::getStatus, 10);
|
|
|
}
|
|
|
+ //查询铲车订单
|
|
|
Page<KwtForkliftWaybillOrder> pageByStatus = forkliftWaybillOrderRepository.page(new Page<>(param.getPageNum(), param.getPageSize()), wrapper);
|
|
|
List<KwtForkliftWaybillOrder> records = pageByStatus.getRecords();
|
|
|
if (CollectionUtils.isEmpty(records)) {
|
|
|
- log.info("当前铲车司机无铲车订单,铲车司机id:{}", param.getDriverId());
|
|
|
+ log.info("当前铲车司机无铲车订单信息,铲车司机id:{}", param.getDriverId());
|
|
|
return PageDataResult.empty(param.getPageNum(), param.getPageSize());
|
|
|
}
|
|
|
+ List<ForkliftOrderResp> forkliftOrderPageResult = getForkliftOrderPageResult(records);
|
|
|
+ return PageDataResult.success(param.getPageNum(), param.getPageSize(), pageByStatus.getTotal(), forkliftOrderPageResult);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 获取铲车订单数据
|
|
|
+ * @param records
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private List<ForkliftOrderResp> getForkliftOrderPageResult(List<KwtForkliftWaybillOrder> records) {
|
|
|
+ Set<Long> wOrderIds = records.stream().map(KwtForkliftWaybillOrder::getWOrderId).filter(Objects::nonNull).collect(Collectors.toSet());
|
|
|
//查询运单
|
|
|
- List<Long> wOrderId = records.stream().map(KwtForkliftWaybillOrder::getWOrderId).filter(Objects::nonNull).collect(Collectors.toList());
|
|
|
- List<KwtWaybillOrder> waybillOrders = waybillOrderRepository.findOneById(wOrderId);
|
|
|
+ List<KwtWaybillOrder> waybillOrders = waybillOrderRepository.queryByBillOrderIds(wOrderIds);
|
|
|
if (CollectionUtils.isEmpty(waybillOrders)) {
|
|
|
- log.info("当前铲车司机无物流运单,运单id:{}", JSON.toJSONString(param));
|
|
|
- return PageDataResult.empty(param.getPageNum(), param.getPageSize());
|
|
|
+ log.info("【铲车】无物流运单信息,运单id:{}", JSON.toJSONString(wOrderIds));
|
|
|
+ return Collections.emptyList();
|
|
|
+ }
|
|
|
+ Map<Long, KwtWaybillOrder> waybillOrderMap = waybillOrders.stream()
|
|
|
+ .collect(Collectors.toMap(KwtWaybillOrder::getId, Function.identity(), (x, y) -> x));
|
|
|
+
|
|
|
+ //查询子运单
|
|
|
+ List<KwtWaybillOrderSubtask> waybillOrderSubtasks = waybillOrderSubtaskRepository.findOneByWOrderIds(wOrderIds);
|
|
|
+ if (CollectionUtils.isEmpty(waybillOrderSubtasks)) {
|
|
|
+ log.info("【铲车】无物流子运单信息,运单id:{}", JSON.toJSONString(wOrderIds));
|
|
|
+ return Collections.emptyList();
|
|
|
+ }
|
|
|
+ Map<Long, KwtWaybillOrderSubtask> subtaskMap = waybillOrderSubtasks.stream()
|
|
|
+ .collect(Collectors.toMap(KwtWaybillOrderSubtask::getWOrderId, Function.identity(), (x, y) -> x));
|
|
|
+ Set<Long> lOrderIds = waybillOrderSubtasks.stream().map(KwtWaybillOrderSubtask::getLOrderId).collect(Collectors.toSet());
|
|
|
+
|
|
|
+ //查询运单装卸货
|
|
|
+ List<KwtWaybillOrderTicket> waybillOrderTickets = waybillOrderTicketRepository.queryByWOrderIds(new ArrayList<>(wOrderIds));
|
|
|
+ if (CollectionUtils.isEmpty(waybillOrderTickets)) {
|
|
|
+ log.info("【铲车】无运单装卸货信息,运单id:{}", JSON.toJSONString(wOrderIds));
|
|
|
+ return Collections.emptyList();
|
|
|
+ }
|
|
|
+ Map<String, KwtWaybillOrderTicket> waybillOrderTicketMap = waybillOrderTickets.stream()
|
|
|
+ .collect(Collectors.toMap(ticket -> ticket.getWOrderId() + "-" + ticket.getType(), Function.identity(), (x, y) -> x));
|
|
|
+
|
|
|
+ //查询物流订单
|
|
|
+ List<KwtLogisticsOrder> logisticsOrder = logisticsOrderRepository.queryByLogOrderIds(lOrderIds);
|
|
|
+ if (CollectionUtils.isEmpty(logisticsOrder)) {
|
|
|
+ log.info("【铲车】无物流订单信息,物流订单id:{}", JSON.toJSONString(lOrderIds));
|
|
|
+ return Collections.emptyList();
|
|
|
+ }
|
|
|
+ Map<Long, KwtLogisticsOrder> logisticsOrderMap = logisticsOrder.stream().collect(Collectors.toMap(KwtLogisticsOrder::getId, Function.identity(), (x, y) -> x));
|
|
|
+ Set<Long> tOrderIds = logisticsOrder.stream().map(KwtLogisticsOrder::getTOrderId).collect(Collectors.toSet());
|
|
|
+
|
|
|
+ //查询物流商品
|
|
|
+ List<KwtLogisticsOrderGoods> logisticsOrderGoods = logisticsOrderGoodsRepository.queryByLogOrderIds((List<Long>) lOrderIds);
|
|
|
+ if (CollectionUtils.isEmpty(logisticsOrderGoods)) {
|
|
|
+ log.info("【铲车】无订单商品信息,物流订单id:{}", JSON.toJSONString(lOrderIds));
|
|
|
+ return Collections.emptyList();
|
|
|
+ }
|
|
|
+ Map<Long, KwtLogisticsOrderGoods> logisticsOrderGoodsMap = logisticsOrderGoods.stream().collect(Collectors.toMap(KwtLogisticsOrderGoods::getId, Function.identity(), (x, y) -> x));
|
|
|
+
|
|
|
+ //交易商品信息
|
|
|
+ List<Long> goodsIds = logisticsOrderGoods.stream().map(KwtLogisticsOrderGoods::getGoodsId).distinct().collect(Collectors.toList());
|
|
|
+ if (CollectionUtils.isEmpty(goodsIds)) {
|
|
|
+ log.info("【铲车】无订单商品信息,商品id:{}", JSON.toJSONString(goodsIds));
|
|
|
+ }
|
|
|
+ Map<Long, KwpGoods> goodsIdAndGoodsMap = goodsInfoService.getGoodsByIds(goodsIds);
|
|
|
+
|
|
|
+ //查询字典
|
|
|
+ Map<String, Map<String, String>> dictValueAndDictResDtoMap = remoteSystemService.queryDictByType(Arrays.asList(DictTypeEnum.PRODUCT_NAME_TYPE.getType(), DictTypeEnum.GOODS_SPEC.getType()));
|
|
|
+
|
|
|
+ //查询贸易订单企业信息
|
|
|
+ List<OrderUnitInfoDetailVO> orderUnitInfoDetailVOS = tradeOrderInfoService.queryOrderUnitInfByTOrderId(tOrderIds);
|
|
|
+ if (CollectionUtils.isEmpty(orderUnitInfoDetailVOS)) {
|
|
|
+ log.info("【铲车】无订单企业信息,物流订单id:{}", JSON.toJSONString(lOrderIds));
|
|
|
+ return Collections.emptyList();
|
|
|
}
|
|
|
- Map<Long, KwtWaybillOrder> waybillOrderMap = waybillOrders.stream().collect(Collectors.toMap(KwtWaybillOrder::getId, Function.identity(), (x, y) -> x));
|
|
|
+ Map<String, OrderUnitInfoDetailVO> tradeOrderAndUnit = orderUnitInfoDetailVOS.stream().collect(Collectors.toMap(unit -> unit.getTOrderId() + "-" + unit.getUnitType(), Function.identity(), (x, y) -> x));
|
|
|
+
|
|
|
+ //组装铲车订单数据
|
|
|
+ return records.stream()
|
|
|
+ .map(forkliftOrder -> buildForkliftOrderResp(forkliftOrder, waybillOrderMap, subtaskMap, waybillOrderTicketMap, logisticsOrderMap, logisticsOrderGoodsMap, goodsIdAndGoodsMap, dictValueAndDictResDtoMap, tradeOrderAndUnit))
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ }
|
|
|
|
|
|
- List<ForkliftOrderResp> forkliftOrderList = new ArrayList<>();
|
|
|
- for (KwtForkliftWaybillOrder record : records) {
|
|
|
|
|
|
+ /**
|
|
|
+ * 组装铲车订单信息
|
|
|
+ * @param forkliftOrder
|
|
|
+ * @param waybillOrderMap
|
|
|
+ * @param subtaskMap
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private ForkliftOrderResp buildForkliftOrderResp(KwtForkliftWaybillOrder forkliftOrder,
|
|
|
+ Map<Long, KwtWaybillOrder> waybillOrderMap,
|
|
|
+ Map<Long, KwtWaybillOrderSubtask> subtaskMap,
|
|
|
+ Map<String, KwtWaybillOrderTicket> waybillOrderTicketMap,
|
|
|
+ Map<Long, KwtLogisticsOrder> logisticsOrderMap,
|
|
|
+ Map<Long, KwtLogisticsOrderGoods> logisticsOrderGoodsMap,
|
|
|
+ Map<Long, KwpGoods> goodsIdAndGoodsMap,
|
|
|
+ Map<String, Map<String, String>> dictValueAndDictResDtoMap,
|
|
|
+ Map<String, OrderUnitInfoDetailVO> tradeOrderAndUnit) {
|
|
|
+ ForkliftOrderResp forklift = new ForkliftOrderResp();
|
|
|
+ forklift.setId(forkliftOrder.getId());
|
|
|
+ forklift.setFOrderNo(forkliftOrder.getFOrderNo());
|
|
|
+ forklift.setEntId(forkliftOrder.getEntId());
|
|
|
+ forklift.setWOrderId(forkliftOrder.getWOrderId());
|
|
|
+ forklift.setLOrderId(forkliftOrder.getLOrderId());
|
|
|
+ forklift.setLoadingType(forkliftOrder.getLoadingType());
|
|
|
+ forklift.setStatus(forkliftOrder.getStatus());
|
|
|
+ forklift.setDriverId(forkliftOrder.getDriverId());
|
|
|
+ forklift.setDriverName(forkliftOrder.getDriverName());
|
|
|
+ forklift.setDriverPhone(forkliftOrder.getDriverPhone());
|
|
|
+ forklift.setAcceptOrderTime(forkliftOrder.getForkliftAcceptTime());
|
|
|
+ forklift.setFinishTime(forkliftOrder.getFinishTime());
|
|
|
+ forklift.setFinishTime(forkliftOrder.getWaybillAcceptTime());
|
|
|
+ forklift.setCarAxisName(forkliftOrder.getCarAxis());
|
|
|
+ forklift.setTruckType(forkliftOrder.getTruckType());
|
|
|
+
|
|
|
+ //运单数据
|
|
|
+ KwtWaybillOrder waybillOrder = waybillOrderMap.getOrDefault(forkliftOrder.getWOrderId(), new KwtWaybillOrder());
|
|
|
+ forklift.setTruckId(waybillOrder.getTruckId());
|
|
|
+ forklift.setTruckNo(waybillOrder.getTruckNo());
|
|
|
+ forklift.setName(waybillOrder.getDriverName());
|
|
|
+ forklift.setPhone(waybillOrder.getDriverPhone());
|
|
|
+
|
|
|
+
|
|
|
+ //子运单数据
|
|
|
+ KwtWaybillOrderSubtask subtask = subtaskMap.getOrDefault(forkliftOrder.getWOrderId(), new KwtWaybillOrderSubtask());
|
|
|
+ forklift.setTaskNum(subtask.getEntrustAmount());
|
|
|
+
|
|
|
+ //采购企业信息
|
|
|
+ KwtLogisticsOrder logisticsOrder = logisticsOrderMap.getOrDefault(waybillOrder.getLOrderId(), new KwtLogisticsOrder());
|
|
|
+ OrderUnitInfoDetailVO orderUnit = tradeOrderAndUnit.getOrDefault(logisticsOrder.getTOrderId() + "-" + 1, new OrderUnitInfoDetailVO());
|
|
|
+ forklift.setPrEntId(orderUnit.getEntId());
|
|
|
+ forklift.setPrEntName(orderUnit.getFirmName());
|
|
|
+
|
|
|
+ //商品信息
|
|
|
+ KwtLogisticsOrderGoods orderGoods = logisticsOrderGoodsMap.getOrDefault(waybillOrder.getLOrderId(), new KwtLogisticsOrderGoods());
|
|
|
+ KwpGoods goods = goodsIdAndGoodsMap.getOrDefault(orderGoods.getGoodsId(), new KwpGoods());
|
|
|
+ Map<String, String> goodsTypeMap= dictValueAndDictResDtoMap.getOrDefault(DictTypeEnum.PRODUCT_NAME_TYPE.getType(), new HashMap<>());
|
|
|
+ Map<String, String> goodsSpecMap= dictValueAndDictResDtoMap.getOrDefault(DictTypeEnum.GOODS_SPEC.getType(), new HashMap<>());
|
|
|
+ forklift.setGoodsName(goods.getName()+"/"+goodsTypeMap.getOrDefault(goods.getGoodsType(),"")+"/"+goodsSpecMap.getOrDefault(goods.getSpec(), ""));
|
|
|
+ forklift.setGoodsId(goods.getId());
|
|
|
+
|
|
|
+ //装卸货信息
|
|
|
+ KwtWaybillOrderTicket ticket = waybillOrderTicketMap.getOrDefault(forkliftOrder.getWOrderId() + "-" + 1, new KwtWaybillOrderTicket());
|
|
|
+ forklift.setTareAmount(ticket.getTareAmount());
|
|
|
+ forklift.setGrossAmount(ticket.getGrossAmount());
|
|
|
+
|
|
|
+ return forklift;
|
|
|
+ }
|
|
|
|
|
|
|
|
|
- ForkliftOrderResp forklift = new ForkliftOrderResp();
|
|
|
- forklift.setDriverId(record.getDriverId());
|
|
|
- forklift.setDriverName(record.getDriverName());
|
|
|
- forkliftOrderList.add(forklift);
|
|
|
+ /**
|
|
|
+ * 铲车订单状态统计
|
|
|
+ * @param param
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public StatisticsWaybillResp statisticsForkliftOrder(ForkliftOrderQueryParam param) {
|
|
|
+ log.info("铲车订单状态统计:{}", JSON.toJSONString(param));
|
|
|
+ StatisticsWaybillResp resp = new StatisticsWaybillResp();
|
|
|
+ if (StringUtils.isBlank(param.getDriverId())) {
|
|
|
+ resp.setOrderStatusStatistics(buildDefaultStatusStatistics());
|
|
|
+ return resp;
|
|
|
}
|
|
|
- return PageDataResult.success(param.getPageNum(), param.getPageSize(), pageByStatus.getTotal(), forkliftOrderList);
|
|
|
+
|
|
|
+ LambdaQueryWrapper<KwtForkliftWaybillOrder> queryWrapper = Wrappers.<KwtForkliftWaybillOrder>lambdaQuery()
|
|
|
+ .eq(KwtForkliftWaybillOrder::getDriverId, param.getDriverId())
|
|
|
+ .eq(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());
|
|
|
+ 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);
|
|
|
+ }
|
|
|
+ return resp;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 构建默认的状态统计列表(三种状态,数量均为0)
|
|
|
+ * @return 默认统计列表
|
|
|
+ */
|
|
|
+ private List<StatisticsWaybillResp.OrderBillStatusStatistics> buildDefaultStatusStatistics() {
|
|
|
+ List<StatisticsWaybillResp.OrderBillStatusStatistics> defaultList = new ArrayList<>();
|
|
|
+ // 待接单
|
|
|
+ StatisticsWaybillResp.OrderBillStatusStatistics underWay = new StatisticsWaybillResp.OrderBillStatusStatistics();
|
|
|
+ underWay.setOrderStatus("1");
|
|
|
+ underWay.setOrderStatusDesc("待接单");
|
|
|
+ underWay.setOrderNum("0");
|
|
|
+ defaultList.add(underWay);
|
|
|
+ // 已接单
|
|
|
+ StatisticsWaybillResp.OrderBillStatusStatistics review = new StatisticsWaybillResp.OrderBillStatusStatistics();
|
|
|
+ review.setOrderStatus("5");
|
|
|
+ review.setOrderStatusDesc("已接单");
|
|
|
+ review.setOrderNum("0");
|
|
|
+ defaultList.add(review);
|
|
|
+ // 已完成
|
|
|
+ StatisticsWaybillResp.OrderBillStatusStatistics completed = new StatisticsWaybillResp.OrderBillStatusStatistics();
|
|
|
+ completed.setOrderStatus("10");
|
|
|
+ completed.setOrderStatusDesc("已装载");
|
|
|
+ completed.setOrderNum("0");
|
|
|
+ defaultList.add(completed);
|
|
|
+ return defaultList;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -147,8 +347,8 @@ public class ForkliftOrderService {
|
|
|
// 1. 幂等性校验
|
|
|
checkIdempotent(param);
|
|
|
|
|
|
- // 2. 构建分布式锁Key(物流运单ID+铲车司机id 唯一标识)
|
|
|
- String lockKey = TAKING_ORDER_LOCK_PREFIX + param.getWaybillOrderId() + "_" + param.getDriverId();
|
|
|
+ // 2. 构建分布式锁Key(铲车订单ID+铲车司机id 唯一标识)
|
|
|
+ String lockKey = TAKING_ORDER_LOCK_PREFIX + param.getForkliftOrderId() + "_" + param.getDriverId();
|
|
|
String requestId = UUID.randomUUID().toString();
|
|
|
boolean lockAcquired = false;
|
|
|
|
|
|
@@ -181,7 +381,7 @@ public class ForkliftOrderService {
|
|
|
*/
|
|
|
private KwtWaybillOrder checkWOrderStatus(ForkliftOrderTakingParam param) {
|
|
|
//校验
|
|
|
- KwtWaybillOrder waybillOrder = waybillOrderRepository.getById(param.getWaybillOrderId());
|
|
|
+ KwtWaybillOrder waybillOrder = waybillOrderRepository.getById(param.getForkliftOrderId());
|
|
|
if (waybillOrder == null) {
|
|
|
throw new BusinessPlatfromException(ErrorCodeEnum.WAYBILL_ORDER_STATUS_ERROR, "当前运单不是可接单状态!");
|
|
|
}
|
|
|
@@ -195,10 +395,10 @@ public class ForkliftOrderService {
|
|
|
*/
|
|
|
private void checkIdempotent(ForkliftOrderTakingParam param) {
|
|
|
// 查询该物流运单+铲车司机id下是否已有接单状态运单
|
|
|
- KwtForkliftWaybillOrder existingOrder = forkliftWaybillOrderRepository.queryForkliftWaybillOrderByWOrderId(param.getWaybillOrderId(), param.getDriverId());
|
|
|
+ KwtForkliftWaybillOrder existingOrder = forkliftWaybillOrderRepository.queryForkliftWaybillOrderByWOrderId(param.getForkliftOrderId(), param.getDriverId());
|
|
|
if (existingOrder != null) {
|
|
|
log.warn("重复接单校验失败,已存在有效铲车订单,fLogOrderId:{}, driverId:{}, waybillOrderId:{}",
|
|
|
- existingOrder.getId(), param.getDriverId(), param.getWaybillOrderId());
|
|
|
+ existingOrder.getId(), param.getDriverId(), param.getForkliftOrderId());
|
|
|
throw new BusinessPlatfromException(ErrorCodeEnum.REPEAT_SUBMIT,
|
|
|
String.format("该铲车[%s]已针对该物流运单接单,订单ID:%s", existingOrder.getDriverId(), existingOrder.getId()));
|
|
|
}
|
|
|
@@ -260,18 +460,15 @@ public class ForkliftOrderService {
|
|
|
*/
|
|
|
private void createForkliftWaybillOrder(ForkliftOrderTakingParam param, KwtWaybillOrder waybillOrder) {
|
|
|
log.info("生成铲车订单,入参参数:{}", JSON.toJSONString(param));
|
|
|
- KwtForkliftWaybillOrder forkliftWaybillOrder = new KwtForkliftWaybillOrder();
|
|
|
- forkliftWaybillOrder.setFOrderNo("W" + System.currentTimeMillis());
|
|
|
- forkliftWaybillOrder.setEntId(null);
|
|
|
- forkliftWaybillOrder.setLOrderId(waybillOrder.getLOrderId());
|
|
|
- forkliftWaybillOrder.setLoadingType(param.getLoadingType());
|
|
|
+ KwtForkliftWaybillOrder forkliftWaybillOrder = forkliftWaybillOrderRepository.queryForkliftWaybillOrderByFOrderId(param.getForkliftOrderId());
|
|
|
+ if (forkliftWaybillOrder == null) {
|
|
|
+ throw new BusinessPlatfromException(ErrorCodeEnum.FORKLIFT_ORDER_NOT_FOUND, "当前铲车订单不存在!");
|
|
|
+ }
|
|
|
+ if (ForkliftStatusEnum.PENDING_ORDERS.getCode().equals(forkliftWaybillOrder.getStatus())) {
|
|
|
+ throw new BusinessPlatfromException(ErrorCodeEnum.FORKLIFT_ORDER_STATUS_ERROR, "当前铲车订单状态异常,不能接单!");
|
|
|
+ }
|
|
|
+
|
|
|
forkliftWaybillOrder.setStatus(ForkliftStatusEnum.ORDER_TAKING.getCode());
|
|
|
- forkliftWaybillOrder.setDriverName(null);
|
|
|
- forkliftWaybillOrder.setDriverPhone(null);
|
|
|
- forkliftWaybillOrder.setFinishTime(new Date());
|
|
|
- forkliftWaybillOrder.setCreateUser(null);
|
|
|
- forkliftWaybillOrder.setUpdateUser(null);
|
|
|
- forkliftWaybillOrderRepository.save(forkliftWaybillOrder);
|
|
|
log.info("创建铲车订单成功,订单ID:{}", waybillOrder.getId());
|
|
|
}
|
|
|
|
|
|
@@ -287,6 +484,9 @@ public class ForkliftOrderService {
|
|
|
if (forkliftWaybillOrder == null) {
|
|
|
throw new BusinessPlatfromException(ErrorCodeEnum.FORKLIFT_ORDER_NOT_FOUND, "当前铲车订单不存在!");
|
|
|
}
|
|
|
+ if (ForkliftStatusEnum.ORDER_TAKING.getCode().equals(forkliftWaybillOrder.getStatus())) {
|
|
|
+ throw new BusinessPlatfromException(ErrorCodeEnum.FORKLIFT_ORDER_STATUS_ERROR, "当前铲车订单状态异常,不能取消订单!");
|
|
|
+ }
|
|
|
forkliftWaybillOrder.setStatus(ForkliftStatusEnum.PENDING_ORDERS.getCode());
|
|
|
forkliftWaybillOrderRepository.updateById(forkliftWaybillOrder);
|
|
|
}
|
|
|
@@ -302,6 +502,10 @@ public class ForkliftOrderService {
|
|
|
if (forkliftWaybillOrder == null) {
|
|
|
throw new BusinessPlatfromException(ErrorCodeEnum.FORKLIFT_ORDER_NOT_FOUND, "当前铲车订单不存在!");
|
|
|
}
|
|
|
+ if (ForkliftStatusEnum.ORDER_TAKING.getCode().equals(forkliftWaybillOrder.getStatus())) {
|
|
|
+ throw new BusinessPlatfromException(ErrorCodeEnum.FORKLIFT_ORDER_STATUS_ERROR, "当前铲车订单状态异常,不能装载完成!");
|
|
|
+ }
|
|
|
+
|
|
|
forkliftWaybillOrder.setStatus(ForkliftStatusEnum.COMPLETED.getCode());
|
|
|
forkliftWaybillOrderRepository.updateById(forkliftWaybillOrder);
|
|
|
|