环形库分流点.cs 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. using ServiceCenter.Extensions;
  2. using ServiceCenter.Logs;
  3. using ServiceCenter.SqlSugars;
  4. using System.ComponentModel;
  5. using WCS.Core;
  6. using WCS.Entity;
  7. using WCS.WorkEngineering.Extensions;
  8. using WCS.WorkEngineering.Protocol.Station;
  9. using WCS.WorkEngineering.Worlds;
  10. using TaskStatus = WCS.Entity.TaskStatus;
  11. namespace WCS.WorkEngineering.Systems
  12. {
  13. /// <summary>
  14. /// 分流点
  15. /// </summary>
  16. [BelongTo(typeof(MainWorld))]
  17. [Description("环形库分流点")]
  18. public class 环形库分流点 : DeviceSystem<Device<IStation520, IStation521, IStation523, IStation91>>
  19. {
  20. protected override bool ParallelDo => true;
  21. protected override bool SaveLogsToFile => true;
  22. public override void Do(Device<IStation520, IStation521, IStation523, IStation91> obj)
  23. {
  24. if (obj.Data.VoucherNo != obj.Data2.VoucherNo) throw new KnownException($"凭证号不一致,DB520:{obj.Data.VoucherNo}-DB521:{obj.Data2.VoucherNo}", LogLevelEnum.High);
  25. if (obj.Data3.Status.HasFlag(StationStatus.Run)) throw new KnownException("设备运行中", LogLevelEnum.Low);
  26. if (!obj.Data3.Status.HasFlag(StationStatus.OT_Status)) throw new KnownException("站台货物信息与实际占用不一致", LogLevelEnum.Low);
  27. if (obj.Data2.Request != 1) throw new KnownException("无请求", LogLevelEnum.Mid);
  28. //处理异常任务
  29. if (obj.Data2.TaskNumber == 1)
  30. {
  31. obj.Data.TaskNumber = 591;
  32. obj.Data.GoodsStart = obj.Entity.Code.ToShort();
  33. obj.Data.GoodsEnd = 591;
  34. obj.Data.VoucherNo++;
  35. World.Log($"执行记录:任务号[{591}]");
  36. }
  37. var db = new SqlSugarHelper();
  38. var taskInfo = db.Default.Queryable<WCS_TaskInfo>().First(v => v.ID == obj.Data2.TaskNumber && v.Status == TaskStatus.FinishOfShunt) ?? throw new KnownException("未找到对应的WCS任务", LogLevelEnum.Mid);
  39. try
  40. {
  41. db.Connect.BeginTran();
  42. //taskInfo.Status = TaskStatus.ConveyorExecution;
  43. //taskInfo.AddrNext = "455";//TODO:暂时先用固定值
  44. taskInfo.EditWho = "WCS";
  45. taskInfo.EditTime = DateTime.Now;
  46. taskInfo.AddWCS_TASK_DTL(db, obj.Entity.Code, taskInfo.AddrNext, "环形库分流");
  47. db.Default.Updateable(taskInfo).ExecuteCommand();
  48. db.Connect.CommitTran();
  49. taskInfo.UpdateRedisHash();
  50. }
  51. catch (Exception e)
  52. {
  53. db.Connect.RollbackTran();
  54. throw new KnownException($"{obj.Data2.TaskNumber}:----{e.Message}", LogLevelEnum.High);
  55. }
  56. obj.Data.TaskNumber = obj.Data2.TaskNumber;
  57. obj.Data.GoodsStart = obj.Entity.Code.ToShort();
  58. obj.Data.GoodsEnd = 455;
  59. obj.Data.VoucherNo++;
  60. World.Log($"执行记录:任务号[{obj.Data2.TaskNumber}]");
  61. }
  62. public override bool Select(Device dev)
  63. {
  64. return dev.HasFlag(Extensions.DeviceFlags.环形库分流点);
  65. }
  66. }
  67. }