Springboot2.0+gradle7.0+activiti6.0搭建后台在线流程编辑器

一、简述
  在上一章已经把怎么获取activiti表做了说明,下面我们来进行在线流程编辑器的整合。
Springboot2.0+gradle7.0+activiti6.0搭建后台在线流程编辑器——表生成
二、整合
  1、需要整合的jar包在上一章的build.gradle文件里也有说明,我这里只贴出主要的jar包:

//项目中需要的依赖
dependencies {
    
    
    implementation ('org.springframework.boot:spring-boot-starter-web'){
    
    
        exclude group:'org.springframework.security',module:'spring-security-config'
    }
    implementation ('org.activiti:activiti-spring-boot-starter-basic:6.0.0'){
    
    
        exclude group:'org.springframework.boot',module:'spring-boot-starter-actuator'
        exclude group:'org.springframework.boot',module:'spring-boot-starter-web'
        exclude group:'org.springframework.security',module:'spring-security-config'
    }
    implementation ('org.activiti:activiti-json-converter:6.0.0'){
    
    
        exclude group:'org.activiti',module:'activiti-bpmn-model'
        exclude group:'org.springframework.security',module:'spring-security-config'
    }
    implementation 'commons-io:commons-io:2.5'
    implementation ('org.activiti:activiti-modeler:5.23.0'){
    
    
        exclude group:'org.springframework.security',module:'spring-security-config'
    }
    implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:1.3.2'
    implementation 'mysql:mysql-connector-java:8.0.17'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    testImplementation group: 'junit', name: 'junit', version: '4.11'
    testImplementation 'org.junit.jupiter:junit-jupiter-api:5.6.0'
    testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine'
}

  2、在application.yml文件里配置activiti

#activiti 配置  
  activiti:
  #自动部署验证设置:true-开启(默认)、false-关闭
    check-process-definitions: false
   # true activiti会对数据库中所有表进行更新操作。如果表不存在,则自动创建。(开发时常用) 
   #flase 默认值。activiti在启动时,会对比数据库表中保存的版本,如果没有表或者版本不匹配,将抛出异常。(生产环境常用)
   #可以在创建好表后,将其设置为false
    database-schema-update: true
   #保存历史数据级别设置为full最高级别,便于历史数据的追溯 
    history-level: full

  3、将源码包中的activiti-6/war/activiti-explorer.war解压,开始添加编辑器需要的文件以及后端代码:
在这里插入图片描述
将diagram-viewer、editor-app、modeler.html文件拷到自己项目里,同时在class文件夹下找到stencilset.json这个文件,拷到自己项目的resources下要和application.yml同级。
在这里插入图片描述
  4、解压名为activiti-6\libs\activiti-modeler-6-sources.jar的jar包,我们还需要把ModelEditorJsonRestResource、ModelSaveRestResource、StencilsetRestResource这三个java类做支撑,
也要放到我们的项目里,包名位置自己定。
在这里插入图片描述
  5、到这一步还没有完成,我们还需要修改下activiti的文件,把它自己配置的路径修改成我们自己的
  1)修改app-cfg.js文件里的路径:
在这里插入图片描述
  2)查看拷进来的三个java类的路径是否需要修改以及ModelSaveRestResource这个类的@Controller和获取参数的 @RequestParam这个注解(ps:如果你启动项目可以访问编辑页面,但是保存不成功,就需要看看这两处是不是需要修改)
在这里插入图片描述

在这里插入图片描述
  6、到这一步,我们还需要一个Controller来进入编辑页面,也就是需要新建一个流程model,把它重定向到modeler.html页面:

@Controller
@RequestMapping("/myAct")
public class MyActController {
    
    

    @Resource
    private RepositoryService repositoryService;

    @Resource
    private ObjectMapper objectMapper;

    @Resource
    private RuntimeService runtimeService;


    /**
     * 新创建model
     * @param request
     * @param response
     * @throws UnsupportedEncodingException
     */
    @RequestMapping("/create")
    public void newModel(HttpServletRequest request, HttpServletResponse response) throws UnsupportedEncodingException {
    
    
        try {
    
    
            //创建一个新的model
            Model model = repositoryService.newModel();
            //设置默认参数
            String  name = "new-process";
            String description="";
            Integer revision = 1;
            String key = "process";
            //设置model 基本配置参数
            ObjectNode modelNode = objectMapper.createObjectNode();
            modelNode.put(ModelDataJsonConstants.MODEL_NAME,name);
            modelNode.put(ModelDataJsonConstants.MODEL_DESCRIPTION,description);
            modelNode.put(ModelDataJsonConstants.MODEL_REVISION,revision);
            model.setName(name);
            model.setKey(key);
            model.setMetaInfo(modelNode.toString());
            //设置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.set("stencilset",stencilSetNode);
            //执行新增和创建编辑模型
            repositoryService.saveModel(model);
            repositoryService.addModelEditorSource(model.getId(),editorNode.toString().getBytes("utf-8"));
            response.sendRedirect(request.getContextPath() + "/view/modeler.html?modelId=" + model.getId());
        } catch (Exception e) {
    
    
            e.printStackTrace();
        }
    }

  7、启动项目就可以进入编辑页面了:
http://localhost:8080/act/myAct/create
在这里插入图片描述
  8、我们创建流程保存后还需要发布和启动,发布(部署)过的流程启动了才能用,在启动的时候我们可以绑定自己的表单用来进行数据审批等,这个可以根据自身情况进行编写。

/**
     * 部署(发布)流程
     * @param modelId
     * @return
     */
    @RequestMapping(value = "deploy/{modelId}")
    @ResponseBody
    public String deploy(@PathVariable("modelId") String modelId){
    
    
        try {
    
    
            //获取model
            Model modelData= repositoryService.getModel(modelId);
            //获取模型编辑后的数据信息
            ObjectNode objectNode = (ObjectNode) new ObjectMapper().readTree(repositoryService.getModelEditorSource(modelData.getId()));
            //根据编辑后的数据信息创建bpmn文件模板
            BpmnModel bpmnModel = new BpmnJsonConverter().convertToBpmnModel(objectNode);
            byte[] bpmnBytes = new BpmnXMLConverter().convertToXML(bpmnModel);
            String processName = modelData.getName()+".bpmn20.xml";
            //部署
            Deployment deployment = repositoryService.createDeployment().name(modelData.getName())
                                .addString(processName,new String(bpmnBytes,"UTF-8"))
                                .deploy();
            return "流程部署成功,部署ID= " + deployment.getId();
        } catch (IOException e) {
    
    
            e.printStackTrace();
            return "部署流程失败!流程图错误";
        }
    }

    /**
     *  启动流程
     */
    @RequestMapping(value = "start/{modelId}")
    @ResponseBody
    public String start(@PathVariable("modelId") String modelId){
    
    
        try {
    
    
            runtimeService.startProcessInstanceById(modelId);
            Long count = runtimeService.createProcessInstanceQuery().count();
            System.out.println("流程实例数量为:" + count);
        } catch (Exception e) {
    
    
            e.printStackTrace();
            System.out.println("流程启动失败");
        }
        return "流程启动成功";
    }

这里基本就完成了,可以看到我的编辑器页面是汉化过的,如果想汉化请点击:activiti在线编辑器汉化

猜你喜欢

转载自blog.csdn.net/code_ang/article/details/115062768
今日推荐