From 2012787eecabd22c3fdad9dcd58672bf58ac9ce4 Mon Sep 17 00:00:00 2001 From: smallchill Date: Fri, 7 Feb 2020 15:24:43 +0800 Subject: [PATCH] =?UTF-8?q?:bulb:=20=E5=B7=A5=E4=BD=9C=E6=B5=81=E7=A8=8B?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E7=A7=9F=E6=88=B7=E7=BB=91=E5=AE=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../flow/core/enums/FlowModeEnum.java | 45 +++++++++++++++++ .../business/controller/WorkController.java | 8 ++-- .../service/impl/FlowBusinessServiceImpl.java | 15 ++++-- .../controller/FlowFollowController.java | 8 ++-- .../controller/FlowManagerController.java | 24 ++++++---- .../controller/FlowModelController.java | 15 +++--- .../controller/FlowProcessController.java | 6 +-- .../flow/engine/entity/FlowProcess.java | 2 + ...lowService.java => FlowEngineService.java} | 20 ++++---- ...ceImpl.java => FlowEngineServiceImpl.java} | 48 ++++++++++++++----- 10 files changed, 139 insertions(+), 52 deletions(-) create mode 100644 blade-ops-api/blade-flow-api/src/main/java/org/springblade/flow/core/enums/FlowModeEnum.java rename blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/service/{FlowService.java => FlowEngineService.java} (86%) rename blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/service/impl/{FlowServiceImpl.java => FlowEngineServiceImpl.java} (90%) diff --git a/blade-ops-api/blade-flow-api/src/main/java/org/springblade/flow/core/enums/FlowModeEnum.java b/blade-ops-api/blade-flow-api/src/main/java/org/springblade/flow/core/enums/FlowModeEnum.java new file mode 100644 index 00000000..c5ab5c77 --- /dev/null +++ b/blade-ops-api/blade-flow-api/src/main/java/org/springblade/flow/core/enums/FlowModeEnum.java @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2018-2028, Chill Zhuang All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * Neither the name of the dreamlu.net developer nor the names of its + * contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * Author: Chill 庄骞 (smallchill@163.com) + */ +package org.springblade.flow.core.enums; + +import lombok.AllArgsConstructor; +import lombok.Getter; + +/** + * 流程类型枚举 + * + * @author Chill + */ +@Getter +@AllArgsConstructor +public enum FlowModeEnum { + + /** + * 通用流程 + */ + COMMON("common", 1), + + /** + * 定制流程 + */ + CUSTOM("custom", 2), + ; + + final String name; + final int mode; + +} diff --git a/blade-ops/blade-flow/src/main/java/org/springblade/flow/business/controller/WorkController.java b/blade-ops/blade-flow/src/main/java/org/springblade/flow/business/controller/WorkController.java index 27d36f06..2b7e195c 100644 --- a/blade-ops/blade-flow/src/main/java/org/springblade/flow/business/controller/WorkController.java +++ b/blade-ops/blade-flow/src/main/java/org/springblade/flow/business/controller/WorkController.java @@ -30,7 +30,7 @@ import org.springblade.flow.business.service.FlowBusinessService; import org.springblade.flow.core.entity.BladeFlow; import org.springblade.flow.core.utils.TaskUtil; import org.springblade.flow.engine.entity.FlowProcess; -import org.springblade.flow.engine.service.FlowService; +import org.springblade.flow.engine.service.FlowEngineService; import org.springframework.web.bind.annotation.*; /** @@ -45,7 +45,7 @@ import org.springframework.web.bind.annotation.*; public class WorkController { private TaskService taskService; - private FlowService flowService; + private FlowEngineService flowEngineService; private FlowBusinessService flowBusinessService; /** @@ -54,8 +54,8 @@ public class WorkController { @GetMapping("start-list") @ApiOperationSupport(order = 1) @ApiOperation(value = "发起事务列表页", notes = "传入流程类型") - public R> startList(@ApiParam("流程类型") String category, Query query) { - IPage pages = flowService.selectProcessPage(Condition.getPage(query), category); + public R> startList(@ApiParam("流程类型") String category, Query query, @RequestParam(required = false, defaultValue = "1") Integer mode) { + IPage pages = flowEngineService.selectProcessPage(Condition.getPage(query), category, mode); return R.data(pages); } diff --git a/blade-ops/blade-flow/src/main/java/org/springblade/flow/business/service/impl/FlowBusinessServiceImpl.java b/blade-ops/blade-flow/src/main/java/org/springblade/flow/business/service/impl/FlowBusinessServiceImpl.java index 2cbf3be1..f52909c8 100644 --- a/blade-ops/blade-flow/src/main/java/org/springblade/flow/business/service/impl/FlowBusinessServiceImpl.java +++ b/blade-ops/blade-flow/src/main/java/org/springblade/flow/business/service/impl/FlowBusinessServiceImpl.java @@ -26,6 +26,7 @@ import org.flowable.engine.repository.ProcessDefinition; import org.flowable.task.api.TaskQuery; import org.flowable.task.api.history.HistoricTaskInstance; import org.flowable.task.api.history.HistoricTaskInstanceQuery; +import org.springblade.core.secure.utils.AuthUtil; import org.springblade.core.tool.support.Kv; import org.springblade.core.tool.utils.Func; import org.springblade.core.tool.utils.StringPool; @@ -60,19 +61,23 @@ public class FlowBusinessServiceImpl implements FlowBusinessService { String taskGroup = TaskUtil.getCandidateGroup(); List flowList = new LinkedList<>(); - // 等待签收的任务 + // 个人等待签收的任务 TaskQuery claimUserQuery = taskService.createTaskQuery().taskCandidateUser(taskUser) .includeProcessVariables().active().orderByTaskCreateTime().desc(); - // 等待签收的任务 - TaskQuery claimRoleQuery = taskService.createTaskQuery().taskCandidateGroup(taskGroup) + // 定制流程等待签收的任务 + TaskQuery claimRoleWithTenantIdQuery = taskService.createTaskQuery().taskTenantId(AuthUtil.getTenantId()).taskCandidateGroup(taskGroup) + .includeProcessVariables().active().orderByTaskCreateTime().desc(); + // 通用流程等待签收的任务 + TaskQuery claimRoleWithoutTenantIdQuery = taskService.createTaskQuery().taskWithoutTenantId().taskCandidateGroup(taskGroup) .includeProcessVariables().active().orderByTaskCreateTime().desc(); // 构建列表数据 buildFlowTaskList(bladeFlow, flowList, claimUserQuery, FlowEngineConstant.STATUS_CLAIM); - buildFlowTaskList(bladeFlow, flowList, claimRoleQuery, FlowEngineConstant.STATUS_CLAIM); + buildFlowTaskList(bladeFlow, flowList, claimRoleWithTenantIdQuery, FlowEngineConstant.STATUS_CLAIM); + buildFlowTaskList(bladeFlow, flowList, claimRoleWithoutTenantIdQuery, FlowEngineConstant.STATUS_CLAIM); // 计算总数 - long count = claimUserQuery.count() + claimRoleQuery.count(); + long count = claimUserQuery.count() + claimRoleWithTenantIdQuery.count() + claimRoleWithoutTenantIdQuery.count(); // 设置页数 page.setSize(count); // 设置总数 diff --git a/blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/controller/FlowFollowController.java b/blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/controller/FlowFollowController.java index 766ba88c..361faf53 100644 --- a/blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/controller/FlowFollowController.java +++ b/blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/controller/FlowFollowController.java @@ -27,7 +27,7 @@ import org.springblade.core.secure.annotation.PreAuth; import org.springblade.core.tool.api.R; import org.springblade.core.tool.constant.RoleConstant; import org.springblade.flow.engine.entity.FlowExecution; -import org.springblade.flow.engine.service.FlowService; +import org.springblade.flow.engine.service.FlowEngineService; import org.springframework.web.bind.annotation.*; /** @@ -41,7 +41,7 @@ import org.springframework.web.bind.annotation.*; @PreAuth(RoleConstant.HAS_ROLE_ADMINISTRATOR) public class FlowFollowController { - private FlowService flowService; + private FlowEngineService flowEngineService; /** * 流程状态列表 @@ -50,7 +50,7 @@ public class FlowFollowController { @ApiOperationSupport(order = 1) @ApiOperation(value = "分页", notes = "传入notice") public R> list(Query query, @ApiParam(value = "流程实例id") String processInstanceId, @ApiParam(value = "流程key") String processDefinitionKey) { - IPage pages = flowService.selectFollowPage(Condition.getPage(query), processInstanceId, processDefinitionKey); + IPage pages = flowEngineService.selectFollowPage(Condition.getPage(query), processInstanceId, processDefinitionKey); return R.data(pages); } @@ -61,7 +61,7 @@ public class FlowFollowController { @ApiOperationSupport(order = 2) @ApiOperation(value = "删除", notes = "传入主键集合") public R deleteProcessInstance(@ApiParam(value = "流程实例id") @RequestParam String processInstanceId, @ApiParam(value = "删除原因") @RequestParam String deleteReason) { - boolean temp = flowService.deleteProcessInstance(processInstanceId, deleteReason); + boolean temp = flowEngineService.deleteProcessInstance(processInstanceId, deleteReason); return R.status(temp); } diff --git a/blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/controller/FlowManagerController.java b/blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/controller/FlowManagerController.java index 0314eaaa..1e88f161 100644 --- a/blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/controller/FlowManagerController.java +++ b/blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/controller/FlowManagerController.java @@ -17,9 +17,9 @@ package org.springblade.flow.engine.controller; import com.baomidou.mybatisplus.core.metadata.IPage; +import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; -import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; import io.swagger.annotations.ApiParam; import lombok.AllArgsConstructor; import org.springblade.core.mp.support.Condition; @@ -28,9 +28,10 @@ import org.springblade.core.secure.annotation.PreAuth; import org.springblade.core.tool.api.R; import org.springblade.core.tool.constant.RoleConstant; import org.springblade.core.tool.support.Kv; +import org.springblade.core.tool.utils.Func; import org.springblade.flow.engine.constant.FlowEngineConstant; import org.springblade.flow.engine.entity.FlowProcess; -import org.springblade.flow.engine.service.FlowService; +import org.springblade.flow.engine.service.FlowEngineService; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; @@ -49,7 +50,7 @@ import java.util.Objects; @PreAuth(RoleConstant.HAS_ROLE_ADMINISTRATOR) public class FlowManagerController { - private FlowService flowService; + private FlowEngineService flowEngineService; /** * 分页 @@ -57,11 +58,12 @@ public class FlowManagerController { @GetMapping("list") @ApiOperationSupport(order = 1) @ApiOperation(value = "分页", notes = "传入流程类型") - public R> list(@ApiParam("流程类型") String category, Query query) { - IPage pages = flowService.selectProcessPage(Condition.getPage(query), category); + public R> list(@ApiParam("流程类型") String category, Query query, @RequestParam(required = false, defaultValue = "1") Integer mode) { + IPage pages = flowEngineService.selectProcessPage(Condition.getPage(query), category, mode); return R.data(pages); } + /** * 变更流程状态 * @@ -72,7 +74,7 @@ public class FlowManagerController { @ApiOperationSupport(order = 2) @ApiOperation(value = "变更流程状态", notes = "传入state,processId") public R changeState(@RequestParam String state, @RequestParam String processId) { - String msg = flowService.changeState(state, processId); + String msg = flowEngineService.changeState(state, processId); return R.success(msg); } @@ -85,13 +87,13 @@ public class FlowManagerController { @ApiOperationSupport(order = 3) @ApiOperation(value = "删除部署流程", notes = "部署流程id集合") public R deleteDeployment(String deploymentIds) { - return R.status(flowService.deleteDeployment(deploymentIds)); + return R.status(flowEngineService.deleteDeployment(deploymentIds)); } /** * 检查流程文件格式 * - * @param file 流程文件 + * @param file 流程文件 */ @PostMapping("check-upload") @ApiOperationSupport(order = 4) @@ -110,8 +112,10 @@ public class FlowManagerController { @PostMapping("deploy-upload") @ApiOperationSupport(order = 5) @ApiOperation(value = "上传部署流程文件", notes = "传入文件") - public R deployUpload(@RequestParam List files, @RequestParam String category) { - return R.status(flowService.deployUpload(files, category)); + public R deployUpload(@RequestParam List files, + @RequestParam String category, + @RequestParam(required = false, defaultValue = "") String tenantIds) { + return R.status(flowEngineService.deployUpload(files, category, Func.toStrList(tenantIds))); } } diff --git a/blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/controller/FlowModelController.java b/blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/controller/FlowModelController.java index bf8fcbc9..a6e6fe2f 100644 --- a/blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/controller/FlowModelController.java +++ b/blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/controller/FlowModelController.java @@ -30,7 +30,7 @@ import org.springblade.core.tool.api.R; import org.springblade.core.tool.constant.RoleConstant; import org.springblade.core.tool.utils.Func; import org.springblade.flow.engine.entity.FlowModel; -import org.springblade.flow.engine.service.FlowService; +import org.springblade.flow.engine.service.FlowEngineService; import org.springframework.web.bind.annotation.*; import springfox.documentation.annotations.ApiIgnore; @@ -47,7 +47,7 @@ import java.util.Map; @PreAuth(RoleConstant.HAS_ROLE_ADMINISTRATOR) public class FlowModelController { - private FlowService flowService; + private FlowEngineService flowEngineService; /** * 分页 @@ -60,7 +60,7 @@ public class FlowModelController { @ApiOperationSupport(order = 1) @ApiOperation(value = "分页", notes = "传入notice") public R> list(@ApiIgnore @RequestParam Map flow, Query query) { - IPage pages = flowService.page(Condition.getPage(query), Condition.getQueryWrapper(flow, FlowModel.class)); + IPage pages = flowEngineService.page(Condition.getPage(query), Condition.getQueryWrapper(flow, FlowModel.class)); return R.data(pages); } @@ -71,7 +71,7 @@ public class FlowModelController { @ApiOperationSupport(order = 2) @ApiOperation(value = "删除", notes = "传入主键集合") public R remove(@ApiParam(value = "主键集合") @RequestParam String ids) { - boolean temp = flowService.removeByIds(Func.toStrList(ids)); + boolean temp = flowEngineService.removeByIds(Func.toStrList(ids)); return R.status(temp); } @@ -81,9 +81,10 @@ public class FlowModelController { @PostMapping("/deploy") @ApiOperationSupport(order = 3) @ApiOperation(value = "部署", notes = "传入模型id和分类") - public R deploy(@ApiParam(value = "模型id") @RequestParam String modelId, @ApiParam(value = "工作流分类") @RequestParam String category) { - boolean temp = flowService.deployModel(modelId, category); + public R deploy(@ApiParam(value = "模型id") @RequestParam String modelId, + @ApiParam(value = "工作流分类") @RequestParam String category, + @ApiParam(value = "租户ID") @RequestParam(required = false, defaultValue = "") String tenantIds) { + boolean temp = flowEngineService.deployModel(modelId, category, Func.toStrList(tenantIds)); return R.status(temp); } - } diff --git a/blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/controller/FlowProcessController.java b/blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/controller/FlowProcessController.java index 00680c32..7eb07e4d 100644 --- a/blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/controller/FlowProcessController.java +++ b/blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/controller/FlowProcessController.java @@ -29,7 +29,7 @@ import org.flowable.image.ProcessDiagramGenerator; import org.springblade.core.tool.api.R; import org.springblade.core.tool.utils.StringUtil; import org.springblade.flow.core.entity.BladeFlow; -import org.springblade.flow.engine.service.FlowService; +import org.springblade.flow.engine.service.FlowEngineService; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; @@ -61,7 +61,7 @@ public class FlowProcessController { private RuntimeService runtimeService; private HistoryService historyService; private ProcessEngine processEngine; - private FlowService flowService; + private FlowEngineService flowEngineService; /** * 获取流转历史列表 @@ -72,7 +72,7 @@ public class FlowProcessController { */ @GetMapping(value = "history-flow-list") public R> historyFlowList(@RequestParam String processInstanceId, String startActivityId, String endActivityId) { - return R.data(flowService.historyFlowList(processInstanceId, startActivityId, endActivityId)); + return R.data(flowEngineService.historyFlowList(processInstanceId, startActivityId, endActivityId)); } /** diff --git a/blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/entity/FlowProcess.java b/blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/entity/FlowProcess.java index 938d532f..9fd24006 100644 --- a/blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/entity/FlowProcess.java +++ b/blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/entity/FlowProcess.java @@ -32,6 +32,7 @@ import java.util.Date; public class FlowProcess implements Serializable { private String id; + private String tenantId; private String name; private String key; private String category; @@ -45,6 +46,7 @@ public class FlowProcess implements Serializable { public FlowProcess(ProcessDefinitionEntityImpl entity) { this.id = entity.getId(); + this.tenantId = entity.getTenantId(); this.name = entity.getName(); this.key = entity.getKey(); this.category = entity.getCategory(); diff --git a/blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/service/FlowService.java b/blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/service/FlowEngineService.java similarity index 86% rename from blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/service/FlowService.java rename to blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/service/FlowEngineService.java index c18657f1..2ab1af47 100644 --- a/blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/service/FlowService.java +++ b/blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/service/FlowEngineService.java @@ -31,7 +31,7 @@ import java.util.List; * * @author Chill */ -public interface FlowService extends IService { +public interface FlowEngineService extends IService { /** * 自定义分页 @@ -47,9 +47,10 @@ public interface FlowService extends IService { * * @param page 分页工具 * @param category 分类 + * @param mode 形态 * @return */ - IPage selectProcessPage(IPage page, String category); + IPage selectProcessPage(IPage page, String category, Integer mode); /** * 流程管理列表 @@ -87,23 +88,26 @@ public interface FlowService extends IService { * @return */ boolean deleteDeployment(String deploymentIds); + /** * 上传部署流程 * - * @param files 流程配置文件 - * @param category 流程分类 + * @param files 流程配置文件 + * @param category 流程分类 + * @param tenantIdList 租户id集合 * @return */ - boolean deployUpload(List files, String category); + boolean deployUpload(List files, String category, List tenantIdList); /** * 部署流程 * - * @param modelId 模型id - * @param category 分类 + * @param modelId 模型id + * @param category 分类 + * @param tenantIdList 租户id集合 * @return */ - boolean deployModel(String modelId, String category); + boolean deployModel(String modelId, String category, List tenantIdList); /** * 删除流程实例 diff --git a/blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/service/impl/FlowServiceImpl.java b/blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/service/impl/FlowEngineServiceImpl.java similarity index 90% rename from blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/service/impl/FlowServiceImpl.java rename to blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/service/impl/FlowEngineServiceImpl.java index 315714be..70270036 100644 --- a/blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/service/impl/FlowServiceImpl.java +++ b/blade-ops/blade-flow/src/main/java/org/springblade/flow/engine/service/impl/FlowEngineServiceImpl.java @@ -42,17 +42,20 @@ import org.flowable.engine.runtime.ProcessInstance; import org.flowable.engine.runtime.ProcessInstanceQuery; import org.flowable.engine.task.Comment; import org.springblade.core.log.exception.ServiceException; +import org.springblade.core.secure.utils.AuthUtil; import org.springblade.core.tool.utils.DateUtil; +import org.springblade.core.tool.utils.FileUtil; import org.springblade.core.tool.utils.Func; import org.springblade.core.tool.utils.StringUtil; import org.springblade.flow.core.entity.BladeFlow; +import org.springblade.flow.core.enums.FlowModeEnum; import org.springblade.flow.core.utils.TaskUtil; import org.springblade.flow.engine.constant.FlowEngineConstant; import org.springblade.flow.engine.entity.FlowExecution; import org.springblade.flow.engine.entity.FlowModel; import org.springblade.flow.engine.entity.FlowProcess; import org.springblade.flow.engine.mapper.FlowMapper; -import org.springblade.flow.engine.service.FlowService; +import org.springblade.flow.engine.service.FlowEngineService; import org.springblade.flow.engine.utils.FlowCache; import org.springblade.system.user.cache.UserCache; import org.springblade.system.user.entity.User; @@ -71,9 +74,7 @@ import java.util.*; @Slf4j @Service @AllArgsConstructor -public class FlowServiceImpl extends ServiceImpl implements FlowService { - private static final String IMAGE_NAME = "image"; - private static final String XML_NAME = "xml"; +public class FlowEngineServiceImpl extends ServiceImpl implements FlowEngineService { private static BpmnJsonConverter bpmnJsonConverter = new BpmnJsonConverter(); private static BpmnXMLConverter bpmnXMLConverter = new BpmnXMLConverter(); private ObjectMapper objectMapper; @@ -88,8 +89,16 @@ public class FlowServiceImpl extends ServiceImpl implemen } @Override - public IPage selectProcessPage(IPage page, String category) { + public IPage selectProcessPage(IPage page, String category, Integer mode) { ProcessDefinitionQuery processDefinitionQuery = repositoryService.createProcessDefinitionQuery().latestVersion().orderByProcessDefinitionKey().asc(); + // 通用流程 + if (mode == FlowModeEnum.COMMON.getMode()) { + processDefinitionQuery.processDefinitionWithoutTenantId(); + } + // 定制流程 + else if (!AuthUtil.isAdministrator()) { + processDefinitionQuery.processDefinitionTenantId(AuthUtil.getTenantId()); + } if (StringUtils.isNotEmpty(category)) { processDefinitionQuery.processDefinitionCategory(category); } @@ -247,13 +256,21 @@ public class FlowServiceImpl extends ServiceImpl implemen } @Override - public boolean deployUpload(List files, String category) { + public boolean deployUpload(List files, String category, List tenantIdList) { files.forEach(file -> { try { String fileName = file.getOriginalFilename(); InputStream fileInputStream = file.getInputStream(); - Deployment deployment = repositoryService.createDeployment().addInputStream(fileName, fileInputStream).deploy(); - deploy(deployment, category); + byte[] bytes = FileUtil.copyToByteArray(fileInputStream); + if (Func.isNotEmpty(tenantIdList)) { + tenantIdList.forEach(tenantId -> { + Deployment deployment = repositoryService.createDeployment().addBytes(fileName, bytes).tenantId(tenantId).deploy(); + deploy(deployment, category); + }); + } else { + Deployment deployment = repositoryService.createDeployment().addBytes(fileName, bytes).deploy(); + deploy(deployment, category); + } } catch (IOException e) { e.printStackTrace(); } @@ -262,7 +279,7 @@ public class FlowServiceImpl extends ServiceImpl implemen } @Override - public boolean deployModel(String modelId, String category) { + public boolean deployModel(String modelId, String category, List tenantIdList) { FlowModel model = this.getById(modelId); if (model == null) { throw new ServiceException("No model found with the given id: " + modelId); @@ -272,8 +289,17 @@ public class FlowServiceImpl extends ServiceImpl implemen if (!StringUtil.endsWithIgnoreCase(processName, FlowEngineConstant.SUFFIX)) { processName += FlowEngineConstant.SUFFIX; } - Deployment deployment = repositoryService.createDeployment().addBytes(processName, bytes).name(model.getName()).key(model.getModelKey()).deploy(); - return deploy(deployment, category); + String finalProcessName = processName; + if (Func.isNotEmpty(tenantIdList)) { + tenantIdList.forEach(tenantId -> { + Deployment deployment = repositoryService.createDeployment().addBytes(finalProcessName, bytes).name(model.getName()).key(model.getModelKey()).tenantId(tenantId).deploy(); + deploy(deployment, category); + }); + } else { + Deployment deployment = repositoryService.createDeployment().addBytes(finalProcessName, bytes).name(model.getName()).key(model.getModelKey()).deploy(); + deploy(deployment, category); + } + return true; } @Override