using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using SqlSugar;
using IoTIntegrationPlatform.Common;
using IoTIntegrationPlatform.Interface;
using IoTIntegrationPlatform.Model.common;
using IoTIntegrationPlatform.Model.Model;
namespace IoTIntegrationPlatform.Services
{
public class TaskSchedulingService : ITaskSchedulingService
{
private ISqlSugarClient db { get; }
public TaskSchedulingService(ISqlSugarClient _db)
{
db = _db;
}
#region 类句柄操作
private IntPtr handle;
private bool disposed = false;
//关闭句柄
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1060:MovePInvokesToNativeMethodsClass"), System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Interoperability", "CA1401:PInvokesShouldNotBeVisible"), System.Runtime.InteropServices.DllImport("Kernel32")]
public extern static Boolean CloseHandle(IntPtr handle);
///
/// 释放对象资源
///
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
///
/// 释放对象资源
///
///
protected virtual void Dispose(bool disposing)
{
if (!this.disposed)
{
if (handle != IntPtr.Zero)
{
CloseHandle(handle);
handle = IntPtr.Zero;
}
}
disposed = true;
}
~TaskSchedulingService()
{
Dispose(false);
}
#endregion
#region 任务调度信息
///
/// 获取任务信息
///
///
///
public ScheduledTaskInfo GetTaskInfo(BaseParm parm)
{
ScheduledTaskInfo model = new ScheduledTaskInfo();
try
{
model = db.Queryable()
.WhereIF(!string.IsNullOrEmpty(parm.Param), it => it.TaskName == parm.Param)
.WhereIF(!string.IsNullOrEmpty(parm.Param1), it => it.GroupName == parm.Param1)
.First();
}
catch (Exception ex)
{
Logging.Error(ex, "GetTaskInfo");
}
return model;
}
///
/// 获取定时任务列表
///
///
///
///
///
public List GetTakList()
{
List list = new List();
try
{
list = db.Queryable().ToList();
}
catch (Exception ex)
{
Logging.Error(ex, "GetTakList");
}
return list;
}
///
/// 获取定时任务列表[分页]
///
///
///
///
public List GetTakList(BaseParm parm, ref int page)
{
List list = new List();
try
{
list = db.Queryable()
.WhereIF(!string.IsNullOrEmpty(parm.Name), it => it.TaskName.Contains(parm.Name))
.ToPageList(parm.PageIndex, parm.PageSize, ref page);
}
catch (Exception ex)
{
Logging.Error(ex, ex.Message);
}
return list;
}
///
/// 添加任务
///
///
///
public ScheduledTaskInfo AddTask(ScheduledTaskInfo model)
{
try
{
model.Id = db.Insertable(model).ExecuteReturnIdentity();
}
catch (Exception ex)
{
Logging.Error(ex, "AddTask");
}
return model;
}
///
/// 编辑任务
///
///
///
public bool UpdateTask(ScheduledTaskInfo model)
{
bool result = false;
try
{
ScheduledTaskInfo oldModel=db.Queryable().First(it=>it.Id==model.Id);
model.LastRunTime = oldModel.LastRunTime;
var row = db.Updateable(model).IgnoreColumns(it => new { it.Id }).Where(it=>it.Id==model.Id).ExecuteCommand();
if (row > 0)
{
result = true;
}
}
catch (Exception ex)
{
Logging.Error(ex, "UpdateTask");
}
return result;
}
///
/// 编辑定时任务最后执行时间
///
///
///
public bool UpdateTaskLastRunTime(ScheduledTaskInfo model)
{
bool result = false;
try
{
var row = db.Updateable(model).UpdateColumns(it => new { it.LastRunTime}).Where(it=>it.Id==model.Id).ExecuteCommand();
if (row > 0)
{
result = true;
}
}
catch (Exception ex)
{
Logging.Error(ex, "UpdateTaskLastRunTime");
}
return result;
}
///
/// 编辑定时任务状态
///
///
///
public bool UpdateTaskStaus(ScheduledTaskInfo model)
{
bool result = false;
try
{
var row = db.Updateable(model).UpdateColumns(it => new { it.Status }).Where(it => it.Id == model.Id).ExecuteCommand();
if (row > 0)
{
result = true;
}
}
catch (Exception ex)
{
Logging.Error(ex, "UpdateTaskStaus");
}
return result;
}
///
/// 批量修改任务
///
///
///
public bool BatchUpdateTask(List list)
{
bool result = false;
try
{
var row = db.Updateable(list).ExecuteCommand();
if (row > 0)
{
result = true;
}
}
catch (Exception ex)
{
Logging.Error(ex, "BatchUpdateTask");
}
return result;
}
///
/// 删掉任务
///
///
///
public bool DeleteTask(int id)
{
bool result = false;
try
{
var row = db.Deleteable().Where(it => it.Id == id).ExecuteCommand();
if (row > 0)
{
result = true;
}
}
catch (Exception ex)
{
Logging.Error(ex, "UpdateTask");
}
return result;
}
#endregion
#region 任务执行日志
///
/// 获取任务日志列表
///
///
///
///
///
public List GetTakLogList(BaseParm parm, ref int totalPage)
{
List list = new List();
try
{
list = db.Queryable()
.WhereIF(!string.IsNullOrEmpty(parm.Id.ToString()), it => it.Task_Id == parm.Id)
.WhereIF(!string.IsNullOrEmpty(parm.Param),it=>it.Conent.Contains(parm.Param))
.WhereIF(parm.Status>0,it=>it.ExecutionState==parm.Status)
.OrderBy(it => it.Create_Time, OrderByType.Desc)
.ToPageList(parm.PageIndex, parm.PageSize, ref totalPage);
}
catch (Exception ex)
{
Logging.Error(ex, "GetTakLogList");
}
return list;
}
///
/// 添加任务日志
///
///
/// 执行状态 1:成功 2:失败
///
///
public bool AddTaskLog(int taskId, int state, string content)
{
bool result = false;
try
{
ScheduledTaskLog model = new ScheduledTaskLog();
model.Uuid = Guid.NewGuid().ToString();
model.Task_Id = taskId;
model.ExecutionState = state;
model.Conent = content;
model.Create_Time = DateTime.Now;
int row = db.Insertable(model).ExecuteCommand();
if (row > 0)
{
result = true;
}
}
catch (Exception ex)
{
Logging.Error(ex, "AddTaskLog");
}
return result;
}
#endregion
}
}