using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using WIDESEAWCS_Common.TaskEnum;
using WIDESEAWCS_Core;
using WIDESEAWCS_Core.Helper;
using WIDESEAWCS_DTO.TaskInfo;
using WIDESEAWCS_DTO.WMSInfo;
using WIDESEAWCS_ITaskInfoService;
using WIDESEAWCS_Model.Models;
using WIDESEAWCS_QuartzJob.Models;
using WIDESEAWCS_QuartzJob.StackerCrane.Enum;
using WIDESEAWCS_TaskInfoService;
namespace WIDESEAWCS_TaskInfoService
{
public partial class TaskService
{
///
/// 更新AGV任务状态
///
///
///
public WebResponseContent AGVUpdateTaskState(AGVUpdateTaskDTO saveModel)
{
WebResponseContent content = new WebResponseContent();
try
{
if (saveModel == null) throw new Exception("更新任务信息为空");
Dt_Task dt_Task = GetTaskInfo(Convert.ToInt32(saveModel.outID));
if (dt_Task == null) throw new Exception($"未找到任务号为【{saveModel.outID}】的任务");
if (dt_Task.TaskState >= (int)TaskInStatusEnum.AGV_InFinish)
{
return content = WebResponseContent.Instance.Error($"该任务状态不可跳转到下一步,任务号:【{dt_Task.TaskNum}】,任务状态:【{GetEnumDescription(Enum.Parse(Enum.GetName(typeof(TaskInStatusEnum), dt_Task.TaskState)))}】");
}
switch (saveModel.status)
{
case "02":
dt_Task.TaskState = (int)TaskInStatusEnum.AGV_InExecuting;
break;
case "08":
{
dt_Task.TaskState = (int)TaskInStatusEnum.AGV_InFinish;
dt_Task.CurrentAddress = dt_Task.NextAddress;
List routers = _routerService.QueryNextRoutes(dt_Task.CurrentAddress, dt_Task.TargetAddress);
if (routers.Count > 0)
{
dt_Task.NextAddress = routers.FirstOrDefault().ChildPosi;
}
}
break;
default:
throw new Exception($"未定义任务状态【{saveModel.status}】");
}
//dt_Task.TaskState = saveModel.status switch
//{
// "02" => (int)TaskInStatusEnum.AGV_InExecuting,
// "08" => (int)TaskInStatusEnum.AGV_InFinish,
// _ => throw new Exception($"未定义任务状态【{saveModel.status}】"),
//};
content = UpdateData(dt_Task);
}
catch (Exception ex)
{
content.Error(ex.Message);
}
return content;
//return new AGVReturnInfo()
//{
// code = content.Status ? "20000" : "90000",
// message = content.Message,
//};
}
///
/// 出库任务完成
///
///
///
public WebResponseContent OutTaskFinish(string Address)
{
try
{
Dt_Task dt_Task = BaseDal.QueryFirst(x => x.TargetAddress == Address);
if (dt_Task != null && dt_Task.TaskState != TaskOutStatusEnum.AGV_OutFinish.ObjToInt())
throw new Exception($"地址【{Address}】存在未完成AGV任务");
Dt_Router _Router = _routerRepository.QueryFirst(x => x.NextPosi == Address);
if (_Router == null) throw new Exception($"地址【{Address}】未配置路由");
_Router.Remark = "未占用";
Db.Ado.BeginTran();
_routerRepository.UpdateData(_Router);
if (dt_Task != null)
{
dt_Task.TaskState = TaskOutStatusEnum.OutFinish.ObjToInt();
WMSTaskDTO WMStask = _mapper.Map(dt_Task);
AddTask_Hty(dt_Task, TaskOperateTypeEnum.AutoComplete);
HttpHelper.PostAsync(WMSInterfaceAddress.UpdateTaskStatus, WMStask.ToJson(), headers: new Dictionary());
}
Db.Ado.CommitTran();
return WebResponseContent.Instance.OK();
}
catch (Exception ex)
{
Db.Ado.RollbackTran();
return WebResponseContent.Instance.Error(ex.Message);
}
}
public static string GetEnumDescription(T value) where T : Enum
{
FieldInfo fieldInfo = typeof(T).GetField(value.ToString());
DescriptionAttribute attribute = (DescriptionAttribute)Attribute.GetCustomAttribute(fieldInfo, typeof(DescriptionAttribute));
return attribute?.Description ?? value.ToString();
}
}
}