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

第一版排序

操作机构排序

200.png{ thumbnail="true" style="block" }

在机构管理中,进行机构拖动,然后进行数据存储,存储时,按照同父节点进行顺序从(1到n进行顺序增加)。

操作人员排序

201.png{ thumbnail="true" style="block" }

需要注意的是,不同的职务,如果职务属于不同的科室,则展示的排序顺序也会不一样。

每一个人在每一个有职务的机构的排序均不一样,当然在整体来看,人员的集体内排序号以“按照机构最高的职务,排序靠前的顺序”进行展示。

例如: 202.png{ thumbnail="true" style="block" }

余某某,在“宁波市人民政府”和“宁波市教育局”两个单位任职,分别如下

| ---- | ---- | ---- | | 机构名 | 机构码 | 排序号 | | 宁波市人民政府 | 001.001.002 | 4 | | 宁波市教育局 | 001.001.002.004 | 1 |

这是这个人员,由于在“宁波市人民政府”任职,编码或者层次深度更小,则最终人员的集体内排序应为

TORGID = 001.001.002SORTID = 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}';
    
    • 数据查询

      204.png { 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 -- 无效字段