using MediatR; using Microsoft.Extensions.Logging; using CellularManagement.Domain.Common; using CellularManagement.Domain.Entities; using CellularManagement.Domain.Repositories; namespace CellularManagement.Application.Features.Devices.Commands.CreateDevice; /// /// 创建设备命令处理器 /// public class CreateDeviceCommandHandler : IRequestHandler> { private readonly IDeviceRepository _deviceRepository; private readonly ILogger _logger; /// /// 初始化命令处理器 /// public CreateDeviceCommandHandler( IDeviceRepository deviceRepository, ILogger logger) { _deviceRepository = deviceRepository; _logger = logger; } /// /// 处理创建设备命令 /// public async Task> Handle(CreateDeviceCommand request, CancellationToken cancellationToken) { try { _logger.LogInformation("Creating new device with serial number: {SerialNumber}", request.SerialNumber); // 检查序列号是否已存在 if (await _deviceRepository.ExistsBySerialNumberAsync(request.SerialNumber, cancellationToken: cancellationToken)) { _logger.LogWarning("Device with serial number {SerialNumber} already exists", request.SerialNumber); return OperationResult.CreateFailure($"设备序列号 {request.SerialNumber} 已存在"); } // 创建设备实体 var device = new Device { DeviceID = Guid.NewGuid().ToString(), DeviceName = request.DeviceName, ProtocolVersion = request.ProtocolVersion, SupportBands = request.SupportBands, HardwareVersion = request.HardwareVersion, SerialNumber = request.SerialNumber, Comment = request.Comment, IPAddress = request.IPAddress, IsDisabled = false, CreatedAt = DateTime.UtcNow, UpdatedAt = DateTime.UtcNow }; // 保存设备 await _deviceRepository.CreateAsync(device, cancellationToken); _logger.LogInformation("Successfully created device with ID: {DeviceId}", device.DeviceID); return OperationResult.CreateSuccess("设备创建成功", device); } catch (Exception ex) { _logger.LogError(ex, "Error creating device with serial number: {SerialNumber}", request.SerialNumber); return OperationResult.CreateFailure($"创建设备时发生错误: {ex.Message}"); } } }