You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
3.2 KiB
3.2 KiB
第一版排序
操作机构排序
{ thumbnail="true" style="block" }
在机构管理中,进行机构拖动,然后进行数据存储,存储时,按照同父节点进行顺序从(1到n进行顺序增加)。
操作人员排序
{ thumbnail="true" style="block" }
需要注意的是,不同的职务,如果职务属于不同的科室,则展示的排序顺序也会不一样。
每一个人在每一个有职务的机构的排序均不一样,当然在整体来看,人员的集体内排序号以“按照机构最高的职务,排序靠前的顺序”进行展示。
例如: { thumbnail="true" style="block" }
余某某,在“宁波市人民政府”和“宁波市教育局”两个单位任职,分别如下
| ---- | ---- | ---- | | 机构名 | 机构码 | 排序号 | | 宁波市人民政府 | 001.001.002 | 4 | | 宁波市教育局 | 001.001.002.004 | 1 |
这是这个人员,由于在“宁波市人民政府”任职,编码或者层次深度更小,则最终人员的集体内排序应为
TORGID
= 001.001.002
和 SORTID
= 4
其实主要是针对“机构码”的计算,寻找深度小的任职单位。
那么同样任职深度的单位,如何进行计算操作呢!这是一个比较复杂的问题。按照原则,如果相同深度机构, 应该在比较是否同父节点,同父节点,按照机构排序码进行比较,不是同父父节点,按照上级节点谁靠前,先排谁。
操作人员算法
这里简化了后面比较复杂的情况。以 SQL 函数的方式进行数据比较查询性能上可能存在局限。
-
数据更新
-- 定义函数 create function get_torgid(V0000 varchar(120)) returns varchar(199) begin DECLARE FunctionResult VARCHAR(199); select min(a0201b) into FunctionResult from (select a02.A0201B from a02, b01 where a02.a0000 = V0000 and b01.b0111 = a02.a0201b and a02.a0281 = 'true' and a0201b <> '-1' order by b01.sortid) a02 LIMIT 1; return FunctionResult; end; -- 在基本数据发生保存时,即人员集体内排序或人员职务信息发生保存时。 -- 更新人员整体的集体内排序标识 update a01 set a01.torgid= get_torgid(a0000) where a0000 = '${a0000}'; update a01 set a01.torder= lpad( ifnull( (select max(a0225) from a02 where a01.a0000 = a02.a0000 and a02.a0281 = 'true' and a01.torgid=a02.a0201b) ,'1') ,5,'0') where a01.a0000 = '${a0000}';
-
数据查询
{ thumbnail="true" style="block" }
这里虽然能部分解决机构排序号的问题,但是上级单位的排序号还是会影响整体排序。
在手动排序功能下,默也是认排序方式,
select a01.a0000, 'xxx' sessionid from A01 a01 order by length(torgid), -- 为了描述深度 (select concat(LPAD(SORTID, 6, 0), torgid) from b01 where B0111=torgid) asc, -- 为了拼接机构排序码 torder asc, -- 人员排序号 a0000 asc -- 无效字段
-