我制作了我的第一个 MLM 软件,我想我设法编写了如何从下线获取积分的代码,即使这是一个递归问题,我没有使用递归,如果看起来更好,我可能会重构为递归版本。使用我们的系统,分销商的级别以银子的数量来衡量,并且对于每个售出的产品,促销/奖金/分数/积分都是在线进行的,因此如果 Bob 是 Alice 的赞助商并且 Alice 进行了购买,那么 Bob 将获得积分以那次购买的银子数量来衡量。我在我的用户类中添加了一个业务功能:
def this_month_non_manager_silver(self):
silver = 0
today = date.today()
timeline = date(today.year, today.month, 1)
downline = User.query(User.sponsor
== self._key).fetch()
distributor = self
while distributor.has_downline():
downline = User.query(User.sponsor == distributor.key).fetch()
for person in downline:
orders = model.Order.all().filter('buyer_id =' , person.key.id()).filter('created >' , timeline).filter('status =', 'PAID').fetch(999999)
for order in orders:
for idx,item in enumerate(order.items):
purchase = model.Item.get_by_id(long(item.id()))
amount = int(order.amounts[idx])
silver = silver + amount*purchase.silver/1000.000
distributor = person
return silver
现在可能要做的只是根据订单的深度对白银进行 %。该代码实际上为订单下线输出了正确的结果,但我尚未对其进行广泛测试,我想知道您是否认为代码看起来很奇怪,以及我是否考虑过所有问题,因为模型有些复杂/高级。用户类来自 webapp2,我可以使用子类,但我没有时间这样做,所以我只是将方法放入那里的用户类,现在我可以从 Jinja2 调用它{{user.this_month_non_manager_silver}}
递归可能是做到这一点的正确方法,但我的解决方案不是还可以吗?我可以继续前进并暂时保留此代码,还是您认为它不可接受?
感谢任何建设性的批评。