using DevExpress.Data; using DevExpress.XtraCharts; using DevExpress.XtraEditors; using DevExpress.XtraExport.Helpers; using DevExpress.XtraGrid.Columns; using DevExpress.XtraGrid.Views.Grid; using DxHelper; using ExtensionsDev; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.Drawing; using System.IO; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows.Controls; using System.Windows.Documents; using System.Windows.Forms; using DW5S.App.Model; using DW5S.Entity; using DW5S.Repostory; namespace DW5S.App.UserControl { public partial class CtrlCgRes : DevExpress.XtraEditors.XtraUserControl { List list = new List(); public CtrlCgRes() { InitializeComponent(); layoutControl1.UseDefault(); txtStartTime.UseDefault(); txtEndTime.UseDefault(); gridCg.UseDefault(list, showScrollH: true).UseDeleteAsync(DelCg); } private async void CtrlCgRes_Load(object sender, EventArgs e) { try { List tskList = new List(); using (RHDWContext db = new RHDWContext()) { tskList = await db.TaskInfos.OrderByDescending(p => p.UpdateTime).ToListAsync(); } this.txtTask.UseDefault().SetData(tskList, nameof(TaskInfo.TaskName)).UseDoubleClickToSelectAll(); } catch (Exception ex) { DW5S.Framework.LogHelper.Error("查询参估结果异常", ex); DxHelper.MsgBoxHelper.ShowError("查询参估结果异常"); } } private async Task DelCg(List selectedRes) { try { var groupItems = selectedRes.GroupBy(p => p.SigTime.ToString("yyyyMMdd")); foreach (var groupItem in groupItems) { var ids = groupItem.Select(m => m.ID).ToList(); using (RHDWPartContext db = RHDWPartContext.GetContext(groupItem.First().SigTime)) { if (db != null) { var list = await db.CgRes.Where(p => ids.Contains(p.ID)).ToListAsync(); db.CgRes.RemoveRange(list); await db.SaveChangesAsync(); } } } return true; } catch (Exception ex) { DW5S.Framework.LogHelper.Error("删除参估结果异常", ex); DxHelper.MsgBoxHelper.ShowError("删除参估结果异常"); return false; } } private void txtTimeCho_SelectedIndexChanged(object sender, EventArgs e) { switch (txtTimeCho.Text) { case "最近1小时": case "最近6小时": case "最近12小时": case "最近1天": case "最近3天": itemStart.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Never; itemEnd.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Never; break; case "自定义": itemStart.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Always; itemEnd.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Always; break; } } private async void btnSearch_Click(object sender, EventArgs e) { if (txtTask.EditValue == null) { MsgBoxHelper.ShowError("请选择任务"); return; } if (txtTimeCho.SelectedText == "自定义") { if (txtStartTime.EditValue == null) { DxHelper.MsgBoxHelper.ShowError($"请选择信号开始时间!"); return; } if (txtEndTime.EditValue == null) { DxHelper.MsgBoxHelper.ShowError($"请选择信号结束时间!"); return; } if (txtStartTime.DateTime > txtEndTime.DateTime) { DxHelper.MsgBoxHelper.ShowError($"开始时间不能大于结束时间!"); return; } if ((txtEndTime.DateTime - txtStartTime.DateTime).TotalDays > 10) { MsgBoxHelper.ShowWarning("时间跨度不能超过10天!"); return; } } list = await searchPos(); this.gridCg.DataSource = list; gridView1.BestFitColumns(); GC.Collect(); } private async Task> searchPos() { try { DateTime start = DateTime.MinValue; DateTime end = DateTime.MinValue; if (txtTimeCho.Text == "自定义") { start = txtStartTime.DateTime; end = txtEndTime.DateTime; } else { var dir = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "DbPart"); if (!Directory.Exists(dir)) return new List(); var yearDirs = Directory.EnumerateDirectories(dir).OrderByDescending(p => Convert.ToInt32(new DirectoryInfo(p).Name));//年目录,倒叙排列 foreach (var yearDir in yearDirs) { //每一天的db文件,倒序排列 var dayFiles = Directory.EnumerateFiles(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, yearDir), "*.db").OrderByDescending(p => Convert.ToInt32(new DirectoryInfo(p).Name.Substring(0, 4))); foreach (var dayFile in dayFiles) { using (RHDWPartContext db = RHDWPartContext.GetContext(dayFile)) { if (db == null) continue; if (db.CgRes.Any(p => p.TaskID == ((TaskInfo)txtTask.EditValue).ID)) end = await db.CgRes.Where(p => p.TaskID == ((TaskInfo)txtTask.EditValue).ID).MaxAsync(p => p.SigTime); } if (end != DateTime.MinValue) { start = end.AddHours(-(int)txtTimeCho.EditValue); goto skip; } } } } skip: if (end == DateTime.MinValue) { return new List();//没有数据不查询 } DateTime endDay = new DateTime(end.Year, end.Month, end.Day); DateTime startDay = new DateTime(start.Year, start.Month, start.Day); List list = new List(); while (endDay >= startDay) { using (RHDWPartContext db = RHDWPartContext.GetContext(endDay)) { if (db != null) { for (int i = 0; i < 2; i++) { try { var cgRes = await db.CgRes.Where(w => w.SigTime >= start && w.SigTime <= end && w.TaskID == ((TaskInfo)txtTask.EditValue).ID).OrderByDescending(o => o.SigTime).ToListAsync(); list.AddRange(cgRes); break; } catch (Exception ex) { LogHelper.Error($"同步分区表结构异常,Time={endDay:yyyyMMdd}",ex).Wait(5000); db.SyncDb(); } } } } endDay = endDay.AddDays(-1); } return list; } catch (TaskCanceledException) { } catch (Exception ex) { DW5S.Framework.LogHelper.Error("参估结果查询异常", ex); MsgBoxHelper.ShowError("参估结果查询异常"); } return new List(); } private void btnDraw_Click(object sender, EventArgs e) { try { var exeFile = AppConfigHelper.Get("CgDrawExe"); if (string.IsNullOrWhiteSpace(exeFile)) { MsgBoxHelper.ShowError("请在平台配置文件中设置绘图程序路径CgDrawExe"); return; } if (!File.Exists(exeFile)) { MsgBoxHelper.ShowError($"找不到绘图程序[{exeFile}]"); return; } FileInfo f = new FileInfo(exeFile); var dir = Path.GetDirectoryName(f.FullName); List data = gridView1.DataController.GetAllFilteredAndSortedRows().OfType().ToList(); var file = data.ToCsvFile($"{dir}\\CgDraw{DateTime.Now:yyyyMMddHHmmss}.csv"); Process.Start(new ProcessStartInfo() { FileName = f.FullName, Arguments = file, }); } catch (Exception ex) { LogHelper.Error("参估绘图异常", ex).Wait(5000); } } } }