RobotWork.cs 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. using DBHelper;
  2. using System;
  3. using System.Linq;
  4. using WCS.Core;
  5. using WCS.Entity;
  6. using WCS.Entity.Protocol;
  7. using WCS.Service.Helpers;
  8. namespace WCS.Service.Works.Robots
  9. {
  10. [WorkTitle(typeof(ProductHandler), "机器人")]
  11. public class RobotWork : DeviceWork<Device<IRobot>>
  12. {
  13. private Device<IStation521, IStation520> C2153;
  14. public RobotWork()
  15. {
  16. C2153 = Device.Find("2153").Device<IStation521, IStation520>();
  17. }
  18. protected override bool SelectDevice(WCS_DEVICE dev)
  19. {
  20. return true;
  21. }
  22. protected override void Do(Device<IRobot> dev)
  23. {
  24. //dev.Data.Trigger = 0;
  25. //dev.Data.TaskID = 0;
  26. //dev.Data.Target = 0;
  27. if (Ltc.Do(dev, v => v.Data.Trigger != 0))
  28. {
  29. return;
  30. }
  31. if (Ltc.Do(dev, v => v.Data.FinishedTask != 0))
  32. {
  33. var fTaskId = dev.Data.FinishedTask;
  34. var fTarget = dev.Entity.ROUTES.Where(v => v.NEXT.ProductLine() == dev.Data.Target).Select(v => v.NEXT.Device<IStation521>()).FirstOrDefault();
  35. if (fTarget == null)
  36. {
  37. var msg = "目标位置" + dev.Data.Target + "有误";
  38. throw new Exception(msg);
  39. }
  40. DB.Do(db =>
  41. {
  42. var task = db.Default.Set<WCS_TASK>().Find(fTaskId);
  43. if (task == null)
  44. throw new Exception("已完成任务号" + fTaskId + "不存在");
  45. var taskPallet = db.Default.Set<WCS_TASK>().Find(fTarget.Data.TASKNUM);
  46. if (taskPallet == null)
  47. throw new Exception("空托盘任务号" + fTarget.Data.TASKNUM + "不存在");
  48. var container = taskPallet.BARCODE;
  49. task.STATUS = WCS.Entity.TaskStatus.已完成;
  50. task.ENDTIME = DateTime.Now;
  51. task.UPDATETIME = DateTime.Now;
  52. task.UPDATEUSER = "WCS";
  53. task.GROUPTASK = taskPallet.ID;
  54. //task.ADDRCURRENT = fTarget.Entity.CODE;
  55. db.Default.SaveChanges();
  56. var res = WMS.AutoBuildUpGroupStock(container, task.BARCODE, dev.Entity.CODE);
  57. if (Ltc.Do(res, v => v.ResType == false))
  58. throw new Exception(res.ResMessage);
  59. dev.Data.FinishedTask = 0;
  60. });
  61. return;
  62. }
  63. //if (Ltc.Do(dev, v => v.Data.Mode != RobotMode.自动))
  64. // return;
  65. if (Ltc.Do(dev, v => v.Data.Status != RobotStatus.空闲))
  66. return;
  67. if (Ltc.Do(C2153, C2153 => C2153.Data.TASKNUM == 0))
  68. return;
  69. if (Ltc.Do(C2153, C2153 => C2153.Data.GOODSEND == 2153))
  70. return;
  71. if (Ltc.Do(C2153, C2153 => C2153.Data.GOODSEND == 0))
  72. return;
  73. if (Ltc.Do(C2153, C2153 => C2153.Data.GOODSCODE == 0))
  74. return;
  75. if (Ltc.Do(C2153, C2153 => C2153.Data.PH_STATUS == false))
  76. {
  77. throw new Exception("有任务但无光电信号");
  78. }
  79. var workShop = C2153.Data.GOODSEND;
  80. var target = dev.Entity.ROUTES.Where(v => v.NEXT.ProductLine() == workShop).Select(v => v.NEXT.Device<IStation521, IStation520, IRobotStation>()).FirstOrDefault();
  81. if (target == null) throw new Exception("机器人目标位置" + workShop + "不存在");
  82. if (Ltc.Do(target, target => target.Data.PH_STATUS == false)) throw new Exception($"目标位置[{target}]无光电信号");
  83. if (Ltc.Do(target, C2153, (target, C2153) => target.Data.GOODSCODE != C2153.Data.GOODSCODE)) //单号不符
  84. {
  85. if ((Ltc.Do(target, C2153, (target, C2153) => target.Data.GOODSTYPE != 0 && C2153.Data.GOODSTYPE != 0 && target.Data.GOODSTYPE != C2153.Data.GOODSTYPE))) //托盘类型不符
  86. {
  87. GeneralHelper.DischargeOfTray(target);
  88. LogHelper.AddWCS_EXCEPTION($"2153:{C2153.Data.TASKNUM}与{target.Entity.CODE}单号不符,托盘有货,自动排出");
  89. return;
  90. }
  91. if (target.Data3.Qty > 0) //有托盘
  92. {
  93. GeneralHelper.DischargeOfTray(target);
  94. LogHelper.AddWCS_EXCEPTION($"2153:{C2153.Data.TASKNUM}与{target.Entity.CODE}单号不符,托盘有货,自动排出");
  95. return;
  96. }
  97. if (target.Data3.Qty == 0) //无托盘
  98. {
  99. target.Data.RES4 = true;
  100. LogHelper.AddWCS_EXCEPTION($"2153:{C2153.Data.TASKNUM}与{target.Entity.CODE}单号不符,托盘为空,允许组盘");
  101. }
  102. }
  103. if (Ltc.Do(target, C2153, (target, C2153) => target.Data.GOODSTYPE != C2153.Data.GOODSTYPE))
  104. return;
  105. if (Ltc.Do(target, target => target.Data3.MaxQty == 0 || target.Data3.PalletType == 0))
  106. return;
  107. if (Ltc.Do(target, target => target.Data3.Qty >= target.Data.GOODSSIZE))
  108. return;
  109. DB.Do(db =>
  110. {
  111. var taskid = C2153.Data.TASKNUM;
  112. var task = db.Default.Set<WCS_TASK>().Find(taskid);
  113. if (task == null)
  114. return;
  115. //task.ADDRCURRENT = dev.Entity.CODE;
  116. db.Default.SaveChanges();
  117. dev.Data.TaskID = taskid;
  118. dev.Data.Target = workShop;
  119. dev.Data.Trigger = 1;
  120. });
  121. }
  122. }
  123. }