private void ReduceQty(int totalQty, TInvt invt, List <TInvtD> invtds) { foreach (var invtd in invtds) { var canQty = invtd.Qty - invtd.AllotQty - invtd.LockedQty; if (totalQty > 0 && canQty > 0) { if (invtd.Qty >= totalQty) { if (invt != null) { invt.Qty -= totalQty; } invtd.Qty -= totalQty; break; } else { if (invt != null) { invt.Qty = 0; } totalQty -= invtd.Qty; invtd.Qty = 0; } } } }
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 void ReduceAllotQty(int totalQty, TInvt invt, List <TInvtD> invts) { foreach (var invtd in invts) { if (totalQty > 0) { if (invtd.Qty >= totalQty) { invtd.AllotQty -= totalQty; break; } else { totalQty -= invtd.Qty; invtd.AllotQty = 0; } } } }
//收货 public void Rcv(int whId, int custId, string rcvCode, TInInboundD[] ts) { var id = ts.Select(x => x.HId).FirstOrDefault(); var rs = new List <TInvt>(); // 首先查询有没有库存记录,有就更新TInvt和TInvtD; // 没有就新增 foreach (var t in ts) { var r = new TInvt(); var h = wmsinventory.TInvts.Where(x => x.WhId == whId && x.SkuId == t.SkuId).FirstOrDefault(); if (h != null) { r = Do1(h, whId, custId, rcvCode, t); } else { r = Do2(whId, custId, rcvCode, t); rs.Add(r); } } wmsinventory.TInvts.AddRange(rs); wmsinventory.SaveChanges(); }