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