From a16f49c888d74c8642137581f270a6756ba2fadf Mon Sep 17 00:00:00 2001 From: xuyang <748613696@qq.com> Date: Thu, 18 May 2023 16:30:13 +0800 Subject: [PATCH] =?UTF-8?q?=E6=A8=A1=E6=9D=BF=E8=A7=A3=E6=9E=90=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- iot-access/access-api/pom.xml | 22 -- .../njcn/access/enums/AccessResponseEnum.java | 3 + .../com/njcn/access/pojo/dto/data/AlmDto.java | 2 +- .../com/njcn/access/pojo/dto/data/BmdDto.java | 2 +- .../njcn/access/pojo/dto/data/CtrlDto.java | 4 +- .../com/njcn/access/pojo/dto/data/DoDto.java | 2 +- .../njcn/access/pojo/dto/data/EpdPqdDto.java | 2 +- .../com/njcn/access/pojo/dto/data/EvtDto.java | 2 +- .../njcn/access/pojo/dto/data/ParmDto.java | 2 +- .../com/njcn/access/pojo/dto/data/SetDto.java | 2 +- .../access/pojo/dto/devModel/ClDevDto.java | 2 +- .../pojo/dto/devModel/DevModDataListDto.java | 77 +++++++ .../access/pojo/dto/devModel/DevModDto.java | 2 +- .../{LdevInfoDto.java => LDevInfoDto.java} | 2 +- .../dto/devModel/NetDevModDataListDto.java | 27 +++ .../pojo/dto/devModel/NetDevModDto.java | 2 +- .../access/pojo/dto/devModel/PrjInfoDto.java | 43 ++++ .../java/com/njcn/access/pojo/po/CsBmdPO.java | 5 + .../com/njcn/access/pojo/po/CsEpdPqdPO.java | 34 ++- .../com/njcn/access/pojo/po/CsNetDevPO.java | 60 +++++ .../com/njcn/access/pojo/po/CsPrjInfoPO.java | 57 +++++ .../com/njcn/access/pojo/po/CsSoftInfoPO.java | 62 ++++++ iot-access/access-boot/pom.xml | 32 --- .../njcn/access/AccessBootApplication.java | 2 + .../access/controller/AccessController.java | 40 +--- .../access/controller/CsNetDevController.java | 28 +++ .../access/controller/DevModelController.java | 3 +- .../access/controller/RegisterController.java | 51 +++++ .../access/handler/MqttMessageHandler.java | 2 + .../njcn/access/mapper/CsEpdPqdMapper.java | 4 +- .../njcn/access/mapper/CsNetDevMapper.java | 16 ++ .../njcn/access/mapper/CsPrjInfoMapper.java | 16 ++ .../njcn/access/mapper/CsSoftInfoMapper.java | 16 ++ .../access/mapper/mapping/CsEpdPqdMapper.xml | 6 + .../njcn/access/service/IAccessService.java | 2 +- .../njcn/access/service/ICsEpdPqdService.java | 6 +- .../njcn/access/service/ICsNetDevService.java | 17 ++ .../access/service/ICsPrjInfoService.java | 18 ++ .../access/service/ICsSoftInfoService.java | 17 ++ .../njcn/access/service/IDevModelService.java | 2 +- .../serviceImpl/AccessServiceImpl.java | 52 ++++- .../serviceImpl/CsEpdPqdServiceImpl.java | 10 +- .../serviceImpl/CsNetDevServiceImpl.java | 39 ++++ .../serviceImpl/CsPrjInfoServiceImpl.java | 25 +++ .../serviceImpl/CsSoftInfoServiceImpl.java | 25 +++ .../serviceImpl/DevModelServiceImpl.java | 205 ++++++++++++------ iot-access/pom.xml | 54 +++++ 47 files changed, 923 insertions(+), 181 deletions(-) create mode 100644 iot-access/access-api/src/main/java/com/njcn/access/pojo/dto/devModel/DevModDataListDto.java rename iot-access/access-api/src/main/java/com/njcn/access/pojo/dto/devModel/{LdevInfoDto.java => LDevInfoDto.java} (94%) create mode 100644 iot-access/access-api/src/main/java/com/njcn/access/pojo/dto/devModel/NetDevModDataListDto.java create mode 100644 iot-access/access-api/src/main/java/com/njcn/access/pojo/dto/devModel/PrjInfoDto.java create mode 100644 iot-access/access-api/src/main/java/com/njcn/access/pojo/po/CsNetDevPO.java create mode 100644 iot-access/access-api/src/main/java/com/njcn/access/pojo/po/CsPrjInfoPO.java create mode 100644 iot-access/access-api/src/main/java/com/njcn/access/pojo/po/CsSoftInfoPO.java create mode 100644 iot-access/access-boot/src/main/java/com/njcn/access/controller/CsNetDevController.java create mode 100644 iot-access/access-boot/src/main/java/com/njcn/access/controller/RegisterController.java create mode 100644 iot-access/access-boot/src/main/java/com/njcn/access/mapper/CsNetDevMapper.java create mode 100644 iot-access/access-boot/src/main/java/com/njcn/access/mapper/CsPrjInfoMapper.java create mode 100644 iot-access/access-boot/src/main/java/com/njcn/access/mapper/CsSoftInfoMapper.java create mode 100644 iot-access/access-boot/src/main/java/com/njcn/access/mapper/mapping/CsEpdPqdMapper.xml create mode 100644 iot-access/access-boot/src/main/java/com/njcn/access/service/ICsNetDevService.java create mode 100644 iot-access/access-boot/src/main/java/com/njcn/access/service/ICsPrjInfoService.java create mode 100644 iot-access/access-boot/src/main/java/com/njcn/access/service/ICsSoftInfoService.java create mode 100644 iot-access/access-boot/src/main/java/com/njcn/access/service/serviceImpl/CsNetDevServiceImpl.java create mode 100644 iot-access/access-boot/src/main/java/com/njcn/access/service/serviceImpl/CsPrjInfoServiceImpl.java create mode 100644 iot-access/access-boot/src/main/java/com/njcn/access/service/serviceImpl/CsSoftInfoServiceImpl.java diff --git a/iot-access/access-api/pom.xml b/iot-access/access-api/pom.xml index 231cf31..8426020 100644 --- a/iot-access/access-api/pom.xml +++ b/iot-access/access-api/pom.xml @@ -26,28 +26,6 @@ 4.11 test - - org.projectlombok - lombok - - - com.google.code.gson - gson - 2.8.9 - - - org.springframework - spring-web - - - com.njcn - common-swagger - ${project.version} - - - com.alibaba.nacos - nacos-client - diff --git a/iot-access/access-api/src/main/java/com/njcn/access/enums/AccessResponseEnum.java b/iot-access/access-api/src/main/java/com/njcn/access/enums/AccessResponseEnum.java index b70fcba..b2105b3 100644 --- a/iot-access/access-api/src/main/java/com/njcn/access/enums/AccessResponseEnum.java +++ b/iot-access/access-api/src/main/java/com/njcn/access/enums/AccessResponseEnum.java @@ -20,11 +20,14 @@ public enum AccessResponseEnum { MODEL_NO_FIND("A0302", "模板不存在,请先录入模板数据!"), MESSAGE_TYPE_ERROR("A0303","报文消息类型Type错误!"), + DEV_TYPE_ERROR("A0303","装置类型错误!"), RESPONSE_ERROR("A0304","装置请求响应错误!"), DEV_TYPE_NOT_FIND("A0305","装置类型未找到,需要录入!"), + NO_RECEIVE_FROM_DEV("A0306","未收到装置注册响应,请核查!"), + ; diff --git a/iot-access/access-api/src/main/java/com/njcn/access/pojo/dto/data/AlmDto.java b/iot-access/access-api/src/main/java/com/njcn/access/pojo/dto/data/AlmDto.java index 4a9e94b..53b3fe1 100644 --- a/iot-access/access-api/src/main/java/com/njcn/access/pojo/dto/data/AlmDto.java +++ b/iot-access/access-api/src/main/java/com/njcn/access/pojo/dto/data/AlmDto.java @@ -24,7 +24,7 @@ public class AlmDto implements Serializable { @NotNull(message = "告警事件名称,不为空") private String name; - @SerializedName("Idx") + @SerializedName("IDX") @NotNull(message = "告警事件编号,不为空") private Integer idx; diff --git a/iot-access/access-api/src/main/java/com/njcn/access/pojo/dto/data/BmdDto.java b/iot-access/access-api/src/main/java/com/njcn/access/pojo/dto/data/BmdDto.java index 5ac5626..d325b22 100644 --- a/iot-access/access-api/src/main/java/com/njcn/access/pojo/dto/data/BmdDto.java +++ b/iot-access/access-api/src/main/java/com/njcn/access/pojo/dto/data/BmdDto.java @@ -26,7 +26,7 @@ public class BmdDto implements Serializable { @NotNull(message = "数据名称,不为空") private String name; - @SerializedName("Idx") + @SerializedName("IDX") @NotNull(message = "数据编号,不为空") private Integer idx; diff --git a/iot-access/access-api/src/main/java/com/njcn/access/pojo/dto/data/CtrlDto.java b/iot-access/access-api/src/main/java/com/njcn/access/pojo/dto/data/CtrlDto.java index 5f160aa..8af4950 100644 --- a/iot-access/access-api/src/main/java/com/njcn/access/pojo/dto/data/CtrlDto.java +++ b/iot-access/access-api/src/main/java/com/njcn/access/pojo/dto/data/CtrlDto.java @@ -26,7 +26,7 @@ public class CtrlDto implements Serializable { @NotNull(message = "控制名称,不为空") private String name; - @SerializedName("Idx") + @SerializedName("IDX") @NotNull(message = "控制编号,不为空") private Integer idx; @@ -52,7 +52,7 @@ public class CtrlDto implements Serializable { @SerializedName("Ctlvalue") @ApiModelProperty("参数为enum时可设置的所有值序列") - private Integer ctlValue; + private List ctlValue; @SerializedName("Strlen") @ApiModelProperty("参数string可设置字符串的长度上限") diff --git a/iot-access/access-api/src/main/java/com/njcn/access/pojo/dto/data/DoDto.java b/iot-access/access-api/src/main/java/com/njcn/access/pojo/dto/data/DoDto.java index 141e1b7..30ad16a 100644 --- a/iot-access/access-api/src/main/java/com/njcn/access/pojo/dto/data/DoDto.java +++ b/iot-access/access-api/src/main/java/com/njcn/access/pojo/dto/data/DoDto.java @@ -24,7 +24,7 @@ public class DoDto implements Serializable { @NotNull(message = "开出信号名称,不为空") private String name; - @SerializedName("Idx") + @SerializedName("IDX") @NotNull(message = "DO编号,不为空") private Integer idx; diff --git a/iot-access/access-api/src/main/java/com/njcn/access/pojo/dto/data/EpdPqdDto.java b/iot-access/access-api/src/main/java/com/njcn/access/pojo/dto/data/EpdPqdDto.java index fe80b0e..bc1ce76 100644 --- a/iot-access/access-api/src/main/java/com/njcn/access/pojo/dto/data/EpdPqdDto.java +++ b/iot-access/access-api/src/main/java/com/njcn/access/pojo/dto/data/EpdPqdDto.java @@ -26,7 +26,7 @@ public class EpdPqdDto implements Serializable { @NotNull(message = "数据名称,不为空") private String name; - @SerializedName("Idx") + @SerializedName("IDX") @NotNull(message = "数据编号,不为空") private Integer idx; diff --git a/iot-access/access-api/src/main/java/com/njcn/access/pojo/dto/data/EvtDto.java b/iot-access/access-api/src/main/java/com/njcn/access/pojo/dto/data/EvtDto.java index 3384dfc..42547d9 100644 --- a/iot-access/access-api/src/main/java/com/njcn/access/pojo/dto/data/EvtDto.java +++ b/iot-access/access-api/src/main/java/com/njcn/access/pojo/dto/data/EvtDto.java @@ -25,7 +25,7 @@ public class EvtDto implements Serializable { @NotNull(message = "事件信息名称,不为空") private String name; - @SerializedName("Idx") + @SerializedName("IDX") @NotNull(message = "事件编号,不为空") private Integer idx; diff --git a/iot-access/access-api/src/main/java/com/njcn/access/pojo/dto/data/ParmDto.java b/iot-access/access-api/src/main/java/com/njcn/access/pojo/dto/data/ParmDto.java index 3ff04d0..47ef204 100644 --- a/iot-access/access-api/src/main/java/com/njcn/access/pojo/dto/data/ParmDto.java +++ b/iot-access/access-api/src/main/java/com/njcn/access/pojo/dto/data/ParmDto.java @@ -26,7 +26,7 @@ public class ParmDto implements Serializable { @NotNull(message = "参数名称,不为空") private String name; - @SerializedName("Idx") + @SerializedName("IDX") @NotNull(message = "参数编号,不为空") private Integer idx; diff --git a/iot-access/access-api/src/main/java/com/njcn/access/pojo/dto/data/SetDto.java b/iot-access/access-api/src/main/java/com/njcn/access/pojo/dto/data/SetDto.java index 45a31a0..76474fd 100644 --- a/iot-access/access-api/src/main/java/com/njcn/access/pojo/dto/data/SetDto.java +++ b/iot-access/access-api/src/main/java/com/njcn/access/pojo/dto/data/SetDto.java @@ -25,7 +25,7 @@ public class SetDto implements Serializable { @NotNull(message = "参数名称,不为空") private String name; - @SerializedName("Idx") + @SerializedName("IDX") @NotNull(message = "参数编号,不为空") private Integer idx; diff --git a/iot-access/access-api/src/main/java/com/njcn/access/pojo/dto/devModel/ClDevDto.java b/iot-access/access-api/src/main/java/com/njcn/access/pojo/dto/devModel/ClDevDto.java index 7ceabf4..f6da881 100644 --- a/iot-access/access-api/src/main/java/com/njcn/access/pojo/dto/devModel/ClDevDto.java +++ b/iot-access/access-api/src/main/java/com/njcn/access/pojo/dto/devModel/ClDevDto.java @@ -28,7 +28,7 @@ public class ClDevDto implements Serializable { @SerializedName("DataList") @NotEmpty(message = "数据模型列表,不可为空") - private List dataList; + private List dataList; @SerializedName("DataSet") @NotEmpty(message = "数据集序列,不可为空") diff --git a/iot-access/access-api/src/main/java/com/njcn/access/pojo/dto/devModel/DevModDataListDto.java b/iot-access/access-api/src/main/java/com/njcn/access/pojo/dto/devModel/DevModDataListDto.java new file mode 100644 index 0000000..27d6cfc --- /dev/null +++ b/iot-access/access-api/src/main/java/com/njcn/access/pojo/dto/devModel/DevModDataListDto.java @@ -0,0 +1,77 @@ +package com.njcn.access.pojo.dto.devModel; + +import com.alibaba.nacos.shaded.com.google.gson.annotations.SerializedName; +import com.njcn.access.pojo.dto.data.*; +import lombok.Data; + +import javax.validation.constraints.NotEmpty; +import java.io.Serializable; +import java.util.List; + +/** + * 类的介绍: + * + * @author xuyang + * @version 1.0.0 + * @createTime 2023/5/16 15:27 + */ +@Data +public class DevModDataListDto implements Serializable { + + @SerializedName("SoftInfo") + @NotEmpty(message = "软件信息,不可为空") + private SoftInfoDto softInfoDto; + + @SerializedName("LdevInfo") + @NotEmpty(message = "设备信息,不可为空") + private List lDevInfoDto; + + @SerializedName("Epd") + @NotEmpty(message = "电能数据,不可为空") + private List epdDto; + + @SerializedName("Pqd") + @NotEmpty(message = "电能质量数据,不可为空") + private List pqdDto; + + @SerializedName("Bmd") + @NotEmpty(message = "基础测量数据,不可为空") + private List bmdDto; + + @SerializedName("Evt") + @NotEmpty(message = "事件,不可为空") + private List evtDto; + + @SerializedName("Alm") + @NotEmpty(message = "告警,不可为空") + private List almDto; + + @SerializedName("Sts") + @NotEmpty(message = "状态,不可为空") + private List stsDto; + + @SerializedName("Di") + @NotEmpty(message = "开入,不可为空") + private List diDto; + + @SerializedName("Do") + @NotEmpty(message = "开出,不可为空") + private List doDto; + + @SerializedName("Parm") + @NotEmpty(message = "参数,不可为空") + private List parmDto; + + @SerializedName("Set") + @NotEmpty(message = "定值,不可为空") + private List setDto; + + @SerializedName("InSet") + @NotEmpty(message = "内部定值,不可为空") + private List inSetDto; + + @SerializedName("Ctrl") + @NotEmpty(message = "控制,不可为空") + private List ctrlDto; + +} diff --git a/iot-access/access-api/src/main/java/com/njcn/access/pojo/dto/devModel/DevModDto.java b/iot-access/access-api/src/main/java/com/njcn/access/pojo/dto/devModel/DevModDto.java index cd9e1ae..929248c 100644 --- a/iot-access/access-api/src/main/java/com/njcn/access/pojo/dto/devModel/DevModDto.java +++ b/iot-access/access-api/src/main/java/com/njcn/access/pojo/dto/devModel/DevModDto.java @@ -32,7 +32,7 @@ public class DevModDto implements Serializable { @SerializedName("DataList") @NotEmpty(message = "数据模型列表,不可为空") - private List dataList; + private List dataList; @SerializedName("DataSet") @NotEmpty(message = "数据集,不可为空") diff --git a/iot-access/access-api/src/main/java/com/njcn/access/pojo/dto/devModel/LdevInfoDto.java b/iot-access/access-api/src/main/java/com/njcn/access/pojo/dto/devModel/LDevInfoDto.java similarity index 94% rename from iot-access/access-api/src/main/java/com/njcn/access/pojo/dto/devModel/LdevInfoDto.java rename to iot-access/access-api/src/main/java/com/njcn/access/pojo/dto/devModel/LDevInfoDto.java index 7601c42..d3e4fbb 100644 --- a/iot-access/access-api/src/main/java/com/njcn/access/pojo/dto/devModel/LdevInfoDto.java +++ b/iot-access/access-api/src/main/java/com/njcn/access/pojo/dto/devModel/LDevInfoDto.java @@ -15,7 +15,7 @@ import java.io.Serializable; * @createTime 2023/5/4 10:04 */ @Data -public class LdevInfoDto implements Serializable { +public class LDevInfoDto implements Serializable { @SerializedName("OpAttr") @NotEmpty(message = "读写操作属性,不可为空") diff --git a/iot-access/access-api/src/main/java/com/njcn/access/pojo/dto/devModel/NetDevModDataListDto.java b/iot-access/access-api/src/main/java/com/njcn/access/pojo/dto/devModel/NetDevModDataListDto.java new file mode 100644 index 0000000..afd90d8 --- /dev/null +++ b/iot-access/access-api/src/main/java/com/njcn/access/pojo/dto/devModel/NetDevModDataListDto.java @@ -0,0 +1,27 @@ +package com.njcn.access.pojo.dto.devModel; + +import com.alibaba.nacos.shaded.com.google.gson.annotations.SerializedName; +import lombok.Data; + +import javax.validation.constraints.NotEmpty; +import java.io.Serializable; + +/** + * 类的介绍: + * + * @author xuyang + * @version 1.0.0 + * @createTime 2023/5/16 15:27 + */ +@Data +public class NetDevModDataListDto implements Serializable { + + @SerializedName("SoftInfo") + @NotEmpty(message = "软件信息,不可为空") + private SoftInfoDto softInfoDto; + + @SerializedName("PrjInfo") + @NotEmpty(message = "工程信息,不可为空") + private PrjInfoDto prjInfoDto; + +} diff --git a/iot-access/access-api/src/main/java/com/njcn/access/pojo/dto/devModel/NetDevModDto.java b/iot-access/access-api/src/main/java/com/njcn/access/pojo/dto/devModel/NetDevModDto.java index cc3b21e..92b2e6c 100644 --- a/iot-access/access-api/src/main/java/com/njcn/access/pojo/dto/devModel/NetDevModDto.java +++ b/iot-access/access-api/src/main/java/com/njcn/access/pojo/dto/devModel/NetDevModDto.java @@ -31,5 +31,5 @@ public class NetDevModDto implements Serializable { @SerializedName("DataList") @NotEmpty(message = "数据模型列表,不可为空") - private List dataList; + private List dataList; } diff --git a/iot-access/access-api/src/main/java/com/njcn/access/pojo/dto/devModel/PrjInfoDto.java b/iot-access/access-api/src/main/java/com/njcn/access/pojo/dto/devModel/PrjInfoDto.java new file mode 100644 index 0000000..fd04d83 --- /dev/null +++ b/iot-access/access-api/src/main/java/com/njcn/access/pojo/dto/devModel/PrjInfoDto.java @@ -0,0 +1,43 @@ +package com.njcn.access.pojo.dto.devModel; + +import com.alibaba.nacos.shaded.com.google.gson.annotations.SerializedName; +import lombok.Data; + +import javax.validation.constraints.NotEmpty; +import java.io.Serializable; + +/** + * 类的介绍: + * + * @author xuyang + * @version 1.0.0 + * @createTime 2023/5/16 15:30 + */ +@Data +public class PrjInfoDto implements Serializable { + + @SerializedName("OpAttr") + @NotEmpty(message = "读写操作属性不可为空") + private String opAttr; + + @SerializedName("Province") + @NotEmpty(message = "安装区域省,不可为空") + private String province; + + @SerializedName("City") + @NotEmpty(message = "安装区域市,不可为空") + private String city; + + @SerializedName("County") + @NotEmpty(message = "安装区域县或区,不可为空") + private String county; + + @SerializedName("Address") + @NotEmpty(message = "安装地址(厂区或变电站),不可为空") + private String address; + + @SerializedName("Position") + @NotEmpty(message = "安装位置,不可为空") + private String position; + +} diff --git a/iot-access/access-api/src/main/java/com/njcn/access/pojo/po/CsBmdPO.java b/iot-access/access-api/src/main/java/com/njcn/access/pojo/po/CsBmdPO.java index 2ebfa14..6e69377 100644 --- a/iot-access/access-api/src/main/java/com/njcn/access/pojo/po/CsBmdPO.java +++ b/iot-access/access-api/src/main/java/com/njcn/access/pojo/po/CsBmdPO.java @@ -1,6 +1,7 @@ package com.njcn.access.pojo.po; import com.baomidou.mybatisplus.annotation.TableName; +import com.github.jeffreyning.mybatisplus.anno.MppMultiId; import lombok.Data; /** @@ -19,6 +20,7 @@ public class CsBmdPO { private String id; + @MppMultiId(value = "name") private String name; private String anotherName; @@ -29,6 +31,7 @@ public class CsBmdPO { private String unit; + @MppMultiId(value = "phase") private String phase; private String classId; @@ -37,4 +40,6 @@ public class CsBmdPO { private String tranRule; + private String opAttr; + } diff --git a/iot-access/access-api/src/main/java/com/njcn/access/pojo/po/CsEpdPqdPO.java b/iot-access/access-api/src/main/java/com/njcn/access/pojo/po/CsEpdPqdPO.java index 508fb81..603e000 100644 --- a/iot-access/access-api/src/main/java/com/njcn/access/pojo/po/CsEpdPqdPO.java +++ b/iot-access/access-api/src/main/java/com/njcn/access/pojo/po/CsEpdPqdPO.java @@ -1,6 +1,10 @@ package com.njcn.access.pojo.po; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; +import com.github.jeffreyning.mybatisplus.anno.MppMultiId; import lombok.Data; /** @@ -17,26 +21,40 @@ public class CsEpdPqdPO { private static final long serialVersionUID = 1L; - private String id; - + @MppMultiId(value = "name") private String name; - private String anotherName; - - private Integer idx; - - private String type; - + @MppMultiId(value = "phase") private String phase; + @TableField(value = "id") + private String id; + + @TableField(value = "another_name") + private String anotherName; + + @TableField(value = "idx") + private Integer idx; + + @TableField(value = "type") + private String type; + + @TableField(value = "unit") private String unit; + @TableField(value = "harm_start") private Integer harmStart; + @TableField(value = "harm_end") private Integer harmEnd; + @TableField(value = "class_id") private String classId; + @TableField(value = "stat_method") private String statMethod; + @TableField(value = "op_attr") + private String opAttr; + } diff --git a/iot-access/access-api/src/main/java/com/njcn/access/pojo/po/CsNetDevPO.java b/iot-access/access-api/src/main/java/com/njcn/access/pojo/po/CsNetDevPO.java new file mode 100644 index 0000000..344726e --- /dev/null +++ b/iot-access/access-api/src/main/java/com/njcn/access/pojo/po/CsNetDevPO.java @@ -0,0 +1,60 @@ +package com.njcn.access.pojo.po; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.njcn.db.bo.BaseEntity; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.Setter; + +import java.time.LocalDate; + +/** + *

+ * 联网设备表 + *

+ * + * @author xuyang + * @since 2023-05-17 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("cs_net_dev") +public class CsNetDevPO extends BaseEntity { + + private static final long serialVersionUID = 1L; + + /** + * id + */ + private String id; + + /** + * 装置型号 + */ + private String devType; + + private LocalDate time; + + /** + * 版本号 + */ + private String version; + + /** + * 系统软件表Id + */ + private String softInfoId; + + /** + * 工程配置表Id + */ + private String prjInfoId; + + /** + * 状态 + */ + private Integer status; + + +} diff --git a/iot-access/access-api/src/main/java/com/njcn/access/pojo/po/CsPrjInfoPO.java b/iot-access/access-api/src/main/java/com/njcn/access/pojo/po/CsPrjInfoPO.java new file mode 100644 index 0000000..a7ef615 --- /dev/null +++ b/iot-access/access-api/src/main/java/com/njcn/access/pojo/po/CsPrjInfoPO.java @@ -0,0 +1,57 @@ +package com.njcn.access.pojo.po; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.njcn.db.bo.BaseEntity; +import java.io.Serializable; +import java.time.LocalDateTime; +import lombok.Getter; +import lombok.Setter; + +/** + *

+ * 工程信息表 + *

+ * + * @author xuyang + * @since 2023-05-17 + */ +@Getter +@Setter +@TableName("cs_prj_info") +public class CsPrjInfoPO extends BaseEntity { + + private static final long serialVersionUID = 1L; + + private String id; + + /** + * 读写操作属性:“r” + */ + private String opAttr; + + /** + * 安装区域省 + */ + private String province; + + /** + * 安装区域省 + */ + private String city; + + /** + * 安装区域县或区 + */ + private String county; + + /** + * 安装地址(厂区或变电站) + */ + private String address; + + /** + * 安装位置 + */ + private String position; + +} diff --git a/iot-access/access-api/src/main/java/com/njcn/access/pojo/po/CsSoftInfoPO.java b/iot-access/access-api/src/main/java/com/njcn/access/pojo/po/CsSoftInfoPO.java new file mode 100644 index 0000000..aba6b38 --- /dev/null +++ b/iot-access/access-api/src/main/java/com/njcn/access/pojo/po/CsSoftInfoPO.java @@ -0,0 +1,62 @@ +package com.njcn.access.pojo.po; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.njcn.db.bo.BaseEntity; +import lombok.Data; + +import java.time.LocalDate; +import java.time.LocalDateTime; + +/** + *

+ * 系统软件表 + *

+ * + * @author xuyang + * @since 2023-05-17 + */ +@Data +@TableName("cs_soft_info") +public class CsSoftInfoPO extends BaseEntity { + + private static final long serialVersionUID = 1L; + + private String id; + + /** + * 读写操作属性:“r” + */ + private String opAttr; + + /** + * 操作系统名称,裸机系统填Null + */ + private String osName; + + /** + * 操作系统版本,裸机系统填Null + */ + private String osVersion; + + /** + * 应用程序版本号 + */ + private String appVersion; + + /** + * 应用程序发布日期 + */ + private LocalDateTime appDate; + + /** + * 应用程序校验码 + */ + private String appCheck; + + /** + * 是否支持远程升级程序 + */ + private String softUpdate; + + +} diff --git a/iot-access/access-boot/pom.xml b/iot-access/access-boot/pom.xml index 18af8cb..02588d8 100644 --- a/iot-access/access-boot/pom.xml +++ b/iot-access/access-boot/pom.xml @@ -25,32 +25,6 @@ access-api 1.0.0 - - com.njcn - common-web - ${project.version} - - - com.njcn - common-oss - ${project.version} - - - com.njcn - common-core - ${project.version} - - - com.njcn - common-db - ${project.version} - - - com.njcn - common-redis - 1.0.0 - compile - com.njcn algorithm-api @@ -61,12 +35,6 @@ system-api ${project.version} - - - org.springframework.kafka - spring-kafka - ${kafka.version} - diff --git a/iot-access/access-boot/src/main/java/com/njcn/access/AccessBootApplication.java b/iot-access/access-boot/src/main/java/com/njcn/access/AccessBootApplication.java index aea9d0b..8e76c47 100644 --- a/iot-access/access-boot/src/main/java/com/njcn/access/AccessBootApplication.java +++ b/iot-access/access-boot/src/main/java/com/njcn/access/AccessBootApplication.java @@ -1,5 +1,6 @@ package com.njcn.access; +import com.github.jeffreyning.mybatisplus.conf.EnableMPP; import lombok.extern.slf4j.Slf4j; import org.mybatis.spring.annotation.MapperScan; import org.springframework.boot.SpringApplication; @@ -16,6 +17,7 @@ import org.springframework.cloud.openfeign.EnableFeignClients; @MapperScan("com.njcn.**.mapper") @EnableFeignClients(basePackages = "com.njcn") @SpringBootApplication(scanBasePackages = "com.njcn") +@EnableMPP public class AccessBootApplication { public static void main(String[] args) { diff --git a/iot-access/access-boot/src/main/java/com/njcn/access/controller/AccessController.java b/iot-access/access-boot/src/main/java/com/njcn/access/controller/AccessController.java index 0c20bba..91cc5f5 100644 --- a/iot-access/access-boot/src/main/java/com/njcn/access/controller/AccessController.java +++ b/iot-access/access-boot/src/main/java/com/njcn/access/controller/AccessController.java @@ -1,28 +1,18 @@ package com.njcn.access.controller; -import com.njcn.access.enums.AccessResponseEnum; -import com.njcn.access.service.IAccessService; -import com.njcn.common.pojo.annotation.OperateInfo; -import com.njcn.common.pojo.enums.common.LogEnum; -import com.njcn.common.pojo.enums.response.CommonResponseEnum; -import com.njcn.common.pojo.response.HttpResult; -import com.njcn.common.utils.HttpResultUtil; -import com.njcn.common.utils.LogUtil; import com.njcn.web.controller.BaseController; import io.swagger.annotations.Api; -import io.swagger.annotations.ApiImplicitParam; -import io.swagger.annotations.ApiOperation; -import lombok.AllArgsConstructor; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.web.bind.annotation.*; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; /** * 类的介绍: * * @author xuyang * @version 1.0.0 - * @createTime 2023/3/31 9:12 + * @createTime 2023/5/16 13:58 */ @Slf4j @RestController @@ -31,21 +21,13 @@ import org.springframework.web.bind.annotation.*; @Api(tags = "装置接入") public class AccessController extends BaseController { - private final IAccessService accessService; - @PostMapping("/add") - @OperateInfo(info = LogEnum.BUSINESS_COMMON) - @ApiOperation("平台发起注册") - @ApiImplicitParam(name = "nDid", value = "网关识别码", required = true) - public HttpResult add(@RequestParam String nDid){ - log.info("设备向装置侧发起注册请求,请求的nDid为:" + nDid); - String methodDescribe = getMethodDescribe("add"); - LogUtil.njcnDebug(log, "{},设备向装置侧发起注册请求,请求的nDid为:{}", methodDescribe, nDid); - boolean result = accessService.add(nDid); - if (result){ - return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe); - } else { - return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.FAIL, null, methodDescribe); - } - } + + + + + + + + } diff --git a/iot-access/access-boot/src/main/java/com/njcn/access/controller/CsNetDevController.java b/iot-access/access-boot/src/main/java/com/njcn/access/controller/CsNetDevController.java new file mode 100644 index 0000000..73c03fc --- /dev/null +++ b/iot-access/access-boot/src/main/java/com/njcn/access/controller/CsNetDevController.java @@ -0,0 +1,28 @@ +package com.njcn.access.controller; + + +import io.swagger.annotations.Api; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.web.bind.annotation.RequestMapping; + +import org.springframework.web.bind.annotation.RestController; +import com.njcn.web.controller.BaseController; + +/** + *

+ * 联网设备表 前端控制器 + *

+ * + * @author xuyang + * @since 2023-05-17 + */ +@RestController +@RequestMapping("/csNetDev") +@RequiredArgsConstructor +@Api(tags = "网关管理") +@Slf4j +public class CsNetDevController extends BaseController { + +} + diff --git a/iot-access/access-boot/src/main/java/com/njcn/access/controller/DevModelController.java b/iot-access/access-boot/src/main/java/com/njcn/access/controller/DevModelController.java index 21fb463..01cda2d 100644 --- a/iot-access/access-boot/src/main/java/com/njcn/access/controller/DevModelController.java +++ b/iot-access/access-boot/src/main/java/com/njcn/access/controller/DevModelController.java @@ -42,7 +42,8 @@ public class DevModelController extends BaseController { log.info("装置录入模板文件"); String methodDescribe = getMethodDescribe("add"); LogUtil.njcnDebug(log, "{},装置录入模板文件", methodDescribe); - return devModelService.add(devModelParam); + devModelService.add(devModelParam); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe); } } diff --git a/iot-access/access-boot/src/main/java/com/njcn/access/controller/RegisterController.java b/iot-access/access-boot/src/main/java/com/njcn/access/controller/RegisterController.java new file mode 100644 index 0000000..ac8698c --- /dev/null +++ b/iot-access/access-boot/src/main/java/com/njcn/access/controller/RegisterController.java @@ -0,0 +1,51 @@ +package com.njcn.access.controller; + +import com.njcn.access.enums.AccessResponseEnum; +import com.njcn.access.service.IAccessService; +import com.njcn.common.pojo.annotation.OperateInfo; +import com.njcn.common.pojo.enums.common.LogEnum; +import com.njcn.common.pojo.enums.response.CommonResponseEnum; +import com.njcn.common.pojo.response.HttpResult; +import com.njcn.common.utils.HttpResultUtil; +import com.njcn.common.utils.LogUtil; +import com.njcn.web.controller.BaseController; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiOperation; +import lombok.AllArgsConstructor; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.poi.ss.formula.functions.T; +import org.springframework.web.bind.annotation.*; + +import java.util.Arrays; +import java.util.Optional; + +/** + * 类的介绍: + * + * @author xuyang + * @version 1.0.0 + * @createTime 2023/3/31 9:12 + */ +@Slf4j +@RestController +@RequestMapping("/devRegister") +@RequiredArgsConstructor +@Api(tags = "装置注册") +public class RegisterController extends BaseController { + + private final IAccessService accessService; + + @PostMapping("/add") + @OperateInfo(info = LogEnum.BUSINESS_COMMON) + @ApiOperation("平台发起注册") + @ApiImplicitParam(name = "nDid", value = "网关识别码", required = true) + public HttpResult add(@RequestParam String nDid){ + log.info("设备向装置侧发起注册请求,请求的nDid为:" + nDid); + String methodDescribe = getMethodDescribe("add"); + LogUtil.njcnDebug(log, "{},设备向装置侧发起注册请求,请求的nDid为:{}", methodDescribe, nDid); + accessService.add(nDid); + return HttpResultUtil.assembleCommonResponseResult(CommonResponseEnum.SUCCESS, null, methodDescribe); + } +} diff --git a/iot-access/access-boot/src/main/java/com/njcn/access/handler/MqttMessageHandler.java b/iot-access/access-boot/src/main/java/com/njcn/access/handler/MqttMessageHandler.java index 575dde7..e681321 100644 --- a/iot-access/access-boot/src/main/java/com/njcn/access/handler/MqttMessageHandler.java +++ b/iot-access/access-boot/src/main/java/com/njcn/access/handler/MqttMessageHandler.java @@ -108,6 +108,8 @@ public class MqttMessageHandler { @Transactional(rollbackFor = Exception.class) public void devOperation(String topic, MqttMessage message, @NamedValue("edgeId") String nDid, @Payload String payload){ log.info("收到注册应答响应--->" + nDid); + //这边用redis缓存来判断是否接收响应 + redisUtil.saveByKeyWithExpire(nDid,true,5L); Gson gson = new Gson(); ReqAndResParam.Res res = gson.fromJson(new String(message.getPayload(), StandardCharsets.UTF_8), ReqAndResParam.Res.class); //检验传递的参数是否准确 diff --git a/iot-access/access-boot/src/main/java/com/njcn/access/mapper/CsEpdPqdMapper.java b/iot-access/access-boot/src/main/java/com/njcn/access/mapper/CsEpdPqdMapper.java index 6f39224..e539a7e 100644 --- a/iot-access/access-boot/src/main/java/com/njcn/access/mapper/CsEpdPqdMapper.java +++ b/iot-access/access-boot/src/main/java/com/njcn/access/mapper/CsEpdPqdMapper.java @@ -1,6 +1,6 @@ package com.njcn.access.mapper; -import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.github.jeffreyning.mybatisplus.base.MppBaseMapper; import com.njcn.access.pojo.po.CsEpdPqdPO; /** @@ -11,6 +11,6 @@ import com.njcn.access.pojo.po.CsEpdPqdPO; * @author xuyang * @since 2023-05-11 */ -public interface CsEpdPqdMapper extends BaseMapper { +public interface CsEpdPqdMapper extends MppBaseMapper { } diff --git a/iot-access/access-boot/src/main/java/com/njcn/access/mapper/CsNetDevMapper.java b/iot-access/access-boot/src/main/java/com/njcn/access/mapper/CsNetDevMapper.java new file mode 100644 index 0000000..84dff10 --- /dev/null +++ b/iot-access/access-boot/src/main/java/com/njcn/access/mapper/CsNetDevMapper.java @@ -0,0 +1,16 @@ +package com.njcn.access.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.njcn.access.pojo.po.CsNetDevPO; + +/** + *

+ * 联网设备表 Mapper 接口 + *

+ * + * @author xuyang + * @since 2023-05-17 + */ +public interface CsNetDevMapper extends BaseMapper { + +} diff --git a/iot-access/access-boot/src/main/java/com/njcn/access/mapper/CsPrjInfoMapper.java b/iot-access/access-boot/src/main/java/com/njcn/access/mapper/CsPrjInfoMapper.java new file mode 100644 index 0000000..c2500dd --- /dev/null +++ b/iot-access/access-boot/src/main/java/com/njcn/access/mapper/CsPrjInfoMapper.java @@ -0,0 +1,16 @@ +package com.njcn.access.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.njcn.access.pojo.po.CsPrjInfoPO; + +/** + *

+ * 工程信息表 Mapper 接口 + *

+ * + * @author xuyang + * @since 2023-05-17 + */ +public interface CsPrjInfoMapper extends BaseMapper { + +} diff --git a/iot-access/access-boot/src/main/java/com/njcn/access/mapper/CsSoftInfoMapper.java b/iot-access/access-boot/src/main/java/com/njcn/access/mapper/CsSoftInfoMapper.java new file mode 100644 index 0000000..b524991 --- /dev/null +++ b/iot-access/access-boot/src/main/java/com/njcn/access/mapper/CsSoftInfoMapper.java @@ -0,0 +1,16 @@ +package com.njcn.access.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.njcn.access.pojo.po.CsSoftInfoPO; + +/** + *

+ * 系统软件表 Mapper 接口 + *

+ * + * @author xuyang + * @since 2023-05-17 + */ +public interface CsSoftInfoMapper extends BaseMapper { + +} diff --git a/iot-access/access-boot/src/main/java/com/njcn/access/mapper/mapping/CsEpdPqdMapper.xml b/iot-access/access-boot/src/main/java/com/njcn/access/mapper/mapping/CsEpdPqdMapper.xml new file mode 100644 index 0000000..2f88bd5 --- /dev/null +++ b/iot-access/access-boot/src/main/java/com/njcn/access/mapper/mapping/CsEpdPqdMapper.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/iot-access/access-boot/src/main/java/com/njcn/access/service/IAccessService.java b/iot-access/access-boot/src/main/java/com/njcn/access/service/IAccessService.java index d4e59e6..7ccdbc8 100644 --- a/iot-access/access-boot/src/main/java/com/njcn/access/service/IAccessService.java +++ b/iot-access/access-boot/src/main/java/com/njcn/access/service/IAccessService.java @@ -12,5 +12,5 @@ public interface IAccessService { * 3.装置响应则修改装置状态;3分钟未响应则生成告警信息 * @param nDid 网关识别码 */ - Boolean add(String nDid); + void add(String nDid); } diff --git a/iot-access/access-boot/src/main/java/com/njcn/access/service/ICsEpdPqdService.java b/iot-access/access-boot/src/main/java/com/njcn/access/service/ICsEpdPqdService.java index 688aacf..0eaf52c 100644 --- a/iot-access/access-boot/src/main/java/com/njcn/access/service/ICsEpdPqdService.java +++ b/iot-access/access-boot/src/main/java/com/njcn/access/service/ICsEpdPqdService.java @@ -1,8 +1,11 @@ package com.njcn.access.service; import com.baomidou.mybatisplus.extension.service.IService; +import com.github.jeffreyning.mybatisplus.service.IMppService; import com.njcn.access.pojo.po.CsEpdPqdPO; +import java.util.List; + /** *

* 服务类 @@ -11,6 +14,7 @@ import com.njcn.access.pojo.po.CsEpdPqdPO; * @author xuyang * @since 2023-05-11 */ -public interface ICsEpdPqdService extends IService { +public interface ICsEpdPqdService { + void saveData(List list); } diff --git a/iot-access/access-boot/src/main/java/com/njcn/access/service/ICsNetDevService.java b/iot-access/access-boot/src/main/java/com/njcn/access/service/ICsNetDevService.java new file mode 100644 index 0000000..a45038d --- /dev/null +++ b/iot-access/access-boot/src/main/java/com/njcn/access/service/ICsNetDevService.java @@ -0,0 +1,17 @@ +package com.njcn.access.service; + +import com.njcn.access.pojo.po.CsNetDevPO; + +/** + *

+ * 联网设备表 服务类 + *

+ * + * @author xuyang + * @since 2023-05-17 + */ +public interface ICsNetDevService { + + boolean saveData(CsNetDevPO csNetDevPo); + +} diff --git a/iot-access/access-boot/src/main/java/com/njcn/access/service/ICsPrjInfoService.java b/iot-access/access-boot/src/main/java/com/njcn/access/service/ICsPrjInfoService.java new file mode 100644 index 0000000..f16296a --- /dev/null +++ b/iot-access/access-boot/src/main/java/com/njcn/access/service/ICsPrjInfoService.java @@ -0,0 +1,18 @@ +package com.njcn.access.service; + +import com.njcn.access.pojo.po.CsPrjInfoPO; +import com.njcn.access.pojo.po.CsSoftInfoPO; + +/** + *

+ * 工程信息表 服务类 + *

+ * + * @author xuyang + * @since 2023-05-17 + */ +public interface ICsPrjInfoService { + + CsPrjInfoPO saveData(CsPrjInfoPO csPrjInfoPO); + +} diff --git a/iot-access/access-boot/src/main/java/com/njcn/access/service/ICsSoftInfoService.java b/iot-access/access-boot/src/main/java/com/njcn/access/service/ICsSoftInfoService.java new file mode 100644 index 0000000..e05bfe2 --- /dev/null +++ b/iot-access/access-boot/src/main/java/com/njcn/access/service/ICsSoftInfoService.java @@ -0,0 +1,17 @@ +package com.njcn.access.service; + +import com.njcn.access.pojo.po.CsSoftInfoPO; + +/** + *

+ * 系统软件表 服务类 + *

+ * + * @author xuyang + * @since 2023-05-17 + */ +public interface ICsSoftInfoService { + + CsSoftInfoPO saveData(CsSoftInfoPO csSoftInfoPo); + +} diff --git a/iot-access/access-boot/src/main/java/com/njcn/access/service/IDevModelService.java b/iot-access/access-boot/src/main/java/com/njcn/access/service/IDevModelService.java index 283a972..a8e8cae 100644 --- a/iot-access/access-boot/src/main/java/com/njcn/access/service/IDevModelService.java +++ b/iot-access/access-boot/src/main/java/com/njcn/access/service/IDevModelService.java @@ -14,5 +14,5 @@ public interface IDevModelService { * 2.将文件上传至文件服务器保存起来,先以装置型号-版本号-时间作为名称名称 * @param devModelParam 模板文件参数 */ - HttpResult add(DevModelParam devModelParam); + void add(DevModelParam devModelParam); } diff --git a/iot-access/access-boot/src/main/java/com/njcn/access/service/serviceImpl/AccessServiceImpl.java b/iot-access/access-boot/src/main/java/com/njcn/access/service/serviceImpl/AccessServiceImpl.java index df42c4e..7b2e520 100644 --- a/iot-access/access-boot/src/main/java/com/njcn/access/service/serviceImpl/AccessServiceImpl.java +++ b/iot-access/access-boot/src/main/java/com/njcn/access/service/serviceImpl/AccessServiceImpl.java @@ -1,18 +1,26 @@ package com.njcn.access.service.serviceImpl; +import com.alibaba.csp.sentinel.util.TimeUtil; import com.github.tocrhz.mqtt.publisher.MqttPublisher; import com.njcn.access.enums.AccessEnum; +import com.njcn.access.enums.AccessResponseEnum; import com.njcn.access.enums.TypeEnum; +import com.njcn.access.handler.MqttMessageHandler; import com.njcn.access.pojo.dto.AccessDto; import com.njcn.access.pojo.param.ReqAndResParam; import com.njcn.access.service.IAccessService; import com.njcn.algorithm.api.CsEdDataFeignClient; import com.njcn.algorithm.api.EquipmentFeignClient; -import com.njcn.algorithm.pojo.po.CsEdDataPO; import com.njcn.algorithm.pojo.vo.CsEdDataVO; import com.njcn.algorithm.pojo.vo.CsEquipmentDeliveryVO; +import com.njcn.common.pojo.enums.response.CommonResponseEnum; +import com.njcn.common.pojo.exception.BusinessException; import com.njcn.common.pojo.response.HttpResult; +import com.njcn.common.utils.HttpResultUtil; import com.njcn.common.utils.PubUtils; +import com.njcn.redis.utils.RedisUtil; +import com.njcn.system.api.DicDataFeignClient; +import com.njcn.system.enums.DicDataEnum; import lombok.AllArgsConstructor; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -39,18 +47,49 @@ public class AccessServiceImpl implements IAccessService { private final CsEdDataFeignClient csEdDataFeignClient; + private final DicDataFeignClient dicDataFeignClient; + + private final RedisUtil redisUtil; + @Override - public Boolean add(String nDid) { + public void add(String nDid) { CsEquipmentDeliveryVO vo = equipmentFeignClient.queryEquipmentByndid(nDid).getData(); - System.out.println("vo==:" + vo); if (Objects.isNull(vo.getNdid())){ logger.error("平台侧无此网关信息,请先录入!"); - return false; + throw new BusinessException(AccessResponseEnum.NDID_NO_FIND); } else { HttpResult result = csEdDataFeignClient.findByDevTypeId(vo.getDevModel()); - System.out.println("result==:" + result); + String typeId = result.getData().getType(); + if(Objects.isNull(typeId)) { + logger.error("平台侧无此装置类型,请先录入!"); + throw new BusinessException(AccessResponseEnum.DEV_TYPE_NOT_FIND); + } else { + String type = dicDataFeignClient.getDicDataById(typeId).getData().getCode(); + if (Objects.equals(DicDataEnum.GATEWAY_DEV.getCode(),type)) { + //处理网关设备 + System.out.println("网关"); + } else if (Objects.equals(DicDataEnum.CONNECT_DEV.getCode(),type)) { + //处理直连设备 + zhiLianRegister(nDid,vo.getDevModel()); + } else { + logger.error("请求注册的装置类型错误(不是网关或者直连设备),请核查!"); + throw new BusinessException(AccessResponseEnum.DEV_TYPE_ERROR); + } + } } + try { + Thread.sleep(2000); + //这边使用redis缓存来判断装置是否连接MQTT + if(Objects.isNull(redisUtil.getObjectByKey(nDid))) { + logger.error("未收到装置注册响应,请核查!"); + throw new BusinessException(AccessResponseEnum.NO_RECEIVE_FROM_DEV); + } + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + public void zhiLianRegister(String nDid,String devType) { ReqAndResParam.Req reqAndResParam = new ReqAndResParam.Req(); reqAndResParam.setMid(1); reqAndResParam.setDid("0"); @@ -59,9 +98,8 @@ public class AccessServiceImpl implements IAccessService { reqAndResParam.setExpire(-1); AccessDto accessDto = new AccessDto(); accessDto.setNDid(nDid); - accessDto.setDevType(vo.getDevModel()); + accessDto.setDevType(devType); reqAndResParam.setMsg(accessDto); publisher.send("/platform/register/"+nDid, PubUtils.obj2json(reqAndResParam),1,false); - return true; } } diff --git a/iot-access/access-boot/src/main/java/com/njcn/access/service/serviceImpl/CsEpdPqdServiceImpl.java b/iot-access/access-boot/src/main/java/com/njcn/access/service/serviceImpl/CsEpdPqdServiceImpl.java index 4c1cdf6..b7bc748 100644 --- a/iot-access/access-boot/src/main/java/com/njcn/access/service/serviceImpl/CsEpdPqdServiceImpl.java +++ b/iot-access/access-boot/src/main/java/com/njcn/access/service/serviceImpl/CsEpdPqdServiceImpl.java @@ -1,11 +1,13 @@ package com.njcn.access.service.serviceImpl; -import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.github.jeffreyning.mybatisplus.service.MppServiceImpl; import com.njcn.access.mapper.CsEpdPqdMapper; import com.njcn.access.pojo.po.CsEpdPqdPO; import com.njcn.access.service.ICsEpdPqdService; import org.springframework.stereotype.Service; +import java.util.List; + /** *

* 服务实现类 @@ -15,6 +17,10 @@ import org.springframework.stereotype.Service; * @since 2023-05-11 */ @Service -public class CsEpdPqdServiceImpl extends ServiceImpl implements ICsEpdPqdService { +public class CsEpdPqdServiceImpl extends MppServiceImpl implements ICsEpdPqdService { + @Override + public void saveData(List list) { + this.saveOrUpdateBatchByMultiId(list,100); + } } diff --git a/iot-access/access-boot/src/main/java/com/njcn/access/service/serviceImpl/CsNetDevServiceImpl.java b/iot-access/access-boot/src/main/java/com/njcn/access/service/serviceImpl/CsNetDevServiceImpl.java new file mode 100644 index 0000000..21391f5 --- /dev/null +++ b/iot-access/access-boot/src/main/java/com/njcn/access/service/serviceImpl/CsNetDevServiceImpl.java @@ -0,0 +1,39 @@ +package com.njcn.access.service.serviceImpl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.njcn.access.enums.AccessResponseEnum; +import com.njcn.access.mapper.CsNetDevMapper; +import com.njcn.access.pojo.po.CsNetDevPO; +import com.njcn.access.service.ICsNetDevService; +import com.njcn.common.pojo.exception.BusinessException; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + +import java.util.Objects; + +/** + *

+ * 联网设备表 服务实现类 + *

+ * + * @author xuyang + * @since 2023-05-17 + */ +@Service +public class CsNetDevServiceImpl extends ServiceImpl implements ICsNetDevService { + + @Override + public boolean saveData(CsNetDevPO csNetDevPo) { + LambdaQueryWrapper lambdaQueryWrapper = new LambdaQueryWrapper(); + lambdaQueryWrapper.eq(CsNetDevPO::getDevType,csNetDevPo.getDevType()) + .eq(CsNetDevPO::getTime,csNetDevPo.getTime()) + .eq(CsNetDevPO::getVersion,csNetDevPo.getVersion()) + .eq(CsNetDevPO::getStatus,1); + CsNetDevPO po = this.baseMapper.selectOne(lambdaQueryWrapper); + if (!Objects.isNull(po)){ + throw new BusinessException(AccessResponseEnum.MODEL_REPEAT); + } + return this.save(csNetDevPo); + } +} diff --git a/iot-access/access-boot/src/main/java/com/njcn/access/service/serviceImpl/CsPrjInfoServiceImpl.java b/iot-access/access-boot/src/main/java/com/njcn/access/service/serviceImpl/CsPrjInfoServiceImpl.java new file mode 100644 index 0000000..280f1d3 --- /dev/null +++ b/iot-access/access-boot/src/main/java/com/njcn/access/service/serviceImpl/CsPrjInfoServiceImpl.java @@ -0,0 +1,25 @@ +package com.njcn.access.service.serviceImpl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.njcn.access.mapper.CsPrjInfoMapper; +import com.njcn.access.pojo.po.CsPrjInfoPO; +import com.njcn.access.service.ICsPrjInfoService; +import org.springframework.stereotype.Service; + +/** + *

+ * 工程信息表 服务实现类 + *

+ * + * @author xuyang + * @since 2023-05-17 + */ +@Service +public class CsPrjInfoServiceImpl extends ServiceImpl implements ICsPrjInfoService { + + @Override + public CsPrjInfoPO saveData(CsPrjInfoPO csPrjInfoPo) { + this.save(csPrjInfoPo); + return csPrjInfoPo; + } +} diff --git a/iot-access/access-boot/src/main/java/com/njcn/access/service/serviceImpl/CsSoftInfoServiceImpl.java b/iot-access/access-boot/src/main/java/com/njcn/access/service/serviceImpl/CsSoftInfoServiceImpl.java new file mode 100644 index 0000000..f83b24e --- /dev/null +++ b/iot-access/access-boot/src/main/java/com/njcn/access/service/serviceImpl/CsSoftInfoServiceImpl.java @@ -0,0 +1,25 @@ +package com.njcn.access.service.serviceImpl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.njcn.access.mapper.CsSoftInfoMapper; +import com.njcn.access.pojo.po.CsSoftInfoPO; +import com.njcn.access.service.ICsSoftInfoService; +import org.springframework.stereotype.Service; + +/** + *

+ * 系统软件表 服务实现类 + *

+ * + * @author xuyang + * @since 2023-05-17 + */ +@Service +public class CsSoftInfoServiceImpl extends ServiceImpl implements ICsSoftInfoService { + + @Override + public CsSoftInfoPO saveData(CsSoftInfoPO entity) { + this.save(entity); + return entity; + } +} diff --git a/iot-access/access-boot/src/main/java/com/njcn/access/service/serviceImpl/DevModelServiceImpl.java b/iot-access/access-boot/src/main/java/com/njcn/access/service/serviceImpl/DevModelServiceImpl.java index f7dd889..3fb89cd 100644 --- a/iot-access/access-boot/src/main/java/com/njcn/access/service/serviceImpl/DevModelServiceImpl.java +++ b/iot-access/access-boot/src/main/java/com/njcn/access/service/serviceImpl/DevModelServiceImpl.java @@ -1,33 +1,37 @@ package com.njcn.access.service.serviceImpl; +import cn.hutool.core.date.DatePattern; import com.alibaba.nacos.shaded.com.google.gson.Gson; import com.njcn.access.enums.AccessResponseEnum; +import com.njcn.access.pojo.dto.data.BmdDto; +import com.njcn.access.pojo.dto.data.EpdPqdDto; import com.njcn.access.pojo.dto.devModel.*; import com.njcn.access.pojo.param.DevModelParam; -import com.njcn.access.service.IDevModelService; +import com.njcn.access.pojo.po.*; +import com.njcn.access.service.*; import com.njcn.access.utils.JsonUtil; +import com.njcn.algorithm.api.CsDictFeignClient; import com.njcn.algorithm.api.DevModelFeignClient; +import com.njcn.algorithm.pojo.dto.CsDictDTO; import com.njcn.algorithm.pojo.param.CsDevModelAddParm; -import com.njcn.algorithm.pojo.param.CsDevModelQueryListParm; import com.njcn.algorithm.pojo.po.CsDevModelPO; -import com.njcn.algorithm.pojo.vo.CsDevModelPageVO; -import com.njcn.common.pojo.enums.response.CommonResponseEnum; -import com.njcn.common.pojo.response.HttpResult; -import com.njcn.common.utils.HttpResultUtil; -import com.njcn.oss.constant.OssPath; +import com.njcn.common.pojo.exception.BusinessException; import com.njcn.oss.utils.FileStorageUtil; import com.njcn.system.api.DicDataFeignClient; -import com.njcn.system.pojo.po.DictData; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; import java.io.IOException; -import java.text.ParseException; -import java.text.SimpleDateFormat; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; import java.util.List; import java.util.Objects; +import java.util.stream.Collectors; /** * 类的介绍: @@ -47,71 +51,37 @@ public class DevModelServiceImpl implements IDevModelService { private final DicDataFeignClient dicDataFeignClient; + private final CsDictFeignClient csDictFeignClient; + + private final ICsNetDevService csNetDevService; + + private final ICsSoftInfoService csSoftInfoService; + + private final ICsPrjInfoService csPrjInfoService; + + private final ICsEpdPqdService csEpdPqdService; + @Override @Transactional(rollbackFor = Exception.class) - public HttpResult add(DevModelParam devModelParam) { + public void add(DevModelParam devModelParam) { String json = null; try { json = JsonUtil.convertStreamToString(devModelParam.getFile().getInputStream()); Gson gson = new Gson(); TemplateDto templateDto = gson.fromJson(json, TemplateDto.class); + //新增网关信息描述表 +// insertNetDevMod(templateDto.getNetDevModDto()); + //模板文件存入文件服务器 + //String filePath = fileStorageUtil.uploadMultipart(devModelParam.getFile(), OssPath.DEV_MODEL + devModelParam.getDevType() + "_"); + String filePath = ""; + //新增设备数据模板 + insertDevMod(templateDto.getDevModDto(),filePath); -// ParamDto pojo = templateDto.getParam(); -// //网关模板 -// NetDevModDto po1 = pojo.getDataArray().get(0).getTemplate().getNetDevModDto(); -// //装置信息模板 -// DevCfgDetailDto po2 = pojo.getDataArray().get(0).getTemplate().getDevCfgDetailDto(); -// //装置数据模板 -// List po3 = pojo.getDataArray().get(0).getTemplate().getDevModDetailDto(); -// -// String name = po3.get(0).getName(); -// String version = po3.get(0).getVersion(); -// String time = po3.get(0).getTime(); -// String devType = po3.get(0).getDevType(); -// String devTypeId = ""; -// -// DictData dicData = dicDataFeignClient.getDicDataByCode(devType).getData(); -// if (Objects.isNull(dicData)) { -// log.info("新增模板失败,获取装置类型字典数据为空,请先录入装置类型!"); -// return HttpResultUtil.assembleResult(CommonResponseEnum.NO_DATA.getCode(), null, "获取装置类型字典数据为空!"); -// } else { -// devTypeId = dicData.getId(); -// } -// CsDevModelQueryListParm csDevModelQueryListParm = new CsDevModelQueryListParm(); -// csDevModelQueryListParm.setDevType(devTypeId); -// csDevModelQueryListParm.setVersionNo(version); -// csDevModelQueryListParm.setVersionDate(time); -// csDevModelQueryListParm.setName(name); -// CsDevModelPageVO vo = devModelFeignClient.queryDevModelOne(csDevModelQueryListParm).getData(); -// if (!Objects.isNull(vo)){ -// log.info("新增模板失败,新增的模板在库中存在!"); -// return HttpResultUtil.assembleResult(AccessResponseEnum.MODEL_REPEAT.getCode(), null, AccessResponseEnum.MODEL_REPEAT.getMessage()); -// } else { -// CsDevModelAddParm csDevModelAddParm = new CsDevModelAddParm(); -// csDevModelAddParm.setName(name); -// csDevModelAddParm.setDevType(devTypeId); -// csDevModelAddParm.setVersionNo(version); -// csDevModelAddParm.setVersionDate(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(time)); -// String filePath = fileStorageUtil.uploadMultipart(devModelParam.getFile(), OssPath.DEV_MODEL + devModelParam.getDevType() + "_"); -// log.info("文件路径为:" + filePath); -// csDevModelAddParm.setFilePath(filePath); -// //新增cs_dev_model表数据 -// CsDevModelPO csDevModelPO = devModelFeignClient.addDevModel(csDevModelAddParm).getData(); -// //新增cs_data_set -// -// //新增cs_data_array -// -// } } catch (IOException e) { log.error("文件转成json出现异常"); e.getMessage(); } -// catch (ParseException e) { -// log.error("时间转换出现异常"); -// e.getMessage(); -// } - return HttpResultUtil.assembleResult(CommonResponseEnum.SUCCESS.getCode(), null, CommonResponseEnum.SUCCESS.getMessage()); } /** @@ -126,4 +96,115 @@ public class DevModelServiceImpl implements IDevModelService { // }); // } + /** + * 新增直连设备、网关模板信息 + */ + public void insertNetDevMod(NetDevModDto netDevModDto) { + SoftInfoDto softInfoDto = netDevModDto.getDataList().get(0).getSoftInfoDto(); + PrjInfoDto prjInfoDto = netDevModDto.getDataList().get(0).getPrjInfoDto(); + CsNetDevPO csNetDevPo = new CsNetDevPO(); + BeanUtils.copyProperties(netDevModDto,csNetDevPo); + csNetDevPo.setTime(LocalDate.parse(netDevModDto.getTime(), DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN))); + csNetDevPo.setStatus(1); + if (!Objects.isNull(softInfoDto)){ + CsSoftInfoPO csSoftInfoPo = new CsSoftInfoPO(); + BeanUtils.copyProperties(softInfoDto,csSoftInfoPo); + csSoftInfoPo.setAppDate(LocalDateTime.parse(softInfoDto.getAppDate(), DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN))); + String softInfoId = csSoftInfoService.saveData(csSoftInfoPo).getId(); + csNetDevPo.setSoftInfoId(softInfoId); + } + if (!Objects.isNull(prjInfoDto)){ + CsPrjInfoPO csPrjInfoPo = new CsPrjInfoPO(); + BeanUtils.copyProperties(prjInfoDto,csPrjInfoPo); + String prjInfoId = csPrjInfoService.saveData(csPrjInfoPo).getId(); + csNetDevPo.setPrjInfoId(prjInfoId); + } + csNetDevService.saveData(csNetDevPo); + } + + /** + * 新增数据模板(装置类型分类) + */ + public void insertDevMod(DevModDto devModDto,String filePath) { +// String devType = devModDto.getDevType(); +// String version = devModDto.getVersion(); +// String time = devModDto.getTime(); +// CsDevModelPO csDevModelPo = devModelFeignClient.findModel(devType,version,time).getData(); +// if (!Objects.isNull(csDevModelPo)){ +// throw new BusinessException(AccessResponseEnum.MODEL_REPEAT); +// } +// //录入基础模板数据 +// CsDevModelAddParm csDevModelAddParm = new CsDevModelAddParm(); +// csDevModelAddParm.setDevType(devType); +// csDevModelAddParm.setName(devType); +// csDevModelAddParm.setVersionNo(version); +// csDevModelAddParm.setVersionDate(LocalDateTime.parse(time, DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN))); +// csDevModelAddParm.setFilePath(filePath); +// SoftInfoDto softInfoDto = devModDto.getDataList().get(0).getSoftInfoDto(); +// //录入系统软件表 +// if (!Objects.isNull(softInfoDto)){ +// CsSoftInfoPO csSoftInfoPo = new CsSoftInfoPO(); +// BeanUtils.copyProperties(softInfoDto,csSoftInfoPo); +// csSoftInfoPo.setAppDate(LocalDateTime.parse(softInfoDto.getAppDate(), DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN))); +// String softInfoId = csSoftInfoService.saveData(csSoftInfoPo).getId(); +// csDevModelAddParm.setSoftInfoId(softInfoId); +// } +// devModelFeignClient.addDevModel(csDevModelAddParm); + //录入字典数据 + //录入EPD + List epdDto = devModDto.getDataList().get(0).getEpdDto(); + if (!CollectionUtils.isEmpty(epdDto)){ + insertEpdPqd(epdDto); + } + //录入PQD + List pqdDto = devModDto.getDataList().get(0).getPqdDto(); + if (!CollectionUtils.isEmpty(pqdDto)){ + insertEpdPqd(pqdDto); + } + //录入Bmd + List bmdDto = devModDto.getDataList().get(0).getBmdDto(); + if (!CollectionUtils.isEmpty(bmdDto)){ + insertEpdPqd(pqdDto); + } + + + + } + + /** + * EPD、PQD字典录入 + */ + public void insertEpdPqd(List epdPqdDto) { + List list = epdPqdDto.stream().map(item->{ + CsEpdPqdPO csEpdPqdPo = new CsEpdPqdPO(); + BeanUtils.copyProperties(item,csEpdPqdPo); + CsDictDTO csDictDTO = csDictFeignClient.getOwnAndFatherData(item.getName()).getData(); + if (Objects.isNull(item.getPhase())){ + csEpdPqdPo.setPhase("M"); + } + if (!CollectionUtils.isEmpty(item.getStatMethod())){ + csEpdPqdPo.setStatMethod(item.getStatMethod().stream().map(String::valueOf).collect(Collectors.joining(","))); + } + csEpdPqdPo.setAnotherName(csDictDTO.getName()); + csEpdPqdPo.setClassId(csDictDTO.getFatherName()); + return csEpdPqdPo; + }).collect(Collectors.toList()); + csEpdPqdService.saveData(list); + } + + /** + * Bmd字典录入 + */ + public void insertBmd(List bmdDto) { + List list = bmdDto.stream().map(item->{ + CsBmdPO csBmdPo = new CsBmdPO(); + BeanUtils.copyProperties(item,csBmdPo); + CsDictDTO csDictDTO = csDictFeignClient.getOwnAndFatherData(item.getName()).getData(); + + return csBmdPo; + }).collect(Collectors.toList()); + } + + + } diff --git a/iot-access/pom.xml b/iot-access/pom.xml index 3b1076f..a3c1748 100644 --- a/iot-access/pom.xml +++ b/iot-access/pom.xml @@ -54,6 +54,60 @@ velocity-engine-core ${velocity.version} + + com.njcn + common-db + ${project.version} + + + com.njcn + common-web + ${project.version} + + + com.njcn + common-oss + ${project.version} + + + com.njcn + common-core + ${project.version} + + + com.njcn + common-redis + 1.0.0 + compile + + + org.projectlombok + lombok + + + com.google.code.gson + gson + 2.8.9 + + + org.springframework + spring-web + + + com.njcn + common-swagger + ${project.version} + + + com.alibaba.nacos + nacos-client + + + + org.springframework.kafka + spring-kafka + ${kafka.version} +