涂布出入库.cs 4.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. using DBHelper;
  2. using System.Linq;
  3. using WCS.Core;
  4. using WCS.Entity;
  5. using WCS.Entity.Protocol;
  6. using WCS.Service.Extensions;
  7. namespace WCS.Service.Works.Station
  8. {
  9. /// <summary>
  10. /// 涂布出库分配出库口
  11. /// </summary>
  12. //[WorkTitle(typeof(ProductHandler), "涂布出库分配出库口")]
  13. public class 涂布出库分配出库口 : DeviceWork<StationDevice>
  14. {
  15. protected override void Do(StationDevice obj)
  16. {
  17. obj.EX(obj =>
  18. {
  19. if (!obj.Data2.Status.HasFlag(IstationStatus.光电状态)) throw new DoException("无光电");
  20. if (obj.Data3.Status.HasFlag(StationStatus.运行状态位)) throw new DoException("设备运行中");
  21. if (obj.Data.VoucherNo != obj.Data2.VoucherNo)
  22. throw new WarnException($"等待任务[{obj.Data2.Tasknum}]执行--凭证号不一致[{obj.Data.VoucherNo}][{obj.Data2.VoucherNo}]");
  23. if (obj.Data2.Tasknum < 10000) throw new DoException("无任务");
  24. if (obj.Data2.Request != IstationRequest.请求分配目标地址) throw new WarnException("有任务无请求");
  25. DB.Do(db =>
  26. {
  27. var task = db.Default.Set<WCS_TASK>().FirstOrDefault(v => v.TYPE == TaskType.出库 && v.SRMSTATION == obj.Entity.CODE && v.STATUS == WCS.Entity.TaskStatus.堆垛机完成);
  28. var tasks = db.Default.Set<WCS_TASK>().Where(v => v.TaskGroupKey == task.TaskGroupKey);
  29. if (tasks.Any(v => v.STATUS != WCS.Entity.TaskStatus.堆垛机完成 && v.STATUS != WCS.Entity.TaskStatus.执行中))
  30. throw new WarnException("任务异常,同组任务状态不为堆垛机完成或执行中");
  31. if (task == null) throw new WarnException("WCS无该任务信息");
  32. if (task.SRMSTATION != obj.Entity.CODE && task.STATUS != WCS.Entity.TaskStatus.堆垛机完成) throw new WarnException("任务状态不是堆垛机完成");
  33. task.STATUS = WCS.Entity.TaskStatus.执行中;
  34. db.Default.SaveChanges();
  35. task.CreateStatusLog(db, $"状态由[{WCS.Entity.TaskStatus.堆垛机完成}]变更为[{task.STATUS}]-{obj.Entity.Code}", this.GetType());
  36. //开始写入目标地址
  37. obj.Data.Tasknum = task.ID;
  38. obj.Data.Goodsstart = obj.Entity.CODE.ToShort();
  39. obj.Data.Goodsend = task.ADDRNEXT.ToShort();
  40. obj.Data.CmdType = IstationCmdType.堆垛机放货完成请求目标地址;
  41. obj.Data.VoucherNo++;
  42. });
  43. });
  44. }
  45. protected override bool SelectDevice(WCS_DEVICE dev)
  46. {
  47. return dev.Is(DF.涂布出库取货站台);
  48. }
  49. }
  50. /// <summary>
  51. /// 涂布出库分配AGV取货点
  52. /// </summary>
  53. //[WorkTitle(typeof(ProductHandler), "涂布出库分配AGV取货点")]
  54. public class 涂布出库分配AGV取货点 : DeviceWork<StationDevice>
  55. {
  56. protected override void Do(StationDevice obj)
  57. {
  58. obj.EX(obj =>
  59. {
  60. if (!obj.Data2.Status.HasFlag(IstationStatus.光电状态)) throw new DoException("无光电");
  61. if (obj.Data3.Status.HasFlag(StationStatus.运行状态位)) throw new DoException("设备运行中");
  62. if (obj.Data.VoucherNo != obj.Data2.VoucherNo)
  63. throw new WarnException($"等待任务[{obj.Data2.Tasknum}]执行--凭证号不一致[{obj.Data.VoucherNo}][{obj.Data2.VoucherNo}]");
  64. if (obj.Data2.Tasknum < 10000) throw new DoException("无任务");
  65. if (obj.Data2.Request != IstationRequest.请求分配目标地址) throw new WarnException("有任务无请求");
  66. DB.Do(db =>
  67. {
  68. var task = db.Default.Set<WCS_TASK>().FirstOrDefault(v => v.TYPE == TaskType.出库 && v.SRMSTATION == obj.Entity.CODE && v.STATUS == WCS.Entity.TaskStatus.执行中);
  69. if (task == null) throw new WarnException("WCS无该任务信息");
  70. //全部统一分配目标地址至
  71. db.Default.SaveChanges();
  72. task.CreateStatusLog(db, $"状态由[{WCS.Entity.TaskStatus.堆垛机完成}]变更为[{task.STATUS}]-{obj.Entity.Code}", this.GetType());
  73. //开始写入目标地址
  74. obj.Data.Tasknum = task.ID;
  75. obj.Data.Goodsstart = obj.Entity.CODE.ToShort();
  76. obj.Data.Goodsend = task.ADDRNEXT.ToShort();
  77. obj.Data.CmdType = IstationCmdType.堆垛机放货完成请求目标地址;
  78. obj.Data.VoucherNo++;
  79. });
  80. });
  81. }
  82. protected override bool SelectDevice(WCS_DEVICE dev)
  83. {
  84. return dev.CODE == "1332" || dev.CODE == "1333";
  85. }
  86. }
  87. }