# Research: Table QR Code ## 1. QR Code Generation Library **Decision**: Google ZXing 3.5.2 **Rationale**: - Java 生态最成熟的二维码库 - 项目基于 Spring Boot,ZXing 有良好的集成支持 - 支持自定义二维码尺寸、颜色、logo - 轻量级,无需外部服务 **Alternatives considered**: - QR Server API(外部服务,依赖网络,不适合生产环境) - Apache PDFBox(主要处理 PDF,二维码支持弱) - 前端生成(增加前端复杂度,且二维码需要后端持久化) ## 2. QR Code Content Format **Decision**: 使用 URL 格式 `{baseUrl}/scan?type={type}&storeId={storeId}&tableId={tableId}` **Rationale**: - 通用二维码扫描器都能直接识别 URL 并跳转 - 参数清晰,易于调试 - 前端可以根据参数直接路由到对应页面 **Alternatives considered**: - JSON 格式(需要专用扫码器,通用性差) - 短链 + 服务端映射(增加复杂度,需要额外的映射表) ## 3. QR Code Storage **Decision**: 后端动态生成,不存储图片文件。qr_code 字段存储二维码文本内容(URL),图片在请求时动态生成。 **Rationale**: - 减少文件存储依赖 - 二维码内容可能随 baseUrl 变化,动态生成更灵活 - 二维码生成速度快(<10ms),无需缓存 **Alternatives considered**: - 生成图片存文件系统(增加文件管理复杂度) - 生成图片存 OSS(需要 OSS 配置,过度设计) ## 4. Permission Model **Decision**: 在 Service 层通过 user_type 判断权限,Controller 层通过 JwtUtil 获取用户信息。 **Rationale**: - 遵循现有项目模式(StallController 使用相同方式) - user_type 已有明确定义:3=夜市用户, 4=摊主 - 无需引入新的权限框架 **Alternatives considered**: - Spring Security 注解(项目未使用此模式) - 自定义注解鉴权(增加复杂度,现有模式已足够) ## 5. Frontend QR Code Display **Decision**: 后端返回二维码图片的 Base64 编码,前端直接在 img 标签中展示。 **Rationale**: - 无需文件上传/下载流程 - 前端展示简单直接 - 支持下载功能(通过 a 标签 download 属性) **Alternatives considered**: - 返回图片 URL(需要文件存储) - 前端自己生成二维码(需要额外依赖,且参数来自后端) ## 6. Night Market ID 获取方式 **Decision**: 摊主的 night_market_id 从关联的 PosStore 记录获取;夜市管理员的 night_market_id 从 InfoUser 表获取。 **Rationale**: - PosStore 表已有 night_market_id 字段 - InfoUser 表中夜市用户(type=3)的地址信息关联夜市 - 遵循现有数据关系 ## 7. Entity Pattern **Decision**: 遵循 PosStore 的实体模式,使用 MyBatis Plus 注解(@TableName, @TableId)+ Lombok(@Data)。 **Rationale**: 项目所有实体都遵循此模式,保持一致性。