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.
85 lines
3.2 KiB
85 lines
3.2 KiB
3 weeks ago
|
# 第一版排序
|
||
|
|
||
|
## 操作机构排序
|
||
|
![200.png](200.png){ thumbnail="true" style="block" }
|
||
|
|
||
|
在机构管理中,进行机构拖动,然后进行数据存储,存储时,按照同父节点进行顺序从(1到n进行顺序增加)。
|
||
|
|
||
|
## 操作人员排序
|
||
|
|
||
|
![201.png](201.png){ thumbnail="true" style="block" }
|
||
|
|
||
|
需要注意的是,不同的职务,如果职务属于不同的科室,则展示的排序顺序也会不一样。
|
||
|
|
||
|
每一个人在每一个有职务的机构的排序均不一样,当然在整体来看,人员的集体内排序号以“按照机构最高的职务,排序靠前的顺序”进行展示。
|
||
|
|
||
|
例如:
|
||
|
![202.png](202.png){ thumbnail="true" style="block" }
|
||
|
|
||
|
余某某,在“宁波市人民政府”和“宁波市教育局”两个单位任职,分别如下
|
||
|
|
||
|
| ---- | ---- | ---- |
|
||
|
| 机构名 | 机构码 | 排序号 |
|
||
|
| 宁波市人民政府 | 001.001.002 | 4 |
|
||
|
| 宁波市教育局 | 001.001.002.004 | 1 |
|
||
|
|
||
|
这是这个人员,由于在“宁波市人民政府”任职,编码或者层次深度更小,则最终人员的集体内排序应为
|
||
|
|
||
|
`TORGID` = `001.001.002` 和 `SORTID` = `4`
|
||
|
|
||
|
其实主要是针对“机构码”的计算,寻找深度小的任职单位。
|
||
|
|
||
|
那么同样任职深度的单位,如何进行计算操作呢!这是一个比较复杂的问题。按照原则,如果相同深度机构,
|
||
|
应该在比较是否同父节点,同父节点,按照机构排序码进行比较,不是同父父节点,按照上级节点谁靠前,先排谁。
|
||
|
|
||
|
## 操作人员算法
|
||
|
|
||
|
> 这里简化了后面比较复杂的情况。以 SQL 函数的方式进行数据比较查询性能上可能存在局限。
|
||
|
|
||
|
* 数据更新
|
||
|
```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](204.png) { thumbnail="true" style="block" }
|
||
|
|
||
|
> 这里虽然能部分解决机构排序号的问题,但是上级单位的排序号还是会影响整体排序。
|
||
|
|
||
|
在手动排序功能下,默也是认排序方式,
|
||
|
|
||
|
```sql
|
||
|
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 -- 无效字段
|
||
|
```
|