package jnpf.flowable.util; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.google.common.collect.ImmutableList; import jnpf.constant.MsgCode; import jnpf.exception.WorkFlowException; import jnpf.flowable.entity.*; import jnpf.flowable.enums.NodeEnum; import jnpf.flowable.enums.OperatorStateEnum; import jnpf.flowable.enums.TaskStatusEnum; import jnpf.flowable.mapper.*; import jnpf.flowable.model.util.FlowNature; import jnpf.flowable.service.RejectDataService; import jnpf.util.StringUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import java.util.ArrayList; import java.util.Comparator; import java.util.List; import java.util.stream.Collectors; @Component public class VisuladeUtil { @Autowired private TaskMapper taskMapper; @Autowired private TemplateJsonMapper templateJsonMapper; @Autowired private TemplateNodeMapper templateNodeMapper; @Autowired private LaunchUserMapper launchUserMapper; @Autowired private CandidatesMapper candidatesMapper; @Autowired private OperatorMapper operatorMapper; @Autowired private RecordMapper recordMapper; @Autowired private CirculateMapper circulateMapper; @Autowired private CommentMapper commentMapper; @Autowired private RejectDataService rejectDataService; @Autowired private NodeRecordMapper nodeRecordMapper; @Autowired private TaskLineMapper taskLineMapper; @Autowired private RevokeMapper revokeMapper; @Autowired private TriggerTaskMapper triggerTaskMapper; @Autowired private TriggerRecordMapper triggerRecordMapper; @Autowired private EventLogMapper eventLogMapper; @Autowired private TemplateUseNumMapper templateUseNumMapper; public List delete(String id) throws Exception { TaskEntity entity = taskMapper.selectById(id); if (null == entity) { throw new WorkFlowException(MsgCode.FA001.get()); } if (TaskStatusEnum.PAUSED.getCode().equals(entity.getStatus())) { throw new WorkFlowException(MsgCode.WF114.get()); } List status = ImmutableList.of(TaskStatusEnum.TO_BE_SUBMIT.getCode(), TaskStatusEnum.RECALL.getCode()); if (!status.contains(entity.getStatus())) { throw new WorkFlowException(MsgCode.WF063.get()); } if (StringUtil.isNotEmpty(entity.getParentId()) && !FlowNature.ParentId.equals(entity.getParentId())) { throw new WorkFlowException(entity.getFullName() + MsgCode.WF021.get()); } List idList = ImmutableList.of(entity.getId()); this.delete(idList); List list = ImmutableList.of(entity); return list; } public void delete(List idList) { List idAll = new ArrayList<>(); taskMapper.deleTaskAll(idList, idAll); List revokeTaskIds = revokeMapper.getByTaskId(idAll); idAll.addAll(revokeTaskIds); if (!idAll.isEmpty()) { QueryWrapper task = new QueryWrapper<>(); task.lambda().in(TaskEntity::getId, idAll); taskMapper.setIgnoreLogicDelete().deleteByIds(taskMapper.selectList(task)); taskMapper.clearIgnoreLogicDelete(); // 候选人 QueryWrapper candidates = new QueryWrapper<>(); candidates.lambda().select(CandidatesEntity::getId); candidates.lambda().in(CandidatesEntity::getTaskId, idAll); candidatesMapper.setIgnoreLogicDelete().deleteByIds(candidatesMapper.selectList(candidates)); candidatesMapper.clearIgnoreLogicDelete(); // 发起人 QueryWrapper launchUser = new QueryWrapper<>(); launchUser.lambda().select(LaunchUserEntity::getId); launchUser.lambda().in(LaunchUserEntity::getTaskId, idAll); launchUserMapper.setIgnoreLogicDelete().deleteByIds(launchUserMapper.selectList(launchUser)); launchUserMapper.clearIgnoreLogicDelete(); // 评论 QueryWrapper comment = new QueryWrapper<>(); comment.lambda().select(CommentEntity::getId); comment.lambda().in(CommentEntity::getTaskId, idAll); commentMapper.setIgnoreLogicDelete().deleteByIds(commentMapper.selectList(comment)); commentMapper.clearIgnoreLogicDelete(); // 经办 QueryWrapper operator = new QueryWrapper<>(); operator.lambda().select(OperatorEntity::getId); operator.lambda().in(OperatorEntity::getTaskId, idAll); operatorMapper.setIgnoreLogicDelete().deleteByIds(operatorMapper.selectList(operator)); operatorMapper.clearIgnoreLogicDelete(); // 记录 QueryWrapper record = new QueryWrapper<>(); record.lambda().select(RecordEntity::getId); record.lambda().in(RecordEntity::getTaskId, idAll); recordMapper.setIgnoreLogicDelete().deleteByIds(recordMapper.selectList(record)); recordMapper.clearIgnoreLogicDelete(); // 退回信息 List taskList = taskMapper.selectList(task); List rejectDataIds = taskList.stream().map(TaskEntity::getRejectDataId).collect(Collectors.toList()); if (CollectionUtil.isNotEmpty(rejectDataIds)) { QueryWrapper rejectData = new QueryWrapper<>(); rejectData.lambda().select(RejectDataEntity::getId); rejectData.lambda().in(RejectDataEntity::getId, rejectDataIds); rejectDataService.setIgnoreLogicDelete().removeByIds(rejectDataService.list(rejectData)); rejectDataService.clearIgnoreLogicDelete(); } // 抄送 QueryWrapper circulate = new QueryWrapper<>(); circulate.lambda().select(CirculateEntity::getId); circulate.lambda().in(CirculateEntity::getTaskId, idAll); circulateMapper.setIgnoreLogicDelete().deleteByIds(circulateMapper.selectList(circulate)); circulateMapper.clearIgnoreLogicDelete(); // 任务条件 QueryWrapper taskLine = new QueryWrapper<>(); taskLine.lambda().select(TaskLineEntity::getId); taskLine.lambda().in(TaskLineEntity::getTaskId, idAll); taskLineMapper.setIgnoreLogicDelete().deleteByIds(taskLineMapper.selectList(taskLine)); taskLineMapper.clearIgnoreLogicDelete(); // 撤销 QueryWrapper revoke = new QueryWrapper<>(); revoke.lambda().select(RevokeEntity::getId); revoke.lambda().in(RevokeEntity::getRevokeTaskId, idAll); revokeMapper.setIgnoreLogicDelete().deleteByIds(revokeMapper.selectList(revoke)); revokeMapper.clearIgnoreLogicDelete(); //节点流转 QueryWrapper nodeRecord = new QueryWrapper<>(); nodeRecord.lambda().select(NodeRecordEntity::getId); nodeRecord.lambda().in(NodeRecordEntity::getTaskId, idAll); nodeRecordMapper.setIgnoreLogicDelete().deleteByIds(nodeRecordMapper.selectList(nodeRecord)); nodeRecordMapper.clearIgnoreLogicDelete(); //外部事件 QueryWrapper eventLog = new QueryWrapper<>(); eventLog.lambda().select(EventLogEntity::getId); eventLog.lambda().in(EventLogEntity::getTaskId, idAll); eventLogMapper.setIgnoreLogicDelete().deleteByIds(eventLogMapper.selectList(eventLog)); eventLogMapper.clearIgnoreLogicDelete(); // 任务流程 QueryWrapper triggerTask = new QueryWrapper<>(); triggerTask.lambda().select(TriggerTaskEntity::getId); triggerTask.lambda().in(TriggerTaskEntity::getTaskId, idAll); List list = triggerTaskMapper.selectList(triggerTask); if (!list.isEmpty()) { List ids = list.stream().map(TriggerTaskEntity::getId).collect(Collectors.toList()); triggerTaskMapper.setIgnoreLogicDelete().deleteByIds(list); triggerTaskMapper.clearIgnoreLogicDelete(); QueryWrapper triggerRecord = new QueryWrapper<>(); triggerRecord.lambda().select(TriggerRecordEntity::getId); triggerRecord.lambda().in(TriggerRecordEntity::getTriggerId, ids); triggerRecordMapper.setIgnoreLogicDelete().deleteByIds(triggerRecordMapper.selectList(triggerRecord)); triggerRecordMapper.clearIgnoreLogicDelete(); } } } // 归档 当前流程所有人:包含流程的发起人、所有节点的审批人及抄送人员,不包含加签和转审人员;(审批人读取参与审批的人) public List getListOfFile(String taskId) { List resList = new ArrayList<>(); List operatorList = operatorMapper.getList(taskId); if (CollectionUtil.isNotEmpty(operatorList)) { List status = ImmutableList.of(OperatorStateEnum.AddSign.getCode(), OperatorStateEnum.Transfer.getCode(), OperatorStateEnum.Assist.getCode(), OperatorStateEnum.Futility.getCode()); List list = operatorList.stream() .filter(e -> !status.contains(e.getStatus()) && e.getHandleStatus() != null) .collect(Collectors.toList()); resList.addAll(list.stream().map(OperatorEntity::getHandleId).collect(Collectors.toList())); } List circulateList = circulateMapper.getList(taskId); if (CollectionUtil.isNotEmpty(circulateList)) { resList.addAll(circulateList.stream().map(CirculateEntity::getUserId).collect(Collectors.toList())); } return resList.stream().distinct().collect(Collectors.toList()); } // 归档 最后节点审批人:表示最后节点的审批人才有权限查看该文档(取最后节点实际参与审批的人,不包含加签和转审人员); public List getListOfLast(String taskId) { List resList = new ArrayList<>(); List status = ImmutableList.of(OperatorStateEnum.AddSign.getCode(), OperatorStateEnum.Transfer.getCode(), OperatorStateEnum.Assist.getCode(), OperatorStateEnum.Futility.getCode()); QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.lambda().eq(OperatorEntity::getTaskId, taskId) .ne(OperatorEntity::getHandleId, FlowNature.SYSTEM_CODE) .notIn(OperatorEntity::getStatus, status) .isNotNull(OperatorEntity::getHandleStatus).orderByDesc(OperatorEntity::getHandleTime); List list = operatorMapper.selectList(queryWrapper); if (CollectionUtil.isNotEmpty(list)) { // 获取符合条件的最后一个审批人,通过该审批人获取节点 OperatorEntity operator = list.get(0); List operatorList = list.stream() .filter(e -> ObjectUtil.equals(operator.getNodeId(), e.getNodeId())) .sorted(Comparator.comparing(OperatorEntity::getHandleTime).reversed()).collect(Collectors.toList()); if (CollectionUtil.isNotEmpty(operatorList)) { List handleIds = operatorList.stream().map(OperatorEntity::getHandleId).distinct().collect(Collectors.toList()); resList.addAll(handleIds); } List circulateList = circulateMapper.getList(taskId); if (CollectionUtil.isNotEmpty(circulateList)) { List userIds = circulateList.stream().filter(e -> ObjectUtil.equals(operator.getNodeId(), e.getNodeId())) .map(CirculateEntity::getUserId).collect(Collectors.toList()); resList.addAll(userIds); } } return resList.stream().distinct().collect(Collectors.toList()); } public List getFormList() { List resList = new ArrayList<>(); List list = templateJsonMapper.getListOfEnable(); if (CollectionUtil.isNotEmpty(list)) { List flowIds = list.stream().map(TemplateJsonEntity::getId).distinct().collect(Collectors.toList()); List startNodeList = templateNodeMapper.getList(flowIds, NodeEnum.start.getType()); resList = startNodeList.stream().map(TemplateNodeEntity::getFormId).distinct().collect(Collectors.toList()); } return resList; } }