1.手动通过数据库删除所有涉及流程的数据
# 需按以下顺序执行,否则存在外键阻止删除
DELETE FROM ACT_RU_TASK;
DELETE FROM ACT_RU_VARIABLE;
DELETE FROM ACT_RU_IDENTITYLINK;
DELETE FROM ACT_RU_JOB;
DELETE FROM ACT_RU_TIMER_JOB;
DELETE FROM ACT_RU_DEADLETTER_JOB;
DELETE FROM ACT_RU_EXECUTION;
DELETE FROM ACT_RU_SUSPENDED_JOB;
DELETE FROM ACT_RU_EVENT_SUBSCR;
DELETE FROM ACT_HI_PROCINST;
DELETE FROM ACT_HI_ACTINST;
DELETE FROM ACT_HI_TASKINST;
DELETE FROM ACT_HI_VARINST;
DELETE FROM ACT_HI_DETAIL;
DELETE FROM ACT_HI_IDENTITYLINK;
DELETE FROM ACT_HI_ATTACHMENT;
DELETE FROM ACT_HI_COMMENT;
2.通过代码删除指定流程数据
注意:如果配置文件 flowable.history-level: audit 的话,表数据是不会删的(逻辑删除),只有设置为 full 的时候,调用以下方法才会清除 ACT_XXX 流程关联表数据(物理删除)。
flowable:
history-level: full # full:保存历史数据的最高级别,可保存全部流程相关细节,包括流程流转各节点参数,audit
public void deleteProcess(String processInstanceId) {
// 1. 先查是否运行中
ProcessInstance pi = runtimeService.createProcessInstanceQuery()
.processInstanceId(processInstanceId)
.singleResult();
if (pi != null) {
// 运行中 → 直接删(包含历史)
runtimeService.deleteProcessInstance(processInstanceId, "删除流程");
} else {
// 已结束 → 删历史
historyService.deleteHistoricProcessInstance(processInstanceId);
}
}
3.指定流程审批人及审批时间
注意:指定审批时间不能并发,应为配置是影响全局的,如果并发下,拿到的全局配置系统时间会存在错乱的问题。
# 指定审批人
@Resource
private TaskService taskService;
taskService.setAssignee(user.getId().toString());
# 接下来直接用这个 user 走审批即可
# 指定审批时间
@Resource
private ProcessEngineConfiguration processEngineConfiguration;
Date rejectDate = new Date();
processEngineConfiguration.getClock().setCurrentTime(rejectDate);