Эх сурвалжийг харах

feat:微信公众号跳转路径从配置表中获取

陈长荣 5 сар өмнө
parent
commit
240fcd8fdc

+ 9 - 0
snowy-plugin/snowy-plugin-dev/src/main/java/vip/xiaonuo/dev/modular/config/enums/ConfigDataType.java

@@ -0,0 +1,9 @@
+package vip.xiaonuo.dev.modular.config.enums;
+
+public class ConfigDataType {
+
+    /**
+     * 配置类型
+     */
+    public static final String DEV_CONFIG = "DEV_CONFIG";
+}

+ 5 - 0
snowy-plugin/snowy-plugin-dev/src/main/java/vip/xiaonuo/dev/modular/config/service/impl/DevConfigServiceImpl.java

@@ -18,6 +18,7 @@ import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.convert.Convert;
 import cn.hutool.core.util.ObjectUtil;
 import cn.hutool.core.util.StrUtil;
+import cn.hutool.json.JSONUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
@@ -29,8 +30,10 @@ import org.springframework.transaction.annotation.Transactional;
 import vip.xiaonuo.common.cache.CommonCacheOperator;
 import vip.xiaonuo.common.enums.CommonSortOrderEnum;
 import vip.xiaonuo.common.exception.CommonException;
+import vip.xiaonuo.common.listener.CommonDataChangeEventCenter;
 import vip.xiaonuo.common.page.CommonPageRequest;
 import vip.xiaonuo.dev.modular.config.entity.DevConfig;
+import vip.xiaonuo.dev.modular.config.enums.ConfigDataType;
 import vip.xiaonuo.dev.modular.config.enums.DevConfigCategoryEnum;
 import vip.xiaonuo.dev.modular.config.mapper.DevConfigMapper;
 import vip.xiaonuo.dev.modular.config.param.*;
@@ -136,6 +139,8 @@ public class DevConfigServiceImpl extends ServiceImpl<DevConfigMapper, DevConfig
         this.updateById(devConfig);
         // 移除对应的缓存
         commonCacheOperator.remove(CONFIG_CACHE_KEY + devConfig.getConfigKey());
+        // 发布配置更新事件
+        CommonDataChangeEventCenter.doUpdateWithData(ConfigDataType.DEV_CONFIG, JSONUtil.createArray().put(devConfig));
     }
 
     private void checkParam(DevConfigEditParam devConfigEditParam) {

+ 4 - 8
snowy-web-app/src/main/java/vip/xiaonuo/weixin/gongzhong/config/WxMpConfiguration.java

@@ -1,6 +1,5 @@
 package vip.xiaonuo.weixin.gongzhong.config;
 
-import cn.hutool.core.net.URLEncodeUtil;
 import lombok.RequiredArgsConstructor;
 import lombok.SneakyThrows;
 import lombok.extern.slf4j.Slf4j;
@@ -22,6 +21,7 @@ import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 import vip.xiaonuo.coldchain.modular.alarmuser.service.AlarmUserService;
 import vip.xiaonuo.coldchain.modular.push.config.PushConfigure;
+import vip.xiaonuo.dev.modular.config.service.DevConfigService;
 
 import java.util.Map;
 
@@ -34,14 +34,9 @@ import java.util.Map;
 public class WxMpConfiguration {
 
     private final PushConfigure properties;
-
+    private final DevConfigService devConfigService;
     private final AlarmUserService alarmUserService;
 
-    /**
-     * 授权页面地址
-     */
-    private static final String REDIRECT_URL = URLEncodeUtil.encodePathSegment("https://coldchain.nzkcloud.com/coldchain/wx/mp/auth/page");
-
     @SneakyThrows
     @Bean
     public WxMpService wxMpService() {
@@ -92,8 +87,9 @@ public class WxMpConfiguration {
      * @return
      */
     private String getAuthUrl() {
+        String redirectUrl = devConfigService.getValueByKey("SNOWY_THIRD_WECHAT_REDIRECT_URL");
         return String.format(WxMpApiUrl.OAuth2.CONNECT_OAUTH2_AUTHORIZE_URL.getUrl(null),
-                properties.getAppId(), REDIRECT_URL, "snsapi_userinfo", "STATE");
+                properties.getAppId(), redirectUrl, "snsapi_userinfo", "STATE");
     }
 
     @Bean

+ 3 - 1
snowy-web-app/src/main/java/vip/xiaonuo/weixin/gongzhong/controller/WxMpController.java

@@ -18,6 +18,7 @@ import vip.xiaonuo.coldchain.modular.alarmuser.service.AlarmUserService;
 import vip.xiaonuo.coldchain.modular.push.entity.WeChatUser;
 import vip.xiaonuo.coldchain.modular.push.utils.PushUtil;
 import vip.xiaonuo.common.enums.CommonDeleteFlagEnum;
+import vip.xiaonuo.dev.modular.config.service.DevConfigService;
 
 import java.util.List;
 
@@ -31,6 +32,7 @@ public class WxMpController {
     private final WxMpService wxMpService;
     private final WxMpMessageRouter wxMpMessageRouter;
     private final AlarmUserService alarmUserService;
+    private final DevConfigService devConfigService;
 
     private static final String FRONT_USER_INFO_PAGE = "https://coldchain.nzkcloud.com/check";
 
@@ -80,7 +82,7 @@ public class WxMpController {
                     .last("limit 1"));
         }
 
-        String redirect = FRONT_USER_INFO_PAGE + "?id=" + alarmUser.getId();
+        String redirect = devConfigService.getValueByKey("wx_front_auth_page") + "?id=" + alarmUser.getId();
         log.info("进入用户授权页面 {}", redirect);
         response.sendRedirect(redirect);
     }

+ 66 - 0
snowy-web-app/src/main/java/vip/xiaonuo/weixin/gongzhong/listener/ConfigChangeListener.java

@@ -0,0 +1,66 @@
+package vip.xiaonuo.weixin.gongzhong.listener;
+
+import cn.hutool.json.JSONArray;
+import lombok.RequiredArgsConstructor;
+import lombok.SneakyThrows;
+import lombok.extern.slf4j.Slf4j;
+import me.chanjar.weixin.common.bean.menu.WxMenuButton;
+import me.chanjar.weixin.mp.api.WxMpService;
+import me.chanjar.weixin.mp.bean.menu.WxMpMenu;
+import me.chanjar.weixin.mp.enums.WxMpApiUrl;
+import org.springframework.stereotype.Component;
+import vip.xiaonuo.coldchain.modular.push.config.PushConfigure;
+import vip.xiaonuo.common.listener.CommonDataChangeListener;
+import vip.xiaonuo.dev.modular.config.entity.DevConfig;
+import vip.xiaonuo.dev.modular.config.enums.ConfigDataType;
+
+import java.util.List;
+import java.util.Optional;
+
+@Slf4j
+@Component
+@RequiredArgsConstructor
+public class ConfigChangeListener implements CommonDataChangeListener {
+
+    private final WxMpService wxMpService;
+
+    @Override
+    public void doAddWithDataIdList(String dataType, List<String> dataIdList) {
+
+    }
+
+    @Override
+    public void doAddWithDataList(String dataType, JSONArray jsonArray) {
+
+    }
+
+    @Override
+    public void doUpdateWithDataIdList(String dataType, List<String> dataIdList) {
+
+    }
+
+    @SneakyThrows
+    @Override
+    public void doUpdateWithDataList(String dataType, JSONArray jsonArray) {
+        //配置更新
+        if(dataType.equals(ConfigDataType.DEV_CONFIG)) {
+            List<DevConfig> configList = jsonArray.toList(DevConfig.class);
+            // 如果微信重定向地址更新,则更新微信菜单
+            Optional<DevConfig> opt = configList.stream().filter(c -> c.getConfigKey().equals("SNOWY_THIRD_WECHAT_REDIRECT_URL")).findAny();
+            if (opt.isPresent()) {
+                WxMpMenu wxMpMenu = wxMpService.getMenuService().menuGet();
+                List<WxMenuButton> buttons = wxMpMenu.getMenu().getButtons();
+                String redirectUrl = opt.get().getConfigValue();
+                redirectUrl = String.format(WxMpApiUrl.OAuth2.CONNECT_OAUTH2_AUTHORIZE_URL.getUrl(null),
+                        PushConfigure.getAppId(), redirectUrl, "snsapi_userinfo", "STATE");
+                log.info("微信重定向地址更新 {}", redirectUrl);
+                buttons.get(2).setUrl(redirectUrl);
+            }
+        }
+    }
+
+    @Override
+    public void doDeleteWithDataIdList(String dataType, List<String> dataIdList) {
+
+    }
+}