Merge branch 'feature/bug-632' into test

This commit is contained in:
曹鹏飞 2025-08-28 14:45:16 +08:00
commit a469439862
6 changed files with 120 additions and 92 deletions

View File

@ -1496,30 +1496,7 @@ public class TicketController extends ControllerBase {
} else { } else {
stringRedisTemplate.opsForSet().remove(Constant.REDIS_KEY_TICKET_CALL_WAIT + request.getTicketId(), Constant.FROM_ADMIN + "-" + AdminUserUtil.getUserId()); 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()))) { ticketEventPublisher.publishTicketCallEndEvent(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")
)
)
);
}
}
}
return ApiResult.success(); return ApiResult.success();
} }

View File

@ -1,12 +1,22 @@
package com.nflg.mobilebroken.admin.event; 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.ShengWangService;
import com.nflg.mobilebroken.admin.service.SsePushService; 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.repository.service.TicketChatService;
import com.nflg.mobilebroken.starter.service.UniPushService;
import org.springframework.beans.BeansException; import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware; import org.springframework.context.ApplicationContextAware;
import org.springframework.context.ApplicationEvent; 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 { public class TicketCallEndEvent extends ApplicationEvent implements ApplicationContextAware {
@ -15,6 +25,8 @@ public class TicketCallEndEvent extends ApplicationEvent implements ApplicationC
private SsePushService ssePushService; private SsePushService ssePushService;
private TicketChatService ticketChatService; private TicketChatService ticketChatService;
private ShengWangService shengWangService; private ShengWangService shengWangService;
private StringRedisTemplate stringRedisTemplate;
private UniPushService uniPushService;
public TicketCallEndEvent(Object source, Integer ticketId) { public TicketCallEndEvent(Object source, Integer ticketId) {
super(source); super(source);
@ -26,23 +38,46 @@ public class TicketCallEndEvent extends ApplicationEvent implements ApplicationC
this.ssePushService = applicationContext.getBean(SsePushService.class); this.ssePushService = applicationContext.getBean(SsePushService.class);
this.ticketChatService = applicationContext.getBean(TicketChatService.class); this.ticketChatService = applicationContext.getBean(TicketChatService.class);
this.shengWangService = applicationContext.getBean(ShengWangService.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 { public void send() throws IOException, InterruptedException {
// TimeUnit.SECONDS.sleep(2); if (Objects.equals(0L, stringRedisTemplate.opsForSet().size(Constant.REDIS_KEY_TICKET_CALL_WAIT + ticketId))) {
// if (CollectionUtil.isEmpty(shengWangService.getChannelUsers("ticket-" + ticketId))) { ShengWangChannelUserListDTO channelUserListDTO = shengWangService.getChannelUsers("ticket" + ticketId);
// ChatMessageDTO message = new ChatMessageDTO() if (!channelUserListDTO.isChannelEexist() || channelUserListDTO.getUsers().size() <= 1) {
// .setId(cn.hutool.core.util.IdUtil.getSnowflakeNextIdStr()) ChatMessageDTO message = new ChatMessageDTO()
// .setFrom("call") .setId(cn.hutool.core.util.IdUtil.getSnowflakeNextIdStr())
// .setTicketState(TicketState.Processing.getState()) .setFrom("call")
// .setSenderId(0) .setTicketState(TicketState.Processing.getState())
// .setSenderName("通话助手") .setSenderId(0)
// .setContent("视频通话已结束") .setSenderName("通话助手")
// .setCreateTime(Instant.now()); .setContent("视频通话已结束")
// ticketChatService.addMessage(ticketId, message); .setCreateTime(Instant.now());
// //推送消息 ticketChatService.addMessage(ticketId, message);
// ssePushService.sendTicketMessageToAdmin(ticketId, message); //推送消息
// ssePushService.sendTicketMessageToApp(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")
)
)
);
}
}
}
}
} }

View File

@ -5,6 +5,8 @@ import org.springframework.context.event.EventListener;
import org.springframework.scheduling.annotation.Async; import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.io.IOException;
@Component @Component
public class TicketEventListener { public class TicketEventListener {
@ -38,9 +40,9 @@ public class TicketEventListener {
event.send(); event.send();
} }
// @Async @Async
// @EventListener @EventListener
// public void handleTicketCallEndEvent(TicketCallEndEvent event) throws IOException, InterruptedException { public void handleTicketCallEndEvent(TicketCallEndEvent event) throws IOException, InterruptedException {
// event.send(); event.send();
// } }
} }

View File

@ -664,30 +664,7 @@ public class TicketController extends ControllerBase {
} else { } else {
stringRedisTemplate.opsForSet().remove(Constant.REDIS_KEY_TICKET_CALL_WAIT + request.getTicketId(), Constant.FROM_APP + "-" + AppUserUtil.getUserId()); 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()))) { ticketEventPublisher.publishTicketCallEndEvent(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")
)
)
);
}
}
}
return ApiResult.success(); return ApiResult.success();
} }

View File

@ -1,12 +1,22 @@
package com.nflg.mobilebroken.cfs.event; 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.ShengWangService;
import com.nflg.mobilebroken.cfs.service.SsePushService; 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.repository.service.TicketChatService;
import com.nflg.mobilebroken.starter.service.UniPushService;
import org.springframework.beans.BeansException; import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware; import org.springframework.context.ApplicationContextAware;
import org.springframework.context.ApplicationEvent; 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 { public class TicketCallEndEvent extends ApplicationEvent implements ApplicationContextAware {
@ -15,6 +25,8 @@ public class TicketCallEndEvent extends ApplicationEvent implements ApplicationC
private SsePushService ssePushService; private SsePushService ssePushService;
private TicketChatService ticketChatService; private TicketChatService ticketChatService;
private ShengWangService shengWangService; private ShengWangService shengWangService;
private StringRedisTemplate stringRedisTemplate;
private UniPushService uniPushService;
public TicketCallEndEvent(Object source,Integer ticketId) { public TicketCallEndEvent(Object source,Integer ticketId) {
super(source); super(source);
@ -26,23 +38,46 @@ public class TicketCallEndEvent extends ApplicationEvent implements ApplicationC
this.ssePushService = applicationContext.getBean(SsePushService.class); this.ssePushService = applicationContext.getBean(SsePushService.class);
this.ticketChatService = applicationContext.getBean(TicketChatService.class); this.ticketChatService = applicationContext.getBean(TicketChatService.class);
this.shengWangService = applicationContext.getBean(ShengWangService.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 { public void send() throws IOException, InterruptedException {
// TimeUnit.SECONDS.sleep(2); if (Objects.equals(0L, stringRedisTemplate.opsForSet().size(Constant.REDIS_KEY_TICKET_CALL_WAIT + ticketId))) {
// if (CollectionUtil.isEmpty(shengWangService.getChannelUsers("ticket-" + ticketId))) { ShengWangChannelUserListDTO channelUserListDTO = shengWangService.getChannelUsers("ticket" + ticketId);
// ChatMessageDTO message = new ChatMessageDTO() if (!channelUserListDTO.isChannelEexist() || channelUserListDTO.getUsers().size() <= 1) {
// .setId(cn.hutool.core.util.IdUtil.getSnowflakeNextIdStr()) ChatMessageDTO message = new ChatMessageDTO()
// .setFrom("call") .setId(cn.hutool.core.util.IdUtil.getSnowflakeNextIdStr())
// .setTicketState(TicketState.Processing.getState()) .setFrom("call")
// .setSenderId(0) .setTicketState(TicketState.Processing.getState())
// .setSenderName("通话助手") .setSenderId(0)
// .setContent("视频通话已结束") .setSenderName("通话助手")
// .setCreateTime(Instant.now()); .setContent("视频通话已结束")
// ticketChatService.addMessage(ticketId, message); .setCreateTime(Instant.now());
// //推送消息 ticketChatService.addMessage(ticketId, message);
// ssePushService.sendTicketMessageToAdmin(ticketId, message); //推送消息
// ssePushService.sendTicketMessageToApp(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")
)
)
);
}
}
}
}
} }

View File

@ -5,6 +5,8 @@ import org.springframework.context.event.EventListener;
import org.springframework.scheduling.annotation.Async; import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import java.io.IOException;
@Component @Component
public class TicketEventListener { public class TicketEventListener {
@ -44,9 +46,9 @@ public class TicketEventListener {
event.send(); event.send();
} }
// @Async @Async
// @EventListener @EventListener
// public void handleTicketCallEndEvent(TicketCallEndEvent event) throws IOException, InterruptedException { public void handleTicketCallEndEvent(TicketCallEndEvent event) throws IOException, InterruptedException {
// event.send(); event.send();
// } }
} }