package service import ( "fmt" "leit.com/aps_engine/common" "leit.com/aps_engine/models" "time" ) // 工位类型资源对象 type WorkPlaceSrv struct{ WorkPlaceNr int WorkPlaceGrpNr int // 工位组对象 Wptab models.Workplace Status int // 工位可用状态默认不可用,通过时间模型的加载变为可用 TimeCurve TimeCurveSrv // 加载完时间模型后的时间曲线 SchedTimeCurve TimeCurveSrv // 调度过程中动态计算的时间曲线 WaitTaskArray []SchedTaskSrv // 任务等待队列 SchedTaskArray []OperationSrv // 已计划任务队列 } // 可选工位资源对象 type OptionalWorkPlaceSrv struct{ WorkPlaceNr int Priority int } // 初始化对象 func(wps *WorkPlaceSrv)Init(wpnr, wpgnr int){ wps.WorkPlaceNr = wpnr wps.WorkPlaceGrpNr = wpgnr wps.Status = common.RES_STATUS_UNAVAIL wps.TimeCurve = TimeCurveSrv{} wps.SchedTimeCurve = TimeCurveSrv{} wps.WaitTaskArray = []SchedTaskSrv{} wps.SchedTaskArray = []OperationSrv{} } // 初始化对象 func(wps *WorkPlaceSrv)Create(wptab models.Workplace){ wps.WorkPlaceNr = wptab.Workplacenr wps.WorkPlaceGrpNr = wptab.Workplacegrpnr wps.Wptab = wptab wps.Status = common.RES_STATUS_UNAVAIL wps.TimeCurve = TimeCurveSrv{} wps.SchedTimeCurve = TimeCurveSrv{} wps.WaitTaskArray = []SchedTaskSrv{} wps.SchedTaskArray = []OperationSrv{} } // 获取工位状态可用事件 func(wps *WorkPlaceSrv)GetAvailEvent(t time.Time)(SchedEvent){ var( wpet WorkPlaceEvent ) wpet = WorkPlaceEvent{TriggerTime: t, EventType: EVENT_OBJ_WP, Event: EVENT_WP_STATUS_AVAIL} wpet.WorkPlaceNr = wps.WorkPlaceNr return SchedEvent(wpet) } // 获取工位状态可用事件 func(wps *WorkPlaceSrv)GetUnAvailEvent(t time.Time)(SchedEvent){ var( wpet WorkPlaceEvent ) wpet = WorkPlaceEvent{TriggerTime: t, EventType: EVENT_OBJ_WP, Event: EVENT_WP_STATUS_UNAVAIL} wpet.WorkPlaceNr = wps.WorkPlaceNr return SchedEvent(wpet) } // 打印工位的调度任务结果集 func(wps *WorkPlaceSrv)Print(){ fmt.Println("调度工位:",wps.WorkPlaceNr) for idx, op := range wps.SchedTaskArray{ if idx == 0 { fmt.Printf("|%s<--%s(%d)-->%s|",op.PlanStartTime.Format("01-02 15:04"),op.OrderId,op.OperationNr,op.PlanEndTime.Format("01-02 15:04")) }else{ fmt.Printf("%s<--%s(%d)-->%s|",op.PlanStartTime.Format("01-02 15:04"),op.OrderId,op.OperationNr,op.PlanEndTime.Format("01-02 15:04")) } } fmt.Printf("\n") }