三、极致BS运行框架
随着互联网的发展以及前端技术的日益强大,基于B/S架构的业务系统越来越受到企业的青睐,相对于传统的C/S架构部署环境复杂,升级麻烦,定位问题难,扩容难等问题,基于前后端分离的B/S架构就很容易解决上述问题,并且前后端人员分工明确,前端人员关注页面的样式和动态数据的解析渲染以及优化,后端人员专注具体业务逻辑的实现并提供WebApi供前端访问,提升开发效率,前端处理数据还有利于减少服务器负载压力,降低故障率。
1、前后端分离架构
极致BS运行平台是一个完全意义上的前后端分离架构的B/S产品,前后端分别基于前端JS框架Vue和C#开发, Vue 是一套用于构建用户界面的渐进式框架,与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,开发效率高,还便于与第三方库或既有项目整合。另一方面,当与现代化的工具链以及各种支持类库结合使用时,Vue 也完全能够为复杂的单页应用提供驱动。C#开发的服务器为外部提供WebApi访问,可以兼容多类型终端。
基于极致BS运行平台开发,不仅开发效率高,部署方案灵活和升级简单,还可以很方便进行横向扩展,支撑更多用户和并发访问,保证业务平稳发展。
2、后端技术框架
极致BS运行框架是基于开源ABP框架实现的,ABP基于DDD的经典分层架构思想,实现了众多DDD的概念, 极致BS运行框架根据ABP框架实现的特性以及极致的业务属性,在 继承框架优秀品质的基础上进行了优化以及扩展,重新实现了插件的加载方式加快应用程序的启动速度,集成Redis缓存并支持Hash数据结构,集成Hangfire任务调度框架并使用Redis存储,集成SwaggerUI方便后端WebApi调试以及向前端公开协议,集成基于Nlog的分布式日志框架ExceptionLess方便日志记录以及问题定位。
基于极致BS运行框架进行项目开发,都是以插件的方式进行,有利于业务和功能统一归类,代码隔离,实现模块间高内聚低耦合。
3、后端开发
由于极致物业管理系统已广泛应用,极致BS运行平台服务器端不会另起炉灶,而是在重用原有系统的数据和类库,并在不影响CS系统正常使用的情况下,向Web前端提供WebApi访问,并实现和CS相同的功能以及用户体验。
极致业务基础平台CS运行框架提供了对报表,单据以及流程的标准操作以及自定义实现,由于CS和BS的差异,CS客户端的自定义实现不能在BS中重用,因此极致BS运行平台除了提供标准的操作外,也提供了自定义实现,CS端自定义实现如何在BS框架下实现,请参考如下要点。
3.1配置扩展点
目前系统只在元数据配置提供给BS唯一的扩展点,因此所有的扩展接口都实现在抽象基类[AbstractBusiness]中,在窗体中配置[调用页面路径]参数,具体为AbstractBusiness派生类的全路径:
@类完整名称,程序集名称
3.2自定义元数据
目前有些界面是没有配置有元数据,客户端直接创建的,或者创建了部分元数据,然后在客户端派生类中重写实现的。对应没有配置元数据的界面,建议在元数据设计器中重新创建,后续维护比较方便,只有部分元数据的,可以重写元数据查询方法[PostMetaDataQuery],对布局以及容器控件进行添加、修改和删除操作。
● lPostMetaDataQuery
3.3报表查询
CS端报表的自定义查询都是从ReportList派生,并根据条件构建查询sql并返回数据,目前BS服务器端把ReportList移植过去,把CS端的ReportList子类的代码直接拷贝到扩展类上,修改并编译无错误即可,当然也可以在新定义的接口方法上面填充相应的代码。
● lPreReportDataQuery
● PostReportDataQuery
3.4单据初始化
在新建,查看或者编辑单据时,需要对单据数据进行初始化,除了部分控件的数据都是标准化初始化,也有小部分是自定义的,对于新建单据时,需要重写[Initialize]方法,而查看或者编辑需要重写[PostRowDataQuery]方法。
● Initialize
● PostRowDataQuery
3.5单据新建和修改
在单据新增或者修改单据保存前,如果需要对参数值进行重新判断,赋值或者转换,重写[PreCreateOrUpdate]方法,如果在保存成功后执行其他操作,需要重写[PostCreateOrUpdate]方法。
● PreCreateOrUpdate
新建单据预处理,例如对必填值进行判断,参数重新赋值或者对其他关联逻辑进行处理。
● PostCreateOrUpdate
在单据创建成功后执行其他关联逻辑。
3.6单据删除
单据删除在框架内有公共实现,如果在单据删除前或者删除后进行其他操作,需要重写[PreDelete]和[PostDelete]方法。
● PreDelete
● PostDelete
3.7工作流提交处理
工作流在框架内有公共实现,如果需要在工作流提交前或者之后进行处理,需要重写[PreWorkflowProcess]和[PostWorkflowProcess]方法。
● PreWorkflowProcess
● PostWorkflowProcess
在工作流提交成功后执行其他关联逻辑。
3.8树控件数据初始化
大部分的树形控件数据初始化在框架内有公共实现,如果树形控件数据是自定义的,需要重写[CanProcess]和[GetTreeNodeData]方法。
● GetTreeNodeData
3.9下拉框数据初始化
大部分的下拉框控件数据初始化在框架内有公共实现,如果下拉框控件数据是自定义的,需要重写[CanProcess]和[GetComboBoxData]方法。
● GetComboBoxData
3.10控件数据联动查询
如果控件的值变化时,需要查询关联控件的值,首先重写[PostMetaDataQuery]方法,把需要执行联动的控件的[RelationalQuery] 属性设置为true,并重写[PostSelectedControlData]方法。
● PostSelectedControlData
3.11表格行数据联动
选择表格行数据变化时,需要重新查询其他控件数据,首先重写[PostMetaDataQuery]设置触发源表格的[RelationalQuery]为true,如果包含有TabControl控件,TabControl选择变化时仅需初始化当前页的数据,则需要设置其数据源绑定的控件属性[DataSourceName],最后重写[GetReportRowRelationalData]方法。
● GetReportRowRelationalData
3.12过滤方案新建和修改
如果需要在新建或者修改过滤方案时对主过滤条件值进行重写判断,重新赋值,则需要重写IFilterSchema 接口中的[PreCreateOrUpdate]方法。
● PreCreateOrUpdate
3.13过滤方案查询
如果需要对过滤方案的主过滤条件查询时进行赋值或者转换,需要重写[PostFilterSchemaQuery]方法。
● PostFilterSchemaQuery
4、前端开发
极致BS运行平台前端根据服务器端提供的元数据生成报表,单据和工作流界面并进行标准操作,目前是尽量不要在前端进行自定义开发,而是把脚本在服务器写好,通过WebApi访问把脚本内容推送到前端,前端进行解析并执行。
目前提供了配置以及编程的方式来对控件以及菜单事件的支持。
4.1配置方式
每个模块定义事件脚本文件,在插件初始化后进行注册。
// 注册脚本
var eventScriptProviderAppService =
IocManager.Resolve
();
eventScriptProviderAppService.Regist(HttpContext.Current.Server.MapPath("~/bin/EventScript.json"));
控件事件脚本要编写规范,按照定义来实现,具体脚本内容单独放在一个文件中,保存为UTF8编码。
// 窗体容器Id
"MainContainerId": 2275630,
"EventScripts": [
{
// 控件名称[和元数据中控件名称一致]
"ControlName": "ckhPasswordNotExpired",
// 事件类型 1:值变化时触发的事件 2:点击事件
"EventType": 1,
// 触发类型(可空) 1:数据加载后
"TriggerTimeType": 1,
// 对应的脚本文件名称
"FileName": "2275630_1_PasswordNotExpired.js"
}
}
4.2编程方式
重写查询元数据扩展方法[PostMetaDataQuery],并直接对控件进行事件脚本添加。
window.CreateControlEvent(EventScript eventScript)
四、极致移动端运行框架
极致业务基础平台移动端运行框架,同样基于极致自主研发的低代码快速开发平台框架,继承了PC端平台软件开发的优点,让开发移动端软件APP时也具备快速开发能力。该平台以元数据为核心,利用元数据能够自动化构建单据界面,只需少量代码即可实现各种单据功能。同时以自主研发的数据框架为基础,并与极致便捷的工作流引擎相结合,以求达到最快的开发速度。并且充分利用了移动设备的各种固有能力,如拍摄、定位、扫码、水印、蓝牙等功能,以求满足各种实际场景的需求,达到极致的用户体验。
1、整合的信息流
极致办公作为极致业务基础平台的移动端应用,它整合企业管理及日常办公所需要的消息流,以简洁方便的方式呈现个人消息,集工作流待办事宜、极致企业邮件、企业通知公告、个人日程等安排于一体。用户在消息界面一个界面中即可获取所有的当前需要获取的最新信息,减少了用户查找和跳转页面的时间。同时利用手机设备的消息推送提醒功能,可以及时地获知最新的消息及待办事宜,减少流程审批的等待时间,领导只需使用手机便可轻松查阅及审批流程。另外,包括物业巡检任务等也可以设置提醒, 给物业管理带来了便捷,提高了工作效率。
1.1整合的消息流-个人待办事宜
个人待办事宜是指个人最新未处理的工作流待办事项,如下图中的客户投诉单,或服务派工单:
1.2整合的消息流-极致企业邮件消息
使用极致邮件系统发出的个人未读邮件会显示在待办事宜中,如下图所示:
1.3整合的消息流-企业通知公告消息
指企业使用极致系统发布的通知公告,个人未读的通知公告会显示在待办事宜中,如下图所示:
1.4整合的消息流-个人日程表消息
个人在极致系统或移动办公APP中添加的个人日程事项,到了日程指定时间时,会显示在待办事宜中,如图所示:
1.5整合的消息流-天气预警消息
利用服务实时监测天气的变化,当监测到指定日期的天气情况与所配置的天气情况匹配,就将新增相应的通知单,将配置中定义的防范措施推送到配置中定义的用户手机app中待办中。
配置天气预警防范措施:
按定时服务设置的时间查询天气,当检测到已在天气预警防范措施中配置的防范天气,启动天气预警流程,给天气预警防范措施中“防范人员”的办公app推送流程待办(见下图)。防范人员查看通知单后点击“同意”按钮单据即处理完成。
1.6整合的消息流-岗位提醒消息
个别保安夜间值班期间睡觉,因此需要需要在保安值班期间向其随机推送一些题目,保安接收到推送的消息后提交答案,以此判断保安在值班期间是否在正常履职。
配置岗位提醒题目:
按定时服务设置的时间查询在值班的保安人员,不定时的从岗位提醒题目中随机选择一题通过流程待办的形式推送到保安极致办公APP待办中。保安人员选择答案点击提交即可。
2、零代码功能的单据审批流
随着信息化技术的发展,企业对信息化开发的需求正在逐渐改变,传统的定制开发已经无法满足企业需求。近年来低代码开发平台,越来越成为开发者和企业的选择,而极致已经在这方面则是遥遥领先。
不仅仅在PC端产品使用了低代码快速开发的极致业务基础平台,极致的移动端产品也是如此。得益于该平台,极致办公APP的单据审批流实现了零代码开发的模式,对于任何一种业务单据,只需定义配置好业务单据内容字段以及相关工作流实例,即可在极致办公APP中进行新增、查阅、修改及审批单据,无需重新进行代码编写开发及更新升级,极大提高了产品成本和效率的优势,并为产品提供了灵活扩展的能力。
2.1移动审批工作流引擎
OA工作流是基于办公自动化基础上,通过企业自定义好的流程转向实现流程自动流转、业务申请审批、信息沟通及时等。极致办公APP与极致物业管理系统使用了相同的工作流引擎,显示界面包括了待办事宜、已办事宜、我的申请等。实现了包括创建、知会、打回、沟通、撤回、已办、批量审批、加急、挂起等全面实用的功能,覆盖了工作流应用的各种场景。
2.2移动审批通用表单编辑
通用表单,是指在极致办公APP中使用通用统一逻辑处理的表单单据,这种单据移动端可零代码实现,可在极致办公APP中进行创建、审批、编辑、打回、沟通等流程操作。
它的实现基于极致业务基础平台,以元数据为核心,将表单封装为元数据“数据实体”,对应数据库中的表,属性包括了表名、关联程序集、实体类型等,如下图所示:
同时将表单的字段封装为元数据“数据实体字段”,对应数据库表的所有字段,其属性包括了数据实体、字段名称、字段类型、字段长度、是否必录、是否可见等,如下图所示:
除了界面元数据外,界面的自动化实现还可以根据工作流的配置和定义,对工作流某个节点的界面和逻辑进行控制,如是否锁定、是否必录、是否可见等。比如,当节点属性设置某字段设置为锁定时,在极致办公APP中,该字段将不可修改。如下图所示:
通用表单中,显示的字段是根据“数据实体”和“数据实体字段”元数据实现的,界面上显示的字段名,即为“数据实体字段”的名称, 同时界面根据字段类型,显示不同类型的控件,如日期类型则显示日期控件,布尔类型则显示复选框控件。还有引用类型字段,它可引用其它“数据实体”,以此获取关联的数据。
极致办公APP的“消息”页签,右上角“我的流程”提供发起表单工作流的功能,它使用了通用表单的自动化构建实现,因此可以发起任何通过工作流配置的单据,并且实现工作流配置的界面和逻辑控制功能。
如图所示:
除了界面主单据外,表单还支持明细列表的显示和编辑功能,如上图的差旅费表单,其下面还包含具体明细数据,该数据可以是多个明细,也可以是多种不同类型的明细。系统根据“数据实体”和“数据实体字段”元数据之间的关联关系自动进行实现。如下图所示:
3、万能的扫一扫
万能扫一扫功能是极致办公APP的又一“特色功能”,它使用手机的二维码拍照扫码功能,针对物业管理行业各种真实实际的应用场景需求量身定制,其中包括了常用的仪表扫表、巡检节点、巡检设备、设备保养、设备维护、房间二维码、客户资料等。不同的应用场景二维码,只需使用万能扫一扫,即可轻松到达功能界面,准确定位到指定数据。
4、企业通讯录
企业通讯录是企业内外部沟通时必备的功能,但极致办公App的企业通讯录,除了基本功能外,同样具备其自有的特色。它基于极致管理软件中的数据自动构建企业级通讯录,可以查看同事、客户、往来单位的联系信息,并且可以即时拨打电话、发送短信或电子邮件给联系人。同时它基于组织机构权限管理控制,有相关权限的用户,可以查询指定客户资料,包括手机等基本信息、当前欠费信息、预收款信息、客户房间、家庭成员、报修单和投诉单等信息。更重要的是,借助于手机的移动支付功能,可让企业工作人员与客户面对面的进行欠费收款或扫码缴费操作,资金通过支付系统进入物业的账号中,操作既安全又便捷,能够提升物业的催收率。
5、移动办公模块
移动办公APP的“工作”页签,主要以功能图标的形式展示,为独立的业务或功能提供单独入口,分别包括了移动办公和物业服务。功能入口根据极致物业管理系统中的用户功能权限以及企业开通模块作为依据,判断功能图标是否显示,因此,企业可根据实际需求自由定制显示所需的功能图标。
移动办公模块主要包括了OA系统以及人力资源系统常用功能。移动办公显示的入口图标包括了:管理驾驶舱、外勤、加班、调休、休假、邮件、文件传阅、签报、知识库、日程安排、会议室申请、证照退还、车辆申请、日志、企业短信、出差、调班申请、费用报销、差旅费报销、管家沟通等。
6、企业服务模块
企业服务模块,主要包括企业特别是物业行业常用的功能,显示的入口图标包括了:服务派工、仪表抄表、客户投诉、巡检、设备保养、设备维修、工作检查、自由巡检、盘点、领料单、考核检查、装修巡检、承接查验、商机管理、工作日志和房屋保修等。另外,极致移动运行框架,还提供了扩展第三方服务链接的功能,可在企业服务模块中动态扩展加载显示第三方服务链接。
五、极致基于WebAPI的微服务架构的接口开发
物业管理系统是由不同的业务服务单元组成,其中包括公共基础服务、业务应用服务等,不同服务的场景、使用频率不一样,由于不同业务的应用特点不一样,以及在系统深化运用过程中会根据实际情况产生不同的业务需求,在进行平台设计时就需考虑服务可复用、高稳定性、可扩展性。
企业在不同的业务管理过程中会产生不同的数据成果,物业管理系统平台可以理解为对这些不同数据成果进行抽取、转化、分发的数据中台,这一数据中台是有许多业务服务单元组成,不同的业务线可能会有许多不同的开发团队进行开发与运维,针对不同技术栈组成的开发团队,在进行平台设计时就需要考虑如果聚合各自的业务单元,同时具备低耦合的特点。
1、如何保证服务的可复用性
针对公共业务,极致开发平台将其内聚为统一公共服务层,以webapi的服务形式对平台其他业务和第三方厂商提供服务,使对业务线开发团队透明,开箱即用,避免重复造轮子。
例如极致统一短信服务、极致统一电子发票服务、极致统一支付服务、极致统一客户号服务、极致基础数据服务等。
2、如何保证服务的高稳定性
极致开发平台在保证服务高稳定性的主要技术路线有两种方式:
A、硬件层面:选用市场主流的云服务厂商,在业务规模与企业规模受限的情况下,选用主流云服务厂商的云计算服务,从而屏蔽基础设施(如服务器、主干网络、硬件运维)的稳定性对平台的影响,以服务器集群方式去承载不同的业务,从而根据业务规模去动态调配、升级、增加硬件资源;
B、软件层面:极致开发平台在设计开发中贯穿无状态微服务理念,根据业务服务边界划分不同的业务服务单元,使其成为具备独立业务功能的服务主体,服务单元之间通过webapi的形式进行通讯,微服务这一基础理念使得在平台运行过程中可以根据不同业务的使用规则来规划不同的硬件资源,针对高并发的服务如统一短信服务、统一支付服务,根据用户使用规模快速进行横向扩展,在出现某一服务器资源出现服务不可用时无缝路由至其他可服务的资源上。
3、如何保证业务需求快速响应与可扩展性
物业管理系统在实际深化运用中会产生很多新增业务需求,企业在管的不同业态的项目有各自的业务诉求,在使用过程中也会不断产生新的业务需求,极致开发平台在产品设计时着重考虑了业务扩展性和需求快速响应的要求。
3.1同一公共基础服务支持不同渠道
公共基础服务开发时采用按项目维度的渠道可配置性的特点来满足基础服务支持不同的渠道服务商,例如短信服务通过短信网关接口配置来适配不同的短信服务商,根据企业的需求来配置短信服务商,开发统一支付服务时采用适配器模式来对接不同的支付服务商,在客户定向指定尚未对接的支付服务商时,通过双方约定的技术接口标准在服务层完成对接,然后以插件形式加载到统一支付服务层,统一支付服务层屏蔽不同服务商的接口标准,以统一的webapi模式向各业务线开放,从而达到无需改动具体业务系统的业务逻辑来快速响应客户需求。
3.2以SDK或H5输出单个业务系统的服务能力
企业在信息化建设中会有不同的目标客户或不同的产品定位,因此可能需要将物业管理系统中某些独立的业务系统输出到第三方产品中,极致开发平台在设计市场可复用的业务系统时考虑跨终端或跨系统的现实需求,以SDK或H5方式输出业务能力,平台的微服务设计特点在业务逻辑层做了边界区分,实现展示层与业务层的隔离,从而在响应跨平台产品或跨终端的需求时只需实现展示层的开发,无需重复实现业务逻辑,以SDK包或H5形式向第三方系统输出服务能力,完成快速对接。
例如:
A、业主缴费这一核心业务,通过H5或webapi接口向第三方开放,从而快速实现第三方产品中具备缴费能力,避免同一业务在不同厂商的产品中重复开发。
B、企业内部管理,如协同办公,以SDK包或H5形式向第三方开发,从而避免相同的业务在不同的产品中产生不同的工作流管理模式,同时也可以webapi形式输出工作流驱动服务,从而将某一业务链在不同的产品中串联起来,形成业务统一、数据统一。
3.3通过业务链埋点开放更小颗粒度的接口
不同企业在使用物业管理系统同一模块时可能会有不同的管理需求,针对这类需求,极致开发平台通过在所有业务模块的业务链中开放不同的小颗粒度接口,根据不同客户管理需求重写特定的接口方法,复写原有公共标准逻辑,从而满足不同的客户需求,且不影响其他客户,避免根据客户来维护不同的产品代码分支。
例如企业主数据平台建设过程中,针对基础资料的操作除了系统本身的操作业务链外还需将数据实时分发给第三方系统,平台设计的接口埋点方式可以快速响应此类需求,开发人员只需在数据保存中通过复写保存业务操作中外部命令接口从而实现数据状态变更的实时分发。