123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159 |
- using DBHelper;
- using System;
- using System.Linq;
- using WCS.Core;
- using WCS.Entity;
- using WCS.Entity.Protocol;
- using WCS.Service.Helpers;
- namespace WCS.Service.Works.Robots
- {
- [WorkTitle(typeof(ProductHandler), "机器人")]
- public class RobotWork : DeviceWork<Device<IRobot>>
- {
- private Device<IStation521, IStation520> C2153;
- public RobotWork()
- {
- C2153 = Device.Find("2153").Device<IStation521, IStation520>();
- }
- protected override bool SelectDevice(WCS_DEVICE dev)
- {
- return true;
- }
- protected override void Do(Device<IRobot> dev)
- {
- //dev.Data.Trigger = 0;
- //dev.Data.TaskID = 0;
- //dev.Data.Target = 0;
- if (Ltc.Do(dev, v => v.Data.Trigger != 0))
- {
- return;
- }
- if (Ltc.Do(dev, v => v.Data.FinishedTask != 0))
- {
- var fTaskId = dev.Data.FinishedTask;
- var fTarget = dev.Entity.ROUTES.Where(v => v.NEXT.ProductLine() == dev.Data.Target).Select(v => v.NEXT.Device<IStation521>()).FirstOrDefault();
- if (fTarget == null)
- {
- var msg = "目标位置" + dev.Data.Target + "有误";
- throw new Exception(msg);
- }
- DB.Do(db =>
- {
- var task = db.Default.Set<WCS_TASK>().Find(fTaskId);
- if (task == null)
- throw new Exception("已完成任务号" + fTaskId + "不存在");
- var taskPallet = db.Default.Set<WCS_TASK>().Find(fTarget.Data.TASKNUM);
- if (taskPallet == null)
- throw new Exception("空托盘任务号" + fTarget.Data.TASKNUM + "不存在");
- var container = taskPallet.BARCODE;
- task.STATUS = WCS.Entity.TaskStatus.已完成;
- task.ENDTIME = DateTime.Now;
- task.UPDATETIME = DateTime.Now;
- task.UPDATEUSER = "WCS";
- task.GROUPTASK = taskPallet.ID;
- //task.ADDRCURRENT = fTarget.Entity.CODE;
- db.Default.SaveChanges();
- var res = WMS.AutoBuildUpGroupStock(container, task.BARCODE, dev.Entity.CODE);
- if (Ltc.Do(res, v => v.ResType == false))
- throw new Exception(res.ResMessage);
- dev.Data.FinishedTask = 0;
- });
- return;
- }
- //if (Ltc.Do(dev, v => v.Data.Mode != RobotMode.自动))
- // return;
- if (Ltc.Do(dev, v => v.Data.Status != RobotStatus.空闲))
- return;
- if (Ltc.Do(C2153, C2153 => C2153.Data.TASKNUM == 0))
- return;
- if (Ltc.Do(C2153, C2153 => C2153.Data.GOODSEND == 2153))
- return;
- if (Ltc.Do(C2153, C2153 => C2153.Data.GOODSEND == 0))
- return;
- if (Ltc.Do(C2153, C2153 => C2153.Data.GOODSCODE == 0))
- return;
- if (Ltc.Do(C2153, C2153 => C2153.Data.PH_STATUS == false))
- {
- throw new Exception("有任务但无光电信号");
- }
- var workShop = C2153.Data.GOODSEND;
- var target = dev.Entity.ROUTES.Where(v => v.NEXT.ProductLine() == workShop).Select(v => v.NEXT.Device<IStation521, IStation520, IRobotStation>()).FirstOrDefault();
- if (target == null) throw new Exception("机器人目标位置" + workShop + "不存在");
- //string tType = "";
- //if (C2153.Data.GOODSTYPE == 4)
- //{
- // tType = "母";
- //}
- //else if (C2153.Data.GOODSTYPE == 3)
- //{
- // tType = "T2";
- //}
- //else if (C2153.Data.GOODSTYPE == 1)
- //{
- // tType = "T9";
- //}
- if (Ltc.Do(target, target => target.Data.PH_STATUS == false)) throw new Exception($"目标位置[{target}]托盘未到位");
- if (Ltc.Do(target, C2153, (target, C2153) => target.Data.GOODSCODE != C2153.Data.GOODSCODE) && target.Data3.Qty != target.Data.GOODSSIZE) //单号不符
- {
- if ((Ltc.Do(target, C2153, (target, C2153) => target.Data.GOODSTYPE != 0 && C2153.Data.GOODSTYPE != 0 && target.Data.GOODSTYPE != C2153.Data.GOODSTYPE))) //托盘类型不符
- {
- GeneralHelper.DischargeOfTray(target);
- LogHelper.AddWCS_EXCEPTION($"2153:{C2153.Data.TASKNUM}与{target.Entity.CODE}单号不符,托盘有货,自动排出106");
- return;
- }
- if (target.Data3.Qty > 0) //有托盘
- {
- GeneralHelper.DischargeOfTray(target);
- LogHelper.AddWCS_EXCEPTION($"2153:{C2153.Data.TASKNUM}与{target.Entity.CODE}单号不符,托盘有货,自动排出112");
- return;
- }
- if (target.Data3.Qty == 0) //无托盘
- {
- target.Data.RES4 = true;
- LogHelper.AddWCS_EXCEPTION($"2153:{C2153.Data.TASKNUM}与{target.Entity.CODE}单号不符,托盘为空,允许组盘");
- }
- }
- if (Ltc.Do(target, C2153, (target, C2153) => target.Data.GOODSTYPE != C2153.Data.GOODSTYPE))
- return;
- if (Ltc.Do(target, target => target.Data3.MaxQty == 0 || target.Data3.PalletType == 0))
- return;
- if (Ltc.Do(target, target => target.Data3.Qty >= target.Data.GOODSSIZE))
- return;
- DB.Do(db =>
- {
- var taskid = C2153.Data.TASKNUM;
- var task = db.Default.Set<WCS_TASK>().Find(taskid);
- if (task == null)
- return;
- //task.ADDRCURRENT = dev.Entity.CODE;
- db.Default.SaveChanges();
- dev.Data.TaskID = taskid;
- dev.Data.Target = workShop;
- dev.Data.Trigger = 1;
- });
- }
- }
- }
|