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

北京荨麻疹权威医院 http://baidianfeng.39.net/a_zhiliao/210116/8595950.html

一、前言:极客办公平台

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

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

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

1、协同办公业务背景

协同办公:

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

报表分析:

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

2、现有协同办公系统

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

三、平台技术理论与实践

1.平台内容简介

定位介绍:

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

平台架构:

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

平台是可以适配多种应用场景,业务报表数据也是多种多样,架构体系通过元数据建模能力适配多种业务的字段,通过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:},

5.{_id:2,host:IP2:},

6.{_id:3,host:IP3:},

7.]

8.});

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

可以通过MongoDBClient(Robo3T)进行访问进行数据运维,需要配置ReplicaSet方式进行访问,如下图:

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

5.业务数据加工

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

6.多人协作办公

多人协作办公:

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

如何实现多人协作:

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

1)数据如何查询

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

2)多人同时编辑

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

3)数据如何保存

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

4)协作数据校验

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

执行Groovy:

1.ClassLoadercl=newInvokeGroovy().getClass().getClassLoader();

2.GroovyClassLoadergroovyCl=newGroovyClassLoader(cl);

3.try{

4.ClassgroovyClass=groovyCl.parseClass(

5.newFile(InvokeGroovy.class.getResource(/groovy/Foo.groovy).toURI()));

6.IFoofoo=(IFoo)groovyClass.newInstance();

7.System.out.println(foo.run(newInteger(2),Moreparameter...));

8.GroovyObjectgroovyObject=(GroovyObject)groovyClass.newInstance();

9.System.out.println(groovyObject.invokeMethod(run,

10.newObject[]{newInteger(2),Moreparameter...}));

11.}catch(Exceptione){

12.e.printStackTrace();

13.}

执行JavaScript:

1.ScriptEngineManagermanager=newScriptEngineManager();

2.ScriptEngineengine=manager.getEngineByName(javascript);

3.StringjsFileName=expression.js;//读取js文件

4.FileReaderreader=newFileReader(jsFileName);//执行指定脚本

5.engine.eval(reader);

6.if(engineinstanceofInvocable){

7.Invocableinvoke=(Invocable)engine;//调用merge方法,并传入两个参数

8.Doublec=(Double)invoke.invokeFunction(merge,2,3);

9.System.out.println(c=+c);

}

执行Python:

1.PythonInterpreterinterpreter=newPythonInterpreter();

2.interpreter.execfile(D:/labs/hello.py);

3.//第一个参数为期望获得的函数(变量)的名字,第二个参数为期望返回的对象类型

4.PyFunctionpyFunction=interpreter.get(hello,PyFunction.class);

5.PyObjectpyObject=pyFunction.__call__();//调用函数

6.System.out.println(pyObject);

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

7.报表数据分析

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

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

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




转载请注明:http://www.aierlanlan.com/tzrz/4977.html