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; } } }