扫码位分配.cs 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. using ServiceCenter.Extensions;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.ComponentModel;
  5. using ServiceCenter.Logs;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Threading.Tasks;
  9. using WCS.Core;
  10. using WCS.Entity.Protocol.Station;
  11. using WCS.WorkEngineering.Worlds;
  12. using WCS.WorkEngineering.Extensions;
  13. using ServiceCenter.SqlSugars;
  14. using WCS.Entity;
  15. using TaskStatus = WCS.Entity.TaskStatus;
  16. namespace WCS.WorkEngineering.Systems.重绕区
  17. {
  18. /// <summary>
  19. /// 扫码位分配
  20. /// </summary>
  21. [BelongTo(typeof(RewindWorld))]
  22. [Description("扫码位分配")]
  23. public class 扫码位分配 : DeviceSystem<Device<IStation520, IStation521, IStation523>>
  24. {
  25. protected override bool ParallelDo => true;
  26. public override void Do(Device<IStation520, IStation521, IStation523> obj)
  27. {
  28. if (obj.Data.VoucherNo != obj.Data2.VoucherNo)
  29. {
  30. World.Log($"凭证号不一致,DB520:{obj.Data.VoucherNo}-DB521:{obj.Data2.VoucherNo}");
  31. return;
  32. }
  33. if (obj.Data3.Status.HasFlag(StationStatus.Run))
  34. {
  35. World.Log("设备运行中");
  36. return;
  37. }
  38. ;
  39. if (!obj.Data3.Status.HasFlag(StationStatus.OT_Status))
  40. {
  41. World.Log("站台货物信息与实际占用不一致");
  42. return;
  43. }
  44. if (!obj.Data3.Status.HasFlag(StationStatus.PH_Status))
  45. {
  46. World.Log("无光电");
  47. return;
  48. }
  49. ;
  50. if (obj.Data2.Request != 1)
  51. {
  52. World.Log("无请求");
  53. return;
  54. }
  55. List<string> stations = new List<string> {"9119","9120","9121","9122","9123","9124","9125","9130", "9131", "9132", "9133", "9134", "9135", "9136", "9141",
  56. "9142", "9143", "9144", "9145", "9146", "9147"};
  57. List<string> targetStations = new List<string> { "9125", "9136", "9147" };
  58. var devs = Device.All.Where(x => stations.Contains(x.Code)).Select(x =>
  59. new Device<IStation520, IStation521, IStation523>(x, World));
  60. devs = devs.Where(x =>targetStations.Contains(x.Data.GoodsEnd.ToString())).ToList();
  61. short next = 9147;
  62. var num_9125 = devs.Count(x => x.Data.GoodsEnd.ToString() == "9125");
  63. var num_9136 = devs.Count(x => x.Data.GoodsEnd.ToString() == "9136");
  64. var num_9147 = devs.Count(x => x.Data.GoodsEnd.ToString() == "9147");
  65. if (devs.Count() == 0)
  66. {
  67. next = 9147;
  68. }
  69. else
  70. {
  71. next = ComputeAddto(num_9125, num_9136, num_9147);
  72. }
  73. obj.Data.TaskNumber = obj.Entity.Code.ToShort();
  74. obj.Data.TaskNumber = obj.Entity.Code.ToShort();
  75. obj.Data.GoodsStart = obj.Entity.Code.ToShort();
  76. obj.Data.GoodsStart = obj.Entity.Code.ToShort();
  77. obj.Data.GoodsEnd = next;
  78. obj.Data.GoodsEnd = next;
  79. obj.Data.SetVoucherNo();
  80. }
  81. public short ComputeAddto(int num_9125, int num_9136, int num_9147)
  82. {
  83. if (num_9125 < num_9136 && num_9125 < num_9147)
  84. {
  85. return num_9125.ToShort();
  86. }
  87. else if (num_9136 < num_9125 && num_9136 < num_9147)
  88. {
  89. return num_9136.ToShort();
  90. }
  91. else
  92. {
  93. return num_9147.ToShort();
  94. }
  95. }
  96. public override bool Select(Device dev)
  97. {
  98. return dev.Code is "9115" or "9021";
  99. }
  100. }
  101. }