# 统计配置功能实现说明 ## 概述 本功能实现了通过StatisticsController动态控制统计消息中的`samples`和`rf`参数,支持根据IP地址为不同客户端设置不同的统计配置。 ## 功能特性 ### 1. 全局统计配置 - 设置默认的`samples`和`rf`值 - 所有未配置特定参数的客户端将使用全局默认值 ### 2. 客户端特定配置 - 根据客户端名称或IP地址设置特定的统计参数 - 支持启用/禁用配置 - 可添加描述信息 ### 3. 动态配置管理 - 通过Web界面实时修改配置 - 配置自动保存到`statistics_config.json`文件 - 支持配置列表查看和编辑 - 支持配置导入/导出功能 ## 页面结构 ### 两个独立页面: 1. **`Statistics/Index.cshtml`** - 统计数据监控页面 - 实时统计数据展示 - 客户端状态监控 - SSE实时数据推送 - 小区详细信息查看 2. **`Statistics/Config.cshtml`** - 统计配置管理页面 - 全局配置管理 - 客户端特定配置 - 配置列表管理 - 配置导入/导出 ## 文件结构 ### 新增文件 - `Models/StatisticsConfig.cs` - 统计配置模型 - `statistics_config.json` - 统计配置文件 - `Views/Statistics/Config.cshtml` - 统计配置管理页面 ### 修改文件 - `Services/LTEClientWebSocket.cs` - 添加统计配置支持 - `Services/WebSocketManagerService.cs` - 添加配置管理功能 - `Controllers/StatisticsController.cs` - 添加配置管理API和Config方法 - `Views/Shared/_Layout.cshtml` - 添加导航菜单链接 ## 核心实现 ### 1. 统计配置模型 ```csharp public class StatisticsConfig { public string IpAddress { get; set; } = string.Empty; public string ClientName { get; set; } = string.Empty; public bool EnableSamples { get; set; } = false; public bool EnableRf { get; set; } = false; public bool IsEnabled { get; set; } = true; public string Description { get; set; } = string.Empty; } public class GlobalStatisticsConfig { public bool DefaultSamples { get; set; } = false; public bool DefaultRf { get; set; } = false; public List ClientConfigs { get; set; } = new List(); } ``` ### 2. WebSocket客户端配置 在`LTEClientWebSocket`类中添加了统计配置字段和方法: ```csharp // 统计配置相关字段 private bool _enableSamples = false; private bool _enableRf = false; // 设置统计配置 public void SetStatisticsConfig(bool enableSamples, bool enableRf) { _enableSamples = enableSamples; _enableRf = enableRf; } // 在UpdateStats方法中使用配置 var msg = new JObject { ["message"] = "stats", ["samples"] = _enableSamples, ["rf"] = _enableRf }; ``` ### 3. 配置管理服务 在`WebSocketManagerService`中添加了配置管理功能: ```csharp // 加载和保存配置 private void LoadStatisticsConfig() private void SaveStatisticsConfig() // 配置管理方法 public GlobalStatisticsConfig GetGlobalStatisticsConfig() public void SetGlobalStatisticsConfig(GlobalStatisticsConfig config) public StatisticsConfig? GetClientStatisticsConfig(string clientName) public void SetClientStatisticsConfig(StatisticsConfig config) public StatisticsConfig? GetStatisticsConfigByIp(string ipAddress) // 应用配置到客户端 private void UpdateClientStatisticsConfig(string clientName) private void UpdateAllClientsStatisticsConfig() ``` ### 4. API接口 在`StatisticsController`中添加了配置管理API: ```csharp [HttpGet] GetGlobalStatisticsConfig() [HttpPost] SetGlobalStatisticsConfig([FromBody] GlobalStatisticsConfig config) [HttpGet] GetClientStatisticsConfig(string clientName) [HttpPost] SetClientStatisticsConfig([FromBody] StatisticsConfig config) [HttpGet] GetStatisticsConfigByIp(string ipAddress) [HttpGet] GetAllClientStatisticsConfigs() public IActionResult Config() // 配置管理页面 ``` ## 使用方法 ### 1. 访问统计数据页面 - 通过导航菜单点击"统计数据"或访问 `/Statistics/Index` - 查看实时统计数据、客户端状态、小区信息等 ### 2. 访问配置管理页面 - 通过导航菜单点击"统计配置"或访问 `/Statistics/Config` - 管理全局配置和客户端特定配置 ### 3. 设置全局配置 - 在"全局统计配置"部分设置默认的samples和rf值 - 点击"保存配置"按钮保存 ### 4. 设置客户端特定配置 - 在"客户端特定配置"部分输入客户端信息 - 设置特定的samples和rf值 - 点击"保存配置"按钮保存 ### 5. 查看配置列表 - 在"配置列表"部分可以看到所有已配置的客户端 - 点击"编辑"按钮可以修改现有配置 - 支持配置导入/导出功能 ## 配置优先级 1. **客户端特定配置** - 如果客户端有特定的配置且启用,则使用该配置 2. **全局默认配置** - 如果客户端没有特定配置,则使用全局默认值 3. **系统默认值** - 如果都没有配置,则使用系统默认值(samples=false, rf=false) ## 配置文件格式 ```json { "defaultSamples": false, "defaultRf": false, "clientConfigs": [ { "ipAddress": "192.168.13.12", "clientName": "TestClient1", "enableSamples": true, "enableRf": false, "isEnabled": true, "description": "测试客户端1 - 启用samples" } ] } ``` ## 页面优势 ### 拆分的好处: 1. **职责分离** - 数据监控和配置管理各司其职 2. **用户体验** - 每个页面功能专注,界面简洁 3. **维护性** - 代码结构清晰,易于维护和扩展 4. **性能** - 避免单个页面过于复杂,加载更快 ## 注意事项 1. 配置修改后会自动应用到所有已连接的客户端 2. 新连接的客户端会自动应用相应的配置 3. 配置文件会在应用启动时自动加载 4. 配置修改会实时保存到文件,重启应用后配置仍然有效 5. 两个页面功能独立,用户可以根据需要分别访问 ## 扩展功能 可以根据需要扩展以下功能: - 配置模板管理 - 配置版本控制 - 配置变更日志 - 批量配置操作 - 配置验证和测试