withdraw.py 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. # -*- coding: utf-8 -*-
  2. # !/usr/bin/env python
  3. import logging
  4. from apilib.monetary import RMB
  5. from apps.web.agent.proxy import record_agent_withdraw_fee
  6. from apps.web.common.transaction.withdraw import WithdrawService, WithdrawRetryService
  7. from apps.web.common.transaction import WithdrawHandler
  8. from apps.web.dealer.models import Dealer
  9. logger = logging.getLogger(__name__)
  10. class DealerWithdrawHandler(WithdrawHandler):
  11. def on_approve(self):
  12. dealer = self.payee # type: Dealer
  13. try:
  14. _map = {}
  15. for item in self.record.partition:
  16. agent_id = item['id']
  17. if agent_id in _map:
  18. _map[agent_id]['earned'] += RMB(item['earned'])
  19. else:
  20. _map[agent_id] = {
  21. 'earned': RMB(item['earned'])
  22. }
  23. for agent_id, item in _map.iteritems():
  24. earned = item['earned']
  25. if earned <= RMB(0):
  26. continue
  27. detail = {
  28. 'recharge_record_id': self.record.id,
  29. 'name': dealer.nickname,
  30. 'sum_of_price': self.record.serviceFee,
  31. 'withdrawAmount': self.record.amount,
  32. 'withdrawFeeRatio': self.record.withdrawFeeRatio
  33. }
  34. record_agent_withdraw_fee(agentId = agent_id, source_key = self.record.withdrawSourceKey,
  35. amount = earned, detail = detail)
  36. except Exception as e:
  37. logging.exception(e)
  38. class DealerWithdrawService(WithdrawService):
  39. pass
  40. class DealerWithdrawRetryService(WithdrawRetryService):
  41. def get_payee(self):
  42. return Dealer.objects(id = self.record.ownerId).get()