电网多任务在线协同编辑方法与流程

文档序号:12063789阅读:451来源:国知局
电网多任务在线协同编辑方法与流程

本发明涉及电网信息通信技术领域,尤其涉及一种电网多任务在线协同编辑方法。



背景技术:

为了全面有效支撑各级单位和部门对电网资源信息的有效管理,需要建设覆盖国家电网公司、省公司、地市公司各级电网资源维护应用。在基建工程、技改大修工程、用户工程等工程完成后,运维检修人员和调度人员要更新相关的设备图形和台帐信息,实现电网设备设施的图形、拓扑、设备台帐的一体化维护,实现全公司电网横向和纵向的“一张网”。运维检修人员需要维护运维检修部运维管理的所有设备信息,实现设备台帐与资产的互联,支撑资产全寿命管理,实现电网与客户信息互联,支撑故障抢修、线损精细化等综合应用。

现有版本管理方式多数以单机与任务隔离方式为主,即客户端下载一份全网数据存储在本地数据库中,用户在本地数据基础之上进行图形编辑,在本地编辑完成后,在提交环节通过复杂的版本数据合并后写入数据库。在这种方式下,随着电网数据的增长,本地文件过大而导致数据查询性能越来越低,图形漫游性能卡顿现象严重,在多任务提交中,数据合并环节过于复杂,经常导致提交的数据在第二天才能看到,且任务是完全隔离的,无法实现多人协同编辑、展示与发布,降低工作效率。

在公开号为CN104717239A的中国专利公开文件中,提出了一种共享文件的协同编辑方法、服务器及用户端,所述方法包括:根据共享文件来源,为多个用户端分配对共享文件的编辑权限;建立一个栈表;获取所述多个用户端的共享文件编辑信息,将所述共享文件编辑信息逐条存储于所述栈表中。但该方案中,对于其他用户端来说,只有部分编辑权限,无法对共享文件的全部数据进行编辑,存在局限性。



技术实现要素:

本发明所要解决的技术问题是:提供一种电网多任务在线协同编辑方法,可实现编辑结果的实时共享。

为了解决上述技术问题,本发明采用的技术方案为:一种电网多任务在线协同编辑方法,包括:

创建状态编号序列,所述状态编号序列中的序列值从小到大依次排序;

根据编辑任务,对基版表进行编辑操作;

若所述编辑操作是在编辑态下进行,则将编辑的数据记录到与所述基版表对应的版本表中,并记录所述编辑任务对应的版本编号以及所述编辑操作对应的编辑标识;

依据编辑操作的时间前后顺序,将编辑操作与状态编号序列中依次取出的序列值进行关联,并将所述序列值写入所述版本表中;

将所述序列值以及被编辑的基版表编号进行关联,并写入版本变更表;

根据所述版本变更表,判断一基版表是否发生变更;

若发生变更,则根据所述一基版表对应的版本表,对应更新所述一基版表;

同时,将所述更新操作与状态编号序列的下一序列值进行关联,并将所述下一序列值写入基版表中;

将所述下一序列值以及更新的基版表编号进行关联,并写入基版变更表;

发布所述一基版表。

本发明的有益效果在于:在进行编辑操作时,通过按序从状态编号序列中取出序列值与编辑操作关联,由于状态编号序列中的序列值是从小到大排序的,因此可直观地表示出各个编辑操作的顺序;通过设置版本变更表,可以通过序列值判断基版表是否发生变更,还可通过与序列值对应的基版表编号获取发生变更的基版表,再根据版本表中记录的变更信息,对应更新基版表,从而实现多个客户端基于不同的编辑任务对不同或相同的基版表进行协同编辑。

附图说明

图1为本发明一种多任务在线协同编辑方法的流程图;

图2为本发明实施例一的方法流程图;

图3为本发明实施例二的步骤S6的流程图。

具体实施方式

为详细说明本发明的技术内容、所实现目的及效果,以下结合实施方式并配合附图详予说明。

本发明最关键的构思在于:通过状态编号序列的序列值表示编辑操作的顺序,且所有任务共用一个状态编号序列,在进行编辑时,可看到其他任务编辑的实时结果。

请参阅图1,一种电网多任务在线协同编辑方法,包括:

创建状态编号序列,所述状态编号序列中的序列值从小到大依次排序;

根据编辑任务,对基版表进行编辑操作;

若所述编辑操作是在编辑态下进行,则将编辑的数据记录到与所述基版表对应的版本表中,并记录所述编辑任务对应的版本编号以及所述编辑操作对应的编辑标识;

依据编辑操作的时间前后顺序,将编辑操作与状态编号序列中依次取出的序列值进行关联,并将所述序列值写入所述版本表中;

将所述序列值以及被编辑的基版表编号进行关联,并写入版本变更表;

根据所述版本变更表,判断一基版表是否发生变更;

若发生变更,则根据所述一基版表对应的版本表,对应更新所述一基版表;

同时,将所述更新操作与状态编号序列的下一序列值进行关联,并将所述下一序列值写入基版表中;

将所述下一序列值以及更新的基版表编号进行关联,并写入基版变更表;

发布所述一基版表。

从上述描述可知,本发明的有益效果在于:在编辑态下对基版表进行编辑,不直接对基版表的数据进行编辑,而是先记录到版本表中,当要进行版本发布时才将版本表中的数据对应更新到基版表中。

进一步地,所述“根据编辑任务,对基版表进行编辑操作”之后,进一步包括:

若所述编辑操作是在运行态下进行,则根据所述编辑操作更新所述基版表,并记录所述编辑任务对应的版本编号;

依据编辑操作的时间前后顺序,将编辑操作与状态编号序列中依次取出的序列值进行关联,并将所述序列值写入所述基版表中;

将所述序列值以及被编辑的基版表编号进行关联,并写入基版变更表。

由上述描述可知,在运行态下对基版表进行编辑,则实时更新基版表,不涉及版本表。

进一步地,所述“根据所述版本变更表,判断一基版表是否发生变更”具体为:

获取版本变更表中最大的序列值;

获取所有基版表及版本表中最大的序列值;

判断两个所述最大的序列值是否一致;

若不一致,则根据版本变更表,获取在两个所述最大的序列值之间的序列值对应的基版表编号;

判断所述对应的基版表编号是否包含所述一基版表编号;

若包含,则判定所述一基版表发生变更。

由上述描述可知,通过代表编辑操作的时间前后顺序的序列值,直观地表示出对各个数据进行编辑的顺序,可以很容易地得知相对于一个时间点,之后是否有进行编辑,从而判断是否发生变更。

进一步地,所述“若发生变更,则根据所述一基版表对应的版本表,对应更新所述一基版表”具体为:

若所述一基版表对应的版本表中一数据对应的编辑标识为预设的新增数据标识,则将所述一数据增加至所述一基版表中,并在所述一基版表中将对应的版本编号置为预设的初始编号;

若所述一基版表对应的版本表中一数据对应的编辑标识为预设的修改数据标识,则在所述一基版表中搜索到原来的所述一数据,将所述版本表中编辑后的所述一数据同步至所述一基版表中,并在所述一基版表中将对应的版本编号置为预设的初始编号;

若所述一基版表对应的版本表中一数据对应的编辑标识为预设的删除基版数据标识,则在所述一基版表中删除所述一数据。

由上述描述可知,以增量数据的方式进行更新,只保留最后的编辑结果,而不考虑编辑过程。

进一步地,所述“若发生变更,则根据所述一基版表对应的版本表,对应更新所述一基版表”之后,进一步包括:

删除所述对应的版本表中的所述一数据。

由上述描述可知,将已进行更新的数据及时从版本表中进行删除,从而保证已发布的版本记录能够及时从版本缓存中删除。

进一步地,所述“根据编辑任务,对基版表进行编辑操作”之前,进一步包括:

将电网设备的基版表及其对应的版本表载入内存,并映射为内存对象组织管理。

由上述描述可知,通过将空间数据表在内存中以面向对象的形式进行储存,可节约内存空间。

进一步地,所述基版表中的一条数据只能在一个编辑任务中进行编辑。

由上述描述可知,通过版本锁定机制,避免冲突编辑。

实施例一

本发明的实施例一为:一种电网多任务在线协同编辑方法,所述方法基于版本管理技术,版本管理技术是在图形维护、编辑时使用到的一种长事务的图形维护处理技术。通过它可以实现不同的图形版本层进行各自任务的维护和编辑,而互不影响。在系统中,用于实现运行态电网与编辑态电网的隔离。版本任务编辑工作全部在编辑态下进行,在运行态下看不到编辑态的数据,只有待任务发布之后,编辑态数据合并到运行态才可以。将每一个电网设备运维任务单做为一个版本,记录电网G I S数据的变化;当版本经审核发布后,则结束版本的生命周期;版本的审核发布作为一个长事务,要么全部成功,要么全部失败。

本实施例中,数据库中表的原始状态称为基版表,一个数据库中存在有多张基版表,因此为每个基版表都设置了编号,每个基版表都有与其一一对应的版本表;同时,为了保存版本中的编辑状态,以及提高版本数据查询效率,每个基版表增加两个字段,分别是状态编号(STATEID)和版本编号(VERSIONID),状态编号表示对数据进行编辑操作的时间前后顺序,版本编号即编辑任务对应的编号。版本表相对基版表增加一个编辑标识字段(ADDFLAG),描述数据的编辑类型(新增、修改、删除,其中删除包括删除基版数据和删除新增数据),方便版本编辑增量的查询。

请参照图2,所述方法包括如下步骤:

S1:创建状态编号序列,所述状态编号序列中的序列值从小到大依次排序;优选地,可以从小到大依次递增排序,如0、1、2、3……以此类推。

S2:根据编辑任务,对基版表进行编辑操作;此时,判断该编辑操作是否在编辑态下进行的,若是,执行步骤S3,若否,则表示该编辑操作是在运行态下进行的,执行步骤S11。进一步地,营销、通信系统使用场景是直接在运行态上进行编辑,运检系统不能在运行态编辑,必须通过创建一个任务工单,在任务中进行编辑,之后提交审核,审核通过之后,发布编辑后的数据,此时会将任务中的编辑数据写入基版表中。运行态下的编辑数据直接写入基版表中,编辑态下的编辑数据直接写入版本表中。

S3:将编辑的数据记录到与所述基版表对应的版本表中,并记录所述编辑任务对应的版本编号以及所述编辑操作对应的编辑标识。在编辑态下对基版表进行编辑时,不直接在基版表上进行修改,而是将被编辑的数据记录到与基版表一一对应的版本表中,此时,普通用户在运行态下看不到实时编辑的结果。

S4:依据编辑操作的时间前后顺序,将编辑操作与状态编号序列中依次取出的序列值进行关联,并将所述序列值写入所述版本表中;所有的编辑任务都对应一个状态编号序列。

S5:将所述序列值以及被编辑的基版表编号进行关联,并写入版本变更表;即版本变更表记录是表示状态编号的序列值以及对应的被编辑的基版表的编号。

S6:根据所述版本变更表,判断一基版表是否发生变更,若是,执行步骤S7。

S7:根据所述一基版表对应的版本表,对应更新所述一基版表。进一步地,根据所述版本表中的编辑标识字段(ADDFLAG)来进行相应的操作。

具体地,若所述一基版表对应的版本表中一数据对应的编辑标识为预设的新增数据标识,则将所述一数据增加至所述一基版表中,并在所述一基版表中将对应的版本编号置为预设的初始编号,优选地,预设的初始编号为0;

若所述一基版表对应的版本表中一数据对应的编辑标识为预设的修改数据标识,则在所述一基版表中搜索到原来的所述一数据,将所述版本表中编辑后的所述一数据同步至所述一基版表中,并在所述一基版表中将对应的版本编号置为预设的初始编号;

若所述一基版表对应的版本表中一数据对应的编辑标识为预设的删除基版数据标识,则所述一基版表中删除所述一数据;

若所述一基版表对应的版本表中的一数据对应的编辑标识为预设的删除新增数据标识,则不对所述一基版表进行操作。

S8:同时,将所述更新操作与状态编号序列的下一序列值进行关联,并将所述下一序列值写入基版表中;即继续按照顺序从状态编号序列中取出序列值,此时,将更新操作当做一个整体的编辑操作,因此只用一个序列值来作为状态编号。

S9:将所述下一序列值以及更新的基版表编号进行关联,并写入基版变更表。

S10:发布所述一基版表。

S11:根据所述编辑操作更新所述基版表,并记录所述编辑任务对应的版本编号。在运行态下对基版表进行编辑时,则不涉及版本表,而是直接更新基版表,普通用户在运行态下可以实时看到编辑结果。

S12:依据编辑操作的时间前后顺序,将编辑操作与状态编号序列中依次取出的序列值进行关联,并将所述序列值写入所述基版表中。

S13:将所述序列值以及被编辑的基版表编号进行关联,并写入基版变更表。

在步骤S3中,记录编辑任务对应的版本编号,是为了防止冲突编辑,通过采用版本锁定机制,保证基版表中的任意一条数据只能在一个编辑任务中进行编辑。例如,若一个客户端在版本编号为100的编辑任务中对一数据进行编辑,另一客户端若也要对该数据进行编辑时,需比较该数据对应的版本编号与自身所执行的编辑任务的版本编号是否一致,若一致,则允许编辑,若不一致,例如若另一客户端所执行的编辑任务的版本编号为200,则不能对该数据进行编辑。

本实施例在进行编辑操作时,通过按序从状态编号序列中取出序列值与编辑操作关联,由于状态编号序列中的序列值是从小到大排序的,因此可直观地表示出各个编辑操作的顺序;通过设置版本变更表,可以通过序列值判断基版表是否发生变更,还可通过与序列值对应的基版表编号获取发生变更的基版表,再根据版本表中记录的变更信息,对应更新基版表,从而实现多个客户端基于不同的编辑任务对不同或相同的基版表进行协同编辑。

实施例二

本实施例对实施例一中步骤S6的进一步拓展。

如图3所示,步骤S6具体包括:

S601:获取版本变更表中最大的序列值。

S602:获取所有基版表及版本表中最大的序列值;即获取内存中所有基版表及其对应的版本表中最大的序列值。

S603:判断两个所述最大的序列值是否一致,若是,则表示没有对任意一个基版表进行编辑,若否,则表示有对基版表进行编辑,执行步骤S604。

S604:根据版本变更表,获取在两个所述最大的序列值之间的序列值对应的基版表编号。

S605:判断所述对应的基版表编号是否包含所述一基版表编号,若是,执行步骤S606。

S606:判定所述一基版表发生变更。

由于序列值代表的编辑操作的时间前后顺序,因此可以根据序列值判定出基版表是否发生变更,然后根据版本变更表记录的被编辑的基版表编号得知具体是对哪几个基版表进行了编辑。更新时,只对两个最大的序列值之间的序列值所对应的数据进行更新。

可选地,可在发布时对整体编辑的数据进行更新,也可在发布前对编辑态中的基版表进行实时更新,此时,可根据预设的周期定时扫描基版变更表和版本变更表,获取两个表中最大的序列值,然后与上一周期获取的最大序列值进行比较,若不一致,则表明发生了变更,以两个所述最大的序列值的区间作为查询条件,查询基版变更表或版本变更表,查找到该周期中有被编辑的基版表,然后根据其对应的版本表进行相应更新。

实施例三

本实施例是上述实施例的进一步拓展。

在步骤S1或S2之前,将电网设备的基版表及其对应的版本表载入内存,并映射为内存对象组织管理,即将电网基版与版本空间数据载入内存,并采用相应的数据结构封装空间数据库数据,空间数据包括点、线、面与注记等,利用面向对象设计思想形成数据抽象类型,对数据进行封装,同时对空间表采用相应数据结构封装,主要管理空间记录对象、对象索引以及提供数据读写操作。

在进行编辑时,后端通过服务方式集中管理空间数据,采用版本穿透机制,即在编辑任务中可以相互实时看到其他任务的编辑结果,实现多个任务“一张网”式管理。版本穿透机制主要通过多个版本数据与基版数据相互叠加实现。

当进行更新时,采用数据实时更新技术,通过定期扫描基版变更表与版本变更表以增量的方式实时读取数据并将增量数据载入内存,用于实时更新内存数据,体现客户端访问的数据一致性。通过增量数据实时更新技术与版本管理技术实现多任务版本数据发布管理。

进一步地,还采用了版本缓存自动维护机制,即在步骤S6之后,删除所述对应的版本表中的所述一数据。具体地,版本数据发布时,栅格服务能够自动清理版本缓存数据,在版本表中的数据写入基版表后,基版表中的数据发生变更,引发基版表更新,若基版表中的数据对应的版本编号(VERSIONID)为0,栅格服务会自动在版本缓存中根据基版表中的数据ID查找对应的版本数据,如果找到,则删除。版本数据发布后,基版表数据发生变更,实时扫描基表变更表,将实施例二中两个最大的序列值之间的增量数据同步到基版缓存中,在更新基版数据时,判断数据对应的VERSIONID是否为0,若VERSIONID为0,则在对应版本缓存中查找记录,若能根据数据ID找到对应版本记录,则在版本缓存中删除,采用这种方法可以准确实现版本发布后,已发布的版本记录能够及时从版本缓存中删除。

实施例四

本实施例是上述实施例的一具体应用场景。本实施例以在编辑态下进行编辑为例。

表1和表2分别定义了基版表结构和版本表结构;其中对版本表的编辑标识字段ADDFLAG设置了默认参数。

表1

表2

假设编号10247为基版表POLE如表3所示,该表原始状态有6条记录,在未对其进行编辑前,其对应的版本表POLE_VER如表4所示。

表3

表4

假设A与B客户端分别创建并打开版本编号为VERSIONID=100与VERSIONID=200的编辑任务,在A与B打开新建任务且在编辑之前,A与B看到的图形均为运行态数据,也就是基版数据。A与B均编辑基版表POLE,假设A新增记录ID=7,B用户新增记录ID=8与9两条记录,则在版本表中插入3条记录,如表5所示;由于版本表数据发生变化,版本变更表新增3条记录,如表6所示。

表5

表6

A与B客户端通过访问后端栅格化服务实时出图,根据版本穿透机制,A在版本编号为200的任务中不仅可以看到自己新增的ID为7的设备,还可以实时看到B在版本编号为300的任务中新增的ID为8与9的设备,同时B也可以在自己的任务中看到A新增的ID为7的设备。

之后,A修改ID=5的数据,将Fld1改为Fld11,B修改ID=6的数据,将Fld2改为Fld22,此时的基版表如表7所示,版本表如表8所示,版本变更表如表9所示。且由于基版表中ID=5和ID=6的数据已分别被VERSIONID=100与VERSIONID=200的任务锁定,因此不能被其他任务编辑。

表7

表8

表9

版本数据发生变更,实时扫描版本变更表,将增量数据载入版本缓存中,此时A与B可以实时相互看到各自修改后的效果。

之后,A删除ID=1的数据,B删除ID=2的数据,此时的基版表如表10所示,版本表如表11所示,版本变更表如表12所示。由于是删除基版数据,因此将ADDFLAG设为3。

表10

表11

表12

版本数据发生变更,实时扫描版本变更表,将增量数据载入版本缓存中,此时A与B可以实时相互看到各自删除后的效果。

若为删除新增数据的情况,例如A删除ID=7的数据,B删除ID=8的数据,此时的版本表如表13所示,版本变更表如表14所示。由于是删除新增数据,因此修改状态编号,并将ADDFLAG更新为4。

表13

表14

版本数据发生变更,实时扫描版本变更表,将增量数据载入版本缓存中,此时读取到的增量数据为ID=7与ID=8,数据更新模块将增量数据映射为内存对象存储在对应的版本缓存中,在出图展示场景下,通过判断内存对象的ADDFLAG标记来确定该设备是否需要展示。A与B漫游后,可以实时在线看到双方编辑后的效果,A任务与B任务中均看不到ID=7与ID=8的记录。

任务编辑完毕之后,即可以进行版本发布,版本发布的主要方法是通过判断版本表中的ADDFLAG进行相应的操作:

如果版本记录ADDFLAG=1,则将版本记录以拷贝的方式在基版表中新增一条记录,且将VERSIONID置为0。

如果版本记录ADDFLAG=2,且能根据ID在基版表中找到记录,则以版本记录更新同步到基版表,且将VERSIONID置为0。

如果版本记录ADDFLAG=3,且能根据ID在基版表中找到记录,则删除基版表对应的记录。

将版本记录处理完毕之后,最后删除版本表中已发布的记录。

A发布VERSIONID=200的任务,B发布VERSIONID=300的任务,发布完毕后,基版表如表15所示,基版变更表如表16所示,版本表如表17所示。

表15

表16

表17

A与B在运行态下漫游,均能够实时看到相互发布后的图形数据。

综上所述,本发明提供的一种电网多任务在线协同编辑方法,在进行编辑操作时,通过按序从状态编号序列中取出序列值与编辑操作关联,由于状态编号序列中的序列值是从小到大排序的,因此可直观地表示出各个编辑操作的顺序;通过设置版本变更表,可以通过序列值判断基版表是否发生变更,还可通过与序列值对应的基版表编号获取发生变更的基版表,再根据版本表中记录的变更信息,对应更新基版表,从而实现多个客户端基于不同的编辑任务对不同或相同的基版表进行协同编辑。

以上所述仅为本发明的实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等同变换,或直接或间接运用在相关的技术领域,均同理包括在本发明的专利保护范围内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1