2024-05-14 16:30:56 +08:00
|
|
|
|
using CirculateTool;
|
|
|
|
|
|
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;
|
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
|
|
|
|
{
|
|
|
|
|
|
private readonly DataBaseData _dataBaseData = dataBaseData;
|
|
|
|
|
|
private readonly SendWmsTaskStatus _sendWmsTaskStatus = sendWmsTaskStatus;
|
|
|
|
|
|
private readonly AppWmsTaskDao _wmsTaskDao = wmsTaskDao;
|
2024-06-07 13:10:02 +08:00
|
|
|
|
private readonly TaskDao _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 });
|
|
|
|
|
|
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()
|
|
|
|
|
|
{
|
|
|
|
|
|
TaskId = wmsTask.TaskId,
|
|
|
|
|
|
TaskStatus = (int)WmsTaskStatusEnum.err,
|
|
|
|
|
|
TaskMsg = "不受支持的起点或终点",
|
|
|
|
|
|
EndTime = DateTime.Now
|
|
|
|
|
|
});
|
|
|
|
|
|
if(wmsTask.CreatePerson == StaticString.WMS)
|
|
|
|
|
|
{
|
|
|
|
|
|
_sendWmsTaskStatus.SendTaskErr(wmsTask.TaskId, "不受支持的起点或终点");
|
|
|
|
|
|
}
|
|
|
|
|
|
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; }
|
2024-05-14 16:30:56 +08:00
|
|
|
|
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,
|
|
|
|
|
|
TaskStatus = (int)WcsTaskStatusEnum.create,
|
|
|
|
|
|
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);
|
|
|
|
|
|
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; }
|
2024-05-14 16:30:56 +08:00
|
|
|
|
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,
|
|
|
|
|
|
TaskStatus = (int)WcsTaskStatusEnum.create,
|
|
|
|
|
|
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);
|
|
|
|
|
|
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; }
|
2024-05-14 16:30:56 +08:00
|
|
|
|
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,
|
|
|
|
|
|
TaskStatus = (int)WcsTaskStatusEnum.create,
|
|
|
|
|
|
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);
|
|
|
|
|
|
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; }
|
2024-05-14 16:30:56 +08:00
|
|
|
|
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,
|
|
|
|
|
|
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);
|
|
|
|
|
|
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
|
|
|
|
}
|
|
|
|
|
|
}
|