using Newtonsoft.Json;
|
using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Text;
|
using System.Threading.Tasks;
|
using WIDESEAWCS_Common;
|
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 下发四向车入库任务
|
/// <summary>
|
/// 下发四向车新建入库任务
|
/// </summary>
|
/// <param name="tasks"></param>
|
public void SendRGVInTask(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)
|
{
|
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)
|
{
|
string dataJson = fOURBOTReturn.data.ToString();
|
FOURBOTnewMovePodTaskResponseData? fOURBO = JsonConvert.DeserializeObject<FOURBOTnewMovePodTaskResponseData>(dataJson);
|
if (fOURBO == null || fOURBO.taskID == 0)
|
{
|
throw new Exception($"未获取到四向车返回的任务ID,返回数据:{response}");
|
}
|
//FOURBOTnewMovePodTaskResponseData fOURBO = fOURBOTReturn.data as FOURBOTnewMovePodTaskResponseData ?? throw new Exception("未获取到四向车返回的任务ID");
|
item.RGVTaskId = fOURBO.taskID;
|
item.TaskState = (int)TaskStatusEnum.Execut;
|
}
|
}
|
_taskService.UpdateData(tasks);
|
}
|
catch (Exception ex)
|
{
|
WriteError(nameof(TaskJob), ex.Message, ex);
|
}
|
}
|
#endregion
|
|
#region 处理出库任务是否需要移库
|
/// <summary>
|
/// 处理出库任务是否需要移库
|
/// </summary>
|
/// <param name="tasks"></param>
|
public void IsMoveTask(List<Dt_Task> tasks)
|
{
|
try
|
{
|
Dt_ApiInfo? apiInfo = _apiInfoService.Repository.QueryFirst(x => x.ApiCode == nameof(GetBlockPodContentDto)) ?? throw new Exception("未找到四向车任务下发接口配置信息!请检查接口配置");
|
List<Dt_Task> dt_Tasks = new List<Dt_Task>();
|
var PalletCodes = tasks.Select(x => x.PalletCode).ToList();
|
//GetBlockPodContentDto content = new GetBlockPodContentDto();
|
var request = new GetBlockPodContentListDto
|
{
|
content = new List<GetBlockPodContentDto>
|
{
|
new GetBlockPodContentDto
|
{
|
candidatePodIDs = PalletCodes,
|
num = 0 // 0表示全部出,如果需要限制数量可以调整
|
}
|
}
|
};
|
//content.candidatePodIDs = tasks.Select(x => x.PalletCode).ToList();
|
string response = HttpHelper.Post(apiInfo.ApiAddress, request.Serialize());
|
FOURBOTReturn fOURBOTReturn = response.DeserializeObject<FOURBOTReturn>();
|
if (fOURBOTReturn.returnCode == 0)
|
{
|
ReturnBlockPodResultDto getBlockPod = fOURBOTReturn.data as ReturnBlockPodResultDto ?? throw new Exception("未获取到阻碍托盘关系数据");
|
foreach (var Result in getBlockPod.Result)
|
{
|
foreach (var item in Result.outPods)
|
{
|
var task = tasks.First(x => x.PalletCode == item.outPod);
|
if (item.blockPods.Count > 0)
|
{
|
task.TaskState = (int)TaskStatusEnum.RGV_WaitMoveToExecute;
|
dt_Tasks.Add(task);
|
AddMoveTask(item.blockPods);
|
}
|
else
|
{
|
task.TaskState = (int)TaskStatusEnum.RGV_WaitSend;
|
dt_Tasks.Add(task);
|
}
|
}
|
}
|
_taskService.UpdateData(dt_Tasks);
|
}
|
}
|
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;
|
item.Roadway = rGVLocationInfo.RoadwayNo;
|
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)
|
{
|
FOURBOTnewMovePodTaskResponseData fOURBO = fOURBOTReturn.data as FOURBOTnewMovePodTaskResponseData ?? throw new Exception("未获取到四向车返回的任务ID");
|
item.RGVTaskId = fOURBO.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)
|
{
|
FOURBOTnewMovePodTaskResponseData fOURBO = fOURBOTReturn.data as FOURBOTnewMovePodTaskResponseData ?? throw new Exception("未获取到四向车返回的任务ID");
|
item.RGVTaskId = fOURBO.taskID;
|
item.TaskState = (int)TaskStatusEnum.Puting;
|
}
|
}
|
_taskService.UpdateData(tasks);
|
}
|
catch (Exception ex)
|
{
|
WriteError(nameof(TaskJob), ex.Message, ex);
|
}
|
}
|
#endregion
|
|
#region 添加移库任务
|
public void AddMoveTask(List<string> blockPods)
|
{
|
try
|
{
|
List<Dt_Task> tasks = new List<Dt_Task>();
|
List<Dt_RGVLocationInfo> _UpRGVLocationInfos = new List<Dt_RGVLocationInfo>();
|
List<Dt_RGVLocationInfo> rGVLocationInfos = _rGVLocationInfoService.Repository.QueryData(x => blockPods.Contains(x.PalletCode));
|
var FreeLocationInfos = _rGVLocationInfoService.GetFreeLocationInfos();
|
if (FreeLocationInfos.Count < 1) throw new Exception($"成品库创建移库任务无可用空货位");
|
foreach (var item in rGVLocationInfos)
|
{
|
Dt_RGVLocationInfo? rGVLocationInfo = FreeLocationInfos.Where(x => x.Layer == item.Layer).OrderBy(n => Math.Abs(n.Row - item.Row)).FirstOrDefault();
|
rGVLocationInfo ??= FreeLocationInfos.First();
|
Dt_Task dt_Task = new()
|
{
|
TaskNum = _taskService.GetTaskNum(nameof(SequenceEnum.SeqTaskNum)),
|
//WMSTaskNum = taskDTO.taskCode,
|
//WMSId = GetTaskNum(nameof(SequenceEnum.SeqTaskNum)),
|
Grade = 1,
|
PalletCode = item.PalletCode,
|
Roadway = item.RoadwayNo,
|
TaskState = TaskStatusEnum.RGV_NewMoveTask.ObjToInt(),
|
TaskType = TaskTypeEnum.CPMoveInventory.ObjToInt(),
|
SourceAddress = item.LocationCode,
|
CurrentAddress = item.LocationCode,
|
NextAddress = rGVLocationInfo.LocationCode,
|
TargetAddress = rGVLocationInfo.LocationCode,
|
Creater = "WCS",
|
};
|
tasks.Add(dt_Task);
|
item.LocationStatus = LocationStatusEnum.MoveLock.ObjToInt();
|
rGVLocationInfo.LocationStatus = LocationStatusEnum.MoveLock.ObjToInt();
|
_UpRGVLocationInfos.Add(rGVLocationInfo);
|
FreeLocationInfos.Remove(rGVLocationInfo);
|
}
|
_rGVLocationInfoService.UpdateData(rGVLocationInfos);
|
_rGVLocationInfoService.UpdateData(_UpRGVLocationInfos);
|
_taskService.AddData(tasks);
|
}
|
catch (Exception ex)
|
{
|
throw new Exception(ex.Message);
|
}
|
}
|
#endregion
|
|
#region 下发四向车批量移库任务
|
public void SendMoveTasks(List<Dt_Task> tasks)
|
{
|
try
|
{
|
List<Dt_Task> dt_Tasks = new List<Dt_Task>();
|
List<MoveBlockPodContentDto> moveBlocks = new List<MoveBlockPodContentDto>();
|
Dt_ApiInfo? apiInfo = _apiInfoService.Repository.QueryFirst(x => x.ApiCode == nameof(MoveBlockPodContentDto)) ?? throw new Exception("未找到四向车批量搬运阻碍托任务接口配置信息!请检查接口配置");
|
foreach (var item in tasks)
|
{
|
MoveBlockPodContentDto moveBlock = new MoveBlockPodContentDto()
|
{
|
podID = item.PalletCode,
|
des = item.TargetAddress
|
};
|
moveBlocks.Add(moveBlock);
|
}
|
string response = HttpHelper.Post(apiInfo.ApiAddress, moveBlocks.Serialize());
|
FOURBOTReturn fOURBOTReturn = response.DeserializeObject<FOURBOTReturn>();
|
if (fOURBOTReturn.returnCode == 0)
|
{
|
MoveBlockPodsDataDto moveBlockPodsData = fOURBOTReturn.data as MoveBlockPodsDataDto ?? throw new Exception("未获取到四向车批量搬运阻碍托返回的任务ID");
|
|
foreach (var item in moveBlockPodsData.succList)
|
{
|
var task = tasks.First(x => x.PalletCode == item.podID);
|
task.RGVTaskId = item.taskID;
|
task.TaskState = TaskStatusEnum.RGV_MoveTaskSend.ObjToInt();
|
dt_Tasks.Add(task);
|
}
|
_taskService.UpdateData(dt_Tasks);
|
}
|
}
|
catch (Exception ex)
|
{
|
WriteError(nameof(TaskJob), ex.Message, ex);
|
}
|
}
|
#endregion
|
|
#region 处理待移库后出库任务
|
public void MoveToExecuteTask(List<Dt_Task> tasks)
|
{
|
try
|
{
|
foreach (var item in tasks)
|
{
|
if (_taskService.Repository.QueryFirst(x => x.Roadway == item.Roadway && x.TaskType == (int)TaskTypeEnum.CPMoveInventory) == null)
|
item.TaskState = (int)TaskStatusEnum.RGV_WaitSend;
|
}
|
_taskService.UpdateData(tasks);
|
}
|
catch (Exception ex)
|
{
|
WriteError(nameof(TaskJob), ex.Message, ex);
|
}
|
}
|
#endregion
|
|
#region 下发出库任务
|
public void SendOutTask(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)
|
{
|
var stationManger = _stationMangerService.GetOutStationInfo(item.TargetAddress);
|
if (stationManger.IsOccupied != LocationStatusEnum.Free.ObjToInt()) 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)
|
{
|
FOURBOTnewMovePodTaskResponseData fOURBO = fOURBOTReturn.data as FOURBOTnewMovePodTaskResponseData ?? throw new Exception("未获取到四向车返回的任务ID");
|
item.RGVTaskId = fOURBO.taskID;
|
item.TaskState = (int)TaskStatusEnum.Execut;
|
stationManger.IsOccupied = LocationStatusEnum.Lock.ObjToInt();
|
_stationMangerService.UpdateData(stationManger);
|
}
|
#endregion
|
}
|
_taskService.UpdateData(tasks);
|
}
|
catch (Exception ex)
|
{
|
WriteError(nameof(TaskJob), ex.Message, ex);
|
}
|
}
|
#endregion
|
}
|
}
|