using SHJX.Service.Model.Dao;
namespace SHJX.Service.Control.Extends
{
public static class CreateTask
{
private static IDataManager _dataManager;
public static void Init(IDataManager dataManager)
{
_dataManager = dataManager;
}
///
/// 创建水样任务
///
///
public static EquipmentTask CreateSampleTask(this SampleDetail args, string waveKey)
{
string operateType = args.SampleType switch
{
TaskTypeName.SAMPLE_ZH or TaskTypeName.BLANK_ZH => TaskTypeName.SAMPLE,
_ => throw new ArgumentNullException(args.SampleType)
};
Route route = _dataManager.Query().Where(it => it.TaskType.Equals(operateType))
.OrderBy(it => it.RouteID).First();
if (route is null)
{
throw new ArgumentException("未找到对应路由");
}
RouteStep step = _dataManager.Query().Where(it => it.RouteID.Equals(route.RouteID)).OrderBy(it => it.Order).First();
if (step is null)
{
throw new ArgumentException("未找到对应路由步骤");
}
EquipmentTask task = new()
{
WaveKey = waveKey,
Source = args.NodeName,
Status = TaskState.New,
From = args.NodeName,
To = args.NodeName,
RouteID = route.RouteID,
RouteStep = step.Step,
RouteType = operateType,
AcidBaseProp = args.AcidBaseProp,
CalibrationEnable = args.IsCalibration,
TaskDetailName = args.DetailInfo,
SampleVolume = args.SampleVolume,
SampleMultiple = args.SampleMultiple,
TaskType = args.SampleType,
QuicklyTitration = args.QuicklyTitration
};
return task;
}
///
/// 创建Wash任务
///
///
public static EquipmentTask CreateWashTask(this string type) => new()
{
TaskType = type,
Status = TaskState.New,
From = string.Empty,
To = string.Empty,
RouteType = TaskTypeName.WASH,
RouteStep = TaskTypeName.WASH
};
///
/// 创建标定任务
///
///
///
public static EquipmentTask CreateCalibrationTask(this EquipmentTask task) => new()
{
Source = task.Source,
WaveKey = task.WaveKey,
From = task.Source,
To = task.Source,
Target = nameof(task.From),
Status = TaskState.Execute,
RouteStep = PipeName.TITRATION,
QuicklyTitration = true,
Record = string.Empty,
TaskType = TaskTypeName.CALIBRATION_ZH,
AcidBaseProp = task.AcidBaseProp,
RouteType = TaskTypeName.SAMPLE,
TaskDetailName = TaskTypeName.CALIBRATION_ZH
};
///
/// 创建标定任务
///
///
///
public static EquipmentTask CreateCalibration2Task(this EquipmentTask task) => new()
{
Source = task.Source,
WaveKey = task.WaveKey,
From = task.Source,
To = task.Source,
Target = nameof(task.From),
Status = TaskState.Execute,
RouteStep = PipeName.TITRATION2,
QuicklyTitration = true,
Record = string.Empty,
TaskType = TaskTypeName.CALIBRATION_ZH,
AcidBaseProp = task.AcidBaseProp,
RouteType = TaskTypeName.SAMPLE,
TaskDetailName = TaskTypeName.CALIBRATION_ZH
};
///
/// 获取WaveKey
///
///
public static string GetWavekey()
{
List equipmentTasks = _dataManager.Query().Where(it => it.Status.In(TaskState.New, TaskState.Waiting, TaskState.Doing, TaskState.Hit, TaskState.AddLiquid, TaskState.Dissolve, TaskState.Titration, TaskState.Titration2, TaskState.Execute)).ToList();
if (equipmentTasks.Any())
{
return equipmentTasks.GroupBy(item => item.WaveKey).FirstOrDefault()?.Key;
}
Batch batch = _dataManager.Query().First();
if (batch is null)
{
batch = new Batch
{
CurrentValue = 1,
Createtime = DateTime.Now
};
_dataManager.Add(batch);
}
else
{
if (batch.Createtime.ToString("yyyyMMdd").Equals(DateTime.Now.ToString("yyyyMMdd")))
{
batch.CurrentValue++;
}
else
{
batch.Createtime = DateTime.Now;
batch.CurrentValue = 1;
}
_dataManager.Update(batch);
}
Wavekey wavakey = new()
{
WaveKey = $"{DateTime.Now:yyyyMMdd}{batch.CurrentValue.ToString().PadLeft(3, '0')}"
};
_dataManager.Add(wavakey);
return wavakey.WaveKey;
}
}
}