using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
using RYB_PTL_API;
using System.Collections.Generic;
using System.Linq;
using WIDESEAWCS_DTO;
using WIDESEAWCS_DTO.TaskInfo;
using WIDESEAWCS_ITaskInfoService;
namespace WIDESEAWCS_Server.Controllers
{
[Route("PTL")]
[ApiController]
public class PTLAPIController : ControllerBase
{
private readonly ITaskService _taskService;
private bool _eventSubscribed = false;
public PTLAPIController(ITaskService taskService)
{
_taskService = taskService;
SubscribeEvent();
}
///
/// 订阅PTL事件
///
private void SubscribeEvent()
{
if (!_eventSubscribed)
{
RYB_PTL.UserResultAvailable += new RYB_PTL.UserResultAvailableEventHandler(RYB_PTL_UserResultAvailable);
_eventSubscribed = true;
}
}
///
/// 取消订阅PTL事件
///
private void UnsubscribeEvent()
{
if (_eventSubscribed)
{
RYB_PTL.UserResultAvailable -= new RYB_PTL.UserResultAvailableEventHandler(RYB_PTL_UserResultAvailable);
_eventSubscribed = false;
}
}
///
/// PTL回调事件处理(只处理手拍事件)
///
private void RYB_PTL_UserResultAvailable(RYB_PTL.RtnValueStruct rs)
{
try
{
if (rs.KeyCode == null)
{
return;
}
// 构建回调数据
var pTLCallBackDTO = new PTLCallBackDTO
{
sIp = rs.Ip,
sTagID = rs.Tagid,
sValue = rs.Number,
sKeyCode = rs.KeyCode,
sLocator = rs.Locator
};
// 根据业务需要构建任务信息
var taskBackLight = new TaskBackLight()
{
TagNo = "B1",
TagCode = pTLCallBackDTO.sLocator,
};
// 调用服务处理手拍事件
_taskService.WMSLightBack(new List { taskBackLight });
UnsubscribeEvent();
}
catch (Exception ex)
{
// 记录日志或处理异常
Console.WriteLine($"处理PTL手拍回调时出错: {ex.Message}");
}
}
///
/// 播种墙下发(一期)
///
[HttpPost, Route("RYB_PTL_CloseDigit5"), AllowAnonymous]
public EPLightContent RYB_PTL_CloseDigit5([FromBody] CloseDigit5DTO request)
{
var content = new EPLightContent();
try
{
bool isConnected = RYB_PTL.RYB_PTL_DspDigit5(
request.sIP,
request.sTagID,
request.iNum,
request.iMode,
request.iColorIndex);
}
catch (Exception ex)
{
return content.Error(ex.Message);
}
return content;
}
///
/// 回调上传
///
///
[HttpPost, Route("RYB_PTL_UserResultAvailable"), AllowAnonymous]
public EPLightContent? RYB_PTL_UserResultAvailable([FromBody] List pTLCallBackDTOs)
{
EPLightContent content = new EPLightContent();
try
{
if (pTLCallBackDTOs == null)
{
return content.Error("传入不能为空");
}
List taskBackLights = pTLCallBackDTOs.Select(x => new TaskBackLight()
{
TagNo = "B1",
TagCode = x.sLocator,
}).ToList();
content = _taskService.WMSLightBack(taskBackLights);
}
catch (Exception ex)
{
content.Error(ex.Message);
}
return content;
}
///
/// 播种墙初始化(一期)
///
///
[HttpPost, Route("RYB_PTL_Connect"), AllowAnonymous]
public EPLightContent RYB_PTL_Connect([FromBody] ConnectDTO request)
{
EPLightContent content = new EPLightContent();
try
{
//RYB_PTL.UserResultAvailable += new RYB_PTL.UserResultAvailableEventHandler(RYB_PTL_UserResultAvailable);
bool isCfg = RYB_PTL.RYB_PTL_InitialConfiguration(new string[,] { { "11.2.30.252", "0001-0016" },{ "11.2.30.252", "1-16" } });
bool isConnected = RYB_PTL.RYB_PTL_Connect(request.sIp, request.iPort);
}
catch (Exception ex)
{
content.Error(ex.Message);
}
return content;
}
///
/// 播种墙结束作业(一期)
///
///
[HttpPost, Route("RYB_PTL_Disconnect"), AllowAnonymous]
public EPLightContent RYB_PTL_Disconnect()
{
EPLightContent content = new EPLightContent();
try
{
bool isDisconnected = RYB_PTL.RYB_PTL_Disconnect();
}
catch (Exception ex)
{
content.Error(ex.Message);
}
return content;
}
///
/// 资源释放(标记为不暴露给Swagger)
///
[ApiExplorerSettings(IgnoreApi = true)]
public void Dispose()
{
UnsubscribeEvent();
}
}
}