zjk
6 小时以前 a4afcfdb179e62a498b62cc6860d8cd46701a08f
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
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
package com.ruoyi.user.service;
 
import java.util.List;
import com.ruoyi.user.domain.AccountAddress;
import com.ruoyi.user.domain.AccountUser;
import com.ruoyi.user.domain.vo.AccountUserDetailVo;
import com.ruoyi.user.domain.vo.MemberOptionVo;
import com.ruoyi.user.domain.vo.AccountInviteeVo;
import com.ruoyi.user.domain.vo.AccountReferrerVo;
import com.ruoyi.user.domain.vo.AccountUserInfoVo;
import com.ruoyi.user.domain.vo.InviteCodeVo;
 
/**
 * 会员用户 业务层
 *
 * @author ruoyi
 */
public interface IAccountUserService
{
    /**
     * 根据会员ID查询
     */
    public AccountUser selectAccountUserById(Long userId);
 
    /**
     * 根据手机号查询会员
     */
    public AccountUser selectAccountUserByPhone(String phone);
 
    /**
     * 查询会员列表
     */
    public List<AccountUser> selectAccountUserList(AccountUser accountUser);
 
    /**
     * 校验用户名是否唯一
     *
     * @return true 唯一,false 已存在
     */
    public boolean checkUsernameUnique(AccountUser accountUser);
 
    /**
     * 校验手机号是否唯一
     */
    public boolean checkPhoneUnique(AccountUser accountUser);
 
    /**
     * 新增会员(密码加密后落库)
     */
    public int insertAccountUser(AccountUser accountUser);
 
    /**
     * 修改会员(密码为空则不改密码)
     */
    public int updateAccountUser(AccountUser accountUser);
 
    /**
     * 批量逻辑删除会员
     */
    public int deleteAccountUserByIds(Long[] userIds);
 
    /**
     * 查询会员详情
     *
     * 一次取回详情页各 Tab 所需数据:会员本体(含推荐人/供货人派生列)、
     * 认证资料、收货地址、签署协议、云仓库存。
     */
    public AccountUserDetailVo selectAccountUserDetail(Long userId);
 
    /**
     * 修改推荐人/供货人关系(绑定时间由服务端决定,不取信前端传值)
     *
     * 指定新供货人时会校验其等级严格高于该会员,非法取值直接抛 ServiceException。
     */
    public int updateAccountUserRelation(AccountUser accountUser);
 
    /**
     * 搜索可指定为供货人的会员(等级严格高于该会员,最多 20 条)
     *
     * 供详情页「修改供货人」弹窗的下拉使用。与 updateAccountUserRelation 的校验同源,
     * 都取 AccountUser 里的等级顺序定义。
     */
    public List<MemberOptionVo> searchSupplierCandidates(Long userId, String keyword);
 
    /**
     * 修改账户状态
     */
    public int changeStatus(AccountUser accountUser);
 
    /**
     * 修改收货地址
     *
     * 置为默认时须先清除同会员其它地址的默认标记,两条语句必须同事务。
     */
    public int updateAccountAddress(AccountAddress accountAddress);
 
    /**
     * 批量逻辑删除收货地址
     */
    public int deleteAccountAddressByIds(Long[] ids);
 
    /**
     * C端:查询本人收货地址列表(默认地址在前,不分页)
     *
     * @param userId 会员ID(取自登录态,非前端传入)
     * @return 地址列表(无地址返回空集合)
     */
    public List<AccountAddress> getAddressList(Long userId);
 
    /**
     * C端:查询单条收货地址(编辑页回填用)
     *
     * 校验归属:地址不存在或不属于该会员时抛业务异常。
     *
     * @param userId 会员ID(取自登录态)
     * @param id     地址ID
     * @return 地址对象
     */
    public AccountAddress getAddressDetail(Long userId, Long id);
 
    /**
     * C端:新增本人收货地址
     *
     * 事务内处理「首条地址自动默认」与「每会员至多一条默认」约束。
     *
     * @param accountAddress 地址入参(userId 由服务端注入)
     * @return 影响行数
     */
    public int insertMyAddress(AccountAddress accountAddress);
 
    /**
     * C端:删除本人收货地址(校验归属后逻辑删除)
     *
     * @param userId 会员ID(取自登录态)
     * @param id     地址ID
     * @return 影响行数
     */
    public int deleteMyAddress(Long userId, Long id);
 
    /**
     * C端会员注册
     *
     * 校验手机号未注册、推荐码有效后,生成唯一推荐码并落库(无密码)。
     *
     * @param phone 手机号
     * @param referralCode 推荐人本人的推荐码
     * @return 注册成功后的会员信息(含生成的 userId 与 myReferralCode)
     */
    public AccountUser registerMember(String phone, String referralCode);
 
    /**
     * 查询C端会员个人中心信息(昵称 / 头像 / 会员等级 / 收益汇总)
     *
     * @param userId 会员ID(取自登录态,非前端传入)
     * @return 会员信息展示对象;会员不存在时抛业务异常
     */
    public AccountUserInfoVo getAccountUserInfo(Long userId);
 
    /**
     * 更新C端会员头像
     *
     * 头像文件由小程序直传文件服务后,将返回的 url 写回 account_user.avatar;
     * 只更新 avatar 一列,不触碰其它资料。
     *
     * @param userId 会员ID(取自登录态,非前端传入)
     * @param avatarUrl 头像地址(来自文件服务上传结果)
     */
    public void updateAvatar(Long userId, String avatarUrl);
 
    /**
     * 查询本人邀请码(我的邀请页「邀请码」Tab)
     *
     * @param userId 会员ID(取自登录态,非前端传入)
     * @return 邀请码展示对象;会员不存在时抛业务异常
     */
    public InviteCodeVo getInviteCode(Long userId);
 
    /**
     * 查询本人直接下级(被邀请人)列表(我的邀请页「我邀请的」Tab)
     *
     * 按绑定时间倒序(最新在前);手机号脱敏下发;配合 Controller 的分页生效。
     *
     * @param userId 会员ID(取自登录态,非前端传入)
     * @return 被邀请人列表(无下级时返回空集合)
     */
    public List<AccountInviteeVo> getInvitees(Long userId);
 
    /**
     * 查询本人上级(推荐人)信息(我的邀请页「邀请我的」Tab)
     *
     * @param userId 会员ID(取自登录态,非前端传入)
     * @return 上级展示对象;无上级时返回各字段为 null 的对象(前端渲染空态)
     */
    public AccountReferrerVo getReferrer(Long userId);
}