当前位置: 首页 > Web前端 > vue.js

springboot整合activiti,前端vue

时间:2023-04-01 12:48:09 vue.js

前言activiti是目前比较流行的工作流框架,但是activiti还是比较难学的,如何集成在线编辑器,如何与业务表单绑定,如何与系统权限绑定当然,这些必须要考虑的问题,并不是说仅仅将activiti集成到系统中就足够了。现在国内比较流行前后端分离的模式。过去,前端和后端放在一个项目中。界面风格杂乱难维护。前后端开发不是很方便。目前前端已经做成工程化的形式,比如国内的Vue,国外的React等。为了跟风,自己做了一套springboot-vue-activiti快速开发的小脚手架,不适合做大型项目。毕竟一个人的开发能力是有限的,但是对于中小微项目,以及带来审批业务的项目来说,那简直就是福音。一、效果展示1、模型设计者2、流程节点设置审批人员可直接按角色、部门、部门负责人等选择人员。三、审批进度查询二、操作流程1、引入activiti依赖org.activitiactiviti-spring-boot-starter-basic<版本>${activiti.version}org.mybatismybatisdependency>org.activitiactiviti-diagram-rest${activiti.version}org.activitiactiviti-modeler${activiti.version}2.编辑器代码和本地化3.application.yml配置activiti:check-process-definitions:false#启用作业执行器async-executor-activate:false#启用异步执行Job-executor-activate:false4.数据库表3.业务表单与系统权限的绑定1.思路1.新建一个流程定义扩展表(用于存储流程部署的基本信息,关联的业务表名,前端路由信息,业务表单类型等),流程部署完成后,将部署基础信息插入到流程定义扩展表中,然后编辑发布的流程,将本流程的分类插入到扩展表中,并关联表单信息2.关于自定义节点设置,主要用于定义每个节点被分配到哪个角色,或者具体由哪个人批准。创建节点扩展表(存储节点转移信息、指示者ID、角色ID等)。2.部分代码//获取模型ModelmodelData=repositoryService.getModel(id);byte[]bytes=repositoryService.getModelEditorSource(modelData.getId());if(bytes==null){returnResult.error("模型数据为空,请设计流程成功并先保存");}try{JsonNodemodelNode=newObjectMapper().readTree(bytes);BpmnModel模型=newBpmnJsonConverter().convertToBpmnModel(modelNode);if(model.getProcesses().size()==0){returnResult.error("模型不符合要求,请至少设计一个主线进程");}byte[]bpmnBytes=newBpmnXMLConverter().convertToXML(model);//部署发布模型流程StringprocessName=modelData.getName()+".bpmn20.xml";部署deployment=repositoryService.createDeployment().name(modelData.getName()).addString(processName,newString(bpmnBytes,"UTF-8"))。部署();字符串metaInfo=modelData.getMet一个信息();JSONObjectmetaInfoMap=JSON.parseObject(metaInfo);//设置流程分类,保存扩展流程到数据库Listlist=repositoryService.createProcessDefinitionQuery().deploymentId(deployment.getId()).list();for(ProcessDefinitionpd:list){ActZprocessactZprocess=newActZprocess();actZprocess.setId(pd.getId());actZprocess.setName(modelData.getName());actZprocess.setProcessKey(modelData.getKey());actZprocess.setDeploymentId(deployment.getId());actZprocess.setDescription(metaInfoMap.getString(ModelDataJsonConstants.MODEL_DESCRIPTION));actZprocess.setVersion(pd.getVersion());actZprocess.setDiagramName(pd.getDiagramResourceName());actZprocessService.setAllOldByProcessKey(modelData.getKey());actZprocess.setLatest(真);行动过程ssService.save(actZprocess);}}catch(Exceptione){字符串错误=e.toString();log.error(e.getMessage(),e);if(err.indexOf("NCName")>-1){returnResult.error("部署失败:流程设计中的流程名称不能为空,不能以数字或特殊字符开头!");}if(err.indexOf("PRIMARY")>-1){returnResult.error("部署失败:模型已发布,key唯一!");}returnResult.error("部署失败!");}returnResult.ok("部署成功");/*获取高亮实时流程图*/@RequestMapping(value="/getHighlightImg/{id}",method=RequestMethod.GET)publicvoidgetHighlightImg(@PathVariableStringid,HttpServletResponseresponse){InputStreaminputStream=null;ProcessInstancepi=null;StringpicName="";//查询历史HistoricProcessInstancehpi=historyService.createHistoricProcessInstanceQuery().processInstanceId(id).singleResult();if(hpi.getEndTime()!=null){//结束束流程序获取原图ProcessDefinitionpd=repositoryService.createProcessDefinitionQuery().processDefinitionId(hpi.getProcessDefinitionId()).singleResult();picName=pd.getDiagramResourceName();inputStream=repositoryService.getResourceAsStream(pd.getDeploymentId(),pd.getDiagramResourceName());}else{pi=runtimeService.createProcessInstanceQuery().processInstanceId(id).singleResult();BpmnModelbpmnModel=repositoryService.getBpmnModel(pi.getProcessDefinitionId());ListhighLightedActivities=newArrayList();//高亮任务节点Listtasks=taskService.createTaskQuery().processInstanceId(id).list();对于(任务任务:任务){highLightedActivities.add(task.getTaskDefinitionKey());}ListhighLightedFlows=newArrayList();过程图生成器diagramGenerator=processEngineConfiguration.getProcessDiagramGenerator();//"宋体"inputStream=diagramGenerator.generateDiagram(bpmnModel,"png",highLightedActivities,highLightedFlows,"宋体","宋体","宋体",null,1.0);picName=pi.getName()+".png";}try{response.setContentType("application/octet-stream;charset=UTF-8");response.setHeader("Content-Disposition","attachment;filename="+URLEncoder.encode(picName,"UTF-8"));字节[]b=新字节[1024];intlen=-1;while((len=inputStream.read(b,0,1024))!=-1){response.getOutputStream().write(b,0,len);}response.flushBuffer();}catch(IOExceptione){log.error(e.toString());thrownewJeecgBootException("读取进程图片失败");}}总结以上只展示了部分代码和部分效果图。正常的审批流转业务,报批、申请人撤销、重新申请、审批人拒绝、委托他人审批,会签,进程挂起,进程实时跟踪,并行网关,专属网关,监控,待办事项,完成消息通知等都是必须的,我就不一一展示了,有需要的可以+q:2500564056