コード例 #1
0
        public bool UpdateOrderStatus(OrderStatusUpdateModel orderStatusUpdate)
        {
            var order = _unitOfWork.OrderRepository.Find(x => x.Id == orderStatusUpdate.orderId, y => y.OrderProductItem).FirstOrDefault();
            OrderProductItem subOrder = order.OrderProductItem.Where(x => x.Id == orderStatusUpdate.subOrderId).FirstOrDefault();

            bool flagChangeOrderStatus = true;

            if (subOrder != null)
            {
                subOrder.OrderItemStatus = orderStatusUpdate.statusId;
                foreach (var item in order.OrderProductItem)
                {
                    if (subOrder.Id != item.Id)
                    {
                        if (item.OrderItemStatus < orderStatusUpdate.statusId)
                        {
                            flagChangeOrderStatus = false;
                            break;
                        }
                    }
                }
                if (flagChangeOrderStatus)
                {
                    order.OrderStatusId = orderStatusUpdate.statusId;
                }
                _unitOfWork.UpdateAndSave(order);
                _unitOfWork.Commit();
            }
            return(true);
        }
コード例 #2
0
        /// <summary>
        /// 获取packageNo
        /// </summary>
        /// <param name="packageNo"></param>
        /// <param name="item"></param>
        /// <returns></returns>
        private static int GetPackageNo(int packageNo, OrderProductItem item)
        {
            if (packageNo == 0)
            {
                return(item["PackageNo"] != null ? (int)item["PackageNo"] : 0);
            }

            return(packageNo);
        }
コード例 #3
0
        /// <summary>
        /// 取得满足优惠券条件的商品总金额
        /// </summary>
        /// <param name="orderList"></param>
        /// <param name="coupon"></param>
        /// <returns></returns>
        private decimal GetCanCalculateAmount(List <OrderInfo> orderList, CouponInfo coupon)
        {
            List <int> productSysNoList = new List <int>();

            foreach (var order in orderList)
            {
                foreach (OrderItemGroup itemGroup in order.OrderItemGroupList)
                {
                    foreach (OrderProductItem item in itemGroup.ProductItemList)
                    {
                        productSysNoList.Add(item.ProductSysNo);
                    }
                }
            }
            List <SimpleItemEntity> productList = PromotionDA.GetSimpleItemListBySysNumbers(productSysNoList);
            //couponProductList:满足条件的商品列表,使用OrderProductItem这个对象来记录,UnitSalePrice是这个商品的价格,UnitQuantity会作为这个商品的总数量
            List <OrderProductItem> couponProductList = new List <OrderProductItem>();

            foreach (var order in orderList)
            {
                foreach (OrderItemGroup itemGroup in order.OrderItemGroupList)
                {
                    foreach (OrderProductItem item in itemGroup.ProductItemList)
                    {
                        SimpleItemEntity product = productList.Find(f => f.ProductSysNo == item.ProductSysNo);
                        if (CheckIsCouponProduct(product, coupon))
                        {
                            OrderProductItem couponProduct = couponProductList.Find(f => f.ProductSysNo == product.ProductSysNo);
                            if (couponProduct == null)
                            {
                                couponProduct = new OrderProductItem();
                                couponProduct.ProductSysNo  = item.ProductSysNo;
                                couponProduct.UnitSalePrice = item.UnitSalePrice;
                                couponProduct.UnitQuantity  = item.UnitQuantity * itemGroup.Quantity;
                                couponProductList.Add(couponProduct);
                            }
                            else
                            {
                                couponProduct.UnitQuantity += item.UnitQuantity * itemGroup.Quantity;
                            }
                        }
                    }
                }
            }

            decimal totalAmount = 0.00m;

            foreach (OrderProductItem couponProduct in couponProductList)
            {
                totalAmount += couponProduct.UnitSalePrice * couponProduct.UnitQuantity;
            }

            return(totalAmount);
        }
コード例 #4
0
ファイル: OrderController.cs プロジェクト: chechle39/fsofter
        public JsonResult SetOrderToSession(int id)
        {
            var  obj  = orderService.GetByID(id);
            var  list = orderProductService.GetListOrderProductByOrderID(id);
            bool?stt  = obj.Status.HasValue ? obj.Status : false;

            CurrentContext.SetAllItem().AddInfoOrder(obj.ID, obj.TableID, stt);

            foreach (var p in list)
            {
                var item = new OrderProductItem
                {
                    ID       = p.ID,
                    quantity = p.Quantity,
                    price    = decimal.Parse(p.Price.ToString()),
                };

                CurrentContext.SetAllItem().AddItem(item);
            }
            return(Json(true, JsonRequestBehavior.AllowGet));
        }
コード例 #5
0
        private async Task CreateOrderProductItems(string orderId, string userId)
        {
            var productItems = this.shoppingCartItemsService.GetAllShoppingCartItems <OrderProductItemViewModel>(userId);

            if (productItems == null)
            {
                return;
            }

            foreach (var productItem in productItems)
            {
                var orderProductItem = new OrderProductItem()
                {
                    ProductItemId = productItem.ProductItemId,
                    OrderId       = orderId,
                    Quantity      = productItem.Quantity,
                };

                await this.orderProductItemRepository.AddAsync(orderProductItem);

                await this.orderProductItemRepository.SaveChangesAsync();
            }
        }
コード例 #6
0
ファイル: Edit.cshtml.cs プロジェクト: ilio78/foodandstyle
        public IActionResult OnGet(int?id)
        {
            if (id == null)
            {
                Order                 = new Order();
                Order.CreatedOn       = DateTime.Now;
                Order.UpdatedOn       = Order.CreatedOn;
                Order.CreatedBy       = Helpers.User.GetUPN(HttpContext);
                Order.UpdatedBy       = Helpers.User.GetUPN(HttpContext);
                RecipeChoices         = new RecipeChoicesViewModel();
                OrderProductItems     = new List <OrderProductItem>();
                RecipeTypes           = new Dictionary <string, string>(LanguageResources.RecipeTypeTranslations);
                ProductDeliveryPerDay = new Dictionary <ProductDeliveryDay, Dictionary <Product, int> >();
                return(Page());
            }

            Order = orderData.GetById(id.Value);
            if (Order == null)
            {
                return(RedirectToPage("./List"));
            }

            RecipeTypes = new Dictionary <string, string>(LanguageResources.RecipeTypeTranslations);

            var Recipes = recipeData.GetByName(null).ToList();

            RecipeChoices = new RecipeChoicesViewModel();

            // RecipeChoicesViewModel only contains a list of ChoiceViewModel items. They are the rows of the recipe quantity table.
            int i = 1;

            foreach (Recipe r in Recipes)
            {
                RecipeChoices.Choices.Add(new ChoiceViewModel()
                {
                    Id       = i++, Name = r.Name, RecipeResultingQuantity = String.Format("{0:n0}", r.ResultingQuantityInGrams),
                    RecipeId = r.Id, IsActive = r.IsActive, RecipeTypeId = (int)(r.RecipeType ?? RecipeType.Unknown)
                });
            }

            // Get only recipe quantity data related to this order only - Even new orders must have been saved first so an OrderId will exist.
            var orderRecipes = orderRecipeItemData.GetByName(null).Where(o => o.OrderId == Order.Id).ToList();

            foreach (var c in RecipeChoices.Choices)
            {
                // Scan each recipe to see if a quantity for a particular days is set. For a new order this will not find anything!
                foreach (var orderRecipe in orderRecipes.Where(o => o.RecipeId == c.RecipeId))
                {
                    switch (orderRecipe.Day)
                    {
                    case OrderDay.Monday:
                        c.OrderQuantity_Monday = orderRecipe.Quantity;
                        break;

                    case OrderDay.Tuesday:
                        c.OrderQuantity_Tuesday = orderRecipe.Quantity;
                        break;

                    case OrderDay.Wednesday:
                        c.OrderQuantity_Wednesday = orderRecipe.Quantity;
                        break;

                    case OrderDay.Thursday:
                        c.OrderQuantity_Thursday = orderRecipe.Quantity;
                        break;

                    case OrderDay.Friday:
                        c.OrderQuantity_Friday = orderRecipe.Quantity;
                        break;

                    case OrderDay.Saturday:
                        c.OrderQuantity_Saturday = orderRecipe.Quantity;
                        break;

                    case OrderDay.Sunday:
                        c.OrderQuantity_Sunday = orderRecipe.Quantity;
                        break;
                    }
                }
            }

            // Now that we know the quantities for each recipe we can remove those that are inactive and have 0 total quantity.
            // If they have more than 0 quantity we still need to show them as they were previously chosen!
            RecipeChoices.Choices.RemoveAll(c => !c.IsActive && c.TotalWeekOrderQuantity == 0);


            OrderProductItems = new List <OrderProductItem>();

            foreach (Recipe recipe in Recipes)
            {
                // SingleOrDefault is used because some inactive recipes have been excluded!
                var choice = RecipeChoices.Choices.SingleOrDefault(r => r.RecipeId == recipe.Id);

                if (choice == null)
                {
                    continue;
                }

                // If the recipe does not have any quantities selected for any day continue...
                if (choice.TotalWeekOrderQuantity == 0)
                {
                    continue;
                }

                // For this recipe that we know that at least 1 quantity order for some day exists add its incredients * quantity
                // to the total ingredient quantity list "OrderProductItems"
                foreach (Ingredient ingredient in recipe.Ingredients)
                {
                    OrderProductItem item = OrderProductItems.SingleOrDefault(o => o.Product.Id == ingredient.Product.Id);
                    if (item == null)
                    {
                        item = new OrderProductItem()
                        {
                            Product = ingredient.Product, Supplier = ingredient.Product.Supplier
                        };
                        OrderProductItems.Add(item);
                    }
                    // At this point it does not matter which day the order for this recipe is place. We only care about the weekly total!
                    item.Quantity += choice.TotalWeekOrderQuantity * ingredient.Quantity;
                }
            }

            OrderProductItems = OrderProductItems.OrderBy(o => o.Product.ProductType).ThenBy(o => o.Product.Name).ToList();

            // *** At this point the first sub table for the total item order is completed *** OrderProductItems is not used anymore!

            // *** The more complex part of computing the order per day and supplier starts here ***

            // This is the end result: A map that for each day (key) has another map as value which has productId as key and quantity as value!
            Dictionary <OrderDay, Dictionary <int, int> > productQuantityOrderedPerDay = new Dictionary <OrderDay, Dictionary <int, int> >();

            foreach (OrderDay day in Enum.GetValues(typeof(OrderDay)))
            {
                productQuantityOrderedPerDay[day] = new Dictionary <int, int>();

                List <OrderRecipeItem> dayOrderRecipeItems = orderRecipes.Where(o => o.Day == day).ToList();

                foreach (var orderRecipeItem in dayOrderRecipeItems)
                {
                    foreach (var recipeIngredient in orderRecipeItem.Recipe.Ingredients)
                    {
                        productQuantityOrderedPerDay[day].TryGetValue(recipeIngredient.ProductId, out int currentIngredientQuantity);
                        productQuantityOrderedPerDay[day][recipeIngredient.ProductId] = currentIngredientQuantity + recipeIngredient.Quantity * orderRecipeItem.Quantity;
                    }
                }
            }

            //*** We now have an object that contains per day per product the quantities needed for this order ***

            // However we need a product delivery schedule per day depending on when the product is needed!

            ProductDeliveryPerDay = new Dictionary <ProductDeliveryDay, Dictionary <Product, int> >();

            var products = productData.GetByName(null).ToList();

            foreach (OrderDay day in Enum.GetValues(typeof(OrderDay)))
            {
                foreach (int productId in productQuantityOrderedPerDay[day].Keys)
                {
                    var product = products.Single(p => p.Id == productId);

                    //ProductDeliveryDay deliveryDay = ProductDeliveryDay.PreviousFriday;

                    // THIS IS NOW REMOVED!!! THIS IS REALLY CRUCIAL HERE!!! - MUST REVIEW THIS AGAIN!!!!
                    //if (product.OrderWindow > 0)
                    //    deliveryDay = (ProductDeliveryDay)Math.Max((int)day - product.OrderWindow, (int)ProductDeliveryDay.PreviousFriday);

                    // New logic is based on delivery day as define per product:
                    // We search for the previous available delivery day.
                    ProductDeliveryDay deliveryDay = product.GetProductDeliveryDay(day);

                    if (!ProductDeliveryPerDay.ContainsKey(deliveryDay))
                    {
                        ProductDeliveryPerDay[deliveryDay] = new Dictionary <Product, int>();
                    }

                    ProductDeliveryPerDay[deliveryDay].TryGetValue(product, out int currentProductOrder);
                    ProductDeliveryPerDay[deliveryDay][product] =
                        currentProductOrder + productQuantityOrderedPerDay[day][productId];
                }
            }

            return(Page());
        }
コード例 #7
0
        public void Persist(OrderInfo order)
        {
            //更新平台优惠券使用次数
            if (order.CouponCodeSysNo.HasValue && order.CouponCodeSysNo > 0)
            {
                PipelineDA.UpdateCouponCodeQuantity(order.CouponCodeSysNo.Value);
                PipelineDA.UpdateSaleRulesExQuantity(order.CouponCodeSysNo.Value);
            }
            //更新店铺优惠券使用次数
            if (order.SubOrderList != null && order.SubOrderList.Count > 0)
            {
                List <int> merchantCouponCodeSysNoList = new List <int>();
                foreach (var subOrder in order.SubOrderList.Values)
                {
                    if (subOrder.MerchantCouponCodeSysNo.HasValue && subOrder.MerchantCouponCodeSysNo > 0 &&
                        !merchantCouponCodeSysNoList.Exists(m => m == subOrder.MerchantCouponCodeSysNo.Value))
                    {
                        merchantCouponCodeSysNoList.Add(subOrder.MerchantCouponCodeSysNo.Value);
                    }
                }
                foreach (int couponCodeSysNo in merchantCouponCodeSysNoList)
                {
                    PipelineDA.UpdateCouponCodeQuantity(couponCodeSysNo);
                    PipelineDA.UpdateSaleRulesExQuantity(couponCodeSysNo);
                }
            }

            //生成购物车编号
            order.ShoppingCartID = PipelineDA.GenerateSOSysNo().ToString();

            foreach (var subOrder in order.SubOrderList.Values)
            {
                subOrder.ID             = PipelineDA.GenerateSOSysNo();
                subOrder.ShoppingCartID = order.ShoppingCartID;
                subOrder.InDate         = DateTime.Now;
                subOrder["Note"]        = string.Empty;//订单日志
                subOrder["IsUsePrepay"] = (subOrder.BalancePayAmount > 0m) ? 1 : 0;

                PipelineDA.CreateShoppingCart(subOrder); //Create SO ShoppingCart
                PipelineDA.CreateSOMaster(subOrder);     //Create SOMaster

                #region SO Item
                List <OrderItem> subOrderItemList = new List <OrderItem>();
                subOrder.OrderItemGroupList.ForEach(orderGroup =>
                {
                    orderGroup.ProductItemList.ForEach(proItem =>
                    {
                        proItem["SpecialActivityType"] = proItem.SpecialActivityType;
                        proItem["SOSysNo"]             = subOrder.ID;
                        proItem["GiftSysNo"]           = null;
                        proItem["ProductType"]         = (int)SOItemType.ForSale;
                        proItem["MasterProductCode"]   = null;
                        proItem["Quantity"]            = proItem.UnitQuantity;
                        proItem["Point"]       = proItem.UnitRewardedPoint;
                        proItem["DiscountAmt"] = (decimal)proItem["UnitDiscountAmt"];
                        //总优惠券均摊金额,正数
                        proItem["PromotionDiscount"] = (decimal)proItem["UnitCouponAmt"];
                        //平台优惠券均摊金额,正数
                        proItem["PlatPromotionDiscount"] = (decimal)proItem["UnitCouponAmt"] - (proItem["MerchantUnitCouponAmt"] == null ? 0m : (decimal)proItem["MerchantUnitCouponAmt"]);
                        proItem["Price"] = proItem.UnitSalePrice - (decimal)proItem["UnitCouponAmt"];    //-(decimal)proItem["UnitDiscountAmt"];
                        subOrderItemList.Add(proItem);
                    });
                });

                subOrder.AttachmentItemList.ForEach(proItem =>
                {
                    proItem["SpecialActivityType"] = 0;
                    proItem["SOSysNo"]             = subOrder.ID;
                    proItem["GiftSysNo"]           = null;
                    proItem["ProductType"]         = (int)SOItemType.HiddenGift;
                    proItem["MasterProductCode"]   = null;
                    proItem["Quantity"]            = proItem.UnitQuantity;
                    proItem["Price"]             = 0;
                    proItem["Point"]             = proItem.UnitRewardedPoint;
                    proItem["DiscountAmt"]       = decimal.Zero;
                    proItem["PromotionDiscount"] = 0;
                    subOrderItemList.Add(proItem);
                });

                subOrder.GiftItemList.ForEach(proItem =>
                {
                    proItem["SpecialActivityType"] = 0;
                    proItem["SOSysNo"]             = subOrder.ID;
                    proItem["GiftSysNo"]           = proItem.ActivityNo;
                    proItem["ProductType"]         = (int)SOItemType.Gift;
                    proItem["MasterProductCode"]   = null;
                    proItem["Quantity"]            = proItem.UnitQuantity;
                    proItem["Price"]             = 0;
                    proItem["Point"]             = proItem.UnitRewardedPoint;
                    proItem["DiscountAmt"]       = decimal.Zero;
                    proItem["PromotionDiscount"] = 0;
                    if (proItem.SaleGiftType == SaleGiftType.Vendor)
                    {
                        proItem["ProductType"] = (int)SOItemType.Gift;
                    }
                    else
                    {
                        proItem["ProductType"] = SOItemType.ActivityGift;    //新蛋赠品(除厂商赠品外以前统一为新的赠品)
                    }
                    subOrderItemList.Add(proItem);
                });

                //平台
                if (subOrder.CouponCodeSysNo.HasValue && subOrder.CouponCodeSysNo > 0)
                {
                    OrderProductItem item = new OrderProductItem();
                    item["SOSysNo"]           = subOrder.ID;
                    item.ProductSysNo         = subOrder.CouponCodeSysNo.Value;
                    item.ProductName          = string.Format("【平台优惠券】{0}({1})", subOrder.CouponName, subOrder.CouponCode);
                    item["GiftSysNo"]         = null;
                    item["ProductType"]       = (int)SOItemType.Promotion; //优惠券
                    item["MasterProductCode"] = null;
                    item.Weight               = 0;
                    item["Quantity"]          = 1;
                    item["ProductType"]       = SOItemType.Promotion;
                    item["Price"]             = decimal.Zero;
                    item.UnitCostPrice        = decimal.Zero;
                    item["Point"]             = 0;
                    item["DiscountAmt"]       = decimal.Zero;
                    item["UnitDiscountAmt"]   = 0m;
                    item["PromotionDiscount"] = 0;
                    item.UnitSalePrice        = (-1) * (subOrder.CouponAmount - subOrder.MerchantCouponAmount);
                    item.WarehouseNumber      = 0;
                    item.WarehouseName        = string.Empty;

                    //item["TariffCode"] = null;//关税代码
                    // item["TariffRate"] = null;//单个关税
                    // item["EntryRecord"] = null;//报关编号
                    item["ProductStoreType"] = null;    //储存运输方式

                    subOrderItemList.Add(item);
                }
                //商家
                if (subOrder.MerchantCouponCodeSysNo.HasValue && subOrder.MerchantCouponCodeSysNo > 0)
                {
                    OrderProductItem item = new OrderProductItem();
                    item["SOSysNo"]           = subOrder.ID;
                    item.ProductSysNo         = subOrder.MerchantCouponCodeSysNo.Value;
                    item.ProductName          = string.Format("【商家优惠券】{0}({1})", subOrder.MerchantCouponName, subOrder.MerchantCouponCode);
                    item["GiftSysNo"]         = null;
                    item["ProductType"]       = (int)SOItemType.Promotion; //优惠券
                    item["MasterProductCode"] = null;
                    item.Weight               = 0;
                    item["Quantity"]          = 1;
                    item["ProductType"]       = SOItemType.Promotion;
                    item["Price"]             = decimal.Zero;
                    item.UnitCostPrice        = decimal.Zero;
                    item["Point"]             = 0;
                    item["DiscountAmt"]       = decimal.Zero;
                    item["UnitDiscountAmt"]   = 0m;
                    item["PromotionDiscount"] = 0;
                    item.UnitSalePrice        = (-1) * subOrder.MerchantCouponAmount;
                    item.WarehouseNumber      = 0;
                    item.WarehouseName        = string.Empty;

                    //item["TariffCode"] = null;//关税代码
                    //item["TariffRate"] = null;//单个关税
                    //item["EntryRecord"] = null;//报关编号
                    item["ProductStoreType"] = null;    //储存运输方式

                    subOrderItemList.Add(item);
                }
                #endregion

                subOrderItemList.ForEach(item =>
                {
                    //货币、当时汇率
                    item["CurrencySysNo"] = order["CurrencySysNo"];
                    item["ExchangeRate"]  = order["ExchangeRate"];

                    var productType = (int)item["ProductType"];
                    if (productType == 0 || productType == 1 || productType == 2 || productType == 5 || productType == 6)
                    {
                        var GiftSysNo           = item["GiftSysNo"];                //赠品
                        var SpecialActivityType = (int)item["SpecialActivityType"]; // 1=团购商品;2=抢购商品;3-虚拟团购商品
                        var DiscountAmt         = (decimal)item["DiscountAmt"];     //捆绑的折扣
                        if (ConstValue.PaymentInventory)
                        {
                            #region
                            ////赠品
                            //if (GiftSysNo != null)
                            //{
                            //    //create soitem
                            //    PipelineDA.CreateSOItem(item);
                            //    //so item log
                            //    subOrder["Note"] += string.Format("SysNo:{0}, Qty:{1}, Price:{2};", item.ProductSysNo, item["Quantity"], item["Price"]);
                            //}
                            ////团购
                            //else if (SpecialActivityType != 0 && SpecialActivityType == 1)
                            //{
                            //    //create soitem
                            //    PipelineDA.CreateSOItem(item);
                            //    //so item log
                            //    subOrder["Note"] += string.Format("SysNo:{0}, Qty:{1}, Price:{2};", item.ProductSysNo, item["Quantity"], item["Price"]);
                            //}
                            #endregion
                            //限时促销
                            if (SpecialActivityType != 0 && SpecialActivityType == 2 && PipelineDA.CheckCountDownByProductSysNo(item.ProductSysNo))
                            {
                                //create soitem
                                PipelineDA.CreateSOItem(item);
                                //so item log
                                subOrder["Note"] += string.Format("SysNo:{0}, Qty:{1}, Price:{2};", item.ProductSysNo, item["Quantity"], item["Price"]);
                            }
                            else
                            {
                                //扣减订单商品库存
                                int inventoryType = PipelineDA.GetInventoryType(item);
                                var rowCount      = PipelineDA.UpdateInventory(item);
                                if (rowCount != 1 && inventoryType != 1 && inventoryType != 3 && inventoryType != 5)
                                {
                                    ECommerce.Utility.Logger.WriteLog("inventory: qty is not enough", "SOPipeline.CreateSOBasicPersister");
                                    throw new BusinessException(string.Format("商品【{0}】库存不足", item.ProductName));
                                }
                                rowCount = PipelineDA.UpdateInventoryStock(item);
                                if (rowCount != 1 && inventoryType != 1 && inventoryType != 3 && inventoryType != 5)
                                {
                                    ECommerce.Utility.Logger.WriteLog("inventory_stock: qty is not enough", "SOPipeline.CreateSOBasicPersister");
                                    throw new BusinessException(string.Format("商品【{0}】库存不足", item.ProductName));
                                }

                                //create soitem
                                PipelineDA.CreateSOItem(item);

                                //so item log
                                subOrder["Note"] += string.Format("SysNo:{0}, Qty:{1}, Price:{2};", item.ProductSysNo, item["Quantity"], item["Price"]);
                            }
                            #region 所有促销活动都开启支付完成后扣减库存
                            ////正常品
                            //if (GiftSysNo == null && SpecialActivityType == 0 && !PipelineDA.CheckGiftSaleListByProductSysNo(item.ProductSysNo) && DiscountAmt == 0)
                            //{
                            //    //扣减订单商品库存
                            //    int inventoryType = PipelineDA.GetInventoryType(item);
                            //    var rowCount = PipelineDA.UpdateInventory(item);
                            //    if (rowCount != 1 && inventoryType != 1 && inventoryType != 3 && inventoryType != 5)
                            //    {
                            //        ECommerce.Utility.Logger.WriteLog("inventory: qty is not enough", "SOPipeline.CreateSOBasicPersister");
                            //        throw new BusinessException(string.Format("商品【{0}】库存不足", item.ProductName));
                            //    }
                            //    rowCount = PipelineDA.UpdateInventoryStock(item);
                            //    if (rowCount != 1 && inventoryType != 1 && inventoryType != 3 && inventoryType != 5)
                            //    {
                            //        ECommerce.Utility.Logger.WriteLog("inventory_stock: qty is not enough", "SOPipeline.CreateSOBasicPersister");
                            //        throw new BusinessException(string.Format("商品【{0}】库存不足", item.ProductName));
                            //    }

                            //    //create soitem
                            //    PipelineDA.CreateSOItem(item);

                            //    //so item log
                            //    subOrder["Note"] += string.Format("SysNo:{0}, Qty:{1}, Price:{2};", item.ProductSysNo, item["Quantity"], item["Price"]);
                            //}
                            ////赠品,团购,限时促销,捆绑商品
                            //else
                            //{
                            //    //create soitem
                            //    PipelineDA.CreateSOItem(item);

                            //    //so item log
                            //    subOrder["Note"] += string.Format("SysNo:{0}, Qty:{1}, Price:{2};", item.ProductSysNo, item["Quantity"], item["Price"]);
                            //}
                            #endregion
                        }
                        else
                        {
                            //扣减订单商品库存
                            int inventoryType = PipelineDA.GetInventoryType(item);
                            var rowCount      = PipelineDA.UpdateInventory(item);
                            if (rowCount != 1 && inventoryType != 1 && inventoryType != 3 && inventoryType != 5)
                            {
                                ECommerce.Utility.Logger.WriteLog("inventory: qty is not enough", "SOPipeline.CreateSOBasicPersister");
                                throw new BusinessException(string.Format("商品【{0}】库存不足", item.ProductName));
                            }
                            rowCount = PipelineDA.UpdateInventoryStock(item);
                            if (rowCount != 1 && inventoryType != 1 && inventoryType != 3 && inventoryType != 5)
                            {
                                ECommerce.Utility.Logger.WriteLog("inventory_stock: qty is not enough", "SOPipeline.CreateSOBasicPersister");
                                throw new BusinessException(string.Format("商品【{0}】库存不足", item.ProductName));
                            }

                            //create soitem
                            PipelineDA.CreateSOItem(item);

                            //so item log
                            subOrder["Note"] += string.Format("SysNo:{0}, Qty:{1}, Price:{2};", item.ProductSysNo, item["Quantity"], item["Price"]);
                        }
                    }
                    else if (productType == 3)
                    {
                        //create soitem
                        PipelineDA.CreateSOItem(item);

                        subOrder["Note"] += string.Format("PromotionSysNo:{0}, Qty:{1}, Price:{2};", item.ProductSysNo, item["Quantity"], item["Price"]);
                    }
                });
            }
        }
コード例 #8
0
        public void Calculate(ref OrderInfo order)
        {
            CalculateDiscountAmount(order);

            Dictionary <int, List <OrderInfo> > merchantOrderList = new Dictionary <int, List <OrderInfo> >();

            #region 1、分拆商家订单

            if (order.SubOrderList != null)
            {
                foreach (var subOrder in order.SubOrderList)
                {
                    int merchantSysNo = Convert.ToInt32(subOrder.Key.Split('|')[0]);
                    if (!merchantOrderList.ContainsKey(merchantSysNo))
                    {
                        merchantOrderList[merchantSysNo] = new List <OrderInfo>();
                    }
                    merchantOrderList[merchantSysNo].Add(subOrder.Value);
                }
            }

            #endregion

            #region 2、计算商家优惠券

            List <CustomerCouponInfo> merchantCouponList = PromotionDA.GetMerchantCouponCodeList(order.Customer.SysNo);
            if (merchantCouponList != null)
            {
                foreach (var merchantOrder in merchantOrderList)
                {
                    List <CustomerCouponInfo> currMerchantCouponList = merchantCouponList.FindAll(m => m.MerchantSysNo == merchantOrder.Key);
                    if (currMerchantCouponList == null || currMerchantCouponList.Count == 0)
                    {
                        continue;
                    }
                    foreach (var coupon in currMerchantCouponList)
                    {
                        bool canUse = false;
                        #region 检查商品限制,是否可用
                        List <int> productSysNoList = new List <int>();
                        foreach (var itemOrder in merchantOrder.Value)
                        {
                            foreach (var itemGroup in itemOrder.OrderItemGroupList)
                            {
                                itemGroup.ProductItemList.ForEach(product =>
                                {
                                    productSysNoList.Add(product.ProductSysNo);
                                });
                            }
                        }
                        List <CouponSaleRules> couponSaleRulesList = PromotionDA.GetCouponSaleRulesList(coupon.CouponCode);
                        if (couponSaleRulesList == null || couponSaleRulesList.Count == 0)
                        {
                            //不存在排除或指定商品,全网通用
                            canUse = true;
                        }
                        else
                        {
                            foreach (int productSysNo in productSysNoList)
                            {
                                if (couponSaleRulesList.Exists(m => m.ProductSysNo == productSysNo))
                                {
                                    if (couponSaleRulesList[0].RelationType == "N")
                                    {
                                        //存在排除的商品,不可用
                                        canUse = false;
                                        break;
                                    }
                                    else
                                    {
                                        //存在指定的商品,可用
                                        canUse = true;
                                        break;
                                    }
                                }
                            }
                        }
                        #endregion
                        if (canUse)
                        {
                            if (CheckCouponCodeCanUse(coupon.CouponCode, order.Customer))
                            {
                                foreach (var itemOrder in merchantOrder.Value)
                                {
                                    if (itemOrder.MerchantCouponList == null)
                                    {
                                        itemOrder.MerchantCouponList = new List <CustomerCouponInfo>();
                                    }
                                    itemOrder.MerchantCouponList.Add(coupon);
                                }
                            }
                        }
                    }
                }
            }

            #endregion

            #region 3、商家订单使用优惠券

            foreach (var merchantOrder in merchantOrderList)
            {
                MerchantCoupon merchantCoupon = null;
                if (order.MerchantCouponCodeList != null)
                {
                    merchantCoupon = order.MerchantCouponCodeList.Find(m => m.MerchantSysNo == merchantOrder.Key);
                }
                if (merchantCoupon == null)
                {
                    continue;
                }
                string couponCode = merchantCoupon.CouponCode.ToUpper().Trim();

                #region 1、初次筛选该优惠券号码对于前用户是否能用
                CustomerCouponInfo customerCoupon = PromotionDA.GetCouponSaleRules(order.Customer.SysNo, couponCode);
                if (customerCoupon == null)
                {
                    SetCouponError(ref order, LanguageHelper.GetText("您没有此优惠券{0}", order.LanguageCode), merchantCoupon.CouponName);
                    continue;
                }
                if (customerCoupon.IsExpired)
                {
                    SetCouponError(ref order, LanguageHelper.GetText("此优惠券{0}已过期", order.LanguageCode), merchantCoupon.CouponName);
                    continue;
                }
                if (customerCoupon.CustomerMaxFrequency.HasValue && customerCoupon.UsedCount >= customerCoupon.CustomerMaxFrequency.Value)
                {
                    SetCouponError(ref order, LanguageHelper.GetText("您已达到使用优惠券{0}的次数上限", order.LanguageCode), merchantCoupon.CouponName);
                    continue;
                }

                int totalUsedCount = 0;
                if (customerCoupon.CodeType.Trim().ToUpper() == "C")
                {
                    totalUsedCount = PromotionDA.GetCouponCodeTotalUsedCount(couponCode);
                }
                else
                {
                    totalUsedCount = PromotionDA.GetCouponTotalUsedCount(customerCoupon.CouponSysNo);
                }
                if (customerCoupon.WebsiteMaxFrequency.HasValue && totalUsedCount >= customerCoupon.WebsiteMaxFrequency)
                {
                    SetCouponError(ref order, LanguageHelper.GetText("此优惠券{0}的已达到全网使用次数上限", order.LanguageCode), merchantCoupon.CouponName);
                    continue;
                }
                #endregion

                #region 2、获取该优惠券号码对应的优惠券活动所有信息
                CouponInfo coupon = PromotionDA.GetComboInfoByCouponCode(couponCode);
                if (coupon.SaleRulesEx.CustomerMaxFrequency.HasValue && customerCoupon.UsedCount >= coupon.SaleRulesEx.CustomerMaxFrequency.Value)
                {
                    SetCouponError(ref order, LanguageHelper.GetText("您已达到使用此优惠券活动的次数上限", order.LanguageCode));
                    continue;
                }
                if (coupon.SaleRulesEx.MaxFrequency.HasValue && totalUsedCount >= coupon.SaleRulesEx.MaxFrequency.Value)
                {
                    SetCouponError(ref order, LanguageHelper.GetText("此优惠券活动已达到全网使用次数上限", order.LanguageCode));
                    continue;
                }


                if (coupon == null)
                {
                    SetCouponError(ref order, LanguageHelper.GetText("此优惠券{0}不存在", order.LanguageCode), merchantCoupon.CouponName);
                    continue;
                }
                #endregion

                #region 3、详细检查该优惠券号码是否可用
                if (!string.IsNullOrWhiteSpace(coupon.SaleRulesEx.NeedEmailVerification) && coupon.SaleRulesEx.NeedEmailVerification.ToUpper().Trim() == "Y")
                {
                    if (order.Customer.IsEmailConfirmed != 1)
                    {
                        SetCouponError(ref order, LanguageHelper.GetText("此优惠券要求客户验证了电子邮箱才可使用!", order.LanguageCode));
                        continue;
                    }
                }
                if (!string.IsNullOrWhiteSpace(coupon.SaleRulesEx.NeedMobileVerification) && coupon.SaleRulesEx.NeedMobileVerification.ToUpper().Trim() == "Y")
                {
                    if (order.Customer.IsPhoneValided != 1)
                    {
                        SetCouponError(ref order, LanguageHelper.GetText("此优惠券要求客户验证了手机才可使用!", order.LanguageCode));
                        continue;
                    }
                }
                if (coupon.SaleRulesList.Count > 0 && coupon.SaleRulesList.Exists(f => f.SaleRuleType == CouponSaleRuleType.RelCustomerRank))
                {
                    //-1表示不限制
                    if (!coupon.SaleRulesList.Exists(f => f.CustomerRank == -1))
                    {
                        int customerRank = order.Customer.CustomerRank;
                        if (!coupon.SaleRulesList.Exists(f => f.CustomerRank == customerRank))
                        {
                            SetCouponError(ref order, LanguageHelper.GetText("当前客户不满足此优惠券要求的客户等级!", order.LanguageCode));
                            continue;
                        }
                    }
                }
                if (coupon.SaleRulesList.Count > 0 && coupon.SaleRulesList.Exists(f => f.SaleRuleType == CouponSaleRuleType.RelArea))
                {
                    int  areaID     = order.Contact.AddressAreaID;
                    Area area       = PromotionDA.GetAreaBySysNo(areaID);
                    int  provinceId = area.ProvinceSysNo.Value;

                    if (!coupon.SaleRulesList.Exists(f => f.SaleRuleType == CouponSaleRuleType.RelArea && f.AreaSysNo == provinceId))
                    {
                        SetCouponError(ref order, LanguageHelper.GetText("当前客户不满足此优惠券要求的客户地区!", order.LanguageCode));
                        continue;
                    }
                }


                #endregion

                #region 4、计算该优惠券可以抵扣多少,填充到OrderInfo中
                if (coupon.DiscountRuleList != null && coupon.DiscountRuleList.Count > 0)
                {
                    //取得满足优惠券条件的商品总金额
                    decimal canCalculateAmount = GetCanCalculateAmount(merchantOrder.Value, coupon);
                    if (canCalculateAmount == 0)
                    {
                        SetCouponError(ref order, LanguageHelper.GetText("没有满足该优惠券的商品,无法抵扣", order.LanguageCode));
                        continue;
                    }

                    canCalculateAmount = canCalculateAmount - Math.Abs(order.TotalDiscountAmount);

                    if (canCalculateAmount < coupon.SaleRulesEx.OrderAmountLimit)
                    {
                        SetCouponError(ref order, LanguageHelper.GetText("没有满足该优惠券要求的商品总金额下限{0},无法抵扣", order.LanguageCode), coupon.SaleRulesEx.OrderAmountLimit);
                        continue;
                    }

                    decimal totalPriceAmount = (merchantOrder.Value.Sum(m => m.TotalProductAmount) - merchantOrder.Value.Sum(m => m.TotalDiscountAmount));

                    #region 处理订单 折扣金额模式 和 百分比模式
                    if (coupon.DiscountRuleList[0].DiscountType == CouponDiscountType.OrderAmountDiscount || coupon.DiscountRuleList[0].DiscountType == CouponDiscountType.OrderAmountPercentage)
                    {
                        //获取适合的折扣规则
                        Coupon_DiscountRules curDiscountRule = GetMatchDiscountRule(coupon, canCalculateAmount);
                        if (curDiscountRule == null)
                        {
                            SetCouponError(ref order, LanguageHelper.GetText("订单总金额未达到优惠券要求的最小购买金额,无法抵扣", order.LanguageCode));
                            return;
                        }

                        decimal discount = 0m;
                        if (curDiscountRule.DiscountType == CouponDiscountType.OrderAmountDiscount)
                        {
                            discount = Math.Abs(Math.Round(curDiscountRule.Value, 2));
                        }
                        else
                        {
                            discount = Math.Abs(Math.Round(canCalculateAmount * curDiscountRule.Value, 2));
                        }



                        if (coupon.SaleRulesEx.OrderMaxDiscount.HasValue && coupon.SaleRulesEx.OrderMaxDiscount.Value > 0m)
                        {
                            if (discount > coupon.SaleRulesEx.OrderMaxDiscount.Value)
                            {
                                discount = coupon.SaleRulesEx.OrderMaxDiscount.Value;
                            }
                        }

                        foreach (var subOrder in merchantOrder.Value)
                        {
                            subOrder.MerchantCouponCodeSysNo = customerCoupon.CouponCodeSysNo;
                            subOrder.MerchantCouponCode      = customerCoupon.CouponCode;
                            subOrder.MerchantCouponSysNo     = customerCoupon.CouponSysNo;
                            subOrder.MerchantCouponName      = customerCoupon.CouponName;
                            subOrder.MerchantCouponAmount    = discount * ((subOrder.TotalProductAmount - subOrder.TotalDiscountAmount) / totalPriceAmount);
                            subOrder.MerchantCouponErrorDesc = string.Empty;
                            foreach (var itemGroup in subOrder.OrderItemGroupList)
                            {
                                foreach (var item in itemGroup.ProductItemList)
                                {
                                    item["UnitCouponAmt"] = (discount * (item.UnitSalePrice - (item["UnitDiscountAmt"] == null ? 0m :(decimal)item["UnitDiscountAmt"])))
                                                            / totalPriceAmount;
                                    item["MerchantUnitCouponAmt"] = (discount * (item.UnitSalePrice - (item["UnitDiscountAmt"] == null ? 0m : (decimal)item["UnitDiscountAmt"])))
                                                                    / totalPriceAmount;
                                }
                            }
                        }
                    }
                    #endregion

                    #region 处理 一个商品直减模式
                    if (coupon.DiscountRuleList[0].DiscountType == CouponDiscountType.ProductPriceDiscount)
                    {
                        if (coupon.SaleRulesList == null || coupon.SaleRulesList.Count == 0)
                        {
                            SetCouponError(ref order, LanguageHelper.GetText("没有满足该优惠券的指定商品,无法抵扣", order.LanguageCode));
                            return;
                        }
                        Coupon_SaleRules productSaleRule = coupon.SaleRulesList.Find(f => f.SaleRuleType == CouponSaleRuleType.RelProduct);


                        int discountProductSysNo = productSaleRule.ProductSysNo;

                        int     discountProductCount = 0;
                        decimal productReduce        = 0m;
                        decimal productPrice         = 0.00m;
                        foreach (OrderItemGroup itemGroup in order.OrderItemGroupList)
                        {
                            OrderProductItem item = itemGroup.ProductItemList.Find(f => f.ProductSysNo == discountProductSysNo);
                            if (item != null)
                            {
                                discountProductCount += item.UnitQuantity * itemGroup.Quantity;

                                productPrice = item.UnitSalePrice;
                            }
                        }
                        if (discountProductCount == 0)
                        {
                            SetCouponError(ref order, LanguageHelper.GetText("没有满足该优惠券的指定商品,无法抵扣", order.LanguageCode));
                            return;
                        }

                        if (discountProductCount > coupon.DiscountRuleList[0].Quantity)
                        {
                            discountProductCount = coupon.DiscountRuleList[0].Quantity;
                        }

                        productReduce = coupon.DiscountRuleList[0].Value;
                        if (coupon.DiscountRuleList[0].Value > productPrice)
                        {
                            productReduce = productPrice;
                        }

                        decimal discount = Math.Abs(Math.Round(productReduce * discountProductCount, 2));



                        if (coupon.SaleRulesEx.OrderMaxDiscount.HasValue && coupon.SaleRulesEx.OrderMaxDiscount.Value > 0m)
                        {
                            if (discount > coupon.SaleRulesEx.OrderMaxDiscount.Value)
                            {
                                discount = coupon.SaleRulesEx.OrderMaxDiscount.Value;
                            }
                        }
                        foreach (var subOrder in merchantOrder.Value)
                        {
                            subOrder.MerchantCouponCodeSysNo = customerCoupon.CouponCodeSysNo;
                            subOrder.MerchantCouponCode      = customerCoupon.CouponCode;
                            subOrder.MerchantCouponSysNo     = customerCoupon.CouponSysNo;
                            subOrder.MerchantCouponName      = customerCoupon.CouponName;
                            subOrder.MerchantCouponAmount    = discount * ((subOrder.TotalProductAmount - subOrder.TotalDiscountAmount) / totalPriceAmount);
                            subOrder.MerchantCouponErrorDesc = string.Empty;

                            subOrder["MerchantCoupon_DiscountProductSysNo"] = discountProductSysNo;
                            subOrder["MerchantCoupon_DiscountProductCount"] = discountProductCount;
                            foreach (var itemGroup in subOrder.OrderItemGroupList)
                            {
                                foreach (var item in itemGroup.ProductItemList)
                                {
                                    item["UnitCouponAmt"] = (discount * (item.UnitSalePrice - (item["UnitDiscountAmt"] == null ? 0m : (decimal)item["UnitDiscountAmt"])))
                                                            / totalPriceAmount;
                                    item["MerchantUnitCouponAmt"] = (discount * (item.UnitSalePrice - (item["UnitDiscountAmt"] == null ? 0m : (decimal)item["UnitDiscountAmt"])))
                                                                    / totalPriceAmount;
                                }
                            }
                        }
                    }
                    #endregion

                    #region 处理 一个商品最终售价模式
                    if (coupon.DiscountRuleList[0].DiscountType == CouponDiscountType.ProductPriceFinal)
                    {
                        if (coupon.SaleRulesList == null || coupon.SaleRulesList.Count == 0)
                        {
                            SetCouponError(ref order, LanguageHelper.GetText("没有满足该优惠券的指定商品,无法抵扣", order.LanguageCode));
                            return;
                        }
                        Coupon_SaleRules productSaleRule = coupon.SaleRulesList.Find(f => f.SaleRuleType == CouponSaleRuleType.RelProduct);


                        int discountProductSysNo = productSaleRule.ProductSysNo;

                        decimal discountProductPrice = 0.00m;
                        int     discountProductCount = 0;
                        foreach (var currOrder in merchantOrder.Value)
                        {
                            foreach (OrderItemGroup itemGroup in currOrder.OrderItemGroupList)
                            {
                                OrderProductItem item = itemGroup.ProductItemList.Find(f => f.ProductSysNo == discountProductSysNo);
                                if (item != null)
                                {
                                    discountProductCount += item.UnitQuantity * itemGroup.Quantity;
                                    discountProductPrice  = item.UnitSalePrice;
                                }
                            }
                        }
                        if (discountProductCount == 0)
                        {
                            SetCouponError(ref order, LanguageHelper.GetText("没有满足该优惠券的指定商品,无法抵扣", order.LanguageCode));
                            return;
                        }
                        if (discountProductCount > coupon.DiscountRuleList[0].Quantity)
                        {
                            discountProductCount = coupon.DiscountRuleList[0].Quantity;
                        }

                        decimal discount = 0m;
                        if (discountProductPrice > coupon.DiscountRuleList[0].Value)
                        {
                            discount = Math.Abs(Math.Round((discountProductPrice - coupon.DiscountRuleList[0].Value) * discountProductCount, 2));
                        }
                        else
                        {
                            SetCouponError(ref order, LanguageHelper.GetText("该优惠券的指定商品已经是优惠券设定的最低价格,无法抵扣", order.LanguageCode));
                            return;
                        }
                        if (coupon.SaleRulesEx.OrderMaxDiscount.HasValue && coupon.SaleRulesEx.OrderMaxDiscount.Value > 0m)
                        {
                            if (discount > coupon.SaleRulesEx.OrderMaxDiscount.Value)
                            {
                                discount = coupon.SaleRulesEx.OrderMaxDiscount.Value;
                            }
                        }
                        foreach (var subOrder in merchantOrder.Value)
                        {
                            subOrder.MerchantCouponCodeSysNo = customerCoupon.CouponCodeSysNo;
                            subOrder.MerchantCouponCode      = customerCoupon.CouponCode;
                            subOrder.MerchantCouponSysNo     = customerCoupon.CouponSysNo;
                            subOrder.MerchantCouponName      = customerCoupon.CouponName;
                            subOrder.MerchantCouponAmount    = discount * ((subOrder.TotalProductAmount - subOrder.TotalDiscountAmount) / totalPriceAmount);
                            subOrder.MerchantCouponErrorDesc = string.Empty;

                            subOrder["MerchantCoupon_DiscountProductSysNo"] = discountProductSysNo;
                            subOrder["MerchantCoupon_DiscountProductCount"] = discountProductCount;
                            foreach (var itemGroup in subOrder.OrderItemGroupList)
                            {
                                foreach (var item in itemGroup.ProductItemList)
                                {
                                    item["UnitCouponAmt"] = (discount * (item.UnitSalePrice - (item["UnitDiscountAmt"] == null ? 0m : (decimal)item["UnitDiscountAmt"])))
                                                            / totalPriceAmount;
                                    item["MerchantUnitCouponAmt"] = (discount * (item.UnitSalePrice - (item["UnitDiscountAmt"] == null ? 0m : (decimal)item["UnitDiscountAmt"])))
                                                                    / totalPriceAmount;
                                }
                            }
                        }
                    }
                    #endregion

                    foreach (var subOrder in merchantOrder.Value)
                    {
                        subOrder["MerchantCoupon_DiscountType"] = coupon.DiscountRuleList[0].DiscountType;
                    }
                }

                #endregion
            }

            #endregion
        }
コード例 #9
0
        /// <summary>
        /// 加够商品转换为主商品
        /// </summary>
        /// <param name="productSysNo">商品编号</param>
        /// <param name="customerSysNo">用户编号</param>
        /// <returns></returns>
        private OrderItemGroup PlusPriceConvertToProduct(OrderGiftItem plusPrice, int customerSysNo)
        {
            OrderItemGroup   result      = new OrderItemGroup();
            OrderProductItem productItem = new OrderProductItem();

            productItem.ProductSysNo = plusPrice.ProductSysNo;

            //商品基础信息
            ProductBasicInfo basicInfo = PipelineDA.GetProductBasicInfoBySysNo(productItem.ProductSysNo);
            //商品备案信息
            ProductEntryInfo entryInfo = PipelineDA.GetProductEntryInfoBySysNo(productItem.ProductSysNo);

            basicInfo.ProductEntryInfo      = entryInfo;
            productItem["ProductStoreType"] = (int)entryInfo.ProductStoreType;
            //商品备货时间
            productItem["LeadTimeDays"] = basicInfo.ProductEntryInfo.LeadTimeDays;

            //商品销售信息
            ProductSalesInfo salesInfo = PipelineDA.GetProductSalesInfoBySysNo(productItem.ProductSysNo);

            productItem.ProductID         = basicInfo.Code;
            productItem.ProductName       = basicInfo.ProductName;
            productItem.Weight            = basicInfo.Weight;
            productItem["ProductTitle"]   = basicInfo.ProductTitle;
            productItem.DefaultImage      = basicInfo.DefaultImage;
            productItem.UnitMarketPrice   = salesInfo.MarketPrice;
            productItem.UnitCostPrice     = salesInfo.UnitCostPrice;
            productItem.UnitSalePrice     = plusPrice.UnitSalePrice;
            productItem.UnitRewardedPoint = 0;
            //productItem["TariffRate"] = basicInfo.ProductEntryInfo.TariffRate;
            productItem.TotalInventory       = salesInfo.OnlineQty;
            productItem.MerchantSysNo        = basicInfo.VendorSysno;
            productItem.MerchantName         = basicInfo.VendorInfo.VendorName;
            result.MerchantSysNo             = basicInfo.VendorSysno;
            result.MerchantName              = basicInfo.VendorInfo.VendorName;
            productItem["ProductStatus"]     = (int)basicInfo.ProductStatus;
            productItem["Warranty"]          = basicInfo.Warranty;
            productItem.WarehouseNumber      = plusPrice.WarehouseNumber;
            productItem.WarehouseName        = plusPrice.WarehouseName;
            productItem.WarehouseCountryCode = plusPrice.WarehouseCountryCode;

            salesInfo.MinCountPerOrder = salesInfo.OnlineQty < productItem.UnitQuantity ? salesInfo.OnlineQty : productItem.UnitQuantity;
            salesInfo.MaxCountPerOrder = salesInfo.OnlineQty < productItem.UnitQuantity ? salesInfo.OnlineQty : productItem.UnitQuantity;

            productItem["MinCountPerOrder"] = productItem.UnitQuantity;
            productItem["MaxCountPerOrder"] = productItem.UnitQuantity;

            result.MinCountPerSO = productItem.UnitQuantity;
            result.MaxCountPerSO = productItem.UnitQuantity;
            result.MerchantSysNo = productItem.MerchantSysNo;
            result.MerchantName  = productItem.MerchantName;
            result.PackageNo     = 0;
            result.PackageType   = 0;
            result.Quantity      = 1;

            //商品分组属性
            List <ProductSplitGroupProperty> splitGroupProperty = PipelineDA.GetProductSplitGroupPropertyList(productItem.ProductSysNo);

            if (splitGroupProperty != null && splitGroupProperty.Count > 0)
            {
                productItem.SplitGroupPropertyDescList = new List <KeyValuePair <string, string> >();
                foreach (ProductSplitGroupProperty property in splitGroupProperty)
                {
                    productItem.SplitGroupPropertyDescList.Add(new KeyValuePair <string, string>(property.PropertyDescription, property.ValueDescription));
                }
            }
            result.ProductItemList = new List <OrderProductItem>();
            result.ProductItemList.Add(productItem);

            return(result);
        }
コード例 #10
0
        public void Calculate(ref OrderInfo orderInfo)
        {
            Dictionary <string, OrderInfo> subOrderInfoList = new Dictionary <string, OrderInfo>();

            #region 【 将加够商品合并至主商品 】

            foreach (var plusPriceItem in orderInfo.PlusPriceItemList)
            {
                if (plusPriceItem.IsSelect)
                {
                    orderInfo.OrderItemGroupList.Add(PlusPriceConvertToProduct(plusPriceItem, orderInfo.Customer.SysNo));
                }
            }

            #endregion

            #region 【 先处理主商品 】

            List <OrderProductItem> masterItemList = new List <OrderProductItem>();

            if (orderInfo.OrderItemGroupList != null)
            {
                foreach (var itemGroup in orderInfo.OrderItemGroupList)
                {
                    if (itemGroup.ProductItemList != null)
                    {
                        itemGroup.ProductItemList.ForEach(masterItem =>
                        {
                            //将主商品拆分到最细粒度,即一个商品一个OrderProductItem
                            for (int i = 0; i < masterItem.UnitQuantity * itemGroup.Quantity; i++)
                            {
                                OrderProductItem cloneItem = (OrderProductItem)masterItem.Clone();
                                cloneItem.UnitQuantity     = 1;
                                //设置商品上的套餐号和套餐类型,很别扭,先这样吧,下个项目再修改 at 【2014-08-08 13:25:43】
                                cloneItem["PackageNo"]   = itemGroup.PackageNo;
                                cloneItem["PackageType"] = itemGroup.PackageType;
                                masterItemList.Add(cloneItem);
                            }
                        });
                    }
                }
            }

            //先初步按照 供应商+仓库+存储运输方式 拆分
            Dictionary <string, List <OrderProductItem> > dicMasterItemPreSplitResult = GetMainItemSplitResult(masterItemList);

            Dictionary <string, List <OrderProductItem> > dicSubOrderMasterItemResult = new Dictionary <string, List <OrderProductItem> >();

            //取得每单最大限制金额
            Dictionary <string, decimal> maxPerOrderAmountConfig = GetMaxPerOrderAmountConfig();

            foreach (var kvs in dicMasterItemPreSplitResult)
            {
                kvs.Value.Sort((item1, item2) =>
                {
                    return((item1.TotalSalePrice).CompareTo(item2.TotalSalePrice));
                });

                //单个订单金额拆分规则
                string warehouseCountryCode = string.IsNullOrEmpty(kvs.Value[0].WarehouseCountryCode) ? string.Empty :
                                              kvs.Value[0].WarehouseCountryCode;

                decimal maxPerOrderAmount = decimal.MaxValue;
                if (maxPerOrderAmountConfig.ContainsKey(warehouseCountryCode.ToUpper().Trim()))
                {
                    maxPerOrderAmount = maxPerOrderAmountConfig[warehouseCountryCode.ToUpper().Trim()];
                }

                decimal shoppingItemPriceSum = 0;
                string  thisKey = string.Empty;
                List <OrderProductItem> thisGroupMasterItemList = new List <OrderProductItem>();

                //根据每单最大购买金额进行一次拆单
                foreach (OrderProductItem masterItem in kvs.Value)
                {
                    decimal currentItemAmtSum = masterItem.TotalSalePrice;
                    //判断当前订单金额是否大于出库地区每单最大金额
                    if (shoppingItemPriceSum + currentItemAmtSum > maxPerOrderAmount)
                    {
                        //如果大于出库地区每单最大金额,并且主商品分组为空的话,那么当前单商品金额就已经超出
                        //最大购买金额,单商品自成一单
                        if (thisGroupMasterItemList.Count <= 0)
                        {
                            shoppingItemPriceSum = masterItem.TotalSalePrice;
                            thisGroupMasterItemList.Add(masterItem);

                            //根据订单金额重新计算一次key值
                            thisKey = GetSubOrderKey(kvs.Key, shoppingItemPriceSum, dicSubOrderMasterItemResult);
                            dicSubOrderMasterItemResult[thisKey] = thisGroupMasterItemList;

                            shoppingItemPriceSum    = currentItemAmtSum;
                            thisGroupMasterItemList = new List <OrderProductItem>();
                        }
                        else
                        {
                            //主商品分组合并组成一个子单,清空之前的主商品分组,并且将当前主商品加入到分组中
                            //根据订单金额重新计算一次key值
                            thisKey = GetSubOrderKey(kvs.Key, shoppingItemPriceSum, dicSubOrderMasterItemResult);
                            dicSubOrderMasterItemResult[thisKey] = thisGroupMasterItemList;

                            shoppingItemPriceSum    = currentItemAmtSum;
                            thisGroupMasterItemList = new List <OrderProductItem>()
                            {
                                masterItem
                            };
                        }
                    }
                    else
                    {
                        //金额没有超过最大购买金额,将当前主商品加入到分组中
                        shoppingItemPriceSum += masterItem.TotalSalePrice;
                        thisGroupMasterItemList.Add(masterItem);
                    }
                }
                //处理剩下的主商品分组,这些主商品组成一个子单
                if (thisGroupMasterItemList.Count > 0)
                {
                    thisKey = GetSubOrderKey(kvs.Key, shoppingItemPriceSum, dicSubOrderMasterItemResult);
                    dicSubOrderMasterItemResult[thisKey] = thisGroupMasterItemList;
                }
            }

            foreach (var kvs in dicSubOrderMasterItemResult)
            {
                OrderInfo subOrderInfo = (OrderInfo)orderInfo.Clone();
                //设置订单的默认出库仓
                subOrderInfo["WarehouseNumber"]      = kvs.Value.FirstOrDefault().WarehouseNumber;
                subOrderInfo["WarehouseName"]        = kvs.Value.FirstOrDefault().WarehouseName;
                subOrderInfo["WarehouseCountryCode"] = kvs.Value.FirstOrDefault().WarehouseCountryCode;
                subOrderInfo["MerchantSysNo"]        = kvs.Value.FirstOrDefault().MerchantSysNo;
                subOrderInfo["StoreType"]            = kvs.Value.FirstOrDefault()["ProductStoreType"];

                subOrderInfo.OrderItemGroupList = new List <OrderItemGroup>();
                subOrderInfo.GiftItemList       = new List <OrderGiftItem>();
                subOrderInfo.AttachmentItemList = new List <OrderAttachment>();

                OrderItemGroup itemGroup = new OrderItemGroup();
                //商品在拆单后,购买行为上的分组失去意义,设置组上的购买数量为1,商品的上UnitQuantity及时真实的商品购买数量
                itemGroup.Quantity        = 1;
                itemGroup.ProductItemList = new List <OrderProductItem>();

                kvs.Value.ForEach(masterItem =>
                {
                    //itemGroup.ProductItemList.Add(masterItem);
                    //由于前面将主商品拆分到最细,这里需要将主商品合并
                    if (!itemGroup.ProductItemList.Exists(x =>
                    {
                        if (x.ProductSysNo == masterItem.ProductSysNo)
                        {
                            x.UnitQuantity += masterItem.UnitQuantity;
                            return(true);
                        }
                        return(false);
                    }))
                    {
                        itemGroup.ProductItemList.Add(masterItem);
                    }
                });
                subOrderInfo.OrderItemGroupList.Add(itemGroup);

                subOrderInfoList.Add(kvs.Key, subOrderInfo);
            }

            #endregion

            #region 【 处理赠品和附件 】

            List <OrderItem> giftAndAccessoryList = new List <OrderItem>();

            if (orderInfo.GiftItemList != null)
            {
                orderInfo.GiftItemList.ForEach(gift =>
                {
                    if (!giftAndAccessoryList.Exists(g =>
                    {
                        OrderGiftItem giftItem = (OrderGiftItem)g;
                        //赠品合并增加一个赠品活动编号维度,客户端考虑对相同商品编号的赠品合并
                        if (giftItem.ProductSysNo == gift.ProductSysNo &&
                            giftItem.ActivityNo == gift.ActivityNo)
                        {
                            g.UnitQuantity += gift.UnitQuantity * gift.ParentCount;
                            return(true);
                        }
                        return(false);
                    }))
                    {
                        OrderGiftItem cloneGift = (OrderGiftItem)gift.Clone();
                        cloneGift.UnitQuantity  = gift.UnitQuantity * gift.ParentCount;
                        //合并后赠品的组数量失去意义,设置赠品的组购买数量为1
                        cloneGift.ParentCount = 1;
                        giftAndAccessoryList.Add(cloneGift);
                    }
                });
            }

            if (orderInfo.AttachmentItemList != null)
            {
                orderInfo.AttachmentItemList.ForEach(attachment =>
                {
                    if (!giftAndAccessoryList.Exists(a =>
                    {
                        if (a.ProductSysNo == attachment.ProductSysNo)
                        {
                            a.UnitQuantity += attachment.UnitQuantity * attachment.ParentCount;
                            return(true);
                        }
                        return(false);
                    }))
                    {
                        OrderAttachment cloneAttachment = (OrderAttachment)attachment.Clone();
                        cloneAttachment.UnitQuantity    = attachment.UnitQuantity * attachment.ParentCount;
                        //合并后附件的组数量失去意义,设置附件的组购买数量为1
                        cloneAttachment.ParentCount = 1;
                        giftAndAccessoryList.Add(cloneAttachment);
                    }
                });
            }

            Dictionary <string, List <OrderItem> > dicGiftAndAccessorySplitResult = GetItemSplitResult(giftAndAccessoryList);

            //赠品和附件不会影响订单金额,将按照商家+仓库+存储运输方式拆好的单和前面主商品拆好的单进行合并
            foreach (var kvs in dicGiftAndAccessorySplitResult)
            {
                OrderInfo theSubOrderInfo = null;
                //赠品(附件)在新的子单中
                bool giftOrAccessoryInNewSubOrder = false;

                foreach (string thisKey in subOrderInfoList.Keys)
                {
                    //thisKey:vendorSysno|warehouseNumber|storeType|amt-1....n
                    string prefixKey = thisKey.Substring(0, thisKey.LastIndexOf('|'));
                    prefixKey = prefixKey.Substring(0, prefixKey.LastIndexOf('|'));

                    //kvs.Key: vendorSysno|warehouseNumber|storeType
                    string newKey = kvs.Key.Substring(0, kvs.Key.LastIndexOf('|'));
                    if (newKey.ToUpper().Trim() == prefixKey.ToUpper().Trim())
                    {
                        theSubOrderInfo = subOrderInfoList[thisKey];
                        break;
                    }
                }

                if (theSubOrderInfo == null)
                {
                    giftOrAccessoryInNewSubOrder = true;
                    theSubOrderInfo = (OrderInfo)orderInfo.Clone();
                    //设置订单的默认出库仓
                    theSubOrderInfo["WarehouseNumber"]      = kvs.Value.FirstOrDefault().WarehouseNumber;
                    theSubOrderInfo["WarehouseName"]        = kvs.Value.FirstOrDefault().WarehouseName;
                    theSubOrderInfo["WarehouseCountryCode"] = kvs.Value.FirstOrDefault().WarehouseCountryCode;
                    theSubOrderInfo["MerchantSysNo"]        = kvs.Value.FirstOrDefault().MerchantSysNo;
                    theSubOrderInfo["StoreType"]            = kvs.Value.FirstOrDefault()["ProductStoreType"];

                    theSubOrderInfo.OrderItemGroupList = new List <OrderItemGroup>();
                    theSubOrderInfo.GiftItemList       = new List <OrderGiftItem>();
                    theSubOrderInfo.AttachmentItemList = new List <OrderAttachment>();

                    subOrderInfoList.Add(kvs.Key, theSubOrderInfo);
                }

                foreach (var orderItem in kvs.Value)
                {
                    if (orderItem is OrderGiftItem)
                    {
                        OrderGiftItem giftItem = orderItem as OrderGiftItem;
                        //Modified by PoseidonTong at [2014-08-11 12:33:01]
                        //赠品在和主商品同仓的前提下,优先和关联的主商品拆在同一个订单
                        if (!giftOrAccessoryInNewSubOrder && giftItem.ParentProductSysNo > 0)
                        {
                            var giftMasterProductSubOrderInfos = subOrderInfoList.Select(_ => _.Value)
                                                                 .Where(x => x.OrderItemGroupList != null &&
                                                                        x.OrderItemGroupList.Exists(y =>
                                                                                                    y.ProductItemList != null &&
                                                                                                    y.ProductItemList.Exists(p => p.ProductSysNo == giftItem.ParentProductSysNo)
                                                                                                    ));

                            if (giftMasterProductSubOrderInfos.Count() > 0)
                            {
                                //取满足条件的第一个子单,考虑同一个主商品由于金额
                                //限制拆分成了多个子单的情况,这里将赠品放到第一个主单中
                                giftMasterProductSubOrderInfos.First().GiftItemList.Add(giftItem);
                                continue;
                            }
                        }
                        theSubOrderInfo.GiftItemList.Add(giftItem);
                    }
                    else if (orderItem is OrderAttachment)
                    {
                        OrderAttachment attrItem = orderItem as OrderAttachment;
                        //Modified by PoseidonTong at [2014-08-11 12:33:01]
                        //附件在和主商品同仓的前提下,优先和关联的主商品拆在同一个订单
                        if (!giftOrAccessoryInNewSubOrder && attrItem.ParentProductSysNo > 0)
                        {
                            var attMasterProductSubOrderInfos = subOrderInfoList.Select(_ => _.Value)
                                                                .Where(x => x.OrderItemGroupList != null &&
                                                                       x.OrderItemGroupList.Exists(y =>
                                                                                                   y.ProductItemList != null &&
                                                                                                   y.ProductItemList.Exists(p => p.ProductSysNo == attrItem.ParentProductSysNo)
                                                                                                   ));

                            if (attMasterProductSubOrderInfos.Count() > 0)
                            {
                                //取满足条件的第一个子单,考虑同一个主商品由于金额
                                //限制拆分成了多个子单的情况,这里将附件放到第一个主单中
                                attMasterProductSubOrderInfos.First().AttachmentItemList.Add(attrItem);
                                continue;
                            }
                        }
                        theSubOrderInfo.AttachmentItemList.Add(attrItem);
                    }
                }
            }

            #endregion

            #region 【 设置子单类型和商家模式 】

            foreach (var kvs in subOrderInfoList)
            {
                OrderInfo subOrderInfo = kvs.Value;
                #region 设置商家模式
                ECommerce.Entity.Product.VendorInfo vendorInfo = PipelineDA.GetVendorInfo((int)subOrderInfo["MerchantSysNo"]);
                subOrderInfo["ShippingType"] = vendorInfo.ShippingType;
                subOrderInfo["StockType"]    = vendorInfo.StockType;
                subOrderInfo["InvoiceType"]  = vendorInfo.InvoiceType;
                subOrderInfo["SellerType"]   = vendorInfo.SellerType;
                subOrderInfo["VendorName"]   = vendorInfo.VendorName;
                #endregion

                #region 设置子单类型
                subOrderInfo.SOType = (int)SOType.Normal;
                ////团购商品不能和普通商品混合下单,所以只要订单中有团购商品,那么订单一定就是团购订单
                //if (subOrderInfo.OrderItemGroupList != null)
                //{
                //    if (subOrderInfo.OrderItemGroupList.Exists(itemGroup =>
                //    {
                //        if (itemGroup.ProductItemList != null)
                //        {
                //            return itemGroup.ProductItemList.Exists(product =>
                //            {
                //                if (product.SpecialActivityType == 1 || product.SpecialActivityType == 3)
                //                {
                //                    //记录下团购编号
                //                    subOrderInfo["ReferenceSysNo"] = product.SpecialActivitySysNo;
                //                    return true;
                //                }
                //                return false;
                //            });
                //        }
                //        return false;
                //    }))
                //    {
                //        subOrderInfo.SOType = (int)SOType.GroupBuy;
                //    }
                //    else
                //    {
                //        subOrderInfo.SOType = (int)SOType.Normal;
                //    }
                //}
                //else
                //{
                //    subOrderInfo.SOType = (int)SOType.Normal;
                //}
                #endregion
            }

            #endregion

            orderInfo.SubOrderList = subOrderInfoList;
        }
コード例 #11
0
        /// <summary>
        /// 支付后台回调
        /// </summary>
        /// <param name="payTypeSysNo">支付方式系统编号</param>
        /// <param name="collection">POST数据集合</param>
        /// <returns></returns>
        public string PaymentCallback(int payTypeSysNo, NameValueCollection collection, out CallbackContext context)
        {
            context = new CallbackContext();
            try
            {
                #region [ 写系统Log ]

                ApplicationEventLog log = new ApplicationEventLog()
                {
                    Source           = "B2C site pay",
                    EventType        = 8,
                    HostName         = "B2C",
                    EventTitle       = "Pay callback",
                    EventMessage     = Charges.BuildStringFromNameValueCollection(collection),
                    LanguageCode     = ConstValue.LanguageCode,
                    CompanyCode      = ConstValue.CompanyCode,
                    StoreCompanyCode = ConstValue.StoreCompanyCode
                };
                CommonDA.CreateApplicationEventLog(log);

                #endregion

                context.PaymentModeId = payTypeSysNo;
                context.ResponseForm  = collection;

                Charges charge = Charges.GetInstance(context);
                context.SOSysNo = charge.GetSOSysNo(context);
                context.SOInfo  = ShoppingOrderDA.PayGetOrderInfoBySOSysNo(context.SOSysNo);
                charge.UpdateCallbackPayment(context);

                //如果为泰隆网关支付,写入积分消费记录
                //if (payTypeSysNo == 201)
                //{
                //    CreateUserBankPointRecord(context);
                //}


                if (charge.VerifySign(context))
                {
                    #region [ 检查返回的订单实际支付金额与订单需要支付的金额是否相等,否则不予处理 ]

                    if (context.SOInfo == null)
                    {
                        return(BuildPaymentCallbackReturnResult(payTypeSysNo, false));
                    }
                    if (!charge.GetPayAmount(context).ToString("F2").Equals(context.SOInfo.RealPayAmt.ToString("F2")))
                    {
                        ECommerce.Utility.Logger.WriteLog("订单实际支付金额与订单需要支付的金额不相等!", "PayCallback", "CheckPayAmount");
                        return(BuildPaymentCallbackReturnResult(payTypeSysNo, false));
                    }

                    #endregion

                    #region [ 检查NetPay是否存在并且状态为>=0,是则已支付过 ]

                    NetpayInfo netPayInfo = ShoppingOrderDA.GetCenterDBNetpayBySOSysNo(context.SOSysNo);
                    if (netPayInfo != null && netPayInfo.Status > (int)NetPayStatusType.Origin)
                    {
                        ECommerce.Utility.Logger.WriteLog("订单已经支付!", "PayCallback", "CheckNetPay");
                        return(BuildPaymentCallbackReturnResult(payTypeSysNo, true));
                    }
                    #endregion

                    if (charge.GetPayResult(context))
                    {
                        //支付成功
                        using (ITransaction scope = TransactionManager.Create())
                        {
                            #region 1.写Netpay
                            netPayInfo = new NetpayInfo()
                            {
                                SOSysNo          = context.SOSysNo,
                                PayTypeSysNo     = payTypeSysNo,
                                PayAmount        = context.SOInfo.RealPayAmt,
                                Source           = 0,
                                Status           = NetPayStatusType.Verified,
                                CompanyCode      = context.SOInfo.CompanyCode,
                                LanguageCode     = context.SOInfo.LanguageCode,
                                CurrencySysNo    = context.SOInfo.CurrencySysNo,
                                StoreCompanyCode = context.SOInfo.StoreCompanyCode,
                                OrderAmt         = (context.SOInfo.SoAmt
                                                    - Math.Abs((context.SOInfo.Amount.PointPay * 1.00m) / decimal.Parse(ConstValue.PointExhangeRate))
                                                    - Math.Abs(context.SOInfo.PromotionAmt)
                                                    + Math.Abs(context.SOInfo.Amount.PayPrice)
                                                    + Math.Abs(context.SOInfo.Amount.ShipPrice)
                                                    + Math.Abs(context.SOInfo.Amount.PremiumAmt)
                                                    - Math.Abs(context.SOInfo.Amount.DiscountAmt)
                                                    + Math.Abs(context.SOInfo.TariffAmt)
                                                    ),
                                PrePayAmt      = context.SOInfo.Amount.PrepayAmt,
                                PointPayAmt    = context.SOInfo.PointPay * 1.00m / decimal.Parse(ConstValue.PointExhangeRate),
                                GiftCardPayAmt = context.SOInfo.Amount.GiftCardPay,
                                SerialNumber   = charge.GetSerialNumber(context),
                                PayProcessTime = charge.GetPayProcessTime(context)
                            };
                            bool isTrue = ShoppingOrderDA.CreateNetpay(netPayInfo);
                            #endregion

                            if (!isTrue)
                            {
                                //解决前后台多次并发处理重复数据
                                ECommerce.Utility.Logger.WriteLog("订单已经支付!", "PayCallback", "CreateNetPay");
                                return(BuildPaymentCallbackReturnResult(payTypeSysNo, false));
                            }
                            if (ConstValue.PaymentInventory)
                            {
                                List <OrderItem> subOrderItemList = new List <OrderItem>();
                                context.SOInfo.SOItemList.ForEach(Item =>
                                {
                                    OrderProductItem opitem = new OrderProductItem();
                                    opitem["Quantity"]      = Item.Quantity;
                                    opitem.ProductSysNo     = int.Parse(Item.ProductID);
                                    opitem.ProductName      = Item.ProductName;
                                    opitem.WarehouseNumber  = int.Parse(Item.WarehouseNumber);
                                    subOrderItemList.Add(opitem);
                                });
                                subOrderItemList.ForEach(Item =>
                                {
                                    //限时促销
                                    if (PipelineDA.CheckCountDownByProductSysNo(Item.ProductSysNo))
                                    {
                                        //扣减订单商品库存
                                        int inventoryType = PipelineDA.GetInventoryType(Item);
                                        var rowCount      = PipelineDA.UpdateInventory(Item);
                                        if (rowCount != 1 && inventoryType != 1 && inventoryType != 3 && inventoryType != 5)
                                        {
                                            ECommerce.Utility.Logger.WriteLog("inventory: qty is not enough", "SOPipeline.CreateSOBasicPersister");
                                            throw new BusinessException(string.Format("商品【{0}】库存不足", Item.ProductName));
                                        }
                                        rowCount = PipelineDA.UpdateInventoryStock(Item);
                                        if (rowCount != 1 && inventoryType != 1 && inventoryType != 3 && inventoryType != 5)
                                        {
                                            ECommerce.Utility.Logger.WriteLog("inventory_stock: qty is not enough", "SOPipeline.CreateSOBasicPersister");
                                            throw new BusinessException(string.Format("商品【{0}】库存不足", Item.ProductName));
                                        }
                                    }
                                });
                            }


                            #region 2.发送支付成功邮件
                            //确认不需要发邮件
                            //CustomerInfo customer = CustomerDA.GetCustomerInfo(context.SOInfo.CustomerSysNo);
                            //if (!string.IsNullOrWhiteSpace(customer.Email))
                            //{
                            //    AsyncEmail email = new AsyncEmail();
                            //    email.MailAddress = customer.Email;
                            //    email.CustomerID = customer.CustomerID;
                            //    email.Status = (int)EmailStatus.NotSend;
                            //    string token = Guid.NewGuid().ToString("N");
                            //    email.ImgBaseUrl = ConfigurationManager.AppSettings["CDNWebDomain"].ToString();
                            //    email.SetNewTokenUrl = "/EmailVerifySucceed?token=" + token + "&sysno=" + customer.SysNo.ToString() + "&email=" + System.Web.HttpUtility.HtmlEncode(customer.Email);

                            //    string subject = string.Empty;
                            //    email.MailBody = MailHelper.GetMailTemplateBody("SalesOrderPaySuccessful", out subject);
                            //    email.MailSubject = subject.Replace("[SOSysNo]", context.SOInfo.SoSysNo.ToString());
                            //    //订单内容
                            //    email.MailBody = email.MailBody.Replace("[CustomerName]", customer.CustomerName);
                            //    email.MailBody = email.MailBody.Replace("[SOSysNo]", context.SOInfo.SoSysNo.ToString());
                            //    email.MailBody = email.MailBody.Replace("[PayAmount]", context.SOInfo.RealPayAmt.ToString("F2"));
                            //    email.MailBody = email.MailBody.Replace("[PayTypeName]", context.SOInfo.Payment.PayTypeName);
                            //    email.MailBody = email.MailBody.Replace("[OrderDate]", context.SOInfo.OrderDate.ToString());
                            //    email.MailBody = email.MailBody.Replace("[ReceiveName]", context.SOInfo.ReceiveName);
                            //    email.MailBody = email.MailBody.Replace("[SOMemo]", context.SOInfo.Memo);
                            //    email.MailBody = email.MailBody.Replace("[NowDate]", DateTime.Now.ToShortDateString());
                            //    EmailDA.SendEmail(email);
                            //}
                            #endregion

                            scope.Complete();
                        }

                        return(BuildPaymentCallbackReturnResult(payTypeSysNo, true));
                    }
                    else
                    {
                        ECommerce.Utility.Logger.WriteLog("返回支付失败", "PayCallback", "CheckPayResult");
                        return(BuildPaymentCallbackReturnResult(payTypeSysNo, false));
                    }
                }
                else
                {
                    //验签失败
                    return(BuildPaymentCallbackReturnResult(payTypeSysNo, false));
                }
            }
            catch (Exception ex)
            {
                //系统异常,写日志
                ECommerce.Utility.Logger.WriteLog(string.Format("系统异常,异常信息:{0}!", ex.ToString()), "PayCallback", "OnlinePayBgCallbackFailure");
                return(BuildPaymentCallbackReturnResult(payTypeSysNo, false));
            }
        }
コード例 #12
0
        public int CreateOrder(int userId, List <ShoppingCartResultSet> shoppingCartItemList, OrderDTO orderDTO, Utilities.Enums.PaymentOption paymentOption,
                               Utilities.Enums.DeliveryOption deliveryOption, string couponCode)
        {
            var          orderid = 0;
            decimal      ordersubTotalInclTax = 0M;
            OrderProduct orderProduct         = new OrderProduct();

            orderProduct.OrderGuid         = Guid.NewGuid();
            orderProduct.BillingAddressId  = orderDTO.BillingAddressId;
            orderProduct.ShippingAddressId = orderDTO.ShippingAddressId;
            orderProduct.CustomerIp        = orderDTO.CustomerIp;
            orderProduct.CustomerId        = orderDTO.CustomerId;
            orderProduct.OrderStatusId     = orderDTO.OrderStatusId;
            orderProduct.PaymentStatusId   = orderDTO.PaymentStatusId;
            orderProduct.PaymentMethod     = (int)paymentOption;
            orderProduct.DeliveryMethod    = (int)deliveryOption;

            orderProduct.OrderShippingCharges = 0;

            orderProduct.OrderDateUtc = DateTime.UtcNow;
            orderProduct.UpdatedOnUtc = DateTime.UtcNow;


            foreach (ShoppingCartResultSet shoppingCartItem in shoppingCartItemList)
            {
                OrderProductItem item = new OrderProductItem();
                item.BranchId      = shoppingCartItem.BranchId;
                item.ProductId     = shoppingCartItem.ProductId;
                item.OrderItemGuid = Guid.NewGuid();
                item.Quantity      = shoppingCartItem.Quantity;
                //Get pricing details.
                // ProductRepository.getPr
                //  item.
                item.UnitPriceInclTax = shoppingCartItem.UnitPrice;
                item.PriceInclTax     = item.UnitPriceInclTax * item.Quantity;

                item.ShippingCharges = shoppingCartItem.AdditionalShippingCharge * item.Quantity;
                item.OrderItemStatus = orderProduct.OrderStatusId;//when creating we will have same status.
                item.SelectedSize    = shoppingCartItem.SelectedSize;

                var currentShoppingCartItem = this.context.ShoppingCartItems.Where(x => x.BranchId == shoppingCartItem.BranchId && x.CustomerId == orderProduct.CustomerId &&
                                                                                   x.ProductId == item.ProductId && x.Quantity == item.Quantity).FirstOrDefault();

                orderProduct.OrderSubtotalInclTax += item.PriceInclTax;
                orderProduct.OrderShippingCharges += item.ShippingCharges ?? 0;

                orderProduct.OrderProductItem.Add(item);
                context.Entry(currentShoppingCartItem).State = EntityState.Deleted;
            }
            //
            orderProduct.OrderDiscount = 0M;
            if (!string.IsNullOrEmpty(couponCode))
            {
                var discountObject = context.Discounts.Where(x => x.CouponCode.ToUpper() == couponCode.ToUpper() &&
                                                             x.StartDateUtc <= DateTime.UtcNow && x.EndDateUtc >= DateTime.UtcNow).FirstOrDefault();
                if (discountObject != null && discountObject.UsePercentage && discountObject.MinOrderValue < orderProduct.OrderSubtotalInclTax)
                {
                    orderProduct.OrderDiscount = (orderProduct.OrderSubtotalInclTax * (discountObject.DiscountPercentage / 100));
                }
                else if (discountObject != null && discountObject.DiscountAmount > 0 && discountObject.MinOrderValue < orderProduct.OrderSubtotalInclTax)
                {
                    orderProduct.OrderDiscount = orderProduct.OrderSubtotalInclTax - discountObject.DiscountAmount;
                }

                if (orderProduct.OrderDiscount > discountObject.MaxDiscountAmount)
                {
                    orderProduct.OrderDiscount = discountObject.MaxDiscountAmount;
                }

                //We should return that the order value is less etc.. Validation to be done seperately.
            }
            //To Change later.

            orderProduct.PaymentMethodAdditionalFee = 0.0M;

            orderProduct.OrderTotal = (orderProduct.OrderSubtotalInclTax + orderProduct.OrderShippingCharges +
                                       orderProduct.PaymentMethodAdditionalFee) - orderProduct.OrderDiscount;

            this.context.Entry(orderProduct).State = EntityState.Added;
            this.context.SaveChanges();
            return(orderProduct.Id);
        }
コード例 #13
0
        /// <summary>
        /// 取得满足优惠券条件的商品总金额
        /// </summary>
        /// <param name="order"></param>
        /// <param name="coupon"></param>
        /// <returns></returns>
        private decimal GetCanCalculateAmount(ref OrderInfo order, CouponInfo coupon)
        {
            List <SOItemInfo> soItemList       = InternalHelper.ConvertToSOItemList(order, false, true);
            List <int>        productSysNoList = new List <int>();

            soItemList.ForEach(f => productSysNoList.Add(f.ProductSysNo));

            //couponProductList:满足条件的商品列表,使用OrderProductItem这个对象来记录,UnitSalePrice是这个商品的价格,UnitQuantity会作为这个商品的总数量
            List <OrderProductItem> couponProductList = new List <OrderProductItem>();

            List <SimpleItemEntity> productList = PromotionDA.GetSimpleItemListBySysNumbers(productSysNoList);

            //主商品
            foreach (OrderItemGroup itemGroup in order.OrderItemGroupList)
            {
                foreach (OrderProductItem item in itemGroup.ProductItemList)
                {
                    SimpleItemEntity product = productList.Find(f => f.ProductSysNo == item.ProductSysNo);
                    if (CheckIsCouponProduct(product, coupon))
                    {
                        OrderProductItem couponProduct = couponProductList.Find(f => f.ProductSysNo == product.ProductSysNo);
                        if (couponProduct == null)
                        {
                            couponProduct = new OrderProductItem();
                            couponProduct.ProductSysNo  = item.ProductSysNo;
                            couponProduct.UnitSalePrice = item.UnitSalePrice;
                            couponProduct.UnitQuantity  = item.UnitQuantity * itemGroup.Quantity;
                            couponProductList.Add(couponProduct);
                        }
                        else
                        {
                            couponProduct.UnitQuantity += item.UnitQuantity * itemGroup.Quantity;
                        }
                    }
                }
            }
            //加购商品
            if (order.PlusPriceItemList != null)
            {
                foreach (OrderGiftItem item in order.PlusPriceItemList)
                {
                    SimpleItemEntity product = productList.Find(f => f.ProductSysNo == item.ProductSysNo);
                    if (CheckIsCouponProduct(product, coupon))
                    {
                        OrderProductItem couponProduct = couponProductList.Find(f => f.ProductSysNo == product.ProductSysNo);
                        if (couponProduct == null)
                        {
                            couponProduct = new OrderProductItem();
                            couponProduct.ProductSysNo  = item.ProductSysNo;
                            couponProduct.UnitSalePrice = item.UnitSalePrice;
                            couponProduct.UnitQuantity  = item.UnitQuantity;
                            couponProductList.Add(couponProduct);
                        }
                        else
                        {
                            couponProduct.UnitQuantity += item.UnitQuantity;
                        }
                    }
                }
            }

            decimal totalAmount = 0.00m;

            foreach (OrderProductItem couponProduct in couponProductList)
            {
                totalAmount += couponProduct.UnitSalePrice * couponProduct.UnitQuantity;
            }

            order.CouponProductList = couponProductList;

            return(totalAmount);
        }
コード例 #14
0
        public void Calculate(ref OrderInfo order)
        {
            order.CouponErrorDesc = string.Empty;
            if (string.IsNullOrWhiteSpace(order.CouponCode))
            {
                return;
            }
            string couponCode = order.CouponCode.ToUpper().Trim();

            #region 1、初次筛选该优惠券号码对于前用户是否能用
            List <CustomerCouponInfo> customerCouponList = PromotionDA.GetCanUsingCouponCodeList(order.Customer.SysNo, order.Customer.CustomerRank);
            CustomerCouponInfo        customerCoupon     = customerCouponList.Find(f => f.CouponCode.ToUpper().Trim() == couponCode);
            if (customerCoupon == null)
            {
                SetCouponError(ref order, LanguageHelper.GetText("您没有此优惠券号码{0}", order.LanguageCode), couponCode);
                return;
            }
            if (customerCoupon.IsExpired)
            {
                SetCouponError(ref order, LanguageHelper.GetText("此优惠券号码{0}已过期", order.LanguageCode), couponCode);
                return;
            }
            if (customerCoupon.CustomerMaxFrequency.HasValue && customerCoupon.UsedCount >= customerCoupon.CustomerMaxFrequency.Value)
            {
                SetCouponError(ref order, LanguageHelper.GetText("您已达到使用优惠券号码{0}的次数上限", order.LanguageCode), couponCode);
                return;
            }

            int totalUsedCount     = 0;
            int CodeTotalUsedCount = 0;
            //用户参与活动的次数
            int CustomerUsedCount = 0;
            //if (customerCoupon.CodeType.Trim().ToUpper() == "C")
            //{
            CodeTotalUsedCount = PromotionDA.GetCouponCodeTotalUsedCount(couponCode);
            //}
            //else
            //{
            //这个是活动的已使用次数
            totalUsedCount    = PromotionDA.GetCouponTotalUsedCount(customerCoupon.CouponSysNo);
            CustomerUsedCount = PromotionDA.GetCustomerCouponNumber(customerCoupon.CouponSysNo, order.Customer.SysNo);
            //}
            if (customerCoupon.WebsiteMaxFrequency.HasValue && CodeTotalUsedCount >= customerCoupon.WebsiteMaxFrequency)
            {
                SetCouponError(ref order, LanguageHelper.GetText("此优惠券号码{0}在全网使用次数已用尽,请使用其他优惠券号码。", order.LanguageCode), couponCode);
                return;
            }
            //if (customerCoupon.WebsiteMaxFrequency.HasValue && totalUsedCount >= customerCoupon.WebsiteMaxFrequency)
            //{
            //    SetCouponError(ref order, LanguageHelper.GetText("此优惠券号码{0}的已达到全网使用次数上限", order.LanguageCode), couponCode);
            //    return;
            //}
            #endregion

            #region 2、获取该优惠券号码对应的优惠券活动所有信息
            CouponInfo coupon        = PromotionDA.GetComboInfoByCouponCode(order.CouponCode);
            var        orderItem     = order.OrderItemGroupList.FirstOrDefault();
            int        merchantSysNo = orderItem == null ? 1 : orderItem.MerchantSysNo;
            string     merchantName  = orderItem == null ? "泰隆" : orderItem.MerchantName;
            if (coupon.MerchantSysNo != merchantSysNo && coupon.MerchantSysNo != 1)
            {
                SetCouponError(ref order, LanguageHelper.GetText(string.Format("该优惠券不是{0}优惠券", merchantName), order.LanguageCode));
                return;
            }
            if (coupon.SaleRulesEx.CustomerMaxFrequency.HasValue && CustomerUsedCount >= coupon.SaleRulesEx.CustomerMaxFrequency.Value)
            //if (coupon.SaleRulesEx.CustomerMaxFrequency.HasValue && customerCoupon.UsedCount >= coupon.SaleRulesEx.CustomerMaxFrequency.Value)
            {
                SetCouponError(ref order, LanguageHelper.GetText("您已达到使用此优惠券活动的次数上限", order.LanguageCode));
                return;
            }
            if (coupon.SaleRulesEx.MaxFrequency.HasValue && totalUsedCount >= coupon.SaleRulesEx.MaxFrequency.Value)
            {
                SetCouponError(ref order, LanguageHelper.GetText("此优惠券活动已达到全网使用次数上限", order.LanguageCode));
                return;
            }


            if (coupon == null)
            {
                SetCouponError(ref order, LanguageHelper.GetText("此优惠券{0}不存在", order.LanguageCode), couponCode);
                return;
            }
            #endregion

            #region 3、详细检查该优惠券号码是否可用
            if (!string.IsNullOrWhiteSpace(coupon.SaleRulesEx.NeedEmailVerification) && coupon.SaleRulesEx.NeedEmailVerification.ToUpper().Trim() == "Y")
            {
                if (order.Customer.IsEmailConfirmed != 1)
                {
                    SetCouponError(ref order, LanguageHelper.GetText("此优惠券要求客户验证了电子邮箱才可使用!", order.LanguageCode));
                    return;
                }
            }
            if (!string.IsNullOrWhiteSpace(coupon.SaleRulesEx.NeedMobileVerification) && coupon.SaleRulesEx.NeedMobileVerification.ToUpper().Trim() == "Y")
            {
                if (order.Customer.IsPhoneValided != 1)
                {
                    SetCouponError(ref order, LanguageHelper.GetText("此优惠券要求客户验证了手机才可使用!", order.LanguageCode));
                    return;
                }
            }
            if (coupon.SaleRulesList.Count > 0 && coupon.SaleRulesList.Exists(f => f.SaleRuleType == CouponSaleRuleType.RelCustomerRank))
            {
                //-1表示不限制
                if (!coupon.SaleRulesList.Exists(f => f.CustomerRank == -1))
                {
                    int customerRank = order.Customer.CustomerRank;
                    if (!coupon.SaleRulesList.Exists(f => f.CustomerRank == customerRank))
                    {
                        SetCouponError(ref order, LanguageHelper.GetText("当前客户不满足此优惠券要求的客户等级!", order.LanguageCode));
                        return;
                    }
                }
            }
            if (coupon.SaleRulesList.Count > 0 && coupon.SaleRulesList.Exists(f => f.SaleRuleType == CouponSaleRuleType.RelArea))
            {
                int  areaID     = order.Contact.AddressAreaID;
                Area area       = PromotionDA.GetAreaBySysNo(areaID);
                int  provinceId = area.ProvinceSysNo.Value;

                if (!coupon.SaleRulesList.Exists(f => f.SaleRuleType == CouponSaleRuleType.RelArea && f.AreaSysNo == provinceId))
                {
                    SetCouponError(ref order, LanguageHelper.GetText("当前客户不满足此优惠券要求的客户地区!", order.LanguageCode));
                    return;
                }
            }


            #endregion

            #region 4、计算该优惠券可以抵扣多少,填充到OrderInfo中
            if (coupon.DiscountRuleList != null && coupon.DiscountRuleList.Count > 0)
            {
                //取得满足优惠券条件的商品总金额
                decimal canCalculateAmount = GetCanCalculateAmount(ref order, coupon);
                if (canCalculateAmount == 0)
                {
                    SetCouponError(ref order, LanguageHelper.GetText("没有满足该优惠券的商品,无法抵扣", order.LanguageCode));
                    return;
                }

                canCalculateAmount = canCalculateAmount - Math.Abs(order.TotalDiscountAmount);

                if (canCalculateAmount < coupon.SaleRulesEx.OrderAmountLimit)
                {
                    SetCouponError(ref order, LanguageHelper.GetText("没有满足该优惠券要求的商品总金额下限{0},无法抵扣", order.LanguageCode), coupon.SaleRulesEx.OrderAmountLimit);
                    return;
                }


                #region 处理订单 折扣金额模式 和 百分比模式
                if (coupon.DiscountRuleList[0].DiscountType == CouponDiscountType.OrderAmountDiscount || coupon.DiscountRuleList[0].DiscountType == CouponDiscountType.OrderAmountPercentage)
                {
                    //获取适合的折扣规则
                    Coupon_DiscountRules curDiscountRule = GetMatchDiscountRule(coupon, canCalculateAmount);
                    if (curDiscountRule == null)
                    {
                        SetCouponError(ref order, LanguageHelper.GetText("订单总金额未达到优惠券要求的最小购买金额,无法抵扣", order.LanguageCode));
                        return;
                    }

                    decimal discount = 0m;
                    if (curDiscountRule.DiscountType == CouponDiscountType.OrderAmountDiscount)
                    {
                        discount = Math.Abs(Math.Round(curDiscountRule.Value, 2));
                    }
                    else
                    {
                        discount = Math.Abs(Math.Round(canCalculateAmount * curDiscountRule.Value, 2));
                    }



                    if (coupon.SaleRulesEx.OrderMaxDiscount.HasValue && coupon.SaleRulesEx.OrderMaxDiscount.Value > 0m)
                    {
                        if (discount > coupon.SaleRulesEx.OrderMaxDiscount.Value)
                        {
                            discount = coupon.SaleRulesEx.OrderMaxDiscount.Value;
                        }
                    }

                    order.CouponCodeSysNo = customerCoupon.CouponCodeSysNo;
                    order.CouponSysNo     = customerCoupon.CouponSysNo;
                    order.CouponName      = customerCoupon.CouponName;
                    order.CouponAmount    = discount;
                    order.CouponErrorDesc = string.Empty;
                }
                #endregion



                #region 处理 一个商品直减模式
                if (coupon.DiscountRuleList[0].DiscountType == CouponDiscountType.ProductPriceDiscount)
                {
                    if (coupon.SaleRulesList == null || coupon.SaleRulesList.Count == 0)
                    {
                        SetCouponError(ref order, LanguageHelper.GetText("没有满足该优惠券的指定商品,无法抵扣", order.LanguageCode));
                        return;
                    }
                    Coupon_SaleRules productSaleRule = coupon.SaleRulesList.Find(f => f.SaleRuleType == CouponSaleRuleType.RelProduct);


                    int discountProductSysNo = productSaleRule.ProductSysNo;

                    int     discountProductCount = 0;
                    decimal productReduce        = 0m;
                    decimal productPrice         = 0.00m;
                    foreach (OrderItemGroup itemGroup in order.OrderItemGroupList)
                    {
                        OrderProductItem item = itemGroup.ProductItemList.Find(f => f.ProductSysNo == discountProductSysNo);
                        if (item != null)
                        {
                            discountProductCount += item.UnitQuantity * itemGroup.Quantity;

                            productPrice = item.UnitSalePrice;
                        }
                    }
                    if (discountProductCount == 0)
                    {
                        SetCouponError(ref order, LanguageHelper.GetText("没有满足该优惠券的指定商品,无法抵扣", order.LanguageCode));
                        return;
                    }

                    if (discountProductCount > coupon.DiscountRuleList[0].Quantity)
                    {
                        discountProductCount = coupon.DiscountRuleList[0].Quantity;
                    }

                    productReduce = coupon.DiscountRuleList[0].Value;
                    if (coupon.DiscountRuleList[0].Value > productPrice)
                    {
                        productReduce = productPrice;
                    }

                    decimal discount = Math.Abs(Math.Round(productReduce * discountProductCount, 2));



                    if (coupon.SaleRulesEx.OrderMaxDiscount.HasValue && coupon.SaleRulesEx.OrderMaxDiscount.Value > 0m)
                    {
                        if (discount > coupon.SaleRulesEx.OrderMaxDiscount.Value)
                        {
                            discount = coupon.SaleRulesEx.OrderMaxDiscount.Value;
                        }
                    }
                    order.CouponCodeSysNo = customerCoupon.CouponCodeSysNo;
                    order.CouponSysNo     = customerCoupon.CouponSysNo;
                    order.CouponName      = customerCoupon.CouponName;
                    order.CouponAmount    = discount;
                    order.CouponErrorDesc = string.Empty;

                    order["Coupon_DiscountProductSysNo"] = discountProductSysNo;
                    order["Coupon_DiscountProductCount"] = discountProductCount;
                }
                #endregion

                #region 处理 一个商品最终售价模式
                if (coupon.DiscountRuleList[0].DiscountType == CouponDiscountType.ProductPriceFinal)
                {
                    if (coupon.SaleRulesList == null || coupon.SaleRulesList.Count == 0)
                    {
                        SetCouponError(ref order, LanguageHelper.GetText("没有满足该优惠券的指定商品,无法抵扣", order.LanguageCode));
                        return;
                    }
                    Coupon_SaleRules productSaleRule = coupon.SaleRulesList.Find(f => f.SaleRuleType == CouponSaleRuleType.RelProduct);


                    int discountProductSysNo = productSaleRule.ProductSysNo;

                    decimal discountProductPrice = 0.00m;
                    int     discountProductCount = 0;
                    foreach (OrderItemGroup itemGroup in order.OrderItemGroupList)
                    {
                        OrderProductItem item = itemGroup.ProductItemList.Find(f => f.ProductSysNo == discountProductSysNo);
                        if (item != null)
                        {
                            discountProductCount += item.UnitQuantity * itemGroup.Quantity;
                            discountProductPrice  = item.UnitSalePrice;
                        }
                    }
                    if (discountProductCount == 0)
                    {
                        SetCouponError(ref order, LanguageHelper.GetText("没有满足该优惠券的指定商品,无法抵扣", order.LanguageCode));
                        return;
                    }
                    if (discountProductCount > coupon.DiscountRuleList[0].Quantity)
                    {
                        discountProductCount = coupon.DiscountRuleList[0].Quantity;
                    }

                    decimal discount = 0m;
                    if (discountProductPrice > coupon.DiscountRuleList[0].Value)
                    {
                        discount = Math.Abs(Math.Round((discountProductPrice - coupon.DiscountRuleList[0].Value) * discountProductCount, 2));
                    }
                    else
                    {
                        SetCouponError(ref order, LanguageHelper.GetText("该优惠券的指定商品已经是优惠券设定的最低价格,无法抵扣", order.LanguageCode));
                        return;
                    }
                    if (coupon.SaleRulesEx.OrderMaxDiscount.HasValue && coupon.SaleRulesEx.OrderMaxDiscount.Value > 0m)
                    {
                        if (discount > coupon.SaleRulesEx.OrderMaxDiscount.Value)
                        {
                            discount = coupon.SaleRulesEx.OrderMaxDiscount.Value;
                        }
                    }
                    order.CouponCodeSysNo = customerCoupon.CouponCodeSysNo;
                    order.CouponSysNo     = customerCoupon.CouponSysNo;
                    order.CouponName      = customerCoupon.CouponName;
                    order.CouponAmount    = discount;
                    order.CouponErrorDesc = string.Empty;

                    order["Coupon_DiscountProductSysNo"] = discountProductSysNo;
                    order["Coupon_DiscountProductCount"] = discountProductCount;
                }
                #endregion

                order["Coupon_DiscountType"] = coupon.DiscountRuleList[0].DiscountType;
            }

            #endregion
        }