Merge branch 'prod/20260407' into test

This commit is contained in:
曹鹏飞 2026-04-11 08:48:17 +08:00
commit d05aa4a91c
16 changed files with 126 additions and 134 deletions

View File

@ -434,8 +434,7 @@ public class TicketController extends ControllerBase {
.setCreateTime(Instant.now());
ticketChatService.addMessage(Long.valueOf(ticket.getId()), message);
//推送消息
ssePushService.sendTicketMessageToApp(Long.valueOf(ticket.getId()), message);
ssePushService.sendTicketMessageToAdmin(Long.valueOf(ticket.getId()), message);
ssePushService.sendTicketMessage(Long.valueOf(ticket.getId()), message, MultilingualUtil.getLanguage());
request.getUserIds().forEach(userId -> {
uniPushService.sendTodoMessageFromAdmin(String.valueOf(ticket.getId()), 0, Constant.FROM_ADMIN, userId, "分派工单");
});
@ -496,8 +495,7 @@ public class TicketController extends ControllerBase {
.setCreateTime(Instant.now());
ticketChatService.addMessage(Long.valueOf(id), message);
//推送消息
ssePushService.sendTicketMessageToAdmin(Long.valueOf(id), message);
ssePushService.sendTicketMessageToApp(Long.valueOf(id), message);
ssePushService.sendTicketMessage(Long.valueOf(id), message, MultilingualUtil.getLanguage());
uniPushService.sendTodoMessageFromAdmin(String.valueOf(ticket.getId()), 0, ticket.getUserPlatform(), ticket.getUserId(), "工单已完成");
deviceTypeService.getCqmsByDeviceType(ticket.getDeviceNo()).forEach(cqm -> {
uniPushService.sendTodoMessageFromAdmin(String.valueOf(ticket.getId()), 0, Constant.FROM_ADMIN, cqm, "工单已完成");
@ -527,8 +525,7 @@ public class TicketController extends ControllerBase {
.setCreateTime(Instant.now());
ticketChatService.addMessage(Long.valueOf(id), message);
//推送消息
ssePushService.sendTicketMessageToAdmin(Long.valueOf(id), message);
ssePushService.sendTicketMessageToApp(Long.valueOf(id), message);
ssePushService.sendTicketMessage(Long.valueOf(id), message, MultilingualUtil.getLanguage());
uniPushService.sendTodoMessageFromAdmin(String.valueOf(ticket.getId()), 0, Constant.FROM_ADMIN, StrUtil.splitToInt(ticket.getHandle(), ",")[0], "工单被驳回");
adminMessageService.setReaded(AdminUserUtil.getUserId(), Long.valueOf(id), MessageSubType.TicketSolutionAudit.getState());
}
@ -831,30 +828,17 @@ public class TicketController extends ControllerBase {
Integer userId = AdminUserUtil.getUserId();
MessageVO vo = new MessageVO();
List<ChatMessageVO> messageVOS = ticketChatService.getMessages(Long.valueOf(ticketId), userId);
String languageCode = MultilingualUtil.getLanguage();
if (!StrUtil.equals(languageCode, Constant.DEFAULT_LANGUAGE_CODE)) {
String aliyunCode = Constant.LANGUAGE_ALIYUN_MAP.get(languageCode);
messageVOS.stream()
.filter(m -> m.getSenderId() == 0)
.forEach(m -> {
m.setSenderName(aliYunTranslate.translateWord(m.getSenderName(), aliyunCode));
m.setContent(m.getContentPre() + aliYunTranslate.translateWord(m.getContent(), aliyunCode));
});
}
vo.setMessages(messageVOS);
// String key = "chatMessage:notreaded:" + ticketId + ":admin:" + userId;
// Set<String> readeds = stringRedisTemplate.opsForSet().members(key);
// Set<String> notReadeds = new LinkedHashSet<>();
// if (CollectionUtil.isEmpty(readeds)) {
// notReadeds = messageVOS.stream()
// .filter(m -> !Objects.equals(m.getSenderId(), userId))
// .map(ChatMessageVO::getId)
// .collect(Collectors.toSet());
// } else {
// for (ChatMessageVO messageVO : messageVOS) {
// if (Objects.equals(messageVO.getSenderId(), userId) || readeds.contains(messageVO.getId())) {
// messageVO.setReaded(true);
// } else if (Objects.nonNull(messageVO.getId())) {
// notReadeds.add(messageVO.getId());
// }
// }
// }
// notReadeds.removeIf(StrUtil::isBlank);
// if (CollectionUtil.isNotEmpty(notReadeds)) {
// stringRedisTemplate.opsForSet().add(key, notReadeds.toArray(String[]::new));
// vo.setNotReadCount(notReadeds.size());
// vo.setFirstMessageId(notReadeds.iterator().next());
// }
vo.setNotReadCount(Integer.valueOf(Optional.ofNullable((String) stringRedisTemplate.opsForHash().get("chatMessage:notreaded:" + ticketId + ":admin:" + userId, "count")).orElse("0")));
vo.setFirstMessageId((String) stringRedisTemplate.opsForHash().get("chatMessage:notreaded:" + ticketId + ":admin:" + userId, "lastMsgId"));
stringRedisTemplate.delete("chatMessage:notreaded:" + ticketId + ":admin:" + userId);
@ -928,8 +912,7 @@ public class TicketController extends ControllerBase {
stringRedisTemplate.opsForHash().put("chatMessage:notreaded:" + ticket.getId() + ":app:" + ticket.getUserId(), "lastMsgId", message.getId());
}
//推送消息
ssePushService.sendTicketMessageToAdmin(request.getTicketId(), message);
ssePushService.sendTicketMessageToApp(request.getTicketId(), message);
ssePushService.sendTicketMessage(request.getTicketId(), message, MultilingualUtil.getLanguage());
ticketEventPublisher.publishTicketReplyEvent(ticket);
return ApiResult.success();
}
@ -1069,8 +1052,7 @@ public class TicketController extends ControllerBase {
.setCreateTime(Instant.now());
ticketChatService.addMessage(Long.valueOf(ticketId), message);
//推送消息
ssePushService.sendTicketMessageToAdmin(Long.valueOf(ticket.getId()), message);
ssePushService.sendTicketMessageToApp(Long.valueOf(ticket.getId()), message);
ssePushService.sendTicketMessage(Long.valueOf(ticket.getId()), message, MultilingualUtil.getLanguage());
adminMessageService.setReaded(AdminUserUtil.getUserId(), Long.valueOf(ticketId), MessageSubType.TicketSolutionAudit.getState());
}
return ApiResult.success();

View File

@ -3,7 +3,9 @@ package com.nflg.mobilebroken.admin.event;
import com.nflg.mobilebroken.admin.service.SsePushService;
import com.nflg.mobilebroken.common.constant.TicketState;
import com.nflg.mobilebroken.common.pojo.dto.ChatMessageDTO;
import com.nflg.mobilebroken.common.util.MultilingualUtil;
import com.nflg.mobilebroken.repository.service.TicketChatService;
import com.nflg.mobilebroken.starter.service.impl.AliYunTranslate;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
@ -15,14 +17,16 @@ public class TicketCallBeginEvent extends ApplicationEvent implements Applicatio
private final Integer ticketId;
private final String userName;
private final String language;
private SsePushService ssePushService;
private TicketChatService ticketChatService;
public TicketCallBeginEvent(Object source, Integer ticketId, String userName) {
public TicketCallBeginEvent(Object source, Integer ticketId, String userName, String language) {
super(source);
this.ticketId = ticketId;
this.userName = userName;
this.language = language;
}
@Override
@ -31,18 +35,18 @@ public class TicketCallBeginEvent extends ApplicationEvent implements Applicatio
this.ticketChatService = applicationContext.getBean(TicketChatService.class);
}
public void send(){
public void send() {
ChatMessageDTO message = new ChatMessageDTO()
.setId(cn.hutool.core.util.IdUtil.getSnowflakeNextIdStr())
.setFrom("call")
.setTicketState(TicketState.Processing.getState())
.setSenderId(0)
.setSenderName("通话助手")
.setContent(userName+"发起了视频通话")
.setContentPre(userName)
.setContent("发起了视频通话")
.setCreateTime(Instant.now());
ticketChatService.addMessage(Long.valueOf(ticketId), message);
//推送消息
ssePushService.sendTicketMessageToAdmin(Long.valueOf(ticketId), message);
ssePushService.sendTicketMessageToApp(Long.valueOf(ticketId), message);
ssePushService.sendTicketMessage(Long.valueOf(ticketId), message,language);
}
}

View File

@ -6,6 +6,7 @@ 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.common.util.MultilingualUtil;
import com.nflg.mobilebroken.repository.service.TicketChatService;
import com.nflg.mobilebroken.starter.service.UniPushService;
import org.springframework.beans.BeansException;
@ -56,8 +57,7 @@ public class TicketCallEndEvent extends ApplicationEvent implements ApplicationC
.setCreateTime(Instant.now());
ticketChatService.addMessage(ticket.getId(), message);
//推送消息
ssePushService.sendTicketMessageToAdmin(ticket.getId(), message);
ssePushService.sendTicketMessageToApp(ticket.getId(), message);
ssePushService.sendTicketMessage(ticket.getId(), message, MultilingualUtil.getLanguage());
ssePushService.sendTicketCallEnd(ticket.getId());
Integer userId = CollectionUtil.get(channelUserListDTO.getUsers(), 0);
if (Objects.nonNull(userId)) {

View File

@ -2,6 +2,7 @@ package com.nflg.mobilebroken.admin.publisher;
import com.nflg.mobilebroken.admin.event.*;
import com.nflg.mobilebroken.common.pojo.dto.TicketDTO;
import com.nflg.mobilebroken.common.util.MultilingualUtil;
import com.nflg.mobilebroken.repository.entity.Ticket;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationEventPublisher;
@ -44,7 +45,8 @@ public class TicketEventPublisher {
}
public void publishTicketCallBeginEvent(Integer ticketId, String userName) {
TicketCallBeginEvent event = new TicketCallBeginEvent(this, ticketId,userName);
String language = MultilingualUtil.getLanguage();
TicketCallBeginEvent event = new TicketCallBeginEvent(this, ticketId, userName, language);
event.setApplicationContext(applicationContext);
eventPublisher.publishEvent(event);
}

View File

@ -1,7 +1,9 @@
package com.nflg.mobilebroken.admin.service;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import com.nflg.mobilebroken.common.constant.Constant;
import com.nflg.mobilebroken.common.pojo.ApiResult;
import com.nflg.mobilebroken.common.pojo.dto.ChatMessageDTO;
import com.nflg.mobilebroken.common.pojo.dto.PushMessageDTO;
@ -12,6 +14,7 @@ import com.nflg.mobilebroken.common.pojo.request.TicketMessagePushRequest;
import com.nflg.mobilebroken.common.pojo.vo.ChatMessageVO;
import com.nflg.mobilebroken.common.util.MultilingualUtil;
import com.nflg.mobilebroken.repository.entity.AdminUser;
import com.nflg.mobilebroken.starter.service.impl.AliYunTranslate;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
@ -19,6 +22,7 @@ import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestTemplate;
import javax.annotation.Resource;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.Objects;
@ -32,13 +36,32 @@ public class SsePushService {
@Value("${sse.url}")
private String sseUrl;
@Resource
private AliYunTranslate aliYunTranslate;
public void sendTicketMessage(Long ticketId, ChatMessageDTO message, String language) {
translateMessage(message, language);
sendTicketMessageToAdmin(ticketId, message);
sendTicketMessageToApp(ticketId, message);
}
private void translateMessage(ChatMessageDTO message, String language) {
if (message.getSenderId() == 0 && !StrUtil.equals(language, Constant.DEFAULT_LANGUAGE_CODE)) {
String aliyunCode = Constant.LANGUAGE_ALIYUN_MAP.get(language);
if (StrUtil.isNotBlank(aliyunCode)) {
message.setSenderName(aliYunTranslate.translateWord(message.getSenderName(), aliyunCode));
message.setContent(message.getContentPre() + aliYunTranslate.translateWord(message.getContent(), aliyunCode));
}
}
}
public void sendTicketMessageToAdmin(Long ticketId, ChatMessageDTO message) {
try {
TicketMessagePushRequest request=new TicketMessagePushRequest()
TicketMessagePushRequest request = new TicketMessagePushRequest()
.setTicketId(ticketId)
.setMessage(buildMessage(ticketId,message));
.setMessage(buildMessage(ticketId, message));
log.debug("发送SSE消息{}", JSONUtil.toJsonStr(request));
ApiResult<?> result = sendMessage(request,"admin");
ApiResult<?> result = sendMessage(request, "admin");
log.debug("发送SSE消息结果{}", JSONUtil.toJsonStr(result));
} catch (Exception e) {
log.error("发送SSE消息出错", e);
@ -47,11 +70,11 @@ public class SsePushService {
public void sendTicketMessageWithdrawToAdmin(Long ticketId, String messageId) {
try {
TicketMessagePushRequest request=new TicketMessagePushRequest()
TicketMessagePushRequest request = new TicketMessagePushRequest()
.setTicketId(ticketId)
.setMessage(buildWithdrawMessage(ticketId,messageId));
.setMessage(buildWithdrawMessage(ticketId, messageId));
log.debug("发送SSE消息{}", JSONUtil.toJsonStr(request));
ApiResult<?> result = sendMessage(request,"admin");
ApiResult<?> result = sendMessage(request, "admin");
log.debug("发送消息结果:{}", JSONUtil.toJsonStr(result));
} catch (Exception e) {
log.error("发送消息出错", e);
@ -60,11 +83,11 @@ public class SsePushService {
public void sendTicketMessageToApp(Long ticketId, ChatMessageDTO message) {
try {
TicketMessagePushRequest request=new TicketMessagePushRequest()
TicketMessagePushRequest request = new TicketMessagePushRequest()
.setTicketId(ticketId)
.setMessage(buildMessage(ticketId,message));
.setMessage(buildMessage(ticketId, message));
log.debug("发送SSE消息{}", JSONUtil.toJsonStr(request));
ApiResult<?> result = sendMessage(request,"app");
ApiResult<?> result = sendMessage(request, "app");
log.debug("发送消息结果:{}", JSONUtil.toJsonStr(result));
} catch (Exception e) {
log.error("发送消息出错", e);
@ -73,20 +96,20 @@ public class SsePushService {
public void sendTicketMessageWithdrawToApp(Long ticketId, String messageId) {
try {
TicketMessagePushRequest request=new TicketMessagePushRequest()
TicketMessagePushRequest request = new TicketMessagePushRequest()
.setTicketId(ticketId)
.setMessage(buildWithdrawMessage(ticketId,messageId));
.setMessage(buildWithdrawMessage(ticketId, messageId));
log.debug("发送SSE消息{}", JSONUtil.toJsonStr(request));
ApiResult<?> result = sendMessage(request,"app");
ApiResult<?> result = sendMessage(request, "app");
log.debug("发送消息结果:{}", JSONUtil.toJsonStr(result));
} catch (Exception e) {
log.error("发送消息出错", e);
}
}
private ApiResult<?> sendMessage(TicketMessagePushRequest request,String to){
private ApiResult<?> sendMessage(TicketMessagePushRequest request, String to) {
RestTemplate restTemplate = new RestTemplate();
return restTemplate.postForObject(sseUrl+"/sse/"+to+"/push/ticket/message",request, ApiResult.class);
return restTemplate.postForObject(sseUrl + "/sse/" + to + "/push/ticket/message", request, ApiResult.class);
}
private PushMessageDTO buildMessage(Long ticketId, ChatMessageDTO message) {
@ -112,18 +135,18 @@ public class SsePushService {
.setRemindUsers(message.getRemindUsers())
.setAudioUrl(message.getAudioUrl())
.setQuote(Objects.isNull(message.getQuote()) ? null : new ChatMessageVO()
.setId(message.getQuote().getId())
.setFrom(message.getQuote().getFrom())
.setSenderId(message.getQuote().getSenderId())
.setSenderName(message.getQuote().getSenderName())
.setSenderAvatar(message.getQuote().getSenderAvatar())
.setTicketState(message.getQuote().getTicketState())
.setContent(message.getQuote().getContent())
.setAttachments(message.getQuote().getAttachments())
.setImages(message.getQuote().getImages())
.setRemindUsers(message.getQuote().getRemindUsers())
.setCreateTime(formatter.format(message.getQuote().getCreateTime()))
.setAudioUrl(message.getQuote().getAudioUrl())
.setId(message.getQuote().getId())
.setFrom(message.getQuote().getFrom())
.setSenderId(message.getQuote().getSenderId())
.setSenderName(message.getQuote().getSenderName())
.setSenderAvatar(message.getQuote().getSenderAvatar())
.setTicketState(message.getQuote().getTicketState())
.setContent(message.getQuote().getContent())
.setAttachments(message.getQuote().getAttachments())
.setImages(message.getQuote().getImages())
.setRemindUsers(message.getQuote().getRemindUsers())
.setCreateTime(formatter.format(message.getQuote().getCreateTime()))
.setAudioUrl(message.getQuote().getAudioUrl())
))
);
}

View File

@ -16,6 +16,7 @@ import com.nflg.mobilebroken.common.pojo.dto.ChatMessageDTO;
import com.nflg.mobilebroken.common.pojo.request.TicketEvaluateAddRequest;
import com.nflg.mobilebroken.common.pojo.vo.TicketEvaluateAddVO;
import com.nflg.mobilebroken.common.pojo.vo.TicketEvaluateItemVO;
import com.nflg.mobilebroken.common.util.MultilingualUtil;
import com.nflg.mobilebroken.repository.entity.*;
import com.nflg.mobilebroken.repository.service.*;
import com.nflg.mobilebroken.starter.service.EmailService;
@ -166,8 +167,7 @@ public class TicketScheduledTasks {
.setCreateTime(Instant.now());
ticketChatService.addMessage(request.getTicketId(), message);
//推送消息
ssePushService.sendTicketMessageToAdmin(Long.valueOf(ticket.getId()), message);
ssePushService.sendTicketMessageToApp(Long.valueOf(ticket.getId()), message);
ssePushService.sendTicketMessage(Long.valueOf(ticket.getId()), message, MultilingualUtil.getLanguage());
if (StrUtil.equals(ticket.getUserPlatform(), Constant.FROM_APP)) {
appMessageService.setReaded(ticket.getUserId(), ticket.getUserPlatform(), MessageSubType.TicketCompletion.getState());
} else {

View File

@ -13,20 +13,4 @@ import java.io.Console;
@Validated
@RestController
public class ControllerBase {
@Resource
private AliYunTranslate aliYunTranslate;
protected String translate(String text) {
if (StrUtil.isNotBlank(text)) {
String languageCode = MultilingualUtil.getLanguage();
if (!StrUtil.equals(languageCode, Constant.DEFAULT_LANGUAGE_CODE)) {
String aliyunCode = Constant.LANGUAGE_ALIYUN_MAP.get(languageCode);
if (StrUtil.isNotBlank(aliyunCode)) {
return aliYunTranslate.translateWord(text, aliyunCode);
}
}
}
return text;
}
}

View File

@ -23,6 +23,7 @@ import com.nflg.mobilebroken.common.util.VUtils;
import com.nflg.mobilebroken.repository.entity.*;
import com.nflg.mobilebroken.repository.service.*;
import com.nflg.mobilebroken.starter.service.UniPushService;
import com.nflg.mobilebroken.starter.service.impl.AliYunTranslate;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.scheduling.TaskScheduler;
@ -123,6 +124,9 @@ public class TicketController extends ControllerBase {
@Resource
private IAppMessageService appMessageService;
@Resource
private AliYunTranslate aliYunTranslate;
/**
* 搜索设备
* @param request 搜索条件
@ -406,29 +410,17 @@ public class TicketController extends ControllerBase {
Integer userId = AppUserUtil.getUserId();
MessageVO vo = new MessageVO();
List<ChatMessageVO> messageVOS = ticketChatService.getMessages(ticketId, userId);
String languageCode = MultilingualUtil.getLanguage();
if (!StrUtil.equals(languageCode, Constant.DEFAULT_LANGUAGE_CODE)) {
String aliyunCode = Constant.LANGUAGE_ALIYUN_MAP.get(languageCode);
messageVOS.stream()
.filter(m -> m.getSenderId() == 0)
.forEach(m -> {
m.setSenderName(aliYunTranslate.translateWord(m.getSenderName(), aliyunCode));
m.setContent(m.getContentPre() + aliYunTranslate.translateWord(m.getContent(), aliyunCode));
});
}
vo.setMessages(messageVOS);
// String key = "chatMessage:notreaded:" + ticketId + ":app:" + userId;
// Set<String> readeds = stringRedisTemplate.opsForSet().members(key);
// Set<String> notReadeds = new LinkedHashSet<>();
// if (CollectionUtil.isEmpty(readeds)) {
// notReadeds = messageVOS.stream()
// .filter(m -> Objects.nonNull(m.getId()) && !Objects.equals(m.getSenderId(), userId))
// .map(ChatMessageVO::getId)
// .collect(Collectors.toSet());
// } else {
// for (ChatMessageVO messageVO : messageVOS) {
// if (Objects.equals(messageVO.getSenderId(), userId) || readeds.contains(messageVO.getId())) {
// messageVO.setReaded(true);
// } else if (Objects.nonNull(messageVO.getId())) {
// notReadeds.add(messageVO.getId());
// }
// }
// }
// if (CollectionUtil.isNotEmpty(notReadeds)) {
// stringRedisTemplate.opsForSet().add(key, notReadeds.toArray(String[]::new));
// vo.setNotReadCount(notReadeds.size());
// vo.setFirstMessageId(notReadeds.iterator().next());
// }
vo.setNotReadCount(Integer.valueOf(Optional.ofNullable((String) stringRedisTemplate.opsForHash().get("chatMessage:notreaded:" + ticketId + ":app:" + userId, "count")).orElse("0")));
vo.setFirstMessageId((String) stringRedisTemplate.opsForHash().get("chatMessage:notreaded:" + ticketId + ":app:" + userId, "lastMsgId"));
stringRedisTemplate.delete("chatMessage:notreaded:" + ticketId + ":app:" + userId);

View File

@ -3,6 +3,7 @@ package com.nflg.mobilebroken.cfs.event;
import com.nflg.mobilebroken.cfs.service.SsePushService;
import com.nflg.mobilebroken.common.constant.TicketState;
import com.nflg.mobilebroken.common.pojo.dto.ChatMessageDTO;
import com.nflg.mobilebroken.common.util.MultilingualUtil;
import com.nflg.mobilebroken.repository.service.TicketChatService;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
@ -15,14 +16,16 @@ public class TicketCallBeginEvent extends ApplicationEvent implements Applicatio
private final Long ticketId;
private final String userName;
private final String language;
private SsePushService ssePushService;
private TicketChatService ticketChatService;
public TicketCallBeginEvent(Object source, Long ticketId, String userName) {
public TicketCallBeginEvent(Object source, Long ticketId, String userName, String language) {
super(source);
this.ticketId = ticketId;
this.userName = userName;
this.language = language;
}
@Override

View File

@ -2,6 +2,7 @@ package com.nflg.mobilebroken.cfs.publisher;
import com.nflg.mobilebroken.cfs.event.*;
import com.nflg.mobilebroken.common.pojo.dto.TicketDTO;
import com.nflg.mobilebroken.common.util.MultilingualUtil;
import com.nflg.mobilebroken.repository.entity.Ticket;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationEventPublisher;
@ -55,7 +56,8 @@ public class TicketEventPublisher {
}
public void publishTicketCallBeginEvent(Long ticketId, String userName) {
TicketCallBeginEvent event = new TicketCallBeginEvent(this, ticketId,userName);
String language = MultilingualUtil.getLanguage();
TicketCallBeginEvent event = new TicketCallBeginEvent(this, ticketId, userName, language);
event.setApplicationContext(applicationContext);
eventPublisher.publishEvent(event);
}

View File

@ -30,6 +30,9 @@ public class ChatMessageDTO {
// 发送者头像
private String senderAvatar;
// 消息内容前缀
private String contentPre;
// 消息内容
private String content;

View File

@ -24,6 +24,9 @@ public class ChatMessageVO {
// 发送者头像
private String senderAvatar;
// 消息内容前缀
private String contentPre;
// 消息内容
private String content;

View File

@ -829,30 +829,17 @@ public class TicketController extends ControllerBase {
Integer userId = AdminUserUtil.getUserId();
MessageVO vo = new MessageVO();
List<ChatMessageVO> messageVOS = ticketChatService.getMessages(ticketId, userId);
String languageCode = MultilingualUtil.getLanguage();
if (!StrUtil.equals(languageCode, Constant.DEFAULT_LANGUAGE_CODE)) {
String aliyunCode = Constant.LANGUAGE_ALIYUN_MAP.get(languageCode);
messageVOS.stream()
.filter(m -> m.getSenderId() == 0)
.forEach(m -> {
m.setSenderName(aliYunTranslate.translateWord(m.getSenderName(), aliyunCode));
m.setContent(m.getContentPre() + aliYunTranslate.translateWord(m.getContent(), aliyunCode));
});
}
vo.setMessages(messageVOS);
// String key = "chatMessage:notreaded:" + ticketId + ":admin:" + userId;
// Set<String> readeds = stringRedisTemplate.opsForSet().members(key);
// Set<String> notReadeds = new LinkedHashSet<>();
// if (CollectionUtil.isEmpty(readeds)) {
// notReadeds = messageVOS.stream()
// .filter(m -> !Objects.equals(m.getSenderId(), userId))
// .map(ChatMessageVO::getId)
// .collect(Collectors.toSet());
// } else {
// for (ChatMessageVO messageVO : messageVOS) {
// if (Objects.equals(messageVO.getSenderId(), userId) || readeds.contains(messageVO.getId())) {
// messageVO.setReaded(true);
// } else if (Objects.nonNull(messageVO.getId())) {
// notReadeds.add(messageVO.getId());
// }
// }
// }
// notReadeds.removeIf(StrUtil::isBlank);
// if (CollectionUtil.isNotEmpty(notReadeds)) {
// stringRedisTemplate.opsForSet().add(key, notReadeds.toArray(String[]::new));
// vo.setNotReadCount(notReadeds.size());
// vo.setFirstMessageId(notReadeds.iterator().next());
// }
vo.setNotReadCount(Integer.valueOf(Optional.ofNullable((String) stringRedisTemplate.opsForHash().get("chatMessage:notreaded:" + ticketId + ":admin:" + userId, "count")).orElse("0")));
vo.setFirstMessageId((String) stringRedisTemplate.opsForHash().get("chatMessage:notreaded:" + ticketId + ":admin:" + userId, "lastMsgId"));
stringRedisTemplate.delete("chatMessage:notreaded:" + ticketId + ":admin:" + userId);

View File

@ -3,6 +3,7 @@ package com.nflg.mobilebroken.gongfu.event;
import com.nflg.mobilebroken.gongfu.service.SsePushService;
import com.nflg.mobilebroken.common.constant.TicketState;
import com.nflg.mobilebroken.common.pojo.dto.ChatMessageDTO;
import com.nflg.mobilebroken.common.util.MultilingualUtil;
import com.nflg.mobilebroken.repository.service.TicketChatService;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
@ -15,14 +16,16 @@ public class TicketCallBeginEvent extends ApplicationEvent implements Applicatio
private final Long ticketId;
private final String userName;
private final String language;
private SsePushService ssePushService;
private TicketChatService ticketChatService;
public TicketCallBeginEvent(Object source, Long ticketId, String userName) {
public TicketCallBeginEvent(Object source, Long ticketId, String userName, String language) {
super(source);
this.ticketId = ticketId;
this.userName = userName;
this.language = language;
}
@Override

View File

@ -1,6 +1,7 @@
package com.nflg.mobilebroken.gongfu.publisher;
import com.nflg.mobilebroken.gongfu.event.*;
import com.nflg.mobilebroken.common.util.MultilingualUtil;
import com.nflg.mobilebroken.repository.entity.GongfuTicket;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationEventPublisher;
@ -43,7 +44,8 @@ public class TicketEventPublisher {
}
public void publishTicketCallBeginEvent(Long ticketId, String userName) {
TicketCallBeginEvent event = new TicketCallBeginEvent(this, ticketId, userName);
String language = MultilingualUtil.getLanguage();
TicketCallBeginEvent event = new TicketCallBeginEvent(this, ticketId, userName, language);
event.setApplicationContext(applicationContext);
eventPublisher.publishEvent(event);
}

View File

@ -4,6 +4,7 @@ import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import com.nflg.mobilebroken.common.constant.Constant;
import com.nflg.mobilebroken.common.pojo.dto.ChatMessageDTO;
import com.nflg.mobilebroken.common.pojo.dto.TicketChatDTO;
import com.nflg.mobilebroken.common.pojo.dto.TicketSet;
@ -65,6 +66,7 @@ public class TicketChatService {
.setSenderId(m.getSenderId())
.setSenderName(m.getSenderName())
.setSenderAvatar(m.getSenderAvatar())
.setContentPre(m.getContentPre())
.setContent(m.getContent())
.setAttachments(m.getAttachments())
.setImages(m.getImages())