From 4f2925f1974844b66225ac70ae35065b8262b315 Mon Sep 17 00:00:00 2001
From: wlzboy <66905212@qq.com>
Date: 星期四, 04 十二月 2025 13:26:11 +0800
Subject: [PATCH] feat:增加微信token缓存
---
ruoyi-system/src/main/java/com/ruoyi/system/service/impl/WechatTaskNotifyServiceImpl.java | 80 ++++++++++++++++++++++++++++++++++++++--
1 files changed, 76 insertions(+), 4 deletions(-)
diff --git a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/WechatTaskNotifyServiceImpl.java b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/WechatTaskNotifyServiceImpl.java
index 48833d3..6b91981 100644
--- a/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/WechatTaskNotifyServiceImpl.java
+++ b/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/WechatTaskNotifyServiceImpl.java
@@ -5,12 +5,17 @@
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.WechatUtils;
-import com.ruoyi.system.domain.SysTask;
-import com.ruoyi.system.domain.SysTaskEmergency;
+import com.ruoyi.system.domain.SysConfig;
+import com.ruoyi.system.mapper.SysConfigMapper;
import com.ruoyi.system.mapper.SysTaskEmergencyMapper;
import com.ruoyi.system.mapper.SysTaskMapper;
+import com.ruoyi.system.domain.SysTask;
+import com.ruoyi.system.domain.SysTaskEmergency;
import com.ruoyi.system.mapper.SysUserMapper;
import com.ruoyi.system.service.IWechatTaskNotifyService;
+import com.ruoyi.system.service.ISysConfigService;
+import com.ruoyi.system.mapper.SysConfigMapper;
+import com.ruoyi.system.domain.SysConfig;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -44,6 +49,73 @@
@Autowired
private WechatConfig wechatConfig;
+ @Autowired
+ private ISysConfigService configService;
+
+ @Autowired
+ private SysConfigMapper configMapper;
+
+
+ /**
+ * 鑾峰彇搴旂敤绾у井淇ccessToken锛堝甫缂撳瓨锛�
+ * 浼樺厛浠巗ys_config璇诲彇骞跺垽鏂湁鏁堟湡锛涜繃鏈熷垯閲嶆柊鑾峰彇骞跺啓鍥瀞ys_config
+ */
+ private String getAppAccessToken() {
+ try {
+ String appId = wechatConfig.getAppId();
+ String tokenKey = "weixin.access_token." + appId;
+ String expireKey = "weixin.access_token_expires." + appId;
+
+ String cachedToken = configService.selectConfigByKey(tokenKey);
+ String cachedExpireStr = configService.selectConfigByKey(expireKey);
+ long now = System.currentTimeMillis();
+ long expireTs = 0L;
+ if (StringUtils.isNotEmpty(cachedExpireStr)) {
+ try {
+ expireTs = Long.parseLong(cachedExpireStr);
+ } catch (NumberFormatException e) {
+ expireTs = 0L;
+ }
+ }
+
+ // 缂撳瓨鏈夋晥涓旀湭杩囨湡锛堥鐣�60绉掑畨鍏ㄨ竟鐣岋級
+ if (StringUtils.isNotEmpty(cachedToken) && expireTs > now + 60000L) {
+ return cachedToken;
+ }
+
+ // 閲嶆柊鑾峰彇锛屽苟鍐欏叆sys_config
+ String newToken = WechatUtils.getAccessToken(wechatConfig.getAppId(), wechatConfig.getAppSecret());
+ if (StringUtils.isEmpty(newToken)) {
+ return null;
+ }
+ long newExpireTs = now + 7200L * 1000L; // 7200绉�
+ upsertConfig(tokenKey, newToken);
+ upsertConfig(expireKey, String.valueOf(newExpireTs));
+ return newToken;
+ } catch (Exception e) {
+ log.error("鑾峰彇搴旂敤绾у井淇ccessToken澶辫触", e);
+ return null;
+ }
+ }
+
+ /**
+ * 鏍规嵁configKey鍐欏叆鎴栨洿鏂皊ys_config
+ */
+ private void upsertConfig(String key, String value) {
+ SysConfig exist = configMapper.checkConfigKeyUnique(key);
+ if (exist != null && exist.getConfigId() != null) {
+ exist.setConfigValue(value);
+ configMapper.updateConfig(exist);
+ } else {
+ SysConfig cfg = new SysConfig();
+ cfg.setConfigKey(key);
+ cfg.setConfigName(key);
+ cfg.setConfigValue(value);
+ cfg.setConfigType("Y"); // 鍐呯疆鍙傛暟
+ configMapper.insertConfig(cfg);
+ }
+ }
+
/**
* 鍙戦�佷换鍔¢�氱煡娑堟伅缁欐寚瀹氱敤鎴峰垪琛�
*
@@ -69,8 +141,8 @@
// 鏌ヨ鎬ユ晳淇℃伅
SysTaskEmergency emergency = sysTaskEmergencyMapper.selectSysTaskEmergencyByTaskId(taskId);
- // 鑾峰彇寰俊AccessToken
- String accessToken = WechatUtils.getAccessToken(wechatConfig.getAppId(), wechatConfig.getAppSecret());
+ // 鑾峰彇寰俊AccessToken锛堣蛋搴旂敤绾х紦瀛橈級
+ String accessToken = getAppAccessToken();
if (StringUtils.isEmpty(accessToken)) {
log.error("鑾峰彇寰俊AccessToken澶辫触锛屾棤娉曞彂閫佷换鍔¢�氱煡");
return 0;
--
Gitblit v1.9.1