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

Merge remote-tracking branch 'origin/master'

Conflicts:
	审计第二阶段/现金贷/现金贷-每月到期本金利息.py
parents 017b38c6 1e004421
# coding: utf-8
import sys
import pandas as pd
import numpy as np
from sqlalchemy import create_engine
import pyexcelerate
max_limit = 800000
stdout = sys.stdout
sys.stdout = stdout
# 引入数据库连接,并使修改生效
pd.options.mode.chained_assignment = None
pd.set_option('display.float_format', lambda x: '%.5f' % x)
mysql_engine = create_engine(
'mysql+mysqldb://internal_r:ArbNgtvlJzZHXsEu@172.16.4.60:3306/new_transaction?charset=utf8', echo=True)
# 获取当前时间,用于创建文件路径,分类存储文件
start_time = '2017-10-01'
end_time = '2017-11-01'
out_file_path = u'E:/审计出表/11月份开始使用表数据/11月份白条出表/'
sql_baoli = """
SELECT
concat(bo.order_no, ubrp.term_no) 唯一编号,
m.merchant_name 商户名称,
bo.order_no 产品编号,
fc.fund_name 资金方,
bo.contract_term 放款期数,
ubrp.term_no 当前期数,
date(rr.repaid_at) 实还时间,
brprrr.ref_amount 还款总额,
brprrr.principle - brprrr.mitigate_principle 实还本金,
0.0 实还利息,
brprrr.interest - brprrr.mitigate_interest 实还服务费,
brprrr.punish - brprrr.mitigate_collection_relief 实还罚息,
brprrr.remain_income 其他收益,
rr.repay_channel_flow_id 流水号,
rc.approach_name 还款账户,
rr.amount 账单金额,
date(ubrp.deadline) 应还日期,
ubrp.principle 应还本金,
0.0 应还利息
FROM baitiao_repay_plan_repay_record_ref brprrr
JOIN test_mzh.repay_record_amount rr ON rr.record_id = brprrr.record_id AND rr.repay_channel = brprrr.repay_channel AND rr.repaid_at >= '%s' AND rr.repaid_at < '%s'
JOIN user_bt_repayment_plan ubrp ON ubrp.id = brprrr.plan_id
JOIN baitiao_audit.baitiao_order bo ON bo.ref_id = ubrp.ref_id AND bo.is_active IN(1,-2,0)
JOIN baitiao_audit.merchant m ON m.merchant_id = bo.merchantId
JOIN baitiao_audit.fund_corp fc ON fc.id = bo.funding_corp_id AND bo.funding_corp_id=1
JOIN new_transaction.repay_channel rc ON rc.id = brprrr.repay_channel
"""
sql_zhitou = """
SELECT
concat(bo.order_no, ubrp.term_no) 唯一编号,
m.merchant_name 商户名称,
bo.order_no 产品编号,
fc.fund_name 资金方,
bo.contract_term 放款期数,
ubrp.term_no 当前期数,
date(rr.repaid_at) 实还时间,
brprrr.ref_amount 还款总额,
brprrr.principle - brprrr.mitigate_principle 实还本金,
0.0 实还利息,
brprrr.interest - brprrr.mitigate_interest 实还服务费,
brprrr.punish - brprrr.mitigate_collection_relief 实还罚息,
brprrr.remain_income 其他收益,
rr.repay_channel_flow_id 流水号,
rc.approach_name 还款账户,
rr.amount 账单金额,
date(bfrp.deadline) 应还日期,
bfrp.principal 应还本金,
bfrp.interest 应还利息
FROM baitiao_repay_plan_repay_record_ref brprrr
JOIN test_mzh.repay_record_amount rr ON rr.record_id = brprrr.record_id AND rr.repay_channel = brprrr.repay_channel AND rr.repaid_at >= '%s' AND rr.repaid_at < '%s'
JOIN user_bt_repayment_plan ubrp ON ubrp.id = brprrr.plan_id
JOIN bt_funding_repayment_plan bfrp ON ubrp.repayment_plan_id =bfrp.repay_plan_id AND ubrp.sys_tag='XYQB_BILL_BT'
JOIN baitiao_audit.baitiao_order bo ON bo.ref_id = ubrp.ref_id AND bo.funding_corp_id=5 AND bo.is_active IN(1,-2)
JOIN baitiao_audit.merchant m ON m.merchant_id = bo.merchantId
JOIN baitiao_audit.fund_corp fc ON fc.id = bo.funding_corp_id
JOIN new_transaction.repay_channel rc ON rc.id = brprrr.repay_channel
"""
sql_zhitou_tuikuan = """
SELECT
concat(bo.order_no, ubrp.term_no) 唯一编号,
m.merchant_name 商户名称,
bo.order_no 产品编号,
fc.fund_name 资金方,
bo.contract_term 放款期数,
ubrp.term_no 当前期数,
date(rr.repaid_at) 实还时间,
brprrr.ref_amount 还款总额,
brprrr.principle - brprrr.mitigate_principle 实还本金,
0.0 实还利息,
brprrr.interest - brprrr.mitigate_interest 实还服务费,
brprrr.punish - brprrr.mitigate_collection_relief 实还罚息,
brprrr.remain_income 其他收益,
rr.repay_channel_flow_id 流水号,
rc.approach_name 还款账户,
rr.amount 账单金额,
date(ubrp.deadline) 应还日期,
ubrp.principle 应还本金,
0.0 应还利息
FROM baitiao_repay_plan_repay_record_ref brprrr
JOIN test_mzh.repay_record_amount rr ON rr.record_id = brprrr.record_id AND rr.repay_channel = brprrr.repay_channel AND rr.repaid_at >= '%s' AND rr.repaid_at < '%s'
JOIN user_bt_repayment_plan ubrp ON ubrp.id = brprrr.plan_id
JOIN baitiao_audit.baitiao_order bo ON bo.ref_id = ubrp.ref_id AND bo.is_active=-2
JOIN baitiao_audit.merchant m ON m.merchant_id = bo.merchantId
JOIN baitiao_audit.fund_corp fc ON fc.id = bo.funding_corp_id AND bo.funding_corp_id=5
JOIN new_transaction.repay_channel rc ON rc.id = brprrr.repay_channel
"""
df_bl = pd.read_sql(sql_baoli % (start_time, end_time), con=mysql_engine)
df_zt = pd.read_sql(sql_zhitou % (start_time, end_time), con=mysql_engine)
# 直投白条线下退款
df_zt_tk = pd.read_sql(sql_zhitou_tuikuan % (start_time, end_time), con=mysql_engine)
df = pd.concat([df_bl, df_zt, df_zt_tk], ignore_index=True)
sql_cash_repay = """
SELECT
bo.order_no 唯一编号,
m.merchant_name 商户名称,
bo.order_no 产品编号,
fc.fund_name 资金方,
bo.contract_term 放款期数,
1 当前期数,
date(rra.repaid_at) 实还时间,
bcrr.ref_amount 还款总额,
bcrr.ref_amount 实还本金,
0 实还利息,
0 实还服务费,
0 实还罚息,
0 其他收益,
rra.repay_channel_flow_id 流水号,
rc.approach_name 还款账户,
rra.amount 账单金额,
'' 应还日期,
bo.real_loan_amount 应还本金,
0.0 应还利息
FROM new_transaction.baitiao_cash_repay bcr
JOIN (SELECT repay_id,record_id,repay_channel,sum(ref_amount)ref_amount FROM new_transaction.baitiao_cash_record_ref GROUP BY 1,2) bcrr ON bcrr.repay_id = bcr.id
JOIN test_mzh.repay_record_amount rra ON rra.record_id = bcrr.record_id AND rra.amount=bcrr.ref_amount AND bcrr.repay_channel IN(18,24) AND rra.repaid_at >= '%s' AND rra.repaid_at < '%s'
JOIN baitiao_audit.baitiao_order bo ON bo.ref_id = bcr.ref_id AND bo.is_active IN(1,-2)
JOIN baitiao_audit.merchant m ON m.merchant_id = bo.merchantId
JOIN baitiao_audit.fund_corp fc ON fc.id = bo.funding_corp_id
JOIN new_transaction.repay_channel rc ON rc.id = bcrr.repay_channel;
"""
df_cash_repay = pd.read_sql(sql=sql_cash_repay % (start_time, end_time), con=mysql_engine)
tmp = df.append(df_cash_repay)
tmp.loc[tmp[u'唯一编号'].duplicated(), [u'应还本金', u'应还利息']] = 0
tmp.loc[tmp[[u'流水号', u'还款账户']].duplicated(), [u'账单金额']] = 0
tmp[u'应还本息-实还本息'] = np.round(tmp[u'应还本金'] - tmp[u'实还本金'] + tmp[u'应还利息'] - tmp[u'实还利息'], 2)
tmp[u'还款总额-账单金额'] = np.round(tmp[u'还款总额'] - tmp[u'账单金额'], 2)
date_range = pd.date_range(start=start_time, end=end_time, freq='MS')
cnt = 0
for i in xrange(0, len(date_range) - 1):
tmp = df.loc[(df[u'实还时间'] >= date_range[i].date()) & (df[u'实还时间'] < date_range[i + 1].date())]
cnt += len(tmp)
cash_tmp = df_cash_repay.loc[
(df_cash_repay[u'实还时间'] >= date_range[i].date()) & (df_cash_repay[u'实还时间'] < date_range[i + 1].date())]
if len(cash_tmp) > 0:
tmp = tmp.append(cash_tmp)
print date_range[i].year, date_range[i].month, len(tmp), tmp[u'还款总额'].sum()
tmp.loc[tmp[u'唯一编号'].duplicated(), [u'应还本金', u'应还利息']] = 0
tmp.loc[tmp[[u'流水号', u'还款账户']].duplicated(), [u'账单金额']] = 0
tmp[u'应还本息-实还本息'] = np.round(tmp[u'应还本金'] - tmp[u'实还本金'] + tmp[u'应还利息'] - tmp[u'实还利息'], 2)
tmp[u'还款总额-账单金额'] = np.round(tmp[u'还款总额'] - tmp[u'账单金额'], 2)
tmp = tmp[
[u'唯一编号', u'商户名称', u'产品编号', u'资金方', u'放款期数', u'当前期数', u'实还时间', u'还款总额', u'实还本金', u'实还利息', u'实还服务费', u'实还罚息',
u'其他收益', u'流水号', u'还款账户', u'账单金额', u'应还日期', u'应还本金', u'应还利息', u'应还本息-实还本息', u'还款总额-账单金额']]
tmp.to_csv(out_file_path + u'人工控制-普通白条-客户实还表(按还款时间)(%s-%02d).csv' % (date_range[i].year, date_range[i].month),
index=None, encoding='utf8')
all_wb = pyexcelerate.Workbook()
for i in xrange(0, len(tmp), max_limit):
temp = tmp[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'人工控制-普通白条-客户实还表(按还款时间)(%s-%02d).xlsx' % (date_range[i].year, date_range[i].month))
print cnt, len(df)
loan_baoli = """
SELECT
concat(bo.order_no, ubrp.term_no) 唯一编号,
m.merchant_name 商户名称,
bo.order_no 产品编号,
fc.fund_name 资金方,
bo.contract_term 放款期数,
ubrp.term_no 当前期数,
date(rr.repaid_at) 实还时间,
brprrr.ref_amount 还款总额,
brprrr.principle - brprrr.mitigate_principle 实还本金,
0.0 实还利息,
brprrr.interest - brprrr.mitigate_interest 实还服务费,
brprrr.punish - brprrr.mitigate_collection_relief 实还罚息,
brprrr.remain_income 其他收益,
rr.repay_channel_flow_id 流水号,
rc.approach_name 还款账户,
rr.amount 账单金额,
date(ubrp.deadline) 应还日期,
ubrp.principle 应还本金,
0.0 应还利息,
date(bo.loan_paid_at) 放款日期
FROM baitiao_repay_plan_repay_record_ref brprrr
JOIN test_mzh.repay_record_amount rr ON rr.record_id = brprrr.record_id AND rr.repay_channel = brprrr.repay_channel
JOIN user_bt_repayment_plan ubrp ON ubrp.id = brprrr.plan_id
JOIN baitiao_audit.baitiao_order bo ON bo.ref_id = ubrp.ref_id AND bo.is_active=1 AND bo.funding_corp_id=1 AND bo.loan_paid_at >= '%s' AND bo.loan_paid_at < '%s'
JOIN baitiao_audit.merchant m ON m.merchant_id = bo.merchantId
JOIN baitiao_audit.fund_corp fc ON fc.id = bo.funding_corp_id
JOIN new_transaction.repay_channel rc ON rc.id = brprrr.repay_channel
UNION ALL
SELECT
concat(bo.order_no, ubrp.term_no) 唯一编号,
m.merchant_name 商户名称,
bo.order_no 产品编号,
fc.fund_name 资金方,
bo.contract_term 放款期数,
ubrp.term_no 当前期数,
date(rr.repaid_at) 实还时间,
brprrr.ref_amount 还款总额,
brprrr.principle - brprrr.mitigate_principle 实还本金,
0 实还利息,
brprrr.interest - brprrr.mitigate_interest 实还服务费,
brprrr.punish - brprrr.mitigate_collection_relief 实还罚息,
brprrr.remain_income 其他收益,
rr.repay_channel_flow_id 流水号,
rc.approach_name 还款账户,
rr.amount 账单金额,
date(ubrp.deadline) 应还日期,
ubrp.principle 应还本金,
0 应还利息,
date(bo.train_cancel_at) 放款日期
FROM baitiao_repay_plan_repay_record_ref brprrr
JOIN test_mzh.repay_record_amount rr ON rr.record_id = brprrr.record_id AND rr.repay_channel = brprrr.repay_channel
JOIN user_bt_repayment_plan ubrp ON ubrp.id = brprrr.plan_id
JOIN baitiao_audit.baitiao_order bo ON bo.ref_id = ubrp.ref_id AND bo.is_active = -2 AND bo.funding_corp_id=1 AND bo.train_cancel_at >= '%s' AND bo.train_cancel_at < '%s'
JOIN baitiao_audit.merchant m ON m.merchant_id = bo.merchantId
JOIN baitiao_audit.fund_corp fc ON fc.id = bo.funding_corp_id
JOIN new_transaction.repay_channel rc ON rc.id = brprrr.repay_channel
"""
loan_zhitou = """
SELECT
concat(bo.order_no, ubrp.term_no) 唯一编号,
m.merchant_name 商户名称,
bo.order_no 产品编号,
fc.fund_name 资金方,
bo.contract_term 放款期数,
ubrp.term_no 当前期数,
date(rr.repaid_at) 实还时间,
brprrr.ref_amount 还款总额,
brprrr.principle - brprrr.mitigate_principle 实还本金,
0.0 实还利息,
brprrr.interest - brprrr.mitigate_interest 实还服务费,
brprrr.punish - brprrr.mitigate_collection_relief 实还罚息,
brprrr.remain_income 其他收益,
rr.repay_channel_flow_id 流水号,
rc.approach_name 还款账户,
rr.amount 账单金额,
date(bfrp.deadline) 应还日期,
bfrp.principal 应还本金,
bfrp.interest 应还利息,
date(bo.loan_paid_at) 放款日期
FROM baitiao_repay_plan_repay_record_ref brprrr
JOIN test_mzh.repay_record_amount rr
ON rr.record_id = brprrr.record_id AND rr.repay_channel = brprrr.repay_channel
JOIN user_bt_repayment_plan ubrp ON ubrp.id = brprrr.plan_id
JOIN bt_funding_repayment_plan bfrp ON ubrp.repayment_plan_id =bfrp.repay_plan_id AND ubrp.sys_tag='XYQB_BILL_BT'
JOIN baitiao_audit.baitiao_order bo ON bo.ref_id = ubrp.ref_id AND bo.is_active=1 AND bo.funding_corp_id=5 AND bo.loan_paid_at >= '%s' AND bo.loan_paid_at < '%s'
JOIN baitiao_audit.merchant m ON m.merchant_id = bo.merchantId
JOIN baitiao_audit.fund_corp fc ON fc.id = bo.funding_corp_id
JOIN new_transaction.repay_channel rc ON rc.id = brprrr.repay_channel
UNION ALL
SELECT
concat(bo.order_no, ubrp.term_no) 唯一编号,
m.merchant_name 商户名称,
bo.order_no 产品编号,
fc.fund_name 资金方,
bo.contract_term 放款期数,
ubrp.term_no 当前期数,
date(rr.repaid_at) 实还时间,
brprrr.ref_amount 还款总额,
brprrr.principle - brprrr.mitigate_principle 实还本金,
0 实还利息,
brprrr.interest - brprrr.mitigate_interest 实还服务费,
brprrr.punish - brprrr.mitigate_collection_relief 实还罚息,
brprrr.remain_income 其他收益,
rr.repay_channel_flow_id 流水号,
rc.approach_name 还款账户,
rr.amount 账单金额,
date(bfrp.deadline) 应还日期,
bfrp.principal 应还本金,
bfrp.interest 应还利息,
date(bo.train_cancel_at) 放款日期
FROM baitiao_repay_plan_repay_record_ref brprrr
JOIN test_mzh.repay_record_amount rr ON rr.record_id = brprrr.record_id AND rr.repay_channel = brprrr.repay_channel
JOIN user_bt_repayment_plan ubrp ON ubrp.id = brprrr.plan_id
JOIN bt_funding_repayment_plan bfrp ON ubrp.repayment_plan_id =bfrp.repay_plan_id AND ubrp.sys_tag='XYQB_BILL_BT'
JOIN baitiao_audit.baitiao_order bo ON bo.ref_id = ubrp.ref_id AND bo.is_active = -2 AND bo.funding_corp_id=5 AND bo.train_cancel_at >= '%s' AND bo.train_cancel_at < '%s'
JOIN baitiao_audit.merchant m ON m.merchant_id = bo.merchantId
JOIN baitiao_audit.fund_corp fc ON fc.id = bo.funding_corp_id
JOIN new_transaction.repay_channel rc ON rc.id = brprrr.repay_channel
"""
# 直投线下退款
loan_zhitou_apli = """
SELECT
concat(bo.order_no, ubrp.term_no) 唯一编号,
m.merchant_name 商户名称,
bo.order_no 产品编号,
fc.fund_name 资金方,
bo.contract_term 放款期数,
ubrp.term_no 当前期数,
date(rr.repaid_at) 实还时间,
brprrr.ref_amount 还款总额,
brprrr.principle - brprrr.mitigate_principle 实还本金,
0 实还利息,
brprrr.interest - brprrr.mitigate_interest 实还服务费,
brprrr.punish - brprrr.mitigate_collection_relief 实还罚息,
brprrr.remain_income 其他收益,
rr.repay_channel_flow_id 流水号,
rc.approach_name 还款账户,
rr.amount 账单金额,
date(ubrp.deadline) 应还日期,
ubrp.principle 应还本金,
0 应还利息,
date(bo.train_cancel_at) 放款日期
FROM baitiao_repay_plan_repay_record_ref brprrr
JOIN test_mzh.repay_record_amount rr ON rr.record_id = brprrr.record_id AND rr.repay_channel = brprrr.repay_channel
JOIN user_bt_repayment_plan ubrp ON ubrp.id = brprrr.plan_id
JOIN baitiao_audit.baitiao_order bo ON bo.ref_id = ubrp.ref_id AND bo.is_active = -2 AND bo.funding_corp_id=5 AND bo.train_cancel_at >= '%s' AND bo.train_cancel_at < '%s'
JOIN baitiao_audit.merchant m ON m.merchant_id = bo.merchantId
JOIN baitiao_audit.fund_corp fc ON fc.id = bo.funding_corp_id
JOIN new_transaction.repay_channel rc ON rc.id = brprrr.repay_channel
"""
df_bl = pd.read_sql(loan_baoli % (start_time, end_time, start_time, end_time), con=mysql_engine)
df_zt = pd.read_sql(loan_zhitou % (start_time, end_time, start_time, end_time), con=mysql_engine)
df_zt_apli = pd.read_sql(loan_zhitou_apli % (start_time, end_time), con=mysql_engine)
df_loan_repay = pd.concat([df_bl, df_zt, df_zt_apli], ignore_index=True)
sql_cash_loan_repay = """
SELECT
bo.order_no 唯一编号,
m.merchant_name 商户名称,
bo.order_no 产品编号,
fc.fund_name 资金方,
bo.contract_term 放款期数,
1 当前期数,
date(rra.repaid_at) 实还时间,
bcrr.ref_amount 还款总额,
bcrr.ref_amount 实还本金,
0 实还利息,
0 实还服务费,
0 实还罚息,
0 其他收益,
rra.repay_channel_flow_id 流水号,
rc.approach_name 还款账户,
rra.amount 账单金额,
'' 应还日期,
bo.real_loan_amount 应还本金,
0 应还利息,
date(bo.train_cancel_at) 放款日期
FROM baitiao_cash_record_ref bcrr
JOIN baitiao_cash_repay bcr ON bcrr.repay_id = bcr.id
JOIN test_mzh.repay_record_amount rra ON rra.record_id = bcrr.record_id AND rra.repay_channel IN(18,24) -- AND rra.repay_channel = bcrr.repay_channel
JOIN baitiao_audit.baitiao_order bo ON bo.ref_id = bcr.ref_id AND bo.is_active = -2 AND bo.train_cancel_at >= '%s' AND bo.train_cancel_at < '%s'
JOIN baitiao_audit.merchant m ON m.merchant_id = bo.merchantId
JOIN baitiao_audit.fund_corp fc ON fc.id = bo.funding_corp_id
JOIN new_transaction.repay_channel rc ON rc.id = bcrr.repay_channel
UNION ALL
SELECT
bo.order_no 唯一编号,
m.merchant_name 商户名称,
bo.order_no 产品编号,
fc.fund_name 资金方,
bo.contract_term 放款期数,
1 当前期数,
date(rra.repaid_at) 实还时间,
bcrr.ref_amount 还款总额,
bcrr.ref_amount 实还本金,
0 实还利息,
0 实还服务费,
0 实还罚息,
0 其他收益,
rra.repay_channel_flow_id 流水号,
rc.approach_name 还款账户,
rra.amount 账单金额,
'' 应还日期,
bo.real_loan_amount 应还本金,
0 应还利息,
date(bo.loan_paid_at) 放款日期
FROM baitiao_cash_record_ref bcrr
JOIN baitiao_cash_repay bcr ON bcrr.repay_id = bcr.id
JOIN test_mzh.repay_record_amount rra ON rra.record_id = bcrr.record_id AND rra.amount=bcrr.ref_amount AND rra.repay_channel IN(18,24) -- AND rra.repay_channel = bcrr.repay_channel
JOIN baitiao_audit.baitiao_order bo ON bo.ref_id = bcr.ref_id AND bo.is_active <> -2 AND bo.loan_paid_at >= '%s' AND bo.loan_paid_at < '%s'
JOIN baitiao_audit.merchant m ON m.merchant_id = bo.merchantId
JOIN baitiao_audit.fund_corp fc ON fc.id = bo.funding_corp_id
JOIN new_transaction.repay_channel rc ON rc.id = bcrr.repay_channel;
"""
df_cash_loan_repay = pd.read_sql(sql=sql_cash_loan_repay % (start_time, end_time, start_time, end_time),
con=mysql_engine)
date_range = pd.date_range(start=start_time, end=end_time, freq='MS')
cnt = 0
for i in xrange(0, len(date_range) - 1):
tmp = df_loan_repay.loc[
(df_loan_repay[u'放款日期'] >= date_range[i].date()) & (df_loan_repay[u'放款日期'] < date_range[i + 1].date())]
cash_tmp = df_cash_loan_repay.loc[(df_cash_loan_repay[u'放款日期'] >= date_range[i].date()) & (
df_cash_loan_repay[u'放款日期'] < date_range[i + 1].date())]
if len(cash_tmp) > 0:
tmp = tmp.append(cash_tmp)
del tmp[u'放款日期']
cnt += len(tmp)
tmp.loc[tmp[[u'唯一编号']].duplicated(), [u'应还本金']] = 0
tmp.loc[tmp[[u'流水号', u'还款账户', u'账单金额']].duplicated(), [u'账单金额']] = 0
print date_range[i].year, date_range[i].month, len(tmp), tmp[u'应还本金'].sum()
tmp[u'应还本息-实还本息'] = np.round(tmp[u'应还本金'] - tmp[u'实还本金'] + tmp[u'应还利息'] - tmp[u'实还利息'], 2)
tmp[u'还款总额-账单金额'] = np.round(tmp[u'还款总额'] - tmp[u'账单金额'], 2)
tmp = tmp[
[u'唯一编号', u'商户名称', u'产品编号', u'资金方', u'放款期数', u'当前期数', u'实还时间', u'还款总额', u'实还本金', u'实还利息', u'实还服务费', u'实还罚息',
u'其他收益', u'流水号', u'还款账户', u'账单金额', u'应还日期', u'应还本金', u'应还利息', u'应还本息-实还本息', u'还款总额-账单金额']]
tmp.to_csv(out_file_path + u'人工控制-普通白条-客户实还表(按放款时间)(%s-%02d).csv' % (date_range[i].year, date_range[i].month),
index=None, encoding='gbk')
all_wb = pyexcelerate.Workbook()
for i in xrange(0, len(tmp), max_limit):
temp = tmp[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'人工控制-普通白条-客户实还表(按放款时间)(%s-%02d).xlsx' % (date_range[i].year, date_range[i].month))
# tmp.to_excel(os.path.join(file_path, '客户实还表(放款时间%s-%02d).xlsx' % (date_range[i].year, date_range[i].month)), index=None)
print cnt, len(df_loan_repay)
\ No newline at end of file
# coding: utf-8
# Author: Perry_Zhu
import numpy as np
import pandas as pd
from sqlalchemy import create_engine
import pyexcelerate
max_limit = 800000
pd.options.mode.chained_assignment = None
pd.set_option('display.float_format', lambda x: '%.5f' % x)
engine_new_transaction = create_engine(
'mysql+mysqldb://internal_r:ArbNgtvlJzZHXsEu@172.16.4.60:3306/new_transaction?charset=utf8', echo=False)
start_time = '2017-10-01'
end_time = '2017-11-01'
out_file_path = u'E:/审计出表/11月份开始使用表数据/11月份白条出表/'
loan_baoli = """
select tt.ref_id,sum(tt.real_loan_amount) 放款金额,sum(contract_loan_amount)本金债权
from(
SELECT
bo.ref_id,
IFNULL(bo.real_loan_amount, 0) real_loan_amount,
IFNULL(bo.contract_loan_amount, 0) contract_loan_amount
FROM
baitiao_audit.baitiao_order bo
WHERE
bo.loan_paid_at >= '%s'
AND bo.loan_paid_at < '%s'
AND bo.is_active = 1
AND bo.funding_corp_id = 1
UNION ALL
SELECT
bo.ref_id,
IFNULL(bo.real_loan_amount, 0) real_loan_amount,
IFNULL(bo.contract_loan_amount, 0) contract_loan_amount
FROM
baitiao_audit.baitiao_order bo
WHERE
bo.train_cancel_at >= '%s'
AND bo.train_cancel_at < '%s'
AND bo.is_active =- 2
AND bo.funding_corp_id = 1
)tt
group by 1
"""
loan_zhitou = """
SELECT
t1.ref_id,
IFNULL(t1.funding_loan_amount, 0) real_loan_amount,
IFNULL(t1.contract_loan_amount, 0) contract_loan_amount
FROM
baitiao_audit.baitiao_order t1
WHERE
t1.batch_no_id is not null
AND funding_corp_id = 5
AND t1.is_active = 1
AND t1.loan_paid_at >= '%s'
AND t1.loan_paid_at < '%s'
UNION ALL
SELECT
t1.ref_id,
IFNULL(t1.funding_loan_amount, 0) real_loan_amount,
IFNULL(t1.contract_loan_amount, 0) contract_loan_amount
FROM
baitiao_audit.baitiao_order t1
WHERE
t1.batch_no_id is not null
AND funding_corp_id = 5
AND t1.is_active = -2
AND t1.train_cancel_at >= '%s'
AND t1.train_cancel_at < '%s'
"""
df_bl = pd.read_sql(loan_baoli % (start_time, end_time, start_time, end_time), engine_new_transaction)
df_zt = pd.read_sql(loan_zhitou % (start_time, end_time, start_time, end_time), engine_new_transaction)
df_loan = pd.concat([df_bl, df_zt], ignore_index=True)
query_plan_com = """
SELECT tt.order_no,tt.ref_id,tt.term_no,tt.fund_name 资金方,tt.merchant_name 商户名称,
min(tt.loan_paid_at)loan_paid_at,min(tt.contract_term)贷款总期数,
min(tt.deadline)应还时间,SUM(tt.principle)应还本金,SUM(tt.interest) 应还利息
FROM(
SELECT
bo.order_no,
bo.ref_id,
ubrp.term_no ,
fc.fund_name,
m.merchant_name,
date(bo.loan_paid_at)loan_paid_at,
bo.contract_term ,
date(ubrp.deadline) deadline,
ubrp.principle ,
0.0 interest
FROM
user_bt_repayment_plan ubrp
JOIN baitiao_audit.baitiao_order bo ON bo.ref_id = ubrp.ref_id AND bo.is_active =1 AND bo.funding_corp_id =1 AND bo.loan_paid_at >= '%s' AND bo.loan_paid_at < '%s'
JOIN baitiao_audit.fund_corp fc ON fc.id = bo.funding_corp_id
JOIN baitiao_audit.merchant m ON bo.merchantId = m.merchant_id
union all
SELECT
bo.order_no,
bo.ref_id,
ubrp.term_no ,
fc.fund_name,
m.merchant_name,
date(bo.train_cancel_at) loan_paid_at,
bo.contract_term ,
date(ubrp.deadline) ,
ubrp.principle ,
0.0 interest
FROM
user_bt_repayment_plan ubrp
JOIN baitiao_audit.baitiao_order bo ON bo.ref_id = ubrp.ref_id AND bo.is_active =-2 AND bo.funding_corp_id =1 AND bo.train_cancel_at >= '%s' AND bo.train_cancel_at < '%s'
JOIN baitiao_audit.fund_corp fc ON fc.id = bo.funding_corp_id
JOIN baitiao_audit.merchant m ON bo.merchantId = m.merchant_id
UNION ALL
SELECT
bo.order_no,
bo.ref_id,
ubrp.term_no,
fc.fund_name ,
m.merchant_name ,
date(bo.loan_paid_at)loan_paid_at,
bo.contract_term ,
date(ubrp.deadline),
bfrp.principal,
bfrp.interest interest
FROM
user_bt_repayment_plan ubrp
JOIN bt_funding_repayment_plan bfrp ON ubrp.repayment_plan_id = bfrp.repay_plan_id AND ubrp.sys_tag = 'XYQB_BILL_BT'
JOIN baitiao_audit.baitiao_order bo ON bo.ref_id = ubrp.ref_id
JOIN baitiao_audit.fund_corp fc ON fc.id = bo.funding_corp_id
JOIN baitiao_audit.merchant m ON bo.merchantId = m.merchant_id AND bo.is_active = 1 AND bo.funding_corp_id = 5
AND bo.loan_paid_at >= '%s' AND bo.loan_paid_at < '%s'
)tt
GROUP BY 1,2,3
"""
df_plan_com = pd.read_sql(query_plan_com % (start_time, end_time, start_time, end_time, start_time, end_time),
engine_new_transaction)
query_cash_plan = """
SELECT tt.order_no,tt.ref_id,1 term_no,tt.fund_name 资金方,tt.merchant_name 商户名称,min(tt.loan_paid_at)loan_paid_at,min(tt.contract_term)贷款总期数,
'' 应还时间,SUM(tt.principle)应还本金,0.0 应还利息
FROM (
SELECT
bo.order_no,
bo.ref_id,
fc.fund_name ,
m.merchant_name ,
date(bo.loan_paid_at)loan_paid_at,
bo.contract_term ,
bcr.real_order_amount principle
FROM
baitiao_cash_repay bcr
JOIN baitiao_audit.baitiao_order bo ON bo.ref_id = bcr.ref_id AND bo.is_active=1 AND bo.funding_corp_id= 1 AND bo.loan_paid_at >= '%s' AND bo.loan_paid_at < '%s'
JOIN baitiao_audit.fund_corp fc ON fc.id = bo.funding_corp_id
JOIN baitiao_audit.merchant m ON bo.merchantId = m.merchant_id
UNION ALL
SELECT
bo.order_no,
bo.ref_id,
fc.fund_name,
m.merchant_name,
date(bo.train_cancel_at) loan_paid_at,
bo.contract_term ,
bcr.real_order_amount principle
FROM
baitiao_cash_repay bcr
JOIN baitiao_audit.baitiao_order bo ON bo.ref_id = bcr.ref_id AND bo.is_active=-2 AND bo.funding_corp_id =1 AND bo.train_cancel_at >= '%s' AND bo.train_cancel_at < '%s'
JOIN baitiao_audit.fund_corp fc ON fc.id = bo.funding_corp_id
JOIN baitiao_audit.merchant m ON bo.merchantId = m.merchant_id
)tt
GROUP BY 1,2,3
"""
df_cash_plan = pd.read_sql(sql=query_cash_plan % (start_time, end_time, start_time, end_time),
con=engine_new_transaction)
df_plan = pd.concat([df_plan_com, df_cash_plan], ignore_index=True, axis=0)
df_loan['term_no'] = 1
df_plan.ref_id = df_plan.ref_id.astype(int)
df_plan.term_no = df_plan.term_no.astype(int)
df_loan.ref_id = df_loan.ref_id.astype(int)
df_loan.term_no = df_loan.term_no.astype(int)
df_loan_all = pd.merge(df_loan, df_plan, on=['ref_id', 'term_no'], how='right')
df_loan_all.fillna(0, inplace=True)
query_repay_com = """
SELECT tt.ref_id,tt.term_no,sum(tt.principle) 实还本金,0.00 实还利息,sum(plan_repay) '应还本息 - 实还本息' from(
SELECT
bo.ref_id,
ubrp.term_no ,
(brprrr.principle- ifnull(brprrr.mitigate_principle,0)) principle,
(ubrp.principle - brprrr.principle) plan_repay
FROM
baitiao_repay_plan_repay_record_ref brprrr
JOIN user_bt_repayment_plan ubrp ON ubrp.id = brprrr.plan_id
JOIN baitiao_audit.baitiao_order bo ON bo.ref_id = ubrp.ref_id AND bo.is_active =1 AND bo.funding_corp_id =1 AND bo.loan_paid_at >= '%s' AND bo.loan_paid_at < '%s'
UNION ALL
SELECT
bo.ref_id,
ubrp.term_no,
(brprrr.principle- ifnull(brprrr.mitigate_principle,0)) principle,
(ubrp.principle - brprrr.principle) plan_repay
FROM
baitiao_repay_plan_repay_record_ref brprrr
JOIN user_bt_repayment_plan ubrp ON ubrp.id = brprrr.plan_id
JOIN baitiao_audit.baitiao_order bo ON bo.ref_id = ubrp.ref_id AND bo.is_active =-2 AND bo.funding_corp_id =1 AND bo.train_cancel_at >= '%s' AND bo.train_cancel_at < '%s'
)tt
GROUP BY 1,2
"""
df_repay_com = pd.read_sql(query_repay_com % (start_time, end_time, start_time, end_time), engine_new_transaction)
query_repay_zt = """
SELECT tt.ref_id,tt.term_no,sum(tt.principle) 实还本金,sum(plan_repay) '应还本息 - 实还本息' from(
SELECT
bo.ref_id,
ubrp.term_no ,
(brprrr.principle- ifnull(brprrr.mitigate_principle,0)) principle,
(ubrp.principle - brprrr.principle) plan_repay
FROM
baitiao_repay_plan_repay_record_ref brprrr
JOIN user_bt_repayment_plan ubrp ON ubrp.id = brprrr.plan_id
JOIN baitiao_audit.baitiao_order bo ON bo.ref_id = ubrp.ref_id AND bo.is_active =1 AND bo.funding_corp_id =5 AND bo.loan_paid_at >= '%s' AND bo.loan_paid_at < '%s'
UNION ALL
SELECT
bo.ref_id,
ubrp.term_no,
(brprrr.principle- ifnull(brprrr.mitigate_principle,0)) principle,
(ubrp.principle - brprrr.principle) plan_repay
FROM
baitiao_repay_plan_repay_record_ref brprrr
JOIN user_bt_repayment_plan ubrp ON ubrp.id = brprrr.plan_id
JOIN baitiao_audit.baitiao_order bo ON bo.ref_id = ubrp.ref_id AND bo.is_active =-2 AND bo.funding_corp_id =5 AND bo.train_cancel_at >= '%s' AND bo.train_cancel_at < '%s'
)tt
GROUP BY 1,2
"""
df_repay_zt = pd.read_sql(query_repay_zt % (start_time, end_time, start_time, end_time), engine_new_transaction)
sql_cash_loan_repay = """
SELECT tt.ref_id,1 term_no,sum(tt.principle) 实还本金,sum(plan_repay) '应还本息 - 实还本息' FROM(
SELECT
bo.ref_id,
bcrr.ref_amount principle,
(bo.real_loan_amount - bcrr.ref_amount) plan_repay
FROM
new_transaction.baitiao_cash_repay bcr
JOIN (
SELECT
repay_id,
sum(ref_amount) ref_amount
FROM
new_transaction.baitiao_cash_record_ref
where repay_channel in(18,24)
GROUP BY
1
) bcrr ON bcrr.repay_id = bcr.id
JOIN baitiao_audit.baitiao_order bo ON bo.ref_id = bcr.ref_id AND bo.baitiao_type = 1 AND bo.loan_paid_at >= '%s' AND bo.loan_paid_at < '%s'
UNION ALL
SELECT
bo.ref_id,
bcrr.ref_amount principle,
(bo.real_loan_amount - bcrr.ref_amount) plan_repay
FROM
baitiao_cash_repay bcr
JOIN (
SELECT
repay_id,
sum(ref_amount) ref_amount
FROM
baitiao_cash_record_ref
where repay_channel =13
GROUP BY 1
) bcrr ON bcrr.repay_id = bcr.id
JOIN baitiao_audit.baitiao_order bo ON bo.ref_id = bcr.ref_id
AND bo.is_active = -2 AND bo.train_cancel_at >= '%s' AND bo.train_cancel_at < '%s'
)tt
GROUP BY 1,2
"""
df_cash_loan_repay = pd.read_sql(sql=sql_cash_loan_repay % (start_time, end_time, start_time, end_time),
con=engine_new_transaction)
df_repay = pd.concat([df_repay_com, df_repay_zt, df_cash_loan_repay], ignore_index=True, axis=0)
# df_repay.ref_id = df_repay.ref_id.astype(int)
df_repay.term_no = df_repay.term_no.astype(int)
# df_loan_all.ref_id = df_loan_all.ref_id.astype(int)
df_loan_all.term_no = df_loan_all.term_no.astype(int)
df = pd.merge(df_loan_all, df_repay, on=['ref_id', 'term_no'], how='left')
df.loc[df['ref_id'].duplicated(), [u'放款金额', u'本金债权']] = 0
# df.loc[tmp[['ref_id', 'term_no',u'放款金额']].duplicated(), [u'放款金额']] = 0
# df.loc[tmp[['ref_id', 'term_no',u'本金债权']].duplicated(), [u'本金债权']] = 0
df.rename(columns={'loan_paid_at': u'放款时间', 'order_no': u'唯一编码', 'term_no': u'应还期数'}, inplace=True)
df.drop(['ref_id'], axis=1, inplace=True)
df[u'实还本金'].fillna(0, inplace=True)
df[u'应还本息 - 实还本息'].fillna(0, inplace=True)
date_range = pd.date_range(start=start_time, end=end_time, freq='MS')
cnt = 0
for i in xrange(0, len(date_range) - 1):
tmp = df.loc[(df[u'放款时间'] >= date_range[i].date()) & (df[u'放款时间'] < date_range[i + 1].date())]
tmp[u'本金债权'] = tmp[u'本金债权'].apply(lambda x: np.round(x, 2))
tmp[u'实还本金'] = tmp[u'实还本金'].apply(lambda x: np.round(x, 2))
tmp = tmp[
[u'唯一编码', u'商户名称', u'资金方', u'放款时间', u'放款金额', u'本金债权', u'贷款总期数', u'应还期数', u'应还时间', u'应还本金', u'应还利息', u'实还本金',
u'实还利息', u'应还本息 - 实还本息']]
tmp[u'实还利息'] = 0.00
tmp.to_csv(out_file_path + u'人工控制-非去哪放款表(放款时间%s-%02d)V2.csv' % (date_range[i].year, date_range[i].month),
index=None, encoding='GBK')
all_wb = pyexcelerate.Workbook()
for i in xrange(0, len(tmp), max_limit):
temp = tmp[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'人工控制-普通白条-放款表(%s-%02d).xlsx' % (date_range[i].year, date_range[i].month))
# -*- 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()
......@@ -13,12 +13,12 @@ pd.options.mode.chained_assignment = None
max_limit = 800000
import os
path = u'd:/Users/Desktop/test/'
engine_xjd = create_engine('mysql+mysqldb://internal_r:ArbNgtvlJzZHXsEu@172.16.3.201:3306/?charset=utf8',
path = u'E:/审计出表/11月份开始使用表数据/11月份现金贷出表/'
engine_xjd = create_engine('mysql+mysqldb://internal_r:ArbNgtvlJzZHXsEu@172.16.4.60:3306/?charset=utf8',
echo=False).connect()
def faster_sql_reader(sql):
cmdstr = 'mysql -h172.16.3.201 -uinternal_r -pArbNgtvlJzZHXsEu -P3306 -e "%s" > %s'
cmdstr = 'mysql -h172.16.4.60 -uinternal_r -pArbNgtvlJzZHXsEu -P3306 -e "%s" > %s'
file_name = 'test.txt'
path_file = os.path.join(os.getcwd(), file_name)
exe_sql = cmdstr % (sql.replace('`',''), path_file)
......@@ -45,8 +45,8 @@ sql_repay_frr_2 = '''
sum(urp.principle) 'principle',
sum(urp.interest) 'interest'
FROM all_back_0930.user_repayment_plan urp
JOIN all_back_0930.loan_manifest lm ON lm.ref_id = urp.ref_id
FROM new_transaction.user_repayment_plan urp
JOIN audit.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
......@@ -63,7 +63,7 @@ sql_repay_frr_3 = '''
sum(frp.interest) 'interest'
FROM audit.funding_repayment_plan frp
JOIN all_back_0930.loan_manifest lm ON lm.ref_id = frp.ref_id
JOIN audit.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
......@@ -75,10 +75,10 @@ SELECT t1.real_loan_id loan_id,date(lm.loan_paid_at) 'loan_paid_at',t1.ref_id,t1
t2.principle-t2.mitigate_principle 'repay_prin',t2.interest-t2.mitigate_interest 'repay_intes',
ifnull(t2.`service_fee`-t2.mitigate_service_fee,0) 'repay_fee',IFNULL(t2.`punish`-t2.mitigate_collection_relief, 0) 'repay_due',
t2.remain_income 'remain',t2.repay_channel,t6.order_id AS 'flow_no',t6.amount 'bank_amount',t1.service_fee 'service_fee',t1.required_repayment 'required_repayment'
FROM audit_temp.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 all_back_0930.loan_manifest lm ON lm.ref_id = t1.ref_id
FROM new_transaction.xjd_repay_plan_repay_record_ref t2
JOIN new_transaction.user_repayment_plan t1 ON t1.id=t2.plan_id
JOIN new_transaction.repay_record_online t6 ON t2.record_id=t6.id AND t2.repay_channel = t6.pay_approach
JOIN audit.loan_manifest lm ON lm.ref_id = t1.ref_id
WHERE lm.loan_paid_at >= '%s' AND lm.loan_paid_at < '%s'
'''
......@@ -88,10 +88,10 @@ SELECT t1.real_loan_id loan_id,date(lm.loan_paid_at) 'loan_paid_at',t1.ref_id,t1
t2.principle-t2.mitigate_principle 'repay_prin',t2.interest-t2.mitigate_interest 'repay_intes',
ifnull(t2.`service_fee`-t2.mitigate_service_fee,0) 'repay_fee',IFNULL(t2.`punish`-t2.mitigate_collection_relief, 0) 'repay_due',
t2.remain_income 'remain',t2.repay_channel,t6.business_flow 'flow_no',t6.income 'bank_amount',t1.service_fee 'service_fee',t1.required_repayment 'required_repayment'
FROM audit_temp.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 all_back_0930.loan_manifest lm ON lm.ref_id = t1.ref_id
FROM new_transaction.xjd_repay_plan_repay_record_ref t2
JOIN new_transaction.`user_repayment_plan` t1 ON t1.id=t2.plan_id
JOIN new_transaction.`offline_alipay_record` t6 ON t2.record_id=t6.id AND t2.repay_channel = 13
JOIN audit.loan_manifest lm ON lm.ref_id = t1.ref_id
WHERE lm.loan_paid_at >= '%s' AND lm.loan_paid_at < '%s'
'''
......@@ -101,10 +101,10 @@ SELECT t1.real_loan_id loan_id,date(lm.loan_paid_at) 'loan_paid_at',t1.ref_id,t1
t2.principle-t2.mitigate_principle 'repay_prin',t2.interest-t2.mitigate_interest 'repay_intes',
ifnull(t2.`service_fee`-t2.mitigate_service_fee,0) 'repay_fee',IFNULL(t2.`punish`-t2.mitigate_collection_relief, 0) 'repay_due',
t2.remain_income 'remain',t2.repay_channel,t6.transfer_amount 'bank_amount',t1.service_fee 'service_fee',t1.required_repayment 'required_repayment'
FROM audit_temp.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)
FROM new_transaction.xjd_repay_plan_repay_record_ref t2
JOIN new_transaction.`user_repayment_plan` t1 ON t1.id=t2.plan_id
JOIN audit.loan_manifest lm ON lm.ref_id = t1.ref_id
JOIN new_transaction.`offline_bank_repay_record` t6 ON t2.record_id=t6.id AND t2.repay_channel IN (14,15,16)
WHERE lm.loan_paid_at >= '%s' AND lm.loan_paid_at < '%s'
'''
......@@ -194,12 +194,12 @@ def handle_hk(year, month):
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'人工控制-现金贷-客户实还表-测试(%d-%02d).xlsx' % (start_time.year, start_time.month))
all_wb.save(path + u'人工控制-现金贷-客户实还表(%d-%02d).xlsx' % (start_time.year, start_time.month))
if __name__ == '__main__':
year = [2017]
month = range(9, 10, 1)
month = range(10, 11, 1)
for year, month in product(year, month):
print '____%d__%d' % (year, month)
......
......@@ -13,7 +13,7 @@ max_limit = 800000
import os
path = u'E:/审计出表/人工控制/现金贷-还款表-1010版本/'
engine_xjd = create_engine('mysql+mysqldb://internal_r:ArbNgtvlJzZHXsEu@172.16.3.201:3306/?charset=utf8',
engine_xjd = create_engine('mysql+mysqldb://internal_r:ArbNgtvlJzZHXsEu@172.16.4.60:3306/?charset=utf8',
echo=False).connect()
'''
......
......@@ -25,14 +25,15 @@ import os
# loan_manifest.is_active in (1,-2)
# 需要先进行数据的获取,需要时间较长,sql_repay_all中xrd.repaid_at同样需要修改
# sql_contract_no需要每月进行修改
path = u'1020_files/'
path = u'E:/审计出表/非去哪儿白条-客户实还表-1023版/'
engine_xjd = create_engine('mysql+mysqldb://internal_r:ArbNgtvlJzZHXsEu@172.16.3.201:3306/audit?charset=utf8',
path = u'E:/审计出表/11月份开始使用表数据/11月份现金贷出表/'
engine_xjd = create_engine('mysql+mysqldb://internal_r:ArbNgtvlJzZHXsEu@172.16.4.60:3306/audit?charset=utf8',
echo=False).connect()
def faster_sql_reader(sql):
cmdstr = 'mysql -h172.16.3.201 -uinternal_r -pArbNgtvlJzZHXsEu -P3306 -e "%s" > %s'
cmdstr = 'mysql -h172.16.4.60 -uinternal_r -pArbNgtvlJzZHXsEu -P3306 -e "%s" > %s'
file_name = 'test.txt'
path_file = os.path.join(os.getcwd(), file_name)
exe_sql = cmdstr % (sql.replace('`',''), path_file)
......@@ -48,7 +49,7 @@ def faster_sql_reader(sql):
sql_fund = '''
select frp.ref_id,frp.term_no 'term_no',date(frp.deadline) 'deadline',frp.principle+ifnull(frp.interest,0) 'prin_interes'
from audit.funding_repayment_plan frp
where frp.deadline >= '2017-01-01'
where frp.deadline >= '2017-10-01'
'''
df_fund = faster_sql_reader(sql_fund)
df_fund.rename(columns={'term_no':u'应还期数','deadline':u'应还资金方时间','prin_interes':u'应还资金方本息'},inplace=True)
......@@ -58,13 +59,13 @@ df_fund.rename(columns={'term_no':u'应还期数','deadline':u'应还资金方
#此部分不需要进行修改
sql_contract_no = '''
select ref_id,contract_no
from basic.loan_class_contract_1002 lco
from basic.loan_class_contract_201711 lco
'''
#10月05日修改为basic.loan_class_contract_1002
df_contract_no = faster_sql_reader(sql_contract_no)
sql_fund_name = '''
sql_fund_name = '''
select funding_code,name '资金方'
from basic.funding_corp
'''
......@@ -81,9 +82,9 @@ def mc_pay(year, month):
urp.term_no 'term_no',
sum(xrprrr.principle-IFNULL(xrprrr.mitigate_principle,0)+xrprrr.interest-IFNULL(xrprrr.mitigate_interest,0)) 'principle_interes',
sum(xrprrr.service_fee-IFNULL(xrprrr.mitigate_service_fee,0)) 'service_fee'
from audit_temp.xjd_repay_plan_repay_record_ref_0831 xrprrr
join all_back_0831.user_repayment_plan urp on xrprrr.plan_id = urp.id
join all_back_0831.loan_manifest lm on lm.ref_id = urp.ref_id
from new_transaction.xjd_repay_plan_repay_record_ref xrprrr
join new_transaction.user_repayment_plan urp on xrprrr.plan_id = urp.id
join audit.loan_manifest lm on lm.ref_id = urp.ref_id
where lm.loan_paid_at>='%s' and lm.loan_paid_at<'%s'
group by 1,2
''' %(start_time,end_time)
......@@ -168,7 +169,7 @@ def mc_pay(year, month):
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'人工控制-现金贷-放款表_测试(%d-%02d).xlsx' %(start_time.year,start_time.month))
all_wb.save(path+u'人工控制-现金贷-放款表(%d-%02d).xlsx' %(start_time.year,start_time.month))
# if len(df_pay) > max_limit:
......@@ -180,7 +181,7 @@ def mc_pay(year, month):
if __name__ == '__main__':
year = [2017]
month = range(1, 2, 1)
month = range(10, 11, 1)
for year, month in product(year, month):
mc_pay(year, month)
......@@ -52,7 +52,7 @@ import os
# 需要先进行数据的获取,需要时间较长,sql_repay_all中xrd.repaid_at同样需要修改
path = u'E:/审计出表/人工控制/现金贷-放款表/'
engine_xjd = create_engine('mysql+mysqldb://internal_r:ArbNgtvlJzZHXsEu@172.16.3.201:3306/audit?charset=utf8',
engine_xjd = create_engine('mysql+mysqldb://internal_r:ArbNgtvlJzZHXsEu@172.16.4.60:3306/audit?charset=utf8',
echo=False).connect()
#
# #使用时先要修改 deadline,如果出9月份的,deadline > = 2017-09-01即可
......
......@@ -14,7 +14,7 @@ pd.options.mode.chained_assignment = None
#此路径为服务器路径专用
# path = u'./hanzhenghui/'
path = u'E:/审计出表/人工控制/现金贷-还资金方表-1010版本/'
engine_xjd = create_engine('mysql+mysqldb://internal_r:ArbNgtvlJzZHXsEu@172.16.3.201:3306/?charset=utf8',
engine_xjd = create_engine('mysql+mysqldb://internal_r:ArbNgtvlJzZHXsEu@172.16.4.60:3306/?charset=utf8',
echo=False).connect()
max_limit = 800000
......
......@@ -13,16 +13,16 @@ sys.setdefaultencoding("utf-8")
pd.options.mode.chained_assignment = None
#此路径为服务器路径专用
path = u'E:/审计出表/人工控制/现金贷-还资金方表-1010版本/'
path = u'E:/审计出表/11月份开始使用表数据/11月份现金贷出表/'
# path = u'E:/审计出表/人工控制/现金贷-还资金方表-1010版本/'
engine_xjd = create_engine('mysql+mysqldb://internal_r:ArbNgtvlJzZHXsEu@172.16.3.201:3306/?charset=utf8',
engine_xjd = create_engine('mysql+mysqldb://internal_r:ArbNgtvlJzZHXsEu@172.16.4.60:3306/?charset=utf8',
echo=False).connect()
max_limit = 800000
def faster_sql_reader(sql):
cmdstr = 'mysql -h172.16.3.201 -uinternal_r -pArbNgtvlJzZHXsEu -P3306 -e "%s" > %s'
cmdstr = 'mysql -h172.16.4.60 -uinternal_r -pArbNgtvlJzZHXsEu -P3306 -e "%s" > %s'
file_name = 'test.txt'
path_file = os.path.join(os.getcwd(), file_name)
exe_sql = cmdstr % (sql.replace('`',''), path_file)
......@@ -37,7 +37,7 @@ def faster_sql_reader(sql):
sql_lm = '''
select ref_id,loan_id,funding_code,date(loan_paid_at) 'loan_paid_at',contract_term 'contract_term'
from all_back_0831.loan_manifest lm
from audit.loan_manifest lm
where loan_paid_at>='%s' and loan_paid_at <'%s'
and is_active in (1, -2)
'''
......@@ -56,8 +56,8 @@ sql_repay_frr_2 = '''
urp.term_no 'term_no',
date(urp.deadline) 'deadline',
urp.principle+urp.interest 'prin_intere'
from all_back_0831.user_repayment_plan urp
join all_back_0831.loan_manifest lm on lm.ref_id = urp.ref_id
from new_transaction.user_repayment_plan urp
join audit.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
......@@ -72,7 +72,7 @@ sql_repay_frr_3 = '''
frp.interest+frp.principle 'prin_intere'
from audit.funding_repayment_plan frp
join all_back_0831.loan_manifest lm on lm.ref_id = frp.ref_id
join audit.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
......@@ -89,8 +89,8 @@ sql_refund = '''
frr.flow_id 'flow_id',
frr.term_no 'term_no'
FROM
all_back_0831.funding_repayment_record frr
join all_back_0831.loan_manifest lm on lm.ref_id = frr.ref_id
audit.funding_repayment_record frr
join audit.loan_manifest lm on lm.ref_id = frr.ref_id
JOIN basic.funding_corp fc ON fc.funding_code = frr.funding_code
WHERE lm.loan_paid_at>='%s'
and lm.loan_paid_at <'%s'
......@@ -185,7 +185,7 @@ def refund(year,month):
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'人工控制-现金贷—还资金方表-V4(%d-%02d).xlsx' % (start_time.year, start_time.month))
all_wb.save(path + u'人工控制-现金贷—还资金方表(%d-%02d).xlsx' % (start_time.year, start_time.month))
# if len(df) > max_limit:
# for i in xrange(0, len(df), max_limit):
......@@ -196,7 +196,7 @@ def refund(year,month):
if __name__ == '__main__':
year = [2017]
month = range(4, 5, 1)
month = range(10, 11, 1)
for year, month in product(year, month):
print('-----------%s-%s begins') %(year,month)
......
......@@ -19,27 +19,27 @@ max_limit = 900000
注意 is_active = 1 的订单
使用之前需要先修改时间点,sql_query_flowid中的 t1.repaid_at,比如出9月份的表,t1.repaid_at<'2017-10-01'
'''
path = u'E:/审计出表/人工控制/现金贷-银行流水相关/'
engine_new_transaction = create_engine('mysql+mysqldb://internal_r:ArbNgtvlJzZHXsEu@172.16.3.201:3306/?charset=utf8',
path = u'E:/审计出表/11月份开始使用表数据/11月份现金贷出表/'
engine_new_transaction = create_engine('mysql+mysqldb://internal_r:ArbNgtvlJzZHXsEu@172.16.4.60:3306/?charset=utf8',
echo=False).connect()
# 还资金方流水明细--1
sql_query_flowid = """
SELECT DISTINCT t1.flow_id flow_id
FROM all_back_0930.funding_repayment_record t1
JOIN all_back_0930.loan_manifest t2 ON t1.ref_id = t2.ref_id AND t2.is_active = 1
FROM audit.funding_repayment_record t1
JOIN audit.loan_manifest t2 ON t1.ref_id = t2.ref_id AND t2.is_active = 1
AND t2.loan_paid_at >= '%s' AND t2.loan_paid_at < '%s'
AND t1.repaid_at < '2017-10-01' AND t1.lkb_to_fund_type = 2 AND t1.lkb2fund_id IS NOT NULL
AND t1.repaid_at < '2017-11-01' AND t1.lkb_to_fund_type = 2 AND t1.lkb2fund_id IS NOT NULL
"""
# 流水明细对应的实还资金方表
sql_query_detail = """
SELECT t1.loan_id,t2.`name` '资金方',date(t3.loan_paid_at) '放款时间',t1.term_no '期数',date(t1.repaid_at) '实还时间',t1.current_repayment '实还总额',
t1.principle '实还本金',t1.interest '实还利息',t1.flow_id '流水号'
FROM all_back_0930.funding_repayment_record t1
FROM audit.funding_repayment_record t1
JOIN new_transaction.funding_corp t2 ON t1.funding_code = t2.id
JOIN all_back_0930.loan_manifest t3 ON t1.ref_id = t3.ref_id AND t3.is_active =1 AND t1.lkb_to_fund_type = 2 AND t1.flow_id IN %s
JOIN audit.loan_manifest t3 ON t1.ref_id = t3.ref_id AND t3.is_active =1 AND t1.lkb_to_fund_type = 2 AND t1.flow_id IN %s
"""
'''
......@@ -110,7 +110,7 @@ if __name__ == '__main__':
# handle(2016, 12)
# pool = mtp.Pool(processes=6)
for year in [2017]:
for month in range(9,10,1):
for month in range(10,11,1):
handle(year,month)
# handle(year, month)
# pool.apply_async(handle, (year, month))
......
......@@ -22,15 +22,15 @@ pd.options.mode.chained_assignment = None
#
file_path = u'E:/审计出表/去哪儿/'
engine_xjd = create_engine('mysql+mysqldb://internal_r:ArbNgtvlJzZHXsEu@172.16.3.201:3306/audit?charset=utf8',
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.trans_time) 放款年,
MONTH (t2.trans_time) 放款月,
YEAR (t2.loan_time) 放款年,
MONTH (t2.loan_time) 放款月,
YEAR (t1.deadline) 到期年,
MONTH (t1.deadline) 到期月,
sum(t1.principle) 客户应还本金,
......@@ -38,7 +38,7 @@ def xjd_principle_interest():
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 = t1.fund_code
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;
......@@ -47,8 +47,8 @@ def xjd_principle_interest():
sql_quaer_2017 = '''
SELECT
fc.fund_name 资金方,
YEAR (t2.trans_time) 放款年,
MONTH (t2.trans_time) 放款月,
YEAR (t2.loan_time) 放款年,
MONTH (t2.loan_time) 放款月,
YEAR (t1.deadline) 到期年,
MONTH (t1.deadline) 到期月,
sum(t1.principle) 客户应还本金,
......@@ -56,37 +56,38 @@ def xjd_principle_interest():
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 = t1.fund_code
where t1.status in (1,2) AND t2.status = 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;
'''
sql_quaer_baoli = '''
SELECT
fc.fund_name 资金方,
YEAR (t2.trans_time) 放款年,
MONTH (t2.trans_time) 放款月,
'保理' 资金方,
YEAR (t2.loan_time) 放款年,
MONTH (t2.loan_time) 放款月,
YEAR (t1.deadline) 到期年,
MONTH (t1.deadline) 到期月,
sum(t1.principle) 客户应还本金,
sum(t1.fee_amount) 客户应还利息
FROM
qunaer_new.baoli_repayment_plan t1
JOIN qunaer_new.pay_detail t2 ON t1.product_no = t2.product_no
JOIN qunaer_new.fund_corp fc ON fc.fund_code = t1.fund_code
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;
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_2017,df_quaer_baoli],ignore_index=True)
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'去哪儿-每月到期本金利息-trans_time版本.xlsx',index=False)
df_quaer_all.to_excel(file_path+u'去哪儿-每月到期本金利息-11月份V2.xlsx',index=False)
if __name__ == '__main__':
print '--------main begin'
......
......@@ -9,7 +9,7 @@ from sqlalchemy import create_engine
reload(sys)
sys.setdefaultencoding('utf8')
engine_audit = create_engine('mysql+mysqldb://yulong:ohVU1nPITynSZwR2@172.16.3.201:3306/audit?charset=utf8',
engine_audit = create_engine('mysql+mysqldb://yulong:ohVU1nPITynSZwR2@172.16.4.60:3306/audit?charset=utf8',
echo=True)
query_repay = """
......
......@@ -21,8 +21,8 @@ pd.options.mode.chained_assignment = None
# 出来的表为汇总表
#
file_path = u'E:/'
engine_xjd = create_engine('mysql+mysqldb://internal_r:ArbNgtvlJzZHXsEu@172.16.3.201:3306/audit?charset=utf8',
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():
......@@ -38,7 +38,7 @@ def xjd_principle_interest():
SUM(plan.interest) 客户应还利息
FROM
new_transaction.user_repayment_plan plan
JOIN audit.loan_manifest loan ON plan.ref_id = loan.ref_id
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
......
......@@ -27,7 +27,7 @@ sys.setdefaultencoding('utf8')
path = u'E:/审计出表/现金贷-放款表(1月份-6月份)-当前库/'
engine_new_transaction = create_engine(
'mysql+mysqldb://internal_r:ArbNgtvlJzZHXsEu@172.16.3.201:3306/new_mashang?charset=utf8',
'mysql+mysqldb://internal_r:ArbNgtvlJzZHXsEu@172.16.4.60:3306/new_mashang?charset=utf8',
echo=True)
sql_query_detail = '''
......
......@@ -25,10 +25,10 @@ pd.options.mode.chained_assignment = None
#
path = u'E:/审计出表/11月份开始使用表数据/11月份现金贷出表/'
engine_xjd = create_engine('mysql+mysqldb://internal_r:ArbNgtvlJzZHXsEu@172.16.3.201:3306/?charset=utf8',
engine_xjd = create_engine('mysql+mysqldb://internal_r:ArbNgtvlJzZHXsEu@172.16.4.60:3306/?charset=utf8',
echo=False).connect()
def faster_sql_reader(sql):
cmdstr = 'mysql -h172.16.3.201 -uinternal_r -pArbNgtvlJzZHXsEu -P3306 -e "%s" > %s'
cmdstr = 'mysql -h172.16.4.60 -uinternal_r -pArbNgtvlJzZHXsEu -P3306 -e "%s" > %s'
file_name = 'test.txt'
path_file = os.path.join(os.getcwd(), file_name)
exe_sql = cmdstr % (sql.replace('`',''), path_file)
......@@ -92,10 +92,11 @@ def pay(year, month):
'dunjiao_service_fee':u'趸交服务费'},inplace=True)
df_lm = df_lm.fillna(0)
df_lm = df_lm[[u'资金方',u'loan_id',u'放款日期',u'放款金额',u'本金债权',u'一次性手续费(QG)',u'一次性手续费(点滴)',u'趸交服务费',u'贷款总期数',u'每期手续费',u'月利率',u'放款渠道',u'渠道流水号']]
print '---------%s_%s' % (year, month)
print "放款金额是:" + str(sum(df_lm[u'放款金额'])),u" 趸交服务费"+str(sum(df_lm[u'趸交服务费']))
all_wb = pyexcelerate.Workbook()
for i in xrange(0, len(df_lm), max_limit):
temp = df_lm[i:i + max_limit]
......
......@@ -26,7 +26,7 @@ pd.options.mode.chained_assignment = None
file_path = u'E:/审计出表/现金贷-放款表(1月份-6月份)-当前库/'
engine_xjd = create_engine('mysql+mysqldb://internal_r:ArbNgtvlJzZHXsEu@172.16.3.201:3306/?charset=utf8',
engine_xjd = create_engine('mysql+mysqldb://internal_r:ArbNgtvlJzZHXsEu@172.16.4.60:3306/?charset=utf8',
echo=False).connect()
def dunjiao(year,month):
......
......@@ -27,7 +27,7 @@ sys.setdefaultencoding('utf8')
path = u'E:/审计出表/现金贷-还款表(1月份-6月份)/'
engine_new_transaction = create_engine(
'mysql+mysqldb://internal_r:ArbNgtvlJzZHXsEu@172.16.3.201:3306/?charset=utf8',
'mysql+mysqldb://internal_r:ArbNgtvlJzZHXsEu@172.16.4.60:3306/?charset=utf8',
echo=True)
sql_query_detail = '''
......
......@@ -14,12 +14,11 @@ sys.setdefaultencoding("utf-8")
pd.options.mode.chained_assignment = None
def faster_sql_reader(sql):
cmdstr = 'mysql -h172.16.3.201 -uinternal_r -pArbNgtvlJzZHXsEu -P3306 -e "%s" > %s'
cmdstr = 'mysql -h172.16.4.60 -uinternal_r -pArbNgtvlJzZHXsEu -P3306 -e "%s" > %s'
file_name = 'test.txt'
path_file = os.path.join(os.getcwd(), file_name)
exe_sql = cmdstr % (sql.replace('`',''), path_file)
exe_sql = exe_sql.replace('\t','').replace('\n',' ')
print exe_sql
os.system(exe_sql)
try:
df = pd.read_csv(path_file, sep='\t',encoding='utf-8')
......@@ -40,7 +39,7 @@ def faster_sql_reader(sql):
# 趸交服务费需要添加到这个表里
#
file_path = u'E:/审计出表/11月份开始使用表数据/11月份现金贷出表/'
engine_xjd = create_engine('mysql+mysqldb://internal_r:ArbNgtvlJzZHXsEu@172.16.3.201:3306/audit?charset=utf8',
engine_xjd = create_engine('mysql+mysqldb://internal_r:ArbNgtvlJzZHXsEu@172.16.4.60:3306/audit?charset=utf8',
echo=False).connect()
read_fund_sql = '''
SELECT funding_code fund_corp_id,name fund_name FROM basic.funding_corp
......@@ -59,10 +58,10 @@ SELECT t1.fund_code,t2.repay_channel,t1.real_loan_id loan_id,t3.contract_term,da
t6.bill_time repaid_at,
t2.ref_amount,t2.principle-t2.mitigate_principle real_principle,t2.interest-t2.mitigate_interest real_interest,
ifnull(t2.`service_fee`-t2.mitigate_service_fee,0) real_service_fee,IFNULL(t2.`punish`-t2.mitigate_collection_relief, 0) real_punish,t2.remain_income,t6.order_id AS 'business_flow'
FROM audit_temp.`xjd_repay_plan_repay_record_ref` t2
JOIN audit_temp.`user_repayment_plan` t1 ON t1.id=t2.plan_id
FROM all_back_0731.`xjd_repay_plan_repay_record_ref_0731` t2
JOIN all_back_0731.`user_repayment_plan` t1 ON t1.id=t2.plan_id
JOIN all_back_0731.`loan_manifest` t3 ON t1.ref_id=t3.ref_id
JOIN audit_temp.repay_record_online t6 ON t2.record_id=t6.id AND t2.repay_channel = t6.pay_approach
JOIN all_back_0731.repay_record_online t6 ON t2.record_id=t6.id AND t2.repay_channel = t6.pay_approach
LEFT JOIN new_transaction.xjd_dunjiao_plan xdp ON xdp.loan_id = t1.real_loan_id
WHERE t6.bill_time >= '%s' AND t6.bill_time < '%s'
'''
......@@ -73,8 +72,8 @@ SELECT t1.fund_code,t2.repay_channel,t1.real_loan_id loan_id,t3.contract_term,da
t6.transfer_time repaid_at,
t2.ref_amount,t2.principle-t2.mitigate_principle real_principle,t2.interest-t2.mitigate_interest real_interest,
ifnull(t2.`service_fee`-t2.mitigate_service_fee,0) real_service_fee,ifnull(t2.`punish`-t2.mitigate_collection_relief,0) real_punish,t2.remain_income,t6.business_flow
FROM audit_temp.`xjd_repay_plan_repay_record_ref_0731` t2
JOIN audit_temp.`user_repayment_plan` t1 ON t1.id=t2.plan_id
FROM all_back_0731.`xjd_repay_plan_repay_record_ref_0731` t2
JOIN all_back_0731.`user_repayment_plan` t1 ON t1.id=t2.plan_id
JOIN all_back_0731.`loan_manifest` t3 ON t1.ref_id=t3.ref_id
JOIN all_back_0731.`offline_alipay_record` t6 ON t2.record_id=t6.id AND t2.repay_channel = 13
WHERE t6.transfer_time >= '%s' AND t6.transfer_time < '%s'
......@@ -86,8 +85,8 @@ SELECT t1.fund_code,t2.repay_channel,t1.real_loan_id loan_id,t3.contract_term,da
t6.transfer_time repaid_at,
t2.ref_amount,t2.principle-t2.mitigate_principle real_principle,t2.interest-t2.mitigate_interest real_interest,
ifnull(t2.`service_fee`-t2.mitigate_service_fee,0) real_service_fee,ifnull(t2.`punish`-t2.mitigate_collection_relief,0) real_punish,t2.remain_income
FROM audit_temp.`xjd_repay_plan_repay_record_ref` t2
JOIN audit_temp.`user_repayment_plan` t1 ON t1.id=t2.plan_id
FROM all_back_0731.`xjd_repay_plan_repay_record_ref_0731` t2
JOIN all_back_0731.`user_repayment_plan` t1 ON t1.id=t2.plan_id
JOIN all_back_0731.`loan_manifest` t3 ON t1.ref_id=t3.ref_id
JOIN all_back_0731.`offline_bank_repay_record` t6 ON t2.record_id=t6.id AND t2.repay_channel IN (14,15,16)
WHERE t6.transfer_time >= '%s' AND t6.transfer_time < '%s'
......@@ -109,11 +108,11 @@ def dunjiao(year, month):
rech.approach_name '还款渠道'
FROM
new_transaction.xjd_dunjiao_plan dj
join all_back_0930.loan_manifest lm on lm.loan_id = dj.loan_id
join all_back_0731.loan_manifest lm on lm.loan_id = dj.loan_id
join basic.funding_corp fc on fc.funding_code = lm.funding_code
join new_transaction.xjd_dunjiao_plan_ref xdpr on xdpr.plan_id = dj.id
join new_transaction.repay_channel rech on rech.id = xdpr.repay_channel
join all_back_0930.repay_record_online rro on rro.id = xdpr.record_id
join all_back_0731.repay_record_online rro on rro.id = xdpr.record_id
WHERE
dj.xyqb_repaid_at >= '%s'
......@@ -149,7 +148,7 @@ def handle_hk(year, month):
df.rename(
columns={'fund_name': u'资金方',
'contract_term': u'放款期数', 'term_no': u'当期数',
'contract_term': u'放款期数', 'term_no': u'当期数',
'repaid_at': u'实还款日', 'ref_amount': u'实还金额',
'real_principle': u'实还本金', 'real_interest': u'实还利息', 'real_service_fee': u'实还服务费',
'real_punish': u'实还罚息', 'remain_income': u'其他收益', 'approach_name': u'还款渠道', 'business_flow': u'渠道流水号'}, inplace=True)
......@@ -160,6 +159,8 @@ def handle_hk(year, month):
df_dunjiao = dunjiao(year,month)
df = pd.concat([df,df_dunjiao],axis=0)
df = df.fillna(0)
df = df[[u'资金方',u'loan_id',u'放款期数',u'当期期数',u'实还款日',u'实还金额',u'实还本金',u'实还利息',u'实还服务费',u'实还罚息',u'其他收益',u'还款渠道',u'渠道流水号']]
print '___%s-%s' % (year, month)
print(u'实还金额:', str(sum(df[u'实还金额'])))
......@@ -178,7 +179,7 @@ def handle_hk(year, month):
if __name__ == '__main__':
year = [2017]
month = range(9, 10, 1)
month = range(1, 5, 1)
for year, month in product(year, month):
handle_hk(year, month)
......@@ -6,7 +6,7 @@ import numpy as np
con_all_back = create_engine(
'mysql+mysqldb://internal_r:ArbNgtvlJzZHXsEu@172.16.3.201:3306/?charset=utf8', echo=False)
'mysql+mysqldb://internal_r:ArbNgtvlJzZHXsEu@172.16.4.60:3306/?charset=utf8', echo=False)
sql_query_xjd = """SELECT
oar.id "支付宝id",
......
......@@ -19,10 +19,11 @@ 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.3.201:3306/audit?charset=utf8',
engine_bt = create_engine('mysql+mysqldb://internal_r:ArbNgtvlJzZHXsEu@172.16.4.60:3306/audit?charset=utf8',
echo=False).connect()
def bt_principle_interest():
......@@ -48,8 +49,8 @@ def bt_principle_interest():
sql_bt_refund = '''
SELECT
fc.fund_name 资金方,
YEAR (bo.train_cancel_at) 放款年,
MONTH (bo.train_cancel_at) 放款月,
YEAR (bo.loan_paid_at) 放款年,
MONTH (bo.loan_paid_at) 放款月,
YEAR (plan.deadline) 到期年,
MONTH (plan.deadline) 到期月,
sum(plan.principle) 客户应还本金,
......@@ -59,7 +60,7 @@ def bt_principle_interest():
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 = 1
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;
'''
......@@ -75,7 +76,8 @@ def bt_principle_interest():
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;
where t1.baitiao_type=1
GROUP BY 1,2,3,4,5;
'''
df_bt = pd.read_sql(sql_bt,engine_bt)
......@@ -83,7 +85,11 @@ def bt_principle_interest():
df_cash = pd.read_sql(sql_cash_bt,engine_bt)
df = pd.concat([df_bt,df_bt_refund,df_cash],ignore_index=True)
df.to_excel(file_path+u'非去哪儿白条每月到期本金利息-V6.xlsx',index=False)
df.fillna(0,inplace=True)
result = df.groupby([u'资金方',u'放款年',u'放款月',u'到期年',u'到期月'])[u'客户应还本金',u'客户应还利息'].sum().reset_index()
result.to_excel(file_path+u'非去哪儿白条每月到期本金利息-V7.xlsx',index=False)
df.to_excel(file_path+u'非去哪儿白条每月到期本金利息明细版本-V7.xlsx',index=False)
if __name__ == '__main__':
print '--------main begin'
......
......@@ -45,7 +45,7 @@ GROUP BY DATE(t1.repaid_at)
# 客户正常还款+逾期还款,按照还款时间统计即可
sql_hk_online_zc = '''
SELECT DATE(t5.bill_time) day_hk ,sum(t1.`principle`+t1.`interest`-t1.`mitigate_principle`-t1.`mitigate_interest`) zc_real_all
FROM new_transaction.`xjd_repay_plan_repay_record_ref` t1
FROM `xjd_repay_plan_repay_record_ref` t1
JOIN new_transaction.`user_repayment_plan` t3 ON t1.plan_id = t3.id and t3.fund_code = %s AND t1.repay_channel != 13
JOIN audit.funding_repayment_record t4 ON t4.ref_id = t3.ref_id AND t4.term_no = t3.term_no
JOIN new_transaction.repay_record_online t5 ON t1.record_id = t5.id AND t1.repay_channel = t5.pay_approach and DATE(t5.bill_time) = DATE(t4.deadline)
......@@ -56,7 +56,7 @@ GROUP by 1
# 线上还款-逾期还款
sql_hk_online_yq = '''
SELECT DATE(t5.bill_time) day_hk, sum(t1.`principle`+t1.`interest`-t1.`mitigate_principle`-t1.`mitigate_interest`) yq_real_all
FROM new_transaction.`xjd_repay_plan_repay_record_ref` t1
FROM `xjd_repay_plan_repay_record_ref` t1
JOIN new_transaction.`user_repayment_plan` t3 ON t1.plan_id = t3.id and t3.fund_code = %s AND t1.repay_channel != 13
JOIN audit.funding_repayment_record t4 ON t4.ref_id = t3.ref_id AND t4.term_no = t3.term_no
JOIN new_transaction.repay_record_online t5 ON t1.record_id = t5.id AND t1.repay_channel = t5.pay_approach and DATE(t5.bill_time) > DATE(t4.deadline)
......@@ -67,7 +67,7 @@ GROUP by 1
sql_online_tq = '''
SELECT DATE(t4.deadline) deadline, sum(t1.`principle`+t1.`interest`-t1.`mitigate_principle`-t1.`mitigate_interest`) tq_amount
FROM new_transaction.`xjd_repay_plan_repay_record_ref` t1
FROM `xjd_repay_plan_repay_record_ref` t1
JOIN new_transaction.`user_repayment_plan` t3 ON t1.plan_id = t3.id and t3.fund_code = %s AND t1.repay_channel != 13
JOIN audit.funding_repayment_record t4 ON t4.ref_id = t3.ref_id AND t4.term_no = t3.term_no AND (t4.settle_status = 0 OR t4.repaid_at<"2017-05-01" )
join audit.loan_manifest t5 on t3.ref_id = t5.ref_id
......@@ -78,7 +78,7 @@ GROUP BY 1
sql_online_settle_tq = '''
SELECT DATE(t4.settle_date) repaid_at, SUM(t1.`principle`+t1.`interest`-t1.`mitigate_principle`-t1.`mitigate_interest`) settle_tq_amount
FROM new_transaction.`xjd_repay_plan_repay_record_ref` t1
FROM `xjd_repay_plan_repay_record_ref` t1
JOIN new_transaction.`user_repayment_plan` t3 ON t1.plan_id = t3.id and t3.fund_code = %s AND t1.repay_channel != 13
JOIN audit.funding_repayment_record t4 ON t4.ref_id = t3.ref_id AND t4.term_no = t3.term_no AND t4.settle_status = 1
join audit.loan_manifest t5 on t3.ref_id = t5.ref_id
......@@ -90,7 +90,7 @@ GROUP BY 1
# 支付宝正常还款
sql_hk_ali_zc = '''
SELECT DATE(t2.transfer_time) day_hk, sum(t1.`principle`+t1.`interest`-t1.`mitigate_principle`-t1.`mitigate_interest`) zc_real_all
FROM new_transaction.`xjd_repay_plan_repay_record_ref` t1
FROM `xjd_repay_plan_repay_record_ref` t1
join new_transaction.offline_alipay_record t2 on t1.record_id = t2.id and t1.repay_channel = 13 and t2.transfer_time >= '%s' and t2.transfer_time < '%s'
JOIN new_transaction.`user_repayment_plan` t3 ON t1.plan_id = t3.id and t3.fund_code = %s
JOIN audit.funding_repayment_record t4 ON t4.ref_id = t3.ref_id AND t4.term_no = t3.term_no and DATE(t2.transfer_time) = DATE(t4.deadline)
......@@ -101,7 +101,7 @@ GROUP by 1
# 支付宝还款--逾期还款
sql_hk_ali_yq = '''
SELECT DATE(t2.transfer_time) day_hk, sum(t1.`principle`+t1.`interest`-t1.`mitigate_principle`-t1.`mitigate_interest`) yq_real_all
FROM new_transaction.`xjd_repay_plan_repay_record_ref` t1
FROM `xjd_repay_plan_repay_record_ref` t1
join new_transaction.offline_alipay_record t2 on t1.record_id = t2.id and t1.repay_channel = 13 and t2.transfer_time >= '%s' and t2.transfer_time < '%s'
JOIN new_transaction.`user_repayment_plan` t3 ON t1.plan_id = t3.id and t3.fund_code = %s
JOIN audit.funding_repayment_record t4 ON t4.ref_id = t3.ref_id AND t4.term_no = t3.term_no and DATE(t2.transfer_time) > DATE(t4.deadline)
......@@ -113,7 +113,7 @@ GROUP by 1
sql_ali_tq = '''
SELECT DATE (t4.deadline) deadline, SUM(t1.`principle`+t1.`interest`-t1.`mitigate_principle`-t1.`mitigate_interest`) tq_amount
FROM new_transaction.`xjd_repay_plan_repay_record_ref` t1
FROM `xjd_repay_plan_repay_record_ref` t1
join new_transaction.offline_alipay_record t2 on t1.record_id = t2.id and t1.repay_channel = 13 and t2.transfer_time < '%s'
JOIN new_transaction.`user_repayment_plan` t3 ON t1.plan_id = t3.id and t3.fund_code = %s
JOIN audit.funding_repayment_record t4 ON t4.ref_id = t3.ref_id AND t4.term_no = t3.term_no AND (t4.settle_status = 0 OR t4.repaid_at<"2017-05-01" ) AND DATE(t2.transfer_time) < DATE(t4.deadline)
......@@ -123,7 +123,7 @@ GROUP BY 1
sql_ali_settle_tq = '''
SELECT DATE(t4.settle_date) repaid_at, SUM(t1.`principle`+t1.`interest`-t1.`mitigate_principle`-t1.`mitigate_interest`) settle_tq_amount
FROM new_transaction.`xjd_repay_plan_repay_record_ref` t1
FROM `xjd_repay_plan_repay_record_ref` t1
join new_transaction.offline_alipay_record t2 on t1.record_id = t2.id and t1.repay_channel = 13 and t2.transfer_time < '%s'
JOIN new_transaction.`user_repayment_plan` t3 ON t1.plan_id = t3.id and t3.fund_code = %s
JOIN audit.funding_repayment_record t4 ON t4.ref_id = t3.ref_id AND t4.term_no = t3.term_no AND t4.settle_status = 1
......@@ -225,29 +225,29 @@ def hr_table(fund_code, fund_name, start_time, end_time, truncate_start_time, tr
# 晋商2【funding_code 300】 9月份的还资金方 包含应还日deadline在 8月31号 10月 1 2 3 4 号的数据
if __name__ == '__main__':
fund_code_map = {
(150, u'华融'): {
"start_time": datetime.date(2017, 5, 1)
, "end_time": datetime.date(2017, 10, 1)
, "deadline": datetime.date(2017, 10, 1)
, "truncate_start_time": datetime.date(2017, 5, 1)
, "truncate_end_time": datetime.date(2017, 10, 1)
}
# (150, u'华融'): {
# "start_time": datetime.date(2017, 4, 29)
# "start_time": datetime.date(2017, 5, 1)
# , "end_time": datetime.date(2017, 10, 1)
# , "deadline": datetime.date(2017, 10, 1)
# , "truncate_start_time": datetime.date(2017, 5, 1)
# , "truncate_end_time": datetime.date(2017, 10, 1)
# }
# ,
# (300, u'晋商2'): {
# "start_time": datetime.date(2017, 9, 1)
# },
# (150, u'华融'): {
# "start_time": datetime.date(2017, 4, 29)
# , "end_time": datetime.date(2017, 10, 1)
# , "deadline": datetime.date(2017, 10, 1)
# , "start_deadline": datetime.date(2017, 9, 1)
# , "truncate_start_time": datetime.date(2017, 9, 1)
# , "truncate_start_time": datetime.date(2017, 5, 1)
# , "truncate_end_time": datetime.date(2017, 10, 1)
# }
# ,
(300, u'晋商2'): {
"start_time": datetime.date(2017, 9, 1)
, "end_time": datetime.date(2017, 10, 1)
, "deadline": datetime.date(2017, 10, 1)
, "start_deadline": datetime.date(2017, 9, 1)
, "truncate_start_time": datetime.date(2017, 9, 1)
, "truncate_end_time": datetime.date(2017, 10, 1)
}
}
try:
......
......@@ -45,7 +45,7 @@ GROUP BY DATE(t1.repaid_at)
# 客户正常还款+逾期还款,按照还款时间统计即可
sql_hk_online_zc = '''
SELECT DATE(t3.xyqb_repaid_at) day_hk ,sum(t1.`principle`+t1.`interest`-t1.`mitigate_principle`-t1.`mitigate_interest`) zc_real_all
FROM new_transaction.`xjd_repay_plan_repay_record_ref` t1
FROM `xjd_repay_plan_repay_record_ref` t1
JOIN new_transaction.`user_repayment_plan` t3 ON t1.plan_id = t3.id and t3.fund_code = %s AND t1.repay_channel != 13
JOIN audit.funding_repayment_record t4 ON t4.ref_id = t3.ref_id AND t4.term_no = t3.term_no and DATE(t3.xyqb_repaid_at) = DATE(t4.deadline)
AND t3.xyqb_repaid_at >= '%s' and t3.xyqb_repaid_at < '%s'
......@@ -56,7 +56,7 @@ GROUP by 1
# 线上还款-逾期还款
sql_hk_online_yq = '''
SELECT DATE(t3.xyqb_repaid_at) day_hk, sum(t1.`principle`+t1.`interest`-t1.`mitigate_principle`-t1.`mitigate_interest`) yq_real_all
FROM new_transaction.`xjd_repay_plan_repay_record_ref` t1
FROM `xjd_repay_plan_repay_record_ref` t1
JOIN new_transaction.`user_repayment_plan` t3 ON t1.plan_id = t3.id and t3.fund_code = %s AND t1.repay_channel != 13
JOIN audit.funding_repayment_record t4 ON t4.ref_id = t3.ref_id AND t4.term_no = t3.term_no and DATE(t3.xyqb_repaid_at) > DATE(t4.deadline)
AND t3.xyqb_repaid_at >= '%s' and t3.xyqb_repaid_at < '%s'
......@@ -67,7 +67,7 @@ GROUP by 1
sql_online_tq = '''
SELECT DATE(t4.deadline) deadline, sum(t1.`principle`+t1.`interest`-t1.`mitigate_principle`-t1.`mitigate_interest`) tq_amount
FROM new_transaction.`xjd_repay_plan_repay_record_ref` t1
FROM `xjd_repay_plan_repay_record_ref` t1
JOIN new_transaction.`user_repayment_plan` t3 ON t1.plan_id = t3.id and t3.fund_code = %s AND t1.repay_channel != 13
JOIN audit.funding_repayment_record t4 ON t4.ref_id = t3.ref_id AND t4.term_no = t3.term_no AND (t4.settle_status = 0 OR t4.repaid_at<"2017-05-01" ) AND t3.xyqb_repaid_at < '%s' AND DATE(t3.xyqb_repaid_at) < DATE(t4.deadline)
join audit.loan_manifest t5 on t3.ref_id = t5.ref_id
......@@ -78,7 +78,7 @@ GROUP BY 1
sql_online_settle_tq = '''
SELECT DATE(t4.settle_date) repaid_at, SUM(t1.`principle`+t1.`interest`-t1.`mitigate_principle`-t1.`mitigate_interest`) settle_tq_amount
FROM new_transaction.`xjd_repay_plan_repay_record_ref` t1
FROM `xjd_repay_plan_repay_record_ref` t1
JOIN new_transaction.`user_repayment_plan` t3 ON t1.plan_id = t3.id and t3.fund_code = %s AND t1.repay_channel != 13 AND t3.xyqb_repaid_at < '%s'
JOIN audit.funding_repayment_record t4 ON t4.ref_id = t3.ref_id AND t4.term_no = t3.term_no AND t4.settle_status = 1
join audit.loan_manifest t5 on t3.ref_id = t5.ref_id
......@@ -90,7 +90,7 @@ GROUP BY 1
# 支付宝正常还款
sql_hk_ali_zc = '''
SELECT DATE(t2.transfer_time) day_hk, sum(t1.`principle`+t1.`interest`-t1.`mitigate_principle`-t1.`mitigate_interest`) zc_real_all
FROM new_transaction.`xjd_repay_plan_repay_record_ref` t1
FROM `xjd_repay_plan_repay_record_ref` t1
join new_transaction.offline_alipay_record t2 on t1.record_id = t2.id and t1.repay_channel = 13 and t2.transfer_time >= '%s' and t2.transfer_time < '%s'
JOIN new_transaction.`user_repayment_plan` t3 ON t1.plan_id = t3.id and t3.fund_code = %s
JOIN audit.funding_repayment_record t4 ON t4.ref_id = t3.ref_id AND t4.term_no = t3.term_no and DATE(t2.transfer_time) = DATE(t4.deadline)
......@@ -101,7 +101,7 @@ GROUP by 1
# 支付宝还款--逾期还款
sql_hk_ali_yq = '''
SELECT DATE(t2.transfer_time) day_hk, sum(t1.`principle`+t1.`interest`-t1.`mitigate_principle`-t1.`mitigate_interest`) yq_real_all
FROM new_transaction.`xjd_repay_plan_repay_record_ref` t1
FROM `xjd_repay_plan_repay_record_ref` t1
join new_transaction.offline_alipay_record t2 on t1.record_id = t2.id and t1.repay_channel = 13 and t2.transfer_time >= '%s' and t2.transfer_time < '%s'
JOIN new_transaction.`user_repayment_plan` t3 ON t1.plan_id = t3.id and t3.fund_code = %s
JOIN audit.funding_repayment_record t4 ON t4.ref_id = t3.ref_id AND t4.term_no = t3.term_no and DATE(t2.transfer_time) > DATE(t4.deadline)
......@@ -113,7 +113,7 @@ GROUP by 1
sql_ali_tq = '''
SELECT DATE (t4.deadline) deadline, SUM(t1.`principle`+t1.`interest`-t1.`mitigate_principle`-t1.`mitigate_interest`) tq_amount
FROM new_transaction.`xjd_repay_plan_repay_record_ref` t1
FROM `xjd_repay_plan_repay_record_ref` t1
join new_transaction.offline_alipay_record t2 on t1.record_id = t2.id and t1.repay_channel = 13 and t2.transfer_time < '%s'
JOIN new_transaction.`user_repayment_plan` t3 ON t1.plan_id = t3.id and t3.fund_code = %s
JOIN audit.funding_repayment_record t4 ON t4.ref_id = t3.ref_id AND t4.term_no = t3.term_no AND (t4.settle_status = 0 OR t4.repaid_at<"2017-05-01" ) AND DATE(t2.transfer_time) < DATE(t4.deadline)
......@@ -123,7 +123,7 @@ GROUP BY 1
sql_ali_settle_tq = '''
SELECT DATE(t4.settle_date) repaid_at, SUM(t1.`principle`+t1.`interest`-t1.`mitigate_principle`-t1.`mitigate_interest`) settle_tq_amount
FROM new_transaction.`xjd_repay_plan_repay_record_ref` t1
FROM `xjd_repay_plan_repay_record_ref` t1
join new_transaction.offline_alipay_record t2 on t1.record_id = t2.id and t1.repay_channel = 13 and t2.transfer_time < '%s'
JOIN new_transaction.`user_repayment_plan` t3 ON t1.plan_id = t3.id and t3.fund_code = %s
JOIN audit.funding_repayment_record t4 ON t4.ref_id = t3.ref_id AND t4.term_no = t3.term_no AND t4.settle_status = 1
......@@ -239,15 +239,15 @@ if __name__ == '__main__':
# , "truncate_start_time": datetime.date(2017, 5, 1)
# , "truncate_end_time": datetime.date(2017, 10, 1)
# }
# ,
# (300, u'晋商2'): {
# "start_time": datetime.date(2017, 9, 1)
# , "end_time": datetime.date(2017, 10, 1)
# , "deadline": datetime.date(2017, 10, 1)
# , "start_deadline": datetime.date(2017, 9, 1)
# , "truncate_start_time": datetime.date(2017, 9, 1)
# , "truncate_end_time": datetime.date(2017, 10, 1)
# }
,
(300, u'晋商2'): {
"start_time": datetime.date(2017, 9, 1)
, "end_time": datetime.date(2017, 10, 1)
, "deadline": datetime.date(2017, 10, 1)
, "start_deadline": datetime.date(2017, 9, 1)
, "truncate_start_time": datetime.date(2017, 9, 1)
, "truncate_end_time": datetime.date(2017, 10, 1)
}
}
try:
......
......@@ -17,12 +17,12 @@ engine_new_transaction = create_engine(
echo=True)
# 渤海 160, 270, 310,320, 410 都不需要出赔付表
path = u'C:\\Users\\wangbo\\Desktop\\十月份对账\\按日展开每日赔付_bill_time_loan_paid_at\\'
path = u'C:\\Users\\wangbo\\Desktop\\十月份对账\\1020按日展开每日赔付_bill_time_loan_paid_at\\'
'''
1、应还资金方本息
'''
sql_fund = '''
select id fund_code,name fund_name from new_transaction.funding_corp WHERE id IN (240)
select id fund_code,name fund_name from new_transaction.funding_corp WHERE id NOT IN (160, 270, 310,320, 410)
'''
sql_repay_channel = '''
select id repay_channel , approach_name channel_name FROM new_transaction.`repay_channel`
......
......@@ -17,12 +17,12 @@ engine_new_transaction = create_engine(
echo=True)
# 渤海 160, 270, 310,320, 410 都不需要出赔付表
path = u'C:\\Users\\wangbo\\Desktop\\十月份对账\\按日展开每日赔付_loan_paid_at\\'
path = u'C:\\Users\\wangbo\\Desktop\\十月份对账\\1020按日展开每日赔付_loan_paid_at\\'
'''
1、应还资金方本息
'''
sql_fund = '''
select id fund_code,name fund_name from new_transaction.funding_corp WHERE id IN (240)
select id fund_code,name fund_name from new_transaction.funding_corp WHERE id NOT IN (160, 270, 310,320, 410)
'''
sql_repay_channel = '''
select id repay_channel , approach_name channel_name FROM new_transaction.`repay_channel`
......
......@@ -86,7 +86,8 @@
"ExecuteTime": {
"end_time": "2017-11-08T06:03:14.772872Z",
"start_time": "2017-11-08T06:03:13.671916Z"
}
},
"collapsed": true
},
"outputs": [],
"source": [
......@@ -96,11 +97,11 @@
},
{
"cell_type": "code",
"execution_count": 127,
"execution_count": 156,
"metadata": {
"ExecuteTime": {
"end_time": "2017-11-08T06:33:16.162790Z",
"start_time": "2017-11-08T06:32:18.414280Z"
"end_time": "2017-11-09T06:05:03.212138Z",
"start_time": "2017-11-09T06:03:51.481176Z"
},
"collapsed": true
},
......@@ -132,11 +133,11 @@
},
{
"cell_type": "code",
"execution_count": 128,
"execution_count": 157,
"metadata": {
"ExecuteTime": {
"end_time": "2017-11-08T06:33:31.236702Z",
"start_time": "2017-11-08T06:33:19.726263Z"
"end_time": "2017-11-09T06:05:19.454833Z",
"start_time": "2017-11-09T06:05:08.093727Z"
},
"collapsed": true
},
......@@ -154,11 +155,11 @@
},
{
"cell_type": "code",
"execution_count": 129,
"execution_count": 158,
"metadata": {
"ExecuteTime": {
"end_time": "2017-11-08T06:33:59.080095Z",
"start_time": "2017-11-08T06:33:33.814066Z"
"end_time": "2017-11-09T06:06:30.079252Z",
"start_time": "2017-11-09T06:06:04.089618Z"
},
"collapsed": true
},
......@@ -178,11 +179,11 @@
},
{
"cell_type": "code",
"execution_count": 130,
"execution_count": 159,
"metadata": {
"ExecuteTime": {
"end_time": "2017-11-08T06:34:40.858018Z",
"start_time": "2017-11-08T06:34:04.526330Z"
"end_time": "2017-11-09T06:07:14.756850Z",
"start_time": "2017-11-09T06:06:35.932830Z"
},
"collapsed": true
},
......@@ -211,11 +212,11 @@
},
{
"cell_type": "code",
"execution_count": 131,
"execution_count": 160,
"metadata": {
"ExecuteTime": {
"end_time": "2017-11-08T06:35:19.563466Z",
"start_time": "2017-11-08T06:34:43.765898Z"
"end_time": "2017-11-09T06:07:55.422123Z",
"start_time": "2017-11-09T06:07:17.890154Z"
},
"collapsed": true
},
......@@ -233,11 +234,11 @@
},
{
"cell_type": "code",
"execution_count": 132,
"execution_count": 161,
"metadata": {
"ExecuteTime": {
"end_time": "2017-11-08T06:35:25.458246Z",
"start_time": "2017-11-08T06:35:21.926404Z"
"end_time": "2017-11-09T06:08:00.220419Z",
"start_time": "2017-11-09T06:07:56.404821Z"
},
"collapsed": true
},
......@@ -249,11 +250,11 @@
},
{
"cell_type": "code",
"execution_count": 133,
"execution_count": 162,
"metadata": {
"ExecuteTime": {
"end_time": "2017-11-08T06:36:20.779905Z",
"start_time": "2017-11-08T06:35:27.353574Z"
"end_time": "2017-11-09T06:08:55.262256Z",
"start_time": "2017-11-09T06:08:00.222661Z"
},
"collapsed": true
},
......@@ -269,11 +270,11 @@
},
{
"cell_type": "code",
"execution_count": 134,
"execution_count": 163,
"metadata": {
"ExecuteTime": {
"end_time": "2017-11-08T06:37:55.884687Z",
"start_time": "2017-11-08T06:37:50.519820Z"
"end_time": "2017-11-09T06:09:00.986416Z",
"start_time": "2017-11-09T06:08:55.264530Z"
},
"collapsed": true
},
......@@ -287,11 +288,11 @@
},
{
"cell_type": "code",
"execution_count": 135,
"execution_count": 164,
"metadata": {
"ExecuteTime": {
"end_time": "2017-11-08T06:39:23.908915Z",
"start_time": "2017-11-08T06:37:55.886878Z"
"end_time": "2017-11-09T06:10:39.454894Z",
"start_time": "2017-11-09T06:09:08.203249Z"
},
"collapsed": true
},
......@@ -316,11 +317,11 @@
},
{
"cell_type": "code",
"execution_count": 136,
"execution_count": 165,
"metadata": {
"ExecuteTime": {
"end_time": "2017-11-08T06:39:29.145571Z",
"start_time": "2017-11-08T06:39:23.911504Z"
"end_time": "2017-11-09T06:10:48.782103Z",
"start_time": "2017-11-09T06:10:43.235529Z"
},
"collapsed": true
},
......@@ -335,11 +336,11 @@
},
{
"cell_type": "code",
"execution_count": 137,
"execution_count": 166,
"metadata": {
"ExecuteTime": {
"end_time": "2017-11-08T06:39:41.892332Z",
"start_time": "2017-11-08T06:39:33.016358Z"
"end_time": "2017-11-09T06:11:02.788163Z",
"start_time": "2017-11-09T06:10:52.906568Z"
},
"collapsed": true
},
......@@ -358,11 +359,131 @@
},
{
"cell_type": "code",
"execution_count": 138,
"execution_count": 187,
"metadata": {
"ExecuteTime": {
"end_time": "2017-11-08T06:39:43.961802Z",
"start_time": "2017-11-08T06:39:43.950920Z"
"end_time": "2017-11-10T05:34:20.777790Z",
"start_time": "2017-11-10T05:34:20.756113Z"
}
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style>\n",
" .dataframe thead tr:only-child th {\n",
" text-align: right;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: left;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Unnamed: 0</th>\n",
" <th>loan_id</th>\n",
" <th>ref_id</th>\n",
" <th>funding_code</th>\n",
" <th>loan_paid_at</th>\n",
" <th>contract_loan_amount</th>\n",
" <th>real_loan_amount</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>0</td>\n",
" <td>o454</td>\n",
" <td>2295416</td>\n",
" <td>1</td>\n",
" <td>2015-06-03</td>\n",
" <td>1000.0</td>\n",
" <td>1000.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1</td>\n",
" <td>o457</td>\n",
" <td>2295417</td>\n",
" <td>1</td>\n",
" <td>2015-06-04</td>\n",
" <td>1000.0</td>\n",
" <td>1000.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>2</td>\n",
" <td>o460</td>\n",
" <td>2295418</td>\n",
" <td>1</td>\n",
" <td>2015-06-04</td>\n",
" <td>1000.0</td>\n",
" <td>1000.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>3</td>\n",
" <td>o463</td>\n",
" <td>2295419</td>\n",
" <td>1</td>\n",
" <td>2015-06-04</td>\n",
" <td>1000.0</td>\n",
" <td>1000.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>4</td>\n",
" <td>o469</td>\n",
" <td>2295420</td>\n",
" <td>1</td>\n",
" <td>2015-06-05</td>\n",
" <td>1000.0</td>\n",
" <td>1000.0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Unnamed: 0 loan_id ref_id funding_code loan_paid_at \\\n",
"0 0 o454 2295416 1 2015-06-03 \n",
"1 1 o457 2295417 1 2015-06-04 \n",
"2 2 o460 2295418 1 2015-06-04 \n",
"3 3 o463 2295419 1 2015-06-04 \n",
"4 4 o469 2295420 1 2015-06-05 \n",
"\n",
" contract_loan_amount real_loan_amount \n",
"0 1000.0 1000.0 \n",
"1 1000.0 1000.0 \n",
"2 1000.0 1000.0 \n",
"3 1000.0 1000.0 \n",
"4 1000.0 1000.0 "
]
},
"execution_count": 187,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_pay_select.head()"
]
},
{
"cell_type": "code",
"execution_count": 167,
"metadata": {
"ExecuteTime": {
"end_time": "2017-11-09T06:11:10.750846Z",
"start_time": "2017-11-09T06:11:10.738596Z"
},
"collapsed": true
},
......@@ -376,12 +497,13 @@
},
{
"cell_type": "code",
"execution_count": 139,
"execution_count": 168,
"metadata": {
"ExecuteTime": {
"end_time": "2017-11-08T06:39:57.110766Z",
"start_time": "2017-11-08T06:39:45.910971Z"
}
"end_time": "2017-11-09T06:11:24.434806Z",
"start_time": "2017-11-09T06:11:12.335285Z"
},
"collapsed": true
},
"outputs": [],
"source": [
......@@ -409,11 +531,73 @@
},
{
"cell_type": "code",
"execution_count": 140,
"execution_count": 181,
"metadata": {
"ExecuteTime": {
"end_time": "2017-11-09T06:32:39.150115Z",
"start_time": "2017-11-09T06:32:32.293564Z"
},
"collapsed": true
},
"outputs": [],
"source": [
"repay_ref_id_list = df_repay_select.ix[(df_repay_select.deadline<=df_repay_select.repaid_at)&(df_repay_select.repaid_at>=datetime.date(2017,10,1))&(df_repay_select.repaid_at<datetime.date(2017,11,1))].ref_id.tolist()\n",
"repay_ref_id_list2 = df_repay_select.ix[(df_repay_select.deadline>df_repay_select.repaid_at)&(df_repay_select.deadline>=datetime.date(2017,10,1))&(df_repay_select.deadline<datetime.date(2017,11,1))].ref_id.tolist()"
]
},
{
"cell_type": "code",
"execution_count": 182,
"metadata": {
"ExecuteTime": {
"end_time": "2017-11-09T06:32:42.260074Z",
"start_time": "2017-11-09T06:32:39.152061Z"
},
"collapsed": true
},
"outputs": [],
"source": [
"fund_ref_id_list = df_fund_select.ix[(df_fund_select.deadline>=datetime.date(2017,10,1))&(df_fund_select.deadline<datetime.date(2017,11,1))].ref_id.tolist()"
]
},
{
"cell_type": "code",
"execution_count": 184,
"metadata": {
"ExecuteTime": {
"end_time": "2017-11-09T06:33:39.991948Z",
"start_time": "2017-11-09T06:33:39.965964Z"
},
"collapsed": true
},
"outputs": [],
"source": [
"repay_ref_id_list.extend(repay_ref_id_list2)\n",
"repay_ref_id_list.extend(fund_ref_id_list)"
]
},
{
"cell_type": "code",
"execution_count": 185,
"metadata": {
"ExecuteTime": {
"end_time": "2017-11-08T06:41:23.918232Z",
"start_time": "2017-11-08T06:41:23.903885Z"
"end_time": "2017-11-09T06:34:21.271650Z",
"start_time": "2017-11-09T06:34:16.086976Z"
},
"collapsed": true
},
"outputs": [],
"source": [
"df_out.ix[df_out.ref_id.isin(repay_ref_id_list)].to_csv(path+\"loan_id_ten_peifu.csv\")"
]
},
{
"cell_type": "code",
"execution_count": 170,
"metadata": {
"ExecuteTime": {
"end_time": "2017-11-09T06:11:32.091615Z",
"start_time": "2017-11-09T06:11:32.075186Z"
},
"collapsed": true
},
......@@ -425,11 +609,221 @@
},
{
"cell_type": "code",
"execution_count": 141,
"execution_count": 226,
"metadata": {
"ExecuteTime": {
"end_time": "2017-11-10T05:58:14.705705Z",
"start_time": "2017-11-10T05:58:04.197173Z"
}
},
"outputs": [],
"source": [
"#loan_id出表\n",
"# 指定day_hk的还款\n",
"df_repay_month = df_repay_select.ix[((df_repay_select.deadline<=df_repay_select.repaid_at)\n",
" &(df_repay_select.repaid_at>=datetime.date(2017,10,1))\n",
" &(df_repay_select.repaid_at<datetime.date(2017,11,1)))\n",
" |((df_repay_select.deadline>df_repay_select.repaid_at)\n",
" &(df_repay_select.deadline>=datetime.date(2017,10,1))\n",
" &(df_repay_select.deadline<datetime.date(2017,11,1)))]\n",
"df_repay_ref_id = df_repay_month.groupby(['ref_id'])[['real_prin_inst']].sum().reset_index()\n",
"\n",
"df_fund_month = df_fund_select.ix[(df_fund_select.deadline>=datetime.date(2017,10,1))&(df_fund_select.deadline<datetime.date(2017,11,1))]\n",
"df_fund_ref_id = df_fund_month.groupby(by=['ref_id'])[['fund_prin_inst']].agg(sum).reset_index()"
]
},
{
"cell_type": "code",
"execution_count": 238,
"metadata": {
"ExecuteTime": {
"end_time": "2017-11-10T06:08:01.316129Z",
"start_time": "2017-11-10T06:08:01.302836Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"1298111234.8800001"
]
},
"execution_count": 238,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_repay_ref_id.real_prin_inst.sum()"
]
},
{
"cell_type": "code",
"execution_count": 246,
"metadata": {
"ExecuteTime": {
"end_time": "2017-11-10T07:48:24.354557Z",
"start_time": "2017-11-10T07:48:20.821696Z"
}
},
"outputs": [],
"source": [
"df_loan_id = pd.merge(df_repay_ref_id,df_fund_ref_id,on=['ref_id'],how='outer')\n",
"df_loan_id = pd.merge(df_loan_id,df_pay_select[['ref_id','loan_id','funding_code','loan_paid_at']],on=['ref_id'],how='left')\n",
"df_loan_id=pd.merge(df_loan_id,df_funding_corp,on=['funding_code'],how='outer')\n",
"df_loan_id.fillna(0,inplace=True)"
]
},
{
"cell_type": "code",
"execution_count": 250,
"metadata": {
"ExecuteTime": {
"end_time": "2017-11-10T07:49:08.791795Z",
"start_time": "2017-11-10T07:49:08.778845Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"1298111234.8799999"
]
},
"execution_count": 250,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_loan_id.real_prin_inst.sum()"
]
},
{
"cell_type": "code",
"execution_count": 248,
"metadata": {
"ExecuteTime": {
"end_time": "2017-11-10T07:48:28.792703Z",
"start_time": "2017-11-10T07:48:28.787658Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"1298106464.4399834"
]
},
"execution_count": 248,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_ten.zc.sum()+df_ten.tq.sum()+df_ten.yq.sum()"
]
},
{
"cell_type": "code",
"execution_count": 251,
"metadata": {
"ExecuteTime": {
"end_time": "2017-11-08T06:41:27.473536Z",
"start_time": "2017-11-08T06:41:25.136060Z"
"end_time": "2017-11-10T07:49:21.102779Z",
"start_time": "2017-11-10T07:49:21.090726Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"1364547885.4799995"
]
},
"execution_count": 251,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_loan_id.fund_prin_inst.sum()"
]
},
{
"cell_type": "code",
"execution_count": 253,
"metadata": {
"ExecuteTime": {
"end_time": "2017-11-10T07:49:41.192895Z",
"start_time": "2017-11-10T07:49:41.188650Z"
}
},
"outputs": [
{
"data": {
"text/plain": [
"1364543115.0400329"
]
},
"execution_count": 253,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_ten.fund_prin_inst.sum()"
]
},
{
"cell_type": "code",
"execution_count": 254,
"metadata": {
"ExecuteTime": {
"end_time": "2017-11-10T07:50:01.164840Z",
"start_time": "2017-11-10T07:50:01.155173Z"
}
},
"outputs": [],
"source": [
"df_loan_id['peifu'] = df_loan_id['fund_prin_inst']- df_loan_id['real_prin_inst']"
]
},
{
"cell_type": "code",
"execution_count": 255,
"metadata": {
"ExecuteTime": {
"end_time": "2017-11-10T07:50:02.159185Z",
"start_time": "2017-11-10T07:50:02.053762Z"
}
},
"outputs": [],
"source": [
"df_loan_id.groupby(['fund_name'])['peifu'].agg(sum).reset_index().to_excel(path+'loan_id_statistic.xlsx')"
]
},
{
"cell_type": "code",
"execution_count": 256,
"metadata": {
"ExecuteTime": {
"end_time": "2017-11-10T07:51:33.352835Z",
"start_time": "2017-11-10T07:51:28.228576Z"
},
"collapsed": true
},
"outputs": [],
"source": [
"df_loan_id.to_csv(path+'ten_peifu.csv')"
]
},
{
"cell_type": "code",
"execution_count": 171,
"metadata": {
"ExecuteTime": {
"end_time": "2017-11-09T06:11:36.249663Z",
"start_time": "2017-11-09T06:11:33.853229Z"
}
},
"outputs": [
......@@ -439,7 +833,7 @@
"54421956.339999996"
]
},
"execution_count": 141,
"execution_count": 171,
"metadata": {},
"output_type": "execute_result"
}
......@@ -451,11 +845,11 @@
},
{
"cell_type": "code",
"execution_count": 142,
"execution_count": 172,
"metadata": {
"ExecuteTime": {
"end_time": "2017-11-08T06:41:27.494688Z",
"start_time": "2017-11-08T06:41:27.475668Z"
"end_time": "2017-11-09T06:11:46.356397Z",
"start_time": "2017-11-09T06:11:46.333323Z"
},
"collapsed": true
},
......@@ -467,11 +861,11 @@
},
{
"cell_type": "code",
"execution_count": 143,
"execution_count": 173,
"metadata": {
"ExecuteTime": {
"end_time": "2017-11-08T06:41:28.380895Z",
"start_time": "2017-11-08T06:41:28.345324Z"
"end_time": "2017-11-09T06:11:48.195199Z",
"start_time": "2017-11-09T06:11:48.163751Z"
},
"collapsed": true
},
......@@ -482,11 +876,11 @@
},
{
"cell_type": "code",
"execution_count": 144,
"execution_count": 174,
"metadata": {
"ExecuteTime": {
"end_time": "2017-11-08T06:41:29.840564Z",
"start_time": "2017-11-08T06:41:29.834262Z"
"end_time": "2017-11-09T06:11:48.906014Z",
"start_time": "2017-11-09T06:11:48.899492Z"
}
},
"outputs": [
......@@ -496,7 +890,7 @@
"205401.20999999982"
]
},
"execution_count": 144,
"execution_count": 174,
"metadata": {},
"output_type": "execute_result"
}
......@@ -507,11 +901,11 @@
},
{
"cell_type": "code",
"execution_count": 145,
"execution_count": 175,
"metadata": {
"ExecuteTime": {
"end_time": "2017-11-08T06:41:30.923673Z",
"start_time": "2017-11-08T06:41:30.898404Z"
"end_time": "2017-11-09T06:11:49.736658Z",
"start_time": "2017-11-09T06:11:49.706768Z"
},
"collapsed": true
},
......@@ -522,11 +916,11 @@
},
{
"cell_type": "code",
"execution_count": 146,
"execution_count": 176,
"metadata": {
"ExecuteTime": {
"end_time": "2017-11-08T06:41:32.169853Z",
"start_time": "2017-11-08T06:41:31.942900Z"
"end_time": "2017-11-09T06:11:51.023254Z",
"start_time": "2017-11-09T06:11:50.797977Z"
},
"collapsed": true
},
......@@ -537,11 +931,11 @@
},
{
"cell_type": "code",
"execution_count": 126,
"execution_count": 177,
"metadata": {
"ExecuteTime": {
"end_time": "2017-11-08T06:13:52.207506Z",
"start_time": "2017-11-08T06:13:40.297822Z"
"end_time": "2017-11-09T06:12:05.895788Z",
"start_time": "2017-11-09T06:11:51.518875Z"
},
"collapsed": true
},
......@@ -550,6 +944,33 @@
"df_out.to_csv(path+\"loan_id_ten.csv\")"
]
},
{
"cell_type": "code",
"execution_count": 178,
"metadata": {
"ExecuteTime": {
"end_time": "2017-11-09T06:25:58.413019Z",
"start_time": "2017-11-09T06:25:58.373569Z"
}
},
"outputs": [
{
"ename": "AttributeError",
"evalue": "'DataFrame' object has no attribute 'ref_id'",
"traceback": [
"\u001b[0;31m\u001b[0m",
"\u001b[0;31mAttributeError\u001b[0mTraceback (most recent call last)",
"\u001b[0;32m<ipython-input-178-dde8b65cc58d>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mdf_out\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mix\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mdf_out\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mref_id\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0misin\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdf_ten\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mref_id\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mto_csv\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mpath\u001b[0m\u001b[0;34m+\u001b[0m\u001b[0;34m\"loan_id_ten_peifu.csv\"\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
"\u001b[0;32m/root/.pyenv/versions/2.7.13/lib/python2.7/site-packages/pandas/core/generic.pyc\u001b[0m in \u001b[0;36m__getattr__\u001b[0;34m(self, name)\u001b[0m\n\u001b[1;32m 3079\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mname\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_info_axis\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3080\u001b[0m \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mname\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 3081\u001b[0;31m \u001b[0;32mreturn\u001b[0m \u001b[0mobject\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m__getattribute__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mname\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m 3082\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m 3083\u001b[0m \u001b[0;32mdef\u001b[0m \u001b[0m__setattr__\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mname\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mvalue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
"\u001b[0;31mAttributeError\u001b[0m: 'DataFrame' object has no attribute 'ref_id'"
],
"output_type": "error"
}
],
"source": [
""
]
},
{
"cell_type": "code",
"execution_count": null,
......
......@@ -27,7 +27,7 @@ SELECT deadline ,repaid_at ,principle,interest,funding_code,loan_id,term_no,ref_
# 部分应还资金方取客户的应还
sql_query_user_fund = """
SELECT deadline,xyqb_repaid_at repaid_at,principle,interest,fund_code funding_code,real_loan_id loan_id,term_no,ref_id FROM new_transaction.user_repayment_plan
WHERE fund_code IN (270, 310, 320, 210, 365, 350,290, 330, 340, 390,410,420)
WHERE fund_code IN (210, 365, 350, 290, 330, 340,390,410,1,2,3,4,5,70,135,141,420,480,465,365,270,310,320,410)
"""
# 客户等级
......@@ -64,7 +64,7 @@ JOIN new_transaction.`user_repayment_plan` t3 ON t1.plan_id = t3.id
sql_query_repay_online = """
SELECT
DATE(t3.deadline) deadline,
DATE(t3.bill_time) repaid_at,
DATE(t2.bill_time) repaid_at,
(t1.principle-t1.mitigate_principle) principle,
(t1.interest-t1.mitigate_interest) interest,
t3.fund_code funding_code,
......@@ -74,8 +74,9 @@ SELECT
FROM
new_transaction.`xjd_repay_plan_repay_record_ref` t1
JOIN new_transaction.`user_repayment_plan` t3 ON t1.plan_id = t3.id AND t1.repay_channel IN (1,2,4,6,8,9,10,11,12,20,21,25)
AND t3.bill_time >= '%s'
AND t3.bill_time < '%s'
join new_transaction.repay_record_online t2 on t1.record_id = t2.id and t1.repay_channel = t2.pay_approach
AND t2.bill_time >= '%s'
AND t2.bill_time < '%s'
"""
# 查询银行还款
......@@ -118,6 +119,7 @@ AND repay_date < '%s'
"""
sql_arrays = {"sql_query_fund": sql_query_user_fund
, "sql_query_user_fund": sql_query_user_fund
, "sql_query_loan_manifest": sql_query_loan_manifest
......@@ -128,6 +130,12 @@ sql_arrays = {"sql_query_fund": sql_query_user_fund
}
sql_arrays = {
"sql_query_user_fund": sql_query_user_fund
}
for key in sql_arrays.iterkeys():
......
......@@ -27,8 +27,8 @@ SELECT
(t3.service_fee-t3.mitigate_service_fee) '实还服务费',
t4.repaid_at '还款时间',
t5.approach_name '还款渠道',
t6.`name` '资金方'
t6.`name` '资金方',
t3.remain_income '其他收益'
FROM
loan_manifest t1
JOIN user_repayment_plan t2 ON t1.ref_id = t2.ref_id AND t1.funding_code in (%s)
......
......@@ -24,7 +24,7 @@ path = u'C:\\Users\\wangbo\\Desktop\\11月份对账\\赔付表数据\\'
1、应还资金方本息
'''
sql_fund = '''
select funding_code fund_code,name fund_name from basic.funding_corp WHERE funding_code IN (270, 310,320, 410)
select funding_code fund_code,name fund_name from basic.funding_corp WHERE funding_code IN (480)
'''
sql_repay_channel = '''
select id repay_channel , approach_name channel_name FROM new_transaction.`repay_channel`
......
# -*- coding: utf-8 -*-
import os
import sys
import datetime
import threading
from itertools import product
from threading import Thread
import pandas as pd
from dateutil.relativedelta import relativedelta
from sqlalchemy import create_engine
import multiprocessing as mtp
reload(sys)
sys.setdefaultencoding('utf8')
'''
现金贷还款表
1、现金贷还款汇总
2、还款时间使用账单时间
'''
read_fund_sql = '''
select funding_code fund_corp_id,name fund_name from basic.funding_corp where funding_code not in (0,160,40,60)
'''
read_repay_sql = '''
SELECT id,`approach_name` FROM new_transaction.`repay_channel`
'''
engine_new_transaction = engine_new_transaction = create_engine(
'mysql+mysqldb://internal_r:ArbNgtvlJzZHXsEu@172.16.3.201:3306/all_back_0531?charset=utf8',
echo=True)
df_fund = pd.read_sql(read_fund_sql, con=engine_new_transaction)
df_approach = pd.read_sql(read_repay_sql, engine_new_transaction)
df_approach['id'] = df_approach['id'].astype(int)
path = './'
################################################
# 收客户还款汇总
def hk_hz():
sql_alipay = """select year(t8.loan_paid_at) l_year,month(t8.loan_paid_at) l_month, year(t3.transfer_time) r_year, month(t3.transfer_time) r_month, t6.name funding_name, t7.approach_name, sum(t1.ref_amount) 总额, sum(t1.principle) 本金, sum(t1.interest) 利息, sum(t1.service_fee) 服务费,
sum(t1.collection_relief) 催收减免, -- sum(t1.red_package_fee) 实还红包减免,
sum(t1.punish) 逾期罚款收益, sum(t1.remain_income) 其他收益, sum(mitigate_principle) 减免本金, sum(mitigate_interest) 减免利息, sum(mitigate_service_fee) 减免服务费, sum(mitigate_collection_relief) 减免罚息
from xjd_repay_plan_repay_record_ref t1
join user_repayment_plan t2 on t2.id = t1.plan_id
join basic.funding_corp t6 on t2.fund_code=t6.funding_code
join new_transaction.repay_channel t7 on t1.repay_channel = t7.id
join audit.loan_manifest t8 on t8.ref_id = t2.ref_id
join offline_alipay_record t3 on t1.repay_channel =13 and t3.id = t1.record_id
group by 1,2,3,4,5,6"""
df_alipay = pd.read_sql(sql=sql_alipay, con=engine_new_transaction)
# sql_bank = """select year(t8.loan_paid_at) l_year,month(t8.loan_paid_at) l_month,year(t3.transfer_time) r_year, month(t3.transfer_time) r_month, t6.name funding_name, t7.approach_name, sum(t1.ref_amount) 总额, sum(t1.principle) 本金, sum(t1.interest) 利息, sum(t1.service_fee) 服务费,
# sum(t1.collection_relief) 催收减免, -- sum(t1.red_package_fee) 实还红包减免,
# sum(t1.punish) 逾期罚款收益, sum(t1.remain_income) 其他收益, sum(mitigate_principle) 减免本金, sum(mitigate_interest) 减免利息, sum(mitigate_service_fee) 减免服务费, sum(mitigate_collection_relief) 减免罚息
# from xjd_repay_plan_repay_record_ref t1
# join user_repayment_plan t2 on t2.id = t1.plan_id
# join basic.funding_corp t6 on t2.fund_code=t6.funding_code
# join new_transaction.repay_channel t7 on t1.repay_channel = t7.id
# join audit.loan_manifest t8 on t8.ref_id = t2.ref_id
# join offline_bank_repay_record t3 on t1.repay_channel in (14,15,16) and t3.id = t1.record_id
# group by 1,2,3,4,5,6"""
# df_bank = pd.read_sql(sql=sql_bank, con=engine_new_transaction)
# sql_online = """select year(t8.loan_paid_at) l_year,month(t8.loan_paid_at) l_month,year(t3.bill_time) r_year, month(t3.bill_time) r_month, t6.name funding_name, t7.approach_name, sum(t1.ref_amount) 总额, sum(t1.principle) 本金, sum(t1.interest) 利息, sum(t1.service_fee) 服务费,
# sum(t1.collection_relief) 催收减免, -- sum(t1.red_package_fee) 实还红包减免,
# sum(t1.punish) 逾期罚款收益, sum(t1.remain_income) 其他收益, sum(mitigate_principle) 减免本金, sum(mitigate_interest) 减免利息, sum(mitigate_service_fee) 减免服务费, sum(mitigate_collection_relief) 减免罚息
# from xjd_repay_plan_repay_record_ref t1
# join user_repayment_plan t2 on t2.id = t1.plan_id
# join basic.funding_corp t6 on t2.fund_code=t6.funding_code
# join new_transaction.repay_channel t7 on t1.repay_channel = t7.id
# join audit.loan_manifest t8 on t8.ref_id = t2.ref_id
# join repay_record_online t3 on t1.repay_channel = t3.pay_approach and t3.id = t1.record_id
# group by 1,2,3,4,5,6"""
# df_online = pd.read_sql(sql=sql_online, con=engine_new_transaction)
sql_dunjiao_serivce_fee = """
SELECT
YEAR (t3.loan_paid_at) l_year,
MONTH (t3.loan_paid_at) l_month,
YEAR (t4.bill_time) r_year,
MONTH (t4.bill_time) r_month,
t5. NAME funding_name,
t6.approach_name,
sum(t1.ref_amount) "实还趸收服务费"
FROM
new_transaction.xjd_dunjiao_plan_ref t1
JOIN new_transaction.xjd_dunjiao_plan t2 ON t1.plan_id = t2.id
JOIN audit.loan_manifest t3 ON t2.ref_id = t3.ref_id
JOIN repay_record_online t4 ON t1.record_id = t4.id
JOIN basic.funding_corp t5 ON t5.funding_code = 150
JOIN new_transaction.repay_channel t6 ON t6.id = t1.repay_channel
AND t4.pay_approach = t1.repay_channel
GROUP BY
1,
2,
3,
4,
5,
6
"""
df_dunjiao = pd.read_sql(sql=sql_dunjiao_serivce_fee, con=engine_new_transaction)
# df = pd.concat([df_alipay, df_bank, df_online], ignore_index=True)
df = pd.concat([df_alipay], ignore_index=True)
df = pd.merge(df, df_dunjiao, how='left', on=['l_year', 'l_month', 'r_year', 'r_month', 'funding_name', 'approach_name'])
df[u'实还趸收服务费'].fillna(value=0, inplace=True)
df[u'总额'] = df[u'总额']+df[u'实还趸收服务费']
df.sort_values(['l_year', 'l_month', 'r_year', 'r_month', 'funding_name', 'approach_name'], inplace=True)
df.rename(columns={'l_year': '放款年', 'l_month': '放款月', 'r_year': '还款年', 'r_month': '还款月', 'funding_name': '资金方',
'approach_name': '收款账户'}, inplace=True)
excel_file = pd.ExcelWriter(path + u'现金贷还款表汇总_all_back_0530.xlsx')
df.to_excel(excel_file, 'Sheet1',
columns=['放款年', '放款月', '还款年', '还款月', '资金方', '收款账户', '总额', '本金', '利息', '服务费', '催收减免', '逾期罚款收益', '其他收益',
'减免本金', '减免利息', '减免服务费', '减免罚息', '实还趸收服务费'], index=None)
excel_file.save()
################################################
# 明细
read_detail_online_sql = '''
SELECT t1.id plan_id,t1.fund_code,t2.repay_channel,t1.real_loan_id loan_id,t3.contract_loan_amount,t3.contract_term,t3.loan_paid_at,t1.term_no,
t1.deadline,t6.bill_time repaid_at,t1.required_repayment,t1.principle,t1.interest,t1.service_fee,t1.should_punish,t2.ref_amount,t2.principle real_principle,t2.interest real_interest,
t2.`service_fee` real_service_fee,t2.`punish` real_punish,t2.collection_relief,
t2.remain_income,t2.`mitigate_principle`,t2.`mitigate_interest`,t2.`mitigate_service_fee`,t2.`mitigate_collection_relief` mitigate_punish
FROM `xjd_repay_plan_repay_record_ref` t2
JOIN `user_repayment_plan` t1 ON t1.id=t2.plan_id
JOIN audit.`loan_manifest` t3 ON t1.ref_id=t3.ref_id
JOIN repay_record_online t6 ON t2.record_id=t6.id AND t2.pay_approach = t2.repay_channel
WHERE t6.bill_time >= '%s' and t6.bill_time < '%s'
'''
read_detail_alipay_sql = '''
SELECT t1.id plan_id,t1.fund_code,t2.repay_channel,t1.real_loan_id loan_id,t3.contract_loan_amount,t3.contract_term,t3.loan_paid_at,t1.term_no,
t1.deadline,t6.transfer_time repaid_at,t1.required_repayment,t1.principle,t1.interest,t1.service_fee,t1.should_punish,t2.ref_amount,t2.principle real_principle,t2.interest real_interest,
t2.`service_fee` real_service_fee,t2.`punish` real_punish,t2.collection_relief,
t2.remain_income,t2.`mitigate_principle`,t2.`mitigate_interest`,t2.`mitigate_service_fee`,t2.`mitigate_collection_relief` mitigate_punish
FROM `xjd_repay_plan_repay_record_ref` t2
JOIN `user_repayment_plan` t1 ON t1.id=t2.plan_id
JOIN audit.`loan_manifest` t3 ON t1.ref_id=t3.ref_id
JOIN `offline_alipay_record` t6 ON t2.record_id=t6.id and t2.repay_channel = 13
WHERE t6.transfer_time >= '%s' AND t6.transfer_time < '%s'
'''
read_detail_bank_sql = '''
SELECT t1.id plan_id,t1.fund_code,t2.repay_channel,t1.real_loan_id loan_id,t3.contract_loan_amount,t3.contract_term,t3.loan_paid_at,t1.term_no,
t1.deadline,t6.transfer_time repaid_at,t1.required_repayment,t1.principle,t1.interest,t1.service_fee,t1.should_punish,t2.ref_amount,t2.principle real_principle,t2.interest real_interest,
t2.`service_fee` real_service_fee,t2.`punish` real_punish,t2.collection_relief,
t2.remain_income,t2.`mitigate_principle`,t2.`mitigate_interest`,t2.`mitigate_service_fee`,t2.`mitigate_collection_relief` mitigate_punish
FROM `xjd_repay_plan_repay_record_ref` t2
JOIN `user_repayment_plan` t1 ON t1.id=t2.plan_id
JOIN audit.`loan_manifest` t3 ON t1.ref_id=t3.ref_id
JOIN `offline_bank_repay_record` t6 ON t2.record_id=t6.id and t2.repay_channel in (14,15,16)
WHERE t6.transfer_time >= '%s' AND t6.transfer_time < '%s'
'''
# 还款明细
def handle_hk(year, month):
start_time = datetime.datetime(year, month, 1, 0, 0, 0)
end_time = start_time + relativedelta(months=+1)
df_online_detail = pd.read_sql(read_detail_online_sql % (start_time, end_time), con=engine_new_transaction)
df_alipay_detail = pd.read_sql(read_detail_alipay_sql % (start_time, end_time), con=engine_new_transaction)
df_bank_detail = pd.read_sql(read_detail_bank_sql % (start_time, end_time), con=engine_new_transaction)
df = pd.concat([df_online_detail, df_alipay_detail, df_bank_detail], axis=0)
if len(df) > 0:
df['repay_channel'] = df['repay_channel'].astype(int)
df['fund_code'] = df['fund_code'].astype(int)
df = pd.merge(df, df_approach, left_on=['repay_channel'], right_on=['id'], how='left')
df = pd.merge(df, df_fund, left_on=['fund_code'], right_on=['fund_corp_id'], how='left')
df.reset_index(inplace=True)
df = df[['fund_name', 'approach_name', 'loan_id', 'contract_loan_amount', 'contract_term', 'loan_paid_at',
'term_no', 'deadline', 'repaid_at',
'required_repayment', 'principle', 'interest', 'service_fee', 'should_punish', 'ref_amount',
'real_principle', 'real_interest',
'real_service_fee', 'real_punish', 'remain_income', 'collection_relief', 'mitigate_principle',
'mitigate_interest', 'mitigate_service_fee',
'mitigate_punish']]
df.sort_values(by=['loan_id', 'term_no'], inplace=True)
df.rename(
columns={'fund_name': '资金方', 'approach_name': '收款账户',
'loan_id': '放款id', 'contract_loan_amount': '放款金额',
'contract_term': '放款期数', 'loan_paid_at': '放款时间', 'term_no': '期数',
'deadline': '应还款日',
'repaid_at': '实还款日', 'required_repayment': '应还款金额', 'principle': '应还本金',
'interest': '应还利息',
'service_fee': '应还服务费', 'should_punish': '应还罚息', 'ref_amount': '实还金额',
'real_principle': '实还本金', 'real_interest': '实还利息', 'real_service_fee': '实还服务费',
'real_punish': '实还罚息', 'collection_relief': '减免金额', 'remain_income': '其他收益',
'mitigate_principle': '减免本金',
'mitigate_interest': '减免利息', 'mitigate_service_fee': '减免服务费',
'mitigate_punish': '减免罚息'}, inplace=True)
df.to_excel(path + str(year) + '_' + str(month) + '.xlsx', columns=df.columns, index=None, encoding='utf8')
if __name__ == '__main__':
# 还款汇总--如果不需要可注释
hk_hz()
# 还款明细
# pool = mtp.Pool(processes=6)
# years = [ 2017, ]
# months = [5, ]
# for year, month in product(years, months):
# pool.apply_async(handle_hk, (year, month))
# pool.close()
# pool.join()
print '======================main done==================================='
# -*- coding: utf-8 -*-
import os
import sys
import datetime
import threading
from itertools import product
from threading import Thread
import pandas as pd
from dateutil.relativedelta import relativedelta
from sqlalchemy import create_engine
import multiprocessing as mtp
reload(sys)
sys.setdefaultencoding('utf8')
# 说明文档 :http://confluence.quantgroup.cn/pages/viewpage.action?pageId=4446042
# 查询条件 代偿,充值提现,追偿
engine_payment_center = create_engine(
'mysql+mysqldb://bowang:in78u6ytgbhj56r@192.168.4.6:8066/payment_center?charset=utf8',
echo=False)
sql_query_compensation = """
SELECT amount,channel_serial_no,merchant_order_no,merchant_repay_order_no,updated_at FROM hf_compensatory WHERE is_active=1 AND status=3;
"""
sql_query_history = """
SELECT amount,channel_serial_number,merchant_order_no,order_id,updated_at,event_type,event_status FROM hf_event_status_history WHERE is_success=1 AND (event_type=6 OR (event_type=4 AND event_status=3))
"""
df_compensation = pd.read_sql(sql=sql_query_compensation,con=engine_payment_center)
......@@ -22,13 +22,14 @@ sql_query_xjd = """SELECT
xrprrr.remain_income "remain_income",
urp.xyqb_repaid_at "还款确认时间",
urp.id "被确认的plan_id",
fc.`name` "资金方"
fc.`name` "资金方",
xrprrr.id "xjd_ref_id"
FROM
new_transaction.xjd_repay_plan_repay_record_ref xrprrr
LEFT JOIN all_back_0831.xjd_repay_plan_repay_record_ref t2 ON xrprrr.id = t2.id
JOIN new_transaction.offline_alipay_record oar ON xrprrr.record_id = oar.id
AND oar.transfer_time < "2017-09-01"
JOIN new_transaction.user_repayment_plan urp ON urp.id = xrprrr.plan_id
xjd_repay_plan_repay_record_ref xrprrr
LEFT JOIN all_back_0930.xjd_repay_plan_repay_record_ref t2 ON xrprrr.id = t2.id
JOIN offline_alipay_record oar ON xrprrr.record_id = oar.id
AND oar.transfer_time < "2017-10-01"
JOIN user_repayment_plan urp ON urp.id = xrprrr.plan_id
JOIN basic.funding_corp fc ON urp.fund_code = fc.funding_code
WHERE
xrprrr.repay_channel = 13
......@@ -55,11 +56,11 @@ sql_query_baitiao = """SELECT
urp.id "被确认的plan_id",
fcp.fund_name "资金方"
FROM
new_transaction.baitiao_repay_plan_repay_record_ref xrprrr
LEFT JOIN all_back_0831.baitiao_repay_plan_repay_record_ref t2 ON xrprrr.id = t2.id
JOIN new_transaction.offline_alipay_record oar ON xrprrr.record_id = oar.id
AND oar.transfer_time < "2017-09-01"
JOIN new_transaction.user_bt_repayment_plan urp ON urp.id = xrprrr.plan_id
baitiao_repay_plan_repay_record_ref xrprrr
LEFT JOIN all_back_0930.baitiao_repay_plan_repay_record_ref t2 ON xrprrr.id = t2.id
JOIN offline_alipay_record oar ON xrprrr.record_id = oar.id
AND oar.transfer_time < "2017-07-01"
JOIN user_bt_repayment_plan urp ON urp.id = xrprrr.plan_id
JOIN baitiao_audit.baitiao_order bor ON urp.ref_id = bor.ref_id
JOIN baitiao_audit.fund_corp fcp ON bor.funding_corp_id = fcp.id
WHERE
......
# -*- coding:utf-8 -*-
# Author: WuKong
import sys
import datetime
from urllib import quote_plus as urlquote
import itertools
import pandas as pd
from sqlalchemy import create_engine
import multiprocessing as mtp
import os
reload(sys)
sys.setdefaultencoding('utf8')
# 正式库,只能用途 读账户!!!
engine_urge_dispatcher = create_engine(
'mysql+mysqldb://cuishou_pro_rw:%sUI@172.16.90.39:3306/urge_dispatcher?charset=utf8' % urlquote('%789uijhktyghn%'),
echo=True)
engine_urge_xyqb = create_engine(
'mysql+mysqldb://bowang:in78u6ytgbhj56r@192.168.4.6:8066/xyqb?charset=utf8',
echo=True)
# 查询催收库中 所有已还款数据
sql_query_dispathcer = u"""
SELECT debtor_user_id,repay_plan_id,loan_order_id,repay_status FROM debt_cash_loan_item WHERE repay_status=3
"""
df_dispatcher = pd.read_sql(sql=sql_query_dispathcer,con=engine_urge_dispatcher)
plan_id_list = df_dispatcher.repay_plan_id.astype(int).tolist()
# 查询xyqb中 未还款
sql_query_xyqb_plan = u"""
SELECT id FROM repayment_plan WHERE repayment_status!=3 AND id in %s
"""
no_repay_ids = []
for i in range(0, len(plan_id_list), 5000):
plan_ids = plan_id_list[i:i+5000]
df_xyqb_no_repay = pd.read_sql(sql=sql_query_xyqb_plan % (str(tuple(plan_ids)).replace(',)', ')'),), con=engine_urge_xyqb)
if len(df_xyqb_no_repay) > 0:
no_repay_ids.extend(df_xyqb_no_repay.id.astype(int).tolist())
df_dispatcher.repay_plan_id = df_dispatcher.repay_plan_id.astype(int)
df_unormal_dispatcher = df_dispatcher.ix[df_dispatcher.repay_plan_id.isin(no_repay_ids)]
df_unormal_dispatcher = df_unormal_dispatcher[['repay_plan_id']]
df_unormal_dispatcher.to_excel('.\unomarl_data.xlsx', columns=df_unormal_dispatcher.columns, index=None, encoding='utf8')
......@@ -26,6 +26,7 @@ df['funding_code'] = df['funding_code'].astype(int)
df['loan_account_id'] = df['loan_account_id'].astype(int)
df = df.merge(df_fund_corp, on='funding_code', how='left').merge(df_loan_account, on='loan_account_id', how='left')
df.drop(['funding_code', 'loan_account_id'], axis=1, inplace=True)
df.fillna(0, inplace=True)
# df.to_excel(u'放款表汇总.xlsx', index=None)
df.to_excel(excel_file, '放款表汇总', columns=['年', '月', '资金方', '放款账户', '放款金额', '本金债权', '一次性扣除手续费QG', '一次性扣除手续费点滴','应扣趸收服务费'], index=None)
excel_file.save()
\ No newline at end of file
......@@ -12,7 +12,7 @@ select t1.funding_code, t3.class '风险等级', year(t1.loan_paid_at) '放款
year(t2.deadline) '到期年',month(t2.deadline) '到期月',sum(t2.principle) '客户应还本金',sum(t2.interest) '客户应还利息'
from audit.loan_manifest t1
inner join user_repayment_plan t2
on t1.ref_id = t2.ref_id and t1.is_active in (1,-2) and t1.loan_paid_at>='2017-01-01' and t1.loan_paid_at<'2017-10-01'
on t1.ref_id = t2.ref_id and t1.is_active in (1,-2) and t1.loan_paid_at>='2017-01-01' and t1.loan_paid_at<'2017-11-01'
inner join test_mzh.loan_class_contract_1002 t3
on t1.ref_id = t3.ref_id
group by 1,2,3,4,5,6
......
......@@ -29,7 +29,7 @@ SELECT id,`approach_name` FROM new_transaction.`repay_channel`
'''
engine_new_transaction = engine_new_transaction = create_engine(
'mysql+mysqldb://internal_r:ArbNgtvlJzZHXsEu@172.16.3.201:3306/audit_temp?charset=utf8',
'mysql+mysqldb://internal_r:ArbNgtvlJzZHXsEu@172.16.3.201:3306/new_transaction?charset=utf8',
echo=True)
df_fund = pd.read_sql(read_fund_sql, con=engine_new_transaction)
......@@ -37,20 +37,20 @@ df_approach = pd.read_sql(read_repay_sql, engine_new_transaction)
df_approach['id'] = df_approach['id'].astype(int)
path = './'
# AND t1.id NOT in (17978225,17978223,17978227,17978229,17978231,17978233,17978235,17978237,17978239,17978241,17978243,17978245,17978247,17978249,17978251,17978253,17978255,17978257,17978259,17978267,17978265,17978263,17978261,17978269,17978271,17978273,17978275,17978277,17978279,17978281,17978283,17978285,17978287,17978289,17978291,17978293,17978297,17978295,17978299,17978301,17978303,17978305,17978307,17978309,17978311,17978313,17978315,17978317,17978319,17978321,17978323,17978325,17978327,17978329,17978331,17978333,17978335,17978337,17978339,17978341,17978343,17978345,17978347,17978349,17978351,17978353,17978355,17978357,17978359,17978361,17978363,17978365,17978367,17978369,17978371,17978373,17978375,17978377,17978381,17978379,17978383,17978385,17978387,17978389,17978391,17978393,17978395,17978397,17978405,17978399,17978401,17978403,17978407,17978409,17978413,17978411,17978415,17978417,17978419,17978421,17978423,17978425,17978427,17978429,17978431,17978433,17978435,17978437,17978439,17978441,17978443,17978445,17978447,17978453,17978449,17978451,17978455,17978457,17978459,17978461,17978463,17978465,17978467,17978469,17978471,17978473,17978475,17978477,17978479,17978481,17978483,17978485,17978487,17978489,17978491,17978493,17978495,17978497,17978499,17978501,17978503,17978505,17978507,17978509,17688805,17978511,17978513,17978515,17978517,17978519,17978521,17978523,17978525,17978527,17978529,17978531,17688803,17978533,17978535,17978537,17978539,17978543,17978541,17978545,17978547,17978549,17978553,17978551,17978555,17978557,17978559,17978561,17978563,17978565,17978573,17978567,17978569,17978571,17978575,17978577,17978579,17978581,17978585,17978587,17978583,17978589,17978591,17978593,17978595,17978597,17978599,17978601,17978605,17978603,17978607,17978609,17978611,17978613,17978615,17978617,17978619,17978621,17978623,17978625,17978627,17978629,17978633,17978631,17978635,17978637,17978639,17978641,17978643,17978645,17978647,17978649,17978651,17978653,17978655,17978657,17978659,17978661,17978663,17978665,17978667,17978669,17978671,17978673,17978675,17978677,17978679,17978681,17978683,17978685,17978687,17978689,17978691,17978693,17978209,17978695,17948017,17978205,17978781,17978783,17978697,17978699,17978701,17978703,17978793,17978789,17978791,17978705,17978707,17978709,17978711,17978713,17978715,17978717,17978719,17978721,17978723,17978725,17978727,17978729,17978731,17978733,17978735,17978737,17978739,17978741,17978743,17978745,17978747,17978749,17978751,17978753,17978755,17978757,17978759,17978761,17978763,17978765,17978767,17978769,17978771,17978773,17978775,17978777,17978779,19732901,19732903,19732905,19732909,19732907,19732915,19732913,19732917,19732911,19732919,19732921,19732923,19732925,19732927,19732929,19732931,19732933,19732935,19732937,19733029,19732939,19732941,19732949,19732943,19732945,19732947,19732951,19732959,19732955,19732963,19732957,19732961,19732953,19732967,19732965,19732969,19732971,19732973,19733025,19733027,19732975,19732977,19732979,19732981,19732983,19732985,19732987,19732989,19732991,19732993,19732995,19732997,19732999,19733001,19733003,19733005,19733007,19733009,19733031,19733033,19733035,19733011,19733013,19733015,19733017,19733021,19733019,19733023,21613351,21613339,21613341,21613343,21613393,21613359,21613361)
################################################
# 收客户还款汇总
def hk_hz():
sql_alipay = """select year(t8.loan_paid_at) l_year,month(t8.loan_paid_at) l_month, year(t3.transfer_time) r_year, month(t3.transfer_time) r_month, t6.name funding_name, t7.approach_name, sum(t1.ref_amount) 总额, sum(t1.principle) 本金, sum(t1.interest) 利息, sum(t1.service_fee) 服务费,
sum(t1.collection_relief) 催收减免, -- sum(t1.red_package_fee) 实还红包减免,
sum(t1.punish) 逾期罚款收益, sum(t1.remain_income) 其他收益, sum(mitigate_principle) 减免本金, sum(mitigate_interest) 减免利息, sum(mitigate_service_fee) 减免服务费, sum(mitigate_collection_relief) 减免罚息, 0 剩余未还服务费
from all_back_0731.xjd_repay_plan_repay_record_ref t1
sum(t1.punish) 逾期罚款收益, sum(t1.remain_income) 其他收益, sum(mitigate_principle) 减免本金, sum(mitigate_interest) 减免利息, sum(mitigate_service_fee) 减免服务费, sum(mitigate_collection_relief) 减免罚息, SUM(t1.residual_service_fee) 剩余未还服务费
from xjd_repay_plan_repay_record_ref t1
join user_repayment_plan t2 on t2.id = t1.plan_id
join basic.funding_corp t6 on t2.fund_code=t6.funding_code
join new_transaction.repay_channel t7 on t1.repay_channel = t7.id
join audit.loan_manifest t8 on t8.ref_id = t2.ref_id
join all_back_0731.offline_alipay_record t3 on t1.repay_channel =13 and t3.id = t1.record_id AND t1.id NOT in (17978225,17978223,17978227,17978229,17978231,17978233,17978235,17978237,17978239,17978241,17978243,17978245,17978247,17978249,17978251,17978253,17978255,17978257,17978259,17978267,17978265,17978263,17978261,17978269,17978271,17978273,17978275,17978277,17978279,17978281,17978283,17978285,17978287,17978289,17978291,17978293,17978297,17978295,17978299,17978301,17978303,17978305,17978307,17978309,17978311,17978313,17978315,17978317,17978319,17978321,17978323,17978325,17978327,17978329,17978331,17978333,17978335,17978337,17978339,17978341,17978343,17978345,17978347,17978349,17978351,17978353,17978355,17978357,17978359,17978361,17978363,17978365,17978367,17978369,17978371,17978373,17978375,17978377,17978381,17978379,17978383,17978385,17978387,17978389,17978391,17978393,17978395,17978397,17978405,17978399,17978401,17978403,17978407,17978409,17978413,17978411,17978415,17978417,17978419,17978421,17978423,17978425,17978427,17978429,17978431,17978433,17978435,17978437,17978439,17978441,17978443,17978445,17978447,17978453,17978449,17978451,17978455,17978457,17978459,17978461,17978463,17978465,17978467,17978469,17978471,17978473,17978475,17978477,17978479,17978481,17978483,17978485,17978487,17978489,17978491,17978493,17978495,17978497,17978499,17978501,17978503,17978505,17978507,17978509,17688805,17978511,17978513,17978515,17978517,17978519,17978521,17978523,17978525,17978527,17978529,17978531,17688803,17978533,17978535,17978537,17978539,17978543,17978541,17978545,17978547,17978549,17978553,17978551,17978555,17978557,17978559,17978561,17978563,17978565,17978573,17978567,17978569,17978571,17978575,17978577,17978579,17978581,17978585,17978587,17978583,17978589,17978591,17978593,17978595,17978597,17978599,17978601,17978605,17978603,17978607,17978609,17978611,17978613,17978615,17978617,17978619,17978621,17978623,17978625,17978627,17978629,17978633,17978631,17978635,17978637,17978639,17978641,17978643,17978645,17978647,17978649,17978651,17978653,17978655,17978657,17978659,17978661,17978663,17978665,17978667,17978669,17978671,17978673,17978675,17978677,17978679,17978681,17978683,17978685,17978687,17978689,17978691,17978693,17978209,17978695,17948017,17978205,17978781,17978783,17978697,17978699,17978701,17978703,17978793,17978789,17978791,17978705,17978707,17978709,17978711,17978713,17978715,17978717,17978719,17978721,17978723,17978725,17978727,17978729,17978731,17978733,17978735,17978737,17978739,17978741,17978743,17978745,17978747,17978749,17978751,17978753,17978755,17978757,17978759,17978761,17978763,17978765,17978767,17978769,17978771,17978773,17978775,17978777,17978779)
join new_transaction.offline_alipay_record t3 on t1.repay_channel =13 and t3.id = t1.record_id
group by 1,2,3,4,5,6"""
df_alipay = pd.read_sql(sql=sql_alipay, con=engine_new_transaction)
......@@ -105,13 +105,14 @@ GROUP BY
df_dunjiao = pd.read_sql(sql=sql_dunjiao_serivce_fee, con=engine_new_transaction)
df = pd.concat([df_alipay, df_bank, df_online], ignore_index=True)
# df = pd.concat([df_alipay], ignore_index=True)
df = pd.merge(df, df_dunjiao, how='left', on=['l_year', 'l_month', 'r_year', 'r_month', 'funding_name', 'approach_name'])
df[u'实还趸收服务费'].fillna(value=0, inplace=True)
df[u'总额'] = df[u'总额']+df[u'实还趸收服务费']
df.sort_values(['l_year', 'l_month', 'r_year', 'r_month', 'funding_name', 'approach_name'], inplace=True)
df.rename(columns={'l_year': '放款年', 'l_month': '放款月', 'r_year': '还款年', 'r_month': '还款月', 'funding_name': '资金方',
'approach_name': '收款账户'}, inplace=True)
excel_file = pd.ExcelWriter(path + u'现金贷还款表汇总.xlsx')
excel_file = pd.ExcelWriter(path + u'现金贷还款表汇总_new.xlsx')
df.to_excel(excel_file, 'Sheet1',
columns=['放款年', '放款月', '还款年', '还款月', '资金方', '收款账户', '总额', '本金', '利息', '服务费', '催收减免', '逾期罚款收益', '其他收益',
'减免本金', '减免利息', '减免服务费', '减免罚息','剩余未还服务费', '实还趸收服务费'], index=None)
......
......@@ -58,7 +58,7 @@ engine_new_transaction = engine_new_transaction = create_engine(
if __name__ == '__main__':
start_time = datetime.datetime(2017, 1, 1, 0, 0, 0)
end_time = datetime.datetime(2017, 10, 1, 0, 0, 0)
end_time = datetime.datetime(2017, 11, 1, 0, 0, 0)
df=pd.read_sql(sql_query_detail % (start_time,end_time),engine_new_transaction)
df.rename(columns={'loan_id':u'放款id','loan_paid_at':u'放款时间','repay_date':u'实还款日','real_loan_amount':u'放款金额',
'actual_principle':u'实还本金','actual_interest':u'实还利息','actual_qg_service_fee':u'实还服务费','actual_qg_overdue_interest':u'实还量化派逾期费',
......
......@@ -4,6 +4,7 @@
import numpy as np
import datetime
import pandas as pd
from decimal import Decimal
import sys
from sqlalchemy import create_engine
......@@ -21,12 +22,18 @@ sys.setdefaultencoding('utf8')
# ----------------------配置变量开始---------------------------
# TODO 查询计算罚息的还款计划,如果要更新哪个放款,则指定具体的放款id或还款时间段等其他你需要的条件,但是请别删除查询项
read_user_sql = '''
select t1.id,t1.fund_code,t1.term_no,t1.deadline,t1.xyqb_repaid_at repaid_at,t1.principle cur_principle,t1.interest cur_interest,t2.monthly_interest_rate rate,t2.contract_term,t2.contract_loan_amount contract_amount
select t1.id,t1.ref_id,t1.fund_code,t1.term_no,t1.deadline,t1.xyqb_repaid_at repaid_at,t1.principle cur_principle,t1.interest cur_interest,t2.monthly_interest_rate rate,t2.contract_term,t2.contract_loan_amount contract_amount
from new_transaction.user_repayment_plan t1
left join audit.loan_manifest t2 on t1.ref_id = t2.ref_id
where t1.repay_status = 3 and date(t1.deadline) < date(t1.xyqb_repaid_at) and
t1.xyqb_repaid_at >= '2017-10-01 00:00:00' and t1.xyqb_repaid_at < '2017-11-10 00:00:00'
where t1.repay_status = 3 and date(t1.deadline) < date(t1.xyqb_repaid_at) AND t1.id in (4775015,13699135,4864585,10403491,14023021,10832639,12008815,10853291,4301879,13287685,11573917,4779607,13742293,10365019,11553475,14580895,12916795,13911511,8994139,11487055,11817439,15644719,4247083,10332679,15760377,11571775,13895353,11606641,15754995,11561665,15606439,13014299,13807459,10282111,12515395,4780291,13902949,4761541,10559023,14415019,10959971,10745407,9378703,14444797,15615711,11220653,13920001,13545217,4683485,10769671,14287729,15828507,9069751,14755609,16963339,10735015,11533387,15840135,12034657,15721821,14555149,14144305,10868297,13308733,14156563,15736779,15742785,14163055,10768735,15735681,10857341,12266897,13606735,11571493,15742479,6206467,14147245,9038713,13380133,15737133,16187587,9077323,17104759,16156489,4843837,16164091,13381843,13379551,13383283,16211215,9112873,13383301,13382461,11043875,8973289,14035141,11016569,10369021,10984583,10655257,12855109,15657103,6206851,11364493,15080977,15628705,13634233,11060357,16474093,14008321,10712905,15617629,10511893,13267477,13839097,13588795,13311103,15749865,15727101,15747999,13909609,14003449,10755181,13932175,13585117,15739185,10731211,13038637,15655039,15760299,15101515,10637431,17040421,9358441,16983085,9125593,15736347,18349033,11246465,15835545,12989767,15613143,16891159,10730821,11557201,15835221,18337705,11456947,18332905,18330301,11657689,15560943,15840597,9078805,11428417,18336817,18319051,18329899,16242301,18330175,18328963,11230439,9080923,11510455,11507503,18327277,13961989,15339693,15338487,15333801,14600089,14599243,14585713,14519131,11649391,14583841,11740909,11759611,14581057,14581435,11852725,11749825,11792365,14477329,11829133,17987269,9207991,11765539,9179101,11742745,15844209,15942117,15863913,15864495,15868065,15923661,14478625,15919335,14528929,11727331,15869787,15866655,11835961,11788261,14528851,15917187,15869685,14526817,14464321,15870609,15862899,14484025,15841887,14583295,11813413,12046555,14344813,14339473,11942425,11953711,12013771,12059689,14163529,14425939,14401057,14394619,14400925,14395297,14381095,11858641,14448967,14392471,14388925,14434507,14451847,11994727,14462455,10247353,14165653,12096001,14436001,14452903,14435929,14300245,11989483,14375929,11941081,14395837,14402641,14394949,12028513,12092737,12077305,14387665,14374897,14254213,14380267,14374801,12056881,12016279,16039467,15991737,16065501,14318995,12022261,16056645,14318845,16044039,14312893,10091581,16051917,16038549,14319841,11924791,16040697,16046283,14445013,11902843,14390497,14163811,16030701,14449345,15970761,11880889,14127847,15785175,14135347,14120623,14123209,15796251,15784791,15792123,12153235,12099055,12112669,14207431,14190289,14184163,18368707,18382999,18369991,18379243,18364357,18320899,18368389,18370969,18367063,18370237,18373267,18382483)
'''
# t1.xyqb_repaid_at >= '2017-10-01 00:00:00' and t1.xyqb_repaid_at < '2017-11-10 00:00:00'
# and t1.repayment_plan_id in ("13594052")
sql_query_surplus_principle = """
SELECT SUM(principle) surplus_prin FROM new_transaction.user_repayment_plan WHERE ref_id=%s AND term_no>=%s
"""
# read_user_sql='''
# select t1.id,t1.fund_code,t1.term_no,t1.deadline,t1.xyqb_repaid_at repaid_at,t1.principle cur_principle,t2.monthly_interest_rate rate,t2.contract_term,t2.contract_loan_amount contract_amount
......@@ -56,8 +63,13 @@ rate:利率
'''
def cal_surplus_prin(contract_amount, term_no, contract_term, rate, fund_code=0):
def cal_surplus_prin(contract_amount, term_no, contract_term, rate, fund_code=0,ref_id=0):
prin = 0
if(ref_id!=0):
df_surplus_prin = pd.read_sql(sql=sql_query_surplus_principle % (ref_id, term_no) ,con=engine_audit)
if len(df_surplus_prin) > 0:
prin = df_surplus_prin['surplus_prin'].tolist().pop()
return prin
if fund_code == 300:
avg = round(contract_amount / contract_term, 2)
return contract_amount - avg * (term_no - 1)
......@@ -125,7 +137,7 @@ lkb_deplay_fee:量化派逾期费
def cal_deplay_fee(contract_amount, deadline, repaid_at, cur_principle=0, contract_term=1, term_no=1, rate=0,
fund_code=0):
fund_code=0, ref_id=0):
contract_term = int(contract_term)
term_no = int(term_no)
result = {'lkb_deplay_fee': 0}
......@@ -134,12 +146,12 @@ def cal_deplay_fee(contract_amount, deadline, repaid_at, cur_principle=0, contra
return result
if (repaid_at >= datetime.datetime(2017, 1, 20, 10, 0, 0)) and (
repaid_at < datetime.datetime(2017, 5, 2, 14, 16, 0)): # 2017-1-20 号修改了罚息计算公式
principle = cal_surplus_prin(contract_amount, term_no, contract_term, rate, fund_code)
principle = cal_surplus_prin(contract_amount, term_no, contract_term, rate, fund_code,ref_id)
result['lkb_deplay_fee'] = np.round(contract_amount * 0.01 + principle * 0.005 * lkb_deplay_days, 2)
return result
elif (repaid_at >= datetime.datetime(2017, 5, 2, 14, 16, 0)) and (
repaid_at < datetime.datetime(2017, 6, 23, 19, 7, 0)): # 2017-5-2 修改了罚息公式 当期逾期服务费不超过当期借款本金的20%
principle = cal_surplus_prin(contract_amount, term_no, contract_term, rate, fund_code)
principle = cal_surplus_prin(contract_amount, term_no, contract_term, rate, fund_code,ref_id)
result['lkb_deplay_fee'] = np.round(contract_amount * 0.01 + principle * 0.005 * lkb_deplay_days, 2)
# 直接使用还款计划的应还本金
# cur_principle = cal_cur_prin(contract_amount, term_no, contract_term, rate, fund_code)
......@@ -147,8 +159,9 @@ def cal_deplay_fee(contract_amount, deadline, repaid_at, cur_principle=0, contra
result['lkb_deplay_fee'] = np.round(cur_principle * 0.2, 2)
return result
elif repaid_at >= datetime.datetime(2017, 6, 23, 19, 7, 0): # 2017-6-23 修改了罚息公式,当期 罚息不超过 借款本金的20%
principle = cal_surplus_prin(contract_amount, term_no, contract_term, rate, fund_code)
result['lkb_deplay_fee'] = np.round(contract_amount * 0.01 + principle * 0.005 * lkb_deplay_days, 2)
principle = cal_surplus_prin(contract_amount, term_no, contract_term, rate, fund_code,ref_id)
result['lkb_deplay_fee'] = np.round(contract_amount * 0.01 + np.round(principle,2) * 0.005 * lkb_deplay_days, 2)
# result['lkb_deplay_fee'] = '{:.2f}'.format(Decimal(str(np.round(contract_amount * 0.01 + principle * 0.005 * lkb_deplay_days, 10))))
# cur_principle = cal_cur_prin(contract_amount, term_no, contract_term, rate, fund_code)
if result['lkb_deplay_fee'] > contract_amount * 0.2:
result['lkb_deplay_fee'] = np.round(contract_amount * 0.2, 2)
......@@ -157,7 +170,7 @@ def cal_deplay_fee(contract_amount, deadline, repaid_at, cur_principle=0, contra
def cal_fund_fee(contract_amount, deadline, repaid_at, cur_principle, cur_interest, contract_term,
term_no, rate,fund_code ):
term_no, rate,fund_code,ref_id=0 ):
contract_term = int(contract_term)
term_no = int(term_no)
result = {'lkb_fund_fee': 0}
......@@ -192,7 +205,7 @@ def cal_fund_fee(contract_amount, deadline, repaid_at, cur_principle, cur_inter
result['lkb_fund_fee'] = np.round((cur_principle + cur_interest) * 0.0007 * lkb_deplay_days,2)
elif fund_code == 420:
# 惠金所罚息 剩余本金*0.01
surplus_principle = cal_surplus_prin(contract_amount, term_no, contract_term, rate)
surplus_principle = cal_surplus_prin(contract_amount, term_no, contract_term, rate,ref_id)
result['lkb_fund_fee'] = np.round(surplus_principle * 0.01,2)
return result
......@@ -216,8 +229,9 @@ for df in df_gen:
if len(df_bad) > 0:
df_bad.to_csv('df_bad_%s.csv' % i, index=None)
df_good = df.ix[(df.contract_term != 0)]
df_good['should_punish'] = df_good[['contract_amount', 'deadline', 'repaid_at', 'cur_principle', 'contract_term', 'term_no', 'rate', 'fund_code']].apply(lambda x: cal_deplay_fee(**dict(x))['lkb_deplay_fee'], axis=1)
df_good['fund_punish'] = df_good[['contract_amount', 'deadline', 'repaid_at', 'cur_principle', 'cur_interest', 'contract_term', 'term_no', 'rate', 'fund_code']].apply(lambda x: cal_fund_fee(**dict(x))['lkb_fund_fee'], axis=1)
df_good.ref_id = df_good.ref_id.astype(int)
df_good['should_punish'] = df_good[['contract_amount', 'deadline', 'repaid_at', 'cur_principle', 'contract_term', 'term_no', 'rate', 'fund_code','ref_id']].apply(lambda x: cal_deplay_fee(**dict(x))['lkb_deplay_fee'], axis=1)
df_good['fund_punish'] = df_good[['contract_amount', 'deadline', 'repaid_at', 'cur_principle', 'cur_interest', 'contract_term', 'term_no', 'rate', 'fund_code','ref_id']].apply(lambda x: cal_fund_fee(**dict(x))['lkb_fund_fee'], axis=1)
df_good['should_punish'] = df_good['should_punish'] + df_good['fund_punish']
# 更新数据库
df_good['id'] = df_good['id'].map('{:.0f}'.format)
......
......@@ -34,7 +34,7 @@ chunksize = 5000
sql_plan_id = '''
SELECT t2.id plan_id FROM user_repayment_plan t2 WHERE id IN (17818535,14951401,13183085,16775621,16023121,18481649,18478739,18239129,16135315,14459209,15815947,16793909,17317973,16647695,16779713,16960183,16862699,20435587,17356583,16947229,15048301,18538103,16853759,16723967,17990615,17992793,17992907,17995541,17996099,17999693,17917967,18001511,17939003,17939735,19348913)
SELECT t2.id plan_id FROM user_repayment_plan t2 WHERE id IN (17939003,18001511,17999693,19348913,17992793,17992907,17990615,17939735,17995541,17917967,17996099,13183085,17818535,14951401,16775621,16793909,18538103,15048301,17317973,16862699,16779713,16947229,16853759,16723967,17356583,16960183,16647695,20435587,16023121,14459209,16135315,18239129,15815947,18478739,18481649)
'''
#
......
......@@ -30,23 +30,22 @@ engine_audit = create_engine('mysql+mysqldb://bo.wang:#mn89453YU9io80@172.16.3.2
# SELECT t2.id FROM red_packet_detail t1 LEFT JOIN user_repayment_plan t2 ON t1.ref_id=t2.ref_id AND t1.term_no=t2.term_no WHERE xyqb_repaid_at>="2017-06-01" AND xyqb_repaid_at<"2017-07-01"
# ) group by plan_id
# '''
#AND t2.current_repayment = 0
# sql_plan_ref = """
# SELECT
# sum(ref_amount) repay_amount,
# plan_id
# FROM
# xjd_repay_plan_repay_record_ref t1
# JOIN user_repayment_plan t2 ON t1.plan_id = t2.id
# WHERE
#
# t2.xyqb_repaid_at >= "2017-10-01"
# AND t2.xyqb_repaid_at < "2017-11-10"
# AND t2.repay_status = 3
#
# GROUP BY
# t1.plan_id
# """
# AND t2.current_repayment = 0
sql_plan_ref = """
SELECT
sum(ref_amount) repay_amount,
plan_id
FROM
xjd_repay_plan_repay_record_ref t1
JOIN user_repayment_plan t2 ON t1.plan_id = t2.id
WHERE
t2.xyqb_repaid_at >= "2017-10-01"
AND t2.xyqb_repaid_at < "2017-11-10"
AND t2.repay_status = 3
GROUP BY
t1.plan_id
"""
#
# sql_1 = """
#
......@@ -74,8 +73,10 @@ engine_audit = create_engine('mysql+mysqldb://bo.wang:#mn89453YU9io80@172.16.3.2
# 89647
# 9892093
sql_plan_ref='''
select sum(ref_amount) repay_amount,plan_id from xjd_repay_plan_repay_record_ref where plan_id in (17818535,14951401,13183085,16775621,16023121,18481649,18478739,18239129,16135315,14459209,15815947,16793909,17317973,16647695,16779713,16960183,16862699,20435587,17356583,16947229,15048301,18538103,16853759,16723967,17990615,17992793,17992907,17995541,17996099,17999693,17917967,18001511,17939003,17939735,19348913) GROUP BY plan_id
select sum(ref_amount) repay_amount,plan_id from xjd_repay_plan_repay_record_ref where plan_id in (17939003,18001511,17999693,19348913,17992793,17992907,17990615,17939735,17995541,17917967,17996099,13183085,17818535,14951401,16775621,16793909,18538103,15048301,17317973,16862699,16779713,16947229,16853759,16723967,17356583,16960183,16647695,20435587,16023121,14459209,16135315,18239129,15815947,18478739,18481649) GROUP BY plan_id
'''
# (4775015,13699135,4864585,10403491,14023021,10832639,12008815,10853291,4301879,13287685,11573917,4779607,13742293,10365019,11553475,14580895,12916795,13911511,8994139,11487055,11817439,15644719,4247083,10332679,15760377,11571775,13895353,11606641,15754995,11561665,15606439,13014299,13807459,10282111,12515395,4780291,13902949,4761541,10559023,14415019,10959971,10745407,9378703,14444797,15615711,11220653,13920001,13545217,4683485,10769671,14287729,15828507,9069751,14755609,16963339,10735015,11533387,15840135,12034657,15721821,14555149,14144305,10868297,13308733,14156563,15736779,15742785,14163055,10768735,15735681,10857341,12266897,13606735,11571493,15742479,6206467,14147245,9038713,13380133,15737133,16187587,9077323,17104759,16156489,4843837,16164091,13381843,13379551,13383283,16211215,9112873,13383301,13382461,11043875,8973289,14035141,11016569,10369021,10984583,10655257,12855109,15657103,6206851,11364493,15080977,15628705,13634233,11060357,16474093,14008321,10712905,15617629,10511893,13267477,13839097,13588795,13311103,15749865,15727101,15747999,13909609,14003449,10755181,13932175,13585117,15739185,10731211,13038637,15655039,15760299,15101515,10637431,17040421,9358441,16983085,9125593,15736347,18349033,11246465,15835545,12989767,15613143,16891159,10730821,11557201,15835221,18337705,11456947,18332905,18330301,11657689,15560943,15840597,9078805,11428417,18336817,18319051,18329899,16242301,18330175,18328963,11230439,9080923,11510455,11507503,18327277,13961989,15339693,15338487,15333801,14600089,14599243,14585713,14519131,11649391,14583841,11740909,11759611,14581057,14581435,11852725,11749825,11792365,14477329,11829133,17987269,9207991,11765539,9179101,11742745,15844209,15942117,15863913,15864495,15868065,15923661,14478625,15919335,14528929,11727331,15869787,15866655,11835961,11788261,14528851,15917187,15869685,14526817,14464321,15870609,15862899,14484025,15841887,14583295,11813413,12046555,14344813,14339473,11942425,11953711,12013771,12059689,14163529,14425939,14401057,14394619,14400925,14395297,14381095,11858641,14448967,14392471,14388925,14434507,14451847,11994727,14462455,10247353,14165653,12096001,14436001,14452903,14435929,14300245,11989483,14375929,11941081,14395837,14402641,14394949,12028513,12092737,12077305,14387665,14374897,14254213,14380267,14374801,12056881,12016279,16039467,15991737,16065501,14318995,12022261,16056645,14318845,16044039,14312893,10091581,16051917,16038549,14319841,11924791,16040697,16046283,14445013,11902843,14390497,14163811,16030701,14449345,15970761,11880889,14127847,15785175,14135347,14120623,14123209,15796251,15784791,15792123,12153235,12099055,12112669,14207431,14190289,14184163,18368707,18382999,18369991,18379243,18364357,18320899,18368389,18370969,18367063,18370237,18373267,18382483)
# (17939003,18001511,17999693,19348913,17992793,17992907,17990615,17939735,17995541,17917967,17996099,13183085,17818535,14951401,16775621,16793909,18538103,15048301,17317973,16862699,16779713,16947229,16853759,16723967,17356583,16960183,16647695,20435587,16023121,14459209,16135315,18239129,15815947,18478739,18481649)
sql_user_plan = """select id plan_id,ref_id,term_no, principle, interest, service_fee, should_punish,repay_status from user_repayment_plan where id in %s """
......
......@@ -59,6 +59,50 @@ OR t1.mitigate_interest != t2.mitigate_interest
OR t1.mitigate_principle !=t2.mitigate_principle
OR t1.remain_income != t2.remain_income
"""
# 检查放款金额和本金之和是否相等
sql_check_loan_total_principal = """
SELECT
temp_table.id,
temp_table.principle,
temp_table.interest,
temp_table.repayment_plan_id,
temp_table.total_principle,
t3.contract_loan_amount,
t3.ref_id
FROM
audit.loan_manifest t3
JOIN (
SELECT
t1.ref_id,
t2.id,
t2.principle,
t2.interest,
t2.repayment_plan_id,
sum(t2.principle) total_principle
FROM
audit.loan_manifest t1
JOIN user_repayment_plan t2 ON t1.ref_id = t2.ref_id
WHERE
t1.is_active IN (1 ,- 2)
AND t1.loan_paid_at >= "2017-10-01"
AND t1.loan_paid_at < "2017-11-01"
GROUP BY
t1.ref_id
) AS temp_table ON t3.ref_id = temp_table.ref_id AND abs(t3.contract_loan_amount-temp_table.total_principle)!=0
"""
# 检查是否有不合理的remain
sql_check_remain = """
SELECT
t1.fund_code,
t2.*
FROM
user_repayment_plan t1
JOIN xjd_repay_plan_repay_record_ref t2 ON t1.id = t2.plan_id
WHERE
(t1.fund_code!=300 AND t1.fund_code!=340)
AND t1.xyqb_repaid_at >= "2017-10-01" AND t2.remain_income>0;
"""
sql_check_sql_ref_5 = """
SELECT * FROM xjd_repay_plan_repay_record_ref t1 JOIN repay_record_online t2 ON t1.record_id=t2.id AND t1.repay_channel=t2.pay_approach GROUP BY t1.record_id HAVING ROUND(SUM(t1.ref_amount) - t2.amount,2) <> 0
"""
......
# -*- coding:utf-8 -*-
# Author: WuKong
import sys
import datetime
import itertools
import pandas as pd
from sqlalchemy import create_engine
import multiprocessing as mtp
import os
reload(sys)
sys.setdefaultencoding('utf8')
engine_audit = create_engine(
'mysql+mysqldb://internal_r:ArbNgtvlJzZHXsEu@172.16.3.201:3306/audit?charset=utf8',
echo=True)
engine_payment_center = create_engine(
'mysql+mysqldb://bowang:in78u6ytgbhj56r@192.168.4.6:8066/payment_center?charset=utf8',
echo=False)
engine_xyqb = create_engine(
'mysql+mysqldb://bowang:in78u6ytgbhj56r@192.168.4.6:8066/xyqb?charset=utf8',
echo=False)
sql_audit_loan = """
SELECT ref_id ,loan_id,contract_loan_amount,DATE(loan_paid_at) FROM loan_manifest WHERE funding_code=420
"""
sql_xyqb_loan = """
SELECT loan_application_history_id loan_id,DATE(loan_paid_at),contract_loan_amount FROM loan_application_manifest_history WHERE funding_corp_id =420 AND transaction_status in (2,5) AND loan_paid_at<"2017-11-01"
"""
df_audit_loan = pd.read_sql(sql=sql_audit_loan,con=engine_audit)
df_xyqb_loan = pd.read_sql(sql=sql_xyqb_loan,con=engine_xyqb)
\ No newline at end of file
# -*- coding:utf-8 -*-
# Author: Perry_Zhu
import sys
import pandas as pd
from sqlalchemy import create_engine
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:/数据汇总/白条/还资金方/2017-10/'
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)
tj()
# -*- coding:utf-8 -*-
# Author: Perry_Zhu
import datetime
import multiprocessing as mtp
import sys
from itertools import product
import pandas as pd
from dateutil.relativedelta import relativedelta
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/new_transaction?charset=utf8',
echo=True)
path = u'E:/数据汇总/白条/还资金方/2017-10/'
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)
tj()
# coding: utf-8
# Author: Perry_Zhu
import sys
stdout = sys.stdout
......
# coding: utf-8
import sys
stdout = sys.stdout
# 加入父级搜索路径,根据情况修改
sys.path.insert(0, '..')
sys.path.insert(0, '../..')
import pandas as pd
import numpy as np
import datetime
import os
from sqlalchemy import create_engine
sys.stdout = stdout
# 引入数据库连接,并使修改生效
pd.options.mode.chained_assignment = None
pd.set_option('display.float_format', lambda x: '%.5f' % x)
mysql_engine = create_engine( 'mysql+mysqldb://internal_r:ArbNgtvlJzZHXsEu@172.16.3.201:3306/new_transaction?charset=utf8', echo=True)
# 获取当前时间,用于创建文件路径,分类存储文件
today = datetime.datetime.now()
date_str = today.strftime('%Y%m%d')
# 主程序代码所在的路径
base_path = os.getcwd()
# 临时文件路径
tmp_path = os.path.join(base_path, 'file_' + date_str, 'temp')
# 输出文件路径
file_path = os.path.join(base_path, 'file_' + date_str)
if not os.path.exists(file_path):
os.makedirs(file_path)
if not os.path.exists(tmp_path):
os.makedirs(tmp_path)
start_time='2017-10-01'
end_time='2017-11-01'
out_file_path=u'/vpants/shaun/jupyter/shiyao/baitiao/out_file/'
sql_baoli = """
SELECT
concat(bo.order_no, ubrp.term_no) 唯一编号,
m.merchant_name 商户名称,
bo.order_no 产品编号,
fc.fund_name 资金方,
bo.contract_term 放款期数,
ubrp.term_no 当前期数,
date(rr.repaid_at) 实还时间,
brprrr.ref_amount 还款总额,
brprrr.principle - brprrr.mitigate_principle 实还本金,
0.0 实还利息,
brprrr.interest - brprrr.mitigate_interest 实还服务费,
brprrr.punish - brprrr.mitigate_collection_relief 实还罚息,
brprrr.remain_income 其他收益,
rr.repay_channel_flow_id 流水号,
rc.approach_name 还款账户,
rr.amount 账单金额,
date(ubrp.deadline) 应还日期,
ubrp.principle 应还本金,
0.0 应还利息
FROM baitiao_repay_plan_repay_record_ref brprrr
JOIN test_mzh.repay_record_amount rr ON rr.record_id = brprrr.record_id AND rr.repay_channel = brprrr.repay_channel AND rr.repaid_at >= '%s' AND rr.repaid_at < '%s'
JOIN user_bt_repayment_plan ubrp ON ubrp.id = brprrr.plan_id
JOIN baitiao_audit.baitiao_order bo ON bo.ref_id = ubrp.ref_id and bo.is_active in(1,-2,0)
JOIN baitiao_audit.merchant m ON m.merchant_id = bo.merchantId
JOIN baitiao_audit.fund_corp fc ON fc.id = bo.funding_corp_id and bo.funding_corp_id=1
JOIN new_transaction.repay_channel rc ON rc.id = brprrr.repay_channel
"""
sql_zhitou = """
SELECT
concat(bo.order_no, ubrp.term_no) 唯一编号,
m.merchant_name 商户名称,
bo.order_no 产品编号,
fc.fund_name 资金方,
bo.contract_term 放款期数,
ubrp.term_no 当前期数,
date(rr.repaid_at) 实还时间,
brprrr.ref_amount 还款总额,
brprrr.principle - brprrr.mitigate_principle 实还本金,
0.0 实还利息,
brprrr.interest - brprrr.mitigate_interest 实还服务费,
brprrr.punish - brprrr.mitigate_collection_relief 实还罚息,
brprrr.remain_income 其他收益,
rr.repay_channel_flow_id 流水号,
rc.approach_name 还款账户,
rr.amount 账单金额,
date(bfrp.deadline) 应还日期,
bfrp.principal 应还本金,
bfrp.interest 应还利息
FROM baitiao_repay_plan_repay_record_ref brprrr
JOIN test_mzh.repay_record_amount rr ON rr.record_id = brprrr.record_id AND rr.repay_channel = brprrr.repay_channel AND rr.repaid_at >= '%s' AND rr.repaid_at < '%s'
JOIN user_bt_repayment_plan ubrp ON ubrp.id = brprrr.plan_id
join bt_funding_repayment_plan bfrp on ubrp.repayment_plan_id =bfrp.repay_plan_id and ubrp.sys_tag='XYQB_BILL_BT'
JOIN baitiao_audit.baitiao_order bo ON bo.ref_id = ubrp.ref_id and bo.funding_corp_id=5 and bo.is_active in(1,-2)
JOIN baitiao_audit.merchant m ON m.merchant_id = bo.merchantId
JOIN baitiao_audit.fund_corp fc ON fc.id = bo.funding_corp_id
JOIN new_transaction.repay_channel rc ON rc.id = brprrr.repay_channel
"""
sql_zhitou_tuikuan = """
SELECT
concat(bo.order_no, ubrp.term_no) 唯一编号,
m.merchant_name 商户名称,
bo.order_no 产品编号,
fc.fund_name 资金方,
bo.contract_term 放款期数,
ubrp.term_no 当前期数,
date(rr.repaid_at) 实还时间,
brprrr.ref_amount 还款总额,
brprrr.principle - brprrr.mitigate_principle 实还本金,
0.0 实还利息,
brprrr.interest - brprrr.mitigate_interest 实还服务费,
brprrr.punish - brprrr.mitigate_collection_relief 实还罚息,
brprrr.remain_income 其他收益,
rr.repay_channel_flow_id 流水号,
rc.approach_name 还款账户,
rr.amount 账单金额,
date(ubrp.deadline) 应还日期,
ubrp.principle 应还本金,
0.0 应还利息
FROM baitiao_repay_plan_repay_record_ref brprrr
JOIN test_mzh.repay_record_amount rr ON rr.record_id = brprrr.record_id AND rr.repay_channel = brprrr.repay_channel AND rr.repaid_at >= '%s' AND rr.repaid_at < '%s'
JOIN user_bt_repayment_plan ubrp ON ubrp.id = brprrr.plan_id
JOIN baitiao_audit.baitiao_order bo ON bo.ref_id = ubrp.ref_id and bo.is_active=-2
JOIN baitiao_audit.merchant m ON m.merchant_id = bo.merchantId
JOIN baitiao_audit.fund_corp fc ON fc.id = bo.funding_corp_id and bo.funding_corp_id=5
JOIN new_transaction.repay_channel rc ON rc.id = brprrr.repay_channel
"""
df_bl = pd.read_sql(sql_baoli % (start_time,end_time), con=mysql_engine)
df_zt = pd.read_sql(sql_zhitou % (start_time,end_time), con=mysql_engine)
#直投白条线下退款
df_zt_tk = pd.read_sql(sql_zhitou_tuikuan % (start_time,end_time), con=mysql_engine)
df = pd.concat([df_bl,df_zt,df_zt_tk], ignore_index=True)
sql_cash_repay = """
SELECT
bo.order_no 唯一编号,
m.merchant_name 商户名称,
bo.order_no 产品编号,
fc.fund_name 资金方,
bo.contract_term 放款期数,
1 当前期数,
date(rra.repaid_at) 实还时间,
bcrr.ref_amount 还款总额,
bcrr.ref_amount 实还本金,
0 实还利息,
0 实还服务费,
0 实还罚息,
0 其他收益,
rra.repay_channel_flow_id 流水号,
rc.approach_name 还款账户,
rra.amount 账单金额,
'' 应还日期,
bo.real_loan_amount 应还本金,
0.0 应还利息
FROM new_transaction.baitiao_cash_repay bcr
JOIN (select repay_id,record_id,repay_channel,sum(ref_amount)ref_amount from new_transaction.baitiao_cash_record_ref group by 1,2) bcrr ON bcrr.repay_id = bcr.id
JOIN test_mzh.repay_record_amount rra ON rra.record_id = bcrr.record_id and rra.amount=bcrr.ref_amount AND bcrr.repay_channel in(18,24) AND rra.repaid_at >= '%s' AND rra.repaid_at < '%s'
JOIN baitiao_audit.baitiao_order bo ON bo.ref_id = bcr.ref_id and bo.is_active in(1,-2)
JOIN baitiao_audit.merchant m ON m.merchant_id = bo.merchantId
JOIN baitiao_audit.fund_corp fc ON fc.id = bo.funding_corp_id
JOIN new_transaction.repay_channel rc ON rc.id = bcrr.repay_channel;
"""
df_cash_repay = pd.read_sql(sql=sql_cash_repay % (start_time,end_time), con=mysql_engine)
tmp = df.append(df_cash_repay)
tmp.loc[tmp[u'唯一编号'].duplicated(), [u'应还本金', u'应还利息']] = 0
tmp.loc[tmp[[u'流水号', u'还款账户']].duplicated(), [u'账单金额']] = 0
tmp[u'应还本息-实还本息'] = np.round(tmp[u'应还本金'] - tmp[u'实还本金'] + tmp[u'应还利息'] - tmp[u'实还利息'], 2)
tmp[u'还款总额-账单金额'] = np.round(tmp[u'还款总额'] - tmp[u'账单金额'], 2)
date_range = pd.date_range(start=start_time, end=end_time, freq='MS')
cnt = 0
for i in xrange(0, len(date_range) - 1):
tmp = df.loc[(df[u'实还时间'] >= date_range[i].date()) & (df[u'实还时间'] < date_range[i+1].date())]
cnt += len(tmp)
cash_tmp = df_cash_repay.loc[(df_cash_repay[u'实还时间'] >= date_range[i].date()) & (df_cash_repay[u'实还时间'] < date_range[i+1].date())]
if len(cash_tmp) > 0:
tmp = tmp.append(cash_tmp)
print date_range[i].year, date_range[i].month, len(tmp), tmp[u'还款总额'].sum()
tmp.loc[tmp[u'唯一编号'].duplicated(), [u'应还本金', u'应还利息']] = 0
tmp.loc[tmp[[u'流水号', u'还款账户']].duplicated(), [u'账单金额']] = 0
tmp[u'应还本息-实还本息'] = np.round(tmp[u'应还本金'] - tmp[u'实还本金'] + tmp[u'应还利息'] - tmp[u'实还利息'], 2)
tmp[u'还款总额-账单金额'] = np.round(tmp[u'还款总额'] - tmp[u'账单金额'], 2)
tmp = tmp[[u'唯一编号',u'商户名称',u'产品编号',u'资金方',u'放款期数',u'当前期数',u'实还时间',u'还款总额',u'实还本金',u'实还利息',u'实还服务费',u'实还罚息',u'其他收益',u'流水号',u'还款账户',u'账单金额',u'应还日期',u'应还本金',u'应还利息',u'应还本息-实还本息',u'还款总额-账单金额']]
tmp.to_csv(out_file_path+ u'人工控制非去哪儿白条%s-%02d客户实还表(按还款时间)V2.csv' % (date_range[i].year, date_range[i].month), index=None, encoding='utf8')
# tmp.to_excel(os.path.join(file_path, '客户实还表(实还时间%s-%02d).xlsx' % (date_range[i].year, date_range[i].month)), index=None)
print cnt, len(df)
loan_baoli = """
SELECT
concat(bo.order_no, ubrp.term_no) 唯一编号,
m.merchant_name 商户名称,
bo.order_no 产品编号,
fc.fund_name 资金方,
bo.contract_term 放款期数,
ubrp.term_no 当前期数,
date(rr.repaid_at) 实还时间,
brprrr.ref_amount 还款总额,
brprrr.principle - brprrr.mitigate_principle 实还本金,
0.0 实还利息,
brprrr.interest - brprrr.mitigate_interest 实还服务费,
brprrr.punish - brprrr.mitigate_collection_relief 实还罚息,
brprrr.remain_income 其他收益,
rr.repay_channel_flow_id 流水号,
rc.approach_name 还款账户,
rr.amount 账单金额,
date(ubrp.deadline) 应还日期,
ubrp.principle 应还本金,
0.0 应还利息,
date(bo.loan_paid_at) 放款日期
FROM baitiao_repay_plan_repay_record_ref brprrr
JOIN test_mzh.repay_record_amount rr ON rr.record_id = brprrr.record_id AND rr.repay_channel = brprrr.repay_channel
JOIN user_bt_repayment_plan ubrp ON ubrp.id = brprrr.plan_id
JOIN baitiao_audit.baitiao_order bo ON bo.ref_id = ubrp.ref_id AND bo.is_active=1 and bo.funding_corp_id=1 AND bo.loan_paid_at >= '%s' AND bo.loan_paid_at < '%s'
JOIN baitiao_audit.merchant m ON m.merchant_id = bo.merchantId
JOIN baitiao_audit.fund_corp fc ON fc.id = bo.funding_corp_id
JOIN new_transaction.repay_channel rc ON rc.id = brprrr.repay_channel
union all
SELECT
concat(bo.order_no, ubrp.term_no) 唯一编号,
m.merchant_name 商户名称,
bo.order_no 产品编号,
fc.fund_name 资金方,
bo.contract_term 放款期数,
ubrp.term_no 当前期数,
date(rr.repaid_at) 实还时间,
brprrr.ref_amount 还款总额,
brprrr.principle - brprrr.mitigate_principle 实还本金,
0 实还利息,
brprrr.interest - brprrr.mitigate_interest 实还服务费,
brprrr.punish - brprrr.mitigate_collection_relief 实还罚息,
brprrr.remain_income 其他收益,
rr.repay_channel_flow_id 流水号,
rc.approach_name 还款账户,
rr.amount 账单金额,
date(ubrp.deadline) 应还日期,
ubrp.principle 应还本金,
0 应还利息,
date(bo.train_cancel_at) 放款日期
FROM baitiao_repay_plan_repay_record_ref brprrr
JOIN test_mzh.repay_record_amount rr ON rr.record_id = brprrr.record_id AND rr.repay_channel = brprrr.repay_channel
JOIN user_bt_repayment_plan ubrp ON ubrp.id = brprrr.plan_id
JOIN baitiao_audit.baitiao_order bo ON bo.ref_id = ubrp.ref_id AND bo.is_active = -2 and bo.funding_corp_id=1 AND bo.train_cancel_at >= '%s' AND bo.train_cancel_at < '%s'
JOIN baitiao_audit.merchant m ON m.merchant_id = bo.merchantId
JOIN baitiao_audit.fund_corp fc ON fc.id = bo.funding_corp_id
JOIN new_transaction.repay_channel rc ON rc.id = brprrr.repay_channel
"""
loan_zhitou = """
SELECT
concat(bo.order_no, ubrp.term_no) 唯一编号,
m.merchant_name 商户名称,
bo.order_no 产品编号,
fc.fund_name 资金方,
bo.contract_term 放款期数,
ubrp.term_no 当前期数,
date(rr.repaid_at) 实还时间,
brprrr.ref_amount 还款总额,
brprrr.principle - brprrr.mitigate_principle 实还本金,
0.0 实还利息,
brprrr.interest - brprrr.mitigate_interest 实还服务费,
brprrr.punish - brprrr.mitigate_collection_relief 实还罚息,
brprrr.remain_income 其他收益,
rr.repay_channel_flow_id 流水号,
rc.approach_name 还款账户,
rr.amount 账单金额,
date(bfrp.deadline) 应还日期,
bfrp.principal 应还本金,
bfrp.interest 应还利息,
date(bo.loan_paid_at) 放款日期
FROM baitiao_repay_plan_repay_record_ref brprrr
JOIN test_mzh.repay_record_amount rr
ON rr.record_id = brprrr.record_id AND rr.repay_channel = brprrr.repay_channel
JOIN user_bt_repayment_plan ubrp ON ubrp.id = brprrr.plan_id
join bt_funding_repayment_plan bfrp on ubrp.repayment_plan_id =bfrp.repay_plan_id and ubrp.sys_tag='XYQB_BILL_BT'
JOIN baitiao_audit.baitiao_order bo ON bo.ref_id = ubrp.ref_id AND bo.is_active=1 and bo.funding_corp_id=5 AND bo.loan_paid_at >= '%s' AND bo.loan_paid_at < '%s'
JOIN baitiao_audit.merchant m ON m.merchant_id = bo.merchantId
JOIN baitiao_audit.fund_corp fc ON fc.id = bo.funding_corp_id
JOIN new_transaction.repay_channel rc ON rc.id = brprrr.repay_channel
union all
SELECT
concat(bo.order_no, ubrp.term_no) 唯一编号,
m.merchant_name 商户名称,
bo.order_no 产品编号,
fc.fund_name 资金方,
bo.contract_term 放款期数,
ubrp.term_no 当前期数,
date(rr.repaid_at) 实还时间,
brprrr.ref_amount 还款总额,
brprrr.principle - brprrr.mitigate_principle 实还本金,
0 实还利息,
brprrr.interest - brprrr.mitigate_interest 实还服务费,
brprrr.punish - brprrr.mitigate_collection_relief 实还罚息,
brprrr.remain_income 其他收益,
rr.repay_channel_flow_id 流水号,
rc.approach_name 还款账户,
rr.amount 账单金额,
date(bfrp.deadline) 应还日期,
bfrp.principal 应还本金,
bfrp.interest 应还利息,
date(bo.train_cancel_at) 放款日期
FROM baitiao_repay_plan_repay_record_ref brprrr
JOIN test_mzh.repay_record_amount rr ON rr.record_id = brprrr.record_id AND rr.repay_channel = brprrr.repay_channel
JOIN user_bt_repayment_plan ubrp ON ubrp.id = brprrr.plan_id
join bt_funding_repayment_plan bfrp on ubrp.repayment_plan_id =bfrp.repay_plan_id and ubrp.sys_tag='XYQB_BILL_BT'
JOIN baitiao_audit.baitiao_order bo ON bo.ref_id = ubrp.ref_id AND bo.is_active = -2 AND bo.funding_corp_id=5 AND bo.train_cancel_at >= '%s' AND bo.train_cancel_at < '%s'
JOIN baitiao_audit.merchant m ON m.merchant_id = bo.merchantId
JOIN baitiao_audit.fund_corp fc ON fc.id = bo.funding_corp_id
JOIN new_transaction.repay_channel rc ON rc.id = brprrr.repay_channel
"""
# 直投线下退款
loan_zhitou_apli = """
SELECT
concat(bo.order_no, ubrp.term_no) 唯一编号,
m.merchant_name 商户名称,
bo.order_no 产品编号,
fc.fund_name 资金方,
bo.contract_term 放款期数,
ubrp.term_no 当前期数,
date(rr.repaid_at) 实还时间,
brprrr.ref_amount 还款总额,
brprrr.principle - brprrr.mitigate_principle 实还本金,
0 实还利息,
brprrr.interest - brprrr.mitigate_interest 实还服务费,
brprrr.punish - brprrr.mitigate_collection_relief 实还罚息,
brprrr.remain_income 其他收益,
rr.repay_channel_flow_id 流水号,
rc.approach_name 还款账户,
rr.amount 账单金额,
date(ubrp.deadline) 应还日期,
ubrp.principle 应还本金,
0 应还利息,
date(bo.train_cancel_at) 放款日期
FROM baitiao_repay_plan_repay_record_ref brprrr
JOIN test_mzh.repay_record_amount rr ON rr.record_id = brprrr.record_id AND rr.repay_channel = brprrr.repay_channel
JOIN user_bt_repayment_plan ubrp ON ubrp.id = brprrr.plan_id
JOIN baitiao_audit.baitiao_order bo ON bo.ref_id = ubrp.ref_id AND bo.is_active = -2 and bo.funding_corp_id=5 AND bo.train_cancel_at >= '%s' AND bo.train_cancel_at < '%s'
JOIN baitiao_audit.merchant m ON m.merchant_id = bo.merchantId
JOIN baitiao_audit.fund_corp fc ON fc.id = bo.funding_corp_id
JOIN new_transaction.repay_channel rc ON rc.id = brprrr.repay_channel
"""
df_bl = pd.read_sql(loan_baoli % (start_time,end_time,start_time,end_time), con=mysql_engine)
df_zt = pd.read_sql(loan_zhitou % (start_time,end_time,start_time,end_time), con=mysql_engine)
df_zt_apli=pd.read_sql(loan_zhitou_apli % (start_time,end_time), con=mysql_engine)
df_loan_repay = pd.concat([df_bl,df_zt,df_zt_apli], ignore_index=True)
sql_cash_loan_repay = """
SELECT
bo.order_no 唯一编号,
m.merchant_name 商户名称,
bo.order_no 产品编号,
fc.fund_name 资金方,
bo.contract_term 放款期数,
1 当前期数,
date(rra.repaid_at) 实还时间,
bcrr.ref_amount 还款总额,
bcrr.ref_amount 实还本金,
0 实还利息,
0 实还服务费,
0 实还罚息,
0 其他收益,
rra.repay_channel_flow_id 流水号,
rc.approach_name 还款账户,
rra.amount 账单金额,
'' 应还日期,
bo.real_loan_amount 应还本金,
0 应还利息,
date(bo.train_cancel_at) 放款日期
FROM baitiao_cash_record_ref bcrr
JOIN baitiao_cash_repay bcr ON bcrr.repay_id = bcr.id
JOIN test_mzh.repay_record_amount rra ON rra.record_id = bcrr.record_id and rra.repay_channel in(18,24) -- AND rra.repay_channel = bcrr.repay_channel
JOIN baitiao_audit.baitiao_order bo ON bo.ref_id = bcr.ref_id AND bo.is_active = -2 AND bo.train_cancel_at >= '%s' AND bo.train_cancel_at < '%s'
JOIN baitiao_audit.merchant m ON m.merchant_id = bo.merchantId
JOIN baitiao_audit.fund_corp fc ON fc.id = bo.funding_corp_id
JOIN new_transaction.repay_channel rc ON rc.id = bcrr.repay_channel
UNION ALL
SELECT
bo.order_no 唯一编号,
m.merchant_name 商户名称,
bo.order_no 产品编号,
fc.fund_name 资金方,
bo.contract_term 放款期数,
1 当前期数,
date(rra.repaid_at) 实还时间,
bcrr.ref_amount 还款总额,
bcrr.ref_amount 实还本金,
0 实还利息,
0 实还服务费,
0 实还罚息,
0 其他收益,
rra.repay_channel_flow_id 流水号,
rc.approach_name 还款账户,
rra.amount 账单金额,
'' 应还日期,
bo.real_loan_amount 应还本金,
0 应还利息,
date(bo.loan_paid_at) 放款日期
FROM baitiao_cash_record_ref bcrr
JOIN baitiao_cash_repay bcr ON bcrr.repay_id = bcr.id
JOIN test_mzh.repay_record_amount rra ON rra.record_id = bcrr.record_id and rra.amount=bcrr.ref_amount AND rra.repay_channel in(18,24) -- AND rra.repay_channel = bcrr.repay_channel
JOIN baitiao_audit.baitiao_order bo ON bo.ref_id = bcr.ref_id AND bo.is_active <> -2 AND bo.loan_paid_at >= '%s' AND bo.loan_paid_at < '%s'
JOIN baitiao_audit.merchant m ON m.merchant_id = bo.merchantId
JOIN baitiao_audit.fund_corp fc ON fc.id = bo.funding_corp_id
JOIN new_transaction.repay_channel rc ON rc.id = bcrr.repay_channel;
"""
df_cash_loan_repay = pd.read_sql(sql=sql_cash_loan_repay % (start_time,end_time,start_time,end_time), con=mysql_engine)
date_range = pd.date_range(start=start_time, end=end_time, freq='MS')
cnt = 0
for i in xrange(0, len(date_range) - 1):
tmp = df_loan_repay.loc[(df_loan_repay[u'放款日期'] >= date_range[i].date()) & (df_loan_repay[u'放款日期'] < date_range[i+1].date())]
cash_tmp = df_cash_loan_repay.loc[(df_cash_loan_repay[u'放款日期'] >= date_range[i].date()) & (df_cash_loan_repay[u'放款日期'] < date_range[i+1].date())]
if len(cash_tmp) > 0:
tmp = tmp.append(cash_tmp)
del tmp[u'放款日期']
cnt += len(tmp)
tmp.loc[tmp[[u'唯一编号']].duplicated(), [u'应还本金']] = 0
tmp.loc[tmp[[u'流水号', u'还款账户',u'账单金额']].duplicated(), [u'账单金额']] = 0
print date_range[i].year, date_range[i].month, len(tmp), tmp[u'应还本金'].sum()
tmp[u'应还本息-实还本息'] = np.round(tmp[u'应还本金'] - tmp[u'实还本金'] + tmp[u'应还利息'] - tmp[u'实还利息'], 2)
tmp[u'还款总额-账单金额'] = np.round(tmp[u'还款总额'] - tmp[u'账单金额'], 2)
tmp = tmp[[u'唯一编号',u'商户名称',u'产品编号',u'资金方',u'放款期数',u'当前期数',u'实还时间',u'还款总额',u'实还本金',u'实还利息',u'实还服务费',u'实还罚息',u'其他收益',u'流水号',u'还款账户',u'账单金额',u'应还日期',u'应还本金',u'应还利息',u'应还本息-实还本息',u'还款总额-账单金额']]
tmp.to_csv(out_file_path+ u'人工控制非去哪儿白条%s-%02d客户实还表(按放款时间).csv' % (date_range[i].year, date_range[i].month), index=None, encoding='gbk')
# tmp.to_excel(os.path.join(file_path, '客户实还表(放款时间%s-%02d).xlsx' % (date_range[i].year, date_range[i].month)), index=None)
print cnt, len(df_loan_repay)
\ No newline at end of file
# coding: utf-8
# Author: Perry_Zhu
import numpy as np
import pandas as pd
from sqlalchemy import create_engine
pd.options.mode.chained_assignment = None
pd.set_option('display.float_format', lambda x: '%.5f' % x)
engine_new_transaction = create_engine(
'mysql+mysqldb://internal_r:ArbNgtvlJzZHXsEu@172.16.3.201:3306/new_transaction?charset=utf8', echo=False)
start_time = '2017-10-01'
end_time = '2017-11-01'
out_file_path = u'/vpants/shaun/jupyter/shiyao/baitiao/out_file/'
loan_baoli = """
select tt.ref_id,sum(tt.real_loan_amount) 放款金额,sum(contract_loan_amount)本金债权
from(
SELECT
bo.ref_id,
IFNULL(bo.real_loan_amount, 0) real_loan_amount,
IFNULL(bo.contract_loan_amount, 0) contract_loan_amount
FROM
baitiao_audit.baitiao_order bo
WHERE
bo.loan_paid_at >= '%s'
AND bo.loan_paid_at < '%s'
AND bo.is_active = 1
AND bo.funding_corp_id = 1
UNION ALL
SELECT
bo.ref_id,
IFNULL(bo.real_loan_amount, 0) real_loan_amount,
IFNULL(bo.contract_loan_amount, 0) contract_loan_amount
FROM
baitiao_audit.baitiao_order bo
WHERE
bo.train_cancel_at >= '%s'
AND bo.train_cancel_at < '%s'
AND bo.is_active =- 2
AND bo.funding_corp_id = 1
)tt
group by 1
"""
loan_zhitou = """
SELECT
t1.ref_id,
IFNULL(t1.funding_loan_amount, 0) real_loan_amount,
IFNULL(t1.contract_loan_amount, 0) contract_loan_amount
FROM
baitiao_audit.baitiao_order t1
WHERE
t1.batch_no_id is not null
AND funding_corp_id = 5
AND t1.is_active = 1
AND t1.loan_paid_at >= '%s'
AND t1.loan_paid_at < '%s'
UNION ALL
SELECT
t1.ref_id,
IFNULL(t1.funding_loan_amount, 0) real_loan_amount,
IFNULL(t1.contract_loan_amount, 0) contract_loan_amount
FROM
baitiao_audit.baitiao_order t1
WHERE
t1.batch_no_id is not null
AND funding_corp_id = 5
AND t1.is_active = -2
AND t1.train_cancel_at >= '%s'
AND t1.train_cancel_at < '%s'
"""
df_bl = pd.read_sql(loan_baoli % (start_time, end_time, start_time, end_time), engine_new_transaction)
df_zt = pd.read_sql(loan_zhitou % (start_time, end_time, start_time, end_time), engine_new_transaction)
df_loan = pd.concat([df_bl, df_zt], ignore_index=True)
query_plan_com = """
SELECT tt.order_no,tt.ref_id,tt.term_no,tt.fund_name 资金方,tt.merchant_name 商户名称,
min(tt.loan_paid_at)loan_paid_at,min(tt.contract_term)贷款总期数,
min(tt.deadline)应还时间,SUM(tt.principle)应还本金,SUM(tt.interest) 应还利息
FROM(
SELECT
bo.order_no,
bo.ref_id,
ubrp.term_no ,
fc.fund_name,
m.merchant_name,
date(bo.loan_paid_at)loan_paid_at,
bo.contract_term ,
date(ubrp.deadline) deadline,
ubrp.principle ,
0.0 interest
FROM
user_bt_repayment_plan ubrp
JOIN baitiao_audit.baitiao_order bo ON bo.ref_id = ubrp.ref_id AND bo.is_active =1 AND bo.funding_corp_id =1 AND bo.loan_paid_at >= '%s' AND bo.loan_paid_at < '%s'
JOIN baitiao_audit.fund_corp fc ON fc.id = bo.funding_corp_id
JOIN baitiao_audit.merchant m ON bo.merchantId = m.merchant_id
union all
SELECT
bo.order_no,
bo.ref_id,
ubrp.term_no ,
fc.fund_name,
m.merchant_name,
date(bo.train_cancel_at) loan_paid_at,
bo.contract_term ,
date(ubrp.deadline) ,
ubrp.principle ,
0.0 interest
FROM
user_bt_repayment_plan ubrp
JOIN baitiao_audit.baitiao_order bo ON bo.ref_id = ubrp.ref_id AND bo.is_active =-2 AND bo.funding_corp_id =1 AND bo.train_cancel_at >= '%s' AND bo.train_cancel_at < '%s'
JOIN baitiao_audit.fund_corp fc ON fc.id = bo.funding_corp_id
JOIN baitiao_audit.merchant m ON bo.merchantId = m.merchant_id
UNION ALL
SELECT
bo.order_no,
bo.ref_id,
ubrp.term_no,
fc.fund_name ,
m.merchant_name ,
date(bo.loan_paid_at)loan_paid_at,
bo.contract_term ,
date(ubrp.deadline),
bfrp.principal,
bfrp.interest interest
FROM
user_bt_repayment_plan ubrp
JOIN bt_funding_repayment_plan bfrp ON ubrp.repayment_plan_id = bfrp.repay_plan_id AND ubrp.sys_tag = 'XYQB_BILL_BT'
JOIN baitiao_audit.baitiao_order bo ON bo.ref_id = ubrp.ref_id
JOIN baitiao_audit.fund_corp fc ON fc.id = bo.funding_corp_id
JOIN baitiao_audit.merchant m ON bo.merchantId = m.merchant_id AND bo.is_active = 1 AND bo.funding_corp_id = 5
AND bo.loan_paid_at >= '%s' AND bo.loan_paid_at < '%s'
)tt
GROUP BY 1,2,3
"""
df_plan_com = pd.read_sql(query_plan_com % (start_time, end_time, start_time, end_time, start_time, end_time),
engine_new_transaction)
query_cash_plan = """
SELECT tt.order_no,tt.ref_id,1 term_no,tt.fund_name 资金方,tt.merchant_name 商户名称,min(tt.loan_paid_at)loan_paid_at,min(tt.contract_term)贷款总期数,
'' 应还时间,SUM(tt.principle)应还本金,0.0 应还利息
FROM (
SELECT
bo.order_no,
bo.ref_id,
fc.fund_name ,
m.merchant_name ,
date(bo.loan_paid_at)loan_paid_at,
bo.contract_term ,
bcr.real_order_amount principle
FROM
baitiao_cash_repay bcr
JOIN baitiao_audit.baitiao_order bo ON bo.ref_id = bcr.ref_id AND bo.is_active=1 AND bo.funding_corp_id= 1 AND bo.loan_paid_at >= '%s' AND bo.loan_paid_at < '%s'
JOIN baitiao_audit.fund_corp fc ON fc.id = bo.funding_corp_id
JOIN baitiao_audit.merchant m ON bo.merchantId = m.merchant_id
UNION ALL
SELECT
bo.order_no,
bo.ref_id,
fc.fund_name,
m.merchant_name,
date(bo.train_cancel_at) loan_paid_at,
bo.contract_term ,
bcr.real_order_amount principle
FROM
baitiao_cash_repay bcr
JOIN baitiao_audit.baitiao_order bo ON bo.ref_id = bcr.ref_id AND bo.is_active=-2 AND bo.funding_corp_id =1 AND bo.train_cancel_at >= '%s' AND bo.train_cancel_at < '%s'
JOIN baitiao_audit.fund_corp fc ON fc.id = bo.funding_corp_id
JOIN baitiao_audit.merchant m ON bo.merchantId = m.merchant_id
)tt
GROUP BY 1,2,3
"""
df_cash_plan = pd.read_sql(sql=query_cash_plan % (start_time, end_time, start_time, end_time),
con=engine_new_transaction)
df_plan = pd.concat([df_plan_com, df_cash_plan], ignore_index=True, axis=0)
df_loan['term_no'] = 1
df_plan.ref_id = df_plan.ref_id.astype(int)
df_plan.term_no = df_plan.term_no.astype(int)
df_loan.ref_id = df_loan.ref_id.astype(int)
df_loan.term_no = df_loan.term_no.astype(int)
df_loan_all = pd.merge(df_loan, df_plan, on=['ref_id', 'term_no'], how='right')
df_loan_all.fillna(0, inplace=True)
query_repay_com = """
SELECT tt.ref_id,tt.term_no,sum(tt.principle) 实还本金,0.00 实还利息,sum(plan_repay) '应还本息 - 实还本息' from(
SELECT
bo.ref_id,
ubrp.term_no ,
(brprrr.principle- ifnull(brprrr.mitigate_principle,0)) principle,
(ubrp.principle - brprrr.principle) plan_repay
FROM
baitiao_repay_plan_repay_record_ref brprrr
JOIN user_bt_repayment_plan ubrp ON ubrp.id = brprrr.plan_id
JOIN baitiao_audit.baitiao_order bo ON bo.ref_id = ubrp.ref_id AND bo.is_active =1 AND bo.funding_corp_id =1 AND bo.loan_paid_at >= '%s' AND bo.loan_paid_at < '%s'
UNION ALL
SELECT
bo.ref_id,
ubrp.term_no,
(brprrr.principle- ifnull(brprrr.mitigate_principle,0)) principle,
(ubrp.principle - brprrr.principle) plan_repay
FROM
baitiao_repay_plan_repay_record_ref brprrr
JOIN user_bt_repayment_plan ubrp ON ubrp.id = brprrr.plan_id
JOIN baitiao_audit.baitiao_order bo ON bo.ref_id = ubrp.ref_id AND bo.is_active =-2 AND bo.funding_corp_id =1 AND bo.train_cancel_at >= '%s' AND bo.train_cancel_at < '%s'
)tt
GROUP BY 1,2
"""
df_repay_com = pd.read_sql(query_repay_com % (start_time, end_time, start_time, end_time), engine_new_transaction)
query_repay_zt = """
SELECT tt.ref_id,tt.term_no,sum(tt.principle) 实还本金,sum(plan_repay) '应还本息 - 实还本息' from(
SELECT
bo.ref_id,
ubrp.term_no ,
(brprrr.principle- ifnull(brprrr.mitigate_principle,0)) principle,
(ubrp.principle - brprrr.principle) plan_repay
FROM
baitiao_repay_plan_repay_record_ref brprrr
JOIN user_bt_repayment_plan ubrp ON ubrp.id = brprrr.plan_id
JOIN baitiao_audit.baitiao_order bo ON bo.ref_id = ubrp.ref_id AND bo.is_active =1 AND bo.funding_corp_id =5 AND bo.loan_paid_at >= '%s' AND bo.loan_paid_at < '%s'
UNION ALL
SELECT
bo.ref_id,
ubrp.term_no,
(brprrr.principle- ifnull(brprrr.mitigate_principle,0)) principle,
(ubrp.principle - brprrr.principle) plan_repay
FROM
baitiao_repay_plan_repay_record_ref brprrr
JOIN user_bt_repayment_plan ubrp ON ubrp.id = brprrr.plan_id
JOIN baitiao_audit.baitiao_order bo ON bo.ref_id = ubrp.ref_id AND bo.is_active =-2 AND bo.funding_corp_id =5 AND bo.train_cancel_at >= '%s' AND bo.train_cancel_at < '%s'
)tt
GROUP BY 1,2
"""
df_repay_zt = pd.read_sql(query_repay_zt % (start_time, end_time, start_time, end_time), engine_new_transaction)
sql_cash_loan_repay = """
SELECT tt.ref_id,1 term_no,sum(tt.principle) 实还本金,sum(plan_repay) '应还本息 - 实还本息' FROM(
SELECT
bo.ref_id,
bcrr.ref_amount principle,
(bo.real_loan_amount - bcrr.ref_amount) plan_repay
FROM
new_transaction.baitiao_cash_repay bcr
JOIN (
SELECT
repay_id,
sum(ref_amount) ref_amount
FROM
new_transaction.baitiao_cash_record_ref
where repay_channel in(18,24)
GROUP BY
1
) bcrr ON bcrr.repay_id = bcr.id
JOIN baitiao_audit.baitiao_order bo ON bo.ref_id = bcr.ref_id AND bo.baitiao_type = 1 AND bo.loan_paid_at >= '%s' AND bo.loan_paid_at < '%s'
UNION ALL
SELECT
bo.ref_id,
bcrr.ref_amount principle,
(bo.real_loan_amount - bcrr.ref_amount) plan_repay
FROM
baitiao_cash_repay bcr
JOIN (
SELECT
repay_id,
sum(ref_amount) ref_amount
FROM
baitiao_cash_record_ref
where repay_channel =13
GROUP BY 1
) bcrr ON bcrr.repay_id = bcr.id
JOIN baitiao_audit.baitiao_order bo ON bo.ref_id = bcr.ref_id
AND bo.is_active = -2 AND bo.train_cancel_at >= '%s' AND bo.train_cancel_at < '%s'
)tt
GROUP BY 1,2
"""
df_cash_loan_repay = pd.read_sql(sql=sql_cash_loan_repay % (start_time, end_time, start_time, end_time),
con=engine_new_transaction)
df_repay = pd.concat([df_repay_com, df_repay_zt, df_cash_loan_repay], ignore_index=True, axis=0)
# df_repay.ref_id = df_repay.ref_id.astype(int)
df_repay.term_no = df_repay.term_no.astype(int)
# df_loan_all.ref_id = df_loan_all.ref_id.astype(int)
df_loan_all.term_no = df_loan_all.term_no.astype(int)
df = pd.merge(df_loan_all, df_repay, on=['ref_id', 'term_no'], how='left')
df.loc[df['ref_id'].duplicated(), [u'放款金额', u'本金债权']] = 0
# df.loc[tmp[['ref_id', 'term_no',u'放款金额']].duplicated(), [u'放款金额']] = 0
# df.loc[tmp[['ref_id', 'term_no',u'本金债权']].duplicated(), [u'本金债权']] = 0
df.rename(columns={'loan_paid_at': u'放款时间', 'order_no': u'唯一编码', 'term_no': u'应还期数'}, inplace=True)
df.drop(['ref_id'], axis=1, inplace=True)
df[u'实还本金'].fillna(0, inplace=True)
df[u'应还本息 - 实还本息'].fillna(0, inplace=True)
date_range = pd.date_range(start=start_time, end=end_time, freq='MS')
cnt = 0
for i in xrange(0, len(date_range) - 1):
tmp = df.loc[(df[u'放款时间'] >= date_range[i].date()) & (df[u'放款时间'] < date_range[i + 1].date())]
tmp[u'本金债权'] = tmp[u'本金债权'].apply(lambda x: np.round(x, 2))
tmp[u'实还本金'] = tmp[u'实还本金'].apply(lambda x: np.round(x, 2))
tmp = tmp[
[u'唯一编码', u'商户名称', u'资金方', u'放款时间', u'放款金额', u'本金债权', u'贷款总期数', u'应还期数', u'应还时间', u'应还本金', u'应还利息', u'实还本金',
u'实还利息', u'应还本息 - 实还本息']]
tmp[u'实还利息'] = 0.00
tmp.to_csv(out_file_path + u'人工控制-非去哪放款表(放款时间%s-%02d)V2.csv' % (date_range[i].year, date_range[i].month),
index=None, encoding='GBK')
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