TRX 1 gadu atpakaļ
vecāks
revīzija
76be787bef
27 mainītis faili ar 888 papildinājumiem un 0 dzēšanām
  1. 71 0
      src/main/java/com/zswl/dataservice/controller/iot/IotController.java
  2. 17 0
      src/main/java/com/zswl/dataservice/dao/iot/IotMainDao.java
  3. 18 0
      src/main/java/com/zswl/dataservice/dao/iot/IotTemplateDao.java
  4. 17 0
      src/main/java/com/zswl/dataservice/dao/iot/IotTopicDao.java
  5. 17 0
      src/main/java/com/zswl/dataservice/dao/iot/extend/IotMainDaoExtend.java
  6. 17 0
      src/main/java/com/zswl/dataservice/dao/iot/extend/IotTemplateDaoExtend.java
  7. 17 0
      src/main/java/com/zswl/dataservice/dao/iot/extend/IotTopicDaoExtend.java
  8. 68 0
      src/main/java/com/zswl/dataservice/dao/iot/impl/IotMainDaoImpl.java
  9. 63 0
      src/main/java/com/zswl/dataservice/dao/iot/impl/IotTemplateDaoImpl.java
  10. 68 0
      src/main/java/com/zswl/dataservice/dao/iot/impl/IotTopicDaoImpl.java
  11. 49 0
      src/main/java/com/zswl/dataservice/domain/iot/IotMain.java
  12. 34 0
      src/main/java/com/zswl/dataservice/domain/iot/IotTemplate.java
  13. 39 0
      src/main/java/com/zswl/dataservice/domain/iot/IotTopic.java
  14. 44 0
      src/main/java/com/zswl/dataservice/model/iot/IotMainModel.java
  15. 41 0
      src/main/java/com/zswl/dataservice/model/iot/IotMainParam.java
  16. 41 0
      src/main/java/com/zswl/dataservice/model/iot/IotMainSearch.java
  17. 23 0
      src/main/java/com/zswl/dataservice/model/iot/IotTemplateModel.java
  18. 23 0
      src/main/java/com/zswl/dataservice/model/iot/IotTemplateParam.java
  19. 23 0
      src/main/java/com/zswl/dataservice/model/iot/IotTemplateSearch.java
  20. 28 0
      src/main/java/com/zswl/dataservice/model/iot/IotTopicModel.java
  21. 28 0
      src/main/java/com/zswl/dataservice/model/iot/IotTopicParam.java
  22. 26 0
      src/main/java/com/zswl/dataservice/model/iot/IotTopicSearch.java
  23. 40 0
      src/main/java/com/zswl/dataservice/service/iot/IotServiceImpl.java
  24. 19 0
      src/main/java/com/zswl/dataservice/type/DataState.java
  25. 19 0
      src/main/java/com/zswl/dataservice/type/DataType.java
  26. 19 0
      src/main/java/com/zswl/dataservice/type/FunctionType.java
  27. 19 0
      src/main/java/com/zswl/dataservice/type/OperationType.java

+ 71 - 0
src/main/java/com/zswl/dataservice/controller/iot/IotController.java

@@ -0,0 +1,71 @@
+package com.zswl.dataservice.controller.iot;
+
+import com.zswl.dataservice.model.mqtt.DeviceInfoAddParam;
+import com.zswl.dataservice.model.mqtt.DeviceInfoModel;
+import com.zswl.dataservice.model.mqtt.DeviceInfoSearchParam;
+import com.zswl.dataservice.service.iot.IotServiceImpl;
+import com.zswl.dataservice.service.mqtt.DeviceInfoService;
+import com.zswl.dataservice.utils.result.ResultContent;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.enums.ParameterIn;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.web.PageableDefault;
+import org.springframework.util.Assert;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * 设备管理 服务
+ *
+ * @author TRX
+ * @date 2024/3/21
+ */
+@RequestMapping("/iot")
+@RestController
+@Validated
+@Tag(name = "模版-物模型管理")
+public class IotController {
+
+    @Autowired
+    DeviceInfoService deviceInfoService;
+
+    @Autowired
+    IotServiceImpl iotService;
+
+    @Parameter(in = ParameterIn.HEADER, name = "accessToken", required = false, description = "accessToken")
+    @Operation(summary = "添加设备")
+    @RequestMapping(value = "addDeviceInfo", method = {RequestMethod.POST})
+    public ResultContent addDeviceInfo(@RequestBody DeviceInfoAddParam param) {
+        Assert.hasText(param.getDeviceId(), "设备ID不能为空");
+        Assert.hasText(param.getDeviceName(), "设备名称不能为空");
+        return deviceInfoService.addDeviceInfo(param);
+    }
+
+    @Parameter(in = ParameterIn.HEADER, name = "accessToken", required = false, description = "accessToken")
+    @Operation(summary = "设备列表-分页查询")
+    @RequestMapping(value = {"pageActivity"}, method = {RequestMethod.POST})
+    public ResultContent<Page<DeviceInfoModel>> pageActivity(@Parameter(hidden = true) @PageableDefault(page = 0, size = 10) Pageable pageable, @Parameter(required = false) DeviceInfoSearchParam param) {
+        return deviceInfoService.pageDevice(pageable, param);
+    }
+
+    @Parameter(in = ParameterIn.HEADER, name = "accessToken", required = false, description = "accessToken")
+    @Operation(summary = "删除设备")
+    @RequestMapping(value = "deleteDeviceInfo", method = {RequestMethod.GET})
+    public ResultContent deleteDeviceInfo(String deviceId) {
+        return deviceInfoService.deleteDeviceInfo(deviceId);
+    }
+
+    @Parameter(in = ParameterIn.HEADER, name = "accessToken", required = false, description = "accessToken")
+    @Operation(summary = "查询设备")
+    @RequestMapping(value = "getDeviceById", method = {RequestMethod.GET})
+    public ResultContent<DeviceInfoModel> getDeviceById(String deviceId) {
+        return deviceInfoService.getDeviceById(deviceId);
+    }
+}

+ 17 - 0
src/main/java/com/zswl/dataservice/dao/iot/IotMainDao.java

@@ -0,0 +1,17 @@
+package com.zswl.dataservice.dao.iot;
+
+import com.zswl.dataservice.dao.MongoDao;
+import com.zswl.dataservice.dao.iot.extend.IotMainDaoExtend;
+import com.zswl.dataservice.dao.mqtt.extend.DeviceInfoDaoExtend;
+import com.zswl.dataservice.domain.iot.IotMain;
+import com.zswl.dataservice.domain.iot.IotTemplate;
+
+/**
+ * @author TRX
+ * @date 2024/3/21
+ */
+public interface IotMainDao extends MongoDao<IotMain>, IotMainDaoExtend {
+
+    IotMain findTopById(String id);
+
+}

+ 18 - 0
src/main/java/com/zswl/dataservice/dao/iot/IotTemplateDao.java

@@ -0,0 +1,18 @@
+package com.zswl.dataservice.dao.iot;
+
+import com.zswl.dataservice.dao.MongoDao;
+import com.zswl.dataservice.dao.iot.extend.IotTemplateDaoExtend;
+import com.zswl.dataservice.dao.mqtt.extend.DeviceInfoDaoExtend;
+import com.zswl.dataservice.domain.iot.IotTemplate;
+import com.zswl.dataservice.domain.mqtt.DeviceInfo;
+
+/**
+ * @author TRX
+ * @date 2024/3/21
+ */
+public interface IotTemplateDao extends MongoDao<IotTemplate>, IotTemplateDaoExtend {
+
+    IotTemplate findTopById(String id);
+
+    IotTemplate findTopByName(String name);
+}

+ 17 - 0
src/main/java/com/zswl/dataservice/dao/iot/IotTopicDao.java

@@ -0,0 +1,17 @@
+package com.zswl.dataservice.dao.iot;
+
+import com.zswl.dataservice.dao.MongoDao;
+import com.zswl.dataservice.dao.iot.extend.IotTopicDaoExtend;
+import com.zswl.dataservice.dao.mqtt.extend.DeviceInfoDaoExtend;
+import com.zswl.dataservice.domain.iot.IotMain;
+import com.zswl.dataservice.domain.iot.IotTopic;
+
+/**
+ * @author TRX
+ * @date 2024/3/21
+ */
+public interface IotTopicDao extends MongoDao<IotTopic>, IotTopicDaoExtend {
+
+    IotTopic findTopById(String id);
+
+}

+ 17 - 0
src/main/java/com/zswl/dataservice/dao/iot/extend/IotMainDaoExtend.java

@@ -0,0 +1,17 @@
+package com.zswl.dataservice.dao.iot.extend;
+
+import com.zswl.dataservice.domain.iot.IotMain;
+import com.zswl.dataservice.domain.mqtt.DeviceInfo;
+import com.zswl.dataservice.model.iot.IotMainSearch;
+import com.zswl.dataservice.model.mqtt.DeviceInfoSearchParam;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+
+/**
+ * @Author TRX
+ * @CreateDate: 2023/7/7
+ * @Version: 1.0
+ */
+public interface IotMainDaoExtend {
+    Page<IotMain> page(Pageable pageable, IotMainSearch param);
+}

+ 17 - 0
src/main/java/com/zswl/dataservice/dao/iot/extend/IotTemplateDaoExtend.java

@@ -0,0 +1,17 @@
+package com.zswl.dataservice.dao.iot.extend;
+
+import com.zswl.dataservice.domain.iot.IotMain;
+import com.zswl.dataservice.domain.iot.IotTemplate;
+import com.zswl.dataservice.model.iot.IotMainSearch;
+import com.zswl.dataservice.model.iot.IotTemplateSearch;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+
+/**
+ * @Author TRX
+ * @CreateDate: 2023/7/7
+ * @Version: 1.0
+ */
+public interface IotTemplateDaoExtend {
+    Page<IotTemplate> page(Pageable pageable, IotTemplateSearch param);
+}

+ 17 - 0
src/main/java/com/zswl/dataservice/dao/iot/extend/IotTopicDaoExtend.java

@@ -0,0 +1,17 @@
+package com.zswl.dataservice.dao.iot.extend;
+
+import com.zswl.dataservice.domain.iot.IotTemplate;
+import com.zswl.dataservice.domain.iot.IotTopic;
+import com.zswl.dataservice.model.iot.IotTemplateSearch;
+import com.zswl.dataservice.model.iot.IotTopicSearch;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+
+/**
+ * @Author TRX
+ * @CreateDate: 2023/7/7
+ * @Version: 1.0
+ */
+public interface IotTopicDaoExtend {
+    Page<IotTopic> page(Pageable pageable, IotTopicSearch param);
+}

+ 68 - 0
src/main/java/com/zswl/dataservice/dao/iot/impl/IotMainDaoImpl.java

@@ -0,0 +1,68 @@
+package com.zswl.dataservice.dao.iot.impl;
+
+import com.zswl.dataservice.dao.base.BaseImpl;
+import com.zswl.dataservice.dao.iot.extend.IotMainDaoExtend;
+import com.zswl.dataservice.dao.iot.extend.IotTopicDaoExtend;
+import com.zswl.dataservice.domain.iot.IotMain;
+import com.zswl.dataservice.domain.iot.IotTemplate;
+import com.zswl.dataservice.domain.iot.IotTopic;
+import com.zswl.dataservice.helper.DBHelper;
+import com.zswl.dataservice.model.iot.IotMainSearch;
+import com.zswl.dataservice.model.iot.IotTopicSearch;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.domain.Sort;
+import org.springframework.data.mongodb.core.MongoTemplate;
+import org.springframework.data.mongodb.core.query.Criteria;
+import org.springframework.data.mongodb.core.query.Query;
+import org.springframework.util.CollectionUtils;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.regex.Pattern;
+
+/**
+ * @Author TRX
+ * @CreateDate: 2023/4/12
+ * @Version: 1.0
+ */
+public class IotMainDaoImpl extends BaseImpl implements IotMainDaoExtend {
+
+    @Autowired
+    private MongoTemplate mongoTemplate;
+
+    @Autowired
+    private DBHelper dbHelper;
+
+    @Override
+    public Page<IotMain> page(Pageable pageable, IotMainSearch param) {
+        Criteria criteria = new Criteria();
+
+        if (StringUtils.isNotEmpty(param.getEpId())) {
+            criteria.and("epId").is(param.getEpId());
+        }
+
+        if (StringUtils.isNotEmpty(param.getIotTemplateId())) {
+            criteria.and("iotTemplate").is(IotTemplate.build(param.getIotTemplateId()));
+        }
+
+        // 模糊搜索
+        List<Criteria> criterias = new ArrayList<>();
+        if (StringUtils.isNotEmpty(param.getName())) {
+            Pattern pattern = Pattern.compile("^.*" + param.getName() + ".*$");
+            criterias.add(Criteria.where("name").is(pattern));
+        }
+        if (!CollectionUtils.isEmpty(criterias)) {
+            criteria.andOperator(criterias.toArray(new Criteria[]{}));
+        }
+
+        criteria.and("isDelete").is(Boolean.FALSE);
+        Sort sort = buildSort(param);
+        Query query = Query.query(criteria);
+        query.with(sort);
+        return dbHelper.pages(query, pageable, IotMain.class);
+    }
+
+}

+ 63 - 0
src/main/java/com/zswl/dataservice/dao/iot/impl/IotTemplateDaoImpl.java

@@ -0,0 +1,63 @@
+package com.zswl.dataservice.dao.iot.impl;
+
+import com.zswl.dataservice.dao.base.BaseImpl;
+import com.zswl.dataservice.dao.iot.extend.IotMainDaoExtend;
+import com.zswl.dataservice.dao.iot.extend.IotTemplateDaoExtend;
+import com.zswl.dataservice.domain.iot.IotMain;
+import com.zswl.dataservice.domain.iot.IotTemplate;
+import com.zswl.dataservice.helper.DBHelper;
+import com.zswl.dataservice.model.iot.IotMainSearch;
+import com.zswl.dataservice.model.iot.IotTemplateSearch;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.domain.Sort;
+import org.springframework.data.mongodb.core.MongoTemplate;
+import org.springframework.data.mongodb.core.query.Criteria;
+import org.springframework.data.mongodb.core.query.Query;
+import org.springframework.util.CollectionUtils;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.regex.Pattern;
+
+/**
+ * @Author TRX
+ * @CreateDate: 2023/4/12
+ * @Version: 1.0
+ */
+public class IotTemplateDaoImpl extends BaseImpl implements IotTemplateDaoExtend {
+
+    @Autowired
+    private MongoTemplate mongoTemplate;
+
+    @Autowired
+    private DBHelper dbHelper;
+
+    @Override
+    public Page<IotTemplate> page(Pageable pageable, IotTemplateSearch param) {
+        Criteria criteria = new Criteria();
+
+        if (StringUtils.isNotEmpty(param.getEpId())) {
+            criteria.and("epId").is(param.getEpId());
+        }
+
+        // 模糊搜索
+        List<Criteria> criterias = new ArrayList<>();
+        if (StringUtils.isNotEmpty(param.getName())) {
+            Pattern pattern = Pattern.compile("^.*" + param.getName() + ".*$");
+            criterias.add(Criteria.where("name").is(pattern));
+        }
+        if (!CollectionUtils.isEmpty(criterias)) {
+            criteria.andOperator(criterias.toArray(new Criteria[]{}));
+        }
+
+        criteria.and("isDelete").is(Boolean.FALSE);
+        Sort sort = buildSort(param);
+        Query query = Query.query(criteria);
+        query.with(sort);
+        return dbHelper.pages(query, pageable, IotTemplate.class);
+    }
+
+}

+ 68 - 0
src/main/java/com/zswl/dataservice/dao/iot/impl/IotTopicDaoImpl.java

@@ -0,0 +1,68 @@
+package com.zswl.dataservice.dao.iot.impl;
+
+import com.zswl.dataservice.dao.base.BaseImpl;
+import com.zswl.dataservice.dao.iot.extend.IotTopicDaoExtend;
+import com.zswl.dataservice.dao.mqtt.extend.DeviceInfoDaoExtend;
+import com.zswl.dataservice.domain.iot.IotTemplate;
+import com.zswl.dataservice.domain.iot.IotTopic;
+import com.zswl.dataservice.domain.mqtt.DeviceInfo;
+import com.zswl.dataservice.helper.DBHelper;
+import com.zswl.dataservice.model.iot.IotTopicSearch;
+import com.zswl.dataservice.model.mqtt.DeviceInfoSearchParam;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.data.domain.Pageable;
+import org.springframework.data.domain.Sort;
+import org.springframework.data.mongodb.core.MongoTemplate;
+import org.springframework.data.mongodb.core.query.Criteria;
+import org.springframework.data.mongodb.core.query.Query;
+import org.springframework.util.CollectionUtils;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.regex.Pattern;
+
+/**
+ * @Author TRX
+ * @CreateDate: 2023/4/12
+ * @Version: 1.0
+ */
+public class IotTopicDaoImpl extends BaseImpl implements IotTopicDaoExtend {
+
+    @Autowired
+    private MongoTemplate mongoTemplate;
+
+    @Autowired
+    private DBHelper dbHelper;
+
+    @Override
+    public Page<IotTopic> page(Pageable pageable, IotTopicSearch param) {
+        Criteria criteria = new Criteria();
+
+        if (StringUtils.isNotEmpty(param.getEpId())) {
+            criteria.and("epId").is(param.getEpId());
+        }
+
+        if (StringUtils.isNotEmpty(param.getIotTemplateId())) {
+            criteria.and("iotTemplate").is(IotTemplate.build(param.getIotTemplateId()));
+        }
+
+        // 模糊搜索
+        List<Criteria> criterias = new ArrayList<>();
+        if (StringUtils.isNotEmpty(param.getTopic())) {
+            Pattern pattern = Pattern.compile("^.*" + param.getTopic() + ".*$");
+            criterias.add(Criteria.where("topic").is(pattern));
+        }
+        if (!CollectionUtils.isEmpty(criterias)) {
+            criteria.andOperator(criterias.toArray(new Criteria[]{}));
+        }
+
+        criteria.and("isDelete").is(Boolean.FALSE);
+        Sort sort = buildSort(param);
+        Query query = Query.query(criteria);
+        query.with(sort);
+        return dbHelper.pages(query, pageable, IotTopic.class);
+    }
+
+}

+ 49 - 0
src/main/java/com/zswl/dataservice/domain/iot/IotMain.java

@@ -0,0 +1,49 @@
+package com.zswl.dataservice.domain.iot;
+
+import com.zswl.dataservice.domain.base.SuperEntity;
+import com.zswl.dataservice.type.DataType;
+import com.zswl.dataservice.type.FunctionType;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.springframework.data.mongodb.core.mapping.DBRef;
+import org.springframework.data.mongodb.core.mapping.Document;
+
+import java.util.LinkedHashMap;
+import java.util.Map;
+
+/**
+ * 物模型
+ *
+ * @author TRX
+ * @date 2024/6/20
+ */
+@Data
+@Document
+@NoArgsConstructor
+@AllArgsConstructor
+public class IotMain extends SuperEntity {
+
+    @Schema(description = "功能名称")
+    private String name;
+
+    @Schema(description = "功能类型")
+    FunctionType functionType;
+
+    @Schema(description = "标识符")
+    private String identifier;
+
+    @Schema(description = "数据类型")
+    private DataType dataType;
+
+    @Schema(description = "数据定义")
+    private LinkedHashMap<String, Object> data;
+
+    @Schema(description = "物模型Topic")
+    private String iotTopic;
+
+    @Schema(description = "所属模版")
+    @DBRef(lazy = true)
+    IotTemplate iotTemplate;
+}

+ 34 - 0
src/main/java/com/zswl/dataservice/domain/iot/IotTemplate.java

@@ -0,0 +1,34 @@
+package com.zswl.dataservice.domain.iot;
+
+import com.zswl.dataservice.domain.base.SuperEntity;
+import com.zswl.dataservice.type.DataState;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.springframework.data.mongodb.core.mapping.Document;
+
+/**
+ * 物模型 模版
+ *
+ * @author TRX
+ * @date 2024/6/20
+ */
+@Data
+@Document
+@NoArgsConstructor
+@AllArgsConstructor
+public class IotTemplate extends SuperEntity {
+
+    @Schema(description = "模版名称")
+    private String name;
+
+    @Schema(description = "数据状态")
+    private DataState state = DataState.Enable;
+
+    public static IotTemplate build(String id) {
+        IotTemplate entity = new IotTemplate();
+        entity.setId(id);
+        return entity;
+    }
+}

+ 39 - 0
src/main/java/com/zswl/dataservice/domain/iot/IotTopic.java

@@ -0,0 +1,39 @@
+package com.zswl.dataservice.domain.iot;
+
+import com.zswl.dataservice.domain.base.SuperEntity;
+import com.zswl.dataservice.type.OperationType;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.springframework.data.mongodb.core.mapping.DBRef;
+import org.springframework.data.mongodb.core.mapping.Document;
+
+/**
+ * 物模型 Topic管理
+ *
+ * @author TRX
+ * @date 2024/6/20
+ */
+@Data
+@Document
+@NoArgsConstructor
+@AllArgsConstructor
+public class IotTopic extends SuperEntity {
+
+    @Schema(description = "Topic名称")
+    private String topic;
+
+    @Schema(description = "操作权限")
+    private OperationType operationType;
+
+    @Schema(description = "所属模版")
+    @DBRef(lazy = true)
+    IotTemplate iotTemplate;
+
+    public static IotTopic build(String id) {
+        IotTopic entity = new IotTopic();
+        entity.setId(id);
+        return entity;
+    }
+}

+ 44 - 0
src/main/java/com/zswl/dataservice/model/iot/IotMainModel.java

@@ -0,0 +1,44 @@
+package com.zswl.dataservice.model.iot;
+
+import com.zswl.dataservice.domain.iot.IotTemplate;
+import com.zswl.dataservice.model.baseParam.SuperModel;
+import com.zswl.dataservice.type.DataType;
+import com.zswl.dataservice.type.FunctionType;
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotEmpty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.springframework.data.mongodb.core.mapping.DBRef;
+
+import java.util.LinkedHashMap;
+
+/**
+ * @author TRX
+ * @date 2024/6/20
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class IotMainModel extends SuperModel {
+    @Schema(description = "功能名称")
+    private String name;
+
+    @Schema(description = "功能类型")
+    FunctionType functionType;
+
+    @Schema(description = "标识符")
+    private String identifier;
+
+    @Schema(description = "数据类型")
+    private DataType dataType;
+
+    @Schema(description = "数据定义")
+    private LinkedHashMap<String, Object> data;
+
+    @Schema(description = "物模型Topic")
+    private String iotTopic;
+
+    @Schema(description = "所属模版")
+    IotTemplateModel iotTemplate;
+}

+ 41 - 0
src/main/java/com/zswl/dataservice/model/iot/IotMainParam.java

@@ -0,0 +1,41 @@
+package com.zswl.dataservice.model.iot;
+
+import com.zswl.dataservice.model.baseParam.SuperParam;
+import com.zswl.dataservice.type.DataType;
+import com.zswl.dataservice.type.FunctionType;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.LinkedHashMap;
+
+/**
+ * @author TRX
+ * @date 2024/6/20
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class IotMainParam extends SuperParam {
+    @Schema(description = "功能名称")
+    private String name;
+
+    @Schema(description = "功能类型")
+    FunctionType functionType;
+
+    @Schema(description = "标识符")
+    private String identifier;
+
+    @Schema(description = "数据类型")
+    private DataType dataType;
+
+    @Schema(description = "数据定义")
+    private LinkedHashMap<String, Object> data;
+
+    @Schema(description = "物模型Topic")
+    private String iotTopic;
+
+    @Schema(description = "模版ID")
+    private String iotTemplateId;
+}

+ 41 - 0
src/main/java/com/zswl/dataservice/model/iot/IotMainSearch.java

@@ -0,0 +1,41 @@
+package com.zswl.dataservice.model.iot;
+
+import com.zswl.dataservice.model.baseParam.SuperSearchParam;
+import com.zswl.dataservice.type.DataType;
+import com.zswl.dataservice.type.FunctionType;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.LinkedHashMap;
+
+/**
+ * @author TRX
+ * @date 2024/6/20
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class IotMainSearch extends SuperSearchParam {
+    @Schema(description = "功能名称")
+    private String name;
+
+    @Schema(description = "功能类型")
+    FunctionType functionType;
+
+    @Schema(description = "标识符")
+    private String identifier;
+
+    @Schema(description = "数据类型")
+    private DataType dataType;
+
+    @Schema(description = "数据定义")
+    private LinkedHashMap<String, Object> data;
+
+    @Schema(description = "物模型Topic")
+    private String iotTopic;
+
+    @Schema(description = "模版ID")
+    private String iotTemplateId;
+}

+ 23 - 0
src/main/java/com/zswl/dataservice/model/iot/IotTemplateModel.java

@@ -0,0 +1,23 @@
+package com.zswl.dataservice.model.iot;
+
+import com.zswl.dataservice.model.baseParam.SuperModel;
+import com.zswl.dataservice.type.DataState;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author TRX
+ * @date 2024/6/20
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class IotTemplateModel  extends SuperModel {
+    @Schema(description = "模版名称")
+    private String name;
+
+    @Schema(description = "数据状态")
+    private DataState state = DataState.Enable;
+}

+ 23 - 0
src/main/java/com/zswl/dataservice/model/iot/IotTemplateParam.java

@@ -0,0 +1,23 @@
+package com.zswl.dataservice.model.iot;
+
+import com.zswl.dataservice.model.baseParam.SuperParam;
+import com.zswl.dataservice.type.DataState;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author TRX
+ * @date 2024/6/20
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class IotTemplateParam  extends SuperParam {
+    @Schema(description = "模版名称")
+    private String name;
+
+    @Schema(description = "数据状态")
+    private DataState state = DataState.Enable;
+}

+ 23 - 0
src/main/java/com/zswl/dataservice/model/iot/IotTemplateSearch.java

@@ -0,0 +1,23 @@
+package com.zswl.dataservice.model.iot;
+
+import com.zswl.dataservice.model.baseParam.SuperSearchParam;
+import com.zswl.dataservice.type.DataState;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author TRX
+ * @date 2024/6/20
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class IotTemplateSearch extends SuperSearchParam {
+    @Schema(description = "模版名称")
+    private String name;
+
+    @Schema(description = "数据状态")
+    private DataState state = DataState.Enable;
+}

+ 28 - 0
src/main/java/com/zswl/dataservice/model/iot/IotTopicModel.java

@@ -0,0 +1,28 @@
+package com.zswl.dataservice.model.iot;
+
+import com.zswl.dataservice.domain.iot.IotTemplate;
+import com.zswl.dataservice.model.baseParam.SuperModel;
+import com.zswl.dataservice.type.OperationType;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.springframework.data.mongodb.core.mapping.DBRef;
+
+/**
+ * @author TRX
+ * @date 2024/6/20
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class IotTopicModel  extends SuperModel {
+    @Schema(description = "Topic名称")
+    private String topic;
+
+    @Schema(description = "操作权限")
+    private OperationType operationType;
+
+    @Schema(description = "所属模版")
+    IotTemplateModel iotTemplate;
+}

+ 28 - 0
src/main/java/com/zswl/dataservice/model/iot/IotTopicParam.java

@@ -0,0 +1,28 @@
+package com.zswl.dataservice.model.iot;
+
+import com.zswl.dataservice.domain.iot.IotTemplate;
+import com.zswl.dataservice.model.baseParam.SuperParam;
+import com.zswl.dataservice.type.OperationType;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import org.springframework.data.mongodb.core.mapping.DBRef;
+
+/**
+ * @author TRX
+ * @date 2024/6/20
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class IotTopicParam extends SuperParam {
+    @Schema(description = "Topic名称")
+    private String topic;
+
+    @Schema(description = "操作权限")
+    private OperationType operationType;
+
+    @Schema(description = "所属模版")
+    String iotTemplateId;
+}

+ 26 - 0
src/main/java/com/zswl/dataservice/model/iot/IotTopicSearch.java

@@ -0,0 +1,26 @@
+package com.zswl.dataservice.model.iot;
+
+import com.zswl.dataservice.model.baseParam.SuperSearchParam;
+import com.zswl.dataservice.type.OperationType;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+/**
+ * @author TRX
+ * @date 2024/6/20
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class IotTopicSearch extends SuperSearchParam {
+    @Schema(description = "Topic名称")
+    private String topic;
+
+    @Schema(description = "操作权限")
+    private OperationType operationType;
+
+    @Schema(description = "所属模版")
+    String iotTemplateId;
+}

+ 40 - 0
src/main/java/com/zswl/dataservice/service/iot/IotServiceImpl.java

@@ -0,0 +1,40 @@
+package com.zswl.dataservice.service.iot;
+
+import com.zswl.dataservice.dao.UserDao;
+import com.zswl.dataservice.dao.iot.IotMainDao;
+import com.zswl.dataservice.dao.iot.IotTemplateDao;
+import com.zswl.dataservice.dao.iot.IotTopicDao;
+import com.zswl.dataservice.domain.iot.IotTemplate;
+import com.zswl.dataservice.model.iot.IotTemplateParam;
+import com.zswl.dataservice.service.base.SuperService;
+import com.zswl.dataservice.utils.result.ResultContent;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+ * @author TRX
+ * @date 2024/6/20
+ */
+@Slf4j
+@Service
+public class IotServiceImpl extends SuperService {
+
+    @Autowired
+    private IotTemplateDao iotTemplateDao;
+
+    @Autowired
+    private IotMainDao iotMainDao;
+
+    @Autowired
+    private IotTopicDao iotTopicDao;
+
+    @Autowired
+    UserDao userDao;
+
+    public ResultContent addIotTemplate(IotTemplateParam iotTemplate) {
+
+
+        return ResultContent.buildSuccess();
+    }
+}

+ 19 - 0
src/main/java/com/zswl/dataservice/type/DataState.java

@@ -0,0 +1,19 @@
+package com.zswl.dataservice.type;
+
+import lombok.Getter;
+
+/**
+ *
+ */
+public enum DataState {
+    Enable("启用"),
+    Disable("停用"),
+    ;
+
+    @Getter
+    private String remark;
+
+    DataState(String remark) {
+        this.remark = remark;
+    }
+}

+ 19 - 0
src/main/java/com/zswl/dataservice/type/DataType.java

@@ -0,0 +1,19 @@
+package com.zswl.dataservice.type;
+
+import lombok.Getter;
+
+/**
+ *
+ */
+public enum DataType {
+    Number("订阅"),
+    Psh("发布"),
+    ;
+
+    @Getter
+    private String remark;
+
+    DataType(String remark) {
+        this.remark = remark;
+    }
+}

+ 19 - 0
src/main/java/com/zswl/dataservice/type/FunctionType.java

@@ -0,0 +1,19 @@
+package com.zswl.dataservice.type;
+
+import lombok.Getter;
+
+/**
+ *
+ */
+public enum FunctionType {
+    Attribute("属性"),
+    Event("事件"),
+    ;
+
+    @Getter
+    private String remark;
+
+    FunctionType(String remark) {
+        this.remark = remark;
+    }
+}

+ 19 - 0
src/main/java/com/zswl/dataservice/type/OperationType.java

@@ -0,0 +1,19 @@
+package com.zswl.dataservice.type;
+
+import lombok.Getter;
+
+/**
+ *
+ */
+public enum OperationType {
+    Sub("订阅"),
+    Psh("发布"),
+    ;
+
+    @Getter
+    private String remark;
+
+    OperationType(String remark) {
+        this.remark = remark;
+    }
+}