Forráskód Böngészése

Merge remote-tracking branch 'origin/xiaoman' into xiaoman

lqh 1 éve
szülő
commit
9dee572a8b

+ 2 - 0
hx-admin/src/main/java/com/fjhx/admin/BytesailingApplication.java

@@ -3,9 +3,11 @@ package com.fjhx.admin;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.scheduling.annotation.EnableScheduling;
 
 @Slf4j
 @SpringBootApplication(scanBasePackages = "com.fjhx.**")
+@EnableScheduling
 public class BytesailingApplication {
 
     public static void main(String[] args) {

+ 21 - 0
hx-customer/src/main/java/com/fjhx/customer/entity/xiaoman/po/XiaomanConfig.java

@@ -5,9 +5,30 @@ import com.ruoyi.common.core.domain.BaseIdPo;
 import lombok.Getter;
 import lombok.Setter;
 
+import java.util.Date;
+
 @Getter
 @Setter
 @TableName("xiaoman_config")
 public class XiaomanConfig extends BaseIdPo {
 
+    private String clientId;
+    private String clientSecret;
+    private String username;
+    private String password;
+    private String scope;
+    private String grantType;
+
+    private String accessToken;
+    private String refreshToken;
+    /**过期时间**/
+    private Date expireTime;
+    /**过期时间**/
+    private Date lastTokenTime;
+    /**全量更新标志**/
+    private int allUpdateFlag;
+
+    private String tokenUrl;
+    private String refreshTokenUrl;
+
 }

+ 16 - 0
hx-customer/src/main/java/com/fjhx/customer/entity/xiaoman/vo/XiaoManTokenVO.java

@@ -0,0 +1,16 @@
+package com.fjhx.customer.entity.xiaoman.vo;
+
+import com.alibaba.fastjson.annotation.JSONField;
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class XiaoManTokenVO {
+    @JSONField(name = "access_token")
+    private String accessToken;
+    @JSONField(name = "refresh_token")
+    private String refreshToken;
+    @JSONField(name = "expires_in")
+    private int expiresIn;
+}

+ 53 - 0
hx-customer/src/main/java/com/fjhx/customer/initializers/XiaomanInitializers.java

@@ -0,0 +1,53 @@
+package com.fjhx.customer.initializers;
+
+import cn.hutool.core.date.DateUnit;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.fjhx.customer.entity.xiaoman.po.XiaomanConfig;
+import com.fjhx.customer.service.xiaoman.XiaomanConfigService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import javax.annotation.PostConstruct;
+import javax.annotation.Resource;
+import java.util.Date;
+
+@Component
+@Slf4j
+public class XiaomanInitializers {
+
+    @Resource
+    private XiaomanConfigService xiaomanConfigService;
+
+    @PostConstruct
+    public void dataInitializer() {
+        // 初始化数据的代码
+        log.info("XiaomanInitializers dataInitializer");
+        //刷新token
+        refreshToken();
+    }
+
+
+
+
+    @Scheduled(cron = "0 0/30 * * * ? ")
+        //每分钟执行一次
+//    @Scheduled(cron = "0 0/1 *  * * ? ")
+    void refreshToken(){
+        //如果过期时间是空的,就获取新的token
+        XiaomanConfig config = xiaomanConfigService.getConfig();
+
+        Date expireTime = config.getExpireTime();
+        if(ObjectUtil.isNull(expireTime) || StrUtil.isBlank(config.getRefreshToken())) {
+            xiaomanConfigService.getToken(config);
+        } else {
+            //如果过期时间减去当前时间小于110分钟,则要刷新token
+            long between = DateUtil.between(DateUtil.date(), expireTime, DateUnit.MINUTE, false);
+            if(between <= 70){
+                xiaomanConfigService.refreshToken(config);
+            }
+        }
+    }
+}

+ 15 - 0
hx-customer/src/main/java/com/fjhx/customer/mapper/xiaoman/XiaomanConfigMapper.java

@@ -0,0 +1,15 @@
+package com.fjhx.customer.mapper.xiaoman;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.fjhx.customer.entity.xiaoman.po.XiaomanConfig;
+
+
+/**
+ * <p>
+ * 小满配置表 Mapper 接口
+ * </p>
+ *
+ */
+public interface XiaomanConfigMapper extends BaseMapper<XiaomanConfig> {
+
+}

+ 114 - 0
hx-customer/src/main/java/com/fjhx/customer/service/customer/impl/XiaomanConfigServiceImpl.java

@@ -0,0 +1,114 @@
+package com.fjhx.customer.service.customer.impl;
+
+import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.date.DateUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.http.Header;
+import cn.hutool.http.HttpUtil;
+import com.alibaba.fastjson2.JSON;
+import com.alibaba.fastjson2.JSONObject;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fjhx.customer.entity.xiaoman.po.XiaomanConfig;
+import com.fjhx.customer.entity.xiaoman.vo.XiaoManTokenVO;
+import com.fjhx.customer.mapper.xiaoman.XiaomanConfigMapper;
+import com.fjhx.customer.service.xiaoman.XiaomanConfigService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import java.nio.charset.Charset;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 小满配置表 服务实现类
+ * </p>
+ *
+ */
+@Service
+@Slf4j
+public class XiaomanConfigServiceImpl extends ServiceImpl<XiaomanConfigMapper, XiaomanConfig> implements XiaomanConfigService {
+
+    @Override
+    public void getToken(XiaomanConfig config) {
+        getXiaomanToken(config);
+    }
+
+    @Override
+    public void refreshToken(XiaomanConfig config) {
+        refreshXiaomanToken(config);
+    }
+
+    /**
+     * 刷新小满token
+     *
+     * @param config
+     */
+    private void refreshXiaomanToken(XiaomanConfig config) {
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("client_id", config.getClientId());
+        jsonObject.put("client_secret", config.getClientSecret());
+        jsonObject.put("grant_type", "refresh_token");
+        jsonObject.put("refresh_token", config.getRefreshToken());
+        XiaoManTokenVO token = getToken(config, jsonObject.toJSONString(), config.getRefreshTokenUrl());
+        updateConfig(config, token);
+    }
+
+    /**
+     * 获取小满token
+     *
+     * @param config
+     */
+    private void getXiaomanToken(XiaomanConfig config) {
+        JSONObject jsonObject = new JSONObject();
+        jsonObject.put("client_id", config.getClientId());
+        jsonObject.put("client_secret", config.getClientSecret());
+        jsonObject.put("grant_type", "password");
+        jsonObject.put("scope", config.getScope());
+        jsonObject.put("username", config.getUsername());
+        jsonObject.put("password", config.getPassword());
+        String body = jsonObject.toJSONString();
+        XiaoManTokenVO token = getToken(config, body, config.getTokenUrl());
+        updateConfig(config, token);
+    }
+
+    private void updateConfig(XiaomanConfig config, XiaoManTokenVO token) {
+        config.setAccessToken(token.getAccessToken());
+        config.setRefreshToken(token.getRefreshToken());
+        config.setExpireTime(DateUtil.offsetSecond(DateUtil.date(), token.getExpiresIn()));
+        config.setLastTokenTime(DateUtil.date());
+        this.updateById(config);
+    }
+
+    public static XiaoManTokenVO getToken(XiaomanConfig config, String body, String url){
+        String s = HttpUtil.buildBasicAuth(config.getUsername(), config.getPassword(), Charset.forName("UTF-8"));
+        Map<String, String> headers = new HashMap<>();
+        headers.put(Header.AUTHORIZATION.getValue(), s);
+        log.info("请求地址{},请求参数:{}", url, body);
+        String respond = HttpUtil.createPost(url).timeout(5000).body(body).charset(Charset.forName("UTF-8")).addHeaders(headers).execute().body();
+        log.info("请求返回结果:{}", respond);
+
+        XiaoManTokenVO xiaoManTokenVO;
+        try {
+            xiaoManTokenVO = JSON.parseObject(respond, XiaoManTokenVO.class);
+        } catch (Exception e) {
+            log.error("请求小满token失败,返回结果:{}", respond);
+            throw new RuntimeException("请求小满token失败");
+        }
+        return xiaoManTokenVO;
+    }
+
+
+    @Override
+    public XiaomanConfig getConfig() {
+        List<XiaomanConfig> list = this.list();
+        if (CollectionUtil.isEmpty(list)) {
+            throw new RuntimeException("小满配置表数据为空");
+        } else if (list.size() > 1) {
+            throw new RuntimeException("小满配置表数据大于1条");
+        }
+        return list.get(0);
+    }
+}

+ 20 - 0
hx-customer/src/main/java/com/fjhx/customer/service/xiaoman/XiaomanConfigService.java

@@ -0,0 +1,20 @@
+package com.fjhx.customer.service.xiaoman;
+
+import com.fjhx.customer.entity.xiaoman.po.XiaomanConfig;
+import com.ruoyi.common.core.service.BaseService;
+
+
+/**
+ * <p>
+ * 小满配置表 服务类
+ * </p>
+ *
+ */
+public interface XiaomanConfigService extends BaseService<XiaomanConfig> {
+
+    void getToken(XiaomanConfig config);
+
+    void refreshToken(XiaomanConfig config);
+
+    XiaomanConfig getConfig();
+}

+ 5 - 0
hx-customer/src/main/resources/mapper/customer/XiaomanConfigMapper.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.fjhx.customer.mapper.xiaoman.XiaomanConfigMapper">
+
+</mapper>