read_put_coin_events.py 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. # -*- coding: utf-8 -*-
  2. #!/usr/bin/env python
  3. import os
  4. from os.path import abspath
  5. import sys
  6. import datetime
  7. import logging
  8. import time
  9. from mongoengine import Q
  10. PROJECT_ROOT = abspath(os.path.split(os.path.realpath(__file__))[0] + "/..")
  11. sys.path.insert(0, PROJECT_ROOT)
  12. from script.base import init_env
  13. init_env(interactive = True)
  14. import daiquiri
  15. import click
  16. from apps.web.device.models import DeviceEvent
  17. from apps import reportCache
  18. from apps.web.core.accounting import devCoinTmpl
  19. daiquiri.setup(
  20. level = logging.DEBUG,
  21. outputs = (
  22. daiquiri.output.Stream(sys.stdout, level = logging.DEBUG),
  23. daiquiri.output.TimedRotatingFile(
  24. 'read-put-coin-events-everything.log',
  25. level = logging.DEBUG,
  26. interval = datetime.timedelta(days = 1))
  27. )
  28. )
  29. logger = logging.getLogger(__name__)
  30. @click.group()
  31. def cli():
  32. """
  33. 处理线下投币
  34. :return:
  35. """
  36. logger.info('cli called')
  37. @cli.command()
  38. @click.option('--calctime', prompt=u'请输入时间', help = u'calc time', type = str)
  39. def read_to_mem(calctime):
  40. begin = datetime.datetime.strptime(calctime + ' 00:00:00', "%Y-%m-%d %H:%M:%S")
  41. end = (begin + datetime.timedelta(days = 1))
  42. beginTimeStamp = int(
  43. time.mktime(begin.timetuple()) * 1000)
  44. endTimeStamp = int(
  45. time.mktime(end.timetuple()) * 1000)
  46. logger.debug('begin: %d; end: %s' % (beginTimeStamp, endTimeStamp))
  47. result = {}
  48. _filter = Q(__raw__ = {'cmd': 205})
  49. _filter &= Q(__raw__ = {'time': {'$gte': beginTimeStamp}})
  50. _filter &= Q(__raw__ = {'time': {'$lt': endTimeStamp}})
  51. for event in DeviceEvent.get_collection().find(_filter.to_query(DeviceEvent),
  52. {'_id': 1, 'devNo': 1, 'money': 1}):
  53. devNo = event['devNo']
  54. money = int(event['money'])
  55. if devNo in result:
  56. result[devNo] += money
  57. else:
  58. result[devNo] = money
  59. for devNo, lineCounts in result.iteritems():
  60. logger.debug('devNo: %s; money: %s' % (devNo, lineCounts))
  61. reportCache.set(devCoinTmpl(devNo, calctime), str(result[devNo]))
  62. logger.info('finished')
  63. if __name__ == '__main__':
  64. cli()