feat(admin,api,player): smart score solver, disable settlement UI, misc fixes

This commit is contained in:
2026-06-04 17:56:32 +08:00
parent 9fcee31a9a
commit 6264b8806c
12 changed files with 356 additions and 16 deletions

View File

@@ -354,7 +354,10 @@ export class MatchesService {
const matchStats = await this.betStatsForMatches(
leagueMatches.map((m) => m.id),
);
const leagueBetRollup = new Map<string, MatchBetStatsSummary>();
const leagueBetRollup = new Map<
string,
{ betCount: number; totalStake: Decimal; pendingCount: number }
>();
for (const lm of leagueMatches) {
const lid = lm.leagueId.toString();
const cur = leagueBetRollup.get(lid) ?? {
@@ -365,7 +368,7 @@ export class MatchesService {
const ms = matchStats.get(lm.id.toString());
if (ms) {
cur.betCount += ms.betCount;
cur.totalStake = cur.totalStake.add(ms.totalStake);
cur.totalStake = cur.totalStake.add(new Decimal(ms.totalStake));
cur.pendingCount += ms.pendingCount;
}
leagueBetRollup.set(lid, cur);
@@ -417,7 +420,7 @@ export class MatchesService {
]);
const raw = betStatsMap.get(m.id.toString());
const betCount = raw?.betCount ?? 0;
const totalStake = raw?.totalStake.toString() ?? '0';
const totalStake = raw?.totalStake ?? '0';
const pendingBets = raw?.pendingCount ?? 0;
return {
id: m.id.toString(),
@@ -442,11 +445,8 @@ export class MatchesService {
/** 批量汇总多场关联注单(按 bet 去重计注单数) */
async betStatsForMatches(
matchIds: bigint[],
): Promise<Map<string, MatchBetStatsSummary & { totalStake: Decimal }>> {
const result = new Map<
string,
MatchBetStatsSummary & { totalStake: Decimal }
>();
): Promise<Map<string, MatchBetStatsSummary>> {
const result = new Map<string, MatchBetStatsSummary>();
if (!matchIds.length) return result;
const legs = await this.prisma.betSelection.findMany({
@@ -481,7 +481,7 @@ export class MatchesService {
if (!bets) {
result.set(mid, {
betCount: 0,
totalStake: new Decimal(0),
totalStake: '0',
pendingCount: 0,
});
continue;
@@ -494,7 +494,7 @@ export class MatchesService {
}
result.set(mid, {
betCount: bets.size,
totalStake,
totalStake: totalStake.toString(),
pendingCount,
});
}