datasetItemList) {
+ return datasetItemService.deleteDatasetItemBatch(datasetItemList);
+ }
+}
+
diff --git a/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/controller/SourceTypeKafkaController.java b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/controller/SourceTypeKafkaController.java
new file mode 100644
index 0000000..9053077
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/controller/SourceTypeKafkaController.java
@@ -0,0 +1,23 @@
+package com.cqu.data.controller;
+
+
+import org.springframework.web.bind.annotation.CrossOrigin;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ *
+ * 数据源kafka表 数据源kafka表 前端控制器
+ *
+ *
+ * @author ding
+ * @since 2022-06-27
+ */
+@RestController
+@RequestMapping("/data/source-type-kafka")
+//@CrossOrigin
+public class SourceTypeKafkaController {
+
+}
+
diff --git a/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/controller/SourceTypeLigaController.java b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/controller/SourceTypeLigaController.java
new file mode 100644
index 0000000..7088be1
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/controller/SourceTypeLigaController.java
@@ -0,0 +1,23 @@
+package com.cqu.data.controller;
+
+
+import org.springframework.web.bind.annotation.CrossOrigin;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ *
+ * 数据源liga表 数据源liga表 前端控制器
+ *
+ *
+ * @author ding
+ * @since 2022-06-27
+ */
+@RestController
+@RequestMapping("/data/source-type-liga")
+//@CrossOrigin
+public class SourceTypeLigaController {
+
+}
+
diff --git a/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/controller/SourceTypeMqttController.java b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/controller/SourceTypeMqttController.java
new file mode 100644
index 0000000..3f4e001
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/controller/SourceTypeMqttController.java
@@ -0,0 +1,23 @@
+package com.cqu.data.controller;
+
+
+import org.springframework.web.bind.annotation.CrossOrigin;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ *
+ * 数据源MQTT表 数据源MQTT表 前端控制器
+ *
+ *
+ * @author ding
+ * @since 2022-06-27
+ */
+@RestController
+@RequestMapping("/data/source-type-mqtt")
+//@CrossOrigin
+public class SourceTypeMqttController {
+
+}
+
diff --git a/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/controller/SourceTypeOpcUaController.java b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/controller/SourceTypeOpcUaController.java
new file mode 100644
index 0000000..a04828a
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/controller/SourceTypeOpcUaController.java
@@ -0,0 +1,23 @@
+package com.cqu.data.controller;
+
+
+import org.springframework.web.bind.annotation.CrossOrigin;
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ *
+ * 数据源OPC_UA表 数据源OPC_UA表 前端控制器
+ *
+ *
+ * @author ding
+ * @since 2022-06-27
+ */
+@RestController
+@RequestMapping("/data/source-type-opc-ua")
+//@CrossOrigin
+public class SourceTypeOpcUaController {
+
+}
+
diff --git a/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/entity/AccessService.java b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/entity/AccessService.java
new file mode 100644
index 0000000..8642f18
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/entity/AccessService.java
@@ -0,0 +1,127 @@
+package com.cqu.data.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+
+import java.util.Date;
+import java.io.Serializable;
+
+import com.cqu.base.exception.PhmException;
+import com.cqu.data.entity.enumClass.SourceType;
+import com.cqu.data.entity.enumClass.Status;
+import com.cqu.utils.ResultCode;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ *
+ * 接入服务表 接入服务表
+ *
+ *
+ * @author ding
+ * @since 2022-06-27
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="AccessService对象", description="接入服务表 接入服务表")
+public class AccessService implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty(value = "编号 主键编号")
+ @TableId(value = "id", type = IdType.ID_WORKER_STR)
+ private String id;
+
+ @ApiModelProperty(value = "设备组id 设备组id")
+ private String groupId;
+
+ @ApiModelProperty(value = "接入服务名称 接入服务名称")
+ private String name;
+
+ @ApiModelProperty(value = "数据源类型 数据源类型")
+ private Integer sourceType;
+
+ @ApiModelProperty(value = "数据源类型id 关联数据源类型表的id")
+ private String sourceTypeId;
+
+ @ApiModelProperty(value = "接入服务描述 接入服务描述")
+ private String description;
+
+ @ApiModelProperty(value = "数据包格式 数据包格式,0标准,1轻量,默认0")
+ private Integer packetFormat;
+
+ @ApiModelProperty(value = "时间戳编码 时间戳编码,默认为time")
+ private String timestampCode;
+
+ @ApiModelProperty(value = "时间戳精度 时间戳精度,1秒,0毫秒,默认1")
+ private Integer timestampAccurate;
+
+ @ApiModelProperty(value = "时间戳格式 时间戳格式枚举类,0yyyyMMddHHmmss,默认为0")
+ private Integer timestampFormat;
+
+ @ApiModelProperty(value = "接入任务数量 接入任务数量")
+ private Integer taskNum;
+
+ @ApiModelProperty(value = "状态 状态枚举类,0运行中等等")
+ @TableField("STATUS")
+ private Integer status;
+
+ @ApiModelProperty(value = "是否已被删除 是否已被删除")
+ @TableLogic
+ private Integer isDeleted;
+
+
+ @ApiModelProperty(value = "创建日期 创建时间")
+ @TableField(fill = FieldFill.INSERT)
+ private Date gmtCreate;
+
+ @ApiModelProperty(value = "修改时间 修改时间")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Date gmtModified;
+
+ @TableField(exist = false)
+ private String sourceTypeName;
+
+ @TableField(exist = false)
+ private String statusName;
+
+ public void setSourceTypeName(){
+ if(this.getSourceType()==SourceType.内置MQTT){
+ this.sourceTypeName = "内置MQTT";
+ }else if(this.getSourceType()==SourceType.第三方MQTT){
+ this.sourceTypeName = "第三方MQTT";
+ }else if(this.getSourceType()==SourceType.Kafka){
+ this.sourceTypeName = "Kafka";
+ }else if(this.getSourceType()==SourceType.OPC_UA){
+ this.sourceTypeName = "OPC_UA";
+ }else if(this.getSourceType()==SourceType.Liga实时数据){
+ this.sourceTypeName = "Liga实时数据";
+ }else if(this.getSourceType()==SourceType.Liga历史数据){
+ this.sourceTypeName = "Liga历史数据";
+ }else if(this.getSourceType()==SourceType.Liga振动数据){
+ this.sourceTypeName = "Liga振动数据";
+ }else {
+ throw new PhmException(ResultCode.ERROR,"数据源未定义");
+ }
+ }
+
+ public void setStatusName(){
+
+ if(this.getStatus()==Status.运行中){
+ this.statusName = "运行中";
+ }else if(this.getSourceType()==Status.已停止){
+ this.statusName = "已停止";
+ }else if(this.getSourceType()==Status.等待中){
+ this.statusName = "等待中";
+ }else {
+ throw new PhmException(ResultCode.ERROR,"服务运行状态状态异常");
+ }
+
+
+ }
+
+
+}
diff --git a/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/entity/AccessTask.java b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/entity/AccessTask.java
new file mode 100644
index 0000000..ed32591
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/entity/AccessTask.java
@@ -0,0 +1,74 @@
+package com.cqu.data.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+
+import java.util.Date;
+import java.io.Serializable;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ *
+ * 接入任务表 接入任务表
+ *
+ *
+ * @author ding
+ * @since 2022-06-27
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="AccessTask对象", description="接入任务表 接入任务表")
+public class AccessTask implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty(value = "编号 主键编号")
+ @TableId(value = "id", type = IdType.ID_WORKER_STR)
+ private String id;
+
+ @ApiModelProperty(value = "接入服务id 设备组id")
+ private String serviceId;
+
+ @ApiModelProperty(value = "接入任务名称 接入任务名称")
+ private String name;
+
+ @ApiModelProperty(value = "设备对象id 设备对象id")
+ private String deivceObjectId;
+
+ @ApiModelProperty(value = "部件id 部件id")
+ private String partId;
+
+ @ApiModelProperty(value = "数据集id 数据集id")
+ private Integer datasetId;
+
+ @ApiModelProperty(value = "描述 描述")
+ private String description;
+
+ @ApiModelProperty(value = "状态 状态,0运行1停止等")
+ @TableField("STATUS")
+ private Integer status;
+
+ @ApiModelProperty(value = "接受数据条数 接受数据条数")
+ private Integer dataNum;
+
+ @ApiModelProperty(value = "是否已被删除 是否已被删除")
+ @TableLogic
+ private Integer isDeleted;
+
+ @ApiModelProperty(value = "创建人 创建人")
+ private String createPerson;
+
+ @ApiModelProperty(value = "创建日期 创建时间")
+ @TableField(fill = FieldFill.INSERT)
+ private Date gmtCreate;
+
+ @ApiModelProperty(value = "修改时间 修改时间")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Date gmtModified;
+
+
+}
diff --git a/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/entity/Dataset.java b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/entity/Dataset.java
new file mode 100644
index 0000000..a0875e2
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/entity/Dataset.java
@@ -0,0 +1,86 @@
+package com.cqu.data.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+
+import java.util.Date;
+
+import java.io.Serializable;
+
+import com.cqu.data.entity.enumClass.DataType;
+import com.cqu.data.entity.enumClass.DatasetType;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ *
+ * 数据集表
+ *
+ *
+ * @author ding
+ * @since 2022-06-27
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="DataSets对象", description="数据集表")
+public class Dataset implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty(value = "编号")
+ @TableId(value = "id", type = IdType.ID_WORKER_STR)
+ private String id;
+
+ @ApiModelProperty(value = "设备型号id 设备型号id")
+ private String detailId;
+
+ @ApiModelProperty(value = "名称 名称")
+ private String name;
+
+ @ApiModelProperty(value = "描述 描述")
+ private String description;
+
+ @ApiModelProperty(value = "数据集类型")
+ private Integer datasetType;
+
+ @ApiModelProperty(value = "数据类型")
+ private Integer dataType;
+
+ @ApiModelProperty(value = "是否已被删除 是否已被删除")
+ @TableLogic
+ private Integer isDeleted;
+
+ @ApiModelProperty(value = "创建人 创建人")
+ private String createPerson;
+
+ @ApiModelProperty(value = "创建日期 创建时间")
+ @TableField(fill = FieldFill.INSERT)
+ private Date gmtCreate;
+
+ @ApiModelProperty(value = "修改时间 修改时间")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Date gmtModified;
+
+ @TableField(exist = false)
+ private String datasetTypeName; //数据集类型的名字
+
+ @TableField(exist = false)
+ private String dataTypeName; //数据类型的名字
+
+ public void setDatasetTypeName() {
+ if (this.datasetType == DatasetType.iot数据) {
+ this.datasetTypeName = "iot数据";
+ }
+ }
+
+ public void setDataTypeName() {
+ if (this.dataType == DataType.指标数据) {
+ this.dataTypeName = "指标数据";
+ } else if (this.dataType == DataType.振动数据) {
+ this.dataTypeName = "振动数据";
+ }
+ }
+}
diff --git a/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/entity/DatasetItem.java b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/entity/DatasetItem.java
new file mode 100644
index 0000000..346b9d8
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/entity/DatasetItem.java
@@ -0,0 +1,118 @@
+package com.cqu.data.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+
+import java.util.Date;
+
+import java.io.Serializable;
+
+import com.cqu.data.entity.enumClass.DataType;
+import com.cqu.data.entity.enumClass.DatasetItemType;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ *
+ * 数据集详情表
+ *
+ *
+ * @author ding
+ * @since 2022-06-27
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="DataSetDetail对象", description="数据集详情表")
+public class DatasetItem implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty(value = "编号")
+ @TableId(value = "id", type = IdType.ID_WORKER_STR)
+ private String id;
+
+ @ApiModelProperty(value = "数据集id")
+ private String datasetId;
+
+ @ApiModelProperty(value = "名称 名称")
+ private String name;
+
+ @ApiModelProperty(value = "显示名称")
+ private String showName;
+
+ @ApiModelProperty(value = "编码")
+ private String code;
+
+ @ApiModelProperty(value = "数据类型, 枚举类")
+ private Integer type;
+
+ @ApiModelProperty(value = "是否一级预警")
+ private Boolean isFirstWarning;
+
+ @ApiModelProperty(value = "一级预警值上限")
+ private Double firstCeiling;
+
+ @ApiModelProperty(value = "一级预警值下限")
+ private Double firstFloor;
+
+ @ApiModelProperty(value = "是否二级预警")
+ private Boolean isSecondWarning;
+
+ @ApiModelProperty(value = "二级预警值上限")
+ private Double secondCeiling;
+
+ @ApiModelProperty(value = "二级预警值下限")
+ private Double secondFloor;
+
+ @ApiModelProperty(value = "数据单位")
+ private String unit;
+
+ @ApiModelProperty(value = "描述 描述")
+ private String description;
+
+ @ApiModelProperty(value = "是否已被删除 是否已被删除")
+ @TableLogic
+ private Integer isDeleted;
+
+ @ApiModelProperty(value = "创建人 创建人")
+ private String createPerson;
+
+ @ApiModelProperty(value = "创建日期 创建时间")
+ @TableField(fill = FieldFill.INSERT)
+ private Date gmtCreate;
+
+ @ApiModelProperty(value = "修改时间 修改时间")
+ @TableField(fill=FieldFill.INSERT_UPDATE)
+ private Date gmtModified;
+
+ @TableField(exist = false)
+ private String datasetItemTypeName; //数据项的参数类型
+
+ public void setDatasetItemTypeName() {
+ if (this.type == DatasetItemType.实数) {
+ this.datasetItemTypeName = "实数(double)";
+ } else if (this.type == DatasetItemType.整数) {
+ this.datasetItemTypeName = "整数(int)";
+ } else if (this.type == DatasetItemType.字符串) {
+ this.datasetItemTypeName = "字符串(string)";
+ } else if (this.type == DatasetItemType.布尔) {
+ this.datasetItemTypeName = "布尔(bool)";
+ } else if (this.type == DatasetItemType.实数数组) {
+ this.datasetItemTypeName = "实数数组(double_array)";
+ } else if (this.type == DatasetItemType.整数数组) {
+ this.datasetItemTypeName = "整数数组(int_array)";
+ } else if (this.type == DatasetItemType.字符串数组) {
+ this.datasetItemTypeName = "字符串数组(string_array)";
+ } else if (this.type == DatasetItemType.布尔数组) {
+ this.datasetItemTypeName = "布尔数组(bool_array)";
+ } else if (this.type == DatasetItemType.振动) {
+ this.datasetItemTypeName = "振动(vibration)";
+ } else if (this.type == DatasetItemType.时间) {
+ this.datasetItemTypeName = "时间(time)";
+ }
+
+ }
+}
diff --git a/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/entity/SourceTypeKafka.java b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/entity/SourceTypeKafka.java
new file mode 100644
index 0000000..e25d7cb
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/entity/SourceTypeKafka.java
@@ -0,0 +1,62 @@
+package com.cqu.data.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+
+import java.util.Date;
+import java.io.Serializable;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ *
+ * 数据源kafka表 数据源kafka表
+ *
+ *
+ * @author ding
+ * @since 2022-06-27
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="SourceTypeKafka对象", description="数据源kafka表 数据源kafka表")
+public class SourceTypeKafka implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty(value = "编号 编号")
+ @TableId(value = "id", type = IdType.ID_WORKER_STR)
+ private String id;
+
+
+ @ApiModelProperty(value = "数据源类型名称 数据源类型名称")
+ @TableField(exist = false)
+ private String typeName = "Kafka";
+
+ @ApiModelProperty(value = "服务器地址 服务器地址host,如192.168.118.1")
+ @TableField("HOST")
+ private String host;
+
+ @ApiModelProperty(value = "服务器端口 服务器端口port,1-65535")
+ @TableField("PORT")
+ private String port;
+
+ @ApiModelProperty(value = "是否已被删除 是否已被删除")
+ @TableLogic
+ private Integer isDeleted;
+
+
+
+ @ApiModelProperty(value = "创建日期 创建时间")
+ @TableField(fill = FieldFill.INSERT)
+ private Date gmtCreate;
+
+ @ApiModelProperty(value = "修改时间 修改时间")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Date gmtModified;
+
+
+}
diff --git a/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/entity/SourceTypeLiga.java b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/entity/SourceTypeLiga.java
new file mode 100644
index 0000000..0822124
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/entity/SourceTypeLiga.java
@@ -0,0 +1,54 @@
+package com.cqu.data.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+
+import java.util.Date;
+
+import java.io.Serializable;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ *
+ * 数据源liga表 数据源liga表
+ *
+ *
+ * @author ding
+ * @since 2022-06-27
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="SourceTypeLiga对象", description="数据源liga表 数据源liga表")
+public class SourceTypeLiga implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty(value = "编号 编号")
+ @TableId(value = "id", type = IdType.ID_WORKER_STR)
+ private String id;
+
+
+ @ApiModelProperty(value = "数据源类型名称 数据源类型名称")
+ @TableField(exist = false)
+ private String typeName = "Liga";
+
+ @ApiModelProperty(value = "是否已被删除 是否已被删除")
+ @TableLogic
+ private Integer isDeleted;
+
+
+
+ @ApiModelProperty(value = "创建日期 创建时间")
+ @TableField(fill = FieldFill.INSERT)
+ private Date gmtCreate;
+
+ @ApiModelProperty(value = "修改时间 修改时间")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Date gmtModified;
+
+
+}
diff --git a/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/entity/SourceTypeMqtt.java b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/entity/SourceTypeMqtt.java
new file mode 100644
index 0000000..435bdf7
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/entity/SourceTypeMqtt.java
@@ -0,0 +1,102 @@
+package com.cqu.data.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+
+import java.util.Date;
+import java.io.Serializable;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ *
+ * 数据源MQTT表 数据源MQTT表
+ *
+ *
+ * @author ding
+ * @since 2022-06-27
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="SourceTypeMqtt对象", description="数据源MQTT表 数据源MQTT表")
+public class SourceTypeMqtt implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty(value = "编号 编号")
+ @TableId(value = "id", type = IdType.ID_WORKER_STR)
+ private String id;
+
+
+ @ApiModelProperty(value = "数据源类型名称 数据源类型名称,什么表就是什么名称")
+ @TableField(exist = false)
+ private String typeName = "Mqtt";
+
+ @ApiModelProperty(value = "是否是内置MQTT 是否是内置数据源,0内置,1第三方,默认0")
+ private Integer isInner;
+
+ @ApiModelProperty(value = "是否加密 是否加密,0不加密,1加密,默认为0")
+ private Boolean isEncryption;
+
+ @ApiModelProperty(value = "是否TSL通信 是否开启TSL通信,0不开启1开启,默认为0")
+ @TableField("is_TSL_connect")
+ private Boolean isTslConnect;
+
+ @ApiModelProperty(value = "加密类型 加密类型,DES,AES,默认DES")
+ private String encryptionType;
+
+ @ApiModelProperty(value = "加密秘钥 加密秘钥")
+ private String encryptionPassword;
+
+ @ApiModelProperty(value = "服务器地址 服务器地址host,如192.168.118.1")
+ @TableField("HOST")
+ private String host;
+
+ @ApiModelProperty(value = "服务器端口 服务器端口port,1-65535")
+ @TableField("PORT")
+ private String port;
+
+ @ApiModelProperty(value = "开启单一连接 是否开启单一连接,0不开启1开启,默认为0")
+ private Boolean isSingleConnect;
+
+ @ApiModelProperty(value = "mqtt的client_id mqtt的client_id")
+ private String clientId;
+
+ @ApiModelProperty(value = "是否匿名连接 是否开启匿名连接,0不开启1开启,默认为1")
+ private Boolean isAnonymousConnect;
+
+ @ApiModelProperty(value = "mqtt的用户名 mqtt的用户名")
+ private String username;
+
+ @ApiModelProperty(value = "mqtt的密码 mqtt的密码")
+ @TableField("PASSWORD")
+ private String password;
+
+ @ApiModelProperty(value = "连接串 连接串")
+ @TableField("CONNECT")
+ private String connect;
+
+ @ApiModelProperty(value = "证书 证书")
+ @TableField("certificate")
+ private String certificate;
+
+ @ApiModelProperty(value = "是否已被删除 是否已被删除")
+ @TableLogic
+ private Integer isDeleted;
+
+
+
+ @ApiModelProperty(value = "创建日期 创建时间")
+ @TableField(fill = FieldFill.INSERT)
+ private Date gmtCreate;
+
+ @ApiModelProperty(value = "修改时间 修改时间")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Date gmtModified;
+
+
+}
diff --git a/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/entity/SourceTypeOpcUa.java b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/entity/SourceTypeOpcUa.java
new file mode 100644
index 0000000..0d15b77
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/entity/SourceTypeOpcUa.java
@@ -0,0 +1,71 @@
+package com.cqu.data.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+
+import java.util.Date;
+import java.io.Serializable;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ *
+ * 数据源OPC_UA表 数据源OPC_UA表
+ *
+ *
+ * @author ding
+ * @since 2022-06-27
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="SourceTypeOpcUa对象", description="数据源OPC_UA表 数据源OPC_UA表")
+public class SourceTypeOpcUa implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty(value = "编号 编号")
+ @TableId(value = "id", type = IdType.ID_WORKER_STR)
+ private String id;
+
+// @ApiModelProperty(value = "接入服务id 接入服务id")
+// private String serviceId;
+
+ @ApiModelProperty(value = "数据源类型名称 数据源类型名称")
+ @TableField(exist = false)
+ private String typeName = "OPC-UA";
+
+ @ApiModelProperty(value = "服务器地址 服务器地址host,如192.168.118.1")
+ @TableField("HOST")
+ private String host;
+
+ @ApiModelProperty(value = "服务器端口 服务器端口port,1-65535")
+ @TableField("PORT")
+ private String port;
+
+ @ApiModelProperty(value = "是否匿名连接 是否开启匿名连接,0不开启1开启,默认为1")
+ private Boolean isAnonymousConnect;
+
+ @ApiModelProperty(value = "用户名")
+ private String username;
+
+ @ApiModelProperty(value = "密码 密码")
+ @TableField("PASSWORD")
+ private String password;
+
+ @ApiModelProperty(value = "是否已被删除 是否已被删除")
+ @TableLogic
+ private Integer isDeleted;
+
+ @ApiModelProperty(value = "创建日期 创建时间")
+ @TableField(fill = FieldFill.INSERT)
+ private Date gmtCreate;
+
+ @ApiModelProperty(value = "修改时间 修改时间")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Date gmtModified;
+
+
+}
diff --git a/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/entity/enumClass/DataType.java b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/entity/enumClass/DataType.java
new file mode 100644
index 0000000..c955bb4
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/entity/enumClass/DataType.java
@@ -0,0 +1,14 @@
+package com.cqu.data.entity.enumClass;
+
+/**
+ * 新建数据集时,选择的数据类型:如振动数据、指标数据
+ * @Author: ranmaoqi
+ * @Date: 2022/11/8 15:24
+ */
+public class DataType {
+
+ public static final Integer 指标数据 = 0; //指标数据
+
+ public static final Integer 振动数据 = 1; //振动数据
+
+}
diff --git a/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/entity/enumClass/DatasetItemType.java b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/entity/enumClass/DatasetItemType.java
new file mode 100644
index 0000000..5fcfb37
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/entity/enumClass/DatasetItemType.java
@@ -0,0 +1,21 @@
+package com.cqu.data.entity.enumClass;
+
+/**
+ * 数据集中新建数据项(参数)的数据类型
+ * @Author: ranmaoqi
+ * @Date: 2022/11/8 16:46
+ */
+public class DatasetItemType {
+
+ public static final Integer 实数 = 0;
+ public static final Integer 整数 = 1;
+ public static final Integer 字符串 = 2;
+ public static final Integer 布尔 = 3;
+ public static final Integer 实数数组 = 4;
+ public static final Integer 整数数组 = 5;
+ public static final Integer 字符串数组 = 6;
+ public static final Integer 布尔数组 = 7;
+ public static final Integer 振动 = 8;
+ public static final Integer 时间 = 9;
+
+}
diff --git a/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/entity/enumClass/DatasetType.java b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/entity/enumClass/DatasetType.java
new file mode 100644
index 0000000..b43a714
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/entity/enumClass/DatasetType.java
@@ -0,0 +1,12 @@
+package com.cqu.data.entity.enumClass;
+
+/**
+ * 新建数据集时,选择数据集类型
+ * @Author: ranmaoqi
+ * @Date: 2022/11/8 15:21
+ */
+public class DatasetType {
+
+ public static final Integer iot数据 = 0;
+
+}
diff --git a/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/entity/enumClass/SourceType.java b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/entity/enumClass/SourceType.java
new file mode 100644
index 0000000..ba1c7e0
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/entity/enumClass/SourceType.java
@@ -0,0 +1,18 @@
+package com.cqu.data.entity.enumClass;
+
+
+/**
+ * 后续可能扩展新的数据源类型
+ */
+public class SourceType {
+
+ public static final Integer 内置MQTT= 0;
+ public static final Integer 第三方MQTT = 1;
+ public static final Integer Kafka = 2;
+ public static final Integer OPC_UA = 3;
+ public static final Integer Liga实时数据 = 4;
+ public static final Integer Liga历史数据 = 5;
+ public static final Integer Liga振动数据 = 6;
+
+
+}
diff --git a/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/entity/enumClass/Status.java b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/entity/enumClass/Status.java
new file mode 100644
index 0000000..3963d38
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/entity/enumClass/Status.java
@@ -0,0 +1,20 @@
+package com.cqu.data.entity.enumClass;
+
+
+
+/**
+ * 后续可能扩展新的状态
+ */
+public class Status {
+
+
+ public static final Integer 运行中=0;
+
+ public static final Integer 已停止=1;
+
+ public static final Integer 等待中 =2;
+
+
+
+
+}
diff --git a/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/entity/vo/Device.java b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/entity/vo/Device.java
new file mode 100644
index 0000000..af78470
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/entity/vo/Device.java
@@ -0,0 +1,84 @@
+package com.cqu.data.entity.vo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ *
+ * 设备 设备
+ *
+ *
+ * @author ranmaoqi
+ * @since 2022-05-18
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="Device对象", description="设备 设备")
+public class Device implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty(value = "编号")
+ @TableId(value = "id", type = IdType.ID_WORKER_STR)
+ private String id;
+
+ @ApiModelProperty(value = "设备组id")
+ private String groupId;
+
+ @ApiModelProperty(value = "设备标识")
+ private String name;
+
+ @ApiModelProperty(value = "设备类型")
+ private String typeId;
+
+ @ApiModelProperty(value = "设备型号")
+ private String detailId;
+
+ @ApiModelProperty(value = "设备编码")
+ private String deviceCode;
+
+ @ApiModelProperty(value = "出厂日期")
+ @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
+ private Date produceTime;
+
+ @ApiModelProperty(value = "东经")
+ private String eastLongitude;
+
+ @ApiModelProperty(value = "北纬")
+ private String northLatitude;
+
+ @ApiModelProperty(value = "描述")
+ private String description;
+
+ @ApiModelProperty(value = "是否已被删除")
+ @TableLogic
+ private Integer isDeleted;
+
+ @ApiModelProperty(value = "创建人")
+ private String createPerson;
+
+ @ApiModelProperty(value = "创建日期")
+ @TableField(fill = FieldFill.INSERT)
+ private Date gmtCreate;
+
+ @ApiModelProperty(value = "修改时间")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Date gmtModified;
+
+ @TableField(exist = false)
+ private String typeName;
+
+ @TableField(exist = false)
+ private String detailName;
+
+
+}
diff --git a/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/entity/vo/DeviceTypeDetail.java b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/entity/vo/DeviceTypeDetail.java
new file mode 100644
index 0000000..7cba54d
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/entity/vo/DeviceTypeDetail.java
@@ -0,0 +1,70 @@
+package com.cqu.data.entity.vo;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ *
+ * 设备型号 设备型号表
+ *
+ *
+ * @author testjava
+ * @since 2022-04-11
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="DeviceTypeDetail对象", description="设备型号 设备型号表")
+public class DeviceTypeDetail implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty(value = "编号")
+ @TableId(value = "id", type = IdType.ID_WORKER_STR)
+ private String id;
+
+ @ApiModelProperty(value = "设备类型id")
+ private String typeId;
+
+ @ApiModelProperty(value = "设备分组id")
+ private String typeGroupId;
+
+ @ApiModelProperty(value = "设备标识")
+ private String name;
+
+ @ApiModelProperty(value = "型号名称")
+ private String showName;
+
+ @ApiModelProperty(value = "规格类型")
+ private String specificationType;
+
+ @ApiModelProperty(value = "生产厂商")
+ private String manufacturer;
+
+ @ApiModelProperty(value = "描述")
+ private String description;
+
+ @ApiModelProperty(value = "是否已被删除")
+ @TableLogic
+ private Integer isDeleted;
+
+ @ApiModelProperty(value = "创建人")
+ private String createPerson;
+
+ @ApiModelProperty(value = "创建日期")
+ @TableField(fill = FieldFill.INSERT)
+ private Date gmtCreate;
+
+ @ApiModelProperty(value = "修改时间")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Date gmtModified;
+
+
+}
diff --git a/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/entity/vo/GraphVo.java b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/entity/vo/GraphVo.java
new file mode 100644
index 0000000..aa9486f
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/entity/vo/GraphVo.java
@@ -0,0 +1,18 @@
+package com.cqu.data.entity.vo;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * 结构图谱数据图谱的graph
+ * @Author: ranmaoqi
+ * @Date: 2023/01/11 16:51
+ */
+@Data
+public class GraphVo {
+
+ List nodes;
+ List links;
+
+}
diff --git a/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/entity/vo/LinksVo.java b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/entity/vo/LinksVo.java
new file mode 100644
index 0000000..cdc2b7c
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/entity/vo/LinksVo.java
@@ -0,0 +1,15 @@
+package com.cqu.data.entity.vo;
+
+import lombok.Data;
+
+/**
+ * @Author: ranmaoqi
+ * @Date: 2023/01/11 16:52
+ */
+@Data
+public class LinksVo {
+
+ String source;
+ String target;
+
+}
diff --git a/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/entity/vo/NodesVo.java b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/entity/vo/NodesVo.java
new file mode 100644
index 0000000..df15e1c
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/entity/vo/NodesVo.java
@@ -0,0 +1,20 @@
+package com.cqu.data.entity.vo;
+
+import lombok.Data;
+
+/**
+ * 结构图普中的node
+ * @Author: ranmaoqi
+ * @Date: 2023/01/11 16:52
+ */
+@Data
+public class NodesVo {
+
+ String id;
+ String name;
+ int symbolSize;
+ double x;
+ double y;
+ int category;
+
+}
diff --git a/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/entity/vo/ServiceFormVo.java b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/entity/vo/ServiceFormVo.java
new file mode 100644
index 0000000..84efdf6
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/entity/vo/ServiceFormVo.java
@@ -0,0 +1,28 @@
+package com.cqu.data.entity.vo;
+
+
+import io.swagger.models.auth.In;
+import lombok.Data;
+
+@Data
+public class ServiceFormVo {
+
+ private String name;
+ private Integer sourceType;
+ private Boolean isEncryption;
+ private String encryptionType;
+ private String encryptionPassword;
+ private String host;
+ private String port;
+ private Boolean isSingleConnect;
+ private String clientId;
+ private Boolean isAnonymousConnect;
+ private String username;
+ private String password;
+ private Boolean isTslConnect;
+ private String description;
+ private Integer packetFormat;
+ private String timestampCode;
+ private Integer timestampAccurate;
+ private Integer timestampFormat;
+}
diff --git a/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/mapper/AccessServiceMapper.java b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/mapper/AccessServiceMapper.java
new file mode 100644
index 0000000..c730baf
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/mapper/AccessServiceMapper.java
@@ -0,0 +1,16 @@
+package com.cqu.data.mapper;
+
+import com.cqu.data.entity.AccessService;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ *
+ * 接入服务表 接入服务表 Mapper 接口
+ *
+ *
+ * @author ding
+ * @since 2022-06-27
+ */
+public interface AccessServiceMapper extends BaseMapper {
+
+}
diff --git a/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/mapper/AccessTaskMapper.java b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/mapper/AccessTaskMapper.java
new file mode 100644
index 0000000..540fc30
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/mapper/AccessTaskMapper.java
@@ -0,0 +1,16 @@
+package com.cqu.data.mapper;
+
+import com.cqu.data.entity.AccessTask;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ *
+ * 接入任务表 接入任务表 Mapper 接口
+ *
+ *
+ * @author ding
+ * @since 2022-06-27
+ */
+public interface AccessTaskMapper extends BaseMapper {
+
+}
diff --git a/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/mapper/DatasetItemMapper.java b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/mapper/DatasetItemMapper.java
new file mode 100644
index 0000000..f11f5b0
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/mapper/DatasetItemMapper.java
@@ -0,0 +1,22 @@
+package com.cqu.data.mapper;
+
+import com.cqu.data.entity.DatasetItem;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+/**
+ *
+ * 数据集详情表 Mapper 接口
+ *
+ *
+ * @author ding
+ * @since 2022-06-27
+ */
+@Mapper
+public interface DatasetItemMapper extends BaseMapper {
+
+ //通过数据集Id得到每一个数据项的名字
+ List getItemNameByDatasetId(String datasetId);
+}
diff --git a/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/mapper/DatasetMapper.java b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/mapper/DatasetMapper.java
new file mode 100644
index 0000000..59aa6fa
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/mapper/DatasetMapper.java
@@ -0,0 +1,26 @@
+package com.cqu.data.mapper;
+
+import com.cqu.data.entity.Dataset;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+/**
+ *
+ * 数据集表 Mapper 接口
+ *
+ *
+ * @author ding
+ * @since 2022-06-27
+ */
+@Mapper
+public interface DatasetMapper extends BaseMapper {
+
+ /**
+ * 根据detailId查询数据集IDs
+ * @param detailId
+ * @return
+ */
+ List getDatasetIdsByDetailId(String detailId);
+}
diff --git a/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/mapper/SourceTypeKafkaMapper.java b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/mapper/SourceTypeKafkaMapper.java
new file mode 100644
index 0000000..26a3fb0
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/mapper/SourceTypeKafkaMapper.java
@@ -0,0 +1,16 @@
+package com.cqu.data.mapper;
+
+import com.cqu.data.entity.SourceTypeKafka;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ *
+ * 数据源kafka表 数据源kafka表 Mapper 接口
+ *
+ *
+ * @author ding
+ * @since 2022-06-27
+ */
+public interface SourceTypeKafkaMapper extends BaseMapper {
+
+}
diff --git a/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/mapper/SourceTypeLigaMapper.java b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/mapper/SourceTypeLigaMapper.java
new file mode 100644
index 0000000..81914cb
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/mapper/SourceTypeLigaMapper.java
@@ -0,0 +1,16 @@
+package com.cqu.data.mapper;
+
+import com.cqu.data.entity.SourceTypeLiga;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ *
+ * 数据源liga表 数据源liga表 Mapper 接口
+ *
+ *
+ * @author ding
+ * @since 2022-06-27
+ */
+public interface SourceTypeLigaMapper extends BaseMapper {
+
+}
diff --git a/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/mapper/SourceTypeMqttMapper.java b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/mapper/SourceTypeMqttMapper.java
new file mode 100644
index 0000000..d784ec4
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/mapper/SourceTypeMqttMapper.java
@@ -0,0 +1,16 @@
+package com.cqu.data.mapper;
+
+import com.cqu.data.entity.SourceTypeMqtt;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ *
+ * 数据源MQTT表 数据源MQTT表 Mapper 接口
+ *
+ *
+ * @author ding
+ * @since 2022-06-27
+ */
+public interface SourceTypeMqttMapper extends BaseMapper {
+
+}
diff --git a/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/mapper/SourceTypeOpcUaMapper.java b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/mapper/SourceTypeOpcUaMapper.java
new file mode 100644
index 0000000..19f58b5
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/mapper/SourceTypeOpcUaMapper.java
@@ -0,0 +1,16 @@
+package com.cqu.data.mapper;
+
+import com.cqu.data.entity.SourceTypeOpcUa;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ *
+ * 数据源OPC_UA表 数据源OPC_UA表 Mapper 接口
+ *
+ *
+ * @author ding
+ * @since 2022-06-27
+ */
+public interface SourceTypeOpcUaMapper extends BaseMapper {
+
+}
diff --git a/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/mapper/xml/AccessServiceMapper.xml b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/mapper/xml/AccessServiceMapper.xml
new file mode 100644
index 0000000..1134c9a
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/mapper/xml/AccessServiceMapper.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/mapper/xml/AccessTaskMapper.xml b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/mapper/xml/AccessTaskMapper.xml
new file mode 100644
index 0000000..527a80e
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/mapper/xml/AccessTaskMapper.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/mapper/xml/DatasetItemMapper.xml b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/mapper/xml/DatasetItemMapper.xml
new file mode 100644
index 0000000..c3ce40b
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/mapper/xml/DatasetItemMapper.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
diff --git a/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/mapper/xml/DatasetMapper.xml b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/mapper/xml/DatasetMapper.xml
new file mode 100644
index 0000000..10c3d58
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/mapper/xml/DatasetMapper.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
diff --git a/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/mapper/xml/SourceTypeKafkaMapper.xml b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/mapper/xml/SourceTypeKafkaMapper.xml
new file mode 100644
index 0000000..9cda1cc
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/mapper/xml/SourceTypeKafkaMapper.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/mapper/xml/SourceTypeLigaMapper.xml b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/mapper/xml/SourceTypeLigaMapper.xml
new file mode 100644
index 0000000..07e5eb3
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/mapper/xml/SourceTypeLigaMapper.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/mapper/xml/SourceTypeMqttMapper.xml b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/mapper/xml/SourceTypeMqttMapper.xml
new file mode 100644
index 0000000..ad17fec
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/mapper/xml/SourceTypeMqttMapper.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/mapper/xml/SourceTypeOpcUaMapper.xml b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/mapper/xml/SourceTypeOpcUaMapper.xml
new file mode 100644
index 0000000..e336440
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/mapper/xml/SourceTypeOpcUaMapper.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/service/AccessServiceService.java b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/service/AccessServiceService.java
new file mode 100644
index 0000000..ad6ea20
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/service/AccessServiceService.java
@@ -0,0 +1,22 @@
+package com.cqu.data.service;
+
+import com.cqu.data.entity.AccessService;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.cqu.data.entity.vo.ServiceFormVo;
+import com.cqu.utils.Result;
+
+/**
+ *
+ * 接入服务表 接入服务表 服务类
+ *
+ *
+ * @author ding
+ * @since 2022-06-27
+ */
+public interface AccessServiceService extends IService {
+
+ Result listServiceByGroupId(String groupId, Integer current, Integer size);
+
+ boolean saveService(String deviceGroupId, ServiceFormVo serviceForm);
+
+}
diff --git a/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/service/AccessTaskService.java b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/service/AccessTaskService.java
new file mode 100644
index 0000000..175ce85
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/service/AccessTaskService.java
@@ -0,0 +1,16 @@
+package com.cqu.data.service;
+
+import com.cqu.data.entity.AccessTask;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ *
+ * 接入任务表 接入任务表 服务类
+ *
+ *
+ * @author ding
+ * @since 2022-06-27
+ */
+public interface AccessTaskService extends IService {
+
+}
diff --git a/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/service/DatasetItemService.java b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/service/DatasetItemService.java
new file mode 100644
index 0000000..7b60ad8
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/service/DatasetItemService.java
@@ -0,0 +1,49 @@
+package com.cqu.data.service;
+
+import com.cqu.data.entity.DatasetItem;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.cqu.utils.Result;
+
+import java.util.List;
+
+/**
+ *
+ * 数据集详情表 服务类
+ *
+ *
+ * @author ding
+ * @since 2022-06-27
+ */
+public interface DatasetItemService extends IService {
+
+ /**
+ * 根据数据集id分页查询数据集项列表
+ * @param datasetId 数据集id
+ * @param current 当前页
+ * @param size 每页显示条数
+ * @return
+ */
+ Result listDatasetItemByDatasetId(String datasetId, Integer current, Integer size);
+
+ /**
+ * 在id为datasetId的数据集下,新建数据项
+ * @param datasetId 数据集Id
+ * @param datasetItem 数据项实体
+ * @return
+ */
+ Result addDatasetItemByDatasetId(String datasetId, DatasetItem datasetItem);
+
+ /**
+ * 编辑数据项
+ * @param datasetItem 数据项实体
+ * @return
+ */
+ Result updateDatasetItem(DatasetItem datasetItem);
+
+ /**
+ * 多选批量删除数据项
+ * @param datasetItemList 数据项实体列表
+ * @return
+ */
+ Result deleteDatasetItemBatch(List datasetItemList);
+}
diff --git a/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/service/DatasetService.java b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/service/DatasetService.java
new file mode 100644
index 0000000..44dae85
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/service/DatasetService.java
@@ -0,0 +1,63 @@
+package com.cqu.data.service;
+
+import com.cqu.data.entity.Dataset;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.cqu.utils.Result;
+
+import java.util.List;
+
+/**
+ *
+ * 数据集表 服务类
+ *
+ *
+ * @author ding
+ * @since 2022-06-27
+ */
+public interface DatasetService extends IService {
+
+ /**
+ * 根据设备型号id查询设备型号下的数据集
+ * @param detailId 设备型号id
+ * @param current 当前页
+ * @param size 每页大小
+ * @return
+ */
+ Result listDatasetByDetailId(String detailId, Integer current, Integer size);
+
+ /**
+ * 在设备型号下新建数据集
+ * @param detailId 设备型号id
+ * @param dataset 数据集实体
+ * @return
+ */
+ Result addDatasetByDetailId(String detailId, Dataset dataset);
+
+ /**
+ * 编辑数据集信息
+ * @param dataset 数据集实体
+ * @return
+ */
+ Result updateDataset(Dataset dataset);
+
+ /**
+ * 多选批量删除数据集
+ * @param datasetList 数据集实体列表
+ * @return
+ */
+ Result deleteDatasetBatch(List datasetList);
+
+ /**
+ * 根据detailId查询数据图谱
+ * @param detailId
+ * @return
+ */
+ Result getDataGraphByDetailId(String detailId);
+
+ /**
+ * 根据deviceId查询数据图谱
+ * @param deviceId
+ * @return
+ */
+ Result getDataGraphByDeviceId(String deviceId);
+}
diff --git a/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/service/SourceTypeKafkaService.java b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/service/SourceTypeKafkaService.java
new file mode 100644
index 0000000..785b11d
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/service/SourceTypeKafkaService.java
@@ -0,0 +1,16 @@
+package com.cqu.data.service;
+
+import com.cqu.data.entity.SourceTypeKafka;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ *
+ * 数据源kafka表 数据源kafka表 服务类
+ *
+ *
+ * @author ding
+ * @since 2022-06-27
+ */
+public interface SourceTypeKafkaService extends IService {
+
+}
diff --git a/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/service/SourceTypeLigaService.java b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/service/SourceTypeLigaService.java
new file mode 100644
index 0000000..634ed8a
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/service/SourceTypeLigaService.java
@@ -0,0 +1,16 @@
+package com.cqu.data.service;
+
+import com.cqu.data.entity.SourceTypeLiga;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ *
+ * 数据源liga表 数据源liga表 服务类
+ *
+ *
+ * @author ding
+ * @since 2022-06-27
+ */
+public interface SourceTypeLigaService extends IService {
+
+}
diff --git a/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/service/SourceTypeMqttService.java b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/service/SourceTypeMqttService.java
new file mode 100644
index 0000000..b0f5591
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/service/SourceTypeMqttService.java
@@ -0,0 +1,16 @@
+package com.cqu.data.service;
+
+import com.cqu.data.entity.SourceTypeMqtt;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ *
+ * 数据源MQTT表 数据源MQTT表 服务类
+ *
+ *
+ * @author ding
+ * @since 2022-06-27
+ */
+public interface SourceTypeMqttService extends IService {
+
+}
diff --git a/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/service/SourceTypeOpcUaService.java b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/service/SourceTypeOpcUaService.java
new file mode 100644
index 0000000..0747d7a
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/service/SourceTypeOpcUaService.java
@@ -0,0 +1,16 @@
+package com.cqu.data.service;
+
+import com.cqu.data.entity.SourceTypeOpcUa;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ *
+ * 数据源OPC_UA表 数据源OPC_UA表 服务类
+ *
+ *
+ * @author ding
+ * @since 2022-06-27
+ */
+public interface SourceTypeOpcUaService extends IService {
+
+}
diff --git a/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/service/impl/AccessServiceServiceImpl.java b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/service/impl/AccessServiceServiceImpl.java
new file mode 100644
index 0000000..565b948
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/service/impl/AccessServiceServiceImpl.java
@@ -0,0 +1,138 @@
+package com.cqu.data.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.cqu.data.entity.*;
+import com.cqu.data.entity.enumClass.SourceType;
+import com.cqu.data.entity.vo.ServiceFormVo;
+import com.cqu.data.mapper.*;
+import com.cqu.data.service.AccessServiceService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.cqu.utils.Result;
+import org.apache.commons.lang3.StringUtils;
+import org.junit.rules.TestRule;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Bean;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ *
+ * 接入服务表 接入服务表 服务实现类
+ *
+ *
+ * @author ding
+ * @since 2022-06-27
+ */
+@Service
+public class AccessServiceServiceImpl extends ServiceImpl implements AccessServiceService {
+
+ @Autowired
+ private SourceTypeKafkaMapper sourceTypeKafkaMapper;
+
+ @Autowired
+ private SourceTypeLigaMapper sourceTypeLigaMapper;
+
+ @Autowired
+ private SourceTypeMqttMapper sourceTypeMqttMapper;
+
+ @Autowired
+ private SourceTypeOpcUaMapper sourceTypeOpcUaMapper;
+
+
+ @Override
+ public Result listServiceByGroupId(String groupId, Integer current, Integer size) {
+
+ Page page = new Page<>(current,size);
+ QueryWrapper query = new QueryWrapper<>();
+ query.eq("group_id",groupId);
+ query.orderByAsc("gmt_create");
+ baseMapper.selectPage(page,query);
+ List records = page.getRecords();
+ for (AccessService accessService : records) {
+ accessService.setSourceTypeName();
+ accessService.setStatusName();
+ }
+ long total = page.getTotal();
+ return Result.ok().data("records", records).data("total", total);
+
+ }
+
+ @Override
+ public boolean saveService(String deviceGroupId, ServiceFormVo serviceForm) {
+
+ Integer sourceType = serviceForm.getSourceType();
+
+ AccessService accessService = new AccessService();
+ BeanUtils.copyProperties(serviceForm,accessService);
+ accessService.setGroupId(deviceGroupId);
+
+ //插入条数
+ int insertNum =0;
+ //插入之后对应sourceType表的id
+ String id = "";
+ //MQTT表
+ if(sourceType == SourceType.内置MQTT ||sourceType == SourceType.第三方MQTT){
+ SourceTypeMqtt sourceTypeMqtt = new SourceTypeMqtt();
+
+ BeanUtils.copyProperties(serviceForm,sourceTypeMqtt);
+ if(sourceType ==1){
+ sourceTypeMqtt.setIsInner(1);
+ }
+
+ //TODO 连接串暂时还未设置
+// if (!sourceTypeMqtt.getIsTslConnect()){
+// String connect = "mqtt://0d85b80a3ae14c799f1a0ed76cbf3d99:02602511d28645e9b934ff280918bb6b@192.168.122.205:31419;tls=false;client_id=df0a3af17cd04a2fad99e99672b43457;"
+// }
+ System.err.println("sourceTypeMqtt:"+sourceTypeMqtt);
+ insertNum = sourceTypeMqttMapper.insert(sourceTypeMqtt);
+ id = sourceTypeMqtt.getId();
+
+ } else if(sourceType == SourceType.Kafka){
+ //Kafka表
+ SourceTypeKafka sourceTypeKafka = new SourceTypeKafka();
+
+ BeanUtils.copyProperties(serviceForm,sourceTypeKafka);
+ System.err.println("sourceTypeKafka:"+sourceTypeKafka);
+ insertNum = sourceTypeKafkaMapper.insert(sourceTypeKafka);
+ id = sourceTypeKafka.getId();
+
+ }else if(sourceType == SourceType.OPC_UA){
+ //OPC-UA表
+ SourceTypeOpcUa sourceTypeOpcUa = new SourceTypeOpcUa();
+ BeanUtils.copyProperties(serviceForm,sourceTypeOpcUa);
+ System.err.println("sourceTypeOpcUa:"+sourceTypeOpcUa);
+ insertNum = sourceTypeOpcUaMapper.insert(sourceTypeOpcUa);
+ id = sourceTypeOpcUa.getId();
+
+ }else if(sourceType == SourceType.Liga实时数据||sourceType == SourceType.Liga历史数据||sourceType == SourceType.Liga振动数据){
+ //Liga表
+ SourceTypeLiga sourceTypeLiga = new SourceTypeLiga();
+ BeanUtils.copyProperties(serviceForm,sourceTypeLiga);
+ System.err.println("sourceTypeLiga:"+sourceTypeLiga);
+ insertNum = sourceTypeLigaMapper.insert(sourceTypeLiga);
+ id=sourceTypeLiga.getId();
+ }else {
+ return false;
+ }
+
+
+ if (insertNum == 0 || StringUtils.isEmpty(id)){
+ return false;
+ }
+
+ accessService.setSourceTypeId(id);
+ System.out.println("accessService:"+accessService);
+ int insertServiceNum= baseMapper.insert(accessService);
+
+ if(insertServiceNum ==0){
+ return false;
+ }
+
+ return true;
+ }
+
+
+}
diff --git a/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/service/impl/AccessTaskServiceImpl.java b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/service/impl/AccessTaskServiceImpl.java
new file mode 100644
index 0000000..bc6bbe0
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/service/impl/AccessTaskServiceImpl.java
@@ -0,0 +1,20 @@
+package com.cqu.data.service.impl;
+
+import com.cqu.data.entity.AccessTask;
+import com.cqu.data.mapper.AccessTaskMapper;
+import com.cqu.data.service.AccessTaskService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ *
+ * 接入任务表 接入任务表 服务实现类
+ *
+ *
+ * @author ding
+ * @since 2022-06-27
+ */
+@Service
+public class AccessTaskServiceImpl extends ServiceImpl implements AccessTaskService {
+
+}
diff --git a/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/service/impl/DatasetItemServiceImpl.java b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/service/impl/DatasetItemServiceImpl.java
new file mode 100644
index 0000000..f23e07f
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/service/impl/DatasetItemServiceImpl.java
@@ -0,0 +1,106 @@
+package com.cqu.data.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.cqu.data.entity.DatasetItem;
+import com.cqu.data.mapper.DatasetItemMapper;
+import com.cqu.data.service.DatasetItemService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.cqu.utils.Result;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ *
+ * 数据集详情表 服务实现类
+ *
+ *
+ * @author ding
+ * @since 2022-06-27
+ */
+@Service
+public class DatasetItemServiceImpl extends ServiceImpl implements DatasetItemService {
+
+ /**
+ * 根据数据集id分页查询数据集项列表
+ * @param datasetId 数据集id
+ * @param current 当前页
+ * @param size 每页显示条数
+ * @return
+ */
+ @Override
+ public Result listDatasetItemByDatasetId(String datasetId, Integer current, Integer size) {
+ Page page = new Page<>(current, size);
+ QueryWrapper wrapper = new QueryWrapper<>();
+ wrapper.eq("dataset_id", datasetId);
+ baseMapper.selectPage(page, wrapper);
+ List records = page.getRecords();
+ long total = page.getTotal();
+
+ for (DatasetItem datasetItem : records) {
+ datasetItem.setDatasetItemTypeName();
+ }
+ return Result.ok().data("records", records).data("total", total);
+ }
+
+ /**
+ * 在id为datasetId的数据集下,新建数据项
+ * @param datasetId 数据集Id
+ * @param datasetItem 数据项实体
+ * @return
+ */
+ @Override
+ public Result addDatasetItemByDatasetId(String datasetId, DatasetItem datasetItem) {
+ //根据Name字段判断该数据项是否已存在
+ QueryWrapper wrapper = new QueryWrapper<>();
+ wrapper.eq("dataset_id", datasetId);
+ wrapper.eq("name", datasetItem.getName());
+ Integer count = baseMapper.selectCount(wrapper);
+ if (count == 0) {
+ int insert = baseMapper.insert(datasetItem.setDatasetId(datasetId));
+ return insert == 0 ? Result.error() : Result.ok();
+ } else {
+ return Result.error().message("新建数据项失败,标识重复!");
+ }
+ }
+
+ /**
+ * 编辑数据项
+ * @param datasetItem 数据项实体
+ * @return
+ */
+ @Override
+ public Result updateDatasetItem(DatasetItem datasetItem) {
+ /*
+ * 修改时,要检查修改的数据项标识是否和已存在的相同
+ */
+ QueryWrapper wrapper = new QueryWrapper<>();
+ wrapper.ne("id", datasetItem.getId());
+ wrapper.eq("dataset_id", datasetItem.getDatasetId());
+ wrapper.eq("name", datasetItem.getName());
+ Integer count = baseMapper.selectCount(wrapper);
+ if (count == 0) {
+ int update = baseMapper.updateById(datasetItem);
+ return update == 0 ? Result.error() : Result.ok();
+ } else {
+ return Result.error().message("修改数据项失败,标识重复!");
+ }
+ }
+
+ /**
+ * 多选批量删除数据项
+ * @param datasetItemList 数据项实体列表
+ * @return
+ */
+ @Override
+ public Result deleteDatasetItemBatch(List datasetItemList) {
+ List ids = new ArrayList<>();
+ for (DatasetItem datasetItem : datasetItemList) {
+ ids.add(datasetItem.getId());
+ }
+ int count = baseMapper.deleteBatchIds(ids);
+ return count > 0 ? Result.ok() : Result.error();
+ }
+}
diff --git a/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/service/impl/DatasetServiceImpl.java b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/service/impl/DatasetServiceImpl.java
new file mode 100644
index 0000000..b9572f1
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/service/impl/DatasetServiceImpl.java
@@ -0,0 +1,249 @@
+package com.cqu.data.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.cqu.data.clients.DeviceClient;
+import com.cqu.data.entity.Dataset;
+import com.cqu.data.entity.vo.*;
+import com.cqu.data.mapper.DatasetItemMapper;
+import com.cqu.data.mapper.DatasetMapper;
+import com.cqu.data.service.DatasetService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.cqu.utils.Result;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import javax.xml.crypto.Data;
+import java.util.ArrayList;
+import java.util.LinkedList;
+import java.util.List;
+
+/**
+ *
+ * 数据集表 服务实现类
+ *
+ *
+ * @author ding
+ * @since 2022-06-27
+ */
+@Service
+public class DatasetServiceImpl extends ServiceImpl implements DatasetService {
+
+ @Autowired
+ private DeviceClient deviceClient;
+
+ @Autowired
+ private DatasetMapper datasetMapper;
+
+ @Autowired
+ private DatasetItemMapper datasetItemMapper;
+
+ /**
+ * 根据设备型号id查询设备型号下的数据集
+ * @param detailId 设备型号id
+ * @param current 当前页
+ * @param size 每页大小
+ * @return
+ */
+ @Override
+ public Result listDatasetByDetailId(String detailId, Integer current, Integer size) {
+ Page page = new Page<>(current, size);
+ QueryWrapper wrapper = new QueryWrapper<>();
+ wrapper.eq("detail_id", detailId);
+ baseMapper.selectPage(page, wrapper);
+ List records = page.getRecords();
+ long total = page.getTotal();
+
+ for (Dataset dataset : records) {
+ dataset.setDatasetTypeName();
+ dataset.setDataTypeName();
+ }
+ return Result.ok().data("records", records).data("total", total);
+ }
+
+ /**
+ * 在设备型号下新建数据集
+ * @param detailId 设备型号id
+ * @param dataset 数据集实体
+ * @return
+ */
+ @Override
+ public Result addDatasetByDetailId(String detailId, Dataset dataset) {
+ //根据name字段判断该数据集是否已存在
+ QueryWrapper wrapper = new QueryWrapper<>();
+ wrapper.eq("detail_id", detailId);
+ wrapper.eq("name", dataset.getName());
+ Integer count = baseMapper.selectCount(wrapper);
+ if (count == 0) {
+ int change = baseMapper.insert(dataset.setDetailId(detailId));
+ return change == 0 ? Result.error() : Result.ok();
+ } else {
+ return Result.error().message("新建数据集失败,名称重复!");
+ }
+ }
+
+ /**
+ * 编辑数据集信息
+ * @param dataset 数据集实体
+ * @return
+ */
+ @Override
+ public Result updateDataset(Dataset dataset) {
+ /*
+ * 修改数据集时,要检查修改的数据集名字是否和已存在的数据集名字相同
+ * 先查出目前该数据集原本的名字,如果新名字和原本名字一样,可以修改。
+ * 如果不一样,则检查新名字和其他数据集名字是否相同,如果有相同的则不能修改
+ */
+ QueryWrapper wrapper = new QueryWrapper<>();
+ wrapper.ne("id", dataset.getId());
+ wrapper.eq("detail_id", dataset.getDetailId());
+ wrapper.eq("name", dataset.getName());
+ Integer count = baseMapper.selectCount(wrapper);
+ if (count == 0) {
+ int update = baseMapper.updateById(dataset);
+ return update == 0 ? Result.error() : Result.ok();
+ } else {
+ return Result.error().message("修改数据集失败,名称重复!");
+ }
+
+ }
+
+ /**
+ * 多选批量删除数据集
+ * @param datasetList 数据集实体列表
+ * @return
+ */
+ @Override
+ public Result deleteDatasetBatch(List datasetList) {
+ List ids = new ArrayList<>();
+ for (Dataset dataset : datasetList) {
+ ids.add(dataset.getId());
+ }
+ int count = baseMapper.deleteBatchIds(ids);
+ return count > 0 ? Result.ok() : Result.error();
+ }
+
+ /**
+ * 根据detailId查询数据图谱
+ * @param detailId
+ * @return
+ */
+ @Override
+ public Result getDataGraphByDetailId(String detailId) {
+ //远程调用设备服务,通过detailId查询到detail
+ DeviceTypeDetail detail = deviceClient.getDetailById(detailId);
+
+ GraphVo graph = new GraphVo(); //图谱
+ List nodes = new LinkedList<>(); //图谱的节点
+ List links = new LinkedList<>(); //图谱的连线关系
+
+ //根节点就是当前deviceDetail
+ int i = 0;
+ String index = String.valueOf(i);
+ NodesVo root = new NodesVo();
+ root.setId(index);
+ root.setCategory(0);
+ root.setName(detail.getShowName());
+
+ nodes.add(root);
+
+ graph.setNodes(nodes);
+ graph.setLinks(links);
+
+ List datasetIds = datasetMapper.getDatasetIdsByDetailId(detailId);
+ for (String datasetId : datasetIds) {
+ //数据集节点
+ Dataset dataset = baseMapper.selectById(datasetId);
+ NodesVo datasetNode = new NodesVo();
+ datasetNode.setId(String.valueOf(++i));
+ datasetNode.setCategory(1);
+ datasetNode.setName(dataset.getName());
+ nodes.add(datasetNode);
+ //设备型号与数据集相连
+ LinksVo link = new LinksVo();
+ link.setSource(root.getId());
+ link.setTarget(datasetNode.getId());
+ links.add(link);
+
+ List itemNames = datasetItemMapper.getItemNameByDatasetId(datasetId);
+ for (String itemName : itemNames) {
+ //数据集下的数据项
+ NodesVo datasetItemNode = new NodesVo();
+ datasetItemNode.setId(String.valueOf(++i));
+ datasetItemNode.setCategory(2);
+ datasetItemNode.setName(itemName);
+ nodes.add(datasetItemNode);
+ //数据集与数据项相连
+ link = new LinksVo();
+ link.setSource(datasetNode.getId());
+ link.setTarget(datasetItemNode.getId());
+ links.add(link);
+ }
+ }
+
+ return Result.ok().data("graph", graph);
+ }
+
+ /**
+ * 根据deviceId查询数据图谱
+ * @param deviceId
+ * @return
+ */
+ @Override
+ public Result getDataGraphByDeviceId(String deviceId) {
+ //远程调用设备服务,通过deviceId查询到device
+ Device device = deviceClient.getDeviceByDeviceId(deviceId);
+
+ GraphVo graph = new GraphVo(); //图谱
+ List nodes = new LinkedList<>(); //图谱的节点
+ List links = new LinkedList<>(); //图谱的连线关系
+
+ //根节点就是当前device
+ int i = 0;
+ String index = String.valueOf(i);
+ NodesVo root = new NodesVo();
+ root.setId(index);
+ root.setCategory(0);
+ root.setName(device.getName());
+
+ nodes.add(root);
+
+ graph.setNodes(nodes);
+ graph.setLinks(links);
+
+ String detailId = device.getDetailId();
+
+ List datasetIds = datasetMapper.getDatasetIdsByDetailId(detailId);
+ for (String datasetId : datasetIds) {
+ //数据集节点
+ Dataset dataset = baseMapper.selectById(datasetId);
+ NodesVo datasetNode = new NodesVo();
+ datasetNode.setId(String.valueOf(++i));
+ datasetNode.setCategory(1);
+ datasetNode.setName(dataset.getName());
+ nodes.add(datasetNode);
+ //设备型号与数据集相连
+ LinksVo link = new LinksVo();
+ link.setSource(root.getId());
+ link.setTarget(datasetNode.getId());
+ links.add(link);
+
+ List itemNames = datasetItemMapper.getItemNameByDatasetId(datasetId);
+ for (String itemName : itemNames) {
+ //数据集下的数据项
+ NodesVo datasetItemNode = new NodesVo();
+ datasetItemNode.setId(String.valueOf(++i));
+ datasetItemNode.setCategory(2);
+ datasetItemNode.setName(itemName);
+ nodes.add(datasetItemNode);
+ //数据集与数据项相连
+ link = new LinksVo();
+ link.setSource(datasetNode.getId());
+ link.setTarget(datasetItemNode.getId());
+ links.add(link);
+ }
+ }
+
+ return Result.ok().data("graph", graph);
+ }
+}
diff --git a/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/service/impl/SourceTypeKafkaServiceImpl.java b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/service/impl/SourceTypeKafkaServiceImpl.java
new file mode 100644
index 0000000..c5489e8
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/service/impl/SourceTypeKafkaServiceImpl.java
@@ -0,0 +1,20 @@
+package com.cqu.data.service.impl;
+
+import com.cqu.data.entity.SourceTypeKafka;
+import com.cqu.data.mapper.SourceTypeKafkaMapper;
+import com.cqu.data.service.SourceTypeKafkaService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ *
+ * 数据源kafka表 数据源kafka表 服务实现类
+ *
+ *
+ * @author ding
+ * @since 2022-06-27
+ */
+@Service
+public class SourceTypeKafkaServiceImpl extends ServiceImpl implements SourceTypeKafkaService {
+
+}
diff --git a/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/service/impl/SourceTypeLigaServiceImpl.java b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/service/impl/SourceTypeLigaServiceImpl.java
new file mode 100644
index 0000000..190618b
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/service/impl/SourceTypeLigaServiceImpl.java
@@ -0,0 +1,20 @@
+package com.cqu.data.service.impl;
+
+import com.cqu.data.entity.SourceTypeLiga;
+import com.cqu.data.mapper.SourceTypeLigaMapper;
+import com.cqu.data.service.SourceTypeLigaService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ *
+ * 数据源liga表 数据源liga表 服务实现类
+ *
+ *
+ * @author ding
+ * @since 2022-06-27
+ */
+@Service
+public class SourceTypeLigaServiceImpl extends ServiceImpl implements SourceTypeLigaService {
+
+}
diff --git a/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/service/impl/SourceTypeMqttServiceImpl.java b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/service/impl/SourceTypeMqttServiceImpl.java
new file mode 100644
index 0000000..02dae0d
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/service/impl/SourceTypeMqttServiceImpl.java
@@ -0,0 +1,20 @@
+package com.cqu.data.service.impl;
+
+import com.cqu.data.entity.SourceTypeMqtt;
+import com.cqu.data.mapper.SourceTypeMqttMapper;
+import com.cqu.data.service.SourceTypeMqttService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ *
+ * 数据源MQTT表 数据源MQTT表 服务实现类
+ *
+ *
+ * @author ding
+ * @since 2022-06-27
+ */
+@Service
+public class SourceTypeMqttServiceImpl extends ServiceImpl implements SourceTypeMqttService {
+
+}
diff --git a/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/service/impl/SourceTypeOpcUaServiceImpl.java b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/service/impl/SourceTypeOpcUaServiceImpl.java
new file mode 100644
index 0000000..c7f2aef
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_data/src/main/java/com/cqu/data/service/impl/SourceTypeOpcUaServiceImpl.java
@@ -0,0 +1,20 @@
+package com.cqu.data.service.impl;
+
+import com.cqu.data.entity.SourceTypeOpcUa;
+import com.cqu.data.mapper.SourceTypeOpcUaMapper;
+import com.cqu.data.service.SourceTypeOpcUaService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ *
+ * 数据源OPC_UA表 数据源OPC_UA表 服务实现类
+ *
+ *
+ * @author ding
+ * @since 2022-06-27
+ */
+@Service
+public class SourceTypeOpcUaServiceImpl extends ServiceImpl implements SourceTypeOpcUaService {
+
+}
diff --git a/phm_rotate/backend/phm_backend/service/service_data/src/test/java/com/cqu/test/CodeGenerator.java b/phm_rotate/backend/phm_backend/service/service_data/src/test/java/com/cqu/test/CodeGenerator.java
new file mode 100644
index 0000000..968da7b
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_data/src/test/java/com/cqu/test/CodeGenerator.java
@@ -0,0 +1,77 @@
+package com.cqu.test;
+
+import com.baomidou.mybatisplus.annotation.DbType;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.generator.AutoGenerator;
+import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
+import com.baomidou.mybatisplus.generator.config.GlobalConfig;
+import com.baomidou.mybatisplus.generator.config.PackageConfig;
+import com.baomidou.mybatisplus.generator.config.StrategyConfig;
+import com.baomidou.mybatisplus.generator.config.rules.DateType;
+import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
+import org.junit.Test;
+
+/**
+ * @author
+ * @since 2018/12/13
+ */
+public class CodeGenerator {
+
+ @Test
+ public void run() {
+
+ // 1、创建代码生成器
+ AutoGenerator mpg = new AutoGenerator();
+
+ // 2、全局配置
+ GlobalConfig gc = new GlobalConfig();
+ String projectPath = System.getProperty("user.dir");
+ gc.setOutputDir("E:\\self_example\\phm_rotate\\backend\\phm_backend\\service\\service_data" + "/src/main/java");
+ gc.setAuthor("ding");
+ gc.setOpen(false); //生成后是否打开资源管理器
+ gc.setFileOverride(false); //重新生成时文件是否覆盖
+ gc.setServiceName("%sService"); //去掉Service接口的首字母I
+ gc.setIdType(IdType.ID_WORKER_STR); //主键策略
+ gc.setDateType(DateType.ONLY_DATE);//定义生成的实体类中日期类型
+ gc.setSwagger2(true);//开启Swagger2模式
+
+ mpg.setGlobalConfig(gc);
+
+ // 3、数据源配置
+ DataSourceConfig dsc = new DataSourceConfig();
+ dsc.setUrl("jdbc:mysql://localhost:3306/phm_device?serverTimezone=GMT%2B8");
+ dsc.setDriverName("com.mysql.cj.jdbc.Driver");
+ dsc.setUsername("root2");
+ dsc.setPassword("root2");
+ dsc.setDbType(DbType.MYSQL);
+ mpg.setDataSource(dsc);
+
+ // 4、包配置
+ PackageConfig pc = new PackageConfig();
+ pc.setParent("com.cqu");
+ pc.setModuleName("data"); //模块名
+ pc.setController("controller");
+ pc.setEntity("entity");
+ pc.setService("service");
+ pc.setMapper("mapper");
+ mpg.setPackageInfo(pc);
+
+ // 5、策略配置
+ StrategyConfig strategy = new StrategyConfig();
+ strategy.setInclude("access_service", "access_task", "data_set_detail","data_sets","source_type_kafka","source_type_liga","source_type_mqtt","source_type_opc_ua"); //表名
+ strategy.setNaming(NamingStrategy.underline_to_camel);//数据库表映射到实体的命名策略
+// strategy.setTablePrefix(pc.getModuleName() + "_"); //生成实体时去掉表前缀
+
+ strategy.setColumnNaming(NamingStrategy.underline_to_camel);//数据库表字段映射到实体的命名策略
+ strategy.setEntityLombokModel(true); // lombok 模型 @Accessors(chain = true) setter链式操作
+
+ strategy.setRestControllerStyle(true); //restful api风格控制器
+ strategy.setControllerMappingHyphenStyle(true); //url中驼峰转连字符
+
+ mpg.setStrategy(strategy);
+
+
+ // 6、执行
+ mpg.execute();
+ }
+}
diff --git a/phm_rotate/backend/phm_backend/service/service_device/pom.xml b/phm_rotate/backend/phm_backend/service/service_device/pom.xml
new file mode 100644
index 0000000..1d1250b
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_device/pom.xml
@@ -0,0 +1,52 @@
+
+
+
+ service
+ com.cqu
+ 0.0.1-SNAPSHOT
+
+ 4.0.0
+
+ service_device
+
+
+ 8
+ 8
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+ com.alibaba
+ fastjson
+
+
+
+
+
+
+
+ src/main/java
+
+ **/*.xml
+
+ false
+
+
+ src/main/resources
+
+ **/*.yml
+ **/*.properties
+
+ false
+
+
+
+
+
\ No newline at end of file
diff --git a/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/DeviceApplication.java b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/DeviceApplication.java
new file mode 100644
index 0000000..253d33d
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/DeviceApplication.java
@@ -0,0 +1,24 @@
+package com.cqu.device;
+
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.context.annotation.ComponentScan;
+
+/**
+ * @author ranmaoqi
+ * @time 2022-04-11 11:54
+ */
+@SpringBootApplication
+/*
+ 如果不加这个注解,就扫描不到common包里的东西
+ 因为默认只会扫描启动类所在的包及其子包
+ */
+@ComponentScan(basePackages = {"com.cqu"})
+public class DeviceApplication {
+
+ public static void main(String[] args) {
+ SpringApplication.run(DeviceApplication.class, args);
+ }
+
+}
diff --git a/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/config/DeviceConfig.java b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/config/DeviceConfig.java
new file mode 100644
index 0000000..0fc4892
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/config/DeviceConfig.java
@@ -0,0 +1,36 @@
+package com.cqu.device.config;
+
+import com.baomidou.mybatisplus.core.injector.ISqlInjector;
+import com.baomidou.mybatisplus.extension.injector.LogicSqlInjector;
+import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
+import org.mybatis.spring.annotation.MapperScan;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * @author ranmaoqi
+ * @time 2022-04-11 13:25
+ */
+@Configuration
+@MapperScan("com.cqu.device.mapper")
+public class DeviceConfig {
+
+ /**
+ * 逻辑删除插件
+ * @return
+ */
+ @Bean
+ public ISqlInjector sqlInjector() {
+ return new LogicSqlInjector();
+ }
+
+ /**
+ * 分页插件
+ * @return
+ */
+ @Bean
+ public PaginationInterceptor paginationInterceptor() {
+ return new PaginationInterceptor();
+ }
+
+}
diff --git a/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/controller/DataModelController.java b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/controller/DataModelController.java
new file mode 100644
index 0000000..8d3fbf3
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/controller/DataModelController.java
@@ -0,0 +1,81 @@
+package com.cqu.device.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.api.R;
+import com.cqu.device.entity.DataModel;
+import com.cqu.device.entity.DeviceTypeDetail;
+import com.cqu.device.service.DataModelService;
+import com.cqu.utils.Result;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author xiaolong
+ * @Description
+ * @create 2022-04-24-14:48
+ */
+@RestController
+//@CrossOrigin
+@RequestMapping("/device/data-model")
+public class DataModelController {
+ @Autowired
+ private DataModelService dataModelService;
+
+ // 数据模型板块查询树形结构
+ @GetMapping("selectTreeAll")
+ public Result selectTreeAll(){
+ return dataModelService.selectTreeAll();
+ }
+
+
+ // 根据设备详情id查询所属数据模型
+ @GetMapping("/listDataModelById/{id}/{current}/{size}")
+ public Result listDataModelById(@PathVariable String id, @PathVariable Integer current, @PathVariable Integer size){
+ // 这里id为设备详情id
+// QueryWrapper wrapper = new QueryWrapper<>();
+// wrapper.eq("detail_id",id);
+ return dataModelService.listDataModelById(id, current, size);
+ }
+
+ // 根据设备类型id和设备详情id新增数据模型
+ @PostMapping("/saveDataModel/{typeId}/{detailId}")
+ public Result saveDataModel(@PathVariable String typeId, @PathVariable String detailId, @RequestBody DataModel dataModel){
+ dataModel.setTypeId(typeId);
+ dataModel.setDetailId(detailId);
+ boolean flag = dataModelService.save(dataModel);
+ return flag ? Result.ok() : Result.error();
+ }
+
+ // 删除数据模型
+ @DeleteMapping("{id}")
+ public Result deleteDataModelById(@PathVariable String id){
+ boolean flag = dataModelService.removeById(id);
+ if(flag){
+ return Result.ok();
+ }else{
+ return Result.error();
+ }
+ }
+
+ //根据数据模型id查询数据模型(用于回显数据)
+ @GetMapping("/{id}")
+ public Result getDataModelById(@PathVariable String id) {
+ DataModel dataModel = dataModelService.getById(id);
+ return Result.ok().data("dataModel", dataModel);
+ }
+ //修改数据模型
+ @PutMapping()
+ public Result updateDeviceDetail(@RequestBody DataModel dataModel) {
+ boolean flag = dataModelService.updateById(dataModel);
+ return flag ? Result.ok() : Result.error();
+ }
+ // 批量删除数据模型
+ @DeleteMapping("deleteDataModelBatch")
+ public Result deleteDataModelBatch(@RequestBody List dataModelList){
+ return dataModelService.deleteDataModelBatch(dataModelList);
+ }
+}
diff --git a/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/controller/DeviceAreaController.java b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/controller/DeviceAreaController.java
new file mode 100644
index 0000000..8a22423
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/controller/DeviceAreaController.java
@@ -0,0 +1,77 @@
+package com.cqu.device.controller;
+
+
+import com.cqu.device.entity.DeviceArea;
+import com.cqu.device.service.DeviceAreaService;
+import com.cqu.utils.Result;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ *
+ * 设备区域 设备区域 前端控制器
+ *
+ *
+ * @author ranmaoqi
+ * @since 2022-05-18
+ */
+@RestController
+@RequestMapping("/device/device-area")
+//@CrossOrigin
+public class DeviceAreaController {
+
+ @Autowired
+ private DeviceAreaService deviceAreaService;
+
+ //分页查询所有区域列表
+ @GetMapping("/listAreaAll/{current}/{size}")
+ public Result listAreaAll(@PathVariable Integer current, @PathVariable Integer size) {
+ return deviceAreaService.listAreaAll(current, size);
+ }
+
+ /**
+ * 新建区域
+ * @param deviceArea 区域实体
+ * @return
+ */
+ @PostMapping("/addArea")
+ public Result addArea(@RequestBody DeviceArea deviceArea) {
+ return deviceAreaService.addArea(deviceArea);
+// boolean flag = deviceAreaService.save(deviceArea);
+// return flag ? Result.ok() : Result.error();
+ }
+
+ //根据区域Id查询区域(用于数据回显)
+ @GetMapping("/getAreaById/{areaId}")
+ public Result getAreaById(@PathVariable String areaId) {
+ DeviceArea deviceArea = deviceAreaService.getById(areaId);
+ return Result.ok().data("area", deviceArea);
+ }
+
+ /**
+ * 修改区域
+ * @param deviceArea 区域实体
+ * @return
+ */
+ @PutMapping("/updateArea")
+ public Result updateArea(@RequestBody DeviceArea deviceArea) {
+ return deviceAreaService.updateArea(deviceArea);
+// boolean flag = deviceAreaService.updateById(deviceArea);
+// return flag ? Result.ok() : Result.error();
+ }
+
+ //根据id删除区域
+ @DeleteMapping("/deleteAreaById/{areaId}")
+ public Result deleteAreaById(@PathVariable String areaId) {
+ return deviceAreaService.deleteAreaById(areaId);
+ }
+
+ //根据多选框批量删除区域
+ @DeleteMapping("/deleteAreaBatch")
+ public Result deleteAreaBatch(@RequestBody List areaList) {
+ return deviceAreaService.deleteAreaBatch(areaList);
+ }
+}
+
diff --git a/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/controller/DeviceController.java b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/controller/DeviceController.java
new file mode 100644
index 0000000..60ee5b8
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/controller/DeviceController.java
@@ -0,0 +1,121 @@
+package com.cqu.device.controller;
+
+
+import com.cqu.device.entity.Device;
+import com.cqu.device.entity.vo.TypeNodeVo;
+import com.cqu.device.service.DeviceService;
+import com.cqu.utils.Result;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ *
+ * 设备 设备 前端控制器
+ *
+ *
+ * @author ranmaoqi
+ * @since 2022-05-18
+ */
+@RestController
+@RequestMapping("/device/device")
+//@CrossOrigin
+public class DeviceController {
+
+ @Autowired
+ private DeviceService deviceService;
+
+ //根据设备组id查询设备列表
+ @GetMapping("/listDeviceByGroupId/{groupId}/{current}/{size}")
+ public Result listDeviceByGroupId(@PathVariable String groupId, @PathVariable Integer current, @PathVariable Integer size) {
+ return deviceService.listDeviceByGroupId(groupId, current, size);
+ }
+
+ /**
+ * 新建设备
+ * @param groupId 设备组id
+ * @param device 设备实体
+ * @return
+ */
+ @PostMapping("/addDeviceByGroupId/{groupId}")
+ public Result addDeviceByGroupId(@PathVariable String groupId ,@RequestBody Device device) {
+ device.setGroupId(groupId);
+ return deviceService.addDeviceByGroupId(groupId, device);
+// boolean flag = deviceService.save(device.setGroupId(groupId));
+// return flag ? Result.ok() : Result.error();
+ }
+
+ //根据id删除设备
+ @DeleteMapping("/deleteDeviceById/{id}")
+ public Result deleteDeviceById(@PathVariable String id) {
+ boolean flag = deviceService.removeById(id);
+ return flag ? Result.ok() : Result.error();
+ }
+
+ //多选删除设备
+ @DeleteMapping("/deleteDeviceBatch")
+ public Result deleteDeviceBatch(@RequestBody List deviceList) {
+ return deviceService.deleteDeviceBatch(deviceList);
+ }
+
+ //根据设备id查询设备(用于数据回显)
+ @GetMapping("/getDeviceById/{id}")
+ public Result getDeviceById(@PathVariable String id) {
+ Device device = deviceService.getById(id);
+ return Result.ok().data("device", device);
+ }
+
+ /**
+ * 修改设备
+ * @param device 设备实体
+ * @return
+ */
+ @PutMapping("/updateDevice")
+ public Result updateDevice(@RequestBody Device device) {
+ return deviceService.updateDevice(device);
+// boolean flag = deviceService.updateById(device);
+// return flag ? Result.ok() : Result.error();
+ }
+
+ //查询设备对象结构树,根据设备对象id
+ @GetMapping("/getDeviceObjTreeById/{deviceId}")
+ public Result getDeviceObjTreeById(@PathVariable String deviceId) {
+ List list = deviceService.getDeviceObjTreeById(deviceId);
+ return Result.ok().data("list", list);
+ }
+
+ /**
+ * 根据设备对象id查询对应设备型号id,因为设备对象的数据集与其对应的设备型号的数据集一样
+ * @param deviceId
+ * @return
+ */
+ @GetMapping("/getDeviceDetailIdByDeviceId/{deviceId}")
+ public Result getDeviceDetailIdByDeviceId(@PathVariable String deviceId) {
+ String detailId = deviceService.getDeviceDetailIdByDeviceId(deviceId);
+ return Result.ok().data("detailId", detailId);
+ }
+
+ /**
+ * 根据设备Id查询结构图谱
+ * @param deviceId
+ * @return
+ */
+ @GetMapping("/getStructureGraphById/{deviceId}")
+ public Result getStructureGraphById(@PathVariable String deviceId) {
+ return deviceService.getStructureGraphById(deviceId);
+ }
+
+ /**
+ * 获得设备对象实体,供远程调用使用
+ * @param deviceId
+ * @return
+ */
+ @GetMapping("/getDeviceByDeviceId/{deviceId}")
+ public Device getDeviceByDeviceId(@PathVariable String deviceId) {
+ Device device = deviceService.getById(deviceId);
+ return device;
+ }
+
+}
+
diff --git a/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/controller/DeviceGroupController.java b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/controller/DeviceGroupController.java
new file mode 100644
index 0000000..0f4b50e
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/controller/DeviceGroupController.java
@@ -0,0 +1,107 @@
+package com.cqu.device.controller;
+
+
+import com.cqu.device.entity.DeviceGroup;
+import com.cqu.device.entity.vo.DeviceListVo;
+import com.cqu.device.service.DeviceGroupService;
+import com.cqu.utils.Result;
+import io.swagger.models.auth.In;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ *
+ * 设备组 设备组 前端控制器
+ *
+ *
+ * @author ranmaoqi
+ * @since 2022-05-18
+ */
+@RestController
+@RequestMapping("/device/device-group")
+//@CrossOrigin
+public class DeviceGroupController {
+
+ @Autowired
+ private DeviceGroupService deviceGroupService;
+
+ //查询区域、设备组的树形结构
+ @GetMapping("/listTree")
+ public Result listTree() {
+ List list = deviceGroupService.listTree();
+ return Result.ok().data("list", list);
+ }
+
+ //分页查询所有设备组列表
+ @GetMapping("/listDeviceGroupAll/{current}/{size}")
+ public Result listDeviceGroupAll(@PathVariable Integer current, @PathVariable Integer size) {
+ return deviceGroupService.listDeviceGroupAll(current, size);
+ }
+
+ //根据区域id分组查询设备组列表
+ @GetMapping("/listDeviceGroupByAreaId/{areaId}/{current}/{size}")
+ public Result listDeviceGroupByAreaId(@PathVariable String areaId, @PathVariable Integer current, @PathVariable Integer size) {
+ return deviceGroupService.listDeviceGroupByAreaId(areaId, current, size);
+ }
+
+ /**
+ * 新建设备组(直接新建)
+ * @param deviceGroup 设备组实体
+ * @return
+ */
+ @PostMapping("/addDeviceGroup")
+ public Result addDeviceGroup(@RequestBody DeviceGroup deviceGroup) {
+ return deviceGroupService.addDeviceGroup(deviceGroup);
+// boolean flag = deviceGroupService.save(deviceGroup);
+// return flag ? Result.ok() : Result.error();
+ }
+
+ /**
+ * 新建设备组(在区域下)
+ * @param areaId 区域ID
+ * @param deviceGroup 设备组实体
+ * @return
+ */
+ @PostMapping("/addDeviceGroupByAreaId/{areaId}")
+ public Result addDeviceGroupByAreaId(@PathVariable String areaId, @RequestBody DeviceGroup deviceGroup) {
+ deviceGroup.setAreaId(areaId);
+ return deviceGroupService.addDeviceGroupByAreaId(areaId, deviceGroup);
+// boolean flag = deviceGroupService.save(deviceGroup);
+// return flag ? Result.ok() : Result.error();
+ }
+
+ //根据设备组id查询设备组(用于数据回显)
+ @GetMapping("/getDeviceGroupById/{id}")
+ public Result getDeviceGroupById(@PathVariable String id) {
+ DeviceGroup deviceGroup = deviceGroupService.getById(id);
+ return Result.ok().data("deviceGroup", deviceGroup);
+ }
+
+ /**
+ * 编辑设备组
+ * @param deviceGroup 设备组实体
+ * @return
+ */
+ @PutMapping("/updateDeviceGroup")
+ public Result updateDeviceGroup(@RequestBody DeviceGroup deviceGroup) {
+ return deviceGroupService.updateDeviceGroup(deviceGroup);
+// boolean flag = deviceGroupService.updateById(deviceGroup);
+// return flag ? Result.ok() : Result.error();
+ }
+
+ //根据id删除设备组
+ @DeleteMapping("/deleteDeviceGroupById/{groupId}")
+ public Result deleteDeviceGroupById(@PathVariable String groupId) {
+ return deviceGroupService.deleteDeviceGroupById(groupId);
+ }
+
+ //批量删除设备组
+ @DeleteMapping("/deleteDeviceGroupBatch")
+ public Result deleteDeviceGroupBatch(@RequestBody List deviceGroupList) {
+ return deviceGroupService.deleteDeviceGroupBatch(deviceGroupList);
+ }
+
+}
+
diff --git a/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/controller/DeviceTypeController.java b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/controller/DeviceTypeController.java
new file mode 100644
index 0000000..96b0945
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/controller/DeviceTypeController.java
@@ -0,0 +1,69 @@
+package com.cqu.device.controller;
+
+
+import com.cqu.device.entity.DeviceType;
+import com.cqu.device.service.DeviceTypeService;
+import com.cqu.utils.Result;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ *
+ * 设备类型 设备类型 前端控制器
+ *
+ *
+ * @author testjava
+ * @since 2022-04-11
+ */
+@RestController
+@RequestMapping("/device/device-type")
+//@CrossOrigin
+public class DeviceTypeController {
+
+ @Autowired
+ private DeviceTypeService deviceTypeService;
+
+ @GetMapping("/listDeviceType")
+ public Result listDeviceType() {
+ List deviceTypeList = deviceTypeService.list(null);
+ return Result.ok().data("deviceTypeList", deviceTypeList);
+ }
+
+ //新建设备类型
+ @PostMapping("/addDeviceType")
+ public Result addDeviceType(@RequestBody DeviceType deviceType) {
+ return deviceTypeService.addDeviceType(deviceType);
+// boolean flag = deviceTypeService.save(deviceType);
+// return flag ? Result.ok() : Result.error();
+ }
+
+ //根据设备类型id查询设备类型信息(用于数据回显)
+ @GetMapping("/getDeviceTypeById/{id}")
+ public Result getDeviceTypeById(@PathVariable String id) {
+ DeviceType deviceType = deviceTypeService.getById(id);
+ return Result.ok().data("deviceType", deviceType);
+ }
+
+ //修改设备类型
+ @PutMapping("/updateDeviceType")
+ public Result updateDeviceType(@RequestBody DeviceType deviceType) {
+ return deviceTypeService.updateDeviceType(deviceType);
+// boolean flag = deviceTypeService.updateById(deviceType);
+// return flag ? Result.ok() : Result.error();
+ }
+
+ //删除设备类型(需要判断设备类型下是否还有设备分组、设备型号)
+ @DeleteMapping("/deleteDeviceTypeById/{id}")
+ public Result deleteDeviceTypeById(@PathVariable String id) {
+ return deviceTypeService.deleteDeviceTypeById(id);
+ }
+
+ //查询所有设备类型(用于设备对象管理模块)
+ @GetMapping("/listDeviceTypeAll")
+ public Result listDeviceTypeAll() {
+ return deviceTypeService.listDeviceTypeAll();
+ }
+}
+
diff --git a/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/controller/DeviceTypeDetailController.java b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/controller/DeviceTypeDetailController.java
new file mode 100644
index 0000000..5efc7f5
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/controller/DeviceTypeDetailController.java
@@ -0,0 +1,119 @@
+package com.cqu.device.controller;
+
+
+import com.cqu.device.entity.DeviceTypeDetail;
+import com.cqu.device.entity.vo.TypeNodeVo;
+import com.cqu.device.service.DeviceTypeDetailService;
+import com.cqu.utils.Result;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ *
+ * 设备型号 设备型号表 前端控制器
+ *
+ *
+ * @author testjava
+ * @since 2022-04-11
+ */
+@RestController
+@RequestMapping("/device/device-type-detail")
+//@CrossOrigin
+public class DeviceTypeDetailController {
+
+ @Autowired
+ private DeviceTypeDetailService deviceTypeDetailService;
+
+ //查询设备类型列表、设备类型分组、设备型号列表的树形列表
+ @GetMapping("/listDeviceDetail")
+ public Result listDeviceDetail() {
+ List list = deviceTypeDetailService.listDeviceDetail();
+ return Result.ok().data("list", list);
+ }
+
+ //根据设备类型id查询所有的设备型号(分页)
+ @GetMapping("/listDeviceDetailByTypeId/{typeId}/{current}/{size}")
+ public Result listDeviceDetailByTypeId(@PathVariable String typeId, @PathVariable Integer current, @PathVariable Integer size) {
+ return deviceTypeDetailService.listDeviceDetailByTypeId(typeId, current, size);
+ }
+
+ //根据设备分组id查询所有设备型号(分页)
+ @GetMapping("/listDeviceDetailByGroupId/{groupId}/{current}/{size}")
+ public Result listDeviceDetailByGroupId(@PathVariable String groupId, @PathVariable Integer current, @PathVariable Integer size) {
+ return deviceTypeDetailService.listDeviceDetailByGroupId(groupId, current, size);
+ }
+
+ //新建设备型号(基于设备类型id)
+ @PostMapping("/addDeviceDetailByTypeId/{typeId}")
+ public Result addDeviceDetail(@PathVariable String typeId, @RequestBody DeviceTypeDetail deviceTypeDetail){
+ deviceTypeDetail.setTypeId(typeId);
+ return deviceTypeDetailService.addDeviceDetail(typeId, deviceTypeDetail);
+// boolean flag = deviceTypeDetailService.save(deviceTypeDetail);
+// return flag ? Result.ok() : Result.error();
+ }
+
+ //根据设备型号id删除设备型号
+ @DeleteMapping("/deleteDeviceDetailById/{id}")
+ public Result deleteDeviceDetailById(@PathVariable String id) {
+ boolean flag = deviceTypeDetailService.removeById(id);
+ return flag ? Result.ok() : Result.error();
+ }
+
+ //根据设备型号id查询设备型号(用于回显数据)
+ @GetMapping("/getDeviceDetailById/{id}")
+ public Result getDeviceDetailById(@PathVariable String id) {
+ DeviceTypeDetail deviceTypeDetail = deviceTypeDetailService.getById(id);
+ return Result.ok().data("deviceTypeDetail", deviceTypeDetail);
+ }
+
+ //修改设备型号
+ @PutMapping("/updateDeviceDetail")
+ public Result updateDeviceDetail(@RequestBody DeviceTypeDetail deviceTypeDetail) {
+ return deviceTypeDetailService.updateDeviceDetail(deviceTypeDetail);
+// boolean flag = deviceTypeDetailService.updateById(deviceTypeDetail);
+// return flag ? Result.ok() : Result.error();
+ }
+
+ //根据checkbox多选框批量删除设备型号
+ @DeleteMapping("/deleteDeviceDetailBatch")
+ public Result deleteDeviceDetailBatch(@RequestBody List detailList) {
+ return deviceTypeDetailService.deleteDeviceDetailBatch(detailList);
+ }
+
+ //新建设备型号(基于设备类型id和设备分组id)
+ @PostMapping("/addDeviceDetailByTypeIdAndGroupId/{typeId}/{groupId}")
+ public Result addDeviceDetailByTypeIdAndGroupId(@PathVariable String typeId, @PathVariable String groupId, @RequestBody DeviceTypeDetail deviceTypeDetail) {
+ deviceTypeDetail.setTypeId(typeId);
+ deviceTypeDetail.setTypeGroupId(groupId);
+ return deviceTypeDetailService.addDeviceDetailByTypeIdAndGroupId(groupId, deviceTypeDetail);
+// boolean flag = deviceTypeDetailService.save(deviceTypeDetail);
+// return flag ? Result.ok() : Result.error();
+ }
+
+ //根据设备类型id查询该类型所有设备型号(用于设备对象管理模块)
+ @GetMapping("/listDeviceDetailAllByTypeId/{typeId}")
+ public Result listDeviceDetailAllByTypeId(@PathVariable String typeId) {
+ return deviceTypeDetailService.listDeviceDetailAllByTypeId(typeId);
+ }
+
+ /**
+ * 根据设备型号id查询结构图谱
+ * @param detailId
+ * @return
+ */
+ @GetMapping("/getStructureGraphById/{detailId}")
+ public Result getStructureGraphById(@PathVariable String detailId) {
+ return deviceTypeDetailService.getStructureGraphById(detailId);
+ }
+
+ //根据设备型号id查询设备型号,用于供数据服务远程调用
+ @GetMapping("/getDetailById/{id}")
+ public DeviceTypeDetail getDetailById(@PathVariable String id) {
+ DeviceTypeDetail deviceTypeDetail = deviceTypeDetailService.getById(id);
+ return deviceTypeDetail;
+ }
+
+}
+
diff --git a/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/controller/DeviceTypeGroupController.java b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/controller/DeviceTypeGroupController.java
new file mode 100644
index 0000000..79486d6
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/controller/DeviceTypeGroupController.java
@@ -0,0 +1,65 @@
+package com.cqu.device.controller;
+
+
+import com.cqu.device.entity.DeviceTypeGroup;
+import com.cqu.device.service.DeviceTypeGroupService;
+import com.cqu.utils.Result;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ *
+ * 设备分组 设备分组 前端控制器
+ *
+ *
+ * @author testjava
+ * @since 2022-04-11
+ */
+@RestController
+@RequestMapping("/device/device-type-group")
+//@CrossOrigin
+public class DeviceTypeGroupController {
+
+ @Autowired
+ private DeviceTypeGroupService deviceTypeGroupService;
+
+ //新建设备分组
+ @PostMapping("/addDeviceGroupByTypeId/{typeId}/{typeGroupId}")
+ public Result addDeviceGroup(@PathVariable String typeId, @PathVariable String typeGroupId,@RequestBody DeviceTypeGroup deviceTypeGroup) {
+ deviceTypeGroup.setTypeId(typeId);
+ deviceTypeGroup.setParentGroupId(typeGroupId);
+ return deviceTypeGroupService.addDeviceGroup(typeId, typeGroupId, deviceTypeGroup);
+ // boolean flag = deviceTypeGroupService.save(deviceTypeGroup);
+// return flag ? Result.ok().data("id",deviceTypeGroup.getId()) : Result.error();
+ }
+
+ //根据设备分组id查询设备分组 用于数据回显
+ @GetMapping("/getDeviceGroupById/{id}")
+ public Result getDeviceGroupById(@PathVariable String id) {
+ DeviceTypeGroup deviceTypeGroup = deviceTypeGroupService.getById(id);
+ return Result.ok().data("deviceTypeGroup", deviceTypeGroup);
+ }
+
+ //修改设备分组
+ @PutMapping("/updateDeviceGroup")
+ public Result updateDeviceGroup(@RequestBody DeviceTypeGroup deviceTypeGroup) {
+ return deviceTypeGroupService.updateDeviceGroup(deviceTypeGroup);
+// boolean flag = deviceTypeGroupService.updateById(deviceTypeGroup);
+// return flag ? Result.ok() : Result.error();
+ }
+
+ //删除设备分组(需要判断下面是否还有设备型号)
+ @DeleteMapping("/deleteDeviceGroupById/{id}")
+ public Result deleteDeviceGroupById(@PathVariable String id) {
+ return deviceTypeGroupService.deleteDeviceGroupById(id);
+ }
+
+ //根据设备分组id查询设备类型id,解决小BUG
+ @GetMapping("/getTypeIdByGroupId/{groupId}")
+ public Result getTypeIdByGroupId(@PathVariable String groupId) {
+ String typeId = deviceTypeGroupService.getTypeIdByGroupId(groupId);
+ return Result.ok().data("typeId", typeId);
+ }
+
+}
+
diff --git a/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/controller/LoginController.java b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/controller/LoginController.java
new file mode 100644
index 0000000..45a1f98
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/controller/LoginController.java
@@ -0,0 +1,27 @@
+package com.cqu.device.controller;
+
+import com.cqu.utils.Result;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ * @author ranmaoqi
+ * @time 2022-03-07 18:38
+ */
+@RestController
+@RequestMapping("/device/user")
+//@CrossOrigin //解决跨域问题
+public class LoginController {
+
+ //login
+ @PostMapping("/login")
+ public Result login() {
+ return Result.ok().data("token", "admin");
+ }
+
+ //info
+ @GetMapping("/info")
+ public Result info() {
+ return Result.ok().data("roles", "[admin]").data("name", "admin").data("avatar", "https://edu-miykah.oss-cn-beijing.aliyuncs.com/2022/03/10/e0083d0c-ab87-4c34-9a1c-e20b8c06a6b7file.png");
+ }
+
+}
diff --git a/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/controller/PartController.java b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/controller/PartController.java
new file mode 100644
index 0000000..2b74b0a
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/controller/PartController.java
@@ -0,0 +1,84 @@
+package com.cqu.device.controller;
+
+
+import com.cqu.device.entity.PartType;
+import com.cqu.device.entity.vo.TypeNodeVo;
+import com.cqu.device.service.PartService;
+import com.cqu.utils.Result;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ *
+ * 部件 部件 前端控制器
+ *
+ *
+ * @author testjava
+ * @since 2022-04-21
+ */
+@RestController
+@RequestMapping("/device/part")
+//@CrossOrigin
+public class PartController {
+
+ @Autowired
+ private PartService partService;
+
+ //根据设备型号id,查询子系统、部件的树形列表
+ @GetMapping("/listPartTreeByDeviceDetailId/{id}")
+ public Result listPartTreeByDeviceDetailId(@PathVariable String id) {
+ List list = partService.listPartTreeByDeviceDetailId(id);
+ return Result.ok().data("list", list);
+ }
+
+ //根据部件id获得子系统id、设备型号id
+ @GetMapping("/getSubSystemIdAndDetailIdByPartId/{id}")
+ public Result getSubSystemIdAndDetailIdByPartId(@PathVariable String id) {
+ return partService.getSubSystemIdAndDetailIdByPartId(id);
+ }
+
+ //在设备型号结构树中新增部件(在设备型号下)
+ @PostMapping("/addPartByDetailId/{detailId}")
+ public Result addPartByDetailId(@PathVariable String detailId, @RequestBody(required = false) List partTypeIds) {
+ return partService.addPartByDetailId(detailId, partTypeIds);
+ }
+
+ //在设备型号结构树中新增部件(在设备型号下的子系统下)
+ @PostMapping("/addPartBySubSystemId/{detailId}/{subSystemId}")
+ public Result addPartBySubSystemId(@PathVariable String detailId, @PathVariable String subSystemId, @RequestBody(required = false) List partTypeIds) {
+ return partService.addPartBySubSystemId(detailId, subSystemId, partTypeIds);
+ }
+
+ //根据设备型号id查询出下面关联的部件类型(回显)
+ @GetMapping("/listPartTypeByDetailId/{detailId}")
+ public Result listPartTypeByDetailId(@PathVariable String detailId) {
+ return partService.listPartTypeByDetailId(detailId);
+ }
+
+ //根据子系统id查询出下面关联的部件类型(回显)
+ @GetMapping("/listPartTypeBySubSystemId/{subSystemId}")
+ public Result listPartTypeBySubSystemId(@PathVariable String subSystemId) {
+ return partService.listPartTypeBySubSystemId(subSystemId);
+ }
+
+ //根据设备型号id + 部件id删除部件
+ @DeleteMapping("/deleteByDetailIdAndPartId/{detailId}/{partId}")
+ public Result deleteByDetailIdAndPartTypeId(@PathVariable String detailId, @PathVariable String partId) {
+ return partService.deleteByDetailIdAndPartId(detailId, partId);
+ }
+
+ //根据设备型号id + 子系统id + 部件id删除部件
+ @DeleteMapping("/deleteBySubSystemIdAndPartId/{detailId}/{subSystemId}/{partId}")
+ public Result deleteBySubSystemIdAndPartTypeId(@PathVariable String detailId, @PathVariable String subSystemId, @PathVariable String partId) {
+ return partService.deleteBySubSystemIdAndPartId(detailId, subSystemId, partId);
+ }
+
+ //根据partId查询PartType用于回显
+ @GetMapping("/getPartTypeByPartId/{partId}")
+ public Result getPartTypeByPartId(@PathVariable String partId) {
+ return partService.getPartTypeByPartId(partId);
+ }
+}
+
diff --git a/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/controller/PartTypeController.java b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/controller/PartTypeController.java
new file mode 100644
index 0000000..cbe2213
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/controller/PartTypeController.java
@@ -0,0 +1,72 @@
+package com.cqu.device.controller;
+
+
+import com.cqu.device.entity.DeviceType;
+import com.cqu.device.entity.PartType;
+import com.cqu.device.service.PartTypeService;
+import com.cqu.utils.Result;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ *
+ * 部件类型表 部件类型表 前端控制器
+ *
+ *
+ * @author testjava
+ * @since 2022-04-15
+ */
+@RestController
+@RequestMapping("/device/part-type")
+//@CrossOrigin
+public class PartTypeController {
+
+ @Autowired
+ private PartTypeService partTypeService;
+
+ /**
+ * 新建部件类型
+ * @param partType 部件类型实体
+ * @return
+ */
+ @PostMapping("/addPartType")
+ public Result addPartType(@RequestBody PartType partType) {
+// boolean flag = partTypeService.save(partType);
+// return flag ? Result.ok() : Result.error();
+ return partTypeService.addPartType(partType);
+ }
+
+ //根据部件类型id查询部件类型信息(用于数据回显)
+ @GetMapping("/getPartTypeById/{id}")
+ public Result getPartTypeById(@PathVariable String id) {
+ PartType partType = partTypeService.getById(id);
+ return Result.ok().data("partType", partType);
+ }
+
+ /**
+ * 修改部件类型
+ * @param partType 部件类型实体
+ * @return
+ */
+ @PutMapping("/updatePartType")
+ public Result updatePartType(@RequestBody PartType partType) {
+// boolean flag = partTypeService.updateById(partType);
+// return flag ? Result.ok() : Result.error();
+ return partTypeService.updatePartType(partType);
+ }
+
+ //删除部件类型(需要判断部件类型下是否还有部件分组、部件型号)
+ @DeleteMapping("/deletePartTypeById/{id}")
+ public Result deletePartTypeById(@PathVariable String id) {
+ return partTypeService.deletePartTypeById(id);
+ }
+
+ //查询所有部件类型(用于设备型号结构树中关联部件)(分页)
+ @GetMapping("/listAllParts/{current}/{size}")
+ public Result listAllParts(@PathVariable Integer current, @PathVariable Integer size) {
+ return partTypeService.listAllParts(current, size);
+ }
+}
+
diff --git a/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/controller/PartTypeDetailController.java b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/controller/PartTypeDetailController.java
new file mode 100644
index 0000000..47ede12
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/controller/PartTypeDetailController.java
@@ -0,0 +1,110 @@
+package com.cqu.device.controller;
+
+
+import com.cqu.device.entity.PartTypeDetail;
+import com.cqu.device.entity.vo.TypeNodeVo;
+import com.cqu.device.service.PartTypeDetailService;
+import com.cqu.utils.Result;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ *
+ * 部件型号 部件型号表 前端控制器
+ *
+ *
+ * @author testjava
+ * @since 2022-04-15
+ */
+@RestController
+@RequestMapping("/device/part-type-detail")
+//@CrossOrigin
+public class PartTypeDetailController {
+
+ @Autowired
+ private PartTypeDetailService partTypeDetailService;
+
+ //查询部件类型、部件分组、部件型号的树形列表
+ @GetMapping("/listPartDetail")
+ public Result listPartDetail() {
+ List list = partTypeDetailService.listPartDetail();
+ return Result.ok().data("list", list);
+ }
+
+ //根据部件类型id查询所有部件型号(分页)
+ @GetMapping("/listPartDetailByTypeId/{typeId}/{current}/{size}")
+ public Result listPartDetailByTypeId(@PathVariable String typeId, @PathVariable Integer current, @PathVariable Integer size) {
+ return partTypeDetailService.listPartDetailByTypeId(typeId, current, size);
+ }
+
+ //根据部件分组id查询所有部件型号(分页)
+ @GetMapping("/listPartDetailByGroupId/{groupId}/{current}/{size}")
+ public Result listPartDetailByGroupId(@PathVariable String groupId, @PathVariable Integer current, @PathVariable Integer size) {
+ return partTypeDetailService.listPartDetailByGroupId(groupId, current, size);
+ }
+
+ /**
+ * 新建部件型号(基于部件类型id)
+ * @param typeId
+ * @param partTypeDetail
+ * @return
+ */
+ @PostMapping("/addPartDetailByTypeId/{typeId}")
+ public Result addPartDetailByTypeId(@PathVariable String typeId, @RequestBody PartTypeDetail partTypeDetail){
+// partTypeDetail.setTypeId(typeId);
+// boolean flag = partTypeDetailService.save(partTypeDetail);
+// return flag ? Result.ok() : Result.error();
+ return partTypeDetailService.addPartDetailByTypeId(typeId, partTypeDetail);
+ }
+
+
+ /**
+ * 新建部件型号(基于部件类型id和部件分组id)
+ * @param typeId
+ * @param partTypeDetail
+ * @return
+ */
+ @PostMapping("/addPartDetailByTypeIdAndGroupId/{typeId}/{groupId}")
+ public Result addPartDetailByTypeIdAndGroupId(@PathVariable String typeId, @PathVariable String groupId, @RequestBody PartTypeDetail partTypeDetail) {
+// partTypeDetail.setTypeId(typeId);
+// partTypeDetail.setTypeGroupId(groupId);
+// boolean flag = partTypeDetailService.save(partTypeDetail);
+// return flag ? Result.ok() : Result.error();
+ return partTypeDetailService.addPartDetailByTypeIdAndGroupId(typeId, groupId, partTypeDetail);
+ }
+
+ //根据部件型号id删除部件型号
+ @DeleteMapping("/deletePartDetailById/{id}")
+ public Result deletePartDetailById(@PathVariable String id) {
+ boolean flag = partTypeDetailService.removeById(id);
+ return flag ? Result.ok() : Result.error();
+ }
+
+ //根据部件型号id查询部件型号(用于回显数据)
+ @GetMapping("/getPartDetailById/{id}")
+ public Result getPartDetailById(@PathVariable String id) {
+ PartTypeDetail partTypeDetail = partTypeDetailService.getById(id);
+ return Result.ok().data("partTypeDetail", partTypeDetail);
+ }
+
+ /**
+ * 修改部件型号
+ * @param partTypeDetail
+ * @return
+ */
+ @PutMapping("/updatePartDetail")
+ public Result updatePartDetail(@RequestBody PartTypeDetail partTypeDetail) {
+// boolean flag = partTypeDetailService.updateById(partTypeDetail);
+// return flag ? Result.ok() : Result.error();
+ return partTypeDetailService.updatePartDetail(partTypeDetail);
+ }
+
+ //根据checkbox多选框批量删除部件型号
+ @DeleteMapping("/deletePartDetailBatch")
+ public Result deletePartDetailBatch(@RequestBody List detailList) {
+ return partTypeDetailService.deleteDeviceDetailBatch(detailList);
+ }
+}
+
diff --git a/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/controller/PartTypeGroupController.java b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/controller/PartTypeGroupController.java
new file mode 100644
index 0000000..9dfd200
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/controller/PartTypeGroupController.java
@@ -0,0 +1,75 @@
+package com.cqu.device.controller;
+
+
+import com.cqu.device.entity.DeviceTypeGroup;
+import com.cqu.device.entity.PartTypeGroup;
+import com.cqu.device.service.PartTypeGroupService;
+import com.cqu.utils.Result;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ *
+ * 部件分组 部件分组 前端控制器
+ *
+ *
+ * @author testjava
+ * @since 2022-04-15
+ */
+@RestController
+@RequestMapping("/device/part-type-group")
+//@CrossOrigin
+public class PartTypeGroupController {
+
+ @Autowired
+ private PartTypeGroupService partTypeGroupService;
+
+ /**
+ * 新建部件分组
+ * @param typeId
+ * @param typeGroupId
+ * @param partTypeGroup
+ * @return
+ */
+ @PostMapping("/addPartGroupByTypeId/{typeId}/{typeGroupId}")
+ public Result addPartGroupByTypeId(@PathVariable String typeId, @PathVariable String typeGroupId,@RequestBody PartTypeGroup partTypeGroup) {
+// partTypeGroup.setTypeId(typeId);
+// partTypeGroup.setParentGroupId(typeGroupId);
+// boolean flag = partTypeGroupService.save(partTypeGroup);
+// return flag ? Result.ok() : Result.error();
+ return partTypeGroupService.addPartGroupByTypeId(typeId, typeGroupId, partTypeGroup);
+ }
+
+ //根据部件分组id查询部件分组 用于数据回显
+ @GetMapping("/getPartGroupById/{id}")
+ public Result getPartGroupById(@PathVariable String id) {
+ PartTypeGroup partTypeGroup = partTypeGroupService.getById(id);
+ return Result.ok().data("partTypeGroup", partTypeGroup);
+ }
+
+ /**
+ * 修改部件分组
+ * @param partTypeGroup 部件分组实体
+ * @return
+ */
+ @PutMapping("/updatePartGroup")
+ public Result updatePartGroup(@RequestBody PartTypeGroup partTypeGroup) {
+// boolean flag = partTypeGroupService.updateById(partTypeGroup);
+// return flag ? Result.ok() : Result.error();
+ return partTypeGroupService.updatePartGroup(partTypeGroup);
+ }
+
+ //删除部件分组(需要判断下面是否还有部件型号)
+ @DeleteMapping("/deletePartGroupById/{id}")
+ public Result deletePartGroupById(@PathVariable String id) {
+ return partTypeGroupService.deletePartGroupById(id);
+ }
+
+ //根据部件分组id查询部件类型id,解决小BUG
+ @GetMapping("/getTypeIdByGroupId/{groupId}")
+ public Result getTypeIdByGroupId(@PathVariable String groupId) {
+ String typeId = partTypeGroupService.getTypeIdByGroupId(groupId);
+ return Result.ok().data("typeId", typeId);
+ }
+}
+
diff --git a/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/controller/SubSystemController.java b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/controller/SubSystemController.java
new file mode 100644
index 0000000..7e3d5c8
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/controller/SubSystemController.java
@@ -0,0 +1,62 @@
+package com.cqu.device.controller;
+
+
+import com.cqu.device.entity.SubSystem;
+import com.cqu.device.service.SubSystemService;
+import com.cqu.utils.Result;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+/**
+ *
+ * 子系统 子系统 前端控制器
+ *
+ *
+ * @author testjava
+ * @since 2022-04-21
+ */
+@RestController
+@RequestMapping("/device/sub-system")
+//@CrossOrigin
+public class SubSystemController {
+
+ @Autowired
+ private SubSystemService subSystemService;
+
+ //根据子系统id获得设备型号id
+ @GetMapping("/getDetailIdBySubSystemId/{id}")
+ public Result getDetailIdBySubSystemId(@PathVariable String id) {
+ return subSystemService.getDetailIdBySubSystemId(id);
+ }
+
+ //新建子系统(根据设备型号id)
+ @PostMapping("/addSubSystem/{detailId}")
+ public Result addSubSystem(@PathVariable String detailId, @RequestBody SubSystem subSystem) {
+ subSystem.setDeviceDetailId(detailId);
+ return subSystemService.addSubSystem(detailId, subSystem);
+// boolean flag = subSystemService.save(subSystem);
+// return flag ? Result.ok() : Result.error();
+ }
+
+ //根据子系统Id查询子系统(回显)
+ @GetMapping("/getSubSystemById/{id}")
+ public Result getSubSystemById(@PathVariable String id) {
+ SubSystem subSystem = subSystemService.getById(id);
+ return Result.ok().data("subSystem", subSystem);
+ }
+
+ //修改子系统
+ @PutMapping("/updateSubSystem")
+ public Result updateSubSystem(@RequestBody SubSystem subSystem) {
+ return subSystemService.updateSubSystem(subSystem);
+// boolean flag = subSystemService.updateById(subSystem);
+// return flag ? Result.ok() : Result.error();
+ }
+
+ //删除子系统
+ @DeleteMapping("/deleteSubSystemById/{id}")
+ public Result deleteSubSystemById(@PathVariable String id) {
+ return subSystemService.deleteSubSystemById(id);
+ }
+}
+
diff --git a/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/entity/DataModel.java b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/entity/DataModel.java
new file mode 100644
index 0000000..83b6faa
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/entity/DataModel.java
@@ -0,0 +1,56 @@
+package com.cqu.device.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @author xiaolong
+ * @Description
+ * @create 2022-04-24-14:51
+ */
+@Data
+public class DataModel {
+ @ApiModelProperty(value = "编号")
+ @TableId(value = "id", type = IdType.ID_WORKER_STR)
+ private String id;
+
+ @ApiModelProperty(value = "设备类型id")
+ private String typeId;
+
+ @ApiModelProperty(value = "设备详细id")
+ private String detailId;
+
+ @ApiModelProperty(value = "数据模型名称")
+ private String name;
+
+ @ApiModelProperty(value = "数据模型显示名称")
+ private String showName;
+
+
+ @ApiModelProperty(value = "描述")
+ private String description;
+
+ @ApiModelProperty(value = "是否已被删除")
+ @TableLogic
+ private Integer isDeleted;
+
+ @ApiModelProperty(value = "创建人")
+ private String createPerson;
+
+ @ApiModelProperty(value = "创建日期")
+ @TableField(fill = FieldFill.INSERT)
+ private Date gmtCreate;
+
+ @ApiModelProperty(value = "修改时间")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Date gmtModified;
+
+ @TableField(exist = false)
+ private String deviceTypeName;
+
+ @TableField(exist = false)
+ private String deviceTypeDetailName;
+}
diff --git a/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/entity/Device.java b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/entity/Device.java
new file mode 100644
index 0000000..912009b
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/entity/Device.java
@@ -0,0 +1,85 @@
+package com.cqu.device.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+
+import java.util.Date;
+import java.io.Serializable;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ *
+ * 设备 设备
+ *
+ *
+ * @author ranmaoqi
+ * @since 2022-05-18
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="Device对象", description="设备 设备")
+public class Device implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty(value = "编号")
+ @TableId(value = "id", type = IdType.ID_WORKER_STR)
+ private String id;
+
+ @ApiModelProperty(value = "设备组id")
+ private String groupId;
+
+ @ApiModelProperty(value = "设备标识")
+ private String name;
+
+ @ApiModelProperty(value = "设备类型")
+ private String typeId;
+
+ @ApiModelProperty(value = "设备型号")
+ private String detailId;
+
+ @ApiModelProperty(value = "设备编码")
+ private String deviceCode;
+
+ @ApiModelProperty(value = "出厂日期")
+ @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd")
+ private Date produceTime;
+
+ @ApiModelProperty(value = "东经")
+ private String eastLongitude;
+
+ @ApiModelProperty(value = "北纬")
+ private String northLatitude;
+
+ @ApiModelProperty(value = "描述")
+ private String description;
+
+ @ApiModelProperty(value = "是否已被删除")
+ @TableLogic
+ private Integer isDeleted;
+
+ @ApiModelProperty(value = "创建人")
+ private String createPerson;
+
+ @ApiModelProperty(value = "创建日期")
+ @TableField(fill = FieldFill.INSERT)
+ private Date gmtCreate;
+
+ @ApiModelProperty(value = "修改时间")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Date gmtModified;
+
+ @TableField(exist = false)
+ private String typeName;
+
+ @TableField(exist = false)
+ private String detailName;
+
+
+}
diff --git a/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/entity/DeviceArea.java b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/entity/DeviceArea.java
new file mode 100644
index 0000000..727dd34
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/entity/DeviceArea.java
@@ -0,0 +1,56 @@
+package com.cqu.device.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+
+import java.util.Date;
+
+import java.io.Serializable;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ *
+ * 设备区域 设备区域
+ *
+ *
+ * @author ranmaoqi
+ * @since 2022-05-18
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="DeviceArea对象", description="设备区域 设备区域")
+public class DeviceArea implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty(value = "编号")
+ @TableId(value = "id", type = IdType.ID_WORKER_STR)
+ private String id;
+
+ @ApiModelProperty(value = "区域名称")
+ private String showName;
+
+ @ApiModelProperty(value = "描述")
+ private String description;
+
+ @ApiModelProperty(value = "是否已被删除")
+ @TableLogic
+ private Integer isDeleted;
+
+ @ApiModelProperty(value = "创建人")
+ private String createPerson;
+
+ @ApiModelProperty(value = "创建日期")
+ @TableField(fill = FieldFill.INSERT)
+ private Date gmtCreate;
+
+ @ApiModelProperty(value = "修改时间")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Date gmtModified;
+
+
+}
diff --git a/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/entity/DeviceGroup.java b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/entity/DeviceGroup.java
new file mode 100644
index 0000000..2cfc7ba
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/entity/DeviceGroup.java
@@ -0,0 +1,74 @@
+package com.cqu.device.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+
+import java.util.Date;
+import java.io.Serializable;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ *
+ * 设备组 设备组
+ *
+ *
+ * @author ranmaoqi
+ * @since 2022-05-18
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="DeviceGroup对象", description="设备组 设备组")
+public class DeviceGroup implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty(value = "编号")
+ @TableId(value = "id", type = IdType.ID_WORKER_STR)
+ private String id;
+
+ @ApiModelProperty(value = "设备组标识")
+ private String name;
+
+ @ApiModelProperty(value = "设备组名称 ")
+ private String showName;
+
+ @ApiModelProperty(value = "设备区域id")
+ private String areaId;
+
+ @ApiModelProperty(value = "设备组编码")
+ private String groupCode;
+
+ @ApiModelProperty(value = "所在地")
+ private String location;
+
+ @ApiModelProperty(value = "东经")
+ private String eastLongitude;
+
+ @ApiModelProperty(value = "北纬")
+ private String northLatitude;
+
+ @ApiModelProperty(value = "描述")
+ private String description;
+
+ @ApiModelProperty(value = "是否已被删除")
+ @TableLogic
+ private Integer isDeleted;
+
+ @ApiModelProperty(value = "创建人")
+ private String createPerson;
+
+ @ApiModelProperty(value = "创建日期")
+ @TableField(fill = FieldFill.INSERT)
+ private Date gmtCreate;
+
+ @ApiModelProperty(value = "修改时间")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Date gmtModified;
+
+
+}
diff --git a/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/entity/DeviceType.java b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/entity/DeviceType.java
new file mode 100644
index 0000000..b2ffb66
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/entity/DeviceType.java
@@ -0,0 +1,59 @@
+package com.cqu.device.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+
+import java.util.Date;
+
+import java.io.Serializable;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ *
+ * 设备类型 设备类型
+ *
+ *
+ * @author testjava
+ * @since 2022-04-11
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="DeviceType对象", description="设备类型 设备类型")
+public class DeviceType implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty(value = "编号")
+ @TableId(value = "id", type = IdType.ID_WORKER_STR)
+ private String id;
+
+ @ApiModelProperty(value = "设备类型名称")
+ private String name;
+
+ @ApiModelProperty(value = "显示名称")
+ private String showName;
+
+ @ApiModelProperty(value = "描述")
+ private String description;
+
+ @ApiModelProperty(value = "是否已被删除")
+ @TableLogic
+ private Integer isDeleted;
+
+ @ApiModelProperty(value = "创建人")
+ private String createPerson;
+
+ @ApiModelProperty(value = "创建日期")
+ @TableField(fill = FieldFill.INSERT)
+ private Date gmtCreate;
+
+ @ApiModelProperty(value = "修改时间")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Date gmtModified;
+
+
+}
diff --git a/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/entity/DeviceTypeDetail.java b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/entity/DeviceTypeDetail.java
new file mode 100644
index 0000000..4060a15
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/entity/DeviceTypeDetail.java
@@ -0,0 +1,71 @@
+package com.cqu.device.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+
+import java.util.Date;
+
+import java.io.Serializable;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ *
+ * 设备型号 设备型号表
+ *
+ *
+ * @author testjava
+ * @since 2022-04-11
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="DeviceTypeDetail对象", description="设备型号 设备型号表")
+public class DeviceTypeDetail implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty(value = "编号")
+ @TableId(value = "id", type = IdType.ID_WORKER_STR)
+ private String id;
+
+ @ApiModelProperty(value = "设备类型id")
+ private String typeId;
+
+ @ApiModelProperty(value = "设备分组id")
+ private String typeGroupId;
+
+ @ApiModelProperty(value = "设备标识")
+ private String name;
+
+ @ApiModelProperty(value = "型号名称")
+ private String showName;
+
+ @ApiModelProperty(value = "规格类型")
+ private String specificationType;
+
+ @ApiModelProperty(value = "生产厂商")
+ private String manufacturer;
+
+ @ApiModelProperty(value = "描述")
+ private String description;
+
+ @ApiModelProperty(value = "是否已被删除")
+ @TableLogic
+ private Integer isDeleted;
+
+ @ApiModelProperty(value = "创建人")
+ private String createPerson;
+
+ @ApiModelProperty(value = "创建日期")
+ @TableField(fill = FieldFill.INSERT)
+ private Date gmtCreate;
+
+ @ApiModelProperty(value = "修改时间")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Date gmtModified;
+
+
+}
diff --git a/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/entity/DeviceTypeGroup.java b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/entity/DeviceTypeGroup.java
new file mode 100644
index 0000000..1ce8f62
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/entity/DeviceTypeGroup.java
@@ -0,0 +1,62 @@
+package com.cqu.device.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+
+import java.util.Date;
+
+import java.io.Serializable;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ *
+ * 设备分组 设备分组
+ *
+ *
+ * @author testjava
+ * @since 2022-04-11
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="DeviceTypeGroup对象", description="设备分组 设备分组")
+public class DeviceTypeGroup implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty(value = "编号")
+ @TableId(value = "id", type = IdType.ID_WORKER_STR)
+ private String id;
+
+ @ApiModelProperty(value = "设备类型id")
+ private String typeId;
+
+ @ApiModelProperty(value = "父组id")
+ private String parentGroupId;
+
+ @ApiModelProperty(value = "描述")
+ private String description;
+
+ @ApiModelProperty(value = "部件分组名称")
+ private String showName;
+
+ @ApiModelProperty(value = "是否已被删除")
+ @TableLogic
+ private Integer isDeleted;
+
+ @ApiModelProperty(value = "创建人")
+ private String createPerson;
+
+ @ApiModelProperty(value = "创建日期")
+ @TableField(fill = FieldFill.INSERT)
+ private Date gmtCreate;
+
+ @ApiModelProperty(value = "修改时间")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Date gmtModified;
+
+
+}
diff --git a/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/entity/Part.java b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/entity/Part.java
new file mode 100644
index 0000000..23712a8
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/entity/Part.java
@@ -0,0 +1,60 @@
+package com.cqu.device.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+
+import java.util.Date;
+
+import java.io.Serializable;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ *
+ * 部件 部件
+ *
+ *
+ * @author testjava
+ * @since 2022-04-21
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="Part对象", description="部件 部件")
+public class Part implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty(value = "编号")
+ @TableId(value = "id", type = IdType.ID_WORKER_STR)
+ private String id;
+
+ @ApiModelProperty(value = "设备类型id")
+ private String deviceDetailId;
+
+ @ApiModelProperty(value = "子系统id")
+ private String subSystemId;
+
+ @ApiModelProperty(value = "部件类型id")
+ private String partTypeId;
+
+ @ApiModelProperty(value = "描述")
+ private String description;
+
+ @ApiModelProperty(value = "是否已被删除")
+ @TableLogic
+ private Integer isDeleted;
+
+ @ApiModelProperty(value = "创建日期")
+ @TableField(fill = FieldFill.INSERT)
+ private Date gmtCreate;
+
+ @ApiModelProperty(value = "修改时间")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Date gmtModified;
+
+
+}
diff --git a/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/entity/PartType.java b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/entity/PartType.java
new file mode 100644
index 0000000..f33172a
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/entity/PartType.java
@@ -0,0 +1,60 @@
+package com.cqu.device.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+
+import java.util.Date;
+
+import java.io.Serializable;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ *
+ * 部件类型表 部件类型表
+ *
+ *
+ * @author testjava
+ * @since 2022-04-15
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="PartType对象", description="部件类型表")
+public class PartType extends DeviceType implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty(value = "编号")
+ @TableId(value = "id", type = IdType.ID_WORKER_STR)
+ private String id;
+
+ @ApiModelProperty(value = "类型名称")
+ private String name;
+
+ @ApiModelProperty(value = "显示名称")
+ private String showName;
+
+ @ApiModelProperty(value = "描述")
+ private String description;
+
+ @ApiModelProperty(value = "是否已被删除")
+ @TableLogic
+ private Integer isDeleted;
+
+ @ApiModelProperty(value = "创建人")
+ private String createPerson;
+
+ @ApiModelProperty(value = "创建日期")
+ @TableField(fill = FieldFill.INSERT)
+ private Date gmtCreate;
+
+ @ApiModelProperty(value = "修改时间")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Date gmtModified;
+
+
+}
diff --git a/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/entity/PartTypeDetail.java b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/entity/PartTypeDetail.java
new file mode 100644
index 0000000..1a12187
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/entity/PartTypeDetail.java
@@ -0,0 +1,72 @@
+package com.cqu.device.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+
+import java.util.Date;
+
+import java.io.Serializable;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ *
+ * 部件型号 部件型号表
+ *
+ *
+ * @author testjava
+ * @since 2022-04-15
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="PartTypeDetail对象", description="部件型号 部件型号表")
+public class PartTypeDetail extends DeviceTypeDetail implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty(value = "编号")
+ @TableId(value = "id", type = IdType.ID_WORKER_STR)
+ private String id;
+
+ @ApiModelProperty(value = "部件类型id")
+ private String typeId;
+
+ @ApiModelProperty(value = "部件分组id")
+ private String typeGroupId;
+
+ @ApiModelProperty(value = "设备标识")
+ private String name;
+
+ @ApiModelProperty(value = "型号名称")
+ private String showName;
+
+ @ApiModelProperty(value = "规格类型")
+ private String specificationType;
+
+ @ApiModelProperty(value = "生产厂商")
+ private String manufacturer;
+
+ @ApiModelProperty(value = "描述")
+ private String description;
+
+ @ApiModelProperty(value = "是否已被删除")
+ @TableLogic
+ private Integer isDeleted;
+
+ @ApiModelProperty(value = "创建人")
+ private String createPerson;
+
+ @ApiModelProperty(value = "创建日期")
+ @TableField(fill = FieldFill.INSERT)
+ private Date gmtCreate;
+
+ @ApiModelProperty(value = "修改时间")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Date gmtModified;
+
+
+}
diff --git a/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/entity/PartTypeGroup.java b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/entity/PartTypeGroup.java
new file mode 100644
index 0000000..6eb55ce
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/entity/PartTypeGroup.java
@@ -0,0 +1,62 @@
+package com.cqu.device.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+
+import java.util.Date;
+import java.io.Serializable;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ *
+ * 部件分组 部件分组
+ *
+ *
+ * @author testjava
+ * @since 2022-04-15
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="PartTypeGroup对象", description="部件分组 部件分组")
+public class PartTypeGroup implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty(value = "编号")
+ @TableId(value = "id", type = IdType.ID_WORKER_STR)
+ private String id;
+
+ @ApiModelProperty(value = "父组id")
+ private String parentGroupId;
+
+ @ApiModelProperty(value = "部件类型id")
+ private String typeId;
+
+ @ApiModelProperty(value = "部件分组名称")
+ private String showName;
+
+ @ApiModelProperty(value = "描述")
+ private String description;
+
+ @ApiModelProperty(value = "是否已被删除")
+ @TableLogic
+ private Integer isDeleted;
+
+ @ApiModelProperty(value = "创建人")
+ private String createPerson;
+
+ @ApiModelProperty(value = "创建日期")
+ @TableField(fill = FieldFill.INSERT)
+ private Date gmtCreate;
+
+ @ApiModelProperty(value = "修改时间")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Date gmtModified;
+
+
+}
diff --git a/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/entity/SubSystem.java b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/entity/SubSystem.java
new file mode 100644
index 0000000..e1d2f7b
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/entity/SubSystem.java
@@ -0,0 +1,62 @@
+package com.cqu.device.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+
+import java.util.Date;
+import java.io.Serializable;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ *
+ * 子系统 子系统
+ *
+ *
+ * @author testjava
+ * @since 2022-04-21
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value="SubSystem对象", description="子系统 子系统")
+public class SubSystem implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ @ApiModelProperty(value = "编号")
+ @TableId(value = "id", type = IdType.ID_WORKER_STR)
+ private String id;
+
+ @ApiModelProperty(value = "名称")
+ private String name;
+
+ @ApiModelProperty(value = "显示名称")
+ private String showName;
+
+ @ApiModelProperty(value = "描述")
+ private String description;
+
+ @ApiModelProperty(value = "设备型号id")
+ private String deviceDetailId;
+
+ @ApiModelProperty(value = "是否已被删除")
+ @TableLogic
+ private Integer isDeleted;
+
+ @ApiModelProperty(value = "创建人")
+ private String createPerson;
+
+ @ApiModelProperty(value = "创建日期")
+ @TableField(fill = FieldFill.INSERT)
+ private Date gmtCreate;
+
+ @ApiModelProperty(value = "修改时间")
+ @TableField(fill = FieldFill.INSERT_UPDATE)
+ private Date gmtModified;
+
+
+}
diff --git a/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/entity/vo/AreaVo.java b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/entity/vo/AreaVo.java
new file mode 100644
index 0000000..e2c5e32
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/entity/vo/AreaVo.java
@@ -0,0 +1,20 @@
+package com.cqu.device.entity.vo;
+
+import lombok.Data;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author ranmaoqi
+ * @time 2022-05-18 11:25
+ */
+@Data
+public class AreaVo {
+
+ private String areaId;
+ private String showName;
+ private List children = new ArrayList<>();
+ private String icon = "el-icon-map-location";
+
+}
diff --git a/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/entity/vo/DeviceGroupVo.java b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/entity/vo/DeviceGroupVo.java
new file mode 100644
index 0000000..1e7f4c2
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/entity/vo/DeviceGroupVo.java
@@ -0,0 +1,17 @@
+package com.cqu.device.entity.vo;
+
+import lombok.Data;
+
+/**
+ * @author ranmaoqi
+ * @time 2022-05-18 11:35
+ */
+@Data
+public class DeviceGroupVo {
+
+ private String deviceGroupId;
+ private String showName;
+
+ private String icon = "el-icon-folder-opened";
+
+}
diff --git a/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/entity/vo/DeviceListVo.java b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/entity/vo/DeviceListVo.java
new file mode 100644
index 0000000..8d0c8ec
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/entity/vo/DeviceListVo.java
@@ -0,0 +1,19 @@
+package com.cqu.device.entity.vo;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author ranmaoqi
+ * @time 2022-05-18 11:23
+ */
+@Data
+public class DeviceListVo {
+
+ private String showName = "设备列表";
+ private List children;
+
+ private String icon = "el-icon-s-unfold";
+
+}
diff --git a/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/entity/vo/GraphVo.java b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/entity/vo/GraphVo.java
new file mode 100644
index 0000000..401abfb
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/entity/vo/GraphVo.java
@@ -0,0 +1,19 @@
+package com.cqu.device.entity.vo;
+
+import lombok.Data;
+import springfox.documentation.spring.web.json.Json;
+
+import java.util.List;
+
+/**
+ * 结构图谱数据图谱的graph
+ * @Author: ranmaoqi
+ * @Date: 2023/01/11 16:51
+ */
+@Data
+public class GraphVo {
+
+ List nodes;
+ List links;
+
+}
diff --git a/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/entity/vo/GroupNodeVo.java b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/entity/vo/GroupNodeVo.java
new file mode 100644
index 0000000..add5c69
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/entity/vo/GroupNodeVo.java
@@ -0,0 +1,31 @@
+package com.cqu.device.entity.vo;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author xiaolong
+ * @Description
+ * @create 2022-04-22-11:22
+ */
+@Data
+public class GroupNodeVo extends commonGroupVo{
+ private String id;
+ private String parentGroupId;
+ private String showName;
+ private String typeId;
+ private List children;
+
+ private String icon = "el-icon-folder-opened";
+
+
+ public String getId() {
+ return id;
+ }
+
+ public String getParentGroupId() {
+ return parentGroupId;
+ }
+
+}
diff --git a/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/entity/vo/LinksVo.java b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/entity/vo/LinksVo.java
new file mode 100644
index 0000000..220d32f
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/entity/vo/LinksVo.java
@@ -0,0 +1,15 @@
+package com.cqu.device.entity.vo;
+
+import lombok.Data;
+
+/**
+ * @Author: ranmaoqi
+ * @Date: 2023/01/11 16:52
+ */
+@Data
+public class LinksVo {
+
+ String source;
+ String target;
+
+}
diff --git a/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/entity/vo/NodeVo.java b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/entity/vo/NodeVo.java
new file mode 100644
index 0000000..99508ae
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/entity/vo/NodeVo.java
@@ -0,0 +1,18 @@
+package com.cqu.device.entity.vo;
+
+import lombok.Data;
+
+/**
+ * @author xiaolong
+ * @Description
+ * @create 2022-04-22-12:22
+ */
+@Data
+public class NodeVo {
+ private String id;
+ private String typeId;
+ private String typeGroupId;
+ private String showName;
+
+ private String icon = "el-icon-s-tools";
+}
diff --git a/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/entity/vo/NodesVo.java b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/entity/vo/NodesVo.java
new file mode 100644
index 0000000..f374f3c
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/entity/vo/NodesVo.java
@@ -0,0 +1,20 @@
+package com.cqu.device.entity.vo;
+
+import lombok.Data;
+
+/**
+ * 结构图普中的node
+ * @Author: ranmaoqi
+ * @Date: 2023/01/11 16:52
+ */
+@Data
+public class NodesVo {
+
+ String id;
+ String name;
+ int symbolSize;
+ double x;
+ double y;
+ int category;
+
+}
diff --git a/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/entity/vo/PartVo.java b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/entity/vo/PartVo.java
new file mode 100644
index 0000000..47f360f
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/entity/vo/PartVo.java
@@ -0,0 +1,17 @@
+package com.cqu.device.entity.vo;
+
+import lombok.Data;
+
+/**
+ * @author ranmaoqi
+ * @time 2022-04-21 15:16
+ */
+@Data
+public class PartVo {
+
+ private String partId;
+ private String showName;
+
+ private String icon = "el-icon-s-tools";
+
+}
diff --git a/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/entity/vo/SubSystemVo.java b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/entity/vo/SubSystemVo.java
new file mode 100644
index 0000000..1c9494e
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/entity/vo/SubSystemVo.java
@@ -0,0 +1,22 @@
+package com.cqu.device.entity.vo;
+
+import lombok.Data;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author ranmaoqi
+ * @time 2022-04-21 15:14
+ */
+@Data
+public class SubSystemVo {
+
+ private String subSystemId;
+ private String showName;
+
+ private List children = new ArrayList<>();
+
+ private String icon = "el-icon-folder-opened";
+
+}
diff --git a/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/entity/vo/TypeNodeVo.java b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/entity/vo/TypeNodeVo.java
new file mode 100644
index 0000000..f28bca4
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/entity/vo/TypeNodeVo.java
@@ -0,0 +1,20 @@
+package com.cqu.device.entity.vo;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author xiaolong
+ * @Description
+ * @create 2022-04-22-11:47
+ */
+@Data
+public class TypeNodeVo extends commonGroupVo {
+ private String id;
+ private String showName;
+ private List children;
+
+ private String icon = "el-icon-share";
+
+}
diff --git a/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/entity/vo/commonGroupVo.java b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/entity/vo/commonGroupVo.java
new file mode 100644
index 0000000..adcee2a
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/entity/vo/commonGroupVo.java
@@ -0,0 +1,18 @@
+package com.cqu.device.entity.vo;
+
+import lombok.Data;
+
+import java.util.List;
+
+/**
+ * @author xiaolong
+ * @Description
+ * @create 2022-04-25-13:58
+ */
+@Data
+public class commonGroupVo {
+ private String parentGroupId;
+ private String Id;
+ private List children;
+ private String typeId;
+}
diff --git a/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/mapper/DataModelMapper.java b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/mapper/DataModelMapper.java
new file mode 100644
index 0000000..e3f8f93
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/mapper/DataModelMapper.java
@@ -0,0 +1,16 @@
+package com.cqu.device.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.cqu.device.entity.DataModel;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+/**
+ * @author xiaolong
+ * @Description
+ * @create 2022-04-24-15:06
+ */
+@Mapper
+public interface DataModelMapper extends BaseMapper {
+
+}
diff --git a/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/mapper/DeviceAreaMapper.java b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/mapper/DeviceAreaMapper.java
new file mode 100644
index 0000000..1caac35
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/mapper/DeviceAreaMapper.java
@@ -0,0 +1,16 @@
+package com.cqu.device.mapper;
+
+import com.cqu.device.entity.DeviceArea;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ *
+ * 设备区域 设备区域 Mapper 接口
+ *
+ *
+ * @author ranmaoqi
+ * @since 2022-05-18
+ */
+public interface DeviceAreaMapper extends BaseMapper {
+
+}
diff --git a/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/mapper/DeviceGroupMapper.java b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/mapper/DeviceGroupMapper.java
new file mode 100644
index 0000000..1657dcf
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/mapper/DeviceGroupMapper.java
@@ -0,0 +1,36 @@
+package com.cqu.device.mapper;
+
+import com.cqu.device.entity.DeviceGroup;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ *
+ * 设备组 设备组 Mapper 接口
+ *
+ *
+ * @author ranmaoqi
+ * @since 2022-05-18
+ */
+@Mapper
+public interface DeviceGroupMapper extends BaseMapper {
+
+ /**
+ * 查找当前区域下,name或showName重复的设备组个数
+ * @param areaId 区域Id
+ * @param name 设备组标识
+ * @param showName 设备组名称
+ * @return
+ */
+ Integer getCountByAreaId(String areaId, String name, String showName);
+
+ /**
+ * 查找当前区域下,除了当前设备组,name或showName重复的设备组个数
+ * @param areaId 区域Id
+ * @param id 当前设备组Id
+ * @param name 设备组标识
+ * @param showName 设备组名称
+ * @return
+ */
+ Integer getCountByAreaIdAndId(String areaId, String id, String name, String showName);
+}
diff --git a/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/mapper/DeviceMapper.java b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/mapper/DeviceMapper.java
new file mode 100644
index 0000000..ade3473
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/mapper/DeviceMapper.java
@@ -0,0 +1,16 @@
+package com.cqu.device.mapper;
+
+import com.cqu.device.entity.Device;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ *
+ * 设备 设备 Mapper 接口
+ *
+ *
+ * @author ranmaoqi
+ * @since 2022-05-18
+ */
+public interface DeviceMapper extends BaseMapper {
+
+}
diff --git a/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/mapper/DeviceTypeDetailMapper.java b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/mapper/DeviceTypeDetailMapper.java
new file mode 100644
index 0000000..5ed6787
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/mapper/DeviceTypeDetailMapper.java
@@ -0,0 +1,35 @@
+package com.cqu.device.mapper;
+
+import com.cqu.device.entity.DeviceTypeDetail;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+/**
+ *
+ * 设备型号 设备型号表 Mapper 接口
+ *
+ *
+ * @author testjava
+ * @since 2022-04-11
+ */
+@Mapper
+public interface DeviceTypeDetailMapper extends BaseMapper {
+
+
+
+ //根据id获得设备型号名称
+ String getDetailNameById(String id);
+
+ //查找设备类型下name或showName重复的个数
+ Integer getCountByTypeId(String typeId, String name, String showName);
+
+ //查找设备分组下name或showName重复的个数
+ Integer getCountByGroupId(String groupId, String name, String showName);
+
+ //查找设备类型下name或showName重复的个数
+ Integer getCountByIdAndTypeId(String id, String typeId, String name, String showName);
+
+ //查找设备分组下name或showName重复的个数
+ Integer getCountByIdAndGroupId(String id, String typeGroupId, String name, String showName);
+}
diff --git a/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/mapper/DeviceTypeGroupMapper.java b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/mapper/DeviceTypeGroupMapper.java
new file mode 100644
index 0000000..e74b2e6
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/mapper/DeviceTypeGroupMapper.java
@@ -0,0 +1,16 @@
+package com.cqu.device.mapper;
+
+import com.cqu.device.entity.DeviceTypeGroup;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ *
+ * 设备分组 设备分组 Mapper 接口
+ *
+ *
+ * @author testjava
+ * @since 2022-04-11
+ */
+public interface DeviceTypeGroupMapper extends BaseMapper {
+
+}
diff --git a/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/mapper/DeviceTypeMapper.java b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/mapper/DeviceTypeMapper.java
new file mode 100644
index 0000000..9932bac
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/mapper/DeviceTypeMapper.java
@@ -0,0 +1,20 @@
+package com.cqu.device.mapper;
+
+import com.cqu.device.entity.DeviceType;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+import org.springframework.stereotype.Repository;
+
+/**
+ *
+ * 设备类型 设备类型 Mapper 接口
+ *
+ *
+ * @author testjava
+ * @since 2022-04-11
+ */
+@Mapper
+public interface DeviceTypeMapper extends BaseMapper {
+
+ int getCount(String id, String name, String showName);
+}
diff --git a/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/mapper/PartMapper.java b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/mapper/PartMapper.java
new file mode 100644
index 0000000..41f45d7
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/mapper/PartMapper.java
@@ -0,0 +1,29 @@
+package com.cqu.device.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.cqu.device.entity.Part;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+/**
+ *
+ * 部件 部件 Mapper 接口
+ *
+ *
+ * @author testjava
+ * @since 2022-04-21
+ */
+@Mapper
+public interface PartMapper extends BaseMapper {
+
+ //根据detailId得到partTypeIds
+ List listPartTypeIdByDetailId(String detailId);
+
+ //根据subSystemId得到partTypeIds
+ List listPartTypeBySubSystemId(String subSystemId);
+
+ //根据detailId得到SubsystemIds
+ List getSubSystemIdsByDetailId(String detailId);
+
+}
diff --git a/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/mapper/PartTypeDetailMapper.java b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/mapper/PartTypeDetailMapper.java
new file mode 100644
index 0000000..a6b0fb4
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/mapper/PartTypeDetailMapper.java
@@ -0,0 +1,46 @@
+package com.cqu.device.mapper;
+
+import com.cqu.device.entity.PartTypeDetail;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ *
+ * 部件型号 部件型号表 Mapper 接口
+ *
+ *
+ * @author testjava
+ * @since 2022-04-15
+ */
+@Mapper
+public interface PartTypeDetailMapper extends BaseMapper {
+
+ /**
+ * 查找name或showName重复的个数(typeId下)
+ * @param typeId
+ * @param name
+ * @param showName
+ */
+ Integer getCountByTypeId(String typeId, String name, String showName);
+
+ /**
+ * 查找name或showName重复的个数(typeId和groupId)
+ * @param typeId
+ * @param groupId
+ * @param name
+ * @param showName
+ * @return
+ */
+ Integer getCountByTypeIdAndGroupId(String typeId, String groupId, String name, String showName);
+
+ /**
+ * 查找name或showName重复的个数(typeId和groupId),除了当前型号
+ * @param id
+ * @param typeId
+ * @param groupId
+ * @param name
+ * @param showName
+ * @return
+ */
+ Integer getCountByTypeIdAndGroupIdExceptId(String id, String typeId, String groupId, String name, String showName);
+}
diff --git a/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/mapper/PartTypeGroupMapper.java b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/mapper/PartTypeGroupMapper.java
new file mode 100644
index 0000000..c901a5a
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/mapper/PartTypeGroupMapper.java
@@ -0,0 +1,18 @@
+package com.cqu.device.mapper;
+
+import com.cqu.device.entity.PartTypeGroup;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ *
+ * 部件分组 部件分组 Mapper 接口
+ *
+ *
+ * @author testjava
+ * @since 2022-04-15
+ */
+@Mapper
+public interface PartTypeGroupMapper extends BaseMapper {
+
+}
diff --git a/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/mapper/PartTypeMapper.java b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/mapper/PartTypeMapper.java
new file mode 100644
index 0000000..e1a0342
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/mapper/PartTypeMapper.java
@@ -0,0 +1,29 @@
+package com.cqu.device.mapper;
+
+import com.cqu.device.entity.PartType;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ *
+ * 部件类型表 部件类型表 Mapper 接口
+ *
+ *
+ * @author testjava
+ * @since 2022-04-15
+ */
+@Mapper
+public interface PartTypeMapper extends BaseMapper {
+
+ //根据部件类型id获得部件类型名称
+ String getPartTypeShowNameById(String id);
+
+ /**
+ * 得到name或showName重复的数量(除了当前id的类型之外)
+ * @param id
+ * @param name
+ * @param showName
+ * @return
+ */
+ Integer getCountById(String id, String name, String showName);
+}
diff --git a/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/mapper/SubSystemMapper.java b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/mapper/SubSystemMapper.java
new file mode 100644
index 0000000..098514a
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/mapper/SubSystemMapper.java
@@ -0,0 +1,27 @@
+package com.cqu.device.mapper;
+
+import com.cqu.device.entity.SubSystem;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ *
+ * 子系统 子系统 Mapper 接口
+ *
+ *
+ * @author testjava
+ * @since 2022-04-21
+ */
+@Mapper
+public interface SubSystemMapper extends BaseMapper {
+
+ /**
+ * 查询detailId下,除当前子系统外,name或showName重复的个数
+ * @param id 子系统id
+ * @param detailId 设备型号id
+ * @param name 子系统标识
+ * @param showName 子系统名称
+ * @return
+ */
+ Integer getCount(String id, String detailId, String name, String showName);
+}
diff --git a/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/mapper/xml/DataModelMapper.xml b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/mapper/xml/DataModelMapper.xml
new file mode 100644
index 0000000..dc838a4
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/mapper/xml/DataModelMapper.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/mapper/xml/DeviceAreaMapper.xml b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/mapper/xml/DeviceAreaMapper.xml
new file mode 100644
index 0000000..0256613
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/mapper/xml/DeviceAreaMapper.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/mapper/xml/DeviceGroupMapper.xml b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/mapper/xml/DeviceGroupMapper.xml
new file mode 100644
index 0000000..dc30e76
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/mapper/xml/DeviceGroupMapper.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/mapper/xml/DeviceMapper.xml b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/mapper/xml/DeviceMapper.xml
new file mode 100644
index 0000000..36d6ae4
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/mapper/xml/DeviceMapper.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/mapper/xml/DeviceTypeDetailMapper.xml b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/mapper/xml/DeviceTypeDetailMapper.xml
new file mode 100644
index 0000000..392cda4
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/mapper/xml/DeviceTypeDetailMapper.xml
@@ -0,0 +1,54 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/mapper/xml/DeviceTypeGroupMapper.xml b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/mapper/xml/DeviceTypeGroupMapper.xml
new file mode 100644
index 0000000..db331e5
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/mapper/xml/DeviceTypeGroupMapper.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/mapper/xml/DeviceTypeMapper.xml b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/mapper/xml/DeviceTypeMapper.xml
new file mode 100644
index 0000000..a485523
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/mapper/xml/DeviceTypeMapper.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
diff --git a/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/mapper/xml/PartMapper.xml b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/mapper/xml/PartMapper.xml
new file mode 100644
index 0000000..e81990f
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/mapper/xml/PartMapper.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/mapper/xml/PartTypeDetailMapper.xml b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/mapper/xml/PartTypeDetailMapper.xml
new file mode 100644
index 0000000..af7fda2
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/mapper/xml/PartTypeDetailMapper.xml
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/mapper/xml/PartTypeGroupMapper.xml b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/mapper/xml/PartTypeGroupMapper.xml
new file mode 100644
index 0000000..6c6ff34
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/mapper/xml/PartTypeGroupMapper.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
diff --git a/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/mapper/xml/PartTypeMapper.xml b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/mapper/xml/PartTypeMapper.xml
new file mode 100644
index 0000000..8d14415
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/mapper/xml/PartTypeMapper.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/mapper/xml/SubSystemMapper.xml b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/mapper/xml/SubSystemMapper.xml
new file mode 100644
index 0000000..4e0e5da
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/mapper/xml/SubSystemMapper.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
diff --git a/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/service/DataModelService.java b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/service/DataModelService.java
new file mode 100644
index 0000000..6adf9a3
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/service/DataModelService.java
@@ -0,0 +1,24 @@
+package com.cqu.device.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.cqu.device.entity.DataModel;
+import com.cqu.utils.Result;
+
+import java.util.List;
+
+/**
+ * @author xiaolong
+ * @Description
+ * @create 2022-04-24-14:50
+ */
+public interface DataModelService extends IService {
+
+ // 根据设备详情id查询所属数据模型
+ Result listDataModelById(String id, Integer current, Integer size);
+
+ // 批量删除数据模型
+ Result deleteDataModelBatch(List dataModelList);
+
+ Result selectTreeAll();
+
+}
diff --git a/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/service/DeviceAreaService.java b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/service/DeviceAreaService.java
new file mode 100644
index 0000000..67fb55b
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/service/DeviceAreaService.java
@@ -0,0 +1,41 @@
+package com.cqu.device.service;
+
+import com.cqu.device.entity.DeviceArea;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.cqu.utils.Result;
+
+import java.util.List;
+
+/**
+ *
+ * 设备区域 设备区域 服务类
+ *
+ *
+ * @author ranmaoqi
+ * @since 2022-05-18
+ */
+public interface DeviceAreaService extends IService {
+
+ //分页查询所有区域列表
+ Result listAreaAll(Integer current, Integer size);
+
+ //根据id删除区域
+ Result deleteAreaById(String areaId);
+
+ //根据多选框批量删除区域
+ Result deleteAreaBatch(List areaList);
+
+ /**
+ * 新建区域
+ * @param deviceArea 区域实体
+ * @return
+ */
+ Result addArea(DeviceArea deviceArea);
+
+ /**
+ * 修改区域
+ * @param deviceArea 区域实体
+ * @return
+ */
+ Result updateArea(DeviceArea deviceArea);
+}
diff --git a/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/service/DeviceGroupService.java b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/service/DeviceGroupService.java
new file mode 100644
index 0000000..2753fcd
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/service/DeviceGroupService.java
@@ -0,0 +1,56 @@
+package com.cqu.device.service;
+
+import com.cqu.device.entity.DeviceGroup;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.cqu.device.entity.vo.DeviceListVo;
+import com.cqu.utils.Result;
+
+import java.util.List;
+
+/**
+ *
+ * 设备组 设备组 服务类
+ *
+ *
+ * @author ranmaoqi
+ * @since 2022-05-18
+ */
+public interface DeviceGroupService extends IService {
+
+ //查询区域、设备组的树形结构
+ List listTree();
+
+ //分页查询所有设备组列表
+ Result listDeviceGroupAll(Integer current, Integer size);
+
+ //根据区域id分组查询设备组列表
+ Result listDeviceGroupByAreaId(String areaId, Integer current, Integer size);
+
+ //根据id删除设备组
+ Result deleteDeviceGroupById(String groupId);
+
+ //批量删除设备组
+ Result deleteDeviceGroupBatch(List deviceGroupList);
+
+ /**
+ * 新建设备组(直接新建)
+ * @param deviceGroup 设备组实体
+ * @return
+ */
+ Result addDeviceGroup(DeviceGroup deviceGroup);
+
+ /**
+ * 新建设备组(在区域下)
+ * @param areaId 区域ID
+ * @param deviceGroup 设备组实体
+ * @return
+ */
+ Result addDeviceGroupByAreaId(String areaId, DeviceGroup deviceGroup);
+
+ /**
+ * 编辑设备组
+ * @param deviceGroup 设备组实体
+ * @return
+ */
+ Result updateDeviceGroup(DeviceGroup deviceGroup);
+}
diff --git a/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/service/DeviceService.java b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/service/DeviceService.java
new file mode 100644
index 0000000..4783a84
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/service/DeviceService.java
@@ -0,0 +1,57 @@
+package com.cqu.device.service;
+
+import com.cqu.device.entity.Device;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.cqu.device.entity.vo.TypeNodeVo;
+import com.cqu.utils.Result;
+
+import java.util.List;
+
+/**
+ *
+ * 设备 设备 服务类
+ *
+ *
+ * @author ranmaoqi
+ * @since 2022-05-18
+ */
+public interface DeviceService extends IService {
+
+ //根据设备组id查询设备
+ Result listDeviceByGroupId(String groupId, Integer current, Integer size);
+
+ //多选删除设备
+ Result deleteDeviceBatch(List deviceList);
+
+ //查询设备对象结构树,根据设备对象id
+ List getDeviceObjTreeById(String deviceId);
+
+ /**
+ * 新建设备
+ * @param groupId 设备组id
+ * @param device 设备实体
+ * @return
+ */
+ Result addDeviceByGroupId(String groupId, Device device);
+
+ /**
+ * 修改设备
+ * @param device 设备实体
+ * @return
+ */
+ Result updateDevice(Device device);
+
+ /**
+ * 根据设备对象id查询对应设备型号id,因为设备对象的数据集与其对应的设备型号的数据集一样
+ * @param deviceId
+ * @return
+ */
+ String getDeviceDetailIdByDeviceId(String deviceId);
+
+ /**
+ * 根据设备Id查询结构图谱
+ * @param deviceId
+ * @return
+ */
+ Result getStructureGraphById(String deviceId);
+}
diff --git a/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/service/DeviceTypeDetailService.java b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/service/DeviceTypeDetailService.java
new file mode 100644
index 0000000..99aa1fc
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/service/DeviceTypeDetailService.java
@@ -0,0 +1,52 @@
+package com.cqu.device.service;
+
+import com.cqu.device.entity.DeviceTypeDetail;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.cqu.device.entity.vo.TypeNodeVo;
+import com.cqu.utils.Result;
+
+import java.util.List;
+
+/**
+ *
+ * 设备型号 设备型号表 服务类
+ *
+ *
+ * @author testjava
+ * @since 2022-04-11
+ */
+public interface DeviceTypeDetailService extends IService {
+
+ //查询设备类型列表、设备类型分组、设备型号列表的树形列表
+ List listDeviceDetail();
+
+ //根据设备类型id查询所有的设备型号(分页)
+ Result listDeviceDetailByTypeId(String typeId, Integer current, Integer size);
+
+ //根据checkbox多选框批量删除设备型号
+ Result deleteDeviceDetailBatch(List detailList);
+
+ //根据设备分组id查询所有设备型号(分页)
+ Result listDeviceDetailByGroupId(String groupId, Integer current, Integer size);
+
+ String getDetailNameById(String id);
+
+ //根据设备类型id查询该类型所有设备型号(用于设备对象管理模块)
+ Result listDeviceDetailAllByTypeId(String typeId);
+
+ //新建设备型号(基于设备类型id)
+ Result addDeviceDetail(String typeId, DeviceTypeDetail deviceTypeDetail);
+
+ //新建设备型号(基于设备类型id和设备分组id)
+ Result addDeviceDetailByTypeIdAndGroupId(String groupId, DeviceTypeDetail deviceTypeDetail);
+
+ //修改设备型号
+ Result updateDeviceDetail(DeviceTypeDetail deviceTypeDetail);
+
+ /**
+ * 根据设备型号id查询结构图谱
+ * @param detailId
+ * @return
+ */
+ Result getStructureGraphById(String detailId);
+}
diff --git a/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/service/DeviceTypeGroupService.java b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/service/DeviceTypeGroupService.java
new file mode 100644
index 0000000..8096db5
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/service/DeviceTypeGroupService.java
@@ -0,0 +1,28 @@
+package com.cqu.device.service;
+
+import com.cqu.device.entity.DeviceTypeGroup;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.cqu.utils.Result;
+
+/**
+ *
+ * 设备分组 设备分组 服务类
+ *
+ *
+ * @author testjava
+ * @since 2022-04-11
+ */
+public interface DeviceTypeGroupService extends IService {
+
+ //删除设备分组(需要判断下面是否还有设备型号)
+ Result deleteDeviceGroupById(String id);
+
+ //根据设备分组id查询设备类型id,解决小BUG
+ String getTypeIdByGroupId(String groupId);
+
+ //新建设备分组
+ Result addDeviceGroup(String typeId, String typeGroupId, DeviceTypeGroup deviceTypeGroup);
+
+ //修改设备分组
+ Result updateDeviceGroup(DeviceTypeGroup deviceTypeGroup);
+}
diff --git a/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/service/DeviceTypeService.java b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/service/DeviceTypeService.java
new file mode 100644
index 0000000..c7915fe
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/service/DeviceTypeService.java
@@ -0,0 +1,28 @@
+package com.cqu.device.service;
+
+import com.cqu.device.entity.DeviceType;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.cqu.utils.Result;
+
+/**
+ *
+ * 设备类型 设备类型 服务类
+ *
+ *
+ * @author testjava
+ * @since 2022-04-11
+ */
+public interface DeviceTypeService extends IService {
+
+ //删除设备类型(需要判断设备类型下是否还有设备分组、设备型号)
+ Result deleteDeviceTypeById(String id);
+
+ //查询所有设备类型(用于设备对象管理模块)
+ Result listDeviceTypeAll();
+
+ //新建设备类型
+ Result addDeviceType(DeviceType deviceType);
+
+ //修改设备类型
+ Result updateDeviceType(DeviceType deviceType);
+}
diff --git a/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/service/PartService.java b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/service/PartService.java
new file mode 100644
index 0000000..16a991a
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/service/PartService.java
@@ -0,0 +1,46 @@
+package com.cqu.device.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.cqu.device.entity.Part;
+import com.cqu.device.entity.vo.TypeNodeVo;
+import com.cqu.utils.Result;
+
+import java.util.List;
+
+/**
+ *
+ * 部件 部件 服务类
+ *
+ *
+ * @author testjava
+ * @since 2022-04-21
+ */
+public interface PartService extends IService {
+
+ //根据设备型号id,查询子系统、部件的树形列表
+ List listPartTreeByDeviceDetailId(String id);
+
+ //根据部件id获得子系统id、设备型号id
+ Result getSubSystemIdAndDetailIdByPartId(String id);
+
+ //在设备型号结构树中新增部件(在设备型号下)
+ Result addPartByDetailId(String detailId, List partTypeIds);
+
+ //在设备型号结构树中新增部件(在设备型号下的子系统下)
+ Result addPartBySubSystemId(String detailId, String subSystemId, List partTypeIds);
+
+ //根据设备型号id查询出下面关联的部件类型(回显)
+ Result listPartTypeByDetailId(String detailId);
+
+ //根据子系统id查询出下面关联的部件类型(回显)
+ Result listPartTypeBySubSystemId(String subSystemId);
+
+ //根据设备型号id + 部件id删除部件
+ Result deleteByDetailIdAndPartId(String detailId, String partId);
+
+ //根据设备型号id + 子系统id + 部件id删除部件
+ Result deleteBySubSystemIdAndPartId(String detailId, String subSystemId, String partId);
+
+ //根据partId查询PartType用于回显
+ Result getPartTypeByPartId(String partId);
+}
diff --git a/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/service/PartTypeDetailService.java b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/service/PartTypeDetailService.java
new file mode 100644
index 0000000..ebba0c5
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/service/PartTypeDetailService.java
@@ -0,0 +1,54 @@
+package com.cqu.device.service;
+
+import com.cqu.device.entity.PartTypeDetail;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.cqu.device.entity.vo.TypeNodeVo;
+import com.cqu.utils.Result;
+
+import java.util.List;
+
+/**
+ *
+ * 部件型号 部件型号表 服务类
+ *
+ *
+ * @author testjava
+ * @since 2022-04-15
+ */
+public interface PartTypeDetailService extends IService {
+
+ //查询部件类型、部件分组、部件型号的树形列表
+ List listPartDetail();
+
+ //根据部件类型id查询所有部件型号(分页)
+ Result listPartDetailByTypeId(String typeId, Integer current, Integer size);
+
+ //根据部件分组id查询所有部件型号(分页)
+ Result listPartDetailByGroupId(String groupId, Integer current, Integer size);
+
+ //根据checkbox多选框批量删除部件型号
+ Result deleteDeviceDetailBatch(List detailList);
+
+ /**
+ * 新建部件型号(基于部件类型id)
+ * @param typeId
+ * @param partTypeDetail
+ * @return
+ */
+ Result addPartDetailByTypeId(String typeId, PartTypeDetail partTypeDetail);
+
+ /**
+ * 新建部件型号(基于部件类型id和部件分组id)
+ * @param typeId
+ * @param partTypeDetail
+ * @return
+ */
+ Result addPartDetailByTypeIdAndGroupId(String typeId, String groupId, PartTypeDetail partTypeDetail);
+
+ /**
+ * 修改部件型号
+ * @param partTypeDetail
+ * @return
+ */
+ Result updatePartDetail(PartTypeDetail partTypeDetail);
+}
diff --git a/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/service/PartTypeGroupService.java b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/service/PartTypeGroupService.java
new file mode 100644
index 0000000..68c6351
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/service/PartTypeGroupService.java
@@ -0,0 +1,38 @@
+package com.cqu.device.service;
+
+import com.cqu.device.entity.PartTypeGroup;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.cqu.utils.Result;
+
+/**
+ *
+ * 部件分组 部件分组 服务类
+ *
+ *
+ * @author testjava
+ * @since 2022-04-15
+ */
+public interface PartTypeGroupService extends IService {
+
+ //删除部件分组(需要判断下面是否还有部件型号)
+ Result deletePartGroupById(String id);
+
+ //根据部件分组id查询部件类型id,解决小BUG
+ String getTypeIdByGroupId(String groupId);
+
+ /**
+ * 新建部件分组
+ * @param typeId
+ * @param typeGroupId
+ * @param partTypeGroup
+ * @return
+ */
+ Result addPartGroupByTypeId(String typeId, String typeGroupId, PartTypeGroup partTypeGroup);
+
+ /**
+ * 修改部件分组
+ * @param partTypeGroup 部件分组实体
+ * @return
+ */
+ Result updatePartGroup(PartTypeGroup partTypeGroup);
+}
diff --git a/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/service/PartTypeService.java b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/service/PartTypeService.java
new file mode 100644
index 0000000..3a9a39c
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/service/PartTypeService.java
@@ -0,0 +1,39 @@
+package com.cqu.device.service;
+
+import com.cqu.device.entity.PartType;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.cqu.utils.Result;
+
+/**
+ *
+ * 部件类型表 部件类型表 服务类
+ *
+ *
+ * @author testjava
+ * @since 2022-04-15
+ */
+public interface PartTypeService extends IService {
+
+ //删除部件类型(需要判断部件类型下是否还有部件分组、部件型号)
+ Result deletePartTypeById(String id);
+
+ //根据部件类型id获得部件类型名称
+ String getPartTypeShowNameById(String id);
+
+ //查询所有部件类型(用于设备型号结构树中关联部件)(分页)
+ Result listAllParts(Integer current, Integer size);
+
+ /**
+ * 新建部件类型
+ * @param partType 部件类型实体
+ * @return
+ */
+ Result addPartType(PartType partType);
+
+ /**
+ * 修改部件类型
+ * @param partType 部件类型实体
+ * @return
+ */
+ Result updatePartType(PartType partType);
+}
diff --git a/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/service/SubSystemService.java b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/service/SubSystemService.java
new file mode 100644
index 0000000..f3ed712
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/service/SubSystemService.java
@@ -0,0 +1,28 @@
+package com.cqu.device.service;
+
+import com.cqu.device.entity.SubSystem;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.cqu.utils.Result;
+
+/**
+ *
+ * 子系统 子系统 服务类
+ *
+ *
+ * @author testjava
+ * @since 2022-04-21
+ */
+public interface SubSystemService extends IService {
+
+ //根据子系统id获得设备型号id
+ Result getDetailIdBySubSystemId(String id);
+
+ //删除子系统
+ Result deleteSubSystemById(String id);
+
+ //新建子系统(根据设备型号id)
+ Result addSubSystem(String detailId, SubSystem subSystem);
+
+ //修改子系统
+ Result updateSubSystem(SubSystem subSystem);
+}
diff --git a/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/service/impl/DataModelServiceImpl.java b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/service/impl/DataModelServiceImpl.java
new file mode 100644
index 0000000..df988d5
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/service/impl/DataModelServiceImpl.java
@@ -0,0 +1,121 @@
+package com.cqu.device.service.impl;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.cqu.device.entity.DataModel;
+import com.cqu.device.entity.DeviceType;
+import com.cqu.device.entity.DeviceTypeDetail;
+import com.cqu.device.entity.vo.NodeVo;
+import com.cqu.device.entity.vo.TypeNodeVo;
+import com.cqu.device.entity.vo.commonGroupVo;
+import com.cqu.device.mapper.DataModelMapper;
+import com.cqu.device.service.DataModelService;
+import com.cqu.device.service.DeviceTypeDetailService;
+import com.cqu.device.service.DeviceTypeService;
+import com.cqu.utils.Result;
+import com.google.common.collect.Lists;
+import io.lettuce.core.ScriptOutputType;
+import org.apache.poi.ss.formula.functions.T;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import springfox.documentation.spring.web.json.Json;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * @author xiaolong
+ * @Description
+ * @create 2022-04-24-15:04
+ */
+@Service
+public class DataModelServiceImpl extends ServiceImpl implements DataModelService {
+
+ @Autowired
+ private DeviceTypeService deviceTypeService;
+ @Autowired
+ private DeviceTypeDetailService deviceTypeDetailService;
+
+ // 根据设备id查询数据模型列表
+ @Override
+ public Result listDataModelById(String id, Integer current, Integer size) {
+ Page page = new Page<>(current, size);
+ QueryWrapper wrapper = new QueryWrapper<>();
+ wrapper.eq("detail_id",id);
+ wrapper.orderByAsc("gmt_create");
+ baseMapper.selectPage(page, wrapper);
+ List records = page.getRecords();
+
+ DeviceTypeDetail deviceTypeDetail = deviceTypeDetailService.getById(id);
+ DeviceType deviceType = deviceTypeService.getById(deviceTypeDetail.getTypeId());
+ for (DataModel record : records) {
+// record.setDeviceTypeName(deviceType.getName());
+// record.setDeviceTypeDetailName(deviceTypeDetail.getName());
+ record.setDeviceTypeName(deviceType.getShowName());
+ record.setDeviceTypeDetailName(deviceTypeDetail.getShowName());
+ }
+
+
+ long total = page.getTotal();
+ return Result.ok().data("dataModelList", records).data("total", total);
+ }
+
+ // 批量删除数据模型
+ @Override
+ public Result deleteDataModelBatch(List dataModelList) {
+ List ids = new ArrayList<>();
+ for (DataModel dataModel : dataModelList) {
+ ids.add(dataModel.getId());
+ }
+ int count = baseMapper.deleteBatchIds(ids);
+ return count > 0 ? Result.ok() : Result.error();
+ }
+
+ // 查询树形结构
+ @Override
+ public Result selectTreeAll() {
+ //1.查询所有的设备类型
+ List deviceTypes = deviceTypeService.list(null);
+ //2.查询所有的设备型号
+ List deviceTypeDetails = deviceTypeDetailService.list(null);
+ String jsonOutput = JSONArray.toJSONString(deviceTypeDetails);
+// System.out.println(jsonOutput);
+
+
+ // 设备类型
+ ArrayList typeNodeVos = new ArrayList();
+ HashMap typeHashMap = new HashMap();
+ for (DeviceType deviceType : deviceTypes) {
+ TypeNodeVo typeNodeVo = new TypeNodeVo();
+ BeanUtils.copyProperties(deviceType, typeNodeVo);
+ typeNodeVos.add(typeNodeVo);
+ typeHashMap.put(typeNodeVo.getId(), typeNodeVo);
+ }
+ // 设备
+ ArrayList nodeVos = new ArrayList<>();
+ for (DeviceTypeDetail deviceTypeDetail : deviceTypeDetails) {
+ NodeVo nodeVo = new NodeVo();
+ BeanUtils.copyProperties(deviceTypeDetail, nodeVo);
+ nodeVos.add(nodeVo);
+ }
+
+ // 挂载
+ // 将设备挂在类型或者组上
+ for (NodeVo nodeVo : nodeVos) {
+ if(typeHashMap.get(nodeVo.getTypeId()).getChildren() == null){
+ typeHashMap.get(nodeVo.getTypeId()).setChildren(new ArrayList<>());
+ }
+ typeHashMap.get(nodeVo.getTypeId()).getChildren().add(nodeVo);
+ }
+
+// String typeJsonOutput = JSONArray.toJSONString(typeNodeVos);
+// System.out.println(typeJsonOutput);
+ return Result.ok().data("treeData",typeNodeVos);
+ }
+}
diff --git a/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/service/impl/DeviceAreaServiceImpl.java b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/service/impl/DeviceAreaServiceImpl.java
new file mode 100644
index 0000000..6d33a9a
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/service/impl/DeviceAreaServiceImpl.java
@@ -0,0 +1,118 @@
+package com.cqu.device.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.cqu.base.exception.PhmException;
+import com.cqu.device.entity.DeviceArea;
+import com.cqu.device.entity.DeviceGroup;
+import com.cqu.device.mapper.DeviceAreaMapper;
+import com.cqu.device.mapper.DeviceGroupMapper;
+import com.cqu.device.service.DeviceAreaService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.cqu.utils.Result;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ *
+ * 设备区域 设备区域 服务实现类
+ *
+ *
+ * @author ranmaoqi
+ * @since 2022-05-18
+ */
+@Service
+public class DeviceAreaServiceImpl extends ServiceImpl implements DeviceAreaService {
+
+ @Autowired
+ private DeviceGroupMapper deviceGroupMapper;
+
+ //分页查询所有区域列表
+ @Override
+ public Result listAreaAll(Integer current, Integer size) {
+ Page page = new Page<>(current, size);
+ QueryWrapper wrapper = new QueryWrapper<>();
+ wrapper.orderByAsc("gmt_create");
+ baseMapper.selectPage(page, wrapper);
+
+ List records = page.getRecords();
+ long total = page.getTotal();
+ return Result.ok().data("records", records).data("total", total);
+ }
+
+ //根据id删除区域, 先查找该区域下还有没有设备组,如果有,则删除失败
+ @Override
+ public Result deleteAreaById(String areaId) {
+ QueryWrapper wrapper = new QueryWrapper<>();
+ wrapper.eq("area_id", areaId);
+ Integer count = deviceGroupMapper.selectCount(wrapper);
+ if (count == 0) {
+ return baseMapper.deleteById(areaId) > 0 ? Result.ok() : Result.error();
+ } else {
+ throw new PhmException(20001, "此区域下还有内容,删除失败!");
+ }
+ }
+
+ //根据多选框批量删除区域
+ @Override
+ public Result deleteAreaBatch(List areaList) {
+ //检测是否有的区域下还有设备组
+ for (DeviceArea area : areaList) {
+ QueryWrapper wrapper = new QueryWrapper<>();
+ wrapper.eq("area_id", area.getId());
+ Integer count = deviceGroupMapper.selectCount(wrapper);
+ if (count != 0) {
+ throw new PhmException(20001, "此区域下还有内容,删除失败!");
+ }
+ }
+ //删除
+ List ids = new ArrayList<>();
+ for (DeviceArea area : areaList) {
+ ids.add(area.getId());
+ }
+ int i = baseMapper.deleteBatchIds(ids);
+ return i > 0 ? Result.ok() : Result.error();
+ }
+
+ /**
+ * 新建区域
+ * @param deviceArea 区域实体
+ * @return
+ */
+ @Override
+ public Result addArea(DeviceArea deviceArea) {
+ //判断Area名称是否重复
+ QueryWrapper wrapper = new QueryWrapper<>();
+ wrapper.eq("show_name", deviceArea.getShowName());
+ Integer count = baseMapper.selectCount(wrapper);
+ if (count == 0) {
+ int insert = baseMapper.insert(deviceArea);
+ return insert == 0 ? Result.error() : Result.ok();
+ } else {
+ return Result.error().message("新建区域失败,名称重复!");
+ }
+ }
+
+ /**
+ * 修改区域
+ * @param deviceArea 区域实体
+ * @return
+ */
+ @Override
+ public Result updateArea(DeviceArea deviceArea) {
+ //判断Area名称是否重复
+ QueryWrapper wrapper = new QueryWrapper<>();
+ wrapper.ne("id", deviceArea.getId());
+ wrapper.eq("show_name", deviceArea.getShowName());
+ Integer count = baseMapper.selectCount(wrapper);
+ if (count == 0) {
+ int update = baseMapper.updateById(deviceArea);
+ return update == 0 ? Result.error() : Result.ok();
+ } else {
+ return Result.error().message("修改区域失败,名称重复!");
+ }
+ }
+}
diff --git a/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/service/impl/DeviceGroupServiceImpl.java b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/service/impl/DeviceGroupServiceImpl.java
new file mode 100644
index 0000000..79abfd8
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/service/impl/DeviceGroupServiceImpl.java
@@ -0,0 +1,224 @@
+package com.cqu.device.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.cqu.base.exception.PhmException;
+import com.cqu.device.entity.Device;
+import com.cqu.device.entity.DeviceArea;
+import com.cqu.device.entity.DeviceGroup;
+import com.cqu.device.entity.vo.AreaVo;
+import com.cqu.device.entity.vo.DeviceGroupVo;
+import com.cqu.device.entity.vo.DeviceListVo;
+import com.cqu.device.mapper.DeviceGroupMapper;
+import com.cqu.device.service.DeviceAreaService;
+import com.cqu.device.service.DeviceGroupService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.cqu.device.service.DeviceService;
+import com.cqu.utils.Result;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ *
+ * 设备组 设备组 服务实现类
+ *
+ *
+ * @author ranmaoqi
+ * @since 2022-05-18
+ */
+@Service
+public class DeviceGroupServiceImpl extends ServiceImpl implements DeviceGroupService {
+
+ @Autowired
+ private DeviceAreaService deviceAreaService;
+
+ @Autowired
+ private DeviceService deviceService;
+
+ @Autowired
+ private DeviceGroupMapper deviceGroupMapper;
+
+ //查询区域、设备组的树形结构
+ @Override
+ public List listTree() {
+ //设备列表
+ DeviceListVo deviceListVo = new DeviceListVo();
+
+ //查询出所有的区域
+ List areas = deviceAreaService.list(null);
+ //查询出所有的设备组
+ List deviceGroups = baseMapper.selectList(null);
+
+ //创建集合用于封装最后的数据
+ List list = new ArrayList<>();
+
+ //封装区域
+ List areaVoList = new ArrayList<>();
+ for (DeviceArea area : areas) {
+ AreaVo areaVo = new AreaVo();
+ areaVo.setAreaId(area.getId());
+ areaVo.setShowName(area.getShowName());
+ //封装属于区域下的设备组
+ List deviceGroupVoList = new ArrayList<>();
+ for (DeviceGroup deviceGroup : deviceGroups) {
+ //判断当前设备组的area_id是否和当前的区域的id相同
+ if (deviceGroup.getAreaId().equals(area.getId())) {
+ DeviceGroupVo deviceGroupVo = new DeviceGroupVo();
+ deviceGroupVo.setDeviceGroupId(deviceGroup.getId());
+ deviceGroupVo.setShowName(deviceGroup.getShowName());
+ deviceGroupVoList.add(deviceGroupVo);
+ }
+ }
+ areaVo.setChildren(deviceGroupVoList);
+ areaVoList.add(areaVo);
+ }
+
+ //封装不属于区域下的设备组
+ List deviceGroupVoList = new ArrayList<>();
+ for (DeviceGroup deviceGroup : deviceGroups) {
+ //判断设备组的area_id是否为0
+ if ("0".equals(deviceGroup.getAreaId())) {
+ DeviceGroupVo deviceGroupVo = new DeviceGroupVo();
+ deviceGroupVo.setDeviceGroupId(deviceGroup.getId());
+ deviceGroupVo.setShowName(deviceGroup.getShowName());
+ deviceGroupVoList.add(deviceGroupVo);
+ }
+ }
+
+ List children = new ArrayList();
+ children.addAll(areaVoList);
+ children.addAll(deviceGroupVoList);
+
+ deviceListVo.setChildren(children);
+
+ list.add(deviceListVo);
+
+ return list;
+ }
+
+ //分页查询所有设备组列表
+ @Override
+ public Result listDeviceGroupAll(Integer current, Integer size) {
+ Page page = new Page<>(current, size);
+ QueryWrapper wrapper = new QueryWrapper<>();
+ wrapper.orderByAsc("gmt_create");
+ baseMapper.selectPage(page, wrapper);
+
+ List records = page.getRecords();
+ long total = page.getTotal();
+ return Result.ok().data("records", records).data("total", total);
+ }
+
+ //根据区域id分组查询设备组列表
+ @Override
+ public Result listDeviceGroupByAreaId(String areaId, Integer current, Integer size) {
+ Page page = new Page<>(current, size);
+ QueryWrapper wrapper = new QueryWrapper<>();
+ wrapper.eq("area_id", areaId);
+ wrapper.orderByAsc("gmt_create");
+ baseMapper.selectPage(page, wrapper);
+
+ List records = page.getRecords();
+ long total = page.getTotal();
+ return Result.ok().data("records", records).data("total", total);
+ }
+
+ //根据id删除设备组
+ @Override
+ public Result deleteDeviceGroupById(String groupId) {
+ QueryWrapper wrapper = new QueryWrapper<>();
+ wrapper.eq("group_id", groupId);
+ int count = deviceService.count(wrapper);
+ if (count == 0) {
+ return baseMapper.deleteById(groupId) > 0 ? Result.ok() : Result.error();
+ } else {
+ throw new PhmException(20001, "此设备组下还有内容,删除失败!");
+ }
+ }
+
+ //批量删除设备组
+ @Override
+ public Result deleteDeviceGroupBatch(List deviceGroupList) {
+ //检测是否有的设备组下还有设备
+ for (DeviceGroup deviceGroup : deviceGroupList) {
+ QueryWrapper wrapper = new QueryWrapper<>();
+ wrapper.eq("group_id", deviceGroup.getId());
+ int count = deviceService.count(wrapper);
+ if (count != 0) {
+ throw new PhmException(20001, "设备组下还有内容,删除失败!");
+ }
+ }
+ //删除
+ List ids = new ArrayList<>();
+ for (DeviceGroup deviceGroup : deviceGroupList) {
+ ids.add(deviceGroup.getId());
+ }
+ int i = baseMapper.deleteBatchIds(ids);
+ return i > 0 ? Result.ok() : Result.error();
+ }
+
+ /**
+ * 新建设备组(直接新建)
+ * @param deviceGroup 设备组实体
+ * @return
+ */
+ @Override
+ public Result addDeviceGroup(DeviceGroup deviceGroup) {
+ //检查设备组标识或名称是否重复
+ QueryWrapper wrapper = new QueryWrapper<>();
+ wrapper.eq("name", deviceGroup.getName())
+ .or()
+ .eq("show_name", deviceGroup.getShowName());
+ Integer count = baseMapper.selectCount(wrapper);
+ if (count == 0) {
+ int insert = baseMapper.insert(deviceGroup);
+ return insert == 0 ? Result.error() : Result.ok();
+ } else {
+ return Result.error().message("新建设备组失败,标识或名称重复!");
+ }
+ }
+
+ /**
+ * 新建设备组(在区域下)
+ * @param areaId 区域ID
+ * @param deviceGroup 设备组实体
+ * @return
+ */
+ @Override
+ public Result addDeviceGroupByAreaId(String areaId, DeviceGroup deviceGroup) {
+ //检查设备组标识或名称在当前区域是否重复
+ String name = deviceGroup.getName();
+ String showName = deviceGroup.getShowName();
+ Integer count = deviceGroupMapper.getCountByAreaId(areaId, name, showName);
+ if (count == 0) {
+ int insert = baseMapper.insert(deviceGroup);
+ return insert == 0 ? Result.error() : Result.ok();
+ } else {
+ return Result.error().message("新建设备组失败,标识或名称重复!");
+ }
+ }
+
+ /**
+ * 编辑设备组
+ * @param deviceGroup 设备组实体
+ * @return
+ */
+ @Override
+ public Result updateDeviceGroup(DeviceGroup deviceGroup) {
+ //检查设备组标识或名称在当前区域是否重复
+ String areaId = deviceGroup.getAreaId();
+ String id = deviceGroup.getId();
+ String name = deviceGroup.getName();
+ String showName = deviceGroup.getShowName();
+ Integer count = deviceGroupMapper.getCountByAreaIdAndId(areaId, id, name, showName);
+ if (count == 0) {
+ int update = baseMapper.updateById(deviceGroup);
+ return update == 0 ? Result.error() : Result.ok();
+ } else {
+ return Result.error().message("修改设备组失败,标识或名称重复!");
+ }
+ }
+}
diff --git a/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/service/impl/DeviceServiceImpl.java b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/service/impl/DeviceServiceImpl.java
new file mode 100644
index 0000000..14e37aa
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/service/impl/DeviceServiceImpl.java
@@ -0,0 +1,292 @@
+package com.cqu.device.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.cqu.device.entity.Device;
+import com.cqu.device.entity.Part;
+import com.cqu.device.entity.PartType;
+import com.cqu.device.entity.SubSystem;
+import com.cqu.device.entity.vo.*;
+import com.cqu.device.mapper.DeviceMapper;
+import com.cqu.device.mapper.PartMapper;
+import com.cqu.device.mapper.PartTypeMapper;
+import com.cqu.device.mapper.SubSystemMapper;
+import com.cqu.device.service.*;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.cqu.utils.Result;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.*;
+
+/**
+ *
+ * 设备 设备 服务实现类
+ *
+ *
+ * @author ranmaoqi
+ * @since 2022-05-18
+ */
+@Service
+public class DeviceServiceImpl extends ServiceImpl implements DeviceService {
+
+ @Autowired
+ private DeviceTypeService deviceTypeService;
+
+ @Autowired
+ private DeviceTypeDetailService deviceTypeDetailService;
+
+ @Autowired
+ private SubSystemService subSystemService;
+
+ @Autowired
+ private PartTypeService partTypeService;
+
+ @Autowired
+ private PartMapper partMapper;
+
+ @Autowired
+ private SubSystemMapper subSystemMapper;
+
+ @Autowired
+ private PartTypeMapper partTypeMapper;
+
+ //根据设备组id查询设备
+ @Override
+ public Result listDeviceByGroupId(String groupId, Integer current, Integer size) {
+ Page page = new Page<>(current, size);
+ QueryWrapper wrapper = new QueryWrapper<>();
+ wrapper.eq("group_id", groupId);
+ baseMapper.selectPage(page, wrapper);
+ List records = page.getRecords();
+ long total = page.getTotal();
+
+ for (Device device : records) {
+ String typeId = device.getTypeId(); //设备类型id
+ String detailId = device.getDetailId(); //设备型号id
+ String typeName = deviceTypeService.getById(typeId).getShowName(); //根据设备类型id查出设备类型名称
+ String detailName = deviceTypeDetailService.getById(detailId).getShowName(); //根据设备型号id查出设备型号名称
+ device.setTypeName(typeName);
+ device.setDetailName(detailName);
+ }
+
+ return Result.ok().data("records", records).data("total", total);
+ }
+
+ //多选删除设备
+ @Override
+ public Result deleteDeviceBatch(List deviceList) {
+ List ids = new ArrayList<>();
+ for (Device device : deviceList) {
+ ids.add(device.getId());
+ }
+ int count = baseMapper.deleteBatchIds(ids);
+ return count > 0 ? Result.ok() : Result.error();
+ }
+
+ //查询设备对象结构树,根据设备对象id
+ @Override
+ public List getDeviceObjTreeById(String deviceId) {
+ //先根据deviceId查出detailId
+ Device device = baseMapper.selectById(deviceId);
+ String detailId = device.getDetailId();
+
+ //封装树形结构的第一级(device)
+ TypeNodeVo deviceVo = new TypeNodeVo();
+ deviceVo.setId(deviceId);
+ deviceVo.setShowName(device.getName());
+
+ //查询出所有的子系统(根据设备型号id)
+ List subSystems = subSystemService.list(new QueryWrapper().eq("device_detail_id", detailId));
+ //查询出所有的部件(根据设备型号id)
+ List parts = partMapper.selectList(new QueryWrapper().eq("device_detail_id", detailId));
+
+ //创建集合用于封装最后的数据
+ List list = new ArrayList<>();
+
+ //封装子系统
+ List subSystemVoList = new ArrayList<>();
+ for (SubSystem subSystem : subSystems) {
+
+ SubSystemVo subSystemVo = new SubSystemVo();
+
+ subSystemVo.setSubSystemId(subSystem.getId());
+ subSystemVo.setShowName(subSystem.getShowName());
+// list.add(subSystemVo);
+
+ //封装属于子系统下的部件
+ List partVoList = new ArrayList<>();
+
+ for (Part part : parts) {
+ //判断部件的subSystemId是否和当前subSystem的id相同
+ if (part.getSubSystemId().equals(subSystem.getId())) {
+ PartVo partVo = new PartVo();
+ partVo.setPartId(part.getId());
+ String partTypeShowName = partTypeService.getPartTypeShowNameById(part.getPartTypeId());
+ partVo.setShowName(partTypeShowName);
+
+ partVoList.add(partVo);
+ }
+ }
+ subSystemVo.setChildren(partVoList);
+ subSystemVoList.add(subSystemVo);
+ }
+
+ //封装不属于子系统下的部件
+ List partVoList = new ArrayList<>();
+ for (Part part : parts) {
+ //判断部件的subSystemId是否为0
+ if ("0".equals(part.getSubSystemId())) {
+ PartVo partVo = new PartVo();
+ partVo.setPartId(part.getId());
+ String partTypeShowName = partTypeService.getPartTypeShowNameById(part.getPartTypeId());
+ partVo.setShowName(partTypeShowName);
+
+ partVoList.add(partVo);
+ }
+ }
+
+ List children = new ArrayList();
+ children.addAll(subSystemVoList);
+ children.addAll(partVoList);
+
+ deviceVo.setChildren(children);
+
+ list.add(deviceVo);
+
+ return list;
+ }
+
+ /**
+ * 新建设备
+ * @param groupId 设备组id
+ * @param device 设备实体
+ * @return
+ */
+ @Override
+ public Result addDeviceByGroupId(String groupId, Device device) {
+ //判断当前组是否有重复的设备标识
+ QueryWrapper wrapper = new QueryWrapper<>();
+ wrapper.eq("group_id", groupId);
+ wrapper.eq("name", device.getName());
+ Integer count = baseMapper.selectCount(wrapper);
+ if (count == 0) {
+ int insert = baseMapper.insert(device);
+ return insert == 0 ? Result.error() : Result.ok();
+ } else {
+ return Result.error().message("新建设备失败,标识重复!");
+ }
+ }
+
+ /**
+ * 修改设备
+ * @param device 设备实体
+ * @return
+ */
+ @Override
+ public Result updateDevice(Device device) {
+ //判断当前组是否有重复的设备标识(除当前设备外)
+ QueryWrapper wrapper = new QueryWrapper<>();
+ wrapper.eq("group_id", device.getGroupId());
+ wrapper.ne("id", device.getId());
+ wrapper.eq("name", device.getName());
+ Integer count = baseMapper.selectCount(wrapper);
+ if (count == 0) {
+ int update = baseMapper.updateById(device);
+ return update == 0 ? Result.error() : Result.ok();
+ } else {
+ return Result.error().message("新建设备失败,标识重复!");
+ }
+ }
+
+ @Override
+ public String getDeviceDetailIdByDeviceId(String deviceId) {
+ QueryWrapper wrapper = new QueryWrapper<>();
+ wrapper.eq("id", deviceId);
+ Device device = baseMapper.selectById(deviceId);
+ return device.getDetailId();
+ }
+
+ /**
+ * 根据设备Id查询结构图谱
+ * @param deviceId
+ * @return
+ */
+ @Override
+ public Result getStructureGraphById(String deviceId) {
+ Device device = baseMapper.selectById(deviceId);
+
+ GraphVo graph = new GraphVo(); //图谱
+ List nodes = new LinkedList<>(); //图谱的节点
+ List links = new LinkedList<>(); //图谱的连线关系
+
+ //根节点就是当前device
+ int i = 0;
+ String index = String.valueOf(i);
+ NodesVo root = new NodesVo();
+ root.setId(index);
+ root.setCategory(0);
+ root.setName(device.getName());
+
+ nodes.add(root);
+
+ graph.setNodes(nodes);
+ graph.setLinks(links);
+
+ String detailId = device.getDetailId();
+ //根据detailId查到subsystemIds,使用set去重
+ Set subsystemIds = new HashSet<>(partMapper.getSubSystemIdsByDetailId(detailId));
+ for (String subsystemId : subsystemIds) {
+ if (!"0".equals(subsystemId)) {
+ //子系统节点
+ SubSystem subSystem = subSystemMapper.selectById(subsystemId);
+ NodesVo subSystemNode = new NodesVo();
+ subSystemNode.setId(String.valueOf(++i));
+ subSystemNode.setCategory(1);
+ subSystemNode.setName(subSystem.getShowName());
+ nodes.add(subSystemNode);
+ //子系统节点与设备型号连接
+ LinksVo link = new LinksVo();
+ link.setSource(root.getId());
+ link.setTarget(subSystemNode.getId());
+ links.add(link);
+
+ List partTypeIds = partMapper.listPartTypeBySubSystemId(subsystemId);
+ for (String partTypeId : partTypeIds) {
+ //子系统下的部件节点
+ PartType partType = partTypeMapper.selectById(partTypeId);
+ NodesVo partTypeNode = new NodesVo();
+ partTypeNode.setId(String.valueOf(++i));
+ partTypeNode.setCategory(2);
+ partTypeNode.setName(partType.getShowName());
+ nodes.add(partTypeNode);
+ //子系统与部件节点相连
+ link = new LinksVo();
+ link.setSource(subSystemNode.getId());
+ link.setTarget(partTypeNode.getId());
+ links.add(link);
+ }
+ } else {
+ //subsystemId == 0, 说明部件直接与设备型号相连
+ List partTypeIds = partMapper.listPartTypeIdByDetailId(detailId);
+ for (String partTypeId : partTypeIds) {
+ //型号下的部件节点
+ PartType partType = partTypeMapper.selectById(partTypeId);
+ NodesVo partTypeNode = new NodesVo();
+ partTypeNode.setId(String.valueOf(++i));
+ partTypeNode.setCategory(2);
+ partTypeNode.setName(partType.getShowName());
+ nodes.add(partTypeNode);
+ //设备型号与部件节点相连
+ LinksVo link = new LinksVo();
+ link.setSource(root.getId());
+ link.setTarget(partTypeNode.getId());
+ links.add(link);
+ }
+ }
+ }
+
+ return Result.ok().data("graph", graph);
+ }
+}
diff --git a/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/service/impl/DeviceTypeDetailServiceImpl.java b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/service/impl/DeviceTypeDetailServiceImpl.java
new file mode 100644
index 0000000..51c1edc
--- /dev/null
+++ b/phm_rotate/backend/phm_backend/service/service_device/src/main/java/com/cqu/device/service/impl/DeviceTypeDetailServiceImpl.java
@@ -0,0 +1,395 @@
+package com.cqu.device.service.impl;
+
+import com.alibaba.fastjson.JSONArray;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.cqu.device.entity.*;
+import com.cqu.device.entity.vo.*;
+import com.cqu.device.mapper.DeviceTypeDetailMapper;
+import com.cqu.device.mapper.PartMapper;
+import com.cqu.device.mapper.PartTypeMapper;
+import com.cqu.device.mapper.SubSystemMapper;
+import com.cqu.device.service.*;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.cqu.utils.Result;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+
+import java.util.*;
+
+/**
+ *
+ * 设备型号 设备型号表 服务实现类
+ *
+ *
+ * @author testjava
+ * @since 2022-04-11
+ */
+@Service
+public class DeviceTypeDetailServiceImpl extends ServiceImpl implements DeviceTypeDetailService {
+
+ @Autowired
+ private DeviceTypeService deviceTypeService;
+
+ @Autowired
+ private DeviceTypeGroupService deviceTypeGroupService;
+
+ @Autowired
+ private DeviceTypeDetailMapper deviceTypeDetailMapper;
+
+ @Autowired
+ private PartMapper partMapper;
+
+ @Autowired
+ private SubSystemMapper subSystemMapper;
+
+ @Autowired
+ private PartTypeMapper partTypeMapper;
+
+ //查询设备类型列表、设备类型分组、设备型号列表的树形列表
+// @Override
+// public List listDeviceDetail() {
+//
+// //1.查询所有的设备类型
+// List deviceTypes = deviceTypeService.list(null);
+// //2.查询所有的设备类型分组
+// List deviceTypeGroups = deviceTypeGroupService.list(null);
+// //3.查询所有的设备型号
+// List deviceTypeDetails = baseMapper.selectList(null);
+//
+// //创建集合用于封装最终的数据
+// List deviceTypeVoList = new ArrayList<>();
+//
+// for (DeviceType deviceType : deviceTypes) {
+// //用于封装属于类型而不属于分组的型号
+// List detailVoListNot4Group = new ArrayList<>();
+//
+// DeviceTypeVo deviceTypeVo = new DeviceTypeVo();
+// deviceTypeVo.setTypeId(deviceType.getId());
+// deviceTypeVo.setShowName(deviceType.getShowName());
+//// BeanUtils.copyProperties(deviceType, deviceTypeVo);
+// deviceTypeVoList.add(deviceTypeVo);
+//
+// //封装类型分组
+// List