using System; using System.Linq; using System.Collections.Generic; using SHJX.Service.Model.XmlModules; namespace SHJX.Service.Common.ReadXML { public class ReadConfigUtil : AbstractConfiguration { private static ReadConfigUtil config; private static readonly object obj_lock = new(); protected override string FileName => string.Concat(AppDomain.CurrentDomain.SetupInformation.ApplicationBase, "config/hypermanganate.config.xml"); private ReadConfigUtil() { } public static ReadConfigUtil Instance { get { if (config is null) { lock (obj_lock) { ReadConfigUtil opConfig = new(); opConfig.Load(); config = opConfig.ConvertTo(); } } return config; } } #region Read XML #region Property public bool LoginRememberMe => Convert.ToBoolean(ReadSingleValue("/Equipment/UserLogin/@RememberMe")); public int Baudrate => Convert.ToInt32(ReadSingleValue("/Equipment/modbus-config/modbus-baudrate/@value")); public string PortName => ReadSingleValue("/Equipment/SerialPortConfig/SerialPort/@PortName"); public bool AutoGetPort => Convert.ToBoolean(ReadSingleValue("/Equipment/SerialPortConfig/SerialPort/@AutoGetPortName")); public bool TaskRunning => Convert.ToBoolean(ReadSingleValue("/Equipment/SystemSingleSetting/TaskRunning/@value")); public bool AutomaticInLiquid => Convert.ToBoolean(ReadSingleValue("/Equipment/SystemSingleSetting/AutomaticInLiquid/@value")); public bool ExportTypeByExcel => Convert.ToBoolean(ReadSingleValue("/Equipment/SystemSingleSetting/ExportTypeByExcel/@value")); public bool ExportTypeByWord => Convert.ToBoolean(ReadSingleValue("/Equipment/SystemSingleSetting/ExportTypeByWord/@value")); public double DissolveTemperatureValue => Convert.ToDouble(ReadSingleValue("/Equipment/SystemSingleSetting/DissolveTemperatureSetting/@value")); public double TitrationTemperatureValue => Convert.ToDouble(ReadSingleValue("/Equipment/SystemSingleSetting/TitrationTemperatureSetting/@value")); public double TaskFinishTemperatureSetting => Convert.ToDouble(ReadSingleValue("/Equipment/SystemSingleSetting/TaskFinishTemperatureSetting/@value")); public bool TongsFeedBack => Convert.ToBoolean(ReadSingleValue("/Equipment/SystemSingleSetting/TongsFeedBack/@value")); public string LogiCamera1Name => ReadSingleValue("/Equipment/SystemSingleSetting/LogiCamera1Name /@value"); public string LogiCamera2Name => ReadSingleValue("/Equipment/SystemSingleSetting/LogiCamera2Name /@value"); public string LogiCamera1 => ReadSingleValue("/Equipment/SystemSingleSetting/LogiCamera1/@value"); public string LogiCamera2 => ReadSingleValue("/Equipment/SystemSingleSetting/LogiCamera2/@value"); public Dictionary PortRegisters => GetPortRegisters("/Equipment/SerialPortConfig/PortRegisterPosition/PortRegister"); public Dictionary PortNodeIDs => GetPortNodeIds("/Equipment/SerialPortConfig/PortNodeID/NodeId"); public Dictionary GetSettingTabItem => GetSettingItems("/Equipment/SettingTabItem/Item"); public Dictionary GetManualTabItem => GetSettingItems("/Equipment/ManualTabItem/Item"); public List OtherPositionArgs => GetOtherPosition("/Equipment/OtherPosition/Position"); public string TemplateFilePath => ReadSingleValue("/Equipment/SystemSingleSetting/TemplateFilePath/@value"); public string ResultFilePath => ReadSingleValue("/Equipment/SystemSingleSetting/ResultFilePath/@value"); public List SamplePositions => GetSamplePosition("/Equipment/SamplePositions/Position"); #endregion #region Method private List GetSamplePosition(string xmlpath) { List positions = new(); IEnumerable> definitions = ReadSetValue(xmlpath); foreach (Dictionary item in definitions) { SamplePosition position = new() { Name = item["Name"], Count = Convert.ToInt32(item["Count"]), Value = item["Value"] }; positions.Add(position); } return positions; } private List GetOtherPosition(string xmlpath) { List args = new(); var definitions = ReadSetValue(xmlpath); foreach (var item in definitions) { var position = new OtherPositionArgs() { Name = item["Name"], TagText = item["TagText"] }; args.Add(position); } return args; } private Dictionary GetSettingItems(string xmlpath) { var definitions = ReadSetValue(xmlpath); return definitions.ToDictionary(item => item["value"], item => item["Map"]); } private Dictionary GetPortRegisters(string xmlpath) { var definitions = ReadSetValue(xmlpath); return definitions.ToDictionary(item => item["EquipmentName"], item => Convert.ToInt32(item["Position"])); } private Dictionary GetPortNodeIds(string xmlpath) { var definitions = ReadSetValue(xmlpath); return definitions.ToDictionary(item => item["EquipmentName"], item => Convert.ToByte(item["NodeID"])); } private List GetAmount(string xmlpath) { List amounts = new(); var definitions = ReadSetValue(xmlpath); foreach (var item in definitions) { amounts.Add(new DropAmount() { Name = item["Name"], Description = item["Description"], LowValue = Convert.ToDouble(item["LowValue"]), HighValue = Convert.ToDouble(item["HighValue"]) }); } return amounts; } private List GetMotorSpeed(string xmlpath) { List speeds = new(); var definitions = ReadSetValue(xmlpath); foreach (var item in definitions) { speeds.Add(new SpeedConfig { NodeName = item["NodeName"], NodeId = item["NodeID"], Speed = Convert.ToInt32(item["Speed"]), AcSpeed = Convert.ToInt32(item["AC"]), DeSpeed = Convert.ToInt32(item["DE"]), Description = item["Description"] }); } return speeds; } private List GetNameAndType(string xmlpath) { var proxyArgs = new List(); var definitions = ReadSetValue(xmlpath); foreach (var item in definitions) { proxyArgs.Add(new FlowControlProxyArg() { Name = item["name"], Flow = item["type"], Proxy = item["proxy"] }); } return proxyArgs; } #endregion #endregion #region Write XML public void UpdateTaskRunning(object value) => WriteSingleValue("/Equipment/SystemSingleSetting/TaskRunning/@value", value); public void UpdateTemplateFilePath(object value) => WriteSingleValue("/Equipment/SystemSingleSetting/TemplateFilePath/@value", value); public void UpdateResultWordFilePath(object value) => WriteSingleValue("/Equipment/SystemSingleSetting/ResultFilePath/@value", value); public void UpdateAutomaticInLiquid(object value) => WriteSingleValue("/Equipment/SystemSingleSetting/AutomaticInLiquid/@value", value); public void UpdateTaskFinishTemprature(object value) => WriteSingleValue("/Equipment/SystemSingleSetting/TaskFinishTemperatureSetting/@value", value); public void UpdateExportByExcel(object value)=> WriteSingleValue("/Equipment/SystemSingleSetting/ExportTypeByExcel/@value", value); public void UpdateExportByWord(object value) => WriteSingleValue("/Equipment/SystemSingleSetting/ExportTypeByWord/@value", value); public void UpdateDissolveTemperature(object value) => WriteSingleValue("/Equipment/SystemSingleSetting/DissolveTemperatureSetting/@value", value); public void UpdateTitrationTemperature(object value) => WriteSingleValue("/Equipment/SystemSingleSetting/TitrationTemperatureSetting/@value", value); public void UpdateFeedbackValue(object value) => WriteSingleValue("/Equipment/SystemSingleSetting/TongsFeedBack/@value", value); #endregion } }