一种基于低代码的服务标准化系统及方法与流程

文档序号:30556844发布日期:2022-06-29 02:59阅读:126来源:国知局
一种基于低代码的服务标准化系统及方法与流程

1.本发明涉及软件开发技术领域,具体来说,涉及一种基于低代码的服务标准化系统及方法。


背景技术:

2.随着云计算技术、云原生、分布式技术的发展,推动企业it架构不断演进。在这样的技术变革潮流下,不同企业的it系统架构差异比较大,甚至一个企业不同应用系统的架构差异化也会比较大,这样会导致不同企业it系统集成对接,或者企业内部it应用的集成对接时需要做大量定制开发,集成对接成本居高不下,间接影响到企业业务开展和经营情况。即现有技术主要存在以下问题:1)技术架构的差异化,导致不同企业的it系统集成对接需要做技术栈定制适配开发:不同应用都需要做技术栈的适配,要重复投入开发。2)接口开放和使用成本高:接口提供方需要做大量定制,满足接口报文内容要求;接口使用方也需要做大量定制,把接口报文转换为业务所需的格式;每个应用的重复投入导致企业业务开展成本居高不下。
3.虽然企业集成时可以采用统一的http技术进行一定程度的缓解,但是企业技术架构差异,转换为http技术栈要做定制开发。即使都采用了http协议,报文的差异化也导致接口开放和使用成本很高。而目前有一些技术可以做到技术栈适配,比如api网关技术,可以接入http、dubbo、springcloud不同技术栈的服务。只是api网关平台若要接入,一般涉及模块会比较多,部署起来要占用不少资源,对于小企业来说成本很高。
4.即使采用api网关技术,接口开放和使用成本还是较高,为适配报文协议和转换内容,应用需要做大量报文转换等定制开发,导致跟外部服务集成对接成本很高。并且是每个应用跟外部服务集成对接时都需要做类似的转换,以满足本应用的应用场景需求,这直接导致了大量的重复投入。
5.针对相关技术中的问题,目前尚未提出有效的解决方案。


技术实现要素:

6.针对相关技术中的问题,本发明提出一种基于低代码的服务标准化系统及方法,以克服现有相关技术所存在的上述技术问题。
7.为此,本发明采用的具体技术方案如下:根据本发明的一个方面,提供了一种基于低代码的服务标准化系统,该系统包括配置管理模块和执行引擎模块;所述配置管理模块包括服务信息配置模块及报文转换模块;所述执行引擎模块包括服务连接模块、报文协议转换模块及报文内容转换模块;其中,所述服务信息配置模块用于提供服务基础信息配置、标准服务出入参信息及原始服务出入参信息;所述报文转换模块用于提供标准化的报文内容跟原始服务报文信息的转换配置;
所述服务连接模块用于调用不同技术栈的服务,屏蔽技术架构的差异化,并对使用者只需要关注http技术栈;所述报文协议转换模块用于满足应用使用和开放服务的要求,把服务的请求和响应报文协议标准化为json/xml;所述报文内容转换模块用于提供报文结构转换、报文内容属性值转换及自定义报文内容转换,解决不同应用下不同业务场景的诉求。
8.进一步的,所述不同技术栈的服务包括http、dubbo、grpc、springcloud及soap的微服务。
9.进一步的,所述报文协议转换模块提供了八种报文协议转换功能以实现请求报文协议和响应报文协议的快捷转换,同时提供了自定义脚本扩展方式以实现个性化报文转换。
10.进一步的,所述请求报文协议的转换包括xml转json、json转对象、json转raw及自定义脚本;所述响应报文协议的转换包括xml转json、raw转json、对象转换json、json转xml及自定义脚本。
11.进一步的,所述报文协议转换模块中的报文协议转换是根据标准化服务配置的标准化服务报文协议和原始服务报文协议类型进行处理,在调用原始服务之前,把请求报文协议从标准服务报文协议转换为按原始服务报文协议;在获取原始服务响应后,把原始服务报文协议转换为标准服务协议。
12.进一步的,所述报文结构转换用于横表转纵表、纵表转横表、json展开及数组转换数组;所述报文内容属性值转换用于赋值原值、赋值常量、枚举值映射、主键id生成、json压缩及日期时间格式转换;所述自定义报文内容转换用于增加自定义的转换器加入到转换引擎中,且值生成时按自定义转换器进行值转换。
13.根据本发明的另一个方面,提供了一种基于低代码的服务标准化方法,该服务标准化方法包括以下步骤:s1、创建标准化服务,选择技术栈、报文协议、标准化技术栈及标准化报文协议;s2、在可视化界面导入标准化服务的出入参和原始服务出入参信息;s3、在可视化界面进行标准化服务请求和响应报文内容转换配置,并进行配置验证;s4、通过api测试工具或可视化界面测试标准化服务,并将标准化服务的执行引擎模块绑定服务的相关配置,进行完整报文协议转换、报文内容转换和服务调用。
14.进一步的,所述s3中在可视化界面进行标准化服务请求和响应报文内容转换配置,并进行配置验证包括以下步骤:s31、创建请求报文内容转换,提供报文结构、报文内容属性值、自定义报文内容转换;s32、请求报文配置验证,修改样例请求报文,查看转换后请求报文,确认请求报文配置是否按预期;
s33、创建响应报文内容转换,提供报文内容结构映射、报文内容属性值映射、自定义脚本值映射;s34、响应报文配置验证,修改响应报文样例,查看转换后响应报文,确认响应报文配置是否按预期。
15.进一步的,所述s4中通过api测试工具或可视化界面测试标准化服务,并将标准化服务的执行引擎模块绑定服务的相关配置,进行完整报文协议转换、报文内容转换和服务调用包括以下步骤:s41、执行引擎模块创建本次调用上下文,上下文中建立本服务的协议、服务环境、出入参定义、报文转换信息;s42、根据上下文信息,拿到请求报文内容转换规则,进行请求报文内容转换;s43、根据上下文确定原始服务技术栈,并根据上下文信息确定原始服务报文,同时请求报文进行转换,创建原始服务技术栈的执行器,并调用相应的服务;s44、根据上下文,获取到原始服务和标准化服务的报文协议,调用对应的报文协议转换能力;s45、根据服务上下文,拿到报文内容转换配置,调用响应报文内容转换;s46、返回报文转换后的目标报文响应。
16.进一步的,所述报文内容转换包括以下步骤:目标报文转换为对象,对象是一个嵌套对象,包含对象基本信息、对象下属性列表、对象下子对象列表、对下对象数组列表;从父对象开始,递归分析其下的所有子对象和子对象数组,直至对象或对象数组没有下层子对象和下层子对象数组;若是叶子对象,分析对象上是否有纵表转横表、对象转对象、目标报文展开的报文结构转换规则,有则进行结构转换和关联的属性转换;再分析未转换属性逐一进行属性值转换;报文结构转换:纵表转横表,若无关联属性时,则把纵表自动转义为对象自动属性;若有属性配置时,则查找关联的属性值映射,转换对应属性;对象转对象,若无关联属性时,则把源对象属性追加到目标对象属性列表中;若有属性配置时,则查找关联的属性值映射,转换对应属性值;目标报文展开时,展开的对象作为转换后对象;属性值映射:分析未映射的对象属性,按配置的转换规则进行属性值映射;若为叶子对象数组,分析对象数组上是否有数组转数组、横表转纵表类报文结构转换,有则进行加工转换和关联属性转换;再分析未转换属性逐一进行属性值转换;报文结构转换:数组转数组,若无关联属性时,则把源数组直接转换为目标数组;若有关联属性时,则只映射关联属性;横表转纵表,若无关联属性时,则把横表所有属性转换为数组对象;若有关联属性时,只把关联属性映射到数组上;属性值映射:分析未映射的属性,按配置的转换规则进行属性值映射;递归完所有子对象和子对象数组后,返回转换后的目标报文。
17.本发明的有益效果为:本发明基于低代码的服务标准化方法通过预置技术栈的服务连接器可以有效解决技术栈转换,服务标准化方法通过报文协议转换和报文转换可以无需编码或少量代码方式实现报文内容按需转换。且本发明可以独立部署,可以作为sdk复用
到应用系统中,可以节省大量技术栈定制开发和报文转换定制开发的成本,可以快速接入不同技术栈,快速使用和开放相关服务,解决了企业之间或企业内部it应用的集成对接难题,解决接口开放和使用难题,实现企业业务的快速支撑。
附图说明
18.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
19.图1是根据本发明实施例的一种基于低代码的服务标准化系统的结构框图;图2是根据本发明实施例的一种基于低代码的服务标准化系统中报文内容转换模块的原理示意图;图3是根据本发明实施例的一种基于低代码的服务标准化方法的流程示意图。
20.图中:1、配置管理模块;11、服务信息配置模块;12、报文转换模块;2、执行引擎模块;21、服务连接模块;22、报文协议转换模块;23、报文内容转换模块。
具体实施方式
21.为进一步说明各实施例,本发明提供有附图,这些附图为本发明揭露内容的一部分,其主要用以说明实施例,并可配合说明书的相关描述来解释实施例的运作原理,配合参考这些内容,本领域普通技术人员应能理解其他可能的实施方式以及本发明的优点,图中的组件并未按比例绘制,而类似的组件符号通常用来表示类似的组件。
22.根据本发明的实施例,提供了一种基于低代码的服务标准化系统及方法。
23.以下就本发明中涉及的缩略语进行解释说明如下:http:http(hypertext transport protocol)超文本传输协议,是一个基于请求与响应,无状态的,应用层的协议,常基于tcp/ip协议传输数据,互联网上应用最为广泛的一种网络协议,所有的www文件都必须遵守这个标准。
24.dubbo: dubbo是阿里巴巴开源的一款高性能、轻量级的开源java rpc框架,它提供了三大核心能力:面向接口的远程方法调用,智能容错和负载均衡,以及服务自动注册和发现。dubbo提供了java、go、erlang三种语言服务管理能力。
25.springcloud:springcloud是一个开源的微服务架构工具包,包含服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等。是使用spring boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。
26.grpc:grpc是google开源的一个多语言微服务框架,grpc可以使用协议缓冲区作为其接口定义语言和底层消息交换格式。在 grpc 中,客户端应用程序可以直接在另一台计算机上的服务器应用程序上调用方法,就好像它是本地对象一样,从而使您可以更轻松地创建分布式应用程序和服务。grpc提供c++、c#、dart、go、java、php、ruby、python、objective-c、node、kotlin众多语言接入能力。
27.soap:soap(simple object access protocol)是简单对象访问协议;是一种轻量的、简单的、基于xml(标准通用标记语言下的一个子集)的协议,它被设计成在web上交换结构化的和固化的信息。
28.xml:xml(extensible markup language)指可扩展标记语言,被设计用来结构化、存储及传输信息。
29.json:json(javascript object notation)是一种轻量级的数据交换格式。它基于 ecmascript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 json 成为理想的数据交换语言。
30.现结合附图和具体实施方式对本发明进一步说明,如图1-2所示,根据本发明的一个实施例,提供了一种基于低代码的服务标准化系统,该系统包括配置管理模块1和执行引擎模块2;所述配置管理模块1包括服务信息配置模块11及报文转换模块12;所述执行引擎模块2包括服务连接模块21、报文协议转换模块22及报文内容转换模块23;其中,所述服务信息配置模块11用于提供服务基础信息配置、标准服务出入参信息及原始服务出入参信息;所述报文转换模块12用于提供标准化的报文内容跟原始服务报文信息的转换配置;所述服务连接模块21用于调用不同技术栈的服务,屏蔽技术架构的差异化,并对使用者只需要关注http技术栈;具体的,所述不同技术栈的服务包括http、dubbo、grpc、springcloud及soap等微服务,通过服务连接模块可以调用相关技术栈的微服务。
31.服务标准化基本信息中可以配置原始服务的技术栈类型,标准化服务的解析运行引擎解析技术栈类型,结合不同技术栈调用方式调用原始的服务,并对外转换为http技术栈。
32.所述报文协议转换模块22用于满足应用使用和开放服务的要求,把服务的请求和响应报文协议标准化为json/xml;由于不同服务技术栈的报文差异化,报文协议转换会提供json/xml转换为技术栈请求报文协议;为满足服务开放要求,技术栈的响应报文协议会统一转换为json/xml。
33.具体的,所述报文协议转换模块22提供了八种报文协议转换功能以实现请求报文协议和响应报文协议的快捷转换,同时提供了自定义脚本扩展方式以实现个性化报文转换。
34.所述请求报文协议的转换包括xml转json、json转对象、json转raw及自定义脚本;所述响应报文协议的转换包括xml转json、raw转json、对象转换json、json转xml及自定义脚本。
35.报文协议转换是根据标准化服务配置的标准化服务报文协议和原始服务报文协议类型进行处理,在调用原始服务之前,把请求报文协议从标准服务报文协议转换为按原始服务报文协议;在获取原始服务响应后,把原始服务报文协议转换为标准服务协议。
36.所述报文内容转换模块23用于提供报文结构转换、报文内容属性值转换及自定义报文内容转换,解决不同应用下不同业务场景的诉求。
37.由于不同系统实际api对外开放或者使用外部api时候,报文内容都需要按要求进行转换,需要做大量的定制开发。报文转换器提供可视化配置能力和低代码能力进行报文内容的一键转换能力。如图2所示,报文转换提供如下能力:1)报文结构转换:横表转纵表:把一个对象下的部分或全部叶子节点转换为属性对的纵表模式;纵表转横表:把一个纵表的属性对数组转换为一个对象的叶子节点;json展开:把一个json串展开为一个对象;数组转换数组:把一个数组映射为一个数组,数组对象的属性可选择赋值原值或常量或枚举值映射;2)报文内容属性值转换:赋值原值:把源对象属性的原值映射到目标对象属性上;赋值常量:设置为常量;枚举值映射:按配置枚举值映射规则获取对应的取值;主键id生成:提供多种id生成规则;json压缩:把一个对象的信息压缩为一个json串赋值给一个属性;日期时间格式转换:按设定日期时间格式转换;3)自定义报文内容转换:可以增加自定义的转换器加入到转换引擎中,且值生成时按自定义转换器进行值转换。
38.根据本发明的另一个实施例,如图3所示,提供了一种基于低代码的服务标准化方法,该服务标准化方法包括以下步骤:s1、创建标准化服务,选择技术栈、报文协议、标准化技术栈及标准化报文协议;s2、在可视化界面导入标准化服务的出入参和原始服务出入参信息;s3、在可视化界面进行标准化服务请求和响应报文内容转换配置,并进行配置验证;其中,所述s3中在可视化界面进行标准化服务请求和响应报文内容转换配置,并进行配置验证包括以下步骤:s31、创建请求报文内容转换,提供报文结构、报文内容属性值、自定义报文内容转换;s32、请求报文配置验证,修改样例请求报文,查看转换后请求报文,确认请求报文配置是否按预期;s33、创建响应报文内容转换,提供报文内容结构映射、报文内容属性值映射、自定义脚本值映射;s34、响应报文配置验证,修改响应报文样例,查看转换后响应报文,确认响应报文配置是否按预期。
39.s4、通过api测试工具或可视化界面测试标准化服务,并将标准化服务的执行引擎模块绑定服务的相关配置,进行完整报文协议转换、报文内容转换和服务调用。
40.其中,所述s4中通过api测试工具或可视化界面测试标准化服务,并将标准化服务
的执行引擎模块绑定服务的相关配置,进行完整报文协议转换、报文内容转换和服务调用包括以下步骤:s41、执行引擎模块创建本次调用上下文,上下文中建立本服务的协议、服务环境、出入参定义、报文转换信息;s42、根据上下文信息,拿到请求报文内容转换规则,进行请求报文内容转换;s43、根据上下文确定原始服务技术栈,并根据上下文信息确定原始服务报文,同时请求报文进行转换,创建原始服务技术栈的执行器,并调用相应的服务;s44、根据上下文,获取到原始服务和标准化服务的报文协议,调用对应的报文协议转换能力;s45、根据服务上下文,拿到报文内容转换配置,调用响应报文内容转换;s46、返回报文转换后的目标报文响应。
41.具体的,所述报文内容转换包括以下步骤:目标报文转换为对象,对象是一个嵌套对象,包含对象基本信息、对象下属性列表、对象下子对象列表、对下对象数组列表;从父对象开始,递归分析其下的所有子对象和子对象数组,直至对象或对象数组没有下层子对象和下层子对象数组;若是叶子对象,分析对象上是否有纵表转横表、对象转对象、目标报文展开的报文结构转换规则,有则进行结构转换和关联的属性转换;再分析未转换属性逐一进行属性值转换;报文结构转换:纵表转横表,若无关联属性时,则把纵表自动转义为对象自动属性;若有属性配置时,则查找关联的属性值映射,转换对应属性;对象转对象,若无关联属性时,则把源对象属性追加到目标对象属性列表中;若有属性配置时,则查找关联的属性值映射,转换对应属性值;目标报文展开时,展开的对象作为转换后对象;属性值映射:分析未映射的对象属性,按配置的转换规则进行属性值映射;若为叶子对象数组,分析对象数组上是否有数组转数组、横表转纵表类报文结构转换,有则进行加工转换和关联属性转换;再分析未转换属性逐一进行属性值转换;报文结构转换:数组转数组,若无关联属性时,则把源数组直接转换为目标数组;若有关联属性时,则只映射关联属性;横表转纵表,若无关联属性时,则把横表所有属性转换为数组对象;若有关联属性时,只把关联属性映射到数组上;属性值映射:分析未映射的属性,按配置的转换规则进行属性值映射;递归完所有子对象和子对象数组后,返回转换后的目标报文。
42.为了方便理解本发明的上述技术方案,以下就本发明中服务标准化方法的一个具体实施例进行详细说明。
43.具体为把一个soap服务标准化为一个http服务,返回json报文;服务标准化流程如下:s1、创建一个标准化服务,选择一种技术栈soap,报文协议为xml,标准化为技术栈为http+报文协议为json;s2、在可视化界面导入标准化服务的出入参和soap服务出入参;s3、在可视化界面进行标准化服务请求和响应报文内容转换配置,并进行配置验
证;s4、通过api测试工具或可视化界面测试标准化服务,标准化服务的执行引擎模块绑定服务配置,进行完整报文协议转换、报文内容转换和服务调用;其中s3包含请求报文内容转换配置、请求配置验证、响应报文内容转换配置和响应配置验证;报文内容转换和验证如下:s31、创建请求报文内容转换,提供报文结构、报文属性值、自定义等报文内容转换;s32、请求报文配置验证;修改样例请求报文,查看转换后请求报文,确认请求报文配置是否按预期;s33、创建响应报文内容转换,提供报文内容结构映射、报文内容属性值映射、自定义脚本值映射;s34、响应报文配置验证;修改响应报文样例,查看转换后响应报文,确认响应报文配置是否按预期;本发明中,其中s4的执行引擎模块包含加载服务配置、json请求报文内容进行转换、json请求报文转换为xml并调用soap服务、soap响应报文协议从xml转换为json、响应报文内容进行转换、返回json报文;执行引擎进行服务标准化的解析运行;s41、解析运行引擎创建本次调用上下文,上下文中建立本服务的协议、服务环境、出入参定义、报文转换信息等;上下文源码定义如下:package com.iwhalecloud.bassc.rhin;public class runtimeenginecontext {
……
/*请求*/private abstractruntimerequest request;/**业务能力id*/private long busiserviceid;/*业务能力编码*/private string busiservicecode;/**环境信息*/map《long, envconf》 envconfmap;/**业务对象实例 key 为业务对象id*/private concurrenthashmap《long, objectinst》 objectinstmap;/*执行的对象id*/private long objid;/*引擎执行的环境*/private string env;/* 是否是测试模式*/private boolean testmode;/*执行的业务对象*/private execbusiobjectdto busiobject;
/*本次执行的所有的映射信息*/privatelist《execparammappingdto》parammappings;/*业务对象信息*/privatemap《long,execparamobjectdto》paramobjects;/*属性规格信息*/privatemap《long,execattrspecdto》attrspecs;
……
}s42、根据上下文信息,拿到请求报文内容转换规则,进行请求报文内容转换;s43、根据上下文,原始服务技术栈为soap,根据上下文信息确定原始服务报文为xml,请求报文进行转换,然后创建soap执行器,调用soap服务;服务连接的部分源代码如下:/*根据标准服务配置的技术栈调用服务连接*/publicmap《string,object》handle(runtimeenginecontextcontext,httpparamsrequest){
……
/*获取服务连接器类*/execbusiobjectdtobusiobjectdto=context.getbusiobjectdto();stringclassname=busiobjectdto.getclassname();//获取服务连接器相关模板属性list《execadapterattrdto》requiredattrinst=busiobjectdto.getadapterattrs();//获取环境idlongexeenvid=busiobjectdto.getexeenvid();//获取运行环境列表map《long,platform》exeenv=context.getexeenv();map《string,execenvcfgdto》exeenvconf=getenvconfigs(exeenvid,exeenv);//调用具体的服务连接器:http、soap、dubbo、grpc
……
executor.config(requiredattrinst);istandardserviceexecutorexecutor=factory.get(classname);response=executor.execute(executor.getconfig(),request,exeenvconf);
……
}s44、根据上下文,获取到原始服务和标准化服务的报文协议,调用xml转换json的报文协议转换能力;s45、根据服务上下文,拿到报文内容转换配置,调用响应报文内容转换;s46、返回报文转换后的json响应;
本发明中,s42和s45都需要调用报文内容转换,报文内容转换包含如下步骤:步骤a1、目标报文json转换为对象,对象是一个嵌套对象,包含对象基本信息、对象下属性列表、对象下子对象列表、对下对象数组列表;步骤a2、从父对象开始,递归分析其下的所有子对象和子对象数组,直至对象或对象数组没有下层子对象和下层子对象数组;步骤a3、若是叶子对象,分析对象上是否有纵表转横表、对象转对象、json展开等报文结构转换规则,有则进行结构转换和关联的属性转换;再分析未转换属性逐一进行属性值转换;报文结构转换:纵表转横表,若无关联属性时,则把纵表自动转义为对象自动属性;若有属性配置时,则查找关联的属性值映射,转换对应属性。对象转对象,若无关联属性时,则把源对象属性追加到目标对象属性列表中;若有属性配置时,则查找关联的属性值映射,转换对应属性值。json展开时,展开的对象作为转换后对象。
44.属性值映射:分析未映射的对象属性,按配置的转换规则进行属性值映射。
45.步骤a4、若为叶子对象数组,分析对象数组上是否有数组转数组、横表转纵表类报文结构转换,有则进行加工转换和关联属性转换;再分析未转换属性逐一进行属性值转换;报文结构转换:数组转数组,若无关联属性时,则把源数组直接转换为目标数组;若有关联属性时,则只映射关联属性。横表转纵表,若无关联属性时,则把横表所有属性转换为数组对象;若有关联属性时,只把关联属性映射到数组上。
46.属性值映射:分析未映射的属性,按配置的转换规则进行值映射。
47.步骤a5、递归完所有子对象和子对象数组后,返回转换后的json报文;映射转换相关源码如下:package com.iwhalecloud.bassc.rhin.runtime.core.convert;/*参数转换,参数转换*/public map《string, object》 contextconvert(long long destserviceobjid,map《string, object》 parammap, list《execparammappingdto》 parammappings){
……
/*获取目标的业务对象*/serviceobject resultobj = parammappings.genserviceobj(destserviceobjid);/*目标对象*/map《string, object》 destparammap = objectconvert(resultobj,parammap, parammappings);
……
}综上所述,借助于本发明的上述技术方案,本发明基于低代码的服务标准化方法通过预置技术栈的服务连接器可以有效解决技术栈转换,服务标准化方法通过报文协议转换和报文转换可以无需编码或少量代码方式实现报文内容按需转换。且本发明可以独立部署,可以作为sdk复用到应用系统中,可以节省大量技术栈定制开发和报文转换定制开发的成本,可以快速接入不同技术栈,快速使用和开放相关服务,解决了企业之间或企业内部it
应用的集成对接难题,解决接口开放和使用难题,实现企业业务的快速支撑。
48.以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1