吉安感知网项目-后端
xiebin
2026-01-26 28502eb5b57e3c8cbcc091735586b60526b8b677
add-星图接口对接获取token
1 files modified
2 files added
148 ■■■■■ changed files
drone-common/src/main/java/org/sxkj/common/jaxt/JianXingTuApiClient.java 38 ●●●●● patch | view | raw | blame | history
drone-service/drone-gd/src/main/java/org/sxkj/gd/GdApplication.java 9 ●●●●● patch | view | raw | blame | history
drone-service/drone-gd/src/main/java/org/sxkj/gd/xingtu/JianXingtuApiService.java 101 ●●●●● patch | view | raw | blame | history
drone-common/src/main/java/org/sxkj/common/jaxt/JianXingTuApiClient.java
New file
@@ -0,0 +1,38 @@
package org.sxkj.common.jaxt;
/**
 * @Description 星图接口调用类
 * @Author AIX
 * @Date 2026/1/26 15:09
 * @Version 1.0
 */
public class JianXingTuApiClient {
    /**
     * 基础URL
     */
    private static final String BASE_URL = "http://218.202.104.82:8200";
    /**
     * 登录接口路径
     *  POST
     *  参数:username,password,mobile
     */
    private static final String LOGIN_URL_POST = "/auth/login";
    /**
     * 获设备列表-无人机
     */
    private static final String GET_DEVICE_LIST_URL_POST = "/webservice/webservice/devicePilot/queryList";
    /**
     * 获设备列表-飞机
     */
    private static final String GET_PLANE_LIST_URL_POST = "/webservice/webservice/deviceAirport/queryList";
    /**
     * 获取登录接口路径
     * @return 登录接口路径
     */
    public static String getLoginUrl() {
        return BASE_URL + LOGIN_URL_POST;
    }
}
drone-service/drone-gd/src/main/java/org/sxkj/gd/GdApplication.java
@@ -19,7 +19,10 @@
import org.mybatis.spring.annotation.MapperScan;
import org.springblade.core.cloud.client.BladeCloudApplication;
import org.springblade.core.launch.BladeApplication;
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.Bean;
import org.springframework.web.client.RestTemplate;
/**
 * 系统模块启动器
@@ -34,5 +37,11 @@
        BladeApplication.run("drone-gd", GdApplication.class, args);
    }
    @Bean
    public RestTemplate restTemplate(RestTemplateBuilder builder) {
        // 可以根据需要添加更多配置
        return builder.build();
    }
}
drone-service/drone-gd/src/main/java/org/sxkj/gd/xingtu/JianXingtuApiService.java
New file
@@ -0,0 +1,101 @@
package org.sxkj.gd.xingtu;
import lombok.SneakyThrows;
import org.springblade.core.redis.cache.BladeRedis;
import org.springblade.core.tool.api.R;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;
import org.sxkj.common.jaxt.JianXingTuApiClient;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
/**
 * @Description 星图接口服务
 * @Author AIX
 * @Date 2026/1/26 15:22
 * @Version 1.0
 */
@Service
public class JianXingtuApiService {
    private final RestTemplate restTemplate;
    private final BladeRedis bladeRedis;
    public JianXingtuApiService(RestTemplate restTemplate, BladeRedis bladeRedis) {
        this.restTemplate = restTemplate;
        this.bladeRedis = bladeRedis;
    }
    private static final String RedisKey = "xingtu:token";
    /**
     * 获取星图登录token
     * @return  token
     */
    @SneakyThrows
    public String getToken() {
        if (Boolean.TRUE.equals(bladeRedis.exists(RedisKey))) {
            return bladeRedis.get(RedisKey);
        }
        String url = JianXingTuApiClient.getLoginUrl();
        Map<String, Object> params = new HashMap<>();
        // 添加认证参数
        params.put("username", "admin");
        params.put("password", "geovis@123");
        params.put("mobile", "true");
        // 发起请求
        ResponseEntity<R> response = restTemplate.postForEntity(url, params, R.class);
        if (response.getStatusCode().is2xxSuccessful()) {
            R body = response.getBody();
            if (Objects.requireNonNull(body).isSuccess()) {
                // 获取原始JSON字符串
                String jsonData = response.getBody().getData().toString();
                Map<String, String> jsonNode = parseKeyValue(jsonData);
                // 提取字段值
                String accessToken = jsonNode.get("access_token");
                String expiresIn = jsonNode.get("expires_in");
                bladeRedis.setEx(RedisKey, accessToken, Long.valueOf(expiresIn));
                return accessToken;
            }
        }
        return "获取token失败";
    }
    /**
     * 解析JSON字符串为Map
     * @param input JSON字符串
     * @return 解析后的Map
     */
    public static Map<String, String> parseKeyValue(String input) {
        Map<String, String> result = new HashMap<>();
        // 移除首尾花括号
        input = input.substring(1, input.length() - 1);
        String[] pairs = input.split(",");
        for (String pair : pairs) {
            int equalsIndex = pair.indexOf("=");
            if (equalsIndex > 0) {
                String key = pair.substring(0, equalsIndex).trim();
                String value = pair.substring(equalsIndex + 1);
                result.put(key, value);
            }
        }
        return result;
    }
}