This commit is contained in:
2024-07-30 10:38:40 +08:00
parent 1879f41b9f
commit 41f8c873a4
10 changed files with 515 additions and 276 deletions

30
pom.xml
View File

@@ -55,12 +55,11 @@
<dependency> <dependency>
<groupId>org.projectlombok</groupId> <groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId> <artifactId>lombok</artifactId>
<version>1.18.24</version>
<optional>true</optional> <optional>true</optional>
</dependency> </dependency>
<dependency> <dependency>
<groupId>com.njcn</groupId> <groupId>com.njcn</groupId>
<artifactId>mqs-client-njcn</artifactId> <artifactId>mqs-client-njcn</artifactId>
@@ -125,6 +124,26 @@
</dependency> </dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.2</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcore</artifactId>
<version>4.4.5</version>
</dependency>
<!-- 引入org.json所需依赖 -->
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20160810</version>
</dependency>
</dependencies> </dependencies>
<build> <build>
@@ -135,13 +154,6 @@
<artifactId>spring-boot-maven-plugin</artifactId> <artifactId>spring-boot-maven-plugin</artifactId>
<configuration> <configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration> </configuration>
</plugin> </plugin>

View File

@@ -32,13 +32,14 @@ public class ClientHandler extends Thread {
public String topicMsg = "{\"HRPhV_H14_phsC\":\"0.0000\",\"HRPhV_H14_phsB\":\"0.0000\",\"HRPhV_H14_phsA\":\"0.0000\",\"HRPhV_H2_phsB\":\"0.0100\",\"HRPhV_H2_phsA\":\"0.0100\",\"HRPhV_H2_phsC\":\"0.0100\",\"HRPhV_H15_phsA\":\"0.0120\",\"TotW\":\"19771.1367\",\"HRPhV_H15_phsB\":\"0.0120\",\"HRPhV_H15_phsC\":\"0.0120\",\"FreqDev\":\"0.0000\",\"PPV_phsAB\":\"384.0318\",\"A_phsC\":\"60.7116\",\"TotPF\":\"0.4946\",\"A_phsA\":\"60.7123\",\"A_phsB\":\"60.7111\",\"PPV_phsBC\":\"383.3656\",\"HRPhV_H25_phsB\":\"0.0080\",\"HRPhV_H25_phsC\":\"0.0080\",\"HRPhV_H25_phsA\":\"0.0080\",\"DataTag\":\"0\",\"HRPhV_H20_phsA\":\"0.0000\",\"HRPhV_H20_phsB\":\"0.0000\",\"HRPhV_H20_phsC\":\"0.0000\",\"PPV_phsCA\":\"383.3637\",\"HRPhV_H3_phsB\":\"0.0640\",\"HRPhV_H3_phsC\":\"0.0640\",\"HRPhV_H9_phsC\":\"0.0220\",\"ThdPhV_phsA\":\"0.0913\",\"HRPhV_H9_phsB\":\"0.0220\",\"HRPhV_H9_phsA\":\"0.0220\",\"ThdPhV_phsB\":\"0.0913\",\"ThdPhV_phsC\":\"0.0913\",\"HRPhV_H19_phsC\":\"0.0100\",\"HRPhV_H19_phsB\":\"0.0100\",\"HRPhV_H19_phsA\":\"0.0100\",\"HRPhV_H16_phsA\":\"0.0000\",\"HRPhV_H13_phsA\":\"0.0140\",\"HRPhV_H16_phsC\":\"0.0000\",\"HRPhV_H13_phsB\":\"0.0140\",\"HRPhV_H16_phsB\":\"0.0000\",\"TotVA\":\"39977.2305\",\"HRPhV_H13_phsC\":\"0.0140\",\"HRPhV_H6_phsB\":\"0.0026\",\"HRPhV_H3_phsA\":\"0.0640\",\"HRPhV_H6_phsA\":\"0.0026\",\"HRPhV_H10_phsA\":\"0.0026\",\"HRPhV_H10_phsB\":\"0.0026\",\"HRPhV_H6_phsC\":\"0.0026\",\"HRPhV_H10_phsC\":\"0.0026\",\"ImbNgV\":\"0.0012\",\"TotVar\":\"34745.9492\",\"HRPhV_H7_phsC\":\"0.0280\",\"HRPhV_H7_phsB\":\"0.0280\",\"HRPhV_H22_phsC\":\"0.0000\",\"HRPhV_H22_phsB\":\"0.0000\",\"ImbZroV\":\"0.0012\",\"HRPhV_H22_phsA\":\"0.0000\",\"HRPhV_H7_phsA\":\"0.0280\",\"HRPhV_H8_phsA\":\"0.0026\",\"HRPhV_H23_phsB\":\"0.0080\",\"PhV_phsA\":\"221.9935\",\"HRPhV_H8_phsB\":\"0.0026\",\"HRPhV_H23_phsC\":\"0.0080\",\"HRPhV_H8_phsC\":\"0.0026\",\"PhV_phsB\":\"221.9947\",\"PhV_phsC\":\"221.9979\",\"HRPhV_H23_phsA\":\"0.0080\",\"PstPhV_phsC\":\"3.2942\",\"PstPhV_phsA\":\"3.3086\",\"PstPhV_phsB\":\"3.2987\",\"Freq\":\"50.0000\",\"HRPhV_H11_phsA\":\"0.0180\",\"HRPhV_H11_phsB\":\"0.0180\",\"HRPhV_H17_phsC\":\"0.0100\",\"HRPhV_H11_phsC\":\"0.0180\",\"HRPhV_H17_phsB\":\"0.0100\",\"HRPhV_H17_phsA\":\"0.0100\",\"SeqV_C2\":\"0.0715\",\"HRPhV_H4_phsB\":\"0.0050\",\"SeqV_C1\":\"60.4601\",\"HRPhV_H4_phsA\":\"0.0050\",\"SeqV_C0\":\"0.0714\",\"PhVDev_phsC\":\"0.0119\",\"HRPhV_H5_phsA\":\"0.0400\",\"HRPhV_H5_phsB\":\"0.0400\",\"HRPhV_H5_phsC\":\"0.0400\",\"PhVDev_phsB\":\"0.0119\",\"HRPhV_H12_phsC\":\"0.0010\",\"PltPhV_phsA\":\"0.0000\",\"PhVDev_phsA\":\"0.0119\",\"HRPhV_H12_phsB\":\"0.0010\",\"HRPhV_H4_phsC\":\"0.0050\",\"HRPhV_H18_phsB\":\"0.0000\",\"HRPhV_H18_phsC\":\"0.0000\",\"HRPhV_H12_phsA\":\"0.0010\",\"HRPhV_H18_phsA\":\"0.0000\",\"HFundPhV_phsC\":\"220.8052\",\"HRPhV_H21_phsC\":\"0.0080\",\"HRPhV_H21_phsB\":\"0.0080\",\"HRPhV_H24_phsC\":\"0.0000\",\"HFundPhV_phsA\":\"220.8056\",\"HRPhV_H21_phsA\":\"0.0080\",\"HFundPhV_phsB\":\"220.8055\",\"HRPhV_H24_phsB\":\"0.0000\",\"PltPhV_phsC\":\"0.0000\",\"HRPhV_H24_phsA\":\"0.0000\",\"PltPhV_phsB\":\"0.0000\",\"time\":\"20240704T152745Z\"}"; public String topicMsg = "{\"HRPhV_H14_phsC\":\"0.0000\",\"HRPhV_H14_phsB\":\"0.0000\",\"HRPhV_H14_phsA\":\"0.0000\",\"HRPhV_H2_phsB\":\"0.0100\",\"HRPhV_H2_phsA\":\"0.0100\",\"HRPhV_H2_phsC\":\"0.0100\",\"HRPhV_H15_phsA\":\"0.0120\",\"TotW\":\"19771.1367\",\"HRPhV_H15_phsB\":\"0.0120\",\"HRPhV_H15_phsC\":\"0.0120\",\"FreqDev\":\"0.0000\",\"PPV_phsAB\":\"384.0318\",\"A_phsC\":\"60.7116\",\"TotPF\":\"0.4946\",\"A_phsA\":\"60.7123\",\"A_phsB\":\"60.7111\",\"PPV_phsBC\":\"383.3656\",\"HRPhV_H25_phsB\":\"0.0080\",\"HRPhV_H25_phsC\":\"0.0080\",\"HRPhV_H25_phsA\":\"0.0080\",\"DataTag\":\"0\",\"HRPhV_H20_phsA\":\"0.0000\",\"HRPhV_H20_phsB\":\"0.0000\",\"HRPhV_H20_phsC\":\"0.0000\",\"PPV_phsCA\":\"383.3637\",\"HRPhV_H3_phsB\":\"0.0640\",\"HRPhV_H3_phsC\":\"0.0640\",\"HRPhV_H9_phsC\":\"0.0220\",\"ThdPhV_phsA\":\"0.0913\",\"HRPhV_H9_phsB\":\"0.0220\",\"HRPhV_H9_phsA\":\"0.0220\",\"ThdPhV_phsB\":\"0.0913\",\"ThdPhV_phsC\":\"0.0913\",\"HRPhV_H19_phsC\":\"0.0100\",\"HRPhV_H19_phsB\":\"0.0100\",\"HRPhV_H19_phsA\":\"0.0100\",\"HRPhV_H16_phsA\":\"0.0000\",\"HRPhV_H13_phsA\":\"0.0140\",\"HRPhV_H16_phsC\":\"0.0000\",\"HRPhV_H13_phsB\":\"0.0140\",\"HRPhV_H16_phsB\":\"0.0000\",\"TotVA\":\"39977.2305\",\"HRPhV_H13_phsC\":\"0.0140\",\"HRPhV_H6_phsB\":\"0.0026\",\"HRPhV_H3_phsA\":\"0.0640\",\"HRPhV_H6_phsA\":\"0.0026\",\"HRPhV_H10_phsA\":\"0.0026\",\"HRPhV_H10_phsB\":\"0.0026\",\"HRPhV_H6_phsC\":\"0.0026\",\"HRPhV_H10_phsC\":\"0.0026\",\"ImbNgV\":\"0.0012\",\"TotVar\":\"34745.9492\",\"HRPhV_H7_phsC\":\"0.0280\",\"HRPhV_H7_phsB\":\"0.0280\",\"HRPhV_H22_phsC\":\"0.0000\",\"HRPhV_H22_phsB\":\"0.0000\",\"ImbZroV\":\"0.0012\",\"HRPhV_H22_phsA\":\"0.0000\",\"HRPhV_H7_phsA\":\"0.0280\",\"HRPhV_H8_phsA\":\"0.0026\",\"HRPhV_H23_phsB\":\"0.0080\",\"PhV_phsA\":\"221.9935\",\"HRPhV_H8_phsB\":\"0.0026\",\"HRPhV_H23_phsC\":\"0.0080\",\"HRPhV_H8_phsC\":\"0.0026\",\"PhV_phsB\":\"221.9947\",\"PhV_phsC\":\"221.9979\",\"HRPhV_H23_phsA\":\"0.0080\",\"PstPhV_phsC\":\"3.2942\",\"PstPhV_phsA\":\"3.3086\",\"PstPhV_phsB\":\"3.2987\",\"Freq\":\"50.0000\",\"HRPhV_H11_phsA\":\"0.0180\",\"HRPhV_H11_phsB\":\"0.0180\",\"HRPhV_H17_phsC\":\"0.0100\",\"HRPhV_H11_phsC\":\"0.0180\",\"HRPhV_H17_phsB\":\"0.0100\",\"HRPhV_H17_phsA\":\"0.0100\",\"SeqV_C2\":\"0.0715\",\"HRPhV_H4_phsB\":\"0.0050\",\"SeqV_C1\":\"60.4601\",\"HRPhV_H4_phsA\":\"0.0050\",\"SeqV_C0\":\"0.0714\",\"PhVDev_phsC\":\"0.0119\",\"HRPhV_H5_phsA\":\"0.0400\",\"HRPhV_H5_phsB\":\"0.0400\",\"HRPhV_H5_phsC\":\"0.0400\",\"PhVDev_phsB\":\"0.0119\",\"HRPhV_H12_phsC\":\"0.0010\",\"PltPhV_phsA\":\"0.0000\",\"PhVDev_phsA\":\"0.0119\",\"HRPhV_H12_phsB\":\"0.0010\",\"HRPhV_H4_phsC\":\"0.0050\",\"HRPhV_H18_phsB\":\"0.0000\",\"HRPhV_H18_phsC\":\"0.0000\",\"HRPhV_H12_phsA\":\"0.0010\",\"HRPhV_H18_phsA\":\"0.0000\",\"HFundPhV_phsC\":\"220.8052\",\"HRPhV_H21_phsC\":\"0.0080\",\"HRPhV_H21_phsB\":\"0.0080\",\"HRPhV_H24_phsC\":\"0.0000\",\"HFundPhV_phsA\":\"220.8056\",\"HRPhV_H21_phsA\":\"0.0080\",\"HFundPhV_phsB\":\"220.8055\",\"HRPhV_H24_phsB\":\"0.0000\",\"PltPhV_phsC\":\"0.0000\",\"HRPhV_H24_phsA\":\"0.0000\",\"PltPhV_phsB\":\"0.0000\",\"time\":\"20240704T152745Z\"}";
public String devId; public String devId="暂无数据";
private Consumer consumer; private Consumer consumer;
@GetMapping("message") @GetMapping("message")
private Map<String,String> message() { private Map<String,String> message() {
Map<String,String> map = JSONObject.parseObject(topicMsg, Map.class); Map<String,String> map = JSONObject.parseObject(topicMsg, Map.class);
map.put("customDevId",devId);
return map; return map;
} }

View File

@@ -0,0 +1,123 @@
package com.njcn.roma.client;
import java.io.IOException;
import java.security.KeyManagementException;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import javax.net.ssl.SSLContext;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.conn.ssl.TrustStrategy;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.ssl.SSLContextBuilder;
import org.apache.http.util.EntityUtils;
import org.json.JSONException;
import org.json.JSONObject;
public class TestNorthApi {
private static final String ApicHost = "10.10.10.1:1443";
private static final String appId = "roma.link.test";
private static final String appKey = "ic+HsXPRCA****";
private static final String deviceId="D6111KOQk";
//测命令下发时用到的替换成自己的serviceName和commandName
private static final String serviceName="service";
private static final String commandName="command";
/**
* 创建ssl连接设置客户端信任所有证书
* @return CloseableHttpClient
* @throws KeyStoreException
* @throws NoSuchAlgorithmException
* @throws KeyManagementException
*/
private static CloseableHttpClient createSSLClient() throws KeyStoreException, NoSuchAlgorithmException, KeyManagementException {
SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, (TrustStrategy) (chain, authType) -> true).build();
SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext, new String[]{"TLSv1.2"}, null,
SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
return HttpClients.custom().setSSLSocketFactory(sslsf).build();
}
/**
* 设置请求时的header
* @param httpUriRequest
*/
private static void setSSLHeader(HttpUriRequest httpUriRequest) {
long time = System.currentTimeMillis();
String authorization = DigestUtils.sha256Hex(appId + appKey + time);
httpUriRequest.addHeader("Content-Type", "application/json");
httpUriRequest.addHeader("Authorization", authorization);
httpUriRequest.addHeader("timestamp", String.valueOf(time));
}
/**
* 解析响应结果
* @param httpUriRequest
* @return
* @throws NoSuchAlgorithmException
* @throws KeyStoreException
* @throws KeyManagementException
* @throws IOException
*/
private static HttpEntity getSSLResponse(HttpUriRequest httpUriRequest) throws NoSuchAlgorithmException, KeyStoreException, KeyManagementException, IOException {
CloseableHttpClient httpClient = createSSLClient();
CloseableHttpResponse response = httpClient.execute(httpUriRequest);
HttpEntity responseEntity = response.getEntity();
System.out.println("响应状态为:" + response.getStatusLine());
if (responseEntity != null) {
System.out.println("响应内容长度为:" + responseEntity.getContentLength());
System.out.println("响应内容为:" + EntityUtils.toString(responseEntity));
}
return responseEntity;
}
/**
* 命令下发
*
* @param serviceName
* @param commandName
* @param cmdComtent
* @throws JSONException
* @throws IOException
* @throws NoSuchAlgorithmException
* @throws KeyStoreException
* @throws KeyManagementException
*/
public static void deviceCommands(String serviceName, String commandName, JSONObject cmdComtent) throws JSONException, IOException, NoSuchAlgorithmException, KeyStoreException, KeyManagementException {
String url = "https://" + ApicHost + "/iot/1.0/deviceCommands?appId=" + appId;
HttpPost httpPost = new HttpPost(url); //创建post请求
JSONObject cmdContent = new JSONObject();
cmdContent.put("serviceId", serviceName);
cmdContent.put("method", commandName);
cmdContent.put("paras", cmdComtent);
JSONObject cmdBody = new JSONObject();
cmdBody.put("command", cmdContent);
cmdBody.put("deviceId", deviceId);
setSSLHeader(httpPost); //设置请求的header
StringEntity stringEntity = new StringEntity(cmdBody.toString(), "utf-8");
httpPost.setEntity(stringEntity);//设置请求的body
getSSLResponse(httpPost);//获取响应结果
}
public static void main(String[] args) throws Exception {
JSONObject commandContent = new JSONObject();
commandContent.put("status", "on");
deviceCommands(serviceName, commandName, commandContent);
}
}

View File

@@ -35,4 +35,8 @@ public class RestTemplateConfig {
return factory; return factory;
} }
} }

View File

@@ -1,10 +1,22 @@
package com.njcn.roma.controller; package com.njcn.roma.controller;
import cn.hutool.crypto.digest.DigestUtil; import cn.hutool.crypto.digest.DigestUtil;
import com.alibaba.fastjson.JSONObject;
import com.njcn.roma.pojo.CommandDTO; import com.njcn.roma.pojo.CommandDTO;
import com.njcn.roma.pojo.UpSendPojo; import com.njcn.roma.pojo.UpSendPojo;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.conn.ssl.TrustStrategy;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.ssl.SSLContextBuilder;
import org.apache.http.util.EntityUtils;
import org.json.JSONException;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpEntity; import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders; import org.springframework.http.HttpHeaders;
@@ -12,9 +24,18 @@ import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate; import org.springframework.web.client.RestTemplate;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import java.io.IOException;
import java.security.KeyManagementException;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.util.Date; import java.util.Date;
import java.util.Objects; import java.util.Objects;
@@ -49,39 +70,33 @@ public class SendCommandController {
* @date 2024/6/25 * @date 2024/6/25
*/ */
@GetMapping("up") @GetMapping("up")
public String sendToDev(){ public String sendToDev(@RequestParam("serviceId")String serviceId,@RequestParam("method")String method,@RequestParam(value = "deviceId",defaultValue = "D2899233167kupZT")String deviceId){
String time = String.valueOf(new Date().getTime()); org.json.JSONObject commandContent = new JSONObject();
String sha = DigestUtil.sha256Hex(appId+appKey+time); commandContent.put("status", "on");
System.out.println("加密秘钥"+sha); try {
deviceCommands(deviceId,serviceId,method,commandContent);
// 请求头信息 } catch (IOException e) {
HttpHeaders headers = new HttpHeaders(); System.out.println("IOException---------------------------");
headers.setContentType(MediaType.valueOf("application/json;charset=UTF-8")); e.printStackTrace();
headers.add("timestamp",time); return "执行异常";
headers.add("Authorization",sha); } catch (NoSuchAlgorithmException e) {
System.out.println("NoSuchAlgorithmException---------------------------");
// 请求体内容 e.printStackTrace();
UpSendPojo param = new UpSendPojo(); return "执行异常";
param.setDeviceId("666666"); } catch (KeyStoreException e) {
System.out.println("KeyStoreException---------------------------");
CommandDTO commandDTO = new CommandDTO(); e.printStackTrace();
JSONObject jsonObject = new JSONObject(); return "执行异常";
jsonObject.put("",""); } catch (KeyManagementException e) {
commandDTO.setJsonObject(jsonObject); System.out.println("KeyManagementException---------------------------");
commandDTO.setServiceId("123"); e.printStackTrace();
commandDTO.setMethod("aaa"); return "执行异常";
param.setCommandDTO(commandDTO); }catch (Exception e){
System.out.println("Exception---------------------------");
// 组装请求信息 e.printStackTrace();
HttpEntity<UpSendPojo> httpEntity=new HttpEntity<>(param,headers); return "执行异常";
}
System.out.println(httpEntity.getHeaders()); return "执行成功";
System.out.println(httpEntity.getBody());
ResponseEntity responseEntity = restTemplate.postForEntity(sendIp,httpEntity,String.class);
System.out.println("返回状态:"+ responseEntity.getStatusCode());
return Objects.requireNonNull(responseEntity.getBody()).toString();
} }
@@ -90,4 +105,82 @@ public class SendCommandController {
public String test(){ public String test(){
return "6666"; return "6666";
} }
/**
* 创建ssl连接设置客户端信任所有证书
* @return CloseableHttpClient
* @throws KeyStoreException
* @throws NoSuchAlgorithmException
* @throws KeyManagementException
*/
private CloseableHttpClient createSSLClient() throws KeyStoreException, NoSuchAlgorithmException, KeyManagementException {
SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, (TrustStrategy) (chain, authType) -> true).build();
SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext, new String[]{"TLSv1.2"}, null,
SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
return HttpClients.custom().setSSLSocketFactory(sslsf).build();
}
/**
* 设置请求时的header
* @param httpUriRequest
*/
private void setSSLHeader(HttpUriRequest httpUriRequest) {
long time = System.currentTimeMillis();
String authorization = DigestUtils.sha256Hex(appId + appKey + time);
httpUriRequest.addHeader("Content-Type", "application/json");
httpUriRequest.addHeader("Authorization", authorization);
httpUriRequest.addHeader("timestamp", String.valueOf(time));
}
/**
* 解析响应结果
* @param httpUriRequest
* @return
* @throws NoSuchAlgorithmException
* @throws KeyStoreException
* @throws KeyManagementException
* @throws IOException
*/
private org.apache.http.HttpEntity getSSLResponse(HttpUriRequest httpUriRequest) throws NoSuchAlgorithmException, KeyStoreException, KeyManagementException, IOException {
CloseableHttpClient httpClient = createSSLClient();
CloseableHttpResponse response = httpClient.execute(httpUriRequest);
org.apache.http.HttpEntity responseEntity = response.getEntity();
System.out.println("响应状态为:" + response.getStatusLine());
if (responseEntity != null) {
System.out.println("响应内容长度为:" + responseEntity.getContentLength());
System.out.println("响应内容为:" + EntityUtils.toString(responseEntity));
}
return responseEntity;
}
/**
* 命令下发
*
* @param serviceName
* @param commandName
* @param cmdComtent
* @throws JSONException
* @throws IOException
* @throws NoSuchAlgorithmException
* @throws KeyStoreException
* @throws KeyManagementException
*/
public void deviceCommands(String deviceId,String serviceName, String commandName, org.json.JSONObject cmdComtent) throws JSONException, IOException, NoSuchAlgorithmException, KeyStoreException, KeyManagementException {
String url = "https://" + sendIp + "/iot/1.0/deviceCommands?appId=" + appId;
HttpPost httpPost = new HttpPost(url); //创建post请求
org.json.JSONObject cmdContent = new org.json.JSONObject();
cmdContent.put("serviceId", serviceName);
cmdContent.put("method", commandName);
cmdContent.put("paras", cmdComtent);
org.json.JSONObject cmdBody = new org.json.JSONObject();
cmdBody.put("command", cmdContent);
cmdBody.put("deviceId", deviceId);
setSSLHeader(httpPost); //设置请求的header
StringEntity stringEntity = new StringEntity(cmdBody.toString(), "utf-8");
httpPost.setEntity(stringEntity);//设置请求的body
getSSLResponse(httpPost);//获取响应结果
}
} }

View File

@@ -17,4 +17,7 @@ public class CommandDTO {
private String method; private String method;
private JSONObject jsonObject; private JSONObject jsonObject;
} }

View File

@@ -13,5 +13,7 @@ public class UpSendPojo {
private String deviceId; private String deviceId;
private String appId;
private CommandDTO commandDTO; private CommandDTO commandDTO;
} }

View File

@@ -6,7 +6,7 @@ spring:
roma: roma:
acceptIp: 25.36.190.3:19776 acceptIp: 25.36.190.3:19776
sendIp: https://25.36.190.7:11443/iot/1.0/deviceCommands sendIp: 25.36.190.7:11443
appId: X_DNZLXT appId: X_DNZLXT
appKey: IoKU7u47seGwzO4CqGmCaQ== appKey: IoKU7u47seGwzO4CqGmCaQ==

View File

@@ -1,292 +1,292 @@
<!DOCTYPE html> <!--<!DOCTYPE html>-->
<html lang="en"> <!--<html lang="en">-->
<head> <!--<head>-->
<meta charset="UTF-8"/> <!-- <meta charset="UTF-8"/>-->
<meta name="viewport" content="width=device-width, initial-scale=1.0"/> <!-- <meta name="viewport" content="width=device-width, initial-scale=1.0"/>-->
<title>迁移</title> <!-- <title>迁移</title>-->
<link rel="stylesheet" href="./element.css"/> <!-- <link rel="stylesheet" href="./element.css"/>-->
<script src="./vue.js"></script> <!-- <script src="./vue.js"></script>-->
</head> <!--</head>-->
<body> <!--<body>-->
<div id="app"> <!--<div id="app">-->
<div id="table" class="col-sm-12"> <!-- <div id="table" class="col-sm-12">-->
<table id="areaTable" class="table table-striped table-bordered dataTable no-footer" <!-- <table id="areaTable" class="table table-striped table-bordered dataTable no-footer"-->
style="width:100%;cellspacing:0;margin-bottom: 0px;" role="grid" aria-describedby="example_info"> <!-- style="width:100%;cellspacing:0;margin-bottom: 0px;" role="grid" aria-describedby="example_info">-->
<thead> <!-- <thead>-->
<tr role="row"> <!-- <tr role="row">-->
<th class="table-middle">数据名称</th> <!-- <th class="table-middle">数据名称</th>-->
<th class="table-middle">A/AB/0</th> <!-- <th class="table-middle">A/AB/0</th>-->
<th class="table-middle">B/BC/+</th> <!-- <th class="table-middle">B/BC/+</th>-->
<th class="table-middle">C/CA/-</th> <!-- <th class="table-middle">C/CA/-</th>-->
<th class="table-middle">Total</th> <!-- <th class="table-middle">Total</th>-->
</tr> <!-- </tr>-->
</thead> <!-- </thead>-->
<tbody> <!-- <tbody>-->
<tr> <!-- <tr>-->
<td>相电压总有效值(V)</td> <!-- <td>相电压总有效值(V)</td>-->
<td>{{data.PhV_phsA}}</td> <!-- <td>{{data.PhV_phsA}}</td>-->
<td>{{data.PhV_phsB}}</td> <!-- <td>{{data.PhV_phsB}}</td>-->
<td>{{data.PhV_phsC}}</td> <!-- <td>{{data.PhV_phsC}}</td>-->
<td>-</td> <!-- <td>-</td>-->
</tr> <!-- </tr>-->
<tr> <!-- <tr>-->
<td>电流总有效值(A)</td> <!-- <td>电流总有效值(A)</td>-->
<td>{{data.A_phsA}}</td> <!-- <td>{{data.A_phsA}}</td>-->
<td>{{data.A_phsB}}</td> <!-- <td>{{data.A_phsB}}</td>-->
<td>{{data.A_phsC}}</td> <!-- <td>{{data.A_phsC}}</td>-->
<td>-</td> <!-- <td>-</td>-->
</tr> <!-- </tr>-->
<tr> <!-- <tr>-->
<td>线电压总有效值(V)</td> <!-- <td>线电压总有效值(V)</td>-->
<td>{{data.PPV_phsAB}}</td> <!-- <td>{{data.PPV_phsAB}}</td>-->
<td>{{data.PPV_phsBC}}</td> <!-- <td>{{data.PPV_phsBC}}</td>-->
<td>{{data.PPV_phsCA}}</td> <!-- <td>{{data.PPV_phsCA}}</td>-->
<td>-</td> <!-- <td>-</td>-->
</tr> <!-- </tr>-->
<tr> <!-- <tr>-->
<td>相电压偏差(%)</td> <!-- <td>相电压偏差(%)</td>-->
<td>{{data.PhVDev_phsA}}</td> <!-- <td>{{data.PhVDev_phsA}}</td>-->
<td>{{data.PhVDev_phsB}}</td> <!-- <td>{{data.PhVDev_phsB}}</td>-->
<td>{{data.PhVDev_phsC}}</td> <!-- <td>{{data.PhVDev_phsC}}</td>-->
<td>-</td> <!-- <td>-</td>-->
</tr> <!-- </tr>-->
<tr> <!-- <tr>-->
<td>线电压偏差(%)</td> <!-- <td>线电压偏差(%)</td>-->
<td>/</td> <!-- <td>/</td>-->
<td>/</td> <!-- <td>/</td>-->
<td>/</td> <!-- <td>/</td>-->
<td>/</td> <!-- <td>/</td>-->
</tr> <!-- </tr>-->
<tr> <!-- <tr>-->
<td>频率(Hz)</td> <!-- <td>频率(Hz)</td>-->
<td>-</td> <!-- <td>-</td>-->
<td>-</td> <!-- <td>-</td>-->
<td>-</td> <!-- <td>-</td>-->
<td>{{data.Freq}}</td> <!-- <td>{{data.Freq}}</td>-->
</tr> <!-- </tr>-->
<tr> <!-- <tr>-->
<td>频率偏差(Hz)</td> <!-- <td>频率偏差(Hz)</td>-->
<td>-</td> <!-- <td>-</td>-->
<td>-</td> <!-- <td>-</td>-->
<td>-</td> <!-- <td>-</td>-->
<td>{{data.FreqDev}}</td> <!-- <td>{{data.FreqDev}}</td>-->
</tr> <!-- </tr>-->
<tr> <!-- <tr>-->
<td>电压序分量(V)</td> <!-- <td>电压序分量(V)</td>-->
<td>{{data.SeqV_C0}}</td> <!-- <td>{{data.SeqV_C0}}</td>-->
<td>{{data.SeqV_C1}}</td> <!-- <td>{{data.SeqV_C1}}</td>-->
<td>{{data.SeqV_C2}}</td> <!-- <td>{{data.SeqV_C2}}</td>-->
<td>-</td> <!-- <td>-</td>-->
</tr> <!-- </tr>-->
<tr> <!-- <tr>-->
<td>电流序分量(A)</td> <!-- <td>电流序分量(A)</td>-->
<td>/</td> <!-- <td>/</td>-->
<td>/</td> <!-- <td>/</td>-->
<td>/</td> <!-- <td>/</td>-->
<td>/</td> <!-- <td>/</td>-->
</tr> <!-- </tr>-->
<tr> <!-- <tr>-->
<td>总有功功率(W)</td> <!-- <td>总有功功率(W)</td>-->
<td>/</td> <!-- <td>/</td>-->
<td>/</td> <!-- <td>/</td>-->
<td>/</td> <!-- <td>/</td>-->
<td>{{data.TotW}}</td> <!-- <td>{{data.TotW}}</td>-->
</tr> <!-- </tr>-->
<tr> <!-- <tr>-->
<td>总无功功率(Var)</td> <!-- <td>总无功功率(Var)</td>-->
<td>/</td> <!-- <td>/</td>-->
<td>/</td> <!-- <td>/</td>-->
<td>/</td> <!-- <td>/</td>-->
<td>{{data.TotVar}}</td> <!-- <td>{{data.TotVar}}</td>-->
</tr> <!-- </tr>-->
<tr> <!-- <tr>-->
<td>总视在功率(VA)</td> <!-- <td>总视在功率(VA)</td>-->
<td>/</td> <!-- <td>/</td>-->
<td>/</td> <!-- <td>/</td>-->
<td>/</td> <!-- <td>/</td>-->
<td>{{data.TotVA}}</td> <!-- <td>{{data.TotVA}}</td>-->
</tr> <!-- </tr>-->
<tr> <!-- <tr>-->
<td>视在功率因数</td> <!-- <td>视在功率因数</td>-->
<td>/</td> <!-- <td>/</td>-->
<td>/</td> <!-- <td>/</td>-->
<td>/</td> <!-- <td>/</td>-->
<td>{{data.TotPF}}</td> <!-- <td>{{data.TotPF}}</td>-->
</tr> <!-- </tr>-->
<tr> <!-- <tr>-->
<td>位移功率因数</td> <!-- <td>位移功率因数</td>-->
<td>/</td> <!-- <td>/</td>-->
<td>/</td> <!-- <td>/</td>-->
<td>/</td> <!-- <td>/</td>-->
<td>/</td> <!-- <td>/</td>-->
</tr> <!-- </tr>-->
<tr> <!-- <tr>-->
<td>电压波动</td> <!-- <td>电压波动</td>-->
<td>/</td> <!-- <td>/</td>-->
<td>/</td> <!-- <td>/</td>-->
<td>/</td> <!-- <td>/</td>-->
<td>/</td> <!-- <td>/</td>-->
</tr> <!-- </tr>-->
<tr> <!-- <tr>-->
<td>短时闪变</td> <!-- <td>短时闪变</td>-->
<td>{{data.PstPhV_phsA}}</td> <!-- <td>{{data.PstPhV_phsA}}</td>-->
<td>{{data.PstPhV_phsB}}</td> <!-- <td>{{data.PstPhV_phsB}}</td>-->
<td>{{data.PstPhV_phsC}}</td> <!-- <td>{{data.PstPhV_phsC}}</td>-->
<td>-</td> <!-- <td>-</td>-->
</tr> <!-- </tr>-->
<tr> <!-- <tr>-->
<td>长时闪变</td> <!-- <td>长时闪变</td>-->
<td>{{data.PltPhV_phsA}}</td> <!-- <td>{{data.PltPhV_phsA}}</td>-->
<td>{{data.PltPhV_phsB}}</td> <!-- <td>{{data.PltPhV_phsB}}</td>-->
<td>{{data.PltPhV_phsC}}</td> <!-- <td>{{data.PltPhV_phsC}}</td>-->
<td>-</td> <!-- <td>-</td>-->
</tr> <!-- </tr>-->
<tr> <!-- <tr>-->
<td>电压谐波畸变率(%)</td> <!-- <td>电压谐波畸变率(%)</td>-->
<td>{{data.ThdPhV_phsA}}</td> <!-- <td>{{data.ThdPhV_phsA}}</td>-->
<td>{{data.ThdPhV_phsB}}</td> <!-- <td>{{data.ThdPhV_phsB}}</td>-->
<td>{{data.ThdPhV_phsC}}</td> <!-- <td>{{data.ThdPhV_phsC}}</td>-->
<td>-</td> <!-- <td>-</td>-->
</tr> <!-- </tr>-->
<tr> <!-- <tr>-->
<td>电流谐波畸变率(%)</td> <!-- <td>电流谐波畸变率(%)</td>-->
<td>/</td> <!-- <td>/</td>-->
<td>/</td> <!-- <td>/</td>-->
<td>/</td> <!-- <td>/</td>-->
<td>-</td> <!-- <td>-</td>-->
</tr> <!-- </tr>-->
</tbody> <!-- </tbody>-->
</table> <!-- </table>-->
</div> <!-- </div>-->
</div> <!--</div>-->
<script type="importmap"> <!--<script type="importmap">-->
{ <!-- {-->
"imports": { <!-- "imports": {-->
"vue": "https://unpkg.com/vue@3/dist/vue.esm-browser.js" <!-- "vue": "https://unpkg.com/vue@3/dist/vue.esm-browser.js"-->
} <!-- }-->
} <!-- }-->
</script> <!--</script>-->
<script type="module"> <!--<script type="module">-->
import {createApp, onMounted, ref} from 'vue' <!-- import {createApp, onMounted, ref} from 'vue'-->
createApp({ <!-- createApp({-->
setup() { <!-- setup() {-->
const data = ref([]); <!-- const data = ref([]);-->
const fetchData = async () => { <!-- const fetchData = async () => {-->
try { <!-- try {-->
const response = await fetch('/message'); <!-- const response = await fetch('/message');-->
if (!response.ok) { <!-- if (!response.ok) {-->
throw new Error('Network response was not ok'); <!-- throw new Error('Network response was not ok');-->
} <!-- }-->
data.value = await response.json(); <!-- data.value = await response.json();-->
console.log(111111111, data.value) <!-- console.log(111111111, data.value)-->
} catch (error) { <!-- } catch (error) {-->
console.error('Fetch error:', error); <!-- console.error('Fetch error:', error);-->
} <!-- }-->
}; <!-- };-->
setInterval(fetchData, 1000); <!-- setInterval(fetchData, 1000);-->
return { <!-- return {-->
fetchData, <!-- fetchData,-->
data <!-- data-->
} <!-- }-->
} <!-- }-->
}).mount('#app'); <!-- }).mount('#app');-->
</script> <!--</script>-->
</body> <!--</body>-->
<style> <!--<style>-->
table { <!-- table {-->
width: 100%; <!-- width: 100%;-->
border-collapse: collapse; <!-- border-collapse: collapse;-->
} <!-- }-->
table caption { <!-- table caption {-->
font-size: 2em; <!-- font-size: 2em;-->
font-weight: bold; <!-- font-weight: bold;-->
margin: 1em 0; <!-- margin: 1em 0;-->
} <!-- }-->
th, td { <!-- th, td {-->
border: 1px solid #999; <!-- border: 1px solid #999;-->
text-align: center; <!-- text-align: center;-->
padding: 10px 0; <!-- padding: 10px 0;-->
} <!-- }-->
table thead tr { <!-- table thead tr {-->
background-color: #008c8c; <!-- background-color: #008c8c;-->
color: #fff; <!-- color: #fff;-->
} <!-- }-->
table tbody tr:nth-child(odd) { <!-- table tbody tr:nth-child(odd) {-->
background-color: #eee; <!-- background-color: #eee;-->
} <!-- }-->
table tbody tr:hover { <!-- table tbody tr:hover {-->
background-color: #ccc; <!-- background-color: #ccc;-->
} <!-- }-->
table tbody tr td:first-child { <!-- table tbody tr td:first-child {-->
color: #3d34fc; <!-- color: #3d34fc;-->
} <!-- }-->
table tfoot tr td { <!-- table tfoot tr td {-->
text-align: right; <!-- text-align: right;-->
padding-right: 20px; <!-- padding-right: 20px;-->
} <!-- }-->
#app { <!-- #app {-->
padding: 10px; <!-- padding: 10px;-->
} <!-- }-->
</style> <!--</style>-->
</html> <!--</html>-->

View File

@@ -29,6 +29,7 @@
<button class="el-button" @click="fetchData">读取</button> <button class="el-button" @click="fetchData">读取</button>
</div> </div>
<div style="float: left">装置标识:{{data.customDevId}}</div>
<div v-if="data.time" style="float: right">{{data.time.substring(0,4)+'-'+data.time.substring(4,6)+'-'+data.time.substring(6,8)+' '+data.time.substring(9,11)+':'+data.time.substring(11,13)+':'+data.time.substring(13,15)}}</div> <div v-if="data.time" style="float: right">{{data.time.substring(0,4)+'-'+data.time.substring(4,6)+'-'+data.time.substring(6,8)+' '+data.time.substring(9,11)+':'+data.time.substring(11,13)+':'+data.time.substring(13,15)}}</div>
<table v-if="!changeFlag"> <table v-if="!changeFlag">
<thead> <thead>