|
@@ -1,41 +1,39 @@
|
|
|
package com.ruoyi.web.controller.system;
|
|
|
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
-import com.ruoyi.common.utils.DateUtils;
|
|
|
-import com.ruoyi.generator.domain.Community.CommunityUserInfo;
|
|
|
-import com.ruoyi.generator.mapper.community.CommunityUserInfoMapper;
|
|
|
-import org.springframework.beans.factory.annotation.Autowired;
|
|
|
-import org.springframework.web.bind.annotation.GetMapping;
|
|
|
-import org.springframework.web.bind.annotation.PostMapping;
|
|
|
-import org.springframework.web.bind.annotation.PutMapping;
|
|
|
-import org.springframework.web.bind.annotation.RequestBody;
|
|
|
-import org.springframework.web.bind.annotation.RequestMapping;
|
|
|
-import org.springframework.web.bind.annotation.RequestParam;
|
|
|
-import org.springframework.web.bind.annotation.RestController;
|
|
|
-import org.springframework.web.multipart.MultipartFile;
|
|
|
import com.ruoyi.common.annotation.Log;
|
|
|
import com.ruoyi.common.config.RuoYiConfig;
|
|
|
+import com.ruoyi.common.constant.CacheConstants;
|
|
|
import com.ruoyi.common.core.controller.BaseController;
|
|
|
import com.ruoyi.common.core.domain.AjaxResult;
|
|
|
import com.ruoyi.common.core.domain.entity.SysUser;
|
|
|
import com.ruoyi.common.core.domain.model.LoginUser;
|
|
|
+import com.ruoyi.common.core.redis.RedisCache;
|
|
|
import com.ruoyi.common.enums.BusinessType;
|
|
|
+import com.ruoyi.common.exception.user.CaptchaException;
|
|
|
+import com.ruoyi.common.exception.user.CaptchaExpireException;
|
|
|
+import com.ruoyi.common.exception.user.CaptchaNullException;
|
|
|
+import com.ruoyi.common.utils.DateUtils;
|
|
|
import com.ruoyi.common.utils.SecurityUtils;
|
|
|
import com.ruoyi.common.utils.StringUtils;
|
|
|
import com.ruoyi.common.utils.file.FileUploadUtils;
|
|
|
import com.ruoyi.common.utils.file.MimeTypeUtils;
|
|
|
import com.ruoyi.framework.web.service.TokenService;
|
|
|
+import com.ruoyi.generator.domain.Community.CommunityUserInfo;
|
|
|
+import com.ruoyi.generator.mapper.community.CommunityUserInfoMapper;
|
|
|
import com.ruoyi.system.service.ISysUserService;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.web.bind.annotation.*;
|
|
|
+import org.springframework.web.multipart.MultipartFile;
|
|
|
|
|
|
/**
|
|
|
* 个人信息 业务处理
|
|
|
- *
|
|
|
+ *
|
|
|
* @author ruoyi
|
|
|
*/
|
|
|
@RestController
|
|
|
@RequestMapping("/system/user/profile")
|
|
|
-public class SysProfileController extends BaseController
|
|
|
-{
|
|
|
+public class SysProfileController extends BaseController {
|
|
|
@Autowired
|
|
|
private ISysUserService userService;
|
|
|
|
|
@@ -45,12 +43,14 @@ public class SysProfileController extends BaseController
|
|
|
@Autowired
|
|
|
private CommunityUserInfoMapper communityUserInfoMapper;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private RedisCache redisCache;
|
|
|
+
|
|
|
/**
|
|
|
* 个人信息
|
|
|
*/
|
|
|
@GetMapping
|
|
|
- public AjaxResult profile()
|
|
|
- {
|
|
|
+ public AjaxResult profile() {
|
|
|
LoginUser loginUser = getLoginUser();
|
|
|
SysUser user = loginUser.getUser();
|
|
|
AjaxResult ajax = AjaxResult.success(user);
|
|
@@ -64,8 +64,7 @@ public class SysProfileController extends BaseController
|
|
|
*/
|
|
|
@Log(title = "个人信息", businessType = BusinessType.UPDATE)
|
|
|
@PutMapping
|
|
|
- public AjaxResult updateProfile(@RequestBody SysUser user)
|
|
|
- {
|
|
|
+ public AjaxResult updateProfile(@RequestBody SysUser user) {
|
|
|
LoginUser loginUser = getLoginUser();
|
|
|
SysUser currentUser = loginUser.getUser();
|
|
|
currentUser.setNickName(user.getNickName());
|
|
@@ -73,17 +72,14 @@ public class SysProfileController extends BaseController
|
|
|
currentUser.setPhonenumber(user.getPhonenumber());
|
|
|
currentUser.setSex(user.getSex());
|
|
|
currentUser.setProfile(user.getProfile());
|
|
|
- if (StringUtils.isNotEmpty(user.getPhonenumber()) && !userService.checkPhoneUnique(currentUser))
|
|
|
- {
|
|
|
+ if (StringUtils.isNotEmpty(user.getPhonenumber()) && !userService.checkPhoneUnique(currentUser)) {
|
|
|
return error("修改用户'" + loginUser.getUsername() + "'失败,手机号码已存在");
|
|
|
}
|
|
|
- if (StringUtils.isNotEmpty(user.getEmail()) && !userService.checkEmailUnique(currentUser))
|
|
|
- {
|
|
|
+ if (StringUtils.isNotEmpty(user.getEmail()) && !userService.checkEmailUnique(currentUser)) {
|
|
|
return error("修改用户'" + loginUser.getUsername() + "'失败,邮箱账号已存在");
|
|
|
}
|
|
|
- if (userService.updateUserProfile(currentUser) > 0)
|
|
|
- {
|
|
|
- CommunityUserInfo communityUserInfo = communityUserInfoMapper.selectOne(new QueryWrapper<CommunityUserInfo>().eq("user_id",currentUser.getUserId()));
|
|
|
+ if (userService.updateUserProfile(currentUser) > 0) {
|
|
|
+ CommunityUserInfo communityUserInfo = communityUserInfoMapper.selectOne(new QueryWrapper<CommunityUserInfo>().eq("user_id", currentUser.getUserId()));
|
|
|
communityUserInfo.setProfile(currentUser.getProfile());
|
|
|
communityUserInfo.setBirthday(user.getBirthday());
|
|
|
communityUserInfo.setTags(user.getTags());
|
|
@@ -104,22 +100,18 @@ public class SysProfileController extends BaseController
|
|
|
*/
|
|
|
@Log(title = "个人信息", businessType = BusinessType.UPDATE)
|
|
|
@PutMapping("/updatePwd")
|
|
|
- public AjaxResult updatePwd(String oldPassword, String newPassword)
|
|
|
- {
|
|
|
+ public AjaxResult updatePwd(String oldPassword, String newPassword) {
|
|
|
LoginUser loginUser = getLoginUser();
|
|
|
String userName = loginUser.getUsername();
|
|
|
String password = loginUser.getPassword();
|
|
|
- if (!SecurityUtils.matchesPassword(oldPassword, password))
|
|
|
- {
|
|
|
+ if (!SecurityUtils.matchesPassword(oldPassword, password)) {
|
|
|
return error("修改密码失败,旧密码错误");
|
|
|
}
|
|
|
- if (SecurityUtils.matchesPassword(newPassword, password))
|
|
|
- {
|
|
|
+ if (SecurityUtils.matchesPassword(newPassword, password)) {
|
|
|
return error("新密码不能与旧密码相同");
|
|
|
}
|
|
|
newPassword = SecurityUtils.encryptPassword(newPassword);
|
|
|
- if (userService.resetUserPwd(userName, newPassword) > 0)
|
|
|
- {
|
|
|
+ if (userService.resetUserPwd(userName, newPassword) > 0) {
|
|
|
// 更新缓存用户密码
|
|
|
loginUser.getUser().setPassword(newPassword);
|
|
|
tokenService.setLoginUser(loginUser);
|
|
@@ -128,19 +120,35 @@ public class SysProfileController extends BaseController
|
|
|
return error("修改密码异常,请联系管理员");
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 重置密码(验证码)
|
|
|
+ */
|
|
|
+ @Log(title = "个人信息", businessType = BusinessType.UPDATE)
|
|
|
+ @PutMapping("/updatePwdBySmsCode")
|
|
|
+ public AjaxResult updatePwdBySmsCode(String username, String smsCode, String newPassword) {
|
|
|
+ if (StringUtils.isEmpty(newPassword) || StringUtils.isEmpty(smsCode) || StringUtils.isEmpty(username)) {
|
|
|
+ return error("参数异常!");
|
|
|
+ }
|
|
|
+
|
|
|
+ validateSmsCaptcha(username, smsCode);
|
|
|
+ newPassword = SecurityUtils.encryptPassword(newPassword);
|
|
|
+ int result = userService.resetUserPwd(username, newPassword);
|
|
|
+ if (result > 0) {
|
|
|
+ return success();
|
|
|
+ }
|
|
|
+ return error("修改密码异常,请联系管理员");
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 头像上传
|
|
|
*/
|
|
|
@Log(title = "用户头像", businessType = BusinessType.UPDATE)
|
|
|
@PostMapping("/avatar")
|
|
|
- public AjaxResult avatar(@RequestParam("avatarfile") MultipartFile file) throws Exception
|
|
|
- {
|
|
|
- if (!file.isEmpty())
|
|
|
- {
|
|
|
+ public AjaxResult avatar(@RequestParam("avatarfile") MultipartFile file) throws Exception {
|
|
|
+ if (!file.isEmpty()) {
|
|
|
LoginUser loginUser = getLoginUser();
|
|
|
String avatar = FileUploadUtils.upload(RuoYiConfig.getAvatarPath(), file, MimeTypeUtils.IMAGE_EXTENSION);
|
|
|
- if (userService.updateUserAvatar(loginUser.getUsername(), avatar))
|
|
|
- {
|
|
|
+ if (userService.updateUserAvatar(loginUser.getUsername(), avatar)) {
|
|
|
AjaxResult ajax = AjaxResult.success();
|
|
|
ajax.put("imgUrl", avatar);
|
|
|
// 更新缓存用户头像
|
|
@@ -151,4 +159,30 @@ public class SysProfileController extends BaseController
|
|
|
}
|
|
|
return error("上传图片异常,请联系管理员");
|
|
|
}
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 校验验证码
|
|
|
+ *
|
|
|
+ * @param username 用户名
|
|
|
+ * @param code 验证码
|
|
|
+ * @return 结果
|
|
|
+ */
|
|
|
+ public void validateSmsCaptcha(String username, String code) {
|
|
|
+ if (StringUtils.isEmpty(code)) {
|
|
|
+ throw new CaptchaNullException();
|
|
|
+ }
|
|
|
+ String verifyKey = CacheConstants.SMS_UPDATE_PASSWORD_CODE_KEY + StringUtils.nvl(username, "");
|
|
|
+ try {
|
|
|
+ String captcha = redisCache.getCacheObject(verifyKey).toString();
|
|
|
+ if (captcha == null) {
|
|
|
+ throw new CaptchaExpireException();
|
|
|
+ }
|
|
|
+ if (!code.equalsIgnoreCase(captcha)) {
|
|
|
+ throw new CaptchaException();
|
|
|
+ }
|
|
|
+ redisCache.deleteObject(verifyKey);
|
|
|
+ } catch (NullPointerException e) {
|
|
|
+ throw new CaptchaExpireException();
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|