写点什么

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

  • 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:461718

评论 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
回复
没有更多了
发现更多内容

业务学习-美团闪购

第519区

高效程序员的七个好习惯——你有吗?

小谈

程序员 面试 JVM springboot SpringCloud

分布式柔性事务之最大努力通知事务详解

奈学教育

分布式事务

听说你还没学Spring就被源码编译劝退了?30+张图带你玩转Spring编译

程序员DMZ

spring Spring源码编译

太阳马戏团在疫情下的组合式创新

石云升

商业模式 组合式创新 思想实验

四面阿里巴巴回来分享面经总结,定级P7架构师

小吴选手

架构 技术 面试 Spring Boot 阿里

自动特征工程在推荐系统中的研究

天枢数智运营

人工智能 推荐系统

忘掉 Snowflake,感受一下性能高出 587 倍的全局唯一 ID 生成算法

穿甲兵

redis 架构 分布式 CAP Go 语言

2020年7月国产数据库排行:华为、腾讯发新品,中兴、阿里结硕果

墨天轮

数据库 阿里 排行榜

五分钟让你搞懂Nginx负载均衡原理及四种负载均衡算法

架构大数据双料架构师

选择排序

wjchenge

架构师训练营 - 第五课作业 -20200708- 一致性HASH

👑👑merlan

极客大学架构师训练营 一致性哈希

猿灯塔:最详细Dubbo相关面试题

猿灯塔

蟒周刊/427:机器狗已在公开发售,支持用 Python 对其编程...

ZoomQuiet大妈

Python 大妈 蟒营® 蟒周刊 101camp

2.3万个MongoDB数据库遭黑客比特币勒索,你中招了吗?中招怎么办?

墨天轮

比特币 数据库 oracle mongodb 黑客

最详细的Java/后端学习路线

犬来八荒

nightingale安装详解

曾祥斌

一致性hash

彭阿三

一致性hash

Kafka 消息丢失与消费精确一次性

奈学教育

kafka

数据产品经理的具象化

松子(李博源)

大数据 产品经理 数据产品

ThreadPoolExecutor 线程池使用

郭儿的跋涉

线程 多线程 线程池

区块链正处于手脚并用攀爬的“攻坚时刻”

CECBC

数据上链 市场选择

系统架构师week04 Homework - 互联网架构技术手段和方案

尔东雨田

极客大学架构师训练营

原创 | TDD工具集:JUnit、AssertJ和Mockito (二十五)运行测试-在IDE中运行测试

编程道与术

Java intellij-idea 编程 TDD 单元测试

阿里大型企业级开发必用微服务:深入浅出SpringBoot2.x

小闫

spring jdk 面试 后端 springboot

java基础思维导图,让java不再难懂 (建议收藏))

码哥小胖

面试 Spring Boot Java 分布式

信创舆情一线--印度封禁59款中国App

统小信uos

App 舆情 印度

第五周作业

武鹏

AndroidStudio真机调试 - Waiting for Debugger

麦洛

Android Studio 真机调试

分布式柔性事务之最大努力通知事务详解

古月木易

分布式事务

Kafka 消息丢失与消费精确一次性

古月木易

kafka

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