package service import ( base_dal "LAPP_AS/dao/base" "LAPP_AS/db" base_model "LAPP_AS/models/base" "errors" "fmt" "time" ) type TimeModelSrv struct { PlantNr int StartDate time.Time EndDate time.Time DayModelDict map[int]DayModelSrv // 日模型字典 WeekModelDict map[int]WeekModelSrv // 周模型字典 CalendarDict map[int]CalendarSrv // 日历字典 WorkShiftDict map[int]WorkShiftSrv // 人员班组字典 } // 加载日模型、周模型和工作日历等基础数据 func(tmsrv *TimeModelSrv)LoadBasicData(startDate, endDate time.Time)(err error){ var( dmsrv DayModelSrv wkmsrv WeekModelSrv calsrv CalendarSrv wssrv WorkShiftSrv dmtablst []base_model.DayModel wkmtablst []base_model.WeekModel wkmLst []base_model.WeekModelLst caltablst []base_model.WorkCalendar wstablst []base_model.WorkShift i int ) // 初始化 tmsrv.DayModelDict = make(map[int]DayModelSrv) tmsrv.WeekModelDict = make(map[int]WeekModelSrv) tmsrv.CalendarDict = make(map[int]CalendarSrv) tmsrv.WorkShiftDict = make(map[int]WorkShiftSrv) //todo tmsrv.StartDate = startDate tmsrv.EndDate = endDate // 加载日模型 engine := db.Eloquent.Master() session := engine.NewSession() defer session.Close() DayModel_dao := base_dal.NewDayModelDAO(session, tmsrv.PlantNr, "scheduler") if dmtablst, err = DayModel_dao.SelectAll(); err != nil { err = errors.New(fmt.Sprintf("加载工厂%d的日模型失败%v!",tmsrv.PlantNr, err)) return } for i = 0; i < len(dmtablst); i++ { dmsrv = DayModelSrv{} dmsrv.Init(dmtablst[i]) tmsrv.DayModelDict[dmsrv.DayModelNr] = dmsrv } // 加载周模型 weekModel_dao := base_dal.NewWeekModelDAO(session, tmsrv.PlantNr, "scheduler") if wkmtablst, err = weekModel_dao.SelectAll(); err != nil { err = errors.New(fmt.Sprintf("加载工厂%d的周模型失败%v!",tmsrv.PlantNr, err)) return } weekModelLstLi_dao := base_dal.NewWeekModelLstDAO(session, tmsrv.PlantNr, "scheduler") if wkmLst, err = weekModelLstLi_dao.SelectAll(); err != nil { err = errors.New(fmt.Sprintf("加载工厂%d的周模型Lst失败%v!",tmsrv.PlantNr, err)) return } for i, info := range wkmtablst{ for _, info2 := range wkmLst{ if info2.PlantNr == info.PlantNr && info2.WeekModelNr == info.WeekModelNr{ wkmtablst[i].WeekModelLstLi = append(wkmtablst[i].WeekModelLstLi, info2) } } } for i = 0; i < len(wkmtablst); i++ { wkmsrv = WeekModelSrv{} wkmsrv.Init(wkmtablst[i]) tmsrv.WeekModelDict[wkmsrv.WeekModelNr] = wkmsrv } // 加载工作日历 workCalendarModel_dao := base_dal.NewWorkCalendarDAO(session, tmsrv.PlantNr, "scheduler") if caltablst, err = workCalendarModel_dao.SelectAll(startDate, endDate); err != nil { err = errors.New(fmt.Sprintf("加载工厂%d的工作日历失败%v!",tmsrv.PlantNr, err)) return } for i = 0; i < len(caltablst); i++ { calsrv = CalendarSrv{} calsrv.Init(caltablst[i]) tmsrv.CalendarDict[calsrv.CalendarNr] = calsrv } // 加载工作班次模型 workShift_dao := base_dal.NewWorkShiftDAO(session, tmsrv.PlantNr, "scheduler") if wstablst, err = workShift_dao.SelectAll(); err != nil { err = errors.New(fmt.Sprintf("加载工厂%d的人员班组失败%v!",tmsrv.PlantNr, err)) return } for i = 0; i < len(wstablst); i++ { wssrv = WorkShiftSrv{} wssrv.Init(wstablst[i]) tmsrv.WorkShiftDict[wssrv.WorkShiftNr] = wssrv } return } // 生成日模型的可用时间线 func(tmsrv *TimeModelSrv)GenDayModelLineArray()(err error){ var( dms DayModelSrv wssrv WorkShiftSrv lssrv LineSegementSrv nextStartPoint int ok bool ) // 遍历日模型 for _, dms = range tmsrv.DayModelDict { dms.LineArray = []LineSegementSrv{} // 是否是人员班组 if dms.DayModelTab.WorkShiftToggle { // 班次1 if dms.DayModelTab.S1Toggle { if wssrv, ok = tmsrv.WorkShiftDict[dms.DayModelTab.S1WorkShiftNr]; !ok { err = errors.New(fmt.Sprintf("日模型%d的班次1对应的人员班次%d不存在!",dms.DayModelTab.DayModelNr, dms.DayModelTab.S1WorkShiftNr)) return } nextStartPoint = wssrv.Wsstab.SBeg if wssrv.Wsstab.SB1Beg > 0 && wssrv.Wsstab.SB1End > wssrv.Wsstab.SB1Beg { lssrv = LineSegementSrv{} lssrv.WorkShiftNr = wssrv.Wsstab.WorkShiftNr lssrv.StartSecond = nextStartPoint lssrv.EndSecond = wssrv.Wsstab.SB1Beg lssrv.GetDuration() nextStartPoint = wssrv.Wsstab.SB1End dms.LineArray = append(dms.LineArray, lssrv) } if wssrv.Wsstab.SB2End > 0 && wssrv.Wsstab.SB2End > wssrv.Wsstab.SB2Beg { lssrv = LineSegementSrv{} lssrv.WorkShiftNr = wssrv.Wsstab.WorkShiftNr lssrv.StartSecond = nextStartPoint lssrv.EndSecond = wssrv.Wsstab.SB2Beg lssrv.GetDuration() nextStartPoint = wssrv.Wsstab.SB2End dms.LineArray = append(dms.LineArray, lssrv) } if wssrv.Wsstab.SB3End > 0 && wssrv.Wsstab.SB3End > wssrv.Wsstab.SB3Beg { lssrv = LineSegementSrv{} lssrv.WorkShiftNr = wssrv.Wsstab.WorkShiftNr lssrv.StartSecond = nextStartPoint lssrv.EndSecond = wssrv.Wsstab.SB3Beg lssrv.GetDuration() nextStartPoint = wssrv.Wsstab.SB3End dms.LineArray = append(dms.LineArray, lssrv) } if wssrv.Wsstab.SB4End > 0 && wssrv.Wsstab.SB4End > wssrv.Wsstab.SB4Beg { lssrv = LineSegementSrv{} lssrv.WorkShiftNr = wssrv.Wsstab.WorkShiftNr lssrv.StartSecond = nextStartPoint lssrv.EndSecond = wssrv.Wsstab.SB4Beg lssrv.GetDuration() nextStartPoint = wssrv.Wsstab.SB4End dms.LineArray = append(dms.LineArray, lssrv) } if wssrv.Wsstab.SB5End > 0 && wssrv.Wsstab.SB5End > wssrv.Wsstab.SB5Beg { lssrv = LineSegementSrv{} lssrv.WorkShiftNr = wssrv.Wsstab.WorkShiftNr lssrv.StartSecond = nextStartPoint lssrv.EndSecond = wssrv.Wsstab.SB5Beg lssrv.GetDuration() nextStartPoint = wssrv.Wsstab.SB5End dms.LineArray = append(dms.LineArray, lssrv) } lssrv = LineSegementSrv{} lssrv.WorkShiftNr = wssrv.Wsstab.WorkShiftNr lssrv.StartSecond = nextStartPoint lssrv.EndSecond = wssrv.Wsstab.SEnd lssrv.GetDuration() dms.LineArray = append(dms.LineArray, lssrv) } // 班次2 if dms.DayModelTab.S2Toggle { if wssrv, ok = tmsrv.WorkShiftDict[dms.DayModelTab.S2WorkShiftNr]; !ok { err = errors.New(fmt.Sprintf("日模型%d的班次2对应的人员班次%d不存在!",dms.DayModelTab.DayModelNr, dms.DayModelTab.S2WorkShiftNr)) return } nextStartPoint = wssrv.Wsstab.SBeg if wssrv.Wsstab.SB1Beg > 0 && wssrv.Wsstab.SB1End > wssrv.Wsstab.SB1Beg { lssrv = LineSegementSrv{} lssrv.WorkShiftNr = wssrv.Wsstab.WorkShiftNr lssrv.StartSecond = nextStartPoint lssrv.EndSecond = wssrv.Wsstab.SB1Beg lssrv.GetDuration() nextStartPoint = wssrv.Wsstab.SB1End dms.LineArray = append(dms.LineArray, lssrv) } if wssrv.Wsstab.SB2End > 0 && wssrv.Wsstab.SB2End > wssrv.Wsstab.SB2Beg { lssrv = LineSegementSrv{} lssrv.WorkShiftNr = wssrv.Wsstab.WorkShiftNr lssrv.StartSecond = nextStartPoint lssrv.EndSecond = wssrv.Wsstab.SB2Beg lssrv.GetDuration() nextStartPoint = wssrv.Wsstab.SB2End dms.LineArray = append(dms.LineArray, lssrv) } if wssrv.Wsstab.SB3End > 0 && wssrv.Wsstab.SB3End > wssrv.Wsstab.SB3Beg { lssrv = LineSegementSrv{} lssrv.WorkShiftNr = wssrv.Wsstab.WorkShiftNr lssrv.StartSecond = nextStartPoint lssrv.EndSecond = wssrv.Wsstab.SB3Beg lssrv.GetDuration() nextStartPoint = wssrv.Wsstab.SB3End dms.LineArray = append(dms.LineArray, lssrv) } if wssrv.Wsstab.SB4End > 0 && wssrv.Wsstab.SB4End > wssrv.Wsstab.SB4Beg { lssrv = LineSegementSrv{} lssrv.WorkShiftNr = wssrv.Wsstab.WorkShiftNr lssrv.StartSecond = nextStartPoint lssrv.EndSecond = wssrv.Wsstab.SB4Beg lssrv.GetDuration() nextStartPoint = wssrv.Wsstab.SB4End dms.LineArray = append(dms.LineArray, lssrv) } if wssrv.Wsstab.SB5End > 0 && wssrv.Wsstab.SB5End > wssrv.Wsstab.SB5Beg { lssrv = LineSegementSrv{} lssrv.WorkShiftNr = wssrv.Wsstab.WorkShiftNr lssrv.StartSecond = nextStartPoint lssrv.EndSecond = wssrv.Wsstab.SB5Beg lssrv.GetDuration() nextStartPoint = wssrv.Wsstab.SB5End dms.LineArray = append(dms.LineArray, lssrv) } lssrv = LineSegementSrv{} lssrv.WorkShiftNr = wssrv.Wsstab.WorkShiftNr lssrv.StartSecond = nextStartPoint lssrv.EndSecond = wssrv.Wsstab.SEnd lssrv.GetDuration() dms.LineArray = append(dms.LineArray, lssrv) } // 班次2 if dms.DayModelTab.S3Toggle { if wssrv, ok = tmsrv.WorkShiftDict[dms.DayModelTab.S3WorkShiftNr]; !ok { err = errors.New(fmt.Sprintf("日模型%d的班次3对应的人员班次%d不存在!",dms.DayModelTab.DayModelNr, dms.DayModelTab.S3WorkShiftNr)) return } nextStartPoint = wssrv.Wsstab.SBeg if wssrv.Wsstab.SB1Beg > 0 && wssrv.Wsstab.SB1End > wssrv.Wsstab.SB1Beg { lssrv = LineSegementSrv{} lssrv.WorkShiftNr = wssrv.Wsstab.WorkShiftNr lssrv.StartSecond = nextStartPoint lssrv.EndSecond = wssrv.Wsstab.SB1Beg lssrv.GetDuration() nextStartPoint = wssrv.Wsstab.SB1End dms.LineArray = append(dms.LineArray, lssrv) } if wssrv.Wsstab.SB2End > 0 && wssrv.Wsstab.SB2End > wssrv.Wsstab.SB2Beg { lssrv = LineSegementSrv{} lssrv.WorkShiftNr = wssrv.Wsstab.WorkShiftNr lssrv.StartSecond = nextStartPoint lssrv.EndSecond = wssrv.Wsstab.SB2Beg lssrv.GetDuration() nextStartPoint = wssrv.Wsstab.SB2End dms.LineArray = append(dms.LineArray, lssrv) } if wssrv.Wsstab.SB3End > 0 && wssrv.Wsstab.SB3End > wssrv.Wsstab.SB3Beg { lssrv = LineSegementSrv{} lssrv.WorkShiftNr = wssrv.Wsstab.WorkShiftNr lssrv.StartSecond = nextStartPoint lssrv.EndSecond = wssrv.Wsstab.SB3Beg lssrv.GetDuration() nextStartPoint = wssrv.Wsstab.SB3End dms.LineArray = append(dms.LineArray, lssrv) } if wssrv.Wsstab.SB4End > 0 && wssrv.Wsstab.SB4End > wssrv.Wsstab.SB4Beg { lssrv = LineSegementSrv{} lssrv.WorkShiftNr = wssrv.Wsstab.WorkShiftNr lssrv.StartSecond = nextStartPoint lssrv.EndSecond = wssrv.Wsstab.SB4Beg lssrv.GetDuration() nextStartPoint = wssrv.Wsstab.SB4End dms.LineArray = append(dms.LineArray, lssrv) } if wssrv.Wsstab.SB5End > 0 && wssrv.Wsstab.SB5End > wssrv.Wsstab.SB5Beg { lssrv = LineSegementSrv{} lssrv.WorkShiftNr = wssrv.Wsstab.WorkShiftNr lssrv.StartSecond = nextStartPoint lssrv.EndSecond = wssrv.Wsstab.SB5Beg lssrv.GetDuration() nextStartPoint = wssrv.Wsstab.SB5End dms.LineArray = append(dms.LineArray, lssrv) } lssrv = LineSegementSrv{} lssrv.WorkShiftNr = wssrv.Wsstab.WorkShiftNr lssrv.StartSecond = nextStartPoint lssrv.EndSecond = wssrv.Wsstab.SEnd lssrv.GetDuration() dms.LineArray = append(dms.LineArray, lssrv) } }else{ // 班次1 if dms.DayModelTab.S1Toggle { nextStartPoint = dms.DayModelTab.S1Beg if dms.DayModelTab.S1B1End > 0 && dms.DayModelTab.S1B1End > dms.DayModelTab.S1B1Beg { lssrv = LineSegementSrv{} lssrv.StartSecond = nextStartPoint lssrv.EndSecond = dms.DayModelTab.S1B1Beg lssrv.GetDuration() nextStartPoint = dms.DayModelTab.S1B1End dms.LineArray = append(dms.LineArray, lssrv) } if dms.DayModelTab.S1B2End > 0 && dms.DayModelTab.S1B2End > dms.DayModelTab.S1B2Beg { lssrv = LineSegementSrv{} lssrv.StartSecond = nextStartPoint lssrv.EndSecond = dms.DayModelTab.S1B2Beg lssrv.GetDuration() nextStartPoint = dms.DayModelTab.S1B2End dms.LineArray = append(dms.LineArray, lssrv) } if dms.DayModelTab.S1B3End > 0 && dms.DayModelTab.S1B3End > dms.DayModelTab.S1B3Beg { lssrv = LineSegementSrv{} lssrv.StartSecond = nextStartPoint lssrv.EndSecond = dms.DayModelTab.S1B3Beg lssrv.GetDuration() nextStartPoint = dms.DayModelTab.S1B3End dms.LineArray = append(dms.LineArray, lssrv) } if dms.DayModelTab.S1B4End > 0 && dms.DayModelTab.S1B4End > dms.DayModelTab.S1B4Beg { lssrv = LineSegementSrv{} lssrv.StartSecond = nextStartPoint lssrv.EndSecond = dms.DayModelTab.S1B4Beg lssrv.GetDuration() nextStartPoint = dms.DayModelTab.S1B4End dms.LineArray = append(dms.LineArray, lssrv) } if dms.DayModelTab.S1B5End > 0 && dms.DayModelTab.S1B5End > dms.DayModelTab.S1B5Beg { lssrv = LineSegementSrv{} lssrv.StartSecond = nextStartPoint lssrv.EndSecond = dms.DayModelTab.S1B5Beg lssrv.GetDuration() nextStartPoint = dms.DayModelTab.S1B5End dms.LineArray = append(dms.LineArray, lssrv) } lssrv = LineSegementSrv{} lssrv.StartSecond = nextStartPoint lssrv.EndSecond = dms.DayModelTab.S1End lssrv.GetDuration() dms.LineArray = append(dms.LineArray, lssrv) } // 班次2 if dms.DayModelTab.S2Toggle { nextStartPoint = dms.DayModelTab.S2Beg if dms.DayModelTab.S2B1End > 0 && dms.DayModelTab.S2B1End > dms.DayModelTab.S2B1Beg { lssrv = LineSegementSrv{} lssrv.StartSecond = nextStartPoint lssrv.EndSecond = dms.DayModelTab.S2B1Beg lssrv.GetDuration() nextStartPoint = dms.DayModelTab.S2B1End dms.LineArray = append(dms.LineArray, lssrv) } if dms.DayModelTab.S2B2End > 0 && dms.DayModelTab.S2B2End > dms.DayModelTab.S2B2Beg { lssrv = LineSegementSrv{} lssrv.StartSecond = nextStartPoint lssrv.EndSecond = dms.DayModelTab.S2B2Beg lssrv.GetDuration() nextStartPoint = dms.DayModelTab.S2B2End dms.LineArray = append(dms.LineArray, lssrv) } if dms.DayModelTab.S2B3End > 0 && dms.DayModelTab.S2B3End > dms.DayModelTab.S2B3Beg { lssrv = LineSegementSrv{} lssrv.StartSecond = nextStartPoint lssrv.EndSecond = dms.DayModelTab.S2B3Beg lssrv.GetDuration() nextStartPoint = dms.DayModelTab.S2B3End dms.LineArray = append(dms.LineArray, lssrv) } if dms.DayModelTab.S2B4End > 0 && dms.DayModelTab.S2B4End > dms.DayModelTab.S2B4Beg { lssrv = LineSegementSrv{} lssrv.StartSecond = nextStartPoint lssrv.EndSecond = dms.DayModelTab.S2B4Beg lssrv.GetDuration() nextStartPoint = dms.DayModelTab.S2B4End dms.LineArray = append(dms.LineArray, lssrv) } if dms.DayModelTab.S2B5End > 0 && dms.DayModelTab.S2B5End > dms.DayModelTab.S2B5Beg { lssrv = LineSegementSrv{} lssrv.StartSecond = nextStartPoint lssrv.EndSecond = dms.DayModelTab.S2B5Beg lssrv.GetDuration() nextStartPoint = dms.DayModelTab.S2B5End dms.LineArray = append(dms.LineArray, lssrv) } lssrv = LineSegementSrv{} lssrv.StartSecond = nextStartPoint lssrv.EndSecond = dms.DayModelTab.S2End lssrv.GetDuration() dms.LineArray = append(dms.LineArray, lssrv) } // 班次2 if dms.DayModelTab.S3Toggle { nextStartPoint = dms.DayModelTab.S3Beg if dms.DayModelTab.S3B1End > 0 && dms.DayModelTab.S3B1End > dms.DayModelTab.S3B1Beg { lssrv = LineSegementSrv{} lssrv.StartSecond = nextStartPoint lssrv.EndSecond = dms.DayModelTab.S3B1Beg lssrv.GetDuration() nextStartPoint = dms.DayModelTab.S3B1End dms.LineArray = append(dms.LineArray, lssrv) } if dms.DayModelTab.S3B2End > 0 && dms.DayModelTab.S3B2End > dms.DayModelTab.S3B2Beg { lssrv = LineSegementSrv{} lssrv.StartSecond = nextStartPoint lssrv.EndSecond = dms.DayModelTab.S3B2Beg lssrv.GetDuration() nextStartPoint = dms.DayModelTab.S3B2End dms.LineArray = append(dms.LineArray, lssrv) } if dms.DayModelTab.S3B3End > 0 && dms.DayModelTab.S3B3End > dms.DayModelTab.S3B3Beg { lssrv = LineSegementSrv{} lssrv.StartSecond = nextStartPoint lssrv.EndSecond = dms.DayModelTab.S3B3Beg lssrv.GetDuration() nextStartPoint = dms.DayModelTab.S3B3End dms.LineArray = append(dms.LineArray, lssrv) } if dms.DayModelTab.S3B4End > 0 && dms.DayModelTab.S3B4End > dms.DayModelTab.S3B4Beg { lssrv = LineSegementSrv{} lssrv.StartSecond = nextStartPoint lssrv.EndSecond = dms.DayModelTab.S3B4Beg lssrv.GetDuration() nextStartPoint = dms.DayModelTab.S3B4End dms.LineArray = append(dms.LineArray, lssrv) } if dms.DayModelTab.S3B5End > 0 && dms.DayModelTab.S3B5End > dms.DayModelTab.S3B5Beg { lssrv = LineSegementSrv{} lssrv.StartSecond = nextStartPoint lssrv.EndSecond = dms.DayModelTab.S3B5Beg lssrv.GetDuration() nextStartPoint = dms.DayModelTab.S3B5End dms.LineArray = append(dms.LineArray, lssrv) } lssrv = LineSegementSrv{} lssrv.StartSecond = nextStartPoint lssrv.EndSecond = dms.DayModelTab.S3End lssrv.GetDuration() dms.LineArray = append(dms.LineArray, lssrv) } } tmsrv.DayModelDict[dms.DayModelNr] = dms } return }