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.
501 lines
20 KiB
501 lines
20 KiB
|
9 months ago
|
package menus
|
||
|
|
|
||
|
|
import (
|
||
|
|
"appPlatform/middleware/grocerystore"
|
||
|
|
"appPlatform/models/modelshr"
|
||
|
|
"appPlatform/models/teamlog"
|
||
|
|
"appPlatform/overall"
|
||
|
|
"appPlatform/overall/publicmethod"
|
||
|
|
"encoding/json"
|
||
|
|
"fmt"
|
||
|
|
"sort"
|
||
|
|
"strconv"
|
||
|
|
"time"
|
||
|
|
)
|
||
|
|
|
||
|
|
/*
|
||
|
|
*
|
||
|
|
@ 作者: 秦东
|
||
|
|
@ 时间: 2025-01-21 08:52:46
|
||
|
|
@ 功能: 原点日期排班设定
|
||
|
|
@ 参数
|
||
|
|
|
||
|
|
#dataInfo 当前日期属性
|
||
|
|
#timeVal 当天日期参数
|
||
|
|
#zuoXiTime 作息时间
|
||
|
|
#lunXunShiXu 轮询列表
|
||
|
|
|
||
|
|
|
||
|
|
#RedisKey说明 SchedulingTeam:StartingPoint_行政组织_年月日_倒班制度
|
||
|
|
|
||
|
|
@ 返回值
|
||
|
|
|
||
|
|
#logMap 当天安排
|
||
|
|
|
||
|
|
@ 方法原型
|
||
|
|
|
||
|
|
#
|
||
|
|
*/
|
||
|
|
func (g *GenesInfo) TeamsYuanDianRunNew(dataInfo CalendarStructure, timeVal publicmethod.DateTimeTotimes, zuoXiTime []modelshr.WorkingTimePeriod, lunXunShiXu []modelshr.PollingRules) (logMap []map[string]interface{}) {
|
||
|
|
dayRedisKey := fmt.Sprintf("SchedulingTeam:StartingPoint_%v_%v%v%v_%v", 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)
|
||
|
|
// fmt.Printf("Step2: %v\n", string(jsonVal))
|
||
|
|
} else { //数据库中不存在开始计算
|
||
|
|
|
||
|
|
// fmt.Printf("Step3: %v\n", zuoXiTime)
|
||
|
|
//按时间先后将工作时段进行排序排序
|
||
|
|
sort.Slice(zuoXiTime, func(i, j int) bool {
|
||
|
|
return zuoXiTime[i].StartTime < zuoXiTime[j].StartTime
|
||
|
|
})
|
||
|
|
|
||
|
|
zouXinAllNum := len(zuoXiTime) //获取作息时间总长度
|
||
|
|
yuanDianWeizhi := 1 //原点在数组中的索引位置
|
||
|
|
for i := 0; i < zouXinAllNum; i++ {
|
||
|
|
if zuoXiTime[i].Id == g.PeriodId {
|
||
|
|
yuanDianWeizhi = i
|
||
|
|
}
|
||
|
|
zuoXiTime[i].Sort = i + 1
|
||
|
|
}
|
||
|
|
// for i, v := range zuoXiTime {
|
||
|
|
// if v.Id == g.PeriodId {
|
||
|
|
// yuanDianWeizhi = i
|
||
|
|
// }
|
||
|
|
// v.Sort = i + 1
|
||
|
|
// }
|
||
|
|
// fmt.Printf("%v-%v\n", yuanDianWeizhi, zuoXiTime)
|
||
|
|
//判断所在数组位置前边是否有数据
|
||
|
|
if yuanDianWeizhi > 0 {
|
||
|
|
for i := yuanDianWeizhi - 1; i >= 0; i-- {
|
||
|
|
creeLunXun := LunXunGuiZe(lunXunShiXu, g.Rules, i, 1)
|
||
|
|
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, zuoXiTime[i].Id, creeLunXun.Id, creeLunXun.Id).Order("`sort` ASC").First(&logInfo)
|
||
|
|
if logInfo.Id == 0 {
|
||
|
|
// var logInfo teamlog.TeamsLog
|
||
|
|
logInfo.OrgId = g.OrgId //班组ID"`
|
||
|
|
logInfo.TeamsTime = timeVal.AllTime //日期"`
|
||
|
|
logInfo.IsmId = g.TypeId //制度ID"`
|
||
|
|
logInfo.RankId = zuoXiTime[i].Id //班次"`
|
||
|
|
logInfo.RulesId = creeLunXun.Id //轮询规则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 = zuoXiTime[i].Name
|
||
|
|
logInfo.RulesName = creeLunXun.TeamName
|
||
|
|
logInfo.Sort = zuoXiTime[i].Sort
|
||
|
|
logInfo.TeamsId = creeLunXun.Id
|
||
|
|
logInfo.StartTime = zuoXiTime[i].StartTime
|
||
|
|
logInfo.EndTime = zuoXiTime[i].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)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
//计算原点位置
|
||
|
|
var logInfoYuan 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, g.PeriodId, g.Rules, g.Rules).Order("`sort` ASC").First(&logInfoYuan)
|
||
|
|
if logInfoYuan.Id == 0 {
|
||
|
|
logInfoYuan.OrgId = g.OrgId //班组ID"`
|
||
|
|
logInfoYuan.TeamsTime = timeVal.AllTime //日期"`
|
||
|
|
logInfoYuan.IsmId = g.TypeId //制度ID"`
|
||
|
|
logInfoYuan.RankId = g.PeriodId //班次"`
|
||
|
|
logInfoYuan.RulesId = g.Rules //轮询规则Id"`
|
||
|
|
logInfoYuan.Days, _ = strconv.Atoi(timeVal.Days) //日"`
|
||
|
|
logInfoYuan.Months, _ = strconv.Atoi(timeVal.Months) //月"`
|
||
|
|
logInfoYuan.Years, _ = strconv.Atoi(timeVal.Years) //年"`
|
||
|
|
logInfoYuan.Time = time.Now().Unix() //编辑时间"`
|
||
|
|
logInfoYuan.IsmName = g.TypeName
|
||
|
|
logInfoYuan.RankName = g.PeriodName
|
||
|
|
logInfoYuan.RulesName = g.RulesName
|
||
|
|
logInfoYuan.Sort = zuoXiTime[yuanDianWeizhi].Sort
|
||
|
|
logInfoYuan.TeamsId = g.Rules
|
||
|
|
logInfoYuan.StartTime = zuoXiTime[yuanDianWeizhi].StartTime
|
||
|
|
logInfoYuan.EndTime = zuoXiTime[yuanDianWeizhi].EndTime
|
||
|
|
overall.CONSTANT_DB_TeamsLog.Create(&logInfoYuan)
|
||
|
|
}
|
||
|
|
|
||
|
|
dayTimeLog = append(dayTimeLog, logInfoYuan)
|
||
|
|
jsonValYuan, _ := json.Marshal(logInfoYuan)
|
||
|
|
valMapYuan := publicmethod.MapOut[string]()
|
||
|
|
json.Unmarshal(jsonValYuan, &valMapYuan)
|
||
|
|
logMap = append(logMap, valMapYuan)
|
||
|
|
//计算源点后边得数据
|
||
|
|
for j := yuanDianWeizhi + 1; j < zouXinAllNum; j++ {
|
||
|
|
creeLunXun := LunXunGuiZe(lunXunShiXu, g.Rules, j-1, 2)
|
||
|
|
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, zuoXiTime[j].Id, creeLunXun.Id, creeLunXun.Id).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 = zuoXiTime[j].Id //班次"`
|
||
|
|
logInfo.RulesId = creeLunXun.Id //轮询规则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 = zuoXiTime[j].Name
|
||
|
|
logInfo.RulesName = creeLunXun.TeamName
|
||
|
|
logInfo.Sort = zuoXiTime[j].Sort
|
||
|
|
logInfo.TeamsId = creeLunXun.Id
|
||
|
|
logInfo.StartTime = zuoXiTime[j].StartTime
|
||
|
|
logInfo.EndTime = zuoXiTime[j].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-20 10:14:52
|
||
|
|
@ 功能: 获取指定日期班组情况
|
||
|
|
@ 参数
|
||
|
|
|
||
|
|
#dataInfo 当前日期属性
|
||
|
|
#timeVal 当天日期参数
|
||
|
|
#zuoXiTime 作息时间
|
||
|
|
#lunXunShiXu 轮询列表
|
||
|
|
|
||
|
|
@ 返回值
|
||
|
|
|
||
|
|
#logMap 当天安排
|
||
|
|
|
||
|
|
@ 方法原型
|
||
|
|
|
||
|
|
#
|
||
|
|
*/
|
||
|
|
func (g *GenesInfo) SpecifyDateTeams(dataInfo CalendarStructure, timeVal publicmethod.DateTimeTotimes, zuoXiTime []modelshr.WorkingTimePeriod, lunXunShiXu []modelshr.PollingRules) (logMap []map[string]interface{}) {
|
||
|
|
if len(zuoXiTime) < 1 && len(lunXunShiXu) < 1 { //没有设置工作时间段,也没有轮询规则
|
||
|
|
return
|
||
|
|
} else if len(zuoXiTime) == 1 && len(lunXunShiXu) == 1 { //单一工作段,单一轮询规则
|
||
|
|
//判断当前日期是不是周末
|
||
|
|
if dataInfo.IsWeek { //为周末;默认双休
|
||
|
|
if dataInfo.IsWorks { //是不是周末补班
|
||
|
|
var logInfo teamlog.TeamsLog
|
||
|
|
logInfo.OrgId = g.OrgId //行政组织ID"`
|
||
|
|
logInfo.TeamsTime = timeVal.AllTime //日期"`
|
||
|
|
logInfo.IsmId = g.TypeId //制度ID"`
|
||
|
|
logInfo.RankId = zuoXiTime[0].Id //班次"`
|
||
|
|
logInfo.RulesId = lunXunShiXu[0].Id //轮询规则Id"`
|
||
|
|
logInfo.Years, _ = strconv.Atoi(timeVal.Years) //日"`
|
||
|
|
logInfo.Months, _ = strconv.Atoi(timeVal.Months) //月"`
|
||
|
|
logInfo.Days, _ = strconv.Atoi(timeVal.Days) //年"`
|
||
|
|
logInfo.Time = time.Now().Unix() //编辑时间"`
|
||
|
|
logInfo.RankName = zuoXiTime[0].Name //执行倒班名称
|
||
|
|
logInfo.RulesName = lunXunShiXu[0].TeamName //当天班组或休班
|
||
|
|
logInfo.IsmName = g.TypeName //执行倒班制度名称
|
||
|
|
logInfo.TeamsId = lunXunShiXu[0].Teamid //班组ID"`
|
||
|
|
logInfo.Sort = lunXunShiXu[0].Sort //排序
|
||
|
|
logInfo.StartTime = zuoXiTime[0].StartTime //作业开始时间
|
||
|
|
logInfo.EndTime = zuoXiTime[0].EndTime //作业结束时间
|
||
|
|
jsonVal, _ := json.Marshal(logInfo)
|
||
|
|
valMap := publicmethod.MapOut[string]()
|
||
|
|
json.Unmarshal(jsonVal, &valMap)
|
||
|
|
logMap = append(logMap, valMap)
|
||
|
|
} else {
|
||
|
|
var logInfo teamlog.TeamsLog
|
||
|
|
logInfo.OrgId = g.OrgId //行政组织ID"`
|
||
|
|
logInfo.TeamsTime = timeVal.AllTime //日期"`
|
||
|
|
logInfo.IsmId = g.TypeId //制度ID"`
|
||
|
|
logInfo.RankId = zuoXiTime[0].Id //班次"`
|
||
|
|
logInfo.RulesId = 0 //轮询规则Id"`
|
||
|
|
logInfo.Years, _ = strconv.Atoi(timeVal.Years) //日"`
|
||
|
|
logInfo.Months, _ = strconv.Atoi(timeVal.Months) //月"`
|
||
|
|
logInfo.Days, _ = strconv.Atoi(timeVal.Days) //年"`
|
||
|
|
logInfo.Time = time.Now().Unix() //编辑时间"`
|
||
|
|
logInfo.RankName = zuoXiTime[0].Name //执行倒班名称
|
||
|
|
logInfo.RulesName = "休" //当天班组或休班
|
||
|
|
logInfo.IsmName = g.TypeName //执行倒班制度名称
|
||
|
|
logInfo.TeamsId = 0 //班组ID"`
|
||
|
|
logInfo.Sort = 0 //排序
|
||
|
|
logInfo.StartTime = zuoXiTime[0].StartTime //作业开始时间
|
||
|
|
logInfo.EndTime = zuoXiTime[0].EndTime //作业结束时间
|
||
|
|
jsonVal, _ := json.Marshal(logInfo)
|
||
|
|
valMap := publicmethod.MapOut[string]()
|
||
|
|
json.Unmarshal(jsonVal, &valMap)
|
||
|
|
logMap = append(logMap, valMap)
|
||
|
|
}
|
||
|
|
} else if dataInfo.IsHolidays { //为假期;默认按国家法定节假日
|
||
|
|
var logInfo teamlog.TeamsLog
|
||
|
|
logInfo.OrgId = g.OrgId //行政组织ID"`
|
||
|
|
logInfo.TeamsTime = timeVal.AllTime //日期"`
|
||
|
|
logInfo.IsmId = g.TypeId //制度ID"`
|
||
|
|
logInfo.RankId = zuoXiTime[0].Id //班次"`
|
||
|
|
logInfo.RulesId = 0 //轮询规则Id"`
|
||
|
|
logInfo.Years, _ = strconv.Atoi(timeVal.Years) //日"`
|
||
|
|
logInfo.Months, _ = strconv.Atoi(timeVal.Months) //月"`
|
||
|
|
logInfo.Days, _ = strconv.Atoi(timeVal.Days) //年"`
|
||
|
|
logInfo.Time = time.Now().Unix() //编辑时间"`
|
||
|
|
logInfo.RankName = zuoXiTime[0].Name //执行倒班名称
|
||
|
|
logInfo.RulesName = "休" //当天班组或休班
|
||
|
|
logInfo.IsmName = g.TypeName //执行倒班制度名称
|
||
|
|
logInfo.TeamsId = 0 //班组ID"`
|
||
|
|
logInfo.Sort = 0 //排序
|
||
|
|
logInfo.StartTime = zuoXiTime[0].StartTime //作业开始时间
|
||
|
|
logInfo.EndTime = zuoXiTime[0].EndTime //作业结束时间
|
||
|
|
jsonVal, _ := json.Marshal(logInfo)
|
||
|
|
valMap := publicmethod.MapOut[string]()
|
||
|
|
json.Unmarshal(jsonVal, &valMap)
|
||
|
|
logMap = append(logMap, valMap)
|
||
|
|
} else {
|
||
|
|
var logInfo teamlog.TeamsLog
|
||
|
|
logInfo.OrgId = g.OrgId //行政组织ID"`
|
||
|
|
logInfo.TeamsTime = timeVal.AllTime //日期"`
|
||
|
|
logInfo.IsmId = g.TypeId //制度ID"`
|
||
|
|
logInfo.RankId = zuoXiTime[0].Id //班次"`
|
||
|
|
logInfo.RulesId = lunXunShiXu[0].Id //轮询规则Id"`
|
||
|
|
logInfo.Years, _ = strconv.Atoi(timeVal.Years) //日"`
|
||
|
|
logInfo.Months, _ = strconv.Atoi(timeVal.Months) //月"`
|
||
|
|
logInfo.Days, _ = strconv.Atoi(timeVal.Days) //年"`
|
||
|
|
logInfo.Time = time.Now().Unix() //编辑时间"`
|
||
|
|
logInfo.RankName = zuoXiTime[0].Name //执行倒班名称
|
||
|
|
logInfo.RulesName = lunXunShiXu[0].TeamName //当天班组或休班
|
||
|
|
logInfo.IsmName = g.TypeName //执行倒班制度名称
|
||
|
|
logInfo.TeamsId = lunXunShiXu[0].Teamid //班组ID"`
|
||
|
|
logInfo.Sort = lunXunShiXu[0].Sort //排序
|
||
|
|
logInfo.StartTime = zuoXiTime[0].StartTime //作业开始时间
|
||
|
|
logInfo.EndTime = zuoXiTime[0].EndTime //作业结束时间
|
||
|
|
jsonVal, _ := json.Marshal(logInfo)
|
||
|
|
valMap := publicmethod.MapOut[string]()
|
||
|
|
json.Unmarshal(jsonVal, &valMap)
|
||
|
|
logMap = append(logMap, valMap)
|
||
|
|
}
|
||
|
|
} else {
|
||
|
|
teamSpan := 1 //班组跨度
|
||
|
|
teamSpanStep := 1 //班组临时跨度
|
||
|
|
lxSum := len(lunXunShiXu)
|
||
|
|
if lxSum > 1 {
|
||
|
|
for i := 0; i < lxSum-1; i++ {
|
||
|
|
if i+1 <= lxSum-1 {
|
||
|
|
if lunXunShiXu[i].Teamid == lunXunShiXu[i+1].Teamid {
|
||
|
|
teamSpanStep++
|
||
|
|
} else {
|
||
|
|
teamSpanStep = 1
|
||
|
|
}
|
||
|
|
if teamSpanStep >= teamSpan {
|
||
|
|
teamSpan = teamSpanStep
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
AnalysisWorkRule(timeVal, zuoXiTime)
|
||
|
|
fmt.Printf("连续跨度:%v\n", teamSpan)
|
||
|
|
//根据班组连续跨度进行班组安排
|
||
|
|
switch teamSpan {
|
||
|
|
case 2: //一班同一工作段上连续两天
|
||
|
|
case 3: //一班同一工作段上连续三天
|
||
|
|
case 4: //一班同一工作段上连续四天
|
||
|
|
case 5: //一班同一工作段上连续五天
|
||
|
|
case 6: //一班同一工作段上连续六天
|
||
|
|
case 7: //一班同一工作段上连续七天
|
||
|
|
default: //班组没有连续跨度,单一顺班
|
||
|
|
}
|
||
|
|
}
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
/*
|
||
|
|
*
|
||
|
|
@ 作者: 秦东
|
||
|
|
@ 时间: 2025-01-20 14:00:11
|
||
|
|
@ 功能: 计算当前工作时间段在当天还是明天及所在工作段顺位
|
||
|
|
#timeVal 当前时间
|
||
|
|
#zuoXiTime 工作时段
|
||
|
|
*/
|
||
|
|
func AnalysisWorkRule(timeVal publicmethod.DateTimeTotimes, zuoXiTime []modelshr.WorkingTimePeriod) []modelshr.WorkingTimePeriod {
|
||
|
|
if len(zuoXiTime) <= 2 { //根据现实生产逻辑。当一天轮询工作时间不超过2个时间段的时候。不会产生快日期排班情况
|
||
|
|
return zuoXiTime
|
||
|
|
} else {
|
||
|
|
sort.Slice(zuoXiTime, func(i, j int) bool {
|
||
|
|
return zuoXiTime[i].StartTime < zuoXiTime[j].StartTime
|
||
|
|
})
|
||
|
|
// for i, v := range zuoXiTime {
|
||
|
|
// canji := v.Sort - i
|
||
|
|
// fmt.Printf("%v------------------> %v\n", canji, v)
|
||
|
|
// }
|
||
|
|
}
|
||
|
|
return zuoXiTime
|
||
|
|
}
|
||
|
|
|
||
|
|
/*
|
||
|
|
*
|
||
|
|
@ 作者: 秦东
|
||
|
|
@ 时间: 2025-01-20 16:03:42
|
||
|
|
@ 功能: 计算返回轮询规则信息
|
||
|
|
#lunXunShiXu 轮询规则
|
||
|
|
#startId 开始的点位
|
||
|
|
#step 执行几步
|
||
|
|
#posNeg 前进还是后退 1:前进,2:后退
|
||
|
|
*/
|
||
|
|
func LunXunGuiZe(lunXunShiXu []modelshr.PollingRules, startId int64, step, posNeg int) (lunXunGuiZe modelshr.PollingRules) {
|
||
|
|
creetStep := 0
|
||
|
|
for i, v := range lunXunShiXu {
|
||
|
|
if v.Id == startId {
|
||
|
|
creetStep = i
|
||
|
|
}
|
||
|
|
}
|
||
|
|
// creetStep = creetStep
|
||
|
|
fallNum := len(lunXunShiXu) //总共多少步伐
|
||
|
|
sendNum := 0
|
||
|
|
if posNeg == 1 { //前进
|
||
|
|
sendNum = ((creetStep-step)%fallNum+fallNum)%fallNum - 1
|
||
|
|
if sendNum < 0 {
|
||
|
|
sendNum = fallNum - 1
|
||
|
|
}
|
||
|
|
fmt.Printf("前进---->%v\n", sendNum)
|
||
|
|
fmt.Printf("前进---->%v---->%v---->%v\n", creetStep, step, fallNum)
|
||
|
|
} else {
|
||
|
|
sendNum = (creetStep + step) % fallNum
|
||
|
|
fmt.Printf("后退---->%v---->%v---->%v---->%v\n", sendNum, creetStep, step, fallNum)
|
||
|
|
}
|
||
|
|
lunXunGuiZe = lunXunShiXu[sendNum]
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
/*
|
||
|
|
*
|
||
|
|
@ 作者: 秦东
|
||
|
|
@ 时间: 2025-01-24 09:35:42
|
||
|
|
@ 功能: 长白班解析
|
||
|
|
@ 参数
|
||
|
|
|
||
|
|
#
|
||
|
|
|
||
|
|
@ 返回值
|
||
|
|
|
||
|
|
#
|
||
|
|
|
||
|
|
@ 方法原型
|
||
|
|
|
||
|
|
#
|
||
|
|
*/
|
||
|
|
func (g *GenesInfo) changBaiBan(WeekAllDay []CalendarStructure, zuoXiTimeOne modelshr.WorkingTimePeriod, lunXunShiXu []modelshr.TeamsRules) map[string]interface{} {
|
||
|
|
isWeek := publicmethod.MapOut[string]()
|
||
|
|
if len(WeekAllDay) < 1 {
|
||
|
|
return isWeek
|
||
|
|
}
|
||
|
|
|
||
|
|
var dayTimeLog []teamlog.TeamsLog
|
||
|
|
for i, v := range WeekAllDay {
|
||
|
|
var logMap []map[string]interface{}
|
||
|
|
var timeVal publicmethod.DateTimeTotimes
|
||
|
|
timeVal.BaisStrToTime(v.Date)
|
||
|
|
dayRedisKey := fmt.Sprintf("SchedulingTeam:StartingPoint_%v_%v%v%v_%v_2", g.OrgId, timeVal.Years, timeVal.Months, timeVal.Days, g.TypeId)
|
||
|
|
redisClient := grocerystore.RunRedis(overall.CONSTANT_REDIS2)
|
||
|
|
isTrue, logContent := redisClient.Get(dayRedisKey)
|
||
|
|
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 { //数据库中不存在开始计算
|
||
|
|
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, zuoXiTimeOne.Id, lunXunShiXu[i].TeamsId, lunXunShiXu[i].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 = zuoXiTimeOne.Id //班次"`
|
||
|
|
if lunXunShiXu[i].CycleWorkTime != 0 {
|
||
|
|
logInfo.RulesId = lunXunShiXu[i].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 = zuoXiTimeOne.Name
|
||
|
|
if !v.IsHolidays {
|
||
|
|
if lunXunShiXu[i].CycleWorkTime != 0 {
|
||
|
|
logInfo.RulesName = lunXunShiXu[i].TeamsName
|
||
|
|
fmt.Printf("i ----1---->: %v\n", i)
|
||
|
|
} else {
|
||
|
|
if v.IsWorks { //是不是周末补班
|
||
|
|
logInfo.RulesName = "补"
|
||
|
|
fmt.Printf("i ----2---->: %v\n", i)
|
||
|
|
} else {
|
||
|
|
if lunXunShiXu[i].CycleWorkName == "" {
|
||
|
|
logInfo.RulesName = "休"
|
||
|
|
fmt.Printf("i ----3---->: %v\n", i)
|
||
|
|
} else {
|
||
|
|
logInfo.RulesName = lunXunShiXu[i].CycleWorkName
|
||
|
|
fmt.Printf("i ----4---->: %v\n", i)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
} else {
|
||
|
|
logInfo.RulesName = "假日"
|
||
|
|
}
|
||
|
|
|
||
|
|
logInfo.Sort = zuoXiTimeOne.Sort
|
||
|
|
if lunXunShiXu[i].CycleWorkTime != 0 {
|
||
|
|
logInfo.TeamsId = lunXunShiXu[i].TeamsId
|
||
|
|
}
|
||
|
|
logInfo.StartTime = zuoXiTimeOne.StartTime
|
||
|
|
logInfo.EndTime = zuoXiTimeOne.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)
|
||
|
|
jsonValLog, _ := json.Marshal(logMap)
|
||
|
|
redisClient.Set(dayRedisKey, string(jsonValLog))
|
||
|
|
}
|
||
|
|
}
|
||
|
|
isWeek[v.Date] = logMap
|
||
|
|
jscvv, _ := json.Marshal(lunXunShiXu)
|
||
|
|
fmt.Printf("\n\n\n\n\n\ni%v--------->v:%v----->lx:%v----->lx:%v\n\n\n\n\n\n", i, v, lunXunShiXu[i], string(jscvv))
|
||
|
|
}
|
||
|
|
if len(dayTimeLog) > 0 {
|
||
|
|
allRulesLog = dayTimeLog[len(dayTimeLog)-1]
|
||
|
|
}
|
||
|
|
return isWeek
|
||
|
|
}
|