CNAS取数仪器端升级
25개 이상의 토픽을 선택하실 수 없습니다. Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

222 lines
9.1KB

  1. using CnasSynchrousModel;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Data;
  5. using System.IO;
  6. using System.Linq;
  7. using System.Runtime.Serialization;
  8. using System.Runtime.Serialization.Formatters.Binary;
  9. using System.Text;
  10. namespace CnasSynchronusClient
  11. {
  12. /// <summary>
  13. /// 全局通用方法类
  14. /// </summary>
  15. public class GlobalCommonOperation
  16. {
  17. public static string strUserName = "";
  18. public static string strLoginName = "";
  19. /// <summary>
  20. /// 定义的一些静态全局参数,后面将改成配置参数存储
  21. /// </summary>
  22. #region 写死的关键字段,已放弃
  23. public static Dictionary<string, List<string>> dictPrimaryKey = new Dictionary<string, List<string>>()
  24. {
  25. { "水分仪" ,new List<string>(){ "SerialNumber" } },
  26. { "测硫仪" ,new List<string>(){"id" } },
  27. { "工业分析仪" ,new List<string>(){ "SerialNumber" } },
  28. { "灰熔点" ,new List<string>(){ "SampleNo" } },
  29. { "红外测硫仪" ,new List<string>(){ "Number" } }
  30. };
  31. public static InstrumentType GetInstruTypeBySelectedItem(string strTitle)
  32. {
  33. InstrumentType type = InstrumentType.None;
  34. switch (strTitle)
  35. {
  36. case "水分仪":
  37. type = InstrumentType.MoistureMeter;
  38. break;
  39. case "测硫仪":
  40. type = InstrumentType.SulphurMeter;
  41. break;
  42. case "灰熔点":
  43. type = InstrumentType.AshMeltingPoint;
  44. break;
  45. case "红外测硫仪":
  46. type = InstrumentType.InfraredSulfurMeter;
  47. break;
  48. case "工业分析仪":
  49. type = InstrumentType.IndustrialAnalyzer;
  50. break;
  51. case "元素分析仪":
  52. type = InstrumentType.ElementalAnalyzer;
  53. break;
  54. case "量热仪":
  55. type = InstrumentType.CalorimetricApparatus;
  56. break;
  57. default:
  58. type = InstrumentType.None;
  59. break;
  60. }
  61. return type;
  62. }
  63. public static string GetTitleByInstruType(InstrumentType type)
  64. {
  65. string strReturn = "";
  66. switch (type)
  67. {
  68. case InstrumentType.SulphurMeter:
  69. strReturn = "测硫仪";
  70. break;
  71. case InstrumentType.IndustrialAnalyzer:
  72. strReturn = "工业分析仪";
  73. break;
  74. case InstrumentType.AshMeltingPoint:
  75. strReturn = "灰熔点";
  76. break;
  77. case InstrumentType.MoistureMeter:
  78. strReturn = "水分仪";
  79. break;
  80. case InstrumentType.InfraredSulfurMeter:
  81. strReturn = "红外测硫仪";
  82. break;
  83. case InstrumentType.CalorimetricApparatus:
  84. strReturn = "量热仪";
  85. break;
  86. case InstrumentType.None:
  87. default:
  88. strReturn = "";
  89. break;
  90. }
  91. return strReturn;
  92. }
  93. /// <summary>
  94. /// 检查存储映射数据是否存在主键值
  95. /// </summary>
  96. /// <returns></returns>
  97. public static string CheckInstuDataHaveKey(List<SyncInstrumentItemInfo> itemInfos)
  98. {
  99. string strErrorMsg = "";
  100. foreach (var item in itemInfos)
  101. {
  102. switch (item.InstruType)
  103. {
  104. case InstrumentType.SulphurMeter:
  105. if(!CheckContainPrimaryKey(item.LstSyncPramas, dictPrimaryKey["测硫仪"]))
  106. strErrorMsg = $"仪器{item.Code}映射列必须包含唯一标识列{ListRowToColumn(dictPrimaryKey["测硫仪"])},无法保存!";
  107. break;
  108. case InstrumentType.IndustrialAnalyzer:
  109. if (!CheckContainPrimaryKey(item.LstSyncPramas, dictPrimaryKey["工业分析仪"]))
  110. strErrorMsg = $"仪器{item.Code}映射列必须包含唯一标识列{ListRowToColumn(dictPrimaryKey["工业分析仪"])},无法保存!";
  111. break;
  112. case InstrumentType.AshMeltingPoint:
  113. if (!CheckContainPrimaryKey(item.LstSyncPramas, dictPrimaryKey["灰熔点"]))
  114. strErrorMsg = $"仪器{item.Code}映射列必须包含唯一标识列{ListRowToColumn(dictPrimaryKey["灰熔点"])},无法保存!";
  115. break;
  116. case InstrumentType.MoistureMeter:
  117. if (!CheckContainPrimaryKey(item.LstSyncPramas, dictPrimaryKey["水分仪"]))
  118. strErrorMsg = $"仪器{item.Code}映射列必须包含唯一标识列{ListRowToColumn(dictPrimaryKey["水分仪"])},无法保存!";
  119. break;
  120. case InstrumentType.InfraredSulfurMeter:
  121. if (!CheckContainPrimaryKey(item.LstSyncPramas, dictPrimaryKey["红外测硫仪"]))
  122. strErrorMsg = $"仪器{item.Code}映射列必须包含唯一标识列{ListRowToColumn(dictPrimaryKey["红外测硫仪"])},无法保存!";
  123. break;
  124. case InstrumentType.CalorimetricApparatus:
  125. if (!CheckContainPrimaryKey(item.LstSyncPramas, dictPrimaryKey["量热仪"]))
  126. strErrorMsg = $"仪器{item.Code}映射列必须包含唯一标识列{ListRowToColumn(dictPrimaryKey["红外测硫仪"])},无法保存!";
  127. break;
  128. case InstrumentType.None:
  129. default:
  130. strErrorMsg = $"仪器{item.Code}未指定仪器类型,无法保存,请先制定仪器类型!";
  131. break;
  132. }
  133. }
  134. return strErrorMsg;
  135. }
  136. private static bool CheckContainPrimaryKey(List<SyncParamasInfo> syncParamasInfos, List<string> primaryKeys)
  137. {
  138. bool bContains = true;
  139. foreach (var key in primaryKeys)
  140. {
  141. if (syncParamasInfos.Where(s => s.SourceField == key).Count() <= 0)
  142. {
  143. bContains = false;
  144. break;
  145. }
  146. }
  147. return bContains;
  148. }
  149. private static string ListRowToColumn(List<string> lst)
  150. {
  151. string strReturnString = "";
  152. foreach (var item in lst)
  153. {
  154. strReturnString += item + ",";
  155. }
  156. if (strReturnString != "")
  157. strReturnString= strReturnString.Substring(0, strReturnString.Length - 1);
  158. return strReturnString;
  159. }
  160. #endregion
  161. /// <summary>
  162. /// 解析IFThen类型字符串
  163. /// </summary>
  164. public static List<IFThenConditionParams> AnanlysisIFThenString(string strString)
  165. {
  166. List<IFThenConditionParams> lstparams = new List<IFThenConditionParams>();
  167. string[] strStringConditions = strString.Split(new string[] {";" }, StringSplitOptions.RemoveEmptyEntries);
  168. if (strStringConditions.Length > 0)
  169. {
  170. foreach (string strConditionString in strStringConditions)
  171. {
  172. string[] strStrings = strConditionString.Split(new string[] { "IF", "THEN", "{", "}"}, StringSplitOptions.RemoveEmptyEntries);
  173. if (strStrings.Length == 4)
  174. {
  175. IFThenConditionParams conditionParam = new IFThenConditionParams
  176. {
  177. ConditionColumnName = strStrings[0],
  178. ConditionAlgorithm=strStrings[1],
  179. ConditionColumnValue=strStrings[2],
  180. ColumnValue=strStrings[3]
  181. };
  182. lstparams.Add(conditionParam);
  183. }
  184. }
  185. }
  186. return lstparams;
  187. }
  188. public static DataTable ConvertDataRowToTable(DataRow dr)
  189. {
  190. DataTable dt = dr.Table.Clone();
  191. DataRow drNew = dt.NewRow();
  192. drNew.ItemArray = dr.ItemArray;
  193. dt.Rows.Add(drNew);
  194. return dt;
  195. }
  196. public static T Clone<T>(T RealObject)
  197. {
  198. using (Stream objectStream = new MemoryStream())
  199. {
  200. //利用 System.Runtime.Serialization序列化与反序列化完成引用对象的复制
  201. IFormatter formatter = new BinaryFormatter();
  202. formatter.Serialize(objectStream, RealObject);
  203. objectStream.Seek(0, SeekOrigin.Begin);
  204. return (T)formatter.Deserialize(objectStream);
  205. }
  206. }
  207. }
  208. }