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")
|
|
}
|