CtrlCgRes.cs 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216
  1. using DevExpress.Mvvm.Native;
  2. using DevExpress.XtraSpreadsheet.Model;
  3. using DW5S.DTO;
  4. using DW5S.Entity;
  5. using DW5S.Repostory;
  6. using DW5S.ViewModel;
  7. using DxHelper;
  8. using ExtensionsDev;
  9. using Microsoft.EntityFrameworkCore;
  10. using System;
  11. using System.Collections.Generic;
  12. using System.Diagnostics;
  13. using System.IO;
  14. using System.Linq;
  15. using System.Threading.Tasks;
  16. using XdCxRhDW5S.ViewModel;
  17. namespace DW5S.App.UserControl
  18. {
  19. public partial class CtrlCgRes : DevExpress.XtraEditors.XtraUserControl
  20. {
  21. List<CgResViewModel> list = new List<CgResViewModel>();
  22. public CtrlCgRes()
  23. {
  24. InitializeComponent();
  25. this.layoutControl1.UseDefault();
  26. this.ctrlPage1.Compact = false;
  27. this.ctrlPage1.AlignRight = true;
  28. this.ctrlPage1.ShowGoto = true;
  29. }
  30. private async void CtrlCgRes_Load(object sender, EventArgs e)
  31. {
  32. try
  33. {
  34. ctrlPage1.SetOnQuery(LoadPageData);
  35. txtStartTime.UseDefault();
  36. txtEndTime.UseDefault();
  37. gridCg.UseDefault(list, showScrollH: true).UseMultiSelect().UseRowNumber().UseDeleteAsync<CgRes>(DelCg);
  38. var unitOfWork = IocContainer.UnitOfWork;
  39. var repsTask = unitOfWork.Of<TaskInfo>();
  40. var tskLists = await repsTask.GetAllAsync(p => p.UpdateTime);
  41. this.txtTask.UseDefault().SetData(tskLists.To<List<TaskViewModel>>(), nameof(TaskViewModel.TaskName)).UseDoubleClickToSelectAll();
  42. }
  43. catch (Exception ex)
  44. {
  45. string msg = "查询参估结果异常";
  46. IocContainer.Logger.Error(ex, msg);
  47. DxHelper.MsgBoxHelper.ShowError(msg);
  48. }
  49. }
  50. private async Task<bool> DelCg(List<CgRes> selectedRes)
  51. {
  52. try
  53. {
  54. var unitOfWork = IocContainer.UnitOfWork;
  55. var repsCg = unitOfWork.OfLong<CgRes>();
  56. var count = await repsCg.DeleteAsync(selectedRes);
  57. await unitOfWork.SaveAsync();
  58. ctrlPage1.RefreshData();
  59. IocContainer.Logger.Information($"删除选中参估结果,共删除了{count}条参估结果记录");
  60. return true;
  61. }
  62. catch (Exception ex)
  63. {
  64. string msg = "删除参估结果异常";
  65. IocContainer.Logger.Error(ex, msg);
  66. DxHelper.MsgBoxHelper.ShowError(msg);
  67. return false;
  68. }
  69. }
  70. private void txtTimeCho_SelectedIndexChanged(object sender, EventArgs e)
  71. {
  72. switch (txtTimeCho.Text)
  73. {
  74. case "最近1小时":
  75. case "最近6小时":
  76. case "最近12小时":
  77. case "最近1天":
  78. case "最近3天":
  79. itemStart.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Never;
  80. itemEnd.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Never;
  81. break;
  82. case "自定义":
  83. itemStart.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Always;
  84. itemEnd.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Always;
  85. break;
  86. }
  87. }
  88. private void btnSearch_Click(object sender, EventArgs e)
  89. {
  90. if (txtTask.EditValue == null)
  91. {
  92. MsgBoxHelper.ShowError("请选择任务");
  93. return;
  94. }
  95. if (txtTimeCho.SelectedText == "自定义")
  96. {
  97. if (txtStartTime.EditValue == null)
  98. {
  99. DxHelper.MsgBoxHelper.ShowError($"请选择信号开始时间!");
  100. return;
  101. }
  102. if (txtEndTime.EditValue == null)
  103. {
  104. DxHelper.MsgBoxHelper.ShowError($"请选择信号结束时间!");
  105. return;
  106. }
  107. if (txtStartTime.DateTime > txtEndTime.DateTime)
  108. {
  109. DxHelper.MsgBoxHelper.ShowError($"开始时间不能大于结束时间!");
  110. return;
  111. }
  112. if ((txtEndTime.DateTime - txtStartTime.DateTime).TotalDays > 10)
  113. {
  114. MsgBoxHelper.ShowWarning("时间跨度不能超过10天!");
  115. return;
  116. }
  117. }
  118. ctrlPage1.RefreshData();
  119. }
  120. private async Task<PageData> LoadPageData(PageQueryDto arg)
  121. {
  122. var unitOfWork = IocContainer.UnitOfWork;
  123. var repsCg = unitOfWork.OfLong<CgRes>();
  124. var queryable = repsCg.AsQueryable();
  125. int? taskID = ((TaskViewModel)txtTask.EditValue)?.Id;
  126. try
  127. {
  128. DateTime start = DateTime.MinValue;
  129. DateTime end = DateTime.MinValue;
  130. if (taskID != null)
  131. {
  132. queryable = queryable.Where(p => p.TaskID == taskID);
  133. }
  134. if (txtTimeCho.Text == "自定义")
  135. {
  136. start = txtStartTime.DateTime;
  137. end = txtEndTime.DateTime;
  138. }
  139. else
  140. {
  141. var max = queryable.OrderByDescending(p => p.SigTime).FirstOrDefault();
  142. if (max != null)
  143. {
  144. end = max.SigTime;
  145. start = end.AddHours(-(int)txtTimeCho.EditValue);
  146. }
  147. }
  148. if (start != DateTime.MinValue)
  149. {
  150. queryable = queryable.Where(w => w.SigTime >= start);
  151. }
  152. if (end != DateTime.MinValue)
  153. {
  154. queryable = queryable.Where(w => w.SigTime <= end);
  155. }
  156. queryable = queryable
  157. .Include(w => w.StationRes)
  158. .OrderByDescending(o => o.SigTime)
  159. .ThenBy(p => p.MainCode);
  160. }
  161. catch (TaskCanceledException) { }
  162. catch (Exception ex)
  163. {
  164. string msg = "参估结果查询异常";
  165. IocContainer.Logger.Error(ex, msg);
  166. MsgBoxHelper.ShowError(msg);
  167. }
  168. var pageData = await repsCg.GetPageData(arg, queryable);
  169. list.Clear();
  170. list.AddRange(pageData.Data.To<List<CgResViewModel>>());
  171. gridView1.RefreshData();
  172. gridView1.BestFitColumns();
  173. return pageData;
  174. }
  175. private void btnDraw_Click(object sender, EventArgs e)
  176. {
  177. try
  178. {
  179. var exeFile = AppConfigHelper.Get("CgDrawExe");
  180. if (string.IsNullOrWhiteSpace(exeFile))
  181. {
  182. MsgBoxHelper.ShowError("请在平台配置文件中设置绘图程序路径CgDrawExe");
  183. return;
  184. }
  185. if (!File.Exists(exeFile))
  186. {
  187. MsgBoxHelper.ShowError($"找不到绘图程序[{exeFile}]");
  188. return;
  189. }
  190. FileInfo f = new FileInfo(exeFile);
  191. var dir = Path.GetDirectoryName(f.FullName);
  192. List<CgRes> data = gridView1.DataController.GetAllFilteredAndSortedRows().OfType<CgRes>().ToList();
  193. var file = data.ToCsvFile($"{dir}\\CgDraw{DateTime.Now:yyyyMMddHHmmss}.csv");
  194. Process.Start(new ProcessStartInfo()
  195. {
  196. FileName = f.FullName,
  197. Arguments = file,
  198. });
  199. }
  200. catch (Exception ex)
  201. {
  202. IocContainer.Logger.Error(ex, "参估绘图异常");
  203. }
  204. }
  205. }
  206. }