diff --git a/.gitignore b/.gitignore
index 9154f4c..882303e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -24,3 +24,26 @@
hs_err_pid*
replay_pid*
+/build/
+/logs/
+target/
+.idea/
+*.iml
+.classpath
+.project
+.settings/
+.DS_Store
+*~
+packages/
+
+**/dist/
+/docker/snapshot/*.gz
+.mvn/wrapper/*.jar
+.factorypath
+.vscode
+.checkstyle
+.externalToolBuilders
+/test/plugin/dist
+/test/plugin/workspace
+/test/jacoco/classes
+/test/jacoco/*.exec
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..7ebb517
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,110 @@
+
+
+ 4.0.0
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 2.7.17
+
+
+ com.xydl
+ cac-backend
+ 0.0.1-SNAPSHOT
+ cac-backend
+ cac-backend project for Spring Boot
+
+ 8
+
+
+
+ org.springframework.boot
+ spring-boot-starter-data-jdbc
+
+
+ org.springframework.boot
+ spring-boot-starter-data-jpa
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
+
+
+
+ org.springframework.security
+ spring-security-core
+ 5.7.11
+
+
+ org.springframework.security
+ spring-security-crypto
+ 5.7.11
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+ io.springfox
+ springfox-boot-starter
+ 3.0.0
+
+
+ org.projectlombok
+ lombok
+ 1.18.24
+ provided
+
+
+ com.mysql
+ mysql-connector-j
+ 8.0.33
+
+
+ org.apache.commons
+ commons-lang3
+ 3.14.0
+
+
+ javax.validation
+ validation-api
+ 2.0.1.Final
+
+
+
+
+
+
+ src/main/java
+
+ **/*
+
+
+
+ src/main/resources
+
+ **/*
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+ org.projectlombok
+ lombok
+
+
+
+
+
+
+
+
diff --git a/src/main/java/com/xydl/demo/CacBackendApplication.java b/src/main/java/com/xydl/demo/CacBackendApplication.java
new file mode 100644
index 0000000..600809e
--- /dev/null
+++ b/src/main/java/com/xydl/demo/CacBackendApplication.java
@@ -0,0 +1,26 @@
+package com.xydl.demo;
+
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cache.annotation.EnableCaching;
+import org.springframework.context.annotation.Bean;
+import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
+import org.springframework.security.crypto.password.PasswordEncoder;
+import springfox.documentation.swagger2.annotations.EnableSwagger2;
+
+
+@EnableSwagger2
+@SpringBootApplication
+@EnableCaching
+public class CacBackendApplication {
+
+ @Bean(name = "passwordEncoder")
+ public PasswordEncoder passwordEncoder() {
+ return new BCryptPasswordEncoder();
+ }
+
+ public static void main(String[] args) {
+ SpringApplication.run(CacBackendApplication.class, args);
+ }
+}
diff --git a/src/main/java/com/xydl/demo/controller/BasicController.java b/src/main/java/com/xydl/demo/controller/BasicController.java
new file mode 100644
index 0000000..5745e6f
--- /dev/null
+++ b/src/main/java/com/xydl/demo/controller/BasicController.java
@@ -0,0 +1,62 @@
+package com.xydl.demo.controller;
+
+import lombok.extern.slf4j.Slf4j;
+
+import javax.servlet.http.HttpServletRequest;
+
+@Slf4j
+public abstract class BasicController {
+
+ protected Integer initPageNum(Integer pageNum) {
+ if (pageNum == null) {
+ pageNum = 1;
+ }
+ if (pageNum < 1) {
+ pageNum = 1;
+ }
+ return pageNum;
+ }
+
+ protected Integer initPageSize(Integer pageSize) {
+ if (pageSize == null) {
+ pageSize = 10;
+ }
+ if (pageSize < 1) {
+ pageSize = 1;
+ }
+ return pageSize;
+ }
+
+ /**
+ * 获取用户邮箱
+ *
+ * @param request 请求
+ * @return String
+ */
+ protected String getUserEmail(HttpServletRequest request) {
+ return request.getHeader("email");
+ }
+
+ /**
+ * 获取用户登录方式
+ *
+ * @param request 请求
+ * @return String
+ */
+ protected String getLoginMethod(HttpServletRequest request) {
+ return request.getHeader("login_method");
+ }
+
+ /**
+ * 获取用户登录IP
+ *
+ * @param request 请求
+ * @return String
+ */
+ protected String getClientIp(HttpServletRequest request) {
+ if (request == null) {
+ return null;
+ }
+ return request.getHeader("client_ip");
+ }
+}
diff --git a/src/main/java/com/xydl/demo/controller/NiecSensorController.java b/src/main/java/com/xydl/demo/controller/NiecSensorController.java
new file mode 100644
index 0000000..74f4dfa
--- /dev/null
+++ b/src/main/java/com/xydl/demo/controller/NiecSensorController.java
@@ -0,0 +1,80 @@
+package com.xydl.demo.controller;
+
+import com.xydl.demo.entity.NiecSensor;
+import com.xydl.demo.model.ConditionModel;
+import com.xydl.demo.model.Response;
+import com.xydl.demo.model.SensorDetail;
+import com.xydl.demo.service.NiecSensorService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import org.springframework.data.domain.Page;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+@RestController
+@Api(tags = {"装置表相关接口"})
+@RequestMapping("sensor")
+public class NiecSensorController extends BasicController {
+
+ @Resource
+ NiecSensorService service;
+
+ @GetMapping("list")
+ @ApiOperation("查询列表")
+ public Response> list(@ApiParam("页码") @RequestParam(value = "pageNum", required = false) Integer pageNum,
+ @ApiParam("每页数量") @RequestParam(value = "pageSize", required = false) Integer pageSize) {
+ pageNum = this.initPageNum(pageNum);
+ pageSize = this.initPageSize(pageSize);
+ try {
+ Page result = service.list(pageNum, pageSize);
+ return Response.success(result);
+ } catch (Exception ex) {
+ return Response.fail(ex.getMessage());
+ }
+ }
+
+ @GetMapping("listAll")
+ @ApiOperation("查询全部列表")
+ public Response> listAll() {
+ try {
+ List result = service.listAll();
+ return Response.success(result);
+ } catch (Exception ex) {
+ return Response.fail(ex.getMessage());
+ }
+ }
+
+ @GetMapping("getTree")
+ @ApiOperation("查询树")
+ public Response> getTree() {
+ try {
+ List result = service.getTree();
+ return Response.success(result);
+ } catch (Exception ex) {
+ return Response.fail(ex.getMessage());
+ }
+ }
+
+ @GetMapping("detail")
+ @ApiOperation("查询单个装置采集到的数据")
+ public Response getDetail(@Validated ConditionModel model) {
+ try {
+ if (model.getPageNum() != null || model.getPageSize() != null) {
+ model.setPageNum(this.initPageNum(model.getPageNum()));
+ model.setPageSize(this.initPageSize(model.getPageSize()));
+ }
+ SensorDetail result = service.getDetail(model);
+ return Response.success(result);
+ } catch (Exception ex) {
+ return Response.fail(ex.getMessage());
+ }
+ }
+
+}
diff --git a/src/main/java/com/xydl/demo/entity/NiecPoint.java b/src/main/java/com/xydl/demo/entity/NiecPoint.java
new file mode 100644
index 0000000..79d5a21
--- /dev/null
+++ b/src/main/java/com/xydl/demo/entity/NiecPoint.java
@@ -0,0 +1,96 @@
+package com.xydl.demo.entity;
+
+import io.swagger.annotations.ApiModel;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.persistence.*;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @author huangfeng
+ * @date 2023-11-24
+ **/
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+@Entity
+@Table(name = "niec_points")
+@ApiModel("IEC104-业务点表配置表")
+public class NiecPoint {
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ @Column(name = "id")
+ private Integer id;
+
+ @Column(name = "sadr")
+ private Integer sadr;
+
+ @Column(name = "site_id")
+ private Integer siteId;
+
+ @Column(name = "sensor_id")
+ private Integer sensorId;
+
+ @Column(name = "stype")
+ private Integer stype;
+
+ @Column(name = "main_equipment_type")
+ private String mainEquipmentType;
+
+ @Column(name = "name")
+ private String name;
+
+ @Column(name = "sub_tree_id")
+ private String subTreeId;
+
+ @Column(name = "sub_equipment_type")
+ private String subEquipmentType;
+
+ @Column(name = "gtype")
+ private String gtype;
+
+ @Column(name = "item_no")
+ private Integer itemNo;
+
+ @Column(name = "yx_bit")
+ private Integer yxBit;
+
+ @Column(name = "field")
+ private String field;
+
+ @Column(name = "filed_desc")
+ private String filedDesc;
+
+ @Column(name = "sno")
+ private Integer sno;
+
+ @Column(name = "isget")
+ private String isget;
+
+ @Column(name = "status")
+ private Integer status;
+
+ @Column(name = "unit")
+ private String unit;
+
+ @Column(name = "warnflag")
+ private String warnflag;
+
+ @Column(name = "thresholdfield")
+ private String thresholdfield;
+
+ @Column(name = "descr")
+ private String descr;
+
+ @Column(name = "d_time")
+ private Date dTime;
+
+ @Transient
+ private List