HarmonyOS开发者限时福利来啦!最高10w+现金激励等你拿~ 了解详情
写点什么

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

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

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

程序员面试太卷?我选择背这份阿里最新Java面试八股文(详解版)

Java面试那些事儿

Java 面试 Java 面试 java程序员 java 编程

微服务的拆分与设计原则

阿泽🧸

微服务 8月月更

关于 SAP ABAP 字符变量和字符串变量字符个数的一个知识点

汪子熙

字符串 SAP abap Netweaver 8月月更

openEuler代码贡献之星:麒麟软件裴建康

openEuler

开发者 成长 代码规范 openEuler 开源社区

leetcode 303. Range Sum Query - Immutable 区域和检索 - 数组不可变(简单)

okokabcd

LeetCode 算法与数据结构

HPC、AI与云计算:当智能时代三叉戟在亚马逊云科技完美融合

脑极体

把充电宝拆了看看

Sher10ck

拆解 充电宝

开源一夏 | Node.js实战对于Buffer和Stream模块系统的深入剖析

恒山其若陋兮

开源 8月月更

每日一R「09」类型系统(三)

Samson

8月月更 ​Rust

短视频源码APP开发——短视频的功能

开源直播系统源码

软件开发 直播系统源码 短视频直播系统

从函数计算到 Serverless 架构

阿里巴巴中间件

阿里云 开源 Serverless 云原生

头脑风暴:最长递增子序列

HelloWorld杰少

算法 LeetCode 数据结构, 8月月更

百炼成钢 —— 声网实时网络的自动运维丨Dev for Dev 专栏

声网

Dev for Dev 自动运维

5 分钟温故知新 RxJS 【转换操作符】

掘金安东尼

前端 函数式编程 8月月更

[极致用户体验] 网页里的「返回」应该用 history.back 还是 push ?

HullQin

CSS JavaScript html 前端 8月月更

个推TechDay直播预告 | 8月24日晚19:30,实时数仓搭建保姆级教程开课

个推

数据仓库 实时数仓 Flink 平台

HTML

武师叔

8月月更

深度学习公式推导(3):初探神经网络

老崔说架构

【Java】:数组的创建、赋值、访问以及长度

翼同学

Java 学习 编程语言 分享 8月月更

字节跳动嵌入式数据分析最佳实践

字节跳动数据平台

字节跳动 数据分析 BI 嵌入式分析 数据看板

IPv6邻居发现协议详解

穿过生命散发芬芳

NDP 8月月更

打破底层技术瓶颈,RTC技术或成为物联网市场的强劲引擎

擎声科技

物联网 RTC sdk 实时音视频 擎声Qtt

C语言基本的窗口开发

计算机魔术师

8月月更

【源码解析】MyBatis结果集映射和参数绑定

小明Java问道之路

源码解析 mybatis源码 mybaits 深度 8月月更

【Django | 开发】面试招聘信息网站(快速搭建核心需求)

计算机魔术师

8月月更

大专的我狂刷29天“阿里内部面试笔记”最终直接斩获十七个Offer

收到请回复

Java 程序员 阿里 面试八股文 Java面试八股文

避免 10 大 NGINX 配置错误(下)

NGINX开源社区

nginx 配置 配置分析 故障排除

开源贡献者计划 2022 第二期正式启动!争做战“码”先锋!

InfoQ写作社区官方

开源 OpenHarmony 热门活动

新书上市 | 连载 5 年,千万读者追更,这本书讲透了通信背后的故事!

图灵教育

RocksDB在大规模分布式系统应用中的经验

CnosDB

时序数据库 开源社区 CnosDB 工程师有话说 CnosDB Tech Talk

ABAP工作进程对数据库表读取操作的检测

汪子熙

数据库 SAP abap Netweaver 8月月更

极客办公平台低代码开发应用实践_其他_张曙光_InfoQ精选文章