wcs_server_kate_suzhou/WcsMain/Business/CirculationTask/TaskData/ResolveWmsTask.cs

275 lines
10 KiB
C#
Raw Normal View History

using CirculateTool.Attribute;
2024-05-14 16:30:56 +08:00
using WcsMain.ExtendMethod;
using WcsMain.DataBase.Dao;
using WcsMain.DataBase.TableEntity;
using WcsMain.DataService;
using WcsMain.Business.CommonAction;
using WcsMain.Common;
using WcsMain.StaticData;
2024-06-07 13:10:02 +08:00
using System.Linq.Expressions;
using WcsMain.DataBase.MixDao;
2024-06-12 07:37:08 +08:00
using WcsMain.Enum.Stacker;
using WcsMain.Enum.TaskEnum;
2024-05-14 16:30:56 +08:00
namespace WcsMain.Business.CirculationTask.TaskData;
/// <summary>
/// WMS任务解析类
/// </summary>
[Circulation()]
2024-06-07 13:10:02 +08:00
public class ResolveWmsTask(AppWmsTaskDao wmsTaskDao, SendWmsTaskStatus sendWmsTaskStatus, DataBaseData dataBaseData, TaskDao taskDao)
2024-05-14 16:30:56 +08:00
{
/// <summary>
/// 解析WMS任务
/// </summary>
/// <returns></returns>
[Circulation("解析WMS任务转换为WCS任务")]
public bool ResolveTask()
{
List<AppWmsTask>? needResolveTask = wmsTaskDao.Select(new AppWmsTask() { TaskStatus = (int)WmsTaskStatusEnum.create });
2024-05-14 16:30:56 +08:00
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)
{
/* 校验起点终点是否在点位表 */
bool checkResult = CommonData.AppLocations.ExistWmsLocation(wmsTask.Origin, wmsTask.Destination);
if(!checkResult)
{
wmsTaskDao.Update(new()
2024-05-14 16:30:56 +08:00
{
TaskId = wmsTask.TaskId,
TaskStatus = (int)WmsTaskStatusEnum.err,
TaskMsg = "不受支持的起点或终点",
EndTime = DateTime.Now
});
if(wmsTask.CreatePerson == StaticString.WMS)
{
sendWmsTaskStatus.SendTaskErr(wmsTask.TaskId, "不受支持的起点或终点");
2024-05-14 16:30:56 +08:00
}
return;
}
/* 解析任务转换为WCS任务一般根据项目此处自定义规则 */
2024-06-07 13:10:02 +08:00
TransToWcsTask(wmsTask);
2024-05-14 16:30:56 +08:00
}
/// <summary>
/// 处理WMS任务插入WCS任务
/// </summary>
/// <param name="task"></param>
/// <returns></returns>
2024-06-07 13:10:02 +08:00
private void TransToWcsTask(AppWmsTask task)
2024-05-14 16:30:56 +08:00
{
2024-06-07 13:10:02 +08:00
switch (task.TaskType)
2024-05-14 16:30:56 +08:00
{
2024-06-07 13:10:02 +08:00
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;
2024-05-14 16:30:56 +08:00
};
}
/// <summary>
/// 转换入库任务
/// </summary>
/// <param name="wmsTask"></param>
/// <returns></returns>
2024-06-07 13:10:02 +08:00
private void TransInTaskToWcsTask(AppWmsTask wmsTask)
2024-05-14 16:30:56 +08:00
{
AppLocation? wcsOrigin = CommonData.AppLocations.DetailWithWmsLocation(wmsTask.Origin);
AppLocation? wcsDestination = CommonData.AppLocations.DetailWithWmsLocation(wmsTask.Destination);
2024-06-07 13:10:02 +08:00
if (wcsOrigin == default || wcsDestination == default) { return; }
int? plcId = dataBaseData.GetNewPlcTaskId();
2024-06-07 13:10:02 +08:00
if(plcId == default) { return; }
2024-05-14 16:30:56 +08:00
AppWcsTask wcsTask = new()
{
PlcId = plcId,
TaskId = wmsTask.TaskId,
TaskType = (int)WcsTaskTypeEnum.inTask,
TaskSort = 1,
2024-05-14 16:30:56 +08:00
TaskStatus = (int)WcsTaskStatusEnum.create,
TaskCategory = (int)TaskCategoryEnum.stacker,
2024-05-14 16:30:56 +08:00
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,
};
2024-06-07 13:10:02 +08:00
/* 插入新任务同时更新 wms 任务为排队中 */
string? errMessage = taskDao.CreateWcsTask(wcsTask);
2024-06-07 13:10:02 +08:00
if(string.IsNullOrWhiteSpace(errMessage))
{
ConsoleLog.Info($"【提示】任务:{wmsTask.TaskId} 已经进入队列");
return;
}
ConsoleLog.Warning($"【警告】任务:{wmsTask.TaskId} 无法处理,异常信息:{errMessage}");
return;
2024-05-14 16:30:56 +08:00
}
/// <summary>
/// 转换出库任务
/// </summary>
/// <param name="wmsTask"></param>
/// <returns></returns>
2024-06-07 13:10:02 +08:00
private void TransOutTaskToWcsTask(AppWmsTask wmsTask)
2024-05-14 16:30:56 +08:00
{
AppLocation? wcsOrigin = CommonData.AppLocations.DetailWithWmsLocation(wmsTask.Origin);
AppLocation? wcsDestination = CommonData.AppLocations.DetailWithWmsLocation(wmsTask.Destination);
2024-06-07 13:10:02 +08:00
if (wcsOrigin == default || wcsDestination == default) { return; }
int? plcId = dataBaseData.GetNewPlcTaskId();
2024-06-07 13:10:02 +08:00
if (plcId == default) { return; }
2024-05-14 16:30:56 +08:00
AppWcsTask wcsTask = new()
{
PlcId = plcId,
TaskId = wmsTask.TaskId,
TaskType = (int)WcsTaskTypeEnum.outTask,
TaskSort = 1,
2024-05-14 16:30:56 +08:00
TaskStatus = (int)WcsTaskStatusEnum.create,
TaskCategory = (int)TaskCategoryEnum.stacker,
2024-05-14 16:30:56 +08:00
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,
};
2024-06-07 13:10:02 +08:00
/* 插入新任务同时更新 wms 任务为排队中 */
string? errMessage = taskDao.CreateWcsTask(wcsTask);
2024-06-07 13:10:02 +08:00
if (string.IsNullOrWhiteSpace(errMessage))
{
ConsoleLog.Info($"【提示】任务:{wmsTask.TaskId} 已经进入队列");
return;
}
ConsoleLog.Warning($"【警告】任务:{wmsTask.TaskId} 无法处理,异常信息:{errMessage}");
return;
2024-05-14 16:30:56 +08:00
}
/// <summary>
/// 转换拣选任务
/// </summary>
/// <param name="wmsTask"></param>
/// <returns></returns>
2024-06-07 13:10:02 +08:00
private void TransPickTaskToWcsTask(AppWmsTask wmsTask)
2024-05-14 16:30:56 +08:00
{
AppLocation? wcsOrigin = CommonData.AppLocations.DetailWithWmsLocation(wmsTask.Origin);
AppLocation? wcsDestination = CommonData.AppLocations.DetailWithWmsLocation(wmsTask.Destination);
2024-06-07 13:10:02 +08:00
if (wcsOrigin == default || wcsDestination == default) { return; }
int? plcId = dataBaseData.GetNewPlcTaskId();
2024-06-07 13:10:02 +08:00
if (plcId == default) { return; }
2024-05-14 16:30:56 +08:00
AppWcsTask wcsTask = new()
{
PlcId = plcId,
TaskId = wmsTask.TaskId,
TaskType = (int)WcsTaskTypeEnum.pick,
TaskSort = 1,
2024-05-14 16:30:56 +08:00
TaskStatus = (int)WcsTaskStatusEnum.create,
TaskCategory = (int)TaskCategoryEnum.stacker,
2024-05-14 16:30:56 +08:00
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,
};
2024-06-07 13:10:02 +08:00
/* 插入新任务同时更新 wms 任务为排队中 */
string? errMessage = taskDao.CreateWcsTask(wcsTask);
2024-06-07 13:10:02 +08:00
if (string.IsNullOrWhiteSpace(errMessage))
{
ConsoleLog.Info($"【提示】任务:{wmsTask.TaskId} 已经进入队列");
return;
}
ConsoleLog.Warning($"【警告】任务:{wmsTask.TaskId} 无法处理,异常信息:{errMessage}");
return;
2024-05-14 16:30:56 +08:00
}
/// <summary>
/// 转换移库任务
/// </summary>
/// <param name="wmsTask"></param>
/// <returns></returns>
2024-06-07 13:10:02 +08:00
private void TransMoveTaskToWcsTask(AppWmsTask wmsTask)
2024-05-14 16:30:56 +08:00
{
AppLocation? wcsOrigin = CommonData.AppLocations.DetailWithWmsLocation(wmsTask.Origin);
AppLocation? wcsDestination = CommonData.AppLocations.DetailWithWmsLocation(wmsTask.Destination);
2024-06-07 13:10:02 +08:00
if (wcsOrigin == default || wcsDestination == default) { return; }
int? plcId = dataBaseData.GetNewPlcTaskId();
2024-06-07 13:10:02 +08:00
if (plcId == default) { return; }
2024-05-14 16:30:56 +08:00
AppWcsTask wcsTask = new()
{
PlcId = plcId,
TaskId = wmsTask.TaskId,
TaskType = (int)WcsTaskTypeEnum.moveTask,
TaskSort = 1,
TaskStatus = (int)WcsTaskStatusEnum.create,
TaskCategory = (int)TaskCategoryEnum.stacker,
2024-05-14 16:30:56 +08:00
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,
};
2024-06-07 13:10:02 +08:00
/* 插入新任务同时更新 wms 任务为排队中 */
string? errMessage = taskDao.CreateWcsTask(wcsTask);
2024-06-07 13:10:02 +08:00
if (string.IsNullOrWhiteSpace(errMessage))
{
ConsoleLog.Info($"【提示】任务:{wmsTask.TaskId} 已经进入队列");
return;
}
ConsoleLog.Warning($"【警告】任务:{wmsTask.TaskId} 无法处理,异常信息:{errMessage}");
return;
2024-05-14 16:30:56 +08:00
}
/// <summary>
/// 转换其他任务
/// </summary>
/// <param name="wmsTask"></param>
/// <returns></returns>
2024-06-07 13:10:02 +08:00
private List<AppWcsTask>? TransOtherTaskToWcsTask(AppWmsTask wmsTask)
2024-05-14 16:30:56 +08:00
{
2024-06-07 13:10:02 +08:00
return default;
2024-05-14 16:30:56 +08:00
}
}