8 changed files with 320 additions and 23 deletions
@ -0,0 +1,183 @@ |
|||
package administrativeorganization |
|||
|
|||
import ( |
|||
"hr_server/models" |
|||
"hr_server/overall" |
|||
"hr_server/overall/overallhandle" |
|||
"sort" |
|||
|
|||
"strconv" |
|||
|
|||
"github.com/gin-gonic/gin" |
|||
) |
|||
|
|||
/* |
|||
* |
|||
@ 作者: 秦东 |
|||
@ 时间: 2023-02-24 09:36:28 |
|||
@ 功能: 获取行政组织与岗位树 |
|||
@ 参数 |
|||
|
|||
# |
|||
|
|||
@ 返回值 |
|||
|
|||
# |
|||
|
|||
@ 方法原型 |
|||
|
|||
# |
|||
*/ |
|||
func (o *OrganizationApi) GetOrgAndPostThree(c *gin.Context) { |
|||
var requestData OrgAndMAnThreeType |
|||
c.ShouldBindJSON(&requestData) |
|||
//获取行政组织
|
|||
var orgList []models.OrgContType |
|||
gormDb := overall.CONSTANT_DB_HR.Where("`state` = ? ", 1) |
|||
if requestData.All == 0 { |
|||
// requestData.Id = "309"
|
|||
gormDb = gormDb.Where("`id` NOT IN ?", []int{312, 293, 305, 306, 307}) |
|||
} |
|||
if requestData.Level != 0 { |
|||
gormDb = gormDb.Where("`level` <= ?", requestData.Level) |
|||
} |
|||
// departmentId := overallhandle.RecursionOrgLeveEs(282, 282, 3)
|
|||
// overallhandle.Result(2555646, departmentId, c)
|
|||
// return
|
|||
|
|||
err := gormDb.Find(&orgList).Error |
|||
if err != nil { |
|||
overallhandle.Result(107, err, c) |
|||
return |
|||
} |
|||
var total int64 |
|||
totalErr := gormDb.Count(&total).Error |
|||
if totalErr != nil { |
|||
total = 0 |
|||
} |
|||
pageSize := 1 |
|||
//计算分协程数据基数
|
|||
switch { |
|||
case total > 10 && total <= 10000: |
|||
pageSize = 100 |
|||
case total > 10000: |
|||
pageSize = 1000 |
|||
default: |
|||
pageSize = 1 |
|||
} |
|||
var contList []OutPutOrgAndPost |
|||
var syncOrgToPost OrgAndPostSync |
|||
for i, v := range orgList { |
|||
var sendCont OutPutOrgAndPost |
|||
sendCont.Id = strconv.FormatInt(v.Id, 10) |
|||
sendCont.Number = v.Number |
|||
sendCont.Name = v.Name |
|||
sendCont.Superior = v.Superior |
|||
sendCont.Attribute = 1 |
|||
sendCont.Sort = 1 |
|||
sendCont.OrgId = strconv.FormatInt(v.Id, 10) |
|||
if (i+1)%pageSize == 0 { |
|||
contList = append(contList, sendCont) |
|||
synProes.Add(1) |
|||
go syncOrgToPost.GetPostInfoList(contList) |
|||
contList = []OutPutOrgAndPost{} |
|||
} else { |
|||
contList = append(contList, sendCont) |
|||
} |
|||
} |
|||
if len(contList) > 0 { //判断盈余分组数据
|
|||
synProes.Add(1) |
|||
go syncOrgToPost.GetPostInfoList(contList) |
|||
} |
|||
synProes.Wait() |
|||
allOrgAndPostContList := syncOrgToPost.readDataLock() |
|||
sort.Slice(allOrgAndPostContList, func(i, j int) bool { |
|||
return allOrgAndPostContList[i].Sort < allOrgAndPostContList[j].Sort |
|||
}) |
|||
sort.Slice(allOrgAndPostContList, func(i, j int) bool { |
|||
return allOrgAndPostContList[i].Superior < allOrgAndPostContList[j].Superior |
|||
}) |
|||
var allNumber []string |
|||
for _, v := range allOrgAndPostContList { |
|||
allNumber = append(allNumber, v.Number) |
|||
} |
|||
sendList := OrgAndPostThreeList(requestData.Id, allOrgAndPostContList) |
|||
outputDataAry := overallhandle.MapOut() |
|||
outputDataAry["count"] = len(allOrgAndPostContList) |
|||
outputDataAry["list"] = sendList |
|||
outputDataAry["allnumber"] = allNumber |
|||
overallhandle.Result(0, outputDataAry, c) |
|||
} |
|||
|
|||
// 合成树形结构
|
|||
func OrgAndPostThreeList(superiorId string, contList []OutPutOrgAndPost) *[]OutPutOrgAndPostLoop { |
|||
three := []OutPutOrgAndPostLoop{} |
|||
for _, v := range contList { |
|||
supIdStr := strconv.FormatInt(v.Superior, 10) |
|||
if superiorId == supIdStr { |
|||
child := OrgAndPostThreeList(v.OrgId, contList) |
|||
var node OutPutOrgAndPostLoop |
|||
node.Id = v.Id |
|||
node.Number = v.Number |
|||
node.Name = v.Name |
|||
node.Superior = v.Superior |
|||
node.Attribute = v.Attribute |
|||
node.Sort = v.Sort |
|||
node.OrgId = v.OrgId |
|||
node.OrgName = v.OrgName |
|||
node.DepartId = v.DepartId |
|||
node.DepartName = v.DepartName |
|||
node.Child = child |
|||
three = append(three, node) |
|||
} |
|||
} |
|||
return &three |
|||
} |
|||
|
|||
// 获取岗位列表
|
|||
func (o *OrgAndPostSync) GetPostInfoList(contList []OutPutOrgAndPost) { |
|||
o.mutext.Lock() |
|||
defer o.mutext.Unlock() |
|||
|
|||
var orgId []string |
|||
for _, v := range contList { |
|||
if overallhandle.IsInTrue[string](v.Id, orgId) == false { |
|||
orgId = append(orgId, v.Id) |
|||
o.orgAndPostList = append(o.orgAndPostList, v) |
|||
} |
|||
} |
|||
if len(orgId) > 0 { |
|||
var postContList []models.Position |
|||
err := overall.CONSTANT_DB_HR.Model(&models.Position{}).Select("`id`,`number`,`name`,`administrative_organization`,`superior`").Where("`state` = 1 AND `administrative_organization` IN ?", orgId).Find(&postContList).Error |
|||
if err == nil { |
|||
for _, v := range postContList { |
|||
|
|||
// _, _, departmentId, _, _ := overallhandle.GetOrgStructure(v.AdministrativeOrganization)
|
|||
departmentId := overallhandle.RecursionOrgLeveEs(v.AdministrativeOrganization, v.AdministrativeOrganization, 3) |
|||
var departCont models.AdministrativeOrganization |
|||
departCont.GetCont(map[string]interface{}{"`id`": departmentId}, "`name`") |
|||
|
|||
var sendCont OutPutOrgAndPost |
|||
sendCont.Id = strconv.FormatInt(v.Id, 10) |
|||
sendCont.Number = v.Number |
|||
sendCont.Name = v.Name |
|||
sendCont.Superior = v.AdministrativeOrganization |
|||
sendCont.Attribute = 2 |
|||
sendCont.Sort = 2 |
|||
sendCont.OrgId = "-1" |
|||
sendCont.DepartId = strconv.FormatInt(departmentId, 10) |
|||
sendCont.DepartName = departCont.Name |
|||
if departmentId == v.AdministrativeOrganization { |
|||
sendCont.OrgName = departCont.Name |
|||
} else { |
|||
var orgCont models.AdministrativeOrganization |
|||
orgCont.GetCont(map[string]interface{}{"`id`": v.AdministrativeOrganization}, "`name`") |
|||
sendCont.OrgName = orgCont.Name |
|||
} |
|||
|
|||
o.orgAndPostList = append(o.orgAndPostList, sendCont) |
|||
} |
|||
} |
|||
} |
|||
synProes.Done() |
|||
} |
|||
Loading…
Reference in new issue