asp.net 网络商务4.5:计算购物车总额以创建基于客户角色的折扣

jxct1oxe  于 2022-12-15  发布在  .NET
关注(0)|答案(1)|浏览(96)

我正在使用NopCommerce v 4.5.3.我需要建立一个插件,可以创建折扣,以配置某些角色的免费送货超过指定的价格购买.免费送货以上100元的角色A,200元的角色B等。
这是要通过创建一个新的折扣,分配给免费送货作为折扣类型,给予100%的折扣(免费送货).并在需求,通过设置第一个需求组作为必需的客户角色作为角色,并通过设置第二个需求组作为客户支出必须是X(这是一个我正在建设)
There's a free plugin that sort of matches my requirement.
它从订单表中计算客户的总订单(过去的订单),然后让用户为客户设置免费送货。这里使用的逻辑是:

var orders = await _orderService.SearchOrdersAsync(request.Store.Id,
                customerId: request.Customer.Id,
                osIds: new List<int> { (int)OrderStatus.Complete });
            var spentAmount = orders.Sum(o => o.OrderTotal);
                if (spentAmount > spentAmountRequirement)

在这种情况下,他们可以快速完成,因为他们只需要使用SearchOrdersAsync()方法对一个表中的值求和。
但是对于购物车,我需要首先使用客户ID过滤购物车表,然后从购物车中获取所需的productID,最后从产品表中汇总其价格。
它的查询:

select sum(Price) from dbo.Product
where id in (
select ProductId
from dbo.ShoppingCartItem
where CustomerId = 2047)
--Result:1800

只有在获得产品ID之后,我才能转到Product表并过滤它们以汇总其价格。
我试过使用GetShoppingCartAsync()方法,但我无法使用任何列表来存储客户购物车中的多个产品,因为GetShoppingCartAsync()的定义中没有列表,而用于订单的SearchOrdersAsync()有一个名为osIds的列表。

mbjcgjjk

mbjcgjjk1#

GetShoppingCartAsync()方法返回IList<ShoppingCartItem>ShoppingCartItem实体包含购物车项目的ProductId。由于nopCommerce不给予按ProductId筛选购物车项目的功能,并且您需要产品的原始价格,因此可以执行以下操作:
首先获取所有ProductId

var productIds = (await _shoppingCartService.GetShoppingCartAsync(customer, ShoppingCartType.ShoppingCart, storeId: store.Id)).Select(sc => sc.ProductId);

合计产品的价格

var productPrice = (await _productService.GetProductsByIdsAsync(pIds.ToArray())).Sum(p => p.Price);

productPrice将返回客户购物车中的产品总数。

相关问题