package com.ruoyi.user.mapper; import java.util.Date; import java.util.List; import org.apache.ibatis.annotations.Param; import com.ruoyi.user.domain.vo.PartnerEarningStatVo; import com.ruoyi.user.domain.vo.PartnerInviteStatVo; import com.ruoyi.user.domain.vo.PartnerSalesStatVo; import com.ruoyi.user.domain.vo.PartnerSubAccountStatVo; import com.ruoyi.user.domain.vo.PartnerSubAccountVo; /** * 服务商首页概览 数据层 * * 全部聚合均以 account_user.supplier_id = #{providerUserId} 圈定「名下子账号」范围, * 命中既有索引 idx_account_user_supplier / idx_earning_user_time / * idx_sales_seller_time / idx_purchase_user_time; * 时间区间由 Service 侧算好传入,避免 SQL 内做日期方言运算。 * * @author hugray */ public interface AccountPartnerMapper { /** * 聚合子账号总数 / L1-L3 等级分布 / 当月与上月新增绑定数(单条 SQL 取回,避免多次数据库往返) * * 三者同源 account_user(同 where 条件),故合并为一条 SQL。 * * @param providerUserId 服务商账号ID * @param monthStart 当月起始(含) * @param nextMonthStart 次月起始(不含) * @param prevMonthStart 上月起始(含) * @return 子账号统计(无数据时各栏为 0) */ public PartnerSubAccountStatVo selectSubAccountStat(@Param("providerUserId") Long providerUserId, @Param("monthStart") Date monthStart, @Param("nextMonthStart") Date nextMonthStart, @Param("prevMonthStart") Date prevMonthStart); /** * 聚合名下子账号当月与上月收益合计(来自 account_earning_record) * * @param providerUserId 服务商账号ID * @param monthStart 当月起始(含) * @param nextMonthStart 次月起始(不含) * @param prevMonthStart 上月起始(含) * @return 收益合计(单位:分;无流水时各栏为 0) */ public PartnerEarningStatVo selectEarningMonthStat(@Param("providerUserId") Long providerUserId, @Param("monthStart") Date monthStart, @Param("nextMonthStart") Date nextMonthStart, @Param("prevMonthStart") Date prevMonthStart); /** * 聚合名下子账号当月销售额与销售单数(来自 account_sales_record) * * @param providerUserId 服务商账号ID * @param monthStart 当月起始(含) * @param nextMonthStart 次月起始(不含) * @return 销售额(分)与单数(无流水时各栏为 0) */ public PartnerSalesStatVo selectSalesMonthStat(@Param("providerUserId") Long providerUserId, @Param("monthStart") Date monthStart, @Param("nextMonthStart") Date nextMonthStart); /** * 聚合名下子账号当月进货额(来自 account_purchase_order) * * @param providerUserId 服务商账号ID * @param monthStart 当月起始(含) * @param nextMonthStart 次月起始(不含) * @return 进货额(单位:分;无流水时为 0) */ public Long selectPurchaseMonthAmount(@Param("providerUserId") Long providerUserId, @Param("monthStart") Date monthStart, @Param("nextMonthStart") Date nextMonthStart); /** * 聚合当月新邀请总数与等级分布(推荐人 ∈ 本服务商体系) * * 推荐人范围含服务商本人与名下全部子账号;时间按被邀请会员的 referrer_bind_time 归月。 * * @param providerUserId 服务商账号ID * @param monthStart 当月起始(含) * @param nextMonthStart 次月起始(不含) * @return 新邀请总数与 C/L1/L2/L3 分布(无数据时各栏为 0) */ public PartnerInviteStatVo selectInviteMonthStat(@Param("providerUserId") Long providerUserId, @Param("monthStart") Date monthStart, @Param("nextMonthStart") Date nextMonthStart); /** * 查询名下子账号列表(供「子账号管理」分页使用) * * 范围:supplier_id = 当前服务商、del_flag = '0'、system_level ∈ {L1,L2,L3}; * level 非空时再按等级过滤(仅接受 L1/L2/L3,非法值由服务层归一为全部); * keyword 非空时按昵称/手机号模糊匹配(通配符已由服务层转义); * 按 user_id 倒序(新开通在前)。分页由 Controller 侧 startPage() 织入,语句本身不挂 join, * 避免干扰 PageHelper 的 count SQL。 * * @param providerUserId 服务商账号ID * @param level 等级筛选(可空;L1/L2/L3) * @param keyword 昵称/手机号搜索关键字(可空;已转义 like 通配符) * @return 子账号列表(分页) */ public List selectSubAccountList(@Param("providerUserId") Long providerUserId, @Param("level") String level, @Param("keyword") String keyword); /** * 统计名下子账号各等级已开通数(供剩余额度计算) * * 与列表同一口径(supplier_id + del_flag = '0' + system_level ∈ {L1,L2,L3}), * 只为取 l1/l2/l3 计数,故不涉及月份区间列。 * * @param providerUserId 服务商账号ID * @return 各等级已开通数(无数据时各栏为 0) */ public PartnerSubAccountStatVo selectSubAccountLevelCount(@Param("providerUserId") Long providerUserId); }