| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240 | using ServiceCenter.SqlSugars;using System;using System.Collections.Generic;using System.ComponentModel;using System.Linq;using System.Text;using System.Threading.Tasks;using WCS.Core;using WCS.Entity;using WCS.Entity.Protocol.BCR;using WCS.Entity.Protocol.Station;using WCS.WorkEngineering.Worlds;using WCS.WorkEngineering.Extensions;using SqlSugar.Extensions;using WCS.WorkEngineering.WebApi.Models.WMS.Response;using WCS.WorkEngineering.WebApi.Models.WCS.Request;using Newtonsoft.Json;using SqlSugar;using ServiceCenter.Logs;namespace WCS.WorkEngineering.Systems{    [BelongTo(typeof(RobotBCRWorld))]    [Description("码垛抓取扫码")]    public class 码垛抓取扫码 : DeviceSystem<Device<IStation520, IStation521, IStation523, IBCR81>>    {        protected override bool ParallelDo => true;        public override void Do(Device<IStation520, IStation521, IStation523, IBCR81> obj)        {            if (obj.Data.VoucherNo != obj.Data2.VoucherNo)            {                World.Log("PLC正在处理");                return;            }            if (obj.Data2.Request == 0)            {                World.Log("无请求");                return;            }            var barcode = obj.Data4.Content.Replace("\r", "").Replace("\0", "").Trim();            //未扫到码或条码与任务不一致去异常口            if (string.IsNullOrEmpty(barcode))            {                MainWorld.Redis.Set($"Sx:WCSErrorInfo:{obj.Entity.Code}", JsonConvert.SerializeObject(new RedisError() { Equip = obj.Entity.Code, Con = $"扫码器{obj.Entity.Code},{barcode}扫码失败", Time = DateTime.Now }));                throw new Exception("扫码失败");                //task.Status = Entity.TaskStatus.Error;                //task.EditTime = DateTime.Now;                //db.Default.Updateable(task).ExecuteCommand();                //task.AddWCS_TASK_DTL(db.Default, obj.Entity.Code, $"码垛抓取扫码异常,条码值:{barcode}");                obj.Data.TaskNumber = obj.Data2.TaskNumber;                obj.Data.GoodsEnd = 5173;                obj.Data.VoucherNo++;                var num = MainWorld.Redis.HGet<int>($"NotScanNumber{obj.Entity.Code}", DateTime.Now.ToString("yyyyMMdd"));                MainWorld.Redis.HSet($"NotScanNumber{obj.Entity.Code}", DateTime.Now.ToString("yyyyMMdd"), (num + 1));                return;            }            World.Log($"码垛抓取扫码{obj.Entity.Code}交互开始时间:工字轮条码 {barcode}  | " + DateTime.Now.ToString("yyyyMMddHHmmss"));            var taskid = obj.Data2.TaskNumber;            if (taskid == 0)            {                MainWorld.Redis.Set($"Sx:WCSErrorInfo:{obj.Entity.Code}", JsonConvert.SerializeObject(new RedisError() { Equip = obj.Entity.Code, Con = $"扫码器{obj.Entity.Code},521任务号不能为{obj.Data2.TaskNumber}", Time = DateTime.Now }));                return;            }            var addrTo = obj.Entity.GetFlag("码垛工位");            var addrPick = 0;            switch (obj.Entity.Code)             {                case "5126":                    addrPick = 5135;                        break;                case "5137":                    addrPick = 5146;                    break;                case "5149":                    addrPick = 5158;                    break;                case "5160":                    addrPick = 5169;                    break;            }            var arr = Device.All.Where(v => v.HasProtocol<IStation521>())                .Where(v => v.HasFlag("装箱码垛") && v.HasFlag("Parent", addrPick.ToString()))                .Select(v => v.Protocol<IStation521>(this.World)).ToArray();            var qty = arr.Where(v => v.TaskNumber > 10000).Count();            if (qty >= 5)            {                World.Log("抓取位已满");                MainWorld.Redis.Set($"Sx:WCSErrorInfo:{obj.Entity.Code}", JsonConvert.SerializeObject(new RedisError() { Equip = obj.Entity.Code, Con = $"扫码器{obj.Entity.Code},{qty}抓取位已满", Time = DateTime.Now }));                return;            }            SqlSugarHelper.Do(db =>            {                var task = db.Default.Queryable<WCS_TaskInfo>().Where(v => v.ID == taskid).First();                if (task == null)                {                    World.Log("任务号有误");                    MainWorld.Redis.Set($"Sx:WCSErrorInfo:{obj.Entity.Code}", JsonConvert.SerializeObject(new RedisError() { Equip = obj.Entity.Code, Con = $"扫码器{obj.Entity.Code}未找到对应的码垛任务信息,请检查521任务号{obj.Data2.TaskNumber}是否正确", Time = DateTime.Now }));                    obj.Data.TaskNumber = obj.Data2.TaskNumber;                    obj.Data.GoodsEnd = 5173;                    obj.Data.VoucherNo++;                    World.Log($"码垛抓取扫码{obj.Entity.Code}电控给的任务号和条码不匹配,自动去转圈:工字轮条码 {barcode}  | " + obj.Data2.TaskNumber +"|"+ DateTime.Now.ToString("yyyyMMddHHmmss"));                    var error = new BaseErrorinfoWcs()                    {                        ContBarCode = barcode,                        Message = $"电控给的任务号和条码不匹配,抓取扫码器{obj.Entity.Code},自动去绕圈,{DateTime.UtcNow.ToString("yyyyMMddHHmmfff")}",                        Count = 1,                        Memo = "WCS"                    };                    error.UpdataErrorinfo();                    return;                }                if (task.BarCode != barcode)                {                    var error = new BaseErrorinfoWcs()                    {                        ContBarCode = barcode,                        Message = $"码垛抓取扫码|{obj.Entity.Code},条码{barcode}进入排异,扫出条码{barcode}和521任务号{obj.Data2.TaskNumber}查询出任务的条码{task.BarCode}不匹配,{DateTime.Now:yyyyMMddHH}",                        Count = 1,                        Memo = "WCS"                    };                    error.UpdataErrorinfo();                    if (task.Status == Entity.TaskStatus.码垛缓存放行)                    {                        if (db.Default.Updateable<WCS_TaskInfo>().SetColumns(v => new WCS_TaskInfo() { Status = Entity.TaskStatus.码垛缓存扫码, EditTime = DateTime.Now }).Where(v => v.ID == task.ID).ExecuteCommand() > 0)                        {                            task.AddWCS_TASK_DTL(db.Default, obj.Entity.Code, $"任务在{obj.Entity.Code},条码{barcode}进入排异,扫出条码{barcode}和521任务号{obj.Data2.TaskNumber}查询出任务的条码{task.BarCode}不匹配");                            //obj.Data.TaskNumber = obj.Data2.TaskNumber;                            //obj.Data.GoodsEnd = (short)addrPick;                            //obj.Data.VoucherNo++;                        }                        else                        {                            World.Log($"修改任务状态为码垛抓取扫码失败,任务号:{task.ID},原状态{task.Status}", LogLevelEnum.High);                        }                    }                    obj.Data.TaskNumber = obj.Data2.TaskNumber;                    obj.Data.GoodsEnd = 5173;                    obj.Data.VoucherNo++;                    return;                }                //var tasks = db.Default.Queryable<WCS_TaskInfo>().Where(v => v.BarCode == barcode).First();                //if (tasks == null)                //{                //    MainWorld.Redis.Set($"Sx:WCSErrorInfo:{obj.Entity.Code}", JsonConvert.SerializeObject(new RedisError() { Equip = obj.Entity.Code, Con = $"扫码器{obj.Entity.Code}扫出条码{barcode},不存在该条码的任务", Time = DateTime.Now }));                //    throw new Exception($"扫码器{obj.Entity.Code}扫出条码{barcode},不存在该条码的任务");                //}                var pallet = db.Default.Queryable<Palletizing>().With(SqlWith.NoLock).Where(v => v.PalletizState == 0 && v.Equip == addrTo).First();                if (pallet == null)                {                    throw new Exception($"扫码器{obj.Entity.Code},未找到对应的码垛信息");                }                                if (task.PalletizingID != pallet.ID)                {                    throw new Exception($"上一箱正在码垛中!!!");                }                if (task.AddrTo == "8090")                {                    if (obj.Entity.Code != "5126")                    {                        obj.Data.TaskNumber = int.Parse(obj.Entity.Code);                        obj.Data.GoodsEnd = 5173;                        obj.Data.VoucherNo++;                        return;                        //MainWorld.Redis.Set($"Sx:WCSErrorInfo:{obj.Entity.Code}", JsonConvert.SerializeObject(new RedisError() { Equip = obj.Entity.Code, Con = $"扫码器{obj.Entity.Code},任务目标地址不对", Time = DateTime.Now }));                        //throw new Exception($"扫码器{obj.Entity.Code},任务目标地址不对");                    }                }                if (task.AddrTo == "8092")                {                    if (obj.Entity.Code != "5137")                    {                        obj.Data.TaskNumber = int.Parse(obj.Entity.Code);                        obj.Data.GoodsEnd = 5173;                        obj.Data.VoucherNo++;                        return;                        //MainWorld.Redis.Set($"Sx:WCSErrorInfo:{obj.Entity.Code}", JsonConvert.SerializeObject(new RedisError() { Equip = obj.Entity.Code, Con = $"扫码器{obj.Entity.Code},任务目标地址不对", Time = DateTime.Now }));                        //throw new Exception($"扫码器{obj.Entity.Code},任务目标地址不对");                    }                }                if (task.AddrTo == "8096")                {                    if (obj.Entity.Code != "5149")                    {                        obj.Data.TaskNumber = int.Parse(obj.Entity.Code);                        obj.Data.GoodsEnd = 5173;                        obj.Data.VoucherNo++;                        return;                        //MainWorld.Redis.Set($"Sx:WCSErrorInfo:{obj.Entity.Code}", JsonConvert.SerializeObject(new RedisError() { Equip = obj.Entity.Code, Con = $"扫码器{obj.Entity.Code},任务目标地址不对", Time = DateTime.Now }));                        //throw new Exception($"扫码器{obj.Entity.Code},任务目标地址不对");                    }                }                if (task.AddrTo == "8098")                {                    if (obj.Entity.Code != "5160")                    {                        obj.Data.TaskNumber = int.Parse(obj.Entity.Code);                        obj.Data.GoodsEnd = 5173;                        obj.Data.VoucherNo++;                        return;                        //MainWorld.Redis.Set($"Sx:WCSErrorInfo:{obj.Entity.Code}", JsonConvert.SerializeObject(new RedisError() { Equip = obj.Entity.Code, Con = $"扫码器{obj.Entity.Code},任务目标地址不对", Time = DateTime.Now }));                        //throw new Exception($"扫码器{obj.Entity.Code},任务目标地址不对");                    }                }                task.Status = Entity.TaskStatus.码垛抓取扫码;                task.EditTime = DateTime.Now;                try                {                    if (db.Default.Updateable<WCS_TaskInfo>().SetColumns(v => new WCS_TaskInfo() { Status = Entity.TaskStatus.码垛抓取扫码, EditTime = DateTime.Now }).Where(v => v.ID == task.ID).ExecuteCommand() > 0)                    {                        task.AddWCS_TASK_DTL(db.Default, obj.Entity.Code, "码垛抓取扫码");                        obj.Data.TaskNumber = obj.Data2.TaskNumber;                        obj.Data.GoodsEnd = (short)addrPick;                        obj.Data.VoucherNo++;                    }                    else                    {                        World.Log($"修改任务状态为码垛抓取扫码失败,任务号:{task.ID},原状态{task.Status}", LogLevelEnum.High);                    }                }                catch (Exception ex)                {                    throw new Exception($"扫码器{obj.Entity.Code},{ex.Message}");                }            });            World.Log($"码垛抓取扫码{obj.Entity.Code}交互结束时间:工字轮条码 {barcode}  | " + DateTime.Now.ToString("yyyyMMddHHmmss"));            //异常补轮子            //if (obj.Data.GoodsEnd == 5173)            //    WMS.补料(taskid, obj.Entity.Code);        }        public override bool Select(Device dev)        {            return dev.HasFlag("装箱码垛") && dev.HasFlag("位置", "扫码");        }    }}
 |