feat(xispeak): 删除流程时同步逻辑删除关联的审批意见表记录

在 withDrawXiSpeak 批量删除和 deleteSingleProcess 单个删除中,
按 processInstId 调用 ITaskApprovalOpinionService.remove 逻辑删除
task_approval_opinion 表中的关联记录。

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
wsm
2026-05-26 10:21:36 +08:00
co-authored by Claude Opus 4.7
parent 119c148c25
commit 4c7575322b
2 changed files with 16 additions and 3 deletions
@@ -10,6 +10,8 @@ import org.jeecg.common.system.vo.SelectTreeModel;
import org.jeecg.modules.bg.xispeak.entity.BgXiSpeak; import org.jeecg.modules.bg.xispeak.entity.BgXiSpeak;
import org.jeecg.modules.bg.xispeak.mapper.BgXiSpeakMapper; import org.jeecg.modules.bg.xispeak.mapper.BgXiSpeakMapper;
import org.jeecg.modules.bg.xispeak.service.IBgXiSpeakService; import org.jeecg.modules.bg.xispeak.service.IBgXiSpeakService;
import org.jeecg.modules.taskapprovalopinion.entity.TaskApprovalOpinion;
import org.jeecg.modules.taskapprovalopinion.service.ITaskApprovalOpinionService;
import org.jeecg.modules.tasktask.entity.TaskTask; import org.jeecg.modules.tasktask.entity.TaskTask;
import org.jeecg.modules.tasktask.service.impl.TaskTaskServiceImpl; import org.jeecg.modules.tasktask.service.impl.TaskTaskServiceImpl;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@@ -36,6 +38,7 @@ public class BgXiSpeakServiceImpl extends ServiceImpl<BgXiSpeakMapper, BgXiSpeak
private final TaskTaskServiceImpl taskTaskServiceImpl; private final TaskTaskServiceImpl taskTaskServiceImpl;
private final RuntimeService runtimeService; private final RuntimeService runtimeService;
private final ITaskApprovalOpinionService taskApprovalOpinionService;
@Override @Override
public void addBgXiSpeak(BgXiSpeak bgXiSpeak) { public void addBgXiSpeak(BgXiSpeak bgXiSpeak) {
@@ -268,13 +271,16 @@ public class BgXiSpeakServiceImpl extends ServiceImpl<BgXiSpeakMapper, BgXiSpeak
runtimeService.deleteProcessInstance(procId, delReason); runtimeService.deleteProcessInstance(procId, delReason);
log.info("成功中止运行中的流程实例: {}", procId); log.info("成功中止运行中的流程实例: {}", procId);
} }
taskApprovalOpinionService.remove(
new LambdaQueryWrapper<TaskApprovalOpinion>()
.eq(TaskApprovalOpinion::getProcessInstId, procId));
} }
// 4. 【核心修改:删除用】重新创建一个干净的 Wrapper,绝不能带 for update // 4. 重新创建一个干净的 Wrapper,绝不能带 for update
LambdaQueryWrapper<TaskTask> deleteWrapper = new LambdaQueryWrapper<TaskTask>() LambdaQueryWrapper<TaskTask> deleteWrapper = new LambdaQueryWrapper<TaskTask>()
.eq(TaskTask::getBusinessId, id); // 不要加 .last("for update") .eq(TaskTask::getBusinessId, id);
taskTaskServiceImpl.remove(deleteWrapper); // 使用干净的 Wrapper 执行删除 taskTaskServiceImpl.remove(deleteWrapper);
return true; return true;
} }
@@ -9,6 +9,8 @@ import org.flowable.engine.RuntimeService;
import org.flowable.engine.runtime.ProcessInstance; import org.flowable.engine.runtime.ProcessInstance;
import org.jeecg.common.api.vo.Result; import org.jeecg.common.api.vo.Result;
import org.jeecg.modules.extbpm.process.exception.BpmException; import org.jeecg.modules.extbpm.process.exception.BpmException;
import org.jeecg.modules.taskapprovalopinion.entity.TaskApprovalOpinion;
import org.jeecg.modules.taskapprovalopinion.service.ITaskApprovalOpinionService;
import org.jeecg.modules.extbpm.process.service.impl.BpmBaseExtApiImpl; import org.jeecg.modules.extbpm.process.service.impl.BpmBaseExtApiImpl;
import org.jeecg.modules.tasktask.constant.FlowConstants; import org.jeecg.modules.tasktask.constant.FlowConstants;
import org.jeecg.modules.tasktask.entity.TaskTask; import org.jeecg.modules.tasktask.entity.TaskTask;
@@ -38,6 +40,8 @@ public class TaskTaskServiceImpl extends ServiceImpl<TaskTaskMapper, TaskTask> i
private BpmBaseExtApiImpl bpmBaseExtApiImpl; private BpmBaseExtApiImpl bpmBaseExtApiImpl;
@Autowired @Autowired
private RuntimeService runtimeService; private RuntimeService runtimeService;
@Autowired
private ITaskApprovalOpinionService taskApprovalOpinionService;
@Transactional(rollbackFor = Exception.class) @Transactional(rollbackFor = Exception.class)
public boolean singleFlowStart(TaskTask taskTask, String userName) throws Exception { public boolean singleFlowStart(TaskTask taskTask, String userName) throws Exception {
String jsonString = Optional.ofNullable(taskTask.getJsonData()) String jsonString = Optional.ofNullable(taskTask.getJsonData())
@@ -193,6 +197,9 @@ public class TaskTaskServiceImpl extends ServiceImpl<TaskTaskMapper, TaskTask> i
runtimeService.deleteProcessInstance(processInstId, "删除单个流程"); runtimeService.deleteProcessInstance(processInstId, "删除单个流程");
log.info("成功中止运行中的流程实例: {}", processInstId); log.info("成功中止运行中的流程实例: {}", processInstId);
} }
taskApprovalOpinionService.remove(
new LambdaQueryWrapper<TaskApprovalOpinion>()
.eq(TaskApprovalOpinion::getProcessInstId, processInstId));
LambdaQueryWrapper<TaskTask> deleteWrapper = new LambdaQueryWrapper<TaskTask>() LambdaQueryWrapper<TaskTask> deleteWrapper = new LambdaQueryWrapper<TaskTask>()
.eq(TaskTask::getProcessInstId, processInstId); .eq(TaskTask::getProcessInstId, processInstId);
return this.remove(deleteWrapper); return this.remove(deleteWrapper);