using Castle.Core.Internal; using Newtonsoft.Json; 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 next = DevicePath.GetPath(obj.Entity.Code, srmCode).Points[1].Code; //开始检查任务信息 var db = new SqlSugarHelper(); var task = db.Default.Queryable().Single(x => x.BarCode == bcrCode && x.ID == mainlineDiversion.TaskId && x.Status == TaskStatus.NewBuild); if (task == null) { World.Log($"{bcrCode}-{mainlineDiversion}:找不到匹配任务", LogLevelEnum.High); continue; } try { db.Connect.BeginTran(); task.Status = TaskStatus.WaitingToExecute; task.EditWho = "WCS"; task.StartTime = DateTime.Now; task.EditTime = DateTime.Now; db.Default.Updateable(task).ExecuteCommand(); task.AddWCS_TASK_DTL(db.Default, obj.Entity.Code, next.ToString(), "任务完成预分流"); db.Connect.CommitTran(); } catch (Exception e) { db.Connect.RollbackTran(); World.Log($"{bcrCode}-{mainlineDiversion}:----{e.Message}", LogLevelEnum.High); continue; } //开始赋值 obj.Data3.GetType().GetProperty($"BcrCode{obj.Data3.NextIndex}").SetValue(obj.Data3, bcrCode); obj.Data3.GetType().GetProperty($"TaskNumber{obj.Data3.NextIndex}").SetValue(obj.Data3, task.ID); 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"; } } /// /// 主线分流 /// public class MainlineDiversion { /// /// 任务号 /// public int TaskId { get; set; } /// /// 仓库号 /// public string WarehouseCode { get; set; } } }