一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种微前端集成方法、装置及监控方法与流程

2022-07-23 04:29:19 来源:中国专利 TAG:


1.本文涉及金融领域,尤其是一种微前端集成方法、装置及监控方法。


背景技术:

2.随着银行等大型企业业务需求的不断发展,应用系统集成的功能越来越复杂、子应用的数量越来越多、应用间的调用关系越来越复杂。
3.以普惠项目某应用为例,该应用项目涉及几十个子应用,且大量的子应用(例如贷款模块、测额模块)需要被集成到多个应用系统中、多个渠道终端中,其组合方式日趋复杂。
4.现有技术的大部分应用系统采用微前端的设计方式,子应用实现独立的业务功能,主应用按照需求集成子应用,建立路由与子应用的确定映射关系。但这种映射关系都是维护在主应用的程序代码中,并且每次生成主应用版本都需要经过一个批次的投产才可生效,维护成本极高。此外,编排子应用是是重复劳动,编排的规则往往在投产前才可确定,人为进行编排工作容易出错。此外,随着业务系统越来越复杂,主应用与子应用调用关系复杂,排查问题极其困难。
5.针对现有技术中无法直接获知子应用与应用系统的关系、排查调用关系复杂的问题,需要一种微前端集成方法、装置及监控方法。


技术实现要素:

6.为解决上述现有技术的问题,本文实施例提供了一种微前端集成方法、装置、监控方法、计算机设备、存储介质及计算机程序产品。
7.本文实施例提供了一种微前端集成方法,所述方法应用于微前端应用系统,包括:根据业务需求确定主应用功能;从预先设置的子应用集合中确定实现所述主应用功能的子应用;根据所述主应用功能及确定的子应用,生成主应用的配置文件;根据所述配置文件生成所述主应用与所述子应用的拓扑结构并显示。
8.根据本文实施例的一个方面,根据所述主应用功能及确定的子应用,生成主应用的配置文件包括:根据主应用名称、与所述子应用相关的字段、所述主应用与所述子应用的路由关系,生成所述配置文件,其中所述与子应用相关的字段包括子应用名称、子应用的应用标识、所述子应用入口文件。
9.根据本文实施例的一个方面,所述方法进一步包括:根据业务需求确定主应用待投放的应用场景;根据所述主应用待投放的应用场景,确定主应用的应用模板;根据所述主应用的应用模板及所述配置文件,生成所述主应用。
10.根据本文实施例的一个方面,所述方法进一步包括:当所述业务需求发生变更,通过更改所述主应用的配置文件以更新所述主应用。
11.根据本文实施例的一个方面,更新所述主应用包括:当所述业务需求为新增主应用功能,则在所述主应用的配置文件中增加实现待新增的主应用功能的子应用相关的字段;当所述业务需求为删除所述主应用功能之一,则在所述主应用的配置文件中清除实现
待删除的主应用功能的子应用相关的字段。
12.根据本文实施例的一个方面,所述确定主应用的应用模板包括:根据所述主应用的运行渠道及容器、布局、语言、第三方插件中的任意一种,选择主应用的应用模板。
13.本文实施例还提供了一种微前端监控方法,利用上文所述的主应用与子应用的拓扑结构执行如下步骤,包括:根据所述子应用的告警信息,从所述拓扑结构中确定与所述子应用具有路由关系的主应用,控制所述主应用中该子应用暂停使用。
14.根据本文实施例的一个方面,所述方法进一步包括:当多个主应用同时发生告警信息,优先根据拓扑结构确定所述多个主应用对应的同一子应用是否发生故障。
15.本文实施例还提供了一种微前端集成装置,所述装置包括:主应用功能确定单元,用于根据业务需求确定主应用功能;子应用确定单元,用于从预先设置的子应用集合中确定实现所述主应用功能的子应用;配置文件生成单元,用于根据所述主应用功能及确定的子应用,生成主应用的配置文件;拓扑结构生成单元,用于根据所述配置文件生成所述主应用与所述子应用的拓扑结构并显示。
16.本文实施例还提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现所述微前端集成方法。
17.本文实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现所述微前端集成方法。
18.本文实施例还提供了一种计算机程序产品,所述计算机程序产品包括计算机程序,所述计算机程序被处理器执行时实现所述微前端集成方法。
19.本方案通过可视化配置化界面,快速稳定集成上线应用,减少主应用开发和投产时间;且能够实现热更新无需投产,同时减少人为错误,方便定位错误。
附图说明
20.为了更清楚地说明本文实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本文的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
21.图1所示为本文实施例一种微前端集成方法的流程图;
22.图2所示为本文实施例一种生成主应用的方法流程图;
23.图3所示为本文实施例一种更新主应用的方法流程图;
24.图4所示为本文实施例一种微前端集成装置的结构示意图;
25.图5所示为本文实施例微前端集成装置的具体结构示意图;
26.图6所示为本文实施例一种主应用与子应用的拓扑结构的示意图;
27.图7所示为本文实施例一种子应用集合的示意图;
28.图8所示为本文实施例一种计算机设备的结构示意图。
29.附图符号说明:
30.401、主应用功能确定单元;
31.4011、业务需求获取单元;
32.402、子应用确定单元;
33.4021、子应用集合预设模块;
34.403、配置文件生成单元;
35.4031、配置文件变更新模块;
36.404、拓扑结构生成单元;
37.4041、显示单元;
38.701、子应用集合;
39.802、计算机设备;
40.804、处理器;
41.806、存储器;
42.808、驱动机构;
43.810、输入/输出模块;
44.812、输入设备;
45.814、输出设备;
46.816、呈现设备;
47.818、图形用户接口;
48.820、网络接口;
49.822、通信链路;
50.824、通信总线。
具体实施方式
51.为了使本技术领域的人员更好地理解本说明书中的技术方案,下面将结合本文实施例中的附图,对本文实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本文一部分实施例,而不是全部的实施例。基于本文中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本文保护的范围。
52.需要说明的是,本文的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本文的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、装置、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
53.本说明书提供了如实施例或流程图所述的方法操作步骤,但基于常规或者无创造性的劳动可以包括更多或者更少的操作步骤。实施例中列举的步骤顺序仅仅为众多步骤执行顺序中的一种方式,不代表唯一的执行顺序。在实际中的系统或装置产品执行时,可以按照实施例或者附图所示的方法顺序执行或者并行执行。
54.需要说明的是,本文的微前端集成方法可用于金融领域,也可用于分布式架构领域,本文对微前端集成方法及装置的应用领域不做限定。
55.微前端是一种利用组件拆分以达到工程拆分治理的方法。通过代码复用,可以解
决工程膨胀、开发维护困难等问题。
56.如图1所示为本文实施例一种微前端集成方法的流程图,其中具体包括如下步骤:
57.步骤101,根据业务需求确定主应用功能。本步骤中的业务需求包括但不限于:开发业务需求、用户业务需求等。其中,业务开发可以是面向所有用户的,例如,开发业务需求包括:“开发一个具有客户贷款测额并提供贷款的金融网页服务”,并提供给所有用户使用。相对应的,用户业务需求可以是面向不同客户的,例如,对于企业类客户,用户业务需求可能主要为对私转账等;对于个人用户,用户业务需求可能主要为个人业务等。进一步的,对个人用户,根据不同个人用户的用户习惯,可能存在不同的用户业务需求。
58.在本说明书的一些实施例中,主应用负责应用注册、路由解析等与子应用集成等方面相关的职责。根据业务需求,确定主应用的功能。例如,业务需求为开发一个具有金融服务及贷款营销的网页,则可以确定主应用功能需要包含金融服务及贷款营销。
59.步骤102,从预先设置的子应用集合中确定实现所述主应用功能的子应用。在本步骤中,子应用是根据功能或场景划分的独立的vue单页面应用,每一个子应用可以实现具体的业务功能,具有独立的id。各个子应用之间开发、部署独立,功能独立。如图7所示,内容管理、用户管理、贷款营销、金融服务、企业社交为5个子应用,且功能独立,分别部署在不同的服务器上。本步骤中,多个具有不同业务功能的子应用组成子应用集合,该子应用集合也可以是子应用资源池。图7中的内容管理、用户管理、贷款营销、金融服务、企业社交为5个子应用行程子应用集合。该子应用集合/子应用资源池可以是预先设置好的。例如,子应用集合包括用户管理子应用、内容管理子应用、贷款营销子应用、金融服务子应用及企业社交子应用等。
60.根据步骤101中确定的主应用功能,从子应用集合/子应用资源池中查询能够实现主应用功能的子应用。例如,主应用功能为:金融服务及贷款营销,则可以从子应用集合/子应用资源池中找到金融服务子应用、贷款营销子应用。
61.在本步骤中,一个主应用可以具有与其功能对应的多个子应用。同时,一个子应用可以实现多个主应用的同一功能。因此,多个主应用可以共用同一个子应用,以实现相同的部分功能。
62.步骤103,根据所述主应用功能及确定的子应用,生成主应用的配置文件。在本说明书的一些实施例中,主应用的配置文件包括主应用相关的字段、能够实现主应用功能的子应用相关的字段以及主应用与对应的子应用之间的路由关系。具体的,根据主应用名称、与所述子应用相关的字段、所述主应用与所述子应用的路由关系,生成所述配置文件,其中所述与子应用相关的字段包括子应用名称、子应用的应用标识、所述子应用入口文件。
63.如下为某一个主应用的配置文件的示例:
[0064][0065]
其中,projectname表示主应用名称为

main1’,moduleslist表示实现该主应用功能的子应用清单,该子应用清单中包括实现该主应用功能的子应用的名称、id、该子应用与主应用的路由关系path以及各子应用的入口文件

entry’。
[0066]
在本步骤中,主应用的配置文件可以表示主应用与子应用的映射关系。配置文件通过脚本自动生成。进一步的,根据业务需求的变更,可以变更配置文件以修改主应用。
[0067]
步骤104,根据所述配置文件生成所述主应用与所述子应用的拓扑结构并显示。在本说明书的一些实施例中,根据配置文件中的主应用名称、子应用名称及主应用与子应用的路由关系,可以生成主应用与子应用的拓扑结果。本步骤还包括将该拓扑结果发送至显示界面进行可视化显示。其中,拓扑结构可以根据业务需求的变更而改变。
[0068]
本步骤还包括将多个配置文件生成的多个主应用与子应用之间的拓扑结果发送至显示界面进行显示。
[0069]
图2所示为本文实施例一种生成主应用的方法流程图。具体包括如下步骤:
[0070]
步骤201,根据业务需求确定主应用待投放的应用场景。如图1中的步骤所述,业务需求除了包括规定待生成的主应用的功能之外,还规定了主应用的应用场景。例如,普惠项目规定一银行业务具有对客及对企业两种场景,因此,需要将主应用应用在不同应用渠道。应用场景可以理解为应用渠道,表示主应用生成之后,在具体哪个渠道中运行。在本说明书的一些实施例中,主应用的应用场景包括:网页端、pc端、手机app端、小程序端等。
[0071]
步骤202,根据所述主应用待投放的应用场景,确定主应用的应用模板。确定主应用的应用模板包括:根据所述主应用的运行渠道及容器、布局、语言、第三方插件中的任意一种,选择主应用的应用模板。除了步骤201中的应用场景之外,将主应用投放到应用渠道的同时还包括:将主应用投放应用到各个应用渠道时所应用的语言等。例如,中文、英文、德文、韩文等。除此之外,主应用的应用模板还包括:容器、布局、第三方插件等,例如,小程序
使用微信sdk中的api插件;app使用cordova插件等。因此,主应用在应用时采用的语言、容器、布局、第三方插件及应用场景,组合形成应用模板。例如:主应用投放在中文pc端网页、主应用投放在英文小程序端等。
[0072]
步骤203,根据所述主应用的应用模板及所述配置文件,生成所述主应用。本步骤根据主应用的应用模板、配置文件及运行命令,得到主应用的代码结合,即,生成主应用。
[0073]
图3所示为本文实施例一种更新主应用的方法流程图。如前文所述,当所述业务需求发生变更,通过更改所述主应用的配置文件以更新所述主应用。具体包括如下步骤:
[0074]
步骤301,当所述业务需求为新增主应用功能,则在所述主应用的配置文件中增加实现待新增的主应用功能的子应用相关的字段。当业务需求为在主应用中新增某一功能,则从子应用集合/子应用资源池中查询该新增功能对应的子功能,将该子功能名称、子功能id、子功能与主应用的路由关系相关的字段增加到主应用原有的配置文件中。
[0075]
步骤302,当所述业务需求为删除所述主应用功能之一,则在所述主应用的配置文件中清除实现待删除的主应用功能的子应用相关的字段。当业务需求为在主应用中删除某一功能,则在原有的配置文件中删除该功能对应的子功能相关的字段,包括:子功能名称、子功能id、子功能与主应用的路由关系等字段。在本说明书的一些实施例中,业务需求发生变更时,本方案可以通过动态生成配置文件实现随时上新主应用、随时热更新,将重复劳动高的主应用集成代码配置化。在对外服务不停止的情况下,操作人员通过更改配置文件,主应用便可以自动建立或更改与子应用的调用关系。动态下发代码,不需部署版本即可以修复bug或发布新功能。
[0076]
在本技术还包括一种微前端监控方法,该方法利用主应用与子应用生成的拓扑结构执行如下步骤:根据所述子应用的告警信息,从所述拓扑结构中确定与所述子应用具有路由关系的主应用,控制所述主应用中该子应用暂停使用。在本说明书的一些实施例中,根据子应用的监控日志可以发现子应用出现告警信息发生故障,则可以从主应用与子应用的拓扑结果中查找,与该发生告警的子应用具有路由关系的主应用,并通过修改该主应用的配置文件中与该发生告警的子应用的相关字段,控制主应用中的该子应用暂停运行,并更新主应用的配置文件。相对应的,显示页面上的拓扑结构也会随之更新。具体的,通过在主应用的配置文件中增加可用性字段

available’,通过设定该可用性字段的参数控制该发生告警的子应用暂停使用或正常使用。具体如下所示:
[0077]
[0078][0079]
其中,主应用包括两个子应用组成,分别为

sub1’和

sub2’。其中,

sub1’的可用性字段为:available:false;

sub2’的可用性字段为:available:true,分别表示子应用

sub1’暂停运行,子应用

sub2’正常使用。
[0080]
在本说明书的一些实施例中,该微前端控制方法还包括:当多个主应用同时发生告警信息,优先根据拓扑结构确定所述多个主应用对应的同一子应用是否发生故障。当某个主应用出现故障生成告警信息,故障原因包括但不限于:主应用自身可能发生宕机、主应用引入的第三方系统发生异常、实现主应用的子应用发生故障。
[0081]
因此,实现该主应用的多个子应用均具有一定的故障概率。如前文所述,当两个及以上主应用具有相同的功能,使用同一子应用实现主应用的其中部分功能时,若两个及以上这样的主应用发生故障生成告警信息,则该同一子应用发生故障的概率相对其他单一的子应用发生故障的概率更高。则根据主应用与子应用的拓扑结构确定两个及以上主应用共同的子应用,优先排查该共同的子应用是否出现问题。例如,主应用1包括金融服务、贷款营销这2个子应用;主应用2包括内容审批、贷款营销及用户管理3个子应用。则主应用1与主应用2具有相同的子应用:贷款营销。当主应用1和主应用2同时发生故障生成告警信息,则根据拓扑结构可获知主应用1、主应用2及其子应用的映射关系,进一步根据这2个主应用共同的子应用,确定该共同的子应用发生故障的概率相对更高。因此运维人员在排查故障时,优先排查该共同的子应用是否发生故障。
[0082]
如图4所示为本文实施例一种微前端集成装置的结构示意图,在本图中描述了基本结构,其中的功能单元、模块可以采用软件方式实现,也可以采用通用芯片或者特定芯片实现,实现微前端集成服务,该装置具体包括:
[0083]
主应用功能确定单元401,用于根据业务需求确定主应用功能;
[0084]
子应用确定单元402,用于从预先设置的子应用集合中确定实现所述主应用功能的子应用;
[0085]
配置文件生成单元403,用于根据所述主应用功能及确定的子应用,生成主应用的配置文件;
[0086]
拓扑结构生成单元404,用于根据所述配置文件生成所述主应用与所述子应用的拓扑结构并显示。
[0087]
本方案通过可视化配置化界面,快速稳定集成上线应用,减少主应用开发和投产时间;且能够实现热更新无需投产,同时减少人为错误,方便定位错误。
[0088]
作为本文的一个实施例,还可以参考如图5所示为本实施例装置的具体结构示意图。
[0089]
作为本文的一个实施例,所述主应用功能确定单元401进一步包括:
[0090]
业务需求获取单元4011,用于获取业务需求;
[0091]
作为本文的一个实施例,所述子应用确定单元402进一步包括:
[0092]
子应用集合预设模块4021,用于预先设置子应用集合;
[0093]
作为本文的一个实施例,所述配置文件生成单元403进一步包括:
[0094]
配置文件变更新模块4031,用于根据业务需求变更,更改主应用的配置文件。
[0095]
作为本文的一个实施例,所述拓扑结构生成单元404进一步包括:
[0096]
显示单元4041,用于将所述拓扑结构发送至显示界面进行显示。
[0097]
图6所示为本文实施例一种主应用与子应用的拓扑结构的示意图。如图所示微前端应用系统包括了两个主应用,分别为主应用1和主应用2。其中,主应用1分别对应三个子应用,分别为:子应用1、子应用2和子应用4;主应用2分别对应3个子应用,分别为:子应用3、子应用5及子应用6。
[0098]
图7所示为本文实施例一种子应用集合的示意图。该子应用集合701包括多个子应用,分别为:用户管理子应用、内容审核子应用、贷款营销子应用、金融服务子应用及企业社交子应用。
[0099]
如图8所示,为本文实施例提供的一种计算机设备,所述计算机设备802可以包括一个或多个处理器804,诸如一个或多个中央处理单元(cpu),每个处理单元可以实现一个或多个硬件线程。计算机设备802还可以包括任何存储器806,其用于存储诸如代码、设置、数据等之类的任何种类的信息。非限制性的,比如,存储器806可以包括以下任一项或多种组合:任何类型的ram,任何类型的rom,闪存设备,硬盘,光盘等。更一般地,任何存储器都可以使用任何技术来存储信息。进一步地,任何存储器可以提供信息的易失性或非易失性保留。进一步地,任何存储器可以表示计算机设备802的固定或可移除部件。在一种情况下,当处理器804执行被存储在任何存储器或存储器的组合中的相关联的指令时,计算机设备802可以执行相关联指令的任一操作。计算机设备802还包括用于与任何存储器交互的一个或多个驱动机构808,诸如硬盘驱动机构、光盘驱动机构等。
[0100]
计算机设备802还可以包括输入/输出模块810(i/o),其用于接收各种输入(经由输入设备812)和用于提供各种输出(经由输出设备814)。一个具体输出机构可以包括呈现设备816和相关联的图形用户接口(gui)818。在其他实施例中,还可以不包括输入/输出模块810(i/o)、输入设备812以及输出设备814,仅作为网络中的一台计算机设备。计算机设备802还可以包括一个或多个网络接口820,其用于经由一个或多个通信链路822与其他设备交换数据。一个或多个通信总线824将上文所描述的部件耦合在一起。
[0101]
通信链路822可以以任何方式实现,例如,通过局域网、广域网(例如,因特网)、点对点连接等、或其任何组合。通信链路822可以包括由任何协议或协议组合支配的硬连线链路、无线链路、路由器、网关功能、名称服务器等的任何组合。
[0102]
对应于图1至图3中的方法,本文实施例还提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机程序,该计算机程序被处理器运行时执行上述方法的步骤。
[0103]
本文实施例还提供一种计算机可读指令,其中当处理器执行所述指令时,其中的程序使得处理器执行如图1至图3所示的方法。
[0104]
本文实施例还提供了一种计算机程序产品,所述计算机程序产品包括计算机程序,所述计算机程序被处理器执行时实现图1至图3所示的方法。
[0105]
应理解,在本文的各种实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本文实施例的实施过程构成任何限定。
[0106]
还应理解,在本文实施例中,术语“和/或”仅仅是一种描述关联对象的关联关系,表示可以存在三种关系。例如,a和/或b,可以表示:单独存在a,同时存在a和b,单独存在b这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。
[0107]
本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本文的范围。
[0108]
所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
[0109]
在本文所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另外,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口、装置或单元的间接耦合或通信连接,也可以是电的,机械的或其它的形式连接。
[0110]
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本文实施例方案的目的。
[0111]
另外,在本文各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以是两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
[0112]
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本文的技术方案本质上或者说对现有技术做出贡献的部分,或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本文各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:u盘、移动硬盘、只读存储器(rom,read-only memory)、随机存取存储器(ram,random access memory)、磁碟或者光盘等各种可以存储程序代码的介质。
[0113]
本文中应用了具体实施例对本文的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本文的方法及其核心思想;同时,对于本领域的一般技术人员,依据本文的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本文的限制。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献