using Magicodes.IE.Core;
using MailKit.Search;
using System;
using System.Threading.Tasks;
using WIDESEA_Core;
using WIDESEA_Core.Enums;
using WIDESEA_Core.Helper;
using WIDESEA_DTO.Inbound;
using WIDESEA_DTO.WCSInfo;
using WIDESEA_Model.Models;
using WIDESEAWCS_DTO.WCSInfo;
namespace WIDESEA_TaskInfoService
{
public partial class TaskService
{
///
/// 产线申请
///
///
///
public WebResponseContent ProductionlineRequest(ProductionlineDTO productionlineDTO)
{
WebResponseContent content = new WebResponseContent();
try
{
#region MyRegion
Dt_StockInfo stockInfo = _stockService.StockInfoService.Repository.GetStockInfo(productionlineDTO.Barcode);
if (stockInfo != null) throw new Exception($"托盘【{productionlineDTO.Barcode}】已存在库存信息");
stockInfo = new Dt_StockInfo();
stockInfo.Details = new List();
#region MyRegion
Dt_InboundOrderDetail inboundOrderDetail = _inboundService.InboundOrderDetailService.Repository.QueryFirst(x => x.BatchNo == productionlineDTO.batchNo);
if (inboundOrderDetail == null)
throw new Exception($"未找到批号【{productionlineDTO.batchNo}】的入库详情");
if (inboundOrderDetail.OrderQuantity - inboundOrderDetail.ReceiptQuantity < 1)
throw new Exception($"批号【{productionlineDTO.batchNo}】组盘数量超出");
Dt_InboundOrder inboundOrder = _inboundService.InbounOrderService.Repository.QueryFirst(x => x.Id == inboundOrderDetail.OrderId);
if (inboundOrder == null) throw new Exception($"未找到批号【{productionlineDTO.batchNo}】的入库头表");
inboundOrder.Details = new List() { inboundOrderDetail };
#endregion
#region MyRegion
//var OrderNo = productionlineDTO.batchNo.Split('T')[0];
//Dt_InboundOrder inboundOrder = _inboundService.InbounOrderService.GetInboundOrder(OrderNo);
//if (inboundOrder == null) throw new Exception($"未找到入库单【{OrderNo}】");
//Dt_InboundOrderDetail inboundOrderDetail = inboundOrder.Details.FirstOrDefault(x => x.BatchNo == productionlineDTO.batchNo);
//if (inboundOrderDetail == null) throw new Exception($"未找到批号【{productionlineDTO.batchNo}】的入库详情");
//if (inboundOrderDetail.OrderQuantity - inboundOrderDetail.ReceiptQuantity < 1) throw new Exception($"批号【{productionlineDTO.batchNo}】组盘数量超出");
#endregion
Dt_Task dt_Task = new Dt_Task()
{
CurrentAddress = productionlineDTO.stationCode,
NextAddress = "SC01",
SourceAddress = productionlineDTO.stationCode,
TargetAddress = "SC01",
Creater = "System",
PalletCode = productionlineDTO.Barcode,
Roadway = "SC01",
OrderNo = inboundOrder.OrderNo,
TaskNum = BaseDal.GetTaskNum(nameof(SequenceEnum.SeqTaskNum)),
TaskState = InTaskStatusEnum.InNew.ObjToInt(),
TaskType = TaskTypeEnum.Inbound.ObjToInt(),
//TaskType = productionlineDTO.traytype == 2 ? TaskTypeEnum.PalletInbound.ObjToInt() : TaskTypeEnum.PalletReturnInbound.ObjToInt(),
CreateDate = DateTime.Now,
Dispatchertime = DateTime.Now,
};
content = _stockService.StockInfoService.AddStockInfo(ref stockInfo, ref inboundOrder, productionlineDTO);
if (!content.Status) throw new Exception(content.Message);
Db.Ado.BeginTran();
_inboundService.InbounOrderService.UpdateDataWithDetail(inboundOrder);
_stockService.StockInfoService.AddMaterielGroup(stockInfo);
AddData(dt_Task);
content.OK(data: dt_Task);
Db.Ado.CommitTran();
#endregion
#region MyRegion
//switch (productionlineDTO.traytype)
//{
// case 1://放空托
// case 3://放空盒
// //case 5://放满盒
// {
// //查找物料所有库存
// var stockInfos = _stockService.StockInfoService.Repository.GetStockInfos(productionlineDTO.traytype.ToString());
// //查找先入物料货位最后入库物料
// var stockInfo = stockInfos.Where(x => x.LocationCode == stockInfos.OrderBy(x => x.InDate).FirstOrDefault()?.LocationCode).OrderByDescending(x => x.InDate).FirstOrDefault();
// if (stockInfo == null) throw new Exception($"无物料编号【{productionlineDTO.traytype}】的库存");
// var location = _basicService.LocationInfoService.GetLocation(stockInfo.LocationCode);
// #region 生成出库任务
// Dt_Task dt_Task = new Dt_Task()
// {
// CurrentAddress = stockInfo.LocationCode,
// NextAddress = "SC01",
// SourceAddress = stockInfo.LocationCode,
// TargetAddress = productionlineDTO.stationCode,
// Creater = "System",
// PalletCode = stockInfo.PalletCode,
// OrderNo = null,
// Roadway = "SC01",
// TaskNum = Convert.ToInt32(DateTime.Now.ToString("HHmmss")),
// TaskState = OutTaskStatusEnum.OutNew.ObjToInt(),
// TaskType = productionlineDTO.traytype == 1 ? TaskTypeEnum.PalletOutbound.ObjToInt() : TaskTypeEnum.PalletFillOutbound.ObjToInt(),
// IsPickPlace = location.MaxQty - location.CurrentQty == 0,
// CreateDate = DateTime.Now,
// Dispatchertime = DateTime.Now,
// };
// #endregion
// location.CurrentQty--;
// location.LocationStatus = LocationStatusEnum.Outbounding.ObjToInt();
// stockInfo.StockStatus = StockStatusEmun.出库锁定.ObjToInt();
// stockInfo.Details.FirstOrDefault().Status = StockStatusEmun.出库锁定.ObjToInt();
// Db.Ado.BeginTran();
// AddData(dt_Task);
// _basicService.LocationInfoService.UpdateData(location);
// _stockService.StockInfoService.Repository.UpdateDataWithDetail(stockInfo);
// content.OK(data: dt_Task);
// Db.Ado.CommitTran();
// }
// break;
// case 2://取空托
// case 4://取满盒
// case 6://取空盒
// {
// Dt_StockInfo stockInfo = _stockService.StockInfoService.Repository.GetStockInfo(productionlineDTO.Barcode);
// if (stockInfo != null) throw new Exception($"托盘【{productionlineDTO.Barcode}】已存在库存信息");
// productionlineDTO.QtySum = Array.ConvertAll(productionlineDTO.productQty.Split(","), s => decimal.Parse(s)).Sum();//入库总数
// stockInfo = new Dt_StockInfo();
// stockInfo.Details = new List();
// Dt_InboundOrder inboundOrder = null;
// #region 生成入库任务
// Dt_Task dt_Task = new Dt_Task()
// {
// CurrentAddress = productionlineDTO.stationCode,
// NextAddress = "SC01",
// SourceAddress = productionlineDTO.stationCode,
// TargetAddress = "SC01",
// Creater = "System",
// PalletCode = productionlineDTO.Barcode,
// Roadway = "SC01",
// TaskNum = Convert.ToInt32(DateTime.Now.ToString("HHmmss")),
// TaskState = InTaskStatusEnum.InNew.ObjToInt(),
// TaskType = productionlineDTO.traytype == 2 ? TaskTypeEnum.PalletInbound.ObjToInt() : TaskTypeEnum.PalletReturnInbound.ObjToInt(),
// CreateDate = DateTime.Now,
// Dispatchertime = DateTime.Now,
// };
// #endregion
// if (productionlineDTO.traytype == 4)
// {
// var OrderNo = productionlineDTO.batchNo.Split('T')[0];
// inboundOrder = _inboundService.InbounOrderService.GetInboundOrder(OrderNo);
// if (inboundOrder == null) throw new Exception($"未找到入库单【{OrderNo}】");
// Dt_InboundOrderDetail inboundOrderDetail = inboundOrder.Details.FirstOrDefault(x => x.BatchNo == productionlineDTO.batchNo);
// if (inboundOrderDetail == null) throw new Exception($"未找到批号【{productionlineDTO.batchNo}】的入库详情");
// if (inboundOrderDetail.OrderQuantity - inboundOrderDetail.ReceiptQuantity < 1) throw new Exception($"批号【{productionlineDTO.batchNo}】组盘数量超出");
// dt_Task.OrderNo = OrderNo;
// dt_Task.TaskType = TaskTypeEnum.Inbound.ObjToInt();
// }
// content = _stockService.StockInfoService.AddStockInfo(ref stockInfo, ref inboundOrder, productionlineDTO);
// if (!content.Status) throw new Exception(content.Message);
// Db.Ado.BeginTran();
// if (inboundOrder != null) _inboundService.InbounOrderService.UpdateDataWithDetail(inboundOrder);
// _stockService.StockInfoService.AddMaterielGroup(stockInfo);
// AddData(dt_Task);
// content.OK(data: dt_Task);
// Db.Ado.CommitTran();
// }
// break;
// default:
// throw new Exception("未定义托盘类型");
//}
#endregion
}
catch (Exception ex)
{
Db.Ado.RollbackTran();
content.Error(ex.Message);
}
return content;
}
///
/// 产线申请
///
///
///
public WebResponseContent ProductionlineRequest(ConveyorLineDTO lineDTO)
{
WebResponseContent content = new WebResponseContent();
try
{
var task = BaseDal.QueryFirst(x => x.PalletCode == lineDTO.Barcode);
if (task != null && task.TaskType == TaskTypeEnum.Inbound.ObjToInt())
return content.OK(data: task);
if (task != null) throw new Exception($"托盘号[{lineDTO.Barcode}]已存在任务");
Dt_StockInfo stockInfo = _stockService.StockInfoService.Repository.GetStockInfo(lineDTO.Barcode);
(bool, string) result = CheckRequestInbound(lineDTO.stationCode, lineDTO.Barcode, true, stockInfo);
if (!result.Item1) return content = WebResponseContent.Instance.Error(result.Item2);
var StockInfoDetails = stockInfo.Details.Where(x => x.StockId == stockInfo.Id).ToList();
#region 生成入库任务
Dt_Task dt_Task = new Dt_Task()
{
CurrentAddress = lineDTO.stationCode,
NextAddress = "SC01",
SourceAddress = lineDTO.stationCode,
TargetAddress = "SC01",
CreateDate = DateTime.Now,
Creater = "System",
PalletCode = lineDTO.Barcode,
OrderNo = StockInfoDetails.Count() == 1 ? StockInfoDetails.First().OrderNo : null,
Roadway = "SC01",
TaskNum = BaseDal.GetTaskNum(nameof(SequenceEnum.SeqTaskNum)),
TaskState = InTaskStatusEnum.InNew.ObjToInt(),
TaskType = TaskTypeEnum.Inbound.ObjToInt(),
};
dt_Task.Dispatchertime = dt_Task.CreateDate;
Db.Ado.BeginTran();
BaseDal.AddData(dt_Task);
task = BaseDal.QueryFirst(x => x.PalletCode == lineDTO.Barcode && x.TaskType == TaskTypeEnum.Inbound.ObjToInt());
//content.Data = dt_Task;
Db.Ado.CommitTran();
if (task != null) return content.OK(data: task);
#endregion
}
catch (Exception ex)
{
Db.Ado.RollbackTran();
content.Error(ex.Message);
}
return content;
}
}
}