TaskExtension.cs 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using WCS.Core;
  5. using WCS.Entity;
  6. namespace WCS.Service.Extensions
  7. {
  8. /// <summary>
  9. /// 任务扩展
  10. /// </summary>
  11. public static class TaskExtension
  12. {
  13. public static T Create<T>(this WCS_TASK source)
  14. {
  15. return (T)Activator.CreateInstance(typeof(T), source);
  16. }
  17. /// <summary>
  18. /// 获取可用的出库任务
  19. /// </summary>
  20. /// <param name="tasks"></param>
  21. /// <returns></returns>
  22. public static Task[] GetOutTask(this List<WCS_TASK> tasks)
  23. {
  24. return tasks.Select(v => v.Create<Task>())
  25. .OrderBy(v => v.Line)
  26. .ThenBy(v => v.Layer)
  27. .ThenBy(v => v.Col)
  28. .Take(2)
  29. .DistinctBy(v => v.Col).OrderBy(v => v.Col).ToArray();
  30. }
  31. /// <summary>
  32. /// 获取出库任务的站台号及下一个地址
  33. /// </summary>
  34. /// <param name="task">任务</param>
  35. /// <param name="srmFork">货叉</param>
  36. public static void GetSrmStationAndaddNext(this WCS_TASK task, SrmFork srmFork)
  37. {
  38. //取任务巷道到达目标地址的下一个地址,即任务堆垛机的站台对应的设备组
  39. var stations = Device.Where(v => v.DEVICEGROUP.Any(p => p.MEMBER == Device.Find(task.TUNNEL).GetPath(task.ADDRTO.Replace("G", ""))))
  40. .Select(v => v.Create<StationDeviceGroup>())
  41. .FirstOrDefault().Items
  42. .OrderByDescending(v => v.Entity.CODE)
  43. .ToArray();
  44. //一工位放较大的站台号
  45. switch (srmFork)
  46. {
  47. case SrmFork.货叉1:
  48. task.SRMSTATION = stations[0].Entity.CODE;
  49. task.ADDRNEXT = stations[0].Entity.GetPath(task.ADDRTO).CODE;
  50. break;
  51. case SrmFork.货叉2:
  52. task.SRMSTATION = stations[1].Entity.CODE;
  53. task.ADDRNEXT = stations[1].Entity.GetPath(task.ADDRTO).CODE;
  54. break;
  55. }
  56. }
  57. }
  58. public enum SrmIndex
  59. {
  60. 工位一 = 0,
  61. 工位二 = 1,
  62. }
  63. public class Task : WCS_TASK
  64. {
  65. /// <summary>
  66. /// 行
  67. /// </summary>
  68. public short Line { get; set; }
  69. /// <summary>
  70. /// 列
  71. /// </summary>
  72. public short Col { get; set; }
  73. /// <summary>
  74. /// 层
  75. /// </summary>
  76. public short Layer { get; set; }
  77. public Task(WCS_TASK task)
  78. {
  79. var addrFrom = task.ADDRFROM.Split("-");
  80. ADDRTO = task.ADDRTO;
  81. TUNNEL = task.TUNNEL;
  82. DEVICE = task.DEVICE;
  83. ID = task.ID;
  84. Line = addrFrom[0].ToShort();
  85. Col = addrFrom[1].ToShort();
  86. Layer = addrFrom[2].ToShort();
  87. }
  88. }
  89. }