Beispiel #1
0
def asset_value_history_detail():
    query_params = request.json
    fundname = query_params.get('params')
    server_host = server_constant.get_server_model('host')
    session = server_host.get_db_session('jobs')
    sql = "select `unit_net`,`net_asset_value`,`product_name`,`date_str`,`sum_value`,`real_capital`,`nav_change` from \
    asset_value_info where `product_name`='%s'" % fundname
    date_utils = DateUtils()
    data = []
    for line in session.execute(sql):
        tmp_data = dict(
            unit_net=float(line[0]),
            net_asset_value=float('%.2f' % float(line[1])),
            product_name=line[2],
            date=date_utils.datetime_toString(line[3]),
            sum_value=float(line[4]),
            real_capital=float('%.2f' % float(line[5])),
            nav_change=float('%.4f' % float(line[6]))
        )
        data.append(tmp_data)
    session.close()
    data = sorted(data, key=lambda data_item: data_item['date'])
    date_list = map(lambda data_item: data_item['date'], data)
    asset_value_list = map(lambda data_item: data_item['net_asset_value'], data)
    unit_net_list = map(lambda data_item: data_item['unit_net'], data)
    sum_unit_net_list = map(lambda data_item: data_item['sum_value'], data)
    real_capital_list = map(lambda data_item: data_item['real_capital'], data)
    result = {'date_list': date_list, 'asset_value_list': asset_value_list, 'unit_net_list': unit_net_list,
              'sum_unit_net_list': sum_unit_net_list, 'real_capital_list': real_capital_list}
    return make_response(jsonify(code=200, data=result), 200)
Beispiel #2
0
def asset_value():
    # query_params = request.args
    query_params = request.json
    size = query_params.get('size', 10)
    page = query_params.get('page', 1)
    server_host = server_constant.get_server_model('host')
    session = server_host.get_db_session('jobs')
    fund_name = query_params.get('fund_name')
    search_date_item = query_params.get('search_date')
    export_flag = False
    fundNames = []
    for fund in session.execute('select product_name from asset_value_info group by product_name'):
        tmp_fund = dict(
            value=fund[0],
            label=fund[0]
        )
        fundNames.append(tmp_fund)
    data = []
    ret = session.execute(
        "select `unit_net`,`net_asset_value`,`product_name`,`date_str`,`sum_value`,`real_capital`,`nav_change` from \
        asset_value_info").fetchall()
    date_utils = DateUtils()
    for line in ret:
        tmp_data = dict(
            unit_net='%.4f' % float(line[0]),
            net_asset_value='%.2f' % float(line[1]),
            product_name=line[2],
            date=date_utils.datetime_toString(line[3]),
            sum_value='%.4f' % float(line[4]),
            real_capital='%.2f' % float(line[5]),
            nav_change='%.2f%%' % (float('%.4f' % float(line[6])) * 100)
        )
        data.append(tmp_data)
    data = sorted(data, key=lambda data_item: data_item['date'], reverse=True)
    sql = "select b.`product_name` AS `fund_name`,b.date_s AS `date`,b.`sum_value` AS `max_sum_value`,b.date_str AS \
`max_date`,d.`sum_value` AS `min_sum_value`,d.date_str AS `min_date`  from (select product_name,sum_value,date_str,date_format(`date_str`,'%Y')  AS `date_s` from (select * from asset_value_info order by date_str desc) as a group by product_name,date_format(a.`date_str`,'%Y')) as b  inner    join (select product_name,sum_value,date_str,date_format(`date_str`,'%Y')  AS `date_s` from (select * from asset_value_info order by date_str) as c group by product_name,date_format(c.`date_str`,'%Y')) as d on b.product_name=d.product_name and b.date_s=d.date_s"
    val_ret = session.execute(sql).fetchall()
    year_list = []
    val_change_data = []

    fund_info_dict = get_fund_info_dict()
    temp_net_rate_dict = {}
    for line in val_ret:
        if str(line[0]) not in temp_net_rate_dict:
            temp_net_rate_dict[line[0]] = [(line[1], line[4])]
            # temp_net_rate_dict[line[0]] = [(line[1], line[2])]
            temp_net_rate_dict[line[0]].append((line[1], line[2]))
        else:
            temp_net_rate_dict[line[0]].append((line[1], line[2]))
        if line[1] not in year_list:
            year_list.append(str(line[1]))
        # if temp_data:
        #     if str(line[0]) in temp_data.values():
        #         temp_data[str(line[1])] = '%.2f%%' % ((float(line[2]) - float(line[4])) / float(line[4]) * 100)
        #         if val_ret.index(line) + 1 == len(val_ret):
        #             val_change_data.append(temp_data)
        #     else:
        #         val_change_data.append(temp_data)
        #         temp_data = {'fund_name': str(line[0]),
        #                      str(line[1]): '%.2f%%' % ((float(line[2]) - float(line[4])) / float(line[4]) * 100)}
        # else:
        #     temp_data[str(line[1])] = '%.2f%%' % ((float(line[2]) - float(line[4])) / float(line[4]) * 100)
        #     temp_data['fund_name'] = str(line[0])
    for k, v in temp_net_rate_dict.items():
        if str(k) not in fund_info_dict:
            continue
        temp_data = dict()
        temp_data['fund_name'] = str(k)
        # v = sorted(v, key=lambda data_item: data_item[0], reverse=True)

        for index, item in enumerate(v):
            if index != 0:
                temp_data[item[0]] = '%.2f%%' % (
                        ((float(item[1]) - float(v[index - 1][1])) / float(v[index - 1][1])) * 100)
            # else:
            #     temp_data[item[0]] = '%.2f%%' % (((float(item[1]) - 1) / 1) * 100)
        tmp_dict = filter(lambda data_item: data_item['product_name'] == str(k), data)[0]
        temp_data['unit_net'] = tmp_dict['unit_net']
        temp_data['sum_value'] = tmp_dict['sum_value']
        temp_data['net_asset_value'] = tmp_dict['net_asset_value']
        temp_data['real_capital'] = tmp_dict['real_capital']
        temp_data['nav_change'] = tmp_dict['nav_change']
        temp_data['date'] = tmp_dict['date']
        temp_data['create_time'] = str(fund_info_dict[str(k)])
        val_change_data.append(temp_data)
    year_list = sorted(year_list, reverse=True)
    right_sort_prop = query_params.get('right_sort_prop', '')
    right_sort_order = query_params.get('right_sort_order', '')
    if right_sort_prop:
        if right_sort_order == 'ascending':
            val_change_data = sorted(val_change_data, key=lambda data_item: data_item[right_sort_prop], reverse=True)
        else:
            val_change_data = sorted(val_change_data, key=lambda data_item: data_item[right_sort_prop])
    session.close()
    sort_prop = query_params.get('sort_prop', '')
    sort_order = query_params.get('sort_order', '')
    if search_date_item:
        start_date, end_date = search_date_item
        data = filter(lambda data_item: start_date <= data_item['date'] <= end_date, data)
        export_flag = True
    if fund_name:
        data = filter(lambda data_item: data_item['product_name'] == fund_name, data)
        export_flag = True
    if sort_prop:
        if sort_order == 'ascending':
            data = sorted(data, key=lambda data_item: data_item[sort_prop], reverse=True)
        else:
            data = sorted(data, key=lambda data_item: data_item[sort_prop])
    start = (int(page) - 1) * int(size)
    end = int(page) * int(size)
    total = len(data)
    if total < end:
        end = total
    export_data = data
    if not export_flag:
        export_data = data[start:end]
    data = data[start:end]

    pagination = {'total': total, 'size': int(size), 'currentPage': int(page)}
    result = {'data': data, 'fundNames': fundNames, 'pagination': pagination, 'year_list': year_list,
              'val_change_data': val_change_data, 'export_data': export_data}
    return make_response(jsonify(code=200, data=result), 200)