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

103 lines
3.9 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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 = new();
foreach (AppConveyStand stand in _pickStands)
{
Thread.Sleep(20);
Task task = new(() =>
{
string code = conveyOperation.ReadStandCode(stand.Area!);
code = Regex.Replace(code, "\\W", "");
if (string.IsNullOrEmpty(code))
{
return;
}
ConsoleLog.Info($"【提示】料箱:{code} 已经到达拣选站台:{stand.Area}");
conveyOperation.ClearStandCodeStatus(stand.Area!);
// 查询 条码 对应的任务
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.Area!);
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 UploadPickStandRequest()
{
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;
}
}