From 0ab014198a8b4e40fa26da394373a4bcdb571148 Mon Sep 17 00:00:00 2001
From: liusuyi <1951119284@qq.com>
Date: Sat, 06 Jul 2024 17:23:15 +0800
Subject: [PATCH] 增加:群聊业务
---
ard-work/src/main/java/com/ruoyi/call/compare/ArdCallSessionUserComparator.java | 18
ard-work/src/main/java/com/ruoyi/call/domain/ArdCallGroup.java | 83 +
ard-work/src/main/java/com/ruoyi/call/service/IArdCallHistoryService.java | 61 +
ard-work/src/main/java/com/ruoyi/call/controller/ArdCallSessionUserController.java | 101 +
ard-work/src/main/java/com/ruoyi/call/domain/ArdCallGroupUser.java | 80 +
ard-work/src/main/java/com/ruoyi/call/service/impl/ArdCallHistoryServiceImpl.java | 152 ++
ard-work/src/main/resources/mapper/call/ArdCallGroupUserMapper.xml | 108 +
ard-work/src/main/java/com/ruoyi/call/mapper/ArdCallSessionMapper.java | 62 +
ard-work/src/main/java/com/ruoyi/call/domain/ArdCallSessionUser.java | 107 +
ard-work/src/main/java/com/ruoyi/call/controller/ArdCallSessionController.java | 93 +
ard-work/src/main/java/com/ruoyi/call/service/IArdCallUnreadMessagesService.java | 70 +
ard-work/src/main/java/com/ruoyi/call/mapper/ArdCallGroupMapper.java | 61 +
ard-work/src/main/java/com/ruoyi/call/mapper/ArdCallSessionUserMapper.java | 68 +
ard-work/src/main/java/com/ruoyi/call/controller/ArdCallGroupUserController.java | 124 ++
ard-work/src/main/java/com/ruoyi/call/controller/ArdCallHistoryController.java | 88 +
ard-work/src/main/java/com/ruoyi/call/mapper/ArdCallGroupUserMapper.java | 84 +
ard-work/src/main/java/com/ruoyi/call/service/IArdCallSessionService.java | 72 +
ard-work/src/main/java/com/ruoyi/call/service/impl/ArdCallGroupUserServiceImpl.java | 167 ++
ard-work/src/main/java/com/ruoyi/call/service/impl/ArdCallSessionServiceImpl.java | 174 +++
ard-work/src/main/java/com/ruoyi/utils/websocket/service/ChatServerEndpoint.java | 19
ard-work/src/main/java/com/ruoyi/call/domain/ArdCallHistory.java | 104 +
ard-work/src/main/java/com/ruoyi/call/service/IArdCallGroupUserService.java | 97 +
ard-work/src/main/resources/mapper/call/ArdCallSessionMapper.xml | 81 +
ard-work/src/main/java/com/ruoyi/call/service/impl/ArdCallUnreadMessagesServiceImpl.java | 108 +
ruoyi-admin/src/main/java/com/ruoyi/web/core/config/SwaggerConfig.java | 32
ard-work/src/main/java/com/ruoyi/call/service/IArdCallGroupService.java | 61 +
ard-work/src/main/java/com/ruoyi/call/controller/ArdCallGroupController.java | 93 +
ard-work/src/main/java/com/ruoyi/call/mapper/ArdCallHistoryMapper.java | 72 +
ard-work/src/main/java/com/ruoyi/call/domain/ArdCallSession.java | 86 +
ard-work/src/main/java/com/ruoyi/call/service/impl/ArdCallGroupServiceImpl.java | 122 ++
ard-work/src/main/resources/mapper/call/ArdCallHistoryMapper.xml | 114 ++
ard-work/src/main/resources/mapper/call/ArdCallSessionUserMapper.xml | 94 +
ard-work/src/main/java/com/ruoyi/call/mapper/ArdCallUnreadMessagesMapper.java | 68 +
ard-work/src/main/resources/mapper/call/ArdCallUnreadMessagesMapper.xml | 74 +
ard-work/src/main/resources/mapper/call/ArdCallGroupMapper.xml | 82 +
ard-work/src/main/java/com/ruoyi/call/domain/ArdCallUnreadMessages.java | 66 +
ard-work/src/main/java/com/ruoyi/call/service/IArdCallSessionUserService.java | 80 +
ard-work/src/main/java/com/ruoyi/call/service/impl/ArdCallSessionUserServiceImpl.java | 147 ++
38 files changed, 3,353 insertions(+), 20 deletions(-)
diff --git a/ard-work/src/main/java/com/ruoyi/call/compare/ArdCallSessionUserComparator.java b/ard-work/src/main/java/com/ruoyi/call/compare/ArdCallSessionUserComparator.java
new file mode 100644
index 0000000..85c075f
--- /dev/null
+++ b/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);
+ }
+}
\ No newline at end of file
diff --git a/ard-work/src/main/java/com/ruoyi/call/controller/ArdCallGroupController.java b/ard-work/src/main/java/com/ruoyi/call/controller/ArdCallGroupController.java
new file mode 100644
index 0000000..7a9e641
--- /dev/null
+++ b/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));
+ }
+
+}
diff --git a/ard-work/src/main/java/com/ruoyi/call/controller/ArdCallGroupUserController.java b/ard-work/src/main/java/com/ruoyi/call/controller/ArdCallGroupUserController.java
new file mode 100644
index 0000000..607c2d7
--- /dev/null
+++ b/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));
+ }
+
+
+}
diff --git a/ard-work/src/main/java/com/ruoyi/call/controller/ArdCallHistoryController.java b/ard-work/src/main/java/com/ruoyi/call/controller/ArdCallHistoryController.java
new file mode 100644
index 0000000..9f38bea
--- /dev/null
+++ b/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));
+ }
+}
diff --git a/ard-work/src/main/java/com/ruoyi/call/controller/ArdCallSessionController.java b/ard-work/src/main/java/com/ruoyi/call/controller/ArdCallSessionController.java
new file mode 100644
index 0000000..1d00e92
--- /dev/null
+++ b/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));
+ }
+
+}
diff --git a/ard-work/src/main/java/com/ruoyi/call/controller/ArdCallSessionUserController.java b/ard-work/src/main/java/com/ruoyi/call/controller/ArdCallSessionUserController.java
new file mode 100644
index 0000000..5d83e2e
--- /dev/null
+++ b/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));
+ }
+}
diff --git a/ard-work/src/main/java/com/ruoyi/call/domain/ArdCallGroup.java b/ard-work/src/main/java/com/ruoyi/call/domain/ArdCallGroup.java
new file mode 100644
index 0000000..772a450
--- /dev/null
+++ b/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();
+ }
+}
diff --git a/ard-work/src/main/java/com/ruoyi/call/domain/ArdCallGroupUser.java b/ard-work/src/main/java/com/ruoyi/call/domain/ArdCallGroupUser.java
new file mode 100644
index 0000000..1c4797d
--- /dev/null
+++ b/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();
+ }
+}
diff --git a/ard-work/src/main/java/com/ruoyi/call/domain/ArdCallHistory.java b/ard-work/src/main/java/com/ruoyi/call/domain/ArdCallHistory.java
new file mode 100644
index 0000000..6bc1c2f
--- /dev/null
+++ b/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();
+ }
+}
diff --git a/ard-work/src/main/java/com/ruoyi/call/domain/ArdCallSession.java b/ard-work/src/main/java/com/ruoyi/call/domain/ArdCallSession.java
new file mode 100644
index 0000000..d4116b3
--- /dev/null
+++ b/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();
+ }
+}
diff --git a/ard-work/src/main/java/com/ruoyi/call/domain/ArdCallSessionUser.java b/ard-work/src/main/java/com/ruoyi/call/domain/ArdCallSessionUser.java
new file mode 100644
index 0000000..610c7ee
--- /dev/null
+++ b/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;
+ }
+}
diff --git a/ard-work/src/main/java/com/ruoyi/call/domain/ArdCallUnreadMessages.java b/ard-work/src/main/java/com/ruoyi/call/domain/ArdCallUnreadMessages.java
new file mode 100644
index 0000000..21de2da
--- /dev/null
+++ b/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();
+ }
+}
diff --git a/ard-work/src/main/java/com/ruoyi/call/mapper/ArdCallGroupMapper.java b/ard-work/src/main/java/com/ruoyi/call/mapper/ArdCallGroupMapper.java
new file mode 100644
index 0000000..a5033f6
--- /dev/null
+++ b/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);
+}
diff --git a/ard-work/src/main/java/com/ruoyi/call/mapper/ArdCallGroupUserMapper.java b/ard-work/src/main/java/com/ruoyi/call/mapper/ArdCallGroupUserMapper.java
new file mode 100644
index 0000000..bd1cce6
--- /dev/null
+++ b/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);
+
+
+}
diff --git a/ard-work/src/main/java/com/ruoyi/call/mapper/ArdCallHistoryMapper.java b/ard-work/src/main/java/com/ruoyi/call/mapper/ArdCallHistoryMapper.java
new file mode 100644
index 0000000..a5786f5
--- /dev/null
+++ b/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);
+
+}
diff --git a/ard-work/src/main/java/com/ruoyi/call/mapper/ArdCallSessionMapper.java b/ard-work/src/main/java/com/ruoyi/call/mapper/ArdCallSessionMapper.java
new file mode 100644
index 0000000..18fd125
--- /dev/null
+++ b/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);
+
+}
diff --git a/ard-work/src/main/java/com/ruoyi/call/mapper/ArdCallSessionUserMapper.java b/ard-work/src/main/java/com/ruoyi/call/mapper/ArdCallSessionUserMapper.java
new file mode 100644
index 0000000..fd7d26e
--- /dev/null
+++ b/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);
+
+
+}
diff --git a/ard-work/src/main/java/com/ruoyi/call/mapper/ArdCallUnreadMessagesMapper.java b/ard-work/src/main/java/com/ruoyi/call/mapper/ArdCallUnreadMessagesMapper.java
new file mode 100644
index 0000000..81383ec
--- /dev/null
+++ b/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);
+}
diff --git a/ard-work/src/main/java/com/ruoyi/call/service/IArdCallGroupService.java b/ard-work/src/main/java/com/ruoyi/call/service/IArdCallGroupService.java
new file mode 100644
index 0000000..df1ff43
--- /dev/null
+++ b/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);
+}
diff --git a/ard-work/src/main/java/com/ruoyi/call/service/IArdCallGroupUserService.java b/ard-work/src/main/java/com/ruoyi/call/service/IArdCallGroupUserService.java
new file mode 100644
index 0000000..78cfbfb
--- /dev/null
+++ b/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);
+}
diff --git a/ard-work/src/main/java/com/ruoyi/call/service/IArdCallHistoryService.java b/ard-work/src/main/java/com/ruoyi/call/service/IArdCallHistoryService.java
new file mode 100644
index 0000000..af86fb9
--- /dev/null
+++ b/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);
+}
diff --git a/ard-work/src/main/java/com/ruoyi/call/service/IArdCallSessionService.java b/ard-work/src/main/java/com/ruoyi/call/service/IArdCallSessionService.java
new file mode 100644
index 0000000..af36f59
--- /dev/null
+++ b/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);
+}
diff --git a/ard-work/src/main/java/com/ruoyi/call/service/IArdCallSessionUserService.java b/ard-work/src/main/java/com/ruoyi/call/service/IArdCallSessionUserService.java
new file mode 100644
index 0000000..f8aa9e5
--- /dev/null
+++ b/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);
+}
diff --git a/ard-work/src/main/java/com/ruoyi/call/service/IArdCallUnreadMessagesService.java b/ard-work/src/main/java/com/ruoyi/call/service/IArdCallUnreadMessagesService.java
new file mode 100644
index 0000000..f891eaa
--- /dev/null
+++ b/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);
+}
diff --git a/ard-work/src/main/java/com/ruoyi/call/service/impl/ArdCallGroupServiceImpl.java b/ard-work/src/main/java/com/ruoyi/call/service/impl/ArdCallGroupServiceImpl.java
new file mode 100644
index 0000000..cde19dc
--- /dev/null
+++ b/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);
+ }
+}
diff --git a/ard-work/src/main/java/com/ruoyi/call/service/impl/ArdCallGroupUserServiceImpl.java b/ard-work/src/main/java/com/ruoyi/call/service/impl/ArdCallGroupUserServiceImpl.java
new file mode 100644
index 0000000..a2962b4
--- /dev/null
+++ b/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;
+ }
+}
diff --git a/ard-work/src/main/java/com/ruoyi/call/service/impl/ArdCallHistoryServiceImpl.java b/ard-work/src/main/java/com/ruoyi/call/service/impl/ArdCallHistoryServiceImpl.java
new file mode 100644
index 0000000..8667806
--- /dev/null
+++ b/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);
+ }
+}
diff --git a/ard-work/src/main/java/com/ruoyi/call/service/impl/ArdCallSessionServiceImpl.java b/ard-work/src/main/java/com/ruoyi/call/service/impl/ArdCallSessionServiceImpl.java
new file mode 100644
index 0000000..7043f4f
--- /dev/null
+++ b/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;
+ }
+}
diff --git a/ard-work/src/main/java/com/ruoyi/call/service/impl/ArdCallSessionUserServiceImpl.java b/ard-work/src/main/java/com/ruoyi/call/service/impl/ArdCallSessionUserServiceImpl.java
new file mode 100644
index 0000000..13c2fdf
--- /dev/null
+++ b/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);
+ }
+
+}
diff --git a/ard-work/src/main/java/com/ruoyi/call/service/impl/ArdCallUnreadMessagesServiceImpl.java b/ard-work/src/main/java/com/ruoyi/call/service/impl/ArdCallUnreadMessagesServiceImpl.java
new file mode 100644
index 0000000..2a6644c
--- /dev/null
+++ b/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;
+ }
+}
diff --git a/ard-work/src/main/java/com/ruoyi/utils/websocket/service/ChatServerEndpoint.java b/ard-work/src/main/java/com/ruoyi/utils/websocket/service/ChatServerEndpoint.java
index 82af738..5b1dcb4 100644
--- a/ard-work/src/main/java/com/ruoyi/utils/websocket/service/ChatServerEndpoint.java
+++ b/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);
}
diff --git a/ard-work/src/main/resources/mapper/call/ArdCallGroupMapper.xml b/ard-work/src/main/resources/mapper/call/ArdCallGroupMapper.xml
new file mode 100644
index 0000000..2d33545
--- /dev/null
+++ b/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>
\ No newline at end of file
diff --git a/ard-work/src/main/resources/mapper/call/ArdCallGroupUserMapper.xml b/ard-work/src/main/resources/mapper/call/ArdCallGroupUserMapper.xml
new file mode 100644
index 0000000..9df089b
--- /dev/null
+++ b/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>
\ No newline at end of file
diff --git a/ard-work/src/main/resources/mapper/call/ArdCallHistoryMapper.xml b/ard-work/src/main/resources/mapper/call/ArdCallHistoryMapper.xml
new file mode 100644
index 0000000..75c08a0
--- /dev/null
+++ b/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>
\ No newline at end of file
diff --git a/ard-work/src/main/resources/mapper/call/ArdCallSessionMapper.xml b/ard-work/src/main/resources/mapper/call/ArdCallSessionMapper.xml
new file mode 100644
index 0000000..899d30e
--- /dev/null
+++ b/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>
\ No newline at end of file
diff --git a/ard-work/src/main/resources/mapper/call/ArdCallSessionUserMapper.xml b/ard-work/src/main/resources/mapper/call/ArdCallSessionUserMapper.xml
new file mode 100644
index 0000000..01cde9a
--- /dev/null
+++ b/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>
\ No newline at end of file
diff --git a/ard-work/src/main/resources/mapper/call/ArdCallUnreadMessagesMapper.xml b/ard-work/src/main/resources/mapper/call/ArdCallUnreadMessagesMapper.xml
new file mode 100644
index 0000000..8708431
--- /dev/null
+++ b/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>
\ No newline at end of file
diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/core/config/SwaggerConfig.java b/ruoyi-admin/src/main/java/com/ruoyi/web/core/config/SwaggerConfig.java
index 85f1e4c..e1a9568 100644
--- a/ruoyi-admin/src/main/java/com/ruoyi/web/core/config/SwaggerConfig.java
+++ b/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头请求头传递
*/
--
Gitblit v1.9.3