using CnasSynchrousModel; using System; using System.Collections.Generic; using System.Data; using System.IO; using System.Linq; using System.Runtime.Serialization; using System.Runtime.Serialization.Formatters.Binary; using System.Text; namespace CnasSynchronusClient { /// /// 全局通用方法类 /// public class GlobalCommonOperation { public static string strUserName = ""; public static string strLoginName = ""; public static string strStartWebApi = ""; public static string strStartGeneralVersion = ""; public static string strWebApiUrl = ""; public static string strTargetDbType = "MYSQL"; /// /// 定义的一些静态全局参数,后面将改成配置参数存储 /// #region 写死的关键字段,已放弃 public static Dictionary> dictPrimaryKey = new Dictionary>() { { "水分仪" ,new List(){ "SerialNumber" } }, { "测硫仪" ,new List(){"id" } }, { "工业分析仪" ,new List(){ "SerialNumber" } }, { "灰熔点" ,new List(){ "SampleNo" } }, { "红外测硫仪" ,new List(){ "Number" } } }; public static InstrumentType GetInstruTypeBySelectedItem(string strTitle) { InstrumentType type = InstrumentType.None; switch (strTitle) { case "水分仪": type = InstrumentType.MoistureMeter; break; case "测硫仪": type = InstrumentType.SulphurMeter; break; case "灰熔点": type = InstrumentType.AshMeltingPoint; break; case "红外测硫仪": type = InstrumentType.InfraredSulfurMeter; break; case "工业分析仪": type = InstrumentType.IndustrialAnalyzer; break; case "元素分析仪": type = InstrumentType.ElementalAnalyzer; break; case "量热仪": type = InstrumentType.CalorimetricApparatus; break; default: type = InstrumentType.None; break; } return type; } public static string GetTitleByInstruType(InstrumentType type) { string strReturn = ""; switch (type) { case InstrumentType.SulphurMeter: strReturn = "测硫仪"; break; case InstrumentType.IndustrialAnalyzer: strReturn = "工业分析仪"; break; case InstrumentType.AshMeltingPoint: strReturn = "灰熔点"; break; case InstrumentType.MoistureMeter: strReturn = "水分仪"; break; case InstrumentType.InfraredSulfurMeter: strReturn = "红外测硫仪"; break; case InstrumentType.CalorimetricApparatus: strReturn = "量热仪"; break; case InstrumentType.None: default: strReturn = ""; break; } return strReturn; } /// /// 检查存储映射数据是否存在主键值 /// /// public static string CheckInstuDataHaveKey(List itemInfos) { string strErrorMsg = ""; foreach (var item in itemInfos) { switch (item.InstruType) { case InstrumentType.SulphurMeter: if(!CheckContainPrimaryKey(item.LstSyncPramas, dictPrimaryKey["测硫仪"])) strErrorMsg = $"仪器{item.Code}映射列必须包含唯一标识列{ListRowToColumn(dictPrimaryKey["测硫仪"])},无法保存!"; break; case InstrumentType.IndustrialAnalyzer: if (!CheckContainPrimaryKey(item.LstSyncPramas, dictPrimaryKey["工业分析仪"])) strErrorMsg = $"仪器{item.Code}映射列必须包含唯一标识列{ListRowToColumn(dictPrimaryKey["工业分析仪"])},无法保存!"; break; case InstrumentType.AshMeltingPoint: if (!CheckContainPrimaryKey(item.LstSyncPramas, dictPrimaryKey["灰熔点"])) strErrorMsg = $"仪器{item.Code}映射列必须包含唯一标识列{ListRowToColumn(dictPrimaryKey["灰熔点"])},无法保存!"; break; case InstrumentType.MoistureMeter: if (!CheckContainPrimaryKey(item.LstSyncPramas, dictPrimaryKey["水分仪"])) strErrorMsg = $"仪器{item.Code}映射列必须包含唯一标识列{ListRowToColumn(dictPrimaryKey["水分仪"])},无法保存!"; break; case InstrumentType.InfraredSulfurMeter: if (!CheckContainPrimaryKey(item.LstSyncPramas, dictPrimaryKey["红外测硫仪"])) strErrorMsg = $"仪器{item.Code}映射列必须包含唯一标识列{ListRowToColumn(dictPrimaryKey["红外测硫仪"])},无法保存!"; break; case InstrumentType.CalorimetricApparatus: if (!CheckContainPrimaryKey(item.LstSyncPramas, dictPrimaryKey["量热仪"])) strErrorMsg = $"仪器{item.Code}映射列必须包含唯一标识列{ListRowToColumn(dictPrimaryKey["红外测硫仪"])},无法保存!"; break; case InstrumentType.None: default: strErrorMsg = $"仪器{item.Code}未指定仪器类型,无法保存,请先制定仪器类型!"; break; } } return strErrorMsg; } private static bool CheckContainPrimaryKey(List syncParamasInfos, List primaryKeys) { bool bContains = true; foreach (var key in primaryKeys) { if (syncParamasInfos.Where(s => s.SourceField == key).Count() <= 0) { bContains = false; break; } } return bContains; } private static string ListRowToColumn(List lst) { string strReturnString = ""; foreach (var item in lst) { strReturnString += item + ","; } if (strReturnString != "") strReturnString= strReturnString.Substring(0, strReturnString.Length - 1); return strReturnString; } #endregion /// /// 解析IFThen类型字符串 /// public static List AnanlysisIFThenString(string strString) { List lstparams = new List(); string[] strStringConditions = strString.Split(new string[] {";" }, StringSplitOptions.RemoveEmptyEntries); if (strStringConditions.Length > 0) { foreach (string strConditionString in strStringConditions) { string[] strStrings = strConditionString.Split(new string[] { "IF", "THEN", "{", "}"}, StringSplitOptions.RemoveEmptyEntries); if (strStrings.Length == 4) { IFThenConditionParams conditionParam = new IFThenConditionParams { ConditionColumnName = strStrings[0], ConditionAlgorithm=strStrings[1], ConditionColumnValue=strStrings[2], ColumnValue=strStrings[3] }; lstparams.Add(conditionParam); } } } return lstparams; } /// /// datarow转换成datatable /// /// /// public static DataTable ConvertDataRowToTable(DataRow dr) { DataTable dt = dr.Table.Clone(); DataRow drNew = dt.NewRow(); drNew.ItemArray = dr.ItemArray; dt.Rows.Add(drNew); return dt; } /// /// 对象的复制方法 /// /// /// /// public static T Clone(T RealObject) { using (Stream objectStream = new MemoryStream()) { //利用 System.Runtime.Serialization序列化与反序列化完成引用对象的复制 IFormatter formatter = new BinaryFormatter(); formatter.Serialize(objectStream, RealObject); objectStream.Seek(0, SeekOrigin.Begin); return (T)formatter.Deserialize(objectStream); } } } }