| 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("位置", "扫码");
 
-         }
 
-     }
 
- }
 
 
  |