dealerAccountStats.py 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. # coding=utf-8
  2. import datetime
  3. from base import init_env
  4. from bson import ObjectId
  5. from collections import namedtuple, defaultdict
  6. init_env(True)
  7. from apilib.monetary import RMB
  8. from apps.web.dealer.models import Dealer
  9. from apps.web.dealer.proxy import DealerIncomeProxy
  10. from apps.web.common.transaction import WithdrawStatus
  11. from apps.web.common.models import WithdrawRecord
  12. from apps.web.user.models import RechargeRecord
  13. RawInfo = namedtuple("RawInfo", ["dealer", "st", "et"])
  14. def welcome():
  15. dealerId = raw_input(u"请输入经销商ID(必填):")
  16. print(u"日期格式如: xxxx-xx-xx")
  17. startTime = raw_input(u"请输入统计起始时间(回车跳过):") or "2017-01-01"
  18. endTime = raw_input(u"请输入统计结束时间(回车跳过):") or datetime.datetime.now().strftime("%Y-%m-%d")
  19. dealer = Dealer.objects.get(id=dealerId)
  20. st = datetime.datetime.strptime(startTime, "%Y-%m-%d")
  21. et = datetime.datetime.strptime(endTime, "%Y-%m-%d")
  22. return RawInfo(dealer=dealer, st=st, et=et)
  23. def get_recharge_data(rawInfo):
  24. # type:(RawInfo) -> RechargeRecord
  25. records = RechargeRecord.objects.filter(
  26. ownerId=str(rawInfo.dealer.id),
  27. result="success",
  28. via__in=["recharge", "chargeCard", "chargeVirtualCard", "cash"]
  29. )
  30. if rawInfo.st:
  31. records = records.filter(
  32. dateTimeAdded__gte=rawInfo.st,
  33. )
  34. if rawInfo.et:
  35. records = records.filter(
  36. dateTimeAdded__lt=rawInfo.et
  37. )
  38. return records
  39. def get_withdraw_data(rawInfo):
  40. # type:(RawInfo) -> WithdrawRecord
  41. records = WithdrawRecord.objects.filter(
  42. ownerId=str(rawInfo.dealer.id),
  43. status=WithdrawStatus.SUCCEEDED
  44. )
  45. if rawInfo.st:
  46. records = records.filter(
  47. dateTimeAdded__gte=rawInfo.st,
  48. )
  49. if rawInfo.et:
  50. records = records.filter(
  51. dateTimeAdded__lt=rawInfo.et
  52. )
  53. return records
  54. def get_income_data(rawInfo):
  55. # type:(RawInfo) -> WithdrawRecord
  56. records = DealerIncomeProxy.objects.filter(
  57. dealerIds=rawInfo.dealer.id
  58. )
  59. if rawInfo.st:
  60. records = records.filter(
  61. dateTimeAdded__gte=rawInfo.st,
  62. )
  63. if rawInfo.et:
  64. records = records.filter(
  65. dateTimeAdded__lt=rawInfo.et
  66. )
  67. return records
  68. if __name__ == '__main__':
  69. rawInfo = welcome()
  70. rechargeRecords = get_recharge_data(rawInfo)
  71. withdrawRecords = get_withdraw_data(rawInfo)
  72. incomeRecords = get_income_data(rawInfo)
  73. rechargeTotal = sum([item.money for item in rechargeRecords], RMB(0))
  74. print "用户共充值 {}".format(rechargeTotal)
  75. withdrawTotal = sum([item.amount for item in withdrawRecords], RMB(0))
  76. print "用户共提现 {}".format(withdrawTotal)
  77. _, incomeTotal = incomeRecords.sum_and_count('actualAmountMap.%s' % (str(rawInfo.dealer.id)))
  78. print "共记录收益 {}".format(incomeTotal)