From f3207649fffad5b908c07a3035d71cbf0b767bd0 Mon Sep 17 00:00:00 2001 From: gssong <1742057357@qq.com> Date: 星期六, 16 三月 2024 21:59:53 +0800 Subject: [PATCH] update 调整模型部署,模型导出批量导出,上传 --- ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActProcessDefinitionServiceImpl.java | 185 ++++++++++++++++++++++------------------------ 1 files changed, 89 insertions(+), 96 deletions(-) diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActProcessDefinitionServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActProcessDefinitionServiceImpl.java index f29db1d..cc82e00 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActProcessDefinitionServiceImpl.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActProcessDefinitionServiceImpl.java @@ -4,6 +4,7 @@ import cn.hutool.core.codec.Base64; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.io.FileUtil; import cn.hutool.core.io.IoUtil; import cn.hutool.core.util.ObjectUtil; import lombok.RequiredArgsConstructor; @@ -12,6 +13,7 @@ import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.utils.StreamUtils; import org.dromara.common.core.utils.StringUtils; +import org.dromara.common.mybatis.core.page.PageQuery; import org.dromara.common.mybatis.core.page.TableDataInfo; import org.dromara.common.tenant.helper.TenantHelper; import org.dromara.workflow.common.constant.FlowConstant; @@ -20,13 +22,14 @@ import org.dromara.workflow.domain.vo.ProcessDefinitionVo; import org.dromara.workflow.service.IActProcessDefinitionService; import org.dromara.workflow.service.IWfCategoryService; -import org.flowable.engine.HistoryService; +import org.dromara.workflow.utils.QueryUtils; import org.flowable.engine.ProcessMigrationService; import org.flowable.engine.RepositoryService; import org.flowable.engine.impl.bpmn.deployer.ResourceNameUtil; import org.flowable.engine.repository.*; import org.flowable.task.api.history.HistoricTaskInstance; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; import java.io.IOException; @@ -35,6 +38,7 @@ import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; +import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; /** @@ -47,42 +51,35 @@ public class ActProcessDefinitionServiceImpl implements IActProcessDefinitionService { private final RepositoryService repositoryService; - - private final HistoryService historyService; - private final ProcessMigrationService processMigrationService; - private final IWfCategoryService wfCategoryService; /** * 鍒嗛〉鏌ヨ * - * @param processDefinitionBo 鍙傛暟 + * @param bo 鍙傛暟 * @return 杩斿洖鍒嗛〉鍒楄〃 */ @Override - public TableDataInfo<ProcessDefinitionVo> page(ProcessDefinitionBo processDefinitionBo) { - ProcessDefinitionQuery query = repositoryService.createProcessDefinitionQuery(); - if (TenantHelper.isEnable()) { - query.processDefinitionTenantId(TenantHelper.getTenantId()); + public TableDataInfo<ProcessDefinitionVo> page(ProcessDefinitionBo bo, PageQuery pageQuery) { + ProcessDefinitionQuery query = QueryUtils.definitionQuery(); + if (StringUtils.isNotEmpty(bo.getKey())) { + query.processDefinitionKey(bo.getKey()); } - if (StringUtils.isNotEmpty(processDefinitionBo.getKey())) { - query.processDefinitionKey(processDefinitionBo.getKey()); + if (StringUtils.isNotEmpty(bo.getCategoryCode())) { + query.processDefinitionCategory(bo.getCategoryCode()); } - if (StringUtils.isNotEmpty(processDefinitionBo.getCategoryCode())) { - query.processDefinitionCategory(processDefinitionBo.getCategoryCode()); - } - if (StringUtils.isNotEmpty(processDefinitionBo.getName())) { - query.processDefinitionNameLike("%" + processDefinitionBo.getName() + "%"); + if (StringUtils.isNotEmpty(bo.getName())) { + query.processDefinitionNameLike("%" + bo.getName() + "%"); } query.orderByDeploymentId().desc(); // 鍒嗛〉鏌ヨ List<ProcessDefinitionVo> processDefinitionVoList = new ArrayList<>(); - List<ProcessDefinition> definitionList = query.latestVersion().listPage(processDefinitionBo.getPageNum(), processDefinitionBo.getPageSize()); + List<ProcessDefinition> definitionList = query.latestVersion().listPage(pageQuery.getFirstNum(), pageQuery.getPageSize()); List<Deployment> deploymentList = null; if (CollUtil.isNotEmpty(definitionList)) { List<String> deploymentIds = StreamUtils.toList(definitionList, ProcessDefinition::getDeploymentId); - deploymentList = repositoryService.createDeploymentQuery().deploymentIds(deploymentIds).list(); + deploymentList = QueryUtils.deploymentQuery(deploymentIds).list(); } for (ProcessDefinition processDefinition : definitionList) { ProcessDefinitionVo processDefinitionVo = BeanUtil.toBean(processDefinition, ProcessDefinitionVo.class); @@ -106,18 +103,14 @@ * @param key 娴佺▼瀹氫箟key */ @Override - public List<ProcessDefinitionVo> getProcessDefinitionListByKey(String key) { + public List<ProcessDefinitionVo> getListByKey(String key) { List<ProcessDefinitionVo> processDefinitionVoList = new ArrayList<>(); - ProcessDefinitionQuery query = repositoryService.createProcessDefinitionQuery(); - if (TenantHelper.isEnable()) { - query.processDefinitionTenantId(TenantHelper.getTenantId()); - } + ProcessDefinitionQuery query = QueryUtils.definitionQuery(); List<ProcessDefinition> definitionList = query.processDefinitionKey(key).list(); List<Deployment> deploymentList = null; if (CollUtil.isNotEmpty(definitionList)) { List<String> deploymentIds = definitionList.stream().map(ProcessDefinition::getDeploymentId).collect(Collectors.toList()); - deploymentList = repositoryService.createDeploymentQuery() - .deploymentIds(deploymentIds).list(); + deploymentList = QueryUtils.deploymentQuery(deploymentIds).list(); } for (ProcessDefinition processDefinition : definitionList) { ProcessDefinitionVo processDefinitionVo = BeanUtil.toBean(processDefinition, ProcessDefinitionVo.class); @@ -139,7 +132,7 @@ */ @SneakyThrows @Override - public String processDefinitionImage(String processDefinitionId) { + public String definitionImage(String processDefinitionId) { InputStream inputStream = repositoryService.getProcessDiagram(processDefinitionId); return Base64.encode(IOUtils.toByteArray(inputStream)); } @@ -150,7 +143,7 @@ * @param processDefinitionId 娴佺▼瀹氫箟id */ @Override - public String processDefinitionXml(String processDefinitionId) { + public String definitionXml(String processDefinitionId) { StringBuilder xml = new StringBuilder(); ProcessDefinition processDefinition = repositoryService.getProcessDefinition(processDefinitionId); InputStream inputStream; @@ -172,7 +165,7 @@ @Override public boolean deleteDeployment(String deploymentId, String processDefinitionId) { try { - List<HistoricTaskInstance> taskInstanceList = historyService.createHistoricTaskInstanceQuery() + List<HistoricTaskInstance> taskInstanceList = QueryUtils.hisTaskInstanceQuery() .processDefinitionId(processDefinitionId).list(); if (CollectionUtil.isNotEmpty(taskInstanceList)) { throw new ServiceException("褰撳墠娴佺▼瀹氫箟宸茶浣跨敤涓嶅彲鍒犻櫎锛�"); @@ -192,13 +185,10 @@ * @param processDefinitionId 娴佺▼瀹氫箟id */ @Override - public boolean updateProcessDefState(String processDefinitionId) { + public boolean updateDefinitionState(String processDefinitionId) { try { - ProcessDefinitionQuery query = repositoryService.createProcessDefinitionQuery(); - if (TenantHelper.isEnable()) { - query.processDefinitionTenantId(TenantHelper.getTenantId()); - } - ProcessDefinition processDefinition = query.processDefinitionId(processDefinitionId).singleResult(); + ProcessDefinition processDefinition = QueryUtils.definitionQuery() + .processDefinitionId(processDefinitionId).singleResult(); //灏嗗綋鍓嶄负鎸傝捣鐘舵�佹洿鏂颁负婵�娲荤姸鎬� //鍙傛暟璇存槑锛氬弬鏁�1锛氭祦绋嬪畾涔塱d,鍙傛暟2锛氭槸鍚︽縺娲伙紙true鏄惁绾ц仈瀵瑰簲娴佺▼瀹炰緥锛屾縺娲讳簡鍒欏搴旀祦绋嬪疄渚嬮兘鍙互瀹℃壒锛夛紝 //鍙傛暟3锛氫粈涔堟椂鍊欐縺娲伙紝濡傛灉涓簄ull鍒欑珛鍗虫縺娲伙紝濡傛灉涓哄叿浣撴椂闂村垯鍒拌揪姝ゆ椂闂村悗婵�娲� @@ -222,7 +212,7 @@ */ @Override - public boolean migrationProcessDefinition(String currentProcessDefinitionId, String fromProcessDefinitionId) { + public boolean migrationDefinition(String currentProcessDefinitionId, String fromProcessDefinitionId) { try { // 杩佺Щ楠岃瘉 boolean migrationValid = processMigrationService.createProcessInstanceMigrationBuilder() @@ -249,13 +239,10 @@ */ @Override public boolean convertToModel(String processDefinitionId) { - ProcessDefinition pd = repositoryService.createProcessDefinitionQuery() + ProcessDefinition pd = QueryUtils.definitionQuery() .processDefinitionId(processDefinitionId).singleResult(); InputStream inputStream = repositoryService.getResourceAsStream(pd.getDeploymentId(), pd.getResourceName()); - ModelQuery query = repositoryService.createModelQuery(); - if (TenantHelper.isEnable()) { - query.modelTenantId(TenantHelper.getTenantId()); - } + ModelQuery query = QueryUtils.modelQuery(); Model model = query.modelKey(pd.getKey()).singleResult(); try { if (ObjectUtil.isNotNull(model)) { @@ -281,63 +268,69 @@ * @param file 鏂囦欢 * @param categoryCode 鍒嗙被 */ + @SneakyThrows @Override - public boolean deployByFile(MultipartFile file, String categoryCode) { - try { - WfCategory wfCategory = wfCategoryService.queryByCategoryCode(categoryCode); - if (wfCategory == null) { - throw new ServiceException("娴佺▼鍒嗙被涓嶅瓨鍦�"); - } - // 鏂囦欢鍚� = 娴佺▼鍚嶇О-娴佺▼key - String filename = file.getOriginalFilename(); - assert filename != null; - String[] splitFilename = filename.substring(0, filename.lastIndexOf(".")).split("-"); - if (splitFilename.length < 2) { - throw new ServiceException("娴佺▼鍒嗙被涓嶈兘涓虹┖(鏂囦欢鍚� = 娴佺▼鍚嶇О-娴佺▼key)"); - } - //娴佺▼鍚嶇О - String processName = splitFilename[0]; - //娴佺▼key - String processKey = splitFilename[1]; - // 鏂囦欢鍚庣紑鍚� - String suffix = filename.substring(filename.lastIndexOf(".") + 1).toUpperCase(); - InputStream inputStream = file.getInputStream(); - Deployment deployment; - if (FlowConstant.ZIP.equals(suffix)) { - DeploymentBuilder query = repositoryService.createDeployment(); - if (TenantHelper.isEnable()) { - query.tenantId(TenantHelper.getTenantId()); - } - deployment = query.addZipInputStream(new ZipInputStream(inputStream)) - .name(processName).key(processKey).category(categoryCode).deploy(); - } else { - String[] list = ResourceNameUtil.BPMN_RESOURCE_SUFFIXES; - boolean flag = false; - for (String str : list) { - if (filename.contains(str)) { - flag = true; - break; - } - } - if (flag) { - DeploymentBuilder query = repositoryService.createDeployment(); - if (TenantHelper.isEnable()) { - query.tenantId(TenantHelper.getTenantId()); - } - deployment = query.addInputStream(filename, inputStream) - .name(processName).key(processKey).category(categoryCode).deploy(); - } else { - throw new ServiceException("鏂囦欢绫诲瀷涓婁紶閿欒锛�"); - } - } - // 鏇存柊鍒嗙被 - ProcessDefinition definition = repositoryService.createProcessDefinitionQuery().deploymentId(deployment.getId()).singleResult(); - repositoryService.setProcessDefinitionCategory(definition.getId(), categoryCode); + @Transactional(rollbackFor = Exception.class) + public void deployByFile(MultipartFile file, String categoryCode) { - return true; - } catch (IOException e) { - e.printStackTrace(); - throw new ServiceException("閮ㄧ讲澶辫触" + e.getMessage()); + WfCategory wfCategory = wfCategoryService.queryByCategoryCode(categoryCode); + if (wfCategory == null) { + throw new ServiceException("娴佺▼鍒嗙被涓嶅瓨鍦�"); } + // 鏂囦欢鍚庣紑鍚� + String suffix = FileUtil.extName(file.getOriginalFilename()); + InputStream inputStream = file.getInputStream(); + if (FlowConstant.ZIP.equalsIgnoreCase(suffix)) { + ZipInputStream zipInputStream = null; + try { + zipInputStream = new ZipInputStream(inputStream); + ZipEntry zipEntry; + while ((zipEntry = zipInputStream.getNextEntry()) != null) { + String filename = zipEntry.getName(); + String[] splitFilename = filename.substring(0, filename.lastIndexOf(".")).split("-"); + //娴佺▼鍚嶇О + String processName = splitFilename[0]; + //娴佺▼key + String processKey = splitFilename[1]; + DeploymentBuilder builder = repositoryService.createDeployment(); + Deployment deployment = builder.addInputStream(filename, zipInputStream) + .tenantId(TenantHelper.getTenantId()) + .name(processName).key(processKey).category(categoryCode).deploy(); + ProcessDefinition definition = QueryUtils.definitionQuery().deploymentId(deployment.getId()).singleResult(); + repositoryService.setProcessDefinitionCategory(definition.getId(), categoryCode); + zipInputStream.closeEntry(); + } + } catch (IOException e) { + throw new RuntimeException(e); + } finally { + if (zipInputStream != null) { + zipInputStream.close(); + } + } + } else { + String originalFilename = file.getOriginalFilename(); + String bpmnResourceSuffix = ResourceNameUtil.BPMN_RESOURCE_SUFFIXES[0]; + if (originalFilename.contains(bpmnResourceSuffix)) { + // 鏂囦欢鍚� = 娴佺▼鍚嶇О-娴佺▼key + String[] splitFilename = originalFilename.substring(0, originalFilename.lastIndexOf(".")).split("-"); + if (splitFilename.length < 2) { + throw new ServiceException("鏂囦欢鍚� = 娴佺▼鍚嶇О-娴佺▼KEY"); + } + //娴佺▼鍚嶇О + String processName = splitFilename[0]; + //娴佺▼key + String processKey = splitFilename[1]; + DeploymentBuilder builder = repositoryService.createDeployment(); + Deployment deployment = builder.addInputStream(originalFilename, inputStream) + .tenantId(TenantHelper.getTenantId()) + .name(processName).key(processKey).category(categoryCode).deploy(); + // 鏇存柊鍒嗙被 + ProcessDefinition definition = QueryUtils.definitionQuery().deploymentId(deployment.getId()).singleResult(); + repositoryService.setProcessDefinitionCategory(definition.getId(), categoryCode); + } else { + throw new ServiceException("鏂囦欢绫诲瀷涓婁紶閿欒锛�"); + } + } + } } -- Gitblit v1.9.3