我们的业务目前有一个在线商店,最近我们一直向我们的客户提供免费特价商品。现在,我们只是展示特价并向买家发出通知,说明我们会在结账后将额外的免费物品添加到订单中。当然,自动完成整个过程会很不错。
我一直在考虑一些想法,主要是创建一个折扣模型(我在这种情况下使用Django,但这更像是一个逻辑问题)并且拥有该模型有各种各样的标志和产品列表所以我可以像这样创建一个实例:
Discount(
description="Get one free pair of bands when you buy two pairs of shoes.",
valid_products=[BigProductA, BigProductB],
received_products=[FreebieProductA, FreebieProductB],
special_in_intervals=2, # Whenever the user buys 2, give one for free
)
这种逻辑起作用。然后,我可以看一下购物车中的内容,并根据模型中的现有折扣进行测试,看看它们是否适用于任何内容。这个问题的最大问题是它会变得非常混乱,特别是如果你有多个特价,我只是觉得它没有太好用。
不幸的是,这对我来说真的是最好的想法。所以,我来问你们:你认为最好的方法是什么?我不是在寻找代码,只是在寻找一些逻辑和方法。 :)
提前致谢!
答案 0 :(得分:2)
欢迎来到地狱。停留片刻。 ;) Ahem。
折扣是一团糟,所以你不得不与他们合作感到羞涩并不奇怪。从设计的角度来看,测试应该是Discount
实例的一部分,即应该有appliesTo(cart)
方法和apply(cart)
方法。第一个告诉你是否适用折扣,第二个实际应用折扣。我建议apply()
方法不会更改购物车的“用户部分”,而是修改额外的字段,这样您就可以轻松重置购物车(放弃所有折扣)并再次运行该流程。
通过这种方式,您可以干净地实施最常出现的两种折扣:“购买Y时免费获取X”,“购买Y $$$时获得X%折扣”。由于您不更改原始数字,因此您可以轻松应用多个折扣和折扣。
我还建议用大量的单元测试来支持这一点,以确保整个事情的行为符合您的预期。否则下一个折扣可能是你的最后一个。 :)
答案 1 :(得分:0)
我不安静得到问题 - 但如果你选择DISTINCT(我在SQL中写“伪逻辑”)所有与汽车中的物品相匹配的免费物品,然后如果你只想给一个或者他们中的一个 - SELECT TOP(n)来自tblFREE的DISTINCT,其中freebeid in(从tbl itemsfreebe中选择freebdid,其中的项目在哪里(从CART中选择项目**** Freebe givaway LOGIC ***))
freebe赠品逻辑是应该始终评估为真或假的通用占位符:
喜欢哪里(从购物车中选择计数(*)> 2) 所以,如果逻辑有效 - 你将获得列表中的项目,如果没有 - 你什么也得不到。
你可以将这个逻辑移到你的代码中,只运行数据库中“查询”的第一部分......
逻辑可以与AND或OR一起用于其他逻辑....
一旦用户接受了优惠 - 您将列表添加到购物车,并且应该标记应用折扣/免费赠送的标志 - 所以它不会发生两次......
我想知道这对SQL语言来说比说出来更容易: - )
我希望针对你的问题......