【优化】添加多语言支持

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());
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());
return ApiResult.success();
@ -496,9 +496,12 @@ public class TicketController extends ControllerBase {
ticketChatService.addMessage(Long.valueOf(id), message);
//推送消息
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 -> {
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();
@ -526,7 +529,7 @@ public class TicketController extends ControllerBase {
ticketChatService.addMessage(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], "工单被驳回");
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());
}
return ApiResult.success();
@ -1429,28 +1432,31 @@ public class TicketController extends ControllerBase {
// VUtils.trueThrowBusinessError(ticketCallJoinService.isInCall(ticket.getId(), receiveUserFrom, receiveUserId)).throwMessage("对方正在通话中");
// ticketCallService.add(ticketId, sendUserId, sendUserFrom, receiveUserId, receiveUserFrom);
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()
.setSenderId("admin-uid-" + sendUserId)
.setReceiverId(receiveUserFrom + "-uid-" + receiveUserId)
.setSendData(new UniPushMessageBody()
.setTitle("视频通话")
.setContentPre(adminUser.getUserName())
.setContent("请求与您视频通话")
.setPayload(new UniPushMessageCallPayload()
.setSenderId("admin-uid-" + sendUserId)
.setReceiverId(receiveUserFrom + "-uid-" + receiveUserId)
.setSendData(new UniPushMessageBody()
.setTitle("视频通话")
.setContentPre(adminUser.getUserName())
.setContent("请求与您视频通话")
.setTicketId(String.valueOf(ticketId))
.setTicketType(0)
.setUserId(adminUser.getId())
.setUserName(adminUser.getUserName())
.setUserAvatar(adminUser.getAvatar())
.setCategory("ticketCall")
.setFrom("admin")
.setReceiverId(receiveUserFrom + "-uid-" + receiveUserId)
.setPayload(new UniPushMessageCallPayload()
.setTitle("视频通话")
.setContentPre(adminUser.getUserName())
.setContent("请求与您视频通话")
.setTicketId(String.valueOf(ticketId))
.setTicketType(0)
.setUserId(adminUser.getId())
.setUserName(adminUser.getUserName())
.setUserAvatar(adminUser.getAvatar())
.setCategory("ticketCall")
.setFrom("admin")
.setReceiverId(receiveUserFrom + "-uid-" + receiveUserId)
)
)
)
);
, receiverUserLanguageCode);
if (StrUtil.equals(Constant.FROM_APP, ticket.getUserPlatform())) {
ssePushService.sendTicketCallToApp(adminUser, ticket.getUserId(), Long.valueOf(ticketId));
} else {
@ -1470,11 +1476,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);
@ -1483,27 +1484,27 @@ public class TicketController extends ControllerBase {
userNames.add(adminUser1.getUserName());
} else {
uniPushService.send(new UniPushMessage()
.setSenderId("admin-uid-" + adminUser.getId())
.setReceiverId("admin-uid-" + userId)
.setSendData(new UniPushMessageBody()
.setTitle("视频通话")
.setContentPre(adminUser.getUserName())
.setContent("请求与您视频通话")
.setPayload(new UniPushMessageCallPayload()
.setSenderId("admin-uid-" + adminUser.getId())
.setReceiverId("admin-uid-" + userId)
.setSendData(new UniPushMessageBody()
.setTitle("视频通话")
.setContentPre(adminUser.getUserName())
.setContent("请求与您视频通话")
.setTicketId(String.valueOf(request.getTicketId()))
.setTicketType(0)
.setUserId(adminUser.getId())
.setUserName(adminUser.getUserName())
.setUserAvatar(adminUser.getAvatar())
.setCategory("ticketCall")
.setFrom("admin")
.setReceiverId("admin-uid-" + userId)
.setPayload(new UniPushMessageCallPayload()
.setTitle("视频通话")
.setContentPre(adminUser.getUserName())
.setContent("请求与您视频通话")
.setTicketId(String.valueOf(request.getTicketId()))
.setTicketType(0)
.setUserId(adminUser.getId())
.setUserName(adminUser.getUserName())
.setUserAvatar(adminUser.getAvatar())
.setCategory("ticketCall")
.setFrom("admin")
.setReceiverId("admin-uid-" + userId)
)
)
)
);
, Constant.DEFAULT_LANGUAGE_CODE);
ssePushService.sendTicketCallToAdmin(adminUser, userId, request.getTicketId());
// ticketCallJoinService.add(ticketCall.getId(), userId, Constant.FROM_ADMIN);
stringRedisTemplate.opsForSet().add(Constant.REDIS_KEY_TICKET_CALL_WAIT + request.getTicketId(), Constant.FROM_ADMIN + "-uid-" + userId);
@ -1534,21 +1535,21 @@ public class TicketController extends ControllerBase {
.throwMessage("你已在通话中");
ssePushService.sendTicketCallJoinedToAdmin(AdminUserUtil.getUserId(), ticketId);
uniPushService.send(new UniPushMessage()
.setSenderId("admin-uid-" + AdminUserUtil.getUserId())//不重要
.setReceiverId("admin-uid-" + AdminUserUtil.getUserId())
.setSendData(new UniPushMessageBody()
.setTitle("视频通话")
.setContent("加入通话")
.setPayload(new UniPushMessageCallPayload()
.setSenderId("admin-uid-" + AdminUserUtil.getUserId())//不重要
.setReceiverId("admin-uid-" + AdminUserUtil.getUserId())
.setSendData(new UniPushMessageBody()
.setTitle("视频通话")
.setTicketId(String.valueOf(ticketId))
.setTicketType(ticket.getType())
.setUserId(AdminUserUtil.getUserId())
.setCategory("ticketCallJoined")
.setFrom("admin")
.setContent("加入通话")
.setPayload(new UniPushMessageCallPayload()
.setTitle("视频通话")
.setTicketId(String.valueOf(ticketId))
.setTicketType(ticket.getType())
.setUserId(AdminUserUtil.getUserId())
.setCategory("ticketCallJoined")
.setFrom("admin")
)
)
)
);
, Constant.DEFAULT_LANGUAGE_CODE);
return ApiResult.success();
}
@ -1564,43 +1565,50 @@ public class TicketController extends ControllerBase {
Set<String> userIds = stringRedisTemplate.opsForSet().members(Constant.REDIS_KEY_TICKET_CALL_WAIT + request.getTicketId());
if (CollectionUtil.isNotEmpty(userIds)) {
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()
.setSenderId(uid)//不重要
.setReceiverId(uid)
.setSendData(new UniPushMessageBody()
.setTitle("视频通话")
.setContent("视频通话结束")
.setPayload(new UniPushMessageCallPayload()
.setTitle("视频通话结束")
.setTicketId(String.valueOf(request.getTicketId()))
.setTicketType(ticket.getType())
.setUserId(Integer.valueOf(StrUtil.split(uid, "-").get(2)))
.setCategory("ticketCallEnd")
.setFrom("admin")
.setSenderId(uid)//不重要
.setReceiverId(uid)
.setSendData(new UniPushMessageBody()
.setTitle("视频通话")
.setContent("视频通话结束")
.setPayload(new UniPushMessageCallPayload()
.setTitle("视频通话结束")
.setTicketId(String.valueOf(request.getTicketId()))
.setTicketType(ticket.getType())
.setUserId(Integer.valueOf(StrUtil.split(uid, "-").get(2)))
.setCategory("ticketCallEnd")
.setFrom("admin")
)
)
)
);
, receiverUserLanguageCode);
});
}
stringRedisTemplate.delete(Constant.REDIS_KEY_TICKET_CALL_WAIT + request.getTicketId());
} else {
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()
.setSenderId(Constant.FROM_ADMIN + "-uid-" + AdminUserUtil.getUserId())//不重要
.setReceiverId(request.getFrom() + "-uid-" + request.getFromUserId())
.setSendData(new UniPushMessageBody()
.setTitle("视频通话")
.setContent("视频通话拒接")
.setPayload(new UniPushMessageCallPayload()
.setTitle("视频通话拒接")
.setTicketId(String.valueOf(request.getTicketId()))
.setTicketType(ticket.getType())
.setUserId(AdminUserUtil.getUserId())
.setCategory("ticketCallReject")
.setFrom("admin")
.setSenderId(Constant.FROM_ADMIN + "-uid-" + AdminUserUtil.getUserId())//不重要
.setReceiverId(request.getFrom() + "-uid-" + request.getFromUserId())
.setSendData(new UniPushMessageBody()
.setTitle("视频通话")
.setContent("视频通话拒接")
.setPayload(new UniPushMessageCallPayload()
.setTitle("视频通话拒接")
.setTicketId(String.valueOf(request.getTicketId()))
.setTicketType(ticket.getType())
.setUserId(AdminUserUtil.getUserId())
.setCategory("ticketCallReject")
.setFrom("admin")
)
)
)
);
, receiverUserLanguageCode);
}
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;
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 {
@ -63,20 +67,23 @@ public class TicketCallEndEvent extends ApplicationEvent implements ApplicationC
if (Objects.nonNull(userId)) {
String from = userId.toString().startsWith("1") ? "app" : "admin";
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()
.setSenderId(from + "-uid-0")//不重要
.setReceiverId(from + "-uid-" + userId)
.setSendData(new UniPushMessageBody()
.setTitle("视频通话结束")
.setPayload(new UniPushMessageCallPayload()
.setTicketId(String.valueOf(ticket.getId()))
.setTicketType(ticket.getType())
.setUserId(userId)
.setCategory("ticketCallEnd")
.setFrom("admin")
.setSenderId(from + "-uid-0")//不重要
.setReceiverId(from + "-uid-" + userId)
.setSendData(new UniPushMessageBody()
.setTitle("视频通话结束")
.setPayload(new UniPushMessageCallPayload()
.setTicketId(String.valueOf(ticket.getId()))
.setTicketType(ticket.getType())
.setUserId(userId)
.setCategory("ticketCallEnd")
.setFrom("admin")
)
)
)
);
, receiverUserLanguageCode);
}
}
}

View File

@ -538,7 +538,7 @@ public class TicketController extends ControllerBase {
//推送消息
ssePushService.sendTicketMessageToAdmin(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.opsForHash().delete("ticket:disbale:SelectImage", ticket.getId().toString());
appMessageService.setReaded(AppUserUtil.getUserId(), AppUserUtil.getFrom(), MessageSubType.TicketCompletion.getState());
@ -631,27 +631,27 @@ public class TicketController extends ControllerBase {
// VUtils.trueThrowBusinessError(ticketCallJoinService.isInCall(ticket.getId(), Constant.FROM_ADMIN, handlerUserId)).throwMessage("对方正在通话中");
AppUser appUser = appUserService.getById(ticket.getUserId());
uniPushService.send(new UniPushMessage()
.setSenderId(ticket.getUserPlatform() + "-uid-" + ticket.getUserId())
.setReceiverId("admin-uid-" + handlerUserId)
.setSendData(new UniPushMessageBody()
.setTitle("视频通话")
.setContentPre(appUser.getName())
.setContent("请求与您视频通话")
.setPayload(new UniPushMessageCallPayload()
.setSenderId(ticket.getUserPlatform() + "-uid-" + ticket.getUserId())
.setReceiverId("admin-uid-" + handlerUserId)
.setSendData(new UniPushMessageBody()
.setTitle("视频通话")
.setContentPre(appUser.getName())
.setContent("请求与您视频通话")
.setTicketId(String.valueOf(ticketId))
.setTicketType(ticket.getType())
.setUserId(appUser.getId())
.setUserName(appUser.getName())
.setUserAvatar(appUser.getAvatar())
.setCategory("ticketCall")
.setFrom("app")
.setReceiverId("admin-uid-" + handlerUserId)
.setPayload(new UniPushMessageCallPayload()
.setTitle("视频通话")
.setContentPre(appUser.getName())
.setContent("请求与您视频通话")
.setTicketId(String.valueOf(ticketId))
.setTicketType(ticket.getType())
.setUserId(appUser.getId())
.setUserName(appUser.getName())
.setUserAvatar(appUser.getAvatar())
.setCategory("ticketCall")
.setFrom("app")
.setReceiverId("admin-uid-" + handlerUserId)
)
)
)
);
, Constant.DEFAULT_LANGUAGE_CODE);
ssePushService.sendTicketCallToAdmin(appUser, handlerUserId, ticketId);
// ticketCallService.add(ticketId, AppUserUtil.getUserId(),Constant.FROM_APP, handlerUserId, Constant.FROM_ADMIN);
ticketEventPublisher.publishTicketCallBeginEvent(ticketId, appUser.getName());
@ -675,22 +675,25 @@ public class TicketController extends ControllerBase {
VUtils.trueThrowBusinessError(channelUsers.getUsers().contains(ShengWangUtil.getUserId(AppUserUtil.getUserId(), AppUserUtil.getFrom())))
.throwMessage("你已在通话中");
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()
.setSenderId(AppUserUtil.getFrom() + "-uid-" + AppUserUtil.getUserId())//不重要
.setReceiverId(AppUserUtil.getFrom() + "-uid-" + AppUserUtil.getUserId())
.setSendData(new UniPushMessageBody()
.setTitle("视频通话")
.setContent("加入通话")
.setPayload(new UniPushMessageCallPayload()
.setSenderId(AppUserUtil.getFrom() + "-uid-" + AppUserUtil.getUserId())//不重要
.setReceiverId(AppUserUtil.getFrom() + "-uid-" + AppUserUtil.getUserId())
.setSendData(new UniPushMessageBody()
.setTitle("视频通话")
.setTicketId(String.valueOf(ticketId))
.setTicketType(ticket.getType())
.setUserId(AppUserUtil.getUserId())
.setCategory("ticketCallJoined")
.setFrom("app")
.setContent("加入通话")
.setPayload(new UniPushMessageCallPayload()
.setTitle("视频通话")
.setTicketId(String.valueOf(ticketId))
.setTicketType(ticket.getType())
.setUserId(AppUserUtil.getUserId())
.setCategory("ticketCallJoined")
.setFrom("app")
)
)
)
);
, receiverUserLanguageCode);
return ApiResult.success();
}
@ -706,42 +709,49 @@ public class TicketController extends ControllerBase {
Set<String> userIds = stringRedisTemplate.opsForSet().members(Constant.REDIS_KEY_TICKET_CALL_WAIT + request.getTicketId());
if (CollectionUtil.isNotEmpty(userIds)) {
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()
.setSenderId(uid)//不重要
.setReceiverId(uid)
.setSendData(new UniPushMessageBody()
.setTitle("视频通话")
.setContent("视频通话结束")
.setPayload(new UniPushMessageCallPayload()
.setTitle("视频通话结束")
.setTicketId(String.valueOf(request.getTicketId()))
.setTicketType(ticket.getType())
.setUserId(Integer.valueOf(StrUtil.split(uid, "-").get(2)))
.setCategory("ticketCallEnd")
.setFrom("app")
.setSenderId(uid)//不重要
.setReceiverId(uid)
.setSendData(new UniPushMessageBody()
.setTitle("视频通话")
.setContent("视频通话结束")
.setPayload(new UniPushMessageCallPayload()
.setTitle("视频通话结束")
.setTicketId(String.valueOf(request.getTicketId()))
.setTicketType(ticket.getType())
.setUserId(Integer.valueOf(StrUtil.split(uid, "-").get(2)))
.setCategory("ticketCallEnd")
.setFrom("app")
)
)
)
);
, receiverUserLanguageCode);
});
}
stringRedisTemplate.delete(Constant.REDIS_KEY_TICKET_CALL_WAIT + request.getTicketId());
} else {
String receiverUserLanguageCode = StrUtil.equals(request.getFrom(), Constant.FROM_ADMIN)
? Constant.DEFAULT_LANGUAGE_CODE
: appUserService.getById(request.getFromUserId()).getLanguageCode();
uniPushService.send(new UniPushMessage()
.setSenderId(AppUserUtil.getFrom() + "-uid-" + AppUserUtil.getUserId())//不重要
.setReceiverId(request.getFrom() + "-uid-" + request.getFromUserId())
.setSendData(new UniPushMessageBody()
.setTitle("视频通话")
.setContent("视频通话拒接")
.setPayload(new UniPushMessageCallPayload()
.setTitle("视频通话拒接")
.setTicketId(String.valueOf(request.getTicketId()))
.setTicketType(ticket.getType())
.setUserId(AppUserUtil.getUserId())
.setCategory("ticketCallReject")
.setFrom("app")
.setSenderId(AppUserUtil.getFrom() + "-uid-" + AppUserUtil.getUserId())//不重要
.setReceiverId(request.getFrom() + "-uid-" + request.getFromUserId())
.setSendData(new UniPushMessageBody()
.setTitle("视频通话")
.setContent("视频通话拒接")
.setPayload(new UniPushMessageCallPayload()
.setTitle("视频通话拒接")
.setTicketId(String.valueOf(request.getTicketId()))
.setTicketType(ticket.getType())
.setUserId(AppUserUtil.getUserId())
.setCategory("ticketCallReject")
.setFrom("app")
)
)
)
);
, receiverUserLanguageCode);
stringRedisTemplate.opsForSet().remove(Constant.REDIS_KEY_TICKET_CALL_WAIT + request.getTicketId(), Constant.FROM_APP + "-uid-" + AppUserUtil.getUserId());
}
taskScheduler.schedule(() -> {

View File

@ -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 {
@ -63,6 +67,9 @@ public class TicketCallEndEvent extends ApplicationEvent implements ApplicationC
if (Objects.nonNull(userId)) {
String from = userId.toString().startsWith("1") ? "app" : "admin";
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()
.setSenderId(from + "-uid-0")//不重要
.setReceiverId(from + "-uid-" + userId)
@ -76,7 +83,7 @@ public class TicketCallEndEvent extends ApplicationEvent implements ApplicationC
.setFrom("app")
)
)
);
,receiverUserLanguageCode);
}
}
}

View File

@ -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";

View File

@ -431,7 +431,7 @@ public class TicketController extends ControllerBase {
ssePushService.sendTicketMessageToApp(ticket.getId(), message);
ssePushService.sendTicketMessageToAdmin(ticket.getId(), message);
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());
return ApiResult.success();
@ -492,9 +492,12 @@ public class TicketController extends ControllerBase {
//推送消息
ssePushService.sendTicketMessageToAdmin(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 -> {
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();
@ -524,7 +527,7 @@ public class TicketController extends ControllerBase {
//推送消息
ssePushService.sendTicketMessageToAdmin(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());
adminMessageService.setReaded(AdminUserUtil.getUserId(), id, MessageSubType.TicketSolutionAudit.getState());
}
@ -958,7 +961,7 @@ public class TicketController extends ControllerBase {
@GetMapping("getSolutionReviewDepartment")
@ApiMark(moduleName = "工单管理", apiName = "获取工单解决方案评审部门")
public ApiResult<List<SolutionReviewDepartmentVO>> getSolutionReviewDepartment(@Valid @RequestParam @NotNull Long ticketId) {
return ApiResult.success(ticketSolutionAuditService.getByTicket(ticketId,MultilingualUtil.getLanguage()));
return ApiResult.success(ticketSolutionAuditService.getByTicket(ticketId, MultilingualUtil.getLanguage()));
}
/**
@ -1221,7 +1224,7 @@ public class TicketController extends ControllerBase {
}
}
//解决方案审核
List<SolutionReviewDepartmentVO> reviewDepartments = ticketSolutionAuditService.getByTicket(ticketId,MultilingualUtil.getLanguage())
List<SolutionReviewDepartmentVO> reviewDepartments = ticketSolutionAuditService.getByTicket(ticketId, MultilingualUtil.getLanguage())
.stream()
.filter(vo -> StrUtil.isNotBlank(vo.getUserName()))
.collect(Collectors.toList());
@ -1399,28 +1402,31 @@ public class TicketController extends ControllerBase {
// VUtils.trueThrowBusinessError(ticketCallJoinService.isInCall(ticket.getId(), receiveUserFrom, receiveUserId)).throwMessage("对方正在通话中");
// ticketCallService.add(ticketId, sendUserId, sendUserFrom, receiveUserId, receiveUserFrom);
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()
.setSenderId("admin-uid-" + sendUserId)
.setReceiverId(receiveUserFrom + "-uid-" + receiveUserId)
.setSendData(new UniPushMessageBody()
.setTitle("视频通话")
.setContentPre(adminUser.getUserName())
.setContent("请求与您视频通话")
.setPayload(new UniPushMessageCallPayload()
.setSenderId("admin-uid-" + sendUserId)
.setReceiverId(receiveUserFrom + "-uid-" + receiveUserId)
.setSendData(new UniPushMessageBody()
.setTitle("视频通话")
.setContentPre(adminUser.getUserName())
.setContent("请求与您视频通话")
.setTicketId(String.valueOf(ticketId))
.setTicketType(1)
.setUserId(adminUser.getId())
.setUserName(adminUser.getUserName())
.setUserAvatar(adminUser.getAvatar())
.setCategory("ticketCall")
.setFrom("admin")
.setReceiverId(receiveUserFrom + "-uid-" + receiveUserId)
.setPayload(new UniPushMessageCallPayload()
.setTitle("视频通话")
.setContentPre(adminUser.getUserName())
.setContent("请求与您视频通话")
.setTicketId(String.valueOf(ticketId))
.setTicketType(1)
.setUserId(adminUser.getId())
.setUserName(adminUser.getUserName())
.setUserAvatar(adminUser.getAvatar())
.setCategory("ticketCall")
.setFrom("admin")
.setReceiverId(receiveUserFrom + "-uid-" + receiveUserId)
)
)
)
);
, receiverUserLanguageCode);
if (StrUtil.equals(Constant.FROM_APP, ticket.getUserPlatform())) {
ssePushService.sendTicketCallToApp(adminUser, ticket.getUserId(), ticketId);
} else {
@ -1453,27 +1459,27 @@ public class TicketController extends ControllerBase {
userNames.add(adminUser1.getUserName());
} else {
uniPushService.send(new UniPushMessage()
.setSenderId("admin-uid-" + adminUser.getId())
.setReceiverId("admin-uid-" + userId)
.setSendData(new UniPushMessageBody()
.setTitle("视频通话")
.setContentPre(adminUser.getUserName())
.setContent("请求与您视频通话")
.setPayload(new UniPushMessageCallPayload()
.setSenderId("admin-uid-" + adminUser.getId())
.setReceiverId("admin-uid-" + userId)
.setSendData(new UniPushMessageBody()
.setTitle("视频通话")
.setContentPre(adminUser.getUserName())
.setContent("请求与您视频通话")
.setTicketId(String.valueOf(request.getTicketId()))
.setTicketType(1)
.setUserId(adminUser.getId())
.setUserName(adminUser.getUserName())
.setUserAvatar(adminUser.getAvatar())
.setCategory("ticketCall")
.setFrom("admin")
.setReceiverId("admin-uid-" + userId)
.setPayload(new UniPushMessageCallPayload()
.setTitle("视频通话")
.setContentPre(adminUser.getUserName())
.setContent("请求与您视频通话")
.setTicketId(String.valueOf(request.getTicketId()))
.setTicketType(1)
.setUserId(adminUser.getId())
.setUserName(adminUser.getUserName())
.setUserAvatar(adminUser.getAvatar())
.setCategory("ticketCall")
.setFrom("admin")
.setReceiverId("admin-uid-" + userId)
)
)
)
);
, Constant.DEFAULT_LANGUAGE_CODE);
ssePushService.sendTicketCallToAdmin(adminUser, userId, request.getTicketId());
// ticketCallJoinService.add(ticketCall.getId(), userId, Constant.FROM_ADMIN);
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
, 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

View File

@ -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");
if(StrUtil.isNotBlank(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防止内存泄漏

View File

@ -34,8 +34,8 @@ public class UniPushService {
private AliYunTranslate aliYunTranslate;
@Async("httpExecutor")
public CompletableFuture<Void> send(UniPushMessage message) {
translate(message);
public CompletableFuture<Void> send(UniPushMessage message, String languageCode) {
translate(message, languageCode);
log.info("发送uniapp消息{}", JSONUtil.toJsonStr(message));
RestTemplate restTemplate = new RestTemplate();
ResponseEntity<String> response = restTemplate.postForEntity(url, message, String.class);
@ -43,63 +43,64 @@ 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) {
public void sendTodoMessageFromAdmin(String ticketId, Integer type, String platform, Integer userId, String content, String languageCode) {
send(new UniPushMessage()
.setSenderId("admin-uid-" + AdminUserUtil.getUserId())
.setReceiverId(platform + "-uid-" + userId)
.setSendData(new UniPushMessageBody()
.setTitle("工单消息")
.setContent(content)
.setPayload(new UniPushMessageCallPayload()
.setTicketId(ticketId)
.setTicketType(type)
.setSenderId("admin-uid-" + AdminUserUtil.getUserId())
.setReceiverId(platform + "-uid-" + userId)
.setSendData(new UniPushMessageBody()
.setTitle("工单消息")
.setContent(content)
.setPayload(new UniPushMessageCallPayload()
.setTicketId(ticketId)
.setTicketType(type)
.setTitle("工单消息")
.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()
.setSenderId("app-uid-" + AppUserUtil.getUserId())
.setReceiverId("admin-uid-" + userId)
.setSendData(new UniPushMessageBody()
.setTitle("工单消息")
.setContent(content)
.setPayload(new UniPushMessageCallPayload()
.setTicketId(ticketId)
.setTicketType(type)
.setSenderId("app-uid-" + AppUserUtil.getUserId())
.setReceiverId("admin-uid-" + userId)
.setSendData(new UniPushMessageBody()
.setTitle("工单消息")
.setContent(content)
.setPayload(new UniPushMessageCallPayload()
.setTicketId(ticketId)
.setTicketType(type)
.setTitle("工单消息")
.setContent(content)
)
)
)
);
, languageCode);
}
}