Warning_day.razor 8.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. @page "/warning_day"
  2. @using EasyTemplate.Tool.Entity.App
  3. @using EasyTemplate.Service
  4. @inject WarningService WarningService
  5. @inject NavigationManager Navigation
  6. <PageTitle>预警告统计</PageTitle>
  7. <div class="container-fluid">
  8. <div class="card">
  9. <div class="card-header">
  10. <h5 class="mb-0"><i class="fas fa-chart-line"></i> 预警告统计(35 天累计)</h5>
  11. </div>
  12. <div class="card-body">
  13. @* 筛选条件 *@
  14. <div class="row mb-3">
  15. <div class="col-md-3">
  16. <label class="form-label">油枪 ID</label>
  17. <AntDesign.InputNumber Placeholder="请输入油枪 ID" @bind-Value="@selectedNozzleId" Style="width: 100%" />
  18. </div>
  19. <div class="col-md-3">
  20. <label class="form-label">开始日期</label>
  21. <DatePicker @bind-Value="@startDate" Format="yyyy-MM-dd" Style="width: 100%" />
  22. </div>
  23. <div class="col-md-3">
  24. <label class="form-label">结束日期</label>
  25. <DatePicker @bind-Value="@endDate" Format="yyyy-MM-dd" Style="width: 100%" />
  26. </div>
  27. <div class="col-md-3 d-flex align-items-end">
  28. <button class="btn btn-primary me-2" @onclick="LoadDataAsync">
  29. <i class="fas fa-search"></i> 查询
  30. </button>
  31. <button class="btn btn-secondary" @onclick="ResetFilter">
  32. <i class="fas fa-redo"></i> 重置
  33. </button>
  34. </div>
  35. </div>
  36. @* 统计信息 *@
  37. @if (statisticsList.Count > 0)
  38. {
  39. <div class="alert alert-info">
  40. <i class="fas fa-info-circle"></i>
  41. 共查询到 @statisticsList.Count 条记录,统计范围:@startDate?.ToString("yyyy-MM-dd") 至 @endDate?.ToString("yyyy-MM-dd")
  42. </div>
  43. }
  44. @* 数据表格 *@
  45. <Spin Spinning="@loading">
  46. <Table TItem="WarningStatistics" DataSource="@statisticsList" ScrollY="600px" Bordered="true" Size="TableSize.Small">
  47. <ColumnDefinitions Context="row">
  48. <PropertyColumn TItem="WarningStatistics" TProp="int" Align="ColumnAlign.Center" Property="c=>c.nozzle" Title="油枪 ID" Width="80" />
  49. <PropertyColumn TItem="WarningStatistics" TProp="DateOnly" Align="ColumnAlign.Center" Property="c=>c.statistics_date" Title="统计日期" Width="100">
  50. @{ var statDate = row.statistics_date.ToString("yyyy-MM-dd"); }
  51. @statDate
  52. </PropertyColumn>
  53. <PropertyColumn TItem="WarningStatistics" TProp="int" Align="ColumnAlign.Center" Property="c=>c.daily_overproof_alert" Title="严重超标" Width="90" />
  54. <PropertyColumn TItem="WarningStatistics" TProp="int" Align="ColumnAlign.Center" Property="c=>c.daily_overproof" Title="超标" Width="80" />
  55. <PropertyColumn TItem="WarningStatistics" TProp="int" Align="ColumnAlign.Center" Property="c=>c.daily_total" Title="有效" Width="80" />
  56. <PropertyColumn TItem="WarningStatistics" TProp="int" Align="ColumnAlign.Center" Title="严重超标率" Width="100">
  57. @{
  58. var dailyAlertRate = row.daily_overproofrate_alert;
  59. }
  60. @dailyAlertRate%
  61. </PropertyColumn>
  62. <PropertyColumn TItem="WarningStatistics" TProp="int" Align="ColumnAlign.Center" Title="超标率" Width="90">
  63. @{ var dailyRate = row.daily_overproofrate; }
  64. @dailyRate%
  65. </PropertyColumn>
  66. <PropertyColumn TItem="WarningStatistics" TProp="int" Align="ColumnAlign.Center" Property="c=>c.total_overproof_alert" Title="累计严重超标" Width="90" />
  67. <PropertyColumn TItem="WarningStatistics" TProp="int" Align="ColumnAlign.Center" Property="c=>c.total_overproof" Title="累计超标" Width="80" />
  68. <PropertyColumn TItem="WarningStatistics" TProp="int" Align="ColumnAlign.Center" Property="c=>c.total_count" Title="累计有效" Width="120">
  69. @{
  70. var isAccumulated = row.is_accumulated;
  71. var totalCount = row.total_count;
  72. }
  73. <span class="@(isAccumulated ? "text-success fw-bold" : "text-warning")">
  74. @totalCount
  75. </span>
  76. </PropertyColumn>
  77. <PropertyColumn TItem="WarningStatistics" TProp="int" Align="ColumnAlign.Center" Title="累计严重超标率" Width="100">
  78. @{
  79. var totalAlertRate = row.total_overproofrate_alert;
  80. }
  81. @totalAlertRate%
  82. </PropertyColumn>
  83. <PropertyColumn TItem="WarningStatistics" TProp="int" Align="ColumnAlign.Center" Title="累计超标率" Width="90">
  84. @{ var totalRate = row.total_overproofrate; }
  85. <span class="fw-bold">@totalRate%</span>
  86. </PropertyColumn>
  87. <PropertyColumn TItem="WarningStatistics" TProp="int" Align="ColumnAlign.Center" Property="c=>c.continue_days" Title="累计天数" Width="80">
  88. @{
  89. var accDays = row.continue_days;
  90. }
  91. @accDays 天
  92. </PropertyColumn>
  93. <PropertyColumn TItem="WarningStatistics" TProp="int" Align="ColumnAlign.Center" Property="c=>c.daily_overproof_2" Title="超标2" Width="90" />
  94. <PropertyColumn TItem="WarningStatistics" TProp="int" Align="ColumnAlign.Center" Property="c=>c.total_overproof_2" Title="累计超标 2" Width="90" />
  95. <PropertyColumn TItem="WarningStatistics" TProp="int" Align="ColumnAlign.Center" Title="超标率2" Width="100">
  96. @{
  97. var dailyRate2 = row.daily_overproofrate_2;
  98. }
  99. @dailyRate2%
  100. </PropertyColumn>
  101. <PropertyColumn TItem="WarningStatistics" TProp="int" Align="ColumnAlign.Center" Title="累计超标率2" Width="100">
  102. @{ var totalRate2 = row.total_overproofrate_2; }
  103. @totalRate2%
  104. </PropertyColumn>
  105. </ColumnDefinitions>
  106. </Table>
  107. </Spin>
  108. </div>
  109. </div>
  110. </div>
  111. @code {
  112. private List<WarningStatistics> statisticsList = new();
  113. private bool loading = false;
  114. private int? selectedNozzleId;
  115. private DateOnly? startDate;
  116. private DateOnly? endDate;
  117. protected override async Task OnInitializedAsync()
  118. {
  119. // 初始化默认日期范围为最近 35 天
  120. endDate = DateOnly.FromDateTime(DateTime.Today);
  121. startDate = endDate?.AddDays(-34);
  122. await LoadDataAsync();
  123. }
  124. private void ResetFilter()
  125. {
  126. selectedNozzleId = null;
  127. endDate = DateOnly.FromDateTime(DateTime.Today);
  128. startDate = endDate?.AddDays(-34);
  129. }
  130. private async Task LoadDataAsync()
  131. {
  132. if (startDate == null || endDate == null)
  133. {
  134. return;
  135. }
  136. loading = true;
  137. StateHasChanged();
  138. try
  139. {
  140. var query = new WarningStatisticsQuery
  141. {
  142. NozzleId = selectedNozzleId,
  143. StartDate = startDate,
  144. EndDate = endDate,
  145. PageIndex = 1,
  146. PageSize = 1000
  147. };
  148. statisticsList = await WarningService.GetStatisticsByFilterAsync(query);
  149. // 按日期和油枪排序
  150. statisticsList = statisticsList
  151. .OrderBy(s => s.nozzle)
  152. .ThenByDescending(s => s.statistics_date)
  153. .ToList();
  154. }
  155. catch (Exception ex)
  156. {
  157. Console.WriteLine($"加载统计数据失败:{ex.Message}");
  158. }
  159. finally
  160. {
  161. loading = false;
  162. StateHasChanged();
  163. }
  164. }
  165. }