mirror of
https://github.com/dromara/RuoYi-Vue-Plus.git
synced 2025-09-29 22:56:40 +08:00
add 添加按照业务id删除流程记录
This commit is contained in:
parent
b3f40fddb2
commit
670b04faf0
@ -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)));
|
||||
}
|
||||
}
|
||||
|
@ -41,7 +41,6 @@ public class TestLeaveBo extends BaseEntity {
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
@NotBlank(message = "备注不能为空", groups = { AddGroup.class, EditGroup.class })
|
||||
private String remark;
|
||||
|
||||
|
||||
|
@ -45,5 +45,5 @@ public interface ITestLeaveService {
|
||||
/**
|
||||
* 校验并批量删除请假信息
|
||||
*/
|
||||
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
|
||||
Boolean deleteWithValidByIds(Collection<Long> ids);
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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)));
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -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);
|
||||
|
||||
/**
|
||||
* 撤销流程申请
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user