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.

428 lines
11 KiB

package shiyan
import (
"fmt"
"hr_server/api/jindie_docking/dockingorganization"
3 years ago
"hr_server/api/version1/personnelapi"
"hr_server/middleware/snowflake"
4 years ago
"hr_server/models"
"hr_server/overall"
"hr_server/overall/overallhandle"
"time"
"github.com/gin-gonic/gin"
// "github.com/golang-migrate/migrate/v4/database/snowflake"
)
func (s *ShiYan) ShiyanCont(c *gin.Context) {
4 years ago
// var requestData Jieshou
// c.ShouldBindJSON(&requestData)
// if requestData.Time == "" {
// requestData.Time = overallhandle.UnixTimeToDay(time.Now().Unix(), 11)
// }
// entryData, _ := overallhandle.DateToTimeStamp(fmt.Sprintf("%v 00:00:00", requestData.Time))
// planformalData := overallhandle.GetFutureMonthTime(entryData, requestData.ProbationPeriod, 2)
4 years ago
// timeStr := overallhandle.UnixTimeToDay(planformalData, 11)
number := overallhandle.TableNumber()
out := overallhandle.MapOut()
4 years ago
out["time"] = number
fmt.Printf("Number ----->%v\n", number)
// out["time"] = requestData.Time
// out["entryData"] = entryData
// out["timeStr"] = timeStr
var eitePersonnel models.Personnel
eiteCont := overallhandle.MapOut()
eiteCont["role"] = 58
eiteCont["eite_time"] = time.Now().Unix()
eiteErr := eitePersonnel.EiteCont("`role` = ''", eiteCont)
overallhandle.Result(0, eiteErr, c)
}
// 人员迁移
4 years ago
func (s *ShiYan) PersonnelMigration(c *gin.Context) {
var oldManCount int64
err := overall.CONSTANT_DB_Master.Model(&models.WorkMan{}).Where("wm_group = 3").Pluck("COALESCE(COUNT(wm_id), 0) as countid", &oldManCount).Error
if err != nil {
overallhandle.Result(1, err, c, "没有要迁移的人员!")
return
}
//分片
var pian int64 = 0
pian = oldManCount / 100
if oldManCount%100 > 0 {
pian++
}
var writePeople peopleQianyi
for i := 1; int64(i) <= pian+1; i++ {
synPro.Add(1)
go writePeople.writeUser(i, 100)
// if i > 1 {
// break
// }
}
synPro.Wait()
readDataMap, allUser := writePeople.readMyDayData()
outMap := overallhandle.MapOut()
outMap["count"] = len(readDataMap)
outMap["list"] = readDataMap
outMap["allUser"] = allUser
overallhandle.Result(0, outMap, c)
}
// 分片写入人员
4 years ago
func (p *peopleQianyi) writeUser(page, pagesize int) {
// p.mutext.Lock()
// defer p.mutext.Unlock()
offsetVal := overallhandle.LimitPage(page, pagesize)
var oldUser []models.PersonalDetails
err := overall.CONSTANT_DB_Master.Model(&models.WorkMan{}).Select("worker_man.*,wmd.*").Joins("left join worker_man_data as wmd on wmd.wmd_key = worker_man.wm_key").Where("wm_group = 3").Limit(pagesize).Offset(offsetVal).Find(&oldUser).Error
if err != nil {
return
}
// jsonVal, _ := json.Marshal(oldUser)
fmt.Printf("page=======>%v=====>%v\n", page, offsetVal)
//员工主表
var staffAry []models.Personnel //主资料库
var staffAttributeAry []models.PersonnelContent //人物属性库
for _, v := range oldUser {
if len(v.Number) > 4 {
company, adminOrg, positionId, deparment := getUserOrgSchool(v.Group, v.DepartmentId, v.WorkshopId, v.PostId)
var staffInfo models.Personnel
staffInfo.Number = v.Number //员工工号
staffInfo.Name = v.Name //姓名
staffInfo.HireClass = 1 //雇佣类型(1:雇佣入职;2:再入职;)
staffInfo.Position = positionId //职位
// //获取职务信息
jobCont, jobErr := getJobInfo(positionId)
if jobErr == nil {
staffInfo.PositionLevel = jobCont.Dutid //职位等级
staffInfo.JobClass = jobCont.Jobid //职务分类
}
staffInfo.AdminOrg = adminOrg //所属行政组织
staffInfo.Company = company //入职公司
staffInfo.EmpType = 4 //用工关系(1:实习生;2:待分配;3:试用员工;4:正式员工;5:停薪留职;6:退休;7:辞退;8:离职)
staffInfo.Deparment = deparment //部门
staffInfo.Time = time.Now().Unix()
staffInfo.EiteTime = time.Now().Unix()
// staffInfo.PositionGrade = v.PositionGrade //入职职等
staffInfo.Icon = v.Icon //头像
// staffInfo.Password = v.Password
staffInfo.Wechat = v.WechatId
staffInfo.WorkWechat = v.WorkWechatId
weChatOpenId := v.WechatId
if v.WorkWechatId != "" {
weChatOpenId = v.WorkWechatId
}
//获取微信头像
wechatCont, _ := GetWorkWechatDuiZhao(weChatOpenId)
staffInfo.Icon = wechatCont.Avatar //头像
staffInfo.Password = v.Password //密码
staffInfo.State = v.State
staffInfo.Key = v.Key
staffAry = append(staffAry, staffInfo)
var staffAttribute models.PersonnelContent
staffAttribute.Number = v.Number
staffAttribute.Idcardno = v.CertificatesNum
staffAttribute.Mobilephone = v.Tel
staffAttribute.Gender = v.Gender
staffAttribute.Birthday = v.Birthday
// staffAttribute.Myfolk = contData.Nation
// staffAttribute.Nativeplace = contData.NativePlace
staffAttribute.Health = 1
staffAttribute.Maritalstatus = 1
staffAttribute.Currentresidence = v.Addrest
staffAttribute.Time = time.Now().Unix()
staffAttribute.Constellation = 1
staffAttribute.Isdoubleworker = 2
staffAttribute.Isveterans = 2
// staffAttribute.Veteransnumber = contData.Veteransnumber
staffAttribute.Jobstartdate = time.Now().Unix()
staffAttribute.Entrydate = v.EntryTime
staffAttribute.Probationperiod = 3
staffAttribute.Planformaldate = time.Now().Unix()
staffAttribute.PoliticalOutlook = 1
staffAttributeAry = append(staffAttributeAry, staffAttribute)
}
// p.dataMap = append(p.dataMap, staffInfo)
// p.userAll = append(p.userAll, staffAttribute)
// break
}
if len(staffAry) > 0 {
addErrMaster := overall.CONSTANT_DB_HR.Model(&models.Personnel{}).Create(&staffAry).Error
if addErrMaster == nil {
if len(staffAttributeAry) > 0 {
overall.CONSTANT_DB_HR.Model(&models.PersonnelContent{}).Create(&staffAttributeAry)
}
}
}
// fmt.Printf("%v\n", staffAry)
synPro.Done()
}
// 获取企业微信对照表
4 years ago
func GetWorkWechatDuiZhao(openid string) (userInfoStruct models.WechatUsers, isTrue bool) {
isTrue = false
myErr := overall.CONSTANT_DB_Wechat.Where("userid = ?", openid).First(&userInfoStruct).Error
if myErr == nil {
isTrue = true
}
return
}
// 获取人员组织架构信息
4 years ago
func getUserOrgSchool(group, depart, workid, position int64) (gro, org, positionId int64, department string) {
groupAry := map[int64]int64{3: 2}
for gi, gv := range groupAry {
if gi == group {
gro = gv
break
}
}
//部门对照
//部门
var buMen string
// departAry := map[int64]string{
// 11: "3",
// 12: "4",
// 9: "5",
// 14: "6",
// 13: "7",
// 15: "8",
// 5: "9",
// 6: "10",
// 8: "11",
// 2: "13",
// 1: "14",
// 3: "15",
// 16: "16",
// 17: "17",
// 39: "19",
// 50: "20",
// 7: "12,41",
// 4: "12,42",
// }
departAry := map[int64]string{
11: "3",
12: "4",
9: "5",
14: "6",
13: "7",
15: "8",
5: "9",
6: "10",
8: "11",
2: "13",
1: "14",
3: "15",
16: "16",
17: "17",
39: "19",
50: "20",
7: "41",
4: "42",
}
for di, dv := range departAry {
if depart == di {
buMen = dv
break
}
}
_, org = getOrgSchool(workid)
// departId, org := getOrgSchool(workid)
// if departId != 0 {
// buMen = fmt.Sprintf("%v,%v", buMen, departId)
// }
department = buMen
positionId = getHrPosition(position)
return
}
// 获取组织架构对照
4 years ago
func getOrgSchool(id int64) (deparmentId, orgId int64) {
var orgInfo outOrgCont
err := overall.CONSTANT_DB_HR.Model(&models.AdministrativeOrganization{}).Select("id,organization_type,superior").Where("schoole = ?", id).First(&orgInfo).Error
if err != nil {
deparmentId = 0
orgId = 0
return
}
if orgInfo.OrganizationType == 5 {
var suoOrgInfo models.AdministrativeOrganization
whereAry := overallhandle.MapOut()
whereAry["id"] = orgInfo.Superior
supErr := suoOrgInfo.GetCont(whereAry)
if supErr == nil {
deparmentId = suoOrgInfo.Id
}
}
orgId = orgInfo.Id
return
}
// 获取hr系统中的职务
4 years ago
func getHrPosition(posId int64) int64 {
var id int64
err := overall.CONSTANT_DB_HR.Model(&models.Position{}).Select("id").Where("`school` = ?", posId).First(&id).Error
if err == nil {
return id
}
return 0
}
// 获取职务相关属性
4 years ago
func getJobInfo(jobId int64) (cont jobAttber, err error) {
var positionInfo models.Position
// err = overall.CONSTANT_DB_HR.Table(fmt.Sprintf("%s p", positionInfo.TableName())).Select("p.id,p.number,p.name,p.person_in_charge,d.id as dutid,d.name as dutname,d.number as dutnumber,j.id as jobid,j.name as jobname").Joins("left join duties as d on d.id = p.duties").Joins("left join job_class as j on j.id = d.job_type").Where("`p`.`id` = ?", jobId).First(&cont).Error
err = overall.CONSTANT_DB_HR.Model(&positionInfo).Select("position.id,position.number,position.name,position.person_in_charge,d.id as dutid,d.name as dutname,d.number as dutnumber,j.id as jobid,j.name as jobname").Joins("left join duties as d on d.id = position.duties").Joins("left join job_class as j on j.id = d.job_type").Where("`position`.`id` = ?", jobId).First(&cont).Error
return
}
// 视图操作
func (s *ShiYan) Shitu(c *gin.Context) {
// var shituList []ShituType
// err := overall.CONSTANT_DB_HR.Limit(20).Offset(21).Find(&shituList)
// fmt.Printf("%v-----------%v\n", err, shituList)
out := overallhandle.MapOut()
node, err := snowflake.NewWorker(1)
fmt.Printf("node--------->%v\n", err)
out["node"] = node.GetId()
out["err "] = err
overallhandle.Result(0, out, c)
}
3 years ago
// 人员状态数据对正
3 years ago
func (s *ShiYan) PeopleStatus(c *gin.Context) {
var manList []models.PersonArchives
err := overall.CONSTANT_DB_HR.Model(&manList).Select("`id`,`emp_type_name`").Find(&manList).Error
if err != nil {
return
}
for _, v := range manList {
stateInt := personnelapi.EmptypeToInt(v.EmpTypeName)
var eidtMan models.PersonArchives
eidtMan.EiteCont(map[string]interface{}{"id": v.Id}, map[string]interface{}{"emp_type": stateInt})
}
overallhandle.Result(0, err, c)
}
/*
*
@ 作者: 秦东
@ 时间: 2023-02-22 11:34:18
@ 功能: 手动同步行政组织类型
@ 参数
#
@ 返回值
#
@ 方法原型
#
*/
func (s *ShiYan) HandMovementType(c *gin.Context) {
dockingorganization.GetOrgType()
}
/*
*
@ 作者: 秦东
@ 时间: 2023-02-22 11:37:00
@ 功能: 手动同步职务类型
@ 参数
#
@ 返回值
#
@ 方法原型
#
*/
func (s *ShiYan) HandMovementJobType(c *gin.Context) {
dockingorganization.JobClass()
}
/*
*
@ 作者: 秦东
@ 时间: 2023-02-22 11:38:08
@ 功能: 手动同步职务
@ 参数
#
@ 返回值
#
@ 方法原型
#
*/
func (s *ShiYan) HandMovementJob(c *gin.Context) {
dockingorganization.DutiesContrast()
}
/*
*
@ 作者: 秦东
@ 时间: 2023-02-22 11:39:28
@ 功能: 手动同步行政组织
@ 参数
#
@ 返回值
#
@ 方法原型
#
*/
func (s *ShiYan) HandMovementOrgCont(c *gin.Context) {
dockingorganization.OrgAdmin()
}
/*
*
@ 作者: 秦东
@ 时间: 2023-02-22 11:39:28
@ 功能: 手动同步职位
@ 参数
#
@ 返回值
#
@ 方法原型
#
*/
func (s *ShiYan) HandMovementPostCont(c *gin.Context) {
dockingorganization.Position()
}