瀏覽代碼

增加accessToken缓存

xueyiming 7 月之前
父節點
當前提交
819bb35ea3

+ 15 - 0
pom.xml

@@ -44,6 +44,21 @@
             <artifactId>pagehelper-spring-boot-starter</artifactId>
         </dependency>
 
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-data-redis</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>io.lettuce</groupId>
+            <artifactId>lettuce-core</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-pool2</artifactId>
+        </dependency>
+
         <dependency>
             <groupId>org.mybatis.generator</groupId>
             <artifactId>mybatis-generator-core</artifactId>

+ 25 - 0
we-com-server/src/main/java/com/tzld/piaoquan/wecom/config/RedisConfig.java

@@ -0,0 +1,25 @@
+package com.tzld.piaoquan.wecom.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.data.redis.connection.RedisConnectionFactory;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
+import org.springframework.data.redis.serializer.StringRedisSerializer;
+
+@Configuration
+public class RedisConfig {
+
+    @Bean
+    public RedisTemplate<String, String> redisTemplate(RedisConnectionFactory factory) {
+        RedisTemplate<String, String> redisTemplate = new RedisTemplate<>();
+        redisTemplate.setConnectionFactory(factory);
+        // key的序列化类型 保证可读性
+        redisTemplate.setKeySerializer(new StringRedisSerializer());
+        redisTemplate.setValueSerializer(new StringRedisSerializer());
+        redisTemplate.setHashKeySerializer(new StringRedisSerializer());
+        redisTemplate.setHashValueSerializer(new StringRedisSerializer());
+        return redisTemplate;
+    }
+
+}

+ 7 - 7
we-com-server/src/main/java/com/tzld/piaoquan/wecom/job/WeComHistoryDataJob.java

@@ -5,7 +5,7 @@ import com.alibaba.fastjson.JSONObject;
 import com.tzld.piaoquan.wecom.dao.mapper.UserMapper;
 import com.tzld.piaoquan.wecom.model.bo.Miniprogram;
 import com.tzld.piaoquan.wecom.model.po.HistoryMessage;
-import com.tzld.piaoquan.wecom.model.po.User;
+import com.tzld.piaoquan.wecom.service.AccessTokenService;
 import com.tzld.piaoquan.wecom.service.HistoryMessageService;
 import com.tzld.piaoquan.wecom.utils.HttpClientUtil;
 import com.tzld.piaoquan.wecom.utils.HttpPoolClient;
@@ -17,7 +17,6 @@ import org.springframework.stereotype.Component;
 import org.springframework.util.CollectionUtils;
 
 import java.io.IOException;
-import java.net.URLDecoder;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
@@ -25,6 +24,9 @@ import java.util.List;
 @Component
 public class WeComHistoryDataJob {
 
+    @Autowired
+    private AccessTokenService accessTokenService;
+
 
     String GET_HISTORY_DATA_URL = "https://open.weibanzhushou.com/open-api/group_msg/result";
 
@@ -43,8 +45,7 @@ public class WeComHistoryDataJob {
     public void selectHistoryMessage() {
         String res = null;
         try {
-            //TODO accessToken 暂时写死 后续增加接口刷新和存储
-            res = getHistoryData(ACCESS_TOKEN, size, 0, 1726416000L, 1726588800L);
+            res = getHistoryData(size, 0, 1726416000L, 1726588800L);
             //TODO 记录查询数据 info日志
         } catch (IOException e) {
             //TODO 记录异常日志 记录起止时间和页数 startTime endTime i
@@ -90,8 +91,6 @@ public class WeComHistoryDataJob {
     }
 
 
-
-
     private void insertHistoryMessageList(List<String> allExternalUserList, List<Miniprogram> miniprogramList, Date sendTime) {
         List<HistoryMessage> historyMessageList = new ArrayList<>();
         for (String externalUserId3rdParty : allExternalUserList) {
@@ -111,7 +110,8 @@ public class WeComHistoryDataJob {
         historyMessageService.batchInsertHistoryMessage(historyMessageList);
     }
 
-    public String getHistoryData(String accessToken, Integer limit, Integer offset, Long startTime, Long endTime) throws IOException {
+    public String getHistoryData(Integer limit, Integer offset, Long startTime, Long endTime) throws IOException {
+        String accessToken = accessTokenService.getAccessToken();
         String url = GET_HISTORY_DATA_URL
                 + "?access_token=" + accessToken
                 + "&limit=" + limit + "&offset=" + offset + "&start_time=" + startTime + "&end_time=" + endTime;

+ 11 - 7
we-com-server/src/main/java/com/tzld/piaoquan/wecom/job/WeComUserDataJob.java

@@ -5,6 +5,7 @@ import com.alibaba.fastjson.JSONObject;
 import com.tzld.piaoquan.wecom.dao.mapper.UserMapper;
 import com.tzld.piaoquan.wecom.model.po.User;
 import com.tzld.piaoquan.wecom.model.po.UserExample;
+import com.tzld.piaoquan.wecom.service.AccessTokenService;
 import com.tzld.piaoquan.wecom.utils.HttpClientUtil;
 import com.tzld.piaoquan.wecom.utils.HttpPoolClient;
 import org.apache.commons.lang3.ObjectUtils;
@@ -22,8 +23,6 @@ public class WeComUserDataJob {
 
     String UPDATE_USER_URL = "https://open.weibanzhushou.com/open-api/external_user/update/list";
 
-    String ACCESS_TOKEN = "38969e430219e6b18f88792184a37b11";
-
     private static final HttpPoolClient httpPoolClientDefault = HttpClientUtil.create(30000, 30000, 2000, 5000, 5, 30000);
 
     final int size = 100;
@@ -31,6 +30,9 @@ public class WeComUserDataJob {
     @Autowired
     private UserMapper userMapper;
 
+    @Autowired
+    private AccessTokenService accessTokenService;
+
     public void insertAllUser() {
         Long endTime = System.currentTimeMillis() / 1000;
         int sum = 0;
@@ -38,7 +40,7 @@ public class WeComUserDataJob {
             String res = null;
             try {
                 //TODO accessToken 暂时写死 后续增加接口刷新和存储
-                res = getUser(ACCESS_TOKEN, size, i * size, 1720540800L, endTime);
+                res = getUser(size, i * size, 1720540800L, endTime);
                 //TODO 记录查询数据 info日志
             } catch (IOException e) {
                 //TODO 记录异常日志 记录起止时间和页数 startTime endTime i
@@ -77,7 +79,8 @@ public class WeComUserDataJob {
         }
     }
 
-    public String getUser(String accessToken, Integer limit, Integer offset, Long startTime, Long endTime) throws IOException {
+    public String getUser(Integer limit, Integer offset, Long startTime, Long endTime) throws IOException {
+        String accessToken = accessTokenService.getAccessToken();
         String url = GET_USER_URL
                 + "?access_token=" + accessToken
                 + "&limit=" + limit + "&offset=" + offset + "&start_time=" + startTime + "&end_time=" + endTime;
@@ -87,12 +90,12 @@ public class WeComUserDataJob {
 
     public void updateUser() {
         Long endTime = System.currentTimeMillis() / 1000;
+        Long startTime = endTime - 60 * 60;
         int sum = 0;
         for (int i = 0; i < 1000; i++) {
             String res = null;
             try {
-                //TODO accessToken 暂时写死 后续增加接口刷新和存储
-                res = getUpdateUser(ACCESS_TOKEN, size, i * size, 1726821389L, endTime);
+                res = getUpdateUser(size, i * size, startTime, endTime);
                 //TODO 记录查询数据 info日志
             } catch (IOException e) {
                 //TODO 记录异常日志 记录起止时间和页数 startTime endTime i
@@ -140,7 +143,8 @@ public class WeComUserDataJob {
         }
     }
 
-    public String getUpdateUser(String accessToken, Integer limit, Integer offset, Long startTime, Long endTime) throws IOException {
+    public String getUpdateUser(Integer limit, Integer offset, Long startTime, Long endTime) throws IOException {
+        String accessToken = accessTokenService.getAccessToken();
         String url = UPDATE_USER_URL
                 + "?access_token=" + accessToken
                 + "&limit=" + limit + "&offset=" + offset + "&start_update_time=" + startTime + "&end_update_time=" + endTime

+ 6 - 0
we-com-server/src/main/java/com/tzld/piaoquan/wecom/service/AccessTokenService.java

@@ -0,0 +1,6 @@
+package com.tzld.piaoquan.wecom.service;
+
+public interface AccessTokenService {
+
+    String getAccessToken();
+}

+ 52 - 0
we-com-server/src/main/java/com/tzld/piaoquan/wecom/service/Impl/AccessTokenServiceImpl.java

@@ -0,0 +1,52 @@
+package com.tzld.piaoquan.wecom.service.Impl;
+
+import com.alibaba.fastjson.JSONObject;
+import com.tzld.piaoquan.wecom.service.AccessTokenService;
+import com.tzld.piaoquan.wecom.utils.HttpClientUtil;
+import com.tzld.piaoquan.wecom.utils.HttpPoolClient;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.stereotype.Service;
+
+import java.io.IOException;
+import java.util.concurrent.TimeUnit;
+
+@Service
+public class AccessTokenServiceImpl implements AccessTokenService {
+
+    private static final HttpPoolClient httpPoolClientDefault = HttpClientUtil.create(30000, 30000, 2000, 5000, 5, 30000);
+
+    private String POST_ACCESS_TOKEN_URL = "https://open.weibanzhushou.com/open-api/access_token/get";
+    private String ACCESS_TOKEN = "ACCESS_TOKEN";
+
+    private String CROP_ID = "1804267877438678017";
+
+    private String SECRET = "9fe05442559750d0cc3e71c5f81217a4";
+
+    @Autowired
+    private RedisTemplate<String, String> redisTemplate;
+
+    @Override
+    public String getAccessToken() {
+        String accessToken = redisTemplate.opsForValue().get(ACCESS_TOKEN);
+        if (StringUtils.isNotEmpty(accessToken)) {
+            return accessToken;
+        }
+        JSONObject param = new JSONObject();
+        param.put("corp_id", CROP_ID);
+        param.put("secret", SECRET);
+        try {
+            String res = httpPoolClientDefault.postJson(POST_ACCESS_TOKEN_URL, param.toJSONString());
+            JSONObject jsonObject = JSONObject.parseObject(res);
+            Long expiresIn = jsonObject.getLong("expires_in");
+            String newAccessToken = jsonObject.getString("access_token");
+            redisTemplate.opsForValue().set(ACCESS_TOKEN, newAccessToken, expiresIn, TimeUnit.SECONDS);
+            return newAccessToken;
+        } catch (IOException e) {
+            //TODO 打印错误日志
+            e.printStackTrace();
+        }
+        return null;
+    }
+}

+ 12 - 0
we-com-server/src/main/resources/application.properties

@@ -15,3 +15,15 @@ spring.datasource.testOnReturn=false
 spring.datasource.poolPreparedStatements=true
 
 
+
+spring.redis.database=2
+spring.redis.host=r-bp154bpw97gptefiqkpd.redis.rds.aliyuncs.com
+spring.redis.port=6379
+spring.redis.password=Qingqu2019
+spring.redis.lettuce.pool.max-active=8
+spring.redis.lettuce.pool.max-wait=-1
+spring.redis.lettuce.pool.max-idle=8
+spring.redis.lettuce.pool.min-idle=0
+
+
+