事件处理方法及装置与流程

文档序号:15236629发布日期:2018-08-24 05:44阅读:187来源:国知局

本发明涉及计算机技术领域,具体而言,涉及一种事件处理方法及装置。



背景技术:

随着计算机网络技术的发展,线上活动可以使用较少的人力资源,却能够实现有序地分配奖品,因此,各种活动都采用线上进行的模式,例如,抽奖、有条件送奖活动。现有的是一般针对每一场活动,设置专门的线上程序,供用户操作,但是由于目前竞争激烈和快节奏的互联网行业特别是互联网金融行业,活动更新速度比较快,编程人员在每一场活动都需要设置对应的线上程序,导致工作量较大,活动产生率相对较低。



技术实现要素:

有鉴于此,本发明实施例的目的在于提供一种事件处理方法及装置。

本发明实施例提供的一种事件处理方法,应用于服务器,所述服务器与客户终端通信连接,包括:

接收客户终端发送的事件请求,所述事件请求携带该事件请求的事件属性;

根据所述事件属性与预存的一种或多种活动规则进行匹配,查找与该事件请求对应的目标活动规则;

将所述目标活动规则与所述事件请求对应的用户事件加载至目标上下文对象进行解析,解析得到与所述用户事件对应的活动结果。

本发明实施例还提供一种事件处理装置,应用于服务器,所述服务器与客户终端通信连接,所述事件处理装置包括:

接收模块,用于接收客户终端发送的事件请求,所述事件请求携带该事件请求的事件属性;

匹配模块,用于根据所述事件属性与预存的一种或多种活动规则进行匹配,查找与该事件请求对应的目标活动规则;

解析模块,用于将所述目标活动规则与所述事件请求对应的用户事件加载至目标上下文对象进行解析,解析得到与所述用户事件对应的活动结果。

与现有技术相比,本发明实施例的事件处理方法及装置,通过使用具体活动规则时,再将所述活动规则加载至目标上下文对象,以解析所述活动规则,得到活动结果;以使处理事项具有重复使用性。进一步地,即使活动更新速度快的情况下,编程人员也不需要每一场活动都需要设置对应的线上程序,直接加载预存的活动规则就能够执行活动内容,降低工作人员的工作量的情况下活动产生率提高。

为使本发明的上述目的、特征和优点能更明显易懂,下文特举较佳实施例,并配合所附附图,作详细说明如下。

附图说明

为了更清楚地说明本发明实施例的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,应当理解,以下附图仅示出了本发明的某些实施例,因此不应被看作是对范围的限定,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他相关的附图。

图1为本发明较佳实施例提供的服务器与客户终端进行交互的示意图。

图2为本发明较佳实施例提供的服务器的方框示意图。

图3为本发明较佳实施例提供的事件处理方法的流程图。

图4为本发明较佳实施例提供的事件处理方法的步骤s203的详细流程图。

图5为本发明较佳实施例提供的事件处理装置的功能模块示意图。

具体实施方式

下面将结合本发明实施例中附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。通常在此处附图中描述和示出的本发明实施例的组件可以以各种不同的配置来布置和设计。因此,以下对在附图中提供的本发明的实施例的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施例。基于本发明的实施例,本领域技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。

应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。同时,在本发明的描述中,术语“第一”、“第二”等仅用于区分描述,而不能理解为指示或暗示相对重要性。

如图1所示,是本发明较佳实施例提供的服务器100与客户终端200进行交互的示意图。所述服务器100通过网络与一个或多个客户终端200进行通信连接,以进行数据通信或交互。所述服务器100可以是网络服务器、数据库服务器等,当然所述服务器100也可以是个人电脑(personalcomputer,pc)、平板电脑、智能手机、个人数字助理(personaldigitalassistant,pda)等。所述客户终端200可以是个人电脑(personalcomputer,pc)、平板电脑、智能手机、个人数字助理(personaldigitalassistant,pda)等。

所述客户终端200中可安装有浏览器等指定应用程序。所述客户终端200可通过浏览器或其它指定应用程序向所述服务器100发送事件请求。进一步地,所述事件请求可以是账号注册请求、领奖获取请求、下单请求及实名制请求等操作请求。

图2为上述的服务器100的一个实施例的结构框图。如图2所示,服务器100包括:存储器102、处理器104以及网络模块106。可以理解,图2所示的结构仅为示意,其并不对服务器100的结构造成限定。例如,服务器100还可包括比图2中所示更多或者更少的组件,或者具有与图2所示不同的配置。

存储器102可用于存储软件程序以及模块,如本发明实施例中的页面版本测试方法、装置及系统对应的程序指令/模块,处理器104通过运行存储在存储器102内的软件程序以及模块,从而执行各种功能应用以及数据处理,即实现上述的页面版本测试方法。存储器102可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器102可进一步包括相对于处理器104远程设置的存储器,这些远程存储器可以通过网络连接至服务器100。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。

网络模块106用于接收以及发送网络信号。上述网络信号可包括无线信号或者有线信号。在一个实例中,上述网络信号为有线网络信号。此时,网络模块106可包括处理器、随机存储器、转换器、晶体振荡器等元件。

上述的软件程序以及模块包括:操作系统108以及事件处理装置110。其中操作系统108例如可为linux,unix,windows,其可包括各种用于管理系统任务(例如内存管理、存储设备控制、电源管理等)的软件组件和/或驱动,并可与各种硬件或软件组件相互通讯,从而提供其他软件组件的运行环境。事件处理装置110运行在操作系统108的基础上,并通过操作系统108的网络服务监听来自网络的请求,根据请求完成相应的数据处理,并返回处理结果给客户终端200。也就是说,事件处理装置110用于向客户终端200提供服务。

营销运营系统是互联网公司重要的日常运营工具,现有的营销运营方式基本上都是每次活动都是需要具体开发以及测试最终发布上线,最终展现在用户面前。这种方式对于目前竞争激烈和快节奏的互联网行业特别是互联网金融行业的快速发展是很不利的,主要由于以下几方面的缺点造成:1).沟通成本高:活动方案制定需要多个部门的协同作业,例如:运营部门出具活动方案、产品部门设计产品原型、开发部门评审可行性以及开发设计、运维部门还需要针对活动期间的服务器资源调配。如此一来,大量的时间都耗费在部门间的沟通上,增加了无形成本;2).活动发布成本高:每一次活动都需要不同程度的开发测试以及发布,此过程中是各方面资源的浪费;3).代码复用率低:由于活动多样性,每次活动与之前的活动规则和接口都有诸多甚至全部不能复用的地方;4).维护成本高:由于代码的复用率低,整个系统随着活动的不断增加会变得越来越臃肿,很多没用的代码一直在系统中,对于后期的维护特别是新接手的同事是很大的挑战,系统内部接口的升级需要兼容各个版本;5).服务器资源消耗多:对于过期活动可能依然在服务器上运行(特别服务类),会造成服务器资源的不必要浪费;6).活动一旦开发完成,活动规则和方案基本确定,不利于在运营中修改活动方案和活动规则;7).系统参差不齐,不同平台的信息难以集中化管理;8).系统之间的耦合性较大,针对活动中数据传递各个系统形成了蛛网模型,且任何一个接口的异常都可能导致系统的雪崩。

本发明通过以下几个实施例能够有效地解决上述缺陷,具体描述如下。所述营销运营可执行图3所示中的各个步骤。

请参阅图3,是本发明较佳实施例提供的应用于图2所示的服务器100的事件处理方法的流程图。下面将对图3所示的具体流程进行详细阐述。

步骤s201,接收客户终端发送的事件请求。

本实施例中,所述事件请求携带该事件请求的事件属性。所述事件属性可包括用户识别号、事件发生时间、事件注册账号、事件发生ip地址、注册来源等信息。

本实施例中,在步骤接收客户终端发送的事件请求之后,所述方法还包括:向所述客户终端发送确认消息。

一般的消息订阅中,一条消息在接收方接受到并顺利执行完后会被ack(发送确认消息),在消息量比较大的情况下,可能造成消息堆积现象。为避免延迟,在上述步骤s201处,当所述服务器接收到事件请求后,所述服务器将抛出一个异步线程处理该事件请求(也就是后面的步骤s202和步骤s203),此时所述服务器可给发送事件请求的客户终端发送确认消息,所述客户终端可以继续发送其它消息,以此保证了消息的及时处理,也充分利用了所述服务器的资源。

本实施例中,所述服务器中预先针对用户在客户终端所提供操作界面的关键操作(暂定为事件,以下均以事件表述)定义其事件属性;针对用户在客户终端所提供操作界面的事件添加消息队列触发埋点,并将该事件以消息队列的形式广播;通过自定义脚本配置活动规则,规则中使用事件属性校验用户行为是否满足活动要求,每个活动隶属于一个事件;创建消息队列监听通道。

步骤s202,根据所述事件属性与预存的一种或多种活动规则进行匹配,查找与该事件请求对应的目标活动规则。

本实施例中,所述用户事件可以匹配到一种或多种活动规则。在一个实例中,所述事件属性可以包括事件发生的时间,可以通过所述事件发生的事件与预存的一种或多种活动规则中的每一种活动规则规定的活动时间段进行匹配,如果所述事件发生的时间在任一活动时间内,则表示该活动规则为所述目标活动规则。例如,若所述事件发生的时间在多个活动规则所规定的时间段内,则可以匹配到多个活动规则。

在另一个实例中,所述事件属性包括投资金额,则可以通过所述投资金额与预存的一种或多种活动规则中的每一种活动规则规定的投资金额范围进行匹配,若所述事件请求的投资金额在任一活动规则规定的投资金额范围内,则将该活动规则为所述目标活动规则。

本实施例中,所述一种或多种活动规则存储在数据库中,例如,所述数据库可以是mongodb。所述mongodb是一个基于分布式文件存储的数据库。

本实施例中,所述服务器中预存有一种或多种活动规则。所述活动规则可以在活动执行前由与服务器通信连接的管理终端发送的,以进行存储的活动规则;也可以是由直接布置在所述服务器中的一种或多种活动规则。

在一种实施方式中,所述服务器与管理终端通信连接,所述方法还包括:接收管理终端发送的一种或多种活动规则;然后,对接收到的一种或多种活动规则进行注册,以创建事件队列监听通道。

本实例事件队列监听通道采用先注册后使用的模式,在创建活动后需要选择注册启动,活动规则才可生效,这样避免了在活动编辑状态规则生效导致的不必要错误。另外由于消息队列的量相对较大。

本发明实施例中的事件处理方法采用多实例应用的集群部署方案,多个用户事件或多个活动规则对应的活动之间共享队列,防止消息的重复消费,提高了队列消费的吞吐量(tps)。

在另一种实施方式中,在活动执行之前,所述服务器可接收用户输入,或上传的活动规则相关数据,并将所述相关数据保存形成所述一种或多种活动规则。然后,对接收到的一种或多种活动规则进行注册,以创建事件队列监听通道。

进一步地,所述服务器在接收所述事件请求之前先根据所述活动规则创建活动,并配置该活动规则,指定其事件类型,并注册到队列中监听;以使所述服务器能够监听到所述客户终端发送的所述事件请求。

通过上述设置活动方案可以只需运营人员在活动之前设置活动规则即可,无需其他部门人员参与,很大程度减少不必要的沟通成本。另外,活动的发布只需预先配置活动规则即可,无需开发以及发布流程,活动可以快速上线。进一步地,活动是通过活动规则配置生成的,在任何时候都可以根据需要作出调整,使活动的灵活性更好。

步骤s203,将所述目标活动规则与所述事件请求对应的用户事件加载至目标上下文对象进行解析,解析得到与所述用户事件对应的活动结果。

本实施例中,将所述目标活动规则及所述用户事件加载到目标上下文对象中。本实施例中,可以将所述用户事件对应的事件属性为参数加载到所述目标上下文对象中。在一个实例中,本实施例中的事件处理方法用于处理为满足条件的用户进行奖品分配活动。

本实施例中,解析之前还可以加载额外数据,例如:历史统计数据以及事件信息之外的用户相关数据。

本实施例中,所述服务器中存储有解析引擎;在一种实施方式中,所述解析引擎可以是js解析引擎。如图4所示,所述步骤s203包括:步骤s2031至步骤s2033。

步骤s2031,将所述活动规则加载至所述目标上下文对象,以初始化所述解析引擎。

本实施例中,所述解析引擎中预制有模板方法,所述模板方法用于对所述活动规则进行运算;

步骤s2032,使用所述解析引擎以活动规则对所述用户事件进行解析,得到执行结果。

步骤s2033,根据所述执行结果与预存的奖品信息进行匹配得到目标奖品信息。

进一步地,在步骤s2033之后,所述方法还包括:将所述目标奖品信息发送至奖品队列中。

所述目标奖品信息可以包括奖励项目、奖励对象、奖励对象的识别号(例如,手机号)等。

解析所述用户事件的过程使用的第一应用程序进行处理,奖品信息使用另外的应用程序进行处理。奖品信息使用另第二应用程序进行处理。详细地,第一应用程序解析所述用户事件得到所述执行结果后得到目标奖品信息,所述第一应用程序使用rabbitmq通信将所述目标奖品信息发送给奖品队列进行保存。所述第二应用程序则可以读取所述奖品队列中的奖品信息。所述rabbitmq通信是一种应用程序对应用程序的通信方法。

所述步骤s2033可以是先根据所述执行结果匹配对应的目标奖品信息,然后将所述目标奖品信息发送至一队列中进行保存,以使相关人员可以从所述奖品队列中获取奖品信息,以为获奖用户颁发奖品。

在一种实施方式中,所述事件处理方法是基于rabbitmq消息队列,使用js脚本规则解析引擎实现的用户事件的解析。其主要解决的技术问题是:避免重复的、冗余的活动开发,以及各部门的人力资源的浪费;满足日益丰富且多变的运营活动需求;降低系统的冗余程度,提高代码的复用率,减少服务资源开销;降低系统之间的耦合程度,避免系统之间的直接影响;独立业务功能的集中化管理,减少系统的运维成本。

解决上述技术问题主要是通过以下几点改进实现的:本实施例中使用的js解析引擎不针对特定活动,在元数据层面深度扩展,有效支撑了大部分活动规则的灵活配置,提高了代码复用率,也大幅度减少了活动的开发成本;采用mongodb作为数据存储数据库,有效满足对格式多变的活动规则以及海量用户行为数据的存储。对于活动规则中需要统计的数据,在事件触发后累计存储在redis中,在规则中使用时从redis中获取,避免了规则校验时再次统计,提高了系统吞吐量(tps)以及性能。系统采用rabbitmq通讯,降低系统之间的耦合程度,同时也减少了系统之间的依赖程度。系统在活动规则解析和奖品信息发送层面完全解耦,在规则解析成功后通过mq队列发送奖品信息,奖品服务独立处理奖品数据。

本实施例中,所述步骤s2032之后,所述方法还包括:判断所述执行结果与预设的预期结果是否匹配;若所述执行结果与预设的预期结果不匹配,则不执行步骤s2033直接将所述用户事件进行保存。若所述执行结果与预设的预期结果匹配,则执行步骤s2033后将所述用户事件进行保存。在一种实施方式中,所述用户事件可以存储在数据库中,所述数据库可以是mongodb。在每次用户事件结束或者因为执行错误被中止的数据均被保存,有利于用户管理活动过程中的数据。

本实施例中,所述根据所述事件属性与所述一种或多种活动规则进行匹配,查找与该事件请求对应的目标活动规则的步骤包括:启动一异步线程根据所述事件属性与所述一种或多种活动规则进行匹配,查找与该事件请求对应的目标活动规则。本实施例中的所有用户事件都是通过消息异步处理,各系统之间耦合性降低,并且任务和奖励等作为单独服务各种集中化管理,便于系统维护和稳定

本发明实施例的事件处理方法,通过使用具体活动规则时,再将所述活动规则加载至目标上下文对象,以解析所述活动规则,得到活动结果;以使处理事项具有重复使用性。进一步地,即使活动更新速度快的情况下,编程人员也不需要每一场活动都需要设置对应的线上程序,直接加载预存的活动规则就能够执行活动内容,降低工作人员的工作量的情况下活动产生率提高。

下面以一个实例描述所述事件处理方法的流程。

本实例以注册送体验金为例,活动规则为:在2017/12/1至2017/12/12时间段从迅雷推广进入并且在应用程序(app)注册的用户送10000元体验金。假设注册事件可包含的事件属性如下(包含但不限于):customerid(用户id);phone(手机号);platform(注册平台);registdate(注册时间),utmsource(注册来源)。当然,所述事件属性也可以包含有其它内容。

首先,活动配置阶段:

配置活动信息:活动时间、活动名称等。在一种实施方式中,可以有管理终端接收运营人员输入的活动信息,再由所述管理终端发送给服务器进行保存。配置活动规则信息:evt.platform==”app”&&evt.registdate>=newdate('2017/12/100:00:00')&&evt.registdate<newdate('2017/12/1300:00:00')&&evt.utmsource=”xunlei”。配置奖品信息(奖品与活动关联):10000元体验金。注册活动事件:即修改活动服务版本,重新注册每一个活动到队列中。

其次,用户事件解析阶段:

接受到客户终端发送的注册请求,根据所述注册请求所携带的事件属性匹配相应活动规则。此处匹配是所有的注册成功的活动事件对应的活动规则。在一个实例中,可以首先筛选出当前有效的活动规则,对有效的每个活动规则进行下面的规则校验;

加载活动规则和事件信息到上下文:此时会将事件信息以evt对象的形式加载到上下文对象,假设当前事件信息为:{“platform”:”app”,”registdate”:”2017/12/2,12:00:00”,”customerid”:12345,”phone”:”13800138000”,”utmsource”:”xunlei”},然后将活动规则和事件信息同时给js解析引擎(以规则为表达式,事件信息为参数进行校验),所述js解析引擎可以输出最后执行结果。如果通过则执行:解析奖品信息:上面的规则校验已通过,此处将活动关联的奖品信息以mq形式发送给奖品队列。

最后保存用户事件的所有足迹信息。所述足迹信息可以包括成功生成奖品信息的用户事件,和未能解析成功的用户事件。

本实例事件监控采用先注册后消费的模式,在创建活动后需要选择注册启动,活动规则才可生效,这样避免了在活动编辑状态规则生效导致的不必要错误,另外由于消息队列的量相对较大,本系统采用多实例应用的集群部署方案,多个实例之间共享队列,防止消息的重复消费。

请参阅图5,是本发明较佳实施例提供的图2所示的事件处理装置110的功能模块示意图。本实施例中的所述事件处理装置110中的各个模块及单元用于执行上述方法实施例中的各个步骤。所述事件处理装置110包括:接收模块1101、匹配模块1102、以及解析模块1103。

所述接收模块1101,用于接收客户终端发送的事件请求,所述事件请求携带该事件请求的事件属性。

所述匹配模块1102,用于根据所述事件属性与预存的一种或多种活动规则进行匹配,查找与该事件请求对应的目标活动规则。

所述解析模块1103,用于将所述目标活动规则与所述事件请求对应的用户事件加载至目标上下文对象进行解析,解析得到与所述用户事件对应的活动结果。

本实施例中,所述服务器中存储有解析引擎;所述解析引擎可以是js解析引擎。所述解析模块1103包括:初始化单元、第一解析单元及第二解析单元。

所述初始化单元,用于将所述活动规则加载至所述目标上下文对象,以初始化所述解析引擎,所述解析引擎中预制有模板装置,所述模板装置用于对所述活动规则进行运算。

所述第一解析单元,用于使用所述解析引擎以活动规则对所述用户事件进行解析,得到执行结果。

所述第二解析单元,用于根据所述执行结果与预存的奖品信息进行匹配得到目标奖品信息。

本实施例中,所述解析模块解析得到所述目标奖品信息,所述目标奖品信息被发送至奖品队列中。

本实施例中,所述匹配模块1102用于启动一异步线程根据所述事件属性与所述一种或多种活动规则进行匹配,查找与该事件请求对应的目标活动规则。

本实施例中,所述事件处理装置110还包括:确认模块1104,用于向所述客户终端发送确认消息。

本实施例中,所述事件处理装置110还包括:注册模块1105,用于接收管理终端发送的一种或多种活动规则,并对接收到的一种或多种活动规则进行注册,以创建事件队列监听通道。

关于本实施例中的其它细节可以进一步地参考上述方法实施例中的描述,在此不再赘述。

本发明实施例的事件处理装置,通过使用具体活动规则时,再将所述活动规则加载至目标上下文对象,以解析所述活动规则,得到活动结果;以使处理事项具有重复使用性。进一步地,即使活动更新速度快的情况下,编程人员也不需要每一场活动都需要设置对应的线上程序,直接加载预存的活动规则就能够执行活动内容,降低工作人员的工作量的情况下活动产生率提高。

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

另外,在本发明各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。

所述功能如果以软件功能模块的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、磁碟或者光盘等各种可以存储程序代码的介质。需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。应注意到:相似的标号和字母在下面的附图中表示类似项,因此,一旦某一项在一个附图中被定义,则在随后的附图中不需要对其进行进一步定义和解释。

以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以权利要求的保护范围为准。

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