Ejemplo n.º 1
0
        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);
            }
        }
Ejemplo n.º 2
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);
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
        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);
        }
Ejemplo n.º 5
0
        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);
        }
Ejemplo n.º 6
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();
        }