using Magicodes.IE.Core;
|
using NetTaste;
|
using System;
|
using System.Collections.Generic;
|
using System.Linq;
|
using System.Reflection.Metadata;
|
using System.Text;
|
using System.Text.Json;
|
using System.Threading.Tasks;
|
using WIDESEAWCS_Common;
|
using WIDESEAWCS_Common.LocationEnum;
|
using WIDESEAWCS_Common.TaskEnum;
|
using WIDESEAWCS_Core;
|
using WIDESEAWCS_Core.Enums;
|
using WIDESEAWCS_Core.Helper;
|
using WIDESEAWCS_DTO;
|
using WIDESEAWCS_Model.Models;
|
|
namespace WIDESEAWCS_TaskInfoService
|
{
|
public partial class TaskService
|
{
|
|
#region 更新任务状态
|
/// <summary>
|
/// 更新任务状态
|
/// </summary>
|
/// <param name="TaskDTO"></param>
|
/// <param name="deviceTypeEnum"></param>
|
/// <returns></returns>
|
/// <exception cref="NotImplementedException"></exception>
|
public WebResponseContent UpdateTaskStatus(object TaskDTO, DeviceTypeEnum deviceTypeEnum)
|
{
|
|
WebResponseContent content = new WebResponseContent();
|
GALAXISUpdateTaskStatus gALAXIS = new();
|
try
|
{
|
if (deviceTypeEnum == DeviceTypeEnum.GALAXIS)
|
{
|
//GALAXISUpdateTaskStatus? gALAXIS = TaskDTO.Serialize().DeserializeObject<GALAXISUpdateTaskStatus>();
|
if (gALAXIS == null) throw new Exception("参数转换失败!");
|
var task = BaseDal.QueryFirst(x => x.WMSTaskNum == gALAXIS.taskId);
|
if (task == null) throw new Exception($"未找到任务,任务编号【{gALAXIS.taskId}】");
|
switch (gALAXIS.taskStatus)
|
{
|
case 0:
|
TaskCompleted(task, deviceTypeEnum);
|
break;
|
case 4:
|
TaskFromCompleted(task, deviceTypeEnum);
|
break;
|
default:
|
task.TaskState = ReturnTaskStatus(gALAXIS.taskStatus, deviceTypeEnum);
|
BaseDal.UpdateData(task);
|
break;
|
}
|
}
|
else if (deviceTypeEnum == DeviceTypeEnum.HIKROBOT)
|
{
|
|
}
|
else
|
{
|
|
}
|
return WebResponseContent.Instance.OK();
|
}
|
catch (Exception ex)
|
{
|
return WebResponseContent.Instance.Error(ex.Message);
|
}
|
finally
|
{
|
_trackloginfoService.AddTrackLog(gALAXIS, content, "下发凯乐士AGV任务", "", "");
|
}
|
}
|
#endregion
|
|
#region 任务状态转换
|
public int ReturnTaskStatus(object status, DeviceTypeEnum deviceTypeEnum)
|
{
|
try
|
{
|
if (deviceTypeEnum == DeviceTypeEnum.GALAXIS)
|
{
|
TaskStatusEnum taskStatus = status switch
|
{
|
1 => TaskStatusEnum.FromOutOfStock,
|
2 => TaskStatusEnum.ToaddInStock,
|
3 => TaskStatusEnum.TaskNumRepetition,
|
5 => TaskStatusEnum.RCSDataError,
|
6 => TaskStatusEnum.TaskTypeError,
|
7 => TaskStatusEnum.ParameterError,
|
8 => TaskStatusEnum.RCSError,
|
10 => TaskStatusEnum.Takeing,
|
13 => TaskStatusEnum.Cancel,
|
_ => throw new ArgumentOutOfRangeException(
|
nameof(status),
|
status,
|
$"未知的任务状态码: {status}"
|
)
|
};
|
return (int)taskStatus;
|
}
|
else if (deviceTypeEnum == DeviceTypeEnum.HIKROBOT)
|
{
|
return 0;
|
}
|
else
|
{
|
return 0;
|
}
|
}
|
catch (Exception ex)
|
{
|
throw new Exception(ex.Message);
|
}
|
}
|
#endregion
|
|
#region 任务起点完成
|
/// <summary>
|
/// 任务起点完成
|
/// </summary>
|
/// <param name="dt_Task"></param>
|
/// <param name="deviceTypeEnum"></param>
|
/// <returns></returns>
|
public WebResponseContent TaskFromCompleted(Dt_Task dt_Task, DeviceTypeEnum deviceTypeEnum)
|
{
|
try
|
{
|
dt_Task.TaskState = TaskStatusEnum.TakeFinish.ObjToInt();
|
Db.Ado.BeginTran();
|
UpdateLocationStatus(dt_Task.SourceAddress, deviceTypeEnum, LocationStatusEnum.Free);
|
BaseDal.UpdateData(dt_Task);
|
Db.Ado.CommitTran();
|
return WebResponseContent.Instance.OK();
|
}
|
catch (Exception ex)
|
{
|
Db.Ado.RollbackTran();
|
throw new Exception(ex.Message);
|
}
|
}
|
#endregion
|
|
#region 任务完成
|
/// <summary>
|
/// 任务完成
|
/// </summary>
|
/// <param name=""></param>
|
/// <param name="deviceTypeEnum"></param>
|
/// <returns></returns>
|
public WebResponseContent TaskCompleted(Dt_Task dt_Task, DeviceTypeEnum deviceTypeEnum)
|
{
|
try
|
{
|
dt_Task.TaskState = TaskStatusEnum.Finish.ObjToInt();
|
Db.Ado.BeginTran();
|
UpdateLocationStatus(dt_Task.TargetAddress, deviceTypeEnum, LocationStatusEnum.InStock);
|
BaseDal.DeleteAndMoveIntoHty(dt_Task, OperateTypeEnum.自动完成);
|
Db.Ado.CommitTran();
|
return WebResponseContent.Instance.OK();
|
}
|
catch (Exception ex)
|
{
|
Db.Ado.RollbackTran();
|
throw new Exception(ex.Message);
|
}
|
}
|
#endregion
|
|
#region 更新货位状态
|
/// <summary>
|
/// 更新货位状态
|
/// </summary>
|
/// <param name="LocationCode"></param>
|
/// <param name="deviceTypeEnum"></param>
|
/// <param name="locationStatusEnum"></param>
|
/// <returns></returns>
|
public WebResponseContent UpdateLocationStatus(string LocationCode, DeviceTypeEnum deviceTypeEnum, LocationStatusEnum locationStatusEnum)
|
{
|
try
|
{
|
if (deviceTypeEnum == DeviceTypeEnum.GALAXIS)
|
{
|
Dt_KLSLocationInfo? dt_KLSLocationInfo = _kLSLocationInfoService.Repository.QueryFirst(x => x.LocationCode == LocationCode);
|
if (dt_KLSLocationInfo != null)
|
{
|
dt_KLSLocationInfo.LocationStatus = locationStatusEnum.ObjToInt();
|
_kLSLocationInfoService.Repository.UpdateData(dt_KLSLocationInfo);
|
}
|
}
|
else if (deviceTypeEnum == DeviceTypeEnum.HIKROBOT)
|
{
|
Dt_HKLocationInfo? dt_HKLocationInfo = _hKLocationInfoService.Repository.QueryFirst(x => x.LocationCode == LocationCode);
|
if (dt_HKLocationInfo != null)
|
{
|
dt_HKLocationInfo.LocationStatus = locationStatusEnum.ObjToInt();
|
_hKLocationInfoService.Repository.UpdateData(dt_HKLocationInfo);
|
}
|
}
|
else if (deviceTypeEnum == DeviceTypeEnum.YuanLiJuHe)
|
{
|
Dt_RGVLocationInfo dt_RGVLocationInfo = _rGVLocationInfoService.Repository.QueryFirst(x => x.LocationCode == LocationCode);
|
if (dt_RGVLocationInfo != null)
|
{
|
dt_RGVLocationInfo.LocationStatus = locationStatusEnum.ObjToInt();
|
_rGVLocationInfoService.Repository.UpdateData(dt_RGVLocationInfo);
|
}
|
}
|
else//库外站台
|
{
|
|
}
|
return WebResponseContent.Instance.OK();
|
}
|
catch (Exception ex)
|
{
|
throw new Exception(ex.Message);
|
}
|
}
|
#endregion
|
}
|
}
|