using Newtonsoft.Json; using ServiceCenter.Logs; using ServiceCenter.Redis; using ServiceCenter.SqlSugars; using WCS.Entity; namespace WCS.WorkEngineering.Extensions { /// /// 任务扩展 /// public static class TaskExtension { /// /// 更新任务执行记录 /// /// 任务信息 /// 数据库上下文 /// 当前地址 /// 描述 public static void AddWCS_TASK_DTL(this WCS_TaskInfo task, SqlSugarHelper db, string curPoint, string desc) => task.AddWCS_TASK_DTL(db, curPoint, "", desc); /// /// 更新任务执行记录 /// /// 任务信息 /// 数据库上下文 /// 当前地址 /// 下一个地址 /// 描述 public static void AddWCS_TASK_DTL(this WCS_TaskInfo task, SqlSugarHelper db, string curPoint, string NextPoint, string desc) { db.Default.Insertable(new WCS_TaskDtl { ID = Guid.NewGuid(), ParentTaskCode = task.ID, CurPoint = curPoint, NextPoint = NextPoint, Desc = desc, AddWho = "WCS" }).SplitTable().ExecuteCommand(); } /// /// 完成或取消任务 /// /// /// /// public static void CompleteOrCancelTasks(this WCS_TaskInfo taskInfo, SqlSugarHelper db) { if (taskInfo.Status is not Entity.TaskStatus.Finish and not Entity.TaskStatus.Cancel) throw new KnownException("任务未完成或取消,无法执行WCS_TaskInfo与WCS_TaskOld同步动作", LogLevelEnum.Mid); else // 任务完成或取消,进行相关同步动作 { WCS_TaskOld taskOld = db.Default.Queryable().SplitTable(tabs => tabs.Take(2)).Where(v => v.ID == taskInfo.ID).OrderByDescending(v => v.AddTime).First(); if (taskOld is null) throw new KnownException($"WCS_TaskOld表中不存在任务:{taskInfo.ID},无法执行WCS_TaskInfo与WCS_TaskOld同步动作", LogLevelEnum.Mid); else { //状态 taskOld.Status = taskInfo.Status; taskOld.Uploaded = taskInfo.Uploaded; //任务号 taskOld.WmsTask = taskInfo.WmsTask; taskOld.AgvTaskID = taskInfo.AgvTaskID; taskOld.TaskGroupKey = taskInfo.TaskGroupKey; taskOld.Priority = taskInfo.Priority; //时间与用户 taskOld.AddTime = taskInfo.AddTime; taskOld.AddWho = taskInfo.AddWho; taskOld.StartTime = taskInfo.StartTime; taskOld.EndTime = taskInfo.EedTime; taskOld.EditWho = taskInfo.EditWho; taskOld.EditTime = taskInfo.EditTime; //条码与地址 taskOld.BarCode = taskInfo.BarCode; taskOld.MaterialCode = taskInfo.MaterialCode; taskOld.AddrFrom = taskInfo.AddrFrom; taskOld.AddrTo = taskInfo.AddrTo; taskOld.LastInteractionPoint = taskInfo.LastInteractionPoint; taskOld.AddrNext = taskInfo.AddrNext; taskOld.Tunnel = taskInfo.Tunnel; taskOld.Floor = taskInfo.Floor; taskOld.Device = taskInfo.Device; taskOld.SrmStation = taskInfo.SrmStation; //码垛信息 taskOld.DocID = taskInfo.DocID; taskOld.PalletType = taskInfo.PalletType; taskOld.ProdLine = taskInfo.ProdLine; taskOld.FullQty = taskInfo.FullQty; //外形信息 taskOld.Height = taskInfo.Height; taskOld.Length = taskInfo.Length; taskOld.Weight = taskInfo.Weight; //手动处理备注 taskOld.ManualRemarks = taskInfo.ManualRemarks; //更新任务历史表,删除任务当前表 db.Default.Updateable(taskOld).SplitTable().ExecuteCommand(); db.Default.Deleteable(taskInfo).ExecuteCommand(); } } } ///// ///// 获取出库任务 ///// ///// 任务 ///// db ///// 可用出库站台 ///// 楼层 ///// 堆垛机 ///// 递归次数 ///// ///// //public static WCS_TaskInfo GetOutTask(this WCS_TaskInfo taskInfo, SqlSugarHelper db, List allOutCode, int floor, SRM obj, int index = 1) //{ // return task; //} /// /// 获取AGV任务ID /// /// db /// public static int GetAGVTaskId(this SqlSugarHelper db) { var id = db.Default.Queryable().SplitTable(v => v.Take(1)).Max(v => v.ID); return id + 1; } /// /// 更新任务执行记录 /// /// 任务信息 public static void updateRedisHash(this WCS_TaskInfo task) { RedisHub.Default.HMSet($"Hash:{task.ID}", task.ToDic()); } public static Dictionary ToDic(this T obj) where T : class { Dictionary map = new Dictionary(); var objSte = JsonConvert.SerializeObject(obj); map = JsonConvert.DeserializeObject>(objSte); return map; } } }