一种流式规则引擎及业务数据处理方法与流程

文档序号:18193629发布日期:2019-07-17 05:42阅读:597来源:国知局
一种流式规则引擎及业务数据处理方法与流程

本发明涉及计算机大数据技术领域,具体涉及一种流式规则引擎及业务数据处理方法。



背景技术:

目前在很多企业的it业务系统中,经常会有大量的业务规则配置,当企业管理者的决策发生变化时,这些业务规则也需要随之发生变化。为了适应企业管理变化的需求,企业的it业务系统需要能快速且低成本进行更新。现有技术中,一般是将业务规则的配置单独提取出来,使之与业务系统保持低耦合,而实现这样的功能的程序,已经被开发成为规则引擎。

所谓规则引擎,是一种推理引擎,它是根据已有的事实,从规则知识库中匹配规则,并处理存在冲突的规则,执行最后筛选通过的规则。因此,规则引擎是人工智能研究领域的一部分,具有一定的选择判断性、人工智能性和富含知识性。同时,规则引擎是一种嵌入在应用程序中的组件,实现了将业务决策从应用程序代码中分离出来,并使用预定义的语义模块编写业务决策。大多数的规则引擎都支持规则的次序和规则冲突检验,支持简单脚本语言的规则实现,支持通用开发语言的嵌入开发。目前业内有多个规则引擎可供使用,比较流行的规则引擎包括商业规则引擎ilog和开源规则引擎drools等。在drools中,规则被存放在productionmemory(规则库)中,推理机要匹配的facts(事实)被存在workingmemory(工作内存)中。当事实被插入到工作内存中后,规则引擎会把事实和规则库里的模式进行匹配,对于匹配成功的规则再由agenda(代理器)负责具体执行推理算法中被激发规则的结论部分,同时agenda通过冲突决策策略来管理这些冲突规则的执行顺序。

现有技术中,使用的最多的是一款基于java语言的开源规则引擎,它的最大优势在于语法规则简单,类似java编写门槛不高,能够无缝化与java集成且用户可以对drools规则进行动态配置,但该规则引擎存在比较明显的缺点:由于drools引擎大都是单机部署,运算能力很难扩展,因此导致内置聚合功能速度缓慢,不适合企业自身或者客户使用场景下的大量聚合操作任务;另外,其内置事件序列处理机制也需要消耗大量内存资源。因此,现有技术中的大多数开源规则引擎,面对业务数据量迅猛增长的大规模数据时,会显得无能为力。

专利申请号为“201310641753.6”的发明专利中公开了一种分布式规则引擎系统,将规则分布到多个规则引擎之上,通过多个规则引擎进行处理,可以一定程度地扩展运算能力,但该种分布式规则引擎是基于rete网络,只是公司内部研发使用,没有经过如google、uber、airbnb、amazon、apple、facebook和阿里巴巴等大公司的大数据量的考验,所以在大数据量的时候,就会凸显在运行速度、扩展性和资源使用率等方面性能差,协调各个机器的进行分布式处理能力不强。该种分布式规则引擎由于缺乏开源社区的支持,导致易用性不强,软件更新升级速度慢,出现问题后,修复问题的周期慢,修复能力不足;且该种分布式规则引擎系统是由多个规则引擎进行协同处理,由于各个规则引擎的规则不同,导致每个规则引擎处理后的结果数据,都需要进行跨网络传输,当数据量大的时候,传输效率特别低,对rete网络造成很大的压力,而且缺乏容错机制和监控机制和管理机制,导致规则引擎之间协调性差,对各个规则引擎监控和管理能力差,不能协调各个规则引擎对系统的资源的分配,可能出现部分规则引擎需要的资源增大导致各个规则引擎哄抢系统资源,使得整个分布式规则引擎系统崩塌的问题。

因此,很需要一种更适合开源的规则引擎能解决上述问题。



技术实现要素:

有鉴于此,本发明的目的在于提出一种流式规则引擎及业务数据处理方法,能提高业务数据聚合速度和提高运算能力,更适合用户进行业务上的大量聚合操作,且适用于开源环境。

根据本发明的一方面,提供一种流式规则引擎:

包括业务规则配置模块和处理模块;其中,

所述业务规则配置模块部署在flink框架平台中的一设备上,用于配置业务规则数据;

所述处理模块部署在flink框架平台中的其他分布式设备上,用于从所述一设备上获取所述配置的业务规则数据,对获取的业务规则数据进行解析,将解析出的业务规则数据与业务数据进行规则匹配处理,输出处理结果。

优选的,所述处理模块包括:业务规则获取模块、业务规则解析模块、业务数据处理模块和结果输出模块,所述业务规则获取模块、业务规则解析模块、业务数据处理模块和结果输出模块同时设置在每个所述其他分布式设备上,其中所述其他分布式设备包括任务管理器所在的设备;

所述业务规则获取模块,用于从所述一设备上获取所述配置的业务规则数据,其中所述一设备包括工作管理器所在的设备;

所述业务规则解析模块,用于对所述业务规则获取模块获取的业务规则数据进行解析;

所述业务数据处理模块,用于将所述业务规则解析模块解析出的业务规则数据与业务数据进行规则匹配处理;

所述结果输出模块,用于输出所述业务数据处理模块的处理结果。

优选的,所述业务规则配置模块通过设置的规则配置页面配置业务规则数据。

优选的,所述业务规则配置模块配置业务规则数据后,将所述业务规则数据采用json格式存储到数据库中;

所述业务规则解析模块,解析所述json格式的业务规则数据。

优选的,所述业务规则获取模块获取所述配置的业务规则数据后,将判断为有效的业务规则数据转成流式数据传输给所述业务规则解析模块。

根据本发明的另一方面,提供一种业务数据处理方法:

通过流式规则引擎的业务规则配置模块配置业务规则数据,其中所述业务规则配置模块部署在flink框架平台中的一设备上;

通过流式规则引擎的处理模块从所述一设备上获取所述配置的业务规则数据,对获取的业务规则数据进行解析,将解析出的业务规则数据与业务数据进行规则匹配处理,输出处理结果,其中所述处理模块部署在flink框架平台中的其他分布式设备上。

优选的,所述从所述一设备上获取所述配置的业务规则数据,包括:通过所述处理模块中的业务规则获取模块从所述一设备上获取所述配置的业务规则数据,其中所述一设备包括工作管理器所在的设备;

所述对获取的业务规则数据进行解析,包括:通过所述处理模块中的业务规则解析模块对所述业务规则获取模块获取的业务规则数据进行解析;

所述将解析出的业务规则数据与业务数据进行规则匹配处理,包括:通过所述处理模块中的业务数据处理模块将所述业务规则解析模块解析出的业务规则数据与业务数据进行规则匹配处理;

所述输出处理结果,包括:通过所述处理模块中的结果输出模块输出所述业务数据处理模块的处理结果;

其中所述业务规则获取模块、业务规则解析模块、业务数据处理模块和结果输出模块同时设置在每个所述其他分布式设备上,其中所述其他分布式设备包括任务管理器所在的设备。

优选的,所述业务规则配置模块通过设置的规则配置页面配置业务规则数据。

优选的,所述业务规则配置模块配置业务规则数据后,将所述业务规则数据采用json格式存储到数据库中;

所述业务规则解析模块,解析所述json格式的业务规则数据。

优选的,所述业务规则获取模块获取所述配置的业务规则数据后,将判断为有效的业务规则数据转成流式数据传输给所述业务规则解析模块。

通过上述内容可以发现,本发明实施例所提供的方案,提供了一种新的流式规则引擎,该流式规则引擎包括业务规则配置模块和处理模块;其中,所述业务规则配置模块部署在flink框架平台中的一设备上,用于配置业务规则数据;所述处理模块部署在flink框架平台中的其他分布式设备上,用于从所述一设备上获取所述配置的业务规则数据,对获取的业务规则数据进行解析,将解析出的业务规则数据与业务数据进行规则匹配处理,输出处理结果。该流式规则引擎不再采用单机部署方式,而是利用了flink的分布式部署和分布式计算的能力,将设备组成分布式集群,将流式规则引擎中的业务规则配置模块部署在一设备上用于配置业务规则数据,将处理模块部署在其他分布式设备上,这样就解决了传统单机部署的cpu和内存计算不足的困境,通过分布式计算大大增强了规则引擎的内置聚合能力和可使用内存的容量,满足了日益增长的大数据量和日益复杂的业务的需求;此外,也避免了现有技术中分散为多个规则引擎协同处理,进而避免了以下问题的出现:由于各个规则引擎的规则不同,导致每个规则引擎处理后的结果数据,都需要进行跨网络传输,当数据量大的时候,传输效率特别低,对rete网络造成很大的压力,而且缺乏容错机制和监控机制和管理机制,导致规则引擎之间协调性差,对各个规则引擎监控和管理能力差,不能协调各个规则引擎对系统的资源的分配,可能出现部分规则引擎需要的资源增大导致各个规则引擎哄抢系统资源,使得整个分布式规则引擎系统崩塌。

进一步的,本发明的业务规则配置模块是可以通过设置的规则配置页面配置业务规则数据,通过规则配置页面就可以将业务规则(业务逻辑)从程序代码中脱离出来,使得业务规则的配置更加标准化和专业化。

进一步的,本发明没有像现有技术那样将业务规则写在drools脚本中,然后转换成java对象并再调用改java对象对数据进行操作,而是将业务规则转成json(javascriptobjectnotation,js对象简谱,是一种轻量级的数据交换格式)串的格式存储到数据库(例如redis)中,然后通过解析json串里的数据再对数据进行操作,处理起来更简单。

附图说明

通过结合附图对本公开示例性实施方式进行更详细的描述,本公开的上述以及其它目的、特征和优势将变得更加明显,其中,在本公开示例性实施方式中,相同的参考标号通常代表相同部件。

图1是本发明实施例的一种流式规则引擎的结构框架的一示意图;

图2是本发明实施例的一种流式规则引擎的结构框架的另一示意图;

图3是本发明实施例的一种业务数据处理方法的一流程示意图;

图4是本发明实施例的一种业务数据处理方法的另一流程示意图。

具体实施方式

为使本发明的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本发明进一步详细说明。

虽然附图中显示了本公开的优选实施方式,然而应该理解,可以以各种形式实现本公开而不应被这里阐述的实施方式所限制。相反,提供这些实施方式是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。

本发明提供一种流式规则引擎,能提高业务数据聚合速度和提高运算能力,更适合用户进行业务上的大量聚合操作,且适用于开源环境。

以下结合附图详细描述本发明实施例的技术方案。

图1是本发明实施例的一种流式规则引擎的结构框架的一示意图。

参照图1所示,本发明的一种流式规则引擎,包括业务规则配置模块10和处理模块20。

其中,所述业务规则配置模块10部署在flink框架平台中的一设备上,用于配置业务规则数据。

其中,所述处理模块20部署在flink框架平台中的其他分布式设备上,用于从所述一设备上获取所述配置的业务规则数据,对获取的业务规则数据进行解析,将解析出的业务规则数据与业务数据进行规则匹配处理,输出处理结果。

其中,所述业务规则配置模块10可以是通过设置的规则配置页面配置业务规则数据。

其中,所述业务规则配置模块10配置业务规则数据后,还可以将所述业务规则数据采用json格式存储到数据库中,例如存储到redis中。

从该实施例可以发现,本发明提供了一种新的流式规则引擎,该流式规则引擎包括业务规则配置模块和处理模块;其中,所述业务规则配置模块部署在flink框架平台中的一设备上,用于配置业务规则数据;所述处理模块部署在flink框架平台中的其他分布式设备上,用于从所述一设备上获取所述配置的业务规则数据,对获取的业务规则数据进行解析,将解析出的业务规则数据与业务数据进行规则匹配处理,输出处理结果。该流式规则引擎不再采用单机部署方式,而是利用了flink的分布式部署和分布式计算的能力,将设备组成分布式集群,将流式规则引擎中的业务规则配置模块部署在一设备上用于配置业务规则数据,将处理模块部署在其他分布式设备上,这样就解决了传统单机部署的cpu和内存计算不足的困境,通过分布式计算大大增强了规则引擎的内置聚合能力和可使用内存的容量,满足了日益增长的大数据量和日益复杂的业务的需求;此外,也避免了现有技术中分散为多个规则引擎协同处理,进而避免了以下问题的出现:由于各个规则引擎的规则不同,导致每个规则引擎处理后的结果数据,都需要进行跨网络传输,当数据量大的时候,传输效率特别低,对rete网络造成很大的压力,而且缺乏容错机制和监控机制和管理机制,导致规则引擎之间协调性差,对各个规则引擎监控和管理能力差,不能协调各个规则引擎对系统的资源的分配,可能出现部分规则引擎需要的资源增大导致各个规则引擎哄抢系统资源,使得整个分布式规则引擎系统崩塌。图2是本发明实施例的一种流式规则引擎的结构框架的另一示意图。

本发明提供一种基于分布式的实时流式规则引擎,能够进行分布式部署,具有低延迟、高性能、分布式、可扩展容错等特点。

本发明基于flink大数据框架平台的基础上,利用了flink的分布式部署和分布式计算的能力,将更多的设备例如普通计算机组成分布式集群对外提供服务,同时解决了传统单机部署的cpu和内存计算不足的困境,通过分布式计算,大大增强了规则引擎的内置聚合能力和可使用内存的容量,满足了日益增长的大数据量和日益复杂的业务的需求。另外,本发明通过规则配置页面将业务规则从程序代码中脱离出来,使得业务规则的配置更加标准化和专业化。

参照图2所示,本发明的一种流式规则引擎,包括业务规则配置模块10和处理模块20,其中所述处理模块20可以包括:业务规则获取模块201、业务规则解析模块202、业务数据处理模块203和结果输出模块204,其中所述业务规则获取模块201、业务规则解析模块202、业务数据处理模块203和结果输出模块204可以同时设置在每个所述其他分布式设备上,当然,在其他实施例中,所述业务规则获取模块201、业务规则解析模块202、业务数据处理模块203和结果输出模块204也可以设置在不同的所述其他分布式设备上,但是,相比之下,同时设置在每个所述其他分布式设备上会让处理速度更快。

其中,所述业务规则配置模块10部署在flink框架平台中的一设备上,用于配置业务规则数据;所述处理模块20部署在flink框架平台中的其他分布式设备上,用于从所述一设备上获取所述配置的业务规则数据,对获取的业务规则数据进行解析,将解析出的业务规则数据与业务数据进行规则匹配处理,输出处理结果。

本发明利用了flink是一个面向分布式数据流处理和批量数据处理的开源计算框架平台的特点。flink由jobmanager(工作管理器)和taskmanager(任务管理器)组成,一般包括一个jobmanager和多个taskmanager,jobmanager和多个taskmanager可以分别部署在不同的设备例如计算机上,共同组成分布式集群。因此本发明将规则引擎与flink框架平台结合,大大增强了规则引擎的各个模块之间数据的整合处理能力,相比,若只是简单地将规则引擎的各模块部署在不同设备上,而不是基于flink框架平台的情况下,则需进行额外的数据整合运算,增大了设计及维护成本。

其中,本发明的流式规则引擎中的业务规则配置模块10可以是部署在一台设备上,流式规则引擎中的其他四个模块(业务规则获取模块201、业务规则解析模块202、业务数据处理模块203和结果输出模块204)可以是部署到其他分布式设备上,其中,所述业务规则配置模块10所在的一台设备即jobmanager所在的设备,其他四个模块所在的分布式设备即taskmanager所在的设备,该四个模块在其他各个设备上都同时有部署。本发明可以由flink的jobmanager负责管理该四个模块的部署,还可以将四个模块解析成一个个的task(任务)由taskmanager进行处理,jobmanager和taskmanager保持通信交互。

其中,所述业务规则配置模块201可以通过设置的规则配置页面配置业务规则数据。本发明通过规则配置页面就可以将业务规则(业务逻辑)从程序代码中脱离出来,使得业务规则的配置更加标准化和专业化。

其中,所述业务规则获取模块202,用于从所述一设备上获取所述配置的业务规则数据。

其中,所述业务规则解析模块203,用于对所述业务规则获取模块202获取的业务规则数据进行解析。所述业务规则获取模块202获取所述配置的业务规则数据后,将判断为有效的业务规则数据转成流式数据传输给所述业务规则解析模块203。

其中,所述业务数据处理模块204,用于将所述业务规则解析模块203解析出的业务规则数据与业务数据进行规则匹配处理。

其中,所述结果输出模块205,用于输出所述业务数据处理模块204的处理结果。

其中,所述业务规则配置模块10配置业务规则数据后,可以将所述业务规则数据采用json格式存储到数据库中;所述业务规则解析模块202,解析所述json格式的业务规则数据。现有技术中是将业务规则写在drools脚本中,然后转换成java对象,再调用该java对象对数据进行操作。本发明没有将业务规则写在drools脚本中,而是将业务规则转成json串存储到redis数据库中,然后通过解析json串里的数据,对数据进行操作,处理更简单。

上述详细介绍了本发明的一种流式规则引擎,以下相应介绍应用所述流式规则引擎的业务数据处理方法。

图3是本发明实施例的一种业务数据处理方法的一流程示意图。

参照图3所示,所述方法包括:

在步骤301中,通过流式规则引擎的业务规则配置模块配置业务规则数据,其中所述业务规则配置模块部署在flink框架平台中的一设备上。

其中,所述业务规则配置模块可以是通过设置的规则配置页面配置业务规则数据,在配置业务规则数据后,还可以将所述业务规则数据采用json格式存储到数据库中,例如存储到redis中。

在步骤302中,通过流式规则引擎的处理模块从所述一设备上获取所述配置的业务规则数据,对获取的业务规则数据进行解析,将解析出的业务规则数据与业务数据进行规则匹配处理,输出处理结果,其中所述处理模块部署在flink框架平台中的其他分布式设备上。

其中,所述一设备包括工作管理器所在的设备,所述其他分布式设备包括任务管理器所在的设备。

从该实施例可以发现,本发明方法中所应用的流式规则引擎,不再采用单机部署方式,而是了利用了flink的分布式部署和分布式计算的能力,将设备组成分布式集群,将流式规则引擎中的业务规则配置模块部署在一设备上用于配置业务规则数据,将处理模块部署在其他分布式设备上,这样就解决了传统单机部署的cpu和内存计算不足的困境,通过分布式计算大大增强了规则引擎的内置聚合能力和可使用内存的容量,满足了日益增长的大数据量和日益复杂的业务的需求,且适用于开源环境。

图4是本发明实施例的一种业务数据处理方法的另一流程示意图。图4相对于图3更详细描述了本发明的业务数据处理方法。

参照图4所示,所述方法包括:

步骤401、通过流式规则引擎的业务规则配置模块,在规则配置页面中输入各个业务系统的业务规则数据,采用json格式存储到数据库中。

该步骤中,可以将业务规则数据通过json方式存储到redis中。

该步骤中配置输入的业务规则数据可以如下所示但不局限于此:

{"主业务系统编号":"123",“用户部门编号”:“122”,"子业务系统信息":[{"子业务系统编号":"378","业务数据编号":123,”累加字段“:acc,"过滤字段":"ac>32","统计前10字段":"字段名称","执行顺序":"1"}]}

数据格式:

步骤402、通过流式规则引擎的业务规则获取模块获取所述配置的业务规则数据,将判断为有效的业务规则数据转成流式数据传输给业务规则解析模块。

该步骤通过业务规则获取模块从redis数据库获取业务规则数据后,校验判断获取的业务规则数据是否有效,将判断为有效的业务规则数据转成流式数据,并发送到业务规则解析模块。其中,可以定时或不定时进行发送。

业务规则获取模块可以提取业务规则数据中的用户编号,通过查询数据库来判断该用户编号是否有权限处理数据,如果判断结果为有权限,则确定该业务规则数据为有效的业务规则数据。

其中上述判断逻辑包括:首先判断该用户编号是否对主系统有访问权限,其次判断是否对子系统有访问权限,最后判断是否对子系统下面的业务数据有访问权限,当判断为都有访问权限时,可以确定该业务规则数据为有效的业务规则数据。需说明的是,在上述判断为都有访问权限时,还可以再进一步判断该业务数据是否存在系统所填写的字段,如果存在,则确定该业务规则数据为有效的业务规则数据。

步骤403、通过流式规则引擎的业务规则解析模块对接收的json格式的业务规则数据进行解析。

该步骤中,业务规则解析模块根据json格式解析业务规则数据,将业务规则数据中的业务系统编号、子业务系统编号、过滤的字段、top(前)字段、规则执行顺序等字段解析出来。其中,过滤的字段、top(前)字段、规则执行顺序等等字段,都是可以在json里面设置。

该步骤的解析过程包括:先将json格式的业务规则数据按格式解析,将执行顺序字段解析出来,通过执行顺序字段对所有的业务规则进行排序,然后对业务规则里面的执行任务进一步排序,先按照过滤的字段进行过滤,再进行累计,最后求top(前)字段。

步骤404、通过流式规则引擎的业务数据处理模块将业务规则解析模块解析出的业务规则数据与业务数据进行规则匹配处理。

该步骤中,业务数据处理模块通过将业务数据流与规则配置流(解析出的业务规则数据)进行join(联接)操作,根据业务规则数据中的业务规则对业务数据流中的业务数据进行逐条判断,并进行相应的规则匹配处理,最后生成结果数据。需说明的是,此处的规则匹配处理可以采用现有技术中的规则匹配处理方式,本发明并不加以限定。

其中,业务数据流可以是从业务数据源kafka(卡夫卡)里面消费(获取)过来的数据流,规则配置流是从步骤401中开始配置并经过一系列处理解析出的业务规则数据。

步骤405、通过流式规则引擎的结果输出模块输出业务数据处理模块的处理结果。

该步骤中,结果输出模块可以将json数据里的业务数据编号的名字作为表名输出,例如输出到数据库中。

结果输出模块输出的处理结果的结果数据,可以包含但不限于以下内容:1)子业务系统信息名称;2)累计结果;3)top结果。

综上所述,本发明使用flink框架平台来构造规则引擎,使用flink的内存计算的原理成功解决了内置聚合速度慢的问题,使得本发明提供的规则引擎更适合用户进行业务上的大量聚合操作;本发明利用flink框架平台的分布式特点,可以将成千上万台计算机的内存、cpu和磁盘运算资源整合在一起,因此成功解决了因为日益增长的大数据量的运算带来的运算资源不足的问题,满足了日益增长的大数据量和日益复杂的业务的需求,且适用于开源环境。本发明还可以通过设置的规则配置页面配置业务规则数据,通过规则配置页面就可以将业务规则(业务逻辑)从程序代码中脱离出来,使得业务规则的配置更加标准化和专业化。

上文中已经参考附图详细描述了根据本发明的技术方案。

此外,根据本发明的方法还可以实现为一种计算机程序或计算机程序产品,该计算机程序或计算机程序产品包括用于执行本发明的上述方法中限定的上述各步骤的计算机程序代码指令。

或者,本发明还可以实施为一种非暂时性机器可读存储介质(或计算机可读存储介质、或机器可读存储介质),其上存储有可执行代码(或计算机程序、或计算机指令代码),当所述可执行代码(或计算机程序、或计算机指令代码)被电子设备(或计算设备、服务器等)的处理器执行时,使所述处理器执行根据本发明的上述方法的各个步骤。

本领域技术人员还将明白的是,结合这里的公开所描述的各种示例性逻辑数据块、模数据块、电路和算法步骤可以被实现为电子硬件、计算机软件或两者的组合。

附图中的流程图和框图显示了根据本发明的多个实施例的系统和方法的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模数据块、程序段或代码的一部分,所述模数据块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标记的功能也可以以不同于附图中所标记的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

以上已经描述了本发明的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术的改进,或者使本技术领域的其它普通技术人员能理解本文披露的各实施例。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1