liusuyi
2024-08-08 57c673aa3e83677bcf5d30b4b45d06bae6609db8
优化:获取会话
已修改10个文件
179 ■■■■■ 文件已修改
ard-work/src/main/java/com/ruoyi/call/controller/ArdCallGroupController.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/call/domain/ArdCallGroup.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/call/service/IArdCallGroupUserService.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/call/service/impl/ArdCallGroupServiceImpl.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/call/service/impl/ArdCallGroupUserServiceImpl.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/call/service/impl/ArdCallHistoryServiceImpl.java 31 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/call/service/impl/ArdCallSessionServiceImpl.java 33 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/resources/mapper/call/ArdCallGroupMapper.xml 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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);
    }
ard-work/src/main/java/com/ruoyi/call/domain/ArdCallGroup.java
@@ -30,7 +30,7 @@
    /**
     * 群成员列表
     */
    private List<ArdCallGroupUser> ArdCallGroupUsers;
    private List<SysUser> sysUserList;
    /**
     * 群成员id列表
@@ -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() {
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);
}
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;
    }
    /**
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<>();
        }
    }
}
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业务层处理
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直接则分别创建所有群用户的session
                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 {
                //获取自己的session
                 sessionId = ardCallSessionUserService.getSessionId(type, userId, targetId);
            }
        }
        return sessionId;
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">
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);
}
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>