PCCheck.cs 10 KB

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