Bläddra i källkod

1、4.2运单列表、看板、单证审核查询、单证完善查询接口;

zk 1 år sedan
förälder
incheckning
4b1b09a0ac
15 ändrade filer med 913 tillägg och 40 borttagningar
  1. 14 1
      sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/enums/CarWaybillEnum.java
  2. 60 2
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/KwtWaybillOrderController.java
  3. 13 1
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/dao/KwtWaybillOrderTrackMapper.java
  4. 20 8
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/dao/KwtWaybillOrderV1Mapper.java
  5. 1 1
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/dubbo/TransportServiceImpl.java
  6. 102 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/WaybillOrderQueryDto.java
  7. 91 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/enuma/CarWaybillTableTopEnum.java
  8. 184 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/WaybillOrderSelectVo.java
  9. 3 3
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtWaybillOrderService.java
  10. 25 0
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtWaybillOrderTicketService.java
  11. 245 23
      sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtWaybillOrderV1Service.java
  12. 4 0
      sckw-modules/sckw-transport/src/main/resources/mapper/KwtWaybillOrderAddressMapper.xml
  13. 1 0
      sckw-modules/sckw-transport/src/main/resources/mapper/KwtWaybillOrderTicketMapper.xml
  14. 30 1
      sckw-modules/sckw-transport/src/main/resources/mapper/KwtWaybillOrderTrackMapper.xml
  15. 120 0
      sckw-modules/sckw-transport/src/main/resources/mapper/KwtWaybillOrderV1Mapper.xml

+ 14 - 1
sckw-common/sckw-common-core/src/main/java/com/sckw/core/model/enums/CarWaybillEnum.java

@@ -5,7 +5,7 @@ import java.util.List;
 
 /**
  * @author lfdc
- * @description 车辆运单状态枚举
+ * @desc 车辆运单状态枚举
  * @date 2023-07-14 14:07:23
  */
 public enum CarWaybillEnum {
@@ -193,4 +193,17 @@ public enum CarWaybillEnum {
                 || code == CarWaybillEnum.PENDING_VEHICLE.getCode();
     }
 
+
+    /**
+     * 运单状态
+     * @return 状态集
+     */
+    public static List<Integer> initWaybillStatusV1() {
+        List<Integer> statuses = new ArrayList<>();
+        statuses.add(CarWaybillEnum.PENDING_ORDER.getCode());
+        statuses.add(CarWaybillEnum.PENDING_VEHICLE.getCode());
+        statuses.add(CarWaybillEnum.EXIT_COMPLETED.getCode());
+        return statuses;
+    }
+
 }

+ 60 - 2
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/controller/KwtWaybillOrderController.java

@@ -3,6 +3,7 @@ package com.sckw.transport.controller;
 import com.alibaba.fastjson2.JSONObject;
 import com.github.pagehelper.PageHelper;
 import com.github.pagehelper.PageInfo;
+import com.sckw.core.exception.SystemException;
 import com.sckw.core.model.page.PageHelperUtil;
 import com.sckw.core.model.page.PageResult;
 import com.sckw.core.utils.CollectionUtils;
@@ -11,8 +12,10 @@ import com.sckw.core.web.constant.HttpStatus;
 import com.sckw.core.web.context.LoginUserHolder;
 import com.sckw.core.web.model.ValiList;
 import com.sckw.core.web.response.HttpResult;
+import com.sckw.mongo.model.TableTops;
 import com.sckw.transport.model.dto.*;
 import com.sckw.transport.model.vo.WaybillOrderDriverVo;
+import com.sckw.transport.model.vo.WaybillOrderSelectVo;
 import com.sckw.transport.service.KwtWaybillOrderService;
 import com.sckw.transport.service.KwtWaybillOrderV1Service;
 import jakarta.servlet.http.HttpServletRequest;
@@ -39,6 +42,44 @@ public class KwtWaybillOrderController {
     @Autowired
     KwtWaybillOrderV1Service waybillOrderV1Service;
 
+
+    /**
+     * @param params 请求参数
+     * @desc 统计
+     * @author zk
+     * @date 2024/3/8
+     **/
+    @PostMapping("/statistics")
+    public HttpResult statistics(@RequestBody WaybillOrderQueryDto params) throws SystemException {
+        return HttpResult.ok(waybillOrderV1Service.statistics(params));
+    }
+
+    /**
+     * @param params {page:页数、pageSize:每页条数、。。。}
+     * @desc 分页查询
+     * @author zk
+     * @date 2024/3/8
+     **/
+    @PostMapping("/select")
+    public HttpResult findListPage(@RequestBody WaybillOrderQueryDto params) throws SystemException {
+        return HttpResult.ok(waybillOrderV1Service.findListPage(params));
+    }
+
+    /**
+     * @param params {page:页数、pageSize:每页条数、。。。}
+     * @desc 分页查询
+     * @author zk
+     * @date 2024/3/8
+     **/
+    @PostMapping("/ndex")
+    public HttpResult findNdexPage(@RequestBody WaybillOrderQueryDto params) throws SystemException {
+        return HttpResult.ok(waybillOrderV1Service.findNdexPage(params));
+    }
+
+
+
+
+
     /**
      * @desc 统计司机任务数(待接单/出车/执行/完结)
      * @author zk
@@ -138,6 +179,9 @@ public class KwtWaybillOrderController {
         }
     }
 
+
+
+
     /**
      * @param params {}
      * @desc 派车-趟次/循环
@@ -415,7 +459,6 @@ public class KwtWaybillOrderController {
         return waybillOrderV1Service.editTicketV1(params);
     }
 
-
     /**
      * @param wOrderId 运单ID
      * @desc 修改单证查询运单
@@ -424,9 +467,24 @@ public class KwtWaybillOrderController {
      **/
     @GetMapping("/ticketWaybillOrder")
     public HttpResult ticketWaybillOrder(@RequestParam("wOrderId") Long wOrderId){
-        return waybillOrderService.ticketWaybillOrder(wOrderId);
+        return waybillOrderV1Service.ticketWaybillOrder(wOrderId);
+    }
+
+    /**
+     * @param wOrderId 运单ID
+     * @desc 修改单证查询运单
+     * @author zk
+     * @date 2023/8/2
+     **/
+    @GetMapping("/ticketApproval")
+    public HttpResult ticketApproval(@RequestParam("wOrderId") Long wOrderId){
+        return waybillOrderV1Service.ticketApproval(wOrderId);
     }
 
+
+
+
+
     /**
      * @param params {}
      * @desc 单证审核

+ 13 - 1
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/dao/KwtWaybillOrderTrackMapper.java

@@ -5,6 +5,8 @@ import com.sckw.transport.model.KwtWaybillOrderTrack;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.List;
+
 /**
  * @author zk
  * @desc 车辆运单状态记录
@@ -30,5 +32,15 @@ public interface KwtWaybillOrderTrackMapper extends BaseMapper<KwtWaybillOrderTr
      * @date 2023/7/27
      * @return 车辆运单状态信息
      **/
-    KwtWaybillOrderTrack findWaybillOrderTrack(@Param("wOrderId") Long wOrderId, @Param("status") Integer status);
+    KwtWaybillOrderTrack findWaybillOrderTrack(@Param("wOrderId") Long wOrderId, @Param("wSubtaskId")  Long wSubtaskId, @Param("wAddressId")  Long wAddressId, @Param("status") Integer status);
+
+    /**
+     * 查询运单状态记录
+     * @param wOrderId 运单ID
+     * @param wSubtaskId 运单子单ID
+     * @param wAddressId 地址ID
+     * @param status 状态
+     * @return 运单状态记录信息
+     */
+    List<KwtWaybillOrderTrack> findTrack(@Param("wOrderId") Long wOrderId, @Param("wSubtaskId")  Long wSubtaskId, @Param("wAddressId")  Long wAddressId, @Param("status") Integer status);
 }

+ 20 - 8
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/dao/KwtWaybillOrderV1Mapper.java

@@ -1,18 +1,13 @@
 package com.sckw.transport.dao;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import com.sckw.mongo.model.TableTops;
-import com.sckw.transport.model.KwtWaybillOrder;
+import com.sckw.core.model.vo.TableTop;
 import com.sckw.transport.model.KwtWaybillOrderV1;
-import com.sckw.transport.model.dto.OrderCarDTO;
-import com.sckw.transport.model.dto.WayBillDetailDTO;
-import com.sckw.transport.model.dto.WaybillAmountDTO;
+import com.sckw.transport.model.dto.WaybillOrderQueryDto;
 import com.sckw.transport.model.vo.WaybillCountVo;
-import com.sckw.transport.model.vo.WaybillOrderDriverVo;
+import com.sckw.transport.model.vo.WaybillOrderSelectVo;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
-
-import java.math.BigDecimal;
 import java.util.List;
 import java.util.Map;
 
@@ -24,6 +19,23 @@ import java.util.Map;
 @Mapper
 public interface KwtWaybillOrderV1Mapper extends BaseMapper<KwtWaybillOrderV1> {
 
+    /**
+     * 查询统计
+     * @param params 查询参数
+     * @return 统计数据
+     */
+    List<TableTop> statistics(WaybillOrderQueryDto params);
+
+    /**
+     * 查询统计
+     * @param params 查询参数
+     * @return 统计数据
+     */
+    List<WaybillOrderSelectVo> findListPage(WaybillOrderQueryDto params);
+
+
+
+
     /**
      * 查询统计司机或车辆关联订单数量信息
      * @param driverId 司机ID

+ 1 - 1
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/dubbo/TransportServiceImpl.java

@@ -630,7 +630,7 @@ public class TransportServiceImpl implements TransportRemoteService {
         for (KwtWaybillOrder waybillOrder : waybillOrders) {
             RWaybillOrderVo order = new RWaybillOrderVo();
             BeanUtils.copyProperties(waybillOrder, order);
-            KwtWaybillOrderTrack track = waybillOrderTrackDao.findWaybillOrderTrack(waybillOrder.getId(), CarWaybillEnum.EXIT_COMPLETED.getCode());
+            KwtWaybillOrderTrack track = waybillOrderTrackDao.findWaybillOrderTrack(waybillOrder.getId(), null, null, CarWaybillEnum.EXIT_COMPLETED.getCode());
             order.setDepartureTime(track != null ? track.getOperateTime() : null);
             waybillOrderVos.add(order);
         }

+ 102 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/dto/WaybillOrderQueryDto.java

@@ -0,0 +1,102 @@
+package com.sckw.transport.model.dto;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.sckw.core.model.page.PageRequest;
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+import java.util.Date;
+
+/**
+ * @author zk
+ * @desc 运单查询参数
+ * @date 2024/3/8 0008
+ */
+@Data
+public class WaybillOrderQueryDto extends PageRequest{
+
+    private String ids;
+
+    /**
+     * 企业ID
+     */
+    private Long  entId;
+
+    /**
+     * 关键字搜索
+     */
+    private String keywords;
+
+    /**
+     * 派车开始时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private Date startSendCarTime;
+
+    /**
+     * 派车结束时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private Date endSendCarTime;
+
+
+    /**
+     * 装载开始时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private Date startLoadTime;
+
+    /**
+     * 装载结束时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private Date endLoadTime;
+
+    /**
+     * 卸载开始时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private Date startUnloadTime;
+
+    /**
+     * 卸载结束时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private Date endUnloadTime;
+
+    /**
+     * 装载城市
+     */
+    private String loadCityCode;
+
+    /**
+     * 装载城市查询等级
+     */
+    private Integer loadCityCodeLevel;
+
+    /**
+     * 卸载城市
+     */
+    private String unloadCityCode;
+
+    /**
+     * 卸载城市查询等级
+     */
+    private Integer unloadCityCodeLevel;
+
+    /**
+     * 运单状态
+     */
+    @JsonProperty("status")
+    @NotNull(message = "订单状态不能为空")
+    private Integer status;
+    private String queryWstatus;
+
+    public void setLoadCityCodeLevel(Integer loadCityCodeLevel) {
+        this.loadCityCodeLevel = loadCityCodeLevel != null && loadCityCodeLevel == 3 ? 0 : loadCityCodeLevel == 2 ? 4 : 2;
+    }
+
+    public void setUnloadCityCodeLevel(Integer unloadCityCodeLevel) {
+        this.unloadCityCodeLevel = unloadCityCodeLevel != null && unloadCityCodeLevel == 3 ? 0 : unloadCityCodeLevel == 2 ? 4 : 2;
+    }
+}

+ 91 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/enuma/CarWaybillTableTopEnum.java

@@ -0,0 +1,91 @@
+package com.sckw.transport.model.enuma;
+
+/**
+ * @author zk
+ * @desc 车辆运单表头状态查询枚举
+ * @date 2024/3/8 0008
+ */
+
+public enum CarWaybillTableTopEnum {
+    /**
+     * 待接单
+     */
+    TREAT_CONNECT(100, "101", "待接单"),
+    /**
+     * 待出车
+     */
+    TREAT_OUT(200, "201", "待出车"),
+    /**
+     * 已出车
+     */
+    SET_OUT(300, "203", "已出车"),
+    /**
+     * 到达装货点
+     */
+    LOAD_ADDRESS(400, "301", "到达装货点"),
+    /**
+     * 已装货
+     */
+    LOAD(500, "302", "已装货"),
+    /**
+     * 到达卸货点
+     */
+    UNLOAD_ADDRESS(600, "401", "到达卸货点"),
+    /**
+     * 已卸货
+     */
+    UNLOAD(700, "402", "已卸货"),
+    /**
+     * 单证审核
+     */
+    DOCUMENT_REVIEW(800,  "501,504,503", "单证审核"),
+    /**
+     * 单证审核
+     */
+    CPMPLETE(900,  "502", "完成"),
+    /**
+     * 已作废
+     */
+    VOIDED(1000, "102,103,202,", "已作废");
+
+
+    private final Integer code;
+    private final String value;
+    private final String name;
+
+    CarWaybillTableTopEnum(Integer code, String value, String name) {
+        this.code = code;
+        this.value = value;
+        this.name = name;
+    }
+
+    public static String getName(Integer code) {
+        for (CarWaybillTableTopEnum entity : CarWaybillTableTopEnum.values()) {
+            if (entity.getCode().equals(code)) {
+                return entity.getName();
+            }
+        }
+        return null;
+    }
+
+    public static String getValue(Integer code) {
+        for (CarWaybillTableTopEnum entity : CarWaybillTableTopEnum.values()) {
+            if (entity.getCode().equals(code)) {
+                return entity.getValue();
+            }
+        }
+        return null;
+    }
+
+    public Integer getCode() {
+        return code;
+    }
+
+    public String getValue() {
+        return value;
+    }
+
+    public String getName() {
+        return name;
+    }
+}

+ 184 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/vo/WaybillOrderSelectVo.java

@@ -0,0 +1,184 @@
+package com.sckw.transport.model.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.sckw.core.model.constant.Global;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * @author zk
+ * @desc 车辆运单列表
+ * @date 2024/3/11 0011
+ */
+@Data
+@Accessors(chain = true)
+public class WaybillOrderSelectVo implements Serializable {
+
+    /**
+     * 企业ID
+     */
+    private Long  entId;
+
+    @Serial
+    private static final long serialVersionUID = 4526063761808958350L;
+    /**
+     * 运单id
+     */
+    @JsonProperty(value="wOrderId")
+    private String wOrderId;
+
+    /**
+     * 运单号
+     */
+    @JsonProperty(value="wOrderNo")
+    private String wOrderNo;
+
+    /**
+     * 车辆牌照
+     */
+    private String truckNo;
+
+    /**
+     * 司机
+     */
+    private String driverName;
+
+    /**
+     * 司机手机号
+     */
+    private String driverPhone;
+
+    /**
+     * 运单类型数字
+     */
+    private int type;
+
+    /**
+     * 运单类型字符
+     */
+    private String typeLabel;
+
+    /**
+     * 派车时间
+     */
+    private String sendCarTime;
+
+    /**
+     * 创建时间
+     */
+    private String createTime;
+
+    /**
+     * 更新时间
+     */
+    private String updateTime;
+
+    /**
+     * 运单状态
+     */
+    private Integer  status;
+
+    /**
+     * 运单状态字符
+     */
+    private String  statusLabel;
+
+    public String getTypeLabel() {
+        return type == Global.NUMERICAL_ONE ? "趟次" : "循环";
+    }
+
+    /**
+     * 托量单位
+     */
+    private String unit;
+
+    /**
+     * 托量单位字符
+     */
+    private String unitLabel;
+
+
+    /**
+     * 承运车队
+     */
+    private String firmName;
+
+
+    /**
+     * 计划开始时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private Date startTime;
+
+    /**
+     * 计划结束时间
+     */
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
+    private Date endTime;
+
+    /**
+     * 派单量/吨
+     */
+    private String entrustAmount;
+
+    /**
+     * 装货地点名称
+     */
+    private String loadName;
+
+    /**
+     * 装货地点
+     */
+    private String loadAddress;
+
+    /**
+     * 卸货地点点名称
+     */
+    private String unloadName;
+
+    /**
+     * 卸货地点
+     */
+    private String unloadAddress;
+
+    /**
+     * 实装量/吨
+     */
+    private String loadAmount;
+
+    /**
+     * 实卸量/吨
+     */
+    private String unloadAmount;
+
+    /**
+     * 装货时间
+     */
+    private String loadDateTime;
+
+    /**
+     * 卸货时间
+     */
+    private String unloadDateTime;
+
+    /**
+     * 亏吨重量
+     */
+    private String deficitAmount;
+
+    /**
+     * 扣亏损值(合理损耗-(实装-实卸))-单位
+     */
+    private String goodsPriceUnit;
+
+    /**
+     * 扣亏量(合理损耗-(实装-实卸))-单位
+     */
+    private String deficitRealAmount;
+
+}

+ 3 - 3
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtWaybillOrderService.java

@@ -173,7 +173,7 @@ public class KwtWaybillOrderService {
             //出车-出车时间
             if (busStatus == Global.NUMERICAL_TWO) {
                 for (WaybillOrderDriverVo waybillOrder : waybillOrders) {
-                    KwtWaybillOrderTrack track = waybillOrderTrackDao.findWaybillOrderTrack(waybillOrder.getWOrderId(), waybillOrder.getStatus());
+                    KwtWaybillOrderTrack track = waybillOrderTrackDao.findWaybillOrderTrack(waybillOrder.getWOrderId(), null, null, waybillOrder.getStatus());
                     waybillOrder.setOperateTime(track != null ? track.getOperateTime() : null);
                 }
             }
@@ -2439,7 +2439,7 @@ public class KwtWaybillOrderService {
         //商品信息
         KwtLogisticsOrderGoods goods = logisticsOrderGoodsDao.findByGoods(waybillOrder.getLOrderId());
         //审批意见
-        KwtWaybillOrderTrack track = waybillOrderTrackDao.findWaybillOrderTrack(waybillOrder.getId(), CarWaybillEnum.APPROVAL_NO_PASS.getCode());
+        KwtWaybillOrderTrack track = waybillOrderTrackDao.findWaybillOrderTrack(waybillOrder.getId(), null, null, CarWaybillEnum.APPROVAL_NO_PASS.getCode());
         //辅助单位
         List<GoodsUnitVo> assistUnit = kwtLogisticsOrderGoodsService.assistUnit(waybillOrder.getLOrderId());
 
@@ -2514,7 +2514,7 @@ public class KwtWaybillOrderService {
         //商品信息
         KwtLogisticsOrderGoods goods = logisticsOrderGoodsDao.findByGoods(waybillOrder.getLOrderId());
         //审批意见
-        KwtWaybillOrderTrack track = waybillOrderTrackDao.findWaybillOrderTrack(waybillOrder.getId(), CarWaybillEnum.APPROVAL_NO_PASS.getCode());
+        KwtWaybillOrderTrack track = waybillOrderTrackDao.findWaybillOrderTrack(waybillOrder.getId(), null, null, CarWaybillEnum.APPROVAL_NO_PASS.getCode());
 
         //用户数据集
         List<Long> createBys = new ArrayList() {{

+ 25 - 0
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtWaybillOrderTicketService.java

@@ -13,6 +13,7 @@ import com.sckw.system.api.model.dto.res.SysDictResDto;
 import com.sckw.transport.dao.KwtWaybillOrderMapper;
 import com.sckw.transport.dao.KwtWaybillOrderTicketMapper;
 import com.sckw.transport.model.KwtWaybillOrder;
+import com.sckw.transport.model.KwtWaybillOrderSubtask;
 import com.sckw.transport.model.KwtWaybillOrderTicket;
 import com.sckw.transport.model.dto.WaybillOrderTicketLoadingDto;
 import com.sckw.transport.model.vo.WaybillOrderLoadingVO;
@@ -270,4 +271,28 @@ public class KwtWaybillOrderTicketService {
         return loadLoading;
     }
 
+    /**
+     * 单证信息
+     * @param subtask 运单-子单
+     * @param type 单证类型
+     * @return 运载信息
+     */
+    public List<WaybillOrderLoadingVO> agreementV1(KwtWaybillOrderSubtask subtask, int type) {
+        //运载信息
+        List<WaybillOrderLoadingVO> loadLoading = new ArrayList<>();
+        //单位数据字典
+        Map<String, SysDictResDto> unitType = remoteSystemService.queryDictMapByType(DictTypeEnum.UNIT_TYPE.getType());
+        //装载信息
+        List<KwtWaybillOrderTicket> loading = waybillOrderTicketMapper.findWaybillOrderTicket(subtask.getWOrderId(), subtask.getId(), type);
+        if (CollectionUtils.isNotEmpty(loading)) {
+            loading.forEach(e -> {
+                SysDictResDto sysDict = unitType != null ? unitType.get(e.getUnit()) : null;
+                WaybillOrderLoadingVO loadingVo = new WaybillOrderLoadingVO(e.getUnit(), sysDict != null ? sysDict.getLabel() : null, e.getAmount());
+                loadingVo.setMain(subtask.getUnit().equals(e.getUnit()) ? true : false);
+                loadLoading.add(loadingVo);
+            });
+        }
+        return loadLoading;
+    }
+
 }

+ 245 - 23
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/KwtWaybillOrderV1Service.java

@@ -1,14 +1,14 @@
 package com.sckw.transport.service;
 
-import com.alibaba.fastjson2.JSON;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.github.pagehelper.PageHelper;
+import com.github.pagehelper.PageInfo;
 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.enums.*;
+import com.sckw.core.model.page.PageHelperUtil;
 import com.sckw.core.model.page.PageResult;
+import com.sckw.core.model.vo.TableTop;
 import com.sckw.core.utils.*;
 import com.sckw.core.web.constant.HttpStatus;
 import com.sckw.core.web.context.LoginUserHolder;
@@ -17,26 +17,16 @@ import com.sckw.excel.utils.DateUtil;
 import com.sckw.fleet.api.RemoteFleetService;
 import com.sckw.fleet.api.model.vo.RDriverVo;
 import com.sckw.fleet.api.model.vo.RTruckVo;
-import com.sckw.mongo.enums.BusinessTypeEnum;
-import com.sckw.mongo.model.SckwLogisticsOrder;
-import com.sckw.mongo.model.SckwWaybillOrder;
 import com.sckw.order.api.dubbo.TradeOrderInfoService;
-import com.sckw.redis.constant.RedisConstant;
-import com.sckw.redis.utils.RedissonUtils;
-import com.sckw.stream.enums.MessageEnum;
-import com.sckw.stream.model.SckwBusSum;
-import com.sckw.stream.model.SckwMessage;
-import com.sckw.stream.model.UserInfo;
 import com.sckw.system.api.RemoteSystemService;
-import com.sckw.system.api.model.dto.res.EntCacheResDto;
 import com.sckw.system.api.model.dto.res.SysDictResDto;
+import com.sckw.system.api.model.dto.res.UserCacheResDto;
 import com.sckw.transport.dao.*;
 import com.sckw.transport.model.*;
 import com.sckw.transport.model.dto.*;
+import com.sckw.transport.model.enuma.CarWaybillTableTopEnum;
 import com.sckw.transport.model.vo.*;
 import jakarta.annotation.Resource;
-import jakarta.servlet.http.HttpServletRequest;
-import jakarta.validation.Valid;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.dubbo.config.annotation.DubboReference;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -44,9 +34,6 @@ import org.springframework.beans.factory.annotation.Value;
 import org.springframework.cloud.stream.function.StreamBridge;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestParam;
-
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.time.LocalDateTime;
@@ -79,14 +66,10 @@ public class KwtWaybillOrderV1Service {
     @Autowired
     KwtWaybillOrderSubtaskMapper waybillOrderSubtaskDao;
     @Autowired
-    KwtLogisticsOrderUnitMapper logisticsOrderUnitDao;
+    KwtLogisticsOrderAmountMapper logisticsOrderAmountDao;
     @Autowired
     KwtLogisticsOrderGoodsMapper logisticsOrderGoodsDao;
     @Autowired
-    KwtLogisticsOrderCirculateMapper logisticsOrderCirculateDao;
-    @Autowired
-    KwtLogisticsOrderAmountMapper logisticsOrderAmountDao;
-    @Autowired
     KwtWaybillOrderTicketService waybillOrderTicketService;
     @Autowired
     KwtLogisticsOrderGoodsService kwtLogisticsOrderGoodsService;
@@ -107,6 +90,80 @@ public class KwtWaybillOrderV1Service {
     @Value("${message.waybill.refuseSendCar.pc}")
     private String refuseSendCarPcUrl;
 
+    /**
+     * @param params 请求参数
+     * @desc 统计
+     * @author zk
+     * @date 2024/3/8
+     **/
+    public List<TableTop> statistics(WaybillOrderQueryDto params){
+        //统计信息
+        List<TableTop> tableTops = waybillOrderV1Dao.statistics(params);
+
+        //数据处理
+        List<TableTop> topList = new ArrayList<>();
+        for (CarWaybillTableTopEnum entity:CarWaybillTableTopEnum.values()) {
+            TableTop top = new TableTop();
+            top.setName(entity.getName());
+            top.setValue(entity.getCode());
+            top.setTotal(Global.NUMERICAL_ZERO);
+            if (entity.getValue() == null) {
+                //全部数据
+                int totalCount = tableTops.stream().mapToInt(TableTop::getTotal).sum();
+                top.setTotal(totalCount);
+            } else {
+                tableTops.stream().filter(table -> entity.getValue().contains(String.valueOf(table.getValue()))).findAny().ifPresent(tableTop -> top.setTotal(tableTop.getTotal()));
+            }
+            topList.add(top);
+        }
+        return topList;
+    }
+
+    /**
+     * @param params {page:页数、pageSize:每页条数、。。。}
+     * @desc 分页查询
+     * @author zk
+     * @date 2024/3/8
+     **/
+    public PageResult findListPage(WaybillOrderQueryDto params){
+        params.setEntId(LoginUserHolder.getEntId());
+        // 设置分页参数
+        PageHelper.startPage(params.getPage(), params.getPageSize());
+        params.setQueryWstatus(CarWaybillTableTopEnum.getValue(params.getStatus()));
+        List<WaybillOrderSelectVo> list = waybillOrderV1Dao.findListPage(params);
+        for (WaybillOrderSelectVo waybillOrder:list) {
+            waybillOrder.setStatusLabel(CarWaybillEnum.getName(waybillOrder.getStatus()));
+        }
+        PageResult pageResult = PageHelperUtil.getPageResult(new PageInfo<>(list));
+        return pageResult;
+    }
+
+    /**
+     * @param params {page:页数、pageSize:每页条数、。。。}
+     * @desc 分页查询
+     * @author zk
+     * @date 2024/3/8
+     **/
+    public PageResult findNdexPage(WaybillOrderQueryDto params){
+        params.setEntId(LoginUserHolder.getEntId());
+        // 设置分页参数
+        PageHelper.startPage(params.getPage(), params.getPageSize());
+        params.setQueryWstatus(CarWaybillTableTopEnum.getValue(params.getStatus()));
+        List<WaybillOrderSelectVo> list = waybillOrderV1Dao.findListPage(params);
+        for (WaybillOrderSelectVo waybillOrder:list) {
+            waybillOrder.setStatusLabel(CarWaybillEnum.getName(waybillOrder.getStatus()));
+        }
+        PageResult pageResult = PageHelperUtil.getPageResult(new PageInfo<>(list));
+        return pageResult;
+    }
+
+
+
+
+
+
+
+
     /**
      * @param params 派车参数
      * @desc 派车-多装多卸
@@ -1458,6 +1515,171 @@ public class KwtWaybillOrderV1Service {
         }
     }
 
+    /**
+     * @param wOrderId 运单ID
+     * @desc 修改单证查询运单
+     * @author zk
+     * @date 2024/3/11
+     **/
+    public HttpResult ticketApproval(Long wOrderId) {
+        //车辆运单信息
+        KwtWaybillOrderV1 waybillOrder = waybillOrderV1Dao.selectById(wOrderId);
+        if (waybillOrder == null) {
+            return HttpResult.ok("车辆运单信息不存在!");
+        }
+
+        //操作人
+        List<KwtWaybillOrderTicket> tickets = waybillOrderTicketDao.findWaybillOrderTicket(wOrderId, null, null);
+        List<Long> userIds = tickets.stream().map(KwtWaybillOrderTicket::getCreateBy).toList();
+        List<UserCacheResDto> users = remoteSystemService.queryUserCacheByIds(userIds);
+        Map<Long, UserCacheResDto> usersMap = new HashMap<>(Global.NUMERICAL_SIXTEEN);
+        users.forEach(e -> usersMap.put(e.getId(), e));
+
+        /*数据处理*/
+        List<Map<String, Object>> addressList = new ArrayList<>();
+        List<Integer> typeList = new ArrayList<>(){{add(AddressDefaultTypeEnum.SHIPMENT.getCode()); add(AddressDefaultTypeEnum.TAKE.getCode());}};
+        for (Integer type:typeList) {
+            //装货地址
+            List<KwtWaybillOrderAddress> addresses = waybillOrderAddressDao.findByAddresses(wOrderId, type);
+            for (KwtWaybillOrderAddress address:addresses) {
+                //子单信息
+                KwtWaybillOrderSubtask subtask = waybillOrderSubtaskDao.selectById(address.getWSubtaskId());
+                //物流订单商品信息
+                KwtLogisticsOrderGoods goods = logisticsOrderGoodsDao.findByGoods(subtask != null ? subtask.getLOrderId() : null);
+                //榜单信息
+                KwtWaybillOrderTicket ticket = waybillOrderTicketDao.findWaybillOrderTicketV2(address.getId(), subtask.getUnit());
+                //辅助单位
+                List<WaybillOrderLoadingVO> loading = waybillOrderTicketService.agreementV1(subtask, type);
+
+                Map<String, Object> trackData = new HashMap<>(NumberConstant.SIXTEEN);
+                trackData.put("wTicketId", ticket != null ? ticket.getId() : null);
+                trackData.put("wOrderId", ticket != null ? ticket.getWOrderId() : null);
+                trackData.put("wSubtaskId", ticket != null ? ticket.getWSubtaskId() : null);
+                trackData.put("wAddressId", ticket != null ? ticket.getWAddressId() : null);
+                trackData.put("urls", ticket != null ? FileUtils.spliceBatch(ticket.getUrls()) : null);
+                trackData.put("operateTime", ticket != null ? DateUtil.dateTimeFormatter(ticket.getOperateTime()) : null);
+                trackData.put("createTime", ticket != null ? DateUtil.dateTimeFormatter(ticket.getCreateTime()) : null);
+                trackData.put("approvalStatus", ticket != null ? ticket.getStatus() : null);
+                trackData.put("createByName", ticket != null ? usersMap.get(ticket.getCreateBy()) == null ? waybillOrder.getDriverName() : usersMap.get(ticket.getCreateBy()).getName() : null);
+                trackData.put("cityName", address.getCityName());
+                trackData.put("detailAddress", address.getDetailAddress());
+                trackData.put("goodsName", goods != null ? goods.getGoodsName() : null);
+                trackData.put("loading", loading);
+                addressList.add(trackData);
+            }
+        }
+
+        Map<String, Object> result = new HashMap<>(Global.NUMERICAL_SIXTEEN);
+        result.put("wOrderId", wOrderId);
+        result.put("wOrderNo", waybillOrder.getWOrderNo());
+        result.put("status", waybillOrder.getStatus());
+        result.put("statusName", CarWaybillEnum.getName(waybillOrder.getStatus()));
+        result.put("truckNo", waybillOrder.getTruckNo());
+        result.put("driverName", waybillOrder.getDriverName());
+        result.put("driverPhone", waybillOrder.getDriverPhone());
+        result.put("driverIdcard", waybillOrder.getDriverIdcard());
+        result.put("createTime", waybillOrder.getCreateTime());
+        result.put("addressList", addressList);
+        return HttpResult.ok(result);
+    }
+
+    /**
+     * @param wOrderId 运单ID
+     * @desc 修改单证查询运单
+     * @author zk
+     * @date 2024/3/11
+     **/
+    public HttpResult ticketWaybillOrder(Long wOrderId) {
+        //车辆运单信息
+        KwtWaybillOrderV1 waybillOrder = waybillOrderV1Dao.selectById(wOrderId);
+        if (waybillOrder == null) {
+            return HttpResult.ok("车辆运单信息不存在!");
+        }
+        //运单状态
+        List<KwtWaybillOrderTrack> tracks = waybillOrderTrackDao.findTrack(wOrderId, null, null, null);
+        //操作人
+        List<Long> userIds = tracks.stream().map(KwtWaybillOrderTrack::getCreateBy).toList();
+        List<UserCacheResDto> users = remoteSystemService.queryUserCacheByIds(userIds);
+        Map<Long, UserCacheResDto> usersMap = new HashMap<>(Global.NUMERICAL_SIXTEEN);
+        users.forEach(e -> usersMap.put(e.getId(), e));
+
+        /*数据处理*/
+        List<Map<String, Object>> trackList = new ArrayList<>();
+        //运单状态(待接单、待出车、出车)
+        List<Integer> statusList = CarWaybillEnum.initWaybillStatusV1();
+        for (Integer status:statusList) {
+            KwtWaybillOrderTrack track = waybillOrderTrackDao.findWaybillOrderTrack(wOrderId, null, null, status);
+            Map<String, Object> trackData = new HashMap<>(NumberConstant.SIXTEEN);
+            trackData.put("id", track != null ? track.getId() : null);
+            trackData.put("wOrderId", track != null ? track.getWOrderId() : null);
+            trackData.put("wSubtaskId", track != null ? track.getWSubtaskId() : null);
+            trackData.put("wAddressId", track != null ? track.getWAddressId() : null);
+            trackData.put("operateTime", track != null ? track.getOperateTime() : null);
+            trackData.put("createTime", track != null ? track.getCreateTime() : null);
+            trackData.put("createByName", track != null ? usersMap.get(track.getCreateBy()) == null ? waybillOrder.getDriverName() : usersMap.get(track.getCreateBy()).getName() : null);
+            trackData.put("status", status);
+            trackData.put("statusName", CarWaybillEnum.getName(status));
+            trackData.put("operateStatus", track != null);
+            trackList.add(trackData);
+        }
+
+        //运单状态处理(到达装货点、已装货、到达卸货点、已卸货)
+        List<KwtWaybillOrderAddress> addresses = waybillOrderAddressDao.findByAddresses(wOrderId, null);
+        for (KwtWaybillOrderAddress address:addresses) {
+            if (address.getAddressType().equals(AddressDefaultTypeEnum.SHIPMENT.getCode())) {
+                statusList = new ArrayList<>(){{add(CarWaybillEnum.WAIT_LOADING.getCode()); add(CarWaybillEnum.COMPLETION_LOADING.getCode());}};
+            } else {
+                statusList = new ArrayList<>(){{add(CarWaybillEnum.WAIT_UNLOADING.getCode()); add(CarWaybillEnum.COMPLETION_UNLOADING.getCode());}};
+            }
+
+            //子单信息
+            KwtWaybillOrderSubtask subtask = waybillOrderSubtaskDao.selectById(address.getWSubtaskId());
+            //物流订单商品信息
+            KwtLogisticsOrderGoods goods = logisticsOrderGoodsDao.findByGoods(subtask != null ? subtask.getLOrderId() : null);
+            for (Integer status:statusList) {
+                KwtWaybillOrderTrack track = waybillOrderTrackDao.findWaybillOrderTrack(wOrderId, null, null, status);
+                Map<String, Object> trackData = new HashMap<>(NumberConstant.SIXTEEN);
+                trackData.put("id", track != null ? track.getId() : null);
+                trackData.put("wOrderId", track != null ? track.getWOrderId() : null);
+                trackData.put("wSubtaskId", track != null ? track.getWSubtaskId() : null);
+                trackData.put("wAddressId", track != null ? track.getWAddressId() : null);
+                trackData.put("operateTime", track != null ? track.getOperateTime() : null);
+                trackData.put("createTime", track != null ? track.getCreateTime() : null);
+                trackData.put("createByName", track != null ? usersMap.get(track.getCreateBy()) == null ? waybillOrder.getDriverName() : usersMap.get(track.getCreateBy()).getName() : null);
+                trackData.put("status", status);
+                trackData.put("statusName", CarWaybillEnum.getName(status));
+                trackData.put("operateStatus", track != null);
+                trackData.put("planTime", track != null ? address.getPlanTime() : null);
+                trackData.put("entrustAmount", track != null ? address.getEntrustAmount() : null);
+                trackData.put("goodsName", goods != null ? goods.getGoodsName() : null);
+                trackList.add(trackData);
+            }
+        }
+
+        Map<String, Object> result = new HashMap<>(Global.NUMERICAL_SIXTEEN);
+        result.put("wOrderId", wOrderId);
+        result.put("wOrderNo", waybillOrder.getWOrderNo());
+        result.put("status", waybillOrder.getStatus());
+        result.put("statusName", CarWaybillEnum.getName(waybillOrder.getStatus()));
+        result.put("truckNo", waybillOrder.getTruckNo());
+        result.put("driverName", waybillOrder.getDriverName());
+        result.put("driverPhone", waybillOrder.getDriverPhone());
+        result.put("driverIdcard", waybillOrder.getDriverIdcard());
+        result.put("createTime", waybillOrder.getCreateTime());
+        result.put("trackList", trackList);
+
+
+
+        return HttpResult.ok(result);
+    }
+
+
+
+
+
+
+
+
 
 
 

+ 4 - 0
sckw-modules/sckw-transport/src/main/resources/mapper/KwtWaybillOrderAddressMapper.xml

@@ -11,6 +11,7 @@
         where del_flag = 0
         and w_order_id = #{wOrderId, jdbcType=BIGINT}
         and address_type = #{addressType, jdbcType=INTEGER}
+        order by sort
     </select>
 
     <select id="findByAddresses" resultType="com.sckw.transport.model.KwtWaybillOrderAddress" >
@@ -25,6 +26,7 @@
         <if test="addressType != null and addressType != ''">
             and address_type = #{addressType, jdbcType=BIGINT}
         </if>
+        order by sort
     </select>
 
     <select id="findBySubtaskId" resultType="com.sckw.transport.model.KwtWaybillOrderAddress" >
@@ -39,6 +41,7 @@
         <if test="addressType != null and addressType != ''">
             and address_type = #{addressType, jdbcType=BIGINT}
         </if>
+        order by sort
     </select>
 
     <select id="findByLAddressIds" resultType="com.sckw.transport.model.KwtWaybillOrderAddress" >
@@ -55,6 +58,7 @@
                 #{item}
             </foreach>
         </if>
+        order by sort
     </select>
 
     <select id="findAddressCodeList" resultType="java.lang.Integer" >

+ 1 - 0
sckw-modules/sckw-transport/src/main/resources/mapper/KwtWaybillOrderTicketMapper.xml

@@ -76,6 +76,7 @@
         <if test="unit != null and unit != ''">
             and unit = #{unit, jdbcType=VARCHAR}
         </if>
+        order by update_time limit 1
     </select>
 
     <update id="deleteTicket">

+ 30 - 1
sckw-modules/sckw-transport/src/main/resources/mapper/KwtWaybillOrderTrackMapper.xml

@@ -19,16 +19,45 @@
 
     <select id="findWaybillOrderTrack" resultType="com.sckw.transport.model.KwtWaybillOrderTrack" >
         select
-        id, w_order_id wOrderId, remark, `status`, operate_time operateTime, create_by createBy, create_time createTime, update_by updateBy,
+        id, w_order_id wOrderId, w_subtask_id wSubtaskId, w_address_id wAddressId, remark,
+        `status`, operate_time operateTime, create_by createBy, create_time createTime, update_by updateBy,
         update_time updateTime
         from kwt_waybill_order_track
         where del_flag = 0
         <if test="wOrderId != null and wOrderId != ''">
             and w_order_id = #{wOrderId, jdbcType=BIGINT}
         </if>
+        <if test="wSubtaskId != null and wSubtaskId != ''">
+            and w_subtask_id = #{wSubtaskId, jdbcType=BIGINT}
+        </if>
+        <if test="wAddressId != null and wAddressId != ''">
+            and w_address_id = #{wAddressId, jdbcType=BIGINT}
+        </if>
         <if test="status != null and status != ''">
             and status = #{status, jdbcType=INTEGER}
         </if>
         order by create_time desc limit 1
     </select>
+
+    <select id="findTrack" resultType="com.sckw.transport.model.KwtWaybillOrderTrack" >
+        select
+        id, w_order_id wOrderId, w_subtask_id wSubtaskId, w_address_id wAddressId, remark,
+        `status`, operate_time operateTime, create_by createBy, create_time createTime, update_by updateBy,
+        update_time updateTime
+        from kwt_waybill_order_track
+        where del_flag = 0
+        <if test="wOrderId != null and wOrderId != ''">
+            and w_order_id = #{wOrderId, jdbcType=BIGINT}
+        </if>
+        <if test="wSubtaskId != null and wSubtaskId != ''">
+            and w_subtask_id = #{wSubtaskId, jdbcType=BIGINT}
+        </if>
+        <if test="wAddressId != null and wAddressId != ''">
+            and w_address_id = #{wAddressId, jdbcType=BIGINT}
+        </if>
+        <if test="status != null and status != ''">
+            and status = #{status, jdbcType=INTEGER}
+        </if>
+        order by create_time
+    </select>
 </mapper>

+ 120 - 0
sckw-modules/sckw-transport/src/main/resources/mapper/KwtWaybillOrderV1Mapper.xml

@@ -2,6 +2,126 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.sckw.transport.dao.KwtWaybillOrderV1Mapper">
 
+    <select id="statistics" resultType="com.sckw.core.model.vo.TableTop"
+            parameterType="com.sckw.transport.model.dto.WaybillOrderQueryDto">
+        SELECT
+        wo.status 'value',
+        count(1) total
+        from kwt_waybill_order wo
+        where wo.del_flag = 0
+        <if test="entId != null and entId != ''">
+            and wo.ent_id = #{entId, jdbcType=VARCHAR}
+        </if>
+        <if test="(loadCityCode != null and loadCityCode != '') or (unloadCityCode != null and unloadCityCode != '')">
+            and wo.id in (
+            SELECT w_order_id from kwt_waybill_order_address where del_flag = 0
+            <if test="loadCityCode != null and loadCityCode != ''">
+                address_type = 1
+                and left(city_code, #{loadCityCodeLevel, jdbcType=INTEGER}) = left( #{loadCityCode, jdbcType=INTEGER}, #{loadCityCodeLevel, jdbcType=INTEGER} )
+            </if>
+            <if test="unloadCityCode != null and unloadCityCode != ''">
+                address_type = 2
+                and left(city_code, #{loadCityCodeLevel, jdbcType=INTEGER}) = left( #{unloadCityCode, jdbcType=INTEGER}, #{loadCityCodeLevel, jdbcType=INTEGER} )
+            </if>
+            )
+        </if>
+        <if test="(startLoadTime != null and startLoadTime != '') or (endLoadTime != null and endLoadTime != '')
+               or (startUnloadTime != null and startUnloadTime != '') or (endUnloadTime != null and endUnloadTime != '')">
+            and wo.id in (
+                SELECT w_order_id from kwt_waybill_order_subtask where del_flag = 0
+            <if test="startLoadTime != null and startLoadTime != ''">
+                    and DATE(load_time) <![CDATA[ >= ]]> #{startLoadTime,jdbcType=TIMESTAMP}
+            </if>
+            <if test="endLoadTime != null and endLoadTime != ''">
+                and DATE(load_time) <![CDATA[ >= ]]> #{startLoadTime,jdbcType=TIMESTAMP}
+            </if>
+            <if test="startUnloadTime != null and startUnloadTime != ''">
+                and DATE(load_time) <![CDATA[ >= ]]> #{startLoadTime,jdbcType=TIMESTAMP}
+            </if>
+            <if test="endUnloadTime != null and endUnloadTime != ''">
+                and DATE(load_time) <![CDATA[ >= ]]> #{startLoadTime,jdbcType=TIMESTAMP}
+            </if>
+            )
+        </if>
+        <if test="startSendCarTime != null and startSendCarTime != '' " >
+            and DATE( wo.create_time) <![CDATA[ >= ]]> #{startSendCarTime,jdbcType=TIMESTAMP}
+        </if>
+        <if test="startSendCarTime != null and startSendCarTime != '' " >
+            and DATE( wo.create_time ) <![CDATA[ <= ]]> #{endSendCarTime,jdbcType=TIMESTAMP}
+        </if>
+        <if test="keywords != null and keywords != ''">
+            and (
+                wo.w_order_no like concat('%',#{keywords},'%')
+                or wo.truck_no like concat('%',#{keywords},'%')
+                or wo.driver_name like concat('%',#{keywords},'%')
+            )
+        </if>
+        GROUP BY wo.status
+    </select>
+
+    <select id="findListPage" resultType="com.sckw.transport.model.vo.WaybillOrderSelectVo"
+            parameterType="com.sckw.transport.model.dto.WaybillOrderQueryDto">
+        SELECT
+        wo.id wOrderId, wo.w_order_no wOrderNo, wo.truck_no truckNo, wo.driver_name driverName, wo.driver_phone driverPhone,
+        wo.type, wo.create_time sendCarTime, wo.create_time createTime, wo.update_time updateTime, wo.status
+        from kwt_waybill_order wo
+        where wo.del_flag = 0
+        <if test="entId != null and entId != ''">
+            and wo.ent_id = #{entId, jdbcType=VARCHAR}
+        </if>
+        <if test="queryWstatus != null and queryWstatus != ''">
+            and wo.status in (#{queryWstatus, jdbcType=VARCHAR})
+        </if>
+        <if test="(loadCityCode != null and loadCityCode != '') or (unloadCityCode != null and unloadCityCode != '')">
+            and wo.id in (
+            SELECT w_order_id from kwt_waybill_order_address where del_flag = 0
+            <if test="loadCityCode != null and loadCityCode != ''">
+                address_type = 1
+                and left(city_code, #{loadCityCodeLevel, jdbcType=INTEGER}) = left( #{loadCityCode, jdbcType=INTEGER}, #{loadCityCodeLevel, jdbcType=INTEGER} )
+            </if>
+            <if test="unloadCityCode != null and unloadCityCode != ''">
+                address_type = 2
+                and left(city_code, #{loadCityCodeLevel, jdbcType=INTEGER}) = left( #{unloadCityCode, jdbcType=INTEGER}, #{loadCityCodeLevel, jdbcType=INTEGER} )
+            </if>
+            )
+        </if>
+        <if test="(startLoadTime != null and startLoadTime != '') or (endLoadTime != null and endLoadTime != '')
+               or (startUnloadTime != null and startUnloadTime != '') or (endUnloadTime != null and endUnloadTime != '')">
+            and wo.id in (
+            SELECT w_order_id from kwt_waybill_order_subtask where del_flag = 0
+            <if test="startLoadTime != null and startLoadTime != ''">
+                and DATE(load_time) <![CDATA[ >= ]]> #{startLoadTime,jdbcType=TIMESTAMP}
+            </if>
+            <if test="endLoadTime != null and endLoadTime != ''">
+                and DATE(load_time) <![CDATA[ >= ]]> #{startLoadTime,jdbcType=TIMESTAMP}
+            </if>
+            <if test="startUnloadTime != null and startUnloadTime != ''">
+                and DATE(load_time) <![CDATA[ >= ]]> #{startLoadTime,jdbcType=TIMESTAMP}
+            </if>
+            <if test="endUnloadTime != null and endUnloadTime != ''">
+                and DATE(load_time) <![CDATA[ >= ]]> #{startLoadTime,jdbcType=TIMESTAMP}
+            </if>
+            )
+        </if>
+        <if test="startSendCarTime != null and startSendCarTime != '' " >
+            and DATE( wo.create_time) <![CDATA[ >= ]]> #{startSendCarTime,jdbcType=TIMESTAMP}
+        </if>
+        <if test="endSendCarTime != null and endSendCarTime != '' " >
+            and DATE( wo.create_time ) <![CDATA[ <= ]]> #{endSendCarTime,jdbcType=TIMESTAMP}
+        </if>
+        <if test="keywords != null and keywords != ''">
+            and (
+            wo.w_order_no like concat('%',#{keywords},'%')
+            or wo.truck_no like concat('%',#{keywords},'%')
+            or wo.driver_name like concat('%',#{keywords},'%')
+            )
+        </if>
+        order by wo.update_time desc
+    </select>
+
+
+
+
     <select id="findCountByDriverOrTruck" resultType="com.sckw.transport.model.vo.WaybillCountVo">
         SELECT
         count(case when wo.status = 502 then 1 end) totalComplete,