Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
P
PyFund
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
陈涛
PyFund
Commits
62499840
Commit
62499840
authored
Jun 20, 2023
by
陈涛
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
修改bug
parent
fa83afe1
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
35 additions
and
41 deletions
+35
-41
bill.py
api/bill.py
+4
-31
fund.py
service/fund.py
+0
-9
nav.py
service/nav.py
+31
-1
No files found.
api/bill.py
View file @
62499840
...
...
@@ -17,10 +17,10 @@ from schema.fund import FundStatus
from
schema.node
import
BindNode
from
service.beacon
import
BeaconChaService
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
tools.jwt_tools
import
User
from
tools.time_helper
import
timestamp_to_datetime
router
=
APIRouter
()
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/'
,
response_model
=
Response
[
PCFBill
],
tags
=
[
'[申购/赎回]'
],
...
...
@@ -75,7 +61,7 @@ async def create_pcf(
# assert assets[create_pcf_bill.currency] + delta_volume >= 0, "余额不足"
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
,
record_time
=
create_pcf_bill
.
record_time
,
settlement_time
=
fund_data
[
"settlement_time"
]
)
...
...
@@ -121,7 +107,7 @@ async def create_exchange(
assets
[
create_exchange_bill
.
input_currency
]
-=
create_exchange_bill
.
input_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
,
record_time
=
create_exchange_bill
.
record_time
,
settlement_time
=
fund_data
[
"settlement_time"
]
)
...
...
@@ -172,19 +158,6 @@ async def create_adjust(
adjust_assets
[
create_adjust_bill
.
currency
]
+=
create_adjust_bill
.
volume
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
())
await
bill_collect
.
insert_one
(
adjust_bill
.
dict
())
response
=
Response
[
AdjustBill
](
data
=
adjust_bill
.
dict
())
...
...
service/fund.py
View file @
62499840
...
...
@@ -43,12 +43,3 @@ async def update_fund(fund_collect, fund_id, *, assets=None, adjust_assets=None,
if
nodes
:
update_data
.
update
({
'nodes'
:
nodes
})
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
service/nav.py
View file @
62499840
import
datetime
import
re
import
time
import
uuid
...
...
@@ -11,6 +12,7 @@ from dependencies import get_fund_collect, get_cmc_price_redis, get_hour_price_c
from
model.fund
import
FundStatus
from
service.beacon
import
BeaconChaService
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
):
...
...
@@ -77,7 +79,8 @@ async def calculate_nav(fund_id, calc_time: datetime.datetime = None, beach_serv
if
calc_time
:
# mongodb 查询历史数据
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
:
# redis 查询最新数据
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
return_document
=
ReturnDocument
.
AFTER
)
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)
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment