# coding=utf-8 import csv import datetime from base import init_env init_env(True) from apps.web.user.models import RechargeRecord, MyUser, ConsumeRecord LEFT_TIME = datetime.datetime.strptime("2020-09-28 07:00:00", "%Y-%m-%d %H:%M:%S") RIGHT_TIME = datetime.datetime.strptime("2020-09-28 18:00:00", "%Y-%m-%d %H:%M:%S") DEALER_ID = None REFUND = False RESULT = "success" VIA = ["recharge"] def get_record(): records = RechargeRecord.objects.filter( dateTimeAdded__gte=LEFT_TIME, dateTimeAdded__lte=RIGHT_TIME, ownerId=DEALER_ID, result=RESULT, via__in=VIA ) return records def record_to_dict(record): GATEWAY_MAP = { "alipay": u"支付宝", "wechat": u"微信" } return { "openId": record.openId, "logicalCode": record.logicalCode, "groupId": record.groupId, "money": record.money.mongo_amount, "coins": record.coins.mongo_amount, "dateTimeAdded": record.dateTimeAdded.strftime("%Y-%m-%d %H:%M:%S"), "gateWay": GATEWAY_MAP.get(record.gateway, u"其他途径") } def get_consume_record(startKey): """ 获取消费订单 :param startKey: :return: """ consumeRecord = ConsumeRecord.objects.filter(startKey=startKey).first() return consumeRecord def is_user_consume_success(consumeRecord): if not consumeRecord: return True return consumeRecord.isNormal def write_record_to_csv(): records = get_record() dataLis = list() for record in records: consumeRecord = get_consume_record(record.attachParas.get("startKey")) isNormal = is_user_consume_success(consumeRecord) if not isNormal: continue recordData = record_to_dict(record) user = MyUser.objects.filter(openId=recordData.get("openId"), groupId=recordData.get("groupId")).first() startTime = datetime.datetime.strptime(recordData.get("dateTimeAdded"), "%Y-%m-%d %H:%M:%S") endTime = consumeRecord.dateTimeAdded seconds = (endTime-startTime).seconds dataLis.append({ "username": user.nickname, "openId": user.openId, "money": recordData.get("money"), "coins": recordData.get("coins"), "dateTimeAdded": recordData.get("dateTimeAdded"), "logicalCode": recordData.get("logicalCode"), "gateWay": recordData.get("gateWay"), "needRefund": int(not isNormal), "startTime": consumeRecord.dateTimeAdded.strftime("%Y-%m-%d %H:%M:%S"), "seconds": seconds }) with open("zhuxing_{}.csv".format(DEALER_ID), "w") as f: headers = dataLis[0].keys() w = csv.DictWriter(f, fieldnames=headers) w.writeheader() w.writerows(dataLis) def run(): write_record_to_csv() if __name__ == '__main__': res = raw_input(u"当前是否执行退款:{}\n".format(REFUND)) assert res == "yes", u"执行结束" run()