using System;
using System.Collections.Generic;
using System.Text;
using WIDESEA.Common;
using WIDESEA.Core.Utilities;
using WIDESEA.Entity.DomainModels;
using WIDESEA.Services.Repositories;
namespace WIDESEA.Services.Services
{
public partial class CommonFunction
{
///
/// 完成WMS任务
///
///
///
public static WebResponseContent TaskFinishedAction(SaveModel saveModel)
{
WebResponseContent content = new WebResponseContent();
string barcode = string.Empty;
try
{
barcode = saveModel.MainData["barcode"].ToString();
Dt_taskinfo taskInfo = Dt_taskinfoRepository.Instance.FindFirst(x => x.task_barcode == barcode);
if (taskInfo == null)
return content.OK($"WMS中没有找到托盘号:【{barcode}】对应的任务");
//区分任务类型
//空托盘入库
if (taskInfo.task_type == TaskType.TaskType_Empty_Pallet_Inbound.ToString())
{
VV_ContainerInfo_EmptyPallet emptyCon = VV_ContainerInfo_EmptyPalletRepository.Instance.FindFirst(x => x.containerhead_barcode == barcode);
string rgvId = saveModel.MainData["rgvId"]?.ToString();
if (emptyCon != null)
throw new Exception($"库存中存在托盘号:【{barcode}】的【空托】库存,请人工核实,所在货位:{emptyCon.location_id}");
content = Dt_taskinfo_htyRepository.Instance.DbContextBeginTransaction(() =>
{
//删除任务、添加历史
taskInfo.task_rgvId = rgvId;
taskInfo.task_state = TaskState.TaskState_Finished.ToString();
CommonFunction.AddWMSTaskToHistory(taskInfo);
//添加空托盘库存数据
CommonFunction.AddEmptyPalletContainer(taskInfo);
//更改货位状态
Dt_locationinfo locationinfo = Dt_locationinfoRepository.Instance.FindFirst(x => x.location_id == taskInfo.task_tolocationid);
CommonFunction.ChangeLocationState(locationinfo, LocationState.LocationState_Stored.ToString());
return content.OK();
});
}
//空托盘出库
else if (taskInfo.task_type == TaskType.TaskType_Empty_Pallet_Outbound.ToString())
{
content = Dt_taskinfo_htyRepository.Instance.DbContextBeginTransaction(() =>
{
Dt_container_head container_Head = Dt_container_headRepository.Instance.FindFirst(x => x.containerhead_barcode == taskInfo.task_barcode);
Dt_container_detail container_Detail = Dt_container_detailRepository.Instance.FindFirst(x => x.containerdtl_headid == container_Head.containerhead_id.ToString());
//将库存数据一到到历史表 head、detail
CommonFunction.AddContainerHeadToHistory(container_Head, "empty");
CommonFunction.AddContainerDetailToHistory(container_Detail);
//barcodeinfo数据移动到历史
Dt_barcodeinfo barcodeinfo = Dt_barcodeinfoRepository.Instance.FindFirst(x => x.barcode_value == taskInfo.task_barcode);
CommonFunction.AddBarcodeInfoToHistory(barcodeinfo, taskInfo.task_creator);
//恢复空货位状态
Dt_locationinfo locationinfo = Dt_locationinfoRepository.Instance.FindFirst(x => x.location_id == taskInfo.task_fromlocationid);
CommonFunction.ChangeLocationState(locationinfo, LocationState.LocationState_Empty.ToString());
//删除任务
taskInfo.task_state = TaskState.TaskState_Finished.ToString();
CommonFunction.AddWMSTaskToHistory(taskInfo);
return content.OK();
});
}
//实托入库
else if (taskInfo.task_type == TaskType.TaskType_Box_Pallet_Inbound.ToString())
{
VV_ContainerInfo container = VV_ContainerInfoRepository.Instance.FindFirst(x => x.containerhead_barcode == barcode);
if (container != null)
throw new Exception($"库存中存在托盘号:【{barcode}】的【实托】库存,请人工核实,所在货位:{container.location_id}");
//string rgvId = saveModel.MainData["rgvId"]?.ToString();
content = Dt_taskinfo_htyRepository.Instance.DbContextBeginTransaction(() =>
{
Dt_boxing_head boxing_Head = Dt_boxing_headRepository.Instance.FindFirst(x => x.boxhead_barcode == taskInfo.task_barcode);
Dt_boxing_detail boxing_Detail = Dt_boxing_detailRepository.Instance.FindFirst(x => x.boxdtl_headid == boxing_Head.boxhead_id.ToString());
Dt_mes_goods_info mes_Goods_Info = Dt_mes_goods_infoRepository.Instance.FindFirst(x => x.mesInfo_qrCode == taskInfo.task_sn);
// taskInfo.task_rgvId = rgvId;
taskInfo.task_state = TaskState.TaskState_Finished.ToString();
//将轴承对应的录入信息移动至历史表
CommonFunction.AddMesInfoToHistory(mes_Goods_Info);
//将轴承对应的录入信息移动至历史表
CommonFunction.AddBoxContainer(taskInfo, boxing_Head, boxing_Detail, mes_Goods_Info);
//将组盘信息移动至历史表
CommonFunction.AddBoxingHeadToHistory(boxing_Head, boxing_Detail);
//更改货位状态
Dt_locationinfo locationinfo = Dt_locationinfoRepository.Instance.FindFirst(x => x.location_id == taskInfo.task_tolocationid);
CommonFunction.ChangeLocationState(locationinfo, LocationState.LocationState_Stored.ToString());
//删除任务、添加历史
CommonFunction.AddWMSTaskToHistory(taskInfo);
return content.OK();
});
}
//实托出库
else if (taskInfo.task_type == TaskType.TaskType_Box_Pallet_Outbound.ToString())
{
content = Dt_taskinfo_htyRepository.Instance.DbContextBeginTransaction(() =>
{
Dt_container_head container_Head = Dt_container_headRepository.Instance.FindFirst(x => x.containerhead_barcode == taskInfo.task_barcode);
Dt_container_detail container_Detail = Dt_container_detailRepository.Instance.FindFirst(x => x.containerdtl_headid == container_Head.containerhead_id.ToString());
//将库存数据一到到历史表 head、detail
CommonFunction.AddContainerHeadToHistory(container_Head, "box");
CommonFunction.AddContainerDetailToHistory(container_Detail);
//barcodeinfo数据移动到历史
Dt_barcodeinfo barcodeinfo = Dt_barcodeinfoRepository.Instance.FindFirst(x => x.barcode_value == taskInfo.task_barcode);
CommonFunction.AddBarcodeInfoToHistory(barcodeinfo, taskInfo.task_creator);
//恢复空货位状态
Dt_locationinfo locationinfo = Dt_locationinfoRepository.Instance.FindFirst(x => x.location_id == taskInfo.task_fromlocationid);
CommonFunction.ChangeLocationState(locationinfo, LocationState.LocationState_Empty.ToString());
//删除任务
taskInfo.task_state = TaskState.TaskState_Finished.ToString();
CommonFunction.AddWMSTaskToHistory(taskInfo);
return content.OK();
});
}
//测量【出库】任务
else if (taskInfo.task_type == TaskType.TaskType_Box_Pallet_Measure_Out.ToString())
{
}
//测量【回库】任务完成
else if (taskInfo.task_type == TaskType.TaskType_Box_Pallet_Measure_Back.ToString())
{
VV_ContainerInfo container = VV_ContainerInfoRepository.Instance.FindFirst(x => x.containerhead_barcode == barcode);
if (container != null)
{
//说明没错,本来在库内,就是测量回库
}
// string rgvId = null == saveModel.MainData["rgvId"] ? "" : saveModel.MainData["rgvId"].ToString();
content = Dt_taskinfo_htyRepository.Instance.DbContextBeginTransaction(() =>
{
//Dt_container_head container_Head = Dt_container_headRepository.Instance.FindFirst(x => x.containerhead_barcode == taskInfo.task_barcode);
//container_Head.containerhead_createtime = DateTime.Now;
//Dt_container_headRepository.Instance.Update(container_Head, true);
//更改货位状态
Dt_locationinfo locationinfo = Dt_locationinfoRepository.Instance.FindFirst(x => x.location_id == taskInfo.task_fromlocationid);
if (container.containerdtl_isError == "1")
{
CommonFunction.ChangeLocationState(locationinfo, LocationState.LocationState_Error.ToString());
Dt_container_detail dt_Container_Detail = Dt_container_detailRepository.Instance.FindFirst(x => x.containerdtl_barcode == barcode);
dt_Container_Detail.containerdtl_isError = "0";
Dt_container_detailRepository.Instance.Update(dt_Container_Detail,true);
}
else
{
CommonFunction.ChangeLocationState(locationinfo, LocationState.LocationState_Stored.ToString());
}
//删除任务、添加历史
// taskInfo.task_rgvId = rgvId;
taskInfo.task_state = TaskState.TaskState_Finished.ToString();
CommonFunction.AddWMSTaskToHistory(taskInfo);
return content.OK();
});
}
else if (taskInfo.task_type == TaskType.TaskType_MoveOutbound.ToString())
{
content = Dt_taskinfo_htyRepository.Instance.DbContextBeginTransaction(() =>
{
//更改货位状态
Dt_locationinfo locationinfo = Dt_locationinfoRepository.Instance.FindFirst(x => x.location_id == taskInfo.task_fromlocationid);
CommonFunction.ChangeLocationState(locationinfo, LocationState.LocationState_Empty.ToString());
Dt_locationinfo newLocation = Dt_locationinfoRepository.Instance.FindFirst(x => x.location_id == taskInfo.task_tolocationid);
CommonFunction.ChangeLocationState(newLocation, LocationState.LocationState_Stored.ToString());
Dt_barcodeinfo barcodeInfo = Dt_barcodeinfoRepository.Instance.FindFirst(r => r.barcode_value == taskInfo.task_barcode);
barcodeInfo.barcode_locationid = taskInfo.task_tolocationid;
Dt_barcodeinfoRepository.Instance.Update(barcodeInfo, x => x.barcode_locationid, true);
//删除任务、添加历史
taskInfo.task_state = TaskState.TaskState_Finished.ToString();
CommonFunction.AddWMSTaskToHistory(taskInfo);
return content.OK();
});
}
else if (taskInfo.task_type == TaskType.TaskType_CheckBackIn.ToString() || taskInfo.task_type == TaskType.TaskType_ErrorCheckBackIn.ToString())
{
content = Dt_taskinfo_htyRepository.Instance.DbContextBeginTransaction(() =>
{
//更改货位状态
Dt_locationinfo locationinfo = Dt_locationinfoRepository.Instance.FindFirst(x => x.location_id == taskInfo.task_tolocationid);
if (taskInfo.task_type == TaskType.TaskType_ErrorCheckBackIn.ToString())
locationinfo.location_state = LocationState.LocationState_Error.ToString();
else
locationinfo.location_state = LocationState.LocationState_Stored.ToString();
Dt_locationinfoRepository.Instance.Update(locationinfo, x => x.location_state, true);
//删除任务、添加历史
taskInfo.task_state = TaskState.TaskState_Finished.ToString();
CommonFunction.AddWMSTaskToHistory(taskInfo);
return content.OK();
});
}
else if (taskInfo.task_type == TaskType.TaskType_CheckOutbound.ToString())
{
//删除任务、添加历史
//taskInfo.task_state = TaskState.TaskState_Finished.ToString();
//CommonFunction.AddWMSTaskToHistory(taskInfo);
content.OK();
}
}
catch (Exception ex)
{
content.Error(ex.Message);
}
return content;
}
}
}