using HanHe.Message; using HH.WCS.Hexafluo; using HH.WCS.Hexafluo.util; using HH.WCS.Hexafluo.wms; using HH.WCS.SJML.Bll; using HH.WCS.SJML.Entitys; using SqlSugar; using System; using System.Collections.Generic; using System.Linq; namespace HH.WCS.ZCQTJ.core { public class TaskOver { private static object locko7 = new object(); private static object locko8 = new object(); public static void CheckCameraTask() { try { lock (locko7) { //任务超时通知 var chi = new SqlHelper().GetInstance(); var newDb = chi.CopyNew(); DateTime currentTime = DateTime.Now; TimeSpan tenMinutes = TimeSpan.FromMinutes(20); DateTime newTime = currentTime - tenMinutes; try { var State = new List { "完成", "取消" }; var TaskList = newDb.Queryable().Where(e => !State.Contains(e.S_B_STATE) && e.T_CREATE < newTime) .OrderBy(st => st.N_PRIORITY, OrderByType.Desc) .OrderBy(st => st.T_CREATE) .ToList(); if (TaskList.Any()) { var loList = newDb.Queryable().Where(a => TaskList.Select(e => e.S_START_LAREA).Contains(a.S_LOC_CODE.Trim()) || TaskList.Select(e => e.S_END_LAREA).Contains(a.S_LOC_CODE.Trim())).ToList(); foreach (var item in TaskList) { if (item.S_TYPE == "入库") { var ghh = ""; ghh = $" 任务号:{item.S_TASK_NO.Substring(item.S_TASK_NO.Length - 4)} 库区:{item.S_END_LAREA} 巷道:{loList.Find(e => e.S_LOC_CODE == item.S_END_LOC).N_ROADWAY} 超时时间(创建至今):{(DateTime.Now - item.T_CREATE).TotalMinutes}分钟 任务目的地:{item.S_END_LOC}"; BLLCreator.CreateSingleton().button1_Click(ghh); } if (item.S_TYPE == "出库") { var ghh = ""; ghh = $" 任务号:{item.S_TASK_NO.Substring(item.S_TASK_NO.Length - 4)} 库区:{item.S_START_LAREA} 巷道:{loList.Find(e => e.S_LOC_CODE == item.S_START_LOC).N_ROADWAY} 超时时间(创建至今):{(DateTime.Now - item.T_CREATE).TotalMinutes}分钟 任务目的地:{item.S_END_LOC}"; BLLCreator.CreateSingleton().button1_Click(ghh); } } } } catch (Exception ex) { LogHelper.DanInfo("钉钉通知", ex.Message + ex.StackTrace); } //try //{ // MonitorAgvDate.CheckCamera(); //} //catch (System.Exception) //{ // throw; //} //Agv任务五分钟没车号发送到钉钉 //try //{ // DateTime datt = DateTime.Now; // var State1 = new List { "已推送", "执行中" }; // var TaskList1 = newDb.Queryable().Where(e => e.S_NOTE == "agv任务" && State1.Contains(e.S_B_STATE) && datt.AddMinutes(-5) <= e.T_MODIFY && e.T_MODIFY <= datt) // .ToList(); // foreach (var item in TaskList1) // { // if (string.IsNullOrEmpty(item.S_EQ_NO) && item.S_EQ_NO == "0") // { // var Val = $"任务号:{item.S_TASK_NO.Substring(item.S_TASK_NO.Length - 4)} \n\n 创建时间:{item.T_CREATE.ToString()} \n\n 开始时间:{item.T_START_TIME?.ToString()} \n\n 业务类型:{item.S_TYPE} \n\n 容器号:{item.S_CNTRS} \n\n 起点:{item.S_START_LOC} \n\n 终点:{item.S_END_LOC} "; // BLLCreator.CreateSingleton().button1_Click(Val); // } // } // //agv任务十五分钟未完成 // var State2 = new List { "完成", "取消" }; // var TaskList2 = newDb.Queryable().Where(e => e.S_NOTE == "agv任务" && !State2.Contains(e.S_B_STATE) && datt.AddMinutes(-15) <= e.T_MODIFY && e.T_MODIFY <= datt) // .ToList(); // foreach (var item in TaskList2) // { // var Val = $"任务号:{item.S_TASK_NO.Substring(item.S_TASK_NO.Length - 4)} \n\n 创建时间:{item.T_CREATE.ToString()} \n\n 开始时间:{item.T_START_TIME?.ToString()} \n\n 业务类型:{item.S_TYPE} \n\n 容器号:{item.S_CNTRS} \n\n 起点:{item.S_START_LOC} \n\n 终点:{item.S_END_LOC} "; // BLLCreator.CreateSingleton().button1_Click(Val); // } //} //catch (Exception ex) //{ // LogHelper.DanInfo("钉钉通知", ex.Message + ex.StackTrace); //} try { //每个库区的未完成的任务数量大于?(大于多少可不可以让现场管理人员自动调节)就推送钉钉(当前未完成的任务数量多少) var transportTask = chi.Queryable().Where(e => e.Autoindex == "钉钉未完成任务推送数")?.First(); var TaryJb = string.IsNullOrEmpty(transportTask.TypeJson) ? 0 : int.Parse(transportTask.TypeJson); var State3 = new List { "完成", "取消" }; var TaskList3 = newDb.Queryable().Where(e => !State3.Contains(e.S_B_STATE) && e.S_Main_task == "主任务") .ToList(); var ck = TaskList3.FindAll(e => e.S_TYPE == "出库").ToList(); var Rk = TaskList3.FindAll(e => e.S_TYPE == "入库").ToList(); if (ck.Count > 0) { var gghf = TaskList3.GroupBy(e => e.S_START_LAREA).Select(e => e.Key).ToList(); foreach (var item in gghf) { var cks = ck.FindAll(e => e.S_START_LAREA == item).ToList(); if (cks.Count() >= TaryJb) { var Val = $"出库:起点库区为 {item} 未完成任务数为:{cks.Count()}"; BLLCreator.CreateSingleton().button1_Click(Val); } } } if (Rk.Count > 0) { var gghf = TaskList3.GroupBy(e => e.S_END_LAREA).Select(e => e.Key).ToList(); foreach (var item in gghf) { var Rks = Rk.FindAll(e => e.S_END_LAREA == item).ToList(); if (Rks.Count() >= TaryJb) { var Val = $"入库:终点库区为 {item} 未完成任务数为:{Rks.Count()}"; BLLCreator.CreateSingleton().button1_Click(Val); } } } } catch (Exception ex) { LogHelper.DanInfo("钉钉通知", ex.Message + ex.StackTrace); } } } catch (System.Exception ex) { LogHelper.DanInfo("钉钉通知", ex.Message + ex.StackTrace); } } public static void CheckCameraTask2() { try { lock (locko8) { //任务超时通知 var chi = new SqlHelper().GetInstance(); var newDb = chi.CopyNew(); DateTime datt = DateTime.Now; var Val = ""; //出库,入库的总任务数量(半个小时之内完成跟未完成的任务综合) var TaskList4 = newDb.Queryable().Where(e => e.S_Main_task == "主任务" && datt.AddMinutes(-30) <= e.T_CREATE && e.T_CREATE <= datt) .ToList(); var ck = TaskList4.FindAll(e => e.S_TYPE == "出库").ToList(); var Rk = TaskList4.FindAll(e => e.S_TYPE == "入库").ToList(); if (ck.Count > 0) { var gghf = TaskList4.GroupBy(e => e.S_START_LAREA).Select(e => e.Key).ToList(); foreach (var item in gghf) { var cks = ck.FindAll(e => e.S_START_LAREA == item).ToList(); Val += $"半小时内库区: {item} 出库数为:{cks.Count()} \n\n "; } } if (Rk.Count > 0) { var gghf = TaskList4.GroupBy(e => e.S_END_LAREA).Select(e => e.Key).ToList(); foreach (var item in gghf) { var Rks = Rk.FindAll(e => e.S_END_LAREA == item).ToList(); Val = $"半小时内库区: {item} 入库数为:{Rks.Count()} \n\n "; } } BLLCreator.CreateSingleton().button1_Click(Val); } } catch (System.Exception ex) { LogHelper.Info("处理自管任务", ex.Message + ex.StackTrace); } } } }