【优化】添加多语言支持

This commit is contained in:
曹鹏飞 2026-04-13 09:39:28 +08:00
parent 23e1f093c8
commit b7e9df3c12
9 changed files with 290 additions and 243 deletions

View File

@ -436,7 +436,7 @@ public class TicketController extends ControllerBase {
//推送消息 //推送消息
ssePushService.sendTicketMessage(Long.valueOf(ticket.getId()), message, MultilingualUtil.getLanguage()); ssePushService.sendTicketMessage(Long.valueOf(ticket.getId()), message, MultilingualUtil.getLanguage());
request.getUserIds().forEach(userId -> { request.getUserIds().forEach(userId -> {
uniPushService.sendTodoMessageFromAdmin(String.valueOf(ticket.getId()), 0, Constant.FROM_ADMIN, userId, "分派工单"); uniPushService.sendTodoMessageFromAdmin(String.valueOf(ticket.getId()), 0, Constant.FROM_ADMIN, userId, "分派工单", Constant.DEFAULT_LANGUAGE_CODE);
}); });
adminMessageService.setReaded(AdminUserUtil.getUserId(), Long.valueOf(ticket.getId()), MessageSubType.TicketToBeAssigned.getState()); adminMessageService.setReaded(AdminUserUtil.getUserId(), Long.valueOf(ticket.getId()), MessageSubType.TicketToBeAssigned.getState());
return ApiResult.success(); return ApiResult.success();
@ -496,9 +496,12 @@ public class TicketController extends ControllerBase {
ticketChatService.addMessage(Long.valueOf(id), message); ticketChatService.addMessage(Long.valueOf(id), message);
//推送消息 //推送消息
ssePushService.sendTicketMessage(Long.valueOf(id), message, MultilingualUtil.getLanguage()); ssePushService.sendTicketMessage(Long.valueOf(id), message, MultilingualUtil.getLanguage());
uniPushService.sendTodoMessageFromAdmin(String.valueOf(ticket.getId()), 0, ticket.getUserPlatform(), ticket.getUserId(), "工单已完成"); String receiverUserLanguageCode = StrUtil.equals(ticket.getUserPlatform(), Constant.FROM_ADMIN)
? Constant.DEFAULT_LANGUAGE_CODE
: appUserService.getById(ticket.getUserId()).getLanguageCode();
uniPushService.sendTodoMessageFromAdmin(String.valueOf(ticket.getId()), 0, ticket.getUserPlatform(), ticket.getUserId(), "工单已完成", receiverUserLanguageCode);
deviceTypeService.getCqmsByDeviceType(ticket.getDeviceNo()).forEach(cqm -> { deviceTypeService.getCqmsByDeviceType(ticket.getDeviceNo()).forEach(cqm -> {
uniPushService.sendTodoMessageFromAdmin(String.valueOf(ticket.getId()), 0, Constant.FROM_ADMIN, cqm, "工单已完成"); uniPushService.sendTodoMessageFromAdmin(String.valueOf(ticket.getId()), 0, Constant.FROM_ADMIN, cqm, "工单已完成", Constant.DEFAULT_LANGUAGE_CODE);
}); });
} }
return ApiResult.success(); return ApiResult.success();
@ -526,7 +529,7 @@ public class TicketController extends ControllerBase {
ticketChatService.addMessage(Long.valueOf(id), message); ticketChatService.addMessage(Long.valueOf(id), message);
//推送消息 //推送消息
ssePushService.sendTicketMessage(Long.valueOf(id), message, MultilingualUtil.getLanguage()); ssePushService.sendTicketMessage(Long.valueOf(id), message, MultilingualUtil.getLanguage());
uniPushService.sendTodoMessageFromAdmin(String.valueOf(ticket.getId()), 0, Constant.FROM_ADMIN, StrUtil.splitToInt(ticket.getHandle(), ",")[0], "工单被驳回"); uniPushService.sendTodoMessageFromAdmin(String.valueOf(ticket.getId()), 0, Constant.FROM_ADMIN, StrUtil.splitToInt(ticket.getHandle(), ",")[0], "工单被驳回", Constant.DEFAULT_LANGUAGE_CODE);
adminMessageService.setReaded(AdminUserUtil.getUserId(), Long.valueOf(id), MessageSubType.TicketSolutionAudit.getState()); adminMessageService.setReaded(AdminUserUtil.getUserId(), Long.valueOf(id), MessageSubType.TicketSolutionAudit.getState());
} }
return ApiResult.success(); return ApiResult.success();
@ -1429,6 +1432,9 @@ public class TicketController extends ControllerBase {
// VUtils.trueThrowBusinessError(ticketCallJoinService.isInCall(ticket.getId(), receiveUserFrom, receiveUserId)).throwMessage("对方正在通话中"); // VUtils.trueThrowBusinessError(ticketCallJoinService.isInCall(ticket.getId(), receiveUserFrom, receiveUserId)).throwMessage("对方正在通话中");
// ticketCallService.add(ticketId, sendUserId, sendUserFrom, receiveUserId, receiveUserFrom); // ticketCallService.add(ticketId, sendUserId, sendUserFrom, receiveUserId, receiveUserFrom);
AdminUser adminUser = adminUserService.getById(sendUserId); AdminUser adminUser = adminUserService.getById(sendUserId);
String receiverUserLanguageCode = StrUtil.equals(receiveUserFrom, Constant.FROM_ADMIN)
? Constant.DEFAULT_LANGUAGE_CODE
: appUserService.getById(receiveUserId).getLanguageCode();
uniPushService.send(new UniPushMessage() uniPushService.send(new UniPushMessage()
.setSenderId("admin-uid-" + sendUserId) .setSenderId("admin-uid-" + sendUserId)
.setReceiverId(receiveUserFrom + "-uid-" + receiveUserId) .setReceiverId(receiveUserFrom + "-uid-" + receiveUserId)
@ -1450,7 +1456,7 @@ public class TicketController extends ControllerBase {
.setReceiverId(receiveUserFrom + "-uid-" + receiveUserId) .setReceiverId(receiveUserFrom + "-uid-" + receiveUserId)
) )
) )
); , receiverUserLanguageCode);
if (StrUtil.equals(Constant.FROM_APP, ticket.getUserPlatform())) { if (StrUtil.equals(Constant.FROM_APP, ticket.getUserPlatform())) {
ssePushService.sendTicketCallToApp(adminUser, ticket.getUserId(), Long.valueOf(ticketId)); ssePushService.sendTicketCallToApp(adminUser, ticket.getUserId(), Long.valueOf(ticketId));
} else { } else {
@ -1470,11 +1476,6 @@ public class TicketController extends ControllerBase {
@PostMapping("addCallUser") @PostMapping("addCallUser")
public ApiResult<Void> addCallUser(@Valid @RequestBody CallUserAddRequest request) { public ApiResult<Void> addCallUser(@Valid @RequestBody CallUserAddRequest request) {
AdminUser adminUser = adminUserService.getById(AdminUserUtil.getUserId()); 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<>(); List<String> userNames = new ArrayList<>();
request.getUserIds().forEach(userId -> { request.getUserIds().forEach(userId -> {
AdminUser adminUser1 = adminUserService.getById(userId); AdminUser adminUser1 = adminUserService.getById(userId);
@ -1503,7 +1504,7 @@ public class TicketController extends ControllerBase {
.setReceiverId("admin-uid-" + userId) .setReceiverId("admin-uid-" + userId)
) )
) )
); , Constant.DEFAULT_LANGUAGE_CODE);
ssePushService.sendTicketCallToAdmin(adminUser, userId, request.getTicketId()); ssePushService.sendTicketCallToAdmin(adminUser, userId, request.getTicketId());
// ticketCallJoinService.add(ticketCall.getId(), userId, Constant.FROM_ADMIN); // ticketCallJoinService.add(ticketCall.getId(), userId, Constant.FROM_ADMIN);
stringRedisTemplate.opsForSet().add(Constant.REDIS_KEY_TICKET_CALL_WAIT + request.getTicketId(), Constant.FROM_ADMIN + "-uid-" + userId); stringRedisTemplate.opsForSet().add(Constant.REDIS_KEY_TICKET_CALL_WAIT + request.getTicketId(), Constant.FROM_ADMIN + "-uid-" + userId);
@ -1548,7 +1549,7 @@ public class TicketController extends ControllerBase {
.setFrom("admin") .setFrom("admin")
) )
) )
); , Constant.DEFAULT_LANGUAGE_CODE);
return ApiResult.success(); return ApiResult.success();
} }
@ -1564,6 +1565,10 @@ public class TicketController extends ControllerBase {
Set<String> userIds = stringRedisTemplate.opsForSet().members(Constant.REDIS_KEY_TICKET_CALL_WAIT + request.getTicketId()); Set<String> userIds = stringRedisTemplate.opsForSet().members(Constant.REDIS_KEY_TICKET_CALL_WAIT + request.getTicketId());
if (CollectionUtil.isNotEmpty(userIds)) { if (CollectionUtil.isNotEmpty(userIds)) {
userIds.forEach(uid -> { userIds.forEach(uid -> {
List<String> us = StrUtil.split(uid, "-");
String receiverUserLanguageCode = StrUtil.equals(us.get(0), Constant.FROM_ADMIN)
? Constant.DEFAULT_LANGUAGE_CODE
: appUserService.getById(Integer.valueOf(us.get(2))).getLanguageCode();
uniPushService.send(new UniPushMessage() uniPushService.send(new UniPushMessage()
.setSenderId(uid)//不重要 .setSenderId(uid)//不重要
.setReceiverId(uid) .setReceiverId(uid)
@ -1579,12 +1584,15 @@ public class TicketController extends ControllerBase {
.setFrom("admin") .setFrom("admin")
) )
) )
); , receiverUserLanguageCode);
}); });
} }
stringRedisTemplate.delete(Constant.REDIS_KEY_TICKET_CALL_WAIT + request.getTicketId()); stringRedisTemplate.delete(Constant.REDIS_KEY_TICKET_CALL_WAIT + request.getTicketId());
} else { } else {
if (request.getReject()) { if (request.getReject()) {
String receiverUserLanguageCode = StrUtil.equals(request.getFrom(), Constant.FROM_ADMIN)
? Constant.DEFAULT_LANGUAGE_CODE
: appUserService.getById(request.getFromUserId()).getLanguageCode();
uniPushService.send(new UniPushMessage() uniPushService.send(new UniPushMessage()
.setSenderId(Constant.FROM_ADMIN + "-uid-" + AdminUserUtil.getUserId())//不重要 .setSenderId(Constant.FROM_ADMIN + "-uid-" + AdminUserUtil.getUserId())//不重要
.setReceiverId(request.getFrom() + "-uid-" + request.getFromUserId()) .setReceiverId(request.getFrom() + "-uid-" + request.getFromUserId())
@ -1600,7 +1608,7 @@ public class TicketController extends ControllerBase {
.setFrom("admin") .setFrom("admin")
) )
) )
); , receiverUserLanguageCode);
} }
stringRedisTemplate.opsForSet().remove(Constant.REDIS_KEY_TICKET_CALL_WAIT + request.getTicketId(), Constant.FROM_ADMIN + "-uid-" + AdminUserUtil.getUserId()); stringRedisTemplate.opsForSet().remove(Constant.REDIS_KEY_TICKET_CALL_WAIT + request.getTicketId(), Constant.FROM_ADMIN + "-uid-" + AdminUserUtil.getUserId());
} }

View File

@ -1,12 +1,14 @@
package com.nflg.mobilebroken.admin.event; package com.nflg.mobilebroken.admin.event;
import cn.hutool.core.collection.CollectionUtil; 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.ShengWangService;
import com.nflg.mobilebroken.admin.service.SsePushService; import com.nflg.mobilebroken.admin.service.SsePushService;
import com.nflg.mobilebroken.common.constant.Constant; import com.nflg.mobilebroken.common.constant.Constant;
import com.nflg.mobilebroken.common.constant.TicketState; import com.nflg.mobilebroken.common.constant.TicketState;
import com.nflg.mobilebroken.common.pojo.dto.*; import com.nflg.mobilebroken.common.pojo.dto.*;
import com.nflg.mobilebroken.common.util.MultilingualUtil; 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.repository.service.TicketChatService;
import com.nflg.mobilebroken.starter.service.UniPushService; import com.nflg.mobilebroken.starter.service.UniPushService;
import org.springframework.beans.BeansException; import org.springframework.beans.BeansException;
@ -28,6 +30,7 @@ public class TicketCallEndEvent extends ApplicationEvent implements ApplicationC
private ShengWangService shengWangService; private ShengWangService shengWangService;
private StringRedisTemplate stringRedisTemplate; private StringRedisTemplate stringRedisTemplate;
private UniPushService uniPushService; private UniPushService uniPushService;
private IAppUserService appUserService;
public TicketCallEndEvent(Object source, TicketDTO ticket) { public TicketCallEndEvent(Object source, TicketDTO ticket) {
super(source); super(source);
@ -41,6 +44,7 @@ public class TicketCallEndEvent extends ApplicationEvent implements ApplicationC
this.shengWangService = applicationContext.getBean(ShengWangService.class); this.shengWangService = applicationContext.getBean(ShengWangService.class);
this.stringRedisTemplate = applicationContext.getBean(StringRedisTemplate.class); this.stringRedisTemplate = applicationContext.getBean(StringRedisTemplate.class);
this.uniPushService = applicationContext.getBean(UniPushService.class); this.uniPushService = applicationContext.getBean(UniPushService.class);
this.appUserService = applicationContext.getBean(IAppUserService.class);
} }
public void send() throws IOException, InterruptedException { public void send() throws IOException, InterruptedException {
@ -63,6 +67,9 @@ public class TicketCallEndEvent extends ApplicationEvent implements ApplicationC
if (Objects.nonNull(userId)) { if (Objects.nonNull(userId)) {
String from = userId.toString().startsWith("1") ? "app" : "admin"; String from = userId.toString().startsWith("1") ? "app" : "admin";
userId = Integer.valueOf(userId.toString().substring(1)); userId = Integer.valueOf(userId.toString().substring(1));
String receiverUserLanguageCode = StrUtil.equals(from, Constant.FROM_ADMIN)
? Constant.DEFAULT_LANGUAGE_CODE
: appUserService.getById(userId).getLanguageCode();
uniPushService.send(new UniPushMessage() uniPushService.send(new UniPushMessage()
.setSenderId(from + "-uid-0")//不重要 .setSenderId(from + "-uid-0")//不重要
.setReceiverId(from + "-uid-" + userId) .setReceiverId(from + "-uid-" + userId)
@ -76,7 +83,7 @@ public class TicketCallEndEvent extends ApplicationEvent implements ApplicationC
.setFrom("admin") .setFrom("admin")
) )
) )
); , receiverUserLanguageCode);
} }
} }
} }

View File

@ -538,7 +538,7 @@ public class TicketController extends ControllerBase {
//推送消息 //推送消息
ssePushService.sendTicketMessageToAdmin(id, message); ssePushService.sendTicketMessageToAdmin(id, message);
ssePushService.sendTicketMessageToApp(id, message); ssePushService.sendTicketMessageToApp(id, message);
uniPushService.sendTodoMessageFromApp(String.valueOf(ticket.getId()), ticket.getType(), ticket.getCurrentHandle(), "工单被重启"); uniPushService.sendTodoMessageFromApp(String.valueOf(ticket.getId()), ticket.getType(), ticket.getCurrentHandle(), "工单被重启", Constant.DEFAULT_LANGUAGE_CODE);
// stringRedisTemplate.opsForValue().set(StrUtil.format(Constant.REDIS_KEY_TICKET_REJECT_RECORD, ticket.getId()), DateTimeUtil.format(LocalDateTime.now())); // stringRedisTemplate.opsForValue().set(StrUtil.format(Constant.REDIS_KEY_TICKET_REJECT_RECORD, ticket.getId()), DateTimeUtil.format(LocalDateTime.now()));
stringRedisTemplate.opsForHash().delete("ticket:disbale:SelectImage", ticket.getId().toString()); stringRedisTemplate.opsForHash().delete("ticket:disbale:SelectImage", ticket.getId().toString());
appMessageService.setReaded(AppUserUtil.getUserId(), AppUserUtil.getFrom(), MessageSubType.TicketCompletion.getState()); appMessageService.setReaded(AppUserUtil.getUserId(), AppUserUtil.getFrom(), MessageSubType.TicketCompletion.getState());
@ -651,7 +651,7 @@ public class TicketController extends ControllerBase {
.setReceiverId("admin-uid-" + handlerUserId) .setReceiverId("admin-uid-" + handlerUserId)
) )
) )
); , Constant.DEFAULT_LANGUAGE_CODE);
ssePushService.sendTicketCallToAdmin(appUser, handlerUserId, ticketId); ssePushService.sendTicketCallToAdmin(appUser, handlerUserId, ticketId);
// ticketCallService.add(ticketId, AppUserUtil.getUserId(),Constant.FROM_APP, handlerUserId, Constant.FROM_ADMIN); // ticketCallService.add(ticketId, AppUserUtil.getUserId(),Constant.FROM_APP, handlerUserId, Constant.FROM_ADMIN);
ticketEventPublisher.publishTicketCallBeginEvent(ticketId, appUser.getName()); ticketEventPublisher.publishTicketCallBeginEvent(ticketId, appUser.getName());
@ -675,6 +675,9 @@ public class TicketController extends ControllerBase {
VUtils.trueThrowBusinessError(channelUsers.getUsers().contains(ShengWangUtil.getUserId(AppUserUtil.getUserId(), AppUserUtil.getFrom()))) VUtils.trueThrowBusinessError(channelUsers.getUsers().contains(ShengWangUtil.getUserId(AppUserUtil.getUserId(), AppUserUtil.getFrom())))
.throwMessage("你已在通话中"); .throwMessage("你已在通话中");
ssePushService.sendTicketCallJoined(AppUserUtil.getUserId(), ticketId, AppUserUtil.getFrom()); ssePushService.sendTicketCallJoined(AppUserUtil.getUserId(), ticketId, AppUserUtil.getFrom());
String receiverUserLanguageCode = StrUtil.equals(AppUserUtil.getFrom(), Constant.FROM_ADMIN)
? Constant.DEFAULT_LANGUAGE_CODE
: appUserService.getById(AppUserUtil.getUserId()).getLanguageCode();
uniPushService.send(new UniPushMessage() uniPushService.send(new UniPushMessage()
.setSenderId(AppUserUtil.getFrom() + "-uid-" + AppUserUtil.getUserId())//不重要 .setSenderId(AppUserUtil.getFrom() + "-uid-" + AppUserUtil.getUserId())//不重要
.setReceiverId(AppUserUtil.getFrom() + "-uid-" + AppUserUtil.getUserId()) .setReceiverId(AppUserUtil.getFrom() + "-uid-" + AppUserUtil.getUserId())
@ -690,7 +693,7 @@ public class TicketController extends ControllerBase {
.setFrom("app") .setFrom("app")
) )
) )
); , receiverUserLanguageCode);
return ApiResult.success(); return ApiResult.success();
} }
@ -706,6 +709,10 @@ public class TicketController extends ControllerBase {
Set<String> userIds = stringRedisTemplate.opsForSet().members(Constant.REDIS_KEY_TICKET_CALL_WAIT + request.getTicketId()); Set<String> userIds = stringRedisTemplate.opsForSet().members(Constant.REDIS_KEY_TICKET_CALL_WAIT + request.getTicketId());
if (CollectionUtil.isNotEmpty(userIds)) { if (CollectionUtil.isNotEmpty(userIds)) {
userIds.forEach(uid -> { userIds.forEach(uid -> {
List<String> us = StrUtil.split(uid, "-");
String receiverUserLanguageCode = StrUtil.equals(us.get(0), Constant.FROM_ADMIN)
? Constant.DEFAULT_LANGUAGE_CODE
: appUserService.getById(Integer.valueOf(us.get(2))).getLanguageCode();
uniPushService.send(new UniPushMessage() uniPushService.send(new UniPushMessage()
.setSenderId(uid)//不重要 .setSenderId(uid)//不重要
.setReceiverId(uid) .setReceiverId(uid)
@ -721,11 +728,14 @@ public class TicketController extends ControllerBase {
.setFrom("app") .setFrom("app")
) )
) )
); , receiverUserLanguageCode);
}); });
} }
stringRedisTemplate.delete(Constant.REDIS_KEY_TICKET_CALL_WAIT + request.getTicketId()); stringRedisTemplate.delete(Constant.REDIS_KEY_TICKET_CALL_WAIT + request.getTicketId());
} else { } else {
String receiverUserLanguageCode = StrUtil.equals(request.getFrom(), Constant.FROM_ADMIN)
? Constant.DEFAULT_LANGUAGE_CODE
: appUserService.getById(request.getFromUserId()).getLanguageCode();
uniPushService.send(new UniPushMessage() uniPushService.send(new UniPushMessage()
.setSenderId(AppUserUtil.getFrom() + "-uid-" + AppUserUtil.getUserId())//不重要 .setSenderId(AppUserUtil.getFrom() + "-uid-" + AppUserUtil.getUserId())//不重要
.setReceiverId(request.getFrom() + "-uid-" + request.getFromUserId()) .setReceiverId(request.getFrom() + "-uid-" + request.getFromUserId())
@ -741,7 +751,7 @@ public class TicketController extends ControllerBase {
.setFrom("app") .setFrom("app")
) )
) )
); , receiverUserLanguageCode);
stringRedisTemplate.opsForSet().remove(Constant.REDIS_KEY_TICKET_CALL_WAIT + request.getTicketId(), Constant.FROM_APP + "-uid-" + AppUserUtil.getUserId()); stringRedisTemplate.opsForSet().remove(Constant.REDIS_KEY_TICKET_CALL_WAIT + request.getTicketId(), Constant.FROM_APP + "-uid-" + AppUserUtil.getUserId());
} }
taskScheduler.schedule(() -> { taskScheduler.schedule(() -> {

View File

@ -1,11 +1,13 @@
package com.nflg.mobilebroken.cfs.event; package com.nflg.mobilebroken.cfs.event;
import cn.hutool.core.collection.CollectionUtil; 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.ShengWangService;
import com.nflg.mobilebroken.cfs.service.SsePushService; import com.nflg.mobilebroken.cfs.service.SsePushService;
import com.nflg.mobilebroken.common.constant.Constant; import com.nflg.mobilebroken.common.constant.Constant;
import com.nflg.mobilebroken.common.constant.TicketState; import com.nflg.mobilebroken.common.constant.TicketState;
import com.nflg.mobilebroken.common.pojo.dto.*; 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.repository.service.TicketChatService;
import com.nflg.mobilebroken.starter.service.UniPushService; import com.nflg.mobilebroken.starter.service.UniPushService;
import org.springframework.beans.BeansException; import org.springframework.beans.BeansException;
@ -27,6 +29,7 @@ public class TicketCallEndEvent extends ApplicationEvent implements ApplicationC
private ShengWangService shengWangService; private ShengWangService shengWangService;
private StringRedisTemplate stringRedisTemplate; private StringRedisTemplate stringRedisTemplate;
private UniPushService uniPushService; private UniPushService uniPushService;
private IAppUserService appUserService;
public TicketCallEndEvent(Object source, TicketDTO ticket) { public TicketCallEndEvent(Object source, TicketDTO ticket) {
super(source); super(source);
@ -40,6 +43,7 @@ public class TicketCallEndEvent extends ApplicationEvent implements ApplicationC
this.shengWangService = applicationContext.getBean(ShengWangService.class); this.shengWangService = applicationContext.getBean(ShengWangService.class);
this.stringRedisTemplate = applicationContext.getBean(StringRedisTemplate.class); this.stringRedisTemplate = applicationContext.getBean(StringRedisTemplate.class);
this.uniPushService = applicationContext.getBean(UniPushService.class); this.uniPushService = applicationContext.getBean(UniPushService.class);
this.appUserService = applicationContext.getBean(IAppUserService.class);
} }
public void send() throws IOException, InterruptedException { public void send() throws IOException, InterruptedException {
@ -63,6 +67,9 @@ public class TicketCallEndEvent extends ApplicationEvent implements ApplicationC
if (Objects.nonNull(userId)) { if (Objects.nonNull(userId)) {
String from = userId.toString().startsWith("1") ? "app" : "admin"; String from = userId.toString().startsWith("1") ? "app" : "admin";
userId = Integer.valueOf(userId.toString().substring(1)); userId = Integer.valueOf(userId.toString().substring(1));
String receiverUserLanguageCode = StrUtil.equals(from, Constant.FROM_ADMIN)
? Constant.DEFAULT_LANGUAGE_CODE
: appUserService.getById(userId).getLanguageCode();
uniPushService.send(new UniPushMessage() uniPushService.send(new UniPushMessage()
.setSenderId(from + "-uid-0")//不重要 .setSenderId(from + "-uid-0")//不重要
.setReceiverId(from + "-uid-" + userId) .setReceiverId(from + "-uid-" + userId)
@ -76,7 +83,7 @@ public class TicketCallEndEvent extends ApplicationEvent implements ApplicationC
.setFrom("app") .setFrom("app")
) )
) )
); ,receiverUserLanguageCode);
} }
} }
} }

View File

@ -13,6 +13,8 @@ public class Constant {
public static final String DEFAULT_LANGUAGE_CODE = "cn"; 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_SERVICE_EVALUATION = "ServiceEvaluation";
public static final String DICTIONARY_TYPE_EXPERIENCE_EVALUATION = "ExperienceEvaluation"; public static final String DICTIONARY_TYPE_EXPERIENCE_EVALUATION = "ExperienceEvaluation";

View File

@ -431,7 +431,7 @@ public class TicketController extends ControllerBase {
ssePushService.sendTicketMessageToApp(ticket.getId(), message); ssePushService.sendTicketMessageToApp(ticket.getId(), message);
ssePushService.sendTicketMessageToAdmin(ticket.getId(), message); ssePushService.sendTicketMessageToAdmin(ticket.getId(), message);
request.getUserIds().forEach(userId -> { request.getUserIds().forEach(userId -> {
uniPushService.sendTodoMessageFromAdmin(String.valueOf(ticket.getId()), 1, Constant.FROM_ADMIN, userId, "分派工单"); uniPushService.sendTodoMessageFromAdmin(String.valueOf(ticket.getId()), 1, Constant.FROM_ADMIN, userId, "分派工单", Constant.DEFAULT_LANGUAGE_CODE);
}); });
adminMessageService.setReaded(AdminUserUtil.getUserId(), ticket.getId(), MessageSubType.TicketToBeAssigned.getState()); adminMessageService.setReaded(AdminUserUtil.getUserId(), ticket.getId(), MessageSubType.TicketToBeAssigned.getState());
return ApiResult.success(); return ApiResult.success();
@ -492,9 +492,12 @@ public class TicketController extends ControllerBase {
//推送消息 //推送消息
ssePushService.sendTicketMessageToAdmin(id, message); ssePushService.sendTicketMessageToAdmin(id, message);
ssePushService.sendTicketMessageToApp(id, message); ssePushService.sendTicketMessageToApp(id, message);
uniPushService.sendTodoMessageFromAdmin(String.valueOf(ticket.getId()), 1, ticket.getUserPlatform(), ticket.getUserId(), "工单已完成"); String receiverUserLanguageCode = StrUtil.equals(ticket.getUserPlatform(), Constant.FROM_ADMIN)
? Constant.DEFAULT_LANGUAGE_CODE
: appUserService.getById(ticket.getUserId()).getLanguageCode();
uniPushService.sendTodoMessageFromAdmin(String.valueOf(ticket.getId()), 1, ticket.getUserPlatform(), ticket.getUserId(), "工单已完成", receiverUserLanguageCode);
deviceTypeService.getCqms(ticket.getDeviceNo()).forEach(cqm -> { deviceTypeService.getCqms(ticket.getDeviceNo()).forEach(cqm -> {
uniPushService.sendTodoMessageFromAdmin(String.valueOf(ticket.getId()), 1, Constant.FROM_ADMIN, cqm, "工单已完成"); uniPushService.sendTodoMessageFromAdmin(String.valueOf(ticket.getId()), 1, Constant.FROM_ADMIN, cqm, "工单已完成", Constant.DEFAULT_LANGUAGE_CODE);
}); });
} }
return ApiResult.success(); return ApiResult.success();
@ -524,7 +527,7 @@ public class TicketController extends ControllerBase {
//推送消息 //推送消息
ssePushService.sendTicketMessageToAdmin(id, message); ssePushService.sendTicketMessageToAdmin(id, message);
ssePushService.sendTicketMessageToApp(id, message); ssePushService.sendTicketMessageToApp(id, message);
uniPushService.sendTodoMessageFromAdmin(String.valueOf(ticket.getId()), 1, Constant.FROM_ADMIN, StrUtil.splitToInt(ticket.getHandle(), ",")[0], "工单被驳回"); uniPushService.sendTodoMessageFromAdmin(String.valueOf(ticket.getId()), 1, Constant.FROM_ADMIN, StrUtil.splitToInt(ticket.getHandle(), ",")[0], "工单被驳回", Constant.DEFAULT_LANGUAGE_CODE);
stringRedisTemplate.opsForHash().delete("ticket:disbale:SelectImage", id.toString()); stringRedisTemplate.opsForHash().delete("ticket:disbale:SelectImage", id.toString());
adminMessageService.setReaded(AdminUserUtil.getUserId(), id, MessageSubType.TicketSolutionAudit.getState()); adminMessageService.setReaded(AdminUserUtil.getUserId(), id, MessageSubType.TicketSolutionAudit.getState());
} }
@ -1399,6 +1402,9 @@ public class TicketController extends ControllerBase {
// VUtils.trueThrowBusinessError(ticketCallJoinService.isInCall(ticket.getId(), receiveUserFrom, receiveUserId)).throwMessage("对方正在通话中"); // VUtils.trueThrowBusinessError(ticketCallJoinService.isInCall(ticket.getId(), receiveUserFrom, receiveUserId)).throwMessage("对方正在通话中");
// ticketCallService.add(ticketId, sendUserId, sendUserFrom, receiveUserId, receiveUserFrom); // ticketCallService.add(ticketId, sendUserId, sendUserFrom, receiveUserId, receiveUserFrom);
AdminUser adminUser = adminUserService.getById(sendUserId); AdminUser adminUser = adminUserService.getById(sendUserId);
String receiverUserLanguageCode = StrUtil.equals(receiveUserFrom, Constant.FROM_ADMIN)
? Constant.DEFAULT_LANGUAGE_CODE
: appUserService.getById(receiveUserId).getLanguageCode();
uniPushService.send(new UniPushMessage() uniPushService.send(new UniPushMessage()
.setSenderId("admin-uid-" + sendUserId) .setSenderId("admin-uid-" + sendUserId)
.setReceiverId(receiveUserFrom + "-uid-" + receiveUserId) .setReceiverId(receiveUserFrom + "-uid-" + receiveUserId)
@ -1420,7 +1426,7 @@ public class TicketController extends ControllerBase {
.setReceiverId(receiveUserFrom + "-uid-" + receiveUserId) .setReceiverId(receiveUserFrom + "-uid-" + receiveUserId)
) )
) )
); , receiverUserLanguageCode);
if (StrUtil.equals(Constant.FROM_APP, ticket.getUserPlatform())) { if (StrUtil.equals(Constant.FROM_APP, ticket.getUserPlatform())) {
ssePushService.sendTicketCallToApp(adminUser, ticket.getUserId(), ticketId); ssePushService.sendTicketCallToApp(adminUser, ticket.getUserId(), ticketId);
} else { } else {
@ -1473,7 +1479,7 @@ public class TicketController extends ControllerBase {
.setReceiverId("admin-uid-" + userId) .setReceiverId("admin-uid-" + userId)
) )
) )
); , Constant.DEFAULT_LANGUAGE_CODE);
ssePushService.sendTicketCallToAdmin(adminUser, userId, request.getTicketId()); ssePushService.sendTicketCallToAdmin(adminUser, userId, request.getTicketId());
// ticketCallJoinService.add(ticketCall.getId(), userId, Constant.FROM_ADMIN); // ticketCallJoinService.add(ticketCall.getId(), userId, Constant.FROM_ADMIN);
stringRedisTemplate.opsForSet().add(Constant.REDIS_KEY_TICKET_CALL_WAIT + request.getTicketId(), Constant.FROM_ADMIN + "-uid-" + userId); stringRedisTemplate.opsForSet().add(Constant.REDIS_KEY_TICKET_CALL_WAIT + request.getTicketId(), Constant.FROM_ADMIN + "-uid-" + userId);

View File

@ -61,6 +61,7 @@
, u.title_id , u.title_id
, p.position_name AS 'title' , p.position_name AS 'title'
, u.type , u.type
,u.language_code
FROM app_user u FROM app_user u
LEFT JOIN t_base_customer c ON u.company_id = c.id LEFT JOIN t_base_customer c ON u.company_id = c.id
LEFT JOIN t_base_area a1 ON u.area_id = a1.id LEFT JOIN t_base_area a1 ON u.area_id = a1.id

View File

@ -1,6 +1,9 @@
package com.nflg.mobilebroken.starter.interceptor; 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 cn.hutool.core.util.StrUtil;
import com.nflg.mobilebroken.common.constant.Constant;
import com.nflg.mobilebroken.common.util.MultilingualUtil; import com.nflg.mobilebroken.common.util.MultilingualUtil;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.HandlerInterceptor;
@ -14,12 +17,14 @@ public class LanguageInterceptor implements HandlerInterceptor {
@Override @Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// 从请求头中获取 language 参数 // 从请求头中获取 language 参数
String language = request.getHeader("language"); String language = request.getHeader(Constant.HEADER_LANGUAGE);
if (StrUtil.isNotBlank(language)) { if (StrUtil.isNotBlank(language)) {
MultilingualUtil.setLanguage(language); MultilingualUtil.setLanguage(language);
StpUtil.getTokenSession().set(Constant.HEADER_LANGUAGE, language);
} }
return true; return true;
} }
@Override @Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
// 请求完成后清理 ThreadLocal防止内存泄漏 // 请求完成后清理 ThreadLocal防止内存泄漏

View File

@ -34,8 +34,8 @@ public class UniPushService {
private AliYunTranslate aliYunTranslate; private AliYunTranslate aliYunTranslate;
@Async("httpExecutor") @Async("httpExecutor")
public CompletableFuture<Void> send(UniPushMessage message) { public CompletableFuture<Void> send(UniPushMessage message, String languageCode) {
translate(message); translate(message, languageCode);
log.info("发送uniapp消息{}", JSONUtil.toJsonStr(message)); log.info("发送uniapp消息{}", JSONUtil.toJsonStr(message));
RestTemplate restTemplate = new RestTemplate(); RestTemplate restTemplate = new RestTemplate();
ResponseEntity<String> response = restTemplate.postForEntity(url, message, String.class); ResponseEntity<String> response = restTemplate.postForEntity(url, message, String.class);
@ -43,10 +43,10 @@ public class UniPushService {
return CompletableFuture.completedFuture(null); return CompletableFuture.completedFuture(null);
} }
private void translate(UniPushMessage message) { private void translate(UniPushMessage message, String languageCode) {
String languageCode = MultilingualUtil.getLanguage(); if (!StrUtil.equals(languageCode, Constant.DEFAULT_LANGUAGE_CODE)) {
String aliyunCode = Constant.LANGUAGE_ALIYUN_MAP.get(languageCode); String aliyunCode = Constant.LANGUAGE_ALIYUN_MAP.get(languageCode);
if (StrUtil.isNotBlank(aliyunCode) && !StrUtil.equals(languageCode, Constant.DEFAULT_LANGUAGE_CODE)) { if (StrUtil.isNotBlank(aliyunCode)) {
UniPushMessageBody body = message.getSendData(); UniPushMessageBody body = message.getSendData();
body.setTitle(aliYunTranslate.translateWord(body.getTitle(), aliyunCode)); body.setTitle(aliYunTranslate.translateWord(body.getTitle(), aliyunCode));
body.setContent(body.getContentPre() + aliYunTranslate.translateWord(body.getContent(), aliyunCode)); body.setContent(body.getContentPre() + aliYunTranslate.translateWord(body.getContent(), aliyunCode));
@ -57,19 +57,20 @@ public class UniPushService {
} }
} }
} }
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) { // 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, String languageCode) {
send(new UniPushMessage() send(new UniPushMessage()
.setSenderId("admin-uid-" + AdminUserUtil.getUserId()) .setSenderId("admin-uid-" + AdminUserUtil.getUserId())
.setReceiverId(platform + "-uid-" + userId) .setReceiverId(platform + "-uid-" + userId)
@ -83,10 +84,10 @@ public class UniPushService {
.setContent(content) .setContent(content)
) )
) )
); , languageCode);
} }
public void sendTodoMessageFromApp(String ticketId, Integer type, Integer userId, String content) { public void sendTodoMessageFromApp(String ticketId, Integer type, Integer userId, String content, String languageCode) {
send(new UniPushMessage() send(new UniPushMessage()
.setSenderId("app-uid-" + AppUserUtil.getUserId()) .setSenderId("app-uid-" + AppUserUtil.getUserId())
.setReceiverId("admin-uid-" + userId) .setReceiverId("admin-uid-" + userId)
@ -100,6 +101,6 @@ public class UniPushService {
.setContent(content) .setContent(content)
) )
) )
); , languageCode);
} }
} }