| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173 |
- 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<EquipmentTask>().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<DissolveDate> DissolveDates = _dataManager.Query<DissolveDate>().Where(it => it.Start.Equals(true)).ToList();
- if (!DissolveDates.Any())
- {
- return;
- }
- ExecuteTime executeTime = _dataManager.Query<ExecuteTime>().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<string>(CacheState.Early);
- if (string.IsNullOrWhiteSpace(earlyLocation))
- {
- continue;
- }
- if (earlyLocation != DissolveDate.SampleSource)
- {
- continue;
- }
- }
- DissolveDate.Start = false;
- EquipmentTask task = _dataManager.Query<EquipmentTask>().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<string>(CacheState.Early)))
- {
- return;
- }
- if (DataCache.Instance.Get<string>(CacheState.Early).Equals(task.Source))
- {
- DataCache.Instance.Remove(CacheState.Early);
- }
- }
- }
- [Scheduled("TitrationControl", 1000)]
- public void TitrationControl()
- {
- EquipmentTask task = _dataManager.Query<EquipmentTask>().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<EquipmentTask>().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<LiquidRecord>().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<EquipmentTask>().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<EquipmentTask>().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<LiquidRecord>().Where(it => it.Point.Equals(task.Source)).First();
- if (record != null)
- {
- _dataManager.Delete(record);
- }
- #endregion
- }
- }
- }
|