using SHJX.Service.Control.Extends; using SHJX.Service.Control.Pipeline.Contents; namespace SHJX.Service.Control.Schedules { [EnableScheduling] public class ControlSchedule : IScheduler { private static readonly ILogger logger = LogFactory.BuildLogger(typeof(ControlSchedule)); private static TaskExtend _taskExtend; private static IDataManager _dataManager; public ControlSchedule(IDataManager dataManager, TaskExtend taskExtend) { _taskExtend = taskExtend; _dataManager = dataManager; } [Scheduled("AddLiquidControl", 1000)] public void AddLiquidControl() { EquipmentTask task = _dataManager.Query().Where(it => it.Status.Equals(TaskState.AddLiquid)).First(); if (task is null) { return; } task.Status = TaskState.Execute; _dataManager.Update(task); string type = task.AcidBaseProp switch { AcidBase.Acid => PipeName.ACID_ADD_LIQUID, AcidBase.Alkali => PipeName.ALKALI_ADD_LIQUID, _ => throw new ArgumentNullException(nameof(task.AcidBaseProp)), }; PipeContent.Factory(type).Invoke(task); _taskExtend.UpdateStep(task); } [Scheduled("DissolveControl", 1000)] public void DissolveControl() { List DissolveDates = _dataManager.Query().Where(it => it.Start.Equals(true)).ToList(); if (!DissolveDates.Any()) { return; } ExecuteTime executeTime = _dataManager.Query().Where(it => it.TypeName.Equals(ExecuteTimeName.DISSOLVE_TIME)).First(); foreach (DissolveDate DissolveDate in DissolveDates) { double minutes = DissolveDate.LastTryTime.GetMinDifferenceValue(); if (minutes < executeTime.Value) { string earlyLocation = DataCache.Instance.Get(CacheState.Early); if (string.IsNullOrWhiteSpace(earlyLocation)) { continue; } if (earlyLocation != DissolveDate.SampleSource) { continue; } } DissolveDate.Start = false; EquipmentTask task = _dataManager.Query().Where(it => it.RouteStep.Equals(PipeName.DISSOLVE) && it.Status.Equals(TaskState.Dissolve) && it.Source.Equals(DissolveDate.SampleSource)).First(); if (task is null) { logger.LogDebug("未找到对应的消解任务!"); continue; } DissolveDate.SampleSource = string.Empty; _dataManager.Update(DissolveDate); logger.LogDebug($"{task.Source}消解结束,进入下一段任务!"); _taskExtend.UpdateStep(task); if (string.IsNullOrWhiteSpace(DataCache.Instance.Get(CacheState.Early))) { return; } if (DataCache.Instance.Get(CacheState.Early).Equals(task.Source)) { DataCache.Instance.Remove(CacheState.Early); } } } [Scheduled("TitrationControl", 1000)] public void TitrationControl() { EquipmentTask task = _dataManager.Query().Where(it => it.Status.Equals(TaskState.Titration)).First(); if (task is null) { return; } task.Status = TaskState.Execute; _dataManager.Update(task); string type = task.AcidBaseProp switch { AcidBase.Acid => PipeName.ACID_TITRATION, AcidBase.Alkali => PipeName.ALKALI_TITRATION, _ => throw new ArgumentNullException(nameof(task.AcidBaseProp)), }; PipeContent.Factory(type).Invoke(task); #region 标定任务 if (task.CalibrationEnable) { EquipmentTask newCreateTask = task.CreateCalibrationTask(); _dataManager.Add(newCreateTask); EquipmentTask calibrationTask = _dataManager.Query().Where(it => it.WaveKey.Equals(task.WaveKey) && it.Source.Equals(task.Source) && it.TaskType.Equals(TaskTypeName.CALIBRATION_ZH)).First(); PipeContent.Factory(PipeName.ACID_TITRATION).Invoke(calibrationTask); task.Result = calibrationTask.Result; //当前标定出来结果后刷新当前空白的值 calibrationTask.Result = 0; calibrationTask.Status = TaskState.Finished; _dataManager.Update(calibrationTask); } #endregion _taskExtend.UpdateStep(task); #region 删掉记录任务 LiquidRecord record = _dataManager.Query().Where(it => it.Point.Equals(task.Source)).First(); if (record != null) { _dataManager.Delete(record); } #endregion } [Scheduled("Titration2Control", 1000)] public void Titration2Control() { EquipmentTask task = _dataManager.Query().Where(it => it.Status.Equals(TaskState.Titration2)).First(); if (task is null) { return; } task.Status = TaskState.Execute; _dataManager.Update(task); string type = task.AcidBaseProp switch { AcidBase.Acid => PipeName.ACID_TITRATION2, AcidBase.Alkali => PipeName.ALKALI_TITRATION2, _ => throw new ArgumentNullException(nameof(task.AcidBaseProp)), }; PipeContent.Factory(type).Invoke(task); #region 标定任务 if (task.CalibrationEnable) { EquipmentTask newCreateTask = task.CreateCalibration2Task(); _dataManager.Add(newCreateTask); EquipmentTask calibrationTask = _dataManager.Query().Where(it => it.WaveKey.Equals(task.WaveKey) && it.Source.Equals(task.Source) && it.TaskType.Equals(TaskTypeName.CALIBRATION_ZH)).First(); PipeContent.Factory(PipeName.ACID_TITRATION2).Invoke(calibrationTask); task.Result = calibrationTask.Result; //当前标定出来结果后刷新当前空白的值 calibrationTask.Result = 0; calibrationTask.Status = TaskState.Finished; _dataManager.Update(calibrationTask); } #endregion _taskExtend.UpdateStep(task); #region 删掉记录任务 LiquidRecord record = _dataManager.Query().Where(it => it.Point.Equals(task.Source)).First(); if (record != null) { _dataManager.Delete(record); } #endregion } } }