123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139 |
- # -*- coding: utf-8 -*-
- # !/usr/bin/env python
- import logging
- from typing import Any
- from apilib.monetary import RMB
- from apilib.utils_json import json_dumps
- from apps.web.agent.define import AGENT_INCOME_SOURCE
- from apps.web.agent.models import AgentIncomeReport, Agent
- logger = logging.getLogger(__name__)
- def record_agent_income(agentId, source, source_key, amount, detail, date=None, **kwargs):
- # type:(str, str, str, RMB, dict, str, **Any)->bool
- """
- 记录代理商的收入
- :param agentId:
- :param detail:
- :param source:
- :param amount:
- :param date:
- :return:
- """
- try:
- if amount == RMB(0):
- logger.warn('`record_agent_income` agent(id=%s) amount=0 found' % (agentId,))
- return False
- record_id = detail.get('recharge_record_id')
- if not record_id:
- logger.error('no recharge_record_id provided')
- return False
- logger.info('[recordAgentIncome] agent(id={}), amount={}, detail={}, source={}'
- .format(agentId, amount, json_dumps(detail), source))
- transaction_id = 'incr_{}_{}'.format(source, str(record_id))
- success = Agent.prepare_sellet_income(agentId, transaction_id, source, source_key, amount, True)
- if not success:
- logger.error(
- '[recordAgentIncome] duplicate operation({}) or agent<id={}> not exists.'.format(
- transaction_id, agentId))
- return False
- if date:
- AgentIncomeReport(agentId=agentId, source=source, amount=amount, date=date, detail=detail,
- **kwargs).save()
- else:
- AgentIncomeReport(agentId=agentId, source=source, amount=amount, detail=detail, **kwargs).save()
- return Agent.commit_sellet_income(agentId, transaction_id)
- except Exception as e:
- logger.exception(e)
- return False
- def update_agent_income_stats(recordId, agentId, amount):
- """
- 更新代理商的收益报表
- :param recordId:
- :param agentId:
- :param amount:
- :return:
- """
- AgentIncomeReport.get_collection().update_one(
- {'detail.recharge_record_id': recordId, 'agentId': agentId},
- {'$inc': {'amount': amount.mongo_amount}})
- def record_agent_withdraw_fee(agentId, source_key, amount, detail):
- # type:(str, str, RMB, dict)->bool
- """
- 记录代理商旗下经销商的提现手续费差收入
- """
- return record_agent_income(agentId=agentId, source=AGENT_INCOME_SOURCE.DEALER_WITHDRAW_FEE,
- source_key=source_key, amount=amount, detail=detail)
- def record_agent_traffic_card_earning(agentId, source_key, detail):
- # type:(str, str, dict)->bool
- try:
- if 'agent_earning' not in detail:
- logger.error('no earned provided')
- return False
- earned = RMB(detail['agent_earning'])
- if earned <= RMB(0):
- return True
- return record_agent_income(agentId=agentId, source=AGENT_INCOME_SOURCE.DEALER_CARD_FEE,
- source_key=source_key, amount=earned, detail=detail)
- except Exception as e:
- logger.exception(e)
- return False
- def record_agent_api_quota_earning(agentId, source_key, detail):
- # type:(str, str, dict)->bool
- try:
- if 'agent_earning' not in detail:
- logger.error('no earned provided')
- return False
- earned = RMB(detail['agent_earning'])
- if earned <= RMB(0):
- return True
- return record_agent_income(agentId=agentId, source=AGENT_INCOME_SOURCE.DEALER_API_QUOTA,
- source_key=source_key, amount=earned, detail=detail)
- except Exception as e:
- logger.exception(e)
- return False
- def record_agent_disable_ad_earning(agentId, source_key, detail):
- # type:(str, str, dict)->bool
- try:
- if 'agent_earning' not in detail:
- logger.error('no earned provided')
- return False
- earned = RMB(detail['agent_earning'])
- if earned <= RMB(0):
- return True
- return record_agent_income(agentId=agentId, source=AGENT_INCOME_SOURCE.DEALER_DISABLE_AD,
- source_key=source_key, amount=earned, detail=detail)
- except Exception as e:
- logger.exception(e)
- return False
|