package com.se.nsl.utils; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.google.common.io.Resources; import com.se.nsl.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 request = new HttpEntity<>(json, headers); RestTemplate restTemplate = new RestTemplate(); ResponseEntity 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 request = new HttpEntity<>(json, headers); RestTemplate restTemplate = new RestTemplate(); ResponseEntity 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 request = new HttpEntity<>(json, headers); ResponseEntity 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 request = new HttpEntity<>(json, headers); ResponseEntity 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 request = new HttpEntity<>(json, headers); ResponseEntity 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 request = new HttpEntity<>(json, headers); ResponseEntity 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 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 request = new HttpEntity<>(json, headers); ResponseEntity 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 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 request = new HttpEntity<>(json, headers); ResponseEntity 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 request = new HttpEntity<>(json, headers); ResponseEntity 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; } }