using SHJX.Service.Control.Extends;
using SHJX.Service.Control.LiquidHandler;
namespace SHJX.Service.Control.Pipeline.Nodes.LiquidNode
{
///
/// 高锰酸钾
/// `
public class Titration2KMnO : INode
{
#region Fields
private static TaskExtend _taskExtend;
private static IDataManager _dataManager;
private static Titration2Value _titrationValue;
private static LiquidAmount _liquidAmount;
#endregion
public Titration2KMnO(TaskExtend taskExtend, IDataManager dataManager)
{
Name = nameof(Titration2KMnO);
_taskExtend = taskExtend;
_dataManager = dataManager;
_titrationValue = dataManager.Query().First();
_liquidAmount = dataManager.Query().Where(it => it.LiquidName.Equals(EquipmentNames.Titration2PotassiumPermanganate)).First();
}
private static bool flag = true; //重新计算空白值
public override INode Invoke()
{
ExecuteCommand.ShowStatusOpenClose(CurrentTask, "2号滴定位滴定(开始)");
LiquidContent.StartNew.Execute(EquipmentNames.Titration2PotassiumPermanganate, CurrentTask.RouteType, (object obj) =>
{
CurrentTask.Amount += Convert.ToDouble(obj);
if (CurrentTask.TaskType.Equals("样品", StringComparison.Ordinal))
{
CurrentTask.Result = CalculationResult.CalculateSample(CurrentTask);
}
if (CurrentTask.TaskType.Equals("空白", StringComparison.Ordinal))
{
CurrentTask.Result = CalculationResult.CalculateBlank(CurrentTask);
}
_dataManager.Update(CurrentTask);
if (CurrentTask.TaskType.BeIn("样品", "空白"))
{
TaskResultArgs resultArgs = new()
{
Name = CurrentTask.Source,
Amount = CurrentTask.Amount.ToString("F2"),
Result = CurrentTask.Result.ToString("F2")
};
if (CurrentTask.TaskType.Equals("样品") && CurrentTask.Amount > 6.3)
{
resultArgs.ResultColor = "#FF0000";
}
Messager.Send("TaskResult", resultArgs);
}
if (CurrentTask.TaskType.Equals("标定"))
{
// 1) 标定:任务提前完成
CurrentTask.Status = TaskState.Finished;
_dataManager.Update(CurrentTask);
List blankTasks = _dataManager.Query().Where(it => it.WaveKey.Equals(CurrentTask.WaveKey) && it.TaskType.Equals(TaskTypeName.BLANK_ZH) && it.Status.In(TaskState.Execute,TaskState.Finished)).ToList();
foreach (var blankTask in blankTasks)
{
// 1)提前完成是为了这里遍历
var refreshResult = CalculationResult.CalculateCalibration(blankTask);
TaskResultArgs resultArgs = new()
{
Name = blankTask.Source,
Amount = blankTask.Amount.ToString("F2"),
Result = refreshResult.ToString("F2")
};
blankTask.Result = refreshResult;
_dataManager.Update(blankTask);
CurrentTask.Result = blankTask.Result;
Messager.Send("TaskResult", resultArgs);
}
}
}, CurrentTask.QuicklyTitration, CurrentTask.TaskType);
ExecuteCommand.ShowStatusOpenClose(CurrentTask, "2号滴定位滴定(结束)");
return this;
}
}
}