using Newtonsoft.Json; using PlcSiemens.Core.Extension; using ServiceCenter.Extensions; using ServiceCenter.Logs; using ServiceCenter.Redis; using ServiceCenter.SqlSugars; using System.ComponentModel; using WCS.Core; using WCS.Entity; using WCS.Entity.Protocol.BCR; using WCS.Entity.Protocol.Station; using WCS.WorkEngineering.Extensions; using WCS.WorkEngineering.Worlds; using TaskStatus = WCS.Entity.TaskStatus; namespace WCS.WorkEngineering.Systems { /// /// 满轮主线预写入目标地址 /// [BelongTo(typeof(SortingMainLineWorld))] [Description("满轮主线预写入目标地址")] public class 满轮主线预写入目标地址 : DeviceSystem> { protected override bool ParallelDo => true; protected override bool SaveLogsToFile => true; public override void Do(Device obj) { //待处理条码组 var pendingBcrList = obj.Data2.GetBcrCodeList().Where(x => !x.IsNullOrEmpty()); //缓存条码组 var cacheBcrList = obj.Data3.GetBcrCodeList(); var codes = pendingBcrList.Where(x => !cacheBcrList.Contains(x)); World.Log($"扫码器:{JsonConvert.SerializeObject(pendingBcrList)}"); World.Log($"缓存信息:{JsonConvert.SerializeObject(cacheBcrList)}"); //循环处理所有缓存条码组中没有的条码 foreach (var bcrCode in codes) { //取出预分配地址,并计算相关信息 var key = $"AllocationWarehouseSort:{bcrCode}"; var value = RedisHub.WMS.Get(key); if (value == null) { World.Log($"{bcrCode}:找不到分库记录", LogLevelEnum.High); continue; } var mainlineDiversion = JsonConvert.DeserializeObject(value); var srmCode = mainlineDiversion.WarehouseCode.WarehouseToSrm(); var path = DevicePath.GetPath(obj.Entity.Code, srmCode); if (path == null || path is { Points.Count: < 2 }) { World.Log($"{bcrCode}:路径错误,当前位置{obj.Entity.Code},目标位置:{srmCode}", LogLevelEnum.High); continue; } var next = path.Points[1].Code; WCS_TaskInfo taskInfo = null; try { SqlSugarHelper.Do(_db => { var db = _db.Default; var task = db.Queryable().NoLock().Single(x => x.BarCode == bcrCode && x.ID == mainlineDiversion.TaskId && x.Status == TaskStatus.NewBuild); if (task == null) { World.Log($"{bcrCode}:找不到匹配任务--{value}", LogLevelEnum.High); return; } //if ((obj.Entity.Code == "18" && task.WarehouseCode == "1N") || // (obj.Entity.Code == "118" && task.WarehouseCode == "1S") || // (obj.Entity.Code == "38" && task.WarehouseCode == "2N") || // (obj.Entity.Code == "138" && task.WarehouseCode == "2S") || // (obj.Entity.Code == "58" && task.WarehouseCode == "3N") || // (obj.Entity.Code == "158" && task.WarehouseCode == "3S")) //{ // task.Status = TaskStatus.WaitingToExecute; // task.EditWho = "WCS"; // task.StartTime = DateTime.Now; //} //task.EditTime = DateTime.Now; //db.UpdateableRowLock(task).ExecuteCommand(); //task.AddWCS_TASK_DTL(db, obj.Entity.Code, next, "任务完成预分流"); taskInfo = task; }); } catch (Exception e) { World.Log($"{bcrCode}:----{e.Message}-{value}", LogLevelEnum.High); continue; } if (taskInfo == null) continue; //开始赋值 obj.Data3.GetType().GetProperty($"BcrCode{obj.Data3.NextIndex}").SetValue(obj.Data3, bcrCode); obj.Data3.GetType().GetProperty($"BcrCode{obj.Data3.NextIndex}").SetValue(obj.Data3, bcrCode); obj.Data3.GetType().GetProperty($"TaskNumber{obj.Data3.NextIndex}").SetValue(obj.Data3, taskInfo.ID); obj.Data3.GetType().GetProperty($"TaskNumber{obj.Data3.NextIndex}").SetValue(obj.Data3, taskInfo.ID); obj.Data3.GetType().GetProperty($"GoodsEnd{obj.Data3.NextIndex}").SetValue(obj.Data3, next.ToShort()); obj.Data3.GetType().GetProperty($"GoodsEnd{obj.Data3.NextIndex}").SetValue(obj.Data3, next.ToShort()); if (obj.Data3.NextIndex >= 49) { obj.Data3.NextIndex = 0; } else { obj.Data3.NextIndex++; } } } public override bool Select(Device dev) { return dev.Code is "18" or "118" or "38" or "58" or "138" or "158"; } } /// /// 主线分流 /// public class MainlineDiversion { /// /// 任务号 /// public int TaskId { get; set; } /// /// 仓库号 /// public string WarehouseCode { get; set; } } }