add 添加流程实例作废,运行中流程实例删除,已完成流程实例删除

This commit is contained in:
songgaoshuai 2023-06-15 18:17:58 +08:00
parent 4c5a350562
commit 7b034a232b
4 changed files with 167 additions and 0 deletions

View File

@ -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));
}
}

View File

@ -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;
}

View File

@ -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);
}

View File

@ -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());
}
}
}