发明内容
鉴于以上,本发明所要解决的技术问题在于,提供一种生成业务实体的多个业务对象的内部级次编码的方法和系统,来解决不能直接支持包含下级业务对象和直接使用编码的问题。
本发明提供了一种生成业务实体的多个业务对象的内部级次编码的方法,所述业务实体包括多个实例化的业务对象,包括:步骤S102,选择所述业务实体,设置所述业务实体的多个业务对象的内部级次编码规则;步骤S104,根据所述内部级次编码规则生成所述内部级次编码。通过该技术方案,可以根据预先设置的级次编码规则生成所选定的业务实体的内部级次编码,能够简化程序的开发,通过一次遍历即可完成对整个树型的构造。
在上述技术方案中,优选地,进一步包括:步骤S106,在所述内部级次编码的字段的长度不够的情况下,设置所述业务实体的新内部级次编码规则;步骤S108,根据所述新内部级次编码规则,生成新内部级次编码。通过该技术方案,能够根据业务对象的变化,只需重新设置业务实体的级次编码规则就能得到相应的业务对象的内部级次编码,操作简单。
在上述技术方案中,优选地,在新增业务对象的情况下:如果所述业务实体没有实例化的业务对象,则进行状态初始化,将新增数据的ID设置为“01”,将所述新增数据的PID设置为“0”,产生第一SQL语句,根据所述第一SQL语句产生所述内部级次编码;如果所述业务实体具有实例化的业务对象,则产生第二SQL语句,根据所述第二SQL语句产生所述内部级次编码,其中所述第一SQL语句包括产生Sequence的SQL语句和根据Sequence产生内部级次编码的SQL语句,所述第二SQL语句包括在当前对象的父对象下产生新的Sequence的SQL语句和根据父对象和新的Sequence产生内部级次编码的SQL语句。
在上述技术方案中,优选地,在删除业务对象的情况下:记录当前节点的父节点的内部级次编码,或者根据所述当前节点的所述父节点的ID,查找到所述父节点的所述内部级次编码,处理所述当前节点的所述父节点下的所有节点的SQL语句,根据上级节点产生排序的内部级次编码。通过该技术方案,可以进行新增业务对象和删除业务对象,根据编码规则得到重新排列的内部级次编码。
在上述技术方案中,优选地,在插入节点的情况下:先执行以下过程:
如果所述业务实体没有实例化的业务对象,则进行状态初始化,将新增数据的ID设置为“01”,将所述新增数据的PID设置为“0”,产生第一SQL语句,根据所述第一SQL语句产生所述内部级次编码;如果所述业务实体具有实例化的业务对象,则产生第二SQL语句,根据所述第二SQL语句产生所述内部级次编码;
然后执行以下过程:
记录当前节点的父节点的内部级次编码,或者根据所述当前节点的所述父节点的ID,查找到所述父节点的所述内部级次编码,处理所述当前节点的所述父节点下的所有节点的SQL语句,根据上级节点产生排序的内部级次编码。
在上述技术方案中,优选地,在移动节点的情况下,记录移动前后位置的两个父节点的信息:
移动前的处理过程如下:
记录当前节点的父节点的内部级次编码,或者根据所述当前节点的所述父节点的ID,查找到所述父节点的所述内部级次编码,处理所述当前节点的所述父节点下的所有节点的SQL语句,根据上级节点产生排序的内部级次编码;
移动后的处理过程如下:
先执行以下过程:
如果所述业务实体没有实例化的业务对象,则进行状态初始化,将新增数据的ID设置为“01”,将所述新增数据的PID设置为“0”,产生第一SQL语句,根据所述第一SQL语句产生所述内部级次编码;如果所述业务实体具有实例化的业务对象,则产生第二SQL语句,根据所述第二SQL语句产生所述内部级次编码;
然后执行以下过程:
记录当前节点的父节点的内部级次编码,或者根据所述当前节点的所述父节点的ID,查找到所述父节点的所述内部级次编码,处理所述当前节点的所述父节点下的所有节点的SQL语句,根据上级节点产生排序的内部级次编码。通过该技术方案,可以进行插入和移动的动作,准确的完成级次编码排列,生成内部级次编码。
本发明还提供了一种生成业务对象的内部级次编码的系统,所述业务实体的实例包括多个业务对象,包括:内部级次编码规则设置模块,选择所述业务实体,设置所述业务实体的多个业务对象的内部级次编码规则;以及内部级次编码生成模块,根据所述内部级次编码规则生成所述内部级次编码。通过该技术方案,可以根据预先设置的级次编码规则生成所选定的业务实体的内部级次编码,能够简化程序的开发,通过一次遍历即可完成对整个树型的构造。
在上述技术方案中,优选地,进一步包括:新内部级次编码规则设置模块,在所述内部级次编码的字段的长度不够的情况下,设置所述业务对象的新内部级次编码规则;新内部级次编码生成模块,根据所述新内部级次编码规则,生成新内部级次编码。通过该技术方案,可以进行新增业务对象、删除业务对象、移动节点和插入节点,根据编码规则得到重新排列的准确内部级次编码。
通过上述技术方案,能够实现一种生成业务对象的内部级次编码的方法和系统,根据应用的需要,灵活地对业务对象的内部级次编码的每段长度进行定制,设置灵活的编码规则,得到重新排列的内部级次编码,保持内部级次编码的合理性,能够进行新增业务对象、删除业务对象、移动节点和插入节点,通过一次遍历即可完成对整个树型的构造,简化程序的开发。
具体实施方式
为了能够更清楚地理解本发明的上述目的、特征和优点,下面结合附图和具体实施方式对本发明进行进一步的详细描述。
在下面的描述中阐述了很多具体细节以便于充分理解本发明,但是,本发明还可以采用其他不同于在此描述的其他方式来实施,因此,本发明并不限于下面公开的具体实施例的限制。
图1是根据本发明的一个实施例的生成业务实体的内部级次编码的方法的流程图。
如图1所示,根据本发明的一种生成业务对象的内部级次编码的方法,所述业务实体包括多个业务对象,包括:步骤S102,选择所述业务实体,设置所述业务实体的内部级次编码规则;步骤S104,根据所述内部级次编码规则生成所述内部级次编码。通过这样的技术方案,可以根据预先设置的级次编码规则生成所选定的业务实体的内部级次编码,能够简化程序的开发,通过一次遍历即可完成对整个树型的构造。
在上述技术方案中,进一步包括:步骤S106,在所述内部级次编码的字段的长度不够的情况下,设置所述业务对象的新内部级次编码规则;步骤S108,根据所述新内部级次编码规则,生成新内部级次编码。因此,能够根据业务实体的变化,只需重新设置业务实体的级次编码规则就能得到相应的业务对象的内部级次编码,操作简单。
在上述技术方案中,在新增业务对象的情况下:如果所述业务实体没有业务对象,则进行状态初始化,将新增数据的ID设置为“01”,将所述新增数据的PID设置为“0”,产生第一SQL语句,根据所述第一SQL语句产生所述内部级次编码;如果所述业务实体具有业务对象,则产生第二SQL语句,根据所述第二SQL语句产生所述内部级次编码。
在上述技术方案中,在删除业务对象的情况下:记录当前节点的父节点的内部级次编码,或者根据所述当前节点的所述父节点的ID,查找到所述父节点的所述内部级次编码,处理所述当前节点的所述父节点下的所有节点的SQL语句,根据上级节点产生排序的内部级次编码。通过该技术方案,可以进行新增业务对象和删除业务对象,根据编码规则得到重新排列的内部级次编码。
在上述技术方案中,在插入节点的情况下:先执行以下过程:
如果所述业务实体没有业务对象,则进行状态初始化,将新增数据的ID设置为“01”,将所述新增数据的PID设置为“0”,产生第一SQL语句,根据所述第一SQL语句产生所述内部级次编码;如果所述业务实体具有业务对象,则产生第二SQL语句,根据所述第二SQL语句产生所述内部级次编码;
然后执行以下过程:
记录当前节点的父节点的内部级次编码,或者根据所述当前节点的所述父节点的ID,查找到所述父节点的所述内部级次编码,处理所述当前节点的所述父节点下的所有节点的SQL语句,根据上级节点产生排序的内部级次编码。
在上述技术方案中,在移动节点的情况下,记录移动前后位置的两个父节点的信息:
移动前的处理过程如下:
记录当前节点的父节点的内部级次编码,或者根据所述当前节点的所述父节点的ID,查找到所述父节点的所述内部级次编码,处理所述当前节点的所述父节点下的所有节点的SQL语句,根据上级节点产生排序的内部级次编码;
移动后的处理过程如下:
先执行以下过程:
如果所述业务实体没有业务对象,则进行状态初始化,将新增数据的ID设置为“01”,将所述新增数据的PID设置为“0”,产生第一SQL语句,根据所述第一SQL语句产生所述内部级次编码;如果所述业务实体具有业务对象,则产生第二SQL语句,根据所述第二SQL语句产生所述内部级次编码;
然后执行以下过程:
记录当前节点的父节点的内部级次编码,或者根据所述当前节点的所述父节点的ID,查找到所述父节点的所述内部级次编码,处理所述当前节点的所述父节点下的所有节点的SQL语句,根据上级节点产生排序的内部级次编码。这样,就可以进行插入和移动的动作,准确的完成级次编码排列,生成内部级次编码。
图2是根据本发明的又一实施例的生成业务对象的内部级次编码的系统的框图。
如图2所示,根据本发明的一种生成业务对象的内部级次编码的系统200,所述业务实体包括多个业务对象,包括:内部级次编码规则设置模块202,选择所述业务实体,设置所述业务实体的内部级次编码规则;以及内部级次编码生成模块204,根据所述内部级次编码规则生成所述内部级次编码。通过这样的技术方案,可以根据预先设置的级次编码规则生成所选定的业务对象的内部级次编码,能够简化程序的开发,通过一次遍历即可完成对整个树型的构造。
在上述技术方案中,进一步包括:新内部级次编码规则设置模块,在所述内部级次编码的字段的长度不够的情况下,设置所述业务对象的新内部级次编码规则;新内部级次编码生成模块,根据所述新内部级次编码规则,生成新内部级次编码。因此,可以进行新增业务对象、删除业务对象、移动节点和插入节点,根据编码规则得到重新排列的准确内部级次编码。
通过上述方案,能够实现一种生成业务对象的内部级次编码的方法和系统,根据应用的需要,灵活地对业务对象的内部级次编码的每段长度进行定制,设置灵活的编码规则,得到重新排列的内部级次编码,保持内部级次编码的合理性,能够进行新增业务对象、删除业务对象、移动节点和插入节点,通过一次遍历即可完成对整个树型的构造,简化程序的开发。
图3是根据本发明的又一实施例的生成业务对象的内部级次编码的方法的功能模块示意图。
如图3所示,生成业务对象的内部级次编码的方法的功能模块具有内部级次编码的规则设置功能模块302,允许对业务规则进行设置,该规则应用于内部级次编码的生成;内部级次编码工具类功能模块304用于处理如何根据业务对象的关系以及关系的变化,自动生成新的内部级次编码;具有内部级次编码的业务对象功能模块306;基于内部级次编码的查询服务功能模块308,业务对象能够根据内部级次编码产生对外使用的包装过的查询服务,用于解决特定的业务问题。
首先根据该实施例的技术方案详细说明内部级次编码的规则设置功能模块302的规则设置的流程,如图4所示。
业务对象虽然具有树型关系,但是树型关系的内部级次编码的生成规则可能不同。如有些业务实体,其每个对象的每级次的数据量不会超过100个,则级次编码的每个段的长度可以设计为两位:00-99;而有些业务实体,其任一个业务对象的下级数据量可能超过100个,但不会超过1000个,则可设计该业务实体的每段编码长度为三位:000-999;设计一个指定内部编码级次规则每个段的长度参数,能够根据业务需要调整内部级次编码的生成规则,保持内部级次编码的合理性。
如果原来规划的内部级次编码的每个段的长度不够用,例如从原来的两位,需要变成三位,也是可以支持的,只需要该业务实体现有的所有业务数据按照新的编码规则,重新生成内部级次编码即可。
其具体的操作流程如下:
在步骤402,首先选择业务实体。
在步骤404,设置内部级次编码规则。
在步骤406,根据规则产生内部级次编码。
在步骤408,如果原来的设置的内部级次编码的每个段的长度不够用,则重新设置新规则。
在步骤410,根据新规则,全部重新生成内部级次编码。
接下来详细说明该实施例的内部级次编码处理工具功能模块304的作用。内部级次编码处理工具功能模块304主要解决在下面几个处理场景下,如何生成新的内部级次编码。本实施例中的技术方案主要采用SQL语句,借助数据库的能力实现内部级次编码的生成,基于这种方法能够减少数据的传递,简化应用程序的处理过程。为了更清楚本发明的技术方案,举例如下,假定主要处理的业务对象为BusinessEntity1,该实体有个内部级次编码树型innercode,在数据库中存在一个表:t_be1,表结构的创建SQL语句(以SQL Server数据库的语法为例)为:
CREATE TABLE t_be1(
[id][varchar](20)NOT NULL,
[pid][varchar](20)NOT NULL,
[code][varchar](200)NULL,
[name][varchar](200)NULL,
[sequence][varchar](20)NULL,
[innercode][varchar](100)NULL,
)
其中id为表的PK,pid为对象的ParentID,code为业务对象的编码,名称为业务对象的名称,sequence为该对象在其parentid下面排列的次序,innercode为业务对象的内部级次编码。
下面的处理已上面的业务实体BusinessEntity1,以及其对应的数据库表t_be1的字段为例进行描述,假定在功能模块302中设置的业务对象的编码规则为:每段长度为2,则处理方法描述如下:
1)新增加业务对象,如何生成内部级次编码。
假如该实体还没有业务数据,则初始状态,新增的数据id=‘01’,假定数据按照id排序,由于第一个对象没有父对象,所以其pid=|‘0’。其具体处理步骤如下:
第一步,产生Sequence。SQL语句如下
update t_be1 set sequence=(selectright(′00′+convert(varchar,count(*)),2)from t_be1as b
where t_be1.pid=b.pid and b.id<=t_be1.id)where id=′01′
第二步,根据Sequence,产生内部编码。SQL语句如下:
update t_be1 set t_be1.innercode=t.innercode from(select id,rtrim(sequence)innercode from t_be1)as t where t_be1.id=t.id andt_be1.id=′01′
假如该对象已存在数据,假定当前业务对象位为‘01’,则增加的新节点为‘02’,新节点的父节点位‘01’,则通用的生成innercode的处理步骤如下:
第一步:产生新的Sequence。SQL语句如下:
update t_be1set sequence=(select right(′00′+convert(varchar,count(*)),2)from t_be1 as b
where t_be1.pid=b.pid and b.id<=t_be1.id)where t_be1.innercode like′01%′
第二步,根据上级节点,产生排序的内部级次码:update t_be1 set t_be1.innercode=t.innercode from(select a.id id,case when b.id is null then″else rtrim(b.sequence)end+rtrim(a.sequence)innercode from t_be1 as a left join t_be1as b on a.pid=b.ID)as t where t_be1.id=t.id and t_be1.innercode like′01%′
如果按名称排序生成sequence,则SQL语句调整如下:
update t_be1 set sequence=(select right(′00′+convert(varchar,count(*)),2)from t_be1 as b
where t_be1.pid=b.pid and b.name<=t_be1.name)
2)删除一个业务对象,如何产生内部级次编码。
删除业务对象的情况也比较简单,记录当前节点的父节点的innercode,或根据父节点的id,查找到父节点的innercode。具体处理步骤如下:
第一步,处理当前节点的父节点下的所有Sequence;update t_be1 set sequence=(select right(′00′+convert(varchar,count(*)),2)from t_be1as b
where t_be1.pid=b.pid and b.id<=t_be1.id)where t_be1.innerinnercodelike′父节点的innercode′
第二步,根据上级节点,产生排序的内部级次码,处理过程如下:
首选根据父节点的innercode,父节点下数据表中最长的层次-父节点所在的层次,两个层次的差值再加1,用于构造产生内部级次编码的SQL语句:根据层次生成left join的层次,以及case语句的层次。
假定目前节点是innercode=‘010101’的节点,其父节点的innercode=‘0101’,‘0101’的所有下级节点的innercode最长的是‘01010201’。则父节点的innercode的层次为2,最长的层次是4。根据这些要求,按照处理过程构造的SQL语句示例如下:update t_be1 set t_be1.innercode=substring(′0101′,1,len(′0101′)-2)+t.innercode from(select a.id id,
case when c.id is null then″else rtrim(c.sequence)end+
case when b.id is null then″else rtrim(b.sequence)end+
rtrim(a.sequence)innercodefrom t_be1as a left Join(t_be1 as b left Join t_be1as c on b.pid=c.ID andc.innercode like′0101′+′%′)on a.pid=b.ID and b.innercode like′0101%′where a.innercode like′0101′+′%′)as t where t_be1.id=t.id andt_be1.innercode like′0101′+′%′
根据上面产生的SQL语句将能够恰好重新生成删除节点的父节点的所有下级节点的对象数据的内部级次编码innercode的值。
3)插入一个节点,如何处理受影响的innercode。
基于1)和2)的处理方法,插入节点的处理相对比较简单:先按1)中的增加处理新插入的节点,按照2)中的方法处理本节点下的所有节点的innercode。
4)移动一个节点,如何处理受影响的innercode。
移动一个节点,需要记录移动前后位置的两个父节点的信息。移动前的处理使用2)的方法。移动后的处理采用3)中的方法。
上面的操作以工具类的方式,提供增加、删除、插入、移动等服务接口,在工具类中封装上面提到的处理生成内部级次编码的方法。
最后,说明本实施例中的基于内部级次编码的查询服务功能模块308和具有内部级次编码的业务对象的功能模块306的使用。
在用户修改具有树型关系业务实体的业务对象的上下级关系、修改应用业务对象排序的属性值时,需要同时调用内部级次编码处理工具功能模块304中对应的新增、删除、插入、移动等生成内部级次编码的服务。这样就能够在内部以编码的方式自动记载数据的上下级关系(或树型关系)。
在实现了上面的开发工作后,每个此类业务实体可以提供通过内部级次编码提供的业务服务。例如,可以提供LoadData()方法,Load数据时按照内部级次编码:“…order by innercode”来准备数据,这样就可以按照深度优先顺序的遍历方法,一次构造出树型模型;可以提供包含下级数据的查询方法GetSubDatabyID(B0,bo),基于内部级次编码,通过简单的条件SQL语句”…whereinnercode like ‘当前对象的innercode’+’%’”即可实现。
下面简单举例来说明基于内部级次编码的查询服务功能模块308的服务接口的内部实现:基于业务对象的内部级次编码来查询需要的业务数据将比较简单。例如需要访问innercode=‘0101’下的所有数据:
Select*from t_be1 where innercode like‘0101%’
假如使用对象的id作为条件进行查询,则使用如下的SQL语句:
Select*from t_be1 where innercode like(select innercode fromt_be1where id=′03′)+′%′即可完成数据的查询。
以上,参考图1至图4的详细说明,通过上述技术方案,可以实现一种生成业务对象的内部级次编码的方法和系统,能够非常方便地用于业务对象具有树型关系的业务实体。该系统具有良好的扩展能力,软件的开发人员、实施人员可以根据应用的需要,灵活地对业务实体的内部级次编码的每段长度进行定制,而具有内部级次编码的业务实体能够方便地提供一些业务场景的使用,如查询中的条件定义时可包含下级;能够高效地实现业务对象数据的加载;能够简化程序的开发,使用内部级次编码,通过一次遍历即可完成对整棵树的构造等。
本发明的生成内部级次编码的方法,采用基于SQL的方式解决问题,充分利用了数据库的处理能力,不仅简化了软件的开发,提高了程序的效率,而且扩展了系统的应用场景,对于管理软件中那些具有上下级关系的业务实体来说具有较好的应用价值。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。