项目地址:https://gitee.com/lwj/flowable.git 分支:flowable-base
视频讲解地址
https://space.bilibili.com/485524575/channel/detail?cid=94579
1、演示
2、导入的方法
public ModelRepresentation importProcessModel(MultipartFile file, ModelRepresentation model) {
String fileName = file.getOriginalFilename();
if (fileName != null && (fileName.endsWith(".bpmn") || fileName.endsWith(".bpmn20.xml"))) {
try {
XMLInputFactory xif = XmlUtil.createSafeXmlInputFactory();
InputStreamReader xmlIn = new InputStreamReader(file.getInputStream(), "UTF-8");
XMLStreamReader xtr = xif.createXMLStreamReader(xmlIn);
BpmnModel bpmnModel = bpmnXmlConverter.convertToBpmnModel(xtr);
//模板验证
ProcessValidator validator = new ProcessValidatorFactory().createDefaultProcessValidator();
List<ValidationError> errors = validator.validate(bpmnModel);
if (CollectionUtils.isNotEmpty(errors)){
StringBuffer es = new StringBuffer();
errors.forEach(ve -> es.append(ve.toString()).append("/n"));
throw new BadRequestException("模板验证失败,原因: " + es.toString());
}
if (CollectionUtils.isEmpty(bpmnModel.getProcesses())) {
throw new BadRequestException("No process found in definition " + fileName);
}
if (bpmnModel.getLocationMap().size() == 0) {
BpmnAutoLayout bpmnLayout = new BpmnAutoLayout(bpmnModel);
bpmnLayout.execute();
}
ObjectNode modelNode = bpmnJsonConverter.convertToJson(bpmnModel);
org.flowable.bpmn.model.Process process = bpmnModel.getMainProcess();
String name = process.getId();
if (StringUtils.isNotEmpty(process.getName())) {
name = process.getName();
}
String description = process.getDocumentation();
model.setKey(process.getId());
model.setName(name);
model.setDescription(description);
model.setModelType(AbstractModel.MODEL_TYPE_BPMN);
User createdBy = SecurityUtils.getCurrentUserObject();
//查询是否已经存在流程模板
Model newModel = new Model();
List<Model> models = modelRepository.findByKeyAndType(model.getKey(), model.getModelType());
if (CollectionUtils.isNotEmpty(models)) {
Model updateModel = models.get(0);
newModel.setId(updateModel.getId());
}
newModel.setName(model.getName());
newModel.setKey(model.getKey());
newModel.setModelType(model.getModelType());
newModel.setCreated(Calendar.getInstance().getTime());
newModel.setCreatedBy(createdBy.getId());
newModel.setDescription(model.getDescription());
newModel.setModelEditorJson(modelNode.toString());
newModel.setLastUpdated(Calendar.getInstance().getTime());
newModel.setLastUpdatedBy(createdBy.getId());
newModel.setTenantId(model.getTenantId());
newModel = modelService.createModel(newModel, SecurityUtils.getCurrentUserObject());
return new ModelRepresentation(newModel);
} catch (BadRequestException e) {
throw e;
} catch (Exception e) {
LOGGER.error("Import failed for {}", fileName, e);
throw new BadRequestException("Import failed for " + fileName + ", error message " + e.getMessage());
}
} else {
throw new BadRequestException("Invalid file name, only .bpmn and .bpmn20.xml files are supported not " + fileName);
}
}
有些代码可能是没有放到这里,可以去git上看。