add 添加按照业务id删除流程记录

This commit is contained in:
gssong 2023-07-23 11:36:17 +08:00
parent b3f40fddb2
commit 670b04faf0
7 changed files with 72 additions and 22 deletions

View File

@ -101,6 +101,6 @@ public class TestLeaveController extends BaseController {
@DeleteMapping("/{ids}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] ids) {
return toAjax(testLeaveService.deleteWithValidByIds(List.of(ids), true));
return toAjax(testLeaveService.deleteWithValidByIds(List.of(ids)));
}
}

View File

@ -41,7 +41,6 @@ public class TestLeaveBo extends BaseEntity {
/**
* 备注
*/
@NotBlank(message = "备注不能为空", groups = { AddGroup.class, EditGroup.class })
private String remark;

View File

@ -45,5 +45,5 @@ public interface ITestLeaveService {
/**
* 校验并批量删除请假信息
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
Boolean deleteWithValidByIds(Collection<Long> ids);
}

View File

@ -10,6 +10,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import org.dromara.workflow.service.IActProcessInstanceService;
import org.dromara.workflow.utils.WorkflowUtils;
import org.springframework.stereotype.Service;
import org.dromara.demo.domain.bo.TestLeaveBo;
@ -33,6 +34,7 @@ import java.util.Collection;
public class TestLeaveServiceImpl implements ITestLeaveService {
private final TestLeaveMapper baseMapper;
private final IActProcessInstanceService iActProcessInstanceService;
/**
* 查询请假
@ -51,9 +53,9 @@ public class TestLeaveServiceImpl implements ITestLeaveService {
Page<TestLeaveVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
TableDataInfo<TestLeaveVo> build = TableDataInfo.build(result);
List<TestLeaveVo> rows = build.getRows();
if(CollUtil.isNotEmpty(rows)){
if (CollUtil.isNotEmpty(rows)) {
List<String> ids = StreamUtils.toList(rows, e -> String.valueOf(e.getId()));
WorkflowUtils.setProcessInstanceListVo(rows,ids,"id");
WorkflowUtils.setProcessInstanceListVo(rows, ids, "id");
}
return build;
}
@ -110,10 +112,9 @@ public class TestLeaveServiceImpl implements ITestLeaveService {
* 批量删除请假
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if (isValid) {
//TODO 做一些业务上的校验,判断是否需要校验
}
public Boolean deleteWithValidByIds(Collection<Long> ids) {
List<String> idList = StreamUtils.toList(ids, String::valueOf);
iActProcessInstanceService.deleteRuntimeProcessAndHisInstByBusinessKeys(idList);
return baseMapper.deleteBatchIds(ids) > 0;
}
}

View File

@ -17,6 +17,7 @@ import org.dromara.workflow.service.IActProcessInstanceService;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.Arrays;
import java.util.Map;
/**
@ -92,7 +93,7 @@ public class ActProcessInstanceController extends BaseController {
@Log(title = "流程实例管理", businessType = BusinessType.DELETE)
@DeleteMapping("/deleteRuntimeProcessAndHisInst/{processInstanceIds}")
public R<Void> deleteRuntimeProcessAndHisInst(@NotNull(message = "流程实例id不能为空") @PathVariable String[] processInstanceIds) {
return toAjax(iActProcessInstanceService.deleteRuntimeProcessAndHisInst(processInstanceIds));
return toAjax(iActProcessInstanceService.deleteRuntimeProcessAndHisInst(Arrays.asList(processInstanceIds)));
}
/**
@ -103,7 +104,7 @@ public class ActProcessInstanceController extends BaseController {
@Log(title = "流程实例管理", businessType = BusinessType.DELETE)
@DeleteMapping("/deleteFinishProcessAndHisInst/{processInstanceIds}")
public R<Void> deleteFinishProcessAndHisInst(@NotNull(message = "流程实例id不能为空") @PathVariable String[] processInstanceIds) {
return toAjax(iActProcessInstanceService.deleteFinishProcessAndHisInst(processInstanceIds));
return toAjax(iActProcessInstanceService.deleteFinishProcessAndHisInst(Arrays.asList(processInstanceIds)));
}
/**

View File

@ -6,6 +6,7 @@ import org.dromara.workflow.domain.bo.ProcessInstanceBo;
import org.dromara.workflow.domain.bo.ProcessInvalidBo;
import org.dromara.workflow.domain.vo.ProcessInstanceVo;
import java.util.List;
import java.util.Map;
/**
@ -60,7 +61,15 @@ public interface IActProcessInstanceService {
* @param processInstanceIds 流程实例id
* @return 结果
*/
boolean deleteRuntimeProcessAndHisInst(String[] processInstanceIds);
boolean deleteRuntimeProcessAndHisInst(List<String> processInstanceIds);
/**
* 按照业务id删除 运行中的实例 删除程实例删除历史记录删除业务与流程关联信息
*
* @param businessKeys 业务id
* @return 结果
*/
boolean deleteRuntimeProcessAndHisInstByBusinessKeys(List<String> businessKeys);
/**
* 已完成的实例 删除程实例删除历史记录删除业务与流程关联信息
@ -68,7 +77,7 @@ public interface IActProcessInstanceService {
* @param processInstanceIds 流程实例id
* @return 结果
*/
boolean deleteFinishProcessAndHisInst(String[] processInstanceIds);
boolean deleteFinishProcessAndHisInst(List<String> processInstanceIds);
/**
* 撤销流程申请

View File

@ -6,6 +6,7 @@ import cn.hutool.core.util.ObjectUtil;
import jakarta.servlet.ServletOutputStream;
import jakarta.servlet.http.HttpServletResponse;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.IOUtils;
import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.core.utils.StreamUtils;
@ -16,6 +17,7 @@ import org.dromara.common.tenant.helper.TenantHelper;
import org.dromara.workflow.common.constant.FlowConstant;
import org.dromara.workflow.common.enums.BusinessStatusEnum;
import org.dromara.workflow.common.enums.TaskStatusEnum;
import org.dromara.workflow.domain.ActHiProcinst;
import org.dromara.workflow.domain.bo.ProcessInstanceBo;
import org.dromara.workflow.domain.bo.ProcessInvalidBo;
import org.dromara.workflow.domain.vo.ActHistoryInfoVo;
@ -23,6 +25,7 @@ import org.dromara.workflow.domain.vo.GraphicInfoVo;
import org.dromara.workflow.domain.vo.ProcessInstanceVo;
import org.dromara.workflow.domain.vo.TaskVo;
import org.dromara.workflow.flowable.CustomDefaultProcessDiagramGenerator;
import org.dromara.workflow.service.IActHiProcinstService;
import org.dromara.workflow.service.IActProcessInstanceService;
import org.flowable.bpmn.model.*;
import org.flowable.engine.HistoryService;
@ -54,7 +57,7 @@ import java.util.stream.Collectors;
*
* @author may
*/
@Slf4j
@RequiredArgsConstructor
@Service
public class ActProcessInstanceServiceImpl implements IActProcessInstanceService {
@ -63,6 +66,7 @@ public class ActProcessInstanceServiceImpl implements IActProcessInstanceService
private final RuntimeService runtimeService;
private final HistoryService historyService;
private final TaskService taskService;
private final IActHiProcinstService iActHiProcinstService;
@Value("${flowable.activity-font-name}")
private String activityFontName;
@ -388,21 +392,57 @@ public class ActProcessInstanceServiceImpl implements IActProcessInstanceService
*/
@Override
@Transactional(rollbackFor = Exception.class)
public boolean deleteRuntimeProcessAndHisInst(String[] processInstanceIds) {
public boolean deleteRuntimeProcessAndHisInst(List<String> processInstanceIds) {
try {
//1.删除运行中流程实例
List<Task> list = taskService.createTaskQuery().processInstanceIdIn(Arrays.asList(processInstanceIds))
List<Task> list = taskService.createTaskQuery().processInstanceIdIn(processInstanceIds)
.taskTenantId(TenantHelper.getTenantId()).list();
List<Task> subTasks = StreamUtils.filter(list, e -> StringUtils.isNotBlank(e.getParentTaskId()));
if (CollUtil.isNotEmpty(subTasks)) {
subTasks.forEach(e -> taskService.deleteTask(e.getId()));
}
runtimeService.bulkDeleteProcessInstances(Arrays.asList(processInstanceIds), LoginHelper.getUserId() + "删除了当前流程申请");
runtimeService.bulkDeleteProcessInstances(processInstanceIds, LoginHelper.getUserId() + "删除了当前流程申请");
//2.删除历史记录
List<HistoricProcessInstance> historicProcessInstanceList = historyService.createHistoricProcessInstanceQuery()
.processInstanceTenantId(TenantHelper.getTenantId()).processInstanceIds(new HashSet<>(Arrays.asList(processInstanceIds))).list();
.processInstanceTenantId(TenantHelper.getTenantId()).processInstanceIds(new HashSet<>(processInstanceIds)).list();
if (ObjectUtil.isNotEmpty(historicProcessInstanceList)) {
historyService.bulkDeleteHistoricProcessInstances(Arrays.asList(processInstanceIds));
historyService.bulkDeleteHistoricProcessInstances(processInstanceIds);
}
return true;
} catch (Exception e) {
e.printStackTrace();
throw new ServiceException(e.getMessage());
}
}
/**
* 按照业务id删除 运行中的实例 删除程实例删除历史记录删除业务与流程关联信息
*
* @param businessKeys 业务id
*/
@Override
@Transactional(rollbackFor = Exception.class)
public boolean deleteRuntimeProcessAndHisInstByBusinessKeys(List<String> businessKeys) {
try {
//1.删除运行中流程实例
List<ActHiProcinst> actHiProcinsts = iActHiProcinstService.selectByBusinessKeyIn(businessKeys);
if (CollUtil.isEmpty(actHiProcinsts)) {
log.warn("当前业务为查询到流程实例!");
return false;
}
List<String> processInstanceIds = StreamUtils.toList(actHiProcinsts, ActHiProcinst::getId);
List<Task> list = taskService.createTaskQuery().processInstanceIdIn(processInstanceIds)
.taskTenantId(TenantHelper.getTenantId()).list();
List<Task> subTasks = StreamUtils.filter(list, e -> StringUtils.isNotBlank(e.getParentTaskId()));
if (CollUtil.isNotEmpty(subTasks)) {
subTasks.forEach(e -> taskService.deleteTask(e.getId()));
}
runtimeService.bulkDeleteProcessInstances(processInstanceIds, LoginHelper.getUserId() + "删除了当前流程申请");
//2.删除历史记录
List<HistoricProcessInstance> historicProcessInstanceList = historyService.createHistoricProcessInstanceQuery()
.processInstanceTenantId(TenantHelper.getTenantId()).processInstanceIds(new HashSet<>(processInstanceIds)).list();
if (ObjectUtil.isNotEmpty(historicProcessInstanceList)) {
historyService.bulkDeleteHistoricProcessInstances(processInstanceIds);
}
return true;
} catch (Exception e) {
@ -417,9 +457,9 @@ public class ActProcessInstanceServiceImpl implements IActProcessInstanceService
* @param processInstanceIds 流程实例id
*/
@Override
public boolean deleteFinishProcessAndHisInst(String[] processInstanceIds) {
public boolean deleteFinishProcessAndHisInst(List<String> processInstanceIds) {
try {
historyService.bulkDeleteHistoricProcessInstances(Arrays.asList(processInstanceIds));
historyService.bulkDeleteHistoricProcessInstances(processInstanceIds);
return true;
} catch (Exception e) {
e.printStackTrace();
@ -502,7 +542,7 @@ public class ActProcessInstanceServiceImpl implements IActProcessInstanceService
ProcessInstanceVo processInstanceVo = BeanUtil.toBean(processInstance, ProcessInstanceVo.class);
processInstanceVo.setBusinessStatusName(BusinessStatusEnum.getEumByStatus(processInstance.getBusinessStatus()));
if (CollUtil.isNotEmpty(taskVoList)) {
List<TaskVo> collect = taskVoList.stream().filter(e -> e.getProcessInstanceId().equals(processInstance.getId())).collect(Collectors.toList());
List<TaskVo> collect = StreamUtils.filter(taskVoList, e -> e.getProcessInstanceId().equals(processInstance.getId()));
processInstanceVo.setTaskVoList(CollUtil.isNotEmpty(collect) ? collect : Collections.emptyList());
}
list.add(processInstanceVo);