update - 更新流程模型 restfulApi 接口相关逻辑

This commit is contained in:
wangli 2023-07-26 11:08:36 +08:00
parent 192f033786
commit 73fa39d117
8 changed files with 76 additions and 26 deletions

View File

@ -1,6 +1,9 @@
package cn.axzo.workflow.core.common;
public interface BpmConstants {
String BPMN_FILE_SUFFIX = ".bpmn";
String FORM_FILE_SUFFIX = ".form";
String SERVER_APP_ID = "server-app-id";
/**
* 引擎自己隐藏指令

View File

@ -1,5 +1,6 @@
package cn.axzo.workflow.core.service;
import cn.axzo.workflow.core.service.dto.request.definition.BpmProcessDefinitionUpdateDTO;
import cn.axzo.workflow.core.service.dto.request.process.BpmProcessDefinitionPageDTO;
import cn.axzo.workflow.core.service.dto.response.BpmPageResult;
import cn.axzo.workflow.core.service.dto.response.process.BpmProcessDefinitionVO;
@ -16,6 +17,10 @@ public interface BpmProcessDefinitionService {
*/
String createProcessDefinition(Model model, byte[] bpmnBytes);
void updateProcessDefinition(String processModelId, byte[] bpmnBytes);
void updateProcessDefinition(String processModelId, String bpmnXml);
/**
* 获取活跃的流程定义分页
@ -60,4 +65,5 @@ public interface BpmProcessDefinitionService {
*/
String getActiveProcessDefinitionId(String tenantId, String category);
void updateProcessDefinition(BpmProcessDefinitionUpdateDTO dto);
}

View File

@ -0,0 +1,25 @@
package cn.axzo.workflow.core.service.dto.request.definition;
import cn.axzo.workflow.core.service.dto.BpmJsonNode;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;
/**
* TODO
*
* @author wangli
* @since 2023/7/26 10:07
*/
@Data
public class BpmProcessDefinitionUpdateDTO {
@ApiModelProperty(value = "流程模型 ID")
private String processModelId;
@ApiModelProperty(value = "JSON 转义的流程定义内容", notes = "枢智业务线在用")
@Valid
@NotNull(message = "模型定义内容不能为空")
private BpmJsonNode bpmJson;
}

View File

@ -38,9 +38,6 @@ public class BpmModelBaseVO {
@ApiModelProperty(value = "版本", required = true, example = "1")
private Integer version;
private String metaInfo;
/**
* 租户Id
* */

View File

@ -27,6 +27,7 @@ import java.util.Collections;
import java.util.List;
import java.util.Objects;
import static cn.axzo.workflow.core.common.BpmConstants.FORM_FILE_SUFFIX;
import static cn.axzo.workflow.core.common.BpmConstants.MODEL_META_INFO_FORM;
/**
@ -162,7 +163,7 @@ public class BpmFormModelServiceImpl implements BpmFormModelService {
throw new WorkflowEngineException("模型不存在");
}
FormDeployment deploy = formRepositoryService.createDeployment()
.addFormDefinition(model.getKey() + ".form",
.addFormDefinition(model.getKey() + FORM_FILE_SUFFIX,
new String(repositoryService.getModelEditorSource(model.getId())))
.name(model.getName())
.category(model.getCategory())

View File

@ -1,8 +1,10 @@
package cn.axzo.workflow.core.service.impl;
import cn.axzo.workflow.core.common.exception.WorkflowEngineException;
import cn.axzo.workflow.core.common.utils.BpmTransformUtil;
import cn.axzo.workflow.core.service.BpmProcessDefinitionService;
import cn.axzo.workflow.core.service.converter.BpmProcessDefinitionConverter;
import cn.axzo.workflow.core.service.dto.request.definition.BpmProcessDefinitionUpdateDTO;
import cn.axzo.workflow.core.service.dto.request.process.BpmProcessDefinitionPageDTO;
import cn.axzo.workflow.core.service.dto.response.BpmPageResult;
import cn.axzo.workflow.core.service.dto.response.process.BpmProcessDefinitionVO;
@ -17,10 +19,12 @@ import org.flowable.engine.repository.ProcessDefinition;
import org.flowable.engine.repository.ProcessDefinitionQuery;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import javax.annotation.Resource;
import java.util.*;
import static cn.axzo.workflow.core.common.BpmConstants.BPMN_FILE_SUFFIX;
import static cn.axzo.workflow.core.common.enums.BpmErrorCode.*;
import static cn.axzo.workflow.core.common.utils.BpmCollectionUtils.addIfNotNull;
import static cn.axzo.workflow.core.common.utils.BpmCollectionUtils.convertMap;
@ -29,7 +33,8 @@ import static java.util.Collections.emptyList;
@Service
@Slf4j
public class BpmProcessDefinitionServiceImpl implements BpmProcessDefinitionService {
private static final String BPMN_FILE_SUFFIX = ".bpmn";
@Resource
private RepositoryService repositoryService;
@Resource
@ -69,17 +74,34 @@ public class BpmProcessDefinitionServiceImpl implements BpmProcessDefinitionServ
throw new WorkflowEngineException(PROCESS_DEFINITION_NAME_NOT_MATCH);
}
// 插入拓展表
// ProcessDefinitionExtDO definitionDO = new ProcessDefinitionExtDO();
// definitionDO.setModelId(model.getId());
// BeanUtils.copyProperties(definition, definitionDO);
// definitionDO.setProcessDefinitionId(definition.getId());
// definitionDO.setModelId(model.getId());
// definitionDO.setTenantId(definition.getTenantId());
// processDefinitionExtMapper.insert(definitionDO);
return definition.getId();
}
@Override
public void updateProcessDefinition(String processModelId, byte[] bpmnBytes) {
if (bpmnBytes != null && bpmnBytes.length != 0) {
this.repositoryService.addModelEditorSource(processModelId, bpmnBytes);
}
}
@Override
public void updateProcessDefinition(String processModelId, String bpmnXml) {
if (StringUtils.hasLength(bpmnXml)) {
updateProcessDefinition(processModelId, bpmnXml.getBytes());
}
}
@Override
public void updateProcessDefinition(BpmProcessDefinitionUpdateDTO dto) {
Model model = repositoryService.getModel(dto.getProcessModelId());
if (Objects.isNull(model)) {
throw new WorkflowEngineException("模型不存在");
}
//FIXME 在底层 Service 中直接将 jsonToXml 有风险,应先判断数据格式是否是 JSON
byte[] bpmn = BpmTransformUtil.transformBpmnJsonToXml(dto.getBpmJson(), model);
updateProcessDefinition(model.getId(), bpmn);
}
@Override
public void updateProcessDefinitionSuspendedState(String processDefinitionId, Integer state) {
// 激活

View File

@ -109,7 +109,7 @@ public class BpmProcessModelServiceImpl implements BpmProcessModelService {
if (dto.getNode() != null) {
//FIXME 在底层 Service 中直接将 jsonToXml 有风险,应先判断数据格式是否是 JSON
byte[] bpmn = BpmTransformUtil.transformBpmnJsonToXml(dto.getNode(), model);
saveModelBpmnXml(model, bpmn);
processDefinitionService.updateProcessDefinition(model.getId(), bpmn);
}
return model.getId();
}
@ -170,7 +170,7 @@ public class BpmProcessModelServiceImpl implements BpmProcessModelService {
if (dto.getNode() != null) {
//FIXME 入参是否强制为 JSON 格式?
byte[] bpmn = BpmTransformUtil.transformBpmnJsonToXml(dto.getNode(), originModel);
saveModelBpmnXml(originModel, bpmn);
processDefinitionService.updateProcessDefinition(originModel.getId(), bpmn);
}
repositoryService.saveModel(originModel);
}
@ -240,17 +240,6 @@ public class BpmProcessModelServiceImpl implements BpmProcessModelService {
repositoryService.deleteModel(model.getId());
}
private void saveModelBpmnXml(Model model, String bpmnXml) {
if (StringUtils.hasLength(bpmnXml)) {
saveModelBpmnXml(model, bpmnXml.getBytes());
}
}
private void saveModelBpmnXml(Model model, byte[] bpmnXml) {
if (bpmnXml != null && bpmnXml.length != 0) {
this.repositoryService.addModelEditorSource(model.getId(), bpmnXml);
}
}
private void updateProcessDefinitionSuspended(String deploymentId) {
if (StringUtils.hasLength(deploymentId)) {

View File

@ -1,6 +1,7 @@
package cn.axzo.workflow.server.controller.web;
import cn.axzo.workflow.core.service.BpmProcessDefinitionService;
import cn.axzo.workflow.core.service.dto.request.definition.BpmProcessDefinitionUpdateDTO;
import cn.axzo.workflow.core.service.dto.request.process.BpmProcessDefinitionPageDTO;
import cn.axzo.workflow.core.service.dto.response.BpmPageResult;
import cn.axzo.workflow.core.service.dto.response.process.BpmProcessDefinitionVO;
@ -32,6 +33,12 @@ public class BpmProcessDefinitionController {
return CommonResponse.success(bpmProcessDefinitionService.getProcessDefinitionPage(dto));
}
@PutMapping("/update")
public CommonResponse updateProcessDefinition(@RequestBody BpmProcessDefinitionUpdateDTO dto) {
bpmProcessDefinitionService.updateProcessDefinition(dto);
return CommonResponse.success(true);
}
/**
* 获得编号对应的 ProcessDefinition