123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100 |
- using DBHelper;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using WCS.Core;
- using WCS.Entity;
- using WCS.Entity.Protocol;
- namespace WCS.Service.Works.Stations
- {
- [WorkTitle(typeof(ProductHandler), "月台扫码")]
- class 月台扫码:DeviceWork<Device<IStation521, IStation520>>
- {
- protected override bool SelectDevice(WCS.Entity.WCS_DEVICE dev)
- {
- return dev.Is(DF.扫码) && dev.CODE == "2265";
- }
- protected override void Do(Device<IStation521, IStation520> dev)
- {
- if (Ltc.Do(dev, v => v.Data2.CONFIRM == true))
- {
- return;
- }
- if (Ltc.Do(dev, v => !v.Data.REQUEST))
- return;
- var bcrDev = Device.Find("BCR" + dev.Entity.CODE);
- var bcr = bcrDev.PROTOCOLS.First().Data<IBCR80>();
- var barcode = bcr.CONTENT.Trim('\r');
- if (Ltc.Do(barcode, barcode => string.IsNullOrEmpty(barcode)))
- {//扫码失败,退回
- dev.Data2.TASKNUM = dev.Data.TASKNUM;
- dev.Data2.GOODSEND = -1;
- dev.Data2.CONFIRM = true;
- return;
- }
- var rgv = dev.Entity.ROUTES.Select(v => v.NEXT).Where(v => v.IsRGV()).FirstOrDefault();
- var arr = rgv.ROUTES.Select(v => v.NEXT).Where(v => v.ROUTES.Any(d => d.NEXT.IsTunnel())).ToArray();
- var endStations = arr.Select(v => v.Device<IStation521, IStation520>()).ToArray();
- endStations = Ltc.Do(endStations, arr => arr.Where(v => v.Data.TASKNUM == 0 && v.Data.PH_STATUS == false).ToArray());
- endStations = endStations.Where(v => v.Data.TASKNUM == 0 && !v.Data.PH_STATUS).ToArray();
- if (endStations.Length == 0)
- {
- return;
- }
- //if (Ltc.Do(dev, v => !v.Entity.WakeupOn(10000, "月台扫码")))
- // return;
- var resp = WMS.InBound(barcode, dev.Entity.CODE, true);
- var target = resp.TunnelNum.Split(',').Select(v => endStations.FirstOrDefault(d => d.Entity.TunnelNum().ToString() == v))
- .Where(v => v != null)
- .Select(v => new { Conv = v, SC = v.Entity.ROUTES.First().NEXT.ROUTES.Where(v => v.NEXT.IsSC()).First().NEXT.Device<ISC521>() })
- .OrderBy(v => v.Conv.Entity.TunnelNum() == 2 ? 0 : 1)
- .ThenBy(v=> {
- try
- {
- return v.SC.Data.Tunnel == v.Conv.Entity.TunnelNum() ? 0 : 1;
- }
- catch
- {
- return 99;
- }
- })
- .Select(v => v.Conv)
- .FirstOrDefault();
- if (target == null)
- {
- throw new Exception("路径计算失败");
- }
- DB.Do(db =>
- {
- var task = new WCS_TASK
- {
- TYPE = TaskType.入库,
- STATUS = WCS.Entity.TaskStatus.执行中,
- BARCODE = barcode,
- TUNNEL = target.Entity.Tunnel(),
- ADDRFROM = dev.Entity.CODE,
- WMSTASK = int.Parse(resp.WMSTaskNum),
- UPDATETIME = DateTime.Now,
- UPDATEUSER = "WCS",
- ADDRTO = target.Entity.CODE,
- FLOOR = 1,
- //ADDRCURRENT = dev.Entity.CODE
- };
- db.Default.Set<WCS_TASK>().Add(task);
- db.Default.SaveChanges();
- dev.Data2.GOODSEND = target.Entity.Code();
- dev.Data2.TASKNUM = task.ID;
- dev.Data2.CONFIRM = true;
- });
- }
- }
- }
|