Commit a4e4cd97 authored by data—王林芳's avatar data—王林芳

Merge remote-tracking branch 'origin/master'

parents d5c72ef2 a0054bba
...@@ -113,7 +113,7 @@ def proc_save(watch_date): ...@@ -113,7 +113,7 @@ def proc_save(watch_date):
if __name__ == '__main__': if __name__ == '__main__':
step = 10000 step = 10000
max_limit = 900000 max_limit = 900000
file_path = u'E:/审计出表/现金贷/1021' file_path = u'E:/审计出表/现金贷/1107'
file_name = u'现金贷收入确认表' file_name = u'现金贷收入确认表'
if not os.path.exists(file_path): if not os.path.exists(file_path):
os.makedirs(file_path) os.makedirs(file_path)
...@@ -134,15 +134,15 @@ if __name__ == '__main__': ...@@ -134,15 +134,15 @@ if __name__ == '__main__':
df_dunjiao[u'repaid_at'] = pd.to_datetime(df_dunjiao[u'repaid_at']).dt.date 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) df_ms.loan_id = df_ms.loan_id.astype(str)
db_names = ['all_back_0630', 'all_back_0731', 'all_back_0831', 'new_transaction'] # db_names = ['all_back_0630', 'all_back_0731', 'all_back_0831', 'new_transaction']
date_report_list = [ # 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, 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, 6, 1), datetime.date(2017, 7, 1)],
[datetime.date(2017, 8, 1)], # [datetime.date(2017, 8, 1)],
[datetime.date(2017, 9, 1)], # [datetime.date(2017, 9, 1)],
[datetime.date(2017, 10, 1)]] # [datetime.date(2017, 10, 1)]]
# db_names = ['new_transaction',] db_names = ['2017-11-01',]
# date_report_list = [[datetime.date(2017, 10, 1)],] date_report_list = [[datetime.date(2017, 11, 1)],]
for i in xrange(len(db_names)): for i in xrange(len(db_names)):
db_name = db_names[i] db_name = db_names[i]
date_list = date_report_list[i] date_list = date_report_list[i]
...@@ -150,7 +150,7 @@ if __name__ == '__main__': ...@@ -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_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_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 df_loan[u'放款日期'] = pd.to_datetime(df_loan[u'放款日期']).dt.date
......
...@@ -32,12 +32,13 @@ if not os.path.exists(file_path): ...@@ -32,12 +32,13 @@ if not os.path.exists(file_path):
os.makedirs(file_path) os.makedirs(file_path)
mysql = sql_engine('audit', 'new_transaction', False).get_engine() mysql = sql_engine('audit', 'new_transaction', False).get_engine()
sql_loan_plan = """SELECT sql_loan_plan = """
SELECT
lm.ref_id, lm.ref_id,
lm.funding_code, lm.funding_code,
fc.name 资金方, fc.name 资金方,
lm.loan_id, lm.loan_id,
lc0912.class 风险等级, lc.class 风险等级,
lm.contract_loan_amount 本金债权, lm.contract_loan_amount 本金债权,
date(lm.loan_paid_at) 放款日期, date(lm.loan_paid_at) 放款日期,
year(lm.loan_paid_at) 年, year(lm.loan_paid_at) 年,
...@@ -50,14 +51,14 @@ sql_loan_plan = """SELECT ...@@ -50,14 +51,14 @@ sql_loan_plan = """SELECT
rc.approach_name 还款账户, rc.approach_name 还款账户,
rr.repay_channel_flow_id 流水号 rr.repay_channel_flow_id 流水号
FROM %s.xjd_repay_plan_repay_record_ref xrprrr 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 ON rr.record_id = xrprrr.record_id AND rr.repay_channel = xrprrr.repay_channel
AND rr.repaid_at >= '%s' AND rr.repaid_at < '%s' AND rr.repaid_at >= '%s' AND rr.repaid_at < '%s'
JOIN new_transaction.repay_channel rc ON rc.id = xrprrr.repay_channel 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.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 %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 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 = """ sql_yghs = """
...@@ -66,7 +67,7 @@ SELECT ...@@ -66,7 +67,7 @@ SELECT
lm.funding_code, lm.funding_code,
fc.name 资金方, fc.name 资金方,
lm.loan_id, lm.loan_id,
lc0912.class 风险等级, lc.class 风险等级,
lm.contract_loan_amount 本金债权, lm.contract_loan_amount 本金债权,
date(lm.loan_paid_at) 放款日期, date(lm.loan_paid_at) 放款日期,
year(lm.loan_paid_at) 年, year(lm.loan_paid_at) 年,
...@@ -82,7 +83,7 @@ FROM new_transaction.yg_huishang_repay_term t ...@@ -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 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' AND t.repay_date >= '%s' AND t.repay_date < '%s'
JOIN basic.funding_corp fc ON fc.funding_code = lm.funding_code 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 = """ sql_dunjiao = """
...@@ -91,7 +92,7 @@ SELECT ...@@ -91,7 +92,7 @@ SELECT
lm.funding_code, lm.funding_code,
fc.name 资金方, fc.name 资金方,
lm.loan_id, lm.loan_id,
lc0912.class 风险等级, lc.class 风险等级,
lm.contract_loan_amount 本金债权, lm.contract_loan_amount 本金债权,
date(lm.loan_paid_at) 放款日期, date(lm.loan_paid_at) 放款日期,
year(lm.loan_paid_at) 年, year(lm.loan_paid_at) 年,
...@@ -105,13 +106,13 @@ SELECT ...@@ -105,13 +106,13 @@ SELECT
rr.repay_channel_flow_id 流水号 rr.repay_channel_flow_id 流水号
FROM new_transaction.xjd_dunjiao_plan_ref xdpr FROM new_transaction.xjd_dunjiao_plan_ref xdpr
JOIN new_transaction.xjd_dunjiao_plan xdp ON xdp.id = xdpr.plan_id 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 ON rr.record_id = xdpr.record_id AND rr.repay_channel = xdpr.repay_channel
AND rr.repaid_at >= '%s' AND rr.repaid_at < '%s' AND rr.repaid_at >= '%s' AND rr.repaid_at < '%s'
JOIN new_transaction.repay_channel rc ON rc.id = xdpr.repay_channel 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 audit.loan_manifest lm ON lm.ref_id = xdp.ref_id
JOIN basic.funding_corp fc ON fc.funding_code = lm.funding_code 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'实还服务费', res_cols = [u'资金方', u'loan_id', u'风险等级', u'本金债权', u'放款日期', 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 ...@@ -26,7 +26,7 @@ max_limit = 900000
pd.options.mode.chained_assignment = None pd.options.mode.chained_assignment = None
pd.set_option('display.float_format', lambda x: '%.5f' % x) pd.set_option('display.float_format', lambda x: '%.5f' % x)
db_names = ['audit_temp'] db_names = ['audit_temp']
end_dates = [datetime.date(2017, 7, 1)] end_dates = [datetime.date(2017, 11, 1)]
file_path = u'E:/审计出表/现金贷/1021' file_path = u'E:/审计出表/现金贷/1021'
if not os.path.exists(file_path): if not os.path.exists(file_path):
...@@ -65,11 +65,11 @@ SELECT ...@@ -65,11 +65,11 @@ SELECT
xrprrr.service_fee - xrprrr.mitigate_service_fee `实还服务费(减免后)`, xrprrr.service_fee - xrprrr.mitigate_service_fee `实还服务费(减免后)`,
xrprrr.punish - xrprrr.mitigate_collection_relief 实还罚息, xrprrr.punish - xrprrr.mitigate_collection_relief 实还罚息,
xrprrr.remain_income 其他收益, 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 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 JOIN %s.user_repayment_plan urp ON urp.id = xrprrr.plan_id
WHERE xrprrrrd.repaid_at < '%s'; WHERE rra.repaid_at < '%s';
""" """
sql_ms = """ sql_ms = """
SELECT SELECT
......
...@@ -15,7 +15,6 @@ from db_con.db_connect import sql_engine ...@@ -15,7 +15,6 @@ from db_con.db_connect import sql_engine
pd.options.mode.chained_assignment = None pd.options.mode.chained_assignment = None
pd.set_option('display.float_format', lambda x: '%.5f' % x) pd.set_option('display.float_format', lambda x: '%.5f' % x)
mysql = sql_engine('audit', 'audit').get_engine() mysql = sql_engine('audit', 'audit').get_engine()
mysql_analysis = sql_engine('analysis', 'analysis_tmp', False).get_engine()
sql_loan = """SELECT sql_loan = """SELECT
fpd.product_no 产品编号, fpd.product_no 产品编号,
...@@ -24,9 +23,9 @@ sql_loan = """SELECT ...@@ -24,9 +23,9 @@ sql_loan = """SELECT
fpd.loan_time 放款时间, fpd.loan_time 放款时间,
year(fpd.loan_time) 年, year(fpd.loan_time) 年,
month(fpd.loan_time) 月 month(fpd.loan_time) 月
FROM qunaer_new.fund_pay_detail fpd FROM qunaer_new.pay_detail fpd
JOIN qunaer_new.fund_corp fc ON fc.fund_code = fpd.fund_code 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.status = 1 AND fpd.loan_time >= '2017-08-01' and fpd.loan_time < '2017-11-01';
""" """
sql_ref = """SELECT sql_ref = """SELECT
...@@ -35,7 +34,7 @@ sql_ref = """SELECT ...@@ -35,7 +34,7 @@ sql_ref = """SELECT
rd.repay_fee_amount 实还服务费, rd.repay_fee_amount 实还服务费,
rd.repay_time 还款时间 rd.repay_time 还款时间
FROM qunaer_new.repay_detail rd 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 sql_tui = """SELECT
...@@ -44,11 +43,11 @@ sql_tui = """SELECT ...@@ -44,11 +43,11 @@ sql_tui = """SELECT
-refund_principle 退款服务费, -refund_principle 退款服务费,
refund_time 退款时间 refund_time 退款时间
FROM qunaer_new.refund_detail 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 = """ 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 = """ sql_ratio = """
...@@ -77,7 +76,7 @@ step = 5000 ...@@ -77,7 +76,7 @@ step = 5000
ref_ids = tuple(df_loan['产品编号'].astype(str).unique()) ref_ids = tuple(df_loan['产品编号'].astype(str).unique())
res = [] res = []
for i in xrange(0, len(ref_ids), step): 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) res.append(tmp)
df_class = pd.concat(res) df_class = pd.concat(res)
df_class.drop_duplicates(['产品编号'], inplace=True) df_class.drop_duplicates(['产品编号'], inplace=True)
...@@ -88,8 +87,8 @@ print(tuple(df_loan.loc[df_loan['风险等级'].isnull(), '产品编号'].astype ...@@ -88,8 +87,8 @@ print(tuple(df_loan.loc[df_loan['风险等级'].isnull(), '产品编号'].astype
df_loan = pd.merge(df_loan, df_ratio, on=['风险等级', '年', '月']) df_loan = pd.merge(df_loan, df_ratio, on=['风险等级', '年', '月'])
df_loan['计提风险金'] = 0 df_loan['计提风险金'] = 0
view_dates = [datetime.date(2017, 9, 1), datetime.date(2017, 10, 1)] view_dates = [datetime.date(2017, 9, 1), datetime.date(2017, 10, 1), datetime.date(2017, 11, 1)]
file_path = 'E:/审计出表/白条/收入确认表' file_path = 'E:/审计出表/白条/收入确认表/1108'
res_sum = [] res_sum = []
for v_date in view_dates: for v_date in view_dates:
last_day = v_date + datetime.timedelta(days=-1) last_day = v_date + datetime.timedelta(days=-1)
......
...@@ -15,7 +15,6 @@ from db_con.db_connect import sql_engine ...@@ -15,7 +15,6 @@ from db_con.db_connect import sql_engine
pd.options.mode.chained_assignment = None pd.options.mode.chained_assignment = None
pd.set_option('display.float_format', lambda x: '%.5f' % x) pd.set_option('display.float_format', lambda x: '%.5f' % x)
mysql = sql_engine('audit', 'audit', False).get_engine() mysql = sql_engine('audit', 'audit', False).get_engine()
mysql_analysis = sql_engine('analysis', 'analysis_tmp', False).get_engine()
# todo: is_active = -2 的订单,按哪个时间来关联风险金比例 # todo: is_active = -2 的订单,按哪个时间来关联风险金比例
sql_loan = """ sql_loan = """
...@@ -24,27 +23,15 @@ SELECT ...@@ -24,27 +23,15 @@ SELECT
bo.ref_id, bo.ref_id,
fc.fund_name 资金方, fc.fund_name 资金方,
bo.loan_paid_at 放款时间, 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) 年, year(bo.loan_paid_at) 年,
month(bo.loan_paid_at) 月, month(bo.loan_paid_at) 月,
bo.funding_loan_amount 放款金额, bo.funding_loan_amount 放款金额,
bo.is_active bo.is_active
FROM baitiao_audit.baitiao_order bo FROM baitiao_audit.baitiao_order bo
JOIN baitiao_audit.fund_corp fc 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' ON fc.id = bo.funding_corp_id AND bo.funding_corp_id = 5 AND bo.is_active in (1, -2)
UNION ALL AND bo.loan_paid_at >= '2017-08-01' AND bo.loan_paid_at < '2017-11-01'
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';
""" """
sql_ref = """SELECT sql_ref = """SELECT
...@@ -63,7 +50,7 @@ FROM new_transaction.baitiao_repay_plan_repay_record_ref brprrr ...@@ -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""" JOIN new_transaction.repay_channel rc ON rc.id = brprrr.repay_channel"""
sql_class = """ 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 = """ sql_ratio = """
...@@ -83,16 +70,17 @@ df_repay = pd.concat(res) ...@@ -83,16 +70,17 @@ df_repay = pd.concat(res)
df_ratio = pd.read_sql(sql=sql_ratio, con=mysql) df_ratio = pd.read_sql(sql=sql_ratio, con=mysql)
step = 5000 step = 5000
ref_ids = tuple(df_loan.ref_id.astype(str).unique()) order_nos = tuple(df_loan['产品编号'].astype(str).unique())
res = [] res = []
for i in xrange(0, len(ref_ids), step): for i in xrange(0, len(order_nos), 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(order_nos[i:i + step]).replace(',)', ')')), con=mysql)
res.append(tmp) res.append(tmp)
df_class = pd.concat(res) df_class = pd.concat(res)
df_class.ref_id = df_class.ref_id.astype(int) df_class.drop_duplicates(['产品编号'], inplace=True)
df_loan = pd.merge(df_loan, df_class, on='ref_id', how='left') df_loan = pd.merge(df_loan, df_class, on='产品编号', how='left')
print('{}, {}'.format(len(ref_ids), df_class.ref_id.nunique()))
print(tuple(df_loan.loc[df_loan['风险等级'].isnull(), 'ref_id'].astype(str))) 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 = pd.merge(df_loan, df_ratio, on=['风险等级', '年', '月'])
df_loan['计提风险金'] = np.round(df_loan['放款金额'] * df_loan['计提风险金比例'], 2) df_loan['计提风险金'] = np.round(df_loan['放款金额'] * df_loan['计提风险金比例'], 2)
...@@ -100,11 +88,11 @@ df_loan['计提风险金'] = np.round(df_loan['放款金额'] * df_loan['计提 ...@@ -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_loan.groupby([df_loan['资金方'], df_loan['放款时间'].dt.month])['放款金额'].agg('sum').reset_index())
print(df_repay.groupby(df_repay['还款时间'].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)] view_dates = [datetime.date(2017, 9, 1), datetime.date(2017, 10, 1), datetime.date(2017, 11, 1)]
file_path = 'E:/审计出表/白条/收入确认表' file_path = 'E:/审计出表/白条/收入确认表/1108'
res_sum = [] res_sum = []
for v_date in view_dates: 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] 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'] 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: ...@@ -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 = df_loan_v[[u'放款金额', u'计提风险金', u'实还服务费', u'assets', u'收入']].agg('sum').to_frame().T
tmp_sum[u'截止时间'] = v_date tmp_sum[u'截止时间'] = v_date
res_sum.append(tmp_sum) 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, 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') encoding='gbk')
df_sum = pd.concat(res_sum) df_sum = pd.concat(res_sum)
df_sum.to_excel(os.path.join(file_path, '白条非去哪儿汇总.xlsx'), index=None) 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: ()
...@@ -5,8 +5,6 @@ import pandas as pd ...@@ -5,8 +5,6 @@ import pandas as pd
import numpy as np import numpy as np
import datetime import datetime
from sqlalchemy import create_engine from sqlalchemy import create_engine
import pyexcelerate
max_limit = 800000
reload(sys) reload(sys)
sys.setdefaultencoding('utf8') sys.setdefaultencoding('utf8')
...@@ -14,12 +12,9 @@ sys.setdefaultencoding('utf8') ...@@ -14,12 +12,9 @@ sys.setdefaultencoding('utf8')
engine_new_transaction = create_engine( engine_new_transaction = create_engine(
'mysql+mysqldb://internal_r:ArbNgtvlJzZHXsEu@172.16.3.201:3306/all_back_0930?charset=utf8', echo=True) 'mysql+mysqldb://internal_r:ArbNgtvlJzZHXsEu@172.16.3.201:3306/all_back_0930?charset=utf8', echo=True)
#假如导出10月份的数据,则end_point 是11月份第一天,watch_point 是10月份最后一天
end_point = '2017-10-01' end_point = '2017-10-01'
watch_point = datetime.date(2017, 9, 30) watch_point = datetime.date(2017, 9, 30)
out_file_path = u'E:/数据汇总/白条/在贷/'
out_file_path = u'E:/审计出表/11月份开始使用表数据/11月份白条出表/在贷/'
query_loan = """ query_loan = """
SELECT SELECT
tt.order_no,tt.term_no, tt.order_no,tt.term_no,
...@@ -109,7 +104,7 @@ loan_info = """ ...@@ -109,7 +104,7 @@ loan_info = """
date(o.train_cancel_at) loan_paid_at date(o.train_cancel_at) loan_paid_at
FROM FROM
baitiao_order o baitiao_order o
JOIN merchant m ON o.merchantId = m.merchant_id AND is_active=1 AND funding_corp_id = -2 JOIN merchant m ON o.merchantId = m.merchant_id AND funding_corp_id=1 AND is_active = -2
GROUP BY 1 GROUP BY 1
)tt )tt
GROUP BY 1 GROUP BY 1
...@@ -200,6 +195,7 @@ select tt.order_no,tt.term_no,tt.paid_principle from( ...@@ -200,6 +195,7 @@ select tt.order_no,tt.term_no,tt.paid_principle from(
GROUP BY 1,2 GROUP BY 1,2
)tt )tt
GROUP BY 1,2 GROUP BY 1,2
""" """
df_info = pd.read_sql(loan_info, engine_new_transaction) df_info = pd.read_sql(loan_info, engine_new_transaction)
...@@ -209,7 +205,6 @@ df_ali = pd.read_sql(repay_ali % end_point, engine_new_transaction) ...@@ -209,7 +205,6 @@ 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_bank = pd.read_sql(repay_bank % end_point, engine_new_transaction)
df_cash = pd.read_sql(repay_cash % (end_point, end_point), engine_new_transaction) df_cash = pd.read_sql(repay_cash % (end_point, end_point), engine_new_transaction)
df_repay = pd.concat([df_online, df_ali, df_bank, df_cash], axis=0, ignore_index=True) df_repay = pd.concat([df_online, df_ali, df_bank, df_cash], axis=0, ignore_index=True)
df_repay.dropna(axis=0, inplace=True) df_repay.dropna(axis=0, inplace=True)
df_loan = df_loan.loc[df_loan['principle'] > 0] df_loan = df_loan.loc[df_loan['principle'] > 0]
df_info.order_no = df_info.order_no.astype(str) df_info.order_no = df_info.order_no.astype(str)
...@@ -221,9 +216,6 @@ df_repay = df_repay.groupby(['order_no', 'term_no'])['paid_principle'].agg({'sum ...@@ -221,9 +216,6 @@ df_repay = df_repay.groupby(['order_no', 'term_no'])['paid_principle'].agg({'sum
df_out = pd.merge(df_loan, df_repay, on=['order_no', 'term_no'], how='left') 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['deadline'] = pd.to_datetime(df_out.deadline)
df_out.fillna(0, inplace=True) df_out.fillna(0, inplace=True)
# watch_point = datetime.date(2017, 9, 30)
df_out['flag'] = (watch_point-df_out['deadline']).dt.days
df_out['zaidai'] = df_out['principle'] - df_out['paid_principle'] df_out['zaidai'] = df_out['principle'] - df_out['paid_principle']
df_out.loc[df_out['order_no'].isin( df_out.loc[df_out['order_no'].isin(
['trainmall1483695024282', 'trainmall1484301600672', 'trainmall1486362269554', 'trainmall1487920296689', ['trainmall1483695024282', 'trainmall1484301600672', 'trainmall1486362269554', 'trainmall1487920296689',
...@@ -231,38 +223,14 @@ df_out.loc[df_out['order_no'].isin( ...@@ -231,38 +223,14 @@ df_out.loc[df_out['order_no'].isin(
'trainmall1484301600672', 'trainmall1486362269554', 'grabtrainmall1484650405321', 'trainmall1495785791995', 'trainmall1484301600672', 'trainmall1486362269554', 'grabtrainmall1484650405321', 'trainmall1495785791995',
'trainmall1499935282194', 'trainmall16008368458050561', 'trainmall16008408858634241', 'trainmall1499935282194', 'trainmall16008368458050561', 'trainmall16008408858634241',
'trainmall16112348780571649', 'trainmall16112552463312897']), 'zaidai'] = 0 'trainmall16112348780571649', 'trainmall16112552463312897']), 'zaidai'] = 0
#只在17年使用的部分,调账使用
'''
df_out.loc[df_out['product_no']=='300156290067001502503609','flag'] = 1
'''
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']
# df_out['zaidai'] = df_out['zaidai'].apply(lambda x: np.round(x, 2)) # df_out['zaidai'] = df_out['zaidai'].apply(lambda x: np.round(x, 2))
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 = df_out.groupby(['order_no'])['zaidai'].agg({'sum'}).reset_index().rename(columns={'sum': u'未还本金'})
df.fillna(0,inplace=True)
df_loan.order_no = df_loan.order_no.astype(str) df_loan.order_no = df_loan.order_no.astype(str)
df = pd.merge(df, df_info, on='order_no', how='left') df = pd.merge(df, df_info, on='order_no', how='left')
df = df[[u'商户', 'order_no', u'订单金额', u'合同期数', u'放款时间', u'未还本金']]
df.rename(columns={'order_no': u'订单号' df[u'未还本金'].fillna(0, inplace=True)
}, inplace=True) df.rename(columns={'order_no': u'订单号'}, inplace=True)
step = 1000000
df = df[[u'商户', u'订单号', u'订单金额', u'合同期数', u'放款时间','0','01-30','31-60','61-90','91-120','121-150','151-180','181-360','361+']] for n in range(0, len(df), step):
df[n:n + step].to_csv(out_file_path + u'白条在贷按order_no展开_%s.csv' % (end_point, n), index=None, encoding='UTF-8')
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(out_file_path + u'白条在贷按order_no展开_%s.xlsx' % end_point)
# df.to_csv(out_file_path + u'白条在贷按order_no展开_%s.csv' % end_point, index=None, encoding='UTF-8')
...@@ -81,7 +81,7 @@ loan_info = """ ...@@ -81,7 +81,7 @@ loan_info = """
date(o.train_cancel_at) loan_paid_at date(o.train_cancel_at) loan_paid_at
FROM FROM
baitiao_order o 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 JOIN merchant m ON o.merchantId = m.merchant_id AND o.funding_corp_id=1 AND o.is_active = -2 and o.baitiao_type=0
GROUP BY 1 GROUP BY 1
)tt )tt
GROUP BY 1 GROUP BY 1
......
#@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)
...@@ -11,18 +11,18 @@ reload(sys) ...@@ -11,18 +11,18 @@ reload(sys)
sys.setdefaultencoding('utf8') sys.setdefaultencoding('utf8')
engine_new_transaction = create_engine( engine_new_transaction = create_engine(
'mysql+mysqldb://yulong_rw:TouBStYwN8wkdxVt@172.16.3.201:3306/new_transaction?charset=utf8', 'mysql+mysqldb://shiyao.zhu:#jkl9oplYUGuo99@172.16.3.201:3306/new_transaction?charset=utf8',
echo=True) echo=True)
engine_xyqb = create_engine('mysql+mysqldb://syzhu_data_r:ulk0989742097y43@192.168.4.6:8066/xyqb?charset=utf8', engine_xyqb = create_engine('mysql+mysqldb://syzhu_data_r:ulk0989742097y43@192.168.4.6:8066/xyqb?charset=utf8',
echo=True) echo=True)
start_time = '2017-08-01' start_time = '2017-08-01'
end_time = '2017-10-01' end_time = '2017-11-01'
end_y = 2017 end_y = 2017
end_m = 10 end_m = 11
end_date = datetime.date(end_y, end_m, 1) end_date = datetime.date(end_y, end_m, 1)
path = u'E:/数据汇总/白条/每日赔付/' path = u'E:/数据汇总/白条/每日赔付/2017-10/'
# 还资金方还款计划 # 还资金方还款计划
loan_plan_hk = ''' loan_plan_hk = '''
SELECT t.day_hk,SUM(t.plan_all) plan_all from( SELECT t.day_hk,SUM(t.plan_all) plan_all from(
...@@ -84,7 +84,8 @@ loan_hk_online = ''' ...@@ -84,7 +84,8 @@ loan_hk_online = '''
(ifnull(t1.principle,0)-ifnull(t1.mitigate_principle,0))>0 (ifnull(t1.principle,0)-ifnull(t1.mitigate_principle,0))>0
and t2.bill_time >= '%s' and t2.bill_time >= '%s'
and t2.bill_time < '%s' and t2.bill_time < '%s'
GROUP BY 1,2 ''' GROUP BY 1,2
'''
loan_hk_ali = ''' loan_hk_ali = '''
SELECT DATE(t2.transfer_time) repaid_at,DATE(plan.deadline) deadline , SELECT DATE(t2.transfer_time) repaid_at,DATE(plan.deadline) deadline ,
...@@ -182,7 +183,6 @@ def spread_date(funding_code): ...@@ -182,7 +183,6 @@ def spread_date(funding_code):
zbj_amount, start_time, end_time), zbj_amount, start_time, end_time),
engine_new_transaction) engine_new_transaction)
df_zbj.rename(columns={'plan_all': 'zbj_plan_all'}, inplace=True) df_zbj.rename(columns={'plan_all': 'zbj_plan_all'}, inplace=True)
df_plan.fillna(0, inplace=True) df_plan.fillna(0, inplace=True)
df_online = pd.read_sql(repay_online % (start_time, end_time), engine_new_transaction) df_online = pd.read_sql(repay_online % (start_time, end_time), engine_new_transaction)
df_ali = pd.read_sql(repay_alipay % (start_time, end_time), engine_new_transaction) df_ali = pd.read_sql(repay_alipay % (start_time, end_time), engine_new_transaction)
...@@ -231,7 +231,7 @@ def spread_date(funding_code): ...@@ -231,7 +231,7 @@ def spread_date(funding_code):
'tx_plan_all': '提现账户应还资方本息', 'sr_plan_all': '收入账户应还资方本息', 'tx_plan_all': '提现账户应还资方本息', 'sr_plan_all': '收入账户应还资方本息',
'zbj_plan_all': '质保金账户应还资方本息', 'zbj_yq_principle': '质保金账户客户逾期还款本金', 'zbj_plan_all': '质保金账户应还资方本息', 'zbj_yq_principle': '质保金账户客户逾期还款本金',
'zbj_tq_principle': '质保金账户客户提前可用本金'}, inplace=True) 'zbj_tq_principle': '质保金账户客户提前可用本金'}, inplace=True)
df_hk_new.to_excel(path + str(funding_code) + '按日期展开10-09.xlsx', index=None, columns=df_hk_new.columns, df_hk_new.to_excel(path + str(funding_code) + '按日期展开2017-10.xlsx', index=None, columns=df_hk_new.columns,
encoding='utf8') encoding='utf8')
......
# -*- 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
#
# 表名称:
# 现金贷-每月到期本金利息
#表字段:
# 资金方 放款年 放款月 到期年 到期月 客户应还本金 客户应还利息
# 数据库:
# new_transaction,loan_manifest,fund_corp,loan_class_contract_1002
# 注意事项:
# 出来的表为汇总表
#
file_path = u'E:/审计出表/现金贷-放款表(1月份-6月份)-当前库/'
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_xjd = '''
SELECT
fund.`name` 资金方,
class.class 风险等级,
YEAR (loan.loan_paid_at) 放款年,
MONTH (loan.loan_paid_at) 放款月,
YEAR (plan.deadline) 到期年,
MONTH (plan.deadline) 到期月,
SUM(plan.principle) 客户应还本金,
SUM(plan.interest) 客户应还利息
FROM
new_transaction.user_repayment_plan plan
JOIN basic.loan_manifest loan ON plan.ref_id = loan.ref_id
JOIN basic.loan_class_contract_1002 class ON class.ref_id = loan.ref_id
JOIN basic.funding_corp fund ON fund.funding_code = loan.funding_code
WHERE
loan.is_active IN (1 ,- 2)
GROUP BY 1,2,3,4,5,6;
'''
df_bt = pd.read_sql(sql_xjd,engine_xjd)
df_bt.to_excel(file_path+u'现金贷每月到期本金利息.xlsx',index=False)
if __name__ == '__main__':
print '--------main begin'
xjd_principle_interest()
print '________main done'
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
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