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; } } }