CNAS取数仪器端升级
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

663 строки
31KB

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