import { Controller, Get, Post, Put, Delete, Body, Param, Query, UseGuards, Req, ParseIntPipe, } from '@nestjs/common'; import { ApiTags, ApiOperation, ApiResponse, ApiParam } from '@nestjs/swagger'; import type { Request } from 'express'; import { JwtAuthGuard } from '../../../auth/guards/JwtAuthGuard'; import { RolesGuard } from '../../../auth/guards/RolesGuard'; import { Roles } from '../../../auth/decorators/RolesDecorator'; import { PrinterService } from '../../services/admin/PrinterService'; interface AuthenticatedRequest extends Request { user?: { uid: number; username: string; siteId: number; userType: string; }; } /** * 打印机管理控制器 - 管理端 * 路由前缀: /adminapi/sys/printer */ @ApiTags('打印机管理') @Controller('adminapi/sys/printer') @UseGuards(JwtAuthGuard, RolesGuard) @Roles('admin') export class PrinterController { constructor(private readonly printerService: PrinterService) {} @Get('page') @ApiOperation({ summary: '获取打印机分页列表' }) @ApiResponse({ status: 200, description: '获取成功' }) async getPage(@Query() query: any, @Req() req: AuthenticatedRequest) { const siteId = req.user?.siteId || 0; const result = await this.printerService.getPage(siteId, query); return { code: 200, message: '获取成功', data: result }; } @Get('list') @ApiOperation({ summary: '获取打印机列表' }) @ApiResponse({ status: 200, description: '获取成功' }) async getList(@Query() query: any, @Req() req: AuthenticatedRequest) { const siteId = req.user?.siteId || 0; const result = await this.printerService.getList(siteId, query); return { code: 200, message: '获取成功', data: result }; } @Get('brands') @ApiOperation({ summary: '获取打印机品牌列表' }) @ApiResponse({ status: 200, description: '获取成功' }) async getBrandList() { const result = this.printerService.getBrandList(); return { code: 200, message: '获取成功', data: result }; } @Get(':printerId') @ApiOperation({ summary: '获取打印机详情' }) @ApiParam({ name: 'printerId', description: '打印机ID' }) @ApiResponse({ status: 200, description: '获取成功' }) async getInfo( @Param('printerId', ParseIntPipe) printerId: number, @Req() req: AuthenticatedRequest, ) { const siteId = req.user?.siteId || 0; const result = await this.printerService.getInfo(siteId, printerId); return { code: 200, message: '获取成功', data: result }; } @Post() @ApiOperation({ summary: '新增打印机' }) @ApiResponse({ status: 200, description: '创建成功' }) async add(@Body() data: any, @Req() req: AuthenticatedRequest) { try { const siteId = req.user?.siteId || 0; const result = await this.printerService.add(siteId, data); return { code: 200, message: '创建成功', data: result }; } catch (error) { return { code: 400, message: error.message || '创建失败', data: null }; } } @Put(':printerId') @ApiOperation({ summary: '编辑打印机' }) @ApiParam({ name: 'printerId', description: '打印机ID' }) @ApiResponse({ status: 200, description: '更新成功' }) async edit( @Param('printerId', ParseIntPipe) printerId: number, @Body() data: any, @Req() req: AuthenticatedRequest, ) { try { const siteId = req.user?.siteId || 0; const result = await this.printerService.edit(siteId, printerId, data); return { code: 200, message: '更新成功', data: result }; } catch (error) { return { code: 400, message: error.message || '更新失败', data: null }; } } @Put(':printerId/status') @ApiOperation({ summary: '修改打印机状态' }) @ApiParam({ name: 'printerId', description: '打印机ID' }) @ApiResponse({ status: 200, description: '修改成功' }) async modifyStatus( @Param('printerId', ParseIntPipe) printerId: number, @Body() data: { status: number }, @Req() req: AuthenticatedRequest, ) { try { const siteId = req.user?.siteId || 0; const result = await this.printerService.modifyStatus( siteId, printerId, data.status, ); return { code: 200, message: '修改成功', data: result }; } catch (error) { return { code: 400, message: error.message || '修改失败', data: null }; } } @Post(':printerId/test') @ApiOperation({ summary: '测试打印机连接' }) @ApiParam({ name: 'printerId', description: '打印机ID' }) @ApiResponse({ status: 200, description: '测试完成' }) async testConnection( @Param('printerId', ParseIntPipe) printerId: number, @Req() req: AuthenticatedRequest, ) { try { const siteId = req.user?.siteId || 0; const result = await this.printerService.testConnection( siteId, printerId, ); return { code: 200, message: '测试完成', data: result }; } catch (error) { return { code: 400, message: error.message || '测试失败', data: null }; } } @Post(':printerId/print') @ApiOperation({ summary: '打印内容' }) @ApiParam({ name: 'printerId', description: '打印机ID' }) @ApiResponse({ status: 200, description: '打印完成' }) async print( @Param('printerId', ParseIntPipe) printerId: number, @Body() data: { content: string }, @Req() req: AuthenticatedRequest, ) { try { const siteId = req.user?.siteId || 0; const result = await this.printerService.print( siteId, printerId, data.content, ); return { code: 200, message: '打印完成', data: result }; } catch (error) { return { code: 400, message: error.message || '打印失败', data: null }; } } @Delete(':printerId') @ApiOperation({ summary: '删除打印机' }) @ApiParam({ name: 'printerId', description: '打印机ID' }) @ApiResponse({ status: 200, description: '删除成功' }) async delete( @Param('printerId', ParseIntPipe) printerId: number, @Req() req: AuthenticatedRequest, ) { try { const siteId = req.user?.siteId || 0; const result = await this.printerService.del(siteId, printerId); return { code: 200, message: '删除成功', data: result }; } catch (error) { return { code: 400, message: error.message || '删除失败', data: null }; } } }