Files
dukang/server/dukang-api/src/modules/ops/admin-tickets.controller.ts
T
jacy 82c447b193 工单和发票
酒厂银行账户
2026-07-23 14:51:20 +08:00

113 lines
3.5 KiB
TypeScript

import { Body, Controller, Get, Param, Post, Query, UseGuards } from '@nestjs/common';
import { HqAuthGuard } from '../../common/guards/hq-auth.guard';
import { JwtAuthGuard, AuthUser } from '../../common/guards/jwt-auth.guard';
import { PartnerPermissionGuard } from '../../common/guards/partner-permission.guard';
import { RequirePartnerPermissions } from '../../common/decorators/partner-permission.decorator';
import { CurrentUser } from '../../common/decorators/current-user.decorator';
import { HqOperation } from '../../common/hq-operation/hq-operation.decorator';
import { HqOperationAction } from '../../common/hq-operation/hq-operation.constants';
import { AdminTicketsService } from './admin-tickets.service';
import { TicketListQueryDto } from '../common/dto/common-query.dto';
import { AdminCreateTicketDto } from '../common/dto/common-mutate.dto';
@Controller('admin/tickets')
@UseGuards(HqAuthGuard)
export class AdminTicketsController {
constructor(private readonly service: AdminTicketsService) {}
@Get()
list(@Query() query: TicketListQueryDto) {
return this.service.list(query);
}
@Post()
@HqOperation({
action: HqOperationAction.TICKET_CREATE,
refType: 'TICKET',
batch: true,
includeBody: true,
})
create(@Body() body: AdminCreateTicketDto) {
return this.service.createByHq(body);
}
@Get(':id')
detail(@Param('id') id: string) {
return this.service.detail(BigInt(id));
}
@Post(':id/approve')
@HqOperation({
action: HqOperationAction.TICKET_APPROVE,
refType: 'TICKET',
refIdParam: 'id',
includeBody: true,
})
approve(
@CurrentUser() user: AuthUser,
@Param('id') id: string,
@Body() body: { remark?: string },
) {
return this.service.approve(BigInt(id), body.remark, user.actorId.toString());
}
@Post(':id/reject')
@HqOperation({
action: HqOperationAction.TICKET_REJECT,
refType: 'TICKET',
refIdParam: 'id',
includeBody: true,
})
reject(@Param('id') id: string, @Body() body: { remark?: string }) {
return this.service.reject(BigInt(id), body.remark);
}
@Post(':id/complete-collab')
@HqOperation({
action: HqOperationAction.TICKET_APPROVE,
refType: 'TICKET',
refIdParam: 'id',
includeBody: true,
})
completeCollab(@CurrentUser() user: AuthUser, @Param('id') id: string) {
return this.service.completeCollabByHq(BigInt(id), user.actorId.toString());
}
}
@Controller('partner/tickets')
@UseGuards(JwtAuthGuard, PartnerPermissionGuard)
@RequirePartnerPermissions('warehouse:manage', 'order:view')
export class PartnerTicketsController {
constructor(private readonly service: AdminTicketsService) {}
@Get()
list(
@CurrentUser() user: AuthUser,
@Query('page') page?: string,
@Query('pageSize') pageSize?: string,
) {
return this.service.listPartnerTickets(
user.actorId,
page ? Number(page) : 1,
pageSize ? Number(pageSize) : 20,
);
}
@Get(':id')
detail(@CurrentUser() user: AuthUser, @Param('id') id: string) {
return this.service.getPartnerTicket(user.actorId, BigInt(id));
}
@Post(':id/confirm-pickup')
@RequirePartnerPermissions('warehouse:manage')
confirmPickup(@CurrentUser() user: AuthUser, @Param('id') id: string) {
return this.service.partnerConfirmPickup(user.actorId, BigInt(id));
}
@Post(':id/confirm-reship')
@RequirePartnerPermissions('warehouse:manage')
confirmReship(@CurrentUser() user: AuthUser, @Param('id') id: string) {
return this.service.partnerConfirmReship(user.actorId, BigInt(id));
}
}