# 运维监控看板功能实现方案 ## 需求概述 在现有 `batch_query.html` 数据看板中新增一个「运维监控」Tab,调用后端新增的 `sp_GetOperationsMonitor()` 存储过程,以表格形式展示每日运营监控数据。 **约束:不影响、不修改任何现有模块代码。** --- ## 整体架构图 ``` 前端 batch_query.html └─ 新增 Tab:📈 运维监控 └─ JSONP 调用: GET /api/dashboard/ops-monitor └─ DashboardController(新增一个 Action,不改现有 Action) └─ ILabelReplaceService(新增接口方法声明) └─ LabelReplaceService(新增实现方法) └─ ILabelReplaceRepository(新增接口方法声明) └─ LabelReplaceRepository(新增实现方法,调用存储过程) └─ MySQL: CALL sp_GetOperationsMonitor() ``` --- ## 数据字段对应关系 存储过程输出字段 → DTO 属性 → 前端列名: | 存储过程字段 | DTO 属性 | 前端列名 | |-----------------|-------------------------|--------------| | 日期 | Date | 日期 | | 当天新增换单数 | DailyNewReplaceCount | 当天新增换单数 | | 累计要换的总单数 | CumulativeTotalCount | 累计要换的总单数 | | 当天应该换单数 | ShouldReplaceCount | 当天应该换单数 | | 当日换单完成数 | DailySuccessCount | 当日换单完成数 | | 当日换单失败数 | DailyFailureCount | 当日换单失败数 | | 当日STOP数 | DailyStopCount | 当日STOP数 | | 24小时换单成功数 | Rate24HourCount | 24H换单成功数 | | 当日标签推送数 | DailyLabelPushCount | 当日标签推送数 | | 当日扫描数 | DailyScanCount | 当日扫描数 | | 当天换单完成率 | DailyCompletionRate | 当天换单完成率 | | 24小时换单率 | Rate24Hour | 24H换单率 | | 数据拉取时间(UTC_5) | DataFetchTime | 数据拉取时间(UTC-5) | --- ## 实施步骤 ### 步骤 1:新增 DTO 类 **文件**:`src/MDL/DTOs/OpsMonitorDto.cs`(新建文件) 定义 `OpsMonitorDto` 类,包含上表中所有属性,与存储过程输出字段一一对应。 ### 步骤 2:Repository 层新增方法 **文件**:`src/DAL/repositories/LabelReplaceRepository.cs`(仅追加,不修改现有代码) 新增方法 `GetOpsMonitorDataAsync()`,实现逻辑: 1. 使用与 `GetDailyLabelStatsChineseAsync` **完全相同的** `MySqlConnection` 方式(硬编码连接字符串、`MySqlCommand`、`ExecuteReaderAsync`) 2. SQL 语句改为 `CALL sp_GetOperationsMonitor();`(调用已部署的存储过程) 3. 通过 `DataReader` 映射字段到 `OpsMonitorDto` 4. 返回 `List` 同步在接口文件 `src/DAL/Interfaces/ILabelReplaceRepository.cs` 中追加方法声明: ```csharp Task> GetOpsMonitorDataAsync(); ``` ### 步骤 3:Service 层新增方法 **文件**:`src/BLL/Services/LabelReplaceService.cs`(仅追加) 新增方法 `GetOpsMonitorDataAsync()`,直接透传调用 Repository 方法。 同步在接口文件 `src/BLL/Interfaces/ILabelReplaceService.cs` 中追加方法声明: ```csharp Task> GetOpsMonitorDataAsync(); ``` ### 步骤 4:Controller 层新增 Action **文件**:`src/CONTROLLER/Controllers/DashboardController.cs`(仅追加) 新增 Action:`GET /api/dashboard/ops-monitor` 实现逻辑(与 `GetDailyLabelStatsChinese` 完全对称): 1. 接收可选 `callback` 参数(JSONP 支持) 2. 调用 `_labelReplaceService.GetOpsMonitorDataAsync()` 3. 统一返回格式 `{ code: 0, message: "success", data: [...] }` 4. 支持 JSONP 包装 ### 步骤 5:前端 batch_query.html 新增 Tab **文件**:`batch_query.html`(新增内容,不修改现有 Tab) #### 5.1 在 `