using Microsoft.AspNetCore.Mvc; namespace RIZO.Admin.WebApi.Controllers.Mes.Scanner { [ApiController] [Route("api/[controller]")] public class ScannerController : ControllerBase { private readonly IScannerService _scannerService; private readonly ILogger _logger; public ScannerController(IScannerService scannerService, ILogger logger) { _scannerService = scannerService; _logger = logger; // 订阅扫码事件 _scannerService.OnScanDataReceived += OnScanDataReceived; _scannerService.OnScannerError += OnScannerError; } [HttpPost("initialize")] public async Task InitializeScanner([FromBody] ScannerConfig config) { try { var result = await _scannerService.InitializeAsync(config); if (result) { return Ok(new { Success = true, Message = "扫码服务初始化成功" }); } return BadRequest(new { Success = false, Message = "扫码服务初始化失败" }); } catch (Exception ex) { _logger.LogError(ex, "初始化扫码服务时发生错误"); return StatusCode(500, new { Success = false, Message = $"初始化失败: {ex.Message}" }); } } [HttpPost("start")] public async Task StartScanner() { try { var result = await _scannerService.StartAsync(); if (result) { return Ok(new { Success = true, Message = "扫码服务启动成功" }); } return BadRequest(new { Success = false, Message = "扫码服务启动失败" }); } catch (Exception ex) { _logger.LogError(ex, "启动扫码服务时发生错误"); return StatusCode(500, new { Success = false, Message = $"启动失败: {ex.Message}" }); } } [HttpPost("stop")] public async Task StopScanner() { try { var result = await _scannerService.StopAsync(); return Ok(new { Success = result, Message = "扫码服务已停止" }); } catch (Exception ex) { _logger.LogError(ex, "停止扫码服务时发生错误"); return StatusCode(500, new { Success = false, Message = $"停止失败: {ex.Message}" }); } } [HttpPost("process")] public async Task ProcessScanCode([FromBody] ScanRequest request) { try { var result = await _scannerService.ProcessScanCodeAsync(request.ScanCode); return Ok(result); } catch (Exception ex) { _logger.LogError(ex, "处理扫码数据时发生错误"); return StatusCode(500, new ScanResult { Success = false, Message = $"处理失败: {ex.Message}" }); } } [HttpGet("status")] public IActionResult GetScannerStatus() { var status = new { IsConnected = _scannerService.IsConnected, Status = _scannerService.IsConnected ? "运行中" : "已停止", LastUpdate = DateTime.Now }; return Ok(status); } /// /// 扫码数据接收事件处理 /// private void OnScanDataReceived(object? sender, ScanData scanData) { try { _logger.LogInformation($"Controller收到扫码数据: {scanData.Code} (类型: {scanData.CodeType})"); // 这里可以: // 1. 通过SignalR推送到前端 // 2. 更新数据库 // 3. 调用其他服务 // 4. 发送消息到消息队列 // 示例:通过SignalR通知前端 // await _hubContext.Clients.All.SendAsync("ReceiveScanData", scanData); } catch (Exception ex) { _logger.LogError(ex, "处理扫码数据事件时发生错误"); } } /// /// 扫码错误事件处理 /// private void OnScannerError(object? sender, string errorMessage) { _logger.LogError($"扫码服务错误: {errorMessage}"); // 这里可以记录错误日志、通知运维等 } } public class ScanRequest { public string ScanCode { get; set; } = string.Empty; } }