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