123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148 |
- # -*- coding: utf-8 -*-
- # !/usr/bin/env python
- import datetime
- import logging
- from dateutil.relativedelta import relativedelta
- from typing import Optional
- from apilib.monetary import RMB
- from apps.web.agent.proxy import record_agent_traffic_card_earning, record_agent_api_quota_earning, \
- record_agent_disable_ad_earning
- from apps.web.dealer.models import DealerRechargeRecord, Dealer
- from apps.web.device.models import Device
- logger = logging.getLogger(__name__)
- def post_pay(record, verifyAccount = False):
- # type: (DealerRechargeRecord, bool)->None
- record.reload()
- if record.is_close:
- logger.warning('{} check close.'.format(repr(record)))
- return
- if record.product == DealerRechargeRecord.ProductType.SimCard:
- post_sim_recharge(record, verifyAccount)
- elif record.product == DealerRechargeRecord.ProductType.ApiCost:
- post_ApiCost_recharge(record, verifyAccount)
- elif record.product == DealerRechargeRecord.ProductType.DisableAd:
- post_disableAd_recharge(record, verifyAccount)
- def post_sim_recharge(record, verifyAccount = False):
- # type: (DealerRechargeRecord, bool)->None
- logger.debug('post recharge devices. record = {}'.format(repr(record)))
- try:
- dealer = Dealer.objects(id = str(record.dealerId)).first() # type: Optional[Dealer]
- for item in record.settleInfo['partition']:
- record_agent_traffic_card_earning(agentId = item['id'],
- source_key = record.withdrawSourceKey,
- detail = {
- 'recharge_record_id': record.id,
- 'name': dealer.nickname,
- 'sum_of_price': RMB.fen_to_yuan(record.totalFee),
- 'agent_earning': RMB.fen_to_yuan(item['earned']),
- 'itemNum': len(record.items)
- })
- except Exception as e:
- logger.exception('save recharge record failure. error = %s; record = %s' % (e, repr(record)))
- dev_no_list = [item['devNo'] for item in record.items]
-
- try:
- Device.get_collection().update_many({'devNo': {'$in': dev_no_list}},
- {'$set': {'simStatus': 'chargedUnupdated'}}, upsert = False)
- except Exception as e:
- logger.exception(e)
-
-
- finally:
- Device.invalid_many_device_cache(dev_no_list)
-
- def post_sim_verify_order(dealer, verify_order, verifyAccount = False):
- for item in verify_order.settleInfo['partition']:
- record_agent_traffic_card_earning(agentId = item['id'],
- source_key = verify_order.withdrawSourceKey,
- detail = {
- 'reconcile': True,
- 'recharge_record_id': verify_order.id,
- 'name': dealer.nickname,
- 'sum_of_price': RMB.fen_to_yuan(verify_order.totalFee),
- 'agent_earning': RMB.fen_to_yuan(item['earned'])
- })
- def post_ApiCost_recharge(record, verifyAccount = False):
- # type: (DealerRechargeRecord, bool)->None
- logger.debug('post recharge devices. record = {}'.format(repr(record)))
- dealer = Dealer.objects(id = str(record.dealerId)).first() # type: Optional[Dealer]
- try:
- for item in record.settleInfo['partition']:
- record_agent_api_quota_earning(agentId = item['id'],
- source_key = record.withdrawSourceKey,
- detail = {
- 'recharge_record_id': record.id,
- 'name': dealer.nickname,
- 'sum_of_price': RMB.fen_to_yuan(record.totalFee),
- 'agent_earning': RMB.fen_to_yuan(item['earned']),
- 'itemNum': len(record.items)
- })
- except Exception as e:
- logger.exception('save recharge record failure. error = %s; record = %s' % (e, repr(record)))
- try:
- for item in record.items:
- dealer.update_api_app(**{'inc__apiDeviceMax': item.get('needQuota', 0)})
- Device.switch_api_mode(item.get('trunOnList', []), isApi = True)
- except Exception as e:
- logger.exception(e)
- def post_disableAd_recharge(record, verifyAccount = False):
- # type: (DealerRechargeRecord, bool)->None
- logger.debug('post recharge devices. record = {}'.format(repr(record)))
- dealer = Dealer.objects(id = str(record.dealerId)).first() # type: Optional[Dealer]
- try:
- for item in record.settleInfo['partition']:
- record_agent_disable_ad_earning(agentId = item['id'],
- source_key = record.withdrawSourceKey,
- detail = {
- 'recharge_record_id': record.id,
- 'name': dealer.nickname,
- 'sum_of_price': RMB.fen_to_yuan(record.totalFee),
- 'agent_earning': RMB.fen_to_yuan(item['earned']),
- 'itemNum': len(record.items)
- })
- except Exception as e:
- logger.exception('save recharge record failure. error = %s; record = %s' % (e, repr(record)))
- try:
- now = datetime.datetime.now()
- for item in record.items:
- dev = Device.objects.filter(logicalCode = item['logicalCode']).first()
- if dev.disableADExpireDate and dev.disableADExpireDate > now:
- dev.disableADExpireDate = dev.disableADExpireDate + relativedelta(months = int(item['cycle']))
- else:
- dev.disableADExpireDate = now + relativedelta(months = int(item['cycle']))
- dev.save()
- Device.invalid_device_cache(dev.devNo)
- except Exception as e:
- logger.exception(e)
|