check_launder_money2.py 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. # coding=utf-8
  2. import csv
  3. import sys
  4. import os
  5. import pandas
  6. import datetime
  7. from collections import OrderedDict
  8. from base import init_env
  9. env = sys.argv[1]
  10. os.environ.setdefault('DJANGO_SETTINGS_MODULE', env)
  11. init_env(interactive=False)
  12. from apps.web.user.models import MyUser, RechargeRecord
  13. from apps.web.dealer.models import Dealer
  14. from apps.web.device.models import Group, Device
  15. from apilib.monetary import RMB
  16. def get_recharge_record():
  17. matchFilters = {
  18. "dateTimeAdded": {
  19. "$gte": datetime.datetime.now() - datetime.timedelta(days=7),
  20. },
  21. "money": {
  22. "$gt": 0
  23. },
  24. "result": RechargeRecord.PayResult.SUCCESS,
  25. }
  26. projectFilters = {
  27. "_id": 1,
  28. "devNo": 1,
  29. "money": 1
  30. }
  31. groupFilters = {
  32. "_id": "$devNo",
  33. "sum_recharge": {"$sum": "$money"},
  34. "recharge_count": {"$sum": 1}
  35. }
  36. renameProject = {
  37. "_id": 0,
  38. "devNo": "$_id",
  39. "recharge": "$sum_recharge",
  40. "count": "$recharge_count"
  41. }
  42. records = RechargeRecord.get_collection().aggregate([
  43. {"$match": matchFilters},
  44. {"$project": projectFilters},
  45. {"$group": groupFilters},
  46. {"$project": renameProject}
  47. ])
  48. for record in records:
  49. yield record
  50. dataList = list()
  51. resList = list()
  52. dealerMap = dict()
  53. def func1():
  54. for item in get_recharge_record():
  55. devNo = item.get("devNo")
  56. if devNo in dealerMap:
  57. dealerName = dealerMap.get(devNo)
  58. else:
  59. try:
  60. dev = Device.get_dev(devNo)
  61. dealer = Dealer.objects.filter(id=dev.get("ownerId")).only("username", "nickname").first()
  62. dealerName = dealer.nickname + "---" + dealer.username
  63. except Exception as e:
  64. dealerName = "不存在的dealerName"
  65. dealerMap[devNo] = dealerName
  66. item.update({"dealerName": dealerName})
  67. resList.append(item)
  68. def func2():
  69. result = dict()
  70. for item in resList:
  71. dealerName = item.get("dealerName")
  72. if dealerName in result:
  73. c = result.get(dealerName)
  74. c.update({
  75. "recharge": c.get("recharge") +float(str(item.get("recharge"))),
  76. "dev": c.get("dev") + 1,
  77. "count": c.get("count") + item.get("count")
  78. })
  79. else:
  80. result[dealerName] = {
  81. "recharge": float(str(item.get("recharge"))),
  82. "dev": 1,
  83. "count": item.get("count")
  84. }
  85. return result
  86. def main():
  87. func1()
  88. for key, value in func2().items():
  89. tempData = [
  90. (u"经销商", key),
  91. (u"有效订单总数", value.get("count")),
  92. (u"产生订单的设备数量", value.get("dev")),
  93. (u"订单充值总金额", value.get("recharge")),
  94. (u"订单设备比例", value.get("count")/(value.get("dev") * 1.0))
  95. ]
  96. dataList.append(OrderedDict(tempData))
  97. dataList.sort(key=lambda x:x.get(u"订单设备比例"))
  98. dataForm = pandas.DataFrame(dataList)
  99. writer = pandas.ExcelWriter(u"/var/www/upload/launderCheck/统计.xlsx")
  100. dataForm.to_excel(writer, sheet_name=u"统计", index=False)
  101. writer.save()
  102. if __name__ == '__main__':
  103. main()