一种基于js的与企业系统进行对接的方法及装置制造方法

文档序号:7781242阅读:250来源:国知局
一种基于js的与企业系统进行对接的方法及装置制造方法
【专利摘要】本发明提出了一种基于js的与企业系统进行对接的方法,包括如下步骤:客户端通过http协议json的数据格式向jsse发送请求并对所述请求进行处理;所述jsse包括适配器组件和能力组件,所述适配器组件和能力组件具有API接口;调用所述适配器组件或能力组件的API接口与所述企业系统对接,来实现对企业系统接口数据格式的转换。本发明还涉及一种实现上述基于js的与企业系统进行对接的方法的装置。实施本发明的基于js的与企业系统进行对接的方法及装置,具有以下有益效果:占用较少带宽、能解析报文内容、安全性有保证、能解决语义问题。
【专利说明】一种基于js的与企业系统进行对接的方法及装置
【技术领域】
[0001]本发明涉及系统对接领域,特别涉及一种基于js (javascript)的与企业系统进行对接的方法及装置。
【背景技术】
[0002]SOA (Service-Oriented Architecture,面向服务的体系结构)是一个组件模型,它将应用程序的不同功能单元(称为服务)通过在这些服务之间定义良好的接口和契约联系起来。接口是采用中立的方式进行定义的,其独立于实现服务的硬件平台、操作系统和编程语言。这使得构建在各种各样的系统中的服务可以使用一种统一和通用的方式进行交互。
[0003]SOA是一种粗粒度、松耦合服务架构,服务之间通过简单、精确定义接口进行通讯,不涉及底层编程接口和通讯模型。SOA可以看作是B/S (Browser/Server,浏览器/服务器)模型、XML/Web Service (可扩展标记语言/Web服务)技术之后的自然延伸。
[0004]SOA技术本身存在以下问题:(I) SOA可以说是Web Service技术的延伸,数据传输常采用SOAP协议(xml),xml在数据传输过程中,较之json数据格式浪费了大量的带宽,没有json数据格式精简实用;(2)移动互联网HTML5应用无法解析xml的报文内容,需引入其他解析模块才能很好的支持xml解析,对json数据的解析HTML5应用原生支持;(3)以往访问控制只需要登录和验证;而在SOA环境中,由于一个应用软件的组件很容易去与不同域领域、不同系统的其他组件进行对话,所以确保迥然不同又相互连接的系统之间的安全性就会变得特别困难;(4)定义事务和数据的业务含义,一直是IT管理人员面临的最棘手问题。语义关系是设计良好SOA架构的核心要素。就目前而言,没有哪一项技术或软件产品能够真正解决语义问题。

【发明内容】

[0005]本发明要解决的技术问题在于,针对现有技术的上述浪费带宽、无法解析报文内容、安全性没有保证、不能解决语义问题的缺陷,提供一种占用较少带宽、能解析报文内容、安全性有保证、能解决语义问题的基于js的与企业系统进行对接的方法及装置。
[0006]本发明解决其技术问题所采用的技术方案是:构造一种基于js的与企业系统进行对接的方法,包括如下步骤:
A)客户端通过http协议json(JavaScript Object Notation,—种轻量级的数据交换格式)的数据格式向jsse (JavaScript Service Engine, js服务引擎)发送请求并对所述请求进行处理;所述jsse包括适配器组件和能力组件,所述适配器组件和能力组件具有API接口 ;
B)调用所述适配器组件或能力组件的API接口与所述企业系统对接,来实现对企业系统接口数据格式的转换。
[0007]在本发明所述的基于js的与企业系统进行对接的方法中,所述jsse还包括主核心框架和js引擎。
[0008]在本发明所述的基于js的与企业系统进行对接的方法中,所述步骤A)进一步包括:
Al)客户端按照符合http协议的json的数据格式向所述主核心框架发送请求;
A2)所述主核心框架对所述请求进行解析,并获取所述请求中携带的数据;
A3)所述主核心框架将所述js引擎加载到所述jsse中;
A4)所述主核心框架依据所述请求中携带的数据将指定的js逻辑文件内容加载到所述jsse中;
A5)所述主核心框架通过所述js引擎解析并执行所述js逻辑文件的内容;
A6)判断执行的js逻辑文件的内容中是否存在加载适配器组件或能力组件的脚本代码,如是,执行步骤A7);否则,不执行任何操作;
A7)所述主核心框架将指定的适配器组件或能力组件加载到所述jsse中。
[0009]在本发明所述的基于js的与企业系统进行对接的方法中,所述步骤B)进一步包括:
BI)调用指定的适配器组件或能力组件的API接口与所述企业系统进行对接;
B2)将调用结果返回给所述主核心框架;
B3)所述主核心框架按照符合http协议的json的数据格式将所述调用结果返回给所述客户端。
[0010]在本发明所述的基于js的与企业系统进行对接的方法中,在执行完所述js逻辑文件的内容、响应完所述请求后或在所述jsse接收客户端请求并未确认客户端的合法性及客户端数据的完整性之前,所述js引擎进入或处于休眠状态。
[0011]本发明还涉及一种实现上述基于js的与企业系统进行对接的方法的装置,包括:请求发送单元:用于使客户端通过http协议json的数据格式向jsse发送请求并对所述请求进行处理;所述jsse包括适配器组件和能力组件,所述适配器组件和能力组件具有API接口 ;
接口调用转换单元:用于调用所述适配器组件或能力组件的API接口与所述企业系统对接,来实现对企业系统接口数据格式的转换。
[0012]在本发明所述的实现上述基于js的与企业系统进行对接的方法的装置中,所述jsse还包括主核心框架和js引擎。
[0013]在本发明所述的实现上述基于js的与企业系统进行对接的方法的装置中,所述请求发送单元进一步包括:
格式请求发送模块:用于使客户端按照符合http协议的json的数据格式向所述主核心框架发送请求;
解析模块:用于使所述主核心框架对所述请求进行解析,并获取所述请求中携带的数
据;
引擎加载模块:用于使所述主核心框架将所述js引擎加载到所述jsse中;
逻辑文件加载模块:用于使所述主核心框架依据所述请求中携带的数据将指定的js逻辑文件内容加载到所述jsse中;
解析执行模块:用于使所述主核心框架通过所述js引擎解析并执行所述js逻辑文件的内容;
加载判断模块:用于判断执行的js逻辑文件的内容中是否存在加载适配器组件或能力组件的脚本代码;
指定加载模块:用于使所述主核心框架将指定的适配器组件或能力组件加载到所述jsse 中ο
[0014]在本发明所述的实现上述基于js的与企业系统进行对接的方法的装置中,所述接口调用转换单元进一步包括:
调用对接模块:用于调用指定的适配器组件或能力组件的API接口与所述企业系统进行对接;
调用结果返回模块:用于将调用结果返回给所述主核心框架;
调用结果格式返回模块:用于使所述主核心框架按照符合http协议的json的数据格式将所述调用结果返回给所述客户端。
[0015]在本发明所述的实现上述基于js的与企业系统进行对接的方法的装置中,在执行完所述js逻辑文件的内容、响应完所述请求后或在所述jsse接收客户端请求并未确认客户端的合法性及客户端数据的完整性之前,所述js引擎进入或处于休眠状态。
[0016]实施本发明的基于js的与企业系统进行对接的方法及装置,具有以下有益效果:由于客户端通过http协议json的数据格式向jsse发送请求并对请求进行处理;jsse包括适配器组件和能力组件,适配器组件和能力组件具有API接口 ;通过调用适配器组件或能力组件的API接口与所述企业系统对接,来实现对企业系统接口数据格式的转换,使用json数据格式精简实用,所以占用较少带宽,移动互联网HTML5能对json数据进行解析;适配器组件和能力组件具有统一的API接口,很容易实现各接口的对接,所以安全性有保证,基于标准的javascript开发语言,简单编写具有逻辑的javascript文件,便可实现复杂的业务逻辑,不用太多的考虑语义问题,所以能解决语义问题。
【专利附图】

【附图说明】
[0017]为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
[0018]图1为本发明基于js的与企业系统进行对接的方法及装置一个实施例中对接企业系统的结构示意图;
图2为所述实施例中方法的流程图;
图3为所述实施例中客户端通过http协议json的数据格式向jsse发送请求并对请求进行处理的具体流程图;
图4为所述实施例中调用适配器组件或能力组件的API接口与企业系统对接,来实现对企业系统接口数据格式的转换的具体流程图;
图5为所述实施例中实现与企业系统对接的时序图;
图6为所述实施例中装置的结构示意图。【具体实施方式】
[0019]下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0020]在本发明基于js的与企业系统进行对接的方法及装置实施例中,其对接企业系统的结构示意如图1所示。图1中,通过编写javascript脚本,调用API (已有或自定义)能力,便可完成对企业系统的对接,从而实现新业务系统功能。本实施例中,jsse包括适配器组件和能力组件,适配器组件和能力组件具有API接口,适配器组件包含多种适配器,能力组件有多种。jsse还包括主核心框架和js引擎。新的业务系统通过http协议json的数据格式请求jsse, jsse通过适配器组件或能力组件与现有的企业系统对接,来实现完成对现有的企业系统接口数据格式的转换,从而实现预定义功能。使用js语言可快速上手,学习成本低,提供强大的API支持,基于标准的javascript开发语言,通过简单编写具有逻辑的javscript文件,便可实现复杂的业务逻辑。
[0021]本实施例中,上述基于js的与企业系统进行对接的方法的流程图如图2所示。图2中,该方法包括如下步骤:
步骤SOl客户端通过http协议json的数据格式向jsse发送请求并对请求进行处理:本步骤中,客户端(请求方,也相当于图1中的新业务系统)通过http协议json的数据格式向jsse发送请求并对请求进行处理,特别指出的是,jsse协议请求为http协议传输的数据格式为json。
[0022]步骤S02调用适配器组件或能力组件的API接口与企业系统对接,来实现对企业系统接口数据格式的转换:本步骤中,调用适配器组件或能力组件的API接口与企业系统对接,来实现对企业系统接口数据格式的转换。使用json数据格式精简实用,所以占用较少带宽,移动互联网HTML5能对json数据进行解析;适配器组件和能力组件具有统一的API接口,很容易实现各接口的对接,所以安全性有保证,基于标准的javascript开发语言,简单编写具有逻辑的javscript文件,便可实现复杂的业务逻辑,不用太多的考虑语义问题,所以能解决语义问题。
[0023]现有技术中,SOA通过所谓粗粒度服务接口和分级,确实提高了效率,实现流程化以后,也确实简化了开发难度。但是如果这个流程不适合企业的实际情况,还是需要个性化开发。在本实施例中,提供适配器组件和能力组件的开发标准,可自定义更具针对性的适配器或能力组件,并且各个适配器、能力组件之间可自由组装,并不依赖,可以很好的解决现有技术中的问题。
[0024]对于本实施例而言,上述步骤SOl还可进一步细化,其细化后的流程图如图3所示。图3中,上述步骤SOl进一步包括:
步骤Sll客户端按照符合http协议的json的数据格式向主核心框架发送请求:本步骤中,客户端按照符合http协议的json的数据格式向主核心框架发送请求。
[0025]步骤S12主核心框架对请求进行解析,并获取请求中携带的数据:本步骤中,主核心框架对请求进行解析,并获取请求中携带的数据。
[0026]步骤S13主核心框架将js引擎加载到jsse中:本步骤中,主核心框架加载js引擎,并将js引擎加载到jsse中。
[0027]步骤S14主核心框架依据请求中携带的数据将指定的js逻辑文件内容加载到jsse中:本步骤中,主核心框架依据请求中携带的数据加载指定的js逻辑文件内容,并将指定的js逻辑文件内容加载到jsse中。
[0028]步骤S15主核心框架通过js引擎解析并执行js逻辑文件的内容:本步骤中,主核心框架通过js引擎解析并执行js逻辑文件的内容。
[0029]步骤S16判断执行的js逻辑文件的内容中是否存在加载适配器组件或能力组件的脚本代码:本步骤中,判断执行的js逻辑文件的内容中是否存在加载适配器组件或能力组件的脚本代码,如果判断的结果为是,则执行步骤S18 ;否则,执行步骤S17。
[0030]步骤S17不执行任何操作:如果上述步骤S16的判断结果为否,则执行本步骤。本步骤中,不执行任何操作。
[0031]步骤S18主核心框架将指定的适配器组件或能力组件加载到jsse中:如果上述步骤S16的判断结果为是,则执行本步骤。本步骤中,主核心框架将指定的适配器组件或能力组件加载到jsse中。
[0032]对于本实施例而言,上述步骤S02还可进一步细化,其细化后的流程图如图4所示。图4中,上述步骤S02进一步包括:
步骤S21调用指定的适配器组件或能力组件的API接口与企业系统进行对接:本步骤中,调用指定的适配器组件或能力组件的API接口与企业系统进行对接。
[0033]步骤S22将调用结果返回给主核心框架:本步骤中,将调用结果返回给主核心框架。
[0034]步骤S23主核心框架按照符合http协议的json的数据格式将调用结果返回给客户端:本步骤中,主核心框架按照符合http协议的json的数据格式将调用结果返回给客户端。基于标准js语法,完成与现有的企业系统的交互,实现系统对接,并返回根据客户端(请求方)要求的数据格式及数据。这样就完成了对现有的企业系统接口数据格式的转换,从而实现预定义功能。
[0035]下面介绍上述主核心框架、js引擎、适配器组件和能力组件等四个组件。主核心框架的主要功能职责有:接收、分解客户端的请求,并获取请求中携带的数据;加载js引擎至jsse中;根据请求数据,加载指定js逻辑文件的内容;通过js引擎解析并执行js逻辑文件的内容。若执行的javascript脚本中存在加载适配器或能力组件的脚本代码,主核心框架也将js逻辑文件中指定的适配器或能力组件加载至js引擎中。
[0036]js引擎是javascript解析和执行内核,本实施例中,js引擎采用Java jdkl.7中默认支持带有的Mozilla Rhino。Mozilla Rhino是一个完全使用java语言编写的开源js引擎实现,主要用于在java环境中执行js程序,为最终用户提供脚本化能力。
[0037]js引擎在整个jsse运行时态中存在几个状态,分别为休眠状态、初始状态和运行状态。程序初次启动,便会实现部分休眠态的js引擎实例,jsse执行完js逻辑文件的内容,响应完客户端(请求方)的请求后,js引擎便会重新进入休眠态。jsse在做系统服务的对接时,当jsse接收请求方的请求,在未确认请求方的合法性及请求方数据的完整性之前,为了保障系统资源的不浪费,js引擎是不会进行加载和准备执行的,此时js引擎将处于休眠态。[0038]在初始状态时,当jsse确认了请求方的合法性及数据的完整性后,便会加载js引擎,并实现一些初始的加载及准备执行预备工作。在运行状态时,当jsse进行真正的系统对接时,js引擎便会加载执行的js逻辑文件,并解析js逻辑文件预定义的逻辑,调用各个适配器或能力组件进行相关处理。
[0039]本实施例中,适配器组件及能力组件主要用于对现有企业系统进行适配和对接的工作。适配器组件包含多种适配器,如SQLAdapter (数据库适配器),HTTPAdapter (HTTP协议适配器)和EmailAdapte (邮件适配器)等等;其中,SQLAdapter主要用于对数据库进行对接(Oracle, Sqlserver, DB2, Mysql...), HttpAdapter 主要用于对接 HTTP 协议的相关接口(WebService、Http+Json、表单提交等),EmailAdapter 支持标准的 pop3 和 smtp 协议进行邮件的收发,主要用于对邮件系统进行对接。能力组件有多种,如FILEEnabler (文件能力组件)、DOCUMENTEnable (文档能力组件)、CODECEnabler (代码能力组件)和ZipEnabler(压缩能力组件)等等,其中,FileEnabler用于对文件协议的支持,支持对文件系统进行操作,DocumentEnabIer用于对office、pdf文档进行处理转换的操作,ZipEnabler用于压缩、解压缩的操作处理。另外除了上述列出来的适配器和能力组件,还有大量的适配器和能力组件在本实施例中就不一一进行列举了。
[0040]本实施例还涉及一种实现上述基于js的与企业系统进行对接的方法的装置,其结构示意图如图6所示。图6中,该装置包括请求发送单元I和接口调用转换单元2 ;其中,请求发送单元I用于使客户端通过http协议json的数据格式向jsse发送请求并对所述请求进行处理;jSSe包括适配器组件和能力组件,适配器组件和能力组件具有API接口 ;接口调用转换单元2用于调用适配器组件或能力组件的API接口与企业系统对接,来实现对企业系统接口数据格式的转换。本实施例中,jsse还包括主核心框架和js引擎。使用json数据格式精简实用,所以占用较少带宽,移动互联网HTML5能对json数据进行解析;适配器组件和能力组件具有统一的API接口,很容易实现各接口的对接,所以安全性有保证,基于标准的javascript开发语言,简单编写具有逻辑的javscript文件,便可实现复杂的业务逻辑,不用太多的考虑语义问题,所以能解决语义问题。
[0041]本实施例中,请求发送单元I进一步包括格式请求发送模块11、解析模块12、弓丨擎加载模块13、逻辑文件加载模块14、解析执行模块15、加载判断模块16和指定加载模块17 ;其中,格式请求发送模块11用于使客户端按照符合http协议的json的数据格式向主核心框架发送请求;解析模块12用于使主核心框架对请求进行解析,并获取请求中携带的数据;引擎加载模块13用于使主核心框架将js引擎加载到jsse中;逻辑文件加载模块14用于使主核心框架依据请求中携带的数据将指定的js逻辑文件内容加载到jsse中;解析执行模块15用于使主核心框架通过js引擎解析并执行js逻辑文件的内容;加载判断模块16用于判断执行的js逻辑文件的内容中是否存在加载适配器组件或能力组件的脚本代码;指定加载模块17用于使主核心框架将指定的适配器组件或能力组件加载到jsse中。
[0042]本实施例中,接口调用转换单元2进一步包括调用对接模块21、调用结果返回模块22和调用结果格式返回模块23 ;其中,调用对接模块21用于调用指定的适配器组件或能力组件的API接口与企业系统进行对接;调用结果返回模块22用于将调用结果返回给主核心框架;调用结果格式返回模块23用于使主核心框架按照符合http协议的json的数据格式将调用结果返回给客户端。[0043]本实施例中,在执行完js逻辑文件的内容、响应完客户端的请求后或在jsse接收客户端请求并未确认客户端的合法性及客户端数据的完整性之前,js引擎进入或处于休眠状态。这样可以节省资源。
[0044]总之,在本实施例中,jsse本身能支撑对接现有的大部分的接口协议,并且jsse还开发自定义适配器和能力组件的API,如此便能针对现有企业系统做更个性化的定制,具有更好的拓展性。由于使用js语言,其本局就具备跨平台特性,支持多种常见平台。jsse系统的配置灵活多变,系统部署成功后,系统本身配置文件和业务程序的配置项都可与jsse系统分离管理。系统部署简单,性能优越,系统可分布式多机部署。系统支持热部署,配置文件修改后便立即生效,配置文件和系统关联,但并不依赖。此外,系统支持多种模式(开发模式和部署模式),易于开发调试和正式部署,拥有独立的日志系统,日志以模块,系统来划分。使用js语言,其编程面向对象,可以很好地降低代码冗余,其代码复用率较高,更利于团队开发人员有效的分工和管理代码,提高工作效率。js引擎对象池具有自动伸缩特性,可实现系统的缓存,根据系统忙闲情况实现对连接资源的自动调度管理。同时,对象池提供链路状态自动检测和重连机制。
[0045]以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
【权利要求】
1.一种基于js的与企业系统进行对接的方法,其特征在于,包括如下步骤: A)客户端通过http协议json的数据格式向jsse发送请求并对所述请求进行处理;所述jsse包括适配器组件和能力组件,所述适配器组件和能力组件具有API接口; B)调用所述适配器组件或能力组件的API接口与所述企业系统对接,来实现对企业系统接口数据格式的转换。
2.根据权利要求1所述的基于js的与企业系统进行对接的方法,其特征在于,所述jsse还包括主核心框架和js引擎。
3.根据权利要求2所述的基于js的与企业系统进行对接的方法,其特征在于,所述步骤A)进一步包括: Al)客户端按照符合http协议的json的数据格式向所述主核心框架发送请求; A2)所述主核心框架对所述请求进行解析,并获取所述请求中携带的数据; A3)所述主核心框架将所述js引擎加载到所述jsse中; A4)所述主核心框架依据所述请求中携带的数据将指定的js逻辑文件内容加载到所述jsse中; A5)所述主核心框架通过所述js引擎解析并执行所述js逻辑文件的内容; A6)判断执行的js逻辑文件的内容中是否存在加载适配器组件或能力组件的脚本代码,如是,执行步骤A7);否则,不执行任何操作; A7)所述主核心框架将指定的适配器组件或能力组件加载到所述jsse中。
4.根据权利要求3所述的基于js的与企业系统进行对接的方法,其特征在于,所述步骤B)进一步包括: BI)调用指定的适配器组件或能力组件的API接口与所述企业系统进行对接; B2)将调用结果返回给所述主核心框架; B3)所述主核心框架按照符合http协议的json的数据格式将所述调用结果返回给所述客户端。
5.根据权利要求2至4任意一项所述的基于js的与企业系统进行对接的方法,其特征在于,在执行完所述js逻辑文件的内容、响应完所述请求后或在所述jsse接收客户端请求并未确认客户端的合法性及客户端数据的完整性之前,所述js引擎进入或处于休眠状态。
6.一种实现如权利要求1所述的基于js的与企业系统进行对接的方法的装置,其特征在于,包括: 请求发送单元:用于使客户端通过http协议json的数据格式向jsse发送请求并对所述请求进行处理;所述jsse包括适配器组件和能力组件,所述适配器组件和能力组件具有API 接口 ; 接口调用转换单元:用于调用所述适配器组件或能力组件的API接口与所述企业系统对接,来实现对企业系统接口数据格式的转换。
7.根据权利要求6所述的实现上述基于js的与企业系统进行对接的方法的装置,其特征在于,所述jsse还包括主核心框架和js引擎。
8.根据权利要求7所述的实现上述基于js的与企业系统进行对接的方法的装置,其特征在于,所述请求发送单元进一步包括: 格式请求发送模块:用于使客户端按照符合http协议的json的数据格式向所述主核心框架发送请求; 解析模块:用于使所述主核心框架对所述请求进行解析,并获取所述请求中携带的数据; 引擎加载模块:用于使所述主核心框架将所述js引擎加载到所述jsse中; 逻辑文件加载模块:用于使所述主核心框架依据所述请求中携带的数据将指定的js逻辑文件内容加载到所述jsse中; 解析执行模块:用于使所述主核心框架通过所述js引擎解析并执行所述js逻辑文件的内容; 加载判断模块:用于判断执行的js逻辑文件的内容中是否存在加载适配器组件或能力组件的脚本代码; 指定加载模块:用于使所述主核心框架将指定的适配器组件或能力组件加载到所述jsse 中ο
9.根据权利要求8所述的实现上述基于js的与企业系统进行对接的方法的装置,其特征在于,所述接口调用转换单元进一步包括: 调用对接模块:用于调用指定的适配器组件或能力组件的API接口与所述企业系统进行对接; 调用结果返回模块:用于将调用结果返回给所述主核心框架; 调用结果格式返回模块:用于使所述主核心框架按照符合http协议的json的数据格式将所述调用结果返回给所述客户端。
10.根据权利要求7至9任意一项所述的实现上述基于js的与企业系统进行对接的方法的装置,其特征在于,在执行完所述js逻辑文件的内容、响应完所述请求后或在所述jsse接收客户端请求并未确认客户端的合法性及客户端数据的完整性之前,所述js引擎进入或处于休眠状态。
【文档编号】H04L29/06GK103716310SQ201310705811
【公开日】2014年4月9日 申请日期:2013年12月19日 优先权日:2013年12月19日
【发明者】邹保琪, 廖炳才, 王付国, 刘志强, 何志明 申请人:深圳市迈桥科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1