国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

boot-admin整合flowable官方editor-app源碼進(jìn)行BPMN2-0建模(續(xù))

這篇具有很好參考價值的文章主要介紹了boot-admin整合flowable官方editor-app源碼進(jìn)行BPMN2-0建模(續(xù))。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

boot-admin整合flowable官方editor-app源碼進(jìn)行BPMN2-0建模(續(xù))
書接上回

項目源碼倉庫github
項目源碼倉庫gitee文章來源地址http://www.zghlxwxcb.cn/news/detail-420685.html

boot-admin 是一款采用前后端分離模式、基于SpringCloud微服務(wù)架構(gòu)的SaaS后臺管理框架。系統(tǒng)內(nèi)置基礎(chǔ)管理、權(quán)限管理、運行管理、定義管理、代碼生成器和辦公管理6個功能模塊,集成分布式事務(wù)Seata、工作流引擎Flowable、業(yè)務(wù)規(guī)則引擎Drools、后臺作業(yè)調(diào)度框架Quartz等,技術(shù)棧包括Mybatis-plus、Redis、Nacos、Seata、Flowable、Drools、Quartz、SpringCloud、Springboot Admin Gateway、Liquibase、jwt、Openfeign、I18n等。

在上一篇博文中,已經(jīng)介紹了 boot-admin 對 editor-app 前端代碼的集成改造,接下來我們看看后端代碼。

提供漢化資源json數(shù)據(jù)

   /**
     * 獲取漢化資源
     * @return
     */
    @RequestMapping(value = "/editor/stencilset", method = RequestMethod.GET, produces = "application/json;charset=utf-8")
    public String getStencilset() {
        InputStream stencilsetStream = this.getClass().getClassLoader().getResourceAsStream("stencilset.json");
        try {
            return IOUtils.toString(stencilsetStream, "utf-8");
        } catch (Exception e) {
            throw new FlowableException("Error while loading stencil set", e);
        }
    }

資源包stencilset.json需放在resources文夾下,這里提供下載:點擊下載漢化包

分頁獲取模型列表

controller:

@RequestMapping("/api/workflow/auth/activiti")
@RestController
@Slf4j
public class ModelController extends BaseController {
    @Resource
    private FormValidator formValidator;
    @Autowired
    private MyModelService modelService;

    @PostMapping("/model/page")
    @ApiOperation("分頁獲取項目數(shù)據(jù)表列表")
    public ResultDTO getTablePage(@Valid @RequestBody ModelQueryVO queryVO, BindingResult bindingResult) throws Exception {
        if (bindingResult.hasErrors()) {
            return formValidator.generateMessage(bindingResult);
        }
        return modelService.getPage(queryVO);
    }
}    

service:

    @Override
    public ResultDTO getPage(ModelQueryVO queryVO) throws Exception {
        int offset = (queryVO.getCurrentPage() - 1) * queryVO.getPageSize() + 0;
        List<Model> list = repositoryService.createModelQuery().listPage(offset
                , queryVO.getPageSize());
        int total = (int) repositoryService.createModelQuery().count();
        Page<Model> page = new Page<>();
        page.setRecords(list);
        page.setTotal(total);
        return ResultDTO.success(page);
    }

讀取模型數(shù)據(jù)

controller:

@RequestMapping("/api/workflow/auth/activiti")
@RestController
@Slf4j
public class ModelController extends BaseController {
    @Autowired
    private RepositoryService repositoryService;
    @Autowired
    private ObjectMapper objectMapper;
    /**
     * 獲取用于編輯的模型JSON數(shù)據(jù)
     * @param modelId 模型ID
     * @return
     */
    @GetMapping(value = "/model/json")
    public ObjectNode getEditorJson(@RequestParam("modelId") String modelId) {
        ObjectNode modelNode = null;
        Model model = repositoryService.getModel(modelId);
        if (model != null) {
            try {
                if (StringUtils.isNotEmpty(model.getMetaInfo())) {
                    modelNode = (ObjectNode) objectMapper.readTree(model.getMetaInfo());
                } else {
                    modelNode = objectMapper.createObjectNode();
                    modelNode.put(MODEL_NAME, model.getName());
                }
                modelNode.put(MODEL_ID, model.getId());
                ObjectNode editorJsonNode = (ObjectNode) objectMapper.readTree(
                        new String(repositoryService.getModelEditorSource(model.getId()), "utf-8"));
                modelNode.put("model", editorJsonNode);

            } catch (Exception e) {
                log.error("Error creating model JSON", e);
                throw new FlowableException("Error creating model JSON", e);
            }
        }
        return modelNode;
    }
}    

增加新模型

controller:

@RequestMapping("/api/workflow/auth/activiti")
@RestController
@Slf4j
public class ModelController extends BaseController {
    @Resource
    private FormValidator formValidator;
    @Autowired
    private MyModelService modelService;
    
    @PostMapping("/model/add")
    @ApiOperation("保存數(shù)據(jù)")
    public ResultDTO save(@Valid @RequestBody ModelDataVO dataVO, BindingResult bindingResult) throws Exception {
        if (bindingResult.hasErrors()) {
            return formValidator.generateMessage(bindingResult);
        }
        BaseUser baseUser = UserTool.getBaseUser();
        return modelService.addNewModel(dataVO, baseUser);
    }
} 

service:

    @Override
    public ResultDTO addNewModel(ModelDataVO dataVO, BaseUser baseUser) throws Exception {
        //初始化一個空模型
        Model model = repositoryService.newModel();
        //設(shè)置一些默認(rèn)信息
        String name = dataVO.getName();
        String description = dataVO.getDescription();
        int revision = 1;
        String key = dataVO.getKey();

        ObjectNode modelNode = objectMapper.createObjectNode();
        modelNode.put(MODEL_NAME, name);
        modelNode.put(MODEL_DESCRIPTION, description);
        modelNode.put(ModelDataJsonConstants.MODEL_REVISION, revision);

        model.setName(name);
        model.setKey(key);
        model.setMetaInfo(modelNode.toString());

        repositoryService.saveModel(model);
        String id = model.getId();

        //完善ModelEditorSource
        ObjectNode editorNode = objectMapper.createObjectNode();
        editorNode.put("id", "canvas");
        editorNode.put("resourceId", "canvas");
        ObjectNode stencilSetNode = objectMapper.createObjectNode();
        stencilSetNode.put("namespace",
                "http://b3mn.org/stencilset/bpmn2.0#");
        editorNode.put("stencilset", stencilSetNode);
        repositoryService.addModelEditorSource(id, editorNode.toString().getBytes("utf-8"));
        return ResultDTO.success(id);
    }

保存模型數(shù)據(jù)

    /**
     * 保存模型數(shù)據(jù)
     * @param modelId
     * @param name
     * @param description
     * @param json_xml
     * @param svg_xml
     */
    @RequestMapping(value = "/model/save", method = RequestMethod.PUT)
    @ResponseStatus(value = HttpStatus.OK)
    public void saveModel(@RequestParam("modelId") String modelId
            , String name, String description
            , String json_xml, String svg_xml) {
        try {
            Model model = repositoryService.getModel(modelId);
            ObjectNode modelJson = (ObjectNode) objectMapper.readTree(model.getMetaInfo());
            modelJson.put(MODEL_NAME, name);
            modelJson.put(MODEL_DESCRIPTION, description);
            model.setMetaInfo(modelJson.toString());
            model.setName(name);
            repositoryService.saveModel(model);
            repositoryService.addModelEditorSource(model.getId(), json_xml.getBytes("utf-8"));
            InputStream svgStream = new ByteArrayInputStream(svg_xml.getBytes("utf-8"));
            TranscoderInput input = new TranscoderInput(svgStream);
            PNGTranscoder transcoder = new PNGTranscoder();
            // Setup output
            ByteArrayOutputStream outStream = new ByteArrayOutputStream();
            TranscoderOutput output = new TranscoderOutput(outStream);
            // Do the transformation
            transcoder.transcode(input, output);
            final byte[] result = outStream.toByteArray();
            repositoryService.addModelEditorSourceExtra(model.getId(), result);
            outStream.close();
        } catch (Exception e) {
            log.error("Error saving model", e);
            throw new FlowableException("Error saving model", e);
        }
    }

刪除模型

controller:

@RequestMapping("/api/workflow/auth/activiti")
@RestController
@Slf4j
public class ModelController extends BaseController {
    @Resource
    private FormValidator formValidator;
    @Autowired
    private MyModelService modelService;
    
    @PostMapping("/model/del")
    @ApiOperation("刪除數(shù)據(jù)")
    public ResultDTO del(@Valid @RequestBody GuidContainerVO guidContainerVO, BindingResult bindingResult) throws Exception {
        if (bindingResult.hasErrors()) {
            return formValidator.generateMessage(bindingResult);
        }
        return modelService.delete(guidContainerVO.getGuid());
    }    
} 

service:

    @Override
    public ResultDTO delete(String guid) throws Exception {
        repositoryService.deleteModel(guid);
        return ResultDTO.success();
    }

發(fā)布(部署)模型

@RequestMapping("/api/workflow/auth/activiti")
@RestController
@Slf4j
public class ModelController extends BaseController {
    @Resource
    private FormValidator formValidator;
    @Autowired
    private MyModelService modelService;
   
    @PostMapping("/model/deploy")
    public ResultDTO deploy(@Valid @RequestBody GuidContainerVO guidContainerVO, BindingResult bindingResult) throws Exception {
        if (bindingResult.hasErrors()) {
            return formValidator.generateMessage(bindingResult);
        }
        return modelService.deploy(guidContainerVO.getGuid());
    }
}    

service:

    @Override
    public ResultDTO deploy(String guid) throws Exception {
        /**獲取模型 **/
        Model modelData = repositoryService.getModel(guid);
        byte[] bytes = repositoryService.getModelEditorSource(modelData.getId());
        if (bytes == null) {
            return ResultDTO.failureCustom("模型數(shù)據(jù)為空,請先設(shè)計流程并成功保存,再進(jìn)行發(fā)布。");
        }
        JsonNode modelNode = new ObjectMapper().readTree(bytes);
        BpmnModel model = new BpmnJsonConverter().convertToBpmnModel(modelNode);
        if (model.getProcesses().size() == 0) {
            return ResultDTO.failureCustom("數(shù)據(jù)模型不符要求,請至少設(shè)計一條主線流程。");
        }
        /** 設(shè)置名稱 **/
        if(StringUtils.isNotBlank(modelData.getCategory())) {
            model.setTargetNamespace(modelData.getCategory());
        }
        byte[] bpmnBytes = new BpmnXMLConverter().convertToXML(model);

        /** 發(fā)布流程 .bpmn20.xml必需加 **/
        String processName = modelData.getName() + ".bpmn20.xml";
        Deployment deployment = repositoryService.createDeployment()
                .name(modelData.getName())
                .category(modelData.getCategory())
                .key(modelData.getKey())
                .addString(processName, new String(bpmnBytes, "UTF-8"))
                .deploy();
        modelData.setDeploymentId(deployment.getId());
        repositoryService.saveModel(modelData);
        return ResultDTO.success();
    }

總結(jié):經(jīng)過集成改造,boot-admin與flowable editor-app模型設(shè)計器實現(xiàn)緊密整合,不但實現(xiàn)了BPMN流程編輯、修改、發(fā)布等功能,還實現(xiàn)前端 攜帶jwt按權(quán)限訪問后端資源。
boot-admin 集成 flowable editor-app 運行效果如下圖所示:
boot-admin整合flowable官方editor-app源碼進(jìn)行BPMN2-0建模(續(xù))

項目源碼倉庫github
項目源碼倉庫gitee

到了這里,關(guān)于boot-admin整合flowable官方editor-app源碼進(jìn)行BPMN2-0建模(續(xù))的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • boot-admin開源項目中有關(guān)后端參數(shù)校驗的最佳實踐

    我們在項目開發(fā)中,經(jīng)常會對一些參數(shù)進(jìn)行校驗,比如非空校驗、長度校驗,以及定制的業(yè)務(wù)校驗規(guī)則等,如果使用if/else語句來對請求的每一個參數(shù)一一校驗,就會出現(xiàn)大量與業(yè)務(wù)邏輯無關(guān)的代碼,繁重不堪且繁瑣的校驗,會大大降低我們的工作效率,而且準(zhǔn)確性也無法保證

    2024年02月03日
    瀏覽(21)
  • Spring Boot 整合流程引擎 Flowable,so easy

    Spring Boot 整合流程引擎 Flowable,so easy

    為啥想寫 flowable 呢?原因很簡單,因為最近在錄的 tienchin 項目視頻會用到,先寫一篇文章和大家打打預(yù)防針,后面視頻再細(xì)講。 流程引擎,也算是一個比較常見的工具了,我們在日常的很多開發(fā)中都會用到,當(dāng)然用的最多的就是 OA 系統(tǒng)了,但是在一些非 OA 系統(tǒng)中,我們也

    2024年02月07日
    瀏覽(14)
  • 【Spring Boot Admin】使用(整合Spring Security服務(wù),添加鑒權(quán))

    【Spring Boot Admin】使用(整合Spring Security服務(wù),添加鑒權(quán))

    Spring Boot Admin 監(jiān)控平臺 背景:Spring Boot Admin 監(jiān)控平臺不添加鑒權(quán)就直接訪問的話,是非常不安全的。所以在生產(chǎn)環(huán)境中使用時,需要添加鑒權(quán),只有通過鑒權(quán)后才能監(jiān)控客戶端服務(wù)。本文整合Spring Security進(jìn)行實現(xiàn)。 pom依賴 yml配置 啟動類@EnableAdminServer 安全配置類:SecuritySe

    2024年02月16日
    瀏覽(46)
  • Springboot整合Flowable流程引擎

    Springboot整合Flowable流程引擎

    Flowable是一個開源的工作流引擎,它基于Activiti引擎進(jìn)行發(fā)展,F(xiàn)lowable主要用于為業(yè)務(wù)流程管理(BPM)和工作流的設(shè)計、操作、監(jiān)控提供支持。 這類表在Flowable中主要提供存儲通用類型數(shù)據(jù)的功能,如流程名稱,創(chuàng)建時間等。如下是通用表的主要成員: act_ge_bytearray:存儲二進(jìn)

    2024年02月05日
    瀏覽(18)
  • Springboot整合Flowable6.x導(dǎo)出bpmn20

    Springboot整合Flowable6.x導(dǎo)出bpmn20

    項目源碼倉庫 BPMN2.0(Business Process Model and Notation)是一套業(yè)務(wù)流程模型與符號建模標(biāo)準(zhǔn),以XML為載體,以符號可視化業(yè)務(wù),支持精準(zhǔn)的執(zhí)行語義來描述元素的操作。 Flowable誕生于Activiti,是一個使用Java編寫的輕量級業(yè)務(wù)流程引擎。Flowable流程引擎可用于部署B(yǎng)PMN 2.0流程定義,

    2023年04月18日
    瀏覽(18)
  • 若依(RuoYi-Vue)+Flowable工作流前后端整合教程

    若依(RuoYi-Vue)+Flowable工作流前后端整合教程

    此教程適合若依前后端分離項目,其他項目可以在擴(kuò)展列表中進(jìn)行查找。 近期公司里需要對很久以前的RuoYi-Vue前后端分離項目擴(kuò)展出flowable的功能,當(dāng)然這個重任也是落在了我的身上(不然也不會有這篇文章),然后我在官網(wǎng)看到了RuoYi-Vue-Flowable這個項目,按照文檔提供的遷

    2023年04月21日
    瀏覽(24)
  • Spring Boot 中動態(tài)創(chuàng)建 Flowable 工作流

    在 Spring Boot 中動態(tài)創(chuàng)建 Flowable 工作流可以通過以下步驟實現(xiàn): 1.?創(chuàng)建 Flowable 配置:首先,您需要在 Spring Boot 應(yīng)用程序中配置 Flowable。您可以使用 Spring Boot 的配置文件或注解來配置 Flowable。 2.?創(chuàng)建工作流定義:接下來,您需要創(chuàng)建工作流定義。您可以使用 Flowable 的 API 來

    2024年02月10日
    瀏覽(18)
  • 基于jeecg-boot的flowable流程跳轉(zhuǎn)功能實現(xiàn)

    基于jeecg-boot的flowable流程跳轉(zhuǎn)功能實現(xiàn)

    更多nbcio-boot功能請看演示系統(tǒng) gitee源代碼地址 后端代碼: https://gitee.com/nbacheng/nbcio-boot 前端代碼:https://gitee.com/nbacheng/nbcio-vue.git 在線演示(包括H5) : http://122.227.135.243:9888 ? ? ? 今天我們實現(xiàn)nbcio-boot的flowable的流程跳轉(zhuǎn)功能。 一、前端實現(xiàn) 界面實現(xiàn),就是點擊跳轉(zhuǎn)出來

    2024年02月11日
    瀏覽(93)
  • 基于jeecg-boot的flowable流程加簽功能實現(xiàn)

    基于jeecg-boot的flowable流程加簽功能實現(xiàn)

    ? ? 更多nbcio-boot功能請看演示系統(tǒng) gitee源代碼地址 后端代碼: https://gitee.com/nbacheng/nbcio-boot 前端代碼:https://gitee.com/nbacheng/nbcio-vue.git 在線演示(包括H5) : http://122.227.135.243:9888 ? ? ? 今天我們實現(xiàn)nbcio-boot的flowable的流程加簽功能。 一、加簽的幾個概念 1、向前加簽 任務(wù)在

    2024年02月11日
    瀏覽(96)
  • 基于jeecg-boot的flowable流程收回功能實現(xiàn)(全網(wǎng)首創(chuàng)功能)

    基于jeecg-boot的flowable流程收回功能實現(xiàn)(全網(wǎng)首創(chuàng)功能)

    更多nbcio-boot功能請看演示系統(tǒng) gitee源代碼地址 后端代碼: https://gitee.com/nbacheng/nbcio-boot 前端代碼:https://gitee.com/nbacheng/nbcio-vue.git 在線演示(包括H5) : http://122.227.135.243:9888 ? ? ? ? ? ? ? 對于之前的flowable流程,之前有撤回,拒絕,退回等功能,但都不能滿足發(fā)起人對于

    2024年02月12日
    瀏覽(93)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包