写点什么

极客办公平台低代码开发应用实践

  • 2018-11-09
  • 本文字数:4988 字

    阅读完需:约 16 分钟

极客办公平台低代码开发应用实践

一、前言:极客办公平台

本篇文章介绍一下极客办公平台低代码开发应用实践,解决苏宁集团内部协作办公与报表数据分析的解决方案。极客办公也是一种比较通用的协作平台,提供了二次开发的能力,借机将经验总结分享平台化的思维,不一定是最优方案,正确与否那就“仁者见仁智者见智”了。极客办公平台(Geek office platform),简称为 GOP,是希望高效提升协作办公效率。


文章导读:开篇先介绍一下笔者从苏宁集团业务部门遇到的需求问题,毕竟是需求驱动研发;再将整理的平台技术理论与实践知识进行分享;接着介绍一下笔者当前平台创造的价值。

二、协同办公场景现状与前景

1、协同办公业务背景

协同办公:


业务人员在提报数据过程中经常需要先 excel 模板中数据填报,邮件发给某人员进行人工校对、数据汇总,如果发现问题还会反复上述工作,办公效率低下。 如下图所示:



报表分析:


业务人员在进行报表数据分析习惯使用 EXCEL,使用 EXCEL 做报表分析需要先要准备好数据,再进行配置分析字段,如果数据发送了变动,还需要重新处理,过程会存在反复。

2、现有协同办公系统

苏宁集团业务部门有很多专属的 IT 系统的 ,但是属于具体的业务系统,非平台化通用协同办公系统。IT 部门也无法为每个业务部门都提供专属的业务系统,那么如何来解决这一难题来提升业务人员的协同办公效率呢?经过总结多个业务系统的特征以及参考业界的一些产品,抽象出来了如下特征:


三、平台技术理论与实践

1.平台内容简介

定位介绍:


极客办公致力于开发云端数据平台,方便用户在云端存储和管理数据。平台的极速建模适配多种业务场景,高效协作性可以帮助用户轻松完成协作数据申报、审批、生成报表,重塑信息内容的产生、交流、分享、传播的方式。


平台架构:


业务场景,行政办公类、人事管理类、开发规划类、项目管理类等;核心能力层,平台权限管理、极速建模能力、业务数据加工、多人协同办公、报表数据分析;底层技术,Spark 计算引擎、Mongo DB 动态数据存储,详情参考下图:



平台是可以适配多种应用场景,业务报表数据也是多种多样,架构体系通过元数据建模能力适配多种业务的字段,通过 mongodb 文档数据库方式来灵活适配业务数据的存储。在业务报表需要基于多表数据按照某一个维度来展示呈现那么就有通过数据加工来处理解决业务问题。

2.平台权限管理

权限类别:


一个用户身上拥有的权限分别由个人权限、角色权限组成,个性化的权限可以直接设置到用户身上,通用的权限可以配置到某角色上,然后将角色设置到用户身上,参考下图:



权限模型:


对用户来说,从实体的角度,拥有应用的可见权限以及应用之下的报表的可见权限;当拥有了报表的可见权限,对于某报表中的权限我们又可以分为系统按钮权限(如查询按钮、提交按钮)、报表列读写权限;如果拥有了查询权限,可以分为基于哪个字段进行查询、基于哪些字段值进行查询。参考下图:


3.极速建模能力

业务数据建模


数据模型来描述了业务数据的结构,数据模型包括原始数据模型、视图数据模型以及查询条件数据模型。对于数据模型本平台提供管理台进行配置以满足不同的业务场景。


原始数据模型:


原始数据模型,不是每一个业务场景都需要原始数据模型的,当业务数据是来源于外部第三方系统,同时又需要做数据处理(加工、合并)的场景才是需要的。原始数据模型的职责是与来源的第三方系统表是映射关系,为数据报表分析而服务的。


视图数据模型:


视图数据模型,顾名思义,为展示而存在的数据模型。在 excel 客户端可以查询到的、人工录入的都是存储在视图数据模型中的。多人协作类报表一般情况下不涉及到数据加工,也就是不涉及到原始数据模型,数据一般都是存储在视图数据模型中,如人才台账报表、返利分配报表等.


查询条件模型:


查询条件模型,理解起来很简单,查询条件需要的数据模型。在 excel 客户端查询数据的时候展示出来的查询条件就是来源于这个模型,查询条件模型配置了几个查询字段,那么实际在执行查询的时候就有几个。Excel 客户端的查询条件界面则是根据这里配置的模型进行动态渲染出来的。查询字段关键属性包含展示名称、展示类型(文本框、下拉框、时间框等)、是否必填、展示位置等,这些属性对于客户端渲染以及执行查询都是必要的属性。


展示界面配置


模板元数据:


建立模板元数据,执行 excel 模板所需要的一些基本属性,如模板的名称,模板对应的视图名称等基本信息。


excel 展示模板:


用户最终使用的 excel,而这里说的 excel 展示模板就是用户最终的,我们知道在数据库中表是一个二维结构,那么 excel 的 sheet 也是一个二维结构,但是字段与列的关系是如何映射上的呢? 我们先看图 5:



这张图中绿色行是中文名称,蓝色行是英文字段名称,而字段与列的关系就是通过蓝色行中的英文字段名称来映射上的。


excel 模板上传:


当模板配置好可以通过我们的模板上传工具发布到极客办公平台之上了。当然前提是要有权限上传才可以。

4.业务数据存储

为了发挥关系数据库和非关系型数据库的各自优点,本平台将数据模型(元数据)存储与 MySQL 数据库中,而业务数据按照相应数据模型的结构将业务数据存储到 MongoDB 中,MongoDB 属于 NOSQL,存储起来比较灵活与方便。


业务数据需要保证安全性,针对 MongoDB 采取集群方式,一个主节点,多个从节点,通过如下方式进行配置主从关系:


1.  rs.initiate({   2.   _id : "repa",   3.   members : [   4.     {_id : 1, host : "IP1:27017"},  5.     {_id : 2, host : "IP2:27017"},   6.     {_id : 3, host : "IP3:27017"},   7.     ]    8.     }); 

复制代码


同时对于主节点中的数据自动备份到 FTP 服务器上来保证过程中的数据的可靠性。参考下图:



可以通过 MongoDB Client(Robo 3T)进行访问进行数据运维,需要配置 Replica Set 方式进行访问,如下图:



对于已有的业务系统如果通过极客办公平台进行数据查询、数据导出,是可以将 API 注册到极客办公平台中的,但是要求 API 是需要发布成为苏宁内部分布式服务,这样带来带来的好处是用户首先经过极客办公平台,当数据导出任务发起后会进入平台任务队列,这样就可以进行流量控制避免对业务系统压力过大。参考下图:


5.业务数据加工

在不少的报表场景中会存在需要提供定时任务的方式对数据加工来满足某种需要。那么就需要一定的机制来解决这样的场景。数据加工规则是可以配置的,在大数据平台创建定时任务来读取数据加工规则进行数据加工。参考下图:


6.多人协作办公

多人协作办公:


是指在目标实施过程中,部门与部门之间、个人与个人之间的协调与配合。能够实现团队协作,比如,项目管理、流程管理、事务管理等等。这样才能做到随需应变,动态适应,实现柔性管理。


如何实现多人协作:


极客办公的客户端是基于 excel 基础之上做了插件,增加了主菜单报表功能区、选择报表、查询按钮、保存按钮、导入数据、导出数据等。


1) 数据如何查询


用户进入极客办公客户端并已经完成切换到具体的报表,点击查询按钮弹出查询条件对话框,在渲染查询对话框的时候会到数据库中寻找定义的查询条件模型,根据模型定义的字段进行渲染,展示名称、展示类型(文本框、下拉框、时间框等)、是否必填、展示位置等,面向不同的场景,查询界面展示的查询字段是不一样的,这个取决于上述极速建模中提到的查询条件模型。当对话框渲染出来以后,用户可以填写或选择所需的值,最后点击确认按钮就进入执行查询,稍等片刻就可以展示查询结果了。


2) 多人同时编辑


当查询出来结果后,用户可以在表格的最后一行拉出一空行或者在已有数据的位置插入一空行,根据模板要求用户按照 excel 传统方式进行录入数据、编辑数据。


3) 数据如何保存


用户点击保存按钮,在点击保存数据的时候客户端可以识别哪些新增行、哪些是修改行,客户端将新增和变更数据一起提交到服务端。服务端根据配置的校验进行校验合法性,如不符合要求的时候客户端会弹出提示框提醒用户,如果符合要求那么就会成功提交到后端数据库中。我们通过一张流程图可以理解清楚数据的保存的原理,如下图:



4) 协作数据校验


在多人协作报表场景,经常会遇到数据要满足某些约束才可以保存到库里,对于不同的报表数据校验规则少量有同样的规则,但是大部分是完全不一样的,那么我们如何解决这样的问题呢?对于极客办公平台是提供的是通用的能力,不可能新支持一张报表就要发布新的版本的,那么就会要求我们支持配置校验逻辑。如何达到这一效果呢?初步思考下是需要一种脚本语言来支持该场景,目前了解到像 Groovy、JavaScript、Python 等脚本语言应该都是符合要求的,JDK 中也都内置了这三种脚本语言的执行引擎,所以这三类脚本都是可以在 JVM 之上进行执行的,使用起来也是比较方便的。


执行 Groovy:


1.  ClassLoader cl = new InvokeGroovy().getClass().getClassLoader();    2.  GroovyClassLoader groovyCl = new GroovyClassLoader(cl);    3.  try {    4.      Class groovyClass = groovyCl.parseClass(  5.      new File(InvokeGroovy.class.getResource("/groovy/Foo.groovy").toURI()));6.      IFoo foo = (IFoo) groovyClass.newInstance();    7.      System.out.println(foo.run(new Integer(2), "More parameter..."));    8.      GroovyObject groovyObject = (GroovyObject) groovyClass.newInstance();   9.      System.out.println(groovyObject.invokeMethod("run",   10.              new Object[]{new Integer(2),"More parameter..."}));     11.  } catch (Exception e) {    12.      e.printStackTrace();    13.  }  
复制代码


执行 JavaScript:


1.  ScriptEngineManager manager = new ScriptEngineManager();  2.  ScriptEngine engine = manager.getEngineByName("javascript");  3.  String jsFileName = "expression.js"; // 读取js文件  4.  FileReader reader = new FileReader(jsFileName); // 执行指定脚本  5.  engine.eval(reader);  6.  if (engine instanceof Invocable) {  7.      Invocable invoke = (Invocable) engine; // 调用merge方法,并传入两个参数  8.      Double c = (Double) invoke.invokeFunction("merge", 2, 3);  9.      System.out.println("c = " + c);  }  

复制代码


执行 Python:


1.  Python Interpreter interpreter = new PythonInterpreter();  2.  interpreter.execfile("D:/labs/hello.py");  3.  //第一个参数为期望获得的函数(变量)的名字,第二个参数为期望返回的对象类型  4.  PyFunction pyFunction = interpreter.get("hello", PyFunction.class);   5.  PyObject pyObject = pyFunction.__call__(); // 调用函数  6.  System.out.println(pyObject);  

复制代码


Groovy 的语法与 Java 语言比较相像,而且功能也比较强大,最终我们选择了 Groovy 脚本作为校验规则的语言。在使用起来就比较简单了,首先我们提供了一个校验框架,校验框架可以在数据保存的时候进行寻找操作的报表配置了哪几种校验器,寻找结束后进行一个个执行,最后将执行的校验结果返回给用户,如下图:


7.报表数据分析

我们知道 excel 自身提供强大的数据分析能力,这里提到的报表数据分析也是在 excel 基础之上做的包装。数据分析的基础是数据,在极客办公当前的场景下数据是查询出来的,基于这种查询出来的数据在 excel 做数据分析需要按照 excel 的方式配置不少的东西,我们这里提到的数据分析是将配置的参数信息迁到了管理台上,只需要配置一次,当用户做报表数据分析的时候点击一下数据分析按钮就可以到达所期望的目标。

四、极客办公平台带来的价值

人工进行发送 excel 文件、校对、合并是一件非常费时的体力活,而极客办公平台通过自动汇总数据替换了传统的 excel 文件传递的方式,自动校验替换人工校验,大大提升了办公效率。对于一些简易场景的流程审批可以通过状态字段来流程审批。该平台支持多种业务场景,对于不同的业务场景按照一定规则进行配置就可以很快进行上线。同时该平台是自研系统代替外部商业系统,保障苏宁集团信息安全。

作者简介

张曙光,苏宁易购 IT 总部员工平台研发中心高级技术经理,负责极客办公平台、机器人服务平台等应用系统的架构、开发工作。曾研究分析过多款 Oracle、Salesforce 等大厂产品,参与电信运营商行业所需的中间件平台多个组件的系统设计与开发,尤其是在开发工具领域拥有较深的理解和丰富的项目经验。同时拥有开放的心态,乐于接受新事物、新技术,勇于挑战新的困难。


2018-11-09 14:461692

评论 6 条评论

发布
用户头像
很好的思路
2020-03-27 20:00
回复
用户头像
MongoDB 是挺灵活的~
2018-11-12 17:12
回复
用户头像
。。。。
2018-11-12 08:59
回复
用户头像
非常好的思路!!
2018-11-11 10:55
回复
用户头像
good job!
2018-11-11 10:38
回复
用户头像
用户体验好,解决很多实际问题,给日常工作带来很多便利,赞一个
2018-11-11 10:34
回复
没有更多了
发现更多内容

国外服务器选购技巧大揭秘!别再盲目选择,先学会这些

一只扑棱蛾子

国外服务器选购

BOE(京东方)ADS Pro专场技术策源地论坛举办 聚焦行业领先技术共研显示新未来

爱极客侠

华为音乐空间音频出行歌单新鲜上线,打造五一沉浸式听音之旅

最新动态

【2022深圳ArchSummit 】大数据架构稳定性保障实践

zuozewei

深圳 ArchSummit

助力企业部署国产云原生数据库 XSKY星辰天合与云猿生完成产品互兼容认证

XSKY星辰天合

首个!腾讯云ES通过中国信通院检索增强生成(RAG)技术要求专项测试

Geek_2d6073

🎉重大更新!开源无代码 / 低代码平台 NocoBase v1.0 正式发布!

NocoBase

开源 低代码 开发工具 无代码 无代码平台

华为云云原生FinOps解决方案,释放云原生最大价值

华为云开发者联盟

云原生 华为云 华为云开发者联盟 华为云云原生 企业号2024年4月PK榜

利用人工智能ChatGPT批量生成测试数据,测试工作再也不愁数据!

测试人

软件测试 测试开发

面试官:素有Java锁王称号的‘StampedLock’你知道吗?我:这什么鬼?

EquatorCoco

Java 编程

程序员都在用哪些神器提升工作效率

小魏写代码

Go-Zero从0到1实现微服务项目开发(二)

王中阳Go

Go 分布式 微服务 Go进阶 gozero

In-Depth Comparison of IPQ5332, IPQ5322, IPQ5312, and IPQ5302

wallyslilly

IPQ5332 ipq5322

模块3作业

小畅

架构实战营 - 模块四 - 作业

小畅

Spring Boot 编写 API 的 10条最佳实践

不在线第一只蜗牛

Java Spring Boot 后端

评测8款免费开源PLM工具

爱吃小舅的鱼

PLM软件 项目周期管理

IPQ9574 + IPQ5322 wifi CPU - Which is better for your wifi project?

wifi6-yiyi

ipq9574 IPQ5332

解决@MapKey is required

源字节1号

开源 软件开发 前端开发 后端开发 小程序开发

深圳发布重大开源项目申报指南,助推OpenHarmony生态发展

科技热闻

数字化转型新篇章:企业通往智能化的新范式

优秀

数字化转型 智能化

0经验,我是如何做大数据测试开发的?

京东零售技术

大数据 测试 企业号 4 月 PK 榜

一文读懂Partisia Blockchain 的互操作方案:Oracle 服务框架

西柚子

Node.js fs 模块详尽分析与实际应用

Apifox

node.js 程序员 前端 后端 FS

性能基础之速读【性能之巅:洞悉系统、企业与云计算】

zuozewei

性能 书籍推荐

低代码与定制开发相结合:构建质量管理系统的新途径

天津汇柏科技有限公司

创业 低代码 软件开发定制 质量管理系统 质量管理QMS系统

单个大模型的训练成本,两年后或涨至近百亿美元

算AI

人工智能 AI

NFTScan | 04.22~04.28 NFT 市场热点汇总

NFT Research

NFT NFTScan

极客办公平台低代码开发应用实践_其他_蒋旭曦_InfoQ精选文章