125 changed files with 17960 additions and 60 deletions
@ -0,0 +1,124 @@ |
|||
package authorize |
|||
|
|||
import ( |
|||
"fmt" |
|||
"hr_server/grocerystore" |
|||
"hr_server/models" |
|||
"hr_server/overall" |
|||
"hr_server/overall/overallhandle" |
|||
"strconv" |
|||
|
|||
"github.com/gin-gonic/gin" |
|||
) |
|||
|
|||
//授权
|
|||
func (e *EmpowerApi) GainToken(c *gin.Context) { |
|||
ContentType := c.Request.Header.Get("Content-Type") |
|||
Origin := c.Request.Header.Get("Origin") |
|||
userAgent := c.Request.Header.Get("User-Agent") |
|||
|
|||
var requestData gainAuthorize |
|||
err := c.ShouldBindJSON(&requestData) |
|||
if err != nil { |
|||
overallhandle.Result(100, err, c) |
|||
return |
|||
} |
|||
|
|||
if ContentType == "" || userAgent == "" || Origin == "" { |
|||
overallhandle.Result(100, err, c) |
|||
return |
|||
} |
|||
|
|||
if requestData.UserNumber == "" || requestData.Password == "" { |
|||
overallhandle.Result(101, err, c) |
|||
return |
|||
} |
|||
//密码加密
|
|||
var passwordMd5 overallhandle.Md5Encryption |
|||
passwordMd5.Md5EncryptionInit(requestData.Password) |
|||
passwordMd5Str := passwordMd5.Md5EncryptionAlgorithm() |
|||
var empowerUser models.EmpowerUser |
|||
userErr := empowerUser.GetCont(map[string]interface{}{"userkey": requestData.UserNumber, "password": passwordMd5Str}, "verification_code") |
|||
if userErr != nil { |
|||
overallhandle.Result(2000, passwordMd5Str, c) |
|||
return |
|||
} |
|||
//获取随机数
|
|||
randCode := strconv.FormatInt(overallhandle.TableNumber(), 10) |
|||
// randCode := strconv.FormatInt(16557925694780, 10)
|
|||
//头文件加密
|
|||
//ContentType
|
|||
var ContentTypeMd5 overallhandle.Md5Encryption |
|||
ContentTypeMd5.Md5EncryptionInit(ContentType) |
|||
if empowerUser.VerificationCode != "" { |
|||
ContentTypeMd5.AppKey = empowerUser.VerificationCode |
|||
} |
|||
|
|||
fmt.Printf("ContentTypeMd5Str ----->%v\n", ContentTypeMd5) |
|||
|
|||
ContentTypeMd5Str := ContentTypeMd5.Md5EncryptionAlgorithm() |
|||
//Origin
|
|||
var OriginMd5 overallhandle.Md5Encryption |
|||
OriginMd5.Md5EncryptionInit(Origin) |
|||
if empowerUser.VerificationCode != "" { |
|||
OriginMd5.AppKey = empowerUser.VerificationCode |
|||
} |
|||
|
|||
originMd5Str := OriginMd5.Md5EncryptionAlgorithm() |
|||
//userAgent
|
|||
var userAgentMd5 overallhandle.Md5Encryption |
|||
userAgentMd5.Md5EncryptionInit(userAgent) |
|||
if empowerUser.VerificationCode != "" { |
|||
userAgentMd5.AppKey = empowerUser.VerificationCode |
|||
} |
|||
userAgentMd5Str := userAgentMd5.Md5EncryptionAlgorithm() |
|||
|
|||
//随机数加密
|
|||
var randomNumberMd5 overallhandle.Md5Encryption |
|||
randomNumberMd5.Md5EncryptionInit(randCode) |
|||
if empowerUser.VerificationCode != "" { |
|||
randomNumberMd5.AppKey = empowerUser.VerificationCode |
|||
} |
|||
numberMd5 := randomNumberMd5.Md5EncryptionAlgorithm() |
|||
|
|||
//用户名加密
|
|||
var userKeyMd5 overallhandle.Md5Encryption |
|||
userKeyMd5.Md5EncryptionInit(requestData.UserNumber) |
|||
if empowerUser.VerificationCode != "" { |
|||
userKeyMd5.AppKey = empowerUser.VerificationCode |
|||
} |
|||
userKeyMd5Str := userKeyMd5.Md5EncryptionAlgorithm() |
|||
|
|||
clearCodeToken := fmt.Sprintf("%v-%v-%v-%v-%v-%v", ContentTypeMd5Str, originMd5Str, userAgentMd5Str, numberMd5, userKeyMd5Str, passwordMd5Str) |
|||
|
|||
fmt.Printf("redisKey---->ContentTypeMd5Str:%v-originMd5Str:%v-userAgentMd5Str:%v-numberMd5:%v-userKeyMd5Str:%v-passwordMd5Str:%v\n", ContentTypeMd5Str, originMd5Str, userAgentMd5Str, numberMd5, userKeyMd5Str, passwordMd5Str) |
|||
//token 加密
|
|||
var tokenMd5 overallhandle.Md5Encryption |
|||
tokenMd5.Md5EncryptionInit(clearCodeToken) |
|||
if empowerUser.VerificationCode != "" { |
|||
tokenMd5.AppKey = empowerUser.VerificationCode |
|||
} |
|||
fmt.Printf("tokenMd5Appk ----->%v\n", tokenMd5) |
|||
tokenMd5Str := tokenMd5.Md5EncryptionAlgorithm() |
|||
|
|||
//设定redis Key名称
|
|||
redisKey := fmt.Sprintf("Authentication:ApiAuthent_%v", tokenMd5Str) |
|||
|
|||
saveTokenRedis := overallhandle.MapOut() |
|||
saveTokenRedis["number"] = randCode |
|||
saveTokenRedis["userkey"] = requestData.UserNumber |
|||
saveTokenRedis["password"] = requestData.Password |
|||
//将验证信息写入Redis
|
|||
redisClient := grocerystore.RunRedis(overall.CONSTANT_REDIS3) |
|||
redisClient.SetRedisTime(10800) |
|||
redisClient.HashMsetAdd(redisKey, saveTokenRedis) |
|||
//输出验证
|
|||
// clearTokenStr := fmt.Sprintf("%v-%v", tokenMd5Str, numberMd5)
|
|||
// var clearTokenMd5 overallhandle.Md5Encryption
|
|||
// clearTokenMd5.Md5EncryptionInit(clearTokenStr)
|
|||
// clearTokenMd5Str := clearTokenMd5.Md5EncryptionAlgorithm()
|
|||
var sendToken SendToken |
|||
sendToken.Number = randCode |
|||
sendToken.Token = tokenMd5Str |
|||
overallhandle.Result(0, sendToken, c) |
|||
} |
|||
@ -0,0 +1,63 @@ |
|||
package authorize |
|||
|
|||
import ( |
|||
"hr_server/overall/overallhandle" |
|||
|
|||
"github.com/gin-gonic/gin" |
|||
) |
|||
|
|||
type EmpowerApi struct{} |
|||
|
|||
type jiaMiKey struct { |
|||
Number string `json:"number"` |
|||
AppKey string `json:"appkey"` |
|||
} |
|||
|
|||
//入口
|
|||
func (e *EmpowerApi) Index(c *gin.Context) { |
|||
|
|||
var requestData jiaMiKey |
|||
err := c.ShouldBindJSON(&requestData) |
|||
if err != nil { |
|||
overallhandle.Result(100, err, c) |
|||
return |
|||
} |
|||
// var empowerUser models.EmpowerUser
|
|||
// userErr := empowerUser.GetCont(map[string]interface{}{"userkey": "kingdeeSysAdmin", "password": "Kingdee@Human$Resources"}, "verification_code")
|
|||
|
|||
// var ContentTypeMd5 overallhandle.Md5Encryption
|
|||
// if empowerUser.VerificationCode != "" {
|
|||
// ContentTypeMd5.AppKey = empowerUser.VerificationCode
|
|||
// }
|
|||
var ContentTypeMd5 overallhandle.Md5Encryption |
|||
ContentTypeMd5.Md5EncryptionInit(requestData.Number) |
|||
ContentTypeMd5.AppKey = requestData.AppKey |
|||
ContentTypeMd5Str, dfg := ContentTypeMd5.Md5EncryptionAlgorithmFj() |
|||
outputCont := overallhandle.MapOut() |
|||
outputCont["index"] = "MD5加密验证" |
|||
// outputCont["userErr"] = userErr
|
|||
outputCont["md5"] = ContentTypeMd5Str |
|||
outputCont["number"] = requestData.Number |
|||
outputCont["appkey"] = requestData.AppKey |
|||
outputCont["step"] = dfg |
|||
overallhandle.Result(0, outputCont, c) |
|||
} |
|||
|
|||
//授权
|
|||
type gainAuthorize struct { |
|||
UserNumber string `json:"username"` |
|||
Password string `json:"password"` |
|||
} |
|||
|
|||
//输出Token
|
|||
type SendToken struct { |
|||
Token string `json:"token"` |
|||
Number string `json:"number"` |
|||
} |
|||
|
|||
//保存Redis Token
|
|||
type SaveToken struct { |
|||
Number string `json:"number"` //随机数
|
|||
UserKey string `json:"userkey"` //用户名
|
|||
PassWord string `json:"password"` //密码
|
|||
} |
|||
@ -0,0 +1,9 @@ |
|||
package empower |
|||
|
|||
import "hr_server/api/empower/authorize" |
|||
|
|||
type ApiInlet struct { |
|||
Authorize authorize.EmpowerApi |
|||
} |
|||
|
|||
var AppApiInlet = new(ApiInlet) |
|||
@ -0,0 +1,682 @@ |
|||
package dockingorganization |
|||
|
|||
import ( |
|||
"encoding/json" |
|||
"fmt" |
|||
"hr_server/models" |
|||
"hr_server/overall" |
|||
"hr_server/overall/overallhandle" |
|||
"strconv" |
|||
"strings" |
|||
"time" |
|||
|
|||
"github.com/gin-gonic/gin" |
|||
) |
|||
|
|||
//接口实验
|
|||
func (d *DockingJinDieApi) DockKingdeeApi(c *gin.Context) { |
|||
// GetOrgType()
|
|||
// JobClass()
|
|||
// DutiesContrast()
|
|||
OrgAdmin() |
|||
// Position()
|
|||
// xingzheng()
|
|||
outMap := overallhandle.MapOut() |
|||
overallhandle.Result(0, outMap, c) |
|||
} |
|||
|
|||
func xingzheng() { |
|||
var orgList []models.AdministrativeOrganization |
|||
// orgList.GetCont(map[string]interface{}{"ispower": 1})
|
|||
overall.CONSTANT_DB_HR.Where("ispower = 1").Find(&orgList) |
|||
var id []string |
|||
var num []string |
|||
for _, v := range orgList { |
|||
|
|||
id = append(id, strconv.FormatInt(v.Id, 10)) |
|||
num = append(num, v.Number) |
|||
} |
|||
fmt.Println(strings.Join(id, ",")) |
|||
fmt.Println(strings.Join(num, ",")) |
|||
} |
|||
|
|||
//行政组织类型
|
|||
func GetOrgType() { |
|||
var orgContAry []orgClass |
|||
sendUrl := fmt.Sprintf("%v/person/adminUnitType", overall.DockingKingdeeUrl) |
|||
respBody, err := GetUrl(sendUrl) |
|||
if err != nil { |
|||
overallhandle.WriteLog("e", "未能获取到行政组织类型!", err) |
|||
return |
|||
} |
|||
err = json.Unmarshal(respBody, &orgContAry) |
|||
if err != nil { |
|||
overallhandle.WriteLog("e", "行政组织类型映射错误!", err) |
|||
return |
|||
} |
|||
overallhandle.WriteLog("i", "行政组织类型映射成功!", orgContAry) |
|||
if len(orgContAry) < 0 { |
|||
overallhandle.WriteLog("e", "未能获取到行政组织类型!", orgContAry) |
|||
return |
|||
} |
|||
|
|||
fmt.Printf("err---------------------->%v\n", err) |
|||
var kingDeeIdAry []string |
|||
//进行行政组织类别对照
|
|||
for _, v := range orgContAry { |
|||
if overallhandle.StringIsInMap(v.Id, kingDeeIdAry) == false { |
|||
kingDeeIdAry = append(kingDeeIdAry, v.Id) |
|||
} |
|||
//判断该项是否存在
|
|||
var orgCont models.AdministrativeOrganizationType |
|||
orgErr := orgCont.GetCont(map[string]interface{}{"kingdeeid": v.Id}, "id", "name", "state") |
|||
if orgErr == nil { |
|||
//判断是否编辑
|
|||
if v.Name != orgCont.Name { |
|||
editOrgErr := orgCont.EiteCont(map[string]interface{}{"id": orgCont.Id}, map[string]interface{}{"name": v.Name, "state": 1}) |
|||
if editOrgErr == nil { |
|||
overallhandle.WriteLog("edit", "行政组织类型更新成功!", editOrgErr, v) |
|||
} else { |
|||
overallhandle.WriteLog("edit", "行政组织类型更新失败!", editOrgErr, v) |
|||
} |
|||
} else { |
|||
if orgCont.State != 1 { |
|||
editOrgErr := orgCont.EiteCont(map[string]interface{}{"id": orgCont.Id}, map[string]interface{}{"state": 1}) |
|||
if editOrgErr == nil { |
|||
overallhandle.WriteLog("edit", "行政组织类型更新成功!state", editOrgErr, v) |
|||
} else { |
|||
overallhandle.WriteLog("edit", "行政组织类型更新失败!state", editOrgErr, v) |
|||
} |
|||
} |
|||
} |
|||
} else { |
|||
orgCont.Name = v.Name |
|||
orgCont.State = 1 |
|||
orgCont.Time = time.Now().Unix() |
|||
orgCont.KingdeeId = v.Id |
|||
addOrgErr := overall.CONSTANT_DB_HR.Create(&orgCont).Error |
|||
if addOrgErr == nil { |
|||
overallhandle.WriteLog("add", "行政组织类型写入成功!", addOrgErr, orgCont) |
|||
} else { |
|||
overallhandle.WriteLog("add", "行政组织类型写入失败!", addOrgErr, orgCont) |
|||
} |
|||
} |
|||
} |
|||
var orgAll []models.AdministrativeOrganizationType |
|||
allErr := overall.CONSTANT_DB_HR.Where("`state` = 1").Find(&orgAll).Error |
|||
if allErr == nil { |
|||
var eidtId []string |
|||
for _, av := range orgAll { |
|||
if overallhandle.StringIsInMap(av.KingdeeId, kingDeeIdAry) == false { |
|||
if overallhandle.StringIsInMap(av.KingdeeId, eidtId) == false { |
|||
eidtId = append(eidtId, av.KingdeeId) |
|||
} |
|||
} |
|||
} |
|||
if len(eidtId) > 0 { |
|||
orgContEditErr := overall.CONSTANT_DB_HR.Model(&models.AdministrativeOrganizationType{}).Where("`kingdeeid` IN ?", eidtId).Updates(map[string]interface{}{"state": 2}).Error |
|||
if orgContEditErr == nil { |
|||
overallhandle.WriteLog("edit", "禁用已不使用得行政组织类型成功!", orgContEditErr, eidtId) |
|||
} else { |
|||
overallhandle.WriteLog("edit", "禁用已不使用得行政组织类型失败!", orgContEditErr, eidtId) |
|||
} |
|||
} |
|||
} |
|||
} |
|||
|
|||
//职务类型
|
|||
func JobClass() { |
|||
// fmt.Printf("1")
|
|||
var jobClassInfo []jobClassType |
|||
sendUrl := fmt.Sprintf("%v/person/ptype", overall.DockingKingdeeUrl) |
|||
respBody, err := GetUrl(sendUrl) |
|||
if err != nil { |
|||
overallhandle.WriteLog("e", "未能获取到职务类型!", err) |
|||
return |
|||
} |
|||
err = json.Unmarshal(respBody, &jobClassInfo) |
|||
if err != nil { |
|||
overallhandle.WriteLog("e", "职务类型映射错误!", err) |
|||
return |
|||
} |
|||
overallhandle.WriteLog("i", "职务类型映射成功!", jobClassInfo) |
|||
if len(jobClassInfo) < 0 { |
|||
overallhandle.WriteLog("e", "未能获取到职务类型!", jobClassInfo) |
|||
return |
|||
} |
|||
var kingDeeIdAry []string |
|||
//进行职务类型对照
|
|||
for _, v := range jobClassInfo { |
|||
if overallhandle.StringIsInMap(v.Id, kingDeeIdAry) == false { |
|||
kingDeeIdAry = append(kingDeeIdAry, v.Id) |
|||
} |
|||
//判断该项是否存在
|
|||
var jobClassCont models.JobClass |
|||
jobClassErr := jobClassCont.GetCont(map[string]interface{}{"kingdeeid": v.Id}) |
|||
if jobClassErr == nil { |
|||
//存在判断是否要进行更新
|
|||
if v.Name != jobClassCont.Name { |
|||
editOrgErr := jobClassCont.EiteJobClassCont(map[string]interface{}{"id": jobClassCont.Id}, map[string]interface{}{"name": v.Name, "state": 1}) |
|||
if editOrgErr == nil { |
|||
overallhandle.WriteLog("edit", "职务类型更新成功!", editOrgErr, v) |
|||
} else { |
|||
overallhandle.WriteLog("edit", "职务类型更新失败!", editOrgErr, v) |
|||
} |
|||
} else { |
|||
if jobClassCont.State != 1 { |
|||
editOrgErr := jobClassCont.EiteJobClassCont(map[string]interface{}{"id": jobClassCont.Id}, map[string]interface{}{"state": 1}) |
|||
if editOrgErr == nil { |
|||
overallhandle.WriteLog("edit", "职务类型更新成功!state", editOrgErr, v) |
|||
} else { |
|||
overallhandle.WriteLog("edit", "职务类型更新失败!state", editOrgErr, v) |
|||
} |
|||
} |
|||
} |
|||
} else { |
|||
//不存在,进行新增
|
|||
jobClassCont.Name = v.Name |
|||
jobClassCont.KingdeeNum = v.Fnumber |
|||
jobClassCont.KingdeeId = v.Id |
|||
jobClassCont.State = 1 |
|||
jobClassCont.Time = time.Now().Unix() |
|||
addErr := overall.CONSTANT_DB_HR.Create(&jobClassCont).Error |
|||
if addErr == nil { |
|||
overallhandle.WriteLog("add", "职务类型写入成功!", addErr, jobClassCont) |
|||
} else { |
|||
overallhandle.WriteLog("add", "职务类型写入失败!", addErr, jobClassCont) |
|||
} |
|||
} |
|||
} |
|||
|
|||
var jobClassAll []models.JobClass |
|||
allErr := overall.CONSTANT_DB_HR.Where("`state` = 1").Find(&jobClassAll).Error |
|||
if allErr == nil { |
|||
var eidtId []string |
|||
for _, av := range jobClassAll { |
|||
if overallhandle.StringIsInMap(av.KingdeeId, kingDeeIdAry) == false { |
|||
if overallhandle.StringIsInMap(av.KingdeeId, eidtId) == false { |
|||
eidtId = append(eidtId, av.KingdeeId) |
|||
} |
|||
} |
|||
} |
|||
if len(eidtId) > 0 { |
|||
jobClassContEditErr := overall.CONSTANT_DB_HR.Model(&models.JobClass{}).Where("`kingdeeid` IN ?", eidtId).Updates(map[string]interface{}{"state": 2}).Error |
|||
if jobClassContEditErr == nil { |
|||
overallhandle.WriteLog("edit", "禁用已不使用得职务类型成功!", jobClassContEditErr, eidtId) |
|||
} else { |
|||
overallhandle.WriteLog("edit", "禁用已不使用得职务类型失败!", jobClassContEditErr, eidtId) |
|||
} |
|||
} |
|||
} |
|||
} |
|||
|
|||
//职务
|
|||
func DutiesContrast() { |
|||
var jobInfo []jobContDuck |
|||
sendUrl := fmt.Sprintf("%v/person/job", overall.DockingKingdeeUrl) |
|||
respBody, err := GetUrl(sendUrl) |
|||
if err != nil { |
|||
overallhandle.WriteLog("e", "未能获取到职务!", err) |
|||
return |
|||
} |
|||
err = json.Unmarshal(respBody, &jobInfo) |
|||
if err != nil { |
|||
overallhandle.WriteLog("e", "职务映射错误!", err) |
|||
return |
|||
} |
|||
overallhandle.WriteLog("i", "职务映射成功!", jobInfo) |
|||
if len(jobInfo) < 0 { |
|||
overallhandle.WriteLog("e", "未能获取到职务!", jobInfo) |
|||
return |
|||
} |
|||
var kingDeeIdAry []string |
|||
//进行职务对照
|
|||
for _, v := range jobInfo { |
|||
if overallhandle.StringIsInMap(v.Id, kingDeeIdAry) == false { |
|||
kingDeeIdAry = append(kingDeeIdAry, v.Id) |
|||
} |
|||
//判断该项是否存在
|
|||
var dutiesCont models.Duties |
|||
dutiesErr := dutiesCont.GetCont(map[string]interface{}{"kingdeeid": v.Id}, "`id`", "`name`", `state`, `job_type`) |
|||
if dutiesErr == nil { |
|||
//存在,进行更新
|
|||
//获取职务Id
|
|||
var jobClassInfo models.JobClass |
|||
jobClassInfo.GetCont(map[string]interface{}{"kingdeeid": v.Fjobtype}, "`id`") |
|||
var editOrgErr error |
|||
isCaoZuo := false |
|||
if v.Name != dutiesCont.Name { |
|||
if dutiesCont.JobType != jobClassInfo.Id { |
|||
editOrgErr = dutiesCont.EiteCont(map[string]interface{}{"id": dutiesCont.Id}, map[string]interface{}{"name": v.Name, "state": 1, "job_type": jobClassInfo.Id}) |
|||
isCaoZuo = true |
|||
} else { |
|||
editOrgErr = dutiesCont.EiteCont(map[string]interface{}{"id": dutiesCont.Id}, map[string]interface{}{"name": v.Name, "state": 1}) |
|||
isCaoZuo = true |
|||
} |
|||
} else { |
|||
if dutiesCont.State != 1 { |
|||
if dutiesCont.JobType != jobClassInfo.Id { |
|||
editOrgErr = dutiesCont.EiteCont(map[string]interface{}{"id": dutiesCont.Id}, map[string]interface{}{"state": 1, "job_type": jobClassInfo.Id}) |
|||
isCaoZuo = true |
|||
} else { |
|||
editOrgErr = dutiesCont.EiteCont(map[string]interface{}{"id": dutiesCont.Id}, map[string]interface{}{"state": 1}) |
|||
isCaoZuo = true |
|||
} |
|||
} |
|||
} |
|||
if isCaoZuo == true { |
|||
if editOrgErr == nil { |
|||
overallhandle.WriteLog("edit", "职务更新成功!", editOrgErr, v) |
|||
} else { |
|||
overallhandle.WriteLog("edit", "职务更新失败!", editOrgErr, v) |
|||
} |
|||
} |
|||
} else { |
|||
//不存在,进行新增
|
|||
//获取旧对照表数据
|
|||
var oldDutiesInfo models.Duties |
|||
oldDutErr := overall.CONSTANT_DB_HR_Jin.Model(&models.Duties{}).Select("weight,number").Where("`name` = ?", v.Name).First(&oldDutiesInfo).Error |
|||
//获取职务Id
|
|||
var jobClassInfo models.JobClass |
|||
jobClassErr := jobClassInfo.GetCont(map[string]interface{}{"kingdeeid": v.Fjobtype}, "`id`") |
|||
var dutiesInfo models.Duties |
|||
dutiesInfo.Name = v.Name |
|||
if jobClassErr == nil { |
|||
dutiesInfo.JobType = jobClassInfo.Id |
|||
} |
|||
if oldDutErr == nil { |
|||
dutiesInfo.Weight = oldDutiesInfo.Weight |
|||
dutiesInfo.Number = oldDutiesInfo.Number |
|||
} |
|||
dutiesInfo.Time = time.Now().Unix() |
|||
dutiesInfo.State = 1 |
|||
dutiesInfo.KingdeeId = v.Id |
|||
dutiesInfo.KingdeeNum = v.Fnumber |
|||
addErr := overall.CONSTANT_DB_HR.Create(&dutiesInfo).Error |
|||
if addErr == nil { |
|||
overallhandle.WriteLog("add", "职务写入成功!", addErr, dutiesInfo) |
|||
} else { |
|||
overallhandle.WriteLog("add", "职务写入失败!", addErr, dutiesInfo) |
|||
} |
|||
} |
|||
} |
|||
|
|||
var dutiesAll []models.Duties |
|||
allErr := overall.CONSTANT_DB_HR.Where("`state` = 1").Find(&dutiesAll).Error |
|||
if allErr == nil { |
|||
var eidtId []string |
|||
for _, av := range dutiesAll { |
|||
if overallhandle.StringIsInMap(av.KingdeeId, kingDeeIdAry) == false { |
|||
if overallhandle.StringIsInMap(av.KingdeeId, eidtId) == false { |
|||
eidtId = append(eidtId, av.KingdeeId) |
|||
} |
|||
} |
|||
} |
|||
if len(eidtId) > 0 { |
|||
dutiesContEditErr := overall.CONSTANT_DB_HR.Model(&models.Duties{}).Where("`kingdeeid` IN ?", eidtId).Updates(map[string]interface{}{"state": 2}).Error |
|||
if dutiesContEditErr == nil { |
|||
overallhandle.WriteLog("edit", "禁用已不使用得职务成功!", dutiesContEditErr, eidtId) |
|||
} else { |
|||
overallhandle.WriteLog("edit", "禁用已不使用得职务失败!", dutiesContEditErr, eidtId) |
|||
} |
|||
} |
|||
} |
|||
} |
|||
|
|||
//行政组织
|
|||
func OrgAdmin() { |
|||
var orgInfo []orgAdminType |
|||
sendUrl := fmt.Sprintf("%v/person/adminunit", overall.DockingKingdeeUrl) |
|||
respBody, err := GetUrl(sendUrl) |
|||
if err != nil { |
|||
overallhandle.WriteLog("e", "未能获取到行政组织!", err) |
|||
return |
|||
} |
|||
err = json.Unmarshal(respBody, &orgInfo) |
|||
if err != nil { |
|||
overallhandle.WriteLog("e", "行政组织映射错误!", err) |
|||
return |
|||
} |
|||
overallhandle.WriteLog("i", "行政组织映射完成!", orgInfo) |
|||
if len(orgInfo) < 0 { |
|||
overallhandle.WriteLog("e", "未能获取到行政组织!", orgInfo) |
|||
return |
|||
} |
|||
var kingDeeIdAry []string |
|||
//进行职务对照
|
|||
for _, v := range orgInfo { |
|||
if overallhandle.StringIsInMap(v.Id, kingDeeIdAry) == false { |
|||
kingDeeIdAry = append(kingDeeIdAry, v.Id) |
|||
} |
|||
//判断该项是否存在
|
|||
var orgInfoContCont models.AdministrativeOrganization |
|||
orgInfoContErr := orgInfoContCont.GetCont(map[string]interface{}{"kingdeeid": v.Id}) |
|||
if orgInfoContErr == nil { |
|||
//存在,进行更新
|
|||
isEdit := false |
|||
saveData := overallhandle.MapOut() |
|||
if v.Name != orgInfoContCont.Name { |
|||
saveData["name"] = v.Name |
|||
isEdit = true |
|||
} |
|||
if v.Abbreviation != orgInfoContCont.Abbreviation { |
|||
saveData["abbreviation"] = v.Abbreviation |
|||
isEdit = true |
|||
} |
|||
if v.Number != orgInfoContCont.Number { |
|||
saveData["number"] = v.Number |
|||
isEdit = true |
|||
} |
|||
if orgInfoContCont.State != 1 { |
|||
saveData["state"] = 1 |
|||
isEdit = true |
|||
} |
|||
//判断行政组织类型是否需要改变
|
|||
var judgeOrgType models.AdministrativeOrganizationType |
|||
judgeOrgTypeErr := judgeOrgType.GetCont(map[string]interface{}{"id": orgInfoContCont.OrganizationType}, "`id`", "`kingdeeid`") |
|||
if judgeOrgTypeErr == nil { |
|||
if v.GovClass != judgeOrgType.KingdeeId { |
|||
var orgTypeNewType models.AdministrativeOrganizationType |
|||
orgTypeNewTypeErr := orgTypeNewType.GetCont(map[string]interface{}{"kingdeeid": v.Superior}, "id") |
|||
if orgTypeNewTypeErr == nil { |
|||
saveData["organization_type"] = orgTypeNewType.Id |
|||
isEdit = true |
|||
} |
|||
} |
|||
} |
|||
if isEdit == true { |
|||
saveData["time"] = time.Now().Unix() |
|||
editErr := orgInfoContCont.EiteCont(map[string]interface{}{"id": orgInfoContCont.Id}, saveData) |
|||
if editErr == nil { |
|||
overallhandle.WriteLog("edit", "行政组织更新成功!", editErr, v, saveData) |
|||
} else { |
|||
overallhandle.WriteLog("edit", "行政组织更新失败!", editErr, v, saveData) |
|||
} |
|||
} |
|||
} else { |
|||
//不存在进行添加
|
|||
var orgCont models.AdministrativeOrganization |
|||
orgCont.KingdeeId = v.Id |
|||
orgCont.Number = v.Number |
|||
orgCont.Name = v.Name |
|||
orgCont.Abbreviation = v.Abbreviation |
|||
orgCont.State = 1 |
|||
orgCont.Time = time.Now().Unix() |
|||
//获取行政组织类型
|
|||
var orgType models.AdministrativeOrganizationType |
|||
orgTypeErr := orgType.GetCont(map[string]interface{}{"kingdeeid": v.GovClass}, "id") |
|||
if orgTypeErr == nil { |
|||
orgCont.OrganizationType = orgType.Id |
|||
} |
|||
//获取知行学院及企业微信对照码
|
|||
var orgOldCont models.AdministrativeOrganization |
|||
orgOldErr := overall.CONSTANT_DB_HR_Jin.Model(&models.AdministrativeOrganization{}).Select("wechat_organization_id,schoole").Where("`number` = ?", v.Number).First(&orgOldCont).Error |
|||
if orgOldErr == nil { |
|||
orgCont.WechatOrganizationId = orgOldCont.WechatOrganizationId |
|||
orgCont.Schoole = orgOldCont.Schoole |
|||
} |
|||
if overallhandle.StringIsInMap(v.Number, OrgNumberDuiZhao) { |
|||
orgCont.IsPower = 1 |
|||
} |
|||
// orgCont.IsPower
|
|||
addErr := overall.CONSTANT_DB_HR.Create(&orgCont).Error |
|||
if addErr == nil { |
|||
overallhandle.WriteLog("add", "行政组织写入成功!", addErr, orgCont) |
|||
} else { |
|||
overallhandle.WriteLog("add", "行政组织写入失败!", addErr, orgCont) |
|||
} |
|||
} |
|||
|
|||
} |
|||
//职务上级校正
|
|||
for _, cv := range orgInfo { |
|||
var parentContCorre models.AdministrativeOrganization |
|||
parentErr := parentContCorre.GetCont(map[string]interface{}{"kingdeeid": cv.Id}, "`id`", "`superior`") |
|||
if parentErr == nil { |
|||
var orgCorrePrent models.AdministrativeOrganization |
|||
orgCorrePrentErr := orgCorrePrent.GetCont(map[string]interface{}{"kingdeeid": cv.Superior}, "id") |
|||
if orgCorrePrentErr == nil { |
|||
if parentContCorre.Superior != orgCorrePrent.Id { |
|||
saveData := overallhandle.MapOut() |
|||
saveData["superior"] = orgCorrePrent.Id |
|||
saveData["time"] = time.Now().Unix() |
|||
parentIngErr := parentContCorre.EiteCont(map[string]interface{}{"id": parentContCorre.Id}, saveData) |
|||
overallhandle.WriteLog("add", "行政组织写入成功!", parentIngErr, saveData) |
|||
} |
|||
} |
|||
} |
|||
} |
|||
//关闭已经弃用得行政组织
|
|||
var orgAdminAll []models.AdministrativeOrganization |
|||
allErr := overall.CONSTANT_DB_HR.Where("`state` = 1").Find(&orgAdminAll).Error |
|||
if allErr == nil { |
|||
var eidtId []string |
|||
for _, av := range orgAdminAll { |
|||
if overallhandle.StringIsInMap(av.KingdeeId, kingDeeIdAry) == false { |
|||
if overallhandle.StringIsInMap(av.KingdeeId, eidtId) == false { |
|||
eidtId = append(eidtId, av.KingdeeId) |
|||
} |
|||
} |
|||
} |
|||
if len(eidtId) > 0 { |
|||
orgAdminEditErr := overall.CONSTANT_DB_HR.Model(&models.AdministrativeOrganization{}).Where("`kingdeeid` IN ?", eidtId).Updates(map[string]interface{}{"state": 2}).Error |
|||
if orgAdminEditErr == nil { |
|||
overallhandle.WriteLog("edit", "禁用已不使用得行政组织成功!", orgAdminEditErr, eidtId) |
|||
} else { |
|||
overallhandle.WriteLog("edit", "禁用已不使用得行政组织失败!", orgAdminEditErr, eidtId) |
|||
} |
|||
} |
|||
} |
|||
} |
|||
|
|||
//职位
|
|||
func Position() { |
|||
var orgInfo []positionType |
|||
sendUrl := fmt.Sprintf("%v/person/position", overall.DockingKingdeeUrl) |
|||
respBody, err := GetUrl(sendUrl) |
|||
if err != nil { |
|||
overallhandle.WriteLog("e", "未能获取到职位!", err) |
|||
return |
|||
} |
|||
err = json.Unmarshal(respBody, &orgInfo) |
|||
if err != nil { |
|||
overallhandle.WriteLog("e", "职位映射错误!", err) |
|||
return |
|||
} |
|||
overallhandle.WriteLog("i", "职位映射完成!", orgInfo) |
|||
if len(orgInfo) < 0 { |
|||
overallhandle.WriteLog("e", "金蝶对照数据!", orgInfo) |
|||
return |
|||
} |
|||
|
|||
var kingDeeIdAry []string |
|||
//批量写入
|
|||
var batchPosition []models.Position |
|||
//进行职位对照
|
|||
for _, v := range orgInfo { |
|||
if overallhandle.StringIsInMap(v.Id, kingDeeIdAry) == false { |
|||
kingDeeIdAry = append(kingDeeIdAry, v.Id) |
|||
} |
|||
// strconv.Atoi(v.FIsRespPosition)
|
|||
personInt64, _ := strconv.Atoi(v.FIsRespPosition) |
|||
|
|||
//获取职务信息
|
|||
var zhiwuCont models.Duties |
|||
zhiwuCont.GetCont(map[string]interface{}{"kingdeeid": v.FJobID}, "id") |
|||
|
|||
//判断该项是否存在
|
|||
var positCont models.Position |
|||
positContErr := positCont.GetCont(map[string]interface{}{"kingdeeid": v.Id}) |
|||
if positContErr == nil { |
|||
//存在,进行更新
|
|||
isEdit := false |
|||
saveData := overallhandle.MapOut() |
|||
if v.Name != positCont.Name { |
|||
saveData["name"] = v.Name |
|||
isEdit = true |
|||
} |
|||
if positCont.State != 1 { |
|||
saveData["state"] = 1 |
|||
isEdit = true |
|||
} |
|||
|
|||
if v.Fnumber != positCont.Number { |
|||
saveData["number"] = v.Fnumber |
|||
isEdit = true |
|||
} |
|||
if zhiwuCont.Id != positCont.Duties { |
|||
saveData["duties"] = zhiwuCont.Id |
|||
isEdit = true |
|||
} |
|||
//获取行政组织
|
|||
var orgCont models.AdministrativeOrganization |
|||
orgContErr := orgCont.GetCont(map[string]interface{}{"kingdeeid": v.FAdminOrgUnitID}, "id", "superior") |
|||
if orgContErr == nil { |
|||
if orgCont.Id != positCont.AdministrativeOrganization { |
|||
saveData["administrative_organization"] = orgCont.Id |
|||
saveData["department"] = overallhandle.GetGroupOrDepartPower(orgCont.Superior, 1) |
|||
isEdit = true |
|||
} |
|||
} |
|||
|
|||
if isEdit == true { |
|||
saveData["time"] = time.Now().Unix() |
|||
editErr := positCont.EiteCont(map[string]interface{}{"id": positCont.Id}, saveData) |
|||
if editErr == nil { |
|||
overallhandle.WriteLog("edit", "职位更新成功!", editErr, v, saveData) |
|||
} else { |
|||
overallhandle.WriteLog("edit", "职位更新失败!", editErr, v, saveData) |
|||
} |
|||
} |
|||
} else { |
|||
//不存在,新增
|
|||
positCont.Number = v.Fnumber |
|||
positCont.Name = v.Name |
|||
positCont.KingdeeId = v.Id |
|||
positCont.Time = time.Now().Unix() |
|||
positCont.State = 1 |
|||
//获取行政组织
|
|||
var orgCont models.AdministrativeOrganization |
|||
orgContErr := orgCont.GetCont(map[string]interface{}{"kingdeeid": v.FAdminOrgUnitID}, "id", "superior") |
|||
if orgContErr == nil { |
|||
positCont.AdministrativeOrganization = orgCont.Id |
|||
positCont.Department = overallhandle.GetGroupOrDepartPower(orgCont.Superior, 1) |
|||
} |
|||
//获取知行学院及企业微信对照码
|
|||
var orgOldCont models.Position |
|||
orgOldErr := overall.CONSTANT_DB_HR_Jin.Model(&models.Position{}).Select("school,person_in_charge").Where("`number` = ?", v.Fnumber).First(&orgOldCont).Error |
|||
positCont.PersonInCharge = personInt64 |
|||
if orgOldErr == nil { |
|||
if personInt64 != orgOldCont.PersonInCharge { |
|||
if orgOldCont.PersonInCharge == 1 { |
|||
positCont.PersonInCharge = orgOldCont.PersonInCharge |
|||
} |
|||
} |
|||
positCont.School = orgOldCont.School |
|||
} |
|||
positCont.Duties = zhiwuCont.Id |
|||
batchPosition = append(batchPosition, positCont) |
|||
// if v.Id == "QBsfJ1fbSKW+3q6eOJltjHSuYS4=" {
|
|||
// fmt.Printf("positCont---->%v\n", positCont)
|
|||
// return
|
|||
// }
|
|||
|
|||
if len(batchPosition)%100 == 0 { |
|||
synPro.Add(1) |
|||
go writePositis(batchPosition) |
|||
var batchPositionNew []models.Position |
|||
batchPosition = batchPositionNew |
|||
|
|||
// addErr := overall.CONSTANT_DB_HR.Create(&batchPosition).Error
|
|||
// if addErr == nil {
|
|||
// var batchPositionNew []models.Position
|
|||
// batchPosition = batchPositionNew
|
|||
// overallhandle.WriteLog("add", "职位写入成功!", addErr, batchPosition)
|
|||
// } else {
|
|||
// overallhandle.WriteLog("add", "职位写入失败!", addErr, batchPosition)
|
|||
// }
|
|||
} |
|||
|
|||
} |
|||
} |
|||
if len(batchPosition) > 0 { |
|||
synPro.Add(1) |
|||
go writePositis(batchPosition) |
|||
} |
|||
synPro.Wait() |
|||
//职位上级校正
|
|||
var calibPositList []positionType |
|||
for _, cv := range orgInfo { |
|||
calibPositList = append(calibPositList, cv) |
|||
if len(calibPositList)%100 == 0 { |
|||
synPro.Add(1) |
|||
go calibrationPosition(calibPositList) |
|||
var calibPositListNew []positionType |
|||
calibPositList = calibPositListNew |
|||
} |
|||
} |
|||
|
|||
if len(calibPositList) > 0 { |
|||
synPro.Add(1) |
|||
go calibrationPosition(calibPositList) |
|||
} |
|||
synPro.Wait() |
|||
|
|||
//关闭已经弃用得行政组织
|
|||
var orgAdminAll []models.Position |
|||
allErr := overall.CONSTANT_DB_HR.Where("`state` = 1").Find(&orgAdminAll).Error |
|||
if allErr == nil { |
|||
var eidtId []string |
|||
for _, av := range orgAdminAll { |
|||
if overallhandle.StringIsInMap(av.KingdeeId, kingDeeIdAry) == false { |
|||
if overallhandle.StringIsInMap(av.KingdeeId, eidtId) == false { |
|||
eidtId = append(eidtId, av.KingdeeId) |
|||
} |
|||
} |
|||
} |
|||
if len(eidtId) > 0 { |
|||
orgAdminEditErr := overall.CONSTANT_DB_HR.Model(&models.Position{}).Where("`kingdeeid` IN ?", eidtId).Updates(map[string]interface{}{"state": 2}).Error |
|||
if orgAdminEditErr == nil { |
|||
overallhandle.WriteLog("edit", "禁用已不使用得职位成功!", orgAdminEditErr, eidtId) |
|||
} else { |
|||
overallhandle.WriteLog("edit", "禁用已不使用得职位失败!", orgAdminEditErr, eidtId) |
|||
} |
|||
} |
|||
} |
|||
} |
|||
|
|||
//协程写入职位
|
|||
func writePositis(batchPositionNew []models.Position) { |
|||
defer synPro.Done() |
|||
if len(batchPositionNew) > 0 { |
|||
addErr := overall.CONSTANT_DB_HR.Create(&batchPositionNew).Error |
|||
if addErr == nil { |
|||
overallhandle.WriteLog("add", "职位写入成功!", addErr, batchPositionNew) |
|||
} else { |
|||
overallhandle.WriteLog("add", "职位写入失败!", addErr, batchPositionNew) |
|||
} |
|||
} |
|||
} |
|||
|
|||
//协程职位校正
|
|||
func calibrationPosition(orgInfo []positionType) { |
|||
defer synPro.Done() |
|||
if len(orgInfo) > 0 { |
|||
for _, cv := range orgInfo { |
|||
var parentContCorre models.Position |
|||
parentErr := parentContCorre.GetCont(map[string]interface{}{"kingdeeid": cv.Id}, "`id`", "`superior`") |
|||
if parentErr == nil { |
|||
var orgCorrePrent models.Position |
|||
orgCorrePrentErr := orgCorrePrent.GetCont(map[string]interface{}{"kingdeeid": cv.FParentID}, "id") |
|||
if orgCorrePrentErr == nil { |
|||
if parentContCorre.Superior != orgCorrePrent.Id { |
|||
saveData := overallhandle.MapOut() |
|||
saveData["superior"] = orgCorrePrent.Id |
|||
saveData["time"] = time.Now().Unix() |
|||
parentContCorre.EiteCont(map[string]interface{}{"id": parentContCorre.Id}, saveData) |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,24 @@ |
|||
package dockingorganization |
|||
|
|||
import ( |
|||
"fmt" |
|||
"hr_server/overall/overallhandle" |
|||
"io/ioutil" |
|||
"net/http" |
|||
"time" |
|||
) |
|||
|
|||
func GetUrl(sendUrl string) (respBody []byte, err error) { |
|||
req, err := http.NewRequest("GET", sendUrl, nil) |
|||
|
|||
client := &http.Client{Timeout: 500 * time.Second} // 设置请求超时时长5s
|
|||
resp, err := client.Do(req) |
|||
if err != nil { |
|||
errmsg := fmt.Sprintf("访问请求[%v] http.DefaultClient.Do() err: %v", sendUrl, err) |
|||
overallhandle.WriteLog("e", errmsg) |
|||
return |
|||
} |
|||
defer resp.Body.Close() |
|||
respBody, err = ioutil.ReadAll(resp.Body) |
|||
return |
|||
} |
|||
@ -0,0 +1,60 @@ |
|||
package dockingorganization |
|||
|
|||
import ( |
|||
"hr_server/overall/overallhandle" |
|||
"sync" |
|||
|
|||
"github.com/gin-gonic/gin" |
|||
) |
|||
|
|||
type DockingJinDieApi struct{} |
|||
|
|||
//入口
|
|||
func (e *DockingJinDieApi) Index(c *gin.Context) { |
|||
outputCont := overallhandle.MapOut() |
|||
outputCont["index"] = "金蝶对接入口" |
|||
overallhandle.Result(0, outputCont, c) |
|||
} |
|||
|
|||
var synPro = sync.WaitGroup{} |
|||
|
|||
//行政组织类型
|
|||
type orgClass struct { |
|||
Id string `json:"id"` |
|||
Name string `json:"name"` |
|||
} |
|||
|
|||
//职务类型
|
|||
type jobClassType struct { |
|||
orgClass |
|||
Fnumber string `json:"fnumber"` |
|||
} |
|||
|
|||
//职务对照
|
|||
type jobContDuck struct { |
|||
jobClassType |
|||
Fjobtype string `json:"fjobtype"` |
|||
} |
|||
|
|||
//行政组织
|
|||
type orgAdminType struct { |
|||
orgClass |
|||
Number string `json:"number"` |
|||
Superior string `json:"superior"` |
|||
GovClass string `json:"govclass"` |
|||
Abbreviation string `json:"abbreviation"` |
|||
} |
|||
|
|||
//职位
|
|||
type positionType struct { |
|||
jobClassType |
|||
FAdminOrgUnitID string `json:"FAdminOrgUnitID"` |
|||
FParentID string `json:"FParentID"` |
|||
FIsRespPosition string `json:"FIsRespPosition"` //0:不是负责人职位;1:是负责人职位
|
|||
FJobID string `json:"FJobID"` //关联职务
|
|||
} |
|||
|
|||
var ( |
|||
OrdIdDuiZhaoAry = []int64{7, 32, 34, 40, 45, 64, 65, 91, 94, 98, 102, 104, 106, 111, 115, 116, 122, 124, 126, 128, 130, 137, 139, 140, 141, 142, 143, 144, 145, 146, 148, 149, 150, 151, 155, 156, 158, 159, 161, 166, 167, 174, 175, 176, 183, 184, 185, 186, 190, 193, 194, 195, 198, 199, 200, 201, 202, 208, 210, 211, 213, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 228, 229, 230, 231, 232, 233, 235, 236, 237, 238, 239, 240, 241, 242, 243, 249, 250, 254, 264, 267, 270, 274, 276, 279, 280, 281, 292, 293, 294, 295, 296, 297, 298, 299, 300, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 322, 323, 326, 327, 329, 330, 331, 333, 334, 335, 337, 346, 348, 353, 360, 361, 362, 363, 365, 368, 369, 371, 383, 385, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 403, 405, 407, 408} |
|||
OrgNumberDuiZhao = []string{"HXSW06", "RX15", "HXSW03", "HXSW07", "RX1702", "WL00", "RXGH00", "RX16", "RX17", "RX20", "GK03", "GK04", "GK06", "GK09", "GK1003", "GK11", "ZQ07", "HXJF03", "GK18", "HXJF06", "ZQ00", "HXJF01", "ZQ01", "ZQ12", "ZQ13", "ZQ09", "ZQ14", "ZQ16", "ZQ17", "ZQ08", "ZQ10", "ZQ11", "ZQ15", "ZQ18", "HXSW08", "GK16", "RX22", "RX23", "SGFDC01", "YLHY01", "YLHY02", "WL01", "WL02", "WL05", "WL06", "HCGJ00", "WL09", "WL12", "HCGJ01", "ZK00", "ZT09", "ZT10", "HXSW11", "WL13", "WL14", "WL15", "WL16", "GK17", "YH00", "YT00", "ZK01", "ZT00", "ZT01", "ZT02", "ZT03", "ZT04", "ZT05", "ZT06", "ZT07", "ZT08", "WL04", "WL07", "WL03", "WL08", "WL10", "WL11", "HXZY01", "HXJF00", "WL17", "ZQ02", "ZQ03", "ZQ04", "HXJF04", "ZQ06", "HXJF05", "HXZTGC00", "ZQ05", "HXJF02", "RX19", "RX21", "RX14", "RX18", "GK01", "GK02", "GK05", "GK07", "GK08", "GK10", "GK1002", "04", "HXZY00", "YLHY00", "RX00", "BY00", "HXKJ00", "HXSW", "TLWL00", "YLNY00", "HXHQ00", "TYWY00", "01", "02", "03", "HY00", "GK00", "RXDL00", "SGFDC00", "00", "HX00", "HXXCL00", "HX01", "HX0101", "HX0102", "HX02", "RX01", "RX02", "RX25", "RX03", "RX04", "RX06", "RX08", "RX10", "RX12", "HX03", "RX05", "RX07", "RX09", "RX11", "RX13", "GK12", "GK13", "GK14", "GK15", "HXSW00", "HXSW01", "HXSW10", "HXSW02", "HXSW09", "HXSW04", "HXZYRL06", "HXZYRL03", "HXLSNY00", "JAAZGC00", "HXXNY01", "HXXNY02", "HXXNY03", "HXXNY04", "HXXNY05", "HXXNY06", "HXXNY07", "HXXNY08", "HXXNY09", "HXXNY10", "HXXNY11", "HXZYRL00", "HXXNY00", "HXZYRL02", "HXZYRL05", "HXZYRL04", "HXZYRL01"} |
|||
) |
|||
@ -0,0 +1,9 @@ |
|||
package jindiedocking |
|||
|
|||
import "hr_server/api/jindie_docking/dockingorganization" |
|||
|
|||
type ApiInlet struct { |
|||
DockJinDieApi dockingorganization.DockingJinDieApi |
|||
} |
|||
|
|||
var AppApiInlet = new(ApiInlet) |
|||
@ -0,0 +1,184 @@ |
|||
package administrativeorganization |
|||
|
|||
import ( |
|||
"hr_server/models" |
|||
"hr_server/overall" |
|||
"hr_server/overall/overallhandle" |
|||
"time" |
|||
|
|||
"github.com/gin-gonic/gin" |
|||
) |
|||
|
|||
//获取班组内容
|
|||
func (o *OrganizationApi) GetTeamCont(c *gin.Context) { |
|||
var requestData overallhandle.GetId |
|||
err := c.ShouldBindJSON(&requestData) |
|||
if err != nil { |
|||
overallhandle.Result(100, requestData, c) |
|||
return |
|||
} |
|||
if requestData.IdStr == "" { |
|||
overallhandle.Result(101, requestData, c) |
|||
return |
|||
} |
|||
var getTeamCont models.TeamGroup |
|||
getErr := getTeamCont.GetCont(map[string]interface{}{"`id`": requestData.IdStr}) |
|||
if getErr != nil { |
|||
overallhandle.Result(105, getErr, c) |
|||
return |
|||
} |
|||
overallhandle.Result(0, getTeamCont, c) |
|||
} |
|||
|
|||
//添加班组
|
|||
func (o *OrganizationApi) AddTeamCont(c *gin.Context) { |
|||
var requestData NameVal |
|||
err := c.ShouldBindJSON(&requestData) |
|||
if err != nil { |
|||
overallhandle.Result(100, requestData, c) |
|||
return |
|||
} |
|||
if requestData.Name == "" { |
|||
overallhandle.Result(101, requestData, c) |
|||
return |
|||
} |
|||
var teamCont models.TeamGroup |
|||
errTeam := teamCont.GetCont(map[string]interface{}{"`name`": requestData.Name}) |
|||
if errTeam == nil { |
|||
overallhandle.Result(103, teamCont, c) |
|||
return |
|||
} |
|||
var saveData models.TeamGroup |
|||
saveData.Name = requestData.Name |
|||
saveData.State = 1 |
|||
saveData.Time = time.Now().Unix() |
|||
saveErr := overall.CONSTANT_DB_HR.Create(&saveData).Error |
|||
if saveErr == nil { |
|||
overallhandle.Result(0, saveData, c) |
|||
} else { |
|||
overallhandle.Result(104, saveData, c) |
|||
} |
|||
} |
|||
|
|||
//编辑班组
|
|||
func (o *OrganizationApi) EiteTeamCont(c *gin.Context) { |
|||
var requestData eidtTeamCont |
|||
err := c.ShouldBindJSON(&requestData) |
|||
if err != nil { |
|||
overallhandle.Result(100, requestData, c) |
|||
return |
|||
} |
|||
if requestData.Id == "" { |
|||
overallhandle.Result(101, requestData, c) |
|||
return |
|||
} |
|||
if requestData.Name == "" { |
|||
overallhandle.Result(101, requestData, c) |
|||
return |
|||
} |
|||
var getTeamCont models.TeamGroup |
|||
getErr := getTeamCont.GetCont(map[string]interface{}{"`id`": requestData.Id}) |
|||
if getErr != nil { |
|||
overallhandle.Result(105, getErr, c) |
|||
return |
|||
} |
|||
if getTeamCont.Name != requestData.Name { |
|||
var teamCont models.TeamGroup |
|||
errTeam := teamCont.GetCont(map[string]interface{}{"`name`": requestData.Name}) |
|||
if errTeam == nil { |
|||
overallhandle.Result(103, teamCont, c) |
|||
return |
|||
} |
|||
eidtCont := overallhandle.MapOut() |
|||
eidtCont["name"] = requestData.Name |
|||
eidtCont["time"] = time.Now().Unix() |
|||
eidtErr := getTeamCont.EiteTeamGroupCont(map[string]interface{}{"`id`": requestData.Id}, eidtCont) |
|||
if eidtErr == nil { |
|||
overallhandle.Result(0, eidtCont, c) |
|||
} else { |
|||
overallhandle.Result(106, eidtErr, c) |
|||
} |
|||
} else { |
|||
overallhandle.Result(0, getTeamCont, c) |
|||
} |
|||
} |
|||
|
|||
//编辑状态与删除班组
|
|||
func (o *OrganizationApi) EidtDelTeamCont(c *gin.Context) { |
|||
var requestData EiteJobStateDel |
|||
err := c.ShouldBindJSON(&requestData) |
|||
if err != nil { |
|||
overallhandle.Result(100, requestData, c) |
|||
return |
|||
} |
|||
if requestData.IdStr == "" { |
|||
overallhandle.Result(101, requestData, c) |
|||
return |
|||
} |
|||
if requestData.State == 0 { |
|||
requestData.State = 1 |
|||
} |
|||
if requestData.IsTrue == 0 { |
|||
requestData.IsTrue = 2 |
|||
} |
|||
var getTeamCont models.TeamGroup |
|||
getErr := getTeamCont.GetCont(map[string]interface{}{"`id`": requestData.IdStr}) |
|||
if getErr != nil { |
|||
overallhandle.Result(105, getErr, c) |
|||
return |
|||
} |
|||
whereAry := overallhandle.MapOut() |
|||
whereAry["id"] = requestData.IdStr |
|||
saveData := overallhandle.MapOut() |
|||
saveData["time"] = time.Now().Unix() |
|||
saveData["state"] = requestData.State |
|||
|
|||
if requestData.State != 3 { |
|||
eiteErr := getTeamCont.EiteTeamGroupCont(whereAry, saveData) |
|||
if eiteErr != nil { |
|||
overallhandle.Result(106, eiteErr, c) |
|||
} else { |
|||
overallhandle.Result(0, saveData, c) |
|||
} |
|||
} else { |
|||
if requestData.IsTrue != 1 { |
|||
//软删除
|
|||
eiteErr := getTeamCont.EiteTeamGroupCont(whereAry, saveData) |
|||
if eiteErr != nil { |
|||
overallhandle.Result(106, eiteErr, c) |
|||
} else { |
|||
overallhandle.Result(0, saveData, c) |
|||
} |
|||
} else { |
|||
//硬删除
|
|||
delErr := overall.CONSTANT_DB_HR.Where(whereAry).Delete(&getTeamCont) |
|||
if delErr == nil { |
|||
overallhandle.Result(0, saveData, c) |
|||
} else { |
|||
overallhandle.Result(108, delErr, c) |
|||
} |
|||
} |
|||
} |
|||
} |
|||
|
|||
//班组列表
|
|||
func (o *OrganizationApi) TeamContList(c *gin.Context) { |
|||
var requestData JobClassPageSelect |
|||
c.ShouldBindJSON(&requestData) |
|||
gormDb := overall.CONSTANT_DB_HR.Model(&models.TeamGroup{}).Where("`state` = 1") |
|||
if requestData.Name != "" { |
|||
gormDb = gormDb.Where("`name` LIKE ?", "%"+requestData.Name+"%") |
|||
} |
|||
var total int64 |
|||
totalErr := gormDb.Count(&total).Error |
|||
if totalErr != nil { |
|||
total = 0 |
|||
} |
|||
var teamList []models.TeamGroup |
|||
err := gormDb.Limit(requestData.PageSize).Offset(overallhandle.LimitPage(requestData.Page, requestData.PageSize)).Find(&teamList).Error |
|||
if err != nil { |
|||
overallhandle.Result(105, err, c) |
|||
} else { |
|||
overallhandle.ResultList(0, requestData.Page, requestData.PageSize, total, int64(len(teamList)), teamList, c) |
|||
} |
|||
} |
|||
@ -1,9 +1,17 @@ |
|||
package version1 |
|||
|
|||
import "hr_server/api/version1/administrativeorganization" |
|||
import ( |
|||
"hr_server/api/version1/administrativeorganization" |
|||
"hr_server/api/version1/permitpowerapi" |
|||
"hr_server/api/version1/personnelapi" |
|||
"hr_server/api/version1/shiyan" |
|||
) |
|||
|
|||
type ApiInlet struct { |
|||
OrganizationApi administrativeorganization.OrganizationApi |
|||
PermitPowerApi permitpowerapi.PermitPowerApi |
|||
StaffApi personnelapi.StaffApi |
|||
ShiyanApi shiyan.ShiYan |
|||
} |
|||
|
|||
var AppApiInlet = new(ApiInlet) |
|||
|
|||
@ -0,0 +1,43 @@ |
|||
package permitpowerapi |
|||
|
|||
import ( |
|||
"hr_server/models" |
|||
"hr_server/overall" |
|||
"hr_server/overall/overallhandle" |
|||
|
|||
"github.com/gin-gonic/gin" |
|||
) |
|||
|
|||
//权限列表
|
|||
|
|||
func (p *PermitPowerApi) PermitPowerList(c *gin.Context) { |
|||
var muneList []models.SystemMenu |
|||
err := overall.CONSTANT_DB_Master.Model(&models.SystemMenu{}).Where("m_steat = 1").Order("m_sort ASC").Order("m_id ASC").Find(&muneList).Error |
|||
if err != nil { |
|||
overallhandle.Result(105, err, c, "职位编码不能为空!") |
|||
return |
|||
} |
|||
var list []models.SystemMenuOperation |
|||
for _, v := range muneList { |
|||
var listCont models.SystemMenuOperation |
|||
listCont.Id = v.Id |
|||
listCont.Title = v.Title // 菜单名称"`
|
|||
listCont.State = v.State // 是否启用(1:启用;2:禁用;3:删除)"`
|
|||
listCont.ParentId = v.ParentId // '父级(顶级:0)"`
|
|||
listCont.ApiUrl = v.ApiUrl // 地址"`
|
|||
listCont.Time = v.Time // 创建时间"`
|
|||
listCont.EiteTime = v.EiteTime // 修改时间"`
|
|||
listCont.UserId = v.UserId // 写入人"`
|
|||
listCont.Sort = v.Sort // 排序"`
|
|||
listCont.MenuPermit = getMenuButton(v.Id) |
|||
list = append(list, listCont) |
|||
} |
|||
printList := overallhandle.MenuThreePermit(0, list) |
|||
overallhandle.Result(0, printList, c) |
|||
} |
|||
|
|||
//获取菜单按钮
|
|||
func getMenuButton(menuId int64) (buttonList []models.MenuOperation) { |
|||
overall.CONSTANT_DB_Master.Where("menu_id = ?", menuId).Find(&buttonList) |
|||
return |
|||
} |
|||
@ -0,0 +1,47 @@ |
|||
package permitpowerapi |
|||
|
|||
import ( |
|||
"encoding/json" |
|||
"hr_server/models" |
|||
"hr_server/overall/overallhandle" |
|||
"time" |
|||
|
|||
"github.com/gin-gonic/gin" |
|||
) |
|||
|
|||
//岗位(职位)配权
|
|||
func (p *PermitPowerApi) PositionAllotment(c *gin.Context) { |
|||
var requestData PositionAllotmentType |
|||
err := c.ShouldBindJSON(&requestData) |
|||
if err != nil { |
|||
overallhandle.Result(100, err, c) |
|||
return |
|||
} |
|||
if requestData.Id == "" { |
|||
overallhandle.Result(101, requestData.Id, c) |
|||
return |
|||
} |
|||
whereAry := overallhandle.MapOut() |
|||
whereAry["id"] = requestData.Id |
|||
var jobClassInfo models.Position |
|||
//判断行政组织是否存在
|
|||
judgeExist := jobClassInfo.GetCont(whereAry) |
|||
if judgeExist != nil { |
|||
overallhandle.Result(107, judgeExist, c) |
|||
return |
|||
} |
|||
//权限
|
|||
menuPermit, _ := json.Marshal(requestData.MenuPermit) |
|||
buttonPermit, _ := json.Marshal(requestData.ButtonPermit) |
|||
//赋权
|
|||
saveData := overallhandle.MapOut() |
|||
saveData["time"] = time.Now().Unix() |
|||
saveData["menu_permit"] = menuPermit |
|||
saveData["button_permit"] = buttonPermit |
|||
eiteErr := jobClassInfo.EiteCont(whereAry, saveData) |
|||
if eiteErr != nil { |
|||
overallhandle.Result(106, eiteErr, c) |
|||
} else { |
|||
overallhandle.Result(0, saveData, c) |
|||
} |
|||
} |
|||
@ -0,0 +1,23 @@ |
|||
package permitpowerapi |
|||
|
|||
import ( |
|||
"hr_server/overall/overallhandle" |
|||
|
|||
"github.com/gin-gonic/gin" |
|||
) |
|||
|
|||
type PermitPowerApi struct{} |
|||
|
|||
//入口
|
|||
func (p *PermitPowerApi) Index(c *gin.Context) { |
|||
outputCont := overallhandle.MapOut() |
|||
outputCont["index"] = "权限管理入口" |
|||
overallhandle.Result(0, outputCont, c) |
|||
} |
|||
|
|||
//岗位(职位)配权
|
|||
type PositionAllotmentType struct { |
|||
Id string `json:"id"` //岗位(职位) ID
|
|||
MenuPermit []int64 `json:"menupermit"` //菜单权限
|
|||
ButtonPermit []int64 `json:"buttonpermit"` //按钮权限
|
|||
} |
|||
Binary file not shown.
@ -0,0 +1,281 @@ |
|||
package personnelapi |
|||
|
|||
//用工关系转换
|
|||
//1:实习生;2:待分配;3:试用员工;4:正式员工;5:停薪留职;6:退休;7:辞退;8:离职
|
|||
func emptypeToInt(emp string) int { |
|||
switch emp { |
|||
case "实习生": |
|||
return 1 |
|||
case "待分配": |
|||
return 2 |
|||
case "试用员工": |
|||
return 3 |
|||
case "正式员工": |
|||
return 4 |
|||
case "停薪留职": |
|||
return 5 |
|||
case "退休": |
|||
return 6 |
|||
case "辞退": |
|||
return 7 |
|||
case "离职": |
|||
return 8 |
|||
default: |
|||
return 1 |
|||
} |
|||
} |
|||
|
|||
//雇佣类型转换
|
|||
//雇佣类型(1:雇佣入职;2:再入职;3:返聘)
|
|||
func hireTypeToInt(hir string) int { |
|||
switch hir { |
|||
case "雇佣入职": |
|||
return 1 |
|||
case "再入职": |
|||
return 2 |
|||
case "返聘": |
|||
return 3 |
|||
default: |
|||
return 1 |
|||
} |
|||
} |
|||
|
|||
/* |
|||
婚姻状态 |
|||
婚姻状况(1:未婚;2:已婚;3:丧偶;4:离异) |
|||
*/ |
|||
func maritalstatusToInt(name string) int { |
|||
switch name { |
|||
case "未婚": |
|||
return 1 |
|||
case "已婚": |
|||
return 2 |
|||
case "丧偶": |
|||
return 3 |
|||
case "离异": |
|||
return 4 |
|||
default: |
|||
return 1 |
|||
} |
|||
} |
|||
|
|||
/* |
|||
星座 |
|||
(1:白羊座;2:金牛座;3:双子座;4:巨蟹座;5:狮子座;6:处女座;7:天枰座;8:天蝎座;9:射手座;10:摩羯座;11:水瓶座;12:双鱼座) |
|||
*/ |
|||
|
|||
func consteToInt(emp string) int { |
|||
switch emp { |
|||
case "白羊座": |
|||
return 1 |
|||
case "金牛座": |
|||
return 2 |
|||
case "双子座": |
|||
return 3 |
|||
case "巨蟹座": |
|||
return 4 |
|||
case "狮子座": |
|||
return 5 |
|||
case "处女座": |
|||
return 6 |
|||
case "天枰座": |
|||
return 7 |
|||
case "天蝎座": |
|||
return 8 |
|||
case "射手座": |
|||
return 9 |
|||
case "摩羯座": |
|||
return 10 |
|||
case "水瓶座": |
|||
return 11 |
|||
case "双鱼座": |
|||
return 12 |
|||
default: |
|||
return 1 |
|||
} |
|||
} |
|||
|
|||
/* |
|||
政治面貌 |
|||
(1:群众; 2:无党派;3:台盟会员;4:九三社员;5:致公党员;6:农工党员;7:民进会员;8:民建会员;9:民盟盟员;10:民革会员,11:共青团员;12:预备党员;13:中共党员) |
|||
*/ |
|||
func politiToInt(emp string) int { |
|||
switch emp { |
|||
case "群众": |
|||
return 1 |
|||
case "无党派": |
|||
return 2 |
|||
case "台盟会员": |
|||
return 3 |
|||
case "九三社员": |
|||
return 4 |
|||
case "致公党员": |
|||
return 5 |
|||
case "农工党员": |
|||
return 6 |
|||
case "民进会员": |
|||
return 7 |
|||
case "民建会员": |
|||
return 8 |
|||
case "民盟盟员": |
|||
return 9 |
|||
case "民革会员": |
|||
return 10 |
|||
case "共青团员": |
|||
return 11 |
|||
case "预备党员": |
|||
return 12 |
|||
case "中共党员": |
|||
return 13 |
|||
default: |
|||
return 1 |
|||
} |
|||
} |
|||
|
|||
/* |
|||
性别 |
|||
(1:男性;2:女性;3:中性) |
|||
*/ |
|||
func genderToInt(name string) int { |
|||
switch name { |
|||
case "男": |
|||
return 1 |
|||
case "女": |
|||
return 2 |
|||
case "中性": |
|||
return 3 |
|||
case "男性": |
|||
return 1 |
|||
case "女性": |
|||
return 2 |
|||
default: |
|||
return 1 |
|||
} |
|||
} |
|||
|
|||
/* |
|||
健康状况 |
|||
(1:良好;2:一般;3:较弱,4:有生理缺陷;5:残废) |
|||
*/ |
|||
func healthToInt(name string) int { |
|||
switch name { |
|||
case "良好": |
|||
return 1 |
|||
case "一般": |
|||
return 2 |
|||
case "较弱": |
|||
return 3 |
|||
case "有生理缺陷": |
|||
return 4 |
|||
case "残废": |
|||
return 5 |
|||
default: |
|||
return 2 |
|||
} |
|||
} |
|||
|
|||
/* |
|||
健康状况 |
|||
(1:主职;2:兼职) |
|||
*/ |
|||
func assignTypeToInt(name string) int { |
|||
switch name { |
|||
case "主职": |
|||
return 1 |
|||
default: |
|||
return 2 |
|||
} |
|||
} |
|||
|
|||
/* |
|||
变动类型 |
|||
(1:预入职;2:雇佣入职;3:转正;4:晋升;5:降级;6:职等调整;7:调动调入;8:跨公司调动调入;9:借调;10:平调;11:兼职;12:预离职;13:离职;14:退休;15:返聘;16:员工初始化;) |
|||
*/ |
|||
func changeTypeToInt(emp string) int { |
|||
switch emp { |
|||
case "预入职": |
|||
return 1 |
|||
case "雇佣入职": |
|||
return 2 |
|||
case "转正": |
|||
return 3 |
|||
case "晋升": |
|||
return 4 |
|||
case "降级": |
|||
return 5 |
|||
case "职等调整": |
|||
return 6 |
|||
case "调动调入": |
|||
return 7 |
|||
case "跨公司调动调入": |
|||
return 8 |
|||
case "借调": |
|||
return 9 |
|||
case "平调": |
|||
return 10 |
|||
case "兼职": |
|||
return 11 |
|||
case "预离职": |
|||
return 12 |
|||
case "离职": |
|||
return 13 |
|||
case "退休": |
|||
return 14 |
|||
case "返聘": |
|||
return 15 |
|||
case "员工初始化": |
|||
return 16 |
|||
default: |
|||
return 1 |
|||
} |
|||
} |
|||
|
|||
/* |
|||
学历 |
|||
(1:初中及以下;2:中专;3:高中;4:中技;5:高技;6:函数专科;7:大学专科;8:函数本科;9:大学本科;10:硕士研究生;11:博士研究生;12:专家、教授) |
|||
*/ |
|||
|
|||
func ducationToInt(emp string) int { |
|||
switch emp { |
|||
case "初中及以下": |
|||
return 1 |
|||
case "中专": |
|||
return 2 |
|||
case "高中": |
|||
return 3 |
|||
case "中技": |
|||
return 4 |
|||
case "高技": |
|||
return 5 |
|||
case "函数专科": |
|||
return 6 |
|||
case "大学专科": |
|||
return 7 |
|||
case "函数本科": |
|||
return 8 |
|||
case "大学本科": |
|||
return 9 |
|||
case "硕士研究生": |
|||
return 10 |
|||
case "博士研究生": |
|||
return 11 |
|||
case "专家、教授": |
|||
return 12 |
|||
default: |
|||
return 1 |
|||
} |
|||
} |
|||
|
|||
//学位(0:无;1:学士;2:硕士;3:博士)int
|
|||
func hestacademicdegreeToInt(hir string) int { |
|||
switch hir { |
|||
case "学士": |
|||
return 1 |
|||
case "硕士": |
|||
return 2 |
|||
case "博士": |
|||
return 3 |
|||
default: |
|||
return 0 |
|||
} |
|||
} |
|||
@ -0,0 +1,824 @@ |
|||
package personnelapi |
|||
|
|||
import ( |
|||
"fmt" |
|||
"hr_server/models" |
|||
"hr_server/overall" |
|||
"hr_server/overall/overallhandle" |
|||
"strconv" |
|||
"strings" |
|||
"time" |
|||
|
|||
"github.com/gin-gonic/gin" |
|||
) |
|||
|
|||
//金蝶人员信息对接
|
|||
func (s *StaffApi) Kingdee(c *gin.Context) { |
|||
var requestData addKingdeePersonnel |
|||
c.ShouldBindJSON(&requestData) |
|||
if requestData.Number == "" { |
|||
overallhandle.Result(1, requestData.Number, c, "工号不能为空!") |
|||
return |
|||
} |
|||
var manContent models.PersonArchives |
|||
manErr := manContent.GetCont(map[string]interface{}{"`number`": requestData.Number}) |
|||
if manErr == nil { |
|||
//已经存在!进行变动操作
|
|||
manErr = eidtAddManCont(manContent, requestData) |
|||
} else { |
|||
//不存在!进行新增操作
|
|||
manErr = newAddManCont(requestData) |
|||
} |
|||
if manErr != nil { |
|||
overallhandle.Result(104, manErr, c) |
|||
return |
|||
} |
|||
overallhandle.Result(0, manErr, c) |
|||
} |
|||
|
|||
//编辑员工
|
|||
func eidtAddManCont(perArcInfo models.PersonArchives, manCont addKingdeePersonnel) error { |
|||
eidtManCont := overallhandle.MapOut() |
|||
if manCont.Name != "" && manCont.Name != perArcInfo.Name { |
|||
eidtManCont["`name`"] = manCont.Name |
|||
} |
|||
if manCont.Icon != "" && manCont.Icon != perArcInfo.Icon { |
|||
eidtManCont["`icon`"] = manCont.Icon |
|||
} |
|||
if manCont.HireType != 0 && manCont.HireType != perArcInfo.HireClass { |
|||
eidtManCont["`hire_class`"] = manCont.HireType |
|||
} |
|||
if manCont.EmpType != 0 && manCont.EmpType != perArcInfo.EmpType { |
|||
eidtManCont["`emp_type`"] = manCont.EmpType |
|||
} |
|||
//人员变更记录
|
|||
var manChangeRecord models.PersonnelChangeRecord |
|||
changeRecordTrue := false |
|||
//公司
|
|||
if manCont.Company != "" { |
|||
var orgCompany models.AdministrativeOrganization |
|||
orgErr := orgCompany.GetCont(map[string]interface{}{"kingdeeid": manCont.Company}, "`id`") |
|||
if orgErr == nil { |
|||
if orgCompany.Id != perArcInfo.Company { |
|||
eidtManCont["`company`"] = orgCompany.Id |
|||
changeRecordTrue = true |
|||
} |
|||
manChangeRecord.Company = orgCompany.Id |
|||
} |
|||
} |
|||
//主部门
|
|||
if manCont.MainDepartment != "" { |
|||
var orgMainDepart models.AdministrativeOrganization |
|||
orgErr := orgMainDepart.GetCont(map[string]interface{}{"kingdeeid": manCont.MainDepartment}, "`id`") |
|||
if orgErr == nil { |
|||
if orgMainDepart.Id != perArcInfo.Company { |
|||
eidtManCont["`maindeparment`"] = orgMainDepart.Id |
|||
changeRecordTrue = true |
|||
} |
|||
manChangeRecord.MainDepartment = orgMainDepart.Id |
|||
} |
|||
} |
|||
//部门
|
|||
if len(manCont.Department) > 0 { |
|||
var departId []string |
|||
for _, dv := range manCont.Department { |
|||
var orgMainDepartAry models.AdministrativeOrganization |
|||
orgErr := orgMainDepartAry.GetCont(map[string]interface{}{"kingdeeid": dv}, "`id`") |
|||
if orgErr == nil { |
|||
orgIdStr := strconv.FormatInt(orgMainDepartAry.Id, 10) |
|||
if overallhandle.StringIsInMap(orgIdStr, departId) == false { |
|||
departId = append(departId, orgIdStr) |
|||
} |
|||
} |
|||
} |
|||
oldDepart := strings.Split(perArcInfo.Deparment, ",") |
|||
chaJiDepart := overallhandle.DifferenceSet[string](departId, oldDepart) |
|||
if len(chaJiDepart) > 0 { |
|||
departIdStr := strings.Join(departId, ",") |
|||
eidtManCont["`deparment`"] = departIdStr |
|||
manChangeRecord.Department = departIdStr |
|||
changeRecordTrue = true |
|||
} |
|||
|
|||
} |
|||
//行政组织
|
|||
if manCont.AdminOrg != "" { |
|||
var orgMainDepartAdmin models.AdministrativeOrganization |
|||
orgErr := orgMainDepartAdmin.GetCont(map[string]interface{}{"kingdeeid": manCont.AdminOrg}, "`id`") |
|||
if orgErr == nil { |
|||
if orgMainDepartAdmin.Id != perArcInfo.AdminOrg { |
|||
eidtManCont["`admin_org`"] = orgMainDepartAdmin.Id |
|||
changeRecordTrue = true |
|||
} |
|||
manChangeRecord.Adminorg = orgMainDepartAdmin.Id |
|||
} |
|||
} |
|||
//职位
|
|||
if manCont.Position != "" { |
|||
var positionCont models.Position |
|||
positErr := positionCont.GetCont(map[string]interface{}{`kingdeeid`: manCont.Position}, "`id`") |
|||
if positErr == nil { |
|||
if positionCont.Id != perArcInfo.Position { |
|||
eidtManCont["`position`"] = positionCont.Id |
|||
changeRecordTrue = true |
|||
} |
|||
manChangeRecord.Position = positionCont.Id |
|||
} |
|||
} |
|||
//职务
|
|||
if manCont.JobName != "" { |
|||
var dutiesCont models.DutiesClassLeve |
|||
dutiesErr := dutiesCont.GetCont(map[string]interface{}{"`d_king`": manCont.JobName}, "d_id") |
|||
if dutiesErr == nil { |
|||
|
|||
if dutiesCont.Id != perArcInfo.Position { |
|||
eidtManCont["`job_id`"] = dutiesCont.Id |
|||
changeRecordTrue = true |
|||
} |
|||
|
|||
if dutiesCont.ClassId != perArcInfo.JobClass { |
|||
eidtManCont["`job_class`"] = dutiesCont.ClassId |
|||
changeRecordTrue = true |
|||
} |
|||
manChangeRecord.JobId = dutiesCont.Id |
|||
manChangeRecord.JobClass = dutiesCont.ClassId |
|||
} |
|||
} |
|||
if manCont.PositionGrade != 0 { |
|||
if manCont.PositionGrade != perArcInfo.JobLeve { |
|||
eidtManCont["`job_leve`"] = manCont.PositionGrade |
|||
} |
|||
manChangeRecord.JobLevel = manCont.PositionGrade |
|||
changeRecordTrue = true |
|||
} |
|||
fmt.Printf("第一学历--->%v--->%v\n", changeRecordTrue, manChangeRecord) |
|||
if len(eidtManCont) > 0 { |
|||
var manMainCont models.PersonArchives |
|||
eidtErrMain := manMainCont.EiteCont(map[string]interface{}{"`id`": perArcInfo.Id}, eidtManCont) |
|||
if eidtErrMain != nil { |
|||
return eidtErrMain |
|||
} else { |
|||
if changeRecordTrue == true { |
|||
//写入变动记录
|
|||
|
|||
manChangeRecord.Type = manCont.HireType |
|||
manChangeRecord.Number = perArcInfo.Number |
|||
manChangeRecord.Time = time.Now().Unix() |
|||
|
|||
// rybdErr := overall.CONSTANT_DB_HR.Create(&manChangeRecord).Error
|
|||
// jsonCont, _ := json.Marshal(manChangeRecord)
|
|||
// fmt.Printf("第二学历--->%v--->%v\n", rybdErr, string(jsonCont))
|
|||
} |
|||
//编辑人员附属信息
|
|||
synPro.Add(1) |
|||
go editManAuxiliaryData(manCont) |
|||
//编辑紧急联系人信息
|
|||
synPro.Add(1) |
|||
go emergencyContactPerson(manCont) |
|||
//编辑员工家属信息
|
|||
synPro.Add(1) |
|||
go eidtFamilyMembers(manCont.Number, manCont.MemberOfFamily) |
|||
//编辑员工教育经历
|
|||
synPro.Add(1) |
|||
go educatExperKingdee(manCont) |
|||
synPro.Wait() |
|||
} |
|||
} |
|||
|
|||
return nil |
|||
} |
|||
|
|||
//新增员工
|
|||
func newAddManCont(manCont addKingdeePersonnel) error { |
|||
var manMainCont models.PersonArchives |
|||
manMainCont.Number = manCont.Number |
|||
manMainCont.Name = manCont.Name |
|||
manMainCont.Icon = manCont.Icon |
|||
manMainCont.HireClass = manCont.HireType |
|||
manMainCont.EmpType = manCont.EmpType |
|||
timeTady := time.Now().Unix() |
|||
manMainCont.Time = timeTady |
|||
manMainCont.EiteTime = timeTady |
|||
manMainCont.State = 1 |
|||
|
|||
if manCont.Company != "" { |
|||
var orgCompany models.AdministrativeOrganization |
|||
orgErr := orgCompany.GetCont(map[string]interface{}{"kingdeeid": manCont.Company}, "`id`") |
|||
if orgErr == nil { |
|||
manMainCont.Company = orgCompany.Id |
|||
} |
|||
} |
|||
if manCont.MainDepartment != "" { |
|||
var orgMainDepart models.AdministrativeOrganization |
|||
orgErr := orgMainDepart.GetCont(map[string]interface{}{"kingdeeid": manCont.MainDepartment}, "`id`") |
|||
if orgErr == nil { |
|||
manMainCont.MainDeparment = orgMainDepart.Id |
|||
} |
|||
} |
|||
if len(manCont.Department) > 0 { |
|||
var departId []string |
|||
for _, dv := range manCont.Department { |
|||
var orgMainDepartAry models.AdministrativeOrganization |
|||
orgErr := orgMainDepartAry.GetCont(map[string]interface{}{"kingdeeid": dv}, "`id`") |
|||
if orgErr == nil { |
|||
orgIdStr := strconv.FormatInt(orgMainDepartAry.Id, 10) |
|||
if overallhandle.StringIsInMap(orgIdStr, departId) == false { |
|||
departId = append(departId, orgIdStr) |
|||
} |
|||
} |
|||
} |
|||
departIdStr := strings.Join(departId, ",") |
|||
manMainCont.Deparment = departIdStr |
|||
} |
|||
if manCont.AdminOrg != "" { |
|||
var orgMainDepartAdmin models.AdministrativeOrganization |
|||
orgErr := orgMainDepartAdmin.GetCont(map[string]interface{}{"kingdeeid": manCont.AdminOrg}, "`id`") |
|||
if orgErr == nil { |
|||
manMainCont.AdminOrg = orgMainDepartAdmin.Id |
|||
} |
|||
} |
|||
|
|||
//职位
|
|||
if manCont.Position != "" { |
|||
var positionCont models.Position |
|||
positErr := positionCont.GetCont(map[string]interface{}{`kingdeeid`: manCont.Position}, "`id`") |
|||
if positErr == nil { |
|||
manMainCont.Position = positionCont.Id |
|||
} |
|||
} |
|||
//职务
|
|||
if manCont.JobName != "" { |
|||
var dutiesCont models.DutiesClassLeve |
|||
dutiesErr := dutiesCont.GetCont(map[string]interface{}{"`d_king`": manCont.JobName}, "d_id") |
|||
if dutiesErr == nil { |
|||
manMainCont.JobId = dutiesCont.Id |
|||
manMainCont.JobClass = dutiesCont.ClassId |
|||
} |
|||
} |
|||
if manCont.PositionGrade != 0 { |
|||
manMainCont.JobLeve = manCont.PositionGrade |
|||
} |
|||
|
|||
//获取老人员主表内容
|
|||
var oldPersonArchives models.Personnel |
|||
oldPersErr := overall.CONSTANT_DB_HR_Jin.Where(map[string]interface{}{"`number`": manCont.Number}).First(&oldPersonArchives).Error |
|||
if oldPersErr == nil { |
|||
if manCont.Icon == "" { |
|||
manMainCont.Icon = oldPersonArchives.Icon |
|||
} |
|||
if oldPersonArchives.Key != 0 { |
|||
manMainCont.Key = oldPersonArchives.Key |
|||
} else { |
|||
manMainCont.Key = overallhandle.TableNumber() |
|||
} |
|||
|
|||
if oldPersonArchives.Wechat != "" { |
|||
manMainCont.Wechat = oldPersonArchives.Wechat |
|||
} |
|||
if oldPersonArchives.WorkWechat != "" { |
|||
manMainCont.WorkWechat = oldPersonArchives.WorkWechat |
|||
} |
|||
manMainCont.IsAdmin = oldPersonArchives.IsAdmin |
|||
manMainCont.Role = oldPersonArchives.Role |
|||
if oldPersonArchives.Password != "" { |
|||
manMainCont.Password = oldPersonArchives.Password |
|||
} else { |
|||
//密码加密
|
|||
var passwordMd5 overallhandle.Md5Encryption |
|||
passwordMd5.Md5EncryptionInit(overall.CONSTANT_CONFIG.Appsetup.DefaultPassword) |
|||
manMainCont.Password = passwordMd5.Md5EncryptionAlgorithm() |
|||
} |
|||
} else { |
|||
manMainCont.Key = overallhandle.TableNumber() |
|||
//密码加密
|
|||
var passwordMd5 overallhandle.Md5Encryption |
|||
passwordMd5.Md5EncryptionInit(overall.CONSTANT_CONFIG.Appsetup.DefaultPassword) |
|||
manMainCont.Password = passwordMd5.Md5EncryptionAlgorithm() |
|||
} |
|||
addManContErr := overall.CONSTANT_DB_HR.Create(&manMainCont).Error |
|||
if addManContErr != nil { |
|||
return addManContErr |
|||
} else { |
|||
//编辑人员附属信息
|
|||
synPro.Add(1) |
|||
go editManAuxiliaryData(manCont) |
|||
//编辑紧急联系人信息
|
|||
synPro.Add(1) |
|||
go emergencyContactPerson(manCont) |
|||
//编辑员工家属信息
|
|||
synPro.Add(1) |
|||
go eidtFamilyMembers(manCont.Number, manCont.MemberOfFamily) |
|||
//编辑员工教育经历
|
|||
synPro.Add(1) |
|||
go educatExperKingdee(manCont) |
|||
synPro.Wait() |
|||
} |
|||
return nil |
|||
} |
|||
|
|||
//编辑人员附属信息
|
|||
func editManAuxiliaryData(manCont addKingdeePersonnel) { |
|||
defer synPro.Done() |
|||
var manInfo models.PersonnelContent |
|||
manErr := manInfo.GetCont(map[string]interface{}{"`number`": manCont.Number}) |
|||
if manErr == nil { |
|||
saveData := overallhandle.MapOut() |
|||
if manCont.IDCardNo != "" && manCont.IDCardNo != manInfo.Idcardno { |
|||
saveData["idcardno"] = manCont.IDCardNo |
|||
} |
|||
if manCont.IDCardStartTime != "" { |
|||
idCardStarTime, _ := overallhandle.DateToTimeStamp(fmt.Sprintf("%v 00:00:00", manCont.IDCardStartTime)) |
|||
if idCardStarTime != manInfo.Idcardstartdate { |
|||
saveData["idcardstartdate"] = idCardStarTime |
|||
} |
|||
} |
|||
if manCont.IDCardEndTime != "" { |
|||
idCardEndTime, _ := overallhandle.DateToTimeStamp(fmt.Sprintf("%v 00:00:00", manCont.IDCardEndTime)) |
|||
if idCardEndTime != manInfo.Idcardenddate { |
|||
saveData["idcardenddate"] = idCardEndTime |
|||
} |
|||
} |
|||
if manCont.IDCardAddress != "" && manCont.IDCardAddress != manInfo.Idcardaddress { |
|||
saveData["idcardaddress"] = manCont.IDCardAddress |
|||
} |
|||
if manCont.IDCardIsSued != "" && manCont.IDCardIsSued != manInfo.IdcardIssued { |
|||
saveData["idcardIssued"] = manCont.IDCardIsSued |
|||
} |
|||
if manCont.Mobilephone != "" && manCont.Mobilephone != manInfo.Mobilephone { |
|||
saveData["mobilephone"] = manCont.Mobilephone |
|||
} |
|||
if manCont.Email != "" && manCont.Email != manInfo.Email { |
|||
saveData["email"] = manCont.Email |
|||
} |
|||
if manCont.Gender != 0 && manCont.Gender != manInfo.Gender { |
|||
saveData["gender"] = manCont.Gender |
|||
} |
|||
if manCont.Birthday != "" { |
|||
brrthday, _ := overallhandle.DateToTimeStamp(fmt.Sprintf("%v 00:00:00", manCont.Birthday)) |
|||
if brrthday != manInfo.Birthday { |
|||
saveData["birthday"] = brrthday |
|||
} |
|||
} |
|||
if manCont.Nation != "" && manCont.Nation != manInfo.Myfolk { |
|||
saveData["myfolk"] = manCont.Nation |
|||
} |
|||
if manCont.NativePlace != "" && manCont.NativePlace != manInfo.Nativeplace { |
|||
saveData["nativeplace"] = manCont.NativePlace |
|||
} |
|||
if manCont.Health != 0 && manCont.Health != manInfo.Health { |
|||
saveData["health"] = manCont.Health |
|||
} |
|||
if manCont.Maritalstatus != 0 && manCont.Maritalstatus != manInfo.Maritalstatus { |
|||
saveData["maritalstatus"] = manCont.Maritalstatus |
|||
} |
|||
if manCont.CurrentResidence != "" && manCont.CurrentResidence != manInfo.Currentresidence { |
|||
saveData["currentresidence"] = manCont.CurrentResidence |
|||
} |
|||
if manCont.Constellation != 0 && manCont.Constellation != manInfo.Constellation { |
|||
saveData["constellationing"] = manCont.Constellation |
|||
} |
|||
if manCont.Iisdoubleworker != 0 && manCont.Iisdoubleworker != manInfo.Isdoubleworker { |
|||
saveData["isdoubleworker"] = manCont.Iisdoubleworker |
|||
eidtDoubleWorker(manCont, manCont.Iisdoubleworker) |
|||
} |
|||
if manCont.Isveterans != 0 && manCont.Isveterans != manInfo.Isveterans { |
|||
saveData["isveterans"] = manCont.Isveterans |
|||
if manCont.Isveterans == 1 { |
|||
if manCont.Veteransnumber != "" && manCont.Veteransnumber != manInfo.Veteransnumber { |
|||
saveData["veteransnumber"] = manCont.Veteransnumber |
|||
} |
|||
} else { |
|||
saveData["veteransnumber"] = "" |
|||
} |
|||
} |
|||
if manCont.WorkingDate != "" { |
|||
workInData, _ := overallhandle.DateToTimeStamp(fmt.Sprintf("%v 00:00:00", manCont.WorkingDate)) |
|||
if workInData != manInfo.Jobstartdate { |
|||
saveData["jobstartdate"] = workInData |
|||
} |
|||
} |
|||
if manCont.EntryDate != "" { |
|||
entryData, _ := overallhandle.DateToTimeStamp(fmt.Sprintf("%v 00:00:00", manCont.EntryDate)) |
|||
if entryData != manInfo.Entrydate { |
|||
saveData["entrydate"] = entryData |
|||
} |
|||
} |
|||
if manCont.ProbationPeriod != 0 && manCont.ProbationPeriod != manInfo.Probationperiod { |
|||
saveData["probationperiod"] = manCont.ProbationPeriod |
|||
entryData := manInfo.Entrydate |
|||
if manCont.EntryDate != "" { |
|||
entryData, _ = overallhandle.DateToTimeStamp(fmt.Sprintf("%v 00:00:00", manCont.EntryDate)) |
|||
} |
|||
planformalData := overallhandle.GetFutureMonthTime(entryData, manCont.ProbationPeriod, 2) |
|||
saveData["planformaldate"] = planformalData |
|||
} |
|||
|
|||
if manCont.ConfirmationDate != "" { |
|||
planformalData, _ := overallhandle.DateToTimeStamp(fmt.Sprintf("%v 00:00:00", manCont.ConfirmationDate)) |
|||
saveData["planformaldate"] = planformalData |
|||
} |
|||
if manCont.PoliticalOutlook != 0 && manCont.PoliticalOutlook != manInfo.PoliticalOutlook { |
|||
saveData["political_outlook"] = manCont.PoliticalOutlook |
|||
} |
|||
if len(saveData) > 0 { |
|||
saveData["`time`"] = time.Now().Unix() |
|||
manInfo.EiteCont(map[string]interface{}{"`number`": manCont.Number}, saveData) |
|||
} |
|||
} else { |
|||
manInfo.Number = manCont.Number |
|||
manInfo.Idcardno = manCont.IDCardNo |
|||
idCardStarTime := time.Now().Unix() |
|||
if manCont.IDCardStartTime != "" { |
|||
idCardStarTime, _ = overallhandle.DateToTimeStamp(fmt.Sprintf("%v 00:00:00", manCont.IDCardStartTime)) |
|||
} |
|||
manInfo.Idcardstartdate = idCardStarTime //身份证有效期开始
|
|||
idCardEndTime := time.Now().Unix() |
|||
if manCont.IDCardEndTime != "" { |
|||
idCardEndTime, _ = overallhandle.DateToTimeStamp(fmt.Sprintf("%v 00:00:00", manCont.IDCardEndTime)) |
|||
} |
|||
manInfo.Idcardenddate = idCardEndTime //身份证有效期结束
|
|||
manInfo.Idcardaddress = manCont.IDCardAddress //身份证地址
|
|||
manInfo.IdcardIssued = manCont.IDCardIsSued //身份证签发机关
|
|||
manInfo.Mobilephone = manCont.Mobilephone |
|||
manInfo.Email = manCont.Email |
|||
manInfo.Gender = manCont.Gender |
|||
brrthday, _ := overallhandle.DateToTimeStamp(fmt.Sprintf("%v 00:00:00", manCont.Birthday)) |
|||
manInfo.Birthday = brrthday |
|||
manInfo.Myfolk = manCont.Nation |
|||
manInfo.Nativeplace = manCont.NativePlace |
|||
manInfo.Health = manCont.Health |
|||
manInfo.Maritalstatus = manCont.Maritalstatus |
|||
manInfo.Currentresidence = manCont.CurrentResidence |
|||
manInfo.Time = time.Now().Unix() |
|||
manInfo.Constellation = manCont.Constellation |
|||
manInfo.Isdoubleworker = manCont.Iisdoubleworker |
|||
manInfo.Isveterans = manCont.Isveterans |
|||
manInfo.Veteransnumber = manCont.Veteransnumber |
|||
workInData := time.Now().Unix() |
|||
if manCont.WorkingDate != "" { |
|||
workInData, _ = overallhandle.DateToTimeStamp(fmt.Sprintf("%v 00:00:00", manCont.WorkingDate)) |
|||
} |
|||
manInfo.Jobstartdate = workInData |
|||
entryData := time.Now().Unix() |
|||
if manCont.EntryDate != "" { |
|||
entryData, _ = overallhandle.DateToTimeStamp(fmt.Sprintf("%v 00:00:00", manCont.EntryDate)) |
|||
} |
|||
manInfo.Entrydate = entryData |
|||
manInfo.Probationperiod = manCont.ProbationPeriod |
|||
planformalData := time.Now().Unix() |
|||
if manCont.ConfirmationDate != "" { |
|||
planformalData, _ = overallhandle.DateToTimeStamp(fmt.Sprintf("%v 00:00:00", manCont.ConfirmationDate)) |
|||
} else { |
|||
planformalData = overallhandle.GetFutureMonthTime(entryData, manCont.ProbationPeriod, 2) |
|||
} |
|||
manInfo.Planformaldate = planformalData |
|||
manInfo.PoliticalOutlook = manCont.PoliticalOutlook |
|||
|
|||
overall.CONSTANT_DB_HR.Create(&manInfo) |
|||
if manCont.Iisdoubleworker == 1 { |
|||
//编辑双职工
|
|||
eidtDoubleWorker(manCont, 1) |
|||
} |
|||
} |
|||
} |
|||
|
|||
//编辑双职工
|
|||
func eidtDoubleWorker(manCont addKingdeePersonnel, state int) { |
|||
var doubleWorkCont models.DoubleWorker |
|||
dwErr := doubleWorkCont.GetCont(map[string]interface{}{"`number`": manCont.Number}) |
|||
if dwErr == nil { |
|||
saveData := overallhandle.MapOut() |
|||
if manCont.SpouseName != "" && manCont.SpouseName != doubleWorkCont.Name { |
|||
saveData["`name`"] = manCont.SpouseName |
|||
} |
|||
if manCont.SpouseCompany != "" && manCont.SpouseCompany != doubleWorkCont.Company { |
|||
saveData["`company`"] = manCont.SpouseCompany |
|||
} |
|||
if manCont.SpouseDepartment != "" && manCont.SpouseDepartment != doubleWorkCont.Department { |
|||
saveData["`department`"] = manCont.SpouseDepartment |
|||
} |
|||
if manCont.SpousePosition != "" && manCont.SpousePosition != doubleWorkCont.Position { |
|||
saveData["`position`"] = manCont.SpousePosition |
|||
} |
|||
if manCont.SpouseTel != "" && manCont.SpouseTel != doubleWorkCont.Tel { |
|||
saveData["`tel`"] = manCont.SpouseTel |
|||
} |
|||
if state != 0 && state != doubleWorkCont.State { |
|||
saveData["`state`"] = state |
|||
} |
|||
if len(saveData) > 0 { |
|||
saveData["`time`"] = time.Now().Unix() |
|||
doubleWorkCont.EiteCont(map[string]interface{}{"`number`": manCont.Number}, saveData) |
|||
} |
|||
} else { |
|||
saveData := overallhandle.MapOut() |
|||
saveData["state"] = 2 |
|||
doubleWorkCont.EiteCont(map[string]interface{}{"`number`": manCont.Number}, saveData) |
|||
doubleWorkCont.Number = manCont.Number |
|||
doubleWorkCont.Name = manCont.SpouseName |
|||
doubleWorkCont.Tel = manCont.SpouseTel |
|||
doubleWorkCont.Company = manCont.SpouseCompany |
|||
doubleWorkCont.Department = manCont.SpouseDepartment |
|||
doubleWorkCont.Position = manCont.SpousePosition |
|||
doubleWorkCont.State = state |
|||
overall.CONSTANT_DB_HR.Create(&doubleWorkCont) |
|||
} |
|||
} |
|||
|
|||
//编辑紧急联系人信息
|
|||
func emergencyContactPerson(manCont addKingdeePersonnel) { |
|||
defer synPro.Done() |
|||
var emeContPerAry []emergencyContact |
|||
if manCont.UrgentNameOne != "" || manCont.UrgentRelationshipOne != "" || manCont.UrgentMobilephoneOne != "" { |
|||
var emeContPerOne emergencyContact |
|||
emeContPerOne.Name = manCont.UrgentNameOne //姓名1
|
|||
emeContPerOne.Relationship = manCont.UrgentRelationshipOne //与紧急联系人1
|
|||
emeContPerOne.Mobilephone = manCont.UrgentMobilephoneOne //联系电话1
|
|||
emeContPerAry = append(emeContPerAry, emeContPerOne) |
|||
} |
|||
if manCont.UrgentNameTwo != "" || manCont.UrgentRelationshipTwo != "" || manCont.UrgentMobilephoneTwo != "" { |
|||
var emeContPerTwo emergencyContact |
|||
emeContPerTwo.Name = manCont.UrgentNameTwo //姓名2
|
|||
emeContPerTwo.Relationship = manCont.UrgentRelationshipTwo //与紧急联系人2
|
|||
emeContPerTwo.Mobilephone = manCont.UrgentMobilephoneTwo //联系电话2
|
|||
emeContPerAry = append(emeContPerAry, emeContPerTwo) |
|||
} |
|||
if len(emeContPerAry) > 0 { |
|||
|
|||
var oldEmePersList []models.EmergencyContact |
|||
oldEmeErr := overall.CONSTANT_DB_HR.Where("`number` = ?", manCont.Number).Find(&oldEmePersList).Error |
|||
if oldEmeErr == nil { |
|||
var writeName []string |
|||
var allId []int64 |
|||
var isEite []int64 |
|||
for _, ev := range emeContPerAry { |
|||
for _, ov := range oldEmePersList { |
|||
if overallhandle.JudgeInMap(ov.Id, allId) == false { |
|||
allId = append(allId, ov.Id) |
|||
} |
|||
if ev.Name == ov.Name { |
|||
writeName = append(writeName, ev.Name) |
|||
if overallhandle.JudgeInMap(ov.Id, isEite) == false { |
|||
isEite = append(isEite, ov.Id) |
|||
} |
|||
eitdCont := overallhandle.MapOut() |
|||
if ev.Relationship != "" && ev.Relationship != ov.Relationship { |
|||
eitdCont["relationship"] = ev.Relationship |
|||
} |
|||
if ev.Mobilephone != "" && ev.Mobilephone != ov.Tel { |
|||
eitdCont["tel"] = ev.Mobilephone |
|||
} |
|||
if ov.State != 1 { |
|||
eitdCont["state"] = 1 |
|||
} |
|||
if len(eitdCont) > 0 { |
|||
eitdCont["time"] = time.Now().Unix() |
|||
var oldEmePersCont models.EmergencyContact |
|||
oldEmePersCont.EiteCont(map[string]interface{}{"`id`": ov.Id}, eitdCont) |
|||
} |
|||
} |
|||
} |
|||
} |
|||
//判断两个紧急人员是否都写入
|
|||
// if len(writeName) != 2 {
|
|||
for _, sv := range emeContPerAry { |
|||
if overallhandle.StringIsInMap(sv.Name, writeName) == false { |
|||
var addEmeCont models.EmergencyContact |
|||
addEmeCont.Number = manCont.Number |
|||
addEmeCont.Name = sv.Name |
|||
addEmeCont.Relationship = sv.Relationship |
|||
addEmeCont.Tel = sv.Mobilephone |
|||
addEmeCont.State = 1 |
|||
addEmeCont.Time = time.Now().Unix() |
|||
overall.CONSTANT_DB_HR.Create(&addEmeCont) |
|||
} |
|||
} |
|||
// }
|
|||
} else { |
|||
for _, insetv := range emeContPerAry { |
|||
var addEmeCont models.EmergencyContact |
|||
addEmeCont.Number = manCont.Number |
|||
addEmeCont.Name = insetv.Name |
|||
addEmeCont.Relationship = insetv.Relationship |
|||
addEmeCont.Tel = insetv.Mobilephone |
|||
addEmeCont.State = 1 |
|||
addEmeCont.Time = time.Now().Unix() |
|||
overall.CONSTANT_DB_HR.Create(&addEmeCont) |
|||
} |
|||
} |
|||
|
|||
} |
|||
} |
|||
|
|||
//编辑员工家属
|
|||
func eidtFamilyMembers(num string, family []memberOfFamily) { |
|||
defer synPro.Done() |
|||
if len(family) > 0 && num != "" { |
|||
var familyAry []models.FamilyMembers |
|||
famErr := overall.CONSTANT_DB_HR.Where("`number` = ?", num).Find(&familyAry).Error |
|||
if famErr == nil { |
|||
var writeName []string |
|||
var allId []int64 |
|||
var isEite []int64 |
|||
for _, fv := range family { |
|||
for _, fav := range familyAry { |
|||
if overallhandle.JudgeInMap(fav.Id, allId) == false { |
|||
allId = append(allId, fav.Id) |
|||
} |
|||
if fv.Name == fav.Name { |
|||
writeName = append(writeName, fv.Name) |
|||
if overallhandle.JudgeInMap(fav.Id, isEite) == false { |
|||
isEite = append(isEite, fav.Id) |
|||
} |
|||
eitdCont := overallhandle.MapOut() |
|||
if fv.Relationship != "" && fv.Relationship != fav.Relationship { |
|||
eitdCont["relation"] = fv.Relationship |
|||
} |
|||
if fv.Mobilephone != "" && fv.Mobilephone != fav.Tel { |
|||
eitdCont["tel"] = fv.Mobilephone |
|||
} |
|||
if fv.Company != "" && fv.Company != fav.Company { |
|||
eitdCont["company"] = fv.Company |
|||
} |
|||
if fv.Department != "" && fv.Department != fav.Deparment { |
|||
eitdCont["deparment"] = fv.Department |
|||
} |
|||
if fv.Position != "" && fv.Position != fav.Postnme { |
|||
eitdCont["postnme"] = fv.Position |
|||
} |
|||
if fv.PoliticalOutlook != 0 && fv.PoliticalOutlook != fav.PoliticalOutlook { |
|||
eitdCont["political_outlook"] = fv.PoliticalOutlook |
|||
} |
|||
if len(eitdCont) > 0 { |
|||
eitdCont["time"] = time.Now().Unix() |
|||
var oldFamilyCont models.FamilyMembers |
|||
oldFamilyCont.EiteCont(map[string]interface{}{"`id`": fav.Id}, eitdCont) |
|||
} |
|||
} |
|||
} |
|||
} |
|||
//新增不存在得家庭成员
|
|||
for _, afv := range family { |
|||
if overallhandle.StringIsInMap(afv.Name, writeName) == false { |
|||
var addFamliyCont models.FamilyMembers |
|||
addFamliyCont.Number = num |
|||
addFamliyCont.Relationship = afv.Relationship //亲属关系"`
|
|||
addFamliyCont.Name = afv.Name //姓名"`
|
|||
addFamliyCont.Company = afv.Company //所在公司"`
|
|||
addFamliyCont.Deparment = afv.Department //所在部门"`
|
|||
addFamliyCont.Postnme = afv.Position //所在岗位"`
|
|||
addFamliyCont.Tel = afv.Mobilephone //紧急联系人电话"`
|
|||
addFamliyCont.PoliticalOutlook = afv.PoliticalOutlook //政治面貌
|
|||
addFamliyCont.Time = time.Now().Unix() // 创建时间"`
|
|||
overall.CONSTANT_DB_HR.Create(&addFamliyCont) |
|||
} |
|||
} |
|||
} else { |
|||
//新增家庭成员
|
|||
for _, v := range family { |
|||
var addFamliyCont models.FamilyMembers |
|||
addFamliyCont.Number = num |
|||
addFamliyCont.Relationship = v.Relationship //亲属关系"`
|
|||
addFamliyCont.Name = v.Name //姓名"`
|
|||
addFamliyCont.Company = v.Company //所在公司"`
|
|||
addFamliyCont.Deparment = v.Department //所在部门"`
|
|||
addFamliyCont.Postnme = v.Position //所在岗位"`
|
|||
addFamliyCont.Tel = v.Mobilephone //紧急联系人电话"`
|
|||
addFamliyCont.PoliticalOutlook = v.PoliticalOutlook //政治面貌
|
|||
addFamliyCont.Time = time.Now().Unix() // 创建时间"`
|
|||
overall.CONSTANT_DB_HR.Create(&addFamliyCont) |
|||
} |
|||
} |
|||
} |
|||
} |
|||
|
|||
//教育经历
|
|||
func educatExperKingdee(manCont addKingdeePersonnel) { |
|||
defer synPro.Done() |
|||
if manCont.HighestGraduationSchool != "" { |
|||
//最高学历
|
|||
var perEduContHig models.PersonnelEducation |
|||
highestGormDb := overall.CONSTANT_DB_HR.Model(&models.PersonnelEducation{}).Where("number = ? AND graduation_school = ? AND subject = ?", manCont.Number, manCont.HighestGraduationSchool, manCont.HighestSubject) |
|||
higErr := highestGormDb.First(&perEduContHig).Error |
|||
|
|||
if higErr == nil { |
|||
eitdCont := overallhandle.MapOut() |
|||
if manCont.HighestEducation != 0 && manCont.HighestEducation != perEduContHig.Education { |
|||
eitdCont["education"] = manCont.HighestEducation |
|||
} |
|||
if manCont.HighestAcademicDegree != 0 && manCont.HighestAcademicDegree != perEduContHig.AcademicDegree { |
|||
eitdCont["academic_degree"] = manCont.HighestAcademicDegree |
|||
} |
|||
if manCont.HighestAdmissionTime != "" { |
|||
entranceTime, _ := overallhandle.DateToTimeStamp(fmt.Sprintf("%v 00:00:00", manCont.HighestAdmissionTime)) |
|||
if entranceTime != perEduContHig.AdmissionTime { |
|||
eitdCont["admission_time"] = entranceTime |
|||
} |
|||
} |
|||
if manCont.HighestGraduationTime != "" { |
|||
graduationTime, _ := overallhandle.DateToTimeStamp(fmt.Sprintf("%v 00:00:00", manCont.HighestGraduationTime)) |
|||
if graduationTime != perEduContHig.GraduationTime { |
|||
eitdCont["graduation_time"] = graduationTime |
|||
} |
|||
} |
|||
if len(eitdCont) > 0 { |
|||
eitdCont["Time"] = time.Now().Unix() |
|||
eitdCont["level"] = 3 |
|||
var oldFamilyCont models.PersonnelEducation |
|||
oldFamilyCont.EiteCont(map[string]interface{}{"`id`": perEduContHig.Id}, eitdCont) |
|||
} |
|||
} else { |
|||
var perEduContFirstIsTrue models.PersonnelEducation |
|||
highestGormDbIsTrue := overall.CONSTANT_DB_HR.Model(&models.PersonnelEducation{}).Where("number = ?", manCont.Number).First(&perEduContFirstIsTrue).Error |
|||
if highestGormDbIsTrue == nil { |
|||
eitdCont := overallhandle.MapOut() |
|||
eitdCont["Time"] = time.Now().Unix() |
|||
eitdCont["level"] = 1 |
|||
var oldFamilyCont models.PersonnelEducation |
|||
oldFamilyCont.EiteCont(map[string]interface{}{"`number`": manCont.Number, "level": 3}, eitdCont) |
|||
} |
|||
|
|||
perEduContHig.Number = manCont.Number // 员工工号
|
|||
perEduContHig.Education = manCont.HighestEducation // 学历(1:初中及以下;2:中专;3:高中;4:中技;5:高技;6:函数专科;7:大学专科;8:函数本科;9:大学本科;10:硕士研究生;11:博士研究生;12:专家、教授)"`
|
|||
perEduContHig.GraduationSchool = manCont.HighestGraduationSchool // 毕业学校"`
|
|||
perEduContHig.Subject = manCont.HighestSubject // 专业"`
|
|||
entranceTime := time.Now().Unix() |
|||
if manCont.HighestAdmissionTime != "" { |
|||
entranceTime, _ = overallhandle.DateToTimeStamp(fmt.Sprintf("%v 00:00:00", manCont.HighestAdmissionTime)) |
|||
} |
|||
perEduContHig.AdmissionTime = entranceTime // 入学时间"`
|
|||
graduationTime := time.Now().Unix() |
|||
if manCont.HighestGraduationTime != "" { |
|||
graduationTime, _ = overallhandle.DateToTimeStamp(fmt.Sprintf("%v 00:00:00", manCont.HighestGraduationTime)) |
|||
} |
|||
perEduContHig.GraduationTime = graduationTime // 毕业时间"`
|
|||
perEduContHig.Time = time.Now().Unix() // 写入时间"`
|
|||
perEduContHig.AcademicDegree = manCont.HighestAcademicDegree |
|||
perEduContHig.Level = 3 // 学历类型(1:普通;2:第一学历;3:最高学历)"`
|
|||
overall.CONSTANT_DB_HR.Create(&perEduContHig) |
|||
} |
|||
} |
|||
//第一学历
|
|||
if manCont.FirstGraduationSchool != "" { |
|||
//第一学历
|
|||
var perEduContFirst models.PersonnelEducation |
|||
firsthestGormDb := overall.CONSTANT_DB_HR.Model(&models.PersonnelEducation{}).Where("number = ? AND graduation_school = ? AND subject = ?", manCont.Number, manCont.FirstGraduationSchool, manCont.FirstSubject) |
|||
higErr := firsthestGormDb.First(&perEduContFirst).Error |
|||
|
|||
if higErr == nil { |
|||
eitdContFirst := overallhandle.MapOut() |
|||
if manCont.FirstEducation != 0 && manCont.FirstEducation != perEduContFirst.Education { |
|||
eitdContFirst["education"] = manCont.FirstEducation |
|||
} |
|||
if manCont.FirstAcademicDegree != 0 && manCont.FirstAcademicDegree != perEduContFirst.AcademicDegree { |
|||
eitdContFirst["academic_degree"] = manCont.FirstAcademicDegree |
|||
} |
|||
if manCont.FirstAdmissionTime != "" { |
|||
entranceTimeFirst, _ := overallhandle.DateToTimeStamp(fmt.Sprintf("%v 00:00:00", manCont.FirstAdmissionTime)) |
|||
if entranceTimeFirst != perEduContFirst.AdmissionTime { |
|||
eitdContFirst["admission_time"] = entranceTimeFirst |
|||
} |
|||
} |
|||
if manCont.FirstGraduationTime != "" { |
|||
graduationTimeFirst, _ := overallhandle.DateToTimeStamp(fmt.Sprintf("%v 00:00:00", manCont.FirstGraduationTime)) |
|||
if graduationTimeFirst != perEduContFirst.GraduationTime { |
|||
eitdContFirst["graduation_time"] = graduationTimeFirst |
|||
} |
|||
} |
|||
if len(eitdContFirst) > 0 { |
|||
eitdContFirst["Time"] = time.Now().Unix() |
|||
eitdContFirst["level"] = 3 |
|||
var oldFamilyContFirst models.PersonnelEducation |
|||
oldFamilyContFirst.EiteCont(map[string]interface{}{"`id`": perEduContFirst.Id}, eitdContFirst) |
|||
} |
|||
} else { |
|||
var perEduContFirstIsTrue models.PersonnelEducation |
|||
highestGormDbIsTrue := overall.CONSTANT_DB_HR.Model(&models.PersonnelEducation{}).Where("number = ?", manCont.Number).First(&perEduContFirstIsTrue).Error |
|||
if highestGormDbIsTrue == nil { |
|||
eitdContFirst := overallhandle.MapOut() |
|||
eitdContFirst["Time"] = time.Now().Unix() |
|||
eitdContFirst["level"] = 1 |
|||
var oldFamilyContFirst models.PersonnelEducation |
|||
oldFamilyContFirst.EiteCont(map[string]interface{}{"`number`": manCont.Number, "level": 1}, eitdContFirst) |
|||
} |
|||
perEduContFirst.Number = manCont.Number // 员工工号
|
|||
perEduContFirst.Education = manCont.FirstEducation // 学历(1:初中及以下;2:中专;3:高中;4:中技;5:高技;6:函数专科;7:大学专科;8:函数本科;9:大学本科;10:硕士研究生;11:博士研究生;12:专家、教授)"`
|
|||
perEduContFirst.GraduationSchool = manCont.FirstGraduationSchool // 毕业学校"`
|
|||
perEduContFirst.Subject = manCont.FirstSubject // 专业"`
|
|||
entranceTimeFirst := time.Now().Unix() |
|||
if manCont.HighestAdmissionTime != "" { |
|||
entranceTimeFirst, _ = overallhandle.DateToTimeStamp(fmt.Sprintf("%v 00:00:00", manCont.HighestAdmissionTime)) |
|||
} |
|||
perEduContFirst.AdmissionTime = entranceTimeFirst // 入学时间"`
|
|||
graduationTimef := time.Now().Unix() |
|||
if manCont.HighestGraduationTime != "" { |
|||
graduationTimef, _ = overallhandle.DateToTimeStamp(fmt.Sprintf("%v 00:00:00", manCont.HighestGraduationTime)) |
|||
} |
|||
perEduContFirst.GraduationTime = graduationTimef // 毕业时间"`
|
|||
perEduContFirst.Time = time.Now().Unix() // 写入时间"`
|
|||
perEduContFirst.AcademicDegree = manCont.FirstAcademicDegree |
|||
perEduContFirst.Level = 2 // 学历类型(1:普通;2:第一学历;3:最高学历)"`
|
|||
overall.CONSTANT_DB_HR.Create(&perEduContFirst) |
|||
} |
|||
} |
|||
} |
|||
File diff suppressed because it is too large
File diff suppressed because it is too large
File diff suppressed because it is too large
@ -0,0 +1,448 @@ |
|||
package personnelapi |
|||
|
|||
import ( |
|||
"hr_server/models" |
|||
"hr_server/overall/overallhandle" |
|||
"sync" |
|||
|
|||
"github.com/gin-gonic/gin" |
|||
) |
|||
|
|||
//协程
|
|||
var synPro = sync.WaitGroup{} |
|||
|
|||
//人员API
|
|||
type StaffApi struct{} |
|||
|
|||
//入口
|
|||
func (s *StaffApi) Index(c *gin.Context) { |
|||
outputCont := overallhandle.MapOut() |
|||
outputCont["index"] = "人员档案API" |
|||
overallhandle.Result(0, outputCont, c) |
|||
} |
|||
|
|||
//人员列表查询
|
|||
type peopleList struct { |
|||
overallhandle.PageTurning |
|||
Number string `json:"number"` //工号
|
|||
Name string `json:"name"` //name
|
|||
HireClass int `json:"hireclass"` //雇佣类型
|
|||
Company int64 `json:"company"` //公司
|
|||
// Deparment string `json:"deparment"` //部门
|
|||
AdminOrg int64 `json:"adminorg"` //所属行政组织
|
|||
Position int64 `json:"position"` //职位
|
|||
EmpType int `json:"emptype"` //用工关系(1:实习生;2:待分配;3:试用员工;4:正式员工;5:停薪留职;6:退休;7:辞退;8:离职)
|
|||
Role string `json:"role"` |
|||
} |
|||
|
|||
//人员列表输出
|
|||
type peopleOutList struct { |
|||
models.Personnel |
|||
Mobilephone string `json:"mobilephone" gorm:"column:mobilephone;type:varchar(50) unsigned;default:'';not null;comment:手机号码"` |
|||
Gender int `json:"gender" gorm:"column:type;gender:tinyint(1) unsigned;default:1;not null;comment:性别(1:男性;2:女性;3:中性)"` |
|||
Isdoubleworker int `json:"isdoubleworker" gorm:"column:type;isdoubleworker:tinyint(1) unsigned;default:1;not null;comment:是否双职工(1:是;2:否)"` |
|||
Isveterans int `json:"isveterans" gorm:"column:type;isveterans:tinyint(1) unsigned;default:1;not null;comment:是否为退役军人(1:是;2:否)"` |
|||
Entrydate int64 `json:"entrydate" gorm:"column:entrydate;type:bigint(20) unsigned;default:0;not null;comment:入职日期"` |
|||
Probationperiod int64 `json:"probationperiod" gorm:"column:probationperiod;type:int(5) unsigned;default:0;not null;comment:试用期"` |
|||
Planformaldate int64 `json:"planformaldate" gorm:"column:planformaldate;type:bigint(20) unsigned;default:0;not null;comment:预计转正日期"` |
|||
CompanyName string `json:"companyname"` //公司名称
|
|||
DeparmentName string `json:"deparmentname"` //部门名称
|
|||
PositionName string `json:"positionname"` //职位
|
|||
KeyStr string `json:"keystr"` //身份认证
|
|||
} |
|||
type peopleManOutList struct { |
|||
models.ManCont |
|||
CompanyName string `json:"companyname"` //公司名称
|
|||
MainDeparmentName string `json:"maindeparmentname"` //主部门
|
|||
SunMainDeparmentName string `json:"sunmaindeparmentname"` //二级主部门
|
|||
// DeparmentName string `json:"deparmentname"` //部门名称
|
|||
WorkPostName string `json:"workpostname"` //工段名称
|
|||
PositionName string `json:"positionname"` //职位
|
|||
KeyStr string `json:"keystr"` //身份认证
|
|||
} |
|||
|
|||
//获取部门细腻些
|
|||
type getDepartmentInfo struct { |
|||
Id int64 `json:"id"` //id
|
|||
Number string `json:"number"` //行政编码
|
|||
Name string `json:"name"` //组织名称
|
|||
} |
|||
|
|||
//添加员工参数
|
|||
type addPersonnel struct { |
|||
//员工主表
|
|||
Number string `json:"number"` //工号1
|
|||
Password string `json:"password"` //密码1
|
|||
Name string `json:"name"` //姓名1
|
|||
Icon string `json:"icon"` //头像
|
|||
HireType int `json:"hiretype"` //1雇佣类型(1:雇佣入职;2:再入职;3:返聘)
|
|||
EmpType int `json:"emptype"` //用工关系(1:实习生;2:待分配;3:试用员工;4:正式员工;5:停薪留职;6:退休;7:辞退;8:离职;9:应聘人员)
|
|||
Company int64 `json:"company"` //公司
|
|||
MainDepartment string `json:"maindepartment"` //主部门
|
|||
Department []string `json:"department"` //分厂(部室)
|
|||
AdminOrg int64 `json:"adminorg"` //工段
|
|||
Position int64 `json:"position"` //职位(岗位)1
|
|||
JobName string `json:"jobname"` //职务
|
|||
PositionGrade int64 `json:"positiongrade"` //入职等级
|
|||
Team string `json:"team"` //工段
|
|||
//员工副表
|
|||
Passportno string `json:"passportno"` //护照号码
|
|||
Globalroaming string `json:"globalroaming"` //国际区号
|
|||
IDCardNo string `json:"idcardno"` //身份证号码
|
|||
IDCardStartTime string `json:"idcardnostarttime"` //身份证有效期开始
|
|||
IDCardEndTime string `json:"idcardnoendtime"` //身份证有效期结束
|
|||
IDCardAddress string `json:"idcardnoaddress"` //身份证地址
|
|||
IDCardIsSued string `json:"idcardissued"` //身份证签发机关
|
|||
Mobilephone string `json:"mobilephone"` //联系电话
|
|||
Email string `json:"email"` //电子邮件
|
|||
Gender int `json:"gender"` //性别
|
|||
Birthday string `json:"birthday"` //生日
|
|||
Nation string `json:"nation"` //民族
|
|||
NativePlace string `json:"nativeplace"` //籍贯
|
|||
Health int `json:"health"` //健康状况(1:良好;2:一般;3:较弱,4:有生理缺陷;5:残废
|
|||
Maritalstatus int `json:"maritalstatus"` //婚姻状况(1:未婚;2:已婚;3:丧偶;4:离异)
|
|||
CurrentResidence string `json:"currentresidence"` //现居地
|
|||
WorkingDate string `json:"workingdate"` //参加工作日期
|
|||
EntryDate string `json:"entrydate"` //入职日期
|
|||
ProbationPeriod int `json:"probationperiod"` //试用期(月)
|
|||
ConfirmationDate string `json:"confirmationdate"` //转正日期
|
|||
Constellation int `json:"constellation"` //星座(1:白羊座;2:金牛座;3:双子座;4:巨蟹座;5:狮子座;6:处女座;7:天枰座;8:天蝎座;9:射手座;10:摩羯座;11:水瓶座;12:双鱼座)
|
|||
PoliticalOutlook int `json:"politicaloutlook"` //政治面貌(1:群众;2:无党派;3:台盟会员;4:九三社员;5:致公党员;6:农工党员;7:民进会员;8:民建会员;9:民盟盟员;10:民革会员,11:共青团员;12:预备党员;13:中共党员)
|
|||
Isveterans int `json:"isveterans"` //是否为退役军人(1:是;2:否)
|
|||
Veteransnumber string `json:"veteransnumber"` //退役证编号
|
|||
Iisdoubleworker int `json:"isdoubleworker"` //是否双职工(1:是;2:否)
|
|||
DoubleWorkerList []DoubleWorkerInFo `json:"doubleworkerlist"` //双职工列表
|
|||
|
|||
EducationalExperience []educationalExperience `json:"educationalexperience"` //教育经历
|
|||
EmergencyContact []emergencyContact `json:"emergencycontact"` //紧急联系人
|
|||
MemberOfFamily []memberOfFamily `json:"memberoffamily"` //家庭成员
|
|||
WorkHistoryList []workHistoryAry `json:"workhistorylist"` //工作履历
|
|||
//集团内工作履历
|
|||
InsideWorkHistory []insideHistoryerMy `json:"insideworkhistory"` //工作履历
|
|||
} |
|||
|
|||
//集团内部工作履历
|
|||
type insideHistoryerMy struct { |
|||
OrgId string `json:"orgid"` //行政组织
|
|||
Position string `json:"position"` //职位
|
|||
GradePositions int64 `json:"gradepositions"` //职等
|
|||
StartTime string `json:"starttime"` //开始日期
|
|||
EndTime string `json:"endtime"` //结束日期
|
|||
ChangeType int `json:"changetype"` //变动类型(1:预入职;2:雇佣入职;3:转正;4:晋升;5:降级;6:职等调整;7:调动调入;8:跨公司调动调入;9:借调;10:平调;11:兼职;12:预离职;13:离职;14:退休;15:返聘;16:员工初始化;)
|
|||
AssignType int `json:"assigntype"` //1:主职,2:兼职
|
|||
Team string `json:"team"` //班组
|
|||
} |
|||
|
|||
//教育经历
|
|||
type educationalExperience struct { |
|||
GraduationSchool string `json:"graduationschool"` //毕业学校
|
|||
Subject string `json:"subject"` //专业
|
|||
Education int `json:"education"` //学历(1:初中及以下;2:中专;3:高中;4:中技;5:高技;6:函数专科;7:大学专科;8:函数本科;9:大学本科;10:硕士研究生;11:博士研究生;12:专家、教授)
|
|||
AdmissionTime string `json:"admissiontime"` //入学时间
|
|||
GraduationTime string `json:"graduationtime"` //毕业时间
|
|||
AcademicDegree string `json:"academicdegree"` //学位(1:无;2:学士;3:硕士;4:博士)
|
|||
Level string `json:"level"` //学历类型
|
|||
|
|||
} |
|||
|
|||
//紧急联系人
|
|||
type emergencyContact struct { |
|||
Id string `json:"id"` |
|||
Name string `json:"name"` //姓名
|
|||
Relationship string `json:"relationship"` //与紧急联系人
|
|||
Mobilephone string `json:"mobilephone"` //联系电话
|
|||
} |
|||
|
|||
//家庭成员
|
|||
type memberOfFamily struct { |
|||
emergencyContact |
|||
Company string `json:"company"` //公司
|
|||
Department string `json:"department"` //分厂(部室)
|
|||
Position string `json:"position"` //职位(岗位)
|
|||
PoliticalOutlook int `json:"politicaloutlook"` //政治面貌(1:群众;2:无党派;3:台盟会员;4:九三社员;5:致公党员;6:农工党员;7:民进会员;8:民建会员;9:民盟盟员;10:民革会员,11:共青团员;12:预备党员;13:中共党员)
|
|||
IdStr string `json:"idstr"` |
|||
} |
|||
|
|||
//职务相关
|
|||
type jobAttber struct { |
|||
Id int64 `json:"id" gorm:"primaryKey;column:id;type:bigint(20) unsigned;not null;comment:Id;index"` |
|||
Number string `json:"number" gorm:"column:number;type:varchar(255) unsigned;default:'';not null;comment:编号"` |
|||
Name string `json:"name" gorm:"column:name;type:varchar(255) unsigned;default:'';not null;comment:名称"` |
|||
PersonInCharge int `json:"personincharge" gorm:"column:person_in_charge;type:tinyint(1) unsigned;default:0;not null;comment:是否为本部门负责人"` |
|||
Dutid int64 `json:"dutid" gorm:"column:dutid;type:bigint(20) unsigned;default:0;not null;comment:职务Id"` |
|||
Dutname string `json:"dutname" gorm:"column:dutname;type:varchar(255) unsigned;default:'';not null;comment:职务名称"` |
|||
DutNumber string `json:"dutnumber" gorm:"column:dutnumber;type:varchar(255) unsigned;default:'';not null;comment:职务编号"` |
|||
Jobid int64 `json:"jobid" gorm:"column:jobid;type:bigint(20) unsigned;default:0;not null;comment:职务分类Id"` |
|||
JobName string `json:"jobname" gorm:"column:jobname;type:varchar(255) unsigned;default:'';not null;comment:职务分类名称"` |
|||
} |
|||
|
|||
//配权
|
|||
type allocationOfRightsToRole struct { |
|||
Id string `json:"id"` |
|||
RoleId string `json:"roleid"` |
|||
} |
|||
|
|||
//添加员工参数
|
|||
type addKingdeePersonnel struct { |
|||
Number string `json:"number"` //工号1
|
|||
Name string `json:"name"` //姓名1
|
|||
Icon string `json:"icon"` //头像
|
|||
HireType int `json:"hiretype"` //1雇佣类型(1:雇佣入职;2:再入职;3:返聘)
|
|||
EmpType int `json:"emptype"` //用工关系(1:实习生;2:待分配;3:试用员工;4:正式员工;5:停薪留职;6:退休;7:辞退;8:离职) int
|
|||
|
|||
Company string `json:"company"` //公司
|
|||
MainDepartment string `json:"maindepartment"` //主部门
|
|||
Department []string `json:"department"` //分厂(部室)
|
|||
AdminOrg string `json:"adminorg"` //工段
|
|||
|
|||
Position string `json:"position"` //职位(岗位)1
|
|||
JobName string `json:"jobname"` //职务
|
|||
PositionGrade int64 `json:"positiongrade"` //入职等级 int64
|
|||
//员工副表
|
|||
Passportno string `json:"passportno"` //护照号码
|
|||
Globalroaming string `json:"globalroaming"` //国际区号
|
|||
IDCardNo string `json:"idcardno"` //身份证号码
|
|||
IDCardStartTime string `json:"idcardnostarttime"` //身份证有效期开始
|
|||
IDCardEndTime string `json:"idcardnoendtime"` //身份证有效期结束
|
|||
IDCardAddress string `json:"idcardnoaddress"` //身份证地址
|
|||
IDCardIsSued string `json:"idcardissued"` //身份证签发机关
|
|||
Mobilephone string `json:"mobilephone"` //联系电话
|
|||
Email string `json:"email"` //电子邮件
|
|||
Gender int `json:"gender"` //性别 int
|
|||
Birthday string `json:"birthday"` //生日
|
|||
Nation string `json:"nation"` //民族
|
|||
NativePlace string `json:"nativeplace"` //籍贯
|
|||
Health int `json:"health"` //健康状况(1:良好;2:一般;3:较弱,4:有生理缺陷;5:残废 int
|
|||
Maritalstatus int `json:"maritalstatus"` //婚姻状况(1:未婚;2:已婚;3:丧偶;4:离异) int
|
|||
CurrentResidence string `json:"currentresidence"` //现居地
|
|||
WorkingDate string `json:"workingdate"` //参加工作日期
|
|||
EntryDate string `json:"entrydate"` //入职日期
|
|||
ProbationPeriod int `json:"probationperiod"` //试用期(月)
|
|||
ConfirmationDate string `json:"confirmationdate"` //转正日期 int
|
|||
|
|||
Constellation int `json:"constellation"` //星座(1:白羊座;2:金牛座;3:双子座;4:巨蟹座;5:狮子座;6:处女座;7:天枰座;8:天蝎座;9:射手座;10:摩羯座;11:水瓶座;12:双鱼座) int
|
|||
PoliticalOutlook int `json:"politicaloutlook"` //政治面貌(1:群众; 2:无党派;3:台盟会员;4:九三社员;5:致公党员;6:农工党员;7:民进会员;8:民建会员;9:民盟盟员;10:民革会员,11:共青团员;12:预备党员;13:中共党员) int
|
|||
|
|||
//退役军人
|
|||
Isveterans int `json:"isveterans"` //是否为退役军人(1:是;2:否) int
|
|||
Veteransnumber string `json:"veteransnumber"` //退役证编号
|
|||
//双职工表
|
|||
//是否为双职工
|
|||
Iisdoubleworker int `json:"isdoubleworker"` //是否双职工(1:是;2:否) int
|
|||
SpouseName string `json:"spousename"` //配偶姓名
|
|||
SpouseCompany string `json:"spousecompany"` //配偶所在公司
|
|||
SpouseDepartment string `json:"spousedepartment"` //配偶所在部门
|
|||
SpousePosition string `json:"spouseposition"` //配偶所在岗位
|
|||
SpouseTel string `json:"spousetel"` //配偶联系方式
|
|||
//教育经历表
|
|||
//最高学历
|
|||
HighestGraduationSchool string `json:"highestschool"` //毕业学校
|
|||
HighestEducation int `json:"highesteducation"` //学历(1:初中及以下;2:中专;3:高中;4:中技;5:高技;6:函数专科;7:大学专科;8:函数本科;9:大学本科;10:硕士研究生;11:博士研究生;12:专家、教授)int
|
|||
HighestSubject string `json:"highestsubject"` //专业
|
|||
HighestAdmissionTime string `json:"highestadmissiontime"` //入学时间
|
|||
HighestGraduationTime string `json:"highestgraduationtime"` //毕业时间
|
|||
HighestAcademicDegree int `json:"highestacademicdegree"` //学位(0:无;1:学士;2:硕士;3:博士)int
|
|||
//第一学历
|
|||
FirstGraduationSchool string `json:"firstschool"` //毕业学校
|
|||
FirstEducation int `json:"firsteducation"` //学历(1:初中及以下;2:中专;3:高中;4:中技;5:高技;6:函数专科;7:大学专科;8:函数本科;9:大学本科;10:硕士研究生;11:博士研究生;12:专家、教授)int
|
|||
FirstSubject string `json:"firstsubject"` //专业
|
|||
FirstAdmissionTime string `json:"firstadmissiontime"` //入学时间
|
|||
FirstGraduationTime string `json:"firstgraduationtime"` //毕业时间
|
|||
FirstAcademicDegree int `json:"firstacademicdegree"` //学位(0:无;1:学士;2:硕士;3:博士)int
|
|||
|
|||
//紧急联系人表
|
|||
//紧急联系人一
|
|||
UrgentNameOne string `json:"urgentnameone"` //姓名
|
|||
UrgentRelationshipOne string `json:"urgentrelationshipone"` //与紧急联系人
|
|||
UrgentMobilephoneOne string `json:"urgentmobilephoneone"` //联系电话
|
|||
|
|||
//紧急联系人二
|
|||
UrgentNameTwo string `json:"urgentnametwo"` //姓名
|
|||
UrgentRelationshipTwo string `json:"urgentrelationshiptwo"` //与紧急联系人
|
|||
UrgentMobilephoneTwo string `json:"urgentmobilephonetwo"` //联系电话
|
|||
//员工家属表
|
|||
MemberOfFamily []memberOfFamily `json:"memberoffamily"` //家庭成员
|
|||
//集团外工作履历
|
|||
WorkHistoryList []workHistoryAry `json:"workhistorylist"` //工作履历
|
|||
//集团内工作履历
|
|||
InsideWorkHistory []insideHistory `json:"insideworkhistory"` //工作履历
|
|||
} |
|||
|
|||
//人员档案详情
|
|||
type staffArchivesCont struct { |
|||
models.ManCont |
|||
BirthdayTime string `json:"birthdaytime"` //生日
|
|||
IdCardStartTimeData string `json:"idcardstarttimedata"` //身份证有效期开始时间
|
|||
IdCardEndTimeData string `json:"idcardendtimedata"` //身份证有效期结束时间
|
|||
EntrydateTime string `json:"entrydatetime"` //入职日期
|
|||
PlanformaldateTime string `json:"planformaldatetime"` //预计转正日期
|
|||
DoubleWorkerList []DoubleWorkerCont `json:"doubleworkerlist"` |
|||
EducationalExperience []educatExp `json:"educationalexperience"` //教育经历
|
|||
EmergencyContact []emergencyContact `json:"emergencycontact"` //紧急联系人
|
|||
MemberOfFamily []memberOfFamily `json:"memberoffamily"` //家庭成员
|
|||
WorkHistoryList []workHistoryAry `json:"workhistorylist"` //工作履历
|
|||
InsideWorkHistory []insideHistory `json:"groupworkhistorylist"` //集团内工作履历
|
|||
IdStr string `json:"idstr"` |
|||
CompanyName string `json:"companyname"` //公司名称
|
|||
MainDeparmentName string `json:"maindeparmentname" ` //主部门
|
|||
AdminOrgName string `json:"adminorgname"` //主岗位
|
|||
PositionName string `json:"positionname"` //职位
|
|||
JobClassName string `json:"jobclassname"` //职务分类
|
|||
JobIdName string `json:"jobidname"` //职务
|
|||
PoliticalOutlookName string `json:"politicaloutlookname"` //政治面貌
|
|||
} |
|||
|
|||
//双职工
|
|||
type DoubleWorkerCont struct { |
|||
Id string `json:"id"` |
|||
Number string `json:"number"` //工号
|
|||
Name string `json:"name"` //姓名
|
|||
Company string `json:"company"` //公司
|
|||
Department string `json:"department"` //分厂(部室)
|
|||
Position string `json:"position"` //职位(岗位)
|
|||
Mobilephone string `json:"mobilephone"` //联系电话
|
|||
} |
|||
type DoubleWorkerInFo struct { |
|||
Number string `json:"number"` //工号
|
|||
Name string `json:"name"` //姓名
|
|||
Company string `json:"company"` //公司
|
|||
Department string `json:"department"` //分厂(部室)
|
|||
Position string `json:"position"` //职位(岗位)
|
|||
Mobilephone string `json:"mobilephone"` //联系电话
|
|||
} |
|||
|
|||
type educatExp struct { |
|||
educationalExperience |
|||
AcademicDegreeId int `json:"academicdegreeid"` //学位(0:无;1:学士;2:硕士;3:博士)
|
|||
LevelId int `json:"levelid"` //学历类型(1:普通;2:第一学历;3:最高学历)
|
|||
Id string `json:"id"` |
|||
} |
|||
|
|||
//工作履历
|
|||
type workHistoryAry struct { |
|||
Company string `json:"company"` //公司
|
|||
Department string `json:"department"` //部门
|
|||
Position string `json:"fposition"` //职务
|
|||
EntryTime string `json:"entrytime"` //入职时间
|
|||
LeaveDate string `json:"leavedate"` //离职日期
|
|||
Witness string `json:"witness"` //证明人
|
|||
WitnessTel string `json:"witnesstel"` //证明人电话
|
|||
Remarks string `json:"remarks"` //备注
|
|||
} |
|||
|
|||
//判断是否需要编辑工作履历
|
|||
type judgeWorkHistory struct { |
|||
Company string `json:"company"` //公司
|
|||
Department string `json:"department"` //部门
|
|||
Position string `json:"position"` //职务
|
|||
} |
|||
|
|||
//编辑双职工状态
|
|||
type eidtWorkState struct { |
|||
Id string `json:"id"` |
|||
State int `json:"state"` |
|||
IsDel int `json:"isdel"` |
|||
} |
|||
|
|||
//编辑员工参数
|
|||
type eitePersonnel struct { |
|||
Id string `json:"id"` |
|||
//员工主表
|
|||
// Number string `json:"number"` //工号1
|
|||
// Password string `json:"password"` //密码1
|
|||
Name string `json:"name"` //姓名1
|
|||
Icon string `json:"icon"` //头像
|
|||
HireType int `json:"hiretype"` //1雇佣类型(1:雇佣入职;2:再入职;3:返聘)
|
|||
EmpType int `json:"emptype"` //用工关系(1:实习生;2:待分配;3:试用员工;4:正式员工;5:停薪留职;6:退休;7:辞退;8:离职;9:应聘人员)
|
|||
Company int64 `json:"company"` //公司
|
|||
MainDepartment int64 `json:"maindepartment"` //主部门
|
|||
Department []string `json:"department"` //分厂(部室)
|
|||
AdminOrg int64 `json:"adminorg"` //工段
|
|||
Position int64 `json:"position"` //职位(岗位)1
|
|||
// JobName int64 `json:"jobname"` //职务
|
|||
PositionGrade int64 `json:"positiongrade"` //入职等级
|
|||
//员工副表
|
|||
Passportno string `json:"passportno"` //护照号码
|
|||
Globalroaming string `json:"globalroaming"` //国际区号
|
|||
IDCardNo string `json:"idcardno"` //身份证号码
|
|||
IDCardStartTime string `json:"idcardnostarttime"` //身份证有效期开始
|
|||
IDCardEndTime string `json:"idcardnoendtime"` //身份证有效期结束
|
|||
IDCardAddress string `json:"idcardnoaddress"` //身份证地址
|
|||
IDCardIsSued string `json:"idcardissued"` //身份证签发机关
|
|||
Mobilephone string `json:"mobilephone"` //联系电话
|
|||
Email string `json:"email"` //电子邮件
|
|||
Gender int `json:"gender"` //性别
|
|||
Birthday string `json:"birthday"` //生日
|
|||
Nation string `json:"nation"` //民族
|
|||
NativePlace string `json:"nativeplace"` //籍贯
|
|||
Health int `json:"health"` //健康状况(1:良好;2:一般;3:较弱,4:有生理缺陷;5:残废
|
|||
Maritalstatus int `json:"maritalstatus"` //婚姻状况(1:未婚;2:已婚;3:丧偶;4:离异)
|
|||
CurrentResidence string `json:"currentresidence"` //现居地
|
|||
WorkingDate string `json:"workingdate"` //参加工作日期
|
|||
EntryDate string `json:"entrydate"` //入职日期
|
|||
ProbationPeriod int `json:"probationperiod"` //试用期(月)
|
|||
ConfirmationDate string `json:"confirmationdate"` //转正日期
|
|||
Constellation int `json:"constellation"` //星座(1:白羊座;2:金牛座;3:双子座;4:巨蟹座;5:狮子座;6:处女座;7:天枰座;8:天蝎座;9:射手座;10:摩羯座;11:水瓶座;12:双鱼座)
|
|||
PoliticalOutlook int `json:"politicaloutlook"` //政治面貌(1:群众;2:无党派;3:台盟会员;4:九三社员;5:致公党员;6:农工党员;7:民进会员;8:民建会员;9:民盟盟员;10:民革会员,11:共青团员;12:预备党员;13:中共党员)
|
|||
Isveterans int `json:"isveterans"` //是否为退役军人(1:是;2:否)
|
|||
Veteransnumber string `json:"veteransnumber"` //退役证编号
|
|||
Iisdoubleworker int `json:"isdoubleworker"` //是否双职工(1:是;2:否)
|
|||
DoubleWorkerList []DoubleWorkerInFo `json:"doubleworkerlist"` //双职工列表
|
|||
|
|||
} |
|||
|
|||
//添加紧急联系人
|
|||
type addEmergencyContact struct { |
|||
Id string `json:"id"` |
|||
List []emergencyContact `json:"list"` |
|||
} |
|||
|
|||
//添加家庭成员
|
|||
type addFamilyPeople struct { |
|||
Id string `json:"id"` |
|||
List []memberOfFamily `json:"list"` |
|||
} |
|||
|
|||
//添加教育经历
|
|||
type addExpToSchool struct { |
|||
Id string `json:"id"` |
|||
List []educationalExperience `json:"list"` |
|||
} |
|||
|
|||
//编辑教育经历
|
|||
type editExpToSchool struct { |
|||
Id string `json:"id"` |
|||
educationalExperience |
|||
} |
|||
|
|||
//添加工作履历
|
|||
type addWorkHistory struct { |
|||
Id string `json:"id"` |
|||
List []workHistoryAry `json:"list"` |
|||
} |
|||
|
|||
//编辑教育经历
|
|||
type editWorkHistory struct { |
|||
Id string `json:"id"` |
|||
workHistoryAry |
|||
} |
|||
|
|||
//集团内部工作履历
|
|||
type insideHistory struct { |
|||
Group string `json:"group"` //集团
|
|||
Company string `json:"company"` //公司
|
|||
Department string `json:"department"` //部室
|
|||
Workshop string `json:"workshop"` //二级部门或车间
|
|||
WorkshopSection string `json:"workshopsection"` //工段
|
|||
Position string `json:"position"` //职位
|
|||
GradePositions int64 `json:"gradepositions"` //职等
|
|||
StartTime string `json:"starttime"` //开始日期
|
|||
EndTime string `json:"endtime"` //结束日期
|
|||
ChangeType int `json:"changetype"` //变动类型(1:预入职;2:雇佣入职;3:转正;4:晋升;5:降级;6:职等调整;7:调动调入;8:跨公司调动调入;9:借调;10:平调;11:兼职;12:预离职;13:离职;14:退休;15:返聘;16:员工初始化;)
|
|||
} |
|||
|
|||
//编辑集团工作履历
|
|||
type eidtInsideHistoryWork struct { |
|||
Id string `json:"id"` |
|||
insideHistoryerMy |
|||
} |
|||
@ -0,0 +1,113 @@ |
|||
package personnelapi |
|||
|
|||
//添加员工参数
|
|||
type addKingdeePersonneles struct { |
|||
Number string `json:"fnumber"` //工号1
|
|||
Name string `json:"name"` //姓名1
|
|||
Icon string `json:"icon"` //头像
|
|||
HireType string `json:"hiretype"` //1雇佣类型(1:雇佣入职;2:再入职;3:返聘)int
|
|||
EmpType string `json:"emptype"` //用工关系(1:实习生;2:待分配;3:试用员工;4:正式员工;5:停薪留职;6:退休;7:辞退;8:离职) int
|
|||
|
|||
Company string `json:"company"` //公司
|
|||
MainDepartment string `json:"maindepartment"` //主部门
|
|||
Department []string `json:"department"` //分厂(部室)
|
|||
AdminOrg string `json:"adminorg"` //工段
|
|||
|
|||
Position string `json:"fposition"` //职位(岗位)1
|
|||
JobName string `json:"jobname"` //职务
|
|||
PositionGrade string `json:"positiongrade"` //入职等级 int64
|
|||
//员工副表
|
|||
Passportno string `json:"passportno"` //护照号码
|
|||
Globalroaming string `json:"globalroaming"` //国际区号
|
|||
IDCardNo string `json:"idcardno"` //身份证号码
|
|||
IDCardStartTime string `json:"idcardstartdate"` //身份证有效期开始
|
|||
IDCardEndTime string `json:"idcardenddate"` //身份证有效期结束
|
|||
IDCardAddress string `json:"idcardaddress"` //身份证地址
|
|||
IDCardIsSued string `json:"idcardissued"` //身份证签发机关
|
|||
Mobilephone string `json:"mobilephone"` //联系电话
|
|||
Email string `json:"email"` //电子邮件
|
|||
Gender string `json:"gender"` //性别 int
|
|||
Birthday string `json:"birthday"` //生日
|
|||
Nation string `json:"nation"` //民族
|
|||
NativePlace string `json:"nativeplace"` //籍贯
|
|||
Health string `json:"health"` //健康状况(1:良好;2:一般;3:较弱,4:有生理缺陷;5:残废 int
|
|||
Maritalstatus string `json:"maritalstatus"` //婚姻状况(1:未婚;2:已婚;3:丧偶;4:离异) int
|
|||
CurrentResidence string `json:"currentresidence"` //现居地
|
|||
WorkingDate string `json:"workingdate"` //参加工作日期
|
|||
EntryDate string `json:"entrydate"` //入职日期
|
|||
ProbationPeriod string `json:"probationperiod"` //试用期(月)int
|
|||
ConfirmationDate string `json:"confirmationdate"` //转正日期
|
|||
|
|||
Constellation string `json:"constellation"` //星座(1:白羊座;2:金牛座;3:双子座;4:巨蟹座;5:狮子座;6:处女座;7:天枰座;8:天蝎座;9:射手座;10:摩羯座;11:水瓶座;12:双鱼座) int
|
|||
PoliticalOutlook string `json:"politicaloutlook"` //政治面貌(1:群众; 2:无党派;3:台盟会员;4:九三社员;5:致公党员;6:农工党员;7:民进会员;8:民建会员;9:民盟盟员;10:民革会员,11:共青团员;12:预备党员;13:中共党员) int
|
|||
|
|||
//退役军人
|
|||
Isveterans string `json:"isveterans"` //是否为退役军人(1:是;2:否) int
|
|||
Veteransnumber string `json:"veteransnumber"` //退役证编号
|
|||
//双职工表
|
|||
//是否为双职工
|
|||
Iisdoubleworker string `json:"isdoubleworker"` //是否双职工(1:是;2:否) int
|
|||
SpouseName string `json:"spousename"` //配偶姓名
|
|||
SpouseCompany string `json:"spousecompany"` //配偶所在公司
|
|||
SpouseDepartment string `json:"spousedepartment"` //配偶所在部门
|
|||
SpousePosition string `json:"spouseposition"` //配偶所在岗位
|
|||
SpouseTel string `json:"spousetel"` //配偶联系方式
|
|||
//教育经历表
|
|||
//最高学历
|
|||
HighestGraduationSchool string `json:"highestschool"` //毕业学校
|
|||
HighestEducation string `json:"highesteducation"` //学历(1:初中及以下;2:中专;3:高中;4:中技;5:高技;6:函数专科;7:大学专科;8:函数本科;9:大学本科;10:硕士研究生;11:博士研究生;12:专家、教授)int
|
|||
HighestSubject string `json:"highestsubject"` //专业
|
|||
HighestAdmissionTime string `json:"highestadmissiontime"` //入学时间
|
|||
HighestGraduationTime string `json:"highestgraduationtime"` //毕业时间
|
|||
HighestAcademicDegree string `json:"highestacademicdegree"` //学位(0:无;1:学士;2:硕士;3:博士)int
|
|||
//第一学历
|
|||
FirstGraduationSchool string `json:"firstschool"` //毕业学校
|
|||
FirstEducation string `json:"firsteducation"` //学历(1:初中及以下;2:中专;3:高中;4:中技;5:高技;6:函数专科;7:大学专科;8:函数本科;9:大学本科;10:硕士研究生;11:博士研究生;12:专家、教授)int
|
|||
FirstSubject string `json:"firstsubject"` //专业
|
|||
FirstAdmissionTime string `json:"firstadmissiontime"` //入学时间
|
|||
FirstGraduationTime string `json:"firstgraduationtime"` //毕业时间
|
|||
FirstAcademicDegree string `json:"firstacademicdegree"` //学位(0:无;1:学士;2:硕士;3:博士)int
|
|||
|
|||
//紧急联系人表
|
|||
//紧急联系人一
|
|||
UrgentNameOne string `json:"urgentnameone"` //姓名
|
|||
UrgentRelationshipOne string `json:"urgentrelationshipone"` //与紧急联系人
|
|||
UrgentMobilephoneOne string `json:"urgentmobilephoneone"` //联系电话
|
|||
|
|||
//紧急联系人二
|
|||
UrgentNameTwo string `json:"urgentnametwo"` //姓名
|
|||
UrgentRelationshipTwo string `json:"urgentrelationshiptwo"` //与紧急联系人
|
|||
UrgentMobilephoneTwo string `json:"urgentmobilephonetwo"` //联系电话
|
|||
//员工家属表
|
|||
MemberOfFamily []memberOfFamilyes `json:"memberoffamily"` //家庭成员
|
|||
//集团外工作履历
|
|||
WorkHistoryList []workHistoryAry `json:"workhistorylist"` //工作履历
|
|||
//集团内工作履历
|
|||
InsideWorkHistory []insideHistoryer `json:"insideworkhistory"` //工作履历
|
|||
} |
|||
|
|||
//家庭成员
|
|||
type memberOfFamilyes struct { |
|||
emergencyContact |
|||
Company string `json:"company"` //公司
|
|||
Department string `json:"department"` //分厂(部室)
|
|||
Position string `json:"fposition"` //职位(岗位)
|
|||
PoliticalOutlook string `json:"politicaloutlook"` //政治面貌(1:群众;2:无党派;3:台盟会员;4:九三社员;5:致公党员;6:农工党员;7:民进会员;8:民建会员;9:民盟盟员;10:民革会员,11:共青团员;12:预备党员;13:中共党员) int
|
|||
IdStr string `json:"idstr"` |
|||
} |
|||
|
|||
//集团内部工作履历
|
|||
type insideHistoryer struct { |
|||
Group string `json:"group"` //集团
|
|||
Company string `json:"company"` //公司
|
|||
Department string `json:"department"` //部室
|
|||
Workshop string `json:"workshop"` //二级部门或车间
|
|||
WorkshopSection string `json:"grop"` //`json:"workshopsection"` //工段
|
|||
Position string `json:"fposition"` //职位
|
|||
GradePositions int64 `json:"gradepositions"` //职等
|
|||
StartTime string `json:"starttime"` //开始日期
|
|||
EndTime string `json:"endtime"` //结束日期
|
|||
ChangeType string `json:"changetype"` //变动类型(1:预入职;2:雇佣入职;3:转正;4:晋升;5:降级;6:职等调整;7:调动调入;8:跨公司调动调入;9:借调;10:平调;11:兼职;12:预离职;13:离职;14:退休;15:返聘;16:员工初始化;)
|
|||
AssignType string `json:"assigntype"` |
|||
// Grop string `json:"grop"` //工段
|
|||
} |
|||
@ -0,0 +1,305 @@ |
|||
package shiyan |
|||
|
|||
import ( |
|||
"fmt" |
|||
"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) |
|||
} |
|||
@ -0,0 +1,78 @@ |
|||
package shiyan |
|||
|
|||
import ( |
|||
"hr_server/models" |
|||
"hr_server/overall/overallhandle" |
|||
"sync" |
|||
|
|||
"github.com/gin-gonic/gin" |
|||
) |
|||
|
|||
var synPro = sync.WaitGroup{} |
|||
|
|||
//人员API
|
|||
type ShiYan struct{} |
|||
|
|||
//入口
|
|||
func (s *ShiYan) Index(c *gin.Context) { |
|||
outputCont := overallhandle.MapOut() |
|||
outputCont["index"] = "实验API" |
|||
overallhandle.Result(0, outputCont, c) |
|||
} |
|||
|
|||
type Jieshou struct { |
|||
Time string `json:"time"` |
|||
ProbationPeriod int `json:"probationperiod"` //试用期(月)
|
|||
} |
|||
|
|||
//输出知行学院的人员信息
|
|||
type schoolUser struct { |
|||
models.WorkMan |
|||
} |
|||
|
|||
//输出迁移组织架构
|
|||
type outOrgCont struct { |
|||
Id int64 `json:"id" gorm:"primaryKey;column:id;type:bigint(20) unsigned;not null;comment:Id;index"` |
|||
Superior int64 `json:"superior" gorm:"column:superior;type:bigint(20) unsigned;default:0;not null;comment:上级ID"` |
|||
OrganizationType int64 `json:"organizationtype" gorm:"column:organization_type;type:bigint(20) unsigned;default:0;not null;comment:行政组织类型"` |
|||
} |
|||
|
|||
type peopleQianyi struct { |
|||
dataMap []models.Personnel |
|||
userAll []models.PersonnelContent |
|||
mutext sync.RWMutex |
|||
} |
|||
|
|||
//读取锁数据
|
|||
func (d *peopleQianyi) readMyDayData() ([]models.Personnel, []models.PersonnelContent) { |
|||
d.mutext.RLock() |
|||
defer d.mutext.RUnlock() |
|||
return d.dataMap, d.userAll |
|||
} |
|||
|
|||
//职务相关
|
|||
type jobAttber struct { |
|||
Id int64 `json:"id" gorm:"primaryKey;column:id;type:bigint(20) unsigned;not null;comment:Id;index"` |
|||
Number string `json:"number" gorm:"column:number;type:varchar(255) unsigned;default:'';not null;comment:编号"` |
|||
Name string `json:"name" gorm:"column:name;type:varchar(255) unsigned;default:'';not null;comment:名称"` |
|||
PersonInCharge int `json:"personincharge" gorm:"column:person_in_charge;type:tinyint(1) unsigned;default:0;not null;comment:是否为本部门负责人"` |
|||
Dutid int64 `json:"dutid" gorm:"column:dutid;type:bigint(20) unsigned;default:0;not null;comment:职务Id"` |
|||
Dutname string `json:"dutname" gorm:"column:dutname;type:varchar(255) unsigned;default:'';not null;comment:职务名称"` |
|||
DutNumber string `json:"dutnumber" gorm:"column:dutnumber;type:varchar(255) unsigned;default:'';not null;comment:职务编号"` |
|||
Jobid int64 `json:"jobid" gorm:"column:jobid;type:bigint(20) unsigned;default:0;not null;comment:职务分类Id"` |
|||
JobName string `json:"jobname" gorm:"column:jobname;type:varchar(255) unsigned;default:'';not null;comment:职务分类名称"` |
|||
} |
|||
|
|||
type ShituType struct { |
|||
Id int64 `json:"id" gorm:"primaryKey;column:id;type:bigint(20) unsigned;not null;comment:Id;index"` |
|||
Number string `json:"number" gorm:"column:number;type:varchar(50) unsigned;default:'';not null;comment:行政编码"` |
|||
Name string `json:"name" gorm:"column:name;type:varchar(255) unsigned;default:'';not null;comment:组织名称"` |
|||
Superior int64 `json:"superior" gorm:"column:superior;type:bigint(20) unsigned;default:0;not null;comment:上级ID"` |
|||
TypeName string `json:"typename" gorm:"column:typename;type:varchar(255) unsigned;default:'';not null;comment:类型名称"` |
|||
Level int64 `json:"level" gorm:"column:level;type:int(5) unsigned;default:1;not null;comment:级别"` |
|||
State int `json:"state" gorm:"column:state;type:int(1) unsigned;default:1;not null;comment:状态(1:启用;2:禁用;3:删除)"` |
|||
} |
|||
|
|||
func (ShituType *ShituType) TableName() string { |
|||
return "orglist" |
|||
} |
|||
@ -0,0 +1,19 @@ |
|||
package dockingjindie |
|||
|
|||
import ( |
|||
jindiedocking "hr_server/api/jindie_docking" |
|||
|
|||
"github.com/gin-gonic/gin" |
|||
) |
|||
|
|||
//授权
|
|||
func (p *DockingJindieApiRouter) InitRouterGroup(route *gin.RouterGroup) { |
|||
apiRouter := route.Group("dockjindie") |
|||
|
|||
var apiHandle = jindiedocking.AppApiInlet.DockJinDieApi |
|||
{ |
|||
apiRouter.GET("", apiHandle.Index) //入口
|
|||
apiRouter.POST("", apiHandle.Index) //入口
|
|||
apiRouter.POST("dockkingdeeapi", apiHandle.DockKingdeeApi) //接口实验
|
|||
} |
|||
} |
|||
@ -0,0 +1,3 @@ |
|||
package dockingjindie |
|||
|
|||
type DockingJindieApiRouter struct{} |
|||
@ -0,0 +1,19 @@ |
|||
package empowerrote |
|||
|
|||
import ( |
|||
"hr_server/api/empower" |
|||
|
|||
"github.com/gin-gonic/gin" |
|||
) |
|||
|
|||
//授权
|
|||
func (p *EmpowerApiRouter) InitRouterGroup(route *gin.RouterGroup) { |
|||
apiRouter := route.Group("empower") |
|||
|
|||
var apiHandle = empower.AppApiInlet.Authorize |
|||
{ |
|||
apiRouter.GET("", apiHandle.Index) //入口
|
|||
apiRouter.POST("", apiHandle.Index) //入口
|
|||
apiRouter.POST("gaintoken", apiHandle.GainToken) //获取token
|
|||
} |
|||
} |
|||
@ -0,0 +1,3 @@ |
|||
package empowerrote |
|||
|
|||
type EmpowerApiRouter struct{} |
|||
@ -1,11 +1,24 @@ |
|||
package apirouter |
|||
|
|||
import "hr_server/apirouter/organization" |
|||
import ( |
|||
"hr_server/apirouter/dockingjindie" |
|||
"hr_server/apirouter/empowerrote" |
|||
"hr_server/apirouter/organization" |
|||
"hr_server/apirouter/permit" |
|||
"hr_server/apirouter/personnel" |
|||
"hr_server/apirouter/shiyanrouter" |
|||
) |
|||
|
|||
//路由入口
|
|||
|
|||
type RouterGroup struct { |
|||
OrganizationApi organization.OrganizationRoute //组织架构
|
|||
OrganizationApi organization.OrganizationRoute //组织架构
|
|||
PermitPowerApi permit.PermitPower //权限相关操作
|
|||
PersonnelRoute personnel.PersonnelRoute //人员管理
|
|||
PersonnelRouteKingdee personnel.PersonnelRouteKingdee //人员管理Kingdee
|
|||
ShiyanApiRRouter shiyanrouter.ShiyanApiRouter |
|||
EmpowerApiRouter empowerrote.EmpowerApiRouter |
|||
KingdeeApiRouter dockingjindie.DockingJindieApiRouter |
|||
} |
|||
|
|||
var RouterGroupInlet = new(RouterGroup) |
|||
|
|||
@ -0,0 +1,20 @@ |
|||
package permit |
|||
|
|||
import ( |
|||
"hr_server/api/version1" |
|||
|
|||
"github.com/gin-gonic/gin" |
|||
) |
|||
|
|||
//组织架构
|
|||
func (p *PermitPower) InitRouterGroup(route *gin.RouterGroup) { |
|||
apiRouter := route.Group("permit") |
|||
var apiHandle = version1.AppApiInlet.PermitPowerApi |
|||
{ |
|||
apiRouter.GET("", apiHandle.Index) //入口
|
|||
apiRouter.POST("", apiHandle.Index) //入口
|
|||
apiRouter.POST("permitlist", apiHandle.PermitPowerList) //权限列表
|
|||
apiRouter.POST("positionallotment", apiHandle.PositionAllotment) //岗位(职位)配权 GetPositionRole
|
|||
|
|||
} |
|||
} |
|||
@ -0,0 +1,4 @@ |
|||
package permit |
|||
|
|||
//权限相关操作
|
|||
type PermitPower struct{} |
|||
@ -0,0 +1,99 @@ |
|||
package personnel |
|||
|
|||
import ( |
|||
"hr_server/api/version1" |
|||
|
|||
"github.com/gin-gonic/gin" |
|||
) |
|||
|
|||
//员工档案
|
|||
func (p *PersonnelRoute) InitRouterGroup(route *gin.RouterGroup) { |
|||
apiRouter := route.Group("staff") |
|||
var apiHandle = version1.AppApiInlet.StaffApi |
|||
{ |
|||
apiRouter.GET("", apiHandle.Index) //入口
|
|||
apiRouter.POST("", apiHandle.Index) //入口
|
|||
apiRouter.POST("stafflist", apiHandle.StaffList) //人员列表
|
|||
apiRouter.POST("addstaff", apiHandle.AddStaff) //添加人员档案
|
|||
apiRouter.POST("allocationofrights", apiHandle.AllocationOfRights) //分配权限
|
|||
apiRouter.POST("archiveslist", apiHandle.ArchivesList) //人员列表(新)
|
|||
apiRouter.POST("archivescont", apiHandle.ArchivesCon) //个人档案
|
|||
apiRouter.POST("kingdeehr", apiHandle.NewKingdee) //对接金蝶HR系统
|
|||
//双职工
|
|||
apiRouter.POST("doubleworkerlist", apiHandle.DoubleWorkerList) //双职工列表
|
|||
apiRouter.POST("adddoubleworker", apiHandle.AddDoubleWorkerApi) //添加双职工
|
|||
apiRouter.POST("eidtdoubleworker", apiHandle.EidtDoubleWorkerApi) //编辑双职工
|
|||
apiRouter.POST("eidtdoubleworkerstate", apiHandle.EidtDoubleWorkerState) //编辑双职工状态
|
|||
//员工资料
|
|||
apiRouter.POST("eidtstaffcont", apiHandle.EidtStaffCont) //编辑员工资料
|
|||
//紧急联系人
|
|||
apiRouter.POST("emergencycontactlist", apiHandle.EmergencyContactList) //紧急联系人列表
|
|||
apiRouter.POST("addemercycall", apiHandle.AddEmercyCall) //添加紧急联系人
|
|||
apiRouter.POST("editemercycall", apiHandle.EditEmercyCall) //编辑紧急联系人
|
|||
apiRouter.POST("editemercycallstate", apiHandle.EditEmercyCallState) //编辑紧急联系人状态
|
|||
//家庭成员
|
|||
apiRouter.POST("familymemberslist", apiHandle.FamilyMemBersList) //家庭成员列表
|
|||
apiRouter.POST("addfamilymembers", apiHandle.AddFamilyMembers) //添加家庭成员
|
|||
apiRouter.POST("editfamilymembers", apiHandle.EditFamilyMembers) //编辑家庭成员
|
|||
apiRouter.POST("editfamilymemberssatte", apiHandle.EditFamilyMembersSatte) //编辑家庭成员状态
|
|||
//教育经历
|
|||
apiRouter.POST("personneleducationlist", apiHandle.PersonnelEducationList) //教育经历列表
|
|||
apiRouter.POST("addeducationalexperience", apiHandle.AddEducationalExperience) //添加教育经历
|
|||
apiRouter.POST("editeducationalexperience", apiHandle.EditEducationalExperience) //编辑教育经历
|
|||
apiRouter.POST("editeduexpstate", apiHandle.EditEduExpState) //编辑教育经历状态
|
|||
//工作履历
|
|||
apiRouter.POST("workhistorylist", apiHandle.WorkHistoryList) //工作履历列表
|
|||
apiRouter.POST("addworkhistorycont", apiHandle.AddWorkHistoryCont) //添加工作履历
|
|||
apiRouter.POST("editworkhistorycont", apiHandle.EditWorkHistoryCont) //编辑工作履历
|
|||
apiRouter.POST("editworkhistorystate", apiHandle.EditWorkHistoryState) //编辑工作履历状态
|
|||
//集团工作履历
|
|||
apiRouter.POST("insideworkhistorylist", apiHandle.InsideWorkHistoryList) //集团工作履历列表
|
|||
apiRouter.POST("addinsidehistory", apiHandle.AddInsideHistory) //添加集团工作履历
|
|||
apiRouter.POST("eidtinsidehistoryworkcont", apiHandle.EidtInsideHistoryWorkCont) //编辑集团工作履历
|
|||
apiRouter.POST("editordelinsideworkhistorystate", apiHandle.EditOrDelInsideWorkHistoryState) //编辑集团工作履历状态
|
|||
} |
|||
} |
|||
|
|||
//员工档案
|
|||
func (p *PersonnelRouteKingdee) InitRouterGroup(route *gin.RouterGroup) { |
|||
apiRouter := route.Group("staffkingdee") |
|||
var apiHandle = version1.AppApiInlet.StaffApi |
|||
{ |
|||
apiRouter.GET("", apiHandle.Index) //入口
|
|||
apiRouter.POST("", apiHandle.Index) //入口
|
|||
apiRouter.POST("stafflist", apiHandle.StaffList) //人员列表
|
|||
apiRouter.POST("addstaff", apiHandle.AddStaff) //添加人员档案
|
|||
apiRouter.POST("allocationofrights", apiHandle.AllocationOfRights) //分配权限
|
|||
apiRouter.POST("archiveslist", apiHandle.ArchivesList) //人员列表(新)
|
|||
apiRouter.POST("archivescont", apiHandle.ArchivesCon) //个人档案
|
|||
apiRouter.POST("kingdeehr", apiHandle.NewKingdee) //对接金蝶HR系统
|
|||
//双职工
|
|||
apiRouter.POST("adddoubleworker", apiHandle.AddDoubleWorkerApi) //添加双职工
|
|||
apiRouter.POST("eidtdoubleworker", apiHandle.EidtDoubleWorkerApi) //编辑双职工
|
|||
apiRouter.POST("eidtdoubleworkerstate", apiHandle.EidtDoubleWorkerState) //编辑双职工状态
|
|||
//员工资料
|
|||
apiRouter.POST("eidtstaffcont", apiHandle.EidtStaffCont) //编辑员工资料
|
|||
//紧急联系人
|
|||
apiRouter.POST("addemercycall", apiHandle.AddEmercyCall) //添加紧急联系人
|
|||
apiRouter.POST("editemercycall", apiHandle.EditEmercyCall) //编辑紧急联系人
|
|||
apiRouter.POST("editemercycallstate", apiHandle.EditEmercyCallState) //编辑紧急联系人状态
|
|||
//家庭成员
|
|||
apiRouter.POST("addfamilymembers", apiHandle.AddFamilyMembers) //添加家庭成员
|
|||
apiRouter.POST("editfamilymembers", apiHandle.EditFamilyMembers) //编辑家庭成员
|
|||
apiRouter.POST("editfamilymemberssatte", apiHandle.EditFamilyMembersSatte) //编辑家庭成员状态
|
|||
//教育经历
|
|||
apiRouter.POST("addeducationalexperience", apiHandle.AddEducationalExperience) //添加教育经历
|
|||
apiRouter.POST("editeducationalexperience", apiHandle.EditEducationalExperience) //编辑教育经历
|
|||
apiRouter.POST("editeduexpstate", apiHandle.EditEduExpState) //编辑教育经历状态
|
|||
//工作履历
|
|||
apiRouter.POST("addworkhistorycont", apiHandle.AddWorkHistoryCont) //添加工作履历
|
|||
apiRouter.POST("editworkhistorycont", apiHandle.EditWorkHistoryCont) //编辑工作履历
|
|||
apiRouter.POST("editworkhistorystate", apiHandle.EditWorkHistoryState) //编辑工作履历状态
|
|||
|
|||
//集团工作履历
|
|||
apiRouter.POST("insideworkhistorylist", apiHandle.InsideWorkHistoryList) //集团工作履历列表
|
|||
apiRouter.POST("addinsidehistory", apiHandle.AddInsideHistory) //添加集团工作履历
|
|||
apiRouter.POST("eidtinsidehistoryworkcont", apiHandle.EidtInsideHistoryWorkCont) //编辑集团工作履历
|
|||
apiRouter.POST("editordelinsideworkhistorystate", apiHandle.EditOrDelInsideWorkHistoryState) //编辑集团工作履历状态
|
|||
} |
|||
} |
|||
@ -0,0 +1,5 @@ |
|||
package personnel |
|||
|
|||
//人员管理方面
|
|||
type PersonnelRoute struct{} |
|||
type PersonnelRouteKingdee struct{} |
|||
@ -0,0 +1,20 @@ |
|||
package shiyanrouter |
|||
|
|||
import ( |
|||
"hr_server/api/version1" |
|||
|
|||
"github.com/gin-gonic/gin" |
|||
) |
|||
|
|||
//组织架构
|
|||
func (p *ShiyanApiRouter) InitRouterGroup(route *gin.RouterGroup) { |
|||
apiRouter := route.Group("shiyan") |
|||
var apiHandle = version1.AppApiInlet.ShiyanApi |
|||
{ |
|||
apiRouter.GET("", apiHandle.Index) //入口
|
|||
apiRouter.POST("", apiHandle.Index) //入口
|
|||
apiRouter.POST("shiyan", apiHandle.ShiyanCont) //人员列表
|
|||
apiRouter.POST("personnelmigration", apiHandle.PersonnelMigration) //人员迁移
|
|||
apiRouter.POST("shitu", apiHandle.Shitu) |
|||
} |
|||
} |
|||
@ -0,0 +1,3 @@ |
|||
package shiyanrouter |
|||
|
|||
type ShiyanApiRouter struct{} |
|||
@ -1,6 +1,11 @@ |
|||
|
|||
#App主配置 |
|||
appsetup: |
|||
port: 9999 #服务端口 |
|||
port: 39168 #服务端口 |
|||
readtime: 3600 #请求的读取操作在超时前的最大持续时间 |
|||
writetime : 3600 #回复的写入操作在超时前的最大持续时间 |
|||
writetime : 3600 #回复的写入操作在超时前的最大持续时间 |
|||
appkey: 'heng_xin_gao_ke_AppKey' #应用程序密钥 |
|||
password: '123456789' #系统默认密码 |
|||
prefix: 'HXJT' #系统字段前缀 |
|||
logconfig: |
|||
path: 'log' #日志保存地址 |
|||
@ -0,0 +1,21 @@ |
|||
{ |
|||
"group":[ |
|||
{ |
|||
"old":3, |
|||
"new":2 |
|||
} |
|||
], |
|||
"department":[ |
|||
{ |
|||
"newgroup":2, |
|||
"old":1, |
|||
"new":14 |
|||
}, |
|||
{ |
|||
"newgroup":2, |
|||
"old":2, |
|||
"new":13 |
|||
} |
|||
], |
|||
"workshopsection":[] |
|||
} |
|||
@ -0,0 +1,11 @@ |
|||
|
|||
#App主配置 |
|||
appsetup: |
|||
port: 39168 #服务端口 |
|||
readtime: 3600 #请求的读取操作在超时前的最大持续时间 |
|||
writetime : 3600 #回复的写入操作在超时前的最大持续时间 |
|||
appkey: 'heng_xin_gao_ke_AppKey' #应用程序密钥 |
|||
password: '123456789' #系统默认密码 |
|||
prefix: 'HXJT' #系统字段前缀 |
|||
logconfig: |
|||
path: 'log' #日志保存地址 |
|||
@ -0,0 +1,22 @@ |
|||
package configApp |
|||
|
|||
//服务基础配置
|
|||
type Server struct { |
|||
Appsetup appsetup `mapstructure:"appsetup" json:"appsetup" yaml:"appsetup"` |
|||
Logsetup logsetup `mapstructure:"logconfig" json:"logconfig" yaml:"logconfig"` |
|||
} |
|||
|
|||
//服务配置详情
|
|||
type appsetup struct { |
|||
Port int `mapstructure:"port" json:"port" yaml:"port"` |
|||
Readtime int `mapstructure:"readtime" json:"readtime" yaml:"readtime"` |
|||
Writetime int `mapstructure:"writetime" json:"writetime" yaml:"writetime"` |
|||
AppKey string `mapstructure:"appkey" json:"appkey" yaml:"appkey"` |
|||
DefaultPassword string `mapstructure:"password" json:"password" yaml:"password"` |
|||
PreFix string `mapstructure:"prefix" json:"prefix" yaml:"prefix"` |
|||
} |
|||
|
|||
//日志配置
|
|||
type logsetup struct { |
|||
Path string `mapstructure:"path" json:"path" yaml:"path"` |
|||
} |
|||
@ -0,0 +1,72 @@ |
|||
package configDatabase |
|||
|
|||
import ( |
|||
"fmt" |
|||
|
|||
"gorm.io/driver/mysql" |
|||
"gorm.io/gorm" |
|||
"gorm.io/gorm/logger" |
|||
) |
|||
|
|||
type MysqlSetUp struct { |
|||
MasterMysql MasterMysqlSetUp `mapstructure:"master" json:"master" yaml:"master"` //主数据库
|
|||
//其他数据库依次添加
|
|||
WechatMysql MasterMysqlSetUp `mapstructure:"wechat" json:"wechat" yaml:"wechat"` //微信数据库
|
|||
HrMysql MasterMysqlSetUp `mapstructure:"hrdatabase" json:"hrdatabase" yaml:"hrdatabase"` //HR数据库
|
|||
HrMysqlJin MasterMysqlSetUp `mapstructure:"hrdatabasejin" json:"hrdatabasejin" yaml:"hrdatabasejin"` //HR数据库
|
|||
} |
|||
|
|||
type MasterMysqlSetUp struct { |
|||
UrlPath string `mapstructure:"url_path" json:"url_path" yaml:"url_path"` // 服务器地址
|
|||
Port int `mapstructure:"port" json:"port" yaml:"port"` // 端口
|
|||
Charset string `mapstructure:"charset" json:"charset" yaml:"charset"` // 编码方式
|
|||
ParseTime bool `mapstructure:"parseTime" json:"parseTime" yaml:"parseTime"` // 是否自动转换时间
|
|||
Loc string `mapstructure:"loc" json:"loc" yaml:"loc"` // 时区
|
|||
Name string `mapstructure:"name" json:"name" yaml:"name"` // 数据库名称
|
|||
UserName string `mapstructure:"username" json:"username" yaml:"username"` // 账号
|
|||
PassWord string `mapstructure:"password" json:"password" yaml:"password"` // 密码
|
|||
MaxIdleConns int `mapstructure:"max_idle_conns" json:"max_idle_conns" yaml:"max_idle_conns"` // 最大空闲数
|
|||
MaxOpenConns int `mapstructure:"max_open_conns" json:"max_open_conns" yaml:"max_open_conns"` // 最大链接数
|
|||
GormLog bool `mapstructure:"gorm_log" json:"gorm_log" yaml:"gorm_log"` // 是否开启Gorm全局日志
|
|||
} |
|||
|
|||
func (m *MasterMysqlSetUp) SqlDsn() (dsnStr string) { |
|||
dsnStr = fmt.Sprintf("%v:%v@tcp(%v:%v)/%v?charset=%v", m.UserName, m.PassWord, m.UrlPath, m.Port, m.Name, m.Charset) |
|||
if m.ParseTime == true { |
|||
dsnStr = fmt.Sprintf("%v:%v@tcp(%v:%v)/%v?charset=%v&parseTime=%v&loc=%v", m.UserName, m.PassWord, m.UrlPath, m.Port, m.Name, m.Charset, m.ParseTime, m.Loc) |
|||
} |
|||
return |
|||
} |
|||
|
|||
func (m *MasterMysqlSetUp) OpenSql() *gorm.DB { |
|||
sqlConfig := mysql.Config{ |
|||
DSN: m.SqlDsn(), // DSN
|
|||
DefaultStringSize: 255, // string 类型字段的默认长度
|
|||
DisableDatetimePrecision: true, // 禁用 datetime 精度,MySQL 5.6 之前的数据库不支持
|
|||
DontSupportRenameIndex: true, // 重命名索引时采用删除并新建的方式,MySQL 5.7 之前的数据库和 MariaDB 不支持重命名索引
|
|||
DontSupportRenameColumn: true, // 用 `change` 重命名列,MySQL 8 之前的数据库和 MariaDB 不支持重命名列
|
|||
SkipInitializeWithVersion: false, // 根据版本自动配置
|
|||
} |
|||
if m.GormLog == true { |
|||
if opDb, err := gorm.Open(mysql.New(sqlConfig), &gorm.Config{ |
|||
Logger: logger.Default.LogMode(logger.Info), |
|||
}); err != nil { |
|||
return nil |
|||
} else { |
|||
sqlDb, _ := opDb.DB() |
|||
sqlDb.SetMaxIdleConns(m.MaxIdleConns) |
|||
sqlDb.SetMaxOpenConns(m.MaxOpenConns) |
|||
return opDb |
|||
} |
|||
} else { |
|||
if opDb, err := gorm.Open(mysql.New(sqlConfig)); err != nil { |
|||
return nil |
|||
} else { |
|||
sqlDb, _ := opDb.DB() |
|||
sqlDb.SetMaxIdleConns(m.MaxIdleConns) |
|||
sqlDb.SetMaxOpenConns(m.MaxOpenConns) |
|||
return opDb |
|||
} |
|||
} |
|||
|
|||
} |
|||
@ -0,0 +1,54 @@ |
|||
#数据库配置 |
|||
|
|||
#主数据库 |
|||
master: |
|||
url_path: '127.0.0.1' #数据库地址 |
|||
port: 3306 #数据库端口 |
|||
charset: 'utf8mb4' #数据库编码方式 |
|||
parseTime: 'True' #是否自动转换时间 |
|||
loc: 'Local' #时区 |
|||
name: 'hengxingaoke_tes' #数据库名称 |
|||
username: 'hengxingaoke_tes' #数据库用户民 |
|||
password: 'rjwi58B6zYCHMbGZ' #数据库密码 |
|||
max_idle_conns: 100 #最大空闲数量 |
|||
max_open_conns: 1500 #最大打开数量 |
|||
gorm_log: false #是否开启gorm日志 |
|||
#微信数据库 |
|||
wechat: |
|||
url_path: '127.0.0.1' #数据库地址 |
|||
port: 3306 #数据库端口 |
|||
charset: 'utf8mb4' #数据库编码方式 |
|||
parseTime: 'True' #是否自动转换时间 |
|||
loc: 'Local' #时区 |
|||
name: 'wechatuser' #数据库名称 |
|||
username: 'wechatuser' #数据库用户民 |
|||
password: 'ESEYc527J5AAdfka' #数据库密码 |
|||
max_idle_conns: 100 #最大空闲数量 |
|||
max_open_conns: 1500 #最大打开数量 |
|||
gorm_log: false #是否开启gorm日志 |
|||
#HR数据库 |
|||
hrdatabase: |
|||
url_path: '127.0.0.1' #数据库地址 |
|||
port: 3306 #数据库端口 |
|||
charset: 'utf8mb4' #数据库编码方式 |
|||
parseTime: 'True' #是否自动转换时间 |
|||
loc: 'Local' #时区 |
|||
name: 'hr_new' #数据库名称 |
|||
username: 'hr_new' #数据库用户民 |
|||
password: 'AnknKiXiXaxNrw78' #数据库密码 |
|||
max_idle_conns: 100 #最大空闲数量 |
|||
max_open_conns: 1500 #最大打开数量 |
|||
gorm_log: false #是否开启gorm日志 |
|||
#HR数据库 |
|||
hrdatabasejin: |
|||
url_path: '127.0.0.1' #数据库地址 |
|||
port: 3306 #数据库端口 |
|||
charset: 'utf8mb4' #数据库编码方式 |
|||
parseTime: 'True' #是否自动转换时间 |
|||
loc: 'Local' #时区 |
|||
name: 'human_resources' #数据库名称 |
|||
username: 'human_resources' #数据库用户民 |
|||
password: 'Pinw2dyLNfemtp3z' #数据库密码 |
|||
max_idle_conns: 100 #最大空闲数量 |
|||
max_open_conns: 1500 #最大打开数量 |
|||
gorm_log: false #是否开启gorm日志 |
|||
@ -0,0 +1,21 @@ |
|||
{ |
|||
"group":[ |
|||
{ |
|||
"old":3, |
|||
"new":2 |
|||
} |
|||
], |
|||
"department":[ |
|||
{ |
|||
"newgroup":2, |
|||
"old":1, |
|||
"new":14 |
|||
}, |
|||
{ |
|||
"newgroup":2, |
|||
"old":2, |
|||
"new":13 |
|||
} |
|||
], |
|||
"workshopsection":[] |
|||
} |
|||
@ -0,0 +1,41 @@ |
|||
package confignosql |
|||
|
|||
import ( |
|||
"context" |
|||
"fmt" |
|||
|
|||
"github.com/go-redis/redis/v8" |
|||
) |
|||
|
|||
type RedisSetUp struct { |
|||
MasterRedis RedisConfitSetUp `mapstructure:"master" json:"master" yaml:"master"` //主数据库
|
|||
MasterRedis1 RedisConfitSetUp `mapstructure:"master1" json:"master1" yaml:"master1"` //主数据库
|
|||
MasterRedis2 RedisConfitSetUp `mapstructure:"master2" json:"master1" yaml:"master2"` //主数据库
|
|||
MasterRedis3 RedisConfitSetUp `mapstructure:"master3" json:"master1" yaml:"master3"` //主数据库
|
|||
MasterRedis4 RedisConfitSetUp `mapstructure:"master4" json:"master1" yaml:"master4"` //主数据库
|
|||
MasterRedis5 RedisConfitSetUp `mapstructure:"master5" json:"master1" yaml:"master5"` //主数据库
|
|||
} |
|||
|
|||
type RedisConfitSetUp struct { |
|||
UrlPath string `mapstructure:"url_path" json:"url_path" yaml:"url_path"` // 服务器地址
|
|||
Port int `mapstructure:"port" json:"port" yaml:"port"` // 端口
|
|||
Name int `mapstructure:"name" json:"name" yaml:"name"` // 数据库名称
|
|||
PassWord string `mapstructure:"password" json:"password" yaml:"password"` // 密码
|
|||
} |
|||
|
|||
func (r *RedisConfitSetUp) OpenRedis() *redis.Client { |
|||
address := fmt.Sprintf("%v:%v", r.UrlPath, r.Port) |
|||
fmt.Printf("开启%v Redis库 %v\n", address, r.Name) |
|||
redisClient := redis.NewClient(&redis.Options{ |
|||
Addr: address, |
|||
Password: r.PassWord, |
|||
DB: r.Name, |
|||
}) |
|||
pingLink, err := redisClient.Ping(context.Background()).Result() |
|||
if err != nil { |
|||
fmt.Printf("%v Redis链接失败!原因:%v\n", r.Name, err) |
|||
} else { |
|||
fmt.Printf("%v Redis链接成功!=====>%v\n", r.Name, pingLink) |
|||
} |
|||
return redisClient |
|||
} |
|||
@ -0,0 +1,41 @@ |
|||
#Redis配置文件 |
|||
master: |
|||
url_path: '127.0.0.1' |
|||
port: 6379 #数据库端口 |
|||
password: "" |
|||
name: 0 |
|||
|
|||
#Redis配置文件 |
|||
master1: |
|||
url_path: '127.0.0.1' |
|||
port: 6379 #数据库端口 |
|||
password: "" |
|||
name: 1 |
|||
|
|||
#Redis配置文件 |
|||
master2: |
|||
url_path: '127.0.0.1' |
|||
port: 6379 #数据库端口 |
|||
password: "" |
|||
name: 2 |
|||
|
|||
#Redis配置文件 |
|||
master3: |
|||
url_path: '127.0.0.1' |
|||
port: 6379 #数据库端口 |
|||
password: "" |
|||
name: 3 |
|||
|
|||
#Redis配置文件 |
|||
master4: |
|||
url_path: '127.0.0.1' |
|||
port: 6379 #数据库端口 |
|||
password: "" |
|||
name: 4 |
|||
|
|||
#Redis配置文件 |
|||
master5: |
|||
url_path: '127.0.0.1' |
|||
port: 6379 #数据库端口 |
|||
password: "" |
|||
name: 5 |
|||
@ -0,0 +1,380 @@ |
|||
package grocerystore |
|||
|
|||
import ( |
|||
"context" |
|||
"fmt" |
|||
"hr_server/overall" |
|||
"time" |
|||
|
|||
"github.com/go-redis/redis/v8" |
|||
) |
|||
|
|||
//redis 基础设定
|
|||
type RedisStoreType struct { |
|||
Expiration time.Duration |
|||
PreKey string |
|||
Context context.Context |
|||
RedisDb *redis.Client |
|||
} |
|||
|
|||
//启动redis
|
|||
func RunRedis(redisClient *redis.Client) *RedisStoreType { |
|||
var redisStoreType RedisStoreType |
|||
redisStoreType.Expiration = time.Second * 300 |
|||
redisStoreType.PreKey = fmt.Sprintf("%v:", overall.CONSTANT_CONFIG.Appsetup.PreFix) |
|||
redisStoreType.Context = context.Background() |
|||
redisStoreType.RedisDb = redisClient |
|||
return &redisStoreType |
|||
} |
|||
|
|||
//设置键前缀
|
|||
func (r *RedisStoreType) SetRedisPrefix(prefix string) { |
|||
r.PreKey = prefix |
|||
} |
|||
|
|||
//设置过期时间
|
|||
func (r *RedisStoreType) SetRedisTime(timeDate int64) { |
|||
r.Expiration = time.Second * time.Duration(timeDate) |
|||
} |
|||
|
|||
//设置字符串
|
|||
func (r *RedisStoreType) Set(key string, value string) bool { |
|||
err := r.RedisDb.Set(r.Context, r.PreKey+key, value, r.Expiration).Err() |
|||
if err != nil { |
|||
return false |
|||
} |
|||
return true |
|||
} |
|||
|
|||
//获取字符串
|
|||
func (r *RedisStoreType) Get(key string) (bool, string) { |
|||
err := r.RedisDb.Get(r.Context, r.PreKey+key) |
|||
if err.Err() != nil { |
|||
return false, "" |
|||
} |
|||
return true, err.Val() |
|||
} |
|||
|
|||
//删除键
|
|||
func (r *RedisStoreType) DelKey(key string) bool { |
|||
err := r.RedisDb.Del(r.Context, r.PreKey+key).Err() |
|||
if err != nil { |
|||
return false |
|||
} |
|||
return true |
|||
} |
|||
|
|||
//哈希操作
|
|||
/* |
|||
获取单个哈希键值 |
|||
@hashName 集合名称 |
|||
@hashKey 哈希键 |
|||
callback |
|||
errs 状态 |
|||
hashVal 获得值 |
|||
*/ |
|||
func (r *RedisStoreType) HashGet(hashName, hashKey string) (errs bool, hashVal string) { |
|||
err := r.RedisDb.HGet(r.Context, r.PreKey+hashName, hashKey) |
|||
if err.Err() != nil { |
|||
return false, "" |
|||
} |
|||
return true, err.Val() |
|||
} |
|||
|
|||
/* |
|||
为哈希表中的字段赋值 。 单一设置 |
|||
@hashName 集合名称 |
|||
@hashKey 哈希键 |
|||
@hashVal 要添加的值 |
|||
*/ |
|||
func (r *RedisStoreType) HashSet(hashName, hashKey, hashVal string) bool { |
|||
err := r.RedisDb.HSet(r.Context, r.PreKey+hashName, hashKey, hashVal).Err() |
|||
if err != nil { |
|||
return false |
|||
} |
|||
if r.Expiration == 0 { |
|||
r.RedisDb.Persist(r.Context, r.PreKey+hashName) |
|||
} else { |
|||
r.RedisDb.PExpire(r.Context, r.PreKey+hashName, r.Expiration) |
|||
} |
|||
// global.GVA_REDIS.PExpire(r.Context, r.PreKey+hashName, r.Expiration)
|
|||
return true |
|||
} |
|||
|
|||
/* |
|||
同时将多个 field-value (字段-值)对设置到哈希表中。 |
|||
@hashName 集合名称 |
|||
@hashVal 要添加的键与值 |
|||
*/ |
|||
func (r *RedisStoreType) HashMsetAdd(hashName string, hashVal map[string]interface{}) bool { |
|||
// rdb := RedisInit()
|
|||
err := r.RedisDb.HMSet(r.Context, r.PreKey+hashName, hashVal).Err() |
|||
// fmt.Printf("错误sss=========》%v=====2====》%v\n", err, hashVal)
|
|||
// err := rdb.HMSet(ctx, "userfg", hashVal).Err()
|
|||
if err != nil { |
|||
return false |
|||
} |
|||
if r.Expiration == 0 { |
|||
r.RedisDb.Persist(r.Context, r.PreKey+hashName) |
|||
} else { |
|||
r.RedisDb.PExpire(r.Context, r.PreKey+hashName, r.Expiration) |
|||
} |
|||
|
|||
return true |
|||
} |
|||
func (r *RedisStoreType) HashMsetAddAry(hashName string, hashVal []map[string]interface{}) bool { |
|||
// rdb := RedisInit()
|
|||
err := r.RedisDb.HMSet(r.Context, r.PreKey+hashName, hashVal).Err() |
|||
// err := rdb.HMSet(ctx, "userfg", hashVal).Err()
|
|||
if err != nil { |
|||
return false |
|||
} |
|||
if r.Expiration == 0 { |
|||
r.RedisDb.Persist(r.Context, r.PreKey+hashName) |
|||
} else { |
|||
r.RedisDb.PExpire(r.Context, r.PreKey+hashName, r.Expiration) |
|||
} |
|||
// global.GVA_REDIS.PExpire(r.Context, r.PreKey+hashName, r.Expiration)
|
|||
// fmt.Printf("错误sss=========》%v\n", hashVal)
|
|||
return true |
|||
} |
|||
|
|||
/* |
|||
返回哈希表中,所有的字段和值。 |
|||
@hashName 集合名称 |
|||
@hashKey 哈希键 |
|||
*/ |
|||
func (r *RedisStoreType) HashGetAll(hashName string) (map[string]string, bool) { |
|||
// rdb := RedisInit()
|
|||
// fmt.Printf("strKEy:===>%v\n", r.PreKey+hashName)
|
|||
val, err := r.RedisDb.HGetAll(r.Context, r.PreKey+hashName).Result() |
|||
if err != nil { |
|||
return val, false |
|||
} |
|||
if len(val) == 0 { |
|||
return val, false |
|||
} |
|||
return val, true |
|||
} |
|||
|
|||
//Redis 列表(List)
|
|||
|
|||
/** |
|||
Linsert 命令用于在列表的元素前或者后插入元素。当指定元素不存在于列表中时,不执行任何操作。 |
|||
当列表不存在时,被视为空列表,不执行任何操作。 |
|||
如果 key 不是列表类型,返回一个错误。 |
|||
@key 列表 |
|||
@op 插入状态 (1:在pivot之后;2:在pivot之前) |
|||
@pivot 定位值 |
|||
@value 要插入值 |
|||
*/ |
|||
func (r *RedisStoreType) Linsert(key string, op int, pivot, value interface{}) (int64, bool) { |
|||
BeforeOrAfter := "BEFORE" |
|||
if op != 1 { |
|||
BeforeOrAfter = "AFTER" |
|||
} |
|||
linsert, linsertErr := r.RedisDb.LInsert(r.Context, key, BeforeOrAfter, pivot, value).Result() |
|||
if linsertErr != nil { |
|||
return 0, false |
|||
} |
|||
return linsert, true |
|||
} |
|||
|
|||
/** |
|||
Lindex 命令用于通过索引获取列表中的元素。你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。 |
|||
@key 列表 |
|||
@index 索引 |
|||
*/ |
|||
func (r *RedisStoreType) Lindex(key string, index int64) (val string, err error) { |
|||
val, err = r.RedisDb.LIndex(r.Context, key, index).Result() |
|||
return |
|||
} |
|||
|
|||
/** |
|||
Llen 命令用于返回列表的长度。 如果列表 key 不存在,则 key 被解释为一个空列表,返回 0 。 如果 key 不是列表类型,返回一个错误。 |
|||
@key 列表 |
|||
*/ |
|||
func (r *RedisStoreType) Llen(key string) (val int64, err error) { |
|||
val, err = r.RedisDb.LLen(r.Context, key).Result() |
|||
return |
|||
} |
|||
|
|||
/** |
|||
Lpop 命令用于移除并返回列表的第一个元素。 |
|||
@key 列表 |
|||
*/ |
|||
func (r *RedisStoreType) Lpop(key string) (val string, err error) { |
|||
val, err = r.RedisDb.LPop(r.Context, key).Result() |
|||
return |
|||
} |
|||
|
|||
/** |
|||
Lpush 命令将一个或多个值插入到列表头部。 如果 key 不存在,一个空列表会被创建并执行 LPUSH 操作。 当 key 存在但不是列表类型时,返回一个错误。 |
|||
@key 列表 |
|||
@value 要插入的字符串 |
|||
*/ |
|||
func (r *RedisStoreType) Lpush(key string, value ...interface{}) (val int64, err error) { |
|||
val, err = r.RedisDb.LPush(r.Context, key, value).Result() |
|||
return |
|||
} |
|||
|
|||
/** |
|||
Lpushx 将一个值插入到已存在的列表头部,列表不存在时操作无效。 |
|||
@key 列表 |
|||
@value 要插入的字符串 |
|||
*/ |
|||
func (r *RedisStoreType) Lpushx(key, value string) (val int64, err error) { |
|||
val, err = r.RedisDb.LPushX(r.Context, key, value).Result() |
|||
return |
|||
} |
|||
|
|||
/** |
|||
Lrange 返回列表中指定区间内的元素,区间以偏移量 START 和 END 指定。 其中 0 表示列表的第一个元素, 1 表示列表的第二个元素,以此类推。 你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。 |
|||
@key 列表 |
|||
@start 起始值 |
|||
@stop 结束值 |
|||
*/ |
|||
func (r *RedisStoreType) Lrange(key string, start, stop int64) (val []string, err error) { |
|||
val, err = r.RedisDb.LRange(r.Context, key, start, stop).Result() |
|||
return |
|||
} |
|||
|
|||
/** |
|||
Lrem 根据参数 COUNT 的值,移除列表中与参数 VALUE 相等的元素。 |
|||
COUNT 的值可以是以下几种: |
|||
count > 0 : 从表头开始向表尾搜索,移除与 VALUE 相等的元素,数量为 COUNT 。 |
|||
count < 0 : 从表尾开始向表头搜索,移除与 VALUE 相等的元素,数量为 COUNT 的绝对值。 |
|||
count = 0 : 移除表中所有与 VALUE 相等的值。 |
|||
@start = COUNT |
|||
@key 列表 |
|||
*/ |
|||
func (r *RedisStoreType) Lrem(key string, start int64, value ...interface{}) (val int64, err error) { |
|||
val, err = r.RedisDb.LRem(r.Context, key, start, value).Result() |
|||
return |
|||
} |
|||
|
|||
/** |
|||
Redis Lset 通过索引来设置元素的值。 |
|||
|
|||
当索引参数超出范围,或对一个空列表进行 LSET 时,返回一个错误。 |
|||
@key 列表 |
|||
@indexes 索引值 |
|||
*/ |
|||
func (r *RedisStoreType) Lset(key string, indexes int64, value ...interface{}) (val string, err error) { |
|||
val, err = r.RedisDb.LSet(r.Context, key, indexes, value).Result() |
|||
return |
|||
} |
|||
|
|||
/** |
|||
Ltrim 对一个列表进行修剪(trim),就是说,让列表只保留指定区间内的元素,不在指定区间之内的元素都将被删除。 |
|||
|
|||
下标 0 表示列表的第一个元素,以 1 表示列表的第二个元素,以此类推。 你也可以使用负数下标,以 -1 表示列表的最后一个元素, -2 表示列表的倒数第二个元素,以此类推。 |
|||
@key 列表 |
|||
@start 起始值 |
|||
@stop 结束值 |
|||
*/ |
|||
func (r *RedisStoreType) Ltrim(key string, start, stop int64) (val string, err error) { |
|||
val, err = r.RedisDb.LTrim(r.Context, key, start, stop).Result() |
|||
return |
|||
} |
|||
|
|||
/** |
|||
Rpop 命令用于移除列表的最后一个元素,返回值为移除的元素。 |
|||
@key 列表 |
|||
*/ |
|||
func (r *RedisStoreType) Rpop(key string) (val string, err error) { |
|||
val, err = r.RedisDb.RPop(r.Context, key).Result() |
|||
return |
|||
} |
|||
|
|||
/** |
|||
Rpoplpush 命令用于移除列表的最后一个元素,并将该元素添加到另一个列表并返回。 |
|||
@sourceKey 源列表 |
|||
@newKey 目标列表 |
|||
*/ |
|||
func (r *RedisStoreType) Rpoplpush(sourceKey, newKey string) (val string, err error) { |
|||
val, err = r.RedisDb.RPopLPush(r.Context, sourceKey, newKey).Result() |
|||
return |
|||
} |
|||
|
|||
/** |
|||
Rpush 命令用于将一个或多个值插入到列表的尾部(最右边)。 |
|||
如果列表不存在,一个空列表会被创建并执行 RPUSH 操作。 当列表存在但不是列表类型时,返回一个错误。 |
|||
@key 列表 |
|||
@value 要插入的字符串 |
|||
*/ |
|||
func (r *RedisStoreType) Rpush(key string, value ...interface{}) (val int64, err error) { |
|||
val, err = r.RedisDb.RPush(r.Context, key, value).Result() |
|||
return |
|||
} |
|||
|
|||
/** |
|||
Rpushx 命令用于将一个值插入到已存在的列表尾部(最右边)。如果列表不存在,操作无效。 |
|||
@key 列表 |
|||
@value 要插入的字符串 |
|||
*/ |
|||
func (r *RedisStoreType) Rpushx(key string, value ...interface{}) (val int64, err error) { |
|||
val, err = r.RedisDb.RPushX(r.Context, key, value).Result() |
|||
return |
|||
} |
|||
|
|||
/** |
|||
Blpop 命令移出并获取列表的第一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。 |
|||
@key 列表 |
|||
*/ |
|||
func (r *RedisStoreType) Blpop(key string) (val []string, err error) { |
|||
val, err = r.RedisDb.BLPop(r.Context, r.Expiration, key).Result() |
|||
return |
|||
} |
|||
|
|||
/** |
|||
Brpop 命令移出并获取列表的最后一个元素, 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。 |
|||
@key 列表 |
|||
*/ |
|||
func (r *RedisStoreType) Brpop(key string) (val []string, err error) { |
|||
val, err = r.RedisDb.BRPop(r.Context, r.Expiration, key).Result() |
|||
return |
|||
} |
|||
|
|||
/** |
|||
Brpoplpush 命令从列表中取出最后一个元素,并插入到另外一个列表的头部; 如果列表没有元素会阻塞列表直到等待超时或发现可弹出元素为止。 |
|||
@source 源列表 |
|||
@destination 目标列表 |
|||
*/ |
|||
func (r *RedisStoreType) Brpoplpush(source, destination string) (val string, err error) { |
|||
val, err = r.RedisDb.BRPopLPush(r.Context, source, destination, r.Expiration).Result() |
|||
return |
|||
} |
|||
|
|||
/* |
|||
Redis 键(key) |
|||
Redis 键命令用于管理 redis 的键。 |
|||
*/ |
|||
|
|||
/* |
|||
Redis SCAN 命令 |
|||
Redis Scan 命令用于迭代数据库中的数据库键。 |
|||
|
|||
SCAN 命令是一个基于游标的迭代器,每次被调用之后, 都会向用户返回一个新的游标, 用户在下次迭代时需要使用这个新游标作为 SCAN 命令的游标参数, 以此来延续之前的迭代过程。 |
|||
|
|||
SCAN 返回一个包含两个元素的数组, 第一个元素是用于进行下一次迭代的新游标, 而第二个元素则是一个数组, 这个数组中包含了所有被迭代的元素。如果新游标返回 0 表示迭代已结束。 |
|||
|
|||
相关命令: |
|||
|
|||
SSCAN 命令用于迭代集合键中的元素。 |
|||
HSCAN 命令用于迭代哈希键中的键值对。 |
|||
ZSCAN 命令用于迭代有序集合中的元素(包括元素成员和元素分值)。 |
|||
*/ |
|||
|
|||
func (r *RedisStoreType) Scan(cursor uint64, match string, count int64) (keys []string, cursores uint64, err error) { |
|||
keys, cursores, err = r.RedisDb.Scan(r.Context, cursor, match, count).Result() |
|||
return |
|||
} |
|||
|
|||
/* |
|||
*Keys 命令用于查找所有符合给定模式 pattern 的 key 。。 |
|||
*/ |
|||
func (r *RedisStoreType) Keys(key string) (val []string, err error) { |
|||
val, err = r.RedisDb.Keys(r.Context, key).Result() |
|||
return |
|||
} |
|||
Binary file not shown.
@ -0,0 +1,173 @@ |
|||
package identification |
|||
|
|||
import ( |
|||
"fmt" |
|||
"hr_server/grocerystore" |
|||
"hr_server/models" |
|||
"hr_server/overall" |
|||
"hr_server/overall/overallhandle" |
|||
|
|||
"github.com/gin-gonic/gin" |
|||
"github.com/mitchellh/mapstructure" |
|||
) |
|||
|
|||
//验证器
|
|||
func Validator() gin.HandlerFunc { |
|||
return func(c *gin.Context) { |
|||
userToken := c.Request.Header.Get("token") |
|||
randomNumber := c.Request.Header.Get("number") |
|||
ContentType := c.Request.Header.Get("Content-Type") |
|||
Origin := c.Request.Header.Get("Origin") |
|||
userAgent := c.Request.Header.Get("User-Agent") |
|||
|
|||
if ContentType == "" || userToken == "" || userAgent == "" || randomNumber == "" { |
|||
iii := overallhandle.MapOut() |
|||
iii["ContentType"] = ContentType |
|||
iii["userToken"] = userToken |
|||
iii["userAgent"] = userAgent |
|||
iii["Origin"] = Origin |
|||
iii["randomNumber"] = randomNumber |
|||
overallhandle.Result(2001, "请输入关键信息数据!", c) |
|||
c.Abort() |
|||
return |
|||
} |
|||
//设定redis Key名称
|
|||
redisKey := fmt.Sprintf("Authentication:ApiAuthent_%v", userToken) |
|||
redisClient := grocerystore.RunRedis(overall.CONSTANT_REDIS3) |
|||
tokenInfo, isTrue := redisClient.HashGetAll(redisKey) |
|||
if isTrue != true { |
|||
iii := overallhandle.MapOut() |
|||
iii["ContentType"] = ContentType |
|||
iii["userToken"] = userToken |
|||
iii["userAgent"] = userAgent |
|||
iii["Origin"] = Origin |
|||
iii["randomNumber"] = randomNumber |
|||
iii["redisKey"] = redisKey |
|||
iii["isTrue"] = isTrue |
|||
overallhandle.Result(2002, "您的指令不正确!或已经超时!请重新获取指令!", c) |
|||
c.Abort() |
|||
return |
|||
} |
|||
var validator ValidatorType |
|||
identityErr := mapstructure.Decode(tokenInfo, &validator) |
|||
if identityErr != nil { |
|||
overallhandle.Result(2003, "对不起!身份验证失败!", c) |
|||
c.Abort() |
|||
return |
|||
} |
|||
|
|||
//密码加密
|
|||
var passWordMd5 overallhandle.Md5Encryption |
|||
passWordMd5.Md5EncryptionInit(validator.PassWord) |
|||
passWordMd5Str := passWordMd5.Md5EncryptionAlgorithm() |
|||
|
|||
var empowerUser models.EmpowerUser |
|||
userErr := empowerUser.GetCont(map[string]interface{}{"userkey": validator.UserKey, "password": passWordMd5Str}, "verification_code") |
|||
if userErr != nil { |
|||
overallhandle.Result(2000, userErr, c) |
|||
return |
|||
} |
|||
|
|||
//头文件加密
|
|||
//ContentType
|
|||
var ContentTypeMd5 overallhandle.Md5Encryption |
|||
ContentTypeMd5.Md5EncryptionInit(ContentType) |
|||
if empowerUser.VerificationCode != "" { |
|||
ContentTypeMd5.AppKey = empowerUser.VerificationCode |
|||
} |
|||
|
|||
fmt.Printf("ContentTypeMd5Str ----->%v\n", ContentTypeMd5) |
|||
|
|||
ContentTypeMd5Str := ContentTypeMd5.Md5EncryptionAlgorithm() |
|||
//Origin
|
|||
var OriginMd5 overallhandle.Md5Encryption |
|||
OriginMd5.Md5EncryptionInit(Origin) |
|||
if empowerUser.VerificationCode != "" { |
|||
OriginMd5.AppKey = empowerUser.VerificationCode |
|||
} |
|||
originMd5Str := OriginMd5.Md5EncryptionAlgorithm() |
|||
//userAgent
|
|||
var userAgentMd5 overallhandle.Md5Encryption |
|||
userAgentMd5.Md5EncryptionInit(userAgent) |
|||
if empowerUser.VerificationCode != "" { |
|||
userAgentMd5.AppKey = empowerUser.VerificationCode |
|||
} |
|||
|
|||
userAgentMd5Str := userAgentMd5.Md5EncryptionAlgorithm() |
|||
|
|||
//随机数加密
|
|||
var randomNumberMd5 overallhandle.Md5Encryption |
|||
randomNumberMd5.Md5EncryptionInit(validator.Number) |
|||
if empowerUser.VerificationCode != "" { |
|||
randomNumberMd5.AppKey = empowerUser.VerificationCode |
|||
} |
|||
|
|||
numberMd5 := randomNumberMd5.Md5EncryptionAlgorithm() |
|||
|
|||
//用户名加密
|
|||
var userKeyMd5 overallhandle.Md5Encryption |
|||
userKeyMd5.Md5EncryptionInit(validator.UserKey) |
|||
if empowerUser.VerificationCode != "" { |
|||
userKeyMd5.AppKey = empowerUser.VerificationCode |
|||
} |
|||
|
|||
userKeyMd5Str := userKeyMd5.Md5EncryptionAlgorithm() |
|||
|
|||
clearCodeToken := fmt.Sprintf("%v-%v-%v-%v-%v-%v", ContentTypeMd5Str, originMd5Str, userAgentMd5Str, numberMd5, userKeyMd5Str, passWordMd5Str) |
|||
|
|||
fmt.Printf("redisKey---->ContentTypeMd5Str:%v-originMd5Str:%v-userAgentMd5Str:%v-numberMd5:%v-userKeyMd5Str:%v-passwordMd5Str:%v\n", ContentTypeMd5Str, originMd5Str, userAgentMd5Str, numberMd5, userKeyMd5Str, passWordMd5Str) |
|||
|
|||
//token 加密
|
|||
var tokenMd5 overallhandle.Md5Encryption |
|||
tokenMd5.Md5EncryptionInit(clearCodeToken) |
|||
if empowerUser.VerificationCode != "" { |
|||
tokenMd5.AppKey = empowerUser.VerificationCode |
|||
} |
|||
fmt.Printf("tokenMd5Appk ----->%v\n", tokenMd5) |
|||
tokenMd5Str := tokenMd5.Md5EncryptionAlgorithm() |
|||
|
|||
clearTokenStr := fmt.Sprintf("%v-%v", tokenMd5Str, numberMd5) |
|||
var clearTokenMd5 overallhandle.Md5Encryption |
|||
clearTokenMd5.Md5EncryptionInit(clearTokenStr) |
|||
if empowerUser.VerificationCode != "" { |
|||
clearTokenMd5.AppKey = empowerUser.VerificationCode |
|||
} |
|||
clearTokenMd5Str := clearTokenMd5.Md5EncryptionAlgorithm() |
|||
|
|||
//提交Token转化
|
|||
submitTokenStr := fmt.Sprintf("%v-%v", userToken, randomNumber) |
|||
|
|||
var submitTokenMd5 overallhandle.Md5Encryption |
|||
submitTokenMd5.Md5EncryptionInit(submitTokenStr) |
|||
if empowerUser.VerificationCode != "" { |
|||
submitTokenMd5.AppKey = empowerUser.VerificationCode |
|||
} |
|||
submitTokenMd5Str := submitTokenMd5.Md5EncryptionAlgorithm() |
|||
|
|||
if submitTokenMd5Str != clearTokenMd5Str { |
|||
sss := overallhandle.MapOut() |
|||
sss["numberMd5"] = numberMd5 |
|||
sss["submitTokenMd5Str"] = submitTokenMd5Str |
|||
sss["clearTokenMd5Str"] = clearTokenMd5Str |
|||
sss["tokenMd5Str"] = tokenMd5Str |
|||
sss["clearCodeToken"] = clearCodeToken |
|||
sss["submitTokenStr"] = submitTokenStr |
|||
sss["clearTokenStr"] = clearTokenStr |
|||
sss["userToken"] = userToken |
|||
|
|||
// tokenMd5Str, numberMd5
|
|||
// overallhandle.Result(2004, "对不起!非法令牌!不可访问系统", c)
|
|||
overallhandle.Result(2004, sss, c, "对不起!非法令牌!不可访问系统") |
|||
c.Abort() |
|||
return |
|||
} |
|||
c.Next() |
|||
} |
|||
} |
|||
|
|||
//拦截器
|
|||
func Interceptor() gin.HandlerFunc { |
|||
return func(c *gin.Context) { |
|||
|
|||
} |
|||
} |
|||
@ -0,0 +1,8 @@ |
|||
package identification |
|||
|
|||
//验证器结构
|
|||
type ValidatorType struct { |
|||
Number string `json:"number"` //随机数
|
|||
UserKey string `json:"userkey"` //用户名
|
|||
PassWord string `json:"password"` //密码
|
|||
} |
|||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@ -0,0 +1,38 @@ |
|||
package snowflake |
|||
|
|||
import ( |
|||
"errors" |
|||
"time" |
|||
) |
|||
|
|||
//雪花算法
|
|||
func NewWorker(workerId int64) (*Worker, error) { |
|||
if workerId < 0 || workerId > workerMax { |
|||
return nil, errors.New("工作机器的ID超出范围!") |
|||
} |
|||
// 生成一个新节点
|
|||
return &Worker{ |
|||
timestamp: 0, |
|||
workerId: workerId, |
|||
number: 0, |
|||
}, nil |
|||
} |
|||
|
|||
func (w *Worker) GetId() int64 { |
|||
w.mu.Lock() |
|||
defer w.mu.Unlock() |
|||
now := time.Now().UnixNano() / 1e6 |
|||
if w.timestamp == now { |
|||
w.number++ |
|||
if w.number > numberMax { |
|||
for now <= w.timestamp { |
|||
now = time.Now().UnixNano() / 1e6 |
|||
} |
|||
} |
|||
} else { |
|||
w.number = 0 |
|||
w.timestamp = now |
|||
} |
|||
ID := int64((now-startTime)<<timeShift | (w.workerId << workerShift) | (w.number)) |
|||
return ID |
|||
} |
|||
@ -0,0 +1,21 @@ |
|||
package snowflake |
|||
|
|||
import "sync" |
|||
|
|||
//雪花算法
|
|||
const ( |
|||
workerBits uint8 = 10 |
|||
numberBits uint8 = 12 |
|||
workerMax int64 = -1 ^ (-1 << workerBits) |
|||
numberMax int64 = -1 ^ (-1 << numberBits) |
|||
timeShift uint8 = workerBits + numberBits |
|||
workerShift uint8 = numberBits |
|||
startTime int64 = 1655827200000 // 如果在程序跑了一段时间修改了epoch这个值 可能会导致生成相同的ID
|
|||
) |
|||
|
|||
type Worker struct { |
|||
mu sync.Mutex |
|||
timestamp int64 |
|||
workerId int64 |
|||
number int64 |
|||
} |
|||
@ -0,0 +1,42 @@ |
|||
package models |
|||
|
|||
import ( |
|||
"hr_server/overall" |
|||
"strings" |
|||
) |
|||
|
|||
//双职工
|
|||
type DoubleWorker struct { |
|||
Id int64 `json:"id" gorm:"primaryKey;column:id;type:bigint(20) unsigned;not null;comment:ID"` |
|||
Number string `json:"number" gorm:"column:number;type:varchar(30) unsigned;not null;comment:员工工号;index"` |
|||
Name string `json:"name" gorm:"column:name;type:varchar(255) unsigned;default:'';not null;comment:姓名"` |
|||
Company string `json:"company" gorm:"column:company;type:varchar(255) unsigned;default:'';not null;comment:所在公司"` |
|||
Department string `json:"department" gorm:"column:department;type:varchar(255) unsigned;default:'';not null;comment:所在部门"` |
|||
Position string `json:"position" gorm:"column:position;type:varchar(255) unsigned;default:'';not null;comment:所在岗位"` |
|||
Tel string `json:"tel" gorm:"column:tel;type:varchar(255) unsigned;default:'';not null;comment:联系方式"` |
|||
Time int64 `json:"time" gorm:"column:time;type:bigint(20) unsigned;default:0;not null;comment:创建时间"` |
|||
State int `json:"state" gorm:"column:state;type:tinyint(1) unsigned;default:1;not null;comment:状态(1:启用;2:禁用;3:删除)` |
|||
Key int64 `json:"key" gorm:"column:key;type:bigint(50) unsigned;default:0;not null;comment:key"` |
|||
} |
|||
|
|||
func (DoubleWorker *DoubleWorker) TableName() string { |
|||
return "double_worker" |
|||
} |
|||
|
|||
//编辑双职工内容
|
|||
func (DoubleWorker *DoubleWorker) EiteCont(whereMap interface{}, saveData interface{}) (err error) { |
|||
err = overall.CONSTANT_DB_HR.Model(&DoubleWorker).Where(whereMap).Updates(saveData).Error |
|||
return |
|||
} |
|||
|
|||
//获取双职工内容
|
|||
func (cont *DoubleWorker) GetCont(whereMap interface{}, field ...string) (err error) { |
|||
gormDb := overall.CONSTANT_DB_HR.Model(&cont) |
|||
if len(field) > 0 { |
|||
fieldStr := strings.Join(field, ",") |
|||
gormDb = gormDb.Select(fieldStr) |
|||
} |
|||
gormDb = gormDb.Where(whereMap) |
|||
err = gormDb.First(&cont).Error |
|||
return |
|||
} |
|||
@ -0,0 +1,37 @@ |
|||
package models |
|||
|
|||
import ( |
|||
"hr_server/overall" |
|||
"strings" |
|||
) |
|||
|
|||
//职务信息及类别、等级视图
|
|||
type DutiesClassLeve struct { |
|||
Id int64 `json:"id" gorm:"primaryKey;column:d_id;type:bigint(20) unsigned;not null;comment:Id;index"` |
|||
Name string `json:"name" gorm:"column:d_name;type:varchar(255) unsigned;default:'';not null;comment:职务名称"` |
|||
Weight int64 `json:"weight" gorm:"column:d_weight;type:bigint(20) unsigned;default:1;not null;comment:权重"` |
|||
Number string `json:"number" gorm:"column:d_num;type:varchar(50) unsigned;default:'';not null;comment:编码"` |
|||
State int `json:"state" gorm:"column:d_state;type:int(1) unsigned;default:1;not null;comment:状态(1:启用;2:禁用;3:删除)"` |
|||
KingdeeId string `json:"kingdeeid" gorm:"column:d_king;type:varchar(255) unsigned;default:'';comment:金蝶对照ID"` |
|||
ClassId int64 `json:"classid" gorm:"column:c_id;type:bigint(20) unsigned;not null;comment:Id;index"` //职务分类Id
|
|||
ClassName string `json:"classname" gorm:"column:c_name;type:varchar(255) unsigned;default:'';not null;comment:职务分类名称"` |
|||
// LeveId int64 `json:"leveid" gorm:"column:l_id;type:bigint(20) unsigned;not null;comment:Id;index"` //职务等级Id
|
|||
// LeveNumber string `json:"levenumber" gorm:"column:l_num;type:varchar(50) unsigned;default:'';not null;comment:等级编号"`
|
|||
// LeveName string `json:"levename" gorm:"column:l_name;type:varchar(255) unsigned;default:'';not null;comment:等级名称"`
|
|||
} |
|||
|
|||
func (DutiesClassLeve *DutiesClassLeve) TableName() string { |
|||
return "duties_class_leve" |
|||
} |
|||
|
|||
//获取详细内容
|
|||
func (cont *DutiesClassLeve) GetCont(whereMap interface{}, field ...string) (err error) { |
|||
gormDb := overall.CONSTANT_DB_HR.Model(&cont) |
|||
if len(field) > 0 { |
|||
fieldStr := strings.Join(field, ",") |
|||
gormDb = gormDb.Select(fieldStr) |
|||
} |
|||
gormDb = gormDb.Where(whereMap) |
|||
err = gormDb.First(&cont).Error |
|||
return |
|||
} |
|||
@ -0,0 +1,46 @@ |
|||
package models |
|||
|
|||
import ( |
|||
"hr_server/overall" |
|||
"strings" |
|||
) |
|||
|
|||
//紧急联系人
|
|||
type EmergencyContact struct { |
|||
Id int64 `json:"id" gorm:"primaryKey;column:id;type:bigint(20) unsigned;not null;comment:ID"` |
|||
Number string `json:"number" gorm:"primaryKey;column:number;type:varchar(30) unsigned;not null;comment:员工工号;index"` |
|||
Name string `json:"name" gorm:"column:name;type:varchar(255) unsigned;default:'';not null;comment:紧急联系人姓名"` |
|||
Relationship string `json:"relationship" gorm:"column:relationship;type:varchar(255) unsigned;default:'';not null;comment:与紧急联系人关系"` |
|||
Tel string `json:"tel" gorm:"column:tel;type:varchar(255) unsigned;default:'';not null;comment:紧急联系人电话"` |
|||
Time int64 `json:"time" gorm:"column:time;type:bigint(20) unsigned;default:0;not null;comment:创建时间"` |
|||
State int `json:"state" gorm:"column:state;type:tinyint(1) unsigned;default:1;not null;comment:状态(1:启用;2:禁用;3:删除)"` |
|||
Key int64 `json:"key" gorm:"column:key;type:bigint(50) unsigned;default:0;not null;comment:key"` |
|||
} |
|||
|
|||
func (EmergencyContact *EmergencyContact) TableName() string { |
|||
return "emergency_contact" |
|||
} |
|||
|
|||
//编辑职务分类内容
|
|||
func (EmergencyContact *EmergencyContact) EiteCont(whereMap interface{}, saveData interface{}) (err error) { |
|||
err = overall.CONSTANT_DB_HR.Model(&EmergencyContact).Where(whereMap).Updates(saveData).Error |
|||
return |
|||
} |
|||
|
|||
//获取行政组织内容
|
|||
func (cont *EmergencyContact) GetCont(whereMap interface{}, field ...string) (err error) { |
|||
gormDb := overall.CONSTANT_DB_HR.Model(&cont) |
|||
if len(field) > 0 { |
|||
fieldStr := strings.Join(field, ",") |
|||
gormDb = gormDb.Select(fieldStr) |
|||
} |
|||
gormDb = gormDb.Where(whereMap) |
|||
err = gormDb.First(&cont).Error |
|||
return |
|||
} |
|||
|
|||
//根据条件获取总数
|
|||
func (cont *EmergencyContact) CountCont(whereMap interface{}) (countId int64) { |
|||
overall.CONSTANT_DB_HR.Model(&cont).Where(whereMap).Count(&countId) |
|||
return |
|||
} |
|||
@ -0,0 +1,46 @@ |
|||
package models |
|||
|
|||
import ( |
|||
"hr_server/overall" |
|||
"strings" |
|||
) |
|||
|
|||
//授权账户
|
|||
type EmpowerUser struct { |
|||
Id int64 `json:"id" gorm:"primaryKey;column:id;type:bigint(20) unsigned;not null;comment:Id;index"` |
|||
UserKey string `json:"userkey" gorm:"column:userkey;type:varchar(255) unsigned;not null;comment:账户"` |
|||
Password string `json:"password" gorm:"column:password;type:varchar(255) unsigned;default:'';not null;comment:密码"` |
|||
Name string `json:"name" gorm:"column:name;type:varchar(255) unsigned;default:'';not null;comment:使用人(组织)名称"` |
|||
State int `json:"state" gorm:"column:state;type:tinyint(1) unsigned;default:1;not null;comment:状态(1:启用;2:禁用;3:删除)` |
|||
Time int64 `json:"addtime" gorm:"column:addtime;type:bigint(20) unsigned;default:0;not null;comment:写入时间"` |
|||
EiteTime int64 `json:"eitetime" gorm:"column:eitetime;type:bigint(20) unsigned;default:0;not null;comment:编辑时间"` |
|||
VerificationCode string `json:"verificationcode" gorm:"column:verification_code;type:mediumtext unsigned;comment:身份识别码"` |
|||
} |
|||
|
|||
func (Position *EmpowerUser) TableName() string { |
|||
return "empoweruser" |
|||
} |
|||
|
|||
//编辑职务分类内容
|
|||
func (cont *EmpowerUser) EiteCont(whereMap interface{}, saveData map[string]interface{}) (err error) { |
|||
err = overall.CONSTANT_DB_HR.Model(&cont).Where(whereMap).Updates(saveData).Error |
|||
return |
|||
} |
|||
|
|||
//获取行政组织内容
|
|||
func (cont *EmpowerUser) GetCont(whereMap interface{}, field ...string) (err error) { |
|||
gormDb := overall.CONSTANT_DB_HR.Model(&cont) |
|||
if len(field) > 0 { |
|||
fieldStr := strings.Join(field, ",") |
|||
gormDb = gormDb.Select(fieldStr) |
|||
} |
|||
gormDb = gormDb.Where(whereMap) |
|||
err = gormDb.First(&cont).Error |
|||
return |
|||
} |
|||
|
|||
//根据条件获取总数
|
|||
func (cont *EmpowerUser) CountCont(whereMap interface{}) (countId int64) { |
|||
overall.CONSTANT_DB_HR.Model(&cont).Where(whereMap).Count(&countId) |
|||
return |
|||
} |
|||
@ -0,0 +1,46 @@ |
|||
package models |
|||
|
|||
import ( |
|||
"hr_server/overall" |
|||
"strings" |
|||
) |
|||
|
|||
//员工家属
|
|||
type FamilyMembers struct { |
|||
Id int64 `json:"id" gorm:"primaryKey;column:id;type:bigint(20) unsigned;not null;comment:ID"` |
|||
Number string `json:"number" gorm:"column:number;type:varchar(30) unsigned;not null;comment:员工工号"` |
|||
Relationship string `json:"relationship" gorm:"column:relation;type:varchar(255) unsigned;default:'';not null;comment:亲属关系"` |
|||
Name string `json:"name" gorm:"column:name;type:varchar(255) unsigned;default:'';not null;comment:姓名"` |
|||
Company string `json:"company" gorm:"column:company;type:varchar(255) unsigned;default:'';not null;comment:所在公司"` |
|||
Deparment string `json:"deparment" gorm:"column:deparment;type:varchar(255) unsigned;default:'';not null;comment:所在部门"` |
|||
Postnme string `json:"postnme" gorm:"column:postnme;type:varchar(255) unsigned;default:'';not null;comment:所在岗位"` |
|||
Tel string `json:"tel" gorm:"column:tel;type:varchar(255) unsigned;default:'';not null;comment:紧急联系人电话"` |
|||
PoliticalOutlook int `json:"politicaloutlook" gorm:"column:political_outlook;type:int(3) unsigned;default:1;not null;comment:政治面貌(1:群众;2:无党派;3:台盟会员;4:九三社员;5:致公党员;6:农工党员;7:民进会员;8:民建会员;9:民盟盟员;10:民革会员,11:共青团员;12:预备党员;13:中共党员)"` |
|||
Time int64 `json:"time" gorm:"column:time;type:bigint(20) unsigned;default:0;not null;comment:创建时间"` |
|||
Key int64 `json:"key" gorm:"column:key;type:bigint(50) unsigned;default:0;not null;comment:key"` |
|||
State int `json:"state" gorm:"column:state;type:tinyint(1) unsigned;default:1;not null;comment:状态(1:启用;2:禁用;3:删除)"` |
|||
|
|||
PoliticalOutlookCn string `json:"politicaloutlookcn" gorm:"column:political_outlook_cn;type:varchar(30) unsigned;not null;comment:政治面貌汉字说明"` |
|||
} |
|||
|
|||
func (FamilyMembers *FamilyMembers) TableName() string { |
|||
return "family_members" |
|||
} |
|||
|
|||
//编辑员工家属内容
|
|||
func (FamilyMembers *FamilyMembers) EiteCont(whereMap interface{}, saveData interface{}) (err error) { |
|||
err = overall.CONSTANT_DB_HR.Model(&FamilyMembers).Where(whereMap).Updates(saveData).Error |
|||
return |
|||
} |
|||
|
|||
//获取员工家属内容
|
|||
func (cont *FamilyMembers) GetCont(whereMap interface{}, field ...string) (err error) { |
|||
gormDb := overall.CONSTANT_DB_HR.Model(&cont) |
|||
if len(field) > 0 { |
|||
fieldStr := strings.Join(field, ",") |
|||
gormDb = gormDb.Select(fieldStr) |
|||
} |
|||
gormDb = gormDb.Where(whereMap) |
|||
err = gormDb.First(&cont).Error |
|||
return |
|||
} |
|||
@ -0,0 +1,48 @@ |
|||
package models |
|||
|
|||
import ( |
|||
"hr_server/overall" |
|||
"strings" |
|||
) |
|||
|
|||
//集团内部工作经历
|
|||
type InsideWorkHistory struct { |
|||
Id int64 `json:"id" gorm:"primaryKey;column:id;type:bigint(20) unsigned;not null;comment:Id;index"` |
|||
Key int64 `json:"key" gorm:"column:key;type:bigint(20) unsigned;default:0;not null;comment:员工识别符"` |
|||
Group int64 `json:"group" gorm:"column:group;type:bigint(20) unsigned;default:0;not null;comment:集团"` |
|||
Company int64 `json:"company" gorm:"column:company;type:bigint(20) unsigned;default:0;not null;comment:公司"` |
|||
Department int64 `json:"department" gorm:"column:department;type:bigint(20) unsigned;default:0;not null;comment:部室"` |
|||
WorkShop int64 `json:"workshop" gorm:"column:workshop;type:bigint(20) unsigned;default:0;not null;comment:二级部门或车间"` |
|||
WorkshopSection int64 `json:"workshopsection" gorm:"column:workshop_section;type:bigint(20) unsigned;default:0;not null;comment:工段"` |
|||
Position int64 `json:"position" gorm:"column:position;type:bigint(20) unsigned;default:0;not null;comment:职位"` |
|||
GradePositions int64 `json:"gradepositions" gorm:"column:grade_positions;type:bigint(20) unsigned;default:0;not null;comment:职等"` |
|||
StartTime int64 `json:"starttime" gorm:"column:start_time;type:bigint(20) unsigned;default:0;not null;comment:开始日期"` |
|||
EndTime int64 `json:"endtime" gorm:"column:end_time;type:bigint(20) unsigned;default:0;not null;comment:结束日期"` |
|||
Team int64 `json:"team" gorm:"column:team;type:int(1) unsigned;default:1;not null;comment:班组(1:长白;2:甲;3:乙;4:丙;5:丁)"` |
|||
ChangeType int `json:"changetype" gorm:"column:change_type;type:int(1) unsigned;default:1;not null;comment:变动类型(1:预入职;2:雇佣入职;3:转正;4:晋升;5:降级;6:职等调整;7:调动调入;8:跨公司调动调入;9:借调;10:平调;11:兼职;12:预离职;13:离职;14:退休;15:返聘;16:员工初始化;)"` |
|||
Time int64 `json:"time" gorm:"column:time;type:bigint(20) unsigned;default:0;not null;comment:创建时间"` |
|||
State int `json:"state" gorm:"column:state;type:int(1) unsigned;default:1;not null;comment:状态(1:启用;2:禁用;3:删除)"` |
|||
AssignType int `json:"assigntype" gorm:"column:assign_type;type:int(1) unsigned;default:1;not null;comment:1、主职;2:兼职"` |
|||
} |
|||
|
|||
func (InsideWorkHistory *InsideWorkHistory) TableName() string { |
|||
return "inside_work_history" |
|||
} |
|||
|
|||
//编辑集团内部工作经历内容
|
|||
func (cont *InsideWorkHistory) EditCont(whereMap map[string]interface{}, saveData map[string]interface{}) (err error) { |
|||
err = overall.CONSTANT_DB_HR.Model(&cont).Where(whereMap).Updates(saveData).Error |
|||
return |
|||
} |
|||
|
|||
//获取详细内容
|
|||
func (cont *InsideWorkHistory) GetCont(whereMap interface{}, field ...string) (err error) { |
|||
gormDb := overall.CONSTANT_DB_HR.Model(&cont) |
|||
if len(field) > 0 { |
|||
fieldStr := strings.Join(field, ",") |
|||
gormDb = gormDb.Select(fieldStr) |
|||
} |
|||
gormDb = gormDb.Where(whereMap) |
|||
err = gormDb.First(&cont).Error |
|||
return |
|||
} |
|||
@ -0,0 +1,39 @@ |
|||
package models |
|||
|
|||
import ( |
|||
"hr_server/overall" |
|||
"strings" |
|||
) |
|||
|
|||
type InsideWorkView struct { |
|||
InsideWorkHistory |
|||
GroupNumber string `json:"groupnumber" gorm:"column:g_number;type:varchar(50) unsigned;default:'';not null;comment:行政编码"` |
|||
GroupName string `json:"groupname" gorm:"column:g_name;type:varchar(255) unsigned;default:'';not null;comment:组织名称"` |
|||
CompanyNumber string `json:"companynumber" gorm:"column:c_number;type:varchar(50) unsigned;default:'';not null;comment:行政编码"` |
|||
CompanyName string `json:"companyname" gorm:"column:c_name;type:varchar(255) unsigned;default:'';not null;comment:组织名称"` |
|||
DepartmentNumber string `json:"departmentnumber" gorm:"column:d_number;type:varchar(50) unsigned;default:'';not null;comment:行政编码"` |
|||
DepartmentName string `json:"departmentname" gorm:"column:d_name;type:varchar(255) unsigned;default:'';not null;comment:组织名称"` |
|||
WorkShopNumber string `json:"workshopnumber" gorm:"column:ws_number;type:varchar(50) unsigned;default:'';not null;comment:行政编码"` |
|||
WorkShopName string `json:"workshopname" gorm:"column:ws_name;type:varchar(255) unsigned;default:'';not null;comment:组织名称"` |
|||
SectionNumber string `json:"sectionnumber" gorm:"column:w_number;type:varchar(50) unsigned;default:'';not null;comment:行政编码"` |
|||
SectionName string `json:"sectionnasectionme" gorm:"column:w_name;type:varchar(255) unsigned;default:'';not null;comment:组织名称"` |
|||
PostJobNumber string `json:"postjobnumber" gorm:"column:p_number;type:varchar(50) unsigned;default:'';not null;comment:职位编码"` |
|||
PostJobName string `json:"postjobname" gorm:"column:p_name;type:varchar(255) unsigned;default:'';not null;comment:职位名称"` |
|||
TeamName string `json:"teamname" gorm:"column:r_name;type:varchar(255) unsigned;default:'';not null;comment:班组名称"` |
|||
} |
|||
|
|||
func (InsideWorkView *InsideWorkView) TableName() string { |
|||
return "inside_work_view" |
|||
} |
|||
|
|||
//获取详细内容
|
|||
func (cont *InsideWorkView) GetCont(whereMap interface{}, field ...string) (err error) { |
|||
gormDb := overall.CONSTANT_DB_HR.Model(&cont) |
|||
if len(field) > 0 { |
|||
fieldStr := strings.Join(field, ",") |
|||
gormDb = gormDb.Select(fieldStr) |
|||
} |
|||
gormDb = gormDb.Where(whereMap) |
|||
err = gormDb.First(&cont).Error |
|||
return |
|||
} |
|||
Some files were not shown because too many files changed in this diff
Loading…
Reference in new issue