From e099d0cd93c26b44bc1c10e51944edfad0465b0c Mon Sep 17 00:00:00 2001
From: maven <2163098428@qq.com>
Date: 星期四, 05 三月 2026 17:44:44 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/dev_New' into dev_New

---
 src/main/java/com/ruoyi/basic/task/ReturnVisitReminderTask.java |   92 ++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 92 insertions(+), 0 deletions(-)

diff --git a/src/main/java/com/ruoyi/basic/task/ReturnVisitReminderTask.java b/src/main/java/com/ruoyi/basic/task/ReturnVisitReminderTask.java
new file mode 100644
index 0000000..245acda
--- /dev/null
+++ b/src/main/java/com/ruoyi/basic/task/ReturnVisitReminderTask.java
@@ -0,0 +1,92 @@
+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.domain.SysUserClient;
+import com.ruoyi.project.system.service.SysUserClientService;
+import com.ruoyi.project.system.service.impl.UnipushService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.time.LocalDateTime;
+import java.util.Set;
+
+/**
+ * <br>
+ * 瀹㈡埛鍥炶鎻愰啋瀹氭椂浠诲姟
+ * </br>
+ *
+ * @author deslrey
+ * @version 1.0
+ * @since 2026/03/05 9:04
+ */
+@Slf4j
+@Component
+public class ReturnVisitReminderTask {
+
+    private static final String REMINDER_QUEUE_KEY = "return_visit:reminder:queue";
+
+    @Autowired
+    private RedisCache redisCache;
+
+    @Autowired
+    private CustomerReturnVisitService customerReturnVisitService;
+
+    @Autowired
+    private UnipushService unipushService;
+
+    @Autowired
+    private SysUserClientService userClientService;
+
+    @SuppressWarnings("unchecked")
+    @Scheduled(fixedDelay = 60000)
+    public void processReminders() {
+        long now = System.currentTimeMillis();
+        Set<Object> 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);
+            }
+        }
+    }
+
+    @SuppressWarnings("unchecked")
+    private void processReminder(Long returnVisitId) {
+        CustomerReturnVisit returnVisit = customerReturnVisitService.getById(returnVisitId);
+        if (returnVisit == null || returnVisit.getIsEnabled() == 0 || returnVisit.getIsCompleted() == 1) {
+            return;
+        }
+        SysUserClient client = userClientService.getById(returnVisit.getRemindUserId());
+        if (client == null || client.getCid() == null) {
+            log.warn("鐢ㄦ埛鏈粦瀹欳ID, 鏃犳硶鍙戦�乁nipush鎺ㄩ��: userId={}", returnVisit.getRemindUserId());
+            return;
+        }
+
+        try {
+            unipushService.sendReturnVisitReminder(returnVisitId, client.getCid(), returnVisit.getContent(), returnVisit.getCustomerId());
+            CustomerReturnVisit updateObj = new CustomerReturnVisit();
+            updateObj.setId(returnVisitId);
+            updateObj.setIsCompleted(1);
+            customerReturnVisitService.updateById(updateObj);
+
+            log.info("鍥炶鎻愰啋宸查�氳繃 Unipush 鍙戦��: ID={}", returnVisitId);
+        } catch (Exception e) {
+            log.error("鍙戦�佸洖璁挎彁閱掑け璐ワ紝閲嶆柊鍔犲叆闃熷垪: ID={}", returnVisitId, e);
+            long retryTime = System.currentTimeMillis() + 60000;
+            redisCache.redisTemplate.opsForZSet().add(REMINDER_QUEUE_KEY, returnVisitId, retryTime);
+        }
+    }
+}
\ No newline at end of file

--
Gitblit v1.9.3