2025-11-20 14:44:46 +08:00

146 lines
4.9 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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<ScannerController> _logger;
public ScannerController(IScannerService scannerService, ILogger<ScannerController> logger)
{
_scannerService = scannerService;
_logger = logger;
// 订阅扫码事件
_scannerService.OnScanDataReceived += OnScanDataReceived;
_scannerService.OnScannerError += OnScannerError;
}
[HttpPost("initialize")]
public async Task<IActionResult> 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<IActionResult> 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<IActionResult> 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<IActionResult> 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);
}
/// <summary>
/// 扫码数据接收事件处理
/// </summary>
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, "处理扫码数据事件时发生错误");
}
}
/// <summary>
/// 扫码错误事件处理
/// </summary>
private void OnScannerError(object? sender, string errorMessage)
{
_logger.LogError($"扫码服务错误: {errorMessage}");
// 这里可以记录错误日志、通知运维等
}
}
public class ScanRequest
{
public string ScanCode { get; set; } = string.Empty;
}
}