示例#1
0
        public void Locked(VInvtData vData)
        {
            //首先查询库存,然后循环扣减
            var invts = wmsinventory.TInvtDs.Where(x => x.ZoneId == vData.ZoneId && x.BinId == vData.BinId &&
                                                   x.SkuId == vData.SkuId && x.Qty - x.AllotQty - x.LockedQty > 0).ToList();

            var totalQty = vData.Qty;

            foreach (var invt in invts)
            {
                if (totalQty > 0)
                {
                    var canQty = invt.Qty - invt.AllotQty - invt.LockedQty;
                    if (canQty >= totalQty)
                    {
                        invt.LockedQty += totalQty;
                        totalQty        = 0;
                    }
                    else
                    {
                        invt.LockedQty += canQty;
                        totalQty       -= canQty;
                    }
                }
            }

            wmsinventory.SaveChanges();
        }
示例#2
0
        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();
        }