mirror of
https://github.com/dromara/RuoYi-Vue-Plus.git
synced 2025-09-30 15:16:41 +08:00
add 添加按照业务id删除流程记录
This commit is contained in:
parent
b3f40fddb2
commit
670b04faf0
@ -101,6 +101,6 @@ public class TestLeaveController extends BaseController {
|
|||||||
@DeleteMapping("/{ids}")
|
@DeleteMapping("/{ids}")
|
||||||
public R<Void> remove(@NotEmpty(message = "主键不能为空")
|
public R<Void> remove(@NotEmpty(message = "主键不能为空")
|
||||||
@PathVariable Long[] ids) {
|
@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;
|
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.conditions.query.LambdaQueryWrapper;
|
||||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import org.dromara.workflow.service.IActProcessInstanceService;
|
||||||
import org.dromara.workflow.utils.WorkflowUtils;
|
import org.dromara.workflow.utils.WorkflowUtils;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.dromara.demo.domain.bo.TestLeaveBo;
|
import org.dromara.demo.domain.bo.TestLeaveBo;
|
||||||
@ -33,6 +34,7 @@ import java.util.Collection;
|
|||||||
public class TestLeaveServiceImpl implements ITestLeaveService {
|
public class TestLeaveServiceImpl implements ITestLeaveService {
|
||||||
|
|
||||||
private final TestLeaveMapper baseMapper;
|
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);
|
Page<TestLeaveVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
|
||||||
TableDataInfo<TestLeaveVo> build = TableDataInfo.build(result);
|
TableDataInfo<TestLeaveVo> build = TableDataInfo.build(result);
|
||||||
List<TestLeaveVo> rows = build.getRows();
|
List<TestLeaveVo> rows = build.getRows();
|
||||||
if(CollUtil.isNotEmpty(rows)){
|
if (CollUtil.isNotEmpty(rows)) {
|
||||||
List<String> ids = StreamUtils.toList(rows, e -> String.valueOf(e.getId()));
|
List<String> ids = StreamUtils.toList(rows, e -> String.valueOf(e.getId()));
|
||||||
WorkflowUtils.setProcessInstanceListVo(rows,ids,"id");
|
WorkflowUtils.setProcessInstanceListVo(rows, ids, "id");
|
||||||
}
|
}
|
||||||
return build;
|
return build;
|
||||||
}
|
}
|
||||||
@ -110,10 +112,9 @@ public class TestLeaveServiceImpl implements ITestLeaveService {
|
|||||||
* 批量删除请假
|
* 批量删除请假
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
|
public Boolean deleteWithValidByIds(Collection<Long> ids) {
|
||||||
if (isValid) {
|
List<String> idList = StreamUtils.toList(ids, String::valueOf);
|
||||||
//TODO 做一些业务上的校验,判断是否需要校验
|
iActProcessInstanceService.deleteRuntimeProcessAndHisInstByBusinessKeys(idList);
|
||||||
}
|
|
||||||
return baseMapper.deleteBatchIds(ids) > 0;
|
return baseMapper.deleteBatchIds(ids) > 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -17,6 +17,7 @@ import org.dromara.workflow.service.IActProcessInstanceService;
|
|||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -92,7 +93,7 @@ public class ActProcessInstanceController extends BaseController {
|
|||||||
@Log(title = "流程实例管理", businessType = BusinessType.DELETE)
|
@Log(title = "流程实例管理", businessType = BusinessType.DELETE)
|
||||||
@DeleteMapping("/deleteRuntimeProcessAndHisInst/{processInstanceIds}")
|
@DeleteMapping("/deleteRuntimeProcessAndHisInst/{processInstanceIds}")
|
||||||
public R<Void> deleteRuntimeProcessAndHisInst(@NotNull(message = "流程实例id不能为空") @PathVariable String[] 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)
|
@Log(title = "流程实例管理", businessType = BusinessType.DELETE)
|
||||||
@DeleteMapping("/deleteFinishProcessAndHisInst/{processInstanceIds}")
|
@DeleteMapping("/deleteFinishProcessAndHisInst/{processInstanceIds}")
|
||||||
public R<Void> deleteFinishProcessAndHisInst(@NotNull(message = "流程实例id不能为空") @PathVariable String[] 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.bo.ProcessInvalidBo;
|
||||||
import org.dromara.workflow.domain.vo.ProcessInstanceVo;
|
import org.dromara.workflow.domain.vo.ProcessInstanceVo;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -60,7 +61,15 @@ public interface IActProcessInstanceService {
|
|||||||
* @param processInstanceIds 流程实例id
|
* @param processInstanceIds 流程实例id
|
||||||
* @return 结果
|
* @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
|
* @param processInstanceIds 流程实例id
|
||||||
* @return 结果
|
* @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.ServletOutputStream;
|
||||||
import jakarta.servlet.http.HttpServletResponse;
|
import jakarta.servlet.http.HttpServletResponse;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.commons.io.IOUtils;
|
import org.apache.commons.io.IOUtils;
|
||||||
import org.dromara.common.core.exception.ServiceException;
|
import org.dromara.common.core.exception.ServiceException;
|
||||||
import org.dromara.common.core.utils.StreamUtils;
|
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.constant.FlowConstant;
|
||||||
import org.dromara.workflow.common.enums.BusinessStatusEnum;
|
import org.dromara.workflow.common.enums.BusinessStatusEnum;
|
||||||
import org.dromara.workflow.common.enums.TaskStatusEnum;
|
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.ProcessInstanceBo;
|
||||||
import org.dromara.workflow.domain.bo.ProcessInvalidBo;
|
import org.dromara.workflow.domain.bo.ProcessInvalidBo;
|
||||||
import org.dromara.workflow.domain.vo.ActHistoryInfoVo;
|
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.ProcessInstanceVo;
|
||||||
import org.dromara.workflow.domain.vo.TaskVo;
|
import org.dromara.workflow.domain.vo.TaskVo;
|
||||||
import org.dromara.workflow.flowable.CustomDefaultProcessDiagramGenerator;
|
import org.dromara.workflow.flowable.CustomDefaultProcessDiagramGenerator;
|
||||||
|
import org.dromara.workflow.service.IActHiProcinstService;
|
||||||
import org.dromara.workflow.service.IActProcessInstanceService;
|
import org.dromara.workflow.service.IActProcessInstanceService;
|
||||||
import org.flowable.bpmn.model.*;
|
import org.flowable.bpmn.model.*;
|
||||||
import org.flowable.engine.HistoryService;
|
import org.flowable.engine.HistoryService;
|
||||||
@ -54,7 +57,7 @@ import java.util.stream.Collectors;
|
|||||||
*
|
*
|
||||||
* @author may
|
* @author may
|
||||||
*/
|
*/
|
||||||
|
@Slf4j
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
@Service
|
@Service
|
||||||
public class ActProcessInstanceServiceImpl implements IActProcessInstanceService {
|
public class ActProcessInstanceServiceImpl implements IActProcessInstanceService {
|
||||||
@ -63,6 +66,7 @@ public class ActProcessInstanceServiceImpl implements IActProcessInstanceService
|
|||||||
private final RuntimeService runtimeService;
|
private final RuntimeService runtimeService;
|
||||||
private final HistoryService historyService;
|
private final HistoryService historyService;
|
||||||
private final TaskService taskService;
|
private final TaskService taskService;
|
||||||
|
private final IActHiProcinstService iActHiProcinstService;
|
||||||
|
|
||||||
@Value("${flowable.activity-font-name}")
|
@Value("${flowable.activity-font-name}")
|
||||||
private String activityFontName;
|
private String activityFontName;
|
||||||
@ -388,21 +392,57 @@ public class ActProcessInstanceServiceImpl implements IActProcessInstanceService
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public boolean deleteRuntimeProcessAndHisInst(String[] processInstanceIds) {
|
public boolean deleteRuntimeProcessAndHisInst(List<String> processInstanceIds) {
|
||||||
try {
|
try {
|
||||||
//1.删除运行中流程实例
|
//1.删除运行中流程实例
|
||||||
List<Task> list = taskService.createTaskQuery().processInstanceIdIn(Arrays.asList(processInstanceIds))
|
List<Task> list = taskService.createTaskQuery().processInstanceIdIn(processInstanceIds)
|
||||||
.taskTenantId(TenantHelper.getTenantId()).list();
|
.taskTenantId(TenantHelper.getTenantId()).list();
|
||||||
List<Task> subTasks = StreamUtils.filter(list, e -> StringUtils.isNotBlank(e.getParentTaskId()));
|
List<Task> subTasks = StreamUtils.filter(list, e -> StringUtils.isNotBlank(e.getParentTaskId()));
|
||||||
if (CollUtil.isNotEmpty(subTasks)) {
|
if (CollUtil.isNotEmpty(subTasks)) {
|
||||||
subTasks.forEach(e -> taskService.deleteTask(e.getId()));
|
subTasks.forEach(e -> taskService.deleteTask(e.getId()));
|
||||||
}
|
}
|
||||||
runtimeService.bulkDeleteProcessInstances(Arrays.asList(processInstanceIds), LoginHelper.getUserId() + "删除了当前流程申请");
|
runtimeService.bulkDeleteProcessInstances(processInstanceIds, LoginHelper.getUserId() + "删除了当前流程申请");
|
||||||
//2.删除历史记录
|
//2.删除历史记录
|
||||||
List<HistoricProcessInstance> historicProcessInstanceList = historyService.createHistoricProcessInstanceQuery()
|
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)) {
|
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;
|
return true;
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
@ -417,9 +457,9 @@ public class ActProcessInstanceServiceImpl implements IActProcessInstanceService
|
|||||||
* @param processInstanceIds 流程实例id
|
* @param processInstanceIds 流程实例id
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public boolean deleteFinishProcessAndHisInst(String[] processInstanceIds) {
|
public boolean deleteFinishProcessAndHisInst(List<String> processInstanceIds) {
|
||||||
try {
|
try {
|
||||||
historyService.bulkDeleteHistoricProcessInstances(Arrays.asList(processInstanceIds));
|
historyService.bulkDeleteHistoricProcessInstances(processInstanceIds);
|
||||||
return true;
|
return true;
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
@ -502,7 +542,7 @@ public class ActProcessInstanceServiceImpl implements IActProcessInstanceService
|
|||||||
ProcessInstanceVo processInstanceVo = BeanUtil.toBean(processInstance, ProcessInstanceVo.class);
|
ProcessInstanceVo processInstanceVo = BeanUtil.toBean(processInstance, ProcessInstanceVo.class);
|
||||||
processInstanceVo.setBusinessStatusName(BusinessStatusEnum.getEumByStatus(processInstance.getBusinessStatus()));
|
processInstanceVo.setBusinessStatusName(BusinessStatusEnum.getEumByStatus(processInstance.getBusinessStatus()));
|
||||||
if (CollUtil.isNotEmpty(taskVoList)) {
|
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());
|
processInstanceVo.setTaskVoList(CollUtil.isNotEmpty(collect) ? collect : Collections.emptyList());
|
||||||
}
|
}
|
||||||
list.add(processInstanceVo);
|
list.add(processInstanceVo);
|
||||||
|
Loading…
Reference in New Issue
Block a user