| 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;            });        }    }}
 |