HR管理系统
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

404 lines
11 KiB

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