he2802 há 2 anos atrás
pai
commit
3b505582b9

+ 144 - 0
zhongzheng-admin-saas/src/main/java/com/zhongzheng/controller/system/SysProfileController.java

@@ -0,0 +1,144 @@
+package com.zhongzheng.controller.system;
+
+import cn.hutool.core.util.StrUtil;
+import com.zhongzheng.common.annotation.Log;
+import com.zhongzheng.common.config.RuoYiConfig;
+import com.zhongzheng.common.constant.UserConstants;
+import com.zhongzheng.common.core.controller.BaseController;
+import com.zhongzheng.common.core.domain.AjaxResult;
+import com.zhongzheng.common.core.domain.entity.SysUser;
+import com.zhongzheng.common.core.domain.entity.TopSysUser;
+import com.zhongzheng.common.core.domain.model.LoginUser;
+import com.zhongzheng.common.core.domain.model.TopLoginUser;
+import com.zhongzheng.common.enums.BusinessType;
+import com.zhongzheng.common.exception.CustomException;
+import com.zhongzheng.common.utils.SecurityUtils;
+import com.zhongzheng.common.utils.ServletUtils;
+import com.zhongzheng.common.utils.ToolsUtils;
+import com.zhongzheng.common.utils.file.FileUploadUtils;
+import com.zhongzheng.framework.web.service.TokenService;
+import com.zhongzheng.framework.web.service.TopTokenService;
+import com.zhongzheng.modules.system.service.ISysUserService;
+import com.zhongzheng.modules.top.user.service.ITopSysUserService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.IOException;
+
+/**
+ * 个人信息 业务处理
+ *
+ * @author zhongzheng
+ */
+@RestController
+@RequestMapping("/system/user/profile")
+public class SysProfileController extends BaseController
+{
+    @Autowired
+    private ITopSysUserService userService;
+
+
+    @Autowired
+    private TopTokenService topTokenService;
+
+    /**
+     * 个人信息
+     */
+    @GetMapping
+    public AjaxResult profile()
+    {
+        TopLoginUser loginUser = topTokenService.getLoginUser(ServletUtils.getRequest());
+        TopSysUser user = loginUser.getUser();
+        AjaxResult ajax = AjaxResult.success(user);
+        ajax.put("roleGroup", userService.selectUserRoleGroup(loginUser.getUsername()));
+        ajax.put("postGroup", userService.selectUserPostGroup(loginUser.getUsername()));
+        return ajax;
+    }
+
+    /**
+     * 修改用户
+     */
+    @Log(title = "个人信息", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult updateProfile(@RequestBody TopSysUser user)
+    {
+        if (StrUtil.isNotEmpty(user.getPhonenumber())
+                && UserConstants.NOT_UNIQUE.equals(userService.checkPhoneUnique(user)))
+        {
+            return AjaxResult.error("修改用户'" + user.getUserName() + "'失败,手机号码已存在");
+        }
+        if (StrUtil.isNotEmpty(user.getEmail())
+                && UserConstants.NOT_UNIQUE.equals(userService.checkEmailUnique(user)))
+        {
+            return AjaxResult.error("修改用户'" + user.getUserName() + "'失败,邮箱账号已存在");
+        }
+        if (userService.updateUserProfile(user) > 0)
+        {
+            TopLoginUser loginUser = topTokenService.getLoginUser(ServletUtils.getRequest());
+            // 更新缓存用户信息
+            loginUser.getUser().setNickName(user.getNickName());
+            loginUser.getUser().setPhonenumber(user.getPhonenumber());
+            loginUser.getUser().setEmail(user.getEmail());
+            loginUser.getUser().setSex(user.getSex());
+            topTokenService.setLoginUser(loginUser);
+            return AjaxResult.success();
+        }
+        return AjaxResult.error("修改个人信息异常,请联系管理员");
+    }
+
+    /**
+     * 重置密码
+     */
+    @Log(title = "个人信息", businessType = BusinessType.UPDATE)
+    @PutMapping("/updatePwd")
+    public AjaxResult updatePwd(String oldPassword, String newPassword)
+    {
+        TopLoginUser loginUser = topTokenService.getLoginUser(ServletUtils.getRequest());
+        String userName = loginUser.getUsername();
+        String password = loginUser.getPassword();
+        if (!SecurityUtils.matchesPassword(oldPassword, password))
+        {
+            return AjaxResult.error("修改密码失败,旧密码错误");
+        }
+        if(!ToolsUtils.verifPwd(newPassword)){
+            throw new CustomException("密码应由8-16位数字、大小写字母、符号组成");
+        }
+        if (SecurityUtils.matchesPassword(newPassword, password))
+        {
+            return AjaxResult.error("新密码不能与旧密码相同");
+        }
+        if (userService.resetUserPwd(userName, SecurityUtils.encryptPassword(newPassword)) > 0)
+        {
+            // 更新缓存用户密码
+            loginUser.getUser().setPassword(SecurityUtils.encryptPassword(newPassword));
+            topTokenService.setLoginUser(loginUser);
+            return AjaxResult.success();
+        }
+        return AjaxResult.error("修改密码异常,请联系管理员");
+    }
+
+    /**
+     * 头像上传
+     */
+    @Log(title = "用户头像", businessType = BusinessType.UPDATE)
+    @PostMapping("/avatar")
+    public AjaxResult avatar(@RequestParam("avatarfile") MultipartFile file) throws IOException
+    {
+        if (!file.isEmpty())
+        {
+            TopLoginUser loginUser = topTokenService.getLoginUser(ServletUtils.getRequest());
+            String avatar = FileUploadUtils.upload(RuoYiConfig.getAvatarPath(), file);
+            if (userService.updateUserAvatar(loginUser.getUsername(), avatar))
+            {
+                AjaxResult ajax = AjaxResult.success();
+                ajax.put("imgUrl", avatar);
+                // 更新缓存用户头像
+                loginUser.getUser().setAvatar(avatar);
+                topTokenService.setLoginUser(loginUser);
+                return ajax;
+            }
+        }
+        return AjaxResult.error("上传图片异常,请联系管理员");
+    }
+}

+ 2 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/user/mapper/TopSysPostMapper.java

@@ -28,4 +28,6 @@ public interface TopSysPostMapper extends BaseMapper<TopSysPost> {
      * @return 结果
      */
     List<TopSysPost> selectPostsByUserName(String userName);
+
+
 }

+ 4 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/user/mapper/TopSysUserPostMapper.java

@@ -2,8 +2,12 @@ package com.zhongzheng.modules.top.user.mapper;
 
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zhongzheng.modules.system.domain.SysPost;
+import com.zhongzheng.modules.top.user.domain.TopSysPost;
 import com.zhongzheng.modules.top.user.domain.TopSysUserPost;
 
+import java.util.List;
+
 /**
  * 【请填写功能名称】Mapper接口
  *

+ 5 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/user/mapper/TopSysUserRoleMapper.java

@@ -2,8 +2,12 @@ package com.zhongzheng.modules.top.user.mapper;
 
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zhongzheng.common.core.domain.entity.SysRole;
+import com.zhongzheng.modules.top.user.domain.TopSysRole;
 import com.zhongzheng.modules.top.user.domain.TopSysUserRole;
 
+import java.util.List;
+
 /**
  * 用户和角色关联Mapper接口
  *
@@ -11,5 +15,5 @@ import com.zhongzheng.modules.top.user.domain.TopSysUserRole;
  * @date 2023-03-10
  */
 public interface TopSysUserRoleMapper extends BaseMapper<TopSysUserRole> {
-
+    public List<TopSysRole> selectRolesByUserName(String userName);
 }

+ 3 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/user/service/ITopSysRoleService.java

@@ -1,6 +1,7 @@
 package com.zhongzheng.modules.top.user.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.zhongzheng.common.core.domain.entity.SysRole;
 import com.zhongzheng.modules.top.user.domain.TopSysRole;
 
 import java.util.List;
@@ -130,4 +131,6 @@ import java.util.Set;
      * @return 结果
      */
      int deleteRoleByIds(Long[] roleIds);
+
+
 }

+ 11 - 0
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/user/service/ITopSysUserService.java

@@ -2,6 +2,7 @@ package com.zhongzheng.modules.top.user.service;
 
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.zhongzheng.common.core.domain.entity.SysUser;
 import com.zhongzheng.common.core.domain.entity.TopSysUser;
 import com.zhongzheng.modules.course.bo.CourseBusinessQueryBo;
 import com.zhongzheng.modules.top.user.bo.TopSysUserAddBo;
@@ -145,4 +146,14 @@ public interface ITopSysUserService extends IService<TopSysUser> {
     TopSysUser getTopSysUser(Long createTopSysUserId);
 
     List<String> getRoleKeyById(Long loginId);
+
+	public String selectUserRoleGroup(String userName);
+
+	public String selectUserPostGroup(String userName);
+
+	public int updateUserProfile(TopSysUser user);
+
+	public int resetUserPwd(String userName, String password);
+
+	public boolean updateUserAvatar(String userName, String avatar);
 }

+ 2 - 1
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/user/service/impl/TopSysRoleServiceImpl.java

@@ -37,7 +37,7 @@ public class TopSysRoleServiceImpl extends ServiceImpl<TopSysRoleMapper, TopSysR
 
     @Autowired
     private TopSysRoleBusinessMapper topSysRoleBusinessMapper;
-    
+
 
     /**
      * 根据条件分页查询角色数据
@@ -326,4 +326,5 @@ public class TopSysRoleServiceImpl extends ServiceImpl<TopSysRoleMapper, TopSysR
         return baseMapper.deleteBatchIds(ids);
     }
 
+
 }

+ 64 - 5
zhongzheng-system/src/main/java/com/zhongzheng/modules/top/user/service/impl/TopSysUserServiceImpl.java

@@ -5,6 +5,7 @@ import cn.hutool.core.lang.Validator;
 import cn.hutool.core.util.StrUtil;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -12,18 +13,22 @@ import com.github.pagehelper.Page;
 import com.zhongzheng.common.annotation.DataScope;
 import com.zhongzheng.common.constant.UserConstants;
 import com.zhongzheng.common.core.domain.entity.SysRole;
+import com.zhongzheng.common.core.domain.entity.SysUser;
 import com.zhongzheng.common.core.domain.entity.TopSysUser;
 import com.zhongzheng.common.exception.CustomException;
+import com.zhongzheng.common.utils.DateUtils;
 import com.zhongzheng.modules.course.bo.CourseBusinessQueryBo;
+import com.zhongzheng.modules.system.domain.SysPost;
+import com.zhongzheng.modules.system.mapper.SysPostMapper;
+import com.zhongzheng.modules.system.mapper.SysRoleMapper;
 import com.zhongzheng.modules.top.user.bo.TopSysUserAddBo;
 import com.zhongzheng.modules.top.user.bo.TopSysUserEditBo;
 import com.zhongzheng.modules.top.user.bo.TopSysUserQueryBo;
+import com.zhongzheng.modules.top.user.domain.TopSysPost;
 import com.zhongzheng.modules.top.user.domain.TopSysRole;
 import com.zhongzheng.modules.top.user.domain.TopSysUserPost;
 import com.zhongzheng.modules.top.user.domain.TopSysUserRole;
-import com.zhongzheng.modules.top.user.mapper.TopSysUserMapper;
-import com.zhongzheng.modules.top.user.mapper.TopSysUserPostMapper;
-import com.zhongzheng.modules.top.user.mapper.TopSysUserRoleMapper;
+import com.zhongzheng.modules.top.user.mapper.*;
 import com.zhongzheng.modules.top.user.service.ITopSysRoleService;
 import com.zhongzheng.modules.top.user.service.ITopSysUserService;
 import com.zhongzheng.modules.top.user.vo.TopSysUserVo;
@@ -44,7 +49,7 @@ import java.util.stream.Collectors;
  */
 @Service
 public class TopSysUserServiceImpl extends ServiceImpl<TopSysUserMapper, TopSysUser> implements ITopSysUserService {
-    
+
     @Autowired
     private TopSysUserRoleMapper topSysUserRoleMapper;
 
@@ -53,7 +58,14 @@ public class TopSysUserServiceImpl extends ServiceImpl<TopSysUserMapper, TopSysU
 
     @Autowired
     private ITopSysRoleService iTopSysRoleService;
-    
+
+    @Autowired
+    private TopSysRoleMapper roleMapper;
+
+
+    @Autowired
+    private TopSysPostMapper postMapper;
+
 
     @Override
     public TopSysUserVo queryById(Long userId){
@@ -328,6 +340,53 @@ public class TopSysUserServiceImpl extends ServiceImpl<TopSysUserMapper, TopSysU
         return baseMapper.getRoleKeyById(loginId);
     }
 
+    @Override
+    public String selectUserRoleGroup(String userName) {
+        List<TopSysRole> list = roleMapper.selectRolesByUserName(userName);
+        StringBuffer idsStr = new StringBuffer();
+        for (TopSysRole role : list) {
+            idsStr.append(role.getRoleName()).append(",");
+        }
+        if (Validator.isNotEmpty(idsStr.toString())) {
+            return idsStr.substring(0, idsStr.length() - 1);
+        }
+        return idsStr.toString();
+    }
+
+    @Override
+    public String selectUserPostGroup(String userName) {
+        List<TopSysPost> list = postMapper.selectPostsByUserName(userName);
+        StringBuffer idsStr = new StringBuffer();
+        for (TopSysPost post : list) {
+            idsStr.append(post.getPostName()).append(",");
+        }
+        if (Validator.isNotEmpty(idsStr.toString())) {
+            return idsStr.substring(0, idsStr.length() - 1);
+        }
+        return idsStr.toString();
+    }
+
+    @Override
+    public int updateUserProfile(TopSysUser user) {
+        return baseMapper.updateById(user);
+    }
+
+    @Override
+    public int resetUserPwd(String userName, String password) {
+        return baseMapper.update(null,
+                new LambdaUpdateWrapper<TopSysUser>()
+                        .set(TopSysUser::getPassword,password)
+                        .eq(TopSysUser::getUserName,userName));
+    }
+
+    @Override
+    public boolean updateUserAvatar(String userName, String avatar) {
+        return baseMapper.update(null,
+                new LambdaUpdateWrapper<TopSysUser>()
+                        .set(TopSysUser::getAvatar,avatar)
+                        .eq(TopSysUser::getUserName,userName)) > 0;
+    }
+
 
     /**
      * 新增用户角色信息