package personnelapi
import (
"fmt"
"hr_server/models"
"hr_server/models/hrmodels"
"hr_server/overall"
"hr_server/overall/overallhandle"
"strconv"
"time"
"github.com/gin-gonic/gin"
)
/ *
*
@ 作者 : 秦东
@ 时间 : 2023 - 06 - 20 14 : 23 : 27
@ 功能 : 写入金蝶人员状态关键字
@ 参数
#
@ 返回值
#
@ 方法原型
#
* /
func WriteKingKeyWork ( name string , class int ) {
var kingdeeCont hrmodels . KingdeeEmptype
err := kingdeeCont . GetCont ( map [ string ] interface { } { "`name`" : name , "`leibie`" : class } , "`id`" )
if err == nil {
return
}
if kingdeeCont . Id != 0 {
return
}
kingdeeCont . Name = name
kingdeeCont . LeiBie = class
kingdeeCont . Time = time . Now ( ) . Unix ( )
overall . CONSTANT_DB_HR . Create ( & kingdeeCont )
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2023 - 06 - 20 15 : 05 : 11
@ 功能 : 写入员工入职离职时间
@ 参数
#
@ 返回值
#
@ 方法原型
#
* /
func EmployeeOnboardingAndResignation ( userKey int64 , changetype , starttime string , weiYi bool ) {
entryList := [ ] string { "预入职" , "员工初始化" } //入职关键字
zhuanZheng := [ ] string { "转正" } //转正关键字
depart := [ ] string { "预离职" , "离职" , "批准辞职" , "擅自离职" , "即辞即走" , "辞退" , "培训期间离职" } //离职关键字
contract := [ ] string { "合同到期" } //离职关键字
retire := [ ] string { "退休" } //退休
if starttime != "" {
var manageDate overallhandle . DateTimeTotimes
manageDate . BaisStrToTime ( starttime )
where := overallhandle . MapOut ( )
where [ "`userid`" ] = userKey
if overallhandle . IsInTrue [ string ] ( changetype , entryList ) {
//新入职
var newEntry hrmodels . UserEmpOnbRes
err := newEntry . GetCont ( where , "`entry_time`" )
if err != nil {
newEntry . UserId = userKey
newEntry . EntryTime = manageDate . AllTime
if weiYi {
newEntry . LeaveDate = manageDate . AllTime
}
newEntry . Time = time . Now ( ) . Unix ( )
overall . CONSTANT_DB_HR . Create ( & newEntry )
} else {
if manageDate . AllTime != newEntry . EntryTime {
editCont := overallhandle . MapOut ( )
editCont [ "`entry_time`" ] = manageDate . AllTime
if weiYi {
editCont [ "`leave_date`" ] = manageDate . AllTime
}
editCont [ "`time`" ] = time . Now ( ) . Unix ( )
var newEditEntry hrmodels . UserEmpOnbRes
newEditEntry . EiteCont ( where , editCont )
}
}
}
if overallhandle . IsInTrue [ string ] ( changetype , zhuanZheng ) {
//转正
var newZhuanZheng hrmodels . UserEmpOnbRes
err := newZhuanZheng . GetCont ( where , "`zhuan_zheng`" )
if err != nil {
newZhuanZheng . UserId = userKey
newZhuanZheng . EntryTime = manageDate . AllTime
newZhuanZheng . Time = time . Now ( ) . Unix ( )
overall . CONSTANT_DB_HR . Create ( & newZhuanZheng )
} else {
if manageDate . AllTime != newZhuanZheng . EntryTime {
editCont := overallhandle . MapOut ( )
editCont [ "`zhuan_zheng`" ] = manageDate . AllTime
editCont [ "`time`" ] = time . Now ( ) . Unix ( )
var newEditZhuanZheng hrmodels . UserEmpOnbRes
newEditZhuanZheng . EiteCont ( where , editCont )
}
}
}
if overallhandle . IsInTrue [ string ] ( changetype , depart ) {
//离职
var newDepart hrmodels . UserEmpOnbRes
err := newDepart . GetCont ( where , "`leave_date`" )
if err != nil {
newDepart . UserId = userKey
newDepart . EntryTime = manageDate . AllTime
newDepart . Time = time . Now ( ) . Unix ( )
overall . CONSTANT_DB_HR . Create ( & newDepart )
} else {
if manageDate . AllTime != newDepart . EntryTime {
editCont := overallhandle . MapOut ( )
editCont [ "`leave_date`" ] = manageDate . AllTime
editCont [ "`time`" ] = time . Now ( ) . Unix ( )
var newEditDepart hrmodels . UserEmpOnbRes
newEditDepart . EiteCont ( where , editCont )
}
}
}
if overallhandle . IsInTrue [ string ] ( changetype , contract ) {
//合同到期
var newContract hrmodels . UserEmpOnbRes
err := newContract . GetCont ( where , "`contract_time`" )
if err != nil {
newContract . UserId = userKey
newContract . EntryTime = manageDate . AllTime
newContract . Time = time . Now ( ) . Unix ( )
overall . CONSTANT_DB_HR . Create ( & newContract )
} else {
if manageDate . AllTime != newContract . EntryTime {
editCont := overallhandle . MapOut ( )
editCont [ "`contract_time`" ] = manageDate . AllTime
editCont [ "`time`" ] = time . Now ( ) . Unix ( )
var newEditContract hrmodels . UserEmpOnbRes
newEditContract . EiteCont ( where , editCont )
}
}
}
if overallhandle . IsInTrue [ string ] ( changetype , retire ) {
//退休
var newRetire hrmodels . UserEmpOnbRes
err := newRetire . GetCont ( where , "`retire_time`" )
if err != nil {
newRetire . UserId = userKey
newRetire . EntryTime = manageDate . AllTime
newRetire . Time = time . Now ( ) . Unix ( )
overall . CONSTANT_DB_HR . Create ( & newRetire )
} else {
if manageDate . AllTime != newRetire . EntryTime {
editCont := overallhandle . MapOut ( )
editCont [ "`retire_time`" ] = manageDate . AllTime
editCont [ "`time`" ] = time . Now ( ) . Unix ( )
var newEditRetire hrmodels . UserEmpOnbRes
newEditRetire . EiteCont ( where , editCont )
}
}
}
}
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2024 - 01 - 26 10 : 18 : 34
@ 功能 : 当员工入职时间为空时从集团经历中获取最早入职时间
@ 参数
#
@ 返回值
#
@ 方法原型
#
* /
func GetInsetCommpyTime ( userKey int64 ) ( workTime int64 ) {
overall . CONSTANT_DB_HR . Model ( & models . InsideWorkHistory { } ) . Select ( "COALESCE(MIN(start_time), 0) AS beginTime" ) . Where ( "`key` = ?" , userKey ) . Find ( & workTime )
return
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2025 - 02 - 11 13 : 10 : 16
@ 功能 : 编辑个人行政组织关系
@ 参数
#
@ 返回值
#
@ 方法原型
#
* /
func SaveUserOfOrg ( manKeyNum int64 , contList [ ] insideHistoryer ) {
defer synPro . Done ( )
if len ( contList ) > 0 && manKeyNum > 0 {
//获取个人信息
var myCont models . PersonArchives
myCont . GetCont ( map [ string ] interface { } { "key" : manKeyNum } , "`company`" , "`maindeparment`" , "`admin_org`" , "`sun_main_deparment`" , "`position`" , "`teamid`" )
creatTime := time . Now ( ) . Unix ( )
//批量写入
var creadContList [ ] models . UserOrg
for _ , v := range contList {
var timeCont overallhandle . DateTimeTotimes
timeCont . BaisStrToTime ( v . EndTime )
if creatTime <= timeCont . AllTime {
var adminOrg OrgAndLevel
var creadCont models . UserOrg
creadCont . Userkey = manKeyNum //mment:员工唯一识别符;"`
if v . Company != "" {
var orgOne hrmodels . OrgCont
orgOne . GetCont ( map [ string ] interface { } { "`kingdeeid`" : v . Company } , "`id`" , "`level`" )
creadCont . Company = orgOne . Id //mment:所属公司;"`
if adminOrg . Level <= orgOne . Level {
adminOrg . Level = orgOne . Level
adminOrg . AdminOrg = orgOne . Id
}
}
if v . Department != "" {
var orgOneDerp hrmodels . OrgCont
orgOneDerp . GetCont ( map [ string ] interface { } { "`kingdeeid`" : v . Department } , "`id`" , "`level`" )
if adminOrg . Level <= orgOneDerp . Level {
adminOrg . Level = orgOneDerp . Level
adminOrg . AdminOrg = orgOneDerp . Id
}
}
if v . Workshop != "" {
var orgOneWorks hrmodels . OrgCont
orgOneWorks . GetCont ( map [ string ] interface { } { "`kingdeeid`" : v . Workshop } , "`id`" , "`level`" )
if adminOrg . Level <= orgOneWorks . Level {
adminOrg . Level = orgOneWorks . Level
adminOrg . AdminOrg = orgOneWorks . Id
}
}
if v . Group != "" {
var orgOneGrop hrmodels . OrgCont
orgOneGrop . GetCont ( map [ string ] interface { } { "`kingdeeid`" : v . Group } , "`id`" , "`level`" )
if adminOrg . Level <= orgOneGrop . Level {
adminOrg . Level = orgOneGrop . Level
adminOrg . AdminOrg = orgOneGrop . Id
}
}
creadCont . Orgid = adminOrg . AdminOrg //t:行政组织ID;"`
if v . Position != "" {
var postInfo models . Position
postInfo . GetCont ( map [ string ] interface { } { "`kingdeeid`" : v . Position } , "`id`" , "`name`" )
creadCont . Position = postInfo . Id //comment:职位;"`
}
// creadCont.TeamsId = //mment:班组Id;"`
if v . StartTime != "" {
var timeCont overallhandle . DateTimeTotimes
timeCont . BaisStrToTime ( v . StartTime )
creadCont . StartTime = timeCont . AllTime
}
if v . AssignType == "主职" {
creadCont . AssignType = 1 //comment:1:主职;2:兼职"`
} else {
creadCont . AssignType = 2 //comment:1:主职;2:兼职"`
}
creadCont . Time = creatTime //编辑时间;"`
creadContList = append ( creadContList , creadCont )
}
}
if len ( creadContList ) > 0 {
//1、清空任职记录
overall . CONSTANT_DB_HR . Where ( "`userKey` = ?" , manKeyNum ) . Delete ( & models . UserOrg { } )
overall . CONSTANT_HRSERVER_DATABASE . Where ( "`userKey` = ?" , manKeyNum ) . Delete ( & models . UserOrg { } )
for _ , v := range creadContList {
var nId int64
overall . CONSTANT_DB_HR . Model ( & models . UserOrg { } ) . Select ( "`id`" ) . Where ( "`userKey` = ? AND `company` = ? AND `orgid` = ? AND `position` = ?" , manKeyNum , v . Company , v . Orgid , v . Position ) . First ( & nId )
if nId == 0 {
overall . CONSTANT_DB_HR . Create ( & v )
}
var wId int64
overall . CONSTANT_HRSERVER_DATABASE . Model ( & models . UserOrg { } ) . Select ( "`id`" ) . Where ( "`userKey` = ? AND `company` = ? AND `orgid` = ? AND `position` = ?" , manKeyNum , v . Company , v . Orgid , v . Position ) . First ( & wId )
if wId == 0 {
overall . CONSTANT_HRSERVER_DATABASE . Create ( & v )
}
}
}
}
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2025 - 02 - 11 14 : 28 : 37
@ 功能 : 员工行政组织关系
@ 参数
#
@ 返回值
#
@ 方法原型
#
* /
func ( s * StaffApi ) UserAboutOrgListNew ( c * gin . Context ) {
var requestData overallhandle . ConstId
err := c . ShouldBindJSON ( & requestData )
if err != nil {
overallhandle . Result ( 100 , err , c )
return
}
sendMap , _ := GetUesrOffice ( requestData . Id )
overallhandle . Result ( 0 , sendMap , c )
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2025 - 02 - 11 15 : 02 : 59
@ 功能 : 获取任职列表
* /
func GetUesrOffice ( userKey interface { } ) ( sendMap [ ] map [ string ] interface { } , err error ) {
var workHistory [ ] UserOfOrgInfo
err = overall . CONSTANT_DB_HR . Where ( "`userKey` = ?" , userKey ) . Order ( "`assignType` ASC" ) . Order ( "`startTime` DESC" ) . Find ( & workHistory ) . Error
if err != nil {
return
}
// var sendMap []map[string]interface{}
for _ , v := range workHistory {
sendInfo := overallhandle . MapOut ( )
sendInfo [ "id" ] = strconv . FormatInt ( v . Id , 10 )
sendInfo [ "userKey" ] = strconv . FormatInt ( v . Userkey , 10 )
sendInfo [ "company" ] = strconv . FormatInt ( v . Company , 10 )
sendInfo [ "orgid" ] = strconv . FormatInt ( v . Orgid , 10 )
sendInfo [ "position" ] = strconv . FormatInt ( v . Position , 10 )
sendInfo [ "teamsId" ] = strconv . FormatInt ( v . TeamsId , 10 )
sendInfo [ "startTime" ] = strconv . FormatInt ( v . StartTime , 10 )
sendInfo [ "assigntype" ] = v . AssignType
if v . Position != 0 {
var postInfo models . Position
postInfo . GetCont ( map [ string ] interface { } { "`id`" : v . Position } , "`name`" )
sendInfo [ "postname" ] = postInfo . Name
}
if v . Orgid != 0 {
var fullOegName OrgFullName
fullOegName . DiGuiOrgName ( v . Orgid )
sendInfo [ "orgallname" ] = fullOegName . Name
}
sendInfo [ "starttimeing" ] = overallhandle . UnixTimeToDay ( v . StartTime , 4 )
sendInfo [ "time" ] = overallhandle . UnixTimeToDay ( v . Time , 4 )
sendMap = append ( sendMap , sendInfo )
}
return
}
/ *
*
@ 作者 : 秦东
@ 时间 : 2025 - 02 - 11 14 : 45 : 11
@ 功能 : 递归获取行政组织名称
@ 行政组织Id orgId
* /
func ( o * OrgFullName ) DiGuiOrgName ( orgId int64 ) {
var orgOneGrop hrmodels . OrgCont
orgOneGrop . GetCont ( map [ string ] interface { } { "`id`" : orgId } , "`name`" , "`superior`" , "`level`" )
if orgOneGrop . Name != "" {
if o . Name != "" {
o . Name = fmt . Sprintf ( "%v/%v" , orgOneGrop . Name , o . Name )
} else {
o . Name = fmt . Sprintf ( " %v" , orgOneGrop . Name )
}
}
if orgOneGrop . Level > 3 {
if orgOneGrop . Superior != 0 {
o . DiGuiOrgName ( orgOneGrop . Superior )
}
}
}