using Microsoft.AspNetCore.Mvc; using LTEMvcApp.Models; using LTEMvcApp.Services; using Microsoft.Extensions.Logging; namespace LTEMvcApp.Controllers { /// /// IP组管理控制器 - 负责IP组网络启动、停止和Key管理 /// [ApiController] [Route("api/[controller]")] public class IpGroupController : ControllerBase { private readonly HttpClientService _httpClientService; private readonly ILogger _logger; public IpGroupController(HttpClientService httpClientService, ILogger logger) { _httpClientService = httpClientService; _logger = logger; } /// /// 启动IP组网络 /// /// 启动网络请求 /// 操作结果 [HttpPost("start")] public async Task StartIpGroup([FromBody] StartIpGroupRequest request) { if (string.IsNullOrEmpty(request.Ip)) return BadRequest("IP地址不能为空"); if (string.IsNullOrEmpty(request.Port)) return BadRequest("端口不能为空"); try { var apiUrl = $"http://{request.Ip}:{request.Port}/api/v1/CellularNetwork/start"; var command = new StartCellularNetworkCommand { Key = request.Key }; _logger.LogInformation("启动IP组网络: {Ip}:{Port}, Key: {Key}", request.Ip, request.Port, request.Key); var response = await _httpClientService.PostJsonAsync(apiUrl, command); _logger.LogInformation("IP组网络启动成功: {Response}", response); return Ok(new { message = "网络启动成功", response }); } catch (Exception ex) { _logger.LogError(ex, "启动IP组网络失败: {Ip}:{Port}", request.Ip, request.Port); return BadRequest($"启动网络失败: {ex.Message}"); } } /// /// 停止IP组网络 /// /// 停止网络请求 /// 操作结果 [HttpPost("stop")] public async Task StopIpGroup([FromBody] StopIpGroupRequest request) { if (string.IsNullOrEmpty(request.Ip)) return BadRequest("IP地址不能为空"); if (string.IsNullOrEmpty(request.Port)) return BadRequest("端口不能为空"); try { var apiUrl = $"http://{request.Ip}:{request.Port}/api/v1/CellularNetwork/stop"; var command = new StopCellularNetworkCommand { Key = request.Key }; _logger.LogInformation("停止IP组网络: {Ip}:{Port}, Key: {Key}", request.Ip, request.Port, request.Key); var response = await _httpClientService.PostJsonAsync(apiUrl, command); _logger.LogInformation("IP组网络停止成功: {Response}", response); return Ok(new { message = "网络停止成功", response }); } catch (Exception ex) { _logger.LogError(ex, "停止IP组网络失败: {Ip}:{Port}", request.Ip, request.Port); return BadRequest($"停止网络失败: {ex.Message}"); } } /// /// 获取网络配置列表 /// /// IP地址 /// 端口 /// 网络配置列表 [HttpGet("network-config")] public async Task GetNetworkConfigs([FromQuery] string ip, [FromQuery] string port) { try { var apiUrl = $"http://{ip}:{port}/api/v1/NetworkConfig"; _logger.LogInformation("获取网络配置: {ApiUrl}", apiUrl); var response = await _httpClientService.GetAsync(apiUrl); _logger.LogInformation("网络配置获取成功"); return Ok(response); } catch (Exception ex) { _logger.LogError(ex, "获取网络配置失败: {Ip}:{Port}", ip, port); return BadRequest($"获取网络配置失败: {ex.Message}"); } } /// /// 添加网络配置(转发) /// [HttpPost("network-config")] public async Task AddNetworkConfig([FromQuery] string ip, [FromQuery] string port, [FromBody] NetworkConfiguration config) { if (string.IsNullOrEmpty(ip) || string.IsNullOrEmpty(port)) return BadRequest("ip和port不能为空"); if (!ModelState.IsValid) return BadRequest(ModelState); try { var apiUrl = $"http://{ip}:{port}/api/v1/NetworkConfig"; var response = await _httpClientService.PostJsonAsync(apiUrl, config); return Content(response, "application/json"); } catch (Exception ex) { _logger.LogError(ex, "添加网络配置失败: {Ip}:{Port}", ip, port); return BadRequest($"添加网络配置失败: {ex.Message}"); } } /// /// 删除网络配置(转发) /// [HttpDelete("network-config/{configKey}")] public async Task DeleteNetworkConfig(string configKey, [FromQuery] string ip, [FromQuery] string port) { if (string.IsNullOrEmpty(ip) || string.IsNullOrEmpty(port)) return BadRequest("ip和port不能为空"); try { var apiUrl = $"http://{ip}:{port}/api/v1/NetworkConfig/{configKey}"; var response = await _httpClientService.DeleteAsync(apiUrl); return Content(response, "application/json"); } catch (Exception ex) { _logger.LogError(ex, "删除网络配置失败: {Ip}:{Port}", ip, port); return BadRequest($"删除网络配置失败: {ex.Message}"); } } } /// /// 启动IP组请求 /// public class StartIpGroupRequest { /// /// IP地址 /// public string Ip { get; set; } = string.Empty; /// /// 端口 /// public string Port { get; set; } = string.Empty; /// /// Key值 /// public string Key { get; set; } = string.Empty; } /// /// 停止IP组请求 /// public class StopIpGroupRequest { /// /// IP地址 /// public string Ip { get; set; } = string.Empty; /// /// 端口 /// public string Port { get; set; } = string.Empty; /// /// Key值 /// public string Key { get; set; } = string.Empty; } }