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.
257 lines
6.2 KiB
257 lines
6.2 KiB
|
2 years ago
|
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()))
|
||
|
|
}
|
||
|
|
}
|