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