123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- # coding=utf-8
- import sys
- import os
- import datetime
- import time
- from base import init_env
- env = sys.argv[1]
- os.environ.setdefault('DJANGO_SETTINGS_MODULE', env)
- init_env(interactive=False)
- from apps.web.user.models import MyUser
- from apps.web.agent.models import Agent
- from apps.web.device.models import Group
- from apilib.utils_datetime import to_datetime
- def test(pageSize, pageIndex, sortKey="last_login", sortOrder="des", isNew=False, startTime="2019-11-18", endTime="2019-11-17", searchKey=None):
- ownerId = "5b5e96538732d617d228588b"
- groupIds = Group.get_group_ids_of_dealer_and_partner(ownerId=ownerId)
- # 获取用户默认头像
- default_avatar = Agent.get_agent("5b1dfe024864d01678b57990").get("productLogo")
- sortFilters = {sortKey: -1 if sortOrder == "des" else 1}
- groupFilters = {
- "_id": "$openId",
- "balance": {"$sum": "$balance"},
- "total_recharged": {"$sum": "$total_recharged"},
- "total_consumed": {"$sum": "$total_consumed"},
- "nickname": {"$first": "$nickname"},
- "sex": {"$first": "$sex"},
- "avatar": {"$first": "$avatar"},
- }
- projectFilters = {"_id": 0, "openId": "$_id", "balance": 1, "total_recharged": 1, "total_consumed": 1,
- "nickname": 1, "sex": 1, "avatar": 1}
- matchFilters = {
- "groupId": {"$in": groupIds}
- }
- if startTime:
- startDataTime = to_datetime(startTime + ' 00:00:00', "%Y-%m-%d %H:%M:%S")
- now = datetime.datetime.now()
- if not endTime:
- endDateTime = now + datetime.timedelta(days=1)
- else:
- endDateTime = to_datetime(endTime, "%Y-%m-%d")
- if endDateTime > now:
- endDateTime = now
- endDateTime = endDateTime + datetime.timedelta(days=1)
- if startDataTime >= endDateTime:
- endDateTime = startDataTime + datetime.timedelta(days=1)
- timeFilters = {
- "$gte": startDataTime,
- "$lt": endDateTime
- }
- if isNew:
- timeKey = "dateTimeAdded"
- else:
- timeKey = "last_login"
- matchFilters.update({
- timeKey: timeFilters
- })
- if searchKey:
- matchFilters.update({
- "$or": [
- {"openId": {"$regex": "%s" % searchKey}},
- {"nickname": {"$regex": "%s" % searchKey}}
- ]
- })
- sTime = time.time()
- users = MyUser.get_collection().aggregate([
- {"$match": matchFilters},
- {"$project": {"_id": 1, "openId": 1, "balance": 1, "total_recharged": 1, "total_consumed": 1, "nickname": 1, "sex": 1, "avatar": 1}},
- {"$group": groupFilters},
- # {"$project": projectFilters},
- # {"$sort": sortFilters},
- # {"$skip": (pageIndex - 1) * pageSize},
- # {"$limit": pageSize}
- ])
- # pipeline = [
- # {"$match": matchFilters},
- # {"$group": groupFilters},
- # {"$sort": sortFilters},
- # {"$skip": (pageIndex - 1) * pageSize},
- # {"$limit": pageSize}
- # ]
- # from pprint import pprint
- # pprint(MyUser._get_db().command("aggregate", "MyUser", pipeline=pipeline, explain=True))
- users = list(users)
- for user in users:
- if not user["avatar"]: user["avatar"] = default_avatar
- eTime = time.time()
- return eTime - sTime
- if __name__ == '__main__':
- print test(20, 2)
|