Sfoglia il codice sorgente

Merge remote-tracking branch 'origin/dev_20260131' into dev_20260131_youshen430

# Conflicts:
#	sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/param/SalesWaybillOrderResp.java
#	sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/app/SalesWaybillOrderService.java
donglang 1 mese fa
parent
commit
57ef28869d

+ 1 - 1
sckw-modules/sckw-fleet/src/main/java/com/sckw/fleet/FleetApplication.java

@@ -12,7 +12,7 @@ import org.springframework.cloud.openfeign.EnableFeignClients;
  */
 @SckwRemoteApplication
 @SckwCloudApplication
-@EnableFeignClients(basePackages = "com.sckw.transport.api.feign")
+@EnableFeignClients(basePackages = {"com.sckw.transport.api.feign","com.sckw.system.api.feign"})
 public class FleetApplication {
 
     public static void main(String[] args) {

+ 100 - 0
sckw-modules/sckw-system/src/main/java/com/sckw/system/aspect/KwsRoleDeleteDataPermissionAspect.java

@@ -0,0 +1,100 @@
+package com.sckw.system.aspect;
+
+import com.sckw.core.exception.SystemException;
+import com.sckw.core.utils.StringUtils;
+import com.sckw.core.web.constant.HttpStatus;
+import com.sckw.system.service.KwsDataPermissionService;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.aspectj.lang.ProceedingJoinPoint;
+import org.aspectj.lang.annotation.Around;
+import org.aspectj.lang.annotation.Aspect;
+import org.springframework.core.Ordered;
+import org.springframework.core.annotation.Order;
+import org.springframework.stereotype.Component;
+import org.springframework.transaction.PlatformTransactionManager;
+import org.springframework.transaction.support.TransactionTemplate;
+
+import java.util.Arrays;
+import java.util.List;
+
+/**
+ * 角色删除后级联逻辑删除角色数据权限。
+ *
+ * <p>不侵入 {@code KwsRoleService#deleteByKey(String)} 原有代码逻辑,通过切面在同一事务中补充删除
+ * {@code kws_data_permission} 表中对应角色的数据权限记录。</p>
+ *
+ * @author codex
+ */
+@Slf4j
+@Aspect
+@Component
+@RequiredArgsConstructor
+@Order(Ordered.HIGHEST_PRECEDENCE)
+public class KwsRoleDeleteDataPermissionAspect {
+
+    private final KwsDataPermissionService kwsDataPermissionService;
+
+    private final PlatformTransactionManager transactionManager;
+
+    /**
+     * 环绕角色删除方法,保证角色删除与数据权限逻辑删除处于同一事务。
+     *
+     * @param joinPoint 原始角色删除方法切点
+     * @param ids       角色ID字符串,多个ID使用英文逗号分隔
+     * @return 原始方法返回值
+     * @throws Throwable 原始方法或数据权限删除失败时抛出异常,触发事务回滚
+     */
+    @Around(value = "execution(public void com.sckw.system.service.KwsRoleService.deleteByKey(String)) && args(ids)")
+    public Object deleteDataPermissionAfterRoleDelete(ProceedingJoinPoint joinPoint, String ids) throws Throwable {
+        List<Long> roleIds = parseRoleIds(ids);
+        TransactionTemplate transactionTemplate = new TransactionTemplate(transactionManager);
+        try {
+            return transactionTemplate.execute(status -> {
+                try {
+                    Object result = joinPoint.proceed();
+                    kwsDataPermissionService.deleteByRoleIds(roleIds);
+                    log.info("角色删除后已逻辑删除数据权限, roleIds={}", roleIds);
+                    return result;
+                } catch (Throwable throwable) {
+                    status.setRollbackOnly();
+                    log.error("角色删除或数据权限逻辑删除失败, roleIds={}", roleIds, throwable);
+                    throw new RoleDeleteDataPermissionException(throwable);
+                }
+            });
+        } catch (RoleDeleteDataPermissionException e) {
+            throw e.getCause();
+        }
+    }
+
+    /**
+     * 解析角色ID字符串。
+     *
+     * @param ids 角色ID字符串
+     * @return 角色ID列表
+     */
+    static List<Long> parseRoleIds(String ids) {
+        if (StringUtils.isBlank(ids) || StringUtils.isBlank(ids.trim())) {
+            throw new SystemException(HttpStatus.CRUD_FAIL_CODE, "角色ID不能为空");
+        }
+        try {
+            return Arrays.stream(ids.split(","))
+                    .map(String::trim)
+                    .filter(StringUtils::isNotBlank)
+                    .map(Long::parseLong)
+                    .toList();
+        } catch (NumberFormatException e) {
+            throw new SystemException(HttpStatus.CRUD_FAIL_CODE, "角色ID格式错误");
+        }
+    }
+
+    /**
+     * 事务模板中转运行时异常,保留原始异常继续向上抛出。
+     */
+    private static class RoleDeleteDataPermissionException extends RuntimeException {
+
+        RoleDeleteDataPermissionException(Throwable cause) {
+            super(cause);
+        }
+    }
+}

+ 1 - 1
sckw-modules/sckw-system/src/main/java/com/sckw/system/service/KwsUserService.java

@@ -463,7 +463,7 @@ public class KwsUserService {
                 params.put("entId", LoginUserHolder.getEntId());
             }
         } else {
-            params.put("systemType", SystemTypeEnum.MANAGE.getCode());
+            //params.put("systemType", SystemTypeEnum.MANAGE.getCode());
             params.put("entList", LoginUserHolder.getChildEntList());
         }
 

+ 1 - 0
sckw-modules/sckw-system/src/main/resources/mapper/KwsRoleDao.xml

@@ -22,6 +22,7 @@
       remark,
       status,
       admin_flag,
+      personal_data_flag,
       create_by,
       create_time,
       update_by,

+ 40 - 35
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/handler/ComeIntoHandler.java

@@ -46,6 +46,9 @@ public class ComeIntoHandler extends AbstractWaybillOrderHandler<WaybillOrderCme
 
     @Override
     protected void checkState(WaybillOrderCmeIntoWeighParam param, KwtWaybillOrder waybillOrder) {
+        if (StringUtils.isBlank(param.getTruckNo())) {
+            throw new BusinessPlatfromException(ErrorCodeEnum.PARAM_ERROR, "车牌号不能为空!");
+        }
     }
 
     @Override
@@ -82,10 +85,7 @@ public class ComeIntoHandler extends AbstractWaybillOrderHandler<WaybillOrderCme
      * @param waybillOrder
      */
     private void firstWeighbridge(WaybillOrderCmeIntoWeighParam param, KwtWaybillOrder waybillOrder, KwtWaybillOrderTicket orderTicket) {
-        if (StringUtils.isBlank(param.getTruckNo())) {
-            throw new BusinessPlatfromException(ErrorCodeEnum.PARAM_ERROR, "车牌号不能为空!");
-        }
-        if (param.getTareAmount() == null) {
+        if (param.getWeighAmount() == null) {
             throw new BusinessPlatfromException(ErrorCodeEnum.PARAM_ERROR, "皮重不能为空!");
         }
         // 校验运单
@@ -94,7 +94,7 @@ public class ComeIntoHandler extends AbstractWaybillOrderHandler<WaybillOrderCme
         }
 
         //1.填充运单装货单皮重
-        orderTicket.setTareAmount(param.getTareAmount());
+        orderTicket.setTareAmount(param.getWeighAmount());
         waybillOrderTicketRepository.updateById(orderTicket);
 
         //2.填充首次皮重
@@ -102,7 +102,7 @@ public class ComeIntoHandler extends AbstractWaybillOrderHandler<WaybillOrderCme
         if (truck != null && (truck.getTareWeight() == null || BigDecimal.ZERO.compareTo(truck.getTareWeight()) == 0)) {
             RTruckVo truckNo = new RTruckVo();
             truckNo.setId(truck.getId());
-            truckNo.setTareWeight(param.getTareAmount());
+            truckNo.setTareWeight(param.getWeighAmount());
             remoteFleetService.updateTruckTareAmount(truckNo);
         }
 
@@ -228,16 +228,15 @@ public class ComeIntoHandler extends AbstractWaybillOrderHandler<WaybillOrderCme
      * @param waybillOrder
      */
     private void laterWeighbridge(WaybillOrderCmeIntoWeighParam param, KwtWaybillOrder waybillOrder, KwtWaybillOrderTicket orderTicket) {
-        if (StringUtils.isBlank(param.getGrossAmount())) {
+        if (param.getWeighAmount() == null) {
             throw new BusinessPlatfromException(ErrorCodeEnum.PARAM_ERROR, "毛重不能为空!");
         }
-
         //1.填充装货单毛重和装货净重
         BigDecimal loadAmount = updateGrossAmount(param, orderTicket);
         //2.填充运单装货净重
         updateLoadAmount(param, waybillOrder, loadAmount);
         //3.判断流程
-        checkProcess(waybillOrder, loadAmount);
+        checkProcess(param, waybillOrder, loadAmount);
         //4.创建过磅记录
         createWeighbridges(waybillOrder);
 
@@ -250,11 +249,11 @@ public class ComeIntoHandler extends AbstractWaybillOrderHandler<WaybillOrderCme
      */
     private BigDecimal updateGrossAmount(WaybillOrderCmeIntoWeighParam param, KwtWaybillOrderTicket shipmentTicket) {
         //毛重
-        shipmentTicket.setGrossAmount(param.getGrossAmount());
+        shipmentTicket.setGrossAmount(param.getWeighAmount());
         //皮重
         BigDecimal tareAmount = shipmentTicket.getTareAmount();
         //装货单装货净重
-        BigDecimal loadAmount = param.getGrossAmount().subtract(Optional.ofNullable(tareAmount).orElse(BigDecimal.ZERO));
+        BigDecimal loadAmount = param.getWeighAmount().subtract(Optional.ofNullable(tareAmount).orElse(BigDecimal.ZERO));
         shipmentTicket.setAmount(loadAmount);
         waybillOrderTicketRepository.updateById(shipmentTicket);
         return loadAmount;
@@ -272,20 +271,20 @@ public class ComeIntoHandler extends AbstractWaybillOrderHandler<WaybillOrderCme
         subtask.setLoadAmount(loadAmount);
         subtask.setLoadTime(new Date());
         waybillOrderSubtaskRepository.updateById(subtask);
-        log.info("物流运单离场过磅成功!运单ID: {}, 毛重: {}, 装货净重: {}", param.getWaybillOrderId(), param.getGrossAmount(), loadAmount);
+        log.info("物流运单离场过磅成功!运单ID: {}, 毛重: {}, 装货净重: {}", param.getWaybillOrderId(), param.getWeighAmount(), loadAmount);
     }
 
     //
 
     /**
-     * 计算并设定离场目标状态   其它情况:净重<-0.5          状态更改为:直接返回
-     *                      空载离场:-0.5<=净重<=0.5,  状态更改为:空载待离场
-     *                      正常流程:0.5<净重<=任务量,  状态更改为:待离场
-     *                      超载流程:净重>任务量,       状态更改为:卸货中
+     * 计算并设定离场目标状态   其它情况:净重<-0.5                    状态更改为:直接返回
+     *                      空载离场:-0.5<=净重<=0.5,            状态更改为:空载待离场
+     *                      正常流程:0.5<净重<=任务量,            状态更改为:待离场
+     *                      超载流程:净重>任务量或者毛重>法定载重,   状态更改为:卸货中
      * @param waybillOrder
      * @param loadAmount
      */
-    private void checkProcess(KwtWaybillOrder waybillOrder, BigDecimal loadAmount) {
+    private void checkProcess(WaybillOrderCmeIntoWeighParam param, KwtWaybillOrder waybillOrder, BigDecimal loadAmount) {
         //获取运单任务量
         KwtWaybillOrderSubtask waybillSubtask = getWaybillSubtask(waybillOrder.getId());
         if (waybillSubtask.getEntrustAmount() == null) {
@@ -316,24 +315,30 @@ public class ComeIntoHandler extends AbstractWaybillOrderHandler<WaybillOrderCme
             return;
         }
 
-        // 场景二:正常流程,0.5<净重<=任务量
-        if (loadAmount.compareTo(entrustAmount) <= 0) {
-            waybillOrder.setTargetStatus(2);
-            return;
+        //法定载重
+        BigDecimal truckStandardLoad = getTruckStandardLoad(param.getTruckNo());
+        // 场景三:超载流程, 净重>任务量或者毛重>法定载重
+        if (loadAmount.compareTo(entrustAmount) > 0 || param.getWeighAmount().compareTo(truckStandardLoad) > 0) {
+            waybillOrder.setTargetStatus(3);
         }
-        // 场景三:超载流程, 净重>任务量
-        waybillOrder.setTargetStatus(3);
+
+        // 场景四:正常流程,0.5<净重<=任务量
+        waybillOrder.setTargetStatus(2);
+
     }
 
-//    /**
-//     * 正常流程和超载流程,需校验是否已完成装载
-//     */
-//    private void checkStatus(KwtWaybillOrder waybillOrder) {
-//        if (!Objects.equals(CarWaybillV1Enum.EXIT_COMPLETED.getCode(), waybillOrder.getStatus())
-//                && !Objects.equals(CarWaybillV1Enum.REPLENISH_FINISH.getCode(), waybillOrder.getStatus())) {
-//            return;
-//        }
-//    }
+    /**
+     * 获取车辆的法定载重
+     * @param truckNo
+     * @return
+     */
+    private BigDecimal getTruckStandardLoad(String truckNo) {
+        RTruckVo truckVo = remoteFleetService.findTruckByTruckNo(truckNo);
+        if (truckVo == null || truckVo.getLegalLoad() == null || BigDecimal.ZERO.compareTo(truckVo.getLegalLoad()) == 0) {
+            return BigDecimal.ZERO;
+        }
+        return truckVo.getLegalLoad();
+    }
 
     @Override
     protected String getProcessName() {
@@ -390,7 +395,7 @@ public class ComeIntoHandler extends AbstractWaybillOrderHandler<WaybillOrderCme
 
             // 第二条:称重信息
             KwtWaybillOrderNode node2 = getWaybillOrderNode(param, waybillOrder);
-            String tareAmount = Objects.isNull(param.getTareAmount()) ? "0.00" : param.getTareAmount().setScale(2, RoundingMode.HALF_UP).toPlainString();
+            String tareAmount = Objects.isNull(param.getWeighAmount()) ? "0.00" : param.getWeighAmount().setScale(2, RoundingMode.HALF_UP).toPlainString();
             node2.setRemark("[" + param.getWeighbridgeName() + "]首次称重[" + tareAmount + "吨]");
             node2.setCreateTime(fiveSecondsLater);
             waybillOrderNodeRepository.save(node2);
@@ -400,7 +405,7 @@ public class ComeIntoHandler extends AbstractWaybillOrderHandler<WaybillOrderCme
             KwtWaybillOrderNode node1 = getWaybillOrderNode(param, waybillOrder);
             //过磅次数
             int size = weighbridges.size() + 1;
-            String grossAmount = Objects.isNull(param.getGrossAmount()) ? "0.00" : param.getGrossAmount().setScale(2, RoundingMode.HALF_UP).toPlainString();
+            String grossAmount = Objects.isNull(param.getWeighAmount()) ? "0.00" : param.getWeighAmount().setScale(2, RoundingMode.HALF_UP).toPlainString();
             node1.setRemark("第" + size + "次称重,[" + param.getWeighbridgeName() +  "]称重["  + grossAmount + "吨]");
             waybillOrderNodeRepository.save(node1);
             log.info("记录【过磅称重】节点轨迹成功,节点ID:{}", node1.getId());
@@ -427,7 +432,7 @@ public class ComeIntoHandler extends AbstractWaybillOrderHandler<WaybillOrderCme
             case 1: // 空载离场
                 return "司机[" + waybillOrder.getDriverName() + "]空载待离场";
             case 2: // 正常离场
-                String grossAmount = Objects.isNull(param.getGrossAmount()) ? "0.00" : param.getGrossAmount().setScale(2, RoundingMode.HALF_UP).toPlainString();
+                String grossAmount = Objects.isNull(param.getWeighAmount()) ? "0.00" : param.getWeighAmount().setScale(2, RoundingMode.HALF_UP).toPlainString();
                 return "[" + param.getWeighbridgeName() + "]称重[" + grossAmount + "吨]";
             case 3: // 超载离场
                 return "司机[" + waybillOrder.getDriverName() + "]已超载,卸货中";

+ 5 - 5
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/param/SalesWaybillOrderResp.java

@@ -24,7 +24,7 @@ public class SalesWaybillOrderResp implements Serializable {
      * 执行中的订单
      */
     @Schema(description = "执行中的订单")
-    private Integer ongoingLogOrder;
+    private Integer ongoingLogOrderCount;
 
     /**
      * 今日车次
@@ -42,23 +42,23 @@ public class SalesWaybillOrderResp implements Serializable {
      * 今日出货量
      */
     @Schema(description = "今日出货量")
-    private BigDecimal todayShipmentWeight;
+    private BigDecimal todayShipmentWeightCount;
 
     /**
      * 本月出货量
      */
     @Schema(description = "本月出货量")
-    private BigDecimal monthShipmentWeight;
+    private BigDecimal monthShipmentWeightCount;
 
     /**
      * 近7天出货量
      */
     @Schema(description = "本月出货量")
-    private List<RecentSevenDaysShipmentVO> recentSevenDaysShipmentVOs;
+    private List<RecentSevenDayShipmentVO> recentSevenDayShipmentCountVOs;
 
 
     @Data
-    public static class RecentSevenDaysShipmentVO {
+    public static class RecentSevenDayShipmentVO {
         @Schema(description = "日期:yyyy-MM-dd")
         private String date;
 

+ 3 - 10
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/model/param/WaybillOrderCmeIntoWeighParam.java

@@ -26,16 +26,9 @@ public class WaybillOrderCmeIntoWeighParam extends WaybillOrderProcessParam impl
     private String truckNo;
 
     /**
-     * 皮重
+     * 称重重量(毛重/皮重
      */
-    @Schema(description = "皮重")
-    private BigDecimal tareAmount;
-
-    /**
-     * 毛重
-     */
-    @Schema(description = "毛重")
-    private BigDecimal grossAmount;
-
+    @Schema(description = "称重重量")
+    private BigDecimal weighAmount;
 
 }

+ 66 - 85
sckw-modules/sckw-transport/src/main/java/com/sckw/transport/service/app/SalesWaybillOrderService.java

@@ -5,7 +5,6 @@ import com.alibaba.fastjson.JSON;
 import com.sckw.core.model.constant.Global;
 import com.sckw.core.model.enums.CarWaybillV1Enum;
 import com.sckw.core.model.enums.GatekeeperStatusEnum;
-import com.sckw.core.utils.CollectionUtils;
 import com.sckw.fleet.api.RemoteFleetService;
 import com.sckw.order.api.dubbo.TradeOrderInfoService;
 import com.sckw.product.api.dubbo.GoodsInfoService;
@@ -25,6 +24,7 @@ import lombok.extern.slf4j.Slf4j;
 import org.apache.dubbo.config.annotation.DubboReference;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Service;
+import org.springframework.util.CollectionUtils;
 
 import java.math.BigDecimal;
 import java.time.LocalDate;
@@ -46,46 +46,10 @@ import java.util.stream.Collectors;
 @RequiredArgsConstructor
 public class SalesWaybillOrderService {
 
-    private final KwtLogisticsOrderRepository logisticsOrderRepository;
-    private final KwtLogisticsOrderCirculateRepository logisticsOrderCirculateRepository;
-    private final KwtLogisticsOrderGoodsRepository logisticsOrderGoodsRepository;
-    private final KwtLogisticsOrderAddressRepository logisticsOrderAddressRepository;
-    private final KwtLogisticsOrderUnitRepository logisticsOrderUnitRepository;
-
     private final KwtWaybillOrderSubtaskRepository waybillOrderSubtaskRepository;
-    private final KwtWaybillOrderRepository waybillOrderRepository;
-    private final KwtWaybillOrderAddressRepository waybillOrderAddressRepository;
-    private final KwtWaybillOrderTicketRepository waybillOrderTicketRepository;
-    private final KwtWaybillOrderNodeRepository waybillOrderNodeRepository;
-
-    @DubboReference(version = "1.0.0", group = "design", check = false, timeout = 6000)
-    RemoteSystemService remoteSystemService;
-    @DubboReference(version = "1.0.0", group = "design", check = false, timeout = 80000)
-    TradeOrderInfoService tradeOrderInfoService;
-    @DubboReference(version = "1.0.0", group = "design", check = false, timeout = 6000)
-    RemoteFleetService remoteFleetService;
-    @DubboReference(version = "1.0.0", group = "design", check = false, timeout = 6000)
-    GoodsInfoService goodsInfoService;
-
-    private final TakingOrderHandler takingOrderHandler;
-    private final CancelHandler cancelHandler;
-    private final ComeIntoHandler comeIntoHandler;
-    private final LoadingHandler loadingHandler;
-    private final LeaveMockHandler leaveMockHandler;
-    private final LeaveHandler leaveHandler;
-    private final EmptyLoadLeaveHandler emptyLoadLeaveHandler;
-    private final ReplenishHandler replenishHandler;
-    private final LiftRodReleaseHandler liftRodReleaseHandler;
-
-    private final UnloadingHandler unloadingHandler;
-
     private final KwtWaybillOrderV1Service waybillOrderV1Service;
     private final KwtGatekeeperWaybillOrderRepository gatekeeperWaybillOrderRepository;
 
-    // 注入RedisTemplate用于分布式锁
-    @Resource
-    private RedisTemplate<String, String> redisTemplate;
-
     /**
      * 查询销售数据
      * @param param
@@ -95,7 +59,7 @@ public class SalesWaybillOrderService {
         log.info("查询销售数据:{}", JSON.toJSONString(param));
         SalesWaybillOrderResp salesResp = new SalesWaybillOrderResp();
         // 1. 计算执行中订单(物流订单)
-        calOngoingLogOrder(param, salesResp);
+        calOngoingLogOrderCount(param, salesResp);
 
         // 2.计算今日车次
         calTodayTruckCount(param, salesResp);
@@ -103,12 +67,6 @@ public class SalesWaybillOrderService {
         // 3.计算场内车辆
         calInsideVehicleCount(param, salesResp);
 
-        // 4.计算今日出货量
-
-        // 5.计算本月出货量
-
-
-
         log.info("查询销售数据成功,结果:{}", JSON.toJSONString(salesResp));
 
         return salesResp;
@@ -120,12 +78,12 @@ public class SalesWaybillOrderService {
      * @param param
      * @param salesResp
      */
-    private void calOngoingLogOrder(SalesWaybillOrderQueryParam param, SalesWaybillOrderResp salesResp) {
+    private void calOngoingLogOrderCount(SalesWaybillOrderQueryParam param, SalesWaybillOrderResp salesResp) {
         WaybillOrderReq req = new WaybillOrderReq();
         req.setEntId(String.valueOf(param.getEntId()));
         StatisticsWaybillResp statisticsWaybillResp = waybillOrderV1Service.statisticsWaybillOrder(req);
         if (statisticsWaybillResp == null) {
-            salesResp.setOngoingLogOrder(Global.NUMERICAL_ZERO);
+            salesResp.setOngoingLogOrderCount(Global.NUMERICAL_ZERO);
         }
         List<String> targetStatus = List.of("5", "10", "15");
         List<StatisticsWaybillResp.OrderBillStatusStatistics> orderStatusStatistics = statisticsWaybillResp.getOrderStatusStatistics();
@@ -139,7 +97,7 @@ public class SalesWaybillOrderService {
                     }
                 })
                 .sum();
-        salesResp.setOngoingLogOrder(ongoingLogOrder);
+        salesResp.setOngoingLogOrderCount(ongoingLogOrder);
     }
 
     /**
@@ -148,79 +106,102 @@ public class SalesWaybillOrderService {
      * @param salesResp
      */
     private void calTodayTruckCount(SalesWaybillOrderQueryParam param, SalesWaybillOrderResp salesResp) {
-        //今日车次
-        LocalDateTime todayStart = LocalDate.now().atStartOfDay();          // 今天 00:00:00
+        //今日车次/出货量
+        todayTruckCount(param, salesResp);
+        //本月出货量
+        monthShipmentWeightCount(param, salesResp);
+        //近7天出货量
+        recentSevenDayShipmentCount(param, salesResp);
+    }
+
+    /**
+     * 今日车次/出货量
+     * @param param
+     * @param salesResp
+     */
+    private void todayTruckCount(SalesWaybillOrderQueryParam param, SalesWaybillOrderResp salesResp) {
+        // 今天 00:00:00
+        LocalDateTime todayStart = LocalDate.now().atStartOfDay();
+        // 今天 23:59:59
         LocalDateTime todayEnd = LocalDate.now().atTime(23, 59, 59);
-        List<KwtWaybillOrderSubtask> todayTruckCount = waybillOrderSubtaskRepository
+        List<KwtWaybillOrderSubtask> todayWaybillOrderSub = waybillOrderSubtaskRepository
                 .queryWaybillOrderSubByEntIdAndStatus(param.getEntId(), CarWaybillV1Enum.COMPLETED.getCode(), todayStart, todayEnd);
-        if (CollectionUtils.isEmpty(todayTruckCount)) {
+        if (CollectionUtils.isEmpty(todayWaybillOrderSub)) {
             salesResp.setTodayTruckCount(Global.NUMERICAL_ZERO);
-            salesResp.setTodayShipmentWeight(BigDecimal.ZERO);
+            salesResp.setTodayShipmentWeightCount(BigDecimal.ZERO);
         }
         //今日车次
-        salesResp.setTodayTruckCount(todayTruckCount.size());
+        salesResp.setTodayTruckCount(todayWaybillOrderSub.size());
         //今日出货量
-        BigDecimal todayLoadAmount = todayTruckCount.stream()
+        BigDecimal todayLoadAmount = todayWaybillOrderSub.stream()
                 .filter(sub -> sub.getLoadAmount() != null)
                 .map(KwtWaybillOrderSubtask::getLoadAmount)
                 .reduce(BigDecimal.ZERO, BigDecimal::add);
-        salesResp.setTodayShipmentWeight(todayLoadAmount);
+        salesResp.setTodayShipmentWeightCount(todayLoadAmount);
+    }
 
-        //本月出货量
+    /**
+     * 本月出货量
+     * @param param
+     * @param salesResp
+     */
+    private void monthShipmentWeightCount(SalesWaybillOrderQueryParam param, SalesWaybillOrderResp salesResp) {
+        // 本月第一天 00:00:00
         LocalDateTime monthStart = LocalDate.now().withDayOfMonth(1).atStartOfDay();
+        // 本月最后一天 23:59:59
         LocalDateTime monthEnd = LocalDate.now().withDayOfMonth(LocalDate.now().lengthOfMonth()).atTime(23, 59, 59);
-        List<KwtWaybillOrderSubtask> monthShipmentWeight = waybillOrderSubtaskRepository
+        List<KwtWaybillOrderSubtask> monthWaybillOrderSub = waybillOrderSubtaskRepository
                 .queryWaybillOrderSubByEntIdAndStatus(param.getEntId(), CarWaybillV1Enum.COMPLETED.getCode(), monthStart, monthEnd);
-        if (CollectionUtils.isEmpty(todayTruckCount)) {
-            salesResp.setMonthShipmentWeight(BigDecimal.ZERO);
+        if (CollectionUtils.isEmpty(monthWaybillOrderSub)) {
+            salesResp.setMonthShipmentWeightCount(BigDecimal.ZERO);
         }
         //本月出货量
-        BigDecimal monthLoadAmount = todayTruckCount.stream()
+        BigDecimal monthLoadAmount = monthWaybillOrderSub.stream()
                 .filter(sub -> sub.getLoadAmount() != null)
                 .map(KwtWaybillOrderSubtask::getLoadAmount)
                 .reduce(BigDecimal.ZERO, BigDecimal::add);
-        salesResp.setTodayShipmentWeight(monthLoadAmount);
+        salesResp.setMonthShipmentWeightCount(monthLoadAmount);
+    }
 
-        // 1. 定义时间范围:近7天(包含今天)
+    /**
+     * 近7天出货量
+     * @param param
+     * @param salesResp
+     */
+    private void recentSevenDayShipmentCount(SalesWaybillOrderQueryParam param, SalesWaybillOrderResp salesResp) {
+        // 7天前 00:00:00
         LocalDate today = LocalDate.now();
-        LocalDateTime sevenDaysStartTime = today.minusDays(6).atStartOfDay(); // 7天前 00:00:00
-        LocalDateTime sevenDaysEndTime = today.atTime(23, 59, 59);                     // 今天 23:59:59
+        LocalDateTime sevenDaysStartTime = today.minusDays(6).atStartOfDay();
+        // 今天 23:59:59
+        LocalDateTime sevenDaysEndTime = today.atTime(23, 59, 59);
 
-        // 2. 查询数据库:获取近7天的所有已完成子运单数据
-        List<KwtWaybillOrderSubtask> subtaskList = waybillOrderSubtaskRepository
+        // 查询数据库,获取近7天的所有已完成子运单数据
+        List<KwtWaybillOrderSubtask> sevenDayWaybillOrderSubtask = waybillOrderSubtaskRepository
                 .queryWaybillOrderSubByEntIdAndStatus(param.getEntId(), CarWaybillV1Enum.COMPLETED.getCode(), sevenDaysStartTime, sevenDaysEndTime);
 
-        // 3. 内存分组统计:按“日期”聚合求和
-        // 结果格式:Map<"2026-04-23", 100.5>
-        Map<String, BigDecimal> dailyWeightMap = subtaskList.stream()
-                .filter(task -> task.getLoadAmount() != null) // 过滤空值
+        // 分组统计,按日期聚合求和
+        Map<String, BigDecimal> dailyWeightMap = sevenDayWaybillOrderSubtask.stream()
+                .filter(task -> task.getLoadAmount() != null)
                 .collect(Collectors.groupingBy(
-                        // 关键:按创建时间的日期部分分组 (yyyy-MM-dd)
-                        task -> java.time.LocalDateTime.ofInstant(task.getCreateTime().toInstant(),
-                                        java.time.ZoneId.systemDefault()).toLocalDate().toString(),
-                        // 求和
+                        task -> LocalDateTime.ofInstant(task.getCreateTime().toInstant(),
+                                java.time.ZoneId.systemDefault()).toLocalDate().toString(),
                         Collectors.mapping(KwtWaybillOrderSubtask::getLoadAmount, Collectors.reducing(BigDecimal.ZERO, BigDecimal::add))
                 ));
 
-        // 4. 构建前端需要的 VO 列表(按时间顺序,并补全缺失日期的0值)
-        List<SalesWaybillOrderResp.RecentSevenDaysShipmentVO> resultVOs = new ArrayList<>();
-        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
-
+        // 构建VO列表,按时间顺序,并补全缺失日期
+        List<SalesWaybillOrderResp.RecentSevenDayShipmentVO> resultVOs = new ArrayList<>();
         for (int i = 6; i >= 0; i--) {
-            // 倒序循环:从6天前遍历到今天,保证列表是按时间正序排列
+            // 时间正序排列
             LocalDate date = today.minusDays(i);
-            String dateStr = date.format(formatter);
-
-            // 从 Map 中获取当天的重量,如果没有数据则默认为 0
+            String dateStr = date.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
             BigDecimal weight = dailyWeightMap.getOrDefault(dateStr, BigDecimal.ZERO);
 
-            SalesWaybillOrderResp.RecentSevenDaysShipmentVO vo = new SalesWaybillOrderResp.RecentSevenDaysShipmentVO();
+            SalesWaybillOrderResp.RecentSevenDayShipmentVO vo = new SalesWaybillOrderResp.RecentSevenDayShipmentVO();
             vo.setDate(dateStr);
             vo.setShipmentWeight(weight);
-
             resultVOs.add(vo);
         }
-        salesResp.setRecentSevenDaysShipmentVOs(resultVOs);
+        salesResp.setRecentSevenDayShipmentCountVOs(resultVOs);
     }
 
     /**