PCCheck.cs 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225
  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.Threading.Tasks;
  9. using System.Windows.Forms;
  10. using WWPipeLine.MapBasic.Conditions;
  11. using WeifenLuo.WinFormsUI.Docking;
  12. using WWPipeLine.MapBasic;
  13. using SuperMap.Data;
  14. using SuperMap.Mapping;
  15. using Sunny.UI;
  16. using System.IO;
  17. namespace WWPipeLine.MapTools.Conditions.ShuJuChuLi
  18. {
  19. public partial class PCCheck : ConditionPanel
  20. {
  21. DataTable dt = null;
  22. public PCCheck()
  23. {
  24. this.ConditionPanelName = "普查数据检查";
  25. InitializeComponent();
  26. this.SetSize(1000, 600);
  27. this.IsShowResultWindow = false;
  28. this.IsShowPanelFooter = false;
  29. }
  30. protected override void OnLoad(EventArgs e)
  31. {
  32. ComsStatic.setUIDataGridView(uidgv);
  33. uirbtGD.Checked = true;
  34. }
  35. private void uiButton1_Click(object sender, EventArgs e)
  36. {
  37. //if (dt == null || dt.Rows.Count == 0) { Sunny.UI.UIMessageTip.ShowError("请先选择普查表类型"); return; }
  38. OpenFileDialog ofd = new OpenFileDialog { Filter = "CSV文件|*.csv", RestoreDirectory = true, Title = "请选择需要上传的文件" };
  39. if (ofd.ShowDialog() != DialogResult.OK) return;
  40. uidgv.DataSource = ComsStatic.CSVToDataTable(ofd.FileName, uirbnT.Checked);
  41. if (uidgv.Rows.Count == 0) { Sunny.UI.UIMessageTip.ShowError("当前普查数据为空"); return; }
  42. List<string> listPuCha = new List<string>();
  43. foreach (DataGridViewColumn dc in uidgv.Columns)
  44. {
  45. listPuCha.Add(dc.Name);
  46. }
  47. panel1.Controls.Clear(); panel2.Controls.Clear();
  48. foreach (DataRow dr in dt.Rows)
  49. {
  50. string pzKey = dr["pzKey"].ToString();
  51. Point p = new Point(10, uiGroupBox2.Controls.Find("cbxPeiZhi", true).Length * 40);
  52. UILabel cbxPeiZhi = new UILabel() { Name = "cbxPeiZhi", Size = new Size(180, 30), TextAlign = ContentAlignment.MiddleRight, Text = string.Format("{0}对应字段:", pzKey) };
  53. cbxPeiZhi.Location = p;
  54. panel1.Controls.Add(cbxPeiZhi);
  55. UIComboBox cbxPuCha = new UIComboBox() { Name = pzKey, Tag = pzKey, TagString = dr["gxcz"]?.ToString(), DropDownStyle = UIDropDownStyle.DropDownList, Size = new Size(180, 30) };
  56. cbxPuCha.Items.Add("非检查项"); foreach (string pz in listPuCha.ToArray()) { cbxPuCha.Items.Add(pz); }
  57. cbxPuCha.Location = p;
  58. cbxPuCha.SelectedIndex = 0;
  59. panel2.Controls.Add(cbxPuCha);
  60. }
  61. uirbnF.Enabled = false; uirbnT.Enabled = false; uirbtGD.Enabled = false; uirbtGX.Enabled = false; uiButton1.Enabled = false;
  62. }
  63. private void uibtnChengtu_Click(object sender, EventArgs e)
  64. {
  65. if (panel2.Controls.Count == 0 || uidgv.Rows.Count == 0) { Sunny.UI.UIMessageTip.ShowError("请先加载普查数据"); return; }
  66. bool isChecked = true;
  67. foreach (Control c in panel2.Controls)
  68. {
  69. UIComboBox cbx = c as UIComboBox;
  70. if (cbx.TagString != "成图必须字段") continue;
  71. if (cbx.SelectedItem.ToString() == "非检查项")
  72. {
  73. Sunny.UI.UIMessageTip.ShowWarning(cbx.Name + ",该项为成图必须字段,请选择对应的普查字段", 4000);
  74. isChecked = false; break;
  75. }
  76. }
  77. if (isChecked) Sunny.UI.UIMessageTip.ShowOk("成图必须字段检查通过", 2000, false);
  78. }
  79. private void uiButton2_Click(object sender, EventArgs e)
  80. {
  81. if (panel2.Controls.Count == 0 || uidgv.Rows.Count == 0) { Sunny.UI.UIMessageTip.ShowError("请先加载普查数据"); return; }
  82. foreach (Control c in panel2.Controls)
  83. {
  84. UIComboBox cbx = c as UIComboBox;
  85. if (cbx.TagString != "业务关键字段") continue;
  86. if (cbx.SelectedItem.ToString() == "非检查项")
  87. {
  88. Sunny.UI.UIMessageTip.ShowWarning(cbx.Name + ",该项为业务关键字段,请选择对应的普查字段", 4000);
  89. return;
  90. }
  91. }
  92. Sunny.UI.UIMessageTip.ShowOk("业务关键字段检查通过", 2000, false);
  93. }
  94. private void uibtnGdzb_Click(object sender, EventArgs e)
  95. {
  96. if (!uirbtGD.Checked) { Sunny.UI.UIMessageTip.ShowError("此功能仅用于管点表检查"); return; }
  97. StringBuilder sb = new StringBuilder();
  98. foreach (string pzxy in new string[] { "X坐标", "Y坐标" })
  99. {
  100. Control[] cs = panel2.Controls.Find(pzxy, true);
  101. if (cs.Length != 1) { Sunny.UI.UIMessageTip.ShowError(pzxy + "检查配置未发现"); return; }
  102. UIComboBox cbx = cs[0] as UIComboBox;
  103. if (cbx.SelectedItem.ToString() == "非检查项") { Sunny.UI.UIMessageTip.ShowWarning(pzxy + "对应的普查字段未选择"); return; }
  104. DataRow[] drs = dt.Select(string.Format(" pzkey='{0}'", pzxy));
  105. if (drs.Length != 1) { Sunny.UI.UIMessageTip.ShowError(pzxy + "检查配置未发现"); return; }
  106. double valueMax = ComsStatic.StringToDouble(drs[0]["gxczjj"]);
  107. double valueMin = ComsStatic.StringToDouble(drs[0]["gxspjj"]);
  108. foreach (DataGridViewRow dr in uidgv.Rows)
  109. {
  110. double value = ComsStatic.StringToDouble(dr.Cells[cbx.SelectedItem.ToString()].Value);
  111. if (value == 0)
  112. { sb.AppendFormat("第{0}行中,{1}为空\n\r", dr.Index + 1, pzxy); break; }
  113. if (valueMax != 0 && valueMax < value)
  114. { sb.AppendFormat("第{0}行中,{1}的值大于配置项的最大值{2}\n\r", dr.Index + 1, pzxy, valueMax); break; }
  115. if (valueMin != 0 && valueMin > value)
  116. { sb.AppendFormat("第{0}行中,{1}的值小于配置项的最小值{2}\n\r", dr.Index + 1, pzxy, valueMin); break; }
  117. }
  118. }
  119. if (sb.ToString().Length == 0)
  120. Sunny.UI.UIMessageTip.ShowOk("管点坐标检查通过", 2000, false);
  121. else
  122. Sunny.UI.UIMessageTip.ShowError(sb.ToString(), 4000);
  123. }
  124. private void uirbtGX_CheckedChanged(object sender, EventArgs e)
  125. {
  126. string sql = "pzlx='普查数据检查配置' and gxlx='管点表'"; // and valueBefore<>null and pzKey<>null
  127. if (uirbtGX.Checked)
  128. sql = "pzlx='普查数据检查配置' and gxlx='管线表'";
  129. Recordset rd = ComsStatic.dvConfig.Query(sql, CursorType.Static);
  130. dt = ComsStatic.RecordsetToDataTable(rd);
  131. }
  132. private void uibtnGdgc_Click(object sender, EventArgs e)
  133. {
  134. if (!uirbtGD.Checked) { Sunny.UI.UIMessageTip.ShowError("此功能仅用于管点表检查"); return; }
  135. StringBuilder sb = new StringBuilder();
  136. Control[] cs = panel2.Controls.Find("地面高程", true);
  137. if (cs.Length != 1) { Sunny.UI.UIMessageTip.ShowError("地面高程检查配置未发现"); return; }
  138. UIComboBox cbx = cs[0] as UIComboBox;
  139. if (cbx.SelectedItem.ToString() == "非检查项") { Sunny.UI.UIMessageTip.ShowWarning("地面高程对应的普查字段未选择"); return; }
  140. DataRow[] drs = dt.Select(" pzkey='地面高程' ");
  141. if (drs.Length != 1) { Sunny.UI.UIMessageTip.ShowError("地面高程检查配置未发现"); return; }
  142. double valueMax = ComsStatic.StringToDouble(drs[0]["gxczjj"]);
  143. double valueMin = ComsStatic.StringToDouble(drs[0]["gxspjj"]);
  144. foreach (DataGridViewRow dr in uidgv.Rows)
  145. {
  146. double value = ComsStatic.StringToDouble(dr.Cells[cbx.SelectedItem.ToString()].Value);
  147. if (value == 0)
  148. { sb.AppendFormat("第{0}行中,地面高程为空或为0\n\r", dr.Index + 1); break; }
  149. if (valueMax != 0 && valueMax < value)
  150. { sb.AppendFormat("第{0}行中,地面高程的值大于配置项的最大值{1}\n\r", dr.Index + 1, valueMax); break; }
  151. if (valueMin != 0 && valueMin > value)
  152. { sb.AppendFormat("第{0}行中,地面高程的值小于配置项的最小值{1}\n\r", dr.Index + 1, valueMin); break; }
  153. }
  154. if (sb.ToString().Length == 0)
  155. Sunny.UI.UIMessageTip.ShowOk("管点坐标检查通过", 2000, false);
  156. else
  157. Sunny.UI.UIMessageTip.ShowError(sb.ToString(), 4000);
  158. }
  159. private void uibtnGxcz_Click(object sender, EventArgs e)
  160. {
  161. if (!uirbtGX.Checked) { Sunny.UI.UIMessageTip.ShowError("此功能仅用于管线表检查"); return; }
  162. StringBuilder sb = new StringBuilder();
  163. Control[] cs = panel2.Controls.Find("材质", true);
  164. if (cs.Length != 1) { Sunny.UI.UIMessageTip.ShowError("材质检查配置未发现"); return; }
  165. UIComboBox cbx = cs[0] as UIComboBox;
  166. if (cbx.SelectedItem.ToString() == "非检查项") { Sunny.UI.UIMessageTip.ShowWarning("材质对应的普查字段未选择"); return; }
  167. DataRow[] drs = dt.Select(" pzkey='材质' ");
  168. if (drs.Length != 1) { Sunny.UI.UIMessageTip.ShowError("材质检查配置未发现"); return; }
  169. foreach (DataGridViewRow dr in uidgv.Rows)
  170. {
  171. if (string.IsNullOrEmpty(dr.Cells[cbx.SelectedItem.ToString()].Value?.ToString()))
  172. {
  173. sb.AppendFormat("第{0}行中,材质为空\n\r", dr.Index + 1);
  174. }
  175. }
  176. if (sb.ToString().Length == 0)
  177. Sunny.UI.UIMessageTip.ShowOk("材质检查通过", 2000, false);
  178. else
  179. Sunny.UI.UIMessageTip.ShowError(sb.ToString(), 4000);
  180. }
  181. private void uibtnGxgj_Click(object sender, EventArgs e)
  182. {
  183. if (!uirbtGX.Checked) { Sunny.UI.UIMessageTip.ShowError("此功能仅用于管点表检查"); return; }
  184. StringBuilder sb = new StringBuilder();
  185. Control[] cs = panel2.Controls.Find("管径", true);
  186. if (cs.Length != 1) { Sunny.UI.UIMessageTip.ShowError("管径检查配置未发现"); return; }
  187. UIComboBox cbx = cs[0] as UIComboBox;
  188. if (cbx.SelectedItem.ToString() == "非检查项") { Sunny.UI.UIMessageTip.ShowWarning("管径对应的普查字段未选择"); return; }
  189. DataRow[] drs = dt.Select(" pzkey='管径' ");
  190. if (drs.Length != 1) { Sunny.UI.UIMessageTip.ShowError("管径检查配置未发现"); return; }
  191. double valueMax = ComsStatic.StringToDouble(drs[0]["gxczjj"]);
  192. double valueMin = ComsStatic.StringToDouble(drs[0]["gxspjj"]);
  193. foreach (DataGridViewRow dr in uidgv.Rows)
  194. {
  195. double value = ComsStatic.StringToDouble(dr.Cells[cbx.SelectedItem.ToString()].Value);
  196. if (value == 0)
  197. { sb.AppendFormat("第{0}行中,管径为空\n\r", dr.Index + 1); break; }
  198. if (valueMax != 0 && valueMax < value)
  199. { sb.AppendFormat("第{0}行中,管径的值大于配置项的最大值{1}\n\r", dr.Index + 1, valueMax); break; }
  200. if (valueMin != 0 && valueMin > value)
  201. { sb.AppendFormat("第{0}行中,管径的值小于配置项的最小值{1}\n\r", dr.Index + 1, valueMin); break; }
  202. }
  203. if (sb.ToString().Length == 0)
  204. Sunny.UI.UIMessageTip.ShowOk("管径检查通过", 2000, false);
  205. else
  206. Sunny.UI.UIMessageTip.ShowError(sb.ToString(), 4000);
  207. }
  208. }
  209. }