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>