设备预警规则设计(使用表达式引擎)

      一位领导一再强调每个人都是产品,确实作为一个多年编码的程序员,我们都需要有这样的格局眼光。之前要求联动预警可以拖拽配置,这里就分享一下个人的设计想法。

一、技术实现准备

规则解析:使用表达式引擎JEXL(号称目前最快,灵活)

拖拽实现:前端说有插件(H5还是很强大)

拖拽配置:抽象出一个简易的设计界面(对元素抽象处理)

二、界面设计

产品御用设计界面Axure用的真差,将就看吧。界面也画的粗,有个大致意思吧。主要有三个界面:

  1. 设备功能配置

配置各类设备的功能,指令下发平台、功能码等信息

  1. 上报数据格式设置

平台推送数据格式配置,方便推送数据存储、解析、为联动规则提供字段来源

  1. 预警可视化配置

抽象的简易设计界面,配合前端实现拖拽配置预警、联动。注意提供联动测试按钮,也就是根据上报格式设置的json串模拟一条上报数据,调用上报数据接收接口。

         大致界面

设备预警规则设计(使用表达式引擎)

 

设备功能配置

设备预警规则设计(使用表达式引擎)

 

上报数据格式设置

设备预警规则设计(使用表达式引擎)

 

预警可视化配置

三、设计思路解释

1、设备功能配置、上报数据格式设置都是为拖拽配置提供配置基础的。上报数据格式另外其实也为推送数据提供存储便利,上报数据采用主数据行存储,从数据列存储,比如主数据存字段是比较固定的字段,从数据为扩展字段,可冗余设备上报数据差异。

上报数据格式:

{"deviceCode":[{"val":"设备编码"},{"val":"abc0001"}],"dy":[{"val":"电压"},{"val":"250V"}],"dl":[{"val":"电流"},{"val":"25A"}],"maxDy":[{"val":"最大电压"},{"val":"300V"}]}

平台推送过来除了告知值,同时告知字段意思,这个平台对接设备肯定是知道的,业务系统就不一定知道了。

2、拖拽的设备可设置厂家、型号、编码,都可为空,根据这里设置的厂家、型号找上报数据格式,如果都为空默认使用配置的通用格式对数据进行解析。(如果上报数据格式设置没有配置全面,可能没有对应的格式)

针对接收上报数据过程中没有匹配到格式,应该设计一个专门的异常管理模块,方便运维人员健壮配置。

  1. 被联动动作来源设备功能配置,也是根据厂家、型号进行查询,下拉选择,如果厂家、型号空,则默认自行根据上报数据设备编码查询到的厂家、型号匹配查找。(如果设备功能配置没有配置全面,可能出现没有匹配到,联动失败)

针对联动失败的,也归并到异常管理模块,记录数据,方便运维开发找原因。

  1. 联动箭头元素的设置,规则字段也是来源上报数据格式设置。后台上报数据解析使用表达式引擎对设置的规则进行解析,触发本级联动与下级设备联动。

表达式解析异常的,也归并到异常管理模块,记录数据,方便运维开发找原因。

四、设计总结

         1、拖拽元素抽象的还不够,部分点可能没有想到

         2、设备功能配置,有参的功能配置还要考虑,没有想到好的设计办法

3、数据采取主从行列方式存储,表连接查询、列表展示将增加前端展示的难度。主从字段要提前分明,后期有连接查询需求可将从列变更到主列字段。