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) } } }