using System;
using System.Linq;
using SHJX.Service.Model.Dao;
using SHJX.Service.Control.Modules;
using SHJX.Service.Control.Interface;
using SHJX.Service.Common.ReadXML;
namespace SHJX.Service.Control.Route.RouteController
{
///
/// 加液
///
/// 重铬酸钾
public class SampleAL2Operate : FlowControlOperateImp
{
private string _opName;
private double _dropAmount;
private DropLiquid _liquid;
private EquipmentTask _task;
public virtual bool Operate(ReadConfigUtil config, DataEventArgs data)
{
_task = data.Task;
_liquid = data.DataManager.QueryLiquid("PotassiumDichromate");
if (!_liquid.Enable) return true;
var res = _task.RouteType switch
{
"Wash" => WashLiquid(),
_ => OtherAddLiquid(),
};
return res;
}
///
/// 清洗 && 润洗
///
///
private bool WashLiquid()
{
string[] types = new string[] { "PotassiumDichromate_Low", "PotassiumDichromate_High" };
bool res = false;
foreach (var item in types)
{
DataCentre.GetPumpContent.Factory(item).GoBackOriginalPosition("Out");
var value = _task.TaskType switch
{
"润洗" => _liquid.WashVolume,
"清洗" => _liquid.ClearVolume,
_ => throw new ArgumentNullException(_task.TaskType),
};
var DropOnceAmount = DataCentre.GetConfig.DropOnceAmounts.FirstOrDefault(item => item.Name.Equals("PotassiumDichromate"));
double dropAmount = item switch
{
"PotassiumDichromate_Low" => DropOnceAmount.LowValue,
"PotassiumDichromate_High" => DropOnceAmount.HighValue,
_ => throw new ArgumentNullException(_task.TaskType),
};
res = DataCentre.GetPumpContent.Factory(item).LiquidOperation("In", Convert.ToInt64(Math.Round(value / dropAmount * 20000 * -1)));
res = res && DataCentre.GetPumpContent.Factory(item).LiquidOperation("Out", Convert.ToInt64(Math.Round(value / dropAmount * 20000)));
LiquidTotal liquid = DataCentre._dataManager.Query().Where(it => it.LiquidName.Equals(item)).First();
liquid.Total -= 5; //重铬酸钾减5毫升
res = res && DataCentre._dataManager.Update(liquid) > 0;
}
return res;
}
///
/// 其他加液
///
///
private bool OtherAddLiquid()
{
GetOpName();
DataCentre.GetPumpContent.Factory(_opName).GoBackOriginalPosition("In");
var arriveEndpoint = DataCentre.GetPumpContent.Factory(_opName).ArriveEndPoint();
if (arriveEndpoint) DataCentre.GetPumpContent.Factory(_opName).LiquidOperation("In", Convert.ToInt64(Math.Round(_liquid.SampleVolume / _dropAmount * 20000 * -1)));
var res = DataCentre.GetPumpContent.Factory(_opName).LiquidOperation("Out", Convert.ToInt64(Math.Round((_liquid.SampleVolume / _dropAmount) * 20000)));
LiquidTotal liquid = DataCentre._dataManager.Query().Where(it => it.LiquidName.Equals(_opName)).First();
liquid.Total -= 5; //重铬酸钾减5毫升
res = res && DataCentre._dataManager.Update(liquid) > 0;
return res;
}
private void GetOpName()
{
(_opName, _dropAmount) = _task.SampleConcentration switch
{
"Low" => ("PotassiumDichromate_Low", DataCentre.GetConfig.DropOnceAmounts.FirstOrDefault(item => item.Name.Equals("PotassiumDichromate")).LowValue),
"High" => ("PotassiumDichromate_High", DataCentre.GetConfig.DropOnceAmounts.FirstOrDefault(item => item.Name.Equals("PotassiumDichromate")).HighValue),
_ => throw new ArgumentNullException(_task.SampleConcentration),
};
}
}
}