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

84 lines
2.4 KiB

3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
3 years ago
  1. package service
  2. import (
  3. "fmt"
  4. "leit.com/aps_engine/common"
  5. "leit.com/aps_engine/models"
  6. "time"
  7. )
  8. // 工位类型资源对象
  9. type WorkPlaceSrv struct{
  10. WorkPlaceNr int
  11. WorkPlaceGrpNr int // 工位组对象
  12. Wptab models.Workplace
  13. Status int // 工位可用状态默认不可用,通过时间模型的加载变为可用
  14. TimeCurve TimeCurveSrv // 加载完时间模型后的时间曲线
  15. SchedTimeCurve TimeCurveSrv // 调度过程中动态计算的时间曲线
  16. WaitTaskArray []SchedTaskSrv // 任务等待队列
  17. SchedTaskArray []OperationSrv // 已计划任务队列
  18. }
  19. // 可选工位资源对象
  20. type OptionalWorkPlaceSrv struct{
  21. WorkPlaceNr int
  22. Priority int
  23. }
  24. // 初始化对象
  25. func(wps *WorkPlaceSrv)Init(wpnr, wpgnr int){
  26. wps.WorkPlaceNr = wpnr
  27. wps.WorkPlaceGrpNr = wpgnr
  28. wps.Status = common.RES_STATUS_UNAVAIL
  29. wps.TimeCurve = TimeCurveSrv{}
  30. wps.SchedTimeCurve = TimeCurveSrv{}
  31. wps.WaitTaskArray = []SchedTaskSrv{}
  32. wps.SchedTaskArray = []OperationSrv{}
  33. }
  34. // 初始化对象
  35. func(wps *WorkPlaceSrv)Create(wptab models.Workplace){
  36. wps.WorkPlaceNr = wptab.Workplacenr
  37. wps.WorkPlaceGrpNr = wptab.Workplacegrpnr
  38. wps.Wptab = wptab
  39. wps.Status = common.RES_STATUS_UNAVAIL
  40. wps.TimeCurve = TimeCurveSrv{}
  41. wps.SchedTimeCurve = TimeCurveSrv{}
  42. wps.WaitTaskArray = []SchedTaskSrv{}
  43. wps.SchedTaskArray = []OperationSrv{}
  44. }
  45. // 获取工位状态可用事件
  46. func(wps *WorkPlaceSrv)GetAvailEvent(t time.Time)(SchedEvent){
  47. var(
  48. wpet WorkPlaceEvent
  49. )
  50. wpet = WorkPlaceEvent{TriggerTime: t, EventType: EVENT_OBJ_WP, Event: EVENT_WP_STATUS_AVAIL}
  51. wpet.WorkPlaceNr = wps.WorkPlaceNr
  52. return SchedEvent(wpet)
  53. }
  54. // 获取工位状态可用事件
  55. func(wps *WorkPlaceSrv)GetUnAvailEvent(t time.Time)(SchedEvent){
  56. var(
  57. wpet WorkPlaceEvent
  58. )
  59. wpet = WorkPlaceEvent{TriggerTime: t, EventType: EVENT_OBJ_WP, Event: EVENT_WP_STATUS_UNAVAIL}
  60. wpet.WorkPlaceNr = wps.WorkPlaceNr
  61. return SchedEvent(wpet)
  62. }
  63. // 打印工位的调度任务结果集
  64. func(wps *WorkPlaceSrv)Print(){
  65. fmt.Println("调度工位:",wps.WorkPlaceNr)
  66. for idx, op := range wps.SchedTaskArray{
  67. if idx == 0 {
  68. fmt.Printf("|%s<--%s(%d)-->%s|",op.PlanStartTime.Format("01-02 15:04"),op.OrderId,op.OperationNr,op.PlanEndTime.Format("01-02 15:04"))
  69. }else{
  70. fmt.Printf("%s<--%s(%d)-->%s|",op.PlanStartTime.Format("01-02 15:04"),op.OrderId,op.OperationNr,op.PlanEndTime.Format("01-02 15:04"))
  71. }
  72. }
  73. fmt.Printf("\n")
  74. }