From f9d94b2e60d706d73722826cbc495607b6a767c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=B9=E9=B9=8F=E9=A3=9E?= Date: Thu, 28 Aug 2025 14:44:58 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20bug-632=20=E8=A7=86=E9=A2=91=E9=80=9A?= =?UTF-8?q?=E8=AF=9D=E9=80=BB=E8=BE=91=E8=B0=83=E6=95=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/controller/TicketController.java | 25 +------ .../admin/event/TicketCallEndEvent.java | 69 ++++++++++++++----- .../admin/listener/TicketEventListener.java | 12 ++-- .../cfs/controller/TicketController.java | 25 +------ .../cfs/event/TicketCallEndEvent.java | 69 ++++++++++++++----- .../cfs/listener/TicketEventListener.java | 12 ++-- 6 files changed, 120 insertions(+), 92 deletions(-) diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/TicketController.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/TicketController.java index 40415826..43953f81 100644 --- a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/TicketController.java +++ b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/TicketController.java @@ -1488,30 +1488,7 @@ public class TicketController extends ControllerBase { } else { stringRedisTemplate.opsForSet().remove(Constant.REDIS_KEY_TICKET_CALL_WAIT + request.getTicketId(), Constant.FROM_ADMIN + "-" + AdminUserUtil.getUserId()); } - if (Objects.equals(0L, stringRedisTemplate.opsForSet().size(Constant.REDIS_KEY_TICKET_CALL_WAIT + request.getTicketId()))) { - ShengWangChannelUserListDTO channelUserListDTO = shengWangService.getChannelUsers("ticket" + request.getTicketId()); - if (!channelUserListDTO.isChannelEexist() || channelUserListDTO.getUsers().size() <= 1) { - ssePushService.sendTicketCallEnd(request.getTicketId()); - Integer userId = CollectionUtil.get(channelUserListDTO.getUsers(), 0); - if (Objects.nonNull(userId)) { - String from = userId.toString().startsWith("1") ? "app" : "admin"; - userId = Integer.valueOf(userId.toString().substring(1)); - uniPushService.send(new UniPushMessage() - .setSenderId(from + "-uid-0")//不重要 - .setReceiverId(from + "-uid-" + userId) - .setSendData(new UniPushMessageBody() - .setTitle("视频通话结束") - .setPayload(new UniPushMessageCallPayload() - .setTicketId(request.getTicketId()) - .setUserId(userId) - .setCategory("ticketCallEnd") - .setFrom("admin") - ) - ) - ); - } - } - } + ticketEventPublisher.publishTicketCallEndEvent(request.getTicketId()); return ApiResult.success(); } diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/event/TicketCallEndEvent.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/event/TicketCallEndEvent.java index 01bd8f4c..f1959541 100644 --- a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/event/TicketCallEndEvent.java +++ b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/event/TicketCallEndEvent.java @@ -1,12 +1,22 @@ package com.nflg.mobilebroken.admin.event; +import cn.hutool.core.collection.CollectionUtil; import com.nflg.mobilebroken.admin.service.ShengWangService; import com.nflg.mobilebroken.admin.service.SsePushService; +import com.nflg.mobilebroken.common.constant.Constant; +import com.nflg.mobilebroken.common.constant.TicketState; +import com.nflg.mobilebroken.common.pojo.dto.*; import com.nflg.mobilebroken.repository.service.TicketChatService; +import com.nflg.mobilebroken.starter.service.UniPushService; import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.context.ApplicationEvent; +import org.springframework.data.redis.core.StringRedisTemplate; + +import java.io.IOException; +import java.time.Instant; +import java.util.Objects; public class TicketCallEndEvent extends ApplicationEvent implements ApplicationContextAware { @@ -15,6 +25,8 @@ public class TicketCallEndEvent extends ApplicationEvent implements ApplicationC private SsePushService ssePushService; private TicketChatService ticketChatService; private ShengWangService shengWangService; + private StringRedisTemplate stringRedisTemplate; + private UniPushService uniPushService; public TicketCallEndEvent(Object source, Integer ticketId) { super(source); @@ -26,23 +38,46 @@ public class TicketCallEndEvent extends ApplicationEvent implements ApplicationC this.ssePushService = applicationContext.getBean(SsePushService.class); this.ticketChatService = applicationContext.getBean(TicketChatService.class); this.shengWangService = applicationContext.getBean(ShengWangService.class); + this.stringRedisTemplate = applicationContext.getBean(StringRedisTemplate.class); + this.uniPushService = applicationContext.getBean(UniPushService.class); } -// public void send() throws IOException, InterruptedException { -// TimeUnit.SECONDS.sleep(2); -// if (CollectionUtil.isEmpty(shengWangService.getChannelUsers("ticket-" + ticketId))) { -// ChatMessageDTO message = new ChatMessageDTO() -// .setId(cn.hutool.core.util.IdUtil.getSnowflakeNextIdStr()) -// .setFrom("call") -// .setTicketState(TicketState.Processing.getState()) -// .setSenderId(0) -// .setSenderName("通话助手") -// .setContent("视频通话已结束") -// .setCreateTime(Instant.now()); -// ticketChatService.addMessage(ticketId, message); -// //推送消息 -// ssePushService.sendTicketMessageToAdmin(ticketId, message); -// ssePushService.sendTicketMessageToApp(ticketId, message); -// } -// } + public void send() throws IOException, InterruptedException { + if (Objects.equals(0L, stringRedisTemplate.opsForSet().size(Constant.REDIS_KEY_TICKET_CALL_WAIT + ticketId))) { + ShengWangChannelUserListDTO channelUserListDTO = shengWangService.getChannelUsers("ticket" + ticketId); + if (!channelUserListDTO.isChannelEexist() || channelUserListDTO.getUsers().size() <= 1) { + ChatMessageDTO message = new ChatMessageDTO() + .setId(cn.hutool.core.util.IdUtil.getSnowflakeNextIdStr()) + .setFrom("call") + .setTicketState(TicketState.Processing.getState()) + .setSenderId(0) + .setSenderName("通话助手") + .setContent("视频通话已结束") + .setCreateTime(Instant.now()); + ticketChatService.addMessage(ticketId, message); + //推送消息 + ssePushService.sendTicketMessageToAdmin(ticketId, message); + ssePushService.sendTicketMessageToApp(ticketId, message); + ssePushService.sendTicketCallEnd(ticketId); + Integer userId = CollectionUtil.get(channelUserListDTO.getUsers(), 0); + if (Objects.nonNull(userId)) { + String from = userId.toString().startsWith("1") ? "app" : "admin"; + userId = Integer.valueOf(userId.toString().substring(1)); + uniPushService.send(new UniPushMessage() + .setSenderId(from + "-uid-0")//不重要 + .setReceiverId(from + "-uid-" + userId) + .setSendData(new UniPushMessageBody() + .setTitle("视频通话结束") + .setPayload(new UniPushMessageCallPayload() + .setTicketId(ticketId) + .setUserId(userId) + .setCategory("ticketCallEnd") + .setFrom("admin") + ) + ) + ); + } + } + } + } } \ No newline at end of file diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/listener/TicketEventListener.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/listener/TicketEventListener.java index b9f73f28..a1c714da 100644 --- a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/listener/TicketEventListener.java +++ b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/listener/TicketEventListener.java @@ -5,6 +5,8 @@ import org.springframework.context.event.EventListener; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Component; +import java.io.IOException; + @Component public class TicketEventListener { @@ -38,9 +40,9 @@ public class TicketEventListener { event.send(); } -// @Async -// @EventListener -// public void handleTicketCallEndEvent(TicketCallEndEvent event) throws IOException, InterruptedException { -// event.send(); -// } + @Async + @EventListener + public void handleTicketCallEndEvent(TicketCallEndEvent event) throws IOException, InterruptedException { + event.send(); + } } diff --git a/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/controller/TicketController.java b/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/controller/TicketController.java index f90e659f..27d4c1d3 100644 --- a/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/controller/TicketController.java +++ b/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/controller/TicketController.java @@ -664,30 +664,7 @@ public class TicketController extends ControllerBase { } else { stringRedisTemplate.opsForSet().remove(Constant.REDIS_KEY_TICKET_CALL_WAIT + request.getTicketId(), Constant.FROM_APP + "-" + AppUserUtil.getUserId()); } - if (Objects.equals(0L, stringRedisTemplate.opsForSet().size(Constant.REDIS_KEY_TICKET_CALL_WAIT + request.getTicketId()))) { - ShengWangChannelUserListDTO channelUserListDTO = shengWangService.getChannelUsers("ticket" + request.getTicketId()); - if (!channelUserListDTO.isChannelEexist() || channelUserListDTO.getUsers().size() <= 1) { - ssePushService.sendTicketCallEnd(request.getTicketId()); - Integer userId = CollectionUtil.get(channelUserListDTO.getUsers(), 0); - if (Objects.nonNull(userId)) { - String from = userId.toString().startsWith("1") ? "app" : "admin"; - userId = Integer.valueOf(userId.toString().substring(1)); - uniPushService.send(new UniPushMessage() - .setSenderId(from + "-uid-0")//不重要 - .setReceiverId(from + "-uid-" + userId) - .setSendData(new UniPushMessageBody() - .setTitle("视频通话结束") - .setPayload(new UniPushMessageCallPayload() - .setTicketId(request.getTicketId()) - .setUserId(userId) - .setCategory("ticketCallEnd") - .setFrom("app") - ) - ) - ); - } - } - } + ticketEventPublisher.publishTicketCallEndEvent(request.getTicketId()); return ApiResult.success(); } diff --git a/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/event/TicketCallEndEvent.java b/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/event/TicketCallEndEvent.java index 2f0da567..f91b7a6a 100644 --- a/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/event/TicketCallEndEvent.java +++ b/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/event/TicketCallEndEvent.java @@ -1,12 +1,22 @@ package com.nflg.mobilebroken.cfs.event; +import cn.hutool.core.collection.CollectionUtil; import com.nflg.mobilebroken.cfs.service.ShengWangService; import com.nflg.mobilebroken.cfs.service.SsePushService; +import com.nflg.mobilebroken.common.constant.Constant; +import com.nflg.mobilebroken.common.constant.TicketState; +import com.nflg.mobilebroken.common.pojo.dto.*; import com.nflg.mobilebroken.repository.service.TicketChatService; +import com.nflg.mobilebroken.starter.service.UniPushService; import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.context.ApplicationEvent; +import org.springframework.data.redis.core.StringRedisTemplate; + +import java.io.IOException; +import java.time.Instant; +import java.util.Objects; public class TicketCallEndEvent extends ApplicationEvent implements ApplicationContextAware { @@ -15,6 +25,8 @@ public class TicketCallEndEvent extends ApplicationEvent implements ApplicationC private SsePushService ssePushService; private TicketChatService ticketChatService; private ShengWangService shengWangService; + private StringRedisTemplate stringRedisTemplate; + private UniPushService uniPushService; public TicketCallEndEvent(Object source,Integer ticketId) { super(source); @@ -26,23 +38,46 @@ public class TicketCallEndEvent extends ApplicationEvent implements ApplicationC this.ssePushService = applicationContext.getBean(SsePushService.class); this.ticketChatService = applicationContext.getBean(TicketChatService.class); this.shengWangService = applicationContext.getBean(ShengWangService.class); + this.stringRedisTemplate = applicationContext.getBean(StringRedisTemplate.class); + this.uniPushService = applicationContext.getBean(UniPushService.class); } -// public void send() throws IOException, InterruptedException { -// TimeUnit.SECONDS.sleep(2); -// if (CollectionUtil.isEmpty(shengWangService.getChannelUsers("ticket-" + ticketId))) { -// ChatMessageDTO message = new ChatMessageDTO() -// .setId(cn.hutool.core.util.IdUtil.getSnowflakeNextIdStr()) -// .setFrom("call") -// .setTicketState(TicketState.Processing.getState()) -// .setSenderId(0) -// .setSenderName("通话助手") -// .setContent("视频通话已结束") -// .setCreateTime(Instant.now()); -// ticketChatService.addMessage(ticketId, message); -// //推送消息 -// ssePushService.sendTicketMessageToAdmin(ticketId, message); -// ssePushService.sendTicketMessageToApp(ticketId, message); -// } -// } + public void send() throws IOException, InterruptedException { + if (Objects.equals(0L, stringRedisTemplate.opsForSet().size(Constant.REDIS_KEY_TICKET_CALL_WAIT + ticketId))) { + ShengWangChannelUserListDTO channelUserListDTO = shengWangService.getChannelUsers("ticket" + ticketId); + if (!channelUserListDTO.isChannelEexist() || channelUserListDTO.getUsers().size() <= 1) { + ChatMessageDTO message = new ChatMessageDTO() + .setId(cn.hutool.core.util.IdUtil.getSnowflakeNextIdStr()) + .setFrom("call") + .setTicketState(TicketState.Processing.getState()) + .setSenderId(0) + .setSenderName("通话助手") + .setContent("视频通话已结束") + .setCreateTime(Instant.now()); + ticketChatService.addMessage(ticketId, message); + //推送消息 + ssePushService.sendTicketMessageToAdmin(ticketId, message); + ssePushService.sendTicketMessageToApp(ticketId, message); + ssePushService.sendTicketCallEnd(ticketId); + Integer userId = CollectionUtil.get(channelUserListDTO.getUsers(), 0); + if (Objects.nonNull(userId)) { + String from = userId.toString().startsWith("1") ? "app" : "admin"; + userId = Integer.valueOf(userId.toString().substring(1)); + uniPushService.send(new UniPushMessage() + .setSenderId(from + "-uid-0")//不重要 + .setReceiverId(from + "-uid-" + userId) + .setSendData(new UniPushMessageBody() + .setTitle("视频通话结束") + .setPayload(new UniPushMessageCallPayload() + .setTicketId(ticketId) + .setUserId(userId) + .setCategory("ticketCallEnd") + .setFrom("app") + ) + ) + ); + } + } + } + } } \ No newline at end of file diff --git a/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/listener/TicketEventListener.java b/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/listener/TicketEventListener.java index 2582a26f..155755f2 100644 --- a/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/listener/TicketEventListener.java +++ b/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/listener/TicketEventListener.java @@ -5,6 +5,8 @@ import org.springframework.context.event.EventListener; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Component; +import java.io.IOException; + @Component public class TicketEventListener { @@ -44,9 +46,9 @@ public class TicketEventListener { event.send(); } -// @Async -// @EventListener -// public void handleTicketCallEndEvent(TicketCallEndEvent event) throws IOException, InterruptedException { -// event.send(); -// } + @Async + @EventListener + public void handleTicketCallEndEvent(TicketCallEndEvent event) throws IOException, InterruptedException { + event.send(); + } }