using MediatR; using Microsoft.Extensions.Logging; using CellularManagement.Domain.Common; using CellularManagement.Domain.Entities.Device; using CellularManagement.Domain.Repositories; using CellularManagement.Domain.Repositories.Device; namespace CellularManagement.Application.Features.Devices.Commands.CreateDevice; /// /// 创建设备命令处理器 /// public class CreateDeviceCommandHandler : IRequestHandler> { private readonly ICellularDeviceRepository _deviceRepository; private readonly ILogger _logger; /// /// 初始化命令处理器 /// public CreateDeviceCommandHandler( ICellularDeviceRepository deviceRepository, ILogger logger) { _deviceRepository = deviceRepository; _logger = logger; } /// /// 处理创建设备命令 /// public async Task> Handle(CreateDeviceCommand request, CancellationToken cancellationToken) { try { _logger.LogInformation("开始创建设备,设备名称: {DeviceName}, 序列号: {SerialNumber}", request.DeviceName, request.SerialNumber); // 检查序列号是否已存在 if (await _deviceRepository.SerialNumberExistsAsync(request.SerialNumber, cancellationToken)) { _logger.LogWarning("设备序列号已存在: {SerialNumber}", request.SerialNumber); return OperationResult.CreateFailure($"设备序列号 {request.SerialNumber} 已存在"); } // 创建设备实体 var device = CellularDevice.Create( name: request.DeviceName, serialNumber: request.SerialNumber, description: request.Comment, deviceTypeId: request.DeviceTypeId, statusId: request.StatusId, protocolVersionId: request.ProtocolVersionId, firmwareVersion: request.HardwareVersion); // 保存设备 await _deviceRepository.AddDeviceAsync(device, cancellationToken); // 加载导航属性 //await _deviceRepository.LoadNavigationPropertiesAsync(device, cancellationToken); // 构建响应 var response = new CreateDeviceResponse { DeviceId = device.Id, DeviceName = device.Name, SerialNumber = device.SerialNumber, DeviceType = device.DeviceType?.Name ?? "未知", Status = device.Status?.Name ?? "未知", ProtocolVersion = device.ProtocolVersion?.Version ?? "未知", FirmwareVersion = device.FirmwareVersion, CreatedAt = device.CreatedAt }; _logger.LogInformation("设备创建成功,设备ID: {DeviceId}, 设备名称: {DeviceName}, 序列号: {SerialNumber}", device.Id, device.Name, device.SerialNumber); return OperationResult.CreateSuccess(response); } catch (Exception ex) { _logger.LogError(ex, "创建设备时发生错误,设备名称: {DeviceName}, 序列号: {SerialNumber}", request.DeviceName, request.SerialNumber); return OperationResult.CreateFailure($"创建设备时发生错误: {ex.Message}"); } } }