consumerListTest.py 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. # coding=utf-8
  2. import sys
  3. import os
  4. import datetime
  5. import time
  6. from base import init_env
  7. env = sys.argv[1]
  8. os.environ.setdefault('DJANGO_SETTINGS_MODULE', env)
  9. init_env(interactive=False)
  10. from apps.web.user.models import MyUser
  11. from apps.web.agent.models import Agent
  12. from apps.web.device.models import Group
  13. from apilib.utils_datetime import to_datetime
  14. def test(pageSize, pageIndex, sortKey="last_login", sortOrder="des", isNew=False, startTime="2019-11-18", endTime="2019-11-17", searchKey=None):
  15. ownerId = "5b5e96538732d617d228588b"
  16. groupIds = Group.get_group_ids_of_dealer_and_partner(ownerId=ownerId)
  17. # 获取用户默认头像
  18. default_avatar = Agent.get_agent("5b1dfe024864d01678b57990").get("productLogo")
  19. sortFilters = {sortKey: -1 if sortOrder == "des" else 1}
  20. groupFilters = {
  21. "_id": "$openId",
  22. "balance": {"$sum": "$balance"},
  23. "total_recharged": {"$sum": "$total_recharged"},
  24. "total_consumed": {"$sum": "$total_consumed"},
  25. "nickname": {"$first": "$nickname"},
  26. "sex": {"$first": "$sex"},
  27. "avatar": {"$first": "$avatar"},
  28. }
  29. projectFilters = {"_id": 0, "openId": "$_id", "balance": 1, "total_recharged": 1, "total_consumed": 1,
  30. "nickname": 1, "sex": 1, "avatar": 1}
  31. matchFilters = {
  32. "groupId": {"$in": groupIds}
  33. }
  34. if startTime:
  35. startDataTime = to_datetime(startTime + ' 00:00:00', "%Y-%m-%d %H:%M:%S")
  36. now = datetime.datetime.now()
  37. if not endTime:
  38. endDateTime = now + datetime.timedelta(days=1)
  39. else:
  40. endDateTime = to_datetime(endTime, "%Y-%m-%d")
  41. if endDateTime > now:
  42. endDateTime = now
  43. endDateTime = endDateTime + datetime.timedelta(days=1)
  44. if startDataTime >= endDateTime:
  45. endDateTime = startDataTime + datetime.timedelta(days=1)
  46. timeFilters = {
  47. "$gte": startDataTime,
  48. "$lt": endDateTime
  49. }
  50. if isNew:
  51. timeKey = "dateTimeAdded"
  52. else:
  53. timeKey = "last_login"
  54. matchFilters.update({
  55. timeKey: timeFilters
  56. })
  57. if searchKey:
  58. matchFilters.update({
  59. "$or": [
  60. {"openId": {"$regex": "%s" % searchKey}},
  61. {"nickname": {"$regex": "%s" % searchKey}}
  62. ]
  63. })
  64. sTime = time.time()
  65. users = MyUser.get_collection().aggregate([
  66. {"$match": matchFilters},
  67. {"$project": {"_id": 1, "openId": 1, "balance": 1, "total_recharged": 1, "total_consumed": 1, "nickname": 1, "sex": 1, "avatar": 1}},
  68. {"$group": groupFilters},
  69. # {"$project": projectFilters},
  70. # {"$sort": sortFilters},
  71. # {"$skip": (pageIndex - 1) * pageSize},
  72. # {"$limit": pageSize}
  73. ])
  74. # pipeline = [
  75. # {"$match": matchFilters},
  76. # {"$group": groupFilters},
  77. # {"$sort": sortFilters},
  78. # {"$skip": (pageIndex - 1) * pageSize},
  79. # {"$limit": pageSize}
  80. # ]
  81. # from pprint import pprint
  82. # pprint(MyUser._get_db().command("aggregate", "MyUser", pipeline=pipeline, explain=True))
  83. users = list(users)
  84. for user in users:
  85. if not user["avatar"]: user["avatar"] = default_avatar
  86. eTime = time.time()
  87. return eTime - sTime
  88. if __name__ == '__main__':
  89. print test(20, 2)