update - 解决自测过程中发现的一些问题

This commit is contained in:
wangli 2023-10-05 17:28:25 +08:00
parent 79ae087bc3
commit 8e53843649
8 changed files with 31 additions and 19 deletions

View File

@ -33,6 +33,9 @@ public class FormModelBaseVO {
@ApiModelProperty(value = "租户")
private String tenantId;
@ApiModelProperty(value = "部署 ID")
private String deploymentId;
@ApiModelProperty(value = "版本")
private Integer version;

View File

@ -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", "该任务的审批人不是你"),

View File

@ -35,6 +35,14 @@ public interface BpmnProcessDefinitionService {
*/
BpmnProcessDefinitionVO getProcessDefinition(String id);
/**
* 通过部署 ID 查询是否有激活/可用的定义版本
*
* @param deploymentId
* @return
*/
Boolean hasActiveProcessDefinition(String deploymentId);
/**
* 获得 deploymentId 对应的 ProcessDefinition
*

View File

@ -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<FormModelBaseVO, Model> {
@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;
}
}

View File

@ -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 =

View File

@ -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<String, Object> variables = new HashMap<>();
variables.put(INTERNAL_END_TENANT_ID, dto.getInitiator().getTenantId());

View File

@ -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<FormModelBaseVO> 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());
}

View File

@ -97,7 +97,7 @@ public class BpmnProcessModelController implements ProcessModelApi {
@Operation(summary = "更新流程模型")
@PutMapping("/update")
@Override
public CommonResponse<String> update(@RequestBody BpmnModelUpdateDTO dto) {
public CommonResponse<String> update(@Validated @RequestBody BpmnModelUpdateDTO dto) {
log.info("修改流程信息updateBpmModel===>>>参数:{}", JSON.toJSONString(dto));
bpmnProcessModelService.updateBpmModel(dto);
return success();