146 lines
4.9 KiB
C#
Raw Normal View History

2025-11-20 14:44:46 +08:00
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;
}
}