package personnelapi
import (
"hr_server/models"
"hr_server/models/hrmodels"
"hr_server/models/workgroup"
"hr_server/overall"
"hr_server/overall/overallhandle"
"sort"
"strconv"
"strings"
"github.com/gin-gonic/gin"
)
/ *
*
@ 作者 : 秦东
@ 时间 : 2024 - 05 - 24 13 : 55 : 03
@ 功能 : 根据行政组织ID获取当前行政组织人员及子行政组织
@ 参数
#
@ 返回值
#
@ 方法原型
#
* /
func ( s * StaffApi ) GainSunOrgAndUser ( c * gin . Context ) {
var requestData overallhandle . ConstId
err := c . ShouldBindJSON ( & requestData )
if err != nil {
requestData . Id = "313"
}
if requestData . Id == "" {
requestData . Id = "313"
}
var sendInfo OrgGainPeopel
orgIdInt , _ := strconv . ParseInt ( requestData . Id , 10 , 64 )
synPro . Add ( 1 )
go sendInfo . GainAllFatherOrg ( orgIdInt )
synPro . Add ( 1 )
go sendInfo . GainOrgPeopel ( orgIdInt )
synPro . Add ( 1 )
go sendInfo . GainOrgSunOrgList ( orgIdInt )
synPro . Wait ( )
var sendData SendOrgGainPeopel
sendData . OrgList = sendInfo . OrgList
sendData . OrgUserList = append ( sendData . OrgUserList , sendInfo . SunOrgList ... )
sendData . OrgUserList = append ( sendData . OrgUserList , sendInfo . UserList ... )
overallhandle . Result ( 0 , sendData , c )
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2024 - 05 - 24 14 : 33 : 28
@ 功能 : 获取当前行政组织直接子级行政组织
@ 参数
#
@ 返回值
#
@ 方法原型
#
* /
func ( o * OrgGainPeopel ) GainOrgSunOrgList ( orgId int64 ) {
defer synPro . Done ( )
var orgList [ ] models . AdministrativeOrganization
overall . CONSTANT_DB_HR . Model ( & models . AdministrativeOrganization { } ) . Select ( "`id`,`name`" ) . Where ( "`state` = 1 AND `superior` = ?" , orgId ) . Find ( & orgList )
if len ( orgList ) > 0 {
for _ , v := range orgList {
var user UserOrgRole
user . Id = strconv . FormatInt ( v . Id , 10 )
user . Title = v . Name
user . Img = ""
user . IsPick = 2
user . Types = 2
o . SunOrgList = append ( o . SunOrgList , user )
}
}
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2024 - 05 - 24 14 : 23 : 46
@ 功能 : 获取当前行政组织下得人员信息
@ 参数
#
@ 返回值
#
@ 方法原型
#
* /
func ( o * OrgGainPeopel ) GainOrgPeopel ( orgId int64 ) {
defer synPro . Done ( )
var prople [ ] models . PersonArchives
err := overall . CONSTANT_DB_HR . Model ( & models . PersonArchives { } ) . Select ( "`key`,`number`,`name`,`icon`,`admin_org`,`icon_photo`" ) . Where ( "`admin_org` = ? AND `emp_type` BETWEEN ? AND ? " , orgId , 1 , 10 ) . Find ( & prople ) . Error
if err == nil && len ( prople ) > 0 {
for _ , v := range prople {
var user UserOrgRole
user . Id = strconv . FormatInt ( v . Key , 10 )
user . Title = v . Name
user . Img = v . Icon
if v . IconPhoto != "" {
user . Img = v . IconPhoto
}
user . IsPick = 2
user . Types = 1
o . UserList = append ( o . UserList , user )
}
}
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2024 - 05 - 24 14 : 04 : 20
@ 功能 : 获取所有父级行政组织
@ 参数
# orgId 行政组织ID
@ 返回值
#
@ 方法原型
#
* /
func ( o * OrgGainPeopel ) GainAllFatherOrg ( orgId int64 ) {
defer synPro . Done ( )
var sunAry overallhandle . AllSunList [ int64 ]
sunAry . GetAllParentOrg ( orgId , 2 )
sunAry . SunList = append ( sunAry . SunList , orgId )
if len ( sunAry . SunList ) > 0 {
var orgList [ ] hrmodels . OrgCont
err := overall . CONSTANT_DB_HR . Model ( & hrmodels . OrgCont { } ) . Select ( "`id`,`name`,`level`" ) . Where ( "`id` IN ?" , sunAry . SunList ) . Find ( & orgList ) . Error
if err == nil {
sort . Slice ( orgList , func ( i , j int ) bool {
return orgList [ i ] . Level < orgList [ j ] . Level
} )
for _ , v := range orgList {
var orgInfo OrgCrumb
orgInfo . Id = strconv . FormatInt ( v . Id , 10 )
orgInfo . Title = v . Name
o . OrgList = append ( o . OrgList , orgInfo )
}
}
}
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2024 - 05 - 27 0 8 : 33 : 0 9
@ 功能 : 搜索行政组织及人员
@ 参数
#
@ 返回值
#
@ 方法原型
#
* /
func ( s * StaffApi ) SearchOrgUser ( c * gin . Context ) {
var requestData overallhandle . NameOverall
err := c . ShouldBindJSON ( & requestData )
var sendData SendOrgGainPeopel
if err != nil {
overallhandle . Result ( 0 , sendData , c )
return
}
if requestData . Name == "" {
overallhandle . Result ( 0 , sendData , c )
return
}
var sendInfo OrgGainPeopel
synPro . Add ( 1 )
go sendInfo . SearchOrgCont ( requestData . Name )
synPro . Add ( 1 )
go sendInfo . SearchPeopleCont ( requestData . Name )
synPro . Wait ( )
sendData . OrgUserList = append ( sendData . OrgUserList , sendInfo . SunOrgList ... )
sendData . OrgUserList = append ( sendData . OrgUserList , sendInfo . UserList ... )
overallhandle . Result ( 0 , sendData , c )
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2024 - 05 - 27 0 8 : 51 : 49
@ 功能 : 搜索人员
@ 参数
#
@ 返回值
#
@ 方法原型
#
* /
func ( o * OrgGainPeopel ) SearchPeopleCont ( name string ) {
defer synPro . Done ( )
var prople [ ] models . PersonArchives
err := overall . CONSTANT_DB_HR . Model ( & models . PersonArchives { } ) . Select ( "`key`,`number`,`name`,`icon`,`admin_org`,`icon_photo`" ) . Where ( "(`name` Like ? OR `number` Like ?) AND `emp_type` BETWEEN ? AND ? " , "%" + name + "%" , "%" + name + "%" , 1 , 10 ) . Find ( & prople ) . Error
if err == nil && len ( prople ) > 0 {
for _ , v := range prople {
var user UserOrgRole
user . Id = strconv . FormatInt ( v . Key , 10 )
user . Title = v . Name
user . Img = v . Icon
if v . IconPhoto != "" {
user . Img = v . IconPhoto
}
user . IsPick = 2
user . Types = 1
o . UserList = append ( o . UserList , user )
}
}
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2024 - 05 - 27 0 8 : 40 : 51
@ 功能 : 搜索行政组织名称
@ 参数
# name 行政组织名称
@ 返回值
#
@ 方法原型
#
* /
func ( o * OrgGainPeopel ) SearchOrgCont ( name string ) {
defer synPro . Done ( )
var orgList [ ] hrmodels . OrgCont
overall . CONSTANT_DB_HR . Model ( & hrmodels . OrgCont { } ) . Select ( "`id`,`name`" ) . Where ( "`state` = 1 AND level > 3 AND `name` LIKE ?" , "%" + name + "%" ) . Find ( & orgList )
if len ( orgList ) > 0 {
for _ , v := range orgList {
var user UserOrgRole
user . Id = strconv . FormatInt ( v . Id , 10 )
user . Title = v . Name
user . Img = ""
user . IsPick = 2
user . Types = 2
o . SunOrgList = append ( o . SunOrgList , user )
}
}
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2025 - 04 - 03 10 : 36 : 25
@ 功能 : 人员列表
@ 参数
#
@ 返回值
#
@ 方法原型
#
* /
func ( s * StaffApi ) PeopleList ( c * gin . Context ) {
var requestData peopleList
c . ShouldBindJSON ( & requestData )
if requestData . Page < 0 {
requestData . Page = 1
}
if requestData . PageSize < 0 {
requestData . PageSize = 10
}
gormDb := overall . CONSTANT_DB_HR . Model ( & models . PersonArchives { } ) . Select ( "`id`" ) . Where ( "`number` NOT LIKE ?" , "%W%" )
if requestData . Number != "" { //工号
gormDb = gormDb . Where ( "number LIKE ?" , "%" + requestData . Number + "%" )
}
if requestData . Name != "" { //姓名
gormDb = gormDb . Where ( "name LIKE ?" , "%" + requestData . Name + "%" )
}
if requestData . HireClass != 0 { //雇佣类型
gormDb = gormDb . Where ( "hire_class = ?" , requestData . HireClass )
}
if requestData . Company != 0 { //所在公司
gormDb = gormDb . Where ( "company = ?" , requestData . Company )
}
if requestData . Position != 0 { //职位
gormDb = gormDb . Where ( "position = ?" , requestData . Position )
}
if len ( requestData . EmpType ) > 0 { //用工关系
gormDb = gormDb . Where ( "emp_type IN ?" , requestData . EmpType )
}
if requestData . Role != "" { //角色
gormDb = gormDb . Where ( "FIND_IN_SET(?,`role`)" , requestData . Role )
}
var banZu [ ] workgroup . TeamsRules
var ruleTypeId int64
var ruleTypeName string
//查询行政组织
if requestData . AdminOrg != 0 {
var sunAry overallhandle . AllSunList [ int64 ]
sunAry . GetAllSunOrg ( requestData . AdminOrg )
sunAry . SunList = append ( sunAry . SunList , requestData . AdminOrg ) //获取本行政组织及子行政组织
gormDb = gormDb . Where ( "admin_org IN ?" , sunAry . SunList ) //获取本组织下的数据
if requestData . Days != "" { //判断有无日期
menuCont , _ , err := CureeRunRules ( requestData . AdminOrg ) //确定当前行政组织用哪一个轮询规则
if err != nil {
overallhandle . Result ( 200 , err , c , "此行政组织还未设定班组轮询规则!" )
return
}
banZu , err = menuCont . CountOrgTeamsIsDay ( requestData . Days ) //获取轮询班组
if err == nil {
var dayTeamsId [ ] int64 //获取当天有人员上班的班组
for _ , v := range banZu {
if v . CycleWorkTime != 0 && ! overallhandle . IsInTrue ( v . TeamsId , dayTeamsId ) {
dayTeamsId = append ( dayTeamsId , v . TeamsId )
}
ruleTypeId = v . RuleTypeId
ruleTypeName = v . RuleTypeName
}
//判断是否按班组查询
if requestData . Teamid != 0 {
if overallhandle . IsInTrue ( requestData . Teamid , dayTeamsId ) {
gormDb = gormDb . Where ( "teamid = ?" , requestData . Teamid )
} else {
overallhandle . Result ( 200 , err , c , "当天此行政组织内的此班组处于休息状态!" )
return
}
} else {
if len ( dayTeamsId ) > 0 {
gormDb = gormDb . Where ( "teamid IN ?" , dayTeamsId )
}
}
} else {
if requestData . Teamid != 0 {
gormDb = gormDb . Where ( "teamid = ?" , requestData . Teamid )
}
}
} else {
if requestData . Teamid != 0 {
gormDb = gormDb . Where ( "teamid = ?" , requestData . Teamid )
}
}
} else {
if requestData . Teamid != 0 { //班组
gormDb = gormDb . Where ( "teamid = ?" , requestData . Teamid )
}
}
//查询共多少数据
var total int64
totalErr := gormDb . Count ( & total ) . Error
if totalErr != nil {
total = 0
}
var idAry [ ] int64
gormDbs := overallhandle . PageTurningSettings ( gormDb , requestData . Page , requestData . PageSize )
err := gormDbs . Find ( & idAry ) . Error
var positionAry [ ] peopleManOutList
if err != nil || len ( idAry ) < 1 {
overallhandle . ResultList ( 0 , requestData . Page , requestData . PageSize , total , int64 ( len ( positionAry ) ) , positionAry , c )
return
}
var manContList [ ] models . ManCont
err = overall . CONSTANT_DB_HR . Where ( "`id` IN ?" , idAry ) . Find ( & manContList ) . Error
if err != nil || len ( manContList ) < 1 {
overallhandle . ResultList ( 0 , requestData . Page , requestData . PageSize , total , int64 ( len ( positionAry ) ) , positionAry , c )
return
}
// fmt.Printf("banzu--->%v\n\n\n", banZu)
// return
//计算人员属性
var guoDuMan [ ] models . ManCont
var peopelList ManTableList
for i , v := range manContList {
if ( i + 1 ) % 50 == 0 {
synPro . Add ( 1 )
go peopelList . SnycChundSub ( guoDuMan , requestData . AdminOrg , requestData . Days )
guoDuMan = [ ] models . ManCont { }
} else {
guoDuMan = append ( guoDuMan , v )
}
}
if len ( guoDuMan ) > 0 {
synPro . Add ( 1 )
go peopelList . SnycChundSub ( guoDuMan , requestData . AdminOrg , requestData . Days )
guoDuMan = [ ] models . ManCont { }
}
synPro . Wait ( )
positionAry = peopelList . List
sendExpand := overallhandle . MapOut ( )
var sendRuleInfo DaysTeamsRuler
if len ( banZu ) > 0 {
sendRuleInfo . RuleTypeId = strconv . FormatInt ( ruleTypeId , 10 )
sendRuleInfo . RuleTypeName = ruleTypeName
// var workTimePer []workgroup.WorkingTimePeriod
// overall.CONSTANT_DB_HR.Where("`type_id` = ?", ruleTypeId).Find(&workTimePer)
// var teamRuleMap []DaysTeamsRulerInfo
// if len(workTimePer) > 0 {
// for _, v := range workTimePer {
// for _, bv := range banZu {
// if v.Id == bv.CycleWorkTime {
// var teamRuleInfo DaysTeamsRulerInfo
// teamRuleInfo.TeamsId = strconv.FormatInt(bv.TeamsId, 10) //生产班组ID
// teamRuleInfo.TeamsName = bv.TeamsName //生产班组名称
// teamRuleInfo.RuleId = strconv.FormatInt(v.Id, 10) //规则ID
// teamRuleInfo.RuleName = v.Name //规则名称
// teamRuleInfo.StartTime = v.StartTime //开始时间
// teamRuleInfo.EndTime = v.EndTime //结束时间
// teamRuleMap = append(teamRuleMap, teamRuleInfo)
// }
// }
// }
// }
var teamRuleMap [ ] DaysTeamsRulerInfo
for _ , bv := range banZu {
ruleSetUp := GetRuleSetup ( bv . CycleWorkTime )
var teamRuleInfo DaysTeamsRulerInfo
teamRuleInfo . TeamsId = strconv . FormatInt ( bv . TeamsId , 10 ) //生产班组ID
teamRuleInfo . TeamsName = bv . TeamsName //生产班组名称
teamRuleInfo . RuleId = strconv . FormatInt ( ruleSetUp . Id , 10 ) //规则ID
teamRuleInfo . RuleName = ruleSetUp . Name //规则名称
teamRuleInfo . StartTime = ruleSetUp . StartTime //开始时间
teamRuleInfo . EndTime = ruleSetUp . EndTime //结束时间
teamRuleInfo . List = CurrentTreamPeopel ( bv . TeamsId , positionAry )
teamRuleMap = append ( teamRuleMap , teamRuleInfo )
}
sort . Slice ( teamRuleMap , func ( i , j int ) bool {
return teamRuleMap [ i ] . StartTime < teamRuleMap [ j ] . StartTime
} )
sendRuleInfo . List = teamRuleMap
}
sendExpand [ "ruler" ] = sendRuleInfo
overallhandle . ResultList ( 0 , requestData . Page , requestData . PageSize , total , int64 ( len ( positionAry ) ) , positionAry , c , sendExpand )
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2025 - 04 - 03 14 : 15 : 29
@ 功能 : 协程处理事务
* /
func ( m * ManTableList ) SnycChundSub ( list [ ] models . ManCont , orgId int64 , days string ) {
defer synPro . Done ( )
for _ , v := range list {
//计算调班人员数据
if days != "" {
v = Shiftdjustment ( days , v )
// fmt.Printf("\n\n\n\n结果:%v\n\n\n\n", v)
}
var staffInfo peopleManOutList
staffInfo . ManCont = v
var getSpur models . Position
getWhe := overallhandle . MapOut ( )
if v . Position != 0 {
getWhe [ "id" ] = v . Position
getSpur . GetCont ( getWhe , "name" , "person_in_charge" )
}
staffInfo . PositionName = getSpur . Name
staffInfo . KeyStr = strconv . FormatInt ( v . Key , 10 )
//公司
if v . Company != 0 {
staffInfo . CompanyName = OrgContOut ( v . Company )
}
//主部门
if v . MainDeparment != 0 {
staffInfo . MainDeparmentName = OrgContOut ( v . MainDeparment )
}
//二级著部门
if v . SunMainDeparment != 0 {
staffInfo . SunMainDeparmentName = OrgContOut ( v . SunMainDeparment )
}
var orgContTypeCont models . OrgContType
orgContTypeCont . GetCont ( map [ string ] interface { } { "`id`" : v . AdminOrg } , "`name`" , "`level`" )
if orgContTypeCont . Level >= 6 {
staffInfo . WorkPostName = orgContTypeCont . Name
}
staffInfo . PersonInCharge = 2
if v . PersonInCharge == 1 {
orgResList := strings . Split ( v . ResponsibleDepartment , "," )
if len ( orgResList ) > 0 {
orgIdStr := strconv . FormatInt ( orgId , 10 )
if overallhandle . IsInTrue [ string ] ( orgIdStr , orgResList ) == true {
staffInfo . PersonInCharge = 1
}
}
}
sendMap , _ := GetUesrOffice ( v . Key )
staffInfo . OfficeList = sendMap
m . List = append ( m . List , staffInfo )
}
}
// 获取当前班组的人员
func CurrentTreamPeopel ( teamsId int64 , manList [ ] peopleManOutList ) ( teamsManList [ ] string ) {
for _ , v := range manList {
if v . TeamId == teamsId {
teamsManList = append ( teamsManList , v . Number )
}
}
return
}
// 获取规则设定
func GetRuleSetup ( id int64 ) ( periodInfo workgroup . WorkingTimePeriod ) {
overall . CONSTANT_DB_HR . Where ( "`id` = ?" , id ) . First ( & periodInfo )
return
}
// 输出行政组织信息
func OrgContOut ( orgId int64 ) string {
var getSpurDepart models . AdministrativeOrganization
getWheDepart := overallhandle . MapOut ( )
getWheDepart [ "id" ] = orgId
getSpurDepart . GetCont ( getWheDepart , "name" )
return getSpurDepart . Name
}