环形库分配货位.cs 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. using ServiceCenter.Extensions;
  2. using ServiceCenter.SqlSugars;
  3. using System.ComponentModel;
  4. using WCS.Core;
  5. using WCS.Entity;
  6. using WCS.Entity.Protocol.Station;
  7. using WCS.WorkEngineering.Extensions;
  8. using WCS.WorkEngineering.WebApi.Controllers;
  9. using WCS.WorkEngineering.WebApi.Models.WMS.Response;
  10. using WCS.WorkEngineering.Worlds;
  11. using TaskStatus = WCS.Entity.TaskStatus;
  12. namespace WCS.WorkEngineering.Systems.环形库
  13. {
  14. /// <summary>
  15. /// 环形库分配货位
  16. /// </summary>
  17. [BelongTo(typeof(SortingBranchWorld))]
  18. [Description("环形库分配货位")]
  19. public class 环形库分配货位 : DeviceSystem<Device<IStation520, IStation521, IStation523>>
  20. {
  21. protected override bool ParallelDo => true;
  22. public override void Do(Device<IStation520, IStation521, IStation523> obj)
  23. {
  24. if (obj.Data.VoucherNo != obj.Data2.VoucherNo)
  25. {
  26. World.Log($"凭证号不一致,DB520:{obj.Data.VoucherNo}-DB521:{obj.Data2.VoucherNo}");
  27. return;
  28. }
  29. if (obj.Data3.Status.HasFlag(StationStatus.Run))
  30. {
  31. World.Log("设备运行中");
  32. return;
  33. }
  34. ;
  35. if (!obj.Data3.Status.HasFlag(StationStatus.OT_Status))
  36. {
  37. World.Log("站台货物信息与实际占用不一致");
  38. return;
  39. }
  40. if (!obj.Data3.Status.HasFlag(StationStatus.PH_Status))
  41. {
  42. }
  43. ;
  44. if (obj.Data2.Request != 1)
  45. {
  46. World.Log("无请求");
  47. return;
  48. }
  49. WCS_TaskInfo taskInfo = null;
  50. int sideNum = 0;
  51. //开始获取货位号
  52. SqlSugarHelper.Do(db =>
  53. {
  54. var task = db.Default.Queryable<WCS_TaskInfo>().First(v => obj.Data2.TaskNumber == v.ID);
  55. if (task == null)
  56. {
  57. World.Log($"未找到任务[{obj.Data2.TaskNumber}],请人工接入处理!!!!");
  58. return;
  59. }
  60. if (task.Type != TaskType.SetPlate)
  61. {
  62. World.Log($"任务[{obj.Data2.TaskNumber}]任务类型错误,应该是组盘任务,请人工接入处理!!!!");
  63. return;
  64. }
  65. if (task.Status != TaskStatus.FinishOfShunt)
  66. {
  67. World.Log($"任务[{obj.Data2.TaskNumber}]任务状态错误,当前状态应该市分流结束,,请人工接入处理!!!!");
  68. return;
  69. }
  70. var res = WmsApi.RingApplyStockInLoc(task.ID, task.Device, obj.Entity.Code, task.GoodsType);
  71. if (res.ResCode != ResponseStatusCodeEnum.Sucess)
  72. {
  73. World.Log(res.ResMsg,ServiceCenter.Logs.LogLevelEnum.Mid);
  74. return;
  75. }
  76. task.AddrTo = res.ResData.CellNo;
  77. task.Line = res.ResData.Row;
  78. task.Col = res.ResData.Colomn;
  79. task.Layer = res.ResData.Layer;
  80. task.Depth = res.ResData.Row;
  81. task.LastInteractionPoint = obj.Entity.Code;
  82. task.Device = obj.Entity.Code;
  83. task.EditWho = "WCS";
  84. db.Default.UpdateableRowLock(task).UpdateColumns(x => new { x.Status, x.AddrTo, x.Line, x.Col, x.Layer, x.Depth, x.LastInteractionPoint, x.SrmStation, x.Device, x.EditWho }).ExecuteCommand();
  85. task.AddWCS_TASK_DTL(db.Default, obj.Entity.Code, task.AddrTo, $"任务分配货位{task.AddrTo}");
  86. var invNow = db.Default.Queryable<BillInvnow>().NoLock().First(x => x.ContGrpBarCode == task.BarCode);
  87. sideNum = invNow.SideNum;
  88. taskInfo = task;
  89. });
  90. if (taskInfo == null) return;
  91. var next = (taskInfo.AddrNext.ToShort() - 2).ToShort();
  92. obj.Data.TaskNumber = taskInfo.ID;
  93. obj.Data.TaskNumber = taskInfo.ID;
  94. obj.Data.GoodsStart = obj.Entity.Code.ToShort();
  95. obj.Data.GoodsStart = obj.Entity.Code.ToShort();
  96. obj.Data.GoodsEnd = next;
  97. if (sideNum == 2) //反面
  98. {
  99. obj.Data.CmdType = StationCmd.Res6;
  100. obj.Data.CmdType = StationCmd.Res6;
  101. }
  102. obj.Data.GoodsEnd = next;
  103. obj.Data.SetVoucherNo();
  104. }
  105. public override bool Select(Device dev)
  106. {
  107. var codes = new List<string>()
  108. {
  109. "444","644","844","1044","1244","1444",
  110. "426","626","826","1026","1226","1426",
  111. "435","635","835","1035","1235","1435"
  112. };
  113. return codes.Any(x => x == dev.Code);
  114. }
  115. }
  116. }