CNAS取数仪器端升级
Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.

695 řádky
32KB

  1. using CnasSynchronousCommon;
  2. using CnasSynchrousModel;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Data;
  6. using System.Linq;
  7. using System.Management;
  8. using System.Net.NetworkInformation;
  9. using System.Text;
  10. using System.Text.RegularExpressions;
  11. namespace CnasSynchronusClient
  12. {
  13. public class CnasInsertOperation
  14. {
  15. /// <summary>
  16. /// 同步配置信息
  17. /// </summary>
  18. public SyncInstrumentItemInfo syncInstrumentItem { get; set; }
  19. /// <summary>
  20. /// 创建准备插入到CNAS的数据
  21. /// </summary>
  22. /// <param name="dtReadySource"></param>
  23. /// <param name="dtTarget"></param>
  24. /// <returns></returns>
  25. public string CreateInputData(DataTable dtReadySource, ref DataTable dtTarget)
  26. {
  27. string strErrorMsg = "";
  28. string strDateColumn = "";
  29. try
  30. {
  31. //获取日期字段
  32. strDateColumn = GetDateFieldOperation(ref strErrorMsg);
  33. if (strErrorMsg != "") return strErrorMsg;
  34. //新数据行的创建和插入数据
  35. foreach (DataRow drSource in dtReadySource.Rows)
  36. {
  37. DataRow drNewTarget = dtTarget.NewRow();
  38. //根据过滤器执行来源数据过滤
  39. AppLog.Info("过滤检测");
  40. if (!SourceDataFilterOperation(drSource)) continue;
  41. //根据映射字段尝试塞入数据到数据行,排除不合法数据。
  42. AppLog.Info("合法性检测");
  43. NormalParamsValueInsertOperation(dtReadySource, dtTarget, drSource, drNewTarget, strDateColumn, ref strErrorMsg);
  44. if (strErrorMsg != "") break;
  45. //根据固定值字段塞入数据到数据行
  46. AppLog.Info("条件映射数据更改");
  47. FixConditonParamsInsertOperation(dtReadySource, dtTarget, drSource, drNewTarget);
  48. //补充仪器信息数据
  49. AppLog.Info("补充仪器信息数据");
  50. if (syncInstrumentItem.CnasInstrumentColumn == null)
  51. {
  52. strErrorMsg = "未设置的CNAS仪器信息列,请先配置";
  53. break;
  54. }
  55. if (dtTarget.Columns.Contains(syncInstrumentItem.CnasInstrumentColumn))
  56. drNewTarget[syncInstrumentItem.CnasInstrumentColumn] = syncInstrumentItem.GUID+ GetMachineCode();
  57. else
  58. {
  59. strErrorMsg = "设置的CNAS仪器信息列没有在库中找到,请重新配置";
  60. break;
  61. }
  62. //塞入数据的数据行包含到dt中
  63. dtTarget.Rows.Add(drNewTarget);
  64. }
  65. AppLog.Info("构造数据行循环结束");
  66. }
  67. catch (Exception ex)
  68. {
  69. AppLog.Error(ex.Message);
  70. strErrorMsg = ex.Message;
  71. }
  72. return strErrorMsg;
  73. }
  74. private string GetMachineCode()
  75. {
  76. StringBuilder machineCode = new StringBuilder();
  77. // 获取CPU ID
  78. string cpuId = GetCPUId();
  79. machineCode.Append(cpuId);
  80. // 获取所有MAC地址
  81. List<string> macAddresses = GetMACAddresses();
  82. foreach (string mac in macAddresses)
  83. {
  84. machineCode.Append("_").Append(mac);
  85. }
  86. return machineCode.ToString();
  87. }
  88. private string GetCPUId()
  89. {
  90. try
  91. {
  92. using (ManagementClass mc = new ManagementClass("Win32_Processor"))
  93. {
  94. ManagementObjectCollection moc = mc.GetInstances();
  95. foreach (ManagementObject mo in moc)
  96. {
  97. return mo.Properties["ProcessorId"].Value.ToString();
  98. }
  99. }
  100. }
  101. catch (Exception ex)
  102. {
  103. throw new Exception("获取CPU ID失败: " + ex.Message);
  104. }
  105. return string.Empty;
  106. }
  107. private List<string> GetMACAddresses()
  108. {
  109. List<string> macAddresses = new List<string>();
  110. try
  111. {
  112. NetworkInterface[] nics = NetworkInterface.GetAllNetworkInterfaces();
  113. foreach (NetworkInterface adapter in nics)
  114. {
  115. // 只获取物理网卡的MAC地址
  116. if (adapter.NetworkInterfaceType == NetworkInterfaceType.Ethernet ||
  117. adapter.NetworkInterfaceType == NetworkInterfaceType.Wireless80211)
  118. {
  119. string mac = adapter.GetPhysicalAddress().ToString();
  120. if (!string.IsNullOrEmpty(mac))
  121. {
  122. macAddresses.Add(mac);
  123. }
  124. }
  125. }
  126. }
  127. catch (Exception ex)
  128. {
  129. throw new Exception("获取MAC地址失败: " + ex.Message);
  130. }
  131. return macAddresses;
  132. }
  133. /// <summary>
  134. /// 获取日期字段
  135. /// </summary>
  136. /// <param name="strErrorMsg"></param>
  137. /// <returns></returns>
  138. private string GetDateFieldOperation(ref string strErrorMsg)
  139. {
  140. string strDateColumn="";
  141. var query = syncInstrumentItem.LstSyncPramas.Where(s => s.IfDateField == true).ToList<SyncParamasInfo>();
  142. if (query.Count != 1)
  143. {
  144. strErrorMsg = "创建CNAS数据行失败,未找到日期字段。";
  145. }
  146. else
  147. {
  148. strDateColumn = query[0].TargetField;
  149. }
  150. return strDateColumn;
  151. }
  152. /// <summary>
  153. /// 普通值(非固定值)插入操作
  154. /// </summary>
  155. /// <param name="dtReadySource"></param>
  156. /// <param name="dtTarget"></param>
  157. /// <param name="drSource"></param>
  158. /// <param name="drNewTarget"></param>
  159. /// <param name="strDateField"></param>
  160. /// <param name="strErrorMsg"></param>
  161. private void NormalParamsValueInsertOperation(DataTable dtReadySource, DataTable dtTarget, DataRow drSource, DataRow drNewTarget,string strDateField,ref string strErrorMsg)
  162. {
  163. foreach (var item in syncInstrumentItem.LstSyncPramas)
  164. {
  165. var strSourceField = item.SourceField;
  166. var strTargetField = item.TargetField;
  167. //当列名存在于数据表中时才能继续
  168. if (dtReadySource.Columns.Contains(strSourceField) && dtTarget.Columns.Contains(strTargetField))
  169. {
  170. strErrorMsg = TestConvertValueToTarget(drNewTarget, drSource, strTargetField, strSourceField, strDateField);
  171. if (strErrorMsg != "")
  172. {
  173. strErrorMsg = string.Format("发生数据转换错误,请重新配置映射字段或修改字段值。错误信息如下:列【{0}】,值【{1}】,详情【{2}】", strSourceField, drSource[strSourceField].ToString(), strErrorMsg);
  174. break;
  175. }
  176. }
  177. }
  178. }
  179. /// <summary>
  180. /// 固定值插入数据操作
  181. /// </summary>
  182. /// <param name="dtReadySource"></param>
  183. /// <param name="dtTarget"></param>
  184. /// <param name="drSource"></param>
  185. /// <param name="drNewTarget"></param>
  186. public void FixConditonParamsInsertOperation(DataTable dtReadySource,DataTable dtTarget,DataRow drSource,DataRow drNewTarget)
  187. {
  188. try
  189. {
  190. foreach (var item in syncInstrumentItem.lstFixedValue)
  191. {
  192. if (dtTarget.Columns.Contains(item.ColumnName))
  193. {
  194. switch (item.Condition)
  195. {
  196. case MapCondition.Equal:
  197. drNewTarget[item.ColumnName] = item.Value;
  198. break;
  199. case MapCondition.Sub:
  200. ChangeSubConditionValue(item, dtReadySource, drSource, drNewTarget);
  201. break;
  202. case MapCondition.IFThen:
  203. ChangeIFThenConditionValue(item, dtReadySource, drSource, drNewTarget);
  204. break;
  205. case MapCondition.SubString:
  206. ChangeSubStringConditonValue(item, drNewTarget);
  207. break;
  208. case MapCondition.SubstringStartEnd:
  209. ChangeStartEndSubStringConditonValue(item, drNewTarget);
  210. break;
  211. case MapCondition.Divided:
  212. double db1, db2;
  213. if (double.TryParse(drNewTarget[item.ColumnName].ToString(), out db1))
  214. {
  215. if (double.TryParse(item.Value.ToString(), out db2))
  216. drNewTarget[item.ColumnName] = db1 / db2;
  217. }
  218. break;
  219. case MapCondition.Multiplied:
  220. double db3, db4;
  221. if (double.TryParse(drNewTarget[item.ColumnName].ToString(), out db3))
  222. {
  223. if (double.TryParse(item.Value.ToString(), out db4))
  224. drNewTarget[item.ColumnName] = db3 * db4;
  225. }
  226. break;
  227. case MapCondition.DecimalDigits:
  228. double db5;
  229. int count;
  230. if (double.TryParse(drNewTarget[item.ColumnName].ToString(), out db5))
  231. {
  232. if (int.TryParse(item.Value.ToString(), out count))
  233. drNewTarget[item.ColumnName] = Math.Round(db5, count);
  234. }
  235. break;
  236. case MapCondition.AddSubtract:
  237. ChangeAddSubtractConditonValue(syncInstrumentItem.lstFixedValue, item, dtReadySource, drSource, drNewTarget);
  238. break;
  239. }
  240. }
  241. }
  242. }
  243. catch (Exception ex)
  244. {
  245. AppLog.Error(ex.Message);
  246. }
  247. }
  248. private void ChangeStartEndSubStringConditonValue(CnasConditionMapValue item, DataRow drNewTarget)
  249. {
  250. try
  251. {
  252. if (item.Value != null && item.Value.ToString() != "")
  253. {
  254. string[] strValues = item.Value.ToString().Split(new string[] { "{", ",", "}" }, StringSplitOptions.RemoveEmptyEntries);
  255. if (strValues.Length == 2)
  256. {
  257. string[] strConfigValues = strValues[0].Split(new string[] { "|" }, StringSplitOptions.RemoveEmptyEntries);
  258. if (strValues[1] == "S")
  259. {
  260. //Regex reg = new Regex($"^[{strValues[0]}]");
  261. //if (reg.IsMatch(drNewTarget[item.ColumnName].ToString()))
  262. // drNewTarget[item.ColumnName] = drNewTarget[item.ColumnName].ToString().(0, drNewTarget[item.ColumnName].ToString().Length - 1);
  263. foreach (string strConfigValue in strConfigValues)
  264. {
  265. if (drNewTarget[item.ColumnName].ToString().StartsWith(strConfigValue))
  266. {
  267. drNewTarget[item.ColumnName] = drNewTarget[item.ColumnName].ToString().Substring(strConfigValue.Length, drNewTarget[item.ColumnName].ToString().Length - strConfigValue.Length);
  268. break;
  269. }
  270. }
  271. }
  272. else if (strValues[1] == "E")
  273. {
  274. //Regex reg = new Regex($"[{strValues[0]}]$");
  275. //if (reg.IsMatch(drNewTarget[item.ColumnName].ToString()))
  276. // drNewTarget[item.ColumnName] = drNewTarget[item.ColumnName].ToString().Substring(0, drNewTarget[item.ColumnName].ToString().Length-1);
  277. foreach (string strConfigValue in strConfigValues)
  278. {
  279. if (drNewTarget[item.ColumnName].ToString().EndsWith(strConfigValue))
  280. {
  281. drNewTarget[item.ColumnName] = drNewTarget[item.ColumnName].ToString().Substring(0, drNewTarget[item.ColumnName].ToString().Length - strConfigValue.Length);
  282. break;
  283. }
  284. }
  285. }
  286. }
  287. }
  288. }
  289. catch (Exception ex)
  290. {
  291. AppLog.Error(ex.Message);
  292. }
  293. }
  294. /// <summary>
  295. /// 处理SUB类型固定值
  296. /// </summary>
  297. /// <param name="item"></param>
  298. /// <param name="dtReadySource"></param>
  299. /// <param name="drSource"></param>
  300. /// <param name="drNewTarget"></param>
  301. private void ChangeSubConditionValue(CnasConditionMapValue item, DataTable dtReadySource, DataRow drSource, DataRow drNewTarget)
  302. {
  303. try
  304. {
  305. //解析Value值,如果不能解析,直接插入Value值
  306. if (item.Value != null && item.Value.ToString() != "")
  307. {
  308. string strInputValue = "";
  309. string[] strValues = item.Value.ToString().Split(new string[] { "+" }, StringSplitOptions.RemoveEmptyEntries);
  310. if (strValues.Length >= 1 && strValues.Length <= 3)
  311. {
  312. switch (strValues.Length)
  313. {
  314. case 1:
  315. string strColumnName1 = strValues[0].Split(new string[] { "{", "}" }, StringSplitOptions.RemoveEmptyEntries)[0];
  316. if (dtReadySource.Columns.Contains(strColumnName1))
  317. strInputValue = drSource[strColumnName1].ToString();
  318. else
  319. strInputValue = strValues[0];
  320. break;
  321. case 2:
  322. strColumnName1 = strValues[0].Split(new string[] { "{", "}" }, StringSplitOptions.RemoveEmptyEntries)[0];
  323. if (dtReadySource.Columns.Contains(strColumnName1))
  324. strInputValue = drSource[strColumnName1].ToString();
  325. else
  326. strInputValue = strValues[0];
  327. string strColumnName2 = strValues[1].Split(new string[] { "{", "}" }, StringSplitOptions.RemoveEmptyEntries)[0];
  328. if (dtReadySource.Columns.Contains(strColumnName2))
  329. strInputValue += drSource[strColumnName2].ToString();
  330. else
  331. strInputValue += strValues[1];
  332. break;
  333. case 3:
  334. strColumnName1 = strValues[0].Split(new string[] { "{", "}" }, StringSplitOptions.RemoveEmptyEntries)[0];
  335. if (dtReadySource.Columns.Contains(strColumnName1))
  336. strInputValue = drSource[strColumnName1].ToString();
  337. else
  338. strInputValue = strValues[0];
  339. strColumnName2 = strValues[1].Split(new string[] { "{", "}" }, StringSplitOptions.RemoveEmptyEntries)[0];
  340. if (dtReadySource.Columns.Contains(strColumnName2))
  341. strInputValue += drSource[strColumnName2].ToString();
  342. else
  343. strInputValue += strValues[1];
  344. string strColumnName3 = strValues[2].Split(new string[] { "{", "}" }, StringSplitOptions.RemoveEmptyEntries)[0];
  345. if (dtReadySource.Columns.Contains(strColumnName3))
  346. strInputValue += drSource[strColumnName3].ToString();
  347. else
  348. strInputValue += strValues[2];
  349. break;
  350. }
  351. }
  352. else
  353. {
  354. strInputValue = item.Value.ToString();
  355. }
  356. drNewTarget[item.ColumnName] = strInputValue;
  357. }
  358. }
  359. catch (Exception ex)
  360. {
  361. AppLog.Error(ex.Message);
  362. }
  363. }
  364. private bool SourceDataFilterOperation(DataRow dr)
  365. {
  366. //如果过滤器为空或没有任何条件,我们认为用户允许所有数据通过过滤审核
  367. if (syncInstrumentItem.SourceFilter == null) return true;
  368. if (syncInstrumentItem.SourceFilter.lstFilterConditions == null) return true;
  369. if (syncInstrumentItem.SourceFilter.lstFilterConditions.Count == 0) return true;
  370. bool bReturn = false;
  371. try
  372. {
  373. List<bool> lstMatch = new List<bool>();
  374. foreach (FilterCondition item in syncInstrumentItem.SourceFilter.lstFilterConditions)
  375. {
  376. bool bIsMatch = false;
  377. string strConditionValue = item.ConditionValue;
  378. if (strConditionValue == null) continue;
  379. if (strConditionValue.StartsWith("RegEx")) //此时使用正则表达式匹配
  380. {
  381. string[] strRegExs = strConditionValue.Split(new string[] { "RegEx:" }, StringSplitOptions.RemoveEmptyEntries);
  382. if (strRegExs.Length != 1) continue;
  383. bIsMatch = Regex.IsMatch(dr[item.ColumnName].ToString(), strRegExs[0]);
  384. }
  385. else
  386. {
  387. double result;
  388. double conditionresult;
  389. switch (item.Algorithm)
  390. {
  391. case "=":
  392. bIsMatch = dr[item.ColumnName].ToString() == item.ConditionValue ? true : false;
  393. break;
  394. case "<>":
  395. bIsMatch = dr[item.ColumnName].ToString() == item.ConditionValue ? false : true;
  396. break;
  397. case "like":
  398. bIsMatch = dr[item.ColumnName].ToString().Contains(item.ConditionValue) ? true : false;
  399. break;
  400. case "not like":
  401. bIsMatch = dr[item.ColumnName].ToString().Contains(item.ConditionValue) ? false : true;
  402. break;
  403. case ">":
  404. if (dr[item.ColumnName] != null)
  405. if (double.TryParse(dr[item.ColumnName].ToString(), out result) && double.TryParse(item.ConditionValue, out conditionresult))
  406. bIsMatch = result > conditionresult ? true : false;
  407. break;
  408. case "<":
  409. if (dr[item.ColumnName] != null)
  410. if (double.TryParse(dr[item.ColumnName].ToString(), out result) && double.TryParse(item.ConditionValue, out conditionresult))
  411. bIsMatch = result < conditionresult ? true : false;
  412. break;
  413. case ">=":
  414. if (dr[item.ColumnName] != null)
  415. if (double.TryParse(dr[item.ColumnName].ToString(), out result) && double.TryParse(item.ConditionValue, out conditionresult))
  416. bIsMatch = result >= conditionresult ? true : false;
  417. break;
  418. case "<=":
  419. if (dr[item.ColumnName] != null)
  420. if (double.TryParse(dr[item.ColumnName].ToString(), out result) && double.TryParse(item.ConditionValue, out conditionresult))
  421. bIsMatch = result <= conditionresult ? true : false;
  422. break;
  423. }
  424. }
  425. lstMatch.Add(bIsMatch);
  426. }
  427. if (syncInstrumentItem.SourceFilter.FilterConditionLinkType == "and")
  428. {
  429. //只要有一个为否,则返回否
  430. if (lstMatch.Where(x => x.Equals(false)).Count() > 0)
  431. bReturn = false;
  432. else
  433. bReturn = true;
  434. }
  435. else
  436. {
  437. //只要有一个为是,则返回是
  438. if (lstMatch.Where(x => x.Equals(true)).Count() > 0)
  439. bReturn = true;
  440. else
  441. bReturn = false;
  442. }
  443. }
  444. catch (Exception ex)
  445. {
  446. AppLog.Error(ex.Message);
  447. }
  448. return bReturn;
  449. }
  450. /// <summary>
  451. /// 处理IFThen类型固定值
  452. /// </summary>
  453. /// <param name="item"></param>
  454. /// <param name="dtReadySource"></param>
  455. /// <param name="drSource"></param>
  456. /// <param name="drNewTarget"></param>
  457. private void ChangeIFThenConditionValue(CnasConditionMapValue item, DataTable dtReadySource, DataRow drSource, DataRow drNewTarget)
  458. {
  459. try
  460. {
  461. if (item.Value != null && item.Value.ToString() != "")
  462. {
  463. List<IFThenConditionParams> lstParams = GlobalCommonOperation.AnanlysisIFThenString(item.Value.ToString());
  464. if (lstParams.Count > 0)
  465. {
  466. foreach (var conditionparams in lstParams)
  467. {
  468. if (!dtReadySource.Columns.Contains(conditionparams.ConditionColumnName)) continue;
  469. if (drSource[conditionparams.ConditionColumnName].ToString() == conditionparams.ConditionColumnValue)
  470. drNewTarget[item.ColumnName] = conditionparams.ColumnValue;
  471. }
  472. }
  473. }
  474. }
  475. catch (Exception ex)
  476. {
  477. AppLog.Error(ex.Message);
  478. }
  479. }
  480. /// <summary>
  481. /// 处理SubString类型固定值
  482. /// </summary>
  483. /// <param name="item"></param>
  484. /// <param name="dtReadySource"></param>
  485. /// <param name="drSource"></param>
  486. /// <param name="drNewTarget"></param>
  487. private void ChangeSubStringConditonValue(CnasConditionMapValue item, DataRow drNewTarget)
  488. {
  489. try
  490. {
  491. if (item.Value != null && item.Value.ToString() != "")
  492. {
  493. string[] strValues = item.Value.ToString().Split(new string[] { "{", ",", "}" }, StringSplitOptions.RemoveEmptyEntries);
  494. if (strValues.Length == 2)
  495. {
  496. string[] strInputValues = drNewTarget[item.ColumnName].ToString().Split(new string[] { strValues[0] }, StringSplitOptions.RemoveEmptyEntries);
  497. if (strInputValues.Length == 1)
  498. {
  499. drNewTarget[item.ColumnName] = strInputValues[0];
  500. }
  501. if (strInputValues.Length == 2) //只处理分割后有两部分的
  502. {
  503. if (strValues[1] == "L")
  504. {
  505. drNewTarget[item.ColumnName] = strInputValues[0];
  506. }
  507. else if (strValues[1] == "R")
  508. {
  509. drNewTarget[item.ColumnName] = strInputValues[1];
  510. }
  511. }
  512. }
  513. }
  514. }
  515. catch (Exception ex)
  516. {
  517. AppLog.Error(ex.Message);
  518. }
  519. }
  520. private void ChangeAddSubtractConditonValue(List<CnasConditionMapValue> lstConditionMaps, CnasConditionMapValue item, DataTable dtReadySource, DataRow drSource, DataRow drNewTarget)
  521. {
  522. try
  523. {
  524. if (item.Value != null && item.Value.ToString() != "")
  525. {
  526. string[] strValues = item.Value.ToString().Split(new string[] { "{", "}" }, StringSplitOptions.RemoveEmptyEntries);
  527. if (strValues.Length == 3)
  528. {
  529. string strParam1 = strValues[0];
  530. string strParam2 = strValues[2];
  531. double db1, db2;
  532. string[] strParam1s = strParam1.Split(new string[] { "[", "]" }, StringSplitOptions.RemoveEmptyEntries);
  533. if (strParam1s.Length >= 1)
  534. {
  535. string[] strParam2s = strParam2.Split(new string[] { "[", "]" }, StringSplitOptions.RemoveEmptyEntries);
  536. if (strParam2s.Length >= 1)
  537. {
  538. if (dtReadySource.Columns.Contains(strParam1s[0]) && dtReadySource.Columns.Contains(strParam2s[0]))
  539. if (double.TryParse(drSource[strParam1s[0]].ToString(), out db1))
  540. {
  541. if (double.TryParse(drSource[strParam2s[0]].ToString(), out db2))
  542. {
  543. if (strParam1s.Length == 3)
  544. db1 = GetDividedMultipliedData(db1, strParam1s[1], strParam1s[2]);
  545. if (strParam2s.Length == 3)
  546. db2 = GetDividedMultipliedData(db2, strParam2s[1], strParam2s[2]);
  547. drNewTarget[item.ColumnName] = strValues[1].ToLower() == "subtract" ? db1 - db2 : db1 + db2;
  548. }
  549. }
  550. }
  551. }
  552. }
  553. }
  554. }
  555. catch (Exception ex)
  556. {
  557. AppLog.Error(ex.Message);
  558. }
  559. }
  560. /// <summary>
  561. /// 在计算数值相加和相减之前,如果计算的列已经有乘以或除以的操作,则先进行乘以或除以,再进行相加或相减
  562. /// </summary>
  563. /// <param name="lstConditionMaps"></param>
  564. /// <param name="drSource"></param>
  565. /// <param name="db1"></param>
  566. /// <param name="strColumnName"></param>
  567. /// <returns></returns>
  568. public double GetDividedMultipliedData(double db1, string strExpresstion, string strValue)
  569. {
  570. double db2;
  571. if (double.TryParse(strValue, out db2))
  572. {
  573. db1 = strExpresstion == "*" ? db1 * db2 : db1 / db2;
  574. }
  575. return db1;
  576. }
  577. /// <summary>
  578. /// 对准备插入的数据进行格式上的检查
  579. /// </summary>
  580. /// <param name="dtTarget"></param>
  581. /// <param name="strErrorMsg"></param>
  582. public void CheckInsertDataFormat(DataTable dtTarget, ref string strErrorMsg)
  583. {
  584. //检查数据合法性
  585. CnasDataCheck check = new CnasDataCheck
  586. {
  587. DtReadyInsert = dtTarget,
  588. TargetDataBase = syncInstrumentItem.SyncTargetDBInfo,
  589. StrTableName = syncInstrumentItem.LstSyncPramas[0].TargetTable
  590. };
  591. check.CheckData();
  592. if (check.LstIllegalMsg != null && check.LstIllegalMsg.Count > 0)
  593. {
  594. var item = syncInstrumentItem.LstSyncPramas.Where(s => s.TargetField == check.LstIllegalMsg[0].ColumnName).ToList<SyncParamasInfo>();
  595. if (item.Count == 1)
  596. {
  597. strErrorMsg = string.Format("数据不满足上传条件,请修改后再上传。错误数据:当前列名【{0}】,列值【{1}】", item[0].SourceField, check.LstIllegalMsg[0].ColumnValue);
  598. }
  599. else
  600. {
  601. strErrorMsg = string.Format("数据不满足上传条件,请修改后再上传。错误数据:CNAS列名【{0}】,列值【{1}】", check.LstIllegalMsg[0].ColumnName, check.LstIllegalMsg[0].ColumnValue);
  602. }
  603. return;
  604. }
  605. }
  606. /// <summary>
  607. /// 尝试将值插入到目标表单的各个行中
  608. /// </summary>
  609. /// <returns></returns>
  610. private string TestConvertValueToTarget(DataRow drTarget, DataRow drSource, string strTargetColumn, string strSourceColumn, string strDateColumn)
  611. {
  612. string strErrorMsg = "";
  613. try
  614. {
  615. if (strTargetColumn.ToLower() != strDateColumn.ToLower())
  616. {
  617. string strTargetColumnType = drTarget.Table.Columns[strTargetColumn].DataType.ToString();
  618. switch (strTargetColumnType)
  619. {
  620. case "System.Decimal":
  621. if (drSource[strSourceColumn] == null || (drSource[strSourceColumn] != null && drSource[strSourceColumn].ToString() == ""))
  622. drTarget[strTargetColumn] = 0;
  623. else
  624. drTarget[strTargetColumn] = Convert.ToDouble(drSource[strSourceColumn]);
  625. break;
  626. default:
  627. drTarget[strTargetColumn] = drSource[strSourceColumn];
  628. break;
  629. }
  630. }
  631. else //日期字段需要单独处理
  632. {
  633. DateTime dt = DateTime.Now;
  634. if (DateTime.TryParse(drSource[strSourceColumn].ToString(), out dt))
  635. {
  636. drTarget[strTargetColumn] = dt.ToString("yyyy-MM-dd HH:mm:ss");
  637. }
  638. else
  639. {
  640. drTarget[strTargetColumn] = drSource[strSourceColumn];
  641. }
  642. }
  643. }
  644. catch (Exception ex)
  645. {
  646. strErrorMsg = ex.Message;
  647. }
  648. return strErrorMsg;
  649. }
  650. }
  651. }