package com.ruoyi.basic.task; import com.ruoyi.basic.pojo.CustomerReturnVisit; import com.ruoyi.basic.service.CustomerReturnVisitService; import com.ruoyi.framework.redis.RedisCache; import com.ruoyi.project.system.service.SysUserClientService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import java.util.Set; /** *
* 客户回访提醒定时任务 *
* * @author deslrey * @version 1.0 * @since 2026/03/05 9:04 */ @Slf4j @Component @RequiredArgsConstructor public class ReturnVisitReminderTask { private static final String REMINDER_QUEUE_KEY = "return_visit:reminder:queue"; private final RedisCache redisCache; private final CustomerReturnVisitService customerReturnVisitService; private final SysUserClientService userClientService; @SuppressWarnings("unchecked") @Scheduled(fixedDelay = 60000) public void processReminders() { long now = System.currentTimeMillis(); Set dueReminders = redisCache.redisTemplate.opsForZSet().rangeByScore(REMINDER_QUEUE_KEY, 0, now); if (dueReminders == null || dueReminders.isEmpty()) { return; } for (Object obj : dueReminders) { Long returnVisitId = Long.valueOf(obj.toString()); try { Long removeCount = redisCache.redisTemplate.opsForZSet().remove(REMINDER_QUEUE_KEY, obj); if (removeCount != null && removeCount > 0) { processReminder(returnVisitId); } } catch (Exception e) { log.error("处理回访提醒失败: ID={}", returnVisitId, e); } } } private void processReminder(Long returnVisitId) { CustomerReturnVisit returnVisit = customerReturnVisitService.getById(returnVisitId); if (returnVisit == null || returnVisit.getIsEnabled() == 0 || returnVisit.getIsCompleted() == 1) { return; } try { // 标记已处理(推送功能已禁用) CustomerReturnVisit updateObj = new CustomerReturnVisit(); updateObj.setId(returnVisitId); updateObj.setIsCompleted(1); customerReturnVisitService.updateById(updateObj); log.info("回访提醒已处理(推送功能已禁用): ID={}", returnVisitId); } catch (Exception e) { log.error("处理回访提醒失败: ID={}", returnVisitId, e); } } }