Quellcode durchsuchen

[insert] 日统计逻辑开发

miajio vor 1 Monat
Ursprung
Commit
ca57d950cf
53 geänderte Dateien mit 1742 neuen und 50 gelöschten Zeilen
  1. 1 1
      warehouse-admin-component/src/main/java/com/yr/warehouse/admin/component/apollo/ApolloConfigEvent.java
  2. 39 1
      warehouse-admin-component/src/main/java/com/yr/warehouse/admin/component/areastaff/AreaStaffComponent.java
  3. 59 0
      warehouse-admin-component/src/main/java/com/yr/warehouse/admin/component/auth/OperatorComponent.java
  4. 29 0
      warehouse-admin-component/src/main/java/com/yr/warehouse/admin/component/auth/mapstruct/OperatorMapstruct.java
  5. 40 0
      warehouse-admin-component/src/main/java/com/yr/warehouse/admin/component/auth/vo/OrgOperatorMerchantVo.java
  6. 1 1
      warehouse-admin-component/src/main/java/com/yr/warehouse/admin/component/auth/vo/OrgOperatorVo.java
  7. 11 0
      warehouse-admin-data/src/main/java/com/yr/warehouse/admin/areastaff/fase/AreaStaffIdFace.java
  8. 6 0
      warehouse-admin-data/src/main/java/com/yr/warehouse/admin/driver/bo/DriverDailyCargoDamageExportBo.java
  9. 6 0
      warehouse-admin-data/src/main/java/com/yr/warehouse/admin/driver/bo/DriverDailyCargoDamagePageBo.java
  10. 8 1
      warehouse-admin-data/src/main/java/com/yr/warehouse/admin/driver/bo/DriverIntervalCargoDamageDetailExportBo.java
  11. 8 1
      warehouse-admin-data/src/main/java/com/yr/warehouse/admin/driver/bo/DriverIntervalCargoDamageDetailPageBo.java
  12. 6 0
      warehouse-admin-data/src/main/java/com/yr/warehouse/admin/driver/bo/DriverIntervalCargoDamagePageBo.java
  13. 25 0
      warehouse-admin-data/src/main/java/com/yr/warehouse/admin/driver/bo/DriverIntervalRouteAccountRecordCancelBo.java
  14. 62 0
      warehouse-admin-data/src/main/java/com/yr/warehouse/admin/driver/bo/DriverIntervalRouteAccountRecordCreateBo.java
  15. 27 0
      warehouse-admin-data/src/main/java/com/yr/warehouse/admin/driver/bo/DriverIntervalRouteAccountRecordDetailCreateBo.java
  16. 16 0
      warehouse-admin-data/src/main/java/com/yr/warehouse/admin/driver/face/DriverIntervalCargoDamageDetailSearchFace.java
  17. 12 0
      warehouse-admin-data/src/main/java/com/yr/warehouse/admin/driver/mapper/DriverGoodsLossIntervalDetailMapper.java
  18. 22 1
      warehouse-admin-data/src/main/java/com/yr/warehouse/admin/driver/mapper/DriverGoodsLossIntervalMainMapper.java
  19. 11 0
      warehouse-admin-data/src/main/java/com/yr/warehouse/admin/driver/mapper/DriverGoodsLossRecordMapper.java
  20. 7 0
      warehouse-admin-data/src/main/java/com/yr/warehouse/admin/driver/mapper/DriverOnRouteAccountRecordDetailMapper.java
  21. 16 0
      warehouse-admin-data/src/main/java/com/yr/warehouse/admin/driver/mapper/DriverOnRouteAccountRecordMainMapper.java
  22. 29 0
      warehouse-admin-data/src/main/java/com/yr/warehouse/admin/driver/menu/DriverOnRouteAccountRecordStatusEnum.java
  23. 123 0
      warehouse-admin-data/src/main/java/com/yr/warehouse/admin/driver/vo/DriverGoodsLossRecordVo.java
  24. 113 0
      warehouse-admin-data/src/main/java/com/yr/warehouse/admin/driver/vo/DriverIntervalCargoDamageDetailVo.java
  25. 107 0
      warehouse-admin-data/src/main/java/com/yr/warehouse/admin/driver/vo/DriverIntervalCargoDamageVo.java
  26. 33 0
      warehouse-admin-data/src/main/resources/mapper/driver/DriverGoodsLossIntervalDetailMapper.xml
  27. 44 0
      warehouse-admin-data/src/main/resources/mapper/driver/DriverGoodsLossIntervalMainMapper.xml
  28. 39 2
      warehouse-admin-data/src/main/resources/mapper/driver/DriverGoodsLossRecordMapper.xml
  29. 9 0
      warehouse-admin-data/src/main/resources/mapper/driver/DriverOnRouteAccountRecordDetailMapper.xml
  30. 10 0
      warehouse-admin-data/src/main/resources/mapper/driver/DriverOnRouteAccountRecordMainMapper.xml
  31. 17 0
      warehouse-admin-server/src/main/java/com/yr/warehouse/admin/service/areastaff/AreaStaffService.java
  32. 29 0
      warehouse-admin-server/src/main/java/com/yr/warehouse/admin/service/areastaff/impl/AreaStaffServiceImpl.java
  33. 7 0
      warehouse-admin-server/src/main/java/com/yr/warehouse/admin/service/driver/DriverGoodsLossIntervalDetailService.java
  34. 16 0
      warehouse-admin-server/src/main/java/com/yr/warehouse/admin/service/driver/DriverGoodsLossIntervalMainService.java
  35. 26 0
      warehouse-admin-server/src/main/java/com/yr/warehouse/admin/service/driver/DriverGoodsLossRecordService.java
  36. 28 0
      warehouse-admin-server/src/main/java/com/yr/warehouse/admin/service/driver/DriverOnRouteAccountRecordService.java
  37. 8 0
      warehouse-admin-server/src/main/java/com/yr/warehouse/admin/service/driver/impl/DriverGoodsLossIntervalDetailServiceImpl.java
  38. 21 0
      warehouse-admin-server/src/main/java/com/yr/warehouse/admin/service/driver/impl/DriverGoodsLossIntervalMainServiceImpl.java
  39. 78 2
      warehouse-admin-server/src/main/java/com/yr/warehouse/admin/service/driver/impl/DriverGoodsLossRecordServiceImpl.java
  40. 75 0
      warehouse-admin-server/src/main/java/com/yr/warehouse/admin/service/driver/impl/DriverOnRouteAccountRecordServiceImpl.java
  41. 14 0
      warehouse-admin-server/src/main/java/com/yr/warehouse/admin/service/driver/mapstruct/DriverGoodsLossRecordMapStruct.java
  42. 11 0
      warehouse-admin-server/src/main/java/com/yr/warehouse/admin/service/driver/mapstruct/DriverOnRouteAccountRecordMapStruct.java
  43. 44 2
      warehouse-admin-web/src/main/java/com/yr/warehouse/admin/web/driver/controller/DriverDailyCargoDamageController.java
  44. 152 27
      warehouse-admin-web/src/main/java/com/yr/warehouse/admin/web/driver/controller/DriverIntervalCargoDamageController.java
  45. 108 0
      warehouse-admin-web/src/main/java/com/yr/warehouse/admin/web/driver/export/DriverGoodsLossRecordExport.java
  46. 124 0
      warehouse-admin-web/src/main/java/com/yr/warehouse/admin/web/driver/export/DriverIntervalCargoDamageDetailExport.java
  47. 9 0
      warehouse-admin-web/src/main/java/com/yr/warehouse/admin/web/driver/mapstruct/DriverDailyCargoDamageMapStruct.java
  48. 19 8
      warehouse-admin-web/src/main/java/com/yr/warehouse/admin/web/driver/mapstruct/DriverIntervalCargoDamageMapStruct.java
  49. 5 0
      warehouse-admin-web/src/main/java/com/yr/warehouse/admin/web/driver/request/DriverDailyCargoDamagePageRequest.java
  50. 0 1
      warehouse-admin-web/src/main/java/com/yr/warehouse/admin/web/driver/request/DriverIntervalRouteAccountRecordCreateRequest.java
  51. 20 0
      warehouse-admin-web/src/main/java/com/yr/warehouse/admin/web/driver/response/DriverGoodsLossRecordResponse.java
  52. 1 1
      warehouse-admin-web/src/main/java/com/yr/warehouse/admin/web/driver/response/DriverIntervalCargoDamageDetailResponse.java
  53. 11 1
      warehouse-admin-web/src/main/java/com/yr/warehouse/admin/web/driver/response/DriverIntervalCargoDamageResponse.java

+ 1 - 1
warehouse-admin-component/src/main/java/com/yr/warehouse/admin/component/apollo/ApolloConfigEvent.java

@@ -2,7 +2,7 @@ package com.yr.warehouse.admin.component.apollo;
 
 
 import com.ctrip.framework.apollo.spring.annotation.ApolloJsonValue;
-import com.yr.warehouse.admin.component.vo.OrgOperatorVo;
+import com.yr.warehouse.admin.component.auth.vo.OrgOperatorVo;
 import lombok.Data;
 import org.springframework.beans.factory.annotation.Value;
 import org.springframework.context.annotation.Configuration;

+ 39 - 1
warehouse-admin-component/src/main/java/com/yr/warehouse/admin/component/areastaff/AreaStaffComponent.java

@@ -8,7 +8,9 @@ import jakarta.annotation.Resource;
 import org.apache.dubbo.config.annotation.DubboReference;
 import org.springframework.stereotype.Component;
 
+import java.util.Collections;
 import java.util.List;
+import java.util.stream.Collectors;
 
 /**
  * 区域员工组件
@@ -29,7 +31,43 @@ public class AreaStaffComponent {
     public List<AreaStaffResponse> searchByStaffIds(List<Long> staffIds) {
         AreaStaffSearchRequest request = new AreaStaffSearchRequest();
         request.setAppId(apolloConfigEvent.getAppId());
-        request.setAreaStaffIds(staffIds);
+        if (staffIds != null && !staffIds.isEmpty()) {
+            request.setAreaStaffIds(staffIds.stream().distinct().collect(Collectors.toList()));
+        }
+        return areaStaffApi.searchByStaffIds(request).getData();
+    }
+
+    /**
+     * 根据员工id查询区域员工信息
+     *
+     * @param staffId 员工id
+     * @return 区域员工信息
+     */
+    public AreaStaffResponse searchByStaffId(Long staffId) {
+        AreaStaffSearchRequest request = new AreaStaffSearchRequest();
+        request.setAppId(apolloConfigEvent.getAppId());
+        request.setAreaStaffIds(Collections.singletonList(staffId));
+        List<AreaStaffResponse> responses = areaStaffApi.searchByStaffIds(request).getData();
+        if (responses == null || responses.isEmpty()) {
+            return null;
+        }
+        return responses.get(0);
+    }
+
+    /**
+     * 根据运营商id和区域员工名称查询区域员工信息
+     *
+     * @param operatorId 运营商id
+     * @param areaStaffName 区域员工名称
+     * @return 区域员工信息
+     */
+    public List<AreaStaffResponse> searchByOperatorIdAndAreaStaffName(Long operatorId, String areaStaffName) {
+        AreaStaffSearchRequest request = new AreaStaffSearchRequest();
+        request.setAppId(apolloConfigEvent.getAppId());
+        if (null != operatorId && operatorId > 0L) {
+            request.setOperatorId(operatorId);
+        }
+        request.setEmployeeName(areaStaffName);
         return areaStaffApi.searchByStaffIds(request).getData();
     }
 

+ 59 - 0
warehouse-admin-component/src/main/java/com/yr/warehouse/admin/component/auth/OperatorComponent.java

@@ -0,0 +1,59 @@
+package com.yr.warehouse.admin.component.auth;
+
+import com.google.common.collect.Lists;
+import com.yr.bluecat.common.entity.response.Result;
+import com.yr.prism.auth.support.OperatorsQueryApi;
+import com.yr.prism.auth.support.request.OrgOperatorQueryRequest;
+import com.yr.prism.auth.support.response.OrgOperatorResponse;
+import com.yr.warehouse.admin.component.apollo.ApolloConfigEvent;
+import com.yr.warehouse.admin.component.auth.mapstruct.OperatorMapstruct;
+import com.yr.warehouse.admin.component.auth.vo.OrgOperatorVo;
+import org.apache.dubbo.config.annotation.DubboReference;
+import org.springframework.stereotype.Component;
+import org.springframework.util.CollectionUtils;
+
+import javax.annotation.Resource;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * 运营商信息组件
+ */
+@Component
+public class OperatorComponent {
+    @Resource
+    private ApolloConfigEvent apolloConfigEvent;
+
+    @DubboReference(timeout = 5000, retries = 0)
+    private OperatorsQueryApi operatorsQueryApi;
+
+    public List<OrgOperatorVo> searchAll() {
+        Result<List<OrgOperatorResponse>> res = operatorsQueryApi.searchAll();
+        return OperatorMapstruct.MAPSTRUCT.toOrgOperatorResponse(res.getData());
+    }
+
+    /**
+     * 通过id查询运营商信息
+     */
+    public OrgOperatorVo queryOperatorById(Long id) {
+        return queryOperatorMapByIdList(Lists.newArrayList(id)).get(id);
+    }
+
+    /**
+     * 通过id查询运营商信息
+     */
+    public Map<Long, OrgOperatorVo> queryOperatorMapByIdList(List<Long> ids) {
+        if (CollectionUtils.isEmpty(ids)) {
+            return new HashMap<>();
+        }
+        OrgOperatorQueryRequest request = new OrgOperatorQueryRequest();
+        request.setAppId(apolloConfigEvent.getAppId());
+        request.setIds(ids.stream().distinct().toList());
+        Result<List<OrgOperatorResponse>> result = operatorsQueryApi.queryOperator(request);
+        List<OrgOperatorVo> orgOperatorResponse = OperatorMapstruct.MAPSTRUCT.toOrgOperatorResponse(result.getData());
+        return orgOperatorResponse.stream().collect(Collectors.toMap(OrgOperatorVo::getId, vo -> vo, (v1, v2) -> v1));
+    }
+
+}

+ 29 - 0
warehouse-admin-component/src/main/java/com/yr/warehouse/admin/component/auth/mapstruct/OperatorMapstruct.java

@@ -0,0 +1,29 @@
+/**
+ * 湖南有人网络有限公司
+ **/
+package com.yr.warehouse.admin.component.auth.mapstruct;
+
+import com.yr.prism.auth.support.response.OrgOperatorMerchantResponse;
+import com.yr.prism.auth.support.response.OrgOperatorResponse;
+import com.yr.warehouse.admin.component.auth.vo.OrgOperatorMerchantVo;
+import com.yr.warehouse.admin.component.auth.vo.OrgOperatorVo;
+import org.mapstruct.Mapper;
+import org.mapstruct.factory.Mappers;
+
+import java.util.List;
+
+/**
+ * @ClassName AdminUserInfoMapstruct
+ * @Description: 类描述
+ * @Author: pete
+ * @CreateDate: 2024/4/25 11:03
+ * @Version: 1.0
+ */
+@Mapper
+public interface OperatorMapstruct {
+    OperatorMapstruct MAPSTRUCT = Mappers.getMapper(OperatorMapstruct.class);
+
+    OrgOperatorMerchantVo toOrgOperatorMerchantVo(OrgOperatorMerchantResponse data);
+
+    List<OrgOperatorVo> toOrgOperatorResponse(List<OrgOperatorResponse> data);
+}

+ 40 - 0
warehouse-admin-component/src/main/java/com/yr/warehouse/admin/component/auth/vo/OrgOperatorMerchantVo.java

@@ -0,0 +1,40 @@
+/**
+ * 湖南有人网络有限公司
+ **/
+package com.yr.warehouse.admin.component.auth.vo;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @ClassName OrgOperatorMerchantResponse
+ * @Description: 类描述
+ * @Author: pete
+ * @CreateDate: 2024/8/5 9:32
+ * @Version: 1.0
+ */
+@Data
+public class OrgOperatorMerchantVo implements Serializable {
+
+    /**
+     * 运营商id
+     */
+    private Long deviceId;
+
+    /**
+     * 商户名称
+     */
+    private String merchantName;
+
+    /**
+     * 商户号
+     */
+    private String merchantNo;
+
+    /**
+     * 终端号
+     */
+    private String termNo;
+
+}

+ 1 - 1
warehouse-admin-component/src/main/java/com/yr/warehouse/admin/component/vo/OrgOperatorVo.java → warehouse-admin-component/src/main/java/com/yr/warehouse/admin/component/auth/vo/OrgOperatorVo.java

@@ -1,7 +1,7 @@
 /**
  * 湖南有人网络有限公司
  **/
-package com.yr.warehouse.admin.component.vo;
+package com.yr.warehouse.admin.component.auth.vo;
 
 import com.fasterxml.jackson.annotation.JsonFormat;
 import lombok.Data;

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

@@ -0,0 +1,11 @@
+package com.yr.warehouse.admin.areastaff.fase;
+
+/**
+ * 区域员工名称
+ * @author dengbp
+ */
+public interface AreaStaffIdFace {
+
+    Long getAreaStaffId();
+
+}

+ 6 - 0
warehouse-admin-data/src/main/java/com/yr/warehouse/admin/driver/bo/DriverDailyCargoDamageExportBo.java

@@ -7,6 +7,7 @@ import lombok.EqualsAndHashCode;
 import java.io.Serial;
 import java.io.Serializable;
 import java.time.LocalDate;
+import java.util.List;
 
 /**
  * 司机货损统计(日统计)请求参数
@@ -24,6 +25,11 @@ public class DriverDailyCargoDamageExportBo extends BaseBo implements Serializab
     private Long operatorId;
 
     /**
+     * 区域员工关系id
+     */
+    private List<Long> areaStaffIds;
+
+    /**
      * 区域员工名称
      */
     private String areaStaffName;

+ 6 - 0
warehouse-admin-data/src/main/java/com/yr/warehouse/admin/driver/bo/DriverDailyCargoDamagePageBo.java

@@ -7,6 +7,7 @@ import lombok.EqualsAndHashCode;
 import java.io.Serial;
 import java.io.Serializable;
 import java.time.LocalDate;
+import java.util.List;
 
 /**
  * 司机货损统计(日统计)请求参数
@@ -24,6 +25,11 @@ public class DriverDailyCargoDamagePageBo extends BasePageBo implements Serializ
     private Long operatorId;
 
     /**
+     * 区域员工关系id
+     */
+    private List<Long> areaStaffIds;
+
+    /**
      * 区域员工名称
      */
     private String areaStaffName;

+ 8 - 1
warehouse-admin-data/src/main/java/com/yr/warehouse/admin/driver/bo/DriverIntervalCargoDamageDetailExportBo.java

@@ -1,18 +1,20 @@
 package com.yr.warehouse.admin.driver.bo;
 
 import com.yr.warehouse.admin.common.bo.BaseBo;
+import com.yr.warehouse.admin.driver.face.DriverIntervalCargoDamageDetailSearchFace;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
 import java.io.Serial;
 import java.io.Serializable;
+import java.util.List;
 
 /**
  * 区间货损详情分页请求参数
  */
 @EqualsAndHashCode(callSuper = true)
 @Data
-public class DriverIntervalCargoDamageDetailExportBo extends BaseBo implements Serializable {
+public class DriverIntervalCargoDamageDetailExportBo extends BaseBo implements DriverIntervalCargoDamageDetailSearchFace, Serializable {
 
     @Serial
     private static final long serialVersionUID = 1L;
@@ -23,6 +25,11 @@ public class DriverIntervalCargoDamageDetailExportBo extends BaseBo implements S
     private Long goodsLossMonthlyMainId;
 
     /**
+     * 区域员工ids
+     */
+    private List<Long> areaStaffIds;
+
+    /**
      * 区域员工名称
      */
     private String areaStaffName;

+ 8 - 1
warehouse-admin-data/src/main/java/com/yr/warehouse/admin/driver/bo/DriverIntervalCargoDamageDetailPageBo.java

@@ -1,18 +1,20 @@
 package com.yr.warehouse.admin.driver.bo;
 
 import com.yr.warehouse.admin.common.bo.BasePageBo;
+import com.yr.warehouse.admin.driver.face.DriverIntervalCargoDamageDetailSearchFace;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
 import java.io.Serial;
 import java.io.Serializable;
+import java.util.List;
 
 /**
  * 区间货损详情分页请求参数
  */
 @EqualsAndHashCode(callSuper = true)
 @Data
-public class DriverIntervalCargoDamageDetailPageBo extends BasePageBo implements Serializable {
+public class DriverIntervalCargoDamageDetailPageBo extends BasePageBo implements DriverIntervalCargoDamageDetailSearchFace, Serializable {
 
     @Serial
     private static final long serialVersionUID = 1L;
@@ -23,6 +25,11 @@ public class DriverIntervalCargoDamageDetailPageBo extends BasePageBo implements
     private Long goodsLossMonthlyMainId;
 
     /**
+     * 区域员工ids
+     */
+    private List<Long> areaStaffIds;
+
+    /**
      * 区域员工名称
      */
     private String areaStaffName;

+ 6 - 0
warehouse-admin-data/src/main/java/com/yr/warehouse/admin/driver/bo/DriverIntervalCargoDamagePageBo.java

@@ -7,6 +7,7 @@ import lombok.EqualsAndHashCode;
 import java.io.Serial;
 import java.io.Serializable;
 import java.time.LocalDateTime;
+import java.util.List;
 
 /**
  * 分页查询货损统计(区间统计)请求参数
@@ -24,6 +25,11 @@ public class DriverIntervalCargoDamagePageBo extends BasePageBo implements Seria
     private Long operatorId;
 
     /**
+     * 区域员工关系id
+     */
+    private List<Long> areaStaffIds;
+
+    /**
      * 区域员工名称
      */
     private String areaStaffName;

+ 25 - 0
warehouse-admin-data/src/main/java/com/yr/warehouse/admin/driver/bo/DriverIntervalRouteAccountRecordCancelBo.java

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

+ 62 - 0
warehouse-admin-data/src/main/java/com/yr/warehouse/admin/driver/bo/DriverIntervalRouteAccountRecordCreateBo.java

@@ -0,0 +1,62 @@
+package com.yr.warehouse.admin.driver.bo;
+
+import com.yr.warehouse.admin.common.bo.BaseBo;
+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 DriverIntervalRouteAccountRecordCreateBo extends BaseBo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 创建成功后写入的id
+     */
+    private Long id;
+
+    /**
+     * 运营商id
+     */
+    private Long operatorId;
+
+    /**
+     * 运营商id链
+     */
+    private String operatorChain;
+
+    /**
+     * 区域员工id
+     */
+    private Long areaStaffId;
+
+    /**
+     * 仓库id
+     */
+    private Long warehouseId;
+
+    /**
+     * 统计日期
+     */
+    private LocalDate statDate;
+
+    /**
+     * 统计总数量
+     */
+    private Long statTotalNum;
+
+    /**
+     * 商品列表
+     */
+    private List<DriverIntervalRouteAccountRecordDetailCreateBo> details;
+
+}

+ 27 - 0
warehouse-admin-data/src/main/java/com/yr/warehouse/admin/driver/bo/DriverIntervalRouteAccountRecordDetailCreateBo.java

@@ -0,0 +1,27 @@
+package com.yr.warehouse.admin.driver.bo;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+
+/**
+ * 司机在途核算记录详情创建参数
+ */
+@Data
+public class DriverIntervalRouteAccountRecordDetailCreateBo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 商品id
+     */
+    private Integer goodsId;
+
+    /**
+     * 库存数
+     */
+    private Long stockNum;
+
+}

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

@@ -0,0 +1,16 @@
+package com.yr.warehouse.admin.driver.face;
+
+import java.util.List;
+
+/**
+ * 区间货损详情查询Face
+ */
+public interface DriverIntervalCargoDamageDetailSearchFace {
+
+    Long getGoodsLossMonthlyMainId();
+
+    String getAreaStaffName();
+
+    void setAreaStaffIds(List<Long> areaStaffIds);
+
+}

+ 12 - 0
warehouse-admin-data/src/main/java/com/yr/warehouse/admin/driver/mapper/DriverGoodsLossIntervalDetailMapper.java

@@ -1,7 +1,11 @@
 package com.yr.warehouse.admin.driver.mapper;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.yr.warehouse.admin.driver.bo.DriverIntervalCargoDamageDetailPageBo;
 import com.yr.warehouse.admin.driver.data.DriverGoodsLossIntervalDetail;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.yr.warehouse.admin.driver.vo.DriverIntervalCargoDamageDetailVo;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * <p>
@@ -13,4 +17,12 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  */
 public interface DriverGoodsLossIntervalDetailMapper extends BaseMapper<DriverGoodsLossIntervalDetail> {
 
+    /**
+     * 区间生成统计记录详情分页查询
+     *
+     * @param page 分页参数
+     * @param bo 查询参数
+     * @return 列表
+     */
+    Page<DriverIntervalCargoDamageDetailVo> searchForPage(@Param("page") Page<DriverIntervalCargoDamageDetailVo> page, @Param("bo") DriverIntervalCargoDamageDetailPageBo bo);
 }

+ 22 - 1
warehouse-admin-data/src/main/java/com/yr/warehouse/admin/driver/mapper/DriverGoodsLossIntervalMainMapper.java

@@ -1,7 +1,14 @@
 package com.yr.warehouse.admin.driver.mapper;
 
-import com.yr.warehouse.admin.driver.data.DriverGoodsLossIntervalMain;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.yr.warehouse.admin.driver.bo.DriverIntervalCargoDamagePageBo;
+import com.yr.warehouse.admin.driver.data.DriverGoodsLossIntervalMain;
+import com.yr.warehouse.admin.driver.vo.DriverIntervalCargoDamageVo;
+import org.apache.ibatis.annotations.Param;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
 
 /**
  * <p>
@@ -13,4 +20,18 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  */
 public interface DriverGoodsLossIntervalMainMapper extends BaseMapper<DriverGoodsLossIntervalMain> {
 
+    /**
+     * 查询运营商对应的区间货损最后统计时间
+     * @param operatorId
+     * @return
+     */
+    LocalDateTime searchLastTotalTime(@Param("operatorId") Long operatorId);
+
+    /**
+     * 分页查询区间生成统计记录
+     * @param page
+     * @param bo
+     * @return
+     */
+    Page<DriverIntervalCargoDamageVo> searchForPage(@Param("page") Page<DriverIntervalCargoDamageVo> page, @Param("bo") DriverIntervalCargoDamagePageBo bo);
 }

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

@@ -1,7 +1,10 @@
 package com.yr.warehouse.admin.driver.mapper;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.yr.warehouse.admin.driver.bo.DriverDailyCargoDamagePageBo;
 import com.yr.warehouse.admin.driver.data.DriverGoodsLossRecord;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.yr.warehouse.admin.driver.vo.DriverGoodsLossRecordVo;
 import org.apache.ibatis.annotations.Param;
 
 import java.time.LocalDate;
@@ -29,4 +32,12 @@ public interface DriverGoodsLossRecordMapper extends BaseMapper<DriverGoodsLossR
      * @return 司机货损记录
      */
     List<DriverGoodsLossRecord> searchByStatDate(@Param("statDate") LocalDate statDate);
+
+    /**
+     * 分页查询司机货损记录
+     * @param page 分页参数
+     * @param bo 查询参数
+     * @return 司机货损记录
+     */
+    Page<DriverGoodsLossRecordVo> searchForPage(@Param("page") Page<DriverGoodsLossRecordVo> page, @Param("bo") DriverDailyCargoDamagePageBo bo);
 }

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

@@ -1,7 +1,9 @@
 package com.yr.warehouse.admin.driver.mapper;
 
+import com.yr.warehouse.admin.driver.bo.DriverIntervalRouteAccountRecordCreateBo;
 import com.yr.warehouse.admin.driver.data.DriverOnRouteAccountRecordDetail;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * <p>
@@ -13,4 +15,9 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  */
 public interface DriverOnRouteAccountRecordDetailMapper extends BaseMapper<DriverOnRouteAccountRecordDetail> {
 
+    /**
+     * 添加司机在途核算记录子表
+     * @param bo 添加司机在途核算记录子表参数
+     */
+    void create(@Param("bo") DriverIntervalRouteAccountRecordCreateBo bo);
 }

+ 16 - 0
warehouse-admin-data/src/main/java/com/yr/warehouse/admin/driver/mapper/DriverOnRouteAccountRecordMainMapper.java

@@ -1,7 +1,10 @@
 package com.yr.warehouse.admin.driver.mapper;
 
+import com.yr.warehouse.admin.driver.bo.DriverIntervalRouteAccountRecordCancelBo;
+import com.yr.warehouse.admin.driver.bo.DriverIntervalRouteAccountRecordCreateBo;
 import com.yr.warehouse.admin.driver.data.DriverOnRouteAccountRecordMain;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Param;
 
 /**
  * <p>
@@ -13,4 +16,17 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
  */
 public interface DriverOnRouteAccountRecordMainMapper extends BaseMapper<DriverOnRouteAccountRecordMain> {
 
+    /**
+     * 添加司机在途核算记录
+     *
+     * @param bo 创建参数
+     */
+    void create(@Param("bo") DriverIntervalRouteAccountRecordCreateBo bo);
+
+    /**
+     * 取消司机在途核算记录
+     *
+     * @param bo 取消参数
+     */
+    int cancel(@Param("bo") DriverIntervalRouteAccountRecordCancelBo bo);
 }

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

@@ -0,0 +1,29 @@
+package com.yr.warehouse.admin.driver.menu;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * 司机在途核算记录状态枚举
+ */
+@AllArgsConstructor
+@Getter
+public enum DriverOnRouteAccountRecordStatusEnum {
+    UN_VERIFIED("未核算"),
+    VERIFIED("已核算"),
+    CANCEL("已取消");
+
+    private final String desc;
+
+    /**
+     * 是否可取消
+     * 仅处于未核算状态的记录可取消
+     *
+     * @param status 状态
+     * @return 是否可取消
+     */
+    public static boolean isCancelable(String status) {
+        return UN_VERIFIED.name().equals(status);
+    }
+
+}

+ 123 - 0
warehouse-admin-data/src/main/java/com/yr/warehouse/admin/driver/vo/DriverGoodsLossRecordVo.java

@@ -0,0 +1,123 @@
+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;
+
+/**
+ * 货损记录vo
+ */
+@Data
+public class DriverGoodsLossRecordVo implements AreaStaffIdFace, Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 运营商id
+     */
+    private Long operatorId;
+
+    /**
+     * 运营商id链
+     */
+    private String operatorChain;
+
+    /**
+     * 运营商名称
+     */
+    private String operatorName;
+
+    /**
+     * 运营商名称链
+     */
+    private String operatorChainName;
+
+    /**
+     * 区域员工id
+     */
+    private Long areaStaffId;
+
+    /**
+     * 区域员工名称
+     */
+    private String areaStaffName;
+
+    /**
+     * 昨日在途数量
+     */
+    private Long yesterdayOnRouteNum;
+
+    /**
+     * 今日拣货单开单数
+     */
+    private Long pickingOrderCreateNum;
+
+    /**
+     * 今日整件单开单数
+     */
+    private Long wholeOrderCreateNum;
+
+    /**
+     * 今日取消总数 (未出库) - 页面展示这个*
+     */
+    private Long unshippedCancelNum;
+
+    /**
+     * 今日取消总数 (已出库) - 页面不展示这个*
+     */
+    private Long shippedCancelNum;
+
+    /**
+     * 今日补货总量
+     */
+    private Long replenishNum;
+
+    /**
+     * 今日回仓总量
+     */
+    private Long returnWarehouseNum;
+
+    /**
+     * 今日在途库存数
+     */
+    private Long currentOnRouteNum;
+
+    /**
+     * 核算数
+     */
+    private Long verifiedNum;
+
+    /**
+     * 是否核算 YES 是 NO 否
+     */
+    private String useVerified;
+
+    /**
+     * 昨日设备库存
+     */
+    private Long equipmentStockNum;
+
+    /**
+     * 今日补货总数
+     */
+    private Long equipmentReplenishNum;
+
+    /**
+     * 今日销量
+     */
+    private Long equipmentSalesNum;
+
+    /**
+     * 今日设备库存数
+     */
+    private Long theoreticalEquipmentStockNum;
+
+    /**
+     * 今日设备实库存数
+     */
+    private Long actualEquipmentStockNum;
+
+}

+ 113 - 0
warehouse-admin-data/src/main/java/com/yr/warehouse/admin/driver/vo/DriverIntervalCargoDamageDetailVo.java

@@ -0,0 +1,113 @@
+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;
+
+/**
+ * 区间生成统计记录详情
+ */
+@Data
+public class DriverIntervalCargoDamageDetailVo implements AreaStaffIdFace, Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 司机id
+     */
+    private Long areaStaffId;
+
+    /**
+     * 司机名称
+     */
+    private String areaStaffName;
+
+    /**
+     * 上次剩余在途库存数
+     */
+    private Long lastRemainingOnRouteStock;
+
+    /**
+     * 本次拣货开单数
+     */
+    private Long pickingOrderCreateNum;
+
+    /**
+     * 本次整件开单数
+     */
+    private Long wholeOrderCreateNum;
+
+    /**
+     * 本次已取消数(未出库) - 页面展示这个*
+     */
+    private Long unshippedCancelNum;
+
+    /**
+     * 本次已取消数(已出库) - 页面不展示这个*
+     */
+    private Long shippedCancelNum;
+
+    /**
+     * 本次补货总数
+     */
+    private Long replenishNum;
+
+    /**
+     * 本次回仓总数
+     */
+    private Long returnWarehouseNum;
+
+    /**
+     * 本次未补货数
+     */
+    private Long remainingUnReplenishedNum;
+
+    /**
+     * 整件核实数
+     */
+    private Long wholeVerifyNum;
+
+    /**
+     * 司机盈亏数
+     */
+    private Long profitLossNum;
+
+    /**
+     * 设备-上次剩余设备库存
+     */
+    private Long lastRemainingEquipmentStock;
+
+    /**
+     * 设备-本次总补货数
+     */
+    private Long totalReplenishNum;
+
+    /**
+     * 设备-本次设备销售数
+     */
+    private Long equipmentSalesNum;
+
+    /**
+     * 设备-理论设备库存
+     */
+    private Long theoreticalStockNum;
+
+    /**
+     * 设备-实际设备库存
+     */
+    private Long actualStockNum;
+
+    /**
+     * 设备-设备盈亏数
+     */
+    private Long equipmentProfitLossNum;
+
+    /**
+     * 总盈亏数
+     */
+    private Long totalProfitLoss;
+
+}

+ 107 - 0
warehouse-admin-data/src/main/java/com/yr/warehouse/admin/driver/vo/DriverIntervalCargoDamageVo.java

@@ -0,0 +1,107 @@
+package com.yr.warehouse.admin.driver.vo;
+
+import lombok.Data;
+
+import java.io.Serial;
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * 司机区间货损
+ */
+@Data
+public class DriverIntervalCargoDamageVo implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 货损区间统计id
+     */
+    private Long id;
+
+    /**
+     * 运营商id
+     */
+    private Long operatorId;
+
+    /**
+     * 运营商id链
+     */
+    private String operatorChain;
+
+    /**
+     * 运营商名称
+     */
+    private String operatorName;
+
+    /**
+     * 运营商名称链
+     */
+    private String operatorChainName;
+
+    /**
+     * 区间开始时间
+     */
+    private LocalDateTime intervalStartTime;
+
+    /**
+     * 区间结束时间
+     */
+    private LocalDateTime intervalEndTime;
+
+    /**
+     * 本次拣货开单总数
+     */
+    private Long pickingOrderCreateNum;
+
+    /**
+     * 本次整件开单总数
+     */
+    private Long wholeOrderCreateNum;
+
+    /**
+     * 本次补货总数
+     */
+    private Long replenishNum;
+
+    /**
+     * 本次回仓总数
+     */
+    private Long returnWarehouseNum;
+
+    /**
+     * 在途库存数
+     */
+    private Long onRouteInventoryNum;
+
+    /**
+     * 本次已取消数(未出库) - 页面展示这个*
+     */
+    private Long unshippedCancelNum;
+
+    /**
+     * 本次已取消数(已出库) - 页面不展示这个*
+     */
+    private Long shippedCancelNum;
+
+    /**
+     * 本次未补货数
+     */
+    private Long unReplenishedNum;
+
+    /**
+     * 司机盈亏数
+     */
+    private Long driverProfitLossNum;
+
+    /**
+     * 设备盈亏数
+     */
+    private Long equipmentProfitLossNum;
+
+    /**
+     * 总盈亏数
+     */
+    private Long totalProfitLossNum;
+}

+ 33 - 0
warehouse-admin-data/src/main/resources/mapper/driver/DriverGoodsLossIntervalDetailMapper.xml

@@ -24,5 +24,38 @@
     <sql id="Base_Column_List">
         id, goodsLossMonthlyMainId, areaStaffId, lastRemainingOnRouteStock, pickingOrderCreateNum, wholeOrderCreateNum, unshippedCancelNum, shippedCancelNum, replenishNum, returnWarehouseNum, remainingUnReplenishedNum, wholeVerifyNum, profitLossNum, createTime
     </sql>
+    <select id="searchForPage" resultType="com.yr.warehouse.admin.driver.vo.DriverIntervalCargoDamageDetailVo">
+        select
+        dglid.areaStaffId as areaStaffId,
+        dglid.lastRemainingOnRouteStock as lastRemainingOnRouteStock,
+        dglid.pickingOrderCreateNum as pickingOrderCreateNum,
+        dglid.wholeOrderCreateNum as wholeOrderCreateNum,
+        dglid.unshippedCancelNum as unshippedCancelNum,
+        dglid.shippedCancelNum as shippedCancelNum,
+        dglid.replenishNum as replenishNum,
+        dglid.returnWarehouseNum as returnWarehouseNum,
+        dglid.remainingUnReplenishedNum as remainingUnReplenishedNum,
+        dglid.wholeVerifyNum as wholeVerifyNum,
+        dglid.profitLossNum as profitLossNum,
+        elid.lastRemainingEquipmentStock as lastRemainingEquipmentStock,
+        elid.totalReplenishNum as totalReplenishNum,
+        elid.equipmentSalesNum as equipmentSalesNum,
+        elid.theoreticalStockNum as theoreticalStockNum,
+        elid.actualStockNum as actualStockNum,
+        elid.profitLossNum as equipmentProfitLossNum,
+        dglid.profitLossNum + elid.profitLossNum as totalProfitLoss
+        from yr_driver_goods_loss_interval_detail as dglid
+        left join yr_equipment_loss_interval_detail as elid
+        on dglid.goodsLossMonthlyMainId = elid.goodsLossMonthlyMainId and
+        dglid.areaStaffId = elid.areaStaffId
+        where dglid.goodsLossMonthlyMainId = #{bo.goodsLossMonthlyMainId}
+        <if test="bo.areaStaffIds != null and bo.areaStaffIds.size() > 0">
+            and dglid.areaStaffId in
+            <foreach item="item" collection="bo.areaStaffIds" separator="," open="(" close=")" index="">
+                #{item}
+            </foreach>
+        </if>
+        order by dglid.areaStaffId
+    </select>
 
 </mapper>

+ 44 - 0
warehouse-admin-data/src/main/resources/mapper/driver/DriverGoodsLossIntervalMainMapper.xml

@@ -34,5 +34,49 @@
     <sql id="Base_Column_List">
         id, intervalStartTime, intervalEndTime, operatorId, operatorChain, stockTakingType, pickingOrderCreateNum, wholeOrderCreateNum, replenishNum, returnWarehouseNum, onRouteInventoryNum, unshippedCancelNum, shippedCancelNum, unReplenishedNum, driverProfitLossNum, equipmentProfitLossNum, totalProfitLossNum, createTime, createUid, createName, modifyTime, modifyUid, modifyName, isDelete
     </sql>
+    <select id="searchLastTotalTime" resultType="java.time.LocalDateTime" parameterType="java.lang.Long">
+        select MAX(intervalEndTime) from yr_driver_goods_loss_interval_main where operatorId = #{operatorId} and stockTakingType = 'REGULAR'
+    </select>
+    <select id="searchForPage" resultType="com.yr.warehouse.admin.driver.vo.DriverIntervalCargoDamageVo">
+        select
+        dglim.id as id,
+        dglim.operatorId as operatorId,
+        dglim.operatorChain as operatorChain,
+        dglim.intervalStartTime as intervalStartTime,
+        dglim.intervalEndTime as intervalEndTime,
+        dglim.pickingOrderCreateNum as pickingOrderCreateNum,
+        dglim.wholeOrderCreateNum as wholeOrderCreateNum,
+        dglim.replenishNum as replenishNum,
+        dglim.returnWarehouseNum as returnWarehouseNum,
+        dglim.onRouteInventoryNum as onRouteInventoryNum,
+        dglim.unshippedCancelNum as unshippedCancelNum,
+        dglim.shippedCancelNum as shippedCancelNum,
+        dglim.unReplenishedNum as unReplenishedNum,
+        dglim.driverProfitLossNum as driverProfitLossNum,
+        dglim.equipmentProfitLossNum as equipmentProfitLossNum,
+        dglim.totalProfitLossNum as totalProfitLossNum
+        from yr_driver_goods_loss_interval_main as dglim
+        <where>
+            <if test="bo.operatorId != null and bo.operatorId > 0">
+                and dglim.operatorId = #{bo.operatorId}
+            </if>
+            <if test="bo.areaStaffIds != null and bo.areaStaffIds.size > 0">
+                and dglim.id in (
+                select goodsLossMonthlyMainId from yr_driver_goods_loss_interval_detail as dglid where dglid.areaStaffId in
+                <foreach collection="bo.areaStaffIds" item="areaStaffId" open="(" separator="," close=")">
+                    #{areaStaffId}
+                </foreach>
+                group by dglid.goodsLossMonthlyMainId
+                )
+            </if>
+            <if test="bo.createBeginTime != null">
+                and dglim.createTime >= #{bo.intervalStartTime}
+            </if>
+            <if test="bo.createEndTime != null">
+                and #{bo.intervalEndTime} >= dglim.createTime
+            </if>
+        </where>
+
+    </select>
 
 </mapper>

+ 39 - 2
warehouse-admin-data/src/main/resources/mapper/driver/DriverGoodsLossRecordMapper.xml

@@ -17,8 +17,8 @@
         <result column="replenishNum" property="replenishNum"/>
         <result column="returnWarehouseNum" property="returnWarehouseNum"/>
         <result column="currentOnRouteNum" property="currentOnRouteNum"/>
-        <result column="verifiedNum" property="verifiedNum" />
-        <result column="useVerified" property="useVerified" />
+        <result column="verifiedNum" property="verifiedNum"/>
+        <result column="useVerified" property="useVerified"/>
         <result column="createTime" property="createTime"/>
     </resultMap>
 
@@ -49,5 +49,42 @@
         from yr_driver_goods_loss_record
         where statDate = #{statDate}
     </select>
+    <select id="searchForPage" resultType="com.yr.warehouse.admin.driver.vo.DriverGoodsLossRecordVo">
+        select dglr.operatorId as operatorId,
+        dglr.operatorChain as operatorChain,
+        dglr.areaStaffId as areaStaffId,
+        dglr.pickingOrderCreateNum as pickingOrderCreateNum,
+        dglr.wholeOrderCreateNum as wholeOrderCreateNum,
+        dglr.unshippedCancelNum as unshippedCancelNum,
+        dglr.shippedCancelNum as shippedCancelNum,
+        dglr.replenishNum as replenishNum,
+        dglr.returnWarehouseNum as returnWarehouseNum,
+        dglr.currentOnRouteNum as currentOnRouteNum,
+        dglr.verifiedNum as verifiedNum,
+        dglr.useVerified as useVerified,
+        delr.equipmentStockNum as equipmentStockNum,
+        delr.equipmentReplenishNum as equipmentReplenishNum,
+        delr.equipmentSalesNum as equipmentSalesNum,
+        delr.theoreticalEquipmentStockNum as theoreticalEquipmentStockNum,
+        delr.actualEquipmentStockNum as actualEquipmentStockNum
+        from yr_driver_goods_loss_record as dglr
+        left join yr_driver_equipment_loss_record as delr on dglr.statDate = delr.statDate and dglr.areaStaffId =
+        delr.areaStaffId
+        <where>
+            <if test="bo.operatorId != null and bo.operatorId > 0">
+                dglr.operatorId = #{bo.operatorId}
+            </if>
+            <if test="bo.areaStaffIds != null and bo.areaStaffIds.size > 0">
+                <foreach item="item" collection="bo.areaStaffIds" open="and dglr.areaStaffId in (" separator=","
+                         close=")" index="index">
+                    #{item}
+                </foreach>
+            </if>
+            <if test="bo.statDate != null">
+                and dglr.statDate = #{bo.statDate}
+            </if>
+        </where>
+        order by dglr.operatorId, dglr.areaStaffId desc
+    </select>
 
 </mapper>

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

@@ -20,5 +20,14 @@
     <sql id="Base_Column_List">
         id, routeAccountRecordMainId, goodsId, inventory, createTime, createUid, createName, modifyTime, modifyUid, modifyName
     </sql>
+    <insert id="create"
+            parameterType="com.yr.warehouse.admin.driver.bo.DriverIntervalRouteAccountRecordCreateBo">
+        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>
 
 </mapper>

+ 10 - 0
warehouse-admin-data/src/main/resources/mapper/driver/DriverOnRouteAccountRecordMainMapper.xml

@@ -26,5 +26,15 @@
     <sql id="Base_Column_List">
         id, operatorId, operatorChain, areaStaffId, warehouseId, statDate, goodsLossMonthlyMainId, statTotalNum, status, createTime, createUid, createName, modifyTime, modifyUid, modifyName, isDelete
     </sql>
+    <insert id="create"
+            parameterType="com.yr.warehouse.admin.driver.bo.DriverIntervalRouteAccountRecordCreateBo" keyProperty="id" useGeneratedKeys="true">
+        insert into yr_driver_on_route_account_record_main
+        (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>
+    <delete id="cancel"
+            parameterType="com.yr.warehouse.admin.driver.bo.DriverIntervalRouteAccountRecordCancelBo">
+        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>
 
 </mapper>

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

@@ -0,0 +1,17 @@
+package com.yr.warehouse.admin.service.areastaff;
+
+import com.supplychain.api.response.areastaff.AreaStaffResponse;
+import com.yr.warehouse.admin.areastaff.fase.AreaStaffIdFace;
+import org.apache.poi.ss.formula.functions.T;
+
+import java.util.List;
+import java.util.Map;
+
+/**
+ * 区域员工服务
+ */
+public interface AreaStaffService {
+
+
+    Map<Long, AreaStaffResponse> searchAreaStaffMap(List<? extends AreaStaffIdFace> areaStaffIdFaces);
+}

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

@@ -0,0 +1,29 @@
+package com.yr.warehouse.admin.service.areastaff.impl;
+
+import com.supplychain.api.response.areastaff.AreaStaffResponse;
+import com.yr.warehouse.admin.component.areastaff.AreaStaffComponent;
+import com.yr.warehouse.admin.service.areastaff.AreaStaffService;
+import com.yr.warehouse.admin.areastaff.fase.AreaStaffIdFace;
+import jakarta.annotation.Resource;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * 区域员工服务实现类
+ */
+@Service
+public class AreaStaffServiceImpl implements AreaStaffService {
+    @Resource
+    private AreaStaffComponent areaStaffComponent;
+
+    @Override
+    public Map<Long, AreaStaffResponse> searchAreaStaffMap(List<? extends AreaStaffIdFace> areaStaffIdFaces) {
+        List<Long> areaStaffIds = areaStaffIdFaces.stream().map(AreaStaffIdFace::getAreaStaffId).collect(Collectors.toList());
+        List<AreaStaffResponse> areaStaffResponses = areaStaffComponent.searchByStaffIds(areaStaffIds);
+        return areaStaffResponses.stream().collect(Collectors.toMap(AreaStaffResponse::getId, areaStaffResponse -> areaStaffResponse));
+    }
+
+}

+ 7 - 0
warehouse-admin-server/src/main/java/com/yr/warehouse/admin/service/driver/DriverGoodsLossIntervalDetailService.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.DriverIntervalCargoDamageDetailPageBo;
 import com.yr.warehouse.admin.driver.data.DriverGoodsLossIntervalDetail;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.yr.warehouse.admin.driver.vo.DriverIntervalCargoDamageDetailVo;
 
 /**
  * <p>
@@ -13,4 +16,8 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface DriverGoodsLossIntervalDetailService extends IService<DriverGoodsLossIntervalDetail> {
 
+    /**
+     * 分页查询司机货损区间统计明细表
+     */
+    Page<DriverIntervalCargoDamageDetailVo> searchForPage(DriverIntervalCargoDamageDetailPageBo bo);
 }

+ 16 - 0
warehouse-admin-server/src/main/java/com/yr/warehouse/admin/service/driver/DriverGoodsLossIntervalMainService.java

@@ -1,8 +1,13 @@
 package com.yr.warehouse.admin.service.driver;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.yr.warehouse.admin.driver.vo.DriverIntervalCargoDamageVo;
+import com.yr.warehouse.admin.driver.bo.DriverIntervalCargoDamagePageBo;
 import com.yr.warehouse.admin.driver.data.DriverGoodsLossIntervalMain;
 import com.baomidou.mybatisplus.extension.service.IService;
 
+import java.time.LocalDateTime;
+
 /**
  * <p>
  * 司机货损区间统计主表 服务类
@@ -13,4 +18,15 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface DriverGoodsLossIntervalMainService extends IService<DriverGoodsLossIntervalMain> {
 
+    /**
+     * 查询运营商对应的区间货损最后统计时间
+     * @param operatorId
+     */
+    LocalDateTime searchLastTotalTime(Long operatorId);
+
+    /**
+     * 生成区间统计记录
+     * @param bo
+     */
+    Page<DriverIntervalCargoDamageVo> searchForPage(DriverIntervalCargoDamagePageBo bo);
 }

+ 26 - 0
warehouse-admin-server/src/main/java/com/yr/warehouse/admin/service/driver/DriverGoodsLossRecordService.java

@@ -1,7 +1,13 @@
 package com.yr.warehouse.admin.service.driver;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.yr.warehouse.admin.driver.bo.DriverDailyCargoDamageExportBo;
+import com.yr.warehouse.admin.driver.bo.DriverDailyCargoDamagePageBo;
 import com.yr.warehouse.admin.driver.data.DriverGoodsLossRecord;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.yr.warehouse.admin.driver.vo.DriverGoodsLossRecordVo;
+
+import java.util.List;
 
 /**
  * <p>
@@ -13,4 +19,24 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface DriverGoodsLossRecordService extends IService<DriverGoodsLossRecord> {
 
+    /**
+     * 搜索货损记录
+     * @param bo
+     * @return
+     */
+    Page<DriverGoodsLossRecordVo> searchForPage(DriverDailyCargoDamagePageBo bo);
+
+    /**
+     * 导出货损记录
+     * @param bo
+     * @return
+     */
+    List<DriverGoodsLossRecordVo> list(DriverDailyCargoDamageExportBo bo);
+
+    /**
+     * 写入运营商数据信息
+     * @param vos
+     * @return
+     */
+    List<DriverGoodsLossRecordVo> writeOperatorData(List<DriverGoodsLossRecordVo> vos);
 }

+ 28 - 0
warehouse-admin-server/src/main/java/com/yr/warehouse/admin/service/driver/DriverOnRouteAccountRecordService.java

@@ -0,0 +1,28 @@
+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.driver.bo.DriverIntervalRouteAccountRecordCreateBo;
+
+/**
+ * <p>
+ * 司机在途核算记录 服务类
+ * </p>
+ *
+ * @author 
+ * @since 2025-12-03 15:26:37
+ */
+public interface DriverOnRouteAccountRecordService {
+
+    /**
+     * 创建司机在途核算记录
+     * @param bo 创建参数
+     */
+    void create(DriverIntervalRouteAccountRecordCreateBo bo);
+
+    /**
+     * 取消司机在途核算记录
+     * @param bo 取消参数
+     */
+    void cancel(DriverIntervalRouteAccountRecordCancelBo bo);
+}

+ 8 - 0
warehouse-admin-server/src/main/java/com/yr/warehouse/admin/service/driver/impl/DriverGoodsLossIntervalDetailServiceImpl.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.DriverIntervalCargoDamageDetailPageBo;
 import com.yr.warehouse.admin.driver.data.DriverGoodsLossIntervalDetail;
 import com.yr.warehouse.admin.driver.mapper.DriverGoodsLossIntervalDetailMapper;
+import com.yr.warehouse.admin.driver.vo.DriverIntervalCargoDamageDetailVo;
 import com.yr.warehouse.admin.service.driver.DriverGoodsLossIntervalDetailService;
 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 DriverGoodsLossIntervalDetailServiceImpl extends ServiceImpl<DriverGoodsLossIntervalDetailMapper, DriverGoodsLossIntervalDetail> implements DriverGoodsLossIntervalDetailService {
 
+    @Override
+    public Page<DriverIntervalCargoDamageDetailVo> searchForPage(DriverIntervalCargoDamageDetailPageBo bo) {
+        Page<DriverIntervalCargoDamageDetailVo> page = Page.of(bo.getPageNum(), bo.getPageSize());
+        return baseMapper.searchForPage(page, bo);
+    }
 }

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

@@ -1,11 +1,16 @@
 package com.yr.warehouse.admin.service.driver.impl;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.yr.warehouse.admin.driver.vo.DriverIntervalCargoDamageVo;
+import com.yr.warehouse.admin.driver.bo.DriverIntervalCargoDamagePageBo;
 import com.yr.warehouse.admin.driver.data.DriverGoodsLossIntervalMain;
 import com.yr.warehouse.admin.driver.mapper.DriverGoodsLossIntervalMainMapper;
 import com.yr.warehouse.admin.service.driver.DriverGoodsLossIntervalMainService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.stereotype.Service;
 
+import java.time.LocalDateTime;
+
 /**
  * <p>
  * 司机货损区间统计主表 服务实现类
@@ -17,4 +22,20 @@ import org.springframework.stereotype.Service;
 @Service
 public class DriverGoodsLossIntervalMainServiceImpl extends ServiceImpl<DriverGoodsLossIntervalMainMapper, DriverGoodsLossIntervalMain> implements DriverGoodsLossIntervalMainService {
 
+    @Override
+    public LocalDateTime searchLastTotalTime(Long operatorId) {
+        LocalDateTime intervalEndTime = baseMapper.searchLastTotalTime(operatorId);
+
+        // 如果 intervalEndTime 为 null,则返回上月1号 00:00:00
+        if (intervalEndTime == null) {
+            intervalEndTime = LocalDateTime.now().minusMonths(1).withDayOfMonth(1);
+        }
+        return intervalEndTime;
+    }
+
+    @Override
+    public Page<DriverIntervalCargoDamageVo> searchForPage(DriverIntervalCargoDamagePageBo bo) {
+        Page<DriverIntervalCargoDamageVo> page = Page.of(bo.getPageNum(), bo.getPageSize());
+        return baseMapper.searchForPage(page, bo);
+    }
 }

+ 78 - 2
warehouse-admin-server/src/main/java/com/yr/warehouse/admin/service/driver/impl/DriverGoodsLossRecordServiceImpl.java

@@ -1,20 +1,96 @@
 package com.yr.warehouse.admin.service.driver.impl;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.supplychain.api.response.areastaff.AreaStaffResponse;
+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.DriverDailyCargoDamageExportBo;
+import com.yr.warehouse.admin.driver.bo.DriverDailyCargoDamagePageBo;
 import com.yr.warehouse.admin.driver.data.DriverGoodsLossRecord;
 import com.yr.warehouse.admin.driver.mapper.DriverGoodsLossRecordMapper;
+import com.yr.warehouse.admin.driver.vo.DriverGoodsLossRecordVo;
+import com.yr.warehouse.admin.service.areastaff.AreaStaffService;
 import com.yr.warehouse.admin.service.driver.DriverGoodsLossRecordService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.yr.warehouse.admin.service.driver.mapstruct.DriverGoodsLossRecordMapStruct;
+import jakarta.annotation.Resource;
 import org.springframework.stereotype.Service;
 
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
 /**
  * <p>
  * 司机货损记录表 服务实现类
  * </p>
  *
- * @author 
+ * @author
  * @since 2025-12-03 15:26:37
  */
 @Service
 public class DriverGoodsLossRecordServiceImpl extends ServiceImpl<DriverGoodsLossRecordMapper, DriverGoodsLossRecord> implements DriverGoodsLossRecordService {
 
+    @Resource
+    private AreaStaffComponent areaStaffComponent;
+
+    @Resource
+    private OperatorComponent operatorComponent;
+
+    @Resource
+    private AreaStaffService areaStaffService;
+
+    @Override
+    public Page<DriverGoodsLossRecordVo> searchForPage(DriverDailyCargoDamagePageBo bo) {
+        Page<DriverGoodsLossRecordVo> page = Page.of(bo.getPageNum(), bo.getPageSize());
+        return baseMapper.searchForPage(page, bo);
+    }
+
+    @Override
+    public List<DriverGoodsLossRecordVo> list(DriverDailyCargoDamageExportBo bo) {
+        DriverDailyCargoDamagePageBo pageBo = DriverGoodsLossRecordMapStruct.INSTANCE.exportBoToPageBo(bo);
+
+        List<DriverGoodsLossRecordVo> all = new ArrayList<>();
+        pageBo.setPageNum(1);
+        pageBo.setPageSize(1000);
+        while (true) {
+            Page<DriverGoodsLossRecordVo> page = searchForPage(pageBo);
+
+            List<DriverGoodsLossRecordVo> records = page.getRecords();
+            if (null == records || records.isEmpty()) {
+                break;
+            }
+            all.addAll(records);
+            pageBo.setPageNum(pageBo.getPageNum() + 1);
+        }
+        return all;
+    }
+
+    @Override
+    public List<DriverGoodsLossRecordVo> writeOperatorData(List<DriverGoodsLossRecordVo> vos) {
+        if (null == vos || vos.isEmpty()) {
+            return null;
+        }
+        List<Long> operatorIds = vos.stream().map(DriverGoodsLossRecordVo::getOperatorId).collect(Collectors.toList());
+        Map<Long, OrgOperatorVo> operatorMap = operatorComponent.queryOperatorMapByIdList(operatorIds);
+
+        Map<Long, AreaStaffResponse> areaStaffResponseMap = areaStaffService.searchAreaStaffMap(vos);
+
+        vos.forEach(v -> {
+            AreaStaffResponse areaStaffResponse = areaStaffResponseMap.get(v.getAreaStaffId());
+            if (null != areaStaffResponse) {
+                v.setAreaStaffName(areaStaffResponse.getEmployeeName());
+            }
+            OrgOperatorVo operatorVo = operatorMap.get(v.getOperatorId());
+            if (null != operatorVo) {
+                v.setOperatorName(operatorVo.getOperatorName());
+                v.setOperatorChainName(operatorVo.getOperatorChainName());
+            }
+        });
+        return vos;
+    }
+
+
 }

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

@@ -0,0 +1,75 @@
+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.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.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>
+ * 司机在途核算记录主表 服务实现类
+ * </p>
+ *
+ * @author 
+ * @since 2025-12-03 15:26:37
+ */
+@Service
+public class DriverOnRouteAccountRecordServiceImpl implements DriverOnRouteAccountRecordService {
+
+    @Resource
+    private DriverOnRouteAccountRecordMainMapper driverOnRouteAccountRecordMainMapper;
+
+    @Resource
+    private DriverOnRouteAccountRecordDetailMapper driverOnRouteAccountRecordDetailMapper;
+
+    @Resource
+    private TransactionTemplate transactionTemplate;
+
+    @Override
+    public void create(DriverIntervalRouteAccountRecordCreateBo 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.create(bo);
+            if (statTotalNum != 0L) {
+                driverOnRouteAccountRecordDetailMapper.create(bo);
+            }
+            return null;
+        });
+    }
+
+    @Override
+    public void cancel(DriverIntervalRouteAccountRecordCancelBo bo) {
+        /*DriverOnRouteAccountRecordMain driverOnRouteAccountRecordMain = driverOnRouteAccountRecordMainMapper.selectById(bo.getId());
+        if (null == driverOnRouteAccountRecordMain || DeleteEnum.isDelete(driverOnRouteAccountRecordMain.getIsDelete())) {
+            throw new MessageException("司机途核算记录不存在");
+        }
+        if (!DriverOnRouteAccountRecordStatusEnum.isCancelable( driverOnRouteAccountRecordMain.getStatus())){
+            throw new MessageException("当前状态无法取消");
+        }*/
+        int update = driverOnRouteAccountRecordMainMapper.cancel(bo);
+        if (update <= 0) {
+            throw new MessageException("取消失败, 司机在途核算记录不存在或当前状态不可取消");
+        }
+    }
+}

+ 14 - 0
warehouse-admin-server/src/main/java/com/yr/warehouse/admin/service/driver/mapstruct/DriverGoodsLossRecordMapStruct.java

@@ -0,0 +1,14 @@
+package com.yr.warehouse.admin.service.driver.mapstruct;
+
+import com.yr.warehouse.admin.driver.bo.DriverDailyCargoDamageExportBo;
+import com.yr.warehouse.admin.driver.bo.DriverDailyCargoDamagePageBo;
+import org.mapstruct.Mapper;
+import org.mapstruct.factory.Mappers;
+
+@Mapper
+public interface DriverGoodsLossRecordMapStruct {
+
+    DriverGoodsLossRecordMapStruct INSTANCE = Mappers.getMapper(DriverGoodsLossRecordMapStruct.class);
+
+    DriverDailyCargoDamagePageBo exportBoToPageBo(DriverDailyCargoDamageExportBo bo);
+}

+ 11 - 0
warehouse-admin-server/src/main/java/com/yr/warehouse/admin/service/driver/mapstruct/DriverOnRouteAccountRecordMapStruct.java

@@ -0,0 +1,11 @@
+package com.yr.warehouse.admin.service.driver.mapstruct;
+
+import org.mapstruct.Mapper;
+import org.mapstruct.factory.Mappers;
+
+@Mapper
+public interface DriverOnRouteAccountRecordMapStruct {
+
+    DriverOnRouteAccountRecordMapStruct INSTANCE = Mappers.getMapper(DriverOnRouteAccountRecordMapStruct.class);
+
+}

+ 44 - 2
warehouse-admin-web/src/main/java/com/yr/warehouse/admin/web/driver/controller/DriverDailyCargoDamageController.java

@@ -1,12 +1,19 @@
 package com.yr.warehouse.admin.web.driver.controller;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.supplychain.api.response.areastaff.AreaStaffResponse;
 import com.yr.bluecat.common.entity.response.PageResult;
 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.component.areastaff.AreaStaffComponent;
 import com.yr.warehouse.admin.driver.bo.DriverDailyCargoDamageExportBo;
 import com.yr.warehouse.admin.driver.bo.DriverDailyCargoDamagePageBo;
+import com.yr.warehouse.admin.driver.vo.DriverGoodsLossRecordVo;
 import com.yr.warehouse.admin.service.driver.DriverGoodsLossRecordService;
 import com.yr.warehouse.admin.web.common.BaseController;
+import com.yr.warehouse.admin.web.driver.export.DriverGoodsLossRecordExport;
 import com.yr.warehouse.admin.web.driver.mapstruct.DriverDailyCargoDamageMapStruct;
 import com.yr.warehouse.admin.web.driver.request.DriverDailyCargoDamageExportRequest;
 import com.yr.warehouse.admin.web.driver.request.DriverDailyCargoDamagePageRequest;
@@ -15,6 +22,9 @@ import jakarta.annotation.Resource;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.*;
 
+import java.util.ArrayList;
+import java.util.List;
+
 /**
  * 司机日货损
  */
@@ -24,6 +34,13 @@ public class DriverDailyCargoDamageController extends BaseController {
     @Resource
     private DriverGoodsLossRecordService driverGoodsLossRecordService;
 
+    @Resource
+    private AreaStaffComponent areaStaffComponent;
+
+    @Resource
+    private ExportClient exportClient;
+
+
     /**
      * 分页查询货损记录
      * @param request
@@ -34,7 +51,20 @@ public class DriverDailyCargoDamageController extends BaseController {
     public PageResult<DriverGoodsLossRecordResponse> page(@Validated @RequestBody DriverDailyCargoDamagePageRequest request, AdminUserInfo adminUserInfo) {
         DriverDailyCargoDamagePageBo bo = DriverDailyCargoDamageMapStruct.MAPSTRUCT.pageRequestToBo(request);
         buildUserInfo(bo, adminUserInfo);
-        return null;
+        if (StringUtils.isNotBlank(bo.getAreaStaffName())) {
+            List<AreaStaffResponse> areaStaffResponses = areaStaffComponent.searchByOperatorIdAndAreaStaffName(bo.getOperatorId(), bo.getAreaStaffName());
+            bo.setAreaStaffIds(areaStaffResponses.stream().map(AreaStaffResponse::getId).toList());
+        }
+
+        Page<DriverGoodsLossRecordVo> page = driverGoodsLossRecordService.searchForPage(bo);
+        PageResult<DriverGoodsLossRecordResponse> pageResult = PageResult.newPageResult(request.getPageNum(), request.getPageSize());
+        List<DriverGoodsLossRecordVo> records = driverGoodsLossRecordService.writeOperatorData(page.getRecords());
+        if (null == records) {
+            return pageResult.success(0, new ArrayList<>());
+        }
+        List<DriverGoodsLossRecordResponse> driverGoodsLossRecordResponses = DriverDailyCargoDamageMapStruct.MAPSTRUCT.voListToResponseList(records);
+
+        return pageResult.success(page.getTotal(), driverGoodsLossRecordResponses);
     }
 
     /**
@@ -47,7 +77,19 @@ public class DriverDailyCargoDamageController extends BaseController {
     public Result<String> export(@Validated @RequestBody DriverDailyCargoDamageExportRequest request, AdminUserInfo adminUserInfo) {
         DriverDailyCargoDamageExportBo bo = DriverDailyCargoDamageMapStruct.MAPSTRUCT.exportRequestToBo(request);
         buildUserInfo(bo, adminUserInfo);
-        return null;
+        if (StringUtils.isNotBlank(bo.getAreaStaffName())) {
+            List<AreaStaffResponse> areaStaffResponses = areaStaffComponent.searchByOperatorIdAndAreaStaffName(bo.getOperatorId(), bo.getAreaStaffName());
+            bo.setAreaStaffIds(areaStaffResponses.stream().map(AreaStaffResponse::getId).toList());
+        }
+        List<DriverGoodsLossRecordVo> records = driverGoodsLossRecordService.list(bo);
+        if (null == records || records.isEmpty()) {
+            return Result.fail("没有可导出的数据");
+        }
+        records = driverGoodsLossRecordService.writeOperatorData(records);
+        List<DriverGoodsLossRecordExport> exports = DriverDailyCargoDamageMapStruct.MAPSTRUCT.voListToExportList(records);
+
+        String uri = exportClient.export(exports, "export/driver/daily/cargoDamage", "货损记录" + System.currentTimeMillis());
+        return Result.success(uri);
     }
 
 }

+ 152 - 27
warehouse-admin-web/src/main/java/com/yr/warehouse/admin/web/driver/controller/DriverIntervalCargoDamageController.java

@@ -1,23 +1,43 @@
 package com.yr.warehouse.admin.web.driver.controller;
 
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.supplychain.api.response.areastaff.AreaStaffResponse;
+import com.yr.bluecat.common.entity.exception.MessageException;
 import com.yr.bluecat.common.entity.response.PageResult;
 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.driver.bo.DriverIntervalCargoDamageDetailExportBo;
-import com.yr.warehouse.admin.driver.bo.DriverIntervalCargoDamageDetailPageBo;
-import com.yr.warehouse.admin.driver.bo.DriverIntervalCargoDamageGeneratorBo;
-import com.yr.warehouse.admin.driver.bo.DriverIntervalCargoDamagePageBo;
+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.DriverIntervalCargoDamageDetailSearchFace;
+import com.yr.warehouse.admin.driver.vo.DriverIntervalCargoDamageDetailVo;
+import com.yr.warehouse.admin.driver.vo.DriverIntervalCargoDamageVo;
+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.web.common.BaseController;
+import com.yr.warehouse.admin.web.driver.export.DriverIntervalCargoDamageDetailExport;
 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.DriverIntervalCargoDamageDetailPageResponse;
-import com.yr.warehouse.admin.web.driver.response.DriverIntervalCargoDamagePageResponse;
+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.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.*;
 
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 /**
  * 司机区间货损
@@ -26,87 +46,196 @@ import java.util.List;
 @RequestMapping("/driver/interval/cargoDamage")
 public class DriverIntervalCargoDamageController extends BaseController {
 
+    @Resource
+    private DriverGoodsLossIntervalMainService driverGoodsLossIntervalMainService;
+
+    @Resource
+    private DriverGoodsLossIntervalDetailService driverGoodsLossIntervalDetailService;
+
+    @Resource
+    private DriverOnRouteAccountRecordService driverOnRouteAccountRecordService;
+
+    @Resource
+    private AreaStaffComponent areaStaffComponent;
+
+    @Resource
+    private OperatorComponent operatorComponent;
+
+    @Resource
+    private AreaStaffService areaStaffService;
+
+    @Resource
+    private ExportClient exportClient;
+
     /**
      * 查询运营商对应的区间货损最后统计时间
-     * @return
      */
     @GetMapping("/searchLastTotalTime/{operatorId}")
     @ResponseBody
-    public Result<String> searchLastTotalTime(@PathVariable("operatorId") Long operatorId, AdminUserInfo adminUserInfo) {
-        return null;
+    public Result<String> searchLastTotalTime(@PathVariable("operatorId") Long operatorId) {
+        LocalDateTime localDateTime = driverGoodsLossIntervalMainService.searchLastTotalTime(operatorId);
+        return Result.success(localDateTime.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
     }
 
     /**
      * 生成区间统计记录
-     * @return
      */
     @PostMapping("/generator")
     @ResponseBody
     public Result<String> generator(@Validated @RequestBody DriverIntervalCargoDamageGeneratorRequest request, AdminUserInfo adminUserInfo) {
         DriverIntervalCargoDamageGeneratorBo bo = DriverIntervalCargoDamageMapStruct.MAPSTRUCT.generatorRequestToBo(request);
         buildUserInfo(bo, adminUserInfo);
+
+
         return null;
     }
 
     /**
      * 分页查询区间生成统计记录
-     * @return
      */
     @PostMapping("/page")
     @ResponseBody
-    public PageResult<DriverIntervalCargoDamagePageResponse> page(@Validated @RequestBody DriverIntervalCargoDamagePageRequest request, AdminUserInfo adminUserInfo) {
+    public PageResult<DriverIntervalCargoDamageResponse> page(@Validated @RequestBody DriverIntervalCargoDamagePageRequest request, AdminUserInfo adminUserInfo) {
         DriverIntervalCargoDamagePageBo bo = DriverIntervalCargoDamageMapStruct.MAPSTRUCT.pageRequestToBo(request);
         buildUserInfo(bo, adminUserInfo);
-        return null;
+        if (StringUtils.isNotBlank(bo.getAreaStaffName())) {
+            List<AreaStaffResponse> areaStaffResponses = areaStaffComponent.searchByOperatorIdAndAreaStaffName(bo.getOperatorId(), bo.getAreaStaffName());
+            bo.setAreaStaffIds(areaStaffResponses.stream().map(AreaStaffResponse::getId).toList());
+        }
+        Page<DriverIntervalCargoDamageVo> page = driverGoodsLossIntervalMainService.searchForPage(bo);
+
+        PageResult<DriverIntervalCargoDamageResponse> pageResult = PageResult.newPageResult(request.getPageNum(), request.getPageSize());
+
+        List<DriverIntervalCargoDamageVo> driverIntervalCargoDamageVos = page.getRecords();
+        if (null == driverIntervalCargoDamageVos || driverIntervalCargoDamageVos.isEmpty()) {
+            return pageResult.success(0, new ArrayList<>());
+        }
+
+        List<Long> operatorIds = driverIntervalCargoDamageVos.stream().map(DriverIntervalCargoDamageVo::getOperatorId).collect(Collectors.toList());
+        Map<Long, OrgOperatorVo> operatorMap = operatorComponent.queryOperatorMapByIdList(operatorIds);
+        driverIntervalCargoDamageVos.forEach(driverIntervalCargoDamageVo -> {
+            OrgOperatorVo operatorVo = operatorMap.get(driverIntervalCargoDamageVo.getOperatorId());
+            if (null != operatorVo) {
+                driverIntervalCargoDamageVo.setOperatorName(operatorVo.getOperatorName());
+                driverIntervalCargoDamageVo.setOperatorChainName(operatorVo.getOperatorChainName());
+            }
+        });
+        List<DriverIntervalCargoDamageResponse> driverIntervalCargoDamageRespons = DriverIntervalCargoDamageMapStruct.MAPSTRUCT.voListToPageResponseList(driverIntervalCargoDamageVos);
+        return pageResult.success(page.getTotal(), driverIntervalCargoDamageRespons);
     }
 
     /**
      * 区间生成统计记录详情分页查询
-     * @return
      */
     @PostMapping("/detail/page")
     @ResponseBody
-    public PageResult<DriverIntervalCargoDamageDetailPageResponse> detailPage(@Validated @RequestBody DriverIntervalCargoDamageDetailPageRequest request, AdminUserInfo adminUserInfo) {
+    public PageResult<DriverIntervalCargoDamageDetailResponse> detailPage(@Validated @RequestBody DriverIntervalCargoDamageDetailPageRequest request, AdminUserInfo adminUserInfo) {
         DriverIntervalCargoDamageDetailPageBo bo = DriverIntervalCargoDamageMapStruct.MAPSTRUCT.detailPageRequestToBo(request);
         buildUserInfo(bo, adminUserInfo);
-        return null;
+
+        extractedAreaStaffSearchParam(bo);
+
+        PageResult<DriverIntervalCargoDamageDetailResponse> pageResult = PageResult.newPageResult(request.getPageNum(), request.getPageSize());
+
+        Page<DriverIntervalCargoDamageDetailVo> page = driverGoodsLossIntervalDetailService.searchForPage(bo);
+        List<DriverIntervalCargoDamageDetailVo> driverIntervalCargoDamageDetailVos = page.getRecords();
+        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());
+            }
+        });
+        List<DriverIntervalCargoDamageDetailResponse> driverIntervalCargoDamageDetailResponses = DriverIntervalCargoDamageMapStruct.MAPSTRUCT.detailVoListToDetailResponseList(driverIntervalCargoDamageDetailVos);
+        return pageResult.success(page.getTotal(), driverIntervalCargoDamageDetailResponses);
     }
 
     /**
      * 导出区间生成统计记录详情
-     * @return
      */
     @PostMapping("/detail/export")
     @ResponseBody
     public Result<String> detailExport(@Validated @RequestBody DriverIntervalCargoDamageDetailExportRequest request, AdminUserInfo adminUserInfo) {
         DriverIntervalCargoDamageDetailExportBo bo = DriverIntervalCargoDamageMapStruct.MAPSTRUCT.detailExportRequestToBo(request);
         buildUserInfo(bo, adminUserInfo);
-        return null;
+
+        extractedAreaStaffSearchParam(bo);
+        DriverIntervalCargoDamageDetailPageBo pageBo = DriverIntervalCargoDamageMapStruct.MAPSTRUCT.detailExportBoToPageBo(bo);
+        pageBo.setPageNum(1);
+        pageBo.setPageNum(1000);
+        List<DriverIntervalCargoDamageDetailVo> all = new ArrayList<>();
+        while (true) {
+            Page<DriverIntervalCargoDamageDetailVo> page = driverGoodsLossIntervalDetailService.searchForPage(pageBo);
+            List<DriverIntervalCargoDamageDetailVo> driverIntervalCargoDamageDetailVos = page.getRecords();
+            if (null == driverIntervalCargoDamageDetailVos || driverIntervalCargoDamageDetailVos.isEmpty()) {
+                break;
+            }
+            all.addAll(driverIntervalCargoDamageDetailVos);
+            pageBo.setPageNum(pageBo.getPageNum() + 1);
+        }
+
+        Map<Long, AreaStaffResponse> areaStaffMap = areaStaffService.searchAreaStaffMap(all);
+        all.forEach(driverIntervalCargoDamageDetailVo -> {
+            AreaStaffResponse areaStaffResponse = areaStaffMap.get(driverIntervalCargoDamageDetailVo.getAreaStaffId());
+            if (null != areaStaffResponse) {
+                driverIntervalCargoDamageDetailVo.setAreaStaffName(areaStaffResponse.getEmployeeName());
+            }
+        });
+
+        List<DriverIntervalCargoDamageDetailExport> driverIntervalCargoDamageDetailExports = DriverIntervalCargoDamageMapStruct.MAPSTRUCT.detailVoListToDetailExportList(all);
+        String uri = exportClient.export(driverIntervalCargoDamageDetailExports, "export/driver/interval/cargoDamage", "区间货损记录详情" + System.currentTimeMillis());
+        return Result.success(uri);
+    }
+
+    /**
+     * 提取区间生成统计记录详情搜索参数
+     */
+    private void extractedAreaStaffSearchParam(DriverIntervalCargoDamageDetailSearchFace bo) {
+        DriverGoodsLossIntervalMain driverGoodsLossIntervalMain = driverGoodsLossIntervalMainService.getById(bo.getGoodsLossMonthlyMainId());
+        if (null == driverGoodsLossIntervalMain) {
+            throw new MessageException("区间货损记录不存在");
+        }
+
+        if (StringUtils.isNotBlank(bo.getAreaStaffName())) {
+            List<AreaStaffResponse> areaStaffResponses = areaStaffComponent.searchByOperatorIdAndAreaStaffName(driverGoodsLossIntervalMain.getOperatorId(), bo.getAreaStaffName());
+            bo.setAreaStaffIds(areaStaffResponses.stream().map(AreaStaffResponse::getId).toList());
+        }
     }
 
     /**
      * 添加司机在途核算记录
-     * @return
      */
     @PostMapping("/routeAccountRecord/add")
     @ResponseBody
     public Result<String> addRouteAccountRecord(@Validated @RequestBody DriverIntervalRouteAccountRecordCreateRequest request, AdminUserInfo adminUserInfo) {
-        return null;
+        DriverIntervalRouteAccountRecordCreateBo bo = DriverIntervalCargoDamageMapStruct.MAPSTRUCT.routeAccountRecordCreateRequestToBo(request);
+        buildUserInfo(bo, adminUserInfo);
+        AreaStaffResponse areaStaffResponse = areaStaffComponent.searchByStaffId(bo.getAreaStaffId());
+        bo.setOperatorId(areaStaffResponse.getOperatorId());
+        bo.setOperatorChain(areaStaffResponse.getOperatorChain());
+        driverOnRouteAccountRecordService.create(bo);
+        return Result.success("success");
     }
 
     /**
      * 取消司机在途核算记录
-     * @return
      */
     @GetMapping("/routeAccountRecord/cancel/{routeAccountRecordMainId}")
     @ResponseBody
     public Result<String> cancelRouteAccountRecord(@PathVariable("routeAccountRecordMainId") Long routeAccountRecordMainId, AdminUserInfo adminUserInfo) {
-        return null;
+        DriverIntervalRouteAccountRecordCancelBo bo = new DriverIntervalRouteAccountRecordCancelBo();
+        bo.setId(routeAccountRecordMainId);
+        buildUserInfo(bo, adminUserInfo);
+        driverOnRouteAccountRecordService.cancel(bo);
+        return Result.success("success");
     }
 
     /**
      * 导出司机在途核算记录
-     * @return
      */
     @PostMapping("/routeAccountRecord/export")
     @ResponseBody
@@ -116,7 +245,6 @@ public class DriverIntervalCargoDamageController extends BaseController {
 
     /**
      * 分页查询司机在途核算记录
-     * @return
      */
     @PostMapping("/routeAccountRecord/page")
     @ResponseBody
@@ -126,7 +254,6 @@ public class DriverIntervalCargoDamageController extends BaseController {
 
     /**
      * 查询司机在途核算记录明细
-     * @return
      */
     @GetMapping("/routeAccountRecord/detail/{routeAccountRecordMainId}")
     @ResponseBody
@@ -136,7 +263,6 @@ public class DriverIntervalCargoDamageController extends BaseController {
 
     /**
      * 编辑司机在途明细
-     * @return
      */
     @PostMapping("/routeAccountRecord/detail/edit")
     @ResponseBody
@@ -146,7 +272,6 @@ public class DriverIntervalCargoDamageController extends BaseController {
 
     /**
      * 导出司机在途明细
-     * @return
      */
     @GetMapping("/routeAccountRecord/detail/export/{routeAccountRecordMainId}")
     @ResponseBody

+ 108 - 0
warehouse-admin-web/src/main/java/com/yr/warehouse/admin/web/driver/export/DriverGoodsLossRecordExport.java

@@ -0,0 +1,108 @@
+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 DriverGoodsLossRecordExport implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 运营商名称
+     */
+    @ExcelProperty("运营商名称")
+    private String operatorName;
+
+    /**
+     * 运营商名称链
+     */
+    @ExcelProperty("运营商名称链")
+    private String operatorChainName;
+
+    /**
+     * 区域员工名称
+     */
+    @ExcelProperty("区域员工名称")
+    private String areaStaffName;
+
+    /**
+     * 昨日在途数量
+     */
+    @ExcelProperty("昨日在途数量")
+    private Long yesterdayOnRouteNum;
+
+    /**
+     * 今日拣货单开单数
+     */
+    @ExcelProperty("今日拣货单开单数")
+    private Long pickingOrderCreateNum;
+
+    /**
+     * 今日整件单开单数
+     */
+    @ExcelProperty("今日整件单开单数")
+    private Long wholeOrderCreateNum;
+
+    /**
+     * 今日取消总数 (未出库) - 页面展示这个*
+     */
+    @ExcelProperty("取消总数")
+    private Long unshippedCancelNum;
+
+    /**
+     * 今日补货总量
+     */
+    @ExcelProperty("今日补货总量")
+    private Long replenishNum;
+
+    /**
+     * 今日回仓总量
+     */
+    @ExcelProperty("今日回仓总量")
+    private Long returnWarehouseNum;
+
+    /**
+     * 今日在途库存数
+     */
+    @ExcelProperty("今日在途库存数")
+    private Long currentOnRouteNum;
+
+    /**
+     * 昨日设备库存
+     */
+    @ExcelProperty("昨日设备库存")
+    private Long equipmentStockNum;
+
+    /**
+     * 今日补货总数
+     */
+    @ExcelProperty("今日补货总数")
+    private Long equipmentReplenishNum;
+
+    /**
+     * 今日销量
+     */
+    @ExcelProperty("今日销量")
+    private Long equipmentSalesNum;
+
+    /**
+     * 今日设备库存数
+     */
+    @ExcelProperty("今日设备库存数")
+    private Long theoreticalEquipmentStockNum;
+
+    /**
+     * 今日设备实库存数
+     */
+    @ExcelProperty("今日设备实库存数")
+    private Long actualEquipmentStockNum;
+
+}

+ 124 - 0
warehouse-admin-web/src/main/java/com/yr/warehouse/admin/web/driver/export/DriverIntervalCargoDamageDetailExport.java

@@ -0,0 +1,124 @@
+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 DriverIntervalCargoDamageDetailExport implements Serializable {
+
+    @Serial
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 司机名称
+     */
+    @ExcelProperty("司机名称")
+    private String areaStaffName;
+
+    /**
+     * 上次剩余在途库存数
+     */
+    @ExcelProperty("上次剩余在途库存数")
+    private Long lastRemainingOnRouteStock;
+
+    /**
+     * 本次拣货开单数
+     */
+    @ExcelProperty("本次拣货开单数")
+    private Long pickingOrderCreateNum;
+
+    /**
+     * 本次整件开单数
+     */
+    @ExcelProperty("本次整件开单数")
+    private Long wholeOrderCreateNum;
+
+    /**
+     * 本次已取消数(未出库) - 页面展示这个*
+     */
+    @ExcelProperty("本次已取消数")
+    private Long unshippedCancelNum;
+
+//    /**
+//     * 本次已取消数(已出库) - 页面不展示这个*
+//     */
+//    private Long shippedCancelNum;
+
+    /**
+     * 本次补货总数
+     */
+    @ExcelProperty("本次补货总数")
+    private Long replenishNum;
+
+    /**
+     * 本次回仓总数
+     */
+    @ExcelProperty("本次回仓总数")
+    private Long returnWarehouseNum;
+
+    /**
+     * 本次未补货数
+     */
+    @ExcelProperty("本次未补货数")
+    private Long remainingUnReplenishedNum;
+
+    /**
+     * 整件核实数
+     */
+    @ExcelProperty("整件核实数")
+    private Long wholeVerifyNum;
+
+    /**
+     * 司机盈亏数
+     */
+    @ExcelProperty("司机盈亏数")
+    private Long profitLossNum;
+
+    /**
+     * 设备-上次剩余设备库存
+     */
+    @ExcelProperty("设备-上次剩余设备库存")
+    private Long lastRemainingEquipmentStock;
+
+    /**
+     * 设备-本次总补货数
+     */
+    @ExcelProperty("设备-本次总补货数")
+    private Long totalReplenishNum;
+
+    /**
+     * 设备-本次设备销售数
+     */
+    @ExcelProperty("设备-本次设备销售数")
+    private Long equipmentSalesNum;
+
+    /**
+     * 设备-理论设备库存
+     */
+    @ExcelProperty("设备-理论设备库存")
+    private Long theoreticalStockNum;
+
+    /**
+     * 设备-实际设备库存
+     */
+    @ExcelProperty("设备-实际设备库存")
+    private Long actualStockNum;
+
+    /**
+     * 设备-设备盈亏数
+     */
+    @ExcelProperty("设备-设备盈亏数")
+    private Long equipmentProfitLossNum;
+
+    /**
+     * 总盈亏数
+     */
+    @ExcelProperty("总盈亏数")
+    private Long totalProfitLoss;
+}

+ 9 - 0
warehouse-admin-web/src/main/java/com/yr/warehouse/admin/web/driver/mapstruct/DriverDailyCargoDamageMapStruct.java

@@ -2,11 +2,16 @@ package com.yr.warehouse.admin.web.driver.mapstruct;
 
 import com.yr.warehouse.admin.driver.bo.DriverDailyCargoDamageExportBo;
 import com.yr.warehouse.admin.driver.bo.DriverDailyCargoDamagePageBo;
+import com.yr.warehouse.admin.driver.vo.DriverGoodsLossRecordVo;
+import com.yr.warehouse.admin.web.driver.export.DriverGoodsLossRecordExport;
 import com.yr.warehouse.admin.web.driver.request.DriverDailyCargoDamageExportRequest;
 import com.yr.warehouse.admin.web.driver.request.DriverDailyCargoDamagePageRequest;
+import com.yr.warehouse.admin.web.driver.response.DriverGoodsLossRecordResponse;
 import org.mapstruct.Mapper;
 import org.mapstruct.factory.Mappers;
 
+import java.util.List;
+
 @Mapper
 public interface DriverDailyCargoDamageMapStruct {
 
@@ -15,4 +20,8 @@ public interface DriverDailyCargoDamageMapStruct {
     DriverDailyCargoDamagePageBo pageRequestToBo(DriverDailyCargoDamagePageRequest request);
 
     DriverDailyCargoDamageExportBo exportRequestToBo(DriverDailyCargoDamageExportRequest request);
+
+    List<DriverGoodsLossRecordResponse> voListToResponseList(List<DriverGoodsLossRecordVo> records);
+
+    List<DriverGoodsLossRecordExport> voListToExportList(List<DriverGoodsLossRecordVo> records);
 }

+ 19 - 8
warehouse-admin-web/src/main/java/com/yr/warehouse/admin/web/driver/mapstruct/DriverIntervalCargoDamageMapStruct.java

@@ -1,16 +1,17 @@
 package com.yr.warehouse.admin.web.driver.mapstruct;
 
-import com.yr.warehouse.admin.driver.bo.DriverIntervalCargoDamageDetailExportBo;
-import com.yr.warehouse.admin.driver.bo.DriverIntervalCargoDamageDetailPageBo;
-import com.yr.warehouse.admin.driver.bo.DriverIntervalCargoDamageGeneratorBo;
-import com.yr.warehouse.admin.driver.bo.DriverIntervalCargoDamagePageBo;
-import com.yr.warehouse.admin.web.driver.request.DriverIntervalCargoDamageDetailExportRequest;
-import com.yr.warehouse.admin.web.driver.request.DriverIntervalCargoDamageDetailPageRequest;
-import com.yr.warehouse.admin.web.driver.request.DriverIntervalCargoDamageGeneratorRequest;
-import com.yr.warehouse.admin.web.driver.request.DriverIntervalCargoDamagePageRequest;
+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.web.driver.export.DriverIntervalCargoDamageDetailExport;
+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 org.mapstruct.Mapper;
 import org.mapstruct.factory.Mappers;
 
+import java.util.List;
+
 @Mapper
 public interface DriverIntervalCargoDamageMapStruct {
 
@@ -23,4 +24,14 @@ public interface DriverIntervalCargoDamageMapStruct {
     DriverIntervalCargoDamageDetailPageBo detailPageRequestToBo(DriverIntervalCargoDamageDetailPageRequest request);
 
     DriverIntervalCargoDamageDetailExportBo detailExportRequestToBo(DriverIntervalCargoDamageDetailExportRequest request);
+
+    List<DriverIntervalCargoDamageResponse> voListToPageResponseList(List<DriverIntervalCargoDamageVo> driverIntervalCargoDamageVos);
+
+    List<DriverIntervalCargoDamageDetailResponse> detailVoListToDetailResponseList(List<DriverIntervalCargoDamageDetailVo> driverIntervalCargoDamageDetailVos);
+
+    DriverIntervalCargoDamageDetailPageBo detailExportBoToPageBo(DriverIntervalCargoDamageDetailExportBo bo);
+
+    List<DriverIntervalCargoDamageDetailExport> detailVoListToDetailExportList(List<DriverIntervalCargoDamageDetailVo> all);
+
+    DriverIntervalRouteAccountRecordCreateBo routeAccountRecordCreateRequestToBo(DriverIntervalRouteAccountRecordCreateRequest request);
 }

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

@@ -25,6 +25,11 @@ public class DriverDailyCargoDamagePageRequest extends PageRequest implements Se
     private Long operatorId;
 
     /**
+     * 运营商id链
+     */
+    private String operatorChain;
+
+    /**
      * 区域员工名称
      */
     private String areaStaffName;

+ 0 - 1
warehouse-admin-web/src/main/java/com/yr/warehouse/admin/web/driver/request/DriverIntervalRouteAccountRecordCreateRequest.java

@@ -39,7 +39,6 @@ public class DriverIntervalRouteAccountRecordCreateRequest implements Serializab
     /**
      * 商品列表
      */
-    @NotEmpty(message = "商品列表不能为空")
     private List<DriverIntervalRouteAccountRecordDetailCreateRequest> details;
 
 }

+ 20 - 0
warehouse-admin-web/src/main/java/com/yr/warehouse/admin/web/driver/response/DriverGoodsLossRecordResponse.java

@@ -15,6 +15,16 @@ public class DriverGoodsLossRecordResponse implements Serializable {
     private static final long serialVersionUID = 1L;
 
     /**
+     * 运营商名称
+     */
+    private String operatorName;
+
+    /**
+     * 运营商名称链
+     */
+    private String operatorChainName;
+
+    /**
      * 区域员工名称
      */
     private String areaStaffName;
@@ -60,6 +70,16 @@ public class DriverGoodsLossRecordResponse implements Serializable {
     private Long currentOnRouteNum;
 
     /**
+     * 核算数
+     */
+    private Long verifiedNum;
+
+    /**
+     * 是否核算 YES 是 NO 否
+     */
+    private String useVerified;
+
+    /**
      * 昨日设备库存
      */
     private Long equipmentStockNum;

+ 1 - 1
warehouse-admin-web/src/main/java/com/yr/warehouse/admin/web/driver/response/DriverIntervalCargoDamageDetailPageResponse.java → warehouse-admin-web/src/main/java/com/yr/warehouse/admin/web/driver/response/DriverIntervalCargoDamageDetailResponse.java

@@ -9,7 +9,7 @@ import java.io.Serializable;
  * 区间生成统计记录详情分页查询响应参数
  */
 @Data
-public class DriverIntervalCargoDamageDetailPageResponse implements Serializable {
+public class DriverIntervalCargoDamageDetailResponse implements Serializable {
 
     @Serial
     private static final long serialVersionUID = 1L;

+ 11 - 1
warehouse-admin-web/src/main/java/com/yr/warehouse/admin/web/driver/response/DriverIntervalCargoDamagePageResponse.java → warehouse-admin-web/src/main/java/com/yr/warehouse/admin/web/driver/response/DriverIntervalCargoDamageResponse.java

@@ -11,7 +11,7 @@ import java.time.LocalDateTime;
  * 分页查询货损统计(区间统计)响应参数
  */
 @Data
-public class DriverIntervalCargoDamagePageResponse implements Serializable {
+public class DriverIntervalCargoDamageResponse implements Serializable {
 
     @Serial
     private static final long serialVersionUID = 1L;
@@ -22,6 +22,16 @@ public class DriverIntervalCargoDamagePageResponse implements Serializable {
     private Long id;
 
     /**
+     * 运营商名称
+     */
+    private String operatorName;
+
+    /**
+     * 运营商名称链
+     */
+    private String operatorChainName;
+
+    /**
      * 区间开始时间
      */
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")