From 8e538436491cc629eaa976b6c37c66816accd8b9 Mon Sep 17 00:00:00 2001 From: wangli <274027703@qq.com> Date: Thu, 5 Oct 2023 17:28:25 +0800 Subject: [PATCH] =?UTF-8?q?update=20-=20=E8=A7=A3=E5=86=B3=E8=87=AA?= =?UTF-8?q?=E6=B5=8B=E8=BF=87=E7=A8=8B=E4=B8=AD=E5=8F=91=E7=8E=B0=E7=9A=84?= =?UTF-8?q?=E4=B8=80=E4=BA=9B=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../model/response/form/model/FormModelBaseVO.java | 3 +++ .../workflow/core/common/enums/BpmErrorCode.java | 2 +- .../core/service/BpmnProcessDefinitionService.java | 8 ++++++++ .../core/service/converter/FormModelConverter.java | 14 ++------------ .../impl/BpmnProcessDefinitionServiceImpl.java | 6 ++++++ .../impl/BpmnProcessInstanceServiceImpl.java | 4 ++++ .../service/impl/BpmnProcessModelServiceImpl.java | 11 ++++++----- .../web/bpmn/BpmnProcessModelController.java | 2 +- 8 files changed, 31 insertions(+), 19 deletions(-) diff --git a/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/response/form/model/FormModelBaseVO.java b/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/response/form/model/FormModelBaseVO.java index 977dd80ad..c5cc951c7 100644 --- a/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/response/form/model/FormModelBaseVO.java +++ b/workflow-engine-common/src/main/java/cn/axzo/workflow/common/model/response/form/model/FormModelBaseVO.java @@ -33,6 +33,9 @@ public class FormModelBaseVO { @ApiModelProperty(value = "租户") private String tenantId; + @ApiModelProperty(value = "部署 ID") + private String deploymentId; + @ApiModelProperty(value = "版本") private Integer version; diff --git a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/common/enums/BpmErrorCode.java b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/common/enums/BpmErrorCode.java index 8914c050e..bd87fe714 100644 --- a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/common/enums/BpmErrorCode.java +++ b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/common/enums/BpmErrorCode.java @@ -43,7 +43,7 @@ public enum BpmErrorCode implements IProjectRespCode { PROCESS_INSTANCE_CANCEL_FAIL_NOT_SELF("05003", "流程取消失败,该流程不是你发起的"), PROCESS_INSTANCE_NOT_EXISTS("05004", "流程实例不存在"), PROCESS_INSTANCE_ID_NOT_EXISTS("05005", "流程实例【{}】不存在"), - PROCESS_INSTANCE_CREATE_ERROR("05002", ""), + PROCESS_INSTANCE_CANCELLED("05006", "流程实例已取消"), // ========== bpmn task 06-001 ========== TASK_COMPLETE_FAIL_NOT_EXISTS("06001", "未找到指定审批任务"), TASK_COMPLETE_FAIL_ASSIGN_NOT_SELF("06002", "该任务的审批人不是你"), diff --git a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/BpmnProcessDefinitionService.java b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/BpmnProcessDefinitionService.java index 29e07a5ad..5087cd3db 100644 --- a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/BpmnProcessDefinitionService.java +++ b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/BpmnProcessDefinitionService.java @@ -35,6 +35,14 @@ public interface BpmnProcessDefinitionService { */ BpmnProcessDefinitionVO getProcessDefinition(String id); + /** + * 通过部署 ID 查询是否有激活/可用的定义版本 + * + * @param deploymentId + * @return + */ + Boolean hasActiveProcessDefinition(String deploymentId); + /** * 获得 deploymentId 对应的 ProcessDefinition * diff --git a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/converter/FormModelConverter.java b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/converter/FormModelConverter.java index eb659ec07..2a7b9368c 100644 --- a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/converter/FormModelConverter.java +++ b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/converter/FormModelConverter.java @@ -4,7 +4,6 @@ import cn.axzo.workflow.common.model.response.form.model.FormModelBaseVO; import org.flowable.engine.repository.Model; import org.mapstruct.Mapper; import org.mapstruct.Mapping; -import org.springframework.util.StringUtils; import java.util.Arrays; @@ -22,26 +21,17 @@ import static org.mapstruct.NullValueCheckStrategy.ALWAYS; imports = Arrays.class ) public interface FormModelConverter extends EntityConverter { - @Mapping(target = "id", source = "entity.id") @Mapping(target = "name", source = "entity.name") @Mapping(target = "key", source = "entity.key") @Mapping(target = "category", source = "entity.category") + @Mapping(target = "deploymentId", source = "entity.deploymentId") @Mapping(target = "tenantId", source = "entity.tenantId") @Mapping(target = "version", source = "entity.version") - @Mapping(target = "status", expression = "java(convertStatus(entity.getDeploymentId()))") @Mapping(target = "createAt", source = "entity.createTime") @Mapping(target = "updateAt", source = "entity.lastUpdateTime") + @Override FormModelBaseVO toVo(Model entity); - /** - * 根据 deploymentId 计算模型状态 - * - * @param deploymentId - * @return - */ - default Integer convertStatus(String deploymentId) { - return StringUtils.hasLength(deploymentId) ? 1 : 0; - } } diff --git a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/impl/BpmnProcessDefinitionServiceImpl.java b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/impl/BpmnProcessDefinitionServiceImpl.java index a5039c339..95f25014e 100644 --- a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/impl/BpmnProcessDefinitionServiceImpl.java +++ b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/impl/BpmnProcessDefinitionServiceImpl.java @@ -57,6 +57,7 @@ public class BpmnProcessDefinitionServiceImpl implements BpmnProcessDefinitionSe .addBytes(model.getKey() + BPMN_FILE_SUFFIX, bpmnBytes) // 关闭 BPMN 文件内容校验 .disableBpmnValidation() + .disableSchemaValidation() .deploy(); // 设置 ProcessDefinition 的 category 分类 @@ -148,6 +149,11 @@ public class BpmnProcessDefinitionServiceImpl implements BpmnProcessDefinitionSe return processDefinitionConverter.toVo(processDefinition); } + @Override + public Boolean hasActiveProcessDefinition(String deploymentId) { + return repositoryService.createProcessDefinitionQuery().active().deploymentId(deploymentId).count() > 0; + } + @Override public ProcessDefinition getProcessDefinitionByDeploymentId(String deploymentId) { ProcessDefinition processDefinition = diff --git a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/impl/BpmnProcessInstanceServiceImpl.java b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/impl/BpmnProcessInstanceServiceImpl.java index ab8ecf901..cb03c98ee 100644 --- a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/impl/BpmnProcessInstanceServiceImpl.java +++ b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/impl/BpmnProcessInstanceServiceImpl.java @@ -1,5 +1,6 @@ package cn.axzo.workflow.core.service.impl; +import cn.axzo.workflow.common.enums.BpmProcessInstanceResultEnum; import cn.axzo.workflow.common.model.request.bpmn.process.*; import cn.axzo.workflow.common.model.request.bpmn.task.BpmnTaskDelegateAssigner; import cn.axzo.workflow.common.model.response.BpmPageResult; @@ -259,6 +260,9 @@ public class BpmnProcessInstanceServiceImpl implements BpmnProcessInstanceServic if (!Objects.equals(instance.getStartUserId(), dto.getInitiator().getAssigneeId())) { throw new WorkflowEngineException(PROCESS_INSTANCE_CANCEL_FAIL_NOT_SELF); } + if (Objects.nonNull(instance.getEndTime()) && Objects.equals(BpmProcessInstanceResultEnum.CANCELLED.getStatus(), instance.getBusinessStatus())) { + throw new WorkflowEngineException(PROCESS_INSTANCE_CANCELLED); + } Map variables = new HashMap<>(); variables.put(INTERNAL_END_TENANT_ID, dto.getInitiator().getTenantId()); diff --git a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/impl/BpmnProcessModelServiceImpl.java b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/impl/BpmnProcessModelServiceImpl.java index 18469d5ce..e25d8bcc0 100644 --- a/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/impl/BpmnProcessModelServiceImpl.java +++ b/workflow-engine-core/src/main/java/cn/axzo/workflow/core/service/impl/BpmnProcessModelServiceImpl.java @@ -89,7 +89,9 @@ public class BpmnProcessModelServiceImpl implements BpmnProcessModelService { return BpmPageResult.empty(); } NativeModelQuery countSqlQuery = query.sql(countSql(baseQuerySql)); - return new BpmPageResult<>(formModelConverter.toVos(models), countSqlQuery.count()); + List vos = formModelConverter.toVos(models); + vos.forEach(i -> i.setStatus(processDefinitionService.hasActiveProcessDefinition(i.getDeploymentId()) ? 1 : 0)); + return new BpmPageResult<>(vos, countSqlQuery.count()); } @Override @@ -190,13 +192,14 @@ public class BpmnProcessModelServiceImpl implements BpmnProcessModelService { originModel.setCategory(dto.getCategory()); originModel.setKey(dto.getKey()); originModel.setTenantId(dto.getTenantId()); + repositoryService.saveModel(originModel); + //存储Bpmn协议 if (dto.getNode() != null) { //FIXME 入参是否强制为 JSON 格式? byte[] bpmn = BpmTransformUtil.transformBpmnJsonToXml(dto.getNode(), originModel, dto.getCategory()); processDefinitionService.updateProcessDefinition(originModel.getId(), bpmn); } - repositoryService.saveModel(originModel); } @Override @@ -281,8 +284,6 @@ public class BpmnProcessModelServiceImpl implements BpmnProcessModelService { if (StringUtils.hasLength(tenantId) && !Objects.equals(model.getTenantId(), tenantId)) { throw new WorkflowEngineException(MODEL_ID_NOT_EXISTS, processModelId); } - model.setDeploymentId(""); - repositoryService.saveModel(model); updateProcessDefinitionSuspended(model.getDeploymentId()); } @@ -290,7 +291,7 @@ public class BpmnProcessModelServiceImpl implements BpmnProcessModelService { if (StringUtils.hasLength(deploymentId)) { ProcessDefinition oldDefinition = this.processDefinitionService.getProcessDefinitionByDeploymentId(deploymentId); - if (oldDefinition != null) { + if (oldDefinition != null && !oldDefinition.isSuspended()) { this.processDefinitionService.updateProcessDefinitionSuspendedState(oldDefinition.getId(), SuspensionState.SUSPENDED.getStateCode()); } diff --git a/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/web/bpmn/BpmnProcessModelController.java b/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/web/bpmn/BpmnProcessModelController.java index d4a329715..ab3bc5eef 100644 --- a/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/web/bpmn/BpmnProcessModelController.java +++ b/workflow-engine-server/src/main/java/cn/axzo/workflow/server/controller/web/bpmn/BpmnProcessModelController.java @@ -97,7 +97,7 @@ public class BpmnProcessModelController implements ProcessModelApi { @Operation(summary = "更新流程模型") @PutMapping("/update") @Override - public CommonResponse update(@RequestBody BpmnModelUpdateDTO dto) { + public CommonResponse update(@Validated @RequestBody BpmnModelUpdateDTO dto) { log.info("修改流程信息updateBpmModel===>>>参数:{}", JSON.toJSONString(dto)); bpmnProcessModelService.updateBpmModel(dto); return success();