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
|
{
|
|
/// <summary>
|
/// 完成RGV任务
|
/// </summary>
|
/// <param name="taskRGVinfo"></param>
|
/// <returns></returns>
|
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();
|
}
|
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;
|
}
|
|
}
|
}
|