Esempio n. 1
0
        /// <summary>
        /// 判断是否满足发货条件
        /// </summary>
        /// <param name="applyStockInfo"></param>
        /// <param name="applyStockDetailInfoList"></param>
        /// <param name="hostingFilialeId"></param>
        /// <param name="goodsDics"></param>
        /// <param name="dicAvgSettlePrice"></param>
        /// <param name="errorMsg"></param>
        /// <returns></returns>
        public bool IsMatchSendCondition(ApplyStockInfo applyStockInfo, IList <ApplyStockDetailInfo> applyStockDetailInfoList,
                                         Guid hostingFilialeId, Dictionary <Guid, Model.Goods.GoodsInfo> goodsDics, IDictionary <Guid, decimal> dicAvgSettlePrice, out string errorMsg)
        {
            errorMsg = string.Empty;

            //获取子商品列表(for获取商品库存和销量)
            var realGoodsIds = applyStockDetailInfoList.Select(act => act.GoodsId).Distinct().ToList();
            var flag         = false;

            //2、发货量限制在可得15天外库存,如果采购数大于该库存手动确认
            //当前库存-获取最近15天每日销量
            var start        = DateTime.Now.AddDays(-15);
            var end          = DateTime.Now.AddDays(-1);
            var stockCurrent = WMSSao.GoodsEffitiveStock(applyStockInfo.CompanyWarehouseId, null, realGoodsIds, hostingFilialeId);
            var saleGoodsIds = _daySalesStatistics.GetRealGoodsDaySales(applyStockInfo.CompanyWarehouseId, applyStockInfo.CompanyId, new DateTime(start.Year, start.Month, start.Day),
                                                                        new DateTime(end.Year, end.Month, end.Day), realGoodsIds);

            if (stockCurrent != null && stockCurrent.Count > 0)
            {
                bool isNeedeConfirm = false;
                foreach (var realGoodsId in realGoodsIds)
                {
                    var dataList = applyStockDetailInfoList.Where(act => act.GoodsId == realGoodsId).ToList();
                    var stock    = stockCurrent.Count > 0 && stockCurrent.ContainsKey(realGoodsId)
                        ? stockCurrent[realGoodsId]
                        : 0;
                    var sale     = saleGoodsIds.FirstOrDefault(act => act.Key == realGoodsId);
                    var tempFlag = stock - (sale != null ? sale.Value : 0) > dataList.Sum(act => act.Quantity);
                    if (!isNeedeConfirm || flag)
                    {
                        flag = tempFlag;
                    }
                    isNeedeConfirm = true;
                    if (!tempFlag)
                    {
                        foreach (var applyStockDetailInfo in dataList)
                        {
                            applyStockDetailInfo.IsComfirmed = true;
                            applyStockDetailInfo.ComfirmTips = "当前库存<可得15天外销量";
                        }
                    }
                }
            }

            if (flag)
            {
                //获取商品采购设置列表
                var purchaseSetList = _purchaseSet.GetPurchaseSetInfoList(goodsDics.Keys, applyStockInfo.CompanyWarehouseId, hostingFilialeId);
                if (purchaseSetList == null || purchaseSetList.Count == 0)
                {
                    errorMsg = "采购商品全部未绑定商品采购设置!";
                    return(false);
                }
                foreach (var goodsInfo in goodsDics.Values)
                {
                    var    dataList = applyStockDetailInfoList.Where(act => act.CompGoodsID == goodsInfo.GoodsId && !act.IsComfirmed).ToList();
                    string content  = string.Empty;
                    //1、判断是否存在护理液等特殊商品
                    if (goodsInfo.GoodsType == (int)GoodsType.LensSolution ||
                        goodsInfo.GoodsType == (int)GoodsType.CareProducts ||
                        goodsInfo.GoodsType == (int)GoodsType.NoSet)
                    {
                        flag    = false;
                        content = "护理液/用品或未设置等特殊商品";
                    }
                    if (flag)
                    {
                        var setInfo = purchaseSetList.FirstOrDefault(act => act.GoodsId == goodsInfo.GoodsId);
                        if (goodsInfo.ExpandInfo != null && setInfo != null)
                        {
                            //3、加盟价<=成本价*5% && 加盟价<=采购价/年返点 需手动确认,采购状态为待确认
                            if (goodsInfo.ExpandInfo.JoinPrice > (dicAvgSettlePrice.ContainsKey(goodsInfo.GoodsId) ? dicAvgSettlePrice[goodsInfo.GoodsId] : 0) * decimal.Parse("0.05"))
                            {
                                if (goodsInfo.ExpandInfo.YearDiscount == 0)
                                {
                                    continue;
                                }
                                if (goodsInfo.ExpandInfo.JoinPrice > (setInfo.PurchasePrice / goodsInfo.ExpandInfo.YearDiscount))
                                {
                                    continue;
                                }
                                content = "加盟价<=采购价/年返点";
                            }
                            else
                            {
                                content = "加盟价<=成本价*5%";
                            }
                        }
                        flag = false;
                    }
                    if (content.Length > 0)
                    {
                        foreach (var applyStockDetailInfo in dataList)
                        {
                            applyStockDetailInfo.IsComfirmed = true;
                            applyStockDetailInfo.ComfirmTips = content;
                        }
                    }
                }
            }
            return(flag);
        }