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())) } }