Commit 3629203d authored by Perry_Zhu's avatar Perry_Zhu

Merge remote-tracking branch 'origin/master'

parents b2d294de 10e8a279
......@@ -113,7 +113,7 @@ def proc_save(watch_date):
if __name__ == '__main__':
step = 10000
max_limit = 900000
file_path = u'E:/审计出表/现金贷/1021'
file_path = u'E:/审计出表/现金贷/1107'
file_name = u'现金贷收入确认表'
if not os.path.exists(file_path):
os.makedirs(file_path)
......@@ -134,15 +134,15 @@ if __name__ == '__main__':
df_dunjiao[u'repaid_at'] = pd.to_datetime(df_dunjiao[u'repaid_at']).dt.date
df_ms.loan_id = df_ms.loan_id.astype(str)
db_names = ['all_back_0630', 'all_back_0731', 'all_back_0831', 'new_transaction']
date_report_list = [
[datetime.date(2017, 2, 1), datetime.date(2017, 3, 1), datetime.date(2017, 4, 1), datetime.date(2017, 5, 1),
datetime.date(2017, 6, 1), datetime.date(2017, 7, 1)],
[datetime.date(2017, 8, 1)],
[datetime.date(2017, 9, 1)],
[datetime.date(2017, 10, 1)]]
# db_names = ['new_transaction',]
# date_report_list = [[datetime.date(2017, 10, 1)],]
# db_names = ['all_back_0630', 'all_back_0731', 'all_back_0831', 'new_transaction']
# date_report_list = [
# [datetime.date(2017, 2, 1), datetime.date(2017, 3, 1), datetime.date(2017, 4, 1), datetime.date(2017, 5, 1),
# datetime.date(2017, 6, 1), datetime.date(2017, 7, 1)],
# [datetime.date(2017, 8, 1)],
# [datetime.date(2017, 9, 1)],
# [datetime.date(2017, 10, 1)]]
db_names = ['2017-11-01',]
date_report_list = [[datetime.date(2017, 11, 1)],]
for i in xrange(len(db_names)):
db_name = db_names[i]
date_list = date_report_list[i]
......@@ -150,7 +150,7 @@ if __name__ == '__main__':
# #######################
# 查文件
df_loan = pd.read_csv(os.path.join(file_path, 'all_loan_%s.csv' % db_name), encoding='utf8', low_memory=False)
df_ref = pd.read_csv(os.path.join(file_path, 'all_ref_%s.txt' % db_name), sep='\t', low_memory=False)
df_ref = pd.read_csv(os.path.join(file_path, 'all_ref_%s.csv' % db_name), low_memory=False)
df_ref.columns = [u'ref_id', u'实还总额', u'实还本金', u'实还利息', u'实还服务费(减免后)', u'实还罚息', u'其他收益', u'repaid_at']
df_loan[u'放款日期'] = pd.to_datetime(df_loan[u'放款日期']).dt.date
......
......@@ -32,12 +32,13 @@ if not os.path.exists(file_path):
os.makedirs(file_path)
mysql = sql_engine('audit', 'new_transaction', False).get_engine()
sql_loan_plan = """SELECT
sql_loan_plan = """
SELECT
lm.ref_id,
lm.funding_code,
fc.name 资金方,
lm.loan_id,
lc0912.class 风险等级,
lc.class 风险等级,
lm.contract_loan_amount 本金债权,
date(lm.loan_paid_at) 放款日期,
year(lm.loan_paid_at) 年,
......@@ -50,14 +51,14 @@ sql_loan_plan = """SELECT
rc.approach_name 还款账户,
rr.repay_channel_flow_id 流水号
FROM %s.xjd_repay_plan_repay_record_ref xrprrr
JOIN test_mzh.repay_record_amount_1006 rr
JOIN test_mzh.repay_record_amount rr
ON rr.record_id = xrprrr.record_id AND rr.repay_channel = xrprrr.repay_channel
AND rr.repaid_at >= '%s' AND rr.repaid_at < '%s'
JOIN new_transaction.repay_channel rc ON rc.id = xrprrr.repay_channel
JOIN %s.user_repayment_plan urp ON urp.id = xrprrr.plan_id
JOIN %s.loan_manifest lm ON lm.ref_id = urp.ref_id AND lm.funding_code <> 340
JOIN basic.funding_corp fc ON fc.funding_code = lm.funding_code
JOIN test_mzh.loan_class_contract_1002 lc0912 ON lc0912.ref_id = lm.ref_id;
JOIN test_mzh.loan_class_contract lc ON lc.ref_id = lm.ref_id;
"""
sql_yghs = """
......@@ -66,7 +67,7 @@ SELECT
lm.funding_code,
fc.name 资金方,
lm.loan_id,
lc0912.class 风险等级,
lc.class 风险等级,
lm.contract_loan_amount 本金债权,
date(lm.loan_paid_at) 放款日期,
year(lm.loan_paid_at) 年,
......@@ -82,7 +83,7 @@ FROM new_transaction.yg_huishang_repay_term t
JOIN audit.loan_manifest lm ON lm.ref_id = t.ref_id AND lm.funding_code = 340
AND t.repay_date >= '%s' AND t.repay_date < '%s'
JOIN basic.funding_corp fc ON fc.funding_code = lm.funding_code
JOIN test_mzh.loan_class_contract_1002 lc0912 ON lc0912.ref_id = lm.ref_id;
JOIN test_mzh.loan_class_contract lc ON lc.ref_id = lm.ref_id;
"""
sql_dunjiao = """
......@@ -91,7 +92,7 @@ SELECT
lm.funding_code,
fc.name 资金方,
lm.loan_id,
lc0912.class 风险等级,
lc.class 风险等级,
lm.contract_loan_amount 本金债权,
date(lm.loan_paid_at) 放款日期,
year(lm.loan_paid_at) 年,
......@@ -105,13 +106,13 @@ SELECT
rr.repay_channel_flow_id 流水号
FROM new_transaction.xjd_dunjiao_plan_ref xdpr
JOIN new_transaction.xjd_dunjiao_plan xdp ON xdp.id = xdpr.plan_id
JOIN test_mzh.repay_record_amount_1006 rr
JOIN test_mzh.repay_record_amount rr
ON rr.record_id = xdpr.record_id AND rr.repay_channel = xdpr.repay_channel
AND rr.repaid_at >= '%s' AND rr.repaid_at < '%s'
JOIN new_transaction.repay_channel rc ON rc.id = xdpr.repay_channel
JOIN audit.loan_manifest lm ON lm.ref_id = xdp.ref_id
JOIN basic.funding_corp fc ON fc.funding_code = lm.funding_code
JOIN test_mzh.loan_class_contract_1002 lc0912 ON lc0912.ref_id = lm.ref_id;
JOIN test_mzh.loan_class_contract lc ON lc.ref_id = lm.ref_id;
"""
res_cols = [u'资金方', u'loan_id', u'风险等级', u'本金债权', u'放款日期', u'计提风险金比例', u'计提风险金', u'实还总额', u'实还本金', u'实还利息', u'实还服务费',
u'实还日期', u'还款账户', u'流水号']
......
# -*- encoding: utf8 -*-
"""
目标:
收入确认表-以loan_id为维度比较风险金及客户实还服务费
数据库:
字段名:
loan_id,资金方,风险等级,本金债权,放款日期,计提风险金比例,计提风险金,实还服务费(减免后,含一次性服务费),Asset余额,收入确认金额
注意:
加入一次性服务费,计提风险金比例
每个时间点用对应时间点的备份库,eg:17年6月30号之前的用630数据库,。。。
"""
import os
import datetime
import numpy as np
import pandas as pd
from db_con.db_connect import sql_engine
# ----------------------------------------------
step = 10000
max_limit = 900000
pd.options.mode.chained_assignment = None
pd.set_option('display.float_format', lambda x: '%.5f' % x)
end_date = datetime.date(2017, 11, 1)
file_path = u'E:/审计出表/现金贷/1107'
if not os.path.exists(file_path):
os.makedirs(file_path)
mysql = sql_engine('audit', 'new_transaction').get_engine()
sql_loan_plan = """
SELECT
lm.loan_id,
lm.ref_id,
lc.class 风险等级,
lm.funding_code,
fc.name 资金方,
lm.is_active,
lm.contract_loan_amount 本金债权,
lm.qg_one_time_service_fee,
date(lm.loan_paid_at) 放款日期,
year(lm.loan_paid_at) 年,
month(lm.loan_paid_at) 月
FROM audit.loan_manifest lm
JOIN test_mzh.loan_class_contract lc ON lc.ref_id = lm.ref_id
JOIN basic.funding_corp fc ON fc.funding_code = lm.funding_code
WHERE lm.loan_paid_at < '%s';
"""
sql_ref = """
SELECT
urp.ref_id,
xrprrr.ref_amount 实还总额,
xrprrr.principle - xrprrr.mitigate_principle 实还本金,
xrprrr.interest - xrprrr.mitigate_interest 实还利息,
xrprrr.service_fee - xrprrr.mitigate_service_fee `实还服务费(减免后)`,
xrprrr.punish - xrprrr.mitigate_collection_relief 实还罚息,
xrprrr.remain_income 其他收益,
DATE(rra.repaid_at) `repaid_at`
FROM new_transaction.xjd_repay_plan_repay_record_ref xrprrr
JOIN test_mzh.repay_record_amount rra ON rra.record_id = xrprrr.record_id and rra.repay_channel = xrprrr.repay_channel
JOIN new_transaction.user_repayment_plan urp ON urp.id = xrprrr.plan_id
WHERE rra.repaid_at < '%s';
"""
sql_ms = """
SELECT
t.loan_id,
t.repay_amt 实还总额,
t.repay_principle 实还本金,
t.repay_intrest 实还利息,
t.service_fee `实还服务费(减免后)`,
t.penalty_fee + t.late_fee 滞纳金罚息,
0 其他收益,
date(t.repay_date) `repaid_at`
FROM new_transaction.new_ms_transaction t;
"""
sql_yghs = """
SELECT
t.ref_id,
t.actual_repay_amount 实还总额,
t.actual_principle 实还本金,
t.actual_interest 实还利息,
t.actual_qg_service_fee `实还服务费(减免后)`,
t.actual_qg_overdue_interest + t.actual_fund_overdue_interest 实还罚息,
t.actual_compound_interest 实还复利,
date(t.repay_date) repaid_at
FROM new_transaction.yg_huishang_repay_term t;"""
sql_dunjiao = """
SELECT
xdp.ref_id,
xdpr.ref_amount 趸交服务费,
date(rro.bill_time) repaid_at
FROM
new_transaction.xjd_dunjiao_plan_ref xdpr
JOIN new_transaction.xjd_dunjiao_plan xdp
ON xdp.id = xdpr.plan_id
JOIN new_transaction.repay_record_online rro
ON rro.id = xdpr.record_id
AND rro.pay_approach = xdpr.repay_channel
"""
df_gen = pd.read_sql(sql=sql_loan_plan % (end_date,), con=mysql, chunksize=step)
res = []
for tmp in df_gen:
res.append(tmp)
df_loan = pd.concat(res)
df_loan['qg_one_time_service_fee'].fillna(0, inplace=True)
df_loan.to_csv(os.path.join(file_path, 'all_loan_%s.csv' % end_date), encoding='utf8', index=None)
df_gen = pd.read_sql(sql=sql_ref % (end_date,), con=mysql, chunksize=step)
res = []
for tmp in df_gen:
res.append(tmp)
df_ref = pd.concat(res)
df_ref.to_csv(os.path.join(file_path, 'all_ref_%s.csv' % end_date), encoding='utf8', index=None)
df_ms = pd.read_sql(sql=sql_ms, con=mysql)
df_ms.to_csv(os.path.join(file_path, 'ms.csv'), encoding='utf8', index=None)
df_yghs = pd.read_sql(sql=sql_yghs, con=mysql)
df_yghs.to_csv(os.path.join(file_path, 'yghs.csv'), encoding='utf8', index=None)
df_dunjiao = pd.read_sql(sql=sql_dunjiao, con=mysql)
df_dunjiao.to_csv(os.path.join(file_path, 'dunjiao.csv'), encoding='utf8', index=None)
......@@ -26,7 +26,7 @@ max_limit = 900000
pd.options.mode.chained_assignment = None
pd.set_option('display.float_format', lambda x: '%.5f' % x)
db_names = ['audit_temp']
end_dates = [datetime.date(2017, 7, 1)]
end_dates = [datetime.date(2017, 11, 1)]
file_path = u'E:/审计出表/现金贷/1021'
if not os.path.exists(file_path):
......@@ -65,11 +65,11 @@ SELECT
xrprrr.service_fee - xrprrr.mitigate_service_fee `实还服务费(减免后)`,
xrprrr.punish - xrprrr.mitigate_collection_relief 实还罚息,
xrprrr.remain_income 其他收益,
DATE(xrprrrrd.repaid_at) `repaid_at`
DATE(rra.repaid_at) `repaid_at`
FROM %s.xjd_repay_plan_repay_record_ref_0630 xrprrr
JOIN test_mzh.xjd_repay_plan_repay_record_ref_repay_date_flow xrprrrrd ON xrprrr.id = xrprrrrd.xjd_ref_id
JOIN test_mzh.repay_record_amount rra ON rra.record_id = xrprrr.record_id and rra.repay_channel = xrprrr.repay_channel
JOIN %s.user_repayment_plan urp ON urp.id = xrprrr.plan_id
WHERE xrprrrrd.repaid_at < '%s';
WHERE rra.repaid_at < '%s';
"""
sql_ms = """
SELECT
......
......@@ -15,7 +15,6 @@ from db_con.db_connect import sql_engine
pd.options.mode.chained_assignment = None
pd.set_option('display.float_format', lambda x: '%.5f' % x)
mysql = sql_engine('audit', 'audit').get_engine()
mysql_analysis = sql_engine('analysis', 'analysis_tmp', False).get_engine()
sql_loan = """SELECT
fpd.product_no 产品编号,
......@@ -24,9 +23,9 @@ sql_loan = """SELECT
fpd.loan_time 放款时间,
year(fpd.loan_time) 年,
month(fpd.loan_time) 月
FROM qunaer_new.fund_pay_detail fpd
JOIN qunaer_new.fund_corp fc ON fc.fund_code = fpd.fund_code
AND fpd.status = 1 AND fpd.loan_time >= '2017-08-01';
FROM qunaer_new.pay_detail fpd
JOIN qunaer_new.fund_corp fc ON fc.fund_code = fpd.fund_code and fpd.fund_code <> 1
AND fpd.status = 1 AND fpd.loan_time >= '2017-08-01' and fpd.loan_time < '2017-11-01';
"""
sql_ref = """SELECT
......@@ -35,7 +34,7 @@ sql_ref = """SELECT
rd.repay_fee_amount 实还服务费,
rd.repay_time 还款时间
FROM qunaer_new.repay_detail rd
WHERE rd.fund_code <> 1 AND rd.repay_time >= '2017-08-01'
WHERE rd.fund_code <> 1 AND rd.repay_time >= '2017-08-01' and rd.repay_time < '2017-11-01'
"""
sql_tui = """SELECT
......@@ -44,11 +43,11 @@ sql_tui = """SELECT
-refund_principle 退款服务费,
refund_time 退款时间
FROM qunaer_new.refund_detail
WHERE fund_code != 1 AND refund_time >= '2017-08-01'
WHERE fund_code <> 1 AND refund_time >= '2017-08-01' AND refund_time < '2017-11-01'
"""
sql_class = """
SELECT ref_id 产品编号, class 风险等级 FROM analysis_tmp.nk_bt_order_all_0930 WHERE ref_id IN {}
SELECT ref_id 产品编号, class 风险等级 FROM test_mzh.bt_all_class WHERE ref_id IN {}
"""
sql_ratio = """
......@@ -77,7 +76,7 @@ step = 5000
ref_ids = tuple(df_loan['产品编号'].astype(str).unique())
res = []
for i in xrange(0, len(ref_ids), step):
tmp = pd.read_sql(sql=sql_class.format(str(ref_ids[i:i + step]).replace(',)', ')')), con=mysql_analysis)
tmp = pd.read_sql(sql=sql_class.format(str(ref_ids[i:i + step]).replace(',)', ')')), con=mysql)
res.append(tmp)
df_class = pd.concat(res)
df_class.drop_duplicates(['产品编号'], inplace=True)
......@@ -88,8 +87,8 @@ print(tuple(df_loan.loc[df_loan['风险等级'].isnull(), '产品编号'].astype
df_loan = pd.merge(df_loan, df_ratio, on=['风险等级', '年', '月'])
df_loan['计提风险金'] = 0
view_dates = [datetime.date(2017, 9, 1), datetime.date(2017, 10, 1)]
file_path = 'E:/审计出表/白条/收入确认表'
view_dates = [datetime.date(2017, 9, 1), datetime.date(2017, 10, 1), datetime.date(2017, 11, 1)]
file_path = 'E:/审计出表/白条/收入确认表/1108'
res_sum = []
for v_date in view_dates:
last_day = v_date + datetime.timedelta(days=-1)
......
......@@ -15,7 +15,6 @@ from db_con.db_connect import sql_engine
pd.options.mode.chained_assignment = None
pd.set_option('display.float_format', lambda x: '%.5f' % x)
mysql = sql_engine('audit', 'audit', False).get_engine()
mysql_analysis = sql_engine('analysis', 'analysis_tmp', False).get_engine()
# todo: is_active = -2 的订单,按哪个时间来关联风险金比例
sql_loan = """
......@@ -24,27 +23,15 @@ SELECT
bo.ref_id,
fc.fund_name 资金方,
bo.loan_paid_at 放款时间,
case bo.is_active when 1 then bo.loan_paid_at when -2 then bo.train_cancel_at end train_cancel_at,
year(bo.loan_paid_at) 年,
month(bo.loan_paid_at) 月,
bo.funding_loan_amount 放款金额,
bo.is_active
FROM baitiao_audit.baitiao_order bo
JOIN baitiao_audit.fund_corp fc
ON fc.id = bo.funding_corp_id AND bo.funding_corp_id = 5 AND bo.is_active = 1 AND bo.loan_paid_at >= '2017-08-01'
UNION ALL
SELECT
bo.order_no 产品编号,
bo.ref_id,
fc.fund_name 资金方,
bo.train_cancel_at 放款时间,
year(bo.train_cancel_at) 年,
month(bo.train_cancel_at) 月,
bo.funding_loan_amount 放款金额,
bo.is_active
FROM baitiao_audit.baitiao_order bo
JOIN baitiao_audit.fund_corp fc
ON fc.id = bo.funding_corp_id AND bo.funding_corp_id = 5 AND bo.is_active = -2 AND
bo.train_cancel_at >= '2017-08-01';
ON fc.id = bo.funding_corp_id AND bo.funding_corp_id = 5 AND bo.is_active in (1, -2)
AND bo.loan_paid_at >= '2017-08-01' AND bo.loan_paid_at < '2017-11-01'
"""
sql_ref = """SELECT
......@@ -63,7 +50,7 @@ FROM new_transaction.baitiao_repay_plan_repay_record_ref brprrr
JOIN new_transaction.repay_channel rc ON rc.id = brprrr.repay_channel"""
sql_class = """
SELECT ref_id, class 风险等级 FROM analysis_tmp.nk_bt_order_all_0930 WHERE ref_id IN {}
SELECT order_no 产品编号, class 风险等级 FROM test_mzh.bt_all_class WHERE order_no IN {}
"""
sql_ratio = """
......@@ -83,16 +70,17 @@ df_repay = pd.concat(res)
df_ratio = pd.read_sql(sql=sql_ratio, con=mysql)
step = 5000
ref_ids = tuple(df_loan.ref_id.astype(str).unique())
order_nos = tuple(df_loan['产品编号'].astype(str).unique())
res = []
for i in xrange(0, len(ref_ids), step):
tmp = pd.read_sql(sql=sql_class.format(str(ref_ids[i:i + step]).replace(',)', ')')), con=mysql_analysis)
for i in xrange(0, len(order_nos), step):
tmp = pd.read_sql(sql=sql_class.format(str(order_nos[i:i + step]).replace(',)', ')')), con=mysql)
res.append(tmp)
df_class = pd.concat(res)
df_class.ref_id = df_class.ref_id.astype(int)
df_loan = pd.merge(df_loan, df_class, on='ref_id', how='left')
print('{}, {}'.format(len(ref_ids), df_class.ref_id.nunique()))
print(tuple(df_loan.loc[df_loan['风险等级'].isnull(), 'ref_id'].astype(str)))
df_class.drop_duplicates(['产品编号'], inplace=True)
df_loan = pd.merge(df_loan, df_class, on='产品编号', how='left')
print('{}, {}'.format(len(order_nos), df_class['产品编号'].nunique()))
print(tuple(df_loan.loc[df_loan['风险等级'].isnull(), '产品编号'].astype(str)))
df_loan = pd.merge(df_loan, df_ratio, on=['风险等级', '年', '月'])
df_loan['计提风险金'] = np.round(df_loan['放款金额'] * df_loan['计提风险金比例'], 2)
......@@ -100,11 +88,11 @@ df_loan['计提风险金'] = np.round(df_loan['放款金额'] * df_loan['计提
print(df_loan.groupby([df_loan['资金方'], df_loan['放款时间'].dt.month])['放款金额'].agg('sum').reset_index())
print(df_repay.groupby(df_repay['还款时间'].dt.month)['实还服务费'].agg('sum').reset_index())
view_dates = [datetime.date(2017, 9, 1), datetime.date(2017, 10, 1)]
file_path = 'E:/审计出表/白条/收入确认表'
view_dates = [datetime.date(2017, 9, 1), datetime.date(2017, 10, 1), datetime.date(2017, 11, 1)]
file_path = 'E:/审计出表/白条/收入确认表/1108'
res_sum = []
for v_date in view_dates:
df_loan_v = df_loan.loc[df_loan['放款时间'] < v_date]
df_loan_v = df_loan.loc[(df_loan['放款时间'] < v_date) & (df_loan['train_cancel_at'] < v_date)]
df_repay_v = df_repay.loc[df_repay['还款时间'] < v_date]
no_loan_ref_ids = df_repay_v.loc[~df_repay_v.ref_id.isin(df_loan_v.ref_id), 'ref_id']
......@@ -139,19 +127,9 @@ for v_date in view_dates:
tmp_sum = df_loan_v[[u'放款金额', u'计提风险金', u'实还服务费', u'assets', u'收入']].agg('sum').to_frame().T
tmp_sum[u'截止时间'] = v_date
res_sum.append(tmp_sum)
df_loan_v.drop(['train_cancel_at'], axis=1, inplace=True)
df_loan_v.to_csv(os.path.join(file_path, '白条收入确认表_{}_{:0>2}.csv'.format(v_date.year, v_date.month - 1)), index=None,
encoding='gbk')
df_sum = pd.concat(res_sum)
df_sum.to_excel(os.path.join(file_path, '白条非去哪儿汇总.xlsx'), index=None)
# 98108, 98108
# ()
# 资金方 放款时间 放款金额
# 0 笑脸直投 8 11076756.35000
# 1 笑脸直投 9 40581669.20000
# 还款时间 实还服务费
# 0 8 8561.64000
# 1 9 559489.81000
# 有还款,没有放款的len: 0,ref_id: ()
# 有还款,没有放款的len: 0,ref_id: ()
#@han
这是现金贷&白条&去哪儿在用的一部分代码,主要包括给审计、人工控制、在贷、赔付和到期应还等几个方面。
欢迎大家补充!
\ No newline at end of file
# -*- encoding: utf8 -*-
import sys
import datetime
import pandas as pd
from sqlalchemy import create_engine
from dateutil.relativedelta import relativedelta
from itertools import product
reload(sys)
sys.setdefaultencoding("utf-8")
pd.options.mode.chained_assignment = None
#
# 表名称:
# 现金贷-每月到期本金利息
#表字段:
# 资金方 放款年 放款月 到期年 到期月 客户应还本金 客户应还利息
# 数据库:
# new_transaction,loan_manifest,fund_corp,loan_class_contract_1002
# 注意事项:
# 出来的表为汇总表
#
file_path = u'E:/审计出表/去哪儿/'
engine_xjd = create_engine('mysql+mysqldb://internal_r:ArbNgtvlJzZHXsEu@172.16.4.60:3306/audit?charset=utf8',
echo=False).connect()
def xjd_principle_interest():
sql_quaer_2016 = '''
SELECT
fc.fund_name 资金方,
YEAR (t2.loan_time) 放款年,
MONTH (t2.loan_time) 放款月,
YEAR (t1.deadline) 到期年,
MONTH (t1.deadline) 到期月,
sum(t1.principle) 客户应还本金,
sum(t1.fee_amount) 客户应还利息
FROM
qunaer_new.repayment_plan_2016 t1
JOIN qunaer_new.pay_detail t2 ON t1.product_no = t2.product_no
JOIN qunaer_new.fund_corp fc ON fc.fund_code = t2.fund_code
where t1.status in (1,2)
GROUP BY
1,2,3,4,5;
'''
sql_quaer_2017 = '''
SELECT
fc.fund_name 资金方,
YEAR (t2.loan_time) 放款年,
MONTH (t2.loan_time) 放款月,
YEAR (t1.deadline) 到期年,
MONTH (t1.deadline) 到期月,
sum(t1.principle) 客户应还本金,
sum(t1.fee_amount) 客户应还利息
FROM
qunaer_new.repayment_plan_2017 t1
JOIN qunaer_new.pay_detail t2 ON t1.product_no = t2.product_no
JOIN qunaer_new.fund_corp fc ON fc.fund_code = t2.fund_code
where t1.status in (1,2) and t2.status = 1
GROUP BY
1,2,3,4,5;
'''
sql_quaer_baoli = '''
SELECT
'保理' 资金方,
YEAR (t2.loan_time) 放款年,
MONTH (t2.loan_time) 放款月,
YEAR (t1.deadline) 到期年,
MONTH (t1.deadline) 到期月,
sum(t1.principle) 客户应还本金,
sum(t1.fee_amount) 客户应还利息
FROM
qunaer_new.repayment_plan_2017 t1
JOIN qunaer_new.baoli_pay_detail t2 ON t1.product_no = t2.product_no and t1.fund_code = 1
JOIN qunaer_new.fund_corp fc ON fc.fund_code = t2.fund_code
WHERE t1.status IN (1,2) AND t2.status = 1
GROUP BY
1,2,3,4,5;
'''
df_quaer_2016 = pd.read_sql(sql_quaer_2016,engine_xjd)
df_quaer_2017 = pd.read_sql(sql_quaer_2017,engine_xjd)
df_quaer_baoli = pd.read_sql(sql_quaer_baoli,engine_xjd)
df_quaer_all = pd.concat([df_quaer_2016,df_quaer_baoli,df_quaer_2017],ignore_index=True)
df_quaer_all.loc[df_quaer_all[u'资金方']==u'保理',u'客户应还利息'] = 0
df_quaer_all.to_excel(file_path+u'去哪儿-每月到期本金利息-11月份V2.xlsx',index=False)
if __name__ == '__main__':
print '--------main begin'
xjd_principle_interest()
print '________main done'
\ No newline at end of file
# -*- encoding: utf8 -*-
import sys
import datetime
import pandas as pd
from sqlalchemy import create_engine
from dateutil.relativedelta import relativedelta
import multiprocessing as mtp
from itertools import product
reload(sys)
sys.setdefaultencoding("utf-8")
pd.options.mode.chained_assignment = None
file_path = u'E:/量化派/去哪儿/常规出账/'
file_name = u'去哪儿净放款_%s_%s.xlsx'
engine_qunaer = create_engine('mysql+mysqldb://internal_r:ArbNgtvlJzZHXsEu@172.16.3.201:3306/qunaer_new?charset=utf8',
echo=False).connect()
year=2017
month=10
start_time=datetime.date(year,month,1)
end_time=start_time + relativedelta(months=+1)
sql_pay='''
select fund.fund_name 资金方,product_no 产品编号,pay.stages 期数,date(trans_time) 放款时间,loan_amount 放款金额
from qunaer_new.pay_detail pay
JOIN qunaer_new.fund_corp fund on pay.fund_code = fund.fund_code
where status=1 and pay.fund_code != 1 AND trans_time >= '%s' AND trans_time <'%s'
''' % (start_time,end_time)
sql_refund='''
select fund.fund_name 资金方,t1.product_no 产品编号,t2.stages 期数,DATE(refund_time) 放款时间,refund_principle 放款金额
from qunaer_new.refund_detail t1
JOIN qunaer_new.pay_detail t2 on t1.product_no = t2.product_no
JOIN qunaer_new.fund_corp fund on t2.fund_code = fund.fund_code
WHERE t1.fund_code != 1 AND t2.status=1 AND t1.refund_status=1 AND refund_time >= '%s' AND refund_time < '%s'
''' % (start_time,end_time)
df_pay=pd.read_sql(sql_pay,engine_qunaer)
df_refund=pd.read_sql(sql_refund,engine_qunaer)
df_pay=pd.concat([df_pay,df_refund],ignore_index=True)
df_pay.to_excel(file_path+file_name % (year,month))
# -*- encoding: utf8 -*-
import sys
import datetime
import calendar
import pandas as pd
from sqlalchemy import create_engine
reload(sys)
sys.setdefaultencoding("utf-8")
pd.options.mode.chained_assignment = None
'''
@author linfang
1、去哪儿坏账
'''
year=2017
month=10
path = u'E:/量化派/去哪儿/常规出账/'
a,b=calendar.monthrange(year,month)
#本月最后一天
last_day=datetime.date(year,month,b)
#17年放款的还款计划表
table_2017_name='repayment_plan_2017'
#16年放款的还款计划表
table_2016_name='repayment_plan_2016'
engine_qunaer = create_engine('mysql+mysqldb://internal_r:ArbNgtvlJzZHXsEu@172.16.3.201:3306/qunaer_new?charset=utf8',
echo=False).connect()
#未还款
sql_2017_unrepay='''
select product_no,current_stage_no,deadline,principle
from %s
where status = 1 and datediff('%s',date(deadline)) >= 90 AND fund_code = 1
''' % (table_2017_name,last_day)
#还款1半的
sql_2017_repay='''
select product_no,current_stage_no,deadline,(principle-repay_principle) principle
from %s
where status = 2 and repay_amount > 0 and principle > repay_principle and datediff('%s',date(deadline)) >= 90 AND fund_code = 1
''' % (table_2017_name,last_day)
#未还款
sql_2016_unrepay='''
select product_no,current_stage_no,deadline,principle
from %s
where status = 1 and principle > 0 and datediff('%s',date(deadline)) >= 90
''' % (table_2016_name,last_day)
#已还款
sql_2016_repay='''
select product_no,current_stage_no,deadline,(principle-repay_principle) principle
from %s
where status = 2 and repay_amount > 0 and principle > repay_principle and principle > 0 and datediff('%s',date(deadline)) >= 90
''' % (table_2016_name,last_day)
df_2017_unrepay=pd.read_sql(sql_2017_unrepay,engine_qunaer)
df_2017_repay=pd.read_sql(sql_2017_repay,engine_qunaer)
df_2016_unrepay=pd.read_sql(sql_2016_unrepay,engine_qunaer)
df_2016_repay=pd.read_sql(sql_2016_repay,engine_qunaer)
df=pd.concat([df_2017_unrepay,df_2017_repay,df_2016_unrepay,df_2016_repay],ignore_index=True,axis=0)
df.rename(columns={'product_no':'产品编号','current_stage_no':'期数','deadline':'应还日期','principle':'未还本金'},inplace=True)
df.to_excel(path+u'坏账_%s_%s.xlsx' %(year,month),columns=df.columns,index=None, encoding='utf8')
# -*- encoding: utf8 -*-
import sys
import datetime
import pandas as pd
from sqlalchemy import create_engine
from dateutil.relativedelta import relativedelta
import multiprocessing as mtp
from itertools import product
reload(sys)
sys.setdefaultencoding("utf-8")
pd.options.mode.chained_assignment = None
#
# 表名称:
# 白条-去哪儿-核算-放款表:分多种类型,转让保理后的放款表,资金方的放款表,针对用户角度的放款表
file_path = u'E:/量化派/去哪儿/常规出账/'
file_name = u'核算放款表_%s_%s.xlsx'
engine_qunaer = create_engine('mysql+mysqldb://internal_r:ArbNgtvlJzZHXsEu@172.16.3.201:3306/qunaer_new?charset=utf8',
echo=False).connect()
# 债权转让后的保理放款表
def baoli_pay(year, month,plan_table='repayment_plan_2017'):
start_time = datetime.datetime(year, month, 1, 0, 0, 0)
end_time = start_time + relativedelta(months=+1)
sql_pay = '''
select '保理' AS '资金方',
pay.product_no '产品编号',
date(pay.trans_time) '债转时间',
date(pay.loan_time) '放款时间',
pay.loan_amount '合同放款金额',
pay.new_stages AS '贷款总期数',
'FALSE' AS '是否退款',
'FALSE' AS '是否转分期后订单',
'FALSE' AS '是否资金方直投',
plan.current_stage_no '当期期数',
date(plan.deadline) '每期应还款日',
plan.principle+plan.fee_amount '每期应还金额',
plan.principle '每期应还本金',
plan.fee_amount AS '每期应还服务费',
0 AS '每期应还服务费-QG承担'
from qunaer_new.baoli_pay_detail pay
join %s plan on pay.product_no = plan.product_no AND plan.fund_code = 1
where trans_time >='%s' and trans_time < '%s'
''' % (plan_table,start_time, end_time)
# # 属于保理的退款--flow_id 提取空的
# sql_refund='''
# select '保理' AS '资金方',
# refund.product_no '产品编号',
# date(pay.trans_time) '债转时间',
# date(pay.loan_time) '放款时间',
# refund.refund_amount '合同放款金额',
# pay.new_stages '贷款总期数',
# 'TRUE' AS '是否退款',
# date(refund.refund_time) AS '退款时间',
# month(refund.refund_time) AS '退款月份',
# 'FALSE' AS '是否转分期后订单',
# 'FALSE' AS '是否资金方直投'
# from qunaer_new.refund_detail refund
# JOIN qunaer_new.baoli_pay_detail pay on refund.product_no = pay.product_no and refund.fund_code = 1
# WHERE refund_time >='%s' and refund_time < '%s' and refund.flow_id IS NULL
# ''' % (start_time,end_time)
# 读取sql语句,2分钟左右
df_pay = pd.read_sql(sql_pay, engine_qunaer)
# 含有 flow_id 的退款,在还款表中体现。
# df_refund = pd.read_sql(sql_refund, engine_qunaer)
# 合并退款记录和放款记录
# df = pd.concat([df_pay, df_refund], ignore_index=True)
# df = df.fillna(0)
df_pay.ix[df_pay[[u'产品编号']].duplicated(),u'合同放款金额'] = 0
return df_pay[[u'资金方',u'产品编号',u'债转时间',u'放款时间',u'合同放款金额',u'贷款总期数',u'是否退款',u'是否转分期后订单',
u'是否资金方直投',u'当期期数',u'每期应还款日',u'每期应还金额',u'每期应还本金',u'每期应还服务费',u'每期应还服务费-QG承担']]
# 资金方放款表
def fund_pay(year,month,plan_table='fund_repayment_plan'):
start_time = datetime.datetime(year, month, 1, 0, 0, 0)
end_time = start_time + relativedelta(months=+1)
# 资金方的放款表
sql_pay = '''
select fc.fund_name '资金方',
pay.product_no '产品编号',
date(pay.trans_time) '订单时间',
date(pay.loan_time) '放款时间',
pay.loan_amount '合同放款金额',
pay.stages '贷款总期数',
'FALSE' AS '是否退款',
'FALSE' AS '是否转分期后订单',
'TRUE' AS '是否资金方直投',
plan.current_stage_no '当期期数',
date(plan.deadline) '每期应还款日',
plan.principle+plan.fee_amount '每期应还金额',
plan.principle '每期应还本金',
plan.fee_amount '每期应还服务费',
if(pay.stages=1,plan.fee_amount,0) '每期应还服务费-QG承担'
from qunaer_new.pay_detail pay
join %s plan on pay.product_no = plan.product_no
join qunaer_new.fund_corp fc on pay.fund_code = fc.fund_code
where trans_time >='%s' and trans_time < '%s' and pay.fund_code !=1 AND pay.status=1
''' % (plan_table,start_time, end_time)
# # 属于资金方的退款
# sql_refund = '''
# select fc.fund_name '资金方',
# refund.product_no '产品编号',
# date(pay.trans_time) '订单时间',
# date(pay.loan_time) '放款时间',
# refund.refund_amount '合同放款金额',
# pay.stages '贷款总期数',
# 'TRUE' AS '是否退款',
# DATE(refund.refund_time) AS '退款时间',
# MONTH(refund.refund_time) AS '退款月份',
# 'FALSE' AS '是否转分期后订单',
# 'TRUE' AS '是否资金方直投'
# from qunaer_new.refund_detail refund
# JOIN qunaer_new.fund_pay_detail pay on refund.product_no = pay.product_no and refund.fund_code = pay.fund_code
# JOIN qunaer_new.fund_corp fc on refund.fund_code = fc.fund_code
# WHERE refund_time >='%s' and refund_time < '%s' AND refund.flow_id is NULL
# ''' % (start_time, end_time)
# 读取sql语句,2分钟左右
df_pay = pd.read_sql(sql_pay, engine_qunaer)
# 含有 flow_id 的退款,在还款表中体现。
# df_refund = pd.read_sql(sql_refund, engine_qunaer)
# 合并退款记录和放款记录
# df = pd.concat([df_pay, df_refund], ignore_index=True)
# df = df.fillna(0)
df_pay.ix[df_pay[[u'产品编号']].duplicated(), u'合同放款金额'] = 0
return df_pay[[u'资金方',u'产品编号',u'订单时间',u'放款时间',u'合同放款金额',u'贷款总期数',u'是否退款',u'是否转分期后订单',
u'是否资金方直投',u'当期期数',u'每期应还款日',u'每期应还金额',u'每期应还本金',u'每期应还服务费',u'每期应还服务费-QG承担']]
#保理的放款表,注意,非债权转让后的放款表
def user_pay(year,month,plan_table='repayment_plan_2017'):
start_time = datetime.datetime(year, month, 1, 0, 0, 0)
end_time = start_time + relativedelta(months=+1)
# 用户的放款表
sql_pay = '''
select '保理' AS '资金方',
pay.product_no '产品编号',
date(pay.trans_time) '订单时间',
date(pay.loan_time) '放款时间',
pay.loan_amount '合同放款金额',
pay.stages '贷款总期数',
'FALSE' AS '是否退款',
if(pay.is_ptf = 0,'FALSE','TRUE') '是否转分期后订单',
'FALSE' AS '是否资金方直投',
plan.current_stage_no '当期期数',
date(plan.deadline) '每期应还款日',
plan.principle+plan.fee_amount '每期应还金额',
plan.principle '每期应还本金',
plan.fee_amount '每期应还服务费',
0 '每期应还服务费-QG承担'
from qunaer_new.pay_detail pay
join %s plan on pay.product_no = plan.product_no
where pay.fund_code = 1 and trans_time >='%s' and trans_time < '%s'
''' % (plan_table,start_time, end_time)
# 属于保理的退款
sql_refund = '''
select '保理' AS '资金方',
refund.product_no '产品编号',
date(pay.trans_time) '订单时间',
date(pay.loan_time) '放款时间',
refund.refund_amount '合同放款金额',
pay.stages '贷款总期数',
'TRUE' AS '是否退款',
date(refund.refund_time) '退款时间',
MONTH(refund.refund_time) '退款月份',
refund.refund_principle '退款本金',
refund.refund_fee_amount '退款服务费',
refund.refund_due_amount '退款罚息',
if(pay.is_ptf = 0,'FALSE','TRUE') '是否转分期后订单'
from qunaer_new.refund_detail refund
JOIN qunaer_new.pay_detail pay on refund.product_no = pay.product_no and refund.fund_code = pay.fund_code
WHERE pay.fund_code = 1 and refund_time >='%s' and refund_time < '%s' AND refund.flow_id is NULL
''' % (start_time, end_time)
# 读取sql语句,2分钟左右
df_pay = pd.read_sql(sql_pay, engine_qunaer)
# 如果期数 > 1 的,放款为0
df_pay.ix[df_pay[[u'产品编号']].duplicated(),u'合同放款金额'] = 0
# 含有 flow_id 的退款,在还款表中体现。
df_refund = pd.read_sql(sql_refund, engine_qunaer)
# 合并退款记录和放款记录
df = pd.concat([df_pay, df_refund], ignore_index=True)
df = df.fillna(0)
return df[[u'资金方',u'产品编号',u'订单时间',u'放款时间',u'合同放款金额',u'贷款总期数',u'是否退款',u'退款时间',u'退款月份',u'退款本金',u'退款服务费',u'退款罚息',u'是否转分期后订单',
u'是否资金方直投',u'当期期数',u'每期应还款日',u'每期应还金额',u'每期应还本金',u'每期应还服务费',u'每期应还服务费-QG承担']]
if __name__ == '__main__':
years = [2017]
months = range(10,11)
for year, month in product(years, months):
df_baoli=baoli_pay(year,month,plan_table='repayment_plan_2017')
df_fund=fund_pay(year,month,plan_table='fund_repayment_plan')
df_user=user_pay(year,month,plan_table='repayment_plan_2017')
writer=pd.ExcelWriter(file_path+file_name%(year,month))
# 后续就没有内保了,只有债转后的内保。
if len(df_user) > 0:
df_user.to_excel(writer,sheet_name=u'保理放款表',encoding='UTF-8',index=None)
df_fund.to_excel(writer,sheet_name=u'资金方放款表',encoding='UTF-8',index=None)
df_baoli.to_excel(writer, sheet_name=u'债转后的保理放款表', encoding='UTF-8', index=None)
writer.save()
writer.close()
print '-----------------------main done---------------------------------------'
\ No newline at end of file
# -- coding: UTF-8 --
import sys
import datetime
import pandas as pd
from sqlalchemy import create_engine
from dateutil.relativedelta import relativedelta
import multiprocessing as mtp
reload(sys)
sys.setdefaultencoding("utf-8")
pd.options.mode.chained_assignment = None
file_path = u'E:/量化派/去哪儿/常规出账/'
engine_qunaer = create_engine('mysql+mysqldb://internal_r:ArbNgtvlJzZHXsEu@172.16.3.201:3306/qunaer_new?charset=utf8',
echo=False).connect()
def pay(year, month,fund_plan='fund_repayment_plan'):
start_time = datetime.datetime(year, month, 1, 0, 0, 0)
end_time = start_time + relativedelta(months=+1)
sql_pay = '''
SELECT
IF(t1.account_id = 0,'',t6.account_name) AS '账户',
t5.fund_name as '资金方',
t1.product_no as '产品编号',
date(t2.interest_time) as '放款日期',
t2.loan_amount as '放款金额',
t2.loan_amount AS '本金债权',
t2.stages as '贷款总期数',
t3.current_stage_no as '应还款期数',
date(t3.deadline) as '应还资金方日期',
t3.principle as '应还本金',
t3.interest as '应还利息',
date(t1.repay_time) as '实还资金方日期',
t1.repay_amount AS '还款金额',
t1.repay_principle as '实还本金',
t1.repay_interest as '实还利息',
t1.qg_interest as 'QG实际贴息金额',
t1.repay_fee_amount as '资金方服务费',
t1.repay_due_amount as '资金方逾期服务费',
t1.flow_id as '流水号',
case t1.type WHEN 4 THEN '正常还款' WHEN 5 THEN '提前结清' WHEN 6 THEN '提前还款' WHEN 7 THEN '退款' END AS '类型'
FROM
fund_repay_detail t1
join pay_detail t2 on t2.product_no = t1.product_no AND t2.fund_code != 1
join %s t3 on t1.product_no=t3.product_no and t1.fund_code=t3.fund_code AND t1.current_stage_no = t3.current_stage_no
join fund_corp t5 on t5.fund_code=t1.fund_code
LEFT JOIN qunaer_new.account t6 on t6.id=t1.account_id
WHERE
t1.repay_time >= '%s' AND t1.repay_time < '%s'
'''%(fund_plan,start_time,end_time)
df_sql_pay = pd.read_sql(sql_pay,engine_qunaer)
# 保存导出的结果表
df_sql_pay.to_excel(file_path + u'核算还资金方表_%s_%s.xlsx' % (year,month), encoding='UTF-8', index=False)
if __name__ == '__main__':
year,month = 2017,10
pay(year,month)
print '-----------------------main done---------------------------------------'
\ No newline at end of file
# -*- coding:utf-8 -*-
# Author: Perry_Zhu
import sys
import pandas as pd
from sqlalchemy import create_engine
import pyexcelerate
reload(sys)
sys.setdefaultencoding('utf8')
max_limit = 800000
# 注意修改数据源
engine_new_transaction = create_engine(
'mysql+mysqldb://internal_r:ArbNgtvlJzZHXsEu@172.16.4.60:3306/new_transaction?charset=utf8',
echo=True)
path = u'E:/审计出表/11月份开始使用表数据/11月份白条出表/'
query_loan = """
SELECT tt.order_no 产品编号,tt.term_no 期数,tt.fund_name 资金方,max(tt.loan_paid_at) 放款时间,
max(tt.repaid_at)实还时间,tt.flow_id 流水号,tt.total_amount 账单金额 FROM (
SELECT
t4.order_no,
r.term_no,
t2.fund_name,
DATE(t4.loan_paid_at) loan_paid_at,
date(r.repaid_at) repaid_at,
r.flow_id ,
b.total_amount
FROM
baitiao_audit.baitiao_order t4
JOIN baitiao_audit.fund_corp t2 ON t4.funding_corp_id = t2.id AND t4.is_active = 1 AND t4.funding_corp_id = 5
JOIN new_transaction.bt_funding_repayment_record r ON r.ref_id = t4.ref_id
JOIN baitiao_audit.account_type t3 ON r.principal_account = t3.account_type
JOIN baitiao_audit.baitiao_finance_record b ON r.finance_record_id = b.batch_no AND b.type = 1
WHERE
t4.loan_paid_at>='%s'
AND t4.loan_paid_at<'%s'
UNION all
SELECT
t4.order_no,
r.term_no,
t2.fund_name,
DATE(t4.train_cancel_at) loan_paid_at,
date(r.repaid_at) repaid_at,
r.flow_id ,
b.total_amount
FROM
baitiao_audit.baitiao_order t4
JOIN baitiao_audit.fund_corp t2 ON t4.funding_corp_id = t2.id AND t4.is_active = -2 AND t4.funding_corp_id = 5
JOIN new_transaction.bt_funding_repayment_record r ON r.ref_id = t4.ref_id
JOIN baitiao_audit.account_type t3 ON r.principal_account = t3.account_type
JOIN baitiao_audit.baitiao_finance_record b ON r.finance_record_id = b.batch_no AND b.type = 1
WHERE
t4.loan_paid_at>='%s'
AND t4.loan_paid_at<'%s'
)tt
GROUP BY 1,2
"""
query_repay_principal = """
SELECT
r.order_no 产品编号,
r.term_no 期数,
sum(r.principal) 实还本金
FROM
bt_funding_repayment_record r
WHERE
r.repaid_at >='%s'
AND r.repaid_at <'%s'
AND r.refund_status!=3
and r.order_no is not null
GROUP BY 1,2
"""
query_repay_interest = """
select tt.order_no 产品编号,tt.term_no 期数,sum(tt.interest) 实还利息 from(
SELECT
r.order_no,
r.term_no,
r.interest
FROM
bt_funding_repayment_record r
WHERE
r.refund_status!=3
and r.order_no is not null
AND r.repaid_at >='%s'
AND r.repaid_at <'%s'
UNION ALL
SELECT
r.order_no,
r.term_no,
r.interest
FROM
bt_funding_repayment_record r
WHERE
r.refund_status=3
AND r.interest_account!=3
and r.order_no is not null
AND r.repaid_at >='%s'
AND r.repaid_at <'%s'
)tt
GROUP BY 1,2
"""
# query_repay_discount = """
# SELECT
# r.order_no 产品编号,
# r.term_no 期数,
# sum(r.discount) 实还贴息
# FROM
# bt_funding_repayment_record r
# WHERE
# r.refund_status!=3
# and r.order_no is not null
# AND r.repaid_at >='%s'
# AND r.repaid_at <'%s'
# GROUP BY 1,2
# """
query_repay_discount = """
SELECT
r.order_no 产品编号,
r.term_no 期数,
sum(r.discount) 实还贴息
FROM
bt_funding_repayment_record r
WHERE
r.refund_status!=3
and r.order_no is not null
AND r.discount_repaid_at >='%s'
AND r.discount_repaid_at <'%s'
GROUP BY 1,2
"""
start_time = '2017-08-01'
end_time = '2017-11-01'
def tj():
df_loan_all = pd.read_sql(query_loan % (start_time, end_time, start_time, end_time), engine_new_transaction)
df_loan_all[u'产品编号'] = df_loan_all[u'产品编号'].astype(str)
df_loan_all[u'期数'] = df_loan_all[u'期数'].astype(int)
df_p = pd.read_sql(query_repay_principal % (start_time, end_time), engine_new_transaction)
df_p[u'产品编号'] = df_p[u'产品编号'].astype(str)
df_p[u'期数'] = df_p[u'期数'].astype(int)
print df_p[u'实还本金'].sum()
# 实还本金
df_i = pd.read_sql(query_repay_interest % (start_time, end_time, start_time, end_time), engine_new_transaction)
df_i[u'产品编号'] = df_i[u'产品编号'].astype(str)
df_i[u'期数'] = df_i[u'期数'].astype(int)
# 实还利息
df_i = df_i[[u'产品编号', u'期数', u'实还利息']]
df_d = pd.read_sql(query_repay_discount % (start_time, end_time), engine_new_transaction)
df_d[u'产品编号'] = df_d[u'产品编号'].astype(str)
df_d[u'期数'] = df_d[u'期数'].astype(int)
# 实还贴息
df_d = df_d[[u'产品编号', u'期数', u'实还贴息']]
df = pd.concat([df_p, df_i, df_d], ignore_index=True, axis=0)
df.fillna(0, inplace=True)
# df_t1 = df.groupby([u'产品编号', u'期数'])[u'实还本金'].sum().reset_index()
# df_t2 = df.groupby([u'产品编号', u'期数'])[u'实还利息'].sum().reset_index()
# df_t3 = df.groupby([u'产品编号', u'期数'])[u'实还贴息'].sum().reset_index()
# df_1 = pd.merge(df_t1, df_t2, on=[u'产品编号', u'期数'], how='outer')
# df_t = pd.merge(df_1, df_t3, on=[u'产品编号', u'期数'], how='outer')
df_t = df.groupby([u'产品编号', u'期数'])[u'实还本金', u'实还利息', u'实还贴息'].agg('sum').reset_index()
df = pd.merge(df_loan_all, df_t, on=[u'产品编号', u'期数'])
df.loc[df[u'流水号'].duplicated(), [u'账单金额']] = 0
df[u'实还总额'] = df[u'实还本金'] + df[u'实还利息']
df = df[[u'资金方', u'产品编号', u'放款时间', u'期数', u'实还时间', u'实还总额', u'实还本金', u'实还利息', u'流水号', u'账单金额']]
# df.to_excel(path + u'直投白条还资金方明细-2017-10.xlsx', index=None)
df.to_excel(path + u'人工控制-直投白条还资金方(按实还时间)-2017-10.xlsx', index=None)
all_wb = pyexcelerate.Workbook()
for i in xrange(0, len(df), max_limit):
temp = df[i:i + max_limit]
temp_list = temp.values.tolist()
temp_list.insert(0, temp.columns.tolist())
all_wb.new_sheet(str(int(i / max_limit + 1)), data=temp_list)
all_wb.save(path + u'人工控制-普通白条-直投还资金方表(2017-10).xlsx')
tj()
# -*- coding:utf-8 -*-
# Author: Perry_Zhu
import sys
import pandas as pd
from sqlalchemy import create_engine
import pyexcelerate
max_limit = 800000
reload(sys)
sys.setdefaultencoding('utf8')
# 注意修改数据源
engine_new_transaction = create_engine(
'mysql+mysqldb://internal_r:ArbNgtvlJzZHXsEu@172.16.4.60:3306/new_transaction?charset=utf8',
echo=True)
path = u'E:/审计出表/11月份开始使用表数据/11月份白条出表/'
query_repay_principal = """
SELECT
t2.fund_name 资金方,
r.order_no 产品编号,
r.term_no,
t4.loan_paid_at 放款时间,
t4.funding_loan_amount 放款金额,
DATE(r.refund_time) 客户退单日,
DATE(r.repaid_at) 退还给资金方日,
sum(r.principal) 退款本金,
r.flow_id 流水号,
b.total_amount 账单金额
FROM
bt_funding_repayment_record r
JOIN baitiao_audit.fund_corp t2 ON r.funding_code = t2.id
JOIN baitiao_audit.account_type t3 ON r.principal_account = t3.account_type AND r.refund_status=3
JOIN baitiao_audit.baitiao_order t4 ON r.ref_id=t4.ref_id
JOIN baitiao_audit.baitiao_finance_record b ON r.finance_record_id=b.batch_no AND b.type=1
WHERE r.repaid_at >='%s'
AND r.repaid_at <'%s'
GROUP BY 2,3
"""
query_repay_interest = """
SELECT
r.order_no 产品编号,
r.term_no,
sum(ifnull(r.interest,0)) 退款利息
FROM
bt_funding_repayment_record r
WHERE
r.refund_status=3
AND r.interest_account=3
AND r.repaid_at >='%s'
AND r.repaid_at <'%s'
GROUP BY 1,2
"""
# query_repay_discount = """
# SELECT
# r.order_no 产品编号,
# r.term_no,
# sum(ifnull(r.discount,0)) 退款贴息
# FROM
# bt_funding_repayment_record r
# WHERE
# r.refund_status=3
# AND r.repaid_at >='%s'
# AND r.repaid_at <'%s'
# GROUP BY 1,2
# """
query_repay_discount = """
SELECT
r.order_no 产品编号,
r.term_no,
sum(ifnull(r.discount,0)) 退款贴息
FROM
bt_funding_repayment_record r
WHERE
r.refund_status=3
AND r.discount_repaid_at >='%s'
AND r.discount_repaid_at <'%s'
GROUP BY 1,2
"""
start_time = '2017-08-01'
end_time = '2017-11-01'
def tj():
df_p = pd.read_sql(query_repay_principal % (start_time, end_time), engine_new_transaction)
df_i = pd.read_sql(query_repay_interest % (start_time, end_time), engine_new_transaction)
df_d = pd.read_sql(query_repay_discount % (start_time, end_time), engine_new_transaction)
df_p[u'产品编号'] = df_p[u'产品编号'].astype(str)
df_p.term_no = df_p.term_no.astype(int)
df_i[u'产品编号'] = df_i[u'产品编号'].astype(str)
df_i.term_no = df_i.term_no.astype(int)
df_d[u'产品编号'] = df_d[u'产品编号'].astype(str)
df_d.term_no = df_d.term_no.astype(int)
df_t = pd.merge(df_p, df_i, on=[u'产品编号', 'term_no'], how='left')
df = pd.merge(df_t, df_d, on=[u'产品编号', 'term_no'], how='left')
df.loc[df[u'流水号'].duplicated(), [u'账单金额']] = 0
df.fillna(0, inplace=True)
df[u'退款总额'] = df[u'退款本金'] + df[u'退款利息']
df = df[
[u'资金方', u'产品编号', u'放款时间', u'放款金额', u'客户退单日', u'退还给资金方日', u'退款总额', u'退款本金', u'退款利息', u'流水号', u'账单金额']]
# df.to_excel(path + u'直投白条退资金方款明细-2017-10.xlsx', index=None)
# df.to_excel(path + u'人工控制-直投白条退资金方款明细-2017-10.xlsx', index=None)
all_wb = pyexcelerate.Workbook()
for i in xrange(0, len(df), max_limit):
temp = df[i:i + max_limit]
temp_list = temp.values.tolist()
temp_list.insert(0, temp.columns.tolist())
all_wb.new_sheet(str(int(i / max_limit + 1)), data=temp_list)
all_wb.save(path + u'人工控制-普通白条-直投退资金方表(2017-10).xlsx')
tj()
# -*- encoding: utf8 -*-
import sys
import datetime
import pandas as pd
from sqlalchemy import create_engine
from dateutil.relativedelta import relativedelta
from itertools import product
reload(sys)
sys.setdefaultencoding("utf-8")
pd.options.mode.chained_assignment = None
#
# 表名称:
# 白条-每月到期本金利息
#表字段:
# 资金方 放款年 放款月 到期年 到期月 客户应还本金 客户应还利息
# 数据库:
# user_bt_repayment_plan,baitiao_order,fund_corp
# 注意事项:
# 出来的表为汇总表
# 笑脸直投应还本金会有140的差距,是由于下单后使用红包金额导致。查询代码:
# SELECT SUM(funding_loan_amount),SUM(real_loan_amount) FROM baitiao_order WHERE funding_corp_id=5 AND funding_loan_amount!=real_loan_amount;
file_path = u'E:/审计出表/非去哪儿白条-放款表(1月份-6月份)/'
engine_bt = create_engine('mysql+mysqldb://internal_r:ArbNgtvlJzZHXsEu@172.16.4.60:3306/audit?charset=utf8',
echo=False).connect()
def bt_principle_interest():
sql_bt = '''
SELECT
fc.fund_name 资金方,
YEAR (bo.loan_paid_at) 放款年,
MONTH (bo.loan_paid_at) 放款月,
YEAR (plan.deadline) 到期年,
MONTH (plan.deadline) 到期月,
sum(plan.principle) 客户应还本金,
0 客户应还利息
FROM
new_transaction.user_bt_repayment_plan plan
JOIN baitiao_audit.baitiao_order bo ON bo.ref_id = plan.ref_id
JOIN baitiao_audit.fund_corp fc ON fc.id = bo.funding_corp_id
WHERE
bo.is_active IN (1)
GROUP BY
1,2,3,4,5;
'''
sql_bt_refund = '''
SELECT
fc.fund_name 资金方,
YEAR (bo.loan_paid_at) 放款年,
MONTH (bo.loan_paid_at) 放款月,
YEAR (plan.deadline) 到期年,
MONTH (plan.deadline) 到期月,
sum(plan.principle) 客户应还本金,
0 客户应还利息
FROM
new_transaction.user_bt_repayment_plan plan
JOIN baitiao_audit.baitiao_order bo ON bo.ref_id = plan.ref_id
JOIN baitiao_audit.fund_corp fc ON fc.id = bo.funding_corp_id
WHERE
bo.is_active IN (-2) AND bo.funding_corp_id in (1,5) AND bo.train_cancel_at<'2017-11-01'
GROUP BY
1,2,3,4,5;
'''
sql_cash_bt = '''
select
fc.fund_name 资金方,
YEAR (t1.loan_paid_at) 放款年,
MONTH (t1.loan_paid_at) 放款月,
YEAR (t1.loan_paid_at) 到期年,
MONTH (t1.loan_paid_at) 到期月,
sum(t1.real_loan_amount) 客户应还本金,
0 客户应还利息
from baitiao_audit.baitiao_order t1
join baitiao_audit.fund_corp fc ON fc.id = t1.funding_corp_id
where t1.baitiao_type=1
GROUP BY 1,2,3,4,5;
'''
df_bt = pd.read_sql(sql_bt,engine_bt)
df_bt_refund = pd.read_sql(sql_bt_refund,engine_bt)
df_cash = pd.read_sql(sql_cash_bt,engine_bt)
df = pd.concat([df_bt,df_bt_refund,df_cash],ignore_index=True)
df.fillna(0,inplace=True)
result = df.groupby([u'资金方',u'放款年',u'放款月',u'到期年',u'到期月'])[u'客户应还本金',u'客户应还利息'].sum().reset_index()
result.to_excel(file_path+u'非去哪儿白条每月到期本金利息_2017_10.xlsx',index=False)
# df.to_excel(file_path+u'非去哪儿白条每月到期本金利息明细版本-V7.xlsx',index=False)
if __name__ == '__main__':
print '--------main begin'
bt_principle_interest()
print '________main done'
\ No newline at end of file
# coding: utf-8
# Author: Perry_Zhu
"""
说明:由于白条现金支付不存在在贷所以在做白条在贷的时候可以忽略白条现金支付
本代码用于出截止2017-09-30和截止2017-10-31的在贷
"""
import datetime
import sys
import pandas as pd
import pyexcelerate as pe
from sqlalchemy import create_engine
reload(sys)
sys.setdefaultencoding('utf8')
engine_new_transaction = create_engine('mysql+mysqldb://internal_r:ArbNgtvlJzZHXsEu@172.16.3.201:3306/baitiao_audit?charset=utf8', echo=True)
end_point = '2017-11-01'
watch_point = datetime.date(2017, 10, 31)
out_file_path = u'E:/数据汇总/白条/在贷/'
query_loan = """
SELECT
tt.order_no,tt.term_no,
min(tt.deadline)deadline,SUM(tt.principle)principle
FROM(
SELECT
plan.order_no,
plan.term_no,
date(plan.deadline)deadline,
sum(plan.principle)principle
FROM baitiao_order bo
JOIN new_transaction.user_bt_repayment_plan plan ON bo.ref_id=plan.ref_id
WHERE
bo.loan_paid_at >= '2015-01-01'
AND bo.loan_paid_at < '%s'
AND bo.is_active =1
and bo.baitiao_type=0
AND bo.funding_corp_id = 1
GROUP BY 1,2
UNION ALL
SELECT
plan.order_no,
plan.term_no,
date(plan.deadline)deadline,
sum(plan.principle)principle
FROM
baitiao_order bo
JOIN new_transaction.user_bt_repayment_plan plan ON bo.ref_id=plan.ref_id and bo.baitiao_type=0
WHERE
bo.train_cancel_at >= '2015-01-01'
AND bo.train_cancel_at < '%s'
AND bo.is_active =- 2
AND bo.funding_corp_id = 1
GROUP BY 1,2
)tt
GROUP BY 1,2
"""
loan_info = """
SELECT tt.order_no,SUM(tt.real_loan_amount) 订单金额,max(tt.contract_term)合同期数,
tt.merchant_name 商户,min(tt.loan_paid_at)放款时间
FROM(
SELECT
o.order_no,
SUM(o.real_loan_amount) real_loan_amount,
o.contract_term,
m.merchant_name,
date(o.loan_paid_at) loan_paid_at
FROM
baitiao_order o
JOIN merchant m ON o.merchantId = m.merchant_id AND o.is_active=1 AND o.funding_corp_id = 1 and o.baitiao_type=0
GROUP BY 1
UNION ALL
SELECT
o.order_no,
SUM(o.train_cancel_at) real_loan_amount,
o.contract_term,
m.merchant_name,
date(o.train_cancel_at) loan_paid_at
FROM
baitiao_order o
JOIN merchant m ON o.merchantId = m.merchant_id AND o.is_active=1 AND o.funding_corp_id = -2 and o.baitiao_type=0
GROUP BY 1
)tt
GROUP BY 1
"""
repay_online = """
SELECT
t2.order_no,
t2.term_no,
SUM(ifnull(t1.principle, 0) - IFNULL(t1.mitigate_principle, 0)) paid_principle
FROM
new_transaction.baitiao_repay_plan_repay_record_ref t1
JOIN new_transaction.repay_record_online t3 ON t1.repay_channel in(1,2,3,4,5,6,7,8,9,10,11,12,22,23,24) AND t3.id = t1.record_id
AND t3.bill_time >= '2015-01-01' AND t3.bill_time < '%s'
and t1.id not in(14164355,14164357,14164359,13818155,13818157,13818159,13533131,13996965,13996971,13996967,
13996957,13996959,13996961,13996963,13996973,13996975,13996977,16774675,14471253)
JOIN new_transaction.user_bt_repayment_plan t2 ON t2.id = t1.plan_id
JOIN baitiao_order t5 ON t2.ref_id = t5.ref_id AND t5.funding_corp_id =1
GROUP BY 1,2
"""
repay_ali = """
SELECT
t2.order_no,
t2.term_no,
SUM(ifnull(t1.principle,0)-ifnull(t1.mitigate_principle,0)) paid_principle
FROM
new_transaction.baitiao_repay_plan_repay_record_ref t1
JOIN new_transaction.user_bt_repayment_plan t2 ON t2.id = t1.plan_id
JOIN new_transaction.offline_alipay_record t3 ON t1.repay_channel = 13 AND t3.id = t1.record_id AND t3.is_ref=1
AND t3.transfer_time>='2015-01-01' AND t3.transfer_time<'%s'
JOIN baitiao_order t5 ON t2.ref_id = t5.ref_id AND t5.funding_corp_id = 1
GROUP BY 1,2
"""
repay_bank = """
SELECT
t2.order_no,
t2.term_no,
SUM(ifnull(t1.principle,0)-ifnull(t1.mitigate_principle,0)) paid_principle
FROM
new_transaction.baitiao_repay_plan_repay_record_ref t1
JOIN new_transaction.user_bt_repayment_plan t2 ON t2.id = t1.plan_id
JOIN new_transaction.offline_bank_repay_record t3 ON t1.repay_channel IN (14, 15, 16) AND t3.id = t1.record_id
AND t3.transfer_time>='2015-01-01' AND t3.transfer_time<'%s'
JOIN baitiao_order t5 ON t2.ref_id = t5.ref_id
GROUP BY 1,2
"""
df_info = pd.read_sql(loan_info, engine_new_transaction)
df_loan_all = pd.read_sql(query_loan % (end_point, end_point), engine_new_transaction)
df_online = pd.read_sql(repay_online % end_point, engine_new_transaction)
df_ali = pd.read_sql(repay_ali % end_point, engine_new_transaction)
df_bank = pd.read_sql(repay_bank % end_point, engine_new_transaction)
df_repay = pd.concat([df_online, df_ali, df_bank], axis=0, ignore_index=True)
df_repay.dropna(axis=0, inplace=True)
df_loan_all.order_no = df_loan_all.order_no.astype(str)
df_loan_all.term_no = df_loan_all.term_no.astype(int)
df_info.order_no = df_info.order_no.astype(str)
df_repay.order_no = df_repay.order_no.astype(str)
df_repay.term_no = df_repay.term_no.astype(int)
#去除无效放款
df_loan = df_loan_all.loc[df_loan_all['principle'] > 0]
df_repay = df_repay.groupby(['order_no', 'term_no'])['paid_principle'].agg(['sum']).reset_index().rename(columns={'sum': 'paid_principle'})
df_out = pd.merge(df_loan, df_repay, on=['order_no', 'term_no'], how='left')
df_out['deadline'] = pd.to_datetime(df_out.deadline)
df_out['flag'] = (watch_point-df_out['deadline']).dt.days
df_out.fillna(0, inplace=True)
df_out['zaidai'] = df_out['principle'] - df_out['paid_principle']
#用于将在贷为负值的置0,建议使用 df_out = df_out.loc[df_out['zaidai']>0]
df_out.loc[df_out['order_no'].isin(
['trainmall1483695024282', 'trainmall1484301600672', 'trainmall1486362269554', 'trainmall1487920296689',
'trainmall1491536200793', 'trainmall1483695024282',
'trainmall1484301600672', 'trainmall1486362269554', 'grabtrainmall1484650405321', 'trainmall1495785791995',
'trainmall1499935282194', 'trainmall16008368458050561', 'trainmall16008408858634241',
'trainmall16112348780571649', 'trainmall16112552463312897']), 'zaidai'] = 0
df_out = df_out.loc[df_out['zaidai']>0]
df_out.loc[(df_out['flag']<=0),'0'] = df_out['zaidai']
df_out.loc[(df_out['flag']>=1) &(df_out['flag']<=30),'01-30'] = df_out['zaidai']
df_out.loc[(df_out['flag']>=31) &(df_out['flag']<=60),'31-60'] = df_out['zaidai']
df_out.loc[(df_out['flag']>=61) &(df_out['flag']<=90),'61-90'] = df_out['zaidai']
df_out.loc[(df_out['flag']>=91) &(df_out['flag']<=120),'91-120'] = df_out['zaidai']
df_out.loc[(df_out['flag']>=121) &(df_out['flag']<=150),'121-150'] = df_out['zaidai']
df_out.loc[(df_out['flag']>=151) &(df_out['flag']<=180),'151-180'] = df_out['zaidai']
df_out.loc[(df_out['flag']>=181) &(df_out['flag']<=360),'181-360'] = df_out['zaidai']
df_out.loc[(df_out['flag']>=361),'361+'] = df_out['zaidai']
#在贷按order_no展开明细
df = df_out.groupby(['order_no'])['0','01-30','31-60','61-90','91-120','121-150','151-180','181-360','361+'].sum().reset_index()
df.fillna(0,inplace=True)
df_loan.order_no = df_loan.order_no.astype(str)
df = pd.merge(df, df_info, on='order_no', how='left')
df.rename(columns={'order_no': u'订单号'}, inplace=True)
df = df[[u'商户', u'订单号', u'订单金额', u'合同期数', u'放款时间','0','01-30','31-60','61-90','91-120','121-150','151-180','181-360','361+']]
data_list = df.values.tolist()
data_list.insert(0, df.columns.tolist())
wb = pe.Workbook()
wb.new_sheet(u'明细', data=data_list)
wb.save(out_file_path + u'非去哪儿白条2017-10-31在贷明细.xlsx')
#按月汇总在贷
df = df_out.groupby(['order_no','deadline'])['0','01-30','31-60','61-90','91-120','121-150','151-180','181-360','361+'].sum().reset_index()
df.fillna(0,inplace=True)
df_loan.order_no = df_loan.order_no.astype(str)
df = pd.merge(df, df_info, on='order_no', how='left',copy=False)
df.rename(columns={'order_no': u'订单号','deadline':u'应还时间'}, inplace=True)
df[u'放款年'] = pd.to_datetime(df[u'放款时间']).dt.year
df[u'放款月'] = pd.to_datetime(df[u'放款时间']).dt.month
df[u'应还年'] = df[u'应还时间'].dt.year
df[u'应还月'] = df[u'应还时间'].dt.month
df_result = df.groupby([u'放款年',u'放款月',u'合同期数',u'应还年',u'应还月'])['0','01-30','31-60','61-90','91-120','121-150','151-180','181-360','361+'].sum().reset_index()
df_result.to_excel(out_file_path + u'白条在贷汇总_%s.xlsx' % end_point, index=None)
# -*- encoding: utf8 -*-
import sys
import datetime
import pandas as pd
from sqlalchemy import create_engine
from dateutil.relativedelta import relativedelta
from itertools import product
reload(sys)
sys.setdefaultencoding("utf-8")
pd.options.mode.chained_assignment = None
#
# 表名称:
# 白条-非去哪儿-放款表(1-6月份)
#表字段:
# 资金方 产品编号 放款日期 总期数 白条商家 放款金额 本金债权
# 数据库:
# baitiao_order,fund_corp,merchant
# 注意事项:
# baitiao_order.is_active = 1、资金方统一为“保理”
#
file_path = u'E:/审计出表/非去哪儿白条-放款表(1月份-6月份)/'
engine_bt = create_engine('mysql+mysqldb://internal_r:ArbNgtvlJzZHXsEu@172.16.3.201:3306/audit?charset=utf8',
echo=False).connect()
def baitiao_pay(year, month):
#year,month = 2017,8
start_time = datetime.datetime(year, month, 1, 0, 0, 0)
end_time = start_time + relativedelta(months=+1)
#收款表,获取数据
sql_bt_pay = '''
SELECT
bo.order_no as '产品编号',
date(bo.loan_paid_at) as '放款日期',
bo.contract_term as '总期数',
mc.merchant_name as '商户名称',
bo.real_loan_amount as '放款金额',
bo.contract_loan_amount as '本金债权'
FROM
all_back_0831.baitiao_order bo
JOIN baitiao_audit.merchant mc ON mc.merchant_id = bo.merchantId
WHERE
bo.loan_paid_at >= '%s'
AND bo.loan_paid_at < '%s'
AND bo.is_active = 1
''' %(start_time,end_time)
sql_bt_refund = '''
SELECT
bo.order_no as '产品编号',
date(bo.loan_paid_at) as '放款日期',
bo.contract_term as '总期数',
mc.merchant_name as '商户名称',
bo.real_loan_amount as '放款金额',
bo.contract_loan_amount as '本金债权'
FROM
all_back_0831.baitiao_order bo
JOIN baitiao_audit.merchant mc ON mc.merchant_id = bo.merchantId
WHERE
bo.train_cancel_at >= '%s'
AND bo.train_cancel_at < '%s'
AND bo.is_active = -2
''' %(start_time,end_time)
df_bt_pay = pd.read_sql(sql_bt_pay,engine_bt)
df_bt_refund = pd.read_sql(sql_bt_refund,engine_bt)
df = pd.concat([df_bt_pay,df_bt_refund])
print('----%s-%s'%(year,month))
print(sum(df[u'放款金额']))
df[u'资金方'] = u'保理'
df.to_excel(file_path+u'白条放款表_%s_%s_.xlsx' %(year,month),index=False)
#df.to_csv(file_path + u'白条放款表_%s_%s_0925补录.csv' %(year,month), encoding='gb18030', index=False)
if __name__ == '__main__':
# 还款明细
years = [2017]
months = range(8,9,1)
for year, month in product(years, months):
print('-----%s--%s') %(year,month)
baitiao_pay(year, month)
print '-----------------------main done---------------------------------------'
\ No newline at end of file
# -*- encoding: utf8 -*-
import sys
import datetime
import pandas as pd
from sqlalchemy import create_engine
from dateutil.relativedelta import relativedelta
from itertools import product
reload(sys)
sys.setdefaultencoding("utf-8")
pd.options.mode.chained_assignment = None
#
# 表名称:
# 白条-非去哪儿-放款表(1-6月份)
#表字段:
# 资金方 产品编号 放款日期 总期数 白条商家 放款金额 本金债权
# 数据库:
# baitiao_order,fund_corp,merchant
# 注意事项:
# baitiao_order.is_active = 1、资金方统一为“保理”
# 8月份分为内保和直投模式,内保模式可以直接用,直投模式直接统计放款即可
file_path = u'E:/审计出表/非去哪儿白条-放款表(1月份-6月份)/'
engine_bt = create_engine('mysql+mysqldb://internal_r:ArbNgtvlJzZHXsEu@172.16.3.201:3306/?charset=utf8',
echo=False).connect()
def baitiao_pay(year, month):
#year,month = 2017,8
start_time = datetime.datetime(year, month, 1, 0, 0, 0)
end_time = start_time + relativedelta(months=+1)
#收款表,获取数据
sql_bt_neibao_pay = '''
SELECT
bo.order_no as '产品编号',
date(bo.loan_paid_at) as '放款日期',
bo.contract_term as '总期数',
mc.merchant_name as '白条商家',
bo.real_loan_amount as '放款金额',
bo.contract_loan_amount as '本金债权'
FROM
all_back_0930.baitiao_order bo
JOIN baitiao_audit.merchant mc ON mc.merchant_id = bo.merchantId
WHERE
bo.loan_paid_at >= '%s'
AND bo.loan_paid_at < '%s'
AND bo.is_active = 1
AND bo.funding_corp_id = 1
''' %(start_time,end_time)
sql_bt_neibao_refund = '''
SELECT
bo.order_no as '产品编号',
date(bo.train_cancel_at) as '放款日期',
bo.contract_term as '总期数',
mc.merchant_name as '白条商家',
bo.real_loan_amount as '放款金额',
bo.contract_loan_amount as '本金债权'
FROM
all_back_0930.baitiao_order bo
JOIN baitiao_audit.merchant mc ON mc.merchant_id = bo.merchantId
WHERE
bo.train_cancel_at >= '%s'
AND bo.train_cancel_at < '%s'
AND bo.is_active = -2
AND bo.funding_corp_id = 1
''' %(start_time,end_time)
df_bt_pay = pd.read_sql(sql_bt_neibao_pay,engine_bt)
df_bt_refund = pd.read_sql(sql_bt_neibao_refund,engine_bt)
df = pd.concat([df_bt_pay,df_bt_refund])
# 收款表,获取数据
sql_bt_zhitou_pay = '''
SELECT
bo.order_no as '产品编号',
date(bo.loan_paid_at) as '放款日期',
bo.contract_term as '总期数',
mc.merchant_name as '白条商家',
bo.funding_loan_amount as '放款金额',
bo.contract_loan_amount as '本金债权',
bfr.serial_number as '流水号-直投'
FROM
all_back_0930.baitiao_order bo
JOIN baitiao_audit.merchant mc ON mc.merchant_id = bo.merchantId
join all_back_0930.baitiao_finance_record bfr on bfr.batch_no = bo.batch_no_id
WHERE
bo.loan_paid_at >= '%s'
AND bo.loan_paid_at < '%s'
AND bo.is_active = 1
AND bo.funding_corp_id = 5
''' % (start_time, end_time)
df_bt_zhitou_pay = pd.read_sql(sql_bt_zhitou_pay, engine_bt)
print('----%s-%s'%(year,month))
print(sum(df[u'放款金额']))
df[u'资金方'] = u'保理'
df_bt_zhitou_pay[u'资金方'] = u'笑脸'
writer = pd.ExcelWriter(file_path+u'白条放款表_%s_%s_.xlsx' %(year,month))
df.to_excel(writer,sheet_name = u'保理放款表',index=False)
df_bt_zhitou_pay.to_excel(writer,sheet_name = u'直投放款表',index=False)
writer.save()
#df.to_csv(file_path + u'白条放款表_%s_%s_0925补录.csv' %(year,month), encoding='gb18030', index=False)
if __name__ == '__main__':
# 还款明细
years = [2017]
months = range(9,10,1)
for year, month in product(years, months):
print('-----%s--%s') %(year,month)
baitiao_pay(year, month)
print '-----------------------main done---------------------------------------'
\ No newline at end of file
# -*- encoding: utf8 -*-
import sys
import datetime
import pandas as pd
from sqlalchemy import create_engine
from dateutil.relativedelta import relativedelta
from itertools import product
import pyexcelerate
reload(sys)
sys.setdefaultencoding("utf-8")
pd.options.mode.chained_assignment = None
max_limit = 800000
#
# 表名称:
# 白条-非去哪儿-放款表(1-6月份)
# 表字段
# 资金方 产品编号 放款期数 当前期数 白条商家 实还金额 本金 利息 服务费 罚息 其他收益 收款账户 渠道流水号
# 数据库:
# baitiao_repay_plan_repay_record_ref,user_bt_repayment_plan,baitiao_order,merchant,repay_channel
# 注意事项:
# baitiao_order.is_active = 1
#其他:
# 数据分为三部分:支付宝还款(offline_alipay_record)、银行还款(offline_bank_repay_record)、线上还款(repay_record_online)
# 还款渠道的划分根据baitiao_repay_plan_repay_record_ref中repay_channel:
# 13(支付宝线下)[14,15,16](银行还款)小于13(线上还款)
# (本、利、服、罚)需要:t1.principle-t1.mitigate_principle 本金
#
file_path = u'E:/审计出表/非去哪儿白条-客户实还表-1023版/'
# 注意修改数据源
engine_all_back_0831 = create_engine(
'mysql+mysqldb://internal_r:ArbNgtvlJzZHXsEu@172.16.3.201:3306/?charset=utf8',
echo=False)
read_merchant_sql = '''SELECT merchant_id,merchant_name FROM all_back_0831.merchant'''
df_merchant = pd.read_sql(read_merchant_sql, con=engine_all_back_0831)
df_merchant['merchant_id'] = df_merchant['merchant_id'].astype(int)
read_repay_sql = '''
SELECT id,`approach_name` FROM new_transaction.`repay_channel`
'''
df_approach = pd.read_sql(read_repay_sql, engine_all_back_0831)
df_approach['id'] = df_approach['id'].astype(int)
read_fund_sql = '''
SELECT id,fund_name FROM all_back_0831.`fund_corp`
'''
df_fund = pd.read_sql(read_fund_sql, engine_all_back_0831)
df_fund['id'] = df_fund['id'].astype(int)
def hk_hz(year, month):
# 支付宝还款
start_time = datetime.datetime(year, month, 1, 0, 0, 0)
end_time = start_time + relativedelta(months=+1)
sql_alipay = """
SELECT t5.funding_corp_id,t5.order_no 产品编号,t6.merchant_name,t5.contract_term 放款期数,t2.term_no 当前期数,date(t3.transfer_time) 客户实还时间,
t1.ref_amount 总额, t1.principle-t1.mitigate_principle 本金, t1.interest-t1.mitigate_interest 利息, t1.service_fee-t1.mitigate_service_fee 服务费,
t1.red_package_fee 红包减免,
t1.punish-t1.mitigate_collection_relief 逾期罚款收益,
t1.remain_income 其他收益,
t7.approach_name,
t3.business_flow 流水号
FROM all_back_0831.baitiao_repay_plan_repay_record_ref t1
JOIN all_back_0831.user_bt_repayment_plan t2 ON t2.id = t1.plan_id
JOIN all_back_0831.offline_alipay_record t3 ON t1.repay_channel =13 AND t3.id = t1.record_id
JOIN all_back_0831.baitiao_order t5 ON t2.ref_id=t5.ref_id
JOIN all_back_0831.merchant t6 ON t6.`merchant_id` = t5.`merchantId`
JOIN new_transaction.`repay_channel` t7 ON t1.repay_channel = t7.id
where t3.transfer_time >='%s' and t3.transfer_time<'%s'
""" % (start_time, end_time)
df_alipay = pd.read_sql(sql=sql_alipay, con=engine_all_back_0831)
# 银行还款
sql_bank = """
SELECT t5.funding_corp_id,t5.order_no 产品编号,t6.merchant_name,t5.contract_term 放款期数, t2.term_no 当前期数,date(t3.transfer_time) 客户实还时间,
t1.ref_amount 总额, t1.principle-t1.mitigate_principle 本金, t1.interest-t1.mitigate_interest 利息, t1.service_fee-t1.mitigate_service_fee 服务费,
t1.punish-t1.mitigate_collection_relief 逾期罚款收益,
t1.remain_income 其他收益,
t7.approach_name,
t3.serial_number 流水号
FROM all_back_0831.baitiao_repay_plan_repay_record_ref t1
JOIN all_back_0831.user_bt_repayment_plan t2 ON t2.id = t1.plan_id
JOIN all_back_0831.offline_bank_repay_record t3 ON t1.repay_channel in (14,15,16) AND t3.id = t1.record_id
JOIN all_back_0831.baitiao_order t5 ON t2.ref_id=t5.ref_id
JOIN all_back_0831.merchant t6 ON t6.`merchant_id` = t5.`merchantId`
JOIN new_transaction.`repay_channel` t7 ON t1.repay_channel = t7.id
where t3.transfer_time>= '%s' and t3.transfer_time<'%s'
""" % (start_time, end_time)
df_bank = pd.read_sql(sql=sql_bank, con=engine_all_back_0831)
# 线上还款
sql_online = """
SELECT t5.funding_corp_id,t5.order_no 产品编号,t6.merchant_name,t5.contract_term 放款期数,t2.term_no 当前期数,date(t3.bill_time) 客户实还时间,
t1.ref_amount 总额, t1.principle-t1.mitigate_principle 本金, t1.interest-t1.mitigate_interest 利息, t1.service_fee-t1.mitigate_service_fee 服务费,
t1.punish-t1.mitigate_collection_relief 逾期罚款收益,
t1.remain_income 其他收益,
t7.approach_name,
t3.order_id 流水号
FROM all_back_0831.baitiao_repay_plan_repay_record_ref t1
JOIN all_back_0831.user_bt_repayment_plan t2 ON t2.id = t1.plan_id
JOIN all_back_0831.repay_record_online t3 ON t1.repay_channel < 13 AND t3.id = t1.record_id
JOIN all_back_0831.baitiao_order t5 ON t2.ref_id=t5.ref_id
JOIN all_back_0831.merchant t6 ON t6.`merchant_id` = t5.`merchantId`
JOIN new_transaction.`repay_channel` t7 ON t1.repay_channel = t7.id
where t3.bill_time>='%s' and t3.bill_time<'%s'
""" % (start_time, end_time)
df_online = pd.read_sql(sql=sql_online, con=engine_all_back_0831)
df = pd.concat([df_alipay, df_bank, df_online], ignore_index=True)
df[u'资金方'] = u'保理'
# df.sort_values(['r_year', 'r_month', 'merchant_name', 'approach_name', u'总额', u'本金', u'利息', u'服务费', u'逾期罚款收益', u'其他收益',u'总减免',u'红包减免', u'减免本金', u'减免利息', u'减免服务费', u'减免罚息'], inplace=True)
df = df[
[u'资金方', u'产品编号', u'放款期数',u'当前期数', 'merchant_name', 'approach_name', u'客户实还时间',u'总额', u'本金', u'利息', u'服务费', u'逾期罚款收益',
u'其他收益', u'流水号']]
df.rename(columns={'merchant_name': '白条商家', 'approach_name': '收款账户'}, inplace=True)
# columns = ['年', '月', '商户', '收款账户', '总额', '本金', '利息', '服务费', '红包减免金额', '逾期罚款收益', '其他收益']
print(sum(df[u'总额']))
# df.to_excel(file_path+u'白条还款明细表_%s_%s.xlsx' %(year,month), index=None)
all_wb = pyexcelerate.Workbook()
for i in xrange(0, len(df), max_limit):
temp = df[i:i + max_limit]
temp_list = temp.values.tolist()
temp_list.insert(0, temp.columns.tolist())
all_wb.new_sheet(str(int(i / max_limit + 1)), data=temp_list)
all_wb.save(file_path + u'白条还款明细表_%s_%s.xlsx' %(year,month))
df.to_csv(file_path + u'白条还款明细表_%s_%s.csv' %(year,month), index=None, encoding='gb18030')
if __name__ == '__main__':
# 还款明细
years = [2017]
months = range(1, 7, 1)
for year, month in product(years, months):
print('-----%s--%s') % (year, month)
hk_hz(year, month)
print '-----------------------main done---------------------------------------'
# -*- encoding: utf8 -*-
import sys
import datetime
import pandas as pd
from sqlalchemy import create_engine
from dateutil.relativedelta import relativedelta
from itertools import product
reload(sys)
sys.setdefaultencoding("utf-8")
pd.options.mode.chained_assignment = None
max_limit = 800000
import os
path = u'E:/审计出表/人工控制/现金贷-还款表-1010版本/'
engine_xjd = create_engine('mysql+mysqldb://internal_r:ArbNgtvlJzZHXsEu@172.16.4.60:3306/?charset=utf8',
echo=False).connect()
'''
# 注意事项:非常重要 2017年4月份客户实还表中Loan_id = 52532760 的地方要特别地注意一下 ,1月份中loan_id = 39722219 也需要特别注意
'''
#这四个资金方的还款计划来自于实际还资金方表
#group by 是由于还资金方计划中有0.01的情况
# sql_repay_frr_1 = '''
# SELECT
# frr.ref_id,
# frr.term_no '应还期数',
# date(frr.deadline) '应还资金方时间',
# sum(frr.principle) '应还资金方本金',
# sum(frr.interest) '应还资金方利息'
# FROM
# audit.funding_repayment_record frr
# join audit.loan_manifest lm on lm.ref_id = frr.ref_id
# WHERE
# lm.loan_paid_at>='%s' and lm.loan_paid_at<'%s'
# and frr.funding_code in (380,420,290,330)
# GROUP BY 1,2
# '''
#这5个资金方的还款计划来自于用户还款计划
#group by 是由于还资金方计划中有0.01的情况
sql_repay_frr_2 = '''
select
urp.ref_id,
urp.term_no '应还期数',
date(urp.deadline) '应还资金方时间',
sum(urp.principle) '应还资金方本金',
sum(urp.interest) '应还资金方利息'
from all_back_0930.user_repayment_plan urp
join all_back_0930.loan_manifest lm on lm.ref_id = urp.ref_id
where lm.loan_paid_at>='%s' and loan_paid_at<'%s'
and urp.fund_code in (210,270,310,320,410,430)
GROUP BY 1,2
'''
#test_shiyao.funding_repayment_plan中还资金方计划的数据是最全的
#group by 是由于还资金方计划中有0.01的情况
sql_repay_frr_3 = '''
select
frp.ref_id,
frp.term_no '应还期数',
date(frp.deadline) '应还资金方时间',
sum(frp.principle) '应还资金方本金',
sum(frp.interest) '应还资金方利息'
from audit.funding_repayment_plan frp
join all_back_0930.loan_manifest lm on lm.ref_id = frp.ref_id
WHERE lm.loan_paid_at>='%s' and loan_paid_at<'%s'
and lm.funding_code not in (210,270,310,320,410,430)
GROUP BY 1,2
'''
# 在线还款部分
read_detail_online_sql = '''
SELECT t1.real_loan_id loan_id,date(lm.loan_paid_at) '放款时间',t1.ref_id,fc.name '资金方',t1.term_no '应还期数',date(t6.bill_time) '实还时间',t2.ref_amount '实还总额',
t2.principle-t2.mitigate_principle '实还本金',t2.interest-t2.mitigate_interest '实还利息',
ifnull(t2.`service_fee`-t2.mitigate_service_fee,0) '实还服务费',IFNULL(t2.`punish`-t2.mitigate_collection_relief, 0) '实还罚息',
t2.remain_income '其他收益',rch.approach_name '还款渠道',t6.order_id AS '流水号',t6.amount '账单实还金额',t1.service_fee '应收服务费',t1.required_repayment '应还总额'
FROM all_back_0930.`xjd_repay_plan_repay_record_ref` t2
JOIN all_back_0930.`user_repayment_plan` t1 ON t1.id=t2.plan_id
JOIN all_back_0930.repay_record_online t6 ON t2.record_id=t6.id AND t2.repay_channel = t6.pay_approach
join basic.funding_corp fc on fc.funding_code = t1.fund_code
join all_back_0930.loan_manifest lm on lm.ref_id = t1.ref_id
# LEFT JOIN xjd_dunjiao_plan xdp ON xdp.loan_id = t1.real_loan_id
join new_transaction.repay_channel rch on rch.id = t2.repay_channel
WHERE lm.loan_paid_at >= '%s' AND lm.loan_paid_at < '%s'
'''
# 支付宝线下还款
read_detail_alipay_sql = '''
SELECT t1.real_loan_id loan_id,date(lm.loan_paid_at) '放款时间',t1.ref_id,fc.name '资金方',t1.term_no '应还期数',date(t6.transfer_time) '实还时间',t2.ref_amount '实还总额',
t2.principle-t2.mitigate_principle '实还本金',t2.interest-t2.mitigate_interest '实还利息',
ifnull(t2.`service_fee`-t2.mitigate_service_fee,0) '实还服务费',IFNULL(t2.`punish`-t2.mitigate_collection_relief, 0) '实还罚息',
t2.remain_income '其他收益',rch.approach_name '还款渠道',t6.business_flow '流水号',t6.income '账单实还金额',t1.service_fee '应收服务费',t1.required_repayment '应还总额'
FROM all_back_0930.`xjd_repay_plan_repay_record_ref` t2
JOIN all_back_0930.`user_repayment_plan` t1 ON t1.id=t2.plan_id
JOIN all_back_0930.`offline_alipay_record` t6 ON t2.record_id=t6.id AND t2.repay_channel = 13
join basic.funding_corp fc on fc.funding_code = t1.fund_code
join all_back_0930.loan_manifest lm on lm.ref_id = t1.ref_id
join new_transaction.repay_channel rch on rch.id = t2.repay_channel
WHERE lm.loan_paid_at >= '%s' AND lm.loan_paid_at < '%s'
'''
# 银行线下还款部分,无对应流水号
read_detail_bank_sql = '''
SELECT t1.real_loan_id loan_id,date(lm.loan_paid_at) '放款时间',t1.ref_id,fc.name '资金方',t1.term_no '应还期数',date(t6.transfer_time) '实还时间',t2.ref_amount '实还总额',
t2.principle-t2.mitigate_principle '实还本金',t2.interest-t2.mitigate_interest '实还利息',
ifnull(t2.`service_fee`-t2.mitigate_service_fee,0) '实还服务费',IFNULL(t2.`punish`-t2.mitigate_collection_relief, 0) '实还罚息',
t2.remain_income '其他收益',rch.approach_name '还款渠道',t6.transfer_amount '账单实还金额',t1.service_fee '应收服务费',t1.required_repayment '应还总额'
FROM all_back_0930.`xjd_repay_plan_repay_record_ref` t2
JOIN all_back_0930.`user_repayment_plan` t1 ON t1.id=t2.plan_id
join all_back_0930.loan_manifest lm on lm.ref_id = t1.ref_id
JOIN all_back_0930.`offline_bank_repay_record` t6 ON t2.record_id=t6.id AND t2.repay_channel IN (14,15,16)
join basic.funding_corp fc on fc.funding_code = t1.fund_code
join new_transaction.repay_channel rch on rch.id = t2.repay_channel
WHERE lm.loan_paid_at >= '%s' AND lm.loan_paid_at < '%s'
'''
#获取还款数据
def handle_hk(year, month):
#year, month = 2017, 1
start_time = datetime.datetime(year, month, 1, 0, 0, 0)
end_time = start_time + relativedelta(months=+1)
#获取全部还款计划
# df_repay_frr_1 = pd.read_sql(sql_repay_frr_1 % (start_time, end_time), con=engine_xjd)
df_repay_frr_2 = pd.read_sql(sql_repay_frr_2 % (start_time, end_time), con=engine_xjd)
df_repay_frr_3 = pd.read_sql(sql_repay_frr_3 % (start_time, end_time), con=engine_xjd)
df_repay_frr = pd.concat([df_repay_frr_2,df_repay_frr_3])
df_repay_frr = df_repay_frr.drop_duplicates([u'ref_id', u'应还期数', u'应还资金方时间', u'应还资金方本金', u'应还资金方利息']).dropna()
df_repay_frr['ref_id'] = df_repay_frr['ref_id'].astype('int64')
df_repay_frr[u'应还期数'] = df_repay_frr[u'应还期数'].astype('int64')
#获取全部实还信息
df_online_detail = pd.read_sql(read_detail_online_sql % (start_time, end_time), con=engine_xjd)
df_alipay_detail = pd.read_sql(read_detail_alipay_sql % (start_time, end_time), con=engine_xjd)
df_bank_detail = pd.read_sql(read_detail_bank_sql % (start_time, end_time), con=engine_xjd)
df = pd.concat([df_online_detail, df_alipay_detail, df_bank_detail], axis=0)
df[u'应还期数'] = df[u'应还期数'].astype('int64')
df['ref_id'] = df['ref_id'].astype('int64')
#还款和实还进行合并
df = pd.merge(df,df_repay_frr,on=['ref_id', u'应还期数'],how='left')
df.loc[df[u'流水号'].duplicated(), u'账单实还金额'] = 0
if len(df) > 0:
df[u'唯一编号'] = df['loan_id'].astype('str') + df[u'应还期数'].fillna(0).astype('int').astype('str')
df[u'实还总额-账单实还总额'] = df[u'实还总额'].fillna(0)-df[u'账单实还金额'].fillna(0)
df[u'应还资金方本息-客户实还本息'] = df[u'应还资金方本金'].fillna(0)+df[u'应还资金方利息'].fillna(0)-df[u'实还本金'].fillna(0)-df[u'实还利息'].fillna(0)
df[u'应收服务费-实还服务费'] = df[u'应收服务费'] - df[u'实还服务费']
df = df.drop([u'ref_id'], axis=1)
df = df.fillna(0)
columns = [u'放款时间',u'唯一编号',u'资金方','loan_id',u'实还时间',u'实还总额',u'应还期数',u'实还本金',u'实还利息',u'实还服务费',
u'实还罚息',u'其他收益',u'流水号',u'还款渠道',u'账单实还金额',u'应还资金方时间',u'应还资金方本金',u'应还资金方利息',
u'应收服务费',u'实还总额-账单实还总额',u'应还资金方本息-客户实还本息',u'应收服务费-实还服务费']
print(u'客户实还本息:' + str(sum(df[u'实还本金'])+sum(df[u'实还利息'])) + u' 应还资金方本金:' + str(
sum(df[u'应还资金方本金'])) + u' 应还资金方利息' + str(sum(df[u'应还资金方利息'])))
if len(df) > max_limit:
for i in xrange(0, len(df), max_limit):
df[i:i + max_limit].to_excel(os.path.join(path, u'人工控制-现金贷-客户实还表-(%s-%02d)-%d.xlsx' % (
year, month, i / max_limit + 1)), index=None, columns=columns)
else:
df.to_excel(path + u'人工控制-现金贷-客户实还表-(%d-%d).xlsx' % (year, month), index=None, columns=columns)
if __name__ == '__main__':
year = [2017]
month = range(9, 10, 1)
for year, month in product(year, month):
print '____%d__%d'%(year,month)
handle_hk(year, month)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment