浏览代码

提交新增存储图片接口

chenxiaofei 1 天之前
父节点
当前提交
b5157bf2fa

+ 13 - 1
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/enterpriseApp/AppWayBillController.java

@@ -5,6 +5,7 @@ import com.sckw.core.web.constant.HttpStatus;
 import com.sckw.core.web.response.BaseResult;
 import com.sckw.core.web.response.HttpResult;
 import com.sckw.core.web.response.result.PageDataResult;
+import com.sckw.transport.model.WaybillOrderWeighImageParam;
 import com.sckw.transport.model.dto.WaybillListAppDTO;
 import com.sckw.transport.model.param.*;
 import com.sckw.transport.model.vo.OrderTotalTakeVo;
@@ -390,5 +391,16 @@ public class AppWayBillController {
         return BaseResult.success();
     }
 
-
+    /**
+     * 推送过磅图片
+     *
+     * @param param
+     * @return
+     */
+    @Operation(summary = "推送过磅图片", description = "推送过磅图片")
+    @PostMapping("/weighImage")
+    public BaseResult weighImage(@RequestBody @Valid WaybillOrderWeighImageParam param){
+        waybillOrderService.weighImage(param);
+        return BaseResult.success();
+    }
 }

+ 37 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/WaybillOrderWeighImageParam.java

@@ -0,0 +1,37 @@
+package com.sckw.transport.model;
+
+import com.sckw.transport.model.param.WaybillOrderProcessParam;
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotEmpty;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @author :donglang
+ * @version :1.0
+ * @description : 车辆过磅入参信息
+ * @create :2025-11-13 08:59:00
+ */
+@Data
+public class WaybillOrderWeighImageParam extends WaybillOrderProcessParam implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1038619782660342061L;
+
+    /**
+     * 车辆号
+     */
+    @Schema(description = "车辆号")
+    private String truckNo;
+
+    /**
+     * 称重图片
+     */
+    @NotEmpty(message = "称重图片不能为空!")
+    @Schema(description = "称重图片")
+    private List<String> weighImageList;
+
+}

+ 78 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/app/WaybillOrderService.java

@@ -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());
+    }
+
 
 }