feat(flow): 添加投诉处理流程模块及相关服务接口

- 创建受理单关联钢卷中间表服务接口及实现类
- 添加投诉受理单主服务接口及相应控制器
- 实现各部门投诉代办任务服务功能
- 集成最终方案下发部门及执行反馈服务
- 在员工信息表中新增是否吃辣字段
- 配置klp-flow模块依赖并注册到系统中
This commit is contained in:
2026-06-18 11:19:55 +08:00
parent 2fc4bf4043
commit 5b0cb314e4
36 changed files with 2129 additions and 1 deletions

View File

@@ -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<TsAcceptCoilRelVo> 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<TsAcceptCoilRelVo> list = iTsAcceptCoilRelService.queryList(bo);
ExcelUtil.exportExcel(list, "受理单关联钢卷中间", TsAcceptCoilRelVo.class, response);
}
/**
* 获取受理单关联钢卷中间详细信息
*
* @param relId 主键
*/
@GetMapping("/{relId}")
public R<TsAcceptCoilRelVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long relId) {
return R.ok(iTsAcceptCoilRelService.queryById(relId));
}
/**
* 新增受理单关联钢卷中间
*/
@Log(title = "受理单关联钢卷中间", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody TsAcceptCoilRelBo bo) {
return toAjax(iTsAcceptCoilRelService.insertByBo(bo));
}
/**
* 修改受理单关联钢卷中间
*/
@Log(title = "受理单关联钢卷中间", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody TsAcceptCoilRelBo bo) {
return toAjax(iTsAcceptCoilRelService.updateByBo(bo));
}
/**
* 删除受理单关联钢卷中间
*
* @param relIds 主键串
*/
@Log(title = "受理单关联钢卷中间", businessType = BusinessType.DELETE)
@DeleteMapping("/{relIds}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] relIds) {
return toAjax(iTsAcceptCoilRelService.deleteWithValidByIds(Arrays.asList(relIds), true));
}
}

View File

@@ -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<TsComplaintAcceptVo> 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<TsComplaintAcceptVo> list = iTsComplaintAcceptService.queryList(bo);
ExcelUtil.exportExcel(list, "投诉受理单主", TsComplaintAcceptVo.class, response);
}
/**
* 获取投诉受理单主详细信息
*
* @param acceptId 主键
*/
@GetMapping("/{acceptId}")
public R<TsComplaintAcceptVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long acceptId) {
return R.ok(iTsComplaintAcceptService.queryById(acceptId));
}
/**
* 新增投诉受理单主
*/
@Log(title = "投诉受理单主", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody TsComplaintAcceptBo bo) {
return toAjax(iTsComplaintAcceptService.insertByBo(bo));
}
/**
* 修改投诉受理单主
*/
@Log(title = "投诉受理单主", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody TsComplaintAcceptBo bo) {
return toAjax(iTsComplaintAcceptService.updateByBo(bo));
}
/**
* 删除投诉受理单主
*
* @param acceptIds 主键串
*/
@Log(title = "投诉受理单主", businessType = BusinessType.DELETE)
@DeleteMapping("/{acceptIds}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] acceptIds) {
return toAjax(iTsComplaintAcceptService.deleteWithValidByIds(Arrays.asList(acceptIds), true));
}
}

View File

@@ -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<TsComplaintTaskVo> 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<TsComplaintTaskVo> list = iTsComplaintTaskService.queryList(bo);
ExcelUtil.exportExcel(list, "各部门投诉代办任务&意见", TsComplaintTaskVo.class, response);
}
/**
* 获取各部门投诉代办任务&意见详细信息
*
* @param taskId 主键
*/
@GetMapping("/{taskId}")
public R<TsComplaintTaskVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long taskId) {
return R.ok(iTsComplaintTaskService.queryById(taskId));
}
/**
* 新增各部门投诉代办任务&意见
*/
@Log(title = "各部门投诉代办任务&意见", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody TsComplaintTaskBo bo) {
return toAjax(iTsComplaintTaskService.insertByBo(bo));
}
/**
* 修改各部门投诉代办任务&意见
*/
@Log(title = "各部门投诉代办任务&意见", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody TsComplaintTaskBo bo) {
return toAjax(iTsComplaintTaskService.updateByBo(bo));
}
/**
* 删除各部门投诉代办任务&意见
*
* @param taskIds 主键串
*/
@Log(title = "各部门投诉代办任务&意见", businessType = BusinessType.DELETE)
@DeleteMapping("/{taskIds}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] taskIds) {
return toAjax(iTsComplaintTaskService.deleteWithValidByIds(Arrays.asList(taskIds), true));
}
}

View File

@@ -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<TsPlanExecuteRelVo> 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<TsPlanExecuteRelVo> list = iTsPlanExecuteRelService.queryList(bo);
ExcelUtil.exportExcel(list, "最终方案下发部门及执行反馈", TsPlanExecuteRelVo.class, response);
}
/**
* 获取最终方案下发部门及执行反馈详细信息
*
* @param relId 主键
*/
@GetMapping("/{relId}")
public R<TsPlanExecuteRelVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long relId) {
return R.ok(iTsPlanExecuteRelService.queryById(relId));
}
/**
* 新增最终方案下发部门及执行反馈
*/
@Log(title = "最终方案下发部门及执行反馈", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody TsPlanExecuteRelBo bo) {
return toAjax(iTsPlanExecuteRelService.insertByBo(bo));
}
/**
* 修改最终方案下发部门及执行反馈
*/
@Log(title = "最终方案下发部门及执行反馈", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody TsPlanExecuteRelBo bo) {
return toAjax(iTsPlanExecuteRelService.updateByBo(bo));
}
/**
* 删除最终方案下发部门及执行反馈
*
* @param relIds 主键串
*/
@Log(title = "最终方案下发部门及执行反馈", businessType = BusinessType.DELETE)
@DeleteMapping("/{relIds}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] relIds) {
return toAjax(iTsPlanExecuteRelService.deleteWithValidByIds(Arrays.asList(relIds), true));
}
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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;
}

View File

@@ -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<TsAcceptCoilRelMapper, TsAcceptCoilRel, TsAcceptCoilRelVo> {
}

View File

@@ -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<TsComplaintAcceptMapper, TsComplaintAccept, TsComplaintAcceptVo> {
}

View File

@@ -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<TsComplaintTaskMapper, TsComplaintTask, TsComplaintTaskVo> {
}

View File

@@ -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<TsPlanExecuteRelMapper, TsPlanExecuteRel, TsPlanExecuteRelVo> {
}

View File

@@ -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<TsAcceptCoilRelVo> queryPageList(TsAcceptCoilRelBo bo, PageQuery pageQuery);
/**
* 查询受理单关联钢卷中间列表
*/
List<TsAcceptCoilRelVo> queryList(TsAcceptCoilRelBo bo);
/**
* 新增受理单关联钢卷中间
*/
Boolean insertByBo(TsAcceptCoilRelBo bo);
/**
* 修改受理单关联钢卷中间
*/
Boolean updateByBo(TsAcceptCoilRelBo bo);
/**
* 校验并批量删除受理单关联钢卷中间信息
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
}

View File

@@ -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<TsComplaintAcceptVo> queryPageList(TsComplaintAcceptBo bo, PageQuery pageQuery);
/**
* 查询投诉受理单主列表
*/
List<TsComplaintAcceptVo> queryList(TsComplaintAcceptBo bo);
/**
* 新增投诉受理单主
*/
Boolean insertByBo(TsComplaintAcceptBo bo);
/**
* 修改投诉受理单主
*/
Boolean updateByBo(TsComplaintAcceptBo bo);
/**
* 校验并批量删除投诉受理单主信息
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
}

View File

@@ -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<TsComplaintTaskVo> queryPageList(TsComplaintTaskBo bo, PageQuery pageQuery);
/**
* 查询各部门投诉代办任务&意见列表
*/
List<TsComplaintTaskVo> queryList(TsComplaintTaskBo bo);
/**
* 新增各部门投诉代办任务&意见
*/
Boolean insertByBo(TsComplaintTaskBo bo);
/**
* 修改各部门投诉代办任务&意见
*/
Boolean updateByBo(TsComplaintTaskBo bo);
/**
* 校验并批量删除各部门投诉代办任务&意见信息
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
}

View File

@@ -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<TsPlanExecuteRelVo> queryPageList(TsPlanExecuteRelBo bo, PageQuery pageQuery);
/**
* 查询最终方案下发部门及执行反馈列表
*/
List<TsPlanExecuteRelVo> queryList(TsPlanExecuteRelBo bo);
/**
* 新增最终方案下发部门及执行反馈
*/
Boolean insertByBo(TsPlanExecuteRelBo bo);
/**
* 修改最终方案下发部门及执行反馈
*/
Boolean updateByBo(TsPlanExecuteRelBo bo);
/**
* 校验并批量删除最终方案下发部门及执行反馈信息
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
}

View File

@@ -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<TsAcceptCoilRelVo> queryPageList(TsAcceptCoilRelBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<TsAcceptCoilRel> lqw = buildQueryWrapper(bo);
Page<TsAcceptCoilRelVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}
/**
* 查询受理单关联钢卷中间列表
*/
@Override
public List<TsAcceptCoilRelVo> queryList(TsAcceptCoilRelBo bo) {
LambdaQueryWrapper<TsAcceptCoilRel> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}
private LambdaQueryWrapper<TsAcceptCoilRel> buildQueryWrapper(TsAcceptCoilRelBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<TsAcceptCoilRel> 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<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteBatchIds(ids) > 0;
}
}

View File

@@ -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<TsComplaintAcceptVo> queryPageList(TsComplaintAcceptBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<TsComplaintAccept> lqw = buildQueryWrapper(bo);
Page<TsComplaintAcceptVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}
/**
* 查询投诉受理单主列表
*/
@Override
public List<TsComplaintAcceptVo> queryList(TsComplaintAcceptBo bo) {
LambdaQueryWrapper<TsComplaintAccept> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}
private LambdaQueryWrapper<TsComplaintAccept> buildQueryWrapper(TsComplaintAcceptBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<TsComplaintAccept> 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<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteBatchIds(ids) > 0;
}
}

View File

@@ -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<TsComplaintTaskVo> queryPageList(TsComplaintTaskBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<TsComplaintTask> lqw = buildQueryWrapper(bo);
Page<TsComplaintTaskVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}
/**
* 查询各部门投诉代办任务&意见列表
*/
@Override
public List<TsComplaintTaskVo> queryList(TsComplaintTaskBo bo) {
LambdaQueryWrapper<TsComplaintTask> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}
private LambdaQueryWrapper<TsComplaintTask> buildQueryWrapper(TsComplaintTaskBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<TsComplaintTask> 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<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteBatchIds(ids) > 0;
}
}

View File

@@ -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<TsPlanExecuteRelVo> queryPageList(TsPlanExecuteRelBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<TsPlanExecuteRel> lqw = buildQueryWrapper(bo);
Page<TsPlanExecuteRelVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}
/**
* 查询最终方案下发部门及执行反馈列表
*/
@Override
public List<TsPlanExecuteRelVo> queryList(TsPlanExecuteRelBo bo) {
LambdaQueryWrapper<TsPlanExecuteRel> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}
private LambdaQueryWrapper<TsPlanExecuteRel> buildQueryWrapper(TsPlanExecuteRelBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<TsPlanExecuteRel> 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<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteBatchIds(ids) > 0;
}
}

View File

@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.klp.flow.mapper.TsAcceptCoilRelMapper">
<resultMap type="com.klp.flow.domain.TsAcceptCoilRel" id="TsAcceptCoilRelResult">
<result property="relId" column="rel_id"/>
<result property="acceptId" column="accept_id"/>
<result property="coilId" column="coil_id"/>
<result property="remark" column="remark"/>
<result property="delFlag" column="del_flag"/>
<result property="createBy" column="create_by"/>
<result property="createTime" column="create_time"/>
<result property="updateBy" column="update_by"/>
<result property="updateTime" column="update_time"/>
</resultMap>
</mapper>

View File

@@ -0,0 +1,30 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.klp.flow.mapper.TsComplaintAcceptMapper">
<resultMap type="com.klp.flow.domain.TsComplaintAccept" id="TsComplaintAcceptResult">
<result property="acceptId" column="accept_id"/>
<result property="complaintNo" column="complaint_no"/>
<result property="complaintDate" column="complaint_date"/>
<result property="complaintContent" column="complaint_content"/>
<result property="customerDemand" column="customer_demand"/>
<result property="file" column="file"/>
<result property="auditStatus" column="audit_status"/>
<result property="auditOpinion" column="audit_opinion"/>
<result property="auditUserId" column="audit_user_id"/>
<result property="auditTime" column="audit_time"/>
<result property="flowStatus" column="flow_status"/>
<result property="principalUserId" column="principal_user_id"/>
<result property="planContent" column="plan_content"/>
<result property="remark" column="remark"/>
<result property="delFlag" column="del_flag"/>
<result property="createBy" column="create_by"/>
<result property="createTime" column="create_time"/>
<result property="updateBy" column="update_by"/>
<result property="updateTime" column="update_time"/>
</resultMap>
</mapper>

View File

@@ -0,0 +1,26 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.klp.flow.mapper.TsComplaintTaskMapper">
<resultMap type="com.klp.flow.domain.TsComplaintTask" id="TsComplaintTaskResult">
<result property="taskId" column="task_id"/>
<result property="acceptId" column="accept_id"/>
<result property="deptId" column="dept_id"/>
<result property="taskStatus" column="task_status"/>
<result property="fillNo" column="fill_no"/>
<result property="deptOpinion" column="dept_opinion"/>
<result property="fillUserId" column="fill_user_id"/>
<result property="fillTime" column="fill_time"/>
<result property="fillFile" column="fill_file"/>
<result property="remark" column="remark"/>
<result property="delFlag" column="del_flag"/>
<result property="createBy" column="create_by"/>
<result property="createTime" column="create_time"/>
<result property="updateBy" column="update_by"/>
<result property="updateTime" column="update_time"/>
</resultMap>
</mapper>

View File

@@ -0,0 +1,26 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.klp.flow.mapper.TsPlanExecuteRelMapper">
<resultMap type="com.klp.flow.domain.TsPlanExecuteRel" id="TsPlanExecuteRelResult">
<result property="relId" column="rel_id"/>
<result property="acceptId" column="accept_id"/>
<result property="deptId" column="dept_id"/>
<result property="executeStatus" column="execute_status"/>
<result property="executeResult" column="execute_result"/>
<result property="feedbackNo" column="feedback_no"/>
<result property="feedbackUserId" column="feedback_user_id"/>
<result property="feedbackTime" column="feedback_time"/>
<result property="feedbackFile" column="feedback_file"/>
<result property="remark" column="remark"/>
<result property="delFlag" column="del_flag"/>
<result property="createBy" column="create_by"/>
<result property="createTime" column="create_time"/>
<result property="updateBy" column="update_by"/>
<result property="updateTime" column="update_time"/>
</resultMap>
</mapper>