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