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