AgvSystems.cs 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. using ServiceCenter.SqlSugars;
  2. using System.ComponentModel;
  3. using WCS.Core;
  4. using WCS.Entity;
  5. using WCS.WorkEngineering.Extensions;
  6. using WCS.WorkEngineering.WebApi.Controllers;
  7. using WCS.WorkEngineering.Worlds;
  8. using DeviceFlags = WCS.WorkEngineering.Extensions.DeviceFlags;
  9. namespace WCS.WorkEngineering.Systems
  10. {
  11. /// <summary>
  12. /// Agv交互系统
  13. /// </summary>
  14. [BelongTo(typeof(MainWorld))]
  15. [Description("Agv交互系统")]
  16. public class AgvSystems : DeviceSystem<Station>
  17. {
  18. protected override bool ParallelDo => true;
  19. protected override bool SaveLogsToFile => true;
  20. public override void Do(Station obj)
  21. {
  22. if (obj.Entity.HasFlag(DeviceFlags.出库))
  23. {
  24. SqlSugarHelper.Do(db =>
  25. {
  26. //获取所有未结束的AGV任务
  27. var agvTaks = db.Default.Queryable<WCS_AgvTaskInfo>().Where(v => v.Status <= AGVTaskStatus.MissionCompleted && v.Position == obj.Entity.Code).SplitTable(tabs => tabs.Take(3)).ToList();
  28. foreach (var agv in agvTaks)
  29. {
  30. switch (agv.Status)
  31. {
  32. case AGVTaskStatus.RequestOrPermission2:
  33. //调继续执行任务接口
  34. var res = AgvApi.ContinueTask(agv.AgvID, "");
  35. agv.Status = AGVTaskStatus.Complete2;
  36. break;
  37. }
  38. db.Default.Updateable(agv).AddQueue();
  39. }
  40. db.Default.SaveQueues();
  41. });
  42. }
  43. else if (obj.Entity.HasFlag(DeviceFlags.入库))
  44. {
  45. SqlSugarHelper.Do(db =>
  46. {
  47. //获取所有未结束的AGV任务
  48. var agvTaks = db.Default.Queryable<WCS_AgvTaskInfo>().Where(v => v.Status <= AGVTaskStatus.MissionCompleted && v.Position == obj.Entity.Code).SplitTable(tabs => tabs.Take(3)).ToList();
  49. foreach (var agv in agvTaks)
  50. {
  51. switch (agv.Status)
  52. {
  53. case AGVTaskStatus.RequestOrPermission1:
  54. //调继续执行任务接口
  55. AgvApi.ContinueTask(agv.AgvID, "");
  56. agv.Status = AGVTaskStatus.Complete1;
  57. break;
  58. case AGVTaskStatus.RequestOrPermission2:
  59. //调继续执行任务接口
  60. AgvApi.ContinueTask(agv.AgvID, "");
  61. agv.Status = AGVTaskStatus.Complete2;
  62. break;
  63. }
  64. db.Default.Updateable(agv).AddQueue();
  65. }
  66. db.Default.SaveQueues();
  67. });
  68. }
  69. }
  70. public override bool Select(Device dev)
  71. {
  72. return dev.HasFlag(DeviceFlags.巷道口);
  73. }
  74. }
  75. }