弱网核销功能

This commit is contained in:
2026-07-12 12:00:55 +08:00
parent de01d36cdb
commit 06b1cb22e0
24 changed files with 1434 additions and 42 deletions
@@ -0,0 +1,52 @@
import { Body, Controller, Get, Param, Post, Query, UseGuards } from '@nestjs/common';
import { HqAuthGuard } from '../../common/guards/hq-auth.guard';
import { CurrentUser } from '../../common/decorators/current-user.decorator';
import type { AuthUser } from '../../common/guards/jwt-auth.guard';
import { HqOperation } from '../../common/hq-operation/hq-operation.decorator';
import { HqOperationAction } from '../../common/hq-operation/hq-operation.constants';
import { RedeemService } from '../redeem/redeem.service';
import {
AdminRedeemPendingQueryDto,
AdminRedeemPendingRejectDto,
} from './dto/admin-redeem-pending.dto';
@Controller('admin/redeem-pending')
@UseGuards(HqAuthGuard)
export class AdminRedeemPendingController {
constructor(private readonly redeemService: RedeemService) {}
@Get()
list(@Query() query: AdminRedeemPendingQueryDto) {
return this.redeemService.listPendingRedeems(query);
}
@Get(':id')
detail(@Param('id') id: string) {
return this.redeemService.getPendingRedeem(BigInt(id));
}
@Post(':id/complete')
@HqOperation({
action: HqOperationAction.REDEEM_PENDING_COMPLETE,
refType: 'REDEEM_PENDING',
refIdParam: 'id',
})
complete(@CurrentUser() user: AuthUser, @Param('id') id: string) {
return this.redeemService.completePendingRedeem(BigInt(id), user.actorId);
}
@Post(':id/reject')
@HqOperation({
action: HqOperationAction.REDEEM_PENDING_REJECT,
refType: 'REDEEM_PENDING',
refIdParam: 'id',
includeBody: true,
})
reject(
@CurrentUser() user: AuthUser,
@Param('id') id: string,
@Body() body: AdminRedeemPendingRejectDto,
) {
return this.redeemService.rejectPendingRedeem(BigInt(id), user.actorId, body.reason);
}
}
@@ -0,0 +1,26 @@
import { IsIn, IsOptional, IsString, MaxLength } from 'class-validator';
import { PaginationQueryDto } from './admin-query.dto';
export class AdminRedeemPendingQueryDto extends PaginationQueryDto {
@IsOptional()
@IsIn(['PENDING', 'COMPLETED', 'REJECTED'])
status?: 'PENDING' | 'COMPLETED' | 'REJECTED';
@IsOptional()
@IsString()
storeId?: string;
@IsOptional()
@IsString()
pendingNo?: string;
@IsOptional()
@IsString()
redeemToken?: string;
}
export class AdminRedeemPendingRejectDto {
@IsString()
@MaxLength(256)
reason: string;
}
@@ -44,6 +44,7 @@ import { AdminProductDetailTemplatesService } from './admin-product-detail-templ
import { RedeemModule } from '../redeem/redeem.module';
import { AdminRedeemDebugController } from './admin-redeem-debug.controller';
import { AdminRedeemDebugService } from './admin-redeem-debug.service';
import { AdminRedeemPendingController } from './admin-redeem-pending.controller';
import { AdminWechatBindingsController } from './admin-wechat-bindings.controller';
import { AdminWechatBindingsService } from './admin-wechat-bindings.service';
import { AdminHqPermissionsController } from './admin-hq-permissions.controller';
@@ -77,6 +78,7 @@ import { AdminHqPermissionsService } from './admin-hq-permissions.service';
AdminXiaofeixiaController,
AdminProductDetailTemplatesController,
AdminRedeemDebugController,
AdminRedeemPendingController,
AdminWechatBindingsController,
AdminHqPermissionsController,
],