using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WIDESEA.Common;
using WIDESEA.Core.Services;
using WIDESEA.Core.Utilities;
using WIDESEA.Entity.DomainModels;
using WIDESEA.Services.Repositories;
namespace WIDESEA.Services.IServices
{
public partial class ToWCSService
{
///
/// 接收WMS上报的任务状态,修改对应的任务状态,以保持wms和wcs任务状态同步
///
///
///
public WebResponseContent UpdateWmsTaskState(SaveModel saveModel)
{
WebResponseContent content = new WebResponseContent();
try
{
string barcode = saveModel.MainData["barcode"].ToString();
string taskState = saveModel.MainData["taskState"].ToString();
Dt_taskinfo taskinfo = Dt_taskinfoRepository.Instance.FindFirst(x => x.task_barcode == barcode);
if (taskinfo == null)
throw new Exception($"在WMS中没有找到条码值:【{barcode}】对应的任务");
//穿梭车取货完成
if (taskState.Equals("TaskState_RGV_PickedFinished"))
{
taskinfo.task_bak_2 = "2";
Dt_taskinfoRepository.Instance.Update(taskinfo, x => x.task_bak_2, true);
return content.OK("接收WCS上报状态成功.");
}
if (taskinfo.task_type == TaskType.TaskType_Empty_Pallet_Outbound.ToString() &&
taskState == TaskState.TaskState_RGV_Finished.ToString())
{
string rgvId = saveModel.MainData["rgvId"]?.ToString();
taskinfo.task_rgvId = rgvId;
}
if (taskinfo.task_type == TaskType.TaskType_Box_Pallet_Measure_Out.ToString() &&
taskState == TaskState.TaskState_RGV_Finished.ToString())
{
string rgvId = saveModel.MainData["rgvId"]?.ToString();
taskinfo.task_rgvId = rgvId;
}
taskinfo.task_dispatchertime = DateTime.Now;
taskinfo.task_state = taskState;
Dt_taskinfoRepository.Instance.Update(taskinfo, true);
//空托入库
if (taskinfo.task_type == TaskType.TaskType_Empty_Pallet_Inbound.ToString() &&
taskinfo.task_state == TaskState.TaskState_ConveyorLineExecuting.ToString())
{
Dt_locationinfo locationinfo = Dt_locationinfoRepository.Instance.FindFirst(x => x.location_id == taskinfo.task_fromlocationid);
if (locationinfo != null)
{
locationinfo.location_state = LocationState.LocationState_Empty_Inbound_Executing.ToString();
Dt_locationinfoRepository.Instance.Update(locationinfo, true);
}
}
//实托入库
else if (taskinfo.task_type == TaskType.TaskType_Box_Pallet_Inbound.ToString() &&
taskinfo.task_state == TaskState.TaskState_ConveyorLineExecuting.ToString())
{
Dt_locationinfo locationinfo = Dt_locationinfoRepository.Instance.FindFirst(x => x.location_id == taskinfo.task_fromlocationid);
if (locationinfo != null)
{
locationinfo.location_state = LocationState.LocationState_Box_Inbound_Executing.ToString();
Dt_locationinfoRepository.Instance.Update(locationinfo, true);
}
}
//测量出库、测量回库
else if ((taskinfo.task_type == TaskType.TaskType_Box_Pallet_Measure_Out.ToString() ||
taskinfo.task_type == TaskType.TaskType_Box_Pallet_Measure_Back.ToString()) &&
(taskState.Contains("_Measure") || taskState == TaskState.TaskState_RGV_Received.ToString()))
{
//说明要准备回库了,将任务类型改为测量回库
if (taskinfo.task_state == TaskState.TaskState_Measure_Back_Line_Wait_Executing.ToString())
{
taskinfo.task_type = TaskType.TaskType_Box_Pallet_Measure_Back.ToString();
Dt_taskinfoRepository.Instance.Update(taskinfo, true);
}
Dt_locationinfo locationinfo = Dt_locationinfoRepository.Instance.FindFirst(x => x.location_id == taskinfo.task_fromlocationid);
if (locationinfo != null)
{
locationinfo.location_state = LocationState.LocationState_Measureing.ToString();
Dt_locationinfoRepository.Instance.Update(locationinfo, true);
}
}
//空托出库
else if (taskinfo.task_type == TaskType.TaskType_Empty_Pallet_Outbound.ToString())
{
if (taskState == TaskState.TaskState_RGV_Received.ToString())
{
Dt_locationinfo locationinfo = Dt_locationinfoRepository.Instance.FindFirst(x => x.location_id == taskinfo.task_fromlocationid);
locationinfo.location_state = LocationState.LocationState_Empty_OutBound_Executing.ToString();
Dt_locationinfoRepository.Instance.Update(locationinfo, true);
}
else if (taskState == TaskState.TaskState_RGV_Finished.ToString())
{
//恢复空货位状态
Dt_locationinfo locationinfo = Dt_locationinfoRepository.Instance.FindFirst(x => x.location_id == taskinfo.task_fromlocationid);
locationinfo.location_state = LocationState.LocationState_Empty.ToString();
Dt_locationinfoRepository.Instance.Update(locationinfo, true);
}
}
else if (taskinfo.task_type == TaskType.TaskType_Box_Pallet_Outbound.ToString())
{
if (taskState == TaskState.TaskState_RGV_Received.ToString())
{
Dt_locationinfo locationinfo = Dt_locationinfoRepository.Instance.FindFirst(x => x.location_id == taskinfo.task_fromlocationid);
locationinfo.location_state = LocationState.LocationState_Box_OutBound_Executing.ToString();
Dt_locationinfoRepository.Instance.Update(locationinfo, true);
}
else if (taskState == TaskState.TaskState_RGV_Finished.ToString())
{
//恢复空货位状态
Dt_locationinfo locationinfo = Dt_locationinfoRepository.Instance.FindFirst(x => x.location_id == taskinfo.task_fromlocationid);
locationinfo.location_state = LocationState.LocationState_Empty.ToString();
Dt_locationinfoRepository.Instance.Update(locationinfo, true);
}
}
else if (taskinfo.task_type == TaskType.TaskType_MoveOutbound.ToString())
{
}
content.OK("接收WCS上报状态成功.");
}
catch (Exception ex)
{
content.Error("接收WCS上报状态失败:" + ex.Message);
}
//Services.CommonFunction.AddInterfaceLogAction(saveModel, content, "UpdateWmsTaskState");
return content;
}
}
}