|  | @@ -1,6 +1,5 @@
 | 
											
												
													
														|  |  package com.fs.app.task;
 |  |  package com.fs.app.task;
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  |  import com.fs.app.taskService.QwExternalContactRatingService;
 |  |  import com.fs.app.taskService.QwExternalContactRatingService;
 | 
											
												
													
														|  |  import com.fs.app.taskService.SopLogsChatTaskService;
 |  |  import com.fs.app.taskService.SopLogsChatTaskService;
 | 
											
												
													
														|  |  import com.fs.app.taskService.SopLogsTaskService;
 |  |  import com.fs.app.taskService.SopLogsTaskService;
 | 
											
										
											
												
													
														|  | @@ -26,6 +25,13 @@ import java.time.LocalDateTime;
 | 
											
												
													
														|  |  import java.time.format.DateTimeFormatter;
 |  |  import java.time.format.DateTimeFormatter;
 | 
											
												
													
														|  |  import java.util.List;
 |  |  import java.util.List;
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | 
 |  | +/**
 | 
											
												
													
														|  | 
 |  | + * 企业微信SOP定时任务管理类
 | 
											
												
													
														|  | 
 |  | + * 负责处理各种定时任务,包括SOP规则检查、消息发送、数据清理等
 | 
											
												
													
														|  | 
 |  | + * 
 | 
											
												
													
														|  | 
 |  | + * @author 系统
 | 
											
												
													
														|  | 
 |  | + * @version 1.0
 | 
											
												
													
														|  | 
 |  | + */
 | 
											
												
													
														|  |  @Component
 |  |  @Component
 | 
											
												
													
														|  |  @Slf4j
 |  |  @Slf4j
 | 
											
												
													
														|  |  public class qwTask {
 |  |  public class qwTask {
 | 
											
										
											
												
													
														|  | @@ -44,9 +50,10 @@ public class qwTask {
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |      @Autowired
 |  |      @Autowired
 | 
											
												
													
														|  |      private ISopUserLogsService sopUserLogsService;
 |  |      private ISopUserLogsService sopUserLogsService;
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | 
 |  | +    
 | 
											
												
													
														|  |      @Autowired
 |  |      @Autowired
 | 
											
												
													
														|  |      private SopLogsTaskService sopLogsTaskService;
 |  |      private SopLogsTaskService sopLogsTaskService;
 | 
											
												
													
														|  | 
 |  | +    
 | 
											
												
													
														|  |      @Autowired
 |  |      @Autowired
 | 
											
												
													
														|  |      private SopWxLogsService sopWxLogsService;
 |  |      private SopWxLogsService sopWxLogsService;
 | 
											
												
													
														|  |  
 |  |  
 | 
											
										
											
												
													
														|  | @@ -64,143 +71,149 @@ public class qwTask {
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |      @Autowired
 |  |      @Autowired
 | 
											
												
													
														|  |      private QwSopLogsMapper qwSopLogsMapper;
 |  |      private QwSopLogsMapper qwSopLogsMapper;
 | 
											
												
													
														|  | 
 |  | +    
 | 
											
												
													
														|  |      @Autowired
 |  |      @Autowired
 | 
											
												
													
														|  |      private IQwSopTagService qwSopTagService;
 |  |      private IQwSopTagService qwSopTagService;
 | 
											
												
													
														|  | -    /**
 |  | 
 | 
											
												
													
														|  | -    * 定时任务 将 qw_sop任务 符合条件的录入到sop_user_Logs(clickHouse)
 |  | 
 | 
											
												
													
														|  | -    */
 |  | 
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | 
 |  | +    /**
 | 
											
												
													
														|  | 
 |  | +     * 定时任务:检查SOP规则时间
 | 
											
												
													
														|  | 
 |  | +     * 执行时间:每天凌晨 1:10:00
 | 
											
												
													
														|  | 
 |  | +     * 功能:将符合条件的qw_sop任务录入到sop_user_Logs(clickHouse)
 | 
											
												
													
														|  | 
 |  | +     */
 | 
											
												
													
														|  |      @Scheduled(cron = "0 10 1 * * ?")
 |  |      @Scheduled(cron = "0 10 1 * * ?")
 | 
											
												
													
														|  | -    public void qwCheckSopRuleTime()
 |  | 
 | 
											
												
													
														|  | -    {
 |  | 
 | 
											
												
													
														|  | 
 |  | +    public void qwCheckSopRuleTime() {
 | 
											
												
													
														|  |          qwSopService.checkSopRuleTime();
 |  |          qwSopService.checkSopRuleTime();
 | 
											
												
													
														|  |      }
 |  |      }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | 
 |  | +    /**
 | 
											
												
													
														|  | 
 |  | +     * 定时任务:添加标签
 | 
											
												
													
														|  | 
 |  | +     * 执行时间:每20分钟执行一次
 | 
											
												
													
														|  | 
 |  | +     * 功能:自动为符合条件的记录添加标签
 | 
											
												
													
														|  | 
 |  | +     */
 | 
											
												
													
														|  |      @Scheduled(cron = "0 0/20 * * * ?")
 |  |      @Scheduled(cron = "0 0/20 * * * ?")
 | 
											
												
													
														|  | -    public void addTag(){
 |  | 
 | 
											
												
													
														|  | 
 |  | +    public void addTag() {
 | 
											
												
													
														|  |          qwSopTagService.addTag();
 |  |          qwSopTagService.addTag();
 | 
											
												
													
														|  |      }
 |  |      }
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  |      /**
 |  |      /**
 | 
											
												
													
														|  | -     * 根据营期生成sopLogs待发记录
 |  | 
 | 
											
												
													
														|  | -     * @throws Exception
 |  | 
 | 
											
												
													
														|  | 
 |  | +     * 定时任务:根据营期生成sopLogs待发记录
 | 
											
												
													
														|  | 
 |  | +     * 执行时间:每小时的第5分钟执行
 | 
											
												
													
														|  | 
 |  | +     * 功能:根据营期时间生成需要发送的SOP日志记录
 | 
											
												
													
														|  | 
 |  | +     * 
 | 
											
												
													
														|  | 
 |  | +     * @throws Exception 执行异常
 | 
											
												
													
														|  |       */
 |  |       */
 | 
											
												
													
														|  |      @Scheduled(cron = "0 5 * * * ?") // 每小时的第5分钟触发
 |  |      @Scheduled(cron = "0 5 * * * ?") // 每小时的第5分钟触发
 | 
											
												
													
														|  |      @Async
 |  |      @Async
 | 
											
												
													
														|  |      public void selectSopUserLogsListByTime() throws Exception {
 |  |      public void selectSopUserLogsListByTime() throws Exception {
 | 
											
												
													
														|  | -        // 获取当前时间
 |  | 
 | 
											
												
													
														|  | 
 |  | +        // 获取当前时间,精确到小时
 | 
											
												
													
														|  |          LocalDateTime currentTime = LocalDateTime.now().withMinute(0).withSecond(0).withNano(0);
 |  |          LocalDateTime currentTime = LocalDateTime.now().withMinute(0).withSecond(0).withNano(0);
 | 
											
												
													
														|  | -        // 打印日志,确认时间
 |  | 
 | 
											
												
													
														|  | 
 |  | +        // 打印日志,确认任务执行时间
 | 
											
												
													
														|  |          log.info("任务实际执行时间: {}", currentTime);
 |  |          log.info("任务实际执行时间: {}", currentTime);
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -        // 调用服务方法
 |  | 
 | 
											
												
													
														|  | 
 |  | +        // 调用服务方法处理SOP用户日志
 | 
											
												
													
														|  |          sopLogsTaskService.selectSopUserLogsListByTime(currentTime);
 |  |          sopLogsTaskService.selectSopUserLogsListByTime(currentTime);
 | 
											
												
													
														|  |      }
 |  |      }
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  | 
 |  | +    /**
 | 
											
												
													
														|  | 
 |  | +     * 定时任务:微信SOP处理
 | 
											
												
													
														|  | 
 |  | +     * 执行时间:每小时的第5分钟执行
 | 
											
												
													
														|  | 
 |  | +     * 功能:处理微信相关的SOP日志
 | 
											
												
													
														|  | 
 |  | +     * 
 | 
											
												
													
														|  | 
 |  | +     * @throws Exception 执行异常
 | 
											
												
													
														|  | 
 |  | +     */
 | 
											
												
													
														|  |      @Scheduled(cron = "0 5 * * * ?") // 每小时的第5分钟触发
 |  |      @Scheduled(cron = "0 5 * * * ?") // 每小时的第5分钟触发
 | 
											
												
													
														|  |      public void wxSop() throws Exception {
 |  |      public void wxSop() throws Exception {
 | 
											
												
													
														|  | -        // 获取当前时间
 |  | 
 | 
											
												
													
														|  | 
 |  | +        // 获取当前时间,精确到小时
 | 
											
												
													
														|  |          LocalDateTime currentTime = LocalDateTime.now().withMinute(0).withSecond(0).withNano(0);
 |  |          LocalDateTime currentTime = LocalDateTime.now().withMinute(0).withSecond(0).withNano(0);
 | 
											
												
													
														|  | -        // 打印日志,确认时间
 |  | 
 | 
											
												
													
														|  | 
 |  | +        // 打印日志,确认任务执行时间
 | 
											
												
													
														|  |          log.info("任务实际执行时间: {}", currentTime);
 |  |          log.info("任务实际执行时间: {}", currentTime);
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -        // 调用服务方法
 |  | 
 | 
											
												
													
														|  | 
 |  | +        // 调用服务方法处理微信SOP日志
 | 
											
												
													
														|  |          sopWxLogsService.wxSopLogsByTime(currentTime);
 |  |          sopWxLogsService.wxSopLogsByTime(currentTime);
 | 
											
												
													
														|  |      }
 |  |      }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |      /**
 |  |      /**
 | 
											
												
													
														|  | -     * 定时任务 将 clickHouse的sopUserLogsChat(营期表)按每1分钟的巡回
 |  | 
 | 
											
												
													
														|  | 
 |  | +     * 定时任务:处理聊天SOP用户日志
 | 
											
												
													
														|  | 
 |  | +     * 执行时间:已注释,原为每分钟的第5秒执行
 | 
											
												
													
														|  | 
 |  | +     * 功能:将clickHouse的sopUserLogsChat(营期表)按每分钟巡回处理
 | 
											
												
													
														|  | 
 |  | +     * 
 | 
											
												
													
														|  | 
 |  | +     * @throws Exception 执行异常
 | 
											
												
													
														|  |       */
 |  |       */
 | 
											
												
													
														|  |  //    @Scheduled(cron = "5 0/1 * * * ?")
 |  |  //    @Scheduled(cron = "5 0/1 * * * ?")
 | 
											
												
													
														|  |      public void selectChatSopUserLogsListByTime() throws Exception {
 |  |      public void selectChatSopUserLogsListByTime() throws Exception {
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | 
 |  | +        // 获取当前时间,精确到分钟
 | 
											
												
													
														|  |          LocalDateTime today = LocalDateTime.now().withSecond(0).withNano(0);
 |  |          LocalDateTime today = LocalDateTime.now().withSecond(0).withNano(0);
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | 
 |  | +        // 创建AI聊天SOP日志
 | 
											
												
													
														|  |          sopLogsTaskChatService.createAiChatSopLogs(today);
 |  |          sopLogsTaskChatService.createAiChatSopLogs(today);
 | 
											
												
													
														|  |      }
 |  |      }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -//    /**
 |  | 
 | 
											
												
													
														|  | -//    * 定时 发送 通过调用 企业微信接口 发送的 SOP 群发消息
 |  | 
 | 
											
												
													
														|  | -//    */
 |  | 
 | 
											
												
													
														|  | -//    @Scheduled(cron = "0 15 0 * * ?")
 |  | 
 | 
											
												
													
														|  | -//    public void SendQwApiSopLogTimer(){
 |  | 
 | 
											
												
													
														|  | -//        log.info("zyp \n【企微官方接口群发开始】");
 |  | 
 | 
											
												
													
														|  | -////        qwSopLogsService.checkQwSopLogs();
 |  | 
 | 
											
												
													
														|  | -//        LocalDate localDate = LocalDateTime.now().withMinute(0).withSecond(0).withNano(0).toLocalDate();
 |  | 
 | 
											
												
													
														|  | -//        String date = localDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
 |  | 
 | 
											
												
													
														|  | -//
 |  | 
 | 
											
												
													
														|  | -//        qwSopLogsService.createCorpMassSending(date);
 |  | 
 | 
											
												
													
														|  | -//    }
 |  | 
 | 
											
												
													
														|  | -//
 |  | 
 | 
											
												
													
														|  | -//    /**
 |  | 
 | 
											
												
													
														|  | -//    * 定时获取 通过调用 企业微信接口 发送的 SOP 客户群发消息 的反馈结果
 |  | 
 | 
											
												
													
														|  | -//    */
 |  | 
 | 
											
												
													
														|  | -//    @Scheduled(cron = "0 0 8 * * ?")
 |  | 
 | 
											
												
													
														|  | -//    public void GetQwApiSopLogResultTimer(){
 |  | 
 | 
											
												
													
														|  | -//        qwSopLogsService.qwSopLogsResult();
 |  | 
 | 
											
												
													
														|  | -//    }
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  |      /**
 |  |      /**
 | 
											
												
													
														|  | -     * 定时 发送 通过调用 企业微信接口 发送的 SOP 群发消息(新版-安装营期发)
 |  | 
 | 
											
												
													
														|  | 
 |  | +     * 定时任务:发送企业微信SOP群发消息(新版-按营期发送)
 | 
											
												
													
														|  | 
 |  | +     * 执行时间:每天凌晨 0:20:00
 | 
											
												
													
														|  | 
 |  | +     * 功能:通过调用企业微信接口发送SOP群发消息
 | 
											
												
													
														|  |       */
 |  |       */
 | 
											
												
													
														|  |      @Scheduled(cron = "0 20 0 * * ?")
 |  |      @Scheduled(cron = "0 20 0 * * ?")
 | 
											
												
													
														|  | -    public void SendQwApiSopLogTimerNew(){
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | 
 |  | +    public void SendQwApiSopLogTimerNew() {
 | 
											
												
													
														|  |          log.info("zyp \n【企微官方接口群发开始】");
 |  |          log.info("zyp \n【企微官方接口群发开始】");
 | 
											
												
													
														|  | -//        qwSopLogsService.checkQwSopLogs();
 |  | 
 | 
											
												
													
														|  | 
 |  | +        
 | 
											
												
													
														|  | 
 |  | +        // 获取当前日期
 | 
											
												
													
														|  |          LocalDate localDate = LocalDateTime.now().withMinute(0).withSecond(0).withNano(0).toLocalDate();
 |  |          LocalDate localDate = LocalDateTime.now().withMinute(0).withSecond(0).withNano(0).toLocalDate();
 | 
											
												
													
														|  |          String date = localDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
 |  |          String date = localDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | 
 |  | +        // 根据用户日志创建企业群发
 | 
											
												
													
														|  |          qwSopLogsService.createCorpMassSendingByUserLogs(date);
 |  |          qwSopLogsService.createCorpMassSendingByUserLogs(date);
 | 
											
												
													
														|  |      }
 |  |      }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  |      /**
 |  |      /**
 | 
											
												
													
														|  | -     * 定时获取 通过调用 企业微信接口 发送的 SOP 客户群发消息 的反馈结果(新版-安装营期发)
 |  | 
 | 
											
												
													
														|  | 
 |  | +     * 定时任务:获取企业微信SOP群发消息反馈结果(新版-按营期发送)
 | 
											
												
													
														|  | 
 |  | +     * 执行时间:每天上午 8:00:00
 | 
											
												
													
														|  | 
 |  | +     * 功能:获取通过企业微信接口发送的SOP客户群发消息的反馈结果
 | 
											
												
													
														|  |       */
 |  |       */
 | 
											
												
													
														|  |      @Scheduled(cron = "0 0 8 * * ?")
 |  |      @Scheduled(cron = "0 0 8 * * ?")
 | 
											
												
													
														|  | -    public void GetQwApiSopLogResultTimerNew(){
 |  | 
 | 
											
												
													
														|  | 
 |  | +    public void GetQwApiSopLogResultTimerNew() {
 | 
											
												
													
														|  |          qwSopLogsService.qwSopLogsResultNew();
 |  |          qwSopLogsService.qwSopLogsResultNew();
 | 
											
												
													
														|  |      }
 |  |      }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |      /**
 |  |      /**
 | 
											
												
													
														|  | -    * 定时群发API接口的 客户/群 群发
 |  | 
 | 
											
												
													
														|  | -    */
 |  | 
 | 
											
												
													
														|  | 
 |  | +     * 定时任务:群发API接口的客户/群群发
 | 
											
												
													
														|  | 
 |  | +     * 执行时间:每10分钟执行一次
 | 
											
												
													
														|  | 
 |  | +     * 功能:定时处理群发消息任务
 | 
											
												
													
														|  | 
 |  | +     */
 | 
											
												
													
														|  |      @Scheduled(cron = "0 0/10 * * * ?")
 |  |      @Scheduled(cron = "0 0/10 * * * ?")
 | 
											
												
													
														|  | -    public void sendQwGroupMsgTask(){
 |  | 
 | 
											
												
													
														|  | 
 |  | +    public void sendQwGroupMsgTask() {
 | 
											
												
													
														|  |          qwGroupMsgService.qwGroupMsgTask();
 |  |          qwGroupMsgService.qwGroupMsgTask();
 | 
											
												
													
														|  |      }
 |  |      }
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  |      /**
 |  |      /**
 | 
											
												
													
														|  | -    * 定时发送转换消息
 |  | 
 | 
											
												
													
														|  | -    */
 |  | 
 | 
											
												
													
														|  | 
 |  | +     * 定时任务:发送转换消息
 | 
											
												
													
														|  | 
 |  | +     * 执行时间:每天上午 8:00:00
 | 
											
												
													
														|  | 
 |  | +     * 功能:根据SOP规则发送转换消息
 | 
											
												
													
														|  | 
 |  | +     */
 | 
											
												
													
														|  |      @Scheduled(cron = "0 0 8 * * ?")
 |  |      @Scheduled(cron = "0 0 8 * * ?")
 | 
											
												
													
														|  | -//    @Scheduled(cron = "0/10 * * * * ?")
 |  | 
 | 
											
												
													
														|  | -    public void sendQwBySop(){
 |  | 
 | 
											
												
													
														|  | 
 |  | +//    @Scheduled(cron = "0/10 * * * * ?") // 测试用:每10秒执行一次
 | 
											
												
													
														|  | 
 |  | +    public void sendQwBySop() {
 | 
											
												
													
														|  |          sopUserLogsService.sendQwBySop();
 |  |          sopUserLogsService.sendQwBySop();
 | 
											
												
													
														|  |      }
 |  |      }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  |      /**
 |  |      /**
 | 
											
												
													
														|  | -    * 企业微信自动打标签/备注 没打上的 补偿机制
 |  | 
 | 
											
												
													
														|  | -    */
 |  | 
 | 
											
												
													
														|  | 
 |  | +     * 定时任务:企业微信自动打标签/备注补偿机制
 | 
											
												
													
														|  | 
 |  | +     * 执行时间:每3分钟执行一次
 | 
											
												
													
														|  | 
 |  | +     * 功能:对没有成功打标签或备注的记录进行补偿处理
 | 
											
												
													
														|  | 
 |  | +     */
 | 
											
												
													
														|  |      @Scheduled(cron = "0 0/3 * * * ?")
 |  |      @Scheduled(cron = "0 0/3 * * * ?")
 | 
											
												
													
														|  | -    public void qwExternalErrRetryTimer(){
 |  | 
 | 
											
												
													
														|  | 
 |  | +    public void qwExternalErrRetryTimer() {
 | 
											
												
													
														|  |          log.info("补偿机制开始");
 |  |          log.info("补偿机制开始");
 | 
											
												
													
														|  |          errRetryService.qwExternalErrRetryTimer();
 |  |          errRetryService.qwExternalErrRetryTimer();
 | 
											
												
													
														|  |      }
 |  |      }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  |      /**
 |  |      /**
 | 
											
												
													
														|  | -     * 同步完企微客户,然后对加微的数据信息筛选并上传给百度进行投流优化
 |  | 
 | 
											
												
													
														|  | -     */
 |  | 
 | 
											
												
													
														|  | -//    @Scheduled(cron = "0 0 6 * * ?")
 |  | 
 | 
											
												
													
														|  | -//    public void bdUpload(){
 |  | 
 | 
											
												
													
														|  | -//        qwWorkUserService.uploadBd();
 |  | 
 | 
											
												
													
														|  | -//    }
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -    /**
 |  | 
 | 
											
												
													
														|  | -     * 补发过期完课消息
 |  | 
 | 
											
												
													
														|  | 
 |  | +     * 定时任务:补发过期完课消息
 | 
											
												
													
														|  | 
 |  | +     * 执行时间:每小时的第0分钟执行
 | 
											
												
													
														|  | 
 |  | +     * 功能:补发已过期但未发送的完课消息
 | 
											
												
													
														|  |       */
 |  |       */
 | 
											
												
													
														|  |      @Scheduled(cron = "0 0 * * * ?")  // 每小时的第0分钟0秒执行
 |  |      @Scheduled(cron = "0 0 * * * ?")  // 每小时的第0分钟0秒执行
 | 
											
												
													
														|  | -    public void updateQwSopLogsByCancel(){
 |  | 
 | 
											
												
													
														|  | 
 |  | +    public void updateQwSopLogsByCancel() {
 | 
											
												
													
														|  |          log.info("补发过期完课消息 - 定时任务开始");
 |  |          log.info("补发过期完课消息 - 定时任务开始");
 | 
											
												
													
														|  |          try {
 |  |          try {
 | 
											
												
													
														|  |              sopLogsTaskService.updateSopLogsByCancel();
 |  |              sopLogsTaskService.updateSopLogsByCancel();
 | 
											
										
											
												
													
														|  | @@ -211,16 +224,18 @@ public class qwTask {
 | 
											
												
													
														|  |      }
 |  |      }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |      /**
 |  |      /**
 | 
											
												
													
														|  | -    * 批量处理sop待发送记录中已过期得消息每8分钟执行一次
 |  | 
 | 
											
												
													
														|  | -    */
 |  | 
 | 
											
												
													
														|  | 
 |  | +     * 定时任务:批量处理SOP待发送记录中已过期的消息
 | 
											
												
													
														|  | 
 |  | +     * 执行时间:每8分钟执行一次
 | 
											
												
													
														|  | 
 |  | +     * 功能:批量更新已过期的SOP待发送记录
 | 
											
												
													
														|  | 
 |  | +     */
 | 
											
												
													
														|  |      @Scheduled(cron = "0 0/8 * * * ?")
 |  |      @Scheduled(cron = "0 0/8 * * * ?")
 | 
											
												
													
														|  | -    public void batchProcessingExpiredMessages(){
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | 
 |  | +    public void batchProcessingExpiredMessages() {
 | 
											
												
													
														|  |          log.info("批量处理sop待发送记录中已过期的消息");
 |  |          log.info("批量处理sop待发送记录中已过期的消息");
 | 
											
												
													
														|  |          try {
 |  |          try {
 | 
											
												
													
														|  | -            // Step 1: 批量更新已过期的记录
 |  | 
 | 
											
												
													
														|  | 
 |  | +            // 步骤1:批量获取已过期的记录
 | 
											
												
													
														|  |              List<QwSopLogsDoSendListTVO> expireded = iQwSopLogsService.expiredMessagesByQwSopLogs();
 |  |              List<QwSopLogsDoSendListTVO> expireded = iQwSopLogsService.expiredMessagesByQwSopLogs();
 | 
											
												
													
														|  |              if (!expireded.isEmpty()) {
 |  |              if (!expireded.isEmpty()) {
 | 
											
												
													
														|  | 
 |  | +                // 步骤2:批量处理并插入记录
 | 
											
												
													
														|  |                  processAndInsertQwSopLogs(expireded);
 |  |                  processAndInsertQwSopLogs(expireded);
 | 
											
												
													
														|  |              }
 |  |              }
 | 
											
												
													
														|  |              log.info("处理已过期 - 定时任务成功完成");
 |  |              log.info("处理已过期 - 定时任务成功完成");
 | 
											
										
											
												
													
														|  | @@ -229,19 +244,23 @@ public class qwTask {
 | 
											
												
													
														|  |          }
 |  |          }
 | 
											
												
													
														|  |      }
 |  |      }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | -    // 定义一个方法来批量处理插入逻辑,支持每 500 条数据一次的批量插入
 |  | 
 | 
											
												
													
														|  | 
 |  | +    /**
 | 
											
												
													
														|  | 
 |  | +     * 批量处理插入逻辑,支持每500条数据一次的批量插入
 | 
											
												
													
														|  | 
 |  | +     * 
 | 
											
												
													
														|  | 
 |  | +     * @param logsByJsApiNotExtId 需要处理的日志列表
 | 
											
												
													
														|  | 
 |  | +     */
 | 
											
												
													
														|  |      private void processAndInsertQwSopLogs(List<QwSopLogsDoSendListTVO> logsByJsApiNotExtId) {
 |  |      private void processAndInsertQwSopLogs(List<QwSopLogsDoSendListTVO> logsByJsApiNotExtId) {
 | 
											
												
													
														|  |          // 定义批量插入的大小
 |  |          // 定义批量插入的大小
 | 
											
												
													
														|  |          int batchSize = 500;
 |  |          int batchSize = 500;
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -        // 循环处理外部用户 ID,每次处理批量大小的子集
 |  | 
 | 
											
												
													
														|  | 
 |  | +        // 循环处理外部用户ID,每次处理批量大小的子集
 | 
											
												
													
														|  |          for (int i = 0; i < logsByJsApiNotExtId.size(); i += batchSize) {
 |  |          for (int i = 0; i < logsByJsApiNotExtId.size(); i += batchSize) {
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | 
 |  | +            // 计算当前批次的结束索引
 | 
											
												
													
														|  |              int endIndex = Math.min(i + batchSize, logsByJsApiNotExtId.size());
 |  |              int endIndex = Math.min(i + batchSize, logsByJsApiNotExtId.size());
 | 
											
												
													
														|  | -            List<QwSopLogsDoSendListTVO> batchList = logsByJsApiNotExtId.subList(i, endIndex);  // 获取当前批次的子集
 |  | 
 | 
											
												
													
														|  | 
 |  | +            // 获取当前批次的子集
 | 
											
												
													
														|  | 
 |  | +            List<QwSopLogsDoSendListTVO> batchList = logsByJsApiNotExtId.subList(i, endIndex);
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | -            // 直接使用批次数据进行批量更新,不需要额外的 List
 |  | 
 | 
											
												
													
														|  | 
 |  | +            // 直接使用批次数据进行批量更新
 | 
											
												
													
														|  |              try {
 |  |              try {
 | 
											
												
													
														|  |                  qwSopLogsMapper.batchUpdateQwSopLogsBySendTime(batchList);
 |  |                  qwSopLogsMapper.batchUpdateQwSopLogsBySendTime(batchList);
 | 
											
												
													
														|  |              } catch (Exception e) {
 |  |              } catch (Exception e) {
 | 
											
										
											
												
													
														|  | @@ -252,35 +271,42 @@ public class qwTask {
 | 
											
												
													
														|  |      }
 |  |      }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |      /**
 |  |      /**
 | 
											
												
													
														|  | -    * 定时清除 2天以前的sop任务记录 每天删除
 |  | 
 | 
											
												
													
														|  | -    */
 |  | 
 | 
											
												
													
														|  | 
 |  | +     * 定时任务:清除2天以前的SOP任务记录
 | 
											
												
													
														|  | 
 |  | +     * 执行时间:每天凌晨 0:10:00
 | 
											
												
													
														|  | 
 |  | +     * 功能:清理历史数据,保持数据库性能
 | 
											
												
													
														|  | 
 |  | +     */
 | 
											
												
													
														|  |      @Scheduled(cron = "0 10 0 * * ?")
 |  |      @Scheduled(cron = "0 10 0 * * ?")
 | 
											
												
													
														|  |      public void deleteQwSopLogsByDate() {
 |  |      public void deleteQwSopLogsByDate() {
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  |          qwSopLogsMapper.deleteQwSopLogsByDate();
 |  |          qwSopLogsMapper.deleteQwSopLogsByDate();
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  |      }
 |  |      }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |      /**
 |  |      /**
 | 
											
												
													
														|  | -    * 定时处理 营期异常的数据 每3小时
 |  | 
 | 
											
												
													
														|  | -    */
 |  | 
 | 
											
												
													
														|  | -
 |  | 
 | 
											
												
													
														|  | 
 |  | +     * 定时任务:处理营期异常的数据
 | 
											
												
													
														|  | 
 |  | +     * 执行时间:每3小时的第30分钟执行
 | 
											
												
													
														|  | 
 |  | +     * 功能:修复营期相关的异常数据
 | 
											
												
													
														|  | 
 |  | +     */
 | 
											
												
													
														|  |      @Scheduled(cron = "0 30 0/3 * * ? ")
 |  |      @Scheduled(cron = "0 30 0/3 * * ? ")
 | 
											
												
													
														|  |      public void processRepairQwSopLogsTimer() {
 |  |      public void processRepairQwSopLogsTimer() {
 | 
											
												
													
														|  |          sopUserLogsService.repairSopUserLogsTimer();
 |  |          sopUserLogsService.repairSopUserLogsTimer();
 | 
											
												
													
														|  |      }
 |  |      }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |      /**
 |  |      /**
 | 
											
												
													
														|  | -    * 凌晨3点30开始 客户评级
 |  | 
 | 
											
												
													
														|  | -    */
 |  | 
 | 
											
												
													
														|  | 
 |  | +     * 定时任务:客户评级处理
 | 
											
												
													
														|  | 
 |  | +     * 执行时间:每天凌晨 3:45:00
 | 
											
												
													
														|  | 
 |  | +     * 功能:对SOP营期用户进行分级评级
 | 
											
												
													
														|  | 
 |  | +     * 备注:异步执行,避免阻塞其他任务
 | 
											
												
													
														|  | 
 |  | +     */
 | 
											
												
													
														|  |      @Scheduled(cron = "0 45 3 * * ?")
 |  |      @Scheduled(cron = "0 45 3 * * ?")
 | 
											
												
													
														|  |      @Async
 |  |      @Async
 | 
											
												
													
														|  |      public void processQwSopExternalContactRatingTimer() {
 |  |      public void processQwSopExternalContactRatingTimer() {
 | 
											
												
													
														|  | 
 |  | +        // 记录任务开始时间
 | 
											
												
													
														|  |          long startTimeMillis = System.currentTimeMillis();
 |  |          long startTimeMillis = System.currentTimeMillis();
 | 
											
												
													
														|  |          log.info("====== 开始选择和处理 sop营期-用户分级 ======");
 |  |          log.info("====== 开始选择和处理 sop营期-用户分级 ======");
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | 
 |  | +        // 执行用户分级评级
 | 
											
												
													
														|  |          qwExternalContactRatingService.ratingUserLogs();
 |  |          qwExternalContactRatingService.ratingUserLogs();
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | 
 |  | +        // 计算并记录任务执行耗时
 | 
											
												
													
														|  |          long endTimeMillis = System.currentTimeMillis();
 |  |          long endTimeMillis = System.currentTimeMillis();
 | 
											
												
													
														|  |          log.info("====== sop营期-用户分级处理完成,耗时 {} 毫秒 ======", (endTimeMillis - startTimeMillis));
 |  |          log.info("====== sop营期-用户分级处理完成,耗时 {} 毫秒 ======", (endTimeMillis - startTimeMillis));
 | 
											
												
													
														|  |      }
 |  |      }
 |