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 ) {
dataVal , err := publicmethod . ReceiveData ( c ) //接收数据处理
if err != nil {
publicmethod . Result ( 100 , err , c )
return
}
var requestData SetWorkTime
err = json . Unmarshal ( dataVal , & requestData )
if err != nil {
publicmethod . Result ( 100 , err , c )
return
}
// 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 : 0 8
@ 功能 : 写入工作时段
@ 参数
# 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 0 9 : 20 : 07
@ 功能 : 编辑时间段
@ 参数
#
@ 返回值
#
@ 方法原型
#
* /
func ( a * ApiMethod ) EditWorkTimeCont ( c * gin . Context ) {
dataVal , err := publicmethod . ReceiveData ( c ) //接收数据处理
if err != nil {
publicmethod . Result ( 100 , err , c )
return
}
var requestData EditWorkTimeConts
err = json . Unmarshal ( dataVal , & requestData )
if err != nil {
publicmethod . Result ( 100 , err , c )
return
}
// 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 0 9 : 41 : 25
@ 功能 : 编辑制度轮询规则
@ 参数
#
@ 返回值
#
@ 方法原型
#
* /
func ( a * ApiMethod ) SaveCycleRules ( c * gin . Context ) {
dataVal , err := publicmethod . ReceiveData ( c ) //接收数据处理
if err != nil {
publicmethod . Result ( 100 , err , c )
return
}
var requestData JieShoeTeamsRules
err = json . Unmarshal ( dataVal , & requestData )
// if err != nil {
// publicmethod.Result(100, err, c)
// return
// }
// 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 ) {
dataVal , err := publicmethod . ReceiveData ( c ) //接收数据处理
if err != nil {
publicmethod . Result ( 100 , err , c )
return
}
var requestData publicmethod . PublicId
err = json . Unmarshal ( dataVal , & requestData )
// if err != nil {
// publicmethod.Result(100, err, c)
// return
// }
// 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 ) {
dataVal , err := publicmethod . ReceiveData ( c ) //接收数据处理
if err != nil {
publicmethod . Result ( 100 , err , c )
return
}
var requestData AnYuePaiBan
err = json . Unmarshal ( dataVal , & requestData )
// if err != nil {
// publicmethod.Result(100, err, c)
// return
// }
// 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 0 8 : 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 ) {
dataVal , err := publicmethod . ReceiveData ( c ) //接收数据处理
if err != nil {
publicmethod . Result ( 100 , err , c )
return
}
var requestData AnZhouPaiBan
err = json . Unmarshal ( dataVal , & requestData )
// if err != nil {
// publicmethod.Result(100, err, c)
// return
// }
// 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 )
}