123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- # -*- coding: utf-8 -*-
- # !/usr/bin/env python
- """
- 生成报表
- """
- import datetime
- import getopt
- import sys
- from bson import ObjectId
- try:
- options, args = getopt.getopt(sys.argv[1:], 'l:d:e:t:o:',
- ['log=', 'debug=', 'env=', 'date=', 'ownerId='])
- except getopt.GetoptError as e:
- print(str(e))
- sys.exit()
- log_file = None
- platform_env = 'testing'
- report_date = (datetime.datetime.now() - datetime.timedelta(days = 1)).strftime("%Y-%m-%d")
- ownerId = None
- for name, value in options:
- if name in ('-l', '--log'):
- log_file = value
- if name in ('-e', '--env'):
- platform_env = value
- if name in ('-t', '--date'):
- report_date = datetime.datetime.strptime(value, "%Y-%m-%d").strftime("%Y-%m-%d")
- if name in ('-o', '--ownerId'):
- ownerId = value
- import os
- os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'configs.{env}'.format(env = platform_env))
- from base import init_env, setup_logger, get_logger
- init_env(interactive = False)
- if log_file:
- logger = setup_logger(filename = log_file, namespace = __name__)
- else:
- logger = get_logger(__name__)
- from apps.web.dealer.models import Dealer
- from apps.web.device.models import Group, Device
- from apps import reportCache
- def check_offline_coins(dealersWithGroupIds, stringDate, update = True):
- from apps.web.core.accounting import devCoinTmpl, groupCoinTmpl
- mc = reportCache
- dealerCoinDict = {}
- groupCoinDict = {}
- for ownerId, groupIds in dealersWithGroupIds.items():
- ownerCoins = 0
- for groupId in list(set(groupIds)):
- devNos = Device.get_devNos_by_group([groupId])
- keys = [devCoinTmpl(devNo, stringDate) for devNo in devNos]
- valueDict = mc.get_multi(keys)
- recalc_group_coins = 0
- for devNo, coins in valueDict.iteritems():
- recalc_group_coins = recalc_group_coins + int(float(coins))
- mc_group_conins = mc.get(groupCoinTmpl(groupId, stringDate))
- if mc_group_conins:
- real_group_coins = int(mc_group_conins)
- else:
- real_group_coins = 0
- if real_group_coins != recalc_group_coins:
- logger.error(
- 'groupId = {}, real = {}, recalc = {}'.format(groupId, real_group_coins, recalc_group_coins))
- else:
- logger.debug('groupId = {}, coins = {}'.format(groupId, real_group_coins))
- if ownerId:
- dealers = Dealer.get_collection().find({'_id': ObjectId(ownerId)}, {'_id': 1})
- else:
- dealers = Dealer.get_collection().find({}, {'_id': 1})
- dealers = [dealer for dealer in dealers]
- dealersWithGroupIds = {}
- for dealer in dealers:
- dealerId = str(dealer['_id'])
- dealersWithGroupIds[dealerId] = Group.get_group_ids_of_dealer(dealerId)
- devDict = {dealerId: Device.get_devNos_by_group(groupIds) for dealerId, groupIds in dealersWithGroupIds.items()}
- check_offline_coins(dealersWithGroupIds, report_date)
|