123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105 |
- # coding=utf-8
- import datetime
- from base import init_env
- from bson import ObjectId
- from collections import namedtuple, defaultdict
- init_env(True)
- from apilib.monetary import RMB
- from apps.web.dealer.models import Dealer
- from apps.web.dealer.proxy import DealerIncomeProxy
- from apps.web.common.transaction import WithdrawStatus
- from apps.web.common.models import WithdrawRecord
- from apps.web.user.models import RechargeRecord
- RawInfo = namedtuple("RawInfo", ["dealer", "st", "et"])
- def welcome():
- dealerId = raw_input(u"请输入经销商ID(必填):")
- print(u"日期格式如: xxxx-xx-xx")
- startTime = raw_input(u"请输入统计起始时间(回车跳过):") or "2017-01-01"
- endTime = raw_input(u"请输入统计结束时间(回车跳过):") or datetime.datetime.now().strftime("%Y-%m-%d")
- dealer = Dealer.objects.get(id=dealerId)
- st = datetime.datetime.strptime(startTime, "%Y-%m-%d")
- et = datetime.datetime.strptime(endTime, "%Y-%m-%d")
- return RawInfo(dealer=dealer, st=st, et=et)
- def get_recharge_data(rawInfo):
- # type:(RawInfo) -> RechargeRecord
- records = RechargeRecord.objects.filter(
- ownerId=str(rawInfo.dealer.id),
- result="success",
- via__in=["recharge", "chargeCard", "chargeVirtualCard", "cash"]
- )
- if rawInfo.st:
- records = records.filter(
- dateTimeAdded__gte=rawInfo.st,
- )
- if rawInfo.et:
- records = records.filter(
- dateTimeAdded__lt=rawInfo.et
- )
- return records
- def get_withdraw_data(rawInfo):
- # type:(RawInfo) -> WithdrawRecord
- records = WithdrawRecord.objects.filter(
- ownerId=str(rawInfo.dealer.id),
- status=WithdrawStatus.SUCCEEDED
- )
- if rawInfo.st:
- records = records.filter(
- dateTimeAdded__gte=rawInfo.st,
- )
- if rawInfo.et:
- records = records.filter(
- dateTimeAdded__lt=rawInfo.et
- )
- return records
- def get_income_data(rawInfo):
- # type:(RawInfo) -> WithdrawRecord
- records = DealerIncomeProxy.objects.filter(
- dealerIds=rawInfo.dealer.id
- )
- if rawInfo.st:
- records = records.filter(
- dateTimeAdded__gte=rawInfo.st,
- )
- if rawInfo.et:
- records = records.filter(
- dateTimeAdded__lt=rawInfo.et
- )
- return records
- if __name__ == '__main__':
- rawInfo = welcome()
- rechargeRecords = get_recharge_data(rawInfo)
- withdrawRecords = get_withdraw_data(rawInfo)
- incomeRecords = get_income_data(rawInfo)
- rechargeTotal = sum([item.money for item in rechargeRecords], RMB(0))
- print "用户共充值 {}".format(rechargeTotal)
- withdrawTotal = sum([item.amount for item in withdrawRecords], RMB(0))
- print "用户共提现 {}".format(withdrawTotal)
- _, incomeTotal = incomeRecords.sum_and_count('actualAmountMap.%s' % (str(rawInfo.dealer.id)))
- print "共记录收益 {}".format(incomeTotal)
|