| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581 |
- using Microsoft.AspNetCore.Routing.Constraints;
- using Newtonsoft.Json;
- using NPOI.HSSF.Record.Chart;
- using NPOI.SS.Formula.Functions;
- using PlcSiemens.Core.Extension;
- using ServiceCenter.Logs;
- using ServiceCenter.SqlSugars;
- using SqlSugar;
- using System.ComponentModel;
- using System.Diagnostics.Metrics;
- using System.Text;
- using System.Text.Json.Nodes;
- using System.Threading.Tasks;
- using WCS.Core;
- using WCS.Entity;
- using WCS.Entity.Protocol.BCR;
- using WCS.Entity.Protocol.SRM;
- using WCS.Entity.Protocol.Station;
- using WCS.WorkEngineering.Extensions;
- using WCS.WorkEngineering.WebApi.Models.WCS.Request;
- //using WCS.WorkEngineering.WebApi.Controllers;
- //using WCS.WorkEngineering.WebApi.Models.WMS.Request;
- using WCS.WorkEngineering.Worlds;
- using static System.Runtime.InteropServices.JavaScript.JSType;
- using DeviceFlags = WCS.WorkEngineering.Extensions.DeviceFlags;
- namespace WCS.WorkEngineering.Systems
- {
- /// <summary>
- /// 帘线扫码分配楼层
- /// </summary>
- [BelongTo(typeof(LoopInLineWorld))]
- [Description("环线入库扫码")]
- public class 环线入库扫码 : DeviceSystem<Device<IStation520, IStation521, IStation523, IBCR81>>
- {
- protected override bool ParallelDo => true;
- public override void Do(Device<IStation520, IStation521, IStation523, IBCR81> obj)
- {
- //return;
- if (obj.Data.VoucherNo != obj.Data2.VoucherNo)
- {
- World.Log("PLC正在处理");
- return;
- }
- if (obj.Data2.Request == 0)
- {
- World.Log("无请求");
- MainWorld.Redis.Set($"Sx:WCSErrorInfo:{obj.Entity.Code}", JsonConvert.SerializeObject(new RedisError() { Equip = obj.Entity.Code, Con = obj.Entity.Code + "无请求", Time = DateTime.Now }));
- return;
- }
- var barcode = obj.Data4.Content.Replace("\r", "").Replace("\0", "");
- if (string.IsNullOrEmpty(barcode))
- {
- 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("扫码失败");
- //World.Log("扫码失败,排往异常口");
- //obj.Data.TaskNumber = obj.Data2.TaskNumber;
- //obj.Data.GoodsEnd = 5186;
- //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 task = SqlSugarHelper.Do(db => db.Default.Queryable<WCS_TaskInfo>().Where(v => v.BarCode == barcode).First());
- if (task != null)
- {
- if (task.Type == TaskType.OutDepot)
- {
- var devout = Device.All.Where(v => v.HasFlag("出库扫码") && v.HasFlag("Floor", obj.Entity.GetFlag("Floor"))).First();
- var code = short.Parse(devout.Code);
- if (task.BusType == "装箱码垛")
- {
- obj.Data.GoodsEnd = code;
- obj.Data.GoodsStart = 1;
- }
- else if (task.BusType == "扭转检测")
- {
- obj.Data.GoodsEnd = 4002;
- obj.Data.GoodsStart = 2;
- }
- else
- {
- obj.Data.GoodsEnd = 5186;
- obj.Data.GoodsStart = 3;
- }
- obj.Data.TaskNumber = task.ID;
- obj.Data.VoucherNo++;
- return;
- }
- }
- else
- {
- //MainWorld.Redis.Set($"Sx:WCSErrorInfo:{obj.Entity.Code}", JsonConvert.SerializeObject(new RedisError() { Equip = obj.Entity.Code, Con = $"扫码器{obj.Entity.Code}找不到条码{barcode}对应的任务", Time = DateTime.Now }));
- //World.Log("找不到条码对应的任务");
- //throw new Exception("找不到条码对应的任务");
- //obj.Data.TaskNumber = obj.Data2.TaskNumber;
- //obj.Data.GoodsEnd = 5186;
- //obj.Data.VoucherNo++;
- //return;
- }
- var floor = obj.Entity.GetFlag("Floor");
- var res = WMS.分配巷道(floor, barcode);
- if (!res.Success)
- {
- MainWorld.Redis.Set($"Sx:WCSErrorInfo:{obj.Entity.Code}", JsonConvert.SerializeObject(new RedisError() { Equip = obj.Entity.Code, Con = $"扫码器{obj.Entity.Code}条码{barcode}申请分配巷道异常,异常内容:{res.ResMsg}", Time = DateTime.Now }));
- return;
- }
- var taskid = int.Parse(res.Memo1);
- //var tunnels = res.ResData.Split(',').Select(v => short.Parse(v)).ToArray();
- var tunnels = res.ResData.Split(',').ToList();
- Device target = null;
- foreach (var item in tunnels)
- {
- target = Device.All.Where(v => v.HasFlag(DeviceFlags.入库 | DeviceFlags.巷道口))
- .Where(v => v.GetFlag("Floor") == floor)
- .Where(v => v.GetFlag("Tunnel") == item)
- .Where(v =>
- {
- var srm = Device.All.Where(d => d.HasProtocol<ISRM521>())
- .Where(d => d.HasFlag("Floor", floor))
- .Where(d => d.GetFlag("Tunnel") == item)
- .First().Protocol<ISRM521>(this.World);
- return srm.Mode == SrmMode.自动 && srm.Alarm == 0;
- }).FirstOrDefault();
- if (target != null) break;
- }
- //var target = tunnels.Select(t => Device.All.Where(v => v.HasFlag(DeviceFlags.入库 | DeviceFlags.巷道口))
- // .Where(v => v.GetFlag("Floor") == floor)
- // .Where(v => v.GetFlag("Tunnel") == t.ToString())
- // .Where(v =>
- // {
- // var srm = Device.All.Where(d => d.HasProtocol<ISRM521>())
- // .Where(d => d.HasFlag("Floor", floor))
- // .Where(d => d.HasFlag("Tunnel", t.ToString()))
- // .First().Protocol<ISRM521>(this.World);
- // return srm.Mode == SrmMode.自动 && srm.Alarm == 0;
- // }
- // ).First())
- //.First();
- if (target == 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($"无可用堆垛机巷道");
- }
- var tunnel = target.GetFlag("Tunnel");
- SqlSugarHelper.Do(db =>
- {
- if (res.Success)
- {
- var task = db.Default.Queryable<WCS_TaskInfo>().Where(v => v.ID == taskid).First();
- if (task == null)
- throw new Exception($"任务号{taskid}不存在");
- task.Tunnel = tunnel;
- task.Status = Entity.TaskStatus.巷道分配;
- task.EditTime = DateTime.Now;
- task.Floor = int.Parse(floor ?? "0");
- db.Default.Updateable(task).ExecuteCommand();
- task.AddWCS_TASK_DTL(db.Default, obj.Entity.Code, "巷道分配");
- if (obj.Data.TaskNumber == taskid)
- {
- MainWorld.Redis.Set($"Sx:WCSErrorInfo:{obj.Entity.Code}", JsonConvert.SerializeObject(new RedisError() { Equip = obj.Entity.Code, Con = $"扫码器{obj.Entity.Code}条码{barcode}任务号{taskid}重复下发", Time = DateTime.Now }));
- throw new Exception("重复下发");
- }
- obj.Data.GoodsStart = 0;
- obj.Data.TaskNumber = taskid;
- obj.Data.GoodsEnd = short.Parse(target.Code);
- obj.Data.VoucherNo++;
- }
- });
- World.Log($"环线入库{obj.Entity.Code}交互结束时间:工字轮条码 {barcode} | " + DateTime.Now.ToString("yyyyMMddHHmmss"));
- }
- public override bool Select(Device dev)
- {
- return dev.HasFlag("入库扫码") && "3618,3318,3018".Split(',').Contains(dev.Code);
- }
- }
- /// <summary>
- ///
- /// </summary>
- //[BelongTo(typeof(LoopLineWorld))]
- [Description("环线出库扫码")]
- public class 环线出库扫码 : DeviceSystem<Device<IStation520, IStation521, IStation523, IBCR81>>
- {
- protected override bool ParallelDo => false;
- public override void Do(Device<IStation520, IStation521, IStation523, IBCR81> obj)
- {
- var floor = obj.Entity.GetFlag("Floor");
- var devScanIn = Device.All.Where(v => v.HasProtocol<IBCR81>())
- .Where(v => v.GetFlag("Floor") == floor)
- .Where(v => v.HasFlag("入库扫码"))
- .FirstOrDefault();
- 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", "");
- if (string.IsNullOrEmpty(barcode))
- {
- MainWorld.Redis.Set($"Sx:WCSErrorInfo:{obj.Entity.Code}", JsonConvert.SerializeObject(new RedisError() { Equip = obj.Entity.Code, Con = obj.Entity.Code + "扫码失败", Time = DateTime.Now }));
- 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));
- throw new Exception("扫码失败");
- //if (task != null && task.BusType == "装箱码垛")
- //{
- // WMS.补料(task.ID, obj.Entity.Code);
- //}
- //SqlSugarHelper.Do(db =>
- //{
- // if (task != null)
- // {
- // task.Status = Entity.TaskStatus.Error;
- // task.EditTime = DateTime.Now;
- // task.EedTime = DateTime.Now;
- // db.Default.Updateable(task).ExecuteCommand();
- // task.AddWCS_TASK_DTL(db.Default, obj.Entity.Code, "扫码失败");
- // }
- // obj.Data.TaskNumber = obj.Data2.TaskNumber;
- // obj.Data.GoodsEnd = 5186;
- // obj.Data.VoucherNo++;
- //});
- //return;
- }
- World.Log($"环线出库扫码{obj.Entity.Code}交互开始时间:工字轮条码 {barcode} | " + DateTime.Now.ToString("yyyyMMddHHmmss"));
- var task = SqlSugarHelper.Do(db =>
- {
- return db.Default.Queryable<WCS_TaskInfo>().With(SqlWith.NoLock).Where(v => v.ID == obj.Data2.TaskNumber).First();
- });
- if (task == null)
- {
- task = SqlSugarHelper.Do(db => db.Default.Queryable<WCS_TaskInfo>().Where(v => v.BarCode == barcode).First());
- if (task != null && task.BusType == "装箱码垛")
- {
- WMS.补料(task.ID, obj.Entity.Code);
- }
- else if (task.Type == TaskType.EnterDepot)
- {
- if (obj.Entity.Code == "3752")
- {
- obj.Data.GoodsEnd = 3618; //1环线转圈目标地址
- obj.Data.VoucherNo++;
- }
- else if (obj.Entity.Code == "3452")
- {
- obj.Data.GoodsEnd = 3318; //2环线转圈目标地址
- obj.Data.VoucherNo++;
- }
- else if (obj.Entity.Code == "3152")
- {
- obj.Data.GoodsEnd = 3018; //环线转圈目标地址
- obj.Data.VoucherNo++;
- }
- else
- {
- throw new Exception($"{obj.Entity.Code}没有对应的入库目标地址");
- }
- World.Log($"环线出库扫码{obj.Entity.Code}是入库工字轮,分配去转圈:工字轮条码 {barcode} | " + DateTime.Now.ToString("yyyyMMddHHmmss"));
- return;
- }
- SqlSugarHelper.Do(db =>
- {
- if (task != null)
- {
- task.Status = Entity.TaskStatus.Error;
- task.EditTime = DateTime.Now;
- task.EedTime = DateTime.Now;
- db.Default.Updateable(task).ExecuteCommand();
- task.AddWCS_TASK_DTL(db.Default, obj.Entity.Code, "PLC任务错误");
- //记录异常排出信息
- var error = new BaseErrorinfoWcs()
- {
- ContBarCode = barcode,
- Message = $"环线异常排出口|5186,PLC任务错误,521db块任务号:{obj.Data2.TaskNumber},自动异常排出,{DateTime.UtcNow.ToString("yyyyMMddHHmmfff")}",
- Count = 1,
- Memo = "WCS"
- };
- var errorinfoWcs = db.Default.Queryable<BaseErrorinfoWcs>().With(SqlWith.NoLock).Where(v => v.ContBarCode == error.ContBarCode && v.Message == error.Message).First();
- if (errorinfoWcs != null)
- {
- errorinfoWcs.Count = errorinfoWcs.Count++;
- db.Default.Updateable(errorinfoWcs).ExecuteCommand();
- }
- else
- {
- db.Default.Insertable(error);
- }
- }
- obj.Data.TaskNumber = obj.Data2.TaskNumber;
- obj.Data.GoodsEnd = 5186;
- obj.Data.VoucherNo++;
- });
- return;
- }
- if (task.BarCode != barcode)
- {
- //throw new Exception($"扫码结果{barcode}与任务号{task.ID}的条码{task.BarCode}不匹配");
- if (task.BusType == "装箱码垛")
- WMS.补料(task.ID, obj.Entity.Code);
- SqlSugarHelper.Do(db =>
- {
- task.Status = Entity.TaskStatus.Error;
- task.EditTime = DateTime.Now;
- task.EedTime = DateTime.Now;
- db.Default.Updateable(task).ExecuteCommand();
- task.AddWCS_TASK_DTL(db.Default, obj.Entity.Code, $"扫码结果{barcode}与任务号{task.ID}的条码{task.BarCode}不匹配");
- var error = new BaseErrorinfoWcs()
- {
- ContBarCode = barcode,
- Message = $"环线异常排出口|5186,扫码结果{barcode}与任务号{task.ID}的条码{task.BarCode}不匹配,自动异常排出,{DateTime.UtcNow.ToString("yyyyMMddHHmmfff")}",
- Count = 1,
- Memo = "WCS"
- };
- var errorinfoWcs = db.Default.Queryable<BaseErrorinfoWcs>().With(SqlWith.NoLock).Where(v => v.ContBarCode == error.ContBarCode && v.Message == error.Message).First();
- if (errorinfoWcs != null)
- {
- errorinfoWcs.Count = errorinfoWcs.Count++;
- db.Default.Updateable(errorinfoWcs).ExecuteCommand();
- }
- else
- {
- db.Default.Insertable(error);
- }
- obj.Data.TaskNumber = 888;
- obj.Data.GoodsEnd = 5186;
- obj.Data.VoucherNo++;
- });
- return;
- }
- if (task.Type == TaskType.OutDepot)
- {
- if (task.BusType == "异常出库")
- {
- SqlSugarHelper.Do(db =>
- {
- task.Status = WCS.Entity.TaskStatus.Finish;
- task.EditTime = DateTime.Now;
- task.EedTime = DateTime.Now;
- db.Default.Updateable(task).ExecuteCommand();
- task.AddWCS_TASK_DTL(db.Default, obj.Entity.Code, "异常出库任务完成");
- obj.Data.TaskNumber = task.ID;
- obj.Data.GoodsEnd = 5186;
- obj.Data.VoucherNo++;
- });
- }
- else if (task.BusType == "装箱码垛")
- {
- obj.Data.TaskNumber = task.ID;
- short[] arr = new short[0];
- if (floor == "1")
- {
- arr = new short[] { 3759, 3767, 3778 };
- }
- else if (floor == "2")
- {
- arr = new short[] { 3459, 3467, 3478 };
- }
- else if (floor == "3")
- {
- arr = new short[] { 3159, 3167, 3178 };
- }
- //计算扫码处到提升机口的路径点
- var tPaths = arr.Select(v => new { Target = v, Arr = DevicePath.GetPath(obj.Entity.Code, v.ToString()).Points.Select(d => d.Protocol<IStation521>(this.World)).ToArray() });
- //得到路径上的任务数
- var tTasks = tPaths.Select(v => new { Target = v.Target, Qty = v.Arr.Where(d => d.TaskNumber > 0 && d.GoodsEnd == v.Target).Count() }).ToArray();
- //var target = tTasks.OrderBy(v => v.Qty >= 4)//优先分配不满4个的
- // .ThenByDescending(v => v.Qty)//数量多的优先
- // .ThenBy(v => v.Target)//编号大的(远)的优先
- // .First().Target;
- if (obj.Entity.Code == "3752") //一层出库扫码
- {
- var target1 = tTasks.OrderBy(v => v.Target);
- if (target1.Any(v => v.Target == 3778 && v.Qty <= 3))
- {
- obj.Data.GoodsEnd = 3778;
- obj.Data.VoucherNo++;
- }
- else if (target1.Any(v => v.Target == 3767 && v.Qty <= 3)) //4
- {
- obj.Data.GoodsEnd = 3767;
- obj.Data.VoucherNo++;
- }
- else if (target1.Any(v => v.Target == 3759 && v.Qty <= 3)) //4
- {
- obj.Data.GoodsEnd = 3759;
- obj.Data.VoucherNo++;
- }
- else
- {
- //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}任务数量已满没有可用的提升机地址");
- var floor1preelCount = MainWorld.Redis.Get("Floor1Preel");
- MainWorld.Redis.Set("Floor1Preel", int.Parse(floor1preelCount) + 1);
- obj.Data.GoodsEnd = 3618; //环线转圈目标地址
- obj.Data.VoucherNo++;
- }
- }
- else if (obj.Entity.Code == "3452") //二层出库扫码
- {
- var target1 = tTasks.OrderBy(v => v.Target);
- if (target1.Any(v => v.Target == 3467 && v.Qty <= 3)) //4
- {
- obj.Data.GoodsEnd = 3467;
- obj.Data.VoucherNo++;
- }
- else if (target1.Any(v => v.Target == 3459 && v.Qty <= 3)) //4
- {
- obj.Data.GoodsEnd = 3459;
- obj.Data.VoucherNo++;
- }
- else if (target1.Any(v => v.Target == 3478 && v.Qty <= 3))
- {
- obj.Data.GoodsEnd = 3478;
- obj.Data.VoucherNo++;
- }
- else
- {
- //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}任务数量已满没有可用的提升机地址");
- var floor2preeCount = MainWorld.Redis.Get("Floor2Preel");
- MainWorld.Redis.Set("Floor2Preel", int.Parse(floor2preeCount) + 1);
- obj.Data.GoodsEnd = 3318; //环线转圈目标地址
- obj.Data.VoucherNo++;
- }
- }
- else if (obj.Entity.Code == "3152") //三层出库扫码
- {
- var target1 = tTasks.OrderBy(v => v.Target);
- if (target1.Any(v => v.Target == 3159 && v.Qty <= 3))
- {
- obj.Data.GoodsEnd = 3159;
- obj.Data.VoucherNo++;
- }
- else if (target1.Any(v => v.Target == 3167 && v.Qty <= 3)) //4
- {
- obj.Data.GoodsEnd = 3167;
- obj.Data.VoucherNo++;
- }
- else if (target1.Any(v => v.Target == 3178 && v.Qty <= 3)) //4
- {
- obj.Data.GoodsEnd = 3178;
- obj.Data.VoucherNo++;
- }
- else
- {
- //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}任务数量已满没有可用的提升机地址");
- var floor3preeCount = MainWorld.Redis.Get("Floor3Preel");
- MainWorld.Redis.Set("Floor3Preel", int.Parse(floor3preeCount) + 1);
- obj.Data.GoodsEnd = 3018; //环线转圈目标地址
- obj.Data.VoucherNo++;
- }
- }
- //task.Status = WCS.Entity.TaskStatus.Finish;
- //task.EditTime = DateTime.Now;
- //task.EedTime = DateTime.Now;
- //db.Default.Updateable(task).ExecuteCommand();
- //task.AddWCS_TASK_DTL(db.Default, obj.Entity.Code, "异常出库任务完成");
- //obj.Data.GoodsEnd = target;
- //obj.Data.VoucherNo++;
- }
- else if (task.BusType == "扭转检测")
- {
- string[] arr = new string[0];
- if (floor == "1")
- {
- arr = new string[] { "3752", "3753", "3760", "3761", "3771", "3772", "3779", "3780", "3781", "3782", "3783", "3784", "3786", "3787", "3788", "3789", "3790" };
- }
- else if (floor == "2")
- {
- arr = new string[] { "3452", "3453", "3460", "3461", "3471", "3472", "3479", "3480", "3481", "3482", "3483", "3484", "3486", "3487", "3488", "3489", "3490" };
- }
- else if (floor == "3")
- {
- arr = new string[] { "3152", "3153", "3160", "3161", "3171", "3172", "3179", "3180", "3181", "3182", "3183", "3184", "3186", "3187", "3188", "3189", "3190" };
- }
- var a = Device.All.Where(x => arr.Contains(x.Code)).Select(x => new Device<IStation521>(x, World));
- //var tPaths = arr.Select(v => new { Target = v, Arr = DevicePath.GetPath(obj.Entity.Code, v.ToString()).Points.Select(d => d.Protocol<IStation521>(this.World)).ToArray() });
- //得到路径上的任务数
- var count = a.Count(v => v.Data.TaskNumber > 0 && v.Data.GoodsEnd == 4002);
- if (count > 3)
- {
- switch (obj.Entity.Code)
- {
- case "3752":
- var floor1Count = MainWorld.Redis.Get("Floor1Torsch");
- MainWorld.Redis.Set("Floor1Torsch", int.Parse(floor1Count) + 1);
- obj.Data.TaskNumber = task.ID;
- obj.Data.GoodsEnd = 3618;
- obj.Data.VoucherNo++;
- break;
- case "3452":
- var floor2Count = MainWorld.Redis.Get("Floor2Torsch");
- MainWorld.Redis.Set("Floor2Torsch", int.Parse(floor2Count) + 1);
- obj.Data.TaskNumber = task.ID;
- obj.Data.GoodsEnd = 3318;
- obj.Data.VoucherNo++;
- break;
- case "3152":
- var floor3Count = MainWorld.Redis.Get("Floor3Torsch");
- MainWorld.Redis.Set("Floor3Torsch", int.Parse(floor3Count) + 1);
- obj.Data.TaskNumber = task.ID;
- obj.Data.GoodsEnd = 3018;
- obj.Data.VoucherNo++;
- break;
- default:
- break;
- }
- }
- else
- {
- obj.Data.TaskNumber = task.ID;
- obj.Data.GoodsEnd = 4002;
- obj.Data.VoucherNo++;
- }
- }
- else
- {
- throw new Exception($"出库业务类型{task.BusType}不支持");
- }
- }
- if (task.Type == TaskType.EnterDepot)
- {
- if (obj.Entity.Code == "3752")
- {
- obj.Data.GoodsEnd = 3618; //1环线转圈目标地址
- obj.Data.VoucherNo++;
- }
- else if (obj.Entity.Code == "3452")
- {
- obj.Data.GoodsEnd = 3318; //2环线转圈目标地址
- obj.Data.VoucherNo++;
- }
- else if (obj.Entity.Code == "3152")
- {
- obj.Data.GoodsEnd = 3018; //环线转圈目标地址
- obj.Data.VoucherNo++;
- }
- else
- {
- throw new Exception($"{obj.Entity.Code}没有对应的入库目标地址");
- }
- }
- World.Log($"环线出库扫码{obj.Entity.Code}交互结束时间:工字轮条码 {barcode} | " + DateTime.Now.ToString("yyyyMMddHHmmss"));
- }
- public override bool Select(Device dev)
- {
- return dev.HasFlag("出库扫码");
- }
- //short PackDevCode()
- //{
- //}
- }
- }
|