# -*- coding: utf-8 -*- #!/usr/bin/env python import os from os.path import abspath import sys import datetime import logging import time from mongoengine import Q PROJECT_ROOT = abspath(os.path.split(os.path.realpath(__file__))[0] + "/..") sys.path.insert(0, PROJECT_ROOT) from script.base import init_env init_env(interactive = True) import daiquiri import click from apps.web.device.models import DeviceEvent from apps import reportCache from apps.web.core.accounting import devCoinTmpl daiquiri.setup( level = logging.DEBUG, outputs = ( daiquiri.output.Stream(sys.stdout, level = logging.DEBUG), daiquiri.output.TimedRotatingFile( 'read-put-coin-events-everything.log', level = logging.DEBUG, interval = datetime.timedelta(days = 1)) ) ) logger = logging.getLogger(__name__) @click.group() def cli(): """ 处理线下投币 :return: """ logger.info('cli called') @cli.command() @click.option('--calctime', prompt=u'请输入时间', help = u'calc time', type = str) def read_to_mem(calctime): begin = datetime.datetime.strptime(calctime + ' 00:00:00', "%Y-%m-%d %H:%M:%S") end = (begin + datetime.timedelta(days = 1)) beginTimeStamp = int( time.mktime(begin.timetuple()) * 1000) endTimeStamp = int( time.mktime(end.timetuple()) * 1000) logger.debug('begin: %d; end: %s' % (beginTimeStamp, endTimeStamp)) result = {} _filter = Q(__raw__ = {'cmd': 205}) _filter &= Q(__raw__ = {'time': {'$gte': beginTimeStamp}}) _filter &= Q(__raw__ = {'time': {'$lt': endTimeStamp}}) for event in DeviceEvent.get_collection().find(_filter.to_query(DeviceEvent), {'_id': 1, 'devNo': 1, 'money': 1}): devNo = event['devNo'] money = int(event['money']) if devNo in result: result[devNo] += money else: result[devNo] = money for devNo, lineCounts in result.iteritems(): logger.debug('devNo: %s; money: %s' % (devNo, lineCounts)) reportCache.set(devCoinTmpl(devNo, calctime), str(result[devNo])) logger.info('finished') if __name__ == '__main__': cli()