EditStationDlg2.xaml.cs 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352
  1. using MeterVision.db;
  2. using MeterVision.model;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.IO;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Text.RegularExpressions;
  9. using System.Threading.Tasks;
  10. using System.Windows;
  11. using System.Windows.Controls;
  12. using System.Windows.Data;
  13. using System.Windows.Documents;
  14. using System.Windows.Input;
  15. using System.Windows.Media;
  16. using System.Windows.Media.Imaging;
  17. using System.Windows.Shapes;
  18. namespace MeterVision.Dlg
  19. {
  20. /// <summary>
  21. /// EditStationDlg2.xaml 的交互逻辑
  22. /// </summary>
  23. public partial class EditStationDlg2 : Window
  24. {
  25. public StationItem mStationItem { get; private set; }
  26. private TStandDetail _standDetail;
  27. private bool _can_mark;
  28. public EditStationDlg2(StationItem stationItem)
  29. {
  30. InitializeComponent();
  31. cmbMeterType.ItemsSource = StationItem.MeterTypeList;
  32. cmbFlowRate.ItemsSource = StationItem.FlowRateList;
  33. cmbLastUnit.ItemsSource = StationItem.UnitList;
  34. mStationItem = stationItem;
  35. txtStationId.IsEnabled = false;
  36. Init_Load(stationItem);
  37. Load_image();
  38. }
  39. private void Load_image()
  40. {
  41. _standDetail = DBStand.GetMinSampleTimeDetail(mStationItem.StandId, mStationItem.StationId);
  42. if (_standDetail != null && File.Exists(_standDetail.SrcImage))
  43. {
  44. ucMark.Visibility = Visibility.Visible;
  45. ucMark.SetImagePath(_standDetail.SrcImage);
  46. ucMark.MeterRegion_MarkFinished += UcMark_MeterRegion_MarkFinished;
  47. ucMark.FeatureRegion_MarkFinished += UcMark_FeatureRegion_MarkFinished;
  48. _can_mark = true;
  49. }
  50. else
  51. {
  52. ucMark.Visibility = Visibility.Hidden;
  53. _can_mark = false;
  54. }
  55. if (_can_mark)
  56. {
  57. ucMark.MeterType = mStationItem.MeterType;
  58. if (string.IsNullOrEmpty(mStationItem.LastTime))
  59. {
  60. txtLastTime.Text = _standDetail.SampleTime;
  61. }
  62. }
  63. }
  64. private void UcMark_FeatureRegion_MarkFinished(string regions, int meterType)
  65. {
  66. //throw new NotImplementedException();
  67. this.txtFeatureRegion.Text = regions;
  68. }
  69. private void UcMark_MeterRegion_MarkFinished(string regions, int meterType)
  70. {
  71. //throw new NotImplementedException();
  72. this.txtDialRegion.Text = regions;
  73. }
  74. //加载数据
  75. private void Init_Load(StationItem stationItem)
  76. {
  77. txtStationId.Text = stationItem.StationId;
  78. this.ChangeInfoByMeterType(stationItem.MeterType);
  79. //txtStationName.Text = stationItem.StationName;
  80. cmbMeterType.SelectedValue = stationItem.MeterType;
  81. cmbFlowRate.Text = stationItem.FlowRate.ToString();
  82. txtBrightVal.Text = stationItem.BrightVal.ToString();
  83. txtNumCount.Text = stationItem.NumCount == 0 ? "" : stationItem.NumCount.ToString();
  84. txtIndCount.Text = stationItem.IndCount == 0 ? "" : stationItem.IndCount.ToString();
  85. //txtLastNumUnit.Text = stationItem.LastNumUnit.ToString();
  86. //txtLastIndUnit.Text = stationItem.LastIndUnit.ToString();
  87. txtDialRegion.Text = stationItem.DialRegion;
  88. if (stationItem.MeterType == 1 || stationItem.MeterType == 3 || stationItem.MeterType == 2)
  89. {
  90. cmbLastUnit.SelectedValue = stationItem.LastUnit;
  91. txtFeatureRegion.Text = stationItem.FeatureRegion;
  92. }
  93. txtLastValue.Text = string.IsNullOrEmpty(stationItem.LastTime) ? "" : stationItem.LastValue.ToString();
  94. if(_standDetail != null)
  95. {
  96. txtLastTime.Text = _standDetail.SampleTime;
  97. }
  98. else
  99. {
  100. txtLastTime.Text = stationItem.LastTime;
  101. }
  102. }
  103. private bool Get_Load()
  104. {
  105. bool trySuccess = false;
  106. string stationId = txtStationId.Text.Trim();
  107. if (string.IsNullOrEmpty(stationId))
  108. {
  109. MessageBox.Show("请输入站点ID!");
  110. return false;
  111. }
  112. //string stationName = txtStationName.Text.Trim();
  113. int meterType = -1;
  114. if (cmbMeterType.SelectedItem != null)
  115. {
  116. meterType = (int)cmbMeterType.SelectedValue;
  117. //((KeyValuePair<int, string>)cmbMeterType.SelectedItem).Key;
  118. }
  119. if(meterType == 0)
  120. {
  121. MessageBox.Show("请选择正确的表类型");
  122. return false;
  123. }
  124. int flowRate = -1;
  125. if (cmbFlowRate.SelectedItem != null)
  126. {
  127. flowRate = (int)cmbFlowRate.SelectedValue;
  128. //((KeyValuePair<int, string>)cmbFlowRate.SelectedItem).Key;
  129. }
  130. else
  131. {
  132. trySuccess = int.TryParse(cmbFlowRate.Text.Trim(), out flowRate);
  133. }
  134. if(flowRate == 0)
  135. {
  136. MessageBox.Show("请输入每小时最大流量");
  137. return false;
  138. }
  139. double brightVal = -1;
  140. trySuccess = double.TryParse(txtBrightVal.Text.Trim(),out brightVal);
  141. if(brightVal == 0)
  142. {
  143. brightVal = 1.2;
  144. }
  145. int numCount = -1;
  146. trySuccess = int.TryParse(txtNumCount.Text.Trim(), out numCount);
  147. if((meterType == 1 || meterType == 3) && numCount < 4 )
  148. {
  149. MessageBox.Show("请输入正确的数字个数");
  150. return false;
  151. }
  152. int indCount = -1;
  153. trySuccess = int.TryParse(txtIndCount.Text.Trim(), out indCount);
  154. if(meterType == 2 && indCount < 5)
  155. {
  156. MessageBox.Show("请输入正确的指针个数");
  157. return false;
  158. }
  159. double lastUnit = 0;
  160. if (cmbLastUnit.SelectedValue == null)
  161. {
  162. MessageBox.Show("请选择尾数单位");
  163. return false;
  164. }
  165. lastUnit = (double)cmbLastUnit.SelectedValue;
  166. string dialRegion = txtDialRegion.Text.Trim();
  167. if (string.IsNullOrEmpty(dialRegion))
  168. {
  169. MessageBox.Show("请输入表盘坐标");
  170. return false;
  171. }
  172. string featureRegion = txtFeatureRegion.Text.Trim();
  173. if((meterType == 1 || meterType == 3) && string.IsNullOrEmpty(featureRegion))
  174. {
  175. MessageBox.Show("请输入数字区域 \\ 首位指针坐标");
  176. return false;
  177. }
  178. double lastValue;
  179. trySuccess = double.TryParse(txtLastValue.Text.Trim(), out lastValue);
  180. string lastTime = txtLastTime.Text.Trim();
  181. mStationItem.StationId = stationId;
  182. mStationItem.StationName = ""; // stationName;
  183. mStationItem.MeterType = meterType;
  184. mStationItem.FlowRate = flowRate;
  185. mStationItem.BrightVal = brightVal;
  186. mStationItem.NumCount = numCount;
  187. mStationItem.IndCount = indCount;
  188. mStationItem.LastUnit = 0;
  189. mStationItem.FeatureRegion = "";
  190. if (meterType == 1 || meterType == 3 || meterType == 2)
  191. {
  192. mStationItem.LastUnit = lastUnit;
  193. mStationItem.FeatureRegion = featureRegion;
  194. }
  195. mStationItem.DialRegion = dialRegion;
  196. mStationItem.LastValue = lastValue;
  197. mStationItem.LastTime = lastTime;
  198. return true;
  199. }
  200. private void BtnOK_Click(object sender, RoutedEventArgs e)
  201. {
  202. bool blGet = Get_Load();
  203. if (!blGet)
  204. {
  205. return;
  206. }
  207. TStation tStation = new TStation(mStationItem);
  208. try
  209. {
  210. bool updateSuccess = DBStation.UpdateTStation(tStation);
  211. if (updateSuccess)
  212. {
  213. DialogResult = true;
  214. }
  215. else
  216. {
  217. MessageBox.Show(Application.Current.MainWindow, "修改失败", "错误",
  218. MessageBoxButton.OK, MessageBoxImage.Error);
  219. }
  220. }
  221. catch (Exception ex)
  222. {
  223. MessageBox.Show(Application.Current.MainWindow, $"{ex.Message}", "错误",
  224. MessageBoxButton.OK, MessageBoxImage.Error);
  225. }
  226. }
  227. private void BtnClose_Click(object sender, RoutedEventArgs e)
  228. {
  229. DialogResult = false;
  230. this.Close();
  231. }
  232. private void CmbMeterType_SelectionChanged(object sender, SelectionChangedEventArgs e)
  233. {
  234. int meterType = -1; //= int.Parse(cmbMeterType.SelectedValue.ToString());
  235. //((KeyValuePair<int, string>)cmbMeterType.SelectedItem).Key;
  236. //int.TryParse(cmbMeterType.SelectedValue.ToString(),out meterType);
  237. if (cmbMeterType.SelectedValue != null)
  238. {
  239. meterType = (int)cmbMeterType.SelectedValue;
  240. }
  241. this.ChangeInfoByMeterType(meterType);
  242. //改变仪表的类型
  243. ucMark.MeterType = meterType;
  244. }
  245. private void ChangeInfoByMeterType(int meterType)
  246. {
  247. if (meterType == 1 || meterType == 3)
  248. {
  249. txtLastUnitTitle.Text = "最后一位数字的单位:";
  250. txtFeatureRegionTitle.Text = "数字区域坐标:";
  251. if (meterType == 1)
  252. {
  253. grdIndCount.Width = new GridLength(1, GridUnitType.Star);
  254. grdNumCount.Width = new GridLength(1, GridUnitType.Star);
  255. }
  256. else
  257. {
  258. grdIndCount.Width = new GridLength(0, GridUnitType.Pixel);
  259. grdNumCount.Width = new GridLength(1, GridUnitType.Star);
  260. }
  261. }
  262. else if (meterType == 2)
  263. {
  264. txtLastUnitTitle.Text = "最后一个指针的单位:";
  265. txtFeatureRegionTitle.Text = "首位指针同刻度坐标:";
  266. grdNumCount.Width = new GridLength(0, GridUnitType.Pixel);
  267. grdIndCount.Width = new GridLength(1, GridUnitType.Star);
  268. }
  269. }
  270. private void CmbFlowRate_SelectionChanged(object sender, SelectionChangedEventArgs e)
  271. {
  272. }
  273. private void CmbFlowRate_PreviewTextInput(object sender, TextCompositionEventArgs e)
  274. {
  275. // 只允许数字输入
  276. e.Handled = !Regex.IsMatch(e.Text, @"^\d$");
  277. }
  278. private void TextBox_PreviewTextInput(object sender, TextCompositionEventArgs e)
  279. {
  280. // 如果输入法启用(例如中文输入法),则阻止输入
  281. //if (InputMethod.GetIsInputMethodEnabled)
  282. //{
  283. // e.Handled = true;
  284. // return;
  285. //}
  286. // 只允许数字输入
  287. //e.Handled = !Regex.IsMatch(e.Text, @"^\d$");
  288. // 判断当前输入的字符是否是数字
  289. if (e.Text.All(char.IsDigit))
  290. {
  291. e.Handled = false; // 如果是数字,允许输入
  292. }
  293. else
  294. {
  295. // 如果当前输入的字符不是数字,并且是中文输入法的拼音或候选字,禁止输入
  296. e.Handled = true;
  297. }
  298. }
  299. //-----------------------------------------------------
  300. }
  301. }