feat(flow): 添加意见下发和反馈下发功能

- 在ITsComplaintAcceptService中新增opinionDispatch和feedbackDispatch方法
- 在TsComplaintAcceptController中添加对应的意见下发和反馈下发接口
- 实现opinionDispatch功能:修改flow_status=2并按字典创建代办任务
- 实现feedbackDispatch功能:修改flow_status=4并按字典创建执行反馈记录
- 调整同步流程状态逻辑,移除重复的状态更新代码
- 新增相关实体类和服务层依赖注入
This commit is contained in:
2026-06-21 14:57:38 +08:00
parent 691c8289dd
commit c33b27d174
5 changed files with 122 additions and 15 deletions

View File

@@ -96,4 +96,28 @@ public class TsComplaintAcceptController extends BaseController {
@PathVariable Long[] acceptIds) {
return toAjax(iTsComplaintAcceptService.deleteWithValidByIds(Arrays.asList(acceptIds), true));
}
/**
* 意见下发修改flow_status=2按字典部门创建代办任务
*
* @param acceptId 受理单ID
*/
@Log(title = "意见下发", businessType = BusinessType.UPDATE)
@PostMapping("/opinionDispatch/{acceptId}")
public R<Void> opinionDispatch(@NotNull(message = "主键不能为空")
@PathVariable Long acceptId) {
return toAjax(iTsComplaintAcceptService.opinionDispatch(acceptId));
}
/**
* 反馈下发修改flow_status=4按字典部门创建执行反馈记录
*
* @param acceptId 受理单ID
*/
@Log(title = "反馈下发", businessType = BusinessType.UPDATE)
@PostMapping("/feedbackDispatch/{acceptId}")
public R<Void> feedbackDispatch(@NotNull(message = "主键不能为空")
@PathVariable Long acceptId) {
return toAjax(iTsComplaintAcceptService.feedbackDispatch(acceptId));
}
}

View File

@@ -46,4 +46,14 @@ public interface ITsComplaintAcceptService {
* 校验并批量删除投诉受理单主信息
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
/**
* 意见下发修改flow_status=2按字典flow_coil_objection部门创建代办任务
*/
Boolean opinionDispatch(Long acceptId);
/**
* 反馈下发修改flow_status=4按字典flow_coil_objection部门创建执行反馈记录
*/
Boolean feedbackDispatch(Long acceptId);
}

View File

@@ -5,14 +5,21 @@ 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.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.klp.common.core.domain.entity.SysDictData;
import com.klp.common.utils.DictUtils;
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.domain.TsComplaintTask;
import com.klp.flow.domain.TsPlanExecuteRel;
import com.klp.flow.mapper.TsComplaintAcceptMapper;
import com.klp.flow.mapper.TsComplaintTaskMapper;
import com.klp.flow.mapper.TsPlanExecuteRelMapper;
import com.klp.flow.service.ITsComplaintAcceptService;
import java.util.List;
@@ -31,6 +38,10 @@ public class TsComplaintAcceptServiceImpl implements ITsComplaintAcceptService {
private final TsComplaintAcceptMapper baseMapper;
private final TsComplaintTaskMapper tsComplaintTaskMapper;
private final TsPlanExecuteRelMapper tsPlanExecuteRelMapper;
/**
* 查询投诉受理单主
*/
@@ -100,6 +111,66 @@ public class TsComplaintAcceptServiceImpl implements ITsComplaintAcceptService {
return baseMapper.updateById(update) > 0;
}
/**
* 意见下发
* 修改受理单flow_status=2按字典flow_coil_objection的部门创建代办任务
*/
@Override
public Boolean opinionDispatch(Long acceptId) {
if (acceptId == null) {
return false;
}
// 从字典获取需要下发的部门ID列表
List<SysDictData> dictList = DictUtils.getDictCache("flow_coil_objection");
if (dictList == null || dictList.isEmpty()) {
return false;
}
// 更新受理单流程状态为2部门意见填写中
LambdaUpdateWrapper<TsComplaintAccept> uw = Wrappers.lambdaUpdate();
uw.eq(TsComplaintAccept::getAcceptId, acceptId)
.set(TsComplaintAccept::getFlowStatus, 2L);
baseMapper.update(null, uw);
// 按部门创建代办任务
for (SysDictData dict : dictList) {
TsComplaintTask task = new TsComplaintTask();
task.setAcceptId(acceptId);
task.setDeptId(Long.valueOf(dict.getDictValue()));
task.setTaskStatus(0L);
tsComplaintTaskMapper.insert(task);
}
return true;
}
/**
* 反馈下发
* 修改受理单flow_status=4按字典flow_coil_objection的部门创建执行反馈记录
*/
@Override
public Boolean feedbackDispatch(Long acceptId) {
if (acceptId == null) {
return false;
}
// 从字典获取需要下发的部门ID列表
List<SysDictData> dictList = DictUtils.getDictCache("flow_coil_objection");
if (dictList == null || dictList.isEmpty()) {
return false;
}
// 更新受理单流程状态为4方案下发执行反馈中
LambdaUpdateWrapper<TsComplaintAccept> uw = Wrappers.lambdaUpdate();
uw.eq(TsComplaintAccept::getAcceptId, acceptId)
.set(TsComplaintAccept::getFlowStatus, 4L);
baseMapper.update(null, uw);
// 按部门创建执行反馈记录
for (SysDictData dict : dictList) {
TsPlanExecuteRel rel = new TsPlanExecuteRel();
rel.setAcceptId(acceptId);
rel.setDeptId(Long.valueOf(dict.getDictValue()));
rel.setExecuteStatus(0L);
tsPlanExecuteRelMapper.insert(rel);
}
return true;
}
/**
* 保存前的数据校验
*/

View File

@@ -111,7 +111,7 @@ public class TsComplaintTaskServiceImpl implements ITsComplaintTaskService {
* 同步受理单流程状态
* 查看当前受理单下所有代办任务:
* - 所有task_status都为1 → flow_status = 3待总负责人汇总方案
* - 存在任一task_status不为1 → flow_status = 2部门意见填写中
* flow_status=2由意见下发接口设置此处不再处理
*/
private void syncAcceptFlowStatus(Long acceptId) {
if (acceptId == null) {
@@ -125,12 +125,13 @@ public class TsComplaintTaskServiceImpl implements ITsComplaintTaskService {
// 判断所有任务是否都已完成taskStatus = 1
boolean allCompleted = !taskList.isEmpty() && taskList.stream()
.allMatch(task -> task.getTaskStatus() != null && task.getTaskStatus() == 1L);
Long targetFlowStatus = allCompleted ? 3L : 2L;
// 更新受理单流程状态
LambdaUpdateWrapper<TsComplaintAccept> uw = Wrappers.lambdaUpdate();
uw.eq(TsComplaintAccept::getAcceptId, acceptId)
.set(TsComplaintAccept::getFlowStatus, targetFlowStatus);
tsComplaintAcceptMapper.update(null, uw);
if (allCompleted) {
// 更新受理单流程状态为3待总负责人汇总方案
LambdaUpdateWrapper<TsComplaintAccept> uw = Wrappers.lambdaUpdate();
uw.eq(TsComplaintAccept::getAcceptId, acceptId)
.set(TsComplaintAccept::getFlowStatus, 3L);
tsComplaintAcceptMapper.update(null, uw);
}
}
/**

View File

@@ -110,8 +110,8 @@ public class TsPlanExecuteRelServiceImpl implements ITsPlanExecuteRelService {
/**
* 同步受理单流程状态
* 查看当前受理单下所有执行反馈:
* - 所有execute_status都为1 → flow_status = 5执行完成
* - 存在任一execute_status不为1 → flow_status = 4执行反馈中
* - 所有execute_status都为1 → flow_status = 5全部办结
* flow_status=4由反馈下发接口设置此处不再处理
*/
private void syncAcceptFlowStatus(Long acceptId) {
if (acceptId == null) {
@@ -125,12 +125,13 @@ public class TsPlanExecuteRelServiceImpl implements ITsPlanExecuteRelService {
// 判断所有执行反馈是否都已完成executeStatus = 1
boolean allCompleted = !relList.isEmpty() && relList.stream()
.allMatch(rel -> rel.getExecuteStatus() != null && rel.getExecuteStatus() == 1L);
Long targetFlowStatus = allCompleted ? 5L : 4L;
// 更新受理单流程状态
LambdaUpdateWrapper<TsComplaintAccept> uw = Wrappers.lambdaUpdate();
uw.eq(TsComplaintAccept::getAcceptId, acceptId)
.set(TsComplaintAccept::getFlowStatus, targetFlowStatus);
tsComplaintAcceptMapper.update(null, uw);
if (allCompleted) {
// 更新受理单流程状态为5全部办结
LambdaUpdateWrapper<TsComplaintAccept> uw = Wrappers.lambdaUpdate();
uw.eq(TsComplaintAccept::getAcceptId, acceptId)
.set(TsComplaintAccept::getFlowStatus, 5L);
tsComplaintAcceptMapper.update(null, uw);
}
}
/**