From e0c62ae8f22ebcc343a3bf77d2d93d1f54c48e8b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=B9=E9=B9=8F=E9=A3=9E?= Date: Wed, 6 Aug 2025 19:21:08 +0800 Subject: [PATCH 1/7] =?UTF-8?q?feat:=20bug-528=20app=E7=AB=AF=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E7=AE=A1=E7=90=86=E5=8A=9F=E8=83=BD=20=E8=B0=83?= =?UTF-8?q?=E6=95=B4=E8=A7=86=E9=A2=91=E9=80=9A=E8=AF=9D=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/controller/TicketController.java | 40 ++++++++++-- .../admin/task/ShengWangScheduledTasks.java | 10 +-- .../cfs/controller/TicketController.java | 17 +++-- .../mobilebroken/push/UserSseEmitter.java | 9 ++- .../push/service/SSEManagerBase.java | 63 ++++++++++--------- .../service/ITicketCallService.java | 2 +- .../impl/TicketCallJoinServiceImpl.java | 8 ++- .../service/impl/TicketCallServiceImpl.java | 9 +-- 8 files changed, 101 insertions(+), 57 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 ffa30458..72a54ddb 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 @@ -745,6 +745,9 @@ public class TicketController extends ControllerBase { .throwMessage("当前工单状态不允许发送消息"); List adminUsers=adminUserService.getTickerMangagers(); adminUsers.addAll(StrUtil.split(ticket.getHandle(),",").stream().map(Integer::parseInt).collect(Collectors.toList())); + if (StrUtil.equals(Constant.FROM_ADMIN,ticket.getUserPlatform())){ + adminUsers.add(ticket.getUserId()); + } VUtils.trueThrowBusinessError(adminUsers.stream() .noneMatch(uid -> Objects.equals(uid, AdminUserUtil.getUserId()))) .throwMessage("你无权发送消息"); @@ -1246,13 +1249,33 @@ public class TicketController extends ControllerBase { VUtils.trueThrowBusinessError(!Objects.equals(ticket.getState(), TicketState.Processing.getState())) .throwMessage("当前工单状态不允许请求通话"); Integer handlerUserId = Arrays.stream(ticket.getHandle().split(",")).map(Integer::parseInt).findFirst().get(); - VUtils.trueThrowBusinessError(!Objects.equals(AdminUserUtil.getUserId(), handlerUserId)) - .throwMessage("不是工单主负责人无权限呼叫"); + if (StrUtil.equals(Constant.FROM_APP,ticket.getUserPlatform())) { + VUtils.trueThrowBusinessError(!Objects.equals(AdminUserUtil.getUserId(), handlerUserId)) + .throwMessage("不是工单主负责人无权限呼叫"); + }else { + VUtils.trueThrowBusinessError(!Objects.equals(ticket.getUserId(), AdminUserUtil.getUserId()) && !Objects.equals(AdminUserUtil.getUserId(), handlerUserId)) + .throwMessage("无权限呼叫"); + } VUtils.trueThrowBusinessError(ticketCallService.isInCall(ticket.getUserId())).throwMessage("对方正在通话中"); + boolean userIdCreate=StrUtil.equals(ticket.getUserPlatform(),Constant.FROM_ADMIN) && Objects.equals(ticket.getUserId(), AdminUserUtil.getUserId()); + Integer sendUserId=0,receiveUserId=0; + String sendUserFrom,receiveUserFrom; + if (userIdCreate){ + sendUserId=ticket.getUserId(); + receiveUserId=handlerUserId; + sendUserFrom=Constant.FROM_ADMIN; + receiveUserFrom=Constant.FROM_ADMIN; + }else { + sendUserId=handlerUserId; + receiveUserId=ticket.getUserId(); + sendUserFrom=Constant.FROM_ADMIN; + receiveUserFrom=Constant.FROM_APP; + } + ticketCallService.add(ticketId, sendUserId,sendUserFrom, receiveUserId, receiveUserFrom); AdminUser adminUser = adminUserService.getById(handlerUserId); uniPushService.send(new UniPushMessage() .setSenderId("admin-uid-" + handlerUserId) - .setReceiverId("app-uid-" + ticket.getUserId()) + .setReceiverId(ticket.getUserPlatform()+"-uid-" + ticket.getUserId()) .setSendData(new UniPushMessageBody() .setTitle("视频通话") .setContent(adminUser.getUserName() + "请求与您视频通话") @@ -1266,8 +1289,11 @@ public class TicketController extends ControllerBase { ) ) ); - ssePushService.sendTicketCallToApp(adminUser, ticket.getUserId(), ticketId); - ticketCallService.add(ticketId, handlerUserId, ticket.getUserId(), Constant.FROM_ADMIN); + if (StrUtil.equals(Constant.FROM_APP,ticket.getUserPlatform())) { + ssePushService.sendTicketCallToApp(adminUser, ticket.getUserId(), ticketId); + }else { + ssePushService.sendTicketCallToAdmin(adminUser, ticket.getUserId(), ticketId); + } ticketEventPublisher.publishTicketCallBeginEvent(ticketId, adminUser.getUserName()); return ApiResult.success(); } @@ -1326,7 +1352,7 @@ public class TicketController extends ControllerBase { ticketCallJoinService.join(ticketId, AdminUserUtil.getUserId(),Constant.FROM_ADMIN); ssePushService.sendTicketCallJoinedToAdmin(AdminUserUtil.getUserId(), ticketId); uniPushService.send(new UniPushMessage() - .setSenderId("admin-uid-" + AdminUserUtil.getUserId()) + .setSenderId("admin-uid-" + AdminUserUtil.getUserId())//不重要 .setReceiverId("admin-uid-" + AdminUserUtil.getUserId()) .setSendData(new UniPushMessageBody() .setTitle("视频通话") @@ -1351,7 +1377,9 @@ public class TicketController extends ControllerBase { TicketCall ticketCall = ticketCallService.lambdaQuery() .eq(TicketCall::getTicketId, request.getTicketId()) .ne(TicketCall::getState, 2) + .last("limit 1") .one(); + if (Objects.isNull(ticketCall)) return ApiResult.success(); boolean flag=false; if (request.getReject()) { AdminUser adminUser = adminUserService.getById(AdminUserUtil.getUserId()); diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/task/ShengWangScheduledTasks.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/task/ShengWangScheduledTasks.java index ba1283af..7acf0918 100644 --- a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/task/ShengWangScheduledTasks.java +++ b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/task/ShengWangScheduledTasks.java @@ -13,6 +13,7 @@ import com.nflg.mobilebroken.repository.service.ITicketCallService; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.slf4j.MDC; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; @@ -23,6 +24,7 @@ import java.util.List; import java.util.Objects; import java.util.stream.Collectors; +@ConditionalOnProperty(name = "shengwang.sync.enable", havingValue = "true", matchIfMissing = true) @Component @Slf4j public class ShengWangScheduledTasks { @@ -62,7 +64,7 @@ public class ShengWangScheduledTasks { ticketCallService.updateById(ticketCall); ticketCallJoinService.lambdaUpdate() .set(TicketCallJoin::getState, 2) - .set(TicketCallJoin::getHangupTime, LocalDateTime.now()) +// .set(TicketCallJoin::getHangupTime, LocalDateTime.now()) .eq(TicketCallJoin::getCallId, ticketCall.getId()) .update(); }); @@ -80,7 +82,7 @@ public class ShengWangScheduledTasks { if (CollectionUtil.isEmpty(channelUsers)) { ticketCallJoinService.lambdaUpdate() .set(TicketCallJoin::getState, 2) - .set(TicketCallJoin::getHangupTime, LocalDateTime.now()) +// .set(TicketCallJoin::getHangupTime, LocalDateTime.now()) .eq(TicketCallJoin::getCallId, ticketCall.getId()) .update(); } else { @@ -94,7 +96,7 @@ public class ShengWangScheduledTasks { if (CollectionUtil.isNotEmpty(userIds)) { ticketCallJoinService.lambdaUpdate() .set(TicketCallJoin::getState, 2) - .set(TicketCallJoin::getHangupTime, LocalDateTime.now()) +// .set(TicketCallJoin::getHangupTime, LocalDateTime.now()) .eq(TicketCallJoin::getCallId, ticketCall.getId()) .eq(TicketCallJoin::getFrom, Constant.FROM_APP) .notIn(TicketCallJoin::getUserId, userIds) @@ -110,7 +112,7 @@ public class ShengWangScheduledTasks { if (CollectionUtil.isNotEmpty(userIds)) { ticketCallJoinService.lambdaUpdate() .set(TicketCallJoin::getState, 2) - .set(TicketCallJoin::getHangupTime, LocalDateTime.now()) +// .set(TicketCallJoin::getHangupTime, LocalDateTime.now()) .eq(TicketCallJoin::getCallId, ticketCall.getId()) .eq(TicketCallJoin::getFrom, Constant.FROM_ADMIN) .notIn(TicketCallJoin::getUserId, userIds) 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 04807717..b4a7f6c2 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 @@ -507,7 +507,7 @@ public class TicketController extends ControllerBase { VUtils.trueThrowBusinessError(ticketCallService.isInCall(handlerUserId)).throwMessage("对方正在通话中"); AppUser appUser = appUserService.getById(ticket.getUserId()); uniPushService.send(new UniPushMessage() - .setSenderId("app-uid-" + ticket.getUserId()) + .setSenderId(ticket.getUserPlatform()+"-uid-" + ticket.getUserId()) .setReceiverId("admin-uid-" + handlerUserId) .setSendData(new UniPushMessageBody() .setTitle("视频通话") @@ -523,7 +523,7 @@ public class TicketController extends ControllerBase { ) ); ssePushService.sendTicketCallToAdmin(appUser, handlerUserId, ticketId); - ticketCallService.add(ticketId, AppUserUtil.getUserId(), handlerUserId, Constant.FROM_APP); + ticketCallService.add(ticketId, AppUserUtil.getUserId(),Constant.FROM_APP, handlerUserId, Constant.FROM_ADMIN); ticketEventPublisher.publishTicketCallBeginEvent(ticketId,appUser.getName()); return ApiResult.success(); } @@ -538,13 +538,17 @@ public class TicketController extends ControllerBase { VUtils.trueThrowBusinessError(Objects.isNull(ticket)).throwMessage("工单不存在"); VUtils.trueThrowBusinessError(!Objects.equals(ticket.getState(), TicketState.Processing.getState())) .throwMessage("当前工单状态不允许通话"); + VUtils.trueThrowBusinessError(!StrUtil.equals(ticket.getUserPlatform(), AppUserUtil.getFrom()) + || Objects.equals(AppUserUtil.getUserId(), ticket.getUserId())) + .throwMessage("不是创建人无法加入通话"); VUtils.trueThrowBusinessError(ticketCallService.isInCall(AppUserUtil.getUserId())) .throwMessage("您已加入别的通话中"); ticketCallJoinService.join(ticketId, AppUserUtil.getUserId(), Constant.FROM_APP); ssePushService.sendTicketCallJoinedToApp(AppUserUtil.getUserId(), ticketId); + Integer handlerUserId = Arrays.stream(ticket.getHandle().split(",")).map(Integer::parseInt).findFirst().get(); uniPushService.send(new UniPushMessage() - .setSenderId("app-uid-" + AppUserUtil.getUserId()) - .setReceiverId("app-uid-" + AppUserUtil.getUserId()) + .setSenderId(ticket.getUserPlatform()+"-uid-" + ticket.getUserId()) + .setReceiverId("admin-uid-" + handlerUserId) .setSendData(new UniPushMessageBody() .setTitle("视频通话") .setContent("您已加入别的通话中") @@ -572,7 +576,7 @@ public class TicketController extends ControllerBase { Ticket ticket = ticketService.getById(request.getTicketId()); int handlerId= Integer.parseInt(StrUtil.split(ticket.getHandle(), ",").stream().findFirst().get()); uniPushService.send(new UniPushMessage() - .setSenderId("app-uid-" + appUser.getId()) + .setSenderId(ticket.getUserPlatform()+"-uid-" + appUser.getId()) .setReceiverId("admin-uid-" + handlerId) .setSendData(new UniPushMessageBody() .setTitle("挂断视频通话") @@ -591,8 +595,9 @@ public class TicketController extends ControllerBase { flag=ticketCallService.hangUp(request.getTicketId(), AppUserUtil.getUserId(), Constant.FROM_APP, true); }else { AppUser appUser = appUserService.getById(AppUserUtil.getUserId()); + Ticket ticket = ticketService.getById(request.getTicketId()); uniPushService.send(new UniPushMessage() - .setSenderId("app-uid-" + appUser.getId()) + .setSenderId(ticket.getUserPlatform()+"-uid-" + appUser.getId()) .setReceiverId("admin-uid-" + request.getFromUserId()) .setSendData(new UniPushMessageBody() .setTitle("拒绝视频通话") diff --git a/nflg-mobilebroken-push/src/main/java/com/nflg/mobilebroken/push/UserSseEmitter.java b/nflg-mobilebroken-push/src/main/java/com/nflg/mobilebroken/push/UserSseEmitter.java index 55290553..1a9764e1 100644 --- a/nflg-mobilebroken-push/src/main/java/com/nflg/mobilebroken/push/UserSseEmitter.java +++ b/nflg-mobilebroken-push/src/main/java/com/nflg/mobilebroken/push/UserSseEmitter.java @@ -1,5 +1,6 @@ package com.nflg.mobilebroken.push; +import cn.hutool.core.util.IdUtil; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; @@ -22,6 +23,8 @@ public class UserSseEmitter extends SseEmitter { private Integer ticketId; + private String id = IdUtil.getSnowflakeNextIdStr(); + private ScheduledFuture heartbeatFuture; public UserSseEmitter(){ @@ -34,8 +37,8 @@ public class UserSseEmitter extends SseEmitter { this.ticketId = ticketId; } - public String getUser(){ - return from + "-" + userId; + public String getLable() { + return from + "-" + userId + ",连接id:" + id; } public void startHeartbeat(TaskScheduler taskScheduler) { @@ -44,7 +47,7 @@ public class UserSseEmitter extends SseEmitter { send(SseEmitter.event().data("ping")); } catch (IOException e) { heartbeatFuture.cancel(true); - log.error("sse发送ping数据出错({}):{}", getUser(),e.getMessage()); + log.error("sse发送ping数据出错({}):{}", getLable(),e.getMessage()); completeWithError(e); } }, 30_000); diff --git a/nflg-mobilebroken-push/src/main/java/com/nflg/mobilebroken/push/service/SSEManagerBase.java b/nflg-mobilebroken-push/src/main/java/com/nflg/mobilebroken/push/service/SSEManagerBase.java index 8b3c682e..fe8f9c2f 100644 --- a/nflg-mobilebroken-push/src/main/java/com/nflg/mobilebroken/push/service/SSEManagerBase.java +++ b/nflg-mobilebroken-push/src/main/java/com/nflg/mobilebroken/push/service/SSEManagerBase.java @@ -34,53 +34,53 @@ public class SSEManagerBase { protected String from; - protected void check(){ - VUtils.trueThrow(IS_SHUTDOWN).throwMessage(STATE.ServiceConnectRefused,"SSE服务已关闭"); + protected void check() { + VUtils.trueThrow(IS_SHUTDOWN).throwMessage(STATE.ServiceConnectRefused, "SSE服务已关闭"); } @PreDestroy protected void shutdown() { - IS_SHUTDOWN=true; + IS_SHUTDOWN = true; log.warn("准备关闭SSE服务"); - SSE_EMITTERS.forEach(emitter->{ + SSE_EMITTERS.forEach(emitter -> { try { emitter.send("因SSE服务关闭,连接即将断开"); emitter.complete(); - }catch (Exception ex){ - log.error("SSE发送消息失败",ex); + } catch (Exception ex) { + log.error("SSE发送消息失败", ex); emitter.completeWithError(ex); } }); log.warn("SSE服务已关闭"); } - protected SseEmitter connect(Integer ticketId,Integer userId) { + protected SseEmitter connect(Integer ticketId, Integer userId) { check(); - log.info(from + "SSE连接:用户id:" + userId + ",工单id:" + ticketId); UserSseEmitter emitter = new UserSseEmitter(from, userId, ticketId); + log.info(from + "SSE连接:用户id:" + userId + ",工单id:" + ticketId + ",连接id:" + emitter.getId()); emitter.startHeartbeat(taskScheduler); SSE_EMITTERS.add(emitter); emitter.onError((ex) -> { remove(emitter); - log.error("SSE异常({}):{}", ex.getMessage(),emitter.getUser()); + log.error("SSE异常({}):{}", ex.getMessage(), emitter.getLable()); }); emitter.onTimeout(() -> { remove(emitter); - log.error("SSE超时:"+userId); + log.error("SSE超时:" + userId); }); emitter.onCompletion(() -> { remove(emitter); - log.error("SSE完成:"+userId); + log.error("SSE完成:" + userId); }); try { + log.info("发送连接成功信息:" + emitter.getLable()); emitter.send(SseEmitter.event().data("已连接").reconnectTime(5000)); - }catch (ClientAbortException e){ - log.error("客户端断开连接:{}", userId); - emitter.completeWithError(e); - } - catch (IOException e) { + } catch (ClientAbortException e) { + log.error("断开已连接:{}", e.getMessage()); + emitter.complete(); + } catch (IOException e) { log.error("sse发送数据出错:{}", e.getMessage()); - emitter.completeWithError(e); + emitter.complete(); } return emitter; } @@ -90,19 +90,21 @@ public class SSEManagerBase { List emitters = SSE_EMITTERS.stream() .filter(s -> Objects.equals(s.getTicketId(), ticketId)) .collect(Collectors.toList()); - if (CollectionUtil.isEmpty(emitters)){ + if (CollectionUtil.isEmpty(emitters)) { log.info(StrUtil.format(from + "没有用户连接工单:{}", ticketId)); return; } emitters.forEach(emitter -> { try { + log.info("发送给用户:" + emitter.getLable()); emitter.send(SseEmitter.event().name(dto.getType()).data(dto.getData())); + log.info("发送成功"); } catch (ClientAbortException e) { - log.error("客户端断开连接:{}", emitter.getUser()); - emitter.completeWithError(e); + log.error("发送失败,{}", e.getMessage()); + emitter.complete(); } catch (IOException e) { - log.error("sse发送数据出错:{}", e.getMessage()); - emitter.completeWithError(e); + log.error("发送失败,sse发送数据出错:{}", e.getMessage()); + emitter.complete(); } }); } @@ -118,21 +120,22 @@ public class SSEManagerBase { } emitters.forEach(emitter -> { try { + log.info("发送给用户:" + emitter.getLable()); emitter.send(SseEmitter.event().name(dto.getType()).data(dto.getData())); log.info("发送成功"); - } catch (ClientAbortException e) { - log.error("客户端断开连接:{}", emitter.getUser()); - emitter.completeWithError(e); - }catch (IOException e) { - log.error("sse发送数据出错:{}", e.getMessage()); - emitter.completeWithError(e); + } catch (ClientAbortException e) { + log.error("发送失败,{}", e.getMessage()); + emitter.complete(); + } catch (IOException e) { + log.error("发送失败,sse发送数据出错:{}", e.getMessage()); + emitter.complete(); } }); } - private void remove(UserSseEmitter emitter){ + private void remove(UserSseEmitter emitter) { SSE_EMITTERS.remove(emitter); emitter.complete(); - emitter=null; + emitter = null; } } \ No newline at end of file diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/ITicketCallService.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/ITicketCallService.java index fe460741..f5a8f05d 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/ITicketCallService.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/ITicketCallService.java @@ -17,7 +17,7 @@ public interface ITicketCallService extends IService { boolean isInCall(Integer userId); - void add(Integer ticketId, Integer callerUserId, Integer calledUserId, String from); + void add(Integer ticketId, Integer callerUserId,String callerUserFrom, Integer calledUserId, String calledUserFrom); boolean hangUp(@NotNull Integer ticketId, Integer userId, String from, boolean reject); } diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/TicketCallJoinServiceImpl.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/TicketCallJoinServiceImpl.java index 22f47fd9..1e463ea0 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/TicketCallJoinServiceImpl.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/TicketCallJoinServiceImpl.java @@ -41,6 +41,7 @@ public class TicketCallJoinServiceImpl extends ServiceImpl Date: Thu, 7 Aug 2025 10:56:54 +0800 Subject: [PATCH 2/7] =?UTF-8?q?feat:=20bug-528=20app=E7=AB=AF=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E7=AE=A1=E7=90=86=E5=8A=9F=E8=83=BD=20=E8=B0=83?= =?UTF-8?q?=E6=95=B4=E8=A7=86=E9=A2=91=E9=80=9A=E8=AF=9D=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/controller/TicketController.java | 44 +++++++++---------- 1 file changed, 22 insertions(+), 22 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 72a54ddb..7dd8730e 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 @@ -1249,33 +1249,33 @@ public class TicketController extends ControllerBase { VUtils.trueThrowBusinessError(!Objects.equals(ticket.getState(), TicketState.Processing.getState())) .throwMessage("当前工单状态不允许请求通话"); Integer handlerUserId = Arrays.stream(ticket.getHandle().split(",")).map(Integer::parseInt).findFirst().get(); - if (StrUtil.equals(Constant.FROM_APP,ticket.getUserPlatform())) { + if (StrUtil.equals(Constant.FROM_APP, ticket.getUserPlatform())) { VUtils.trueThrowBusinessError(!Objects.equals(AdminUserUtil.getUserId(), handlerUserId)) .throwMessage("不是工单主负责人无权限呼叫"); - }else { + } else { VUtils.trueThrowBusinessError(!Objects.equals(ticket.getUserId(), AdminUserUtil.getUserId()) && !Objects.equals(AdminUserUtil.getUserId(), handlerUserId)) .throwMessage("无权限呼叫"); } VUtils.trueThrowBusinessError(ticketCallService.isInCall(ticket.getUserId())).throwMessage("对方正在通话中"); - boolean userIdCreate=StrUtil.equals(ticket.getUserPlatform(),Constant.FROM_ADMIN) && Objects.equals(ticket.getUserId(), AdminUserUtil.getUserId()); - Integer sendUserId=0,receiveUserId=0; - String sendUserFrom,receiveUserFrom; - if (userIdCreate){ - sendUserId=ticket.getUserId(); - receiveUserId=handlerUserId; - sendUserFrom=Constant.FROM_ADMIN; - receiveUserFrom=Constant.FROM_ADMIN; - }else { - sendUserId=handlerUserId; - receiveUserId=ticket.getUserId(); - sendUserFrom=Constant.FROM_ADMIN; - receiveUserFrom=Constant.FROM_APP; + boolean userIdCreate = StrUtil.equals(ticket.getUserPlatform(), Constant.FROM_ADMIN) && Objects.equals(ticket.getUserId(), AdminUserUtil.getUserId()); + Integer sendUserId = 0, receiveUserId = 0; + String sendUserFrom, receiveUserFrom; + if (userIdCreate) { + sendUserId = ticket.getUserId(); + receiveUserId = handlerUserId; + sendUserFrom = Constant.FROM_ADMIN; + receiveUserFrom = Constant.FROM_ADMIN; + } else { + sendUserId = handlerUserId; + receiveUserId = ticket.getUserId(); + sendUserFrom = Constant.FROM_ADMIN; + receiveUserFrom = Constant.FROM_APP; } - ticketCallService.add(ticketId, sendUserId,sendUserFrom, receiveUserId, receiveUserFrom); - AdminUser adminUser = adminUserService.getById(handlerUserId); + ticketCallService.add(ticketId, sendUserId, sendUserFrom, receiveUserId, receiveUserFrom); + AdminUser adminUser = adminUserService.getById(sendUserId); uniPushService.send(new UniPushMessage() - .setSenderId("admin-uid-" + handlerUserId) - .setReceiverId(ticket.getUserPlatform()+"-uid-" + ticket.getUserId()) + .setSenderId("admin-uid-" + sendUserId) + .setReceiverId(receiveUserFrom + "-uid-" + receiveUserId) .setSendData(new UniPushMessageBody() .setTitle("视频通话") .setContent(adminUser.getUserName() + "请求与您视频通话") @@ -1289,10 +1289,10 @@ public class TicketController extends ControllerBase { ) ) ); - if (StrUtil.equals(Constant.FROM_APP,ticket.getUserPlatform())) { + if (StrUtil.equals(Constant.FROM_APP, ticket.getUserPlatform())) { ssePushService.sendTicketCallToApp(adminUser, ticket.getUserId(), ticketId); - }else { - ssePushService.sendTicketCallToAdmin(adminUser, ticket.getUserId(), ticketId); + } else { + ssePushService.sendTicketCallToAdmin(adminUser, receiveUserId, ticketId); } ticketEventPublisher.publishTicketCallBeginEvent(ticketId, adminUser.getUserName()); return ApiResult.success(); From e32b3964f1d927e1a68349f0070f9d01ab4b0763 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=B9=E9=B9=8F=E9=A3=9E?= Date: Thu, 7 Aug 2025 14:43:03 +0800 Subject: [PATCH 3/7] =?UTF-8?q?feat:=20bug-528=20app=E7=AB=AF=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E7=AE=A1=E7=90=86=E5=8A=9F=E8=83=BD=20=E8=B0=83?= =?UTF-8?q?=E6=95=B4=E8=A7=86=E9=A2=91=E9=80=9A=E8=AF=9D=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/nflg/mobilebroken/cfs/controller/TicketController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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 b4a7f6c2..739f072d 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 @@ -539,7 +539,7 @@ public class TicketController extends ControllerBase { VUtils.trueThrowBusinessError(!Objects.equals(ticket.getState(), TicketState.Processing.getState())) .throwMessage("当前工单状态不允许通话"); VUtils.trueThrowBusinessError(!StrUtil.equals(ticket.getUserPlatform(), AppUserUtil.getFrom()) - || Objects.equals(AppUserUtil.getUserId(), ticket.getUserId())) + || !Objects.equals(AppUserUtil.getUserId(), ticket.getUserId())) .throwMessage("不是创建人无法加入通话"); VUtils.trueThrowBusinessError(ticketCallService.isInCall(AppUserUtil.getUserId())) .throwMessage("您已加入别的通话中"); From 1c64a3043075f11fc7543ee0839fcda07e1f410d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=B9=E9=B9=8F=E9=A3=9E?= Date: Thu, 7 Aug 2025 15:17:32 +0800 Subject: [PATCH 4/7] =?UTF-8?q?feat:=20bug-528=20app=E7=AB=AF=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E7=AE=A1=E7=90=86=E5=8A=9F=E8=83=BD=20=E8=B0=83?= =?UTF-8?q?=E6=95=B4=E8=A7=86=E9=A2=91=E9=80=9A=E8=AF=9D=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cfs/controller/TicketController.java | 6 ++++-- .../repository/service/ITicketCallService.java | 2 ++ .../service/impl/TicketCallJoinServiceImpl.java | 7 ++----- .../service/impl/TicketCallServiceImpl.java | 16 +++++++++++----- 4 files changed, 19 insertions(+), 12 deletions(-) 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 739f072d..097e6588 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 @@ -571,6 +571,8 @@ public class TicketController extends ControllerBase { public ApiResult hangUp(@Valid @RequestBody TicketCallHangUpRequest request) { boolean flag=false; if (request.getReject()) { + TicketCall ticketCall = ticketCallService.getLast(request.getTicketId()); + if (Objects.isNull(ticketCall)) return ApiResult.success(); if (StrUtil.equals(request.getFrom(), Constant.FROM_APP) && Objects.equals(AppUserUtil.getUserId(), request.getFromUserId())) { AppUser appUser = appUserService.getById(AppUserUtil.getUserId()); Ticket ticket = ticketService.getById(request.getTicketId()); @@ -592,7 +594,7 @@ public class TicketController extends ControllerBase { ) ); ssePushService.sendTicketCallCancelToAdmin(request.getTicketId(), handlerId, appUser); - flag=ticketCallService.hangUp(request.getTicketId(), AppUserUtil.getUserId(), Constant.FROM_APP, true); + flag = ticketCallService.hangUp(ticketCall.getId(), AppUserUtil.getUserId(), Constant.FROM_APP, true); }else { AppUser appUser = appUserService.getById(AppUserUtil.getUserId()); Ticket ticket = ticketService.getById(request.getTicketId()); @@ -613,7 +615,7 @@ public class TicketController extends ControllerBase { ) ); ssePushService.sendTicketCallHangUpToAdmin(request.getTicketId(), request.getFromUserId(), appUser); - flag=ticketCallJoinService.hangUp(request.getTicketId(), AppUserUtil.getUserId(), Constant.FROM_APP, true); + flag = ticketCallJoinService.hangUp(ticketCall.getId(), AppUserUtil.getUserId(), Constant.FROM_APP, true); } } if (flag){ diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/ITicketCallService.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/ITicketCallService.java index f5a8f05d..e7c7eb77 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/ITicketCallService.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/ITicketCallService.java @@ -20,4 +20,6 @@ public interface ITicketCallService extends IService { void add(Integer ticketId, Integer callerUserId,String callerUserFrom, Integer calledUserId, String calledUserFrom); boolean hangUp(@NotNull Integer ticketId, Integer userId, String from, boolean reject); + + TicketCall getLast(@NotNull Integer ticketId); } diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/TicketCallJoinServiceImpl.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/TicketCallJoinServiceImpl.java index 1e463ea0..86850abe 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/TicketCallJoinServiceImpl.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/TicketCallJoinServiceImpl.java @@ -38,11 +38,7 @@ public class TicketCallJoinServiceImpl extends ServiceImpl Date: Thu, 7 Aug 2025 15:40:59 +0800 Subject: [PATCH 5/7] =?UTF-8?q?feat:=20bug-528=20app=E7=AB=AF=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E7=AE=A1=E7=90=86=E5=8A=9F=E8=83=BD=20=E8=B0=83?= =?UTF-8?q?=E6=95=B4=E8=A7=86=E9=A2=91=E9=80=9A=E8=AF=9D=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cfs/controller/TicketController.java | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) 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 097e6588..5e350dd6 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 @@ -569,16 +569,15 @@ public class TicketController extends ControllerBase { */ @PostMapping("call/hangUp") public ApiResult hangUp(@Valid @RequestBody TicketCallHangUpRequest request) { - boolean flag=false; + TicketCall ticketCall = ticketCallService.getLast(request.getTicketId()); if (request.getReject()) { - TicketCall ticketCall = ticketCallService.getLast(request.getTicketId()); if (Objects.isNull(ticketCall)) return ApiResult.success(); if (StrUtil.equals(request.getFrom(), Constant.FROM_APP) && Objects.equals(AppUserUtil.getUserId(), request.getFromUserId())) { AppUser appUser = appUserService.getById(AppUserUtil.getUserId()); Ticket ticket = ticketService.getById(request.getTicketId()); - int handlerId= Integer.parseInt(StrUtil.split(ticket.getHandle(), ",").stream().findFirst().get()); + int handlerId = Integer.parseInt(StrUtil.split(ticket.getHandle(), ",").stream().findFirst().get()); uniPushService.send(new UniPushMessage() - .setSenderId(ticket.getUserPlatform()+"-uid-" + appUser.getId()) + .setSenderId(ticket.getUserPlatform() + "-uid-" + appUser.getId()) .setReceiverId("admin-uid-" + handlerId) .setSendData(new UniPushMessageBody() .setTitle("挂断视频通话") @@ -594,12 +593,11 @@ public class TicketController extends ControllerBase { ) ); ssePushService.sendTicketCallCancelToAdmin(request.getTicketId(), handlerId, appUser); - flag = ticketCallService.hangUp(ticketCall.getId(), AppUserUtil.getUserId(), Constant.FROM_APP, true); - }else { + } else { AppUser appUser = appUserService.getById(AppUserUtil.getUserId()); Ticket ticket = ticketService.getById(request.getTicketId()); uniPushService.send(new UniPushMessage() - .setSenderId(ticket.getUserPlatform()+"-uid-" + appUser.getId()) + .setSenderId(ticket.getUserPlatform() + "-uid-" + appUser.getId()) .setReceiverId("admin-uid-" + request.getFromUserId()) .setSendData(new UniPushMessageBody() .setTitle("拒绝视频通话") @@ -615,10 +613,9 @@ public class TicketController extends ControllerBase { ) ); ssePushService.sendTicketCallHangUpToAdmin(request.getTicketId(), request.getFromUserId(), appUser); - flag = ticketCallJoinService.hangUp(ticketCall.getId(), AppUserUtil.getUserId(), Constant.FROM_APP, true); } } - if (flag){ + if (ticketCallJoinService.hangUp(ticketCall.getId(), AppUserUtil.getUserId(), Constant.FROM_APP, true)) { ticketEventPublisher.publishTicketCallEndEvent(request.getTicketId()); } return ApiResult.success(); From 350256014396978bc00d3dcda2c2d659544694a1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=B9=E9=B9=8F=E9=A3=9E?= Date: Thu, 7 Aug 2025 15:54:45 +0800 Subject: [PATCH 6/7] =?UTF-8?q?feat:=20bug-528=20app=E7=AB=AF=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E7=AE=A1=E7=90=86=E5=8A=9F=E8=83=BD=20=E8=B0=83?= =?UTF-8?q?=E6=95=B4=E8=A7=86=E9=A2=91=E9=80=9A=E8=AF=9D=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mobilebroken/cfs/controller/TicketController.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) 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 5e350dd6..d92e5c37 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 @@ -615,7 +615,13 @@ public class TicketController extends ControllerBase { ssePushService.sendTicketCallHangUpToAdmin(request.getTicketId(), request.getFromUserId(), appUser); } } - if (ticketCallJoinService.hangUp(ticketCall.getId(), AppUserUtil.getUserId(), Constant.FROM_APP, true)) { + boolean flag; + if (StrUtil.equals(request.getFrom(), Constant.FROM_APP)) { + flag = ticketCallService.hangUp(ticketCall.getId(), AppUserUtil.getUserId(), Constant.FROM_APP, request.getReject()); + } else { + flag = ticketCallJoinService.hangUp(ticketCall.getId(), AppUserUtil.getUserId(), Constant.FROM_APP, request.getReject()); + } + if (flag) { ticketEventPublisher.publishTicketCallEndEvent(request.getTicketId()); } return ApiResult.success(); From c6328d251de9dec1134f824e919ea3e84ecb98f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=B9=E9=B9=8F=E9=A3=9E?= Date: Thu, 7 Aug 2025 18:46:38 +0800 Subject: [PATCH 7/7] =?UTF-8?q?feat:=20bug-528=20app=E7=AB=AF=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E7=AE=A1=E7=90=86=E5=8A=9F=E8=83=BD=20=E8=B0=83?= =?UTF-8?q?=E6=95=B4=E8=A7=86=E9=A2=91=E9=80=9A=E8=AF=9D=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/controller/TestController.java | 8 +-- .../admin/controller/TicketController.java | 22 ++---- .../cfs/controller/TicketController.java | 12 +--- .../repository/entity/TicketCall.java | 21 +++--- .../mapper/TicketCallJoinMapper.java | 2 +- .../service/ITicketCallJoinService.java | 4 +- .../service/ITicketCallService.java | 4 +- .../impl/TicketCallJoinServiceImpl.java | 21 +++--- .../service/impl/TicketCallServiceImpl.java | 68 ++++++++++--------- .../resources/mapper/TicketCallJoinMapper.xml | 2 +- 10 files changed, 72 insertions(+), 92 deletions(-) diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/TestController.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/TestController.java index 72ba40ee..7d9fba87 100644 --- a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/TestController.java +++ b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/controller/TestController.java @@ -49,10 +49,10 @@ public class TestController extends ControllerBase{ } } - @GetMapping("test") - public ApiResult test(@RequestParam Integer userId){ - return ApiResult.success(ticketCallService.isInCall(userId)); - } +// @GetMapping("test") +// public ApiResult test(@RequestParam Integer userId){ +// return ApiResult.success(ticketCallService.isInCall(userId)); +// } /** * 翻译为日语 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 7dd8730e..ee2bbc34 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 @@ -1256,7 +1256,6 @@ public class TicketController extends ControllerBase { VUtils.trueThrowBusinessError(!Objects.equals(ticket.getUserId(), AdminUserUtil.getUserId()) && !Objects.equals(AdminUserUtil.getUserId(), handlerUserId)) .throwMessage("无权限呼叫"); } - VUtils.trueThrowBusinessError(ticketCallService.isInCall(ticket.getUserId())).throwMessage("对方正在通话中"); boolean userIdCreate = StrUtil.equals(ticket.getUserPlatform(), Constant.FROM_ADMIN) && Objects.equals(ticket.getUserId(), AdminUserUtil.getUserId()); Integer sendUserId = 0, receiveUserId = 0; String sendUserFrom, receiveUserFrom; @@ -1271,6 +1270,7 @@ public class TicketController extends ControllerBase { sendUserFrom = Constant.FROM_ADMIN; receiveUserFrom = Constant.FROM_APP; } + VUtils.trueThrowBusinessError(ticketCallJoinService.isInCall(ticket.getId(), receiveUserFrom, receiveUserId)).throwMessage("对方正在通话中"); ticketCallService.add(ticketId, sendUserId, sendUserFrom, receiveUserId, receiveUserFrom); AdminUser adminUser = adminUserService.getById(sendUserId); uniPushService.send(new UniPushMessage() @@ -1347,7 +1347,7 @@ public class TicketController extends ControllerBase { VUtils.trueThrowBusinessError(Objects.isNull(ticket)).throwMessage("工单不存在"); VUtils.trueThrowBusinessError(!Objects.equals(ticket.getState(), TicketState.Processing.getState())) .throwMessage("当前工单状态不允许请求通话"); - VUtils.trueThrowBusinessError(ticketCallService.isInCall(AdminUserUtil.getUserId())) + VUtils.trueThrowBusinessError(ticketCallJoinService.isInCall(ticket.getId(), Constant.FROM_ADMIN, AdminUserUtil.getUserId())) .throwMessage("您已加入别的通话中"); ticketCallJoinService.join(ticketId, AdminUserUtil.getUserId(),Constant.FROM_ADMIN); ssePushService.sendTicketCallJoinedToAdmin(AdminUserUtil.getUserId(), ticketId); @@ -1374,13 +1374,8 @@ public class TicketController extends ControllerBase { */ @PostMapping("call/hangUp") public ApiResult hangUp(@Valid @RequestBody TicketCallHangUpRequest request) { - TicketCall ticketCall = ticketCallService.lambdaQuery() - .eq(TicketCall::getTicketId, request.getTicketId()) - .ne(TicketCall::getState, 2) - .last("limit 1") - .one(); + TicketCall ticketCall = ticketCallService.getLast(request.getTicketId()); if (Objects.isNull(ticketCall)) return ApiResult.success(); - boolean flag=false; if (request.getReject()) { AdminUser adminUser = adminUserService.getById(AdminUserUtil.getUserId()); if (StrUtil.equals(request.getFrom(), "app")) { @@ -1401,7 +1396,6 @@ public class TicketController extends ControllerBase { ) ); ssePushService.sendTicketCallHangUpToApp(request.getTicketId(), request.getFromUserId(), adminUser); - flag=ticketCallJoinService.hangUp(request.getTicketId(), AdminUserUtil.getUserId(), Constant.FROM_ADMIN, true); }else if (StrUtil.equals(request.getFrom(), "admin")) { if (Objects.equals(request.getFromUserId(), AdminUserUtil.getUserId())){ Ticket ticket = ticketService.getById(request.getTicketId()); @@ -1423,7 +1417,6 @@ public class TicketController extends ControllerBase { ) ); ssePushService.sendTicketCallCancelToAdmin(request.getTicketId(), handlerId, adminUser); - flag=ticketCallService.hangUp(request.getTicketId(), AdminUserUtil.getUserId(), Constant.FROM_ADMIN, true); }else { uniPushService.send(new UniPushMessage() .setSenderId("admin-uid-" + adminUser.getId()) @@ -1442,17 +1435,10 @@ public class TicketController extends ControllerBase { ) ); ssePushService.sendTicketCallHangUpToAdmin(request.getTicketId(), request.getFromUserId(), adminUser); - flag=ticketCallJoinService.hangUp(ticketCall.getId(), AdminUserUtil.getUserId(), Constant.FROM_ADMIN, true); } } - }else { - if (StrUtil.equals(request.getFrom(), "app") || Objects.equals(request.getFromUserId(), AdminUserUtil.getUserId())) { - flag=ticketCallService.hangUp(request.getTicketId(), AdminUserUtil.getUserId(), Constant.FROM_ADMIN, false); - }else { - flag=ticketCallJoinService.hangUp(ticketCall.getId(), AdminUserUtil.getUserId(), Constant.FROM_ADMIN, false); - } } - if (flag){ + if (ticketCallJoinService.hangUp(ticketCall.getId(), AdminUserUtil.getUserId(), Constant.FROM_ADMIN, request.getReject())) { ticketEventPublisher.publishTicketCallEndEvent(request.getTicketId()); } return ApiResult.success(); 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 d92e5c37..97865a9f 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 @@ -504,7 +504,7 @@ public class TicketController extends ControllerBase { VUtils.trueThrowBusinessError(!Objects.equals(AppUserUtil.getUserId(), ticket.getUserId())) .throwMessage("不是工单创建人无权限呼叫"); Integer handlerUserId = Arrays.stream(ticket.getHandle().split(",")).map(Integer::parseInt).findFirst().get(); - VUtils.trueThrowBusinessError(ticketCallService.isInCall(handlerUserId)).throwMessage("对方正在通话中"); + VUtils.trueThrowBusinessError(ticketCallJoinService.isInCall(ticket.getId(), Constant.FROM_ADMIN, handlerUserId)).throwMessage("对方正在通话中"); AppUser appUser = appUserService.getById(ticket.getUserId()); uniPushService.send(new UniPushMessage() .setSenderId(ticket.getUserPlatform()+"-uid-" + ticket.getUserId()) @@ -541,7 +541,7 @@ public class TicketController extends ControllerBase { VUtils.trueThrowBusinessError(!StrUtil.equals(ticket.getUserPlatform(), AppUserUtil.getFrom()) || !Objects.equals(AppUserUtil.getUserId(), ticket.getUserId())) .throwMessage("不是创建人无法加入通话"); - VUtils.trueThrowBusinessError(ticketCallService.isInCall(AppUserUtil.getUserId())) + VUtils.trueThrowBusinessError(ticketCallJoinService.isInCall(ticket.getId(), Constant.FROM_APP, AppUserUtil.getUserId())) .throwMessage("您已加入别的通话中"); ticketCallJoinService.join(ticketId, AppUserUtil.getUserId(), Constant.FROM_APP); ssePushService.sendTicketCallJoinedToApp(AppUserUtil.getUserId(), ticketId); @@ -615,13 +615,7 @@ public class TicketController extends ControllerBase { ssePushService.sendTicketCallHangUpToAdmin(request.getTicketId(), request.getFromUserId(), appUser); } } - boolean flag; - if (StrUtil.equals(request.getFrom(), Constant.FROM_APP)) { - flag = ticketCallService.hangUp(ticketCall.getId(), AppUserUtil.getUserId(), Constant.FROM_APP, request.getReject()); - } else { - flag = ticketCallJoinService.hangUp(ticketCall.getId(), AppUserUtil.getUserId(), Constant.FROM_APP, request.getReject()); - } - if (flag) { + if (ticketCallJoinService.hangUp(ticketCall.getId(), AppUserUtil.getUserId(), Constant.FROM_APP, request.getReject())) { ticketEventPublisher.publishTicketCallEndEvent(request.getTicketId()); } return ApiResult.success(); diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/TicketCall.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/TicketCall.java index c4e0d179..082ac718 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/TicketCall.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/TicketCall.java @@ -1,7 +1,6 @@ package com.nflg.mobilebroken.repository.entity; import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Getter; @@ -35,16 +34,16 @@ public class TicketCall implements Serializable { */ private Integer ticketId; - /** - * 呼叫来源,app或者admin - */ - @TableField("`from`") - private String from; - - /** - * 呼叫人id - */ - private Integer callerUserId; +// /** +// * 呼叫来源,app或者admin +// */ +// @TableField("`from`") +// private String from; +// +// /** +// * 呼叫人id +// */ +// private Integer callerUserId; /** * 状态,0-呼叫中;1-通话中;2-已结束 diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/TicketCallJoinMapper.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/TicketCallJoinMapper.java index 183cd3ac..622941f1 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/TicketCallJoinMapper.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/TicketCallJoinMapper.java @@ -13,5 +13,5 @@ import com.nflg.mobilebroken.repository.entity.TicketCallJoin; */ public interface TicketCallJoinMapper extends BaseMapper { - boolean isInCall(Integer userId); + boolean isInCall(Integer ticketId, String from, Integer userId); } diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/ITicketCallJoinService.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/ITicketCallJoinService.java index 8d20483c..1f3ea25c 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/ITicketCallJoinService.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/ITicketCallJoinService.java @@ -16,7 +16,7 @@ import javax.validation.constraints.NotNull; */ public interface ITicketCallJoinService extends IService { - boolean isInCall(Integer userId); + boolean isInCall(Integer ticketId, String from, Integer userId); void join(@Valid @NotNull Integer ticketId, Integer userId, String from); @@ -25,6 +25,4 @@ public interface ITicketCallJoinService extends IService { boolean hangUp(Integer callId, Integer userId, String from, boolean reject); void add(Integer callId, Integer userId, String from); - - void hangUpAll(Integer id); } diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/ITicketCallService.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/ITicketCallService.java index e7c7eb77..69e922d5 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/ITicketCallService.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/ITicketCallService.java @@ -15,11 +15,11 @@ import javax.validation.constraints.NotNull; */ public interface ITicketCallService extends IService { - boolean isInCall(Integer userId); +// boolean isInCall(Integer userId); void add(Integer ticketId, Integer callerUserId,String callerUserFrom, Integer calledUserId, String calledUserFrom); - boolean hangUp(@NotNull Integer ticketId, Integer userId, String from, boolean reject); +// boolean hangUp(@NotNull Integer ticketId, Integer userId, String from, boolean reject); TicketCall getLast(@NotNull Integer ticketId); } diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/TicketCallJoinServiceImpl.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/TicketCallJoinServiceImpl.java index 86850abe..60c996b5 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/TicketCallJoinServiceImpl.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/TicketCallJoinServiceImpl.java @@ -31,8 +31,8 @@ public class TicketCallJoinServiceImpl extends ServiceImpl @@ -29,26 +26,33 @@ public class TicketCallServiceImpl extends ServiceImpl