主线分流点.cs 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. using Newtonsoft.Json;
  2. using ServiceCenter.Extensions;
  3. using ServiceCenter.Logs;
  4. using ServiceCenter.Redis;
  5. using System.ComponentModel;
  6. using WCS.Core;
  7. using WCS.WorkEngineering.Extensions;
  8. using WCS.WorkEngineering.Protocol.BCR;
  9. using WCS.WorkEngineering.Protocol.Station;
  10. using WCS.WorkEngineering.Worlds;
  11. namespace WCS.WorkEngineering.Systems
  12. {
  13. /// <summary>
  14. /// 主线分流
  15. /// </summary>
  16. [BelongTo(typeof(MainWorld))]
  17. [Description("主线分流点")]
  18. public class 主线分流点 : DeviceSystem<Device<IStation520, IStation521, IStation523, IBCR83>>
  19. {
  20. protected override bool ParallelDo => true;
  21. protected override bool SaveLogsToFile => true;
  22. public override void Do(Device<IStation520, IStation521, IStation523, IBCR83> obj)
  23. {
  24. if (obj.Data.VoucherNo != obj.Data2.VoucherNo) throw new KnownException($"凭证号不一致,DB520:{obj.Data.VoucherNo}-DB521:{obj.Data2.VoucherNo}", LogLevelEnum.High);
  25. if (obj.Data4.index == obj.Data4.Lastindex) throw new KnownException("扫码结果未更新", LogLevelEnum.Mid);
  26. if (obj.Data2.Request != 1) throw new KnownException("无请求", LogLevelEnum.Mid);
  27. //获取条码
  28. var bcr = obj.Data4.BcrCode.Trim('\0').Trim();
  29. if (string.IsNullOrWhiteSpace(bcr))
  30. {
  31. obj.Data.TaskNumber = 1;
  32. obj.Data.GoodsStart = obj.Entity.Code.ToShort();
  33. obj.Data.GoodsEnd = 418;
  34. obj.Data.VoucherNo++;
  35. World.Log($"执行记录:条码:[{bcr}];任务号[{1}],扫码错误");
  36. }
  37. try
  38. {
  39. var key = $"AllocationWarehouseSort:{bcr}";
  40. var value = RedisHub.WMS.Get(key);
  41. if (value == null)
  42. {
  43. obj.Data.TaskNumber = 1;
  44. obj.Data.GoodsStart = obj.Entity.Code.ToShort();
  45. obj.Data.GoodsEnd = 418;
  46. obj.Data.VoucherNo++;
  47. }
  48. //throw new KnownException($"{bcr}无入库信息", LogLevelEnum.Low);
  49. //获取到仓库Id
  50. var mainlineDiversion = JsonConvert.DeserializeObject<MainlineDiversion>(value);
  51. //更具仓库ID来分配目标地址
  52. //TODO:暂未考虑工字轮型号,统一往09走问题
  53. int nextAdd = 0;
  54. switch (mainlineDiversion.WarehouseCode)
  55. {
  56. case "1N":
  57. nextAdd = 418;
  58. break;
  59. case "1S":
  60. nextAdd = 0;
  61. break;
  62. case "2N":
  63. nextAdd = 0;
  64. break;
  65. case "2S":
  66. nextAdd = 0;
  67. break;
  68. case "3N":
  69. nextAdd = 0;
  70. break;
  71. case "3S":
  72. nextAdd = 0;
  73. break;
  74. }
  75. obj.Data.TaskNumber = mainlineDiversion.TaskId;
  76. obj.Data.GoodsStart = obj.Entity.Code.ToShort();
  77. obj.Data.GoodsEnd = nextAdd.ToShort();
  78. obj.Data.VoucherNo++;
  79. World.Log($"执行记录:条码:[{bcr}];任务号[{mainlineDiversion.TaskId}]");
  80. RedisHub.WMS.Del(key);
  81. }
  82. catch (Exception e)
  83. {
  84. var a = 0;
  85. }
  86. }
  87. public override bool Select(Device dev)
  88. {
  89. return dev.HasFlag(Extensions.DeviceFlags.主线分流点);
  90. }
  91. }
  92. /// <summary>
  93. /// 主线分流
  94. /// </summary>
  95. public class MainlineDiversion
  96. {
  97. /// <summary>
  98. /// 任务号
  99. /// </summary>
  100. public int TaskId { get; set; }
  101. /// <summary>
  102. /// 仓库号
  103. /// </summary>
  104. public string WarehouseCode { get; set; }
  105. }
  106. }