package com.se.simu.utils;
|
|
import com.alibaba.fastjson.JSONArray;
|
import com.alibaba.fastjson.JSONObject;
|
import com.google.common.io.Resources;
|
import com.se.simu.domain.dto.GridDto;
|
import org.apache.commons.codec.binary.Base64;
|
import org.springframework.http.*;
|
import org.springframework.http.converter.StringHttpMessageConverter;
|
import org.springframework.web.client.RestTemplate;
|
|
import javax.crypto.Cipher;
|
import java.net.URL;
|
import java.nio.charset.StandardCharsets;
|
import java.security.KeyFactory;
|
import java.security.interfaces.RSAPrivateKey;
|
import java.security.interfaces.RSAPublicKey;
|
import java.security.spec.PKCS8EncodedKeySpec;
|
import java.security.spec.X509EncodedKeySpec;
|
import java.util.List;
|
|
/**
|
* 实体库请求
|
*/
|
public class EntityLibraryUtils {
|
/**
|
* 获取加密公钥
|
*
|
* @return 共钥
|
*/
|
public static String getPublicKey() {
|
JSONObject jsonObject = new JSONObject();
|
String json = jsonObject.toJSONString();
|
// 发送JSON格式的POST请求
|
HttpHeaders headers = new HttpHeaders();
|
headers.setContentType(MediaType.APPLICATION_JSON);
|
HttpEntity<String> request = new HttpEntity<>(json, headers);
|
RestTemplate restTemplate = new RestTemplate();
|
ResponseEntity<String> responseEntity = restTemplate.postForEntity("http://106.120.22.26:8024/geo-service/setting/publickey", request, String.class);
|
if (responseEntity.getStatusCode().is2xxSuccessful()) {
|
String body = responseEntity.getBody();
|
return JSONObject.parseObject(body).getString("data");
|
}
|
return null;
|
}
|
|
public static String getLoginPublicKey() {
|
JSONObject jsonObject = new JSONObject();
|
String json = jsonObject.toJSONString();
|
// 发送JSON格式的POST请求
|
HttpHeaders headers = new HttpHeaders();
|
headers.setContentType(MediaType.APPLICATION_JSON);
|
HttpEntity<String> request = new HttpEntity<>(json, headers);
|
RestTemplate restTemplate = new RestTemplate();
|
ResponseEntity<String> responseEntity = restTemplate.postForEntity("http://106.120.22.26:8024/account-service/security/publickey", request, String.class);
|
if (responseEntity.getStatusCode().is2xxSuccessful()) {
|
String body = responseEntity.getBody();
|
return JSONObject.parseObject(body).getString("data");
|
}
|
return null;
|
}
|
|
/**
|
* 登录实体库
|
*
|
* @return 参数内详情
|
*/
|
public static String login() throws Exception {
|
String publicKey = getLoginPublicKey();
|
JSONObject jsonObject = new JSONObject();
|
jsonObject.put("userid", "admin");
|
jsonObject.put("password", encrypt("admin", publicKey));
|
RestTemplate restTemplate = new RestTemplate();
|
// 发送JSON格式的POST请求
|
StringHttpMessageConverter converter = new StringHttpMessageConverter(StandardCharsets.UTF_8);
|
converter.setSupportedMediaTypes(MediaType.parseMediaTypes("text/plain;charset=UTF-8"));
|
restTemplate.getMessageConverters().add(0, converter);
|
HttpHeaders headers = new HttpHeaders();
|
headers.setContentType(MediaType.APPLICATION_JSON);
|
headers.add("Access-Control-Allow-Origin", "*");
|
String json = jsonObject.toJSONString();
|
HttpEntity<String> request = new HttpEntity<>(json, headers);
|
ResponseEntity<String> responseEntity = restTemplate.exchange("http://106.120.22.26:8024/account-service/security/login", HttpMethod.POST, request, String.class);
|
if (responseEntity.getStatusCode().is2xxSuccessful()) {
|
String body = responseEntity.getBody();
|
return JSONObject.parseObject(body).getJSONObject("data").getString("token");
|
}
|
return null;
|
}
|
|
public static String encrypt(String str, String publicKey) throws Exception {
|
//Base64编码的公钥
|
byte[] decoded = Base64.decodeBase64(publicKey);
|
RSAPublicKey pubKey = (RSAPublicKey) KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(decoded));
|
// RSA加密:RSA/ECB/NoPadding
|
Cipher cipher = Cipher.getInstance("RSA");
|
cipher.init(Cipher.ENCRYPT_MODE, pubKey);
|
String outstr = Base64.encodeBase64String(cipher.doFinal(str.getBytes(StandardCharsets.UTF_8)));
|
return outstr;
|
}
|
|
public static String decrypt(String str, String privateKey) throws Exception {
|
if (str == null || "".equals(str)) {
|
return str;
|
}
|
//64位解码加密后的字符串
|
byte[] inputByte = Base64.decodeBase64(str.getBytes(StandardCharsets.UTF_8));
|
//Base64编码的私钥
|
byte[] decoded = Base64.decodeBase64(privateKey);
|
RSAPrivateKey priKey = (RSAPrivateKey) KeyFactory.getInstance("RSA").generatePrivate(new PKCS8EncodedKeySpec(decoded));
|
//RSA解密:RSA/ECB/NoPadding
|
Cipher cipher = Cipher.getInstance("RSA");
|
cipher.init(Cipher.DECRYPT_MODE, priKey);
|
String outstn = new String(cipher.doFinal(inputByte), StandardCharsets.UTF_8);
|
return outstn;
|
}
|
|
/**
|
* 创建组装
|
*
|
* @param name 组装名称
|
* @return 创建结果
|
*/
|
public static JSONObject createAssemble(String name, String token) {
|
JSONObject jsonObject = new JSONObject();
|
jsonObject.put("token", token);
|
jsonObject.put("description", null);
|
jsonObject.put("name", name);
|
jsonObject.put("dbid", "85257774fdb64e5f99f6778696cad02a");
|
RestTemplate restTemplate = new RestTemplate();
|
// 发送JSON格式的POST请求
|
HttpHeaders headers = new HttpHeaders();
|
headers.setContentType(MediaType.APPLICATION_JSON);
|
String json = jsonObject.toJSONString();
|
HttpEntity<String> request = new HttpEntity<>(json, headers);
|
ResponseEntity<String> responseEntity = restTemplate.postForEntity("http://106.120.22.26:8024/geo-service/package/self/add", request, String.class);
|
if (responseEntity.getStatusCode().is2xxSuccessful()) {
|
String body = responseEntity.getBody();
|
JSONObject result = JSONObject.parseObject(body);
|
if (result.getInteger("code") == 200) {
|
return result.getJSONObject("data");
|
}
|
}
|
return null;
|
}
|
|
/**
|
* 提交组装
|
* @param token token
|
* @param packageid 组装id
|
* @return 提交结果
|
*/
|
public static JSONObject submitAssemble(String token, String packageid) {
|
JSONObject jsonObject = new JSONObject();
|
jsonObject.put("dbid", "85257774fdb64e5f99f6778696cad02a");
|
jsonObject.put("packageid", packageid);
|
jsonObject.put("token", token);
|
RestTemplate restTemplate = new RestTemplate();
|
// 发送JSON格式的POST请求
|
HttpHeaders headers = new HttpHeaders();
|
headers.setContentType(MediaType.APPLICATION_JSON);
|
String json = jsonObject.toJSONString();
|
HttpEntity<String> request = new HttpEntity<>(json, headers);
|
ResponseEntity<String> responseEntity = restTemplate.postForEntity("http://106.120.22.26:8024/geo-service/package/status/complete", request, String.class);
|
if (responseEntity.getStatusCode().is2xxSuccessful()) {
|
String body = responseEntity.getBody();
|
JSONObject result = JSONObject.parseObject(body);
|
if (result.getInteger("code") == 200) {
|
return result.getJSONObject("data");
|
}
|
}
|
return null;
|
}
|
|
/**
|
* 加入组装
|
*
|
* @param layerid 图层id
|
* @param token token
|
* @param packageid 组装id
|
* @param bbox 范围
|
* @return 是否加入成功
|
*/
|
public static Boolean addAssemble(String layerid, String token, String packageid, String bbox) {
|
JSONObject jsonObject = new JSONObject();
|
jsonObject.put("dbid", "85257774fdb64e5f99f6778696cad02a");
|
jsonObject.put("layerid", layerid);
|
jsonObject.put("packageid", packageid);
|
jsonObject.put("token", token);
|
jsonObject.put("bbox", bbox);
|
RestTemplate restTemplate = new RestTemplate();
|
// 发送JSON格式的POST请求
|
HttpHeaders headers = new HttpHeaders();
|
headers.setContentType(MediaType.APPLICATION_JSON);
|
String json = jsonObject.toJSONString();
|
HttpEntity<String> request = new HttpEntity<>(json, headers);
|
ResponseEntity<String> responseEntity = restTemplate.postForEntity("http://106.120.22.26:8024/geo-service/package/data/add", request, String.class);
|
if (responseEntity.getStatusCode().is2xxSuccessful()) {
|
String body = responseEntity.getBody();
|
JSONObject result = JSONObject.parseObject(body);
|
if (result.getInteger("code") == 200) {
|
return result.getBoolean("data");
|
}
|
}
|
return null;
|
}
|
|
/**
|
* 管线列表
|
*
|
* @param dtos 四个坐标点
|
* @return 框选内部管线
|
*/
|
public static JSONArray getPointInfo(List<GridDto> dtos, String token) {
|
JSONArray paramArray = new JSONArray();
|
for (GridDto dto : dtos
|
) {
|
paramArray.add(ProjectionToGeographicUtil.get4548Point(dto.getLon(), dto.getLat()));
|
}
|
paramArray.add(ProjectionToGeographicUtil.get4548Point(dtos.get(0).getLon(), dtos.get(0).getLat()));
|
JSONObject jsonObject = getModule("layerQueryPointParams.json");
|
jsonObject.getJSONObject("geometry").getJSONArray("coordinates").add(paramArray);
|
jsonObject.put("token", token);
|
RestTemplate restTemplate = new RestTemplate();
|
// 发送JSON格式的POST请求
|
HttpHeaders headers = new HttpHeaders();
|
headers.setContentType(MediaType.APPLICATION_JSON);
|
String json = jsonObject.toJSONString();
|
HttpEntity<String> request = new HttpEntity<>(json, headers);
|
ResponseEntity<String> responseEntity = restTemplate.postForEntity("http://106.120.22.26:8024/geo-service/entitydbdata/layer/query", request, String.class);
|
if (responseEntity.getStatusCode().is2xxSuccessful()) {
|
String body = responseEntity.getBody();
|
return JSONObject.parseObject(body).getJSONObject("data").getJSONArray("items");
|
}
|
return null;
|
}
|
|
/**
|
* 管线列表
|
*
|
* @param dtos 四个坐标点
|
* @return 框选内部管线
|
*/
|
public static JSONArray getLineInfo(List<GridDto> dtos, String token) {
|
JSONArray paramArray = new JSONArray();
|
for (GridDto dto : dtos
|
) {
|
paramArray.add(ProjectionToGeographicUtil.get4548Point(dto.getLon(), dto.getLat()));
|
}
|
paramArray.add(ProjectionToGeographicUtil.get4548Point(dtos.get(0).getLon(), dtos.get(0).getLat()));
|
JSONObject jsonObject = getModule("layerQueryParams.json");
|
jsonObject.getJSONObject("geometry").getJSONArray("coordinates").add(paramArray);
|
jsonObject.put("token", token);
|
RestTemplate restTemplate = new RestTemplate();
|
// 发送JSON格式的POST请求
|
HttpHeaders headers = new HttpHeaders();
|
headers.setContentType(MediaType.APPLICATION_JSON);
|
String json = jsonObject.toJSONString();
|
HttpEntity<String> request = new HttpEntity<>(json, headers);
|
ResponseEntity<String> responseEntity = restTemplate.postForEntity("http://106.120.22.26:8024/geo-service/entitydbdata/layer/query", request, String.class);
|
if (responseEntity.getStatusCode().is2xxSuccessful()) {
|
String body = responseEntity.getBody();
|
return JSONObject.parseObject(body).getJSONObject("data").getJSONArray("items");
|
}
|
return null;
|
}
|
|
/**
|
* 管线列表详情
|
*
|
* @param param 查询参数
|
* @return 参数内详情
|
*/
|
public static JSONArray getLineDetail(String param, String token) {
|
JSONObject jsonObject = getModule("layerQueryDetailParams.json");
|
jsonObject.put("where", param);
|
jsonObject.put("token", token);
|
RestTemplate restTemplate = new RestTemplate();
|
// 发送JSON格式的POST请求
|
StringHttpMessageConverter converter = new StringHttpMessageConverter(StandardCharsets.UTF_8);
|
converter.setSupportedMediaTypes(MediaType.parseMediaTypes("text/plain;charset=UTF-8"));
|
restTemplate.getMessageConverters().add(0, converter);
|
HttpHeaders headers = new HttpHeaders();
|
headers.setContentType(MediaType.APPLICATION_JSON);
|
String json = jsonObject.toJSONString();
|
HttpEntity<String> request = new HttpEntity<>(json, headers);
|
ResponseEntity<String> responseEntity = restTemplate.exchange("http://106.120.22.26:8024/geo-service/entitydbdata/layer/query", HttpMethod.POST, request, String.class);
|
if (responseEntity.getStatusCode().is2xxSuccessful()) {
|
String body = responseEntity.getBody();
|
return JSONObject.parseObject(body).getJSONArray("features");
|
}
|
return null;
|
}
|
|
/**
|
* 获取请求json
|
*
|
* @param moduleName json名
|
* @return json内容
|
*/
|
private static JSONObject getModule(String moduleName) {
|
JSONObject jsonObject = new JSONObject();
|
try {
|
URL resource = Resources.getResource(moduleName);
|
String fileContent = Resources.toString(resource, StandardCharsets.UTF_8);
|
jsonObject = JSONObject.parseObject(fileContent);
|
System.out.println(fileContent);
|
} catch (Exception e) {
|
e.printStackTrace();
|
}
|
return jsonObject;
|
}
|
}
|