From bb36bbb0968f6f599e18a651f5e385b98c4e1532 Mon Sep 17 00:00:00 2001
From: cl <1442464845@qq.com>
Date: 星期四, 30 四月 2026 12:13:09 +0800
Subject: [PATCH] 日志打印增加

---
 rsf-server/src/main/java/com/vincent/rsf/server/system/service/impl/ConfigServiceImpl.java |  147 +++++++++++++++++++++++++++++++++++++++++++++++--
 1 files changed, 141 insertions(+), 6 deletions(-)

diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/system/service/impl/ConfigServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/system/service/impl/ConfigServiceImpl.java
index a72dd94..9048f9d 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/system/service/impl/ConfigServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/system/service/impl/ConfigServiceImpl.java
@@ -1,14 +1,22 @@
 package com.vincent.rsf.server.system.service.impl;
 
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.vincent.rsf.common.utils.GsonUtils;
 import com.vincent.rsf.framework.common.DateUtils;
+import com.vincent.rsf.framework.common.R;
+import com.vincent.rsf.framework.exception.CoolException;
 import com.vincent.rsf.server.system.entity.Config;
 import com.vincent.rsf.server.system.enums.ConfigType;
 import com.vincent.rsf.server.system.enums.StatusType;
+import com.vincent.rsf.server.common.service.RedisService;
+import com.vincent.rsf.server.system.config.ConfigCacheProperties;
 import com.vincent.rsf.server.system.mapper.ConfigMapper;
 import com.vincent.rsf.server.system.service.ConfigService;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
 import javax.annotation.PostConstruct;
@@ -21,16 +29,106 @@
  * Created by vincent on 8/30/2024
  */
 @Service("configService")
+@Slf4j
 public class ConfigServiceImpl extends ServiceImpl<ConfigMapper, Config> implements ConfigService {
+
+    /** 涓� {@link RedisService#set(String, String, Object, Integer)} 鐨� flag 娈典竴鑷达細sys_config 闈炴案涔� key锛岃 {@link ConfigCacheProperties} */
+    private static final String REDIS_FLAG_SYS_CONFIG = "SYS_CONFIG";
 
     public static final Map<String, Config> CONFIG_CACHE = new ConcurrentHashMap<>();
 
+    @Autowired(required = false)
+    private RedisService redisService;
+    @Autowired
+    private ConfigCacheProperties configCacheProperties;
+
     @PostConstruct
     public void init() {
-        List<Config> list = this.list(new LambdaQueryWrapper<Config>().eq(Config::getStatus, StatusType.ENABLE.val));
-        for (Config config : list) {
-            CONFIG_CACHE.put(config.getFlag(), config);
+        try {
+            // List<Config> list = this.list(new LambdaQueryWrapper<Config>().eq(Config::getStatus, StatusType.ENABLE.val));
+            List<Config> list = safeList(new LambdaQueryWrapper<Config>().eq(Config::getStatus, StatusType.ENABLE.val));
+            for (Config config : list) {
+                CONFIG_CACHE.put(config.getFlag(), config);
+            }
+        } catch (Exception e) {
+            log.warn("閰嶇疆缂撳瓨鍒濆鍖栧け璐ワ紝璺宠繃閰嶇疆琛ㄥ姞杞斤紝鍚庣画鎸夐粯璁ゆ祦绋嬪鐞�", e);
         }
+    }
+
+    private boolean redisReady() {
+        return redisService != null && Boolean.TRUE.equals(redisService.initialize);
+    }
+
+    private static boolean isEffectiveConfig(Config c) {
+        return c != null && (c.getDeleted() == null || c.getDeleted() == 0);
+    }
+
+    private Config loadConfigFromDb(String flag) {
+        return getOne(new LambdaQueryWrapper<Config>()
+                .eq(Config::getFlag, flag)
+                .eq(Config::getDeleted, 0), false);
+    }
+
+    private Config tryRedisGetConfig(String flag) {
+        try {
+            return redisService.get(REDIS_FLAG_SYS_CONFIG, flag);
+        } catch (Exception e) {
+            log.debug("sys_config Redis get flag={}", flag, e);
+            return null;
+        }
+    }
+
+    private void tryRedisSetexConfig(String flag, Config loaded) {
+        try {
+            int ttl = Math.max(1, configCacheProperties.getRedisTtlSeconds());
+            redisService.set(REDIS_FLAG_SYS_CONFIG, flag, loaded, ttl);
+        } catch (Exception e) {
+            log.warn("sys_config Redis setex flag={}", flag, e);
+        }
+    }
+
+    @Override
+    public void evictSysConfigRedis(String flag) {
+        if (!redisReady() || StringUtils.isBlank(flag)) {
+            return;
+        }
+        try {
+            redisService.delete(REDIS_FLAG_SYS_CONFIG, flag);
+        } catch (Exception e) {
+            log.warn("sys_config Redis evict flag={}", flag, e);
+        }
+    }
+
+    @Override
+    public Config getCachedOrLoad(String flag) {
+        if (StringUtils.isBlank(flag)) {
+            return null;
+        }
+        if (redisReady()) {
+            Config fromRedis = tryRedisGetConfig(flag);
+            if (isEffectiveConfig(fromRedis)) {
+                CONFIG_CACHE.put(flag, fromRedis);
+                return fromRedis;
+            }
+            Config loaded = loadConfigFromDb(flag);
+            if (loaded != null) {
+                CONFIG_CACHE.put(flag, loaded);
+                tryRedisSetexConfig(flag, loaded);
+            }
+            return loaded;
+        }
+        Config cached = CONFIG_CACHE.get(flag);
+        if (isEffectiveConfig(cached)) {
+            return cached;
+        }
+        if (cached != null) {
+            CONFIG_CACHE.remove(flag);
+        }
+        Config loaded = loadConfigFromDb(flag);
+        if (loaded != null) {
+            CONFIG_CACHE.put(flag, loaded);
+        }
+        return loaded;
     }
 
     @Override
@@ -38,7 +136,8 @@
     public <T> T getVal(String key, Class<T> clazz) {
         Config config = CONFIG_CACHE.get(key);
         if (config == null) {
-            List<Config> list = this.list(new LambdaQueryWrapper<Config>().eq(Config::getFlag, key));
+            // List<Config> list = this.list(new LambdaQueryWrapper<Config>().eq(Config::getFlag, key));
+            List<Config> list = safeList(new LambdaQueryWrapper<Config>().eq(Config::getFlag, key));
             config = list.stream().findFirst().orElse(null);
             if (null == config) {
                 return null;
@@ -77,7 +176,8 @@
     public <T> boolean setVal(String key, T val) {
         Config config = CONFIG_CACHE.get(key);
         if (config == null) {
-            List<Config> list = this.list(new LambdaQueryWrapper<Config>().eq(Config::getFlag, key));
+            // List<Config> list = this.list(new LambdaQueryWrapper<Config>().eq(Config::getFlag, key));
+            List<Config> list = safeList(new LambdaQueryWrapper<Config>().eq(Config::getFlag, key));
             config = list.stream().findFirst().orElse(null);
             if (null == config) {
                 return false;
@@ -118,7 +218,42 @@
                 throw new UnsupportedOperationException("Unsupported ConfigType: " + configType);
         }
 
-        return this.updateById(config);
+        boolean ok = this.updateById(config);
+        if (ok) {
+            evictSysConfigRedis(key);
+        }
+        return ok;
+    }
+
+    private List<Config> safeList(LambdaQueryWrapper<Config> wrapper) {
+        try {
+            return this.list(wrapper);
+        } catch (Exception e) {
+            log.warn("閰嶇疆鏌ヨ澶辫触锛岃烦杩囬厤缃〃璇诲彇锛屾寜榛樿娴佺▼澶勭悊", e);
+            return java.util.Collections.emptyList();
+        }
+    }
+
+    /**
+     * 淇敼閰嶇疆
+     * @param config
+     * @return
+     */
+    @Override
+    public R modiftyStatus(Config config) {
+        if (!this.update(new LambdaUpdateWrapper<Config>().set(Config::getVal, config.getVal()).eq(Config::getFlag, config.getFlag()))) {
+            throw new CoolException("淇敼澶辫触锛侊紒");
+        }
+        Config fresh = getOne(new LambdaQueryWrapper<Config>()
+                .eq(Config::getFlag, config.getFlag())
+                .eq(Config::getDeleted, 0), false);
+        if (fresh != null) {
+            CONFIG_CACHE.put(fresh.getFlag(), fresh);
+        } else {
+            CONFIG_CACHE.remove(config.getFlag());
+        }
+        evictSysConfigRedis(config.getFlag());
+        return R.ok();
     }
 
 }

--
Gitblit v1.9.1