Files
6098/Cowain.Bake.BLL/TaskRecordService.cs

266 lines
9.2 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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<TTaskRecord> GetAllTaskRun()
{
using (var Context = new BakingEntities())
{
var taskRunList = Context.Set<TTaskRecord>().OrderBy(x => x.Status).ThenByDescending(x => x.BuildTime).Take(1000).ToList();
if (taskRunList == null)
{
return null;
}
return taskRunList;
}
}
public List<TTaskRecord> Query(DateTime startTime, DateTime endTime)
{
using (var Context = new BakingEntities())
{
return Context.Set<TTaskRecord>().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<TTaskRecord>().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<TTaskRecord>()
where a.Status != (int)ETaskStatus.ExecutionCompleted
select a);
if (trq == null)
{
return 0;
}
foreach (var item in trq)
{
Context.Set<TTaskRecord>().Remove(item);
}
return Context.SaveChanges();
}
}
public int DeleteTask(long id)
{
using (var Context = new BakingEntities())
{
var trq = (from a in Context.Set<TTaskRecord>()
where a.Id == id
select a).FirstOrDefault();
if (trq == null)
{
return 0;
}
Context.Set<TTaskRecord>().Remove(trq);
return Context.SaveChanges();
}
}
public int DeleteUnexecuteTask()
{
using (var Context = new BakingEntities())
{
var trq = (from a in Context.Set<TTaskRecord>()
where a.Status != (int)ETaskStatus.ExecutionCompleted
select a).ToList();
if (trq == null)
{
return 0;
}
Context.Set<TTaskRecord>().RemoveRange(trq);
return Context.SaveChanges();
}
}
//是否有未执行或执行中的任务PLC有任务要执行
public TTaskRecord UnexecuteTask()
{
using (var Context = new BakingEntities())
{
return Context.Set<TTaskRecord>().Where(x => x.Status != (int)ETaskStatus.ExecutionCompleted).FirstOrDefault();
}
}
//public TaskEntity GetManualTask()
//{
// using (var Context = new BakingEntities())
// {
// var trq = (from a in Context.Set<TTaskRecord>()
// 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<TTaskRecord>()
join taskType in Context.Set<TTaskType>() 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<TaskEntity>("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<TTaskRecord>().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<TTaskRecord>()
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<TTaskRecord>()
// join p in Context.Set<TPalletInfo>() 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();
//}
}
}