package com.ruoyi.order.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.common.core.dto.ChargingOrderGroup; import com.ruoyi.common.core.dto.ChargingPercentProvinceDto; import com.ruoyi.common.core.web.page.PageInfo; import com.ruoyi.order.api.model.ChargingListQuery; import com.ruoyi.order.api.model.TChargingOrder; import com.ruoyi.order.api.model.TChargingOrderRefund; import com.ruoyi.order.api.model.TOrderInvoiceDetail; import com.ruoyi.order.api.query.ChargingOrderQuery; import com.ruoyi.order.api.vo.ChargingOrderListVO; import com.ruoyi.order.api.vo.ChargingOrderVO; import com.ruoyi.order.api.vo.ChargingOrderBalanceIncomeDetailVO; import com.ruoyi.order.api.vo.TChargingOrderVo; import com.ruoyi.order.dto.*; import com.ruoyi.order.vo.LargeChargingPowerVo; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import java.math.BigDecimal; import java.time.LocalDate; import java.time.LocalDateTime; import java.util.List; import java.util.Map; /** *

* Mapper 接口 *

* * @author xiaochen * @since 2024-08-07 */ @Mapper public interface TChargingOrderMapper extends BaseMapper { /** * 获取小程序充电记录列表数据 * * @param appUserId * @param type * @param pageCurr * @param pageSize * @return */ List getMyChargingOrderList(@Param("appUserId") Long appUserId, @Param("type") Integer type, @Param("pageCurr") Integer pageCurr, @Param("pageSize") Integer pageSize); /** * 获取待开票订单列表 * * @param month 筛选时间2024-01-01 * @param pageCurr * @param pageSize * @return */ List getNoInvoicedOrder(@Param("appUserId") Long appUserId, @Param("month") String month, @Param("pageCurr") Integer pageCurr, @Param("pageSize") Integer pageSize); List chargingOrder(@Param("req") ChargingOrderQuery dto, @Param("startTime1") String startTime1, @Param("startTime2") String startTime2, @Param("endTime1") String endTime1, @Param("endTime2") String endTime11, @Param("offset") long offset, @Param("pageSize") long pageSize); long chargingOrderCount(@Param("req") ChargingOrderQuery dto, @Param("startTime1") String startTime1, @Param("startTime2") String startTime2, @Param("endTime1") String endTime1, @Param("endTime2") String endTime11); Map chargingOrderBaseSummary(@Param("req") ChargingOrderQuery dto, @Param("startTime1") String startTime1, @Param("startTime2") String startTime2, @Param("endTime1") String endTime1, @Param("endTime2") String endTime11); Map chargingOrderNolimit(@Param("req") ChargingOrderQuery dto, @Param("startTime1") String startTime1, @Param("startTime2") String startTime2, @Param("endTime1") String endTime1, @Param("endTime2") String endTime11); Map chargingOrderFundSummary(@Param("req") ChargingOrderQuery dto, @Param("startTime1") String startTime1, @Param("startTime2") String startTime2, @Param("endTime1") String endTime1, @Param("endTime2") String endTime11); List chargingOrderSummaryOrderIds(@Param("req") ChargingOrderQuery dto, @Param("startTime1") String startTime1, @Param("startTime2") String startTime2, @Param("endTime1") String endTime1, @Param("endTime2") String endTime11); Map exchangeCodeBalanceSummary(@Param("orderIds") List orderIds); List> exchangeCodeBalanceIncomeByOrderIds(@Param("orderIds") List orderIds); List exchangeCodeBalanceIncomeDetail(@Param("orderIds") List orderIds); List> chargingOrderShareIncomeByOrderIds(@Param("orderIds") List orderIds); Map chargingOrderShareIncomeSummaryByOrderIds(@Param("orderIds") List orderIds); List payOrderQuery(@Param("pageInfo") PageInfo pageInfo, @Param("data") PayOrderQueryDto payOrderQueryDto); /** * 企业用户充电分析 —— 企业发票行(t_order_invoice 单表,无跨分片 JOIN)。 * 只按抬头级别条件过滤(名称/税号/抬头类型/状态),站点等订单级条件在 Service 层经 * enterpriseAnalysisMatchingOrderIds 过滤订单后再归并。 */ List enterpriseInvoiceRows(@Param("data") EnterpriseChargingAnalysisQuery query); /** * 企业发票充电明细(t_order_invoice_detail 按 order_invoice_id 分片,IN 可直接路由)。 */ List enterpriseInvoiceDetailRows(@Param("invoiceIds") List invoiceIds); /** * 企业分析命中订单 id(co.id IN + 订单级条件,co 按 app_user_id 分片但 id IN 可广播走主键)。 * 仅当存在订单级筛选(站点/时间等)时调用。 */ List enterpriseAnalysisMatchingOrderIds(@Param("orderIds") List orderIds, @Param("data") EnterpriseChargingAnalysisQuery query); /** * 企业分析充电订单数据(id IN 走主键,取 start_time/site_id)。 */ List enterpriseAnalysisChargingOrders(@Param("orderIds") List orderIds); /** * 企业分析站点名(charging_pile_service.t_site 单表,id IN)。 */ List enterpriseAnalysisSites(@Param("siteIds") List siteIds); List enterpriseInvoiceIds(@Param("data") EnterpriseChargingAnalysisQuery query); List enterpriseInvoiceChargingDetails(@Param("invoiceIds") List invoiceIds); Long enterpriseChargingDetailCount(@Param("orderIds") List orderIds, @Param("data") EnterpriseChargingAnalysisQuery query); List enterpriseChargingDetail(@Param("orderIds") List orderIds, @Param("data") EnterpriseChargingAnalysisQuery query, @Param("offset") long offset, @Param("pageSize") long pageSize); List> enterpriseChargingPeriodCounts(@Param("orderIds") List orderIds); /** * 退款列表(分片下推版)。不带 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 getRefundListPage(@Param("data") ChargingRefundDto chargingRefundDto, @Param("offset") long offset, @Param("limit") int limit, @Param("branchLimit") int branchLimit); /** * 退款总数(分片下推版)。三分支分别 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 getRefundListByOrderIds(@Param("data") ChargingRefundDto chargingRefundDto, @Param("type1OrderIds") List type1OrderIds, @Param("type2OrderIds") List type2OrderIds, @Param("type3OrderIds") List type3OrderIds, @Param("offset") long offset, @Param("limit") int limit, @Param("branchLimit") int branchLimit); /** * 退款总数(筛选逆反查版),与 getRefundListByOrderIds 同构。 */ long countRefundListByOrderIds(@Param("data") ChargingRefundDto chargingRefundDto, @Param("type1OrderIds") List type1OrderIds, @Param("type2OrderIds") List type2OrderIds, @Param("type3OrderIds") List type3OrderIds); /** * 按支付流水号模糊匹配充电订单 id(t_charging_order 按 app_user_id 分片,recharge_serial_number 走新增索引)。 */ List listChargingOrderIdsBySerialNumber(@Param("serialNumber") String serialNumber, @Param("limit") int limit); /** * 按支付流水号模糊匹配商城订单 id。 */ List listShoppingOrderIdsBySerialNumber(@Param("serialNumber") String serialNumber, @Param("limit") int limit); /** * 按支付流水号模糊匹配会员订单 id。 */ List listVipOrderIdsBySerialNumber(@Param("serialNumber") String serialNumber, @Param("limit") int limit); /** * 按站点 id 匹配充电订单 id(t_charging_order 的 site_id 走新增索引)。 */ List listChargingOrderIdsBySiteIds(@Param("siteIds") List siteIds, @Param("limit") int limit); List chargingOrderGroup(@Param("chargingPercentProvinceDto") ChargingPercentProvinceDto chargingPercentProvinceDto); List chargePartner(@Param("sixBefore") String sixBefore, @Param("siteIds") List siteIds); List chargeSettlement(@Param("sixBefore") String sixBefore, @Param("siteIds") List siteIds); List chargeOrderHistory(@Param("sixBefore") String sixBefore, @Param("siteIds") List siteIds); List chargeCurrentMonth(@Param("siteIdsCsv") String siteIdsCsv); List circle(@Param("siteIds") List siteIds, @Param("sixBefore") LocalDate sixBefore, @Param("partnerView") Boolean partnerView); BigDecimal sumSuccessfulShareAmount(@Param("siteIds") List siteIds, @Param("sixBefore") LocalDate sixBefore); Map countAll(@Param("siteIds") List siteIds, @Param("partnerView") Boolean partnerView, @Param("sixBefore") LocalDate sixBefore); List> chargingOrderShareIncomeByPayChannel(@Param("sixBefore") LocalDate sixBefore, @Param("siteIds") List siteIds); List> getSumByType(@Param("start") LocalDateTime start, @Param("end") LocalDateTime end, @Param("siteIds") List siteIds); List> getDateData(@Param("start") LocalDateTime start, @Param("end") LocalDateTime end, @Param("siteIds") List siteIds); List> getWeekData(@Param("start") LocalDateTime start, @Param("end") LocalDateTime end, @Param("siteIds") List siteIds); List> getMonthData(@Param("start") LocalDateTime start, @Param("end") LocalDateTime end, @Param("siteIds") List siteIds); List> getYearData(@Param("start") LocalDateTime start, @Param("end") LocalDateTime end, @Param("siteIds") List siteIds); List chargingList(@Param("req") ChargingListQuery dto, @Param("startTime1") String startTime1, @Param("startTime2") String startTime2, @Param("endTime1") String endTime1, @Param("endTime2") String endTime2); List> chargingList1(@Param("pageInfo") PageInfo pageInfo, @Param("req") ChargingListQuery dto, @Param("startTime1") String startTime1, @Param("startTime2") String startTime2, @Param("endTime1") String endTime1, @Param("endTime2") String endTime2); List> chargingListAccountingSummary(@Param("orderIds") List orderIds); Map chargingListSum(@Param("req") ChargingListQuery dto, @Param("startTime1") String startTime1, @Param("startTime2") String startTime2, @Param("endTime1") String endTime1, @Param("endTime2") String endTime2); List chargingListSummaryOrderIds(@Param("req") ChargingListQuery dto, @Param("startTime1") String startTime1, @Param("startTime2") String startTime2, @Param("endTime1") String endTime1, @Param("endTime2") String endTime2); List chargingListNoPage(@Param("req") ChargingListQuery dto, @Param("startTime1") String startTime1, @Param("startTime2") String startTime2, @Param("endTime1") String endTime1, @Param("endTime2") String endTime2); List> getByDate(@Param("start") LocalDateTime start, @Param("end") LocalDateTime end, @Param("siteIds") List siteIds); List> queryPower(@Param("siteIds") List siteIds); Map queryPowerLevel(@Param("siteIds") List siteIds, @Param("statisticsQueryDto") ChargingStatisticsQueryDto statisticsQueryDto); List> usersDay(@Param("statisticsQueryDto") ChargingStatisticsQueryDto statisticsQueryDto); List> usersDay1(); List> usersByQuery(@Param("statisticsQueryDto") ChargingStatisticsQueryDto statisticsQueryDto); List> usersByQuery1(@Param("statisticsQueryDto") ChargingStatisticsQueryDto statisticsQueryDto); List> getUserTagCount(); List> getVipCount(); List> unitConsumption(@Param("statisticsQueryDto") ChargingStatisticsQueryDto statisticsQueryDto); List> carUserMethod(); List> carUserBrand(); Map countLocalCar(); Double getAver(@Param("siteIds") List siteIds); List> getLevelEvaluate(@Param("siteIds") List siteIds); List> countBySource(@Param("siteIds") List siteIds, @Param("statisticsQueryDto") ChargingStatisticsQueryDto statisticsQueryDto); List> equipmentUserType1(@Param("siteIds") List siteIds, @Param("statisticsQueryDto") ChargingStatisticsQueryDto statisticsQueryDto); List> equipmentUserType2(@Param("siteIds") List siteIds, @Param("statisticsQueryDto") ChargingStatisticsQueryDto statisticsQueryDto); List> equipmentMapbroke1(@Param("siteIds") List siteIds, @Param("statisticsQueryDto") ChargingStatisticsQueryDto statisticsQueryDto); List> equipmentMapbroke2(@Param("siteIds") List siteIds, @Param("statisticsQueryDto") ChargingStatisticsQueryDto statisticsQueryDto); List> equipmentMapOut1(@Param("siteIds") List siteIds, @Param("statisticsQueryDto") ChargingStatisticsQueryDto statisticsQueryDto); List> equipmentMapOut2(@Param("siteIds") List siteIds, @Param("statisticsQueryDto") ChargingStatisticsQueryDto statisticsQueryDto); List> needElec(@Param("siteIds") List siteIds, @Param("statisticsQueryDto") ChargingStatisticsQueryDto statisticsQueryDto); Map getChargingOrderCount(@Param("siteIds") List siteIds, @Param("time") String time); Map getLargeScreenSummary(@Param("siteIds") List siteIds); // ==================== 大屏预聚合表 t_large_screen_site_stat ==================== // 任务用: 按月切片聚合(与 getLargeScreenSummary 相同口径, 按站点分组) List> monthSliceAgg(@Param("startTime") String startTime, @Param("endTime") String endTime); // 任务用: 按月切片统计充电用户数(工作台口径: 所有订单的去重用户, 不区分状态/删除标记) List> monthSliceUserAgg(@Param("startTime") String startTime, @Param("endTime") String endTime); // 任务用: 按时间切片取 (site_id, app_user_id) 对(所有订单) List> userSitePairsAgg(@Param("startTime") String startTime, @Param("endTime") String endTime); // 任务用: 批量写入用户-站点对(幂等) int insertUserSitePairs(@Param("rows") List> rows); // 接口用: 充电用户数精确去重(对表) Long userCountFromStat(@Param("siteIds") List siteIds); // 任务用: 对表行数(启动回填判断) Long userSiteTableCount(); // 任务用: 按日切片聚合(与 getLargeScreenChargingPower 相同口径, 按站点分组) List> daySliceAgg(@Param("startTime") String startTime, @Param("endTime") String endTime); // 任务用: 注册用户总数 Long globalRegisteredUsers(); // 任务用: 批量写入聚合行(REPLACE INTO) int replaceSiteStatBatch(@Param("rows") List> rows); // 任务用: 表行数(判断是否需要启动回填) Long statTableCount(); // 接口用: 累计指标(M 行汇总) Map summaryFromStat(@Param("siteIds") List siteIds); // 接口用: 近 N 月收入趋势(M 行按 period 分组) List incomeTrendFromStat(@Param("siteIds") List siteIds, @Param("sixBefore") String sixBefore); List incomeTrendFromOrders(@Param("siteIds") List siteIds, @Param("startTime") String startTime, @Param("endTime") String endTime); // 接口用: 日功率曲线(D 行按 period 分组) List> powerFromStat(@Param("siteIds") List siteIds, @Param("dayStart") String dayStart, @Param("dayEnd") String dayEnd); // 接口用: 注册用户数(G 行) Long registeredFromStat(); // 接口用: 大屏累计充电量(M 行汇总, 与 summaryFromStat 同源) BigDecimal capacityFromStat(@Param("siteIds") List siteIds); SixChargingDto getLargeScreenSettlementIncome(@Param("siteIdsCsv") String siteIdsCsv, @Param("startTime") String startTime, @Param("endTime") String endTime); SixChargingDto getLargeScreenCurrentMonthIncome(@Param("siteIdsCsv") String siteIdsCsv, @Param("startTime") String startTime, @Param("endTime") String endTime); Map getLargeScreenChargingPower(@Param("siteIdsCsv") String siteIdsCsv, @Param("startTime") String startTime, @Param("endTime") String endTime); List> getHourType(@Param("siteIds") List siteIds, @Param("statisticsQueryDto") ChargingDetailQueryDto statisticsQueryDto); List> getDateType(@Param("siteIds") List siteIds, @Param("statisticsQueryDto") ChargingDetailQueryDto statisticsQueryDto); List> getMonthType(@Param("siteIds") List siteIds, @Param("statisticsQueryDto") ChargingDetailQueryDto statisticsQueryDto); List> getchargingCapacity(@Param("siteIds") List siteIds, @Param("statisticsQueryDto") ChargingDetailQueryDto statisticsQueryDto); List> countAllUserData(); List> needElec1(@Param("siteIds") List siteIds, @Param("statisticsQueryDto") ChargingStatisticsQueryDto statisticsQueryDto); Long countNoTag(); Long countCar(@Param("brands") List brands); Long countOrdersInRangeByGunIds(@Param("startTime") LocalDateTime startTime, @Param("endTime") LocalDateTime endTime, @Param("gunIds") List gunIds); Double getSumDegreeBySiteIds(@Param("siteIds") List siteIds); List getAppUserIdsBySiteIds(@Param("siteIds") List siteIds); /** * 获取启动失败且时间超过1小时的订单 * * @return */ List findFailedStartupOrder(); /** * 获取停止中的数据 * * @return */ List findStoppedOrder(); /** * 获取充电中的订单 * * @return */ List findChargingOrder(); /** * 获取已结束的数据 * * @return */ List findEndChargingOrder(); /** * 获取需要手动修改订单状态的数据 * * @return */ List findUpStatusChargingOrder(); /** * 查询充电算账单数据 * * @param startTime * @param endTime */ List> getChargingSettlementBill(@Param("startTime") String startTime, @Param("endTime") String endTime, @Param("dateType") Integer dateType); List> queryChargingBillIncome(@Param("billingCycles") List billingCycles, @Param("dateType") Integer dateType, @Param("siteIds") List siteIds); /** * 查询账户结算账单数据 * * @param startTime * @param endTime */ List> getAccountSettlementStatement(@Param("startTime") String startTime, @Param("endTime") String endTime); // ==================== 加盟商看板聚合查询(SQL 聚合下推,替代全量拉订单到 JVM) ==================== // 均为单表 GROUP BY,MyCat 可把聚合下推到各分片表后由代理合并少量行;不带 IPage 参数。 // 口径与 TChargingOrderController franchisee* 原 Java 求和逻辑一致。 /** * 按 end_time 日聚合:订单数/金额/服务费/电费/电量/功率/需求满足率/利用率。 */ List franchiseeDayStats(@Param("siteIds") List siteIds, @Param("start") LocalDateTime start, @Param("end") LocalDateTime end); /** * 功率分布直方图(0-30/30-60/60-120/120-300/300kW以上,按 IFNULL(charging_power, power) 分桶)。 */ List franchiseePowerBuckets(@Param("siteIds") List siteIds, @Param("start") LocalDateTime start, @Param("end") LocalDateTime end); /** * 尖峰平谷阶段电量(按 charging_order_id IN 路由到对应分片,分组返回 type/电量)。 */ List franchiseePhaseStatsByOrderIds(@Param("orderIds") List orderIds); /** * 站点+时间范围内订单 id 列表(仅 id 投影,供尖峰平谷分块反查使用)。 */ List franchiseeOrderIds(@Param("siteIds") List siteIds, @Param("start") LocalDateTime start, @Param("end") LocalDateTime end); /** * 用户维度聚合(仅 status=5 已结束订单,按 app_user_id/app_user_car_id/结束日 分组)。 */ List franchiseeUserAggs(@Param("siteIds") List siteIds, @Param("start") LocalDateTime start, @Param("end") LocalDateTime end); /** * 平台新增用户按注册日聚合(全平台口径,t_app_user.create_time,跨库)。 */ List franchiseeNewUserStats(@Param("start") LocalDateTime start, @Param("end") LocalDateTime end); /** * 流量来源统计(按 tripartite_platform_name 分组,仅 status=5 已结束订单)。 */ List franchiseeTrafficStats(@Param("siteIds") List siteIds, @Param("start") LocalDateTime start, @Param("end") LocalDateTime end); /** * 按充电枪的需求满足率聚合(含空枪 id 行,服务端过滤)。 */ List franchiseeGunSatisfaction(@Param("siteIds") List siteIds, @Param("start") LocalDateTime start, @Param("end") LocalDateTime end); }