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
Commit
92b86611
authored
Sep 02, 2024
by
ml
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
增加 资产部分接口
parent
fef64a78
Hide 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