02.flowable 流程模板导入

项目地址: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上看。

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小学生05101

flowable

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值