Sfoglia il codice sorgente

新增 获得系统用户列表 (在线的) V2

tsurumure 9 mesi fa
parent
commit
92c5ada6cd

+ 6 - 5
src/main/java/com/backendsys/modules/system/controller/SysUserV2Controller.java

@@ -33,11 +33,12 @@ public class SysUserV2Controller {
         return Result.success().put("data", sysUserV2Service.selectUserList(sysUserDTO));
     }
 
-//    @PreAuthorize("@ss.hasPermi('3.1')")
-//    @GetMapping("/api/v2/system/user/getUserOnlineList")
-//    public Result getUserOnlineList(@Validated PageDTO pageDTO, @Validated com.backendsys.entity.System.SysUserDTO sysUserDTO) {
-//        return Result.success().put("data", sysUserService.queryUserWithLogined(pageDTO.getPage_num(), pageDTO.getPage_size(), sysUserDTO));
-//    }
+    @Operation(summary = "获得系统用户列表 (在线的)")
+    @PreAuthorize("@ss.hasPermi('3.1')")
+    @GetMapping("/api/v2/system/user/getUserOnlineList")
+    public Result getUserOnlineList(SysUserDTO sysUserDTO) {
+        return Result.success().put("data", sysUserV2Service.selectUserOnlineList(sysUserDTO));
+    }
 
     /**
      * 权限:

+ 2 - 0
src/main/java/com/backendsys/modules/system/dao/SysUserInfoDao.java

@@ -6,11 +6,13 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import org.apache.ibatis.annotations.Mapper;
 
 import java.util.List;
+import java.util.Set;
 
 @Mapper
 public interface SysUserInfoDao extends BaseMapper<SysUserInfo> {
 
     List<SysUserInfo> selectUserList(SysUserDTO sysUserDTO);
+    List<SysUserInfo> selectUserByLastLoginUuids(List<String> last_login_uuids);
 
 //    SysUserDTO selectUserDetail(Long user_id);
 

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

@@ -13,6 +13,8 @@ public interface SysUserV2Service extends IService<SysUser> {
 
     // 获得系统用户列表
     PageEntity selectUserList(SysUserDTO sysUserDTO);
+    // 获得系统用户列表 (在线的)
+    PageEntity selectUserOnlineList(SysUserDTO sysUserDTO);
 
     // 获得系统用户详情
     SysUserInfo selectUserInfo(Long user_id);

+ 23 - 3
src/main/java/com/backendsys/modules/system/service/impl/SysUserV2ServiceImpl.java

@@ -1,6 +1,7 @@
 package com.backendsys.modules.system.service.impl;
 
 import com.backendsys.exception.CustException;
+import com.backendsys.modules.common.config.redis.utils.RedisUtil;
 import com.backendsys.modules.system.dao.*;
 import com.backendsys.modules.system.entity.SysUser.SysUser;
 import com.backendsys.modules.system.entity.SysUser.SysUserDTO;
@@ -14,11 +15,10 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.beans.BeanUtils;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Service;
 
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Objects;
+import java.util.*;
 import java.util.stream.Collectors;
 
 @Service
@@ -35,7 +35,12 @@ public class SysUserV2ServiceImpl extends ServiceImpl<SysUserDao, SysUser> imple
     @Autowired
     private SysUserRoleModuleRelationDao sysUserRoleModuleRelationDao;
 
+    @Autowired
+    private RedisTemplate redisTemplate;
 
+    @Autowired
+    private RedisUtil redisUtil;
+    
     /**
      * 获得系统用户列表
      */
@@ -47,6 +52,21 @@ public class SysUserV2ServiceImpl extends ServiceImpl<SysUserDao, SysUser> imple
         return new PageInfoResult(list).toEntity();
     }
 
+    /**
+     * 获得系统用户列表 (在线的)
+     */
+    @Override
+    public PageEntity selectUserOnlineList(SysUserDTO sysUserDTO) {
+        // 分页
+        PageUtils.startPage();
+        // 获得 用户最后登录的 tokenUUID
+        Collection<String> redisKeys = redisUtil.keys("token:*");
+        List<String> last_login_uuids = redisKeys.stream().map(e -> String.valueOf(e).replace("token:id:", "")).collect(Collectors.toList());
+        List<SysUserInfo> list = sysUserInfoDao.selectUserByLastLoginUuids(last_login_uuids);
+        return new PageInfoResult(list).toEntity();
+    }
+
+
     /**
      * 获得系统用户详情
      */

+ 37 - 1
src/main/resources/mapper/system/SysUserInfoDao.xml

@@ -28,7 +28,7 @@
 
     <resultMap id="resultMapUserList" type="java.util.LinkedHashMap">
         <id property="id" column="id" jdbcType="BIGINT" />
-        <result property="user_id" column="user_id" />
+        <result property="user_id" column="user_id" javaType="java.lang.Long" />
         <result property="username" column="username" />
         <result property="phone" column="phone" />
         <result property="phone_area_code" column="phone_area_code" />
@@ -150,4 +150,40 @@
 <!--        AND uf.del_flag = -1-->
 <!--    </select>-->
 
+    <resultMap id="resultMapUserByLastLoginUuids" type="java.util.LinkedHashMap">
+        <id property="id" column="id" jdbcType="BIGINT" />
+        <result property="username" column="username" />
+        <result property="phone" column="phone" />
+        <result property="phone_area_code" column="phone_area_code" />
+        <result property="nickname" column="nickname" />
+        <result property="email" column="email" />
+        <result property="avatar" column="avatar" />
+        <result property="is_super" column="is_super" javaType="java.lang.Integer" />
+        <result property="status" column="status" javaType="java.lang.Integer" />
+        <result property="audit_status" column="audit_status" javaType="java.lang.Integer" />
+    </resultMap>
+
+    <!-- 查询当前在线用户的信息 -->
+    <!--  resultType="java.util.LinkedHashMap" -->
+    <select id="selectUserByLastLoginUuids" resultMap="resultMapUserByLastLoginUuids">
+        SELECT
+        u.id id,
+        COALESCE(u.username, '') username,
+        COALESCE(u.phone, '') phone,
+        COALESCE(u.phone_area_code, '') phone_area_code,
+
+        COALESCE(uf.nickname, '') nickname,
+        COALESCE(uf.email, '') email,
+        COALESCE(uf.avatar, '') avatar,
+        uf.is_super is_super,
+        uf.status status,
+        uf.audit_status audit_status
+        FROM sys_user u
+        LEFT JOIN sys_user_info uf ON u.id = uf.user_id
+        WHERE uf.last_login_uuid IN
+        <foreach collection="last_login_uuids" item="last_login_uuid" open="(" separator="," close=")">
+            #{last_login_uuid}
+        </foreach>
+    </select>
+
 </mapper>