diff --git a/src/main/java/com/dd/admin/business/chat/controller/ChatController.java b/src/main/java/com/dd/admin/business/chat/controller/ChatController.java
index 6c61768..5842149 100644
--- a/src/main/java/com/dd/admin/business/chat/controller/ChatController.java
+++ b/src/main/java/com/dd/admin/business/chat/controller/ChatController.java
@@ -3,8 +3,10 @@ package com.dd.admin.business.chat.controller;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.extra.pinyin.PinyinUtil;
-import com.dd.admin.business.chat.domain.AuthorChat;
-import com.dd.admin.business.chat.domain.MessageBean;
+import com.dd.admin.business.api.domain.UnReadCountBean;
+import com.dd.admin.business.chat.domain.*;
+import com.dd.admin.common.aop.operationLog.aop.OperLog;
+import com.dd.admin.common.aop.operationLog.aop.OperType;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import org.springframework.web.bind.annotation.*;
import io.swagger.annotations.Api;
@@ -16,8 +18,6 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import javax.validation.constraints.NotBlank;
import com.dd.admin.business.chat.entity.Chat;
-import com.dd.admin.business.chat.domain.ChatVo;
-import com.dd.admin.business.chat.domain.ChatDto;
import com.dd.admin.business.chat.service.ChatService;
import java.util.*;
@@ -52,6 +52,16 @@ public class ChatController {
return calendar.getTimeInMillis();
}
+
+ @ApiOperation(value = "查询客服未读消息数量")
+ @ApiOperationSupport(order = 1)
+ @GetMapping("/admin/chat/getUnReadCount")
+ @OperLog(operModule = "查询客服未读消息数量",operType = OperType.OTHER,operDesc = "查询客服未读消息数量")
+ public ResultBean getUnReadCount() {
+ Integer chatUnReadCount = chatService.selectUnReadCount("8");
+ return ResultBean.success(chatUnReadCount);
+ };
+
@ApiOperation(value = "作者列表")
@ApiOperationSupport(order = 2)
@GetMapping("/admin/chat/authorList")
@@ -98,6 +108,17 @@ public class ChatController {
}
+
+ @ApiOperation(value = "读取聊天消息")
+ @ApiOperationSupport(order = 4)
+ @PostMapping("/admin/chat/readAuthorMessage")
+ @OperLog(operModule = "读取回复消息", operType = OperType.OTHER, operDesc = "读取聊天消息")
+ public ResultBean readReplyMessage(@RequestBody AuthorParam authorParam) {
+ chatService.readMessage(authorParam.getAuthorId(),"8");
+ return ResultBean.success("noAlert");
+ }
+
+
@ApiOperation(value = "-分页列表")
@ApiOperationSupport(order = 1)
@GetMapping("/admin/chat/page")
diff --git a/src/main/java/com/dd/admin/business/chat/domain/AuthorParam.java b/src/main/java/com/dd/admin/business/chat/domain/AuthorParam.java
new file mode 100644
index 0000000..a9fb76d
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/chat/domain/AuthorParam.java
@@ -0,0 +1,12 @@
+package com.dd.admin.business.chat.domain;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class AuthorParam {
+ private String authorId;
+}
diff --git a/src/main/java/com/dd/admin/business/chat/mapper/xml/ChatMapper.xml b/src/main/java/com/dd/admin/business/chat/mapper/xml/ChatMapper.xml
index 9da0f69..77e3406 100644
--- a/src/main/java/com/dd/admin/business/chat/mapper/xml/ChatMapper.xml
+++ b/src/main/java/com/dd/admin/business/chat/mapper/xml/ChatMapper.xml
@@ -113,58 +113,52 @@
diff --git a/src/main/java/com/dd/admin/business/operationLog/domain/OperationLogVo.java b/src/main/java/com/dd/admin/business/operationLog/domain/OperationLogVo.java
index d6d4546..f457847 100644
--- a/src/main/java/com/dd/admin/business/operationLog/domain/OperationLogVo.java
+++ b/src/main/java/com/dd/admin/business/operationLog/domain/OperationLogVo.java
@@ -27,6 +27,10 @@ public class OperationLogVo {
@ApiModelProperty(value = "日志id")
private String operId;
+ @ApiModelProperty(value = "操作ip")
+ @TableField("OPER_IP_ADDRESS")
+ private String operIpAddress;
+
@ApiModelProperty(value = "请求模块")
private String operModule;
diff --git a/src/main/java/com/dd/admin/business/webSocket/handler/GetReadCoutMessageHandler.java b/src/main/java/com/dd/admin/business/webSocket/handler/GetReadCoutMessageHandler.java
new file mode 100644
index 0000000..c4f1010
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/webSocket/handler/GetReadCoutMessageHandler.java
@@ -0,0 +1,26 @@
+package com.dd.admin.business.webSocket.handler;
+
+import com.dd.admin.business.chat.service.ChatService;
+import com.dd.admin.business.webSocket.MsgHandlerInterface;
+import com.dd.admin.business.webSocket.util.TioUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.tio.core.ChannelContext;
+
+import java.util.Map;
+
+
+@Slf4j
+@Service("8")
+public class GetReadCoutMessageHandler implements MsgHandlerInterface {
+ @Autowired
+ ChatService chatService;
+ @Override
+ public Object handler(Map map, ChannelContext context) {
+ String authorId = String.valueOf(map.get("authorId"));
+ Integer unReadCount = chatService.selectUnReadCount(authorId);
+ TioUtil.sendChatMessageToUser(context.getGroupContext(),authorId,"8",unReadCount);
+ return null;
+ }
+}
diff --git a/src/main/java/com/dd/admin/business/webSocket/handler/ReadMessageHandler.java b/src/main/java/com/dd/admin/business/webSocket/handler/ReadMessageHandler.java
new file mode 100644
index 0000000..916cf68
--- /dev/null
+++ b/src/main/java/com/dd/admin/business/webSocket/handler/ReadMessageHandler.java
@@ -0,0 +1,27 @@
+package com.dd.admin.business.webSocket.handler;
+
+import com.dd.admin.business.chat.service.ChatService;
+import com.dd.admin.business.webSocket.MsgHandlerInterface;
+import com.dd.admin.business.webSocket.util.TioUtil;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+import org.springframework.stereotype.Service;
+import org.tio.core.ChannelContext;
+
+import java.util.Map;
+
+
+@Slf4j
+@Service("7")
+public class ReadMessageHandler implements MsgHandlerInterface {
+ @Autowired
+ ChatService chatService;
+ @Override
+ public Object handler(Map map, ChannelContext context) {
+ String authorId = String.valueOf(map.get("authorId"));
+ String loginId = String.valueOf(map.get("loginId"));
+ chatService.readMessage(authorId,loginId);
+ return null;
+ }
+}
diff --git a/web/.env.development b/web/.env.development
index 3e6d80b..a593222 100644
--- a/web/.env.development
+++ b/web/.env.development
@@ -3,8 +3,9 @@ ENV = 'development'
# base api
VUE_APP_BASE_API = 'http://127.0.0.1:8080'
+VUE_APP_WEBSOCKET_API = 'ws://192.168.10.98:9326'
# system name
-VUE_APP_SYSTEM_NAME = 'DD ADMIN'
+VUE_APP_SYSTEM_NAME = '小红书社区后台管理系统'
VUE_APP_SYSTEM_LOGO = 'logo.png'
diff --git a/web/.env.production b/web/.env.production
index b740e3a..7a5cbce 100644
--- a/web/.env.production
+++ b/web/.env.production
@@ -3,8 +3,9 @@ ENV = 'production'
# base api
VUE_APP_BASE_API = 'http://8.146.211.120:8080'
-VUE_APP_WEBSOCKET_API = 'ws://8.146.211.120:9326/'
+VUE_APP_WEBSOCKET_API = 'ws://8.146.211.120:9326'
# system name
-VUE_APP_SYSTEM_NAME = 'DD STORE'
+VUE_APP_SYSTEM_NAME = '小红书社区后台管理系统'
+VUE_APP_SYSTEM_LOGO = 'logo.png'
diff --git a/web/src/api/business/chat/chat.js b/web/src/api/business/chat/chat.js
index 1ab7247..985ebb2 100644
--- a/web/src/api/business/chat/chat.js
+++ b/web/src/api/business/chat/chat.js
@@ -54,3 +54,24 @@ export function getAuthorChat(params) {
params
})
}
+
+
+export function getUnReadCount() {
+ return request({
+ url: '/admin/chat/getUnReadCount',
+ method: 'get',
+ })
+}
+
+
+
+export function readAuthorMessage(data) {
+ return request({
+ url: '/admin/chat/readAuthorMessage',
+ method: 'post',
+ data: data,
+ noLoading:true
+ })
+}
+
+
diff --git a/web/src/api/websocket.js b/web/src/api/websocket.js
index e3489ef..24457c1 100644
--- a/web/src/api/websocket.js
+++ b/web/src/api/websocket.js
@@ -1,3 +1,5 @@
+import {error} from "@/utils";
+
class WebSocketManager {
constructor() {
this.webSocketInstance = null; // WebSocket实例对象,使用更清晰的命名
@@ -32,6 +34,16 @@ class WebSocketManager {
}
console.log("连接WebSocket");
this.webSocketInstance = new WebSocket(url);
+
+ const timeoutTimer = setTimeout(() => {
+ console.log(this.isConnected)
+ if (!this.isConnected) {
+ error("WebSocket连接超时")
+ }
+ clearTimeout(timeoutTimer)
+ }, 5000);
+
+
this.webSocketInstance.onmessage = (event) => {
const data = event.data;
if (data === 'pong') {
@@ -53,6 +65,8 @@ class WebSocketManager {
console.log("WebSocket连接成功");
this.isConnected = true;
this.heartbeatCheck.start();
+
+ this.onConnectCallback && this.onConnectCallback();
};
// 连接发生错误的回调方法
diff --git a/web/src/assets/logo.png b/web/src/assets/logo.png
index 8bd7972..c828d68 100644
Binary files a/web/src/assets/logo.png and b/web/src/assets/logo.png differ
diff --git a/web/src/layout/components/Navbar.vue b/web/src/layout/components/Navbar.vue
index 0bb8386..1a955b8 100644
--- a/web/src/layout/components/Navbar.vue
+++ b/web/src/layout/components/Navbar.vue
@@ -4,9 +4,6 @@