环形库码垛区补空托盘任务生成.cs 3.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  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.Worlds;
  10. using DeviceFlags = WCS.WorkEngineering.Extensions.DeviceFlags;
  11. using TaskStatus = WCS.Entity.TaskStatus;
  12. namespace WCS.WorkEngineering.Systems
  13. {
  14. /// <summary>
  15. /// 环形库码垛区补空托盘任务生成
  16. /// </summary>
  17. [BelongTo(typeof(RingWorld))]
  18. [Description("环形库码垛区补空托盘任务生成")]
  19. public class 环形库码垛区补空托盘任务生成 : DeviceSystem<Device<IStation520, IStation521, IStation523>>
  20. {
  21. protected override bool ParallelDo => true;
  22. protected override bool SaveLogsToFile => true;
  23. public override void Do(Device<IStation520, IStation521, IStation523> obj)
  24. {
  25. if (obj.Data3.Status.HasFlag(StationStatus.PH_Status)) return;
  26. WCS_TaskInfo deliveryTask = null;
  27. SqlSugarHelper.Do(_db =>
  28. {
  29. var db = _db.Default;
  30. //检查是否有待执行状态放货点是自己的出库任务
  31. var ringTask = db.Queryable<WCS_TaskInfo>().First(x => x.Type == TaskType.OutDepot && x.Status == TaskStatus.WaitingToExecute && x.SrmStation == obj.Entity.Code);
  32. if (ringTask == null)
  33. {
  34. //开始申请码垛任务
  35. WmsApi.ApplyPalletizingStockOut(obj.Entity.Code, obj.Entity.Sources.Single(x => x.HasFlag(DeviceFlags.Robot)).Code);
  36. return;
  37. }
  38. var task = db.Queryable<WCS_TaskInfo>().First(x => x.Type == TaskType.Delivery && x.AddrTo == obj.Entity.Code);
  39. if (task != null) return;
  40. //开始获取当前地址上个设备的上一个设备中的非零九托盘拆机
  41. var addrFrom = obj.Entity.Sources.SelectMany(x => x.Sources).Single(x => x.HasFlag(DeviceFlags.拆盘机非09));
  42. var dev = Device.All.Where(x => x.Code == addrFrom.Code).Select(x => new Device<IStation520>(x, World)).FirstOrDefault();
  43. if (dev.Data.TaskNumber != 0 || dev.Data.GoodsEnd != 0) return;
  44. //开始创建搬运任务
  45. task = new WCS_TaskInfo()
  46. {
  47. AddrFrom = addrFrom.Code,
  48. AddrTo = obj.Entity.Code,
  49. BarCode = "码垛托盘搬运-" + obj.Entity.Code,
  50. Status = Entity.TaskStatus.NewBuild,
  51. PalletType = ringTask.PalletType,
  52. FullQty = ringTask.FullQty,
  53. Type = TaskType.Delivery,
  54. AddWho = "WCS",
  55. AddTime = DateTime.Now
  56. };
  57. var res = db.Insertable(task).ExecuteReturnEntity();
  58. var taskOld = res.Mapper<WCS_TaskOld, WCS_TaskInfo>();
  59. taskOld.Id = res.ID;
  60. taskOld.AddTime = DateTime.Now; ;
  61. db.Insertable(taskOld).SplitTable().ExecuteCommand();
  62. res.AddWCS_TASK_DTL(db, obj.Entity.Code, task.AddrTo, "初始化码垛托盘搬运任务");
  63. deliveryTask = res;
  64. });
  65. if (deliveryTask == null) return;
  66. var dev = Device.All.Where(x => x.Code == deliveryTask.AddrFrom).Select(x => new Device<IStation520>(x, World)).FirstOrDefault();
  67. dev.Data.TaskNumber = deliveryTask.ID;
  68. dev.Data.GoodsEnd = obj.Entity.Code.ToShort();
  69. }
  70. public override bool Select(Device dev)
  71. {
  72. return dev.HasFlag(DeviceFlags.环形库码垛工位);
  73. }
  74. }
  75. }