wcs_server_kate_suzhou/WcsMain/Business/CirculationTask/Convey/UploadBoxArrive.cs

103 lines
3.9 KiB
C#
Raw Normal View History

using CirculateTool.Attribute;
using System.Text.RegularExpressions;
using WcsMain.ApiClient.DataEntity.WmsEntity;
using WcsMain.Common;
using WcsMain.DataBase.Dao;
using WcsMain.DataBase.TableEntity;
using WcsMain.DataService;
using WcsMain.Enum.Convey;
using WcsMain.EquipOperation.Convey;
using WcsMain.ExtendMethod;
using WcsMain.Plugins;
namespace WcsMain.Business.CirculationTask.Convey;
[Circulation]
public class UploadBoxArrive(AppConveyStandDao conveyStandDao, ConveyOperation conveyOperation, WmsWebApiPost wmsWebApiPost, AppConveyTaskDao conveyTaskDao)
{
private static List<AppConveyStand>? _pickStands; // 拣选站台
/// <summary>
/// 拣选台上报料箱
/// </summary>
/// <returns></returns>
[Circulation("拣选台上报料箱")]
public bool UploadInfo()
{
if (_pickStands == default)
{
_pickStands = conveyStandDao.Query(new AppConveyStand() { StandStatus = 1, StandType = (int)ConveyStandTypeEnum.pick });
return true;
}
if (_pickStands.Count < 1)
{
ConsoleLog.Info($"【提示】无拣选站台信息,监控已经停止");
return false;
}
List<Task> tasks = [];
foreach (AppConveyStand stand in _pickStands)
{
Thread.Sleep(20);
Task task = new(() =>
{
string code = conveyOperation.ReadStandCode(stand.StandId!);
code = Regex.Replace(code, "\\W", "");
if (string.IsNullOrEmpty(code))
{
return;
}
ConsoleLog.Info($"【提示】料箱:{code} 已经到达拣选站台:{stand.Area}");
conveyOperation.ClearStandCodeStatus(stand.StandId!);
// 查询 条码 对应的任务
List<AppConveyTask>? pickTasks = conveyTaskDao.Query(new AppConveyTask()
{
VehicleNo = code,
TaskType = (int)ConveyTaskTypeEnum.pick,
Location = stand.Area
});
if (pickTasks == default || pickTasks.Count < 1)
{
ConsoleLog.Error($"【异常】拣选站台{stand.Area} 料箱:{code} 找不到对应任务");
conveyOperation.ClearStandCodeStatus(stand.StandId!);
return;
}
var pickTask = pickTasks[0]; // 拣选任务
// 更新表内拣选时间和状态
conveyTaskDao.Update(new AppConveyTask()
{
TaskId = pickTask.TaskId,
TaskStatus = (int)ConveyTaskStatusEnum.arrive,
CompleteTime = DateTime.Now,
Remark = "PLC上报料箱到达"
});
// 发送wms料箱到达
UploadPickStandRequest request = new()
{
PickStand = stand.Area,
VehicleNo = pickTask.VehicleNo,
Remark = ""
};
var responseEntity = wmsWebApiPost.HttpPost<UploadPickStandRequest, WmsResponse>(request,
CommonData.AppApiBaseInfos.GetAddress("UploadBoxArrive") ?? "", 5000);
if (responseEntity.IsSend) // 发送失败不处理,下一次循环在发送
{
// 只要发送成功则不再发送
ConsoleLog.Info(
$"拣选站台{stand.Area} 获得对应料箱:{pickTask.VehicleNo} 上报成功WMS返回{responseEntity.ResponseMsg}");
var result = responseEntity.ResponseEntity;
conveyOperation.ClearStandCodeStatus(stand.Area!);
}
});
task.Start();
tasks.Add(task);
}
Task.WaitAll(tasks.ToArray());
return true;
}
}