|
|
@@ -21,6 +21,7 @@ import com.sckw.transport.model.*;
|
|
|
import com.sckw.transport.model.enuma.WeighbridgeTypeEnum;
|
|
|
import com.sckw.transport.model.param.WaybillOrderCmeIntoWeighParam;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
+import org.springframework.beans.factory.annotation.Value;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
@@ -41,6 +42,16 @@ import java.util.stream.Collectors;
|
|
|
@Service
|
|
|
public class ComeIntoHandler extends AbstractWaybillOrderHandler<WaybillOrderCmeIntoWeighParam> {
|
|
|
|
|
|
+ @Value("${business.waybill.default-driver-id}")
|
|
|
+ private Long defaultDriverId;
|
|
|
+
|
|
|
+ @Value("${business.waybill.default-driver-name}")
|
|
|
+ private String defaultDriverName;
|
|
|
+
|
|
|
+ @Value("${business.waybill.default-driver-phone}")
|
|
|
+ private String defaultDriverPhone;
|
|
|
+
|
|
|
+
|
|
|
@Override
|
|
|
protected KwtWaybillOrder getWaybillOrder(WaybillOrderCmeIntoWeighParam param) {
|
|
|
return getWaybillOrder(param.getWaybillOrderId());
|
|
|
@@ -112,18 +123,20 @@ public class ComeIntoHandler extends AbstractWaybillOrderHandler<WaybillOrderCme
|
|
|
updateGatekeeperOrderStatus(waybillOrder);
|
|
|
|
|
|
//4. 创建铲车记录
|
|
|
- createForkliftWaybill(waybillOrder);
|
|
|
+ Long forkliftId = createForkliftWaybill(waybillOrder);
|
|
|
|
|
|
//5.创建过磅记录
|
|
|
createWeighbridges(param, waybillOrder);
|
|
|
+
|
|
|
+ //6.自动完成装载(山上企业)
|
|
|
+ autoCompleteLoading(forkliftId, waybillOrder);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 创建铲车记录
|
|
|
* @param waybillOrder
|
|
|
*/
|
|
|
- private void createForkliftWaybill(KwtWaybillOrder waybillOrder) {
|
|
|
- CompletableFuture.runAsync(() ->{
|
|
|
+ private Long createForkliftWaybill(KwtWaybillOrder waybillOrder) {
|
|
|
try {
|
|
|
log.debug("开始异步保存铲车司机数据,运单ID:{}", waybillOrder.getId());
|
|
|
//企业id
|
|
|
@@ -169,10 +182,10 @@ public class ComeIntoHandler extends AbstractWaybillOrderHandler<WaybillOrderCme
|
|
|
|
|
|
forkliftWaybillOrderRepository.save(forklift);
|
|
|
log.debug("铲车司机数据保存成功");
|
|
|
+ return forklift.getId();
|
|
|
} catch (Exception e) {
|
|
|
throw new BusinessPlatfromException(ErrorCodeEnum.DATA_SAVE_FAIL, "异步保存铲车司机数据失败!");
|
|
|
}
|
|
|
- });
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -229,7 +242,6 @@ public class ComeIntoHandler extends AbstractWaybillOrderHandler<WaybillOrderCme
|
|
|
* @param waybillOrder
|
|
|
*/
|
|
|
private void createWeighbridges(WaybillOrderCmeIntoWeighParam param, KwtWaybillOrder waybillOrder) {
|
|
|
- CompletableFuture.runAsync(() ->{
|
|
|
try {
|
|
|
log.debug("开始异步保存地磅记录,运单ID:{}", waybillOrder.getId());
|
|
|
KwtWaybillOrderWeighbridge weighbridge = new KwtWaybillOrderWeighbridge();
|
|
|
@@ -250,7 +262,114 @@ public class ComeIntoHandler extends AbstractWaybillOrderHandler<WaybillOrderCme
|
|
|
} catch (Exception e) {
|
|
|
throw new BusinessPlatfromException(ErrorCodeEnum.DATA_SAVE_FAIL, "异步保存过磅数据失败!");
|
|
|
}
|
|
|
- });
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 自动完成铲车接单
|
|
|
+ * @param waybillOrder
|
|
|
+ */
|
|
|
+ private void autoCompleteLoading(Long forkliftId, KwtWaybillOrder waybillOrder) {
|
|
|
+ log.info("[自动接单]开始自动接单,运单ID:{}", waybillOrder.getId());
|
|
|
+ // 只有山上的企业才做自动接单
|
|
|
+ if (getEntId(waybillOrder) != 538039617157337089L) {
|
|
|
+ log.info("[自动接单]当前企业不是山上企业,无需自动完成接单:{}", JSON.toJSONString(waybillOrder));
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ KwtForkliftWaybillOrder forkliftWaybillOrder = forkliftWaybillOrderRepository.queryForkliftWaybillOrderByFOrderId(forkliftId);
|
|
|
+ if (forkliftWaybillOrder == null) {
|
|
|
+ throw new BusinessPlatfromException(ErrorCodeEnum.FORKLIFT_ORDER_NOT_FOUND, "[自动接单]当前铲车订单不存在!");
|
|
|
+ }
|
|
|
+
|
|
|
+ // 1. 铲车司机接单
|
|
|
+ createForkliftWaybillOrder(forkliftWaybillOrder);
|
|
|
+
|
|
|
+ // 2. 铲车司机完成装载
|
|
|
+ loadingCompleted(forkliftWaybillOrder);
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 铲车司机接单
|
|
|
+ * @param forkliftWaybillOrder
|
|
|
+ */
|
|
|
+ public void createForkliftWaybillOrder(KwtForkliftWaybillOrder forkliftWaybillOrder) {
|
|
|
+ log.info("[自动接单]铲车订单接单,铲车订单id:{}", JSON.toJSONString(forkliftWaybillOrder.getId()));
|
|
|
+ if (!ForkliftStatusEnum.PENDING_ORDERS.getCode().equals(forkliftWaybillOrder.getStatus())) {
|
|
|
+ throw new BusinessPlatfromException(ErrorCodeEnum.FORKLIFT_ORDER_STATUS_ERROR, "当前铲车订单状态异常,不能接单!");
|
|
|
+ }
|
|
|
+
|
|
|
+ forkliftWaybillOrder.setStatus(ForkliftStatusEnum.ORDER_TAKING.getCode());
|
|
|
+ forkliftWaybillOrder.setDriverId(defaultDriverId);
|
|
|
+ forkliftWaybillOrder.setDriverPhone(defaultDriverName);
|
|
|
+ forkliftWaybillOrder.setDriverName(defaultDriverPhone);
|
|
|
+ forkliftWaybillOrder.setForkliftAcceptTime(new Date());
|
|
|
+ forkliftWaybillOrderRepository.updateById(forkliftWaybillOrder);
|
|
|
+
|
|
|
+ //修改司机状态
|
|
|
+ updateWaybillOrder(forkliftWaybillOrder, CarWaybillV1Enum.REFUSE_TRAFFIC);
|
|
|
+
|
|
|
+ log.info("[自动接单]铲车接单成功,铲车订单ID:{}", forkliftWaybillOrder.getWOrderId());
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 修改司机状态
|
|
|
+ * @param forkliftWaybillOrder
|
|
|
+ */
|
|
|
+ private void updateWaybillOrder(KwtForkliftWaybillOrder forkliftWaybillOrder, CarWaybillV1Enum waybillV1Enum) {
|
|
|
+ // 修改运单状态
|
|
|
+ updateWaybillStatus(forkliftWaybillOrder, waybillV1Enum);
|
|
|
+
|
|
|
+ // 修改子运单状态
|
|
|
+ updateWaybillSubtaskStatus(forkliftWaybillOrder, waybillV1Enum);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 装载完成
|
|
|
+ * @param forkliftWaybillOrder
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ public void loadingCompleted(KwtForkliftWaybillOrder forkliftWaybillOrder) {
|
|
|
+ log.info("[自动接单]铲车司机装载完成, 铲车订单id:{}", JSON.toJSONString(forkliftWaybillOrder.getId()));
|
|
|
+ if (!ForkliftStatusEnum.ORDER_TAKING.getCode().equals(forkliftWaybillOrder.getStatus())) {
|
|
|
+ throw new BusinessPlatfromException(ErrorCodeEnum.FORKLIFT_ORDER_STATUS_ERROR, "当前铲车订单状态异常,不能装载完成!");
|
|
|
+ }
|
|
|
+
|
|
|
+ forkliftWaybillOrder.setStatus(ForkliftStatusEnum.COMPLETED.getCode());
|
|
|
+ forkliftWaybillOrder.setFinishTime(new Date());
|
|
|
+ forkliftWaybillOrderRepository.updateById(forkliftWaybillOrder);
|
|
|
+
|
|
|
+ //更新司机运单状态:已装货
|
|
|
+ updateWaybillOrder(forkliftWaybillOrder, CarWaybillV1Enum.EXIT_COMPLETED);
|
|
|
+ log.info("[自动接单]铲车装载成功,铲车订单ID:{}", forkliftWaybillOrder.getWOrderId());
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 修改运单状态
|
|
|
+ * @param forkliftWaybillOrder
|
|
|
+ */
|
|
|
+ private void updateWaybillStatus(KwtForkliftWaybillOrder forkliftWaybillOrder, CarWaybillV1Enum waybillV1Enum) {
|
|
|
+ KwtWaybillOrder waybillOrder = waybillOrderRepository.getById(forkliftWaybillOrder.getWOrderId());
|
|
|
+ if (waybillOrder == null) {
|
|
|
+ throw new BusinessPlatfromException(ErrorCodeEnum.FORKLIFT_ORDER_NOT_FOUND, "当前运单数据不存在!");
|
|
|
+ }
|
|
|
+
|
|
|
+ waybillOrder.setStatus(waybillV1Enum.getCode());
|
|
|
+ waybillOrderRepository.updateById(waybillOrder);
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 修改子运单状态
|
|
|
+ * @param forkliftWaybillOrder
|
|
|
+ */
|
|
|
+ private void updateWaybillSubtaskStatus(KwtForkliftWaybillOrder forkliftWaybillOrder, CarWaybillV1Enum waybillV1Enum) {
|
|
|
+ KwtWaybillOrderSubtask waybillSubtask = waybillOrderSubtaskRepository.queryByWOrderId(forkliftWaybillOrder.getWOrderId());
|
|
|
+ if (waybillSubtask == null) {
|
|
|
+ throw new BusinessPlatfromException(ErrorCodeEnum.WAYBILL_ORDER_SUB_NOT_FOUND, "未找到关联的子运单!");
|
|
|
+ }
|
|
|
+ waybillSubtask.setStatus(waybillV1Enum.getCode());
|
|
|
+ waybillOrderSubtaskRepository.updateById(waybillSubtask);
|
|
|
}
|
|
|
|
|
|
|