退料搬运.cs 3.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  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. namespace WCS.WorkEngineering.Systems.重绕区
  12. {
  13. [BelongTo(typeof(RewindWorld))]
  14. [Description("退料搬运")]
  15. public class 退料搬运 : DeviceSystem<Device<IStation520, IStation521, IStation523>>
  16. {
  17. protected override bool ParallelDo => true;
  18. public override void Do(Device<IStation520, IStation521, IStation523> obj)
  19. {
  20. if (!obj.Data3.Status.HasFlag(StationStatus.PH_Status))
  21. {
  22. World.Log($"设备无光电");
  23. return;
  24. }
  25. SqlSugarHelper.Do(db =>
  26. {
  27. var ph_9001 = new Device<IStation523>(Device.All.First(x => x.Code == "9001"), World);
  28. var ph_9101 = new Device<IStation523>(Device.All.First(x => x.Code == "9101"), World);
  29. var flag1 = !db.Queryable<WCS_AgvTaskInfo>().Where(v => v.Status > AGVTaskStatus.Confirm && v.Status < AGVTaskStatus.MissionCompleted && v.TaskType == AGVTaskType.EnterDepot && v.Station == "9001")
  30. .SplitTable(v => v.Take(2)).Any() && !ph_9001.Data.Status.HasFlag(StationStatus.PH_Status);
  31. var flag2 = !db.Queryable<WCS_AgvTaskInfo>().Where(v => v.Status > AGVTaskStatus.Confirm && v.Status < AGVTaskStatus.MissionCompleted && v.TaskType == AGVTaskType.EnterDepot && v.Station == "9101")
  32. .SplitTable(v => v.Take(2)).Any() && !ph_9101.Data.Status.HasFlag(StationStatus.PH_Status);
  33. var isUse = false;
  34. if (flag1 || flag2)
  35. {
  36. var res = WmsApi.GetFlatLocalIn(100, "T3", obj.Entity.Code, 100);
  37. if (res.ResCode == ResponseStatusCodeEnum.Sucess && res.ResData.CellNo == obj.Entity.Code)
  38. {
  39. isUse = true;
  40. }
  41. else
  42. {
  43. World.Log($"{obj.Entity.Code}光电有货但不可用");
  44. return;
  45. }
  46. }
  47. if (isUse)
  48. {
  49. var agvId = DateTime.Now.GetFormat(GetFormatterEnum.only) + 9001;
  50. //开始创建AGV任务
  51. var agvTask = db.Queryable<WCS_AgvTaskInfo>().RowLock().SplitTable(x => x.Take(2)).Single(x => x.Position == obj.Entity.Code && x.TaskType == AGVTaskType.EnterDepot && x.Status < AGVTaskStatus.MissionCompleted);
  52. if (agvTask == null)
  53. {
  54. //开始处理叫料AGV任务任务
  55. db.InsertableRowLock(new WCS_AgvTaskInfo()
  56. {
  57. ID = db.GetAgvTaskId(),
  58. TaskType = AGVTaskType.EnterDepot,
  59. Status = AGVTaskStatus.NewBuild,
  60. TaskId = 9001,
  61. Position = obj.Entity.Code,
  62. Station = flag2 == true ? "9101" : "9001",
  63. WorkShop = 333,
  64. AddWho = "WCS",
  65. AddTime = DateTime.Now,
  66. AgvID = agvId
  67. }).SplitTable().ExecuteCommand();
  68. }
  69. }
  70. });
  71. }
  72. public override bool Select(Device dev)
  73. {
  74. return dev.Code is "9210" or "9211" or "9212" or "9213" or "9214";
  75. }
  76. }
  77. }