!25 feat(xispeak): 删除流程时同步逻辑删除关联的审批意见表记录
Merge pull request !25 from new_new_new/feature/20260525
This commit is contained in:
+2
@@ -176,6 +176,8 @@ public class BgXiSpeak implements Serializable {
|
|||||||
/**dw领导userId字段*/
|
/**dw领导userId字段*/
|
||||||
@Excel(name = "截止日期", width = 15)
|
@Excel(name = "截止日期", width = 15)
|
||||||
@Schema(description = "截止日期")
|
@Schema(description = "截止日期")
|
||||||
|
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") // 核心:告诉Jackson怎么把String转成Date
|
||||||
|
@DateTimeFormat(pattern="yyyy-MM-dd")
|
||||||
private java.util.Date deadline;
|
private java.util.Date deadline;
|
||||||
|
|
||||||
@TableField(typeHandler = JacksonTypeHandler.class)
|
@TableField(typeHandler = JacksonTypeHandler.class)
|
||||||
|
|||||||
+9
-3
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
+19
@@ -222,6 +222,25 @@ public class TaskTaskController extends JeecgController<TaskTask, ITaskTaskServi
|
|||||||
return success ? Result.OK("更新成功") : Result.error("更新失败,未找到对应任务记录");
|
return success ? Result.OK("更新成功") : Result.error("更新失败,未找到对应任务记录");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 删除单个流程实例
|
||||||
|
*
|
||||||
|
* @param processInstId 流程实例ID
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
@AutoLog(value = "删除单个流程实例")
|
||||||
|
@Operation(summary = "删除单个流程实例")
|
||||||
|
@PostMapping(value = "/deleteSingleProcess")
|
||||||
|
public Result<String> deleteSingleProcess(@RequestParam("processInstId") String processInstId) {
|
||||||
|
if (oConvertUtils.isEmpty(processInstId)) {
|
||||||
|
return Result.error("流程实例ID不能为空");
|
||||||
|
}
|
||||||
|
if (taskTaskService.deleteSingleProcess(processInstId)) {
|
||||||
|
return Result.OK("删除流程成功");
|
||||||
|
}
|
||||||
|
return Result.error("删除流程失败");
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 导出excel
|
* 导出excel
|
||||||
*
|
*
|
||||||
|
|||||||
+3
-3
@@ -179,9 +179,9 @@ public class TaskTask implements Serializable {
|
|||||||
@Schema(description = "督办开始时间")
|
@Schema(description = "督办开始时间")
|
||||||
private java.util.Date startTime;
|
private java.util.Date startTime;
|
||||||
/**截止时间(精确到时分,与 require_finish_date 互补)*/
|
/**截止时间(精确到时分,与 require_finish_date 互补)*/
|
||||||
@Excel(name = "截止时间(精确到时分,与 require_finish_date 互补)", width = 20, format = "yyyy-MM-dd HH:mm:ss")
|
@Excel(name = "截止时间(精确到时分,与 require_finish_date 互补)", width = 20, format = "yyyy-MM-dd")
|
||||||
@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
|
@JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd") // 如果只想要年月日,把这里的格式改掉
|
||||||
@DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
|
@DateTimeFormat(pattern="yyyy-MM-dd")
|
||||||
@Schema(description = "截止时间(精确到时分,与 require_finish_date 互补)")
|
@Schema(description = "截止时间(精确到时分,与 require_finish_date 互补)")
|
||||||
private java.util.Date deadline;
|
private java.util.Date deadline;
|
||||||
/**实际完成时间*/
|
/**实际完成时间*/
|
||||||
|
|||||||
+1
@@ -18,4 +18,5 @@ public interface ITaskTaskService extends IService<TaskTask> {
|
|||||||
Result<?> handleFlowStart(TaskTask taskTask, String username, Integer intervalType, Integer startCount)throws Exception;
|
Result<?> handleFlowStart(TaskTask taskTask, String username, Integer intervalType, Integer startCount)throws Exception;
|
||||||
List<TaskTask> getTaskTaskListByBusinessId(String businessId) throws Exception;
|
List<TaskTask> getTaskTaskListByBusinessId(String businessId) throws Exception;
|
||||||
boolean updateDeptHandlerName(String processInstanceId, String deptHandlerName);
|
boolean updateDeptHandlerName(String processInstanceId, String deptHandlerName);
|
||||||
|
boolean deleteSingleProcess(String processInstId);
|
||||||
}
|
}
|
||||||
|
|||||||
+30
@@ -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())
|
||||||
@@ -174,4 +178,30 @@ public class TaskTaskServiceImpl extends ServiceImpl<TaskTaskMapper, TaskTask> i
|
|||||||
taskTask.setDeptHandlerName(deptHandlerName);
|
taskTask.setDeptHandlerName(deptHandlerName);
|
||||||
return this.updateById(taskTask);
|
return this.updateById(taskTask);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
|
public boolean deleteSingleProcess(String processInstId) {
|
||||||
|
LambdaQueryWrapper<TaskTask> queryWrapper = new LambdaQueryWrapper<TaskTask>()
|
||||||
|
.eq(TaskTask::getProcessInstId, processInstId)
|
||||||
|
.last("for update");
|
||||||
|
TaskTask taskTask = this.getOne(queryWrapper, false);
|
||||||
|
if (taskTask == null) {
|
||||||
|
log.warn("删除单个流程时未找到关联的tasktask记录, processInstId: {}", processInstId);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
long count = runtimeService.createProcessInstanceQuery()
|
||||||
|
.processInstanceId(processInstId)
|
||||||
|
.count();
|
||||||
|
if (count > 0) {
|
||||||
|
runtimeService.deleteProcessInstance(processInstId, "删除单个流程");
|
||||||
|
log.info("成功中止运行中的流程实例: {}", processInstId);
|
||||||
|
}
|
||||||
|
taskApprovalOpinionService.remove(
|
||||||
|
new LambdaQueryWrapper<TaskApprovalOpinion>()
|
||||||
|
.eq(TaskApprovalOpinion::getProcessInstId, processInstId));
|
||||||
|
LambdaQueryWrapper<TaskTask> deleteWrapper = new LambdaQueryWrapper<TaskTask>()
|
||||||
|
.eq(TaskTask::getProcessInstId, processInstId);
|
||||||
|
return this.remove(deleteWrapper);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user