1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- # -*- 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()
|