Product_Wms/WcsMain/CirculationJob/TaskData/ResolveWmsTask.cs

282 lines
11 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 WcsMain.ExtendMethod;
using WcsMain.DataBase.Dao;
using WcsMain.DataBase.TableEntity;
using WcsMain.Common;
using WcsMain.StaticData;
using WcsMain.DataBase.MixDao;
using WcsMain.ApiClient.WMS;
using WcsMain.Common.DataService;
using WcsMain.Constant.Enum.Stacker;
using WcsMain.Constant.Enum.TaskEnum;
using WcsMain.Constant.ExtendMethod;
namespace WcsMain.CirculationJob.TaskData;
/// <summary>
/// WMS任务解析类
/// </summary>
//[Circulation()]
public class ResolveWmsTask(AppWmsTaskDao wmsTaskDao, SendWmsTaskStatus sendWmsTaskStatus, DataBaseData dataBaseData, TaskDao taskDao)
{
/// <summary>
/// 解析WMS任务
/// </summary>
/// <returns></returns>
[Circulation("解析WMS任务转换为WCS任务")]
public bool ResolveTask()
{
List<AppWmsTask>? needResolveTask = wmsTaskDao.Select(new AppWmsTask() { TaskStatus = (int)WmsTaskStatusEnum.create });
if (needResolveTask == default)
{
ConsoleLog.Error("【异常】解析Wms任务时拉取任务列表失败与数据库连接中断");
Thread.Sleep(5000);
return true;
}
needResolveTask.ForEach(ResolveTask);
return true;
}
/// <summary>
/// 解析任务
/// </summary>
/// <param name="resolveTask"></param>
private void ResolveTask(AppWmsTask wmsTask)
{
/* 校验起点终点是否在点位表 */
if (wmsTask.TaskType == (int)WmsTaskTypeEnum.inTask)
{
wmsTask.Origin = string.IsNullOrEmpty(wmsTask.Origin) ? "R" : wmsTask.Origin;
}
if (wmsTask.TaskType == (int)WmsTaskTypeEnum.outTask)
{
wmsTask.Destination = string.IsNullOrEmpty(wmsTask.Destination) ? "C" : wmsTask.Destination;
}
bool checkResult = CommonData.AppLocations.ExistWmsLocation(wmsTask.Origin, wmsTask.Destination);
if (!checkResult)
{
wmsTaskDao.Update(new()
{
TaskId = wmsTask.TaskId,
TaskStatus = (int)WmsTaskStatusEnum.err,
TaskMsg = "不受支持的起点或终点",
EndTime = DateTime.Now
});
if (wmsTask.CreatePerson == StaticString.WMS)
{
sendWmsTaskStatus.SendTaskErr(wmsTask.TaskId, "不受支持的起点或终点");
}
return;
}
/* 解析任务转换为WCS任务一般根据项目此处自定义规则 */
TransToWcsTask(wmsTask);
}
/// <summary>
/// 处理WMS任务插入WCS任务
/// </summary>
/// <param name="task"></param>
/// <returns></returns>
private void TransToWcsTask(AppWmsTask task)
{
switch (task.TaskType)
{
case (int)WmsTaskTypeEnum.inTask:// 入库
TransInTaskToWcsTask(task);
break;
case (int)WmsTaskTypeEnum.outTask:// 出库
TransOutTaskToWcsTask(task);
break;
case (int)WmsTaskTypeEnum.moveTask:// 移库
TransMoveTaskToWcsTask(task);
break;
case (int)WmsTaskTypeEnum.pick:// 拣选
TransPickTaskToWcsTask(task);
break;
default: // 其他任务,未识别的任务类型,直接报错
TransOtherTaskToWcsTask(task);
break;
};
}
/// <summary>
/// 转换入库任务
/// </summary>
/// <param name="wmsTask"></param>
/// <returns></returns>
private void TransInTaskToWcsTask(AppWmsTask wmsTask)
{
AppLocation? wcsOrigin = CommonData.AppLocations.DetailWithWmsLocation(wmsTask.Origin);
AppLocation? wcsDestination = CommonData.AppLocations.DetailWithWmsLocation(wmsTask.Destination);
if (wcsOrigin == default || wcsDestination == default) { return; }
int? plcId = dataBaseData.GetNewPlcTaskId();
if (plcId == default) { return; }
AppWcsTask wcsTask = new()
{
PlcId = plcId,
TaskId = wmsTask.TaskId,
TaskType = (int)WcsTaskTypeEnum.inTask,
TaskSort = 1,
TaskStatus = (int)WcsTaskStatusEnum.create,
TaskCategory = (int)TaskCategoryEnum.stacker,
Origin = wcsOrigin!.WcsLocation,
Destination = wcsDestination.WcsLocation,
VehicleNo = wmsTask.VehicleNo,
PlcVehicleNo = wmsTask.VehicleNo.ToPlcVehicleNo(),
Priority = wmsTask.Priority,
VehicleSize = wmsTask.VehicleSize,
Weight = wmsTask.Weight,
WmsTime = wmsTask.CreateTime,
CreatePerson = wmsTask.CreatePerson,
CreateTime = DateTime.Now,
};
/* 插入新任务同时更新 wms 任务为排队中 */
string? errMessage = taskDao.CreateWcsTask(wcsTask);
if (string.IsNullOrWhiteSpace(errMessage))
{
ConsoleLog.Info($"【提示】任务:{wmsTask.TaskId} 已经进入队列");
return;
}
ConsoleLog.Warning($"【警告】任务:{wmsTask.TaskId} 无法处理,异常信息:{errMessage}");
return;
}
/// <summary>
/// 转换出库任务
/// </summary>
/// <param name="wmsTask"></param>
/// <returns></returns>
private void TransOutTaskToWcsTask(AppWmsTask wmsTask)
{
AppLocation? wcsOrigin = CommonData.AppLocations.DetailWithWmsLocation(wmsTask.Origin);
AppLocation? wcsDestination = CommonData.AppLocations.DetailWithWmsLocation(wmsTask.Destination);
if (wcsOrigin == default || wcsDestination == default) { return; }
int? plcId = dataBaseData.GetNewPlcTaskId();
if (plcId == default) { return; }
AppWcsTask wcsTask = new()
{
PlcId = plcId,
TaskId = wmsTask.TaskId,
TaskType = (int)WcsTaskTypeEnum.outTask,
TaskSort = 1,
TaskStatus = (int)WcsTaskStatusEnum.create,
TaskCategory = (int)TaskCategoryEnum.stacker,
Origin = wcsOrigin.WcsLocation,
Destination = wcsDestination.WcsLocation,
VehicleNo = wmsTask.VehicleNo,
PlcVehicleNo = wmsTask.VehicleNo.ToPlcVehicleNo(),
Priority = wmsTask.Priority,
VehicleSize = wmsTask.VehicleSize,
Weight = wmsTask.Weight,
WmsTime = wmsTask.CreateTime,
CreatePerson = wmsTask.CreatePerson,
CreateTime = DateTime.Now,
};
/* 插入新任务同时更新 wms 任务为排队中 */
string? errMessage = taskDao.CreateWcsTask(wcsTask);
if (string.IsNullOrWhiteSpace(errMessage))
{
ConsoleLog.Info($"【提示】任务:{wmsTask.TaskId} 已经进入队列");
return;
}
ConsoleLog.Warning($"【警告】任务:{wmsTask.TaskId} 无法处理,异常信息:{errMessage}");
return;
}
/// <summary>
/// 转换拣选任务
/// </summary>
/// <param name="wmsTask"></param>
/// <returns></returns>
private void TransPickTaskToWcsTask(AppWmsTask wmsTask)
{
AppLocation? wcsOrigin = CommonData.AppLocations.DetailWithWmsLocation(wmsTask.Origin);
AppLocation? wcsDestination = CommonData.AppLocations.DetailWithWmsLocation(wmsTask.Destination);
if (wcsOrigin == default || wcsDestination == default) { return; }
int? plcId = dataBaseData.GetNewPlcTaskId();
if (plcId == default) { return; }
AppWcsTask wcsTask = new()
{
PlcId = plcId,
TaskId = wmsTask.TaskId,
TaskType = (int)WcsTaskTypeEnum.pick,
TaskSort = 1,
TaskStatus = (int)WcsTaskStatusEnum.create,
TaskCategory = (int)TaskCategoryEnum.stacker,
Origin = wcsOrigin.WcsLocation,
Destination = wcsDestination.WcsLocation,
VehicleNo = wmsTask.VehicleNo,
PlcVehicleNo = wmsTask.VehicleNo.ToPlcVehicleNo(),
Priority = wmsTask.Priority,
VehicleSize = wmsTask.VehicleSize,
Weight = wmsTask.Weight,
WmsTime = wmsTask.CreateTime,
CreatePerson = wmsTask.CreatePerson,
CreateTime = DateTime.Now,
};
/* 插入新任务同时更新 wms 任务为排队中 */
string? errMessage = taskDao.CreateWcsTask(wcsTask);
if (string.IsNullOrWhiteSpace(errMessage))
{
ConsoleLog.Info($"【提示】任务:{wmsTask.TaskId} 已经进入队列");
return;
}
ConsoleLog.Warning($"【警告】任务:{wmsTask.TaskId} 无法处理,异常信息:{errMessage}");
return;
}
/// <summary>
/// 转换移库任务
/// </summary>
/// <param name="wmsTask"></param>
/// <returns></returns>
private void TransMoveTaskToWcsTask(AppWmsTask wmsTask)
{
AppLocation? wcsOrigin = CommonData.AppLocations.DetailWithWmsLocation(wmsTask.Origin);
AppLocation? wcsDestination = CommonData.AppLocations.DetailWithWmsLocation(wmsTask.Destination);
if (wcsOrigin == default || wcsDestination == default) { return; }
int? plcId = dataBaseData.GetNewPlcTaskId();
if (plcId == default) { return; }
AppWcsTask wcsTask = new()
{
PlcId = plcId,
TaskId = wmsTask.TaskId,
TaskType = (int)WcsTaskTypeEnum.moveTask,
TaskSort = 1,
TaskStatus = (int)WcsTaskStatusEnum.create,
TaskCategory = (int)TaskCategoryEnum.stacker,
Origin = wcsOrigin.WcsLocation,
Destination = wcsDestination.WcsLocation,
VehicleNo = wmsTask.VehicleNo,
PlcVehicleNo = wmsTask.VehicleNo.ToPlcVehicleNo(),
Priority = wmsTask.Priority,
VehicleSize = wmsTask.VehicleSize,
Weight = wmsTask.Weight,
WmsTime = wmsTask.CreateTime,
CreatePerson = wmsTask.CreatePerson,
CreateTime = DateTime.Now,
};
/* 插入新任务同时更新 wms 任务为排队中 */
string? errMessage = taskDao.CreateWcsTask(wcsTask);
if (string.IsNullOrWhiteSpace(errMessage))
{
ConsoleLog.Info($"【提示】任务:{wmsTask.TaskId} 已经进入队列");
return;
}
ConsoleLog.Warning($"【警告】任务:{wmsTask.TaskId} 无法处理,异常信息:{errMessage}");
return;
}
/// <summary>
/// 转换其他任务
/// </summary>
/// <param name="wmsTask"></param>
/// <returns></returns>
private List<AppWcsTask>? TransOtherTaskToWcsTask(AppWmsTask _)
{
return default;
}
}