退料搬运.cs 3.9 KB

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