数据访问系统和数据访问方法

文档序号:6382088阅读:254来源:国知局

专利名称::数据访问系统和数据访问方法
技术领域
:本发明涉及计算机
技术领域
,具体而言,涉及一种数据访问系统和一种数据访问方法。
背景技术
:在应用系统中,特别是MIS(ManagementInformationSystems,管理信息系统)系统中,其主要的工作任务是对数据的处理加工,例如新增、修改、删除、查询等操作,这就涉及到数据在用户界面的装载显示问题。传统的处理模式是所有功能都在单元软件组件中,即界面功能和业务功能混合在组件中,没有做层次分隔。在使用模型-视图-控制(MVC)模式设计的系统,在模型和视图之间的数据映射关系通常是完全一一对应的,即每一个视图都会有一个数据模型对应。由于一个业务对象会存在多种展现视图,因此必须要根据视图的不同来设计与其对应的数据模型。因此,用户界面组件的开发人员在设计界面时,往往被其使用的后台业务对象或数据模型对象所限定,不能由用户界面的需要来自由定义和组合其包含的数据来源。
发明内容本发明正是基于上述问题,提出了一种数据访问技术,能够在不影响用户界面设计和业务对象设计的前提下,通过数据映射描述和中间数据映射服务组件的方式,在用户界面UI(UserInterface)组件和业务对象BO(BusinessObject)组件间进行数据访问的功能。有鉴于此,根据本发明的一个方面,提供了一种数据访问系统,包括用户界面组件单元,在运行窗口程序时,向数据映射组件单元发送访问请求,以及接收属性访问组件单元反馈的业务数据;所述数据映射组件单元,根据所述访问请求检索出所述窗口程序的数据映射表,其中,所述数据映射表包含用户界面数据到业务数据的映射关系;所述属性访问组件单元,根据所述数据映射表中的映射关系获取运行所述窗口程序时需要显示的业务数据并将所述业务数据反馈至所述用户界面组件单元。在系统正常运行过程中,通过数据映射组件单元解析映射表,使数据访问系统具有动态维护映射表的功能;在用户界面数据变化时,把指定的映射项中的目标属性路径传递给属性访问组件单元,由属性访问组件单元来访问目标业务对象的目标数据。在上述技术方案中,优选的,所述用户界面组件单元还用于在加载数据时,向所述数据映射组件单元发送获取目标数据集合的请求;所述数据映射组件单元还用于在接收到所述获取目标数据集合的请求时,基于所述数据映射表获取所有目标数据对应的映射路径;所述属性访问组件单元还用于基于所述映射路径访问所述业务数据以及所述业务数据的属性值。该技术方案完成了通过对数据映射表的配置来组织用户界面数据映射到业务对象上的一个具体属性的过程,通过该映射路径能够准确获取相应的业务数据,并且取消了用户界面数据与业务对象数据的一一对应的映射关系,能够满足用户界面与业务对象数据的多对多关系。在上述技术方案中,优选的,所述数据映射组件单元包括处理子单元,用于根据运行所述窗口程序时的实时环境信息,对所述映射路径进行处理,以匹配所述窗口程序。使得界面数据更符合实际应用环境,提升用户体验。在上述任一技术方案中,优选的,所述用户界面组件单元在发送所述访问请求的同时,还将所述窗口程序在应用系统中的唯一标识传递至所述数据映射组件单元;所述数据映射组件单元根据所述唯一标识检索所述数据映射表。由于本发明的用户界面数据与业务对象数据的对应关系是多对多的映射关系,因此,需要根据窗口程序的唯一标识来获取相应的映射表,提高查询速度。在上述技术方案中,优选的,所述数据映射组件单元还用于在缓存中检索所述数据映射表,若未检索到所述数据映射表,则在所述数据访问系统中的存储单元中检索所述数据映射表。在缓存没有数据映射表时,才从存储介质中检索所需的数据映射表,因此可减少数据传输量,减轻数据库的负担。根据本发明的另一方面,还提供了一种数据访问方法,包括步骤202,在运行窗口程序时,用户界面组件单元向数据映射组件单元发送访问请求,所述数据映射组件单元根据所述访问请求检索出所述窗口程序的数据映射表,其中,所述数据映射表包含用户界面数据到业务数据的映射关系;步骤204,根据所述数据映射表中的映射关系获取运行所述窗口程序时需要显示的业务数据。在系统正常运行过程中,通过数据映射组件单元解析映射表,使数据访问系统具有动态维护映射表的功能;在用户界面数据变化时,把指定的映射项中的目标属性路径传递给属性访问组件单元,由属性访问组件单元来访问目标业务对象的目标数据。在上述技术方案中,优选的,所述步骤204具体包括在加载数据时,所述用户界面组件单元向所述数据映射组件单元发送获取目标数据集合的请求;所述数据映射组件单元基于所述数据映射表获取所有目标数据对应的映射路径;属性访问组件单元基于所述映射路径访问所述业务数据以及所述业务数据的属性值。该技术方案完成了通过对数据映射表的配置来组织用户界面数据映射到业务对象上的一个具体属性的过程,通过该映射路径能够准确获取相应的业务数据,并且取消了用户界面数据与业务对象数据的一一对应的映射关系,能够满足用户界面与业务对象数据的多对多关系。在上述技术方案中,优选的,根据运行所述窗口程序时的实时环境信息,对所述映射路径进行处理,以匹配所述窗口程序。在上述任一技术方案中,优选的,所述步骤202还包括,在发送所述访问请求的同时,将所述窗口程序在应用系统中的唯一标识传递至所述数据映射组件单元,根据所述唯一标识检索所述数据映射表。由于本发明的用户界面数据与业务对象数据的对应关系是多对多的映射关系,因此,需要根据窗口程序的唯一标识来获取相应的映射表,提高查询速度。在上述技术方案中,优选的,所述数据映射表的检索过程包括在缓存中检索所述数据映射表,若未检索到所述数据映射表,则在存储单元中检索所述数据映射表。在缓存没有数据映射表时,才从存储介质中检索所需的数据映射表,因此可减少数据传输量,减轻数据库的负担。根据本发明的技术方案通过应用软件系统的持久化存储介质(如XML格式的文件或内嵌资源)来配置用户界面数据到业务对象数据的映射关系;在系统正常运行过程中,通过数据映射服务组件解析映射表,并具有动态维护映射表的功能;在用户界面数据变化时,把指定的映射项中的目标属性路径传递给属性访问组件,由属性访问组件来访问目标业务对象的目标数据;提供了一个自动生成映射表的实现方法,来简化映射配置文件的生成。图1示出了根据本发明的实施例的数据访问系统的框图;图2示出了根据本发明的实施例的数据访问方法的流程图;图3示出了根据本发明的实施例的交互用例分析图;图4示出了根据本发明的实施例的数据访问系统的静态视图;图5示出了根据本发明的实施例的数据映射文件存储结构示意图;图6A示出了根据本发明的实施例的数据映射文件范例截图;图6B示出了根据本发明的实施例的数据映射文件范例截图。具体实施例方式为了能够更清楚地理解本发明的上述目的、特征和优点,下面结合附图和具体实施方式对本发明进行进一步的详细描述。在下面的描述中阐述了很多具体细节以便于充分理解本发明,但是,本发明还可以采用其他不同于在此描述的其他方式来实施,因此,本发明并不限于下面公开的具体实施例的限制。在说明本发明的技术方案之前,首先解释以下几个关键词1、用户界面计算机应用软件系统中,与用户进行交互的软件组件,通常为图形用户界面,以多窗口方式展现/收集不同的数据信息。2、业务对象是对数据进行封装和处理的软件组件,是现实世界的简单抽象;业务对象通常位于软件系统的中间层或者业务逻辑层。3、XML:eXtensibleMarkupLanguage,扩展标记语言。是一种简单的数据存储语言,使用一系列简单的标记描述数据,而这些标记可以用方便的方式建立。4、数据映射在两个不同的数据组织结构之间,进行目标数据与来源数据的对应关系,例如一维数据到多维数据的对应,表格数据到树形数据的对应。5、数据映射表维护的一组数据映射关系的一种组织形式,可以对其进行装载、检索、增加、更新和删除等操作,通过数据映射表来完整的表现两个软件组件之间的数据对应关系。6、数据映射服务提供数据映射关系的管理工作,在其他组件需要获取数据映射关系时,通过发布的公共服务方法来提供数据映射关系相关功能。7、属性访问组件一个独立的软件组件,能够对外部提供的数据映射进行解析,来访问(或获取或设置)目标对象及其目标属性。图1示出了根据本发明的实施例的数据访问系统的框图。如图1所示,根据本发明的实施例的数据访问系统100包括用户界面组件单元102,在运行窗口程序时,向数据映射组件单元104发送访问请求,以及接收属性访问组件单元反馈的业务数据;所述数据映射组件单元104,根据所述访问请求检索出所述窗口程序的数据映射表,其中,所述数据映射表包含用户界面数据到业务数据的映射关系;所述属性访问组件单元106,根据所述数据映射表中的映射关系获取运行所述窗口程序时需要显示的业务数据并将所述业务数据反馈至所述用户界面组件单元102。在系统正常运行过程中,通过数据映射组件单元104解析映射表,使数据访问系统具有动态维护映射表的功能;在用户界面数据变化时,把指定的映射项中的目标属性路径传递给属性访问组件单元106,由属性访问组件单元106来访问目标业务对象的目标数据。在上述技术方案中,优选的,所述用户界面组件单元102还用于在加载数据时,向所述数据映射组件单元发送获取目标数据集合的请求;所述数据映射组件单元104还用于在接收到所述获取目标数据集合的请求时,基于所述数据映射表获取所有目标数据对应的映射路径;所述属性访问组件单元106还用于基于所述映射路径访问所述业务数据以及所述业务数据的属性值。该技术方案完成了通过对数据映射表的配置来组织用户界面数据映射到业务对象上的一个具体属性的过程,通过该映射路径能够准确获取相应的业务数据,并且取消了用户界面数据与业务对象数据的一一对应的映射关系,能够满足用户界面与业务对象数据的多对多关系。在上述技术方案中,优选的,所述数据映射组件单元104包括处理子单元1042,用于根据运行所述窗口程序时的实时环境信息,对所述映射路径进行处理,以匹配所述窗口程序。使得界面数据更符合实际应用环境,提升用户体验。在上述任一技术方案中,优选的,所述用户界面组件单元102在发送所述访问请求的同时,还将所述窗口程序在应用系统中的唯一标识传递至所述数据映射组件单元;所述数据映射组件单元104根据所述唯一标识检索所述数据映射表。由于本发明的用户界面数据与业务对象数据的对应关系是多对多的映射关系,因此,需要根据窗口程序的唯一标识来获取相应的映射表,提高查询速度。在上述技术方案中,优选的,所述数据映射组件单元104还用于在缓存中检索所述数据映射表,若未检索到所述数据映射表,则在所述数据访问系统中的存储单元中检索所述数据映射表。在缓存没有数据映射表时,才从存储介质中检索所需的数据映射表,因此可减少数据传输量,减轻数据库的负担。根据本发明的技术方案通过应用软件系统的持久化存储介质(如XML格式的文件或内嵌资源)来配置用户界面数据到业务对象数据的映射关系;在系统正常运行过程中,通过数据映射服务组件解析映射表,并具有动态维护映射表的功能;在用户界面数据变化时,把指定的映射项中的目标属性路径传递给属性访问组件,由属性访问组件来访问目标业务对象的目标数据;提供了一个自动生成映射表的实现方法,来简化映射配置文件的生成。图2示出了根据本发明的实施例的数据访问方法的流程图。如图2所示,根据本发明的实施例的数据访问方法,包括步骤202,在运行窗口程序时,用户界面组件单元向数据映射组件单元发送访问请求,数据映射组件单元根据访问请求检索出窗口程序的数据映射表,其中,数据映射表包含用户界面数据到业务数据的映射关系;步骤204,根据数据映射表中的映射关系获取运行窗口程序时需要显示的业务数据。在系统正常运行过程中,通过数据映射组件单元解析映射表,使数据访问系统具有动态维护映射表的功能;在用户界面数据变化时,把指定的映射项中的目标属性路径传递给属性访问组件单元,由属性访问组件单元来访问目标业务对象的目标数据。在上述技术方案中,优选的,步骤204具体可以包括在加载数据时,用户界面组件单元向数据映射组件单元发送获取目标数据集合的请求;所述数据映射组件单元基于所述数据映射表获取所有目标数据对应的映射路径;属性访问组件单元基于所述映射路径访问所述业务数据以及所述业务数据的属性值。通过该映射路径能够准确获取相应的业务数据,并且取消了用户界面数据与业务对象数据的一一对应的映射关系,能够满足用户界面与业务对象数据的多对多关系。在上述技术方案中,优选的,根据运行所述窗口程序时的实时环境信息,对所述映射路径进行处理,以匹配所述窗口程序。在上述任一技术方案中,优选的,所述步骤202还可以包括,在发送所述访问请求的同时,将所述窗口程序在应用系统中的唯一标识传递至所述数据映射组件单元,根据所述唯一标识检索所述数据映射表。由于本发明的用户界面数据与业务对象数据的对应关系是多对多的映射关系,因此,需要根据窗口程序的唯一标识来获取相应的映射表,提高查询速度。在上述技术方案中,优选的,所述数据映射表的检索过程包括在缓存中检索所述数据映射表,若未检索到所述数据映射表,则在存储单元中检索所述数据映射表。在缓存没有数据映射表时,才从存储介质中检索所需的数据映射表,因此可减少数据传输量,减轻数据库的负担。下面结合图3至图5详细说明根据本发明的数据访问方法。数据访问方法主要包括以下几个过程1、应用软件系统在运行过程中,当运行一个窗口程序时,系统会向数据映射服务组件请求当前窗口程序的数据映射表,在请求服务时,传递当前窗口在应用系统中的唯一标识(例如窗口代号);数据映射服务组件先在缓存中检索其对应的数据映射表,若没有从缓存中检索到数据映射表,则从存储介质中检索映射表并加载到系统缓存中。2、在加载数据时,用户界面组件会请求获取数据集合,系统会向数据映射服务组件请求数据集合中所有数据项对应的映射路径,并根据系统运行时的实时环境信息,对路径进行处理,以匹配当前所运行的程序。3、在获取到有效目标数据访问路径后,系统调用属性访问组件来获取当前运行状态下的目标数据。属性访问组件会解析目标数据路径,逐层地去获取对象,并最终访问最底层对象的目标属性。如图3所示,用户在执行“运行窗口程序”用例时,“运行窗口程序”用例会调用“力口载数据映射表”子用例,通过子用例把与当前窗口程序对应的映射描述信息(外部XML文件)加载到系统缓存中;“运行窗口程序”用例继续调用“维护数据”用例来获取窗口程序所要显示的业务数据;用户调用“维护数据”用例来进行业务对象数据的维护动作,在获取或修改业务对象数据的过程中,会调用“访问业务对象”子用例来获取目标数据,子用例会访问数据映射服务组件和属性访问组件来完成用例。图4示出了根据本发明的实施例的数据访问系统的静态视图。如图4所示,1.1PropertyObjectMappingGetter是数据映射表管理服务的接口定义,UIPPropertyObjectMappingGetter类是对此接口的具体实现。通过AppendMap()方法可以在系统缓存中增加一个数据映射表;通过this[indeX]索引就可以从获取一个指定的数据映射表,具体是从缓存中直接返回,还是从存储介质中加载并返回,由对象实例根据配置方式及失效刷新策略决定。2.UIPPropertyMapResourceReader类实现了对应用系统中XML类型嵌入资源的访问,通过这个对象从数据映射表的XML存储介质中读取描述信息,并提供给UIPPropertyObjectMappingGetter管理服务对象。3.在UIPPropertyObjectMappingGetter实现类中,定义了嵌套类MapDefineXml,及其嵌套子类ImportXml和PropertyXml,通过这三个类型的定义,完整描述了XML方式配置的数据映射表的数据结构。4.PropertyMapDefine类、PropertyObjectDefine类、PropertyObjectMapping类是数据映射表在缓存中的存储数据结构。每一个用户界面窗口都会有一个对象存在于系统缓存中并与之对应,所以针对用户界面窗口上数据控件的数据访问,都会通过此对象来转换成对业务对象的实际访问路径。PropertyMapDefine类是系统缓存中的缓存键,PropertyObjectMapping为系统缓存中的缓存值,ProjectObjectDefine类是数据映射表中每一个数据项映射的详细定义。5.1ObjectPropertyHelper是对目标对象属性访问组件的接口定义,ObjectPropertyHelper是其一个实现类。通过其中的GetPropery()和SetProperty()方法,能够解析数据映射项中的对象访问路径,来获取或设置具体的目标属性值。图5示出了根据本发明的实施例的数据映射文件结构示意图。如图5所示,1.〈PropertyMaps〉是XML配置文件的根节点,即一个XML文件中只存在一个〈PropertyMaps〉节点。2.在〈PropertyMaps〉节点下可以有多个〈Map〉节点,一个〈Map〉节点是对一个数据映射表的完整描述。a)ID属性为必须设置,是在整个应用系统中唯一的标识;b)Desc属性为可选设置,是对此数据映射表的描述。3.在〈Map〉节点下可以包含两种类型的子节点〈Import>子节点和〈Property〉子节点,其包含的数目是任意的。4.〈Import〉节点表示了对其他标准数据映射表的引用。例如在ERP(EnterpriseResourcePlanning,企业资源计划系统)系统中,存货业务对象在大部分程序中都会被使用到,只需要独立维护好存货的关系映射表,然后在具体的业务程序中导入其映射表即可复用标准,如物料清单的母件和子件业务对象中都会用到存货业务对象。a)ID属性为必须设置,用于指定所具体应用的标准数据映射表的ID;b)PropertyProfix属性为可选设置,用于指定在当前映射中所附加的属性标识的前缀;c)PathPrefix属性为可选设置,用于指定在当前映射所使用的业务对象中,对引入的标准映射表是指向业务对象本身的属性,还是业务对象的某个对象类型的属性,例如如果物料清单子件中有个存货属性(Inventory)来指示当前所使用的存货信息,则PathPrefix设置为"Inventory"。5.〈Property〉节点表示了当前映射表中所要描述的数据映射。在用户界面程序的窗口上,每一个数据维护控件都应该有一个数据映射项与其对应,用于访问业务对象中的对应的数据。a)SortSeq属性为必须设置,其设置为一个流水数值,用于标识其属性的先后顺序;b)Name属性为必须设置,类型为字符串,用于标识数据映射项是描述的窗口程序中的哪个数据控件;c)Path属性为必须设置,类型为字符串,用于标识界面数据控件所显示的数据的来源路径,支持树形访问路径,即"父对象.子对象....子对象.属性"方式访问;d)Setable属性为可选设置,类型为布尔型(true/false),用于标识目标数据项是否具有可写性,即能够修改其数据值,不设置表示没有可写性;e)Getable属性为可选设置,类型为布尔型(true/false),用于标识目标属性项是否具有可读性,即能够获取其中数据值,不是指表示其具有可读性;f)IsArray属性为可选属性,类型为布尔型(true/false),用于标识目标属性项是否具有集合特性,即是一组具有相同标识的数据项,通过索引标识来确定特定的元素项。如图6A和图6B所示,分别示出了XML存储文件的一段范例截图。此段范例是应用在ERP系统中的两个数据映射表的XML存储文件。在图6A中,当ID为Inventory的〈Map〉节点时,描述了存货的标准数据映射。其中含有普通数据映射和集合型数据映射,因这是一个标准的参照型的数据映射表(主要提供给其他业务对象进行关联基础业务对象用),所有的数据项只有可读特性,没有可写特性。在图6B中,当ID为Bom_Component_PropertyMap的〈Map〉节点时,描述了物料清单的数据映射。其中〈Import〉子节点是引入两个标准的基础资料的标识数据映射表,ID描述的是唯一检索标识。因此,通过本发明的技术方案,在ERP系统的开发过程中,用户界面开发人员和业务对象开发人员单元是相对独立的,在开发前期,用户界面人员使用数据映射表来映射到简单的数据结构上测试调试,而不用使用基于数据库动态数据的业务对象作为界面的数据来源,减少了两组人员的前期联合测试的需要,不需要相互依赖、相互等待;通过映射表,在编写业务对象的代码过程中,使用灵活的指向动作,把业务对象进行小颗粒的封装,缩短了每一个业务对象的实现时间花费,并提供了较好的封装性和灵活性,通过组合装配多个业务对象的方式来满足用户界面的需求,提高了代码的复用程度;在用户界面数据来源变化时,不需要修改代码来调整获取属性的路径,只需要修改数据映射表就能够指向业务对象中的目标属性,提高了开发效率。以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。权利要求1.一种数据访问系统,其特征在于,包括用户界面组件单元,在运行窗口程序时,向数据映射组件单元发送访问请求,以及接收属性访问组件单元反馈的业务数据;所述数据映射组件单元,根据所述访问请求检索出所述窗口程序的数据映射表,其中,所述数据映射表包含用户界面数据到业务数据的映射关系;所述属性访问组件单元,根据所述数据映射表中的映射关系获取运行所述窗口程序时需要显示的业务数据并将所述业务数据反馈至所述用户界面组件单元。2.根据权利要求1所述的数据访问系统,其特征在于,所述用户界面组件单元还用于在加载数据时,向所述数据映射组件单元发送获取目标数据集合的请求;所述数据映射组件单元还用于在接收到所述获取目标数据集合的请求时,基于所述数据映射表获取所有目标数据对应的映射路径;所述属性访问组件单元还用于基于所述映射路径访问所述业务数据以及所述业务数据的属性值。3.根据权利要求2所述的数据访问系统,其特征在于,所述数据映射组件单元包括处理子单元,用于根据运行所述窗口程序时的实时环境信息,对所述映射路径进行处理,以匹配所述窗口程序。4.根据权利要求1至3中任一项所述的数据访问系统,其特征在于,所述用户界面组件单元在发送所述访问请求的同时,还将所述窗口程序在应用系统中的唯一标识传递至所述数据映射组件单元;所述数据映射组件单元根据所述唯一标识检索所述数据映射表。5.根据权利要求4所述的数据访问系统,其特征在于,所述数据映射组件单元还用于在缓存中检索所述数据映射表,若未检索到所述数据映射表,则在所述数据访问系统中的存储单元中检索所述数据映射表。6.一种数据访问方法,其特征在于,包括步骤202,在运行窗口程序时,用户界面组件单元向数据映射组件单元发送访问请求,所述数据映射组件单元根据所述访问请求检索出所述窗口程序的数据映射表,其中,所述数据映射表包含用户界面数据到业务数据的映射关系;步骤204,根据所述数据映射表中的映射关系获取运行所述窗口程序时需要显示的业务数据。7.根据权利要求6所述的数据访问方法,其特征在于,所述步骤204具体包括在加载数据时,所述用户界面组件单元向所述数据映射组件单元发送获取目标数据集合的请求;所述数据映射组件单元基于所述数据映射表获取所有目标数据对应的映射路径;属性访问组件单元基于所述映射路径访问所述业务数据以及所述业务数据的属性值。8.根据权利要求7所述的数据访问方法,其特征在于,根据运行所述窗口程序时的实时环境信息,对所述映射路径进行处理,以匹配所述窗口程序。9.根据权利要求6至8中任一项所述的数据访问方法,其特征在于,所述步骤202还包括,在发送所述访问请求的同时,将所述窗口程序在应用系统中的唯一标识传递至所述数据映射组件单元,根据所述唯一标识检索所述数据映射表。10.根据权利要求9所述的数据访问方法,其特征在于,所述数据映射表的检索过程包括在缓存中检索所述数据映射表,若未检索到所述数据映射表,则在存储单元中检索所述数据映射表。全文摘要本发明提供了一种数据访问系统,包括用户界面组件单元,在运行窗口程序时,向数据映射组件单元发送访问请求,以及接收属性访问组件单元反馈的业务数据;数据映射组件单元,根据访问请求检索出窗口程序的数据映射表,其中,数据映射表包含用户界面数据到业务数据的映射关系;属性访问组件单元,根据数据映射表中的映射关系获取运行窗口程序时需要显示的业务数据并将业务数据反馈至用户界面组件单元。本发明还提供了一种数据访问方法。根据本发明的技术方案,可在不影响用户界面设计和业务对象设计的前提下,通过数据映射描述和中间数据映射服务组件的方式,在用户界面组件和业务对象组件间进行数据访问的功能。文档编号G06F17/30GK102999610SQ20121048025公开日2013年3月27日申请日期2012年11月22日优先权日2012年11月22日发明者张映祥申请人:用友软件股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1