LAPTOP-JI2IUVG1\26646 3 недель назад
Родитель
Сommit
5eb4730ab3
21 измененных файлов с 1178 добавлено и 1 удалено
  1. 101 0
      pipe-network-service/zksy-admin/src/main/java/com/zksy/web/controller/drainage/DrainagePartitionController.java
  2. 101 0
      pipe-network-service/zksy-admin/src/main/java/com/zksy/web/controller/drainage/EngineeringFacilityController.java
  3. 101 0
      pipe-network-service/zksy-admin/src/main/java/com/zksy/web/controller/drainage/PipeNetworkInfoController.java
  4. 100 0
      pipe-network-service/zksy-admin/src/main/java/com/zksy/web/controller/drainage/WaterloggingPointController.java
  5. 1 1
      pipe-network-service/zksy-framework/src/main/java/com/zksy/framework/config/ApplicationConfig.java
  6. 58 0
      pipe-network-service/zksy-system/src/main/java/com/zksy/drainage/domain/DrainagePartition.java
  7. 52 0
      pipe-network-service/zksy-system/src/main/java/com/zksy/drainage/domain/EngineeringFacility.java
  8. 52 0
      pipe-network-service/zksy-system/src/main/java/com/zksy/drainage/domain/PipeNetworkInfo.java
  9. 49 0
      pipe-network-service/zksy-system/src/main/java/com/zksy/drainage/domain/WaterloggingPoint.java
  10. 9 0
      pipe-network-service/zksy-system/src/main/java/com/zksy/drainage/mapper/DrainagePartitionMapper.java
  11. 9 0
      pipe-network-service/zksy-system/src/main/java/com/zksy/drainage/mapper/EngineeringFacilityMapper.java
  12. 9 0
      pipe-network-service/zksy-system/src/main/java/com/zksy/drainage/mapper/PipeNetworkInfoMapper.java
  13. 9 0
      pipe-network-service/zksy-system/src/main/java/com/zksy/drainage/mapper/WaterloggingPointMapper.java
  14. 39 0
      pipe-network-service/zksy-system/src/main/java/com/zksy/drainage/service/DrainagePartitionService.java
  15. 39 0
      pipe-network-service/zksy-system/src/main/java/com/zksy/drainage/service/EngineeringFacilityService.java
  16. 39 0
      pipe-network-service/zksy-system/src/main/java/com/zksy/drainage/service/PipeNetworkInfoService.java
  17. 38 0
      pipe-network-service/zksy-system/src/main/java/com/zksy/drainage/service/WaterloggingPointService.java
  18. 104 0
      pipe-network-service/zksy-system/src/main/java/com/zksy/drainage/service/impl/DrainagePartitionServiceImpl.java
  19. 94 0
      pipe-network-service/zksy-system/src/main/java/com/zksy/drainage/service/impl/EngineeringFacilityServiceImpl.java
  20. 94 0
      pipe-network-service/zksy-system/src/main/java/com/zksy/drainage/service/impl/PipeNetworkInfoServiceImpl.java
  21. 80 0
      pipe-network-service/zksy-system/src/main/java/com/zksy/drainage/service/impl/WaterloggingPointServiceImpl.java

+ 101 - 0
pipe-network-service/zksy-admin/src/main/java/com/zksy/web/controller/drainage/DrainagePartitionController.java

@@ -0,0 +1,101 @@
+package com.zksy.web.controller.drainage;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.zksy.common.annotation.Anonymous;
+import com.zksy.common.annotation.Log;
+import com.zksy.common.core.domain.AjaxResult;
+import com.zksy.common.enums.BusinessType;
+import com.zksy.drainage.domain.DrainagePartition;
+import com.zksy.drainage.service.DrainagePartitionService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 排水分区基础数据管理
+ */
+@Slf4j
+@RestController
+@RequestMapping("/api/drainage/partition")
+@Api(tags = "排水分区基础数据管理")
+public class DrainagePartitionController {
+
+    @Autowired
+    private DrainagePartitionService service;
+
+    @Anonymous
+    @GetMapping("/page")
+    @ApiOperation(value = "排水分区分页查询")
+    public Page<DrainagePartition> page(
+            @ApiParam("页码") @RequestParam(defaultValue = "1") long pageNum,
+            @ApiParam("每页数量") @RequestParam(defaultValue = "10") long pageSize,
+            @ApiParam("监测点名称") @RequestParam(required = false) String name,
+            @ApiParam("行政区域") @RequestParam(required = false) String district,
+            @ApiParam("分区类型") @RequestParam(required = false) String partitionType) {
+        return service.findByPage(pageNum, pageSize, name, district, partitionType);
+    }
+
+    @Anonymous
+    @GetMapping("/{id}")
+    @ApiOperation(value = "查询排水分区详情")
+    public AjaxResult getById(@PathVariable String id) {
+        DrainagePartition entity = service.getById(id);
+        if (entity == null) {
+            return AjaxResult.error("该排水分区不存在");
+        }
+        return AjaxResult.success(entity);
+    }
+
+    @Anonymous
+    @GetMapping("/list")
+    @ApiOperation(value = "查询所有排水分区")
+    public AjaxResult list() {
+        return AjaxResult.success(service.list());
+    }
+
+    @Anonymous
+    @PostMapping
+    @ApiOperation(value = "新增排水分区")
+    @Log(title = "新增排水分区", businessType = BusinessType.INSERT)
+    @Transactional
+    public AjaxResult save(@RequestBody DrainagePartition entity) {
+        boolean saved = service.saveWithCheck(entity);
+        return saved ? AjaxResult.success("新增成功") : AjaxResult.error("新增失败");
+    }
+
+    @Anonymous
+    @PutMapping
+    @ApiOperation(value = "修改排水分区")
+    @Log(title = "修改排水分区", businessType = BusinessType.UPDATE)
+    @Transactional
+    public AjaxResult update(@RequestBody DrainagePartition entity) {
+        boolean updated = service.updateWithCheck(entity);
+        return updated ? AjaxResult.success("修改成功") : AjaxResult.error("修改失败");
+    }
+
+    @Anonymous
+    @DeleteMapping("/{id}")
+    @ApiOperation(value = "删除排水分区")
+    @Log(title = "删除排水分区", businessType = BusinessType.DELETE)
+    @Transactional
+    public AjaxResult deleteById(@PathVariable String id) {
+        boolean deleted = service.removeWithCheck(id);
+        return deleted ? AjaxResult.success("删除成功") : AjaxResult.error("删除失败");
+    }
+
+    @Anonymous
+    @DeleteMapping("/batch")
+    @ApiOperation(value = "批量删除排水分区")
+    @Log(title = "批量删除排水分区", businessType = BusinessType.DELETE)
+    @Transactional
+    public AjaxResult deleteBatch(@RequestBody List<String> ids) {
+        boolean deleted = service.removeBatchWithCheck(ids);
+        return deleted ? AjaxResult.success("批量删除成功") : AjaxResult.error("批量删除失败");
+    }
+}

+ 101 - 0
pipe-network-service/zksy-admin/src/main/java/com/zksy/web/controller/drainage/EngineeringFacilityController.java

@@ -0,0 +1,101 @@
+package com.zksy.web.controller.drainage;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.zksy.common.annotation.Anonymous;
+import com.zksy.common.annotation.Log;
+import com.zksy.common.core.domain.AjaxResult;
+import com.zksy.common.enums.BusinessType;
+import com.zksy.drainage.domain.EngineeringFacility;
+import com.zksy.drainage.service.EngineeringFacilityService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 工程设施基础数据管理
+ */
+@Slf4j
+@RestController
+@RequestMapping("/api/drainage/facility")
+@Api(tags = "工程设施基础数据管理")
+public class EngineeringFacilityController {
+
+    @Autowired
+    private EngineeringFacilityService service;
+
+    @Anonymous
+    @GetMapping("/page")
+    @ApiOperation(value = "工程设施分页查询")
+    public Page<EngineeringFacility> page(
+            @ApiParam("页码") @RequestParam(defaultValue = "1") long pageNum,
+            @ApiParam("每页数量") @RequestParam(defaultValue = "10") long pageSize,
+            @ApiParam("设施名称") @RequestParam(required = false) String name,
+            @ApiParam("行政区域") @RequestParam(required = false) String area,
+            @ApiParam("设施类型") @RequestParam(required = false) String facilityType) {
+        return service.findByPage(pageNum, pageSize, name, area, facilityType);
+    }
+
+    @Anonymous
+    @GetMapping("/{id}")
+    @ApiOperation(value = "查询工程设施详情")
+    public AjaxResult getById(@PathVariable String id) {
+        EngineeringFacility entity = service.getById(id);
+        if (entity == null) {
+            return AjaxResult.error("该工程设施不存在");
+        }
+        return AjaxResult.success(entity);
+    }
+
+    @Anonymous
+    @GetMapping("/list")
+    @ApiOperation(value = "查询所有工程设施")
+    public AjaxResult list() {
+        return AjaxResult.success(service.list());
+    }
+
+    @Anonymous
+    @PostMapping
+    @ApiOperation(value = "新增工程设施")
+    @Log(title = "新增工程设施", businessType = BusinessType.INSERT)
+    @Transactional
+    public AjaxResult save(@RequestBody EngineeringFacility entity) {
+        boolean saved = service.saveEntity(entity);
+        return saved ? AjaxResult.success("新增成功") : AjaxResult.error("新增失败");
+    }
+
+    @Anonymous
+    @PutMapping
+    @ApiOperation(value = "修改工程设施")
+    @Log(title = "修改工程设施", businessType = BusinessType.UPDATE)
+    @Transactional
+    public AjaxResult update(@RequestBody EngineeringFacility entity) {
+        boolean updated = service.updateEntity(entity);
+        return updated ? AjaxResult.success("修改成功") : AjaxResult.error("修改失败");
+    }
+
+    @Anonymous
+    @DeleteMapping("/{id}")
+    @ApiOperation(value = "删除工程设施")
+    @Log(title = "删除工程设施", businessType = BusinessType.DELETE)
+    @Transactional
+    public AjaxResult deleteById(@PathVariable String id) {
+        boolean deleted = service.removeEntity(id);
+        return deleted ? AjaxResult.success("删除成功") : AjaxResult.error("删除失败");
+    }
+
+    @Anonymous
+    @DeleteMapping("/batch")
+    @ApiOperation(value = "批量删除工程设施")
+    @Log(title = "批量删除工程设施", businessType = BusinessType.DELETE)
+    @Transactional
+    public AjaxResult deleteBatch(@RequestBody List<String> ids) {
+        boolean deleted = service.removeBatchEntity(ids);
+        return deleted ? AjaxResult.success("批量删除成功") : AjaxResult.error("批量删除失败");
+    }
+}

+ 101 - 0
pipe-network-service/zksy-admin/src/main/java/com/zksy/web/controller/drainage/PipeNetworkInfoController.java

@@ -0,0 +1,101 @@
+package com.zksy.web.controller.drainage;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.zksy.common.annotation.Anonymous;
+import com.zksy.common.annotation.Log;
+import com.zksy.common.core.domain.AjaxResult;
+import com.zksy.common.enums.BusinessType;
+import com.zksy.drainage.domain.PipeNetworkInfo;
+import com.zksy.drainage.service.PipeNetworkInfoService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 排水管网基础数据管理
+ */
+@Slf4j
+@RestController
+@RequestMapping("/api/drainage/pipeNetwork")
+@Api(tags = "排水管网基础数据管理")
+public class PipeNetworkInfoController {
+
+    @Autowired
+    private PipeNetworkInfoService service;
+
+    @Anonymous
+    @GetMapping("/page")
+    @ApiOperation(value = "排水管网分页查询")
+    public Page<PipeNetworkInfo> page(
+            @ApiParam("页码") @RequestParam(defaultValue = "1") long pageNum,
+            @ApiParam("每页数量") @RequestParam(defaultValue = "10") long pageSize,
+            @ApiParam("管网名称") @RequestParam(required = false) String name,
+            @ApiParam("行政区域") @RequestParam(required = false) String area,
+            @ApiParam("管网类型") @RequestParam(required = false) String networkType) {
+        return service.findByPage(pageNum, pageSize, name, area, networkType);
+    }
+
+    @Anonymous
+    @GetMapping("/{id}")
+    @ApiOperation(value = "查询排水管网详情")
+    public AjaxResult getById(@PathVariable String id) {
+        PipeNetworkInfo entity = service.getById(id);
+        if (entity == null) {
+            return AjaxResult.error("该排水管网不存在");
+        }
+        return AjaxResult.success(entity);
+    }
+
+    @Anonymous
+    @GetMapping("/list")
+    @ApiOperation(value = "查询所有排水管网")
+    public AjaxResult list() {
+        return AjaxResult.success(service.list());
+    }
+
+    @Anonymous
+    @PostMapping
+    @ApiOperation(value = "新增排水管网")
+    @Log(title = "新增排水管网", businessType = BusinessType.INSERT)
+    @Transactional
+    public AjaxResult save(@RequestBody PipeNetworkInfo entity) {
+        boolean saved = service.saveEntity(entity);
+        return saved ? AjaxResult.success("新增成功") : AjaxResult.error("新增失败");
+    }
+
+    @Anonymous
+    @PutMapping
+    @ApiOperation(value = "修改排水管网")
+    @Log(title = "修改排水管网", businessType = BusinessType.UPDATE)
+    @Transactional
+    public AjaxResult update(@RequestBody PipeNetworkInfo entity) {
+        boolean updated = service.updateEntity(entity);
+        return updated ? AjaxResult.success("修改成功") : AjaxResult.error("修改失败");
+    }
+
+    @Anonymous
+    @DeleteMapping("/{id}")
+    @ApiOperation(value = "删除排水管网")
+    @Log(title = "删除排水管网", businessType = BusinessType.DELETE)
+    @Transactional
+    public AjaxResult deleteById(@PathVariable String id) {
+        boolean deleted = service.removeEntity(id);
+        return deleted ? AjaxResult.success("删除成功") : AjaxResult.error("删除失败");
+    }
+
+    @Anonymous
+    @DeleteMapping("/batch")
+    @ApiOperation(value = "批量删除排水管网")
+    @Log(title = "批量删除排水管网", businessType = BusinessType.DELETE)
+    @Transactional
+    public AjaxResult deleteBatch(@RequestBody List<String> ids) {
+        boolean deleted = service.removeBatchEntity(ids);
+        return deleted ? AjaxResult.success("批量删除成功") : AjaxResult.error("批量删除失败");
+    }
+}

+ 100 - 0
pipe-network-service/zksy-admin/src/main/java/com/zksy/web/controller/drainage/WaterloggingPointController.java

@@ -0,0 +1,100 @@
+package com.zksy.web.controller.drainage;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.zksy.common.annotation.Anonymous;
+import com.zksy.common.annotation.Log;
+import com.zksy.common.core.domain.AjaxResult;
+import com.zksy.common.enums.BusinessType;
+import com.zksy.drainage.domain.WaterloggingPoint;
+import com.zksy.drainage.service.WaterloggingPointService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiParam;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * 易积水点管理
+ */
+@Slf4j
+@RestController
+@RequestMapping("/api/drainage/waterlogging")
+@Api(tags = "易积水点管理")
+public class WaterloggingPointController {
+
+    @Autowired
+    private WaterloggingPointService service;
+
+    @Anonymous
+    @GetMapping("/page")
+    @ApiOperation(value = "易积水点分页查询")
+    public Page<WaterloggingPoint> page(
+            @ApiParam("页码") @RequestParam(defaultValue = "1") long pageNum,
+            @ApiParam("每页数量") @RequestParam(defaultValue = "10") long pageSize,
+            @ApiParam("监测点名称") @RequestParam(required = false) String name,
+            @ApiParam("行政区域") @RequestParam(required = false) String area) {
+        return service.findByPage(pageNum, pageSize, name, area);
+    }
+
+    @Anonymous
+    @GetMapping("/{id}")
+    @ApiOperation(value = "查询易积水点详情")
+    public AjaxResult getById(@PathVariable String id) {
+        WaterloggingPoint entity = service.getById(id);
+        if (entity == null) {
+            return AjaxResult.error("该易积水点不存在");
+        }
+        return AjaxResult.success(entity);
+    }
+
+    @Anonymous
+    @GetMapping("/list")
+    @ApiOperation(value = "查询所有易积水点")
+    public AjaxResult list() {
+        return AjaxResult.success(service.list());
+    }
+
+    @Anonymous
+    @PostMapping
+    @ApiOperation(value = "新增易积水点")
+    @Log(title = "新增易积水点", businessType = BusinessType.INSERT)
+    @Transactional
+    public AjaxResult save(@RequestBody WaterloggingPoint entity) {
+        boolean saved = service.saveWithCheck(entity);
+        return saved ? AjaxResult.success("新增成功") : AjaxResult.error("新增失败");
+    }
+
+    @Anonymous
+    @PutMapping
+    @ApiOperation(value = "修改易积水点")
+    @Log(title = "修改易积水点", businessType = BusinessType.UPDATE)
+    @Transactional
+    public AjaxResult update(@RequestBody WaterloggingPoint entity) {
+        boolean updated = service.updateWithCheck(entity);
+        return updated ? AjaxResult.success("修改成功") : AjaxResult.error("修改失败");
+    }
+
+    @Anonymous
+    @DeleteMapping("/{id}")
+    @ApiOperation(value = "删除易积水点")
+    @Log(title = "删除易积水点", businessType = BusinessType.DELETE)
+    @Transactional
+    public AjaxResult deleteById(@PathVariable String id) {
+        boolean deleted = service.removeWithCheck(id);
+        return deleted ? AjaxResult.success("删除成功") : AjaxResult.error("删除失败");
+    }
+
+    @Anonymous
+    @DeleteMapping("/batch")
+    @ApiOperation(value = "批量删除易积水点")
+    @Log(title = "批量删除易积水点", businessType = BusinessType.DELETE)
+    @Transactional
+    public AjaxResult deleteBatch(@RequestBody List<String> ids) {
+        boolean deleted = service.removeBatchWithCheck(ids);
+        return deleted ? AjaxResult.success("批量删除成功") : AjaxResult.error("批量删除失败");
+    }
+}

+ 1 - 1
pipe-network-service/zksy-framework/src/main/java/com/zksy/framework/config/ApplicationConfig.java

@@ -17,7 +17,7 @@ import java.util.TimeZone;
 // 表示通过aop框架暴露该代理对象,AopContext能够访问
 @EnableAspectJAutoProxy(exposeProxy = true)
 // 指定要扫描的Mapper类的包的路径
-@MapperScan({"com.zksy.base.**.mapper", "com.zksy.system.**.mapper", "com.zksy.quartz.**.mapper", "com.zksy.generator.**.mapper"})
+@MapperScan({"com.zksy.base.**.mapper", "com.zksy.system.**.mapper", "com.zksy.quartz.**.mapper", "com.zksy.generator.**.mapper", "com.zksy.drainage.**.mapper"})
 public class ApplicationConfig
 {
     /**

+ 58 - 0
pipe-network-service/zksy-system/src/main/java/com/zksy/drainage/domain/DrainagePartition.java

@@ -0,0 +1,58 @@
+package com.zksy.drainage.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.math.BigDecimal;
+import java.time.LocalDateTime;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@TableName("psgw_drainage_partition")
+public class DrainagePartition {
+
+    @TableId(value = "id", type = IdType.ASSIGN_UUID)
+    private String id;
+
+    @ApiModelProperty("监测点名称")
+    private String name;
+
+    @ApiModelProperty("行政区域")
+    private String district;
+
+    @ApiModelProperty("分区类型(雨水分区/污水分区)")
+    private String partitionType;
+
+    @ApiModelProperty("数据时间")
+    private String time;
+
+    @ApiModelProperty("排水量")
+    private BigDecimal drainage;
+
+    @ApiModelProperty("积水量")
+    private BigDecimal waterlogging;
+
+    @ApiModelProperty("积水等级")
+    private Integer level;
+
+    @ApiModelProperty("经度")
+    private BigDecimal longitude;
+
+    @ApiModelProperty("纬度")
+    private BigDecimal latitude;
+
+    @ApiModelProperty("创建时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private LocalDateTime createTime;
+
+    @ApiModelProperty("更新时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private LocalDateTime updateTime;
+}

+ 52 - 0
pipe-network-service/zksy-system/src/main/java/com/zksy/drainage/domain/EngineeringFacility.java

@@ -0,0 +1,52 @@
+package com.zksy.drainage.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.time.LocalDateTime;
+
+/**
+ * 工程设施基础数据
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@TableName("psgw_engineering_facility")
+public class EngineeringFacility {
+
+    @TableId(value = "id", type = IdType.ASSIGN_UUID)
+    @ApiModelProperty("主键ID")
+    private String id;
+
+    @ApiModelProperty("监测点名称/设施名称")
+    private String name;
+
+    @ApiModelProperty("行政区域")
+    private String area;
+
+    @ApiModelProperty("设施类型(闸门/调蓄设施/泵站)")
+    private String facilityType;
+
+    @ApiModelProperty("数据时间")
+    private String time;
+
+    @ApiModelProperty("标记数量(自动计算)")
+    private Integer pointCount;
+
+    @ApiModelProperty("坐标数据JSON")
+    private String points;
+
+    @ApiModelProperty("创建时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private LocalDateTime createTime;
+
+    @ApiModelProperty("更新时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private LocalDateTime updateTime;
+}

+ 52 - 0
pipe-network-service/zksy-system/src/main/java/com/zksy/drainage/domain/PipeNetworkInfo.java

@@ -0,0 +1,52 @@
+package com.zksy.drainage.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.time.LocalDateTime;
+
+/**
+ * 排水管网基础数据
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@TableName("psgw_pipe_network_info")
+public class PipeNetworkInfo {
+
+    @TableId(value = "id", type = IdType.ASSIGN_UUID)
+    @ApiModelProperty("主键ID")
+    private String id;
+
+    @ApiModelProperty("监测点名称/管网名称")
+    private String name;
+
+    @ApiModelProperty("行政区域")
+    private String area;
+
+    @ApiModelProperty("管网类型(管线/管点/排口)")
+    private String networkType;
+
+    @ApiModelProperty("数据时间")
+    private String time;
+
+    @ApiModelProperty("标记数量(自动计算)")
+    private Integer pointCount;
+
+    @ApiModelProperty("坐标数据JSON")
+    private String points;
+
+    @ApiModelProperty("创建时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private LocalDateTime createTime;
+
+    @ApiModelProperty("更新时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private LocalDateTime updateTime;
+}

+ 49 - 0
pipe-network-service/zksy-system/src/main/java/com/zksy/drainage/domain/WaterloggingPoint.java

@@ -0,0 +1,49 @@
+package com.zksy.drainage.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.time.LocalDateTime;
+
+/**
+ * 易积水点管理
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@TableName("psgw_waterlogging_point")
+public class WaterloggingPoint {
+
+    @TableId(value = "id", type = IdType.ASSIGN_UUID)
+    @ApiModelProperty("主键ID")
+    private String id;
+
+    @ApiModelProperty("监测点名称")
+    private String name;
+
+    @ApiModelProperty("行政区域")
+    private String area;
+
+    @ApiModelProperty("数据时间")
+    private String time;
+
+    @ApiModelProperty("易积水点数量(自动计算)")
+    private Integer waterloggingCount;
+
+    @ApiModelProperty("易积水点标记坐标JSON")
+    private String waterloggingPoints;
+
+    @ApiModelProperty("创建时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private LocalDateTime createTime;
+
+    @ApiModelProperty("更新时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private LocalDateTime updateTime;
+}

+ 9 - 0
pipe-network-service/zksy-system/src/main/java/com/zksy/drainage/mapper/DrainagePartitionMapper.java

@@ -0,0 +1,9 @@
+package com.zksy.drainage.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zksy.drainage.domain.DrainagePartition;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface DrainagePartitionMapper extends BaseMapper<DrainagePartition> {
+}

+ 9 - 0
pipe-network-service/zksy-system/src/main/java/com/zksy/drainage/mapper/EngineeringFacilityMapper.java

@@ -0,0 +1,9 @@
+package com.zksy.drainage.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zksy.drainage.domain.EngineeringFacility;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface EngineeringFacilityMapper extends BaseMapper<EngineeringFacility> {
+}

+ 9 - 0
pipe-network-service/zksy-system/src/main/java/com/zksy/drainage/mapper/PipeNetworkInfoMapper.java

@@ -0,0 +1,9 @@
+package com.zksy.drainage.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zksy.drainage.domain.PipeNetworkInfo;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface PipeNetworkInfoMapper extends BaseMapper<PipeNetworkInfo> {
+}

+ 9 - 0
pipe-network-service/zksy-system/src/main/java/com/zksy/drainage/mapper/WaterloggingPointMapper.java

@@ -0,0 +1,9 @@
+package com.zksy.drainage.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.zksy.drainage.domain.WaterloggingPoint;
+import org.apache.ibatis.annotations.Mapper;
+
+@Mapper
+public interface WaterloggingPointMapper extends BaseMapper<WaterloggingPoint> {
+}

+ 39 - 0
pipe-network-service/zksy-system/src/main/java/com/zksy/drainage/service/DrainagePartitionService.java

@@ -0,0 +1,39 @@
+package com.zksy.drainage.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zksy.drainage.domain.DrainagePartition;
+
+import java.util.List;
+
+/**
+ * 排水分区基础数据 Service接口
+ */
+public interface DrainagePartitionService extends IService<DrainagePartition> {
+
+    /**
+     * 分页查询
+     */
+    Page<DrainagePartition> findByPage(long pageNum, long pageSize,
+                                       String name, String district, String partitionType);
+
+    /**
+     * 新增(编码唯一性校验)
+     */
+    boolean saveWithCheck(DrainagePartition entity);
+
+    /**
+     * 修改(编码唯一性校验)
+     */
+    boolean updateWithCheck(DrainagePartition entity);
+
+    /**
+     * 删除(存在性校验)
+     */
+    boolean removeWithCheck(String id);
+
+    /**
+     * 批量删除
+     */
+    boolean removeBatchWithCheck(List<String> ids);
+}

+ 39 - 0
pipe-network-service/zksy-system/src/main/java/com/zksy/drainage/service/EngineeringFacilityService.java

@@ -0,0 +1,39 @@
+package com.zksy.drainage.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zksy.drainage.domain.EngineeringFacility;
+
+import java.util.List;
+
+/**
+ * 工程设施基础数据 Service接口
+ */
+public interface EngineeringFacilityService extends IService<EngineeringFacility> {
+
+    /**
+     * 分页查询
+     */
+    Page<EngineeringFacility> findByPage(long pageNum, long pageSize,
+                                         String name, String area, String facilityType);
+
+    /**
+     * 新增
+     */
+    boolean saveEntity(EngineeringFacility entity);
+
+    /**
+     * 修改
+     */
+    boolean updateEntity(EngineeringFacility entity);
+
+    /**
+     * 删除
+     */
+    boolean removeEntity(String id);
+
+    /**
+     * 批量删除
+     */
+    boolean removeBatchEntity(List<String> ids);
+}

+ 39 - 0
pipe-network-service/zksy-system/src/main/java/com/zksy/drainage/service/PipeNetworkInfoService.java

@@ -0,0 +1,39 @@
+package com.zksy.drainage.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zksy.drainage.domain.PipeNetworkInfo;
+
+import java.util.List;
+
+/**
+ * 排水管网基础数据 Service接口
+ */
+public interface PipeNetworkInfoService extends IService<PipeNetworkInfo> {
+
+    /**
+     * 分页查询
+     */
+    Page<PipeNetworkInfo> findByPage(long pageNum, long pageSize,
+                                     String name, String area, String networkType);
+
+    /**
+     * 新增
+     */
+    boolean saveEntity(PipeNetworkInfo entity);
+
+    /**
+     * 修改
+     */
+    boolean updateEntity(PipeNetworkInfo entity);
+
+    /**
+     * 删除
+     */
+    boolean removeEntity(String id);
+
+    /**
+     * 批量删除
+     */
+    boolean removeBatchEntity(List<String> ids);
+}

+ 38 - 0
pipe-network-service/zksy-system/src/main/java/com/zksy/drainage/service/WaterloggingPointService.java

@@ -0,0 +1,38 @@
+package com.zksy.drainage.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zksy.drainage.domain.WaterloggingPoint;
+
+import java.util.List;
+
+/**
+ * 易积水点管理 Service接口
+ */
+public interface WaterloggingPointService extends IService<WaterloggingPoint> {
+
+    /**
+     * 分页查询
+     */
+    Page<WaterloggingPoint> findByPage(long pageNum, long pageSize, String name, String area);
+
+    /**
+     * 新增
+     */
+    boolean saveWithCheck(WaterloggingPoint entity);
+
+    /**
+     * 修改
+     */
+    boolean updateWithCheck(WaterloggingPoint entity);
+
+    /**
+     * 删除
+     */
+    boolean removeWithCheck(String id);
+
+    /**
+     * 批量删除
+     */
+    boolean removeBatchWithCheck(List<String> ids);
+}

+ 104 - 0
pipe-network-service/zksy-system/src/main/java/com/zksy/drainage/service/impl/DrainagePartitionServiceImpl.java

@@ -0,0 +1,104 @@
+package com.zksy.drainage.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zksy.common.exception.ServiceException;
+import com.zksy.drainage.domain.DrainagePartition;
+import com.zksy.drainage.mapper.DrainagePartitionMapper;
+import com.zksy.drainage.service.DrainagePartitionService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 排水分区基础数据 ServiceImpl
+ */
+@Slf4j
+@Service
+public class DrainagePartitionServiceImpl extends ServiceImpl<DrainagePartitionMapper, DrainagePartition>
+        implements DrainagePartitionService {
+
+    @Override
+    public Page<DrainagePartition> findByPage(long pageNum, long pageSize,
+                                              String name, String district, String partitionType) {
+        Page<DrainagePartition> page = new Page<>(pageNum, pageSize);
+        LambdaQueryWrapper<DrainagePartition> wrapper = new LambdaQueryWrapper<>();
+        if (name != null && !name.isEmpty()) {
+            wrapper.like(DrainagePartition::getName, name);
+        }
+        if (district != null && !district.isEmpty()) {
+            wrapper.like(DrainagePartition::getDistrict, district);
+        }
+        if (partitionType != null && !partitionType.isEmpty()) {
+            wrapper.eq(DrainagePartition::getPartitionType, partitionType);
+        }
+        wrapper.orderByDesc(DrainagePartition::getCreateTime);
+        return this.page(page, wrapper);
+    }
+
+    @Override
+    @Transactional
+    public boolean saveWithCheck(DrainagePartition entity) {
+        LambdaQueryWrapper<DrainagePartition> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(DrainagePartition::getName, entity.getName());
+        if (this.count(wrapper) > 0) {
+            throw new ServiceException("监测点名称已存在:" + entity.getName());
+        }
+        return this.save(entity);
+    }
+
+    @Override
+    @Transactional
+    public boolean updateWithCheck(DrainagePartition entity) {
+        String id = entity.getId();
+        if (this.getById(id) == null) {
+            throw new ServiceException("排水分区不存在,无法修改:" + id);
+        }
+        String newName = entity.getName();
+        if (newName != null && !newName.isEmpty()) {
+            LambdaQueryWrapper<DrainagePartition> wrapper = new LambdaQueryWrapper<>();
+            wrapper.eq(DrainagePartition::getName, newName)
+                    .ne(DrainagePartition::getId, id);
+            if (this.count(wrapper) > 0) {
+                throw new ServiceException("监测点名称已被使用:" + newName);
+            }
+        }
+        return this.updateById(entity);
+    }
+
+    @Override
+    @Transactional
+    public boolean removeWithCheck(String id) {
+        if (this.getById(id) == null) {
+            throw new ServiceException("排水分区不存在:" + id);
+        }
+        return this.baseMapper.deleteById(id) > 0;
+    }
+
+    @Override
+    @Transactional
+    public boolean removeBatchWithCheck(List<String> ids) {
+        if (CollectionUtils.isEmpty(ids)) {
+            throw new ServiceException("批量删除失败:ID列表不能为空");
+        }
+        List<DrainagePartition> existing = this.listByIds(ids);
+        if (existing.isEmpty()) {
+            throw new ServiceException("批量删除失败:所有ID均不存在");
+        }
+        List<String> existIds = existing.stream()
+                .map(DrainagePartition::getId)
+                .collect(Collectors.toList());
+        List<String> invalidIds = ids.stream()
+                .filter(id -> !existIds.contains(id))
+                .collect(Collectors.toList());
+        if (!invalidIds.isEmpty()) {
+            log.warn("批量删除中存在无效排水分区ID:{}", invalidIds);
+        }
+        return this.removeByIds(existIds);
+    }
+}

+ 94 - 0
pipe-network-service/zksy-system/src/main/java/com/zksy/drainage/service/impl/EngineeringFacilityServiceImpl.java

@@ -0,0 +1,94 @@
+package com.zksy.drainage.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zksy.common.exception.ServiceException;
+import com.zksy.drainage.domain.EngineeringFacility;
+import com.zksy.drainage.mapper.EngineeringFacilityMapper;
+import com.zksy.drainage.service.EngineeringFacilityService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.time.LocalDateTime;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 工程设施基础数据 ServiceImpl
+ */
+@Slf4j
+@Service
+public class EngineeringFacilityServiceImpl extends ServiceImpl<EngineeringFacilityMapper, EngineeringFacility>
+        implements EngineeringFacilityService {
+
+    @Override
+    public Page<EngineeringFacility> findByPage(long pageNum, long pageSize,
+                                                String name, String area, String facilityType) {
+        Page<EngineeringFacility> page = new Page<>(pageNum, pageSize);
+        LambdaQueryWrapper<EngineeringFacility> wrapper = new LambdaQueryWrapper<>();
+        if (name != null && !name.isEmpty()) {
+            wrapper.like(EngineeringFacility::getName, name);
+        }
+        if (area != null && !area.isEmpty()) {
+            wrapper.like(EngineeringFacility::getArea, area);
+        }
+        if (facilityType != null && !facilityType.isEmpty()) {
+            wrapper.eq(EngineeringFacility::getFacilityType, facilityType);
+        }
+        wrapper.orderByDesc(EngineeringFacility::getCreateTime);
+        return this.page(page, wrapper);
+    }
+
+    @Override
+    @Transactional
+    public boolean saveEntity(EngineeringFacility entity) {
+        entity.setCreateTime(LocalDateTime.now());
+        entity.setUpdateTime(LocalDateTime.now());
+        return this.save(entity);
+    }
+
+    @Override
+    @Transactional
+    public boolean updateEntity(EngineeringFacility entity) {
+        String id = entity.getId();
+        if (this.getById(id) == null) {
+            throw new ServiceException("工程设施不存在,无法修改:" + id);
+        }
+        entity.setUpdateTime(LocalDateTime.now());
+        return this.updateById(entity);
+    }
+
+    @Override
+    @Transactional
+    public boolean removeEntity(String id) {
+        if (this.getById(id) == null) {
+            throw new ServiceException("工程设施不存在:" + id);
+        }
+        return this.baseMapper.deleteById(id) > 0;
+    }
+
+    @Override
+    @Transactional
+    public boolean removeBatchEntity(List<String> ids) {
+        if (CollectionUtils.isEmpty(ids)) {
+            throw new ServiceException("批量删除失败:ID列表不能为空");
+        }
+        List<EngineeringFacility> existing = this.listByIds(ids);
+        if (existing.isEmpty()) {
+            throw new ServiceException("批量删除失败:所有ID均不存在");
+        }
+        List<String> existIds = existing.stream()
+                .map(EngineeringFacility::getId)
+                .collect(Collectors.toList());
+        List<String> invalidIds = ids.stream()
+                .filter(id -> !existIds.contains(id))
+                .collect(Collectors.toList());
+        if (!invalidIds.isEmpty()) {
+            log.warn("批量删除中存在无效工程设施ID:{}", invalidIds);
+        }
+        return this.removeByIds(existIds);
+    }
+}

+ 94 - 0
pipe-network-service/zksy-system/src/main/java/com/zksy/drainage/service/impl/PipeNetworkInfoServiceImpl.java

@@ -0,0 +1,94 @@
+package com.zksy.drainage.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zksy.common.exception.ServiceException;
+import com.zksy.drainage.domain.PipeNetworkInfo;
+import com.zksy.drainage.mapper.PipeNetworkInfoMapper;
+import com.zksy.drainage.service.PipeNetworkInfoService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.time.LocalDateTime;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 排水管网基础数据 ServiceImpl
+ */
+@Slf4j
+@Service
+public class PipeNetworkInfoServiceImpl extends ServiceImpl<PipeNetworkInfoMapper, PipeNetworkInfo>
+        implements PipeNetworkInfoService {
+
+    @Override
+    public Page<PipeNetworkInfo> findByPage(long pageNum, long pageSize,
+                                            String name, String area, String networkType) {
+        Page<PipeNetworkInfo> page = new Page<>(pageNum, pageSize);
+        LambdaQueryWrapper<PipeNetworkInfo> wrapper = new LambdaQueryWrapper<>();
+        if (name != null && !name.isEmpty()) {
+            wrapper.like(PipeNetworkInfo::getName, name);
+        }
+        if (area != null && !area.isEmpty()) {
+            wrapper.like(PipeNetworkInfo::getArea, area);
+        }
+        if (networkType != null && !networkType.isEmpty()) {
+            wrapper.eq(PipeNetworkInfo::getNetworkType, networkType);
+        }
+        wrapper.orderByDesc(PipeNetworkInfo::getCreateTime);
+        return this.page(page, wrapper);
+    }
+
+    @Override
+    @Transactional
+    public boolean saveEntity(PipeNetworkInfo entity) {
+        entity.setCreateTime(LocalDateTime.now());
+        entity.setUpdateTime(LocalDateTime.now());
+        return this.save(entity);
+    }
+
+    @Override
+    @Transactional
+    public boolean updateEntity(PipeNetworkInfo entity) {
+        String id = entity.getId();
+        if (this.getById(id) == null) {
+            throw new ServiceException("排水管网不存在,无法修改:" + id);
+        }
+        entity.setUpdateTime(LocalDateTime.now());
+        return this.updateById(entity);
+    }
+
+    @Override
+    @Transactional
+    public boolean removeEntity(String id) {
+        if (this.getById(id) == null) {
+            throw new ServiceException("排水管网不存在:" + id);
+        }
+        return this.baseMapper.deleteById(id) > 0;
+    }
+
+    @Override
+    @Transactional
+    public boolean removeBatchEntity(List<String> ids) {
+        if (CollectionUtils.isEmpty(ids)) {
+            throw new ServiceException("批量删除失败:ID列表不能为空");
+        }
+        List<PipeNetworkInfo> existing = this.listByIds(ids);
+        if (existing.isEmpty()) {
+            throw new ServiceException("批量删除失败:所有ID均不存在");
+        }
+        List<String> existIds = existing.stream()
+                .map(PipeNetworkInfo::getId)
+                .collect(Collectors.toList());
+        List<String> invalidIds = ids.stream()
+                .filter(id -> !existIds.contains(id))
+                .collect(Collectors.toList());
+        if (!invalidIds.isEmpty()) {
+            log.warn("批量删除中存在无效排水管网ID:{}", invalidIds);
+        }
+        return this.removeByIds(existIds);
+    }
+}

+ 80 - 0
pipe-network-service/zksy-system/src/main/java/com/zksy/drainage/service/impl/WaterloggingPointServiceImpl.java

@@ -0,0 +1,80 @@
+package com.zksy.drainage.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zksy.common.exception.ServiceException;
+import com.zksy.drainage.domain.WaterloggingPoint;
+import com.zksy.drainage.mapper.WaterloggingPointMapper;
+import com.zksy.drainage.service.WaterloggingPointService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 易积水点管理 ServiceImpl
+ */
+@Slf4j
+@Service
+public class WaterloggingPointServiceImpl extends ServiceImpl<WaterloggingPointMapper, WaterloggingPoint>
+        implements WaterloggingPointService {
+
+    @Override
+    public Page<WaterloggingPoint> findByPage(long pageNum, long pageSize, String name, String area) {
+        Page<WaterloggingPoint> page = new Page<>(pageNum, pageSize);
+        LambdaQueryWrapper<WaterloggingPoint> wrapper = new LambdaQueryWrapper<>();
+        if (name != null && !name.isEmpty()) {
+            wrapper.like(WaterloggingPoint::getName, name);
+        }
+        if (area != null && !area.isEmpty()) {
+            wrapper.like(WaterloggingPoint::getArea, area);
+        }
+        wrapper.orderByDesc(WaterloggingPoint::getCreateTime);
+        return this.page(page, wrapper);
+    }
+
+    @Override
+    @Transactional
+    public boolean saveWithCheck(WaterloggingPoint entity) {
+        return this.save(entity);
+    }
+
+    @Override
+    @Transactional
+    public boolean updateWithCheck(WaterloggingPoint entity) {
+        String id = entity.getId();
+        if (this.getById(id) == null) {
+            throw new ServiceException("易积水点不存在,无法修改:" + id);
+        }
+        return this.updateById(entity);
+    }
+
+    @Override
+    @Transactional
+    public boolean removeWithCheck(String id) {
+        if (this.getById(id) == null) {
+            throw new ServiceException("易积水点不存在:" + id);
+        }
+        return this.baseMapper.deleteById(id) > 0;
+    }
+
+    @Override
+    @Transactional
+    public boolean removeBatchWithCheck(List<String> ids) {
+        if (CollectionUtils.isEmpty(ids)) {
+            throw new ServiceException("批量删除失败:ID列表不能为空");
+        }
+        List<WaterloggingPoint> existing = this.listByIds(ids);
+        if (existing.isEmpty()) {
+            throw new ServiceException("批量删除失败:所有ID均不存在");
+        }
+        List<String> existIds = existing.stream()
+                .map(WaterloggingPoint::getId)
+                .collect(Collectors.toList());
+        return this.removeByIds(existIds);
+    }
+}