liujie
15 小时以前 fddf3d913d47f391f84f9e460cb76d427ef02c44
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
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<PartnerSubAccountVo> 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);
}