From 5b0cb314e4ffeff39505fb933f93bfb37e465b48 Mon Sep 17 00:00:00 2001
From: Joshi <3040996759@qq.com>
Date: Thu, 18 Jun 2026 11:19:55 +0800
Subject: [PATCH] =?UTF-8?q?feat(flow):=20=E6=B7=BB=E5=8A=A0=E6=8A=95?=
=?UTF-8?q?=E8=AF=89=E5=A4=84=E7=90=86=E6=B5=81=E7=A8=8B=E6=A8=A1=E5=9D=97?=
=?UTF-8?q?=E5=8F=8A=E7=9B=B8=E5=85=B3=E6=9C=8D=E5=8A=A1=E6=8E=A5=E5=8F=A3?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
- 创建受理单关联钢卷中间表服务接口及实现类
- 添加投诉受理单主服务接口及相应控制器
- 实现各部门投诉代办任务服务功能
- 集成最终方案下发部门及执行反馈服务
- 在员工信息表中新增是否吃辣字段
- 配置klp-flow模块依赖并注册到系统中
---
klp-admin/pom.xml | 4 +
klp-flow/pom.xml | 19 +++
.../controller/TsAcceptCoilRelController.java | 99 +++++++++++++++
.../TsComplaintAcceptController.java | 99 +++++++++++++++
.../controller/TsComplaintTaskController.java | 99 +++++++++++++++
.../TsPlanExecuteRelController.java | 99 +++++++++++++++
.../com/klp/flow/domain/TsAcceptCoilRel.java | 45 +++++++
.../klp/flow/domain/TsComplaintAccept.java | 88 +++++++++++++
.../com/klp/flow/domain/TsComplaintTask.java | 71 +++++++++++
.../com/klp/flow/domain/TsPlanExecuteRel.java | 71 +++++++++++
.../klp/flow/domain/bo/TsAcceptCoilRelBo.java | 41 ++++++
.../flow/domain/bo/TsComplaintAcceptBo.java | 94 ++++++++++++++
.../klp/flow/domain/bo/TsComplaintTaskBo.java | 73 +++++++++++
.../flow/domain/bo/TsPlanExecuteRelBo.java | 73 +++++++++++
.../klp/flow/domain/vo/TsAcceptCoilRelVo.java | 47 +++++++
.../flow/domain/vo/TsComplaintAcceptVo.java | 110 ++++++++++++++++
.../klp/flow/domain/vo/TsComplaintTaskVo.java | 86 +++++++++++++
.../flow/domain/vo/TsPlanExecuteRelVo.java | 85 +++++++++++++
.../flow/mapper/TsAcceptCoilRelMapper.java | 15 +++
.../flow/mapper/TsComplaintAcceptMapper.java | 15 +++
.../flow/mapper/TsComplaintTaskMapper.java | 15 +++
.../flow/mapper/TsPlanExecuteRelMapper.java | 15 +++
.../flow/service/ITsAcceptCoilRelService.java | 49 +++++++
.../service/ITsComplaintAcceptService.java | 49 +++++++
.../flow/service/ITsComplaintTaskService.java | 49 +++++++
.../service/ITsPlanExecuteRelService.java | 49 +++++++
.../impl/TsAcceptCoilRelServiceImpl.java | 109 ++++++++++++++++
.../impl/TsComplaintAcceptServiceImpl.java | 120 ++++++++++++++++++
.../impl/TsComplaintTaskServiceImpl.java | 116 +++++++++++++++++
.../impl/TsPlanExecuteRelServiceImpl.java | 116 +++++++++++++++++
.../mapper/flow/TsAcceptCoilRelMapper.xml | 20 +++
.../mapper/flow/TsComplaintAcceptMapper.xml | 30 +++++
.../mapper/flow/TsComplaintTaskMapper.xml | 26 ++++
.../mapper/flow/TsPlanExecuteRelMapper.xml | 26 ++++
pom.xml | 7 +-
script/sql/mysql/klp-oa.sql | 1 +
36 files changed, 2129 insertions(+), 1 deletion(-)
create mode 100644 klp-flow/pom.xml
create mode 100644 klp-flow/src/main/java/com/klp/flow/controller/TsAcceptCoilRelController.java
create mode 100644 klp-flow/src/main/java/com/klp/flow/controller/TsComplaintAcceptController.java
create mode 100644 klp-flow/src/main/java/com/klp/flow/controller/TsComplaintTaskController.java
create mode 100644 klp-flow/src/main/java/com/klp/flow/controller/TsPlanExecuteRelController.java
create mode 100644 klp-flow/src/main/java/com/klp/flow/domain/TsAcceptCoilRel.java
create mode 100644 klp-flow/src/main/java/com/klp/flow/domain/TsComplaintAccept.java
create mode 100644 klp-flow/src/main/java/com/klp/flow/domain/TsComplaintTask.java
create mode 100644 klp-flow/src/main/java/com/klp/flow/domain/TsPlanExecuteRel.java
create mode 100644 klp-flow/src/main/java/com/klp/flow/domain/bo/TsAcceptCoilRelBo.java
create mode 100644 klp-flow/src/main/java/com/klp/flow/domain/bo/TsComplaintAcceptBo.java
create mode 100644 klp-flow/src/main/java/com/klp/flow/domain/bo/TsComplaintTaskBo.java
create mode 100644 klp-flow/src/main/java/com/klp/flow/domain/bo/TsPlanExecuteRelBo.java
create mode 100644 klp-flow/src/main/java/com/klp/flow/domain/vo/TsAcceptCoilRelVo.java
create mode 100644 klp-flow/src/main/java/com/klp/flow/domain/vo/TsComplaintAcceptVo.java
create mode 100644 klp-flow/src/main/java/com/klp/flow/domain/vo/TsComplaintTaskVo.java
create mode 100644 klp-flow/src/main/java/com/klp/flow/domain/vo/TsPlanExecuteRelVo.java
create mode 100644 klp-flow/src/main/java/com/klp/flow/mapper/TsAcceptCoilRelMapper.java
create mode 100644 klp-flow/src/main/java/com/klp/flow/mapper/TsComplaintAcceptMapper.java
create mode 100644 klp-flow/src/main/java/com/klp/flow/mapper/TsComplaintTaskMapper.java
create mode 100644 klp-flow/src/main/java/com/klp/flow/mapper/TsPlanExecuteRelMapper.java
create mode 100644 klp-flow/src/main/java/com/klp/flow/service/ITsAcceptCoilRelService.java
create mode 100644 klp-flow/src/main/java/com/klp/flow/service/ITsComplaintAcceptService.java
create mode 100644 klp-flow/src/main/java/com/klp/flow/service/ITsComplaintTaskService.java
create mode 100644 klp-flow/src/main/java/com/klp/flow/service/ITsPlanExecuteRelService.java
create mode 100644 klp-flow/src/main/java/com/klp/flow/service/impl/TsAcceptCoilRelServiceImpl.java
create mode 100644 klp-flow/src/main/java/com/klp/flow/service/impl/TsComplaintAcceptServiceImpl.java
create mode 100644 klp-flow/src/main/java/com/klp/flow/service/impl/TsComplaintTaskServiceImpl.java
create mode 100644 klp-flow/src/main/java/com/klp/flow/service/impl/TsPlanExecuteRelServiceImpl.java
create mode 100644 klp-flow/src/main/resources/mapper/flow/TsAcceptCoilRelMapper.xml
create mode 100644 klp-flow/src/main/resources/mapper/flow/TsComplaintAcceptMapper.xml
create mode 100644 klp-flow/src/main/resources/mapper/flow/TsComplaintTaskMapper.xml
create mode 100644 klp-flow/src/main/resources/mapper/flow/TsPlanExecuteRelMapper.xml
diff --git a/klp-admin/pom.xml b/klp-admin/pom.xml
index 3f4e083f..4c1e44a4 100644
--- a/klp-admin/pom.xml
+++ b/klp-admin/pom.xml
@@ -129,6 +129,10 @@
klp-cost
+
+ com.klp
+ klp-flow
+
org.springframework.boot
diff --git a/klp-flow/pom.xml b/klp-flow/pom.xml
new file mode 100644
index 00000000..f0a55827
--- /dev/null
+++ b/klp-flow/pom.xml
@@ -0,0 +1,19 @@
+
+ 4.0.0
+
+ com.klp
+ klp-oa
+ 0.8.3
+
+ klp-flow
+ klp-flow
+ 流程管理模块
+
+
+
+ com.klp
+ klp-common
+
+
+
diff --git a/klp-flow/src/main/java/com/klp/flow/controller/TsAcceptCoilRelController.java b/klp-flow/src/main/java/com/klp/flow/controller/TsAcceptCoilRelController.java
new file mode 100644
index 00000000..ebab882b
--- /dev/null
+++ b/klp-flow/src/main/java/com/klp/flow/controller/TsAcceptCoilRelController.java
@@ -0,0 +1,99 @@
+package com.klp.flow.controller;
+
+import java.util.List;
+import java.util.Arrays;
+
+import lombok.RequiredArgsConstructor;
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.constraints.*;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.validation.annotation.Validated;
+import com.klp.common.annotation.RepeatSubmit;
+import com.klp.common.annotation.Log;
+import com.klp.common.core.controller.BaseController;
+import com.klp.common.core.domain.PageQuery;
+import com.klp.common.core.domain.R;
+import com.klp.common.core.validate.AddGroup;
+import com.klp.common.core.validate.EditGroup;
+import com.klp.common.enums.BusinessType;
+import com.klp.common.utils.poi.ExcelUtil;
+import com.klp.flow.domain.vo.TsAcceptCoilRelVo;
+import com.klp.flow.domain.bo.TsAcceptCoilRelBo;
+import com.klp.flow.service.ITsAcceptCoilRelService;
+import com.klp.common.core.page.TableDataInfo;
+
+/**
+ * 受理单关联钢卷中间
+ *
+ * @author klp
+ * @date 2026-06-18
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/flow/acceptCoilRel")
+public class TsAcceptCoilRelController extends BaseController {
+
+ private final ITsAcceptCoilRelService iTsAcceptCoilRelService;
+
+ /**
+ * 查询受理单关联钢卷中间列表
+ */
+ @GetMapping("/list")
+ public TableDataInfo list(TsAcceptCoilRelBo bo, PageQuery pageQuery) {
+ return iTsAcceptCoilRelService.queryPageList(bo, pageQuery);
+ }
+
+ /**
+ * 导出受理单关联钢卷中间列表
+ */
+ @Log(title = "受理单关联钢卷中间", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ public void export(TsAcceptCoilRelBo bo, HttpServletResponse response) {
+ List list = iTsAcceptCoilRelService.queryList(bo);
+ ExcelUtil.exportExcel(list, "受理单关联钢卷中间", TsAcceptCoilRelVo.class, response);
+ }
+
+ /**
+ * 获取受理单关联钢卷中间详细信息
+ *
+ * @param relId 主键
+ */
+ @GetMapping("/{relId}")
+ public R getInfo(@NotNull(message = "主键不能为空")
+ @PathVariable Long relId) {
+ return R.ok(iTsAcceptCoilRelService.queryById(relId));
+ }
+
+ /**
+ * 新增受理单关联钢卷中间
+ */
+ @Log(title = "受理单关联钢卷中间", businessType = BusinessType.INSERT)
+ @RepeatSubmit()
+ @PostMapping()
+ public R add(@Validated(AddGroup.class) @RequestBody TsAcceptCoilRelBo bo) {
+ return toAjax(iTsAcceptCoilRelService.insertByBo(bo));
+ }
+
+ /**
+ * 修改受理单关联钢卷中间
+ */
+ @Log(title = "受理单关联钢卷中间", businessType = BusinessType.UPDATE)
+ @RepeatSubmit()
+ @PutMapping()
+ public R edit(@Validated(EditGroup.class) @RequestBody TsAcceptCoilRelBo bo) {
+ return toAjax(iTsAcceptCoilRelService.updateByBo(bo));
+ }
+
+ /**
+ * 删除受理单关联钢卷中间
+ *
+ * @param relIds 主键串
+ */
+ @Log(title = "受理单关联钢卷中间", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{relIds}")
+ public R remove(@NotEmpty(message = "主键不能为空")
+ @PathVariable Long[] relIds) {
+ return toAjax(iTsAcceptCoilRelService.deleteWithValidByIds(Arrays.asList(relIds), true));
+ }
+}
diff --git a/klp-flow/src/main/java/com/klp/flow/controller/TsComplaintAcceptController.java b/klp-flow/src/main/java/com/klp/flow/controller/TsComplaintAcceptController.java
new file mode 100644
index 00000000..ce31c4e8
--- /dev/null
+++ b/klp-flow/src/main/java/com/klp/flow/controller/TsComplaintAcceptController.java
@@ -0,0 +1,99 @@
+package com.klp.flow.controller;
+
+import java.util.List;
+import java.util.Arrays;
+
+import lombok.RequiredArgsConstructor;
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.constraints.*;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.validation.annotation.Validated;
+import com.klp.common.annotation.RepeatSubmit;
+import com.klp.common.annotation.Log;
+import com.klp.common.core.controller.BaseController;
+import com.klp.common.core.domain.PageQuery;
+import com.klp.common.core.domain.R;
+import com.klp.common.core.validate.AddGroup;
+import com.klp.common.core.validate.EditGroup;
+import com.klp.common.enums.BusinessType;
+import com.klp.common.utils.poi.ExcelUtil;
+import com.klp.flow.domain.vo.TsComplaintAcceptVo;
+import com.klp.flow.domain.bo.TsComplaintAcceptBo;
+import com.klp.flow.service.ITsComplaintAcceptService;
+import com.klp.common.core.page.TableDataInfo;
+
+/**
+ * 投诉受理单主
+ *
+ * @author klp
+ * @date 2026-06-18
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/flow/complaintAccept")
+public class TsComplaintAcceptController extends BaseController {
+
+ private final ITsComplaintAcceptService iTsComplaintAcceptService;
+
+ /**
+ * 查询投诉受理单主列表
+ */
+ @GetMapping("/list")
+ public TableDataInfo list(TsComplaintAcceptBo bo, PageQuery pageQuery) {
+ return iTsComplaintAcceptService.queryPageList(bo, pageQuery);
+ }
+
+ /**
+ * 导出投诉受理单主列表
+ */
+ @Log(title = "投诉受理单主", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ public void export(TsComplaintAcceptBo bo, HttpServletResponse response) {
+ List list = iTsComplaintAcceptService.queryList(bo);
+ ExcelUtil.exportExcel(list, "投诉受理单主", TsComplaintAcceptVo.class, response);
+ }
+
+ /**
+ * 获取投诉受理单主详细信息
+ *
+ * @param acceptId 主键
+ */
+ @GetMapping("/{acceptId}")
+ public R getInfo(@NotNull(message = "主键不能为空")
+ @PathVariable Long acceptId) {
+ return R.ok(iTsComplaintAcceptService.queryById(acceptId));
+ }
+
+ /**
+ * 新增投诉受理单主
+ */
+ @Log(title = "投诉受理单主", businessType = BusinessType.INSERT)
+ @RepeatSubmit()
+ @PostMapping()
+ public R add(@Validated(AddGroup.class) @RequestBody TsComplaintAcceptBo bo) {
+ return toAjax(iTsComplaintAcceptService.insertByBo(bo));
+ }
+
+ /**
+ * 修改投诉受理单主
+ */
+ @Log(title = "投诉受理单主", businessType = BusinessType.UPDATE)
+ @RepeatSubmit()
+ @PutMapping()
+ public R edit(@Validated(EditGroup.class) @RequestBody TsComplaintAcceptBo bo) {
+ return toAjax(iTsComplaintAcceptService.updateByBo(bo));
+ }
+
+ /**
+ * 删除投诉受理单主
+ *
+ * @param acceptIds 主键串
+ */
+ @Log(title = "投诉受理单主", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{acceptIds}")
+ public R remove(@NotEmpty(message = "主键不能为空")
+ @PathVariable Long[] acceptIds) {
+ return toAjax(iTsComplaintAcceptService.deleteWithValidByIds(Arrays.asList(acceptIds), true));
+ }
+}
diff --git a/klp-flow/src/main/java/com/klp/flow/controller/TsComplaintTaskController.java b/klp-flow/src/main/java/com/klp/flow/controller/TsComplaintTaskController.java
new file mode 100644
index 00000000..9cd464da
--- /dev/null
+++ b/klp-flow/src/main/java/com/klp/flow/controller/TsComplaintTaskController.java
@@ -0,0 +1,99 @@
+package com.klp.flow.controller;
+
+import java.util.List;
+import java.util.Arrays;
+
+import lombok.RequiredArgsConstructor;
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.constraints.*;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.validation.annotation.Validated;
+import com.klp.common.annotation.RepeatSubmit;
+import com.klp.common.annotation.Log;
+import com.klp.common.core.controller.BaseController;
+import com.klp.common.core.domain.PageQuery;
+import com.klp.common.core.domain.R;
+import com.klp.common.core.validate.AddGroup;
+import com.klp.common.core.validate.EditGroup;
+import com.klp.common.enums.BusinessType;
+import com.klp.common.utils.poi.ExcelUtil;
+import com.klp.flow.domain.vo.TsComplaintTaskVo;
+import com.klp.flow.domain.bo.TsComplaintTaskBo;
+import com.klp.flow.service.ITsComplaintTaskService;
+import com.klp.common.core.page.TableDataInfo;
+
+/**
+ * 各部门投诉代办任务&意见
+ *
+ * @author klp
+ * @date 2026-06-18
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/flow/complaintTask")
+public class TsComplaintTaskController extends BaseController {
+
+ private final ITsComplaintTaskService iTsComplaintTaskService;
+
+ /**
+ * 查询各部门投诉代办任务&意见列表
+ */
+ @GetMapping("/list")
+ public TableDataInfo list(TsComplaintTaskBo bo, PageQuery pageQuery) {
+ return iTsComplaintTaskService.queryPageList(bo, pageQuery);
+ }
+
+ /**
+ * 导出各部门投诉代办任务&意见列表
+ */
+ @Log(title = "各部门投诉代办任务&意见", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ public void export(TsComplaintTaskBo bo, HttpServletResponse response) {
+ List list = iTsComplaintTaskService.queryList(bo);
+ ExcelUtil.exportExcel(list, "各部门投诉代办任务&意见", TsComplaintTaskVo.class, response);
+ }
+
+ /**
+ * 获取各部门投诉代办任务&意见详细信息
+ *
+ * @param taskId 主键
+ */
+ @GetMapping("/{taskId}")
+ public R getInfo(@NotNull(message = "主键不能为空")
+ @PathVariable Long taskId) {
+ return R.ok(iTsComplaintTaskService.queryById(taskId));
+ }
+
+ /**
+ * 新增各部门投诉代办任务&意见
+ */
+ @Log(title = "各部门投诉代办任务&意见", businessType = BusinessType.INSERT)
+ @RepeatSubmit()
+ @PostMapping()
+ public R add(@Validated(AddGroup.class) @RequestBody TsComplaintTaskBo bo) {
+ return toAjax(iTsComplaintTaskService.insertByBo(bo));
+ }
+
+ /**
+ * 修改各部门投诉代办任务&意见
+ */
+ @Log(title = "各部门投诉代办任务&意见", businessType = BusinessType.UPDATE)
+ @RepeatSubmit()
+ @PutMapping()
+ public R edit(@Validated(EditGroup.class) @RequestBody TsComplaintTaskBo bo) {
+ return toAjax(iTsComplaintTaskService.updateByBo(bo));
+ }
+
+ /**
+ * 删除各部门投诉代办任务&意见
+ *
+ * @param taskIds 主键串
+ */
+ @Log(title = "各部门投诉代办任务&意见", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{taskIds}")
+ public R remove(@NotEmpty(message = "主键不能为空")
+ @PathVariable Long[] taskIds) {
+ return toAjax(iTsComplaintTaskService.deleteWithValidByIds(Arrays.asList(taskIds), true));
+ }
+}
diff --git a/klp-flow/src/main/java/com/klp/flow/controller/TsPlanExecuteRelController.java b/klp-flow/src/main/java/com/klp/flow/controller/TsPlanExecuteRelController.java
new file mode 100644
index 00000000..a3c65714
--- /dev/null
+++ b/klp-flow/src/main/java/com/klp/flow/controller/TsPlanExecuteRelController.java
@@ -0,0 +1,99 @@
+package com.klp.flow.controller;
+
+import java.util.List;
+import java.util.Arrays;
+
+import lombok.RequiredArgsConstructor;
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.constraints.*;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.validation.annotation.Validated;
+import com.klp.common.annotation.RepeatSubmit;
+import com.klp.common.annotation.Log;
+import com.klp.common.core.controller.BaseController;
+import com.klp.common.core.domain.PageQuery;
+import com.klp.common.core.domain.R;
+import com.klp.common.core.validate.AddGroup;
+import com.klp.common.core.validate.EditGroup;
+import com.klp.common.enums.BusinessType;
+import com.klp.common.utils.poi.ExcelUtil;
+import com.klp.flow.domain.vo.TsPlanExecuteRelVo;
+import com.klp.flow.domain.bo.TsPlanExecuteRelBo;
+import com.klp.flow.service.ITsPlanExecuteRelService;
+import com.klp.common.core.page.TableDataInfo;
+
+/**
+ * 最终方案下发部门及执行反馈
+ *
+ * @author klp
+ * @date 2026-06-18
+ */
+@Validated
+@RequiredArgsConstructor
+@RestController
+@RequestMapping("/flow/planExecuteRel")
+public class TsPlanExecuteRelController extends BaseController {
+
+ private final ITsPlanExecuteRelService iTsPlanExecuteRelService;
+
+ /**
+ * 查询最终方案下发部门及执行反馈列表
+ */
+ @GetMapping("/list")
+ public TableDataInfo list(TsPlanExecuteRelBo bo, PageQuery pageQuery) {
+ return iTsPlanExecuteRelService.queryPageList(bo, pageQuery);
+ }
+
+ /**
+ * 导出最终方案下发部门及执行反馈列表
+ */
+ @Log(title = "最终方案下发部门及执行反馈", businessType = BusinessType.EXPORT)
+ @PostMapping("/export")
+ public void export(TsPlanExecuteRelBo bo, HttpServletResponse response) {
+ List list = iTsPlanExecuteRelService.queryList(bo);
+ ExcelUtil.exportExcel(list, "最终方案下发部门及执行反馈", TsPlanExecuteRelVo.class, response);
+ }
+
+ /**
+ * 获取最终方案下发部门及执行反馈详细信息
+ *
+ * @param relId 主键
+ */
+ @GetMapping("/{relId}")
+ public R getInfo(@NotNull(message = "主键不能为空")
+ @PathVariable Long relId) {
+ return R.ok(iTsPlanExecuteRelService.queryById(relId));
+ }
+
+ /**
+ * 新增最终方案下发部门及执行反馈
+ */
+ @Log(title = "最终方案下发部门及执行反馈", businessType = BusinessType.INSERT)
+ @RepeatSubmit()
+ @PostMapping()
+ public R add(@Validated(AddGroup.class) @RequestBody TsPlanExecuteRelBo bo) {
+ return toAjax(iTsPlanExecuteRelService.insertByBo(bo));
+ }
+
+ /**
+ * 修改最终方案下发部门及执行反馈
+ */
+ @Log(title = "最终方案下发部门及执行反馈", businessType = BusinessType.UPDATE)
+ @RepeatSubmit()
+ @PutMapping()
+ public R edit(@Validated(EditGroup.class) @RequestBody TsPlanExecuteRelBo bo) {
+ return toAjax(iTsPlanExecuteRelService.updateByBo(bo));
+ }
+
+ /**
+ * 删除最终方案下发部门及执行反馈
+ *
+ * @param relIds 主键串
+ */
+ @Log(title = "最终方案下发部门及执行反馈", businessType = BusinessType.DELETE)
+ @DeleteMapping("/{relIds}")
+ public R remove(@NotEmpty(message = "主键不能为空")
+ @PathVariable Long[] relIds) {
+ return toAjax(iTsPlanExecuteRelService.deleteWithValidByIds(Arrays.asList(relIds), true));
+ }
+}
diff --git a/klp-flow/src/main/java/com/klp/flow/domain/TsAcceptCoilRel.java b/klp-flow/src/main/java/com/klp/flow/domain/TsAcceptCoilRel.java
new file mode 100644
index 00000000..35844b3c
--- /dev/null
+++ b/klp-flow/src/main/java/com/klp/flow/domain/TsAcceptCoilRel.java
@@ -0,0 +1,45 @@
+package com.klp.flow.domain;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.klp.common.core.domain.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+
+/**
+ * 受理单关联钢卷中间对象 ts_accept_coil_rel
+ *
+ * @author klp
+ * @date 2026-06-18
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("ts_accept_coil_rel")
+public class TsAcceptCoilRel extends BaseEntity {
+
+ private static final long serialVersionUID=1L;
+
+ /**
+ *
+ */
+ @TableId(value = "rel_id")
+ private Long relId;
+ /**
+ * 投诉受理单ID
+ */
+ private Long acceptId;
+ /**
+ * 钢卷ID
+ */
+ private Long coilId;
+ /**
+ * 备注
+ */
+ private String remark;
+ /**
+ * 删除标识 0=正常 2=删除
+ */
+ @TableLogic
+ private Long delFlag;
+
+}
diff --git a/klp-flow/src/main/java/com/klp/flow/domain/TsComplaintAccept.java b/klp-flow/src/main/java/com/klp/flow/domain/TsComplaintAccept.java
new file mode 100644
index 00000000..b7fa8a95
--- /dev/null
+++ b/klp-flow/src/main/java/com/klp/flow/domain/TsComplaintAccept.java
@@ -0,0 +1,88 @@
+package com.klp.flow.domain;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.klp.common.core.domain.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+/**
+ * 投诉受理单主对象 ts_complaint_accept
+ *
+ * @author klp
+ * @date 2026-06-18
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("ts_complaint_accept")
+public class TsComplaintAccept extends BaseEntity {
+
+ private static final long serialVersionUID=1L;
+
+ /**
+ * 受理单主键
+ */
+ @TableId(value = "accept_id")
+ private Long acceptId;
+ /**
+ * 投诉编号 TS-2026-001
+ */
+ private String complaintNo;
+ /**
+ * 投诉日期
+ */
+ private Date complaintDate;
+ /**
+ * 投诉情况描述
+ */
+ private String complaintContent;
+ /**
+ * 客户诉求
+ */
+ private String customerDemand;
+ /**
+ * 客户照片凭证等
+ */
+ private String file;
+ /**
+ * 审核状态 0待审核 1已通过 2未通过
+ */
+ private Long auditStatus;
+ /**
+ * 审核意见
+ */
+ private String auditOpinion;
+ /**
+ * 审核人ID
+ */
+ private Long auditUserId;
+ /**
+ * 审核时间
+ */
+ private Date auditTime;
+ /**
+ * 流程阶段:
+1=待审核 2=部门意见填写中 3=待总负责人汇总方案 4=方案下发执行反馈中 5=全部办结
+ */
+ private Long flowStatus;
+ /**
+ * 总负责人ID
+ */
+ private Long principalUserId;
+ /**
+ * 总负责人整合后的完整处理方案
+ */
+ private String planContent;
+ /**
+ * 备注
+ */
+ private String remark;
+ /**
+ * 删除标识 0=正常 2=删除
+ */
+ @TableLogic
+ private Long delFlag;
+
+}
diff --git a/klp-flow/src/main/java/com/klp/flow/domain/TsComplaintTask.java b/klp-flow/src/main/java/com/klp/flow/domain/TsComplaintTask.java
new file mode 100644
index 00000000..e89b647e
--- /dev/null
+++ b/klp-flow/src/main/java/com/klp/flow/domain/TsComplaintTask.java
@@ -0,0 +1,71 @@
+package com.klp.flow.domain;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.klp.common.core.domain.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+/**
+ * 各部门投诉代办任务&意见对象 ts_complaint_task
+ *
+ * @author klp
+ * @date 2026-06-18
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("ts_complaint_task")
+public class TsComplaintTask extends BaseEntity {
+
+ private static final long serialVersionUID=1L;
+
+ /**
+ * 代办任务ID
+ */
+ @TableId(value = "task_id")
+ private Long taskId;
+ /**
+ * 关联投诉受理单ID
+ */
+ private Long acceptId;
+ /**
+ * 负责部门ID(销售/质量/生产)
+ */
+ private Long deptId;
+ /**
+ * 任务状态 0待填写意见 1已完成填写
+ */
+ private Long taskStatus;
+ /**
+ * 意见单号
+ */
+ private String fillNo;
+ /**
+ * 部门处理意见
+ */
+ private String deptOpinion;
+ /**
+ * 填写意见的部门员工ID
+ */
+ private Long fillUserId;
+ /**
+ * 意见填写时间
+ */
+ private Date fillTime;
+ /**
+ * 意见文件
+ */
+ private String fillFile;
+ /**
+ * 备注
+ */
+ private String remark;
+ /**
+ * 删除标识 0=正常 2=删除
+ */
+ @TableLogic
+ private Long delFlag;
+
+}
diff --git a/klp-flow/src/main/java/com/klp/flow/domain/TsPlanExecuteRel.java b/klp-flow/src/main/java/com/klp/flow/domain/TsPlanExecuteRel.java
new file mode 100644
index 00000000..44894745
--- /dev/null
+++ b/klp-flow/src/main/java/com/klp/flow/domain/TsPlanExecuteRel.java
@@ -0,0 +1,71 @@
+package com.klp.flow.domain;
+
+import com.baomidou.mybatisplus.annotation.*;
+import com.klp.common.core.domain.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+/**
+ * 最终方案下发部门及执行反馈对象 ts_plan_execute_rel
+ *
+ * @author klp
+ * @date 2026-06-18
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName("ts_plan_execute_rel")
+public class TsPlanExecuteRel extends BaseEntity {
+
+ private static final long serialVersionUID=1L;
+
+ /**
+ *
+ */
+ @TableId(value = "rel_id")
+ private Long relId;
+ /**
+ * 关联最终方案ID
+ */
+ private Long acceptId;
+ /**
+ * 被下发执行的部门ID
+ */
+ private Long deptId;
+ /**
+ * 执行状态 0待执行反馈 1已反馈完成
+ */
+ private Long executeStatus;
+ /**
+ * 部门执行结果反馈
+ */
+ private String executeResult;
+ /**
+ * 反馈单号
+ */
+ private String feedbackNo;
+ /**
+ * 反馈人
+ */
+ private Long feedbackUserId;
+ /**
+ * 反馈时间
+ */
+ private Date feedbackTime;
+ /**
+ * 反馈文件
+ */
+ private String feedbackFile;
+ /**
+ * 备注
+ */
+ private String remark;
+ /**
+ * 删除标识 0=正常 2=删除
+ */
+ @TableLogic
+ private Long delFlag;
+
+}
diff --git a/klp-flow/src/main/java/com/klp/flow/domain/bo/TsAcceptCoilRelBo.java b/klp-flow/src/main/java/com/klp/flow/domain/bo/TsAcceptCoilRelBo.java
new file mode 100644
index 00000000..ae0d57c0
--- /dev/null
+++ b/klp-flow/src/main/java/com/klp/flow/domain/bo/TsAcceptCoilRelBo.java
@@ -0,0 +1,41 @@
+package com.klp.flow.domain.bo;
+
+import com.klp.common.core.domain.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import javax.validation.constraints.*;
+
+
+/**
+ * 受理单关联钢卷中间业务对象 ts_accept_coil_rel
+ *
+ * @author klp
+ * @date 2026-06-18
+ */
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class TsAcceptCoilRelBo extends BaseEntity {
+
+ /**
+ *
+ */
+ private Long relId;
+
+ /**
+ * 投诉受理单ID
+ */
+ private Long acceptId;
+
+ /**
+ * 钢卷ID
+ */
+ private Long coilId;
+
+ /**
+ * 备注
+ */
+ private String remark;
+
+
+}
diff --git a/klp-flow/src/main/java/com/klp/flow/domain/bo/TsComplaintAcceptBo.java b/klp-flow/src/main/java/com/klp/flow/domain/bo/TsComplaintAcceptBo.java
new file mode 100644
index 00000000..091163e7
--- /dev/null
+++ b/klp-flow/src/main/java/com/klp/flow/domain/bo/TsComplaintAcceptBo.java
@@ -0,0 +1,94 @@
+package com.klp.flow.domain.bo;
+
+import com.klp.common.core.domain.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import javax.validation.constraints.*;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+/**
+ * 投诉受理单主业务对象 ts_complaint_accept
+ *
+ * @author klp
+ * @date 2026-06-18
+ */
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class TsComplaintAcceptBo extends BaseEntity {
+
+ /**
+ * 受理单主键
+ */
+ private Long acceptId;
+
+ /**
+ * 投诉编号 TS-2026-001
+ */
+ private String complaintNo;
+
+ /**
+ * 投诉日期
+ */
+ private Date complaintDate;
+
+ /**
+ * 投诉情况描述
+ */
+ private String complaintContent;
+
+ /**
+ * 客户诉求
+ */
+ private String customerDemand;
+
+ /**
+ * 客户照片凭证等
+ */
+ private String file;
+
+ /**
+ * 审核状态 0待审核 1已通过 2未通过
+ */
+ private Long auditStatus;
+
+ /**
+ * 审核意见
+ */
+ private String auditOpinion;
+
+ /**
+ * 审核人ID
+ */
+ private Long auditUserId;
+
+ /**
+ * 审核时间
+ */
+ private Date auditTime;
+
+ /**
+ * 流程阶段:
+1=待审核 2=部门意见填写中 3=待总负责人汇总方案 4=方案下发执行反馈中 5=全部办结
+ */
+ private Long flowStatus;
+
+ /**
+ * 总负责人ID
+ */
+ private Long principalUserId;
+
+ /**
+ * 总负责人整合后的完整处理方案
+ */
+ private String planContent;
+
+ /**
+ * 备注
+ */
+ private String remark;
+
+
+}
diff --git a/klp-flow/src/main/java/com/klp/flow/domain/bo/TsComplaintTaskBo.java b/klp-flow/src/main/java/com/klp/flow/domain/bo/TsComplaintTaskBo.java
new file mode 100644
index 00000000..724f982a
--- /dev/null
+++ b/klp-flow/src/main/java/com/klp/flow/domain/bo/TsComplaintTaskBo.java
@@ -0,0 +1,73 @@
+package com.klp.flow.domain.bo;
+
+import com.klp.common.core.domain.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import javax.validation.constraints.*;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+/**
+ * 各部门投诉代办任务&意见业务对象 ts_complaint_task
+ *
+ * @author klp
+ * @date 2026-06-18
+ */
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class TsComplaintTaskBo extends BaseEntity {
+
+ /**
+ * 代办任务ID
+ */
+ private Long taskId;
+
+ /**
+ * 关联投诉受理单ID
+ */
+ private Long acceptId;
+
+ /**
+ * 负责部门ID(销售/质量/生产)
+ */
+ private Long deptId;
+
+ /**
+ * 任务状态 0待填写意见 1已完成填写
+ */
+ private Long taskStatus;
+
+ /**
+ * 意见单号
+ */
+ private String fillNo;
+
+ /**
+ * 部门处理意见
+ */
+ private String deptOpinion;
+
+ /**
+ * 填写意见的部门员工ID
+ */
+ private Long fillUserId;
+
+ /**
+ * 意见填写时间
+ */
+ private Date fillTime;
+
+ /**
+ * 意见文件
+ */
+ private String fillFile;
+
+ /**
+ * 备注
+ */
+ private String remark;
+
+
+}
diff --git a/klp-flow/src/main/java/com/klp/flow/domain/bo/TsPlanExecuteRelBo.java b/klp-flow/src/main/java/com/klp/flow/domain/bo/TsPlanExecuteRelBo.java
new file mode 100644
index 00000000..a2ea2e2b
--- /dev/null
+++ b/klp-flow/src/main/java/com/klp/flow/domain/bo/TsPlanExecuteRelBo.java
@@ -0,0 +1,73 @@
+package com.klp.flow.domain.bo;
+
+import com.klp.common.core.domain.BaseEntity;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import javax.validation.constraints.*;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+/**
+ * 最终方案下发部门及执行反馈业务对象 ts_plan_execute_rel
+ *
+ * @author klp
+ * @date 2026-06-18
+ */
+
+@Data
+@EqualsAndHashCode(callSuper = true)
+public class TsPlanExecuteRelBo extends BaseEntity {
+
+ /**
+ *
+ */
+ private Long relId;
+
+ /**
+ * 关联最终方案ID
+ */
+ private Long acceptId;
+
+ /**
+ * 被下发执行的部门ID
+ */
+ private Long deptId;
+
+ /**
+ * 执行状态 0待执行反馈 1已反馈完成
+ */
+ private Long executeStatus;
+
+ /**
+ * 部门执行结果反馈
+ */
+ private String executeResult;
+
+ /**
+ * 反馈单号
+ */
+ private String feedbackNo;
+
+ /**
+ * 反馈人
+ */
+ private Long feedbackUserId;
+
+ /**
+ * 反馈时间
+ */
+ private Date feedbackTime;
+
+ /**
+ * 反馈文件
+ */
+ private String feedbackFile;
+
+ /**
+ * 备注
+ */
+ private String remark;
+
+
+}
diff --git a/klp-flow/src/main/java/com/klp/flow/domain/vo/TsAcceptCoilRelVo.java b/klp-flow/src/main/java/com/klp/flow/domain/vo/TsAcceptCoilRelVo.java
new file mode 100644
index 00000000..13f84740
--- /dev/null
+++ b/klp-flow/src/main/java/com/klp/flow/domain/vo/TsAcceptCoilRelVo.java
@@ -0,0 +1,47 @@
+package com.klp.flow.domain.vo;
+
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.klp.common.annotation.ExcelDictFormat;
+import com.klp.common.convert.ExcelDictConvert;
+import lombok.Data;
+
+
+/**
+ * 受理单关联钢卷中间视图对象 ts_accept_coil_rel
+ *
+ * @author klp
+ * @date 2026-06-18
+ */
+@Data
+@ExcelIgnoreUnannotated
+public class TsAcceptCoilRelVo {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ *
+ */
+ @ExcelProperty(value = "")
+ private Long relId;
+
+ /**
+ * 投诉受理单ID
+ */
+ @ExcelProperty(value = "投诉受理单ID")
+ private Long acceptId;
+
+ /**
+ * 钢卷ID
+ */
+ @ExcelProperty(value = "钢卷ID")
+ private Long coilId;
+
+ /**
+ * 备注
+ */
+ @ExcelProperty(value = "备注")
+ private String remark;
+
+
+}
diff --git a/klp-flow/src/main/java/com/klp/flow/domain/vo/TsComplaintAcceptVo.java b/klp-flow/src/main/java/com/klp/flow/domain/vo/TsComplaintAcceptVo.java
new file mode 100644
index 00000000..b87c9322
--- /dev/null
+++ b/klp-flow/src/main/java/com/klp/flow/domain/vo/TsComplaintAcceptVo.java
@@ -0,0 +1,110 @@
+package com.klp.flow.domain.vo;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.klp.common.annotation.ExcelDictFormat;
+import com.klp.common.convert.ExcelDictConvert;
+import lombok.Data;
+
+
+/**
+ * 投诉受理单主视图对象 ts_complaint_accept
+ *
+ * @author klp
+ * @date 2026-06-18
+ */
+@Data
+@ExcelIgnoreUnannotated
+public class TsComplaintAcceptVo {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 受理单主键
+ */
+ @ExcelProperty(value = "受理单主键")
+ private Long acceptId;
+
+ /**
+ * 投诉编号 TS-2026-001
+ */
+ @ExcelProperty(value = "投诉编号 TS-2026-001")
+ private String complaintNo;
+
+ /**
+ * 投诉日期
+ */
+ @ExcelProperty(value = "投诉日期")
+ private Date complaintDate;
+
+ /**
+ * 投诉情况描述
+ */
+ @ExcelProperty(value = "投诉情况描述")
+ private String complaintContent;
+
+ /**
+ * 客户诉求
+ */
+ @ExcelProperty(value = "客户诉求")
+ private String customerDemand;
+
+ /**
+ * 客户照片凭证等
+ */
+ @ExcelProperty(value = "客户照片凭证等")
+ private String file;
+
+ /**
+ * 审核状态 0待审核 1已通过 2未通过
+ */
+ @ExcelProperty(value = "审核状态 0待审核 1已通过 2未通过")
+ private Long auditStatus;
+
+ /**
+ * 审核意见
+ */
+ @ExcelProperty(value = "审核意见")
+ private String auditOpinion;
+
+ /**
+ * 审核人ID
+ */
+ @ExcelProperty(value = "审核人ID")
+ private Long auditUserId;
+
+ /**
+ * 审核时间
+ */
+ @ExcelProperty(value = "审核时间")
+ private Date auditTime;
+
+ /**
+ * 流程阶段:
+1=待审核 2=部门意见填写中 3=待总负责人汇总方案 4=方案下发执行反馈中 5=全部办结
+ */
+ @ExcelProperty(value = "流程阶段")
+ private Long flowStatus;
+
+ /**
+ * 总负责人ID
+ */
+ @ExcelProperty(value = "总负责人ID")
+ private Long principalUserId;
+
+ /**
+ * 总负责人整合后的完整处理方案
+ */
+ @ExcelProperty(value = "总负责人整合后的完整处理方案")
+ private String planContent;
+
+ /**
+ * 备注
+ */
+ @ExcelProperty(value = "备注")
+ private String remark;
+
+
+}
diff --git a/klp-flow/src/main/java/com/klp/flow/domain/vo/TsComplaintTaskVo.java b/klp-flow/src/main/java/com/klp/flow/domain/vo/TsComplaintTaskVo.java
new file mode 100644
index 00000000..d056c53b
--- /dev/null
+++ b/klp-flow/src/main/java/com/klp/flow/domain/vo/TsComplaintTaskVo.java
@@ -0,0 +1,86 @@
+package com.klp.flow.domain.vo;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.klp.common.annotation.ExcelDictFormat;
+import com.klp.common.convert.ExcelDictConvert;
+import lombok.Data;
+
+
+/**
+ * 各部门投诉代办任务&意见视图对象 ts_complaint_task
+ *
+ * @author klp
+ * @date 2026-06-18
+ */
+@Data
+@ExcelIgnoreUnannotated
+public class TsComplaintTaskVo {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 代办任务ID
+ */
+ @ExcelProperty(value = "代办任务ID")
+ private Long taskId;
+
+ /**
+ * 关联投诉受理单ID
+ */
+ @ExcelProperty(value = "关联投诉受理单ID")
+ private Long acceptId;
+
+ /**
+ * 负责部门ID(销售/质量/生产)
+ */
+ @ExcelProperty(value = "负责部门ID", converter = ExcelDictConvert.class)
+ @ExcelDictFormat(readConverterExp = "销=售/质量/生产")
+ private Long deptId;
+
+ /**
+ * 任务状态 0待填写意见 1已完成填写
+ */
+ @ExcelProperty(value = "任务状态 0待填写意见 1已完成填写")
+ private Long taskStatus;
+
+ /**
+ * 意见单号
+ */
+ @ExcelProperty(value = "意见单号")
+ private String fillNo;
+
+ /**
+ * 部门处理意见
+ */
+ @ExcelProperty(value = "部门处理意见")
+ private String deptOpinion;
+
+ /**
+ * 填写意见的部门员工ID
+ */
+ @ExcelProperty(value = "填写意见的部门员工ID")
+ private Long fillUserId;
+
+ /**
+ * 意见填写时间
+ */
+ @ExcelProperty(value = "意见填写时间")
+ private Date fillTime;
+
+ /**
+ * 意见文件
+ */
+ @ExcelProperty(value = "意见文件")
+ private String fillFile;
+
+ /**
+ * 备注
+ */
+ @ExcelProperty(value = "备注")
+ private String remark;
+
+
+}
diff --git a/klp-flow/src/main/java/com/klp/flow/domain/vo/TsPlanExecuteRelVo.java b/klp-flow/src/main/java/com/klp/flow/domain/vo/TsPlanExecuteRelVo.java
new file mode 100644
index 00000000..79954524
--- /dev/null
+++ b/klp-flow/src/main/java/com/klp/flow/domain/vo/TsPlanExecuteRelVo.java
@@ -0,0 +1,85 @@
+package com.klp.flow.domain.vo;
+
+import java.util.Date;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.klp.common.annotation.ExcelDictFormat;
+import com.klp.common.convert.ExcelDictConvert;
+import lombok.Data;
+
+
+/**
+ * 最终方案下发部门及执行反馈视图对象 ts_plan_execute_rel
+ *
+ * @author klp
+ * @date 2026-06-18
+ */
+@Data
+@ExcelIgnoreUnannotated
+public class TsPlanExecuteRelVo {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ *
+ */
+ @ExcelProperty(value = "")
+ private Long relId;
+
+ /**
+ * 关联最终方案ID
+ */
+ @ExcelProperty(value = "关联最终方案ID")
+ private Long acceptId;
+
+ /**
+ * 被下发执行的部门ID
+ */
+ @ExcelProperty(value = "被下发执行的部门ID")
+ private Long deptId;
+
+ /**
+ * 执行状态 0待执行反馈 1已反馈完成
+ */
+ @ExcelProperty(value = "执行状态 0待执行反馈 1已反馈完成")
+ private Long executeStatus;
+
+ /**
+ * 部门执行结果反馈
+ */
+ @ExcelProperty(value = "部门执行结果反馈")
+ private String executeResult;
+
+ /**
+ * 反馈单号
+ */
+ @ExcelProperty(value = "反馈单号")
+ private String feedbackNo;
+
+ /**
+ * 反馈人
+ */
+ @ExcelProperty(value = "反馈人")
+ private Long feedbackUserId;
+
+ /**
+ * 反馈时间
+ */
+ @ExcelProperty(value = "反馈时间")
+ private Date feedbackTime;
+
+ /**
+ * 反馈文件
+ */
+ @ExcelProperty(value = "反馈文件")
+ private String feedbackFile;
+
+ /**
+ * 备注
+ */
+ @ExcelProperty(value = "备注")
+ private String remark;
+
+
+}
diff --git a/klp-flow/src/main/java/com/klp/flow/mapper/TsAcceptCoilRelMapper.java b/klp-flow/src/main/java/com/klp/flow/mapper/TsAcceptCoilRelMapper.java
new file mode 100644
index 00000000..77820135
--- /dev/null
+++ b/klp-flow/src/main/java/com/klp/flow/mapper/TsAcceptCoilRelMapper.java
@@ -0,0 +1,15 @@
+package com.klp.flow.mapper;
+
+import com.klp.flow.domain.TsAcceptCoilRel;
+import com.klp.flow.domain.vo.TsAcceptCoilRelVo;
+import com.klp.common.core.mapper.BaseMapperPlus;
+
+/**
+ * 受理单关联钢卷中间Mapper接口
+ *
+ * @author klp
+ * @date 2026-06-18
+ */
+public interface TsAcceptCoilRelMapper extends BaseMapperPlus {
+
+}
diff --git a/klp-flow/src/main/java/com/klp/flow/mapper/TsComplaintAcceptMapper.java b/klp-flow/src/main/java/com/klp/flow/mapper/TsComplaintAcceptMapper.java
new file mode 100644
index 00000000..17c7425c
--- /dev/null
+++ b/klp-flow/src/main/java/com/klp/flow/mapper/TsComplaintAcceptMapper.java
@@ -0,0 +1,15 @@
+package com.klp.flow.mapper;
+
+import com.klp.flow.domain.TsComplaintAccept;
+import com.klp.flow.domain.vo.TsComplaintAcceptVo;
+import com.klp.common.core.mapper.BaseMapperPlus;
+
+/**
+ * 投诉受理单主Mapper接口
+ *
+ * @author klp
+ * @date 2026-06-18
+ */
+public interface TsComplaintAcceptMapper extends BaseMapperPlus {
+
+}
diff --git a/klp-flow/src/main/java/com/klp/flow/mapper/TsComplaintTaskMapper.java b/klp-flow/src/main/java/com/klp/flow/mapper/TsComplaintTaskMapper.java
new file mode 100644
index 00000000..00dac2b8
--- /dev/null
+++ b/klp-flow/src/main/java/com/klp/flow/mapper/TsComplaintTaskMapper.java
@@ -0,0 +1,15 @@
+package com.klp.flow.mapper;
+
+import com.klp.flow.domain.TsComplaintTask;
+import com.klp.flow.domain.vo.TsComplaintTaskVo;
+import com.klp.common.core.mapper.BaseMapperPlus;
+
+/**
+ * 各部门投诉代办任务&意见Mapper接口
+ *
+ * @author klp
+ * @date 2026-06-18
+ */
+public interface TsComplaintTaskMapper extends BaseMapperPlus {
+
+}
diff --git a/klp-flow/src/main/java/com/klp/flow/mapper/TsPlanExecuteRelMapper.java b/klp-flow/src/main/java/com/klp/flow/mapper/TsPlanExecuteRelMapper.java
new file mode 100644
index 00000000..a5f1918d
--- /dev/null
+++ b/klp-flow/src/main/java/com/klp/flow/mapper/TsPlanExecuteRelMapper.java
@@ -0,0 +1,15 @@
+package com.klp.flow.mapper;
+
+import com.klp.flow.domain.TsPlanExecuteRel;
+import com.klp.flow.domain.vo.TsPlanExecuteRelVo;
+import com.klp.common.core.mapper.BaseMapperPlus;
+
+/**
+ * 最终方案下发部门及执行反馈Mapper接口
+ *
+ * @author klp
+ * @date 2026-06-18
+ */
+public interface TsPlanExecuteRelMapper extends BaseMapperPlus {
+
+}
diff --git a/klp-flow/src/main/java/com/klp/flow/service/ITsAcceptCoilRelService.java b/klp-flow/src/main/java/com/klp/flow/service/ITsAcceptCoilRelService.java
new file mode 100644
index 00000000..73bf35b7
--- /dev/null
+++ b/klp-flow/src/main/java/com/klp/flow/service/ITsAcceptCoilRelService.java
@@ -0,0 +1,49 @@
+package com.klp.flow.service;
+
+import com.klp.flow.domain.TsAcceptCoilRel;
+import com.klp.flow.domain.vo.TsAcceptCoilRelVo;
+import com.klp.flow.domain.bo.TsAcceptCoilRelBo;
+import com.klp.common.core.page.TableDataInfo;
+import com.klp.common.core.domain.PageQuery;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 受理单关联钢卷中间Service接口
+ *
+ * @author klp
+ * @date 2026-06-18
+ */
+public interface ITsAcceptCoilRelService {
+
+ /**
+ * 查询受理单关联钢卷中间
+ */
+ TsAcceptCoilRelVo queryById(Long relId);
+
+ /**
+ * 查询受理单关联钢卷中间列表
+ */
+ TableDataInfo queryPageList(TsAcceptCoilRelBo bo, PageQuery pageQuery);
+
+ /**
+ * 查询受理单关联钢卷中间列表
+ */
+ List queryList(TsAcceptCoilRelBo bo);
+
+ /**
+ * 新增受理单关联钢卷中间
+ */
+ Boolean insertByBo(TsAcceptCoilRelBo bo);
+
+ /**
+ * 修改受理单关联钢卷中间
+ */
+ Boolean updateByBo(TsAcceptCoilRelBo bo);
+
+ /**
+ * 校验并批量删除受理单关联钢卷中间信息
+ */
+ Boolean deleteWithValidByIds(Collection ids, Boolean isValid);
+}
diff --git a/klp-flow/src/main/java/com/klp/flow/service/ITsComplaintAcceptService.java b/klp-flow/src/main/java/com/klp/flow/service/ITsComplaintAcceptService.java
new file mode 100644
index 00000000..d3276533
--- /dev/null
+++ b/klp-flow/src/main/java/com/klp/flow/service/ITsComplaintAcceptService.java
@@ -0,0 +1,49 @@
+package com.klp.flow.service;
+
+import com.klp.flow.domain.TsComplaintAccept;
+import com.klp.flow.domain.vo.TsComplaintAcceptVo;
+import com.klp.flow.domain.bo.TsComplaintAcceptBo;
+import com.klp.common.core.page.TableDataInfo;
+import com.klp.common.core.domain.PageQuery;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 投诉受理单主Service接口
+ *
+ * @author klp
+ * @date 2026-06-18
+ */
+public interface ITsComplaintAcceptService {
+
+ /**
+ * 查询投诉受理单主
+ */
+ TsComplaintAcceptVo queryById(Long acceptId);
+
+ /**
+ * 查询投诉受理单主列表
+ */
+ TableDataInfo queryPageList(TsComplaintAcceptBo bo, PageQuery pageQuery);
+
+ /**
+ * 查询投诉受理单主列表
+ */
+ List queryList(TsComplaintAcceptBo bo);
+
+ /**
+ * 新增投诉受理单主
+ */
+ Boolean insertByBo(TsComplaintAcceptBo bo);
+
+ /**
+ * 修改投诉受理单主
+ */
+ Boolean updateByBo(TsComplaintAcceptBo bo);
+
+ /**
+ * 校验并批量删除投诉受理单主信息
+ */
+ Boolean deleteWithValidByIds(Collection ids, Boolean isValid);
+}
diff --git a/klp-flow/src/main/java/com/klp/flow/service/ITsComplaintTaskService.java b/klp-flow/src/main/java/com/klp/flow/service/ITsComplaintTaskService.java
new file mode 100644
index 00000000..ab3b3169
--- /dev/null
+++ b/klp-flow/src/main/java/com/klp/flow/service/ITsComplaintTaskService.java
@@ -0,0 +1,49 @@
+package com.klp.flow.service;
+
+import com.klp.flow.domain.TsComplaintTask;
+import com.klp.flow.domain.vo.TsComplaintTaskVo;
+import com.klp.flow.domain.bo.TsComplaintTaskBo;
+import com.klp.common.core.page.TableDataInfo;
+import com.klp.common.core.domain.PageQuery;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 各部门投诉代办任务&意见Service接口
+ *
+ * @author klp
+ * @date 2026-06-18
+ */
+public interface ITsComplaintTaskService {
+
+ /**
+ * 查询各部门投诉代办任务&意见
+ */
+ TsComplaintTaskVo queryById(Long taskId);
+
+ /**
+ * 查询各部门投诉代办任务&意见列表
+ */
+ TableDataInfo queryPageList(TsComplaintTaskBo bo, PageQuery pageQuery);
+
+ /**
+ * 查询各部门投诉代办任务&意见列表
+ */
+ List queryList(TsComplaintTaskBo bo);
+
+ /**
+ * 新增各部门投诉代办任务&意见
+ */
+ Boolean insertByBo(TsComplaintTaskBo bo);
+
+ /**
+ * 修改各部门投诉代办任务&意见
+ */
+ Boolean updateByBo(TsComplaintTaskBo bo);
+
+ /**
+ * 校验并批量删除各部门投诉代办任务&意见信息
+ */
+ Boolean deleteWithValidByIds(Collection ids, Boolean isValid);
+}
diff --git a/klp-flow/src/main/java/com/klp/flow/service/ITsPlanExecuteRelService.java b/klp-flow/src/main/java/com/klp/flow/service/ITsPlanExecuteRelService.java
new file mode 100644
index 00000000..8def8c4e
--- /dev/null
+++ b/klp-flow/src/main/java/com/klp/flow/service/ITsPlanExecuteRelService.java
@@ -0,0 +1,49 @@
+package com.klp.flow.service;
+
+import com.klp.flow.domain.TsPlanExecuteRel;
+import com.klp.flow.domain.vo.TsPlanExecuteRelVo;
+import com.klp.flow.domain.bo.TsPlanExecuteRelBo;
+import com.klp.common.core.page.TableDataInfo;
+import com.klp.common.core.domain.PageQuery;
+
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * 最终方案下发部门及执行反馈Service接口
+ *
+ * @author klp
+ * @date 2026-06-18
+ */
+public interface ITsPlanExecuteRelService {
+
+ /**
+ * 查询最终方案下发部门及执行反馈
+ */
+ TsPlanExecuteRelVo queryById(Long relId);
+
+ /**
+ * 查询最终方案下发部门及执行反馈列表
+ */
+ TableDataInfo queryPageList(TsPlanExecuteRelBo bo, PageQuery pageQuery);
+
+ /**
+ * 查询最终方案下发部门及执行反馈列表
+ */
+ List queryList(TsPlanExecuteRelBo bo);
+
+ /**
+ * 新增最终方案下发部门及执行反馈
+ */
+ Boolean insertByBo(TsPlanExecuteRelBo bo);
+
+ /**
+ * 修改最终方案下发部门及执行反馈
+ */
+ Boolean updateByBo(TsPlanExecuteRelBo bo);
+
+ /**
+ * 校验并批量删除最终方案下发部门及执行反馈信息
+ */
+ Boolean deleteWithValidByIds(Collection ids, Boolean isValid);
+}
diff --git a/klp-flow/src/main/java/com/klp/flow/service/impl/TsAcceptCoilRelServiceImpl.java b/klp-flow/src/main/java/com/klp/flow/service/impl/TsAcceptCoilRelServiceImpl.java
new file mode 100644
index 00000000..6dd2c9d8
--- /dev/null
+++ b/klp-flow/src/main/java/com/klp/flow/service/impl/TsAcceptCoilRelServiceImpl.java
@@ -0,0 +1,109 @@
+package com.klp.flow.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import com.klp.common.core.page.TableDataInfo;
+import com.klp.common.core.domain.PageQuery;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+import com.klp.flow.domain.bo.TsAcceptCoilRelBo;
+import com.klp.flow.domain.vo.TsAcceptCoilRelVo;
+import com.klp.flow.domain.TsAcceptCoilRel;
+import com.klp.flow.mapper.TsAcceptCoilRelMapper;
+import com.klp.flow.service.ITsAcceptCoilRelService;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Collection;
+
+/**
+ * 受理单关联钢卷中间Service业务层处理
+ *
+ * @author klp
+ * @date 2026-06-18
+ */
+@RequiredArgsConstructor
+@Service
+public class TsAcceptCoilRelServiceImpl implements ITsAcceptCoilRelService {
+
+ private final TsAcceptCoilRelMapper baseMapper;
+
+ /**
+ * 查询受理单关联钢卷中间
+ */
+ @Override
+ public TsAcceptCoilRelVo queryById(Long relId){
+ return baseMapper.selectVoById(relId);
+ }
+
+ /**
+ * 查询受理单关联钢卷中间列表
+ */
+ @Override
+ public TableDataInfo queryPageList(TsAcceptCoilRelBo bo, PageQuery pageQuery) {
+ LambdaQueryWrapper lqw = buildQueryWrapper(bo);
+ Page result = baseMapper.selectVoPage(pageQuery.build(), lqw);
+ return TableDataInfo.build(result);
+ }
+
+ /**
+ * 查询受理单关联钢卷中间列表
+ */
+ @Override
+ public List queryList(TsAcceptCoilRelBo bo) {
+ LambdaQueryWrapper lqw = buildQueryWrapper(bo);
+ return baseMapper.selectVoList(lqw);
+ }
+
+ private LambdaQueryWrapper buildQueryWrapper(TsAcceptCoilRelBo bo) {
+ Map params = bo.getParams();
+ LambdaQueryWrapper lqw = Wrappers.lambdaQuery();
+ lqw.eq(bo.getAcceptId() != null, TsAcceptCoilRel::getAcceptId, bo.getAcceptId());
+ lqw.eq(bo.getCoilId() != null, TsAcceptCoilRel::getCoilId, bo.getCoilId());
+ return lqw;
+ }
+
+ /**
+ * 新增受理单关联钢卷中间
+ */
+ @Override
+ public Boolean insertByBo(TsAcceptCoilRelBo bo) {
+ TsAcceptCoilRel add = BeanUtil.toBean(bo, TsAcceptCoilRel.class);
+ validEntityBeforeSave(add);
+ boolean flag = baseMapper.insert(add) > 0;
+ if (flag) {
+ bo.setRelId(add.getRelId());
+ }
+ return flag;
+ }
+
+ /**
+ * 修改受理单关联钢卷中间
+ */
+ @Override
+ public Boolean updateByBo(TsAcceptCoilRelBo bo) {
+ TsAcceptCoilRel update = BeanUtil.toBean(bo, TsAcceptCoilRel.class);
+ validEntityBeforeSave(update);
+ return baseMapper.updateById(update) > 0;
+ }
+
+ /**
+ * 保存前的数据校验
+ */
+ private void validEntityBeforeSave(TsAcceptCoilRel entity){
+ //TODO 做一些数据校验,如唯一约束
+ }
+
+ /**
+ * 批量删除受理单关联钢卷中间
+ */
+ @Override
+ public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) {
+ if(isValid){
+ //TODO 做一些业务上的校验,判断是否需要校验
+ }
+ return baseMapper.deleteBatchIds(ids) > 0;
+ }
+}
diff --git a/klp-flow/src/main/java/com/klp/flow/service/impl/TsComplaintAcceptServiceImpl.java b/klp-flow/src/main/java/com/klp/flow/service/impl/TsComplaintAcceptServiceImpl.java
new file mode 100644
index 00000000..fa863cd5
--- /dev/null
+++ b/klp-flow/src/main/java/com/klp/flow/service/impl/TsComplaintAcceptServiceImpl.java
@@ -0,0 +1,120 @@
+package com.klp.flow.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import com.klp.common.core.page.TableDataInfo;
+import com.klp.common.core.domain.PageQuery;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.klp.common.utils.StringUtils;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+import com.klp.flow.domain.bo.TsComplaintAcceptBo;
+import com.klp.flow.domain.vo.TsComplaintAcceptVo;
+import com.klp.flow.domain.TsComplaintAccept;
+import com.klp.flow.mapper.TsComplaintAcceptMapper;
+import com.klp.flow.service.ITsComplaintAcceptService;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Collection;
+
+/**
+ * 投诉受理单主Service业务层处理
+ *
+ * @author klp
+ * @date 2026-06-18
+ */
+@RequiredArgsConstructor
+@Service
+public class TsComplaintAcceptServiceImpl implements ITsComplaintAcceptService {
+
+ private final TsComplaintAcceptMapper baseMapper;
+
+ /**
+ * 查询投诉受理单主
+ */
+ @Override
+ public TsComplaintAcceptVo queryById(Long acceptId){
+ return baseMapper.selectVoById(acceptId);
+ }
+
+ /**
+ * 查询投诉受理单主列表
+ */
+ @Override
+ public TableDataInfo queryPageList(TsComplaintAcceptBo bo, PageQuery pageQuery) {
+ LambdaQueryWrapper lqw = buildQueryWrapper(bo);
+ Page result = baseMapper.selectVoPage(pageQuery.build(), lqw);
+ return TableDataInfo.build(result);
+ }
+
+ /**
+ * 查询投诉受理单主列表
+ */
+ @Override
+ public List queryList(TsComplaintAcceptBo bo) {
+ LambdaQueryWrapper lqw = buildQueryWrapper(bo);
+ return baseMapper.selectVoList(lqw);
+ }
+
+ private LambdaQueryWrapper buildQueryWrapper(TsComplaintAcceptBo bo) {
+ Map params = bo.getParams();
+ LambdaQueryWrapper lqw = Wrappers.lambdaQuery();
+ lqw.eq(StringUtils.isNotBlank(bo.getComplaintNo()), TsComplaintAccept::getComplaintNo, bo.getComplaintNo());
+ lqw.eq(bo.getComplaintDate() != null, TsComplaintAccept::getComplaintDate, bo.getComplaintDate());
+ lqw.eq(StringUtils.isNotBlank(bo.getComplaintContent()), TsComplaintAccept::getComplaintContent, bo.getComplaintContent());
+ lqw.eq(StringUtils.isNotBlank(bo.getCustomerDemand()), TsComplaintAccept::getCustomerDemand, bo.getCustomerDemand());
+ lqw.eq(StringUtils.isNotBlank(bo.getFile()), TsComplaintAccept::getFile, bo.getFile());
+ lqw.eq(bo.getAuditStatus() != null, TsComplaintAccept::getAuditStatus, bo.getAuditStatus());
+ lqw.eq(StringUtils.isNotBlank(bo.getAuditOpinion()), TsComplaintAccept::getAuditOpinion, bo.getAuditOpinion());
+ lqw.eq(bo.getAuditUserId() != null, TsComplaintAccept::getAuditUserId, bo.getAuditUserId());
+ lqw.eq(bo.getAuditTime() != null, TsComplaintAccept::getAuditTime, bo.getAuditTime());
+ lqw.eq(bo.getFlowStatus() != null, TsComplaintAccept::getFlowStatus, bo.getFlowStatus());
+ lqw.eq(bo.getPrincipalUserId() != null, TsComplaintAccept::getPrincipalUserId, bo.getPrincipalUserId());
+ lqw.eq(StringUtils.isNotBlank(bo.getPlanContent()), TsComplaintAccept::getPlanContent, bo.getPlanContent());
+ return lqw;
+ }
+
+ /**
+ * 新增投诉受理单主
+ */
+ @Override
+ public Boolean insertByBo(TsComplaintAcceptBo bo) {
+ TsComplaintAccept add = BeanUtil.toBean(bo, TsComplaintAccept.class);
+ validEntityBeforeSave(add);
+ boolean flag = baseMapper.insert(add) > 0;
+ if (flag) {
+ bo.setAcceptId(add.getAcceptId());
+ }
+ return flag;
+ }
+
+ /**
+ * 修改投诉受理单主
+ */
+ @Override
+ public Boolean updateByBo(TsComplaintAcceptBo bo) {
+ TsComplaintAccept update = BeanUtil.toBean(bo, TsComplaintAccept.class);
+ validEntityBeforeSave(update);
+ return baseMapper.updateById(update) > 0;
+ }
+
+ /**
+ * 保存前的数据校验
+ */
+ private void validEntityBeforeSave(TsComplaintAccept entity){
+ //TODO 做一些数据校验,如唯一约束
+ }
+
+ /**
+ * 批量删除投诉受理单主
+ */
+ @Override
+ public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) {
+ if(isValid){
+ //TODO 做一些业务上的校验,判断是否需要校验
+ }
+ return baseMapper.deleteBatchIds(ids) > 0;
+ }
+}
diff --git a/klp-flow/src/main/java/com/klp/flow/service/impl/TsComplaintTaskServiceImpl.java b/klp-flow/src/main/java/com/klp/flow/service/impl/TsComplaintTaskServiceImpl.java
new file mode 100644
index 00000000..355c1616
--- /dev/null
+++ b/klp-flow/src/main/java/com/klp/flow/service/impl/TsComplaintTaskServiceImpl.java
@@ -0,0 +1,116 @@
+package com.klp.flow.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import com.klp.common.core.page.TableDataInfo;
+import com.klp.common.core.domain.PageQuery;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.klp.common.utils.StringUtils;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+import com.klp.flow.domain.bo.TsComplaintTaskBo;
+import com.klp.flow.domain.vo.TsComplaintTaskVo;
+import com.klp.flow.domain.TsComplaintTask;
+import com.klp.flow.mapper.TsComplaintTaskMapper;
+import com.klp.flow.service.ITsComplaintTaskService;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Collection;
+
+/**
+ * 各部门投诉代办任务&意见Service业务层处理
+ *
+ * @author klp
+ * @date 2026-06-18
+ */
+@RequiredArgsConstructor
+@Service
+public class TsComplaintTaskServiceImpl implements ITsComplaintTaskService {
+
+ private final TsComplaintTaskMapper baseMapper;
+
+ /**
+ * 查询各部门投诉代办任务&意见
+ */
+ @Override
+ public TsComplaintTaskVo queryById(Long taskId){
+ return baseMapper.selectVoById(taskId);
+ }
+
+ /**
+ * 查询各部门投诉代办任务&意见列表
+ */
+ @Override
+ public TableDataInfo queryPageList(TsComplaintTaskBo bo, PageQuery pageQuery) {
+ LambdaQueryWrapper lqw = buildQueryWrapper(bo);
+ Page result = baseMapper.selectVoPage(pageQuery.build(), lqw);
+ return TableDataInfo.build(result);
+ }
+
+ /**
+ * 查询各部门投诉代办任务&意见列表
+ */
+ @Override
+ public List queryList(TsComplaintTaskBo bo) {
+ LambdaQueryWrapper lqw = buildQueryWrapper(bo);
+ return baseMapper.selectVoList(lqw);
+ }
+
+ private LambdaQueryWrapper buildQueryWrapper(TsComplaintTaskBo bo) {
+ Map params = bo.getParams();
+ LambdaQueryWrapper lqw = Wrappers.lambdaQuery();
+ lqw.eq(bo.getAcceptId() != null, TsComplaintTask::getAcceptId, bo.getAcceptId());
+ lqw.eq(bo.getDeptId() != null, TsComplaintTask::getDeptId, bo.getDeptId());
+ lqw.eq(bo.getTaskStatus() != null, TsComplaintTask::getTaskStatus, bo.getTaskStatus());
+ lqw.eq(StringUtils.isNotBlank(bo.getFillNo()), TsComplaintTask::getFillNo, bo.getFillNo());
+ lqw.eq(StringUtils.isNotBlank(bo.getDeptOpinion()), TsComplaintTask::getDeptOpinion, bo.getDeptOpinion());
+ lqw.eq(bo.getFillUserId() != null, TsComplaintTask::getFillUserId, bo.getFillUserId());
+ lqw.eq(bo.getFillTime() != null, TsComplaintTask::getFillTime, bo.getFillTime());
+ lqw.eq(StringUtils.isNotBlank(bo.getFillFile()), TsComplaintTask::getFillFile, bo.getFillFile());
+ return lqw;
+ }
+
+ /**
+ * 新增各部门投诉代办任务&意见
+ */
+ @Override
+ public Boolean insertByBo(TsComplaintTaskBo bo) {
+ TsComplaintTask add = BeanUtil.toBean(bo, TsComplaintTask.class);
+ validEntityBeforeSave(add);
+ boolean flag = baseMapper.insert(add) > 0;
+ if (flag) {
+ bo.setTaskId(add.getTaskId());
+ }
+ return flag;
+ }
+
+ /**
+ * 修改各部门投诉代办任务&意见
+ */
+ @Override
+ public Boolean updateByBo(TsComplaintTaskBo bo) {
+ TsComplaintTask update = BeanUtil.toBean(bo, TsComplaintTask.class);
+ validEntityBeforeSave(update);
+ return baseMapper.updateById(update) > 0;
+ }
+
+ /**
+ * 保存前的数据校验
+ */
+ private void validEntityBeforeSave(TsComplaintTask entity){
+ //TODO 做一些数据校验,如唯一约束
+ }
+
+ /**
+ * 批量删除各部门投诉代办任务&意见
+ */
+ @Override
+ public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) {
+ if(isValid){
+ //TODO 做一些业务上的校验,判断是否需要校验
+ }
+ return baseMapper.deleteBatchIds(ids) > 0;
+ }
+}
diff --git a/klp-flow/src/main/java/com/klp/flow/service/impl/TsPlanExecuteRelServiceImpl.java b/klp-flow/src/main/java/com/klp/flow/service/impl/TsPlanExecuteRelServiceImpl.java
new file mode 100644
index 00000000..5d71889c
--- /dev/null
+++ b/klp-flow/src/main/java/com/klp/flow/service/impl/TsPlanExecuteRelServiceImpl.java
@@ -0,0 +1,116 @@
+package com.klp.flow.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import com.klp.common.core.page.TableDataInfo;
+import com.klp.common.core.domain.PageQuery;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.klp.common.utils.StringUtils;
+import lombok.RequiredArgsConstructor;
+import org.springframework.stereotype.Service;
+import com.klp.flow.domain.bo.TsPlanExecuteRelBo;
+import com.klp.flow.domain.vo.TsPlanExecuteRelVo;
+import com.klp.flow.domain.TsPlanExecuteRel;
+import com.klp.flow.mapper.TsPlanExecuteRelMapper;
+import com.klp.flow.service.ITsPlanExecuteRelService;
+
+import java.util.List;
+import java.util.Map;
+import java.util.Collection;
+
+/**
+ * 最终方案下发部门及执行反馈Service业务层处理
+ *
+ * @author klp
+ * @date 2026-06-18
+ */
+@RequiredArgsConstructor
+@Service
+public class TsPlanExecuteRelServiceImpl implements ITsPlanExecuteRelService {
+
+ private final TsPlanExecuteRelMapper baseMapper;
+
+ /**
+ * 查询最终方案下发部门及执行反馈
+ */
+ @Override
+ public TsPlanExecuteRelVo queryById(Long relId){
+ return baseMapper.selectVoById(relId);
+ }
+
+ /**
+ * 查询最终方案下发部门及执行反馈列表
+ */
+ @Override
+ public TableDataInfo queryPageList(TsPlanExecuteRelBo bo, PageQuery pageQuery) {
+ LambdaQueryWrapper lqw = buildQueryWrapper(bo);
+ Page result = baseMapper.selectVoPage(pageQuery.build(), lqw);
+ return TableDataInfo.build(result);
+ }
+
+ /**
+ * 查询最终方案下发部门及执行反馈列表
+ */
+ @Override
+ public List queryList(TsPlanExecuteRelBo bo) {
+ LambdaQueryWrapper lqw = buildQueryWrapper(bo);
+ return baseMapper.selectVoList(lqw);
+ }
+
+ private LambdaQueryWrapper buildQueryWrapper(TsPlanExecuteRelBo bo) {
+ Map params = bo.getParams();
+ LambdaQueryWrapper lqw = Wrappers.lambdaQuery();
+ lqw.eq(bo.getAcceptId() != null, TsPlanExecuteRel::getAcceptId, bo.getAcceptId());
+ lqw.eq(bo.getDeptId() != null, TsPlanExecuteRel::getDeptId, bo.getDeptId());
+ lqw.eq(bo.getExecuteStatus() != null, TsPlanExecuteRel::getExecuteStatus, bo.getExecuteStatus());
+ lqw.eq(StringUtils.isNotBlank(bo.getExecuteResult()), TsPlanExecuteRel::getExecuteResult, bo.getExecuteResult());
+ lqw.eq(StringUtils.isNotBlank(bo.getFeedbackNo()), TsPlanExecuteRel::getFeedbackNo, bo.getFeedbackNo());
+ lqw.eq(bo.getFeedbackUserId() != null, TsPlanExecuteRel::getFeedbackUserId, bo.getFeedbackUserId());
+ lqw.eq(bo.getFeedbackTime() != null, TsPlanExecuteRel::getFeedbackTime, bo.getFeedbackTime());
+ lqw.eq(StringUtils.isNotBlank(bo.getFeedbackFile()), TsPlanExecuteRel::getFeedbackFile, bo.getFeedbackFile());
+ return lqw;
+ }
+
+ /**
+ * 新增最终方案下发部门及执行反馈
+ */
+ @Override
+ public Boolean insertByBo(TsPlanExecuteRelBo bo) {
+ TsPlanExecuteRel add = BeanUtil.toBean(bo, TsPlanExecuteRel.class);
+ validEntityBeforeSave(add);
+ boolean flag = baseMapper.insert(add) > 0;
+ if (flag) {
+ bo.setRelId(add.getRelId());
+ }
+ return flag;
+ }
+
+ /**
+ * 修改最终方案下发部门及执行反馈
+ */
+ @Override
+ public Boolean updateByBo(TsPlanExecuteRelBo bo) {
+ TsPlanExecuteRel update = BeanUtil.toBean(bo, TsPlanExecuteRel.class);
+ validEntityBeforeSave(update);
+ return baseMapper.updateById(update) > 0;
+ }
+
+ /**
+ * 保存前的数据校验
+ */
+ private void validEntityBeforeSave(TsPlanExecuteRel entity){
+ //TODO 做一些数据校验,如唯一约束
+ }
+
+ /**
+ * 批量删除最终方案下发部门及执行反馈
+ */
+ @Override
+ public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) {
+ if(isValid){
+ //TODO 做一些业务上的校验,判断是否需要校验
+ }
+ return baseMapper.deleteBatchIds(ids) > 0;
+ }
+}
diff --git a/klp-flow/src/main/resources/mapper/flow/TsAcceptCoilRelMapper.xml b/klp-flow/src/main/resources/mapper/flow/TsAcceptCoilRelMapper.xml
new file mode 100644
index 00000000..6404c008
--- /dev/null
+++ b/klp-flow/src/main/resources/mapper/flow/TsAcceptCoilRelMapper.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/klp-flow/src/main/resources/mapper/flow/TsComplaintAcceptMapper.xml b/klp-flow/src/main/resources/mapper/flow/TsComplaintAcceptMapper.xml
new file mode 100644
index 00000000..5334e58e
--- /dev/null
+++ b/klp-flow/src/main/resources/mapper/flow/TsComplaintAcceptMapper.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/klp-flow/src/main/resources/mapper/flow/TsComplaintTaskMapper.xml b/klp-flow/src/main/resources/mapper/flow/TsComplaintTaskMapper.xml
new file mode 100644
index 00000000..e2dff390
--- /dev/null
+++ b/klp-flow/src/main/resources/mapper/flow/TsComplaintTaskMapper.xml
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/klp-flow/src/main/resources/mapper/flow/TsPlanExecuteRelMapper.xml b/klp-flow/src/main/resources/mapper/flow/TsPlanExecuteRelMapper.xml
new file mode 100644
index 00000000..f25b391f
--- /dev/null
+++ b/klp-flow/src/main/resources/mapper/flow/TsPlanExecuteRelMapper.xml
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/pom.xml b/pom.xml
index 5ca7ccf2..7663e893 100644
--- a/pom.xml
+++ b/pom.xml
@@ -410,7 +410,11 @@
klp-cost
${klp-flowable-plus.version}
-
+
+ com.klp
+ klp-flow
+ ${klp-flowable-plus.version}
+
@@ -437,6 +441,7 @@
klp-da
klp-aps
klp-cost
+ klp-flow
pom
diff --git a/script/sql/mysql/klp-oa.sql b/script/sql/mysql/klp-oa.sql
index 9d08bfdc..4e2149c4 100644
--- a/script/sql/mysql/klp-oa.sql
+++ b/script/sql/mysql/klp-oa.sql
@@ -3740,6 +3740,7 @@ CREATE TABLE `wms_employee_info` (
`is_regular` tinyint(1) NULL DEFAULT 0 COMMENT '是否转正:0=未转正,1=已转正',
`regular_time` date NULL DEFAULT NULL COMMENT '转正时间',
`remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL COMMENT '备注',
+ `is_spicy_eater` tinyint(1) NULL DEFAULT 0 COMMENT '是否吃辣:0=否,1=是',
PRIMARY KEY (`info_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 2047111284850335746 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci COMMENT = '员工信息表' ROW_FORMAT = Dynamic;