Jelajahi Sumber

[insert] 司机货损查询接口完善

miajio 1 bulan lalu
induk
melakukan
f9d46ca3c9
38 mengubah file dengan 1028 tambahan dan 55 penghapusan
  1. 2 0
      warehouse-admin-data/src/main/java/com/yr/warehouse/admin/areastaff/fase/AreaStaffIdFace.java
  2. 4 5
      warehouse-admin-data/src/main/java/com/yr/warehouse/admin/common/bo/BaseIdBo.java
  3. 32 0
      warehouse-admin-data/src/main/java/com/yr/warehouse/admin/driver/bo/DriverIntervalRouteAccountRecordEditorBo.java
  4. 58 0
      warehouse-admin-data/src/main/java/com/yr/warehouse/admin/driver/bo/DriverRouteAccountRecordPageBo.java
  5. 26 0
      warehouse-admin-data/src/main/java/com/yr/warehouse/admin/driver/bo/DriverRouteDetailPageBo.java
  6. 16 0
      warehouse-admin-data/src/main/java/com/yr/warehouse/admin/driver/face/AreaStaffNameSearchFace.java
  7. 0 1
      warehouse-admin-data/src/main/java/com/yr/warehouse/admin/driver/face/DriverIntervalCargoDamageDetailSearchFace.java
  8. 24 0
      warehouse-admin-data/src/main/java/com/yr/warehouse/admin/driver/mapper/DriverOnRouteAccountRecordDetailMapper.java
  9. 22 2
      warehouse-admin-data/src/main/java/com/yr/warehouse/admin/driver/mapper/DriverOnRouteAccountRecordMainMapper.java
  10. 11 0
      warehouse-admin-data/src/main/java/com/yr/warehouse/admin/driver/mapper/DriverOnRouteDetailLogMapper.java
  11. 8 0
      warehouse-admin-data/src/main/java/com/yr/warehouse/admin/driver/menu/DriverOnRouteAccountRecordStatusEnum.java
  12. 46 0
      warehouse-admin-data/src/main/java/com/yr/warehouse/admin/driver/vo/DriverRouteAccountRecordDetailVo.java
  13. 70 0
      warehouse-admin-data/src/main/java/com/yr/warehouse/admin/driver/vo/DriverRouteAccountRecordMainVo.java
  14. 87 0
      warehouse-admin-data/src/main/java/com/yr/warehouse/admin/driver/vo/DriverRouteDetailVo.java
  15. 28 0
      warehouse-admin-data/src/main/resources/mapper/driver/DriverOnRouteAccountRecordDetailMapper.xml
  16. 46 1
      warehouse-admin-data/src/main/resources/mapper/driver/DriverOnRouteAccountRecordMainMapper.xml
  17. 30 0
      warehouse-admin-data/src/main/resources/mapper/driver/DriverOnRouteDetailLogMapper.xml
  18. 11 0
      warehouse-admin-server/src/main/java/com/yr/warehouse/admin/service/areastaff/AreaStaffService.java
  19. 11 0
      warehouse-admin-server/src/main/java/com/yr/warehouse/admin/service/areastaff/impl/AreaStaffServiceImpl.java
  20. 10 0
      warehouse-admin-server/src/main/java/com/yr/warehouse/admin/service/driver/DriverOnRouteAccountRecordDetailService.java
  21. 10 0
      warehouse-admin-server/src/main/java/com/yr/warehouse/admin/service/driver/DriverOnRouteAccountRecordMainService.java
  22. 9 3
      warehouse-admin-server/src/main/java/com/yr/warehouse/admin/service/driver/DriverOnRouteAccountRecordService.java
  23. 9 0
      warehouse-admin-server/src/main/java/com/yr/warehouse/admin/service/driver/DriverOnRouteDetailLogService.java
  24. 8 0
      warehouse-admin-server/src/main/java/com/yr/warehouse/admin/service/driver/impl/DriverOnRouteAccountRecordDetailServiceImpl.java
  25. 8 0
      warehouse-admin-server/src/main/java/com/yr/warehouse/admin/service/driver/impl/DriverOnRouteAccountRecordMainServiceImpl.java
  26. 22 10
      warehouse-admin-server/src/main/java/com/yr/warehouse/admin/service/driver/impl/DriverOnRouteAccountRecordServiceImpl.java
  27. 8 0
      warehouse-admin-server/src/main/java/com/yr/warehouse/admin/service/driver/impl/DriverOnRouteDetailLogServiceImpl.java
  28. 86 21
      warehouse-admin-web/src/main/java/com/yr/warehouse/admin/web/driver/controller/DriverIntervalCargoDamageController.java
  29. 56 9
      warehouse-admin-web/src/main/java/com/yr/warehouse/admin/web/driver/controller/DriverRouteDetailController.java
  30. 42 0
      warehouse-admin-web/src/main/java/com/yr/warehouse/admin/web/driver/export/DriverRouteAccountRecordDetailExport.java
  31. 62 0
      warehouse-admin-web/src/main/java/com/yr/warehouse/admin/web/driver/export/DriverRouteAccountRecordMainExport.java
  32. 78 0
      warehouse-admin-web/src/main/java/com/yr/warehouse/admin/web/driver/export/DriverRouteDetailExport.java
  33. 20 0
      warehouse-admin-web/src/main/java/com/yr/warehouse/admin/web/driver/mapstruct/DriverIntervalCargoDamageMapStruct.java
  34. 29 0
      warehouse-admin-web/src/main/java/com/yr/warehouse/admin/web/driver/mapstruct/DriverRouteDetailMapStruct.java
  35. 2 3
      warehouse-admin-web/src/main/java/com/yr/warehouse/admin/web/driver/request/DriverIntervalRouteAccountRecordEditorRequest.java
  36. 5 0
      warehouse-admin-web/src/main/java/com/yr/warehouse/admin/web/driver/request/DriverRouteAccountRecordPageRequest.java
  37. 29 0
      warehouse-admin-web/src/main/java/com/yr/warehouse/admin/web/driver/request/DriverRouteDetailExportRequest.java
  38. 3 0
      warehouse-admin-web/src/main/java/com/yr/warehouse/admin/web/driver/response/DriverRouteAccountRecordMainResponse.java

+ 2 - 0
warehouse-admin-data/src/main/java/com/yr/warehouse/admin/areastaff/fase/AreaStaffIdFace.java

@@ -8,4 +8,6 @@ public interface AreaStaffIdFace {
 
     Long getAreaStaffId();
 
+    void setAreaStaffName(String areaStaffName);
+
 }

+ 4 - 5
warehouse-admin-data/src/main/java/com/yr/warehouse/admin/driver/bo/DriverIntervalRouteAccountRecordCancelBo.java → warehouse-admin-data/src/main/java/com/yr/warehouse/admin/common/bo/BaseIdBo.java

@@ -1,6 +1,5 @@
-package com.yr.warehouse.admin.driver.bo;
+package com.yr.warehouse.admin.common.bo;
 
-import com.yr.warehouse.admin.common.bo.BaseBo;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
@@ -8,17 +7,17 @@ import java.io.Serial;
 import java.io.Serializable;
 
 /**
- * 司机在途核算记录取消bo
+ * id bo
  */
 @EqualsAndHashCode(callSuper = true)
 @Data
-public class DriverIntervalRouteAccountRecordCancelBo extends BaseBo implements Serializable {
+public class BaseIdBo extends BaseBo implements Serializable {
 
     @Serial
     private static final long serialVersionUID = 1L;
 
     /**
-     * 司机在途核算记录主表id
+     * id
      */
     private Long id;
 

+ 32 - 0
warehouse-admin-data/src/main/java/com/yr/warehouse/admin/driver/bo/DriverIntervalRouteAccountRecordEditorBo.java

@@ -0,0 +1,32 @@
+package com.yr.warehouse.admin.driver.bo;
+
+import com.yr.warehouse.admin.common.bo.BaseBo;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * 司机在途核算记录编辑请求Bo
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class DriverIntervalRouteAccountRecordEditorBo extends BaseBo implements Serializable {
+
+    /**
+     * 司机在途核算记录id
+     */
+    private Long id;
+
+    /**
+     * 统计总数量
+     */
+    private Long statTotalNum;
+
+    /**
+     * 货损记录
+     */
+    private List<DriverIntervalRouteAccountRecordDetailCreateBo> details;
+
+}

+ 58 - 0
warehouse-admin-data/src/main/java/com/yr/warehouse/admin/driver/bo/DriverRouteAccountRecordPageBo.java

@@ -0,0 +1,58 @@
+package com.yr.warehouse.admin.driver.bo;
+
+import com.yr.warehouse.admin.common.bo.BasePageBo;
+import com.yr.warehouse.admin.driver.face.AreaStaffNameSearchFace;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.time.LocalDate;
+import java.util.List;
+
+/**
+ * 司机在途核算记录分页查询Bo
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class DriverRouteAccountRecordPageBo extends BasePageBo implements AreaStaffNameSearchFace, Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 运营商id
+     */
+    private Long operatorId;
+
+    /**
+     * 区域员工名称
+     */
+    private String areaStaffName;
+
+    /**
+     * 区域员工Ids
+     */
+    private List<Long> areaStaffIds;
+
+    /**
+     * 统计开始时间
+     */
+    private LocalDate beginStatDate;
+
+    /**
+     * 统计结束时间
+     */
+    private LocalDate endStatDate;
+
+    /**
+     * 创建开始时间
+     */
+    private LocalDate beginCreateDate;
+
+    /**
+     * 创建结束时间
+     */
+    private LocalDate endCreateDate;
+
+}

+ 26 - 0
warehouse-admin-data/src/main/java/com/yr/warehouse/admin/driver/bo/DriverRouteDetailPageBo.java

@@ -0,0 +1,26 @@
+package com.yr.warehouse.admin.driver.bo;
+
+import com.yr.warehouse.admin.common.bo.BasePageBo;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+
+/**
+ * 司机线路详情分页Bo
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class DriverRouteDetailPageBo extends BasePageBo implements Serializable {
+
+    /**
+     * 货损记录id
+     */
+    private Long goodsLossRecordId;
+
+    /**
+     * 商品名称
+     */
+    private String goodsName;
+
+}

+ 16 - 0
warehouse-admin-data/src/main/java/com/yr/warehouse/admin/driver/face/AreaStaffNameSearchFace.java

@@ -0,0 +1,16 @@
+package com.yr.warehouse.admin.driver.face;
+
+import java.util.List;
+
+/**
+ * 区域员工名称查询Face
+ */
+public interface AreaStaffNameSearchFace {
+
+    Long getOperatorId();
+
+    String getAreaStaffName();
+
+    void setAreaStaffIds(List<Long> areaStaffIds);
+
+}

+ 0 - 1
warehouse-admin-data/src/main/java/com/yr/warehouse/admin/driver/face/DriverIntervalCargoDamageDetailSearchFace.java

@@ -12,5 +12,4 @@ public interface DriverIntervalCargoDamageDetailSearchFace {
     String getAreaStaffName();
 
     void setAreaStaffIds(List<Long> areaStaffIds);
-
 }

+ 24 - 0
warehouse-admin-data/src/main/java/com/yr/warehouse/admin/driver/mapper/DriverOnRouteAccountRecordDetailMapper.java

@@ -1,10 +1,15 @@
 package com.yr.warehouse.admin.driver.mapper;
 
+import com.yr.warehouse.admin.common.bo.BaseIdBo;
 import com.yr.warehouse.admin.driver.bo.DriverIntervalRouteAccountRecordCreateBo;
+import com.yr.warehouse.admin.driver.bo.DriverIntervalRouteAccountRecordEditorBo;
 import com.yr.warehouse.admin.driver.data.DriverOnRouteAccountRecordDetail;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.yr.warehouse.admin.driver.vo.DriverRouteAccountRecordDetailVo;
 import org.apache.ibatis.annotations.Param;
 
+import java.util.List;
+
 /**
  * <p>
  * 司机在途核算记录子表 Mapper 接口
@@ -20,4 +25,23 @@ public interface DriverOnRouteAccountRecordDetailMapper extends BaseMapper<Drive
      * @param bo 添加司机在途核算记录子表参数
      */
     void create(@Param("bo") DriverIntervalRouteAccountRecordCreateBo bo);
+
+    /**
+     * 根据司机在途核算记录主表ID查询司机在途核算记录子表
+     * @param bo 查询司机在途核算记录子表参数
+     * @return 司机在途核算记录子表列表
+     */
+    List<DriverRouteAccountRecordDetailVo> searchByRouteAccountRecordMainId(@Param("bo") BaseIdBo bo);
+
+    /**
+     * 根据司机在途核算记录主表ID删除司机在途核算记录子表
+     * @param routeAccountRecordMainId 司机在途核算记录主表ID
+     */
+    void deleteByRouteAccountRecordMainId(@Param("routeAccountRecordMainId") Long routeAccountRecordMainId);
+
+    /**
+     * 编辑司机在途核算记录子表
+     * @param bo 编辑司机在途核算记录子表参数
+     */
+    void editorCreate(@Param("bo") DriverIntervalRouteAccountRecordEditorBo bo);
 }

+ 22 - 2
warehouse-admin-data/src/main/java/com/yr/warehouse/admin/driver/mapper/DriverOnRouteAccountRecordMainMapper.java

@@ -1,9 +1,13 @@
 package com.yr.warehouse.admin.driver.mapper;
 
-import com.yr.warehouse.admin.driver.bo.DriverIntervalRouteAccountRecordCancelBo;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.yr.warehouse.admin.common.bo.BaseIdBo;
 import com.yr.warehouse.admin.driver.bo.DriverIntervalRouteAccountRecordCreateBo;
+import com.yr.warehouse.admin.driver.bo.DriverIntervalRouteAccountRecordEditorBo;
+import com.yr.warehouse.admin.driver.bo.DriverRouteAccountRecordPageBo;
 import com.yr.warehouse.admin.driver.data.DriverOnRouteAccountRecordMain;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.yr.warehouse.admin.driver.vo.DriverRouteAccountRecordMainVo;
 import org.apache.ibatis.annotations.Param;
 
 /**
@@ -28,5 +32,21 @@ public interface DriverOnRouteAccountRecordMainMapper extends BaseMapper<DriverO
      *
      * @param bo 取消参数
      */
-    int cancel(@Param("bo") DriverIntervalRouteAccountRecordCancelBo bo);
+    int cancel(@Param("bo") BaseIdBo bo);
+
+    /**
+     * 搜索司机在途核算记录
+     *
+     * @param page 分页参数
+     * @param bo   搜索参数
+     * @return 结果
+     */
+    Page<DriverRouteAccountRecordMainVo> searchForPage(@Param("page") Page<DriverRouteAccountRecordMainVo> page, @Param("bo") DriverRouteAccountRecordPageBo bo);
+
+    /**
+     * 编辑司机在途核算记录
+     *
+     * @param bo 编辑参数
+     */
+    void edit(@Param("bo") DriverIntervalRouteAccountRecordEditorBo bo);
 }

+ 11 - 0
warehouse-admin-data/src/main/java/com/yr/warehouse/admin/driver/mapper/DriverOnRouteDetailLogMapper.java

@@ -1,7 +1,10 @@
 package com.yr.warehouse.admin.driver.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.yr.warehouse.admin.driver.bo.DriverRouteDetailPageBo;
 import com.yr.warehouse.admin.driver.data.DriverOnRouteDetailLog;
+import com.yr.warehouse.admin.driver.vo.DriverRouteDetailVo;
 import org.apache.ibatis.annotations.Param;
 
 import java.time.LocalDate;
@@ -29,4 +32,12 @@ public interface DriverOnRouteDetailLogMapper extends BaseMapper<DriverOnRouteDe
      * @return
      */
     List<DriverOnRouteDetailLog> searchByStatDate(@Param("statDate") LocalDate statDate);
+
+    /**
+     * 分页查询
+     * @param page 分页参数
+     * @param bo 查询参数
+     * @return 列表
+     */
+    Page<DriverRouteDetailVo> searchForPage(@Param("page") Page<DriverRouteDetailVo> page, @Param("bo") DriverRouteDetailPageBo bo);
 }

+ 8 - 0
warehouse-admin-data/src/main/java/com/yr/warehouse/admin/driver/menu/DriverOnRouteAccountRecordStatusEnum.java

@@ -26,4 +26,12 @@ public enum DriverOnRouteAccountRecordStatusEnum {
         return UN_VERIFIED.name().equals(status);
     }
 
+    public static String getDesc(String status) {
+        for (DriverOnRouteAccountRecordStatusEnum value : values()) {
+            if (value.name().equals(status)) {
+                return value.getDesc();
+            }
+        }
+        return "";
+    }
 }

+ 46 - 0
warehouse-admin-data/src/main/java/com/yr/warehouse/admin/driver/vo/DriverRouteAccountRecordDetailVo.java

@@ -0,0 +1,46 @@
+package com.yr.warehouse.admin.driver.vo;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * 司机在途核算记录详情响应Vo
+ */
+@Data
+public class DriverRouteAccountRecordDetailVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键id
+     */
+    private Long id;
+
+    /**
+     * 商品id
+     */
+    private Integer goodsId;
+
+    /**
+     * 商品编码
+     */
+    private String goodsCode;
+
+    /**
+     * 商品图片
+     */
+    private String goodsImg;
+
+    /**
+     * 商品名称
+     */
+    private String goodsName;
+
+    /**
+     * 库存数
+     */
+    private Long inventory;
+}

+ 70 - 0
warehouse-admin-data/src/main/java/com/yr/warehouse/admin/driver/vo/DriverRouteAccountRecordMainVo.java

@@ -0,0 +1,70 @@
+package com.yr.warehouse.admin.driver.vo;
+
+import com.yr.warehouse.admin.areastaff.fase.AreaStaffIdFace;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+/**
+ * 司机在途核算记录vo
+ */
+@Data
+public class DriverRouteAccountRecordMainVo implements AreaStaffIdFace, Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键id
+     */
+    private Long id;
+
+    /**
+     * 区域员工id
+     */
+    private Long areaStaffId;
+
+    /**
+     * 区域员工名称
+     */
+    private String areaStaffName;
+
+    /**
+     * 仓库id
+     */
+    private Long warehouseId;
+
+    /**
+     * 仓库名称
+     */
+    private String warehouseName;
+
+    /**
+     * 统计日期
+     */
+    private LocalDate statDate;
+
+    /**
+     * 统计总数
+     */
+    private Long statTotalNum;
+
+    /**
+     * 状态 UN_VERIFIED 未核算 VERIFIED 已核算 CANCEL 已取消
+     */
+    private String status;
+
+    /**
+     * 创建人
+     */
+    private String createName;
+
+    /**
+     * 创建时间
+     */
+    private LocalDateTime createTime;
+
+}

+ 87 - 0
warehouse-admin-data/src/main/java/com/yr/warehouse/admin/driver/vo/DriverRouteDetailVo.java

@@ -0,0 +1,87 @@
+package com.yr.warehouse.admin.driver.vo;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * 司机在途明细响应vo
+ */
+@Data
+public class DriverRouteDetailVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 主键id
+     */
+    private Long id;
+
+    /**
+     * 货损记录id
+     */
+    private Long goodsLossRecordId;
+
+    /**
+     * 商品id
+     */
+    private Integer goodsId;
+
+    /**
+     * 商品编码
+     */
+    private String goodsCode;
+
+    /**
+     * 商品名称
+     */
+    private String goodsName;
+
+    /**
+     * 商品图片
+     */
+    private String goodsImg;
+
+    /**
+     * 开单数
+     */
+    private Long createNum;
+
+    /**
+     * 取消数(未出库) - 页面展示这个*
+     */
+    private Long unshippedCancelNum;
+
+    /**
+     * 取消数(已出库) - 页面不展示这个*
+     */
+    private Long shippedCancelNum;
+
+    /**
+     * 补货数
+     */
+    private Long replenishNum;
+
+    /**
+     * 回仓数
+     */
+    private Long returnWarehouseNum;
+
+    /**
+     * 上次库存数
+     */
+    private Long yesterdayStockNum;
+
+    /**
+     * 在途库存数
+     */
+    private Long todayStockNum;
+
+    /**
+     * 盈亏数
+     */
+    private Long profitLossNum;
+
+}

+ 28 - 0
warehouse-admin-data/src/main/resources/mapper/driver/DriverOnRouteAccountRecordDetailMapper.xml

@@ -29,5 +29,33 @@
             (#{bo.id}, #{detail.goodsId}, #{detail.stockNum}, #{bo.uid}, #{bo.username})
         </foreach>
     </insert>
+    <insert id="editorCreate"
+            parameterType="com.yr.warehouse.admin.driver.bo.DriverIntervalRouteAccountRecordEditorBo">
+        insert into yr_driver_on_route_account_record_detail
+        (routeAccountRecordMainId, goodsId, inventory, createUid, createName)
+        values
+        <foreach collection="bo.details" item="detail" separator=",">
+            (#{bo.id}, #{detail.goodsId}, #{detail.stockNum}, #{bo.uid}, #{bo.username})
+        </foreach>
+    </insert>
+    <delete id="deleteByRouteAccountRecordMainId" parameterType="java.lang.Long">
+        delete from yr_driver_on_route_account_record_detail
+        where routeAccountRecordMainId = #{id}
+    </delete>
+    <select id="searchByRouteAccountRecordMainId"
+            resultType="com.yr.warehouse.admin.driver.vo.DriverRouteAccountRecordDetailVo"
+            parameterType="com.yr.warehouse.admin.common.bo.BaseIdBo">
+        select dorard.id            as id,
+               dorard.goodsId       as goodsId,
+               pd.code              as goodsCode,
+               ypii.product_img_url as goodsImg,
+               pd.display_name      as goodsName,
+               dorard.inventory     as inventory
+        from yr_driver_on_route_account_record_detail as dorard
+                 left join yr_product_detail as pd on pd.id = dorard.goodsId
+                 left join yr_product_img_info as ypii
+                           on pd.id = ypii.product_spec_id and ypii.product_img_type = 'PRODUCT_MAIN_IMAGE'
+        where routeAccountRecordMainId = #{bo.id}
+    </select>
 
 </mapper>

+ 46 - 1
warehouse-admin-data/src/main/resources/mapper/driver/DriverOnRouteAccountRecordMainMapper.xml

@@ -32,9 +32,54 @@
         (operatorId, operatorChain, areaStaffId, warehouseId, statDate, statTotalNum, createUid, createName)
         values (#{bo.operatorId}, #{bo.operatorChain}, #{bo.areaStaffId}, #{bo.warehouseId}, #{bo.statDate}, #{bo.statTotalNum}, #{bo.uid}, #{bo.username})
     </insert>
+    <update id="edit"
+            parameterType="com.yr.warehouse.admin.driver.bo.DriverIntervalRouteAccountRecordEditorBo">
+        update yr_driver_on_route_account_record_main
+        set statTotalNum = #{bo.statTotalNum},
+            modifyUid = #{bo.uid},
+            modifyName = #{bo.username}
+        where id = #{bo.id}
+    </update>
     <delete id="cancel"
-            parameterType="com.yr.warehouse.admin.driver.bo.DriverIntervalRouteAccountRecordCancelBo">
+            parameterType="com.yr.warehouse.admin.common.bo.BaseIdBo">
         update yr_driver_on_route_account_record_main set status = 'CANCEL', modifyUid = #{bo.uid}, modifyName = #{bo.username} where id = #{bo.id} and status = 'UN_VERIFIED' and isDelete = 'NORMAL'
     </delete>
+    <select id="searchForPage" resultType="com.yr.warehouse.admin.driver.vo.DriverRouteAccountRecordMainVo">
+        select
+        dorarm.id as id,
+        dorarm.areaStaffId as areaStaffId,
+        dorarm.warehouseId as warehouseId,
+        wi.name as warehouseName,
+        dorarm.statDate as statDate,
+        dorarm.statTotalNum as statTotalNum,
+        dorarm.status as status,
+        dorarm.createName as createName,
+        dorarm.createTime as createTime
+        from yr_driver_on_route_account_record_main as dorarm
+        left join yr_warehouse_info as wi on dorarm.warehouseId = wi.id
+        where dorarm.isDelete = 'NORMAL'
+        <if test="bo.operatorId != null">
+            and dorarm.operatorId = #{bo.operatorId}
+        </if>
+        <if test="bo.areaStaffIds != null and bo.areaStaffIds.size > 0">
+            <foreach item="item" index="index" collection="bo.areaStaffIds" open="and dorarm.areaStaffId in ("
+                     separator="," close=")">
+                #{item}
+            </foreach>
+        </if>
+        <if test="bo.beginStatDate != null">
+            and dorarm.statDate >= #{bo.beginStatDate}
+        </if>
+        <if test="bo.endStatDate != null">
+            and #{bo.endStatDate} >= dorarm.statDate
+        </if>
+        <if test="bo.beginCreateDate != null">
+            and dorarm.createTime >= CONCAT(#{bo.beginCreateDate}, ' 00:00:00')
+        </if>
+        <if test="bo.endCreateDate != null">
+            and CONCAT(#{bo.endCreateDate}, ' 23:59:59') >= dorarm.createTime
+        </if>
+        order by warehouseId, areaStaffId desc
+    </select>
 
 </mapper>

+ 30 - 0
warehouse-admin-data/src/main/resources/mapper/driver/DriverOnRouteDetailLogMapper.xml

@@ -42,5 +42,35 @@
             parameterType="java.time.LocalDate">
         select <include refid="Base_Column_List" /> from yr_driver_on_route_detail_log where statDate = #{statDate}
     </select>
+    <select id="searchForPage" resultType="com.yr.warehouse.admin.driver.vo.DriverRouteDetailVo">
+        select
+        dordl.id as id,
+        dordl.goodsLossRecordId as goodsLossRecordId,
+        dordl.goodsId as goodsId,
+        pd.code as goodsCode,
+        pd.display_name as goodsName,
+        ypii.product_img_url as goodsImg,
+        dordl.createNum as createNum,
+        dordl.unshippedCancelNum as unshippedCancelNum,
+        dordl.shippedCancelNum as shippedCancelNum,
+        dordl.replenishNum as replenishNum,
+        dordl.returnWarehouseNum as returnWarehouseNum,
+        dordl.yesterdayStockNum as yesterdayStockNum,
+        dordl.todayStockNum as todayStockNum,
+        dordl.profitLossNum as profitLossNum
+        from yr_driver_on_route_detail_log as dordl
+        left join yr_product_detail as pd on pd.id = dordl.goodsId
+        left join yr_product_img_info as ypii
+        on pd.id = ypii.product_spec_id and ypii.product_img_type = 'PRODUCT_MAIN_IMAGE'
+        <where>
+            <if test="bo.goodsLossRecordId != null and bo.goodsLossRecordId > 0">
+                and dordl.goodsLossRecordId = #{bo.goodsLossRecordId}
+            </if>
+            <if test="bo.goodsName != null and bo.goodsName != ''">
+                and pd.display_name like concat('%', #{bo.goodsName}, '%')
+            </if>
+        </where>
+        order by dordl.areaStaffId, dordl.goodsId desc
+    </select>
 
 </mapper>

+ 11 - 0
warehouse-admin-server/src/main/java/com/yr/warehouse/admin/service/areastaff/AreaStaffService.java

@@ -13,5 +13,16 @@ import java.util.Map;
 public interface AreaStaffService {
 
 
+    /**
+     * 批量查询区域员工信息
+     * @param areaStaffIdFaces 区域员工id
+     * @return 区域员工信息
+     */
     Map<Long, AreaStaffResponse> searchAreaStaffMap(List<? extends AreaStaffIdFace> areaStaffIdFaces);
+
+    /**
+     * 构建区域员工名称
+     * @param areaStaffIdFaces 区域员工id
+     */
+    void buildAreaStaffName(List<? extends AreaStaffIdFace> areaStaffIdFaces);
 }

+ 11 - 0
warehouse-admin-server/src/main/java/com/yr/warehouse/admin/service/areastaff/impl/AreaStaffServiceImpl.java

@@ -26,4 +26,15 @@ public class AreaStaffServiceImpl implements AreaStaffService {
         return areaStaffResponses.stream().collect(Collectors.toMap(AreaStaffResponse::getId, areaStaffResponse -> areaStaffResponse));
     }
 
+    @Override
+    public void buildAreaStaffName(List<? extends AreaStaffIdFace> areaStaffIdFaces) {
+        Map<Long, AreaStaffResponse> areaStaffMap = searchAreaStaffMap(areaStaffIdFaces);
+        areaStaffIdFaces.forEach(vo -> {
+            AreaStaffResponse areaStaffResponse = areaStaffMap.get(vo.getAreaStaffId());
+            if (null != areaStaffResponse) {
+                vo.setAreaStaffName(areaStaffResponse.getEmployeeName());
+            }
+        });
+    }
+
 }

+ 10 - 0
warehouse-admin-server/src/main/java/com/yr/warehouse/admin/service/driver/DriverOnRouteAccountRecordDetailService.java

@@ -1,7 +1,11 @@
 package com.yr.warehouse.admin.service.driver;
 
+import com.yr.warehouse.admin.common.bo.BaseIdBo;
 import com.yr.warehouse.admin.driver.data.DriverOnRouteAccountRecordDetail;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.yr.warehouse.admin.driver.vo.DriverRouteAccountRecordDetailVo;
+
+import java.util.List;
 
 /**
  * <p>
@@ -13,4 +17,10 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface DriverOnRouteAccountRecordDetailService extends IService<DriverOnRouteAccountRecordDetail> {
 
+    /**
+     * 根据司机在途核算记录主表ID查询
+     * @param bo id
+     * @return 列表
+     */
+    List<DriverRouteAccountRecordDetailVo> searchByRouteAccountRecordMainId(BaseIdBo bo);
 }

+ 10 - 0
warehouse-admin-server/src/main/java/com/yr/warehouse/admin/service/driver/DriverOnRouteAccountRecordMainService.java

@@ -1,7 +1,10 @@
 package com.yr.warehouse.admin.service.driver;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.yr.warehouse.admin.driver.bo.DriverRouteAccountRecordPageBo;
 import com.yr.warehouse.admin.driver.data.DriverOnRouteAccountRecordMain;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.yr.warehouse.admin.driver.vo.DriverRouteAccountRecordMainVo;
 
 /**
  * <p>
@@ -13,4 +16,11 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface DriverOnRouteAccountRecordMainService extends IService<DriverOnRouteAccountRecordMain> {
 
+    /**
+     * 查询司机在途核算记录主表
+     *
+     * @param bo 查询参数
+     * @return 结果
+     */
+    Page<DriverRouteAccountRecordMainVo> searchForPage(DriverRouteAccountRecordPageBo bo);
 }

+ 9 - 3
warehouse-admin-server/src/main/java/com/yr/warehouse/admin/service/driver/DriverOnRouteAccountRecordService.java

@@ -1,8 +1,8 @@
 package com.yr.warehouse.admin.service.driver;
 
-import com.yr.bluecat.common.entity.response.Result;
-import com.yr.warehouse.admin.driver.bo.DriverIntervalRouteAccountRecordCancelBo;
+import com.yr.warehouse.admin.common.bo.BaseIdBo;
 import com.yr.warehouse.admin.driver.bo.DriverIntervalRouteAccountRecordCreateBo;
+import com.yr.warehouse.admin.driver.bo.DriverIntervalRouteAccountRecordEditorBo;
 
 /**
  * <p>
@@ -24,5 +24,11 @@ public interface DriverOnRouteAccountRecordService {
      * 取消司机在途核算记录
      * @param bo 取消参数
      */
-    void cancel(DriverIntervalRouteAccountRecordCancelBo bo);
+    void cancel(BaseIdBo bo);
+
+    /**
+     * 编辑司机在途核算记录
+     * @param bo 编辑参数
+     */
+    void edit(DriverIntervalRouteAccountRecordEditorBo bo);
 }

+ 9 - 0
warehouse-admin-server/src/main/java/com/yr/warehouse/admin/service/driver/DriverOnRouteDetailLogService.java

@@ -1,7 +1,10 @@
 package com.yr.warehouse.admin.service.driver;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.yr.warehouse.admin.driver.bo.DriverRouteDetailPageBo;
 import com.yr.warehouse.admin.driver.data.DriverOnRouteDetailLog;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.yr.warehouse.admin.driver.vo.DriverRouteDetailVo;
 
 /**
  * <p>
@@ -13,4 +16,10 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface DriverOnRouteDetailLogService extends IService<DriverOnRouteDetailLog> {
 
+    /**
+     * 分页查询司机在途明细
+     * @param bo 请求参数
+     * @return 分页结果
+     */
+    Page<DriverRouteDetailVo> searchForPage(DriverRouteDetailPageBo bo);
 }

+ 8 - 0
warehouse-admin-server/src/main/java/com/yr/warehouse/admin/service/driver/impl/DriverOnRouteAccountRecordDetailServiceImpl.java

@@ -1,11 +1,15 @@
 package com.yr.warehouse.admin.service.driver.impl;
 
+import com.yr.warehouse.admin.common.bo.BaseIdBo;
 import com.yr.warehouse.admin.driver.data.DriverOnRouteAccountRecordDetail;
 import com.yr.warehouse.admin.driver.mapper.DriverOnRouteAccountRecordDetailMapper;
+import com.yr.warehouse.admin.driver.vo.DriverRouteAccountRecordDetailVo;
 import com.yr.warehouse.admin.service.driver.DriverOnRouteAccountRecordDetailService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.stereotype.Service;
 
+import java.util.List;
+
 /**
  * <p>
  * 司机在途核算记录子表 服务实现类
@@ -17,4 +21,8 @@ import org.springframework.stereotype.Service;
 @Service
 public class DriverOnRouteAccountRecordDetailServiceImpl extends ServiceImpl<DriverOnRouteAccountRecordDetailMapper, DriverOnRouteAccountRecordDetail> implements DriverOnRouteAccountRecordDetailService {
 
+    @Override
+    public List<DriverRouteAccountRecordDetailVo> searchByRouteAccountRecordMainId(BaseIdBo bo) {
+        return baseMapper.searchByRouteAccountRecordMainId(bo);
+    }
 }

+ 8 - 0
warehouse-admin-server/src/main/java/com/yr/warehouse/admin/service/driver/impl/DriverOnRouteAccountRecordMainServiceImpl.java

@@ -1,7 +1,10 @@
 package com.yr.warehouse.admin.service.driver.impl;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.yr.warehouse.admin.driver.bo.DriverRouteAccountRecordPageBo;
 import com.yr.warehouse.admin.driver.data.DriverOnRouteAccountRecordMain;
 import com.yr.warehouse.admin.driver.mapper.DriverOnRouteAccountRecordMainMapper;
+import com.yr.warehouse.admin.driver.vo.DriverRouteAccountRecordMainVo;
 import com.yr.warehouse.admin.service.driver.DriverOnRouteAccountRecordMainService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.stereotype.Service;
@@ -17,4 +20,9 @@ import org.springframework.stereotype.Service;
 @Service
 public class DriverOnRouteAccountRecordMainServiceImpl extends ServiceImpl<DriverOnRouteAccountRecordMainMapper, DriverOnRouteAccountRecordMain> implements DriverOnRouteAccountRecordMainService {
 
+    @Override
+    public Page<DriverRouteAccountRecordMainVo> searchForPage(DriverRouteAccountRecordPageBo bo) {
+        Page<DriverRouteAccountRecordMainVo> page = Page.of(bo.getPageNum(), bo.getPageSize());
+        return baseMapper.searchForPage(page, bo);
+    }
 }

+ 22 - 10
warehouse-admin-server/src/main/java/com/yr/warehouse/admin/service/driver/impl/DriverOnRouteAccountRecordServiceImpl.java

@@ -1,24 +1,17 @@
 package com.yr.warehouse.admin.service.driver.impl;
 
 import com.yr.bluecat.common.entity.exception.MessageException;
-import com.yr.bluecat.common.entity.response.Result;
-import com.yr.warehouse.admin.common.menu.DeleteEnum;
-import com.yr.warehouse.admin.driver.bo.DriverIntervalRouteAccountRecordCancelBo;
+import com.yr.warehouse.admin.common.bo.BaseIdBo;
 import com.yr.warehouse.admin.driver.bo.DriverIntervalRouteAccountRecordCreateBo;
 import com.yr.warehouse.admin.driver.bo.DriverIntervalRouteAccountRecordDetailCreateBo;
-import com.yr.warehouse.admin.driver.data.DriverOnRouteAccountRecordMain;
+import com.yr.warehouse.admin.driver.bo.DriverIntervalRouteAccountRecordEditorBo;
 import com.yr.warehouse.admin.driver.mapper.DriverOnRouteAccountRecordDetailMapper;
 import com.yr.warehouse.admin.driver.mapper.DriverOnRouteAccountRecordMainMapper;
-import com.yr.warehouse.admin.driver.menu.DriverOnRouteAccountRecordStatusEnum;
-import com.yr.warehouse.admin.service.driver.DriverOnRouteAccountRecordMainService;
 import com.yr.warehouse.admin.service.driver.DriverOnRouteAccountRecordService;
-import com.yr.warehouse.admin.service.driver.mapstruct.DriverOnRouteAccountRecordMapStruct;
 import jakarta.annotation.Resource;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.support.TransactionTemplate;
 
-import java.util.stream.Collectors;
-
 /**
  * <p>
  * 司机在途核算记录主表 服务实现类
@@ -59,7 +52,7 @@ public class DriverOnRouteAccountRecordServiceImpl implements DriverOnRouteAccou
     }
 
     @Override
-    public void cancel(DriverIntervalRouteAccountRecordCancelBo bo) {
+    public void cancel(BaseIdBo bo) {
         /*DriverOnRouteAccountRecordMain driverOnRouteAccountRecordMain = driverOnRouteAccountRecordMainMapper.selectById(bo.getId());
         if (null == driverOnRouteAccountRecordMain || DeleteEnum.isDelete(driverOnRouteAccountRecordMain.getIsDelete())) {
             throw new MessageException("司机途核算记录不存在");
@@ -72,4 +65,23 @@ public class DriverOnRouteAccountRecordServiceImpl implements DriverOnRouteAccou
             throw new MessageException("取消失败, 司机在途核算记录不存在或当前状态不可取消");
         }
     }
+
+    @Override
+    public void edit(DriverIntervalRouteAccountRecordEditorBo bo) {
+        long statTotalNum;
+        if (bo.getDetails() != null && !bo.getDetails().isEmpty()) {
+            statTotalNum = bo.getDetails().stream().mapToLong(DriverIntervalRouteAccountRecordDetailCreateBo::getStockNum).sum();
+        } else {
+            statTotalNum = 0L;
+        }
+        bo.setStatTotalNum(statTotalNum);
+        transactionTemplate.execute(status -> {
+            driverOnRouteAccountRecordMainMapper.edit(bo);
+            driverOnRouteAccountRecordDetailMapper.deleteByRouteAccountRecordMainId(bo.getId());
+            if (statTotalNum != 0L) {
+                driverOnRouteAccountRecordDetailMapper.editorCreate(bo);
+            }
+            return null;
+        });
+    }
 }

+ 8 - 0
warehouse-admin-server/src/main/java/com/yr/warehouse/admin/service/driver/impl/DriverOnRouteDetailLogServiceImpl.java

@@ -1,7 +1,10 @@
 package com.yr.warehouse.admin.service.driver.impl;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.yr.warehouse.admin.driver.bo.DriverRouteDetailPageBo;
 import com.yr.warehouse.admin.driver.data.DriverOnRouteDetailLog;
 import com.yr.warehouse.admin.driver.mapper.DriverOnRouteDetailLogMapper;
+import com.yr.warehouse.admin.driver.vo.DriverRouteDetailVo;
 import com.yr.warehouse.admin.service.driver.DriverOnRouteDetailLogService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.stereotype.Service;
@@ -17,4 +20,9 @@ import org.springframework.stereotype.Service;
 @Service
 public class DriverOnRouteDetailLogServiceImpl extends ServiceImpl<DriverOnRouteDetailLogMapper, DriverOnRouteDetailLog> implements DriverOnRouteDetailLogService {
 
+    @Override
+    public Page<DriverRouteDetailVo> searchForPage(DriverRouteDetailPageBo bo) {
+        Page<DriverRouteDetailVo> page = Page.of(bo.getPageNum(), bo.getPageSize());
+        return baseMapper.searchForPage(page, bo);
+    }
 }

+ 86 - 21
warehouse-admin-web/src/main/java/com/yr/warehouse/admin/web/driver/controller/DriverIntervalCargoDamageController.java

@@ -8,26 +8,31 @@ import com.yr.bluecat.common.entity.response.Result;
 import com.yr.bluecat.common.entity.utils.StringUtils;
 import com.yr.bluecat.common.utils.excel.ExportClient;
 import com.yr.prism.auth.core.user.AdminUserInfo;
+import com.yr.warehouse.admin.common.bo.BaseIdBo;
 import com.yr.warehouse.admin.component.areastaff.AreaStaffComponent;
 import com.yr.warehouse.admin.component.auth.OperatorComponent;
 import com.yr.warehouse.admin.component.auth.vo.OrgOperatorVo;
 import com.yr.warehouse.admin.driver.bo.*;
 import com.yr.warehouse.admin.driver.data.DriverGoodsLossIntervalMain;
+import com.yr.warehouse.admin.driver.face.AreaStaffNameSearchFace;
 import com.yr.warehouse.admin.driver.face.DriverIntervalCargoDamageDetailSearchFace;
+import com.yr.warehouse.admin.driver.menu.DriverOnRouteAccountRecordStatusEnum;
 import com.yr.warehouse.admin.driver.vo.DriverIntervalCargoDamageDetailVo;
 import com.yr.warehouse.admin.driver.vo.DriverIntervalCargoDamageVo;
+import com.yr.warehouse.admin.driver.vo.DriverRouteAccountRecordDetailVo;
+import com.yr.warehouse.admin.driver.vo.DriverRouteAccountRecordMainVo;
 import com.yr.warehouse.admin.service.areastaff.AreaStaffService;
-import com.yr.warehouse.admin.service.driver.DriverGoodsLossIntervalDetailService;
-import com.yr.warehouse.admin.service.driver.DriverGoodsLossIntervalMainService;
-import com.yr.warehouse.admin.service.driver.DriverOnRouteAccountRecordService;
+import com.yr.warehouse.admin.service.driver.*;
 import com.yr.warehouse.admin.web.common.BaseController;
 import com.yr.warehouse.admin.web.driver.export.DriverIntervalCargoDamageDetailExport;
+import com.yr.warehouse.admin.web.driver.export.DriverRouteAccountRecordDetailExport;
+import com.yr.warehouse.admin.web.driver.export.DriverRouteAccountRecordMainExport;
 import com.yr.warehouse.admin.web.driver.mapstruct.DriverIntervalCargoDamageMapStruct;
 import com.yr.warehouse.admin.web.driver.request.*;
 import com.yr.warehouse.admin.web.driver.response.DriverIntervalCargoDamageDetailResponse;
 import com.yr.warehouse.admin.web.driver.response.DriverIntervalCargoDamageResponse;
+import com.yr.warehouse.admin.web.driver.response.DriverRouteAccountRecordDetailResponse;
 import com.yr.warehouse.admin.web.driver.response.DriverRouteAccountRecordMainResponse;
-import com.yr.warehouse.admin.web.driver.response.DriverRouteDetailResponse;
 import jakarta.annotation.Resource;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
@@ -56,6 +61,12 @@ public class DriverIntervalCargoDamageController extends BaseController {
     private DriverOnRouteAccountRecordService driverOnRouteAccountRecordService;
 
     @Resource
+    private DriverOnRouteAccountRecordMainService driverOnRouteAccountRecordMainService;
+
+    @Resource
+    private DriverOnRouteAccountRecordDetailService driverOnRouteAccountRecordDetailService;
+
+    @Resource
     private AreaStaffComponent areaStaffComponent;
 
     @Resource
@@ -85,7 +96,7 @@ public class DriverIntervalCargoDamageController extends BaseController {
     public Result<String> generator(@Validated @RequestBody DriverIntervalCargoDamageGeneratorRequest request, AdminUserInfo adminUserInfo) {
         DriverIntervalCargoDamageGeneratorBo bo = DriverIntervalCargoDamageMapStruct.MAPSTRUCT.generatorRequestToBo(request);
         buildUserInfo(bo, adminUserInfo);
-
+        // TODO: 区间记录生成
 
         return null;
     }
@@ -142,14 +153,7 @@ public class DriverIntervalCargoDamageController extends BaseController {
         if (null == driverIntervalCargoDamageDetailVos || driverIntervalCargoDamageDetailVos.isEmpty()) {
             return pageResult.success(0, new ArrayList<>());
         }
-
-        Map<Long, AreaStaffResponse> areaStaffMap = areaStaffService.searchAreaStaffMap(driverIntervalCargoDamageDetailVos);
-        driverIntervalCargoDamageDetailVos.forEach(driverIntervalCargoDamageDetailVo -> {
-            AreaStaffResponse areaStaffResponse = areaStaffMap.get(driverIntervalCargoDamageDetailVo.getAreaStaffId());
-            if (null != areaStaffResponse) {
-                driverIntervalCargoDamageDetailVo.setAreaStaffName(areaStaffResponse.getEmployeeName());
-            }
-        });
+        areaStaffService.buildAreaStaffName(driverIntervalCargoDamageDetailVos);
         List<DriverIntervalCargoDamageDetailResponse> driverIntervalCargoDamageDetailResponses = DriverIntervalCargoDamageMapStruct.MAPSTRUCT.detailVoListToDetailResponseList(driverIntervalCargoDamageDetailVos);
         return pageResult.success(page.getTotal(), driverIntervalCargoDamageDetailResponses);
     }
@@ -207,6 +211,16 @@ public class DriverIntervalCargoDamageController extends BaseController {
     }
 
     /**
+     * 提取区域员工名称搜索参数
+     */
+    private void extractedAreaStaffSearchParam(AreaStaffNameSearchFace bo) {
+        if (StringUtils.isNotBlank(bo.getAreaStaffName())) {
+            List<AreaStaffResponse> areaStaffResponses = areaStaffComponent.searchByOperatorIdAndAreaStaffName(bo.getOperatorId(), bo.getAreaStaffName());
+            bo.setAreaStaffIds(areaStaffResponses.stream().map(AreaStaffResponse::getId).toList());
+        }
+    }
+
+    /**
      * 添加司机在途核算记录
      */
     @PostMapping("/routeAccountRecord/add")
@@ -227,7 +241,7 @@ public class DriverIntervalCargoDamageController extends BaseController {
     @GetMapping("/routeAccountRecord/cancel/{routeAccountRecordMainId}")
     @ResponseBody
     public Result<String> cancelRouteAccountRecord(@PathVariable("routeAccountRecordMainId") Long routeAccountRecordMainId, AdminUserInfo adminUserInfo) {
-        DriverIntervalRouteAccountRecordCancelBo bo = new DriverIntervalRouteAccountRecordCancelBo();
+        BaseIdBo bo = new BaseIdBo();
         bo.setId(routeAccountRecordMainId);
         buildUserInfo(bo, adminUserInfo);
         driverOnRouteAccountRecordService.cancel(bo);
@@ -240,7 +254,27 @@ public class DriverIntervalCargoDamageController extends BaseController {
     @PostMapping("/routeAccountRecord/export")
     @ResponseBody
     public Result<String> exportRouteAccountRecord(@Validated @RequestBody DriverRouteAccountRecordExportRequest request, AdminUserInfo adminUserInfo) {
-        return null;
+        DriverRouteAccountRecordPageBo bo = DriverIntervalCargoDamageMapStruct.MAPSTRUCT.routeAccountRecordExportRequestToBo(request);
+        buildUserInfo(bo, adminUserInfo);
+        bo.setPageNum(1);
+        bo.setPageSize(1000);
+        List<DriverRouteAccountRecordMainVo> all = new ArrayList<>();
+        while (true) {
+            Page<DriverRouteAccountRecordMainVo> page = driverOnRouteAccountRecordMainService.searchForPage(bo);
+            List<DriverRouteAccountRecordMainVo> driverRouteAccountRecordMainVos = page.getRecords();
+            if (null == driverRouteAccountRecordMainVos || driverRouteAccountRecordMainVos.isEmpty()) {
+                break;
+            }
+            all.addAll(driverRouteAccountRecordMainVos);
+            bo.setPageNum(bo.getPageNum() + 1);
+        }
+        areaStaffService.buildAreaStaffName(all);
+        List<DriverRouteAccountRecordMainExport> driverRouteAccountRecordMainExports = DriverIntervalCargoDamageMapStruct.MAPSTRUCT.routeAccountRecordMainVoListToRouteAccountRecordMainExportList(all);
+        driverRouteAccountRecordMainExports.forEach(export -> {
+            export.setStatus(DriverOnRouteAccountRecordStatusEnum.getDesc(export.getStatus()));
+        });
+        String uri = exportClient.export(driverRouteAccountRecordMainExports, "export/driver/interval/routeAccountRecord", "司机在途核算记录" + System.currentTimeMillis());
+        return Result.success(uri);
     }
 
     /**
@@ -249,7 +283,18 @@ public class DriverIntervalCargoDamageController extends BaseController {
     @PostMapping("/routeAccountRecord/page")
     @ResponseBody
     public PageResult<DriverRouteAccountRecordMainResponse> routeAccountRecordPage(@Validated @RequestBody DriverRouteAccountRecordPageRequest request, AdminUserInfo adminUserInfo) {
-        return null;
+        DriverRouteAccountRecordPageBo bo = DriverIntervalCargoDamageMapStruct.MAPSTRUCT.routeAccountRecordPageRequestToBo(request);
+        buildUserInfo(bo, adminUserInfo);
+        extractedAreaStaffSearchParam(bo);
+        Page<DriverRouteAccountRecordMainVo> page = driverOnRouteAccountRecordMainService.searchForPage(bo);
+        PageResult<DriverRouteAccountRecordMainResponse> pageResult = PageResult.newPageResult(request.getPageNum(), request.getPageSize());
+        List<DriverRouteAccountRecordMainVo> driverRouteAccountRecordMainVos = page.getRecords();
+        if (null == driverRouteAccountRecordMainVos || driverRouteAccountRecordMainVos.isEmpty()) {
+            return pageResult.success(0, new ArrayList<>());
+        }
+        areaStaffService.buildAreaStaffName(driverRouteAccountRecordMainVos);
+        List<DriverRouteAccountRecordMainResponse> driverRouteAccountRecordMainResponses = DriverIntervalCargoDamageMapStruct.MAPSTRUCT.accountRecordMainVoToResponse(driverRouteAccountRecordMainVos);
+        return pageResult.success(page.getTotal(), driverRouteAccountRecordMainResponses);
     }
 
     /**
@@ -257,8 +302,16 @@ public class DriverIntervalCargoDamageController extends BaseController {
      */
     @GetMapping("/routeAccountRecord/detail/{routeAccountRecordMainId}")
     @ResponseBody
-    public Result<List<DriverRouteDetailResponse>> routeAccountRecordDetail(@PathVariable("routeAccountRecordMainId") Long routeAccountId, AdminUserInfo adminUserInfo) {
-        return null;
+    public Result<List<DriverRouteAccountRecordDetailResponse>> routeAccountRecordDetail(@PathVariable("routeAccountRecordMainId") Long routeAccountId, AdminUserInfo adminUserInfo) {
+        BaseIdBo bo = new BaseIdBo();
+        bo.setId(routeAccountId);
+        buildUserInfo(bo, adminUserInfo);
+        List<DriverRouteAccountRecordDetailVo> driverRouteDetailVos = driverOnRouteAccountRecordDetailService.searchByRouteAccountRecordMainId(bo);
+        if (null == driverRouteDetailVos || driverRouteDetailVos.isEmpty()) {
+            return Result.success(new ArrayList<>());
+        }
+        List<DriverRouteAccountRecordDetailResponse> driverRouteDetailResponses = DriverIntervalCargoDamageMapStruct.MAPSTRUCT.routeAccountRecordDetailVoToResponse(driverRouteDetailVos);
+        return Result.success(driverRouteDetailResponses);
     }
 
     /**
@@ -267,7 +320,10 @@ public class DriverIntervalCargoDamageController extends BaseController {
     @PostMapping("/routeAccountRecord/detail/edit")
     @ResponseBody
     public Result<String> editRouteAccountRecord(@Validated @RequestBody DriverIntervalRouteAccountRecordEditorRequest request, AdminUserInfo adminUserInfo) {
-        return null;
+        DriverIntervalRouteAccountRecordEditorBo bo = DriverIntervalCargoDamageMapStruct.MAPSTRUCT.driverIntervalRouteAccountRecordEditorRequestToBo(request);
+        buildUserInfo(bo, adminUserInfo);
+        driverOnRouteAccountRecordService.edit(bo);
+        return Result.success("success");
     }
 
     /**
@@ -275,8 +331,17 @@ public class DriverIntervalCargoDamageController extends BaseController {
      */
     @GetMapping("/routeAccountRecord/detail/export/{routeAccountRecordMainId}")
     @ResponseBody
-    public Result<String> exportRouteAccountRecordDetail(@PathVariable("routeAccountRecordMainId") Long routeAccountId, AdminUserInfo adminUserInfo) {
-        return null;
+    public Result<String> exportRouteAccountRecordDetail(@PathVariable("routeAccountRecordMainId") Long routeAccountRecordMainId, AdminUserInfo adminUserInfo) {
+        BaseIdBo bo = new BaseIdBo();
+        bo.setId(routeAccountRecordMainId);
+        buildUserInfo(bo, adminUserInfo);
+        List<DriverRouteAccountRecordDetailVo> driverRouteDetailVos = driverOnRouteAccountRecordDetailService.searchByRouteAccountRecordMainId(bo);
+        if (null == driverRouteDetailVos || driverRouteDetailVos.isEmpty()) {
+            return Result.fail("没有可导出的数据");
+        }
+        List<DriverRouteAccountRecordDetailExport> exports = DriverIntervalCargoDamageMapStruct.MAPSTRUCT.routeAccountRecordDetailVoToExport(driverRouteDetailVos);
+        String uri = exportClient.export(exports, "export/driver/interval/routeAccountRecordDetail", "司机在途核算明细" + System.currentTimeMillis());
+        return Result.success(uri);
     }
 
 

+ 56 - 9
warehouse-admin-web/src/main/java/com/yr/warehouse/admin/web/driver/controller/DriverRouteDetailController.java

@@ -1,14 +1,26 @@
 package com.yr.warehouse.admin.web.driver.controller;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.yr.bluecat.common.entity.response.PageResult;
 import com.yr.bluecat.common.entity.response.Result;
+import com.yr.bluecat.common.utils.excel.ExportClient;
 import com.yr.prism.auth.core.user.AdminUserInfo;
+import com.yr.warehouse.admin.driver.bo.DriverRouteDetailPageBo;
+import com.yr.warehouse.admin.driver.vo.DriverRouteDetailVo;
+import com.yr.warehouse.admin.service.driver.DriverOnRouteDetailLogService;
 import com.yr.warehouse.admin.web.common.BaseController;
+import com.yr.warehouse.admin.web.driver.export.DriverRouteDetailExport;
+import com.yr.warehouse.admin.web.driver.mapstruct.DriverRouteDetailMapStruct;
+import com.yr.warehouse.admin.web.driver.request.DriverRouteDetailExportRequest;
 import com.yr.warehouse.admin.web.driver.request.DriverRouteDetailPageRequest;
 import com.yr.warehouse.admin.web.driver.response.DriverRouteDetailResponse;
+import jakarta.annotation.Resource;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.ArrayList;
+import java.util.List;
+
 /**
  * 司机在途明细
  */
@@ -16,24 +28,59 @@ import org.springframework.web.bind.annotation.*;
 @RequestMapping("/driver/route")
 public class DriverRouteDetailController extends BaseController {
 
+    @Resource
+    private DriverOnRouteDetailLogService driverOnRouteDetailLogService;
+
+    @Resource
+    private ExportClient exportClient;
+
     /**
-     * 导出司机在途明细
+     * 分页查询司机在途明细
      * @return
      */
-    @GetMapping("/export/{goodsLossRecordId}")
+    @PostMapping("/page")
     @ResponseBody
-    public Result<String> export(@PathVariable("goodsLossRecordId") Long goodsLossRecordId) {
-        return null;
+    public PageResult<DriverRouteDetailResponse> page(@Validated @RequestBody DriverRouteDetailPageRequest request, AdminUserInfo adminUserInfo) {
+        DriverRouteDetailPageBo bo = DriverRouteDetailMapStruct.MAPSTRUCT.requestPageToBo(request);
+        buildUserInfo(bo, adminUserInfo);
+        Page<DriverRouteDetailVo> pageResult = driverOnRouteDetailLogService.searchForPage(bo);
+        PageResult<DriverRouteDetailResponse> result = PageResult.newPageResult(request.getPageNum(), request.getPageSize());
+        List<DriverRouteDetailVo> driverRouteDetailVos = pageResult.getRecords();
+        if (null == driverRouteDetailVos || driverRouteDetailVos.isEmpty()) {
+            return result.success(0, new ArrayList<>());
+        }
+        List<DriverRouteDetailResponse> driverRouteDetailResponses = DriverRouteDetailMapStruct.MAPSTRUCT.voToResponse(driverRouteDetailVos);
+        return result.success(pageResult.getTotal(), driverRouteDetailResponses);
     }
 
     /**
-     * 分页查询司机在途明细
+     * 导出司机在途明细
      * @return
      */
-    @PostMapping("/page")
+    @GetMapping("/export/{goodsLossRecordId}")
     @ResponseBody
-    public PageResult<DriverRouteDetailResponse> page(@Validated @RequestBody DriverRouteDetailPageRequest request, AdminUserInfo adminUserInfo) {
-        return null;
-    }
+    public Result<String> export(@Validated @RequestBody DriverRouteDetailExportRequest request, AdminUserInfo adminUserInfo) {
+        DriverRouteDetailPageBo bo = DriverRouteDetailMapStruct.MAPSTRUCT.exportRequestToBo(request);
+        buildUserInfo(bo, adminUserInfo);
 
+        bo.setPageNum(1);
+        bo.setPageSize(1000);
+
+        List<DriverRouteDetailVo> all = new ArrayList<>();
+        while (true) {
+            Page<DriverRouteDetailVo> pageResult = driverOnRouteDetailLogService.searchForPage(bo);
+            List<DriverRouteDetailVo> driverRouteDetailVos = pageResult.getRecords();
+            if (null == driverRouteDetailVos || driverRouteDetailVos.isEmpty()) {
+                break;
+            }
+            all.addAll(driverRouteDetailVos);
+            bo.setPageNum(bo.getPageNum() + 1);
+        }
+        if (all.isEmpty()) {
+            return Result.fail("没有可导出的数据");
+        }
+        List<DriverRouteDetailExport> driverRouteDetailExports = DriverRouteDetailMapStruct.MAPSTRUCT.voToExport(all);
+        String uri = exportClient.export(driverRouteDetailExports, "export/driver/route", "司机在途明细" + System.currentTimeMillis());
+        return Result.success(uri);
+    }
 }

+ 42 - 0
warehouse-admin-web/src/main/java/com/yr/warehouse/admin/web/driver/export/DriverRouteAccountRecordDetailExport.java

@@ -0,0 +1,42 @@
+package com.yr.warehouse.admin.web.driver.export;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * 司机在途核算记录详情Export
+ */
+@Data
+public class DriverRouteAccountRecordDetailExport implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 商品编码
+     */
+    @ExcelProperty("商品编码")
+    private String goodsCode;
+
+    /**
+     * 商品图片
+     */
+    @ExcelProperty("商品图片")
+    private String goodsImg;
+
+    /**
+     * 商品名称
+     */
+    @ExcelProperty("商品名称")
+    private String goodsName;
+
+    /**
+     * 库存数
+     */
+    @ExcelProperty("库存数")
+    private Long inventory;
+
+}

+ 62 - 0
warehouse-admin-web/src/main/java/com/yr/warehouse/admin/web/driver/export/DriverRouteAccountRecordMainExport.java

@@ -0,0 +1,62 @@
+package com.yr.warehouse.admin.web.driver.export;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+/**
+ * 司机在途核算记录导出对象
+ */
+@Data
+public class DriverRouteAccountRecordMainExport implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 区域员工名称
+     */
+    @ExcelProperty("区域员工名称")
+    private String areaStaffName;
+
+    /**
+     * 仓库名称
+     */
+    @ExcelProperty("仓库名称")
+    private String warehouseName;
+
+    /**
+     * 统计日期
+     */
+    @ExcelProperty("统计日期")
+    private LocalDate statDate;
+
+    /**
+     * 统计总数
+     */
+    @ExcelProperty("统计总数")
+    private Long statTotalNum;
+
+    /**
+     * 状态 UN_VERIFIED 未核算 VERIFIED 已核算 CANCEL 已取消
+     */
+    @ExcelProperty("状态")
+    private String status;
+
+    /**
+     * 创建人
+     */
+    @ExcelProperty("创建人")
+    private String createName;
+
+    /**
+     * 创建时间
+     */
+    @ExcelProperty("创建时间")
+    private LocalDateTime createTime;
+
+}

+ 78 - 0
warehouse-admin-web/src/main/java/com/yr/warehouse/admin/web/driver/export/DriverRouteDetailExport.java

@@ -0,0 +1,78 @@
+package com.yr.warehouse.admin.web.driver.export;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * 司机在途明细导出参数
+ */
+@Data
+public class DriverRouteDetailExport implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 商品编码
+     */
+    @ExcelProperty("商品编码")
+    private String goodsCode;
+
+    /**
+     * 商品名称
+     */
+    @ExcelProperty("商品名称")
+    private String goodsName;
+
+    /**
+     * 商品图片
+     */
+    @ExcelProperty("商品图片")
+    private String goodsImg;
+
+    /**
+     * 开单数
+     */
+    @ExcelProperty("开单数")
+    private Long createNum;
+
+    /**
+     * 取消数(未出库) - 页面展示这个*
+     */
+    @ExcelProperty("取消数(未出库)")
+    private Long unshippedCancelNum;
+
+    /**
+     * 补货数
+     */
+    @ExcelProperty("补货数")
+    private Long replenishNum;
+
+    /**
+     * 回仓数
+     */
+    @ExcelProperty("回仓数")
+    private Long returnWarehouseNum;
+
+    /**
+     * 上次库存数
+     */
+    @ExcelProperty("上次库存数")
+    private Long yesterdayStockNum;
+
+    /**
+     * 在途库存数
+     */
+    @ExcelProperty("在途库存数")
+    private Long todayStockNum;
+
+    /**
+     * 盈亏数
+     */
+    @ExcelProperty("盈亏数")
+    private Long profitLossNum;
+
+}

+ 20 - 0
warehouse-admin-web/src/main/java/com/yr/warehouse/admin/web/driver/mapstruct/DriverIntervalCargoDamageMapStruct.java

@@ -3,10 +3,16 @@ package com.yr.warehouse.admin.web.driver.mapstruct;
 import com.yr.warehouse.admin.driver.bo.*;
 import com.yr.warehouse.admin.driver.vo.DriverIntervalCargoDamageDetailVo;
 import com.yr.warehouse.admin.driver.vo.DriverIntervalCargoDamageVo;
+import com.yr.warehouse.admin.driver.vo.DriverRouteAccountRecordDetailVo;
+import com.yr.warehouse.admin.driver.vo.DriverRouteAccountRecordMainVo;
 import com.yr.warehouse.admin.web.driver.export.DriverIntervalCargoDamageDetailExport;
+import com.yr.warehouse.admin.web.driver.export.DriverRouteAccountRecordDetailExport;
+import com.yr.warehouse.admin.web.driver.export.DriverRouteAccountRecordMainExport;
 import com.yr.warehouse.admin.web.driver.request.*;
 import com.yr.warehouse.admin.web.driver.response.DriverIntervalCargoDamageDetailResponse;
 import com.yr.warehouse.admin.web.driver.response.DriverIntervalCargoDamageResponse;
+import com.yr.warehouse.admin.web.driver.response.DriverRouteAccountRecordDetailResponse;
+import com.yr.warehouse.admin.web.driver.response.DriverRouteAccountRecordMainResponse;
 import org.mapstruct.Mapper;
 import org.mapstruct.factory.Mappers;
 
@@ -34,4 +40,18 @@ public interface DriverIntervalCargoDamageMapStruct {
     List<DriverIntervalCargoDamageDetailExport> detailVoListToDetailExportList(List<DriverIntervalCargoDamageDetailVo> all);
 
     DriverIntervalRouteAccountRecordCreateBo routeAccountRecordCreateRequestToBo(DriverIntervalRouteAccountRecordCreateRequest request);
+
+    DriverRouteAccountRecordPageBo routeAccountRecordPageRequestToBo(DriverRouteAccountRecordPageRequest request);
+
+    List<DriverRouteAccountRecordMainResponse> accountRecordMainVoToResponse(List<DriverRouteAccountRecordMainVo> driverRouteAccountRecordMainVos);
+
+    DriverRouteAccountRecordPageBo routeAccountRecordExportRequestToBo(DriverRouteAccountRecordExportRequest request);
+
+    List<DriverRouteAccountRecordMainExport> routeAccountRecordMainVoListToRouteAccountRecordMainExportList(List<DriverRouteAccountRecordMainVo> all);
+
+    List<DriverRouteAccountRecordDetailResponse> routeAccountRecordDetailVoToResponse(List<DriverRouteAccountRecordDetailVo> driverRouteDetailVos);
+
+    DriverIntervalRouteAccountRecordEditorBo driverIntervalRouteAccountRecordEditorRequestToBo(DriverIntervalRouteAccountRecordEditorRequest request);
+
+    List<DriverRouteAccountRecordDetailExport> routeAccountRecordDetailVoToExport(List<DriverRouteAccountRecordDetailVo> driverRouteDetailVos);
 }

+ 29 - 0
warehouse-admin-web/src/main/java/com/yr/warehouse/admin/web/driver/mapstruct/DriverRouteDetailMapStruct.java

@@ -0,0 +1,29 @@
+package com.yr.warehouse.admin.web.driver.mapstruct;
+
+import com.yr.warehouse.admin.driver.bo.DriverRouteDetailPageBo;
+import com.yr.warehouse.admin.driver.vo.DriverRouteDetailVo;
+import com.yr.warehouse.admin.web.driver.export.DriverRouteDetailExport;
+import com.yr.warehouse.admin.web.driver.request.DriverRouteDetailExportRequest;
+import com.yr.warehouse.admin.web.driver.request.DriverRouteDetailPageRequest;
+import com.yr.warehouse.admin.web.driver.response.DriverRouteDetailResponse;
+import org.mapstruct.Mapper;
+import org.mapstruct.factory.Mappers;
+
+import java.util.List;
+
+/**
+ * 司机在途明细MapStruct
+ */
+@Mapper
+public interface DriverRouteDetailMapStruct {
+
+    DriverRouteDetailMapStruct MAPSTRUCT = Mappers.getMapper(DriverRouteDetailMapStruct.class);
+
+    DriverRouteDetailPageBo requestPageToBo(DriverRouteDetailPageRequest request);
+
+    List<DriverRouteDetailResponse> voToResponse(List<DriverRouteDetailVo> driverRouteDetailVos);
+
+    DriverRouteDetailPageBo exportRequestToBo(DriverRouteDetailExportRequest request);
+
+    List<DriverRouteDetailExport> voToExport(List<DriverRouteDetailVo> all);
+}

+ 2 - 3
warehouse-admin-web/src/main/java/com/yr/warehouse/admin/web/driver/request/DriverIntervalRouteAccountRecordEditorRequest.java

@@ -20,12 +20,11 @@ public class DriverIntervalRouteAccountRecordEditorRequest implements Serializab
      * 司机在途核算记录id
      */
     @NotNull(message = "司机在途核算记录id不能为空")
-    private Long routeAccountRecordMainId;
+    private Long id;
 
     /**
-     * 货损记录id
+     * 货损记录
      */
-    @NotNull(message = "货损记录id不能为空")
     private List<DriverIntervalRouteAccountRecordDetailCreateRequest> details;
 
 }

+ 5 - 0
warehouse-admin-web/src/main/java/com/yr/warehouse/admin/web/driver/request/DriverRouteAccountRecordPageRequest.java

@@ -19,6 +19,11 @@ public class DriverRouteAccountRecordPageRequest extends PageRequest implements
     private static final long serialVersionUID = 1L;
 
     /**
+     * 运营商id
+     */
+    private Long operatorId;
+
+    /**
      * 区域员工名称
      */
     private String areaStaffName;

+ 29 - 0
warehouse-admin-web/src/main/java/com/yr/warehouse/admin/web/driver/request/DriverRouteDetailExportRequest.java

@@ -0,0 +1,29 @@
+package com.yr.warehouse.admin.web.driver.request;
+
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * 司机线路详情导出请求参数
+ */
+@Data
+public class DriverRouteDetailExportRequest implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 货损记录id
+     */
+    @NotNull(message = "货损记录id不能为空")
+    private Long goodsLossRecordId;
+
+    /**
+     * 商品名称
+     */
+    private String goodsName;
+
+}

+ 3 - 0
warehouse-admin-web/src/main/java/com/yr/warehouse/admin/web/driver/response/DriverRouteAccountRecordMainResponse.java

@@ -1,5 +1,6 @@
 package com.yr.warehouse.admin.web.driver.response;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;
 
 import java.io.Serial;
@@ -44,6 +45,7 @@ public class DriverRouteAccountRecordMainResponse implements Serializable {
     /**
      * 统计日期
      */
+    @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
     private LocalDate statDate;
 
     /**
@@ -64,5 +66,6 @@ public class DriverRouteAccountRecordMainResponse implements Serializable {
     /**
      * 创建时间
      */
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private LocalDateTime createTime;
 }