BPM 模型重构 2:导入流程时,只填写 name、description、key

pull/2/head
YunaiV 2022-01-11 21:06:54 +08:00
parent c4950e1b13
commit 62b720a5d0
6 changed files with 52 additions and 16 deletions

View File

@ -47,7 +47,7 @@ public class BpmModelController {
@ApiOperation(value = "新建模型")
@PreAuthorize("@ss.hasPermission('bpm:model:create')")
public CommonResult<String> createModel(@Valid @RequestBody BpmModelCreateReqVO createRetVO) {
return success(bpmModelService.createModel(createRetVO));
return success(bpmModelService.createModel(createRetVO, null));
}
@PostMapping("/import")
@ -56,8 +56,8 @@ public class BpmModelController {
public CommonResult<String> importModel(@Valid BpmModeImportReqVO importReqVO) throws IOException {
BpmModelCreateReqVO createReqVO = BpmModelConvert.INSTANCE.convert(importReqVO);
// 读取文件
// createReqVO.setBpmnXml(IoUtils.readUtf8(importReqVO.getBpmnFile().getInputStream(), false));
return success(bpmModelService.createModel(createReqVO));
String bpmnXml = IoUtils.readUtf8(importReqVO.getBpmnFile().getInputStream(), false);
return success(bpmModelService.createModel(createReqVO, bpmnXml));
}
@PutMapping("/update")

View File

@ -9,11 +9,11 @@ import org.springframework.web.multipart.MultipartFile;
import javax.validation.constraints.NotNull;
@ApiModel("流程模型的导入 Request VO")
@ApiModel(value = "流程模型的导入 Request VO", description = "相比流程模型的新建来说,只是多了一个 bpmnFile 文件")
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
public class BpmModeImportReqVO extends BpmModelBaseVO {
public class BpmModeImportReqVO extends BpmModelCreateReqVO {
@ApiModelProperty(value = "BPMN 文件", required = true)
@NotNull(message = "BPMN 文件不能为空")

View File

@ -32,9 +32,10 @@ public interface BpmModelService {
*
*
* @param modelVO
* @param bpmnXml BPMN XML
* @return
*/
String createModel(@Valid BpmModelCreateReqVO modelVO);
String createModel(@Valid BpmModelCreateReqVO modelVO, String bpmnXml);
/**
*

View File

@ -9,6 +9,7 @@ import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.dto.BpmDefini
import cn.iocoder.yudao.adminserver.modules.bpm.service.form.BpmFormService;
import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.BpmModelService;
import cn.iocoder.yudao.adminserver.modules.bpm.service.definition.dto.BpmModelMetaInfoRespDTO;
import cn.iocoder.yudao.framework.activiti.core.util.ActivitiUtils;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.collection.CollectionUtils;
import cn.iocoder.yudao.framework.common.util.json.JsonUtils;
@ -108,7 +109,7 @@ public class BpmModelServiceImpl implements BpmModelService {
@Override
@Transactional(rollbackFor = Exception.class) // 因为进行多个 activiti 操作,所以开启事务
public String createModel(BpmModelCreateReqVO createReqVO) {
public String createModel(BpmModelCreateReqVO createReqVO, String bpmnXml) {
checkKeyNCName(createReqVO.getKey());
// 校验流程标识已经存在
Model keyModel = this.getModelByKey(createReqVO.getKey());
@ -121,6 +122,8 @@ public class BpmModelServiceImpl implements BpmModelService {
BpmModelConvert.INSTANCE.copy(model, createReqVO);
// 保存流程定义
repositoryService.saveModel(model);
// 保存 BPMN XML
saveModelBpmnXml(model, bpmnXml);
return model.getId();
}
@ -138,7 +141,16 @@ public class BpmModelServiceImpl implements BpmModelService {
// 更新模型
repositoryService.saveModel(model);
// 更新 BPMN XML
repositoryService.addModelEditorSource(model.getId(), StrUtil.utf8Bytes(updateReqVO.getBpmnXml()));
saveModelBpmnXml(model, updateReqVO.getBpmnXml());
}
private void saveModelBpmnXml(Model model, String bpmnXml) {
if (StrUtil.isEmpty(bpmnXml)) {
return;
}
byte[] bpmnBytes = ActivitiUtils.replaceBpmnMainProcessIdAndName(bpmnXml,
model.getKey(), model.getName());
repositoryService.addModelEditorSource(model.getId(), bpmnBytes);
}
@Override
@ -211,11 +223,10 @@ public class BpmModelServiceImpl implements BpmModelService {
}
}
// public static void main(String[] args) {
// // 创建转换对象
// BpmnXMLConverter converter = new BpmnXMLConverter();
// BpmnModel bpmnModel = converter.convertToBpmnModel(new StringStreamSource(""), true, true);
// bpmnModel.getProcesses().get(0).getId()
// }
public static void main(String[] args) {
// 创建转换对象
BpmnXMLConverter converter = new BpmnXMLConverter();
BpmnModel bpmnModel = converter.convertToBpmnModel(new StringStreamSource(""), true, true);
}
}

View File

@ -307,7 +307,7 @@ export default {
return;
}
createModel(this.form).then(response => {
this.msgSuccess("新成功");
this.msgSuccess("新建流程模型成功");
this.open = false;
this.getList();
});
@ -404,7 +404,7 @@ export default {
//
this.uploadClose();
//
this.msgSuccess("上传成功!请点击【设计流程】按钮,进行编辑保存后,才可以进行【发布流程】");
this.msgSuccess("导入流程模型成功");
this.getList();
},
uploadClose() {

View File

@ -2,10 +2,13 @@ package cn.iocoder.yudao.framework.activiti.core.util;
import cn.hutool.core.util.ReflectUtil;
import com.alibaba.ttl.TransmittableThreadLocal;
import org.activiti.bpmn.converter.BpmnXMLConverter;
import org.activiti.bpmn.model.BpmnModel;
import org.activiti.engine.history.HistoricProcessInstance;
import org.activiti.engine.impl.identity.Authentication;
import org.activiti.engine.impl.persistence.entity.HistoricProcessInstanceEntityImpl;
import org.activiti.engine.impl.persistence.entity.HistoricScopeInstanceEntityImpl;
import org.activiti.engine.impl.util.io.StringStreamSource;
/**
* Activiti
@ -37,4 +40,25 @@ public class ActivitiUtils {
Authentication.setAuthenticatedUserId(null);
}
// ========== BPMN XML 相关 ==========
/**
* BPMN XML id name
*
* @param bpmnXml BPMN XML
* @param id XML key
* @param name
* @return BPMN XML
*/
public static byte[] replaceBpmnMainProcessIdAndName(String bpmnXml, String id, String name) {
// 转换成 BpmnModel 对象
BpmnXMLConverter converter = new BpmnXMLConverter();
BpmnModel bpmnModel = converter.convertToBpmnModel(new StringStreamSource(bpmnXml), true, true);
// 设置 id 和 name 属性
bpmnModel.getMainProcess().setId(id);
bpmnModel.getMainProcess().setName(name);
// 转换回字节数组
return converter.convertToXML(bpmnModel);
}
}