123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- # coding=utf-8
- import csv
- import sys
- import os
- import pandas
- import datetime
- from collections import OrderedDict
- 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, RechargeRecord
- from apps.web.dealer.models import Dealer
- from apps.web.device.models import Group, Device
- from apilib.monetary import RMB
- def get_recharge_record():
- matchFilters = {
- "dateTimeAdded": {
- "$gte": datetime.datetime.now() - datetime.timedelta(days=7),
- },
- "money": {
- "$gt": 0
- },
- "result": RechargeRecord.PayResult.SUCCESS,
- }
- projectFilters = {
- "_id": 1,
- "devNo": 1,
- "money": 1
- }
- groupFilters = {
- "_id": "$devNo",
- "sum_recharge": {"$sum": "$money"},
- "recharge_count": {"$sum": 1}
- }
- renameProject = {
- "_id": 0,
- "devNo": "$_id",
- "recharge": "$sum_recharge",
- "count": "$recharge_count"
- }
- records = RechargeRecord.get_collection().aggregate([
- {"$match": matchFilters},
- {"$project": projectFilters},
- {"$group": groupFilters},
- {"$project": renameProject}
- ])
- for record in records:
- yield record
- dataList = list()
- resList = list()
- dealerMap = dict()
- def func1():
- for item in get_recharge_record():
- devNo = item.get("devNo")
- if devNo in dealerMap:
- dealerName = dealerMap.get(devNo)
- else:
- try:
- dev = Device.get_dev(devNo)
- dealer = Dealer.objects.filter(id=dev.get("ownerId")).only("username", "nickname").first()
- dealerName = dealer.nickname + "---" + dealer.username
- except Exception as e:
- dealerName = "不存在的dealerName"
- dealerMap[devNo] = dealerName
- item.update({"dealerName": dealerName})
- resList.append(item)
- def func2():
- result = dict()
- for item in resList:
- dealerName = item.get("dealerName")
- if dealerName in result:
- c = result.get(dealerName)
- c.update({
- "recharge": c.get("recharge") +float(str(item.get("recharge"))),
- "dev": c.get("dev") + 1,
- "count": c.get("count") + item.get("count")
- })
- else:
- result[dealerName] = {
- "recharge": float(str(item.get("recharge"))),
- "dev": 1,
- "count": item.get("count")
- }
- return result
- def main():
- func1()
- for key, value in func2().items():
- tempData = [
- (u"经销商", key),
- (u"有效订单总数", value.get("count")),
- (u"产生订单的设备数量", value.get("dev")),
- (u"订单充值总金额", value.get("recharge")),
- (u"订单设备比例", value.get("count")/(value.get("dev") * 1.0))
- ]
- dataList.append(OrderedDict(tempData))
- dataList.sort(key=lambda x:x.get(u"订单设备比例"))
- dataForm = pandas.DataFrame(dataList)
- writer = pandas.ExcelWriter(u"/var/www/upload/launderCheck/统计.xlsx")
- dataForm.to_excel(writer, sheet_name=u"统计", index=False)
- writer.save()
- if __name__ == '__main__':
- main()
|