fix: 修复一些问题

This commit is contained in:
曹鹏飞 2025-03-13 17:24:07 +08:00
parent 27018d0787
commit 13bfc612bf
4 changed files with 71 additions and 52 deletions

View File

@ -26,9 +26,7 @@ import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import java.util.*;
import java.util.stream.Collectors;
@Component
@ -76,27 +74,30 @@ public class TicketScheduledTasks {
*/
@Scheduled(cron = "0 0 0 * * ?")
public void sendInviteCommentEmail() {
List<Ticket> tickets=ticketService.getNonComment(7);
log.info("【工单评论邀请】开始执行");
List<Ticket> tickets = ticketService.getNonComment(3);
log.info("【工单评论邀请】共{}条数据", tickets.size());
tickets.forEach(ticket -> {
AdminUser createUser = adminUserService.getById(ticket.getUserId());
AppUser createUser = appUserService.getById(ticket.getUserId());
if (Objects.equals(createUser.getState(), UserState.Activated.getState())) {
List<Integer> adminUserIds = Arrays.stream(ticket.getHandle().split(","))
.map(Integer::parseInt)
.collect(Collectors.toList());
List<AdminUser> adminUsers = adminUserService.listByIds(adminUserIds);
// List<Integer> adminUserIds = Arrays.stream(ticket.getHandle().split(","))
// .map(Integer::parseInt)
// .collect(Collectors.toList());
// List<AdminUser> adminUsers = adminUserService.listByIds(adminUserIds);
String subject = dictionaryItemTranslateService.getValueByCode(Constant.DICTIONARY_EMAIL_NOTIFY, Constant.DICTIONARY_ITEM_EMAIL_TITLE_TICKET_INVITE_COMMENT, Constant.DEFAULT_LANGUAGE_CODE);
String content = dictionaryItemTranslateService.getValueByCode(Constant.DICTIONARY_EMAIL_NOTIFY, Constant.DICTIONARY_ITEM_EMAIL_CONTENT_TICKET_INVITE_COMMENT, Constant.DEFAULT_LANGUAGE_CODE)
.replace("${websiteUrl}", websiteUrl)
.replace("${title}", ticket.getTitle())
.replace("${createUser}", createUser.getUserName())
.replace("${createUser}", createUser.getName())
.replace("${url}", websiteUrl + "/#/workOrder/workOrderDetail?id=" + ticket.getId());
try {
sendEamilForAdminUser(adminUsers, subject, content);
sendEamilForAppUser(Collections.singletonList(createUser), subject, content);
} catch (Exception e) {
log.error("邮件发送失败", e);
log.error("【工单评论邀请】邮件发送失败", e);
}
}
});
log.info("【工单评论邀请】执行完成");
}
/**
@ -105,7 +106,9 @@ public class TicketScheduledTasks {
*/
@Scheduled(cron = "0 0 0 * * ?")
public void autoComment() {
log.info("【工单自动评论】开始执行");
List<Ticket> tickets = ticketService.getNonComment(10);
log.info("【工单自动评论】共{}条数据", tickets.size());
TicketEvaluateAddVO vo = dictionaryItemTranslateService.getTicketEvaluateSelect(Constant.DEFAULT_LANGUAGE_CODE);
TicketEvaluateAddRequest request = new TicketEvaluateAddRequest();
request.setType(1);
@ -124,6 +127,7 @@ public class TicketScheduledTasks {
request.setTicketId(ticket.getId());
ticketEvaluateService.add(request);
});
log.info("【工单自动评论】执行完成");
}
/**
@ -132,13 +136,13 @@ public class TicketScheduledTasks {
*/
@Scheduled(cron = "0 0 0 * * ?")
public void timeoutRemind() {
log.info("开始执行工单超时提醒");
log.info("【工单超时提醒】开始执行");
ParamConfig config = paramConfigService.lambdaQuery().eq(ParamConfig::getCode, "TiketTimeout").one();
TiketTimeoutDTO cfgTimeout= JSONUtil.toBean(config.getValue(), TiketTimeoutDTO.class);
emergencyRemind(cfgTimeout);
generalRemind(cfgTimeout);
nonemergencyRemind(cfgTimeout);
log.info("执行工单超时提醒完成");
log.info("【工单超时提醒】执行完成");
}
/**
@ -155,32 +159,32 @@ public class TicketScheduledTasks {
}
private void emergencyRemind(TiketTimeoutDTO cfgTimeout) {
log.info("获取状态为紧急且{}天未解决的工单", cfgTimeout.getEmergency());
log.info("【工单超时提醒】获取状态为紧急且{}天未解决的工单", cfgTimeout.getEmergency());
List<Ticket> tickets = ticketService.getEmergencys(cfgTimeout.getEmergency());
log.info("共{}条数据", tickets.size());
log.info("【工单超时提醒】共{}条数据", tickets.size());
tickets.forEach(this::ticketHande);
}
private void generalRemind(TiketTimeoutDTO cfgTimeout) {
log.info("获取状态为普通且{}天未解决的工单", cfgTimeout.getGeneral());
log.info("【工单超时提醒】获取状态为普通且{}天未解决的工单", cfgTimeout.getGeneral());
List<Ticket> tickets = ticketService.getGenerals(cfgTimeout.getGeneral());
log.info("共{}条数据", tickets.size());
log.info("【工单超时提醒】共{}条数据", tickets.size());
tickets.forEach(this::ticketHande);
}
private void nonemergencyRemind(TiketTimeoutDTO cfgTimeout) {
log.info("获取状态为非紧急且{}天未解决的工单", cfgTimeout.getNonemergency());
log.info("【工单超时提醒】获取状态为非紧急且{}天未解决的工单", cfgTimeout.getNonemergency());
List<Ticket> tickets = ticketService.getNonemergency(cfgTimeout.getNonemergency());
log.info("共{}条数据", tickets.size());
log.info("【工单超时提醒】共{}条数据", tickets.size());
tickets.forEach(this::ticketHande);
}
private void ticketHande(Ticket ticket) {
AppUser createUser=appUserService.getById(ticket.getUserId());
//处理人
List<Integer> adminUserIds = Arrays.stream(ticket.getHandle().split(","))
Set<Integer> adminUserIds = Arrays.stream(ticket.getHandle().split(","))
.map(Integer::parseInt)
.collect(Collectors.toList());
.collect(Collectors.toSet());
//CQM
adminUserIds.add(ticket.getCqm());
//管理端关注人
@ -194,6 +198,7 @@ public class TicketScheduledTasks {
if (CollectionUtil.isNotEmpty(followUserIds)){
adminUserIds.addAll(followUserIds);
}
if (CollectionUtil.isNotEmpty(adminUserIds)) {
List<AdminUser> adminUsers = adminUserService.listByIds(adminUserIds);
String subject = dictionaryItemTranslateService.getValueByCode(Constant.DICTIONARY_EMAIL_NOTIFY, Constant.DICTIONARY_ITEM_EMAIL_TITLE_TICKET_TIMEOUT, Constant.DEFAULT_LANGUAGE_CODE);
String content = dictionaryItemTranslateService.getValueByCode(Constant.DICTIONARY_EMAIL_NOTIFY, Constant.DICTIONARY_ITEM_EMAIL_CONTENT_TICKET_NOTIFY, Constant.DEFAULT_LANGUAGE_CODE)
@ -206,19 +211,19 @@ public class TicketScheduledTasks {
try {
sendEamilForAdminUser(adminUsers, subject, content);
} catch (Exception e) {
log.error("邮件发送失败", e);
log.error("【工单超时提醒】邮件发送失败", e);
}
}
//客户端关注人
List<Integer> appUserIds=ticketFollowService.lambdaQuery()
Set<Integer> appUserIds=ticketFollowService.lambdaQuery()
.eq(TicketFollow::getTicketId, ticket.getId())
.eq(TicketFollow::getFrom, (byte) 0)
.list()
.stream()
.map(TicketFollow::getUserId)
.collect(Collectors.toList());
.collect(Collectors.toSet());
appUserIds.add(ticket.getUserId());
List<AppUser> appUsers = appUserService.listByIds(appUserIds);
appUsers.add(createUser);
sendAppMessage(appUsers, ticket);
}
@ -231,6 +236,7 @@ public class TicketScheduledTasks {
private void sendAppMessage(List<AppUser> appUsers, Ticket ticket){
for (AppUser appUser : appUsers){
log.info("【工单超时提醒】添加消息给{}({})",appUser.getName(),appUser.getId());
appMessageService.add(new AppMessage()
.setUserId(appUser.getId())
.setTicketId(ticket.getId())
@ -243,8 +249,18 @@ public class TicketScheduledTasks {
private void sendEamilForAdminUser(List<AdminUser> adminUsers,String subject,String content) throws MessagingException {
if (CollectionUtil.isNotEmpty(adminUsers)){
for (AdminUser adminUser:adminUsers) {
log.info("【工单超时提醒】发送邮件到{}",adminUser.getEmail());
emailService.sendEmail(adminUser.getEmail(),subject,content);
}
}
}
private void sendEamilForAppUser(List<AppUser> users,String subject,String content) throws MessagingException {
if (CollectionUtil.isNotEmpty(users)){
for (AppUser user:users) {
log.info("【工单超时提醒】发送邮件到{}",user.getEmail());
emailService.sendEmail(user.getEmail(),subject,content);
}
}
}
}

View File

@ -22,7 +22,7 @@ public class TicketAddRequest {
//标题
@NotBlank
@Size(max = 20, message = "标题长度不能超过20")
@Size(max = 150, message = "标题长度不能超过150")
private String title;
//描述

View File

@ -122,12 +122,12 @@ public class TicketServiceImpl extends ServiceImpl<TicketMapper, Ticket> impleme
if (Objects.nonNull(request.getEndTime())) {
request.setEndTime(request.getEndTime().plusDays(1));
}
if (request.getType() == 2) {
return baseMapper.searchFromAdminAndFollow(request, AdminUserUtil.getUserId(), new Page<>(request.getPage(), request.getPageSize()));
} else if (request.getType() == 4) {
Integer userId = AdminUserUtil.getUserId();
List<Integer> tickerMangagers = adminUserService.getTickerMangagers();
request.setTicketManager(tickerMangagers.stream().anyMatch(uid -> Objects.equals(uid, userId)));
if (request.getType() == 2) {
return baseMapper.searchFromAdminAndFollow(request, AdminUserUtil.getUserId(), new Page<>(request.getPage(), request.getPageSize()));
} else if (request.getType() == 4) {
return baseMapper.searchFromAdmin(request, userId, new Page<>(request.getPage(), request.getPageSize()));
}
return new Page<>(request.getPage(), request.getPageSize(), 0);

View File

@ -51,7 +51,7 @@
AND d.agent_code=#{request.agentCode}
</if>
<if test="request.areaCode!=null and request.areaCode!=''">
AND FIND_IN_SET(#{request.areaCode},c.area_code)>0
AND u.is_primary AND FIND_IN_SET(#{request.areaCode},fun_getPrimaryUserAreaCode(u.company_id))>0
</if>
<if test="request.question!=null and request.question!=''">
AND t.question=#{request.question}
@ -219,7 +219,10 @@
FROM ticket t
LEFT JOIN app_user u ON t.user_id=u.id
LEFT JOIN app_area a2 ON u.area_id=a2.id
INNER JOIN ticket_follow tf ON t.id=tf.ticket_id AND tf.user_id=#{userId} AND tf.from=1 AND tf.favorites_id=#{favouritesId}
INNER JOIN ticket_follow tf ON t.id=tf.ticket_id AND tf.user_id=#{userId} AND tf.from=1
<if test="favouritesId>0">
AND tf.favorites_id=#{favouritesId}
</if>
LEFT JOIN device d ON t.device_no=d.device_no
LEFT JOIN t_base_device_type dt ON d.device_type=dt.device_type
LEFT JOIN dictionary_item di ON d.warranty_state=di.id