blob: affa9e8fa8f21c080d6a3a32de83c650f1a3194f [file] [log] [blame]
刘嘉昕f28ea232025-04-15 16:55:43 +08001package com.pt5.pthouduan.service;
Sure2338188c5d2025-05-28 11:43:06 +08002import com.pt5.pthouduan.entity.Invites;
刘嘉昕f28ea232025-04-15 16:55:43 +08003import com.pt5.pthouduan.entity.User;
Sure2338188c5d2025-05-28 11:43:06 +08004import com.pt5.pthouduan.mapper.InvitesMapper;
21301050e4db6a92025-06-08 23:42:43 +08005import lombok.extern.java.Log;
Sure2338188c5d2025-05-28 11:43:06 +08006import org.springframework.beans.factory.annotation.Autowired;
7import com.pt5.pthouduan.mapper.UserMapper;
8import org.springframework.stereotype.Service;
9import org.springframework.util.DigestUtils;
10import org.springframework.util.StringUtils;
11import java.security.SecureRandom;
刘嘉昕f28ea232025-04-15 16:55:43 +080012
Sure2338188c5d2025-05-28 11:43:06 +080013import java.util.HashMap;
21301050e4db6a92025-06-08 23:42:43 +080014import java.util.List;
Sure2338188c5d2025-05-28 11:43:06 +080015import java.util.Map;
16import java.util.UUID;
21301050e4db6a92025-06-08 23:42:43 +080017import java.util.stream.Collectors;
刘嘉昕f28ea232025-04-15 16:55:43 +080018
Sure2338188c5d2025-05-28 11:43:06 +080019@Service
20public class UserService {
21 @Autowired
22 private UserMapper userMapper;
23 @Autowired
24 private InvitesMapper invitesMapper;
21301050c519f712025-06-04 17:03:04 +080025 @Autowired
26 private EmailService emailService;
27 //发送验证码
28 public Map<String, Object> sendCode(String email){
29 Map<String, Object> result = new HashMap<>();
30 emailService.sendVerificationCode(email);
31 result.put("success", true);
32 result.put("message", "验证码发送成功");
33 return result;
34 }
Sure2338188c5d2025-05-28 11:43:06 +080035 // 注册业务
21301050c519f712025-06-04 17:03:04 +080036 public Map<String, Object> register(User user,String code,String emailcode) {
Sure2338188c5d2025-05-28 11:43:06 +080037 Map<String, Object> result = new HashMap<>();
刘嘉昕f28ea232025-04-15 16:55:43 +080038
Sure2338188c5d2025-05-28 11:43:06 +080039 // 参数校验
40 if (!StringUtils.hasText(user.getUsername())){
41 result.put("success", false);
42 result.put("message", "用户名不能为空");
43 return result;
44 }
45
46 if (!StringUtils.hasText(user.getPassword())) {
47 result.put("success", false);
48 result.put("message", "密码不能为空");
49 return result;
50 }
51
52 // 检查用户名是否已存在
53 if (userMapper.selectByUsername(user.getUsername()) != null) {
54 result.put("success", false);
55 result.put("message", "用户名已存在");
56 return result;
57 }
58
21301050e4db6a92025-06-08 23:42:43 +080059// // 检查邮箱是否已存在
60// if (userMapper.selectByEmail(user.getEmail()) != null) {
61// result.put("success", false);
62// result.put("message", "邮箱已注册");
63// return result;
64// }
Sure2338188c5d2025-05-28 11:43:06 +080065 //检查邀请码是否有效
21301050e4db6a92025-06-08 23:42:43 +080066 Map<String, Object> invite= invitesMapper.selectByCode(code);
Sure2338188c5d2025-05-28 11:43:06 +080067 if(invite==null){//邀请码不存在
68 result.put("success", false);
69 result.put("message","无效的邀请码");
70 return result;
71 }
21301050e4db6a92025-06-08 23:42:43 +080072 Boolean isused = (Boolean) invite.get("isUsed");
73 if(isused){//邀请码已被使用
Sure2338188c5d2025-05-28 11:43:06 +080074 result.put("success", false);
75 result.put("message","邀请码已被使用");
76 return result;
77 }
21301050c519f712025-06-04 17:03:04 +080078 //邮箱验证码验证
79 if (!emailService.verifyCode(user.getEmail(), emailcode)) {
80 result.put("success", false);
81 result.put("message","验证码错误");
82 return result;
83 }
Sure2338188c5d2025-05-28 11:43:06 +080084 //生成passkey
85 SecureRandom random = new SecureRandom();
86 user.setPasskey(String.valueOf(10000000 + random.nextInt(90000000)));
87 // 保存用户
88 userMapper.insert(user);
89 invitesMapper.updateInviteByCode(code,user.getUsername());
90 result.put("success", true);
91 result.put("message", "注册成功");
92 return result;
93 }
21301050c519f712025-06-04 17:03:04 +080094 //
Sure2338188c5d2025-05-28 11:43:06 +080095
96 // 登录业务
97 public Map<String, Object> login(String username, String password) {
98 Map<String, Object> result = new HashMap<>();
99
21301050e4db6a92025-06-08 23:42:43 +0800100 Map<String, Object> user = userMapper.selectByUsername(username);//首先验证用户名
Sure2338188c5d2025-05-28 11:43:06 +0800101 if (user == null) {
102 result.put("success", false);
103 result.put("message", "用户不存在");
104 return result;
105 }
106
107 //验证密码
21301050e4db6a92025-06-08 23:42:43 +0800108 if(!password.equals(user.get("password"))){
Sure2338188c5d2025-05-28 11:43:06 +0800109 result.put("success", false);
110 result.put("message","密码错误,请检查后重新输入");
111 return result;
112 }
113 // 登录成功,返回用户信息(密码置空)
Sure2338188c5d2025-05-28 11:43:06 +0800114 result.put("success", true);
115 result.put("message", "登录成功");
116 result.put("user", user);
117 return result;
118 }
119 //更新用户等级
120 public Map<String, Object> CalGrade(String username){
121 Map<String, Object> result = new HashMap<>();
122 //上传量+下载量0-500000 一级 510000-2000000 二级 2010000-3500000 三级 3510000-6500000 四级 6500000以上 五级
21301050e4db6a92025-06-08 23:42:43 +0800123 Map<String, Object> user = userMapper.selectByUsername(username);
124 Number downloadNum = (Number) user.get("user_download");
125 long download = downloadNum.longValue();
126 Number uploadNum = (Number) user.get("user_upload");
127 long upload = uploadNum.longValue();
128 int grade=0;
129 if(upload+download<=500000*1024){
130 grade=1;
131 }else if(upload+download<=2000000*1024){
132 grade=2;
133 }else if(upload+download<= 3500000L *1024){
134 grade=3;
135 }else if(upload+download<= 6500000L *1024){
136 grade=4;
137 }else{ grade=5;}
138 userMapper.updateGrade(username,grade);
Sure2338188c5d2025-05-28 11:43:06 +0800139 result.put("success", true);
140 result.put("message", "等级更新成功");
21301050e4db6a92025-06-08 23:42:43 +0800141 result.put("grade", grade);
Sure2338188c5d2025-05-28 11:43:06 +0800142 return result;
143 }
144 //设置性别
145 public Map<String, Object> changesex(String username,String sex){
146 Map<String, Object> result = new HashMap<>();
147 userMapper.updatesex(username,sex);
148 result.put("success", true);
149 result.put("message", "性别设置成功");
150 return result;
151 }
152 //设置头像
153 public Map<String, Object> changeImage(String username,String image){
154 Map<String, Object> result = new HashMap<>();
155 userMapper.updateimage(username,image);
156 result.put("success", true);
157 result.put("message", "头像设置成功");
158 return result;
159 }
160 //更改密码
161 public Map<String, Object> changePassword(String username,String oldpassword,String newpassword){
162 Map<String, Object> result = new HashMap<>();
21301050e4db6a92025-06-08 23:42:43 +0800163 Map<String, Object> user = userMapper.selectByUsername(username);//首先验证用户名
Sure2338188c5d2025-05-28 11:43:06 +0800164 if (user == null) {
165 result.put("success", false);
166 result.put("message", "用户不存在");
167 return result;
168 }
169
170 //验证密码
21301050e4db6a92025-06-08 23:42:43 +0800171 if(!oldpassword.equals(user.get("password"))){
Sure2338188c5d2025-05-28 11:43:06 +0800172 result.put("success", false);
173 result.put("message","密码错误,请检查后重新输入");
174 return result;
175 }
176 //更改数据库中的密码
177 userMapper.updatePassword(username,newpassword);
178 result.put("success", true);
179 result.put("message", "密码重置成功");
180 return result;
181 }
21301050c519f712025-06-04 17:03:04 +0800182 //获取用户信息(前端)
183 public Map<String, Object> UserInfo(String username){
184 Map<String, Object> result = new HashMap<>();
21301050e4db6a92025-06-08 23:42:43 +0800185 Map<String, Object> user = userMapper.selectByUsername(username);
21301050c519f712025-06-04 17:03:04 +0800186 result.put("success", true);
187 result.put("message", "用户信息获取成功");
188 result.put("user", user);
189 return result;
190 }
191 //直接创建用户
21301050e4db6a92025-06-08 23:42:43 +0800192 public Map<String, Object> CreateUser(User user){//用户名、密码、邮箱
21301050c519f712025-06-04 17:03:04 +0800193 Map<String, Object> result = new HashMap<>();
21301050e4db6a92025-06-08 23:42:43 +0800194 SecureRandom random = new SecureRandom();
195 user.setPasskey(String.valueOf(10000000 + random.nextInt(90000000)));
21301050c519f712025-06-04 17:03:04 +0800196 userMapper.insert(user);
197 result.put("success", true);
198 result.put("message", "用户创建成功");
199 return result;
200 }
201 //直接删除用户
202 public Map<String, Object> DeleteUser(String username){
203 Map<String, Object> result = new HashMap<>();
204 userMapper.deleteByUsername(username);
205 result.put("success", true);
206 result.put("message", "用户删除成功");
207 return result;
208 }
21301050e4db6a92025-06-08 23:42:43 +0800209 //获取所有用户
210 public Map<String, Object> getAllUser(){
211 Map<String, Object> result = new HashMap<>();
212 List<Map<String, Object>> users =userMapper.selectAllUsers();
213 result.put("data", users);
214 result.put("success", true);
215 result.put("message", "用户获取成功");
216 return result;
217 }
218 //模糊搜索用户名
219 public Map<String, Object> findUser(String keyword){
220 Map<String, Object> result = new HashMap<>();
221 String regexPattern = keyword.chars()
222 .mapToObj(c -> String.valueOf((char) c))
223 .collect(Collectors.joining(".*"));
224 List<Map<String, Object>> users = userMapper.selectUserByFuzzyKeyword(regexPattern);
225 result.put("data", users);
226 result.put("success", true);
227 result.put("message", "用户查找成功");
228 return result;
229 }
230 //根据用户id返回用户的头像和装饰
231 public Map<String, Object> getDecoration(Long userid){
232 Map<String, Object> result = new HashMap<>();
233 Map<String, Object> info = userMapper.selectdecorationByUserid(userid);
234 result.put("data", info);
235 result.put("success", true);
236 result.put("message", "获取信息成功");
237 return result;
238 }
239 //根据用户名返回用户id
240 public Map<String, Object> getuserid(String username){
241 Map<String, Object> result = new HashMap<>();
242 String userid = userMapper.selectUseridByusername(username);
243 result.put("data",userid);
244 result.put("success", true);
245 result.put("message", "获取信息成功");
246 return result;
247 }
21301050c519f712025-06-04 17:03:04 +0800248
刘嘉昕f28ea232025-04-15 16:55:43 +0800249}