mirror of
https://github.com/dromara/RuoYi-Vue-Plus.git
synced 2025-09-29 22:56:40 +08:00
add 添加流程实例作废,运行中流程实例删除,已完成流程实例删除
This commit is contained in:
parent
4c5a350562
commit
7b034a232b
@ -4,9 +4,12 @@ import jakarta.servlet.http.HttpServletResponse;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.dromara.common.core.domain.R;
|
||||
import org.dromara.common.log.annotation.Log;
|
||||
import org.dromara.common.log.enums.BusinessType;
|
||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||
import org.dromara.common.web.core.BaseController;
|
||||
import org.dromara.workflow.domain.bo.ProcessInstanceBo;
|
||||
import org.dromara.workflow.domain.bo.ProcessInvalidBo;
|
||||
import org.dromara.workflow.domain.vo.ProcessInstanceVo;
|
||||
import org.dromara.workflow.service.IActProcessInstanceService;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
@ -67,4 +70,37 @@ public class ActProcessInstanceController extends BaseController {
|
||||
public R<Map<String, Object>> getHistoryRecord(@NotBlank(message = "流程实例id不能为空") @PathVariable String processInstanceId) {
|
||||
return R.ok(iActProcessInstanceService.getHistoryRecord(processInstanceId));
|
||||
}
|
||||
|
||||
/**
|
||||
* 作废流程实例,不会删除历史记录(删除运行中的实例)
|
||||
*
|
||||
* @param processInvalidBo 参数
|
||||
*/
|
||||
@Log(title = "流程实例管理", businessType = BusinessType.DELETE)
|
||||
@PostMapping("/deleteRuntimeProcessInst")
|
||||
public R<Void> deleteRuntimeProcessInst(@RequestBody ProcessInvalidBo processInvalidBo) {
|
||||
return toAjax(iActProcessInstanceService.deleteRuntimeProcessInst(processInvalidBo));
|
||||
}
|
||||
|
||||
/**
|
||||
* 运行中的实例 删除程实例,删除历史记录,删除业务与流程关联信息
|
||||
*
|
||||
* @param processInstanceId 流程实例id
|
||||
*/
|
||||
@Log(title = "流程实例管理", businessType = BusinessType.DELETE)
|
||||
@DeleteMapping("/deleteRuntimeProcessAndHisInst/{processInstanceId}")
|
||||
public R<Void> deleteRuntimeProcessAndHisInst(@NotBlank(message = "流程实例id不能为空") @PathVariable String processInstanceId) {
|
||||
return toAjax(iActProcessInstanceService.deleteRuntimeProcessAndHisInst(processInstanceId));
|
||||
}
|
||||
|
||||
/**
|
||||
* 已完成的实例 删除程实例,删除历史记录,删除业务与流程关联信息
|
||||
*
|
||||
* @param processInstanceId 流程实例id
|
||||
*/
|
||||
@Log(title = "流程实例管理", businessType = BusinessType.DELETE)
|
||||
@DeleteMapping("/deleteFinishProcessAndHisInst/{processInstanceId}")
|
||||
public R<Void> deleteFinishProcessAndHisInst(@NotBlank(message = "流程实例id不能为空") @PathVariable String processInstanceId) {
|
||||
return toAjax(iActProcessInstanceService.deleteFinishProcessAndHisInst(processInstanceId));
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,28 @@
|
||||
package org.dromara.workflow.domain.bo;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* 流程实例作废请求对象
|
||||
*
|
||||
* @author may
|
||||
*/
|
||||
@Data
|
||||
public class ProcessInvalidBo implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* 流程实例id
|
||||
*/
|
||||
private String processInstId;
|
||||
|
||||
/**
|
||||
* 作废原因
|
||||
*/
|
||||
private String deleteReason;
|
||||
}
|
@ -3,6 +3,7 @@ package org.dromara.workflow.service;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||
import org.dromara.workflow.domain.bo.ProcessInstanceBo;
|
||||
import org.dromara.workflow.domain.bo.ProcessInvalidBo;
|
||||
import org.dromara.workflow.domain.vo.ActHistoryInfoVo;
|
||||
import org.dromara.workflow.domain.vo.ProcessInstanceVo;
|
||||
|
||||
@ -46,4 +47,28 @@ public interface IActProcessInstanceService {
|
||||
* @return 结果
|
||||
*/
|
||||
Map<String, Object> getHistoryRecord(String processInstanceId);
|
||||
|
||||
/**
|
||||
* 作废流程实例,不会删除历史记录(删除运行中的实例)
|
||||
*
|
||||
* @param processInvalidBo 参数
|
||||
* @return 结果
|
||||
*/
|
||||
boolean deleteRuntimeProcessInst(ProcessInvalidBo processInvalidBo);
|
||||
|
||||
/**
|
||||
* 运行中的实例 删除程实例,删除历史记录,删除业务与流程关联信息
|
||||
*
|
||||
* @param processInstanceId 流程实例id
|
||||
* @return 结果
|
||||
*/
|
||||
boolean deleteRuntimeProcessAndHisInst(String processInstanceId);
|
||||
|
||||
/**
|
||||
* 已完成的实例 删除程实例,删除历史记录,删除业务与流程关联信息
|
||||
*
|
||||
* @param processInstanceId 流程实例id
|
||||
* @return 结果
|
||||
*/
|
||||
boolean deleteFinishProcessAndHisInst(String processInstanceId);
|
||||
}
|
||||
|
@ -7,14 +7,17 @@ import jakarta.servlet.ServletOutputStream;
|
||||
import jakarta.servlet.http.HttpServletResponse;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.apache.commons.io.IOUtils;
|
||||
import org.dromara.common.core.exception.ServiceException;
|
||||
import org.dromara.common.core.utils.StreamUtils;
|
||||
import org.dromara.common.core.utils.StringUtils;
|
||||
import org.dromara.common.mybatis.core.page.TableDataInfo;
|
||||
import org.dromara.common.satoken.utils.LoginHelper;
|
||||
import org.dromara.common.tenant.helper.TenantHelper;
|
||||
import org.dromara.system.domain.vo.SysUserVo;
|
||||
import org.dromara.system.service.ISysUserService;
|
||||
import org.dromara.workflow.common.constant.FlowConstant;
|
||||
import org.dromara.workflow.domain.bo.ProcessInstanceBo;
|
||||
import org.dromara.workflow.domain.bo.ProcessInvalidBo;
|
||||
import org.dromara.workflow.domain.vo.ActHistoryInfoVo;
|
||||
import org.dromara.workflow.domain.vo.GraphicInfoVo;
|
||||
import org.dromara.workflow.domain.vo.ProcessInstanceVo;
|
||||
@ -31,6 +34,7 @@ import org.flowable.engine.history.HistoricProcessInstanceQuery;
|
||||
import org.flowable.engine.runtime.ProcessInstance;
|
||||
import org.flowable.engine.runtime.ProcessInstanceQuery;
|
||||
import org.flowable.engine.task.Comment;
|
||||
import org.flowable.task.api.Task;
|
||||
import org.flowable.task.api.history.HistoricTaskInstance;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
@ -314,4 +318,78 @@ public class ActProcessInstanceServiceImpl implements IActProcessInstanceService
|
||||
return 0 + "秒";
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 作废流程实例,不会删除历史记录(删除运行中的实例)
|
||||
*
|
||||
* @param processInvalidBo 参数
|
||||
*/
|
||||
@Override
|
||||
public boolean deleteRuntimeProcessInst(ProcessInvalidBo processInvalidBo) {
|
||||
ProcessInstance processInstance = runtimeService.createProcessInstanceQuery()
|
||||
.processInstanceId(processInvalidBo.getProcessInstId()).processInstanceTenantId(TenantHelper.getTenantId()).singleResult();
|
||||
try {
|
||||
List<Task> list = taskService.createTaskQuery().processInstanceId(processInvalidBo.getProcessInstId())
|
||||
.taskTenantId(TenantHelper.getTenantId()).list();
|
||||
List<Task> subTasks = list.stream().filter(e -> StringUtils.isNotBlank(e.getParentTaskId())).collect(Collectors.toList());
|
||||
if (CollUtil.isNotEmpty(subTasks)) {
|
||||
subTasks.forEach(e -> taskService.deleteTask(e.getId()));
|
||||
}
|
||||
String deleteReason = LoginHelper.getUsername() + "作废了当前申请!";
|
||||
if (StringUtils.isNotBlank(processInvalidBo.getDeleteReason())) {
|
||||
deleteReason = LoginHelper.getUsername() + "作废理由:" + processInvalidBo.getDeleteReason();
|
||||
}
|
||||
runtimeService.deleteProcessInstance(processInvalidBo.getProcessInstId(), deleteReason);
|
||||
return true;
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
throw new ServiceException(e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 运行中的实例 删除程实例,删除历史记录,删除业务与流程关联信息
|
||||
*
|
||||
* @param processInstanceId 流程实例id
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public boolean deleteRuntimeProcessAndHisInst(String processInstanceId) {
|
||||
try {
|
||||
//1.删除运行中流程实例
|
||||
List<Task> list = taskService.createTaskQuery().processInstanceId(processInstanceId)
|
||||
.taskTenantId(TenantHelper.getTenantId()).list();
|
||||
List<Task> subTasks = list.stream().filter(e -> StringUtils.isNotBlank(e.getParentTaskId())).collect(Collectors.toList());
|
||||
if (CollUtil.isNotEmpty(subTasks)) {
|
||||
subTasks.forEach(e -> taskService.deleteTask(e.getId()));
|
||||
}
|
||||
runtimeService.deleteProcessInstance(processInstanceId, LoginHelper.getUserId() + "删除了当前流程申请");
|
||||
//2.删除历史记录
|
||||
HistoricProcessInstance historicProcessInstance = historyService.createHistoricProcessInstanceQuery()
|
||||
.processInstanceTenantId(TenantHelper.getTenantId()).processInstanceId(processInstanceId).singleResult();
|
||||
if (ObjectUtil.isNotEmpty(historicProcessInstance)) {
|
||||
historyService.deleteHistoricProcessInstance(processInstanceId);
|
||||
}
|
||||
return true;
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
throw new ServiceException(e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 已完成的实例 删除程实例,删除历史记录,删除业务与流程关联信息
|
||||
*
|
||||
* @param processInstanceId 流程实例id
|
||||
*/
|
||||
@Override
|
||||
public boolean deleteFinishProcessAndHisInst(String processInstanceId) {
|
||||
try {
|
||||
historyService.deleteHistoricProcessInstance(processInstanceId);
|
||||
return true;
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
throw new ServiceException(e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user