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.

256 lines
6.2 KiB

package personnelapi
import (
"fmt"
"hr_server/grocerystore"
"hr_server/models"
"hr_server/overall"
"hr_server/overall/overallhandle"
"path"
"strconv"
"strings"
"time"
"encoding/json"
"github.com/360EntSecGroup-Skylar/excelize"
"github.com/gin-gonic/gin"
)
/*
*
@ 作者: 秦东
@ 时间: 2024-02-03 15:38:58
@ 功能: 解析上传列表
@ 参数
#
@ 返回值
#
@ 方法原型
#
*/
func (s *StaffApi) UploadUserFilesRedis(c *gin.Context) {
fileInfo, fileHeader, fileErr := c.Request.FormFile("file")
if fileErr != nil {
overallhandle.Result(1, fileErr, c)
return
}
tageExt := path.Ext(fileHeader.Filename)
fmt.Printf("tageExt:%v\n", tageExt)
fileType := overallhandle.JudgeUpFileType(tageExt)
if fileType != 5 {
overallhandle.Result(1, fileType, c, "您上传的不是电子表格!请上传正确的文件!")
return
}
xlsx, err := excelize.OpenReader(fileInfo)
if err != nil {
overallhandle.Result(2, err, c)
return
}
redisListKey := fmt.Sprintf("ExcelImport:PeopleList:%v_%v", overall.CONSTANT_CONFIG.RedisPrefixStr.Alias, overallhandle.OnlyOneNumber(1))
var userInfoData GroupParsingData
totalNum, meritsYearIng, rewPunYearsIng := userInfoData.ReadExcelRedis(xlsx, redisListKey)
sendData := overallhandle.MapOut()
sendData["redisListKey"] = redisListKey
sendData["totalNum"] = totalNum
sendData["meritsYearIng"] = meritsYearIng
sendData["rewPunYearsIng"] = rewPunYearsIng
overallhandle.Result(0, sendData, c)
}
// ReadExcel .读取excel 转成切片
func (g *GroupParsingData) ReadExcelRedis(xlsx *excelize.File, redisKey string) (totalNum int64, meritsYearIng, rewPunYearsIng map[int]int) {
rows := xlsx.GetRows(xlsx.GetSheetName(xlsx.GetActiveSheetIndex()))
isDateYear := time.Now().Year()
//获取绩效年度
meritsYear := make(map[int]int)
if rows[1][289] != "" {
yearAry := strings.Split(rows[1][289], "年")
if len(yearAry) > 0 {
yearVal, _ := strconv.Atoi(yearAry[0])
meritsYear[0] = yearVal
}
} else {
meritsYear[0] = isDateYear - 3
}
if rows[1][290] != "" {
yearAry := strings.Split(rows[1][290], "年")
if len(yearAry) > 0 {
yearVal, _ := strconv.Atoi(yearAry[0])
meritsYear[1] = yearVal
}
} else {
meritsYear[1] = isDateYear - 2
}
if rows[1][291] != "" {
yearAry := strings.Split(rows[1][291], "年")
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][299] != "" {
jcYearAry := strings.Split(rows[2][299], "奖惩")
if len(jcYearAry) > 0 {
jcYearVal, _ := strconv.Atoi(jcYearAry[0])
rewPunYears[0] = jcYearVal
}
} else {
rewPunYears[0] = isDateYear - 3
}
if rows[2][304] != "" {
jcYearAry := strings.Split(rows[2][304], "奖惩")
if len(jcYearAry) > 0 {
jcYearVal, _ := strconv.Atoi(jcYearAry[0])
rewPunYears[1] = jcYearVal
}
} else {
rewPunYears[1] = isDateYear - 2
}
if rows[2][309] != "" {
jcYearAry := strings.Split(rows[2][309], "奖惩")
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++
}
}
// redisVal, err := redisClient.Lindex(redisKey, 9)
// fmt.Printf("row:%v,%v\n", redisVal, err)
return
}
/*
*
@ 作者: 秦东
@ 时间: 2024-02-03 16:22:38
@ 功能: 解析Redis列表中的数据
@ 参数
#
@ 返回值
#
@ 方法原型
#
*/
func (s *StaffApi) AnalysisRedisExelect(c *gin.Context) {
var requestData AnaRedisKB
err := c.ShouldBindJSON(&requestData)
if err != nil {
overallhandle.Result(100, err, c)
return
}
redisClient := grocerystore.RunRedis(overall.CONSTANT_REDIS4)
redisListLenght, err := redisClient.Llen(requestData.RedisListKey)
if err != nil {
overallhandle.Result(1, err, c, "数据获取识别!没有找到数据!")
return
}
redisVal, err := redisClient.Lindex(requestData.RedisListKey, int64(requestData.Number))
if err != nil {
overallhandle.Result(1, err, c, "数据获取识别!没有找到数据!")
return
}
var jieguo []string
err = json.Unmarshal([]byte(redisVal), &jieguo)
if err != nil {
overallhandle.Result(1, err, c, "数据格式不正取!")
}
manCont := make(map[int]string)
for i, v := range jieguo {
manCont[i] = v
}
meritsYear := make(map[int]int)
for i, v := range requestData.MeritsYearIng {
iInt, _ := strconv.Atoi(i)
meritsYear[iInt] = v
}
rewPunYears := make(map[int]int)
for i, v := range requestData.RewPunYearsIng {
iInt, _ := strconv.Atoi(i)
rewPunYears[iInt] = v
}
var groupManCont GroupParsingData
groupManCont.GroupParsingDataInfoRedis(manCont, meritsYear, rewPunYears)
// fmt.Printf("执行完222毕删除列表键%v-%v-%v\n", redisListLenght, requestData.Number, redisListLenght-1 == int64(requestData.Number))
if redisListLenght-1 == int64(requestData.Number) {
//执行完毕删除列表键
redisClient.Lrange(requestData.RedisListKey, 0, -1)
redisClient.DelKey(requestData.RedisListKey)
// fmt.Printf("执行完毕删除列表键%v\n", requestData.RedisListKey)
}
overallhandle.Result(0, groupManCont, c)
}
/*
*
@ 作者: 秦东
@ 时间: 2024-01-30 08:10:16
@ 功能: 分组数据解析
@ 参数
#info //人员信息
#meritsYear 绩效年度
#rewPunYearsmap 奖惩年度
@ 返回值
#
@ 方法原型
#
*/
func (g *GroupParsingData) GroupParsingDataInfoRedis(list map[int]string, meritsYear, rewPunYearsmap map[int]int) {
g.IsOk = false
g.UserNum = list[1]
if list[1] != "" {
var myCont models.PersonArchives
err := myCont.GetCont(map[string]interface{}{"`number`": list[1]}, "`key`")
if err != nil {
g.IsOk = true
} else {
g.UserKey = myCont.Key
}
g.ProcessMainTable(list, meritsYear, rewPunYearsmap)
} else {
g.Msg = append(g.Msg, fmt.Sprintf("序号:%v--->%v:没有工号--->%v", list[0], list[2], time.Now().Unix()))
}
}