高级排程
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 (
"LAPP_AS/common"
base_model "LAPP_AS/models/base"
"fmt"
"time"
)
// 工具类型资源对象
type ToolSrv struct{
ToolId string
ToolGrpId string
Status int // 可用状态
UnAvailTimeLineArray []TimeLineSrv // 不可用时段
WaitTaskArray []SchedTaskSrv // 任务等待队列
SchedTaskArray []OperationSrv // 已计划任务队列
ToolTab base_model.Tool
}
// 可选工具资源对象
type OptionalToolSrv struct{
ToolId string
Priority int
}
// 初始化工具对象
func(ts *ToolSrv)Init(tnr, tgnr string){
ts.ToolId = tnr
ts.ToolGrpId = tgnr
ts.Status = common.RES_STATUS_AVAIL
ts.UnAvailTimeLineArray = []TimeLineSrv{}
ts.WaitTaskArray = []SchedTaskSrv{}
ts.SchedTaskArray = []OperationSrv{}
}
// 创建工具对象
func(ts *ToolSrv)Create(tooltab base_model.Tool){
ts.ToolId = tooltab.ToolId
ts.ToolGrpId = tooltab.ToolGrpId
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.ToolId = ts.ToolId
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.ToolId = ts.ToolId
return SchedEvent(tevt)
}
// 打印工位的调度任务结果集
func(ts *ToolSrv)Print(){
fmt.Println("调度工具:",ts.ToolId)
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")
}