using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Text;
|
using System.Threading.Tasks;
|
using WIDESEAWCS_Common.LocationEnum;
|
using WIDESEAWCS_Common.TaskEnum;
|
using WIDESEAWCS_Core.Helper;
|
using WIDESEAWCS_DTO;
|
using WIDESEAWCS_DTO.RGV.FOURBOT;
|
using WIDESEAWCS_DTO.WMS;
|
using WIDESEAWCS_Model.Models;
|
|
namespace WIDESEAWCS_Tasks
|
{
|
public partial class TaskJob
|
{
|
|
#region 下发四向车任务
|
public void SendRGVTask(List<Dt_Task> tasks)
|
{
|
FOURBOTnewMovePodTask fOURBOTnewMovePodTask = new();
|
try
|
{
|
Dt_ApiInfo? apiInfo = _apiInfoService.Repository.QueryFirst(x => x.ApiCode == nameof(FOURBOTnewMovePodTask)) ?? throw new Exception("未找到四向车任务下发接口配置信息!请检查接口配置");
|
#region 入库
|
var intasks = tasks.Where(x => x.TaskType == (int)TaskTypeEnum.CPInbound).ToList();
|
foreach (var item in intasks)
|
{
|
fOURBOTnewMovePodTask.priority = item.Grade;
|
fOURBOTnewMovePodTask.podID = item.PalletCode;
|
fOURBOTnewMovePodTask.destination = item.NextAddress;
|
fOURBOTnewMovePodTask.desExt = new
|
{
|
unload = 0//是否放下容器,0否1是
|
};
|
fOURBOTnewMovePodTask.desType = 2;
|
string response = HttpHelper.Post(apiInfo.ApiAddress, fOURBOTnewMovePodTask.Serialize());
|
FOURBOTReturn fOURBOTReturn = response.DeserializeObject<FOURBOTReturn>();
|
if (fOURBOTReturn.returnCode == 0)
|
{
|
item.RGVTaskId = fOURBOTReturn.data.taskID;
|
item.TaskState = (int)TaskStatusEnum.Execut;
|
}
|
}
|
_taskService.UpdateData(intasks);
|
#endregion
|
|
#region 出库
|
var outtasks = tasks.Where(x => x.TaskType == (int)TaskTypeEnum.CPOutbound).ToList();
|
foreach (var item in outtasks)
|
{
|
///判断是否需要移库,出库站台是否空闲
|
if (IsNoMoveTask(item) && StationIsFree(item.TargetAddress))
|
{
|
#region 下发出库任务
|
fOURBOTnewMovePodTask.priority = item.Grade;
|
fOURBOTnewMovePodTask.podID = item.PalletCode;
|
fOURBOTnewMovePodTask.destination = item.NextAddress;
|
fOURBOTnewMovePodTask.desExt = new
|
{
|
unload = 1//是否放下容器,0否1是
|
};
|
fOURBOTnewMovePodTask.desType = 2;
|
string response = HttpHelper.Post(apiInfo.ApiAddress, fOURBOTnewMovePodTask.Serialize());
|
FOURBOTReturn fOURBOTReturn = response.DeserializeObject<FOURBOTReturn>();
|
if (fOURBOTReturn.returnCode == 0)
|
{
|
item.RGVTaskId = fOURBOTReturn.data.taskID;
|
item.TaskState = (int)TaskStatusEnum.Execut;
|
}
|
#endregion
|
}
|
else
|
{
|
item.TaskState = (int)TaskStatusEnum.RGV_WaitMoveToExecute;
|
}
|
}
|
_taskService.UpdateData(outtasks);
|
#endregion
|
}
|
catch (Exception ex)
|
{
|
WriteError(nameof(TaskJob), ex.Message, ex);
|
}
|
}
|
#endregion
|
|
#region 下发外形检测成功任务
|
/// <summary>
|
/// 下发外形检测成功任务
|
/// </summary>
|
/// <param name="tasks"></param>
|
public void SendCheckShapeingOkTask(List<Dt_Task> tasks)
|
{
|
FOURBOTnewMovePodTask fOURBOTnewMovePodTask = new();
|
try
|
{
|
Dt_ApiInfo? apiInfo = _apiInfoService.Repository.QueryFirst(x => x.ApiCode == nameof(FOURBOTnewMovePodTask)) ?? throw new Exception("未找到四向车任务下发接口配置信息!请检查接口配置");
|
List<Dt_RGVLocationInfo> rGVLocationInfos = new List<Dt_RGVLocationInfo>();
|
List<Dt_StationManger> stationMangers = new List<Dt_StationManger>();
|
foreach (var item in tasks)
|
{
|
#region 获取货位
|
var rGVLocationInfo = _rGVLocationInfoService.GetFreeLocationInfo(item.Roadway);
|
if (rGVLocationInfo == null)
|
{
|
item.ExceptionMessage = $"未找到终点库区【{item.Roadway}】可用空货位!";
|
}
|
#endregion
|
else
|
{
|
item.CurrentAddress = item.NextAddress;
|
item.NextAddress = rGVLocationInfo.LocationCode;
|
fOURBOTnewMovePodTask.priority = item.Grade;
|
fOURBOTnewMovePodTask.podID = item.PalletCode;
|
fOURBOTnewMovePodTask.destination = item.NextAddress;
|
fOURBOTnewMovePodTask.desExt = new
|
{
|
unload = 1//是否放下容器,0否1是
|
};
|
fOURBOTnewMovePodTask.desType = 2;
|
string response = HttpHelper.Post(apiInfo.ApiAddress, fOURBOTnewMovePodTask.Serialize());
|
FOURBOTReturn fOURBOTReturn = response.DeserializeObject<FOURBOTReturn>();
|
if (fOURBOTReturn.returnCode == 0)
|
{
|
item.RGVTaskId = fOURBOTReturn.data.taskID;
|
item.TaskState = (int)TaskStatusEnum.Puting;
|
rGVLocationInfo.LocationStatus = LocationStatusEnum.InLock.ObjToInt();
|
rGVLocationInfos.Add(rGVLocationInfo);
|
#region 释放入库站台
|
Dt_StationManger stationManger = _stationMangerService.GetInStationInfo(item.SourceAddress);
|
stationManger.IsOccupied = LocationStatusEnum.Free.ObjToInt();
|
stationMangers.Add(stationManger);
|
#endregion
|
}
|
}
|
}
|
_taskService.Db.Ado.BeginTran();
|
_taskService.UpdateData(tasks);
|
_rGVLocationInfoService.UpdateData(rGVLocationInfos);
|
_stationMangerService.UpdateData(stationMangers);
|
_taskService.Db.Ado.CommitTran();
|
}
|
catch (Exception ex)
|
{
|
WriteError(nameof(TaskJob), ex.Message, ex);
|
}
|
}
|
#endregion
|
|
#region 下发外形检测失败任务
|
public void SendCheckShapeingNGTask(List<Dt_Task> tasks)
|
{
|
FOURBOTnewMovePodTask fOURBOTnewMovePodTask = new();
|
try
|
{
|
Dt_ApiInfo? apiInfo = _apiInfoService.Repository.QueryFirst(x => x.ApiCode == nameof(FOURBOTnewMovePodTask)) ?? throw new Exception("未找到四向车任务下发接口配置信息!请检查接口配置");
|
foreach (var item in tasks)
|
{
|
Dt_StationManger stationManger = _stationMangerService.GetInStationInfo(item.SourceAddress);
|
item.CurrentAddress = item.NextAddress;
|
item.NextAddress = stationManger.RGVStationCode;
|
fOURBOTnewMovePodTask.priority = item.Grade;
|
fOURBOTnewMovePodTask.podID = item.PalletCode;
|
fOURBOTnewMovePodTask.destination = item.NextAddress;
|
fOURBOTnewMovePodTask.desExt = new
|
{
|
unload = 1//是否放下容器,0否1是
|
};
|
fOURBOTnewMovePodTask.desType = 2;
|
string response = HttpHelper.Post(apiInfo.ApiAddress, fOURBOTnewMovePodTask.Serialize());
|
FOURBOTReturn fOURBOTReturn = response.DeserializeObject<FOURBOTReturn>();
|
if (fOURBOTReturn.returnCode == 0)
|
{
|
item.RGVTaskId = fOURBOTReturn.data.taskID;
|
item.TaskState = (int)TaskStatusEnum.Puting;
|
}
|
}
|
_taskService.UpdateData(tasks);
|
}
|
catch (Exception ex)
|
{
|
WriteError(nameof(TaskJob), ex.Message, ex);
|
}
|
}
|
#endregion
|
|
#region 判断是否需要移库
|
public static bool IsNoMoveTask(Dt_Task task)
|
{
|
var isNoMove = true;
|
try
|
{
|
|
}
|
catch (Exception ex)
|
{
|
throw new Exception(ex.Message);
|
}
|
return isNoMove;
|
}
|
#endregion
|
|
#region 判断出库口是否空闲
|
public bool StationIsFree(string StationCode)
|
{
|
Dt_StationManger stationManger = _stationMangerService.GetOutStationInfo(StationCode);
|
return stationManger.IsOccupied == LocationStatusEnum.Free.ObjToInt();
|
}
|
#endregion
|
|
#region 移库后下发出库任务
|
public void SendMoveToExecuteTask(List<Dt_Task> tasks)
|
{
|
try
|
{
|
FOURBOTnewMovePodTask fOURBOTnewMovePodTask = new();
|
Dt_ApiInfo? apiInfo = _apiInfoService.Repository.QueryFirst(x => x.ApiCode == nameof(FOURBOTnewMovePodTask)) ?? throw new Exception("未找到四向车任务下发接口配置信息!请检查接口配置");
|
foreach (var item in tasks)
|
{
|
if (_taskService.Repository.QueryData(x => x.Roadway == item.Roadway && x.TaskType == (int)TaskTypeEnum.CPMoveInventory).Any()) continue;
|
if (!StationIsFree(item.TargetAddress)) continue;
|
#region 下发出库任务
|
fOURBOTnewMovePodTask.priority = item.Grade;
|
fOURBOTnewMovePodTask.podID = item.PalletCode;
|
fOURBOTnewMovePodTask.destination = item.NextAddress;
|
fOURBOTnewMovePodTask.desExt = new
|
{
|
unload = 0//是否放下容器,0否1是
|
};
|
fOURBOTnewMovePodTask.desType = 2;
|
string response = HttpHelper.Post(apiInfo.ApiAddress, fOURBOTnewMovePodTask.Serialize());
|
FOURBOTReturn fOURBOTReturn = response.DeserializeObject<FOURBOTReturn>();
|
if (fOURBOTReturn.returnCode == 0)
|
{
|
item.RGVTaskId = fOURBOTReturn.data.taskID;
|
item.TaskState = (int)TaskStatusEnum.Execut;
|
}
|
#endregion
|
}
|
_taskService.UpdateData(tasks);
|
}
|
catch (Exception ex)
|
{
|
WriteError(nameof(TaskJob), ex.Message, ex);
|
}
|
}
|
#endregion
|
}
|
}
|