Fix PDF font loading for project overview reports
This commit is contained in:
@@ -0,0 +1,68 @@
|
||||
# 2026-05-07 NAS Docker 部署实施记录
|
||||
|
||||
## 保存路径确认
|
||||
|
||||
- 目标目录:`docs/reports/implementation/`
|
||||
- 文档用途:记录本次 NAS Docker 部署操作、影响范围与验证结果
|
||||
- 路径检查结果:符合仓库实施记录归档规范
|
||||
|
||||
## 本次操作
|
||||
|
||||
- 在本地仓库 `/Users/wkc/Desktop/ccdi/ccdi` 执行 NAS Docker 部署。
|
||||
- 按仓库前端规则先执行 `source ~/.nvm/nvm.sh && nvm use`,确认 Node 版本为 `v14.21.3`、npm 版本为 `6.14.18`。
|
||||
- 执行部署脚本:`deploy/deploy-to-nas.sh`。
|
||||
- 脚本自动完成:
|
||||
- 后端打包:`mvn clean package -DskipTests`
|
||||
- 前端打包:`npm run build:prod`
|
||||
- 组装部署目录:`.deploy/ccdi-package`
|
||||
- 上传到 NAS 并执行远端 `docker compose up -d --build`
|
||||
- 部署目标:
|
||||
- SSH:`116.62.17.81:9444`
|
||||
- 远端目录:`/volume1/webapp/ccdi`
|
||||
|
||||
## 影响范围
|
||||
|
||||
- 远端部署目录 `/volume1/webapp/ccdi` 已刷新为本次构建产物。
|
||||
- 远端 Docker 服务已重建并启动:
|
||||
- `ccdi-backend`
|
||||
- `ccdi-frontend`
|
||||
- `ccdi-lsfx-mock`
|
||||
- 本次操作未修改业务代码。
|
||||
|
||||
## 验证结果
|
||||
|
||||
### 本地构建验证
|
||||
|
||||
- Maven 聚合打包成功,`ruoyi-admin/target/ruoyi-admin.jar` 已生成。
|
||||
- Vue 生产构建成功,`ruoyi-ui/dist` 已生成。
|
||||
- 前端构建存在资源体积告警,未出现构建失败。
|
||||
|
||||
### 远端容器验证
|
||||
|
||||
- `docker compose ps` 结果:
|
||||
- `ccdi-backend`:`Up About a minute`
|
||||
- `ccdi-frontend`:`Up About a minute`
|
||||
- `ccdi-lsfx-mock`:`Up About a minute`
|
||||
- 端口映射结果:
|
||||
- `62318 -> backend:8080`
|
||||
- `62319 -> frontend:80`
|
||||
- `62320 -> mock:8000`
|
||||
|
||||
### NAS 本机访问验证
|
||||
|
||||
- `http://127.0.0.1:62319/` 返回 `200`
|
||||
- `http://127.0.0.1:62318/swagger-ui/index.html` 返回 `200`
|
||||
- `http://127.0.0.1:62320/docs` 返回 `200`
|
||||
|
||||
### 公网访问验证
|
||||
|
||||
- `http://116.62.17.81:62319/` 返回 `200`
|
||||
- `http://116.62.17.81:62318/swagger-ui/index.html` 返回 `200`
|
||||
- `http://116.62.17.81:62320/docs` 返回 `200`
|
||||
|
||||
### 后端日志验证
|
||||
|
||||
- 后端启动 profile:`nas`
|
||||
- TongWeb `8080` 已启动
|
||||
- `RuoYiApplication` 启动完成
|
||||
- 日志输出“若依启动成功”
|
||||
@@ -0,0 +1,31 @@
|
||||
# 生产 MySQL 初始化文件同步实施记录
|
||||
|
||||
## 保存路径确认
|
||||
|
||||
- 实施记录保存路径:`docs/reports/implementation/2026-05-07-production-mysql-init-sync.md`
|
||||
- 本次为生产 MySQL 初始化 SQL 同步,使用实施记录目录保存。
|
||||
|
||||
## 修改内容
|
||||
|
||||
1. 更新 `sql/ccdi_prod_init_20260428.sql`,补入招聘信息维护所需的 `ccdi_recruit_type` 字典类型。
|
||||
2. 补入 `ccdi_recruit_type` 字典数据:
|
||||
- `SOCIAL`:社招
|
||||
- `CAMPUS`:校招
|
||||
3. 核对招聘信息相关结构,确认生产初始化 SQL 中已包含:
|
||||
- `ccdi_staff_recruitment.id` 自增主键
|
||||
- `ccdi_staff_recruitment.recruit_id` 普通索引
|
||||
- `ccdi_staff_recruitment_work.recruitment_id` 非空字段
|
||||
- `idx_recruitment_id` 与 `idx_recruitment_id_sort_order` 索引
|
||||
|
||||
## 影响范围
|
||||
|
||||
- 影响生产空库初始化脚本。
|
||||
- 新生产环境导入初始化 SQL 后,招聘信息导入模板可直接读取招聘类型字典下拉数据。
|
||||
- 不影响现有数据库的增量迁移脚本;存量库仍按 `sql/migration/2026-05-07-add-staff-recruitment-type-dict.sql` 执行。
|
||||
|
||||
## 验证情况
|
||||
|
||||
- 已检查生产初始化 SQL 中包含 `ccdi_recruit_type` 字典类型与 `SOCIAL`、`CAMPUS` 两条字典数据。
|
||||
- 已检查招聘主从表结构已同步最新主键与关联字段形态。
|
||||
- 已执行 `git diff --check`,未发现空白或补丁格式问题。
|
||||
- 本次未执行数据库导入验证,避免误将生产初始化脚本导入当前开发库造成清库风险。
|
||||
@@ -0,0 +1,51 @@
|
||||
# 项目总览 PDF 中文字体配置化修复实施记录
|
||||
|
||||
## 保存路径确认
|
||||
|
||||
- 文档类型:实施记录
|
||||
- 保存路径:`docs/reports/implementation/`
|
||||
|
||||
## 问题说明
|
||||
|
||||
- 异常信息:`com.ruoyi.common.exception.ServiceException: 未找到可用中文字体,无法导出PDF报告`
|
||||
- 触发链路:结果总览导出 PDF 时,`CcdiProjectOverviewReportPdfExporter` 需要通过 PDFBox 加载中文字体;原实现依赖代码内置候选路径,部署环境字体路径不可控时会导致导出失败。
|
||||
|
||||
## 修改内容
|
||||
|
||||
- 修改 `ccdi-project/src/main/java/com/ruoyi/ccdi/project/service/impl/CcdiProjectOverviewReportPdfExporter.java`
|
||||
- 删除 Java 代码内置多路径候选列表。
|
||||
- 通过 `ccdi.report.pdf-font-path` 读取 profile 配置中的单个字体路径。
|
||||
- 配置为空时提示 `未配置PDF中文字体路径,无法导出PDF报告`。
|
||||
- 配置文件不存在、格式不支持或字体不可导出时,错误信息包含配置路径。
|
||||
- `.ttc` 字体集合优先选择支持 TrueType 子集化的简体中文字体名,未命中时再使用集合内首个支持子集化的字体。
|
||||
- 字体集合源在 `document.save()` 完成后再关闭,避免 PDFBox 保存阶段继续读取字体时源文件已关闭。
|
||||
- 增加 `.otf` 字体文件加载支持。
|
||||
- 修改 `ruoyi-admin/src/main/resources/application-dev.yml`
|
||||
- 增加本地 macOS 字体路径:`/System/Library/Fonts/STHeiti Medium.ttc`。
|
||||
- 修改 `ruoyi-admin/src/main/resources/application-nas.yml`
|
||||
- 修改 `ruoyi-admin/src/main/resources/application-uat.yml`
|
||||
- 修改 `ruoyi-admin/src/main/resources/application-pro.yml`
|
||||
- 增加 Linux 字体路径:`/usr/share/fonts/truetype/wqy/wqy-microhei.ttc`。
|
||||
- 未修改 `application.yml`,不提供全局默认值。
|
||||
- 修改 `docker/backend/Dockerfile`
|
||||
- 后端镜像安装 `fontconfig` 与 `fonts-wqy-microhei`,确保 NAS Docker 部署环境具备可用中文字体。
|
||||
- 修改 `ccdi-project/src/test/java/com/ruoyi/ccdi/project/service/impl/CcdiProjectOverviewReportPdfExporterTest.java`
|
||||
- 正常导出用例显式传入测试环境字体路径。
|
||||
- 新增空配置与不存在路径的异常覆盖。
|
||||
|
||||
## 影响范围
|
||||
|
||||
- 影响结果总览 PDF 导出功能。
|
||||
- 不改变报告数据组装、表格内容、前端下载接口和文件名规则。
|
||||
- 不在 `application.yml` 增加默认配置,缺少 profile 配置时导出时报错。
|
||||
- Docker 镜像构建会新增中文字体包安装步骤。
|
||||
|
||||
## 验证记录
|
||||
|
||||
- 已执行:`mvn -pl ccdi-project -Dtest=CcdiProjectOverviewReportPdfExporterTest -Dsurefire.failIfNoSpecifiedTests=false test`
|
||||
- 结果:失败,失败原因是当前工作区已有其他源码编译错误,未进入 PDF 导出测试。
|
||||
- 主要错误包括:`getDataTable` 调用参数不匹配、流水接口字段和方法签名不匹配。
|
||||
- 已执行:手工编译 PDF 导出器及其依赖 VO 到 `ccdi-project/target/classes` 后,运行 `mvn -pl ccdi-project -Dtest=CcdiProjectOverviewReportPdfExporterTest -Dsurefire.failIfNoSpecifiedTests=false -Dmaven.main.skip=true test`
|
||||
- 结果:失败,失败原因是 Maven 仍尝试编译 `ccdi-project` 下全量测试类,而当前 `target/classes` 缺少其他测试依赖的业务类。
|
||||
- 已执行:手工编译 `CcdiProjectOverviewReportPdfExporterTest` 后,通过 JUnit Platform Launcher 指定运行该测试类
|
||||
- 结果:通过,`Tests found: 3`,`Tests succeeded: 3`,`Tests failed: 0`。
|
||||
@@ -0,0 +1,70 @@
|
||||
# 2026-05-08 NAS Docker 部署实施记录
|
||||
|
||||
## 保存路径确认
|
||||
|
||||
- 目标目录:`docs/reports/implementation/`
|
||||
- 文档用途:记录本次 NAS Docker 部署操作、影响范围与验证结果
|
||||
- 路径检查结果:符合仓库实施记录归档规范
|
||||
|
||||
## 本次操作
|
||||
|
||||
- 在本地仓库 `/Users/wkc/Desktop/ccdi/ccdi` 执行 NAS Docker 部署。
|
||||
- 按前端规则执行 `source ~/.nvm/nvm.sh && nvm use`,确认 Node 版本为 `v14.21.3`、npm 版本为 `6.14.18`。
|
||||
- 执行部署脚本:`deploy/deploy-to-nas.sh`。
|
||||
- 脚本完成以下动作:
|
||||
- 后端打包:`mvn clean package -DskipTests`
|
||||
- 前端打包:`npm run build:prod`
|
||||
- 组装部署目录:`.deploy/ccdi-package`
|
||||
- 上传到 NAS:`/volume1/webapp/ccdi`
|
||||
- 远端执行 `docker compose up -d --build`
|
||||
- 部署目标:
|
||||
- SSH:`116.62.17.81:9444`
|
||||
- 远端目录:`/volume1/webapp/ccdi`
|
||||
|
||||
## 影响范围
|
||||
|
||||
- 远端部署目录 `/volume1/webapp/ccdi` 已刷新为本次构建产物。
|
||||
- 远端 Docker 镜像已重新构建。
|
||||
- 远端 Docker 服务已重建并启动:
|
||||
- `ccdi-backend`
|
||||
- `ccdi-frontend`
|
||||
- `ccdi-lsfx-mock`
|
||||
|
||||
## 验证结果
|
||||
|
||||
### 本地构建验证
|
||||
|
||||
- Maven 聚合打包成功,`ruoyi-admin/target/ruoyi-admin.jar` 已生成。
|
||||
- Vue 生产构建成功,`ruoyi-ui/dist` 已生成。
|
||||
- 前端构建存在资源体积告警,未出现构建失败。
|
||||
|
||||
### 远端容器验证
|
||||
|
||||
- `docker compose ps` 结果:
|
||||
- `ccdi-backend`:`Up`
|
||||
- `ccdi-frontend`:`Up`
|
||||
- `ccdi-lsfx-mock`:`Up`
|
||||
- 端口映射结果:
|
||||
- `62318 -> backend:8080`
|
||||
- `62319 -> frontend:80`
|
||||
- `62320 -> mock:8000`
|
||||
|
||||
### NAS 本机访问验证
|
||||
|
||||
- `http://127.0.0.1:62319/` 返回 `200`
|
||||
- `http://127.0.0.1:62318/swagger-ui/index.html` 返回 `200`
|
||||
- `http://127.0.0.1:62320/docs` 返回 `200`
|
||||
|
||||
### 公网访问验证
|
||||
|
||||
- `http://116.62.17.81:62319/` 返回 `200`
|
||||
- `http://116.62.17.81:62318/swagger-ui/index.html` 返回 `200`
|
||||
- `http://116.62.17.81:62320/docs` 返回 `200`
|
||||
- `POST http://116.62.17.81:62318/login/test?username=admin&password=admin123` 返回 `200`
|
||||
|
||||
### 后端日志验证
|
||||
|
||||
- 后端启动 profile:`nas`
|
||||
- TongWeb `8080` 已启动。
|
||||
- `RuoYiApplication` 启动完成。
|
||||
- 日志输出“若依启动成功”。
|
||||
Reference in New Issue
Block a user