第二代基于事件的高级计划排程引擎
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.
 

85 lines
2.4 KiB

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