-
Notifications
You must be signed in to change notification settings - Fork 0
/
tools.go
103 lines (99 loc) · 2.3 KB
/
tools.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
package OrgCoreCore
//获取一组组织的最高一级别的一组
// 从一组组织ID中,抽取出最高层级的部分,并反馈
type ArgsGetTopOrg struct {
//一组组织ID
OrgIDList []int64
}
func GetTopOrg(args *ArgsGetTopOrg) []int64 {
//少于2个,直接反馈原始数据即可
if len(args.OrgIDList) < 2 {
return args.OrgIDList
}
//最高级别数据
var topDataList []FieldsOrg
//遍历数据
for _, vID := range args.OrgIDList {
if vID < 1 {
continue
}
vOrgData, err := GetOrg(&ArgsGetOrg{
ID: vID,
})
if err != nil {
continue
}
//在topDataList里面查询所有parentID,如果存在符合的,则剔除
//如果vOrgData.Parent不存在,则标记并加入
isFind := false
var newTopDataList []FieldsOrg
for _, v2 := range topDataList {
if v2.ParentID == vID {
continue
}
if vOrgData.ParentID == v2.ID {
isFind = true
}
newTopDataList = append(newTopDataList, v2)
}
if !isFind {
newTopDataList = append(newTopDataList, vOrgData)
}
topDataList = newTopDataList
}
//构建反馈数据集合
var res []int64
for _, v := range topDataList {
res = append(res, v.ID)
}
return res
}
//获取一组组织的最低级别
// 从一组组织ID中,抽取出最低级别的部分,并反馈
type ArgsGetLowOrg struct {
//一组组织ID
OrgIDList []int64
}
func GetLowOrg(args *ArgsGetLowOrg) []int64 {
//少于2个,直接反馈原始数据即可
if len(args.OrgIDList) < 2 {
return args.OrgIDList
}
//最低级别数据集合
var lowDataList []FieldsOrg
//遍历数据
for _, vID := range args.OrgIDList {
if vID < 1 {
continue
}
vOrgData, err := GetOrg(&ArgsGetOrg{
ID: vID,
})
if err != nil {
continue
}
//在lowDataList里面查询所有id,如果当前ID的上级ID存在,则剔除
//如果vOrgData.Parent不存在,则标记并加入
isFind := false
var newLowDataList []FieldsOrg
for _, v2 := range lowDataList {
if v2.ID == vOrgData.ParentID {
continue
}
if vOrgData.ID == v2.ParentID {
isFind = true
}
newLowDataList = append(newLowDataList, v2)
}
if !isFind {
newLowDataList = append(newLowDataList, vOrgData)
}
lowDataList = newLowDataList
}
//构建反馈数据集合
var res []int64
for _, v := range lowDataList {
res = append(res, v.ID)
}
return res
}