CNAS取数仪器端升级
Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.

844 wiersze
33KB

  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Drawing;
  5. using System.Data;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Windows.Forms;
  9. using CnasSynchronusClient;
  10. using CnasSynchrousModel;
  11. using CnasSynchronousCommon;
  12. using log4net.Repository.Hierarchy;
  13. using System.Threading;
  14. using System.IO;
  15. using Newtonsoft.Json;
  16. using System.Diagnostics;
  17. namespace CNAS_RunSync
  18. {
  19. public partial class ucSynchrousMain : UserControl
  20. {
  21. private string delayDays = FileOperation.GetSystemFormatConfigData().ShowDelayDays;
  22. private SyncInstrumentItemInfo syncInstrumentItem = new SyncInstrumentItemInfo();
  23. //private Dictionary<string, DataTable> dictSourceTables = new Dictionary<string, DataTable>();
  24. private DataTable dtSource = new DataTable(); //当前显示数据源
  25. private Dictionary<string, DataRow> dictSource = new Dictionary<string, DataRow>();
  26. private Dictionary<string, Type> DictComboBox = new Dictionary<string, Type>(); //ComboBox数据源
  27. private List<string> lstIntOrDouble = new List<string>() { "等于", "不等于", "大于", "小于", "不大于", "不小于" };
  28. private List<string> lstText = new List<string>() { "等于", "不等于", "包含", "不包含" };
  29. private Color FinedBackColor = Color.LightCyan; //查询后选中项
  30. Dictionary<string, string> DictField = new Dictionary<string, string>();
  31. public ucSynchrousMain()
  32. {
  33. InitializeComponent();
  34. }
  35. //需要存在一个仪器才能正常显示数据
  36. public ucSynchrousMain(SyncInstrumentItemInfo syncInstrumentItem)
  37. {
  38. InitializeComponent();
  39. dgvSyncData.AutoGenerateColumns = false;
  40. dgvSyncData.RowHeadersVisible = false;
  41. //dgvSyncData.RowsDefaultCellStyle.BackColor = Color.Bisque;
  42. dgvSyncData.AlternatingRowsDefaultCellStyle.BackColor = Color.WhiteSmoke;
  43. this.syncInstrumentItem = syncInstrumentItem;
  44. }
  45. /// <summary>
  46. /// 控件加载时发生
  47. /// </summary>
  48. /// <param name="sender"></param>
  49. /// <param name="e"></param>
  50. private void ucSynchrousMain_Load(object sender, EventArgs e)
  51. {
  52. BindData();
  53. }
  54. /// <summary>
  55. /// 绑定数据
  56. /// </summary>
  57. public void BindData()
  58. {
  59. if (this.syncInstrumentItem == null) return;
  60. this.lblTitle.Text = string.Format("当前仪器:【{0}】", syncInstrumentItem.Code);
  61. if (syncInstrumentItem.LstSyncPramas == null) return;
  62. if (syncInstrumentItem.SyncInstrumentDSInfo == null) return;
  63. //if (syncInstrumentItem.SyncInstrumentDSInfo.Path == null) return;
  64. if (syncInstrumentItem.SyncInstrumentDSInfo.InstrumentDataSourceType == DataSourceType.None) return;
  65. this.lblTitleMsg.Text= string.Format("类型:{0} 路径:{1}", syncInstrumentItem.SyncInstrumentDSInfo.InstrumentDataSourceType.ToString(),syncInstrumentItem.SyncInstrumentDSInfo.Path);
  66. //清空现有绑定
  67. DictComboBox.Clear();
  68. dictSource.Clear();
  69. //加载相关数据
  70. //1.1根据仪器类型加载本地存储的中英文字段说明映射
  71. //if (syncInstrumentItem.LstSyncPramas.Count > 0)
  72. //{
  73. //InstrumentDescribeZH describeZH = new InstrumentDescribeZH(syncInstrumentItem.InstruType, syncInstrumentItem.LstSyncPramas[0].SourceTable);
  74. //describeZH.GetFieldDescribe();
  75. //DictField = describeZH.DictField;
  76. //}
  77. //2.datagridview中绑定数据(绑定的是从数据源中读取的数据)
  78. //2.1 根据映射表,创建datagridviewcolumn/和绑定数据列
  79. if (syncInstrumentItem.LstSyncPramas.Count <= 0) return;
  80. //创建选择列
  81. AddCheckBoxColumn(dgvSyncData, "selectedColumn", "选择", 80, true);
  82. //创建数据列
  83. foreach (var item in syncInstrumentItem.LstSyncPramas)
  84. {
  85. string strColumnName = item.SourceField;
  86. if (DictField.ContainsKey(strColumnName))
  87. strColumnName = DictField[strColumnName];
  88. AddDatagridColumn(dgvSyncData, item.SourceField, strColumnName, 150, bSort: item.IfDateField);
  89. }
  90. //创建GUID列
  91. AddDatagridColumn(dgvSyncData, "GridGuid", "GridGuid", 50, false);
  92. //2.2获取数据源数据
  93. this.RefreshData();
  94. //3.初始化查询相关内容
  95. //3.1 绑定Combobox数据源
  96. foreach (DataColumn dc in dtSource.Columns)
  97. {
  98. if (syncInstrumentItem.LstSyncPramas.Where(s => s.SourceField.ToUpper() == dc.ColumnName.ToUpper()).LongCount<SyncParamasInfo>() > 0)
  99. {
  100. string strColumnName = dc.ColumnName;
  101. if (DictField.ContainsKey(strColumnName))
  102. strColumnName = DictField[strColumnName];
  103. DictComboBox.Add(strColumnName, dc.DataType);
  104. }
  105. }
  106. if (DictComboBox.Count > 0)
  107. {
  108. BindingSource bsComboBox = new BindingSource
  109. {
  110. DataSource = DictComboBox
  111. };
  112. cmbColumns.DataSource = bsComboBox;
  113. cmbColumns.ValueMember = "Key";
  114. cmbColumns.DisplayMember = "Key";
  115. }
  116. //4.初始化最近上传时间
  117. //4.1 获取目标表最近上传时间
  118. Dictionary<string, string> times = this.ReadSyncTime();
  119. if (true == times?.ContainsKey(this.syncInstrumentItem.Code))
  120. {
  121. this.lblTitleLastUpdateTime.Text = $"最近上传时间:{times[this.syncInstrumentItem.Code]}";
  122. }
  123. }
  124. /// <summary>
  125. ///
  126. /// </summary>
  127. private void RefreshData()
  128. {
  129. //清空现有绑定
  130. dictSource?.Clear();
  131. dtSource?.Clear();
  132. dtSource?.Dispose();
  133. dtSource = null;
  134. dgvSyncData?.Rows?.Clear();
  135. //2.2 获取数据源数据,构建datagridviewcell
  136. //2.2.1 获取数据源数据
  137. var query = syncInstrumentItem.LstSyncPramas.Where(s => s.IfDateField == true).ToList<SyncParamasInfo>();
  138. if (query.Count == 1)
  139. {
  140. object[] obj = new object[]
  141. {
  142. syncInstrumentItem.LstSyncPramas[0].SourceTable,
  143. query[0].SourceField,
  144. DateTime.Now.AddDays(Convert.ToInt32(delayDays)).ToString("yyyy-MM-dd HH:mm:ss")
  145. };
  146. InstrumentData instrumentData = InstrumentDataFact.CreateInstrumentDataSource(syncInstrumentItem.SyncInstrumentDSInfo, obj);
  147. dtSource = instrumentData.GetInstrumentDataByDate();
  148. DataView dv = dtSource.DefaultView;
  149. dv.Sort = $"{query[0].SourceField} DESC";
  150. dtSource = dv.ToTable();
  151. }
  152. //2.2.2 构建datagridviewcell
  153. foreach (DataRow dr in dtSource.Rows)
  154. {
  155. DataGridViewRow dataGridViewRow = new DataGridViewRow();
  156. foreach (DataGridViewColumn dataGridViewColumn in dgvSyncData.Columns)
  157. {
  158. if (dataGridViewColumn.Index == 0)
  159. {
  160. dataGridViewRow.Cells.Add(new DataGridViewCheckBoxCell());
  161. }
  162. if (dtSource.Columns.Contains(dataGridViewColumn.Name))
  163. AddDataTextCell(dataGridViewRow, dataGridViewColumn, dr);
  164. }
  165. //添加GUID值
  166. string strGuid = Guid.NewGuid().ToString();
  167. DataGridViewTextBoxCell txtCell = new DataGridViewTextBoxCell
  168. {
  169. Value = strGuid
  170. };
  171. dataGridViewRow.Cells.Add(txtCell);
  172. dgvSyncData.Rows.Add(dataGridViewRow);
  173. dictSource.Add(strGuid, dr);
  174. }
  175. }
  176. /// <summary>
  177. /// 添加datagridview的列
  178. /// </summary>
  179. /// <param name="dgvShow"></param>
  180. /// <param name="strColumnName"></param>
  181. /// <param name="strColumnHeaderText"></param>
  182. /// <param name="Width"></param>
  183. /// <param name="bVisible"></param>
  184. private void AddDatagridColumn(DataGridView dgvShow, string strColumnName, string strColumnHeaderText, int Width, bool bVisible = true, bool bSort = false)
  185. {
  186. DataGridViewColumn Column = new DataGridViewColumn()
  187. {
  188. Name = strColumnName,
  189. HeaderText = strColumnHeaderText,
  190. Width = Width,
  191. Visible = bVisible,
  192. CellTemplate = new DataGridViewTextBoxCell(),
  193. ReadOnly = true,
  194. SortMode = bSort ? DataGridViewColumnSortMode.Automatic : DataGridViewColumnSortMode.NotSortable
  195. };
  196. //设置文本对齐方式
  197. Column.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
  198. Column.HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter;
  199. //设置该列背景颜色
  200. dgvShow.Columns.Add(Column);
  201. }
  202. private void AddCheckBoxColumn(DataGridView dgvShow, string strColumnName, string strColumnHeaderText, int Width, bool bVisible = true)
  203. {
  204. DataGridViewCheckBoxColumn selectedColumn = new DataGridViewCheckBoxColumn()
  205. {
  206. HeaderText = strColumnHeaderText,
  207. Name = strColumnName,
  208. Visible = bVisible,
  209. Width = Width,
  210. ReadOnly = false
  211. };
  212. //设置文本对齐方式
  213. selectedColumn.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
  214. selectedColumn.HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter;
  215. //设置该列背景颜色
  216. dgvShow.Columns.Add(selectedColumn);
  217. }
  218. /// <summary>
  219. /// 添加datagridview的单元格
  220. /// </summary>
  221. /// <param name="dataGridViewRow"></param>
  222. /// <param name="dataGridViewColumn"></param>
  223. /// <param name="dr"></param>
  224. private void AddDataTextCell(DataGridViewRow dataGridViewRow, DataGridViewColumn dataGridViewColumn, DataRow dr)
  225. {
  226. DataGridViewTextBoxCell txtCell = new DataGridViewTextBoxCell();
  227. txtCell.Value = Convert.ToString(dr[dataGridViewColumn.Name]);
  228. dataGridViewRow.Cells.Add(txtCell);
  229. }
  230. private void btnRunData_Click(object sender, EventArgs e)
  231. {
  232. //组织上传数据
  233. if (dgvSyncData.Columns.Count <= 0) return;
  234. DataTable dtReadySource = dtSource.Clone();
  235. GetUpLoadData(ref dtReadySource);
  236. if (dtReadySource.Rows.Count <= 0)
  237. {
  238. string strMsg = "未能获得上传数据,请查询筛选后重试!";
  239. MessageBox.Show(strMsg);
  240. WriteMsgToRichTextBox(strMsg);
  241. }
  242. //执行上传
  243. RunUpLoad(dtReadySource);
  244. }
  245. /// <summary>
  246. /// 获取上传数据
  247. /// </summary>
  248. /// <param name="dtReadySource">准备上传的数据</param>
  249. private void GetUpLoadData(ref DataTable dtReadySource)
  250. {
  251. foreach (DataGridViewRow dgvRow in dgvSyncData.Rows)
  252. {
  253. if (dgvRow.DefaultCellStyle.BackColor == FinedBackColor)
  254. {
  255. string strGuid = dgvRow.Cells["GridGuid"].Value.ToString();
  256. if (!dictSource.ContainsKey(strGuid)) continue;
  257. DataRow dr = dictSource[strGuid];
  258. DataRow drReady = dtReadySource.NewRow();
  259. foreach (DataColumn dc in dtReadySource.Columns)
  260. {
  261. if (dr.Table.Columns.Contains(dc.ColumnName))
  262. drReady[dc.ColumnName] = dr[dc.ColumnName];
  263. }
  264. dtReadySource.Rows.Add(drReady);
  265. }
  266. }
  267. }
  268. private void RunUpLoad(DataTable dtReadySource)
  269. {
  270. //根据映射字段获取准备上传的所有数据
  271. if (dtReadySource == null || dtReadySource.Rows.Count <= 0) return;
  272. //构建准备插入的数据
  273. DataTable dtTarget = CnasDataOperationFact.CnasDataOperation().GetCNASTablesStruct(syncInstrumentItem.LstSyncPramas[0].TargetTable, syncInstrumentItem.SyncTargetDBInfo);
  274. if (dtTarget.Columns.Count <= 0)
  275. {
  276. MessageBox.Show("未能成功读取CNAS数据库列,请检查数据库配置。");
  277. WriteMsgToRichTextBox("未能成功读取CNAS数据库列,请检查数据库配置。");
  278. return;
  279. }
  280. //创建插入操作类
  281. CnasInsertOperation insertOperation = new CnasInsertOperation { syncInstrumentItem = syncInstrumentItem };
  282. //逐行插入数据到内存表
  283. string strErrorMsg = insertOperation.CreateInputData(dtReadySource, ref dtTarget);
  284. if (strErrorMsg != "")
  285. {
  286. MessageBox.Show(strErrorMsg);
  287. return;
  288. }
  289. if (dtTarget.Rows.Count <= 0)
  290. {
  291. MessageBox.Show("未能获取到符合要求的数据,请检查配置或联系管理员。");
  292. WriteMsgToRichTextBox("未能获取到符合要求的数据,请检查配置或联系管理员。");
  293. return;
  294. }
  295. //检查数据合法性
  296. insertOperation.CheckInsertDataFormat(dtTarget, ref strErrorMsg);
  297. if (strErrorMsg != "")
  298. {
  299. MessageBox.Show(strErrorMsg);
  300. return;
  301. }
  302. //逐行执行插入内存表数据到数据库中
  303. int ErrorCount = 0;
  304. int SuccessCount = 0;
  305. int OtherCount = 0;
  306. List<DataRow> lstError = new List<DataRow>();
  307. int cols = dtTarget.Columns.Count;
  308. foreach (DataRow dr in dtTarget.Rows)
  309. {
  310. if (cols >= 11 && dr[11].ToString().Length > 1)
  311. {
  312. AppLog.Error($"逐行插入目标数据,最终准备插入(更新)数据行{dr[11]}");
  313. dr[11] = kxjsf(dr[11].ToString());
  314. }
  315. if (cols >= 12 && dr[12].ToString().Length > 1)
  316. {
  317. AppLog.Error($"逐行插入目标数据,最终准备插入(更新)数据行{dr[12]}");
  318. }
  319. if (cols >= 13 && dr[13].ToString().Length > 1)
  320. {
  321. AppLog.Error($"逐行插入目标数据,最终准备插入(更新)数据行{dr[13]}");
  322. }
  323. if (cols >= 14 && dr[14].ToString().Length > 1)
  324. {
  325. AppLog.Error($"逐行插入目标数据,最终准备插入(更新)数据行{dr[14]}");
  326. }
  327. if (cols >= 15 && dr[15].ToString().Length > 1)
  328. {
  329. AppLog.Error($"逐行插入目标数据,最终准备插入(更新)数据行{dr[15]}");
  330. }
  331. if (cols >= 16 && dr[16].ToString().Length > 1)
  332. {
  333. AppLog.Error($"逐行插入目标数据,最终准备插入(更新)数据行{dr[16]}");
  334. }
  335. dr.AcceptChanges();
  336. int iReturn = CnasDataOperationFact.CnasDataOperation().InsertDataToCNASTable(GlobalCommonOperation.ConvertDataRowToTable(dr), syncInstrumentItem.SyncTargetDBInfo, syncInstrumentItem.LstSyncPramas, syncInstrumentItem.CnasInstrumentColumn, syncInstrumentItem.lstFixedValue);
  337. if (iReturn <= 0) //此时出现问题
  338. {
  339. if (iReturn == -1)
  340. {
  341. AppLog.ServiceInfo("数据库连接中断,终止本次上传。");
  342. WriteMsgToRichTextBox("数据库连接中断,终止本次上传。");
  343. break; //此时数据库连接中断,直接跳出循环,结束本次数据同步传输
  344. }
  345. else if (iReturn == -2) //等于-2表示插入准备更新时发现数据一致,不再执行
  346. {
  347. OtherCount++;
  348. }
  349. else
  350. {
  351. ErrorCount++;
  352. /*需要转换一下,否则会将整个dt全部写入日志*/
  353. lstError.Add(GlobalCommonOperation.ConvertDataRowToTable(dr).Rows[0]);
  354. }
  355. }
  356. else
  357. {
  358. SuccessCount++;
  359. }
  360. }
  361. ////判断返回结果
  362. //if (lstError.Count <= 0)
  363. //{
  364. // MessageBox.Show("上传完成!");
  365. //}
  366. //else
  367. //{
  368. // AppLog.Error($"未成功上传的数据如下:{TransConvert.ListToString(lstError)}");
  369. // MessageBox.Show("上传过程中发生异常,存在部分数据未成功上传,请联系管理员!");
  370. //}
  371. MessageBox.Show($"上传操作完成!其中成功{SuccessCount}条,失败{ErrorCount}条,其他{OtherCount}条。");
  372. WriteMsgToRichTextBox($"上传操作完成!其中成功{SuccessCount}条,失败{ErrorCount}条,其他{OtherCount}条。");
  373. if (lstError.Count > 0)
  374. {
  375. AppLog.Error($"未成功上传的数据如下:{TransConvert.ListToString(lstError)}");
  376. WriteMsgToRichTextBox($"未成功上传的数据如下:{TransConvert.ListToString(lstError)}");
  377. }
  378. // 记录上传时间
  379. if (0 < SuccessCount)
  380. {
  381. DateTime time = DateTime.Now;
  382. this.lblTitleLastUpdateTime.Text = $"最近上传时间:{time.ToString("yyyy-MM-dd HH:mm:ss")}";
  383. this.WriteSyncTime(time);
  384. }
  385. }
  386. private string kxjsf(string sss)
  387. {
  388. double sd = Convert.ToDouble(sss);
  389. //double sd = 123.123456;
  390. string temps2 = "0";
  391. string temps3 = "0";
  392. string temps4 = "0";
  393. int tempi2 = 0;
  394. int tempi3 = 0;
  395. int tempi4 = 0;
  396. if (sss.Contains('.'))
  397. {
  398. string[] s1 = sss.Split('.');
  399. if (s1[1].Length > 2)
  400. {
  401. if (s1[1].Length > 2)
  402. {
  403. temps2 = s1[1].Substring(1, 1);
  404. temps3 = s1[1].Substring(2, 1);
  405. }
  406. tempi2 = int.Parse(temps2);
  407. tempi3 = int.Parse(temps3);
  408. if (s1[1].Length > 3)
  409. {
  410. temps4 = s1[1].Substring(3, 1);
  411. }
  412. tempi4 = int.Parse(temps4);
  413. if (tempi3 > 5 || tempi3 < 5)
  414. {
  415. return sd.ToString("0.00");
  416. }
  417. else
  418. {
  419. if (tempi4 != 0)
  420. {
  421. return sd.ToString("0.00");
  422. }
  423. else
  424. {
  425. if (tempi2 == 0 || tempi2 == 2 || tempi2 == 4 || tempi2 == 6 || tempi2 == 8)
  426. {
  427. return sss.Substring(0, 5);
  428. }
  429. else
  430. {
  431. return sd.ToString("0.00");
  432. }
  433. }
  434. }
  435. }
  436. }
  437. return sss;
  438. }
  439. private void cmbColumns_SelectedIndexChanged(object sender, EventArgs e)
  440. {
  441. if (cmbColumns.SelectedItem == null) return;
  442. KeyValuePair<string, Type> obj = (KeyValuePair<string, Type>)cmbColumns.SelectedItem;
  443. if (DictComboBox.ContainsKey(obj.Key))
  444. {
  445. Type selectType = DictComboBox[obj.Key];
  446. switch (selectType.ToString())
  447. {
  448. case "System.DateTime":
  449. UseDateTimeControl();
  450. break;
  451. case "System.Double":
  452. case "System.Int64":
  453. case "System.Int32":
  454. UseNormalControl();
  455. //绑定条件ComboBox
  456. combCondition.DataSource = lstIntOrDouble;
  457. break;
  458. case "System.Byte[]":
  459. case "System.String":
  460. default:
  461. UseNormalControl();
  462. //绑定条件ComboBox
  463. combCondition.DataSource = lstText;
  464. break;
  465. }
  466. }
  467. }
  468. /// <summary>
  469. /// 使用时间类型专用的查询控件组
  470. /// </summary>
  471. private void UseDateTimeControl()
  472. {
  473. if (pnlCheck.Controls.Contains(pnlText))
  474. pnlCheck.Controls.Remove(pnlText);
  475. if (!pnlCheck.Controls.Contains(pnlDate))
  476. {
  477. pnlCheck.Controls.Add(pnlDate);
  478. pnlDate.Visible = true;
  479. pnlDate.Dock = DockStyle.Fill;
  480. }
  481. }
  482. /// <summary>
  483. /// 使用标准的查询控件组
  484. /// </summary>
  485. private void UseNormalControl()
  486. {
  487. if (pnlCheck.Controls.Contains(pnlDate))
  488. pnlCheck.Controls.Remove(pnlDate);
  489. if (!pnlCheck.Controls.Contains(pnlText))
  490. {
  491. pnlCheck.Controls.Add(pnlText);
  492. pnlText.Visible = true;
  493. pnlText.Dock = DockStyle.Fill;
  494. }
  495. }
  496. private void btnFind_Click(object sender, EventArgs e)
  497. {
  498. if (cmbColumns.SelectedValue == null)
  499. {
  500. return;
  501. }
  502. //0.获取数据源数据
  503. this.RefreshData();
  504. //1.合法性检测
  505. if (DictComboBox[cmbColumns.SelectedValue.ToString()].ToString().Equals("System.DateTime"))
  506. {
  507. if (dtpTarget.Value < dtpSource.Value)
  508. {
  509. MessageBox.Show("查询时间需要一个有效的时间范围!");
  510. return;
  511. }
  512. }
  513. else
  514. {
  515. if (this.txtFind.Text.Trim() == "") //为空 认为是取消查询
  516. {
  517. btnCancelFind_Click(sender, e);
  518. return;
  519. }
  520. }
  521. //2.将datagridview中满足条件的项修改背景色
  522. //2.1 判断当前显示的datagridview是否含有旧的查询数据
  523. //2.2 将满足条件的项背景色改为特殊颜色
  524. for (int index = dgvSyncData.Rows.Count - 1; 0 <= index; --index)
  525. {
  526. DataGridViewRow row = dgvSyncData.Rows[index];
  527. //查询列的当前值
  528. string strGuid = row.Cells["GridGuid"].Value.ToString();
  529. if (DictField.Count > 0)
  530. {
  531. var query = DictField.Where(s => s.Value == cmbColumns.SelectedValue.ToString());
  532. if (query.Count() == 1)
  533. {
  534. string strValue = row.Cells[query.ElementAtOrDefault(0).Key].Value.ToString();
  535. //判断是否满足条件
  536. if (false == CheckMatchCondition(strValue))
  537. {
  538. dgvSyncData.Rows.RemoveAt(index);
  539. }
  540. }
  541. }
  542. else
  543. {
  544. string strValue = row.Cells[cmbColumns.SelectedValue.ToString()].Value.ToString();
  545. //判断是否满足条件
  546. if (false == CheckMatchCondition(strValue))
  547. {
  548. dgvSyncData.Rows.RemoveAt(index);
  549. }
  550. }
  551. }
  552. }
  553. private bool CheckMatchCondition(string strValue)
  554. {
  555. if (DictComboBox[cmbColumns.SelectedValue.ToString()].ToString().Equals("System.DateTime"))
  556. {
  557. DateTime dt = DateTime.Now;
  558. if (!DateTime.TryParse(strValue, out dt)) return false;
  559. DateTime dtSource = dtpSource.Value;
  560. DateTime dtTarget = dtpTarget.Value;
  561. DateTime dtValue = dt;
  562. if (dt >= dtSource && dt <= dtTarget)
  563. return true;
  564. else
  565. return false;
  566. }
  567. else
  568. {
  569. string strFindText = this.txtFind.Text.ToString();
  570. bool bReturn = false;
  571. try
  572. {
  573. switch (combCondition.SelectedValue.ToString())
  574. {
  575. case "等于":
  576. bReturn = strValue == strFindText ? true : false;
  577. break;
  578. case "不等于":
  579. bReturn = strValue != strFindText ? true : false;
  580. break;
  581. case "包含":
  582. bReturn = strValue.Contains(strFindText) ? true : false;
  583. break;
  584. case "不包含":
  585. bReturn = !strValue.Contains(strFindText) ? true : false;
  586. break;
  587. case "大于":
  588. bReturn = Convert.ToDouble(strValue) > Convert.ToDouble(strFindText) ? true : false;
  589. break;
  590. case "不小于":
  591. bReturn = Convert.ToDouble(strValue) >= Convert.ToDouble(strFindText) ? true : false;
  592. break;
  593. case "小于":
  594. bReturn = Convert.ToDouble(strValue) < Convert.ToDouble(strFindText) ? true : false;
  595. break;
  596. case "不大于":
  597. bReturn = Convert.ToDouble(strValue) <= Convert.ToDouble(strFindText) ? true : false;
  598. break;
  599. }
  600. }
  601. catch (Exception ex)
  602. {
  603. AppLog.Error(ex.Message);
  604. bReturn = false;
  605. }
  606. return bReturn;
  607. }
  608. }
  609. /// <summary>
  610. /// 获得查询语句(非日期类型)
  611. /// </summary>
  612. /// <param name="strColumnName"></param>
  613. /// <param name="strColumnType"></param>
  614. /// <param name="strCondition"></param>
  615. /// <param name="strValue"></param>
  616. /// <returns></returns>
  617. private string GetSelectString(string strColumnName, string strCondition, string strValue)
  618. {
  619. string strCondi = "";
  620. switch (strCondition)
  621. {
  622. case "等于":
  623. strCondi = "=";
  624. break;
  625. case "不等于":
  626. strCondi = "<>";
  627. break;
  628. case "包含":
  629. strCondi = "like";
  630. break;
  631. case "不包含":
  632. strCondi = "not like";
  633. break;
  634. case "大于":
  635. strCondi = ">";
  636. break;
  637. case "不小于":
  638. strCondi = ">=";
  639. break;
  640. case "小于":
  641. strCondi = "<";
  642. break;
  643. case "不大于":
  644. strCondi = "<=";
  645. break;
  646. }
  647. if (strCondi == "like" || strCondi == "not like")
  648. return string.Format("{0} {1} '%{2}%'", strColumnName, strCondi, strValue);
  649. else
  650. return string.Format("{0} {1} '{2}'", strColumnName, strCondi, strValue);
  651. }
  652. private void btnCancelFind_Click(object sender, EventArgs e)
  653. {
  654. foreach (DataGridViewRow dgvrow in dgvSyncData.Rows)
  655. {
  656. if (dgvrow.Cells[0].Value != null && dgvrow.Cells[0].Value.ToString() == "True")
  657. dgvrow.Cells[0].Value = false;
  658. if (dgvrow.Index % 2 == 1)
  659. {
  660. dgvrow.DefaultCellStyle.BackColor = Color.WhiteSmoke;
  661. }
  662. else
  663. {
  664. dgvrow.DefaultCellStyle.BackColor = Color.White;
  665. }
  666. }
  667. }
  668. private void dgvSyncData_CellValueChanged(object sender, DataGridViewCellEventArgs e)
  669. {
  670. //只有第一列“选择列”时触发
  671. if (e.ColumnIndex == 0)
  672. {
  673. if (dgvSyncData.Rows[e.RowIndex].Cells[0].Value.ToString() == "True")
  674. dgvSyncData.Rows[e.RowIndex].DefaultCellStyle.BackColor = FinedBackColor;
  675. else
  676. {
  677. if (e.RowIndex % 2 == 1)
  678. {
  679. dgvSyncData.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.WhiteSmoke;
  680. }
  681. else
  682. {
  683. dgvSyncData.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.White;
  684. }
  685. }
  686. }
  687. }
  688. public void WriteMsgToRichTextBox(string strMsg)
  689. {
  690. Invoke(new MethodInvoker(delegate ()
  691. {
  692. this.rtxtLog.Text += string.Format("{0} 日期: {1}\n", strMsg,DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
  693. }));
  694. }
  695. /// <summary>
  696. ///
  697. /// </summary>
  698. /// <param name="message"></param>
  699. private void WriteSyncTime(DateTime time)
  700. {
  701. try
  702. {
  703. /* 创建文件夹 */
  704. string logDirectory = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Cache");
  705. if (!Directory.Exists(logDirectory))
  706. {
  707. Directory.CreateDirectory(logDirectory);
  708. }
  709. /* 更新时间 */
  710. string file = Path.Combine(logDirectory, $"SyncTime.bin");
  711. Dictionary<string, string> times = this.ReadSyncTime() ?? new Dictionary<string, string>();
  712. if (true == times.ContainsKey(this.syncInstrumentItem.Code))
  713. {
  714. times[this.syncInstrumentItem.Code] = time.ToString("yyyy-MM-dd HH:mm:ss");
  715. }
  716. else
  717. {
  718. times.Add(this.syncInstrumentItem.Code, time.ToString("yyyy-MM-dd HH:mm:ss"));
  719. }
  720. /* 写入文件 */
  721. File.WriteAllText(file, JsonConvert.SerializeObject(times, Formatting.Indented));
  722. }
  723. catch (Exception exception)
  724. {
  725. Invoke(new MethodInvoker(delegate ()
  726. {
  727. this.rtxtLog.Text += $"记录同步时间出错!错误信息:{exception.Message} 日期: {DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}\n";
  728. }));
  729. }
  730. }
  731. /// <summary>
  732. ///
  733. /// </summary>
  734. private Dictionary<string, string> ReadSyncTime()
  735. {
  736. Dictionary<string, string> times = null;
  737. if (File.Exists(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Cache", $"SyncTime.bin")))
  738. {
  739. try
  740. {
  741. using (StreamReader reader = new StreamReader(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Cache", $"SyncTime.bin"), Encoding.UTF8))
  742. {
  743. try
  744. {
  745. string json = reader.ReadToEnd();
  746. times = JsonConvert.DeserializeObject<Dictionary<string, string>>(json);
  747. }
  748. catch
  749. {
  750. }
  751. finally
  752. {
  753. reader.Close();
  754. reader.Dispose();
  755. }
  756. }
  757. }
  758. catch (Exception exception)
  759. {
  760. Debug.WriteLine(exception.Message);
  761. }
  762. }
  763. return times;
  764. }
  765. }
  766. }