liusuyi
2024-07-06 0ab014198a8b4e40fa26da394373a4bcdb571148
增加:群聊业务
已添加36个文件
已修改2个文件
3373 ■■■■■ 文件已修改
ard-work/src/main/java/com/ruoyi/call/compare/ArdCallSessionUserComparator.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/call/controller/ArdCallGroupController.java 93 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/call/controller/ArdCallGroupUserController.java 124 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/call/controller/ArdCallHistoryController.java 88 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/call/controller/ArdCallSessionController.java 93 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/call/controller/ArdCallSessionUserController.java 101 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/call/domain/ArdCallGroup.java 83 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/call/domain/ArdCallGroupUser.java 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/call/domain/ArdCallHistory.java 104 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/call/domain/ArdCallSession.java 86 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/call/domain/ArdCallSessionUser.java 107 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/call/domain/ArdCallUnreadMessages.java 66 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/call/mapper/ArdCallGroupMapper.java 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/call/mapper/ArdCallGroupUserMapper.java 84 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/call/mapper/ArdCallHistoryMapper.java 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/call/mapper/ArdCallSessionMapper.java 62 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/call/mapper/ArdCallSessionUserMapper.java 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/call/mapper/ArdCallUnreadMessagesMapper.java 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/call/service/IArdCallGroupService.java 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/call/service/IArdCallGroupUserService.java 97 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/call/service/IArdCallHistoryService.java 61 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/call/service/IArdCallSessionService.java 72 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/call/service/IArdCallSessionUserService.java 80 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/call/service/IArdCallUnreadMessagesService.java 70 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/call/service/impl/ArdCallGroupServiceImpl.java 122 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/call/service/impl/ArdCallGroupUserServiceImpl.java 167 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/call/service/impl/ArdCallHistoryServiceImpl.java 152 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/call/service/impl/ArdCallSessionServiceImpl.java 174 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/call/service/impl/ArdCallSessionUserServiceImpl.java 147 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/call/service/impl/ArdCallUnreadMessagesServiceImpl.java 108 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/utils/websocket/service/ChatServerEndpoint.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/resources/mapper/call/ArdCallGroupMapper.xml 82 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/resources/mapper/call/ArdCallGroupUserMapper.xml 108 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/resources/mapper/call/ArdCallHistoryMapper.xml 114 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/resources/mapper/call/ArdCallSessionMapper.xml 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/resources/mapper/call/ArdCallSessionUserMapper.xml 94 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/resources/mapper/call/ArdCallUnreadMessagesMapper.xml 74 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ruoyi-admin/src/main/java/com/ruoyi/web/core/config/SwaggerConfig.java 32 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ard-work/src/main/java/com/ruoyi/call/compare/ArdCallSessionUserComparator.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,18 @@
package com.ruoyi.call.compare;
import com.ruoyi.call.domain.ArdCallSessionUser;
import org.springframework.stereotype.Component;
import java.util.Comparator;
import java.util.Date;
@Component
public class ArdCallSessionUserComparator implements Comparator<ArdCallSessionUser> {
    @Override
    public int compare(ArdCallSessionUser o1, ArdCallSessionUser o2) {
        Date createTime1 = o1.getArdCallHistory().getCreateTime();
        Date createTime2 = o2.getArdCallHistory().getCreateTime();
        // æ ¹æ® createTime è¿›è¡Œæ¯”较
        return createTime2.compareTo(createTime1);
    }
}
ard-work/src/main/java/com/ruoyi/call/controller/ArdCallGroupController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,93 @@
package com.ruoyi.call.controller;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import com.ruoyi.common.annotation.Anonymous;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.call.domain.ArdCallGroup;
import com.ruoyi.call.service.IArdCallGroupService;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.common.core.page.TableDataInfo;
/**
 * ä¼šè¯ç¾¤ç»„Controller
 *
 * @author ard
 * @date 2024-07-03
 */
@Api(tags = "群聊-群组接口")
@RestController
@RequestMapping("/call/group")
@Anonymous
public class ArdCallGroupController extends BaseController {
    @Autowired
    private IArdCallGroupService ardCallGroupService;
    /**
     * æŸ¥è¯¢ç¾¤ç»„列表
     */
    @ApiOperation("查询群组列表")
    @ApiOperationSupport(ignoreParameters = {"ardCallGroupUsers","userIds","params"})
    @GetMapping("/list")
    public TableDataInfo list(ArdCallGroup ardCallGroup) {
        startPage();
        List<ArdCallGroup> list = ardCallGroupService.selectArdCallGroupList(ardCallGroup);
        return getDataTable(list);
    }
    /**
     * èŽ·å–ç¾¤ç»„è¯¦ç»†ä¿¡æ¯
     */
    @ApiOperation("获取群组详细信息")
    @GetMapping(value = "/{id}")
    public AjaxResult getInfo(@PathVariable("id") String id) {
        return success(ardCallGroupService.selectArdCallGroupById(id));
    }
    /**
     * æ–°å¢žç¾¤ç»„
     */
    @ApiOperation("新增群组")
    @ApiOperationSupport(includeParameters = {"param.userIds","param.name"})
    @PostMapping
    public AjaxResult add(@RequestBody ArdCallGroup ardCallGroup) {
        return success(ardCallGroupService.insertArdCallGroup(ardCallGroup));
    }
    /**
     * ä¿®æ”¹ç¾¤ç»„
     */
    @ApiOperation("修改群组")
    @PutMapping
    public AjaxResult edit(@RequestBody ArdCallGroup ardCallGroup) {
        return toAjax(ardCallGroupService.updateArdCallGroup(ardCallGroup));
    }
    /**
     * åˆ é™¤ç¾¤ç»„
     */
    @ApiOperation("删除群组")
    @DeleteMapping("/{ids}")
    public AjaxResult remove(@PathVariable String[] ids) {
        return toAjax(ardCallGroupService.deleteArdCallGroupByIds(ids));
    }
}
ard-work/src/main/java/com/ruoyi/call/controller/ArdCallGroupUserController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,124 @@
package com.ruoyi.call.controller;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import com.ruoyi.common.annotation.Anonymous;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.call.domain.ArdCallGroupUser;
import com.ruoyi.call.service.IArdCallGroupUserService;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.common.core.page.TableDataInfo;
/**
 * ç¾¤ç»„用户中间Controller
 *
 * @author ard
 * @date 2024-07-03
 */
@Api(tags = "群聊-群组用户接口")
@RestController
@RequestMapping("/call/groupuser")
@Anonymous
public class ArdCallGroupUserController extends BaseController {
    @Autowired
    private IArdCallGroupUserService ardCallGroupUserService;
    /**
     * æŸ¥è¯¢ç¾¤ç»„用户中间列表
     */
    @GetMapping("/list")
    public TableDataInfo list(ArdCallGroupUser ardCallGroupUser) {
        startPage();
        List<ArdCallGroupUser> list = ardCallGroupUserService.selectArdCallGroupUserList(ardCallGroupUser);
        return getDataTable(list);
    }
    /**
     * èŽ·å–ç¾¤ç»„ç”¨æˆ·ä¸­é—´è¯¦ç»†ä¿¡æ¯
     */
    @GetMapping(value = "/{id}")
    public AjaxResult getInfo(@PathVariable("id") String id) {
        return success(ardCallGroupUserService.selectArdCallGroupUserById(id));
    }
    /**
     * æ–°å¢žç¾¤ç»„用户中间
     */
    @PreAuthorize("@ss.hasPermi('call:groupuser:add')")
    @PostMapping
    public AjaxResult add(@RequestBody ArdCallGroupUser ardCallGroupUser) {
        return toAjax(ardCallGroupUserService.insertArdCallGroupUser(ardCallGroupUser));
    }
    /**
     * ä¿®æ”¹ç¾¤ç»„用户中间
     */
    @PreAuthorize("@ss.hasPermi('call:groupuser:edit')")
    @PutMapping
    public AjaxResult edit(@RequestBody ArdCallGroupUser ardCallGroupUser) {
        return toAjax(ardCallGroupUserService.updateArdCallGroupUser(ardCallGroupUser));
    }
    /**
     * åˆ é™¤ç¾¤ç»„用户中间
     */
    @PreAuthorize("@ss.hasPermi('call:groupuser:remove')")
    @DeleteMapping("/{ids}")
    public AjaxResult remove(@PathVariable String[] ids) {
        return toAjax(ardCallGroupUserService.deleteArdCallGroupUserByIds(ids));
    }
    /**
     * æŸ¥è¯¢ç”¨æˆ·æ‰€åœ¨ç¾¤ç»„
     */
    @ApiOperation("查询用户所在群组")
    @GetMapping(value = "/getGroupListByUserId/{userId}")
    public AjaxResult getGroupListByUserId(@PathVariable("userId") String userId) {
        return success(ardCallGroupUserService.getGroupListByUserId(userId));
    }
    /**
     * ä¸åœ¨ç¾¤ç»„的人员列表
     */
    @ApiOperation("不在群组的人员列表")
    @GetMapping(value = "/notInGroupUsers/{groupId}")
    public AjaxResult notInGroupUsers (@PathVariable("groupId") String groupId) {
        return success(ardCallGroupUserService.notInGroupUsers(groupId));
    }
    /**
     * é‚€è¯·ç¾¤ç»„成员
     */
    @ApiOperation("邀请群组成员")
    @PostMapping("/addGroupUser")
    public AjaxResult addGroupUser(String groupId, String[] userIds) {
        return toAjax(ardCallGroupUserService.addGroupUser(groupId, userIds));
    }
    /**
     * ç§»é™¤ç¾¤ç»„成员
     */
    @ApiOperation("移除群组成员")
    @PostMapping("/removeGroupUser")
    public AjaxResult removeGroupUser(String groupId, String[] userIds) {
        return toAjax(ardCallGroupUserService.removeGroupUser(groupId, userIds));
    }
}
ard-work/src/main/java/com/ruoyi/call/controller/ArdCallHistoryController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,88 @@
package com.ruoyi.call.controller;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import com.ruoyi.common.annotation.Anonymous;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.call.domain.ArdCallHistory;
import com.ruoyi.call.service.IArdCallHistoryService;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.common.core.page.TableDataInfo;
/**
 * ä¼šè¯åŽ†å²Controller
 *
 * @author ard
 * @date 2024-07-03
 */
@Api(tags = "群聊-历史消息接口")
@RestController
@RequestMapping("/call/history")
@Anonymous
public class ArdCallHistoryController extends BaseController {
    @Autowired
    private IArdCallHistoryService ardCallHistoryService;
    /**
     * æŸ¥è¯¢ä¼šè¯æ¶ˆæ¯åˆ—表
     */
    @ApiOperation("查询会话消息列表")
    @GetMapping("/list")
    public TableDataInfo list(ArdCallHistory ardCallHistory) {
        startPage();
        List<ArdCallHistory> list = ardCallHistoryService.selectArdCallHistoryList(ardCallHistory);
        return getDataTable(list);
    }
    /**
     * èŽ·å–ä¼šè¯åŽ†å²è¯¦ç»†ä¿¡æ¯
     */
    @GetMapping(value = "/{id}")
    public AjaxResult getInfo(@PathVariable("id") String id) {
        return success(ardCallHistoryService.selectArdCallHistoryById(id));
    }
    /**
     * æ–°å¢žä¼šè¯æ¶ˆæ¯
     */
    @ApiOperation("新增会话消息")
    @ApiOperationSupport(includeParameters = {"param.userId","param.targetId", "param.sessionId", "param.content", "param.type"})
    @PostMapping
    public AjaxResult add(@RequestBody ArdCallHistory ardCallHistory) {
        return toAjax(ardCallHistoryService.insertArdCallHistory(ardCallHistory));
    }
    /**
     * ä¿®æ”¹ä¼šè¯æ¶ˆæ¯
     */
    @PutMapping
    public AjaxResult edit(@RequestBody ArdCallHistory ardCallHistory) {
        return toAjax(ardCallHistoryService.updateArdCallHistory(ardCallHistory));
    }
    /**
     * åˆ é™¤ä¼šè¯æ¶ˆæ¯
     */
    @DeleteMapping("/{ids}")
    public AjaxResult remove(@PathVariable String[] ids) {
        return toAjax(ardCallHistoryService.deleteArdCallHistoryByIds(ids));
    }
}
ard-work/src/main/java/com/ruoyi/call/controller/ArdCallSessionController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,93 @@
package com.ruoyi.call.controller;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import com.ruoyi.common.annotation.Anonymous;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.call.domain.ArdCallSession;
import com.ruoyi.call.service.IArdCallSessionService;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.common.core.page.TableDataInfo;
/**
 * è§†é¢‘会话Controller
 *
 * @author ard
 * @date 2024-07-03
 */
@Api(tags = "群聊-会话接口")
@RestController
@RequestMapping("/call/session")
@Anonymous
public class ArdCallSessionController extends BaseController {
    @Autowired
    private IArdCallSessionService ardCallSessionService;
    /**
     * æŸ¥è¯¢ä¼šè¯åˆ—表
     */
    @GetMapping("/list")
    public TableDataInfo list(ArdCallSession ardCallSession) {
        startPage();
        List<ArdCallSession> list = ardCallSessionService.selectArdCallSessionList(ardCallSession);
        return getDataTable(list);
    }
    /**
     * èŽ·å–ä¼šè¯è¯¦ç»†ä¿¡æ¯
     */
    @GetMapping(value = "/{id}")
    public AjaxResult getInfo(@PathVariable("id") String id) {
        return success(ardCallSessionService.selectArdCallSessionById(id));
    }
    /**
     * èŽ·å–ä¼šè¯
     */
    @ApiOperation("获取会话")
    @GetMapping(value = "/getSession")
    public AjaxResult getSession(String type,String userId, String targetId) {
        return success(ardCallSessionService.getSession(type,userId,targetId));
    }
    /**
     * æ–°å¢žä¼šè¯
     */
    @PostMapping
    public AjaxResult add(@RequestBody ArdCallSession ardCallSession) {
        return success(ardCallSessionService.insertArdCallSession(ardCallSession));
    }
    /**
     * ä¿®æ”¹ä¼šè¯
     */
    @PutMapping
    public AjaxResult edit(@RequestBody ArdCallSession ardCallSession) {
        return toAjax(ardCallSessionService.updateArdCallSession(ardCallSession));
    }
    /**
     * åˆ é™¤ä¼šè¯
     */
    @ApiOperation("删除会话")
    @DeleteMapping("/{ids}")
    public AjaxResult remove(@PathVariable String[] ids) {
        return toAjax(ardCallSessionService.deleteArdCallSessionByIds(ids));
    }
}
ard-work/src/main/java/com/ruoyi/call/controller/ArdCallSessionUserController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,101 @@
package com.ruoyi.call.controller;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import com.ruoyi.call.service.IArdCallUnreadMessagesService;
import com.ruoyi.common.annotation.Anonymous;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.call.domain.ArdCallSessionUser;
import com.ruoyi.call.service.IArdCallSessionUserService;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.common.core.page.TableDataInfo;
/**
 * ä¼šè¯ç”¨æˆ·ä¸­é—´è¡¨Controller
 *
 * @author ard
 * @date 2024-07-04
 */
@Api(tags = "群聊-会话接口")
@RestController
@RequestMapping("/call/sessionuser")
@Anonymous
public class ArdCallSessionUserController extends BaseController {
    @Autowired
    private IArdCallSessionUserService ardCallSessionUserService;
    @Autowired
    private IArdCallUnreadMessagesService ardCallUnreadMessagesService;
    /**
     * èŽ·å–ä¼šè¯åˆ—è¡¨
     */
    @ApiOperation("获取会话列表")
    @ApiOperationSupport(ignoreParameters  = {"id","unReadCount","sessionId","targetId","type","params","ardCallHistory"})
    @GetMapping("/list")
    public TableDataInfo list(ArdCallSessionUser ardCallSessionUser) {
        startPage();
        List<ArdCallSessionUser> list = ardCallSessionUserService.selectArdCallSessionUserList(ardCallSessionUser);
        return getDataTable(list);
    }
    /**
     * èŽ·å–ä¼šè¯ç”¨æˆ·ä¸­é—´è¡¨è¯¦ç»†ä¿¡æ¯
     */
    @GetMapping(value = "/{id}")
    public AjaxResult getInfo(@PathVariable("id") String id) {
        return success(ardCallSessionUserService.selectArdCallSessionUserById(id));
    }
    /**
     * æ–°å¢žä¼šè¯ç”¨æˆ·ä¸­é—´è¡¨
     */
    @PostMapping
    public AjaxResult add(@RequestBody ArdCallSessionUser ardCallSessionUser) {
        return toAjax(ardCallSessionUserService.insertArdCallSessionUser(ardCallSessionUser));
    }
    /**
     * ä¿®æ”¹ä¼šè¯ç”¨æˆ·ä¸­é—´è¡¨
     */
    @PutMapping
    public AjaxResult edit(@RequestBody ArdCallSessionUser ardCallSessionUser) {
        return toAjax(ardCallSessionUserService.updateArdCallSessionUser(ardCallSessionUser));
    }
    /**
     * åˆ é™¤ä¼šè¯ç”¨æˆ·ä¸­é—´è¡¨
     */
    @DeleteMapping("/{ids}")
    public AjaxResult remove(@PathVariable String[] ids) {
        return toAjax(ardCallSessionUserService.deleteArdCallSessionUserByIds(ids));
    }
    /**
     * æ¸…除会话未读数量
     */
    @ApiOperation("清除会话未读数量")
    @PostMapping("/clearUnReadCount")
    @ApiImplicitParams({@ApiImplicitParam(name = "sessionId", value = "会话id", required = true, dataType = "String"),
                        @ApiImplicitParam(name = "userId", value = "用户id", required = true, dataType = "String")})
    public AjaxResult clearUnReadCount(String sessionId, String userId) {
        return toAjax(ardCallUnreadMessagesService.clearUnReadCount(sessionId, userId));
    }
}
ard-work/src/main/java/com/ruoyi/call/domain/ArdCallGroup.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,83 @@
package com.ruoyi.call.domain;
import com.ruoyi.common.core.domain.entity.SysUser;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
import java.util.List;
/**
 * ä¼šè¯ç¾¤ç»„对象 ard_call_group
 *
 * @author ard
 * @date 2024-07-03
 */
public class ArdCallGroup extends BaseEntity {
    private static final long serialVersionUID = 1L;
    /**
     * ä¸»é”®
     */
    private String id;
    /**
     * ç¾¤åç§°
     */
    @Excel(name = "群名称")
    private String name;
    /**
     * ç¾¤æˆå‘˜åˆ—表
     */
    private List<ArdCallGroupUser> ArdCallGroupUsers;
    /**
     * ç¾¤æˆå‘˜id列表
     */
    private List<String> userIds;
    public void setId(String id) {
        this.id = id;
    }
    public String getId() {
        return id;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getName() {
        return name;
    }
    public List<ArdCallGroupUser> getArdCallGroupUsers() {
        return ArdCallGroupUsers;
    }
    public void setArdCallGroupUsers(List<ArdCallGroupUser> ardCallGroupUsers) {
        ArdCallGroupUsers = ardCallGroupUsers;
    }
    public List<String> getUserIds() {
        return userIds;
    }
    public void setUserIds(List<String> userIds) {
        this.userIds = userIds;
    }
    @Override
    public String toString() {
        return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
                .append("id", getId())
                .append("name", getName())
                .append("createBy", getCreateBy())
                .append("createTime", getCreateTime())
                .append("updateBy", getUpdateBy())
                .append("updateTime", getUpdateTime())
                .toString();
    }
}
ard-work/src/main/java/com/ruoyi/call/domain/ArdCallGroupUser.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,80 @@
package com.ruoyi.call.domain;
import com.ruoyi.common.core.domain.entity.SysUser;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
/**
 * ç¾¤ç»„用户中间对象 ard_call_group_user
 *
 * @author ard
 * @date 2024-07-03
 */
public class ArdCallGroupUser extends BaseEntity
{
    private static final long serialVersionUID = 1L;
    /** ä¸»é”® */
    private String id;
    /** ç¾¤ç»„ID */
    @Excel(name = "群组ID")
    private String groupId;
    /** ç”¨æˆ·ID */
    @Excel(name = "用户ID")
    private String userId;
    private SysUser sysUser; // åµŒå¥—çš„ SysUser å¯¹è±¡
    public void setId(String id)
    {
        this.id = id;
    }
    public String getId()
    {
        return id;
    }
    public void setGroupId(String groupId)
    {
        this.groupId = groupId;
    }
    public String getGroupId()
    {
        return groupId;
    }
    public void setUserId(String userId)
    {
        this.userId = userId;
    }
    public String getUserId()
    {
        return userId;
    }
    public SysUser getSysUser() {
        return sysUser;
    }
    public void setSysUser(SysUser sysUser) {
        this.sysUser = sysUser;
    }
    @Override
    public String toString() {
        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
            .append("id", getId())
            .append("groupId", getGroupId())
            .append("userId", getUserId())
            .append("createBy", getCreateBy())
            .append("createTime", getCreateTime())
            .append("updateBy", getUpdateBy())
            .append("updateTime", getUpdateTime())
            .toString();
    }
}
ard-work/src/main/java/com/ruoyi/call/domain/ArdCallHistory.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,104 @@
package com.ruoyi.call.domain;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
/**
 * ä¼šè¯åŽ†å²å¯¹è±¡ ard_call_history
 *
 * @author ard
 * @date 2024-07-03
 */
public class ArdCallHistory extends BaseEntity
{
    private static final long serialVersionUID = 1L;
    /** ä¸»é”® */
    private String id;
    /** ä¼šè¯ID */
    @Excel(name = "会话ID")
    private String sessionId;
    /** ç”¨æˆ·ID */
    @Excel(name = "用户ID")
    private String userId;
    /** æ¶ˆæ¯ç±»åž‹ */
    @Excel(name = "消息类型")
    private String type;
    /** æ¶ˆæ¯å†…容 */
    @Excel(name = "消息内容")
    private String content;
    /** ç›®æ ‡ID */
    @Excel(name = "目标ID")
    private String targetId;
    public void setId(String id)
    {
        this.id = id;
    }
    public String getId()
    {
        return id;
    }
    public void setType(String type)
    {
        this.type = type;
    }
    public String getType()
    {
        return type;
    }
    public void setContent(String content)
    {
        this.content = content;
    }
    public String getContent()
    {
        return content;
    }
    public String getSessionId() {
        return sessionId;
    }
    public void setSessionId(String sessionId) {
        this.sessionId = sessionId;
    }
    public String getUserId() {
        return userId;
    }
    public void setUserId(String userId) {
        this.userId = userId;
    }
    public String getTargetId() {
        return targetId;
    }
    public void setTargetId(String targetId) {
        this.targetId = targetId;
    }
    @Override
    public String toString() {
        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
            .append("id", getId())
            .append("type", getType())
            .append("content", getContent())
            .append("createBy", getCreateBy())
            .append("createTime", getCreateTime())
            .append("updateBy", getUpdateBy())
            .append("updateTime", getUpdateTime())
            .toString();
    }
}
ard-work/src/main/java/com/ruoyi/call/domain/ArdCallSession.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,86 @@
package com.ruoyi.call.domain;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
import java.util.List;
/**
 * è§†é¢‘会话对象 ard_call_session
 *
 * @author ard
 * @date 2024-07-03
 */
public class ArdCallSession extends BaseEntity {
    private static final long serialVersionUID = 1L;
    /**
     * ä¸»é”®
     */
    private String id;
    /**
     * ä¼šè¯ç±»åž‹
     */
    @Excel(name = "会话类型")
    private String type;
    /**
     * userId
     */
    @Excel(name = "用户Id")
    private String userId;
    /**
     * ä¼šè¯ç”¨æˆ·åˆ—表
     */
    private List<String> targetIds;
    public void setId(String id) {
        this.id = id;
    }
    public String getId() {
        return id;
    }
    public void setType(String type) {
        this.type = type;
    }
    public String getType() {
        return type;
    }
    public String getUserId() {
        return userId;
    }
    public void setUserId(String userId) {
        this.userId = userId;
    }
    public List<String> getTargetIds() {
        return targetIds;
    }
    public void setTargetIds(List<String> targetIds) {
        this.targetIds = targetIds;
    }
    @Override
    public String toString() {
        return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
                .append("id", getId())
                .append("type", getType())
                .append("createBy", getCreateBy())
                .append("createTime", getCreateTime())
                .append("updateBy", getUpdateBy())
                .append("updateTime", getUpdateTime())
                .toString();
    }
}
ard-work/src/main/java/com/ruoyi/call/domain/ArdCallSessionUser.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,107 @@
package com.ruoyi.call.domain;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
/**
 * ä¼šè¯ç”¨æˆ·ä¸­é—´è¡¨å¯¹è±¡ ard_call_session_user
 *
 * @author ard
 * @date 2024-07-04
 */
public class ArdCallSessionUser extends BaseEntity
{
    private static final long serialVersionUID = 1L;
    /** ä¸»é”® */
    private String id;
    /** ä¼šè¯id */
    @Excel(name = "会话id")
    private String sessionId;
    /** ä¼šè¯ç±»åž‹ */
    @Excel(name = "会话类型")
    private String type;
    /** å½“前成员id */
    @Excel(name = "当前成员id")
    private String userId;
    /** ç›®æ ‡æˆå‘˜id */
    @Excel(name = "目标成员id")
    private String targetId;
    /**
     * æœ€åŽä¸€æ¡æ¶ˆæ¯
     */
    private ArdCallHistory ardCallHistory;
    /**
     * æœªè¯»æ¶ˆæ¯æ•°æ®é‡
     */
    private Integer unReadCount;
    public ArdCallHistory getArdCallHistory() {
        return ardCallHistory;
    }
    public void setArdCallHistory(ArdCallHistory ardCallHistory) {
        this.ardCallHistory = ardCallHistory;
    }
    public Integer getUnReadCount() {
        return unReadCount;
    }
    public void setUnReadCount(Integer unReadCount) {
        this.unReadCount = unReadCount;
    }
    public void setId(String id)
    {
        this.id = id;
    }
    public String getId()
    {
        return id;
    }
    public void setSessionId(String sessionId)
    {
        this.sessionId = sessionId;
    }
    public String getSessionId()
    {
        return sessionId;
    }
    public void setType(String type)
    {
        this.type = type;
    }
    public String getType()
    {
        return type;
    }
    public String getTargetId() {
        return targetId;
    }
    public void setTargetId(String targetId) {
        this.targetId = targetId;
    }
    public String getUserId() {
        return userId;
    }
    public void setUserId(String userId) {
        this.userId = userId;
    }
}
ard-work/src/main/java/com/ruoyi/call/domain/ArdCallUnreadMessages.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,66 @@
package com.ruoyi.call.domain;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.core.domain.BaseEntity;
/**
 * æœªè¯»æ¶ˆæ¯å¯¹è±¡ ard_call_unread_messages
 *
 * @author ard
 * @date 2024-07-06
 */
public class ArdCallUnreadMessages extends BaseEntity
{
    private static final long serialVersionUID = 1L;
    /** ç”¨æˆ·id */
    @Excel(name = "用户id")
    private String userId ;
    /** ä¼šè¯id */
    @Excel(name = "会话id")
    private String sessionId;
    /** æœªè¯»æ•°é‡ */
    @Excel(name = "未读数量")
    private Integer unreadCount;
    public void setUserId (String userId )
    {
        this.userId  = userId ;
    }
    public String getUserId ()
    {
        return userId ;
    }
    public void setSessionId(String sessionId)
    {
        this.sessionId = sessionId;
    }
    public String getSessionId()
    {
        return sessionId;
    }
    public void setUnreadCount(Integer unreadCount)
    {
        this.unreadCount = unreadCount;
    }
    public Integer getUnreadCount()
    {
        return unreadCount;
    }
    @Override
    public String toString() {
        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
            .append("userId ", getUserId ())
            .append("sessionId", getSessionId())
            .append("unreadCount", getUnreadCount())
            .toString();
    }
}
ard-work/src/main/java/com/ruoyi/call/mapper/ArdCallGroupMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,61 @@
package com.ruoyi.call.mapper;
import java.util.List;
import com.ruoyi.call.domain.ArdCallGroup;
/**
 * ä¼šè¯ç¾¤ç»„Mapper接口
 *
 * @author ard
 * @date 2024-07-03
 */
public interface ArdCallGroupMapper
{
    /**
     * æŸ¥è¯¢ä¼šè¯ç¾¤ç»„
     *
     * @param id ä¼šè¯ç¾¤ç»„主键
     * @return ä¼šè¯ç¾¤ç»„
     */
    public ArdCallGroup selectArdCallGroupById(String id);
    /**
     * æŸ¥è¯¢ä¼šè¯ç¾¤ç»„列表
     *
     * @param ardCallGroup ä¼šè¯ç¾¤ç»„
     * @return ä¼šè¯ç¾¤ç»„集合
     */
    public List<ArdCallGroup> selectArdCallGroupList(ArdCallGroup ardCallGroup);
    /**
     * æ–°å¢žä¼šè¯ç¾¤ç»„
     *
     * @param ardCallGroup ä¼šè¯ç¾¤ç»„
     * @return ç»“æžœ
     */
    public int insertArdCallGroup(ArdCallGroup ardCallGroup);
    /**
     * ä¿®æ”¹ä¼šè¯ç¾¤ç»„
     *
     * @param ardCallGroup ä¼šè¯ç¾¤ç»„
     * @return ç»“æžœ
     */
    public int updateArdCallGroup(ArdCallGroup ardCallGroup);
    /**
     * åˆ é™¤ä¼šè¯ç¾¤ç»„
     *
     * @param id ä¼šè¯ç¾¤ç»„主键
     * @return ç»“æžœ
     */
    public int deleteArdCallGroupById(String id);
    /**
     * æ‰¹é‡åˆ é™¤ä¼šè¯ç¾¤ç»„
     *
     * @param ids éœ€è¦åˆ é™¤çš„æ•°æ®ä¸»é”®é›†åˆ
     * @return ç»“æžœ
     */
    public int deleteArdCallGroupByIds(String[] ids);
}
ard-work/src/main/java/com/ruoyi/call/mapper/ArdCallGroupUserMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,84 @@
package com.ruoyi.call.mapper;
import java.util.List;
import com.ruoyi.call.domain.ArdCallGroup;
import com.ruoyi.call.domain.ArdCallGroupUser;
import org.apache.ibatis.annotations.Param;
/**
 * ç¾¤ç»„用户中间Mapper接口
 *
 * @author ard
 * @date 2024-07-03
 */
public interface ArdCallGroupUserMapper {
    /**
     * æŸ¥è¯¢ç¾¤ç»„用户中间
     *
     * @param id ç¾¤ç»„用户中间主键
     * @return ç¾¤ç»„用户中间
     */
    public ArdCallGroupUser selectArdCallGroupUserById(String id);
    /**
     * æŸ¥è¯¢ç¾¤ç»„用户中间列表
     *
     * @param ardCallGroupUser ç¾¤ç»„用户中间
     * @return ç¾¤ç»„用户中间集合
     */
    public List<ArdCallGroupUser> selectArdCallGroupUserList(ArdCallGroupUser ardCallGroupUser);
    /**
     * æ–°å¢žç¾¤ç»„用户中间
     *
     * @param ardCallGroupUser ç¾¤ç»„用户中间
     * @return ç»“æžœ
     */
    public int insertArdCallGroupUser(ArdCallGroupUser ardCallGroupUser);
    /**
     * ä¿®æ”¹ç¾¤ç»„用户中间
     *
     * @param ardCallGroupUser ç¾¤ç»„用户中间
     * @return ç»“æžœ
     */
    public int updateArdCallGroupUser(ArdCallGroupUser ardCallGroupUser);
    /**
     * åˆ é™¤ç¾¤ç»„用户中间
     *
     * @param id ç¾¤ç»„用户中间主键
     * @return ç»“æžœ
     */
    public int deleteArdCallGroupUserById(String id);
    /**
     * æ‰¹é‡åˆ é™¤ç¾¤ç»„用户中间
     *
     * @param ids éœ€è¦åˆ é™¤çš„æ•°æ®ä¸»é”®é›†åˆ
     * @return ç»“æžœ
     */
    public int deleteArdCallGroupUserByIds(String[] ids);
    /**
     * åˆ é™¤ç¾¤ç»„关联用户
     *
     * @param groupId ç¾¤ç»„主键
     * @return ç»“æžœ
     */
    public int clearArdCallGroupUsers(String groupId);
    /**
     * ç§»é™¤ç¾¤ç»„用户
     *
     * @param groupId ç¾¤ç»„主键
     * @param userIds ç¾¤ç»„用户数组集合
     * @return ç»“æžœ
     */
    public int removeGroupUser(@Param("groupId") String groupId, @Param("userIds") String[] userIds);
    public List<ArdCallGroup> getGroupListByUserId(String userId);
}
ard-work/src/main/java/com/ruoyi/call/mapper/ArdCallHistoryMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,72 @@
package com.ruoyi.call.mapper;
import java.util.List;
import com.ruoyi.call.domain.ArdCallHistory;
import org.apache.ibatis.annotations.Param;
/**
 * ä¼šè¯åŽ†å²Mapper接口
 *
 * @author ard
 * @date 2024-07-03
 */
public interface ArdCallHistoryMapper {
    /**
     * æŸ¥è¯¢ä¼šè¯åŽ†å²
     *
     * @param id ä¼šè¯åŽ†å²ä¸»é”®
     * @return ä¼šè¯åŽ†å²
     */
    public ArdCallHistory selectArdCallHistoryById(String id);
    /**
     * æŸ¥è¯¢ä¼šè¯åŽ†å²åˆ—è¡¨
     *
     * @param ardCallHistory ä¼šè¯åŽ†å²
     * @return ä¼šè¯åŽ†å²é›†åˆ
     */
    public List<ArdCallHistory> selectArdCallHistoryList(ArdCallHistory ardCallHistory);
    /**
     * æ–°å¢žä¼šè¯åŽ†å²
     *
     * @param ardCallHistory ä¼šè¯åŽ†å²
     * @return ç»“æžœ
     */
    public int insertArdCallHistory(ArdCallHistory ardCallHistory);
    /**
     * ä¿®æ”¹ä¼šè¯åŽ†å²
     *
     * @param ardCallHistory ä¼šè¯åŽ†å²
     * @return ç»“æžœ
     */
    public int updateArdCallHistory(ArdCallHistory ardCallHistory);
    /**
     * åˆ é™¤ä¼šè¯åŽ†å²
     *
     * @param id ä¼šè¯åŽ†å²ä¸»é”®
     * @return ç»“æžœ
     */
    public int deleteArdCallHistoryById(String id);
    /**
     * æ‰¹é‡åˆ é™¤ä¼šè¯åŽ†å²
     *
     * @param ids éœ€è¦åˆ é™¤çš„æ•°æ®ä¸»é”®é›†åˆ
     * @return ç»“æžœ
     */
    public int deleteArdCallHistoryByIds(String[] ids);
    /**
     * èŽ·å–æœ€åŽä¸€æ¡ä¼šè¯åŽ†å²
     *
     * @param sessionId ä¼šè¯id
     * @return ç»“æžœ
     */
    public ArdCallHistory selectLastArdCallHistory(@Param("sessionId") String sessionId);
}
ard-work/src/main/java/com/ruoyi/call/mapper/ArdCallSessionMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,62 @@
package com.ruoyi.call.mapper;
import java.util.List;
import com.ruoyi.call.domain.ArdCallSession;
import org.apache.ibatis.annotations.Param;
/**
 * è§†é¢‘会话Mapper接口
 *
 * @author ard
 * @date 2024-07-03
 */
public interface ArdCallSessionMapper {
    /**
     * æŸ¥è¯¢è§†é¢‘会话
     *
     * @param id è§†é¢‘会话主键
     * @return è§†é¢‘会话
     */
    public ArdCallSession selectArdCallSessionById(String id);
    /**
     * æŸ¥è¯¢è§†é¢‘会话列表
     *
     * @param ardCallSession è§†é¢‘会话
     * @return è§†é¢‘会话集合
     */
    public List<ArdCallSession> selectArdCallSessionList(ArdCallSession ardCallSession);
    /**
     * æ–°å¢žè§†é¢‘会话
     *
     * @param ardCallSession è§†é¢‘会话
     * @return ç»“æžœ
     */
    public int insertArdCallSession(ArdCallSession ardCallSession);
    /**
     * ä¿®æ”¹è§†é¢‘会话
     *
     * @param ardCallSession è§†é¢‘会话
     * @return ç»“æžœ
     */
    public int updateArdCallSession(ArdCallSession ardCallSession);
    /**
     * åˆ é™¤è§†é¢‘会话
     *
     * @param id è§†é¢‘会话主键
     * @return ç»“æžœ
     */
    public int deleteArdCallSessionById(String id);
    /**
     * æ‰¹é‡åˆ é™¤è§†é¢‘会话
     *
     * @param ids éœ€è¦åˆ é™¤çš„æ•°æ®ä¸»é”®é›†åˆ
     * @return ç»“æžœ
     */
    public int deleteArdCallSessionByIds(String[] ids);
}
ard-work/src/main/java/com/ruoyi/call/mapper/ArdCallSessionUserMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,68 @@
package com.ruoyi.call.mapper;
import java.util.List;
import com.ruoyi.call.domain.ArdCallSessionUser;
import org.apache.ibatis.annotations.Param;
/**
 * ä¼šè¯ç”¨æˆ·ä¸­é—´è¡¨Mapper接口
 *
 * @author ard
 * @date 2024-07-04
 */
public interface ArdCallSessionUserMapper {
    /**
     * æŸ¥è¯¢ä¼šè¯ç”¨æˆ·ä¸­é—´è¡¨
     *
     * @param id ä¼šè¯ç”¨æˆ·ä¸­é—´è¡¨ä¸»é”®
     * @return ä¼šè¯ç”¨æˆ·ä¸­é—´è¡¨
     */
    public ArdCallSessionUser selectArdCallSessionUserById(String id);
    /**
     * æŸ¥è¯¢ä¼šè¯ç”¨æˆ·ä¸­é—´è¡¨åˆ—表
     *
     * @param ardCallSessionUser ä¼šè¯ç”¨æˆ·ä¸­é—´è¡¨
     * @return ä¼šè¯ç”¨æˆ·ä¸­é—´è¡¨é›†åˆ
     */
    public List<ArdCallSessionUser> selectArdCallSessionUserList(ArdCallSessionUser ardCallSessionUser);
    /**
     * æ–°å¢žä¼šè¯ç”¨æˆ·ä¸­é—´è¡¨
     *
     * @param ardCallSessionUser ä¼šè¯ç”¨æˆ·ä¸­é—´è¡¨
     * @return ç»“æžœ
     */
    public int insertArdCallSessionUser(ArdCallSessionUser ardCallSessionUser);
    /**
     * ä¿®æ”¹ä¼šè¯ç”¨æˆ·ä¸­é—´è¡¨
     *
     * @param ardCallSessionUser ä¼šè¯ç”¨æˆ·ä¸­é—´è¡¨
     * @return ç»“æžœ
     */
    public int updateArdCallSessionUser(ArdCallSessionUser ardCallSessionUser);
    /**
     * åˆ é™¤ä¼šè¯ç”¨æˆ·ä¸­é—´è¡¨
     *
     * @param id ä¼šè¯ç”¨æˆ·ä¸­é—´è¡¨ä¸»é”®
     * @return ç»“æžœ
     */
    public int deleteArdCallSessionUserById(String id);
    /**
     * æ‰¹é‡åˆ é™¤ä¼šè¯ç”¨æˆ·ä¸­é—´è¡¨
     *
     * @param ids éœ€è¦åˆ é™¤çš„æ•°æ®ä¸»é”®é›†åˆ
     * @return ç»“æžœ
     */
    public int deleteArdCallSessionUserByIds(String[] ids);
    public String getSessionId(@Param("type") String type, @Param("userId") String userId, @Param("targetId") String targetId);
    public String getGroupSessionId(@Param("type") String type,  @Param("targetId") String targetId);
    public int deleteArdCallSessionUserBySessionId(@Param("sessionId") String sessionId);
}
ard-work/src/main/java/com/ruoyi/call/mapper/ArdCallUnreadMessagesMapper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,68 @@
package com.ruoyi.call.mapper;
import java.util.List;
import com.ruoyi.call.domain.ArdCallUnreadMessages;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
/**
 * æœªè¯»æ¶ˆæ¯Mapper接口
 *
 * @author ard
 * @date 2024-07-06
 */
public interface ArdCallUnreadMessagesMapper {
    /**
     * æŸ¥è¯¢æœªè¯»æ¶ˆæ¯
     *
     * @param userId æœªè¯»æ¶ˆæ¯ä¸»é”®
     * @return æœªè¯»æ¶ˆæ¯
     */
    public ArdCallUnreadMessages selectArdCallUnreadMessagesByUserId(String userId);
    /**
     * æŸ¥è¯¢æœªè¯»æ¶ˆæ¯åˆ—表
     *
     * @param ardCallUnreadMessages æœªè¯»æ¶ˆæ¯
     * @return æœªè¯»æ¶ˆæ¯é›†åˆ
     */
    public List<ArdCallUnreadMessages> selectArdCallUnreadMessagesList(ArdCallUnreadMessages ardCallUnreadMessages);
    /**
     * æ–°å¢žæœªè¯»æ¶ˆæ¯
     *
     * @param ardCallUnreadMessages æœªè¯»æ¶ˆæ¯
     * @return ç»“æžœ
     */
    public int insertArdCallUnreadMessages(ArdCallUnreadMessages ardCallUnreadMessages);
    /**
     * ä¿®æ”¹æœªè¯»æ¶ˆæ¯
     *
     * @param ardCallUnreadMessages æœªè¯»æ¶ˆæ¯
     * @return ç»“æžœ
     */
    public int updateArdCallUnreadMessages(ArdCallUnreadMessages ardCallUnreadMessages);
    /**
     * åˆ é™¤æœªè¯»æ¶ˆæ¯
     *
     * @param userId æœªè¯»æ¶ˆæ¯ä¸»é”®
     * @return ç»“æžœ
     */
    public int deleteArdCallUnreadMessagesByUserId(String userId);
    /**
     * æ‰¹é‡åˆ é™¤æœªè¯»æ¶ˆæ¯
     *
     * @param userId s éœ€è¦åˆ é™¤çš„æ•°æ®ä¸»é”®é›†åˆ
     * @return ç»“æžœ
     */
    public int deleteArdCallUnreadMessagesByUserId(String[] userId);
    @Select("select count(*) from ard_call_unread_messages where session_id=#{sessionId} and target_id=#{targetId}")
    int countBySessionIdAnduserId(String sessionId, String userId);
    public ArdCallUnreadMessages  getUnreadMessage(@Param("sessionId") String sessionId, @Param("targetId")String targetId);
}
ard-work/src/main/java/com/ruoyi/call/service/IArdCallGroupService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,61 @@
package com.ruoyi.call.service;
import java.util.List;
import com.ruoyi.call.domain.ArdCallGroup;
/**
 * ä¼šè¯ç¾¤ç»„Service接口
 *
 * @author ard
 * @date 2024-07-03
 */
public interface IArdCallGroupService
{
    /**
     * æŸ¥è¯¢ä¼šè¯ç¾¤ç»„
     *
     * @param id ä¼šè¯ç¾¤ç»„主键
     * @return ä¼šè¯ç¾¤ç»„
     */
    public ArdCallGroup selectArdCallGroupById(String id);
    /**
     * æŸ¥è¯¢ä¼šè¯ç¾¤ç»„列表
     *
     * @param ardCallGroup ä¼šè¯ç¾¤ç»„
     * @return ä¼šè¯ç¾¤ç»„集合
     */
    public List<ArdCallGroup> selectArdCallGroupList(ArdCallGroup ardCallGroup);
    /**
     * æ–°å¢žä¼šè¯ç¾¤ç»„
     *
     * @param ardCallGroup ä¼šè¯ç¾¤ç»„
     * @return ç»“æžœ
     */
    public String insertArdCallGroup(ArdCallGroup ardCallGroup);
    /**
     * ä¿®æ”¹ä¼šè¯ç¾¤ç»„
     *
     * @param ardCallGroup ä¼šè¯ç¾¤ç»„
     * @return ç»“æžœ
     */
    public int updateArdCallGroup(ArdCallGroup ardCallGroup);
    /**
     * æ‰¹é‡åˆ é™¤ä¼šè¯ç¾¤ç»„
     *
     * @param ids éœ€è¦åˆ é™¤çš„会话群组主键集合
     * @return ç»“æžœ
     */
    public int deleteArdCallGroupByIds(String[] ids);
    /**
     * åˆ é™¤ä¼šè¯ç¾¤ç»„信息
     *
     * @param id ä¼šè¯ç¾¤ç»„主键
     * @return ç»“æžœ
     */
    public int deleteArdCallGroupById(String id);
}
ard-work/src/main/java/com/ruoyi/call/service/IArdCallGroupUserService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,97 @@
package com.ruoyi.call.service;
import java.util.List;
import com.ruoyi.call.domain.ArdCallGroup;
import com.ruoyi.call.domain.ArdCallGroupUser;
import com.ruoyi.common.core.domain.entity.SysUser;
/**
 * ç¾¤ç»„用户中间Service接口
 *
 * @author ard
 * @date 2024-07-03
 */
public interface IArdCallGroupUserService {
    /**
     * æŸ¥è¯¢ç¾¤ç»„用户中间
     *
     * @param id ç¾¤ç»„用户中间主键
     * @return ç¾¤ç»„用户中间
     */
    public ArdCallGroupUser selectArdCallGroupUserById(String id);
    /**
     * æŸ¥è¯¢ç¾¤ç»„用户中间列表
     *
     * @param ardCallGroupUser ç¾¤ç»„用户中间
     * @return ç¾¤ç»„用户中间集合
     */
    public List<ArdCallGroupUser> selectArdCallGroupUserList(ArdCallGroupUser ardCallGroupUser);
    /**
     * æ–°å¢žç¾¤ç»„用户中间
     *
     * @param ardCallGroupUser ç¾¤ç»„用户中间
     * @return ç»“æžœ
     */
    public int insertArdCallGroupUser(ArdCallGroupUser ardCallGroupUser);
    /**
     * ä¿®æ”¹ç¾¤ç»„用户中间
     *
     * @param ardCallGroupUser ç¾¤ç»„用户中间
     * @return ç»“æžœ
     */
    public int updateArdCallGroupUser(ArdCallGroupUser ardCallGroupUser);
    /**
     * æ‰¹é‡åˆ é™¤ç¾¤ç»„用户中间
     *
     * @param ids éœ€è¦åˆ é™¤çš„群组用户中间主键集合
     * @return ç»“æžœ
     */
    public int deleteArdCallGroupUserByIds(String[] ids);
    /**
     * åˆ é™¤ç¾¤ç»„用户中间信息
     *
     * @param id ç¾¤ç»„用户中间主键
     * @return ç»“æžœ
     */
    public int deleteArdCallGroupUserById(String id);
    /**
     * æŸ¥è¯¢ç”¨æˆ·æ‰€åœ¨ç¾¤ç»„
     *
     * @param userId ç¾¤ç»„用户
     * @return ç»“æžœ
     */
    List<ArdCallGroup> getGroupListByUserId(String userId);
    /**
     * é‚€è¯·ç¾¤ç»„用户
     *
     * @param id      ç¾¤ç»„主键
     * @param userIds ç¾¤ç»„用户数组集合
     * @return ç»“æžœ
     */
    public int addGroupUser(String id, String[] userIds);
    /**
     * ç§»é™¤ç¾¤ç»„用户
     *
     * @param id      ç¾¤ç»„主键
     * @param userIds ç¾¤ç»„用户数组集合
     * @return ç»“æžœ
     */
    public int removeGroupUser(String id, String[] userIds);
    /**
     * ä¸åœ¨ç¾¤ç»„的人员列表
     *
     * @param groupId ç¾¤ç»„主键
     * @return ç»“æžœ
     */
    List<SysUser> notInGroupUsers(String groupId);
}
ard-work/src/main/java/com/ruoyi/call/service/IArdCallHistoryService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,61 @@
package com.ruoyi.call.service;
import java.util.List;
import com.ruoyi.call.domain.ArdCallHistory;
/**
 * ä¼šè¯åŽ†å²Service接口
 *
 * @author ard
 * @date 2024-07-03
 */
public interface IArdCallHistoryService
{
    /**
     * æŸ¥è¯¢ä¼šè¯åŽ†å²
     *
     * @param id ä¼šè¯åŽ†å²ä¸»é”®
     * @return ä¼šè¯åŽ†å²
     */
    public ArdCallHistory selectArdCallHistoryById(String id);
    /**
     * æŸ¥è¯¢ä¼šè¯åŽ†å²åˆ—è¡¨
     *
     * @param ardCallHistory ä¼šè¯åŽ†å²
     * @return ä¼šè¯åŽ†å²é›†åˆ
     */
    public List<ArdCallHistory> selectArdCallHistoryList(ArdCallHistory ardCallHistory);
    /**
     * æ–°å¢žä¼šè¯åŽ†å²
     *
     * @param ardCallHistory ä¼šè¯åŽ†å²
     * @return ç»“æžœ
     */
    public int insertArdCallHistory(ArdCallHistory ardCallHistory);
    /**
     * ä¿®æ”¹ä¼šè¯åŽ†å²
     *
     * @param ardCallHistory ä¼šè¯åŽ†å²
     * @return ç»“æžœ
     */
    public int updateArdCallHistory(ArdCallHistory ardCallHistory);
    /**
     * æ‰¹é‡åˆ é™¤ä¼šè¯åŽ†å²
     *
     * @param ids éœ€è¦åˆ é™¤çš„会话历史主键集合
     * @return ç»“æžœ
     */
    public int deleteArdCallHistoryByIds(String[] ids);
    /**
     * åˆ é™¤ä¼šè¯åŽ†å²ä¿¡æ¯
     *
     * @param id ä¼šè¯åŽ†å²ä¸»é”®
     * @return ç»“æžœ
     */
    public int deleteArdCallHistoryById(String id);
}
ard-work/src/main/java/com/ruoyi/call/service/IArdCallSessionService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,72 @@
package com.ruoyi.call.service;
import java.util.List;
import com.ruoyi.call.domain.ArdCallSession;
/**
 * è§†é¢‘会话Service接口
 *
 * @author ard
 * @date 2024-07-03
 */
public interface IArdCallSessionService {
    /**
     * æŸ¥è¯¢è§†é¢‘会话
     *
     * @param id è§†é¢‘会话主键
     * @return è§†é¢‘会话
     */
    public ArdCallSession selectArdCallSessionById(String id);
    /**
     * æŸ¥è¯¢è§†é¢‘会话列表
     *
     * @param ardCallSession è§†é¢‘会话
     * @return è§†é¢‘会话集合
     */
    public List<ArdCallSession> selectArdCallSessionList(ArdCallSession ardCallSession);
    /**
     * æ–°å¢žè§†é¢‘会话
     *
     * @param ardCallSession è§†é¢‘会话
     * @return ç»“æžœ
     */
    public String insertArdCallSession(ArdCallSession ardCallSession);
    /**
     * ä¿®æ”¹è§†é¢‘会话
     *
     * @param ardCallSession è§†é¢‘会话
     * @return ç»“æžœ
     */
    public int updateArdCallSession(ArdCallSession ardCallSession);
    /**
     * æ‰¹é‡åˆ é™¤è§†é¢‘会话
     *
     * @param ids éœ€è¦åˆ é™¤çš„视频会话主键集合
     * @return ç»“æžœ
     */
    public int deleteArdCallSessionByIds(String[] ids);
    /**
     * åˆ é™¤è§†é¢‘会话信息
     *
     * @param id è§†é¢‘会话主键
     * @return ç»“æžœ
     */
    public int deleteArdCallSessionById(String id);
    /**
     * èŽ·å–ä¼šè¯
     *
     * @param type ä¼šè¯ç±»åž‹ 0单聊1群聊
     * @param userId ä¼šè¯å‘送方
     * @param targetId ä¼šè¯æŽ¥æ”¶æ–¹
     * @return ç»“æžœ
     */
    public String getSession(String type, String userId, String targetId);
}
ard-work/src/main/java/com/ruoyi/call/service/IArdCallSessionUserService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,80 @@
package com.ruoyi.call.service;
import java.util.List;
import com.ruoyi.call.domain.ArdCallSessionUser;
/**
 * ä¼šè¯ç”¨æˆ·ä¸­é—´è¡¨Service接口
 *
 * @author ard
 * @date 2024-07-04
 */
public interface IArdCallSessionUserService {
    /**
     * æŸ¥è¯¢ä¼šè¯ç”¨æˆ·ä¸­é—´è¡¨
     *
     * @param id ä¼šè¯ç”¨æˆ·ä¸­é—´è¡¨ä¸»é”®
     * @return ä¼šè¯ç”¨æˆ·ä¸­é—´è¡¨
     */
    public ArdCallSessionUser selectArdCallSessionUserById(String id);
    /**
     * æŸ¥è¯¢ä¼šè¯ç”¨æˆ·ä¸­é—´è¡¨åˆ—表
     *
     * @param ardCallSessionUser ä¼šè¯ç”¨æˆ·ä¸­é—´è¡¨
     * @return ä¼šè¯ç”¨æˆ·ä¸­é—´è¡¨é›†åˆ
     */
    public List<ArdCallSessionUser> selectArdCallSessionUserList(ArdCallSessionUser ardCallSessionUser);
    /**
     * æ–°å¢žä¼šè¯ç”¨æˆ·ä¸­é—´è¡¨
     *
     * @param ardCallSessionUser ä¼šè¯ç”¨æˆ·ä¸­é—´è¡¨
     * @return ç»“æžœ
     */
    public int insertArdCallSessionUser(ArdCallSessionUser ardCallSessionUser);
    /**
     * ä¿®æ”¹ä¼šè¯ç”¨æˆ·ä¸­é—´è¡¨
     *
     * @param ardCallSessionUser ä¼šè¯ç”¨æˆ·ä¸­é—´è¡¨
     * @return ç»“æžœ
     */
    public int updateArdCallSessionUser(ArdCallSessionUser ardCallSessionUser);
    /**
     * æ‰¹é‡åˆ é™¤ä¼šè¯ç”¨æˆ·ä¸­é—´è¡¨
     *
     * @param ids éœ€è¦åˆ é™¤çš„会话用户中间表主键集合
     * @return ç»“æžœ
     */
    public int deleteArdCallSessionUserByIds(String[] ids);
    /**
     * åˆ é™¤ä¼šè¯ç”¨æˆ·ä¸­é—´è¡¨ä¿¡æ¯
     *
     * @param id ä¼šè¯ç”¨æˆ·ä¸­é—´è¡¨ä¸»é”®
     * @return ç»“æžœ
     */
    public int deleteArdCallSessionUserById(String id);
    /**
     * èŽ·å–ä¼šè¯
     *
     * @param type     ä¼šè¯ç±»åž‹
     * @param userId   ç”¨æˆ·id
     * @param targetId ç›®æ ‡id
     * @return ç»“æžœ
     */
    public String getSessionId(String type, String userId, String targetId);
    public String getGroupSessionId(String type,String targetId);
    /**
     * é€šè¿‡sessionId删除关联用户
     *
     * @param sessionId ç›®æ ‡id
     * @return ç»“æžœ
     */
    public int deleteArdCallSessionUserBySessionId(String sessionId);
}
ard-work/src/main/java/com/ruoyi/call/service/IArdCallUnreadMessagesService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,70 @@
package com.ruoyi.call.service;
import java.util.List;
import com.ruoyi.call.domain.ArdCallUnreadMessages;
/**
 * æœªè¯»æ¶ˆæ¯Service接口
 *
 * @author ard
 * @date 2024-07-06
 */
public interface IArdCallUnreadMessagesService
{
    /**
     * æŸ¥è¯¢æœªè¯»æ¶ˆæ¯
     *
     * @param userId  æœªè¯»æ¶ˆæ¯ä¸»é”®
     * @return æœªè¯»æ¶ˆæ¯
     */
    public ArdCallUnreadMessages selectArdCallUnreadMessagesByUserId (String userId );
    /**
     * æŸ¥è¯¢æœªè¯»æ¶ˆæ¯åˆ—表
     *
     * @param ardCallUnreadMessages æœªè¯»æ¶ˆæ¯
     * @return æœªè¯»æ¶ˆæ¯é›†åˆ
     */
    public List<ArdCallUnreadMessages> selectArdCallUnreadMessagesList(ArdCallUnreadMessages ardCallUnreadMessages);
    /**
     * æ–°å¢žæœªè¯»æ¶ˆæ¯
     *
     * @param ardCallUnreadMessages æœªè¯»æ¶ˆæ¯
     * @return ç»“æžœ
     */
    public int insertArdCallUnreadMessages(ArdCallUnreadMessages ardCallUnreadMessages);
    /**
     * ä¿®æ”¹æœªè¯»æ¶ˆæ¯
     *
     * @param ardCallUnreadMessages æœªè¯»æ¶ˆæ¯
     * @return ç»“æžœ
     */
    public int updateArdCallUnreadMessages(ArdCallUnreadMessages ardCallUnreadMessages);
    /**
     * æ‰¹é‡åˆ é™¤æœªè¯»æ¶ˆæ¯
     *
     * @param userId s éœ€è¦åˆ é™¤çš„æœªè¯»æ¶ˆæ¯ä¸»é”®é›†åˆ
     * @return ç»“æžœ
     */
    public int deleteArdCallUnreadMessagesByUserId(String[] userId);
    /**
     * åˆ é™¤æœªè¯»æ¶ˆæ¯ä¿¡æ¯
     *
     * @param userId  æœªè¯»æ¶ˆæ¯ä¸»é”®
     * @return ç»“æžœ
     */
    public int deleteArdCallUnreadMessagesByUserId (String userId );
    /**
     * æ¸…除会话未读数量
     *
     * @param sessionId  ä¼šè¯id
     * @param userId     ç”¨æˆ·id
     * @return ç»“æžœ
     */
    public int clearUnReadCount(String sessionId,String userId);
}
ard-work/src/main/java/com/ruoyi/call/service/impl/ArdCallGroupServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,122 @@
package com.ruoyi.call.service.impl;
import java.util.Arrays;
import java.util.List;
import com.ruoyi.call.domain.ArdCallGroupUser;
import com.ruoyi.call.mapper.ArdCallGroupUserMapper;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.uuid.IdUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.call.mapper.ArdCallGroupMapper;
import com.ruoyi.call.domain.ArdCallGroup;
import com.ruoyi.call.service.IArdCallGroupService;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
/**
 * ä¼šè¯ç¾¤ç»„Service业务层处理
 *
 * @author ard
 * @date 2024-07-03
 */
@Service
public class ArdCallGroupServiceImpl implements IArdCallGroupService {
    @Resource
    private ArdCallGroupMapper ardCallGroupMapper;
    @Resource
    private ArdCallGroupUserMapper ardCallGroupUserMapper;
    /**
     * æŸ¥è¯¢ä¼šè¯ç¾¤ç»„
     *
     * @param id ä¼šè¯ç¾¤ç»„主键
     * @return ä¼šè¯ç¾¤ç»„
     */
    @Override
    public ArdCallGroup selectArdCallGroupById(String id) {
        return ardCallGroupMapper.selectArdCallGroupById(id);
    }
    /**
     * æŸ¥è¯¢ä¼šè¯ç¾¤ç»„列表
     *
     * @param ardCallGroup ä¼šè¯ç¾¤ç»„
     * @return ä¼šè¯ç¾¤ç»„
     */
    @Override
    public List<ArdCallGroup> selectArdCallGroupList(ArdCallGroup ardCallGroup) {
        return ardCallGroupMapper.selectArdCallGroupList(ardCallGroup);
    }
    /**
     * æ–°å¢žä¼šè¯ç¾¤ç»„
     *
     * @param ardCallGroup ä¼šè¯ç¾¤ç»„
     * @return ç»“æžœ
     */
    @Transactional
    @Override
    public String insertArdCallGroup(ArdCallGroup ardCallGroup) {
        ardCallGroup.setId(IdUtils.simpleUUID());
        ardCallGroup.setCreateTime(DateUtils.getNowDate());
        ardCallGroup.getUserIds().stream().forEach(userId -> {
            ArdCallGroupUser groupUser = new ArdCallGroupUser();
            groupUser.setId(IdUtils.simpleUUID());
            groupUser.setGroupId(ardCallGroup.getId());
            groupUser.setUserId(userId);
            groupUser.setCreateTime(DateUtils.getNowDate());
            ardCallGroupUserMapper.insertArdCallGroupUser(groupUser);
        });
        ardCallGroupMapper.insertArdCallGroup(ardCallGroup);
        return ardCallGroup.getId();
    }
    /**
     * ä¿®æ”¹ä¼šè¯ç¾¤ç»„
     *
     * @param ardCallGroup ä¼šè¯ç¾¤ç»„
     * @return ç»“æžœ
     */
    @Override
    public int updateArdCallGroup(ArdCallGroup ardCallGroup) {
        ardCallGroup.setUpdateBy(SecurityUtils.getUsername());
        ardCallGroup.setUpdateTime(DateUtils.getNowDate());
        return ardCallGroupMapper.updateArdCallGroup(ardCallGroup);
    }
    /**
     * æ‰¹é‡åˆ é™¤ä¼šè¯ç¾¤ç»„
     *
     * @param ids éœ€è¦åˆ é™¤çš„会话群组主键
     * @return ç»“æžœ
     */
    @Override
    public int deleteArdCallGroupByIds(String[] ids) {
        Arrays.stream(ids).forEach(id -> {
            ardCallGroupUserMapper.clearArdCallGroupUsers(id);
        });
        return ardCallGroupMapper.deleteArdCallGroupByIds(ids);
    }
    /**
     * åˆ é™¤ä¼šè¯ç¾¤ç»„信息
     *
     * @param id ä¼šè¯ç¾¤ç»„主键
     * @return ç»“æžœ
     */
    @Override
    public int deleteArdCallGroupById(String id) {
        ardCallGroupUserMapper.clearArdCallGroupUsers(id);
        return ardCallGroupMapper.deleteArdCallGroupById(id);
    }
}
ard-work/src/main/java/com/ruoyi/call/service/impl/ArdCallGroupUserServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,167 @@
package com.ruoyi.call.service.impl;
import java.util.Arrays;
import java.util.List;
import com.ruoyi.call.domain.ArdCallGroup;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.uuid.IdUtils;
import com.ruoyi.system.mapper.SysUserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Set;
import java.util.stream.Collectors;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.call.mapper.ArdCallGroupUserMapper;
import com.ruoyi.call.domain.ArdCallGroupUser;
import com.ruoyi.call.service.IArdCallGroupUserService;
import javax.annotation.Resource;
/**
 * ç¾¤ç»„用户中间Service业务层处理
 *
 * @author ard
 * @date 2024-07-03
 */
@Service
public class ArdCallGroupUserServiceImpl implements IArdCallGroupUserService {
    @Resource
    private ArdCallGroupUserMapper ardCallGroupUserMapper;
    @Resource
    private SysUserMapper sysUserMapper;
    /**
     * æŸ¥è¯¢ç¾¤ç»„用户中间
     *
     * @param id ç¾¤ç»„用户中间主键
     * @return ç¾¤ç»„用户中间
     */
    @Override
    public ArdCallGroupUser selectArdCallGroupUserById(String id) {
        return ardCallGroupUserMapper.selectArdCallGroupUserById(id);
    }
    /**
     * æŸ¥è¯¢ç¾¤ç»„用户中间列表
     *
     * @param ardCallGroupUser ç¾¤ç»„用户中间
     * @return ç¾¤ç»„用户中间
     */
    @Override
    public List<ArdCallGroupUser> selectArdCallGroupUserList(ArdCallGroupUser ardCallGroupUser) {
        return ardCallGroupUserMapper.selectArdCallGroupUserList(ardCallGroupUser);
    }
    /**
     * æ–°å¢žç¾¤ç»„用户中间
     *
     * @param ardCallGroupUser ç¾¤ç»„用户中间
     * @return ç»“æžœ
     */
    @Override
    public int insertArdCallGroupUser(ArdCallGroupUser ardCallGroupUser) {
        ardCallGroupUser.setId(IdUtils.simpleUUID());
        ardCallGroupUser.setUserId(SecurityUtils.getUserId());
        ardCallGroupUser.setCreateBy(SecurityUtils.getUsername());
        ardCallGroupUser.setCreateTime(DateUtils.getNowDate());
        return ardCallGroupUserMapper.insertArdCallGroupUser(ardCallGroupUser);
    }
    /**
     * ä¿®æ”¹ç¾¤ç»„用户中间
     *
     * @param ardCallGroupUser ç¾¤ç»„用户中间
     * @return ç»“æžœ
     */
    @Override
    public int updateArdCallGroupUser(ArdCallGroupUser ardCallGroupUser) {
        ardCallGroupUser.setUpdateBy(SecurityUtils.getUsername());
        ardCallGroupUser.setUpdateTime(DateUtils.getNowDate());
        return ardCallGroupUserMapper.updateArdCallGroupUser(ardCallGroupUser);
    }
    /**
     * æ‰¹é‡åˆ é™¤ç¾¤ç»„用户中间
     *
     * @param ids éœ€è¦åˆ é™¤çš„群组用户中间主键
     * @return ç»“æžœ
     */
    @Override
    public int deleteArdCallGroupUserByIds(String[] ids) {
        return ardCallGroupUserMapper.deleteArdCallGroupUserByIds(ids);
    }
    /**
     * åˆ é™¤ç¾¤ç»„用户中间信息
     *
     * @param id ç¾¤ç»„用户中间主键
     * @return ç»“æžœ
     */
    @Override
    public int deleteArdCallGroupUserById(String id) {
        return ardCallGroupUserMapper.deleteArdCallGroupUserById(id);
    }
    @Override
    public List<ArdCallGroup> getGroupListByUserId(String userId) {
        return ardCallGroupUserMapper.getGroupListByUserId(userId);
    }
    /**
     * é‚€è¯·ç¾¤ç»„用户
     *
     * @param id      ç¾¤ç»„主键
     * @param userIds ç¾¤ç»„用户数组集合
     * @return ç»“æžœ
     */
    @Override
    public int addGroupUser(String id, String[] userIds) {
        ArdCallGroupUser ardCallGroupUser = new ArdCallGroupUser();
        ardCallGroupUser.setGroupId(id);
        Arrays.stream(userIds).forEach(userId -> {
            ardCallGroupUser.setId(IdUtils.simpleUUID());
            ardCallGroupUser.setCreateTime(DateUtils.getNowDate());
            ardCallGroupUser.setUserId(userId);
            ardCallGroupUserMapper.insertArdCallGroupUser(ardCallGroupUser);
        });
        return userIds.length;
    }
    /**
     * ç§»é™¤ç¾¤ç»„用户
     *
     * @param id      ç¾¤ç»„主键
     * @param userIds ç¾¤ç»„用户数组集合
     * @return ç»“æžœ
     */
    @Override
    public int removeGroupUser(String id, String[] userIds) {
        return ardCallGroupUserMapper.removeGroupUser(id, userIds);
    }
    @Override
    public List<SysUser> notInGroupUsers(String groupId) {
        //获取平台所有用户
        List<SysUser> userList = sysUserMapper.selectUserList(new SysUser());
        //获取群组内用户
        ArdCallGroupUser ardCallGroupUser=new ArdCallGroupUser();
        ardCallGroupUser.setGroupId(groupId);
        List<ArdCallGroupUser> ardCallGroupUsers = ardCallGroupUserMapper.selectArdCallGroupUserList(ardCallGroupUser);
        // æå–groupList中的userId到一个Set中
        Set<String> groupUserIds = ardCallGroupUsers.stream()
                .map(ArdCallGroupUser::getUserId)
                .collect(Collectors.toSet());
        // è¿‡æ»¤userList,只保留那些userId不在groupUserIds中的User对象
        List<SysUser> filteredUserList = userList.stream()
                .filter(user -> !groupUserIds.contains(user.getUserId()))
                .collect(Collectors.toList());
        return filteredUserList;
    }
}
ard-work/src/main/java/com/ruoyi/call/service/impl/ArdCallHistoryServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,152 @@
package com.ruoyi.call.service.impl;
import java.util.List;
import com.ruoyi.call.domain.*;
import com.ruoyi.call.mapper.*;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.MessageUtils;
import com.ruoyi.common.utils.uuid.IdUtils;
import com.ruoyi.utils.websocket.util.WebSocketUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.call.service.IArdCallHistoryService;
import javax.annotation.Resource;
import static com.ruoyi.utils.websocket.util.WebSocketUtils.ONLINE_USER_SESSIONS;
/**
 * ä¼šè¯åŽ†å²Service业务层处理
 *
 * @author ard
 * @date 2024-07-03
 */
@Service
public class ArdCallHistoryServiceImpl implements IArdCallHistoryService {
    @Resource
    private ArdCallHistoryMapper ardCallHistoryMapper;
    @Resource
    private ArdCallSessionMapper ardCallSessionMapper;
    @Resource
    private ArdCallUnreadMessagesMapper ardCallUnreadMessagesMapper;
    @Resource
    private ArdCallGroupUserMapper ardCallGroupUserMapper;
    /**
     * æŸ¥è¯¢ä¼šè¯åŽ†å²
     *
     * @param id ä¼šè¯åŽ†å²ä¸»é”®
     * @return ä¼šè¯åŽ†å²
     */
    @Override
    public ArdCallHistory selectArdCallHistoryById(String id) {
        return ardCallHistoryMapper.selectArdCallHistoryById(id);
    }
    /**
     * æŸ¥è¯¢ä¼šè¯åŽ†å²åˆ—è¡¨
     *
     * @param ardCallHistory ä¼šè¯åŽ†å²
     * @return ä¼šè¯åŽ†å²
     */
    @Override
    public List<ArdCallHistory> selectArdCallHistoryList(ArdCallHistory ardCallHistory) {
        return ardCallHistoryMapper.selectArdCallHistoryList(ardCallHistory);
    }
    /**
     * æ–°å¢žä¼šè¯åŽ†å²
     *
     * @param ardCallHistory ä¼šè¯åŽ†å²
     * @return ç»“æžœ
     */
    @Override
    public int insertArdCallHistory(ArdCallHistory ardCallHistory) {
        ardCallHistory.setId(IdUtils.simpleUUID());
        ardCallHistory.setCreateTime(DateUtils.getNowDate());
        ArdCallSession ardCallSession = ardCallSessionMapper.selectArdCallSessionById(ardCallHistory.getSessionId());
        if (ardCallSession.getType().equals("0")) {
            //更新单聊用户未读消息计数
            ArdCallUnreadMessages ardCallUnreadMessages = ardCallUnreadMessagesMapper.getUnreadMessage(ardCallHistory.getSessionId(), ardCallHistory.getTargetId());
            if (ardCallUnreadMessages == null) {
                ardCallUnreadMessages = new ArdCallUnreadMessages();
                ardCallUnreadMessages.setUserId(ardCallHistory.getTargetId());
                ardCallUnreadMessages.setSessionId(ardCallHistory.getSessionId());
                ardCallUnreadMessages.setUnreadCount(1);
                ardCallUnreadMessagesMapper.insertArdCallUnreadMessages(ardCallUnreadMessages);
            } else {
                ardCallUnreadMessages.setUnreadCount(ardCallUnreadMessages.getUnreadCount() + 1);
                ardCallUnreadMessagesMapper.updateArdCallUnreadMessages(ardCallUnreadMessages);
            }
            //websocket发送给targetId
            WebSocketUtils.sendMessage(ONLINE_USER_SESSIONS.get(ardCallHistory.getTargetId()),ardCallHistory.getContent());
        } else {
            //更新群聊用户未读消息计数
            ArdCallGroupUser ardCallGroupUser = new ArdCallGroupUser();
            ardCallGroupUser.setGroupId(ardCallHistory.getTargetId());
            List<ArdCallGroupUser> ardCallGroupUsers = ardCallGroupUserMapper.selectArdCallGroupUserList(ardCallGroupUser);
            ardCallGroupUsers.stream().forEach(groupUser -> {
                if (!ardCallHistory.getUserId().equals(groupUser.getUserId())) {
                    //对群里除了自己外其他用户更新未读消息
                    ArdCallUnreadMessages ardCallUnreadMessages = ardCallUnreadMessagesMapper.getUnreadMessage(ardCallHistory.getSessionId(), groupUser.getUserId());
                    if (ardCallUnreadMessages == null) {
                        ardCallUnreadMessages = new ArdCallUnreadMessages();
                        ardCallUnreadMessages.setUserId(groupUser.getUserId());
                        ardCallUnreadMessages.setSessionId(ardCallHistory.getSessionId());
                        ardCallUnreadMessages.setUnreadCount(1);
                        ardCallUnreadMessagesMapper.insertArdCallUnreadMessages(ardCallUnreadMessages);
                    } else {
                        ardCallUnreadMessages.setUnreadCount(ardCallUnreadMessages.getUnreadCount() + 1);
                        ardCallUnreadMessagesMapper.updateArdCallUnreadMessages(ardCallUnreadMessages);
                    }
                }
                //websocket发送给targetId
                WebSocketUtils.sendMessage(ONLINE_USER_SESSIONS.get(groupUser.getUserId()),ardCallHistory.getContent());
            });
        }
        return ardCallHistoryMapper.insertArdCallHistory(ardCallHistory);
    }
    /**
     * ä¿®æ”¹ä¼šè¯åŽ†å²
     *
     * @param ardCallHistory ä¼šè¯åŽ†å²
     * @return ç»“æžœ
     */
    @Override
    public int updateArdCallHistory(ArdCallHistory ardCallHistory) {
        ardCallHistory.setUpdateBy(SecurityUtils.getUsername());
        ardCallHistory.setUpdateTime(DateUtils.getNowDate());
        return ardCallHistoryMapper.updateArdCallHistory(ardCallHistory);
    }
    /**
     * æ‰¹é‡åˆ é™¤ä¼šè¯åŽ†å²
     *
     * @param ids éœ€è¦åˆ é™¤çš„会话历史主键
     * @return ç»“æžœ
     */
    @Override
    public int deleteArdCallHistoryByIds(String[] ids) {
        return ardCallHistoryMapper.deleteArdCallHistoryByIds(ids);
    }
    /**
     * åˆ é™¤ä¼šè¯åŽ†å²ä¿¡æ¯
     *
     * @param id ä¼šè¯åŽ†å²ä¸»é”®
     * @return ç»“æžœ
     */
    @Override
    public int deleteArdCallHistoryById(String id) {
        return ardCallHistoryMapper.deleteArdCallHistoryById(id);
    }
}
ard-work/src/main/java/com/ruoyi/call/service/impl/ArdCallSessionServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,174 @@
package com.ruoyi.call.service.impl;
import com.ruoyi.call.domain.ArdCallGroup;
import com.ruoyi.call.domain.ArdCallSession;
import com.ruoyi.call.domain.ArdCallSessionUser;
import com.ruoyi.call.mapper.ArdCallSessionMapper;
import com.ruoyi.call.service.IArdCallGroupService;
import com.ruoyi.call.service.IArdCallGroupUserService;
import com.ruoyi.call.service.IArdCallSessionService;
import com.ruoyi.call.service.IArdCallSessionUserService;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.uuid.IdUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.Arrays;
import java.util.List;
/**
 * è§†é¢‘会话Service业务层处理
 *
 * @author ard
 * @date 2024-07-03
 */
@Service
public class ArdCallSessionServiceImpl implements IArdCallSessionService {
    @Resource
    private ArdCallSessionMapper ardCallSessionMapper;
    @Resource
    private IArdCallSessionUserService ardCallSessionUserService;
    @Resource
    private IArdCallGroupService ardCallGroupService;
    /**
     * æŸ¥è¯¢è§†é¢‘会话
     *
     * @param id è§†é¢‘会话主键
     * @return è§†é¢‘会话
     */
    @Override
    public ArdCallSession selectArdCallSessionById(String id) {
        return ardCallSessionMapper.selectArdCallSessionById(id);
    }
    /**
     * æŸ¥è¯¢è§†é¢‘会话列表
     *
     * @param ardCallSession è§†é¢‘会话
     * @return è§†é¢‘会话
     */
    @Override
    public List<ArdCallSession> selectArdCallSessionList(ArdCallSession ardCallSession) {
        List<ArdCallSession> ardCallSessions = ardCallSessionMapper.selectArdCallSessionList(ardCallSession);
        return ardCallSessions;
    }
    /**
     * æ–°å¢žè§†é¢‘会话
     *
     * @param ardCallSession è§†é¢‘会话
     * @return ç»“æžœ
     */
    @Override
    public String insertArdCallSession(ArdCallSession ardCallSession) {
        ardCallSession.setId(IdUtils.simpleUUID());
        ardCallSession.setCreateTime(DateUtils.getNowDate());
        ardCallSessionMapper.insertArdCallSession(ardCallSession);
        return ardCallSession.getId();
    }
    /**
     * ä¿®æ”¹è§†é¢‘会话
     *
     * @param ardCallSession è§†é¢‘会话
     * @return ç»“æžœ
     */
    @Override
    public int updateArdCallSession(ArdCallSession ardCallSession) {
        ardCallSession.setUpdateBy(SecurityUtils.getUsername());
        ardCallSession.setUpdateTime(DateUtils.getNowDate());
        return ardCallSessionMapper.updateArdCallSession(ardCallSession);
    }
    /**
     * æ‰¹é‡åˆ é™¤è§†é¢‘会话
     *
     * @param ids éœ€è¦åˆ é™¤çš„视频会话主键
     * @return ç»“æžœ
     */
    @Transactional
    @Override
    public int
    deleteArdCallSessionByIds(String[] ids) {
        Arrays.stream(ids).forEach(id -> {
            ardCallSessionUserService.deleteArdCallSessionUserBySessionId(id);
        });
        return ardCallSessionMapper.deleteArdCallSessionByIds(ids);
    }
    /**
     * åˆ é™¤è§†é¢‘会话信息
     *
     * @param id è§†é¢‘会话主键
     * @return ç»“æžœ
     */
    @Override
    public int deleteArdCallSessionById(String id) {
        return ardCallSessionMapper.deleteArdCallSessionById(id);
    }
    /**
     * èŽ·å–ä¼šè¯
     *
     * @param type     ä¼šè¯ç±»åž‹
     * @param userId   ä¼šè¯å‘èµ·æ–¹
     * @param targetId ä¼šè¯æŽ¥æ”¶æ–¹
     * @return ç»“æžœ
     */
    @Override
    public String getSession(String type, String userId, String targetId) {
        String sessionId = "";
        if (type.equals("0")) {
            //单聊
            sessionId = ardCallSessionUserService.getSessionId(type, userId, targetId);
            if (StringUtils.isEmpty(sessionId)) {
                //创建单聊双方的会话
                ArdCallSession ardCallSession = new ArdCallSession();
                ardCallSession.setType(type);
                sessionId = insertArdCallSession(ardCallSession);
                ArdCallSessionUser ardCallSessionUser = new ArdCallSessionUser();
                ardCallSessionUser.setSessionId(sessionId);
                ardCallSessionUser.setUserId(userId);
                ardCallSessionUser.setTargetId(targetId);
                ardCallSessionUser.setType(type);
                ardCallSessionUserService.insertArdCallSessionUser(ardCallSessionUser);//创建主叫关联
                ardCallSessionUser.setUserId(targetId);
                ardCallSessionUser.setTargetId(userId);
                ardCallSessionUserService.insertArdCallSessionUser(ardCallSessionUser);//创建被叫关联
            }
        } else {
            //群聊
            sessionId = ardCallSessionUserService.getGroupSessionId(type, targetId);
            if (StringUtils.isEmpty(sessionId)) {
                //若不存在群聊session直接则分别创建所有群用户的session
                ArdCallSession ardCallSession = new ArdCallSession();
                ardCallSession.setType(type);
                sessionId = insertArdCallSession(ardCallSession);
                //获取群用户列表
                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);
                    });
                }
            } else {
                //获取自己的session
                 sessionId = ardCallSessionUserService.getSessionId(type, userId, targetId);
            }
        }
        return sessionId;
    }
}
ard-work/src/main/java/com/ruoyi/call/service/impl/ArdCallSessionUserServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,147 @@
package com.ruoyi.call.service.impl;
import java.util.Collections;
import java.util.List;
import com.ruoyi.call.compare.ArdCallSessionUserComparator;
import com.ruoyi.call.domain.ArdCallGroupUser;
import com.ruoyi.call.domain.ArdCallHistory;
import com.ruoyi.call.domain.ArdCallUnreadMessages;
import com.ruoyi.call.mapper.ArdCallGroupUserMapper;
import com.ruoyi.call.mapper.ArdCallHistoryMapper;
import com.ruoyi.call.mapper.ArdCallUnreadMessagesMapper;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.uuid.IdUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.stream.Collectors;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.call.mapper.ArdCallSessionUserMapper;
import com.ruoyi.call.domain.ArdCallSessionUser;
import com.ruoyi.call.service.IArdCallSessionUserService;
import javax.annotation.Resource;
/**
 * ä¼šè¯ç”¨æˆ·ä¸­é—´è¡¨Service业务层处理
 *
 * @author ard
 * @date 2024-07-04
 */
@Service
public class ArdCallSessionUserServiceImpl implements IArdCallSessionUserService {
    @Resource
    private ArdCallSessionUserMapper ardCallSessionUserMapper;
    @Resource
    private ArdCallHistoryMapper ardCallHistoryMapper;
    @Resource
    private ArdCallSessionUserComparator ardCallSessionUserComparator;
    @Resource
    private ArdCallUnreadMessagesMapper ardCallUnreadMessagesMapper;
    /**
     * æŸ¥è¯¢ä¼šè¯ç”¨æˆ·ä¸­é—´è¡¨
     *
     * @param id ä¼šè¯ç”¨æˆ·ä¸­é—´è¡¨ä¸»é”®
     * @return ä¼šè¯ç”¨æˆ·ä¸­é—´è¡¨
     */
    @Override
    public ArdCallSessionUser selectArdCallSessionUserById(String id) {
        return ardCallSessionUserMapper.selectArdCallSessionUserById(id);
    }
    /**
     * æŸ¥è¯¢ä¼šè¯ç”¨æˆ·ä¸­é—´è¡¨åˆ—表
     *
     * @param ardCallSessionUser ä¼šè¯ç”¨æˆ·ä¸­é—´è¡¨
     * @return ä¼šè¯ç”¨æˆ·ä¸­é—´è¡¨
     */
    @Override
    public List<ArdCallSessionUser> selectArdCallSessionUserList(ArdCallSessionUser ardCallSessionUser) {
        //获取用户的会话/未读消息数量/最后一条消息
        List<ArdCallSessionUser> ardCallSessionUsers = ardCallSessionUserMapper.selectArdCallSessionUserList(ardCallSessionUser);
        ardCallSessionUsers.stream().forEach(callSessionUser -> {
            ArdCallUnreadMessages ardCallUnreadMessages = ardCallUnreadMessagesMapper.getUnreadMessage(callSessionUser.getSessionId(), ardCallSessionUser.getUserId());
            if (ardCallUnreadMessages != null) {
                callSessionUser.setUnReadCount(ardCallUnreadMessages.getUnreadCount());
            } else {
                callSessionUser.setUnReadCount(0);
            }
            //获取最后一条消息实体
            ArdCallHistory ardCallHistory = ardCallHistoryMapper.selectLastArdCallHistory(callSessionUser.getSessionId());
            callSessionUser.setArdCallHistory(ardCallHistory);
        });
        //过滤掉没有历史记录的会话
        ardCallSessionUsers = ardCallSessionUsers.stream().filter(obj -> obj.getArdCallHistory() != null).collect(Collectors.toList());
        // ä½¿ç”¨å®šä¹‰çš„ ardCallSessionUserComparator è¿›è¡ŒæŽ’序
        Collections.sort(ardCallSessionUsers, ardCallSessionUserComparator);
        return ardCallSessionUsers;
    }
    /**
     * æ–°å¢žä¼šè¯ç”¨æˆ·ä¸­é—´è¡¨
     *
     * @param ardCallSessionUser ä¼šè¯ç”¨æˆ·ä¸­é—´è¡¨
     * @return ç»“æžœ
     */
    @Override
    public int insertArdCallSessionUser(ArdCallSessionUser ardCallSessionUser) {
        ardCallSessionUser.setId(IdUtils.simpleUUID());
        ardCallSessionUser.setCreateTime(DateUtils.getNowDate());
        return ardCallSessionUserMapper.insertArdCallSessionUser(ardCallSessionUser);
    }
    /**
     * ä¿®æ”¹ä¼šè¯ç”¨æˆ·ä¸­é—´è¡¨
     *
     * @param ardCallSessionUser ä¼šè¯ç”¨æˆ·ä¸­é—´è¡¨
     * @return ç»“æžœ
     */
    @Override
    public int updateArdCallSessionUser(ArdCallSessionUser ardCallSessionUser) {
        return ardCallSessionUserMapper.updateArdCallSessionUser(ardCallSessionUser);
    }
    /**
     * æ‰¹é‡åˆ é™¤ä¼šè¯ç”¨æˆ·ä¸­é—´è¡¨
     *
     * @param ids éœ€è¦åˆ é™¤çš„会话用户中间表主键
     * @return ç»“æžœ
     */
    @Override
    public int deleteArdCallSessionUserByIds(String[] ids) {
        return ardCallSessionUserMapper.deleteArdCallSessionUserByIds(ids);
    }
    /**
     * åˆ é™¤ä¼šè¯ç”¨æˆ·ä¸­é—´è¡¨ä¿¡æ¯
     *
     * @param id ä¼šè¯ç”¨æˆ·ä¸­é—´è¡¨ä¸»é”®
     * @return ç»“æžœ
     */
    @Override
    public int deleteArdCallSessionUserById(String id) {
        return ardCallSessionUserMapper.deleteArdCallSessionUserById(id);
    }
    @Override
    public String getSessionId(String type, String userId, String targetId) {
        return ardCallSessionUserMapper.getSessionId(type, userId, targetId);
    }
    @Override
    public int deleteArdCallSessionUserBySessionId(String sessionId) {
        return ardCallSessionUserMapper.deleteArdCallSessionUserBySessionId(sessionId);
    }
    @Override
    public String getGroupSessionId(String type, String targetId) {
        return ardCallSessionUserMapper.getGroupSessionId(type, targetId);
    }
}
ard-work/src/main/java/com/ruoyi/call/service/impl/ArdCallUnreadMessagesServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,108 @@
package com.ruoyi.call.service.impl;
import java.util.List;
import com.ruoyi.common.utils.uuid.IdUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.call.mapper.ArdCallUnreadMessagesMapper;
import com.ruoyi.call.domain.ArdCallUnreadMessages;
import com.ruoyi.call.service.IArdCallUnreadMessagesService;
import javax.annotation.Resource;
/**
 * æœªè¯»æ¶ˆæ¯Service业务层处理
 *
 * @author ard
 * @date 2024-07-06
 */
@Service
public class ArdCallUnreadMessagesServiceImpl implements IArdCallUnreadMessagesService {
    @Resource
    private ArdCallUnreadMessagesMapper ardCallUnreadMessagesMapper;
    /**
     * æŸ¥è¯¢æœªè¯»æ¶ˆæ¯
     *
     * @param userId  æœªè¯»æ¶ˆæ¯ä¸»é”®
     * @return æœªè¯»æ¶ˆæ¯
     */
    @Override
    public ArdCallUnreadMessages selectArdCallUnreadMessagesByUserId (String userId ) {
        return ardCallUnreadMessagesMapper.selectArdCallUnreadMessagesByUserId (userId );
    }
    /**
     * æŸ¥è¯¢æœªè¯»æ¶ˆæ¯åˆ—表
     *
     * @param ardCallUnreadMessages æœªè¯»æ¶ˆæ¯
     * @return æœªè¯»æ¶ˆæ¯
     */
    @Override
    public List<ArdCallUnreadMessages> selectArdCallUnreadMessagesList(ArdCallUnreadMessages ardCallUnreadMessages) {
        return ardCallUnreadMessagesMapper.selectArdCallUnreadMessagesList(ardCallUnreadMessages);
    }
    /**
     * æ–°å¢žæœªè¯»æ¶ˆæ¯
     *
     * @param ardCallUnreadMessages æœªè¯»æ¶ˆæ¯
     * @return ç»“æžœ
     */
    @Override
    public int insertArdCallUnreadMessages(ArdCallUnreadMessages ardCallUnreadMessages) {
            return ardCallUnreadMessagesMapper.insertArdCallUnreadMessages(ardCallUnreadMessages);
    }
    /**
     * ä¿®æ”¹æœªè¯»æ¶ˆæ¯
     *
     * @param ardCallUnreadMessages æœªè¯»æ¶ˆæ¯
     * @return ç»“æžœ
     */
    @Override
    public int updateArdCallUnreadMessages(ArdCallUnreadMessages ardCallUnreadMessages) {
        return ardCallUnreadMessagesMapper.updateArdCallUnreadMessages(ardCallUnreadMessages);
    }
    /**
     * æ‰¹é‡åˆ é™¤æœªè¯»æ¶ˆæ¯
     *
     * @param userId s éœ€è¦åˆ é™¤çš„æœªè¯»æ¶ˆæ¯ä¸»é”®
     * @return ç»“æžœ
     */
    @Override
    public int deleteArdCallUnreadMessagesByUserId(String[] userId) {
        return ardCallUnreadMessagesMapper.deleteArdCallUnreadMessagesByUserId(userId);
    }
    /**
     * åˆ é™¤æœªè¯»æ¶ˆæ¯ä¿¡æ¯
     *
     * @param userId  æœªè¯»æ¶ˆæ¯ä¸»é”®
     * @return ç»“æžœ
     */
    @Override
    public int deleteArdCallUnreadMessagesByUserId (String userId ) {
        return ardCallUnreadMessagesMapper.deleteArdCallUnreadMessagesByUserId (userId );
    }
    /**
     * æ¸…除未读消息
     *
     * @param userId  æ¸…除未读消息
     * @return ç»“æžœ
     */
    @Override
    public int clearUnReadCount(String sessionId, String userId) {
        ArdCallUnreadMessages ardCallUnreadMessages = ardCallUnreadMessagesMapper.getUnreadMessage(sessionId,userId);
        if (ardCallUnreadMessages != null) {
            ardCallUnreadMessages.setUnreadCount(0);
            ardCallUnreadMessagesMapper.updateArdCallUnreadMessages(ardCallUnreadMessages);
        }
        return 1;
    }
}
ard-work/src/main/java/com/ruoyi/utils/websocket/service/ChatServerEndpoint.java
@@ -1,26 +1,14 @@
package com.ruoyi.utils.websocket.service;
import com.alibaba.fastjson2.JSONObject;
import com.ruoyi.app.position.domain.ArdAppPosition;
import com.ruoyi.app.position.service.IArdAppPositionService;
import com.ruoyi.app.position.service.impl.AppPositionPush;
import com.ruoyi.app.position.service.impl.AppPositionPushService;
import com.ruoyi.app.position.service.impl.ArdAppPositionServiceImpl;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.utils.spring.SpringUtils;
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.stereotype.Component;
import javax.annotation.Resource;
import javax.websocket.*;
import javax.websocket.server.PathParam;
import javax.websocket.server.ServerEndpoint;
import java.io.IOException;
import java.util.*;
import java.util.stream.Collectors;
/**
 * @ClassName ChatServerEndpoint
@@ -40,11 +28,6 @@
        String message = "用户[" + userId + "] æˆåŠŸè¿žæŽ¥ï¼";
        log.info("用户登录:" + message);
        WebSocketUtils.sendMessage(session, message);
        //region æ—§æ–¹æ³•
//        //每个用户连接时,启动初始所有app用户位置发送
//        AppPositionPush.initDataMap.put(userId,AppPositionPush.getAppPositionList());
//        AppPositionPush.initPushTask(userId,session,3000);
        //endregion
    }
    @OnMessage
@@ -52,7 +35,7 @@
        log.info("收到消息:" + message);
        Session session = WebSocketUtils.ONLINE_USER_SESSIONS.get(userId);
        WebSocketUtils.sendMessage(session, message);
//        sendMessageAll("用户[" + userid + "] : " + message);
        //sendMessageAll("用户[" + userid + "] : " + message);
        // æ ¹æ®ç”¨æˆ·æ–°çš„频率重新调整定时任务
        AppPositionPushService.messageHandler(userId,message);
    }
ard-work/src/main/resources/mapper/call/ArdCallGroupMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,82 @@
<?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="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>
    <sql id="selectArdCallGroupVo">
        select acg.*,acgu.* from ard_call_group acg
        left join ard_call_group_user acgu on acg.id = acgu.group_id
    </sql>
    <select id="selectArdCallGroupList" parameterType="ArdCallGroup" resultMap="ArdCallGroupResult">
        <include refid="selectArdCallGroupVo"/>
        <where>
            <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}
    </select>
    <insert id="insertArdCallGroup" parameterType="ArdCallGroup">
        insert into ard_call_group
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="id != null">id,</if>
            <if test="name != null">name,</if>
            <if test="createBy != null">create_by,</if>
            <if test="createTime != null">create_time,</if>
            <if test="updateBy != null">update_by,</if>
            <if test="updateTime != null">update_time,</if>
         </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
            <if test="id != null">#{id},</if>
            <if test="name != null">#{name},</if>
            <if test="createBy != null">#{createBy},</if>
            <if test="createTime != null">#{createTime},</if>
            <if test="updateBy != null">#{updateBy},</if>
            <if test="updateTime != null">#{updateTime},</if>
         </trim>
    </insert>
    <update id="updateArdCallGroup" parameterType="ArdCallGroup">
        update ard_call_group
        <trim prefix="SET" suffixOverrides=",">
            <if test="name != null">name = #{name},</if>
            <if test="createBy != null">create_by = #{createBy},</if>
            <if test="createTime != null">create_time = #{createTime},</if>
            <if test="updateBy != null">update_by = #{updateBy},</if>
            <if test="updateTime != null">update_time = #{updateTime},</if>
        </trim>
        where id = #{id}
    </update>
    <delete id="deleteArdCallGroupById" parameterType="String">
        delete from ard_call_group where id = #{id}
    </delete>
    <delete id="deleteArdCallGroupByIds" parameterType="String">
        delete from ard_call_group where id in
        <foreach item="id" collection="array" open="(" separator="," close=")">
            #{id}
        </foreach>
    </delete>
</mapper>
ard-work/src/main/resources/mapper/call/ArdCallGroupUserMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,108 @@
<?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="com.ruoyi.call.mapper.ArdCallGroupUserMapper">
    <resultMap type="ArdCallGroupUser" id="ArdCallGroupUserResult">
        <result property="id" column="id"/>
        <result property="groupId" column="group_id"/>
        <result property="userId" column="user_id"/>
        <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>
    <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"/>
    </resultMap>
    <sql id="selectArdCallGroupUserVo">
        select id, group_id, user_id, create_by, create_time, update_by, update_time
        from ard_call_group_user
    </sql>
    <select id="selectArdCallGroupUserList" parameterType="ArdCallGroupUser" resultMap="ArdCallGroupUserResult">
        <include refid="selectArdCallGroupUserVo"/>
        <where>
            <if test="groupId != null  and groupId != ''">and group_id = #{groupId}</if>
            <if test="userId != null  and userId != ''">and user_id = #{userId}</if>
        </where>
    </select>
    <select id="selectArdCallGroupUserById" parameterType="String" resultMap="ArdCallGroupUserResult">
        <include refid="selectArdCallGroupUserVo"/>
        where id = #{id}
    </select>
    <insert id="insertArdCallGroupUser" parameterType="ArdCallGroupUser">
        insert into ard_call_group_user
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="id != null">id,</if>
            <if test="groupId != null">group_id,</if>
            <if test="userId != null">user_id,</if>
            <if test="createBy != null">create_by,</if>
            <if test="createTime != null">create_time,</if>
            <if test="updateBy != null">update_by,</if>
            <if test="updateTime != null">update_time,</if>
        </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
            <if test="id != null">#{id},</if>
            <if test="groupId != null">#{groupId},</if>
            <if test="userId != null">#{userId},</if>
            <if test="createBy != null">#{createBy},</if>
            <if test="createTime != null">#{createTime},</if>
            <if test="updateBy != null">#{updateBy},</if>
            <if test="updateTime != null">#{updateTime},</if>
        </trim>
    </insert>
    <update id="updateArdCallGroupUser" parameterType="ArdCallGroupUser">
        update ard_call_group_user
        <trim prefix="SET" suffixOverrides=",">
            <if test="groupId != null">group_id = #{groupId},</if>
            <if test="userId != null">user_id = #{userId},</if>
            <if test="createBy != null">create_by = #{createBy},</if>
            <if test="createTime != null">create_time = #{createTime},</if>
            <if test="updateBy != null">update_by = #{updateBy},</if>
            <if test="updateTime != null">update_time = #{updateTime},</if>
        </trim>
        where id = #{id}
    </update>
    <delete id="deleteArdCallGroupUserById" parameterType="String">
        delete
        from ard_call_group_user
        where id = #{id}
    </delete>
    <delete id="deleteArdCallGroupUserByIds" parameterType="String">
        delete from ard_call_group_user where id in
        <foreach item="id" collection="array" open="(" separator="," close=")">
            #{id}
        </foreach>
    </delete>
    <delete id="clearArdCallGroupUsers" parameterType="String">
        delete
        from ard_call_group_user
        where group_id = #{groupId}
    </delete>
    <delete id="removeGroupUser">
        delete from ard_call_group_user where group_id = #{groupId} and user_id in
        <foreach item="userId" collection="userIds" open="(" separator="," close=")">
            #{userId}
        </foreach>
    </delete>
    <select id="getGroupListByUserId" resultMap="ArdCallGroupResult">
        select acg.*
        from ard_call_group_user acgu
                 left join ard_call_group acg on acg.id = acgu.group_id
        where acgu.user_id = #{userId}
    </select>
</mapper>
ard-work/src/main/resources/mapper/call/ArdCallHistoryMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,114 @@
<?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="com.ruoyi.call.mapper.ArdCallHistoryMapper">
    <resultMap type="ArdCallHistory" id="ArdCallHistoryResult">
        <result property="id" column="id"/>
        <result property="type" column="type"/>
        <result property="content" column="content"/>
        <result property="sessionId" column="session_id"/>
        <result property="userId" column="user_id"/>
        <result property="targetId" column="target_id"/>
        <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="selectArdCallHistoryVo">
        select id,
               type,
               content,
               session_id,
               user_id,
               target_id,
               create_by,
               create_time,
               update_by,
               update_time
        from ard_call_history
    </sql>
    <select id="selectArdCallHistoryList" parameterType="ArdCallHistory" resultMap="ArdCallHistoryResult">
        <include refid="selectArdCallHistoryVo"/>
        <where>
            <if test="sessionId != null  and sessionId != ''">and session_id= #{sessionId}</if>
            <if test="userId != null  and userId != ''">and user_id = #{userId}</if>
            <if test="targetId != null  and targetId != ''">and target_id = #{targetId}</if>
            <if test="type != null  and type != ''">and type = #{type}</if>
            <if test="content != null  and content != ''">and content = #{content}</if>
        </where>
        order by create_time desc
    </select>
    <select id="selectArdCallHistoryById" parameterType="String" resultMap="ArdCallHistoryResult">
        <include refid="selectArdCallHistoryVo"/>
        where id = #{id}
    </select>
    <insert id="insertArdCallHistory" parameterType="ArdCallHistory">
        insert into ard_call_history
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="id != null">id,</if>
            <if test="type != null">type,</if>
            <if test="content != null">content,</if>
            <if test="sessionId != null">session_id,</if>
            <if test="userId != null">user_id,</if>
            <if test="targetId != null">target_id,</if>
            <if test="createBy != null">create_by,</if>
            <if test="createTime != null">create_time,</if>
            <if test="updateBy != null">update_by,</if>
            <if test="updateTime != null">update_time,</if>
        </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
            <if test="id != null">#{id},</if>
            <if test="type != null">#{type},</if>
            <if test="content != null">#{content},</if>
            <if test="sessionId != null">#{sessionId},</if>
            <if test="userId != null">#{userId},</if>
            <if test="targetId != null">#{targetId},</if>
            <if test="createBy != null">#{createBy},</if>
            <if test="createTime != null">#{createTime},</if>
            <if test="updateBy != null">#{updateBy},</if>
            <if test="updateTime != null">#{updateTime},</if>
        </trim>
    </insert>
    <update id="updateArdCallHistory" parameterType="ArdCallHistory">
        update ard_call_history
        <trim prefix="SET" suffixOverrides=",">
            <if test="type != null">type = #{type},</if>
            <if test="content != null">content = #{content},</if>
            <if test="sessionId != null">session_id = #{sessionId},</if>
            <if test="userId != null">user_id = #{userId},</if>
            <if test="createBy != null">create_by = #{createBy},</if>
            <if test="createTime != null">create_time = #{createTime},</if>
            <if test="updateBy != null">update_by = #{updateBy},</if>
            <if test="updateTime != null">update_time = #{updateTime},</if>
        </trim>
        where id = #{id}
    </update>
    <delete id="deleteArdCallHistoryById" parameterType="String">
        delete
        from ard_call_history
        where id = #{id}
    </delete>
    <delete id="deleteArdCallHistoryByIds" parameterType="String">
        delete from ard_call_history where id in
        <foreach item="id" collection="array" open="(" separator="," close=")">
            #{id}
        </foreach>
    </delete>
    <select id="selectLastArdCallHistory" parameterType="String" resultType="ArdCallHistory">
        select *
        from ard_call_history
        where session_id = #{sessionId}
        order by create_time desc limit 1
    </select>
</mapper>
ard-work/src/main/resources/mapper/call/ArdCallSessionMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,81 @@
<?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="com.ruoyi.call.mapper.ArdCallSessionMapper">
    <resultMap type="ArdCallSession" id="ArdCallSessionResult">
        <result property="id" column="id"/>
        <result property="type" column="type"/>
        <result property="userId" column="user_id"/>
        <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="selectArdCallSessionVo">
        select id, type, user_id, create_by, create_time, update_by, update_time
        from ard_call_session
    </sql>
    <select id="selectArdCallSessionList" parameterType="ArdCallSession" resultMap="ArdCallSessionResult">
        <include refid="selectArdCallSessionVo"/>
        <where>
            <if test="type != null  and type != ''">and type = #{type}</if>
        </where>
    </select>
    <select id="selectArdCallSessionById" parameterType="String" resultMap="ArdCallSessionResult">
        <include refid="selectArdCallSessionVo"/>
        where id = #{id}
    </select>
    <insert id="insertArdCallSession" parameterType="ArdCallSession">
        insert into ard_call_session
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="id != null">id,</if>
            <if test="type != null">type,</if>
            <if test="userId != null">user_id,</if>
            <if test="createBy != null">create_by,</if>
            <if test="createTime != null">create_time,</if>
            <if test="updateBy != null">update_by,</if>
            <if test="updateTime != null">update_time,</if>
        </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
            <if test="id != null">#{id},</if>
            <if test="type != null">#{type},</if>
            <if test="userId != null">#{userId},</if>
            <if test="createBy != null">#{createBy},</if>
            <if test="createTime != null">#{createTime},</if>
            <if test="updateBy != null">#{updateBy},</if>
            <if test="updateTime != null">#{updateTime},</if>
        </trim>
    </insert>
    <update id="updateArdCallSession" parameterType="ArdCallSession">
        update ard_call_session
        <trim prefix="SET" suffixOverrides=",">
            <if test="type != null">type = #{type},</if>
            <if test="userId != null">user_id = #{userId},</if>
            <if test="createBy != null">create_by = #{createBy},</if>
            <if test="createTime != null">create_time = #{createTime},</if>
            <if test="updateBy != null">update_by = #{updateBy},</if>
            <if test="updateTime != null">update_time = #{updateTime},</if>
        </trim>
        where id = #{id}
    </update>
    <delete id="deleteArdCallSessionById" parameterType="String">
        delete
        from ard_call_session
        where id = #{id}
    </delete>
    <delete id="deleteArdCallSessionByIds" parameterType="String">
        delete from ard_call_session where id in
        <foreach item="id" collection="array" open="(" separator="," close=")">
            #{id}
        </foreach>
    </delete>
</mapper>
ard-work/src/main/resources/mapper/call/ArdCallSessionUserMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,94 @@
<?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="com.ruoyi.call.mapper.ArdCallSessionUserMapper">
    <resultMap type="ArdCallSessionUser" id="ArdCallSessionUserResult">
        <result property="id" column="id"/>
        <result property="sessionId" column="session_id"/>
        <result property="type" column="type"/>
        <result property="userId" column="user_id"/>
        <result property="targetId" column="target_id"/>
    </resultMap>
    <sql id="selectArdCallSessionUserVo">
        select id, session_id, type, user_id,target_id
        from ard_call_session_user
    </sql>
    <select id="selectArdCallSessionUserList" parameterType="ArdCallSessionUser" resultMap="ArdCallSessionUserResult">
        <include refid="selectArdCallSessionUserVo"/>
        <where>
            <if test="sessionId != null  and sessionId != ''">and session_id = #{sessionId}</if>
            <if test="type != null  and type != ''">and type = #{type}</if>
            <if test="userId != null  and userId != ''">and user_id = #{userId}</if>
            <if test="targetId != null  and targetId != ''">and target_id = #{targetId}</if>
        </where>
    </select>
    <select id="selectArdCallSessionUserById" parameterType="String" resultMap="ArdCallSessionUserResult">
        <include refid="selectArdCallSessionUserVo"/>
        where id = #{id}
    </select>
    <insert id="insertArdCallSessionUser" parameterType="ArdCallSessionUser">
        insert into ard_call_session_user
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="id != null">id,</if>
            <if test="sessionId != null">session_id,</if>
            <if test="type != null">type,</if>
            <if test="userId != null">user_id,</if>
            <if test="targetId != null">target_id,</if>
        </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
            <if test="id != null">#{id},</if>
            <if test="sessionId != null">#{sessionId},</if>
            <if test="type != null">#{type},</if>
            <if test="userId != null">#{userId},</if>
            <if test="targetId != null">#{targetId},</if>
        </trim>
    </insert>
    <update id="updateArdCallSessionUser" parameterType="ArdCallSessionUser">
        update ard_call_session_user
        <trim prefix="SET" suffixOverrides=",">
            <if test="sessionId != null">session_id = #{sessionId},</if>
            <if test="type != null">type = #{type},</if>
            <if test="userId != null">user_id = #{userId},</if>
            <if test="targetId != null">target_id = #{targetId},</if>
        </trim>
        where id = #{id}
    </update>
    <delete id="deleteArdCallSessionUserById" parameterType="String">
        delete
        from ard_call_session_user
        where id = #{id}
    </delete>
    <delete id="deleteArdCallSessionUserByIds" parameterType="String">
        delete from ard_call_session_user where id in
        <foreach item="id" collection="array" open="(" separator="," close=")">
            #{id}
        </foreach>
    </delete>
    <select id="getSessionId" parameterType="String" resultType="String">
        select session_id
        from ard_call_session_user
        where user_id = #{userId}
          and target_id = #{targetId}
          and type = #{type}
    </select>
    <select id="getGroupSessionId" parameterType="String" resultType="String">
        select session_id
        from ard_call_session_user
        where target_id = #{targetId}
        limit 1
    </select>
    <delete id="deleteArdCallSessionUserBySessionId" parameterType="String">
        delete
        from ard_call_session_user
        where session_id = #{sessionId}
    </delete>
</mapper>
ard-work/src/main/resources/mapper/call/ArdCallUnreadMessagesMapper.xml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,74 @@
<?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="com.ruoyi.call.mapper.ArdCallUnreadMessagesMapper">
    <resultMap type="ArdCallUnreadMessages" id="ArdCallUnreadMessagesResult">
        <result property="userId" column="user_id "/>
        <result property="sessionId" column="session_id"/>
        <result property="unreadCount" column="unread_count"/>
    </resultMap>
    <sql id="selectArdCallUnreadMessagesVo">
        select user_id, session_id, unread_count
        from ard_call_unread_messages
    </sql>
    <select id="selectArdCallUnreadMessagesList" parameterType="ArdCallUnreadMessages"
            resultMap="ArdCallUnreadMessagesResult">
        <include refid="selectArdCallUnreadMessagesVo"/>
        <where>
            <if test="userId  != null  and userId != ''">and user_id = #{userId }</if>
            <if test="sessionId != null  and sessionId != ''">and session_id = #{sessionId}</if>
            <if test="unreadCount != null  and unreadCount != ''">and unread_count = #{unreadCount}</if>
        </where>
    </select>
    <select id="selectArdCallUnreadMessagesByUserId" parameterType="String" resultMap="ArdCallUnreadMessagesResult">
        <include refid="selectArdCallUnreadMessagesVo"/>
        where user_id = #{userId }
    </select>
    <insert id="insertArdCallUnreadMessages" parameterType="ArdCallUnreadMessages">
        insert into ard_call_unread_messages
        <trim prefix="(" suffix=")" suffixOverrides=",">
            <if test="userId  != null">user_id ,</if>
            <if test="sessionId != null">session_id,</if>
            <if test="unreadCount != null">unread_count,</if>
        </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
            <if test="userId  != null">#{userId },</if>
            <if test="sessionId != null">#{sessionId},</if>
            <if test="unreadCount != null">#{unreadCount},</if>
        </trim>
        ON CONFLICT (session_id, user_id) DO NOTHING
    </insert>
    <update id="updateArdCallUnreadMessages" parameterType="ArdCallUnreadMessages">
        update ard_call_unread_messages
        <trim prefix="SET" suffixOverrides=",">
            <if test="unreadCount != null">unread_count = #{unreadCount},</if>
        </trim>
        where user_id = #{userId } and session_id = #{sessionId}
    </update>
    <delete id="deleteArdCallUnreadMessagesByUserId " parameterType="String">
        delete
        from ard_call_unread_messages
        where user_id = #{userId }
    </delete>
    <delete id="deleteArdCallUnreadMessagesByUserId" parameterType="String">
        delete from ard_call_unread_messages where user_id in
        <foreach item="userId" collection="array" open="(" separator="," close=")">
            #{userId }
        </foreach>
    </delete>
    <select id="getUnreadMessage" resultType="ArdCallUnreadMessages">
        select *
        from ard_call_unread_messages
        where user_id = #{targetId}
          and session_id = #{sessionId}
    </select>
</mapper>
ruoyi-admin/src/main/java/com/ruoyi/web/core/config/SwaggerConfig.java
@@ -35,12 +35,14 @@
    /**
     * åˆ›å»ºAPI
     */
    @Bean
    @Bean("baseApi")
    public Docket createRestApi()
    {
        return new Docket(DocumentationType.SWAGGER_2)
                // æ˜¯å¦å¯ç”¨Swagger
                .enable(true)
                //分组名称
                .groupName("baseApi")
                // ç”¨æ¥åˆ›å»ºè¯¥API的基本信息,展示在文档的页面中(自定义展示的信息)
                .apiInfo(apiInfo())
                // è®¾ç½®å“ªäº›æŽ¥å£æš´éœ²ç»™Swagger展示
@@ -57,7 +59,33 @@
                .securityContexts(securityContexts())
                .pathMapping("/");
    }
    /**
     * åˆ›å»ºAPI-VideoCall
     */
    @Bean("VideoCallApi")
    public Docket createRestApiVideoCall()
    {
        return new Docket(DocumentationType.SWAGGER_2)
                // æ˜¯å¦å¯ç”¨Swagger
                .enable(true)
                //分组名称
                .groupName("VideoCallApi")
                // ç”¨æ¥åˆ›å»ºè¯¥API的基本信息,展示在文档的页面中(自定义展示的信息)
                .apiInfo(apiInfo())
                // è®¾ç½®å“ªäº›æŽ¥å£æš´éœ²ç»™Swagger展示
                .select()
                // æ‰«ææ‰€æœ‰æœ‰æ³¨è§£çš„api,用这种方式更灵活
                .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
                // æ‰«ææŒ‡å®šåŒ…中的swagger注解
                 .apis(RequestHandlerSelectors.basePackage("com.ruoyi.call.controller"))
                // æ‰«ææ‰€æœ‰ .apis(RequestHandlerSelectors.any())
                .paths(PathSelectors.any())
                .build()
                /* è®¾ç½®å®‰å…¨æ¨¡å¼ï¼Œswagger可以设置访问token */
                .securitySchemes(securitySchemes())
                .securityContexts(securityContexts())
                .pathMapping("/");
    }
    /**
     * å®‰å…¨æ¨¡å¼ï¼Œè¿™é‡ŒæŒ‡å®štoken通过Authorization头请求头传递
     */