Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in
Toggle navigation
T
ts-api-demo
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
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
wmvm
ts-api-demo
Commits
92b86611
Project 'zhuangke/ts-api-demo' was moved to 'wmvm/ts-api-demo'. Please update any links and bookmarks that may still have the old path.
Commit
92b86611
authored
Sep 02, 2024
by
ml
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
增加 资产部分接口
parent
fef64a78
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
411 additions
and
38 deletions
+411
-38
package-lock.json
package-lock.json
+36
-36
mUserAssets.control.ts
src/functional/mvc/control/mUserAssets.control.ts
+72
-0
mUserAssets.service.ts
src/functional/mvc/service/mUserAssets.service.ts
+286
-0
mUserManage.service.ts
src/functional/mvc/service/mUserManage.service.ts
+10
-2
index.ts
src/functional/router/v1/index.ts
+4
-0
access-limit.ts
src/setting/access-limit.ts
+3
-0
No files found.
package-lock.json
View file @
92b86611
...
...
@@ -164,13 +164,13 @@
}
},
"node_modules/@babel/generator"
:
{
"version"
:
"7.25.
5
"
,
"resolved"
:
"https://packages.aliyun.com/646341b481b284e28f47a25b/npm/npm-registry/@babel/generator/-/generator-7.25.
5
.tgz"
,
"integrity"
:
"sha512-
abd43wyLfbWoxC6ahM8xTkqLpGB2iWBVyuKC9/srhFunCd1SDNrV1s72bBpK4hLj8KLzHBBcOblvLQZBNw9r3
w=="
,
"version"
:
"7.25.
6
"
,
"resolved"
:
"https://packages.aliyun.com/646341b481b284e28f47a25b/npm/npm-registry/@babel/generator/-/generator-7.25.
6
.tgz"
,
"integrity"
:
"sha512-
VPC82gr1seXOpkjAAKoLhP50vx4vGNlF4msF64dSFq1P8RfB+QAuJWGHPXXPc8QyfVWwwB/TNNU4+ayZmHNbZ
w=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"dependencies"
:
{
"@babel/types"
:
"^7.25.
4
"
,
"@babel/types"
:
"^7.25.
6
"
,
"@jridgewell/gen-mapping"
:
"^0.3.5"
,
"@jridgewell/trace-mapping"
:
"^0.3.25"
,
"jsesc"
:
"^2.5.1"
...
...
@@ -284,14 +284,14 @@
}
},
"node_modules/@babel/helpers"
:
{
"version"
:
"7.25.
0
"
,
"resolved"
:
"https://packages.aliyun.com/646341b481b284e28f47a25b/npm/npm-registry/@babel/helpers/-/helpers-7.25.
0
.tgz"
,
"integrity"
:
"sha512-
MjgLZ42aCm0oGjJj8CtSM3DB8NOOf8h2l7DCTePJs29u+v7yO/RBX9nShlKMgFnRks/Q4tBAe7Hxnov9VkGwLw
=="
,
"version"
:
"7.25.
6
"
,
"resolved"
:
"https://packages.aliyun.com/646341b481b284e28f47a25b/npm/npm-registry/@babel/helpers/-/helpers-7.25.
6
.tgz"
,
"integrity"
:
"sha512-
Xg0tn4HcfTijTwfDwYlvVCl43V6h4KyVVX2aEm4qdO/PC6L2YvzLHFdmxhoeSA3eslcE6+ZVXHgWwopXYLNq4Q
=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"dependencies"
:
{
"@babel/template"
:
"^7.25.0"
,
"@babel/types"
:
"^7.25.
0
"
"@babel/types"
:
"^7.25.
6
"
},
"engines"
:
{
"node"
:
">=6.9.0"
...
...
@@ -392,13 +392,13 @@
}
},
"node_modules/@babel/parser"
:
{
"version"
:
"7.25.
4
"
,
"resolved"
:
"https://packages.aliyun.com/646341b481b284e28f47a25b/npm/npm-registry/@babel/parser/-/parser-7.25.
4
.tgz"
,
"integrity"
:
"sha512-
nq+eWrOgdtu3jG5Os4TQP3x3cLA8hR8TvJNjD8vnPa20WGycimcparWnLK4jJhElTK6SDyuJo1weMKO/5LpmLA
=="
,
"version"
:
"7.25.
6
"
,
"resolved"
:
"https://packages.aliyun.com/646341b481b284e28f47a25b/npm/npm-registry/@babel/parser/-/parser-7.25.
6
.tgz"
,
"integrity"
:
"sha512-
trGdfBdbD0l1ZPmcJ83eNxB9rbEax4ALFTF7fN386TMYbeCQbyme5cOEXQhbGXKebwGaB/J52w1mrklMcbgy6Q
=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"dependencies"
:
{
"@babel/types"
:
"^7.25.
4
"
"@babel/types"
:
"^7.25.
6
"
},
"bin"
:
{
"parser"
:
"bin/babel-parser.js"
...
...
@@ -423,17 +423,17 @@
}
},
"node_modules/@babel/traverse"
:
{
"version"
:
"7.25.
4
"
,
"resolved"
:
"https://packages.aliyun.com/646341b481b284e28f47a25b/npm/npm-registry/@babel/traverse/-/traverse-7.25.
4
.tgz"
,
"integrity"
:
"sha512-
VJ4XsrD+nOvlXyLzmLzUs/0qjFS4sK30te5yEFlvbbUNEgKaVb2BHZUpAL+ttLPQAHNrsI3zZisbfha5Cvr8vg
=="
,
"version"
:
"7.25.
6
"
,
"resolved"
:
"https://packages.aliyun.com/646341b481b284e28f47a25b/npm/npm-registry/@babel/traverse/-/traverse-7.25.
6
.tgz"
,
"integrity"
:
"sha512-
9Vrcx5ZW6UwK5tvqsj0nGpp/XzqthkT0dqIc9g1AdtygFToNtTF67XzYS//dm+SAK9cp3B9R4ZO/46p63SCjlQ
=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"dependencies"
:
{
"@babel/code-frame"
:
"^7.24.7"
,
"@babel/generator"
:
"^7.25.
4
"
,
"@babel/parser"
:
"^7.25.
4
"
,
"@babel/generator"
:
"^7.25.
6
"
,
"@babel/parser"
:
"^7.25.
6
"
,
"@babel/template"
:
"^7.25.0"
,
"@babel/types"
:
"^7.25.
4
"
,
"@babel/types"
:
"^7.25.
6
"
,
"debug"
:
"^4.3.1"
,
"globals"
:
"^11.1.0"
},
...
...
@@ -452,9 +452,9 @@
}
},
"node_modules/@babel/types"
:
{
"version"
:
"7.25.
4
"
,
"resolved"
:
"https://packages.aliyun.com/646341b481b284e28f47a25b/npm/npm-registry/@babel/types/-/types-7.25.
4
.tgz"
,
"integrity"
:
"sha512-
zQ1ijeeCXVEh+aNL0RlmkPkG8HUiDcU2pzQQFjtbntgAczRASFzj4H+6+bV+dy1ntKR14I/DypeuRG1uma98iQ
=="
,
"version"
:
"7.25.
6
"
,
"resolved"
:
"https://packages.aliyun.com/646341b481b284e28f47a25b/npm/npm-registry/@babel/types/-/types-7.25.
6
.tgz"
,
"integrity"
:
"sha512-
/l42B1qxpG6RdfYf343Uw1vmDjeNhneUXtzhojE7pDgfpEypmRhI6j1kr17XCVv4Cgl9HdAiQY2x0GwKm7rWCw
=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"dependencies"
:
{
...
...
@@ -1069,9 +1069,9 @@
}
},
"node_modules/@madex/ex-ts-dao"
:
{
"version"
:
"0.0.2
1
"
,
"resolved"
:
"https://packages.aliyun.com/646341b481b284e28f47a25b/npm/npm-registry/@madex/ex-ts-dao/-/@madex/ex-ts-dao-0.0.2
1
.tgz"
,
"integrity"
:
"sha512-
uXdHq1OyOLxilsj9/k5lavzDvt0HqKOH/oTf3HHSHup2aF/UepUIwm62RyZoDE/MdrdRFS0DZsnddAbAcARRqw
=="
,
"version"
:
"0.0.2
2
"
,
"resolved"
:
"https://packages.aliyun.com/646341b481b284e28f47a25b/npm/npm-registry/@madex/ex-ts-dao/-/@madex/ex-ts-dao-0.0.2
2
.tgz"
,
"integrity"
:
"sha512-
BUr/YIK2FHnjmVMXVegkVYhFihbv3nVBxrLN1ngcTVuWaABWpsPxufyvPYOm+Wvpn5ndUdHOAPtqUMZr++PppA
=="
,
"license"
:
"ISC"
,
"dependencies"
:
{
"@madex/ex-js-public"
:
"git+ssh://git@bitbucket.org/biiigle/ex-js-public.git#master"
,
...
...
@@ -1617,9 +1617,9 @@
}
},
"node_modules/@types/node"
:
{
"version"
:
"20.16.
2
"
,
"resolved"
:
"https://packages.aliyun.com/646341b481b284e28f47a25b/npm/npm-registry/@types/node/-/node-20.16.
2
.tgz"
,
"integrity"
:
"sha512-
91s/n4qUPV/wg8eE9KHYW1kouTfDk2FPGjXbBMfRWP/2vg1rCXNQL1OCabwGs0XSdukuK+MwCDXE30QpSeMUh
Q=="
,
"version"
:
"20.16.
3
"
,
"resolved"
:
"https://packages.aliyun.com/646341b481b284e28f47a25b/npm/npm-registry/@types/node/-/node-20.16.
3
.tgz"
,
"integrity"
:
"sha512-
/wdGiWRkMOm53gAsSyFMXFZHbVg7C6CbkrzHNpaHoYfsUWPg7m6ZRKtvQjgvQ9i8WT540a3ydRlRQbxjY30Xx
Q=="
,
"license"
:
"MIT"
,
"dependencies"
:
{
"undici-types"
:
"~6.19.2"
...
...
@@ -3322,9 +3322,9 @@
}
},
"node_modules/caniuse-lite"
:
{
"version"
:
"1.0.3000165
3
"
,
"resolved"
:
"https://packages.aliyun.com/646341b481b284e28f47a25b/npm/npm-registry/caniuse-lite/-/caniuse-lite-1.0.3000165
3
.tgz"
,
"integrity"
:
"sha512-
XGWQVB8wFQ2+9NZwZ10GxTYC5hk0Fa+q8cSkr0tgvMhYhMHP/QC+WTgrePMDBWiWc/pV+1ik82Al20XOK25Gcw
=="
,
"version"
:
"1.0.3000165
5
"
,
"resolved"
:
"https://packages.aliyun.com/646341b481b284e28f47a25b/npm/npm-registry/caniuse-lite/-/caniuse-lite-1.0.3000165
5
.tgz"
,
"integrity"
:
"sha512-
jRGVy3iSGO5Uutn2owlb5gR6qsGngTw9ZTb4ali9f3glshcNmJ2noam4Mo9zia5P9Dk3jNNydy7vQjuE5dQmfg
=="
,
"dev"
:
true
,
"funding"
:
[
{
...
...
@@ -4805,9 +4805,9 @@
}
},
"node_modules/escalade"
:
{
"version"
:
"3.
1.2
"
,
"resolved"
:
"https://packages.aliyun.com/646341b481b284e28f47a25b/npm/npm-registry/escalade/-/escalade-3.
1.2
.tgz"
,
"integrity"
:
"sha512-
ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGm
A=="
,
"version"
:
"3.
2.0
"
,
"resolved"
:
"https://packages.aliyun.com/646341b481b284e28f47a25b/npm/npm-registry/escalade/-/escalade-3.
2.0
.tgz"
,
"integrity"
:
"sha512-
WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/j
A=="
,
"dev"
:
true
,
"license"
:
"MIT"
,
"engines"
:
{
...
...
@@ -14060,9 +14060,9 @@
}
},
"node_modules/uglify-js"
:
{
"version"
:
"3.19.
2
"
,
"resolved"
:
"https://packages.aliyun.com/646341b481b284e28f47a25b/npm/npm-registry/uglify-js/-/uglify-js-3.19.
2
.tgz"
,
"integrity"
:
"sha512-
S8KA6DDI47nQXJSi2ctQ629YzwOVs+bQML6DAtvy0wgNdpi+0ySpQK0g2pxBq2xfF2z3YCscu7NNA8nXT9PlI
Q=="
,
"version"
:
"3.19.
3
"
,
"resolved"
:
"https://packages.aliyun.com/646341b481b284e28f47a25b/npm/npm-registry/uglify-js/-/uglify-js-3.19.
3
.tgz"
,
"integrity"
:
"sha512-
v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTK
Q=="
,
"dev"
:
true
,
"license"
:
"BSD-2-Clause"
,
"optional"
:
true
,
...
...
src/functional/mvc/control/mUserAssets.control.ts
0 → 100644
View file @
92b86611
import
*
as
mUserAssetsService
from
"../service/mUserAssets.service"
;
import
{
QueryVO
}
from
"../service/mUserAssets.service"
;
let
{
logger
,
Res3Utils
,
optionalUtils
:
Optional
,
apiAssertUtils
:
ApiAssert
}
=
require
(
'@madex/ex-js-public'
);
import
{
ErrorCode
}
from
"../../../constant/errorCode"
;
/**
* 钱包账户资产详情
* @param req
* @param infoVO
*/
export
const
walletAssetDetail
=
async
(
req
:
any
,
queryVO
:
QueryVO
)
=>
{
let
func_name
=
"mUserAssetsCtrl.walletAssetDetail"
;
try
{
queryVO
.
page
=
Optional
.
opt
(
queryVO
,
'page'
,
1
);
queryVO
.
size
=
Optional
.
opt
(
queryVO
,
'size'
,
20
);
if
(
!
queryVO
.
user_id
){
throw
ErrorCode
.
PARAM_MISS
}
let
res
=
await
mUserAssetsService
.
walletAssetDetail
(
queryVO
.
user_id
,
Number
(
queryVO
.
page
),
Number
(
queryVO
.
size
));
return
Res3Utils
.
result
(
res
);
}
catch
(
e
)
{
logger
.
error
(
`
${
func_name
}
error:
${
e
}
`
);
return
Res3Utils
.
getErrorResult
(
e
);
}
};
/**
* 资产分布
* @param req
* @param infoVO
*/
export
const
assetDistribution
=
async
(
req
:
any
,
queryVO
:
QueryVO
)
=>
{
let
func_name
=
"mUserAssetsCtrl.assetDistribution"
;
try
{
if
(
!
queryVO
.
user_id
){
throw
ErrorCode
.
PARAM_MISS
}
let
res
=
await
mUserAssetsService
.
assetDistribution
(
queryVO
.
user_id
);
return
Res3Utils
.
result
(
res
);
}
catch
(
e
)
{
logger
.
error
(
`
${
func_name
}
error:
${
e
}
`
);
return
Res3Utils
.
getErrorResult
(
e
);
}
};
/**
* 交易账户资产详情
* @param req
* @param infoVO
*/
export
const
tradeAssetsDetail
=
async
(
req
:
any
,
queryVO
:
QueryVO
)
=>
{
let
func_name
=
"mUserAssetsCtrl.tradeAssetsDetail"
;
try
{
queryVO
.
page
=
Optional
.
opt
(
queryVO
,
'page'
,
1
);
queryVO
.
size
=
Optional
.
opt
(
queryVO
,
'size'
,
20
);
if
(
!
queryVO
.
user_id
){
throw
ErrorCode
.
PARAM_MISS
}
let
res
=
await
mUserAssetsService
.
tradeAssetsDetail
(
queryVO
.
user_id
,
Number
(
queryVO
.
page
),
Number
(
queryVO
.
size
));
return
Res3Utils
.
result
(
res
);
}
catch
(
e
)
{
logger
.
error
(
`
${
func_name
}
error:
${
e
}
`
);
return
Res3Utils
.
getErrorResult
(
e
);
}
};
src/functional/mvc/service/mUserAssets.service.ts
0 → 100644
View file @
92b86611
import
{
ormDB
,
mainUserAsset
}
from
"@madex/ex-ts-dao"
;
import
{
ErrorCode
}
from
"../../../constant/errorCode"
;
import
BigNumber
from
"bignumber.js"
;
import
{
any
}
from
"async"
;
let
_
=
require
(
'lodash'
);
let
{
logger
,
BigNumberUtils
}
=
require
(
'@madex/ex-js-public'
);
let
{
tickerUtils
}
=
require
(
'@madex/ex-js-common'
);
export
interface
QueryVO
{
user_id
?:
number
,
symbol
?:
string
|
any
;
page
?:
number
,
size
?:
number
}
export
async
function
walletAssetDetail
(
user_id
:
number
,
page
:
number
,
size
:
number
)
{
let
where
=
{
user_id
:
user_id
}
let
resList
=
await
mainUserAsset
.
prototype
.
findAndCount
({
where
:
where
,
limit
:
size
,
offset
:
(
page
-
1
)
*
size
,
order
:
[[
"id"
,
"desc"
]],
raw
:
true
});
return
resList
;
}
export
async
function
assetDistribution
(
user_id
:
number
)
{
let
res
=
{
total_asset_u
:
0
,
wallet_u
:
{
balance
:
0
,
holds
:
0
},
trade_u
:
{
balance
:
0
,
holds
:
0
}
};
let
[
walletAssetInfo
,
tradeAssetInfo
]
=
await
Promise
.
all
([
walletAsset2USDTByUid
(
user_id
),
tradeAsset2USDTByUid
(
user_id
)]);
res
.
wallet_u
.
balance
=
walletAssetInfo
.
balance_usdt
;
res
.
wallet_u
.
holds
=
walletAssetInfo
.
holds_usdt
;
res
.
trade_u
.
balance
=
tradeAssetInfo
.
balance_usdt
;
res
.
trade_u
.
holds
=
tradeAssetInfo
.
holds_usdt
;
res
.
total_asset_u
=
Number
(
new
BigNumber
(
String
(
walletAssetInfo
.
balance_usdt
)).
add
(
new
BigNumber
(
String
(
walletAssetInfo
.
holds_usdt
)))
.
add
(
new
BigNumber
(
String
(
tradeAssetInfo
.
balance_usdt
))).
add
(
new
BigNumber
(
String
(
tradeAssetInfo
.
holds_usdt
))).
toFixed
(
8
,
1
));
return
res
;
}
//TODO: 交易资产查询后续补齐 需要查询内存 叶总 提供接口查询
export
async
function
tradeAssetsDetail
(
user_id
:
number
,
page
:
number
,
size
:
number
)
{
let
resList
=
[];
return
resList
;
}
export
async
function
walletAssetByUids
(
uids
:
number
[])
{
try
{
if
(
!
uids
||
!
uids
.
length
)
{
throw
ErrorCode
.
PARAM_MISS
}
let
dbInfoList
=
await
mainUserAsset
.
prototype
.
findAll
({
where
:
{
user_id
:
{
[
ormDB
.
Op
.
in
]:
uids
}
}
});
return
dbInfoList
.
length
?
dbInfoList
:
[]
}
catch
(
e
)
{
logger
.
error
(
'walletAssetByUids.error:'
+
e
);
throw
e
;
}
}
export
async
function
walletAsset2USDTByUids
(
uids
:
number
[])
{
try
{
let
dbAssetList
=
await
walletAssetByUids
(
uids
);
let
usdtTickerMap
=
{};
let
uidAssetListMap
=
_
.
groupBy
(
dbAssetList
,
'user_id'
);
let
resMap
=
{};
for
(
let
uid
of
uids
)
{
let
assetList
=
uidAssetListMap
[
uid
];
let
totalBalanceUsdt
:
any
=
0
;
let
totalHoldsUsdt
:
any
=
0
;
if
(
assetList
&&
assetList
.
length
)
{
for
(
let
assetItem
of
assetList
)
{
let
symbol
=
assetItem
.
symbol
;
let
balance
=
assetItem
.
balance
;
let
holds
=
assetItem
.
holds
;
let
usdt
=
usdtTickerMap
[
symbol
]
?
usdtTickerMap
[
symbol
]
:
await
tickerUtils
.
rateCoin2USDT
(
symbol
);
//存一下 避免重复请求redis
usdtTickerMap
[
symbol
]
=
usdt
;
let
balanceUsdt
=
new
BigNumber
(
String
(
balance
)).
mul
(
new
BigNumber
(
String
(
usdt
))).
toFixed
(
8
,
1
);
let
holdsUsdt
=
new
BigNumber
(
String
(
holds
)).
mul
(
new
BigNumber
(
String
(
usdt
))).
toFixed
(
8
,
1
);
totalBalanceUsdt
=
new
BigNumber
(
String
(
balanceUsdt
)).
add
(
new
BigNumber
(
String
(
totalBalanceUsdt
))).
toFixed
(
8
,
1
);
totalHoldsUsdt
=
new
BigNumber
(
String
(
holdsUsdt
)).
add
(
new
BigNumber
(
String
(
totalHoldsUsdt
))).
toFixed
(
8
,
1
);
}
}
resMap
[
uid
]
=
{
balance_usdt
:
totalBalanceUsdt
,
holds_usdt
:
totalHoldsUsdt
,
}
}
return
resMap
;
}
catch
(
e
)
{
logger
.
error
(
'walletAsset2USDTByUids.error:'
+
e
);
throw
e
;
}
}
export
async
function
walletAssetByUid
(
user_id
:
number
)
{
try
{
if
(
!
user_id
)
{
throw
ErrorCode
.
PARAM_MISS
}
let
dbInfoList
=
await
mainUserAsset
.
prototype
.
findAll
({
where
:
{
user_id
:
user_id
}
});
return
dbInfoList
.
length
?
dbInfoList
:
[]
}
catch
(
e
)
{
logger
.
error
(
'walletAssetByUid.error:'
+
e
);
throw
e
;
}
}
export
async
function
walletAsset2USDTByUid
(
user_id
:
number
)
{
try
{
let
dbAssetList
=
await
walletAssetByUid
(
user_id
);
let
totalBalanceUsdt
:
any
=
0
;
let
totalHoldsUsdt
:
any
=
0
;
if
(
dbAssetList
&&
dbAssetList
.
length
)
{
for
(
let
assetItem
of
dbAssetList
)
{
let
symbol
=
assetItem
.
symbol
;
let
balance
=
assetItem
.
balance
;
let
holds
=
assetItem
.
holds
;
let
usdt
=
await
tickerUtils
.
rateCoin2USDT
(
symbol
);
let
balanceUsdt
=
new
BigNumber
(
String
(
balance
)).
mul
(
new
BigNumber
(
String
(
usdt
))).
toFixed
(
8
,
1
);
let
holdsUsdt
=
new
BigNumber
(
String
(
holds
)).
mul
(
new
BigNumber
(
String
(
usdt
))).
toFixed
(
8
,
1
);
totalBalanceUsdt
=
new
BigNumber
(
String
(
balanceUsdt
)).
add
(
new
BigNumber
(
String
(
totalBalanceUsdt
))).
toFixed
(
8
,
1
);
totalHoldsUsdt
=
new
BigNumber
(
String
(
holdsUsdt
)).
add
(
new
BigNumber
(
String
(
totalHoldsUsdt
))).
toFixed
(
8
,
1
);
}
}
return
{
balance_usdt
:
totalBalanceUsdt
,
holds_usdt
:
totalHoldsUsdt
,
};
}
catch
(
e
)
{
logger
.
error
(
'walletAsset2USDTByUid.error:'
+
e
);
throw
e
;
}
}
//TODO: 交易资产查询后续补齐 需要查询内存 叶总 提供接口查询
export
async
function
tradeAsset2USDTByUid
(
user_id
:
number
)
{
try
{
//TODO:
let
dbAssetList
=
await
tradeAssetByUid
(
user_id
);
let
totalBalanceUsdt
:
any
=
0
;
let
totalHoldsUsdt
:
any
=
0
;
if
(
dbAssetList
&&
dbAssetList
.
length
)
{
for
(
let
assetItem
of
dbAssetList
)
{
let
symbol
=
assetItem
.
symbol
;
let
balance
=
assetItem
.
balance
;
let
holds
=
assetItem
.
holds
;
let
usdt
=
await
tickerUtils
.
rateCoin2USDT
(
symbol
);
let
balanceUsdt
=
new
BigNumber
(
String
(
balance
)).
mul
(
new
BigNumber
(
String
(
usdt
))).
toFixed
(
8
,
1
);
let
holdsUsdt
=
new
BigNumber
(
String
(
holds
)).
mul
(
new
BigNumber
(
String
(
usdt
))).
toFixed
(
8
,
1
);
totalBalanceUsdt
=
new
BigNumber
(
String
(
balanceUsdt
)).
add
(
new
BigNumber
(
String
(
totalBalanceUsdt
))).
toFixed
(
8
,
1
);
totalHoldsUsdt
=
new
BigNumber
(
String
(
holdsUsdt
)).
add
(
new
BigNumber
(
String
(
totalHoldsUsdt
))).
toFixed
(
8
,
1
);
}
}
return
{
balance_usdt
:
totalBalanceUsdt
,
holds_usdt
:
totalHoldsUsdt
,
};
}
catch
(
e
)
{
logger
.
error
(
'tradeAsset2USDTByUid.error:'
+
e
);
throw
e
;
}
}
//TODO:需要查询内存 叶总 提供接口查询
export
async
function
tradeAssetByUid
(
user_id
:
number
)
{
try
{
let
res
:
any
;
return
res
;
}
catch
(
e
)
{
logger
.
error
(
'tradeAssetByUid.error:'
+
e
);
throw
e
;
}
}
//TODO:查叶总提供的接口
export
async
function
tradeAsset2USDTByUids
(
uids
:
number
[])
{
try
{
let
dbAssetList
=
await
tradeAssetByUids
(
uids
);
let
usdtTickerMap
=
{};
let
uidAssetListMap
=
_
.
groupBy
(
dbAssetList
,
'user_id'
);
let
resMap
=
{};
for
(
let
uid
of
uids
)
{
let
assetList
=
uidAssetListMap
[
uid
];
let
totalBalanceUsdt
:
any
=
0
;
let
totalHoldsUsdt
:
any
=
0
;
if
(
assetList
&&
assetList
.
length
)
{
for
(
let
assetItem
of
assetList
)
{
let
symbol
=
assetItem
.
symbol
;
let
balance
=
assetItem
.
balance
;
let
holds
=
assetItem
.
holds
;
let
usdt
=
usdtTickerMap
[
symbol
]
?
usdtTickerMap
[
symbol
]
:
await
tickerUtils
.
rateCoin2USDT
(
symbol
);
//存一下 避免重复请求redis
usdtTickerMap
[
symbol
]
=
usdt
;
let
balanceUsdt
=
new
BigNumber
(
String
(
balance
)).
mul
(
new
BigNumber
(
String
(
usdt
))).
toFixed
(
8
,
1
);
let
holdsUsdt
=
new
BigNumber
(
String
(
holds
)).
mul
(
new
BigNumber
(
String
(
usdt
))).
toFixed
(
8
,
1
);
totalBalanceUsdt
=
new
BigNumber
(
String
(
balanceUsdt
)).
add
(
new
BigNumber
(
String
(
totalBalanceUsdt
))).
toFixed
(
8
,
1
);
totalHoldsUsdt
=
new
BigNumber
(
String
(
holdsUsdt
)).
add
(
new
BigNumber
(
String
(
totalHoldsUsdt
))).
toFixed
(
8
,
1
);
}
}
resMap
[
uid
]
=
{
balance_usdt
:
totalBalanceUsdt
,
holds_usdt
:
totalHoldsUsdt
,
}
}
return
resMap
;
}
catch
(
e
)
{
logger
.
error
(
'tradeAsset2USDTByUids.error:'
+
e
);
throw
e
;
}
}
//TODO: 查叶总提供接口
export
async
function
tradeAssetByUids
(
uids
:
number
[])
{
try
{
if
(
!
uids
||
!
uids
.
length
)
{
throw
ErrorCode
.
PARAM_MISS
}
let
dbInfoList
=
[]
return
dbInfoList
.
length
?
dbInfoList
:
[]
}
catch
(
e
)
{
logger
.
error
(
'tradeAssetByUids.error:'
+
e
);
throw
e
;
}
}
src/functional/mvc/service/mUserManage.service.ts
View file @
92b86611
...
...
@@ -11,6 +11,8 @@ import { addOptLog, LogType } from "./userOptLog.service";
import
{
checkTotp
}
from
"../../../utils/aclUserUtils"
;
import
{
getFatherUserId
,
getUidsByFatherUid
}
from
"./mUserInfoSon.service"
;
import
{
recordMUserOperateLog
,
TYPE
}
from
"./mUserAccountOperateLog.service"
;
import
{
tradeAsset2USDTByUids
,
walletAsset2USDTByUids
}
from
"./mUserAssets.service"
;
import
BigNumber
from
"bignumber.js"
;
let
_
=
require
(
'lodash'
);
let
{
logger
,
datetimeUtils
}
=
require
(
'@madex/ex-js-public'
);
...
...
@@ -83,9 +85,15 @@ export async function userList(queryVO: QueryVO) {
let
profileMap
=
await
getProfileByUserIds
(
uids
);
//实名信息
let
realNameMap
=
await
getRealNameByUserIds
(
uids
);
//钱包余额
let
walletAssetMap
=
await
walletAsset2USDTByUids
(
uids
);
//交易账户余额
let
tradeAssetMap
=
await
tradeAsset2USDTByUids
(
uids
);
//替换rows的集合
let
infoList
:
any
=
[];
for
(
let
item
of
resList
.
rows
)
{
let
wallet_account_balance
=
new
BigNumber
(
String
(
walletAssetMap
[
item
.
user_id
].
balance_usdt
)).
add
(
new
BigNumber
(
String
(
walletAssetMap
[
item
.
user_id
].
holds_usdt
)));
let
trade_account_balance
=
new
BigNumber
(
String
(
tradeAssetMap
[
item
.
user_id
].
balance_usdt
)).
add
(
new
BigNumber
(
String
(
tradeAssetMap
[
item
.
user_id
].
holds_usdt
)));
let
oneProfile
=
profileMap
[
item
.
user_id
];
let
oneRealName
=
realNameMap
[
item
.
user_id
];
let
one
=
{
...
...
@@ -101,8 +109,8 @@ export async function userList(queryVO: QueryVO) {
assets_total
:
0
,
//TODO: 总资产
spot_order
:
0
,
//TODO: 现货订单数量
contract_order
:
0
,
//TODO: 永续合约订单数量
wallet_account_balance
:
0
,
//TODO:
钱包账户余额
trade_account_balance
:
0
,
//TODO: 交易账户余额
wallet_account_balance
:
wallet_account_balance
,
//
钱包账户余额
trade_account_balance
:
trade_account_balance
,
//TODO: 交易账户余额
kyc_status
:
oneRealName
?
oneRealName
.
status
:
0
,
//0未提交,1审核中,2审核不通过,3审核通过
kyc_type
:
oneRealName
?
oneRealName
.
type
:
0
,
//1身份证,2护照,3驾驶证
kyc_identity
:
oneRealName
?
oneRealName
.
identity
:
0
,
//证件号
...
...
src/functional/router/v1/index.ts
View file @
92b86611
...
...
@@ -26,6 +26,7 @@ import * as mUserRealNameCtrl from "../../mvc/control/mUserRealName.control";
import
*
as
usefulLinkCtrl
from
"../../mvc/control/usefulLink.control"
;
import
*
as
mUserSubscribeCtrl
from
"../../mvc/control/mUserSubscribe.control"
;
import
*
as
commonUserFeeSettingCtrl
from
"../../mvc/control/commonUserFeeSetting.control"
;
import
*
as
mUserAssetsCtrl
from
"../../mvc/control/mUserAssets.control"
;
const
getFunc
=
{
'user/info'
:
userController
.
getUserInfo
,
};
...
...
@@ -107,6 +108,9 @@ const postFunc = {
'mUser/manage/kyc/list'
:
mUserRealNameCtrl
.
kycList
,
//Madex 用户管理 ->实名认证列表
'mUser/manage/kyc/oneDetail'
:
mUserRealNameCtrl
.
oneDetail
,
//Madex 用户管理 ->kyc详情
'mUser/manage/kyc/audit'
:
mUserRealNameCtrl
.
audit
,
//Madex 用户管理 ->kyc审核
'mUser/manage/walletAsset/detail'
:
mUserAssetsCtrl
.
walletAssetDetail
,
//Madex 用户管理 ->钱包账户资产详情
'mUser/manage/asset/distribution'
:
mUserAssetsCtrl
.
assetDistribution
,
//Madex 用户管理 ->资产分布
'mUser/manage/tradeAsset/detail'
:
mUserAssetsCtrl
.
tradeAssetsDetail
,
//Madex 用户管理 ->交易账户资产详情
//资源位管理
'link/useful/list'
:
usefulLinkCtrl
.
list
,
//链接记录列表
...
...
src/setting/access-limit.ts
View file @
92b86611
...
...
@@ -82,6 +82,9 @@ let cmdWhiteList = {
'mUser/fee/setting/update'
:
1
,
'mUser/fee/setting/delete'
:
1
,
'mUser/fee/setting/submit'
:
1
,
'mUser/manage/walletAsset/detail'
:
1
,
'mUser/manage/asset/distribution'
:
1
,
'mUser/manage/tradeAsset/detail'
:
1
,
};
...
...
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