private void ShipCartonsInPallet(ApplicationDbContext context, FBAPickDetail pickDetailInDb) { var cartonsInPalletInDb = context.FBAPickDetailCartons .Include(x => x.FBAPickDetail) .Include(x => x.FBACartonLocation) .Where(x => x.FBAPickDetail.Id == pickDetailInDb.Id); foreach (var carton in cartonsInPalletInDb) { carton.FBACartonLocation.ShippedCtns += carton.PickCtns; carton.FBACartonLocation.PickingCtns -= carton.PickCtns; if (carton.FBACartonLocation.Status != FBAStatus.InPallet) { if (carton.FBACartonLocation.PickingCtns == 0 && carton.FBACartonLocation.AvailableCtns != 0 && carton.FBACartonLocation.Location != "Pallet") { carton.FBACartonLocation.Status = FBAStatus.InStock; } else if (carton.FBACartonLocation.PickingCtns == 0 && carton.FBACartonLocation.AvailableCtns != 0 && carton.FBACartonLocation.Location == "Pallet") { carton.FBACartonLocation.Status = FBAStatus.InPallet; } else if (carton.FBACartonLocation.PickingCtns == 0 && carton.FBACartonLocation.AvailableCtns == 0) { carton.FBACartonLocation.Status = FBAStatus.Shipped; } } } }
private FBAPickDetail CreateFBAPickDetailFromCartonLocation(FBACartonLocation fbaCartonLocationInDb, FBAShipOrder shipOrderInDb, int ctnQuantity, IList <FBAPickDetailCarton> pickDetailCartonList) { var pickDetail = new FBAPickDetail(); pickDetail.AssembleUniqueIndex(fbaCartonLocationInDb.Container, fbaCartonLocationInDb.GrandNumber); pickDetail.AssembleFirstStringPart(fbaCartonLocationInDb.ShipmentId, fbaCartonLocationInDb.AmzRefId, fbaCartonLocationInDb.WarehouseCode); pickDetail.AssembleActualDetails(fbaCartonLocationInDb.GrossWeightPerCtn * ctnQuantity, fbaCartonLocationInDb.CBMPerCtn * ctnQuantity, ctnQuantity); pickDetail.Status = FBAStatus.Picking; pickDetail.Size = FBAStatus.Na; pickDetail.CtnsPerPlt = 0; pickDetail.PickableCtns = ctnQuantity; pickDetail.Location = fbaCartonLocationInDb.Location; pickDetail.InboundDate = fbaCartonLocationInDb.FBAOrderDetail.FBAMasterOrder.InboundDate; fbaCartonLocationInDb.PickingCtns += ctnQuantity; fbaCartonLocationInDb.AvailableCtns -= ctnQuantity; fbaCartonLocationInDb.Status = FBAStatus.Picking; pickDetail.FBACartonLocation = fbaCartonLocationInDb; pickDetail.OrderType = FBAOrderType.ECommerce; pickDetail.HowToDeliver = fbaCartonLocationInDb.HowToDeliver; pickDetail.FBAShipOrder = shipOrderInDb; var pickDetailCarton = new FBAPickDetailCarton(); pickDetailCarton.FBACartonLocation = fbaCartonLocationInDb; pickDetailCarton.FBAPickDetail = pickDetail; pickDetailCarton.PickCtns = ctnQuantity; pickDetailCartonList.Add(pickDetailCarton); return(pickDetail); }
private FBAPickDetail CreateFBAPickDetail(FBACartonLocation cartonLocation, int ctns, IList <FBAPickDetailCarton> pickDetailCartonList) { //如果不是放在托盘上的货,则直接建立pickdetail和cartondetail的关系 if (cartonLocation.Status != "InPallet") { var location = CombineLocation(cartonLocation.FBAPallet.FBAPalletLocations.Select(x => x.Location).ToList()); return(new FBAPickDetail { Location = location, GrandNumber = cartonLocation.GrandNumber, Container = cartonLocation.Container, ShipmentId = cartonLocation.ShipmentId, AmzRefId = cartonLocation.AmzRefId, WarehouseCode = cartonLocation.WarehouseCode, ActualCBM = cartonLocation.CBMPerCtn * ctns, Size = " ", ActualGrossWeight = cartonLocation.GrossWeightPerCtn * ctns, ActualQuantity = ctns, OrderType = FBAOrderType.Standard, HowToDeliver = cartonLocation.HowToDeliver, Status = FBAStatus.Picking, PickableCtns = ctns, FBACartonLocation = cartonLocation }); } //如果是托盘里的carton,先找到其托盘对象,再在托盘对象中拣货 else { var palletLocation = cartonLocation.FBAPallet.FBAPalletLocations.First(); var pickDetail = new FBAPickDetail { Location = palletLocation.Location, GrandNumber = palletLocation.GrandNumber, Container = palletLocation.Container, ShipmentId = palletLocation.ShipmentId, AmzRefId = palletLocation.AmzRefId, WarehouseCode = palletLocation.WarehouseCode, ActualCBM = cartonLocation.CBMPerCtn * ctns, Size = " ", ActualGrossWeight = cartonLocation.GrossWeightPerCtn * ctns, ActualQuantity = ctns, OrderType = FBAOrderType.Standard, HowToDeliver = palletLocation.HowToDeliver, Status = FBAStatus.Picking, PickableCtns = ctns, FBAPalletLocation = palletLocation }; pickDetailCartonList.Add(new FBAPickDetailCarton { PickCtns = ctns, FBAPickDetail = pickDetail, FBACartonLocation = cartonLocation }); return(pickDetail); } }
private void ShipPickDetailCartons(FBACartonLocation cartonLocationInDb, FBAPickDetail pickDetailInDb) { cartonLocationInDb.ShippedCtns += pickDetailInDb.ActualQuantity; cartonLocationInDb.PickingCtns -= pickDetailInDb.ActualQuantity; if (cartonLocationInDb.PickingCtns == 0 && cartonLocationInDb.AvailableCtns != 0 && cartonLocationInDb.Location != "Pallet") { cartonLocationInDb.Status = FBAStatus.InStock; } else if (cartonLocationInDb.PickingCtns == 0 && cartonLocationInDb.AvailableCtns != 0 && cartonLocationInDb.Location == "Pallet") { cartonLocationInDb.Status = FBAStatus.InPallet; } else if (cartonLocationInDb.PickingCtns == 0 && cartonLocationInDb.AvailableCtns == 0) { cartonLocationInDb.Status = FBAStatus.Shipped; } }
// 散箱放回方法 public void PutbackPickedCartonItemToNewLocation(FBAPickDetail pickDetailInDb, string newLocation, string user) { pickDetailInDb.FBACartonLocation.ActualQuantity -= pickDetailInDb.ActualQuantity; pickDetailInDb.FBACartonLocation.PickingCtns -= pickDetailInDb.ActualQuantity; pickDetailInDb.FBACartonLocation.ActualGrossWeight -= pickDetailInDb.ActualGrossWeight; pickDetailInDb.FBACartonLocation.ActualCBM -= pickDetailInDb.ActualCBM; var newFBACartonLocation = new FBACartonLocation { Status = FBAStatus.InStock, ActualCBM = pickDetailInDb.FBACartonLocation.CBMPerCtn * pickDetailInDb.ActualQuantity, ActualGrossWeight = pickDetailInDb.FBACartonLocation.GrossWeightPerCtn * pickDetailInDb.ActualQuantity, ActualQuantity = pickDetailInDb.ActualQuantity, LocationStatus = FBAStatus.PutBack, AmzRefId = pickDetailInDb.FBACartonLocation.AmzRefId, AvailableCtns = pickDetailInDb.ActualQuantity, CBMPerCtn = pickDetailInDb.FBACartonLocation.CBMPerCtn, Container = pickDetailInDb.FBACartonLocation.Container, GrandNumber = pickDetailInDb.FBACartonLocation.GrandNumber, ShipmentId = pickDetailInDb.FBACartonLocation.ShipmentId, GrossWeightPerCtn = pickDetailInDb.FBACartonLocation.GrossWeightPerCtn, Location = newLocation, HowToDeliver = pickDetailInDb.FBACartonLocation.HowToDeliver, WarehouseCode = pickDetailInDb.FBACartonLocation.WarehouseCode, FBAOrderDetail = pickDetailInDb.FBACartonLocation.FBAOrderDetail, FBAMasterOrder = pickDetailInDb.FBACartonLocation.FBAMasterOrder, Memo = "Put back from shipping order: " + pickDetailInDb.FBAShipOrder.ShipOrderNumber + " on " + DateTime.Now.ToString("yyyy-MM-dd") }; _context.OrderOperationLogs.Add(new OrderOperationLog { Type = FBAStatus.PutBack, OperationDate = DateTime.Now, Operator = user, FBAShipOrder = pickDetailInDb.FBAShipOrder, Description = "Put back " + pickDetailInDb.ActualQuantity + " loose carton(s) from Carton Location Id: " + pickDetailInDb.FBACartonLocation.Id + ", Container: " + pickDetailInDb.FBACartonLocation.Container + ", ShipmentId(SKU): " + pickDetailInDb.FBACartonLocation.ShipmentId + ", AmzRefId: " + pickDetailInDb.FBACartonLocation.AmzRefId + ", Warehouse code: " + pickDetailInDb.FBACartonLocation.WarehouseCode + " to new location: " + newLocation }); _context.FBACartonLocations.Add(newFBACartonLocation); _context.FBAPickDetailCartons.RemoveRange(pickDetailInDb.FBAPickDetailCartons); _context.FBAPickDetails.Remove(pickDetailInDb); _context.SaveChanges(); }
// 托盘货放回方法 public void PutbackPickedPalletItemsToNewLocation(FBAPickDetail pickDetailInDb, string newLocation, string user) { var pickedCtns = 0; pickDetailInDb.FBAPalletLocation.ActualPlts -= pickDetailInDb.PltsFromInventory; pickDetailInDb.FBAPalletLocation.PickingPlts -= pickDetailInDb.PltsFromInventory; pickDetailInDb.FBAPalletLocation.ActualGrossWeight -= pickDetailInDb.ActualGrossWeight; pickDetailInDb.FBAPalletLocation.ActualCBM -= pickDetailInDb.ActualCBM; pickDetailInDb.FBAPalletLocation.FBAPallet.ActualPallets -= pickDetailInDb.PltsFromInventory; pickDetailInDb.FBAPalletLocation.FBAPallet.ActualQuantity -= pickDetailInDb.ActualQuantity; pickDetailInDb.FBAPalletLocation.FBAPallet.ActualGrossWeight -= pickDetailInDb.ActualGrossWeight; pickDetailInDb.FBAPalletLocation.FBAPallet.ActualCBM -= pickDetailInDb.ActualCBM; pickDetailInDb.FBAPalletLocation.FBAPallet.ComsumedPallets -= pickDetailInDb.PltsFromInventory; var newFBAPallet = new FBAPallet { ActualCBM = pickDetailInDb.ActualCBM, ActualGrossWeight = pickDetailInDb.ActualGrossWeight, ActualPallets = pickDetailInDb.PltsFromInventory, ActualQuantity = pickDetailInDb.ActualQuantity, AmzRefId = pickDetailInDb.FBAPalletLocation.FBAPallet.AmzRefId, Container = pickDetailInDb.FBAPalletLocation.FBAPallet.Container, ShipmentId = pickDetailInDb.FBAPalletLocation.FBAPallet.ShipmentId, ComsumedPallets = pickDetailInDb.PltsFromInventory, GrandNumber = pickDetailInDb.FBAPalletLocation.FBAPallet.GrandNumber, HowToDeliver = pickDetailInDb.FBAPalletLocation.FBAPallet.HowToDeliver, LocationStatus = FBAStatus.PutBack, IsOverSizeOrOverwidth = pickDetailInDb.FBAPalletLocation.FBAPallet.IsOverSizeOrOverwidth, HasSortingMarking = pickDetailInDb.FBAPalletLocation.FBAPallet.HasSortingMarking, PalletSize = pickDetailInDb.FBAPalletLocation.FBAPallet.PalletSize, WarehouseCode = pickDetailInDb.FBAPalletLocation.FBAPallet.WarehouseCode, DoesAppliedLabel = pickDetailInDb.FBAPalletLocation.FBAPallet.DoesAppliedLabel, FBAMasterOrder = pickDetailInDb.FBAPalletLocation.FBAPallet.FBAMasterOrder, Memo = "Put back from shipping order: " + pickDetailInDb.FBAShipOrder.ShipOrderNumber + " on " + DateTime.Now.ToString("yyyy-MM-dd") }; var newCartonLocationsList = new List <FBACartonLocation>(); var ctnLogList = new List <OrderOperationLog>(); foreach (var p in pickDetailInDb.FBAPickDetailCartons) { p.FBACartonLocation.ActualQuantity -= p.PickCtns; p.FBACartonLocation.PickingCtns -= p.PickCtns; p.FBACartonLocation.ActualGrossWeight -= p.FBACartonLocation.GrossWeightPerCtn * p.PickCtns; p.FBACartonLocation.ActualCBM -= p.FBACartonLocation.CBMPerCtn * p.PickCtns; if (p.FBACartonLocation.ActualGrossWeight < 0) { p.FBACartonLocation.ActualGrossWeight = 0; } if (p.FBACartonLocation.ActualCBM < 0) { p.FBACartonLocation.ActualCBM = 0; } var newFBACartonLocation = new FBACartonLocation { Status = FBAStatus.InPallet, ActualCBM = p.FBACartonLocation.CBMPerCtn * p.PickCtns, ActualGrossWeight = p.FBACartonLocation.GrossWeightPerCtn * p.PickCtns, ActualQuantity = p.PickCtns, LocationStatus = FBAStatus.PutBack, AmzRefId = p.FBACartonLocation.AmzRefId, AvailableCtns = p.PickCtns, CBMPerCtn = p.FBACartonLocation.CBMPerCtn, Container = p.FBACartonLocation.Container, GrandNumber = p.FBACartonLocation.GrandNumber, ShipmentId = p.FBACartonLocation.ShipmentId, GrossWeightPerCtn = p.FBACartonLocation.GrossWeightPerCtn, Location = "Pallet", HowToDeliver = p.FBACartonLocation.HowToDeliver, WarehouseCode = p.FBACartonLocation.WarehouseCode, FBAPallet = newFBAPallet, FBAOrderDetail = p.FBACartonLocation.FBAOrderDetail, FBAMasterOrder = p.FBACartonLocation.FBAMasterOrder, Memo = "Put back from shipping order: " + pickDetailInDb.FBAShipOrder.ShipOrderNumber + " on " + DateTime.Now.ToString("yyyy-MM-dd") }; pickedCtns += p.PickCtns; newCartonLocationsList.Add(newFBACartonLocation); ctnLogList.Add(new OrderOperationLog { Type = FBAStatus.PutBack, OperationDate = DateTime.Now, Operator = user, FBAShipOrder = pickDetailInDb.FBAShipOrder, Description = "Put back " + p.PickCtns + " in-pallet carton(s) from Carton Location Id: " + p.FBACartonLocation.Id + ", Container: " + p.FBACartonLocation.Container + ", ShipmentId(SKU): " + p.FBACartonLocation.ShipmentId + ", AmzRefId: " + p.FBACartonLocation.AmzRefId + ", Warehouse code: " + p.FBACartonLocation.WarehouseCode + " to new location: " + newLocation }); } pickDetailInDb.FBAPalletLocation.ActualQuantity -= pickedCtns; var newFBAPalletLocation = new FBAPalletLocation { Status = FBAStatus.InStock, ActualCBM = pickDetailInDb.ActualCBM, ActualGrossWeight = pickDetailInDb.ActualGrossWeight, ActualPlts = pickDetailInDb.PltsFromInventory, ActualQuantity = pickedCtns, AvailablePlts = pickDetailInDb.PltsFromInventory, AmzRefId = pickDetailInDb.AmzRefId, Container = pickDetailInDb.Container, CBMPerPlt = pickDetailInDb.FBAPalletLocation.CBMPerPlt, CtnsPerPlt = pickDetailInDb.FBAPalletLocation.CtnsPerPlt, GrandNumber = pickDetailInDb.FBAPalletLocation.GrandNumber, GrossWeightPerPlt = pickDetailInDb.FBAPalletLocation.GrossWeightPerPlt, HowToDeliver = pickDetailInDb.FBAPalletLocation.HowToDeliver, Location = newLocation, PalletSize = pickDetailInDb.FBAPalletLocation.PalletSize, ShipmentId = pickDetailInDb.FBAPalletLocation.ShipmentId, LocationStatus = FBAStatus.PutBack, WarehouseCode = pickDetailInDb.FBAPalletLocation.WarehouseCode, FBAMasterOrder = pickDetailInDb.FBAPalletLocation.FBAMasterOrder, FBAPallet = newFBAPallet, Memo = "Put back from shipping order: " + pickDetailInDb.FBAShipOrder.ShipOrderNumber + " on " + DateTime.Now.ToString("yyyy-MM-dd") }; var pltLog = new OrderOperationLog { Type = FBAStatus.PutBack, FBAShipOrder = pickDetailInDb.FBAShipOrder, OperationDate = DateTime.Now, Operator = user }; if (pickDetailInDb.FBAPickDetailCartons == null) { pltLog.Description = "Put back " + pickDetailInDb.PltsFromInventory + " empty pallet(s) from Pallet Location Id: " + pickDetailInDb.FBAPalletLocation.Id + ", Container: " + pickDetailInDb.Container + ", ShipmentId(SKU): " + pickDetailInDb.ShipmentId + ", AmzRefId: " + pickDetailInDb.AmzRefId + ", Warehouse code: " + pickDetailInDb.WarehouseCode + " to new location: " + newLocation; } else { pltLog.Description = "Put back " + pickDetailInDb.PltsFromInventory + " pallet(s) from Pallet Location Id: " + pickDetailInDb.FBAPalletLocation.Id + " Container: " + pickDetailInDb.Container + ", ShipmentId(SKU): " + pickDetailInDb.ShipmentId + ", AmzRefId: " + pickDetailInDb.AmzRefId + ", Warehouse code: " + pickDetailInDb.WarehouseCode + " to new location: " + newLocation; } _context.OrderOperationLogs.Add(pltLog); _context.OrderOperationLogs.AddRange(ctnLogList); _context.FBACartonLocations.AddRange(newCartonLocationsList); _context.FBAPallets.Add(newFBAPallet); _context.FBAPalletLocations.Add(newFBAPalletLocation); _context.FBAPickDetailCartons.RemoveRange(pickDetailInDb.FBAPickDetailCartons); _context.FBAPickDetails.Remove(pickDetailInDb); _context.SaveChanges(); }
private FBAPickDetail CreateFBAPickDetailFromPalletLocation(FBAPalletLocation fbaPalletLocationInDb, FBAShipOrder shipOrderInDb, int pltQuantity, int newPltQuantity, IList <FBAPickDetailCarton> pickDetailCartonList, IEnumerable <PickCartonDto> objArray) { var pickDetail = new FBAPickDetail(); pickDetail.AssembleUniqueIndex(fbaPalletLocationInDb.Container, fbaPalletLocationInDb.GrandNumber); pickDetail.AssembleFirstStringPart(fbaPalletLocationInDb.ShipmentId, fbaPalletLocationInDb.AmzRefId, fbaPalletLocationInDb.WarehouseCode); pickDetail.AssembleActualDetails(0, 0, objArray.Sum(x => x.PickQuantity)); pickDetail.Status = FBAStatus.Picking; pickDetail.Size = fbaPalletLocationInDb.PalletSize; pickDetail.PickableCtns = objArray.Sum(x => x.PickQuantity); pickDetail.NewPlts = newPltQuantity; pickDetail.PltsFromInventory = pltQuantity; //pickDetail.ActualPlts = pltQuantity + newPltQuantity; //现在强行规定,实际出库托盘数量为0,防止仓库偷懒不调整 pickDetail.ActualPlts = 0; pickDetail.CtnsPerPlt = fbaPalletLocationInDb.CtnsPerPlt; pickDetail.Location = fbaPalletLocationInDb.Location; fbaPalletLocationInDb.PickingPlts += pltQuantity; //如果需要在库存中体现新打的托盘数量,禁用上面一行,启用下面一行 //fbaPalletLocationInDb.PickingPlts += pltQuantity + newPltQuantity; fbaPalletLocationInDb.AvailablePlts -= pltQuantity; fbaPalletLocationInDb.Status = FBAStatus.Picking; pickDetail.HowToDeliver = fbaPalletLocationInDb.HowToDeliver; pickDetail.FBAPalletLocation = fbaPalletLocationInDb; pickDetail.OrderType = FBAOrderType.Standard; pickDetail.HowToDeliver = fbaPalletLocationInDb.HowToDeliver; pickDetail.InboundDate = fbaPalletLocationInDb.FBAMasterOrder.InboundDate; pickDetail.FBAShipOrder = shipOrderInDb; var cartonLocationInPalletsInDb = fbaPalletLocationInDb.FBAPallet.FBACartonLocations; foreach (var obj in objArray) { if (obj.PickQuantity == 0) { continue; } var cartonInPalletInDb = cartonLocationInPalletsInDb.SingleOrDefault(x => x.Id == obj.Id); cartonInPalletInDb.PickingCtns += obj.PickQuantity; var pickDetailCarton = new FBAPickDetailCarton { PickCtns = obj.PickQuantity, FBAPickDetail = pickDetail, FBACartonLocation = cartonInPalletInDb }; cartonInPalletInDb.AvailableCtns -= obj.PickQuantity; pickDetail.ActualCBM += obj.PickQuantity * cartonInPalletInDb.CBMPerCtn; pickDetail.ActualGrossWeight += obj.PickQuantity * cartonInPalletInDb.GrossWeightPerCtn; pickDetailCartonList.Add(pickDetailCarton); } // 如果捡完了托盘数量但是箱子还有剩余,则报错 var availablePlts = fbaPalletLocationInDb.FBAPallet.FBAPalletLocations.Sum(x => x.AvailablePlts); var availableCtns = fbaPalletLocationInDb.FBAPallet.FBACartonLocations.Sum(x => x.AvailableCtns); if (availablePlts == 0 && availableCtns != 0) { throw new Exception("Pick failed. The pallets number of SKU " + fbaPalletLocationInDb.ShipmentId + " will be 0 after this pick but there are still many cartons inside. Please make sure there is no thing left before picking the last pallte."); } // 如果托盘中的箱子捡完了但是托盘数没捡完,则自动把所有剩下的托盘数带上 if (availableCtns == 0 && availablePlts != 0) { pickDetail.PltsFromInventory += availablePlts; fbaPalletLocationInDb.PickingPlts += availablePlts; fbaPalletLocationInDb.AvailablePlts = 0; } return(pickDetail); }