using System; using System.Collections.Generic; using System.Text; using WIDESEA_Common; using WIDESEA_Common.TaskEnum; using WIDESEA_Core.Utilities; using WIDESEA_Entity.DomainModels; using WIDESEA_Services.IRepositories; using WIDESEA_Services.Repositories; namespace WIDESEA_Services.Services { public partial class CommonFunction { /// /// 完成RGV任务 /// /// /// public static WebResponseContent FinishedRgvTask(Dt_TaskRGVinfo taskRGVinfo, string rgvId = null) { WebResponseContent content = new WebResponseContent(); try { IDt_TaskRGVinfoRepository taskRGVinfoRepository = Dt_TaskRGVinfoRepository.Instance; IDt_TaskRGVinfo_HtyRepository taskRGVinfo_HtyRepository = Dt_TaskRGVinfo_HtyRepository.Instance; IDt_TaskWCSinfoRepository taskWCSinfoRepository = Dt_TaskWCSinfoRepository.Instance; IDt_TaskWCSinfo_HtyRepository taskWCSinfo_HtyRepository = Dt_TaskWCSinfo_HtyRepository.Instance; //根据RGV任务,找到对应的WCS总任务 Dt_TaskWCSinfo taskWCSinfo = Dt_TaskWCSinfoRepository.Instance.FindFirst(x => x.wcstask_taskNumber == taskRGVinfo.rgvtask_wcsTaskNumber); if (taskWCSinfo == null) return content.Error($"手动完成穿梭车任务出错,没有找到任务号:【{taskRGVinfo.rgvtask_taskId}】对应的WCS总任务,WCS任务号:【{taskRGVinfo.rgvtask_wcsTaskNumber}】"); content = Dt_TaskWCSinfoRepository.Instance.DbContextBeginTransaction(() => { taskWCSinfo.wcstask_backUp_2 = rgvId; taskRGVinfo.rgvtask_backup_1 = rgvId; //区分任务类型,如果是入库类型的任务,RGV完成,则总任务完成,出库型任务,RGV完成,则只是部分完成 //***空托入库**********轴承组盘入库*** if (taskWCSinfo.wcstask_type == TaskType.TaskType_Empty_Pallet_Inbound.ToString() || taskWCSinfo.wcstask_type == TaskType.TaskType_Box_Pallet_Inbound.ToString() || taskWCSinfo.wcstask_type == TaskType.TaskType_CheckBackIn.ToString() || taskWCSinfo.wcstask_type == TaskType.TaskType_ErrorCheckBackIn.ToString() || taskRGVinfo.rgvtask_taskType == RGVTaskType.RgvTaskType_Move.ToString() || (taskWCSinfo.wcstask_type == RGVTaskType.RgvTaskType_Inbound.ToString() && taskWCSinfo.wcstask_type == TaskType.TaskType_MoveOutbound.ToString()) ) { //上报WMS任务完成,对于入库来说,穿梭车的任务完成,即是整个任务的生命周期结束 content = WMSApi.TellWmsTaskFinished(taskRGVinfo.rgvtask_barCode, rgvId); if (!content.Status) throw new Exception($"【入库任务】上报WMS任务完成出错,WCS任务号:【{taskWCSinfo.wcstask_taskNumber}】,托盘号:【{taskWCSinfo.wcstask_barcode}】"); taskRGVinfo.rgvtask_taskStatus = RGVTaskState.RgvTaskState_Done.ToString(); taskWCSinfo.wcstask_state = TaskState.TaskState_Finished.ToString(); //完成rgv、wcs任务、移动任务到历史 CommonFunction.AddWcsTaskToHistory(taskWCSinfo, taskWCSinfoRepository, taskWCSinfo_HtyRepository); CommonFunction.AddRgvTaskToHistory(taskRGVinfo, taskRGVinfoRepository, taskRGVinfo_HtyRepository); } //***测量出库*******,不要删除库存,占着坑,等待测量完回库 else if (taskWCSinfo.wcstask_type == TaskType.TaskType_Box_Pallet_Measure_Out.ToString()) { //上报WMS最新任务状态,此处状态是穿梭车的任务完成 content = WMSApi.PostTaskStateToWMS(taskRGVinfo.rgvtask_barCode, TaskState.TaskState_RGV_Finished.ToString(), rgvId); if (!content.Status) throw new Exception($"【测量出库】上报WMS任务完成出错,WCS任务号:【{taskWCSinfo.wcstask_taskNumber}】,托盘号:【{taskWCSinfo.wcstask_barcode}】"); //更新rgv、wcs任务状态 taskRGVinfo.rgvtask_taskStatus = RGVTaskState.RgvTaskState_Done.ToString(); taskWCSinfo.wcstask_state = TaskState.TaskState_RGV_Finished.ToString(); //完成rgv、移动任务到历史 CommonFunction.AddRgvTaskToHistory(taskRGVinfo, taskRGVinfoRepository, taskRGVinfo_HtyRepository); Dt_TaskWCSinfoRepository.Instance.Update(taskWCSinfo, true); } //***测量回库******* else if (taskWCSinfo.wcstask_type == TaskType.TaskType_Box_Pallet_Measure_Back.ToString()) { //上报WMS任务完成,对于测量回库来说,穿梭车的任务完成,即是整个任务的生命周期结束 //由于测量出库的没有删除库存,所有只要放回去即可,要不生成库存,在WMS做逻辑 content = WMSApi.TellWmsTaskFinished(taskRGVinfo.rgvtask_barCode, rgvId); if (!content.Status) throw new Exception($"【测量回库】上报WMS任务完成出错,WCS任务号:【{taskWCSinfo.wcstask_taskNumber}】,托盘号:【{taskWCSinfo.wcstask_barcode}】"); //完成rgv、wcs任务、移动任务到历史 CommonFunction.AddWcsTaskToHistory(taskWCSinfo, taskWCSinfoRepository, taskWCSinfo_HtyRepository); CommonFunction.AddRgvTaskToHistory(taskRGVinfo, taskRGVinfoRepository, taskRGVinfo_HtyRepository); } //***空托盘/轴承出库***** else if (taskWCSinfo.wcstask_type == TaskType.TaskType_Empty_Pallet_Outbound.ToString() || taskWCSinfo.wcstask_type == TaskType.TaskType_Box_Pallet_Outbound.ToString() || taskWCSinfo.wcstask_type == TaskType.TaskType_CheckOutbound.ToString())//tx 0808 { string state = string.Empty; if (taskRGVinfo.rgvtask_areaCode == "OutboundArea") { if (taskWCSinfo.wcstask_type == TaskType.TaskType_Empty_Pallet_Outbound.ToString()) state = TaskState.TaskState_Empty_Out_Line_Executing.ToString(); else if (taskWCSinfo.wcstask_type == TaskType.TaskType_Box_Pallet_Outbound.ToString()) //state = TaskState.TaskState_Box_Out_Line_Executing.ToString(); state = TaskState.TaskState_Box_Out_RGV_Finished.ToString(); //(2525-12-12修改)修改成提升机运行中 } else state = TaskState.TaskState_RGV_Finished.ToString(); //上报WMS最新任务状态,此处状态是穿梭车的任务完成 content = WMSApi.PostTaskStateToWMS(taskRGVinfo.rgvtask_barCode, state, rgvId); if (!content.Status) throw new Exception($"【空/指定托盘出库】上报WMS【RGV】任务完成出错,WCS任务号:【{taskWCSinfo.wcstask_taskNumber}】,托盘号:【{taskWCSinfo.wcstask_barcode}】"); //更新rgv、wcs任务状态 taskRGVinfo.rgvtask_taskStatus = RGVTaskState.RgvTaskState_Done.ToString(); taskWCSinfo.wcstask_state = state; //完成rgv、移动任务到历史 CommonFunction.AddRgvTaskToHistory(taskRGVinfo, taskRGVinfoRepository, taskRGVinfo_HtyRepository); Dt_TaskWCSinfoRepository.Instance.Update(taskWCSinfo, true); } //移库出库任务完成 else if (taskRGVinfo.rgvtask_taskType == RGVTaskType.RgvTaskType_Outbound.ToString() && taskWCSinfo.wcstask_type == TaskType.TaskType_MoveOutbound.ToString()) { taskRGVinfo.rgvtask_taskStatus = RGVTaskState.RgvTaskState_Done.ToString(); taskWCSinfo.wcstask_state = TaskState.TaskState_RGV_Finished.ToString(); //完成rgv、移动任务到历史 CommonFunction.AddRgvTaskToHistory(taskRGVinfo, taskRGVinfoRepository, taskRGVinfo_HtyRepository); Dt_TaskWCSinfoRepository.Instance.Update(taskWCSinfo, true); } return content.OK(); }); } catch (Exception ex) { content.Error(ex.Message + ex.StackTrace); } return content; } } }