From 4abd7f41bb7ca12c390fd8fe67f3b0da50d354ef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=B9=E9=B9=8F=E9=A3=9E?= Date: Sat, 11 Apr 2026 08:46:48 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90=E4=BC=98=E5=8C=96=E3=80=91=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E5=A4=9A=E8=AF=AD=E8=A8=80=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/controller/TicketController.java | 48 ++++-------- .../admin/event/TicketCallBeginEvent.java | 14 ++-- .../admin/event/TicketCallEndEvent.java | 4 +- .../admin/publisher/TicketEventPublisher.java | 4 +- .../admin/service/SsePushService.java | 75 ++++++++++++------- .../admin/task/TicketScheduledTasks.java | 4 +- .../cfs/controller/ControllerBase.java | 16 ---- .../cfs/controller/TicketController.java | 36 ++++----- .../cfs/event/TicketCallBeginEvent.java | 5 +- .../cfs/publisher/TicketEventPublisher.java | 4 +- .../common/pojo/dto/ChatMessageDTO.java | 3 + .../common/pojo/vo/ChatMessageVO.java | 3 + .../gongfu/controller/TicketController.java | 33 +++----- .../gongfu/event/TicketCallBeginEvent.java | 5 +- .../publisher/TicketEventPublisher.java | 4 +- .../repository/service/TicketChatService.java | 2 + 16 files changed, 126 insertions(+), 134 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 2bb8b28c..54c92f13 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 @@ -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 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 readeds = stringRedisTemplate.opsForSet().members(key); -// Set 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(); diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/event/TicketCallBeginEvent.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/event/TicketCallBeginEvent.java index 29dc8be9..775ee421 100644 --- a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/event/TicketCallBeginEvent.java +++ b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/event/TicketCallBeginEvent.java @@ -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); } } 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 7b4ade80..c6097a5a 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 @@ -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)) { diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/publisher/TicketEventPublisher.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/publisher/TicketEventPublisher.java index 0e30d8e9..0aae2a3a 100644 --- a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/publisher/TicketEventPublisher.java +++ b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/publisher/TicketEventPublisher.java @@ -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); } diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/service/SsePushService.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/service/SsePushService.java index b3c50d0a..09ecd500 100644 --- a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/service/SsePushService.java +++ b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/service/SsePushService.java @@ -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()) )) ); } diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/task/TicketScheduledTasks.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/task/TicketScheduledTasks.java index cc818781..8ca08ae1 100644 --- a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/task/TicketScheduledTasks.java +++ b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/task/TicketScheduledTasks.java @@ -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 { diff --git a/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/controller/ControllerBase.java b/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/controller/ControllerBase.java index b6a7e4f6..2536c27c 100644 --- a/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/controller/ControllerBase.java +++ b/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/controller/ControllerBase.java @@ -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; - } } \ No newline at end of file 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 c6962df2..1d8e7141 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 @@ -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 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 readeds = stringRedisTemplate.opsForSet().members(key); -// Set 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); diff --git a/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/event/TicketCallBeginEvent.java b/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/event/TicketCallBeginEvent.java index 34597915..de91689e 100644 --- a/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/event/TicketCallBeginEvent.java +++ b/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/event/TicketCallBeginEvent.java @@ -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 diff --git a/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/publisher/TicketEventPublisher.java b/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/publisher/TicketEventPublisher.java index 3b7b72e7..5fa8f3a5 100644 --- a/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/publisher/TicketEventPublisher.java +++ b/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/publisher/TicketEventPublisher.java @@ -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); } diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/dto/ChatMessageDTO.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/dto/ChatMessageDTO.java index 469f7a3c..fb043a34 100644 --- a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/dto/ChatMessageDTO.java +++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/dto/ChatMessageDTO.java @@ -30,6 +30,9 @@ public class ChatMessageDTO { // 发送者头像 private String senderAvatar; + // 消息内容前缀 + private String contentPre; + // 消息内容 private String content; diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ChatMessageVO.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ChatMessageVO.java index 97bebc10..d1e44849 100644 --- a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ChatMessageVO.java +++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/vo/ChatMessageVO.java @@ -24,6 +24,9 @@ public class ChatMessageVO { // 发送者头像 private String senderAvatar; + // 消息内容前缀 + private String contentPre; + // 消息内容 private String content; diff --git a/nflg-mobilebroken-gongfu/src/main/java/com/nflg/mobilebroken/gongfu/controller/TicketController.java b/nflg-mobilebroken-gongfu/src/main/java/com/nflg/mobilebroken/gongfu/controller/TicketController.java index ef510143..af3be227 100644 --- a/nflg-mobilebroken-gongfu/src/main/java/com/nflg/mobilebroken/gongfu/controller/TicketController.java +++ b/nflg-mobilebroken-gongfu/src/main/java/com/nflg/mobilebroken/gongfu/controller/TicketController.java @@ -829,30 +829,17 @@ public class TicketController extends ControllerBase { Integer userId = AdminUserUtil.getUserId(); MessageVO vo = new MessageVO(); List 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 readeds = stringRedisTemplate.opsForSet().members(key); -// Set 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); diff --git a/nflg-mobilebroken-gongfu/src/main/java/com/nflg/mobilebroken/gongfu/event/TicketCallBeginEvent.java b/nflg-mobilebroken-gongfu/src/main/java/com/nflg/mobilebroken/gongfu/event/TicketCallBeginEvent.java index 08493829..28423875 100644 --- a/nflg-mobilebroken-gongfu/src/main/java/com/nflg/mobilebroken/gongfu/event/TicketCallBeginEvent.java +++ b/nflg-mobilebroken-gongfu/src/main/java/com/nflg/mobilebroken/gongfu/event/TicketCallBeginEvent.java @@ -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 diff --git a/nflg-mobilebroken-gongfu/src/main/java/com/nflg/mobilebroken/gongfu/publisher/TicketEventPublisher.java b/nflg-mobilebroken-gongfu/src/main/java/com/nflg/mobilebroken/gongfu/publisher/TicketEventPublisher.java index 7f835ad3..dfeeaff2 100644 --- a/nflg-mobilebroken-gongfu/src/main/java/com/nflg/mobilebroken/gongfu/publisher/TicketEventPublisher.java +++ b/nflg-mobilebroken-gongfu/src/main/java/com/nflg/mobilebroken/gongfu/publisher/TicketEventPublisher.java @@ -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); } diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/TicketChatService.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/TicketChatService.java index 4e922fa6..8bdb0b3a 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/TicketChatService.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/TicketChatService.java @@ -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())