package personnelapi
import (
"fmt"
"hr_server/models"
"hr_server/models/hrmodels"
"hr_server/overall"
"hr_server/overall/overallhandle"
"time"
"github.com/gin-gonic/gin"
)
/ *
*
@ 作者 : 秦东
@ 时间 : 2023 - 06 - 29 15 : 10 : 35
@ 功能 : 离职率
@ 参数
#
@ 返回值
#
@ 方法原型
#
* /
func ( s * StaffApi ) DimissionRate ( c * gin . Context ) {
var requestData TurnoverRate
err := c . ShouldBindJSON ( & requestData )
if err != nil {
requestData . Id = 313
}
if requestData . Id == 0 {
requestData . Id = 313
}
currentTime := time . Now ( ) . Unix ( )
statisticalTime := currentTime
if requestData . Time != "" {
var timeCont overallhandle . DateTimeTotimes
timeCont . BaisStrToTime ( requestData . Time )
statisticalTime = timeCont . AllTime
}
//行政组织
var orgList [ ] models . AdministrativeOrganization
err = overall . CONSTANT_DB_HR . Model ( & models . AdministrativeOrganization { } ) . Select ( "`id`,`name`" ) . Where ( "`state` = 1 AND `superior` = ?" , requestData . Id ) . Order ( "`sort` ASC" ) . Find ( & orgList ) . Error
if err != nil {
overallhandle . Result ( 107 , err , c )
return
}
currentYear := overallhandle . ComputingTime ( statisticalTime , 1 )
currentMonths := overallhandle . ComputingTime ( statisticalTime , 3 )
// var i int64
if currentYear != overallhandle . ComputingTime ( currentTime , 1 ) {
currentMonths = 12
}
var calRateCont CalTurRateContBlack
calRateCont . CurrentOrgId = requestData . Id
for _ , v := range orgList { //行政组织
calRateCont . Dfg ( currentYear , currentMonths , v )
}
fmt . Printf ( "行政组织总数----->%v----->%v\n" , len ( orgList ) , len ( calRateCont . List ) )
overallhandle . Result ( 0 , calRateCont , c )
}
func ( c * CalTurRateContBlack ) Dfg ( years , months int64 , orgCont models . AdministrativeOrganization ) {
// defer synPro.Done()
var contData SendCalTurRateCont
contData . OrgId = orgCont . Id
contData . OrgName = orgCont . Name
var sunAry overallhandle . AllSunList [ int64 ]
sunAry . GetAllSunOrg ( orgCont . Id )
var sumPeople int64
overall . CONSTANT_DB_HR . Model ( & models . PersonArchives { } ) . Select ( "`id`" ) . Where ( "admin_org IN ? AND emp_type BETWEEN ? AND ?" , sunAry . SunList , 1 , 10 ) . Count ( & sumPeople )
var i int64
for i = 1 ; i <= months ; i ++ {
var timeCont overallhandle . DateTimeTotimes
timeCont . BaisStrToTime ( fmt . Sprintf ( "%v-%v-01 00:00:00" , years , i ) )
// fmt.Printf("时间--->%v\n", timeCont.Time)
hjsdk := overallhandle . UnixTimeToDay ( timeCont . AllTime , 14 )
startTime , endTime := overallhandle . GetAppointMonthStarAndEndTimeEs ( hjsdk )
var reatCount int64
overall . CONSTANT_DB_HR . Model ( & hrmodels . UserEmp { } ) . Select ( "`id`" ) . Where ( "admin_org IN ? AND leave_date BETWEEN ? AND ?" , sunAry . SunList , startTime , endTime ) . Count ( & reatCount )
beiChuShu := sumPeople + reatCount
if beiChuShu == 0 {
contData . Odds = append ( contData . Odds , 0 )
} else {
reatVal := overallhandle . DecimalEs ( ( float64 ( reatCount ) / float64 ( beiChuShu ) ) * 100 , 3 )
contData . Odds = append ( contData . Odds , reatVal )
}
}
c . List = append ( c . List , contData )
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2023 - 06 - 29 16 : 10 : 50
@ 功能 : 根据行政组织计算时间内的离职率
@ 参数
#
@ 返回值
#
@ 方法原型
#
* /
func ( c * CalTurRateCont ) CalculateTurnoverRate ( years , months int64 , orgCont models . AdministrativeOrganization ) {
// defer synPro.Done()
var calCont CalculateTurnoverRateCont
calCont . OrgId = orgCont . Id
calCont . OrgName = orgCont . Name
calCont . Months = months
calCont . Odds = months
c . List = append ( c . List , calCont )
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2023 - 07 - 01 0 9 : 36 : 07
@ 功能 : 获取单一行政组织离职率
@ 参数
#
@ 返回值
#
@ 方法原型
#
* /
func ( s * StaffApi ) GetOenOrgDimRate ( c * gin . Context ) {
userKey := c . Request . Header . Get ( "user-key" )
myCont , myErr := overallhandle . GetCreetUserCont ( userKey )
var requestData TurnoverRate
err := c . ShouldBindJSON ( & requestData )
if err != nil {
if myErr != nil {
requestData . Id = 309
} else {
requestData . Id = myCont . Company
}
}
if requestData . Id == 0 {
if myErr != nil {
requestData . Id = 309
} else {
requestData . Id = myCont . Company
}
}
fmt . Printf ( "获得行政组织--->%v\n--->%v\n--->%v\n" , userKey , myCont , requestData )
currentTime := time . Now ( ) . Unix ( )
statisticalTime := currentTime
if requestData . Time != "" {
var timeCont overallhandle . DateTimeTotimes
timeCont . BaisStrToTime ( requestData . Time )
statisticalTime = timeCont . AllTime
}
//行政组织
var orgList [ ] models . AdministrativeOrganization
err = overall . CONSTANT_DB_HR . Model ( & models . AdministrativeOrganization { } ) . Select ( "`id`,`name`" ) . Where ( "`state` = 1 AND `superior` = ?" , requestData . Id ) . Order ( "`sort` ASC" ) . Find ( & orgList ) . Error
if err != nil {
overallhandle . Result ( 107 , err , c )
return
}
currentYear := overallhandle . ComputingTime ( statisticalTime , 1 )
currentMonths := overallhandle . ComputingTime ( statisticalTime , 3 )
// var i int64
if currentYear != overallhandle . ComputingTime ( currentTime , 1 ) {
currentMonths = 12
}
var calRateCont CalTurRateContBlack
calRateCont . CurrentOrgId = requestData . Id
for _ , v := range orgList { //行政组织
calRateCont . Dfg ( currentYear , currentMonths , v )
}
fmt . Printf ( "行政组织总数----->%v----->%v\n" , len ( orgList ) , len ( calRateCont . List ) )
overallhandle . Result ( 0 , calRateCont , c )
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2023 - 07 - 01 14 : 0 8 : 40
@ 功能 : 获取公司指定年月的离职率
@ 参数
#
@ 返回值
#
@ 方法原型
#
* /
func ( s * StaffApi ) GetOrgTimeRate ( c * gin . Context ) {
userKey := c . Request . Header . Get ( "user-key" )
myCont , myErr := overallhandle . GetCreetUserCont ( userKey )
var requestData TurnoverRate
err := c . ShouldBindJSON ( & requestData )
if err != nil {
if myErr != nil {
requestData . Id = 309
} else {
requestData . Id = myCont . Company
}
}
if requestData . Id == 0 {
if myErr != nil {
requestData . Id = 309
} else {
requestData . Id = myCont . Company
}
}
//行政组织
var orgList [ ] models . AdministrativeOrganization
err = overall . CONSTANT_DB_HR . Model ( & models . AdministrativeOrganization { } ) . Select ( "`id`,`name`" ) . Where ( "`state` = 1 AND `superior` = ?" , requestData . Id ) . Order ( "`sort` ASC" ) . Find ( & orgList ) . Error
if err != nil {
overallhandle . Result ( 107 , err , c )
return
}
currentTime := time . Now ( ) . Unix ( )
hjsdk := overallhandle . UnixTimeToDay ( currentTime , 14 )
startTime , endTime := overallhandle . GetAppointMonthStarAndEndTimeEs ( hjsdk )
if requestData . Time != "" {
var timeCont overallhandle . DateTimeTotimes
timeCont . BaisStrToTime ( requestData . Time )
fmt . Printf ( "时间--->%v\n--->%v\n" , requestData . Time , timeCont . Time )
hjsdks := overallhandle . UnixTimeToDay ( timeCont . AllTime , 14 )
fmt . Printf ( "时间--222->%v\n" , hjsdks )
startTime , endTime = overallhandle . GetAppointMonthStarAndEndTimeEs ( hjsdks )
}
var calRateCont SendPicRateInfo
calRateCont . CurrentOrgId = requestData . Id
for _ , v := range orgList { //行政组织
calRateCont . MonthsRate ( startTime , endTime , v )
}
overallhandle . Result ( 0 , calRateCont , c )
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2023 - 07 - 01 14 : 17 : 14
@ 功能 : 计算指定月份离职率
@ 参数
#
@ 返回值
#
@ 方法原型
#
* /
func ( c * SendPicRateInfo ) MonthsRate ( startTime , endTime int64 , orgCont models . AdministrativeOrganization ) {
var contData SendPicRateCont
contData . OrgId = orgCont . Id
contData . OrgName = orgCont . Name
var sunAry overallhandle . AllSunList [ int64 ]
sunAry . GetAllSunOrg ( orgCont . Id )
var sumPeople int64
overall . CONSTANT_DB_HR . Model ( & models . PersonArchives { } ) . Select ( "`id`" ) . Where ( "admin_org IN ? AND emp_type BETWEEN ? AND ?" , sunAry . SunList , 1 , 10 ) . Count ( & sumPeople )
var reatCount int64
overall . CONSTANT_DB_HR . Model ( & hrmodels . UserEmp { } ) . Select ( "`id`" ) . Where ( "admin_org IN ? AND leave_date BETWEEN ? AND ?" , sunAry . SunList , startTime , endTime ) . Count ( & reatCount )
beiChuShu := sumPeople + reatCount
if beiChuShu == 0 {
contData . Odds = 0
} else {
reatVal := overallhandle . DecimalEs ( ( float64 ( reatCount ) / float64 ( beiChuShu ) ) * 100 , 3 )
contData . Odds = reatVal
}
c . List = append ( c . List , contData )
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2023 - 07 - 01 15 : 49 : 31
@ 功能 : 获取学历结构
@ 参数
#
@ 返回值
#
@ 方法原型
#
* /
func ( s * StaffApi ) GetEducationalStructure ( c * gin . Context ) {
userKey := c . Request . Header . Get ( "user-key" )
myCont , myErr := overallhandle . GetCreetUserCont ( userKey )
var requestData overallhandle . PublicId [ int64 ]
err := c . ShouldBindJSON ( & requestData )
if err != nil {
if myErr != nil {
requestData . Id = 309
} else {
requestData . Id = myCont . Company
}
}
if requestData . Id == 0 {
if myErr != nil {
requestData . Id = 309
} else {
requestData . Id = myCont . Company
}
}
var sunAry overallhandle . AllSunList [ int64 ]
sunAry . GetAllSunOrg ( requestData . Id )
//学历列表
var eduStruListCont [ ] hrmodels . EducationalStructure
err = overall . CONSTANT_DB_HR . Distinct ( "`number`,MAX(`education`) as educationmax " ) . Where ( "admin_org IN ?" , sunAry . SunList ) . Group ( "`number`" ) . Find ( & eduStruListCont ) . Error
if err != nil {
overallhandle . Result ( 0 , err , c )
}
a1 := 0
a2 := 0
a3 := 0
a4 := 0
a5 := 0
a6 := 0
a7 := 0
a8 := 0
a9 := 0
a10 := 0
a11 := 0
a12 := 0
for _ , v := range eduStruListCont {
switch v . EducationMax {
case 1 :
a1 ++
case 2 :
a2 ++
case 3 :
a3 ++
case 4 :
a4 ++
case 5 :
a5 ++
case 6 :
a6 ++
case 7 :
a7 ++
case 8 :
a8 ++
case 9 :
a9 ++
case 10 :
a10 ++
case 11 :
a11 ++
case 12 :
a12 ++
default :
}
}
var sendEducStruCont [ ] EducStruCont
// sumPie := a1 + a2 + a3 + a4 + a5 + a6 + a7 + a8 + a9 + a10 + a11 + a12
if a1 != 0 {
// var proportion float64
// if sumPie != 0 {
// proportion = overallhandle.DecimalEs((float64(a1)/float64(sumPie))*100, 3)
// }
// sendEducStruCont = append(sendEducStruCont, EducStruCont{Education: "初中及以下", Percentage: proportion})
sendEducStruCont = append ( sendEducStruCont , EducStruCont { Education : "初中及以下" , Percentage : float64 ( a1 ) } )
}
if a2 != 0 {
// var proportion float64
// if sumPie != 0 {
// proportion = overallhandle.DecimalEs((float64(a2)/float64(sumPie))*100, 3)
// }
// sendEducStruCont = append(sendEducStruCont, EducStruCont{Education: "中专", Percentage: proportion})
sendEducStruCont = append ( sendEducStruCont , EducStruCont { Education : "中专" , Percentage : float64 ( a2 ) } )
}
if a3 != 0 {
// var proportion float64
// if sumPie != 0 {
// proportion = overallhandle.DecimalEs((float64(a3)/float64(sumPie))*100, 3)
// }
// sendEducStruCont = append(sendEducStruCont, EducStruCont{Education: "高中", Percentage: proportion})
sendEducStruCont = append ( sendEducStruCont , EducStruCont { Education : "高中" , Percentage : float64 ( a3 ) } )
}
if a4 != 0 {
// var proportion float64
// if sumPie != 0 {
// proportion = overallhandle.DecimalEs((float64(a4)/float64(sumPie))*100, 3)
// }
// sendEducStruCont = append(sendEducStruCont, EducStruCont{Education: "中技", Percentage: proportion})
sendEducStruCont = append ( sendEducStruCont , EducStruCont { Education : "中技" , Percentage : float64 ( a4 ) } )
}
if a5 != 0 {
// var proportion float64
// if sumPie != 0 {
// proportion = overallhandle.DecimalEs((float64(a5)/float64(sumPie))*100, 3)
// }
// sendEducStruCont = append(sendEducStruCont, EducStruCont{Education: "高技", Percentage: proportion})
sendEducStruCont = append ( sendEducStruCont , EducStruCont { Education : "高技" , Percentage : float64 ( a5 ) } )
}
if a6 != 0 {
// var proportion float64
// if sumPie != 0 {
// proportion = overallhandle.DecimalEs((float64(a6)/float64(sumPie))*100, 3)
// }
// sendEducStruCont = append(sendEducStruCont, EducStruCont{Education: "函数专科", Percentage: proportion})
sendEducStruCont = append ( sendEducStruCont , EducStruCont { Education : "函数专科" , Percentage : float64 ( a6 ) } )
}
if a7 != 0 {
// var proportion float64
// if sumPie != 0 {
// proportion = overallhandle.DecimalEs((float64(a7)/float64(sumPie))*100, 3)
// }
// sendEducStruCont = append(sendEducStruCont, EducStruCont{Education: "大学专科", Percentage: proportion})
sendEducStruCont = append ( sendEducStruCont , EducStruCont { Education : "大学专科" , Percentage : float64 ( a7 ) } )
}
if a8 != 0 {
// var proportion float64
// if sumPie != 0 {
// proportion = overallhandle.DecimalEs((float64(a8)/float64(sumPie))*100, 3)
// }
// sendEducStruCont = append(sendEducStruCont, EducStruCont{Education: "函数本科", Percentage: proportion})
sendEducStruCont = append ( sendEducStruCont , EducStruCont { Education : "函数本科" , Percentage : float64 ( a8 ) } )
}
if a9 != 0 {
// var proportion float64
// if sumPie != 0 {
// proportion = overallhandle.DecimalEs((float64(a9)/float64(sumPie))*100, 3)
// }
// sendEducStruCont = append(sendEducStruCont, EducStruCont{Education: "大学本科", Percentage: proportion})
sendEducStruCont = append ( sendEducStruCont , EducStruCont { Education : "大学本科" , Percentage : float64 ( a9 ) } )
}
if a10 != 0 {
// var proportion float64
// if sumPie != 0 {
// proportion = overallhandle.DecimalEs((float64(a10)/float64(sumPie))*100, 3)
// }
// sendEducStruCont = append(sendEducStruCont, EducStruCont{Education: "硕士研究生", Percentage: proportion})
sendEducStruCont = append ( sendEducStruCont , EducStruCont { Education : "硕士研究生" , Percentage : float64 ( a10 ) } )
}
if a11 != 0 {
// var proportion float64
// if sumPie != 0 {
// proportion = overallhandle.DecimalEs((float64(a11)/float64(sumPie))*100, 3)
// }
// sendEducStruCont = append(sendEducStruCont, EducStruCont{Education: "博士研究生", Percentage: proportion})
sendEducStruCont = append ( sendEducStruCont , EducStruCont { Education : "博士研究生" , Percentage : float64 ( a11 ) } )
}
if a12 != 0 {
// var proportion float64
// if sumPie != 0 {
// proportion = overallhandle.DecimalEs((float64(a12)/float64(sumPie))*100, 3)
// }
// sendEducStruCont = append(sendEducStruCont, EducStruCont{Education: "专家、教授", Percentage: proportion})
sendEducStruCont = append ( sendEducStruCont , EducStruCont { Education : "专家、教授" , Percentage : float64 ( a12 ) } )
}
overallhandle . Result ( 0 , sendEducStruCont , c )
}