Merge branch 'prod/20260407' into test
This commit is contained in:
commit
d39d05be51
|
|
@ -829,21 +829,31 @@ public class TicketController extends ControllerBase {
|
|||
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);
|
||||
if (StrUtil.isNotBlank(aliyunCode)) {
|
||||
messageVOS.forEach(m -> {
|
||||
if (m.getSenderId() == 0 && !StrUtil.equals(languageCode, Constant.DEFAULT_LANGUAGE_CODE)) {
|
||||
m.setSenderName(aliYunTranslate.translateWord(m.getSenderName(), aliyunCode));
|
||||
m.setContent(m.getContentPre() + aliYunTranslate.translateWord(m.getContent(), aliyunCode));
|
||||
if (StrUtil.equals(m.getFrom(), "call")) {
|
||||
if (StrUtil.equals(m.getContent(), "发起了视频通话")) {
|
||||
if (StrUtil.equals(m.getSenderFrom(), Constant.FROM_ADMIN) && Objects.equals(m.getSenderId(), userId)) {
|
||||
m.setContent(aliYunTranslate.translateWord("您" + m.getContent(), aliyunCode));
|
||||
} else {
|
||||
m.setContent(m.getSenderName() + aliYunTranslate.translateWord(m.getContent(), aliyunCode));
|
||||
}
|
||||
} else {
|
||||
m.setContent(aliYunTranslate.translateWord(m.getContent(), aliyunCode));
|
||||
}
|
||||
} else {
|
||||
if (m.isWithdrawn()) {
|
||||
m.setContent(aliYunTranslate.translateWord(m.getContent(), aliyunCode));
|
||||
}
|
||||
if (Objects.nonNull(m.getQuote()) && m.getQuote().isWithdrawn()) {
|
||||
m.getQuote().setContent(aliYunTranslate.translateWord(m.getQuote().getContent(), aliyunCode));
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
vo.setMessages(messageVOS);
|
||||
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"));
|
||||
|
|
@ -1433,12 +1443,13 @@ public class TicketController extends ControllerBase {
|
|||
.setSenderId("admin-uid-" + sendUserId)
|
||||
.setReceiverId(receiveUserFrom + "-uid-" + receiveUserId)
|
||||
.setSendData(new UniPushMessageBody()
|
||||
.setFrom("call")
|
||||
.setTitle("视频通话")
|
||||
.setContentPre(adminUser.getUserName())
|
||||
// .setContentPre(adminUser.getUserName())
|
||||
.setContent("请求与您视频通话")
|
||||
.setPayload(new UniPushMessageCallPayload()
|
||||
.setTitle("视频通话")
|
||||
.setContentPre(adminUser.getUserName())
|
||||
// .setContentPre(adminUser.getUserName())
|
||||
.setContent("请求与您视频通话")
|
||||
.setTicketId(String.valueOf(ticketId))
|
||||
.setTicketType(0)
|
||||
|
|
@ -1456,7 +1467,7 @@ public class TicketController extends ControllerBase {
|
|||
} else {
|
||||
ssePushService.sendTicketCallToAdmin(adminUser, receiveUserId, Long.valueOf(ticketId));
|
||||
}
|
||||
ticketEventPublisher.publishTicketCallBeginEvent(ticketId, adminUser.getUserName());
|
||||
ticketEventPublisher.publishTicketCallBeginEvent(ticketId, adminUser);
|
||||
stringRedisTemplate.opsForSet().add(Constant.REDIS_KEY_TICKET_CALL_WAIT + ticketId, receiveUserFrom + "-uid-" + receiveUserId);
|
||||
stringRedisTemplate.expire(Constant.REDIS_KEY_TICKET_CALL_WAIT + ticketId, 1, TimeUnit.MINUTES);
|
||||
return ApiResult.success();
|
||||
|
|
@ -1470,11 +1481,6 @@ public class TicketController extends ControllerBase {
|
|||
@PostMapping("addCallUser")
|
||||
public ApiResult<Void> addCallUser(@Valid @RequestBody CallUserAddRequest request) {
|
||||
AdminUser adminUser = adminUserService.getById(AdminUserUtil.getUserId());
|
||||
// TicketCall ticketCall = ticketCallService.lambdaQuery()
|
||||
// .eq(TicketCall::getTicketId, request.getTicketId())
|
||||
// .eq(TicketCall::getState, 1)
|
||||
// .one();
|
||||
// VUtils.trueThrowBusinessError(Objects.isNull(ticketCall)).throwMessage("未在通话中");
|
||||
List<String> userNames = new ArrayList<>();
|
||||
request.getUserIds().forEach(userId -> {
|
||||
AdminUser adminUser1 = adminUserService.getById(userId);
|
||||
|
|
@ -1486,12 +1492,13 @@ public class TicketController extends ControllerBase {
|
|||
.setSenderId("admin-uid-" + adminUser.getId())
|
||||
.setReceiverId("admin-uid-" + userId)
|
||||
.setSendData(new UniPushMessageBody()
|
||||
.setFrom("call")
|
||||
.setTitle("视频通话")
|
||||
.setContentPre(adminUser.getUserName())
|
||||
// .setContentPre(adminUser.getUserName())
|
||||
.setContent("请求与您视频通话")
|
||||
.setPayload(new UniPushMessageCallPayload()
|
||||
.setTitle("视频通话")
|
||||
.setContentPre(adminUser.getUserName())
|
||||
// .setContentPre(adminUser.getUserName())
|
||||
.setContent("请求与您视频通话")
|
||||
.setTicketId(String.valueOf(request.getTicketId()))
|
||||
.setTicketType(0)
|
||||
|
|
@ -1537,6 +1544,7 @@ public class TicketController extends ControllerBase {
|
|||
.setSenderId("admin-uid-" + AdminUserUtil.getUserId())//不重要
|
||||
.setReceiverId("admin-uid-" + AdminUserUtil.getUserId())
|
||||
.setSendData(new UniPushMessageBody()
|
||||
.setFrom("call")
|
||||
.setTitle("视频通话")
|
||||
.setContent("加入通话")
|
||||
.setPayload(new UniPushMessageCallPayload()
|
||||
|
|
@ -1568,6 +1576,7 @@ public class TicketController extends ControllerBase {
|
|||
.setSenderId(uid)//不重要
|
||||
.setReceiverId(uid)
|
||||
.setSendData(new UniPushMessageBody()
|
||||
.setFrom("call")
|
||||
.setTitle("视频通话")
|
||||
.setContent("视频通话结束")
|
||||
.setPayload(new UniPushMessageCallPayload()
|
||||
|
|
@ -1589,6 +1598,7 @@ public class TicketController extends ControllerBase {
|
|||
.setSenderId(Constant.FROM_ADMIN + "-uid-" + AdminUserUtil.getUserId())//不重要
|
||||
.setReceiverId(request.getFrom() + "-uid-" + request.getFromUserId())
|
||||
.setSendData(new UniPushMessageBody()
|
||||
.setFrom("call")
|
||||
.setTitle("视频通话")
|
||||
.setContent("视频通话拒接")
|
||||
.setPayload(new UniPushMessageCallPayload()
|
||||
|
|
@ -1596,6 +1606,7 @@ public class TicketController extends ControllerBase {
|
|||
.setTicketId(String.valueOf(request.getTicketId()))
|
||||
.setTicketType(ticket.getType())
|
||||
.setUserId(AdminUserUtil.getUserId())
|
||||
.setUserName(AdminUserUtil.getUserName())
|
||||
.setCategory("ticketCallReject")
|
||||
.setFrom("admin")
|
||||
)
|
||||
|
|
|
|||
|
|
@ -1,9 +1,11 @@
|
|||
package com.nflg.mobilebroken.admin.event;
|
||||
|
||||
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.ChatMessageDTO;
|
||||
import com.nflg.mobilebroken.common.util.MultilingualUtil;
|
||||
import com.nflg.mobilebroken.repository.entity.AdminUser;
|
||||
import com.nflg.mobilebroken.repository.service.TicketChatService;
|
||||
import com.nflg.mobilebroken.starter.service.impl.AliYunTranslate;
|
||||
import org.springframework.beans.BeansException;
|
||||
|
|
@ -16,16 +18,16 @@ import java.time.Instant;
|
|||
public class TicketCallBeginEvent extends ApplicationEvent implements ApplicationContextAware {
|
||||
|
||||
private final Integer ticketId;
|
||||
private final String userName;
|
||||
private final AdminUser adminUser;
|
||||
private final String language;
|
||||
|
||||
private SsePushService ssePushService;
|
||||
private TicketChatService ticketChatService;
|
||||
|
||||
public TicketCallBeginEvent(Object source, Integer ticketId, String userName, String language) {
|
||||
public TicketCallBeginEvent(Object source, Integer ticketId, AdminUser adminUser, String language) {
|
||||
super(source);
|
||||
this.ticketId = ticketId;
|
||||
this.userName = userName;
|
||||
this.adminUser = adminUser;
|
||||
this.language = language;
|
||||
}
|
||||
|
||||
|
|
@ -40,9 +42,10 @@ public class TicketCallBeginEvent extends ApplicationEvent implements Applicatio
|
|||
.setId(cn.hutool.core.util.IdUtil.getSnowflakeNextIdStr())
|
||||
.setFrom("call")
|
||||
.setTicketState(TicketState.Processing.getState())
|
||||
.setSenderId(0)
|
||||
.setSenderName("通话助手")
|
||||
.setContentPre(userName)
|
||||
.setSenderFrom(Constant.FROM_ADMIN)
|
||||
.setSenderId(adminUser.getId())
|
||||
.setSenderName(adminUser.getUserName())
|
||||
.setContentPre(adminUser.getUserName())
|
||||
.setContent("发起了视频通话")
|
||||
.setCreateTime(Instant.now());
|
||||
ticketChatService.addMessage(Long.valueOf(ticketId), message);
|
||||
|
|
|
|||
|
|
@ -1,12 +1,14 @@
|
|||
package com.nflg.mobilebroken.admin.event;
|
||||
|
||||
import cn.hutool.core.collection.CollectionUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.nflg.mobilebroken.admin.service.ShengWangService;
|
||||
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.IAppUserService;
|
||||
import com.nflg.mobilebroken.repository.service.TicketChatService;
|
||||
import com.nflg.mobilebroken.starter.service.UniPushService;
|
||||
import org.springframework.beans.BeansException;
|
||||
|
|
@ -28,6 +30,7 @@ public class TicketCallEndEvent extends ApplicationEvent implements ApplicationC
|
|||
private ShengWangService shengWangService;
|
||||
private StringRedisTemplate stringRedisTemplate;
|
||||
private UniPushService uniPushService;
|
||||
private IAppUserService appUserService;
|
||||
|
||||
public TicketCallEndEvent(Object source, TicketDTO ticket) {
|
||||
super(source);
|
||||
|
|
@ -41,6 +44,7 @@ public class TicketCallEndEvent extends ApplicationEvent implements ApplicationC
|
|||
this.shengWangService = applicationContext.getBean(ShengWangService.class);
|
||||
this.stringRedisTemplate = applicationContext.getBean(StringRedisTemplate.class);
|
||||
this.uniPushService = applicationContext.getBean(UniPushService.class);
|
||||
this.appUserService = applicationContext.getBean(IAppUserService.class);
|
||||
}
|
||||
|
||||
public void send() throws IOException, InterruptedException {
|
||||
|
|
@ -67,6 +71,7 @@ public class TicketCallEndEvent extends ApplicationEvent implements ApplicationC
|
|||
.setSenderId(from + "-uid-0")//不重要
|
||||
.setReceiverId(from + "-uid-" + userId)
|
||||
.setSendData(new UniPushMessageBody()
|
||||
.setFrom("call")
|
||||
.setTitle("视频通话结束")
|
||||
.setPayload(new UniPushMessageCallPayload()
|
||||
.setTicketId(String.valueOf(ticket.getId()))
|
||||
|
|
|
|||
|
|
@ -3,6 +3,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.AdminUser;
|
||||
import com.nflg.mobilebroken.repository.entity.Ticket;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
import org.springframework.context.ApplicationEventPublisher;
|
||||
|
|
@ -44,9 +45,9 @@ public class TicketEventPublisher {
|
|||
eventPublisher.publishEvent(event);
|
||||
}
|
||||
|
||||
public void publishTicketCallBeginEvent(Integer ticketId, String userName) {
|
||||
public void publishTicketCallBeginEvent(Integer ticketId, AdminUser adminUser) {
|
||||
String language = MultilingualUtil.getLanguage();
|
||||
TicketCallBeginEvent event = new TicketCallBeginEvent(this, ticketId, userName, language);
|
||||
TicketCallBeginEvent event = new TicketCallBeginEvent(this, ticketId, adminUser, language);
|
||||
event.setApplicationContext(applicationContext);
|
||||
eventPublisher.publishEvent(event);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -411,21 +411,31 @@ public class TicketController extends ControllerBase {
|
|||
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);
|
||||
if (StrUtil.isNotBlank(aliyunCode)) {
|
||||
messageVOS.forEach(m -> {
|
||||
if (m.getSenderId() == 0 && !StrUtil.equals(languageCode, Constant.DEFAULT_LANGUAGE_CODE)) {
|
||||
m.setSenderName(aliYunTranslate.translateWord(m.getSenderName(), aliyunCode));
|
||||
m.setContent(m.getContentPre() + aliYunTranslate.translateWord(m.getContent(), aliyunCode));
|
||||
if (StrUtil.equals(m.getFrom(), "call")) {
|
||||
if (StrUtil.equals(m.getContent(), "发起了视频通话")) {
|
||||
if (StrUtil.equals(m.getSenderFrom(), Constant.FROM_APP) && Objects.equals(m.getSenderId(), userId)) {
|
||||
m.setContent(aliYunTranslate.translateWord("您" + m.getContent(), aliyunCode));
|
||||
} else {
|
||||
m.setContent(m.getSenderName() + aliYunTranslate.translateWord(m.getContent(), aliyunCode));
|
||||
}
|
||||
} else {
|
||||
m.setContent(aliYunTranslate.translateWord(m.getContent(), aliyunCode));
|
||||
}
|
||||
} else {
|
||||
if (m.isWithdrawn()) {
|
||||
m.setContent(aliYunTranslate.translateWord(m.getContent(), aliyunCode));
|
||||
}
|
||||
if (Objects.nonNull(m.getQuote()) && m.getQuote().isWithdrawn()) {
|
||||
m.getQuote().setContent(aliYunTranslate.translateWord(m.getQuote().getContent(), aliyunCode));
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
vo.setMessages(messageVOS);
|
||||
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"));
|
||||
|
|
@ -634,12 +644,13 @@ public class TicketController extends ControllerBase {
|
|||
.setSenderId(ticket.getUserPlatform() + "-uid-" + ticket.getUserId())
|
||||
.setReceiverId("admin-uid-" + handlerUserId)
|
||||
.setSendData(new UniPushMessageBody()
|
||||
.setFrom("call")
|
||||
.setTitle("视频通话")
|
||||
.setContentPre(appUser.getName())
|
||||
// .setContentPre(appUser.getName())
|
||||
.setContent("请求与您视频通话")
|
||||
.setPayload(new UniPushMessageCallPayload()
|
||||
.setTitle("视频通话")
|
||||
.setContentPre(appUser.getName())
|
||||
// .setContentPre(appUser.getName())
|
||||
.setContent("请求与您视频通话")
|
||||
.setTicketId(String.valueOf(ticketId))
|
||||
.setTicketType(ticket.getType())
|
||||
|
|
@ -654,7 +665,7 @@ public class TicketController extends ControllerBase {
|
|||
);
|
||||
ssePushService.sendTicketCallToAdmin(appUser, handlerUserId, ticketId);
|
||||
// ticketCallService.add(ticketId, AppUserUtil.getUserId(),Constant.FROM_APP, handlerUserId, Constant.FROM_ADMIN);
|
||||
ticketEventPublisher.publishTicketCallBeginEvent(ticketId, appUser.getName());
|
||||
ticketEventPublisher.publishTicketCallBeginEvent(ticketId, appUser);
|
||||
stringRedisTemplate.opsForSet().add(Constant.REDIS_KEY_TICKET_CALL_WAIT + ticketId, Constant.FROM_ADMIN + "-uid-" + handlerUserId);
|
||||
stringRedisTemplate.expire(Constant.REDIS_KEY_TICKET_CALL_WAIT + ticketId, 1, TimeUnit.MINUTES);
|
||||
return ApiResult.success();
|
||||
|
|
@ -679,6 +690,7 @@ public class TicketController extends ControllerBase {
|
|||
.setSenderId(AppUserUtil.getFrom() + "-uid-" + AppUserUtil.getUserId())//不重要
|
||||
.setReceiverId(AppUserUtil.getFrom() + "-uid-" + AppUserUtil.getUserId())
|
||||
.setSendData(new UniPushMessageBody()
|
||||
.setFrom("call")
|
||||
.setTitle("视频通话")
|
||||
.setContent("加入通话")
|
||||
.setPayload(new UniPushMessageCallPayload()
|
||||
|
|
@ -686,6 +698,7 @@ public class TicketController extends ControllerBase {
|
|||
.setTicketId(String.valueOf(ticketId))
|
||||
.setTicketType(ticket.getType())
|
||||
.setUserId(AppUserUtil.getUserId())
|
||||
.setUserName(AppUserUtil.getUserName())
|
||||
.setCategory("ticketCallJoined")
|
||||
.setFrom("app")
|
||||
)
|
||||
|
|
@ -710,6 +723,7 @@ public class TicketController extends ControllerBase {
|
|||
.setSenderId(uid)//不重要
|
||||
.setReceiverId(uid)
|
||||
.setSendData(new UniPushMessageBody()
|
||||
.setFrom("call")
|
||||
.setTitle("视频通话")
|
||||
.setContent("视频通话结束")
|
||||
.setPayload(new UniPushMessageCallPayload()
|
||||
|
|
@ -730,6 +744,7 @@ public class TicketController extends ControllerBase {
|
|||
.setSenderId(AppUserUtil.getFrom() + "-uid-" + AppUserUtil.getUserId())//不重要
|
||||
.setReceiverId(request.getFrom() + "-uid-" + request.getFromUserId())
|
||||
.setSendData(new UniPushMessageBody()
|
||||
.setFrom("call")
|
||||
.setTitle("视频通话")
|
||||
.setContent("视频通话拒接")
|
||||
.setPayload(new UniPushMessageCallPayload()
|
||||
|
|
@ -737,6 +752,7 @@ public class TicketController extends ControllerBase {
|
|||
.setTicketId(String.valueOf(request.getTicketId()))
|
||||
.setTicketType(ticket.getType())
|
||||
.setUserId(AppUserUtil.getUserId())
|
||||
.setUserName(AppUserUtil.getUserName())
|
||||
.setCategory("ticketCallReject")
|
||||
.setFrom("app")
|
||||
)
|
||||
|
|
|
|||
|
|
@ -1,9 +1,11 @@
|
|||
package com.nflg.mobilebroken.cfs.event;
|
||||
|
||||
import com.nflg.mobilebroken.cfs.service.SsePushService;
|
||||
import com.nflg.mobilebroken.common.constant.Constant;
|
||||
import com.nflg.mobilebroken.common.constant.TicketState;
|
||||
import com.nflg.mobilebroken.common.pojo.dto.ChatMessageDTO;
|
||||
import com.nflg.mobilebroken.common.util.MultilingualUtil;
|
||||
import com.nflg.mobilebroken.repository.entity.AppUser;
|
||||
import com.nflg.mobilebroken.repository.service.TicketChatService;
|
||||
import org.springframework.beans.BeansException;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
|
|
@ -15,16 +17,16 @@ import java.time.Instant;
|
|||
public class TicketCallBeginEvent extends ApplicationEvent implements ApplicationContextAware {
|
||||
|
||||
private final Long ticketId;
|
||||
private final String userName;
|
||||
private final AppUser appUser;
|
||||
private final String language;
|
||||
|
||||
private SsePushService ssePushService;
|
||||
private TicketChatService ticketChatService;
|
||||
|
||||
public TicketCallBeginEvent(Object source, Long ticketId, String userName, String language) {
|
||||
public TicketCallBeginEvent(Object source, Long ticketId, AppUser appUser, String language) {
|
||||
super(source);
|
||||
this.ticketId = ticketId;
|
||||
this.userName = userName;
|
||||
this.appUser = appUser;
|
||||
this.language = language;
|
||||
}
|
||||
|
||||
|
|
@ -39,9 +41,10 @@ public class TicketCallBeginEvent extends ApplicationEvent implements Applicatio
|
|||
.setId(cn.hutool.core.util.IdUtil.getSnowflakeNextIdStr())
|
||||
.setFrom("call")
|
||||
.setTicketState(TicketState.Processing.getState())
|
||||
.setSenderId(0)
|
||||
.setSenderName("通话助手")
|
||||
.setContentPre(userName)
|
||||
.setSenderFrom(Constant.FROM_APP)
|
||||
.setSenderId(appUser.getId())
|
||||
.setSenderName(appUser.getName())
|
||||
.setContentPre(appUser.getName())
|
||||
.setContent("发起了视频通话")
|
||||
.setCreateTime(Instant.now());
|
||||
ticketChatService.addMessage(ticketId, message);
|
||||
|
|
|
|||
|
|
@ -1,11 +1,13 @@
|
|||
package com.nflg.mobilebroken.cfs.event;
|
||||
|
||||
import cn.hutool.core.collection.CollectionUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.nflg.mobilebroken.cfs.service.ShengWangService;
|
||||
import com.nflg.mobilebroken.cfs.service.SsePushService;
|
||||
import com.nflg.mobilebroken.common.constant.Constant;
|
||||
import com.nflg.mobilebroken.common.constant.TicketState;
|
||||
import com.nflg.mobilebroken.common.pojo.dto.*;
|
||||
import com.nflg.mobilebroken.repository.service.IAppUserService;
|
||||
import com.nflg.mobilebroken.repository.service.TicketChatService;
|
||||
import com.nflg.mobilebroken.starter.service.UniPushService;
|
||||
import org.springframework.beans.BeansException;
|
||||
|
|
@ -27,6 +29,7 @@ public class TicketCallEndEvent extends ApplicationEvent implements ApplicationC
|
|||
private ShengWangService shengWangService;
|
||||
private StringRedisTemplate stringRedisTemplate;
|
||||
private UniPushService uniPushService;
|
||||
private IAppUserService appUserService;
|
||||
|
||||
public TicketCallEndEvent(Object source, TicketDTO ticket) {
|
||||
super(source);
|
||||
|
|
@ -40,6 +43,7 @@ public class TicketCallEndEvent extends ApplicationEvent implements ApplicationC
|
|||
this.shengWangService = applicationContext.getBean(ShengWangService.class);
|
||||
this.stringRedisTemplate = applicationContext.getBean(StringRedisTemplate.class);
|
||||
this.uniPushService = applicationContext.getBean(UniPushService.class);
|
||||
this.appUserService = applicationContext.getBean(IAppUserService.class);
|
||||
}
|
||||
|
||||
public void send() throws IOException, InterruptedException {
|
||||
|
|
@ -67,6 +71,7 @@ public class TicketCallEndEvent extends ApplicationEvent implements ApplicationC
|
|||
.setSenderId(from + "-uid-0")//不重要
|
||||
.setReceiverId(from + "-uid-" + userId)
|
||||
.setSendData(new UniPushMessageBody()
|
||||
.setFrom("call")
|
||||
.setTitle("视频通话结束")
|
||||
.setPayload(new UniPushMessageCallPayload()
|
||||
.setTicketId(String.valueOf(ticket.getId()))
|
||||
|
|
|
|||
|
|
@ -3,6 +3,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.AppUser;
|
||||
import com.nflg.mobilebroken.repository.entity.Ticket;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
import org.springframework.context.ApplicationEventPublisher;
|
||||
|
|
@ -55,9 +56,9 @@ public class TicketEventPublisher {
|
|||
eventPublisher.publishEvent(event);
|
||||
}
|
||||
|
||||
public void publishTicketCallBeginEvent(Long ticketId, String userName) {
|
||||
public void publishTicketCallBeginEvent(Long ticketId, AppUser appUser) {
|
||||
String language = MultilingualUtil.getLanguage();
|
||||
TicketCallBeginEvent event = new TicketCallBeginEvent(this, ticketId, userName, language);
|
||||
TicketCallBeginEvent event = new TicketCallBeginEvent(this, ticketId, appUser, language);
|
||||
event.setApplicationContext(applicationContext);
|
||||
eventPublisher.publishEvent(event);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -13,6 +13,8 @@ public class Constant {
|
|||
|
||||
public static final String DEFAULT_LANGUAGE_CODE = "cn";
|
||||
|
||||
public static final String HEADER_LANGUAGE = "language";
|
||||
|
||||
public static final String DICTIONARY_TYPE_SERVICE_EVALUATION = "ServiceEvaluation";
|
||||
|
||||
public static final String DICTIONARY_TYPE_EXPERIENCE_EVALUATION = "ExperienceEvaluation";
|
||||
|
|
|
|||
|
|
@ -21,6 +21,9 @@ public class ChatMessageDTO {
|
|||
//来源
|
||||
private String from;
|
||||
|
||||
// 发送者来源,app或者admin
|
||||
private String senderFrom;
|
||||
|
||||
// 发送者id
|
||||
private Integer senderId;
|
||||
|
||||
|
|
|
|||
|
|
@ -9,14 +9,17 @@ import java.util.Objects;
|
|||
@Accessors(chain = true)
|
||||
public class UniPushMessageBody {
|
||||
|
||||
//来源
|
||||
private String from;
|
||||
|
||||
private String title;
|
||||
|
||||
// 消息内容前缀
|
||||
private String contentPre;
|
||||
|
||||
public String getContentPre() {
|
||||
return Objects.isNull(contentPre) ? "" : contentPre + " ";
|
||||
}
|
||||
// // 消息内容前缀
|
||||
// private String contentPre;
|
||||
//
|
||||
// public String getContentPre() {
|
||||
// return Objects.isNull(contentPre) ? "" : contentPre + " ";
|
||||
// }
|
||||
|
||||
private String content;
|
||||
|
||||
|
|
|
|||
|
|
@ -31,12 +31,12 @@ public class UniPushMessageCallPayload {
|
|||
|
||||
private String title;
|
||||
|
||||
// 消息内容前缀
|
||||
private String contentPre;
|
||||
|
||||
public String getContentPre() {
|
||||
return Objects.isNull(contentPre) ? "" : contentPre;
|
||||
}
|
||||
// // 消息内容前缀
|
||||
// private String contentPre;
|
||||
//
|
||||
// public String getContentPre() {
|
||||
// return Objects.isNull(contentPre) ? "" : contentPre;
|
||||
// }
|
||||
|
||||
private String content;
|
||||
|
||||
|
|
|
|||
|
|
@ -15,6 +15,9 @@ public class ChatMessageVO {
|
|||
//来源
|
||||
private String from;
|
||||
|
||||
// 发送者来源,app或者admin
|
||||
private String senderFrom;
|
||||
|
||||
// 发送者id
|
||||
private Integer senderId;
|
||||
|
||||
|
|
|
|||
|
|
@ -830,21 +830,31 @@ public class TicketController extends ControllerBase {
|
|||
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);
|
||||
if (StrUtil.isNotBlank(aliyunCode)) {
|
||||
messageVOS.forEach(m -> {
|
||||
if (m.getSenderId() == 0 && !StrUtil.equals(languageCode, Constant.DEFAULT_LANGUAGE_CODE)) {
|
||||
m.setSenderName(aliYunTranslate.translateWord(m.getSenderName(), aliyunCode));
|
||||
m.setContent(m.getContentPre() + aliYunTranslate.translateWord(m.getContent(), aliyunCode));
|
||||
if (StrUtil.equals(m.getFrom(), "call")) {
|
||||
if (StrUtil.equals(m.getContent(), "发起了视频通话")) {
|
||||
if (StrUtil.equals(m.getSenderFrom(), Constant.FROM_ADMIN) && Objects.equals(m.getSenderId(), userId)) {
|
||||
m.setContent(aliYunTranslate.translateWord("您" + m.getContent(), aliyunCode));
|
||||
} else {
|
||||
m.setContent(m.getSenderName() + aliYunTranslate.translateWord(m.getContent(), aliyunCode));
|
||||
}
|
||||
} else {
|
||||
m.setContent(aliYunTranslate.translateWord(m.getContent(), aliyunCode));
|
||||
}
|
||||
} else {
|
||||
if (m.isWithdrawn()) {
|
||||
m.setContent(aliYunTranslate.translateWord(m.getContent(), aliyunCode));
|
||||
}
|
||||
if (Objects.nonNull(m.getQuote()) && m.getQuote().isWithdrawn()) {
|
||||
m.getQuote().setContent(aliYunTranslate.translateWord(m.getQuote().getContent(), aliyunCode));
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
vo.setMessages(messageVOS);
|
||||
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"));
|
||||
|
|
@ -1403,12 +1413,13 @@ public class TicketController extends ControllerBase {
|
|||
.setSenderId("admin-uid-" + sendUserId)
|
||||
.setReceiverId(receiveUserFrom + "-uid-" + receiveUserId)
|
||||
.setSendData(new UniPushMessageBody()
|
||||
.setFrom("call")
|
||||
.setTitle("视频通话")
|
||||
.setContentPre(adminUser.getUserName())
|
||||
// .setContentPre(adminUser.getUserName())
|
||||
.setContent("请求与您视频通话")
|
||||
.setPayload(new UniPushMessageCallPayload()
|
||||
.setTitle("视频通话")
|
||||
.setContentPre(adminUser.getUserName())
|
||||
// .setContentPre(adminUser.getUserName())
|
||||
.setContent("请求与您视频通话")
|
||||
.setTicketId(String.valueOf(ticketId))
|
||||
.setTicketType(1)
|
||||
|
|
@ -1426,7 +1437,7 @@ public class TicketController extends ControllerBase {
|
|||
} else {
|
||||
ssePushService.sendTicketCallToAdmin(adminUser, receiveUserId, ticketId);
|
||||
}
|
||||
ticketEventPublisher.publishTicketCallBeginEvent(ticketId, adminUser.getUserName());
|
||||
ticketEventPublisher.publishTicketCallBeginEvent(ticketId, adminUser);
|
||||
stringRedisTemplate.opsForSet().add(Constant.REDIS_KEY_TICKET_CALL_WAIT + ticketId, receiveUserFrom + "-uid-" + receiveUserId);
|
||||
stringRedisTemplate.expire(Constant.REDIS_KEY_TICKET_CALL_WAIT + ticketId, 1, TimeUnit.MINUTES);
|
||||
return ApiResult.success();
|
||||
|
|
@ -1456,12 +1467,13 @@ public class TicketController extends ControllerBase {
|
|||
.setSenderId("admin-uid-" + adminUser.getId())
|
||||
.setReceiverId("admin-uid-" + userId)
|
||||
.setSendData(new UniPushMessageBody()
|
||||
.setFrom("call")
|
||||
.setTitle("视频通话")
|
||||
.setContentPre(adminUser.getUserName())
|
||||
// .setContentPre(adminUser.getUserName())
|
||||
.setContent("请求与您视频通话")
|
||||
.setPayload(new UniPushMessageCallPayload()
|
||||
.setTitle("视频通话")
|
||||
.setContentPre(adminUser.getUserName())
|
||||
// .setContentPre(adminUser.getUserName())
|
||||
.setContent("请求与您视频通话")
|
||||
.setTicketId(String.valueOf(request.getTicketId()))
|
||||
.setTicketType(1)
|
||||
|
|
|
|||
|
|
@ -1,9 +1,11 @@
|
|||
package com.nflg.mobilebroken.gongfu.event;
|
||||
|
||||
import com.nflg.mobilebroken.common.constant.Constant;
|
||||
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.entity.AdminUser;
|
||||
import com.nflg.mobilebroken.repository.service.TicketChatService;
|
||||
import org.springframework.beans.BeansException;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
|
|
@ -15,16 +17,16 @@ import java.time.Instant;
|
|||
public class TicketCallBeginEvent extends ApplicationEvent implements ApplicationContextAware {
|
||||
|
||||
private final Long ticketId;
|
||||
private final String userName;
|
||||
private final AdminUser adminUser;
|
||||
private final String language;
|
||||
|
||||
private SsePushService ssePushService;
|
||||
private TicketChatService ticketChatService;
|
||||
|
||||
public TicketCallBeginEvent(Object source, Long ticketId, String userName, String language) {
|
||||
public TicketCallBeginEvent(Object source, Long ticketId, AdminUser adminUser, String language) {
|
||||
super(source);
|
||||
this.ticketId = ticketId;
|
||||
this.userName = userName;
|
||||
this.adminUser = adminUser;
|
||||
this.language = language;
|
||||
}
|
||||
|
||||
|
|
@ -39,9 +41,10 @@ public class TicketCallBeginEvent extends ApplicationEvent implements Applicatio
|
|||
.setId(cn.hutool.core.util.IdUtil.getSnowflakeNextIdStr())
|
||||
.setFrom("call")
|
||||
.setTicketState(TicketState.Processing.getState())
|
||||
.setSenderId(0)
|
||||
.setSenderName("通话助手")
|
||||
.setContentPre(userName)
|
||||
.setSenderFrom(Constant.FROM_ADMIN)
|
||||
.setSenderId(adminUser.getId())
|
||||
.setSenderName(adminUser.getUserName())
|
||||
.setContentPre(adminUser.getUserName())
|
||||
.setContent("发起了视频通话")
|
||||
.setCreateTime(Instant.now());
|
||||
ticketChatService.addMessage(ticketId, message);
|
||||
|
|
|
|||
|
|
@ -2,6 +2,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.AdminUser;
|
||||
import com.nflg.mobilebroken.repository.entity.GongfuTicket;
|
||||
import org.springframework.context.ApplicationContext;
|
||||
import org.springframework.context.ApplicationEventPublisher;
|
||||
|
|
@ -43,9 +44,9 @@ public class TicketEventPublisher {
|
|||
eventPublisher.publishEvent(event);
|
||||
}
|
||||
|
||||
public void publishTicketCallBeginEvent(Long ticketId, String userName) {
|
||||
public void publishTicketCallBeginEvent(Long ticketId, AdminUser adminUser) {
|
||||
String language = MultilingualUtil.getLanguage();
|
||||
TicketCallBeginEvent event = new TicketCallBeginEvent(this, ticketId, userName, language);
|
||||
TicketCallBeginEvent event = new TicketCallBeginEvent(this, ticketId, adminUser, language);
|
||||
event.setApplicationContext(applicationContext);
|
||||
eventPublisher.publishEvent(event);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -63,6 +63,7 @@ public class TicketChatService {
|
|||
.setId(m.getId())
|
||||
.setFrom(m.getFrom())
|
||||
.setTicketState(m.getTicketState())
|
||||
.setSenderFrom(m.getSenderFrom())
|
||||
.setSenderId(m.getSenderId())
|
||||
.setSenderName(m.getSenderName())
|
||||
.setSenderAvatar(m.getSenderAvatar())
|
||||
|
|
@ -79,6 +80,7 @@ public class TicketChatService {
|
|||
.setId(m.getQuote().getId())
|
||||
.setFrom(m.getQuote().getFrom())
|
||||
.setTicketState(m.getQuote().getTicketState())
|
||||
.setSenderFrom(m.getQuote().getSenderFrom())
|
||||
.setSenderId(m.getQuote().getSenderId())
|
||||
.setSenderName(m.getQuote().getSenderName())
|
||||
.setSenderAvatar(m.getQuote().getSenderAvatar())
|
||||
|
|
|
|||
|
|
@ -61,6 +61,7 @@
|
|||
, u.title_id
|
||||
, p.position_name AS 'title'
|
||||
, u.type
|
||||
,u.language_code
|
||||
FROM app_user u
|
||||
LEFT JOIN t_base_customer c ON u.company_id = c.id
|
||||
LEFT JOIN t_base_area a1 ON u.area_id = a1.id
|
||||
|
|
|
|||
|
|
@ -1,6 +1,9 @@
|
|||
package com.nflg.mobilebroken.starter.interceptor;
|
||||
|
||||
import cn.dev33.satoken.session.SaSession;
|
||||
import cn.dev33.satoken.stp.StpUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.nflg.mobilebroken.common.constant.Constant;
|
||||
import com.nflg.mobilebroken.common.util.MultilingualUtil;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.web.servlet.HandlerInterceptor;
|
||||
|
|
@ -14,12 +17,14 @@ public class LanguageInterceptor implements HandlerInterceptor {
|
|||
@Override
|
||||
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
|
||||
// 从请求头中获取 language 参数
|
||||
String language = request.getHeader("language");
|
||||
String language = request.getHeader(Constant.HEADER_LANGUAGE);
|
||||
if (StrUtil.isNotBlank(language)) {
|
||||
MultilingualUtil.setLanguage(language);
|
||||
StpUtil.getTokenSession().set(Constant.HEADER_LANGUAGE, language);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
|
||||
// 请求完成后清理 ThreadLocal,防止内存泄漏
|
||||
|
|
|
|||
|
|
@ -35,7 +35,7 @@ public class UniPushService {
|
|||
|
||||
@Async("httpExecutor")
|
||||
public CompletableFuture<Void> send(UniPushMessage message) {
|
||||
translate(message);
|
||||
// translate(message, languageCode);
|
||||
log.info("发送uniapp消息:{}", JSONUtil.toJsonStr(message));
|
||||
RestTemplate restTemplate = new RestTemplate();
|
||||
ResponseEntity<String> response = restTemplate.postForEntity(url, message, String.class);
|
||||
|
|
@ -43,31 +43,32 @@ public class UniPushService {
|
|||
return CompletableFuture.completedFuture(null);
|
||||
}
|
||||
|
||||
private void translate(UniPushMessage message) {
|
||||
String languageCode = MultilingualUtil.getLanguage();
|
||||
String aliyunCode = Constant.LANGUAGE_ALIYUN_MAP.get(languageCode);
|
||||
if (StrUtil.isNotBlank(aliyunCode) && !StrUtil.equals(languageCode, Constant.DEFAULT_LANGUAGE_CODE)) {
|
||||
UniPushMessageBody body = message.getSendData();
|
||||
body.setTitle(aliYunTranslate.translateWord(body.getTitle(), aliyunCode));
|
||||
body.setContent(body.getContentPre() + aliYunTranslate.translateWord(body.getContent(), aliyunCode));
|
||||
if (body.getPayload() instanceof UniPushMessageCallPayload) {
|
||||
UniPushMessageCallPayload payload = (UniPushMessageCallPayload) body.getPayload();
|
||||
payload.setTitle(aliYunTranslate.translateWord(payload.getTitle(), aliyunCode));
|
||||
payload.setContent(payload.getContentPre() + aliYunTranslate.translateWord(payload.getContent(), aliyunCode));
|
||||
}
|
||||
}
|
||||
}
|
||||
// private void translate(UniPushMessage message, String languageCode) {
|
||||
// if (!StrUtil.equals(languageCode, Constant.DEFAULT_LANGUAGE_CODE)) {
|
||||
// String aliyunCode = Constant.LANGUAGE_ALIYUN_MAP.get(languageCode);
|
||||
// if (StrUtil.isNotBlank(aliyunCode)) {
|
||||
// UniPushMessageBody body = message.getSendData();
|
||||
// body.setTitle(aliYunTranslate.translateWord(body.getTitle(), aliyunCode));
|
||||
// body.setContent(body.getContentPre() + aliYunTranslate.translateWord(body.getContent(), aliyunCode));
|
||||
// if (body.getPayload() instanceof UniPushMessageCallPayload) {
|
||||
// UniPushMessageCallPayload payload = (UniPushMessageCallPayload) body.getPayload();
|
||||
// payload.setTitle(aliYunTranslate.translateWord(payload.getTitle(), aliyunCode));
|
||||
// payload.setContent(payload.getContentPre() + aliYunTranslate.translateWord(payload.getContent(), aliyunCode));
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
public void sendTicketMessage(String from, String to, ChatMessageDTO data) {
|
||||
send(new UniPushMessage()
|
||||
.setSenderId(from)
|
||||
.setReceiverId(to)
|
||||
.setSendData(new UniPushMessageBody()
|
||||
.setTitle("工单聊天消息")
|
||||
.setContent(CollectionUtil.isNotEmpty(data.getAttachments()) ? "文件" : (CollectionUtil.isNotEmpty(data.getImages()) ? "图片" : data.getContent()))
|
||||
)
|
||||
);
|
||||
}
|
||||
// public void sendTicketMessage(String from, String to, ChatMessageDTO data) {
|
||||
// send(new UniPushMessage()
|
||||
// .setSenderId(from)
|
||||
// .setReceiverId(to)
|
||||
// .setSendData(new UniPushMessageBody()
|
||||
// .setTitle("工单聊天消息")
|
||||
// .setContent(CollectionUtil.isNotEmpty(data.getAttachments()) ? "文件" : (CollectionUtil.isNotEmpty(data.getImages()) ? "图片" : data.getContent()))
|
||||
// )
|
||||
// );
|
||||
// }
|
||||
|
||||
public void sendTodoMessageFromAdmin(String ticketId, Integer type, String platform, Integer userId, String content) {
|
||||
send(new UniPushMessage()
|
||||
|
|
|
|||
Loading…
Reference in New Issue