# 车辆档案打印功能开发规范 ## 1. 核心技术栈 * **模板引擎**: Velocity (`.html.vm`) * **PDF生成**: Gotenberg (HTML转PDF) * **水印处理**: PDFBox (`PdfWatermarkUtil`) * **存储**: OSS (图片URL处理) ## 2. 通用样式与布局规范 (Template) 所有打印模板位于 `src/main/resources/templates/vehicle/` 目录下。 ### 2.1 页面布局 * **纸张设置**: A4 纵向 (Vertical)。 * **容器宽度**: `.page-content` 宽度建议设置为 **99%** 或留出微小边距,防止浏览器预览或打印时**右侧边框**被截断。 * **表格样式**: * 必须使用标准 HTML ``。 * 边框合并: `border-collapse: collapse;`。 * 边框线条: 统一使用细线 (`1px solid #000` 或 `#333`),避免出现粗细不一的视觉效果。 * **禁止**使用 `
` 模拟表格边框,防止分页截断错位。 ### 2.2 图片展示 (核心优化) * **容器**: 图片必须放置在表格单元格 (`
`) 内部。 * **布局方式**: 使用 Flex 布局 (`display: flex; flex-wrap: wrap;`)。 * **动态宽度逻辑** (Velocity): * **单张图片**: 宽度设为 **98%** (占满整行),居中显示。 * **多张图片**: 宽度设为 **48%** (一行两张),保留 1% 间距。 * **样式代码参考**: ```html
#if($images.size() == 1) #set($widthStyle = "width: 98%;") #else #set($widthStyle = "width: 48%;") #end #foreach($img in $images)
#end
``` ### 2.3 水印设置 * **位置调整**: 为防止 A4 纵向打印时最后一行水印被截断,Y 轴偏移量需增加。 * **代码位置**: `PdfWatermarkUtil.java` * **参数**: `y + 100` (原为 `y + 50`)。 --- ## 3. 后端接口开发规范 (Java) ### 3.1 接口定义 * **Controller**: `VehicleFileController` * **Service**: `IVehicleFilePrintService` * **请求方式**: `POST` (支持批量打印) * **参数**: `List vehicleIds` * **响应**: `void` (写入 `HttpServletResponse` 流,Content-Type: `application/pdf`) ### 3.2 数据查询逻辑 所有打印业务需遵循“**取最新一条记录**”的原则: 1. **查询条件**: `vehicle_id` 2. **排序**: 按业务时间或完成时间 **倒序** (`orderByDesc`) 3. **限制**: 取第一条 (`LIMIT 1`) 4. **容错**: * 如果记录不存在 (`null`),跳过该车辆 (`continue`)。 * **数据补全**: 如果业务表中缺失关键信息(如 `plateNumber`),**必须**回查 `hot_vehicle` 基础表进行补全。 ### 3.3 图片URL处理 * 数据库中图片通常以逗号分隔字符串存储 (`img1.jpg,img2.jpg`)。 * **必须**使用 `splitUrls` 方法分割为 `List`。 * **必须**通过 `ossService.selectUrlByIds` 处理(如需签名或转换)。 --- ## 4. 具体业务模块规范 ### 4.1 车辆年审报告 (Inspection Report) * **接口地址**: `/vehicle/file/inspectionReport` * **数据源表**: `hot_vehicle_annual_review` * **关键字段**: `review_date` (年审日期), `image_urls` (附件) * **模板文件**: `inspectionReport.html.vm` * **特殊要求**: * 评定等级需转义 (1=一级, 2=二级)。 * 所有附件图片需放入表格行中。 ### 4.2 车辆二级维护记录 (Maintenance Record) * **接口地址**: `/vehicle/file/maintenanceRecord` * **数据源表**: `hot_vehicle_maintenance` * **关键字段**: * `finish_time` (完成时间 - 排序依据) * `entry_inspect_image_urls` (进厂检验单) * `process_inspect_image_urls` (过程检验单) * `final_inspect_image_urls` (竣工检验单) * `factory_cert_image_urls` (出厂合格证) * **模板文件**: `maintenanceRecord.html.vm` * **特殊要求**: * **纯表格布局**: 整个页面(包括标题、信息、四类图片)全部在 `` 内部。 * **标题样式**: 表格内的分类标题(如“竣工检验单”)**不需要**背景色,字体加粗居中。 * **图片布局**: 严格执行“单张全宽、多张半宽”的动态布局规则。