123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- # -*- coding: utf-8 -*-
- #!/usr/bin/env python
- #: 升级用户模型
- #: 为提升`用户管理`模块的检索性能, 每次在用户完成充值|消费后,在记录充值|消费记录之后,应增加total_recharged|total_consumed字段
- #: 为将旧数据兼容,这里做处理
- import os
- import sys
- import datetime
- #: current_dir - 2
- PROJECT_ROOT = os.path.join(os.path.abspath(os.path.split(os.path.realpath(__file__))[0] + "/.."), '..')
- sys.path.insert(0, PROJECT_ROOT)
- from script.base import init_env, get_logger
- init_env(interactive=True)
- from apps.web.user.models import RechargeRecord, ConsumeRecord, MyUser
- from apps.web.device.models import Group
- from apilib.utils_mongo import BulkHandler
- logger = get_logger(__name__)
- def insert_user_total_consumed_and_total_recharged():
- groups = Group.objects()
- users = MyUser.objects()
- start_time = datetime.datetime.now()
- user_bulk_handler = BulkHandler(MyUser.get_collection())
- for group in groups:
- groupId = str(group.id)
- for index, user in enumerate(users(groupId=groupId)):
- logger.info(u'No[%s] updating user(%s)' % (index+1, user.openId,))
- total_recharged_amount = float(sum( r.money for r in RechargeRecord.objects(openId=user.openId,
- groupId=groupId,
- via='recharge',
- result='success')))
- total_consumed_amount = \
- float(
- sum( r.coin for r in ConsumeRecord.objects(openId=user.openId, groupId=groupId, isNormal=True) ))
- user_bulk_handler.update(query_dict={
- 'groupId': user.groupId,
- 'openId': user.openId
- },
- update_dict={
- '$set':{
- 'total_recharged': total_recharged_amount,
- 'total_consumed': total_consumed_amount
- }})
- logger.info('start bulk update')
- result = user_bulk_handler.execute()
- if result['success'] == 0:
- logger.error('exception = %s' % result['info'])
- logger.info('finished, time cost=%s' % (datetime.datetime.now() - start_time,))
- insert_user_total_consumed_and_total_recharged()
|