私は最初の MLM ソフトウェアを作成し、ダウンラインからポイントを取得する方法をコーディングできたと思いますが、それは再帰を使用しなかった再帰的な問題であり、それがより良いと思われる場合は再帰バージョンにリファクタリングする可能性があります。私たちのシステムでは、ディストリビューターのレベルは i 個のシルバーで測定され、販売される各製品に対してプロモーション/ボーナス/スコア/ポイントがアップラインで機能するため、ボブがアリスのスポンサーであり、アリスが購入した場合、ボブはポイントを獲得しますその購入の銀の数で測定されます。ユーザー クラスにビジネス関数を追加しました。
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
やるべきことは、注文の深さに応じてシルバーのわずか1%です. コードは実際にオーダー ダウンラインの正しい結果を出力しますが、私はまだ広範囲にテストしていません。コードが奇妙に見えると思われるかどうか、モデルが多少複雑/高度であるため、すべてを考えているかどうか疑問に思います。ユーザークラスはwebapp2からのもので、サブクラスを使用できましたが、それを行う時間がなかったので、そこにあるユーザークラスにメソッドを入れただけで、Jinja2のように呼び出すことができます{{user.this_month_non_manager_silver}}
再帰はこれを行う正しい方法かもしれませんが、私の解決策はまだOKではないので、先に進んでこのコードを今のところ保持できますか、それとも受け入れられないと思いますか?
建設的な批判をありがとう。