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

237 lines
8.6 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;
using WcsMain.ExtendMethod;
using WcsMain.DataBase.Dao;
using WcsMain.DataBase.TableEntity;
using WcsMain.DataService;
using WcsMain.Enum.TaskEnum;
using WcsMain.Business.CommonAction;
using WcsMain.Common;
using WcsMain.StaticData;
namespace WcsMain.Business.CirculationTask.TaskData;
/// <summary>
/// WMS任务解析类
/// </summary>
[Circulation()]
public class ResolveWmsTask(AppWmsTaskDao wmsTaskDao, SendWmsTaskStatus sendWmsTaskStatus, DataBaseData dataBaseData)
{
private readonly DataBaseData _dataBaseData = dataBaseData;
private readonly SendWmsTaskStatus _sendWmsTaskStatus = sendWmsTaskStatus;
private readonly AppWmsTaskDao _wmsTaskDao = wmsTaskDao;
/// <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任务一般根据项目此处自定义规则 */
List<AppWcsTask>? wcsTasks = TransToWcsTask(wmsTask);
if(wcsTasks == default || wcsTasks.Count < 1)
{
}
}
/// <summary>
/// 处理WMS任务插入WCS任务
/// </summary>
/// <param name="task"></param>
/// <returns></returns>
private List<AppWcsTask>? TransToWcsTask(AppWmsTask task)
{
return task.TaskType switch
{
// 入库
(int)WmsTaskTypeEnum.inTask => TransInTaskToWcsTask(task)?.ToList(),
// 出库
(int)WmsTaskTypeEnum.outTask => TransOutTaskToWcsTask(task)?.ToList(),
// 移库
(int)WmsTaskTypeEnum.moveTask => TransMoveTaskToWcsTask(task)?.ToList(),
// 拣选
(int)WmsTaskTypeEnum.pick => TransPickTaskToWcsTask(task)?.ToList(),
// 其他任务,未识别的任务类型,直接报错
_ => TransOtherTaskToWcsTask(task)?.ToList(),
};
}
/// <summary>
/// 转换入库任务
/// </summary>
/// <param name="wmsTask"></param>
/// <returns></returns>
private IEnumerable<AppWcsTask>? TransInTaskToWcsTask(AppWmsTask wmsTask)
{
AppLocation? wcsOrigin = CommonData.AppLocations.DetailWithWmsLocation(wmsTask.Origin);
AppLocation? wcsDestination = CommonData.AppLocations.DetailWithWmsLocation(wmsTask.Destination);
if (wcsOrigin == default || wcsDestination == default) { yield break; }
int? plcId = _dataBaseData.GetNewPlcTaskId();
if(plcId == default) { yield break; }
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,
};
yield return wcsTask;
}
/// <summary>
/// 转换出库任务
/// </summary>
/// <param name="wmsTask"></param>
/// <returns></returns>
private IEnumerable<AppWcsTask>? TransOutTaskToWcsTask(AppWmsTask wmsTask)
{
AppLocation? wcsOrigin = CommonData.AppLocations.DetailWithWmsLocation(wmsTask.Origin);
AppLocation? wcsDestination = CommonData.AppLocations.DetailWithWmsLocation(wmsTask.Destination);
if (wcsOrigin == default || wcsDestination == default) { yield break; }
int? plcId = _dataBaseData.GetNewPlcTaskId();
if (plcId == default) { yield break; }
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,
};
yield return wcsTask;
}
/// <summary>
/// 转换拣选任务
/// </summary>
/// <param name="wmsTask"></param>
/// <returns></returns>
private IEnumerable<AppWcsTask>? TransPickTaskToWcsTask(AppWmsTask wmsTask)
{
AppLocation? wcsOrigin = CommonData.AppLocations.DetailWithWmsLocation(wmsTask.Origin);
AppLocation? wcsDestination = CommonData.AppLocations.DetailWithWmsLocation(wmsTask.Destination);
if (wcsOrigin == default || wcsDestination == default) { yield break; }
int? plcId = _dataBaseData.GetNewPlcTaskId();
if (plcId == default) { yield break; }
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,
};
yield return wcsTask;
}
/// <summary>
/// 转换移库任务
/// </summary>
/// <param name="wmsTask"></param>
/// <returns></returns>
private IEnumerable<AppWcsTask>? TransMoveTaskToWcsTask(AppWmsTask wmsTask)
{
AppLocation? wcsOrigin = CommonData.AppLocations.DetailWithWmsLocation(wmsTask.Origin);
AppLocation? wcsDestination = CommonData.AppLocations.DetailWithWmsLocation(wmsTask.Destination);
if (wcsOrigin == default || wcsDestination == default) { yield break; }
int? plcId = _dataBaseData.GetNewPlcTaskId();
if (plcId == default) { yield break; }
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,
};
yield return wcsTask;
}
/// <summary>
/// 转换其他任务
/// </summary>
/// <param name="wmsTask"></param>
/// <returns></returns>
private IEnumerable<AppWcsTask>? TransOtherTaskToWcsTask(AppWmsTask wmsTask)
{
yield break;
}
}