null 1 неделя назад
Родитель
Сommit
afc1e85cb6
68 измененных файлов с 3271 добавлено и 1 удалено
  1. 72 0
      pipe-network-service/zksy-admin/src/main/java/com/zksy/web/controller/dispatch/DisEventGradeController.java
  2. 65 0
      pipe-network-service/zksy-admin/src/main/java/com/zksy/web/controller/dispatch/DisEventPlanController.java
  3. 81 0
      pipe-network-service/zksy-admin/src/main/java/com/zksy/web/controller/dispatch/DisEventReportController.java
  4. 97 0
      pipe-network-service/zksy-admin/src/main/java/com/zksy/web/controller/dispatch/DisEventTrackController.java
  5. 89 0
      pipe-network-service/zksy-admin/src/main/java/com/zksy/web/controller/dispatch/DisEventTransferController.java
  6. 89 0
      pipe-network-service/zksy-admin/src/main/java/com/zksy/web/controller/dispatch/DisEventUrgeController.java
  7. 73 0
      pipe-network-service/zksy-admin/src/main/java/com/zksy/web/controller/dispatch/DisEventVerifyController.java
  8. 105 0
      pipe-network-service/zksy-admin/src/main/java/com/zksy/web/controller/dispatch/DisPlanApprovalController.java
  9. 72 0
      pipe-network-service/zksy-admin/src/main/java/com/zksy/web/controller/dispatch/DisPlanApprovalStepController.java
  10. 75 0
      pipe-network-service/zksy-admin/src/main/java/com/zksy/web/controller/dispatch/DisPlanCategoryController.java
  11. 1 1
      pipe-network-service/zksy-framework/src/main/java/com/zksy/framework/config/ApplicationConfig.java
  12. 60 0
      pipe-network-service/zksy-system/src/main/java/com/zksy/dispatch/domain/DisEventGrade.java
  13. 78 0
      pipe-network-service/zksy-system/src/main/java/com/zksy/dispatch/domain/DisEventPlan.java
  14. 71 0
      pipe-network-service/zksy-system/src/main/java/com/zksy/dispatch/domain/DisEventReport.java
  15. 68 0
      pipe-network-service/zksy-system/src/main/java/com/zksy/dispatch/domain/DisEventTrack.java
  16. 55 0
      pipe-network-service/zksy-system/src/main/java/com/zksy/dispatch/domain/DisEventTrackLog.java
  17. 80 0
      pipe-network-service/zksy-system/src/main/java/com/zksy/dispatch/domain/DisEventTransfer.java
  18. 52 0
      pipe-network-service/zksy-system/src/main/java/com/zksy/dispatch/domain/DisEventTransferLog.java
  19. 64 0
      pipe-network-service/zksy-system/src/main/java/com/zksy/dispatch/domain/DisEventUrge.java
  20. 49 0
      pipe-network-service/zksy-system/src/main/java/com/zksy/dispatch/domain/DisEventUrgeDetail.java
  21. 80 0
      pipe-network-service/zksy-system/src/main/java/com/zksy/dispatch/domain/DisEventVerify.java
  22. 71 0
      pipe-network-service/zksy-system/src/main/java/com/zksy/dispatch/domain/DisPlanApproval.java
  23. 55 0
      pipe-network-service/zksy-system/src/main/java/com/zksy/dispatch/domain/DisPlanApprovalStep.java
  24. 50 0
      pipe-network-service/zksy-system/src/main/java/com/zksy/dispatch/domain/DisPlanCategory.java
  25. 28 0
      pipe-network-service/zksy-system/src/main/java/com/zksy/dispatch/dto/DisEventGradePageDTO.java
  26. 34 0
      pipe-network-service/zksy-system/src/main/java/com/zksy/dispatch/dto/DisEventPlanPageDTO.java
  27. 28 0
      pipe-network-service/zksy-system/src/main/java/com/zksy/dispatch/dto/DisPlanApprovalPageDTO.java
  28. 25 0
      pipe-network-service/zksy-system/src/main/java/com/zksy/dispatch/dto/DisPlanApprovalStepPageDTO.java
  29. 25 0
      pipe-network-service/zksy-system/src/main/java/com/zksy/dispatch/dto/DisPlanCategoryPageDTO.java
  30. 28 0
      pipe-network-service/zksy-system/src/main/java/com/zksy/dispatch/dto/EventReportDTO.java
  31. 37 0
      pipe-network-service/zksy-system/src/main/java/com/zksy/dispatch/dto/EventReportPageInDTO.java
  32. 40 0
      pipe-network-service/zksy-system/src/main/java/com/zksy/dispatch/dto/EventTrackPageInDTO.java
  33. 40 0
      pipe-network-service/zksy-system/src/main/java/com/zksy/dispatch/dto/EventTransferPageInDTO.java
  34. 37 0
      pipe-network-service/zksy-system/src/main/java/com/zksy/dispatch/dto/EventUrgePageInDTO.java
  35. 40 0
      pipe-network-service/zksy-system/src/main/java/com/zksy/dispatch/dto/EventVerifyPageInDTO.java
  36. 9 0
      pipe-network-service/zksy-system/src/main/java/com/zksy/dispatch/mapper/DisEventGradeMapper.java
  37. 9 0
      pipe-network-service/zksy-system/src/main/java/com/zksy/dispatch/mapper/DisEventPlanMapper.java
  38. 9 0
      pipe-network-service/zksy-system/src/main/java/com/zksy/dispatch/mapper/DisEventReportMapper.java
  39. 9 0
      pipe-network-service/zksy-system/src/main/java/com/zksy/dispatch/mapper/DisEventTrackLogMapper.java
  40. 9 0
      pipe-network-service/zksy-system/src/main/java/com/zksy/dispatch/mapper/DisEventTrackMapper.java
  41. 9 0
      pipe-network-service/zksy-system/src/main/java/com/zksy/dispatch/mapper/DisEventTransferLogMapper.java
  42. 9 0
      pipe-network-service/zksy-system/src/main/java/com/zksy/dispatch/mapper/DisEventTransferMapper.java
  43. 9 0
      pipe-network-service/zksy-system/src/main/java/com/zksy/dispatch/mapper/DisEventUrgeDetailMapper.java
  44. 9 0
      pipe-network-service/zksy-system/src/main/java/com/zksy/dispatch/mapper/DisEventUrgeMapper.java
  45. 9 0
      pipe-network-service/zksy-system/src/main/java/com/zksy/dispatch/mapper/DisEventVerifyMapper.java
  46. 9 0
      pipe-network-service/zksy-system/src/main/java/com/zksy/dispatch/mapper/DisPlanApprovalMapper.java
  47. 9 0
      pipe-network-service/zksy-system/src/main/java/com/zksy/dispatch/mapper/DisPlanApprovalStepMapper.java
  48. 9 0
      pipe-network-service/zksy-system/src/main/java/com/zksy/dispatch/mapper/DisPlanCategoryMapper.java
  49. 18 0
      pipe-network-service/zksy-system/src/main/java/com/zksy/dispatch/service/DisEventGradeService.java
  50. 11 0
      pipe-network-service/zksy-system/src/main/java/com/zksy/dispatch/service/DisEventPlanService.java
  51. 27 0
      pipe-network-service/zksy-system/src/main/java/com/zksy/dispatch/service/DisEventReportService.java
  52. 40 0
      pipe-network-service/zksy-system/src/main/java/com/zksy/dispatch/service/DisEventTrackService.java
  53. 36 0
      pipe-network-service/zksy-system/src/main/java/com/zksy/dispatch/service/DisEventTransferService.java
  54. 35 0
      pipe-network-service/zksy-system/src/main/java/com/zksy/dispatch/service/DisEventUrgeService.java
  55. 22 0
      pipe-network-service/zksy-system/src/main/java/com/zksy/dispatch/service/DisEventVerifyService.java
  56. 36 0
      pipe-network-service/zksy-system/src/main/java/com/zksy/dispatch/service/DisPlanApprovalService.java
  57. 18 0
      pipe-network-service/zksy-system/src/main/java/com/zksy/dispatch/service/DisPlanApprovalStepService.java
  58. 18 0
      pipe-network-service/zksy-system/src/main/java/com/zksy/dispatch/service/DisPlanCategoryService.java
  59. 39 0
      pipe-network-service/zksy-system/src/main/java/com/zksy/dispatch/service/impl/DisEventGradeServiceImpl.java
  60. 30 0
      pipe-network-service/zksy-system/src/main/java/com/zksy/dispatch/service/impl/DisEventPlanServiceImpl.java
  61. 104 0
      pipe-network-service/zksy-system/src/main/java/com/zksy/dispatch/service/impl/DisEventReportServiceImpl.java
  62. 111 0
      pipe-network-service/zksy-system/src/main/java/com/zksy/dispatch/service/impl/DisEventTrackServiceImpl.java
  63. 150 0
      pipe-network-service/zksy-system/src/main/java/com/zksy/dispatch/service/impl/DisEventTransferServiceImpl.java
  64. 90 0
      pipe-network-service/zksy-system/src/main/java/com/zksy/dispatch/service/impl/DisEventUrgeServiceImpl.java
  65. 110 0
      pipe-network-service/zksy-system/src/main/java/com/zksy/dispatch/service/impl/DisEventVerifyServiceImpl.java
  66. 152 0
      pipe-network-service/zksy-system/src/main/java/com/zksy/dispatch/service/impl/DisPlanApprovalServiceImpl.java
  67. 37 0
      pipe-network-service/zksy-system/src/main/java/com/zksy/dispatch/service/impl/DisPlanApprovalStepServiceImpl.java
  68. 56 0
      pipe-network-service/zksy-system/src/main/java/com/zksy/dispatch/service/impl/DisPlanCategoryServiceImpl.java

+ 72 - 0
pipe-network-service/zksy-admin/src/main/java/com/zksy/web/controller/dispatch/DisEventGradeController.java

@@ -0,0 +1,72 @@
+package com.zksy.web.controller.dispatch;
+
+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.dispatch.domain.DisEventGrade;
+import com.zksy.dispatch.dto.DisEventGradePageDTO;
+import com.zksy.dispatch.service.DisEventGradeService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+@Slf4j
+@RestController
+@RequestMapping("/api/dispatch/grade")
+@Api(tags = "应急事件分级标准")
+public class DisEventGradeController {
+
+    @Autowired
+    private DisEventGradeService service;
+
+    @GetMapping("/findByPage")
+    @ApiOperation("分级标准分页查询")
+    @Anonymous
+    public AjaxResult findByPage(DisEventGradePageDTO dto) {
+        Page<DisEventGrade> page = service.findByPage(dto);
+        return AjaxResult.success(page);
+    }
+
+    @GetMapping("/getById/{id}")
+    @ApiOperation("根据ID查询分级标准")
+    @Anonymous
+    public AjaxResult getById(@PathVariable Long id) {
+        DisEventGrade entity = service.getById(id);
+        return entity != null ? AjaxResult.success(entity) : AjaxResult.error("分级标准不存在");
+    }
+
+    @GetMapping("/listByCategory")
+    @ApiOperation("根据分类查询分级标准")
+    @Anonymous
+    public AjaxResult listByCategory(@RequestParam String category) {
+        return AjaxResult.success(service.listByCategory(category));
+    }
+
+    @PostMapping("/save")
+    @ApiOperation("新增分级标准")
+    @Log(title = "新增分级标准", businessType = BusinessType.INSERT)
+    public AjaxResult save(@RequestBody DisEventGrade entity) {
+        boolean saved = service.save(entity);
+        return saved ? AjaxResult.success("新增成功", saved) : AjaxResult.error("新增失败");
+    }
+
+    @PutMapping("/updateById")
+    @ApiOperation("修改分级标准")
+    @Log(title = "修改分级标准", businessType = BusinessType.UPDATE)
+    public AjaxResult updateById(@RequestBody DisEventGrade entity) {
+        boolean updated = service.updateById(entity);
+        return updated ? AjaxResult.success("修改成功", updated) : AjaxResult.error("修改失败");
+    }
+
+    @DeleteMapping("/deleteById")
+    @ApiOperation("删除分级标准")
+    @Log(title = "删除分级标准", businessType = BusinessType.DELETE)
+    public AjaxResult deleteById(@RequestParam Long id) {
+        boolean deleted = service.removeById(id);
+        return deleted ? AjaxResult.success("删除成功") : AjaxResult.error("删除失败");
+    }
+}

+ 65 - 0
pipe-network-service/zksy-admin/src/main/java/com/zksy/web/controller/dispatch/DisEventPlanController.java

@@ -0,0 +1,65 @@
+package com.zksy.web.controller.dispatch;
+
+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.dispatch.domain.DisEventPlan;
+import com.zksy.dispatch.dto.DisEventPlanPageDTO;
+import com.zksy.dispatch.service.DisEventPlanService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+@Slf4j
+@RestController
+@RequestMapping("/api/dispatch/plan")
+@Api(tags = "应急预案")
+public class DisEventPlanController {
+
+    @Autowired
+    private DisEventPlanService service;
+
+    @GetMapping("/findByPage")
+    @ApiOperation("应急预案分页查询")
+    @Anonymous
+    public AjaxResult findByPage(DisEventPlanPageDTO dto) {
+        Page<DisEventPlan> page = service.findByPage(dto);
+        return AjaxResult.success(page);
+    }
+
+    @GetMapping("/getById/{id}")
+    @ApiOperation("根据ID查询应急预案")
+    @Anonymous
+    public AjaxResult getById(@PathVariable Long id) {
+        DisEventPlan entity = service.getById(id);
+        return entity != null ? AjaxResult.success(entity) : AjaxResult.error("应急预案不存在");
+    }
+
+    @PostMapping("/save")
+    @ApiOperation("新增应急预案")
+    @Log(title = "新增应急预案", businessType = BusinessType.INSERT)
+    public AjaxResult save(@RequestBody DisEventPlan entity) {
+        boolean saved = service.save(entity);
+        return saved ? AjaxResult.success("新增成功", saved) : AjaxResult.error("新增失败");
+    }
+
+    @PutMapping("/updateById")
+    @ApiOperation("修改应急预案")
+    @Log(title = "修改应急预案", businessType = BusinessType.UPDATE)
+    public AjaxResult updateById(@RequestBody DisEventPlan entity) {
+        boolean updated = service.updateById(entity);
+        return updated ? AjaxResult.success("修改成功", updated) : AjaxResult.error("修改失败");
+    }
+
+    @DeleteMapping("/deleteById")
+    @ApiOperation("删除应急预案")
+    @Log(title = "删除应急预案", businessType = BusinessType.DELETE)
+    public AjaxResult deleteById(@RequestParam Long id) {
+        boolean deleted = service.removeById(id);
+        return deleted ? AjaxResult.success("删除成功") : AjaxResult.error("删除失败");
+    }
+}

+ 81 - 0
pipe-network-service/zksy-admin/src/main/java/com/zksy/web/controller/dispatch/DisEventReportController.java

@@ -0,0 +1,81 @@
+package com.zksy.web.controller.dispatch;
+
+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.dispatch.domain.DisEventReport;
+import com.zksy.dispatch.dto.EventReportPageInDTO;
+import com.zksy.dispatch.service.DisEventReportService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+@Slf4j
+@RestController
+@RequestMapping("/api/dispatch/report")
+@Api(tags = "接报管理")
+public class DisEventReportController {
+
+    @Autowired
+    private DisEventReportService service;
+
+    @GetMapping("/findByPage")
+    @ApiOperation("接报管理分页查询")
+    @Anonymous
+    public AjaxResult findByPage(EventReportPageInDTO dto) {
+        Page<DisEventReport> page = service.findByPage(dto);
+        return AjaxResult.success(page);
+    }
+
+    @GetMapping("/getById/{id}")
+    @ApiOperation("根据ID查询接报记录")
+    @Anonymous
+    public AjaxResult getById(@PathVariable Long id) {
+        DisEventReport entity = service.getById(id);
+        return entity != null ? AjaxResult.success(entity) : AjaxResult.error("接报记录不存在");
+    }
+
+    @PostMapping("/save")
+    @ApiOperation("新增接报记录")
+    @Log(title = "新增接报记录", businessType = BusinessType.INSERT)
+    public AjaxResult save(@RequestBody DisEventReport entity) {
+        boolean saved = service.save(entity);
+        return saved ? AjaxResult.success("新增成功", saved) : AjaxResult.error("新增失败");
+    }
+
+    @PutMapping("/updateById")
+    @ApiOperation("修改接报记录")
+    @Log(title = "修改接报记录", businessType = BusinessType.UPDATE)
+    public AjaxResult updateById(@RequestBody DisEventReport entity) {
+        boolean updated = service.updateById(entity);
+        return updated ? AjaxResult.success("修改成功", updated) : AjaxResult.error("修改失败");
+    }
+
+    @DeleteMapping("/deleteById")
+    @ApiOperation("删除接报记录")
+    @Log(title = "删除接报记录", businessType = BusinessType.DELETE)
+    public AjaxResult deleteById(@RequestParam Long id) {
+        boolean deleted = service.removeById(id);
+        return deleted ? AjaxResult.success("删除成功") : AjaxResult.error("删除失败");
+    }
+
+    @PutMapping("/accept/{id}")
+    @ApiOperation("受理接报")
+    @Log(title = "受理接报", businessType = BusinessType.UPDATE)
+    public AjaxResult accept(@PathVariable Long id) {
+        boolean accepted = service.accept(id);
+        return accepted ? AjaxResult.success("受理成功") : AjaxResult.error("受理失败");
+    }
+
+    @PutMapping("/reject/{id}")
+    @ApiOperation("驳回接报")
+    @Log(title = "驳回接报", businessType = BusinessType.UPDATE)
+    public AjaxResult reject(@PathVariable Long id, @RequestParam String remark) {
+        boolean rejected = service.reject(id, remark);
+        return rejected ? AjaxResult.success("驳回成功") : AjaxResult.error("驳回失败");
+    }
+}

+ 97 - 0
pipe-network-service/zksy-admin/src/main/java/com/zksy/web/controller/dispatch/DisEventTrackController.java

@@ -0,0 +1,97 @@
+package com.zksy.web.controller.dispatch;
+
+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.dispatch.domain.DisEventTrack;
+import com.zksy.dispatch.domain.DisEventTrackLog;
+import com.zksy.dispatch.dto.EventTrackPageInDTO;
+import com.zksy.dispatch.service.DisEventTrackService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+@Slf4j
+@RestController
+@RequestMapping("/api/dispatch/track")
+@Api(tags = "跟踪解除")
+public class DisEventTrackController {
+
+    @Autowired
+    private DisEventTrackService service;
+
+    @GetMapping("/findByPage")
+    @ApiOperation("跟踪解除分页查询")
+    @Anonymous
+    public AjaxResult findByPage(EventTrackPageInDTO dto) {
+        Page<DisEventTrack> page = service.findByPage(dto);
+        return AjaxResult.success(page);
+    }
+
+    @GetMapping("/getById/{id}")
+    @ApiOperation("根据ID查询跟踪记录")
+    @Anonymous
+    public AjaxResult getById(@PathVariable Long id) {
+        DisEventTrack entity = service.getById(id);
+        return entity != null ? AjaxResult.success(entity) : AjaxResult.error("跟踪记录不存在");
+    }
+
+    @PostMapping("/save")
+    @ApiOperation("新增跟踪记录")
+    @Log(title = "新增跟踪记录", businessType = BusinessType.INSERT)
+    public AjaxResult save(@RequestBody DisEventTrack entity) {
+        boolean saved = service.save(entity);
+        return saved ? AjaxResult.success("新增成功", saved) : AjaxResult.error("新增失败");
+    }
+
+    @PutMapping("/updateById")
+    @ApiOperation("修改跟踪记录")
+    @Log(title = "修改跟踪记录", businessType = BusinessType.UPDATE)
+    public AjaxResult updateById(@RequestBody DisEventTrack entity) {
+        boolean updated = service.updateById(entity);
+        return updated ? AjaxResult.success("修改成功", updated) : AjaxResult.error("修改失败");
+    }
+
+    @DeleteMapping("/deleteById")
+    @ApiOperation("删除跟踪记录")
+    @Log(title = "删除跟踪记录", businessType = BusinessType.DELETE)
+    public AjaxResult deleteById(@RequestParam Long id) {
+        boolean deleted = service.removeById(id);
+        return deleted ? AjaxResult.success("删除成功") : AjaxResult.error("删除失败");
+    }
+
+    @PostMapping("/addTrackLog")
+    @ApiOperation("添加跟踪日志")
+    @Log(title = "添加跟踪日志", businessType = BusinessType.INSERT)
+    public AjaxResult addTrackLog(@RequestBody DisEventTrackLog log) {
+        boolean added = service.addTrackLog(log);
+        return added ? AjaxResult.success("添加成功") : AjaxResult.error("添加失败");
+    }
+
+    @PutMapping("/release/{id}")
+    @ApiOperation("解除跟踪")
+    @Log(title = "解除跟踪", businessType = BusinessType.UPDATE)
+    public AjaxResult release(@PathVariable Long id) {
+        boolean released = service.release(id);
+        return released ? AjaxResult.success("解除成功") : AjaxResult.error("解除失败");
+    }
+
+    @PutMapping("/close/{id}")
+    @ApiOperation("关闭跟踪")
+    @Log(title = "关闭跟踪", businessType = BusinessType.UPDATE)
+    public AjaxResult close(@PathVariable Long id) {
+        boolean closed = service.close(id);
+        return closed ? AjaxResult.success("关闭成功") : AjaxResult.error("关闭失败");
+    }
+
+    @GetMapping("/getTrackLogs/{trackId}")
+    @ApiOperation("查询跟踪日志")
+    @Anonymous
+    public AjaxResult getTrackLogs(@PathVariable Long trackId) {
+        return AjaxResult.success(service.getTrackLogs(trackId));
+    }
+}

+ 89 - 0
pipe-network-service/zksy-admin/src/main/java/com/zksy/web/controller/dispatch/DisEventTransferController.java

@@ -0,0 +1,89 @@
+package com.zksy.web.controller.dispatch;
+
+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.dispatch.domain.DisEventTransfer;
+import com.zksy.dispatch.dto.EventReportDTO;
+import com.zksy.dispatch.dto.EventTransferPageInDTO;
+import com.zksy.dispatch.service.DisEventTransferService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+@Slf4j
+@RestController
+@RequestMapping("/api/dispatch/transfer")
+@Api(tags = "转接报送")
+public class DisEventTransferController {
+
+    @Autowired
+    private DisEventTransferService service;
+
+    @GetMapping("/findByPage")
+    @ApiOperation("转接报送分页查询")
+    @Anonymous
+    public AjaxResult findByPage(EventTransferPageInDTO dto) {
+        Page<DisEventTransfer> page = service.findByPage(dto);
+        return AjaxResult.success(page);
+    }
+
+    @GetMapping("/getById/{id}")
+    @ApiOperation("根据ID查询转接记录")
+    @Anonymous
+    public AjaxResult getById(@PathVariable Long id) {
+        DisEventTransfer entity = service.getById(id);
+        return entity != null ? AjaxResult.success(entity) : AjaxResult.error("转接记录不存在");
+    }
+
+    @PostMapping("/save")
+    @ApiOperation("新增转接记录")
+    @Log(title = "新增转接记录", businessType = BusinessType.INSERT)
+    public AjaxResult save(@RequestBody DisEventTransfer entity) {
+        boolean saved = service.save(entity);
+        return saved ? AjaxResult.success("新增成功", saved) : AjaxResult.error("新增失败");
+    }
+
+    @PutMapping("/updateById")
+    @ApiOperation("修改转接记录")
+    @Log(title = "修改转接记录", businessType = BusinessType.UPDATE)
+    public AjaxResult updateById(@RequestBody DisEventTransfer entity) {
+        boolean updated = service.updateById(entity);
+        return updated ? AjaxResult.success("修改成功", updated) : AjaxResult.error("修改失败");
+    }
+
+    @DeleteMapping("/deleteById")
+    @ApiOperation("删除转接记录")
+    @Log(title = "删除转接记录", businessType = BusinessType.DELETE)
+    public AjaxResult deleteById(@RequestParam Long id) {
+        boolean deleted = service.removeById(id);
+        return deleted ? AjaxResult.success("删除成功") : AjaxResult.error("删除失败");
+    }
+
+    @PutMapping("/doTransfer")
+    @ApiOperation("执行转接")
+    @Log(title = "执行转接", businessType = BusinessType.UPDATE)
+    public AjaxResult doTransfer(@RequestBody DisEventTransfer entity) {
+        boolean transferred = service.doTransfer(entity);
+        return transferred ? AjaxResult.success("转接成功") : AjaxResult.error("转接失败");
+    }
+
+    @PutMapping("/doReport")
+    @ApiOperation("执行报送")
+    @Log(title = "执行报送", businessType = BusinessType.UPDATE)
+    public AjaxResult doReport(@RequestBody EventReportDTO dto) {
+        boolean reported = service.doReport(dto);
+        return reported ? AjaxResult.success("报送成功") : AjaxResult.error("报送失败");
+    }
+
+    @GetMapping("/getTransferLogs/{transferId}")
+    @ApiOperation("查询转接日志")
+    @Anonymous
+    public AjaxResult getTransferLogs(@PathVariable Long transferId) {
+        return AjaxResult.success(service.getTransferLogs(transferId));
+    }
+}

+ 89 - 0
pipe-network-service/zksy-admin/src/main/java/com/zksy/web/controller/dispatch/DisEventUrgeController.java

@@ -0,0 +1,89 @@
+package com.zksy.web.controller.dispatch;
+
+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.dispatch.domain.DisEventUrge;
+import com.zksy.dispatch.domain.DisEventUrgeDetail;
+import com.zksy.dispatch.dto.EventUrgePageInDTO;
+import com.zksy.dispatch.service.DisEventUrgeService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+@Slf4j
+@RestController
+@RequestMapping("/api/dispatch/urge")
+@Api(tags = "工作催办")
+public class DisEventUrgeController {
+
+    @Autowired
+    private DisEventUrgeService service;
+
+    @GetMapping("/findByPage")
+    @ApiOperation("工作催办分页查询")
+    @Anonymous
+    public AjaxResult findByPage(EventUrgePageInDTO dto) {
+        Page<DisEventUrge> page = service.findByPage(dto);
+        return AjaxResult.success(page);
+    }
+
+    @GetMapping("/getById/{id}")
+    @ApiOperation("根据ID查询催办记录")
+    @Anonymous
+    public AjaxResult getById(@PathVariable Long id) {
+        DisEventUrge entity = service.getById(id);
+        return entity != null ? AjaxResult.success(entity) : AjaxResult.error("催办记录不存在");
+    }
+
+    @PostMapping("/save")
+    @ApiOperation("新增催办记录")
+    @Log(title = "新增催办记录", businessType = BusinessType.INSERT)
+    public AjaxResult save(@RequestBody DisEventUrge entity) {
+        boolean saved = service.save(entity);
+        return saved ? AjaxResult.success("新增成功", saved) : AjaxResult.error("新增失败");
+    }
+
+    @PutMapping("/updateById")
+    @ApiOperation("修改催办记录")
+    @Log(title = "修改催办记录", businessType = BusinessType.UPDATE)
+    public AjaxResult updateById(@RequestBody DisEventUrge entity) {
+        boolean updated = service.updateById(entity);
+        return updated ? AjaxResult.success("修改成功", updated) : AjaxResult.error("修改失败");
+    }
+
+    @DeleteMapping("/deleteById")
+    @ApiOperation("删除催办记录")
+    @Log(title = "删除催办记录", businessType = BusinessType.DELETE)
+    public AjaxResult deleteById(@RequestParam Long id) {
+        boolean deleted = service.removeById(id);
+        return deleted ? AjaxResult.success("删除成功") : AjaxResult.error("删除失败");
+    }
+
+    @PostMapping("/doUrge")
+    @ApiOperation("执行催办")
+    @Log(title = "执行催办", businessType = BusinessType.INSERT)
+    public AjaxResult doUrge(@RequestBody DisEventUrgeDetail detail) {
+        boolean urged = service.doUrge(detail);
+        return urged ? AjaxResult.success("催办成功") : AjaxResult.error("催办失败");
+    }
+
+    @PutMapping("/closeUrge/{id}")
+    @ApiOperation("办结催办")
+    @Log(title = "办结催办", businessType = BusinessType.UPDATE)
+    public AjaxResult closeUrge(@PathVariable Long id) {
+        boolean closed = service.closeUrge(id);
+        return closed ? AjaxResult.success("办结成功") : AjaxResult.error("办结失败");
+    }
+
+    @GetMapping("/getUrgeDetails/{urgeId}")
+    @ApiOperation("查询催办明细")
+    @Anonymous
+    public AjaxResult getUrgeDetails(@PathVariable Long urgeId) {
+        return AjaxResult.success(service.getUrgeDetails(urgeId));
+    }
+}

+ 73 - 0
pipe-network-service/zksy-admin/src/main/java/com/zksy/web/controller/dispatch/DisEventVerifyController.java

@@ -0,0 +1,73 @@
+package com.zksy.web.controller.dispatch;
+
+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.dispatch.domain.DisEventVerify;
+import com.zksy.dispatch.dto.EventVerifyPageInDTO;
+import com.zksy.dispatch.service.DisEventVerifyService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+@Slf4j
+@RestController
+@RequestMapping("/api/dispatch/verify")
+@Api(tags = "初判核实")
+public class DisEventVerifyController {
+
+    @Autowired
+    private DisEventVerifyService service;
+
+    @GetMapping("/findByPage")
+    @ApiOperation("初判核实分页查询")
+    @Anonymous
+    public AjaxResult findByPage(EventVerifyPageInDTO dto) {
+        Page<DisEventVerify> page = service.findByPage(dto);
+        return AjaxResult.success(page);
+    }
+
+    @GetMapping("/getById/{id}")
+    @ApiOperation("根据ID查询核实记录")
+    @Anonymous
+    public AjaxResult getById(@PathVariable Long id) {
+        DisEventVerify entity = service.getById(id);
+        return entity != null ? AjaxResult.success(entity) : AjaxResult.error("核实记录不存在");
+    }
+
+    @PostMapping("/save")
+    @ApiOperation("新增核实记录")
+    @Log(title = "新增核实记录", businessType = BusinessType.INSERT)
+    public AjaxResult save(@RequestBody DisEventVerify entity) {
+        boolean saved = service.save(entity);
+        return saved ? AjaxResult.success("新增成功", saved) : AjaxResult.error("新增失败");
+    }
+
+    @PutMapping("/updateById")
+    @ApiOperation("修改核实记录")
+    @Log(title = "修改核实记录", businessType = BusinessType.UPDATE)
+    public AjaxResult updateById(@RequestBody DisEventVerify entity) {
+        boolean updated = service.updateById(entity);
+        return updated ? AjaxResult.success("修改成功", updated) : AjaxResult.error("修改失败");
+    }
+
+    @DeleteMapping("/deleteById")
+    @ApiOperation("删除核实记录")
+    @Log(title = "删除核实记录", businessType = BusinessType.DELETE)
+    public AjaxResult deleteById(@RequestParam Long id) {
+        boolean deleted = service.removeById(id);
+        return deleted ? AjaxResult.success("删除成功") : AjaxResult.error("删除失败");
+    }
+
+    @PutMapping("/verify")
+    @ApiOperation("核实事件")
+    @Log(title = "核实事件", businessType = BusinessType.UPDATE)
+    public AjaxResult verify(@RequestBody DisEventVerify entity) {
+        boolean verified = service.verify(entity);
+        return verified ? AjaxResult.success("核实成功") : AjaxResult.error("核实失败");
+    }
+}

+ 105 - 0
pipe-network-service/zksy-admin/src/main/java/com/zksy/web/controller/dispatch/DisPlanApprovalController.java

@@ -0,0 +1,105 @@
+package com.zksy.web.controller.dispatch;
+
+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.dispatch.domain.DisPlanApproval;
+import com.zksy.dispatch.dto.DisPlanApprovalPageDTO;
+import com.zksy.dispatch.service.DisPlanApprovalService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+@Slf4j
+@RestController
+@RequestMapping("/api/dispatch/plan-approval")
+@Api(tags = "应急预案审批")
+public class DisPlanApprovalController {
+
+    @Autowired
+    private DisPlanApprovalService service;
+
+    @GetMapping("/findByPage")
+    @ApiOperation("应急预案审批分页查询")
+    @Anonymous
+    public AjaxResult findByPage(DisPlanApprovalPageDTO dto) {
+        Page<DisPlanApproval> page = service.findByPage(dto);
+        return AjaxResult.success(page);
+    }
+
+    @GetMapping("/getById/{id}")
+    @ApiOperation("根据ID查询应急预案审批")
+    @Anonymous
+    public AjaxResult getById(@PathVariable Long id) {
+        DisPlanApproval entity = service.getById(id);
+        return entity != null ? AjaxResult.success(entity) : AjaxResult.error("审批记录不存在");
+    }
+
+    @PostMapping("/save")
+    @ApiOperation("新增应急预案审批")
+    @Log(title = "新增应急预案审批", businessType = BusinessType.INSERT)
+    public AjaxResult save(@RequestBody DisPlanApproval entity) {
+        boolean saved = service.save(entity);
+        return saved ? AjaxResult.success("新增成功", saved) : AjaxResult.error("新增失败");
+    }
+
+    @PutMapping("/updateById")
+    @ApiOperation("修改应急预案审批")
+    @Log(title = "修改应急预案审批", businessType = BusinessType.UPDATE)
+    public AjaxResult updateById(@RequestBody DisPlanApproval entity) {
+        boolean updated = service.updateById(entity);
+        return updated ? AjaxResult.success("修改成功", updated) : AjaxResult.error("修改失败");
+    }
+
+    @DeleteMapping("/deleteById")
+    @ApiOperation("删除应急预案审批")
+    @Log(title = "删除应急预案审批", businessType = BusinessType.DELETE)
+    public AjaxResult deleteById(@RequestParam Long id) {
+        boolean deleted = service.removeById(id);
+        return deleted ? AjaxResult.success("删除成功") : AjaxResult.error("删除失败");
+    }
+
+    @PutMapping("/submitForApproval/{id}")
+    @ApiOperation("提交审批")
+    @Log(title = "提交审批", businessType = BusinessType.UPDATE)
+    public AjaxResult submitForApproval(@PathVariable Long id) {
+        boolean result = service.submitForApproval(id);
+        return result ? AjaxResult.success("提交审批成功") : AjaxResult.error("提交审批失败,请检查状态");
+    }
+
+    @PutMapping("/approve/{id}")
+    @ApiOperation("初审通过")
+    @Log(title = "初审通过", businessType = BusinessType.UPDATE)
+    public AjaxResult approve(@PathVariable Long id, @RequestParam(required = false) String opinion) {
+        boolean result = service.approve(id, opinion);
+        return result ? AjaxResult.success("初审通过") : AjaxResult.error("审批失败,请检查状态");
+    }
+
+    @PutMapping("/reject/{id}")
+    @ApiOperation("驳回")
+    @Log(title = "驳回审批", businessType = BusinessType.UPDATE)
+    public AjaxResult reject(@PathVariable Long id, @RequestParam(required = false) String opinion) {
+        boolean result = service.reject(id, opinion);
+        return result ? AjaxResult.success("已驳回") : AjaxResult.error("驳回失败,请检查状态");
+    }
+
+    @PutMapping("/publish/{id}")
+    @ApiOperation("终审通过并发布")
+    @Log(title = "终审通过并发布", businessType = BusinessType.UPDATE)
+    public AjaxResult publish(@PathVariable Long id, @RequestParam(required = false) String opinion) {
+        boolean result = service.publish(id, opinion);
+        return result ? AjaxResult.success("已发布") : AjaxResult.error("发布失败,请检查状态");
+    }
+
+    @PostMapping("/submit/{planId}")
+    @ApiOperation("根据预案ID创建审批并提交")
+    @Log(title = "提交审批", businessType = BusinessType.INSERT)
+    public AjaxResult submitFromPlan(@PathVariable Long planId) {
+        boolean result = service.createFromPlan(planId);
+        return result ? AjaxResult.success("提交审批成功") : AjaxResult.error("提交审批失败");
+    }
+}

+ 72 - 0
pipe-network-service/zksy-admin/src/main/java/com/zksy/web/controller/dispatch/DisPlanApprovalStepController.java

@@ -0,0 +1,72 @@
+package com.zksy.web.controller.dispatch;
+
+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.dispatch.domain.DisPlanApprovalStep;
+import com.zksy.dispatch.dto.DisPlanApprovalStepPageDTO;
+import com.zksy.dispatch.service.DisPlanApprovalStepService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+@Slf4j
+@RestController
+@RequestMapping("/api/dispatch/plan-approval-step")
+@Api(tags = "应急预案审批步骤")
+public class DisPlanApprovalStepController {
+
+    @Autowired
+    private DisPlanApprovalStepService service;
+
+    @GetMapping("/findByPage")
+    @ApiOperation("审批步骤分页查询")
+    @Anonymous
+    public AjaxResult findByPage(DisPlanApprovalStepPageDTO dto) {
+        Page<DisPlanApprovalStep> page = service.findByPage(dto);
+        return AjaxResult.success(page);
+    }
+
+    @GetMapping("/getById/{id}")
+    @ApiOperation("根据ID查询审批步骤")
+    @Anonymous
+    public AjaxResult getById(@PathVariable Long id) {
+        DisPlanApprovalStep entity = service.getById(id);
+        return entity != null ? AjaxResult.success(entity) : AjaxResult.error("审批步骤不存在");
+    }
+
+    @GetMapping("/listByApprovalId")
+    @ApiOperation("根据审批主表ID查询步骤列表")
+    @Anonymous
+    public AjaxResult listByApprovalId(@RequestParam Long approvalId) {
+        return AjaxResult.success(service.listByApprovalId(approvalId));
+    }
+
+    @PostMapping("/save")
+    @ApiOperation("新增审批步骤")
+    @Log(title = "新增审批步骤", businessType = BusinessType.INSERT)
+    public AjaxResult save(@RequestBody DisPlanApprovalStep entity) {
+        boolean saved = service.save(entity);
+        return saved ? AjaxResult.success("新增成功", saved) : AjaxResult.error("新增失败");
+    }
+
+    @PutMapping("/updateById")
+    @ApiOperation("修改审批步骤")
+    @Log(title = "修改审批步骤", businessType = BusinessType.UPDATE)
+    public AjaxResult updateById(@RequestBody DisPlanApprovalStep entity) {
+        boolean updated = service.updateById(entity);
+        return updated ? AjaxResult.success("修改成功", updated) : AjaxResult.error("修改失败");
+    }
+
+    @DeleteMapping("/deleteById")
+    @ApiOperation("删除审批步骤")
+    @Log(title = "删除审批步骤", businessType = BusinessType.DELETE)
+    public AjaxResult deleteById(@RequestParam Long id) {
+        boolean deleted = service.removeById(id);
+        return deleted ? AjaxResult.success("删除成功") : AjaxResult.error("删除失败");
+    }
+}

+ 75 - 0
pipe-network-service/zksy-admin/src/main/java/com/zksy/web/controller/dispatch/DisPlanCategoryController.java

@@ -0,0 +1,75 @@
+package com.zksy.web.controller.dispatch;
+
+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.dispatch.domain.DisPlanCategory;
+import com.zksy.dispatch.dto.DisPlanCategoryPageDTO;
+import com.zksy.dispatch.service.DisPlanCategoryService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+@Slf4j
+@RestController
+@RequestMapping("/api/dispatch/plan-category")
+@Api(tags = "预案分类")
+public class DisPlanCategoryController {
+
+    @Autowired
+    private DisPlanCategoryService service;
+
+    @GetMapping("/findByPage")
+    @ApiOperation("预案分类分页查询")
+    @Anonymous
+    public AjaxResult findByPage(DisPlanCategoryPageDTO dto) {
+        Page<DisPlanCategory> page = service.findByPage(dto);
+        return AjaxResult.success(page);
+    }
+
+    @GetMapping("/getById/{id}")
+    @ApiOperation("根据ID查询预案分类")
+    @Anonymous
+    public AjaxResult getById(@PathVariable Long id) {
+        DisPlanCategory entity = service.getById(id);
+        return entity != null ? AjaxResult.success(entity) : AjaxResult.error("预案分类不存在");
+    }
+
+    @GetMapping("/getCategoryTree")
+    @ApiOperation("获取分类树")
+    @Anonymous
+    public AjaxResult getCategoryTree() {
+        List<DisPlanCategory> tree = service.getCategoryTree();
+        return AjaxResult.success(tree);
+    }
+
+    @PostMapping("/save")
+    @ApiOperation("新增预案分类")
+    @Log(title = "新增预案分类", businessType = BusinessType.INSERT)
+    public AjaxResult save(@RequestBody DisPlanCategory entity) {
+        boolean saved = service.save(entity);
+        return saved ? AjaxResult.success("新增成功", saved) : AjaxResult.error("新增失败");
+    }
+
+    @PutMapping("/updateById")
+    @ApiOperation("修改预案分类")
+    @Log(title = "修改预案分类", businessType = BusinessType.UPDATE)
+    public AjaxResult updateById(@RequestBody DisPlanCategory entity) {
+        boolean updated = service.updateById(entity);
+        return updated ? AjaxResult.success("修改成功", updated) : AjaxResult.error("修改失败");
+    }
+
+    @DeleteMapping("/deleteById")
+    @ApiOperation("删除预案分类")
+    @Log(title = "删除预案分类", businessType = BusinessType.DELETE)
+    public AjaxResult deleteById(@RequestParam Long id) {
+        boolean deleted = service.removeById(id);
+        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", "com.zksy.drainage.**.mapper","com.zksy.WaterSupply.**.mapper"})
+@MapperScan({"com.zksy.base.**.mapper", "com.zksy.system.**.mapper", "com.zksy.quartz.**.mapper", "com.zksy.generator.**.mapper", "com.zksy.drainage.**.mapper", "com.zksy.WaterSupply.**.mapper", "com.zksy.dispatch.**.mapper"})
 public class ApplicationConfig
 {
     /**

+ 60 - 0
pipe-network-service/zksy-system/src/main/java/com/zksy/dispatch/domain/DisEventGrade.java

@@ -0,0 +1,60 @@
+package com.zksy.dispatch.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+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("dis_event_grade")
+public class DisEventGrade {
+
+    @TableId(value = "id", type = IdType.AUTO)
+    @ApiModelProperty("主键ID")
+    private Long id;
+
+    @ApiModelProperty("分类")
+    private String category;
+
+    @ApiModelProperty("级别")
+    private String level;
+
+    @ApiModelProperty("子分类")
+    private String subCategory;
+
+    @ApiModelProperty("场景")
+    private String scenario;
+
+    @ApiModelProperty("判定标准")
+    private String criteria;
+
+    @ApiModelProperty("状态")
+    private String status;
+
+    @ApiModelProperty("备注")
+    private String remark;
+
+    @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;
+
+    @TableLogic(value = "0", delval = "2")
+    @ApiModelProperty("删除标志(0=正常 2=删除)")
+    private String delFlag;
+}

+ 78 - 0
pipe-network-service/zksy-system/src/main/java/com/zksy/dispatch/domain/DisEventPlan.java

@@ -0,0 +1,78 @@
+package com.zksy.dispatch.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+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("dis_event_plan")
+public class DisEventPlan {
+
+    @TableId(value = "id", type = IdType.AUTO)
+    @ApiModelProperty("主键ID")
+    private Long id;
+
+    @ApiModelProperty("分类ID")
+    private Long categoryId;
+
+    @ApiModelProperty("预案名称")
+    private String planName;
+
+    @ApiModelProperty("预案类型")
+    private String planType;
+
+    @ApiModelProperty("预案级别")
+    private String planLevel;
+
+    @ApiModelProperty("版本号")
+    private String version;
+
+    @ApiModelProperty("编制单位")
+    private String compileUnit;
+
+    @ApiModelProperty("发布单位")
+    private String publishUnit;
+
+    @ApiModelProperty("发布日期")
+    private String publishDate;
+
+    @ApiModelProperty("附件名称")
+    private String attachName;
+
+    @ApiModelProperty("附件路径")
+    private String attachPath;
+
+    @ApiModelProperty("预案内容")
+    private String planContent;
+
+    @ApiModelProperty("状态")
+    private String status;
+
+    @ApiModelProperty("创建人")
+    private String createBy;
+
+    @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;
+
+    @TableLogic(value = "0", delval = "2")
+    @ApiModelProperty("删除标志(0=正常 2=删除)")
+    private String delFlag;
+}

+ 71 - 0
pipe-network-service/zksy-system/src/main/java/com/zksy/dispatch/domain/DisEventReport.java

@@ -0,0 +1,71 @@
+package com.zksy.dispatch.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+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("dis_event_report")
+public class DisEventReport {
+
+    @TableId(value = "id", type = IdType.AUTO)
+    @ApiModelProperty("主键ID")
+    private Long id;
+
+    @ApiModelProperty("事件编号")
+    private String eventNo;
+
+    @ApiModelProperty("来源")
+    private String source;
+
+    @ApiModelProperty("地点")
+    private String location;
+
+    @ApiModelProperty("发生时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private LocalDateTime happenTime;
+
+    @ApiModelProperty("描述")
+    private String description;
+
+    @ApiModelProperty("报告人")
+    private String reporter;
+
+    @ApiModelProperty("报告时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private LocalDateTime reportTime;
+
+    @ApiModelProperty("渠道")
+    private String channel;
+
+    @ApiModelProperty("状态(待受理/已受理/已驳回)")
+    private String status;
+
+    @ApiModelProperty("备注")
+    private String remark;
+
+    @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;
+
+    @TableLogic(value = "0", delval = "2")
+    @ApiModelProperty("删除标志(0=正常 2=删除)")
+    private String delFlag;
+}

+ 68 - 0
pipe-network-service/zksy-system/src/main/java/com/zksy/dispatch/domain/DisEventTrack.java

@@ -0,0 +1,68 @@
+package com.zksy.dispatch.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+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("dis_event_track")
+public class DisEventTrack {
+
+    @TableId(value = "id", type = IdType.AUTO)
+    @ApiModelProperty("主键ID")
+    private Long id;
+
+    @ApiModelProperty("事件编号")
+    private String eventNo;
+
+    @ApiModelProperty("事件类别")
+    private String category;
+
+    @ApiModelProperty("事件级别")
+    private String level;
+
+    @ApiModelProperty("地点")
+    private String location;
+
+    @ApiModelProperty("描述")
+    private String description;
+
+    @ApiModelProperty("处理人")
+    private String handler;
+
+    @ApiModelProperty("状态(处理中/已解除/已关闭)")
+    private String status;
+
+    @ApiModelProperty("最近回访时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private LocalDateTime lastVisitTime;
+
+    @ApiModelProperty("下次回访时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private LocalDateTime nextVisitTime;
+
+    @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;
+
+    @TableLogic(value = "0", delval = "2")
+    @ApiModelProperty("删除标志(0=正常 2=删除)")
+    private String delFlag;
+}

+ 55 - 0
pipe-network-service/zksy-system/src/main/java/com/zksy/dispatch/domain/DisEventTrackLog.java

@@ -0,0 +1,55 @@
+package com.zksy.dispatch.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("dis_event_track_log")
+public class DisEventTrackLog {
+
+    @TableId(value = "id", type = IdType.AUTO)
+    @ApiModelProperty("主键ID")
+    private Long id;
+
+    @ApiModelProperty("关联跟踪ID")
+    private Long trackId;
+
+    @ApiModelProperty("事件编号")
+    private String eventNo;
+
+    @ApiModelProperty("标题")
+    private String title;
+
+    @ApiModelProperty("内容")
+    private String content;
+
+    @ApiModelProperty("类型:primary/success/warning/danger/info")
+    private String type;
+
+    @ApiModelProperty("态势评估")
+    private String assessment;
+
+    @ApiModelProperty("是否需要升级")
+    private String needUpgrade;
+
+    @ApiModelProperty("操作时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private LocalDateTime actionTime;
+
+    @ApiModelProperty("创建时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private LocalDateTime createTime;
+}

+ 80 - 0
pipe-network-service/zksy-system/src/main/java/com/zksy/dispatch/domain/DisEventTransfer.java

@@ -0,0 +1,80 @@
+package com.zksy.dispatch.domain;
+
+import com.baomidou.mybatisplus.annotation.*;
+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("dis_event_transfer")
+public class DisEventTransfer {
+
+    @TableId(value = "id", type = IdType.AUTO)
+    @ApiModelProperty("主键ID")
+    private Long id;
+
+    @ApiModelProperty("关联核实ID")
+    private Long verifyId;
+
+    @ApiModelProperty("事件编号")
+    private String eventNo;
+
+    @ApiModelProperty("事件类别")
+    private String category;
+
+    @ApiModelProperty("事件级别")
+    private String level;
+
+    @ApiModelProperty("摘要")
+    private String summary;
+
+    @ApiModelProperty("转接部门")
+    private String transferDept;
+
+    @ApiModelProperty("报送级别")
+    private String reportLevel;
+
+    @ApiModelProperty("转接时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private LocalDateTime transferTime;
+
+    @ApiModelProperty("转接备注")
+    private String transferRemark;
+
+    @ApiModelProperty("报送对象")
+    private String reportTargets;
+
+    @ApiModelProperty("附件路径(多个用,分隔)")
+    private String attachPaths;
+
+    @TableField(exist = false)
+    @ApiModelProperty("关联接报编号(来自核实记录)")
+    private String reportEventNo;
+
+    @ApiModelProperty("状态(待转接/已转接/已报送)")
+    private String status;
+
+    @ApiModelProperty("操作人")
+    private String operator;
+
+    @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;
+
+    @TableLogic(value = "0", delval = "2")
+    @ApiModelProperty("删除标志(0=正常 2=删除)")
+    private String delFlag;
+}

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

@@ -0,0 +1,52 @@
+package com.zksy.dispatch.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("dis_event_transfer_log")
+public class DisEventTransferLog {
+
+    @TableId(value = "id", type = IdType.AUTO)
+    @ApiModelProperty("主键ID")
+    private Long id;
+
+    @ApiModelProperty("关联转接ID")
+    private Long transferId;
+
+    @ApiModelProperty("事件编号")
+    private String eventNo;
+
+    @ApiModelProperty("动作类型:转接/报送")
+    private String actionType;
+
+    @ApiModelProperty("目标部门/层级")
+    private String actionTarget;
+
+    @ApiModelProperty("操作时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private LocalDateTime actionTime;
+
+    @ApiModelProperty("操作内容")
+    private String content;
+
+    @ApiModelProperty("类型:primary/success/warning/danger")
+    private String type;
+
+    @ApiModelProperty("创建时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private LocalDateTime createTime;
+}

+ 64 - 0
pipe-network-service/zksy-system/src/main/java/com/zksy/dispatch/domain/DisEventUrge.java

@@ -0,0 +1,64 @@
+package com.zksy.dispatch.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+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("dis_event_urge")
+public class DisEventUrge {
+
+    @TableId(value = "id", type = IdType.AUTO)
+    @ApiModelProperty("主键ID")
+    private Long id;
+
+    @ApiModelProperty("事件编号")
+    private String eventNo;
+
+    @ApiModelProperty("摘要")
+    private String summary;
+
+    @ApiModelProperty("接收人")
+    private String receiver;
+
+    @ApiModelProperty("接收部门")
+    private String receiverDept;
+
+    @ApiModelProperty("接收人电话")
+    private String receiverPhone;
+
+    @ApiModelProperty("催办次数")
+    private Integer urgeCount;
+
+    @ApiModelProperty("最近催办时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private LocalDateTime lastUrgeTime;
+
+    @ApiModelProperty("状态(待催办/催办中/已完成)")
+    private String status;
+
+    @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;
+
+    @TableLogic(value = "0", delval = "2")
+    @ApiModelProperty("删除标志(0=正常 2=删除)")
+    private String delFlag;
+}

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

@@ -0,0 +1,49 @@
+package com.zksy.dispatch.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("dis_event_urge_detail")
+public class DisEventUrgeDetail {
+
+    @TableId(value = "id", type = IdType.AUTO)
+    @ApiModelProperty("主键ID")
+    private Long id;
+
+    @ApiModelProperty("关联催办ID")
+    private Long urgeId;
+
+    @ApiModelProperty("事件编号")
+    private String eventNo;
+
+    @ApiModelProperty("催办方式:电话/短信/系统消息")
+    private String method;
+
+    @ApiModelProperty("催办内容")
+    private String content;
+
+    @ApiModelProperty("结果:已反馈/未反馈")
+    private String result;
+
+    @ApiModelProperty("催办时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private LocalDateTime urgeTime;
+
+    @ApiModelProperty("创建时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private LocalDateTime createTime;
+}

+ 80 - 0
pipe-network-service/zksy-system/src/main/java/com/zksy/dispatch/domain/DisEventVerify.java

@@ -0,0 +1,80 @@
+package com.zksy.dispatch.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+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("dis_event_verify")
+public class DisEventVerify {
+
+    @TableId(value = "id", type = IdType.AUTO)
+    @ApiModelProperty("主键ID")
+    private Long id;
+
+    @ApiModelProperty("关联接报ID")
+    private Long reportId;
+
+    @ApiModelProperty("事件编号")
+    private String eventNo;
+
+    @ApiModelProperty("事件类别")
+    private String category;
+
+    @ApiModelProperty("事件级别")
+    private String level;
+
+    @ApiModelProperty("地点")
+    private String location;
+
+    @ApiModelProperty("描述")
+    private String description;
+
+    @ApiModelProperty("判定时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private LocalDateTime judgeTime;
+
+    @ApiModelProperty("核实人")
+    private String verifier;
+
+    @ApiModelProperty("核实时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private LocalDateTime verifyTime;
+
+    @ApiModelProperty("核实意见")
+    private String opinion;
+
+    @ApiModelProperty("是否属实")
+    private String isReal;
+
+    @ApiModelProperty("事件ID")
+    private String eventId;
+
+    @ApiModelProperty("状态(待核实/已核实)")
+    private String status;
+
+    @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;
+
+    @TableLogic(value = "0", delval = "2")
+    @ApiModelProperty("删除标志(0=正常 2=删除)")
+    private String delFlag;
+}

+ 71 - 0
pipe-network-service/zksy-system/src/main/java/com/zksy/dispatch/domain/DisPlanApproval.java

@@ -0,0 +1,71 @@
+package com.zksy.dispatch.domain;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+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("dis_plan_approval")
+public class DisPlanApproval {
+
+    @TableId(value = "id", type = IdType.AUTO)
+    @ApiModelProperty("主键ID")
+    private Long id;
+
+    @ApiModelProperty("预案ID")
+    private Long planId;
+
+    @ApiModelProperty("预案名称")
+    private String planName;
+
+    @ApiModelProperty("预案类型")
+    private String planType;
+
+    @ApiModelProperty("预案级别")
+    private String planLevel;
+
+    @ApiModelProperty("版本号")
+    private String version;
+
+    @ApiModelProperty("审批人(多人逗号分隔)")
+    private String reviewers;
+
+    @ApiModelProperty("审批记录")
+    private String auditRecord;
+
+    @ApiModelProperty("状态:编辑中/审批中/终审中/已发布/待修正")
+    private String status;
+
+    @ApiModelProperty("提交时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private LocalDateTime submitTime;
+
+    @ApiModelProperty("审批完成时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private LocalDateTime approveTime;
+
+    @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;
+
+    @TableLogic(value = "0", delval = "2")
+    @ApiModelProperty("删除标志(0=正常 2=删除)")
+    private String delFlag;
+}

+ 55 - 0
pipe-network-service/zksy-system/src/main/java/com/zksy/dispatch/domain/DisPlanApprovalStep.java

@@ -0,0 +1,55 @@
+package com.zksy.dispatch.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("dis_plan_approval_step")
+public class DisPlanApprovalStep {
+
+    @TableId(value = "id", type = IdType.AUTO)
+    @ApiModelProperty("主键ID")
+    private Long id;
+
+    @ApiModelProperty("审批主表ID")
+    private Long approvalId;
+
+    @ApiModelProperty("环节序号")
+    private Integer stepOrder;
+
+    @ApiModelProperty("环节名称")
+    private String title;
+
+    @ApiModelProperty("审批人")
+    private String approver;
+
+    @ApiModelProperty("权限描述")
+    private String permission;
+
+    @ApiModelProperty("审批意见")
+    private String opinion;
+
+    @ApiModelProperty("审批结果")
+    private String result;
+
+    @ApiModelProperty("审批时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private LocalDateTime approveTime;
+
+    @ApiModelProperty("创建时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private LocalDateTime createTime;
+}

+ 50 - 0
pipe-network-service/zksy-system/src/main/java/com/zksy/dispatch/domain/DisPlanCategory.java

@@ -0,0 +1,50 @@
+package com.zksy.dispatch.domain;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+/**
+ * 预案分类
+ */
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@TableName("dis_plan_category")
+public class DisPlanCategory {
+
+    @TableId(value = "id", type = IdType.AUTO)
+    @ApiModelProperty("主键ID")
+    private Long id;
+
+    @ApiModelProperty("父级ID")
+    private Long parentId;
+
+    @ApiModelProperty("分类名称")
+    private String label;
+
+    @ApiModelProperty("排序号")
+    private Integer sortOrder;
+
+    @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;
+
+    @TableLogic(value = "0", delval = "2")
+    @ApiModelProperty("删除标志(0=正常 2=删除)")
+    private String delFlag;
+
+    @TableField(exist = false)
+    @ApiModelProperty("子分类列表")
+    private List<DisPlanCategory> children;
+}

+ 28 - 0
pipe-network-service/zksy-system/src/main/java/com/zksy/dispatch/dto/DisEventGradePageDTO.java

@@ -0,0 +1,28 @@
+package com.zksy.dispatch.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+@ApiModel(value = "应急事件分级标准分页查询入参", description = "应急事件分级标准分页查询入参")
+public class DisEventGradePageDTO implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "分类")
+    private String category;
+
+    @ApiModelProperty(value = "级别")
+    private String level;
+
+    @ApiModelProperty(value = "状态")
+    private String status;
+
+    @ApiModelProperty(value = "当前记录起始索引", required = true)
+    private Long pageNum;
+
+    @ApiModelProperty(value = "每页显示记录数", required = true)
+    private Long pageSize;
+}

+ 34 - 0
pipe-network-service/zksy-system/src/main/java/com/zksy/dispatch/dto/DisEventPlanPageDTO.java

@@ -0,0 +1,34 @@
+package com.zksy.dispatch.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+@ApiModel(value = "应急预案分页查询入参", description = "应急预案分页查询入参")
+public class DisEventPlanPageDTO implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "预案名称")
+    private String planName;
+
+    @ApiModelProperty(value = "预案类型")
+    private String planType;
+
+    @ApiModelProperty(value = "预案级别")
+    private String planLevel;
+
+    @ApiModelProperty(value = "状态")
+    private String status;
+
+    @ApiModelProperty(value = "分类ID")
+    private Long categoryId;
+
+    @ApiModelProperty(value = "当前记录起始索引", required = true)
+    private Long pageNum;
+
+    @ApiModelProperty(value = "每页显示记录数", required = true)
+    private Long pageSize;
+}

+ 28 - 0
pipe-network-service/zksy-system/src/main/java/com/zksy/dispatch/dto/DisPlanApprovalPageDTO.java

@@ -0,0 +1,28 @@
+package com.zksy.dispatch.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+@ApiModel(value = "应急预案审批分页查询入参", description = "应急预案审批分页查询入参")
+public class DisPlanApprovalPageDTO implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "预案名称")
+    private String planName;
+
+    @ApiModelProperty(value = "预案类型")
+    private String planType;
+
+    @ApiModelProperty(value = "状态")
+    private String status;
+
+    @ApiModelProperty(value = "当前记录起始索引", required = true)
+    private Long pageNum;
+
+    @ApiModelProperty(value = "每页显示记录数", required = true)
+    private Long pageSize;
+}

+ 25 - 0
pipe-network-service/zksy-system/src/main/java/com/zksy/dispatch/dto/DisPlanApprovalStepPageDTO.java

@@ -0,0 +1,25 @@
+package com.zksy.dispatch.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+@ApiModel(value = "应急预案审批步骤分页查询入参", description = "应急预案审批步骤分页查询入参")
+public class DisPlanApprovalStepPageDTO implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "审批主表ID")
+    private Long approvalId;
+
+    @ApiModelProperty(value = "审批结果")
+    private String result;
+
+    @ApiModelProperty(value = "当前记录起始索引", required = true)
+    private Long pageNum;
+
+    @ApiModelProperty(value = "每页显示记录数", required = true)
+    private Long pageSize;
+}

+ 25 - 0
pipe-network-service/zksy-system/src/main/java/com/zksy/dispatch/dto/DisPlanCategoryPageDTO.java

@@ -0,0 +1,25 @@
+package com.zksy.dispatch.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+@ApiModel(value = "预案分类分页查询入参", description = "预案分类分页查询入参")
+public class DisPlanCategoryPageDTO implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "分类名称")
+    private String label;
+
+    @ApiModelProperty(value = "父级ID")
+    private Long parentId;
+
+    @ApiModelProperty(value = "当前记录起始索引", required = true)
+    private Long pageNum;
+
+    @ApiModelProperty(value = "每页显示记录数", required = true)
+    private Long pageSize;
+}

+ 28 - 0
pipe-network-service/zksy-system/src/main/java/com/zksy/dispatch/dto/EventReportDTO.java

@@ -0,0 +1,28 @@
+package com.zksy.dispatch.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+@Data
+public class EventReportDTO implements Serializable {
+
+    @ApiModelProperty("转接记录ID")
+    private Long id;
+
+    @ApiModelProperty("报送层级列表")
+    private List<String> reportTargets;
+
+    @ApiModelProperty("附件列表")
+    private List<AttachmentDTO> attachments;
+
+    @Data
+    public static class AttachmentDTO implements Serializable {
+        @ApiModelProperty("原始文件名")
+        private String fileName;
+        @ApiModelProperty("文件路径/URL")
+        private String url;
+    }
+}

+ 37 - 0
pipe-network-service/zksy-system/src/main/java/com/zksy/dispatch/dto/EventReportPageInDTO.java

@@ -0,0 +1,37 @@
+package com.zksy.dispatch.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+@ApiModel(value = "接报管理分页查询入参", description = "接报管理分页查询入参")
+public class EventReportPageInDTO implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "来源")
+    private String source;
+
+    @ApiModelProperty(value = "状态")
+    private String status;
+
+    @ApiModelProperty(value = "地点")
+    private String location;
+
+    @ApiModelProperty(value = "开始时间")
+    private String beginTime;
+
+    @ApiModelProperty(value = "结束时间")
+    private String endTime;
+
+    @ApiModelProperty(value = "关键字(事件编号/描述/报告人)")
+    private String keyword;
+
+    @ApiModelProperty(value = "当前记录起始索引", required = true)
+    private Long pageNum;
+
+    @ApiModelProperty(value = "每页显示记录数", required = true)
+    private Long pageSize;
+}

+ 40 - 0
pipe-network-service/zksy-system/src/main/java/com/zksy/dispatch/dto/EventTrackPageInDTO.java

@@ -0,0 +1,40 @@
+package com.zksy.dispatch.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+@ApiModel(value = "跟踪解除分页查询入参", description = "跟踪解除分页查询入参")
+public class EventTrackPageInDTO implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "事件编号")
+    private String eventNo;
+
+    @ApiModelProperty(value = "事件类别")
+    private String category;
+
+    @ApiModelProperty(value = "事件级别")
+    private String level;
+
+    @ApiModelProperty(value = "状态")
+    private String status;
+
+    @ApiModelProperty(value = "处理人")
+    private String handler;
+
+    @ApiModelProperty(value = "开始时间")
+    private String beginTime;
+
+    @ApiModelProperty(value = "结束时间")
+    private String endTime;
+
+    @ApiModelProperty(value = "当前记录起始索引", required = true)
+    private Long pageNum;
+
+    @ApiModelProperty(value = "每页显示记录数", required = true)
+    private Long pageSize;
+}

+ 40 - 0
pipe-network-service/zksy-system/src/main/java/com/zksy/dispatch/dto/EventTransferPageInDTO.java

@@ -0,0 +1,40 @@
+package com.zksy.dispatch.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+@ApiModel(value = "转接报送分页查询入参", description = "转接报送分页查询入参")
+public class EventTransferPageInDTO implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "事件编号")
+    private String eventNo;
+
+    @ApiModelProperty(value = "事件类别")
+    private String category;
+
+    @ApiModelProperty(value = "事件级别")
+    private String level;
+
+    @ApiModelProperty(value = "状态")
+    private String status;
+
+    @ApiModelProperty(value = "转接部门")
+    private String transferDept;
+
+    @ApiModelProperty(value = "开始时间")
+    private String beginTime;
+
+    @ApiModelProperty(value = "结束时间")
+    private String endTime;
+
+    @ApiModelProperty(value = "当前记录起始索引", required = true)
+    private Long pageNum;
+
+    @ApiModelProperty(value = "每页显示记录数", required = true)
+    private Long pageSize;
+}

+ 37 - 0
pipe-network-service/zksy-system/src/main/java/com/zksy/dispatch/dto/EventUrgePageInDTO.java

@@ -0,0 +1,37 @@
+package com.zksy.dispatch.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+@ApiModel(value = "工作催办分页查询入参", description = "工作催办分页查询入参")
+public class EventUrgePageInDTO implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "事件编号")
+    private String eventNo;
+
+    @ApiModelProperty(value = "接收人")
+    private String receiver;
+
+    @ApiModelProperty(value = "接收部门")
+    private String receiverDept;
+
+    @ApiModelProperty(value = "状态")
+    private String status;
+
+    @ApiModelProperty(value = "开始时间")
+    private String beginTime;
+
+    @ApiModelProperty(value = "结束时间")
+    private String endTime;
+
+    @ApiModelProperty(value = "当前记录起始索引", required = true)
+    private Long pageNum;
+
+    @ApiModelProperty(value = "每页显示记录数", required = true)
+    private Long pageSize;
+}

+ 40 - 0
pipe-network-service/zksy-system/src/main/java/com/zksy/dispatch/dto/EventVerifyPageInDTO.java

@@ -0,0 +1,40 @@
+package com.zksy.dispatch.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+
+@Data
+@ApiModel(value = "初判核实分页查询入参", description = "初判核实分页查询入参")
+public class EventVerifyPageInDTO implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "事件编号")
+    private String eventNo;
+
+    @ApiModelProperty(value = "事件类别")
+    private String category;
+
+    @ApiModelProperty(value = "事件级别")
+    private String level;
+
+    @ApiModelProperty(value = "状态")
+    private String status;
+
+    @ApiModelProperty(value = "是否属实")
+    private String isReal;
+
+    @ApiModelProperty(value = "开始时间")
+    private String beginTime;
+
+    @ApiModelProperty(value = "结束时间")
+    private String endTime;
+
+    @ApiModelProperty(value = "当前记录起始索引", required = true)
+    private Long pageNum;
+
+    @ApiModelProperty(value = "每页显示记录数", required = true)
+    private Long pageSize;
+}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

+ 18 - 0
pipe-network-service/zksy-system/src/main/java/com/zksy/dispatch/service/DisEventGradeService.java

@@ -0,0 +1,18 @@
+package com.zksy.dispatch.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zksy.dispatch.domain.DisEventGrade;
+import com.zksy.dispatch.dto.DisEventGradePageDTO;
+
+import java.util.List;
+
+public interface DisEventGradeService extends IService<DisEventGrade> {
+
+    Page<DisEventGrade> findByPage(DisEventGradePageDTO dto);
+
+    /**
+     * 根据分类查询分级标准
+     */
+    List<DisEventGrade> listByCategory(String category);
+}

+ 11 - 0
pipe-network-service/zksy-system/src/main/java/com/zksy/dispatch/service/DisEventPlanService.java

@@ -0,0 +1,11 @@
+package com.zksy.dispatch.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zksy.dispatch.domain.DisEventPlan;
+import com.zksy.dispatch.dto.DisEventPlanPageDTO;
+
+public interface DisEventPlanService extends IService<DisEventPlan> {
+
+    Page<DisEventPlan> findByPage(DisEventPlanPageDTO dto);
+}

+ 27 - 0
pipe-network-service/zksy-system/src/main/java/com/zksy/dispatch/service/DisEventReportService.java

@@ -0,0 +1,27 @@
+package com.zksy.dispatch.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zksy.dispatch.domain.DisEventReport;
+import com.zksy.dispatch.dto.EventReportPageInDTO;
+
+/**
+ * 接报管理服务接口
+ */
+public interface DisEventReportService extends IService<DisEventReport> {
+
+    /**
+     * 分页查询接报记录
+     */
+    Page<DisEventReport> findByPage(EventReportPageInDTO dto);
+
+    /**
+     * 受理接报
+     */
+    boolean accept(Long id);
+
+    /**
+     * 驳回接报
+     */
+    boolean reject(Long id, String remark);
+}

+ 40 - 0
pipe-network-service/zksy-system/src/main/java/com/zksy/dispatch/service/DisEventTrackService.java

@@ -0,0 +1,40 @@
+package com.zksy.dispatch.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zksy.dispatch.domain.DisEventTrack;
+import com.zksy.dispatch.domain.DisEventTrackLog;
+import com.zksy.dispatch.dto.EventTrackPageInDTO;
+
+import java.util.List;
+
+/**
+ * 跟踪解除服务接口
+ */
+public interface DisEventTrackService extends IService<DisEventTrack> {
+
+    /**
+     * 分页查询跟踪记录
+     */
+    Page<DisEventTrack> findByPage(EventTrackPageInDTO dto);
+
+    /**
+     * 添加跟踪日志
+     */
+    boolean addTrackLog(DisEventTrackLog log);
+
+    /**
+     * 解除跟踪
+     */
+    boolean release(Long id);
+
+    /**
+     * 关闭跟踪
+     */
+    boolean close(Long id);
+
+    /**
+     * 查询跟踪日志列表
+     */
+    List<DisEventTrackLog> getTrackLogs(Long trackId);
+}

+ 36 - 0
pipe-network-service/zksy-system/src/main/java/com/zksy/dispatch/service/DisEventTransferService.java

@@ -0,0 +1,36 @@
+package com.zksy.dispatch.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zksy.dispatch.domain.DisEventTransfer;
+import com.zksy.dispatch.domain.DisEventTransferLog;
+import com.zksy.dispatch.dto.EventReportDTO;
+import com.zksy.dispatch.dto.EventTransferPageInDTO;
+
+import java.util.List;
+
+/**
+ * 转接报送服务接口
+ */
+public interface DisEventTransferService extends IService<DisEventTransfer> {
+
+    /**
+     * 分页查询转接报送记录
+     */
+    Page<DisEventTransfer> findByPage(EventTransferPageInDTO dto);
+
+    /**
+     * 执行转接
+     */
+    boolean doTransfer(DisEventTransfer entity);
+
+    /**
+     * 执行报送
+     */
+    boolean doReport(EventReportDTO dto);
+
+    /**
+     * 查询转接日志
+     */
+    List<DisEventTransferLog> getTransferLogs(Long transferId);
+}

+ 35 - 0
pipe-network-service/zksy-system/src/main/java/com/zksy/dispatch/service/DisEventUrgeService.java

@@ -0,0 +1,35 @@
+package com.zksy.dispatch.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zksy.dispatch.domain.DisEventUrge;
+import com.zksy.dispatch.domain.DisEventUrgeDetail;
+import com.zksy.dispatch.dto.EventUrgePageInDTO;
+
+import java.util.List;
+
+/**
+ * 工作催办服务接口
+ */
+public interface DisEventUrgeService extends IService<DisEventUrge> {
+
+    /**
+     * 分页查询催办记录
+     */
+    Page<DisEventUrge> findByPage(EventUrgePageInDTO dto);
+
+    /**
+     * 执行催办
+     */
+    boolean doUrge(DisEventUrgeDetail detail);
+
+    /**
+     * 办结核实
+     */
+    boolean closeUrge(Long id);
+
+    /**
+     * 查询催办明细列表
+     */
+    List<DisEventUrgeDetail> getUrgeDetails(Long urgeId);
+}

+ 22 - 0
pipe-network-service/zksy-system/src/main/java/com/zksy/dispatch/service/DisEventVerifyService.java

@@ -0,0 +1,22 @@
+package com.zksy.dispatch.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zksy.dispatch.domain.DisEventVerify;
+import com.zksy.dispatch.dto.EventVerifyPageInDTO;
+
+/**
+ * 初判核实服务接口
+ */
+public interface DisEventVerifyService extends IService<DisEventVerify> {
+
+    /**
+     * 分页查询初判核实记录
+     */
+    Page<DisEventVerify> findByPage(EventVerifyPageInDTO dto);
+
+    /**
+     * 核实事件
+     */
+    boolean verify(DisEventVerify entity);
+}

+ 36 - 0
pipe-network-service/zksy-system/src/main/java/com/zksy/dispatch/service/DisPlanApprovalService.java

@@ -0,0 +1,36 @@
+package com.zksy.dispatch.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zksy.dispatch.domain.DisPlanApproval;
+import com.zksy.dispatch.dto.DisPlanApprovalPageDTO;
+
+public interface DisPlanApprovalService extends IService<DisPlanApproval> {
+
+    Page<DisPlanApproval> findByPage(DisPlanApprovalPageDTO dto);
+
+    /**
+     * 提交审批:编辑中 -> 审批中
+     */
+    boolean submitForApproval(Long id);
+
+    /**
+     * 初审通过:审批中 -> 终审中
+     */
+    boolean approve(Long id, String opinion);
+
+    /**
+     * 驳回:审批中/终审中 -> 待修正
+     */
+    boolean reject(Long id, String opinion);
+
+    /**
+     * 终审通过并发布:终审中 -> 已发布
+     */
+    boolean publish(Long id, String opinion);
+
+    /**
+     * 根据预案ID创建审批记录并提交
+     */
+    boolean createFromPlan(Long planId);
+}

+ 18 - 0
pipe-network-service/zksy-system/src/main/java/com/zksy/dispatch/service/DisPlanApprovalStepService.java

@@ -0,0 +1,18 @@
+package com.zksy.dispatch.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zksy.dispatch.domain.DisPlanApprovalStep;
+import com.zksy.dispatch.dto.DisPlanApprovalStepPageDTO;
+
+import java.util.List;
+
+public interface DisPlanApprovalStepService extends IService<DisPlanApprovalStep> {
+
+    Page<DisPlanApprovalStep> findByPage(DisPlanApprovalStepPageDTO dto);
+
+    /**
+     * 根据审批主表ID查询步骤列表
+     */
+    List<DisPlanApprovalStep> listByApprovalId(Long approvalId);
+}

+ 18 - 0
pipe-network-service/zksy-system/src/main/java/com/zksy/dispatch/service/DisPlanCategoryService.java

@@ -0,0 +1,18 @@
+package com.zksy.dispatch.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.zksy.dispatch.domain.DisPlanCategory;
+import com.zksy.dispatch.dto.DisPlanCategoryPageDTO;
+
+import java.util.List;
+
+public interface DisPlanCategoryService extends IService<DisPlanCategory> {
+
+    Page<DisPlanCategory> findByPage(DisPlanCategoryPageDTO dto);
+
+    /**
+     * 获取分类树
+     */
+    List<DisPlanCategory> getCategoryTree();
+}

+ 39 - 0
pipe-network-service/zksy-system/src/main/java/com/zksy/dispatch/service/impl/DisEventGradeServiceImpl.java

@@ -0,0 +1,39 @@
+package com.zksy.dispatch.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zksy.dispatch.domain.DisEventGrade;
+import com.zksy.dispatch.dto.DisEventGradePageDTO;
+import com.zksy.dispatch.mapper.DisEventGradeMapper;
+import com.zksy.dispatch.service.DisEventGradeService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Slf4j
+@Service
+public class DisEventGradeServiceImpl extends ServiceImpl<DisEventGradeMapper, DisEventGrade>
+        implements DisEventGradeService {
+
+    @Override
+    public Page<DisEventGrade> findByPage(DisEventGradePageDTO dto) {
+        Page<DisEventGrade> page = new Page<>(dto.getPageNum(), dto.getPageSize());
+        LambdaQueryWrapper<DisEventGrade> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(dto.getCategory() != null && !dto.getCategory().isEmpty(), DisEventGrade::getCategory, dto.getCategory());
+        wrapper.eq(dto.getLevel() != null && !dto.getLevel().isEmpty(), DisEventGrade::getLevel, dto.getLevel());
+        wrapper.eq(dto.getStatus() != null && !dto.getStatus().isEmpty(), DisEventGrade::getStatus, dto.getStatus());
+        wrapper.orderByAsc(DisEventGrade::getCategory);
+        wrapper.orderByAsc(DisEventGrade::getLevel);
+        return this.page(page, wrapper);
+    }
+
+    @Override
+    public List<DisEventGrade> listByCategory(String category) {
+        LambdaQueryWrapper<DisEventGrade> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(DisEventGrade::getCategory, category);
+        wrapper.orderByAsc(DisEventGrade::getLevel);
+        return this.list(wrapper);
+    }
+}

+ 30 - 0
pipe-network-service/zksy-system/src/main/java/com/zksy/dispatch/service/impl/DisEventPlanServiceImpl.java

@@ -0,0 +1,30 @@
+package com.zksy.dispatch.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zksy.dispatch.domain.DisEventPlan;
+import com.zksy.dispatch.dto.DisEventPlanPageDTO;
+import com.zksy.dispatch.mapper.DisEventPlanMapper;
+import com.zksy.dispatch.service.DisEventPlanService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+@Slf4j
+@Service
+public class DisEventPlanServiceImpl extends ServiceImpl<DisEventPlanMapper, DisEventPlan>
+        implements DisEventPlanService {
+
+    @Override
+    public Page<DisEventPlan> findByPage(DisEventPlanPageDTO dto) {
+        Page<DisEventPlan> page = new Page<>(dto.getPageNum(), dto.getPageSize());
+        LambdaQueryWrapper<DisEventPlan> wrapper = new LambdaQueryWrapper<>();
+        wrapper.like(dto.getPlanName() != null && !dto.getPlanName().isEmpty(), DisEventPlan::getPlanName, dto.getPlanName());
+        wrapper.eq(dto.getPlanType() != null && !dto.getPlanType().isEmpty(), DisEventPlan::getPlanType, dto.getPlanType());
+        wrapper.eq(dto.getPlanLevel() != null && !dto.getPlanLevel().isEmpty(), DisEventPlan::getPlanLevel, dto.getPlanLevel());
+        wrapper.eq(dto.getStatus() != null && !dto.getStatus().isEmpty(), DisEventPlan::getStatus, dto.getStatus());
+        wrapper.eq(dto.getCategoryId() != null, DisEventPlan::getCategoryId, dto.getCategoryId());
+        wrapper.orderByDesc(DisEventPlan::getCreateTime);
+        return this.page(page, wrapper);
+    }
+}

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

@@ -0,0 +1,104 @@
+package com.zksy.dispatch.service.impl;
+
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zksy.dispatch.domain.DisEventReport;
+import com.zksy.dispatch.domain.DisEventVerify;
+import com.zksy.dispatch.dto.EventReportPageInDTO;
+import com.zksy.dispatch.mapper.DisEventReportMapper;
+import com.zksy.dispatch.mapper.DisEventVerifyMapper;
+import com.zksy.dispatch.service.DisEventReportService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+
+@Slf4j
+@Service
+public class DisEventReportServiceImpl extends ServiceImpl<DisEventReportMapper, DisEventReport>
+        implements DisEventReportService {
+
+    @Autowired
+    private DisEventVerifyMapper verifyMapper;
+
+    @Override
+    public boolean save(DisEventReport entity) {
+        if (StrUtil.isBlank(entity.getEventNo())) {
+            String today = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyyMMdd"));
+            long count = this.count() + 1;
+            entity.setEventNo("JB" + today + String.format("%03d", count));
+        }
+        if (entity.getStatus() == null) entity.setStatus("待受理");
+        if (entity.getCreateTime() == null) entity.setCreateTime(LocalDateTime.now());
+        return super.save(entity);
+    }
+
+    @Override
+    public Page<DisEventReport> findByPage(EventReportPageInDTO dto) {
+        Page<DisEventReport> page = new Page<>(dto.getPageNum(), dto.getPageSize());
+        LambdaQueryWrapper<DisEventReport> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(StrUtil.isNotBlank(dto.getSource()), DisEventReport::getSource, dto.getSource());
+        wrapper.eq(StrUtil.isNotBlank(dto.getStatus()), DisEventReport::getStatus, dto.getStatus());
+        wrapper.eq(StrUtil.isNotBlank(dto.getLocation()), DisEventReport::getLocation, dto.getLocation());
+        if (StrUtil.isNotBlank(dto.getKeyword())) {
+            wrapper.and(w -> w.like(DisEventReport::getEventNo, dto.getKeyword())
+                    .or().like(DisEventReport::getDescription, dto.getKeyword())
+                    .or().like(DisEventReport::getReporter, dto.getKeyword()));
+        }
+        if (StrUtil.isNotBlank(dto.getBeginTime()) && StrUtil.isNotBlank(dto.getEndTime())) {
+            wrapper.between(DisEventReport::getCreateTime,
+                    LocalDateTime.parse(dto.getBeginTime()),
+                    LocalDateTime.parse(dto.getEndTime()));
+        }
+        wrapper.orderByDesc(DisEventReport::getCreateTime);
+        return this.page(page, wrapper);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean accept(Long id) {
+        DisEventReport entity = this.getById(id);
+        if (entity == null) {
+            log.warn("接报记录不存在: id={}", id);
+            return false;
+        }
+        entity.setStatus("已受理");
+        entity.setUpdateTime(LocalDateTime.now());
+        this.updateById(entity);
+
+        // 自动创建初判核实记录(如已存在则跳过,避免重复受理报错)
+        LambdaQueryWrapper<DisEventVerify> existWrapper = new LambdaQueryWrapper<>();
+        existWrapper.eq(DisEventVerify::getEventNo, entity.getEventNo());
+        if (verifyMapper.selectCount(existWrapper) == 0) {
+            DisEventVerify verify = new DisEventVerify();
+            verify.setReportId(entity.getId());
+            verify.setEventNo(entity.getEventNo());
+            verify.setLocation(entity.getLocation());
+            verify.setDescription(entity.getDescription());
+            verify.setStatus("待核实");
+            verify.setJudgeTime(LocalDateTime.now());
+            verify.setCreateTime(LocalDateTime.now());
+            verifyMapper.insert(verify);
+        }
+        return true;
+    }
+
+    @Override
+    public boolean reject(Long id, String remark) {
+        DisEventReport entity = this.getById(id);
+        if (entity == null) {
+            log.warn("接报记录不存在: id={}", id);
+            return false;
+        }
+        entity.setStatus("已驳回");
+        entity.setRemark(remark);
+        entity.setUpdateTime(LocalDateTime.now());
+        return this.updateById(entity);
+    }
+}

+ 111 - 0
pipe-network-service/zksy-system/src/main/java/com/zksy/dispatch/service/impl/DisEventTrackServiceImpl.java

@@ -0,0 +1,111 @@
+package com.zksy.dispatch.service.impl;
+
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zksy.dispatch.domain.DisEventTrack;
+import com.zksy.dispatch.domain.DisEventTrackLog;
+import com.zksy.dispatch.dto.EventTrackPageInDTO;
+import com.zksy.dispatch.mapper.DisEventTrackLogMapper;
+import com.zksy.dispatch.mapper.DisEventTrackMapper;
+import com.zksy.dispatch.service.DisEventTrackService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Slf4j
+@Service
+public class DisEventTrackServiceImpl extends ServiceImpl<DisEventTrackMapper, DisEventTrack>
+        implements DisEventTrackService {
+
+    @Autowired
+    private DisEventTrackLogMapper trackLogMapper;
+
+    @Override
+    public Page<DisEventTrack> findByPage(EventTrackPageInDTO dto) {
+        Page<DisEventTrack> page = new Page<>(dto.getPageNum(), dto.getPageSize());
+        LambdaQueryWrapper<DisEventTrack> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(StrUtil.isNotBlank(dto.getEventNo()), DisEventTrack::getEventNo, dto.getEventNo());
+        wrapper.eq(StrUtil.isNotBlank(dto.getCategory()), DisEventTrack::getCategory, dto.getCategory());
+        wrapper.eq(StrUtil.isNotBlank(dto.getLevel()), DisEventTrack::getLevel, dto.getLevel());
+        wrapper.eq(StrUtil.isNotBlank(dto.getStatus()), DisEventTrack::getStatus, dto.getStatus());
+        wrapper.eq(StrUtil.isNotBlank(dto.getHandler()), DisEventTrack::getHandler, dto.getHandler());
+        if (StrUtil.isNotBlank(dto.getBeginTime()) && StrUtil.isNotBlank(dto.getEndTime())) {
+            wrapper.between(DisEventTrack::getCreateTime,
+                    LocalDateTime.parse(dto.getBeginTime()),
+                    LocalDateTime.parse(dto.getEndTime()));
+        }
+        wrapper.orderByDesc(DisEventTrack::getCreateTime);
+        return this.page(page, wrapper);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean addTrackLog(DisEventTrackLog log) {
+        if (log.getTrackId() == null) {
+            return false;
+        }
+        DisEventTrack track = this.getById(log.getTrackId());
+        if (track == null) {
+            return false;
+        }
+        log.setEventNo(track.getEventNo());
+        log.setActionTime(LocalDateTime.now());
+        log.setCreateTime(LocalDateTime.now());
+        trackLogMapper.insert(log);
+
+        track.setLastVisitTime(LocalDateTime.now());
+        track.setUpdateTime(LocalDateTime.now());
+        this.updateById(track);
+        return true;
+    }
+
+    @Override
+    public boolean release(Long id) {
+        DisEventTrack track = this.getById(id);
+        if (track == null) {
+            log.warn("跟踪记录不存在: id={}", id);
+            return false;
+        }
+        track.setStatus("已解除");
+        track.setUpdateTime(LocalDateTime.now());
+        return this.updateById(track);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean close(Long id) {
+        DisEventTrack track = this.getById(id);
+        if (track == null) {
+            log.warn("跟踪记录不存在: id={}", id);
+            return false;
+        }
+        track.setStatus("已关闭");
+        track.setUpdateTime(LocalDateTime.now());
+        this.updateById(track);
+
+        DisEventTrackLog logEntity = new DisEventTrackLog();
+        logEntity.setTrackId(track.getId());
+        logEntity.setEventNo(track.getEventNo());
+        logEntity.setTitle("事件关闭");
+        logEntity.setContent("跟踪已关闭");
+        logEntity.setType("success");
+        logEntity.setActionTime(LocalDateTime.now());
+        logEntity.setCreateTime(LocalDateTime.now());
+        trackLogMapper.insert(logEntity);
+        return true;
+    }
+
+    @Override
+    public List<DisEventTrackLog> getTrackLogs(Long trackId) {
+        LambdaQueryWrapper<DisEventTrackLog> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(DisEventTrackLog::getTrackId, trackId);
+        wrapper.orderByDesc(DisEventTrackLog::getActionTime);
+        return trackLogMapper.selectList(wrapper);
+    }
+}

+ 150 - 0
pipe-network-service/zksy-system/src/main/java/com/zksy/dispatch/service/impl/DisEventTransferServiceImpl.java

@@ -0,0 +1,150 @@
+package com.zksy.dispatch.service.impl;
+
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import cn.hutool.core.collection.CollUtil;
+import com.zksy.dispatch.domain.DisEventTransfer;
+import com.zksy.dispatch.domain.DisEventTransferLog;
+import com.zksy.dispatch.domain.DisEventVerify;
+import com.zksy.dispatch.dto.EventReportDTO;
+import com.zksy.dispatch.dto.EventTransferPageInDTO;
+import com.zksy.dispatch.mapper.DisEventTransferLogMapper;
+import com.zksy.dispatch.mapper.DisEventTransferMapper;
+import com.zksy.dispatch.mapper.DisEventVerifyMapper;
+import com.zksy.dispatch.service.DisEventTransferService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Slf4j
+@Service
+public class DisEventTransferServiceImpl extends ServiceImpl<DisEventTransferMapper, DisEventTransfer>
+        implements DisEventTransferService {
+
+    @Autowired
+    private DisEventTransferLogMapper transferLogMapper;
+
+    @Autowired
+    private DisEventVerifyMapper verifyMapper;
+
+    @Override
+    public Page<DisEventTransfer> findByPage(EventTransferPageInDTO dto) {
+        Page<DisEventTransfer> page = new Page<>(dto.getPageNum(), dto.getPageSize());
+        LambdaQueryWrapper<DisEventTransfer> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(StrUtil.isNotBlank(dto.getEventNo()), DisEventTransfer::getEventNo, dto.getEventNo());
+        wrapper.eq(StrUtil.isNotBlank(dto.getCategory()), DisEventTransfer::getCategory, dto.getCategory());
+        wrapper.eq(StrUtil.isNotBlank(dto.getLevel()), DisEventTransfer::getLevel, dto.getLevel());
+        wrapper.eq(StrUtil.isNotBlank(dto.getStatus()), DisEventTransfer::getStatus, dto.getStatus());
+        wrapper.eq(StrUtil.isNotBlank(dto.getTransferDept()), DisEventTransfer::getTransferDept, dto.getTransferDept());
+        if (StrUtil.isNotBlank(dto.getBeginTime()) && StrUtil.isNotBlank(dto.getEndTime())) {
+            wrapper.between(DisEventTransfer::getCreateTime,
+                    LocalDateTime.parse(dto.getBeginTime()),
+                    LocalDateTime.parse(dto.getEndTime()));
+        }
+        wrapper.orderByDesc(DisEventTransfer::getCreateTime);
+        Page<DisEventTransfer> result = this.page(page, wrapper);
+
+        // 批量查询关联的核实记录,回填接报编号(原JB事件编号)
+        if (CollUtil.isNotEmpty(result.getRecords())) {
+            List<Long> verifyIds = result.getRecords().stream()
+                    .map(DisEventTransfer::getVerifyId)
+                    .filter(id -> id != null)
+                    .distinct()
+                    .collect(java.util.stream.Collectors.toList());
+            if (!verifyIds.isEmpty()) {
+                List<DisEventVerify> verifies = verifyMapper.selectBatchIds(verifyIds);
+                java.util.Map<Long, String> verifyEventNoMap = verifies.stream()
+                        .collect(java.util.stream.Collectors.toMap(DisEventVerify::getId, DisEventVerify::getEventNo, (a, b) -> a));
+                for (DisEventTransfer t : result.getRecords()) {
+                    if (t.getVerifyId() != null) {
+                        t.setReportEventNo(verifyEventNoMap.get(t.getVerifyId()));
+                    }
+                }
+            }
+        }
+        return result;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean doTransfer(DisEventTransfer entity) {
+        if (entity.getId() == null) {
+            log.warn("转接记录ID为空");
+            return false;
+        }
+        DisEventTransfer existing = this.getById(entity.getId());
+        if (existing == null) {
+            log.warn("转接记录不存在: id={}", entity.getId());
+            return false;
+        }
+        existing.setTransferDept(entity.getTransferDept());
+        existing.setTransferRemark(entity.getTransferRemark());
+        existing.setTransferTime(LocalDateTime.now());
+        existing.setStatus("已转接");
+        existing.setOperator(entity.getOperator());
+        existing.setUpdateTime(LocalDateTime.now());
+        this.updateById(existing);
+
+        DisEventTransferLog logEntity = new DisEventTransferLog();
+        logEntity.setTransferId(existing.getId());
+        logEntity.setEventNo(existing.getEventNo());
+        logEntity.setActionType("转接");
+        logEntity.setActionTarget(entity.getTransferDept());
+        logEntity.setContent("转接至: " + entity.getTransferDept());
+        logEntity.setType("warning");
+        logEntity.setActionTime(LocalDateTime.now());
+        logEntity.setCreateTime(LocalDateTime.now());
+        transferLogMapper.insert(logEntity);
+        return true;
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean doReport(EventReportDTO dto) {
+        DisEventTransfer existing = this.getById(dto.getId());
+        if (existing == null) {
+            log.warn("转接记录不存在: id={}", dto.getId());
+            return false;
+        }
+        String reportTargets = dto.getReportTargets() != null
+                ? String.join("、", dto.getReportTargets()) : "";
+        existing.setReportTargets(reportTargets);
+        existing.setStatus("已报送");
+        existing.setUpdateTime(LocalDateTime.now());
+
+        if (CollUtil.isNotEmpty(dto.getAttachments())) {
+            String paths = dto.getAttachments().stream()
+                    .map(a -> a.getFileName() + "|" + a.getUrl())
+                    .reduce((a, b) -> a + "," + b).orElse("");
+            existing.setAttachPaths(paths);
+        }
+
+        this.updateById(existing);
+
+        DisEventTransferLog logEntity = new DisEventTransferLog();
+        logEntity.setTransferId(existing.getId());
+        logEntity.setEventNo(existing.getEventNo());
+        logEntity.setActionType("报送");
+        logEntity.setActionTarget(reportTargets);
+        logEntity.setContent("报送至: " + reportTargets);
+        logEntity.setType("danger");
+        logEntity.setActionTime(LocalDateTime.now());
+        logEntity.setCreateTime(LocalDateTime.now());
+        transferLogMapper.insert(logEntity);
+        return true;
+    }
+
+    @Override
+    public List<DisEventTransferLog> getTransferLogs(Long transferId) {
+        LambdaQueryWrapper<DisEventTransferLog> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(DisEventTransferLog::getTransferId, transferId);
+        wrapper.orderByDesc(DisEventTransferLog::getActionTime);
+        return transferLogMapper.selectList(wrapper);
+    }
+}

+ 90 - 0
pipe-network-service/zksy-system/src/main/java/com/zksy/dispatch/service/impl/DisEventUrgeServiceImpl.java

@@ -0,0 +1,90 @@
+package com.zksy.dispatch.service.impl;
+
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zksy.dispatch.domain.DisEventUrge;
+import com.zksy.dispatch.domain.DisEventUrgeDetail;
+import com.zksy.dispatch.dto.EventUrgePageInDTO;
+import com.zksy.dispatch.mapper.DisEventUrgeDetailMapper;
+import com.zksy.dispatch.mapper.DisEventUrgeMapper;
+import com.zksy.dispatch.service.DisEventUrgeService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.time.LocalDateTime;
+import java.util.List;
+
+@Slf4j
+@Service
+public class DisEventUrgeServiceImpl extends ServiceImpl<DisEventUrgeMapper, DisEventUrge>
+        implements DisEventUrgeService {
+
+    @Autowired
+    private DisEventUrgeDetailMapper urgeDetailMapper;
+
+    @Override
+    public Page<DisEventUrge> findByPage(EventUrgePageInDTO dto) {
+        Page<DisEventUrge> page = new Page<>(dto.getPageNum(), dto.getPageSize());
+        LambdaQueryWrapper<DisEventUrge> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(StrUtil.isNotBlank(dto.getEventNo()), DisEventUrge::getEventNo, dto.getEventNo());
+        wrapper.eq(StrUtil.isNotBlank(dto.getReceiver()), DisEventUrge::getReceiver, dto.getReceiver());
+        wrapper.eq(StrUtil.isNotBlank(dto.getReceiverDept()), DisEventUrge::getReceiverDept, dto.getReceiverDept());
+        wrapper.eq(StrUtil.isNotBlank(dto.getStatus()), DisEventUrge::getStatus, dto.getStatus());
+        if (StrUtil.isNotBlank(dto.getBeginTime()) && StrUtil.isNotBlank(dto.getEndTime())) {
+            wrapper.between(DisEventUrge::getCreateTime,
+                    LocalDateTime.parse(dto.getBeginTime()),
+                    LocalDateTime.parse(dto.getEndTime()));
+        }
+        wrapper.orderByDesc(DisEventUrge::getCreateTime);
+        return this.page(page, wrapper);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean doUrge(DisEventUrgeDetail detail) {
+        if (detail.getUrgeId() == null) {
+            log.warn("关联催办ID为空");
+            return false;
+        }
+        DisEventUrge urge = this.getById(detail.getUrgeId());
+        if (urge == null) {
+            log.warn("催办记录不存在: id={}", detail.getUrgeId());
+            return false;
+        }
+        urge.setUrgeCount(urge.getUrgeCount() == null ? 1 : urge.getUrgeCount() + 1);
+        urge.setLastUrgeTime(LocalDateTime.now());
+        urge.setStatus("催办中");
+        urge.setUpdateTime(LocalDateTime.now());
+        this.updateById(urge);
+
+        detail.setEventNo(urge.getEventNo());
+        detail.setUrgeTime(LocalDateTime.now());
+        detail.setCreateTime(LocalDateTime.now());
+        urgeDetailMapper.insert(detail);
+        return true;
+    }
+
+    @Override
+    public boolean closeUrge(Long id) {
+        DisEventUrge urge = this.getById(id);
+        if (urge == null) {
+            log.warn("催办记录不存在: id={}", id);
+            return false;
+        }
+        urge.setStatus("已完成");
+        urge.setUpdateTime(LocalDateTime.now());
+        return this.updateById(urge);
+    }
+
+    @Override
+    public List<DisEventUrgeDetail> getUrgeDetails(Long urgeId) {
+        LambdaQueryWrapper<DisEventUrgeDetail> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(DisEventUrgeDetail::getUrgeId, urgeId);
+        wrapper.orderByDesc(DisEventUrgeDetail::getUrgeTime);
+        return urgeDetailMapper.selectList(wrapper);
+    }
+}

+ 110 - 0
pipe-network-service/zksy-system/src/main/java/com/zksy/dispatch/service/impl/DisEventVerifyServiceImpl.java

@@ -0,0 +1,110 @@
+package com.zksy.dispatch.service.impl;
+
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zksy.dispatch.domain.DisEventTransfer;
+import com.zksy.dispatch.domain.DisEventTransferLog;
+import com.zksy.dispatch.domain.DisEventVerify;
+import com.zksy.dispatch.dto.EventVerifyPageInDTO;
+import com.zksy.dispatch.mapper.DisEventTransferLogMapper;
+import com.zksy.dispatch.mapper.DisEventTransferMapper;
+import com.zksy.dispatch.mapper.DisEventVerifyMapper;
+import com.zksy.dispatch.service.DisEventVerifyService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+
+@Slf4j
+@Service
+public class DisEventVerifyServiceImpl extends ServiceImpl<DisEventVerifyMapper, DisEventVerify>
+        implements DisEventVerifyService {
+
+    @Autowired
+    private DisEventTransferMapper transferMapper;
+
+    @Autowired
+    private DisEventTransferLogMapper transferLogMapper;
+
+    @Override
+    public Page<DisEventVerify> findByPage(EventVerifyPageInDTO dto) {
+        Page<DisEventVerify> page = new Page<>(dto.getPageNum(), dto.getPageSize());
+        LambdaQueryWrapper<DisEventVerify> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(StrUtil.isNotBlank(dto.getEventNo()), DisEventVerify::getEventNo, dto.getEventNo());
+        wrapper.eq(StrUtil.isNotBlank(dto.getCategory()), DisEventVerify::getCategory, dto.getCategory());
+        wrapper.eq(StrUtil.isNotBlank(dto.getLevel()), DisEventVerify::getLevel, dto.getLevel());
+        wrapper.eq(StrUtil.isNotBlank(dto.getStatus()), DisEventVerify::getStatus, dto.getStatus());
+        wrapper.eq(StrUtil.isNotBlank(dto.getIsReal()), DisEventVerify::getIsReal, dto.getIsReal());
+        if (StrUtil.isNotBlank(dto.getBeginTime()) && StrUtil.isNotBlank(dto.getEndTime())) {
+            wrapper.between(DisEventVerify::getCreateTime,
+                    LocalDateTime.parse(dto.getBeginTime()),
+                    LocalDateTime.parse(dto.getEndTime()));
+        }
+        wrapper.orderByDesc(DisEventVerify::getCreateTime);
+        return this.page(page, wrapper);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean verify(DisEventVerify entity) {
+        if (entity.getId() == null) {
+            log.warn("核实记录ID为空");
+            return false;
+        }
+        DisEventVerify existing = this.getById(entity.getId());
+        if (existing == null) {
+            log.warn("核实记录不存在: id={}", entity.getId());
+            return false;
+        }
+        existing.setCategory(entity.getCategory());
+        existing.setLevel(entity.getLevel());
+        existing.setIsReal(entity.getIsReal());
+        existing.setOpinion(entity.getOpinion());
+        existing.setJudgeTime(LocalDateTime.now());
+        existing.setVerifier(entity.getVerifier());
+        existing.setVerifyTime(LocalDateTime.now());
+
+        String eventId = "EVT" + LocalDateTime.now().format(java.time.format.DateTimeFormatter.ofPattern("yyyyMMddHHmmss"));
+        existing.setEventId(eventId);
+
+        if ("真实".equals(entity.getIsReal())) {
+            existing.setStatus("已核实");
+
+            // 自动创建转接报送记录(如已存在则跳过)
+            LambdaQueryWrapper<DisEventTransfer> existWrapper = new LambdaQueryWrapper<>();
+            existWrapper.eq(DisEventTransfer::getVerifyId, existing.getId());
+            if (transferMapper.selectCount(existWrapper) == 0) {
+                DisEventTransfer transfer = new DisEventTransfer();
+                transfer.setVerifyId(existing.getId());
+                transfer.setEventNo(eventId);
+                transfer.setCategory(entity.getCategory());
+                transfer.setLevel(entity.getLevel());
+                transfer.setSummary(existing.getDescription());
+                transfer.setStatus("待转接");
+                transfer.setCreateTime(LocalDateTime.now());
+                transferMapper.insert(transfer);
+
+                // 写入流转日志
+                DisEventTransferLog transferLog = new DisEventTransferLog();
+                transferLog.setTransferId(transfer.getId());
+                transferLog.setEventNo(eventId);
+                transferLog.setActionType("核实");
+                transferLog.setActionTarget("核实通过");
+                transferLog.setContent("事件核实通过,待转接部门处理");
+                transferLog.setType("success");
+                transferLog.setActionTime(LocalDateTime.now());
+                transferLog.setCreateTime(LocalDateTime.now());
+                transferLogMapper.insert(transferLog);
+            }
+        } else {
+            existing.setStatus("不实事件");
+        }
+        existing.setUpdateTime(LocalDateTime.now());
+        return this.updateById(existing);
+    }
+}

+ 152 - 0
pipe-network-service/zksy-system/src/main/java/com/zksy/dispatch/service/impl/DisPlanApprovalServiceImpl.java

@@ -0,0 +1,152 @@
+package com.zksy.dispatch.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zksy.dispatch.domain.DisEventPlan;
+import com.zksy.dispatch.domain.DisPlanApproval;
+import com.zksy.dispatch.dto.DisPlanApprovalPageDTO;
+import com.zksy.dispatch.mapper.DisEventPlanMapper;
+import com.zksy.dispatch.mapper.DisPlanApprovalMapper;
+import com.zksy.dispatch.service.DisPlanApprovalService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.time.LocalDateTime;
+
+@Slf4j
+@Service
+public class DisPlanApprovalServiceImpl extends ServiceImpl<DisPlanApprovalMapper, DisPlanApproval>
+        implements DisPlanApprovalService {
+
+    @Autowired
+    private DisEventPlanMapper planMapper;
+
+    /** 状态常量 */
+    private static final String STATUS_EDITING = "编辑中";
+    private static final String STATUS_APPROVING = "审批中";
+    private static final String STATUS_FINAL_APPROVING = "终审中";
+    private static final String STATUS_PUBLISHED = "已发布";
+    private static final String STATUS_REVISE = "待修正";
+
+    @Override
+    public Page<DisPlanApproval> findByPage(DisPlanApprovalPageDTO dto) {
+        Page<DisPlanApproval> page = new Page<>(dto.getPageNum(), dto.getPageSize());
+        LambdaQueryWrapper<DisPlanApproval> wrapper = new LambdaQueryWrapper<>();
+        wrapper.like(dto.getPlanName() != null && !dto.getPlanName().isEmpty(), DisPlanApproval::getPlanName, dto.getPlanName());
+        wrapper.eq(dto.getPlanType() != null && !dto.getPlanType().isEmpty(), DisPlanApproval::getPlanType, dto.getPlanType());
+        wrapper.eq(dto.getStatus() != null && !dto.getStatus().isEmpty(), DisPlanApproval::getStatus, dto.getStatus());
+        wrapper.orderByDesc(DisPlanApproval::getCreateTime);
+        return this.page(page, wrapper);
+    }
+
+    @Override
+    public boolean submitForApproval(Long id) {
+        DisPlanApproval approval = this.getById(id);
+        if (approval == null) {
+            log.warn("审批记录不存在, id={}", id);
+            return false;
+        }
+        if (!STATUS_EDITING.equals(approval.getStatus()) && !STATUS_REVISE.equals(approval.getStatus())) {
+            log.warn("当前状态不允许提交审批, id={}, status={}", id, approval.getStatus());
+            return false;
+        }
+        approval.setStatus(STATUS_APPROVING);
+        approval.setSubmitTime(LocalDateTime.now());
+        return this.updateById(approval);
+    }
+
+    @Override
+    public boolean approve(Long id, String opinion) {
+        DisPlanApproval approval = this.getById(id);
+        if (approval == null) {
+            log.warn("审批记录不存在, id={}", id);
+            return false;
+        }
+        if (!STATUS_APPROVING.equals(approval.getStatus())) {
+            log.warn("当前状态不允许审批, id={}, status={}", id, approval.getStatus());
+            return false;
+        }
+        approval.setStatus(STATUS_FINAL_APPROVING);
+        String record = buildAuditRecord(approval.getAuditRecord(), "初审通过", opinion);
+        approval.setAuditRecord(record);
+        return this.updateById(approval);
+    }
+
+    @Override
+    public boolean reject(Long id, String opinion) {
+        DisPlanApproval approval = this.getById(id);
+        if (approval == null) {
+            log.warn("审批记录不存在, id={}", id);
+            return false;
+        }
+        if (!STATUS_APPROVING.equals(approval.getStatus()) && !STATUS_FINAL_APPROVING.equals(approval.getStatus())) {
+            log.warn("当前状态不允许驳回, id={}, status={}", id, approval.getStatus());
+            return false;
+        }
+        approval.setStatus(STATUS_REVISE);
+        String record = buildAuditRecord(approval.getAuditRecord(), "驳回", opinion);
+        approval.setAuditRecord(record);
+        return this.updateById(approval);
+    }
+
+    @Override
+    public boolean publish(Long id, String opinion) {
+        DisPlanApproval approval = this.getById(id);
+        if (approval == null) {
+            log.warn("审批记录不存在, id={}", id);
+            return false;
+        }
+        if (!STATUS_FINAL_APPROVING.equals(approval.getStatus())) {
+            log.warn("当前状态不允许发布, id={}, status={}", id, approval.getStatus());
+            return false;
+        }
+        approval.setStatus(STATUS_PUBLISHED);
+        approval.setApproveTime(LocalDateTime.now());
+        String record = buildAuditRecord(approval.getAuditRecord(), "终审通过-已发布", opinion);
+        approval.setAuditRecord(record);
+        return this.updateById(approval);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean createFromPlan(Long planId) {
+        DisEventPlan plan = planMapper.selectById(planId);
+        if (plan == null) {
+            log.warn("预案不存在, planId={}", planId);
+            return false;
+        }
+        DisPlanApproval approval = new DisPlanApproval();
+        approval.setPlanId(plan.getId());
+        approval.setPlanName(plan.getPlanName());
+        approval.setPlanType(plan.getPlanType());
+        approval.setPlanLevel(plan.getPlanLevel());
+        approval.setVersion(plan.getVersion());
+        approval.setStatus(STATUS_APPROVING);
+        approval.setSubmitTime(LocalDateTime.now());
+        this.save(approval);
+
+        // 更新预案状态为审批中
+        plan.setStatus("审批中");
+        plan.setUpdateTime(LocalDateTime.now());
+        planMapper.updateById(plan);
+        return true;
+    }
+
+    /**
+     * 构建审批记录文本,每条记录用换行分隔
+     */
+    private String buildAuditRecord(String existingRecord, String action, String opinion) {
+        String time = LocalDateTime.now().toString().replace("T", " ");
+        String newRecord = "[" + time + "] " + action;
+        if (opinion != null && !opinion.isEmpty()) {
+            newRecord += ":" + opinion;
+        }
+        if (existingRecord == null || existingRecord.isEmpty()) {
+            return newRecord;
+        }
+        return existingRecord + "\n" + newRecord;
+    }
+}

+ 37 - 0
pipe-network-service/zksy-system/src/main/java/com/zksy/dispatch/service/impl/DisPlanApprovalStepServiceImpl.java

@@ -0,0 +1,37 @@
+package com.zksy.dispatch.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zksy.dispatch.domain.DisPlanApprovalStep;
+import com.zksy.dispatch.dto.DisPlanApprovalStepPageDTO;
+import com.zksy.dispatch.mapper.DisPlanApprovalStepMapper;
+import com.zksy.dispatch.service.DisPlanApprovalStepService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Slf4j
+@Service
+public class DisPlanApprovalStepServiceImpl extends ServiceImpl<DisPlanApprovalStepMapper, DisPlanApprovalStep>
+        implements DisPlanApprovalStepService {
+
+    @Override
+    public Page<DisPlanApprovalStep> findByPage(DisPlanApprovalStepPageDTO dto) {
+        Page<DisPlanApprovalStep> page = new Page<>(dto.getPageNum(), dto.getPageSize());
+        LambdaQueryWrapper<DisPlanApprovalStep> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(dto.getApprovalId() != null, DisPlanApprovalStep::getApprovalId, dto.getApprovalId());
+        wrapper.eq(dto.getResult() != null && !dto.getResult().isEmpty(), DisPlanApprovalStep::getResult, dto.getResult());
+        wrapper.orderByAsc(DisPlanApprovalStep::getStepOrder);
+        return this.page(page, wrapper);
+    }
+
+    @Override
+    public List<DisPlanApprovalStep> listByApprovalId(Long approvalId) {
+        LambdaQueryWrapper<DisPlanApprovalStep> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(DisPlanApprovalStep::getApprovalId, approvalId);
+        wrapper.orderByAsc(DisPlanApprovalStep::getStepOrder);
+        return this.list(wrapper);
+    }
+}

+ 56 - 0
pipe-network-service/zksy-system/src/main/java/com/zksy/dispatch/service/impl/DisPlanCategoryServiceImpl.java

@@ -0,0 +1,56 @@
+package com.zksy.dispatch.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zksy.dispatch.domain.DisPlanCategory;
+import com.zksy.dispatch.dto.DisPlanCategoryPageDTO;
+import com.zksy.dispatch.mapper.DisPlanCategoryMapper;
+import com.zksy.dispatch.service.DisPlanCategoryService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+@Slf4j
+@Service
+public class DisPlanCategoryServiceImpl extends ServiceImpl<DisPlanCategoryMapper, DisPlanCategory>
+        implements DisPlanCategoryService {
+
+    @Override
+    public Page<DisPlanCategory> findByPage(DisPlanCategoryPageDTO dto) {
+        Page<DisPlanCategory> page = new Page<>(dto.getPageNum(), dto.getPageSize());
+        LambdaQueryWrapper<DisPlanCategory> wrapper = new LambdaQueryWrapper<>();
+        wrapper.eq(dto.getLabel() != null && !dto.getLabel().isEmpty(), DisPlanCategory::getLabel, dto.getLabel());
+        wrapper.eq(dto.getParentId() != null, DisPlanCategory::getParentId, dto.getParentId());
+        wrapper.orderByAsc(DisPlanCategory::getSortOrder);
+        return this.page(page, wrapper);
+    }
+
+    @Override
+    public List<DisPlanCategory> getCategoryTree() {
+        List<DisPlanCategory> all = this.list(new LambdaQueryWrapper<DisPlanCategory>()
+                .orderByAsc(DisPlanCategory::getSortOrder));
+        // 查找顶级节点(parentId为null或0)
+        List<DisPlanCategory> roots = all.stream()
+                .filter(c -> c.getParentId() == null || c.getParentId() == 0L)
+                .collect(Collectors.toList());
+        // 递归构建子节点
+        for (DisPlanCategory root : roots) {
+            buildChildren(root, all);
+        }
+        return roots;
+    }
+
+    private void buildChildren(DisPlanCategory parent, List<DisPlanCategory> all) {
+        List<DisPlanCategory> children = all.stream()
+                .filter(c -> parent.getId().equals(c.getParentId()))
+                .collect(Collectors.toList());
+        parent.setChildren(children);
+        for (DisPlanCategory child : children) {
+            buildChildren(child, all);
+        }
+    }
+}