|
|
@@ -2132,5 +2132,83 @@ public class WaybillOrderService {
|
|
|
// log.info("创建车辆运单节点轨迹,节点轨迹ID:{}", orderNode.getId());
|
|
|
// }
|
|
|
|
|
|
+ /**
|
|
|
+ * 过磅推送图片保存
|
|
|
+ * <p>
|
|
|
+ * 业务逻辑:
|
|
|
+ * 1. 校验车牌号非空。
|
|
|
+ * 2. 根据车牌号和允许的状态列表查询当前有效的运单。
|
|
|
+ * - 允许的状态包括:待派车、已入场、已装货离场、空载待离场、待离场、卸货中、补货中、补货完成、待装车。
|
|
|
+ * - 这些状态代表车辆正在作业流程中,允许上传过磅图片。
|
|
|
+ * 3. 校验运单存在且唯一(防止一车多单冲突)。
|
|
|
+ * 4. 查询当前运单状态对应的节点记录。
|
|
|
+ * 5. 将传入的图片URL列表拼接后保存到节点记录的 weighUrl 字段。
|
|
|
+ *
|
|
|
+ * @param param 过磅图片参数,包含车牌号和图片URL列表
|
|
|
+ */
|
|
|
+ public void weighImage(WaybillOrderWeighImageParam param) {
|
|
|
+ log.info("[过磅图片]开始处理,入参:{}", JSON.toJSONString(param));
|
|
|
+
|
|
|
+ // 1. 基础参数校验
|
|
|
+ if (StringUtils.isBlank(param.getTruckNo())) {
|
|
|
+ log.warn("[过磅图片]车牌号为空,请求被拒绝");
|
|
|
+ throw new BusinessPlatfromException(ErrorCodeEnum.PARAM_ERROR, "车牌号不能为空!");
|
|
|
+ }
|
|
|
+
|
|
|
+ // 2. 定义允许上传过磅图片的运单状态集合
|
|
|
+ // 涵盖从接单到卸货完成前的主要作业状态,确保只有在有效作业期间的运单才能接收图片
|
|
|
+ List<Integer> ALLOWED_STATUSES = Arrays.asList(
|
|
|
+ CarWaybillV1Enum.PENDING_VEHICLE.getCode(), // 待派车
|
|
|
+ CarWaybillV1Enum.REFUSE_TRAFFIC.getCode(), // 已入场(待过皮重)
|
|
|
+ CarWaybillV1Enum.EXIT_COMPLETED.getCode(), // 已装货离场(待过毛重)
|
|
|
+ CarWaybillV1Enum.EMPTY_WAIT_LEAVE.getCode(), // 空载待离场
|
|
|
+ CarWaybillV1Enum.WAIT_LEAVE.getCode(), // 待离场
|
|
|
+ CarWaybillV1Enum.UNLOADING.getCode(), // 卸货中
|
|
|
+ CarWaybillV1Enum.REPLENISHING.getCode(), // 补货中
|
|
|
+ CarWaybillV1Enum.REPLENISH_FINISH.getCode(), // 补货完成
|
|
|
+ CarWaybillV1Enum.WAIT_LOADING.getCode() // 待装车
|
|
|
+ // CarWaybillV1Enum.UNLOADING_POINT.getCode() // 如需支持卸货点状态可在此添加
|
|
|
+ );
|
|
|
+
|
|
|
+ // 3. 查询当前车辆下处于允许状态的运单
|
|
|
+ List<KwtWaybillOrder> wbOrderByTruckNo = waybillOrderRepository.findWbOrderByTruckNoAndStatus(param.getTruckNo(), ALLOWED_STATUSES);
|
|
|
+
|
|
|
+ // 4. 校验运单是否存在
|
|
|
+ if (CollectionUtils.isEmpty(wbOrderByTruckNo)) {
|
|
|
+ log.warn("[过磅图片]未找到符合条件的运单,truckNo: {}, 允许状态: {}", param.getTruckNo(), ALLOWED_STATUSES);
|
|
|
+ throw new BusinessPlatfromException(ErrorCodeEnum.WAYBILL_ORDER_NOT_FOUND, "[过磅推送图片]当前车辆没有可以过磅称重状态的运单");
|
|
|
+ }
|
|
|
+
|
|
|
+ // 5. 校验运单唯一性,避免一车多单导致的数据混乱
|
|
|
+ if (wbOrderByTruckNo.size() > 1) {
|
|
|
+ log.error("[过磅图片]当前车辆存在多条有效运单,数据异常,truckNo: {}, 运单数量: {}", param.getTruckNo(), wbOrderByTruckNo.size());
|
|
|
+ throw new BusinessPlatfromException(ErrorCodeEnum.WAYBILL_ORDER_NOT_FOUND, "[过磅推送图片]当前车辆过磅称重状态存在多条运单");
|
|
|
+ }
|
|
|
+
|
|
|
+ KwtWaybillOrder waybillOrder = wbOrderByTruckNo.get(0);
|
|
|
+ log.debug("[过磅图片]匹配到运单,waybillOrderId: {}, status: {}", waybillOrder.getId(), waybillOrder.getStatus());
|
|
|
+
|
|
|
+ // 6. 查询该运单在当前状态下的节点记录
|
|
|
+ KwtWaybillOrderNode waybillOrderNode = waybillOrderNodeRepository.queryNodesByOrderId(waybillOrder.getId(), waybillOrder.getStatus());
|
|
|
+ if (waybillOrderNode == null) {
|
|
|
+ log.error("[过磅图片]未查询到运单节点数据,waybillOrderId: {}, status: {}", waybillOrder.getId(), waybillOrder.getStatus());
|
|
|
+ throw new BusinessPlatfromException(ErrorCodeEnum.WAYBILL_ORDER_NOT_FOUND, "[过磅推送图片]未查询运单节点数据");
|
|
|
+ }
|
|
|
+ KwtWaybillOrderNode kwtWaybillOrderNode = new KwtWaybillOrderNode();
|
|
|
+ kwtWaybillOrderNode.setId(waybillOrderNode.getId());
|
|
|
+ // 7. 处理图片URL列表,转换为逗号分隔的字符串
|
|
|
+ String weighImageUrlStr = "";
|
|
|
+ if (CollectionUtils.isNotEmpty(param.getWeighImageList())) {
|
|
|
+ weighImageUrlStr = String.join(",", param.getWeighImageList());
|
|
|
+ }
|
|
|
+
|
|
|
+ // 8. 更新节点记录中的过磅图片URL
|
|
|
+ kwtWaybillOrderNode.setWeighUrl(weighImageUrlStr);
|
|
|
+ waybillOrderNodeRepository.updateById(kwtWaybillOrderNode);
|
|
|
+
|
|
|
+ log.info("[过磅图片]保存成功,waybillOrderId: {}, nodeId: {}, imageUrlCount: {}",
|
|
|
+ waybillOrder.getId(), kwtWaybillOrderNode.getId(), param.getWeighImageList() == null ? 0 : param.getWeighImageList().size());
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
}
|