mirror of
https://github.com/discountry/ritmex-bot.git
synced 2026-09-11 17:28:08 +00:00
fix: 更新 AsterRestClient 和 AsterGateway 中的订单处理逻辑,支持字符串类型的订单 ID
This commit is contained in:
@@ -278,8 +278,14 @@ export class AsterRestClient {
|
|||||||
|
|
||||||
async cancelOrders(params: { symbol: string; orderIdList?: Array<number | string>; origClientOrderIdList?: string[] }): Promise<AsterOrder[]> {
|
async cancelOrders(params: { symbol: string; orderIdList?: Array<number | string>; origClientOrderIdList?: string[] }): Promise<AsterOrder[]> {
|
||||||
const payload: Record<string, unknown> = { symbol: params.symbol };
|
const payload: Record<string, unknown> = { symbol: params.symbol };
|
||||||
if (params.orderIdList) payload.orderIdList = JSON.stringify(params.orderIdList.map((id) => Number(id)));
|
if (params.orderIdList?.length) {
|
||||||
if (params.origClientOrderIdList) payload.origClientOrderIdList = JSON.stringify(params.origClientOrderIdList);
|
payload.orderIdList = `[${params.orderIdList
|
||||||
|
.map((id) => (typeof id === "string" ? id.trim() : String(id)))
|
||||||
|
.join(",")}]`;
|
||||||
|
}
|
||||||
|
if (params.origClientOrderIdList?.length) {
|
||||||
|
payload.origClientOrderIdList = JSON.stringify(params.origClientOrderIdList);
|
||||||
|
}
|
||||||
const response = await this.signedRequest<any[]>({ path: "/fapi/v1/batchOrders", method: "DELETE", params: payload });
|
const response = await this.signedRequest<any[]>({ path: "/fapi/v1/batchOrders", method: "DELETE", params: payload });
|
||||||
return response.map(toOrderFromRest);
|
return response.map(toOrderFromRest);
|
||||||
}
|
}
|
||||||
@@ -706,13 +712,15 @@ function updateAccountSnapshot(snapshot: AsterAccountSnapshot | null, event: { e
|
|||||||
return next;
|
return next;
|
||||||
}
|
}
|
||||||
|
|
||||||
function mergeOrderSnapshot(map: Map<number, AsterOrder>, order: AsterOrder): void {
|
function mergeOrderSnapshot(map: Map<string, AsterOrder>, order: AsterOrder): void {
|
||||||
const numericId = typeof order.orderId === "number" ? order.orderId : Number(order.orderId);
|
const rawId = order.orderId;
|
||||||
if (!Number.isFinite(numericId)) return;
|
if (rawId === undefined || rawId === null) return;
|
||||||
|
const key = String(rawId);
|
||||||
|
if (!key) return;
|
||||||
if (FINAL_ORDER_STATUSES.has(order.status)) {
|
if (FINAL_ORDER_STATUSES.has(order.status)) {
|
||||||
map.delete(numericId);
|
map.delete(key);
|
||||||
} else {
|
} else {
|
||||||
map.set(numericId, { ...order, orderId: numericId });
|
map.set(key, { ...order, orderId: key });
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -722,7 +730,7 @@ export class AsterGateway {
|
|||||||
private readonly userStream: AsterUserStream;
|
private readonly userStream: AsterUserStream;
|
||||||
|
|
||||||
private accountSnapshot: AsterAccountSnapshot | null = null;
|
private accountSnapshot: AsterAccountSnapshot | null = null;
|
||||||
private readonly openOrders = new Map<number, AsterOrder>();
|
private readonly openOrders = new Map<string, AsterOrder>();
|
||||||
private positionSyncTimer: ReturnType<typeof setInterval> | null = null;
|
private positionSyncTimer: ReturnType<typeof setInterval> | null = null;
|
||||||
private positionSyncInFlight = false;
|
private positionSyncInFlight = false;
|
||||||
|
|
||||||
@@ -1003,12 +1011,9 @@ export class AsterGateway {
|
|||||||
|
|
||||||
async cancelAllOrders(params: { symbol: string }): Promise<void> {
|
async cancelAllOrders(params: { symbol: string }): Promise<void> {
|
||||||
await this.rest.cancelAllOrders(params);
|
await this.rest.cancelAllOrders(params);
|
||||||
for (const order of Array.from(this.openOrders.values())) {
|
for (const [key, order] of Array.from(this.openOrders.entries())) {
|
||||||
if (order.symbol === params.symbol) {
|
if (order.symbol === params.symbol) {
|
||||||
const numericId = typeof order.orderId === "number" ? order.orderId : Number(order.orderId);
|
this.openOrders.delete(key);
|
||||||
if (Number.isFinite(numericId)) {
|
|
||||||
this.openOrders.delete(numericId);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
this.ordersEvent.emit(Array.from(this.openOrders.values()));
|
this.ordersEvent.emit(Array.from(this.openOrders.values()));
|
||||||
|
|||||||
Reference in New Issue
Block a user