码垛区补空托盘任务生成.cs 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. using PlcSiemens.Core.Extension;
  2. using ServiceCenter.Extensions;
  3. using ServiceCenter.SqlSugars;
  4. using System.ComponentModel;
  5. using WCS.Core;
  6. using WCS.Entity;
  7. using WCS.WorkEngineering.Protocol.Station;
  8. using WCS.WorkEngineering.Worlds;
  9. using TaskStatus = WCS.Entity.TaskStatus;
  10. namespace WCS.WorkEngineering.Systems
  11. {
  12. /// <summary>
  13. /// 码垛区补空托盘任务生成
  14. /// </summary>
  15. [BelongTo(typeof(MainWorld))]
  16. [Description("码垛区补空托盘任务生成")]
  17. public class 码垛区补空托盘任务生成 : DeviceSystem<Device<IStation520>>
  18. {
  19. protected override bool ParallelDo => true;
  20. protected override bool SaveLogsToFile => true;
  21. public override void Do(Device<IStation520> obj)
  22. {
  23. WCS_Palletizing palletizing = null;
  24. SqlSugarHelper.Do(_db =>
  25. {
  26. var db = _db.Default;
  27. //取一个时间最靠前的,没有绑定码垛工位的码垛记录
  28. var palletizingInfo = db.Queryable<WCS_Palletizing>().First(x => x.PalletizingStation == null);
  29. if (palletizingInfo == null) return;
  30. var palleTask = db.Queryable<WCS_TaskInfo>().First(x => x.ID == palletizingInfo.TaskId && (x.Status == TaskStatus.FinishOfShunt || x.Status == TaskStatus.ConveyorExecution));
  31. if (palleTask == null) return;
  32. //获取可以使用的放货站台信息
  33. var taskAddNext = Device.All.FirstOrDefault(x => x.Code == palleTask.AddrNext).Targets.FirstOrDefault().Targets.FirstOrDefault().Targets;
  34. if (taskAddNext == null) return;
  35. var devs = Device.All.Where(x => taskAddNext.Contains(x)).Select(x => new Device<IStation520, IStation521, IStation523>(x, World)).ToList();
  36. //取一个可用用于码垛的地方
  37. var dev = devs.FirstOrDefault(x => !x.Data3.Status.HasFlag(StationStatus.PH_Status));
  38. if (dev == null) return;
  39. palletizingInfo.PalletizingStation = dev.Entity.Code;
  40. db.Updateable(palletizingInfo).ExecuteCommand();
  41. palletizing = palletizingInfo;
  42. });
  43. if (palletizing == null) return;
  44. //TODO:取货地址暂时写死,后续依靠任务进行计算
  45. var dev = Device.All.Where(x => x.Code == "1606").Select(x => new Device<IStation520>(x, World)).FirstOrDefault();
  46. dev.Data.TaskNumber = palletizing.Id;
  47. dev.Data.GoodsEnd = palletizing.PalletizingStation!.ToShort();
  48. }
  49. public override bool Select(Device dev)
  50. {
  51. return dev.Code == nameof(码垛区补空托盘任务生成);
  52. }
  53. }
  54. }