package administrativeorganization
import (
"encoding/json"
"fmt"
"hr_server/grocerystore"
"hr_server/models"
"hr_server/models/hrmodels"
"hr_server/overall"
"hr_server/overall/overallhandle"
"sort"
"strconv"
"time"
"github.com/gin-gonic/gin"
)
// 行政组织
func ( o * OrganizationApi ) GovList ( c * gin . Context ) {
var requestData govListType
c . ShouldBindJSON ( & requestData )
if requestData . Page < 0 {
requestData . Page = 1
}
if requestData . PageSize < 0 {
requestData . PageSize = 10
}
var govClassMap [ ] outGovCont
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" )
if requestData . State != 0 {
gormDb = gormDb . Where ( "administrative_organization.state = ?" , requestData . State )
} else {
gormDb = gormDb . Where ( "administrative_organization.state IN ?" , [ ] int { 1 , 2 } )
}
if requestData . Name != "" {
gormDb = gormDb . Where ( "(administrative_organization.name LIKE ? OR administrative_organization.abbreviation LIKE ?)" , "%" + requestData . Name + "%" , "%" + requestData . Name + "%" )
}
if requestData . Number != "" {
gormDb = gormDb . Where ( "administrative_organization.number LIKE ?" , "%" + requestData . Number + "%" )
}
if requestData . Level != 0 {
gormDb = gormDb . Where ( "aot.level = ?" , requestData . Level )
}
if requestData . GovClass != "" {
gormDb = gormDb . Where ( "administrative_organization.organization_type = ?" , requestData . GovClass )
}
if requestData . Superior != "" {
// gormDb = gormDb.Where("administrative_organization.superior = ?", requestData.Superior)
superiorInt , _ := strconv . ParseInt ( requestData . Superior , 10 , 64 )
var sunAry overallhandle . AllSunList [ int64 ]
sunAry . GetAllSunOrg ( superiorInt )
gormDb = gormDb . Where ( "administrative_organization.superior = ? OR administrative_organization.`id` IN ?" , requestData . Superior , sunAry . SunList )
}
var total int64
totalErr := gormDb . Count ( & total ) . Error
if totalErr != nil {
total = 0
}
errGorm := gormDb . Limit ( requestData . PageSize ) . Offset ( overallhandle . LimitPage ( requestData . Page , requestData . PageSize ) ) . Find ( & govClassMap ) . Error
if errGorm != nil {
overallhandle . Result ( 105 , errGorm , c )
} else {
overallhandle . ResultList ( 0 , requestData . Page , requestData . PageSize , total , int64 ( len ( govClassMap ) ) , govClassMap , c )
}
}
// 添加行政组织
func ( o * OrganizationApi ) AddGovCont ( c * gin . Context ) {
var requestData addGovInfo
err := c . ShouldBindJSON ( & requestData )
if err != nil {
overallhandle . Result ( 100 , err , c )
return
}
if requestData . Name == "" {
overallhandle . Result ( 101 , requestData . Name , c , "行政组织名称为空!" )
return
}
var superiorId int64 = 0
if requestData . Superior != "" {
superiorInt , _ := strconv . ParseInt ( requestData . Superior , 10 , 64 )
superiorId = superiorInt
} else {
overallhandle . Result ( 101 , requestData . Superior , c , "请指定归属上级!" )
return
}
var govClassId int64 = 0
if requestData . GovClass == "" {
overallhandle . Result ( 101 , requestData . GovClass , c , "请指定归属行政组织类型!" )
return
} else {
govClassIdInt , _ := strconv . ParseInt ( requestData . GovClass , 10 , 64 )
govClassId = govClassIdInt
}
// if requestData.WechatId == 0 {
// requestData.WechatId = 1
// }
var name string
judgeErr := overall . CONSTANT_DB_HR . Model ( & models . AdministrativeOrganization { } ) . Select ( "`name`" ) . Where ( "`organization_type` IN ? AND `name` = ?" , [ ] int { 1 , 2 } , requestData . Name ) . First ( & name ) . Error
if judgeErr == nil {
overallhandle . Result ( 103 , name , c )
return
}
var saveData models . AdministrativeOrganization
saveData . Name = requestData . Name
saveData . Superior = superiorId
saveData . OrganizationType = govClassId
saveData . Abbreviation = requestData . Abbreviation
saveData . Time = time . Now ( ) . Unix ( )
saveData . State = 1
saveData . WechatOrganizationId = int64 ( requestData . WechatId )
if requestData . Number != "" {
saveData . Number = requestData . Number
} else {
//获取首字母
govFirstWords := overallhandle . GetGovFirstWords ( requestData . Name , requestData . Abbreviation , requestData . GovClass , requestData . Superior )
saveData . Number = overallhandle . CreateNumber ( govFirstWords , requestData . Superior )
}
saveErr := overall . CONSTANT_DB_HR . Create ( & saveData ) . Error
if saveErr == nil {
overallhandle . Result ( 0 , saveData , c )
} else {
overallhandle . Result ( 104 , saveErr , c )
}
}
// 获取行政组织详情
func ( o * OrganizationApi ) GetGovCont ( c * gin . Context ) {
var requestData overallhandle . GetId
err := c . ShouldBindJSON ( & requestData )
if err != nil {
overallhandle . Result ( 100 , err , c )
return
}
if requestData . Id == 0 && requestData . IdStr == "" {
overallhandle . Result ( 101 , err , c , "行政组织类别Id不能为空!" )
return
}
if requestData . IdStr != "" {
idInt64 , _ := strconv . ParseInt ( requestData . IdStr , 10 , 64 )
requestData . Id = idInt64
}
whereAry := overallhandle . MapOut ( )
whereAry [ "id" ] = requestData . Id
var Contents models . AdministrativeOrganization
dbErr := Contents . GetCont ( whereAry )
// dbErr := overall.CONSTANT_DB_HR.Where("`id` = ?", requestData.Id).First(&Contents).Error
if dbErr != nil {
overallhandle . Result ( 105 , dbErr , c )
} else {
overallhandle . Result ( 0 , Contents , c )
}
}
// 编辑行政组织
func ( o * OrganizationApi ) EiteGovCont ( c * gin . Context ) {
var requestData eiteGovInfo
err := c . ShouldBindJSON ( & requestData )
if err != nil {
overallhandle . Result ( 100 , err , c )
return
}
if requestData . Id == 0 && requestData . IdStr == "" {
overallhandle . Result ( 101 , err , c , "行政类别Id不能为空!" )
return
}
if requestData . IdStr != "" {
idInt64 , _ := strconv . ParseInt ( requestData . IdStr , 10 , 64 )
requestData . Id = idInt64
}
whereAry := overallhandle . MapOut ( )
whereAry [ "id" ] = requestData . Id
var govCont models . AdministrativeOrganization
judgeErr := govCont . GetCont ( whereAry )
if judgeErr != nil {
overallhandle . Result ( 107 , judgeErr , c )
return
}
saveData := overallhandle . MapOut ( )
saveData [ "time" ] = time . Now ( ) . Unix ( )
if requestData . Name != "" && requestData . Name != govCont . Name {
saveData [ "name" ] = requestData . Name
}
if requestData . Superior != "" && requestData . Superior != strconv . FormatInt ( govCont . Superior , 10 ) {
saveData [ "superior" ] = requestData . Superior
}
if requestData . GovClass != "" && requestData . GovClass != strconv . FormatInt ( govCont . OrganizationType , 10 ) {
saveData [ "organization_type" ] = requestData . GovClass
}
if requestData . Abbreviation != "" && requestData . Abbreviation != govCont . Abbreviation {
saveData [ "abbreviation" ] = requestData . Abbreviation
}
if requestData . WechatId != 0 && int64 ( requestData . WechatId ) != govCont . WechatOrganizationId {
saveData [ "wechat_organization_id" ] = requestData . WechatId
}
if requestData . Number != "" && requestData . Number != govCont . Number {
if requestData . Superior != "" && requestData . Superior != strconv . FormatInt ( govCont . Superior , 10 ) {
//获取首字母
govFirstWords := overallhandle . GetGovFirstWords ( requestData . Name , requestData . Abbreviation , requestData . GovClass , requestData . Superior )
saveData [ "number" ] = overallhandle . CreateNumber ( govFirstWords , requestData . Superior )
} else if requestData . Superior != "" {
saveData [ "number" ] = requestData . Number
}
}
eiteErr := govCont . EiteCont ( whereAry , saveData )
if eiteErr != nil {
overallhandle . Result ( 106 , eiteErr , c )
} else {
overallhandle . Result ( 0 , saveData , c )
}
}
// 编辑行政组织状态或删除
func ( o * OrganizationApi ) EiteGovStateOrDel ( c * gin . Context ) {
var requestData EiteJobStateDel
err := c . ShouldBindJSON ( & requestData )
if err != nil {
overallhandle . Result ( 100 , err , c )
return
}
if requestData . Id == 0 && requestData . IdStr == "" {
overallhandle . Result ( 101 , err , c , "行政类别Id不能为空!" )
return
}
if requestData . IdStr != "" {
idInt64 , _ := strconv . ParseInt ( requestData . IdStr , 10 , 64 )
requestData . Id = idInt64
}
if requestData . State == 0 {
requestData . State = 1
}
whereAry := overallhandle . MapOut ( )
whereAry [ "id" ] = requestData . Id
var jobClassInfo models . AdministrativeOrganization
//判断行政组织是否存在
judgeExist := jobClassInfo . GetCont ( whereAry )
if judgeExist != nil {
overallhandle . Result ( 107 , judgeExist , c )
return
}
saveData := overallhandle . MapOut ( )
saveData [ "time" ] = time . Now ( ) . Unix ( )
saveData [ "state" ] = requestData . State
if requestData . State != 3 {
eiteErr := jobClassInfo . EiteCont ( whereAry , saveData )
if eiteErr != nil {
overallhandle . Result ( 106 , eiteErr , c )
} else {
overallhandle . Result ( 0 , saveData , c )
}
} else {
if requestData . IsTrue != 1 {
//软删除
eiteErr := jobClassInfo . EiteCont ( whereAry , saveData )
if eiteErr != nil {
overallhandle . Result ( 106 , eiteErr , c )
} else {
overallhandle . Result ( 0 , saveData , c )
}
} else {
//硬删除
delErr := overall . CONSTANT_DB_HR . Where ( whereAry ) . Delete ( & jobClassInfo )
if delErr == nil {
overallhandle . Result ( 0 , saveData , c )
} else {
overallhandle . Result ( 108 , delErr , c )
}
}
}
}
// 行政组织树
func ( o * OrganizationApi ) GovThree ( c * gin . Context ) {
var requestData govThreeType
c . ShouldBindJSON ( & requestData )
if requestData . Id == 0 && requestData . IdStr == "" {
requestData . Id = 0
}
if requestData . IdStr != "" {
idInt64 , _ := strconv . ParseInt ( requestData . IdStr , 10 , 64 )
requestData . Id = idInt64
}
var govMap overallhandle . MenuList
//API Token数据
redisFileKey := fmt . Sprintf ( "Org:OrgContList:%v_%v" , overall . CONSTANT_CONFIG . RedisPrefixStr . Alias , "orgcont" )
redisClient := grocerystore . RunRedis ( overall . CONSTANT_REDIS4 )
orgList , orgErr := redisClient . SMEMBERS ( redisFileKey )
// fmt.Printf("requ---------------->%v--------------->%v\n", orgList, orgErr)
if orgErr != nil || len ( orgList ) < 1 {
// fmt.Printf("requestData---------------->%v\n", requestData)
// 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 )
if requestData . All == 0 {
requestData . Id = 312
gormDb = gormDb . Where ( "administrative_organization.id NOT IN ?" , [ ] int { 312 , 293 , 305 , 306 , 307 } )
}
if requestData . Level != 0 {
gormDb = gormDb . Where ( "aot.level <= ?" , requestData . Level )
}
err := gormDb . Find ( & govMap ) . Error
if err != nil {
overallhandle . Result ( 107 , err , c )
return
}
redisClient . SetRedisTime ( 86400 )
for _ , v := range govMap {
vJsonStr , jsonErr := json . Marshal ( v )
if jsonErr == nil {
redisClient . Sadd ( redisFileKey , string ( vJsonStr ) )
}
}
} else {
if requestData . All == 0 {
requestData . Id = 312
}
for _ , v := range orgList {
var redisCont overallhandle . OutGovCont
jsonErr := json . Unmarshal ( [ ] byte ( v ) , & redisCont )
if jsonErr == nil {
govMap = append ( govMap , redisCont )
}
}
}
// fmt.Printf("id==========>%v", govMap)
// govMap.GovRecursion(requestData.Id, 0)
// fmt.Printf("govAry---------------->%v\n", govMap)
govMapThree := overallhandle . GovThreeList ( requestData . Id , govMap )
overallhandle . Result ( 0 , govMapThree , c )
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2022 - 11 - 21 0 8 : 59 : 34
@ 功能 : 行政组织树 ( 全 )
@ 参数
#
@ 返回值
#
@ 方法原型
#
* /
func ( o * OrganizationApi ) GovThreeIng ( c * gin . Context ) {
var requestData govThreeType
c . ShouldBindJSON ( & requestData )
if requestData . Id == 0 && requestData . IdStr == "" {
requestData . Id = 0
}
if requestData . IdStr != "" {
idInt64 , _ := strconv . ParseInt ( requestData . IdStr , 10 , 64 )
requestData . Id = idInt64
}
// fmt.Printf("requestData---------------->%v\n", requestData)
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` BETWEEN ? AND ?" , 1 , 2 )
if requestData . All == 0 {
requestData . Id = 312
gormDb = gormDb . Where ( "administrative_organization.id NOT IN ?" , [ ] int { 312 , 293 , 305 , 306 , 307 } )
}
if requestData . Level != 0 {
gormDb = gormDb . Where ( "aot.level <= ?" , requestData . Level )
}
err := gormDb . Find ( & govMap ) . Error
if err != nil {
overallhandle . Result ( 107 , err , c )
return
}
// fmt.Printf("id==========>%v", govMap)
// govMap.GovRecursion(requestData.Id, 0)
// fmt.Printf("govAry---------------->%v\n", requestData.Id)
govMapThree := overallhandle . GovThreeList ( requestData . Id , govMap )
overallhandle . Result ( 0 , govMapThree , c )
}
// 获取当前行政组织的所有子类
func ( o * OrganizationApi ) GetOrgAllSun ( c * gin . Context ) {
var requestData overallhandle . GetId
c . ShouldBindJSON ( & requestData )
if requestData . Id == 0 && requestData . IdStr == "" {
requestData . Id = 0
}
if requestData . IdStr != "" {
idInt64 , _ := strconv . ParseInt ( requestData . IdStr , 10 , 64 )
requestData . Id = idInt64
}
// fmt.Printf("\nrequestData---->%v\n", requestData)
var idAry [ ] int64
// idAry = overallhandle.GetDepartmentSun(requestData.Id, idAry)
// idAry = append(idAry, requestData.Id)
var sunAry overallhandle . AllSunList [ int64 ]
sunAry . GetAllSunOrg ( requestData . Id )
sunAry . SunList = append ( sunAry . SunList , requestData . Id )
idAry = sunAry . SunList
//获取行政组织信息
var orgList [ ] models . AdministrativeOrganization
if len ( idAry ) < 1 {
overallhandle . Result ( 101 , orgList , c , "没有查询到信息!" )
return
}
err := overall . CONSTANT_DB_HR . Model ( & models . AdministrativeOrganization { } ) . Where ( "`state` = 1 AND `id` IN ?" , idAry ) . Find ( & orgList ) . Error
if err != nil {
overallhandle . Result ( 101 , err , c , "没有查询到信息!" )
return
}
overallhandle . Result ( 0 , orgList , c )
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2022 - 10 - 26 0 9 : 44 : 40
@ 功能 : 获取公司下的所有主行政部门
@ 参数
#
@ 返回值
#
* /
func ( o * OrganizationApi ) GetCompanyDeparment ( c * gin . Context ) {
var requestData overallhandle . GetId
errddd := c . ShouldBindJSON ( & requestData )
sdfgg , _ := json . Marshal ( requestData )
fmt . Printf ( "获取值------1----->%v----->%v----->%v\n" , requestData , string ( sdfgg ) , errddd )
if requestData . Id == 0 && requestData . IdStr == "" {
requestData . Id = 0
}
// fmt.Printf("获取值----2------->%v\n", requestData)
if requestData . IdStr != "" {
idInt64 , _ := strconv . ParseInt ( requestData . IdStr , 10 , 64 )
requestData . Id = idInt64
}
// fmt.Printf("获取值----3------->%v\n", requestData)
orgId := getOrgIdList ( requestData . Id )
if len ( orgId ) < 1 {
overallhandle . Result ( 101 , orgId , c , "没有查询到信息!" )
return
}
for i := 0 ; i < len ( orgId ) ; i ++ {
sunOrgId := getOrgIdList ( orgId [ i ] )
if len ( sunOrgId ) > 0 {
orgId = overallhandle . HeBingArray ( orgId , sunOrgId )
}
}
var orgList [ ] models . AdministrativeOrganization
err := overall . CONSTANT_DB_HR . Model ( & models . AdministrativeOrganization { } ) . Where ( "`state` = 1 AND `id` IN ?" , orgId ) . Order ( "sort" ) . Find ( & orgList ) . Error
if err != nil {
overallhandle . Result ( 101 , err , c , "没有查询到信息!" )
return
}
overallhandle . Result ( 0 , orgList , c )
}
// 获取行政组织ID
func getOrgIdList ( orgId int64 ) ( orgIdList [ ] int64 ) {
err := overall . CONSTANT_DB_HR . Model ( & models . AdministrativeOrganization { } ) . Select ( "`id`" ) . Where ( "`state` = 1 AND `ispower` = 1 AND `organization_type` > 2 AND `superior` = ?" , orgId ) . Find ( & orgIdList ) . Error
if err != nil {
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
// }
redisFileKey := fmt . Sprintf ( "OrgPost:OrgAndPeople:%v_%v_%v%v%v" , overall . CONSTANT_CONFIG . RedisPrefixStr . Alias , "OrgUserTree" , requestData . Id , requestData . All , requestData . Level )
redisClient := grocerystore . RunRedis ( overall . CONSTANT_REDIS4 )
orgErr , orgUserList := redisClient . Get ( redisFileKey )
var jsonErr error
if orgErr == true && orgUserList != "" {
var orgManCont orgPeopleCont
jsonErr = json . Unmarshal ( [ ] byte ( orgUserList ) , & orgManCont )
outputDataAry := overallhandle . MapOut ( )
outputDataAry [ "three" ] = orgManCont . Three
outputDataAry [ "list" ] = orgManCont . List
overallhandle . Result ( 0 , outputDataAry , c )
}
if jsonErr != nil || orgErr == false {
//获取行政组织
var orgList [ ] models . OrgContType
gormDb := overall . CONSTANT_DB_HR . Model ( & models . OrgContType { } ) . Select ( "`id`,`numbe`,`name`,`superior`,`state`,`typename`,`level`" ) . 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
var orgManCont orgPeopleCont
orgManCont . List = allOrgAndPeople . OrgAndPeopleList
orgManCont . Three = govMapThree
sendStr , _ := json . Marshal ( orgManCont )
redisClient . SetRedisTime ( 86400 )
redisClient . Set ( redisFileKey , string ( sendStr ) )
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 )
// fmt.Printf("------------->%v---->%v\n", parentIdInt, parentId)
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`,`icon_photo`" ) . 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 . IconBase64 = manCont . IconPhoto
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
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2023 - 01 - 19 10 : 41 : 34
@ 功能 : 获取行政组织及相关人员
@ 参数
#
@ 返回值
#
@ 方法原型
#
* /
func ( o * OrganizationApi ) GetOrgAndEveryOnePeople ( c * gin . Context ) {
var requestData OrgAndMAnThreeType
c . ShouldBindJSON ( & requestData )
//获取行政组织
var sunAry overallhandle . AllSunList [ int64 ]
var orgIdList [ ] int64
var origin int64
isNotIn := 0
if requestData . All == 0 {
if requestData . Id == "" {
origin = 0
isNotIn = 1
orgIdList = [ ] int64 { 312 , 293 , 305 , 306 , 307 }
} else {
idInt64 , _ := strconv . ParseInt ( requestData . Id , 10 , 64 )
origin = idInt64
sunAry . GetAllSunOrg ( idInt64 )
orgIdList = sunAry . SunList
}
} else {
if requestData . Id != "" {
idInt64 , _ := strconv . ParseInt ( requestData . Id , 10 , 64 )
origin = idInt64
sunAry . GetAllSunOrg ( idInt64 )
orgIdList = sunAry . SunList
}
}
if ! overallhandle . IsInTrue [ int64 ] ( origin , orgIdList ) {
orgIdList = append ( orgIdList , origin )
}
fmt . Printf ( "获取行政组织--->%v\n" , orgIdList )
var orgAndPeopleListCont empowerSync //启用协程结构体
synPro . Add ( 1 )
go orgAndPeopleListCont . GetOrgList ( isNotIn , orgIdList , requestData . Level ) //获取行政组织
synPro . Add ( 1 )
go orgAndPeopleListCont . GetPeopleList ( isNotIn , orgIdList ) //获取人员
synPro . Wait ( )
orgAndManList := orgAndPeopleListCont . readDataLock ( )
sort . Slice ( orgAndManList , func ( i , j int ) bool {
return orgAndManList [ i ] . Type < orgAndManList [ j ] . Type
} )
sendList := OrgAndManNewThree ( origin , orgAndManList )
overallhandle . Result ( 0 , sendList , c )
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2023 - 01 - 19 11 : 18 : 39
@ 功能 : 获取行政组织 ( 协程 )
@ 参数
# orgId 行政组织ID
# level 获取等级
@ 返回值
#
@ 方法原型
# func ( e * empowerSync ) GetOrgList ( orgId [ ] int64 , level int )
* /
func ( e * empowerSync ) GetOrgList ( isNotIn int , orgId [ ] int64 , level int ) {
e . mutext . Lock ( )
defer e . mutext . Unlock ( )
var orgList [ ] models . AdministrativeOrganization
gormDb := overall . CONSTANT_DB_HR . Model ( & models . AdministrativeOrganization { } ) . Select ( "`id`,`number`,`name`,`superior`" ) . Where ( "`state` = ? " , 1 )
if len ( orgId ) > 0 {
if isNotIn == 1 {
gormDb = gormDb . Where ( "`id` NOT IN ?" , orgId )
} else {
gormDb = gormDb . Where ( "`id` IN ?" , orgId )
}
}
if level != 0 {
gormDb = gormDb . Where ( "`level` <= ?" , level )
}
err := gormDb . Find ( & orgList ) . Error
if err == nil && len ( orgList ) > 0 {
for _ , v := range orgList {
var orgCont OrgAndEveryOnePeople
orgCont . Id = strconv . FormatInt ( v . Id , 10 ) //识别符
orgCont . OrgId = v . Id
orgCont . Number = v . Number //编号
orgCont . Name = v . Name //姓名
orgCont . Superior = strconv . FormatInt ( v . Superior , 10 ) //上级
orgCont . Type = 1
orgCont . Key = fmt . Sprintf ( "A%v" , v . Id )
e . orgAndPeopleList = append ( e . orgAndPeopleList , orgCont )
}
}
synPro . Done ( )
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2023 - 01 - 19 11 : 24 : 44
@ 功能 : 获取人员 ( 协程 )
@ 参数
# orgId 行政组织ID
@ 返回值
#
@ 方法原型
#
* /
func ( e * empowerSync ) GetPeopleList ( isNotIn int , orgId [ ] int64 ) {
e . mutext . Lock ( )
defer e . mutext . Unlock ( )
var peopleList [ ] models . PersonArchives
gormDnMan := overall . CONSTANT_DB_HR . Model ( & models . PersonArchives { } ) . Select ( "`key`,`number`,`name`,`icon`,`icon_photo`,`admin_org`" ) . Where ( "`state` = 1 AND `emp_type` BETWEEN ? AND ?" , 1 , 10 )
if len ( orgId ) > 0 {
if isNotIn == 1 {
gormDnMan = gormDnMan . Where ( "`admin_org` NOT IN ?" , orgId )
} else {
gormDnMan = gormDnMan . Where ( "`admin_org` IN ?" , orgId )
}
}
err := gormDnMan . Find ( & peopleList ) . Error
if err == nil && len ( peopleList ) > 0 {
for _ , v := range peopleList {
var peopleCont OrgAndEveryOnePeople
peopleCont . Id = strconv . FormatInt ( v . Key , 10 ) //识别符
peopleCont . OrgId = - 1
peopleCont . Number = v . Number //编号
peopleCont . Name = v . Name //姓名
peopleCont . Superior = strconv . FormatInt ( v . AdminOrg , 10 ) //上级
peopleCont . Icon = v . Icon
peopleCont . IconPhoto = v . IconPhoto
peopleCont . Type = 2
peopleCont . Key = fmt . Sprintf ( "U%v" , v . Key )
e . orgAndPeopleList = append ( e . orgAndPeopleList , peopleCont )
}
}
synPro . Done ( )
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2023 - 01 - 19 14 : 28 : 48
@ 功能 : 新版人员与行政组织树
@ 参数
# parentId 上级ID
# govAry 数据
@ 返回值
#
@ 方法原型
# func OrgAndManNewThree ( parentId int64 , govAry [ ] OrgAndEveryOnePeople ) [ ] OrgAndManThree
* /
func OrgAndManNewThree ( parentId int64 , govAry [ ] OrgAndEveryOnePeople ) [ ] OrgAndManThree {
orgAndMAnMap := [ ] OrgAndManThree { }
for _ , v := range govAry {
// var zhucont govThree
parentIdInt , _ := strconv . ParseInt ( v . Superior , 10 , 64 )
// fmt.Printf("------------->%v---->%v\n", parentIdInt, parentId)
if parentIdInt == parentId {
child := OrgAndManNewThree ( v . OrgId , govAry )
var node OrgAndManThree
node . Id = v . Id //识别符
node . OrgId = v . OrgId
node . Number = v . Number //编号
node . Name = v . Name //姓名
node . Superior = v . Superior //上级
node . Icon = v . Icon
node . IconPhoto = v . IconPhoto
node . Type = v . Type
node . Key = v . Key
if len ( child ) > 0 {
node . Child = child
}
orgAndMAnMap = append ( orgAndMAnMap , node )
}
}
return orgAndMAnMap
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2023 - 01 - 29 0 9 : 26 : 04
@ 功能 : 根据行政组织编号获取组织及人员
@ 参数
#
@ 返回值
#
@ 方法原型
#
* /
func ( o * OrganizationApi ) BasisOrgObtainSonOrgAndMan ( c * gin . Context ) {
var requestData overallhandle . ConstId
err := c . ShouldBindJSON ( & requestData )
if err != nil {
overallhandle . Result ( 100 , err , c )
return
}
//获取当前行政组织信息
var orgCont models . AdministrativeOrganization
isNotIn := 0
var idList [ ] int64
var parenAry overallhandle . AllSunList [ int64 ]
if requestData . Id != "" {
idInt , _ := strconv . ParseInt ( requestData . Id , 10 , 64 )
idList = [ ] int64 { idInt }
if idInt != 309 {
err = orgCont . GetCont ( map [ string ] interface { } { "id" : idInt } )
parenAry . SunList = append ( parenAry . SunList , idInt )
parenAry . GetAllParentOrg ( idInt , 3 )
} else {
}
} else {
isNotIn = 1
idList = [ ] int64 { 312 , 293 , 305 , 306 , 307 }
err = fmt . Errorf ( "获取全部内容" )
}
var sendData ShenPiXuanRen
// fmt.Printf("组织id列表------------》%v\n", parenAry.SunList)
if len ( parenAry . SunList ) > 0 {
var orgAndPeopleListTitleCont empowerSynces //启用协程结构体
synProes . Add ( 1 )
go orgAndPeopleListTitleCont . BasisOrgDirectOrgIng ( parenAry . SunList ) //获取行政组织
synProes . Wait ( )
orgTitleList := orgAndPeopleListTitleCont . readDataLock ( )
sort . SliceStable ( orgTitleList , func ( i , j int ) bool {
return orgTitleList [ i ] . Sort < orgTitleList [ j ] . Sort
} )
for _ , ov := range orgTitleList {
var titleDepartCont TitleDepartmentsCont
titleDepartCont . DepartmentId = ov . Id //行政组织ID
titleDepartCont . Id = ov . Id //行政组织ID
titleDepartCont . DepartmentKey = ov . Number //行政组织编码
titleDepartCont . DepartmentName = ov . Name //行政组织名称
titleDepartCont . ParentId = ov . Superior //上级ID
titleDepartCont . DepartmentNames = ov . Name //行政组织别名
sendData . TitleDepartments = append ( sendData . TitleDepartments , titleDepartCont )
}
}
var orgAndPeopleListCont empowerSyncDepartMan //启用协程结构体
synPro . Add ( 1 )
go orgAndPeopleListCont . BasisOrgDirectOrg ( isNotIn , idList , 3 ) //获取行政组织
synPro . Add ( 1 )
go orgAndPeopleListCont . GetPeopleListIng ( isNotIn , idList ) //获取人员
synPro . Wait ( )
orgList , manList := orgAndPeopleListCont . readDataLock ( )
if len ( orgList ) > 0 {
for _ , org := range orgList {
var orgShenPi ChildDepartmentsCont
orgShenPi . Id = org . Id //行政组织ID
orgShenPi . DepartmentKey = org . Number //行政组织编码
orgShenPi . DepartmentName = org . Name //行政组织名称
orgShenPi . ParentId = org . Superior //上级ID
orgShenPi . DepartmentNames = org . Name //行政组织别名
sendData . ChildDepartments = append ( sendData . ChildDepartments , orgShenPi )
}
}
if len ( manList ) > 0 {
for _ , man := range manList {
var employess EmployeesCont
employess . Id = man . Id
employess . EmployeeName = man . Name //人员名称
employess . IsLeave = "0" //行政组织名称
employess . Open = "false" //上级ID
employess . Icon = man . Icon
employess . IconToBase64 = man . IconPhoto
employess . Wechat = man . Wechat
employess . Departmentid = man . DepartmentId //部门ID
employess . DepartmentName = man . DepartmentName //部门名称
employess . Postid = man . PostId //岗位ID
employess . PostName = man . PostName //岗位名称
employess . Tema = man . Tema //班组Id
employess . TemaName = man . TemaName //班组名称
sendData . Employees = append ( sendData . Employees , employess )
}
}
// outMap := overallhandle.MapOut()
// outMap["sendData"] = sendData
// outMap["orgList"] = orgList
// outMap["manList"] = manList
overallhandle . Result ( 0 , sendData , c )
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2023 - 01 - 19 11 : 24 : 44
@ 功能 : 获取人员 ( 协程 )
@ 参数
# orgId 行政组织ID
@ 返回值
#
@ 方法原型
#
* /
func ( e * empowerSyncDepartMan ) GetPeopleListIng ( isNotIn int , orgId [ ] int64 ) {
e . mutext . Lock ( )
defer e . mutext . Unlock ( )
var peopleList [ ] models . PersonArchives
gormDnMan := overall . CONSTANT_DB_HR . Model ( & models . PersonArchives { } ) . Select ( "`key`,`number`,`name`,`icon`,`icon_photo`,`admin_org`,`wechat`,`work_wechat`,`position`,`teamid`" ) . Where ( "`state` = 1 AND `emp_type` BETWEEN ? AND ?" , 1 , 10 )
if len ( orgId ) > 0 {
if isNotIn == 1 {
gormDnMan = gormDnMan . Where ( "`admin_org` NOT IN ?" , orgId )
} else {
gormDnMan = gormDnMan . Where ( "`admin_org` IN ?" , orgId )
}
}
err := gormDnMan . Find ( & peopleList ) . Error
if err == nil && len ( peopleList ) > 0 {
for _ , v := range peopleList {
var peopleCont OrgAndEveryOnePeople
peopleCont . Id = strconv . FormatInt ( v . Key , 10 ) //识别符
peopleCont . OrgId = - 1
peopleCont . Number = v . Number //编号
peopleCont . Name = v . Name //姓名
peopleCont . Superior = strconv . FormatInt ( v . AdminOrg , 10 ) //上级
peopleCont . Icon = v . Icon
peopleCont . IconPhoto = v . IconPhoto
peopleCont . Type = 2
peopleCont . Wechat = v . Wechat
if v . WorkWechat != "" {
peopleCont . Wechat = v . WorkWechat
}
peopleCont . Key = fmt . Sprintf ( "U%v" , v . Key )
_ , _ , companyId , _ , _ := overallhandle . GetOrgStructure ( v . AdminOrg )
if companyId != 0 {
var orgCont models . AdministrativeOrganization
orgCont . GetCont ( map [ string ] interface { } { "`id`" : companyId } , "`name`" )
peopleCont . DepartmentId = companyId //分厂Id
peopleCont . DepartmentName = orgCont . Name //分厂名称
}
//获取岗位
if v . Position != 0 {
var postCont models . Position
postCont . GetCont ( map [ string ] interface { } { "`id`" : v . Position } , "`name`" )
peopleCont . PostId = v . Position //职务Id
peopleCont . PostName = postCont . Name //职务名称
}
if v . TeamId != 0 {
var teamCont models . TeamGroup
teamCont . GetCont ( map [ string ] interface { } { "`id`" : v . TeamId } , "`name`" )
peopleCont . Tema = v . TeamId //班组Id
peopleCont . TemaName = teamCont . Name //班组名称
}
e . peopleList = append ( e . peopleList , peopleCont )
}
}
synPro . Done ( )
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2023 - 01 - 29 0 9 : 54 : 05
@ 功能 : 根据行政组织ID获取直接下级
@ 参数
#
@ 返回值
#
@ 方法原型
#
* /
func ( e * empowerSyncDepartMan ) BasisOrgDirectOrg ( isNotIn int , orgId [ ] int64 , level int ) {
e . mutext . Lock ( )
defer e . mutext . Unlock ( )
var orgList [ ] models . OrgContType
gormDb := overall . CONSTANT_DB_HR . Model ( & models . OrgContType { } ) . Select ( "`id`,`numbe`,`name`,`superior`" ) . Where ( "`state` = ? " , 1 )
if len ( orgId ) > 0 {
if isNotIn == 1 {
gormDb = gormDb . Where ( "`id` NOT IN ?" , orgId )
} else {
gormDb = gormDb . Where ( "`superior` IN ?" , orgId )
}
}
if level != 0 {
gormDb = gormDb . Where ( "`level` > ?" , level )
}
err := gormDb . Find ( & orgList ) . Error
listCount := len ( orgList )
if err == nil && listCount > 0 {
for i , v := range orgList {
var orgCont OrgAndEveryOnePeople
orgCont . Id = strconv . FormatInt ( v . Id , 10 ) //识别符
orgCont . OrgId = v . Id
orgCont . Number = v . Number //编号
orgCont . Name = v . Name //行政组织名称
orgCont . Superior = strconv . FormatInt ( v . Superior , 10 ) //上级
orgCont . Type = 1
orgCont . Key = fmt . Sprintf ( "A%v" , v . Id )
orgCont . Sort = listCount - i
e . orgList = append ( e . orgList , orgCont )
}
}
synPro . Done ( )
}
func ( e * empowerSynces ) BasisOrgDirectOrgIng ( orgId [ ] int64 ) {
e . mutext . Lock ( )
defer e . mutext . Unlock ( )
listCount := len ( orgId )
if listCount > 0 {
for i , v := range orgId {
var orgContOld models . AdministrativeOrganization
err := overall . CONSTANT_DB_HR . Model ( & models . AdministrativeOrganization { } ) . Select ( "`id`,`number`,`name`,`superior`" ) . Where ( "`id` = ? " , v ) . First ( & orgContOld ) . Error
if err == nil {
var orgCont OrgAndEveryOnePeople
orgCont . Id = strconv . FormatInt ( orgContOld . Id , 10 ) //识别符
orgCont . OrgId = orgContOld . Id
orgCont . Number = orgContOld . Number //编号
orgCont . Name = orgContOld . Name //行政组织名称
orgCont . Superior = strconv . FormatInt ( orgContOld . Superior , 10 ) //上级
orgCont . Type = 1
orgCont . Key = fmt . Sprintf ( "A%v" , orgContOld . Id )
orgCont . Sort = listCount - i
e . orgAndPeopleList = append ( e . orgAndPeopleList , orgCont )
}
}
}
synProes . Done ( )
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2023 - 02 - 15 10 : 46 : 22
@ 功能 : 获取指定行政组织列表
@ 参数
#
@ 返回值
#
@ 方法原型
#
* /
func ( o * OrganizationApi ) GetAppointOrg ( c * gin . Context ) {
var requestData OrgIdList
err := c . ShouldBindJSON ( & requestData )
if err != nil {
overallhandle . Result ( 100 , err , c )
return
}
if len ( requestData . OrgId ) < 1 {
overallhandle . Result ( 1 , err , c , "请选择行政组织!" )
return
}
var orgList [ ] models . AdministrativeOrganization
err = overall . CONSTANT_DB_HR . Where ( "`id` IN ?" , requestData . OrgId ) . Find ( & orgList ) . Error
if err != nil || len ( orgList ) < 1 {
overallhandle . Result ( 107 , err , c )
return
}
overallhandle . Result ( 0 , orgList , c )
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2023 - 04 - 22 15 : 56 : 42
@ 功能 :
@ 参数
#
@ 返回值
#
@ 方法原型
#
* /
func ( o * OrganizationApi ) BasisOrgAllPeople ( c * gin . Context ) {
var requestData overallhandle . ConstId
err := c . ShouldBindJSON ( & requestData )
if err != nil {
overallhandle . Result ( 100 , err , c )
return
}
if requestData . Id == "" {
overallhandle . Result ( 101 , err , c )
return
}
orgInt , _ := strconv . ParseInt ( requestData . Id , 10 , 64 )
var sunAry overallhandle . AllSunList [ int64 ]
sunAry . GetAllSunOrg ( orgInt )
sunAry . SunList = append ( sunAry . SunList , orgInt )
var userList [ ] models . PersonArchives
err = overall . CONSTANT_DB_HR . Model ( & models . PersonArchives { } ) . Where ( "emp_type BETWEEN 1 AND 10 AND admin_org IN ?" , sunAry . SunList ) . Find ( & userList ) . Error
if err != nil {
overallhandle . Result ( 105 , err , c )
return
}
var sendContList [ ] OrgAllPeopleList
for _ , v := range userList {
var sendCont OrgAllPeopleList
sendCont . Id = strconv . FormatInt ( v . Id , 10 ) //id"`
sendCont . Number = v . Number //number"`
sendCont . Name = v . Name //name"`
sendCont . Icon = v . Icon //icon"`
sendCont . Adminorg = strconv . FormatInt ( v . AdminOrg , 10 ) //adminorg"`
sendCont . Teamid = strconv . FormatInt ( v . TeamId , 10 ) //teamid"`
sendCont . Position = strconv . FormatInt ( v . Position , 10 ) //position"`
sendCont . Wechat = v . Wechat //wechat"`
if v . WorkWechat != "" {
sendCont . Wechat = v . WorkWechat
}
sendCont . Key = strconv . FormatInt ( v . Key , 10 ) //key"`
sendCont . Iconphoto = v . IconPhoto //iconphoto"`
sendContList = append ( sendContList , sendCont )
}
overallhandle . Result ( 0 , sendContList , c )
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2023 - 06 - 05 11 : 53 : 21
@ 功能 :
@ 参数
#
@ 返回值
#
@ 方法原型
#
* /
func ( o * OrganizationApi ) GovNewThreeIng ( c * gin . Context ) {
var requestData SearchOrgCont
c . ShouldBindJSON ( & requestData )
var orgContList [ ] hrmodels . OrgCont
gotmDb := overall . CONSTANT_DB_HR . Model ( & hrmodels . OrgCont { } ) . Where ( "state IN ?" , [ ] int { 1 , 2 } )
if requestData . KeyWords != "" {
gotmDb = gotmDb . Where ( "name LIKE ? OR number LIKE ?" , "%" + requestData . KeyWords + "%" , "%" + requestData . KeyWords + "%" )
}
if requestData . Class != 0 {
gotmDb = gotmDb . Where ( "organization_type = ?" , requestData . Class )
}
err := gotmDb . Find ( & orgContList ) . Error
if err != nil && len ( orgContList ) < 1 {
overallhandle . Result ( 107 , err , c )
return
}
if requestData . KeyWords != "" || requestData . Class != 0 {
var govMap [ ] SendOrgTreeList
for i := 0 ; i < len ( orgContList ) ; i ++ {
var govCont SendOrgTreeList
govCont . Id = orgContList [ i ] . Id //
govCont . Number = orgContList [ i ] . Number //行政编码"`
govCont . Name = orgContList [ i ] . Name //组织名称"`
govCont . Superior = orgContList [ i ] . Superior //上级ID"`
govCont . OrganizationType = orgContList [ i ] . OrganizationType //行政组织类型"`
govCont . Abbreviation = orgContList [ i ] . Abbreviation //行政组织简称"`
govCont . Time = orgContList [ i ] . Time //创建时间"`
govCont . State = orgContList [ i ] . State //状态(1:启用;2:禁用;3:删除)"`
govCont . WechatOrganizationId = orgContList [ i ] . WechatOrganizationId //微信组织架构对照码"`
govCont . SuperiorSun = orgContList [ i ] . SuperiorSun //级联ID"`
govCont . Schoole = orgContList [ i ] . Schoole //原知行学院对照码"`
govCont . KingdeeId = orgContList [ i ] . KingdeeId //金蝶对照ID"`
govCont . IsPower = orgContList [ i ] . IsPower //是否为实权部门"`
govCont . Sort = orgContList [ i ] . Sort //排序"`
govCont . TypeName = orgContList [ i ] . TypeName //'类型名称"`
govCont . Level = orgContList [ i ] . Level //级别"`
if orgContList [ i ] . State == 1 {
govCont . Status = true
} else {
govCont . Status = false
}
govMap = append ( govMap , govCont )
}
overallhandle . Result ( 0 , govMap , c )
} else {
if requestData . OrgId == 0 {
requestData . OrgId = 313
}
govMapThree := GovOrgTree ( requestData . OrgId , orgContList )
overallhandle . Result ( 0 , govMapThree , c )
}
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2023 - 06 - 05 13 : 24 : 19
@ 功能 : 行政组织树
@ 参数
#
@ 返回值
#
@ 方法原型
#
* /
func GovOrgTree ( parentId int64 , govList [ ] hrmodels . OrgCont ) ( govMap [ ] SendOrgTreeList ) {
for i := 0 ; i < len ( govList ) ; i ++ {
if govList [ i ] . Superior == parentId {
var govCont SendOrgTreeList
govCont . Id = govList [ i ] . Id //
govCont . Number = govList [ i ] . Number //行政编码"`
govCont . Name = govList [ i ] . Name //组织名称"`
govCont . Superior = govList [ i ] . Superior //上级ID"`
govCont . OrganizationType = govList [ i ] . OrganizationType //行政组织类型"`
govCont . Abbreviation = govList [ i ] . Abbreviation //行政组织简称"`
govCont . Time = govList [ i ] . Time //创建时间"`
govCont . State = govList [ i ] . State //状态(1:启用;2:禁用;3:删除)"`
govCont . WechatOrganizationId = govList [ i ] . WechatOrganizationId //微信组织架构对照码"`
govCont . SuperiorSun = govList [ i ] . SuperiorSun //级联ID"`
govCont . Schoole = govList [ i ] . Schoole //原知行学院对照码"`
govCont . KingdeeId = govList [ i ] . KingdeeId //金蝶对照ID"`
govCont . IsPower = govList [ i ] . IsPower //是否为实权部门"`
govCont . Sort = govList [ i ] . Sort //排序"`
govCont . TypeName = govList [ i ] . TypeName //'类型名称"`
govCont . Level = govList [ i ] . Level //级别"`
if govList [ i ] . State == 1 {
govCont . Status = true
} else {
govCont . Status = false
}
govCont . Child = GovOrgTree ( govList [ i ] . Id , govList )
govMap = append ( govMap , govCont )
}
}
return
}
// 添加行政组织
func ( o * OrganizationApi ) NewAddGovCont ( c * gin . Context ) {
var requestData addGovInfoNew
err := c . ShouldBindJSON ( & requestData )
if err != nil {
overallhandle . Result ( 100 , err , c )
return
}
if requestData . Name == "" {
overallhandle . Result ( 101 , requestData . Name , c , "行政组织名称为空!" )
return
}
var superiorId int64 = 0
if requestData . Superior != "" {
superiorInt , _ := strconv . ParseInt ( requestData . Superior , 10 , 64 )
superiorId = superiorInt
} else {
overallhandle . Result ( 101 , requestData . Superior , c , "请指定归属上级!" )
return
}
var govClassId int64 = 0
if requestData . GovClass == "" {
overallhandle . Result ( 101 , requestData . GovClass , c , "请指定归属行政组织类型!" )
return
} else {
govClassIdInt , _ := strconv . ParseInt ( requestData . GovClass , 10 , 64 )
govClassId = govClassIdInt
}
var wechatIdVal int64 = 0
if requestData . WechatId != "" {
wechatIdVal , _ = strconv . ParseInt ( requestData . WechatId , 10 , 64 )
// requestData.WechatId = 1
}
var name string
judgeErr := overall . CONSTANT_DB_HR . Model ( & models . AdministrativeOrganization { } ) . Select ( "`name`" ) . Where ( "`organization_type` IN ? AND `name` = ?" , [ ] int { 1 , 2 } , requestData . Name ) . First ( & name ) . Error
if judgeErr == nil {
overallhandle . Result ( 103 , name , c )
return
}
var saveData models . AdministrativeOrganization
saveData . Name = requestData . Name
saveData . Superior = superiorId
saveData . OrganizationType = govClassId
saveData . Abbreviation = requestData . Abbreviation
saveData . Time = time . Now ( ) . Unix ( )
saveData . State = 1
// saveData.WechatOrganizationId = int64(requestData.WechatId)
saveData . WechatOrganizationId = wechatIdVal
if requestData . Number != "" {
saveData . Number = requestData . Number
} else {
//获取首字母
govFirstWords := overallhandle . GetGovFirstWords ( requestData . Name , requestData . Abbreviation , requestData . GovClass , requestData . Superior )
saveData . Number = overallhandle . CreateNumber ( govFirstWords , requestData . Superior )
}
saveErr := overall . CONSTANT_DB_HR . Create ( & saveData ) . Error
if saveErr == nil {
overallhandle . Result ( 0 , saveData , c )
} else {
overallhandle . Result ( 104 , saveErr , c )
}
}
// 编辑行政组织
func ( o * OrganizationApi ) NewEiteGovCont ( c * gin . Context ) {
var requestData NewEiteGovInfo
err := c . ShouldBindJSON ( & requestData )
if err != nil {
overallhandle . Result ( 100 , err , c )
return
}
if requestData . Id == 0 {
overallhandle . Result ( 101 , err , c , "行政类别Id不能为空!" )
return
}
whereAry := overallhandle . MapOut ( )
whereAry [ "id" ] = requestData . Id
var govCont models . AdministrativeOrganization
judgeErr := govCont . GetCont ( whereAry )
if judgeErr != nil {
overallhandle . Result ( 107 , judgeErr , c )
return
}
saveData := overallhandle . MapOut ( )
saveData [ "time" ] = time . Now ( ) . Unix ( )
if requestData . Name != "" && requestData . Name != govCont . Name {
saveData [ "name" ] = requestData . Name
}
if requestData . Superior != "" && requestData . Superior != strconv . FormatInt ( govCont . Superior , 10 ) {
saveData [ "superior" ] = requestData . Superior
}
if requestData . GovClass != "" && requestData . GovClass != strconv . FormatInt ( govCont . OrganizationType , 10 ) {
saveData [ "organization_type" ] = requestData . GovClass
}
if requestData . Abbreviation != "" && requestData . Abbreviation != govCont . Abbreviation {
saveData [ "abbreviation" ] = requestData . Abbreviation
}
if requestData . WechatId != "" {
wechatIdInt , _ := strconv . ParseInt ( requestData . WechatId , 10 , 64 )
if wechatIdInt != govCont . WechatOrganizationId {
saveData [ "wechat_organization_id" ] = wechatIdInt
}
} else {
saveData [ "wechat_organization_id" ] = 0
}
if requestData . Number != "" && requestData . Number != govCont . Number {
if requestData . Superior != "" && requestData . Superior != strconv . FormatInt ( govCont . Superior , 10 ) {
//获取首字母
govFirstWords := overallhandle . GetGovFirstWords ( requestData . Name , requestData . Abbreviation , requestData . GovClass , requestData . Superior )
saveData [ "number" ] = overallhandle . CreateNumber ( govFirstWords , requestData . Superior )
} else if requestData . Superior != "" {
saveData [ "number" ] = requestData . Number
}
}
eiteErr := govCont . EiteCont ( whereAry , saveData )
if eiteErr != nil {
overallhandle . Result ( 106 , eiteErr , c )
} else {
overallhandle . Result ( 0 , saveData , c )
}
}
// 改变行政组织状态
func ( o * OrganizationApi ) NewEiteGovStateOrDel ( c * gin . Context ) {
var requestData DelOrgStatus
err := c . ShouldBindJSON ( & requestData )
if err != nil {
overallhandle . Result ( 100 , err , c )
return
}
if requestData . Id == 0 {
overallhandle . Result ( 1 , err , c , "未知行政组织!请检查!" )
return
}
if requestData . Status == 0 {
requestData . Status = 1
}
if requestData . IsTrue == 0 {
requestData . IsTrue = 2
}
where := overallhandle . MapOut ( )
where [ "`id`" ] = requestData . Id
var orgCont models . AdministrativeOrganization
err = orgCont . GetCont ( where , "`id`" , "`name`" , "`superior`" )
if err != nil {
overallhandle . Result ( 1 , err , c , "未知行政组织!请检查!" )
return
}
editCont := overallhandle . MapOut ( )
editCont [ "state" ] = requestData . Status
editCont [ "time" ] = time . Now ( ) . Unix ( )
if requestData . Status != 3 {
if requestData . Status == 1 {
//获取所有上级
var fatherOrg overallhandle . AllSunList [ int64 ]
fatherOrg . GetAllFatherOrg ( orgCont . Superior )
fatherOrg . SunList = append ( fatherOrg . SunList , orgCont . Id )
err = overall . CONSTANT_DB_HR . Model ( & models . AdministrativeOrganization { } ) . Where ( "`id` IN ? AND state BETWEEN ? AND ?" , fatherOrg . SunList , 1 , 2 ) . Updates ( editCont ) . Error
if err != nil {
overallhandle . Result ( 106 , err , c )
return
}
} else {
//获取所有下级
var orgSun overallhandle . AllSunList [ int64 ]
orgSun . GetAllSunOrg ( orgCont . Id )
orgSun . SunList = append ( orgSun . SunList , orgCont . Id )
err = overall . CONSTANT_DB_HR . Model ( & models . AdministrativeOrganization { } ) . Where ( "`id` IN ? AND state BETWEEN ? AND ?" , orgSun . SunList , 1 , 2 ) . Updates ( editCont ) . Error
if err != nil {
overallhandle . Result ( 106 , err , c )
return
}
}
} else {
if requestData . IsTrue == 1 {
//获取所有下级
var orgSun overallhandle . AllSunList [ int64 ]
orgSun . GetAllSunOrg ( orgCont . Id )
orgSun . SunList = append ( orgSun . SunList , orgCont . Id )
var curryMan int64
overall . CONSTANT_DB_HR . Model ( & models . PersonArchives { } ) . Select ( "`id`" ) . Where ( "admin_org IN ?" , orgSun . SunList ) . Count ( & curryMan )
if curryMan > 0 {
if requestData . Status == 1 {
var fatherOrg overallhandle . AllSunList [ int64 ]
fatherOrg . GetAllFatherOrg ( orgCont . Superior )
fatherOrg . SunList = append ( fatherOrg . SunList , orgCont . Id )
err = overall . CONSTANT_DB_HR . Model ( & models . AdministrativeOrganization { } ) . Where ( "`id` IN ? AND state BETWEEN ? AND ?" , fatherOrg . SunList , 1 , 2 ) . Updates ( editCont ) . Error
if err != nil {
overallhandle . Result ( 106 , err , c )
return
}
} else {
err = overall . CONSTANT_DB_HR . Model ( & models . AdministrativeOrganization { } ) . Where ( "`id` IN ? AND state BETWEEN ? AND ?" , orgSun . SunList , 1 , 2 ) . Updates ( editCont ) . Error
if err != nil {
overallhandle . Result ( 106 , err , c )
return
}
}
} else {
err = overall . CONSTANT_DB_HR . Where ( "`id` IN ?" , orgSun . SunList ) . Delete ( & models . AdministrativeOrganization { } ) . Error
if err != nil {
overallhandle . Result ( 106 , err , c )
return
}
}
} else {
if requestData . Status == 1 {
var fatherOrg overallhandle . AllSunList [ int64 ]
fatherOrg . GetAllFatherOrg ( orgCont . Superior )
fatherOrg . SunList = append ( fatherOrg . SunList , orgCont . Id )
err = overall . CONSTANT_DB_HR . Model ( & models . AdministrativeOrganization { } ) . Where ( "`id` IN ? AND state BETWEEN ? AND ?" , fatherOrg . SunList , 1 , 2 ) . Updates ( editCont ) . Error
if err != nil {
overallhandle . Result ( 106 , err , c )
return
}
} else {
//获取所有下级
var orgSun overallhandle . AllSunList [ int64 ]
orgSun . GetAllSunOrg ( orgCont . Id )
orgSun . SunList = append ( orgSun . SunList , orgCont . Id )
err = overall . CONSTANT_DB_HR . Model ( & models . AdministrativeOrganization { } ) . Where ( "`id` IN ? AND state BETWEEN ? AND ?" , orgSun . SunList , 1 , 2 ) . Updates ( editCont ) . Error
if err != nil {
overallhandle . Result ( 106 , err , c )
return
}
}
}
}
overallhandle . Result ( 0 , err , c )
}