private void PutAway(int whId, int custId, long ptaId, string ptaCode, TInPutawayD[] putAwayDetailList, List <TInvtD> invts) { //单个SKU上架 var hid = invts.Select(x => x.HId).FirstOrDefault(); var Sku = invts.Select(x => new { x.SkuId, x.Sku, x.Barcode }).FirstOrDefault(); // 按货位分组 var detailByBins = putAwayDetailList.GroupBy(x => new { x.ZoneId, x.ZoneCode, x.BinId, x.BinCode }); foreach (var detailByBin in detailByBins) { //单个SKU+货位 //需要增加的库存 var toZoneId = detailByBin.Key.ZoneId; var toZone = detailByBin.Key.ZoneCode; var toBinId = detailByBin.Key.BinId; var toBin = detailByBin.Key.BinCode; var qty = putAwayDetailList.Where(x => x.BinId == toBinId).Sum(x => x.Qty); var d2 = new TInvtD { HId = hid, WhId = whId, SkuId = Sku.SkuId, Sku = Sku.Sku, Barcode = Sku.Barcode, ZoneId = toZoneId, ZoneCode = toZone, BinId = toBinId, BinCode = toBin, Qty = qty, CreatedBy = DefaultUser.UserName, CreatedTime = DateTime.UtcNow }; d2.TInvtChangeLog = new TInvtChangeLog { OrderId = ptaId, OrderType = Enum.GetName(typeof(EnumOrderType), EnumOrderType.PTA), OrderCode = ptaCode, WhId = whId, InvtDId = d2.Id, CustId = custId, SkuId = Sku.SkuId, Barcode = Sku.Barcode, BinId = d2.BinId, ZoneId = d2.ZoneId, Qty = qty, CreatedBy = DefaultUser.UserName, CreatedTime = DateTime.UtcNow, }; wmsinventory.TInvtDs.Add(d2); //需要扣减的库存 ReduceQty(qty, null, invts); } }
private List <TInvtD> ReduceQtyAndAllotQty(int totalQty, TInvt invt, List <TInvtD> invtDs) { var newInvtDs = new List <TInvtD>(); foreach (var invtd in invtDs) { var newInvtD = new TInvtD { Id = invtd.Id, HId = invtd.HId, SkuId = invtd.SkuId, Sku = invtd.Sku, Barcode = invtd.Barcode, Qty = 0, AllotQty = 0, ZoneId = invtd.ZoneId, ZoneCode = invtd.ZoneCode, BinId = invtd.BinId, BinCode = invtd.BinCode, }; if (totalQty > 0) { if (totalQty <= invtd.AllotQty) //有其他出库单分配数 { invtd.AllotQty -= totalQty; invtd.Qty -= totalQty; invt.AllotQty -= totalQty; invt.Qty -= totalQty; newInvtD.Qty = totalQty; newInvtDs.Add(newInvtD); break; } else { //循环扣减 totalQty -= invtd.AllotQty; invtd.Qty -= invt.AllotQty; invtd.AllotQty = 0; invt.Qty -= invt.AllotQty; invt.AllotQty = 0; newInvtD.Qty = invtd.AllotQty; newInvtDs.Add(newInvtD); } } } return(newInvtDs); }
private TInvt Do2(int whId, int custId, string rcvCode, TInInboundD t) { //这是新增的情况 var h = new TInvt { WhId = whId, SkuId = t.SkuId, Sku = t.Sku, Barcode = t.Barcode, CreatedBy = DefaultUser.UserName, IsDeleted = false, Qty = t.Qty, CreatedTime = DateTime.UtcNow }; var bin = GetDefalutBin(whId); var d2 = new TInvtD { HId = h.Id, WhId = whId, SkuId = t.SkuId, Sku = t.Sku, Barcode = t.Barcode, ZoneId = bin.Item1, ZoneCode = bin.Item2, BinId = bin.Item3, BinCode = bin.Item4, CreatedBy = "rick.li", IsDeleted = 0, Qty = t.Qty, CreatedTime = DateTime.UtcNow }; var log = new TInvtChangeLog { OrderId = t.HId, OrderType = Enum.GetName(typeof(EnumOrderType), EnumOrderType.RCV), OrderCode = rcvCode, WhId = whId, InvtDId = d2.Id, CustId = custId, SkuId = t.SkuId, Barcode = t.Barcode, BinId = d2.BinId, ZoneId = d2.ZoneId, Qty = t.Qty, CreatedBy = DefaultUser.UserName, CreatedTime = DateTime.UtcNow, }; d2.TInvtChangeLog = log; h.DetailList.Add(d2); h.Qty = d2.Qty; return(h); }
private List <TInvtD> AddAllotQty(int skuQty, List <TInvtD> invtds) { var list = new List <TInvtD>(); var allQty = skuQty; foreach (var invtd in invtds) { var newInvtD = new TInvtD { Id = invtd.Id, HId = invtd.HId, SkuId = invtd.SkuId, Sku = invtd.Sku, Barcode = invtd.Barcode, Qty = allQty, AllotQty = 0, ZoneId = invtd.ZoneId, ZoneCode = invtd.ZoneCode, BinId = invtd.BinId, BinCode = invtd.BinCode, }; var canQty = invtd.Qty - invtd.AllotQty - invtd.LockedQty; if (canQty >= skuQty) { invtd.AllotQty += skuQty; newInvtD.AllotQty = skuQty; list.Add(newInvtD); break; } else { //循环分配的情况 invtd.AllotQty += canQty; skuQty -= canQty; newInvtD.AllotQty = canQty; list.Add(newInvtD); } } return(list); }
private void DoDeliveryLog(long shpId, string shpCode, int whId, int custId, TInvtD invtd, int qty) { var log = new TInvtChangeLog { OrderId = shpId, OrderType = Enum.GetName(typeof(EnumOrderType), EnumOrderType.SHP), OrderCode = shpCode, WhId = whId, CustId = custId, InvtDId = invtd.Id, SkuId = invtd.SkuId, Barcode = invtd.Barcode, BinId = invtd.BinId, ZoneId = invtd.ZoneId, Qty = qty, CreatedBy = DefaultUser.UserName, CreatedTime = DateTime.UtcNow, }; wmsinventory.TInvtChangeLogs.Add(log); }
public void UnlockAndMove(long oId, string oCode, int oWhId, int oCustId, VInvtData fromData, VInvtData toData) { //首先查询库存,然后循环扣减 var invts = wmsinventory.TInvtDs .Where(x => x.ZoneId == fromData.ZoneId && x.BinId == fromData.BinId && x.SkuId == fromData.SkuId && x.Qty - x.AllotQty - x.LockedQty > 0 && x.LockedQty > 0) .ToList(); var totalQty = fromData.Qty; var detaiList = new List <TInvtD>(); foreach (var invt in invts) { var invtDetail = new TInvtD { HId = invt.HId, ZoneId = toData.ZoneId, ZoneCode = toData.ZoneCode, BinId = toData.BinId, BinCode = toData.BinCode, SkuId = toData.SkuId, Sku = toData.Sku, Barcode = toData.Barcode, CreatedBy = DefaultUser.UserName, CreatedTime = DateTime.UtcNow }; var invtLog = new TInvtChangeLog { OrderId = oId, OrderType = Enum.GetName(typeof(EnumOrderType), EnumOrderType.RCV), OrderCode = oCode, WhId = oWhId, InvtDId = invtDetail.Id, CustId = oCustId, SkuId = toData.SkuId, Barcode = toData.Barcode, BinId = toData.BinId, ZoneId = toData.ZoneId, CreatedBy = DefaultUser.UserName, CreatedTime = DateTime.UtcNow, }; var invtLog2 = new TInvtChangeLog { OrderId = oId, OrderType = Enum.GetName(typeof(EnumOrderType), EnumOrderType.RCV), OrderCode = oCode, WhId = oWhId, InvtDId = invt.Id, CustId = oCustId, SkuId = toData.SkuId, Barcode = toData.Barcode, BinId = toData.BinId, ZoneId = toData.ZoneId, CreatedBy = DefaultUser.UserName, CreatedTime = DateTime.UtcNow, }; if (totalQty > 0) { var canQty = invt.LockedQty; if (canQty >= totalQty) { invt.LockedQty -= totalQty; totalQty = 0; invtLog2.Qty = totalQty; invt.TInvtChangeLog = invtLog2; invtDetail.Qty = totalQty; invtLog.Qty = totalQty; invtDetail.TInvtChangeLog = invtLog; detaiList.Add(invtDetail); } else { invt.LockedQty -= canQty; totalQty -= canQty; invtLog2.Qty = canQty; invt.TInvtChangeLog = invtLog2; invtDetail.Qty = canQty; invtLog.Qty = canQty; invtDetail.TInvtChangeLog = invtLog; detaiList.Add(invtDetail); } } } wmsinventory.TInvtDs.AddRange(detaiList); wmsinventory.SaveChanges(); }