草庐IT

springboot+elasticsearch+neo4j+vue+activiti数字知识库管理系统

老街老街 2023-03-28 原文

前言

在数字化高度普及的时代,企事业机关单位在日常工作中会产生大量的文档,例如医院制度汇编,企业知识共享库等。针对这些文档性的东西,手工纸质化去管理是非常消耗工作量的,并且纸质化查阅难,易损耗,所以电子化管理显得尤为重要。
【springboot+elasticsearch+neo4j+vue+activiti】实现数字知识库管理系统。


一、项目概要

  1. springboot、vue前后端分离技术。
  2. 先进的富文本编辑器,满足word一键粘贴百分之百格式还原,支持视频、图文等。
  3. 全文检索elasticsearch,达到简单快速的结果搜索。
  4. neo4j知识图谱,智能分析。
  5. activiti工作流申请审核机制。
  6. 团队共享协作,常用文档收藏,热门文档排行。

二、相关技术点

1.富文本编辑器

应用当前最流行的富文本编辑器TinyMCE,支持从word、wps等一键复制粘贴,百分之百效果还原,更可以做到自定义格式设置。


image.png
<template>
  <div class="tinymce-editor">
    <Editor  v-model="editorValue" :init="editorInit" :disabled="disabled" @onClick="handleClick" />
  </div>
</template>

2.全文检索

可根据文档的任意关键字进行全文检索知识,效果如同“百度一下”,简单快速的搜集到自己所要查询的知识,解决了纸质化时代的繁琐流程。


image.png

3.知识图谱

知识图谱可视化归类,支持同作者文档的采集,同类型文档的采集,做到智能化、网格化推荐。


image.png
image.png
<dependency>
     <groupId>org.neo4j.driver</groupId>
      <artifactId>neo4j-java-driver</artifactId>
  </dependency>
  public boolean isNeo4jOpen() {
        try (Session session = neo4jDriver.session()) {
            logger.debug("连接成功:" + session.isOpen());
            return session.isOpen();
        } catch (Exception e) {
            logger.error("neo4J连接异常: "+e.getMessage());
        }
        return false;
    }

    public StatementResult excuteCypherSql(String cypherSql) {
        StatementResult result = null;
        try (Session session = neo4jDriver.session()) {
            logger.debug("CypherSql : "+cypherSql);
            result = session.run(cypherSql);
            session.close();
        } catch (Exception e) {
            logger.error("CypherSql执行异常: "+e.getMessage());
            throw e;
        }
        return result;
    }

4.工作流

此系统集成了activiti工作流引擎,遵循文档发起者提交->负责人审批的规范化流程。


image.png
//获取bpmnModel对象
   BpmnModel bpmnModel = repositoryService.getBpmnModel(historicProcessInstance.getProcessDefinitionId());
   Process process = bpmnModel.getProcesses().get(0);
   Collection<FlowElement> flowElements = process.getFlowElements();
   Map<String, String> map = new HashMap<>();
   for (FlowElement flowElement : flowElements) {
       //判断是否是连线
       if (flowElement instanceof SequenceFlow) {
           SequenceFlow sequenceFlow = (SequenceFlow) flowElement;
           String ref = sequenceFlow.getSourceRef();
           String targetRef = sequenceFlow.getTargetRef();
           map.put(ref + targetRef, sequenceFlow.getId());
       }
   }
   List<HistoricActivityInstance> list = historyService.createHistoricActivityInstanceQuery()
           .processInstanceId(instanceId)
           .list();
   Set<String> keyList = new HashSet<>();
   for (HistoricActivityInstance i : list) {
       for (HistoricActivityInstance j : list) {
           if (i != j) {
               keyList.add(i.getActivityId() + j.getActivityId());
           }
       }
   }

总结

精准全面的搜索能力,统一化管理,此套知识库管理系统以科学的方法论并且通过实际项目锤炼做到了很好的赋能效应,解决了企事业数字资产的良性全生命周期管理。源码获取链接:+Q:2500564056

有关springboot+elasticsearch+neo4j+vue+activiti数字知识库管理系统的更多相关文章

  1. ruby-on-rails - active_admin 目录中的常量警告重新声明 - 2

    我正在使用active_admin,我在Rails3应用程序的应用程序中有一个目录管理,其中包含模型和页面的声明。时不时地我也有一个类,当那个类有一个常量时,就像这样:classFooBAR="bar"end然后,我在每个必须在我的Rails应用程序中重新加载一些代码的请求中收到此警告:/Users/pupeno/helloworld/app/admin/billing.rb:12:warning:alreadyinitializedconstantBAR知道发生了什么以及如何避免这些警告吗? 最佳答案 在纯Ruby中:classA

  2. ruby-on-rails - Rails 中的 NoMethodError::MailersController#preview undefined method `activation_token=' for nil:NilClass - 2

    似乎无法为此找到有效的答案。我正在阅读Rails教程的第10章第10.1.2节,但似乎无法使邮件程序预览正常工作。我发现处理错误的所有答案都与教程的不同部分相关,我假设我犯的错误正盯着我的脸。我已经完成并将教程中的代码复制/粘贴到相关文件中,但到目前为止,我还看不出我输入的内容与教程中的内容有什么区别。到目前为止,建议是在函数定义中添加或删除参数user,但这并没有解决问题。触发错误的url是http://localhost:3000/rails/mailers/user_mailer/account_activation.http://localhost:3000/rails/mai

  3. ruby-on-rails - Rails 5 Active Record 记录无效错误 - 2

    我有两个Rails模型,即Invoice和Invoice_details。一个Invoice_details属于Invoice,一个Invoice有多个Invoice_details。我无法使用accepts_nested_attributes_forinInvoice通过Invoice模型保存Invoice_details。我收到以下错误:(0.2ms)BEGIN(0.2ms)ROLLBACKCompleted422UnprocessableEntityin25ms(ActiveRecord:4.0ms)ActiveRecord::RecordInvalid(Validationfa

  4. ruby - 查找字符串中的内容类型(数字、日期、时间、字符串等) - 2

    我正在尝试解析一个CSV文件并使用SQL命令自动为其创建一个表。CSV中的第一行给出了列标题。但我需要推断每个列的类型。Ruby中是否有任何函数可以找到每个字段中内容的类型。例如,CSV行:"12012","Test","1233.22","12:21:22","10/10/2009"应该产生像这样的类型['integer','string','float','time','date']谢谢! 最佳答案 require'time'defto_something(str)if(num=Integer(str)rescueFloat(s

  5. 区块链之加解密算法&数字证书 - 2

    目录一.加解密算法数字签名对称加密DES(DataEncryptionStandard)3DES(TripleDES)AES(AdvancedEncryptionStandard)RSA加密法DSA(DigitalSignatureAlgorithm)ECC(EllipticCurvesCryptography)非对称加密签名与加密过程非对称加密的应用对称加密与非对称加密的结合二.数字证书图解一.加解密算法加密简单而言就是通过一种算法将明文信息转换成密文信息,信息的的接收方能够通过密钥对密文信息进行解密获得明文信息的过程。根据加解密的密钥是否相同,算法可以分为对称加密、非对称加密、对称加密和非

  6. 计算机毕业设计ssm+vue基本微信小程序的小学生兴趣延时班预约小程序 - 2

    项目介绍随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱小学生兴趣延时班预约小程序的设计与开发被用户普遍使用,为方便用户能够可以随时进行小学生兴趣延时班预约小程序的设计与开发的数据信息管理,特开发了小程序的设计与开发的管理系统。小学生兴趣延时班预约小程序的设计与开发的开发利用现有的成熟技术参考,以源代码为模板,分析功能调整与小学生兴趣延时班预约小程序的设计与开发的实际需求相结合,讨论了小学生兴趣延时班预约小程序的设计与开发的使用。开发环境开发说明:前端使用微信微信小程序开发工具:后端使用ssm:VU

  7. spring.profiles.active和spring.profiles.include的使用及区别说明 - 2

    转自:spring.profiles.active和spring.profiles.include的使用及区别说明下文笔者讲述spring.profiles.active和spring.profiles.include的区别简介说明,如下所示我们都知道,在日常开发中,开发|测试|生产环境都拥有不同的配置信息如:jdbc地址、ip、端口等此时为了避免每次都修改全部信息,我们则可以采用以上的属性处理此类异常spring.profiles.active属性例:配置文件,可使用以下方式定义application-${profile}.properties开发环境配置文件:application-dev

  8. ruby - 将n维数组的每个元素乘以Ruby中的数字 - 2

    在Ruby中,是否有一种简单的方法可以将n维数组中的每个元素乘以一个数字?这样:[1,2,3,4,5].multiplied_by2==[2,4,6,8,10]和[[1,2,3],[1,2,3]].multiplied_by2==[[2,4,6],[2,4,6]]?(很明显,我编写了multiplied_by函数以区别于*,它似乎连接了数组的多个副本,不幸的是这不是我需要的)。谢谢! 最佳答案 它的长格式等价物是:[1,2,3,4,5].collect{|n|n*2}其实并没有那么复杂。你总是可以使你的multiply_by方法:c

  9. Ruby 的数字方法性能 - 2

    我正在使用Ruby解决一些ProjectEuler问题,特别是这里我要讨论的问题25(Fibonacci数列中包含1000位数字的第一项的索引是多少?)。起初,我使用的是Ruby2.2.3,我将问题编码为:number=3a=1b=2whileb.to_s.length但后来我发现2.4.2版本有一个名为digits的方法,这正是我需要的。我转换为代码:whileb.digits.length当我比较这两种方法时,digits慢得多。时间./025/problem025.rb0.13s用户0.02s系统80%cpu0.190总计./025/problem025.rb2.19s用户0.0

  10. ruby - 按数字(从大到大)然后按字母(字母顺序)对对象集合进行排序 - 2

    我正在构建一个小部件来显示奥运会的奖牌数。我有一个“国家”对象的集合,其中每个对象都有一个“名称”属性,以及奖牌计数的“金”、“银”、“铜”。列表应该排序:1.首先是奖牌总数2.如果奖牌相同,按类型分割(金>银>铜,即2金>1金+1银)3.如果奖牌和类型相同,则按字母顺序子排序我正在用ruby​​做这件事,但我想语言并不重要。我确实找到了一个解决方案,但如果感觉必须有更优雅的方法来实现它。这是我做的:使用加权奖牌总数创建一个虚拟属性。因此,如果他们有2个金牌和1个银牌,加权总数将为“3.020100”。1金1银1铜为“3.010101”由于我们希望将奖牌数排序为最高的,因此列表按降序排

随机推荐