Commit 62499840 authored by 陈涛's avatar 陈涛

修改bug

parent fa83afe1
...@@ -17,10 +17,10 @@ from schema.fund import FundStatus ...@@ -17,10 +17,10 @@ from schema.fund import FundStatus
from schema.node import BindNode from schema.node import BindNode
from service.beacon import BeaconChaService from service.beacon import BeaconChaService
from service.bill import update_bill from service.bill import update_bill
from service.fund import query_fund_assets_and_nodes, update_fund, get_nav_record from service.fund import query_fund_assets_and_nodes, update_fund
from service.nav import query_nav_record
from service.permission import check_permission from service.permission import check_permission
from tools.jwt_tools import User from tools.jwt_tools import User
from tools.time_helper import timestamp_to_datetime
router = APIRouter() router = APIRouter()
bill_type_to_permission = { bill_type_to_permission = {
...@@ -32,20 +32,6 @@ bill_type_to_permission = { ...@@ -32,20 +32,6 @@ bill_type_to_permission = {
} }
async def nav_handler(nav_collect, fund_id, record_time, settlement_time):
record_date = timestamp_to_datetime(record_time)
re_time = int(re.findall(r"(\d+):00", settlement_time)[0])
if record_date.hour < re_time:
record_date += datetime.timedelta(days=-1)
start_date = record_date.replace(hour=0, minute=0, second=0, microsecond=0, tzinfo=pytz.UTC)
nav_record = await get_nav_record(
nav_collect=nav_collect,
fund_id=fund_id,
query_data={"record_date": {"$gte": start_date}}
)
return nav_record
@router.post('/pcf/', @router.post('/pcf/',
response_model=Response[PCFBill], response_model=Response[PCFBill],
tags=['[申购/赎回]'], tags=['[申购/赎回]'],
...@@ -75,7 +61,7 @@ async def create_pcf( ...@@ -75,7 +61,7 @@ async def create_pcf(
# assert assets[create_pcf_bill.currency] + delta_volume >= 0, "余额不足" # assert assets[create_pcf_bill.currency] + delta_volume >= 0, "余额不足"
assets[create_pcf_bill.currency] += delta_volume assets[create_pcf_bill.currency] += delta_volume
nav_record = await nav_handler( nav_record = await query_nav_record(
nav_collect=nav_collect, fund_id=create_pcf_bill.fund_id, nav_collect=nav_collect, fund_id=create_pcf_bill.fund_id,
record_time=create_pcf_bill.record_time, settlement_time=fund_data["settlement_time"] record_time=create_pcf_bill.record_time, settlement_time=fund_data["settlement_time"]
) )
...@@ -121,7 +107,7 @@ async def create_exchange( ...@@ -121,7 +107,7 @@ async def create_exchange(
assets[create_exchange_bill.input_currency] -= create_exchange_bill.input_volume assets[create_exchange_bill.input_currency] -= create_exchange_bill.input_volume
assets[create_exchange_bill.output_currency] += create_exchange_bill.output_volume assets[create_exchange_bill.output_currency] += create_exchange_bill.output_volume
nav_record = await nav_handler( nav_record = await query_nav_record(
nav_collect=nav_collect, fund_id=create_exchange_bill.fund_id, nav_collect=nav_collect, fund_id=create_exchange_bill.fund_id,
record_time=create_exchange_bill.record_time, settlement_time=fund_data["settlement_time"] record_time=create_exchange_bill.record_time, settlement_time=fund_data["settlement_time"]
) )
...@@ -172,19 +158,6 @@ async def create_adjust( ...@@ -172,19 +158,6 @@ async def create_adjust(
adjust_assets[create_adjust_bill.currency] += create_adjust_bill.volume adjust_assets[create_adjust_bill.currency] += create_adjust_bill.volume
adjust_assets['fund_share'] += create_adjust_bill.fund_share adjust_assets['fund_share'] += create_adjust_bill.fund_share
nav_record = await nav_handler(
nav_collect=nav_collect, fund_id=create_adjust_bill.fund_id,
record_time=create_adjust_bill.record_time, settlement_time=fund_data["settlement_time"]
)
bulk_list = []
for nav in nav_record:
nav["assets"].setdefault(create_adjust_bill.currency, 0)
nav["assets"][create_adjust_bill.currency] += create_adjust_bill.volume
bulk_list.append(UpdateOne({"_id": nav["_id"]}, {"$set": {"assets": nav["assets"]}}))
await update_fund(fund_collect, create_adjust_bill.fund_id, adjust_assets=adjust_assets)
if bulk_list:
await nav_collect.bulk_write(bulk_list)
adjust_bill = AdjustBill(user_id=user.id, **create_adjust_bill.dict()) adjust_bill = AdjustBill(user_id=user.id, **create_adjust_bill.dict())
await bill_collect.insert_one(adjust_bill.dict()) await bill_collect.insert_one(adjust_bill.dict())
response = Response[AdjustBill](data=adjust_bill.dict()) response = Response[AdjustBill](data=adjust_bill.dict())
......
...@@ -43,12 +43,3 @@ async def update_fund(fund_collect, fund_id, *, assets=None, adjust_assets=None, ...@@ -43,12 +43,3 @@ async def update_fund(fund_collect, fund_id, *, assets=None, adjust_assets=None,
if nodes: if nodes:
update_data.update({'nodes': nodes}) update_data.update({'nodes': nodes})
await fund_collect.update_one(query, {"$set": update_data}) await fund_collect.update_one(query, {"$set": update_data})
async def get_nav_record(nav_collect: AgnosticCollection, fund_id: str, query_data: {}):
query = {"fund_id": fund_id}
if query_data:
query.update(query_data)
cursor = nav_collect.find(query)
nav_result = await cursor.to_list(length=None)
return nav_result
import datetime import datetime
import re
import time import time
import uuid import uuid
...@@ -11,6 +12,7 @@ from dependencies import get_fund_collect, get_cmc_price_redis, get_hour_price_c ...@@ -11,6 +12,7 @@ from dependencies import get_fund_collect, get_cmc_price_redis, get_hour_price_c
from model.fund import FundStatus from model.fund import FundStatus
from service.beacon import BeaconChaService from service.beacon import BeaconChaService
from service.price import get_price from service.price import get_price
from tools.time_helper import timestamp_to_datetime
def build_fund_nav(fund_data: dict, record_date, total_fund_share, net_value): def build_fund_nav(fund_data: dict, record_date, total_fund_share, net_value):
...@@ -77,7 +79,8 @@ async def calculate_nav(fund_id, calc_time: datetime.datetime = None, beach_serv ...@@ -77,7 +79,8 @@ async def calculate_nav(fund_id, calc_time: datetime.datetime = None, beach_serv
if calc_time: if calc_time:
# mongodb 查询历史数据 # mongodb 查询历史数据
hour_price_collect = get_hour_price_collect(app.state.mongodb_manager) hour_price_collect = get_hour_price_collect(app.state.mongodb_manager)
price_data = await get_price(list(amount), calc_time - datetime.timedelta(hours=1), hour_price_collect) query_time = (calc_time - datetime.timedelta(hours=1)).replace(minute=0, second=0, microsecond=0, tzinfo=pytz.UTC)
price_data = await get_price(list(amount), query_time, hour_price_collect)
else: else:
# redis 查询最新数据 # redis 查询最新数据
redis_client = get_cmc_price_redis(app.state.redis_manager) redis_client = get_cmc_price_redis(app.state.redis_manager)
...@@ -118,3 +121,30 @@ async def calculate_nav(fund_id, calc_time: datetime.datetime = None, beach_serv ...@@ -118,3 +121,30 @@ async def calculate_nav(fund_id, calc_time: datetime.datetime = None, beach_serv
return_document=ReturnDocument.AFTER return_document=ReturnDocument.AFTER
) )
return update_record return update_record
async def query_nav_record(nav_collect, fund_id, record_time, settlement_time):
record_date = timestamp_to_datetime(record_time)
re_time = int(re.findall(r"(\d+):00", settlement_time)[0])
if record_date.hour < re_time:
record_date += datetime.timedelta(days=-1)
start_date = record_date.replace(hour=0, minute=0, second=0, microsecond=0, tzinfo=pytz.UTC)
cursor = nav_collect.find({"fund_id": fund_id, "record_date": {"$gte": start_date}})
nav_result = await cursor.to_list(length=None)
return nav_result
# async def update_history_records():
# nav_record = await query_nav_record(
# nav_collect=nav_collect, fund_id=create_adjust_bill.fund_id,
# record_time=create_adjust_bill.record_time, settlement_time=fund_data["settlement_time"]
# )
# bulk_list = []
# for nav in nav_record:
# nav["assets"].setdefault(create_adjust_bill.currency, 0)
# nav["assets"][create_adjust_bill.currency] += create_adjust_bill.volume
# bulk_list.append(UpdateOne({"_id": nav["_id"]}, {"$set": {"assets": nav["assets"]}}))
#
# await update_fund(fund_collect, create_adjust_bill.fund_id, adjust_assets=adjust_assets)
# if bulk_list:
# await nav_collect.bulk_write(bulk_list)
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