CN103677821B - 软件开发工具代码发布的方法和装置 - Google Patents

软件开发工具代码发布的方法和装置 Download PDF

Info

Publication number
CN103677821B
CN103677821B CN201310654741.7A CN201310654741A CN103677821B CN 103677821 B CN103677821 B CN 103677821B CN 201310654741 A CN201310654741 A CN 201310654741A CN 103677821 B CN103677821 B CN 103677821B
Authority
CN
China
Prior art keywords
code
file
file destination
configuration file
label
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201310654741.7A
Other languages
English (en)
Other versions
CN103677821A (zh
Inventor
张永军
王帅
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Kingdee Software China Co Ltd
Original Assignee
Kingdee Software China Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Kingdee Software China Co Ltd filed Critical Kingdee Software China Co Ltd
Priority to CN201310654741.7A priority Critical patent/CN103677821B/zh
Publication of CN103677821A publication Critical patent/CN103677821A/zh
Application granted granted Critical
Publication of CN103677821B publication Critical patent/CN103677821B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Stored Programmes (AREA)

Abstract

本发明公开了一种软件开发工具代码发布的方法,包括步骤:读取配置文件中的代码,解析并提取配置文件中代码的可替换标记;读取目标文件中的代码,解析并提取目标文件中代码的可替换标记;当配置文件中代码的可替换标记与目标文件中代码的可替换标记相同时,保留配置文件中的代码或目标文件中的代码;当配置文件中代码的可替换标记与目标文件中代码的可替换标记不同时,保留配置文件中的代码和目标文件中的代码;根据保留的代码创建动态模板,并根据动态模板生成新的目标文件。本发明还公开了一种软件开发工具代码发布的装置。本发明实现了代码发布内容的可配置和可扩展性、以及代码的增量发布,减少了程序占用的存储空间。

Description

软件开发工具代码发布的方法和装置
技术领域
本发明涉及到数据处理技术领域,特别涉及到软件开发工具代码发布的方法和装置。
背景技术
在软件产品开发过程中,软件开发工具可以为业务开发人员提供图形化集成开发环境,实现模型驱动架构(MDA,Model Driven Architecture),提高软件产品的开发和实施效率,例如,BOS(Business Operating System,业务操作系统)工具,用户可根据软件开发工具定义相关内容,自动发布生成可以运行的程序代码,即实现代码发布过程。但是,现有的软件开发工具在代码发布过程中,发布生成程序代码的处理逻辑写在代码中,发布代码结构如果发生变化,必须重新修改软件开发工具自身代码,修改后的内容将会覆盖以前的内容,可配置和可扩展性差。此外,由于不能配置代码结构,软件开发工具需要多发布一个不必要的代码文件,来存放程序结构性信息,占用了不必要的空间。
上述内容仅用于辅助理解本发明的技术方案,并不代表承认上述内容是现有技术。
发明内容
本发明的主要目的为提供一种软件开发工具代码发布的方法和装置,能够实现代码发布内容的可配置和可扩展性,节省程序占用空间。
为实现上述目的,本发明提出一种软件开发工具代码发布的方法,包括步骤:
读取配置文件中的代码,解析并提取所述配置文件中代码的可替换标记;
读取目标文件中的代码,解析并提取所述目标文件中代码的可替换标记;
当所述配置文件中代码的可替换标记与所述目标文件中代码的可替换标记相同时,保留所述配置文件中的代码或所述目标文件中的代码;当所述配置文件中代码的可替换标记与所述目标文件中代码的可替换标记不同时,保留所述配置文件中的代码和所述目标文件中的代码;
根据保留的代码创建动态模板,并根据动态模板生成新的目标文件。
优选地,所述读取目标文件中的代码,解析并提取所述目标文件中代码的可替换标记的步骤之前还包括:
判断是否存在目标文件;
如果是,则执行所述读取目标文件中的代码,解析并提取所述目标文件中代码的可替换标记的步骤;
如果否,则根据所述配置文件中的代码创建动态模板,并根据动态模板生成新的目标文件。
优选地,所述代码包括代码内容和可替换标记。
优选地,所述可替换标记包括标记部分和特殊字符部分,所述标记部分用于描述所述可替换标记的起始位置,所述特殊字符部分用于描述所述可替换标记的内容。
本发明还提出一种软件开发工具代码发布的装置,包括:
读取模块,用于读取配置文件中的代码;读取目标文件中的代码;
解析模块,用于解析并提取所述配置文件中代码的可替换标记;解析并提取所述目标文件中代码的可替换标记;
判断模块,用于当所述配置文件中代码的可替换标记与所述目标文件中代码的可替换标记相同时,保留所述配置文件中的代码或所述目标文件中的代码;当所述配置文件中代码的可替换标记与所述目标文件中代码的可替换标记不同时,保留所述配置文件中的代码和所述目标文件中的代码;
生成模块,用于根据保留的代码创建动态模板,并根据动态模板生成新的目标文件。
优选地,所述判断模块还用于,判断是否存在目标文件;
所述生成模块还用于,当不存在所述目标文件时,根据所述配置文件中的代码创建动态模板,并根据动态模板生成新的目标文件。
优选地,所述代码包括代码内容和可替换标记。
优选地,所述可替换标记包括标记部分和特殊字符部分,所述标记部分用于描述所述可替换标记的起始位置,所述特殊字符部分用于描述所述可替换标记的内容。
本发明将配置文件中的代码存储为实际的代码内容部分和自定义的可替换标记部分,当需要修改代码时,只需要对配置文件中代码的可替换标记进行修改即可,实现了代码发布内容的可配置和可扩展性,并通过可替换标记和动态模板实现代码的增量发布,修改后的代码不会覆盖原有的代码,同时,配置文件和目标文件中的代码已经包括了代码结构,无需另外发布一个存放程序结构信息的代码文件,减少了程序占用的存储空间。
附图说明
图1为本发明软件开发工具代码发布的方法的第一实施例的流程示意图;
图2为本发明软件开发工具代码发布的方法的第二实施例的流程示意图;
图3为本发明软件开发工具代码发布的装置一实施例的结构示意图。
本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
如图1所示,图1为本发明软件开发工具代码发布的方法的第一实施例的流程示意图。本实施例提到的软件开发工具代码发布的方法,包括步骤:
步骤S10,读取配置文件中的代码,解析并提取配置文件中代码的可替换标记;
本实施例中预先定义了一个配置文件,在配置文件中存储有代码信息,代码包括代码内容和可替换标记。其中,代码内容为代码的固定部分,即实际的代码内容;可替换标记为代码的可替换与可添加部分,用于对代码结构进行标记和配置,可自定义。可替换标记包括标记部分和特殊字符部分,标记部分用于描述可替换标记的起始位置,例如,以//@、//#、//$、//!、//*、//%等作为可替换标记的开头;特殊字符部分用于描述可替换标记的内容,例如:
//@WafImports:标记代码需要动态引入其他程序文件的部分;
//@AutoWiredStart和//@AutoWiredStartEnd:标记代码需要动态引入变量的部分;
//@WafControllerEnd:标记代码结束;
//@WafAction:标记代码功能逻辑块;
//@WafEvent:标记代码事件逻辑块。
可替换标记可灵活扩展,当代码结构发生改变后,只需调整配置文件中的可替换标记部分,即达到对代码结构进行配置扩展的目的。
本实施例在进行代码发布时,读取配置文件中的代码,解析代码获得代码的实际代码内容和自定义的可替换标记部分。
步骤S20,读取目标文件中的代码,解析并提取目标文件中代码的可替换标记;
然后从已存在的目标文件中读取代码,解析出目标文件中代码的实际代码内容和自定义的可替换标记。
步骤S30,当配置文件中代码的可替换标记与目标文件中代码的可替换标记相同时,保留配置文件中的代码或目标文件中的代码;当配置文件中代码的可替换标记与目标文件中代码的可替换标记不同时,保留配置文件中的代码和目标文件中的代码;
上述配置文件中可包括一个或多个代码,目标文件中也可包括一个或多个代码,将上述从两个文件中的代码解析得到的可替换标记进行对比,查找是否存在具有相同可替换标记的代码。如果查找到具有相同可替换标记的代码,则只需要保留其中一个,例如,在配置文件中的代码A1的可替换标记为B,代码内容为A,目标文件中的代码A2的可替换标记为C,代码内容为A,当B=C,则说明代码内容A没有变化,只需要保留配置文件中的代码A1或目标文件中的代码A2中的一个即可。如果配置文件中代码的可替换标记与目标文件中代码的可替换标记不同,这需要将配置文件中的代码添加到目标文件中,实现代码的可扩展性,例如,在配置文件中的代码A1的可替换标记为B,代码内容为A,目标文件中的代码A的可替换标记为C,代码内容为A,当B≠C,则说明代码内容A的结构发生了变化,A1是新添加的代码,应将其保留,同时,由于A1和A2的结构不同,因此在保留A1的时候,不会覆盖目标文件中原有的A2,实现了代码的可配置和可扩展性。
步骤S40,根据保留的代码创建动态模板,并根据动态模板生成新的目标文件。
将上述配置文件中的代码和目标文件的代码融合,创建动态模板,并生成新的目标文件存储下来,新生成的目标文件中的代码包括有代码的可替换标记,无需另外发布一个存放程序结构信息的代码文件,有利于节省程序占用的存储空间。
本实施例将配置文件中的代码存储为实际的代码内容部分和自定义的可替换标记部分,当需要修改代码时,只需要对配置文件中代码的可替换标记进行修改即可,实现了代码发布内容的可配置和可扩展性,并通过可替换标记和动态模板实现代码的增量发布,修改后的代码不会覆盖原有的代码,同时,配置文件和目标文件中的代码已经包括了代码结构,无需另外发布一个存放程序结构信息的代码文件,减少了程序占用的存储空间。
如图2所示,图2为本发明软件开发工具代码发布的方法的第二实施例的流程示意图。本实施例是以图1所示实施例为基础,步骤S20之前还包括:
步骤S50,判断是否存在目标文件;如果是,则执行步骤S20;如果否,则执行步骤S60;
步骤S60,根据配置文件中的代码创建动态模板,并根据动态模板生成新的目标文件。
本实施例中,对于不存在目标文件的情况,例如首次发布代码时,此时尚未生成过目标文件,则直接采用配置文件中的代码来创建动态模板,并生成目标文件,在下一次发布代码时,再将新的配置文件中的代码与前一次生成的目标文件中的代码对比,创建新的动态模板,生成新的目标文件。本实施例在不存在目标文件时,直接采用配置文件中的代码来创建动态模板,有利于提高动态模板和目标文件的生成效率,缩短代码发布时间。
如图3所示,图3为本发明软件开发工具代码发布的装置一实施例的结构示意图。本实施例提到的软件开发工具代码发布的装置,包括:
读取模块10,用于读取配置文件中的代码;读取目标文件中的代码;
解析模块20,用于解析并提取配置文件中代码的可替换标记;解析并提取目标文件中代码的可替换标记;
判断模块30,用于当配置文件中代码的可替换标记与目标文件中代码的可替换标记相同时,保留配置文件中的代码或目标文件中的代码;当配置文件中代码的可替换标记与目标文件中代码的可替换标记不同时,保留配置文件中的代码和目标文件中的代码;
生成模块40,用于根据保留的代码创建动态模板,并根据动态模板生成新的目标文件。
本实施例中预先定义了一个配置文件,在配置文件中存储有代码信息,代码包括代码内容和可替换标记。其中,代码内容为代码的固定部分,即实际的代码内容;可替换标记为代码的可替换与可添加部分,用于对代码结构进行标记和配置,可自定义。可替换标记包括标记部分和特殊字符部分,标记部分用于描述可替换标记的起始位置,例如,以//@、//#、//$、//!、//*、//%等作为可替换标记的开头;特殊字符部分用于描述可替换标记的内容,例如:
//@WafImports:标记代码需要动态引入其他程序文件的部分;
//@AutoWiredStart和//@AutoWiredStartEnd:标记代码需要动态引入变量的部分;
//@WafControllerEnd:标记代码结束;
//@WafAction:标记代码功能逻辑块;
//@WafEvent:标记代码事件逻辑块。
可替换标记可灵活扩展,当代码结构发生改变后,只需调整配置文件中的可替换标记部分,即达到对代码结构进行配置扩展的目的。
本实施例在进行代码发布时,读取配置文件中的代码,解析代码获得代码的实际代码内容和自定义的可替换标记部分。然后从已存在的目标文件中读取代码,解析出目标文件中代码的实际代码内容和自定义的可替换标记。
上述配置文件中可包括一个或多个代码,目标文件中也可包括一个或多个代码,将上述从两个文件中的代码解析得到的可替换标记进行对比,查找是否存在具有相同可替换标记的代码。如果查找到具有相同可替换标记的代码,则只需要保留其中一个,例如,在配置文件中的代码A1的可替换标记为B,代码内容为A,目标文件中的代码A2的可替换标记为C,代码内容为A,当B=C,则说明代码内容A没有变化,只需要保留配置文件中的代码A1或目标文件中的代码A2中的一个即可。如果配置文件中代码的可替换标记与目标文件中代码的可替换标记不同,这需要将配置文件中的代码添加到目标文件中,实现代码的可扩展性,例如,在配置文件中的代码A1的可替换标记为B,代码内容为A,目标文件中的代码A的可替换标记为C,代码内容为A,当B≠C,则说明代码内容A的结构发生了变化,A1是新添加的代码,应将其保留,同时,由于A1和A2的结构不同,因此在保留A1的时候,不会覆盖目标文件中原有的A2,实现了代码的可配置和可扩展性。
将上述配置文件中的代码和目标文件的代码融合,创建动态模板,并生成新的目标文件存储下来,新生成的目标文件中的代码包括有代码的可替换标记,无需另外发布一个存放程序结构信息的代码文件,有利于节省程序占用的存储空间。
本实施例将配置文件中的代码存储为实际的代码内容部分和自定义的可替换标记部分,当需要修改代码时,只需要对配置文件中代码的可替换标记进行修改即可,实现了代码发布内容的可配置和可扩展性,并通过可替换标记和动态模板实现代码的增量发布,修改后的代码不会覆盖原有的代码,同时,配置文件和目标文件中的代码已经包括了代码结构,无需另外发布一个存放程序结构信息的代码文件,减少了程序占用的存储空间。
进一步的,判断模块30还用于,判断是否存在目标文件;
生成模块40还用于,当不存在目标文件时,根据配置文件中的代码创建动态模板,并根据动态模板生成新的目标文件。
本实施例中,对于不存在目标文件的情况,例如首次发布代码时,此时尚未生成过目标文件,则直接采用配置文件中的代码来创建动态模板,并生成目标文件,在下一次发布代码时,再将新的配置文件中的代码与前一次生成的目标文件中的代码对比,创建新的动态模板,生成新的目标文件。本实施例在不存在目标文件时,直接采用配置文件中的代码来创建动态模板,有利于提高动态模板和目标文件的生成效率,缩短代码发布时间。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例的方法。
以上所述仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。

Claims (8)

1.一种软件开发工具代码发布的方法,其特征在于,包括步骤:
读取配置文件中的代码,解析并提取所述配置文件中代码的可替换标记;
读取目标文件中的代码,解析并提取所述目标文件中代码的可替换标记;
当所述配置文件中代码的可替换标记与所述目标文件中代码的可替换标记相同时,保留所述配置文件中的代码或所述目标文件中的代码;当所述配置文件中代码的可替换标记与所述目标文件中代码的可替换标记不同时,保留所述配置文件中的代码和所述目标文件中的代码;
根据保留的代码创建动态模板,并根据动态模板生成新的目标文件。
2.如权利要求1所述的软件开发工具代码发布的方法,其特征在于,所述读取目标文件中的代码,解析并提取所述目标文件中代码的可替换标记的步骤之前还包括:
判断是否存在目标文件;
如果是,则执行所述读取目标文件中的代码,解析并提取所述目标文件中代码的可替换标记的步骤;
如果否,则根据所述配置文件中的代码创建动态模板,并根据动态模板生成新的目标文件。
3.如权利要求1或2所述的软件开发工具代码发布的方法,其特征在于,所述代码包括代码内容和可替换标记。
4.如权利要求3所述的软件开发工具代码发布的方法,其特征在于,所述可替换标记包括标记部分和特殊字符部分,所述标记部分用于描述所述可替换标记的起始位置,所述特殊字符部分用于描述所述可替换标记的内容。
5.一种软件开发工具代码发布的装置,其特征在于,包括:
读取模块,用于读取配置文件中的代码;读取目标文件中的代码;
解析模块,用于解析并提取所述配置文件中代码的可替换标记;解析并提取所述目标文件中代码的可替换标记;
判断模块,用于当所述配置文件中代码的可替换标记与所述目标文件中代码的可替换标记相同时,保留所述配置文件中的代码或所述目标文件中的代码;当所述配置文件中代码的可替换标记与所述目标文件中代码的可替换标记不同时,保留所述配置文件中的代码和所述目标文件中的代码;
生成模块,用于根据保留的代码创建动态模板,并根据动态模板生成新的目标文件。
6.如权利要求5所述的软件开发工具代码发布的装置,其特征在于,所述判断模块还用于,判断是否存在目标文件;
所述生成模块还用于,当不存在所述目标文件时,根据所述配置文件中的代码创建动态模板,并根据动态模板生成新的目标文件。
7.如权利要求5或6所述的软件开发工具代码发布的装置,其特征在于,所述代码包括代码内容和可替换标记。
8.如权利要求7所述的软件开发工具代码发布的装置,其特征在于,所述可替换标记包括标记部分和特殊字符部分,所述标记部分用于描述所述可替换标记的起始位置,所述特殊字符部分用于描述所述可替换标记的内容。
CN201310654741.7A 2013-12-05 2013-12-05 软件开发工具代码发布的方法和装置 Active CN103677821B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201310654741.7A CN103677821B (zh) 2013-12-05 2013-12-05 软件开发工具代码发布的方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201310654741.7A CN103677821B (zh) 2013-12-05 2013-12-05 软件开发工具代码发布的方法和装置

Publications (2)

Publication Number Publication Date
CN103677821A CN103677821A (zh) 2014-03-26
CN103677821B true CN103677821B (zh) 2018-06-12

Family

ID=50315488

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201310654741.7A Active CN103677821B (zh) 2013-12-05 2013-12-05 软件开发工具代码发布的方法和装置

Country Status (1)

Country Link
CN (1) CN103677821B (zh)

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104407855B (zh) * 2014-11-12 2018-11-02 国家电网公司 一种插件动态参数设置方法及装置
CN105930332B (zh) * 2016-01-13 2019-04-02 平安科技(深圳)有限公司 代码发布查询方法及终端
CN107885527A (zh) * 2016-09-27 2018-04-06 北京嘀嘀无限科技发展有限公司 一种测试系统的代码修改方法及装置
CN106648823B (zh) * 2016-12-30 2019-12-10 东软集团股份有限公司 代码发布的方法及装置
CN107122182B (zh) * 2017-04-14 2021-08-24 努比亚技术有限公司 一种代码构建和发布的方法及系统
CN107357583A (zh) * 2017-07-13 2017-11-17 上海市共进通信技术有限公司 基于软件代码进行模块自动构建的系统及方法
CN109710510B (zh) * 2018-08-20 2023-07-21 中国平安人寿保险股份有限公司 代码提交方法、装置、设备及可读存储介质
CN109358869A (zh) * 2018-09-03 2019-02-19 中国平安人寿保险股份有限公司 配置文件修改方法、装置、计算机设备和存储介质
CN109960719A (zh) * 2019-01-16 2019-07-02 平安普惠企业管理有限公司 一种文件处理方法和相关装置
CN109976761B (zh) * 2019-02-27 2022-06-07 平安科技(深圳)有限公司 软件开发工具包的生成方法、装置及终端设备

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103019690A (zh) * 2012-11-20 2013-04-03 北京思特奇信息技术股份有限公司 一种可视化的基于jet技术的组件模块开发方法

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN100533383C (zh) * 2006-11-03 2009-08-26 北京飞天诚信科技有限公司 一种对软件中的数据进行替换的方法

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103019690A (zh) * 2012-11-20 2013-04-03 北京思特奇信息技术股份有限公司 一种可视化的基于jet技术的组件模块开发方法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
使用 Eclipse Modeling Framework 进行建模,第3部分;Adrian Powell;《http://www.xuebuyuan.com/1294329.html》;20131005;全文 *
基于需求语义描述的Web系统智能搭建技术的研究与实现;张英;《中国优秀硕士学位论文全文数据库(硕士)信息科技I辑》;20130215;全文 *

Also Published As

Publication number Publication date
CN103677821A (zh) 2014-03-26

Similar Documents

Publication Publication Date Title
CN103677821B (zh) 软件开发工具代码发布的方法和装置
CN102160037B (zh) 只需设计一次就能在任何平台应用的移动应用开发框架
CN101122899B (zh) 报表的生成方法和设备
CN108427646A (zh) 基于Appium的安卓App自动化测试框架构建方法和装置
CN104133765B (zh) 网络活动的测试用例发送方法及测试用例服务器
CN113268243B (zh) 内存预测方法及装置、存储介质、电子设备
CN108363684A (zh) 表单创建方法、装置及服务器
CN105549936A (zh) 数据表的显示方法和装置
CN112463634A (zh) 微服务架构下的软件测试方法及装置
CN106294480A (zh) 一种文件格式转换方法、装置及试题导入系统
CN103383637A (zh) 一种屏幕背景显示的控制方法和装置
CN102236573A (zh) 用于类型化程序设计语言的名称绑定可扩展性
US20190087160A1 (en) System and method for creating domain specific language
CN106686545A (zh) 一种无线保真国家码的应用方法及装置
CN109408103A (zh) 配置文件的设置方法、装置、设备及介质
CN106446083A (zh) 一种路线指示方法和移动终端
CN104156430A (zh) 一种快速提取安卓手机数据的装置和方法
CN103605521A (zh) 一种实现界面对位的方法及装置
CN108399156A (zh) 一种pdf文件中公式的排版方法及装置
CN105573973A (zh) 一种将excel数据在ppt文件中进行数据关联的方法
CN104156209B (zh) 跨平台应用界面建模方法及装置
CN105260084A (zh) 输入序列的处理方法及装置
CN104536887A (zh) 通讯数据检测方法和装置
CN111859041B (zh) 数据报送方法及装置
CN115495519A (zh) 报表数据加工方法及装置

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant