using Cowain.Bake.Common.Core; using Cowain.Bake.Common.Enums; using Cowain.Bake.Model; using Cowain.Bake.Model.Entity; using MySql.Data.MySqlClient; using System; using System.Collections.Generic; using System.Data; using System.Data.Entity; using System.Linq; using Unity; namespace Cowain.Bake.BLL { public class TaskRecordService : ServiceBase { public TaskRecordService(IUnityContainer unityContainer) : base(unityContainer) { } public List GetAllTaskRun() { using (var Context = new BakingEntities()) { var taskRunList = Context.Set().OrderBy(x => x.Status).ThenByDescending(x => x.BuildTime).Take(1000).ToList(); if (taskRunList == null) { return null; } return taskRunList; } } public List Query(DateTime startTime, DateTime endTime) { using (var Context = new BakingEntities()) { return Context.Set().Where(x => x.BuildTime >= startTime && x.BuildTime <= endTime) .OrderByDescending(x=>x.Id).ToList(); } } public int UpdateFinishStepId(int taskId) { using (var Context = new BakingEntities()) { var task = Context.Set().Where(x => x.Id == taskId).ToList().FirstOrDefault(); task.StepId = (int)ETaskStep.Finish; return Context.SaveChanges(); } } public int DeleteNotFinishTask() { using (var Context = new BakingEntities()) { var trq = (from a in Context.Set() where a.Status != (int)ETaskStatus.ExecutionCompleted select a); if (trq == null) { return 0; } foreach (var item in trq) { Context.Set().Remove(item); } return Context.SaveChanges(); } } public int DeleteTask(long id) { using (var Context = new BakingEntities()) { var trq = (from a in Context.Set() where a.Id == id select a).FirstOrDefault(); if (trq == null) { return 0; } Context.Set().Remove(trq); return Context.SaveChanges(); } } public int DeleteUnexecuteTask() { using (var Context = new BakingEntities()) { var trq = (from a in Context.Set() where a.Status != (int)ETaskStatus.ExecutionCompleted select a).ToList(); if (trq == null) { return 0; } Context.Set().RemoveRange(trq); return Context.SaveChanges(); } } //是否有未执行或执行中的任务(PLC有任务要执行) public TTaskRecord UnexecuteTask() { using (var Context = new BakingEntities()) { return Context.Set().Where(x => x.Status != (int)ETaskStatus.ExecutionCompleted).FirstOrDefault(); } } //public TaskEntity GetManualTask() //{ // using (var Context = new BakingEntities()) // { // var trq = (from a in Context.Set() // where a.Status != (int)ETaskStep.ExecutionCompleted // orderby a.Id descending // select a).FirstOrDefault(); // return null; // } //} public int UpdateTask() { using (var Context = new BakingEntities()) { LogHelper.Instance.Debug("修改任务开始"); return Context.Database.ExecuteSqlCommand("call ProcUpdateTask()"); } } public int BindPalletToRobot() { using (var Context = new BakingEntities()) { return Context.Database.ExecuteSqlCommand("call ProcBindPalletToRobot()"); } } public (bool, int) IsPullInBaker() { using (var Context = new BakingEntities()) { var record = (from taskRecord in Context.Set() join taskType in Context.Set() on taskRecord.TaskTypeId equals taskType.Id orderby taskRecord.Id descending //where taskType.Id == 1 //上料满夹具->烤箱 select new { TypeId = taskType.Id, PalletId = taskRecord.PalletId, }).FirstOrDefault(); if (null == record) { return (false, 0); } if (1 != record.TypeId) //where taskType.Id == 1 //上料满夹具->烤箱 { return (false, 0); } return (true, record.PalletId); } } public TaskEntity GetTask() { try { using (var Context = new BakingEntities()) { TaskEntity result = Context.Database.SqlQuery("CALL ProcGetTask(1);").FirstOrDefault(); //显示FirstOrDefault崩溃, if (null == result) { return null; } result.Status = (int)ETaskStatus.UnExecute; result.StepId = (int)ETaskStep.Unexecuted; result.BuildTime = DateTime.Now; TTaskRecord taskRecord = new TTaskRecord() { PalletId = result.PalletId, TaskTypeId = result.TaskTypeId, Source = result.Source, Target = result.Target, Status = result.Status, BuildTime = result.BuildTime, StepId = result.StepId, }; Context.Set().Add(taskRecord); if (0 >= Context.SaveChanges()) { LogHelper.Instance.Error("任务插入数据库失败,{num}!"); return null; } result.Id = taskRecord.Id; return result; } } catch(Exception ex) { LogHelper.Instance.Fatal($"获取任务信息时崩溃,{ex.Message},{ex.StackTrace}"); } return null; } public bool ModifyTaskStatus(ETaskStatus status) { using (var Context = new BakingEntities()) { var task = (from a in Context.Set() where a.Status != (int)ETaskStatus.ExecutionCompleted orderby a.Id descending //只修改ID最大的 select a).FirstOrDefault(); if (task == null) { LogHelper.Instance.Error($"没有找到任务,所以修改任务状态失败!状态为:{status}"); return false; } //修改状态时间 if (ETaskStatus.ExecutionCompleted == status) { task.EndTime = DateTime.Now; } else if (ETaskStatus.Executing == status) { task.StartTime = DateTime.Now; } task.Status = (int)status; return Context.SaveChanges() > 0 ? true : false; } } //public TaskStatusEntity GetTaskShowInfo() //{ // // sql = $@"SELECT t1.id, t1.Source,t1.Target,ti.PalletCode // //,CASE t1.Status WHEN 0 THEN '未执行' WHEN 1 THEN '执行中' WHEN 2 THEN '执行完成' ELSE '未执行' END 'Status' // // FROM TTaskRecord t1 // //LEFT JOIN TPalletInfo ti ON t1.PalletId=ti.Id // //ORDER BY t1.Id DESC LIMIT 1"; // return (from t in Context.Set() // join p in Context.Set() on t.PalletId equals p.Id // orderby t.Id descending // select new TaskStatusEntity // { // Source = t.Source, // Target = t.Target, // Status = ((ETaskStep)t.Status).GetDescription(), // PalletCode = p.PalletCode // }).FirstOrDefault(); //} } }