Commit 10e8a279 authored by zhen.ma's avatar zhen.ma
parents fbd55155 be6fb1dd
# -*- 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))
......
# -*- encoding: utf8 -*-
import sys
import datetime
import pandas as pd
from sqlalchemy import create_engine
from dateutil.relativedelta import relativedelta
import multiprocessing as mtp
from itertools import product
reload(sys)
sys.setdefaultencoding("utf-8")
pd.options.mode.chained_assignment = None
file_path = u'E:/量化派/去哪儿/常规出账/'
file_name = u'去哪儿净放款_%s_%s.xlsx'
engine_qunaer = create_engine('mysql+mysqldb://internal_r:ArbNgtvlJzZHXsEu@172.16.3.201:3306/qunaer_new?charset=utf8',
echo=False).connect()
year=2017
month=10
start_time=datetime.date(year,month,1)
end_time=start_time + relativedelta(months=+1)
sql_pay='''
select fund.fund_name 资金方,product_no 产品编号,pay.stages 期数,date(trans_time) 放款时间,loan_amount 放款金额
from qunaer_new.pay_detail pay
JOIN qunaer_new.fund_corp fund on pay.fund_code = fund.fund_code
where status=1 and pay.fund_code != 1 AND trans_time >= '%s' AND trans_time <'%s'
''' % (start_time,end_time)
sql_refund='''
select fund.fund_name 资金方,t1.product_no 产品编号,t2.stages 期数,DATE(refund_time) 放款时间,refund_principle 放款金额
from qunaer_new.refund_detail t1
JOIN qunaer_new.pay_detail t2 on t1.product_no = t2.product_no
JOIN qunaer_new.fund_corp fund on t2.fund_code = fund.fund_code
WHERE t1.fund_code != 1 AND t2.status=1 AND t1.refund_status=1 AND refund_time >= '%s' AND refund_time < '%s'
''' % (start_time,end_time)
df_pay=pd.read_sql(sql_pay,engine_qunaer)
df_refund=pd.read_sql(sql_refund,engine_qunaer)
df_pay=pd.concat([df_pay,df_refund],ignore_index=True)
df_pay.to_excel(file_path+file_name % (year,month))
# -*- encoding: utf8 -*-
import sys
import datetime
import calendar
import pandas as pd
from sqlalchemy import create_engine
reload(sys)
sys.setdefaultencoding("utf-8")
pd.options.mode.chained_assignment = None
'''
@author linfang
1、去哪儿坏账
'''
year=2017
month=10
path = u'E:/量化派/去哪儿/常规出账/'
a,b=calendar.monthrange(year,month)
#本月最后一天
last_day=datetime.date(year,month,b)
#17年放款的还款计划表
table_2017_name='repayment_plan_2017'
#16年放款的还款计划表
table_2016_name='repayment_plan_2016'
engine_qunaer = create_engine('mysql+mysqldb://internal_r:ArbNgtvlJzZHXsEu@172.16.3.201:3306/qunaer_new?charset=utf8',
echo=False).connect()
#未还款
sql_2017_unrepay='''
select product_no,current_stage_no,deadline,principle
from %s
where status = 1 and datediff('%s',date(deadline)) >= 90 AND fund_code = 1
''' % (table_2017_name,last_day)
#还款1半的
sql_2017_repay='''
select product_no,current_stage_no,deadline,(principle-repay_principle) principle
from %s
where status = 2 and repay_amount > 0 and principle > repay_principle and datediff('%s',date(deadline)) >= 90 AND fund_code = 1
''' % (table_2017_name,last_day)
#未还款
sql_2016_unrepay='''
select product_no,current_stage_no,deadline,principle
from %s
where status = 1 and principle > 0 and datediff('%s',date(deadline)) >= 90
''' % (table_2016_name,last_day)
#已还款
sql_2016_repay='''
select product_no,current_stage_no,deadline,(principle-repay_principle) principle
from %s
where status = 2 and repay_amount > 0 and principle > repay_principle and principle > 0 and datediff('%s',date(deadline)) >= 90
''' % (table_2016_name,last_day)
df_2017_unrepay=pd.read_sql(sql_2017_unrepay,engine_qunaer)
df_2017_repay=pd.read_sql(sql_2017_repay,engine_qunaer)
df_2016_unrepay=pd.read_sql(sql_2016_unrepay,engine_qunaer)
df_2016_repay=pd.read_sql(sql_2016_repay,engine_qunaer)
df=pd.concat([df_2017_unrepay,df_2017_repay,df_2016_unrepay,df_2016_repay],ignore_index=True,axis=0)
df.rename(columns={'product_no':'产品编号','current_stage_no':'期数','deadline':'应还日期','principle':'未还本金'},inplace=True)
df.to_excel(path+u'坏账_%s_%s.xlsx' %(year,month),columns=df.columns,index=None, encoding='utf8')
# -*- encoding: utf8 -*-
import sys
import datetime
import pandas as pd
from sqlalchemy import create_engine
from dateutil.relativedelta import relativedelta
import multiprocessing as mtp
from itertools import product
reload(sys)
sys.setdefaultencoding("utf-8")
pd.options.mode.chained_assignment = None
#
# 表名称:
# 白条-去哪儿-核算-放款表:分多种类型,转让保理后的放款表,资金方的放款表,针对用户角度的放款表
file_path = u'E:/量化派/去哪儿/常规出账/'
file_name = u'核算放款表_%s_%s.xlsx'
engine_qunaer = create_engine('mysql+mysqldb://internal_r:ArbNgtvlJzZHXsEu@172.16.3.201:3306/qunaer_new?charset=utf8',
echo=False).connect()
# 债权转让后的保理放款表
def baoli_pay(year, month,plan_table='repayment_plan_2017'):
start_time = datetime.datetime(year, month, 1, 0, 0, 0)
end_time = start_time + relativedelta(months=+1)
sql_pay = '''
select '保理' AS '资金方',
pay.product_no '产品编号',
date(pay.trans_time) '债转时间',
date(pay.loan_time) '放款时间',
pay.loan_amount '合同放款金额',
pay.new_stages AS '贷款总期数',
'FALSE' AS '是否退款',
'FALSE' AS '是否转分期后订单',
'FALSE' AS '是否资金方直投',
plan.current_stage_no '当期期数',
date(plan.deadline) '每期应还款日',
plan.principle+plan.fee_amount '每期应还金额',
plan.principle '每期应还本金',
plan.fee_amount AS '每期应还服务费',
0 AS '每期应还服务费-QG承担'
from qunaer_new.baoli_pay_detail pay
join %s plan on pay.product_no = plan.product_no AND plan.fund_code = 1
where trans_time >='%s' and trans_time < '%s'
''' % (plan_table,start_time, end_time)
# # 属于保理的退款--flow_id 提取空的
# sql_refund='''
# select '保理' AS '资金方',
# refund.product_no '产品编号',
# date(pay.trans_time) '债转时间',
# date(pay.loan_time) '放款时间',
# refund.refund_amount '合同放款金额',
# pay.new_stages '贷款总期数',
# 'TRUE' AS '是否退款',
# date(refund.refund_time) AS '退款时间',
# month(refund.refund_time) AS '退款月份',
# 'FALSE' AS '是否转分期后订单',
# 'FALSE' AS '是否资金方直投'
# from qunaer_new.refund_detail refund
# JOIN qunaer_new.baoli_pay_detail pay on refund.product_no = pay.product_no and refund.fund_code = 1
# WHERE refund_time >='%s' and refund_time < '%s' and refund.flow_id IS NULL
# ''' % (start_time,end_time)
# 读取sql语句,2分钟左右
df_pay = pd.read_sql(sql_pay, engine_qunaer)
# 含有 flow_id 的退款,在还款表中体现。
# df_refund = pd.read_sql(sql_refund, engine_qunaer)
# 合并退款记录和放款记录
# df = pd.concat([df_pay, df_refund], ignore_index=True)
# df = df.fillna(0)
df_pay.ix[df_pay[[u'产品编号']].duplicated(),u'合同放款金额'] = 0
return df_pay[[u'资金方',u'产品编号',u'债转时间',u'放款时间',u'合同放款金额',u'贷款总期数',u'是否退款',u'是否转分期后订单',
u'是否资金方直投',u'当期期数',u'每期应还款日',u'每期应还金额',u'每期应还本金',u'每期应还服务费',u'每期应还服务费-QG承担']]
# 资金方放款表
def fund_pay(year,month,plan_table='fund_repayment_plan'):
start_time = datetime.datetime(year, month, 1, 0, 0, 0)
end_time = start_time + relativedelta(months=+1)
# 资金方的放款表
sql_pay = '''
select fc.fund_name '资金方',
pay.product_no '产品编号',
date(pay.trans_time) '订单时间',
date(pay.loan_time) '放款时间',
pay.loan_amount '合同放款金额',
pay.stages '贷款总期数',
'FALSE' AS '是否退款',
'FALSE' AS '是否转分期后订单',
'TRUE' AS '是否资金方直投',
plan.current_stage_no '当期期数',
date(plan.deadline) '每期应还款日',
plan.principle+plan.fee_amount '每期应还金额',
plan.principle '每期应还本金',
plan.fee_amount '每期应还服务费',
if(pay.stages=1,plan.fee_amount,0) '每期应还服务费-QG承担'
from qunaer_new.pay_detail pay
join %s plan on pay.product_no = plan.product_no
join qunaer_new.fund_corp fc on pay.fund_code = fc.fund_code
where trans_time >='%s' and trans_time < '%s' and pay.fund_code !=1 AND pay.status=1
''' % (plan_table,start_time, end_time)
# # 属于资金方的退款
# sql_refund = '''
# select fc.fund_name '资金方',
# refund.product_no '产品编号',
# date(pay.trans_time) '订单时间',
# date(pay.loan_time) '放款时间',
# refund.refund_amount '合同放款金额',
# pay.stages '贷款总期数',
# 'TRUE' AS '是否退款',
# DATE(refund.refund_time) AS '退款时间',
# MONTH(refund.refund_time) AS '退款月份',
# 'FALSE' AS '是否转分期后订单',
# 'TRUE' AS '是否资金方直投'
# from qunaer_new.refund_detail refund
# JOIN qunaer_new.fund_pay_detail pay on refund.product_no = pay.product_no and refund.fund_code = pay.fund_code
# JOIN qunaer_new.fund_corp fc on refund.fund_code = fc.fund_code
# WHERE refund_time >='%s' and refund_time < '%s' AND refund.flow_id is NULL
# ''' % (start_time, end_time)
# 读取sql语句,2分钟左右
df_pay = pd.read_sql(sql_pay, engine_qunaer)
# 含有 flow_id 的退款,在还款表中体现。
# df_refund = pd.read_sql(sql_refund, engine_qunaer)
# 合并退款记录和放款记录
# df = pd.concat([df_pay, df_refund], ignore_index=True)
# df = df.fillna(0)
df_pay.ix[df_pay[[u'产品编号']].duplicated(), u'合同放款金额'] = 0
return df_pay[[u'资金方',u'产品编号',u'订单时间',u'放款时间',u'合同放款金额',u'贷款总期数',u'是否退款',u'是否转分期后订单',
u'是否资金方直投',u'当期期数',u'每期应还款日',u'每期应还金额',u'每期应还本金',u'每期应还服务费',u'每期应还服务费-QG承担']]
#保理的放款表,注意,非债权转让后的放款表
def user_pay(year,month,plan_table='repayment_plan_2017'):
start_time = datetime.datetime(year, month, 1, 0, 0, 0)
end_time = start_time + relativedelta(months=+1)
# 用户的放款表
sql_pay = '''
select '保理' AS '资金方',
pay.product_no '产品编号',
date(pay.trans_time) '订单时间',
date(pay.loan_time) '放款时间',
pay.loan_amount '合同放款金额',
pay.stages '贷款总期数',
'FALSE' AS '是否退款',
if(pay.is_ptf = 0,'FALSE','TRUE') '是否转分期后订单',
'FALSE' AS '是否资金方直投',
plan.current_stage_no '当期期数',
date(plan.deadline) '每期应还款日',
plan.principle+plan.fee_amount '每期应还金额',
plan.principle '每期应还本金',
plan.fee_amount '每期应还服务费',
0 '每期应还服务费-QG承担'
from qunaer_new.pay_detail pay
join %s plan on pay.product_no = plan.product_no
where pay.fund_code = 1 and trans_time >='%s' and trans_time < '%s'
''' % (plan_table,start_time, end_time)
# 属于保理的退款
sql_refund = '''
select '保理' AS '资金方',
refund.product_no '产品编号',
date(pay.trans_time) '订单时间',
date(pay.loan_time) '放款时间',
refund.refund_amount '合同放款金额',
pay.stages '贷款总期数',
'TRUE' AS '是否退款',
date(refund.refund_time) '退款时间',
MONTH(refund.refund_time) '退款月份',
refund.refund_principle '退款本金',
refund.refund_fee_amount '退款服务费',
refund.refund_due_amount '退款罚息',
if(pay.is_ptf = 0,'FALSE','TRUE') '是否转分期后订单'
from qunaer_new.refund_detail refund
JOIN qunaer_new.pay_detail pay on refund.product_no = pay.product_no and refund.fund_code = pay.fund_code
WHERE pay.fund_code = 1 and refund_time >='%s' and refund_time < '%s' AND refund.flow_id is NULL
''' % (start_time, end_time)
# 读取sql语句,2分钟左右
df_pay = pd.read_sql(sql_pay, engine_qunaer)
# 如果期数 > 1 的,放款为0
df_pay.ix[df_pay[[u'产品编号']].duplicated(),u'合同放款金额'] = 0
# 含有 flow_id 的退款,在还款表中体现。
df_refund = pd.read_sql(sql_refund, engine_qunaer)
# 合并退款记录和放款记录
df = pd.concat([df_pay, df_refund], ignore_index=True)
df = df.fillna(0)
return df[[u'资金方',u'产品编号',u'订单时间',u'放款时间',u'合同放款金额',u'贷款总期数',u'是否退款',u'退款时间',u'退款月份',u'退款本金',u'退款服务费',u'退款罚息',u'是否转分期后订单',
u'是否资金方直投',u'当期期数',u'每期应还款日',u'每期应还金额',u'每期应还本金',u'每期应还服务费',u'每期应还服务费-QG承担']]
if __name__ == '__main__':
years = [2017]
months = range(10,11)
for year, month in product(years, months):
df_baoli=baoli_pay(year,month,plan_table='repayment_plan_2017')
df_fund=fund_pay(year,month,plan_table='fund_repayment_plan')
df_user=user_pay(year,month,plan_table='repayment_plan_2017')
writer=pd.ExcelWriter(file_path+file_name%(year,month))
# 后续就没有内保了,只有债转后的内保。
if len(df_user) > 0:
df_user.to_excel(writer,sheet_name=u'保理放款表',encoding='UTF-8',index=None)
df_fund.to_excel(writer,sheet_name=u'资金方放款表',encoding='UTF-8',index=None)
df_baoli.to_excel(writer, sheet_name=u'债转后的保理放款表', encoding='UTF-8', index=None)
writer.save()
writer.close()
print '-----------------------main done---------------------------------------'
\ No newline at end of file
# -- coding: UTF-8 --
import sys
import datetime
import pandas as pd
from sqlalchemy import create_engine
from dateutil.relativedelta import relativedelta
import multiprocessing as mtp
reload(sys)
sys.setdefaultencoding("utf-8")
pd.options.mode.chained_assignment = None
file_path = u'E:/量化派/去哪儿/常规出账/'
engine_qunaer = create_engine('mysql+mysqldb://internal_r:ArbNgtvlJzZHXsEu@172.16.3.201:3306/qunaer_new?charset=utf8',
echo=False).connect()
def pay(year, month,fund_plan='fund_repayment_plan'):
start_time = datetime.datetime(year, month, 1, 0, 0, 0)
end_time = start_time + relativedelta(months=+1)
sql_pay = '''
SELECT
IF(t1.account_id = 0,'',t6.account_name) AS '账户',
t5.fund_name as '资金方',
t1.product_no as '产品编号',
date(t2.interest_time) as '放款日期',
t2.loan_amount as '放款金额',
t2.loan_amount AS '本金债权',
t2.stages as '贷款总期数',
t3.current_stage_no as '应还款期数',
date(t3.deadline) as '应还资金方日期',
t3.principle as '应还本金',
t3.interest as '应还利息',
date(t1.repay_time) as '实还资金方日期',
t1.repay_amount AS '还款金额',
t1.repay_principle as '实还本金',
t1.repay_interest as '实还利息',
t1.qg_interest as 'QG实际贴息金额',
t1.repay_fee_amount as '资金方服务费',
t1.repay_due_amount as '资金方逾期服务费',
t1.flow_id as '流水号',
case t1.type WHEN 4 THEN '正常还款' WHEN 5 THEN '提前结清' WHEN 6 THEN '提前还款' WHEN 7 THEN '退款' END AS '类型'
FROM
fund_repay_detail t1
join pay_detail t2 on t2.product_no = t1.product_no AND t2.fund_code != 1
join %s t3 on t1.product_no=t3.product_no and t1.fund_code=t3.fund_code AND t1.current_stage_no = t3.current_stage_no
join fund_corp t5 on t5.fund_code=t1.fund_code
LEFT JOIN qunaer_new.account t6 on t6.id=t1.account_id
WHERE
t1.repay_time >= '%s' AND t1.repay_time < '%s'
'''%(fund_plan,start_time,end_time)
df_sql_pay = pd.read_sql(sql_pay,engine_qunaer)
# 保存导出的结果表
df_sql_pay.to_excel(file_path + u'核算还资金方表_%s_%s.xlsx' % (year,month), encoding='UTF-8', index=False)
if __name__ == '__main__':
year,month = 2017,10
pay(year,month)
print '-----------------------main done---------------------------------------'
\ No newline at end of file
......@@ -252,5 +252,5 @@ if __name__ == '__main__':
# df = load_refund(year, month, insert_db=True)
# print df['refund_amount'].sum()
# 导入还款数据
df = load_repay(year,month, insert_db=True)
print df['repay_amount'].sum()
\ No newline at end of file
# df = load_repay(year,month, insert_db=True)
# print df['repay_amount'].sum()
\ No newline at end of file
......@@ -23,7 +23,7 @@ path = u'E:/量化派/去哪儿/去哪儿账单文件/201708'
4、生成债转表中的放款表
5、生成债转表中的还款计划
'''
engine_qunaer = create_engine('mysql+mysqldb://yulong:ohVU1nPITynSZwR2@172.16.3.201:3306/qunaer_new?charset=utf8', echo=False).connect()
engine_qunaer = create_engine('mysql+mysqldb://linfang.wang:#jkl3453YUGuo99@172.16.3.201:3306/qunaer_new?charset=utf8', echo=False).connect()
# 提取提前结算数据
......@@ -166,23 +166,23 @@ def step_7(year,month):
''' % (start_time,end_time)
sql_user_plan='''
select product_no,current_stage_no,require_fee,principle,fee_amount,due_amount ,status from qunaer_new.repayment_plan_2017
select product_no,current_stage_no,principle,fee_amount,due_amount ,status from qunaer_new.repayment_plan_2017
WHERE product_no in %s
'''
sql_baoli_plan='''
select id,product_no,user_current_stage_no,require_fee baoli_require_fee from qunaer_new.baoli_repayment_plan
select id,product_no,user_current_stage_no,principle src_principle,fee_amount src_fee_amount,due_amount src_due_amount from qunaer_new.baoli_repayment_plan
where product_no in %s
'''
update_sql='''
update baoli_repayment_plan set require_fee=%s,principle=%s,fee_amount=%s,due_amount=%s,status=%s where id=%s
update baoli_repayment_plan set principle=%s,fee_amount=%s,due_amount=%s,status=%s where id=%s
'''
df_refund=pd.read_sql(sql_refund,engine_qunaer)
df_user_plan=pd.read_sql(sql_user_plan % str(tuple(df_refund['product_no'].astype(str).tolist())),engine_qunaer)
df_baoli_plan = pd.read_sql(sql_baoli_plan % str(tuple(df_refund['product_no'].astype(str).tolist())), engine_qunaer)
df_plan=pd.merge(df_baoli_plan,df_user_plan,left_on=['product_no','user_current_stage_no'],right_on=['product_no','current_stage_no'],how='left')
df_plan['diff']=np.round(df_plan['baoli_require_fee']-df_plan['require_fee'],2)
df_plan=df_plan.ix[df_plan['diff'] != 0]
engine_qunaer.execute(update_sql,df_plan[['require_fee','principle','fee_amount','due_amount','status','id']].values.tolist())
# df_plan['diff']=np.round(df_plan['baoli_require_fee']-df_plan['require_fee'],2)
# df_plan=df_plan.ix[df_plan['diff'] != 0]
engine_qunaer.execute(update_sql,df_plan[['principle','fee_amount','due_amount','status','id']].values.tolist())
#更新还款状态
def step_8(year,month):
......@@ -213,7 +213,7 @@ def step_8(year,month):
if __name__ == '__main__':
year = 2017
month = 9
month = 10
#====针对提前结算的处理========
#===只有提前结算有债转处理=====
#===到期日
......
......@@ -477,14 +477,14 @@ if __name__ == '__main__':
#=========step_1 BEGIN================
# 录入还款计划
step_1(year,month,insert_db=True)
# step_1(year,month,insert_db=True)
# deadline 同步都江堰
# df=step_1_1(year,month,insert_db=True)
# =========step_1 END================
# =========step_2 BEGIN================
#根据退款,进行更新还款计划
step_2(year,month,insert_db=True)
# step_2(year,month,insert_db=True)
# 校验还款计划更新的对否
# df=check_plan_vs_djy(year,month)
# df.to_csv('E:/diff_2017_plan.csv')
......
......@@ -17,7 +17,7 @@ pd.options.mode.chained_assignment = None
还款表中体现这部分退款,这部分退款处理金额为正,数据库中为负。
'''
max_limit = 800000
file_path = u'E:/审计出表/人工控制/去哪儿-放款表/'
file_path = u'E:/量化派/去哪儿/人工控制/还款表-按照放款时间/'
file_name = u'去哪儿还款表-放款时间-%s-%s.xlsx'
engine_qunaer = create_engine('mysql+mysqldb://internal_r:ArbNgtvlJzZHXsEu@172.16.3.201:3306/qunaer_new?charset=utf8',
echo=False).connect()
......@@ -85,13 +85,13 @@ def hk_detail(year, month):
FROM
qunaer_new.repay_detail t1
JOIN qunaer_new.fund_corp fc on fc.fund_code = t1.fund_code
JOIN qunaer_new.fund_pay_detail pay on t1.product_no = pay.product_no AND t1.fund_code = pay.fund_code
JOIN fund_repayment_plan plan on plan.product_no = t1.product_no AND plan.current_stage_no = t1.current_stage_no AND t1.fund_code=plan.fund_code
JOIN qunaer_new.pay_detail pay on t1.product_no = pay.product_no
JOIN fund_repayment_plan plan on plan.product_no = t1.product_no AND plan.current_stage_no = t1.current_stage_no
LEFT JOIN bank_flow bf on bf.flow_id = t1.flow_id
WHERE
pay.trans_time >= '%s'
AND pay.trans_time < '%s'
AND t1. repay_status = 1 AND pay.status=1
AND t1. repay_status = 1 AND pay.status=1 and t1.fund_code != 1
''' % (start_time, end_time)
# 债转后保理的--
......@@ -119,12 +119,12 @@ def hk_detail(year, month):
qunaer_new.repay_detail t1
JOIN qunaer_new.fund_corp fc on fc.fund_code = t1.fund_code
JOIN qunaer_new.baoli_pay_detail pay on t1.product_no = pay.product_no AND t1.fund_code = pay.fund_code
JOIN baoli_repayment_plan plan on plan.product_no = t1.product_no AND plan.user_current_stage_no = t1.current_stage_no AND t1.fund_code=plan.fund_code
JOIN repayment_plan_2017 plan on plan.product_no = t1.product_no AND plan.current_stage_no = t1.current_stage_no
left JOIN bank_flow bf on bf.flow_id = t1.flow_id
WHERE
pay.trans_time >= '%s'
AND pay.trans_time < '%s'
AND t1. repay_status = 1 AND pay.status=1;
AND t1. repay_status = 1 AND pay.status=1 and t1.fund_code =1
''' % (start_time, end_time)
# 退款退到还款账户
sql_refund = '''
......@@ -187,7 +187,7 @@ if __name__ == '__main__':
# 还款明细
years = [2017]
months = range(8,10,1)
months = range(10,11,1)
for year, month in product(years, months):
print('-----%s--%s') % (year, month)
hk_detail(year,month)
......
......@@ -16,14 +16,14 @@ pd.options.mode.chained_assignment = None
还款表中体现这部分退款,这部分退款处理金额为正,数据库中为负。
'''
file_path = u'E:/审计出表/人工控制/去哪儿-放款表/'
file_path = u'E:/量化派/去哪儿/人工控制/还款表-按照实还时间/'
file_name = u'去哪儿还款表-实还时间-%s-%s.xlsx'
engine_qunaer = create_engine('mysql+mysqldb://internal_r:ArbNgtvlJzZHXsEu@172.16.3.201:3306/qunaer_new?charset=utf8',
echo=False).connect()
def hk_detail(year, month, user_16_plan='repayment_plan_2016', user_17_plan='repayment_plan_2017',
fund_plan='fund_repayment_plan', baoli_plan='baoli_repayment_plan'):
fund_plan='fund_repayment_plan', baoli_plan='repayment_plan_2017'):
start_time = datetime.datetime(year, month, 1, 0, 0, 0)
end_time = start_time + relativedelta(months=+1)
# 实还表====内保的plan_16
......@@ -111,13 +111,13 @@ def hk_detail(year, month, user_16_plan='repayment_plan_2016', user_17_plan='rep
FROM
qunaer_new.repay_detail t1
JOIN qunaer_new.fund_corp fc on fc.fund_code = t1.fund_code
JOIN qunaer_new.fund_pay_detail pay on t1.product_no = pay.product_no AND t1.fund_code = pay.fund_code
JOIN %s plan on plan.product_no = t1.product_no AND plan.current_stage_no = t1.current_stage_no
JOIN qunaer_new.pay_detail pay on t1.product_no = pay.product_no
JOIN %s plan on plan.product_no = t1.product_no AND plan.current_stage_no = t1.current_stage_no
left JOIN bank_flow bf on bf.flow_id = t1.flow_id
WHERE
t1.repay_time >= '%s'
AND t1.repay_time < '%s'
AND t1. repay_status = 1 AND pay.status=1;
AND t1. repay_status = 1 AND pay.status=1 AND t1.fund_code != 1
''' % (fund_plan, start_time, end_time)
# 债转后保理的--
......@@ -142,13 +142,13 @@ def hk_detail(year, month, user_16_plan='repayment_plan_2016', user_17_plan='rep
FROM
qunaer_new.repay_detail t1
JOIN qunaer_new.fund_corp fc on fc.fund_code = t1.fund_code
JOIN qunaer_new.baoli_pay_detail pay on t1.product_no = pay.product_no AND t1.fund_code = pay.fund_code
JOIN %s plan on plan.product_no = t1.product_no AND plan.user_current_stage_no = t1.current_stage_no
JOIN qunaer_new.baoli_pay_detail pay on t1.product_no = pay.product_no
JOIN %s plan on plan.product_no = t1.product_no AND plan.current_stage_no = t1.current_stage_no
left JOIN bank_flow bf on bf.flow_id = t1.flow_id
WHERE
t1.repay_time >= '%s'
AND t1.repay_time < '%s'
AND t1. repay_status = 1 AND pay.status=1;
AND t1. repay_status = 1 AND pay.status=1 AND t1.fund_code=1
''' % (baoli_plan, start_time, end_time)
# 退款退到还款账户
sql_refund = '''
......@@ -167,10 +167,54 @@ def hk_detail(year, month, user_16_plan='repayment_plan_2016', user_17_plan='rep
JOIN fund_corp t2 ON t2.fund_code = t1.fund_code
JOIN pay_detail t3 on t1.product_no = t3.product_no and t3.status !=0
left JOIN bank_flow bf on bf.flow_id = t1.flow_id
WHERE t1.refund_time >= '%s' and t1.refund_time < '%s' and (t1.flow_id is not NULL or t1.refund_time > '2017-09-01')
WHERE t1.refund_time >= '%s' and t1.refund_time < '%s' and t1.flow_id is not NULL
''' % (start_time, end_time)
#=== 失败订单的退还款
# ===放款失败的还款和退款
sql_refund_pay_fail = '''
SELECT
t2.fund_name as '资金方',
t1.product_no '产品编号',
'去那儿' as '收款账户',
date(t1.refund_time) '还款时间',
-t1.refund_amount as '还款金额',
-t1.refund_principle as '还款本金',
-t1.refund_due_amount as '还款逾期费',
-t1.refund_fee_amount as '还服务费',
t1.flow_id '流水号'
FROM
qunaer_new.refund_detail t1
JOIN fund_corp t2 ON t2.fund_code = t1.fund_code
JOIN pay_detail t3 on t1.product_no = t3.product_no and t3.status = 0
WHERE t1.refund_time >= '%s' and t1.refund_time < '%s' and t1.flow_id is not NULL and t1.refund_status=1
''' % (start_time, end_time)
sql_repay_pay_fail = '''
SELECT
t2.fund_name as '资金方',
t1.product_no '产品编号',
'去那儿' as '收款账户',
date(t1.repay_time) '还款时间',
t1.repay_amount as '还款金额',
t1.repay_principle as '还款本金',
t1.repay_due_amount as '还款逾期费',
t1.repay_fee_amount as '还服务费',
t1.flow_id '流水号'
FROM
qunaer_new.repay_detail t1
JOIN fund_corp t2 ON t2.fund_code = t1.fund_code
JOIN pay_detail t3 on t1.product_no = t3.product_no and t3.status = 0
WHERE t1.repay_time >= '%s' and t1.repay_time < '%s' and t1.flow_id is not NULL and t1.repay_status=1
''' % (start_time, end_time)
# 退款
df_refund = pd.read_sql(sql_refund, engine_qunaer)
#==放款失败订单的还款
df_repay_pay_fail=pd.read_sql(sql_repay_pay_fail,engine_qunaer)
df_refund_pay_fail=pd.read_sql(sql_refund_pay_fail,engine_qunaer)
df_pay_fail=pd.concat([df_repay_pay_fail,df_refund_pay_fail],ignore_index=True)
# 还款计划合并
df_repay_plan_2016 = pd.read_sql(sql_repay_plan_2016, engine_qunaer)
df_repay_plan_2017 = pd.read_sql(sql_repay_plan_2017, engine_qunaer)
......@@ -180,6 +224,7 @@ def hk_detail(year, month, user_16_plan='repayment_plan_2016', user_17_plan='rep
df_repay.fillna(0, inplace=True)
writer = pd.ExcelWriter(file_path + file_name % (year, month))
df_refund.to_excel(writer, sheet_name=u'退款到还款账户的表', index=None, encoding='UTF-8')
df_pay_fail.to_excel(writer,sheet_name=u'放款失败退还款的表',index=None, encoding='UTF-8')
#应还本金重复的
df_repay.loc[df_repay[[u'资金方',u'产品编号',u'当期期数']].duplicated(),u'应还本金']=0
df_repay[u'应还本息-实还本息']=np.round(df_repay[u'应还本金']-df_repay[u'实还本金'],2)
......@@ -194,13 +239,16 @@ if __name__ == '__main__':
# 还款明细
years = [2017]
months = [9]
months = [10]
for year, month in product(years, months):
print('-----%s--%s') % (year, month)
if month == 8:
hk_detail(year, month,user_16_plan='repayment_plan_2016_201708',
user_17_plan='repayment_plan_201708',fund_plan='fund_repayment_plan_201708',
baoli_plan='baoli_repayment_plan_201708')
elif month == 9:
hk_detail(year,month)
# if month == 8:
# hk_detail(year, month,user_16_plan='repayment_plan_2016',
# user_17_plan='repayment_plan_2017',fund_plan='fund_repayment_plan',
# baoli_plan='repayment_plan_2017')
# else:
# hk_detail(year,month)
hk_detail(year, month, user_16_plan='repayment_plan_2016',
user_17_plan='repayment_plan_2017', fund_plan='fund_repayment_plan',
baoli_plan='repayment_plan_2017')
print '-----------------------main done---------------------------------------'
......@@ -13,26 +13,22 @@ reload(sys)
sys.setdefaultencoding("utf-8")
pd.options.mode.chained_assignment = None
max_limit = 800000
#
# 表名称:
# 白条-去哪儿-核算-放款表:分多种类型,转让保理后的放款表,资金方的放款表,针对用户角度的放款表
#
#
file_path = u'E:/审计出表/人工控制/去哪儿-放款表/'
file_path = u'E:/量化派/去哪儿/人工控制/放款表-现金流/'
file_name = u'去哪儿_放款表_现金流_%s_%s.xlsx'
engine_qunaer = create_engine('mysql+mysqldb://internal_r:ArbNgtvlJzZHXsEu@172.16.3.201:3306/qunaer_new?charset=utf8',
echo=False).connect()
# 债权转让后的保理放款表
def baoli_pay(year, month,plan_table='baoli_repayment_plan'):
def baoli_pay(year, month,plan_table='repayment_plan_2017'):
start_time = datetime.datetime(year, month, 1, 0, 0, 0)
end_time = start_time + relativedelta(months=+1)
sql_pay = '''
select
concat(pay.product_no,plan.user_current_stage_no) as '唯一编号',
concat(pay.product_no,plan.current_stage_no) as '唯一编号',
pay.product_no '产品编号',
'保理' AS '资金方',
date(pay.trans_time) '贷款时间',
......@@ -40,13 +36,13 @@ def baoli_pay(year, month,plan_table='baoli_repayment_plan'):
pay.loan_amount '合同放款金额',
pay.new_stages '分期数',
'FALSE' AS '是否转分期后订单',
plan.user_current_stage_no AS '应还期数',
plan.current_stage_no AS '应还期数',
date(plan.deadline) AS '应还时间',
plan.principle AS '应还本金',
0 as '应还利息-直投',
plan.fee_amount AS '应还服务费'
from qunaer_new.baoli_pay_detail pay
join %s plan on pay.product_no = plan.product_no
join %s plan on pay.product_no = plan.product_no AND plan.fund_code=1
where trans_time >='%s' and trans_time < '%s'
''' % (plan_table,start_time, end_time)
df_pay = pd.read_sql(sql_pay, engine_qunaer)
......@@ -73,10 +69,10 @@ def fund_pay(year, month,plan_table='fund_repayment_plan'):
plan.principle '应还本金',
plan.interest as '应还利息-直投',
plan.fee_amount AS '应还服务费'
from qunaer_new.fund_pay_detail pay
join %s plan on pay.product_no = plan.product_no
from qunaer_new.pay_detail pay
join %s plan on pay.product_no = plan.product_no AND pay.fund_code != 1
join qunaer_new.fund_corp fc on pay.fund_code = fc.fund_code
where trans_time >='%s' and trans_time < '%s'
where trans_time >='%s' and trans_time < '%s' and pay.status=1
''' % (plan_table,start_time, end_time)
# 读取sql语句,2分钟左右
df_pay = pd.read_sql(sql_pay, engine_qunaer)
......@@ -141,7 +137,7 @@ def hk(year, month):
select fc.fund_name AS '资金方',product_no '产品编号',current_stage_no '应还期数',sum(repay_principle) '实还本金',0 AS '实还利息-直投'
from repay_detail repay
JOIN fund_corp fc on repay.fund_code= fc.fund_code
where repay_time >= '%s'
where repay_time >= '%s' AND repay_status=1
group by 1,2,3
''' % start_time
df_hk = pd.read_sql(sql_1, engine_qunaer)
......@@ -150,9 +146,9 @@ def hk(year, month):
if __name__ == '__main__':
years = [2017]
months = range(9,10)
months = range(10,11)
for year, month in product(years, months):
df_baoli = baoli_pay(year, month,plan_table='baoli_repayment_plan')
df_baoli = baoli_pay(year, month,plan_table='repayment_plan_2017')
df_fund = fund_pay(year, month,plan_table='fund_repayment_plan')
df_user = user_pay(year, month,plan_table='repayment_plan_2017')
df_plan = pd.concat([df_baoli, df_fund, df_user], ignore_index=True)
......
......@@ -25,7 +25,8 @@ pd.options.mode.chained_assignment = None
注意:财务说无需出 用户提前还款的-我们提前打款给资金方的
'''
engine_qunaer = create_engine('mysql+mysqldb://yulong:ohVU1nPITynSZwR2@172.16.3.201:3306/qunaer_new?charset=utf8', echo=False).connect()
engine_qunaer = create_engine('mysql+mysqldb://internal_r:ArbNgtvlJzZHXsEu@172.16.3.201:3306/qunaer_new?charset=utf8',
echo=False).connect()
file_path=u'E:/量化派/去哪儿/人工控制/还资金方-放款时间/'
def fund_tk(year,month):
......@@ -35,12 +36,14 @@ def fund_tk(year,month):
select t3.fund_name 资金方,t1.product_no 产品编号,date(t2.interest_time) 放款时间,t2.loan_amount 放款金额,
date(t1.repay_time) 退还给资金方日,t1.repay_amount 还款金额,t1.repay_principle 实还本金,
t1.repay_interest 实还利息,t1.repay_fee_amount 实还资金方服务费,t1.flow_id 流水号,bf.trans_amount 银行金额,
case t1.type WHEN 4 THEN '正常还款' WHEN 5 THEN '提前结清' WHEN 6 THEN '提前还款' WHEN 7 THEN '退款' END as '类型'
case t1.type WHEN 4 THEN '正常还款' WHEN 5 THEN '提前结清' WHEN 6 THEN '提前还款' WHEN 7 THEN '退款' END as '类型',
date(plan.deadline) 应还款日,plan.principle 应还本金,plan.fee_amount 应还服务费
from qunaer_new.fund_repay_detail t1
JOIN qunaer_new.fund_pay_detail t2 on t1.product_no = t2.product_no
JOIN qunaer_new.pay_detail t2 on t1.product_no = t2.product_no
JOIN qunaer_new.fund_corp t3 on t1.fund_code = t3.fund_code
LEFT JOIN qunaer_new.bank_flow bf on bf.flow_id = t1.flow_id
WHERE t2.trans_time >= '%s' and t2.trans_time < '%s'
JOIN qunaer_new.fund_repayment_plan plan on t1.product_no = plan.product_no and t1.current_stage_no = plan.current_stage_no
WHERE t2.interest_time >= '%s' and t2.interest_time < '%s'
''' % (start_time,end_time)
#用户退款---用户退单日
sql_user_refund='''
......@@ -54,24 +57,26 @@ def fund_tk(year,month):
sql_user_repay='''
select product_no 产品编号,max(date(repay_time)) 用户退单日
from qunaer_new.repay_detail where
fund_code != 1 AND
fund_code != 1 AND repay_status=1 AND
product_no in %s
group by 1
'''
df_refund=pd.read_sql(sql_refund,engine_qunaer)
df_user_refund=pd.read_sql(sql_user_refund % str(tuple(df_refund[u'产品编号'].astype(str).tolist())),engine_qunaer)
df_user_repay = pd.read_sql(sql_user_repay % str(tuple(df_refund[u'产品编号'].astype(str).tolist())), engine_qunaer)
df_user_refund = pd.concat([df_user_refund,df_user_repay],ignore_index=True)
df_user_refund=df_user_refund.groupby([u'产品编号'])[u'用户退单日'].max().reset_index()
df_refund=pd.merge(df_refund,df_user_refund,on=[u'产品编号'],how='left')
# df_user_refund=pd.read_sql(sql_user_refund % str(tuple(df_refund[u'产品编号'].astype(str).tolist())),engine_qunaer)
# df_user_repay = pd.read_sql(sql_user_repay % str(tuple(df_refund[u'产品编号'].astype(str).tolist())), engine_qunaer)
# df_user_refund = pd.concat([df_user_refund,df_user_repay],ignore_index=True)
# df_user_refund=df_user_refund.groupby([u'产品编号'])[u'用户退单日'].max().reset_index()
# df_refund=pd.merge(df_refund,df_user_refund,on=[u'产品编号'],how='left')
df_refund.loc[df_refund[[u'产品编号',u'应还款日']].duplicated(),u'应还本金'] = 0
df_refund.loc[df_refund[[u'产品编号', u'应还款日']].duplicated(), u'应还服务费'] = 0
df_refund=df_refund[[u'资金方',u'产品编号',u'放款时间',u'退还给资金方日',u'还款金额',u'实还本金',u'实还利息',u'实还资金方服务费',u'流水号'
, u'银行金额']]
df_refund.to_excel(file_path+u'还资金方表-%s_%s.xlsx' % (year,month),index=None,encoding='UTF-8')
, u'银行金额',u'应还款日',u'应还本金',u'应还服务费']]
df_refund.to_excel(file_path+u'去哪儿_还资金方表_放款时间-%s_%s.xlsx' % (year,month),index=None,encoding='UTF-8')
if __name__ == '__main__':
year=2017
month=8
month=10
fund_tk(year,month)
\ No newline at end of file
......@@ -25,8 +25,9 @@ pd.options.mode.chained_assignment = None
注意:财务说无需出 用户提前还款的-我们提前打款给资金方的
'''
engine_qunaer = create_engine('mysql+mysqldb://yulong:ohVU1nPITynSZwR2@172.16.3.201:3306/qunaer_new?charset=utf8', echo=False).connect()
file_path=u'E:/量化派/'
engine_qunaer = create_engine('mysql+mysqldb://internal_r:ArbNgtvlJzZHXsEu@172.16.3.201:3306/qunaer_new?charset=utf8',
echo=False).connect()
file_path=u'E:/量化派/去哪儿/人工控制/还资金方-退款表/'
def fund_tk(year,month):
start_time=datetime.date(year,month,1)
......@@ -37,7 +38,7 @@ def fund_tk(year,month):
t1.repay_interest 实还利息,t1.repay_fee_amount 实还资金方服务费,t1.flow_id 流水号,bf.trans_amount 银行金额,
case t1.type WHEN 4 THEN '正常还款' WHEN 5 THEN '提前结清' WHEN 6 THEN '提前还款' WHEN 7 THEN '退款' END as '类型'
from qunaer_new.fund_repay_detail t1
JOIN qunaer_new.fund_pay_detail t2 on t1.product_no = t2.product_no
JOIN qunaer_new.pay_detail t2 on t1.product_no = t2.product_no
JOIN qunaer_new.fund_corp t3 on t1.fund_code = t3.fund_code
LEFT JOIN qunaer_new.bank_flow bf on bf.flow_id = t1.flow_id
WHERE t1.repay_time >= '%s' and t1.repay_time < '%s'
......@@ -54,7 +55,7 @@ def fund_tk(year,month):
sql_user_repay='''
select product_no 产品编号,max(date(repay_time)) 用户退单日
from qunaer_new.repay_detail where
fund_code != 1 AND
fund_code != 1 AND repay_status= 1 AND
product_no in %s
group by 1
'''
......@@ -67,11 +68,11 @@ def fund_tk(year,month):
df_refund=pd.merge(df_refund,df_user_refund,on=[u'产品编号'],how='left')
df_refund=df_refund[[u'资金方',u'产品编号',u'放款时间',u'期数',u'放款金额',u'退还给资金方日',u'还款金额',u'实还本金',u'实还利息',u'实还资金方服务费',u'流水号'
, u'银行金额',u'类型',u'用户退单日']]
df_refund.to_excel(file_path+u'还资金方表-%s_%s.xlsx' % (year,month),index=None,encoding='UTF-8')
df_refund.to_excel(file_path+u'去哪儿_还资金方表-%s_%s.xlsx' % (year,month),index=None,encoding='UTF-8')
if __name__ == '__main__':
year=2017
month=9
month=10
fund_tk(year,month)
\ No newline at end of file
......@@ -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'
......
......@@ -113,13 +113,10 @@ def qunaer_zaidai(listen_time,watch_time,user_plan_2016,user_plan_2017):
join pay_detail t2 on t1.product_no = t2.product_no
where t2.fund_code = 1
''' % user_plan_2017
df_2017=pd.read_sql(sql_2017,engine_qunaer)
sql_baoli='''
select product_no ,date(deadline) deadline,status from baoli_repayment_plan
'''
df_baoli=pd.read_sql(sql_baoli,engine_qunaer)
df_plan=pd.concat([df_2016,df_2017,df_baoli],ignore_index=True)
df_plan=pd.concat([df_2016,df_2017],ignore_index=True)
#===首先提取 status=3 的这部分订单
df_trans_select=df_trans.ix[df_trans.product_no.isin(df_plan.ix[df_plan.status==3].product_no)]
# 将在贷中属于转分期的订单进行合并
......@@ -213,4 +210,9 @@ if __name__ == '__main__':
listen_time = datetime.datetime(year, month + 1, 1, 0, 0, 0)
qunaer_zaidai(listen_time,yuqi_time,user_plan_2016,user_plan_2017)
print(str(year),str(month), 'ends--------')
\ No newline at end of file
print(str(year),str(month), 'ends--------')
# -*- encoding: utf8 -*-
import sys
import os
import datetime
import numpy as np
import pandas as pd
from dateutil.relativedelta import relativedelta
from sqlalchemy import create_engine
reload(sys)
sys.setdefaultencoding("utf-8")
pd.options.mode.chained_assignment = None
'''
@author linfang
计算去哪儿的在贷明细
product_no 的明细
包括观察点时的在贷和观察点之后的贷后表现
其中需要剔除 loan_amount > 0 & 剩余 < 0 的情况---这些是因为 还款计划拆分的问题造成的。
16年0930 的版本以这个为准
'''
file_path=u'E:/量化派/去哪儿/常规出账/'
#==观察点时间==
listen_time=datetime.date(2017,11,1)
engine_qunaer = create_engine('mysql+mysqldb://internal_r:ArbNgtvlJzZHXsEu@172.16.3.201:3306/qunaer_new?charset=utf8',
echo=False).connect()
def zaidai(listen_time,user_plan_2016='repayment_plan_2016',user_plan_2017='repayment_plan_2017'):
#==放款
sql_loan = '''
select product_no,date(loan_time) loan_time, IF(is_ptf=0,loan_amount,0) loan_amount
from qunaer_new.pay_detail
where loan_time < '%s' AND fund_code = 1 AND status=1
''' % listen_time
#==债转后的
sql_loan_2 = '''
select product_no,date(loan_time) loan_time,loan_amount
from qunaer_new.baoli_pay_detail
WHERE trans_time < '%s' and status=1
''' % listen_time
#==观察点时间前的退款
sql_pre_refund = '''
select product_no,-sum(refund_principle) pre_refund_principle from
qunaer_new.refund_detail
where refund_time < '%s' AND fund_code=1 AND refund_status = 1
GROUP by 1
''' % listen_time
# ==观察点时间前的还款
sql_pre_repay = '''
select product_no,sum(repay_principle) pre_repay_principle from
qunaer_new.repay_detail
where repay_time < '%s' AND fund_code = 1 AND repay_status = 1
GROUP by 1
''' % listen_time
##==观察点时间后的退款
sql_after_refund = '''
select t1.product_no ,-sum(refund_principle) after_refund_principle from
qunaer_new.refund_detail t1
JOIN qunaer_new.pay_detail t2 on t1.product_no = t2.product_no
where t1.refund_time >= '%s' AND t2.trans_time < '%s' AND t1.fund_code = 1 AND t2.status = 1 AND t1.refund_status =1
GROUP by 1
''' % (listen_time,listen_time)
##==观察点时间后的还款
sql_after_repay = '''
select t1.product_no ,sum(repay_principle) after_repay_principle from
qunaer_new.repay_detail t1
JOIN qunaer_new.pay_detail t2 on t1.product_no = t2.product_no
where t1.repay_time >= '%s' AND t2.trans_time < '%s' AND t1.fund_code = 1 AND t2.status=1 AND t1.repay_status = 1
GROUP by 1
''' % (listen_time,listen_time)
##==未到期的,user_plan_2016
sql_after_deadline = '''
select t1.product_no,sum(principle) after_deadline
from %s t1
JOIN qunaer_new.pay_detail t2 on t1.product_no = t2.product_no
where t2.trans_time < '%s' AND t1.status = 1 AND t1.deadline >= '%s' AND t2.fund_code = 1
GROUP by 1
''' % (user_plan_2016,listen_time, listen_time)
##==未到期的,user_plan_2017
sql_after_deadline_2017 = '''
select t1.product_no,sum(principle) after_deadline
from %s t1
JOIN qunaer_new.pay_detail t2 on t1.product_no = t2.product_no
where t2.trans_time < '%s' AND t1.status = 1 AND t1.deadline >= '%s' AND t1.fund_code = 1 AND t2.status = 1
GROUP by 1
''' % (user_plan_2017,listen_time, listen_time)
# all 放款
df_loan = pd.read_sql(sql_loan, engine_qunaer)
df_loan_1 = pd.read_sql(sql_loan_2, engine_qunaer)
df_loan = pd.concat([df_loan, df_loan_1], ignore_index=True)
#== 观察点前的退还款
df_pre_refund = pd.read_sql(sql_pre_refund, engine_qunaer)
df_pre_repay = pd.read_sql(sql_pre_repay, engine_qunaer)
# == 观察点后的退还款
df_after_refund = pd.read_sql(sql_after_refund, engine_qunaer)
df_after_repay = pd.read_sql(sql_after_repay, engine_qunaer)
#未到期的
df_after_deadline_2016 = pd.read_sql(sql_after_deadline, engine_qunaer)
df_after_deadline_2017 = pd.read_sql(sql_after_deadline_2017, engine_qunaer)
df_after_deadline = pd.concat([df_after_deadline_2016, df_after_deadline_2017,],ignore_index=True)
df_after_deadline = df_after_deadline.groupby(['product_no'])['after_deadline'].sum().reset_index()
#==合并
df = pd.merge(df_loan, df_pre_refund, on='product_no', how='left')
df = pd.merge(df, df_pre_repay, on='product_no', how='left')
df = pd.merge(df, df_after_refund, on='product_no', how='left')
df = pd.merge(df, df_after_repay, on='product_no', how='left')
df = pd.merge(df, df_after_deadline, on='product_no', how='left')
df.fillna(0, inplace=True)
df['zaidai'] = np.round(df['loan_amount'] - df['pre_refund_principle'] - df['pre_repay_principle'], 2)
#== 剔除在贷为 0 的数据
df=df.ix[df.zaidai != 0]
df['贷后还款'] = np.round(df['after_refund_principle'] + df['after_repay_principle'] + df['after_deadline'], 2)
df['剩余'] = np.round(
df['loan_amount'] - df['pre_refund_principle'] - df['pre_repay_principle'] - df['after_refund_principle'] - df[
'after_repay_principle'] - df['after_deadline'], 2)
# df.rename(columns={'product_no': '产品编号', 'loan_time': '放款时间'}, inplace=True)
df.to_csv(file_path+u'去哪儿在贷明细_%s.csv' % (listen_time), encoding='UTF-8', index=None)
zaidai(listen_time)
\ No newline at end of file
# -*- encoding: utf8 -*-
import sys
import os
import datetime
import numpy as np
import pandas as pd
from dateutil.relativedelta import relativedelta
from sqlalchemy import create_engine
reload(sys)
sys.setdefaultencoding("utf-8")
pd.options.mode.chained_assignment = None
engine_qunaer = create_engine('mysql+mysqldb://yulong:ohVU1nPITynSZwR2@172.16.3.201:3306/qunaer_new?charset=utf8', echo=False).connect()
'''
@author linfang
计算去哪儿的在贷明细
product_no 的明细
包括观察点时的在贷和观察点之后的贷后表现
其中需要剔除 loan_amount > 0 & 剩余 < 0 的情况---这些是因为 还款计划拆分的问题造成的。
16年0930 的版本以这个为准
'''
year=2017
month=10
listen_time=datetime.datetime(year,month,1,0,0,0)
sql_loan='''
select product_no,date(loan_time) loan_time, IF(is_ptf=0,loan_amount,0) loan_amount
from qunaer_new.pay_detail
where loan_time < '%s' AND fund_code = 1
''' % listen_time
sql_loan_2='''
select product_no,date(loan_time) loan_time,loan_amount
from qunaer_new.baoli_pay_detail
WHERE trans_time < '%s'
''' % listen_time
#在listen_time 内发生转分期的数据
# sql_not_loan='''
# select t1.product_no
# from qunaer_new.pay_detail t1
# JOIN qunaer_new.trans_ref t2 on t1.product_no = t2.product_no
# WHERE t1.trans_time < '%s'
# ''' % listen_time
sql_pre_refund='''
select product_no,-sum(refund_principle) pre_refund_principle from
qunaer_new.refund_detail
where refund_time < '%s' AND fund_code=1 AND flow_id is NULL
GROUP by 1
''' % listen_time
sql_pre_repay='''
select product_no,sum(repay_principle) pre_repay_principle from
qunaer_new.repay_detail
where repay_time < '%s' AND fund_code = 1
GROUP by 1
''' % listen_time
sql_pre_repay2='''
select product_no,-sum(refund_principle) pre_repay_principle from
qunaer_new.refund_detail
where refund_time < '%s' AND fund_code = 1 and flow_id is not NULL
GROUP by 1
''' % listen_time
sql_after_refund='''
select t1.product_no ,-sum(refund_principle) after_refund_principle from
qunaer_new.refund_detail t1
JOIN qunaer_new.pay_detail t2 on t1.product_no = t2.product_no
where t2.loan_time < '%s' AND t1.refund_time >= '%s' AND t1.fund_code = 1 AND t1.flow_id is NULL
GROUP by 1
''' % (listen_time,listen_time)
sql_after_repay='''
select t1.product_no ,sum(repay_principle) after_repay_principle from
qunaer_new.repay_detail t1
JOIN qunaer_new.pay_detail t2 on t1.product_no = t2.product_no
where t2.loan_time < '%s' AND t1.repay_time >= '%s' AND t1.fund_code = 1
GROUP by 1
''' % (listen_time,listen_time)
sql_after_repay2='''
select t1.product_no ,-sum(refund_principle) after_repay_principle from
qunaer_new.refund_detail t1
JOIN qunaer_new.pay_detail t2 on t1.product_no = t2.product_no
where t2.loan_time < '%s' AND t1.refund_time >= '%s' AND t1.fund_code = 1 AND t1.flow_id is not NULL
GROUP by 1
''' % (listen_time,listen_time)
sql_after_deadline='''
select t1.product_no,sum(principle) after_deadline
from qunaer_new.repayment_plan_2016 t1
JOIN qunaer_new.pay_detail t2 on t1.product_no = t2.product_no
where t2.loan_time < '%s' AND t1.status = 1 AND t1.deadline >= '%s' AND t2.fund_code = 1
GROUP by 1
''' % (listen_time,listen_time)
sql_after_deadline_2017='''
select t1.product_no,sum(principle) after_deadline
from qunaer_new.repayment_plan_2017 t1
JOIN qunaer_new.pay_detail t2 on t1.product_no = t2.product_no
where t2.loan_time < '%s' AND t1.status = 1 AND t1.deadline >= '%s' AND t1.fund_code = 1
GROUP by 1
''' % (listen_time,listen_time)
sql_after_deadline_baoli='''
select t1.product_no,sum(principle) after_deadline
from qunaer_new.baoli_repayment_plan t1
JOIN qunaer_new.pay_detail t2 on t1.product_no = t2.product_no
where t2.trans_time < '%s' AND t1.status = 1 AND t1.deadline >= '%s' AND t1.fund_code = 1
GROUP by 1
''' % (listen_time,listen_time)
df_loan=pd.read_sql(sql_loan,engine_qunaer)
df_loan_1=pd.read_sql(sql_loan_2,engine_qunaer)
df_loan = pd.concat([df_loan,df_loan_1],ignore_index=True)
# df_not_loan=pd.read_sql(sql_not_loan,engine_qunaer)
df_pre_refund=pd.read_sql(sql_pre_refund,engine_qunaer)
df_pre_repay=pd.read_sql(sql_pre_repay,engine_qunaer)
df_pre_repay2=pd.read_sql(sql_pre_repay2,engine_qunaer)
df_pre_repay = pd.concat([df_pre_repay,df_pre_repay2],ignore_index=True)
df_after_refund=pd.read_sql(sql_after_refund,engine_qunaer)
df_after_repay=pd.read_sql(sql_after_repay,engine_qunaer)
df_after_repay2=pd.read_sql(sql_after_repay2,engine_qunaer)
df_after_repay=pd.concat([df_after_repay,df_after_repay2],ignore_index=True)
df_after_deadline=pd.read_sql(sql_after_deadline,engine_qunaer)
df_after_deadline_2017=pd.read_sql(sql_after_deadline_2017,engine_qunaer)
df_after_deadline_baoli=pd.read_sql(sql_after_deadline_baoli,engine_qunaer)
df_after_deadline=pd.concat([df_after_deadline,df_after_deadline_2017,df_after_deadline_baoli],ignore_index=True)
df_after_deadline=df_after_deadline.groupby(['product_no'])['after_deadline'].sum().reset_index()
#剔除发生转分期的订单
# df_loan=df_loan.ix[~df_loan.product_no.isin(df_not_loan.product_no)]
df=pd.merge(df_loan,df_pre_refund,on='product_no',how='left')
df=pd.merge(df,df_pre_repay,on='product_no',how='left')
df=pd.merge(df,df_after_refund,on='product_no',how='left')
df=pd.merge(df,df_after_repay,on='product_no',how='left')
df=pd.merge(df,df_after_deadline,on='product_no',how='left')
df.fillna(0,inplace=True)
df['在贷']=np.round(df['loan_amount']-df['pre_refund_principle']-df['pre_repay_principle'],2)
df['贷后还款']=np.round(df['after_refund_principle'] +df['after_repay_principle']+df['after_deadline'],2)
df['剩余']=np.round(df['loan_amount']-df['pre_refund_principle']-df['pre_repay_principle']-df['after_refund_principle'] -df['after_repay_principle']-df['after_deadline'],2)
# df=df.ix[df['剩余']>=0]
df.rename(columns={'product_no':'产品编号','loan_time':'放款时间'},inplace=True)
df.to_csv(u'E:/去哪儿在贷明细_%s_%s.csv' % (year,month),encoding='UTF-8',index=None)
......@@ -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 = """
......
......@@ -22,7 +22,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/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():
......
......@@ -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'
......
......@@ -5,6 +5,8 @@ import pandas as pd
import numpy as np
import datetime
from sqlalchemy import create_engine
import pyexcelerate
max_limit = 800000
reload(sys)
sys.setdefaultencoding('utf8')
......@@ -12,9 +14,12 @@ sys.setdefaultencoding('utf8')
engine_new_transaction = create_engine(
'mysql+mysqldb://internal_r:ArbNgtvlJzZHXsEu@172.16.3.201:3306/all_back_0930?charset=utf8', echo=True)
#假如导出10月份的数据,则end_point 是11月份第一天,watch_point 是10月份最后一天
end_point = '2017-10-01'
watch_point = datetime.date(2017, 9, 30)
out_file_path = u'E:/数据汇总/白条/在贷/'
out_file_path = u'E:/审计出表/11月份开始使用表数据/11月份白条出表/在贷/'
query_loan = """
SELECT
tt.order_no,tt.term_no,
......@@ -195,7 +200,6 @@ select tt.order_no,tt.term_no,tt.paid_principle from(
GROUP BY 1,2
)tt
GROUP BY 1,2
"""
df_info = pd.read_sql(loan_info, engine_new_transaction)
......@@ -205,6 +209,7 @@ df_ali = pd.read_sql(repay_ali % end_point, engine_new_transaction)
df_bank = pd.read_sql(repay_bank % end_point, engine_new_transaction)
df_cash = pd.read_sql(repay_cash % (end_point, end_point), engine_new_transaction)
df_repay = pd.concat([df_online, df_ali, df_bank, df_cash], axis=0, ignore_index=True)
df_repay.dropna(axis=0, inplace=True)
df_loan = df_loan.loc[df_loan['principle'] > 0]
df_info.order_no = df_info.order_no.astype(str)
......@@ -216,6 +221,9 @@ df_repay = df_repay.groupby(['order_no', 'term_no'])['paid_principle'].agg({'sum
df_out = pd.merge(df_loan, df_repay, on=['order_no', 'term_no'], how='left')
df_out['deadline'] = pd.to_datetime(df_out.deadline)
df_out.fillna(0, inplace=True)
# watch_point = datetime.date(2017, 9, 30)
df_out['flag'] = (watch_point-df_out['deadline']).dt.days
df_out['zaidai'] = df_out['principle'] - df_out['paid_principle']
df_out.loc[df_out['order_no'].isin(
['trainmall1483695024282', 'trainmall1484301600672', 'trainmall1486362269554', 'trainmall1487920296689',
......@@ -223,12 +231,38 @@ df_out.loc[df_out['order_no'].isin(
'trainmall1484301600672', 'trainmall1486362269554', 'grabtrainmall1484650405321', 'trainmall1495785791995',
'trainmall1499935282194', 'trainmall16008368458050561', 'trainmall16008408858634241',
'trainmall16112348780571649', 'trainmall16112552463312897']), 'zaidai'] = 0
#只在17年使用的部分,调账使用
'''
df_out.loc[df_out['product_no']=='300156290067001502503609','flag'] = 1
'''
df_out.loc[(df_out['flag']<=0),'0'] = df_out['zaidai']
df_out.loc[(df_out['flag']>=1) &(df_out['flag']<=30),'01-30'] = df_out['zaidai']
df_out.loc[(df_out['flag']>=31) &(df_out['flag']<=60),'31-60'] = df_out['zaidai']
df_out.loc[(df_out['flag']>=61) &(df_out['flag']<=90),'61-90'] = df_out['zaidai']
df_out.loc[(df_out['flag']>=91) &(df_out['flag']<=120),'91-120'] = df_out['zaidai']
df_out.loc[(df_out['flag']>=121) &(df_out['flag']<=150),'121-150'] = df_out['zaidai']
df_out.loc[(df_out['flag']>=151) &(df_out['flag']<=180),'151-180'] = df_out['zaidai']
df_out.loc[(df_out['flag']>=181) &(df_out['flag']<=360),'181-360'] = df_out['zaidai']
df_out.loc[(df_out['flag']>=361),'361+'] = df_out['zaidai']
# df_out['zaidai'] = df_out['zaidai'].apply(lambda x: np.round(x, 2))
df = df_out.groupby(['order_no'])['zaidai'].agg({'sum'}).reset_index().rename(columns={'sum': u'未还本金'})
df = df_out.groupby(['order_no'])['0','01-30','31-60','61-90','91-120','121-150','151-180','181-360','361+'].sum().reset_index()
df.fillna(0,inplace=True)
df_loan.order_no = df_loan.order_no.astype(str)
df = pd.merge(df, df_info, on='order_no', how='left')
df = df[[u'商户', 'order_no', u'订单金额', u'合同期数', u'放款时间', u'未还本金']]
df[u'未还本金'].fillna(0, inplace=True)
df.rename(columns={'order_no': u'订单号'}, inplace=True)
df.to_csv(out_file_path + u'白条在贷按order_no展开_%s.csv' % end_point, index=None, encoding='UTF-8')
df.rename(columns={'order_no': u'订单号'
}, inplace=True)
df = df[[u'商户', u'订单号', u'订单金额', u'合同期数', u'放款时间','0','01-30','31-60','61-90','91-120','121-150','151-180','181-360','361+']]
all_wb = pyexcelerate.Workbook()
for i in xrange(0, len(df), max_limit):
temp = df[i:i + max_limit]
temp_list = temp.values.tolist()
temp_list.insert(0, temp.columns.tolist())
all_wb.new_sheet(str(int(i / max_limit + 1)), data=temp_list)
all_wb.save(out_file_path + u'白条在贷按order_no展开_%s.xlsx' % end_point)
# df.to_csv(out_file_path + u'白条在贷按order_no展开_%s.csv' % end_point, index=None, encoding='UTF-8')
......@@ -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`
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment