using CirculateTool.Attribute;
using WcsMain.ApiClient.WMS;
using WcsMain.ApiClient.WMS.Dto;
using WcsMain.Common;
using WcsMain.Constant.Enum.Convey;
using WcsMain.Constant.ExtendMethod;
using WcsMain.DataBase.Dao;
using WcsMain.DataBase.TableEntity;
using WcsMain.EquipOperation.Convey;
namespace WcsMain.CirculationJob.Convey;
///
/// 拣选站台按钮
///
//[Circulation]
public class PickStandButton(AppConveyStandDao conveyStandDao, ConveyOperation conveyOperation, WmsBaseWebApi wmsWebApiPost)
{
private static List? _pickStands; // 拣选站台
///
/// 当拣选站站台按钮按下时上传 wms
///
///
[Circulation("拣选站按钮按下上报", 300)]
public bool UploadInfo()
{
if (_pickStands == default)
{
_pickStands = conveyStandDao.Query(new AppConveyStand() { StandStatus = 1, StandType = (int)ConveyStandTypeEnum.pick });
return true;
}
if (_pickStands.Count < 1)
{
ConsoleLog.Warning($"【提示】无卡特拣选站台信息,监控已经停止");
return false;
}
List tasks = [];
foreach (var pickStand in _pickStands)
{
Thread.Sleep(20);
Task task = new(() =>
{
int pickButtonStatus = conveyOperation.GetAllowPickStandGo(pickStand.StandId!);
if (pickButtonStatus != 1) return;
//ConsoleLog.Info($"【提示】拣选站:{pickStand.StandId} 按钮已经按下");
//conveyOperation.AllowPickStandGo(pickStand.StandId!, 2);
//ConsoleLog.Success($"{pickStand.StandId}按钮按下,调试阶段直接放行");
//return;
// 发送wms按钮按下
ConceyButtonClickRequest request = new()
{
Location = pickStand.StandId,
VehicleNo = "",
Remark = "按钮按下上报"
};
var responseEntity = wmsWebApiPost.HttpPost(request, CommonData.AppApiBaseInfos.GetAddress("UploadPickStandButtonMethod") ?? "", 2000);
if (!responseEntity.IsSend) return; // 发送失败不处理,下一次循环在发送
// 只要发送成功则不再发送
ConsoleLog.Info($"拣选站:{pickStand.StandId} 按钮已经按下上报成功,WMS返回:{responseEntity.ResponseMsg}");
var result = responseEntity.ResponseEntity;
if (result is { Code: 0 })
{
conveyOperation.AllowPickStandGo(pickStand.StandId!, 2);
ConsoleLog.Success($"{pickStand.StandId}按钮按下,放行成功");
}
else
{
conveyOperation.AllowPickStandGo(pickStand.StandId!, 0);
ConsoleLog.Error($"【异常】{pickStand.StandId}按钮按下,wms返回异常:{result?.Message}");
}
});
task.Start();
tasks.Add(task);
}
Task.WaitAll([.. tasks]);
return true;
}
}