成品外检.cs 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. using DBHelper;
  2. using System;
  3. using System.Linq;
  4. using WCS.Core;
  5. using WCS.Entity;
  6. using WCS.Entity.Protocol;
  7. namespace WCS.Service.Works.Stations
  8. {
  9. [WorkTitle(typeof(ProductHandler), "成品外检")]
  10. public class 成品外检 : DeviceWork<Device<IStation521, IStation520>>
  11. {
  12. protected override bool SelectDevice(WCS_DEVICE dev)
  13. {
  14. return dev.CODE == "2181";
  15. }
  16. protected override void Do(Device<IStation521, IStation520> dev)
  17. {
  18. if (dev.Data2.CONFIRM)
  19. return;
  20. var code = dev.Entity.Code();
  21. if (Ltc.Do(dev, v => v.Data.REQUEST == false && v.Data.GOODSEND != code))
  22. return;
  23. var rgv = Device.Find("RGV2");
  24. var arr = rgv.ROUTES.Select(v => v.NEXT).Where(v => v.ROUTES.Any(d => d.NEXT.IsTunnel())).ToArray();
  25. var endStations = arr.Select(v => v.Device<IStation521, IStation520>()).ToArray();
  26. endStations = Ltc.Do(endStations, arr => arr.Where(v => v.Data.TASKNUM == 0 && v.Data.PH_STATUS == false).ToArray());
  27. if (endStations.Length == 0)
  28. {
  29. return;
  30. }
  31. DB.Do(db =>
  32. {
  33. var task = db.Default.Set<WCS_TASK>().Find(dev.Data.TASKNUM);
  34. if (task == null)
  35. {
  36. Ltc.Log("任务号:" + dev.Data.TASKNUM + "不存在");
  37. return;
  38. }
  39. //task.ADDRCURRENT = dev.Entity.CODE;
  40. task.UPDATETIME = DateTime.Now;
  41. db.Default.SaveChanges();
  42. if (Ltc.Do(task, task => task.TYPE == TaskType.入库))
  43. {
  44. if (Ltc.Do(task, task => string.IsNullOrEmpty(task.TUNNEL)))
  45. {
  46. var res = WMS.GetTunnelList(task.WMSTASK, dev.Entity.CODE);
  47. if (Ltc.Do(res, v => v.ResType == false))
  48. throw new Exception(res.ResMessage);
  49. var target = res.TunnelNum.Split(',').Select(v => endStations.FirstOrDefault(d => d.Entity.TunnelNum().ToString() == v))
  50. .Where(v => v != null)
  51. .Select(v => new { Conv = v, SC = v.Entity.ROUTES.First().NEXT.ROUTES.Where(v => v.NEXT.IsSC()).First().NEXT.Device<ISC521>() })
  52. .OrderBy(v =>
  53. {
  54. try
  55. {
  56. return v.SC.Data.Tunnel == v.Conv.Entity.TunnelNum() ? 0 : 1;
  57. }
  58. catch
  59. {
  60. return 99;
  61. }
  62. })
  63. .Select(v => v.Conv)
  64. .FirstOrDefault();
  65. if (target == null)
  66. throw new Exception($"巷道分配失败,{res.TunnelNum}");
  67. task.TUNNEL = target.Entity.Tunnel();
  68. task.ADDRTO = target.Entity.CODE;
  69. task.UPDATETIME = DateTime.Now;
  70. db.Default.SaveChanges();
  71. dev.Data2.TASKNUM = dev.Data.TASKNUM;
  72. dev.Data2.GOODSEND = target.Entity.Code();
  73. dev.Data2.GOODSSIZE = task.FULLQTY;
  74. dev.Data2.GOODSTYPE = task.PALLETTYPE;
  75. dev.Data2.CONFIRM = true;
  76. }
  77. }
  78. });
  79. }
  80. }
  81. }