@ -1,9 +1,11 @@
package administrativeorganization
package administrativeorganization
import (
import (
"fmt"
"hr_server/models"
"hr_server/models"
"hr_server/overall"
"hr_server/overall"
"hr_server/overall/overallhandle"
"hr_server/overall/overallhandle"
"sort"
"strconv"
"strconv"
"time"
"time"
@ -275,6 +277,7 @@ func (o *OrganizationApi) GovThree(c *gin.Context) {
idInt64 , _ := strconv . ParseInt ( requestData . IdStr , 10 , 64 )
idInt64 , _ := strconv . ParseInt ( requestData . IdStr , 10 , 64 )
requestData . Id = idInt64
requestData . Id = idInt64
}
}
fmt . Printf ( "requestData---------------->%v\n" , requestData )
var govMap overallhandle . MenuList
var govMap overallhandle . MenuList
// gormDb := overall.CONSTANT_DB_HR.Model(&models.AdministrativeOrganization{}).Select("administrative_organization.*,aot.name as classname,aot.level").Joins("left join administrative_organization_type as aot on aot.id = administrative_organization.organization_type").Where("administrative_organization.`state` IN ?", []int{1, 2}).Where("administrative_organization.id NOT IN ?", []int{312, 293, 305, 306, 307})
// gormDb := overall.CONSTANT_DB_HR.Model(&models.AdministrativeOrganization{}).Select("administrative_organization.*,aot.name as classname,aot.level").Joins("left join administrative_organization_type as aot on aot.id = administrative_organization.organization_type").Where("administrative_organization.`state` IN ?", []int{1, 2}).Where("administrative_organization.id NOT IN ?", []int{312, 293, 305, 306, 307})
gormDb := overall . CONSTANT_DB_HR . Model ( & models . AdministrativeOrganization { } ) . Select ( "administrative_organization.*,aot.name as classname,aot.level" ) . Joins ( "left join administrative_organization_type as aot on aot.id = administrative_organization.organization_type" ) . Where ( "administrative_organization.`state` = ?" , 1 )
gormDb := overall . CONSTANT_DB_HR . Model ( & models . AdministrativeOrganization { } ) . Select ( "administrative_organization.*,aot.name as classname,aot.level" ) . Joins ( "left join administrative_organization_type as aot on aot.id = administrative_organization.organization_type" ) . Where ( "administrative_organization.`state` = ?" , 1 )
@ -292,6 +295,7 @@ func (o *OrganizationApi) GovThree(c *gin.Context) {
}
}
// fmt.Printf("id==========>%v", govMap)
// fmt.Printf("id==========>%v", govMap)
// govMap.GovRecursion(requestData.Id, 0)
// govMap.GovRecursion(requestData.Id, 0)
fmt . Printf ( "govAry---------------->%v\n" , requestData . Id )
govMapThree := overallhandle . GovThreeList ( requestData . Id , govMap )
govMapThree := overallhandle . GovThreeList ( requestData . Id , govMap )
overallhandle . Result ( 0 , govMapThree , c )
overallhandle . Result ( 0 , govMapThree , c )
}
}
@ -377,3 +381,349 @@ func getOrgIdList(orgId int64) (orgIdList []int64) {
}
}
return
return
}
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2022 - 11 - 16 14 : 04 : 17
@ 功能 :
@ 参数
#
@ 返回值
#
* /
func ( o * OrganizationApi ) GovThreeAboutMan ( c * gin . Context ) {
var requestData OrgAndMAnThreeType
c . ShouldBindJSON ( & requestData )
// if requestData.Id == "" {
// overallhandle.Result(101, requestData, c, "行政类别Id不能为空!")
// return
// }
//获取行政组织
var orgList [ ] models . OrgContType
gormDb := overall . CONSTANT_DB_HR . Where ( "`state` = ? " , 1 )
if requestData . All == 0 {
requestData . Id = "312"
gormDb = gormDb . Where ( "`id` NOT IN ?" , [ ] int { 312 , 293 , 305 , 306 , 307 } )
}
if requestData . Level != 0 {
gormDb = gormDb . Where ( "`level` <= ?" , requestData . Level )
}
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
}
// overallhandle.Result(0, pageSize, c)
// return
var sendDataList [ ] OrgAndPeople //组装分组信息
var allOrgAndPeople synProReadData
for i , v := range orgList {
var sendDataCont OrgAndPeople
sendDataCont . Id = strconv . FormatInt ( v . Id , 10 ) //行政组织Id或人员Key
sendDataCont . Name = v . Name //行政组织名称或人员名称
sendDataCont . Number = v . Number //行政组织编号或人员编号
sendDataCont . OrgId = strconv . FormatInt ( v . Id , 10 ) //行政组织ID
// sendDataCont.Icon = "" //行政组织头像或人员头像
sendDataCont . ParentId = strconv . FormatInt ( v . Superior , 10 ) //上级
sendDataCont . IsMan = 1 //是部门还是个人(1:行政组织;2:人员)
sendDataCont . Sort = 2
if ( i + 1 ) % pageSize == 0 {
sendDataList = append ( sendDataList , sendDataCont )
synPro . Add ( 1 )
go allOrgAndPeople . GetOrgAboutPeople ( sendDataList ) //协程处理行政组织下的人员信息
sendDataList = [ ] OrgAndPeople { }
// fmt.Printf("执行一次---------->%v\n", i)
} else {
sendDataList = append ( sendDataList , sendDataCont )
}
allOrgAndPeople . OrgAndPeopleList = append ( allOrgAndPeople . OrgAndPeopleList , sendDataCont )
}
if len ( sendDataList ) > 0 { //判断盈余分组数据
synPro . Add ( 1 )
go allOrgAndPeople . GetOrgAboutPeople ( sendDataList )
}
synPro . Wait ( )
// fmt.Printf("%v\n", len(allOrgAndPeople.OrgAndPeopleList))
for oi , _ := range allOrgAndPeople . OrgAndPeopleList {
allOrgAndPeople . OrgAndPeopleList [ oi ] . Identify = oi + 1
}
idInt , _ := strconv . ParseInt ( requestData . Id , 10 , 64 )
sort . Slice ( allOrgAndPeople . OrgAndPeopleList , func ( i , j int ) bool {
return allOrgAndPeople . OrgAndPeopleList [ i ] . Sort < allOrgAndPeople . OrgAndPeopleList [ j ] . Sort
} )
// var outputDataList []OrgAndPeople
fmt . Printf ( "idInt------------------>%v\n" , idInt )
govMapThree := OrgAndMAnThree ( idInt , allOrgAndPeople . OrgAndPeopleList )
outputDataAry := overallhandle . MapOut ( )
outputDataAry [ "three" ] = govMapThree
outputDataAry [ "list" ] = allOrgAndPeople . OrgAndPeopleList
overallhandle . Result ( 0 , outputDataAry , c )
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2022 - 11 - 16 15 : 23 : 41
@ 功能 : 递归人员行政树
@ 参数
#
@ 返回值
#
* /
func OrgAndMAnThree ( parentId int64 , govAry [ ] OrgAndPeople ) [ ] OrgAndPeopleThree {
orgAndMAnMap := [ ] OrgAndPeopleThree { }
for _ , v := range govAry {
// var zhucont govThree
parentIdInt , _ := strconv . ParseInt ( v . ParentId , 10 , 64 )
if parentIdInt == parentId {
orgIdInt , _ := strconv . ParseInt ( v . OrgId , 10 , 64 )
child := OrgAndMAnThree ( orgIdInt , govAry )
var node OrgAndPeopleThree
node . Id = v . Id //行政组织Id或人员Key
node . Name = v . Name //行政组织名称或人员名称
node . Number = v . Number //行政组织编号或人员编号
node . Icon = v . Icon //行政组织头像或人员头像
node . ParentId = v . ParentId //上级
node . OrgId = v . OrgId //所属行政组织
node . IsMan = v . IsMan //是部门还是个人(1:行政组织;2:人员)
node . Child = child
node . Sort = v . Sort
node . Identify = v . Identify
orgAndMAnMap = append ( orgAndMAnMap , node )
}
}
return orgAndMAnMap
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2022 - 11 - 16 14 : 41 : 26
@ 功能 : 获取行政组织相关人员
@ 参数
#
@ 返回值
#
* /
func ( s * synProReadData ) GetOrgAboutPeople ( orgList [ ] OrgAndPeople ) {
defer synPro . Done ( )
countList := len ( orgList )
if countList > 0 {
var orgId [ ] string
for i := 0 ; i < countList ; i ++ {
if overallhandle . IsInTrue [ string ] ( orgList [ i ] . Id , orgId ) == false {
orgId = append ( orgId , orgList [ i ] . Id )
}
}
var peopleList [ ] models . PersonArchives
err := overall . CONSTANT_DB_HR . Model ( & models . PersonArchives { } ) . Select ( "`key`,`number`,`name`,`icon`,`admin_org`" ) . Where ( "`state` = ? AND `admin_org` IN ? AND `emp_type` BETWEEN ? AND ? " , 1 , orgId , 1 , 10 ) . Find ( & peopleList ) . Error
if err == nil {
if len ( peopleList ) > 0 {
for _ , v := range peopleList {
s . MakePeopleToOrg ( v , orgList )
}
}
}
}
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2022 - 11 - 16 15 : 05 : 40
@ 功能 : 组装人员与行政组织的关联信息
@ 参数
#
@ 返回值
#
* /
func ( s * synProReadData ) MakePeopleToOrg ( manCont models . PersonArchives , orgList [ ] OrgAndPeople ) {
for _ , v := range orgList {
orgIdStr := strconv . FormatInt ( manCont . AdminOrg , 10 )
if v . Id == orgIdStr {
var sendDataCont OrgAndPeople
sendDataCont . Id = strconv . FormatInt ( manCont . Key , 10 ) //行政组织Id或人员Key
sendDataCont . Name = manCont . Name //行政组织名称或人员名称
sendDataCont . Number = manCont . Number //行政组织编号或人员编号
sendDataCont . OrgId = "-1" //行政组织ID
sendDataCont . Icon = manCont . Icon //行政组织头像或人员头像
sendDataCont . ParentId = v . Id //上级
sendDataCont . IsMan = 2 //是部门还是个人(1:行政组织;2:人员)
sendDataCont . Sort = 1
sendDataCont . AllName = fmt . Sprintf ( "%v(%v)" , manCont . Name , manCont . Number )
s . OrgAndPeopleList = append ( s . OrgAndPeopleList , sendDataCont )
}
}
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2022 - 11 - 18 14 : 28 : 19
@ 功能 : 角色组织与人员搜索列表
@ 参数
#
@ 返回值
#
* /
func ( o * OrganizationApi ) SearchOrgAndPeople ( c * gin . Context ) {
var requestData NameVal
err := c . ShouldBindJSON ( & requestData )
if err != nil {
overallhandle . Result ( 107 , err , c )
return
}
if requestData . Name == "" {
overallhandle . Result ( 107 , err , c )
return
}
var sendPeopleContList [ ] OrgAndPeople
var sendOrgContList [ ] OrgAndPeople
//搜索人
var peopleList [ ] models . PersonArchives
gormDbMan := overall . CONSTANT_DB_HR . Model ( & models . PersonArchives { } ) . Select ( "`key`,`number`,`name`,`icon`,`admin_org`" ) . Where ( "`state` = ? AND `emp_type` BETWEEN ? AND ? " , 1 , 1 , 10 )
if requestData . Name != "" {
gormDbMan = gormDbMan . Where ( "`name` LIKE ?" , "%" + requestData . Name + "%" )
}
Identify := 1
err = gormDbMan . Find ( & peopleList ) . Error
if err == nil {
for _ , v := range peopleList {
var sendDataCont OrgAndPeople
sendDataCont . Id = strconv . FormatInt ( v . Key , 10 ) //行政组织Id或人员Key
sendDataCont . Name = v . Name //行政组织名称或人员名称
sendDataCont . Number = v . Number //行政组织编号或人员编号
sendDataCont . OrgId = "-1" //行政组织ID
sendDataCont . Icon = v . Icon //行政组织头像或人员头像
sendDataCont . ParentId = strconv . FormatInt ( v . AdminOrg , 10 ) //上级
sendDataCont . IsMan = 2 //是部门还是个人(1:行政组织;2:人员)
sendDataCont . Sort = 1
sendDataCont . Identify = Identify
sendDataCont . AllName = fmt . Sprintf ( "%v(%v)" , v . Name , v . Number )
sendPeopleContList = append ( sendPeopleContList , sendDataCont )
Identify ++
}
}
//搜索行政组织
var orgList [ ] models . OrgContType
gormDbOrg := overall . CONSTANT_DB_HR . Model ( & models . OrgContType { } ) . Select ( "`id`,`numbe`,`name`,`superior`,`level`" ) . Where ( "`state` = ?" , 1 )
if requestData . Name != "" {
gormDbOrg = gormDbOrg . Where ( "`name` LIKE ?" , "%" + requestData . Name + "%" )
}
err = gormDbOrg . Find ( & orgList ) . Error
if err == nil {
for _ , v := range orgList {
sendName := GetAllOrgName ( v . Id , v . Level , v . Name )
var sendDataOrgCont OrgAndPeople
sendDataOrgCont . Id = strconv . FormatInt ( v . Id , 10 ) //行政组织Id或人员Key
sendDataOrgCont . Name = v . Name //行政组织名称或人员名称
sendDataOrgCont . Number = v . Number //行政组织编号或人员编号
sendDataOrgCont . OrgId = strconv . FormatInt ( v . Id , 10 ) //行政组织ID
// sendDataOrgCont.Icon = "" //行政组织头像或人员头像
sendDataOrgCont . ParentId = strconv . FormatInt ( v . Superior , 10 ) //上级
sendDataOrgCont . IsMan = 1 //是部门还是个人(1:行政组织;2:人员)
sendDataOrgCont . Sort = 2
sendDataOrgCont . AllName = sendName
sendDataOrgCont . Identify = Identify
sendOrgContList = append ( sendOrgContList , sendDataOrgCont )
Identify ++
}
}
outPutData := overallhandle . MapOut ( )
outPutData [ "people" ] = sendPeopleContList
outPutData [ "org" ] = sendOrgContList
overallhandle . Result ( 0 , outPutData , c )
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2022 - 11 - 18 15 : 07 : 18
@ 功能 : 获取名称
@ 参数
# id 行政组织ID
# level 等级
# name 名称
@ 返回值
#
* /
func GetAllOrgName ( id , level int64 , name string ) ( allName string ) {
if level <= 3 {
allName = name
} else {
_ , companyId , departmentId , sunDepartId , _ := overallhandle . GetOrgStructure ( id )
var comCont models . AdministrativeOrganization
comCont . GetCont ( map [ string ] interface { } { "`id`" : companyId } , "`name`" )
switch level {
case 4 :
allName = fmt . Sprintf ( "%v / %v" , name , comCont . Name )
case 5 :
var mainDepartCont models . AdministrativeOrganization
mainDepartCont . GetCont ( map [ string ] interface { } { "`id`" : departmentId } , "`name`" )
allName = fmt . Sprintf ( "%v / %v / %v" , name , mainDepartCont . Name , comCont . Name )
case 6 :
if departmentId != sunDepartId {
var mainDepartCont models . AdministrativeOrganization
mainDepartCont . GetCont ( map [ string ] interface { } { "`id`" : departmentId } , "`name`" )
var sunDepartCont models . AdministrativeOrganization
sunDepartCont . GetCont ( map [ string ] interface { } { "`id`" : sunDepartId } , "`name`" )
allName = fmt . Sprintf ( "%v / %v / %v / %v" , name , sunDepartCont . Name , mainDepartCont . Name , comCont . Name )
} else {
if departmentId != companyId {
var mainDepartCont models . AdministrativeOrganization
mainDepartCont . GetCont ( map [ string ] interface { } { "`id`" : departmentId } , "`name`" )
allName = fmt . Sprintf ( "%v / %v / %v" , name , mainDepartCont . Name , comCont . Name )
} else {
allName = fmt . Sprintf ( "%v / %v" , name , comCont . Name )
}
}
default :
allName = name
}
}
return
}