feat(ops): WeCom webhook alerts for pay/redeem anomalies

Add outbound group-bot alerts, rate/amount rules, stuck-order cron, HQ test button, and health db/redis checks.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-08-02 16:01:30 +08:00
parent cb6ecaaba6
commit 3328c52cb4
27 changed files with 1036 additions and 103 deletions
@@ -1,4 +1,4 @@
import { Body, Controller, Get, Post, Put, UseGuards } from '@nestjs/common';
import { BadRequestException, Body, Controller, Get, Post, Put, UseGuards } from '@nestjs/common';
import type { SystemConfigUpdateRequest } from '@dukang/shared-types';
import {
SYSTEM_CONFIG_GROUP_PERMISSION,
@@ -18,6 +18,7 @@ import { HqOperation } from '../../common/hq-operation/hq-operation.decorator';
import { HqOperationAction } from '../../common/hq-operation/hq-operation.constants';
import { SystemConfigService } from '../../common/system-config/system-config.service';
import { WecomAibotService } from '../../integrations/wecom/wecom-aibot.service';
import { AlertService } from '../../common/alert/alert.service';
@Controller('admin/system-config')
@UseGuards(HqAuthGuard, HqPermissionGuard)
@@ -26,6 +27,7 @@ export class AdminSystemConfigController {
private readonly systemConfig: SystemConfigService,
private readonly permissions: HqPermissionsResolver,
private readonly wecomAibot: WecomAibotService,
private readonly alert: AlertService,
) {}
@Get()
@@ -77,6 +79,22 @@ export class AdminSystemConfigController {
importEnv() {
return this.systemConfig.importFromProcessEnv();
}
/** 向企微群机器人发送一条测试告警 */
@Post('wecom-alert/test')
@RequireAnySystemSettings()
@HqOperation({
action: HqOperationAction.WECOM_ALERT_TEST,
refType: 'SYSTEM_CONFIG',
batch: true,
})
async testWecomAlert() {
const result = await this.alert.sendTestAlert();
if (!result.ok) {
throw new BadRequestException(result.message);
}
return result;
}
}
function allowedConfigGroups(permissionKeys: HqPermissionKey[]): string[] | null {