Commit dfed33d2 authored by ml's avatar ml

增加接口、逻辑调整

parent 1b7af35b
import { addOptLog } from "../service/userOptLog.service";
let { logger, Res3Utils, optionalUtils: Optional, apiAssertUtils: ApiAssert, datetimeUtils } = require('@madex/ex-js-public');
import { ErrorCode } from "../../../constant/errorCode";
import { getCurrentUserId } from "../../../utils/aclUserUtils";
import { it } from "node:test";
let isIp = require('is-ip');
let { authCommon: AuthCommon, redisUtilsCommon: RedisClient, } = require('@madex/ex-js-common');
interface LimitTradeVO {
type?: number,//1U本位,2币本位
status?: number//1限制交易,2限制开仓,3取消限制交易,4取消限制开仓
user_id?: number
pair?: string
}
/**
* 金融部-其他管理-合约交易限制配置列表
* @param req
* @param infoVO
*/
export const list = async (req: any, limitTradeVO: LimitTradeVO) => {
let func_name = "contractLimitTrade.control.list";
try {
let redisKey = 'contractLimitTrade.list';
let cacheMap = await RedisClient.getSync(redisKey);
let list: any = [];
if (cacheMap) {
let keys = Object.keys(cacheMap);
for (let key of keys) {
let splitArr = key.split(".");
let item = {
type: splitArr[0] == "baseu" ? 1 : 2,
status: splitArr[2] == "trade" ? 1 : 2,
pair: splitArr[3],
user_id: splitArr[4],
}
list.push(item)
}
}
let status = limitTradeVO.status;
let pair = limitTradeVO.pair;
let userId = limitTradeVO.user_id;
if (pair) {
list = list.filter(item => item.pair == pair);
}
if (status) {
list = list.filter(item => item.status == status);
}
if (userId || userId === 0) {
list = list.filter(item => item.user_id == userId);
}
return Res3Utils.result(list);
}
catch (e) {
logger.error(`${func_name} error:${e}`);
return Res3Utils.getErrorResult(e);
}
};
/**
* 金融部-其他管理-合约交易限制配置
* @param req
* @param authConfigVO
*/
export const set = async (req: any, limitTradeVO: LimitTradeVO) => {
let func_name = "contractLimitTrade.control.set";
try {
let ip = isIp(req.ip) ? req.ip : '*.*.*.*';
let currentUserId = await getCurrentUserId(req.cookies.session_id);
//1U本位,2币本位
let type = Number(limitTradeVO.type);
//1限制交易,2限制开仓,3取消限制交易,4取消限制开仓
let status = Number(limitTradeVO.status);
let pair = String(limitTradeVO.pair);
let userId = Number(limitTradeVO.user_id);
await writeCacheData(type, status, pair, userId);
//管理后台操作日志
addOptLog(currentUserId, 0, '合约限制交易配置-设置', ip, JSON.stringify(limitTradeVO), '合约限制交易配置');
return Res3Utils.result("ok");
}
catch (e) {
logger.error(`${func_name} error:${e}`);
return Res3Utils.getErrorResult(e);
}
};
async function writeCacheData(type: number, status: number, pair: string, user_id: number) {
let redisKey = 'contractLimitTrade.list';
if (!type || !status) {
throw ErrorCode.PARAM_MISS
}
if (!user_id) {
user_id = 0
}
if (!pair) {
pair = "all";
}
let typeStr = type == 1 ? "baseu.limit" : "basecoin.limit";
let statusStr = status == 1 || status == 3 ? "trade" : "open";
let mapKey = `${typeStr}.${statusStr}.${pair}.${user_id}`;
let cacheMap = await RedisClient.getSync(redisKey);
if (status == 1 || status == 2) {
cacheMap = cacheMap ? cacheMap : {};
cacheMap[mapKey] = 1
}
else {
if (cacheMap) {
delete cacheMap[mapKey]
}
}
await RedisClient.writeSync(redisKey, cacheMap);
}
import * as contractMarketMakerService from "../service/contractMarketMaker.service";
import { MakerPairPageVO, MakerPairVO } from "../service/contractMarketMaker.service";
let { logger, Res3Utils, optionalUtils: Optional, apiAssertUtils: ApiAssert, datetimeUtils } = require('@madex/ex-js-public');
import { ErrorCode } from "../../../constant/errorCode";
import { getCurrentUserId } from "../../../utils/aclUserUtils";
let isIp = require('is-ip');
/**
* 金融部-其他管理-合约做市参数配置列表
* @param req
* @param infoVO
*/
export const list = async (req: any, pageVO: MakerPairPageVO) => {
let func_name = "contractMarketMaker.control.list";
try {
pageVO.page = Optional.opt(pageVO, 'page', 1);
pageVO.size = Optional.opt(pageVO, 'size', 20);
let res = await contractMarketMakerService.list(pageVO);
return Res3Utils.result(res);
}
catch (e) {
logger.error(`${func_name} error:${e}`);
return Res3Utils.getErrorResult(e);
}
};
/**
* 金融部-其他管理-合约做市参数配置-交易对
* @param req
* @param authConfigVO
*/
export const set = async (req: any, makerPairVO: MakerPairVO) => {
let func_name = "contractMarketMaker.control.set";
try {
let ip = isIp(req.ip) ? req.ip : '*.*.*.*';
let currentUserId = await getCurrentUserId(req.cookies.session_id);
if (!makerPairVO.pair || !makerPairVO.user_id) {
throw ErrorCode.PARAM_MISS
}
let res = await contractMarketMakerService.set(makerPairVO, currentUserId, ip);
return Res3Utils.result(res);
}
catch (e) {
logger.error(`${func_name} error:${e}`);
return Res3Utils.getErrorResult(e);
}
};
/**
* 金融部-其他管理-合约做市参数配置-做市参数配置
* @param req
* @param authConfigVO
*/
export const paramSet = async (req: any, makerPairVO: MakerPairVO) => {
let func_name = "contractMarketMaker.control.paramSet";
try {
let ip = isIp(req.ip) ? req.ip : '*.*.*.*';
let currentUserId = await getCurrentUserId(req.cookies.session_id);
if (!makerPairVO.pair || !makerPairVO.data) {
throw ErrorCode.PARAM_MISS
}
let res = await contractMarketMakerService.paramSet(makerPairVO.pair, makerPairVO.data, currentUserId, ip);
return Res3Utils.result(res);
}
catch (e) {
logger.error(`${func_name} error:${e}`);
return Res3Utils.getErrorResult(e);
}
};
/**
* 金融部-其他管理-合约做市参数配置-做市参数查询
* @param req
* @param authConfigVO
*/
export const paramGet = async (req: any, makerPairVO: MakerPairVO) => {
let func_name = "contractMarketMaker.control.paramGet";
try {
if (!makerPairVO.pair) {
throw ErrorCode.PARAM_MISS
}
let res = await contractMarketMakerService.paramGet(makerPairVO.pair);
return Res3Utils.result(res);
}
catch (e) {
logger.error(`${func_name} error:${e}`);
return Res3Utils.getErrorResult(e);
}
};
import * as spotMarketMakerService from "../service/spotMarketMaker.service";
import { MakerPairPageVO, MakerPairVO } from "../service/spotMarketMaker.service";
let { logger, Res3Utils, optionalUtils: Optional, apiAssertUtils: ApiAssert, datetimeUtils } = require('@madex/ex-js-public');
import { ErrorCode } from "../../../constant/errorCode";
import { getCurrentUserId } from "../../../utils/aclUserUtils";
let isIp = require('is-ip');
/**
* 金融部-其他管理-现货做市参数配置列表
* @param req
* @param infoVO
*/
export const list = async (req: any, pageVO: MakerPairPageVO) => {
let func_name = "spotMarketMaker.control.list";
try {
pageVO.page = Optional.opt(pageVO, 'page', 1);
pageVO.size = Optional.opt(pageVO, 'size', 20);
let res = await spotMarketMakerService.list(pageVO);
return Res3Utils.result(res);
}
catch (e) {
logger.error(`${func_name} error:${e}`);
return Res3Utils.getErrorResult(e);
}
};
/**
* 金融部-其他管理-现货做市参数配置-交易对
* @param req
* @param authConfigVO
*/
export const set = async (req: any, makerPairVO: MakerPairVO) => {
let func_name = "spotMarketMaker.control.set";
try {
let ip = isIp(req.ip) ? req.ip : '*.*.*.*';
let currentUserId = await getCurrentUserId(req.cookies.session_id);
if (!makerPairVO.pair || !makerPairVO.user_id) {
throw ErrorCode.PARAM_MISS
}
let res = await spotMarketMakerService.set(makerPairVO, currentUserId, ip);
return Res3Utils.result(res);
}
catch (e) {
logger.error(`${func_name} error:${e}`);
return Res3Utils.getErrorResult(e);
}
};
/**
* 金融部-其他管理-现货做市参数配置-做市参数配置
* @param req
* @param authConfigVO
*/
export const paramSet = async (req: any, makerPairVO: MakerPairVO) => {
let func_name = "spotMarketMaker.control.paramSet";
try {
let ip = isIp(req.ip) ? req.ip : '*.*.*.*';
let currentUserId = await getCurrentUserId(req.cookies.session_id);
if (!makerPairVO.pair || !makerPairVO.data) {
throw ErrorCode.PARAM_MISS
}
let res = await spotMarketMakerService.paramSet(makerPairVO.pair, makerPairVO.data, currentUserId, ip);
return Res3Utils.result(res);
}
catch (e) {
logger.error(`${func_name} error:${e}`);
return Res3Utils.getErrorResult(e);
}
};
/**
* 金融部-其他管理-现货做市参数配置-做市参数查询
* @param req
* @param authConfigVO
*/
export const paramGet = async (req: any, makerPairVO: MakerPairVO) => {
let func_name = "spotMarketMaker.control.paramGet";
try {
if (!makerPairVO.pair) {
throw ErrorCode.PARAM_MISS
}
let res = await spotMarketMakerService.paramGet(makerPairVO.pair);
return Res3Utils.result(res);
}
catch (e) {
logger.error(`${func_name} error:${e}`);
return Res3Utils.getErrorResult(e);
}
};
......@@ -14,7 +14,6 @@ export const resetTotp = async (req: any, authConfigVO: AuthConfigVO) => {
let func_name = "userAuthConfigCtrl.resetTotp";
let cmd = req.path;
try {
ApiAssert.notNull(ErrorCode.PARAM_MISS, authConfigVO.user_id);
let res = await userAuthConfigService.resetTotp(authConfigVO.user_id);
return Res3Utils.result(res);
}
......
......@@ -165,7 +165,7 @@ export const saveAuth = async (aclAuthVO: AclAuthVO, session_id: any) => {
}
else {
await _checkUrl(aclAuthVO.url);
if (!aclAuthVO.opt_type){
if (!aclAuthVO.opt_type) {
aclAuthVO.opt_type = 4;
}
aclAuth.prototype.create(aclAuthVO);
......@@ -329,7 +329,7 @@ export const delRole = async (id: number | any, currentUserId: number) => {
throw ErrorCode.ROLE_NOT_EXIST
}
let isSuperUser = await _isSuper(currentUserId);
if (isSuperUser || Number(exist.creator) === Number(currentUserId)) {
if (!isSuperUser) {
throw ErrorCode.NO_PERMISSION
}
let roleUser = await aclUserRole.prototype.find({
......
import { userApikeyStrict, } from "@madex/ex-ts-dao";
import { ErrorCode } from "../../../constant/errorCode";
import { addOptLog } from "./userOptLog.service";
let _ = require('lodash');
let { logger } = require('@madex/ex-js-public');
let { authCommon: AuthCommon, redisUtilsCommon: RedisClient, } = require('@madex/ex-js-common');
export interface MakerPairVO {
id?: number,
pair?: string;
user_id?: number;
enable?: number;
data?: string
createdAt?: Date | any,
updatedAt?: Date | any,
}
export interface MakerPairPageVO extends MakerPairVO {
page?: number,
size?: number,
}
export async function list(pageVO: MakerPairPageVO) {
let key = 'contractMarketMaker.service.list';
//TODO:目前在缓存里 方便调试 后期撮合搞定之后再修改
let list = await RedisClient.getSync(key);
let res = {
count: list ? list.length : 0,
rows: list ? list : []
}
return res;
}
export async function set(makerPairVO: MakerPairVO, currentUserId: any, ip: string | undefined) {
//TODO:目前在缓存里 方便调试 后期撮合搞定之后再修改
makerPairVO.createdAt = new Date();
makerPairVO.updatedAt = new Date();
let key = 'contractMarketMaker.service.list';
let list = await RedisClient.getSync(key);
if (list) {
makerPairVO.id = list.length + 1;
list.push(makerPairVO);
}
else {
makerPairVO.id = 1;
list = [];
list.push(makerPairVO);
}
await RedisClient.writeSync(key, list);
//管理后台操作日志
addOptLog(currentUserId, 0, '合约做市参数配置-交易对新增', ip, JSON.stringify(makerPairVO), '合约做市参数配置');
return 'success';
}
export async function paramGet(pair: string) {
//TODO:目前在缓存里 方便调试 后期撮合搞定之后再修改
let key = 'contractMarketMaker.service.paramGet';
let map = await RedisClient.getSync(key);
let res = map ? map[pair] : ""
return res;
}
export async function paramSet(pair: string, data_json: string, currentUserId: any, ip: any) {
//TODO:目前在缓存里 方便调试 后期撮合搞定之后再修改
let key = 'contractMarketMaker.service.paramGet';
let map = await RedisClient.getSync(key);
if (!map) {
map = {}
}
map[pair] = JSON.parse(data_json);
await RedisClient.writeSync(key, map);
//管理后台操作日志
addOptLog(currentUserId, 0, '合约做市参数配置-做市参数设置', ip, `pair:${pair},data:${data_json}`, '合约做市参数配置');
return "ok";
}
import { userApikeyStrict, } from "@madex/ex-ts-dao";
import { ErrorCode } from "../../../constant/errorCode";
import { addOptLog } from "./userOptLog.service";
let _ = require('lodash');
let { logger } = require('@madex/ex-js-public');
let { authCommon: AuthCommon, redisUtilsCommon: RedisClient, } = require('@madex/ex-js-common');
export interface MakerPairVO {
id?: number,
pair?: string;
user_id?: number;
enable?: number;
data?: string
createdAt?: Date | any,
updatedAt?: Date | any,
}
export interface MakerPairPageVO extends MakerPairVO {
page?: number,
size?: number,
}
export async function list(pageVO: MakerPairPageVO) {
let key = 'spotMarketMaker.service.list';
//TODO:目前在缓存里 方便调试 后期撮合搞定之后再修改
let list = await RedisClient.getSync(key);
let res = {
count: list ? list.length : 0,
rows: list ? list : []
}
return res;
}
export async function set(makerPairVO: MakerPairVO, currentUserId: any, ip: string | undefined) {
//TODO:目前在缓存里 方便调试 后期撮合搞定之后再修改
makerPairVO.createdAt = new Date();
makerPairVO.updatedAt = new Date();
let key = 'spotMarketMaker.service.list';
let list = await RedisClient.getSync(key);
if (list) {
makerPairVO.id = list.length + 1;
list.push(makerPairVO);
}
else {
makerPairVO.id = 1;
list = [];
list.push(makerPairVO);
}
await RedisClient.writeSync(key, list);
//管理后台操作日志
addOptLog(currentUserId, 0, '现货做市参数配置-交易对新增', ip, JSON.stringify(makerPairVO), '现货做市参数配置');
return 'success';
}
export async function paramGet(pair: string) {
//TODO:目前在缓存里 方便调试 后期撮合搞定之后再修改
let key = 'spotMarketMaker.service.paramGet';
let map = await RedisClient.getSync(key);
let res = map ? map[pair] : ""
return res;
}
export async function paramSet(pair: string, data: string, currentUserId: any, ip: any) {
//TODO:目前在缓存里 方便调试 后期撮合搞定之后再修改
let key = 'spotMarketMaker.service.paramGet';
let map = await RedisClient.getSync(key);
if (!map) {
map = {}
}
map[pair] = JSON.parse(data);
await RedisClient.writeSync(key, map);
//管理后台操作日志
addOptLog(currentUserId, 0, '现货做市参数配置-做市参数设置', ip, `pair:${pair},data:${data}`, '现货做市参数配置');
return "ok";
}
......@@ -44,12 +44,13 @@ export interface AuthConfigPageVO extends AuthConfigVO {
export async function resetTotp(userId: number | undefined) {
let userInfo = await getOneAclUserByUid(Number(userId));
ApiAssert.isNotEmpty(ErrorCode.USER_NOT_EXIST, userInfo);
if (userId) {
let userInfo = await getOneAclUserByUid(Number(userId));
ApiAssert.isNotEmpty(ErrorCode.USER_NOT_EXIST, userInfo);
}
//生成新的密钥
let totpEncrypt = Otplib.authenticator.generateSecret();
let email = userId + '-' + totpEncrypt.slice(0, 3)
let email = userId ? userId : 0 + '-' + totpEncrypt.slice(0, 3)
let uri = 'otpauth://totp/' + email + '?secret=' + totpEncrypt + '&issuer=team888';
return { uri: uri, totpEncrypt: totpEncrypt };
}
......
......@@ -37,6 +37,9 @@ import * as appFeatureCtrl from "../../mvc/control/appFeature.control";
import * as systemTriggerCtrl from "../../mvc/control/systemTrigger.control";
import * as apikeyStrictCtrl from "../../mvc/control/apikeyStrict.control";
import * as contractPairCtrl from "../../mvc/control/contractPair.control";
import * as spotMarketMakerCtrl from "../../mvc/control/spotMarketMaker.control";
import * as contractMarketMakerCtrl from "../../mvc/control/contractMarketMaker.control";
import * as contractLimitTradeCtrl from "../../mvc/control/contractLimitTrade.control";
const getFunc = {
'user/info': userController.getUserInfo,
......@@ -190,7 +193,20 @@ const postFunc = {
//金融部-交易管理-合约代码配置
'finance/trade/contract/pair/set': contractPairCtrl.set,
'finance/trade/contract/pair/update': contractPairCtrl.update,
'finance/trade/contract/pair/query': contractPairCtrl.query
'finance/trade/contract/pair/query': contractPairCtrl.query,
//金融部-其他管理-现货做市参数配置
'fiance/other/spot/market/maker/set': spotMarketMakerCtrl.set,
'fiance/other/spot/market/maker/list': spotMarketMakerCtrl.list,
'fiance/other/spot/market/maker/param/get': spotMarketMakerCtrl.paramGet,
'fiance/other/spot/market/maker/param/set': spotMarketMakerCtrl.paramSet,
//金融部-其他管理-合约做市参数配置
'fiance/other/contract/market/maker/set': contractMarketMakerCtrl.set,
'fiance/other/contract/market/maker/list': contractMarketMakerCtrl.list,
'fiance/other/contract/market/maker/param/get': contractMarketMakerCtrl.paramGet,
'fiance/other/contract/market/maker/param/set': contractMarketMakerCtrl.paramSet,
//金融部-其他管理-合约限制交易配置
'fiance/other/contract/limit/trade/set': contractLimitTradeCtrl.set,
'fiance/other/contract/limit/trade/list': contractLimitTradeCtrl.list,
};
// TODO 这里先和 nodejs 的注册路由方式保持一样,后面在调整。
......
......@@ -147,6 +147,19 @@ let cmdWhiteList = {
'finance/trade/contract/pair/set': 1,
'finance/trade/contract/pair/update': 1,
'finance/trade/contract/pair/query': 1,
//金融部-其他管理-现货做市参数配置
'fiance/other/spot/market/maker/set': 1,
'fiance/other/spot/market/maker/list': 1,
'fiance/other/spot/market/maker/param/get': 1,
'fiance/other/spot/market/maker/param/set': 1,
//金融部-其他管理-合约做市参数配置
'fiance/other/contract/market/maker/set': 1,
'fiance/other/contract/market/maker/list': 1,
'fiance/other/contract/market/maker/param/get': 1,
'fiance/other/contract/market/maker/param/set': 1,
//金融部-其他管理-合约限制交易配置
'fiance/other/contract/limit/trade/set': 1,
'fiance/other/contract/limit/trade/list': 1,
};
......
......@@ -16,6 +16,9 @@ const ExcludeApi = {
"user/login/confirm": 1,
"mUser/fee/vip/level/list": 1,
"spotPair/getAllSubmitSuccess": 1,
'acl/role/getAll': 1,
'position/allList': 1,
'department/allList': 1,
};
//管理员需要强制绑定,该位置做特殊处理
const AdminExcludeApi = {
......
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