namespace SHJX.Service.Control.Common.Assets { public class DataManagerInstance { private static readonly ILogger logger = LogFactory.BuildLogger(typeof(DataManagerInstance)); private static IDataManager _dataManager; private static readonly object recode_lock = new(); private static IEventAggregator _ea; public static List statusValue = new(); private static string ShowStatusBefore = ""; public DataManagerInstance(IEventAggregator ea, IDataManager dataManager) { _ea = ea; _dataManager = dataManager; } public static PID GetPid() { return _dataManager.Query().First(); } public static MotorSpeed GetSpeed(string name) { return _dataManager.Query().Where(it => it.SystemName.Equals(name)).First(); } public static LiquidVolume GetLiquidVolume(string name) { return _dataManager.Query().Where(it => it.LiquidName.Equals(name)).First(); } public static LiquidAmount GetLiquidAmount(string name) { return _dataManager.Query().Where(it => it.LiquidName.Equals(name)).First(); } public static bool Record(EquipmentTask task, string value) { try { if (task is null ) { return false; } lock (recode_lock) { int rows = _dataManager.Update().SetValues(it => it.Record.Set(value)).Where(it => it.SerialKey.Equals(task.SerialKey) && it.Source.Equals(task.Source)).Execute(); return rows > 0; } } catch { return false; } } public static bool ShowStatus(EquipmentTask task, string value) { try { if (task is null) { return false; } lock (recode_lock) { ShowStatusValueArgs status = new ShowStatusValueArgs(); if (ShowStatusBefore == task.RouteStep.ToString()) { return true; } ShowStatusBefore = task.RouteStep.ToString(); string step = task.RouteStep.ToString() switch { "AddLiquid" => "加液", "AddLiquidGoback" => "加液返回", "Dissolve" => "消解", "DissolveGoback" => "消解结束", "Titration" => "1号滴定", "Titration2" => "2号滴定", "TitrationGoback" => "1号滴定返回", "Titration2Goback" => "2号滴定返回", }; status.CurrentContent = task.Source + ":" + step + "-" + "从(" + task.From + ")到(" + task.To + ")"; status.Name = task.Source.ToString(); _ea.GetEvent().Publish(status); return true; } } catch { return false; } } public static TitrationValue GetTitrationValue(string type) { return _dataManager.Query().Where(it => it.TitrationType.Equals(type)).First(); } public static Titration2Value GetTitration2Value(string type) { return _dataManager.Query().Where(it => it.TitrationType.Equals(type)).First(); } public static CameraValue GetCameraValue() { return _dataManager.Query().First(); } public static Camera2Value GetCamera2Value() { return _dataManager.Query().First(); } public static EquipmentTask GetWaitingTaskBySource(string source) { return _dataManager.Query().Where(it => it.Source.Equals(source) && it.Status.Equals(TaskState.Waiting)).First(); } public static EquipmentTask GetTaskBySourceAndState(string source, params TaskState[] states) { return _dataManager.Query().Where(it => it.Status.In(states) && it.Source.Equals(source)).First(); } public static DissolveDate GetDissolveDateByEnable() { return _dataManager.Query().Where(it => it.Start.Equals(true)).OrderBy(it => it.LastTryTime).First(); } public static EquipmentArea GetAreaByPoint(string point) { return _dataManager.Query().Where(it => it.PointName.Equals(point)).First(); } public static EquipmentArea GetAreaByAreaName(string name) { return _dataManager.Query().Where(it => it.AreaName.Equals(name)).First(); } public static List GetEquipmentAreas(string value1, string value2) { return _dataManager.Query().Where(it => it.PointName.In(value1, value2)).ToList(); } public static List GetPositionHotlists(string value1, string value2) { return _dataManager.Query().Where(it => it.PositionName.In(value1, value2)).ToList(); } public static List GetCaches(string arg) { return _dataManager.Query().Where(it => it.Source.Equals(arg)).ToList(); } public static StateMachine GetStateMachine() { return _dataManager.Query().Where(item => item.Name.Equals(StateMachineName.MOTOR_LOCK)).First(); } public static bool Update(T t) where T : class { return _dataManager.Update(t) > 0; } public static bool Delete(T t) where T : class { return _dataManager.Delete(t) > 0; } public static StateMachine QueryStateMachine(string name) { return _dataManager.Query().Where(it => it.Name.Equals(name)).First(); } public static bool IncreaseLock(string name) { return _dataManager.Update().Invoke(it => it.Status.Set(1))(it => it.Name.Equals(name)) > 0; } public static bool DecreaseLock(string name) { return _dataManager.Update().Invoke(it => it.Status.Set(0))(it => it.Name.Equals(name)) > 0; } public static bool DecreaseLiquidTotal(string name, double value) { LiquidTotal liquid = _dataManager.Query().Where(it => it.LiquidName.Equals(name)).First(); var remain = liquid.Total - value; logger.LogDebug($"{name}液体总量为:{liquid.Total},扣减:{value},剩余{remain}"); return _dataManager.Update().Invoke(it => it.Total.Set(remain))(it => it.LiquidName.Equals(name)) > 0; } public static bool DecreaseLiquidReserve(string name) { double decreaseValue = name switch { "SodiumOxalate" => 10, "SodiumHydroxide" => 0.5, "PotassiumPermanganate" => 25, "Vitriol" => 5, _ => 0, }; LiquidReserve liquid = _dataManager.Query().Where(it => it.LiquidName.Equals(name)).First(); var remain = liquid.Value - decreaseValue; return _dataManager.Update().Invoke(it => it.Value.Set(remain))(it => it.LiquidName.Equals(name)) > 0; } } }