Răsfoiți Sursa

优化系统用户信息

tsurumure 7 luni în urmă
părinte
comite
482aa52e21

+ 1 - 1
db/sys_log.sql

@@ -8,7 +8,7 @@ DROP TABLE IF EXISTS `sys_log`;
 CREATE TABLE `sys_log` (
     PRIMARY KEY (`id`),
     `id` BIGINT NOT NULL AUTO_INCREMENT COMMENT 'ID',
-    `username` VARCHAR(255) NOT NULL COMMENT '用户名',
+    `username` VARCHAR(255) COMMENT '用户名',
     `action` VARCHAR(255) COMMENT '用户操作',
     `classname` VARCHAR(255) COMMENT '请求类名',
     `method` VARCHAR(255) COMMENT '请求方法',

+ 2 - 2
db/sys_user_role_menu.sql

@@ -15,12 +15,12 @@ CREATE TABLE `sys_user_role_menu` (
     `component` VARCHAR(255) COMMENT '组件路径',
     `meta` VARCHAR(255) NOT NULL DEFAULT '{}' COMMENT '路由元信息,以 JSON 格式存储',
     `icon` VARCHAR(255) COMMENT '图标',
-    `permission` VARCHAR(255) COMMENT '权限',
+    `permission_id` VARCHAR(255) COMMENT '权限',
     `sort` INT DEFAULT '1' COMMENT '排序',
     `status` TINYINT(1) DEFAULT '1' COMMENT '菜单状态 (-1禁用, 1启用)'
 ) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='系统菜单表';
 
-INSERT INTO sys_user_role_menu(id, parent_id, menu_name, menu_name_en, path, component, meta, icon, permission, sort) VALUES
+INSERT INTO sys_user_role_menu(id, parent_id, menu_name, menu_name_en, path, component, meta, icon, permission_id, sort) VALUES
     (1, -1, '创意中心', 'Idea Center', '/', '/src/views/home/ideaCenter.vue', '{}', 'House', '2', 1),
 
 #     (-1, '商城管理', 'B2c', '/b2c/good', '', '{}', 'Goods', '11', 2),

+ 54 - 54
src/main/java/com/backendsys/controller/Systems/SysMenuController.java

@@ -1,54 +1,54 @@
-package com.backendsys.controller.Systems;
-
-import com.backendsys.aspect.QueryNullCheck;
-import com.backendsys.entity.System.SysMenuDTO;
-import com.backendsys.service.System.SysMenuService;
-import com.backendsys.utils.response.Result;
-import com.fasterxml.jackson.core.JsonProcessingException;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.access.prepost.PreAuthorize;
-import org.springframework.validation.annotation.Validated;
-import org.springframework.web.bind.annotation.*;
-
-/**
- * 系统后台菜单
- */
-@Validated
-@RestController
-public class SysMenuController {
-    
-    @Autowired
-    private SysMenuService sysMenuService;
-
-    // @PreAuthorize("@ss.hasPermi('1.3')")
-    // 由于动态路由需要提前加载,在 /login 时就必须调用,所以此处设置为公共
-    @GetMapping("/api/public/system/menu/getMenu")
-    public Result getMenu(@Validated SysMenuDTO sysMenuDTO) {
-        try {
-            return Result.success(sysMenuService.queryMenu(sysMenuDTO));
-        } catch (JsonProcessingException e) {
-            e.printStackTrace();
-        }
-        return null;
-    }
-
-    @PreAuthorize("@ss.hasPermi('1.3.1')")
-    @PostMapping("/api/system/menu/createMenu")
-    public Result createMenu(@Validated(SysMenuDTO.Create.class) @RequestBody SysMenuDTO sysMenuDTO) {
-        return Result.success(sysMenuService.insertMenu(sysMenuDTO), "创建成功");
-    }
-
-    @PreAuthorize("@ss.hasPermi('1.3.2')")
-    @QueryNullCheck(serviceClass = SysMenuService.class, serviceMethod = "queryMenuDetail", argField = "menu_id", message = "系统菜单不存在")
-    @PutMapping("/api/system/menu/updateMenu")
-    public Result updateMenu(@Validated(SysMenuDTO.Update.class) @RequestBody SysMenuDTO sysMenuDTO) {
-        return Result.success(sysMenuService.updateMenu(sysMenuDTO), "更新成功");
-    }
-
-    @PreAuthorize("@ss.hasPermi('1.3.3')")
-    @QueryNullCheck(serviceClass = SysMenuService.class, serviceMethod = "queryMenuDetail", argField = "menu_id", message = "系统菜单不存在")
-    @DeleteMapping("/api/system/menu/deleteMenu")
-    public Result deleteMenu(@Validated(SysMenuDTO.Delete.class) @RequestBody SysMenuDTO sysMenuDTO) {
-        return Result.success(sysMenuService.deleteMenu(sysMenuDTO), "删除成功");
-    }
-}
+//package com.backendsys.controller.Systems;
+//
+//import com.backendsys.aspect.QueryNullCheck;
+//import com.backendsys.entity.System.SysMenuDTO;
+//import com.backendsys.service.System.SysMenuService;
+//import com.backendsys.utils.response.Result;
+//import com.fasterxml.jackson.core.JsonProcessingException;
+//import org.springframework.beans.factory.annotation.Autowired;
+//import org.springframework.security.access.prepost.PreAuthorize;
+//import org.springframework.validation.annotation.Validated;
+//import org.springframework.web.bind.annotation.*;
+//
+///**
+// * 系统后台菜单
+// */
+//@Validated
+//@RestController
+//public class SysMenuController {
+//
+//    @Autowired
+//    private SysMenuService sysMenuService;
+//
+//    // @PreAuthorize("@ss.hasPermi('1.3')")
+//    // 由于动态路由需要提前加载,在 /login 时就必须调用,所以此处设置为公共
+//    @GetMapping("/api/public/system/menu/getMenu")
+//    public Result getMenu(@Validated SysMenuDTO sysMenuDTO) {
+//        try {
+//            return Result.success(sysMenuService.queryMenu(sysMenuDTO));
+//        } catch (JsonProcessingException e) {
+//            e.printStackTrace();
+//        }
+//        return null;
+//    }
+//
+//    @PreAuthorize("@ss.hasPermi('1.3.1')")
+//    @PostMapping("/api/system/menu/createMenu")
+//    public Result createMenu(@Validated(SysMenuDTO.Create.class) @RequestBody SysMenuDTO sysMenuDTO) {
+//        return Result.success(sysMenuService.insertMenu(sysMenuDTO), "创建成功");
+//    }
+//
+//    @PreAuthorize("@ss.hasPermi('1.3.2')")
+//    @QueryNullCheck(serviceClass = SysMenuService.class, serviceMethod = "queryMenuDetail", argField = "menu_id", message = "系统菜单不存在")
+//    @PutMapping("/api/system/menu/updateMenu")
+//    public Result updateMenu(@Validated(SysMenuDTO.Update.class) @RequestBody SysMenuDTO sysMenuDTO) {
+//        return Result.success(sysMenuService.updateMenu(sysMenuDTO), "更新成功");
+//    }
+//
+//    @PreAuthorize("@ss.hasPermi('1.3.3')")
+//    @QueryNullCheck(serviceClass = SysMenuService.class, serviceMethod = "queryMenuDetail", argField = "menu_id", message = "系统菜单不存在")
+//    @DeleteMapping("/api/system/menu/deleteMenu")
+//    public Result deleteMenu(@Validated(SysMenuDTO.Delete.class) @RequestBody SysMenuDTO sysMenuDTO) {
+//        return Result.success(sysMenuService.deleteMenu(sysMenuDTO), "删除成功");
+//    }
+//}

+ 16 - 16
src/main/java/com/backendsys/mapper/System/SysMenuMapper.java

@@ -1,16 +1,16 @@
-package com.backendsys.mapper.System;
-
-import com.backendsys.entity.System.SysMenuDTO;
-import org.apache.ibatis.annotations.Mapper;
-
-import java.util.List;
-import java.util.Map;
-
-@Mapper
-public interface SysMenuMapper {
-    List<Map<String, Object>> queryMenuList(SysMenuDTO sysMenuDTO);
-    Map<String, Object> queryMenuDetail(Long menu_id);
-    long insertMenu(SysMenuDTO sysMenuDTO);
-    long updateMenu(SysMenuDTO sysMenuDTO);
-    long deleteMenu(SysMenuDTO sysMenuDTO);
-}
+//package com.backendsys.mapper.System;
+//
+//import com.backendsys.entity.System.SysMenuDTO;
+//import org.apache.ibatis.annotations.Mapper;
+//
+//import java.util.List;
+//import java.util.Map;
+//
+//@Mapper
+//public interface SysMenuMapper {
+//    List<Map<String, Object>> queryMenuList(SysMenuDTO sysMenuDTO);
+//    Map<String, Object> queryMenuDetail(Long menu_id);
+//    long insertMenu(SysMenuDTO sysMenuDTO);
+//    long updateMenu(SysMenuDTO sysMenuDTO);
+//    long deleteMenu(SysMenuDTO sysMenuDTO);
+//}

+ 85 - 85
src/main/java/com/backendsys/mapper/System/SysMenuMapper.xml

@@ -1,93 +1,93 @@
-<?xml version="1.0" encoding="utf-8" ?>
-<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
-<mapper namespace="com.backendsys.mapper.System.SysMenuMapper">
+<!--<?xml version="1.0" encoding="utf-8" ?>-->
+<!--<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >-->
+<!--<mapper namespace="com.backendsys.mapper.System.SysMenuMapper">-->
 
-    <sql id="includeMenu">
-        id,
-        id menu_id,
-        parent_id,
-        title,
-        title_en,
-        path,
-        component,
-        meta,
-        COALESCE(icon, '') icon,
-        COALESCE(permission, '') permission,
-        sort,
-        status
-    </sql>
+<!--    <sql id="includeMenu">-->
+<!--        id,-->
+<!--        id menu_id,-->
+<!--        parent_id,-->
+<!--        title,-->
+<!--        title_en,-->
+<!--        path,-->
+<!--        component,-->
+<!--        meta,-->
+<!--        COALESCE(icon, '') icon,-->
+<!--        COALESCE(permission, '') permission,-->
+<!--        sort,-->
+<!--        status-->
+<!--    </sql>-->
 
-    <resultMap id="resultMapMenu" type="java.util.LinkedHashMap">
-        <id property="id" column="id" jdbcType="BIGINT" />
-        <result property="menu_id" column="menu_id" javaType="java.lang.Long"/>
-        <result property="parent_id" column="parent_id" javaType="java.lang.Long"/>
-        <result property="title" column="title" />
-        <result property="title_en" column="title_en" />
-        <result property="path" column="path" />
-        <result property="component" column="component" />
-        <result property="meta" column="meta" />
-        <result property="icon" column="icon" />
-        <result property="permission" column="permission" />
-        <result property="sort" column="sort" />
-        <result property="status" column="status" javaType="java.lang.Integer"/>
-    </resultMap>
+<!--    <resultMap id="resultMapMenu" type="java.util.LinkedHashMap">-->
+<!--        <id property="id" column="id" jdbcType="BIGINT" />-->
+<!--        <result property="menu_id" column="menu_id" javaType="java.lang.Long"/>-->
+<!--        <result property="parent_id" column="parent_id" javaType="java.lang.Long"/>-->
+<!--        <result property="title" column="title" />-->
+<!--        <result property="title_en" column="title_en" />-->
+<!--        <result property="path" column="path" />-->
+<!--        <result property="component" column="component" />-->
+<!--        <result property="meta" column="meta" />-->
+<!--        <result property="icon" column="icon" />-->
+<!--        <result property="permission" column="permission" />-->
+<!--        <result property="sort" column="sort" />-->
+<!--        <result property="status" column="status" javaType="java.lang.Integer"/>-->
+<!--    </resultMap>-->
 
-    <!-- 查询 列表 -->
-    <select id="queryMenuList" resultMap="resultMapMenu">
-        SELECT <include refid="includeMenu" />
-        FROM sys_menu
-        <where>
-            <if test="status != null and status != ''">
-                AND status = #{status}
-            </if>
-        </where>
-        ORDER BY sort ASC
-    </select>
+<!--    &lt;!&ndash; 查询 列表 &ndash;&gt;-->
+<!--    <select id="queryMenuList" resultMap="resultMapMenu">-->
+<!--        SELECT <include refid="includeMenu" />-->
+<!--        FROM sys_menu-->
+<!--        <where>-->
+<!--            <if test="status != null and status != ''">-->
+<!--                AND status = #{status}-->
+<!--            </if>-->
+<!--        </where>-->
+<!--        ORDER BY sort ASC-->
+<!--    </select>-->
 
-    <!-- 查询 详情 -->
-    <select id="queryMenuDetail" resultMap="resultMapMenu">
-        SELECT <include refid="includeMenu" />
-        FROM sys_menu
-        WHERE id = #{menu_id}
-    </select>
+<!--    &lt;!&ndash; 查询 详情 &ndash;&gt;-->
+<!--    <select id="queryMenuDetail" resultMap="resultMapMenu">-->
+<!--        SELECT <include refid="includeMenu" />-->
+<!--        FROM sys_menu-->
+<!--        WHERE id = #{menu_id}-->
+<!--    </select>-->
 
-    <!-- 创建 -->
-    <insert id="insertMenu" parameterType="com.backendsys.entity.System.SysMenuDTO" useGeneratedKeys="true" keyProperty="id">
-        INSERT INTO sys_menu (title, title_en, path, component, meta
-            <if test="parent_id != null">, parent_id</if>
-            <if test="icon != null">, icon</if>
-            <if test="permission != null">, permission</if>
-            <if test="sort != null">, sort</if>
-            <if test="status != null">, status</if>
-        ) VALUES (#{title}, #{title_en}, #{path}, #{component}, #{meta}
-            <if test="icon != null">, #{icon}</if>
-            <if test="permission != null">, #{permission}</if>
-            <if test="sort != null">, #{sort}</if>
-            <if test="status != null">, #{status}</if>
-        )
-    </insert>
+<!--    &lt;!&ndash; 创建 &ndash;&gt;-->
+<!--    <insert id="insertMenu" parameterType="com.backendsys.entity.System.SysMenuDTO" useGeneratedKeys="true" keyProperty="id">-->
+<!--        INSERT INTO sys_menu (title, title_en, path, component, meta-->
+<!--            <if test="parent_id != null">, parent_id</if>-->
+<!--            <if test="icon != null">, icon</if>-->
+<!--            <if test="permission != null">, permission</if>-->
+<!--            <if test="sort != null">, sort</if>-->
+<!--            <if test="status != null">, status</if>-->
+<!--        ) VALUES (#{title}, #{title_en}, #{path}, #{component}, #{meta}-->
+<!--            <if test="icon != null">, #{icon}</if>-->
+<!--            <if test="permission != null">, #{permission}</if>-->
+<!--            <if test="sort != null">, #{sort}</if>-->
+<!--            <if test="status != null">, #{status}</if>-->
+<!--        )-->
+<!--    </insert>-->
 
-    <!-- 编辑 -->
-    <update id="updateMenu" parameterType="com.backendsys.entity.System.SysMenuDTO">
-        UPDATE sys_menu SET
-        <trim suffixOverrides="," suffix=" ">
-            <if test="title != null and title != ''">title = #{title},</if>
-            <if test="title_en != null and title_en != ''">title_en = #{title_en},</if>
-            <if test="parent_id != null and parent_id != ''">parent_id = #{parent_id},</if>
-            <if test="path != null and path != ''">path = #{path},</if>
-            <if test="component != null and component != ''">component = #{component},</if>
-            <if test="meta != null and meta != ''">meta = #{meta},</if>
-            <if test="icon != null and icon != ''">icon = #{icon},</if>
-            <if test="permission != null and permission != ''">permission = #{permission},</if>
-            <if test="sort != null">sort = #{sort},</if>
-            <if test="status != null">status = #{status},</if>
-        </trim>
-        WHERE id = #{menu_id}
-    </update>
+<!--    &lt;!&ndash; 编辑 &ndash;&gt;-->
+<!--    <update id="updateMenu" parameterType="com.backendsys.entity.System.SysMenuDTO">-->
+<!--        UPDATE sys_menu SET-->
+<!--        <trim suffixOverrides="," suffix=" ">-->
+<!--            <if test="title != null and title != ''">title = #{title},</if>-->
+<!--            <if test="title_en != null and title_en != ''">title_en = #{title_en},</if>-->
+<!--            <if test="parent_id != null and parent_id != ''">parent_id = #{parent_id},</if>-->
+<!--            <if test="path != null and path != ''">path = #{path},</if>-->
+<!--            <if test="component != null and component != ''">component = #{component},</if>-->
+<!--            <if test="meta != null and meta != ''">meta = #{meta},</if>-->
+<!--            <if test="icon != null and icon != ''">icon = #{icon},</if>-->
+<!--            <if test="permission != null and permission != ''">permission = #{permission},</if>-->
+<!--            <if test="sort != null">sort = #{sort},</if>-->
+<!--            <if test="status != null">status = #{status},</if>-->
+<!--        </trim>-->
+<!--        WHERE id = #{menu_id}-->
+<!--    </update>-->
 
-    <!-- 删除 -->
-    <delete id="deleteMenu" parameterType="java.lang.Long">
-        DELETE FROM sys_menu WHERE id = #{menu_id};
-    </delete>
+<!--    &lt;!&ndash; 删除 &ndash;&gt;-->
+<!--    <delete id="deleteMenu" parameterType="java.lang.Long">-->
+<!--        DELETE FROM sys_menu WHERE id = #{menu_id};-->
+<!--    </delete>-->
 
-</mapper>
+<!--</mapper>-->

+ 2 - 0
src/main/java/com/backendsys/modules/system/controller/SysAuthV2Controller.java

@@ -2,6 +2,7 @@ package com.backendsys.modules.system.controller;
 
 import com.backendsys.aspect.RateLimiting;
 import com.backendsys.entity.System.SysUserDTO;
+import com.backendsys.modules.common.aspect.SysLog;
 import com.backendsys.modules.common.utils.Result;
 import com.backendsys.modules.system.entity.SysAuth;
 import com.backendsys.modules.system.entity.SysAuthPhone;
@@ -41,6 +42,7 @@ public class SysAuthV2Controller {
         return Result.success().put("data", sysAuthV2Service.getMobileAreaList(sysMobileArea));
     }
 
+    @SysLog("系统用户登录 (用户名)")
     @Operation(summary = "系统用户登录 (用户名)")
     @PostMapping(value = "/api/system/auth/login")
     public Result systemLogin(@Validated(SysAuth.Login.class) @RequestBody SysAuth sysAuth) {

+ 46 - 48
src/main/java/com/backendsys/modules/system/controller/SysUserController.java

@@ -64,51 +64,7 @@ public class SysUserController {
         if (!user_id.equals(SecurityUtil.getUserId()) && !SecurityUtil.hasPermission("3.2.1.2") && !SecurityUtil.isSuper()) {
             throw new CustException(SecurityEnum.NOAUTH);
         }
-        return Result.success().put("data", sysUserV2Service.selectUserInfo(user_id));
-    }
-
-    /**
-     * 权限:
-     * - 查询用户权限 (3.4.1)
-     * - 查询他人用户权限 (3.4.1.2)
-     */
-    @Operation(summary = "获取系统用户权限")
-    @PreAuthorize("@sr.hasPermission('3.4.1')")
-    @GetMapping("/api/system/user/getUserPermission")
-    public Result getUserPermission(@Parameter(description = "用户ID") Long user_id) {
-
-        // 查询自身的用户信息 (不传参数)
-        user_id = (user_id == null) ? SecurityUtil.getUserId() : user_id;
-        // 查询他人的用户信息
-        // - 查询自己 (无需权限)
-        // - 查询他人 (需要子权限或超级管理员)
-        if (!user_id.equals(SecurityUtil.getUserId()) && !SecurityUtil.hasPermission("3.4.1.2") && !SecurityUtil.isSuper()) {
-            throw new CustException(SecurityEnum.NOAUTH);
-        }
-
-        return Result.success().put("data", sysUserV2Service.selectUserPermission(user_id));
-    }
-
-    /**
-     * 权限:
-     * - 查询用户菜单 (3.5.1)
-     * - 查询他人用户菜单 (3.5.1.2)
-     */
-    @Operation(summary = "获取系统用户菜单")
-    @PreAuthorize("@sr.hasPermission('3.5.1')")
-    @GetMapping("/api/system/user/getUserMenu")
-    public Result getUserMenu(@Parameter(description = "用户ID") Long user_id) {
-
-        // 查询自身的用户信息 (不传参数)
-        user_id = (user_id == null) ? SecurityUtil.getUserId() : user_id;
-        // 查询他人的用户信息
-        // - 查询自己 (无需权限)
-        // - 查询他人 (需要子权限或超级管理员)
-        if (!user_id.equals(SecurityUtil.getUserId()) && !SecurityUtil.hasPermission("3.4.1.2") && !SecurityUtil.isSuper()) {
-            throw new CustException(SecurityEnum.NOAUTH);
-        }
-
-        return Result.success().put("data", sysUserV2Service.selectUserMenu(user_id));
+        return Result.success().put("data", sysUserV2Service.selectUserInfoSimple(user_id));
     }
 
     @SysLog("创建系统用户")
@@ -150,9 +106,6 @@ public class SysUserController {
         return Result.success().put("data", sysUserV2Service.updateUserInfo(sysUserDTO));
     }
 
-    /**
-     * 权限:(同上)
-     */
     @Operation(summary = "编辑系统用户密码")
     @PreAuthorize("@ss.hasPermi('3.2.3.3')")
     @PutMapping("/api/system/user/updateUserPassword")
@@ -223,4 +176,49 @@ public class SysUserController {
         return Result.success().put("data", sysUserV2Service.kickUser(user_id));
     }
 
+
+    /**
+     * 权限:
+     * - 查询用户权限 (3.4.1)
+     * - 查询他人用户权限 (3.4.1.2)
+     */
+    @Operation(summary = "获取系统用户权限")
+    @PreAuthorize("@sr.hasPermission('3.4.1')")
+    @GetMapping("/api/system/user/getUserPermission")
+    public Result getUserPermission(@Parameter(description = "用户ID") Long user_id) {
+
+        // 查询自身的用户信息 (不传参数)
+        user_id = (user_id == null) ? SecurityUtil.getUserId() : user_id;
+        // 查询他人的用户信息
+        // - 查询自己 (无需权限)
+        // - 查询他人 (需要子权限或超级管理员)
+        if (!user_id.equals(SecurityUtil.getUserId()) && !SecurityUtil.hasPermission("3.4.1.2") && !SecurityUtil.isSuper()) {
+            throw new CustException(SecurityEnum.NOAUTH);
+        }
+
+        return Result.success().put("data", sysUserV2Service.selectUserPermission(user_id));
+    }
+
+    /**
+     * 权限:
+     * - 查询用户菜单 (3.5.1)
+     * - 查询他人用户菜单 (3.5.1.2)
+     */
+    @Operation(summary = "获取系统用户菜单")
+    @PreAuthorize("@sr.hasPermission('3.5.1')")
+    @GetMapping("/api/system/user/getUserMenu")
+    public Result getUserMenu(@Parameter(description = "用户ID") Long user_id) {
+
+        // 查询自身的用户信息 (不传参数)
+        user_id = (user_id == null) ? SecurityUtil.getUserId() : user_id;
+        // 查询他人的用户信息
+        // - 查询自己 (无需权限)
+        // - 查询他人 (需要子权限或超级管理员)
+        if (!user_id.equals(SecurityUtil.getUserId()) && !SecurityUtil.hasPermission("3.4.1.2") && !SecurityUtil.isSuper()) {
+            throw new CustException(SecurityEnum.NOAUTH);
+        }
+
+        return Result.success().put("data", sysUserV2Service.selectUserMenu(user_id));
+    }
+
 }

+ 37 - 0
src/main/java/com/backendsys/modules/system/entity/SysUserInfoSimple.java

@@ -0,0 +1,37 @@
+package com.backendsys.modules.system.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+import java.util.List;
+import java.util.Map;
+
+@Data
+public class SysUserInfoSimple {
+    private Long id;
+    private Long user_id;
+    private String username;
+    private String phone;
+    private String phone_area_code;
+    private String nickname;
+    private String email;
+    private Integer gender;
+    private String avatar;
+    private String last_login_ip;
+    private String last_login_uuid;
+    private String last_login_time;
+    private Integer is_super;
+    private Double point_balance;
+    private String invite_code;
+    private Integer status;
+    private Integer audit_status;
+    private String audit_note;
+    private String create_time;
+    private String update_time;
+    private Integer del_flag;
+    private List<Map<String, Object>> roles;
+    private List<Long> role_id;
+}

+ 1 - 1
src/main/java/com/backendsys/modules/system/entity/SysUserRoleMenu.java

@@ -41,7 +41,7 @@ public class SysUserRoleMenu {
 
     private String meta;
     private String icon;
-    private String permission;
+    private String permission_id;
 
     @TableField(exist = false)
     private List<SysUserRoleMenu> children;

+ 5 - 0
src/main/java/com/backendsys/modules/system/service/SysUserV2Service.java

@@ -3,6 +3,7 @@ package com.backendsys.modules.system.service;
 import com.backendsys.modules.system.entity.SysUser;
 import com.backendsys.modules.system.entity.SysUserDTO;
 import com.backendsys.modules.system.entity.SysUserInfo;
+import com.backendsys.modules.system.entity.SysUserInfoSimple;
 import com.backendsys.utils.response.PageEntity;
 import com.baomidou.mybatisplus.extension.service.IService;
 
@@ -15,8 +16,12 @@ public interface SysUserV2Service extends IService<SysUser> {
     PageEntity selectUserList(SysUserDTO sysUserDTO);
     // 获取系统用户列表 (在线的)
     PageEntity selectUserOnlineList(SysUserDTO sysUserDTO);
+
     // 获取系统用户详情
     SysUserInfo selectUserInfo(Long user_id);
+    // 获取系统用户详情(简约)
+    SysUserInfoSimple selectUserInfoSimple(Long user_id);
+
     // 获取系统用户权限
     Map<String, Object> selectUserPermission(Long user_id);
     // 获取系统用户菜单

+ 31 - 0
src/main/java/com/backendsys/modules/system/service/impl/SysUserV2ServiceImpl.java

@@ -113,6 +113,37 @@ public class SysUserV2ServiceImpl extends ServiceImpl<SysUserDao, SysUser> imple
         return sysUserInfo;
     }
 
+    /**
+     * 获取系统用户详情(简约)
+     */
+    @Override
+    public SysUserInfoSimple selectUserInfoSimple(Long user_id) {
+        // 获得 用户账号信息
+        SysUser sysUser = sysUserDao.selectOne(new QueryWrapper<SysUser>().eq("id", user_id));
+        if (sysUser == null) throw new CustException("用户不存在");
+
+        // 获得 用户基本信息
+        SysUserInfo sysUserInfo = sysUserInfoDao.selectOne(new QueryWrapper<SysUserInfo>().eq("user_id", user_id));
+        if (sysUserInfo == null) throw new CustException("用户不存在");
+
+        // 获得 用户角色
+        List<Map<String, Object>> roles = sysUserRoleDao.selectRoleByUserId(user_id);
+        sysUserInfo.setRoles(roles);
+
+        // 获得 用户角色Id
+        List<Long> role_ids = roles.stream().map(m -> Convert.toLong(m.get("role_id"))).collect(Collectors.toList());
+        sysUserInfo.setRole_id(role_ids);
+
+        // 用户账号信息 赋值到 用户基本信息
+        BeanUtils.copyProperties(sysUser, sysUserInfo);
+
+        // 用户基本信息 赋值到 用户基本信息(简约)
+        SysUserInfoSimple sysUserInfoSimple = new SysUserInfoSimple();
+        BeanUtils.copyProperties(sysUserInfo, sysUserInfoSimple);
+
+        return sysUserInfoSimple;
+    }
+
 
     /**
      * 获取系统用户权限

+ 15 - 15
src/main/java/com/backendsys/service/System/SysMenuService.java

@@ -1,15 +1,15 @@
-package com.backendsys.service.System;
-
-import com.backendsys.entity.System.SysMenuDTO;
-import com.fasterxml.jackson.core.JsonProcessingException;
-
-import java.util.List;
-import java.util.Map;
-
-public interface SysMenuService {
-    List<Map<String, Object>> queryMenu(SysMenuDTO sysMenuDTO) throws JsonProcessingException;
-    Map<String, Object> queryMenuDetail(Long menu_id);
-    Map<String, Object> insertMenu(SysMenuDTO sysMenuDTO);
-    Map<String, Object> updateMenu(SysMenuDTO sysMenuDTO);
-    Map<String, Object> deleteMenu(SysMenuDTO sysMenuDTO);
-}
+//package com.backendsys.service.System;
+//
+//import com.backendsys.entity.System.SysMenuDTO;
+//import com.fasterxml.jackson.core.JsonProcessingException;
+//
+//import java.util.List;
+//import java.util.Map;
+//
+//public interface SysMenuService {
+//    List<Map<String, Object>> queryMenu(SysMenuDTO sysMenuDTO) throws JsonProcessingException;
+//    Map<String, Object> queryMenuDetail(Long menu_id);
+//    Map<String, Object> insertMenu(SysMenuDTO sysMenuDTO);
+//    Map<String, Object> updateMenu(SysMenuDTO sysMenuDTO);
+//    Map<String, Object> deleteMenu(SysMenuDTO sysMenuDTO);
+//}

+ 120 - 120
src/main/java/com/backendsys/service/System/SysMenuServiceImpl.java

@@ -1,120 +1,120 @@
-package com.backendsys.service.System;
-
-import com.backendsys.modules.common.config.redis.utils.RedisUtil;
-import com.backendsys.entity.System.SysMenuDTO;
-import com.backendsys.mapper.System.SysMenuMapper;
-import com.fasterxml.jackson.core.JsonProcessingException;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.data.redis.core.RedisTemplate;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-
-import java.util.List;
-import java.util.Map;
-
-@Service
-public class SysMenuServiceImpl implements SysMenuService {
-
-    @Autowired
-    private RedisTemplate redisTemplate;
-
-    @Autowired
-    private RedisUtil redisUtil;
-
-    @Autowired
-    private SysMenuMapper sysMenuMapper;
-
-    /**
-     * 查询 列表
-     */
-    @Override
-    public List<Map<String, Object>> queryMenu(SysMenuDTO sysMenuDTO) throws JsonProcessingException {
-
-//        // 判断 Redis 是否存在缓存
-//        List<Map<String, Object>> menu = null;
-//        String catchSysMenu = redisCache.getCacheObject("catchSysMenu");
-//        // 【不存在】
-//        if (catchSysMenu == null) {
-//            // 从数据库获取
-//            menu = sysMenuMapper.queryMenuList(sysMenuDTO);
-//            // 使用 Jackson 库将 menu 转换为 JSON 字符串
-//            ObjectMapper mapper = new ObjectMapper();
-//            String jsonMenu = null;
-//            try {
-//                jsonMenu = mapper.writeValueAsString(menu);
-//            } catch (Exception e) {
-//                e.printStackTrace();
-//            }
-//            redisCache.setCacheObject("catchSysMenu", jsonMenu);
-//        } else {
-//            // 【存在】
-//            try {
-//                ObjectMapper objectMapper = new ObjectMapper();
-//                menu = objectMapper.readValue(catchSysMenu, List.class);
-//            } catch (Exception e) {
-//                e.printStackTrace();
-//            }
-//        }
-
-        // ?status= 会区分不清楚
-        List<Map<String, Object>> menu = sysMenuMapper.queryMenuList(sysMenuDTO);
-
-        // 将 item.meta 从 string 转为 object 类型
-        // ObjectMapper objectMapper = new ObjectMapper();
-        // for (Map<String, Object> item : menu) {
-        //     String metaStr = (String) item.get("meta");
-        //     Map<String, Object> metaObj = objectMapper.readValue(metaStr, Map.class);
-        //     item.put("meta", metaObj);
-        // }
-
-        return menu;
-    }
-
-    /**
-     * 查询 详情
-     */
-    @Override
-    public Map<String, Object> queryMenuDetail(Long menu_id) {
-        return sysMenuMapper.queryMenuDetail(menu_id);
-    }
-
-    /**
-     * 创建
-     */
-    @Override
-    @Transactional
-    public Map<String, Object> insertMenu(SysMenuDTO sysMenuDTO) {
-        sysMenuMapper.insertMenu(sysMenuDTO);
-        // 删除缓存
-        redisUtil.delete("catchSysMenu");
-        //
-        return Map.of("menu_id", sysMenuDTO.getId());
-    }
-
-    /**
-     * 更新
-     */
-    @Override
-    @Transactional
-    public Map<String, Object> updateMenu(SysMenuDTO sysMenuDTO) {
-        sysMenuMapper.updateMenu(sysMenuDTO);
-        // 删除缓存
-        redisUtil.delete("catchSysMenu");
-        //
-        return Map.of("menu_id", sysMenuDTO.getMenu_id());
-    }
-
-    /**
-     * 删除
-     */
-    @Override
-    @Transactional
-    public Map<String, Object> deleteMenu(SysMenuDTO sysMenuDTO) {
-        sysMenuMapper.deleteMenu(sysMenuDTO);
-        // 删除缓存
-        redisUtil.delete("catchSysMenu");
-        //
-        return Map.of("menu_id", sysMenuDTO.getMenu_id());
-    }
-
-}
+//package com.backendsys.service.System;
+//
+//import com.backendsys.modules.common.config.redis.utils.RedisUtil;
+//import com.backendsys.entity.System.SysMenuDTO;
+//import com.backendsys.mapper.System.SysMenuMapper;
+//import com.fasterxml.jackson.core.JsonProcessingException;
+//import org.springframework.beans.factory.annotation.Autowired;
+//import org.springframework.data.redis.core.RedisTemplate;
+//import org.springframework.stereotype.Service;
+//import org.springframework.transaction.annotation.Transactional;
+//
+//import java.util.List;
+//import java.util.Map;
+//
+//@Service
+//public class SysMenuServiceImpl implements SysMenuService {
+//
+//    @Autowired
+//    private RedisTemplate redisTemplate;
+//
+//    @Autowired
+//    private RedisUtil redisUtil;
+//
+//    @Autowired
+//    private SysMenuMapper sysMenuMapper;
+//
+//    /**
+//     * 查询 列表
+//     */
+//    @Override
+//    public List<Map<String, Object>> queryMenu(SysMenuDTO sysMenuDTO) throws JsonProcessingException {
+//
+////        // 判断 Redis 是否存在缓存
+////        List<Map<String, Object>> menu = null;
+////        String catchSysMenu = redisCache.getCacheObject("catchSysMenu");
+////        // 【不存在】
+////        if (catchSysMenu == null) {
+////            // 从数据库获取
+////            menu = sysMenuMapper.queryMenuList(sysMenuDTO);
+////            // 使用 Jackson 库将 menu 转换为 JSON 字符串
+////            ObjectMapper mapper = new ObjectMapper();
+////            String jsonMenu = null;
+////            try {
+////                jsonMenu = mapper.writeValueAsString(menu);
+////            } catch (Exception e) {
+////                e.printStackTrace();
+////            }
+////            redisCache.setCacheObject("catchSysMenu", jsonMenu);
+////        } else {
+////            // 【存在】
+////            try {
+////                ObjectMapper objectMapper = new ObjectMapper();
+////                menu = objectMapper.readValue(catchSysMenu, List.class);
+////            } catch (Exception e) {
+////                e.printStackTrace();
+////            }
+////        }
+//
+//        // ?status= 会区分不清楚
+//        List<Map<String, Object>> menu = sysMenuMapper.queryMenuList(sysMenuDTO);
+//
+//        // 将 item.meta 从 string 转为 object 类型
+//        // ObjectMapper objectMapper = new ObjectMapper();
+//        // for (Map<String, Object> item : menu) {
+//        //     String metaStr = (String) item.get("meta");
+//        //     Map<String, Object> metaObj = objectMapper.readValue(metaStr, Map.class);
+//        //     item.put("meta", metaObj);
+//        // }
+//
+//        return menu;
+//    }
+//
+//    /**
+//     * 查询 详情
+//     */
+//    @Override
+//    public Map<String, Object> queryMenuDetail(Long menu_id) {
+//        return sysMenuMapper.queryMenuDetail(menu_id);
+//    }
+//
+//    /**
+//     * 创建
+//     */
+//    @Override
+//    @Transactional
+//    public Map<String, Object> insertMenu(SysMenuDTO sysMenuDTO) {
+//        sysMenuMapper.insertMenu(sysMenuDTO);
+//        // 删除缓存
+//        redisUtil.delete("catchSysMenu");
+//        //
+//        return Map.of("menu_id", sysMenuDTO.getId());
+//    }
+//
+//    /**
+//     * 更新
+//     */
+//    @Override
+//    @Transactional
+//    public Map<String, Object> updateMenu(SysMenuDTO sysMenuDTO) {
+//        sysMenuMapper.updateMenu(sysMenuDTO);
+//        // 删除缓存
+//        redisUtil.delete("catchSysMenu");
+//        //
+//        return Map.of("menu_id", sysMenuDTO.getMenu_id());
+//    }
+//
+//    /**
+//     * 删除
+//     */
+//    @Override
+//    @Transactional
+//    public Map<String, Object> deleteMenu(SysMenuDTO sysMenuDTO) {
+//        sysMenuMapper.deleteMenu(sysMenuDTO);
+//        // 删除缓存
+//        redisUtil.delete("catchSysMenu");
+//        //
+//        return Map.of("menu_id", sysMenuDTO.getMenu_id());
+//    }
+//
+//}

+ 2 - 2
src/main/resources/mapper/system/SysUserRoleDao.xml

@@ -16,8 +16,8 @@
         <result property="role_name" column="role_name" />
         <result property="role_description" column="role_description" />
         <result property="user_count" column="user_count" />
-        <result property="sort" column="sort" />
-        <result property="status" column="status" javaType="java.lang.Integer"/>
+        <result property="sort" column="sort"  javaType="java.lang.Integer" />
+        <result property="status" column="status" javaType="java.lang.Integer" />
     </resultMap>
     <select id="selectUserRoleList" resultMap="resultMapUserRole">
         SELECT <include refid="includeUserRole" />, COUNT(us.id) user_count

+ 7 - 2
src/main/resources/mapper/system/SysUserRoleMenu.xml

@@ -11,18 +11,23 @@
         COALESCE(component, '') component,
         COALESCE(meta, '') meta,
         COALESCE(icon, '') icon,
-        COALESCE(permission, '') permission,
+        COALESCE(permission_id, '') permission_id,
         COALESCE(sort, '') sort,
         COALESCE(status, '') status
     </sql>
 
     <resultMap id="resultMapUserRoleMenuSimple" type="java.util.LinkedHashMap">
+        <id property="id" column="id" jdbcType="BIGINT" />
+        <result property="parent_id" column="parent_id" javaType="java.lang.Integer" />
         <result property="menu_name" column="menu_name" />
         <result property="menu_name_en" column="menu_name_en" />
         <result property="path" column="path" />
         <result property="component" column="component" />
         <result property="meta" column="meta" />
         <result property="icon" column="icon" />
+        <result property="permission_id" column="permission_id" />
+        <result property="sort" column="sort" javaType="java.lang.Integer" />
+        <result property="status" column="status" javaType="java.lang.Integer" />
     </resultMap>
 
     <select id="selectMenuListSimple" resultMap="resultMapUserRoleMenuSimple">
@@ -31,7 +36,7 @@
         <where>
             status = 1
             <if test="permission_ids != null and permission_ids.size() > 0">
-                AND permission IN
+                AND permission_id IN
                 <foreach collection="permission_ids" item="permission_id" open="(" separator="," close=")">
                     #{permission_id}
                 </foreach>