package menus import ( "appPlatform/middleware/grocerystore" "appPlatform/models/modelshr" "appPlatform/models/teamlog" "appPlatform/overall" "appPlatform/overall/publicmethod" "encoding/json" "fmt" "sort" "strconv" "time" "github.com/gin-gonic/gin" ) /* * @ 作者: 秦东 @ 时间: 2025-01-21 15:41:06 @ 功能: 添加工作时间设置 @ 参数 # @ 返回值 # @ 方法原型 # */ func (a *ApiMethod) AddTeamTime(c *gin.Context) { var requestData SetWorkTime err := c.ShouldBindJSON(&requestData) if err != nil { publicmethod.Result(100, err, c) return } if requestData.Name == "" { publicmethod.Result(101, requestData, c) return } if len(requestData.List) < 1 { publicmethod.Result(1, requestData, c, "没有划分工作时间段!") return } isTrue := true for _, v := range requestData.List { if v.Title == "" || v.StartTime == "" || v.EndTime == "" { isTrue = false } } if !isTrue { publicmethod.Result(1, requestData, c, "您划分的工作时间段,有不符合规定的!请改正!") return } timeKey := publicmethod.GetUUid(5) //工作时间段类型 var workTimeType modelshr.WorkTimeType //判断是否有同类型的安排 err = workTimeType.GetCont(map[string]interface{}{"`name`": requestData.Name}, "`id`") if err == nil { publicmethod.Result(1, requestData, c, "该名称已经存在!请不要重复添加!") return } workTimeType.Id = timeKey workTimeType.Name = requestData.Name //type:string comment:类型名称 version:2022-11-13 16:57 workTimeType.State = 1 //类型:(1:启用;2:禁用;3:删除) version:2022-11-13 16:57 workTimeType.Time = time.Now().Unix() //工作时段 var workTimeList []modelshr.WorkingTimePeriod for i, lv := range requestData.List { var workTimeCont modelshr.WorkingTimePeriod workTimeCont.Name = lv.Title //type:string comment:工作时间段名称 version:2022-11-13 16:59 workTimeCont.Time = time.Now().Unix() //type:int64 comment:编辑时间;0 version:2022-11-13 16:59 workTimeCont.TypeId = timeKey //type:int64 comment:类型 version:2022-11-13 16:59 workTimeCont.StartTime = lv.StartTime //type:string comment:开始时间 version:2022-11-13 16:59 workTimeCont.EndTime = lv.EndTime //type:string comment:结束时间 version:2022-11-13 16:59 workTimeCont.State = 1 workTimeCont.Sort = i + 1 workTimeList = append(workTimeList, workTimeCont) } err = overall.CONSTANT_DB_HR.Create(&workTimeType).Error if err != nil { publicmethod.Result(104, requestData, c) return } WriteWorkTime(timeKey, workTimeList) publicmethod.Result(0, requestData, c) } /* * @ 作者: 秦东 @ 时间: 2022-12-13 18:06:08 @ 功能: 写入工作时段 @ 参数 #key 类型ID #workTimeList 时段列表 @ 返回值 #err 返回状态 @ 方法原型 # WriteWorkTime(key int64, workTimeList []modelshr.WorkingTimePeriod) (err error) */ func WriteWorkTime(key int64, workTimeList []modelshr.WorkingTimePeriod) (err error) { var workTimeCont modelshr.WorkingTimePeriod workTimeCont.DelCont(map[string]interface{}{"`type_id`": key}) err = overall.CONSTANT_DB_HR.Create(&workTimeList).Error return } /* * @ 作者: 秦东 @ 时间: 2022-12-14 09:20:07 @ 功能: 编辑时间段 @ 参数 # @ 返回值 # @ 方法原型 # */ func (a *ApiMethod) EditWorkTimeCont(c *gin.Context) { var requestData EditWorkTimeConts err := c.ShouldBindJSON(&requestData) if err != nil { publicmethod.Result(100, err, c) return } if requestData.Id == "" { publicmethod.Result(101, requestData, c) return } if requestData.Name == "" { publicmethod.Result(101, requestData, c) return } if len(requestData.List) < 1 { publicmethod.Result(1, requestData, c, "没有划分工作时间段!") return } isTrue := true for _, v := range requestData.List { if v.Title == "" || v.StartTime == "" || v.EndTime == "" { isTrue = false } // beginTime := fmt.Sprintf("%v",) } if !isTrue { publicmethod.Result(1, requestData, c, "您划分的工作时间段,有不符合规定的!请改正!") return } wher := publicmethod.MapOut[string]() wher["id"] = requestData.Id var oldCont modelshr.WorkTimeType err = oldCont.GetCont(wher) if err != nil { publicmethod.Result(107, err, c) return } editCont := publicmethod.MapOut[string]() editCont["name"] = requestData.Name // editCont["rule"] = requestData.Rule editCont["time"] = time.Now().Unix() err = oldCont.EiteCont(wher, editCont) if err != nil { publicmethod.Result(106, err, c) return } //工作时段 EditPeriodTime(oldCont.Id, requestData.List) publicmethod.Result(0, err, c) } /* * @ 作者: 秦东 @ 时间: 2022-12-16 17:10:13 @ 功能: 编辑工作时段 @ 参数 #typeId 类型识别符 #ruleList 分班时间表 @ 返回值 # @ 方法原型 # */ func EditPeriodTime(typeId int64, ruleList []TemaTimes) { var workTimeCont modelshr.WorkingTimePeriod workTimeListCont, _ := workTimeCont.ContMap(map[string]interface{}{"`type_id`": typeId}) var editId []string var saveData []modelshr.WorkingTimePeriod for i, v := range ruleList { if v.Id != "" { var workTimeContJudge modelshr.WorkingTimePeriod err := workTimeContJudge.GetCont(map[string]interface{}{"`id`": v.Id}) if err == nil { if publicmethod.IsInTrue[string](v.Id, editId) == false { editId = append(editId, v.Id) } editCont := publicmethod.MapOut[string]() editCont["`sort`"] = i + 1 editCont["`state`"] = 1 editCont["`name`"] = v.Title editCont["`time`"] = time.Now().Unix() editCont["`start_time`"] = v.StartTime editCont["`end_time`"] = v.EndTime var workTimeContEs modelshr.WorkingTimePeriod workTimeContEs.EiteCont(map[string]interface{}{"`id`": v.Id}, editCont) } else { var workTimeContAdd modelshr.WorkingTimePeriod workTimeContAdd.Sort = i + 1 workTimeContAdd.Name = v.Title //type:string comment:工作时间段名称 version:2022-11-13 16:59 workTimeContAdd.Time = time.Now().Unix() //type:int64 comment:编辑时间;0 version:2022-11-13 16:59 workTimeContAdd.TypeId = typeId //type:int64 comment:类型 version:2022-11-13 16:59 workTimeContAdd.StartTime = v.StartTime //type:string comment:开始时间 version:2022-11-13 16:59 workTimeContAdd.EndTime = v.EndTime //type:string comment:结束时间 version:2022-11-13 16:59 saveData = append(saveData, workTimeContAdd) } } else { var workTimeContAdd modelshr.WorkingTimePeriod workTimeContAdd.Name = v.Title //type:string comment:工作时间段名称 version:2022-11-13 16:59 workTimeContAdd.Time = time.Now().Unix() //type:int64 comment:编辑时间;0 version:2022-11-13 16:59 workTimeContAdd.TypeId = typeId //type:int64 comment:类型 version:2022-11-13 16:59 workTimeContAdd.StartTime = v.StartTime //type:string comment:开始时间 version:2022-11-13 16:59 workTimeContAdd.EndTime = v.EndTime //type:string comment:结束时间 version:2022-11-13 16:59 workTimeContAdd.Sort = i + 1 saveData = append(saveData, workTimeContAdd) } } //将不在使用的项目删除 for _, dv := range workTimeListCont { idStr := strconv.FormatInt(dv.Id, 10) if publicmethod.IsInTrue[string](idStr, editId) == false { editCont := publicmethod.MapOut[string]() editCont["`state`"] = 3 editCont["`time`"] = time.Now().Unix() var workTimeContEss modelshr.WorkingTimePeriod workTimeContEss.EiteCont(map[string]interface{}{"`id`": dv.Id}, editCont) } } if len(saveData) > 0 { overall.CONSTANT_DB_HR.Create(&saveData) } } /* * @ 作者: 秦东 @ 时间: 2025-01-23 09:41:25 @ 功能: 编辑制度轮询规则 @ 参数 # @ 返回值 # @ 方法原型 # */ func (a *ApiMethod) SaveCycleRules(c *gin.Context) { var requestData JieShoeTeamsRules c.ShouldBindJSON(&requestData) if requestData.Id == "" { publicmethod.Result(101, requestData, c) return } if len(requestData.List) <= 0 { publicmethod.Result(101, requestData, c) return } teamIsOk := true cycleIsOk := false for _, v := range requestData.List { if v.Id == "" || len(v.List) <= 0 { teamIsOk = false } for _, lv := range v.List { if lv.Id != 0 { cycleIsOk = true } } } if !teamIsOk || !cycleIsOk { publicmethod.Result(101, requestData, c) return } var teamsRulesInfo modelshr.TeamsRules teamsRulesInfo.DelCont(map[string]interface{}{"`ruleTypeId`": requestData.Id}) var sendMap []interface{} for _, v := range requestData.List { for _, lv := range v.List { var teamsRulesInfoNew modelshr.TeamsRules teamsRulesInfoNew.RuleTypeId, _ = strconv.ParseInt(requestData.Id, 10, 64) teamsRulesInfoNew.RuleTypeName = requestData.Name teamsRulesInfoNew.Cycle = requestData.Cycle teamsRulesInfoNew.TeamsId, _ = strconv.ParseInt(v.Id, 10, 64) teamsRulesInfoNew.TeamsName = v.Name teamsRulesInfoNew.CycleSort = lv.Id teamsRulesInfoNew.CycleName = lv.Name teamsRulesInfoNew.CycleWorkTime, _ = strconv.ParseInt(lv.Value, 10, 64) if lv.Value != "" { teamsRulesInfoNew.CycleWorkName = lv.Days } teamsRulesInfoNew.Time = time.Now().Unix() sendMap = append(sendMap, teamsRulesInfoNew) overall.CONSTANT_DB_HR.Create(&teamsRulesInfoNew) } } publicmethod.Result(0, sendMap, c) } /* * @ 作者: 秦东 @ 时间: 2025-01-23 10:49:25 @ 功能: 获取轮询规则 @ 参数 # @ 返回值 # @ 方法原型 # */ func (a *ApiMethod) GainCycleRule(c *gin.Context) { var requestData publicmethod.PublicId err := c.ShouldBindJSON(&requestData) var sendData JieShoeTeamsRules if err != nil { publicmethod.Result(200, sendData, c) return } if requestData.Id == "" { publicmethod.Result(200, sendData, c) return } var teamsRulesList []modelshr.TeamsRules overall.CONSTANT_DB_HR.Where("`ruleTypeId` = ?", requestData.Id).Find(&teamsRulesList) if len(teamsRulesList) < 1 { publicmethod.Result(200, sendData, c) return } var workTimeTypeInfo modelshr.WorkTimeType err = workTimeTypeInfo.GetCont(map[string]interface{}{"`id`": requestData.Id}, "`name`") if err != nil { publicmethod.Result(200, sendData, c) return } sendData.Id = requestData.Id sendData.Name = workTimeTypeInfo.Name // var workPeriodList []modelshr.WorkingTimePeriod // overall.CONSTANT_DB_HR.Where("`type_id` = ?", requestData.Id).Find(&workPeriodList) // if len(workPeriodList) < 1 { // publicmethod.Result(200, sendData, c) // return // } var teamIdAry []int64 var teamsAry []RulesInfo for _, v := range teamsRulesList { if !publicmethod.IsInTrue[int64](v.TeamsId, teamIdAry) { teamIdAry = append(teamIdAry, v.TeamsId) var teamsInfo RulesInfo teamsInfo.Id = strconv.FormatInt(v.TeamsId, 10) teamsInfo.Name = v.TeamsName teamsAry = append(teamsAry, teamsInfo) } } if len(teamsAry) < 1 { publicmethod.Result(200, sendData, c) return } for i, v := range teamsAry { for _, tv := range teamsRulesList { tvId := strconv.FormatInt(tv.TeamsId, 10) // fmt.Printf("%v------%v\n", tvId, v.Id) if tvId == v.Id { var cycleInfo CycleRulesInfo cycleInfo.Id = tv.CycleSort cycleInfo.Name = tv.CycleName if tv.CycleWorkTime != 0 { cycleInfo.Value = strconv.FormatInt(tv.CycleWorkTime, 10) } fmt.Printf("%v------%v------%v\n", tvId, tv.CycleWorkTime, cycleInfo.Value) cycleInfo.Days = tv.CycleWorkName sendData.Cycle = tv.Cycle teamsAry[i].List = append(teamsAry[i].List, cycleInfo) } } } sendData.List = teamsAry publicmethod.Result(0, sendData, c) } /* * @ 作者: 秦东 @ 时间: 2025-01-23 14:47:50 @ 功能: 解析日历生成排班顺序(新版本) @ 参数 # @ 返回值 # @ 方法原型 # */ func (a *ApiMethod) AnalysisMonthRulersNews(c *gin.Context) { var requestData AnYuePaiBan c.ShouldBindJSON(&requestData) if requestData.OrgId == "" { publicmethod.Result(1, requestData, c, "未知行政单位") return } var sendMonthList []interface{} orgIdInt, _ := strconv.ParseInt(requestData.OrgId, 10, 64) menuCont, cureeOrgId, err := CureeRunRules(orgIdInt) fmt.Printf("%v\n", cureeOrgId) if err != nil { publicmethod.Result(200, sendMonthList, c) return } //获取源点起始工作时间段 menuCont.BegainTime = publicmethod.UnixTimeToDay(menuCont.StartTime, 14) menuCont.TypeIdStr = strconv.FormatInt(menuCont.TypeId, 10) //获取倒班规则 var paiBanType modelshr.WorkTimeType paiBanType.GetCont(map[string]interface{}{"`id`": menuCont.TypeId}, " `name`") menuCont.TypeName = paiBanType.Name //作息时间 var zuoXiTime []modelshr.WorkingTimePeriod overall.CONSTANT_DB_HR.Where("`state` = 1 AND `type_id` = ?", menuCont.TypeId).Order("`sort` ASC").Find(&zuoXiTime) //轮询规则 var lunXunShiXu []modelshr.TeamsRules overall.CONSTANT_DB_HR.Where("`ruleTypeId` = ?", menuCont.TypeId).Find(&lunXunShiXu) if len(zuoXiTime) < 1 || len(lunXunShiXu) < 1 { for _, v := range requestData.MonthAllDay { var listSynv CalendarList sendMonthList = append(sendMonthList, TimeHaveAry(v, listSynv.List)) } publicmethod.Result(200, sendMonthList, c) return } cycle := 1 for _, v := range lunXunShiXu { cycle = v.Cycle } // val,_:=json.Marshal(menuCont) // sendMa := publicmethod.MapOut[string]() // sendMa["menuCont"] = menuCont // sendMa["lunXunShiXu"] = lunXunShiXu // sendMa["orgIdInt"] = orgIdInt // publicmethod.Result(200, sendMa, c) // return //Step 4: 计算当前时间段与原点关系 switch cycle { case 2: //作息时间 var zuoXiTimeOne modelshr.WorkingTimePeriod overall.CONSTANT_DB_HR.Where("`state` = 1 AND `type_id` = ?", menuCont.TypeId).Order("`sort` ASC").First(&zuoXiTimeOne) for _, v := range requestData.MonthAllDay { var listSynv CalendarList inDate := menuCont.changBaiBan(v, zuoXiTimeOne, lunXunShiXu) listSynv.List = append(listSynv.List, inDate) sendMonthList = append(sendMonthList, TimeHaveAry(v, listSynv.List)) } default: lastDayNumber := 0 var starTemasTime publicmethod.DateTimeTotimes starTemasTime.BaisStrToTime(menuCont.BegainTime) for _, v := range requestData.MonthAllDay { var listSynv CalendarList for _, wv := range v { var wvTimeAll publicmethod.DateTimeTotimes wvTimeAll.BaisStrToTime(wv.Date) if wvTimeAll.AllTime < starTemasTime.AllTime { lastDayNumber++ } else if wvTimeAll.AllTime == starTemasTime.AllTime { listAry := menuCont.RuleYuanDianRunNew(wv, wvTimeAll, zuoXiTime, lunXunShiXu) inDate := publicmethod.MapOut[string]() inDate[wv.Date] = listAry listSynv.List = append(listSynv.List, inDate) } else { sjc := ((wvTimeAll.AllTime - starTemasTime.AllTime) / 86400) + 1 listAry := menuCont.SpecifyDateTeamsNew(wv, wvTimeAll, zuoXiTime, lunXunShiXu, sjc) inDate := publicmethod.MapOut[string]() inDate[wv.Date] = listAry listSynv.List = append(listSynv.List, inDate) } } sendMonthList = append(sendMonthList, TimeHaveAry(v, listSynv.List)) } } publicmethod.Result(0, sendMonthList, c) } /* * @ 作者: 秦东 @ 时间: 2025-01-21 08:52:46 @ 功能: 原点日期排班设定 @ 参数 #dataInfo 当前日期属性 #timeVal 当天日期参数 #zuoXiTime 作息时间 #lunXunShiXu 轮询列表 #RedisKey说明 SchedulingTeam:StartingPoint_行政组织_年月日_倒班制度 @ 返回值 #logMap 当天安排 @ 方法原型 # */ func (g *GenesInfo) RuleYuanDianRunNew(dataInfo CalendarStructure, timeVal publicmethod.DateTimeTotimes, zuoXiTime []modelshr.WorkingTimePeriod, lunXunShiXu []modelshr.TeamsRules) (logMap []map[string]interface{}) { dayRedisKey := fmt.Sprintf("SchedulingTeam:StartingPoint_%v_%v%v%v_%v_1", g.OrgId, timeVal.Years, timeVal.Months, timeVal.Days, g.TypeId) redisClient := grocerystore.RunRedis(overall.CONSTANT_REDIS2) isTrue, logContent := redisClient.Get(dayRedisKey) var dayTimeLog []teamlog.TeamsLog if isTrue { //redis存在获取redis数据 json.Unmarshal([]byte(logContent), &logMap) json.Unmarshal([]byte(logContent), &dayTimeLog) // fmt.Printf("Step1: %v\n", logContent) } else { //redis不存在从数据库中获取数据 overall.CONSTANT_DB_TeamsLog.Model(&teamlog.TeamsLog{}).Where("`orgId` = ? AND `years` = ? AND `months` = ? AND `days` = ? AND `ismId` = ?", g.OrgId, timeVal.Years, timeVal.Months, timeVal.Days, g.TypeId).Order("`sort` ASC").Find(&logMap) if len(logMap) > 0 { //数据库中存在直接用数据的数据 redisClient.SetRedisTime(5256000) jsonVal, _ := json.Marshal(logMap) redisClient.Set(dayRedisKey, string(jsonVal)) json.Unmarshal([]byte(jsonVal), &dayTimeLog) } else { //数据库中不存在开始计算 sort.Slice(zuoXiTime, func(i, j int) bool { return zuoXiTime[i].StartTime < zuoXiTime[j].StartTime }) for _, v := range zuoXiTime { cyclesInfo := GainRuleCycleTeams(lunXunShiXu, 1, v.Id) fmt.Printf("cyclesInfo--->%v\n", cyclesInfo) var logInfo teamlog.TeamsLog overall.CONSTANT_DB_TeamsLog.Where("`orgId` = ? AND `years` = ? AND `months` = ? AND `days` = ? AND `ismId` = ? AND `rankId` = ? AND `rulesId` = ? AND `teamsId` = ?", g.OrgId, timeVal.Years, timeVal.Months, timeVal.Days, g.TypeId, v.Id, cyclesInfo.TeamsId, cyclesInfo.TeamsId).Order("`sort` ASC").First(&logInfo) if logInfo.Id == 0 { logInfo.OrgId = g.OrgId //班组ID"` logInfo.TeamsTime = timeVal.AllTime //日期"` logInfo.IsmId = g.TypeId //制度ID"` logInfo.RankId = v.Id //班次"` logInfo.RulesId = cyclesInfo.TeamsId //轮询规则Id"` logInfo.Days, _ = strconv.Atoi(timeVal.Days) //日"` logInfo.Months, _ = strconv.Atoi(timeVal.Months) //月"` logInfo.Years, _ = strconv.Atoi(timeVal.Years) //年"` logInfo.Time = time.Now().Unix() //编辑时间"` logInfo.IsmName = g.TypeName logInfo.RankName = v.Name logInfo.RulesName = cyclesInfo.TeamsName logInfo.Sort = v.Sort logInfo.TeamsId = cyclesInfo.TeamsId logInfo.StartTime = v.StartTime logInfo.EndTime = v.EndTime overall.CONSTANT_DB_TeamsLog.Create(&logInfo) } dayTimeLog = append(dayTimeLog, logInfo) jsonVal, _ := json.Marshal(logInfo) valMap := publicmethod.MapOut[string]() json.Unmarshal(jsonVal, &valMap) logMap = append(logMap, valMap) } redisClient.SetRedisTime(5256000) jsonVal, _ := json.Marshal(logMap) redisClient.Set(dayRedisKey, string(jsonVal)) } } if len(dayTimeLog) > 0 { allRulesLog = dayTimeLog[len(dayTimeLog)-1] } return } /* * @ 作者: 秦东 @ 时间: 2025-01-23 16:03:33 @ 功能: 获取轮询中的班组 #lunXunShiXu 轮询规则 #sort 第几步 #cycleWorkTime 工作段Id */ func GainRuleCycleTeams(lunXunShiXu []modelshr.TeamsRules, sort int64, cycleWorkTime int64) (cycleInfo modelshr.TeamsRules) { fmt.Printf("\n\n\n\n\n 获取轮询中的班组---------sort:%v--------cycleWorkTime:%v----lunXunShiXu:%v--》\n\n\n\n\n ", sort, cycleWorkTime, lunXunShiXu) for _, v := range lunXunShiXu { if v.CycleSort == sort && v.CycleWorkTime == cycleWorkTime { cycleInfo = v } } return } /* * @ 作者: 秦东 @ 时间: 2025-01-23 16:27:05 @ 功能: @ 参数 # @ 返回值 # @ 方法原型 # */ func (g *GenesInfo) SpecifyDateTeamsNew(dataInfo CalendarStructure, timeVal publicmethod.DateTimeTotimes, zuoXiTime []modelshr.WorkingTimePeriod, lunXunShiXu []modelshr.TeamsRules, differeTime int64) (logMap []map[string]interface{}) { // differeTime = differeTime + 1 fmt.Printf("\n\n\n\n\ndataInfo---1---->%v---->%v---->%v\n\n\n\n\n", timeVal.Years, timeVal.Months, timeVal.Days) dayRedisKey := fmt.Sprintf("SchedulingTeam:StartingPoint_%v_%v%v%v_%v_1", g.OrgId, timeVal.Years, timeVal.Months, timeVal.Days, g.TypeId) redisClient := grocerystore.RunRedis(overall.CONSTANT_REDIS2) isTrue, logContent := redisClient.Get(dayRedisKey) var dayTimeLog []teamlog.TeamsLog // isTrue = false if isTrue { //redis存在获取redis数据 json.Unmarshal([]byte(logContent), &logMap) json.Unmarshal([]byte(logContent), &dayTimeLog) // fmt.Printf("Step1: %v\n", logContent) } else { //redis不存在从数据库中获取数据 var teamIdAry []int64 for _, v := range lunXunShiXu { if !publicmethod.IsInTrue[int64](v.CycleWorkTime, teamIdAry) { teamIdAry = append(teamIdAry, v.CycleWorkTime) } } teamMap := make(map[int64][]modelshr.TeamsRules) fmt.Printf("teanAry---3---->%v\n", teamIdAry) for _, v := range teamIdAry { var teanAry []modelshr.TeamsRules for _, tv := range lunXunShiXu { if v == tv.CycleWorkTime { teanAry = append(teanAry, tv) } } fmt.Printf("teanAry------->%v\n", teanAry) if len(teanAry) > 0 { teamMap[v] = append(teamMap[v], teanAry...) } fmt.Printf("teanAry---1---->%v\n", teamMap) } overall.CONSTANT_DB_TeamsLog.Model(&teamlog.TeamsLog{}).Where("`orgId` = ? AND `years` = ? AND `months` = ? AND `days` = ? AND `ismId` = ?", g.OrgId, timeVal.Years, timeVal.Months, timeVal.Days, g.TypeId).Order("`sort` ASC").Find(&logMap) if len(logMap) > 0 { //数据库中存在直接用数据的数据 redisClient.SetRedisTime(5256000) jsonVal, _ := json.Marshal(logMap) redisClient.Set(dayRedisKey, string(jsonVal)) json.Unmarshal([]byte(jsonVal), &dayTimeLog) } else { //数据库中不存在开始计算 sort.Slice(zuoXiTime, func(i, j int) bool { return zuoXiTime[i].StartTime < zuoXiTime[j].StartTime }) for _, v := range zuoXiTime { var ruleStep int64 = 1 if workVal, isOk := teamMap[v.Id]; isOk { lenNunm := len(workVal) if differeTime > int64(lenNunm) { ruleStep = int64(differeTime) % int64(lenNunm) if ruleStep == 0 { ruleStep = int64(lenNunm) } } else { ruleStep = int64(differeTime) } fmt.Printf("\n\n\n\ncyclesInfo--->%v--->%v\n\n\n\n", lenNunm, differeTime) } cyclesInfo := GainRuleCycleTeams(lunXunShiXu, ruleStep, v.Id) fmt.Printf("\n\n\n\ncyclesInfo--->%v--->%v\n\n\n\n", cyclesInfo, ruleStep) var logInfo teamlog.TeamsLog overall.CONSTANT_DB_TeamsLog.Where("`orgId` = ? AND `years` = ? AND `months` = ? AND `days` = ? AND `ismId` = ? AND `rankId` = ? AND `rulesId` = ? AND `teamsId` = ?", g.OrgId, timeVal.Years, timeVal.Months, timeVal.Days, g.TypeId, v.Id, cyclesInfo.TeamsId, cyclesInfo.TeamsId).Order("`sort` ASC").First(&logInfo) if logInfo.Id == 0 { logInfo.OrgId = g.OrgId //班组ID"` logInfo.TeamsTime = timeVal.AllTime //日期"` logInfo.IsmId = g.TypeId //制度ID"` logInfo.RankId = v.Id //班次"` logInfo.RulesId = cyclesInfo.TeamsId //轮询规则Id"` logInfo.Days, _ = strconv.Atoi(timeVal.Days) //日"` logInfo.Months, _ = strconv.Atoi(timeVal.Months) //月"` logInfo.Years, _ = strconv.Atoi(timeVal.Years) //年"` logInfo.Time = time.Now().Unix() //编辑时间"` logInfo.IsmName = g.TypeName logInfo.RankName = v.Name logInfo.RulesName = cyclesInfo.TeamsName logInfo.Sort = v.Sort logInfo.TeamsId = cyclesInfo.TeamsId logInfo.StartTime = v.StartTime logInfo.EndTime = v.EndTime overall.CONSTANT_DB_TeamsLog.Create(&logInfo) } dayTimeLog = append(dayTimeLog, logInfo) jsonVal, _ := json.Marshal(logInfo) valMap := publicmethod.MapOut[string]() json.Unmarshal(jsonVal, &valMap) logMap = append(logMap, valMap) } redisClient.SetRedisTime(5256000) jsonVal, _ := json.Marshal(logMap) redisClient.Set(dayRedisKey, string(jsonVal)) } } if len(dayTimeLog) > 0 { allRulesLog = dayTimeLog[len(dayTimeLog)-1] } return } /* * @ 作者: 秦东 @ 时间: 2025-01-24 11:35:54 @ 功能: @ 参数 # @ 返回值 # @ 方法原型 # */ func (a *ApiMethod) AnalysisWeekRulers(c *gin.Context) { var requestData AnZhouPaiBan c.ShouldBindJSON(&requestData) if requestData.OrgId == "" { publicmethod.Result(1, requestData, c, "未知行政单位") return } var sendMonthList interface{} orgIdInt, _ := strconv.ParseInt(requestData.OrgId, 10, 64) menuCont, cureeOrgId, err := CureeRunRules(orgIdInt) fmt.Printf("%v\n", cureeOrgId) if err != nil { publicmethod.Result(200, sendMonthList, c) return } //获取源点起始工作时间段 menuCont.BegainTime = publicmethod.UnixTimeToDay(menuCont.StartTime, 14) menuCont.TypeIdStr = strconv.FormatInt(menuCont.TypeId, 10) //获取倒班规则 var paiBanType modelshr.WorkTimeType paiBanType.GetCont(map[string]interface{}{"`id`": menuCont.TypeId}, " `name`") menuCont.TypeName = paiBanType.Name //作息时间 var zuoXiTime []modelshr.WorkingTimePeriod overall.CONSTANT_DB_HR.Where("`state` = 1 AND `type_id` = ?", menuCont.TypeId).Order("`sort` ASC").Find(&zuoXiTime) //轮询规则 var lunXunShiXu []modelshr.TeamsRules overall.CONSTANT_DB_HR.Where("`ruleTypeId` = ?", menuCont.TypeId).Find(&lunXunShiXu) if len(zuoXiTime) < 1 || len(lunXunShiXu) < 1 { var listSynv CalendarList sendMonthList = TimeHaveAry(requestData.WeekAllDay, listSynv.List) publicmethod.Result(200, sendMonthList, c) return } cycle := 1 for _, v := range lunXunShiXu { cycle = v.Cycle } var sendCont []CalendarStructure switch cycle { case 2: var zuoXiTimeOne modelshr.WorkingTimePeriod overall.CONSTANT_DB_HR.Where("`state` = 1 AND `type_id` = ?", menuCont.TypeId).Order("`sort` ASC").First(&zuoXiTimeOne) var listSynv CalendarList inDate := menuCont.changBaiBan(requestData.WeekAllDay, zuoXiTimeOne, lunXunShiXu) listSynv.List = append(listSynv.List, inDate) sendCont = TimeHaveAry(requestData.WeekAllDay, listSynv.List) default: lastDayNumber := 0 var starTemasTime publicmethod.DateTimeTotimes starTemasTime.BaisStrToTime(menuCont.BegainTime) var listSynv CalendarList for _, wv := range requestData.WeekAllDay { var wvTimeAll publicmethod.DateTimeTotimes wvTimeAll.BaisStrToTime(wv.Date) if wvTimeAll.AllTime < starTemasTime.AllTime { lastDayNumber++ } else if wvTimeAll.AllTime == starTemasTime.AllTime { listAry := menuCont.RuleYuanDianRunNew(wv, wvTimeAll, zuoXiTime, lunXunShiXu) inDate := publicmethod.MapOut[string]() inDate[wv.Date] = listAry listSynv.List = append(listSynv.List, inDate) } else { sjc := ((wvTimeAll.AllTime - starTemasTime.AllTime) / 86400) + 1 listAry := menuCont.SpecifyDateTeamsNew(wv, wvTimeAll, zuoXiTime, lunXunShiXu, sjc) inDate := publicmethod.MapOut[string]() inDate[wv.Date] = listAry listSynv.List = append(listSynv.List, inDate) } } sendCont = TimeHaveAry(requestData.WeekAllDay, listSynv.List) } if len(sendCont) == 1 { var onInfo CalendarStructure for _, v := range sendCont { onInfo = v } publicmethod.Result(0, onInfo, c) return } sendMonthList = sendCont publicmethod.Result(0, sendMonthList, c) }