Browse Source

用户管理接口 接口

chejianzheng 3 months ago
parent
commit
a69034d31b

+ 52 - 2
portal-service-domain/src/main/java/com/hfln/portal/domain/customer/util/WxOfficeAccountClient.java

@@ -41,6 +41,7 @@ public class WxOfficeAccountClient {
     private StringRedisTemplate stringRedisTemplate;
 
     private static final String ACCESS_TOKEN_KEY = "wx:access_token";
+    private static final String XCX_ACCESS_TOKEN_KEY = "wx:xcx:access_token";
 
     @NotBlank
     @Value("${lnxx.wechat.office.account.appId}")
@@ -54,6 +55,14 @@ public class WxOfficeAccountClient {
     @Value("${lnxx.wechat.office.account.templateId}")
     private String templateId;
 
+    @NotBlank
+    @Value("${lnxx.wechat.appid}")
+    private String xcxAppId;
+
+    @NotBlank
+    @Value("${lnxx.wechat.secret}")
+    private String xcxSecret;
+
     private static final Gson gson = new Gson();
 
 
@@ -169,7 +178,48 @@ public class WxOfficeAccountClient {
 
     //调用getaccess_token方法,给一键获取手机号登录使用
     public String fetchAccessToken() {
-        return getAccessToken();
-            }
+        return getAppAccessToken();
+    }
+
+    private String getAppAccessToken() {
+        //1.尝试从Redis中获取access_token
+        String cachedToken = stringRedisTemplate.opsForValue().get(XCX_ACCESS_TOKEN_KEY);
+        if (StringUtils.isNotEmpty(cachedToken)) {
+            log.info("从Redis中获取access_token成功: {}", cachedToken);
+            return cachedToken;
+        }
+        //2.如果Redis中没有,则调用微信接口获取
+        String url = "https://api.weixin.qq.com/cgi-bin/token" +
+                "?grant_type=client_credential" +
+                "&appid=" + xcxAppId +
+                "&secret=" + xcxSecret;
+
+        try (CloseableHttpClient httpClient = HttpClients.createDefault()) {
+            HttpGet httpGet = new HttpGet(url);
+            try (CloseableHttpResponse response = httpClient.execute(httpGet)) {
+                HttpEntity entity = response.getEntity();
+                String result = EntityUtils.toString(entity);
+                Map<String, Object> map = gson.fromJson(result, Map.class);
 
+                //3.判断是否有错误码返回
+                if (map.containsKey("errcode")) {
+                    log.error("微信接口返回错误码:{}", result);
+                    return null;
+                }
+                if (map.containsKey("access_token")) {
+                    String accessToken = (String) map.get("access_token");
+
+                    //4.写入redis,有效期7080秒
+                    stringRedisTemplate.opsForValue().set(XCX_ACCESS_TOKEN_KEY, accessToken, 120, TimeUnit.SECONDS);
+                    log.info("从微信中获取 access_token 并写入Redis:{}", accessToken);
+                    return accessToken;
+                } else {
+                    log.error("微信接口未返回 access_token, 原始响应:{}", result);
+                }
+            }
+        } catch (IOException e) {
+            log.error("调用微信接口异常,获取 access_token 失败", e);
+        }
+        return null;
+    }
 }

+ 2 - 2
portal-service-infrastructure/src/main/java/com/hfln/portal/infrastructure/mqtt/MqttSubHandle.java

@@ -141,7 +141,7 @@ public class MqttSubHandle {
         byte messageType = obj.getByteValue("message_type");
         byte pose = obj.getByteValue("pose");
         JSONArray targetPointArray = obj.getJSONArray("target_point");
-        if (targetPointArray.isEmpty()) {
+        if (targetPointArray == null || targetPointArray.isEmpty()) {
             log.info("mqttsub target_point is Empty, do nothing");
             return;
         }
@@ -323,7 +323,7 @@ public class MqttSubHandle {
         byte messageType = obj.getByteValue("message_type");
         byte pose = obj.getByteValue("pose");
         JSONArray targetPointArray = obj.getJSONArray("target_point");
-        if (targetPointArray.isEmpty()) {
+        if (targetPointArray == null || targetPointArray.isEmpty()) {
             log.info("mqttsub target_point is Empty, do nothing");
             return;
         }

+ 0 - 16
portal-service-server/src/main/resources/bootstrap-local.yml

@@ -120,19 +120,3 @@ oss:
   region: cn-shanghai
   expire:
     seconds: 300
-
-
-# 开发环境专用 输出sql 日志
-mybatis:
-  configuration:
-    map-underscore-to-camel-case: true
-    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl  # 开启控制台SQL日志
-
-mybatis-plus:
-  global-config:
-    db-config:
-      logic-delete-field: del_flag
-      logic-delete-value: 1
-      logic-not-delete-value: 0
-  configuration:
-    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl  # MyBatis-Plus专用配置