Forráskód Böngészése

add:中台增加权限管理(查询账户功能)

lyx 1 hete
szülő
commit
ce82a14755

+ 39 - 0
alien-entity/src/main/java/shop/alien/entity/store/dto/SystemUserQueryDto.java

@@ -0,0 +1,39 @@
+package shop.alien.entity.store.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * 系统用户查询DTO
+ *
+ * @author system
+ * @since 2025-01-XX
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value = "SystemUserQueryDto对象", description = "系统用户查询信息")
+public class SystemUserQueryDto {
+
+    @ApiModelProperty(value = "用户名(支持模糊查询)")
+    private String userName;
+
+    @ApiModelProperty(value = "真实姓名(支持模糊查询)")
+    private String realName;
+
+    @ApiModelProperty(value = "联系电话(支持模糊查询)")
+    private String phone;
+
+    @ApiModelProperty(value = "角色ID(精确查询)")
+    private Long roleId;
+
+    @ApiModelProperty(value = "部门ID(精确查询)")
+    private String departmentId;
+
+    @ApiModelProperty(value = "启用状态 1:启用 0:禁用")
+    private Integer status;
+}
+

+ 9 - 0
alien-entity/src/main/java/shop/alien/entity/store/vo/LifeSysVo.java

@@ -0,0 +1,9 @@
+package shop.alien.entity.store.vo;
+
+import lombok.Data;
+import shop.alien.entity.store.LifeSys;
+
+@Data
+public class LifeSysVo extends LifeSys {
+    private String roleName;
+}

+ 6 - 0
alien-entity/src/main/java/shop/alien/mapper/LifeSysMapper.java

@@ -1,12 +1,18 @@
 package shop.alien.mapper;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Constants;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
 import shop.alien.entity.store.LifeSys;
+import shop.alien.entity.store.vo.LifeSysVo;
 
 /**
  * 系统用户
  */
 @Mapper
 public interface LifeSysMapper extends BaseMapper<LifeSys> {
+    IPage<LifeSysVo> selectPageAndRoleName(IPage<LifeSysVo> pageObj, @Param(Constants.WRAPPER) QueryWrapper<LifeSys> queryWrapper);
 }

+ 15 - 0
alien-entity/src/main/resources/mapper/LifeSysMapper.xml

@@ -0,0 +1,15 @@
+<?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="shop.alien.mapper.LifeSysMapper">
+
+
+    <select id="selectPageAndRoleName" resultType="shop.alien.entity.store.vo.LifeSysVo">
+        SELECT
+            ls.*,
+            IFNULL(GROUP_CONCAT(DISTINCT lsr.role_name SEPARATOR ','), '') AS roleName
+        FROM life_sys ls
+                 LEFT JOIN life_sys_user_role lsur ON lsur.user_id = ls.id
+                 LEFT JOIN life_sys_role lsr ON lsr.role_id = lsur.role_id
+            ${ew.customSqlSegment}
+    </select>
+</mapper>

+ 28 - 0
alien-store/src/main/java/shop/alien/store/controller/SystemController.java

@@ -1,5 +1,6 @@
 package shop.alien.store.controller;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import io.swagger.annotations.*;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
@@ -11,6 +12,7 @@ import shop.alien.entity.store.dto.SystemLoginDto;
 import shop.alien.entity.store.dto.SystemUserAddDto;
 import shop.alien.entity.store.dto.SystemUserStatusDto;
 import shop.alien.entity.store.dto.SystemUserUpdateDto;
+import shop.alien.entity.store.vo.LifeSysVo;
 import shop.alien.entity.store.vo.SystemLoginVo;
 import shop.alien.store.service.SystemService;
 import shop.alien.util.common.TokenInfo;
@@ -92,6 +94,32 @@ public class SystemController {
         return systemService.resetPassword(userId);
     }
 
+    @ApiOperation("分页查询系统用户列表")
+    @ApiOperationSupport(order = 7)
+    @ApiImplicitParams({
+            @ApiImplicitParam(name = "page", value = "页码(默认1)", dataType = "int", paramType = "query"),
+            @ApiImplicitParam(name = "size", value = "每页大小(默认10)", dataType = "int", paramType = "query"),
+            @ApiImplicitParam(name = "userName", value = "用户名(支持模糊查询)", dataType = "String", paramType = "query"),
+            @ApiImplicitParam(name = "realName", value = "真实姓名(支持模糊查询)", dataType = "String", paramType = "query"),
+            @ApiImplicitParam(name = "phone", value = "联系电话(支持模糊查询)", dataType = "String", paramType = "query"),
+            @ApiImplicitParam(name = "roleId", value = "角色ID(精确查询)", dataType = "Long", paramType = "query"),
+            @ApiImplicitParam(name = "departmentId", value = "部门ID(精确查询)", dataType = "String", paramType = "query"),
+    })
+    @GetMapping(value = "/getUserPage")
+    public R<IPage<LifeSysVo>> getUserPage(
+            @RequestParam(defaultValue = "1") int page,
+            @RequestParam(defaultValue = "10") int size,
+            @RequestParam(required = false) String userName,
+            @RequestParam(required = false) String realName,
+            @RequestParam(required = false) String phone,
+            @RequestParam(required = false) String departmentId,
+            @RequestParam(required = false) Long roleId
+            ) {
+        log.info("SystemController.getUserPage => page={}, size={}, userName={}, realName={}, phone={}, roleId={}, departmentId={}, status={}", page, size, userName, realName, phone, roleId, departmentId);
+
+        return R.data(systemService.getUserPage(page, size, userName, realName, phone, departmentId, roleId));
+    }
+
 /**
  * 废弃
   */

+ 17 - 1
alien-store/src/main/java/shop/alien/store/service/SystemService.java

@@ -1,11 +1,13 @@
 package shop.alien.store.service;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
 import shop.alien.entity.result.R;
 import shop.alien.entity.store.LifeSys;
 import shop.alien.entity.store.UserLoginInfo;
 import shop.alien.entity.store.dto.SystemUserAddDto;
 import shop.alien.entity.store.dto.SystemUserStatusDto;
 import shop.alien.entity.store.dto.SystemUserUpdateDto;
+import shop.alien.entity.store.vo.LifeSysVo;
 import shop.alien.entity.store.vo.SystemLoginVo;
 
 /**
@@ -60,5 +62,19 @@ public interface SystemService {
      * @param userId 用户ID
      * @return R<LifeSys>
      */
-    R resetPassword(Integer userId);
+    R<LifeSys> resetPassword(Integer userId);
+
+    /**
+     * 分页查询系统用户列表
+     *
+     * @param page  页码
+     * @param size  每页大小
+     * @param userName 用户名
+     * @param realName 真实姓名
+     * @param phone    联系电话
+     * @param departmentId 部门ID
+     * @param roleId   角色ID
+     * @return IPage<LifeSys>
+     */
+    IPage<LifeSysVo> getUserPage(int page, int size, String userName, String realName, String phone, String departmentId, Long roleId);
 }

+ 60 - 17
alien-store/src/main/java/shop/alien/store/service/impl/SystemServiceImpl.java

@@ -1,7 +1,9 @@
 package shop.alien.store.service.impl;
 
 import com.alibaba.fastjson.JSONObject;
-import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Value;
@@ -13,6 +15,7 @@ import shop.alien.entity.store.UserLoginInfo;
 import shop.alien.entity.store.dto.SystemUserAddDto;
 import shop.alien.entity.store.dto.SystemUserStatusDto;
 import shop.alien.entity.store.dto.SystemUserUpdateDto;
+import shop.alien.entity.store.vo.LifeSysVo;
 import shop.alien.entity.store.vo.SystemLoginVo;
 import shop.alien.mapper.LifeSysMapper;
 import shop.alien.store.config.BaseRedisService;
@@ -22,11 +25,7 @@ import shop.alien.util.common.JwtUtil;
 
 import java.security.MessageDigest;
 import java.security.NoSuchAlgorithmException;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -78,10 +77,9 @@ public class SystemServiceImpl implements SystemService {
         }
         SystemLoginVo result = new SystemLoginVo();
         //给密码加密MD5,查询用户是否存在
-        LifeSys lifeSys = lifeSysMapper.selectOne(
-                new LambdaQueryWrapper<LifeSys>()
-                        .eq(LifeSys::getUserName, username)
-        );
+        QueryWrapper<LifeSys> loginQueryWrapper = new QueryWrapper<>();
+        loginQueryWrapper.eq("user_name", username);
+        LifeSys lifeSys = lifeSysMapper.selectOne(loginQueryWrapper);
         if (lifeSys != null && lifeSys.getUserPassword().equals(encryptToMD5(password))) {
             Map<String, String> tokenMap = new HashMap<>();
             tokenMap.put("phone", lifeSys.getPhone());
@@ -119,8 +117,8 @@ public class SystemServiceImpl implements SystemService {
         }
 
         // 校验用户名是否已存在
-        LambdaQueryWrapper<LifeSys> queryWrapper = new LambdaQueryWrapper<>();
-        queryWrapper.eq(LifeSys::getUserName, userName);
+        QueryWrapper<LifeSys> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("user_name", userName);
         LifeSys existingUser = lifeSysMapper.selectOne(queryWrapper);
         if (existingUser != null) {
             return R.fail("该用户名已存在,请更换其他用户名");
@@ -147,8 +145,8 @@ public class SystemServiceImpl implements SystemService {
     @Override
     public R<LifeSys> addUser(SystemUserAddDto addDto) {
         // 校验用户名是否已存在
-        LambdaQueryWrapper<LifeSys> queryWrapper = new LambdaQueryWrapper<>();
-        queryWrapper.eq(LifeSys::getUserName, addDto.getUserName());
+        QueryWrapper<LifeSys> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("user_name", addDto.getUserName());
         LifeSys existingUser = lifeSysMapper.selectOne(queryWrapper);
         if (existingUser != null) {
             return R.fail("该用户名已存在,请更换其他用户名");
@@ -233,8 +231,8 @@ public class SystemServiceImpl implements SystemService {
 
         // 如果提供了用户名,校验用户名是否与其他用户重复
         if (StringUtils.hasText(updateDto.getUserName()) && !updateDto.getUserName().equals(lifeSys.getUserName())) {
-            LambdaQueryWrapper<LifeSys> queryWrapper = new LambdaQueryWrapper<>();
-            queryWrapper.eq(LifeSys::getUserName, updateDto.getUserName());
+            QueryWrapper<LifeSys> queryWrapper = new QueryWrapper<>();
+            queryWrapper.eq("user_name", updateDto.getUserName());
             LifeSys existingUser = lifeSysMapper.selectOne(queryWrapper);
             if (existingUser != null) {
                 return R.fail("该用户名已存在,请更换其他用户名");
@@ -392,7 +390,7 @@ public class SystemServiceImpl implements SystemService {
     }
 
     @Override
-    public R resetPassword(Integer userId) {
+    public R<LifeSys> resetPassword(Integer userId) {
         // 校验用户ID
         if (userId == null) {
             return R.fail("用户ID不能为空");
@@ -417,6 +415,51 @@ public class SystemServiceImpl implements SystemService {
         return R.fail("密码重置失败,请稍后重试");
     }
 
+    @Override
+    public IPage<LifeSysVo> getUserPage(int page, int size, String userName, String realName, String phone, String departmentId, Long roleId) {
+        // 创建分页对象
+        IPage<LifeSysVo> pageObj = new Page<>(page, size);
+        
+        // 构建查询条件
+        QueryWrapper<LifeSys> queryWrapper = new QueryWrapper<>();
+        
+        // 用户名模糊查询
+        if (StringUtils.hasText(userName)) {
+            queryWrapper.like("ls.user_name", userName);
+        }
+        
+        // 真实姓名模糊查询
+        if (StringUtils.hasText(realName)) {
+            queryWrapper.like("ls.real_name", realName);
+        }
+        
+        // 联系电话模糊查询
+        if (StringUtils.hasText(phone)) {
+            queryWrapper.like("ls.phone", phone);
+        }
+        
+        // 部门ID精确查询
+        if (StringUtils.hasText(departmentId)) {
+            queryWrapper.eq("ls.department_id", departmentId);
+        }
+
+        queryWrapper.eq("ls.status", 1);
+
+        // 如果指定了角色ID,需要先查询角色关联表获取用户ID列表
+        if (roleId != null) {
+            queryWrapper.eq("lsur.role_id", roleId);
+        }
+        
+        // 未删除的用户
+        queryWrapper.eq("ls.delete_flag", 0);
+        queryWrapper.groupBy("ls.id");
+        // 按创建时间倒序
+        queryWrapper.orderByDesc("ls.created_time");
+        
+        // 执行分页查询
+        return lifeSysMapper.selectPageAndRoleName(pageObj, queryWrapper);
+    }
+
     public static String encryptToMD5(String input) {
         try {
             // 获取 MD5 算法的 MessageDigest 实例