CNAS取数仪器端升级
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

CnasInsertOperation.cs 29KB

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