146 lines
4.9 KiB
C#
146 lines
4.9 KiB
C#
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;
|
||
}
|
||
}
|