一楼出库.cs 4.0 KB

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