using AngleSharp.Io;
using AutoMapper;
using LogLibrary.Log;
using Newtonsoft.Json;
using System.Threading.Tasks;
using WIDESEAWCS_Common.TaskEnum;
using WIDESEAWCS_Core;
using WIDESEAWCS_DTO.AGV;
using WIDESEAWCS_DTO.TaskInfo;
using WIDESEAWCS_IBasicInfoRepository;
using WIDESEAWCS_ITaskInfoRepository;
using WIDESEAWCS_ITaskInfoService;
using WIDESEAWCS_Model.Models;
using WIDESEAWCS_QuartzJob;
using WIDESEAWCS_Tasks.ConveyorLineJob;
using TaskStatus = WIDESEAWCS_DTO.AGV.TaskStatus;
namespace WIDESEAWCS_Tasks.AGV
{
public class ESSSignal:IESSSignal
{
private readonly ITaskRepository _taskRepository;
private readonly ITask_HtyRepository _taskhtyRepository;
private readonly ITaskService _taskService;
private readonly IDt_StationManagerRepository _stationManagerRepository;
private readonly IMapper _mapper;
public ESSSignal(ITaskRepository taskRepository, ITaskService taskService,IDt_StationManagerRepository stationManagerRepository,ITask_HtyRepository taskhtyRepository, IMapper mapper)
{
_taskRepository = taskRepository;
_taskService = taskService;
_stationManagerRepository = stationManagerRepository;
_taskhtyRepository = taskhtyRepository;
_mapper = mapper;
}
#region ESS任务状态回调
///
/// ESS任务状态回调
///
///
public WebResponseContent TaskStatusCallback(StatusCallbackRequest result)
{
WebResponseContent content = new WebResponseContent();
try
{
var task = _taskRepository.QueryFirst(t => t.TaskNum == Convert.ToInt32(result.TaskCode));
if (task == null)
{
return content.Error("未找到任务");
}
switch (result.EventType)
{
case EventType.tote_load:
content.OK();
break;
case EventType.tote_unload:
content.OK();
break;
case EventType.robot_reach:
content.OK();
break;
case EventType.task:
content = RobotTaskStatusCallback(result, task);
break;
case EventType.task_allocated:
_taskService.UpdateTaskStatusToNext(task.TaskNum);
break;
//case 20:
// content = RequestPickUp(task, commonConveyorLine, elevator);
// break;
//case 21:
// content = PickUpFinish(task, commonConveyorLine, elevator);
// break;
//case 22:
// content = RequestPut(task, commonConveyorLine, elevator);
// break;
//case 8:
// content = PutFinish(task, commonConveyorLine, elevator);
// break;
default:
content.Error($"未知的事件类型: {result.EventType}");
break;
}
return content;
}
catch (Exception ex)
{
return content.Error(ex.Message);
}
}
public WebResponseContent RobotTaskStatusCallback(StatusCallbackRequest result,Dt_Task task)
{
WebResponseContent content = new WebResponseContent();
try
{
switch (result.Status)
{
case TaskStatus.cancel:
_taskService.UpdateTaskStatusToNext(task.TaskNum);
break;
case TaskStatus.success:
break;
case TaskStatus.suspend:
break;
default:
break;
}
content.OK();
}
catch (Exception ex)
{
content.Error(ex.Message);
}
return content;
}
#endregion
#region ESS任务状态回调
/////
///// 放货完成
/////
/////
/////
//public WebResponseContent PutFinish(Dt_Task task, CommonConveyorLine commonConveyorLine, CommonElevator elevator)
//{
// WebResponseContent content = new WebResponseContent();
// try
// {
// if (task.TaskState == (int)TaskAcrossFloorStatusEnum.FirstCarry)
// {
// if (task.Floor == "1F")
// {
// elevator.SetValue(ElevatorDBName.OneLayerPutFinish, 1);
// }
// else
// {
// elevator.SetValue(ElevatorDBName.TwoLayerPutFinish, 1);
// }
// _taskService.UpdateTaskStatusToNext(task.TaskNum);
// content.OK();
// }
// else if (task.TaskState == (int)TaskAcrossFloorStatusEnum.EndAddressExecuting)
// {
// _taskService.UpdateTaskStatusToNext(task.TaskNum);
// content.OK();
// }
// else if (task.TaskState.GetTaskStateGroup() == TaskStateGroup.CarryGroup)
// {
// _taskService.UpdateTaskStatusToNext(task.TaskNum);
// }
// if (task.TaskState.GetTaskStateGroup() == TaskStateGroup.RelocationGroup)
// {
// _taskService.UpdateTaskStatusToNext(task.TaskNum);
// }
// if (task.TaskState.GetTaskStateGroup() == TaskStateGroup.OutbondGroup)
// {
// if (task.TaskState == (int)TaskOutStatusEnum.AGV_OutExecuting)
// {
// _taskService.UpdateTaskStatusToNext(task.TaskNum);
// }
// }
// else if (task.TaskState.GetTaskStateGroup() == TaskStateGroup.InboundGroup)
// {
// commonConveyorLine.SetValue(ConveyorLineDBName.PutFinish, 1, "LK001");
// _taskService.UpdateTaskStatusToNext(task.TaskNum);
// content.OK();
// }
// }
// catch (Exception ex)
// {
// content.Error(ex.Message);
// }
// return content;
//}
/////
///// 取货完成
/////
/////
/////
//public WebResponseContent PickUpFinish(Dt_Task task, CommonConveyorLine commonConveyorLine, CommonElevator elevator)
//{
// WebResponseContent content = new WebResponseContent();
// try
// {
// if (task.TaskState == (int)TaskAcrossFloorStatusEnum.SecondCarry)
// {
// if (task.Floor == "1F")
// {
// elevator.SetValue(ElevatorDBName.OneLayerPickUpFinish, 1);
// }
// else
// {
// elevator.SetValue(ElevatorDBName.TwoLayerPickUpFinish, 1);
// }
// _taskService.UpdateTaskStatusToNext(task.TaskNum);
// content.OK();
// }
// if (task.TaskState.GetTaskStateGroup() == TaskStateGroup.OutbondGroup)
// {
// commonConveyorLine.SetValue(ConveyorLineDBName.PickUpFinish, 1, "LK001");
// _taskService.UpdateTaskStatusToNext(task.TaskNum);
// content.OK();
// }
// }
// catch (Exception ex)
// {
// content.Error(ex.Message);
// }
// return content;
//}
/////
///// 请求取货
/////
/////
/////
//public WebResponseContent RequestPickUp(Dt_Task task, CommonConveyorLine commonConveyorLine, CommonElevator elevator)
//{
// WebResponseContent content = new WebResponseContent();
// try
// {
// if (task.TaskState == (int)TaskAcrossFloorStatusEnum.SecondCarry)
// {
// if (task.Floor == "1F")
// {
// if (elevator.GetValue(ElevatorDBName.OneLayerAllowPickUp) == 1)
// {
// _taskService.ContinueAgvTask(task.AGVTaskNum);
// content.OK();
// }
// else
// {
// task.AGVSign = "RequestPickUp";
// _taskRepository.UpdateData(task);
// content.Error("设备不允许取货");
// }
// }
// else
// {
// if (elevator.GetValue(ElevatorDBName.TwoLayerAllowPickUp) == 1)
// {
// _taskService.ContinueAgvTask(task.AGVTaskNum);
// content.OK();
// }
// else
// {
// task.AGVSign = "RequestPickUp";
// _taskRepository.UpdateData(task);
// content.Error("设备不允许取货");
// }
// }
// }
// if (task.TaskState.GetTaskStateGroup() == TaskStateGroup.OutbondGroup)
// {
// if (commonConveyorLine.GetValue(ConveyorLineDBName.AllowPickUp, "LK001") == 1)
// {
// _taskService.ContinueAgvTask(task.AGVTaskNum);
// _taskService.UpdateTaskStatusToNext(task.TaskNum);
// content.OK();
// }
// else
// {
// task.AGVSign = "RequestPickUp";
// _taskRepository.UpdateData(task);
// content.Error("设备不允许取货");
// }
// }
// }
// catch (Exception ex)
// {
// task.AGVSign = "RequestPickUp";
// _taskRepository.UpdateData(task);
// content.Error(ex.Message);
// }
// return content;
//}
/////
///// 请求放货
/////
/////
/////
//public WebResponseContent RequestPut(Dt_Task task, CommonConveyorLine commonConveyorLine, CommonElevator elevator)
//{
// WebResponseContent content = new WebResponseContent();
// try
// {
// if (task.TaskState == (int)TaskAcrossFloorStatusEnum.FirstCarry)
// {
// if (task.Floor == "1F")
// {
// if (elevator.GetValue(ElevatorDBName.OneLayerAllowPut) == 1)
// {
// _taskService.ContinueAgvTask(task.AGVTaskNum);
// content.OK();
// }
// else
// {
// task.AGVSign = "RequestPut";
// _taskRepository.UpdateData(task);
// content.Error("设备不允许放货");
// }
// }
// else
// {
// if (elevator.GetValue(ElevatorDBName.TwoLayerAllowPut) == 1)
// {
// _taskService.ContinueAgvTask(task.AGVTaskNum);
// content.OK();
// }
// else
// {
// task.AGVSign = "RequestPut";
// _taskRepository.UpdateData(task);
// content.Error("设备不允许放货");
// }
// }
// }
// if (task.TaskState.GetTaskStateGroup() == TaskStateGroup.InboundGroup)
// {
// if (commonConveyorLine.GetValue(ConveyorLineDBName.AllowPut, "LK001") == 1)
// {
// _taskService.ContinueAgvTask(task.AGVTaskNum);
// content.OK();
// }
// else
// {
// task.AGVSign = "RequestPut";
// _taskRepository.UpdateData(task);
// content.Error("设备不允许取货");
// }
// }
// }
// catch (Exception ex)
// {
// task.AGVSign = "RequestPut";
// _taskRepository.UpdateData(task);
// content.Error(ex.Message);
// }
// return content;
//}
#endregion
}
}