From 52b61fce22f188e37a88c20740e005ff109637a7 Mon Sep 17 00:00:00 2001
From: hsy <1029150275@qq.com>
Date: 星期一, 17 八月 2026 15:02:27 +0800
Subject: [PATCH] dos: 新增表:mes_pro_task_pause_record

---
 yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/redis/dv/metering/MesDvMeteringRemindRedisDAO.java |   54 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 54 insertions(+), 0 deletions(-)

diff --git a/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/redis/dv/metering/MesDvMeteringRemindRedisDAO.java b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/redis/dv/metering/MesDvMeteringRemindRedisDAO.java
new file mode 100644
index 0000000..a12e6f7
--- /dev/null
+++ b/yudao-module-mes/src/main/java/cn/iocoder/yudao/module/mes/dal/redis/dv/metering/MesDvMeteringRemindRedisDAO.java
@@ -0,0 +1,54 @@
+package cn.iocoder.yudao.module.mes.dal.redis.dv.metering;
+
+import cn.iocoder.yudao.module.mes.dal.redis.RedisKeyConstants;
+import jakarta.annotation.Resource;
+import org.springframework.data.redis.core.StringRedisTemplate;
+import org.springframework.stereotype.Repository;
+
+import java.time.Duration;
+import java.time.LocalDate;
+
+/**
+ * MES 璁¢噺鍣ㄥ叿鍒版湡鎻愰啋 Redis DAO
+ *
+ * @author 瓒呯骇绠$悊鍛�
+ */
+@Repository
+public class MesDvMeteringRemindRedisDAO {
+
+    /**
+     * 鎻愰啋鍘婚噸 KEY 鐨勮繃鏈熸椂闂达紙60 澶╋級锛屽悓涓�鍣ㄥ叿鍚屼竴鍒版湡鏃� 60 澶╁唴鍙彁閱掍竴娆�
+     */
+    private static final Duration REMIND_TIMEOUT = Duration.ofDays(60);
+    /**
+     * 鎵弿闂ㄩ棭鐨勮繃鏈熸椂闂达紙30 鍒嗛挓锛夛紝閬垮厤澶氬疄渚�/澶氭骞跺彂閲嶅鎵弿
+     */
+    private static final Duration SCAN_LOCK_TIMEOUT = Duration.ofMinutes(30);
+
+    @Resource
+    private StringRedisTemplate stringRedisTemplate;
+
+    /**
+     * 灏濊瘯鏍囪宸叉彁閱掞紙鍚屼竴鍣ㄥ叿鍚屼竴鍒版湡鏃� 60 澶╁唴鍙彁閱掍竴娆★級
+     *
+     * @param meteringId 璁¢噺鍣ㄥ叿缂栧彿
+     * @param nextCheckDate 鍒版湡鏃�
+     * @return true 琛ㄧず棣栨鏍囪鎴愬姛锛岄渶瑕佸彂閫佹彁閱�
+     */
+    public boolean tryMarkReminded(Long meteringId, LocalDate nextCheckDate) {
+        String key = RedisKeyConstants.METERING_EXPIRE_REMIND + meteringId + ":" + nextCheckDate;
+        return Boolean.TRUE.equals(stringRedisTemplate.opsForValue().setIfAbsent(key, "1", REMIND_TIMEOUT));
+    }
+
+    /**
+     * 灏濊瘯鑾峰彇褰撳ぉ鐨勬壂鎻忛棬闂╋紝閬垮厤澶氬疄渚嬪苟鍙戦噸澶嶆壂鎻�
+     *
+     * @param today 褰撳ぉ鏃ユ湡
+     * @return true 琛ㄧず鑾峰彇鎴愬姛锛堝彲浠ユ墽琛屾壂鎻忥級
+     */
+    public boolean tryAcquireScanLock(LocalDate today) {
+        String key = RedisKeyConstants.METERING_EXPIRE_REMIND_SCAN + today;
+        return Boolean.TRUE.equals(stringRedisTemplate.opsForValue().setIfAbsent(key, "1", SCAN_LOCK_TIMEOUT));
+    }
+
+}

--
Gitblit v1.9.3