Browse Source

wxconfig 动态获取数据库中数据

lyhzzz 2 years ago
parent
commit
9b09df3b99

+ 2 - 0
src/main/java/com/fdkankan/tk/common/ResultCode.java

@@ -16,6 +16,8 @@ public enum ResultCode {
     UPLOAD_ERROR(7001,"文件上传失败"),
     UPLOAD_FILE_NO_EXIST(7002,"上传文件不存在"),
     UPLOAD_FILE_TO_LONG(7003,"文件上传过大"),
+    WX_CONFIG_ERROR(7004,"项目未配置Wxconfig,请于数据库中配置"),
+    WX_CONFIG_ERROR_2(7005,"项目配置Wxconfig,存在多个配置,请确保有且只有一个"),
 
 
     ;

+ 1 - 0
src/main/java/com/fdkankan/tk/service/IWxConfigService.java

@@ -13,4 +13,5 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface IWxConfigService extends IService<WxConfig> {
 
+    WxConfig getWxConfig();
 }

+ 8 - 8
src/main/java/com/fdkankan/tk/service/impl/WxConfigServiceImpl.java

@@ -2,7 +2,9 @@ package com.fdkankan.tk.service.impl;
 
 import com.alibaba.fastjson.JSONObject;
 import com.fdkankan.redis.constant.RedisKey;
+import com.fdkankan.tk.common.ResultCode;
 import com.fdkankan.tk.entity.WxConfig;
+import com.fdkankan.tk.exception.BusinessException;
 import com.fdkankan.tk.mapper.IWxConfigMapper;
 import com.fdkankan.tk.service.IWxConfigService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -24,20 +26,18 @@ import java.util.List;
 @Slf4j
 public class WxConfigServiceImpl extends ServiceImpl<IWxConfigMapper, WxConfig> implements IWxConfigService {
 
-    static WxConfig wxConfig = null;
-
-    @PostConstruct
-    public void initWxConfig(){
+    @Override
+    public WxConfig getWxConfig() {
         List<WxConfig> list = this.list();
         if(list.size() <=0){
             log.info("项目未配置Wxconfig,请于数据库中配置");
-            return;
+            throw new BusinessException(ResultCode.WX_CONFIG_ERROR);
         }
         if(list.size() >1){
             log.info("项目配置Wxconfig,存在多个配置,请确保有且只有一个");
-            return;
+            throw new BusinessException(ResultCode.WX_CONFIG_ERROR);
         }
-        wxConfig = list.get(0);
-        log.info("项目启动加载Wxconfig:{}",wxConfig);
+        log.info("加载Wxconfig:{}",list.get(0));
+        return  list.get(0);
     }
 }

+ 14 - 3
src/main/java/com/fdkankan/tk/service/impl/WxServiceImpl.java

@@ -9,6 +9,7 @@ import com.fdkankan.tk.common.ResultCode;
 import com.fdkankan.tk.common.util.RedisKeyUtil;
 import com.fdkankan.tk.common.util.UploadToOssUtil;
 import com.fdkankan.tk.entity.Room;
+import com.fdkankan.tk.entity.WxConfig;
 import com.fdkankan.tk.entity.WxUser;
 import com.fdkankan.tk.exception.BusinessException;
 import com.fdkankan.tk.httpClient.client.WxClient;
@@ -53,6 +54,8 @@ public class WxServiceImpl implements IWxService {
     String envVersion;
     @Value("${wx.path}")
     String wxPath;
+    @Autowired
+    IWxConfigService wxConfigService;
 
     //二维码
     static String getWxQrCodeUrl ="https://api.weixin.qq.com/cgi-bin/wxaapp/createwxaqrcode?access_token=%s";
@@ -61,11 +64,15 @@ public class WxServiceImpl implements IWxService {
 
     @Override
     public String getToken(){
-        String redisKey = RedisKeyUtil.AccessToken + WxConfigServiceImpl.wxConfig.getAppId();
+        WxConfig wxConfig = wxConfigService.getWxConfig();
+        if(wxConfig == null){
+            throw new BusinessException(ResultCode.WX_CONFIG_ERROR);
+        }
+        String redisKey = RedisKeyUtil.AccessToken + wxConfig.getAppId();
         if(redisUtil.hasKey(redisKey)){
             return redisUtil.get(redisKey);
         }
-        JSONObject jsonObject = wxClient.getToken(WxConfigServiceImpl.wxConfig.getAppId(), WxConfigServiceImpl.wxConfig.getAppSecret());
+        JSONObject jsonObject = wxClient.getToken(wxConfig.getAppId(), wxConfig.getAppSecret());
         String access_token = jsonObject.getString("access_token");
         if(StringUtils.isNotBlank(access_token)){
             redisUtil.set(redisKey,access_token,7000);
@@ -77,6 +84,10 @@ public class WxServiceImpl implements IWxService {
     //生成分享二维码
     @Override
     public void getWxQRCode(String path, String targetTmpPath,Integer reCount)  {
+        WxConfig wxConfig = wxConfigService.getWxConfig();
+        if(wxConfig == null){
+            throw new BusinessException(ResultCode.WX_CONFIG_ERROR);
+        }
         InputStream is = null;
         FileOutputStream fileOutputStream =null;
         try {
@@ -97,7 +108,7 @@ public class WxServiceImpl implements IWxService {
                     int errcode = jsonObject.getInteger("errcode");
                     if(errcode == 40001) {
                         log.info("token过期了");
-                        String redisKey = RedisKeyUtil.AccessToken + WxConfigServiceImpl.wxConfig.getAppId();
+                        String redisKey = RedisKeyUtil.AccessToken + wxConfig.getAppId();
                         redisUtil.del(redisKey);
                         getWxQRCode(path, targetTmpPath,reCount);
                     }

+ 9 - 1
src/main/java/com/fdkankan/tk/service/impl/WxUserServiceImpl.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.fdkankan.tk.common.ResultCode;
 import com.fdkankan.tk.common.util.JwtUtil;
 import com.fdkankan.tk.common.util.RoomUtil;
+import com.fdkankan.tk.entity.WxConfig;
 import com.fdkankan.tk.entity.WxUser;
 import com.fdkankan.tk.exception.BusinessException;
 import com.fdkankan.tk.httpClient.client.WxClient;
@@ -12,6 +13,7 @@ import com.fdkankan.tk.httpClient.request.WxGetPhoneParam;
 import com.fdkankan.tk.httpClient.response.WxOpenIdVo;
 import com.fdkankan.tk.mapper.IWxUserMapper;
 import com.fdkankan.tk.response.WxUserVo;
+import com.fdkankan.tk.service.IWxConfigService;
 import com.fdkankan.tk.service.IWxService;
 import com.fdkankan.tk.service.IWxUserService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -42,10 +44,16 @@ public class WxUserServiceImpl extends ServiceImpl<IWxUserMapper, WxUser> implem
     WxClient wxClient;
     @Autowired
     IWxService wxService;
+    @Autowired
+    IWxConfigService wxConfigService;
 
     @Override
     public Object wxLogin(String code) {
-        WxOpenIdVo wxOpenIdVo = wxClient.getOpenIdUrl(WxConfigServiceImpl.wxConfig.getAppId(), WxConfigServiceImpl.wxConfig.getAppSecret(), code);
+        WxConfig wxConfig = wxConfigService.getWxConfig();
+        if(wxConfig == null){
+            throw new BusinessException(ResultCode.WX_CONFIG_ERROR);
+        }
+        WxOpenIdVo wxOpenIdVo = wxClient.getOpenIdUrl(wxConfig.getAppId(),wxConfig.getAppSecret(), code);
         if(wxOpenIdVo.getErrcode() == null && StringUtils.isNotBlank(wxOpenIdVo.getOpenId())){
             WxUser wxUser = this.addUser(wxOpenIdVo);
             WxUserVo vo = new WxUserVo();