# -*- coding: utf-8 -*- # !/usr/bin/env python import datetime from typing import Tuple from dateutil.parser import parse from apps.web.user.models import RechargeRecord def dt_range(date_string): # type:(str)->Tuple[datetime.datetime, datetime.datetime] start = parse(date_string) return start, datetime.datetime.combine(start, datetime.time.max) def cn(unicode_): assert isinstance(unicode_, unicode) return unicode_.encode('gb18030') def mask(df, key, value): return df[df[key] == value] def df_in(df, key, items): return df[df[key].isin(items)] def withdraw_succeeded_mask(df): return mask(df, key = "付款状态", value = "付款成功") def download_alipay_statement(): #: TODO pass def read_alipay_statement(file_name): """ :param file_name: :return: """ #: 跳过支付宝的csv表头注释 #: TODO change file encoding import pandas as pd return pd.read_csv(file_name, skiprows = 2) def reconcile_alipay(file_name, date_str): # type:(str, str)->list """ :param file_name: :param date_str: :return: """ df = mask(df = read_alipay_statement(file_name), key = cn(u'交易状态'), value = cn(u'成功')) start, end = dt_range(date_str) records = RechargeRecord.objects(gateway = 'alipay', result = 'unPay', dateTimeAdded__gte = start, dateTimeAdded__lte = end) df = df[df[cn(u'商户订单号')].isin([str(_.orderNo) for _ in records])] return list(df[cn(u'商户订单号')]) def reset_today_income(): pass