|
@@ -16,8 +16,11 @@ import com.sckw.order.api.model.OrderDetailVo;
|
|
|
import com.sckw.order.api.model.UpdateActualAmountParam;
|
|
import com.sckw.order.api.model.UpdateActualAmountParam;
|
|
|
import com.sckw.transport.model.*;
|
|
import com.sckw.transport.model.*;
|
|
|
import com.sckw.transport.model.param.OrderCirculateTakingQueryParam;
|
|
import com.sckw.transport.model.param.OrderCirculateTakingQueryParam;
|
|
|
|
|
+import com.sckw.transport.model.param.OrderTakingResp;
|
|
|
|
|
+import com.sckw.transport.repository.KwtLogisticsOrderCirculateRepository;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.springframework.stereotype.Service;
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
import java.math.BigDecimal;
|
|
|
import java.util.*;
|
|
import java.util.*;
|
|
@@ -57,15 +60,17 @@ public class TakingOrderHandler extends AbstractWaybillOrderHandler<OrderCircula
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
|
protected void checkState(OrderCirculateTakingQueryParam param, KwtWaybillOrder waybillOrder) {
|
|
protected void checkState(OrderCirculateTakingQueryParam param, KwtWaybillOrder waybillOrder) {
|
|
|
- // 1.校验物流订单
|
|
|
|
|
|
|
+ // 1.校验车辆是否已被派单
|
|
|
|
|
+ checkTruckDispatch(param);
|
|
|
|
|
+ // 2.校验物流订单
|
|
|
KwtLogisticsOrder logOrder = checkLogOrder(param);
|
|
KwtLogisticsOrder logOrder = checkLogOrder(param);
|
|
|
- // 2.校验交易订单
|
|
|
|
|
|
|
+ // 3.校验交易订单
|
|
|
OrderDetailVo tradeOrder = checkTradeOrder(param, logOrder);
|
|
OrderDetailVo tradeOrder = checkTradeOrder(param, logOrder);
|
|
|
- // 3.校验司机
|
|
|
|
|
|
|
+ // 4.校验司机
|
|
|
RDriverVo driver = checkDriver(param);
|
|
RDriverVo driver = checkDriver(param);
|
|
|
- // 4.校验车辆
|
|
|
|
|
|
|
+ // 5.校验车辆
|
|
|
RTruckVo truck = checkTruck(param);
|
|
RTruckVo truck = checkTruck(param);
|
|
|
- // 5.校验车辆是否已有未完成运单
|
|
|
|
|
|
|
+ // 6.校验车辆是否已有未完成运单
|
|
|
checkTruckUnfinished(param);
|
|
checkTruckUnfinished(param);
|
|
|
|
|
|
|
|
// 存储到线程上下文
|
|
// 存储到线程上下文
|
|
@@ -77,6 +82,7 @@ public class TakingOrderHandler extends AbstractWaybillOrderHandler<OrderCircula
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
@Override
|
|
|
|
|
+ @Transactional(rollbackFor = Exception.class)
|
|
|
protected void doBusiness(OrderCirculateTakingQueryParam param, KwtWaybillOrder waybill) {
|
|
protected void doBusiness(OrderCirculateTakingQueryParam param, KwtWaybillOrder waybill) {
|
|
|
KwtLogisticsOrder logOrder = BusinessContext.get("logOrder");
|
|
KwtLogisticsOrder logOrder = BusinessContext.get("logOrder");
|
|
|
OrderDetailVo tradeOrder = BusinessContext.get("tradeOrder");
|
|
OrderDetailVo tradeOrder = BusinessContext.get("tradeOrder");
|
|
@@ -111,7 +117,17 @@ public class TakingOrderHandler extends AbstractWaybillOrderHandler<OrderCircula
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
|
+ /**
|
|
|
|
|
+ * 校验车辆是否已被派单
|
|
|
|
|
+ * @param param
|
|
|
|
|
+ */
|
|
|
|
|
+ private void checkTruckDispatch(OrderCirculateTakingQueryParam param) {
|
|
|
|
|
+ KwtLogisticsOrderCirculate orderCirculate = logisticsOrderCirculateRepository
|
|
|
|
|
+ .findOneByLogOrderIdsAndTruckNo(param.getLogOrderId(), param.getTruckNo(), param.getEntId());
|
|
|
|
|
+ if (orderCirculate == null) {
|
|
|
|
|
+ throw new BusinessPlatfromException(ErrorCodeEnum.LOGISTICS_ORDER_NOT_DISPATCH_TRUCK, "当前车辆无派车数据,不可继续接单");
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
/**
|
|
/**
|
|
|
* 校验物流订单是否是可接单状态
|
|
* 校验物流订单是否是可接单状态
|
|
@@ -253,7 +269,7 @@ public class TakingOrderHandler extends AbstractWaybillOrderHandler<OrderCircula
|
|
|
KwtWaybillOrder waybillOrder = new KwtWaybillOrder();
|
|
KwtWaybillOrder waybillOrder = new KwtWaybillOrder();
|
|
|
waybillOrder.setEntId(param.getEntId());
|
|
waybillOrder.setEntId(param.getEntId());
|
|
|
waybillOrder.setLOrderId(param.getLogOrderId());
|
|
waybillOrder.setLOrderId(param.getLogOrderId());
|
|
|
- waybillOrder.setWOrderNo(null); //TODO donglang
|
|
|
|
|
|
|
+ waybillOrder.setWOrderNo("W" + System.currentTimeMillis());
|
|
|
waybillOrder.setType(1);
|
|
waybillOrder.setType(1);
|
|
|
waybillOrder.setTruckId(truckNo.getId());
|
|
waybillOrder.setTruckId(truckNo.getId());
|
|
|
waybillOrder.setTruckNo(param.getTruckNo());
|
|
waybillOrder.setTruckNo(param.getTruckNo());
|
|
@@ -263,6 +279,8 @@ public class TakingOrderHandler extends AbstractWaybillOrderHandler<OrderCircula
|
|
|
waybillOrder.setDriverIdcard(driver.getIdcard());
|
|
waybillOrder.setDriverIdcard(driver.getIdcard());
|
|
|
waybillOrder.setStatus(CarWaybillV1Enum.PENDING_VEHICLE.getCode());
|
|
waybillOrder.setStatus(CarWaybillV1Enum.PENDING_VEHICLE.getCode());
|
|
|
waybillOrder.setTaskStartTime(new Date());
|
|
waybillOrder.setTaskStartTime(new Date());
|
|
|
|
|
+ waybillOrder.setCreateBy(param.getDriverId());
|
|
|
|
|
+ waybillOrder.setUpdateBy(param.getDriverId());
|
|
|
waybillOrderRepository.save(waybillOrder);
|
|
waybillOrderRepository.save(waybillOrder);
|
|
|
log.info("创建物流运单成功,运单ID:{}", waybillOrder.getId());
|
|
log.info("创建物流运单成功,运单ID:{}", waybillOrder.getId());
|
|
|
|
|
|
|
@@ -284,12 +302,14 @@ public class TakingOrderHandler extends AbstractWaybillOrderHandler<OrderCircula
|
|
|
subtask.setLOrderId(param.getLogOrderId());
|
|
subtask.setLOrderId(param.getLogOrderId());
|
|
|
subtask.setWOrderId(waybillOrder.getId());
|
|
subtask.setWOrderId(waybillOrder.getId());
|
|
|
subtask.setWOrderNo(waybillOrder.getWOrderNo());
|
|
subtask.setWOrderNo(waybillOrder.getWOrderNo());
|
|
|
- subtask.setUnit(null);
|
|
|
|
|
|
|
+ subtask.setUnit("吨"); //TODO DONGLANG
|
|
|
|
|
|
|
|
subtask.setEntrustAmount(truckLoadVolume);
|
|
subtask.setEntrustAmount(truckLoadVolume);
|
|
|
subtask.setLoadTime(waybillOrder.getTaskStartTime());
|
|
subtask.setLoadTime(waybillOrder.getTaskStartTime());
|
|
|
subtask.setUnloadTime(waybillOrder.getEndTime());
|
|
subtask.setUnloadTime(waybillOrder.getEndTime());
|
|
|
subtask.setStatus(CarWaybillV1Enum.PENDING_VEHICLE.getCode());
|
|
subtask.setStatus(CarWaybillV1Enum.PENDING_VEHICLE.getCode());
|
|
|
|
|
+ subtask.setCreateBy(param.getDriverId());
|
|
|
|
|
+ subtask.setUpdateBy(param.getDriverId());
|
|
|
waybillOrderSubtaskRepository.save(subtask);
|
|
waybillOrderSubtaskRepository.save(subtask);
|
|
|
log.info("创建物流子运单成功,子运单ID:{}", subtask.getId());
|
|
log.info("创建物流子运单成功,子运单ID:{}", subtask.getId());
|
|
|
|
|
|
|
@@ -354,7 +374,8 @@ public class TakingOrderHandler extends AbstractWaybillOrderHandler<OrderCircula
|
|
|
address.setPlanTime(waybillOrder.getTaskStartTime());
|
|
address.setPlanTime(waybillOrder.getTaskStartTime());
|
|
|
address.setSort(Global.NUMERICAL_ONE);
|
|
address.setSort(Global.NUMERICAL_ONE);
|
|
|
address.setEntrustAmount(subtask.getEntrustAmount());
|
|
address.setEntrustAmount(subtask.getEntrustAmount());
|
|
|
-
|
|
|
|
|
|
|
+ address.setCreateBy(waybillOrder.getDriverId());
|
|
|
|
|
+ address.setUpdateBy(waybillOrder.getDriverId());
|
|
|
waybillOrderAddressRepository.save(address);
|
|
waybillOrderAddressRepository.save(address);
|
|
|
return address;
|
|
return address;
|
|
|
}
|
|
}
|
|
@@ -391,7 +412,7 @@ public class TakingOrderHandler extends AbstractWaybillOrderHandler<OrderCircula
|
|
|
*/
|
|
*/
|
|
|
private KwtWaybillOrderAddress getWaybillOrderAddress(List<KwtWaybillOrderAddress> waybillOrderAddresses, AddressTypeEnum typeEnum) {
|
|
private KwtWaybillOrderAddress getWaybillOrderAddress(List<KwtWaybillOrderAddress> waybillOrderAddresses, AddressTypeEnum typeEnum) {
|
|
|
return waybillOrderAddresses.stream()
|
|
return waybillOrderAddresses.stream()
|
|
|
- .filter(address -> address != null && typeEnum.getCode() == address.getType())
|
|
|
|
|
|
|
+ .filter(address -> address != null && address.getAddressType() != null && typeEnum.getCode() == address.getAddressType())
|
|
|
.findFirst()
|
|
.findFirst()
|
|
|
.orElseThrow(() -> new BusinessPlatfromException(ErrorCodeEnum.WAYBILL_ORDER_ADDRESS_NOT_FOUND, "未找到装货地址数据!"));
|
|
.orElseThrow(() -> new BusinessPlatfromException(ErrorCodeEnum.WAYBILL_ORDER_ADDRESS_NOT_FOUND, "未找到装货地址数据!"));
|
|
|
}
|
|
}
|
|
@@ -414,6 +435,7 @@ public class TakingOrderHandler extends AbstractWaybillOrderHandler<OrderCircula
|
|
|
ticket.setAmount(BigDecimal.ZERO);
|
|
ticket.setAmount(BigDecimal.ZERO);
|
|
|
ticket.setGrossAmount(truckNo.getGrossWeight());
|
|
ticket.setGrossAmount(truckNo.getGrossWeight());
|
|
|
ticket.setTareAmount(truckNo.getTareWeight());
|
|
ticket.setTareAmount(truckNo.getTareWeight());
|
|
|
|
|
+ ticket.setCreateBy(waybillOrder.getDriverId());
|
|
|
waybillOrderTicketRepository.save(ticket);
|
|
waybillOrderTicketRepository.save(ticket);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -469,7 +491,7 @@ public class TakingOrderHandler extends AbstractWaybillOrderHandler<OrderCircula
|
|
|
throw new BusinessPlatfromException(ErrorCodeEnum.LOGISTICS_ORDER_NOT_ADDRESS, "物流订单无装卸货地址信息");
|
|
throw new BusinessPlatfromException(ErrorCodeEnum.LOGISTICS_ORDER_NOT_ADDRESS, "物流订单无装卸货地址信息");
|
|
|
}
|
|
}
|
|
|
return logOrderAddressList.stream().collect(Collectors
|
|
return logOrderAddressList.stream().collect(Collectors
|
|
|
- .toMap(address -> address.getLOrderId() + "-" + address.getType(),
|
|
|
|
|
|
|
+ .toMap(address -> address.getLOrderId() + "-" + address.getAddressType(),
|
|
|
Function.identity(), (x, y) -> x));
|
|
Function.identity(), (x, y) -> x));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -492,9 +514,14 @@ public class TakingOrderHandler extends AbstractWaybillOrderHandler<OrderCircula
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
// 7. 接单需要单独创建接单轨迹数据
|
|
// 7. 接单需要单独创建接单轨迹数据
|
|
|
- protected void afterProcess(OrderCirculateTakingQueryParam param, KwtWaybillOrder waybillOrder) {
|
|
|
|
|
|
|
+ protected OrderTakingResp afterProcess(OrderCirculateTakingQueryParam param, KwtWaybillOrder waybillOrder) {
|
|
|
KwtWaybillOrder actualOrder = BusinessContext.get("createdWaybillOrder");
|
|
KwtWaybillOrder actualOrder = BusinessContext.get("createdWaybillOrder");
|
|
|
createNodeTrace(param, actualOrder);
|
|
createNodeTrace(param, actualOrder);
|
|
|
|
|
+ //接单需要返回运单id
|
|
|
|
|
+ OrderTakingResp orderTakingResp = new OrderTakingResp();
|
|
|
|
|
+ orderTakingResp.setWaybillOrderId(actualOrder.getId());
|
|
|
|
|
+ return orderTakingResp;
|
|
|
|
|
+
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|