Merge branch 'prod/20260407' into test
This commit is contained in:
commit
d05aa4a91c
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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)) {
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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())
|
||||
))
|
||||
);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -30,6 +30,9 @@ public class ChatMessageDTO {
|
|||
// 发送者头像
|
||||
private String senderAvatar;
|
||||
|
||||
// 消息内容前缀
|
||||
private String contentPre;
|
||||
|
||||
// 消息内容
|
||||
private String content;
|
||||
|
||||
|
|
|
|||
|
|
@ -24,6 +24,9 @@ public class ChatMessageVO {
|
|||
// 发送者头像
|
||||
private String senderAvatar;
|
||||
|
||||
// 消息内容前缀
|
||||
private String contentPre;
|
||||
|
||||
// 消息内容
|
||||
private String content;
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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())
|
||||
|
|
|
|||
Loading…
Reference in New Issue