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
|
{
|
/// <summary>
|
/// 更新AGV任务状态
|
/// </summary>
|
/// <param name="saveModel"></param>
|
/// <returns></returns>
|
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<TaskInStatusEnum>(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<Dt_Router> 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,
|
//};
|
}
|
/// <summary>
|
/// 出库任务完成
|
/// </summary>
|
/// <param name="Address"></param>
|
/// <returns></returns>
|
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<WMSTaskDTO>(dt_Task);
|
AddTask_Hty(dt_Task, TaskOperateTypeEnum.AutoComplete);
|
HttpHelper.PostAsync(WMSInterfaceAddress.UpdateTaskStatus, WMStask.ToJson(), headers: new Dictionary<string, string>());
|
}
|
Db.Ado.CommitTran();
|
|
return WebResponseContent.Instance.OK();
|
}
|
catch (Exception ex)
|
{
|
Db.Ado.RollbackTran();
|
return WebResponseContent.Instance.Error(ex.Message);
|
}
|
}
|
public static string GetEnumDescription<T>(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();
|
}
|
}
|
}
|