高级排程
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

  1. package service
  2. import (
  3. "LAPP_AS/common"
  4. base_model "LAPP_AS/models/base"
  5. "fmt"
  6. "time"
  7. )
  8. // 工具类型资源对象
  9. type ToolSrv struct{
  10. ToolId string
  11. ToolGrpId string
  12. Status int // 可用状态
  13. UnAvailTimeLineArray []TimeLineSrv // 不可用时段
  14. WaitTaskArray []SchedTaskSrv // 任务等待队列
  15. SchedTaskArray []OperationSrv // 已计划任务队列
  16. ToolTab base_model.Tool
  17. }
  18. // 可选工具资源对象
  19. type OptionalToolSrv struct{
  20. ToolId string
  21. Priority int
  22. }
  23. // 初始化工具对象
  24. func(ts *ToolSrv)Init(tnr, tgnr string){
  25. ts.ToolId = tnr
  26. ts.ToolGrpId = tgnr
  27. ts.Status = common.RES_STATUS_AVAIL
  28. ts.UnAvailTimeLineArray = []TimeLineSrv{}
  29. ts.WaitTaskArray = []SchedTaskSrv{}
  30. ts.SchedTaskArray = []OperationSrv{}
  31. }
  32. // 创建工具对象
  33. func(ts *ToolSrv)Create(tooltab base_model.Tool){
  34. ts.ToolId = tooltab.ToolId
  35. ts.ToolGrpId = tooltab.ToolGrpId
  36. ts.ToolTab = tooltab
  37. ts.Status = common.RES_STATUS_AVAIL
  38. ts.UnAvailTimeLineArray = []TimeLineSrv{}
  39. ts.WaitTaskArray = []SchedTaskSrv{}
  40. ts.SchedTaskArray = []OperationSrv{}
  41. }
  42. // 获取工位状态可用事件
  43. func(ts *ToolSrv)GetAvailEvent(t time.Time)(SchedEvent){
  44. var(
  45. tevt ToolEvent
  46. )
  47. tevt = ToolEvent{TriggerTime: t, EventType: EVENT_OBJ_TOOL, Event: EVENT_TOOL_STATUS_AVAIL}
  48. tevt.ToolId = ts.ToolId
  49. return SchedEvent(tevt)
  50. }
  51. // 获取工位状态可用事件
  52. func(ts *ToolSrv)GetUnAvailEvent(t time.Time)(SchedEvent){
  53. var(
  54. tevt ToolEvent
  55. )
  56. tevt = ToolEvent{TriggerTime: t, EventType: EVENT_OBJ_TOOL, Event: EVENT_TOOL_STATUS_UNAVAIL}
  57. tevt.ToolId = ts.ToolId
  58. return SchedEvent(tevt)
  59. }
  60. // 打印工位的调度任务结果集
  61. func(ts *ToolSrv)Print(){
  62. fmt.Println("调度工具:",ts.ToolId)
  63. for idx, op := range ts.SchedTaskArray{
  64. if idx == 0 {
  65. fmt.Printf("|%s<--%s(%d)-->%s|",op.PlanStartTime.Format("01-02 15:04"),op.OrderId,op.OperationNr,op.PlanEndTime.Format("01-02 15:04"))
  66. }else{
  67. fmt.Printf("%s<--%s(%d)-->%s|",op.PlanStartTime.Format("01-02 15:04"),op.OrderId,op.OperationNr,op.PlanEndTime.Format("01-02 15:04"))
  68. }
  69. }
  70. fmt.Printf("\n")
  71. }