From a67e8cc9858eb855bf0596afcd75696e408cfdd3 Mon Sep 17 00:00:00 2001
From: chenshuichuan <1154693969@qq.com>
Date: Fri, 7 Jun 2024 22:45:56 +0800
Subject: [PATCH] add gateway service
---
yudao-module-iot/yudao-module-iot-biz/pom.xml | 5 +-
.../framework/constant/AddressDataType.java | 108 ++++
.../framework/gateway/bo/ChangeStatus.java | 18 +
.../iot/framework/gateway/bo/HttpEntity.java | 205 +++++++
.../iot/framework/gateway/bo/ListEntity.java | 18 +
.../gateway/entity/DeviceModbusEntity.java | 111 ++++
.../gateway/entity/DeviceSiemensEntity.java | 71 +++
.../gateway/entity/DeviceVideoEntity.java | 31 +
.../gateway/entity/ModbusPointEntity.java | 52 ++
.../gateway/entity/MqttBrokerEntity.java | 22 +
.../framework/gateway/entity/PageEntity.java | 22 +
.../gateway/entity/PageEntityByDecice.java | 22 +
.../gateway/entity/SiemensPointEntity.java | 57 ++
.../gateway/service/GatewayMqttService.java | 25 +
.../gateway/service/IModbusPointService.java | 48 ++
.../gateway/service/ISiemensPointService.java | 52 ++
.../gateway/service/IVideoService.java | 22 +
.../service/impl/GatewayServiceImpl.java | 141 +++++
.../service/impl/ModbusPointServiceImpl.java | 361 ++++++++++++
.../service/impl/SiemensPointServiceImpl.java | 398 +++++++++++++
.../service/impl/TheGatewayServiceImpl.java | 549 ++++++++++++++++++
.../service/impl/VideoServiceImpl.java | 128 ++++
.../iot/framework/gateway/util/HttpUtils.java | 385 ++++++++++++
.../iot/framework/gateway/util/JsonUtils.java | 89 +++
.../iot/framework/gateway/util/SslUtil.java | 54 ++
.../iot/framework/gateway/util/TestApp.java | 176 ++++++
.../framework/gateway/util/UrlConstans.java | 91 +++
27 files changed, 3260 insertions(+), 1 deletion(-)
create mode 100644 yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/constant/AddressDataType.java
create mode 100644 yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/gateway/bo/ChangeStatus.java
create mode 100644 yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/gateway/bo/HttpEntity.java
create mode 100644 yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/gateway/bo/ListEntity.java
create mode 100644 yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/gateway/entity/DeviceModbusEntity.java
create mode 100644 yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/gateway/entity/DeviceSiemensEntity.java
create mode 100644 yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/gateway/entity/DeviceVideoEntity.java
create mode 100644 yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/gateway/entity/ModbusPointEntity.java
create mode 100644 yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/gateway/entity/MqttBrokerEntity.java
create mode 100644 yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/gateway/entity/PageEntity.java
create mode 100644 yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/gateway/entity/PageEntityByDecice.java
create mode 100644 yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/gateway/entity/SiemensPointEntity.java
create mode 100644 yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/gateway/service/GatewayMqttService.java
create mode 100644 yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/gateway/service/IModbusPointService.java
create mode 100644 yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/gateway/service/ISiemensPointService.java
create mode 100644 yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/gateway/service/IVideoService.java
create mode 100644 yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/gateway/service/impl/GatewayServiceImpl.java
create mode 100644 yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/gateway/service/impl/ModbusPointServiceImpl.java
create mode 100644 yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/gateway/service/impl/SiemensPointServiceImpl.java
create mode 100644 yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/gateway/service/impl/TheGatewayServiceImpl.java
create mode 100644 yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/gateway/service/impl/VideoServiceImpl.java
create mode 100644 yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/gateway/util/HttpUtils.java
create mode 100644 yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/gateway/util/JsonUtils.java
create mode 100644 yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/gateway/util/SslUtil.java
create mode 100644 yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/gateway/util/TestApp.java
create mode 100644 yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/gateway/util/UrlConstans.java
diff --git a/yudao-module-iot/yudao-module-iot-biz/pom.xml b/yudao-module-iot/yudao-module-iot-biz/pom.xml
index 95d41bef17..146560c788 100644
--- a/yudao-module-iot/yudao-module-iot-biz/pom.xml
+++ b/yudao-module-iot/yudao-module-iot-biz/pom.xml
@@ -77,6 +77,9 @@
cn.iocoder.boot
yudao-spring-boot-starter-redis
-
+
+ org.apache.httpcomponents
+ httpclient
+
diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/constant/AddressDataType.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/constant/AddressDataType.java
new file mode 100644
index 0000000000..5922d7ba9c
--- /dev/null
+++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/constant/AddressDataType.java
@@ -0,0 +1,108 @@
+package cn.iocoder.yudao.module.iot.framework.constant;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+
+import java.util.HashMap;
+import java.util.Map;
+
+@Data
+@AllArgsConstructor
+public class AddressDataType {
+ private static Map tdDataTypeMap = new HashMap<>();
+ private static Map mysqlDataTypeMap = new HashMap<>();
+ private static Map gatewayDataTypeMap = new HashMap<>();
+ static {
+ tdDataTypeMap.put("bool","BOOL");
+ tdDataTypeMap.put("int8","INT");
+ tdDataTypeMap.put("int16","INT");
+ tdDataTypeMap.put("int32","INT");
+ tdDataTypeMap.put("int64","BIGINT");
+ tdDataTypeMap.put("uint8","INT");
+ tdDataTypeMap.put("uint16","INT");
+ tdDataTypeMap.put("uint32","BIGINT");
+ tdDataTypeMap.put("uint64","BIGINT");
+ tdDataTypeMap.put("float32","float");
+ tdDataTypeMap.put("float64","float");
+ tdDataTypeMap.put("string","NCHAR(255)");
+ tdDataTypeMap.put("date","TIMESTAMP");
+ tdDataTypeMap.put("bcd","BINARY(64)");
+
+ gatewayDataTypeMap.put("bool",1);
+ gatewayDataTypeMap.put("int8",2);
+ gatewayDataTypeMap.put("uint8",3);
+ gatewayDataTypeMap.put("int16",4);
+ gatewayDataTypeMap.put("uint16",5);
+ gatewayDataTypeMap.put("int32",6);
+ gatewayDataTypeMap.put("uint32",7);
+ gatewayDataTypeMap.put("int64",8);
+ gatewayDataTypeMap.put("uint64",9);
+ gatewayDataTypeMap.put("float32",10);
+ gatewayDataTypeMap.put("float64",11);
+ gatewayDataTypeMap.put("string",12);
+ gatewayDataTypeMap.put("date",13);
+ gatewayDataTypeMap.put("bcd",14);
+
+ gatewayDataTypeMap.put("Bool",1);
+ gatewayDataTypeMap.put("Int8",2);
+ gatewayDataTypeMap.put("Uint8",3);
+ gatewayDataTypeMap.put("Int16",4);
+ gatewayDataTypeMap.put("Uint16",5);
+ gatewayDataTypeMap.put("Int32",6);
+ gatewayDataTypeMap.put("Uint32",7);
+ gatewayDataTypeMap.put("Int64",8);
+ gatewayDataTypeMap.put("Uint64",9);
+ gatewayDataTypeMap.put("Float32",10);
+ gatewayDataTypeMap.put("Float64",11);
+ gatewayDataTypeMap.put("String",12);
+ gatewayDataTypeMap.put("Date",13);
+ gatewayDataTypeMap.put("Bcd",14);
+
+ gatewayDataTypeMap.put("BOOL",1);
+ gatewayDataTypeMap.put("INT8",2);
+ gatewayDataTypeMap.put("UINT8",3);
+ gatewayDataTypeMap.put("INT16",4);
+ gatewayDataTypeMap.put("UINT16",5);
+ gatewayDataTypeMap.put("INT32",6);
+ gatewayDataTypeMap.put("UINT32",7);
+ gatewayDataTypeMap.put("INT64",8);
+ gatewayDataTypeMap.put("UINT64",9);
+ gatewayDataTypeMap.put("FLOAT32",10);
+ gatewayDataTypeMap.put("FLOAT64",11);
+ gatewayDataTypeMap.put("STRING",12);
+ gatewayDataTypeMap.put("DATE",13);
+ gatewayDataTypeMap.put("BCD",14);
+
+ mysqlDataTypeMap.put("bool","BOOL");
+ mysqlDataTypeMap.put("int8","INT");
+ mysqlDataTypeMap.put("int16","INT");
+ mysqlDataTypeMap.put("int32","INT");
+ mysqlDataTypeMap.put("int64","BIGINT");
+ mysqlDataTypeMap.put("uint8","INT");
+ mysqlDataTypeMap.put("uint16","INT");
+ mysqlDataTypeMap.put("uint32","BIGINT");
+ mysqlDataTypeMap.put("uint64","BIGINT");
+ mysqlDataTypeMap.put("float32","float");
+ mysqlDataTypeMap.put("float64","float");
+ mysqlDataTypeMap.put("string","varchar(255)");
+ mysqlDataTypeMap.put("date","TIMESTAMP");
+ mysqlDataTypeMap.put("bcd","double");
+ }
+ public static Map getDataTypeMap(){
+ return tdDataTypeMap;
+ }
+ public static String getTdDataType(String originDataType){
+ return tdDataTypeMap.get(originDataType);
+ }
+ public static String getTMysqlDataType(String originDataType){
+ //return mysqlDataTypeMap.get(originDataType);
+ return "double(8,4)";
+ }
+ public static Map getGatewayDataTypeMap(){
+ return gatewayDataTypeMap;
+ }
+ public static Integer getGatewayDataTypeMap(String originDataType){
+ return gatewayDataTypeMap.get(originDataType);
+ }
+
+}
diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/gateway/bo/ChangeStatus.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/gateway/bo/ChangeStatus.java
new file mode 100644
index 0000000000..a9d67af713
--- /dev/null
+++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/gateway/bo/ChangeStatus.java
@@ -0,0 +1,18 @@
+package cn.iocoder.yudao.module.iot.framework.gateway.bo;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * 网关接受的Siemens iopoint实体 启用
+ */
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class ChangeStatus {
+ private String changesStatusID;
+ private String newStatus;
+ private String oldStatus;
+}
diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/gateway/bo/HttpEntity.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/gateway/bo/HttpEntity.java
new file mode 100644
index 0000000000..46bcd47225
--- /dev/null
+++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/gateway/bo/HttpEntity.java
@@ -0,0 +1,205 @@
+package cn.iocoder.yudao.module.iot.framework.gateway.bo;
+
+
+import cn.iocoder.yudao.module.iot.framework.gateway.entity.*;
+import org.apache.http.message.BasicNameValuePair;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class HttpEntity {
+
+ public static List getRemoveParam(String ids) {
+ List params = new ArrayList<>();
+ params.add(new BasicNameValuePair("ids", ids));
+ return params;
+ }
+
+
+ public static List getRemoveSiemens(Integer id) {
+ List params = new ArrayList<>();
+ params.add(new BasicNameValuePair("ids", id.toString()));
+ return params;
+ }
+
+ public static List getPageParam(PageEntity pageEntity) {
+ List params = new ArrayList<>();
+ params.add(new BasicNameValuePair("pageSize", pageEntity.getPageSize()));
+ params.add(new BasicNameValuePair("pageNum", pageEntity.getPageNum()));
+ params.add(new BasicNameValuePair("orderByColumn", pageEntity.getOrderByColumn()));
+ params.add(new BasicNameValuePair("isAsc", pageEntity.getIsAsc()));
+ return params;
+ }
+ public static List getPageParamVo(PageEntityByDecice pageEntity) {
+ List params = new ArrayList<>();
+ params.add(new BasicNameValuePair("pageSize", pageEntity.getPageSize()));
+ params.add(new BasicNameValuePair("pageNum", pageEntity.getPageNum()));
+ params.add(new BasicNameValuePair("orderByColumn", pageEntity.getOrderByColumn()));
+ params.add(new BasicNameValuePair("isAsc", pageEntity.getIsAsc()));
+ params.add(new BasicNameValuePair("deviceID", pageEntity.getDeviceID()));
+ return params;
+ }
+
+ public static List getParam(DeviceSiemensEntity entity) {
+ List params = new ArrayList<>();
+ params.add(new BasicNameValuePair("deviceConfigID", entity.getDeviceConfigID()));
+ params.add(new BasicNameValuePair("deviceID", entity.getDeviceID()));
+ params.add(new BasicNameValuePair("deviceName", entity.getDeviceName()));
+ params.add(new BasicNameValuePair("localPersistent", entity.getLocalPersistent()));
+ params.add(new BasicNameValuePair("rateCount", entity.getRateCount().toString()));
+ params.add(new BasicNameValuePair("siemensConnectParam", entity.getSiemensConnectParam()));
+ params.add(new BasicNameValuePair("siemensSeries", entity.getSiemensSeries()));
+ params.add(new BasicNameValuePair("uploadRate", entity.getUploadRate()));
+ params.add(new BasicNameValuePair("pageSize", entity.getReadRepeatValue().toString()));
+ params.add(new BasicNameValuePair("pageNum", entity.getWriteRepeatValue().toString()));
+ params.add(new BasicNameValuePair("ReadCron", entity.getReadCron()));
+ params.add(new BasicNameValuePair("ReadCronType", entity.getReadCronType()));
+ params.add(new BasicNameValuePair("ReadRepeatUnit", entity.getReadRepeatUnit()));
+ params.add(new BasicNameValuePair("WriteCron", entity.getWriteCron()));
+ params.add(new BasicNameValuePair("WriteCronType", entity.getWriteCronType()));
+ params.add(new BasicNameValuePair("WriteRepeatUnit", entity.getWriteRepeatUnit()));
+ params.add(new BasicNameValuePair("ids", entity.getWriteRepeatUnit()));
+ return params;
+ }
+
+ public static List getParam(DeviceModbusEntity entity) {
+ List params = new ArrayList<>();
+ if (entity.getReadRepeatValue() != null) {
+ params.add(new BasicNameValuePair("pageSize", entity.getReadRepeatValue().toString()));
+ }
+ if (entity.getWriteRepeatValue() != null) {
+ params.add(new BasicNameValuePair("pageNum", entity.getWriteRepeatValue().toString()));
+ }
+ if (entity.getDeviceConfigID() != null) {
+ params.add(new BasicNameValuePair("orderByColumn", entity.getDeviceConfigID()));
+ }
+ if (entity.getDeviceId() != null) {
+ params.add(new BasicNameValuePair("deviceID", entity.getDeviceId()));
+ }
+ if (entity.getDeviceName() != null) {
+ params.add(new BasicNameValuePair("deviceName", entity.getDeviceName()));
+ }
+ if (entity.getModbusProtocol() != null) {
+ params.add(new BasicNameValuePair("modbusProtocol", entity.getModbusProtocol()));
+ }
+ if (entity.getModbusPattern() != null) {
+ params.add(new BasicNameValuePair("modbusPattern", entity.getModbusPattern()));
+ }
+ if (entity.getPortName() != null) {
+ params.add(new BasicNameValuePair("portName", entity.getPortName()));
+ }
+ if (entity.getModbusConnectParam() != null) {
+ params.add(new BasicNameValuePair("modbusConnectParam", entity.getModbusConnectParam()));
+ }
+ if (entity.getReadCronType() != null) {
+ params.add(new BasicNameValuePair("readCronType", entity.getReadCronType()));
+ }
+ if (entity.getReadRepeatValue() != null) {
+ params.add(new BasicNameValuePair("readRepeatValue", entity.getReadRepeatValue().toString()));
+ }
+ if (entity.getReadRepeatUnit() != null) {
+ params.add(new BasicNameValuePair("readRepeatUnit", entity.getReadRepeatUnit()));
+ }
+ if (entity.getReadCron() != null) {
+ params.add(new BasicNameValuePair("readCron", entity.getReadCron()));
+ }
+ if (entity.getWriteCronType() != null) {
+ params.add(new BasicNameValuePair("writeCronType", entity.getWriteCronType()));
+ }
+ if (entity.getWriteRepeatValue() != null) {
+ params.add(new BasicNameValuePair("writeRepeatValue", entity.getWriteRepeatValue().toString()));
+ }
+ if (entity.getWriteRepeatUnit() != null) {
+ params.add(new BasicNameValuePair("writeRepeatUnit", entity.getWriteRepeatUnit()));
+ }
+ if (entity.getReadRepeatValue() != null) {
+ params.add(new BasicNameValuePair("writeCron", entity.getWriteCron()));
+ }
+ if (entity.getLocalPersistent() != null) {
+ params.add(new BasicNameValuePair("localPersistent", entity.getLocalPersistent()));
+ }
+ if (entity.getUploadRate() != null) {
+ params.add(new BasicNameValuePair("uploadRate", entity.getUploadRate()));
+ }
+ if (entity.getRateCount() != null) {
+ params.add(new BasicNameValuePair("rateCount", entity.getRateCount().toString()));
+ }
+ if (entity.getModbusReadAddrGap() != null) {
+ params.add(new BasicNameValuePair("modbusReadAddrGap", entity.getModbusReadAddrGap()));
+ }
+ return params;
+ }
+
+ public static List getParam(ModbusPointEntity entity) {
+ List params = new ArrayList<>();
+ params.add(new BasicNameValuePair("deviceConfigContentID", entity.getDeviceConfigContentID()));
+ params.add(new BasicNameValuePair("modbusAddressType", entity.getModbusAddressType()));
+// params.add(new BasicNameValuePair("modbusFieldAccess", entity.getModbusFieldAccess()));
+ params.add(new BasicNameValuePair("modbusFieldAddress", entity.getModbusFieldAddress()));
+ params.add(new BasicNameValuePair("modbusFieldDataType", entity.getModbusFieldDataType()));
+ params.add(new BasicNameValuePair("modbusFieldName", entity.getModbusFieldName()));
+ params.add(new BasicNameValuePair("modbusFieldOrder", entity.getModbusFieldOrder()));
+ params.add(new BasicNameValuePair("modbusFieldPrecision", entity.getModbusFieldPrecision()));
+ if (entity.getModbusFieldSize()!=null){
+ params.add(new BasicNameValuePair("modbusFieldSize",entity.getModbusFieldSize().toString()));
+ }
+ params.add(new BasicNameValuePair("modbusFieldUnit", entity.getModbusFieldUnit()));
+ params.add(new BasicNameValuePair("modbusSlaveID", entity.getModbusSlaveID()));
+ return params;
+ }
+
+ public static List getParam(SiemensPointEntity entity) {
+ List params = new ArrayList<>();
+ params.add(new BasicNameValuePair("deviceConfigContentID", String.valueOf(entity.getDeviceConfigContentID())));
+ params.add(new BasicNameValuePair("siemensFieldAddress", entity.getSiemensFieldAddress()));
+ params.add(new BasicNameValuePair("siemensFieldDataType", entity.getSiemensFieldDataType().toString()));
+ params.add(new BasicNameValuePair("siemensFieldName", entity.getSiemensFieldName()));
+ params.add(new BasicNameValuePair("siemensFieldPrecision",String.valueOf(entity.getSiemensFieldPrecision())));
+ params.add(new BasicNameValuePair("siemensFieldUnit", entity.getSiemensFieldUnit()));
+ return params;
+ }
+
+ public static List getParam(DeviceVideoEntity entity) {
+ List params = new ArrayList<>();
+// params.add(new BasicNameValuePair("deviceConfigID", String.valueOf(entity.getDeviceConfigID())));
+ params.add(new BasicNameValuePair("deviceID", entity.getDeviceID()));
+ params.add(new BasicNameValuePair("videoAddress", entity.getVideoAddress()));
+ params.add(new BasicNameValuePair("serverAddress", entity.getServerAddress()));
+ params.add(new BasicNameValuePair("deviceName",String.valueOf(entity.getDeviceName())));
+ return params;
+ }
+
+ public static List getParam(MqttBrokerEntity entity) {
+ List params = new ArrayList<>();
+ params.add(new BasicNameValuePair("cloudConfigID", entity.getCloudConfigID()));
+ params.add(new BasicNameValuePair("cloudStatus", entity.getCloudStatus()));
+ params.add(new BasicNameValuePair("createTime", entity.getCreateTime()));
+ params.add(new BasicNameValuePair("updateTime", entity.getUpdateTime()));
+ params.add(new BasicNameValuePair("mqttAddress", entity.getMqttAddress()));
+ params.add(new BasicNameValuePair("mqttPassword", entity.getMqttPassword()));
+ params.add(new BasicNameValuePair("mqttUserName", entity.getMqttUserName()));
+ params.add(new BasicNameValuePair("mqttPort", entity.getMqttPort()));
+ params.add(new BasicNameValuePair("mqttPublishTopic", entity.getMqttPublishTopic()));
+ params.add(new BasicNameValuePair("mqttSslFlag", entity.getMqttSslFlag().toString()));
+
+ return params;
+ }
+
+ /*启用模型*/
+ public static List getChangestatus(ChangeStatus changeStatus) {
+ List params = new ArrayList<>();
+ params.add(new BasicNameValuePair("changesStatusID", changeStatus.getChangesStatusID()));
+ params.add(new BasicNameValuePair("newStatus", changeStatus.getNewStatus()));
+ params.add(new BasicNameValuePair("oldStatus", changeStatus.getOldStatus()));
+
+
+ return params;
+ }
+
+ public static List getLoginParam(String username,String password) {
+ List params = new ArrayList<>();
+ params.add(new BasicNameValuePair("username", username));
+ params.add(new BasicNameValuePair("password", password));
+ return params;
+ }
+}
diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/gateway/bo/ListEntity.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/gateway/bo/ListEntity.java
new file mode 100644
index 0000000000..77f7bd3e91
--- /dev/null
+++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/gateway/bo/ListEntity.java
@@ -0,0 +1,18 @@
+package cn.iocoder.yudao.module.iot.framework.gateway.bo;
+
+import com.alibaba.fastjson.JSONObject;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class ListEntity {
+ String code;
+ String msg;
+ String total;
+ List rows;
+}
diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/gateway/entity/DeviceModbusEntity.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/gateway/entity/DeviceModbusEntity.java
new file mode 100644
index 0000000000..716a4753c9
--- /dev/null
+++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/gateway/entity/DeviceModbusEntity.java
@@ -0,0 +1,111 @@
+package cn.iocoder.yudao.module.iot.framework.gateway.entity;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class DeviceModbusEntity {
+ /**
+ * 网关管理后台的id
+ */
+ private String deviceConfigID;
+ /**
+ * 机台ID
+ */
+ private String equipmentsId;
+
+ private String deviceConfigId;
+
+ /**
+ * modbus设备编号
+ */
+ private String deviceId;
+
+ /**
+ * modbus设备名称
+ */
+ private String deviceName;
+
+ /**
+ * modbus协议类型(serial-rtu)
+ */
+ private String modbusProtocol;
+
+ /**
+ * modbus模式(client)
+ */
+ private String modbusPattern;
+
+ /**
+ * modbus串口号
+ */
+ private String portName;
+
+ /**
+ * 连接参数(波特率,数据位,停止位,校验位 例如:9600,8,1,N)
+ */
+ private String modbusConnectParam;
+
+ /**
+ * 读取任务方式(0无,1有)
+ */
+ private String readCronType;
+
+ /**
+ * 读取任务时间间隔
+ */
+ private Integer readRepeatValue;
+
+ /**
+ * 读取任务时间间隔单位
+ */
+ private String readRepeatUnit;
+
+ /**
+ * 读取任务时间表达式
+ */
+ private String readCron;
+
+ /**
+ * 写入任务时间间隔
+ */
+ private String writeCronType;
+
+ /**
+ * 写入任务时间间隔
+ */
+ private Integer writeRepeatValue;
+
+ /**
+ * 写入任务时间间隔单位
+ */
+ private String writeRepeatUnit;
+
+ /**
+ * 写入任务时间表达式
+ */
+ private String writeCron;
+
+ /**
+ * 是否持久化(0不持久化,1持久化)
+ */
+ private String localPersistent;
+
+ /**
+ * 上传方式(1实时,2自定义)
+ */
+ private String uploadRate;
+
+ /**
+ * 上传频率
+ */
+ private Integer rateCount;
+
+ /**
+ * 读地址是否连续(0否,1是)
+ */
+ private String modbusReadAddrGap;
+}
diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/gateway/entity/DeviceSiemensEntity.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/gateway/entity/DeviceSiemensEntity.java
new file mode 100644
index 0000000000..69161c1a0e
--- /dev/null
+++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/gateway/entity/DeviceSiemensEntity.java
@@ -0,0 +1,71 @@
+package cn.iocoder.yudao.module.iot.framework.gateway.entity;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class DeviceSiemensEntity {
+
+ /**数据库id*/
+ String deviceConfigID;
+ /**设备编号*/
+ String deviceID;//71220220500200001
+
+ /**设备名称*/
+ String deviceName;
+
+ /**Siemens系列*/
+ String siemensSeries;
+
+ /**连接参数*/
+ String siemensConnectParam;
+
+ /**读取任务*/
+ String readCronType;//无、频率、定点
+
+ /**频率值*/
+ Integer readRepeatValue;//正整数
+
+ /**读单位*/
+ String readRepeatUnit;//秒、分、时、毫秒
+
+ /**读取任务时间表达式*/
+ String readCron;
+
+ //写入任务时间间隔
+ String writeCronType;
+
+ //写入任务时间间隔
+ Integer writeRepeatValue;
+
+ /**数据库id*/
+ String writeRepeatUnit;
+ /**
+ * 写入任务时间表达式
+ */
+ String writeCron;
+
+ /**是否持久化*/
+ String localPersistent;
+
+ /**上传*/
+ String uploadRate;
+
+ /**不变次数*/
+ Integer rateCount;
+
+
+
+ /**设备类型*/
+ String deviceType; //siemens、modbus
+ String deviceComm; //1
+ String deviceStatus;//0,notok; 1,ok
+ String createTime;
+ String updateTime;
+ String portName;
+
+
+}
diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/gateway/entity/DeviceVideoEntity.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/gateway/entity/DeviceVideoEntity.java
new file mode 100644
index 0000000000..6ef4177f72
--- /dev/null
+++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/gateway/entity/DeviceVideoEntity.java
@@ -0,0 +1,31 @@
+package cn.iocoder.yudao.module.iot.framework.gateway.entity;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class DeviceVideoEntity {
+ /**
+ * 网关管理后台的id
+ */
+ private String deviceConfigID;
+ /**
+ * 设备编号
+ */
+ private String deviceID;
+ /**
+ * 视频地址
+ */
+ private String videoAddress;
+ /**
+ * 服务地址
+ */
+ private String serverAddress;
+ /**
+ * 视频名称
+ */
+ private String deviceName;
+}
diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/gateway/entity/ModbusPointEntity.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/gateway/entity/ModbusPointEntity.java
new file mode 100644
index 0000000000..3484afd1e6
--- /dev/null
+++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/gateway/entity/ModbusPointEntity.java
@@ -0,0 +1,52 @@
+package cn.iocoder.yudao.module.iot.framework.gateway.entity;
+
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * 网关接受的iopoint实体
+ */
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class ModbusPointEntity {
+
+ String deviceConfigContentID;
+ //站号
+ //@Excel(name = "站号")
+ String modbusSlaveID;
+ //地址名称/编码(下发用)
+ //@Excel(name = "地址编码")
+ String modbusFieldName;// json_flag
+ //地址名称 真的名称
+ //@Excel(name = "地址名称")
+ String modbusName;// json_flag
+ //寄存器地址
+ //@Excel(name = "寄存器地址")
+ String modbusFieldAddress;// 111
+ //寄存器地址类型
+ //@Excel(name = "寄存器地址类型")
+ String modbusAddressType;// 1
+ //个数
+ //@Excel(name = "个数")
+ Integer modbusFieldSize;// 2
+ //缩放因子
+ //@Excel(name = "缩放因子")
+ String modbusFieldPrecision;// 1
+ //数据类型
+ //@Excel(name = "数据类型")
+ String modbusFieldDataType;// 1
+ //字节顺序
+ //@Excel(name = "字节顺序")
+ String modbusFieldOrder;//DCBA
+ //单位
+ //@Excel(name = "单位")
+ String modbusFieldUnit;// s
+ //@Excel(name = "机台编码")
+ String equipmentCode;
+ //@Excel(name = "设备编码")
+ String deviceCode;
+}
diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/gateway/entity/MqttBrokerEntity.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/gateway/entity/MqttBrokerEntity.java
new file mode 100644
index 0000000000..894166306b
--- /dev/null
+++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/gateway/entity/MqttBrokerEntity.java
@@ -0,0 +1,22 @@
+package cn.iocoder.yudao.module.iot.framework.gateway.entity;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+
+@Data
+@AllArgsConstructor
+public class MqttBrokerEntity {
+
+ private String mqttAddress;//ip地址
+ private String mqttPort;//端口
+ private String mqttUserName;//授权账号 一定要授权的
+ private String mqttPassword;//密码
+ private String mqttPublishTopic;//发布主题
+ private Boolean mqttSslFlag; //是否启用ssl
+
+ private String cloudConfigID;
+ private String cloudAddress;
+ private String cloudStatus;
+ private String createTime;
+ private String updateTime;
+}
diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/gateway/entity/PageEntity.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/gateway/entity/PageEntity.java
new file mode 100644
index 0000000000..303c1a2892
--- /dev/null
+++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/gateway/entity/PageEntity.java
@@ -0,0 +1,22 @@
+package cn.iocoder.yudao.module.iot.framework.gateway.entity;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+
+@Data
+@AllArgsConstructor
+public class PageEntity {
+
+ //String pageSize,String pageNum,String orderByColumn,String isAsc
+ String pageSize; // 10
+ String pageNum; //: 1
+ String orderByColumn; //: updateTime
+ String isAsc; //: asc
+// String deviceID; //: 设备编码
+ public PageEntity(){
+ this.isAsc = "asc";
+ this.orderByColumn = "updateTime";
+ this.pageSize = "100";
+ this.pageNum = "1";
+ }
+}
diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/gateway/entity/PageEntityByDecice.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/gateway/entity/PageEntityByDecice.java
new file mode 100644
index 0000000000..8d4b584100
--- /dev/null
+++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/gateway/entity/PageEntityByDecice.java
@@ -0,0 +1,22 @@
+package cn.iocoder.yudao.module.iot.framework.gateway.entity;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+
+@Data
+@AllArgsConstructor
+public class PageEntityByDecice {
+
+ //String pageSize,String pageNum,String orderByColumn,String isAsc
+ String pageSize; // 10
+ String pageNum; //: 1
+ String orderByColumn; //: updateTime
+ String isAsc; //: asc
+ String deviceID; //: 设备编码
+ public PageEntityByDecice(){
+ this.isAsc = "asc";
+ this.orderByColumn = "updateTime";
+ this.pageSize = "100";
+ this.pageNum = "1";
+ }
+}
diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/gateway/entity/SiemensPointEntity.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/gateway/entity/SiemensPointEntity.java
new file mode 100644
index 0000000000..a37ce3ac5a
--- /dev/null
+++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/gateway/entity/SiemensPointEntity.java
@@ -0,0 +1,57 @@
+package cn.iocoder.yudao.module.iot.framework.gateway.entity;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * 网关接受的Siemens iopoint实体
+ */
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class SiemensPointEntity {
+ /**
+ * 数据库id
+ */
+ Integer deviceConfigContentID;
+ /**
+ * 地址编码
+ */
+ //@Excel(name = "地址编码")
+ String siemensFieldName;
+ /**
+ * 地址名称
+ */
+ //@Excel(name = "地址名称")
+ String siemensName;
+ /**
+ * 地址
+ */
+ //@Excel(name = "地址")
+ String siemensFieldAddress;
+ /**
+ * 数据类型(下发用value值)
+ */
+ Integer siemensFieldDataType;
+ /**
+ * 数据类型名称
+ */
+ //@Excel(name = "数据类型名称")
+ String siemensFieldDataTypeName;
+ /**
+ * 数据精度
+ */
+ //@Excel(name = "数据精度")
+ Integer siemensFieldPrecision;
+ /**
+ * 数据单位
+ */
+ //@Excel(name = "数据单位")
+ String siemensFieldUnit;
+ //@Excel(name = "机台编码")
+ String equipmentCode;
+ //@Excel(name = "设备编码")
+ String deviceCode;
+}
diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/gateway/service/GatewayMqttService.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/gateway/service/GatewayMqttService.java
new file mode 100644
index 0000000000..8b27c9d087
--- /dev/null
+++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/gateway/service/GatewayMqttService.java
@@ -0,0 +1,25 @@
+package cn.iocoder.yudao.module.iot.framework.gateway.service;
+
+
+
+import cn.iocoder.yudao.module.iot.framework.gateway.bo.ChangeStatus;
+import cn.iocoder.yudao.module.iot.framework.gateway.entity.MqttBrokerEntity;
+
+import java.util.List;
+
+
+public interface GatewayMqttService {
+ public void login(String url ,String username ,String password);
+ //获取mqtt主题
+ public List getMqttBrokerEntity(String url, String username , String password);
+
+ //下发单个mqtt主题
+ public int add(MqttBrokerEntity entity, String url);
+
+ //删除mqtt主题
+ public int delete( String url, String ids);
+
+ //启用网关
+ public int changeStatus(ChangeStatus changeStatus, String url);
+
+}
diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/gateway/service/IModbusPointService.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/gateway/service/IModbusPointService.java
new file mode 100644
index 0000000000..6f50515a95
--- /dev/null
+++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/gateway/service/IModbusPointService.java
@@ -0,0 +1,48 @@
+package cn.iocoder.yudao.module.iot.framework.gateway.service;
+
+
+
+import cn.iocoder.yudao.module.iot.framework.gateway.bo.ChangeStatus;
+import cn.iocoder.yudao.module.iot.framework.gateway.entity.DeviceModbusEntity;
+import cn.iocoder.yudao.module.iot.framework.gateway.entity.ModbusPointEntity;
+
+import java.util.List;
+
+
+public interface IModbusPointService {
+
+ public void login(String url, String username, String password);
+
+ /*modbus*/
+ //获取设备列表
+ public List getModbusList(String url, String username, String password);
+ //获取指定设备编码列表
+ public List getModbusList(String url, String username, String password,String deviceId);
+
+ //下发单个设备
+ public int add(DeviceModbusEntity entity, String url);
+
+ public int add(List list, String url);
+
+ //删除单个设备
+ public int delete(String url, String ids);
+
+ //启用
+ public int changeStatus(ChangeStatus changeStatus, String url);
+
+
+ //获取设备点位列表
+ public List getPointList(String url, String username, String password, String deviceConfigID); //下发点位
+
+ //下发点位
+ public int add(ModbusPointEntity point, String url, String id);
+
+ public int add(List list, String address, String deviceConfigID);
+
+ //删除点位
+ public int deletePoint(String url, String ids);
+
+ Integer getPointListByCount(String url, String username, String password, String deviceConfigID);
+
+ List getPointListAll(String adminIp, String username, String password, String deviceConfigID);
+}
diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/gateway/service/ISiemensPointService.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/gateway/service/ISiemensPointService.java
new file mode 100644
index 0000000000..816c5957f8
--- /dev/null
+++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/gateway/service/ISiemensPointService.java
@@ -0,0 +1,52 @@
+package cn.iocoder.yudao.module.iot.framework.gateway.service;
+
+
+import cn.iocoder.yudao.module.iot.framework.gateway.bo.ChangeStatus;
+import cn.iocoder.yudao.module.iot.framework.gateway.entity.DeviceSiemensEntity;
+import cn.iocoder.yudao.module.iot.framework.gateway.entity.SiemensPointEntity;
+
+import java.util.List;
+
+
+public interface ISiemensPointService {
+
+ //调用前统一登录,保存cookies
+ public String login(String url ,String username ,String password);
+ /*西门子*/
+ //获取设备列表
+ public List getSiemensList(String url, String username , String password);
+ //获取指定编码设备列表
+ public List getSiemensList(String url, String username , String password,String deviceId);
+
+ //下发单个设备
+ public int add(DeviceSiemensEntity siemens,String url);
+ //下发单个设备
+ public int add(List list,String url);
+ //删除单个设备
+ public int delete(String url, String ids);
+
+ //启用
+ public int changeStatus(ChangeStatus changeStatus, String url);
+
+
+ //获取设备点位列表
+ public List getPointList(String url, String deviceConfigID, String username , String password);
+
+ //下发点位
+ public int add(SiemensPointEntity point, String url, String id);
+ public int add(List list, String url, String deviceConfigID);
+ //更改点位状态
+ public int edit(SiemensPointEntity point,String url);
+
+ //删除点位
+ public int deletePoint(String url, String ids);
+
+
+
+ //启用设备
+ public int changeStatusDevice(ListdeviceIds,ChangeStatus changeStatus, String url);
+
+ Integer getPointListByCount(String url, String deviceConfigID, String username, String password);
+
+ List getPointListAll(String adminIp, String deviceConfigID, String username, String password);
+}
diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/gateway/service/IVideoService.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/gateway/service/IVideoService.java
new file mode 100644
index 0000000000..de4fbb1d8e
--- /dev/null
+++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/gateway/service/IVideoService.java
@@ -0,0 +1,22 @@
+package cn.iocoder.yudao.module.iot.framework.gateway.service;
+
+
+
+import cn.iocoder.yudao.module.iot.framework.gateway.entity.DeviceVideoEntity;
+
+import java.util.List;
+
+
+public interface IVideoService {
+ public void login(String url, String username, String password);
+
+
+ List getVideoId(String adminIp, String username, String password, String monitorCode);
+
+
+ int deleteByIds(String adminIp, String ids);
+
+ int add(DeviceVideoEntity list, String adminIp);
+
+ int openOrClose(String adminIp, String videoId);
+}
diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/gateway/service/impl/GatewayServiceImpl.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/gateway/service/impl/GatewayServiceImpl.java
new file mode 100644
index 0000000000..0352bc8f1e
--- /dev/null
+++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/gateway/service/impl/GatewayServiceImpl.java
@@ -0,0 +1,141 @@
+package cn.iocoder.yudao.module.iot.framework.gateway.service.impl;
+
+
+import cn.iocoder.yudao.module.iot.framework.gateway.bo.ChangeStatus;
+import cn.iocoder.yudao.module.iot.framework.gateway.bo.HttpEntity;
+import cn.iocoder.yudao.module.iot.framework.gateway.entity.MqttBrokerEntity;
+import cn.iocoder.yudao.module.iot.framework.gateway.service.GatewayMqttService;
+import cn.iocoder.yudao.module.iot.framework.gateway.util.HttpUtils;
+import cn.iocoder.yudao.module.iot.framework.gateway.util.JsonUtils;
+import cn.iocoder.yudao.module.iot.framework.gateway.util.UrlConstans;
+import org.apache.http.client.ClientProtocolException;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.util.EntityUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
+
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.util.List;
+
+@Service
+public class GatewayServiceImpl implements GatewayMqttService {
+ private static final Logger log = LoggerFactory.getLogger(GatewayServiceImpl.class);
+ private String cookie;
+ //先登录
+ @Override
+ public void login(String url ,String username ,String password){
+ // 创建 HttpClient 客户端
+ CloseableHttpClient httpClient = HttpUtils.createSSLClientDefault();
+ CloseableHttpResponse httpResponse = null;
+ try {
+ HttpPost httpPost = HttpUtils.getHttpPost(url + UrlConstans.loginUrl, HttpEntity.getLoginParam(username,password));
+ httpResponse = httpClient.execute(httpPost);
+ log.debug(EntityUtils.toString(httpResponse.getEntity()));
+ this.cookie = HttpUtils.getCookies(httpResponse);
+ }
+ // 无论如何必须关闭连接
+ catch (IOException e) {
+ e.printStackTrace();
+ } finally {
+ HttpUtils.closeHttp(httpClient, httpResponse);
+ }
+ }
+ @Override
+ public List getMqttBrokerEntity(String url, String username , String password) {
+
+ // 创建 HttpClient 客户端
+ CloseableHttpClient httpClient = HttpUtils.createSSLClientDefault();
+ CloseableHttpResponse httpResponse = null;
+ List list = null;
+ try {
+ String getlistUrl = url + UrlConstans.mqtt_list;
+ HttpPost httpPost = HttpUtils.getHttpPost(getlistUrl, null);//检索条件
+ httpPost.setHeader("Cookie", cookie);
+ httpResponse = httpClient.execute(httpPost);
+ if (httpResponse.getEntity() != null) {
+ String entityStr = EntityUtils.toString(httpResponse.getEntity());
+ list = JsonUtils.toMqttEntityList(entityStr);
+ }
+ }
+ // 无论如何必须关闭连接
+ catch (IOException e) {
+ e.printStackTrace();
+ } finally {
+ HttpUtils.closeHttp(httpClient, httpResponse);
+ }
+ return list;
+ }
+
+ @Override
+ public int add(MqttBrokerEntity entity, String address) {
+ CloseableHttpClient httpClient = HttpUtils.createSSLClientDefault();
+ CloseableHttpResponse httpResponse = null;
+ HttpPost httpPost = null;
+
+ try {
+ if (entity.getCloudConfigID() != null) {
+ httpPost = HttpUtils.getHttpPost(address + UrlConstans.mqtt_edit, HttpEntity.getParam(entity));
+ } else {
+ httpPost = HttpUtils.getHttpPost(address + UrlConstans.mqtt_add, HttpEntity.getParam(entity));
+ }
+ httpPost.setHeader("Cookie", cookie);
+ httpResponse = httpClient.execute(httpPost);
+ System.err.println(EntityUtils.toString(httpResponse.getEntity()));
+ } catch (IOException e) {
+ e.printStackTrace();
+ return 1;
+ } finally {
+ HttpUtils.closeHttp(httpClient, httpResponse);
+ }
+ return 0;
+ }
+
+ @Override
+ public int delete( String address, String ids) {
+ CloseableHttpClient httpClient = HttpUtils.createSSLClientDefault();
+ CloseableHttpResponse httpResponse = null;
+ HttpPost httpPost = null;
+ try {
+ httpPost = HttpUtils.getHttpPost(address + UrlConstans.mqtt_remove, HttpEntity.getRemoveParam(ids));//网关上设备的id
+ httpPost.setHeader("Cookie", cookie);
+ httpResponse = httpClient.execute(httpPost);
+ System.err.println("删除" + httpResponse.getEntity());
+ } catch (UnsupportedEncodingException e) {
+ e.printStackTrace();
+ } catch (ClientProtocolException e) {
+ e.printStackTrace();
+ } catch (IOException e) {
+ e.printStackTrace();
+ } finally {
+ HttpUtils.closeHttp(httpClient, httpResponse);
+ }
+ return 0;
+ }
+
+ @Override
+ public int changeStatus(ChangeStatus changeStatus, String address) {
+ CloseableHttpClient httpClient = HttpUtils.createSSLClientDefault();
+ CloseableHttpResponse httpResponse = null;
+ HttpPost httpPost = null;
+ httpPost.setHeader("Cookie", cookie);
+ try {
+ httpPost = HttpUtils.getHttpPost(address + UrlConstans.mqtt_changestatus, HttpEntity.getChangestatus(changeStatus));
+// httpPost.setHeader("Cookie", cookie);
+ httpResponse = httpClient.execute(httpPost);
+ System.err.println("启用" + httpResponse.getEntity());
+ } catch (UnsupportedEncodingException e) {
+ e.printStackTrace();
+ } catch (ClientProtocolException e) {
+ e.printStackTrace();
+ } catch (IOException e) {
+ e.printStackTrace();
+ } finally {
+ HttpUtils.closeHttp(httpClient, httpResponse);
+ }
+ return 0;
+ }
+}
diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/gateway/service/impl/ModbusPointServiceImpl.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/gateway/service/impl/ModbusPointServiceImpl.java
new file mode 100644
index 0000000000..e18d7da418
--- /dev/null
+++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/gateway/service/impl/ModbusPointServiceImpl.java
@@ -0,0 +1,361 @@
+package cn.iocoder.yudao.module.iot.framework.gateway.service.impl;
+
+
+
+import cn.iocoder.yudao.module.iot.framework.gateway.bo.ChangeStatus;
+import cn.iocoder.yudao.module.iot.framework.gateway.bo.HttpEntity;
+import cn.iocoder.yudao.module.iot.framework.gateway.entity.DeviceModbusEntity;
+import cn.iocoder.yudao.module.iot.framework.gateway.entity.ModbusPointEntity;
+import cn.iocoder.yudao.module.iot.framework.gateway.entity.PageEntity;
+import cn.iocoder.yudao.module.iot.framework.gateway.entity.PageEntityByDecice;
+import cn.iocoder.yudao.module.iot.framework.gateway.service.IModbusPointService;
+import cn.iocoder.yudao.module.iot.framework.gateway.util.HttpUtils;
+import cn.iocoder.yudao.module.iot.framework.gateway.util.JsonUtils;
+import cn.iocoder.yudao.module.iot.framework.gateway.util.UrlConstans;
+import org.apache.http.client.ClientProtocolException;
+import org.apache.http.client.entity.UrlEncodedFormEntity;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.message.BasicNameValuePair;
+import org.apache.http.util.EntityUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
+
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.util.ArrayList;
+import java.util.List;
+
+import static cn.iocoder.yudao.module.iot.framework.gateway.util.HttpUtils.getHttpPost;
+
+
+/* 下发过程:
+ * 1.获取网关设备列表》获取设备(默认一个网关只连接一个设备)下的所有点位》删除所有点位》删除设备
+ * 2.构造网关设备》下发》获取网关设备列表》针对每个设备下发点位数据
+ * 3.下发topic数据
+ */
+@Service
+public class ModbusPointServiceImpl implements IModbusPointService {
+ private static final Logger log = LoggerFactory.getLogger(ModbusPointServiceImpl.class);
+ private String cookie;
+
+ //先登录
+ @Override
+ public void login(String url, String username, String password) {
+ // 创建 HttpClient 客户端
+ CloseableHttpClient httpClient = HttpUtils.createSSLClientDefault();
+ CloseableHttpResponse httpResponse = null;
+ try {
+ HttpPost httpPost = getHttpPost(url + UrlConstans.loginUrl, HttpEntity.getLoginParam(username, password));
+ httpResponse = httpClient.execute(httpPost);
+ log.debug(EntityUtils.toString(httpResponse.getEntity()));
+ this.cookie = HttpUtils.getCookies(httpResponse);
+ }
+ // 无论如何必须关闭连接
+ catch (IOException e) {
+ e.printStackTrace();
+ } finally {
+ HttpUtils.closeHttp(httpClient, httpResponse);
+ }
+ }
+
+ /*获取西门子设备列表*/
+ @Override
+ public List getModbusList(String address, String username, String password) {
+
+ PageEntity pageEntity = new PageEntity();
+ CloseableHttpClient httpClient = HttpUtils.createSSLClientDefault();
+ CloseableHttpResponse httpResponse = null;
+ List list = null;
+ try {
+ String getlistUrl = address + UrlConstans.modbus_list;
+ HttpPost httpPost = getHttpPost(getlistUrl, HttpEntity.getPageParam(pageEntity));//检索条件
+ login(getlistUrl, username, password);
+ httpPost.setHeader("Cookie", cookie);
+ httpResponse = httpClient.execute(httpPost);
+ String entityStr = EntityUtils.toString(httpResponse.getEntity());
+ list = JsonUtils.toDeviceModbusEntityList(entityStr);
+ }
+ // 无论如何必须关闭连接
+ catch (IOException e) {
+ e.printStackTrace();
+ } finally {
+ HttpUtils.closeHttp(httpClient, httpResponse);
+ }
+ return list;
+ }
+
+ /*获取指定设备编码Modbus设备*/
+ @Override
+ public List getModbusList(String address, String username, String password, String deviceId) {
+ PageEntityByDecice pageEntity = new PageEntityByDecice();
+ pageEntity.setDeviceID(deviceId);
+ CloseableHttpClient httpClient = HttpUtils.createSSLClientDefault();
+ CloseableHttpResponse httpResponse = null;
+ List list = null;
+ try {
+ String getlistUrl = address + UrlConstans.modbus_list;
+ HttpPost httpPost = getHttpPost(getlistUrl, HttpEntity.getPageParamVo(pageEntity));//检索条件
+ login(address, username, password);
+ httpPost.setHeader("Cookie", cookie);
+ httpResponse = httpClient.execute(httpPost);
+ String entityStr = EntityUtils.toString(httpResponse.getEntity());
+ list = JsonUtils.toDeviceModbusEntityList(entityStr);
+ }
+ // 无论如何必须关闭连接
+ catch (IOException e) {
+ e.printStackTrace();
+ } finally {
+ HttpUtils.closeHttp(httpClient, httpResponse);
+ }
+ return list;
+ }
+
+
+ @Override
+ public int add(DeviceModbusEntity deviceModbusEntity, String address) {
+ CloseableHttpClient httpClient = HttpUtils.createSSLClientDefault();
+ CloseableHttpResponse httpResponse = null;
+ HttpPost httpPost = null;
+ try {
+ if (deviceModbusEntity.getDeviceConfigID() != null) {
+ httpPost = getHttpPost(address + UrlConstans.modbus_edit, HttpEntity.getParam(deviceModbusEntity));
+ } else {
+ httpPost = getHttpPost(address + UrlConstans.modbus_add, HttpEntity.getParam(deviceModbusEntity));
+ }
+ httpPost.setHeader("Cookie", cookie);
+ httpResponse = httpClient.execute(httpPost);
+ System.err.println(EntityUtils.toString(httpResponse.getEntity()));
+ } catch (UnsupportedEncodingException e) {
+ e.printStackTrace();
+ return 1;
+ } catch (ClientProtocolException e) {
+ e.printStackTrace();
+ return 1;
+ } catch (IOException e) {
+ e.printStackTrace();
+ return 1;
+ } finally {
+ HttpUtils.closeHttp(httpClient, httpResponse);
+ }
+ return 0;
+ }
+
+ @Override
+ public int add(List list, String url) {
+ CloseableHttpClient httpClient = HttpUtils.createSSLClientDefault();
+ CloseableHttpResponse httpResponse = null;
+ HttpPost httpPost = null;
+ try {
+ httpPost = getHttpPost(url + UrlConstans.modbus_add, null);
+ httpPost.setHeader("Cookie", cookie);
+ for (DeviceModbusEntity entity : list) {
+ List pairList = HttpEntity.getParam(entity);
+ if (pairList != null) {
+ List params = new ArrayList(pairList);
+ // 设置 HttpPost 参数
+ httpPost.setEntity(new UrlEncodedFormEntity(params, "UTF-8"));
+ }
+ httpResponse = httpClient.execute(httpPost);
+ log.debug(EntityUtils.toString(httpResponse.getEntity()));
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ return 1;
+ } finally {
+ HttpUtils.closeHttp(httpClient, httpResponse);
+ }
+ return 0;
+ }
+
+ @Override
+ public int delete(String address, String ids) {
+ CloseableHttpClient httpClient = HttpUtils.createSSLClientDefault();
+ CloseableHttpResponse httpResponse = null;
+ HttpPost httpPost = null;
+ try {
+ httpPost = getHttpPost(address + UrlConstans.siemens_remove, HttpEntity.getRemoveParam(ids));//网关上设备的id
+ httpPost.setHeader("Cookie", cookie);
+ httpResponse = httpClient.execute(httpPost);
+ log.debug(EntityUtils.toString(httpResponse.getEntity()));
+ } catch (IOException e) {
+ e.printStackTrace();
+ } finally {
+ HttpUtils.closeHttp(httpClient, httpResponse);
+ }
+ return 0;
+ }
+
+ @Override
+ public int changeStatus(ChangeStatus changeStatus, String address) {
+ CloseableHttpClient httpClient = HttpUtils.createSSLClientDefault();
+ CloseableHttpResponse httpResponse = null;
+ HttpPost httpPost = null;
+ try {
+ httpPost = getHttpPost(address + UrlConstans.siemens_changestatus, HttpEntity.getChangestatus(changeStatus));
+ httpPost.setHeader("Cookie", cookie);
+ httpResponse = httpClient.execute(httpPost);
+ System.err.println("启用" + httpResponse.getEntity());
+ } catch (UnsupportedEncodingException e) {
+ e.printStackTrace();
+ } catch (ClientProtocolException e) {
+ e.printStackTrace();
+ } catch (IOException e) {
+ e.printStackTrace();
+ } finally {
+ HttpUtils.closeHttp(httpClient, httpResponse);
+ }
+ return 0;
+ }
+
+ @Override
+ public List getPointList(String address, String username, String password, String deviceConfigID) {
+ CloseableHttpClient httpClient = HttpUtils.createSSLClientDefault();
+ CloseableHttpResponse httpResponse = null;
+ List list = new ArrayList<>();
+ try {
+ /**
+ * TODO deviceSiemensEntity.getDeviceConfigID()
+ * */
+ String getlistUrl = address + UrlConstans.modbus_iopoint_list + deviceConfigID;
+ HttpPost httpPost = getHttpPost(getlistUrl, null);
+ httpPost.setHeader("Cookie", cookie);
+ httpResponse = httpClient.execute(httpPost);
+ String entityStr = EntityUtils.toString(httpResponse.getEntity());
+ list = JsonUtils.toModbusPointEntityList(entityStr);
+ }
+ // 无论如何必须关闭连接
+ catch (IOException e) {
+ e.printStackTrace();
+ } finally {
+ HttpUtils.closeHttp(httpClient, httpResponse);
+ }
+ return list;
+ }
+
+ @Override
+ public int add(ModbusPointEntity point, String address, String deviceConfigID) {
+ CloseableHttpClient httpClient = HttpUtils.createSSLClientDefault();
+ CloseableHttpResponse httpResponse = null;
+ HttpPost httpPost = null;
+ try {
+ //https://71220220500200002.ng.xjzyun.com/device/config/siemens/content/add/r/0/82
+ httpPost = getHttpPost(address + UrlConstans.modbus_iopoint_add_r + deviceConfigID, HttpEntity.getParam(point));
+ httpPost.setHeader("Cookie", cookie);
+ httpResponse = httpClient.execute(httpPost);
+ System.err.println(EntityUtils.toString(httpResponse.getEntity()));
+ } catch (Exception e) {
+ e.printStackTrace();
+ } finally {
+ HttpUtils.closeHttp(httpClient, httpResponse);
+ }
+ return 0;
+ }
+
+ @Override
+ public int add(List list, String address, String deviceConfigID) {
+ CloseableHttpClient httpClient = HttpUtils.createSSLClientDefault();
+ CloseableHttpResponse httpResponse = null;
+ HttpPost httpPost = null;
+ try {
+ //https://71220220500200002.ng.xjzyun.com/device/config/siemens/content/add/r/0/82
+ httpPost = getHttpPost(address + UrlConstans.modbus_iopoint_add_r + deviceConfigID, null);
+ httpPost.setHeader("Cookie", cookie);
+ for (ModbusPointEntity entity : list) {
+ List pairList = HttpEntity.getParam(entity);
+ if (pairList != null) {
+ List params = new ArrayList(pairList);
+ // 设置 HttpPost 参数
+ httpPost.setEntity(new UrlEncodedFormEntity(params, "UTF-8"));
+ }
+
+ httpResponse = httpClient.execute(httpPost);
+ ////{"code":500,"msg":"缩放因子必须是有效的正小数"}
+ log.debug(EntityUtils.toString(httpResponse.getEntity()));
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ } finally {
+ HttpUtils.closeHttp(httpClient, httpResponse);
+ }
+ return 0;
+ }
+
+ @Override
+ public int deletePoint(String address, String ids) {
+ CloseableHttpClient httpClient = HttpUtils.createSSLClientDefault();
+ CloseableHttpResponse httpResponse = null;
+ try {
+ HttpPost httpPost = getHttpPost(address + UrlConstans.modbus_iopoint_remove, HttpEntity.getRemoveParam(ids));
+ httpPost.setHeader("Cookie", cookie);
+ httpResponse = httpClient.execute(httpPost);
+ } catch (IOException e) {
+ e.printStackTrace();
+ } finally {
+ HttpUtils.closeHttp(httpClient, httpResponse);
+ }
+ return 0;
+ }
+
+ @Override
+ public Integer getPointListByCount(String url, String username, String password, String deviceConfigID) {
+ CloseableHttpClient httpClient = HttpUtils.createSSLClientDefault();
+ CloseableHttpResponse httpResponse = null;
+ Integer count = 0;
+ try {
+ /**
+ * TODO deviceSiemensEntity.getDeviceConfigID()
+ * */
+ String getlistUrl = url + UrlConstans.modbus_iopoint_list + deviceConfigID;
+ HttpPost httpPost = getHttpPost(getlistUrl, null);
+ httpPost.setHeader("Cookie", cookie);
+ httpResponse = httpClient.execute(httpPost);
+
+ String entityStr = EntityUtils.toString(httpResponse.getEntity());
+ count = Integer.parseInt(JsonUtils.toPointEntity(entityStr).getTotal());
+ }
+ // 无论如何必须关闭连接
+ catch (IOException e) {
+ e.printStackTrace();
+ } finally {
+ HttpUtils.closeHttp(httpClient, httpResponse);
+ }
+ return count;
+ }
+
+ @Override
+ public List getPointListAll(String address, String username, String password, String deviceConfigID) {
+ CloseableHttpClient httpClient = HttpUtils.createSSLClientDefault();
+ CloseableHttpResponse httpResponse = null;
+ List list = new ArrayList<>();
+ try {
+ /**
+ * TODO deviceSiemensEntity.getDeviceConfigID()
+ * */
+ String getlistUrl = address + UrlConstans.modbus_iopoint_list + deviceConfigID;
+ HttpPost httpPost = getHttpPost(getlistUrl, null);
+ httpPost.setHeader("Cookie", cookie);
+ httpResponse = httpClient.execute(httpPost);
+ String entityStrTotal = EntityUtils.toString(httpResponse.getEntity());
+ String total = JsonUtils.toModbusPointEntityTotal(entityStrTotal);
+
+ PageEntity pageEntity = new PageEntity();
+ pageEntity.setPageNum("1");
+ pageEntity.setPageSize(total);
+ List pageParam = HttpEntity.getPageParam(pageEntity);
+ httpPost.setEntity(new UrlEncodedFormEntity(pageParam, "UTF-8"));
+ httpResponse = httpClient.execute(httpPost);
+ String entityStr = EntityUtils.toString(httpResponse.getEntity());
+ list = JsonUtils.toModbusPointEntityList(entityStr);
+ }
+ // 无论如何必须关闭连接
+ catch (IOException e) {
+ e.printStackTrace();
+ } finally {
+ HttpUtils.closeHttp(httpClient, httpResponse);
+ }
+ return list;
+ }
+}
diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/gateway/service/impl/SiemensPointServiceImpl.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/gateway/service/impl/SiemensPointServiceImpl.java
new file mode 100644
index 0000000000..811d1928b3
--- /dev/null
+++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/gateway/service/impl/SiemensPointServiceImpl.java
@@ -0,0 +1,398 @@
+package cn.iocoder.yudao.module.iot.framework.gateway.service.impl;
+
+
+import cn.iocoder.yudao.module.iot.framework.gateway.bo.ChangeStatus;
+import cn.iocoder.yudao.module.iot.framework.gateway.bo.HttpEntity;
+import cn.iocoder.yudao.module.iot.framework.gateway.entity.DeviceSiemensEntity;
+import cn.iocoder.yudao.module.iot.framework.gateway.entity.PageEntity;
+import cn.iocoder.yudao.module.iot.framework.gateway.entity.PageEntityByDecice;
+import cn.iocoder.yudao.module.iot.framework.gateway.entity.SiemensPointEntity;
+import cn.iocoder.yudao.module.iot.framework.gateway.service.ISiemensPointService;
+import cn.iocoder.yudao.module.iot.framework.gateway.util.HttpUtils;
+import cn.iocoder.yudao.module.iot.framework.gateway.util.JsonUtils;
+import cn.iocoder.yudao.module.iot.framework.gateway.util.UrlConstans;
+import org.apache.http.client.entity.UrlEncodedFormEntity;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.message.BasicNameValuePair;
+import org.apache.http.util.EntityUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+
+import static cn.iocoder.yudao.module.iot.framework.gateway.util.HttpUtils.getHttpPost;
+
+
+/**
+ * 下发过程:
+ * 1.获取网关设备列表》获取设备(默认一个网关只连接一个设备)下的所有点位》删除所有点位》删除设备
+ * 2.构造网关设备》下发》获取网关设备列表》针对每个设备下发点位数据
+ * 3.下发topic数据
+ */
+@Service
+public class SiemensPointServiceImpl implements ISiemensPointService {
+ private static final Logger log = LoggerFactory.getLogger(SiemensPointServiceImpl.class);
+ private String cookie;
+ //先登录
+ @Override
+ public String login(String url ,String username ,String password){
+ // 创建 HttpClient 客户端
+ CloseableHttpClient httpClient = HttpUtils.createSSLClientDefault();
+ CloseableHttpResponse httpResponse = null;
+ try {
+ HttpPost httpPost = getHttpPost(url + UrlConstans.loginUrl, HttpEntity.getLoginParam(username,password));
+ httpResponse = httpClient.execute(httpPost);
+ this.cookie = HttpUtils.getCookies(httpResponse);
+ }
+ // 无论如何必须关闭连接
+ catch (IOException e) {
+ e.printStackTrace();
+ } finally {
+ HttpUtils.closeHttp(httpClient, httpResponse);
+ }
+ return cookie;
+ }
+
+
+ public HashMap getDate(SiemensPointEntity point) {
+ HashMap map = new HashMap<>();
+ map.put("siemensFieldName", point.getSiemensFieldName());
+ map.put("siemensFieldAddress", point.getSiemensFieldAddress());
+ map.put("siemensFieldDataType", point.getSiemensFieldDataType());
+ map.put("siemensFieldPrecision", point.getSiemensFieldPrecision());
+ map.put("siemensFieldUnit", point.getSiemensFieldUnit());
+ return map;
+ }
+
+ /*获取西门子设备列表*/
+ @Override
+ public List getSiemensList(String url , String username , String password) {
+ PageEntity pageEntity = new PageEntity();
+ // 创建 HttpClient 客户端
+ CloseableHttpClient httpClient = HttpUtils.createSSLClientDefault();
+ CloseableHttpResponse httpResponse = null;
+ List list = null;
+ try {
+ String getlistUrl = url + UrlConstans.siemens_list;
+ HttpPost httpPost = getHttpPost(getlistUrl, HttpEntity.getPageParam(pageEntity));//检索条件
+ login(url, username, password);
+ httpPost.setHeader("Cookie", cookie);
+ httpResponse = httpClient.execute(httpPost);
+ if (httpResponse.getEntity() != null) {
+ String entityStr = EntityUtils.toString(httpResponse.getEntity());
+ list = JsonUtils.toDeviceSiemensEntityList(entityStr);
+ }
+ }
+ // 无论如何必须关闭连接
+ catch (IOException e) {
+ e.printStackTrace();
+ } finally {
+ HttpUtils.closeHttp(httpClient, httpResponse);
+ }
+ return list;
+ }
+ /*获取西门子设备列表*/
+ @Override
+ public List getSiemensList(String url , String username , String password,String deviceId) {
+ PageEntityByDecice pageEntity = new PageEntityByDecice();
+ pageEntity.setDeviceID(deviceId);
+ // 创建 HttpClient 客户端
+ CloseableHttpClient httpClient = HttpUtils.createSSLClientDefault();
+ CloseableHttpResponse httpResponse = null;
+ List list = null;
+ try {
+ String getlistUrl = url + UrlConstans.siemens_list;
+ HttpPost httpPost = getHttpPost(getlistUrl, HttpEntity.getPageParamVo(pageEntity));//检索条件
+ login(url, username, password);
+ httpPost.setHeader("Cookie", cookie);
+ httpResponse = httpClient.execute(httpPost);
+ if (httpResponse.getEntity() != null) {
+ String entityStr = EntityUtils.toString(httpResponse.getEntity());
+ list = JsonUtils.toDeviceSiemensEntityList(entityStr);
+ }
+ }
+ // 无论如何必须关闭连接
+ catch (IOException e) {
+ e.printStackTrace();
+ } finally {
+ HttpUtils.closeHttp(httpClient, httpResponse);
+ }
+ return list;
+ }
+
+
+ @Override
+ public int add(DeviceSiemensEntity deviceSiemensEntity, String url) {
+ CloseableHttpClient httpClient = HttpUtils.createSSLClientDefault();
+ CloseableHttpResponse httpResponse = null;
+ HttpPost httpPost = null;
+
+ try {
+ httpPost = getHttpPost(url + UrlConstans.siemens_add, HttpEntity.getParam(deviceSiemensEntity));
+ httpPost.setHeader("Cookie", cookie);
+ httpResponse = httpClient.execute(httpPost);
+ System.err.println(EntityUtils.toString(httpResponse.getEntity()));
+ } catch (IOException e) {
+ e.printStackTrace();
+ return 1;
+ } finally {
+ HttpUtils.closeHttp(httpClient, httpResponse);
+ }
+ return 0;
+ }
+
+ @Override
+ public int add(List list, String url) {
+ CloseableHttpClient httpClient = HttpUtils.createSSLClientDefault();
+ CloseableHttpResponse httpResponse = null;
+ HttpPost httpPost = null;
+
+ try {
+ httpPost = getHttpPost(url + UrlConstans.siemens_add, null);
+ httpPost.setHeader("Cookie", cookie);
+ for (DeviceSiemensEntity entity: list) {
+ List pairList = HttpEntity.getParam(entity);
+ if (pairList != null) {
+ List params = new ArrayList(pairList);
+ // 设置 HttpPost 参数
+ httpPost.setEntity(new UrlEncodedFormEntity(params, "UTF-8"));
+ }
+ httpResponse = httpClient.execute(httpPost);
+ log.debug(EntityUtils.toString(httpResponse.getEntity()));
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ return 1;
+ } finally {
+ HttpUtils.closeHttp(httpClient, httpResponse);
+ }
+ return 0;
+ }
+
+
+ @Override
+ public int delete(String url, String ids) {
+ CloseableHttpClient httpClient = HttpUtils.createSSLClientDefault();
+ CloseableHttpResponse httpResponse = null;
+ HttpPost httpPost = null;
+ try {
+ httpPost = getHttpPost(url + UrlConstans.siemens_remove, HttpEntity.getRemoveParam(ids));//网关上设备的id
+ httpPost.setHeader("Cookie", cookie);
+ httpResponse = httpClient.execute(httpPost);
+ } catch (IOException e) {
+ e.printStackTrace();
+ } finally {
+ HttpUtils.closeHttp(httpClient, httpResponse);
+ }
+ return 0;
+ }
+
+ @Override
+ public int changeStatus(ChangeStatus changeStatus, String url) {
+ CloseableHttpClient httpClient = HttpUtils.createSSLClientDefault();
+ CloseableHttpResponse httpResponse = null;
+ HttpPost httpPost = null;
+ try {
+ httpPost = getHttpPost(url + UrlConstans.siemens_changestatus, HttpEntity.getChangestatus(changeStatus));
+ httpPost.setHeader("Cookie", cookie);
+ httpResponse = httpClient.execute(httpPost);
+ } catch (IOException e) {
+ e.printStackTrace();
+ } finally {
+ HttpUtils.closeHttp(httpClient, httpResponse);
+ }
+ return 0;
+ }
+
+
+
+ @Override
+ public List getPointList(String url, String deviceConfigID,String username ,String password) {
+ CloseableHttpClient httpClient = HttpUtils.createSSLClientDefault();
+ CloseableHttpResponse httpResponse = null;
+ List list = new ArrayList<>();
+ try {
+ String getlistUrl = url + UrlConstans.siemens_iopoint_list_r +
+ deviceConfigID;
+ HttpPost httpPost = getHttpPost(getlistUrl, null);
+ httpPost.setHeader("Cookie", cookie);
+ httpResponse = httpClient.execute(httpPost);
+
+ String entityStr = EntityUtils.toString(httpResponse.getEntity());
+ list = JsonUtils.toSiemensPointEntityList(entityStr);
+ }
+ // 无论如何必须关闭连接
+ catch (IOException e) {
+ e.printStackTrace();
+ } finally {
+ HttpUtils.closeHttp(httpClient, httpResponse);
+ }
+ return list;
+ }
+
+ @Override
+ public int add(SiemensPointEntity point, String url, String deviceConfigID) {
+ CloseableHttpClient httpClient = HttpUtils.createSSLClientDefault();
+ CloseableHttpResponse httpResponse = null;
+ HttpPost httpPost = null;
+ try {
+ httpPost = getHttpPost(url + UrlConstans.siemens_iopoint_edit_r+deviceConfigID, HttpEntity.getParam(point));
+ httpPost.setHeader("Cookie", cookie);
+ httpResponse = httpClient.execute(httpPost);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ finally {
+ HttpUtils.closeHttp(httpClient, httpResponse);
+ }
+ return 0;
+ }
+ @Override
+ public int add(List list, String url, String deviceConfigID) {
+ CloseableHttpClient httpClient = HttpUtils.createSSLClientDefault();
+ CloseableHttpResponse httpResponse = null;
+ HttpPost httpPost = null;
+ try {
+ httpPost = getHttpPost(url + UrlConstans.siemens_iopoint_add_r+deviceConfigID, null);
+ httpPost.setHeader("Cookie", cookie);
+ for (SiemensPointEntity entity: list) {
+ if(entity.getSiemensFieldDataType()==null)continue;
+ List pairList = HttpEntity.getParam(entity);
+ if (pairList != null) {
+ List params = new ArrayList(pairList);
+ // 设置 HttpPost 参数
+ httpPost.setEntity(new UrlEncodedFormEntity(params, "UTF-8"));
+ }
+ httpResponse = httpClient.execute(httpPost);
+ log.debug(EntityUtils.toString(httpResponse.getEntity()));
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ finally {
+ HttpUtils.closeHttp(httpClient, httpResponse);
+ }
+ return 0;
+ }
+
+ @Override
+ public int edit(SiemensPointEntity point, String url) {
+ CloseableHttpClient httpClient = HttpUtils.createSSLClientDefault();
+ CloseableHttpResponse httpResponse = null;
+ HttpPost httpPost = null;
+ try {
+ httpPost = getHttpPost(url + UrlConstans.siemens_iopoint_edit_r, HttpEntity.getParam(point));
+ httpPost.setHeader("Cookie", cookie);
+ httpResponse = httpClient.execute(httpPost);
+ } catch (IOException e) {
+ e.printStackTrace();
+ } finally {
+ HttpUtils.closeHttp(httpClient, httpResponse);
+ }
+ return 0;
+ }
+
+ @Override
+ public int deletePoint( String url, String ids) {
+ CloseableHttpClient httpClient = HttpUtils.createSSLClientDefault();
+ CloseableHttpResponse httpResponse = null;
+ HttpPost httpPost = null;
+ try {
+ httpPost = getHttpPost(url + UrlConstans.siemens_iopoint_remove_r, HttpEntity.getRemoveParam(ids));
+ httpPost.setHeader("Cookie", cookie);
+ httpResponse = httpClient.execute(httpPost);
+ } catch (IOException e) {
+ e.printStackTrace();
+ } finally {
+ HttpUtils.closeHttp(httpClient, httpResponse);
+ }
+ return 0;
+ }
+
+ @Override
+ public int changeStatusDevice(ListdeviceIds,ChangeStatus changeStatus, String url) {
+ CloseableHttpClient httpClient = HttpUtils.createSSLClientDefault();
+ CloseableHttpResponse httpResponse = null;
+ try {
+ HttpPost httpPost = getHttpPost(url + UrlConstans.siemens_changestatus, null);
+ httpPost.setHeader("Cookie", cookie);
+ for (String id: deviceIds) {
+ changeStatus.setChangesStatusID(id);
+ List pairList = HttpEntity.getChangestatus(changeStatus);
+ if (pairList != null) {
+ List params = new ArrayList(pairList);
+ // 设置 HttpPost 参数
+ httpPost.setEntity(new UrlEncodedFormEntity(params, "UTF-8"));
+ }
+ httpResponse = httpClient.execute(httpPost);
+ log.debug(EntityUtils.toString(httpResponse.getEntity()));
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ } finally {
+ HttpUtils.closeHttp(httpClient, httpResponse);
+ }
+ return 0;
+ }
+
+ @Override
+ public Integer getPointListByCount(String url, String deviceConfigID, String username, String password) {
+ CloseableHttpClient httpClient = HttpUtils.createSSLClientDefault();
+ CloseableHttpResponse httpResponse = null;
+ Integer count = 0;
+ try {
+ String getlistUrl = url + UrlConstans.siemens_iopoint_list_r +
+ deviceConfigID;
+ HttpPost httpPost = getHttpPost(getlistUrl, null);
+ httpPost.setHeader("Cookie", cookie);
+ httpResponse = httpClient.execute(httpPost);
+ String entityStr = EntityUtils.toString(httpResponse.getEntity());
+ count = Integer.parseInt(JsonUtils.toPointEntity(entityStr).getTotal());
+ }
+ // 无论如何必须关闭连接
+ catch (IOException e) {
+ e.printStackTrace();
+ } finally {
+ HttpUtils.closeHttp(httpClient, httpResponse);
+ }
+ return count;
+ }
+ @Override
+ public List getPointListAll(String url, String deviceConfigID,String username ,String password) {
+ CloseableHttpClient httpClient = HttpUtils.createSSLClientDefault();
+ CloseableHttpResponse httpResponse = null;
+ List list = new ArrayList<>();
+ try {
+ String getlistUrl = url + UrlConstans.siemens_iopoint_list_r +
+ deviceConfigID;
+ HttpPost httpPost = getHttpPost(getlistUrl, null);
+ httpPost.setHeader("Cookie", cookie);
+ httpResponse = httpClient.execute(httpPost);
+
+ String entityStrTotal = EntityUtils.toString(httpResponse.getEntity());
+ String total = JsonUtils.toSiemensPointEntityTotal(entityStrTotal);
+
+ PageEntity pageEntity = new PageEntity();
+ pageEntity.setPageNum("1");
+ pageEntity.setPageSize(total);
+ List pageParam = HttpEntity.getPageParam(pageEntity);
+ httpPost.setEntity(new UrlEncodedFormEntity(pageParam, "UTF-8"));
+ httpResponse = httpClient.execute(httpPost);
+ String entityStr = EntityUtils.toString(httpResponse.getEntity());
+ list = JsonUtils.toSiemensPointEntityList(entityStr);
+ }
+ // 无论如何必须关闭连接
+ catch (IOException e) {
+ e.printStackTrace();
+ } finally {
+ HttpUtils.closeHttp(httpClient, httpResponse);
+ }
+ return list;
+ }
+}
diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/gateway/service/impl/TheGatewayServiceImpl.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/gateway/service/impl/TheGatewayServiceImpl.java
new file mode 100644
index 0000000000..be97f5accc
--- /dev/null
+++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/gateway/service/impl/TheGatewayServiceImpl.java
@@ -0,0 +1,549 @@
+package cn.iocoder.yudao.module.iot.framework.gateway.service.impl;
+
+
+import cn.iocoder.yudao.framework.common.pojo.CommonResult;
+import cn.iocoder.yudao.module.iot.dal.dataobject.device.DeviceDO;
+import cn.iocoder.yudao.module.iot.dal.dataobject.gateway.GatewayDO;
+import cn.iocoder.yudao.module.iot.framework.gateway.bo.HttpEntity;
+import cn.iocoder.yudao.module.iot.framework.gateway.entity.DeviceVideoEntity;
+import cn.iocoder.yudao.module.iot.framework.gateway.util.HttpUtils;
+import cn.iocoder.yudao.module.iot.framework.gateway.util.UrlConstans;
+import cn.iocoder.yudao.module.iot.service.gateway.GatewayService;
+import com.alibaba.fastjson.JSON;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.util.EntityUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+
+@Service
+public class TheGatewayServiceImpl {
+ @Autowired
+ private IBeEquipmentsSiemensService beEquipmentsSiemensService;
+ @Autowired
+ private IIoPointService ioPointService;
+ @Autowired
+ private IVideoService videoService;
+ @Autowired
+ private ISiemensPointService siemensPointService;
+ @Autowired
+ private IMqttService mqttService;
+ @Autowired
+ private GatewayService gatewayService;
+
+ //清除原本的西门子设备和点位数据
+// public void deleteSiemensEntity(BeEquipments equipments) {
+// siemensPointService.login(equipments.getAdminIp(), equipments.getUsername(), equipments.getPassword());
+// List list = siemensPointService.getSiemensList(equipments.getAdminIp(),
+// equipments.getUsername(), equipments.getPassword());
+// if (null != list && list.size() > 0) {
+// //先清除点位数据
+// String[] deviceIds = new String[list.size()];
+// for (int i = 0; i < list.size(); i++) {
+// deviceIds[i] = list.get(i).getDeviceConfigID();
+// //删除每个设备下的原有点位
+// List pointList = siemensPointService.getPointList(equipments.getAdminIp(),
+// list.get(i).getDeviceConfigID(), equipments.getUsername(), equipments.getPassword());
+// if (pointList != null && pointList.size() > 0) {
+// String[] addressIds = new String[pointList.size()];
+// for (int j = 0; j < pointList.size(); j++) {
+// addressIds[j] = pointList.get(j).getDeviceConfigContentID().toString();
+// }
+// //删除点位
+// siemensPointService.deletePoint(equipments.getAdminIp(), String.join(",", addressIds));
+// }
+// }
+// //再清除设备数据
+// siemensPointService.delete(equipments.getAdminIp(), String.join(",", deviceIds));
+// }
+// }
+
+ //清除指定原本的西门子设备和点位数据
+ public void deleteSiemensEntity(GatewayDO gatewayDO, String deviceCode) {
+ siemensPointService.login(gatewaysMessage.getAdminIp(), gatewaysMessage.getUsername(), gatewaysMessage.getPassword());
+ List list = siemensPointService.getSiemensList(gatewaysMessage.getAdminIp(),
+ gatewaysMessage.getUsername(), gatewaysMessage.getPassword(), deviceId);
+ if (null != list && list.size() > 0) {
+ //先清除点位数据
+ String[] deviceIds = new String[list.size()];
+ for (int i = 0; i < list.size(); i++) {
+ deviceIds[i] = list.get(i).getDeviceConfigID();
+ //删除每个设备下的原有点位
+ List pointList = siemensPointService.getPointListAll(gatewaysMessage.getAdminIp(),
+ list.get(i).getDeviceConfigID(), gatewaysMessage.getUsername(), gatewaysMessage.getPassword());
+ if (pointList != null && pointList.size() > 0) {
+ String[] addressIds = new String[pointList.size()];
+ for (int j = 0; j < pointList.size(); j++) {
+ addressIds[j] = pointList.get(j).getDeviceConfigContentID().toString();
+ }
+ //删除点位
+ siemensPointService.deletePoint(gatewaysMessage.getAdminIp(), String.join(",", addressIds));
+ }
+ }
+ //再清除设备数据
+ siemensPointService.delete(gatewaysMessage.getAdminIp(), String.join(",", deviceIds));
+ }
+ }
+
+ //查询西门子设备列表 并新增
+// public void addSiemensEntity(BeEquipments equipments) {
+// siemensPointService.login(equipments.getAdminIp(), equipments.getUsername(), equipments.getPassword());
+// //根据机台编号查询设备
+// BeEquipmentsSiemens bo = new BeEquipmentsSiemens();
+// bo.setEquipmentsId(equipments.getEquipmentsId());
+// List siemens = beEquipmentsSiemensService.list(beEquipmentsSiemensService.buildQueryWrapper(bo));
+// if (siemens != null && siemens.size() > 0) {
+// List list = new ArrayList<>();
+// for (BeEquipmentsSiemens siemen : siemens) {
+// DeviceSiemensEntity deviceSiemensEntity = new DeviceSiemensEntity();
+// deviceSiemensEntity.setDeviceID(siemen.getDeviceId());
+// deviceSiemensEntity.setDeviceName(siemen.getDeviceName());
+// deviceSiemensEntity.setSiemensSeries(siemen.getSiemensSeries());
+// deviceSiemensEntity.setSiemensConnectParam(siemen.getSiemensConnectParam());
+// deviceSiemensEntity.setReadCronType(siemen.getReadCronType());
+// deviceSiemensEntity.setReadRepeatValue(siemen.getReadRepeatValue());
+// deviceSiemensEntity.setReadRepeatUnit(siemen.getReadRepeatUnit());
+// deviceSiemensEntity.setReadCron(siemen.getReadCron());
+// deviceSiemensEntity.setWriteCronType(siemen.getWriteCronType());
+// deviceSiemensEntity.setWriteRepeatValue(siemen.getWriteRepeatValue());
+// deviceSiemensEntity.setWriteCron(siemen.getWriteCron());
+// deviceSiemensEntity.setLocalPersistent(siemen.getLocalPersistent());
+// deviceSiemensEntity.setUploadRate(siemen.getUploadRate());
+// deviceSiemensEntity.setRateCount(siemen.getRateCount());
+// list.add(deviceSiemensEntity);
+// }
+// if (list.size() > 0) siemensPointService.add(list, equipments.getAdminIp());
+// }
+// }
+
+ //新增西门子设备
+ public void addSiemensEntity(GatewayDO gatewaysMessage, DeviceDO siemens) {
+ siemensPointService.login(gatewaysMessage.getAdminIp(), gatewaysMessage.getUsername(), gatewaysMessage.getPassword());
+ DeviceSiemensEntity deviceSiemensEntity = new DeviceSiemensEntity();
+ deviceSiemensEntity.setDeviceID(siemen.getDeviceId());
+ deviceSiemensEntity.setDeviceName(siemen.getDeviceName());
+ deviceSiemensEntity.setSiemensSeries(siemen.getSiemensSeries());
+ deviceSiemensEntity.setSiemensConnectParam(siemen.getSiemensConnectParam());
+ deviceSiemensEntity.setReadCronType(siemen.getReadCronType());
+ deviceSiemensEntity.setReadRepeatValue(siemen.getReadRepeatValue());
+ deviceSiemensEntity.setReadRepeatUnit(siemen.getReadRepeatUnit());
+ deviceSiemensEntity.setReadCron(siemen.getReadCron());
+ deviceSiemensEntity.setWriteCronType(siemen.getWriteCronType());
+ deviceSiemensEntity.setWriteRepeatValue(siemen.getWriteRepeatValue());
+ deviceSiemensEntity.setWriteCron(siemen.getWriteCron());
+ deviceSiemensEntity.setLocalPersistent(siemen.getLocalPersistent());
+ deviceSiemensEntity.setUploadRate(siemen.getUploadRate());
+ deviceSiemensEntity.setRateCount(siemen.getRateCount());
+ siemensPointService.add(deviceSiemensEntity, gatewaysMessage.getAdminIp());
+
+ }
+
+
+ //下发完成西门子设备后 下发对应设备的点位
+ public void addDeviceSiemensEntity(BeGatewaysMessage gatewaysMessage,String equipmentsId, String deviceId) {
+ siemensPointService.login(gatewaysMessage.getAdminIp(), gatewaysMessage.getUsername(), gatewaysMessage.getPassword());
+ /*下发好设备后获取设备列表找点位*/
+ List siemensList = siemensPointService.getSiemensList(gatewaysMessage.getAdminIp(),
+ gatewaysMessage.getUsername(), gatewaysMessage.getPassword(), deviceId);
+ for (DeviceSiemensEntity deviceSiemensEntity : siemensList) {
+ //根据deviceId 和机台编码查询sql数据库点位信息
+ IoPoint bo = new IoPoint();
+ bo.setDeviceId(deviceSiemensEntity.getDeviceID());
+ bo.setEquipmentsId(equipmentsId);
+ //检索
+ List points = ioPointService.list(ioPointService.buildQueryWrapper(bo));
+ List list = new ArrayList<>();
+ for (IoPoint point : points) {
+ //新增点位
+ SiemensPointEntity siemensPointEntity = new SiemensPointEntity();
+ siemensPointEntity.setSiemensFieldName(point.getPointCode());
+ siemensPointEntity.setSiemensFieldAddress(point.getAddress());
+ Integer dataType = AddressDataType.getGatewayDataTypeMap(point.getDataType());
+ siemensPointEntity.setSiemensFieldDataType(dataType);
+ siemensPointEntity.setSiemensFieldPrecision(point.getSiemensFieldPrecision());
+ siemensPointEntity.setSiemensFieldUnit(point.getUnit());
+ list.add(siemensPointEntity);
+ }
+ if (list.size() > 0)
+ siemensPointService.add(list, gatewaysMessage.getAdminIp(), deviceSiemensEntity.getDeviceConfigID());
+ }
+ }
+
+ //下发完成西门子设备后 下发对应设备的点位
+ public void addDeviceSiemensEntity(BeEquipments equipments) {
+ siemensPointService.login(equipments.getAdminIp(), equipments.getUsername(), equipments.getPassword());
+ /*下发好设备后获取设备列表找点位*/
+ List siemensList = siemensPointService.getSiemensList(equipments.getAdminIp(),
+ equipments.getUsername(), equipments.getPassword());
+
+ for (DeviceSiemensEntity deviceSiemensEntity : siemensList) {
+ //根据deviceId 和机台编码查询sql数据库点位信息
+ IoPoint bo = new IoPoint();
+ bo.setDeviceId(deviceSiemensEntity.getDeviceID());
+ bo.setEquipmentsId(equipments.getEquipmentsId());
+ //检索
+ List points = ioPointService.list(ioPointService.buildQueryWrapper(bo));
+ List list = new ArrayList<>();
+ for (IoPoint point : points) {
+ //新增点位
+ SiemensPointEntity siemensPointEntity = new SiemensPointEntity();
+ siemensPointEntity.setSiemensFieldName(point.getPointCode());
+ siemensPointEntity.setSiemensFieldAddress(point.getAddress());
+ Integer dataType = AddressDataType.getGatewayDataTypeMap(point.getDataType());
+ siemensPointEntity.setSiemensFieldDataType(dataType);
+ siemensPointEntity.setSiemensFieldPrecision(point.getSiemensFieldPrecision());
+ siemensPointEntity.setSiemensFieldUnit(point.getUnit());
+ list.add(siemensPointEntity);
+ }
+ if (list.size() > 0)
+ siemensPointService.add(list, equipments.getAdminIp(), deviceSiemensEntity.getDeviceConfigID());
+ }
+ }
+
+ //清除原本的Modbus设备数据
+ public void deleteModbusEntity(BeEquipments equipments) {
+ modbusPointService.login(equipments.getAdminIp(), equipments.getUsername(), equipments.getPassword());
+ List list = modbusPointService.getModbusList(equipments.getAdminIp(), equipments.getUsername(), equipments.getPassword());
+ if (null != list && list.size() > 0) {
+ //先清除点位数据
+ String[] deviceIds = new String[list.size()];
+ for (int i = 0; i < list.size(); i++) {
+ deviceIds[i] = list.get(i).getDeviceConfigID();
+ //删除每个设备下的原有点位
+ List pointList = modbusPointService.getPointList(equipments.getAdminIp(),
+ equipments.getUsername(), equipments.getPassword(), list.get(i).getDeviceConfigID());
+ if (pointList != null && pointList.size() > 0) {
+ String[] addressIds = new String[pointList.size()];
+ for (int j = 0; j < pointList.size(); j++) {
+ addressIds[j] = pointList.get(j).getDeviceConfigContentID().toString();
+ }
+ //删除点位数据
+ modbusPointService.deletePoint(equipments.getAdminIp(), String.join(",", addressIds));
+ }
+ }
+ //再清除设备数据
+ modbusPointService.delete(equipments.getAdminIp(), String.join(",", deviceIds));
+ }
+ }
+
+ //清除原本的Modbus设备数据
+ public void deleteModbusEntity(BeGatewaysMessage gatewaysMessage, String deviceId) {
+ modbusPointService.login(gatewaysMessage.getAdminIp(), gatewaysMessage.getUsername(), gatewaysMessage.getPassword());
+ List list = modbusPointService.getModbusList(gatewaysMessage.getAdminIp(), gatewaysMessage.getUsername(), gatewaysMessage.getPassword(), deviceId);
+ if (null != list && list.size() > 0) {
+ //先清除点位数据
+ String[] deviceIds = new String[list.size()];
+ for (int i = 0; i < list.size(); i++) {
+ deviceIds[i] = list.get(i).getDeviceConfigID();
+ //删除每个设备下的原有点位
+ List pointList = modbusPointService.getPointListAll(gatewaysMessage.getAdminIp(),
+ gatewaysMessage.getUsername(), gatewaysMessage.getPassword(), list.get(i).getDeviceConfigID());
+ if (pointList != null && pointList.size() > 0) {
+ String[] addressIds = new String[pointList.size()];
+ for (int j = 0; j < pointList.size(); j++) {
+ addressIds[j] = pointList.get(j).getDeviceConfigContentID();
+ }
+ //删除点位数据
+ modbusPointService.deletePoint(gatewaysMessage.getAdminIp(), String.join(",", addressIds));
+ }
+ }
+ //再清除设备数据
+ modbusPointService.delete(gatewaysMessage.getAdminIp(), String.join(",", deviceIds));
+ }
+ }
+
+ public void addModbusEntity(BeEquipments equipments) {
+ modbusPointService.login(equipments.getAdminIp(), equipments.getUsername(), equipments.getPassword());
+ BeEquipmentsModbus bo = new BeEquipmentsModbus();
+ bo.setEquipmentsId(equipments.getEquipmentsId());
+ List modbuses = beEquipmentsModbusService.list(beEquipmentsModbusService.buildQueryWrapper(bo));
+ List list = new ArrayList<>();
+ if (modbuses != null && modbuses.size() > 0) {
+ for (BeEquipmentsModbus modbus : modbuses) {
+ DeviceModbusEntity deviceModbusEntity = new DeviceModbusEntity();
+ deviceModbusEntity.setEquipmentsId(modbus.getEquipmentsId());
+ deviceModbusEntity.setDeviceId(modbus.getDeviceId());
+ deviceModbusEntity.setDeviceName(modbus.getDeviceName());
+ deviceModbusEntity.setModbusProtocol(modbus.getModbusProtocol());
+ deviceModbusEntity.setModbusPattern(modbus.getModbusPattern());
+ deviceModbusEntity.setPortName(modbus.getPortName());
+ deviceModbusEntity.setModbusConnectParam(modbus.getModbusConnectParam());
+ deviceModbusEntity.setReadCronType(modbus.getReadCronType());
+ deviceModbusEntity.setReadRepeatValue(modbus.getReadRepeatValue());
+ deviceModbusEntity.setReadRepeatUnit(modbus.getReadRepeatUnit());
+ deviceModbusEntity.setReadCron(modbus.getReadCron());
+ deviceModbusEntity.setWriteCronType(modbus.getWriteCronType());
+ deviceModbusEntity.setWriteRepeatValue(modbus.getWriteRepeatValue());
+ deviceModbusEntity.setWriteRepeatUnit(modbus.getWriteRepeatUnit());
+ deviceModbusEntity.setWriteCron(modbus.getWriteCron());
+ deviceModbusEntity.setLocalPersistent(modbus.getLocalPersistent());
+ deviceModbusEntity.setUploadRate(modbus.getUploadRate());
+ deviceModbusEntity.setRateCount(modbus.getRateCount());
+ deviceModbusEntity.setModbusReadAddrGap(modbus.getModbusReadAddrGap());
+ list.add(deviceModbusEntity);
+ //mob 下发失败 {"code":500,"msg":"该串口已经配置"}
+ }
+ if (list.size() > 0) modbusPointService.add(list, equipments.getAdminIp());
+ }
+ }
+
+ public void addModbusEntity(BeGatewaysMessage gatewaysMessage, BeEquipmentsModbus modbus) {
+ DeviceModbusEntity deviceModbusEntity = new DeviceModbusEntity();
+ deviceModbusEntity.setEquipmentsId(modbus.getEquipmentsId());
+ deviceModbusEntity.setDeviceId(modbus.getDeviceId());
+ deviceModbusEntity.setDeviceName(modbus.getDeviceName());
+ deviceModbusEntity.setModbusProtocol(modbus.getModbusProtocol());
+ deviceModbusEntity.setModbusPattern(modbus.getModbusPattern());
+ deviceModbusEntity.setPortName(modbus.getPortName());
+ deviceModbusEntity.setModbusConnectParam(modbus.getModbusConnectParam());
+ deviceModbusEntity.setReadCronType(modbus.getReadCronType());
+ deviceModbusEntity.setReadRepeatValue(modbus.getReadRepeatValue());
+ deviceModbusEntity.setReadRepeatUnit(modbus.getReadRepeatUnit());
+ deviceModbusEntity.setReadCron(modbus.getReadCron());
+ deviceModbusEntity.setWriteCronType(modbus.getWriteCronType());
+ deviceModbusEntity.setWriteRepeatValue(modbus.getWriteRepeatValue());
+ deviceModbusEntity.setWriteRepeatUnit(modbus.getWriteRepeatUnit());
+ deviceModbusEntity.setWriteCron(modbus.getWriteCron());
+ deviceModbusEntity.setLocalPersistent(modbus.getLocalPersistent());
+ deviceModbusEntity.setUploadRate(modbus.getUploadRate());
+ deviceModbusEntity.setRateCount(modbus.getRateCount());
+ deviceModbusEntity.setModbusReadAddrGap(modbus.getModbusReadAddrGap());
+ //mob 下发失败 {"code":500,"msg":"该串口已经配置"}
+ modbusPointService.add(deviceModbusEntity, gatewaysMessage.getAdminIp());
+ }
+
+ public void addDeviceModbusEntity(BeEquipments equipments) {
+ modbusPointService.login(equipments.getAdminIp(), equipments.getUsername(), equipments.getPassword());
+ /*下发好设备后获取设备列表找点位*/
+ List modbusPointList = modbusPointService.getModbusList(equipments.getAdminIp(), equipments.getUsername(), equipments.getPassword());
+ for (DeviceModbusEntity deviceModbusEntity : modbusPointList) {
+ //根据deviceId 和机台编码查询sql数据库点位信息
+ IoPoint bo = new IoPoint();
+ bo.setDeviceId(deviceModbusEntity.getDeviceId());
+ bo.setEquipmentsId(equipments.getEquipmentsId());
+ List points = ioPointService.list(ioPointService.buildQueryWrapper(bo));
+ List list = new ArrayList<>();
+ for (IoPoint point : points) {
+ //新增点位
+ ModbusPointEntity modbusPointEntity = new ModbusPointEntity();
+ modbusPointEntity.setModbusSlaveID(point.getModbusSlaveId());
+ modbusPointEntity.setModbusFieldName(point.getPointName());
+ modbusPointEntity.setModbusFieldAddress(point.getModbusFieldAddress());
+ modbusPointEntity.setModbusAddressType(point.getModbusAddressType());
+ modbusPointEntity.setModbusFieldSize(point.getModbusFieldSize());
+ modbusPointEntity.setModbusFieldPrecision(point.getModbusFieldPrecision());
+ modbusPointEntity.setModbusFieldDataType(point.getDataType());
+ modbusPointEntity.setModbusFieldOrder(point.getModbusFieldOrder());
+ modbusPointEntity.setModbusFieldUnit(point.getUnit());
+ list.add(modbusPointEntity);
+ }
+ if (list.size() > 0)
+ modbusPointService.add(list, equipments.getAdminIp(), deviceModbusEntity.getDeviceConfigID());
+ }
+ }
+
+ public void addDeviceModbusEntity(BeGatewaysMessage gatewaysMessage,String equipmentsId, String deviceId) {
+ modbusPointService.login(gatewaysMessage.getAdminIp(), gatewaysMessage.getUsername(), gatewaysMessage.getPassword());
+ /*下发好设备后获取设备列表找点位*/
+ List modbusPointList = modbusPointService.getModbusList(gatewaysMessage.getAdminIp(), gatewaysMessage.getUsername(), gatewaysMessage.getPassword(), deviceId);
+ for (DeviceModbusEntity deviceModbusEntity : modbusPointList) {
+ //根据deviceId 和机台编码查询sql数据库点位信息
+ IoPoint bo = new IoPoint();
+ bo.setDeviceId(deviceModbusEntity.getDeviceId());
+ bo.setEquipmentsId(equipmentsId);
+ List points = ioPointService.list(ioPointService.buildQueryWrapper(bo));
+ List list = new ArrayList<>();
+ for (IoPoint point : points) {
+ //新增点位
+ ModbusPointEntity modbusPointEntity = new ModbusPointEntity();
+ modbusPointEntity.setModbusSlaveID(point.getModbusSlaveId());
+ modbusPointEntity.setModbusFieldName(point.getPointCode());
+ modbusPointEntity.setModbusFieldAddress(point.getModbusFieldAddress());
+ modbusPointEntity.setModbusAddressType(point.getModbusAddressType());
+ modbusPointEntity.setModbusFieldSize(point.getModbusFieldSize());
+ modbusPointEntity.setModbusFieldPrecision(point.getModbusFieldPrecision());
+ modbusPointEntity.setModbusFieldDataType(point.getDataType());
+ modbusPointEntity.setModbusFieldOrder(point.getModbusFieldOrder());
+ modbusPointEntity.setModbusFieldUnit(point.getUnit());
+ list.add(modbusPointEntity);
+ }
+ if (list.size() > 0)
+ modbusPointService.add(list, gatewaysMessage.getAdminIp(), deviceModbusEntity.getDeviceConfigID());
+ }
+ }
+
+ /**
+ * 下发mqtt主题
+ * 1拿到列表
+ * 2停用
+ * 3删除
+ * 4新增
+ * 5启用
+ */
+ public void deleteMqttEntity(BeEquipments equipments) {
+ //modbusPointService.login(equipments.getAdminIp(),equipments.getUsername(),equipments.getPassword());
+ List mqttBrokerEntity = mqttService.getMqttBrokerEntity(equipments.getAdminIp(),
+ equipments.getUsername(), equipments.getPassword());
+ for (MqttBrokerEntity brokerEntity : mqttBrokerEntity) {
+ mqttService.delete(equipments.getAdminIp(), brokerEntity.getCloudConfigID());
+ }
+ }
+
+ /***启用设备 */
+ public void changeStatus(BeGatewaysMessage gatewaysMessage, String deviceId, String type) {
+ List deviceIds = new ArrayList<>();
+ if (type.equals("modbus")) {
+ /*下发好设备后获取设备列表找点位*/
+ List modbusPointList = modbusPointService.getModbusList(gatewaysMessage.getAdminIp(),
+ gatewaysMessage.getUsername(), gatewaysMessage.getPassword(), deviceId);
+ for (DeviceModbusEntity entity : modbusPointList) {
+ deviceIds.add(entity.getDeviceConfigID());
+ }
+ }
+ if (type.equals("siemens")) {
+ /*下发好设备后获取设备列表找点位*/
+ List siemensList = siemensPointService.getSiemensList(gatewaysMessage.getAdminIp(),
+ gatewaysMessage.getUsername(), gatewaysMessage.getPassword(), deviceId);
+
+ for (DeviceSiemensEntity entity : siemensList) {
+ deviceIds.add(entity.getDeviceConfigID());
+ }
+ }
+ ChangeStatus changeStatus = new ChangeStatus();
+ changeStatus.setNewStatus("2");
+ changeStatus.setOldStatus("1");
+ siemensPointService.changeStatusDevice(deviceIds, changeStatus, gatewaysMessage.getAdminIp());
+ }
+
+ /***启用设备 */
+ public void changeStatus(BeEquipments equipments) {
+ /*下发好设备后获取设备列表找点位*/
+ List modbusPointList = modbusPointService.getModbusList(equipments.getAdminIp(),
+ equipments.getUsername(), equipments.getPassword());
+ /*下发好设备后获取设备列表找点位*/
+ List siemensList = siemensPointService.getSiemensList(equipments.getAdminIp(),
+ equipments.getUsername(), equipments.getPassword());
+ List deviceIds = new ArrayList<>();
+ for (DeviceModbusEntity entity : modbusPointList) {
+ deviceIds.add(entity.getDeviceConfigID());
+ }
+ for (DeviceSiemensEntity entity : siemensList) {
+ deviceIds.add(entity.getDeviceConfigID());
+ }
+ ChangeStatus changeStatus = new ChangeStatus();
+ changeStatus.setNewStatus("2");
+ changeStatus.setOldStatus("1");
+ siemensPointService.changeStatusDevice(deviceIds, changeStatus, equipments.getAdminIp());
+ }
+
+ public BeEquipments getEquipments(Integer gatewayMessageId) {
+ BeGatewaysMessage gatewaysMessage = gatewaysMessageService.getById(gatewayMessageId);
+ BeEquipments bo = new BeEquipments();
+ bo.setEquipmentsId(gatewaysMessage.getEquipmentId());
+ bo = equipmentsService.getOne(equipmentsService.buildQueryWrapper(bo));
+ return bo;
+ }
+
+
+ /*检测下发数据和实际下发数量是否匹配*/
+ public AjaxResult compare(String url, String username, String password, String deviceId, String equipmentId, String type) {
+ String deviceConfigID = null;
+ Integer pointList = 0;
+ if ("m".equals(type)) {
+ List modbusList = modbusPointService.getModbusList(url, username, password, deviceId);
+ if (modbusList != null && modbusList.size() > 0) {
+ deviceConfigID = modbusList.get(0).getDeviceConfigID();
+ }
+ pointList = modbusPointService.getPointListByCount(url, username, password, deviceConfigID);
+ } else {
+ List siemensList = siemensPointService.getSiemensList(url, username, password, deviceId);
+ if (siemensList != null && siemensList.size() > 0) {
+ deviceConfigID = siemensList.get(0).getDeviceConfigID();
+ }
+ pointList = siemensPointService.getPointListByCount(url, deviceConfigID, username, password);
+ }
+ //根据deviceId 和机台编码查询sql数据库点位信息
+ IoPoint bo = new IoPoint();
+ bo.setDeviceId(deviceId);
+ bo.setEquipmentsId(equipmentId);
+ List points = ioPointService.list(ioPointService.buildQueryWrapper(bo));
+ int size = points.size();
+ return size!=pointList?AjaxResult.error("下发失败!应下发" + points.size() + "个地址,实下发" + pointList + "个地址")
+ :AjaxResult.success("下发成功!应下发" + points.size() + "个地址,实下发" + pointList + "个地址");
+ }
+
+ /**网关登录测试*/
+ public CommonResult login(GatewayDO gateway){
+ // 创建 HttpClient 客户端
+ CloseableHttpClient httpClient = HttpUtils.createSSLClientDefault();
+ CloseableHttpResponse httpResponse = null;
+ try {
+ HttpPost httpPost = HttpUtils.getHttpPost(
+ gateway.getAdminIp() + UrlConstans.loginUrl,
+ HttpEntity.getLoginParam(gateway.getUsername(),gateway.getPassword()));
+ httpResponse = httpClient.execute(httpPost);
+ if (httpResponse.getEntity() != null) {
+ String entityStr = EntityUtils.toString(httpResponse.getEntity());
+ if(entityStr.contains("服务不可用") || entityStr.contains(""))
+ return CommonResult.success("网关服务不可用!");
+ ResponseInfo info = JSON.parseObject(entityStr, ResponseInfo.class);
+ if(info.code==0)return CommonResult.success("网关登录测试成功!");
+ }
+ }
+ // 无论如何必须关闭连接
+ catch (IOException e) {
+ e.printStackTrace();
+ } finally {
+ HttpUtils.closeHttp(httpClient, httpResponse);
+ }
+ return CommonResult.error(500,"网关登录测试失败!");
+ }
+
+ public int openOrClose(String adminIp, String username, String password, String monitorCode) {
+ List videoId = videoService.getVideoId(adminIp, username, password, monitorCode);
+ if (videoId != null && videoId.size() > 0) {
+ String[] addressIds = new String[videoId.size()];
+ for (int j = 0; j < videoId.size(); j++) {
+ addressIds[j] = videoId.get(j).getDeviceConfigID();
+ }
+ return videoService.openOrClose(adminIp,String.join(",",addressIds));
+ }
+ return 1;
+ }
+
+ @Data
+ @NoArgsConstructor
+ public static class ResponseInfo {
+ int code;
+ String msg;
+ }
+ public void deleteVideo(String adminIp,String username,String password,String monitorCode) {
+ videoService.login(adminIp,username,password);
+ List videoId = videoService.getVideoId(adminIp, username, password, monitorCode);
+ if (videoId != null && videoId.size() > 0) {
+ String[] addressIds = new String[videoId.size()];
+ for (int j = 0; j < videoId.size(); j++) {
+ addressIds[j] = videoId.get(j).getDeviceConfigID();
+ }
+ videoService.deleteByIds(adminIp, String.join(",", addressIds));
+ }
+ }
+
+ public void addVideo(String adminIp,String username,String password, Monitor monitor) {
+ videoService.login(adminIp,username,password);
+ DeviceVideoEntity deviceVideoEntity = new DeviceVideoEntity();
+ deviceVideoEntity.setDeviceID(monitor.getMonitorCode());
+ deviceVideoEntity.setDeviceName(monitor.getMonitorName());
+ deviceVideoEntity.setServerAddress(monitor.getServiceAddress());
+ deviceVideoEntity.setVideoAddress(monitor.getVideoAddress());
+ videoService.add(deviceVideoEntity, adminIp);
+ }
+}
diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/gateway/service/impl/VideoServiceImpl.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/gateway/service/impl/VideoServiceImpl.java
new file mode 100644
index 0000000000..bb660ffe35
--- /dev/null
+++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/gateway/service/impl/VideoServiceImpl.java
@@ -0,0 +1,128 @@
+package cn.iocoder.yudao.module.iot.framework.gateway.service.impl;
+
+
+import cn.iocoder.yudao.module.iot.framework.gateway.bo.HttpEntity;
+import cn.iocoder.yudao.module.iot.framework.gateway.entity.DeviceVideoEntity;
+import cn.iocoder.yudao.module.iot.framework.gateway.entity.PageEntityByDecice;
+import cn.iocoder.yudao.module.iot.framework.gateway.service.IVideoService;
+import cn.iocoder.yudao.module.iot.framework.gateway.util.HttpUtils;
+import cn.iocoder.yudao.module.iot.framework.gateway.util.JsonUtils;
+import cn.iocoder.yudao.module.iot.framework.gateway.util.UrlConstans;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.util.EntityUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.stereotype.Service;
+
+import java.io.IOException;
+import java.util.List;
+
+import static cn.iocoder.yudao.module.iot.framework.gateway.util.HttpUtils.getHttpPost;
+
+@Service
+public class VideoServiceImpl implements IVideoService {
+ private static final Logger log = LoggerFactory.getLogger(VideoServiceImpl.class);
+ private String cookie;
+ //先登录
+ @Override
+ public void login(String url ,String username ,String password){
+ // 创建 HttpClient 客户端
+ CloseableHttpClient httpClient = HttpUtils.createSSLClientDefault();
+ CloseableHttpResponse httpResponse = null;
+ try {
+ HttpPost httpPost = getHttpPost(url + UrlConstans.loginUrl, HttpEntity.getLoginParam(username,password));
+ httpResponse = httpClient.execute(httpPost);
+ log.debug(EntityUtils.toString(httpResponse.getEntity()));
+ this.cookie = HttpUtils.getCookies(httpResponse);
+ }
+ // 无论如何必须关闭连接
+ catch (IOException e) {
+ e.printStackTrace();
+ } finally {
+ HttpUtils.closeHttp(httpClient, httpResponse);
+ }
+ }
+
+ @Override
+ public List getVideoId(String adminIp, String username, String password, String monitorCode) {
+ PageEntityByDecice pageEntity = new PageEntityByDecice();
+ pageEntity.setDeviceID(monitorCode);
+ // 创建 HttpClient 客户端
+ CloseableHttpClient httpClient = HttpUtils.createSSLClientDefault();
+ CloseableHttpResponse httpResponse = null;
+ List list = null;
+ try {
+ String getlistUrl = adminIp + UrlConstans.video_list;
+ HttpPost httpPost = getHttpPost(getlistUrl, HttpEntity.getPageParamVo(pageEntity));//检索条件
+ login(adminIp, username, password);
+ httpPost.setHeader("Cookie", cookie);
+ httpResponse = httpClient.execute(httpPost);
+ if (httpResponse.getEntity() != null) {
+ String entityStr = EntityUtils.toString(httpResponse.getEntity());
+ list = JsonUtils.toVideoEntityList(entityStr);
+ }
+ }
+ // 无论如何必须关闭连接
+ catch (IOException e) {
+ e.printStackTrace();
+ } finally {
+ HttpUtils.closeHttp(httpClient, httpResponse);
+ }
+ return list;
+ }
+
+ @Override
+ public int deleteByIds(String adminIp, String ids) {
+ CloseableHttpClient httpClient = HttpUtils.createSSLClientDefault();
+ CloseableHttpResponse httpResponse = null;
+ try {
+ HttpPost httpPost = getHttpPost(adminIp + UrlConstans.video_remove, HttpEntity.getRemoveParam(ids));
+ httpPost.setHeader("Cookie", cookie);
+ httpResponse = httpClient.execute(httpPost);
+ } catch (IOException e) {
+ e.printStackTrace();
+ } finally {
+ HttpUtils.closeHttp(httpClient, httpResponse);
+ }
+ return 0;
+ }
+
+
+ @Override
+ public int add(DeviceVideoEntity list, String adminIp) {
+ CloseableHttpClient httpClient = HttpUtils.createSSLClientDefault();
+ CloseableHttpResponse httpResponse = null;
+ HttpPost httpPost = null;
+ try {
+ httpPost = getHttpPost(adminIp + UrlConstans.video_add, HttpEntity.getParam(list));
+ httpPost.setHeader("Cookie", cookie);
+ // 设置 HttpPost 参数
+ httpResponse = httpClient.execute(httpPost);
+ log.debug(EntityUtils.toString(httpResponse.getEntity()));
+ } catch (IOException e) {
+ e.printStackTrace();
+ return 1;
+ } finally {
+ HttpUtils.closeHttp(httpClient, httpResponse);
+ }
+ return 0;
+ }
+
+ @Override
+ public int openOrClose(String adminIp, String videoId) {
+ CloseableHttpClient httpClient = HttpUtils.createSSLClientDefault();
+ CloseableHttpResponse httpResponse = null;
+ try {
+ HttpPost httpPost = getHttpPost(adminIp + UrlConstans.video_push_stream, HttpEntity.getRemoveParam(videoId));
+ httpPost.setHeader("Cookie", cookie);
+ httpResponse = httpClient.execute(httpPost);
+ } catch (IOException e) {
+ e.printStackTrace();
+ } finally {
+ HttpUtils.closeHttp(httpClient, httpResponse);
+ }
+ return 0;
+ }
+}
diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/gateway/util/HttpUtils.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/gateway/util/HttpUtils.java
new file mode 100644
index 0000000000..7e5dd05c3f
--- /dev/null
+++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/gateway/util/HttpUtils.java
@@ -0,0 +1,385 @@
+package cn.iocoder.yudao.module.iot.framework.gateway.util;
+
+import org.apache.http.Header;
+import org.apache.http.StatusLine;
+import org.apache.http.client.entity.UrlEncodedFormEntity;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.conn.ssl.NoopHostnameVerifier;
+import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.message.BasicNameValuePair;
+import org.apache.http.ssl.SSLContextBuilder;
+import org.apache.http.ssl.TrustStrategy;
+import org.apache.http.util.EntityUtils;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.net.ssl.*;
+import java.io.*;
+import java.net.ConnectException;
+import java.net.SocketTimeoutException;
+import java.net.URL;
+import java.net.URLConnection;
+import java.security.KeyManagementException;
+import java.security.KeyStoreException;
+import java.security.NoSuchAlgorithmException;
+import java.security.cert.CertificateException;
+import java.security.cert.X509Certificate;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 通用http发送方法
+ *
+ * @author ruoyi
+ */
+public class HttpUtils
+{
+ private static final Logger log = LoggerFactory.getLogger(HttpUtils.class);
+
+ /**
+ * 向指定 URL 发送GET方法的请求
+ *
+ * @param url 发送请求的 URL
+ * @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
+ * @return 所代表远程资源的响应结果
+ */
+ public static String sendGet(String url, String param)
+ {
+ return sendGet(url, param, "UTF-8");
+ }
+
+ /**
+ * 向指定 URL 发送GET方法的请求
+ *
+ * @param url 发送请求的 URL
+ * @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
+ * @param contentType 编码类型
+ * @return 所代表远程资源的响应结果
+ */
+ public static String sendGet(String url, String param, String contentType)
+ {
+ StringBuilder result = new StringBuilder();
+ BufferedReader in = null;
+ try
+ {
+ String urlNameString = url + "?" + param;
+ log.info("sendGet - {}", urlNameString);
+ URL realUrl = new URL(urlNameString);
+ URLConnection connection = realUrl.openConnection();
+ connection.setRequestProperty("accept", "*/*");
+ connection.setRequestProperty("connection", "Keep-Alive");
+ connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
+ connection.connect();
+ in = new BufferedReader(new InputStreamReader(connection.getInputStream(), contentType));
+ String line;
+ while ((line = in.readLine()) != null)
+ {
+ result.append(line);
+ }
+ log.info("recv - {}", result);
+ }
+ catch (ConnectException e)
+ {
+ log.error("调用HttpUtils.sendGet ConnectException, url=" + url + ",param=" + param, e);
+ }
+ catch (SocketTimeoutException e)
+ {
+ log.error("调用HttpUtils.sendGet SocketTimeoutException, url=" + url + ",param=" + param, e);
+ }
+ catch (IOException e)
+ {
+ log.error("调用HttpUtils.sendGet IOException, url=" + url + ",param=" + param, e);
+ }
+ catch (Exception e)
+ {
+ log.error("调用HttpsUtil.sendGet Exception, url=" + url + ",param=" + param, e);
+ }
+ finally
+ {
+ try
+ {
+ if (in != null)
+ {
+ in.close();
+ }
+ }
+ catch (Exception ex)
+ {
+ log.error("调用in.close Exception, url=" + url + ",param=" + param, ex);
+ }
+ }
+ return result.toString();
+ }
+
+ /**
+ * 向指定 URL 发送POST方法的请求
+ *
+ * @param url 发送请求的 URL
+ * @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
+ * @return 所代表远程资源的响应结果
+ */
+ public static String sendPost(String url, String param)
+ {
+ PrintWriter out = null;
+ BufferedReader in = null;
+ StringBuilder result = new StringBuilder();
+ try
+ {
+ String urlNameString = url;
+ log.info("sendPost - {}", urlNameString);
+ URL realUrl = new URL(urlNameString);
+ URLConnection conn = realUrl.openConnection();
+ conn.setRequestProperty("accept", "*/*");
+ conn.setRequestProperty("connection", "Keep-Alive");
+ conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
+ conn.setRequestProperty("Accept-Charset", "utf-8");
+ conn.setRequestProperty("contentType", "utf-8");
+ conn.setDoOutput(true);
+ conn.setDoInput(true);
+ out = new PrintWriter(conn.getOutputStream());
+ out.print(param);
+ out.flush();
+ in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "utf-8"));
+ String line;
+ while ((line = in.readLine()) != null)
+ {
+ result.append(line);
+ }
+ log.info("recv - {}", result);
+ }
+ catch (ConnectException e)
+ {
+ log.error("调用HttpUtils.sendPost ConnectException, url=" + url + ",param=" + param, e);
+ }
+ catch (SocketTimeoutException e)
+ {
+ log.error("调用HttpUtils.sendPost SocketTimeoutException, url=" + url + ",param=" + param, e);
+ }
+ catch (IOException e)
+ {
+ log.error("调用HttpUtils.sendPost IOException, url=" + url + ",param=" + param, e);
+ }
+ catch (Exception e)
+ {
+ log.error("调用HttpsUtil.sendPost Exception, url=" + url + ",param=" + param, e);
+ }
+ finally
+ {
+ try
+ {
+ if (out != null)
+ {
+ out.close();
+ }
+ if (in != null)
+ {
+ in.close();
+ }
+ }
+ catch (IOException ex)
+ {
+ log.error("调用in.close Exception, url=" + url + ",param=" + param, ex);
+ }
+ }
+ return result.toString();
+ }
+
+ public static String sendSSLPost(String url, String param)
+ {
+ StringBuilder result = new StringBuilder();
+ String urlNameString = url + "?" + param;
+ try
+ {
+ log.info("sendSSLPost - {}", urlNameString);
+ SSLContext sc = SSLContext.getInstance("SSL");
+ sc.init(null, new TrustManager[] { new TrustAnyTrustManager() }, new java.security.SecureRandom());
+ URL console = new URL(urlNameString);
+ HttpsURLConnection conn = (HttpsURLConnection) console.openConnection();
+ conn.setRequestProperty("accept", "*/*");
+ conn.setRequestProperty("connection", "Keep-Alive");
+ conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
+ conn.setRequestProperty("Accept-Charset", "utf-8");
+ conn.setRequestProperty("contentType", "utf-8");
+ conn.setDoOutput(true);
+ conn.setDoInput(true);
+
+ conn.setSSLSocketFactory(sc.getSocketFactory());
+ conn.setHostnameVerifier(new TrustAnyHostnameVerifier());
+ conn.connect();
+ InputStream is = conn.getInputStream();
+ BufferedReader br = new BufferedReader(new InputStreamReader(is));
+ String ret = "";
+ while ((ret = br.readLine()) != null)
+ {
+ if (ret != null && !"".equals(ret.trim()))
+ {
+ result.append(new String(ret.getBytes("ISO-8859-1"), "utf-8"));
+ }
+ }
+ log.info("recv - {}", result);
+ conn.disconnect();
+ br.close();
+ }
+ catch (ConnectException e)
+ {
+ log.error("调用HttpUtils.sendSSLPost ConnectException, url=" + url + ",param=" + param, e);
+ }
+ catch (SocketTimeoutException e)
+ {
+ log.error("调用HttpUtils.sendSSLPost SocketTimeoutException, url=" + url + ",param=" + param, e);
+ }
+ catch (IOException e)
+ {
+ log.error("调用HttpUtils.sendSSLPost IOException, url=" + url + ",param=" + param, e);
+ }
+ catch (Exception e)
+ {
+ log.error("调用HttpsUtil.sendSSLPost Exception, url=" + url + ",param=" + param, e);
+ }
+ return result.toString();
+ }
+
+ private static class TrustAnyTrustManager implements X509TrustManager
+ {
+ @Override
+ public void checkClientTrusted(X509Certificate[] chain, String authType)
+ {
+ }
+
+ @Override
+ public void checkServerTrusted(X509Certificate[] chain, String authType)
+ {
+ }
+
+ @Override
+ public X509Certificate[] getAcceptedIssuers()
+ {
+ return new X509Certificate[] {};
+ }
+ }
+
+ private static class TrustAnyHostnameVerifier implements HostnameVerifier
+ {
+ @Override
+ public boolean verify(String hostname, SSLSession session)
+ {
+ return true;
+ }
+ }
+ public static CloseableHttpClient createSSLClientDefault() {
+ try {
+ //使用 loadTrustMaterial() 方法实现一个信任策略,信任所有证书
+ SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() {
+ // 信任所有
+ public boolean isTrusted(X509Certificate[] chain, String authType) throws CertificateException {
+ return true;
+ }
+ }).build();
+ //NoopHostnameVerifier类: 作为主机名验证工具,实质上关闭了主机名验证,它接受任何
+ //有效的SSL会话并匹配到目标主机。
+ HostnameVerifier hostnameVerifier = NoopHostnameVerifier.INSTANCE;
+ SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(sslContext, hostnameVerifier);
+ return HttpClients.custom().setSSLSocketFactory(sslsf).build();
+ } catch (KeyManagementException e) {
+ e.printStackTrace();
+ } catch (NoSuchAlgorithmException e) {
+ e.printStackTrace();
+ } catch (KeyStoreException e) {
+ e.printStackTrace();
+ }
+ return HttpClients.createDefault();
+
+ }
+
+ public static HttpPost getHttpPost(String url, List list) throws UnsupportedEncodingException {
+ // 创建 HttpPost 请求
+ HttpPost httpPost = new HttpPost(url);
+ // 设置长连接
+ httpPost.setHeader("Connection", "keep-alive");
+ // 设置代理(模拟浏览器版本)
+ httpPost.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36");
+ httpPost.setHeader("Accept", "application/json, text/javascript, */*; q=0.01");
+ httpPost.setHeader("Accept-Encoding", "gzip, deflate, br");
+ httpPost.setHeader("Accept-Language", "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7");
+ httpPost.setHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
+
+ // 设置 Cookie
+ //httpPost.setHeader("Cookie", "UM_distinctid=16442706a09352-0376059833914f-3c604504-1fa400-16442706a0b345; CNZZDATA1262458286=1603637673-1530123020-%7C1530123020; JSESSIONID=805587506F1594AE02DC45845A7216A4");
+ // 创建 HttpPost 参数
+ if (list != null) {
+ List params = new ArrayList(list);
+ // 设置 HttpPost 参数
+ httpPost.setEntity(new UrlEncodedFormEntity(params, "UTF-8"));
+ }
+ return httpPost;
+ }
+ public static HttpGet getHttpGet(String url, List list) throws UnsupportedEncodingException {
+ // 创建 HttpGet 请求
+ HttpGet httpGet = new HttpGet(url);
+ // 设置长连接
+ httpGet.setHeader("Connection", "keep-alive");
+ // 设置代理(模拟浏览器版本)
+ httpGet.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36");
+ httpGet.setHeader("Accept", "application/json, text/javascript, */*; q=0.01");
+ httpGet.setHeader("Accept-Encoding", "gzip, deflate, br");
+ httpGet.setHeader("Accept-Language", "zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7");
+ httpGet.setHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
+ // 创建 httpGet 参数
+ if (list != null) {
+ for (BasicNameValuePair pair : list) {
+ // 设置 httpGet 参数
+ httpGet.setHeader(pair.getName(),pair.getValue());
+ }
+ }
+ return httpGet;
+ }
+ public static boolean testNetworkConnected(String url){
+ // 创建 HttpClient 客户端
+ CloseableHttpClient httpClient = HttpUtils.createSSLClientDefault();
+ CloseableHttpResponse httpResponse = null;
+ try {
+ HttpGet httpGet = HttpUtils.getHttpGet(url,new ArrayList<>());
+ httpResponse = httpClient.execute(httpGet);
+ StatusLine statusLine = httpResponse.getStatusLine();
+ if(statusLine.getStatusCode() == 200)return true;
+ }
+ // 无论如何必须关闭连接
+ catch (IOException e) {
+ e.printStackTrace();
+ } finally {
+ HttpUtils.closeHttp(httpClient, httpResponse);
+ }
+ return false;
+ }
+ public static String getCookies(CloseableHttpResponse httpResponse) {
+ Header str = httpResponse.getHeaders("Set-Cookie")[0];
+ return str.getValue().split(";")[0];
+ }
+
+ public static void closeHttp(CloseableHttpClient httpClient, CloseableHttpResponse httpResponse) {
+ try {
+ if (httpClient != null) {
+ httpClient.close();
+ }
+ if (httpResponse != null) {
+ httpResponse.close();
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ /*post操作是否成功*/
+ public static Boolean isOk(CloseableHttpResponse httpResponse) {
+ try {
+ return "200".equals(EntityUtils.toString(httpResponse.getEntity()));
+ } catch (IOException e) {
+ }
+ return false;
+ }
+
+}
diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/gateway/util/JsonUtils.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/gateway/util/JsonUtils.java
new file mode 100644
index 0000000000..862f3fbedb
--- /dev/null
+++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/gateway/util/JsonUtils.java
@@ -0,0 +1,89 @@
+package cn.iocoder.yudao.module.iot.framework.gateway.util;
+
+import cn.iocoder.yudao.module.iot.framework.gateway.bo.ListEntity;
+import cn.iocoder.yudao.module.iot.framework.gateway.entity.*;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class JsonUtils {
+
+
+ public static List toSiemensPointEntityList(String jsonStr) {
+ List list = new ArrayList<>();
+ ListEntity entity = JSON.parseObject(jsonStr, ListEntity.class);
+ for (JSONObject json : entity.getRows()) {
+ String obj = json.toJSONString();
+ list.add(JSON.parseObject(obj, SiemensPointEntity.class));
+ }
+ return list;
+ }
+
+ public static String toSiemensPointEntityTotal(String jsonStr) {
+ List list = new ArrayList<>();
+ ListEntity entity = JSON.parseObject(jsonStr, ListEntity.class);
+ return entity.getTotal();
+ }
+
+ public static List toModbusPointEntityList(String jsonStr) {
+ List list = new ArrayList<>();
+ ListEntity entity = JSON.parseObject(jsonStr, ListEntity.class);
+ for (JSONObject json : entity.getRows()) {
+ String obj = json.toJSONString();
+ list.add(JSON.parseObject(obj, ModbusPointEntity.class));
+ }
+ return list;
+ }
+
+ public static String toModbusPointEntityTotal(String jsonStr) {
+ List list = new ArrayList<>();
+ ListEntity entity = JSON.parseObject(jsonStr, ListEntity.class);
+ return entity.getTotal();
+ }
+
+ public static ListEntity toPointEntity(String jsonStr) {
+ return JSON.parseObject(jsonStr, ListEntity.class);
+ }
+
+ public static List toDeviceSiemensEntityList(String jsonStr) {
+ List list = new ArrayList<>();
+ ListEntity entity = JSON.parseObject(jsonStr, ListEntity.class);
+ for (JSONObject json : entity.getRows()) {
+ String obj = json.toJSONString();
+ list.add(JSON.parseObject(obj, DeviceSiemensEntity.class));
+ }
+ return list;
+ }
+
+ public static List toDeviceModbusEntityList(String jsonStr) {
+ List list = new ArrayList<>();
+ ListEntity entity = JSON.parseObject(jsonStr, ListEntity.class);
+ for (JSONObject json : entity.getRows()) {
+ String obj = json.toJSONString();
+ list.add(JSON.parseObject(obj, DeviceModbusEntity.class));
+ }
+ return list;
+ }
+
+ public static List toMqttEntityList(String jsonStr) {
+ List list = new ArrayList<>();
+ ListEntity entity = JSON.parseObject(jsonStr, ListEntity.class);
+ for (JSONObject json : entity.getRows()) {
+ String obj = json.toJSONString();
+ list.add(JSON.parseObject(obj, MqttBrokerEntity.class));
+ }
+ return list;
+ }
+
+ public static List toVideoEntityList(String jsonStr) {
+ List list = new ArrayList<>();
+ ListEntity entity = JSON.parseObject(jsonStr, ListEntity.class);
+ for (JSONObject json : entity.getRows()) {
+ String obj = json.toJSONString();
+ list.add(JSON.parseObject(obj, DeviceVideoEntity.class));
+ }
+ return list;
+ }
+}
diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/gateway/util/SslUtil.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/gateway/util/SslUtil.java
new file mode 100644
index 0000000000..c6ef2fd95f
--- /dev/null
+++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/gateway/util/SslUtil.java
@@ -0,0 +1,54 @@
+package cn.iocoder.yudao.module.iot.framework.gateway.util;
+
+import javax.net.ssl.*;
+import java.security.cert.CertificateException;
+import java.security.cert.X509Certificate;
+
+public class SslUtil {
+
+ private static void trustAllHttpsCertificates() throws Exception {
+ TrustManager[] trustAllCerts = new TrustManager[1];
+ TrustManager tm = new miTM();
+ trustAllCerts[0] = tm;
+ SSLContext sc = SSLContext.getInstance("SSL");
+ sc.init(null, trustAllCerts, null);
+ HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
+ }
+
+ static class miTM implements TrustManager, X509TrustManager {
+
+ @Override
+ public X509Certificate[] getAcceptedIssuers() {
+ return null;
+ }
+
+ public boolean isServerTrusted(X509Certificate[] certs) {
+ return true;
+ }
+
+ public boolean isClientTrusted(X509Certificate[] certs) {
+ return true;
+ }
+
+ @Override
+ public void checkServerTrusted(X509Certificate[] certs, String authType) {
+ return;
+ }
+
+ @Override
+ public void checkClientTrusted(X509Certificate[] certs, String authType)
+ throws CertificateException {
+ return;
+ }
+ }
+
+ /**
+ * 忽略HTTPS请求的SSL证书,必须在openConnection之前调用
+ */
+ public static void ignoreSsl() throws Exception{
+ HostnameVerifier hv = (urlHostName, session) -> true;
+ trustAllHttpsCertificates();
+ HttpsURLConnection.setDefaultHostnameVerifier(hv);
+ }
+}
+
diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/gateway/util/TestApp.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/gateway/util/TestApp.java
new file mode 100644
index 0000000000..9f8561fbd5
--- /dev/null
+++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/gateway/util/TestApp.java
@@ -0,0 +1,176 @@
+
+package cn.iocoder.yudao.module.iot.framework.gateway.util;
+
+import cn.iocoder.yudao.module.iot.framework.gateway.bo.ListEntity;
+import cn.iocoder.yudao.module.iot.framework.gateway.entity.SiemensPointEntity;
+import cn.iocoder.yudao.module.iot.framework.gateway.service.ISiemensPointService;
+import cn.iocoder.yudao.module.iot.framework.mqtt.utils.DateUtils;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+
+import org.apache.http.Header;
+import org.apache.http.HttpEntity;
+import org.apache.http.client.ClientProtocolException;
+import org.apache.http.client.entity.UrlEncodedFormEntity;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.message.BasicNameValuePair;
+import org.apache.http.util.EntityUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.stereotype.Service;
+
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+@Service
+@EnableScheduling
+public class TestApp {
+ @Autowired
+ private ISiemensPointService iopointUploadService;
+
+ public static void main(String[] args){
+ System.out.println(DateUtils.getMillsLong());//1657075430559 1657461174420
+ //get();
+
+ //post();
+
+ //test();
+ }
+
+ //@Scheduled(fixedRate = 5000)
+ public void testHttp(){
+ //iopointUploadService.getList();
+ }
+ private static void get() {
+ // 创建 HttpClient 客户端
+ CloseableHttpClient httpClient = HttpClients.createDefault();
+
+ // 创建 HttpGet 请求
+ HttpGet httpGet = new HttpGet("https://71220220500200002.ng.xjzyun.com/");
+ // 设置长连接
+ httpGet.setHeader("Connection", "keep-alive");
+ // 设置代理(模拟浏览器版本)
+ httpGet.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36");
+ // 设置 Cookie
+ //httpGet.setHeader("Cookie", "UM_distinctid=16442706a09352-0376059833914f-3c604504-1fa400-16442706a0b345; CNZZDATA1262458286=1603637673-1530123020-%7C1530123020; JSESSIONID=805587506F1594AE02DC45845A7216A4");
+
+ CloseableHttpResponse httpResponse = null;
+ try {
+ // 请求并获得响应结果
+ httpResponse = httpClient.execute(httpGet);
+ HttpEntity httpEntity = httpResponse.getEntity();
+ // 输出请求结果
+ System.out.println(EntityUtils.toString(httpEntity));
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+
+ // 无论如何必须关闭连接
+ finally {
+ if (httpResponse != null) {
+ try {
+ httpResponse.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ if (httpClient != null) {
+ try {
+ httpClient.close();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ }
+ private static void post() {
+ // 创建 HttpClient 客户端
+ CloseableHttpClient httpClient = HttpClients.createDefault();
+ // 创建 HttpPost 请求
+ HttpPost httpPost = new HttpPost("https://71220220500200002.ng.xjzyun.com/login");
+ // 设置长连接
+ httpPost.setHeader("Connection", "keep-alive");
+ // 设置代理(模拟浏览器版本)
+ httpPost.setHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36");
+ // 设置 Cookie
+ //httpPost.setHeader("Cookie", "UM_distinctid=16442706a09352-0376059833914f-3c604504-1fa400-16442706a0b345; CNZZDATA1262458286=1603637673-1530123020-%7C1530123020; JSESSIONID=805587506F1594AE02DC45845A7216A4");
+ // 创建 HttpPost 参数
+ List params = new ArrayList();
+ params.add(new BasicNameValuePair("username", "admini"));
+ params.add(new BasicNameValuePair("password", "adminx@052002"));
+
+ CloseableHttpResponse httpResponse = null;
+ try {
+ // 设置 HttpPost 参数
+ httpPost.setEntity(new UrlEncodedFormEntity(params, "UTF-8"));
+ httpResponse = httpClient.execute(httpPost);
+ HttpEntity httpEntity = httpResponse.getEntity();
+ // 输出请求结果
+ System.out.println(EntityUtils.toString(httpEntity));
+
+ for (Header str :
+ httpResponse.getHeaders("Set-Cookie")) {
+ System.out.println("name:"+str.getName()+",value:"+str.getValue());
+ }
+ System.out.println();;
+ } catch (UnsupportedEncodingException e) {
+ e.printStackTrace();
+ } catch (ClientProtocolException e) {
+ e.printStackTrace();
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+
+ // 无论如何必须关闭连接
+ finally {
+ try {
+ if (httpResponse != null) {
+ httpResponse.close();
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+
+ try {
+ if (httpClient != null) {
+ httpClient.close();
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+
+ public static void test(){
+ String str = "{\"code\":0,\"total\":14,\"msg\":\"\",\"rows\":[{\"deviceConfigContentID\":\"6\",\"siemensFieldAccess\":\"r\",\"siemensFieldAddress\":\"I0.0\",\"siemensFieldDataType\":\"1\",\"siemensFieldName\":\"系统手动\",\"siemensFieldPrecision\":\"0\"},{\"deviceConfigContentID\":\"7\",\"siemensFieldAccess\":\"r\",\"siemensFieldAddress\":\"I0.1\",\"siemensFieldDataType\":\"1\",\"siemensFieldName\":\"系统自动\",\"siemensFieldPrecision\":\"0\"},{\"deviceConfigContentID\":\"8\",\"siemensFieldAccess\":\"r\",\"siemensFieldAddress\":\"I0.2\",\"siemensFieldDataType\":\"1\",\"siemensFieldName\":\"系统启动\",\"siemensFieldPrecision\":\"0\"},{\"deviceConfigContentID\":\"9\",\"siemensFieldAccess\":\"r\",\"siemensFieldAddress\":\"I0.3\",\"siemensFieldDataType\":\"1\",\"siemensFieldName\":\"系统停止\",\"siemensFieldPrecision\":\"0\"},{\"deviceConfigContentID\":\"10\",\"siemensFieldAccess\":\"r\",\"siemensFieldAddress\":\"I0.4\",\"siemensFieldDataType\":\"1\",\"siemensFieldName\":\"找原点\",\"siemensFieldPrecision\":\"0\"},{\"deviceConfigContentID\":\"11\",\"siemensFieldAccess\":\"r\",\"siemensFieldAddress\":\"I0.5\",\"siemensFieldDataType\":\"1\",\"siemensFieldName\":\"系统复位\",\"siemensFieldPrecision\":\"0\"},{\"deviceConfigContentID\":\"12\",\"siemensFieldAccess\":\"r\",\"siemensFieldAddress\":\"I0.2\",\"siemensFieldDataType\":\"2\",\"siemensFieldName\":\"sys_test1\",\"siemensFieldPrecision\":\"0\"},{\"deviceConfigContentID\":\"13\",\"siemensFieldAccess\":\"r\",\"siemensFieldAddress\":\"I0.5\",\"siemensFieldDataType\":\"1\",\"siemensFieldName\":\"sys_test2\",\"siemensFieldPrecision\":\"0\"},{\"deviceConfigContentID\":\"14\",\"siemensFieldAccess\":\"r\",\"siemensFieldAddress\":\"I0.6\",\"siemensFieldDataType\":\"1\",\"siemensFieldName\":\"sys_test3\",\"siemensFieldPrecision\":\"0\"},{\"deviceConfigContentID\":\"15\",\"siemensFieldAccess\":\"r\",\"siemensFieldAddress\":\"I0.0\",\"siemensFieldDataType\":\"1\",\"siemensFieldName\":\"sys_test4\",\"siemensFieldPrecision\":\"0\"}]}";
+
+ Map map = JSON.parseObject(str);
+
+ for (Object obj : map.keySet()){
+ Object value = map.get(obj);
+ System.out.println("key为:"+obj+"值为:"+value);
+ }
+ String key ="rows";
+
+ List jsonArrays = (List) map.get(key);
+
+ ListEntity entity = JSON.parseObject(str, ListEntity.class);
+
+ for (JSONObject json :
+ entity.getRows()) {
+ String obj = json.toJSONString();
+ SiemensPointEntity pointEntity = JSON.parseObject(obj, SiemensPointEntity.class);
+ System.out.println(pointEntity.toString());
+ }
+ }
+}
diff --git a/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/gateway/util/UrlConstans.java b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/gateway/util/UrlConstans.java
new file mode 100644
index 0000000000..31a85718aa
--- /dev/null
+++ b/yudao-module-iot/yudao-module-iot-biz/src/main/java/cn/iocoder/yudao/module/iot/framework/gateway/util/UrlConstans.java
@@ -0,0 +1,91 @@
+package cn.iocoder.yudao.module.iot.framework.gateway.util;
+
+public class UrlConstans {
+
+ public static final String loginUrl = "/login";
+
+ /**
+ * mqtt
+ */
+ public static final String mqtt_add = "/cloud/config/mqtt/add";
+ public static final String mqtt_list = "/cloud/config/mqtt/list";
+ public static final String mqtt_edit = "/cloud/config/mqtt/add";
+ public static final String mqtt_remove = "/cloud/config/remove";
+ public static final String mqtt_changestatus = "/cloud/config/changestatus";//启用
+
+ /***/
+ public static final String siemens_list = "/device/config/siemens/list";
+ public static final String siemens_add = "/device/config/siemens/add";
+ public static final String siemens_edit = "/device/config/siemens/add";
+ public static final String siemens_remove = "/device/config/remove";
+ public static final String siemens_changestatus = "/device/config/changeStatus";//启用
+
+ /**
+ * Video
+ */
+ public static final String video_list = "/device/config/video/list";
+ public static final String video_add = "/device/config/video/add";
+// public static final String video_edit = "/device/config/video/add";
+ public static final String video_remove = "/device/config/video/remove";
+ //device/config/video/push/stream/399/?_=1665714825994
+ public static final String video_push_stream = "/device/config/video/push/stream";//推流
+// public static final String Video_changestatus = "/device/config/changeStatus";//启用
+
+ /**
+ * siemens iopoint list
+ */
+ public static final String siemens_iopoint_list_r = "/device/config/siemens/contentlist/r/";
+ /**
+ * siemens iopoint add
+ */
+ //https://71220220500200002.ng.xjzyun.com/device/config/siemens/content/add/r/0/82
+ public static final String siemens_iopoint_add_r = "/device/config/siemens/content/add/r/0/";
+ /**
+ * siemens iopoint list
+ */
+ public static final String siemens_iopoint_edit_r = "/device/config/siemens/content/add/r/";
+ /**
+ * siemens iopoint list
+ */
+ public static final String siemens_iopoint_remove_r = "/device/configcontent/remove";
+
+ /**
+ * siemens iopoint list
+ */
+ public static final String siemens_iopoint_list_w = "/device/config/siemens/contentlist/r/";
+ /**
+ * siemens iopoint add
+ */
+ public static final String siemens_iopoint_add_w = "/device/config/siemens/content/add/w/0/";
+ /**
+ * siemens iopoint list
+ */
+ public static final String siemens_iopoint_edit_w = "/device/config/siemens/content/add/w/";
+ /**
+ * siemens iopoint list
+ */
+ public static final String siemens_iopoint_remove_w = "/device/configcontent/remove";
+
+ /***/
+ public static final String modbus_list = "/device/config/modbus/list";
+ public static final String modbus_add = "/device/config/modbus/add";
+ public static final String modbus_edit = "/device/config/modbus/edit";
+ public static final String modbus_remove = "/device/config/modbus/remove";
+ public static final String modbus_changestatus = "/device/config/changestatus";//启用
+ /**
+ * modbus iopoint list
+ */
+ public static final String modbus_iopoint_list = "/device/config/modbus/contentlist/r/";
+ /**
+ * modbus iopoint add
+ */
+ public static final String modbus_iopoint_add_r = "/device/config/modbus/content/add/r/0/";
+ /**
+ * modbus iopoint list
+ */
+ public static final String modbus_iopoint_edit = "/device/config/modbus/content/add/r/";
+ /**
+ * siemens iopoint list
+ */
+ public static final String modbus_iopoint_remove = "/device/configcontent/remove";
+}