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;
///
/// WMS任务解析类
///
[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;
///
/// 解析WMS任务
///
///
[Circulation("解析WMS任务,转换为WCS任务")]
public bool ResolveTask()
{
List? 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;
}
///
/// 解析任务
///
///
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? wcsTasks = TransToWcsTask(wmsTask);
if(wcsTasks == default || wcsTasks.Count < 1)
{
}
}
///
/// 处理WMS任务,插入WCS任务
///
///
///
private List? 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(),
};
}
///
/// 转换入库任务
///
///
///
private IEnumerable? 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;
}
///
/// 转换出库任务
///
///
///
private IEnumerable? 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;
}
///
/// 转换拣选任务
///
///
///
private IEnumerable? 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;
}
///
/// 转换移库任务
///
///
///
private IEnumerable? 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;
}
///
/// 转换其他任务
///
///
///
private IEnumerable? TransOtherTaskToWcsTask(AppWmsTask wmsTask)
{
yield break;
}
}