Commit 5e8a8a60 authored by 赵杰's avatar 赵杰

更新ifa导入的基金以及新模板适配

parent 8e4973b7
......@@ -29,6 +29,8 @@ class UserCustomerDataAdaptor:
end_date = ""
group_data = {}
trade_cal_date = None
all_fund_id_list = None
all_fund_type_dict = None
all_fund_distribution = {}
all_fund_performance = {}
......@@ -36,13 +38,14 @@ class UserCustomerDataAdaptor:
self.user_id = user_id
self.customer_id = customer_id
self.compare_index_id = index_id
self.valueSex = ''
p_end_date = pd.to_datetime(end_date).date()
p_end_date = datetime.date(year=p_end_date.year, month=p_end_date.month, day=1) - datetime.timedelta(days=1)
# p_end_date = datetime.date(year=p_end_date.year, month=p_end_date.month, day=1) - datetime.timedelta(days=1)
self.end_date = pd.to_datetime(str(p_end_date))
self.end_date = pd.to_datetime("2020-12-18")
# self.end_date = pd.to_datetime("2020-12-25")
p_start_date = datetime.date(year=p_end_date.year, month=p_end_date.month, day=1)
self.month_start_date = p_start_date
self.month_start_date = pd.to_datetime("2020-12-01")
# self.month_start_date = pd.to_datetime("2020-12-01")
self.user_customer_order_df = self.get_user_customer_order_data()
self.fund_nav_total, self.fund_cnav_total = self.get_customer_fund_nav_data()
self.index_df = self.get_customer_index_nav_data()
......@@ -80,10 +83,10 @@ class UserCustomerDataAdaptor:
tamp_diagnose_app_session = tamp_diagnose_app.session
tamp_product_session = tamp_product.session
tamp_fund_session = tamp_fund.session
sql_user = """select f1.fund_id, f2.realname,f3.customer_name,f1.type,f1.order_type,f1.pay_date,f1.subscription_fee,f1.confirm_share_date,f1.confirm_share,f1.confirm_amount,f1.nav,f1.folio_name from tamp_order.customer_order_view f1, tamp_user.user_info f2,tamp_user.customer_info f3 where f2.id=f1.user_id and f3.id=f1.customer_id and f1.delete_tag=0 and user_id='{}' and customer_id='{}'""".format(self.user_id, self.customer_id)
sql_user = """select f1.fund_id, f2.realname,f3.customer_name,f3.valueSex,f1.type,f1.order_type,f1.pay_date,f1.subscription_fee,f1.confirm_share_date,f1.confirm_share,f1.confirm_amount,f1.nav,f1.folio_name from tamp_diagnose_app.customer_order_view f1, tamp_user.user_info f2,tamp_diagnose_app.customer_view f3 where f2.id=f1.user_id and f3.id=f1.customer_id and f1.delete_tag=0 and user_id='{}' and customer_id='{}'""".format(self.user_id, self.customer_id)
cur = tamp_diagnose_app_session.execute(sql_user)
data = cur.fetchall()
order_df = pd.DataFrame(list(data), columns=['fund_id', 'username', 'customer_name', 'type', 'order_type', 'pay_date',
order_df = pd.DataFrame(list(data), columns=['fund_id', 'username', 'customer_name', 'valueSex', 'type', 'order_type', 'pay_date',
'subscription_fee', 'confirm_share_date', 'confirm_share',
'confirm_amount', 'nav', 'folio_name'])
cur_fund_id = list(order_df["fund_id"].unique())
......@@ -103,11 +106,26 @@ class UserCustomerDataAdaptor:
if len(fund_df) > 0:
product_df = product_df.append(fund_df)
product_df = product_df.drop_duplicates("fund_id")
fund_type3 = order_df[order_df["type"] == 3]
if len(fund_type3) > 0:
type3_fund_id = list(fund_type3["fund_id"].unique())
fund_list_str_3 = str(type3_fund_id).replace("[", "(").replace("]", ")")
sql_fund_3 = "select distinct `id`, `fund_name`, `substrategy` from `ifa_imported_fund_info` where `id` in {}".format(
fund_list_str_3)
cur = tamp_fund_session.execute(sql_fund_3)
data = cur.fetchall()
fund_df_3 = pd.DataFrame(list(data), columns=['fund_id', 'fund_name', 'substrategy'])
fund_df_3["freq"] = 1
if len(fund_df_3) > 0:
product_df = product_df.append(fund_df_3)
product_df = product_df.drop_duplicates("fund_id")
user_customer_order_df = order_df.set_index('fund_id').join(product_df.set_index('fund_id')).reset_index()
user_customer_order_df["confirm_share_date"] = user_customer_order_df["confirm_share_date"].apply(lambda x: pd.to_datetime(x.date()))
self.customer_real_name = user_customer_order_df["customer_name"].values[0]
self.ifa_real_name = user_customer_order_df["username"].values[0]
self.valueSex = user_customer_order_df["valueSex"].values[0]
user_customer_order_df = user_customer_order_df[user_customer_order_df["confirm_share_date"] <= self.end_date]
user_customer_order_df["confirm_amount"] = user_customer_order_df["confirm_amount"] - user_customer_order_df["subscription_fee"]
user_customer_order_df.index = pd.Series(range(len(user_customer_order_df)))
......@@ -166,6 +184,10 @@ class UserCustomerDataAdaptor:
sql = """select distinct `price_date`, `nav`,`cumulative_nav` from `fund_nav` where `fund_id`='{}' order by `price_date` ASC""".format(
cur_fund_id)
cur = tamp_product_session.execute(sql)
elif fund_type == 3:
sql = """select distinct `price_date`, `nav`,`cumulative_nav` from `ifa_imported_fund_nav` where `fund_id`='{}' order by `price_date` ASC""".format(
cur_fund_id)
cur = tamp_fund_session.execute(sql)
data = cur.fetchall()
cur_fund_nav_df = pd.DataFrame(list(data), columns=['price_date', 'nav', 'cnav'])
......@@ -340,6 +362,8 @@ class UserCustomerDataAdaptor:
cnav_df = p_cnav_df[p_cnav_df.index >= start_date].copy()
p_fund_id_list = list(p_order_df["fund_id"].unique())
self.all_fund_id_list = p_fund_id_list
self.all_fund_type_dict = {values["fund_id"]: values["type"] for values in p_order_df[["fund_id", "type"]].drop_duplicates().to_dict(orient='records')}
for p_fund_id in p_fund_id_list:
order_min_date = p_order_df[p_order_df["fund_id"] == p_fund_id]["confirm_share_date"].min()
if pd.to_datetime(order_min_date) > start_date:
......
......@@ -10,7 +10,7 @@ import pandas as pd
import numpy as np
import datetime
from decimal import Decimal
from app.service.data_service_v2 import UserCustomerDataAdaptor
from app.service.data_service_v2_1 import UserCustomerDataAdaptor
from app.service.portfolio_diagnose import cal_correlation, get_fund_name, get_frequency
from app.utils.week_evaluation import *
......@@ -188,7 +188,7 @@ class UserCustomerResultAdaptor(UserCustomerDataAdaptor):
"return_ratio_year": "%.2f" % round(return_ratio_year*100, 2)}
# 对应指数数据
index_df = self.get_customer_index_nav_data()
index_df = self.get_customer_index_nav_data().dropna()
index_result = self.signal_fund_profit_result(index_df[index_df.index >= pd.to_datetime(first_trade_date)],
"index")
folio_report_data["index_result"] = index_result
......@@ -371,7 +371,7 @@ class UserCustomerResultAdaptor(UserCustomerDataAdaptor):
report_data["cumulative_return"] = float(cumulative_return)
# 对应指数数据
index_df = self.get_customer_index_nav_data()
index_df = self.get_customer_index_nav_data().dropna()
index_result = self.signal_fund_profit_result(index_df[index_df.index >= pd.to_datetime(first_trade_date)], "index")
report_data["index_result"] = index_result
......@@ -406,8 +406,8 @@ class UserCustomerResultAdaptor(UserCustomerDataAdaptor):
# 申购以来
confirm_date = pd.to_datetime(row["confirm_share_date"])
confirm_cnav = float(p_result_cnav_data.loc[confirm_date, cur_fund_id])
fund_basic_info["ret_after_confirm"] = str(round(
(fund_basic_info["cur_cnav"] - confirm_cnav) / confirm_cnav * 100, 2)) + "%"
fund_basic_info["ret_after_confirm"] = round(
(fund_basic_info["cur_cnav"] - confirm_cnav) / confirm_cnav * 100, 2)
# 分红
distribution_df = self.all_fund_distribution[cur_fund_id]
if distribution_df.empty:
......
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