张献维
3 weeks ago
17 changed files with 302 additions and 6 deletions
After Width: | Height: | Size: 124 KiB |
After Width: | Height: | Size: 226 KiB |
After Width: | Height: | Size: 165 KiB |
After Width: | Height: | Size: 162 KiB |
After Width: | Height: | Size: 172 KiB |
After Width: | Height: | Size: 134 KiB |
@ -0,0 +1,3 @@ |
|||||
|
# 公务员文档 |
||||
|
|
||||
|
Start typing here... |
@ -0,0 +1,29 @@ |
|||||
|
# 增加第二版排序 |
||||
|
|
||||
|
## 思路 |
||||
|
|
||||
|
<tabs> |
||||
|
<tab title="⭐ 单字段进行顺序排序"> |
||||
|
<code-block lang="markdown"># 优势 |
||||
|
1. 查询只排序单字段 |
||||
|
# 缺点 |
||||
|
1. 同步更新的时候,可能无法全局进行更新处理 |
||||
|
2. 如果部分数据发生变更时或人员集体内排序号发生更新,需要全局进行数据更新操作</code-block> |
||||
|
</tab> |
||||
|
<tab title="双字段进行顺序排序"> |
||||
|
<code-block lang="markdown"># 优势 |
||||
|
1. 将部分字段进行更新时拆分 |
||||
|
# 缺点 |
||||
|
1. 但是无法解决部分上级节点顺序发生变化情况 |
||||
|
2. 如果部分数据发生变更时,需要全局进行数据更新操作</code-block> |
||||
|
</tab> |
||||
|
</tabs> |
||||
|
|
||||
|
主要针对如何处理上级机构如果存在重新排序时,应该如何进行处理。 |
||||
|
或者说"部分数据发生变更时",不进行全部数据更新操作。 |
||||
|
|
||||
|
## 结论 |
||||
|
|
||||
|
增加使用字段 `A01.A0157 is '前置遍历序号(废弃:人事关系所在机构代码)'` 的作用。 |
||||
|
|
||||
|
原意义已不使用。 |
@ -0,0 +1,16 @@ |
|||||
|
# 排序开始 |
||||
|
|
||||
|
对于公务员系统,应该存在排序,在队伍建设,人们总是习惯关注在某一个队伍行列中,自己所在行列的上司在职务执行中的排序。 |
||||
|
|
||||
|
排序是一种展示人员职务重要性和先后顺序的指标。 |
||||
|
|
||||
|
## 现状 |
||||
|
|
||||
|
当前公务员系统存在两大重要的排序字段(人员任职机构中的最高机构代码:`TORGID`,排序字段:`SORTID`),在顺序创建机构时, |
||||
|
对于 `TORGID` 是按照顺序进行排列展示的,就没有问题,人员就可以按照先机构后人员进行顺序展示,但是存在机构排序操作,即 |
||||
|
在操作机构,同一个父节点下的机构存在不同顺序(有异与顺序机构排序号)。 |
||||
|
|
||||
|
## 思考 |
||||
|
|
||||
|
按照查询习惯进行排序需要,又存在需要“先机构后人员”的查询需要,也有从机构到逐渐下探到底,然后逐个上浮查询兄弟机构, |
||||
|
逐渐到根,依次展示,专业名称叫“前置排序”。 |
@ -1,4 +1,4 @@ |
|||||
# 《%mainJob%》开始 |
# 校核开始 |
||||
|
|
||||
## 功能位置 |
## 功能位置 |
||||
|
|
@ -0,0 +1,61 @@ |
|||||
|
# 点击机构查询 |
||||
|
|
||||
|
## 功能操作 |
||||
|
|
||||
|
常规查询方式,点击机构进行数据查询。 |
||||
|
|
||||
|
## 基本操作 |
||||
|
|
||||
|
* 数据默认查询 |
||||
|
* 排序垃圾数据 |
||||
|
* 现职人员 |
||||
|
* 人员类别(公务员) |
||||
|
* 报表条件(如:统计中央一级) |
||||
|
* 统计范围(按照统计关系所在单位,,默认包含下级) |
||||
|
* 操作用户的权限脚本 |
||||
|
|
||||
|
```sql |
||||
|
-- 默认点击查询 |
||||
|
select tmp.a0000, '0A9E21F1CBA1276AE0743D859E081777' sessionid, |
||||
|
(@i := @i + 1) as i |
||||
|
from (select @i := 0) as it, |
||||
|
(select a01.a0000, '0A9E21F1CBA1276AE0743D859E081777' sessionid |
||||
|
from A01 a01 |
||||
|
where 1 = 1 |
||||
|
and a01.status != '4' -- 排序垃圾数据 |
||||
|
and a0163 = '1' -- 现职人员 |
||||
|
and exists(select 1 |
||||
|
from a02 a02, |
||||
|
competence_userdept cu |
||||
|
where cu.userid = '1' |
||||
|
and a02.A0201B = b0111 |
||||
|
and a01.a0000 = a02.a0000 |
||||
|
and a0281 = 'true' -- 职务输出 |
||||
|
and a02.a0201b like '001.001.007%') -- 权限脚本 |
||||
|
order by length(torgid), (select concat(LPAD(SORTID, 6, 0), torgid ) |
||||
|
from b01 where B0111 = torgid) asc, -- 数据排序 |
||||
|
torder asc, a0000 asc) tmp |
||||
|
|
||||
|
-- 点击“其他人员”机构 |
||||
|
select tmp.a0000, '0A9E21F1CBA1276AE0743D859E081777' sessionid, |
||||
|
(@i := @i + 1) as i |
||||
|
from (select @i := 0) as it, |
||||
|
(select a01.a0000, '0A9E21F1CBA1276AE0743D859E081777' sessionid |
||||
|
from A01 a01 |
||||
|
where 1 = 1 |
||||
|
and a01.status != '4' -- 排序垃圾数据 |
||||
|
and not exists (select 1 |
||||
|
from a02, |
||||
|
b01 |
||||
|
where a02.a0000 = a01.a0000 |
||||
|
and b0111 = a0201b |
||||
|
and a0281 = 'true' -- 职务输出 |
||||
|
and b0111 != '-1') -- 权限脚本 |
||||
|
and a0163 = '1' |
||||
|
order by length(torgid), (select concat(LPAD(SORTID, 6, 0), torgid) |
||||
|
from b01 where B0111 = torgid) asc, -- 数据排序 |
||||
|
torder asc, a0000 asc) tmp |
||||
|
|
||||
|
``` |
||||
|
|
||||
|
|
@ -0,0 +1,35 @@ |
|||||
|
# 直统开始 |
||||
|
|
||||
|
## 功能操作 |
||||
|
![3000.png](3000.png) |
||||
|
|
||||
|
在人员直统功能中,选择统计类别,统计报表,统计单位进行数据统计。 |
||||
|
|
||||
|
实际情况数据直统,是实时数据统计,统计数据不进行数据存储。 |
||||
|
|
||||
|
数据直统也是统计数据反方向进行统计验证。 |
||||
|
|
||||
|
## 数据直统 |
||||
|
|
||||
|
数据统计存在条件信息。 |
||||
|
|
||||
|
* 数据直统 |
||||
|
* 排序垃圾数据 |
||||
|
* 现职人员 |
||||
|
* 人员类别(公务员) |
||||
|
* 报表条件(如:统计中央一级) |
||||
|
* 统计范围(按照统计关系所在单位,,默认包含下级) |
||||
|
* 操作用户的权限脚本 |
||||
|
|
||||
|
```sql |
||||
|
SELECT a01.* |
||||
|
FROM A01 a01 |
||||
|
LEFT JOIN b01 a02 ON a02.b0111 = a01.a0195 |
||||
|
where a01.a0163 = '1' -- 现职人员 |
||||
|
and a01.status!='4' -- 排序垃圾数据 |
||||
|
and ( a0195 like '001.001.005%' ) -- 统计范围 |
||||
|
and a02.b0124 ='11' -- 报表条件(如:统计中央一级) |
||||
|
and a0160='1' -- 人员类别(公务员) |
||||
|
AND EXISTS(SELECT 1 FROM competence_userdept cu |
||||
|
WHERE cu.userid='1' AND A0195 = b0111 ) -- 权限脚本 |
||||
|
``` |
@ -0,0 +1,85 @@ |
|||||
|
# 第一版排序 |
||||
|
|
||||
|
## 操作机构排序 |
||||
|
![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 -- 无效字段 |
||||
|
``` |
@ -0,0 +1,48 @@ |
|||||
|
# 编制统计开始 |
||||
|
|
||||
|
## 现状 |
||||
|
|
||||
|
> 这里简化基本数据统计。 |
||||
|
|
||||
|
|
||||
|
* 统计情况 |
||||
|
|
||||
|
* 数据统计展示 |
||||
|
|
||||
|
![30001.png](30001.png) { thumbnail="true" style="block" } |
||||
|
|
||||
|
> 这里虽然数据按照遍历下级数据,但是速度还是可以满足基本数据统计。 |
||||
|
|
||||
|
* 数据统计标准 |
||||
|
|
||||
|
* 现职人员 |
||||
|
* 任职状态 |
||||
|
* 是否领导职务 |
||||
|
* 班子成员类别代码 = 指定值 |
||||
|
* 【隐藏】领导成员 a0201d = '1' (因为存在领导成员类型,默认是领导成员) |
||||
|
|
||||
|
* 脚本部分 |
||||
|
|
||||
|
```sql |
||||
|
-- 正职 |
||||
|
Select Count(distinct t.a0000) |
||||
|
From A02 t |
||||
|
where t.a0201e = '1' -- 班子成员类别代码(正职) |
||||
|
and t.a0201b in (select b0111 from b01 where (B0121 = '${b0111}' |
||||
|
and b0194 = '2') or B0111 = '${b0111}') -- 指定范围 |
||||
|
and t.a0219 = '1' -- 是否领导职务 |
||||
|
and t.a0255 = '1' -- 任职状态 |
||||
|
and exists (select 1 from a01 b where b.a0000 = t.a0000 |
||||
|
and b.a0163 = '1') -- 现职人员 |
||||
|
|
||||
|
-- 副职 |
||||
|
Select Count(distinct t.a0000) |
||||
|
From A02 t |
||||
|
where t.a0201e = '3' -- 班子成员类别代码(副职) |
||||
|
and t.a0201b in (select b0111 from b01 where (B0121 = '${b0111}' and |
||||
|
b0194 = '2') or B0111 = '${b0111}') -- 指定范围 |
||||
|
and t.a0219 = '1' -- 是否领导职务 |
||||
|
and t.a0255 = '1' -- 任职状态 |
||||
|
and exists (select 1 from a01 b where b.a0000 = t.a0000 |
||||
|
and b.a0163 = '1') -- 现职人员 |
||||
|
``` |
Loading…
Reference in new issue