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

1887 lines
59 KiB

package personnelapi
import (
"encoding/json"
"fmt"
"hr_server/grocerystore"
"hr_server/models"
"hr_server/overall"
"hr_server/overall/overallhandle"
"strconv"
"strings"
"time"
"github.com/360EntSecGroup-Skylar/excelize"
)
/*
*
@ 作者: 秦东
@ 时间: 2024-08-26 14:51:29
@ 功能: 解析考核年份及奖惩年份
@ 参数
#xlsx 电子表单数据
#redisKey 保存Redis数据得键值
#orgId 当前的行政组织
@ 返回值
#
@ 方法原型
#
*/
func (g *GroupParsingData) AnalysAssessYears(xlsx *excelize.File, redisKey, orgId string) (totalNum int64, meritsYearIng, rewPunYearsIng map[int]int) {
rows := xlsx.GetRows(xlsx.GetSheetName(xlsx.GetActiveSheetIndex()))
isDateYear := time.Now().Year()
switch orgId {
case "296":
// totalNums, meritsYearIngs, isDateYears := RongXinKeYears(rows, redisKey, isDateYear)
totalNums, meritsYearIngs, isDateYears := RongXinKeYearsNew(rows, redisKey, isDateYear)
totalNum = totalNums
meritsYearIng = meritsYearIngs
rewPunYearsIng = isDateYears
default:
totalNums, meritsYearIngs, isDateYears := GaoKeYears(rows, redisKey, isDateYear)
totalNum = totalNums
meritsYearIng = meritsYearIngs
rewPunYearsIng = isDateYears
}
return
}
/*
*
@ 作者: 秦东
@ 时间: 2024-08-26 15:06:53
@ 功能: 荣信绩效及考核
@ 参数
#rows 表格信息
#redisKey Redis 键
#isDateYear 当前年
@ 返回值
#totalNum 总记录数
#meritsYearIng 考核年限
#rewPunYearsIng 奖惩年限
@ 方法原型
#
*/
func RongXinKeYears(rows [][]string, redisKey string, isDateYear int) (totalNum int64, meritsYearIng, rewPunYearsIng map[int]int) {
// fmt.Printf("rows[0][292]:%v\n", rows[0][305])
// fmt.Printf("rows[1][292]:%v\n", rows[1][305])
// fmt.Printf("rows[2][292]:%v\n", rows[2][305])
// fmt.Printf("rows[3][292]:%v\n", rows[3][305])
// fmt.Printf("rows[4][292]:%v\n", rows[4][305])
// fmt.Printf("rows[5][292]:%v\n", rows[5][305])
//获取绩效年度
meritsYear := make(map[int]int)
if rows[1][292] != "" {
yearAry := strings.Split(rows[1][292], "年")
if len(yearAry) > 0 {
yearVal, _ := strconv.Atoi(yearAry[0])
meritsYear[0] = yearVal
}
} else {
meritsYear[0] = isDateYear - 3
}
if rows[1][294] != "" {
yearAry := strings.Split(rows[1][294], "年")
if len(yearAry) > 0 {
yearVal, _ := strconv.Atoi(yearAry[0])
meritsYear[1] = yearVal
}
} else {
meritsYear[1] = isDateYear - 2
}
meritsYearIng = meritsYear
//获取奖惩年度
rewPunYears := make(map[int]int)
// fmt.Printf("rows[2][305]---1--->:%v\n", rows[2][305])
if rows[2][305] != "" {
jcYearAry := strings.Split(rows[2][305], "年")
// jcYearAry := strings.Split(rows[2][305], "奖惩")
// fmt.Printf("rows[2][305]---2--->:%v--->%v\n", len(jcYearAry), jcYearAry)
if len(jcYearAry) > 0 {
// fmt.Printf("rows[2][305]---3--->:%v\n", jcYearAry[0])
jcYearVal, _ := strconv.Atoi(jcYearAry[0])
// fmt.Printf("rows[2][305]---4--->:%v\n", jcYearVal)
rewPunYears[0] = jcYearVal
}
} else {
rewPunYears[0] = isDateYear - 4
}
if rows[2][311] != "" {
jcYearAry := strings.Split(rows[2][311], "奖惩")
if len(jcYearAry) > 0 {
jcYearVal, _ := strconv.Atoi(jcYearAry[0])
rewPunYears[1] = jcYearVal
}
} else {
rewPunYears[1] = isDateYear - 3
}
if rows[2][317] != "" {
jcYearAry := strings.Split(rows[2][317], "奖惩")
if len(jcYearAry) > 0 {
jcYearVal, _ := strconv.Atoi(jcYearAry[0])
rewPunYears[2] = jcYearVal
}
} else {
rewPunYears[2] = isDateYear - 2
}
if rows[2][323] != "" {
jcYearAry := strings.Split(rows[2][323], "奖惩")
if len(jcYearAry) > 0 {
jcYearVal, _ := strconv.Atoi(jcYearAry[0])
rewPunYears[3] = jcYearVal
}
} else {
rewPunYears[3] = isDateYear - 1
}
rewPunYearsIng = rewPunYears
redisClient := grocerystore.RunRedis(overall.CONSTANT_REDIS4)
redisClient.SetRedisTime(86400)
totalNum = 0
for i, row := range rows {
if i < 4 {
continue
}
// jsonStr, _ := json.Marshal(row)
// fmt.Printf("%v出生日期:%v\n", row[1], string(jsonStr))
if row[1] != "" {
jsonStr, _ := json.Marshal(row)
// fmt.Printf("%v出生日期:%v\n", row[1], string(jsonStr))
redisClient.Lpush(redisKey, jsonStr)
totalNum++
}
}
return
}
/*
*
@ 作者: 秦东
@ 时间: 2024-09-20 08:16:16
@ 功能:
@ 参数
#rows 表格信息
#redisKey Redis 键
#isDateYear 当前年
@ 返回值
#totalNum 总记录数
#meritsYearIng 考核年限
#rewPunYearsIng 奖惩年限
@ 方法原型
#
*/
func RongXinKeYearsNew(rows [][]string, redisKey string, isDateYear int) (totalNum int64, meritsYearIng, rewPunYearsIng map[int]int) {
//获取绩效年度
meritsYear := make(map[int]int)
if rows[1][306] != "" {
yearAry := strings.Split(rows[1][306], "年")
if len(yearAry) > 0 {
yearVal, _ := strconv.Atoi(yearAry[0])
meritsYear[0] = yearVal
}
} else {
meritsYear[0] = isDateYear - 3
}
if rows[1][308] != "" {
yearAry := strings.Split(rows[1][308], "年")
if len(yearAry) > 0 {
yearVal, _ := strconv.Atoi(yearAry[0])
meritsYear[1] = yearVal
}
} else {
meritsYear[1] = isDateYear - 2
}
if rows[1][310] != "" {
yearAry := strings.Split(rows[1][310], "年")
if len(yearAry) > 0 {
yearVal, _ := strconv.Atoi(yearAry[0])
meritsYear[2] = yearVal
}
} else {
meritsYear[2] = isDateYear - 1
}
meritsYearIng = meritsYear
//获取奖惩年度
rewPunYears := make(map[int]int)
if rows[2][320] != "" {
jcYearAry := strings.Split(rows[2][320], "年")
if len(jcYearAry) > 0 {
jcYearVal, _ := strconv.Atoi(jcYearAry[0])
rewPunYears[0] = jcYearVal
}
} else {
rewPunYears[0] = isDateYear - 4
}
if rows[2][326] != "" {
jcYearAry := strings.Split(rows[2][326], "奖惩")
if len(jcYearAry) > 0 {
jcYearVal, _ := strconv.Atoi(jcYearAry[0])
rewPunYears[1] = jcYearVal
}
} else {
rewPunYears[1] = isDateYear - 3
}
if rows[2][332] != "" {
jcYearAry := strings.Split(rows[2][332], "奖惩")
if len(jcYearAry) > 0 {
jcYearVal, _ := strconv.Atoi(jcYearAry[0])
rewPunYears[2] = jcYearVal
}
} else {
rewPunYears[2] = isDateYear - 2
}
// if rows[2][325] != "" {
// jcYearAry := strings.Split(rows[2][325], "奖惩")
// if len(jcYearAry) > 0 {
// jcYearVal, _ := strconv.Atoi(jcYearAry[0])
// rewPunYears[3] = jcYearVal
// }
// } else {
// rewPunYears[3] = isDateYear - 1
// }
rewPunYearsIng = rewPunYears
redisClient := grocerystore.RunRedis(overall.CONSTANT_REDIS4)
redisClient.SetRedisTime(86400)
totalNum = 0
for i, row := range rows {
if i < 4 {
continue
}
if row[1] != "" {
jsonStr, _ := json.Marshal(row)
// fmt.Printf("\n\n上传的数据--------->%v\n\n", string(jsonStr)) //专业"`
redisClient.Lpush(redisKey, jsonStr)
totalNum++
}
}
return
}
// 解析Excel日期格式
func ParseExcelDate(value string) (time.Time, error) {
// 先尝试解析Excel存储的浮点数日期格式
if num, err := strconv.ParseFloat(value, 64); err == nil {
return ExcelFloatToTime(num), nil
}
// 再尝试解析常见的日期字符串格式
formats := []string{
"2006/1/2", // 匹配 2004/9/1 格式
"2006-01-02", // 标准ISO格式
"01/02/2006", // 美式日期格式
"02/01/2006", // 欧式日期格式
}
for _, format := range formats {
if t, err := time.Parse(format, value); err == nil {
return t, nil
}
}
// 处理包含时间的格式
if strings.Contains(value, " ") {
formatsWithTime := []string{
"2006/1/2 15:04:05",
"2006-01-02 15:04:05",
"01/02/2006 15:04:05",
}
for _, format := range formatsWithTime {
if t, err := time.Parse(format, value); err == nil {
return t, nil
}
}
}
return time.Time{}, fmt.Errorf("无法解析日期格式: %s", value)
}
// 将Excel浮点数日期转换为time.Time
func ExcelFloatToTime(excelTime float64) time.Time {
// Excel的日期起始于1900-01-00 (注意: 这是一个虚构的日期)
excelEpoch := time.Date(1899, 12, 30, 0, 0, 0, 0, time.UTC)
days := int(excelTime)
nanoseconds := int64((excelTime - float64(days)) * 24 * 60 * 60 * 1e9)
return excelEpoch.AddDate(0, 0, days).Add(time.Duration(nanoseconds))
}
/*
*
@ 作者: 秦东
@ 时间: 2024-08-26 14:57:03
@ 功能: 高科绩效及考核
@ 参数
#rows 表格信息
#redisKey Redis 键
#isDateYear 当前年
@ 返回值
#totalNum 总记录数
#meritsYearIng 考核年限
#rewPunYearsIng 奖惩年限
@ 方法原型
#
*/
func GaoKeYears(rows [][]string, redisKey string, isDateYear int) (totalNum int64, meritsYearIng, rewPunYearsIng map[int]int) {
//获取绩效年度
meritsYear := make(map[int]int)
if rows[1][288] != "" {
yearAry := strings.Split(rows[1][288], "年")
if len(yearAry) > 0 {
yearVal, _ := strconv.Atoi(yearAry[0])
meritsYear[0] = yearVal
}
} else {
meritsYear[0] = isDateYear - 3
}
if rows[1][289] != "" {
yearAry := strings.Split(rows[1][289], "年")
if len(yearAry) > 0 {
yearVal, _ := strconv.Atoi(yearAry[0])
meritsYear[1] = yearVal
}
} else {
meritsYear[1] = isDateYear - 2
}
if rows[1][290] != "" {
yearAry := strings.Split(rows[1][290], "年")
if len(yearAry) > 0 {
yearVal, _ := strconv.Atoi(yearAry[0])
meritsYear[2] = yearVal
}
} else {
meritsYear[2] = isDateYear - 1
}
meritsYearIng = meritsYear
//获取奖惩年度
rewPunYears := make(map[int]int)
if rows[2][298] != "" {
jcYearAry := strings.Split(rows[2][298], "奖惩")
if len(jcYearAry) > 0 {
jcYearVal, _ := strconv.Atoi(jcYearAry[0])
rewPunYears[0] = jcYearVal
}
} else {
rewPunYears[0] = isDateYear - 3
}
if rows[2][303] != "" {
jcYearAry := strings.Split(rows[2][303], "奖惩")
if len(jcYearAry) > 0 {
jcYearVal, _ := strconv.Atoi(jcYearAry[0])
rewPunYears[1] = jcYearVal
}
} else {
rewPunYears[1] = isDateYear - 2
}
if rows[2][308] != "" {
jcYearAry := strings.Split(rows[2][308], "奖惩")
if len(jcYearAry) > 0 {
jcYearVal, _ := strconv.Atoi(jcYearAry[0])
rewPunYears[2] = jcYearVal
}
} else {
rewPunYears[2] = isDateYear - 1
}
rewPunYearsIng = rewPunYears
redisClient := grocerystore.RunRedis(overall.CONSTANT_REDIS4)
redisClient.SetRedisTime(86400)
totalNum = 0
for i, row := range rows {
if i < 4 {
continue
}
if row[1] != "" {
jsonStr, _ := json.Marshal(row)
// fmt.Printf("%v出生日期:%v\n", row[1], string(jsonStr))
redisClient.Lpush(redisKey, jsonStr)
totalNum++
}
}
return
}
/*
*
@ 作者: 秦东
@ 时间: 2024-08-26 16:05:27
@ 功能: 解析电子表格人员信息
@ 参数
#info //人员信息
#meritsYear 绩效年度
#rewPunYearsmap 奖惩年度
#orgId 行政组织
@ 返回值
#
@ 方法原型
#
*/
func (g *GroupParsingData) ParsingUserInfoOfExcel(list map[int]string, meritsYear, rewPunYearsmap map[int]int, orgId string) {
g.IsOk = false
switch orgId {
case "296": //荣信模版
// fmt.Printf("分成的段:%v\n%v\n", list[0], list[2])
// isRxTemplate := strings.Contains(list[2], list[1])
// fmt.Printf("分成的段:%v\n%v\n%v\n", isRxTemplate, list[2], list[1])
// if isRxTemplate {
if list[2] != "" {
g.UserNum = list[2]
var myCont models.PersonArchives
err := myCont.RedisCont(list[2], 1)
if err != nil {
g.IsOk = true
} else {
g.UserKey = myCont.Key
}
// g.ProcessMainTableRongXin(list, meritsYear, rewPunYearsmap, orgId)
g.ProcessMainTableRongXinNew(list, meritsYear, rewPunYearsmap, orgId)
} else {
g.Msg = append(g.Msg, fmt.Sprintf("序号:%v--->%v:没有工号--->%v", list[0], list[3], time.Now().Unix()))
g.MsgStr = fmt.Sprintf("序号:%v--->%v:没有工号--->%v", list[0], list[3], overallhandle.UnixTimeToDay(time.Now().Unix(), 11))
}
// } else {
// g.Msg = append(g.Msg, fmt.Sprintf("序号:%v--->%v(%v):模板与选择的公司不匹配!无法录入--->%v", list[0], list[3], list[2], time.Now().Unix()))
// g.MsgStr = fmt.Sprintf("序号:%v--->%v:模板与选择的公司不匹配!无法录入--->%v", list[0], list[3], overallhandle.UnixTimeToDay(time.Now().Unix(), 11))
// }
default: //高科模版解析
isRxTemplate := strings.Contains(list[2], list[1])
if !isRxTemplate {
if list[1] != "" {
g.UserNum = list[1]
var myCont models.PersonArchives
err := myCont.RedisCont(list[1], 1)
if err != nil {
g.IsOk = true
} else {
g.UserKey = myCont.Key
}
g.ProcessMainTable(list, meritsYear, rewPunYearsmap, orgId)
} else {
g.Msg = append(g.Msg, fmt.Sprintf("序号:%v--->%v:没有工号--->%v", list[0], list[2], time.Now().Unix()))
g.MsgStr = fmt.Sprintf("序号:%v--->%v:没有工号--->%v", list[0], list[2], overallhandle.UnixTimeToDay(time.Now().Unix(), 11))
}
} else {
g.Msg = append(g.Msg, fmt.Sprintf("序号:%v--->%v(%v):模板与选择的公司不匹配!无法录入--->%v", list[0], list[2], list[1], time.Now().Unix()))
g.MsgStr = fmt.Sprintf("序号:%v--->%v(%v):模板与选择的公司不匹配!无法录入--->%v", list[0], list[2], list[1], overallhandle.UnixTimeToDay(time.Now().Unix(), 11))
}
}
}
/*
*
@ 作者: 秦东
@ 时间: 2024-08-26 16:28:32
@ 功能: 主表数据处理(荣信表格模版)
@ 参数
#info 人员信息
#meritsYear 绩效年度
#rewPunYearsmap 奖惩年度
@ 返回值
#
@ 方法原型
#
*/
func (g *GroupParsingData) ProcessMainTableRongXin(info map[int]string, meritsYear, rewPunYearsmap map[int]int, orgId string) {
if g.UserKey == 0 {
g.UserKey = overallhandle.OnlyOneNumber(2)
}
curryTime := time.Now().Unix()
if g.IsOk { //新增员工信息
var userInfo models.PersonArchives
userInfo.Key = g.UserKey //唯一编号
userInfo.Name = info[3] //姓名"`
userInfo.Number = info[2] //工号
userInfo.HireClass = 1 //雇佣类型(1:雇佣入职;2:再入职;)"`
userInfo.EmpType = 4 //用工关系(1:临时工 , 2:编外人员 ;3:实习&实习生;4:试用员工;5:待分配;6:待岗;7:临时调入;8:正式员工;9:长期病假;10:停薪留职;11:退休;12:辞职;13:辞退;14:离职)"`
orgIdInt, _ := strconv.ParseInt(orgId, 10, 64)
userInfo.ExcelTemplate = orgIdInt
var adminOrg int64
var allOrgId []int64
//公司
if info[4] != "" {
var comOrg models.AdministrativeOrganization
comOrg.GetCont(map[string]interface{}{"`name`": info[4]}, "`id`")
if comOrg.Id != 0 {
userInfo.Company = comOrg.Id //入职公司"`
adminOrg = comOrg.Id
var sunOrg overallhandle.GetOrgAllParent
sunOrg.GetGCSOrgSonAllId(comOrg.Id)
sunOrg.Id = append(sunOrg.Id, comOrg.Id)
allOrgId = sunOrg.Id
}
}
fmt.Printf("下属所有子部门-->%v\n", allOrgId)
if info[5] != "" {
if len(allOrgId) > 0 {
mastOrg := GetMyOrgSunId(info[5], allOrgId)
if mastOrg != 0 {
userInfo.MainDeparment = mastOrg //主部门"`
adminOrg = mastOrg
}
}
}
if info[6] != "" {
if len(allOrgId) > 0 {
suntOrg := GetMyOrgSunId(info[6], allOrgId)
if suntOrg != 0 {
userInfo.SunMainDeparment = suntOrg //二级主部门"`
adminOrg = suntOrg
}
}
}
if info[7] != "" {
if len(allOrgId) > 0 {
postOrg := GetMyOrgSunId(info[7], allOrgId)
if postOrg != 0 {
userInfo.WorkSection = postOrg //二级主部门"`
adminOrg = postOrg
}
}
}
if adminOrg != 0 {
userInfo.AdminOrg = adminOrg //所属行政组织"`
position, jobId, PersonInCharge := GetMyPositisName(info[8], adminOrg)
if position != 0 {
userInfo.Position = position
}
if jobId != 0 {
userInfo.JobId = jobId
}
if PersonInCharge != 0 {
userInfo.PersonInCharge = PersonInCharge
}
}
switch info[9] {
case "一级":
userInfo.JobLeve = 1 // 职务等级"`
case "二级":
userInfo.JobLeve = 2 // 职务等级"`
case "三级":
userInfo.JobLeve = 3 // 职务等级"`
case "四级":
userInfo.JobLeve = 4 // 职务等级"`
case "五级":
userInfo.JobLeve = 5 // 职务等级"`
case "协议":
userInfo.JobLeve = 6 // 协议"`
default:
}
if info[10] != "" {
var jobInfo models.JobClass
jobInfo.GetCont(map[string]interface{}{"`name`": info[10]}, "`id`")
if jobInfo.Id != 0 {
userInfo.JobClass = jobInfo.Id //管理类别"`
}
}
userInfo.Time = curryTime //写入时间"`
userInfo.EiteTime = curryTime //编辑时间"`
userInfo.State = 1 //状态(1:启用;2:禁用;3:删除)`
userInfo.Key = g.UserKey //key"`
var md5JiaMi overallhandle.Md5Encryption
md5JiaMi.Md5EncryptionInit(overall.CONSTANT_CONFIG.Appsetup.DefaultPassword)
md5Token := md5JiaMi.Md5EncryptionAlgorithm()
userInfo.Password = md5Token //密码"`
userInfo.IsShowTrue = 1
if info[32] != "" {
userInfo.Wechat = info[32]
}
err := overall.CONSTANT_DB_HR.Create(&userInfo).Error
if err != nil {
g.Msg = append(g.Msg, fmt.Sprintf("%v[%v]处理失败!--- %v 原因:%v", info[3], info[2], overallhandle.UnixTimeToDay(curryTime, 11), err))
g.MsgStr = fmt.Sprintf("%v[%v]处理失败!--- %v 原因:%v", info[3], info[2], overallhandle.UnixTimeToDay(curryTime, 11), err)
} else {
g.Msg = append(g.Msg, fmt.Sprintf("%v[%v]处理完成!--- %v", info[3], info[2], overallhandle.UnixTimeToDay(curryTime, 11)))
g.MsgStr = fmt.Sprintf("%v[%v]处理完成!--- %v", info[3], info[2], overallhandle.UnixTimeToDay(curryTime, 11))
}
} else { //修改员工信息
editInfo := overallhandle.MapOut()
editInfo["`name`"] = info[3]
var adminOrg int64
var allOrgId []int64
if info[4] != "" {
var comOrg models.AdministrativeOrganization
comOrg.GetCont(map[string]interface{}{"`name`": info[4]}, "`id`")
if comOrg.Id != 0 {
editInfo["`company`"] = comOrg.Id //入职公司"`
adminOrg = comOrg.Id
var sunOrg overallhandle.GetOrgAllParent
sunOrg.GetGCSOrgSonAllId(comOrg.Id)
sunOrg.Id = append(sunOrg.Id, comOrg.Id)
allOrgId = sunOrg.Id
}
}
fmt.Printf("下属所有子部门-->%v\n", allOrgId)
if info[5] != "" {
if len(allOrgId) > 0 {
mastOrg := GetMyOrgSunId(info[5], allOrgId)
if mastOrg != 0 {
editInfo["`maindeparment`"] = mastOrg //主部门"`
adminOrg = mastOrg
}
}
}
if info[6] != "" {
if len(allOrgId) > 0 {
suntOrg := GetMyOrgSunId(info[6], allOrgId)
if suntOrg != 0 {
editInfo["`sun_main_deparment`"] = suntOrg //二级主部门"`
adminOrg = suntOrg
}
}
}
if info[7] != "" {
if len(allOrgId) > 0 {
postOrg := GetMyOrgSunId(info[7], allOrgId)
if postOrg != 0 {
editInfo["`work_section`"] = postOrg //二级主部门"`
adminOrg = postOrg
}
}
}
if adminOrg != 0 {
editInfo["`admin_org`"] = adminOrg //所属行政组织"`
position, jobId, PersonInCharge := GetMyPositisName(info[8], adminOrg)
if position != 0 {
editInfo["`position`"] = position
}
if jobId != 0 {
editInfo["`job_id`"] = jobId
}
if PersonInCharge != 0 {
editInfo["`person_in_charge`"] = PersonInCharge
}
}
switch info[9] {
case "一级":
editInfo["`job_leve`"] = 1 // 职务等级"`
case "二级":
editInfo["`job_leve`"] = 2 // 职务等级"`
case "三级":
editInfo["`job_leve`"] = 3 // 职务等级"`
case "四级":
editInfo["`job_leve`"] = 4 // 职务等级"`
case "五级":
editInfo["`job_leve`"] = 5 // 职务等级"`
case "协议":
editInfo["`job_leve`"] = 6 // 协议"`
default:
}
if info[10] != "" {
var jobInfo models.JobClass
jobInfo.GetCont(map[string]interface{}{"`name`": info[10]}, "`id`")
if jobInfo.Id != 0 {
editInfo["`job_class`"] = jobInfo.Id //管理类别"`
}
}
editInfo["`eite_time`"] = curryTime
editInfo["`is_show_true`"] = 1
if info[32] != "" {
editInfo["`wechat`"] = info[32]
}
// orgIdInt, _ := strconv.ParseInt(orgId, 10, 64)
editInfo["`excel_template`"] = orgId
var userInfo models.PersonArchives
err := userInfo.EiteCont(map[string]interface{}{"`key`": g.UserKey}, editInfo)
// fmt.Printf("编辑信息:%v\n", err)
if err != nil {
g.Msg = append(g.Msg, fmt.Sprintf("%v[%v]处理失败!--- %v 原因:%v", info[3], info[2], overallhandle.UnixTimeToDay(curryTime, 11), err))
g.MsgStr = fmt.Sprintf("%v[%v]处理失败!--- %v 原因:%v", info[3], info[2], overallhandle.UnixTimeToDay(curryTime, 11), err)
} else {
g.Msg = append(g.Msg, fmt.Sprintf("%v[%v]处理完成!--- %v", info[3], info[2], overallhandle.UnixTimeToDay(curryTime, 11)))
g.MsgStr = fmt.Sprintf("%v[%v]处理完成!--- %v", info[3], info[2], overallhandle.UnixTimeToDay(curryTime, 11))
}
}
//协程处理附属信息
synPros.Add(1)
go g.OrgChannelInfo(info[4], info[5], info[6], info[7], "电子表格导入数据") //行政组织变更
synPros.Add(1)
go g.AuxiliaryTableUserRongXin(info)
synPros.Add(1)
go g.PoliticalOutlookEditRongXin(info) //政治面貌
synPros.Add(1)
go g.EditEducationInfoRongXin(info) //学历信息
synPros.Add(1)
go g.FamilyMembersRongXin(info) //家庭成员
synPros.Add(1)
go g.GrowthExpWitTheGroupRongXin(info, orgId) //集团内成长经历
synPros.Add(1)
go g.ExtWorkExpOfTheGroupRongXin(info) //集团外部工作经历
synPros.Add(1)
go g.EditExamLevelRongXin(info, meritsYear) //绩效考核成绩
synPros.Add(1)
go g.EditRewPunRongXin(info, rewPunYearsmap) //奖惩记录
synPros.Add(1)
go g.EditAcademicTitleRongXin(info) //编辑职称
synPros.Add(1)
go g.EditCertificateRongXin(info) //编辑证书
synPros.Add(1)
go g.TalentInventory(info, orgId) //人才盘点
//监听所有协程都完成
synPros.Wait()
}
/*
*
@ 作者: 秦东
@ 时间: 2024-09-05 09:50:36
@ 功能: 行政组织变动
@ 参数
#company 公司
#firstDepartment 第一部门
#secondaryDepartment 第二部门
#workshop 工段
#notes 备注
@ 返回值
#
@ 方法原型
#
*/
func (g *GroupParsingData) OrgChannelInfo(company, firstDepartment, secondaryDepartment, workshop, notes string) {
defer synPros.Done()
var orgChangeInfo []models.OrgChangeRecord
overall.CONSTANT_DB_HR.Model(&models.OrgChangeRecord{}).Where("`userKey` = ?", g.UserKey).Find(&orgChangeInfo)
if len(orgChangeInfo) > 0 {
var comId int64
var firstDepId int64
var secDepId int64
var workspId int64
var allOrgId []int64
//公司
if company != "" {
var comOrg models.AdministrativeOrganization
comOrg.GetCont(map[string]interface{}{"`name`": company}, "`id`")
if comOrg.Id != 0 {
comId = comOrg.Id //入职公司"`
var sunOrg overallhandle.GetOrgAllParent
sunOrg.GetGCSOrgSonAllId(comOrg.Id)
sunOrg.Id = append(sunOrg.Id, comOrg.Id)
allOrgId = sunOrg.Id
}
}
if firstDepartment != "" {
if len(allOrgId) > 0 {
mastOrg := GetMyOrgSunId(firstDepartment, allOrgId)
if mastOrg != 0 {
firstDepId = mastOrg //主部门"`
}
}
}
if secondaryDepartment != "" {
if len(allOrgId) > 0 {
suntOrg := GetMyOrgSunId(secondaryDepartment, allOrgId)
if suntOrg != 0 {
secDepId = suntOrg //二级主部门"`
}
}
}
if workshop != "" {
if len(allOrgId) > 0 {
postOrg := GetMyOrgSunId(workshop, allOrgId)
if postOrg != 0 {
workspId = postOrg //二级主部门"`
}
}
}
isEdit := true
for _, v := range orgChangeInfo {
if v.CompanyCn == company {
if v.FirstDepartment != firstDepartment {
if v.SecondaryDepartment != secondaryDepartment {
if v.WorkShop != workshop {
isEdit = false
break
}
}
}
}
}
if isEdit {
var inSetInfo models.OrgChangeRecord
inSetInfo.Userkey = g.UserKey
inSetInfo.CompanyCn = company
inSetInfo.FirstDepartment = firstDepartment
inSetInfo.SecondaryDepartment = secondaryDepartment
inSetInfo.WorkShop = workshop
inSetInfo.CompanyId = comId //入职公司"`
inSetInfo.FirstDepartmentId = firstDepId //主部门"`
inSetInfo.SecondaryDepartmentId = secDepId //二级主部门"`
inSetInfo.WorkShopid = workspId //二级主部门"`
inSetInfo.Time = time.Now().Unix()
inSetInfo.Notes = "表格导入信息行政组织调动"
overall.CONSTANT_DB_HR.Create(&inSetInfo)
}
} else {
var inSetInfo models.OrgChangeRecord
inSetInfo.Userkey = g.UserKey
inSetInfo.CompanyCn = company
inSetInfo.FirstDepartment = firstDepartment
inSetInfo.SecondaryDepartment = secondaryDepartment
inSetInfo.WorkShop = workshop
var allOrgId []int64
//公司
if company != "" {
var comOrg models.AdministrativeOrganization
comOrg.GetCont(map[string]interface{}{"`name`": company}, "`id`")
if comOrg.Id != 0 {
inSetInfo.CompanyId = comOrg.Id //入职公司"`
var sunOrg overallhandle.GetOrgAllParent
sunOrg.GetGCSOrgSonAllId(comOrg.Id)
sunOrg.Id = append(sunOrg.Id, comOrg.Id)
allOrgId = sunOrg.Id
}
}
if firstDepartment != "" {
if len(allOrgId) > 0 {
mastOrg := GetMyOrgSunId(firstDepartment, allOrgId)
if mastOrg != 0 {
inSetInfo.FirstDepartmentId = mastOrg //主部门"`
}
}
}
if secondaryDepartment != "" {
if len(allOrgId) > 0 {
suntOrg := GetMyOrgSunId(secondaryDepartment, allOrgId)
if suntOrg != 0 {
inSetInfo.SecondaryDepartmentId = suntOrg //二级主部门"`
}
}
}
if workshop != "" {
if len(allOrgId) > 0 {
postOrg := GetMyOrgSunId(workshop, allOrgId)
if postOrg != 0 {
inSetInfo.WorkShopid = postOrg //二级主部门"`
}
}
}
inSetInfo.Time = time.Now().Unix()
inSetInfo.Notes = "初始化表格导入信息"
overall.CONSTANT_DB_HR.Create(&inSetInfo)
}
}
/*
*
@ 作者: 秦东
@ 时间: 2024-08-28 09:28:07
@ 功能: 人才盘点
@ 参数
#info 表格数据
#orgId 行政组织
@ 返回值
#
@ 方法原型
#
*/
func (g *GroupParsingData) TalentInventory(info map[int]string, orgId string) {
defer synPros.Done()
currentYear := overallhandle.UnixTimeToDay(time.Now().Unix(), 16)
switch orgId {
case "296":
EditTalentInventory(g.UserKey, currentYear, info[297], info[299], info[298], info[296])
default:
EditTalentInventory(g.UserKey, currentYear, info[291], info[292], "", "")
}
}
/*
*
@ 作者: 秦东
@ 时间: 2024-08-28 09:32:57
@ 功能:
@ 参数
#userKey 当前人员
#currentYear 当前年
#careerPlanning 职业生涯规划
#personalAssistance 个人期望从组织获得的帮助
#lastYearAssessmentLevel 上一年绩效成绩
#userTypes 人员类型
@ 返回值
#
@ 方法原型
#
*/
func EditTalentInventory(userKey int64, currentYear, careerPlanning, personalAssistance, lastYearAssessmentLevel, userTypes string) {
var talInvCont models.TalentInventory
err := overall.CONSTANT_DB_HR.Model(&talInvCont).Where("`userKey` = ? AND `years` = ?", userKey, currentYear).Find(&talInvCont).Error
if err == nil && talInvCont.Id != 0 {
saveInfo := overallhandle.MapOut()
if careerPlanning != "" && careerPlanning != talInvCont.CareerPlanning {
saveInfo["careerPlanning"] = careerPlanning
}
if personalAssistance != "" && personalAssistance != talInvCont.PersonalAssistance {
saveInfo["personalAssistance"] = personalAssistance
}
if lastYearAssessmentLevel != "" && lastYearAssessmentLevel != talInvCont.LastYearAssessmentLevel {
saveInfo["lastYearAssessmentLevel"] = lastYearAssessmentLevel
}
if userTypes != "" && userTypes != talInvCont.UserTypes {
saveInfo["userTypes"] = userTypes
}
if len(saveInfo) > 0 {
saveInfo["times"] = time.Now().Unix()
var EdittalInvCont models.TalentInventory
EdittalInvCont.EiteTalentInventoryCont(map[string]interface{}{"`id`": talInvCont.Id}, saveInfo)
}
} else {
//不存在此项,那么新增
var newTalInvInfo models.TalentInventory
newTalInvInfo.UserKey = userKey //归属人员key"`
newTalInvInfo.UserTypes = userTypes //人员类型"`
newTalInvInfo.CareerPlanning = careerPlanning //职业生涯规划"`
newTalInvInfo.PersonalAssistance = personalAssistance //个人期望从组织获得的帮助"`
newTalInvInfo.LastYearAssessmentLevel = lastYearAssessmentLevel //上一年绩效成绩"`
currentYearInt, _ := strconv.Atoi(currentYear)
newTalInvInfo.Years = currentYearInt //年份"`
newTalInvInfo.Times = time.Now().Unix()
overall.CONSTANT_DB_HR.Create(&newTalInvInfo)
}
}
/*
*
@ 作者: 秦东
@ 时间: 2024-08-27 14:03:14
@ 功能: 编辑证书(荣信)
@ 参数
#
@ 返回值
#
@ 方法原型
#
*/
func (g *GroupParsingData) EditCertificateRongXin(info map[int]string) {
defer synPros.Done()
var cerHonList []models.CertificateHonors
err := overall.CONSTANT_DB_HR.Where("`userKey` = ?", g.UserKey).Find(&cerHonList).Error
if err != nil || len(cerHonList) < 1 {
if info[344] != "" {
g.EditCertificateCont(info[343], info[344], info[345], info[346], info[347], info[348], "是")
}
if info[350] != "" {
g.EditCertificateCont(info[349], info[350], info[351], info[352], info[353], info[354], "是")
}
if info[356] != "" {
g.EditCertificateCont(info[355], info[356], info[357], info[358], info[359], info[360], "是")
}
} else {
jsonInfo, _ := json.Marshal(cerHonList)
overallhandle.WriteLog("del", "删除旧证书数据!", string(jsonInfo))
var workGroupLogCont models.CertificateHonors
workGroupLogCont.DelCont(map[string]interface{}{"`userKey`": g.UserKey})
if info[344] != "" {
g.EditCertificateCont(info[343], info[344], info[345], info[346], info[347], info[348], "是")
}
if info[350] != "" {
g.EditCertificateCont(info[349], info[350], info[351], info[352], info[353], info[354], "是")
}
if info[356] != "" {
g.EditCertificateCont(info[355], info[356], info[357], info[358], info[359], info[360], "是")
}
}
}
/*
*
@ 作者: 秦东
@ 时间: 2024-08-27 13:58:10
@ 功能: 编辑职称
@ 参数
#
@ 返回值
#
@ 方法原型
#
*/
func (g *GroupParsingData) EditAcademicTitleRongXin(info map[int]string) {
defer synPros.Done()
var acaList []models.AcademicTitle
err := overall.CONSTANT_DB_HR.Where("`userKey` = ?", g.UserKey).Find(&acaList).Error
if err != nil || len(acaList) < 1 {
//新增职称
if info[333] != "" {
g.InsetAcaInfo(info[333], info[334], info[335], info[336], info[337])
}
if info[338] != "" {
g.InsetAcaInfo(info[338], info[339], info[340], info[341], info[342])
}
} else {
//原先有数据
jsonInfo, _ := json.Marshal(acaList)
overallhandle.WriteLog("del", "删除旧职称数据!", string(jsonInfo))
var workGroupLogCont models.AcademicTitle
workGroupLogCont.DelCont(map[string]interface{}{"`userKey`": g.UserKey})
if info[333] != "" {
g.InsetAcaInfo(info[333], info[334], info[335], info[336], info[337])
}
if info[338] != "" {
g.InsetAcaInfo(info[338], info[339], info[340], info[341], info[342])
}
}
}
/*
*
@ 作者: 秦东
@ 时间: 2024-08-27 13:44:40
@ 功能: 编辑奖惩记录
@ 参数
#
@ 返回值
#
@ 方法原型
#
*/
func (g *GroupParsingData) EditRewPunRongXin(info map[int]string, rewPunYearsmap map[int]int) {
defer synPros.Done()
if val, isOk := rewPunYearsmap[0]; isOk {
g.EditRewPunInfoRongXin(val, info[305], info[306], info[307], info[308], info[309], info[310])
}
if val, isOk := rewPunYearsmap[1]; isOk {
g.EditRewPunInfoRongXin(val, info[311], info[312], info[313], info[314], info[315], info[316])
}
if val, isOk := rewPunYearsmap[2]; isOk {
g.EditRewPunInfoRongXin(val, info[317], info[318], info[319], info[320], info[321], info[322])
}
if val, isOk := rewPunYearsmap[3]; isOk {
g.EditRewPunInfoRongXin(val, info[323], info[324], info[325], info[326], info[327], info[328])
}
}
// 写入奖惩记录
func (g *GroupParsingData) EditRewPunInfoRongXin(years int, level, rewPunClass, title, timeData, issuingUnit, prePunNum string) {
jiangCeng := RewPunLevelClassStr(rewPunClass)
var rewPunYearCont models.RewardsPenalties
err := rewPunYearCont.GetCont(map[string]interface{}{"`userkey`": g.UserKey, "`years`": years, "`months`": 0})
timeVal := time.Now().Unix()
if err == nil {
overall.CONSTANT_DB_HR.Where("`id` = ? ", rewPunYearCont.Id).Delete(&rewPunYearCont)
}
if timeData != "" {
timeVal = overallhandle.ExcelDateToDate(timeData).Unix()
// fmt.Printf("奖惩记录3: %v\n", timeVal)
}
if level != "" {
rewPunYearCont.Title = title //奖励/处分项目"`
rewPunYearCont.UserKey = g.UserKey //获得人员"`
if jiangCeng <= 6 {
rewPunYearCont.Types = 1 //类型(1:奖励;2:处分;)`
} else {
rewPunYearCont.Types = 2 //类型(1:奖励;2:处分;)`
}
rewPunYearCont.State = 1 //状态(1:启用;2:禁用;3:删除)`
rewPunYearCont.IssuingUnit = issuingUnit //颁发单位"`
rewPunYearCont.TimeData = timeVal //获得时间"`
rewPunYearCont.Years = years //年"`
rewPunYearCont.Months = 0 //月"`
rewPunYearCont.Level = RewPunLevelStr(level) //奖惩级别(1:部门级;2:公司级;3:县级;4:市级;5:省级;6:国家级)"`
rewPunYearCont.RewPunClass = jiangCeng //奖惩类型(1:年终评优;2:表扬;3:嘉奖;4:记功;5:记大功;6:特别奖励;7:批评;8:警告;9:记过;10:记大过;11:降级;12:留用察看;13:开除)"`
rewPunYearCont.RewPunNumber = prePunNum
overall.CONSTANT_DB_HR.Create(&rewPunYearCont)
}
}
/*
*
@ 作者: 秦东
@ 时间: 2024-08-27 13:25:00
@ 功能: 编辑考核成绩(荣信)
@ 参数
#info 表单内容
#meritsYear 年份
@ 返回值
#
@ 方法原型
#
*/
func (g *GroupParsingData) EditExamLevelRongXin(info map[int]string, meritsYear map[int]int) {
defer synPros.Done()
if val, isOk := meritsYear[0]; isOk {
g.EditExamLevelInfoRongXin(info[292], info[293], val)
}
if val, isOk := meritsYear[1]; isOk {
g.EditExamLevelInfoRongXin(info[294], info[295], val)
}
}
/*
*
@ 作者: 秦东
@ 时间: 2024-08-27 13:40:34
@ 功能: 编辑绩效考核内容
@ 参数
#
@ 返回值
#
@ 方法原型
#
*/
func (g *GroupParsingData) EditExamLevelInfoRongXin(level, notes string, years int) {
var merInfo models.Meritslog
err := merInfo.GetCont(map[string]interface{}{"`userkey`": g.UserKey, "`years`": years, "`months`": 0}, "`id`", "`level`", "`notes`")
if err != nil { //新增
merInfo.Score = 0 //绩效分数*10000保存"`
merInfo.UserKey = g.UserKey //获得人员"`
merInfo.Status = 1 //(1:启用;2:禁用;3:删除)`
merInfo.TimeData = time.Now().Unix() //获得时间"`
merInfo.Years = years //年"`
merInfo.Months = 0 //月"`
merInfo.Level = level //考核等级"`
merInfo.Notes = notes //备注
overall.CONSTANT_DB_HR.Create(&merInfo)
} else {
editCont := overallhandle.MapOut()
if merInfo.Level != level {
editCont["`level`"] = level
editCont["`notes`"] = notes
editCont["`status`"] = 1
editCont["`timedata`"] = time.Now().Unix()
var merNewInfo models.Meritslog
merNewInfo.EiteCont(map[string]interface{}{"`id`": merInfo.Id}, editCont)
}
}
}
/*
*
@ 作者: 秦东
@ 时间: 2024-08-27 11:43:54
@ 功能: 集团外部工作经历(荣信)
@ 参数
#
@ 返回值
#
@ 方法原型
#
*/
func (g *GroupParsingData) ExtWorkExpOfTheGroupRongXin(info map[int]string) {
defer synPros.Done()
var workList []models.WorkHistory
err := overall.CONSTANT_DB_HR.Where("`key` = ?", g.UserKey).Find(&workList).Error
if err != nil || len(workList) < 1 { //没有记录进行新增
if info[226] != "" { //集团外工作经历1
g.ExternalWorkGroupLog(info[226], info[227], info[228], info[229], info[230], info[231], info[232], info[233], info[234], info[235], info[236], info[237], info[238])
}
if info[239] != "" { //集团外工作经历2
g.ExternalWorkGroupLog(info[239], info[240], info[241], info[242], info[243], info[244], info[245], info[246], info[247], info[248], info[249], info[250], info[251])
}
if info[252] != "" { //集团外工作经历3
g.ExternalWorkGroupLog(info[252], info[253], info[254], info[255], info[256], info[257], info[258], info[259], info[260], info[261], info[262], info[263], info[264])
}
if info[265] != "" { //集团外工作经历4
g.ExternalWorkGroupLog(info[265], info[266], info[267], info[268], info[269], info[270], info[271], info[272], info[273], info[274], info[275], info[276], info[277])
}
if info[278] != "" { //集团外工作经历5
g.ExternalWorkGroupLog(info[278], info[279], info[280], info[281], info[282], info[283], info[284], info[285], info[286], info[287], info[288], info[289], info[290])
}
} else { //已经存在历史记录了
jsonInfo, _ := json.Marshal(workList)
overallhandle.WriteLog("del", "删除旧集团外部工作经历数据!", string(jsonInfo))
var workGroupLogCont models.WorkHistory
workGroupLogCont.DelCont(map[string]interface{}{"`key`": g.UserKey})
if info[226] != "" { //集团外工作经历1
g.ExternalWorkGroupLog(info[226], info[227], info[228], info[229], info[230], info[231], info[232], info[233], info[234], info[235], info[236], info[237], info[238])
}
if info[239] != "" { //集团外工作经历2
g.ExternalWorkGroupLog(info[239], info[240], info[241], info[242], info[243], info[244], info[245], info[246], info[247], info[248], info[249], info[250], info[251])
}
if info[252] != "" { //集团外工作经历3
g.ExternalWorkGroupLog(info[252], info[253], info[254], info[255], info[256], info[257], info[258], info[259], info[260], info[261], info[262], info[263], info[264])
}
if info[265] != "" { //集团外工作经历4
g.ExternalWorkGroupLog(info[265], info[266], info[267], info[268], info[269], info[270], info[271], info[272], info[273], info[274], info[275], info[276], info[277])
}
if info[278] != "" { //集团外工作经历5
g.ExternalWorkGroupLog(info[278], info[279], info[280], info[281], info[282], info[283], info[284], info[285], info[286], info[287], info[288], info[289], info[290])
}
}
}
/*
*
@ 作者: 秦东
@ 时间: 2024-08-27 11:17:42
@ 功能: 集团内成长经历
@ 参数
#
@ 返回值
#
@ 方法原型
#
*/
func (g *GroupParsingData) GrowthExpWitTheGroupRongXin(info map[int]string, orgId string) {
defer synPros.Done()
var growInGroup []models.InsideWorkHistory
err := overall.CONSTANT_DB_HR.Where("`key` = ?", g.UserKey).Find(&growInGroup).Error
if err != nil || len(growInGroup) < 1 {
//没有集团经历,那么进行新增
if info[99] != "" { //集团内工作经历1
g.EditGroupInWorkLog(info[99], info[100], info[101], info[102], info[103], info[104], info[105], info[106], info[107], info[108], info[109], info[110], info[111], info[112], orgId)
}
if info[113] != "" { //集团内工作经历2
g.EditGroupInWorkLog(info[113], info[114], info[115], info[116], info[117], info[118], info[119], info[120], info[121], info[122], info[123], info[124], info[125], info[126], orgId)
}
if info[127] != "" { //集团内工作经历3
g.EditGroupInWorkLog(info[127], info[128], info[129], info[130], info[131], info[132], info[133], info[134], info[135], info[136], info[137], info[138], info[139], info[140], orgId)
}
if info[141] != "" { //集团内工作经历4
g.EditGroupInWorkLog(info[141], info[142], info[143], info[144], info[145], info[146], info[147], info[148], info[149], info[150], info[151], info[152], info[153], info[154], orgId)
}
if info[155] != "" { //集团内工作经历5
g.EditGroupInWorkLog(info[155], info[156], info[157], info[158], info[159], info[160], info[161], info[162], info[163], info[164], info[165], info[166], info[167], info[168], orgId)
}
if info[169] != "" { //集团内工作经历6
g.EditGroupInWorkLog(info[169], info[170], info[171], info[172], info[173], info[174], info[175], info[176], info[177], info[178], info[179], info[180], info[181], info[182], orgId)
}
if info[183] != "" { //集团内工作经历7
g.EditGroupInWorkLog(info[183], info[184], info[185], info[186], info[187], info[188], info[189], info[190], info[191], info[192], info[193], info[194], info[195], info[196], orgId)
}
if info[197] != "" { //集团内工作经历8
g.EditGroupInWorkLog(info[197], info[198], info[199], info[200], info[201], info[202], info[203], info[204], info[205], info[206], info[207], info[208], info[209], info[210], orgId)
}
if info[211] != "" { //集团内工作经历9
g.EditGroupInWorkLog(info[211], info[212], info[213], info[214], info[215], info[216], info[217], info[218], info[219], info[220], info[221], info[222], info[223], info[224], orgId)
}
if info[225] != "" { //集团内工作经历10
g.EditGroupInWorkLog(info[225], info[226], info[227], info[228], info[229], info[230], info[231], info[232], info[233], info[234], info[235], info[236], info[237], info[238], orgId)
}
} else {
//有集团经历,那么删除旧的经历再新增
jsonInfo, _ := json.Marshal(growInGroup)
overallhandle.WriteLog("del", "删除旧集团内部经历数据!", string(jsonInfo))
var workGroupLogCont models.InsideWorkHistory
workGroupLogCont.DelCont(map[string]interface{}{"`key`": g.UserKey})
if info[99] != "" { //集团内工作经历1
g.EditGroupInWorkLog(info[99], info[100], info[101], info[102], info[103], info[104], info[105], info[106], info[107], info[108], info[109], info[110], info[111], info[112], orgId)
}
if info[113] != "" { //集团内工作经历2
g.EditGroupInWorkLog(info[113], info[114], info[115], info[116], info[117], info[118], info[119], info[120], info[121], info[122], info[123], info[124], info[125], info[126], orgId)
}
if info[127] != "" { //集团内工作经历3
g.EditGroupInWorkLog(info[127], info[128], info[129], info[130], info[131], info[132], info[133], info[134], info[135], info[136], info[137], info[138], info[139], info[140], orgId)
}
if info[141] != "" { //集团内工作经历4
g.EditGroupInWorkLog(info[141], info[142], info[143], info[144], info[145], info[146], info[147], info[148], info[149], info[150], info[151], info[152], info[153], info[154], orgId)
}
if info[155] != "" { //集团内工作经历5
g.EditGroupInWorkLog(info[155], info[156], info[157], info[158], info[159], info[160], info[161], info[162], info[163], info[164], info[165], info[166], info[167], info[168], orgId)
}
if info[169] != "" { //集团内工作经历6
g.EditGroupInWorkLog(info[169], info[170], info[171], info[172], info[173], info[174], info[175], info[176], info[177], info[178], info[179], info[180], info[181], info[182], orgId)
}
if info[183] != "" { //集团内工作经历7
g.EditGroupInWorkLog(info[183], info[184], info[185], info[186], info[187], info[188], info[189], info[190], info[191], info[192], info[193], info[194], info[195], info[196], orgId)
}
if info[197] != "" { //集团内工作经历8
g.EditGroupInWorkLog(info[197], info[198], info[199], info[200], info[201], info[202], info[203], info[204], info[205], info[206], info[207], info[208], info[209], info[210], orgId)
}
if info[211] != "" { //集团内工作经历9
g.EditGroupInWorkLog(info[211], info[212], info[213], info[214], info[215], info[216], info[217], info[218], info[219], info[220], info[221], info[222], info[223], info[224], orgId)
}
if info[225] != "" { //集团内工作经历10
g.EditGroupInWorkLog(info[225], info[226], info[227], info[228], info[229], info[230], info[231], info[232], info[233], info[234], info[235], info[236], info[237], info[238], orgId)
}
}
}
/*
*
@ 作者: 秦东
@ 时间: 2024-08-27 10:54:53
@ 功能: 家庭成员(荣信模版)
@ 参数
#
@ 返回值
#
@ 方法原型
#
*/
func (g *GroupParsingData) FamilyMembersRongXin(info map[int]string) {
defer synPros.Done()
var familyAry []models.FamilyMembers
err := overall.CONSTANT_DB_HR.Where("`key` = ?", g.UserKey).Find(&familyAry).Error
// var emergencyFamily []models.EmergencyContact //紧急联系人
// creeTime := time.Now().Unix()
if err != nil || len(familyAry) < 1 {
if info[61] != "" && info[62] != "" {
g.EditFamilyInfo(info[61], info[62], info[63], info[64], info[65], info[66], "否")
}
if info[67] != "" && info[68] != "" {
g.EditFamilyInfo(info[67], info[68], info[69], info[70], info[71], info[72], "否")
}
if info[73] != "" && info[74] != "" {
g.EditFamilyInfo(info[73], info[74], info[75], info[76], info[77], info[78], "否")
}
if info[79] != "" && info[80] != "" {
g.EditFamilyInfo(info[79], info[80], info[81], info[82], info[83], info[84], "否")
}
if info[85] != "" && info[86] != "" {
g.EditFamilyInfo(info[85], info[86], info[87], info[88], info[89], info[90], "否")
}
} else {
jsonInfo, _ := json.Marshal(familyAry)
overallhandle.WriteLog("del", "删除旧家庭成员数据!", string(jsonInfo))
var familyCont models.FamilyMembers
familyCont.DelCont(map[string]interface{}{"`key`": g.UserKey})
if info[61] != "" && info[62] != "" {
g.EditFamilyInfo(info[61], info[62], info[63], info[64], info[65], info[66], "否")
}
if info[67] != "" && info[68] != "" {
g.EditFamilyInfo(info[67], info[68], info[69], info[70], info[71], info[72], "否")
}
if info[73] != "" && info[74] != "" {
g.EditFamilyInfo(info[73], info[74], info[75], info[76], info[77], info[78], "否")
}
if info[79] != "" && info[80] != "" {
g.EditFamilyInfo(info[79], info[80], info[81], info[82], info[83], info[84], "否")
}
if info[85] != "" && info[86] != "" {
g.EditFamilyInfo(info[85], info[86], info[87], info[88], info[89], info[90], "否")
}
}
}
/*
*
@ 作者: 秦东
@ 时间: 2024-08-27 10:28:10
@ 功能:
@ 参数
#
@ 返回值
#
@ 方法原型
#
*/
func (g *GroupParsingData) EditEducationInfoRongXin(info map[int]string) {
defer synPros.Done()
var mySchoolLog []models.PersonnelEducation
err := overall.CONSTANT_DB_HR.Model(&models.PersonnelEducation{}).Where("`key` = ?", g.UserKey).Find(&mySchoolLog).Error
fmt.Printf("教育经历--->%v\n", len(mySchoolLog))
if err != nil || len(mySchoolLog) < 1 {
if info[34] != "" || info[37] != "" { //第一学历
g.AddOneSchollLog(info[34], info[35], info[36], info[37], info[38], info[39], info[40], info[41], info[42], 2)
}
if info[43] != "" || info[46] != "" { //最高学历
g.AddOneSchollLog(info[43], info[44], info[45], info[46], info[47], info[48], info[49], info[50], info[51], 3)
}
if info[52] != "" || info[55] != "" { //其他学历
g.AddOneSchollLog(info[52], info[53], info[54], info[55], info[56], info[57], info[58], info[59], info[60], 1)
}
} else {
jsonInfo, _ := json.Marshal(mySchoolLog)
overallhandle.WriteLog("del", "删除旧集团外部工作经历数据!", string(jsonInfo))
var delScho models.PersonnelEducation
delScho.DelCont(map[string]interface{}{"`key`": g.UserKey})
if info[34] != "" || info[37] != "" { //第一学历
g.AddOneSchollLog(info[34], info[35], info[36], info[37], info[38], info[39], info[40], info[41], info[42], 2)
}
if info[43] != "" || info[46] != "" { //最高学历
g.AddOneSchollLog(info[43], info[44], info[45], info[46], info[47], info[48], info[49], info[50], info[51], 3)
}
if info[52] != "" || info[55] != "" { //其他学历
g.AddOneSchollLog(info[52], info[53], info[54], info[55], info[56], info[57], info[58], info[59], info[60], 1)
}
}
}
/*
*
@ 作者: 秦东
@ 时间: 2024-08-27 10:12:33
@ 功能:
@ 参数
#
@ 返回值
#
@ 方法原型
#
*/
func (g *GroupParsingData) PoliticalOutlookEditRongXin(info map[int]string) {
defer synPros.Done()
if info[329] != "" {
var polOutInfo models.PoliticalIdentity
err := polOutInfo.GetCont(map[string]interface{}{"`userkey`": g.UserKey})
if err != nil { //不存在,新增
polOutInfo.Userkey = g.UserKey //员工唯一识别符;"`
polOutInfo.PoliticalOutlook = politiToInt(info[329]) //政治面貌(1:群众;2:无党派;3:台盟会员;4:九三社员;5:致公党员;6:农工党员;7:民进会员;8:民建会员;9:民盟盟员;10:民革会员,11:共青团员;12:预备党员;13:中共党员)"`
if info[330] != "" {
polOutInfo.JoinTime = overallhandle.ExcelDateToDate(info[330]).Unix() //加入时间"`
}
polOutInfo.Branch = info[331] //所在党支部"`
polOutInfo.Bosition = info[332] //党内职务"`
// polOutInfo.JoiningParty = info[317] //入党时所在单位"`
// if info[318] == "是" {
// polOutInfo.SwitchToClass = 1 //组织关系是否转入(1:是;2:否)"`
// } else {
// polOutInfo.SwitchToClass = 2 //组织关系是否转入(1:是;2:否)"`
// }
// if info[319] != "" {
// polOutInfo.SwitchToTime = overallhandle.ExcelDateToDate(info[319]).Unix() //组织关系转入时间"`
// }
polOutInfo.Time = time.Now().Unix() //创建时间"`
overall.CONSTANT_DB_HR.Create(&polOutInfo)
} else {
editCont := overallhandle.MapOut()
if info[329] != "" {
poloutName := politiToInt(info[329])
if poloutName != polOutInfo.PoliticalOutlook {
editCont["`political_outlook`"] = poloutName
}
}
if info[330] != "" {
joinTimeVal := overallhandle.ExcelDateToDate(info[330]).Unix()
if joinTimeVal != polOutInfo.JoinTime {
editCont["`joinTime`"] = joinTimeVal
}
}
if info[331] != "" && info[331] != polOutInfo.Branch {
editCont["`branch`"] = info[331]
}
if info[332] != "" && info[332] != polOutInfo.Bosition {
editCont["`position`"] = info[332]
}
// if info[317] != "" && info[317] != polOutInfo.JoiningParty {
// editCont["`joiningParty`"] = info[317]
// }
// zhuan := 2
// if info[318] == "是" {
// zhuan = 1
// }
// if zhuan != polOutInfo.SwitchToClass {
// editCont["`switchToClass`"] = zhuan
// }
// if info[319] != "" {
// switchTimeVal := overallhandle.ExcelDateToDate(info[319]).Unix()
// if switchTimeVal != polOutInfo.SwitchToTime {
// editCont["`switchToTime`"] = switchTimeVal
// }
// }
if len(editCont) > 0 {
editCont["`time`"] = time.Now().Unix()
polOutInfo.EiteCont(map[string]interface{}{"`userkey`": g.UserKey}, editCont)
}
}
} else {
var polOutInfo models.PoliticalIdentity
polOutInfo.DelCont(map[string]interface{}{"`userkey`": g.UserKey})
}
}
/*
*
@ 作者: 秦东
@ 时间: 2024-08-27 08:29:46
@ 功能: 人员信息副本(荣信)
@ 参数
#info 电子表格信息
@ 返回值
#
@ 方法原型
#
*/
func (g *GroupParsingData) AuxiliaryTableUserRongXin(info map[int]string) {
defer synPros.Done()
var myInfo models.PersonnelContent
err := myInfo.GetCont(map[string]interface{}{"`key`": g.UserKey}, "`number`")
if err != nil { //附属内容不存在,进行新增。
myInfo.Key = g.UserKey //Key"`
myInfo.Number = g.UserNum //员工工号;index"`
myInfo.Idcardno = info[24] //身份证号"`
// myInfo. Passportno = //护照号码"`
// myInfo. Globalroaming = //国际区号"`
myInfo.Mobilephone = info[29] //手机号码"`
myInfo.Email = info[33] //电子邮件"`
myInfo.Gender = genderToInt(info[11]) //性别(1:男性;2:女性;3:中性)"`
if info[12] != "" {
myInfo.Birthday = overallhandle.ExcelDateToDate(info[12]).Unix() //birthday"`
}
myInfo.Myfolk = info[14] //民族"`
myInfo.Nativeplace = info[20] //籍贯"`
if info[25] != "" {
myInfo.Idcardstartdate = overallhandle.ExcelDateToDate(info[25]).Unix() //身份证有效期开始"`
}
if info[26] != "" {
myInfo.Idcardenddate = overallhandle.ExcelDateToDate(info[26]).Unix() //身份证有效期结束"`
}
myInfo.Idcardaddress = info[28] //身份证地址"`
// myInfo. IdcardIssued = //身份证签发机关"`
myInfo.Health = healthToInt(info[16]) //健康状况(1:良好;2:一般;3:较弱,4:有生理缺陷;5:残废)"`
myInfo.Maritalstatus = maritalstatusToInt(info[15]) //婚姻状况(1:未婚;2:已婚;3:丧偶;4:离异)"`
// myInfo. Internaltelephone = //内线电话"`
myInfo.Currentresidence = info[19] //现居住地址"`
myInfo.Time = time.Now().Unix() //创建时间"`
myInfo.Constellation = consteToInt(info[22]) //星座(1:白羊座;2:金牛座;3:双子座;4:巨蟹座;5:狮子座;6:处女座;7:天枰座;8:天蝎座;9:射手座;10:摩羯座;11:水瓶座;12:双鱼座)"`
if info[87] == "是" {
myInfo.Isdoubleworker = 1 //是否双职工(1:是;2:否)"`
g.WorkingCoupleRongXin(info, true)
} else {
myInfo.Isdoubleworker = 2 //是否双职工(1:是;2:否)"`
g.WorkingCoupleRongXin(info, false)
}
// if info[320] == "是" {
// myInfo.Isveterans = 1 //是否为退役军人(1:是;2:否)"`
// g.EditVeterans(info, true)
// } else {
// myInfo.Isveterans = 2
// g.EditVeterans(info, false)
// }
// myInfo.Veteransnumber = info[321]
if info[301] != "" {
myInfo.Jobstartdate = overallhandle.ExcelDateToDate(info[301]).Unix() //参加工作日期"`
}
if info[303] != "" {
myInfo.Entrydate = overallhandle.ExcelDateToDate(info[303]).Unix() //入职日期"`
}
// myInfo. Probationperiod = //试用期"`
// myInfo. Planformaldate = //预计转正日期"`
if info[17] != "" {
myInfo.PoliticalOutlook = politiToInt(info[17]) //政治面貌(1:群众;2:无党派;3:台盟会员;4:九三社员;5:致公党员;6:农工党员;7:民进会员;8:民建会员;9:民盟盟员;10:民革会员,11:共青团员;12:预备党员;13:中共党员)"`
}
if info[329] != "" {
myInfo.PoliticalOutlook = politiToInt(info[329]) //政治面貌(1:群众;2:无党派;3:台盟会员;4:九三社员;5:致公党员;6:农工党员;7:民进会员;8:民建会员;9:民盟盟员;10:民革会员,11:共青团员;12:预备党员;13:中共党员)"`
}
myInfo.MaritalstatusCn = info[15] //婚姻状况汉字说明"`
myInfo.ConstellationingCn = info[22] //星座汉字说明"`
myInfo.PoliticalOutlookCn = info[17] //政治面貌汉字说明"`
myInfo.HealthCn = info[16] //健康状况中文说明"`
// myInfo.NameUsedBefore = //曾用名"`
myInfo.CareerPlanning = info[297] //职业生涯规划"`
myInfo.HelpObtained = info[299] //个人期望从组织获得的帮助"`
myInfo.Hobby = info[23] //爱好"`
myInfo.DomicileType = info[18] //户籍类型
if info[27] == "是" {
myInfo.IdCardnoLongTerm = 1 //身份证是否长期有效(1:是;2:否)
} else {
myInfo.IdCardnoLongTerm = 2 //身份证是否长期有效(1:是;2:否)
}
myInfo.MobileShortNumber = info[30] //手机小号
myInfo.Channel = JoinJobChanel(info[300]) //入职渠道(1:社会招聘;2:校园招聘;3:内部推荐)
myInfo.BloodType = info[21] //血型
overall.CONSTANT_DB_HR.Create(&myInfo)
} else { //附属内容存在,进行编辑。
editCont := overallhandle.MapOut()
editCont["`idcardno`"] = info[24]
editCont["`mobilephone`"] = info[29]
editCont["`email`"] = info[33]
editCont["`gender`"] = genderToInt(info[11])
if info[12] != "" {
editCont["`birthday`"] = overallhandle.ExcelDateToDate(info[12]).Unix()
}
editCont["`myfolk`"] = info[14]
editCont["`nativeplace`"] = info[20]
if info[25] != "" {
editCont["`idcardstartdate`"] = overallhandle.ExcelDateToDate(info[25]).Unix()
}
if info[26] != "" {
editCont["`idcardenddate`"] = overallhandle.ExcelDateToDate(info[26]).Unix()
}
editCont["`idcardaddress`"] = info[28]
editCont["`health`"] = healthToInt(info[16])
editCont["`maritalstatus`"] = maritalstatusToInt(info[15])
editCont["`currentresidence`"] = info[19]
editCont["`constellationing`"] = consteToInt(info[22])
if info[87] == "是" {
editCont["`isdoubleworker`"] = 1 //是否双职工(1:是;2:否)"`
g.WorkingCoupleRongXin(info, true)
} else {
editCont["`isdoubleworker`"] = 2 //是否双职工(1:是;2:否)"`
g.WorkingCoupleRongXin(info, false)
}
// if info[320] == "是" {
// editCont["`isveterans`"] = 1 //是否为退役军人(1:是;2:否)"`
// g.EditVeterans(info, true)
// } else {
// editCont["`isveterans`"] = 2
// g.EditVeterans(info, false)
// }
// editCont["`veteransnumber`"] = info[321]
if info[301] != "" {
editCont["`jobstartdate`"] = overallhandle.ExcelDateToDate(info[301]).Unix()
}
if info[303] != "" {
editCont["`entrydate`"] = overallhandle.ExcelDateToDate(info[303]).Unix()
}
if info[17] != "" {
editCont["`political_outlook`"] = politiToInt(info[17])
}
if info[329] != "" {
editCont["`political_outlook`"] = politiToInt(info[329])
}
editCont["`maritalstatus_cn`"] = info[15]
editCont["`constellationing_cn`"] = info[22]
editCont["`political_outlook_cn`"] = info[17]
editCont["`health_cn`"] = info[16]
editCont["`career_planning`"] = info[297]
editCont["`help_obtained`"] = info[299]
editCont["`hobby`"] = info[23]
editCont["`domicile_type`"] = info[18]
if info[27] == "是" {
editCont["`idCardnoLongTerm`"] = 1 //身份证是否长期有效(1:是;2:否)
// g.WorkingCouple(info, true)
} else {
editCont["`idCardnoLongTerm`"] = 2 //身份证是否长期有效(1:是;2:否)
// g.WorkingCouple(info, false)
}
editCont["`mobileShortNumber`"] = info[30]
editCont["`channel`"] = JoinJobChanel(info[300])
editCont["`bloodType`"] = info[21]
editCont["`time`"] = time.Now().Unix()
myInfo.EiteCont(map[string]interface{}{"`key`": g.UserKey}, editCont)
}
}
/*
*
@ 作者: 秦东
@ 时间: 2024-08-27 08:47:04
@ 功能: 双职工处理
@ 参数
#info 表单内容
#isTrue 是否为双职工
@ 返回值
#
@ 方法原型
#
*/
func (g *GroupParsingData) WorkingCoupleRongXin(info map[int]string, isTrue bool) {
var doubleWorkMan []models.DoubleWorker
overall.CONSTANT_DB_HR.Where("`key` = ?", g.UserKey).Find(&doubleWorkMan) //获取旧数据
if isTrue {
if len(doubleWorkMan) < 1 { //无记录,新增
NewAddDoubleWorkRongXin(g.UserKey, g.UserNum, info)
} else {
oldId := int64(0)
for _, v := range doubleWorkMan {
if v.Name == info[88] {
oldId = v.Id
}
}
if oldId != 0 { //存在,数据编辑
editInfo := overallhandle.MapOut()
editInfo["`name`"] = info[88]
editInfo["`company`"] = info[89]
editInfo["`department`"] = info[90]
editInfo["`position`"] = info[92]
editInfo["`workPosit`"] = info[92]
editInfo["`workUnit`"] = info[91]
// editInfo["`levele`"] = info[89]
if info[93] != "" {
editInfo["`joinTime`"] = overallhandle.ExcelDateToDate(info[93]).Unix()
}
editInfo["`tel`"] = info[94]
editInfo["`time`"] = time.Now().Unix()
editInfo["`state`"] = 1
var editCont models.DoubleWorker
editCont.EiteCont(map[string]interface{}{"`id`": oldId}, editInfo)
} else {
NewAddDoubleWorkRongXin(g.UserKey, g.UserNum, info)
}
}
} else { //不是双职工,软删除老数据
if len(doubleWorkMan) > 0 {
var delDoubleWork models.DoubleWorker
delDoubleWork.EiteCont(map[string]interface{}{"`key`": g.UserKey}, map[string]interface{}{"`state`": 3})
}
}
}
/*
*
@ 作者: 秦东
@ 时间: 2024-08-27 09:25:01
@ 功能: 新增双职工(荣信模版)
@ 参数
#userKey 人员KEY
#userNum 人员工号
#info 电子表格信息
@ 返回值
#
@ 方法原型
#
*/
func NewAddDoubleWorkRongXin(userKey int64, userNum string, info map[int]string) {
var inSetInfo models.DoubleWorker
inSetInfo.Key = userKey //
inSetInfo.Number = userNum //"`
inSetInfo.Name = info[88] //姓名"`
inSetInfo.Company = info[89] //所在公司"`
inSetInfo.Department = info[90] //所在部门"`
inSetInfo.Position = info[92] //所在岗位"`
inSetInfo.WorkUnit = info[91]
inSetInfo.WorkPosit = info[92]
// inSetInfo.Levele = info[89]
if info[93] != "" {
inSetInfo.JoinTime = overallhandle.ExcelDateToDate(info[93]).Unix()
}
inSetInfo.Tel = info[94] //联系方式"`
inSetInfo.Time = time.Now().Unix() //创建时间"`
inSetInfo.State = 1 //状态(1:启用;2:禁用;3:删除)`
overall.CONSTANT_DB_HR.Create(&inSetInfo)
}