From e7630e0da6db53f2f6ea52805c36827145f88a2f Mon Sep 17 00:00:00 2001 From: Ray <343509740@qq.com> Date: Wed, 27 Dec 2023 14:22:42 +0800 Subject: [PATCH 1/2] =?UTF-8?q?update-=E5=AE=8C=E5=96=84=E5=AF=B9=E6=A8=A1?= =?UTF-8?q?=E5=9E=8Bkey=E6=A0=A1=E9=AA=8C=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../common/constant/FlowConstant.java | 4 +++ .../dromara/workflow/domain/bo/ModelBo.java | 3 +++ .../service/impl/ActModelServiceImpl.java | 27 ++++++++++++++----- 3 files changed, 28 insertions(+), 6 deletions(-) diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/constant/FlowConstant.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/constant/FlowConstant.java index 6b5233796..ed5ef4ece 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/constant/FlowConstant.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/constant/FlowConstant.java @@ -79,4 +79,8 @@ public interface FlowConstant { */ String FLOWABLE_SKIP_EXPRESSION_ENABLED = "_FLOWABLE_SKIP_EXPRESSION_ENABLED"; + /** + * 模型标识key命名规范正则表达式 + */ + String MODE_KEY_PATTERN = "^[a-zA-Z][a-zA-Z0-9_]{0,254}$"; } diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/ModelBo.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/ModelBo.java index 40204a561..733dba3ef 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/ModelBo.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/ModelBo.java @@ -1,10 +1,12 @@ package org.dromara.workflow.domain.bo; import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.Pattern; import lombok.Data; import lombok.EqualsAndHashCode; import org.dromara.common.core.validate.AddGroup; import org.dromara.workflow.common.PageEntity; +import org.dromara.workflow.common.constant.FlowConstant; import java.io.Serial; import java.io.Serializable; @@ -31,6 +33,7 @@ public class ModelBo extends PageEntity implements Serializable { * 模型标识key */ @NotBlank(message = "模型标识key不能为空", groups = {AddGroup.class}) + @Pattern(regexp = FlowConstant.MODE_KEY_PATTERN, message = "模型标识key只能字符或者下划线开头", groups = {AddGroup.class}) private String key; /** diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActModelServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActModelServiceImpl.java index e25414ef9..0a251fc90 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActModelServiceImpl.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActModelServiceImpl.java @@ -1,6 +1,7 @@ package org.dromara.workflow.service.impl; import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.lang.Validator; import cn.hutool.core.util.ArrayUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; @@ -24,6 +25,7 @@ import org.dromara.system.domain.SysRole; import org.dromara.system.domain.SysUser; import org.dromara.system.mapper.SysRoleMapper; import org.dromara.system.mapper.SysUserMapper; +import org.dromara.workflow.common.constant.FlowConstant; import org.dromara.workflow.domain.bo.ModelBo; import org.dromara.workflow.domain.vo.GroupRepresentation; import org.dromara.workflow.domain.vo.ResultListDataRepresentation; @@ -89,7 +91,7 @@ public class ActModelServiceImpl implements IActModelService { query.modelCategory(modelBo.getCategoryCode()); } query.orderByLastUpdateTime().desc(); - //创建时间降序排列 + // 创建时间降序排列 query.orderByCreateTime().desc(); // 分页查询 List modelList = query.listPage(modelBo.getPageNum(), modelBo.getPageSize()); @@ -226,14 +228,27 @@ public class ActModelServiceImpl implements IActModelService { model.setVersion(model.getVersion() + 1); // 获取唯一标识key String key = values.getFirst("key"); + // 校验key命名规范 + if (!Validator.isMatchRegex(FlowConstant.MODE_KEY_PATTERN, key)) { + throw new ServiceException("模型标识key只能字符或者下划线开头!"); + } List list = repositoryService.createModelQuery().modelKey(key).modelTenantId(TenantHelper.getTenantId()).list(); list.stream().filter(e -> !e.getId().equals(model.getId())).findFirst().ifPresent(e -> { - throw new ServiceException("模型key已存在!"); + throw new ServiceException("模型标识key已存在!"); }); model.setKey(key); repositoryService.saveModel(model); - //解决设计器选择设置流程发起人设置变量有问题 + // 解决设计器选择设置流程发起人设置变量有问题 JsonNode jsonNode = objectMapper.readTree(values.getFirst("json_xml")); + // 校验流程标识 + String processId = jsonNode.get("properties").get("process_id").textValue(); + if (StringUtils.isBlank(processId)) { + throw new ServiceException("流程标识不能为空!"); + } + if (!Validator.isMatchRegex(FlowConstant.MODE_KEY_PATTERN, processId)) { + throw new ServiceException("流程标识只能字符或者下划线开头!"); + } + byte[] xmlBytes = WorkflowUtils.bpmnJsonToXmlBytes(Objects.requireNonNull(JsonUtils.toJsonString(jsonNode)).getBytes(StandardCharsets.UTF_8)); if (ArrayUtil.isEmpty(xmlBytes)) { throw new ServiceException("模型不能为空!"); @@ -256,7 +271,7 @@ public class ActModelServiceImpl implements IActModelService { @Transactional(rollbackFor = Exception.class) public boolean modelDeploy(String id) { try { - //查询流程定义模型xml + // 查询流程定义模型xml byte[] xmlBytes = repositoryService.getModelEditorSource(id); if (ArrayUtil.isEmpty(xmlBytes)) { throw new ServiceException("模型数据为空,请先设计流程定义模型,再进行部署!"); @@ -279,7 +294,7 @@ public class ActModelServiceImpl implements IActModelService { Model model = repositoryService.getModel(id); // xml资源的名称 ,对应act_ge_bytearray表中的name_字段 String processName = model.getName() + ".bpmn20.xml"; - //调用部署相关的api方法进行部署流程定义 + // 调用部署相关的api方法进行部署流程定义 Deployment deployment = repositoryService.createDeployment() // 部署名称 .name(model.getName()) @@ -319,7 +334,7 @@ public class ActModelServiceImpl implements IActModelService { zos = ZipUtil.getZipOutputStream(response.getOutputStream(), StandardCharsets.UTF_8); // 压缩包文件名 String zipName = "模型不存在"; - //查询模型基本信息 + // 查询模型基本信息 Model model = repositoryService.getModel(modelId); byte[] xmlBytes = repositoryService.getModelEditorSource(modelId); if (ObjectUtil.isNotNull(model)) { From b68410ca45d28fe5dbfcdc166a703a100878fb05 Mon Sep 17 00:00:00 2001 From: Ray <343509740@qq.com> Date: Wed, 27 Dec 2023 14:31:42 +0800 Subject: [PATCH 2/2] =?UTF-8?q?update-=E4=BF=AE=E6=94=B9=E5=B8=B8=E9=87=8F?= =?UTF-8?q?=E5=91=BD=E5=90=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../org/dromara/workflow/common/constant/FlowConstant.java | 2 +- .../src/main/java/org/dromara/workflow/domain/bo/ModelBo.java | 2 +- .../dromara/workflow/service/impl/ActModelServiceImpl.java | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/constant/FlowConstant.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/constant/FlowConstant.java index ed5ef4ece..0ccfd0fa5 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/constant/FlowConstant.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/common/constant/FlowConstant.java @@ -82,5 +82,5 @@ public interface FlowConstant { /** * 模型标识key命名规范正则表达式 */ - String MODE_KEY_PATTERN = "^[a-zA-Z][a-zA-Z0-9_]{0,254}$"; + String MODEL_KEY_PATTERN = "^[a-zA-Z][a-zA-Z0-9_]{0,254}$"; } diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/ModelBo.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/ModelBo.java index 733dba3ef..152f65445 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/ModelBo.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/domain/bo/ModelBo.java @@ -33,7 +33,7 @@ public class ModelBo extends PageEntity implements Serializable { * 模型标识key */ @NotBlank(message = "模型标识key不能为空", groups = {AddGroup.class}) - @Pattern(regexp = FlowConstant.MODE_KEY_PATTERN, message = "模型标识key只能字符或者下划线开头", groups = {AddGroup.class}) + @Pattern(regexp = FlowConstant.MODEL_KEY_PATTERN, message = "模型标识key只能字符或者下划线开头", groups = {AddGroup.class}) private String key; /** diff --git a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActModelServiceImpl.java b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActModelServiceImpl.java index 0a251fc90..1c0ea8c6b 100644 --- a/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActModelServiceImpl.java +++ b/ruoyi-modules/ruoyi-workflow/src/main/java/org/dromara/workflow/service/impl/ActModelServiceImpl.java @@ -229,7 +229,7 @@ public class ActModelServiceImpl implements IActModelService { // 获取唯一标识key String key = values.getFirst("key"); // 校验key命名规范 - if (!Validator.isMatchRegex(FlowConstant.MODE_KEY_PATTERN, key)) { + if (!Validator.isMatchRegex(FlowConstant.MODEL_KEY_PATTERN, key)) { throw new ServiceException("模型标识key只能字符或者下划线开头!"); } List list = repositoryService.createModelQuery().modelKey(key).modelTenantId(TenantHelper.getTenantId()).list(); @@ -245,7 +245,7 @@ public class ActModelServiceImpl implements IActModelService { if (StringUtils.isBlank(processId)) { throw new ServiceException("流程标识不能为空!"); } - if (!Validator.isMatchRegex(FlowConstant.MODE_KEY_PATTERN, processId)) { + if (!Validator.isMatchRegex(FlowConstant.MODEL_KEY_PATTERN, processId)) { throw new ServiceException("流程标识只能字符或者下划线开头!"); }