Kaynağa Gözat

提交合同查询接口

chenxiaofei 1 ay önce
ebeveyn
işleme
e1068ca125

+ 70 - 0
sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/enums/CarWaybillV1Enum.java

@@ -0,0 +1,70 @@
+package com.sckw.core.model.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.Getter;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.EnumSet;
+import java.util.List;
+
+/**
+ * @author lfdc
+ * @desc 车辆运单状态枚举
+ * @date 2023-07-14 14:07:23
+ */
+@Getter
+@AllArgsConstructor
+public enum CarWaybillV1Enum {
+
+    /**
+     * 已接单
+     */
+    PENDING_VEHICLE(1,  "已接单"),
+    /**
+     * 到达装货点
+     */
+    REFUSE_TRAFFIC(5, "到达装货点"),
+    /**
+     * 已装货
+     */
+    EXIT_COMPLETED(10,  "已装货"),
+    /**
+     * 已离场
+     */
+    WAIT_LOADING(15,  "已离场"),
+    /**
+     * 已卸货
+     */
+    COMPLETION_LOADING(20,  "已卸货"),
+    /**
+     * 已完成
+     */
+    WAIT_UNLOADING(25,  "已完成"),
+    /**
+     * 审核驳回
+     */
+    COMPLETION_UNLOADING(30,  "审核驳回"),
+    /**
+     * 已作废
+     */
+    APPROVAL_TREAT(99, "已作废"),
+
+    ;
+
+    private final Integer code;
+
+    private final String destination;
+
+
+    public static String geDesc(Integer status) {
+        for (CarWaybillV1Enum carWaybillV1Enum : EnumSet.allOf(CarWaybillV1Enum.class)) {
+            if (carWaybillV1Enum.code.equals(status)) {
+                return carWaybillV1Enum.destination;
+            }
+        }
+        return null;
+    }
+
+}

+ 62 - 0
sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/enums/LogisticsOrderV1Enum.java

@@ -0,0 +1,62 @@
+package com.sckw.core.model.enums;
+
+import com.sckw.core.model.constant.NumberConstant;
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import org.apache.commons.lang3.StringUtils;
+
+import java.util.ArrayList;
+import java.util.EnumSet;
+import java.util.List;
+
+/**
+ * @author lfdc
+ * @description 物流订单-单据状态
+ * @date 2023-07-07 14:07:23
+ */
+@Getter
+@AllArgsConstructor
+public enum LogisticsOrderV1Enum {
+
+    /**
+     * 物流订单-待接单
+     */
+    PENDING_ORDER(1, "pendingOrder", "1", "待处理"),
+    /**
+     * 物流订单-待派车
+     */
+    WAIT_DELIVERY(5, "waitDelivery", "5", "待派车"),
+    /**
+     * 物流订单-运输中
+     */
+    IN_TRANSIT(10, "inTransit", "10", "运输中"),
+    /**
+     * 物流订单-已完成
+     */
+    HAVE_FINISHED(15, "haveFinished", "15", "完结中"),
+    /**
+     * 物流订单-已对账
+     */
+    HAVE_RECONCILED(20, "haveReconciled", "20", "已完成"),
+
+    REJECT_ORDER(99, "rejectOrder", "99", "已拒单"),
+
+    ;
+
+    private final Integer code;
+    private final String value;
+    private final String status;
+    private final String destination;
+
+
+    public static String getDesc(int code) {
+        for (LogisticsOrderV1Enum logisticsOrderV1Enum : EnumSet.allOf(LogisticsOrderV1Enum.class)) {
+            if (logisticsOrderV1Enum.code.equals(code)) {
+                return logisticsOrderV1Enum.destination;
+            }
+        }
+        return StringUtils.EMPTY;
+
+    }
+}

+ 19 - 3
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/KwtWaybillOrderController.java

@@ -20,12 +20,11 @@ import com.sckw.excel.utils.ExcelUtil;
 import com.sckw.transport.model.dto.*;
 import com.sckw.transport.model.param.WaybillOrderReq;
 import com.sckw.transport.model.param.WaybillOrderResp;
-import com.sckw.transport.model.vo.WaybillOrderDetailVo;
-import com.sckw.transport.model.vo.WaybillOrderExportVo;
-import com.sckw.transport.model.vo.WaybillOrderSelectVo;
+import com.sckw.transport.model.vo.*;
 import com.sckw.transport.service.KwtWaybillOrderService;
 import com.sckw.transport.service.KwtWaybillOrderV1Service;
 import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
 import jakarta.servlet.http.HttpServletRequest;
 import jakarta.servlet.http.HttpServletResponse;
 import jakarta.validation.Valid;
@@ -47,6 +46,7 @@ import java.util.Map;
 @Slf4j
 @RestController
 @RequestMapping("/kwtWaybillOrder")
+@Tag(name = "运单相关接口")
 public class KwtWaybillOrderController {
 
     @Autowired
@@ -665,4 +665,20 @@ public class KwtWaybillOrderController {
         return BaseResult.success(waybillOrderV1Service.findBillOrderListPage(req));
     }
 
+    /**
+     * 查询运单详情信息
+     */
+    @PostMapping("/queryBillOrderDetail")
+    @Operation(summary = "查询运单详情信息")
+    public BaseResult<WaybillOrderDetailResp> queryBillOrderDetail(@RequestBody WaybillOrderRequest req) {
+        return BaseResult.success(waybillOrderV1Service.queryBillOrderDetail(req));
+    }
+    /**
+     * 运单审核,完善单证接口
+     */
+    @PostMapping("/reviewWaybillOrder")
+    @Operation(summary = "运单审核,完善单证接口")
+    public BaseResult<Boolean> reviewWaybillOrder(@RequestBody @Valid ReviewWaybillOrderReq req) {
+        return BaseResult.success(waybillOrderV1Service.reviewWaybillOrder(req));
+    }
 }

+ 10 - 1
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/param/LogisticsOrderResp.java

@@ -138,5 +138,14 @@ public class LogisticsOrderResp implements Serializable {
      */
     @Schema(description = "创建时间")
     private String createTime;
-
+    /**
+     * 状态
+     */
+    @Schema(description = "状态")
+    private String status;
+    /**
+     * 状态描述
+     */
+    @Schema(description = "状态描述")
+    private String statusDesc;
 }

+ 32 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/ReviewWaybillOrderReq.java

@@ -0,0 +1,32 @@
+package com.sckw.transport.model.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotBlank;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * @author :chenXiaoFei
+ * @version :1.0
+ * @description : 审核接口请求参数
+ * @create :2025-11-15 14:44:00
+ */
+@Data
+public class ReviewWaybillOrderReq implements Serializable {
+    @Serial
+    private static final long serialVersionUID = 5923170864658959346L;
+    /**
+     * 运单id
+     */
+    @Schema(description = "运单id")
+    @NotBlank(message = "运单id不能为空")
+    private String waybillId;
+    /**
+     * 状态
+     */
+    @Schema(description = "状态")
+    @NotBlank(message = "状态不能为空")
+    private String status;
+}

+ 90 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/WaybillOrderDetailResp.java

@@ -0,0 +1,90 @@
+package com.sckw.transport.model.vo;
+
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * @author :chenXiaoFei
+ * @version :1.0
+ * @description : 运单详情
+ * @create :2025-11-15 13:46:00
+ */
+@Data
+public class WaybillOrderDetailResp implements Serializable {
+    @Serial
+    private static final long serialVersionUID = -8652529429805600924L;
+    /**
+     * 运单id
+     */
+    @Schema(description = "运单id")
+    private String waybillOrderId;
+    /**
+     * 物流订单号
+     */
+    @Schema(description = "物流订单号")
+    private String logisticOrderNo;
+    /**
+     * 车牌号
+     */
+    @Schema(description = "车牌号")
+    private String truckNo;
+    /**
+     * 车辆轴数
+     */
+    @Schema(description = "车辆轴数")
+    private String carAxis;
+    /**
+     * 所属车队
+     */
+    @Schema(description = "所属车队")
+    private String fleetName;
+    /**
+     * 司机姓名
+     */
+    @Schema(description = "司机姓名")
+    private String driverName;
+    /**
+     * 联系方式
+     */
+    @Schema(description = "联系方式")
+    private String driverPhone;
+    /**
+     * 身份证号
+     */
+    @Schema(description = "身份证号")
+    private String driverIdCard;
+    /**
+     * 商品名称
+     */
+    @Schema(description = "商品名称")
+    private String goodsName;
+    /**
+     * 装货地址
+     */
+    @Schema(description = "装货地址")
+    private String loadAddress;
+    /**
+     * 卸货地址
+     */
+    @Schema(description = "卸货地址")
+    private String unloadAddress;
+    /**
+     * 任务量
+     */
+    @Schema(description = "任务量")
+    private String taskVolume;
+    /**
+     * 装货量
+     */
+    @Schema(description = "装货量")
+    private String loadAmount;
+    /**
+     * 卸货量
+     */
+    @Schema(description = "卸货量")
+    private String unloadAmount;
+
+}

+ 8 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/repository/KwtWaybillOrderRepository.java

@@ -138,4 +138,12 @@ public class KwtWaybillOrderRepository extends ServiceImpl<KwtWaybillOrderMapper
                 .orderByDesc(KwtWaybillOrder::getCreateTime)
         );
     }
+
+    public KwtWaybillOrder queryByBillOrderId(Long orderId) {
+        return getOne(Wrappers.<KwtWaybillOrder>lambdaQuery()
+                .eq(KwtWaybillOrder::getDelFlag,0)
+                .eq(KwtWaybillOrder::getId,orderId)
+                .last("limit 1")
+        );
+    }
 }

+ 7 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/repository/KwtWaybillOrderSubtaskRepository.java

@@ -71,4 +71,11 @@ public class KwtWaybillOrderSubtaskRepository extends ServiceImpl<KwtWaybillOrde
                         .orderByDesc(BaseModel::getCreateTime)
                         .orderByDesc(KwtWaybillOrderSubtask::getId));
     }
+
+    public KwtWaybillOrderSubtask queryByBillOrderId(Long id) {
+        return getOne(Wrappers.<KwtWaybillOrderSubtask>lambdaQuery()
+                .eq(KwtWaybillOrderSubtask::getWOrderId,id)
+                .eq(BaseModel::getDelFlag,0)
+                .last("limit 1"));
+    }
 }

+ 8 - 4
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtLogisticsConsignmentService.java

@@ -2437,6 +2437,8 @@ public class KwtLogisticsConsignmentService {
                 new KwtLogisticsOrderContract());
         logisticsOrderResp.setContractNo(orderContract.getContractNo());
         logisticsOrderResp.setCreateTime(DateUtils.format(kwtLogisticsOrder.getCreateTime(), DateUtils.DATE_TIME_PATTERN));
+        logisticsOrderResp.setStatus(String.valueOf(kwtLogisticsOrder.getStatus()));
+        logisticsOrderResp.setStatusDesc(LogisticsOrderV1Enum.getDesc(kwtLogisticsOrder.getStatus()));
 
         return logisticsOrderResp;
     }
@@ -2851,14 +2853,16 @@ public class KwtLogisticsConsignmentService {
         }
         KwtLogisticsOrder updateLogisticsOrder = new KwtLogisticsOrder();
         updateLogisticsOrder.setId(logOrderId);
-        if (Objects.equals(logisticsOrder.getStatus(), LogisticsOrderEnum.WAIT_DELIVERY.getCode())){
-            updateLogisticsOrder.setStatus(LogisticsOrderEnum.HAVE_FINISHED.getCode());
+        if (Objects.equals(logisticsOrder.getStatus(), LogisticsOrderV1Enum.WAIT_DELIVERY.getCode())){
+            updateLogisticsOrder.setStatus(LogisticsOrderV1Enum.HAVE_FINISHED.getCode());
         }
+
         //查询物流订单下的所有运单
         List<KwtWaybillOrderSubtask> waybillOrderSubtasks = logisticsOrderSubtaskRepository.queryByLogId(logOrderId);
-        if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(waybillOrderSubtasks) && Objects.equals(logisticsOrder.getStatus(), LogisticsOrderEnum.IN_TRANSIT.getCode())){
+        if (org.apache.commons.collections4.CollectionUtils.isNotEmpty(waybillOrderSubtasks) && Objects.equals(logisticsOrder.getStatus(), LogisticsOrderV1Enum.IN_TRANSIT.getCode())){
             boolean b = waybillOrderSubtasks.stream().anyMatch(x -> !Objects.equals(x.getStatus(),
-                    CarWaybillEnum.APPROVAL_PASS.getCode()));
+                    CarWaybillV1Enum.WAIT_UNLOADING.getCode()) || !Objects.equals(x.getStatus(),
+                    CarWaybillV1Enum.APPROVAL_TREAT.getCode()));
             if (b){
                 updateLogisticsOrder.setStatus(LogisticsOrderEnum.NEARING_COMPLETION.getCode());
             }else if (Objects.equals(logisticsOrder.getStatus(), LogisticsOrderEnum.NEARING_COMPLETION.getCode())){

+ 101 - 1
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtWaybillOrderV1Service.java

@@ -10,6 +10,7 @@ import com.google.common.collect.Lists;
 import com.google.common.collect.Maps;
 import com.google.common.collect.Sets;
 import com.sckw.core.common.enums.enums.DictTypeEnum;
+import com.sckw.core.exception.BusinessException;
 import com.sckw.core.model.constant.Global;
 import com.sckw.core.model.constant.NumberConstant;
 import com.sckw.core.model.constant.UrlConstants;
@@ -121,6 +122,8 @@ public class KwtWaybillOrderV1Service {
     private final KwtWaybillOrderRepository kwtWaybillOrderRepository;
     private final KwtLogisticsOrderUnitRepository kwtLogisticsOrderUnitRepository;
     private final KwtLogisticsOrderGoodsRepository kwtLogisticsOrderGoodsRepository;
+    private final KwtWaybillOrderSubtaskRepository kwtWaybillOrderSubtaskRepository;
+    private final KwtLogisticsOrderRepository kwtLogisticsOrderRepository;
     @Resource
     private StreamBridge streamBridge;
     @DubboReference(version = "1.0.0", group = "design", check = false)
@@ -3141,7 +3144,7 @@ public class KwtWaybillOrderV1Service {
         waybillOrderResp.setLoadingTime(DateUtils.format(loadTrack.getOperateTime(),DateUtils.DATE_TIME_PATTERN));
         waybillOrderResp.setOffsiteTime(DateUtils.format(unloadTrack.getOperateTime(),DateUtils.DATE_TIME_PATTERN));
         waybillOrderResp.setStatus(String.valueOf(record.getStatus()));
-        waybillOrderResp.setStatusDesc(CarWaybillEnum.getName(record.getStatus()));
+        waybillOrderResp.setStatusDesc(CarWaybillV1Enum.geDesc(record.getStatus()));
         return waybillOrderResp;
     }
 
@@ -3155,4 +3158,101 @@ public class KwtWaybillOrderV1Service {
         return order;
     }
 
+    public WaybillOrderDetailResp queryBillOrderDetail(WaybillOrderRequest req) {
+        log.info("查询运单详情请求:{}",JSON.toJSONString( req));
+        Long orderId = req.getOrderId();
+        KwtWaybillOrder billOrder = kwtWaybillOrderRepository.queryByBillOrderId(orderId);
+        if (Objects.isNull(billOrder)){
+            throw new BusinessException("运单信息不存在");
+        }
+        //查询车辆信息
+        RTruckVo truck = remoteFleetService.findTruck(billOrder.getTruckId());
+        //查询子运单
+        KwtWaybillOrderSubtask subtask = kwtWaybillOrderSubtaskRepository.queryByBillOrderId(billOrder.getId());
+        if (Objects.isNull(subtask)){
+            throw new BusinessException("子运单信息不存在");
+        }
+        //查询物流信息
+        KwtLogisticsOrder logOrder = kwtLogisticsOrderRepository.queryByLogisticsOrderId(subtask.getLOrderId());
+        if (Objects.isNull(logOrder)){
+            throw new BusinessException("物流信息不存在");
+        }
+        //查询车队
+        Long fleetId = Objects.nonNull(truck) && org.apache.commons.lang3.StringUtils.isNotBlank(truck.getFleetId()) ?
+                Long.parseLong(truck.getFleetId()) : null;
+
+        RFleetVo fleet = remoteFleetService.findFleetById(fleetId);
+
+        //查询商品信息
+        KwtLogisticsOrderGoods goods = kwtLogisticsOrderGoodsRepository.queryByLogOrderId(logOrder.getId());
+        //查询运单装货地址卸货地址
+        List<KwtWaybillOrderAddress> kwtWaybillOrderAddresses = waybillOrderAddressRepository.queryByWOrderId(billOrder.getId());
+        Map<String, KwtWaybillOrderAddress> keyAndAddressMap = Maps.newHashMap() ;
+        if(org.apache.commons.collections4.CollectionUtils.isNotEmpty(kwtWaybillOrderAddresses)){
+            keyAndAddressMap = kwtWaybillOrderAddresses.stream()
+                    .collect(Collectors.toMap(x -> x.getId() + "-" + x.getAddressType(),
+                    Function.identity(), (x, y) -> x));
+        }
+
+        return getWaybillOrderDetailResp(billOrder, logOrder, truck, fleet, goods, keyAndAddressMap);
+    }
+
+    @NotNull
+    private static WaybillOrderDetailResp getWaybillOrderDetailResp(KwtWaybillOrder billOrder, KwtLogisticsOrder logOrder, RTruckVo truck, RFleetVo fleet, KwtLogisticsOrderGoods goods, Map<String, KwtWaybillOrderAddress> keyAndAddressMap) {
+        WaybillOrderDetailResp waybillOrderDetailResp = new WaybillOrderDetailResp();
+        waybillOrderDetailResp.setWaybillOrderId(String.valueOf(billOrder.getId()));
+        waybillOrderDetailResp.setLogisticOrderNo(logOrder.getLOrderNo());
+        waybillOrderDetailResp.setTruckNo(billOrder.getTruckNo());
+        waybillOrderDetailResp.setCarAxis(Objects.nonNull(truck) ? truck.getCarAxis() : "");
+        waybillOrderDetailResp.setFleetName(Optional.ofNullable(fleet).map(RFleetVo::getName).orElse( ""));
+        waybillOrderDetailResp.setDriverName(billOrder.getDriverName());
+        waybillOrderDetailResp.setDriverPhone(billOrder.getDriverPhone());
+        waybillOrderDetailResp.setDriverIdCard(billOrder.getDriverIdcard());
+        waybillOrderDetailResp.setGoodsName(Optional.ofNullable(goods).map(KwtLogisticsOrderGoods::getGoodsName).orElse( ""));
+        KwtWaybillOrderAddress loadAdd = keyAndAddressMap.getOrDefault(billOrder.getId() + "-" + AddressTypeEnum.SHIPMENT.getCode(), new KwtWaybillOrderAddress());
+        waybillOrderDetailResp.setLoadAddress(loadAdd.getDetailAddress());
+        KwtWaybillOrderAddress unLoadAdd =
+                keyAndAddressMap.getOrDefault(billOrder.getId() + "-" + AddressTypeEnum.TAKE.getCode(),
+                        new KwtWaybillOrderAddress());
+        waybillOrderDetailResp.setUnloadAddress(unLoadAdd.getDetailAddress());
+        waybillOrderDetailResp.setTaskVolume(Objects.nonNull(billOrder.getEntrustAmount()) ?
+                billOrder.getEntrustAmount().setScale(2, RoundingMode.HALF_UP).toPlainString() : "");
+        waybillOrderDetailResp.setLoadAmount(Objects.nonNull(billOrder.getLoadAmount()) ?
+                billOrder.getLoadAmount().setScale(2, RoundingMode.HALF_UP).toPlainString() : "");
+        waybillOrderDetailResp.setUnloadAmount(Objects.nonNull(billOrder.getUnloadAmount()) ?
+                billOrder.getUnloadAmount().setScale(2, RoundingMode.HALF_UP).toPlainString() : "");
+        return waybillOrderDetailResp;
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    public Boolean reviewWaybillOrder(@Valid ReviewWaybillOrderReq req) {
+        log.info("审核运单请求参数:{}", JSON.toJSONString(req));
+        Long waybillId = Long.parseLong(req.getWaybillId());
+        Integer status = Integer.parseInt(req.getStatus());
+        //查询运单信息
+        KwtWaybillOrder billOrder = kwtWaybillOrderRepository.queryByBillOrderId(waybillId);
+        if (Objects.isNull(billOrder)){
+            throw new BusinessException("运单信息不存在");
+        }
+        KwtWaybillOrderSubtask subtask = kwtWaybillOrderSubtaskRepository.queryByBillOrderId(waybillId);
+        if (Objects.isNull(subtask)){
+            throw new BusinessException("子运单信息不存在");
+        }
+        KwtWaybillOrder updateOrder = new KwtWaybillOrder();
+        updateOrder.setId(billOrder.getId());
+        KwtWaybillOrderSubtask updateSubtask = new KwtWaybillOrderSubtask();
+        updateSubtask.setId(subtask.getId());
+        //运单当前状态是已卸货,传入的订单是已完成  驳回的订单可以通过完善单证变成已完成
+        List<Integer> statusList = Arrays.asList(CarWaybillV1Enum.COMPLETION_LOADING.getCode(),
+                CarWaybillV1Enum.COMPLETION_UNLOADING.getCode());
+        if (statusList.contains(billOrder.getStatus()) && Objects.equals(status, CarWaybillV1Enum.WAIT_UNLOADING.getCode())){
+            updateOrder.setStatus(status);
+            updateSubtask.setStatus(status);
+            boolean b = kwtWaybillOrderRepository.updateById(updateOrder) && kwtWaybillOrderSubtaskRepository.updateById(updateSubtask);
+            if (!b){
+               throw new BusinessException("运单状态更新失败");
+            }
+        }
+        return Boolean.TRUE;
+    }
 }