fix: 修复一些问题
This commit is contained in:
parent
27018d0787
commit
13bfc612bf
|
|
@ -26,9 +26,7 @@ import java.time.LocalDateTime;
|
||||||
import java.time.ZoneId;
|
import java.time.ZoneId;
|
||||||
import java.time.ZoneOffset;
|
import java.time.ZoneOffset;
|
||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
import java.util.Arrays;
|
import java.util.*;
|
||||||
import java.util.List;
|
|
||||||
import java.util.Objects;
|
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
@Component
|
@Component
|
||||||
|
|
@ -76,27 +74,30 @@ public class TicketScheduledTasks {
|
||||||
*/
|
*/
|
||||||
@Scheduled(cron = "0 0 0 * * ?")
|
@Scheduled(cron = "0 0 0 * * ?")
|
||||||
public void sendInviteCommentEmail() {
|
public void sendInviteCommentEmail() {
|
||||||
List<Ticket> tickets=ticketService.getNonComment(7);
|
log.info("【工单评论邀请】开始执行");
|
||||||
|
List<Ticket> tickets = ticketService.getNonComment(3);
|
||||||
|
log.info("【工单评论邀请】共{}条数据", tickets.size());
|
||||||
tickets.forEach(ticket -> {
|
tickets.forEach(ticket -> {
|
||||||
AdminUser createUser = adminUserService.getById(ticket.getUserId());
|
AppUser createUser = appUserService.getById(ticket.getUserId());
|
||||||
if (Objects.equals(createUser.getState(), UserState.Activated.getState())) {
|
if (Objects.equals(createUser.getState(), UserState.Activated.getState())) {
|
||||||
List<Integer> adminUserIds = Arrays.stream(ticket.getHandle().split(","))
|
// List<Integer> adminUserIds = Arrays.stream(ticket.getHandle().split(","))
|
||||||
.map(Integer::parseInt)
|
// .map(Integer::parseInt)
|
||||||
.collect(Collectors.toList());
|
// .collect(Collectors.toList());
|
||||||
List<AdminUser> adminUsers = adminUserService.listByIds(adminUserIds);
|
// 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 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)
|
String content = dictionaryItemTranslateService.getValueByCode(Constant.DICTIONARY_EMAIL_NOTIFY, Constant.DICTIONARY_ITEM_EMAIL_CONTENT_TICKET_INVITE_COMMENT, Constant.DEFAULT_LANGUAGE_CODE)
|
||||||
.replace("${websiteUrl}", websiteUrl)
|
.replace("${websiteUrl}", websiteUrl)
|
||||||
.replace("${title}", ticket.getTitle())
|
.replace("${title}", ticket.getTitle())
|
||||||
.replace("${createUser}", createUser.getUserName())
|
.replace("${createUser}", createUser.getName())
|
||||||
.replace("${url}", websiteUrl+"/#/workOrder/workOrderDetail?id="+ticket.getId());
|
.replace("${url}", websiteUrl + "/#/workOrder/workOrderDetail?id=" + ticket.getId());
|
||||||
try {
|
try {
|
||||||
sendEamilForAdminUser(adminUsers, subject, content);
|
sendEamilForAppUser(Collections.singletonList(createUser), subject, content);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
log.error("邮件发送失败", e);
|
log.error("【工单评论邀请】邮件发送失败", e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
log.info("【工单评论邀请】执行完成");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -105,18 +106,20 @@ public class TicketScheduledTasks {
|
||||||
*/
|
*/
|
||||||
@Scheduled(cron = "0 0 0 * * ?")
|
@Scheduled(cron = "0 0 0 * * ?")
|
||||||
public void autoComment() {
|
public void autoComment() {
|
||||||
List<Ticket> tickets=ticketService.getNonComment(10);
|
log.info("【工单自动评论】开始执行");
|
||||||
TicketEvaluateAddVO vo=dictionaryItemTranslateService.getTicketEvaluateSelect(Constant.DEFAULT_LANGUAGE_CODE);
|
List<Ticket> tickets = ticketService.getNonComment(10);
|
||||||
|
log.info("【工单自动评论】共{}条数据", tickets.size());
|
||||||
|
TicketEvaluateAddVO vo = dictionaryItemTranslateService.getTicketEvaluateSelect(Constant.DEFAULT_LANGUAGE_CODE);
|
||||||
TicketEvaluateAddRequest request = new TicketEvaluateAddRequest();
|
TicketEvaluateAddRequest request = new TicketEvaluateAddRequest();
|
||||||
request.setType(1);
|
request.setType(1);
|
||||||
request.setScore(new BigDecimal("5"));
|
request.setScore(new BigDecimal("5"));
|
||||||
TicketEvaluateItemVO se=vo.getServiceEvaluation().stream()
|
TicketEvaluateItemVO se = vo.getServiceEvaluation().stream()
|
||||||
.filter(it->StrUtil.equals(it.getCode(), Constant.DICTIONARY_TYPE_SERVICE_EVALUATION+"Satisfied"))
|
.filter(it -> StrUtil.equals(it.getCode(), Constant.DICTIONARY_TYPE_SERVICE_EVALUATION + "Satisfied"))
|
||||||
.findFirst().get();
|
.findFirst().get();
|
||||||
request.setServiceEvaluationId(se.getId());
|
request.setServiceEvaluationId(se.getId());
|
||||||
request.setServiceEvaluationSelectIds(se.getChildren().stream().map(TicketEvaluateItemVO::getId).collect(Collectors.toList()));
|
request.setServiceEvaluationSelectIds(se.getChildren().stream().map(TicketEvaluateItemVO::getId).collect(Collectors.toList()));
|
||||||
TicketEvaluateItemVO pe=vo.getServiceEvaluation().stream()
|
TicketEvaluateItemVO pe = vo.getServiceEvaluation().stream()
|
||||||
.filter(it->StrUtil.equals(it.getCode(), Constant.DICTIONARY_TYPE_SERVICE_EVALUATION+"Satisfied"))
|
.filter(it -> StrUtil.equals(it.getCode(), Constant.DICTIONARY_TYPE_SERVICE_EVALUATION + "Satisfied"))
|
||||||
.findFirst().get();
|
.findFirst().get();
|
||||||
request.setProductEvaluationId(pe.getId());
|
request.setProductEvaluationId(pe.getId());
|
||||||
request.setProductEvaluationSelectIds(pe.getChildren().stream().map(TicketEvaluateItemVO::getId).collect(Collectors.toList()));
|
request.setProductEvaluationSelectIds(pe.getChildren().stream().map(TicketEvaluateItemVO::getId).collect(Collectors.toList()));
|
||||||
|
|
@ -124,6 +127,7 @@ public class TicketScheduledTasks {
|
||||||
request.setTicketId(ticket.getId());
|
request.setTicketId(ticket.getId());
|
||||||
ticketEvaluateService.add(request);
|
ticketEvaluateService.add(request);
|
||||||
});
|
});
|
||||||
|
log.info("【工单自动评论】执行完成");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -132,13 +136,13 @@ public class TicketScheduledTasks {
|
||||||
*/
|
*/
|
||||||
@Scheduled(cron = "0 0 0 * * ?")
|
@Scheduled(cron = "0 0 0 * * ?")
|
||||||
public void timeoutRemind() {
|
public void timeoutRemind() {
|
||||||
log.info("开始执行工单超时提醒");
|
log.info("【工单超时提醒】开始执行");
|
||||||
ParamConfig config = paramConfigService.lambdaQuery().eq(ParamConfig::getCode, "TiketTimeout").one();
|
ParamConfig config = paramConfigService.lambdaQuery().eq(ParamConfig::getCode, "TiketTimeout").one();
|
||||||
TiketTimeoutDTO cfgTimeout= JSONUtil.toBean(config.getValue(), TiketTimeoutDTO.class);
|
TiketTimeoutDTO cfgTimeout= JSONUtil.toBean(config.getValue(), TiketTimeoutDTO.class);
|
||||||
emergencyRemind(cfgTimeout);
|
emergencyRemind(cfgTimeout);
|
||||||
generalRemind(cfgTimeout);
|
generalRemind(cfgTimeout);
|
||||||
nonemergencyRemind(cfgTimeout);
|
nonemergencyRemind(cfgTimeout);
|
||||||
log.info("执行工单超时提醒完成");
|
log.info("【工单超时提醒】执行完成");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -155,32 +159,32 @@ public class TicketScheduledTasks {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void emergencyRemind(TiketTimeoutDTO cfgTimeout) {
|
private void emergencyRemind(TiketTimeoutDTO cfgTimeout) {
|
||||||
log.info("获取状态为紧急且{}天未解决的工单", cfgTimeout.getEmergency());
|
log.info("【工单超时提醒】获取状态为紧急且{}天未解决的工单", cfgTimeout.getEmergency());
|
||||||
List<Ticket> tickets = ticketService.getEmergencys(cfgTimeout.getEmergency());
|
List<Ticket> tickets = ticketService.getEmergencys(cfgTimeout.getEmergency());
|
||||||
log.info("共{}条数据", tickets.size());
|
log.info("【工单超时提醒】共{}条数据", tickets.size());
|
||||||
tickets.forEach(this::ticketHande);
|
tickets.forEach(this::ticketHande);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void generalRemind(TiketTimeoutDTO cfgTimeout) {
|
private void generalRemind(TiketTimeoutDTO cfgTimeout) {
|
||||||
log.info("获取状态为普通且{}天未解决的工单", cfgTimeout.getGeneral());
|
log.info("【工单超时提醒】获取状态为普通且{}天未解决的工单", cfgTimeout.getGeneral());
|
||||||
List<Ticket> tickets = ticketService.getGenerals(cfgTimeout.getGeneral());
|
List<Ticket> tickets = ticketService.getGenerals(cfgTimeout.getGeneral());
|
||||||
log.info("共{}条数据", tickets.size());
|
log.info("【工单超时提醒】共{}条数据", tickets.size());
|
||||||
tickets.forEach(this::ticketHande);
|
tickets.forEach(this::ticketHande);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void nonemergencyRemind(TiketTimeoutDTO cfgTimeout) {
|
private void nonemergencyRemind(TiketTimeoutDTO cfgTimeout) {
|
||||||
log.info("获取状态为非紧急且{}天未解决的工单", cfgTimeout.getNonemergency());
|
log.info("【工单超时提醒】获取状态为非紧急且{}天未解决的工单", cfgTimeout.getNonemergency());
|
||||||
List<Ticket> tickets = ticketService.getNonemergency(cfgTimeout.getNonemergency());
|
List<Ticket> tickets = ticketService.getNonemergency(cfgTimeout.getNonemergency());
|
||||||
log.info("共{}条数据", tickets.size());
|
log.info("【工单超时提醒】共{}条数据", tickets.size());
|
||||||
tickets.forEach(this::ticketHande);
|
tickets.forEach(this::ticketHande);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ticketHande(Ticket ticket) {
|
private void ticketHande(Ticket ticket) {
|
||||||
AppUser createUser=appUserService.getById(ticket.getUserId());
|
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)
|
.map(Integer::parseInt)
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toSet());
|
||||||
//CQM
|
//CQM
|
||||||
adminUserIds.add(ticket.getCqm());
|
adminUserIds.add(ticket.getCqm());
|
||||||
//管理端关注人
|
//管理端关注人
|
||||||
|
|
@ -194,31 +198,32 @@ public class TicketScheduledTasks {
|
||||||
if (CollectionUtil.isNotEmpty(followUserIds)){
|
if (CollectionUtil.isNotEmpty(followUserIds)){
|
||||||
adminUserIds.addAll(followUserIds);
|
adminUserIds.addAll(followUserIds);
|
||||||
}
|
}
|
||||||
|
if (CollectionUtil.isNotEmpty(adminUserIds)) {
|
||||||
List<AdminUser> adminUsers = adminUserService.listByIds(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 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)
|
String content = dictionaryItemTranslateService.getValueByCode(Constant.DICTIONARY_EMAIL_NOTIFY, Constant.DICTIONARY_ITEM_EMAIL_CONTENT_TICKET_NOTIFY, Constant.DEFAULT_LANGUAGE_CODE)
|
||||||
.replace("${no}", ticket.getNo())
|
.replace("${no}", ticket.getNo())
|
||||||
.replace("${title}", ticket.getTitle())
|
.replace("${title}", ticket.getTitle())
|
||||||
.replace("${createUser}", createUser.getName())
|
.replace("${createUser}", createUser.getName())
|
||||||
.replace("${handleUser}", StrUtil.join(",",adminUsers.stream().map(AdminUser::getUserName).collect(Collectors.toList())))
|
.replace("${handleUser}", StrUtil.join(",", adminUsers.stream().map(AdminUser::getUserName).collect(Collectors.toList())))
|
||||||
.replace("${createTime}", toTimeString(ticket.getCreateTime()))
|
.replace("${createTime}", toTimeString(ticket.getCreateTime()))
|
||||||
.replace("${msg}", subject);
|
.replace("${msg}", subject);
|
||||||
try {
|
try {
|
||||||
sendEamilForAdminUser(adminUsers, subject, content);
|
sendEamilForAdminUser(adminUsers, subject, content);
|
||||||
}catch (Exception e){
|
} 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::getTicketId, ticket.getId())
|
||||||
.eq(TicketFollow::getFrom, (byte) 0)
|
.eq(TicketFollow::getFrom, (byte) 0)
|
||||||
.list()
|
.list()
|
||||||
.stream()
|
.stream()
|
||||||
.map(TicketFollow::getUserId)
|
.map(TicketFollow::getUserId)
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toSet());
|
||||||
|
appUserIds.add(ticket.getUserId());
|
||||||
List<AppUser> appUsers = appUserService.listByIds(appUserIds);
|
List<AppUser> appUsers = appUserService.listByIds(appUserIds);
|
||||||
appUsers.add(createUser);
|
|
||||||
sendAppMessage(appUsers, ticket);
|
sendAppMessage(appUsers, ticket);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -231,6 +236,7 @@ public class TicketScheduledTasks {
|
||||||
|
|
||||||
private void sendAppMessage(List<AppUser> appUsers, Ticket ticket){
|
private void sendAppMessage(List<AppUser> appUsers, Ticket ticket){
|
||||||
for (AppUser appUser : appUsers){
|
for (AppUser appUser : appUsers){
|
||||||
|
log.info("【工单超时提醒】添加消息给{}({})",appUser.getName(),appUser.getId());
|
||||||
appMessageService.add(new AppMessage()
|
appMessageService.add(new AppMessage()
|
||||||
.setUserId(appUser.getId())
|
.setUserId(appUser.getId())
|
||||||
.setTicketId(ticket.getId())
|
.setTicketId(ticket.getId())
|
||||||
|
|
@ -243,8 +249,18 @@ public class TicketScheduledTasks {
|
||||||
private void sendEamilForAdminUser(List<AdminUser> adminUsers,String subject,String content) throws MessagingException {
|
private void sendEamilForAdminUser(List<AdminUser> adminUsers,String subject,String content) throws MessagingException {
|
||||||
if (CollectionUtil.isNotEmpty(adminUsers)){
|
if (CollectionUtil.isNotEmpty(adminUsers)){
|
||||||
for (AdminUser adminUser:adminUsers) {
|
for (AdminUser adminUser:adminUsers) {
|
||||||
|
log.info("【工单超时提醒】发送邮件到{}",adminUser.getEmail());
|
||||||
emailService.sendEmail(adminUser.getEmail(),subject,content);
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -22,7 +22,7 @@ public class TicketAddRequest {
|
||||||
|
|
||||||
//标题
|
//标题
|
||||||
@NotBlank
|
@NotBlank
|
||||||
@Size(max = 20, message = "标题长度不能超过20")
|
@Size(max = 150, message = "标题长度不能超过150")
|
||||||
private String title;
|
private String title;
|
||||||
|
|
||||||
//描述
|
//描述
|
||||||
|
|
|
||||||
|
|
@ -122,12 +122,12 @@ public class TicketServiceImpl extends ServiceImpl<TicketMapper, Ticket> impleme
|
||||||
if (Objects.nonNull(request.getEndTime())) {
|
if (Objects.nonNull(request.getEndTime())) {
|
||||||
request.setEndTime(request.getEndTime().plusDays(1));
|
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();
|
Integer userId = AdminUserUtil.getUserId();
|
||||||
List<Integer> tickerMangagers = adminUserService.getTickerMangagers();
|
List<Integer> tickerMangagers = adminUserService.getTickerMangagers();
|
||||||
request.setTicketManager(tickerMangagers.stream().anyMatch(uid -> Objects.equals(uid, userId)));
|
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 baseMapper.searchFromAdmin(request, userId, new Page<>(request.getPage(), request.getPageSize()));
|
||||||
}
|
}
|
||||||
return new Page<>(request.getPage(), request.getPageSize(), 0);
|
return new Page<>(request.getPage(), request.getPageSize(), 0);
|
||||||
|
|
|
||||||
|
|
@ -51,7 +51,7 @@
|
||||||
AND d.agent_code=#{request.agentCode}
|
AND d.agent_code=#{request.agentCode}
|
||||||
</if>
|
</if>
|
||||||
<if test="request.areaCode!=null and request.areaCode!=''">
|
<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>
|
||||||
<if test="request.question!=null and request.question!=''">
|
<if test="request.question!=null and request.question!=''">
|
||||||
AND t.question=#{request.question}
|
AND t.question=#{request.question}
|
||||||
|
|
@ -219,7 +219,10 @@
|
||||||
FROM ticket t
|
FROM ticket t
|
||||||
LEFT JOIN app_user u ON t.user_id=u.id
|
LEFT JOIN app_user u ON t.user_id=u.id
|
||||||
LEFT JOIN app_area a2 ON u.area_id=a2.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 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 t_base_device_type dt ON d.device_type=dt.device_type
|
||||||
LEFT JOIN dictionary_item di ON d.warranty_state=di.id
|
LEFT JOIN dictionary_item di ON d.warranty_state=di.id
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue