Browse Source

用户修改资料

chao 3 years ago
parent
commit
4f7b42596b

+ 2 - 2
db.sql

@@ -6,7 +6,7 @@ CREATE TABLE `sys_user` (
   `password` VARCHAR(255) NOT NULL COMMENT '密码',
   `avatar` VARCHAR(255) DEFAULT 'https://www.caimei365.com/favicon.png' COMMENT '头像',
   `fullName` VARCHAR(100) NOT NULL COMMENT '姓名',
-  `phone` INT(20) NOT NULL COMMENT '电话',
+  `phone` varchar(20) NOT NULL COMMENT '电话',
   `login_flag` CHAR(1) NOT NULL DEFAULT '0' COMMENT '是否阻止登录:0否,其他是',
   `create_time` DATETIME DEFAULT NULL COMMENT '创建时间',
   `update_time` DATETIME DEFAULT NULL COMMENT '更新时间',
@@ -81,4 +81,4 @@ VALUES  ('1','系统设置','SysSetting','el-icon-s-tools','0','0',NOW()),
         ('10','用户列表','SysUserList','','4','1',NOW()),
         ('11','用户编辑','SysUserEdit','','4','1',NOW());
 INSERT INTO `sys_role_user`(`user_id`, `role_id`) VALUES (1, 1);
-INSERT INTO `sys_role_menu`(`role_id`, `menu_id`) VALUES (1, 1),(1, 2),(1, 3),(1, 4),(1, 5),(1, 6),(1, 7),(1, 8),(1, 9),(1, 10),(1, 11);
+INSERT INTO `sys_role_menu`(`role_id`, `menu_id`) VALUES (1, 1),(1, 2),(1, 3),(1, 4),(1, 5),(1, 6),(1, 7),(1, 8),(1, 9),(1, 10),(1, 11);

+ 2 - 2
src/main/java/com/caimei365/manager/config/security/UserDetailsServiceImpl.java

@@ -31,10 +31,10 @@ public class UserDetailsServiceImpl implements UserDetailsService {
             throw new UsernameNotFoundException("用户" + username + "不存在!");
         }
         // 获取用户角色列表
-        List<String> roleList = sysUserDao.getRoleListByUserId(user.getId());
+        List<String> roleNames = sysUserDao.getRoleNamesByUserId(user.getId());
         // 设置权限和角色
         ArrayList<GrantedAuthority> authorities = new ArrayList<>();
-        for (String role : roleList) {
+        for (String role : roleNames) {
             if (StringUtils.hasLength(role)){
                 authorities.add( new GrantedAuthorityImpl(role));
             }

+ 22 - 0
src/main/java/com/caimei365/manager/controller/SysUserApi.java

@@ -243,4 +243,26 @@ public class SysUserApi {
         return sysUserService.deleteMenu(id);
     }
 
+
+    /**
+     * 用户修改资料
+     */
+    @PostMapping("user/update/profile")
+    public ResponseJson<Void> updateUserProfile( @RequestBody UserProfile profile) {
+        if (null == profile.getUserId() || profile.getUserId()<= 0) {
+            return ResponseJson.error("用户Id不能为空!", null);
+        }
+        return sysUserService.updateUserProfile(profile);
+    }
+
+    /**
+     * 用户修改密码
+     */
+    @PostMapping("user/update/password")
+    public ResponseJson<Void> updateUserPassword( @RequestBody UserProfile profile) {
+        if (null == profile.getUserId() || profile.getUserId()<= 0) {
+            return ResponseJson.error("用户Id不能为空!", null);
+        }
+        return sysUserService.updateUserPassword(profile);
+    }
 }

+ 9 - 5
src/main/java/com/caimei365/manager/dao/SysUserDao.java

@@ -28,15 +28,15 @@ public interface SysUserDao {
     /**
      * 获取用户角色名称列表
      */
-    List<String> getRoleListByUserId(Integer userId);
+    List<String> getRoleNamesByUserId(Integer userId);
     /**
      * 获取用户角色Id列表
      */
     List<String> getRoleIdsByUserId(Integer userId);
-    /**
-     * 获取用户角色Id列表
-     */
-    List<Integer> getRoleIdsByUsername(String username);
+//    /**
+//     * 获取用户角色Id列表
+//     */
+//    List<Integer> getRoleIdsByUsername(String username);
     /**
      * 删除用户原有角色关联
      */
@@ -67,6 +67,10 @@ public interface SysUserDao {
      */
     void deleteSysUser(Integer id);
 
+    /**
+     * 根据用户Id获取用户角色列表
+     */
+    List<SysRole> getRoleListByUserId(Integer userId);
     /**
      * 获取角色列表
      */

+ 4 - 0
src/main/java/com/caimei365/manager/entity/SysUser.java

@@ -64,6 +64,10 @@ public class SysUser {
      * 角色名称集合
      */
     private List<String> roles;
+    /**
+     * 角色描述,用" "隔开
+     */
+    private String roleDesc;
     /**
      * 可访问菜单集合
      */

+ 47 - 0
src/main/java/com/caimei365/manager/entity/UserProfile.java

@@ -0,0 +1,47 @@
+package com.caimei365.manager.entity;
+
+import lombok.Data;
+
+/**
+ * Description
+ *
+ * @author : Charles
+ * @date : 2022/1/4
+ */
+@Data
+public class UserProfile {
+    /**
+     * 用户Id
+     */
+    private Integer userId;
+    /**
+     * 用户名
+     */
+    private String username;
+    /**
+     * 头像
+     */
+    private String avatar;
+    /**
+     * 姓名
+     */
+    private String fullName;
+    /**
+     * 电话
+     */
+    private String phone;
+    /**
+     * 密码
+     */
+    private String password;
+    /**
+     * 密码
+     */
+    private String oldPassword;
+    /**
+     * 密码
+     */
+    private String confirmPassword;
+
+    private static final long serialVersionUID = 1L;
+}

+ 8 - 0
src/main/java/com/caimei365/manager/service/SysUserService.java

@@ -108,4 +108,12 @@ public interface SysUserService {
      */
     ResponseJson<Void> deleteMenu(Integer id);
 
+    /**
+     * 用户修改资料
+     */
+    ResponseJson<Void> updateUserProfile(UserProfile profile);
+    /**
+     * 用户修改密码
+     */
+    ResponseJson<Void> updateUserPassword(UserProfile profile);
 }

+ 75 - 13
src/main/java/com/caimei365/manager/service/impl/SysUserServiceImpl.java

@@ -5,12 +5,14 @@ import com.caimei365.manager.entity.*;
 import com.caimei365.manager.service.RedisService;
 import com.caimei365.manager.service.SysUserService;
 import com.github.pagehelper.PageHelper;
+import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
 import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 import org.springframework.util.StringUtils;
 
 import javax.annotation.Resource;
+import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -38,18 +40,30 @@ public class SysUserServiceImpl implements SysUserService {
     public ResponseJson<SysUser> getInfoByUsername(String username) {
         if (StringUtils.hasLength(username)) {
             SysUser sysUser = sysUserDao.findByUsername(username);
-            // 获取用户角色列表
-            List<String> roleList = sysUserDao.getRoleListByUserId(sysUser.getId());
-            sysUser.setRoles(roleList);
-
-            // 获取用户角色Id
-            List<Integer> roleIds = sysUserDao.getRoleIdsByUsername(username);
-            List<SysMenu> menus = null;
-            if (!CollectionUtils.isEmpty(roleIds)) {
-                // 根据角色Id获取菜单列表
-                menus = sysUserDao.getMenusByRoleIds(roleIds);
+            if (null != sysUser) {
+                List<String> roleNames = new ArrayList<>();
+                List<Integer> roleIds = new ArrayList<>();
+                StringBuilder roleDesc = new StringBuilder();
+                // 根据用户Id获取用户角色列表
+                List<SysRole> roleList = sysUserDao.getRoleListByUserId(sysUser.getId());
+                if (!CollectionUtils.isEmpty(roleList)) {
+                    for (SysRole role : roleList) {
+                        if (null != role) {
+                            roleNames.add(role.getRoleName());
+                            roleIds.add(role.getId());
+                            roleDesc.append(role.getRoleDesc()).append(" ");
+                        }
+                    }
+                }
+                sysUser.setRoles(roleNames);
+                sysUser.setRoleDesc(roleDesc.toString());
+                List<SysMenu> menus = null;
+                if (!CollectionUtils.isEmpty(roleIds)) {
+                    // 根据角色Id获取菜单列表
+                    menus = sysUserDao.getMenusByRoleIds(roleIds);
+                }
+                sysUser.setMenus(menus);
             }
-            sysUser.setMenus(menus);
 
             return ResponseJson.success(sysUser);
         }
@@ -58,8 +72,6 @@ public class SysUserServiceImpl implements SysUserService {
 
     /**
      * 退出登录
-     *
-     * @param token
      */
     @Override
     public ResponseJson<Void> logout(String token) {
@@ -445,4 +457,54 @@ public class SysUserServiceImpl implements SysUserService {
         sysUserDao.deleteMenu(id);
         return ResponseJson.success();
     }
+
+    /**
+     * 用户修改资料
+     */
+    @Override
+    public ResponseJson<Void> updateUserProfile(UserProfile profile) {
+        SysUser sysUser = sysUserDao.getUser(profile.getUserId());
+        if (null == sysUser) {
+            return ResponseJson.error("用户异常!", null);
+        }
+        if (StringUtils.hasLength(profile.getUsername())){
+            sysUser.setUsername(profile.getUsername());
+        }
+        if (StringUtils.hasLength(profile.getFullName())){
+            sysUser.setFullName(profile.getFullName());
+        }
+        if (StringUtils.hasLength(profile.getPhone())){
+            sysUser.setPhone(profile.getPhone());
+        }
+        if (StringUtils.hasLength(profile.getAvatar())){
+            sysUser.setAvatar(profile.getAvatar());
+        }
+        sysUserDao.updateSysUser(sysUser);
+        return ResponseJson.success();
+    }
+
+    /**
+     * 用户修改密码
+     */
+    @Override
+    public ResponseJson<Void> updateUserPassword(UserProfile profile) {
+        SysUser sysUser = sysUserDao.getUser(profile.getUserId());
+        if (null == sysUser) {
+            return ResponseJson.error("用户异常!", null);
+        }
+        if (!StringUtils.hasLength(profile.getPassword())){
+            return ResponseJson.error("新密码不能为空!", null);
+        }
+        if (!profile.getPassword().equals(profile.getConfirmPassword())){
+            return ResponseJson.error("两次密码输入不一致!", null);
+        }
+        if (!passwordEncoder.matches(profile.getOldPassword(), sysUser.getPassword())) {
+            return ResponseJson.error("旧密码输入错误!", null);
+        }
+        // 密码加密
+        String encodePassword = passwordEncoder.encode(profile.getPassword());
+        sysUser.setPassword(encodePassword);
+        sysUserDao.updateSysUser(sysUser);
+        return ResponseJson.success();
+    }
 }

+ 0 - 2
src/main/resources/application.yml

@@ -13,9 +13,7 @@ spring:
     host: 192.168.2.100
     port: 6379
     #password: 123456
-    # Redis?????????0?
     database: 0
-    # ??????????
     timeout: 5000
 
 mybatis:

+ 14 - 8
src/main/resources/mapper/SysUserDao.xml

@@ -2,10 +2,10 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.caimei365.manager.dao.SysUserDao">
     <select id="findByUsername" resultType="com.caimei365.manager.entity.SysUser">
-        SELECT id,username,PASSWORD,avatar, login_flag AS loginFlag, del_flag AS delFlag
+        SELECT id, username, PASSWORD, avatar, fullName, phone, login_flag AS loginFlag, del_flag AS delFlag
         FROM sys_user WHERE login_flag=0 AND username=#{username}
     </select>
-    <select id="getRoleListByUserId" resultType="java.lang.String">
+    <select id="getRoleNamesByUserId" resultType="java.lang.String">
         SELECT DISTINCT r.role_name FROM sys_role r
             LEFT JOIN sys_role_user ru ON r.id = ru.role_id
         WHERE ru.user_id = #{userId}
@@ -15,11 +15,11 @@
             LEFT JOIN sys_role_user ru ON r.id = ru.role_id
         WHERE ru.user_id = #{userId}
     </select>
-    <select id="getRoleIdsByUsername" resultType="java.lang.Integer">
-        SELECT DISTINCT ru.role_id FROM sys_role_user ru
-        LEFT JOIN sys_user u ON ru.user_id = u.id
-        WHERE u.username=#{username}
-    </select>
+<!--    <select id="getRoleIdsByUsername" resultType="java.lang.Integer">-->
+<!--        SELECT DISTINCT ru.role_id FROM sys_role_user ru-->
+<!--        LEFT JOIN sys_user u ON ru.user_id = u.id-->
+<!--        WHERE u.username=#{username}-->
+<!--    </select>-->
     <select id="getUserList" resultType="com.caimei365.manager.entity.SysUser">
         SELECT u.id, u.username, u.avatar, u.fullName, u.phone, u.create_time AS createTime ,u.update_time AS updateTime, login_flag AS loginFlag, del_flag AS delFlag
         FROM sys_user u
@@ -45,7 +45,7 @@
         <if test="password != null and password != ''">
             password=#{password},
         </if>
-        avatar=#{avatar}, fullName=#{fullName}, phone=#{phone}, del_flag=#{delFlag}, update_time=NOW()
+        avatar=#{avatar}, fullName=#{fullName}, phone=#{phone}, login_flag=#{loginFlag}, del_flag=#{delFlag}, update_time=NOW()
         WHERE id = #{id}
     </update>
     <update id="deleteSysUser">
@@ -57,6 +57,12 @@
     <delete id="deleteUserRoleRelation">
         DELETE FROM sys_role_user WHERE user_id = #{userId}
     </delete>
+    <select id="getRoleListByUserId" resultType="com.caimei365.manager.entity.SysRole">
+        SELECT DISTINCT r.id, r.role_name AS roleName, r.role_desc AS roleDesc, r.create_time AS createTime, r.update_time AS updateTime, del_flag AS delFlag
+        FROM sys_role r
+        LEFT JOIN sys_role_user ru ON r.id = ru.role_id
+        WHERE ru.user_id = #{userId} AND r.del_flag = 0
+    </select>
     <select id="getRoleList" resultType="com.caimei365.manager.entity.SysRole">
         SELECT  r.id, r.role_name AS roleName, r.role_desc AS roleDesc, r.create_time AS createTime, r.update_time AS updateTime, del_flag AS delFlag
         FROM sys_role r WHERE r.del_flag = 0