From 233cd5863039846029046c78acf73bf1dc2b33d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9B=B9=E9=B9=8F=E9=A3=9E?= Date: Mon, 3 Feb 2025 16:01:20 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E5=B7=A5=E5=8D=95?= =?UTF-8?q?=E6=8F=90=E9=86=92=E4=BB=BB=E5=8A=A1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../admin/config/TaskSchedulerConfig.java | 21 +++ .../admin/service/NotificationService.java | 24 ++++ .../service/impl/EmailINotifyPushService.java | 12 +- .../service/impl/SSEINotifyPushService.java | 22 +++ .../service/impl/WXINotifyPushService.java | 47 +++++++ .../admin/task/TicketScheduledTasks.java | 126 ++++++++++++++++++ .../cfs/controller/TiketController.java | 3 +- .../mobilebroken/common/pojo/dto/UserDTO.java | 4 +- .../mobilebroken/common/util/AppUserUtil.java | 18 +++ .../repository/entity/AppUser.java | 5 + .../repository/mapper/TicketMapper.java | 2 +- .../service/ITicketFollowService.java | 4 + .../repository/service/ITicketService.java | 6 + .../service/impl/TicketFollowServiceImpl.java | 13 +- .../service/impl/TicketServiceImpl.java | 29 +++- .../main/resources/mapper/TicketMapper.xml | 5 +- ...shService.java => INotifyPushService.java} | 4 +- .../service/impl/SSENotifyPushService.java | 16 --- .../service/impl/WXNotifyPushService.java | 44 ------ 19 files changed, 334 insertions(+), 71 deletions(-) create mode 100644 nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/config/TaskSchedulerConfig.java create mode 100644 nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/service/NotificationService.java rename nflg-mobilebroken-starter/src/main/java/com/nflg/mobilebroken/starter/service/impl/EmailNotifyPushService.java => nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/service/impl/EmailINotifyPushService.java (69%) create mode 100644 nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/service/impl/SSEINotifyPushService.java create mode 100644 nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/service/impl/WXINotifyPushService.java create mode 100644 nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/task/TicketScheduledTasks.java rename nflg-mobilebroken-starter/src/main/java/com/nflg/mobilebroken/starter/service/{NotifyPushService.java => INotifyPushService.java} (81%) delete mode 100644 nflg-mobilebroken-starter/src/main/java/com/nflg/mobilebroken/starter/service/impl/SSENotifyPushService.java delete mode 100644 nflg-mobilebroken-starter/src/main/java/com/nflg/mobilebroken/starter/service/impl/WXNotifyPushService.java diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/config/TaskSchedulerConfig.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/config/TaskSchedulerConfig.java new file mode 100644 index 00000000..cc0d3964 --- /dev/null +++ b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/config/TaskSchedulerConfig.java @@ -0,0 +1,21 @@ +package com.nflg.mobilebroken.admin.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.TaskScheduler; +import org.springframework.scheduling.annotation.EnableScheduling; +import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler; + +@Configuration +@EnableScheduling +public class TaskSchedulerConfig { + + @Bean + public TaskScheduler taskScheduler() { + ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler(); + scheduler.setPoolSize(10); // 设置线程池大小 + scheduler.setThreadNamePrefix("scheduled-task-"); + scheduler.initialize(); + return scheduler; + } +} diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/service/NotificationService.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/service/NotificationService.java new file mode 100644 index 00000000..896da2aa --- /dev/null +++ b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/service/NotificationService.java @@ -0,0 +1,24 @@ +package com.nflg.mobilebroken.admin.service; + +import com.nflg.mobilebroken.common.pojo.dto.UserDTO; +import com.nflg.mobilebroken.starter.service.INotifyPushService; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.util.List; + +@Component +public class NotificationService { + + @Resource + private List notifyPushServices; + + public void sendNotifications(UserDTO user, String subject, String content) { + for (INotifyPushService service : notifyPushServices) { + if (service.check(user)) { + continue; + } + service.push(user, subject, content); + } + } +} diff --git a/nflg-mobilebroken-starter/src/main/java/com/nflg/mobilebroken/starter/service/impl/EmailNotifyPushService.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/service/impl/EmailINotifyPushService.java similarity index 69% rename from nflg-mobilebroken-starter/src/main/java/com/nflg/mobilebroken/starter/service/impl/EmailNotifyPushService.java rename to nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/service/impl/EmailINotifyPushService.java index 9ca5107b..57206218 100644 --- a/nflg-mobilebroken-starter/src/main/java/com/nflg/mobilebroken/starter/service/impl/EmailNotifyPushService.java +++ b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/service/impl/EmailINotifyPushService.java @@ -1,10 +1,11 @@ -package com.nflg.mobilebroken.starter.service.impl; +package com.nflg.mobilebroken.admin.service.impl; +import cn.hutool.core.util.StrUtil; import com.nflg.mobilebroken.common.constant.STATE; import com.nflg.mobilebroken.common.exception.NflgException; import com.nflg.mobilebroken.common.pojo.dto.UserDTO; import com.nflg.mobilebroken.starter.service.EmailService; -import com.nflg.mobilebroken.starter.service.NotifyPushService; +import com.nflg.mobilebroken.starter.service.INotifyPushService; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -12,7 +13,7 @@ import javax.annotation.Resource; @Service @Slf4j -public class EmailNotifyPushService implements NotifyPushService { +public class EmailINotifyPushService implements INotifyPushService { @Resource private EmailService emailService; @@ -26,4 +27,9 @@ public class EmailNotifyPushService implements NotifyPushService { throw new NflgException(STATE.BusinessError, "发送邮件失败"); } } + + @Override + public boolean check(UserDTO user) { + return StrUtil.isNotBlank(user.getEmail()); + } } diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/service/impl/SSEINotifyPushService.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/service/impl/SSEINotifyPushService.java new file mode 100644 index 00000000..f0dce346 --- /dev/null +++ b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/service/impl/SSEINotifyPushService.java @@ -0,0 +1,22 @@ +package com.nflg.mobilebroken.admin.service.impl; + +import com.nflg.mobilebroken.common.pojo.dto.UserDTO; +import com.nflg.mobilebroken.starter.service.INotifyPushService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +@Service +@Slf4j +public class SSEINotifyPushService implements INotifyPushService { + + @Override + public void push(UserDTO user, String subject, String content) { + //TODO + log.error("尚未实现"); + } + + @Override + public boolean check(UserDTO user) { + return false; + } +} diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/service/impl/WXINotifyPushService.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/service/impl/WXINotifyPushService.java new file mode 100644 index 00000000..34dbb8d2 --- /dev/null +++ b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/service/impl/WXINotifyPushService.java @@ -0,0 +1,47 @@ +package com.nflg.mobilebroken.admin.service.impl; + +import com.nflg.mobilebroken.common.pojo.dto.UserDTO; +import com.nflg.mobilebroken.starter.service.INotifyPushService; +import lombok.extern.slf4j.Slf4j; +import me.chanjar.weixin.mp.api.WxMpService; +import me.chanjar.weixin.mp.config.WxMpConfigStorage; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +@Service +@Slf4j +public class WXINotifyPushService implements INotifyPushService { + + @Value("${wx.mp.templateMessage.config.templateId}") + private String templateId; + + @Resource + private WxMpService wxMpService; + + @Resource + private WxMpConfigStorage wxMpConfigStorage; + + @Override + public void push(UserDTO user,String subject, String content) { + //TODO + log.error("尚未实现"); +// WxMpTemplateMessage templateMessage = WxMpTemplateMessage.builder() +// .toUser(user.getWxOpenId()) // 接收用户的 OpenID +// .templateId(templateId) // 模板消息 ID +// .build(); +// templateMessage.addData(new WxMpTemplateData("first", "您好,这是一条测试消息", "#FF0000")); +// try { +// wxMpService.getTemplateMsgService().sendTemplateMsg(templateMessage); +// }catch (Exception ex){ +// log.error("发送微信模板消息失败",ex); +// throw new NflgException(STATE.BusinessError, "发送微信模板消息失败"); +// } + } + + @Override + public boolean check(UserDTO user) { + return false; + } +} diff --git a/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/task/TicketScheduledTasks.java b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/task/TicketScheduledTasks.java new file mode 100644 index 00000000..f0f19d1a --- /dev/null +++ b/nflg-mobilebroken-admin/src/main/java/com/nflg/mobilebroken/admin/task/TicketScheduledTasks.java @@ -0,0 +1,126 @@ +package com.nflg.mobilebroken.admin.task; + +import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.util.StrUtil; +import com.nflg.mobilebroken.admin.service.NotificationService; +import com.nflg.mobilebroken.common.pojo.dto.UserDTO; +import com.nflg.mobilebroken.repository.entity.AdminUser; +import com.nflg.mobilebroken.repository.entity.AppUser; +import com.nflg.mobilebroken.repository.entity.Ticket; +import com.nflg.mobilebroken.repository.service.IAdminUserService; +import com.nflg.mobilebroken.repository.service.IAppUserService; +import com.nflg.mobilebroken.repository.service.ITicketFollowService; +import com.nflg.mobilebroken.repository.service.ITicketService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.util.Arrays; +import java.util.List; +import java.util.Objects; +import java.util.stream.Collectors; + +@Component +@Slf4j +public class TicketScheduledTasks { + + @Resource + private ITicketService ticketService; + + @Resource + private IAdminUserService adminUserService; + + @Resource + private IAppUserService appUserService; + + @Resource + private ITicketFollowService ticketFollowService; + + @Resource + private NotificationService notificationService; + + /** + * 工单超时提醒 + * 每天午夜12点执行一次 + */ + @Scheduled(cron = "0 0 0 * * ?") + public void timeoutRemind() { + log.info("开始执行工单超时提醒"); + emergencyRemind(); + generalRemind(); + nonemergencyRemind(); + log.info("执行工单超时提醒完成"); + } + + private void emergencyRemind() { + int days = 3; + log.info("获取状态为紧急且{}天未解决的工单", days); + List tickets = ticketService.getEmergencys(days); + log.info("共{}条数据", tickets.size()); + tickets.forEach(this::ticketHande); + } + + private void generalRemind() { + int days = 7; + log.info("获取状态为普通且{}天未解决的工单", days); + List tickets = ticketService.getGenerals(days); + log.info("共{}条数据", tickets.size()); + tickets.forEach(this::ticketHande); + } + + private void nonemergencyRemind() { + int days = 15; + log.info("获取状态为普通且{}天未解决的工单", days); + List tickets = ticketService.getNonemergency(days); + log.info("共{}条数据", tickets.size()); + tickets.forEach(this::ticketHande); + } + + private void ticketHande(Ticket ticket) { + //给处理人发提醒 + List handleUserIds = Arrays.stream(ticket.getHandle().split(",")) + .map(Integer::parseInt) + .collect(Collectors.toList()); + List adminUsers = adminUserService.listByIds(handleUserIds); + if (CollectionUtil.isNotEmpty(adminUsers)) { + String subject = "该问题工单截止目前还未关闭,请跟进处理!"; + String content = "工单({})已超时未处理"; + adminUsers.forEach(adminUser -> { + sendToAdmin(adminUser, subject, StrUtil.format(content, ticket.getTitle())); + }); + } + //给创建人发提醒 + AppUser appUser = appUserService.getById(ticket.getUserId()); + if (Objects.nonNull(appUser)) { + String subject = "该问题工单截止目前还未关闭,请跟进处理!"; + String content = "工单({})已超时未处理"; + sendToApp(appUser, subject, StrUtil.format(content, ticket.getTitle())); + } + //给关注人发提醒 + List followUserIds = ticketFollowService.getUsers(ticket.getId()); + followUserIds.remove(appUser.getId()); + if (CollectionUtil.isNotEmpty(followUserIds)) { + List followUsers = appUserService.listByIds(followUserIds); + String subject = "该问题工单截止目前还未关闭,请跟进处理!"; + String content = "工单({})已超时未处理"; + followUsers.forEach(u -> { + sendToApp(u, subject, StrUtil.format(content, ticket.getTitle())); + }); + } + } + + private void sendToAdmin(AdminUser user, String subject, String content) { + notificationService.sendNotifications(new UserDTO() + .setName(user.getUserName()) + .setEmail(user.getEmail()) + .setWxOpenId(user.getOpenid()), subject, content); + } + + private void sendToApp(AppUser user, String subject, String content) { + notificationService.sendNotifications(new UserDTO() + .setName(user.getName()) + .setEmail(user.getEmail()) + .setWxOpenId(user.getOpenid()), subject, content); + } +} \ No newline at end of file diff --git a/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/controller/TiketController.java b/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/controller/TiketController.java index 9e19bbe9..26e204a3 100644 --- a/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/controller/TiketController.java +++ b/nflg-mobilebroken-cfs-app/src/main/java/com/nflg/mobilebroken/cfs/controller/TiketController.java @@ -4,7 +4,6 @@ import cn.hutool.core.util.StrUtil; import com.nflg.mobilebroken.common.constant.TicketState; import com.nflg.mobilebroken.common.pojo.ApiResult; import com.nflg.mobilebroken.common.pojo.PageData; -import com.nflg.mobilebroken.common.pojo.dto.UserDTO; import com.nflg.mobilebroken.common.pojo.request.*; import com.nflg.mobilebroken.common.pojo.vo.*; import com.nflg.mobilebroken.common.util.AppUserUtil; @@ -99,7 +98,7 @@ public class TiketController extends ControllerBase { **/ @PostMapping("searchTickets") public ApiResult> searchTickets(@Valid @RequestBody TicketSearchRequest request){ - return ApiResult.success(ticketService.search(request, new UserDTO().setId(1).setCompanyId(1))); + return ApiResult.success(ticketService.search(request, AppUserUtil.getUser())); } /** diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/dto/UserDTO.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/dto/UserDTO.java index f39bd399..7479b419 100644 --- a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/dto/UserDTO.java +++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/pojo/dto/UserDTO.java @@ -3,6 +3,8 @@ package com.nflg.mobilebroken.common.pojo.dto; import lombok.Data; import lombok.experimental.Accessors; +import java.util.List; + @Data @Accessors(chain = true) public class UserDTO { @@ -20,5 +22,5 @@ public class UserDTO { private String email; //公司id - private Integer companyId; + private List companyIds; } diff --git a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/util/AppUserUtil.java b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/util/AppUserUtil.java index 5aa1bf05..029b1508 100644 --- a/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/util/AppUserUtil.java +++ b/nflg-mobilebroken-common/src/main/java/com/nflg/mobilebroken/common/util/AppUserUtil.java @@ -1,5 +1,9 @@ package com.nflg.mobilebroken.common.util; +import com.nflg.mobilebroken.common.pojo.dto.UserDTO; + +import java.util.List; + public class AppUserUtil { public static Integer getUserId() { @@ -16,4 +20,18 @@ public class AppUserUtil { // return (String) SaTokenAppUtil.getExtra("email"); return "aa@gmail.com"; } + + public static List getCompanyIds() { +// return (List) SaTokenAppUtil.getExtra("companyIds"); + return List.of(1); + } + + public static UserDTO getUser() { + UserDTO user = new UserDTO(); + user.setId(getUserId()); + user.setName(getUserName()); + user.setEmail(getEmail()); + user.setCompanyIds(getCompanyIds()); + return user; + } } diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/AppUser.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/AppUser.java index 44a9a9e2..45aceaa5 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/AppUser.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/entity/AppUser.java @@ -70,6 +70,11 @@ public class AppUser implements Serializable { */ private Integer areaId; + /** + * 微信openid + */ + private String openid; + /** * 公司id */ diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/TicketMapper.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/TicketMapper.java index 8ad5a5fe..5efd605f 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/TicketMapper.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/mapper/TicketMapper.java @@ -24,7 +24,7 @@ public interface TicketMapper extends BaseMapper { IPage searchFollow(IPage page, TicketSearchRequest request, Integer userId); - IPage searchArea(IPage page, TicketSearchRequest request, Integer companyId); + IPage searchArea(IPage page, TicketSearchRequest request, List companyIds); void searchFromAdmin(AdminTicketSearchRequest request, IPage page); diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/ITicketFollowService.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/ITicketFollowService.java index 6422b3a3..5116f56c 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/ITicketFollowService.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/ITicketFollowService.java @@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.nflg.mobilebroken.common.pojo.request.FollowRequest; import com.nflg.mobilebroken.repository.entity.TicketFollow; +import java.util.List; + /** *

* 工单-关注 服务类 @@ -15,4 +17,6 @@ import com.nflg.mobilebroken.repository.entity.TicketFollow; public interface ITicketFollowService extends IService { void handle(FollowRequest request, Integer userId); + + List getUsers(Integer id); } diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/ITicketService.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/ITicketService.java index 0b300f2a..9cc7470c 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/ITicketService.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/ITicketService.java @@ -36,4 +36,10 @@ public interface ITicketService extends IService { void closeTicket(List ids); List search(AdminTicketSearchRequest request); + + List getEmergencys(int days); + + List getGenerals(int days); + + List getNonemergency(int days); } diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/TicketFollowServiceImpl.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/TicketFollowServiceImpl.java index e183b611..cc421e88 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/TicketFollowServiceImpl.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/TicketFollowServiceImpl.java @@ -2,7 +2,6 @@ package com.nflg.mobilebroken.repository.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.nflg.mobilebroken.common.pojo.dto.UserDTO; import com.nflg.mobilebroken.common.pojo.request.FollowRequest; import com.nflg.mobilebroken.repository.entity.TicketFollow; import com.nflg.mobilebroken.repository.mapper.TicketFollowMapper; @@ -10,7 +9,9 @@ import com.nflg.mobilebroken.repository.service.ITicketFollowService; import org.springframework.stereotype.Service; import java.time.LocalDateTime; +import java.util.List; import java.util.Objects; +import java.util.stream.Collectors; /** *

@@ -44,4 +45,14 @@ public class TicketFollowServiceImpl extends ServiceImpl getUsers(Integer id) { + return lambdaQuery() + .eq(TicketFollow::getTicketId, id) + .list() + .stream() + .map(TicketFollow::getUserId) + .collect(Collectors.toList()); + } } diff --git a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/TicketServiceImpl.java b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/TicketServiceImpl.java index 5757a366..0ef1ed86 100644 --- a/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/TicketServiceImpl.java +++ b/nflg-mobilebroken-repository/src/main/java/com/nflg/mobilebroken/repository/service/impl/TicketServiceImpl.java @@ -65,7 +65,7 @@ public class TicketServiceImpl extends ServiceImpl impleme }else if (request.getType()==2){ return baseMapper.searchFollow(new Page<>(request.getPageNum(), request.getPageSize()), request, user.getId()); }else if (request.getType()==3) { - return baseMapper.searchArea(new Page<>(request.getPageNum(), request.getPageSize()), request, user.getCompanyId()); + return baseMapper.searchArea(new Page<>(request.getPageNum(), request.getPageSize()), request, user.getCompanyIds()); } return null; } @@ -112,4 +112,31 @@ public class TicketServiceImpl extends ServiceImpl impleme return baseMapper.searchAllFromAdmin(request); } } + + @Override + public List getEmergencys(int days) { + return lambdaQuery() + .eq(Ticket::getState, TicketState.Processing.getState()) + .eq(Ticket::getUrgency, TicketUrgency.URGENCY.getState().byteValue()) + .ge(Ticket::getCreateTime, LocalDateTime.now().minusDays(days)) + .list(); + } + + @Override + public List getGenerals(int days) { + return lambdaQuery() + .eq(Ticket::getState, TicketState.Processing.getState()) + .eq(Ticket::getUrgency, TicketUrgency.GENERAL.getState().byteValue()) + .ge(Ticket::getCreateTime, LocalDateTime.now().minusDays(days)) + .list(); + } + + @Override + public List getNonemergency(int days) { + return lambdaQuery() + .eq(Ticket::getState, TicketState.Processing.getState()) + .eq(Ticket::getUrgency, TicketUrgency.NONEMERGENCY.getState().byteValue()) + .ge(Ticket::getCreateTime, LocalDateTime.now().minusDays(days)) + .list(); + } } diff --git a/nflg-mobilebroken-repository/src/main/resources/mapper/TicketMapper.xml b/nflg-mobilebroken-repository/src/main/resources/mapper/TicketMapper.xml index 05a71888..29c4f8eb 100644 --- a/nflg-mobilebroken-repository/src/main/resources/mapper/TicketMapper.xml +++ b/nflg-mobilebroken-repository/src/main/resources/mapper/TicketMapper.xml @@ -88,7 +88,10 @@ FROM ticket t LEFT JOIN app_user u ON t.user_id=u.id AND u.enable=1 LEFT JOIN app_area a ON u.area_id=a.id AND a.`enable`=1 - WHERE u.company_id=#{companyId} + WHERE u.company_id IN + + #{companyId} + diff --git a/nflg-mobilebroken-starter/src/main/java/com/nflg/mobilebroken/starter/service/NotifyPushService.java b/nflg-mobilebroken-starter/src/main/java/com/nflg/mobilebroken/starter/service/INotifyPushService.java similarity index 81% rename from nflg-mobilebroken-starter/src/main/java/com/nflg/mobilebroken/starter/service/NotifyPushService.java rename to nflg-mobilebroken-starter/src/main/java/com/nflg/mobilebroken/starter/service/INotifyPushService.java index dde16a67..5b58c23f 100644 --- a/nflg-mobilebroken-starter/src/main/java/com/nflg/mobilebroken/starter/service/NotifyPushService.java +++ b/nflg-mobilebroken-starter/src/main/java/com/nflg/mobilebroken/starter/service/INotifyPushService.java @@ -5,7 +5,9 @@ import com.nflg.mobilebroken.common.pojo.dto.UserDTO; /** * 通知推送服务 */ -public interface NotifyPushService { +public interface INotifyPushService { + + boolean check(UserDTO user); /** * 推送消息 diff --git a/nflg-mobilebroken-starter/src/main/java/com/nflg/mobilebroken/starter/service/impl/SSENotifyPushService.java b/nflg-mobilebroken-starter/src/main/java/com/nflg/mobilebroken/starter/service/impl/SSENotifyPushService.java deleted file mode 100644 index 24ab9d89..00000000 --- a/nflg-mobilebroken-starter/src/main/java/com/nflg/mobilebroken/starter/service/impl/SSENotifyPushService.java +++ /dev/null @@ -1,16 +0,0 @@ -package com.nflg.mobilebroken.starter.service.impl; - -import com.nflg.mobilebroken.common.pojo.dto.UserDTO; -import com.nflg.mobilebroken.starter.service.NotifyPushService; -import lombok.extern.slf4j.Slf4j; -import org.springframework.stereotype.Service; - -@Service -@Slf4j -public class SSENotifyPushService implements NotifyPushService { - - @Override - public void push(UserDTO user, String subject, String content) { - - } -} diff --git a/nflg-mobilebroken-starter/src/main/java/com/nflg/mobilebroken/starter/service/impl/WXNotifyPushService.java b/nflg-mobilebroken-starter/src/main/java/com/nflg/mobilebroken/starter/service/impl/WXNotifyPushService.java deleted file mode 100644 index 183b624a..00000000 --- a/nflg-mobilebroken-starter/src/main/java/com/nflg/mobilebroken/starter/service/impl/WXNotifyPushService.java +++ /dev/null @@ -1,44 +0,0 @@ -package com.nflg.mobilebroken.starter.service.impl; - -import com.nflg.mobilebroken.common.constant.STATE; -import com.nflg.mobilebroken.common.exception.NflgException; -import com.nflg.mobilebroken.common.pojo.dto.UserDTO; -import com.nflg.mobilebroken.starter.service.NotifyPushService; -import lombok.extern.slf4j.Slf4j; -import me.chanjar.weixin.mp.api.WxMpService; -import me.chanjar.weixin.mp.bean.template.WxMpTemplateData; -import me.chanjar.weixin.mp.bean.template.WxMpTemplateMessage; -import me.chanjar.weixin.mp.config.WxMpConfigStorage; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.stereotype.Service; - -import javax.annotation.Resource; - -@Service -@Slf4j -public class WXNotifyPushService implements NotifyPushService { - - @Value("${wx.mp.templateMessage.config.templateId}") - private String templateId; - - @Resource - private WxMpService wxMpService; - - @Resource - private WxMpConfigStorage wxMpConfigStorage; - - @Override - public void push(UserDTO user,String subject, String content) { - WxMpTemplateMessage templateMessage = WxMpTemplateMessage.builder() - .toUser(user.getWxOpenId()) // 接收用户的 OpenID - .templateId(templateId) // 模板消息 ID - .build(); - templateMessage.addData(new WxMpTemplateData("first", "您好,这是一条测试消息", "#FF0000")); - try { - wxMpService.getTemplateMsgService().sendTemplateMsg(templateMessage); - }catch (Exception ex){ - log.error("发送微信模板消息失败",ex); - throw new NflgException(STATE.BusinessError, "发送微信模板消息失败"); - } - } -}