From 57c673aa3e83677bcf5d30b4b45d06bae6609db8 Mon Sep 17 00:00:00 2001
From: liusuyi <1951119284@qq.com>
Date: 星期四, 08 八月 2024 16:14:40 +0800
Subject: [PATCH] 优化:获取会话

---
 ard-work/src/main/java/com/ruoyi/call/service/impl/ArdCallSessionServiceImpl.java   |   33 ++++++-----
 ard-work/src/main/java/com/ruoyi/call/domain/ArdCallGroup.java                      |   10 +-
 ard-work/src/main/java/com/ruoyi/call/service/impl/ArdCallGroupServiceImpl.java     |    3 
 ard-work/src/main/java/com/ruoyi/call/service/IArdCallGroupUserService.java         |    7 ++
 ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml                     |    8 ++
 ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java               |    3 +
 ard-work/src/main/java/com/ruoyi/call/controller/ArdCallGroupController.java        |    9 ++
 ard-work/src/main/java/com/ruoyi/call/service/impl/ArdCallHistoryServiceImpl.java   |   31 ++--------
 ard-work/src/main/resources/mapper/call/ArdCallGroupMapper.xml                      |   42 +++++--------
 ard-work/src/main/java/com/ruoyi/call/service/impl/ArdCallGroupUserServiceImpl.java |   33 +++++++++++
 10 files changed, 108 insertions(+), 71 deletions(-)

diff --git a/ard-work/src/main/java/com/ruoyi/call/controller/ArdCallGroupController.java b/ard-work/src/main/java/com/ruoyi/call/controller/ArdCallGroupController.java
index 7a9e641..6a62505 100644
--- a/ard-work/src/main/java/com/ruoyi/call/controller/ArdCallGroupController.java
+++ b/ard-work/src/main/java/com/ruoyi/call/controller/ArdCallGroupController.java
@@ -4,7 +4,9 @@
 import javax.servlet.http.HttpServletResponse;
 
 import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import com.ruoyi.call.service.IArdCallGroupUserService;
 import com.ruoyi.common.annotation.Anonymous;
+import com.ruoyi.common.core.domain.entity.SysUser;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.security.access.prepost.PreAuthorize;
@@ -39,7 +41,8 @@
 public class ArdCallGroupController extends BaseController {
     @Autowired
     private IArdCallGroupService ardCallGroupService;
-
+    @Autowired
+    private IArdCallGroupUserService ardCallGroupUserService;
     /**
      * 鏌ヨ缇ょ粍鍒楄〃
      */
@@ -49,6 +52,10 @@
     public TableDataInfo list(ArdCallGroup ardCallGroup) {
         startPage();
         List<ArdCallGroup> list = ardCallGroupService.selectArdCallGroupList(ardCallGroup);
+        list.stream().forEach(ardCallGroup1 -> {
+            List<SysUser> userList = ardCallGroupUserService.InGroupUsers(ardCallGroup1.getId());
+            ardCallGroup1.setSysUserList(userList);
+        });
         return getDataTable(list);
     }
 
diff --git a/ard-work/src/main/java/com/ruoyi/call/domain/ArdCallGroup.java b/ard-work/src/main/java/com/ruoyi/call/domain/ArdCallGroup.java
index 772a450..c624280 100644
--- a/ard-work/src/main/java/com/ruoyi/call/domain/ArdCallGroup.java
+++ b/ard-work/src/main/java/com/ruoyi/call/domain/ArdCallGroup.java
@@ -30,7 +30,7 @@
     /**
      * 缇ゆ垚鍛樺垪琛�
      */
-    private List<ArdCallGroupUser> ArdCallGroupUsers;
+    private List<SysUser> sysUserList;
 
     /**
      * 缇ゆ垚鍛榠d鍒楄〃
@@ -53,12 +53,12 @@
         return name;
     }
 
-    public List<ArdCallGroupUser> getArdCallGroupUsers() {
-        return ArdCallGroupUsers;
+    public List<SysUser> getSysUserList() {
+        return sysUserList;
     }
 
-    public void setArdCallGroupUsers(List<ArdCallGroupUser> ardCallGroupUsers) {
-        ArdCallGroupUsers = ardCallGroupUsers;
+    public void setSysUserList(List<SysUser> sysUserList) {
+        this.sysUserList = sysUserList;
     }
 
     public List<String> getUserIds() {
diff --git a/ard-work/src/main/java/com/ruoyi/call/service/IArdCallGroupUserService.java b/ard-work/src/main/java/com/ruoyi/call/service/IArdCallGroupUserService.java
index 78cfbfb..218774b 100644
--- a/ard-work/src/main/java/com/ruoyi/call/service/IArdCallGroupUserService.java
+++ b/ard-work/src/main/java/com/ruoyi/call/service/IArdCallGroupUserService.java
@@ -94,4 +94,11 @@
      * @return 缁撴灉
      */
     List<SysUser> notInGroupUsers(String groupId);
+    /**
+     * 鏌ヨ鎸囧畾缇ょ粍鐨勪汉鍛樺垪琛�
+     *
+     * @param groupId 缇ょ粍涓婚敭
+     * @return 缁撴灉
+     */
+    List<SysUser> InGroupUsers(String groupId);
 }
diff --git a/ard-work/src/main/java/com/ruoyi/call/service/impl/ArdCallGroupServiceImpl.java b/ard-work/src/main/java/com/ruoyi/call/service/impl/ArdCallGroupServiceImpl.java
index ed8859c..c2cef02 100644
--- a/ard-work/src/main/java/com/ruoyi/call/service/impl/ArdCallGroupServiceImpl.java
+++ b/ard-work/src/main/java/com/ruoyi/call/service/impl/ArdCallGroupServiceImpl.java
@@ -55,7 +55,8 @@
      */
     @Override
     public List<ArdCallGroup> selectArdCallGroupList(ArdCallGroup ardCallGroup) {
-        return ardCallGroupMapper.selectArdCallGroupList(ardCallGroup);
+        List<ArdCallGroup> ardCallGroups = ardCallGroupMapper.selectArdCallGroupList(ardCallGroup);
+        return ardCallGroups;
     }
 
     /**
diff --git a/ard-work/src/main/java/com/ruoyi/call/service/impl/ArdCallGroupUserServiceImpl.java b/ard-work/src/main/java/com/ruoyi/call/service/impl/ArdCallGroupUserServiceImpl.java
index 668544f..ade48e1 100644
--- a/ard-work/src/main/java/com/ruoyi/call/service/impl/ArdCallGroupUserServiceImpl.java
+++ b/ard-work/src/main/java/com/ruoyi/call/service/impl/ArdCallGroupUserServiceImpl.java
@@ -163,6 +163,12 @@
         return ardCallGroupUserMapper.removeGroupUser(id, userIds);
     }
 
+    /**
+     * 鏌ヨ涓嶅湪缇ょ粍鐨勪汉鍛樺垪琛�
+     *
+     * @param groupId 缇ょ粍涓婚敭
+     * @return 缁撴灉
+     */
     @Override
     public List<SysUser> notInGroupUsers(String groupId) {
         //鑾峰彇骞冲彴鎵�鏈夌敤鎴�
@@ -181,4 +187,31 @@
                 .collect(Collectors.toList());
         return filteredUserList;
     }
+
+    /**
+     * 鏌ヨ缇ょ粍鐨勪汉鍛樺垪琛�
+     *
+     * @param groupId 缇ょ粍涓婚敭
+     * @return 缁撴灉
+     */
+    @Override
+    public List<SysUser> InGroupUsers(String groupId) {
+        // 1. 鑾峰彇缇ょ粍鍐呯敤鎴�
+        ArdCallGroupUser ardCallGroupUser = new ArdCallGroupUser();
+        ardCallGroupUser.setGroupId(groupId);
+        List<ArdCallGroupUser> ardCallGroupUsers = ardCallGroupUserMapper.selectArdCallGroupUserList(ardCallGroupUser);
+        if (ardCallGroupUsers.size() > 0) {
+            // 2. 鎻愬彇鐢ㄦ埛 ID 鍒楄〃
+            List<String> userIds = ardCallGroupUsers.stream()
+                    .map(ArdCallGroupUser::getUserId)
+                    .collect(Collectors.toList());
+
+            // 3. 鎵归噺鏌ヨ鐢ㄦ埛淇℃伅
+            List<SysUser> users = sysUserMapper.selectUsersByIds(userIds);
+            return users;
+        } else {
+            return new ArrayList<>();
+        }
+    }
+
 }
diff --git a/ard-work/src/main/java/com/ruoyi/call/service/impl/ArdCallHistoryServiceImpl.java b/ard-work/src/main/java/com/ruoyi/call/service/impl/ArdCallHistoryServiceImpl.java
index b28254c..d442904 100644
--- a/ard-work/src/main/java/com/ruoyi/call/service/impl/ArdCallHistoryServiceImpl.java
+++ b/ard-work/src/main/java/com/ruoyi/call/service/impl/ArdCallHistoryServiceImpl.java
@@ -1,40 +1,23 @@
 package com.ruoyi.call.service.impl;
 
-import java.util.HashMap;
-import java.util.List;
-
-import com.alibaba.fastjson2.JSON;
-import com.alibaba.fastjson2.JSONObject;
 import com.ruoyi.call.domain.*;
 import com.ruoyi.call.dto.MessageEvent;
-import com.ruoyi.call.mapper.*;
+import com.ruoyi.call.mapper.ArdCallGroupUserMapper;
+import com.ruoyi.call.mapper.ArdCallHistoryMapper;
+import com.ruoyi.call.mapper.ArdCallSessionMapper;
+import com.ruoyi.call.mapper.ArdCallUnreadMessagesMapper;
 import com.ruoyi.call.service.IArdCallGroupService;
-import com.ruoyi.common.core.domain.entity.SysUser;
+import com.ruoyi.call.service.IArdCallHistoryService;
 import com.ruoyi.common.utils.DateUtils;
-
-import com.ruoyi.common.utils.MessageUtils;
+import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.common.utils.uuid.IdUtils;
-import com.ruoyi.system.service.ISysUserService;
-import com.ruoyi.utils.websocket.util.WebSocketUtils;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.context.ApplicationEventPublisher;
 import org.springframework.stereotype.Service;
 
-import java.util.ArrayList;
-import java.util.Map;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-import java.util.stream.Collectors;
-
-import com.ruoyi.common.utils.StringUtils;
-import com.ruoyi.common.utils.SecurityUtils;
-import com.ruoyi.call.service.IArdCallHistoryService;
-
 import javax.annotation.Resource;
-import javax.websocket.Session;
-
-import static com.ruoyi.utils.websocket.util.WebSocketUtils.ONLINE_USER_SESSIONS;
+import java.util.List;
 
 /**
  * 浼氳瘽鍘嗗彶Service涓氬姟灞傚鐞�
diff --git a/ard-work/src/main/java/com/ruoyi/call/service/impl/ArdCallSessionServiceImpl.java b/ard-work/src/main/java/com/ruoyi/call/service/impl/ArdCallSessionServiceImpl.java
index 7043f4f..31f5512 100644
--- a/ard-work/src/main/java/com/ruoyi/call/service/impl/ArdCallSessionServiceImpl.java
+++ b/ard-work/src/main/java/com/ruoyi/call/service/impl/ArdCallSessionServiceImpl.java
@@ -8,6 +8,7 @@
 import com.ruoyi.call.service.IArdCallGroupUserService;
 import com.ruoyi.call.service.IArdCallSessionService;
 import com.ruoyi.call.service.IArdCallSessionUserService;
+import com.ruoyi.common.core.domain.entity.SysUser;
 import com.ruoyi.common.utils.DateUtils;
 import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.common.utils.StringUtils;
@@ -33,6 +34,8 @@
     private IArdCallSessionUserService ardCallSessionUserService;
     @Resource
     private IArdCallGroupService ardCallGroupService;
+    @Resource
+    private IArdCallGroupUserService ardCallGroupUserService;
 
     /**
      * 鏌ヨ瑙嗛浼氳瘽
@@ -144,7 +147,7 @@
         } else {
             //缇よ亰
             sessionId = ardCallSessionUserService.getGroupSessionId(type, targetId);
-            if (StringUtils.isEmpty(sessionId)) {
+            if (StringUtils.isNull(sessionId)) {
                 //鑻ヤ笉瀛樺湪缇よ亰session鐩存帴鍒欏垎鍒垱寤烘墍鏈夌兢鐢ㄦ埛鐨剆ession
                 ArdCallSession ardCallSession = new ArdCallSession();
                 ardCallSession.setType(type);
@@ -152,21 +155,21 @@
 
                 //鑾峰彇缇ょ敤鎴峰垪琛�
                 ArdCallGroup ardCallGroup = ardCallGroupService.selectArdCallGroupById(targetId);
-                if(ardCallGroup!=null)
-                {
-                    String finalSessionId = sessionId;
-                    ardCallGroup.getArdCallGroupUsers().stream().forEach(groupUser -> {
-                        ArdCallSessionUser ardCallSessionUser = new ArdCallSessionUser();
-                        ardCallSessionUser.setSessionId(finalSessionId);
-                        ardCallSessionUser.setType(type);
-                        ardCallSessionUser.setUserId(groupUser.getUserId());
-                        ardCallSessionUser.setTargetId(targetId);
-                        ardCallSessionUserService.insertArdCallSessionUser(ardCallSessionUser);
-                    });
+                if (ardCallGroup != null) {
+                    List<SysUser> userList = ardCallGroupUserService.InGroupUsers(ardCallGroup.getId());
+                    if (userList.size() > 0) {
+                        ardCallGroup.setSysUserList(userList);
+                        String finalSessionId = sessionId;
+                        ardCallGroup.getSysUserList().stream().forEach(groupUser -> {
+                            ArdCallSessionUser ardCallSessionUser = new ArdCallSessionUser();
+                            ardCallSessionUser.setSessionId(finalSessionId);
+                            ardCallSessionUser.setType(type);
+                            ardCallSessionUser.setUserId(groupUser.getUserId());
+                            ardCallSessionUser.setTargetId(targetId);
+                            ardCallSessionUserService.insertArdCallSessionUser(ardCallSessionUser);
+                        });
+                    }
                 }
-            } else {
-                //鑾峰彇鑷繁鐨剆ession
-                 sessionId = ardCallSessionUserService.getSessionId(type, userId, targetId);
             }
         }
         return sessionId;
diff --git a/ard-work/src/main/resources/mapper/call/ArdCallGroupMapper.xml b/ard-work/src/main/resources/mapper/call/ArdCallGroupMapper.xml
index 2d33545..e597866 100644
--- a/ard-work/src/main/resources/mapper/call/ArdCallGroupMapper.xml
+++ b/ard-work/src/main/resources/mapper/call/ArdCallGroupMapper.xml
@@ -1,40 +1,30 @@
 <?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">
+        PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
+        "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="com.ruoyi.call.mapper.ArdCallGroupMapper">
-
-    <resultMap type="ArdCallGroup" id="ArdCallGroupResult">
-        <result property="id"    column="id"    />
-        <result property="name"    column="name"    />
-        <result property="createBy"    column="create_by"    />
-        <result property="createTime"    column="create_time"    />
-        <result property="updateBy"    column="update_by"    />
-        <result property="updateTime"    column="update_time"    />
-        <collection property="ardCallGroupUsers" ofType="ArdCallGroupUser">
-            <result property="id"    column="id"    />
-            <result property="groupId"    column="group_id"    />
-            <result property="userId"    column="user_id"    />
-            <association property="sysUser" column="user_id" select="com.ruoyi.system.mapper.SysUserMapper.selectUserById"/>
-        </collection>
+    <resultMap id="ArdCallGroupResult" type="ArdCallGroup">
+        <id property="id" column="id" />
+        <result property="name" column="name" />
+        <result property="createBy" column="create_by" />
+        <result property="createTime" column="create_time" />
+        <result property="updateBy" column="update_by" />
+        <result property="updateTime" column="update_time" />
     </resultMap>
-
-
     <sql id="selectArdCallGroupVo">
-        select acg.*,acgu.* from ard_call_group acg
-        left join ard_call_group_user acgu on acg.id = acgu.group_id
+        select id,name,create_by,create_time,update_by,update_time  from ard_call_group
     </sql>
 
     <select id="selectArdCallGroupList" parameterType="ArdCallGroup" resultMap="ArdCallGroupResult">
         <include refid="selectArdCallGroupVo"/>
         <where>
-            <if test="name != null  and name != ''"> and name like '%'||#{name}||'%'</if>
+            <if test="name != null  and name != ''">and name like '%'||#{name}||'%'</if>
         </where>
     </select>
 
     <select id="selectArdCallGroupById" parameterType="String" resultMap="ArdCallGroupResult">
         <include refid="selectArdCallGroupVo"/>
-        where acg.id = #{id}
+        where id = #{id}
     </select>
 
     <insert id="insertArdCallGroup" parameterType="ArdCallGroup">
@@ -46,7 +36,7 @@
             <if test="createTime != null">create_time,</if>
             <if test="updateBy != null">update_by,</if>
             <if test="updateTime != null">update_time,</if>
-         </trim>
+        </trim>
         <trim prefix="values (" suffix=")" suffixOverrides=",">
             <if test="id != null">#{id},</if>
             <if test="name != null">#{name},</if>
@@ -54,7 +44,7 @@
             <if test="createTime != null">#{createTime},</if>
             <if test="updateBy != null">#{updateBy},</if>
             <if test="updateTime != null">#{updateTime},</if>
-         </trim>
+        </trim>
     </insert>
 
     <update id="updateArdCallGroup" parameterType="ArdCallGroup">
@@ -70,7 +60,9 @@
     </update>
 
     <delete id="deleteArdCallGroupById" parameterType="String">
-        delete from ard_call_group where id = #{id}
+        delete
+        from ard_call_group
+        where id = #{id}
     </delete>
 
     <delete id="deleteArdCallGroupByIds" parameterType="String">
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java
index d890677..fe47632 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java
@@ -152,4 +152,7 @@
     List<SysUser> selectUserByDeptIdList(@Param("deptIdList")List<Long> deptIdList);
 
     List<String> selectUserIdByCarId(String carId);
+
+    // 鎵归噺鏌ヨ鐢ㄦ埛淇℃伅
+    List<SysUser> selectUsersByIds(@Param("userIds") List<String> userIds);
 }
diff --git a/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml b/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml
index e794039..5371232 100644
--- a/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml
+++ b/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml
@@ -390,4 +390,12 @@
         )
         select rsd.dept_id from rsd)
     </select>
+    <select id="selectUsersByIds" parameterType="list" resultType="SysUser">
+        SELECT * FROM sys_user
+        WHERE user_id IN
+        <foreach collection="userIds" item="userId" open="(" close=")" separator=",">
+            #{userId}
+        </foreach>
+    </select>
+
 </mapper> 
\ No newline at end of file

--
Gitblit v1.9.3