一楼出库.cs 3.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  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. [WorkTitle(typeof(ProductHandler), "一楼出库堆垛机放货完成后分配下一个地址")]
  10. public class 一楼出库 : DeviceWork<StationDevice>
  11. {
  12. protected override void Do(StationDevice obj)
  13. {
  14. obj.EX(obj =>
  15. {
  16. obj.WhetherToExecute(IstationRequest.堆垛机放货完成请求目标地址);
  17. //找到当前站台为当前设备且任务为堆垛机完成的任务
  18. DB.Do(db =>
  19. {
  20. var task = db.Default.Set<WCS_TASK>().FirstOrDefault(v => v.TYPE == TaskType.出库 && v.SRMSTATION == obj.Entity.CODE && v.STATUS == TaskStatus.堆垛机完成);
  21. if (task == null) throw new WarnException("WCS无该任务信息");
  22. if (task.SRMSTATION != obj.Entity.CODE && task.STATUS != TaskStatus.堆垛机完成) throw new WarnException("任务状态不是堆垛机完成");
  23. task.STATUS = TaskStatus.执行中;
  24. db.Default.SaveChanges();
  25. task.CreateStatusLog(db, $"状态由[{TaskStatus.堆垛机完成}]变更为[{task.STATUS}]-{obj.Entity.Code}", this.GetType());
  26. //开始写入目标地址
  27. obj.Data.Tasknum = task.ID;
  28. obj.Data.Goodsstart = obj.Entity.CODE.ToShort();
  29. obj.Data.Goodsend = task.ADDRNEXT.ToShort();
  30. obj.Data.CmdType = IstationCmdType.堆垛机放货完成请求目标地址;
  31. obj.Data.VoucherNo++;
  32. });
  33. });
  34. }
  35. protected override bool SelectDevice(WCS_DEVICE dev)
  36. {
  37. return dev.Is(DF.SRM放货);
  38. }
  39. }
  40. [WorkTitle(typeof(ProductHandler), "月台出货口完成任务")]
  41. public class 月台完成任务 : Work<StationDeviceGroup>
  42. {
  43. protected override void Do(StationDeviceGroup obj)
  44. {
  45. obj.EX(obj =>
  46. {
  47. //找到当前站台为当前设备且任务为堆垛机完成的任务
  48. DB.Do(db =>
  49. {
  50. foreach (var dev in obj.Items)
  51. {
  52. //当前组有一个运行的设备就停止执行
  53. if (dev.Data3.Status.HasFlag(StationStatus.运行状态位)) throw new DoException("设备运行中");
  54. if (dev.Data2.Status.HasFlag(IstationStatus.光电状态)) throw new WarnException("有光电,产品未离开设备");
  55. if (dev.Data2.Tasknum < 10000) throw new DoException("无任务号");
  56. if (dev.Data2.Request != IstationRequest.月台出库口任务完成) throw new WarnException("无完成任务请求");
  57. if (dev.Data2.Tasknum < 10000) throw new WarnException("任务号错误");
  58. var task = db.Default.Set<WCS_TASK>().Where(v => v.ID == dev.Data2.Tasknum).FirstOrDefault();
  59. if (task.STATUS != TaskStatus.执行中)
  60. throw new WarnException($"{task.ID}任务状态错误");
  61. task.STATUS = TaskStatus.已完成;
  62. db.Default.SaveChanges();
  63. task.CreateStatusLog(db, $"状态由[{TaskStatus.执行中}]变更为[{task.STATUS}]-{dev.Entity.CODE}", this.GetType());
  64. dev.Data.CmdType = IstationCmdType.月台出库口任务完成;
  65. dev.Data.VoucherNo++;
  66. }
  67. });
  68. });
  69. }
  70. protected override bool SelectDevice(WCS_DEVICE dev)
  71. {
  72. return dev.Is(DF.月台);
  73. }
  74. }
  75. }