longz
2026-08-05 eac80fa4c1bd3af514d91fddee2bd2ac4f609acd
ruoyi-service/ruoyi-order/src/main/java/com/ruoyi/order/mapper/TChargingOrderMapper.java
@@ -110,10 +110,69 @@
    List<Map<String, Object>> enterpriseChargingPeriodCounts(@Param("orderIds") List<Long> orderIds);
    List<TChargingOrderRefund> getRefundList(@Param("pageInfo") PageInfo<TChargingOrderRefund> pageInfo, @Param("data") ChargingRefundDto chargingRefundDto);
    /**
     * 退款列表(分片下推版)。不带 IPage 参数,避免分页拦截器对 UNION 全量 COUNT。
     * 每个 UNION 分支内联 ORDER BY refund_time DESC LIMIT branchLimit(=offset+pageSize),MyCat 可下推到各分片表,
     * 代理层只归并 3×branchLimit 行再按外层 LIMIT offset,pageSize 取页。
     *
     * @param offset      跳过行数(pageCurr-1)×pageSize
     * @param limit       每页行数 pageSize
     * @param branchLimit 每个 UNION 分支的最大取数 offset+pageSize
     */
    List<TChargingOrderRefund> getRefundListPage(@Param("data") ChargingRefundDto chargingRefundDto,
                                                 @Param("offset") long offset, @Param("limit") int limit,
                                                 @Param("branchLimit") int branchLimit);
    List<TChargingOrderRefund> getRefundListWithoutOrderJoin(@Param("pageInfo") PageInfo<TChargingOrderRefund> pageInfo,
                                                             @Param("data") ChargingRefundDto chargingRefundDto);
    /**
     * 退款总数(分片下推版)。三分支分别 COUNT 再 SUM,每个 COUNT 可下推到各分片表。
     */
    long countRefundList(@Param("data") ChargingRefundDto chargingRefundDto);
    /**
     * 退款列表(筛选逆反查版)。serialNumber/siteIds 筛选时先按条件查订单 id(可路由/走索引),
     * 再按各类型订单 id IN 过滤退款表(分片键路由),替代跨分片 LEFT JOIN。
     * type1/type2/type3 订单 id 列表:null = 该类型不过滤;空列表 = 该类型无匹配(返回空)。
     *
     * @param branchLimit 每个 UNION 分支的最大取数 offset+pageSize
     */
    List<TChargingOrderRefund> getRefundListByOrderIds(@Param("data") ChargingRefundDto chargingRefundDto,
                                                       @Param("type1OrderIds") List<Long> type1OrderIds,
                                                       @Param("type2OrderIds") List<Long> type2OrderIds,
                                                       @Param("type3OrderIds") List<Long> type3OrderIds,
                                                       @Param("offset") long offset, @Param("limit") int limit,
                                                       @Param("branchLimit") int branchLimit);
    /**
     * 退款总数(筛选逆反查版),与 getRefundListByOrderIds 同构。
     */
    long countRefundListByOrderIds(@Param("data") ChargingRefundDto chargingRefundDto,
                                   @Param("type1OrderIds") List<Long> type1OrderIds,
                                   @Param("type2OrderIds") List<Long> type2OrderIds,
                                   @Param("type3OrderIds") List<Long> type3OrderIds);
    /**
     * 按支付流水号模糊匹配充电订单 id(t_charging_order 按 app_user_id 分片,recharge_serial_number 走新增索引)。
     */
    List<Long> listChargingOrderIdsBySerialNumber(@Param("serialNumber") String serialNumber,
                                                  @Param("limit") int limit);
    /**
     * 按支付流水号模糊匹配商城订单 id。
     */
    List<Long> listShoppingOrderIdsBySerialNumber(@Param("serialNumber") String serialNumber,
                                                  @Param("limit") int limit);
    /**
     * 按支付流水号模糊匹配会员订单 id。
     */
    List<Long> listVipOrderIdsBySerialNumber(@Param("serialNumber") String serialNumber,
                                             @Param("limit") int limit);
    /**
     * 按站点 id 匹配充电订单 id(t_charging_order 的 site_id 走新增索引)。
     */
    List<Long> listChargingOrderIdsBySiteIds(@Param("siteIds") List<Integer> siteIds,
                                             @Param("limit") int limit);
    List<ChargingOrderGroup> chargingOrderGroup(@Param("chargingPercentProvinceDto") ChargingPercentProvinceDto chargingPercentProvinceDto);
@@ -125,9 +184,9 @@
    List<SixCircleDto> circle(@Param("siteIds") List<Integer> siteIds, @Param("sixBefore") LocalDate sixBefore, @Param("partnerView") Boolean partnerView);
    BigDecimal sumSuccessfulShareAmount(@Param("siteIds") List<Integer> siteIds);
    BigDecimal sumSuccessfulShareAmount(@Param("siteIds") List<Integer> siteIds, @Param("sixBefore") LocalDate sixBefore);
    Map<String, Object> countAll(@Param("siteIds") List<Integer> siteIds, @Param("partnerView") Boolean partnerView);
    Map<String, Object> countAll(@Param("siteIds") List<Integer> siteIds, @Param("partnerView") Boolean partnerView, @Param("sixBefore") LocalDate sixBefore);
    List<Map<String, Object>> chargingOrderShareIncomeByPayChannel(@Param("sixBefore") LocalDate sixBefore, @Param("siteIds") List<Integer> siteIds);
@@ -353,4 +412,55 @@
     */
    List<Map<String, Object>> getAccountSettlementStatement(@Param("startTime") String startTime,
                                                            @Param("endTime") String endTime);
    // ==================== 加盟商看板聚合查询(SQL 聚合下推,替代全量拉订单到 JVM) ====================
    // 均为单表 GROUP BY,MyCat 可把聚合下推到各分片表后由代理合并少量行;不带 IPage 参数。
    // 口径与 TChargingOrderController franchisee* 原 Java 求和逻辑一致。
    /**
     * 按 end_time 日聚合:订单数/金额/服务费/电费/电量/功率/需求满足率/利用率。
     */
    List<FranchiseeDayStat> franchiseeDayStats(@Param("siteIds") List<Integer> siteIds,
                                               @Param("start") LocalDateTime start,
                                               @Param("end") LocalDateTime end);
    /**
     * 功率分布直方图(0-30/30-60/60-120/120-300/300kW以上,按 IFNULL(charging_power, power) 分桶)。
     */
    List<FranchiseePowerBucket> franchiseePowerBuckets(@Param("siteIds") List<Integer> siteIds,
                                                       @Param("start") LocalDateTime start,
                                                       @Param("end") LocalDateTime end);
    /**
     * 尖峰平谷阶段电量(按 charging_order_id IN 路由到对应分片,分组返回 type/电量)。
     */
    List<FranchiseePhaseStat> franchiseePhaseStatsByOrderIds(@Param("orderIds") List<Long> orderIds);
    /**
     * 站点+时间范围内订单 id 列表(仅 id 投影,供尖峰平谷分块反查使用)。
     */
    List<Long> franchiseeOrderIds(@Param("siteIds") List<Integer> siteIds,
                                  @Param("start") LocalDateTime start,
                                  @Param("end") LocalDateTime end);
    /**
     * 用户维度聚合(仅 status=5 已结束订单,按 app_user_id/app_user_car_id/结束日 分组)。
     */
    List<FranchiseeUserAgg> franchiseeUserAggs(@Param("siteIds") List<Integer> siteIds,
                                               @Param("start") LocalDateTime start,
                                               @Param("end") LocalDateTime end);
    /**
     * 流量来源统计(按 tripartite_platform_name 分组,仅 status=5 已结束订单)。
     */
    List<FranchiseeSourceStat> franchiseeTrafficStats(@Param("siteIds") List<Integer> siteIds,
                                                      @Param("start") LocalDateTime start,
                                                      @Param("end") LocalDateTime end);
    /**
     * 按充电枪的需求满足率聚合(含空枪 id 行,服务端过滤)。
     */
    List<FranchiseeGunSat> franchiseeGunSatisfaction(@Param("siteIds") List<Integer> siteIds,
                                                     @Param("start") LocalDateTime start,
                                                     @Param("end") LocalDateTime end);
}