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

82 lines
2.1 KiB

package service
import (
"fmt"
"leit.com/aps_engine/common"
"leit.com/aps_engine/models"
"time"
)
// 工具类型资源对象
type ToolSrv struct{
ToolNr int
ToolGrpNr int
Status int // 可用状态
UnAvailTimeLineArray []TimeLineSrv // 不可用时段
WaitTaskArray []SchedTaskSrv // 任务等待队列
SchedTaskArray []OperationSrv // 已计划任务队列
ToolTab models.Tool
}
// 可选工具资源对象
type OptionalToolSrv struct{
ToolNr int
Priority int
}
// 初始化工具对象
func(ts *ToolSrv)Init(tnr, tgnr int){
ts.ToolNr = tnr
ts.ToolGrpNr = tgnr
ts.Status = common.RES_STATUS_AVAIL
ts.UnAvailTimeLineArray = []TimeLineSrv{}
ts.WaitTaskArray = []SchedTaskSrv{}
ts.SchedTaskArray = []OperationSrv{}
}
// 创建工具对象
func(ts *ToolSrv)Create(tooltab models.Tool){
ts.ToolNr = tooltab.Toolnr
ts.ToolGrpNr = tooltab.Toolgrpnr
ts.ToolTab = tooltab
ts.Status = common.RES_STATUS_AVAIL
ts.UnAvailTimeLineArray = []TimeLineSrv{}
ts.WaitTaskArray = []SchedTaskSrv{}
ts.SchedTaskArray = []OperationSrv{}
}
// 获取工位状态可用事件
func(ts *ToolSrv)GetAvailEvent(t time.Time)(SchedEvent){
var(
tevt ToolEvent
)
tevt = ToolEvent{TriggerTime: t, EventType: EVENT_OBJ_TOOL, Event: EVENT_TOOL_STATUS_AVAIL}
tevt.ToolNr = ts.ToolNr
return SchedEvent(tevt)
}
// 获取工位状态可用事件
func(ts *ToolSrv)GetUnAvailEvent(t time.Time)(SchedEvent){
var(
tevt ToolEvent
)
tevt = ToolEvent{TriggerTime: t, EventType: EVENT_OBJ_TOOL, Event: EVENT_TOOL_STATUS_UNAVAIL}
tevt.ToolNr = ts.ToolNr
return SchedEvent(tevt)
}
// 打印工位的调度任务结果集
func(ts *ToolSrv)Print(){
fmt.Println("调度工具:",ts.ToolNr)
for idx, op := range ts.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")
}