CNAS取数仪器端升级
No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.

843 líneas
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. foreach (DataRow dr in dtTarget.Rows)
  308. {
  309. if (dr[11].ToString().Length > 1)
  310. {
  311. AppLog.Error($"逐行插入目标数据,最终准备插入(更新)数据行{dr[11]}");
  312. dr[11] = kxjsf(dr[11].ToString());
  313. }
  314. if (dr[12].ToString().Length > 1)
  315. {
  316. AppLog.Error($"逐行插入目标数据,最终准备插入(更新)数据行{dr[12]}");
  317. }
  318. if (dr[13].ToString().Length > 1)
  319. {
  320. AppLog.Error($"逐行插入目标数据,最终准备插入(更新)数据行{dr[13]}");
  321. }
  322. if (dr[14].ToString().Length > 1)
  323. {
  324. AppLog.Error($"逐行插入目标数据,最终准备插入(更新)数据行{dr[14]}");
  325. }
  326. if (dr[15].ToString().Length > 1)
  327. {
  328. AppLog.Error($"逐行插入目标数据,最终准备插入(更新)数据行{dr[15]}");
  329. }
  330. if (dr[16].ToString().Length > 1)
  331. {
  332. AppLog.Error($"逐行插入目标数据,最终准备插入(更新)数据行{dr[16]}");
  333. }
  334. dr.AcceptChanges();
  335. int iReturn = CnasDataOperationFact.CnasDataOperation().InsertDataToCNASTable(GlobalCommonOperation.ConvertDataRowToTable(dr), syncInstrumentItem.SyncTargetDBInfo, syncInstrumentItem.LstSyncPramas, syncInstrumentItem.CnasInstrumentColumn, syncInstrumentItem.lstFixedValue);
  336. if (iReturn <= 0) //此时出现问题
  337. {
  338. if (iReturn == -1)
  339. {
  340. AppLog.ServiceInfo("数据库连接中断,终止本次上传。");
  341. WriteMsgToRichTextBox("数据库连接中断,终止本次上传。");
  342. break; //此时数据库连接中断,直接跳出循环,结束本次数据同步传输
  343. }
  344. else if (iReturn == -2) //等于-2表示插入准备更新时发现数据一致,不再执行
  345. {
  346. OtherCount++;
  347. }
  348. else
  349. {
  350. ErrorCount++;
  351. /*需要转换一下,否则会将整个dt全部写入日志*/
  352. lstError.Add(GlobalCommonOperation.ConvertDataRowToTable(dr).Rows[0]);
  353. }
  354. }
  355. else
  356. {
  357. SuccessCount++;
  358. }
  359. }
  360. ////判断返回结果
  361. //if (lstError.Count <= 0)
  362. //{
  363. // MessageBox.Show("上传完成!");
  364. //}
  365. //else
  366. //{
  367. // AppLog.Error($"未成功上传的数据如下:{TransConvert.ListToString(lstError)}");
  368. // MessageBox.Show("上传过程中发生异常,存在部分数据未成功上传,请联系管理员!");
  369. //}
  370. MessageBox.Show($"上传操作完成!其中成功{SuccessCount}条,失败{ErrorCount}条,其他{OtherCount}条。");
  371. WriteMsgToRichTextBox($"上传操作完成!其中成功{SuccessCount}条,失败{ErrorCount}条,其他{OtherCount}条。");
  372. if (lstError.Count > 0)
  373. {
  374. AppLog.Error($"未成功上传的数据如下:{TransConvert.ListToString(lstError)}");
  375. WriteMsgToRichTextBox($"未成功上传的数据如下:{TransConvert.ListToString(lstError)}");
  376. }
  377. // 记录上传时间
  378. if (0 < SuccessCount)
  379. {
  380. DateTime time = DateTime.Now;
  381. this.lblTitleLastUpdateTime.Text = $"最近上传时间:{time.ToString("yyyy-MM-dd HH:mm:ss")}";
  382. this.WriteSyncTime(time);
  383. }
  384. }
  385. private string kxjsf(string sss)
  386. {
  387. double sd = Convert.ToDouble(sss);
  388. //double sd = 123.123456;
  389. string temps2 = "0";
  390. string temps3 = "0";
  391. string temps4 = "0";
  392. int tempi2 = 0;
  393. int tempi3 = 0;
  394. int tempi4 = 0;
  395. if (sss.Contains('.'))
  396. {
  397. string[] s1 = sss.Split('.');
  398. if (s1[1].Length > 2)
  399. {
  400. if (s1[1].Length > 2)
  401. {
  402. temps2 = s1[1].Substring(1, 1);
  403. temps3 = s1[1].Substring(2, 1);
  404. }
  405. tempi2 = int.Parse(temps2);
  406. tempi3 = int.Parse(temps3);
  407. if (s1[1].Length > 3)
  408. {
  409. temps4 = s1[1].Substring(3, 1);
  410. }
  411. tempi4 = int.Parse(temps4);
  412. if (tempi3 > 5 || tempi3 < 5)
  413. {
  414. return sd.ToString("0.00");
  415. }
  416. else
  417. {
  418. if (tempi4 != 0)
  419. {
  420. return sd.ToString("0.00");
  421. }
  422. else
  423. {
  424. if (tempi2 == 0 || tempi2 == 2 || tempi2 == 4 || tempi2 == 6 || tempi2 == 8)
  425. {
  426. return sss.Substring(0, 5);
  427. }
  428. else
  429. {
  430. return sd.ToString("0.00");
  431. }
  432. }
  433. }
  434. }
  435. }
  436. return sss;
  437. }
  438. private void cmbColumns_SelectedIndexChanged(object sender, EventArgs e)
  439. {
  440. if (cmbColumns.SelectedItem == null) return;
  441. KeyValuePair<string, Type> obj = (KeyValuePair<string, Type>)cmbColumns.SelectedItem;
  442. if (DictComboBox.ContainsKey(obj.Key))
  443. {
  444. Type selectType = DictComboBox[obj.Key];
  445. switch (selectType.ToString())
  446. {
  447. case "System.DateTime":
  448. UseDateTimeControl();
  449. break;
  450. case "System.Double":
  451. case "System.Int64":
  452. case "System.Int32":
  453. UseNormalControl();
  454. //绑定条件ComboBox
  455. combCondition.DataSource = lstIntOrDouble;
  456. break;
  457. case "System.Byte[]":
  458. case "System.String":
  459. default:
  460. UseNormalControl();
  461. //绑定条件ComboBox
  462. combCondition.DataSource = lstText;
  463. break;
  464. }
  465. }
  466. }
  467. /// <summary>
  468. /// 使用时间类型专用的查询控件组
  469. /// </summary>
  470. private void UseDateTimeControl()
  471. {
  472. if (pnlCheck.Controls.Contains(pnlText))
  473. pnlCheck.Controls.Remove(pnlText);
  474. if (!pnlCheck.Controls.Contains(pnlDate))
  475. {
  476. pnlCheck.Controls.Add(pnlDate);
  477. pnlDate.Visible = true;
  478. pnlDate.Dock = DockStyle.Fill;
  479. }
  480. }
  481. /// <summary>
  482. /// 使用标准的查询控件组
  483. /// </summary>
  484. private void UseNormalControl()
  485. {
  486. if (pnlCheck.Controls.Contains(pnlDate))
  487. pnlCheck.Controls.Remove(pnlDate);
  488. if (!pnlCheck.Controls.Contains(pnlText))
  489. {
  490. pnlCheck.Controls.Add(pnlText);
  491. pnlText.Visible = true;
  492. pnlText.Dock = DockStyle.Fill;
  493. }
  494. }
  495. private void btnFind_Click(object sender, EventArgs e)
  496. {
  497. if (cmbColumns.SelectedValue == null)
  498. {
  499. return;
  500. }
  501. //0.获取数据源数据
  502. this.RefreshData();
  503. //1.合法性检测
  504. if (DictComboBox[cmbColumns.SelectedValue.ToString()].ToString().Equals("System.DateTime"))
  505. {
  506. if (dtpTarget.Value < dtpSource.Value)
  507. {
  508. MessageBox.Show("查询时间需要一个有效的时间范围!");
  509. return;
  510. }
  511. }
  512. else
  513. {
  514. if (this.txtFind.Text.Trim() == "") //为空 认为是取消查询
  515. {
  516. btnCancelFind_Click(sender, e);
  517. return;
  518. }
  519. }
  520. //2.将datagridview中满足条件的项修改背景色
  521. //2.1 判断当前显示的datagridview是否含有旧的查询数据
  522. //2.2 将满足条件的项背景色改为特殊颜色
  523. for (int index = dgvSyncData.Rows.Count - 1; 0 <= index; --index)
  524. {
  525. DataGridViewRow row = dgvSyncData.Rows[index];
  526. //查询列的当前值
  527. string strGuid = row.Cells["GridGuid"].Value.ToString();
  528. if (DictField.Count > 0)
  529. {
  530. var query = DictField.Where(s => s.Value == cmbColumns.SelectedValue.ToString());
  531. if (query.Count() == 1)
  532. {
  533. string strValue = row.Cells[query.ElementAtOrDefault(0).Key].Value.ToString();
  534. //判断是否满足条件
  535. if (false == CheckMatchCondition(strValue))
  536. {
  537. dgvSyncData.Rows.RemoveAt(index);
  538. }
  539. }
  540. }
  541. else
  542. {
  543. string strValue = row.Cells[cmbColumns.SelectedValue.ToString()].Value.ToString();
  544. //判断是否满足条件
  545. if (false == CheckMatchCondition(strValue))
  546. {
  547. dgvSyncData.Rows.RemoveAt(index);
  548. }
  549. }
  550. }
  551. }
  552. private bool CheckMatchCondition(string strValue)
  553. {
  554. if (DictComboBox[cmbColumns.SelectedValue.ToString()].ToString().Equals("System.DateTime"))
  555. {
  556. DateTime dt = DateTime.Now;
  557. if (!DateTime.TryParse(strValue, out dt)) return false;
  558. DateTime dtSource = dtpSource.Value;
  559. DateTime dtTarget = dtpTarget.Value;
  560. DateTime dtValue = dt;
  561. if (dt >= dtSource && dt <= dtTarget)
  562. return true;
  563. else
  564. return false;
  565. }
  566. else
  567. {
  568. string strFindText = this.txtFind.Text.ToString();
  569. bool bReturn = false;
  570. try
  571. {
  572. switch (combCondition.SelectedValue.ToString())
  573. {
  574. case "等于":
  575. bReturn = strValue == strFindText ? true : false;
  576. break;
  577. case "不等于":
  578. bReturn = strValue != strFindText ? true : false;
  579. break;
  580. case "包含":
  581. bReturn = strValue.Contains(strFindText) ? true : false;
  582. break;
  583. case "不包含":
  584. bReturn = !strValue.Contains(strFindText) ? true : false;
  585. break;
  586. case "大于":
  587. bReturn = Convert.ToDouble(strValue) > Convert.ToDouble(strFindText) ? true : false;
  588. break;
  589. case "不小于":
  590. bReturn = Convert.ToDouble(strValue) >= Convert.ToDouble(strFindText) ? true : false;
  591. break;
  592. case "小于":
  593. bReturn = Convert.ToDouble(strValue) < Convert.ToDouble(strFindText) ? true : false;
  594. break;
  595. case "不大于":
  596. bReturn = Convert.ToDouble(strValue) <= Convert.ToDouble(strFindText) ? true : false;
  597. break;
  598. }
  599. }
  600. catch (Exception ex)
  601. {
  602. AppLog.Error(ex.Message);
  603. bReturn = false;
  604. }
  605. return bReturn;
  606. }
  607. }
  608. /// <summary>
  609. /// 获得查询语句(非日期类型)
  610. /// </summary>
  611. /// <param name="strColumnName"></param>
  612. /// <param name="strColumnType"></param>
  613. /// <param name="strCondition"></param>
  614. /// <param name="strValue"></param>
  615. /// <returns></returns>
  616. private string GetSelectString(string strColumnName, string strCondition, string strValue)
  617. {
  618. string strCondi = "";
  619. switch (strCondition)
  620. {
  621. case "等于":
  622. strCondi = "=";
  623. break;
  624. case "不等于":
  625. strCondi = "<>";
  626. break;
  627. case "包含":
  628. strCondi = "like";
  629. break;
  630. case "不包含":
  631. strCondi = "not like";
  632. break;
  633. case "大于":
  634. strCondi = ">";
  635. break;
  636. case "不小于":
  637. strCondi = ">=";
  638. break;
  639. case "小于":
  640. strCondi = "<";
  641. break;
  642. case "不大于":
  643. strCondi = "<=";
  644. break;
  645. }
  646. if (strCondi == "like" || strCondi == "not like")
  647. return string.Format("{0} {1} '%{2}%'", strColumnName, strCondi, strValue);
  648. else
  649. return string.Format("{0} {1} '{2}'", strColumnName, strCondi, strValue);
  650. }
  651. private void btnCancelFind_Click(object sender, EventArgs e)
  652. {
  653. foreach (DataGridViewRow dgvrow in dgvSyncData.Rows)
  654. {
  655. if (dgvrow.Cells[0].Value != null && dgvrow.Cells[0].Value.ToString() == "True")
  656. dgvrow.Cells[0].Value = false;
  657. if (dgvrow.Index % 2 == 1)
  658. {
  659. dgvrow.DefaultCellStyle.BackColor = Color.WhiteSmoke;
  660. }
  661. else
  662. {
  663. dgvrow.DefaultCellStyle.BackColor = Color.White;
  664. }
  665. }
  666. }
  667. private void dgvSyncData_CellValueChanged(object sender, DataGridViewCellEventArgs e)
  668. {
  669. //只有第一列“选择列”时触发
  670. if (e.ColumnIndex == 0)
  671. {
  672. if (dgvSyncData.Rows[e.RowIndex].Cells[0].Value.ToString() == "True")
  673. dgvSyncData.Rows[e.RowIndex].DefaultCellStyle.BackColor = FinedBackColor;
  674. else
  675. {
  676. if (e.RowIndex % 2 == 1)
  677. {
  678. dgvSyncData.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.WhiteSmoke;
  679. }
  680. else
  681. {
  682. dgvSyncData.Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.White;
  683. }
  684. }
  685. }
  686. }
  687. public void WriteMsgToRichTextBox(string strMsg)
  688. {
  689. Invoke(new MethodInvoker(delegate ()
  690. {
  691. this.rtxtLog.Text += string.Format("{0} 日期: {1}\n", strMsg,DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"));
  692. }));
  693. }
  694. /// <summary>
  695. ///
  696. /// </summary>
  697. /// <param name="message"></param>
  698. private void WriteSyncTime(DateTime time)
  699. {
  700. try
  701. {
  702. /* 创建文件夹 */
  703. string logDirectory = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Cache");
  704. if (!Directory.Exists(logDirectory))
  705. {
  706. Directory.CreateDirectory(logDirectory);
  707. }
  708. /* 更新时间 */
  709. string file = Path.Combine(logDirectory, $"SyncTime.bin");
  710. Dictionary<string, string> times = this.ReadSyncTime() ?? new Dictionary<string, string>();
  711. if (true == times.ContainsKey(this.syncInstrumentItem.Code))
  712. {
  713. times[this.syncInstrumentItem.Code] = time.ToString("yyyy-MM-dd HH:mm:ss");
  714. }
  715. else
  716. {
  717. times.Add(this.syncInstrumentItem.Code, time.ToString("yyyy-MM-dd HH:mm:ss"));
  718. }
  719. /* 写入文件 */
  720. File.WriteAllText(file, JsonConvert.SerializeObject(times, Formatting.Indented));
  721. }
  722. catch (Exception exception)
  723. {
  724. Invoke(new MethodInvoker(delegate ()
  725. {
  726. this.rtxtLog.Text += $"记录同步时间出错!错误信息:{exception.Message} 日期: {DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}\n";
  727. }));
  728. }
  729. }
  730. /// <summary>
  731. ///
  732. /// </summary>
  733. private Dictionary<string, string> ReadSyncTime()
  734. {
  735. Dictionary<string, string> times = null;
  736. if (File.Exists(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Cache", $"SyncTime.bin")))
  737. {
  738. try
  739. {
  740. using (StreamReader reader = new StreamReader(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Cache", $"SyncTime.bin"), Encoding.UTF8))
  741. {
  742. try
  743. {
  744. string json = reader.ReadToEnd();
  745. times = JsonConvert.DeserializeObject<Dictionary<string, string>>(json);
  746. }
  747. catch
  748. {
  749. }
  750. finally
  751. {
  752. reader.Close();
  753. reader.Dispose();
  754. }
  755. }
  756. }
  757. catch (Exception exception)
  758. {
  759. Debug.WriteLine(exception.Message);
  760. }
  761. }
  762. return times;
  763. }
  764. }
  765. }