wcs_server_kate_suzhou/WcsMain/Business/CirculationTask/StackerConvey/CheckAccount.cs

105 lines
4.4 KiB
C#
Raw Permalink 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 WcsMain.Business.CommonAction;
using WcsMain.DataBase.Dao;
using WcsMain.DataBase.TableEntity;
using WcsMain.Enum;
using WcsMain.EquipOperation.Entity;
using WcsMain.EquipOperation.StackerConvey;
namespace WcsMain.Business.CirculationTask.StackerConvey;
/// <summary>
/// 过账PLC任务回告 ---- 库前输送线
/// </summary>
[Circulation]
public class CheckAccount(AppWcsTaskDao wcsTaskDao, StackerConveyOperation stackerConveyOperation, WCSTaskExecuteEvent wcsTaskEvent)
{
/// <summary>
/// PLC过账
/// </summary>
/// <returns></returns>
[Circulation("监控PLC地址过账", 1000)]
public bool CheckAccountTask()
{
List<TaskFeedBackEntity>? taskFeedBackEntities = stackerConveyOperation.GetConveyTaskFeedBackData(20);
if (taskFeedBackEntities == default || taskFeedBackEntities.Count < 1) {return true; }
foreach (TaskFeedBackEntity taskFeedBackEntity in taskFeedBackEntities)
{
if (taskFeedBackEntity.PlcId == 0) { continue; }
List<AppWcsTask>? wcsTasks = wcsTaskDao.Select(new AppWcsTask() { PlcId = taskFeedBackEntity.PlcId });
if (wcsTasks == default)
{
ConsoleLog.Error($"【异常】库前输送过账查询任务数据失败,和数据库服务器连接中断");
Thread.Sleep(2000);
continue; // 网络连接中断
}
if (wcsTasks.Count < 1)
{
ConsoleLog.Warning($"【提示】库前输送过账区获取任务ID{taskFeedBackEntity.PlcId},无关联任务");
stackerConveyOperation.ClearFeedBackData(taskFeedBackEntity); // 清除过账
continue; // 任务无数据
}
var wcsTask = wcsTasks[0];
switch (taskFeedBackEntity.FeedBackType)
{
case (int)TaskFeedBackTypeEnum.cancel: // 任务取消
CancelTask(taskFeedBackEntity, wcsTask);
break;
case (int)TaskFeedBackTypeEnum.complete: // 任务完成
CompleteTask(taskFeedBackEntity, wcsTask);
break;
default:
OtherTaskFeedBackType(taskFeedBackEntity); // 其他任务类型,
break;
}
}
return true;
}
/// <summary>
/// 过账任务取消
/// </summary>
/// <param name="taskFeedBackEntity"></param>
private void CancelTask(TaskFeedBackEntity taskFeedBackEntity, AppWcsTask wcsTask)
{
ConsoleLog.Warning($"【提示】库前输送过账区获取任务ID{taskFeedBackEntity.PlcId},任务已经被取消,后续任务也一并取消,任务号:{wcsTask.TaskId}");
string? cleanAccountErr = stackerConveyOperation.ResetFeedBackData(taskFeedBackEntity); // 清除过账
if (!string.IsNullOrEmpty(cleanAccountErr))
{
ConsoleLog.Warning($"[警告]取消任务清除过账区发生异常,信息:{cleanAccountErr}");
}
/* 执行 WMS 任务异常动作 */
wcsTaskEvent.ErrTaskEvent(wcsTask, "任务被PLC取消");
}
/// <summary>
/// 过账任务完成
/// </summary>
/// <param name="taskFeedBackEntity"></param>
private void CompleteTask(TaskFeedBackEntity taskFeedBackEntity, AppWcsTask wcsTask)
{
ConsoleLog.Tip($"[提示]过账区获取任务ID{taskFeedBackEntity.PlcId},任务已经完成,任务号:{wcsTask.TaskId}");
string? cleanAccountErr = stackerConveyOperation.ResetFeedBackData(taskFeedBackEntity); // 清除过账
if (!string.IsNullOrEmpty(cleanAccountErr))
{
ConsoleLog.Warning($"[警告]完成任务清除过账区发生异常,信息:{cleanAccountErr}");
}
/* 执行 WMS 任务完成动作 */
wcsTaskEvent.CompleteTaskEvent(wcsTask, "PLC上报完成");
}
/// <summary>
/// 其他过账类型
/// </summary>
/// <param name="taskFeedBackEntity"></param>
private void OtherTaskFeedBackType(TaskFeedBackEntity taskFeedBackEntity)
{
ConsoleLog.Warning($"[警告]过账区获取任务ID{taskFeedBackEntity.PlcId},无法识别的过账类型:{taskFeedBackEntity.FeedBackType}");
stackerConveyOperation.ResetFeedBackData(taskFeedBackEntity); // 清除过账
}
}