123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182 |
- 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.Stations
- {
- [WorkTitle(typeof(ProductHandler), "组盘位", true)]
- internal class 组盘位 : DeviceWork<Device<IStation521, IStation520, IRobotStation>>
- {
- protected override bool SelectDevice(WCS_DEVICE obj)
- {
- return obj.Is(DF.组盘);
- }
- protected override void Do(Device<IStation521, IStation520, IRobotStation> dev)
- {
- var dev1 = Device.Find(dev.Entity.CODE).Device<IStation523>();
- if (dev.Data.RES4 && dev.Data3.Qty > 0)
- {
- GeneralHelper.DischargeOfTray(dev);
- LogHelper.AddWCS_EXCEPTION($"{dev.Entity.CODE}单号不符,托盘有货,自动排出26");
- return;
- }
- //断电复位校验
- if (dev.Data.TASKNUM > 10000 && dev.Data.PH_STATUS && !dev1.Data.Status.HasFlag(StationStatus.自动)) //有任务有光电,代表当前有货
- {
- if (dev.Data.GOODSCODE != dev.Data3.DocId)
- dev.Data3.DocId = dev.Data.GOODSCODE;
- if (dev.Data.GOODSTYPE != dev.Data3.PalletType)
- dev.Data3.PalletType = dev.Data.GOODSTYPE;
- if (dev.Data.GOODSSIZE != dev.Data3.MaxQty)
- dev.Data3.MaxQty = dev.Data.GOODSSIZE;
- }
- if (!dev1.Data.Status.HasFlag(StationStatus.自动)) return;
- if (Ltc.Do(dev, v => v.Data2.CONFIRM == true))
- return;
- if (Ltc.Do(dev, v => v.Data.REQUEST == true))
- return;//避免与RGVPut逻辑线程冲突
- var pline = dev.Entity.ProductLine();
- var task = DB.Do(db =>
- {
- return db.Default.Set<WCS_TASK>()
- .Where(v => v.TYPE == TaskType.组盘 && v.STATUS < WCS.Entity.TaskStatus.已完成)
- .Where(v => v.PRODLINE == pline)
- .Where(v => v.ADDRTO == "2153")
- .OrderBy(v => v.CREATETIME).FirstOrDefault();
- });
- if (Ltc.Do(dev, v => v.Data.TASKNUM == 0))
- {
- if (task == null)
- {
- if (dev.Data3.DocId != 0)
- dev.Data3.DocId = 0;
- if (dev.Data3.MaxQty != 0)
- dev.Data3.MaxQty = 0;
- if (dev.Data3.PalletType != 0)
- dev.Data3.PalletType = 0;
- }
- else
- {
- if (dev.Data3.DocId != task.DOCID)
- dev.Data3.DocId = task.DOCID;
- if (dev.Data3.MaxQty != task.FULLQTY)
- dev.Data3.MaxQty = task.FULLQTY;
- if (dev.Data3.PalletType != task.PALLETTYPE)
- dev.Data3.PalletType = task.PALLETTYPE;
- }
- }
- else if (Ltc.Do(dev, v => v.Data.GOODSCODE > 0))
- {
- if (Ltc.Do(dev, v => v.Data.GOODSSIZE == 0))
- return;
- if (Ltc.Do(dev, v => v.Data.GOODSTYPE == 0))
- return;
- if (Ltc.Do(dev, v => v.Data.GOODSEND != v.Entity.Code()))
- return;
- if (Ltc.Do(dev, v => v.Data3.Qty == v.Data.GOODSSIZE))
- { //入库
- //if (Ltc.Do(dev, v => !v.Entity.WakeupOn(5000,"组盘")))
- // return;
- var taskid = dev.Data.TASKNUM;
- DB.Do(db =>
- {
- var task = db.Default.Set<WCS_TASK>().Find(taskid);
- if (task == null)
- throw new Exception("空托盘任务号" + taskid + "不存在");
- var qty = db.Default.Set<WCS_TASK>().Where(v => v.TYPE == TaskType.组盘 && v.GROUPTASK == taskid).Count();
- if (Ltc.Do(dev, v => qty < v.Data3.MaxQty))
- return;
- var res = WMS.InBound(task.BARCODE, dev.Entity.CODE);
- //if (Ltc.Do(res, v => v.ResType == false))
- // throw new Exception(res.ResMessage);
- //var target = res.TunnelNum.Split(',').Select(v => endStations.FirstOrDefault(d => d.Entity.Tunnel().ToString() == v))
- // .Where(v => v != null).FirstOrDefault();
- task = new WCS_TASK
- {
- TYPE = TaskType.入库,
- STATUS = WCS.Entity.TaskStatus.执行中,
- ADDRFROM = dev.Entity.CODE,
- ADDRTO = "2181",
- FLOOR = 2,
- FULLQTY = dev.Data3.MaxQty,
- BARCODE = task.BARCODE,
- PALLETTYPE = 99,
- UPDATETIME = DateTime.Now,
- UPDATEUSER = "WCS",
- WMSTASK = int.Parse(res.WMSTaskNum),
- HEIGHT = dev.Data3.MaxQty,
- DOCID = task.DOCID,
- //ADDRCURRENT = dev.Entity.CODE
- };
- switch (dev.Data3.MaxQty)
- {
- case 2:
- task.HEIGHT = 6;
- break;
- case 4:
- task.HEIGHT = 1;
- break;
- default:
- task.HEIGHT = 2;
- break;
- }
- db.Default.Set<WCS_TASK>().Add(task);
- db.Default.SaveChanges();
- dev.Data3.PalletType = 0;
- dev.Data3.MaxQty = 0;
- dev.Data3.DocId = 0;
- dev.Data2.TASKNUM = task.ID;
- dev.Data2.GOODSEND = 2187;
- dev.Data2.GOODSTYPE = 99;
- dev.Data2.CONFIRM = true;
- });
- }
- else
- {
- bool move = false;
- //if (task == null)
- {
- if (Ltc.Do(dev, v => v.Data.RES))
- {
- move = true;
- }
- }
- //else
- //if (!move && task != null)
- //{
- // if (Ltc.Do(dev, task, (v, task) => v.Data.GOODSCODE != task.DOCID))
- // {//托盘类型不匹配,挪走
- // move = true;
- // }
- //}
- if (move)
- {
- GeneralHelper.DischargeOfTray(dev);
- LogHelper.AddWCS_EXCEPTION($"{dev.Entity.CODE}强制排出175");
- }
- }
- }
- }
- }
- }
|