From 2bdf00f7f7695ba21095011b37f11fbce2208643 Mon Sep 17 00:00:00 2001 From: wangxulei <727869402@qq.com> Date: Wed, 15 Jan 2025 11:25:49 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E6=8E=A8=E9=80=81=E9=80=BB?= =?UTF-8?q?=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dd/admin/business/api/AuthActionApi.java | 9 ++--- .../notice/controller/NoticeController.java | 13 ++++++- .../dd/admin/business/webSocket/WsConst.java | 34 +++++++++++++++++++ .../GetApiReadCountMessageHandler.java | 4 ++- .../handler/GetReadCountMessageHandler.java | 4 ++- .../webSocket/handler/P2PMessageHandler.java | 2 +- .../handler/ServiceMessageHandler.java | 2 +- 7 files changed, 59 insertions(+), 9 deletions(-) create mode 100644 src/main/java/com/dd/admin/business/webSocket/WsConst.java diff --git a/src/main/java/com/dd/admin/business/api/AuthActionApi.java b/src/main/java/com/dd/admin/business/api/AuthActionApi.java index 774451d..04a6f7d 100644 --- a/src/main/java/com/dd/admin/business/api/AuthActionApi.java +++ b/src/main/java/com/dd/admin/business/api/AuthActionApi.java @@ -49,6 +49,7 @@ import javax.servlet.http.HttpServletRequest; import java.util.List; +import static com.dd.admin.business.webSocket.WsConst.*; import static com.dd.admin.common.consts.XhsConst.TRUE; @ApiModel("用户操作类Api") @RestController @@ -95,7 +96,7 @@ public class AuthActionApi { oneByFollow.setFollowName(follow.getAuthorName()); followService.save(oneByFollow); - TioUtil.sendChatMessageToUser( bootstrap.getServerGroupContext(),author.getAuthorId(),"4",oneByFollow); + TioUtil.sendChatMessageToUser( bootstrap.getServerGroupContext(),author.getAuthorId(),HANDLER_FOLLOW,oneByFollow); }else{ throw new ApiException("已经关注过了~"); } @@ -150,7 +151,7 @@ public class AuthActionApi { upNotesService.save(upNotes); //发送点赞信息 - TioUtil.sendChatMessageToUser( bootstrap.getServerGroupContext(),noteDto.getAuthorId(),"1",upNotes); + TioUtil.sendChatMessageToUser( bootstrap.getServerGroupContext(),noteDto.getAuthorId(),HANDLER_UP,upNotes); }else{ //在则表示取消赞删除数据 @@ -182,7 +183,7 @@ public class AuthActionApi { starNotesService.save(starNotes); //发送点赞信息 - TioUtil.sendChatMessageToUser( bootstrap.getServerGroupContext(),noteDto.getAuthorId(),"2",starNotes); + TioUtil.sendChatMessageToUser( bootstrap.getServerGroupContext(),noteDto.getAuthorId(),HANDLER_STAR,starNotes); }else{ //在则表示取消赞删除数据 starNotesService.removeById(starNotes); @@ -261,7 +262,7 @@ public class AuthActionApi { Reply reply = BeanUtil.copyProperties(replyDto, Reply.class); replyService.save(reply); - TioUtil.sendChatMessageToUser( bootstrap.getServerGroupContext(),reply.getParentAuthorId(),"3",reply); + TioUtil.sendChatMessageToUser( bootstrap.getServerGroupContext(),reply.getParentAuthorId(),HANDLER_REPLY,reply); return ResultBean.success(); } diff --git a/src/main/java/com/dd/admin/business/notice/controller/NoticeController.java b/src/main/java/com/dd/admin/business/notice/controller/NoticeController.java index 7e09264..c14812c 100644 --- a/src/main/java/com/dd/admin/business/notice/controller/NoticeController.java +++ b/src/main/java/com/dd/admin/business/notice/controller/NoticeController.java @@ -7,6 +7,7 @@ import com.dd.admin.business.note.service.NoteService; import com.dd.admin.business.notice.domain.SendNoticeDto; import com.dd.admin.business.receive.entity.Receive; import com.dd.admin.business.receive.service.ReceiveService; +import com.dd.admin.business.webSocket.util.TioUtil; import com.dd.admin.common.exception.ApiException; import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; import org.springframework.web.bind.annotation.*; @@ -27,6 +28,9 @@ import java.util.ArrayList; import java.util.List; import org.springframework.web.bind.annotation.RestController; +import org.tio.websocket.starter.TioWebSocketServerBootstrap; + +import static com.dd.admin.business.webSocket.WsConst.HANDLER_NOTICE_COUNT; /** *
@@ -46,6 +50,9 @@ public class NoticeController { @Autowired ReceiveService receiveService; + @Autowired + private TioWebSocketServerBootstrap bootstrap; + @ApiOperation(value = "通知公告表-添加") @ApiOperationSupport(order = 3) @PostMapping("/admin/notice/sendNotice") @@ -61,7 +68,11 @@ public class NoticeController { receive.setNoticeId(notice.getNoticeId()); receive.setAuthorId(author.getAuthorId()); receive.setAuthorName(author.getAuthorName()); - receiveList.add(receive); + boolean add = receiveList.add(receive); + //给指定用户发送 + if(add){ + TioUtil.sendChatMessageToUser(bootstrap.getServerGroupContext(),author.getAuthorId(),HANDLER_NOTICE_COUNT,receive); + } }); receiveService.saveBatch(receiveList); diff --git a/src/main/java/com/dd/admin/business/webSocket/WsConst.java b/src/main/java/com/dd/admin/business/webSocket/WsConst.java new file mode 100644 index 0000000..1cfd4f6 --- /dev/null +++ b/src/main/java/com/dd/admin/business/webSocket/WsConst.java @@ -0,0 +1,34 @@ +package com.dd.admin.business.webSocket; + +public class WsConst { + + //点赞 + public final static String HANDLER_UP = "1"; + + //收藏 + public final static String HANDLER_STAR = "2"; + + //回复 + public final static String HANDLER_REPLY = "3"; + + //关注 + public final static String HANDLER_FOLLOW = "4"; + + //聊天 + public final static String HANDLER_CHAT = "5"; + + //客服 + public final static String HANDLER_SERVE = "6"; + + //客服 + public final static String HANDLER_READ_CHAT = "7"; + + //客服 + public final static String HANDLER_CHAT_COUNT = "8"; + + //客服 + public final static String HANDLER_TOTAL_COUNT = "9"; + + //客服 + public final static String HANDLER_NOTICE_COUNT = "10"; +} diff --git a/src/main/java/com/dd/admin/business/webSocket/handler/GetApiReadCountMessageHandler.java b/src/main/java/com/dd/admin/business/webSocket/handler/GetApiReadCountMessageHandler.java index b6924ee..0bd41aa 100644 --- a/src/main/java/com/dd/admin/business/webSocket/handler/GetApiReadCountMessageHandler.java +++ b/src/main/java/com/dd/admin/business/webSocket/handler/GetApiReadCountMessageHandler.java @@ -18,6 +18,8 @@ import org.tio.core.ChannelContext; import java.util.Map; +import static com.dd.admin.business.webSocket.WsConst.HANDLER_TOTAL_COUNT; + @Slf4j @Service("9") @@ -49,7 +51,7 @@ public class GetApiReadCountMessageHandler implements MsgHandlerInterface { UnReadCountBean unReadCountBean = new UnReadCountBean(chatUnReadCount,upNotesUnReadCount,starNotesUnReadCount,replyUnReadCount,followUnReadCount,receiveUnReadCount,totalUnReadCount); unReadCountBean.calculateTotalUnReadCount(); - TioUtil.sendChatMessageToUser(context.getGroupContext(),authorId,"9",unReadCountBean); + TioUtil.sendChatMessageToUser(context.getGroupContext(),authorId,HANDLER_TOTAL_COUNT,unReadCountBean); return null; } } diff --git a/src/main/java/com/dd/admin/business/webSocket/handler/GetReadCountMessageHandler.java b/src/main/java/com/dd/admin/business/webSocket/handler/GetReadCountMessageHandler.java index 36e9a32..0b93b2d 100644 --- a/src/main/java/com/dd/admin/business/webSocket/handler/GetReadCountMessageHandler.java +++ b/src/main/java/com/dd/admin/business/webSocket/handler/GetReadCountMessageHandler.java @@ -11,6 +11,8 @@ import org.tio.core.ChannelContext; import java.util.Map; +import static com.dd.admin.business.webSocket.WsConst.HANDLER_CHAT_COUNT; + @Slf4j @Service("8") @@ -22,7 +24,7 @@ public class GetReadCountMessageHandler implements MsgHandlerInterface { 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); + TioUtil.sendChatMessageToUser(context.getGroupContext(),authorId,HANDLER_CHAT_COUNT,unReadCount); return null; } } diff --git a/src/main/java/com/dd/admin/business/webSocket/handler/P2PMessageHandler.java b/src/main/java/com/dd/admin/business/webSocket/handler/P2PMessageHandler.java index 9c587c0..aa5d9d4 100644 --- a/src/main/java/com/dd/admin/business/webSocket/handler/P2PMessageHandler.java +++ b/src/main/java/com/dd/admin/business/webSocket/handler/P2PMessageHandler.java @@ -1 +1 @@ -package com.dd.admin.business.webSocket.handler; import cn.hutool.core.bean.BeanUtil; import com.dd.admin.business.chat.domain.ChatVo; import com.dd.admin.business.chat.domain.MessageBean; import com.dd.admin.business.chat.entity.Chat; import com.dd.admin.business.chat.service.ChatService; import com.dd.admin.business.webSocket.MsgHandlerInterface; import com.dd.admin.business.webSocket.util.TioUtil; import com.dd.admin.common.utils.AddressUtils; import com.dd.admin.common.utils.HttpContext; import com.dd.admin.common.utils.IPUtils; 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 org.tio.core.Tio; import org.tio.http.common.HttpRequest; import org.tio.utils.lock.SetWithLock; import javax.annotation.PostConstruct; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.*; @Component @Slf4j @Service("5") public class P2PMessageHandler implements MsgHandlerInterface { public static P2PMessageHandler handler; @Autowired ChatService chatService; public static long convertToShanghaiTimeZoneTimestamp(Date createTime) { Calendar calendar = Calendar.getInstance(); calendar.setTime(createTime); calendar.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai")); return calendar.getTimeInMillis(); } @Override public Object handler(Map map, ChannelContext context ){ Chat chat = BeanUtil.toBean(map, Chat.class); chat.setIpAddress(context.getClientNode().getIp()); chat.setIpRealAddress(AddressUtils.getRealAddress(chat.getIpAddress())); //ip真实地址 chatService.save(chat); ChatVo chatVo = chatService.selectChat(chat.getChatId()); if(chat.getToId().equals("8")){ MessageBean messageBean = new MessageBean(); messageBean.setId(chatVo.getChatId()); messageBean.setContent(chatVo.getContent()); messageBean.setSendTime(convertToShanghaiTimeZoneTimestamp(chatVo.getCreateTime())); messageBean.setStatus("succeed"); messageBean.setType("text"); messageBean.setToContactId(chatVo.getFromId()); MessageBean.FromUser fromUser = new MessageBean.FromUser(); fromUser.setAvatar(chatVo.getFromAvatar()); fromUser.setDisplayName(chatVo.getFromName()); fromUser.setId(chatVo.getFromId()); messageBean.setFromUser(fromUser); System.out.println(messageBean); TioUtil.sendChatMessageToUser(context.getGroupContext(),chat.getToId(),"6",messageBean); }else{ TioUtil.sendChatMessageToUser(context.getGroupContext(),chat.getToId(),"5",chatVo); } TioUtil.sendChatMessageToUser(context.getGroupContext(),chat.getFromId(),"5",chatVo); return null; }} \ No newline at end of file +package com.dd.admin.business.webSocket.handler; import cn.hutool.core.bean.BeanUtil; import com.dd.admin.business.chat.domain.ChatVo; import com.dd.admin.business.chat.domain.MessageBean; import com.dd.admin.business.chat.entity.Chat; import com.dd.admin.business.chat.service.ChatService; import com.dd.admin.business.webSocket.MsgHandlerInterface; import com.dd.admin.business.webSocket.util.TioUtil; import com.dd.admin.common.utils.AddressUtils; import com.dd.admin.common.utils.HttpContext; import com.dd.admin.common.utils.IPUtils; 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 org.tio.core.Tio; import org.tio.http.common.HttpRequest; import org.tio.utils.lock.SetWithLock; import javax.annotation.PostConstruct; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.*; import static com.dd.admin.business.webSocket.WsConst.HANDLER_CHAT; import static com.dd.admin.business.webSocket.WsConst.HANDLER_SERVE; @Component @Slf4j @Service("5") public class P2PMessageHandler implements MsgHandlerInterface { public static P2PMessageHandler handler; @Autowired ChatService chatService; public static long convertToShanghaiTimeZoneTimestamp(Date createTime) { Calendar calendar = Calendar.getInstance(); calendar.setTime(createTime); calendar.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai")); return calendar.getTimeInMillis(); } @Override public Object handler(Map map, ChannelContext context ){ Chat chat = BeanUtil.toBean(map, Chat.class); chat.setIpAddress(context.getClientNode().getIp()); chat.setIpRealAddress(AddressUtils.getRealAddress(chat.getIpAddress())); //ip真实地址 chatService.save(chat); ChatVo chatVo = chatService.selectChat(chat.getChatId()); if(chat.getToId().equals("8")){ MessageBean messageBean = new MessageBean(); messageBean.setId(chatVo.getChatId()); messageBean.setContent(chatVo.getContent()); messageBean.setSendTime(convertToShanghaiTimeZoneTimestamp(chatVo.getCreateTime())); messageBean.setStatus("succeed"); messageBean.setType("text"); messageBean.setToContactId(chatVo.getFromId()); MessageBean.FromUser fromUser = new MessageBean.FromUser(); fromUser.setAvatar(chatVo.getFromAvatar()); fromUser.setDisplayName(chatVo.getFromName()); fromUser.setId(chatVo.getFromId()); messageBean.setFromUser(fromUser); System.out.println(messageBean); TioUtil.sendChatMessageToUser(context.getGroupContext(),chat.getToId(),HANDLER_SERVE,messageBean); }else{ TioUtil.sendChatMessageToUser(context.getGroupContext(),chat.getToId(),HANDLER_CHAT,chatVo); } TioUtil.sendChatMessageToUser(context.getGroupContext(),chat.getFromId(),HANDLER_CHAT,chatVo); return null; }} \ No newline at end of file diff --git a/src/main/java/com/dd/admin/business/webSocket/handler/ServiceMessageHandler.java b/src/main/java/com/dd/admin/business/webSocket/handler/ServiceMessageHandler.java index 454c955..745e54c 100644 --- a/src/main/java/com/dd/admin/business/webSocket/handler/ServiceMessageHandler.java +++ b/src/main/java/com/dd/admin/business/webSocket/handler/ServiceMessageHandler.java @@ -1 +1 @@ -package com.dd.admin.business.webSocket.handler; import cn.hutool.core.bean.BeanUtil; import com.dd.admin.business.chat.domain.ChatVo; import com.dd.admin.business.chat.domain.MessageBean; import com.dd.admin.business.chat.entity.Chat; import com.dd.admin.business.chat.service.ChatService; import com.dd.admin.business.webSocket.MsgHandlerInterface; import com.dd.admin.business.webSocket.util.TioUtil; import com.dd.admin.common.utils.AddressUtils; import lombok.extern.slf4j.Slf4j; import org.checkerframework.checker.units.qual.C; 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; @Component @Slf4j @Service("6") public class ServiceMessageHandler implements MsgHandlerInterface { public static ServiceMessageHandler handler; @Autowired ChatService chatService; @Override public Object handler(Map map, ChannelContext context ){ System.out.println(map); MessageBean messageBean = BeanUtil.toBean(map, MessageBean.class); //xx发送人 MessageBean.FromUser fromUser = messageBean.getFromUser(); Chat chat = new Chat(); chat.setFromId(fromUser.getId()); chat.setFromName(fromUser.getDisplayName()); chat.setToId(messageBean.getToContactId()); chat.setContent(messageBean.getContent()); chat.setIpAddress(context.getClientNode().getIp()); chat.setIpRealAddress(AddressUtils.getRealAddress(chat.getIpAddress())); //ip真实地址 chatService.save(chat); ChatVo chatVo = chatService.selectChat(chat.getChatId()); //如果对方是移动端则按照移动端消息格式推送 TioUtil.sendChatMessageToUser(context.getGroupContext(),chat.getToId(),"5",chatVo); //还需要推送给客服自己 // TioUtil.sendChatMessageToUser(context.getGroupContext(),chat.getFromId(),"6",messageBean); return null; }} \ No newline at end of file +package com.dd.admin.business.webSocket.handler; import cn.hutool.core.bean.BeanUtil; import com.dd.admin.business.chat.domain.ChatVo; import com.dd.admin.business.chat.domain.MessageBean; import com.dd.admin.business.chat.entity.Chat; import com.dd.admin.business.chat.service.ChatService; import com.dd.admin.business.webSocket.MsgHandlerInterface; import com.dd.admin.business.webSocket.util.TioUtil; import com.dd.admin.common.utils.AddressUtils; import lombok.extern.slf4j.Slf4j; import org.checkerframework.checker.units.qual.C; 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; import static com.dd.admin.business.webSocket.WsConst.HANDLER_CHAT; @Component @Slf4j @Service("6") public class ServiceMessageHandler implements MsgHandlerInterface { public static ServiceMessageHandler handler; @Autowired ChatService chatService; @Override public Object handler(Map map, ChannelContext context ){ System.out.println(map); MessageBean messageBean = BeanUtil.toBean(map, MessageBean.class); //xx发送人 MessageBean.FromUser fromUser = messageBean.getFromUser(); Chat chat = new Chat(); chat.setFromId(fromUser.getId()); chat.setFromName(fromUser.getDisplayName()); chat.setToId(messageBean.getToContactId()); chat.setContent(messageBean.getContent()); chat.setIpAddress(context.getClientNode().getIp()); chat.setIpRealAddress(AddressUtils.getRealAddress(chat.getIpAddress())); //ip真实地址 chatService.save(chat); ChatVo chatVo = chatService.selectChat(chat.getChatId()); //如果对方是移动端则按照移动端消息格式推送 TioUtil.sendChatMessageToUser(context.getGroupContext(),chat.getToId(),HANDLER_CHAT,chatVo); //还需要推送给客服自己 // TioUtil.sendChatMessageToUser(context.getGroupContext(),chat.getFromId(),"6",messageBean); return null; }} \ No newline at end of file