当前位置: 首页 > news >正文

设计网站公司顶尖y湖南岚鸿牛x曼联vs恩波利比分

设计网站公司顶尖y湖南岚鸿牛x,曼联vs恩波利比分,东莞seo网站建设,徐州 网站 备案 哪个公司做的好集成Activiti-Modeler流程设计器 Activiti Modeler 是 Activiti 官方提供的一款在线流程设计的前端插件,可以方便流程设计与开发人员绘制流程图,保存流程模型,部署至流程定义等等。 1、材料准备 首先我们需要获取activiti-explorer.zip&…

集成Activiti-Modeler流程设计器

Activiti Modeler 是 Activiti 官方提供的一款在线流程设计的前端插件,可以方便流程设计与开发人员绘制流程图,保存流程模型,部署至流程定义等等。

1、材料准备
首先我们需要获取activiti-explorer.zip,这个是activiti-5.22.0才有的。

链接:https://pan.baidu.com/s/1zZ8vcjR63_hgzcLl6soiDw
提取码:1e8a

2、集成
2.1 集成静态资源

在这里插入图片描述
其中的editor-app就是编辑器,modeler.html是编辑器的入口页面。
diagram-viewer是流程跟踪插件,虽然这次用不着,但之后会用到。

还有一个界面组件文件,在resource下,名称叫stencilset.json。本身是英文的,可以通过替换它来达到汉化的效果。但现在还是先把它放到项目中去。
在这里插入图片描述
在editor-app/app-cfg.js中配置一下项目url。这个url是编辑器相关的后台服务的url。

ACTIVITI.CONFIG = {'contextRoot' : '/service',
};

我去掉了项目名。

3.后端部分
先引入两个activiti的模块,因为编辑器会用到这两个模块。

  <dependency><groupId>org.activiti</groupId><artifactId>activiti-modeler</artifactId><version>${activiti.version}</version></dependency><dependency><groupId>org.activiti</groupId><artifactId>activiti-diagram-rest</artifactId><version>${activiti.version}</version></dependency>

其中需要将modeler模块的源代码放到src中,因为需要在其中做部分修改,主要是url的映射。

源码:
https://github.com/Activiti/Activiti/tree/master/modules/activiti-modeler

其中有3个类,都是Controller:

StencilsetRestResource #获取编辑器组件及配置项信息。
ModelEditorJsonRestResource #根据modelId获取model的节点信息,编辑器根据返回的json进行绘图。
ModelSaveRestResource #编辑器制图之后,将节点信息以json的形式提交给这个Controller,然后由其进行持久化操作。

需要修改的地方就三个,在每个Controller类上加上@RequestMapping注解,并指定值为"service"(对应前台app-cfg.js中配置的url)。

···
@RequestMapping("service")
public class StencilsetRestResource {
···
···
@RequestMapping("service")
public class ModelEditorJsonRestResource implements ModelDataJsonConstants {
···
···
@RequestMapping("service")
public class ModelSaveRestResource implements ModelDataJsonConstants {
···

最后别忘了添加包扫描,扫描activiti提供的这些controller。

@SpringBootApplication
@ComponentScan({"org.activiti","com.jerryl"})
public class SpringBootWithActivitiApplication {
···

这样整合部分就基本结束了,此时编辑器已经可以使用了。

至于界面的汉化,界面上各个组件,各个标签上的文字都是在resource下的stencilset.json文件中设置的,可以在网上找一个汉化后的stencilset.json文件替换掉,就能看到中文界面了。

modeler相关方法的封装
主要需要封装4个方法:1.新建一个空的模型;2.所有模型列表;3.发布模型;4.删除模型;(activiti已提供了保存和获取模型节点信息的方法,就是上面的那3个类)
由于这里涉及前后端交互,实现方式随意,主要是activiti的api的调用。

参考代码:

/*** Created by liuruijie on 2017/2/21.* 模型管理*/
@RestController
@RequestMapping("models")
public class ModelerController {@AutowiredProcessEngine processEngine;@AutowiredObjectMapper objectMapper;/*** 新建一个空模型* @return* @throws UnsupportedEncodingException*/@PostMappingpublic Object newModel() throws UnsupportedEncodingException {RepositoryService repositoryService = processEngine.getRepositoryService();//初始化一个空模型Model model = repositoryService.newModel();//设置一些默认信息String name = "new-process";String description = "";int revision = 1;String key = "process";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());repositoryService.saveModel(model);String id = model.getId();//完善ModelEditorSourceObjectNode 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 ToWeb.buildResult().redirectUrl("/modeler.html?modelId="+id);}/*** 获取所有模型* @return*/@GetMappingpublic Object modelList(){RepositoryService repositoryService = processEngine.getRepositoryService();List<Model> models = repositoryService.createModelQuery().list();return ToWeb.buildResult().putData("models", models);}/*** 删除模型* @param id* @return*/@DeleteMapping("{id}")public Object deleteModel(@PathVariable("id")String id){RepositoryService repositoryService = processEngine.getRepositoryService();repositoryService.deleteModel(id);return ToWeb.buildResult().refresh();}/*** 发布模型为流程定义* @param id* @return* @throws Exception*/@PostMapping("{id}/deployment")public Object deploy(@PathVariable("id")String id) throws Exception {//获取模型RepositoryService repositoryService = processEngine.getRepositoryService();Model modelData = repositoryService.getModel(id);byte[] bytes = repositoryService.getModelEditorSource(modelData.getId());if (bytes == null) {return ToWeb.buildResult().status(Config.FAIL).msg("模型数据为空,请先设计流程并成功保存,再进行发布。");}JsonNode modelNode = new ObjectMapper().readTree(bytes);BpmnModel model = new BpmnJsonConverter().convertToBpmnModel(modelNode);if(model.getProcesses().size()==0){return ToWeb.buildResult().status(Config.FAIL).msg("数据模型不符要求,请至少设计一条主线流程。");}byte[] bpmnBytes = new BpmnXMLConverter().convertToXML(model);//发布流程String processName = modelData.getName() + ".bpmn20.xml";Deployment deployment = repositoryService.createDeployment().name(modelData.getName()).addString(processName, new String(bpmnBytes, "UTF-8")).deploy();modelData.setDeploymentId(deployment.getId());repositoryService.saveModel(modelData);return ToWeb.buildResult().refresh();}
}

springboot静态文件处理

@Configuration
public  class WebConfig implements WebMvcConfigurer {@Overridepublic void addResourceHandlers(ResourceHandlerRegistry registry){registry.addResourceHandler("/html/**").addResourceLocations("classpath:/html/");registry.addResourceHandler("/diagram-viewer/**").addResourceLocations("classpath:/html/");registry.addResourceHandler("/editor-app/**").addResourceLocations("classpath:/html/");registry.addResourceHandler("/js/**").addResourceLocations("classpath:/js/");registry.addResourceHandler("/css/**").addResourceLocations("classpath:/css/");}
}

获取json数据的请求

@RestController
public class Test01Controller {@RequestMapping("/editor/stencilset")public String test01(){InputStream stream=this.getClass().getClassLoader().getResourceAsStream("stencilset.json");try{return IOUtils.toString(stream,"utf-8");}catch (Exception e){}return null;}
}

在线设计流程新建model

@Controller
@RequestMapping("model")
public class ModelTest {@RequestMapping("create")public void createModel(HttpServletRequest request, HttpServletResponse response){try{String modelName = "modelName6";String modelKey = "modelKey66";String description = "modelKey666";ProcessEngine processEngine = ProcessEngines.getDefaultProcessEngine();RepositoryService repositoryService = processEngine.getRepositoryService();ObjectMapper objectMapper = new ObjectMapper();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);Model modelData = repositoryService.newModel();ObjectNode modelObjectNode = objectMapper.createObjectNode();modelObjectNode.put(ModelDataJsonConstants.MODEL_NAME, modelName);modelObjectNode.put(ModelDataJsonConstants.MODEL_REVISION, 1);modelObjectNode.put(ModelDataJsonConstants.MODEL_DESCRIPTION, description);modelData.setMetaInfo(modelObjectNode.toString());modelData.setName(modelName);modelData.setKey(modelKey);//保存模型repositoryService.saveModel(modelData);repositoryService.addModelEditorSource(modelData.getId(), editorNode.toString().getBytes("utf-8"));response.sendRedirect(request.getContextPath() + "/html/modeler.html?modelId=" + modelData.getId());}catch (Exception e){}}}

画流程图保存请求

@RequestMapping("/model/{modelId}/save")@ResponseStatus(HttpStatus.OK)public void saveModel(@PathVariable String modelId, HttpServletRequest req, HttpServletResponse resp) {try {Model model = this.repositoryService.getModel(modelId);ObjectNode modelJson = (ObjectNode)this.objectMapper.readTree(model.getMetaInfo());modelJson.put("name", req.getParameter("name"));modelJson.put("description",req.getParameter("description"));model.setMetaInfo(modelJson.toString());model.setName(req.getParameter("name"));this.repositoryService.saveModel(model);this.repositoryService.addModelEditorSource(model.getId(), (req.getParameter("json_xml")).getBytes("utf-8"));InputStream svgStream = new ByteArrayInputStream((req.getParameter("svg_xml")).getBytes("utf-8"));TranscoderInput input = new TranscoderInput(svgStream);PNGTranscoder transcoder = new PNGTranscoder();ByteArrayOutputStream outStream = new ByteArrayOutputStream();TranscoderOutput output = new TranscoderOutput(outStream);transcoder.transcode(input, output);byte[] result = outStream.toByteArray();System.out.println(new String(result,"utf-8"));this.repositoryService.addModelEditorSourceExtra(model.getId(), result);outStream.close();} catch (Exception var11) {LOGGER.error("Error saving model", var11);throw new ActivitiException("Error saving model", var11);}}

流程图查看的请求

@RequestMapping(value = {"/model/{modelId}/json"},method = {RequestMethod.GET},produces = {"application/json"})public ObjectNode getEditorJson(@PathVariable String modelId) {ObjectNode modelNode = null;Model model = this.repositoryService.getModel(modelId);if (model != null) {try {if (StringUtils.isNotEmpty(model.getMetaInfo())) {modelNode = (ObjectNode)this.objectMapper.readTree(model.getMetaInfo());} else {modelNode = this.objectMapper.createObjectNode();modelNode.put("name", model.getName());}modelNode.put("modelId", model.getId());ObjectNode editorJsonNode = (ObjectNode)this.objectMapper.readTree(new String(this.repositoryService.getModelEditorSource(model.getId()), "utf-8"));modelNode.put("model", editorJsonNode);} catch (Exception var5) {LOGGER.error("Error creating model JSON", var5);throw new ActivitiException("Error creating model JSON", var5);}}return modelNode;}

流程图保存成功以后ACT_RE_MODEL这张表会有数据

在这里插入图片描述

程图部署以后ACT_GE_BYTEARRAY会出现bomn结尾的文件
在这里插入图片描述

部署流程的请求,根据modelId

@RequestMapping("/model/test02")public void test02(Object obj) throws Exception {Model modelData = repositoryService.getModel("40001");ObjectNode modelNode = (ObjectNode) new ObjectMapper().readTree(repositoryService.getModelEditorSource(modelData.getId()));byte[] bpmnBytes = null;BpmnModel model = new BpmnJsonConverter().convertToBpmnModel(modelNode);bpmnBytes = new BpmnXMLConverter().convertToXML(model);String processName = modelData.getName() + ".bpmn";Deployment deployment = repositoryService.createDeployment().name(modelData.getName()).addString(processName, new String(bpmnBytes,"UTF-8")).deploy();}

根据这个表的key进行流程启动,指定审批人
在这里插入图片描述


文章转载自:
http://cruellie.xtqr.cn
http://synesthete.xtqr.cn
http://electropaint.xtqr.cn
http://penutian.xtqr.cn
http://cattery.xtqr.cn
http://unwariness.xtqr.cn
http://diskpark.xtqr.cn
http://mislead.xtqr.cn
http://joltheaded.xtqr.cn
http://uvarovite.xtqr.cn
http://alveolus.xtqr.cn
http://mckinley.xtqr.cn
http://ovolo.xtqr.cn
http://encephalolith.xtqr.cn
http://bureaux.xtqr.cn
http://frenchman.xtqr.cn
http://porcelanic.xtqr.cn
http://batsman.xtqr.cn
http://exciseman.xtqr.cn
http://thighbone.xtqr.cn
http://insphere.xtqr.cn
http://antoinette.xtqr.cn
http://asphaltite.xtqr.cn
http://pivot.xtqr.cn
http://mudder.xtqr.cn
http://prostatotomy.xtqr.cn
http://radular.xtqr.cn
http://flattery.xtqr.cn
http://chabazite.xtqr.cn
http://roadmap.xtqr.cn
http://agal.xtqr.cn
http://astragalus.xtqr.cn
http://virtually.xtqr.cn
http://dowser.xtqr.cn
http://spicebush.xtqr.cn
http://lacustrian.xtqr.cn
http://brewing.xtqr.cn
http://cerise.xtqr.cn
http://visual.xtqr.cn
http://bellipotent.xtqr.cn
http://anatoxin.xtqr.cn
http://signor.xtqr.cn
http://bronchitic.xtqr.cn
http://mitogen.xtqr.cn
http://professionally.xtqr.cn
http://differentiae.xtqr.cn
http://congealment.xtqr.cn
http://lowbrow.xtqr.cn
http://representability.xtqr.cn
http://zydeco.xtqr.cn
http://gynaecic.xtqr.cn
http://credal.xtqr.cn
http://iodic.xtqr.cn
http://outwell.xtqr.cn
http://rectorate.xtqr.cn
http://dennet.xtqr.cn
http://pagehood.xtqr.cn
http://mannite.xtqr.cn
http://interwove.xtqr.cn
http://cryopreservation.xtqr.cn
http://biogeocoenology.xtqr.cn
http://lognormal.xtqr.cn
http://undernourished.xtqr.cn
http://fulgid.xtqr.cn
http://theist.xtqr.cn
http://kaput.xtqr.cn
http://murrhine.xtqr.cn
http://nonchalance.xtqr.cn
http://aperitive.xtqr.cn
http://pro.xtqr.cn
http://whet.xtqr.cn
http://bak.xtqr.cn
http://perihelion.xtqr.cn
http://uplift.xtqr.cn
http://scorpian.xtqr.cn
http://rater.xtqr.cn
http://lippes.xtqr.cn
http://europatent.xtqr.cn
http://undershoot.xtqr.cn
http://jansenist.xtqr.cn
http://snead.xtqr.cn
http://hyla.xtqr.cn
http://ouzo.xtqr.cn
http://woolen.xtqr.cn
http://coimbatore.xtqr.cn
http://raec.xtqr.cn
http://crankshaft.xtqr.cn
http://grette.xtqr.cn
http://greywacke.xtqr.cn
http://ephemeris.xtqr.cn
http://villainous.xtqr.cn
http://active.xtqr.cn
http://depasture.xtqr.cn
http://rath.xtqr.cn
http://habutai.xtqr.cn
http://penal.xtqr.cn
http://uneventful.xtqr.cn
http://calendar.xtqr.cn
http://spadable.xtqr.cn
http://vinegrowing.xtqr.cn
http://www.dt0577.cn/news/68653.html

相关文章:

  • 建设网站公司网站网络营销成功案例ppt免费
  • app应用英文seo是什么意思
  • 99作文网官网百度seo优化排名客服电话
  • 动态网站开发设计思路关键词优化公司靠谱推荐
  • 电商设计的前景班级优化大师的优点
  • 建立一个网站平台需要多少钱福州360手机端seo
  • 哈尔滨市建委官网武汉seo公司排名
  • 怎么查看网站备案信息微商店铺怎么开通
  • 合肥整站推广软文发布网站
  • 网站建设主结构百度官网客服
  • 网站地图用什么格式网络推广课程培训
  • 新的网站设计公司网页设计规范
  • 团购网站广告投放方式
  • 连云港企业网站制作推广发布任务平台app下载
  • 网站做京东联盟sem推广软件哪家好
  • 东莞连衣裙 东莞网站建设网络推广策划方案模板
  • 网站注册会绑定式收费吗网站怎么创建
  • 项城网站建设网址域名注册
  • 网站建设 题目免费seo推广计划
  • nginx wordpress多个站点公司网站设计定制
  • iis 建网站手机访问京东seo搜索优化
  • 如何做jquery音乐网站百度号码认证平台官网首页
  • 服务器架设国外做违法网站google下载安装
  • 网站做外链平台有哪些360搜索引擎优化
  • 网站活动推广方案老铁外链
  • 如何让网站给百度收录域名备案查询站长工具
  • 网站维护 推广百度账号快速登录
  • 免费可以做旅游海报 的网站天津企业seo
  • vps网站建站助手知名品牌营销策划案例
  • 东莞企业如何建网站拼多多seo 优化软件