From 64dccb192ca97c6cce06ed9e3e8f360d71126b27 Mon Sep 17 00:00:00 2001 From: gssong <1742057357@qq.com> Date: 星期五, 26 四月 2024 20:50:40 +0800 Subject: [PATCH] update 更新模型错误数据,优化参数 --- ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActProcessInstanceServiceImpl.java | 75 +++++++++++++++++++++++++++---------- 1 files changed, 55 insertions(+), 20 deletions(-) diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActProcessInstanceServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActProcessInstanceServiceImpl.java index 730aacd..a0da21d 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActProcessInstanceServiceImpl.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActProcessInstanceServiceImpl.java @@ -3,11 +3,11 @@ import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.codec.Base64; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.io.IoUtil; import cn.hutool.core.util.ObjectUtil; import lombok.RequiredArgsConstructor; import lombok.SneakyThrows; 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; import org.dromara.common.core.utils.StringUtils; @@ -21,10 +21,7 @@ import org.dromara.workflow.domain.bo.ProcessInstanceBo; import org.dromara.workflow.domain.bo.ProcessInvalidBo; import org.dromara.workflow.domain.bo.TaskUrgingBo; -import org.dromara.workflow.domain.vo.ActHistoryInfoVo; -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.domain.vo.*; import org.dromara.workflow.flowable.CustomDefaultProcessDiagramGenerator; import org.dromara.workflow.flowable.cmd.DeleteExecutionCmd; import org.dromara.workflow.flowable.cmd.ExecutionChildByExecutionIdCmd; @@ -32,6 +29,8 @@ import org.dromara.workflow.flowable.strategy.FlowProcessEventHandler; import org.dromara.workflow.service.IActHiProcinstService; import org.dromara.workflow.service.IActProcessInstanceService; +import org.dromara.workflow.service.IWfNodeConfigService; +import org.dromara.workflow.service.IWfTaskBackNodeService; import org.dromara.workflow.utils.QueryUtils; import org.dromara.workflow.utils.WorkflowUtils; import org.flowable.bpmn.model.*; @@ -53,7 +52,6 @@ import org.springframework.transaction.annotation.Transactional; import java.awt.*; -import java.io.IOException; import java.io.InputStream; import java.nio.charset.StandardCharsets; import java.util.List; @@ -77,6 +75,8 @@ private final IActHiProcinstService actHiProcinstService; private final ManagementService managementService; private final FlowEventStrategy flowEventStrategy; + private final IWfTaskBackNodeService iWfTaskBackNodeService; + private final IWfNodeConfigService iWfNodeConfigService; @Value("${flowable.activity-font-name}") private String activityFontName; @@ -119,8 +119,20 @@ processInstanceVo.setBusinessStatusName(BusinessStatusEnum.findByStatus(processInstance.getBusinessStatus())); list.add(processInstanceVo); } + if (CollUtil.isNotEmpty(list)) { + List<String> processDefinitionIds = StreamUtils.toList(list, ProcessInstanceVo::getProcessDefinitionId); + List<WfNodeConfigVo> wfNodeConfigVoList = iWfNodeConfigService.selectByDefIds(processDefinitionIds); + for (ProcessInstanceVo processInstanceVo : list) { + if (CollUtil.isNotEmpty(wfNodeConfigVoList)) { + wfNodeConfigVoList.stream().filter(e -> e.getDefinitionId().equals(processInstanceVo.getProcessDefinitionId()) && FlowConstant.TRUE.equals(e.getApplyUserTask())).findFirst().ifPresent(processInstanceVo::setWfNodeConfigVo); + } + } + } long count = query.count(); - return new TableDataInfo<>(list, count); + TableDataInfo<ProcessInstanceVo> build = TableDataInfo.build(); + build.setRows(list); + build.setTotal(count); + return build; } /** @@ -154,8 +166,20 @@ processInstanceVo.setBusinessStatusName(BusinessStatusEnum.findByStatus(historicProcessInstance.getBusinessStatus())); list.add(processInstanceVo); } + if (CollUtil.isNotEmpty(list)) { + List<String> processDefinitionIds = StreamUtils.toList(list, ProcessInstanceVo::getProcessDefinitionId); + List<WfNodeConfigVo> wfNodeConfigVoList = iWfNodeConfigService.selectByDefIds(processDefinitionIds); + for (ProcessInstanceVo processInstanceVo : list) { + if (CollUtil.isNotEmpty(wfNodeConfigVoList)) { + wfNodeConfigVoList.stream().filter(e -> e.getDefinitionId().equals(processInstanceVo.getProcessDefinitionId()) && FlowConstant.TRUE.equals(e.getApplyUserTask())).findFirst().ifPresent(processInstanceVo::setWfNodeConfigVo); + } + } + } long count = query.count(); - return new TableDataInfo<>(list, count); + TableDataInfo<ProcessInstanceVo> build = TableDataInfo.build(); + build.setRows(list); + build.setTotal(count); + return build; } /** @@ -211,7 +235,7 @@ BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefinitionId); CustomDefaultProcessDiagramGenerator diagramGenerator = new CustomDefaultProcessDiagramGenerator(); InputStream inputStream = diagramGenerator.generateDiagram(bpmnModel, "png", highLightedNodeList, highLightedFlows, activityFontName, labelFontName, annotationFontName, null, 1.0, true); - return Base64.encode(IOUtils.toByteArray(inputStream)); + return Base64.encode(IoUtil.readBytes(inputStream)); } /** @@ -257,14 +281,9 @@ map.put("taskList", taskList); List<ActHistoryInfoVo> historyTaskList = getHistoryTaskList(processInstanceId); map.put("historyList", historyTaskList); - InputStream inputStream; - try { - inputStream = repositoryService.getResourceAsStream(processDefinition.getDeploymentId(), processDefinition.getResourceName()); - xml.append(IOUtils.toString(inputStream, String.valueOf(StandardCharsets.UTF_8))); - map.put("xml", xml.toString()); - } catch (IOException e) { - e.printStackTrace(); - } + InputStream inputStream = repositoryService.getResourceAsStream(processDefinition.getDeploymentId(), processDefinition.getResourceName()); + xml.append(IoUtil.read(inputStream, StandardCharsets.UTF_8)); + map.put("xml", xml.toString()); return map; } @@ -281,6 +300,7 @@ for (HistoricTaskInstance historicTaskInstance : list) { ActHistoryInfoVo actHistoryInfoVo = new ActHistoryInfoVo(); BeanUtils.copyProperties(historicTaskInstance, actHistoryInfoVo); + actHistoryInfoVo.setAssignee(StringUtils.isNotBlank(historicTaskInstance.getAssignee()) ? Long.valueOf(historicTaskInstance.getAssignee()) : null); actHistoryInfoVo.setStatus(actHistoryInfoVo.getEndTime() == null ? "寰呭鐞�" : "宸插鐞�"); if (ObjectUtil.isNotEmpty(historicTaskInstance.getDurationInMillis())) { actHistoryInfoVo.setRunDuration(getDuration(historicTaskInstance.getDurationInMillis())); @@ -499,6 +519,7 @@ if (ObjectUtil.isNotEmpty(historicProcessInstanceList)) { historyService.bulkDeleteHistoricProcessInstances(processInstanceIds); } + iWfTaskBackNodeService.deleteByInstanceIds(processInstanceIds); return true; } catch (Exception e) { e.printStackTrace(); @@ -533,6 +554,7 @@ if (ObjectUtil.isNotEmpty(historicProcessInstanceList)) { historyService.bulkDeleteHistoricProcessInstances(processInstanceIds); } + iWfTaskBackNodeService.deleteByInstanceIds(processInstanceIds); return true; } catch (Exception e) { e.printStackTrace(); @@ -550,6 +572,7 @@ public boolean deleteFinishAndHisInstance(List<String> processInstanceIds) { try { historyService.bulkDeleteHistoricProcessInstances(processInstanceIds); + iWfTaskBackNodeService.deleteByInstanceIds(processInstanceIds); return true; } catch (Exception e) { e.printStackTrace(); @@ -577,7 +600,7 @@ BusinessStatusEnum.checkCancelStatus(processInstance.getBusinessStatus()); List<Task> taskList = QueryUtils.taskQuery(processInstanceId).list(); for (Task task : taskList) { - taskService.setAssignee(task.getId(), String.valueOf(LoginHelper.getUserId())); + taskService.setAssignee(task.getId(), null); taskService.addComment(task.getId(), processInstanceId, TaskStatusEnum.CANCEL.getStatus(), LoginHelper.getLoginUser().getNickname() + "锛氭挙閿�鐢宠"); } HistoricTaskInstance historicTaskInstance = QueryUtils.hisTaskInstanceQuery().finished().orderByHistoricTaskInstanceEndTime().asc().list().get(0); @@ -616,7 +639,7 @@ public TableDataInfo<ProcessInstanceVo> getPageByCurrent(ProcessInstanceBo bo, PageQuery pageQuery) { List<ProcessInstanceVo> list = new ArrayList<>(); HistoricProcessInstanceQuery query = QueryUtils.hisInstanceQuery(); - query.startedBy(bo.getStartUserId()); + query.startedBy(String.valueOf(LoginHelper.getUserId())); if (StringUtils.isNotBlank(bo.getName())) { query.processInstanceNameLikeIgnoreCase("%" + bo.getName() + "%"); } @@ -648,8 +671,20 @@ } list.add(processInstanceVo); } + if (CollUtil.isNotEmpty(list)) { + List<String> processDefinitionIds = StreamUtils.toList(list, ProcessInstanceVo::getProcessDefinitionId); + List<WfNodeConfigVo> wfNodeConfigVoList = iWfNodeConfigService.selectByDefIds(processDefinitionIds); + for (ProcessInstanceVo processInstanceVo : list) { + if (CollUtil.isNotEmpty(wfNodeConfigVoList)) { + wfNodeConfigVoList.stream().filter(e -> e.getDefinitionId().equals(processInstanceVo.getProcessDefinitionId()) && FlowConstant.TRUE.equals(e.getApplyUserTask())).findFirst().ifPresent(processInstanceVo::setWfNodeConfigVo); + } + } + } long count = query.count(); - return new TableDataInfo<>(list, count); + TableDataInfo<ProcessInstanceVo> build = TableDataInfo.build(); + build.setRows(list); + build.setTotal(count); + return build; } /** -- Gitblit v1.9.3