From 8a94ba1e50f3440d9eff96f8138dd95368eca5dd Mon Sep 17 00:00:00 2001 From: wangxiang <1827945911@qq.com> Date: Tue, 24 Oct 2023 20:42:12 +0800 Subject: [PATCH] chore: workflow compose --- .../kicc/common/security/util/AuthUtils.java | 5 + .../common/security/util/SecurityUtils.java | 12 ++- .../workflow/api/constant/SqlConstants.java | 6 +- .../workflow/cmd/RollBackUserTaskCmd.java | 2 +- .../controller/WorkflowFormController.java | 14 ++- .../controller/WorkflowModelController.java | 13 +-- .../controller/WorkflowProcessController.java | 9 +- .../controller/WorkflowTaskController.java | 9 +- .../ActivityExtensionDataController.java | 2 +- .../ActivityExtensionPropertyController.java | 2 +- .../interceptor/ModelHandlerInterceptor.java | 15 +-- .../workflow/override/UiTenantProvider.java | 18 ++-- .../FlowableSequenceFlowJsonConverter.java | 2 +- .../FlowableStartEventJsonConverter.java | 4 +- .../FlowableUserTaskJsonConverter.java | 8 +- .../ExtendUserTaskActivityBehavior.java | 23 +++-- .../parser/handler/MultiInstanceHandler.java | 7 +- .../impl/WorkflowModelServiceImpl.java | 22 +++-- .../impl/WorkflowProcessServiceImpl.java | 64 +++++++++---- .../service/impl/WorkflowTaskServiceImpl.java | 96 +++++++++++++------ .../kicc/workflow/util/WorkflowUtil.java | 10 +- 21 files changed, 222 insertions(+), 121 deletions(-) diff --git a/kicc-common/kicc-common-security/src/main/java/com/cloud/kicc/common/security/util/AuthUtils.java b/kicc-common/kicc-common-security/src/main/java/com/cloud/kicc/common/security/util/AuthUtils.java index 0f75d441..64c58d24 100644 --- a/kicc-common/kicc-common-security/src/main/java/com/cloud/kicc/common/security/util/AuthUtils.java +++ b/kicc-common/kicc-common-security/src/main/java/com/cloud/kicc/common/security/util/AuthUtils.java @@ -6,6 +6,7 @@ import lombok.SneakyThrows; import lombok.experimental.UtilityClass; import lombok.extern.slf4j.Slf4j; import org.springframework.http.HttpHeaders; +import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import javax.servlet.http.HttpServletRequest; @@ -65,4 +66,8 @@ public class AuthUtils { return extractAndDecodeHeader(header); } + public static void main(String[] args) { + System.out.println(new BCryptPasswordEncoder().encode("123456")); + } + } diff --git a/kicc-common/kicc-common-security/src/main/java/com/cloud/kicc/common/security/util/SecurityUtils.java b/kicc-common/kicc-common-security/src/main/java/com/cloud/kicc/common/security/util/SecurityUtils.java index 209446b9..537d402d 100644 --- a/kicc-common/kicc-common-security/src/main/java/com/cloud/kicc/common/security/util/SecurityUtils.java +++ b/kicc-common/kicc-common-security/src/main/java/com/cloud/kicc/common/security/util/SecurityUtils.java @@ -174,8 +174,16 @@ public class SecurityUtils { return (T) user; } - public static void main(String[] args) { - System.out.println(new BCryptPasswordEncoder().encode("123456")); + public String getTenantIdLike() { + CasUser casUser = getCasUser(); + if (casUser == null) return null; + return StrUtil.format("%{}%", casUser.getTenantId()); + } + + public String getTenantId() { + CasUser casUser = getCasUser(); + if (casUser == null) return null; + return casUser.getTenantId(); } } diff --git a/kicc-platform/kicc-platform-api/kicc-workflow-api/src/main/java/com/cloud/kicc/workflow/api/constant/SqlConstants.java b/kicc-platform/kicc-platform-api/kicc-workflow-api/src/main/java/com/cloud/kicc/workflow/api/constant/SqlConstants.java index be8a5dad..c7cc92a2 100644 --- a/kicc-platform/kicc-platform-api/kicc-workflow-api/src/main/java/com/cloud/kicc/workflow/api/constant/SqlConstants.java +++ b/kicc-platform/kicc-platform-api/kicc-workflow-api/src/main/java/com/cloud/kicc/workflow/api/constant/SqlConstants.java @@ -12,10 +12,10 @@ public interface SqlConstants { String QUERY_ACT_HI_COMMENT= "select * from ACT_HI_COMMENT where TYPE_ like ? and TASK_ID_ = ? order by TIME_ desc"; - String QUERY_USER_BY_ID = "select csu.id, csu.user_name userName, csu.nick_name nickName, csu.password, u.dept_id deptId, u.status from sys_user u join cas_sso_user_view csu on u.cas_user_id = csu.id where csu.id = ?"; + String QUERY_USER_BY_ID = "select id, user_name userName, nick_name nickName, password, dept_id deptId, status from sso_enhanced_user_view where id = ? and tenant_id like ?"; - String QUERY_USER_BY_DEPT_ID = "select csu.id, csu.user_name userName, csu.nick_name nickName, csu.password, u.dept_id deptId, u.status from sys_user u join cas_sso_user_view csu on u.cas_user_id = csu.id where u.dept_id = ?"; + String QUERY_USER_BY_DEPT_ID = "select id, user_name userName, nick_name nickName, password, dept_id deptId, status from sso_enhanced_user_view where u.dept_id = ? and tenant_id like ?"; - String QUERY_USER_BY_ROLE_ID = "select distinct csu.id, csu.user_name userName, csu.nick_name nickName, csu.password, u.dept_id deptId, u.status from sys_user u join cas_sso_user_view csu on u.cas_user_id = csu.id join sys_user_role b on csu.id = b.user_id where b.role_id = ?"; + String QUERY_USER_BY_ROLE_ID = "select distinct id, user_name userName, nick_name nickName, password, dept_id deptId, status from sso_enhanced_user_view u join sys_user_role r on u.id = r.user_id where r.role_id = ? and u.tenant_id like ?"; } diff --git a/kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/cmd/RollBackUserTaskCmd.java b/kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/cmd/RollBackUserTaskCmd.java index fbb5284b..290866fa 100644 --- a/kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/cmd/RollBackUserTaskCmd.java +++ b/kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/cmd/RollBackUserTaskCmd.java @@ -50,7 +50,7 @@ public class RollBackUserTaskCmd implements Command, Serializable { @Override public String execute(CommandContext commandContext) { - if (targetActivityId == null || targetActivityId.length() == 0) { + if (targetActivityId == null || targetActivityId.isEmpty()) { throw new FlowableException("targetActivityId不能为空"); } TaskEntity task = CommandContextUtil.getTaskService().getTask(taskId); diff --git a/kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/controller/WorkflowFormController.java b/kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/controller/WorkflowFormController.java index 68ccd7d7..641fc65d 100644 --- a/kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/controller/WorkflowFormController.java +++ b/kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/controller/WorkflowFormController.java @@ -10,6 +10,7 @@ import com.cloud.kicc.workflow.api.entity.Workflow; import com.cloud.kicc.workflow.service.WorkflowTaskService; import com.google.common.collect.Lists; import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.bpmn.model.FlowElement; import org.flowable.bpmn.model.StartEvent; @@ -36,6 +37,7 @@ import java.util.Map; * @Author: wangxiang4 * @Date: 2022/1/4 */ +@Slf4j @RestController @RequestMapping(AppConstants.APP_WORKFLOW + "/form") @AllArgsConstructor @@ -88,7 +90,9 @@ public class WorkflowFormController { // 指定下一步处理人 if(StringUtils.isNotBlank(assignee)){ - Task task = taskService.createTaskQuery().processInstanceId(processInsId).active().singleResult(); + Task task = taskService.createTaskQuery() + .processInstanceId(processInsId) + .taskTenantIdLike(SecurityUtils.getTenantIdLike()).active().singleResult(); if(task != null){ taskService.setAssignee(task.getId(), assignee); } @@ -141,7 +145,9 @@ public class WorkflowFormController { // 指定下一步处理人 if(StringUtils.isNotBlank(assignee)){ - Task task = taskService.createTaskQuery().processInstanceId(processInsId).active().singleResult(); + Task task = taskService.createTaskQuery() + .processInstanceId(processInsId) + .taskTenantIdLike(SecurityUtils.getTenantIdLike()).active().singleResult(); if(task != null){ taskService.setAssignee(task.getId(), assignee); } @@ -180,7 +186,7 @@ public class WorkflowFormController { formPropertyMap.put("readable", true); list.add(formPropertyMap); } - }catch (Exception e){ e.printStackTrace(); } + }catch (Exception e){ log.error("An error occurred", e); } } }else{ List formPropertyList = formService.getStartFormData(processDefId).getFormProperties(); @@ -196,7 +202,7 @@ public class WorkflowFormController { formPropertyMap.put("readable", true); list.add(formPropertyMap); } - }catch (Exception e){ e.printStackTrace(); } + }catch (Exception e){ log.error("An error occurred", e); } } } return R.ok(list); diff --git a/kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/controller/WorkflowModelController.java b/kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/controller/WorkflowModelController.java index 649b5b38..79412c4b 100644 --- a/kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/controller/WorkflowModelController.java +++ b/kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/controller/WorkflowModelController.java @@ -39,10 +39,9 @@ import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import java.text.ParseException; import java.util.Arrays; -import java.util.Date; import java.util.List; +import java.util.Objects; import java.util.UUID; @@ -82,11 +81,13 @@ public class WorkflowModelController { IPage result = workflowModelService.page(page, getLambdaQueryWrapper(workflowModel)); // 存储流程实例 result.getRecords().forEach(item -> { - List modelKeyList = StrUtil.split(item.getModelKey(), new Character(',')); + List modelKeyList = StrUtil.split(item.getModelKey(), ','); ProcessDefinition processDefinition = workflowProcessService.getProcessDefinitionByKey(modelKeyList.get(0)); if(processDefinition != null){ String deploymentId = processDefinition.getDeploymentId(); - Deployment deployment = repositoryService.createDeploymentQuery().deploymentId(deploymentId).singleResult(); + Deployment deployment = repositoryService.createDeploymentQuery() + .deploymentId(deploymentId) + .deploymentTenantIdLike(com.cloud.kicc.common.security.util.SecurityUtils.getTenantIdLike()).singleResult(); item.setProcessDefinition(new ProcessDefinitionInfoVo() .setId(processDefinition.getId()) .setCategory(processDefinition.getCategory()) @@ -113,7 +114,7 @@ public class WorkflowModelController { /** 删除模型 */ @DeleteMapping("/remove/{ids}") public R remove(@PathVariable String[] ids) { - Arrays.asList(ids).forEach(id -> workflowModelService.remove(id)); + Arrays.asList(ids).forEach(workflowModelService::remove); return R.ok("删除成功"); } @@ -214,7 +215,7 @@ public class WorkflowModelController { /** 修改模型 */ private ModelRepresentation updateModel(Model model, MultiValueMap values, boolean forceNewVersion) { String name = values.getFirst("name"), - key = values.getFirst("key").replaceAll(" ", ""), + key = Objects.requireNonNull(values.getFirst("key")).replaceAll(" ", ""), description = values.getFirst("description"), isNewVersionString = values.getFirst("newVersion"), newVersionComment = null; diff --git a/kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/controller/WorkflowProcessController.java b/kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/controller/WorkflowProcessController.java index 711eea20..d1c0ad60 100644 --- a/kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/controller/WorkflowProcessController.java +++ b/kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/controller/WorkflowProcessController.java @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.cloud.kicc.common.core.api.R; import com.cloud.kicc.common.core.constant.AppConstants; +import com.cloud.kicc.common.security.util.SecurityUtils; import com.cloud.kicc.workflow.api.entity.Workflow; import com.cloud.kicc.workflow.api.enums.ExtendMessage; import com.cloud.kicc.workflow.api.extension.entity.WorkflowCopy; @@ -123,7 +124,7 @@ public class WorkflowProcessController { /** 删除部署的流程 */ @DeleteMapping("/removeDeployment/{deploymentIds}") public R removeDeployment(@PathVariable String[] deploymentIds) { - Arrays.asList(deploymentIds).forEach(id -> workflowProcessService.deleteDeployment(id)); + Arrays.asList(deploymentIds).forEach(workflowProcessService::deleteDeployment); return R.ok("删除成功"); } @@ -174,7 +175,9 @@ public class WorkflowProcessController { // 指定下一步处理人,不设置就使用默认处理人 if (StringUtils.isNotBlank(workflow.getAssignee())) { - Task task = taskService.createTaskQuery().processInstanceId(processInsId).active().singleResult(); + Task task = taskService.createTaskQuery() + .taskTenantIdLike(SecurityUtils.getTenantIdLike()) + .processInstanceId(processInsId).active().singleResult(); if (task != null) { taskService.setAssignee(task.getId(), workflow.getAssignee()); } @@ -189,7 +192,7 @@ public class WorkflowProcessController { historyService.deleteHistoricProcessInstance(id); workflowCopyService.remove(new LambdaUpdateWrapper().eq(WorkflowCopy::getProcessInsId, id)); }); - return R.ok("删除成功,流程实例ID=" + ids); + return R.ok("删除成功,流程实例ID=" + Arrays.toString(ids)); } } diff --git a/kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/controller/WorkflowTaskController.java b/kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/controller/WorkflowTaskController.java index 663bf6ac..406c2c7b 100644 --- a/kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/controller/WorkflowTaskController.java +++ b/kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/controller/WorkflowTaskController.java @@ -17,6 +17,7 @@ import com.cloud.kicc.workflow.extension.service.ActivityExtensionPropertyServic import com.cloud.kicc.workflow.service.WorkflowProcessService; import com.cloud.kicc.workflow.service.WorkflowTaskService; import lombok.AllArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.flowable.common.engine.impl.identity.Authentication; import org.flowable.engine.HistoryService; @@ -37,6 +38,7 @@ import java.util.Map; * @Author: wangxiang4 * @Date: 2022/1/4 */ +@Slf4j @RestController @AllArgsConstructor @RequestMapping(AppConstants.APP_WORKFLOW + "/task") @@ -151,7 +153,9 @@ public class WorkflowTaskController { workflowTaskService.auditTask(workflow); //指定下一步处理人 if(StringUtils.isNotBlank(workflow.getAssignee())){ - Task task = taskService.createTaskQuery().processInstanceId(workflow.getProcessInsId()).active().singleResult(); + Task task = taskService.createTaskQuery() + .taskTenantIdLike(SecurityUtils.getTenantIdLike()) + .processInstanceId(workflow.getProcessInsId()).active().singleResult(); if(task != null){ taskService.setAssignee(task.getId(), workflow.getAssignee()); } @@ -171,6 +175,7 @@ public class WorkflowTaskController { // 取得流程实例 ProcessInstance processInstance = runtimeService.createProcessInstanceQuery() + .processInstanceTenantIdLike(SecurityUtils.getTenantIdLike()) .processInstanceId(processInsId).singleResult(); if (processInstance == null) return R.error("流程已经结束"); @@ -187,7 +192,7 @@ public class WorkflowTaskController { historyService.deleteHistoricTaskInstance(currentTaskId); return R.ok("取回成功"); } catch (Exception e) { - e.printStackTrace(); + log.error("An error occurred", e); return R.ok("流程取回失败,未知错误."); } } diff --git a/kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/extension/controller/ActivityExtensionDataController.java b/kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/extension/controller/ActivityExtensionDataController.java index 077612ad..472876eb 100644 --- a/kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/extension/controller/ActivityExtensionDataController.java +++ b/kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/extension/controller/ActivityExtensionDataController.java @@ -60,7 +60,7 @@ public class ActivityExtensionDataController { @DeleteMapping("/remove/{ids}") public R remove(@PathVariable String[] ids) { - Arrays.asList(ids).forEach(id -> activityExtensionDataService.delete(id)); + Arrays.asList(ids).forEach(activityExtensionDataService::delete); return R.ok(); } diff --git a/kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/extension/controller/ActivityExtensionPropertyController.java b/kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/extension/controller/ActivityExtensionPropertyController.java index 9bf17955..c8dec2df 100644 --- a/kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/extension/controller/ActivityExtensionPropertyController.java +++ b/kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/extension/controller/ActivityExtensionPropertyController.java @@ -47,7 +47,7 @@ public class ActivityExtensionPropertyController { .remove(new LambdaUpdateWrapper() .eq(ActivityExtensionProperty::getProcessDefId,taskExtensionProperty.getProcessDefId()) .eq(ActivityExtensionProperty::getActivityDefId,taskExtensionProperty.getActivityDefId()))); - activityExtensionPropertyList.forEach(taskExtensionProperty -> activityExtensionPropertyService.save(taskExtensionProperty)); + activityExtensionPropertyList.forEach(activityExtensionPropertyService::save); return R.ok(); } diff --git a/kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/interceptor/ModelHandlerInterceptor.java b/kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/interceptor/ModelHandlerInterceptor.java index c86ae876..f3226fe9 100644 --- a/kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/interceptor/ModelHandlerInterceptor.java +++ b/kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/interceptor/ModelHandlerInterceptor.java @@ -1,7 +1,9 @@ package com.cloud.kicc.workflow.interceptor; import cn.hutool.core.util.StrUtil; +import com.cloud.kicc.common.data.entity.CasUser; import com.cloud.kicc.common.data.entity.KiccUser; +import io.micrometer.core.lang.NonNullApi; import lombok.SneakyThrows; import org.flowable.idm.api.User; import org.flowable.idm.engine.impl.persistence.entity.UserEntityImpl; @@ -21,20 +23,21 @@ import javax.servlet.http.HttpServletResponse; * @Author: wangxiang4 * @Date: 2022/1/6 */ +@NonNullApi public class ModelHandlerInterceptor implements HandlerInterceptor { @SneakyThrows public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) { - KiccUser kiccUser = com.cloud.kicc.common.security.util.SecurityUtils.getUser(); + CasUser casUser = com.cloud.kicc.common.security.util.SecurityUtils.getCasUser(); User currentUserObject = SecurityUtils.getCurrentUserObject(); if (currentUserObject == null || StrUtil.isBlank(currentUserObject.getId())) { User user = new UserEntityImpl(); - user.setId(kiccUser.getId()); - user.setFirstName(kiccUser.getUsername()); + user.setId(casUser.getId()); + user.setFirstName(casUser.getUsername()); user.setLastName(""); - user.setTenantId(kiccUser.getTenantId()); - user.setEmail(kiccUser.getEmail()); - user.setDisplayName(kiccUser.getNickName()); + user.setTenantId(casUser.getTenantId()); + user.setEmail(casUser.getEmail()); + user.setDisplayName(casUser.getNickName()); SecurityUtils.assumeUser(user); } return true; diff --git a/kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/override/UiTenantProvider.java b/kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/override/UiTenantProvider.java index b5b0275c..7c6f7fe9 100644 --- a/kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/override/UiTenantProvider.java +++ b/kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/override/UiTenantProvider.java @@ -1,9 +1,8 @@ package com.cloud.kicc.workflow.override; -import com.cloud.kicc.common.data.entity.KiccUser; +import com.cloud.kicc.common.data.entity.CasUser; +import lombok.extern.slf4j.Slf4j; import org.flowable.ui.common.tenant.TenantProvider; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.springframework.context.annotation.Primary; import org.springframework.stereotype.Component; @@ -15,23 +14,22 @@ import org.springframework.stereotype.Component; * @Author: wangxiang4 * @Since: 2023/9/27 */ +@Slf4j @Primary @Component public class UiTenantProvider implements TenantProvider { - private static final Logger LOGGER = LoggerFactory.getLogger(UiTenantProvider.class); - @Override public String getTenantId() { - KiccUser kiccUser = com.cloud.kicc.common.security.util.SecurityUtils.getUser(); - if(kiccUser != null) { + CasUser user = com.cloud.kicc.common.security.util.SecurityUtils.getCasUser(); + if(user != null) { // quotes can help solve whitespace issues, trimming here would not // help solve the problem at source which is in user database - LOGGER.debug("Using user tenantId: '{}'", kiccUser.getTenantId()); - return kiccUser.getTenantId(); + log.debug("Using user tenantId: '{}'", user.getTenantId()); + return user.getTenantId(); } - LOGGER.debug("No tenantId"); + log.debug("No tenantId"); return null; } diff --git a/kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/override/jsonconverter/FlowableSequenceFlowJsonConverter.java b/kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/override/jsonconverter/FlowableSequenceFlowJsonConverter.java index 50793e7c..81b5adb0 100644 --- a/kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/override/jsonconverter/FlowableSequenceFlowJsonConverter.java +++ b/kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/override/jsonconverter/FlowableSequenceFlowJsonConverter.java @@ -38,7 +38,7 @@ public class FlowableSequenceFlowJsonConverter extends SequenceFlowJsonConverter List list = SpringContextHolderUtil.getBean(ActivityExtensionDataService.class) .list(new LambdaQueryWrapper().eq(ActivityExtensionData::getProcessDefId, procDefId) .eq(ActivityExtensionData::getActivityDefId, taskDefId)); - if (list.size() > 0) { + if (!list.isEmpty()) { ActivityExtensionData activityExtensionData = list.get(0); List workflowConditionList = SpringContextHolderUtil.getBean(ActivityExtensionDataService.class) .findById(activityExtensionData.getId()).getWorkflowConditionList(); diff --git a/kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/override/jsonconverter/FlowableStartEventJsonConverter.java b/kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/override/jsonconverter/FlowableStartEventJsonConverter.java index d815b884..e3e88493 100644 --- a/kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/override/jsonconverter/FlowableStartEventJsonConverter.java +++ b/kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/override/jsonconverter/FlowableStartEventJsonConverter.java @@ -31,10 +31,10 @@ public class FlowableStartEventJsonConverter extends StartEventJsonConverter{ super.convertElementToJson (propertiesNode, baseElement); if (baseElement instanceof StartEvent) { //读取自定义扩展属性 - if (baseElement.getAttributes ().get ("formType") != null && baseElement.getAttributes ().get ("formType").size () > 0) { + if (baseElement.getAttributes ().get ("formType") != null && !baseElement.getAttributes().get("formType").isEmpty()) { propertiesNode.put ("formType", baseElement.getAttributes ().get ("formType").get (0).getValue ()); } - if (baseElement.getAttributes ().get ("formReadOnly") != null && baseElement.getAttributes ().get ("formReadOnly").size () > 0) { + if (baseElement.getAttributes ().get ("formReadOnly") != null && !baseElement.getAttributes().get("formReadOnly").isEmpty()) { propertiesNode.put ("formReadOnly", baseElement.getAttributes ().get ("formReadOnly").get (0).getValue ()); } } diff --git a/kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/override/jsonconverter/FlowableUserTaskJsonConverter.java b/kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/override/jsonconverter/FlowableUserTaskJsonConverter.java index bae80bac..90f82f2a 100644 --- a/kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/override/jsonconverter/FlowableUserTaskJsonConverter.java +++ b/kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/override/jsonconverter/FlowableUserTaskJsonConverter.java @@ -113,10 +113,10 @@ public class FlowableUserTaskJsonConverter extends UserTaskJsonConverter { super.convertElementToJson (propertiesNode, baseElement); if (baseElement instanceof UserTask) { //读取自定义扩展属性 - if (baseElement.getAttributes ().get ("formType") != null && baseElement.getAttributes ().get ("formType").size () > 0) { + if (baseElement.getAttributes ().get ("formType") != null && !baseElement.getAttributes().get("formType").isEmpty()) { propertiesNode.put ("formType", baseElement.getAttributes ().get ("formType").get (0).getValue ()); } - if (baseElement.getAttributes ().get ("formReadOnly") != null && baseElement.getAttributes ().get ("formReadOnly").size () > 0) { + if (baseElement.getAttributes ().get ("formReadOnly") != null && !baseElement.getAttributes().get("formReadOnly").isEmpty()) { propertiesNode.put ("formReadOnly", baseElement.getAttributes ().get ("formReadOnly").get (0).getValue ()); } @@ -141,7 +141,7 @@ public class FlowableUserTaskJsonConverter extends UserTaskJsonConverter { protected void addAssigneeProperties(List elements, ObjectNode propertiesNode) { - if (elements.size () == 0) + if (elements.isEmpty()) return; ArrayNode propertiesArrayNode = objectMapper.createArrayNode (); @@ -170,7 +170,7 @@ public class FlowableUserTaskJsonConverter extends UserTaskJsonConverter { } protected void addButtonProperties(List elements, ObjectNode propertiesNode) { - if (elements.size () == 0) + if (elements.isEmpty()) return; ArrayNode propertiesArrayNode = objectMapper.createArrayNode (); diff --git a/kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/parser/handler/ExtendUserTaskActivityBehavior.java b/kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/parser/handler/ExtendUserTaskActivityBehavior.java index fa907e0f..dbbaab4e 100644 --- a/kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/parser/handler/ExtendUserTaskActivityBehavior.java +++ b/kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/parser/handler/ExtendUserTaskActivityBehavior.java @@ -24,6 +24,7 @@ import org.flowable.task.service.TaskService; import org.flowable.task.service.impl.persistence.entity.TaskEntity; import org.springframework.jdbc.core.JdbcTemplate; +import java.sql.Types; import java.util.*; import java.util.stream.Collectors; @@ -43,7 +44,8 @@ public class ExtendUserTaskActivityBehavior extends UserTaskActivityBehavior { super(userTask); } - @Override /** 处理分配任务处理人 */ + /** 处理分配任务处理人 */ + @Override protected void handleAssignments(TaskService taskService, String assignee, String owner, @@ -55,7 +57,7 @@ public class ExtendUserTaskActivityBehavior extends UserTaskActivityBehavior { Process process = SpringContextHolderUtil.getBean(RepositoryService.class).getBpmnModel(task.getProcessDefinitionId()).getMainProcess(); FlowElement flowElement = process.getFlowElement(task.getTaskDefinitionKey()); - Boolean isMultiInstance = WorkflowUtil.isFlowElementMultiInstance(flowElement); + boolean isMultiInstance = WorkflowUtil.isFlowElementMultiInstance(flowElement); // 如果当前任务是多实例则移交给MultiInstanceHandler处理 if(isMultiInstance){ super.handleAssignments( @@ -71,10 +73,10 @@ public class ExtendUserTaskActivityBehavior extends UserTaskActivityBehavior { } List list = SpringContextHolderUtil.getBean(ActivityExtensionDataService.class) .list(new LambdaQueryWrapper() - .eq(ActivityExtensionData::getActivityDefId, task.getTaskDefinitionKey()) - .eq(ActivityExtensionData::getProcessDefId, process.getId())); + .eq(ActivityExtensionData::getActivityDefId, task.getTaskDefinitionKey()) + .eq(ActivityExtensionData::getProcessDefId, process.getId())); HashSet candidateUserIds = new HashSet(); - if (list.size () > 0) { + if (!list.isEmpty()) { ActivityExtensionData activityExtensionData = list.get(0); List workflowAssigneeList = SpringContextHolderUtil.getBean(ActivityExtensionDataService.class) .findById(activityExtensionData.getId()).getWorkflowAssigneeList(); @@ -87,7 +89,7 @@ public class ExtendUserTaskActivityBehavior extends UserTaskActivityBehavior { case "company": // 获取公司下的人员进行候选 if (StrUtil.isNotBlank(workflowAssignee.getValue())) { - List> userList = jdbcTemplate.queryForList(SqlConstants.QUERY_USER_BY_DEPT_ID, workflowAssignee.getValue()); + List> userList = jdbcTemplate.queryForList(SqlConstants.QUERY_USER_BY_DEPT_ID, workflowAssignee.getValue(), SecurityUtils.getTenantIdLike()); candidateUserIds.addAll(userList.stream().map(user -> MapUtil.getStr(user, "id")).collect(Collectors.toList())); } break; @@ -96,7 +98,7 @@ public class ExtendUserTaskActivityBehavior extends UserTaskActivityBehavior { if (StrUtil.isNotBlank(workflowAssignee.getValue())) { String[] roleIds = workflowAssignee.getValue().split (","); for(String roleId: roleIds){ - List> userList = jdbcTemplate.queryForList(SqlConstants.QUERY_USER_BY_ROLE_ID, roleId); + List> userList = jdbcTemplate.queryForList(SqlConstants.QUERY_USER_BY_ROLE_ID, roleId, SecurityUtils.getTenantIdLike()); candidateUserIds.addAll(userList.stream().map(user -> MapUtil.getStr(user, "id")).collect(Collectors.toList())); } } @@ -108,6 +110,7 @@ public class ExtendUserTaskActivityBehavior extends UserTaskActivityBehavior { case "previousExecutor": // 查询上一个任务的处理人进行候选 HistoricTaskInstance historicTaskInstance = SpringContextHolderUtil.getBean(HistoryService.class).createHistoricTaskInstanceQuery() + .taskTenantIdLike(SecurityUtils.getTenantIdLike()) .processInstanceId(task.getProcessInstanceId()).finished() .includeProcessVariables().orderByHistoricTaskInstanceEndTime().desc().list().get(0); candidateUserIds.add(historicTaskInstance.getAssignee()); @@ -118,7 +121,7 @@ public class ExtendUserTaskActivityBehavior extends UserTaskActivityBehavior { break; case "sql": // 查询sql中指定的id用户进行候选 - Map user = jdbcTemplate.queryForMap(workflowAssignee.getValue()); + Map user = jdbcTemplate.queryForMap(workflowAssignee.getValue(), new String[]{ SecurityUtils.getTenantIdLike() }, new int[]{ Types.VARCHAR }); candidateUserIds.add(MapUtil.getStr(user,"id")); break; case "custom": @@ -129,7 +132,7 @@ public class ExtendUserTaskActivityBehavior extends UserTaskActivityBehavior { } List candidateIds = new ArrayList(candidateUserIds); // 此处可以根据业务逻辑自定义 - if (candidateIds.size () == 0) { + if (candidateIds.isEmpty()) { super.handleAssignments( taskService, null, @@ -149,7 +152,7 @@ public class ExtendUserTaskActivityBehavior extends UserTaskActivityBehavior { task, expressionManager, execution); - } else if (candidateIds.size () > 1) { + } else { super.handleAssignments( taskService, null, diff --git a/kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/parser/handler/MultiInstanceHandler.java b/kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/parser/handler/MultiInstanceHandler.java index 5b453a95..beddaec7 100644 --- a/kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/parser/handler/MultiInstanceHandler.java +++ b/kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/parser/handler/MultiInstanceHandler.java @@ -44,7 +44,7 @@ public class MultiInstanceHandler { .eq(ActivityExtensionData::getActivityDefId, taskDefId) .eq(ActivityExtensionData::getProcessDefId, process.getId())); HashSet candidateUserIds = new HashSet(); - if (list.size () > 0) { + if (!list.isEmpty()) { ActivityExtensionData activityExtensionData = list.get(0); List workflowAssigneeList = SpringContextHolderUtil.getBean(ActivityExtensionDataService.class) .findById(activityExtensionData.getId()).getWorkflowAssigneeList(); @@ -57,7 +57,7 @@ public class MultiInstanceHandler { case "company": // 获取公司下的人员进行候选 if (StrUtil.isNotBlank(workflowAssignee.getValue())) { - List> userList = jdbcTemplate.queryForList(SqlConstants.QUERY_USER_BY_DEPT_ID, workflowAssignee.getValue()); + List> userList = jdbcTemplate.queryForList(SqlConstants.QUERY_USER_BY_DEPT_ID, workflowAssignee.getValue(), SecurityUtils.getTenantIdLike()); candidateUserIds.addAll(userList.stream().map(user -> MapUtil.getStr(user, "id")).collect(Collectors.toList())); } break; @@ -66,7 +66,7 @@ public class MultiInstanceHandler { if (StrUtil.isNotBlank(workflowAssignee.getValue())) { String[] roleIds = workflowAssignee.getValue().split (","); for(String roleId: roleIds){ - List> userList = jdbcTemplate.queryForList(SqlConstants.QUERY_USER_BY_ROLE_ID, roleId); + List> userList = jdbcTemplate.queryForList(SqlConstants.QUERY_USER_BY_ROLE_ID, roleId, SecurityUtils.getTenantIdLike()); candidateUserIds.addAll(userList.stream().map(user -> MapUtil.getStr(user, "id")).collect(Collectors.toList())); } } @@ -77,6 +77,7 @@ public class MultiInstanceHandler { case "previousExecutor": // 查询上一个任务的处理人进行候选 HistoricTaskInstance historicTaskInstance = SpringContextHolderUtil.getBean(HistoryService.class).createHistoricTaskInstanceQuery() + .taskTenantIdLike(SecurityUtils.getTenantIdLike()) .processInstanceId(execution.getProcessInstanceId()).finished() .includeProcessVariables().orderByHistoricTaskInstanceEndTime().desc().list().get(0); candidateUserIds.add(historicTaskInstance.getAssignee()); diff --git a/kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/service/impl/WorkflowModelServiceImpl.java b/kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/service/impl/WorkflowModelServiceImpl.java index 2d7bf3f3..96a855ab 100644 --- a/kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/service/impl/WorkflowModelServiceImpl.java +++ b/kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/service/impl/WorkflowModelServiceImpl.java @@ -3,6 +3,7 @@ package com.cloud.kicc.workflow.service.impl; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.cloud.kicc.common.security.util.SecurityUtils; import com.cloud.kicc.workflow.api.entity.WorkflowModel; import com.cloud.kicc.workflow.api.extension.entity.ActivityExtensionProperty; import com.cloud.kicc.workflow.extension.service.ActivityExtensionDataService; @@ -33,6 +34,7 @@ import javax.xml.stream.XMLInputFactory; import javax.xml.stream.XMLStreamReader; import java.io.ByteArrayInputStream; import java.io.InputStreamReader; +import java.nio.charset.StandardCharsets; import java.util.List; /** @@ -77,8 +79,8 @@ public class WorkflowModelServiceImpl extends ServiceImpl modelKeyList = StrUtil.split(model.getKey(), new Character(',')); - modelKeyList.forEach(modelKey -> this.deleteDeployment(modelKey)); + List modelKeyList = StrUtil.split(model.getKey(), ','); + modelKeyList.forEach(this::deleteDeployment); this.modelService.deleteModel(model.getId()); activityExtensionDataService.deleteByProcessDefId(model.getKey()); activityExtensionPropertyService.remove(new LambdaUpdateWrapper() @@ -103,7 +105,7 @@ public class WorkflowModelServiceImpl extends ServiceImpl list = repositoryService.createProcessDefinitionQuery() + .processDefinitionTenantIdLike(SecurityUtils.getTenantIdLike()) .deploymentId(deployment.getId()).list(); // 设置流程分类 @@ -125,30 +129,30 @@ public class WorkflowModelServiceImpl extends ServiceImpl list(Map params) { ProcessDefinitionQuery query = repositoryService.createProcessDefinitionQuery() + .processDefinitionTenantIdLike(SecurityUtils.getTenantIdLike()) .active().latestVersion().orderByProcessDefinitionKey().asc(); String name = MapUtil.getStr(params, "name"), @@ -103,7 +104,9 @@ public class WorkflowProcessServiceImpl implements WorkflowProcessService { List processDefinitionList = query.listPage((current - 1) * size, size); for (ProcessDefinition processDefinition : processDefinitionList) { if(this.validateProcessAuth(SecurityUtils.getUser(), processDefinition.getId())){ - Deployment deployment = repositoryService.createDeploymentQuery().deploymentId(processDefinition.getDeploymentId()).singleResult(); + Deployment deployment = repositoryService.createDeploymentQuery() + .deploymentTenantIdLike(SecurityUtils.getTenantIdLike()) + .deploymentId(processDefinition.getDeploymentId()).singleResult(); ProcessDefinitionInfoVo processDefinitionInfo =new ProcessDefinitionInfoVo(); processDefinitionInfo.setId(processDefinition.getId()); processDefinitionInfo.setCategory(processDefinition.getCategory()); @@ -129,10 +132,12 @@ public class WorkflowProcessServiceImpl implements WorkflowProcessService { @Override public IPage runList(Map params) { - ProcessInstanceQuery query = runtimeService.createProcessInstanceQuery().includeProcessVariables(); + ProcessInstanceQuery query = runtimeService.createProcessInstanceQuery() + .processInstanceTenantIdLike(SecurityUtils.getTenantIdLike()) + .includeProcessVariables(); String processInsId = MapUtil.getStr(params, "processInsId"), - processDefKey = MapUtil.getStr(params, "processDefKey"); + processDefKey = MapUtil.getStr(params, "processDefKey"); if (StrUtil.isNotBlank(processInsId)) { query.processInstanceId(processInsId); @@ -163,7 +168,9 @@ public class WorkflowProcessServiceImpl implements WorkflowProcessService { @Override public IPage historyList(Map params) { - HistoricProcessInstanceQuery query = historyService.createHistoricProcessInstanceQuery().includeProcessVariables().finished() + HistoricProcessInstanceQuery query = historyService.createHistoricProcessInstanceQuery() + .processInstanceTenantIdLike(SecurityUtils.getTenantIdLike()) + .includeProcessVariables().finished() .orderByProcessInstanceEndTime().desc(); String processInsId = MapUtil.getStr(params, "processInsId"), @@ -203,11 +210,13 @@ public class WorkflowProcessServiceImpl implements WorkflowProcessService { public InputStream readResource(String processInsId, String processDefId, String fileType) { if (StrUtil.isBlank(processDefId)) { ProcessInstance processInstance = runtimeService.createProcessInstanceQuery() + .processInstanceTenantIdLike(SecurityUtils.getTenantIdLike()) .processInstanceId(processInsId).singleResult(); processDefId = processInstance.getProcessDefinitionId(); } ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery() + .processDefinitionTenantIdLike(SecurityUtils.getTenantIdLike()) .processDefinitionId(processDefId).singleResult(); String resourceName = ""; @@ -217,8 +226,7 @@ public class WorkflowProcessServiceImpl implements WorkflowProcessService { resourceName = processDefinition.getResourceName(); } - InputStream resourceAsStream = repositoryService.getResourceAsStream(processDefinition.getDeploymentId(), resourceName); - return resourceAsStream; + return repositoryService.getResourceAsStream(processDefinition.getDeploymentId(), resourceName); } @Override @@ -242,9 +250,13 @@ public class WorkflowProcessServiceImpl implements WorkflowProcessService { @Override public void stopProcessInstance(String processInsId, ExtendMessage extendMessage, String comment) { - ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(processInsId).singleResult(); + ProcessInstance processInstance = runtimeService.createProcessInstanceQuery() + .processInstanceTenantIdLike(SecurityUtils.getTenantIdLike()) + .processInstanceId(processInsId).singleResult(); if (processInstance != null) { - Task task = taskService.createTaskQuery().processInstanceId(processInsId).list().get(0); + Task task = taskService.createTaskQuery() + .taskTenantIdLike(SecurityUtils.getTenantIdLike()) + .processInstanceId(processInsId).list().get(0); // 设置审批记录 ActivityCommentInfoVo activityCommentInfo = new ActivityCommentInfoVo(); @@ -264,7 +276,9 @@ public class WorkflowProcessServiceImpl implements WorkflowProcessService { String endId = endNodes.get(0).getId(); // 执行终止流程 - List executions = runtimeService.createExecutionQuery().parentId(processInsId).list(); + List executions = runtimeService.createExecutionQuery() + .executionTenantIdLike(SecurityUtils.getTenantIdLike()) + .parentId(processInsId).list(); List executionIds = new ArrayList<>(); executions.forEach(execution -> executionIds.add(execution.getId())); this.moveExecutionsToSingleActivityId(executionIds, endId); @@ -295,7 +309,9 @@ public class WorkflowProcessServiceImpl implements WorkflowProcessService { public ProcessInstanceInfoVo queryProcessState(String processInstanceId) { ProcessInstanceInfoVo processInstanceInfo = new ProcessInstanceInfoVo(); // 通过流程实例ID查询流程实例 - ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(processInstanceId).singleResult(); + ProcessInstance processInstance = runtimeService.createProcessInstanceQuery() + .processInstanceTenantIdLike(SecurityUtils.getTenantIdLike()) + .processInstanceId(processInstanceId).singleResult(); if (processInstance != null) { if (processInstance.isSuspended()) { //挂起实例 @@ -303,16 +319,21 @@ public class WorkflowProcessServiceImpl implements WorkflowProcessService { } else { //执行实例 processInstanceInfo.setExtendMessage(ExtendMessage.PROCESS_WAITING); - Task task = taskService.createTaskQuery().processInstanceId(processInstanceId).list().get(0); + Task task = taskService.createTaskQuery() + .taskTenantIdLike(SecurityUtils.getTenantIdLike()) + .processInstanceId(processInstanceId).list().get(0); processInstanceInfo.setTaskInfo(new TaskInfoVo(task)); processInstanceInfo.setTaskName(task.getName()); } return processInstanceInfo; } else { HistoricProcessInstance historicProcessInstance = - historyService.createHistoricProcessInstanceQuery().processInstanceId(processInstanceId).singleResult(); + historyService.createHistoricProcessInstanceQuery() + .processInstanceTenantIdLike(SecurityUtils.getTenantIdLike()) + .processInstanceId(processInstanceId).singleResult(); //查询历史流程完整历史活动 HistoricActivityInstance historicActivityInstance = historyService.createHistoricActivityInstanceQuery() + .activityTenantIdLike(SecurityUtils.getTenantIdLike()) .processInstanceId(processInstanceId).finished() .orderByHistoricActivityInstanceEndTime().desc().list().stream() .filter(activity -> @@ -356,37 +377,42 @@ public class WorkflowProcessServiceImpl implements WorkflowProcessService { @Override public ProcessDefinition getProcessDefinition(String processDefId) { ProcessDefinitionQuery processDefinitionQuery = repositoryService.createProcessDefinitionQuery() + .processDefinitionTenantIdLike(SecurityUtils.getTenantIdLike()) .latestVersion().orderByProcessDefinitionKey().asc(); if (StrUtil.isNotBlank(processDefId)) { processDefinitionQuery.processDefinitionId(processDefId); } - ProcessDefinition processDefinition = processDefinitionQuery.singleResult(); - return processDefinition; + return processDefinitionQuery.singleResult(); } public ProcessDefinition getProcessDefinitionByKey(String processDefKey) { ProcessDefinitionQuery processDefinitionQuery = repositoryService.createProcessDefinitionQuery() + .processDefinitionTenantIdLike(SecurityUtils.getTenantIdLike()) .latestVersion().orderByProcessDefinitionKey().asc(); if (StrUtil.isNotBlank(processDefKey)) { processDefinitionQuery.processDefinitionKey(processDefKey); } - ProcessDefinition processDefinition = processDefinitionQuery.singleResult(); - return processDefinition; + return processDefinitionQuery.singleResult(); } @Override public ProcessInstance getProcessInstance(String processInsId) { - return runtimeService.createProcessInstanceQuery().processInstanceId(processInsId).singleResult(); + return runtimeService.createProcessInstanceQuery() + .processInstanceTenantIdLike(SecurityUtils.getTenantIdLike()) + .processInstanceId(processInsId).singleResult(); } @Override public HistoricProcessInstance getFinishedProcessInstance(String processInsId) { - return historyService.createHistoricProcessInstanceQuery().processInstanceId(processInsId).singleResult(); + return historyService.createHistoricProcessInstanceQuery() + .processInstanceTenantIdLike(SecurityUtils.getTenantIdLike()) + .processInstanceId(processInsId).singleResult(); } @Override public IPage selfProcessInstanceList(Map params) { HistoricProcessInstanceQuery query = historyService.createHistoricProcessInstanceQuery() + .processInstanceTenantIdLike(SecurityUtils.getTenantIdLike()) .startedBy(SecurityUtils.getUser().getId()).includeProcessVariables().orderByProcessInstanceStartTime().desc(); String title = MapUtil.getStr(params, " title"); @@ -452,7 +478,7 @@ public class WorkflowProcessServiceImpl implements WorkflowProcessService { // 启动流程实例 String processInsId = runtimeService - .startProcessInstanceByKey(processDefKey, String.join(":",businessTable,businessId), vars) + .startProcessInstanceByKeyAndTenantId(processDefKey, String.join(":",businessTable,businessId), vars, SecurityUtils.getTenantId()) .getProcessInstanceId(); // 更新业务表流程实例ID,确保业务表字段process_ins_id存在 diff --git a/kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/service/impl/WorkflowTaskServiceImpl.java b/kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/service/impl/WorkflowTaskServiceImpl.java index 32e4f505..7a770dbd 100644 --- a/kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/service/impl/WorkflowTaskServiceImpl.java +++ b/kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/service/impl/WorkflowTaskServiceImpl.java @@ -2,6 +2,7 @@ package com.cloud.kicc.workflow.service.impl; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.map.MapUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @@ -41,6 +42,7 @@ import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Service; import java.sql.ResultSet; +import java.sql.Types; import java.util.*; import java.util.stream.Collectors; @@ -80,6 +82,7 @@ public class WorkflowTaskServiceImpl implements WorkflowTaskService { public IPage list(Map params) { // =============== 已经签收或者等待签收的任务 =============== TaskQuery query = taskService.createTaskQuery() + .taskTenantIdLike(SecurityUtils.getTenantIdLike()) .taskCandidateOrAssigned(SecurityUtils.getUser().getId()).active() .includeProcessVariables().orderByTaskCreateTime().desc(); @@ -112,6 +115,7 @@ public class WorkflowTaskServiceImpl implements WorkflowTaskService { for (Task task : taskList) { ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery() + .processDefinitionTenantIdLike(SecurityUtils.getTenantIdLike()) .processDefinitionId(task.getProcessDefinitionId()).singleResult(); ProcessInstanceInfoVo processInstanceInfo = new ProcessInstanceInfoVo(); TaskInfoVo taskInfo = new TaskInfoVo(task); @@ -130,6 +134,7 @@ public class WorkflowTaskServiceImpl implements WorkflowTaskService { @Override public IPage historyList(Map params) { HistoricTaskInstanceQuery query = historyService.createHistoricTaskInstanceQuery() + .taskTenantIdLike(SecurityUtils.getTenantIdLike()) .taskAssignee(SecurityUtils.getUser().getId()).finished() .includeProcessVariables().orderByHistoricTaskInstanceEndTime().desc(); @@ -162,18 +167,21 @@ public class WorkflowTaskServiceImpl implements WorkflowTaskService { for (HistoricTaskInstance historicTask : historicTaskList) { ProcessDefinition processDefinition = repositoryService.createProcessDefinitionQuery() + .processDefinitionTenantIdLike(SecurityUtils.getTenantIdLike()) .processDefinitionId(historicTask.getProcessDefinitionId()).singleResult(); HistoryTaskInfoVo HistoryTaskInfo = new HistoryTaskInfoVo(historicTask); HistoryTaskInfo.setProcessDefName(processDefinition.getName()); HistoryTaskInfo.setRollBack(this.rollBackTask(historicTask)); - List taskList = taskService.createTaskQuery().processInstanceId(historicTask.getProcessInstanceId()).list(); - if (taskList.size() > 0) { + List taskList = taskService.createTaskQuery() + .taskTenantIdLike(SecurityUtils.getTenantIdLike()) + .processInstanceId(historicTask.getProcessInstanceId()).list(); + if (!taskList.isEmpty()) { TaskInfoVo taskInfo = new TaskInfoVo(taskList.get(0)); HistoryTaskInfo.setTaskInfo(taskInfo); } // 获取意见评论内容 List activityCommentInfoList = this.getTaskComments(historicTask.getId()); - if (activityCommentInfoList.size() > 0) { + if (!activityCommentInfoList.isEmpty()) { ActivityCommentInfoVo activityCommentInfo = activityCommentInfoList.get(activityCommentInfoList.size()-1); HistoryTaskInfo.setComment(activityCommentInfo.getMessage()); HistoryTaskInfo.setMesLevel(activityCommentInfo.getMesLevel()); @@ -188,15 +196,15 @@ public class WorkflowTaskServiceImpl implements WorkflowTaskService { @Override public List historyFlowChangeList(String processInsId) { List historicActivityInstances = historyService.createHistoricActivityInstanceQuery() + .activityTenantIdLike(SecurityUtils.getTenantIdLike()) .processInstanceId(processInsId).orderByHistoricActivityInstanceStartTime().asc() .orderByHistoricActivityInstanceEndTime().asc().list(); List historicFlowChangeList = new ArrayList(); - for (int i = 0; i < historicActivityInstances.size(); i++) { - HistoricActivityInstance historicActivityInstance = historicActivityInstances.get(i); + for (HistoricActivityInstance historicActivityInstance : historicActivityInstances) { // 只显示开始节点和结束节点,并且执行人不为空的任务 if (StrUtil.isNotBlank(historicActivityInstance.getAssignee()) - && historyService.createHistoricTaskInstanceQuery().taskId(historicActivityInstance.getTaskId()).count() != 0 + && historyService.createHistoricTaskInstanceQuery().taskTenantIdLike(SecurityUtils.getTenantIdLike()).taskId(historicActivityInstance.getTaskId()).count() != 0 || BpmnXMLConstants.ELEMENT_TASK_USER.equals(historicActivityInstance.getActivityType()) && historicActivityInstance.getEndTime() == null || BpmnXMLConstants.ELEMENT_EVENT_START.equals(historicActivityInstance.getActivityType()) @@ -259,7 +267,9 @@ public class WorkflowTaskServiceImpl implements WorkflowTaskService { processVars.put(WorkflowConstant.TITLE, workFlow.getTitle()); } - Task task = taskService.createTaskQuery().taskId(workFlow.getTaskId()).singleResult(); + Task task = taskService.createTaskQuery() + .taskTenantIdLike(SecurityUtils.getTenantIdLike()) + .taskId(workFlow.getTaskId()).singleResult(); // owner不为空说明可能存在委托任务 if (StrUtil.isNotBlank(task.getOwner())){ DelegationState delegationState = task.getDelegationState(); @@ -292,15 +302,20 @@ public class WorkflowTaskServiceImpl implements WorkflowTaskService { public Map getPaintDiagramXml(String processInsId) { Map result = MapUtil.newHashMap(); String processDefId; - ProcessInstance processInstance = runtimeService.createProcessInstanceQuery().processInstanceId(processInsId).singleResult(); + ProcessInstance processInstance = runtimeService.createProcessInstanceQuery() + .processInstanceTenantIdLike(SecurityUtils.getTenantIdLike()) + .processInstanceId(processInsId).singleResult(); // 获取流程定义ID if(processInstance == null) { - processDefId = historyService.createHistoricProcessInstanceQuery().processInstanceId(processInsId).singleResult().getProcessDefinitionId(); + processDefId = historyService.createHistoricProcessInstanceQuery() + .processInstanceTenantIdLike(SecurityUtils.getTenantIdLike()) + .processInstanceId(processInsId).singleResult().getProcessDefinitionId(); } else { processDefId = processInstance.getProcessDefinitionId(); } BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefId); List historicActivityInstanceList = historyService.createHistoricActivityInstanceQuery() + .activityTenantIdLike(SecurityUtils.getTenantIdLike()) .processInstanceId(processInsId).finished() .orderByHistoricActivityInstanceEndTime().asc().list(); @@ -312,14 +327,16 @@ public class WorkflowTaskServiceImpl implements WorkflowTaskService { if (activityType.equals(BpmnXMLConstants.ELEMENT_SEQUENCE_FLOW) || activityType.equals(BpmnXMLConstants.ELEMENT_GATEWAY_EXCLUSIVE)) { flows.add(historicActivityInstance.getActivityId()); } else if (StrUtil.isNotBlank(historicActivityInstance.getAssignee()) - && historyService.createHistoricTaskInstanceQuery().taskId(historicActivityInstance.getTaskId()).count() != 0 + && historyService.createHistoricTaskInstanceQuery().taskTenantIdLike(SecurityUtils.getTenantIdLike()).taskId(historicActivityInstance.getTaskId()).count() != 0 || BpmnXMLConstants.ELEMENT_TASK_USER.equals(historicActivityInstance.getActivityType()) && historicActivityInstance.getEndTime() == null || BpmnXMLConstants.ELEMENT_EVENT_START.equals(historicActivityInstance.getActivityType()) || BpmnXMLConstants.ELEMENT_EVENT_END.equals(historicActivityInstance.getActivityType())) { activityIds.add(historicActivityInstance.getActivityId()); } } - List tasks = taskService.createTaskQuery().processInstanceId(processInsId).list(); + List tasks = taskService.createTaskQuery() + .taskTenantIdLike(SecurityUtils.getTenantIdLike()) + .processInstanceId(processInsId).list(); for (Task task : tasks) { activityIds.add(task.getTaskDefinitionKey()); } @@ -337,13 +354,16 @@ public class WorkflowTaskServiceImpl implements WorkflowTaskService { @Override public void rollBackTask(String rollBackTaskDefKey, String currentTaskId, ActivityCommentInfoVo activityCommentInfo) { - Task task = taskService.createTaskQuery().taskId(currentTaskId).singleResult(); + Task task = taskService.createTaskQuery() + .taskTenantIdLike(SecurityUtils.getTenantIdLike()) + .taskId(currentTaskId).singleResult(); if(StrUtil.isBlank(task.getAssignee())){ //代理人为空自己签收任务 taskService.claim(currentTaskId, SecurityUtils.getUser().getId()); } // 退回发起者处理,退回到发起者,默认设置任务执行人为发起者 ActivityInstance targetRealActivityInstance = runtimeService.createActivityInstanceQuery() + .activityTenantIdLike(SecurityUtils.getTenantIdLike()) .processInstanceId(task.getProcessInstanceId()).activityId(rollBackTaskDefKey).list().get(0); if (targetRealActivityInstance.getActivityType().equals(BpmnXMLConstants.ELEMENT_EVENT_START)) { workflowProcessServices.stopProcessInstance(task.getProcessInstanceId(), ExtendMessage.PROCESS_REJECT, activityCommentInfo.getMessage()); @@ -355,7 +375,9 @@ public class WorkflowTaskServiceImpl implements WorkflowTaskService { @Override public List rollBackTaskList(String taskId) { - Task task = taskService.createTaskQuery().taskId(taskId).singleResult(); + Task task = taskService.createTaskQuery() + .taskTenantIdLike(SecurityUtils.getTenantIdLike()) + .taskId(taskId).singleResult(); String processInstanceId = task.getProcessInstanceId(); String currentActivityId = task.getTaskDefinitionKey(); String processDefinitionId = task.getProcessDefinitionId(); @@ -364,14 +386,15 @@ public class WorkflowTaskServiceImpl implements WorkflowTaskService { //获取已经完成的活动节点 List activityInstanceList = runtimeService.createActivityInstanceQuery() + .activityTenantIdLike(SecurityUtils.getTenantIdLike()) .processInstanceId(processInstanceId).finished().orderByActivityInstanceStartTime().asc().list(); //获取已经完成节点的活动ID List activityIds = activityInstanceList.stream().filter(activity -> activity.getActivityType() .equals(BpmnXMLConstants.ELEMENT_TASK_USER) || activity.getActivityType() .equals(BpmnXMLConstants.ELEMENT_EVENT_START)) - .filter(activity ->!activity.getActivityId().equals(currentActivityId)) - .map(ActivityInstance::getActivityId).distinct().collect(Collectors.toList()); + .map(ActivityInstance::getActivityId) + .filter(activityId ->!activityId.equals(currentActivityId)).distinct().collect(Collectors.toList()); List result = CollectionUtil.newArrayList(); for (String activityId : activityIds) { @@ -394,16 +417,21 @@ public class WorkflowTaskServiceImpl implements WorkflowTaskService { Map result = new HashMap (); try { String processDefId; - ProcessInstance pi = runtimeService.createProcessInstanceQuery().processInstanceId(processInsId).singleResult(); + ProcessInstance pi = runtimeService.createProcessInstanceQuery() + .processInstanceTenantIdLike(SecurityUtils.getTenantIdLike()) + .processInstanceId(processInsId).singleResult(); //流程走完的不显示图 if (pi == null) { - processDefId = historyService.createHistoricProcessInstanceQuery().processInstanceId(processInsId).singleResult().getProcessDefinitionId(); + processDefId = historyService.createHistoricProcessInstanceQuery() + .processInstanceTenantIdLike(SecurityUtils.getTenantIdLike()) + .processInstanceId(processInsId).singleResult().getProcessDefinitionId(); } else { processDefId = pi.getProcessDefinitionId(); } BpmnModel bpmnModel = repositoryService.getBpmnModel(processDefId); List historyProcess = historyService // 历史相关Service .createHistoricActivityInstanceQuery() // 创建历史活动实例查询 + .activityTenantIdLike(SecurityUtils.getTenantIdLike()) .processInstanceId(processInsId) // 执行流程实例id .finished().orderByHistoricActivityInstanceEndTime().asc() .list(); @@ -411,7 +439,7 @@ public class WorkflowTaskServiceImpl implements WorkflowTaskService { Set runActivityIds = new LinkedHashSet(); for (HistoricActivityInstance hi : historyProcess) { if (StrUtil.isNotBlank(hi.getAssignee()) - && historyService.createHistoricTaskInstanceQuery().taskId(hi.getTaskId()).count() != 0 + && historyService.createHistoricTaskInstanceQuery().taskTenantIdLike(SecurityUtils.getTenantIdLike()).taskId(hi.getTaskId()).count() != 0 || BpmnXMLConstants.ELEMENT_TASK_USER.equals(hi.getActivityType()) && hi.getEndTime() == null || BpmnXMLConstants.ELEMENT_EVENT_START.equals(hi.getActivityType()) || BpmnXMLConstants.ELEMENT_EVENT_END.equals(hi.getActivityType()) @@ -420,7 +448,9 @@ public class WorkflowTaskServiceImpl implements WorkflowTaskService { activityIds.add(hi.getActivityId()); } } - List taskList = taskService.createTaskQuery().processInstanceId(processInsId).list(); + List taskList = taskService.createTaskQuery() + .taskTenantIdLike(SecurityUtils.getTenantIdLike()) + .processInstanceId(processInsId).list(); for (Task task : taskList) { runActivityIds.add(task.getTaskDefinitionKey()); } @@ -430,7 +460,7 @@ public class WorkflowTaskServiceImpl implements WorkflowTaskService { result.put("runActivityIds", runActivityIds); return result; } catch(Exception e) { - e.printStackTrace(); + log.error("An error occurred", e); } return null; } @@ -438,15 +468,19 @@ public class WorkflowTaskServiceImpl implements WorkflowTaskService { /** 是否可以回滚任务 */ private boolean rollBackTask(HistoricTaskInstance historicTaskInstance) { ProcessInstance processInstance = runtimeService.createProcessInstanceQuery() + .processInstanceTenantIdLike(SecurityUtils.getTenantIdLike()) .processInstanceId(historicTaskInstance.getProcessInstanceId()).singleResult(); if (processInstance != null) { if (!processInstance.isSuspended()) { - Task currentTask = taskService.createTaskQuery().processInstanceId(historicTaskInstance.getProcessInstanceId()).list().get(0); + Task currentTask = taskService.createTaskQuery() + .taskTenantIdLike(SecurityUtils.getTenantIdLike()) + .processInstanceId(historicTaskInstance.getProcessInstanceId()).list().get(0); HistoricTaskInstance lastHisTask = historyService.createHistoricTaskInstanceQuery() + .taskTenantIdLike(SecurityUtils.getTenantIdLike()) .processInstanceId(historicTaskInstance.getProcessInstanceId()).finished().includeProcessVariables().orderByHistoricTaskInstanceEndTime().desc().list().get(0); // 用户已签收 if (currentTask.getClaimTime() != null) return false; - if (historicTaskInstance.getId().equals(lastHisTask.getId())) return true; + return historicTaskInstance.getId().equals(lastHisTask.getId()); } } return false; @@ -454,7 +488,10 @@ public class WorkflowTaskServiceImpl implements WorkflowTaskService { /** 获取任务意见评论内容 */ private List getTaskComments(String taskId) { - return jdbcTemplate.query(SqlConstants.QUERY_ACT_HI_COMMENT, new String[]{ WorkflowConstant.COMMENT_TYPE_PREFIX + "%", taskId } ,(ResultSet rs, int rowNum) -> { + return jdbcTemplate.query(SqlConstants.QUERY_ACT_HI_COMMENT, + new String[]{ WorkflowConstant.COMMENT_TYPE_PREFIX + "%", taskId }, + new int[]{ Types.VARCHAR, Types.VARCHAR }, + (ResultSet rs, int rowNum) -> { ActivityCommentInfoVo activityCommentInfo = new ActivityCommentInfoVo(); activityCommentInfo.setExtendMessage(rs.getString("TYPE_")); activityCommentInfo.setCombinationMessage(new String(rs.getBytes("FULL_MSG_"))); @@ -470,12 +507,13 @@ public class WorkflowTaskServiceImpl implements WorkflowTaskService { // 获取开始事件流程发起人名称 if (BpmnXMLConstants.ELEMENT_EVENT_START.equals(historicActivityInstance.getActivityType())) { List historicProcessInstanceList = historyService.createHistoricProcessInstanceQuery() + .processInstanceTenantIdLike(SecurityUtils.getTenantIdLike()) .processInstanceId(historicActivityInstance.getProcessInstanceId()) .orderByProcessInstanceStartTime().asc().list(); - if (historicProcessInstanceList.size() > 0) { + if (!historicProcessInstanceList.isEmpty()) { if (StrUtil.isNotBlank(historicProcessInstanceList.get(0).getStartUserId())) { - Map user = jdbcTemplate.queryForMap(SqlConstants.QUERY_USER_BY_ID, historicProcessInstanceList.get(0).getStartUserId()); - if (user != null) { + Map user = jdbcTemplate.queryForMap(SqlConstants.QUERY_USER_BY_ID, historicProcessInstanceList.get(0).getStartUserId(), SecurityUtils.getTenantIdLike()); + if (ObjectUtil.isNotEmpty(user)) { workflow.setAssignee(historicActivityInstance.getAssignee()); workflow.setAssigneeName(MapUtil.getStr(user, "userName")); } @@ -500,8 +538,8 @@ public class WorkflowTaskServiceImpl implements WorkflowTaskService { // 获取任务执行人名称 if (StrUtil.isNotEmpty(historicActivityInstance.getAssignee())) { - Map user = jdbcTemplate.queryForMap(SqlConstants.QUERY_USER_BY_ID,historicActivityInstance.getAssignee()); - if (user != null) { + Map user = jdbcTemplate.queryForMap(SqlConstants.QUERY_USER_BY_ID, historicActivityInstance.getAssignee(), SecurityUtils.getTenantIdLike()); + if (ObjectUtil.isNotEmpty(user)) { workflow.setAssignee(historicActivityInstance.getAssignee()); workflow.setAssigneeName(MapUtil.getStr(user, "userName")); } @@ -510,7 +548,7 @@ public class WorkflowTaskServiceImpl implements WorkflowTaskService { // 获取意见评论内容 if (StrUtil.isNotBlank(historicActivityInstance.getTaskId())) { List activityCommentInfoList = this.getTaskComments(historicActivityInstance.getTaskId()); - if (activityCommentInfoList.size() > 0) { + if (!activityCommentInfoList.isEmpty()) { ActivityCommentInfoVo activityCommentInfo = activityCommentInfoList.get(activityCommentInfoList.size()-1); workflow.setActivityCommentInfo((activityCommentInfo)); } diff --git a/kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/util/WorkflowUtil.java b/kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/util/WorkflowUtil.java index 9b585715..c91ffc36 100644 --- a/kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/util/WorkflowUtil.java +++ b/kicc-platform/kicc-platform-biz/kicc-workflow-biz/src/main/java/com/cloud/kicc/workflow/util/WorkflowUtil.java @@ -37,7 +37,7 @@ public class WorkflowUtil { return false; } // 没有流出的seq流:可能是结束。流程或嵌入的子流程 - if (sourceElement.getOutgoingFlows().size() == 0) { + if (sourceElement.getOutgoingFlows().isEmpty()) { visitedElements.add(sourceElement.getId()); FlowElementsContainer parentElement = process.findParent(sourceElement); if (parentElement instanceof SubProcess) { @@ -61,7 +61,7 @@ public class WorkflowUtil { return true; } List sequenceFlows = sourceElement.getOutgoingFlows(); - if (sequenceFlows != null && sequenceFlows.size() > 0) { + if (sequenceFlows != null && !sequenceFlows.isEmpty()) { for (SequenceFlow sequenceFlow : sequenceFlows) { String targetRef = sequenceFlow.getTargetRef(); FlowNode sequenceFlowTarget = (FlowNode) process.getFlowElement(targetRef, true); @@ -77,7 +77,7 @@ public class WorkflowUtil { } /** 当前元素是否是事件子流程 */ - protected boolean isInEventSubprocess(FlowNode flowNode) { + private boolean isInEventSubprocess(FlowNode flowNode) { FlowElementsContainer flowElementsContainer = flowNode.getParentContainer(); while (flowElementsContainer != null) { if (flowElementsContainer instanceof EventSubProcess) { @@ -207,7 +207,7 @@ public class WorkflowUtil { //收集节点ID elements.add(specialGatewayBegin.getId()); List sequenceFlows = ((FlowNode) specialGatewayBegin).getOutgoingFlows(); - if (sequenceFlows != null && sequenceFlows.size() > 0) { + if (sequenceFlows != null && !sequenceFlows.isEmpty()) { for (SequenceFlow sequenceFlow : sequenceFlows) { FlowElement targetFlowElement = sequenceFlow.getTargetFlowElement(); String targetFlowElementId = targetFlowElement.getId(); @@ -295,7 +295,7 @@ public class WorkflowUtil { } taskParentExecution = taskParentExecution.getParent(); } - if (realParentExecutionId == null || realParentExecutionId.length() == 0) { + if (realParentExecutionId == null || realParentExecutionId.isEmpty()) { throw new FlowableException("无法找到带有executionId的父执行" + execution.getId()); } return realParentExecutionId;