diff --git a/pom.xml b/pom.xml
index 3b39444..c6ab331 100644
--- a/pom.xml
+++ b/pom.xml
@@ -26,6 +26,16 @@
gunshi-modules-all
1.0-SNAPSHOT
+
+
+
+ com.alibaba
+ easyexcel
+ 3.3.2
+
+
org.junit.jupiter
junit-jupiter
@@ -49,6 +59,27 @@
org.apache.maven.plugins
maven-dependency-plugin
+
+
+ copy-lib
+
+ copy-dependencies
+
+
+ false
+ false
+ runtime
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+ 15
+ 15
+
diff --git a/src/main/java/com/gunshi/project/xyt/controller/BzProtocolInfoController.java b/src/main/java/com/gunshi/project/xyt/controller/BzProtocolInfoController.java
index df762e5..7cfcfdf 100644
--- a/src/main/java/com/gunshi/project/xyt/controller/BzProtocolInfoController.java
+++ b/src/main/java/com/gunshi/project/xyt/controller/BzProtocolInfoController.java
@@ -50,7 +50,7 @@ public class BzProtocolInfoController {
@Operation(summary = "删除协议信息")
@GetMapping("/delete/{id}")
- public R delete(@PathVariable String id) {
+ public R delete(@PathVariable("id") String id) {
return R.ok(dao.removeById(id));
}
diff --git a/src/main/java/com/gunshi/project/xyt/controller/EngineeringDrainageController.java b/src/main/java/com/gunshi/project/xyt/controller/EngineeringDrainageController.java
new file mode 100644
index 0000000..4750a5e
--- /dev/null
+++ b/src/main/java/com/gunshi/project/xyt/controller/EngineeringDrainageController.java
@@ -0,0 +1,191 @@
+package com.gunshi.project.xyt.controller;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.gunshi.core.result.R;
+import com.gunshi.project.xyt.entity.dto.StDamDto;
+import com.gunshi.project.xyt.entity.dto.StResDto;
+import com.gunshi.project.xyt.entity.dto.StRvDto;
+import com.gunshi.project.xyt.entity.vo.StResVo;
+import com.gunshi.project.xyt.model.StDamB;
+import com.gunshi.project.xyt.model.StResB;
+import com.gunshi.project.xyt.model.StRvB;
+import com.gunshi.project.xyt.service.EngineeringDrainageService;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.annotation.Resource;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * TODO
+ *
+ * @ClassName EngineeringDrainageController
+ * @Author Huang Qianxiang
+ * @Date 2024/1/25 11:50
+ */
+@Slf4j
+@Tag(name = "工程及水系接口", description = "水库、河流、大坝、闸阀、量水堰基础信息")
+@RestController
+@RequestMapping("/EngineeringDrainage")
+public class EngineeringDrainageController {
+
+ @Resource
+ private EngineeringDrainageService engineeringDrainageService;
+
+ @Operation(summary = "新增水库基础信息")
+ @PostMapping("/insertStRes")
+ public R insertRes(@RequestBody @Validated StResDto stResDto){
+ engineeringDrainageService.insertStRes(stResDto);
+ return R.ok();
+ }
+
+ @Operation(summary = "更新水库的基础信息")
+ @PostMapping("/updateStRes")
+ public R updateStRes(@RequestBody StResDto stResDto){
+ engineeringDrainageService.updateStRes(stResDto);
+ return R.ok();
+ }
+
+ @Operation(summary = "根据水库ID删除水库基本信息")
+ @GetMapping("/deleteStRes")
+ public R deleteStRes(@Parameter(description = "水库ID") @RequestParam("resId") String resId){
+ engineeringDrainageService.deleteStRes(resId);
+ return R.ok();
+ }
+
+ @Operation(summary = "查询水库的基础信息")
+ @GetMapping("/queryStRes")
+ public R> queryStRes(){
+ return R.ok(engineeringDrainageService.queryStRes());
+ }
+
+ @Operation(summary = "根据水库代码查询水库的基础信息")
+ @GetMapping("/queryByResCode")
+ public R queryByResCode(@Parameter(description = "水库代码") @RequestParam("resCode") String resCode){
+ return R.ok(engineeringDrainageService.queryByResCode(resCode));
+ }
+
+ @Operation(summary = "根据水库ID查询水库的基础信息")
+ @GetMapping("/queryByResId")
+ public R queryByResId(@Parameter(description = "水库ID") @RequestParam("resId") String resId){
+ return R.ok(engineeringDrainageService.queryByResId(resId));
+ }
+
+ @Operation(summary = "根据水库名称模糊查询水库的基础信息")
+ @GetMapping("/queryLikeResName")
+ public R> queryLikeResName(@Parameter(description = "水库名称") @RequestParam("resName") String resName){
+ return R.ok(engineeringDrainageService.queryLikeResName(resName));
+ }
+
+ @Operation(summary = "根据水库规模查询水库的基础信息")
+ @GetMapping("/queryByEngScal")
+ public R> queryByEngScal(@Parameter(description = "水库规模") @RequestParam("engScal") String engScal){
+ return R.ok(engineeringDrainageService.queryByEngScal(engScal));
+ }
+
+ @Operation(summary = "新增河流基础信息")
+ @PostMapping("/insertStRv")
+ public R insertStRv(@RequestBody @Validated StRvDto stRvDto){
+ engineeringDrainageService.insertStRv(stRvDto);
+ return R.ok();
+ }
+
+ @Operation(summary = "更新河流的基础信息")
+ @PostMapping("/updateStRv")
+ public R updateStRv(@RequestBody StRvB stRvB){
+ engineeringDrainageService.updateStRv(stRvB);
+ return R.ok();
+ }
+
+ @Operation(summary = "根据河流ID删除河流信息")
+ @GetMapping("/deleteStRv")
+ public R deleteStRv(@Parameter(description = "河流ID") @RequestParam("rvId") String rvId){
+ engineeringDrainageService.deleteStRv(rvId);
+ return R.ok();
+ }
+
+ @Operation(summary = "根据河流代码查询河流的基础信息")
+ @GetMapping("/queryByRvCode")
+ public R queryByRvCode(@Parameter(description = "河流代码") @RequestParam("rvCode") String rvCode){
+ return R.ok(engineeringDrainageService.queryByRvCode(rvCode));
+ }
+
+ @Operation(summary = "根据河流ID查询河流的基础信息")
+ @GetMapping("/queryByRvId")
+ public R queryByRvId(@Parameter(description = "河流ID") @RequestParam("rvId") String rvId){
+ return R.ok(engineeringDrainageService.queryByRvId(rvId));
+ }
+
+ @Operation(summary = "分页查询河流的基础信息")
+ @GetMapping("/pageStRv")
+ public R> pageStRv(
+ @Parameter(description = "当前页") @RequestParam("pageNum") Integer pageNum,
+ @Parameter(description = "每页显示的条数") @RequestParam("pageSize")Integer pageSize){
+ return R.ok(engineeringDrainageService.pageStRv(pageNum,pageSize));
+ }
+
+ @Operation(summary = "根据河流名称模糊查询河流信息")
+ @GetMapping("/queryLikeRvName")
+ public R> queryLikeRvName(
+ @Parameter(description = "河流名称") @RequestParam("rvName")String rvName,
+ @Parameter(description = "当前页") @RequestParam("pageNum") Integer pageNum,
+ @Parameter(description = "每页显示的条数") @RequestParam("pageSize")Integer pageSize){
+ return R.ok(engineeringDrainageService.queryLikeRvName(rvName, pageNum, pageSize));
+ }
+
+ @Operation(summary = "新增大坝基础信息")
+ @PostMapping("/insertStDam")
+ public R insertStDam(@RequestBody @Validated StDamDto stDamDto){
+ engineeringDrainageService.insertStDam(stDamDto);
+ return R.ok();
+ }
+
+ @Operation(summary = "更新大坝基础信息")
+ @PostMapping("/updateStDam")
+ public R updateStDam(@RequestBody StDamB stDamB){
+ engineeringDrainageService.updateStDam(stDamB);
+ return R.ok();
+ }
+
+ @Operation(summary = "删除大坝基础信息")
+ @GetMapping("/deleteStDam")
+ public R deleteStDam(@Parameter(description = "大坝ID") @RequestParam("damId") String damId){
+ engineeringDrainageService.deleteStDam(damId);
+ return R.ok();
+ }
+
+ @Operation(summary = "根据大坝ID查询大坝信息")
+ @GetMapping("/queryByDamId")
+ public R queryByDamId(@Parameter(description = "大坝ID") @RequestParam("damId") String damId){
+ return R.ok(engineeringDrainageService.queryByDamId(damId));
+ }
+
+ @Operation(summary = "根据大坝代码查询大坝信息")
+ @GetMapping("/queryByDamCode")
+ public R queryByDamCode(@Parameter(description = "大坝代码") @RequestParam("damCode") String damCode){
+ return R.ok(engineeringDrainageService.queryByDamCode(damCode));
+ }
+
+ @Operation(summary = "分页查询大坝基础信息")
+ @GetMapping("/pageStDam")
+ public R> pageStDam(
+ @Parameter(description = "当前页") @RequestParam("pageNum") Integer pageNum,
+ @Parameter(description = "每页显示的条数") @RequestParam("pageSize")Integer pageSize){
+ return R.ok(engineeringDrainageService.pageStDam(pageNum,pageSize));
+ }
+
+ @Operation(summary = "根据大坝名称模糊查询大坝基础信息")
+ @GetMapping("/queryLikeDamName")
+ public R> queryLikeDamName(
+ @Parameter(description = "大坝名称") @RequestParam("damName")String damName,
+ @Parameter(description = "当前页") @RequestParam("pageNum") Integer pageNum,
+ @Parameter(description = "每页显示的条数") @RequestParam("pageSize")Integer pageSize){
+ return R.ok(engineeringDrainageService.queryLikeDamName(damName,pageNum,pageSize));
+ }
+
+
+}
diff --git a/src/main/java/com/gunshi/project/xyt/controller/WaterQualityController.java b/src/main/java/com/gunshi/project/xyt/controller/WaterQualityController.java
new file mode 100644
index 0000000..827f0ab
--- /dev/null
+++ b/src/main/java/com/gunshi/project/xyt/controller/WaterQualityController.java
@@ -0,0 +1,95 @@
+package com.gunshi.project.xyt.controller;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.gunshi.core.result.R;
+import com.gunshi.project.xyt.model.StWaterQualityR;
+import com.gunshi.project.xyt.service.WaterQualityService;
+import com.gunshi.project.xyt.so.WaterQualityPageSo;
+import com.gunshi.project.xyt.validate.markers.QueryPage;
+import com.gunshi.project.xyt.validate.markers.QueryTimeRange;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.servlet.http.HttpServletResponse;
+import lombok.Data;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.IOException;
+
+/**
+ * Description:
+ * Created by xusan on 2024/1/23
+ *
+ * @author xusan
+ * @version 1.0
+ */
+@RestController
+@Slf4j
+@Tag(name = "水质整编接口-controller", description = "水质整编接口")
+@Data
+@RequestMapping("/waterQuality")
+public class WaterQualityController {
+
+ private final WaterQualityService waterqualityService;
+
+// @Operation(summary = "新增水质监测数据")
+// @ApiResponses(value = {
+// @ApiResponse(responseCode = "200",description = "成功")
+// })
+// @PostMapping("/add")
+// public R add(@RequestBody @Validated StWaterQualityR organization){
+// return R.ok(waterqualityService.add(organization));
+// }
+//
+// @Operation(summary = "更新水质监测数据")
+// @ApiResponses(value = {
+// @ApiResponse(responseCode = "200",description = "成功")
+// })
+// @PostMapping("/update")
+// public R update(@RequestBody @Validated StWaterQualityR organization){
+// return R.ok(waterqualityService.update(organization));
+// }
+//
+// @Operation(summary = "根据id删除水质监测数据")
+// @Parameter(name = "id", description = "水质监测数据id")
+// @DeleteMapping("/delete")
+// public R delete(@RequestParam("id") String orgCode){
+// return R.ok(waterqualityService.delete(orgCode));
+// }
+
+ @Operation(summary = "水质监测数据分页查询")
+ @PostMapping("/page")
+ public R> page(
+ @Validated({QueryPage.class, QueryTimeRange.class}) @RequestBody
+ WaterQualityPageSo waterQualityPageSo
+ ) {
+ return R.ok(waterqualityService.page(waterQualityPageSo));
+ }
+
+ @Operation(summary = "水质监测数据导出")
+ @GetMapping("/export")
+ public void export(WaterQualityPageSo waterQualityPageSo, HttpServletResponse response) {
+ waterqualityService.export(waterQualityPageSo, response);
+ }
+
+ @Operation(summary = "水质监测数据导入")
+ @GetMapping("/import")
+ public R importExcel(@RequestParam("file") MultipartFile file) {
+ if (file.isEmpty()) {
+ return R.error(400, "请选择上传文件");
+ }
+
+ try {
+
+ return R.ok( waterqualityService.importExcel(file));
+
+ } catch (IOException e) {
+
+ return R.error(500, "文件上传失败: " + e.getMessage());
+
+ }
+ }
+
+}
diff --git a/src/main/java/com/gunshi/project/xyt/entity/dto/StDamDto.java b/src/main/java/com/gunshi/project/xyt/entity/dto/StDamDto.java
new file mode 100644
index 0000000..0a1da74
--- /dev/null
+++ b/src/main/java/com/gunshi/project/xyt/entity/dto/StDamDto.java
@@ -0,0 +1,34 @@
+package com.gunshi.project.xyt.entity.dto;
+
+import com.gunshi.project.xyt.model.StDamB;
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * TODO
+ *
+ * @ClassName StDamDto
+ * @Author Huang Qianxiang
+ * @Date 2024/1/25 11:08
+ */
+@EqualsAndHashCode(callSuper = true)
+@Schema(description="大坝基础信息DTO")
+@Data
+public class StDamDto extends StDamB {
+
+ /**
+ * 大坝代码
+ */
+ @Schema(description="大坝代码")
+ @NotNull(message = "大坝代码不能为空")
+ private String damCode;
+
+ /**
+ * 大坝名称
+ */
+ @Schema(description="大坝名称")
+ @NotNull(message = "大坝名称不能为空")
+ private String damName;
+}
diff --git a/src/main/java/com/gunshi/project/xyt/entity/dto/StResDto.java b/src/main/java/com/gunshi/project/xyt/entity/dto/StResDto.java
new file mode 100644
index 0000000..869f49a
--- /dev/null
+++ b/src/main/java/com/gunshi/project/xyt/entity/dto/StResDto.java
@@ -0,0 +1,121 @@
+package com.gunshi.project.xyt.entity.dto;
+
+import com.gunshi.project.xyt.model.StResB;
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.math.BigDecimal;
+
+/**
+ * TODO
+ *
+ * @ClassName ResDto
+ * @Author Huang Qianxiang
+ * @Date 2024/1/24 14:43
+ */
+@EqualsAndHashCode(callSuper = true)
+@Schema(description="水库的基础信息DTO")
+@Data
+public class StResDto extends StResB {
+
+ /**
+ * 水库名称
+ */
+ @Schema(description="水库名称")
+ @NotNull(message = "水库名称不能为空")
+ private String resName;
+
+ /**
+ * 水库代码
+ */
+ @Schema(description="水库代码")
+ @NotNull(message = "水库代码不能为空")
+ private String resCode;
+
+ /**
+ * 行政区划编码
+ */
+ @Schema(description="行政区划编码")
+ @NotNull(message = "行政区化编码不能为空")
+ private String addvcd;
+
+ /**
+ * 经度
+ */
+ @Schema(description="经度")
+ @NotNull(message = "经度不能为空")
+ private BigDecimal lgtd;
+
+ /**
+ * 纬度
+ */
+ @Schema(description="纬度")
+ @NotNull(message = "维度不能为空")
+ private BigDecimal lttd;
+
+ /**
+ * 设计洪水位
+ */
+ @Schema(description="设计洪水位")
+ @NotNull(message = "设计洪水位不能为空")
+ private BigDecimal dsfllv;
+
+ /**
+ * 校核洪水位
+ */
+ @Schema(description="校核洪水位")
+ @NotNull(message = "校核洪水位不能为空")
+ private BigDecimal chfllv;
+
+ /**
+ * 正常蓄水位
+ */
+ @Schema(description="正常蓄水位")
+ @NotNull(message = "正常蓄水位不能为空")
+ private BigDecimal normWatLev;
+
+ /**
+ * 死水位
+ */
+ @Schema(description="死水位")
+ @NotNull(message = "死水位不能为空")
+ private BigDecimal deadLev;
+
+ /**
+ * 总库容
+ */
+ @Schema(description="总库容")
+ @NotNull(message = "总库容不能为空")
+ private BigDecimal totCap;
+
+ /**
+ * 汛限水位
+ */
+ @Schema(description="汛限水位")
+ @NotNull(message = "汛限水位不能为空")
+ private BigDecimal flLowLimLev;
+
+ /**
+ * 集雨面积
+ */
+ @Schema(description="集雨面积")
+ @NotNull(message = "集雨面积不能为空")
+ private BigDecimal watShedArea;
+
+ /**
+ * 水库规模 dict_id
+ */
+ @Schema(description="水库规模 dict_id")
+ @NotNull(message = "水库规模不能为空")
+ private Long engScal;
+
+ /**
+ * 测站编码
+ */
+ @Schema(description = "测站编码")
+ @NotNull(message = "测站编码不能为空")
+ private String STCD;
+
+}
diff --git a/src/main/java/com/gunshi/project/xyt/entity/dto/StRvDto.java b/src/main/java/com/gunshi/project/xyt/entity/dto/StRvDto.java
new file mode 100644
index 0000000..10ff230
--- /dev/null
+++ b/src/main/java/com/gunshi/project/xyt/entity/dto/StRvDto.java
@@ -0,0 +1,34 @@
+package com.gunshi.project.xyt.entity.dto;
+
+import com.gunshi.project.xyt.model.StRvB;
+import io.swagger.v3.oas.annotations.media.Schema;
+import jakarta.validation.constraints.NotNull;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * TODO
+ *
+ * @ClassName StRvDto
+ * @Author Huang Qianxiang
+ * @Date 2024/1/25 9:28
+ */
+@EqualsAndHashCode(callSuper = true)
+@Schema(description="河流的基础信息DTO")
+@Data
+public class StRvDto extends StRvB {
+ /**
+ * 河流代码
+ */
+ @Schema(description="河流代码")
+ @NotNull(message = "河流代码不能为空")
+ private String rvCode;
+
+ /**
+ * 河流名称
+ */
+ @Schema(description="河流名称")
+ @NotNull(message = "河流名称不能为空")
+ private String rvName;
+
+}
diff --git a/src/main/java/com/gunshi/project/xyt/entity/vo/StResVo.java b/src/main/java/com/gunshi/project/xyt/entity/vo/StResVo.java
new file mode 100644
index 0000000..c9428b9
--- /dev/null
+++ b/src/main/java/com/gunshi/project/xyt/entity/vo/StResVo.java
@@ -0,0 +1,26 @@
+package com.gunshi.project.xyt.entity.vo;
+
+import com.gunshi.db.dto.PageSo;
+import com.gunshi.project.xyt.model.StResB;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+/**
+ * TODO
+ *
+ * @ClassName StResPageSo
+ * @Author Huang Qianxiang
+ * @Date 2024/1/24 16:25
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class StResVo extends StResB {
+
+ /**
+ * 测站编码
+ */
+ @Schema(description = "测站编码")
+ private String STCD;
+
+}
diff --git a/src/main/java/com/gunshi/project/xyt/enums/RcvDataType.java b/src/main/java/com/gunshi/project/xyt/enums/RcvDataType.java
new file mode 100644
index 0000000..388ebd4
--- /dev/null
+++ b/src/main/java/com/gunshi/project/xyt/enums/RcvDataType.java
@@ -0,0 +1,37 @@
+package com.gunshi.project.xyt.enums;
+
+/**
+ * 类描述
+ *
+ * @author lyf
+ * @version 1.0.0
+ * @since 2024-01-25
+ */
+public enum RcvDataType {
+ /**
+ * 雨量数据
+ */
+ PPTN("PPTN"),
+ /**
+ * 水位数据
+ */
+ RSVR("RSVR"),
+ /**
+ * 流量数据
+ */
+ FLOW("FLOW"),
+ /**
+ * 图像数据
+ */
+ IMG("IMG");
+
+ private final String value;
+
+ RcvDataType(String value) {
+ this.value = value;
+ }
+
+ public String getValue() {
+ return value;
+ }
+}
diff --git a/src/main/java/com/gunshi/project/xyt/mapper/WaterQualityMapper.java b/src/main/java/com/gunshi/project/xyt/mapper/WaterQualityMapper.java
new file mode 100644
index 0000000..26cc3a0
--- /dev/null
+++ b/src/main/java/com/gunshi/project/xyt/mapper/WaterQualityMapper.java
@@ -0,0 +1,16 @@
+package com.gunshi.project.xyt.mapper;
+
+import com.gunshi.db.dao.IMapper;
+import com.gunshi.project.xyt.model.StWaterQualityR;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * Description:
+ * Created by XuSan on 2024/1/23.
+ *
+ * @author XuSan
+ * @version 1.0
+ */
+@Mapper
+public interface WaterQualityMapper extends IMapper {
+}
diff --git a/src/main/java/com/gunshi/project/xyt/model/RcvLogDownR.java b/src/main/java/com/gunshi/project/xyt/model/RcvLogDownR.java
new file mode 100644
index 0000000..c292803
--- /dev/null
+++ b/src/main/java/com/gunshi/project/xyt/model/RcvLogDownR.java
@@ -0,0 +1,24 @@
+package com.gunshi.project.xyt.model;
+
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 报文日志
+ *
+ * @author lyf
+ * @version 1.0.0
+ * @since 2024-01-25
+ */
+@Data
+public class RcvLogDownR {
+ private Long id;
+ private Long protocolId;
+ private String msg;
+ private Date sendTm;
+ private String encoded;
+ private String rtuid;
+ private String funcode;
+ private Long arkId;
+}
diff --git a/src/main/java/com/gunshi/project/xyt/model/RcvLogUpR.java b/src/main/java/com/gunshi/project/xyt/model/RcvLogUpR.java
new file mode 100644
index 0000000..c60fa42
--- /dev/null
+++ b/src/main/java/com/gunshi/project/xyt/model/RcvLogUpR.java
@@ -0,0 +1,28 @@
+package com.gunshi.project.xyt.model;
+
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * 报文日志
+ *
+ * @author lyf
+ * @version 1.0.0
+ * @since 2024-01-25
+ */
+@Data
+public class RcvLogUpR {
+ private Long id;
+ private Long protocolId;
+ private String originalMsg;
+ private Date receiveTm;
+ private String decoded;
+ private Date decodedTm;
+ private String rtuid;
+ private String funcode;
+ private Date observeTm;
+ private Integer partialSize;
+ private Integer partialIndex;
+ private Long arkId;
+}
diff --git a/src/main/java/com/gunshi/project/xyt/model/StFlowR.java b/src/main/java/com/gunshi/project/xyt/model/StFlowR.java
new file mode 100644
index 0000000..6d1a31a
--- /dev/null
+++ b/src/main/java/com/gunshi/project/xyt/model/StFlowR.java
@@ -0,0 +1,11 @@
+package com.gunshi.project.xyt.model;
+
+/**
+ * 流量数据
+ *
+ * @author lyf
+ * @version 1.0.0
+ * @since 2024-01-25
+ */
+public class StFlowR {
+}
diff --git a/src/main/java/com/gunshi/project/xyt/model/StImgR.java b/src/main/java/com/gunshi/project/xyt/model/StImgR.java
new file mode 100644
index 0000000..65facb7
--- /dev/null
+++ b/src/main/java/com/gunshi/project/xyt/model/StImgR.java
@@ -0,0 +1,11 @@
+package com.gunshi.project.xyt.model;
+
+/**
+ * 图像数据
+ *
+ * @author lyf
+ * @version 1.0.0
+ * @since 2024-01-25
+ */
+public class StImgR {
+}
diff --git a/src/main/java/com/gunshi/project/xyt/model/StPptnR.java b/src/main/java/com/gunshi/project/xyt/model/StPptnR.java
new file mode 100644
index 0000000..0ee8219
--- /dev/null
+++ b/src/main/java/com/gunshi/project/xyt/model/StPptnR.java
@@ -0,0 +1,11 @@
+package com.gunshi.project.xyt.model;
+
+/**
+ * 雨量数据
+ *
+ * @author lyf
+ * @version 1.0.0
+ * @since 2024-01-25
+ */
+public class StPptnR {
+}
diff --git a/src/main/java/com/gunshi/project/xyt/model/StRsvrR.java b/src/main/java/com/gunshi/project/xyt/model/StRsvrR.java
new file mode 100644
index 0000000..a9953f9
--- /dev/null
+++ b/src/main/java/com/gunshi/project/xyt/model/StRsvrR.java
@@ -0,0 +1,11 @@
+package com.gunshi.project.xyt.model;
+
+/**
+ * 水位数据
+ *
+ * @author lyf
+ * @version 1.0.0
+ * @since 2024-01-25
+ */
+public class StRsvrR {
+}
diff --git a/src/main/java/com/gunshi/project/xyt/model/StWaterQualityR.java b/src/main/java/com/gunshi/project/xyt/model/StWaterQualityR.java
new file mode 100644
index 0000000..1f5a67e
--- /dev/null
+++ b/src/main/java/com/gunshi/project/xyt/model/StWaterQualityR.java
@@ -0,0 +1,280 @@
+package com.gunshi.project.xyt.model;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+/**
+ * Description:
+ * Created by XuSan on 2024/1/23.
+ *
+ * @author XuSan
+ * @version 1.0
+ */
+/**
+ * 水质自动监测数据表
+ */
+@Data
+@TableName(value = "ST_WATER_QUALITY_R")
+@Schema(description = "水质自动监测数据表")
+public class StWaterQualityR {
+
+ /**
+ * 主键id
+ */
+ @TableId(value = "ID", type = IdType.AUTO)
+ @Schema(description = "主键id")
+ @ExcelProperty("编号")
+ private Integer id;
+
+ /**
+ * 站码
+ */
+ @TableField(value = "STCD")
+ @Schema(description = "站码")
+ @ExcelProperty("站码")
+ private String stcd;
+
+ /**
+ * 采样时间
+ */
+ @TableField(value = "SPT")
+ @Schema(description = "采样时间")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm", timezone = "GMT+8")
+ @ExcelProperty("采样时间")
+ private LocalDateTime spt;
+
+ /**
+ * 水温
+ */
+ @TableField(value = "WIMP")
+ @Schema(description = "水温")
+ @ExcelProperty("水温")
+ private BigDecimal wimp;
+
+ /**
+ * PH值
+ */
+ @TableField(value = "PH")
+ @Schema(description = "PH值")
+ @ExcelProperty("PH值")
+ private BigDecimal ph;
+
+ /**
+ * 电导率
+ */
+ @TableField(value = "COND")
+ @Schema(description = "电导率")
+ @ExcelProperty("电导率")
+ private BigDecimal cond;
+
+ /**
+ * 浑浊度
+ */
+ @TableField(value = "TURB")
+ @Schema(description = "浑浊度")
+ @ExcelProperty("浑浊度")
+ private BigDecimal turb;
+
+ /**
+ * 溶解氧
+ */
+ @TableField(value = "DOX")
+ @Schema(description = "溶解氧")
+ @ExcelProperty("溶解氧")
+ private BigDecimal dox;
+
+ /**
+ * 高锰酸钾指数
+ */
+ @TableField(value = "CODMN")
+ @Schema(description = "高锰酸钾指数")
+ @ExcelProperty("高锰酸钾指数")
+ private BigDecimal codmn;
+
+ /**
+ * 化学需氧量
+ */
+ @TableField(value = "CODCR")
+ @Schema(description = "化学需氧量")
+ @ExcelProperty("化学需氧量")
+ private BigDecimal codcr;
+
+ /**
+ * 总氮
+ */
+ @TableField(value = "TN")
+ @Schema(description = "总氮")
+ @ExcelProperty("总氮")
+ private BigDecimal tn;
+
+ /**
+ * 氨氮
+ */
+ @TableField(value = "NH3N")
+ @Schema(description = "氨氮")
+ @ExcelProperty("氨氮")
+ private BigDecimal nh3N;
+
+ /**
+ * 亚硝酸盐氮
+ */
+ @TableField(value = "NO2")
+ @Schema(description = "亚硝酸盐氮")
+ @ExcelProperty("亚硝酸盐氮")
+ private BigDecimal no2;
+
+ /**
+ * 硝酸盐氮
+ */
+ @TableField(value = "NO3")
+ @Schema(description = "硝酸盐氮")
+ @ExcelProperty("硝酸盐氮")
+ private BigDecimal no3;
+
+ /**
+ * 总磷
+ */
+ @TableField(value = "TP")
+ @Schema(description = "总磷")
+ @ExcelProperty("总磷")
+ private BigDecimal tp;
+
+ /**
+ * 总有机碳
+ */
+ @TableField(value = "TOC")
+ @Schema(description = "总有机碳")
+ @ExcelProperty("总有机碳")
+ private BigDecimal toc;
+
+ /**
+ * 挥发酚
+ */
+ @TableField(value = "VLPH")
+ @Schema(description = "挥发酚")
+ @ExcelProperty("挥发酚")
+ private BigDecimal vlph;
+
+ /**
+ * 叶绿素a
+ */
+ @TableField(value = "CHLA")
+ @Schema(description = "叶绿素a")
+ @ExcelProperty("叶绿素a")
+ private BigDecimal chla;
+
+ /**
+ * 氟化物
+ */
+ @TableField(value = "F")
+ @Schema(description = "氟化物")
+ @ExcelProperty("氟化物")
+ private BigDecimal f;
+
+ /**
+ * 砷
+ */
+ @TableField(value = "ARS")
+ @Schema(description = "砷")
+ @ExcelProperty("砷")
+ private BigDecimal ars;
+
+ /**
+ * 汞
+ */
+ @TableField(value = "HG")
+ @Schema(description = "汞")
+ @ExcelProperty("汞")
+ private BigDecimal hg;
+
+ /**
+ * 铬(六价)
+ */
+ @TableField(value = "CR6")
+ @Schema(description = "铬(六价)")
+ @ExcelProperty("铬(六价)")
+ private BigDecimal cr6;
+
+ /**
+ * 铜
+ */
+ @TableField(value = "CU")
+ @Schema(description = "铜")
+ @ExcelProperty("铜")
+ private BigDecimal cu;
+
+ /**
+ * 铅
+ */
+ @TableField(value = "PB")
+ @Schema(description = "铅")
+ @ExcelProperty("铅")
+ private BigDecimal pb;
+
+ /**
+ * 镉
+ */
+ @TableField(value = "CD")
+ @Schema(description = "镉")
+ @ExcelProperty("镉")
+ private BigDecimal cd;
+
+ /**
+ * 锌
+ */
+ @TableField(value = "ZN")
+ @Schema(description = "锌")
+ @ExcelProperty("锌")
+ private BigDecimal zn;
+
+ /**
+ * 锑
+ */
+ @TableField(value = "SB")
+ @Schema(description = "锑")
+ @ExcelProperty("锑")
+ private BigDecimal sb;
+
+ /**
+ * 湿度
+ */
+ @TableField(value = "HUMIDITY")
+ @Schema(description = "湿度")
+ @ExcelProperty("湿度")
+ private BigDecimal humidity;
+
+ /**
+ * 室温
+ */
+ @TableField(value = "ROOMTMP")
+ @Schema(description = "室温")
+ @ExcelProperty("室温")
+ private BigDecimal roomtmp;
+
+ /**
+ * 水质类别
+ */
+ @TableField(value = "CATEGORY")
+ @Schema(description = "水质类别")
+ @ExcelProperty("水质类别")
+ private BigDecimal category;
+
+ /**
+ * 污染物
+ */
+ @TableField(value = "POLLUTER")
+ @Schema(description = "污染物")
+ @ExcelProperty("污染物")
+ private BigDecimal polluter;
+
+
+}
diff --git a/src/main/java/com/gunshi/project/xyt/service/EngineeringDrainageService.java b/src/main/java/com/gunshi/project/xyt/service/EngineeringDrainageService.java
new file mode 100644
index 0000000..03d0d18
--- /dev/null
+++ b/src/main/java/com/gunshi/project/xyt/service/EngineeringDrainageService.java
@@ -0,0 +1,420 @@
+package com.gunshi.project.xyt.service;
+
+import cn.hutool.core.bean.BeanUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.baomidou.mybatisplus.core.toolkit.IdWorker;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.gunshi.project.xyt.entity.dto.StDamDto;
+import com.gunshi.project.xyt.entity.dto.StResDto;
+import com.gunshi.project.xyt.entity.dto.StRvDto;
+import com.gunshi.project.xyt.entity.vo.StResVo;
+import com.gunshi.project.xyt.model.*;
+import com.gunshi.project.xyt.model.StDamBAutoDao;
+import com.gunshi.project.xyt.model.StResBAutoDao;
+import com.gunshi.project.xyt.model.StResStcdRefAutoDao;
+import com.gunshi.project.xyt.model.StRvBAutoDao;
+import jakarta.annotation.Resource;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * TODO
+ *
+ * @ClassName EngineeringDrainageServiceImpl
+ * @Author Huang Qianxiang
+ * @Date 2024/1/24 14:38
+ */
+@Service
+@Slf4j
+@Transactional(rollbackFor = Exception.class)
+public class EngineeringDrainageService {
+
+ @Resource
+ private StResBAutoDao stResBAutoDao;
+ @Resource
+ private StResStcdRefAutoDao stResStcdRefAutoDao;
+ @Resource
+ private StRvBAutoDao stRvBAutoDao;
+ @Resource
+ private StDamBAutoDao stDamBAutoDao;
+
+ /**
+ * 新增水库基础信息
+ * @param stResDto 水库的基础信息
+ */
+ public void insertStRes(StResDto stResDto) {
+ StResB stResB = new StResB();
+ BeanUtil.copyProperties(stResDto,stResB);
+ Long resId = IdWorker.getId();
+ stResB.setResId(resId);
+ stResB.setStatus(1);
+ Date date = new Date();
+ stResB.setTm(date);
+
+ //判断水库代码是否唯一
+ if (queryByResCode(stResDto.getResCode()) != null){
+ throw new IllegalArgumentException("水库代码必须唯一");
+ }
+
+ //保存水库基本信息
+ stResBAutoDao.save(stResB);
+
+ StResStcdRef stResStcdRef = new StResStcdRef();
+ stResStcdRef.setResId(resId);
+ stResStcdRef.setStcd(stResDto.getSTCD());
+ stResStcdRef.setTm(date);
+
+ //保存测站关系
+ stResStcdRefAutoDao.save(stResStcdRef);
+ }
+
+ /**
+ * 更新水库的基础信息
+ * @param stResDto 水库的基础信息
+ */
+ public void updateStRes(StResDto stResDto) {
+ Long resId = stResDto.getResId();
+ StResB byId = stResBAutoDao.getById(resId);
+ if (byId == null) {
+ throw new IllegalArgumentException("resId:" + resId + "不存在");
+ }
+ //判断水库代码是否唯一
+ if (queryByResCode(stResDto.getResCode()) != null){
+ throw new IllegalArgumentException("水库代码必须唯一");
+ }
+
+ StResB stResB = new StResB();
+ BeanUtil.copyProperties(stResDto,stResB);
+ Date date = new Date();
+ stResB.setTm(date);
+ //更新水库基本信息
+ stResBAutoDao.updateById(stResB);
+
+ if (stResDto.getSTCD() != null){
+ StResStcdRef stResStcdRef = new StResStcdRef();
+ stResStcdRef.setResId(resId);
+ stResStcdRef.setStcd(stResDto.getSTCD());
+ stResStcdRef.setTm(date);
+ //更新水库测站关系
+ StResStcdRef byId1 = stResStcdRefAutoDao.getById(resId);
+ if (byId1 != null) {
+ //先删除之前存在的关系
+ stResStcdRefAutoDao.removeById(resId);
+ }
+ //更新当前水库测站关系
+ stResStcdRefAutoDao.save(stResStcdRef);
+ }
+ }
+
+ /**
+ * 根据水库ID删除水库基本信息
+ * @param resId 水库ID
+ */
+ public void deleteStRes(String resId) {
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ queryWrapper.eq(StResB.COL_RES_ID,resId)
+ .eq(StResB.COL_STATUS,1);
+ StResB byId = stResBAutoDao.getOne(queryWrapper);
+ if (byId == null) {
+ throw new IllegalArgumentException("resId:" + resId + "不存在");
+ }
+ UpdateWrapper updateWrapper = new UpdateWrapper<>();
+ //水库状态更新为禁用
+ updateWrapper.eq(StResB.COL_RES_ID,resId)
+ .set(StResB.COL_STATUS,0);
+ stResBAutoDao.update(updateWrapper);
+ //删除水库测站关系
+ stResStcdRefAutoDao.removeById(resId);
+ }
+
+ /**
+ * 根据水库代码查询水库的基础信息
+ * @param resCode 水库代码
+ * @return 水库的基础信息
+ */
+ public StResB queryByResCode(String resCode) {
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ queryWrapper.eq(StResB.COL_RES_CODE,resCode);
+ return stResBAutoDao.getOne(queryWrapper);
+ }
+
+ /**
+ * 根据水库ID查询水库的基础信息
+ * @param resId 水库ID
+ * @return 水库的基础信息
+ */
+ public StResVo queryByResId(String resId) {
+ StResB stResB = stResBAutoDao.getById(resId);
+ StResStcdRef stResStcdRef = stResStcdRefAutoDao.getById(resId);
+ if (stResB == null) {
+ throw new IllegalArgumentException("resId:" + resId + "不存在");
+ }
+ StResVo stResVo = new StResVo();
+ BeanUtil.copyProperties(stResB,stResVo);
+ stResVo.setSTCD(stResStcdRef.getStcd());
+ return stResVo;
+ }
+
+ /**
+ * 查询水库的基础信息
+ * @return 水库的基础信息
+ */
+ public List queryStRes() {
+ List stResBList = stResBAutoDao
+ .list(new QueryWrapper().eq(StResB.COL_STATUS,1));
+ List stResVoList = new ArrayList<>();
+ stResBList.stream().forEach(stResB -> {
+ StResVo stResVo = new StResVo();
+ BeanUtil.copyProperties(stResB,stResVo);
+ StResStcdRef stResStcdRef = stResStcdRefAutoDao.getById(stResB.getResId());
+ stResVo.setSTCD(stResStcdRef.getStcd());
+ stResVoList.add(stResVo);
+ });
+ return stResVoList;
+ }
+
+ /**
+ * 根据水库名称模糊查询水库的基础信息
+ * @param resName 水库名称
+ * @return 水库基础信息
+ */
+ public List queryLikeResName(String resName) {
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ queryWrapper.like(StResB.COL_RES_NAME,resName)
+ .eq(StResB.COL_STATUS,1);
+ List stResBList = stResBAutoDao.list(queryWrapper);
+ List stResVoList = new ArrayList<>();
+ stResBList.stream().forEach(stResB -> {
+ StResVo stResVo = new StResVo();
+ BeanUtil.copyProperties(stResB,stResVo);
+ StResStcdRef stResStcdRef = stResStcdRefAutoDao.getById(stResB.getResId());
+ stResVo.setSTCD(stResStcdRef.getStcd());
+ stResVoList.add(stResVo);
+ });
+ return stResVoList;
+ }
+
+ /**
+ * 根据水库规模查询水库的基础信息
+ * @param engScal 水库规模
+ * @return 水库的基础信息
+ */
+ public List queryByEngScal(String engScal) {
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ queryWrapper.eq(StResB.COL_ENG_SCAL,engScal)
+ .eq(StResB.COL_STATUS,1);
+ List stResBList = stResBAutoDao.list(queryWrapper);
+ List stResVoList = new ArrayList<>();
+ stResBList.stream().forEach(stResB -> {
+ StResVo stResVo = new StResVo();
+ BeanUtil.copyProperties(stResB,stResVo);
+ StResStcdRef stResStcdRef = stResStcdRefAutoDao.getById(stResB.getResId());
+ stResVo.setSTCD(stResStcdRef.getStcd());
+ stResVoList.add(stResVo);
+ });
+ return stResVoList;
+ }
+
+ /**
+ * 新增河流基础信息
+ * @param stRvDto 河流的基础信息DTO
+ */
+ public void insertStRv(StRvDto stRvDto) {
+ if (queryByResCode(stRvDto.getRvCode()) != null){
+ throw new IllegalArgumentException("河流代码必须唯一");
+ }
+ StRvB stRvB = new StRvB();
+ BeanUtil.copyProperties(stRvDto,stRvB);
+ Long rvId = IdWorker.getId();
+ stRvB.setRvId(rvId);
+ stRvB.setStatus(1);
+ stRvB.setTm(new Date());
+ stRvBAutoDao.save(stRvB);
+ }
+
+ /**
+ * 更新河流的基础信息
+ * @param stRvB 河流的基础信息
+ */
+ public void updateStRv(StRvB stRvB) {
+ Long rvId = stRvB.getRvId();
+ StRvB byId = stRvBAutoDao.getById(rvId);
+ if (byId == null){
+ throw new IllegalArgumentException("河流ID: " + rvId + "不存在");
+ }
+ stRvB.setTm(new Date());
+ stRvBAutoDao.updateById(stRvB);
+ }
+
+ /**
+ * 根据河流ID删除河流信息
+ * @param rvId 河流ID
+ */
+ public void deleteStRv(String rvId) {
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ queryWrapper.eq(StRvB.COL_RV_ID,rvId)
+ .eq(StRvB.COL_STATUS,1);
+ StRvB byId = stRvBAutoDao.getOne(queryWrapper);
+ if (byId == null){
+ throw new IllegalArgumentException("河流ID: " + rvId + "不存在, 或河流ID: " + rvId + "已被禁用");
+ }
+ UpdateWrapper updateWrapper = new UpdateWrapper<>();
+ updateWrapper.eq(StRvB.COL_RV_ID,rvId)
+ .set(StRvB.COL_STATUS,0);
+ stRvBAutoDao.update(updateWrapper);
+ }
+
+ /**
+ * 根据河流代码查询河流的基础信息
+ * @param rvCode 河流代码
+ * @return 河流的基础信息
+ */
+ public StRvB queryByRvCode(String rvCode) {
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ queryWrapper.eq(StRvB.COL_RV_CODE,rvCode)
+ .eq(StRvB.COL_STATUS,1);
+ return stRvBAutoDao.getOne(queryWrapper);
+ }
+
+ /**
+ * 根据河流ID查询河流的基础信息
+ * @param rvId 河流ID
+ * @return 河流的基础信息
+ */
+ public StRvB queryByRvId(String rvId) {
+ StRvB stRvB = stRvBAutoDao.getById(rvId);
+ if (stRvB == null){
+ throw new IllegalArgumentException("河流ID: "+ rvId +"不存在");
+ }
+ return stRvB;
+ }
+
+ /**
+ * 分页查询河流的基础信息
+ * @param pageNum 当前页
+ * @param pageSize 每页显示条数
+ * @return
+ */
+ public Page pageStRv(int pageNum,int pageSize) {
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ queryWrapper.eq(StRvB.COL_STATUS,1);
+ return stRvBAutoDao.page(new Page<>(pageNum,pageSize),queryWrapper);
+ }
+
+ /**
+ * 根据河流名称模糊查询河流信息
+ * @param rvName 河流名称
+ * @param pageNum 当前页
+ * @param pageSize 每页显示条数
+ * @return
+ */
+ public Page queryLikeRvName(String rvName,int pageNum,int pageSize) {
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ queryWrapper.like(StRvB.COL_RV_NAME,rvName)
+ .eq(StRvB.COL_STATUS,1);
+ return stRvBAutoDao.page(new Page<>(pageNum,pageSize),queryWrapper);
+ }
+
+ /**
+ * 新增大坝基础信息
+ * @param stDamDto 大坝基础信息DTO
+ */
+ public void insertStDam(StDamDto stDamDto) {
+ if (queryByDamCode(stDamDto.getDamCode()) != null){
+ throw new IllegalArgumentException("大坝代码必须唯一");
+ }
+ StDamB stDamB = new StDamB();
+ BeanUtil.copyProperties(stDamDto,stDamB);
+ Long damId = IdWorker.getId();
+ stDamB.setDamId(damId);
+ stDamB.setStatus(1);
+ stDamB.setTm(new Date());
+ stDamBAutoDao.save(stDamB);
+ }
+
+ /**
+ * 更新大坝基础信息
+ * @param stDamB 大坝基础信息
+ */
+ public void updateStDam(StDamB stDamB) {
+ Long damId = stDamB.getDamId();
+ StDamB byId = stDamBAutoDao.getById(damId);
+ if (byId == null){
+ throw new IllegalArgumentException("大坝ID: " + damId + "不存在");
+ }
+ stDamB.setTm(new Date());
+ stDamBAutoDao.updateById(stDamB);
+ }
+
+ /**
+ * 删除大坝基础信息
+ * @param damId 大坝ID
+ */
+ public void deleteStDam(String damId) {
+ StDamB byId = stDamBAutoDao.getById(damId);
+ if (byId == null){
+ throw new IllegalArgumentException("大坝ID: " + damId + "不存在");
+ }
+ UpdateWrapper updateWrapper = new UpdateWrapper<>();
+ updateWrapper.eq(StDamB.COL_DAM_ID,damId)
+ .set(StDamB.COL_STATUS,0);
+ stDamBAutoDao.update(updateWrapper);
+ }
+
+ /**
+ * 根据大坝ID查询大坝信息
+ * @param damId 大坝ID
+ * @return 大坝基础信息
+ */
+ public StDamB queryByDamId(String damId) {
+ StDamB stDamB = stDamBAutoDao.getById(damId);
+ if (stDamB == null){
+ throw new IllegalArgumentException("大坝ID: " + damId+ "不存在");
+ }
+ return stDamB;
+ }
+
+ /**
+ * 根据大坝代码查询大坝信息
+ * @param damCode 大坝代码
+ * @return 大坝基础信息
+ */
+ public StDamB queryByDamCode(String damCode) {
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ queryWrapper.eq(StDamB.COL_DAM_CODE,damCode)
+ .eq(StDamB.COL_STATUS,1);
+ return stDamBAutoDao.getOne(queryWrapper);
+ }
+
+ /**
+ * 分页查询大坝基础信息
+ * @param pageNum 当前页
+ * @param pageSize 每页显示条数
+ * @return
+ */
+ public Page pageStDam(int pageNum, int pageSize) {
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ queryWrapper.eq(StDamB.COL_STATUS,1);
+ return stDamBAutoDao.page(new Page<>(pageNum,pageSize),queryWrapper);
+ }
+
+ /**
+ * 根据大坝名称模糊查询大坝基础信息
+ * @param damName 大坝名称
+ * @param pageNum 当前页
+ * @param pageSize 每页显示条数
+ * @return
+ */
+ public Page queryLikeDamName(String damName, int pageNum, int pageSize) {
+ QueryWrapper queryWrapper = new QueryWrapper<>();
+ queryWrapper.like(StDamB.COL_DAM_NAME,damName)
+ .eq(StDamB.COL_STATUS,1);
+ return stDamBAutoDao.page(new Page<>(pageNum,pageSize),queryWrapper);
+ }
+}
diff --git a/src/main/java/com/gunshi/project/xyt/service/WaterQualityService.java b/src/main/java/com/gunshi/project/xyt/service/WaterQualityService.java
new file mode 100644
index 0000000..9934eb3
--- /dev/null
+++ b/src/main/java/com/gunshi/project/xyt/service/WaterQualityService.java
@@ -0,0 +1,34 @@
+package com.gunshi.project.xyt.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.gunshi.project.xyt.model.StWaterQualityR;
+import com.gunshi.project.xyt.so.WaterQualityPageSo;
+import jakarta.servlet.http.HttpServletResponse;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.IOException;
+import java.util.List;
+
+/**
+ * Description:
+ * Created by xusan on 2024/1/23
+ *
+ * @author xusan
+ * @version 1.0
+ */
+public interface WaterQualityService {
+
+ Page page(WaterQualityPageSo waterQualityPageSo);
+
+ void export(WaterQualityPageSo waterQualityPageSo, HttpServletResponse response);
+
+ String importExcel(MultipartFile file) throws IOException;
+
+ String add(StWaterQualityR stWaterQualityR);
+
+ String addList(List stWaterQualityRList);
+
+ String update(StWaterQualityR StWaterQualityR);
+
+ String delete(String id);
+}
diff --git a/src/main/java/com/gunshi/project/xyt/service/impl/WaterQualityServiceImpl.java b/src/main/java/com/gunshi/project/xyt/service/impl/WaterQualityServiceImpl.java
new file mode 100644
index 0000000..466ab9d
--- /dev/null
+++ b/src/main/java/com/gunshi/project/xyt/service/impl/WaterQualityServiceImpl.java
@@ -0,0 +1,173 @@
+package com.gunshi.project.xyt.service.impl;
+
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.read.listener.PageReadListener;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.gunshi.core.dateformat.DateFormatString;
+import com.gunshi.db.dao.BaseOrderDao;
+import com.gunshi.project.xyt.mapper.WaterQualityMapper;
+import com.gunshi.project.xyt.model.StWaterQualityR;
+import com.gunshi.project.xyt.service.WaterQualityService;
+import com.gunshi.project.xyt.so.WaterQualityPageSo;
+import jakarta.servlet.http.HttpServletResponse;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.time.DateFormatUtils;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.IOException;
+import java.net.URLEncoder;
+import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Description:
+ * Created by xusan on 2023/1/23.
+ *
+ * @author xusan
+ * @version 1.0
+ */
+@EqualsAndHashCode(callSuper = true)
+@Service
+@Data
+@Transactional(rollbackFor = Exception.class)
+@Slf4j
+public class WaterQualityServiceImpl extends BaseOrderDao implements WaterQualityService {
+
+ /**
+ * 水质列表分页查询
+ *
+ * @param so 水质列表分页查询
+ */
+ @Override
+ public Page page(WaterQualityPageSo so) {
+ LambdaQueryWrapper query = Wrappers.lambdaQuery();
+
+
+ if (so.getStm() != null) {
+ query.ge(StWaterQualityR::getSpt, so.getStm());
+ }
+ if (so.getEtm() != null) {
+ query.le(StWaterQualityR::getSpt, so.getEtm());
+ }
+
+ return super.page(so.toPage(), query);
+ }
+
+ /**
+ * 水质列表分页导出
+ *
+ * @param so 水质列表分页
+ */
+ @Override
+ public void export(WaterQualityPageSo so , HttpServletResponse response) {
+
+ // 获取基础数据
+ Page page = page(so);
+
+ // 生成文件名
+ String fileName = "水质统计表 "
+ + DateFormatUtils.format(so.getStm(), DateFormatString.YYYY_MM_DD_HH_MM_SS)
+ + "至"
+ + DateFormatUtils.format(so.getEtm(), DateFormatString.YYYY_MM_DD_HH_MM_SS)
+ + ".xlsx";
+
+// String tempPath = System.getProperty("java.io.tmpdir") + IdUtil.fastSimpleUUID() + ".xlsx";
+// String tempPath = System.getProperty("java.io.tmpdir") + fileName + ".xlsx";
+// File file = new File(tempPath);
+//
+// // 指定模板文件
+// ExcelWriter excelWriter = EasyExcel.write(file, StWaterQualityR.class).build();
+//
+// WriteSheet writeSheet = EasyExcel.writerSheet(1, "水质").build();
+// // 分页去数据库查询数据 这里可以去数据库查询每一页的数据
+// List data = page.getRecords();
+// excelWriter.write(data, writeSheet);
+//
+// // 千万别忘记finish 会帮忙关闭流
+// excelWriter.finish();
+
+
+
+ response.setContentType("application/vnd.ms-excel");
+ response.setCharacterEncoding("utf-8");
+
+ // 这里URLEncoder.encode可以防止中文乱码
+ response.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode(fileName, StandardCharsets.UTF_8));
+
+ // 数据输出
+ try {
+ EasyExcel.write(response.getOutputStream(), StWaterQualityR.class).sheet("水质").doWrite(page.getRecords());
+ } catch (IOException e) {
+ log.error("水质文件下载失败, " + e.getMessage(),e);
+ throw new RuntimeException(e);
+ }
+
+ }
+
+ @Override
+ public String importExcel(MultipartFile file) throws IOException {
+
+ // 创建一个用于存储数据的List
+ List data = new ArrayList<>();
+
+ EasyExcel.read(file.getInputStream(), StWaterQualityR.class, new PageReadListener(data::addAll)).sheet().doRead();
+
+ for (StWaterQualityR o : data) {
+ o.setId(null);
+ }
+
+ return this.addList(data);
+ }
+
+
+ /**
+ * 新增水质
+ *
+ * @param o 水质
+ */
+ @Override
+ public String add(StWaterQualityR o) {
+ return this.save(o) ? "成功":"失败";
+ }
+
+ @Override
+ public String addList(List stWaterQualityRList) {
+ try {
+ for (StWaterQualityR o : stWaterQualityRList) {
+ this.add(o);
+ }
+ }catch (Exception e) {
+ return "失败";
+ }
+ return "成功";
+
+// return this.saveBatch(stWaterQualityRList) ? "成功":"失败";
+ }
+
+ /**
+ * 修改水质
+ *
+ * @param o 水质
+ */
+ @Override
+ public String update(StWaterQualityR o) {
+ return this.updateById(o) ? "成功":"失败";
+ }
+
+ /**
+ * 删除水质
+ *
+ * @param id id
+ */
+ @Override
+ public String delete(String id) {
+ return this.removeById(id) ? "成功":"失败";
+ }
+}
diff --git a/src/main/java/com/gunshi/project/xyt/so/WaterQualityPageSo.java b/src/main/java/com/gunshi/project/xyt/so/WaterQualityPageSo.java
new file mode 100644
index 0000000..10d1a76
--- /dev/null
+++ b/src/main/java/com/gunshi/project/xyt/so/WaterQualityPageSo.java
@@ -0,0 +1,36 @@
+package com.gunshi.project.xyt.so;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.gunshi.core.dateformat.DateFormatString;
+import com.gunshi.db.dto.PageSo;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
+
+/**
+ * Description:
+ * Created by XuSan on 2024/1/23.
+ *
+ * @author XuSan
+ * @version 1.0
+ */
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class WaterQualityPageSo extends PageSo {
+
+ @Schema(description = "查询开始时间", pattern = DateFormatString.YYYY_MM_DD_HH_MM_SS,
+ example = DateFormatString.YYYY_MM_DD_HH_MM_SS_EXAMPLE)
+ @JsonFormat(pattern = DateFormatString.YYYY_MM_DD_HH_MM_SS, timezone = "GMT+8")
+ @DateTimeFormat(pattern = DateFormatString.YYYY_MM_DD_HH_MM_SS)
+ private Date stm;
+
+ @Schema(description = "查询结束时间", pattern = DateFormatString.YYYY_MM_DD_HH_MM_SS,
+ example = DateFormatString.YYYY_MM_DD_HH_MM_SS_EXAMPLE)
+ @JsonFormat(pattern = DateFormatString.YYYY_MM_DD_HH_MM_SS, timezone = "GMT+8")
+ @DateTimeFormat(pattern = DateFormatString.YYYY_MM_DD_HH_MM_SS)
+ private Date etm;
+
+}
diff --git a/src/main/resources/mapper/WaterQualityMapper.xml b/src/main/resources/mapper/WaterQualityMapper.xml
new file mode 100644
index 0000000..446a997
--- /dev/null
+++ b/src/main/resources/mapper/WaterQualityMapper.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/resources/sql/HYD_RI_WQAMD_W.sql b/src/main/resources/sql/HYD_RI_WQAMD_W.sql
index 947c58f..d6e7896 100644
--- a/src/main/resources/sql/HYD_RI_WQAMD_W.sql
+++ b/src/main/resources/sql/HYD_RI_WQAMD_W.sql
@@ -1,40 +1,76 @@
-CREATE TABLE [xyt].[HYD_RI_WQAMD_W]
-(
-[STCD] CHAR(14) NOT NULL,
-[SPT] DATETIME2(6) NOT NULL,
-[WIMP] DECIMAL(4,2),
-[PH] DECIMAL(4,2),
-[COND] DECIMAL(6,0),
-[TURB] DECIMAL(3,0),
-[DOX] DECIMAL(4,2),
-[CODMN] DECIMAL(6,1),
-[CODCR] DECIMAL(7,1),
-[TN] DECIMAL(6,3),
-[NH3N] DECIMAL(6,3),
-[NO2] DECIMAL(5,3),
-[NO3] DECIMAL(5,3),
-[TP] DECIMAL(8,3),
-[TOC] DECIMAL(4,1),
-[VLPH] DECIMAL(10,6),
-[CHLA] DECIMAL(6,4),
-[F] DECIMAL(5,2),
-[ARS] DECIMAL(8,6),
-[HG] DECIMAL(9,7),
-[CR6] DECIMAL(5,3),
-[CU] DECIMAL(7,5),
-[PB] DECIMAL(7,5),
-[CD] DECIMAL(7,5),
-[ZN] DECIMAL(6,4),
-[SB] DECIMAL(7,5),
-[HUMIDITY] DECIMAL(4,2),
-[ROOMTMP] DECIMAL(4,2),
-[ID] INT IDENTITY(1, 1) NOT NULL,
-CONSTRAINT [PK_HYD_RI_WQAMD_W] PRIMARY KEY CLUSTERED ([ID]),
-CONSTRAINT [UQ_HYD_RI_WQAMD_W_ID] UNIQUE ([ID]),
-CONSTRAINT [UQ_HYD_RI_WQAMD_W_STCD_SPT] UNIQUE ([STCD], [SPT])
-) ON [MAIN] WITH (DATA_COMPRESSION = CLUSTERED COLUMNSTORE);
+# CREATE TABLE [xyt].[HYD_RI_WQAMD_W]
+# (
+# [STCD] CHAR(14) NOT NULL,
+# [SPT] DATETIME2(6) NOT NULL,
+# [WIMP] DECIMAL(4,2),
+# [PH] DECIMAL(4,2),
+# [COND] DECIMAL(6,0),
+# [TURB] DECIMAL(3,0),
+# [DOX] DECIMAL(4,2),
+# [CODMN] DECIMAL(6,1),
+# [CODCR] DECIMAL(7,1),
+# [TN] DECIMAL(6,3),
+# [NH3N] DECIMAL(6,3),
+# [NO2] DECIMAL(5,3),
+# [NO3] DECIMAL(5,3),
+# [TP] DECIMAL(8,3),
+# [TOC] DECIMAL(4,1),
+# [VLPH] DECIMAL(10,6),
+# [CHLA] DECIMAL(6,4),
+# [F] DECIMAL(5,2),
+# [ARS] DECIMAL(8,6),
+# [HG] DECIMAL(9,7),
+# [CR6] DECIMAL(5,3),
+# [CU] DECIMAL(7,5),
+# [PB] DECIMAL(7,5),
+# [CD] DECIMAL(7,5),
+# [ZN] DECIMAL(6,4),
+# [SB] DECIMAL(7,5),
+# [HUMIDITY] DECIMAL(4,2),
+# [ROOMTMP] DECIMAL(4,2),
+# [ID] INT IDENTITY(1, 1) NOT NULL,
+# CONSTRAINT [PK_HYD_RI_WQAMD_W] PRIMARY KEY CLUSTERED ([ID]),
+# CONSTRAINT [UQ_HYD_RI_WQAMD_W_ID] UNIQUE ([ID]),
+# CONSTRAINT [UQ_HYD_RI_WQAMD_W_STCD_SPT] UNIQUE ([STCD], [SPT])
+# ) ON [MAIN] WITH (DATA_COMPRESSION = CLUSTERED COLUMNSTORE);
-EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'水质自动监测数据' , @level0type=N'SCHEMA',@level0name=N'xyt', @level1type=N'TABLE',@level1name=N'HYD_RI_WQAMD_W';
+CREATE TABLE [HYD_RI_WQAMD_W]
+(
+ [STCD] VARCHAR(14) NOT NULL,
+ [SPT] DATETIME2(6) NOT NULL,
+ [WIMP] DECIMAL(4,2),
+ [PH] DECIMAL(4,2),
+ [COND] DECIMAL(6,0),
+ [TURB] DECIMAL(3,0),
+ [DOX] DECIMAL(4,2),
+ [CODMN] DECIMAL(6,1),
+ [CODCR] DECIMAL(7,1),
+ [TN] DECIMAL(6,3),
+ [NH3N] DECIMAL(6,3),
+ [NO2] DECIMAL(5,3),
+ [NO3] DECIMAL(5,3),
+ [TP] DECIMAL(8,3),
+ [TOC] DECIMAL(4,1),
+ [VLPH] DECIMAL(10,6),
+ [CHLA] DECIMAL(6,4),
+ [F] DECIMAL(5,2),
+ [ARS] DECIMAL(8,6),
+ [HG] DECIMAL(9,7),
+ [CR6] DECIMAL(5,3),
+ [CU] DECIMAL(7,5),
+ [PB] DECIMAL(7,5),
+ [CD] DECIMAL(7,5),
+ [ZN] DECIMAL(6,4),
+ [SB] DECIMAL(7,5),
+ [HUMIDITY] DECIMAL(4,2),
+ [ROOMTMP] DECIMAL(4,2),
+ [ID] INT IDENTITY(1, 1) NOT NULL,
+ CONSTRAINT [PK_HYD_RI_WQAMD_W] PRIMARY KEY CLUSTERED ([ID]),
+ CONSTRAINT [UQ_HYD_RI_WQAMD_W_ID] UNIQUE ([ID]),
+ CONSTRAINT [UQ_HYD_RI_WQAMD_W_STCD_SPT] UNIQUE ([STCD], [SPT])
+ )
+
+ EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'水质自动监测数据' , @level0type=N'SCHEMA',@level0name=N'xyt', @level1type=N'TABLE',@level1name=N'HYD_RI_WQAMD_W';
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'砷' , @level0type=N'SCHEMA',@level0name=N'xyt', @level1type=N'TABLE',@level1name=N'HYD_RI_WQAMD_W', @level2type=N'COLUMN',@level2name=N'ARS';
@@ -93,3 +129,6 @@ EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'水温' , @lev
EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'锌' , @level0type=N'SCHEMA',@level0name=N'xyt', @level1type=N'TABLE',@level1name=N'HYD_RI_WQAMD_W', @level2type=N'COLUMN',@level2name=N'ZN';
CREATE INDEX [IX_HYD_RI_WQAMD_W_STCD_SPT] ON [xyt].[HYD_RI_WQAMD_W] ([STCD] ASC, [SPT] ASC) ON [MAIN] WITH (DATA_COMPRESSION = CLUSTERED COLUMNSTORE);
+
+
+SET IDENTITY_INSERT ST_WATER_QUALITY_R ON;
\ No newline at end of file