package shiyan
import (
"fmt"
"hr_server/api/jindie_docking/dockingorganization"
"hr_server/api/version1/personnelapi"
"hr_server/middleware/snowflake"
"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 ) {
// 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)
// timeStr := overallhandle.UnixTimeToDay(planformalData, 11)
number := overallhandle . TableNumber ( )
out := overallhandle . MapOut ( )
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 )
}
// 人员迁移
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 )
}
// 分片写入人员
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 ( )
}
// 获取企业微信对照表
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
}
// 获取人员组织架构信息
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
}
// 获取组织架构对照
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系统中的职务
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
}
// 获取职务相关属性
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 )
}
// 人员状态数据对正
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 : 0 8
@ 功能 : 手动同步职务
@ 参数
#
@ 返回值
#
@ 方法原型
#
* /
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 ( )
}