This commit is contained in:
2026-01-29 15:03:38 +08:00
parent 2363a51a6a
commit 2fea046981
5 changed files with 42 additions and 53 deletions

View File

@@ -31,8 +31,8 @@ func ProcessPDFG01GZRequest(ctx context.Context, params []byte, deps *processors
// 获取全局logger
zapLogger := logger.GetGlobalLogger()
// Debug记录入口参数
zapLogger.Debug("PDFG01GZ请求开始",
// Debug记录入口参数(使用 Info 级别便于线上查看)
logger.L().Info("PDFG01GZ请求开始",
zap.String("name", paramsDto.Name),
zap.String("id_card", paramsDto.IDCard),
zap.String("mobile_no", paramsDto.MobileNo),
@@ -56,8 +56,8 @@ func ProcessPDFG01GZRequest(ctx context.Context, params []byte, deps *processors
if cfg, ok := ctx.Value("config").(*config.Config); ok && cfg != nil {
maxSize = cfg.PDFGen.Cache.MaxSize
// Debug记录PDF生成服务配置
zapLogger.Debug("PDFG01GZ加载配置",
// Debug记录PDF生成服务配置(使用 Info 级别便于线上查看)
logger.L().Info("PDFG01GZ加载配置",
zap.String("env", cfg.App.Env),
zap.String("pdfgen_production_url", cfg.PDFGen.ProductionURL),
zap.String("pdfgen_development_url", cfg.PDFGen.DevelopmentURL),
@@ -93,24 +93,29 @@ func ProcessPDFG01GZRequest(ctx context.Context, params []byte, deps *processors
pdfGenService = pdfgen.NewPDFGenService(defaultCfg, zapLogger)
}
// 检查缓存
// 检查缓存(基于姓名+身份证)
_, hit, createdAt, err := cacheManager.Get(paramsDto.Name, paramsDto.IDCard)
if err != nil {
zapLogger.Warn("检查缓存失败继续生成PDF", zap.Error(err))
} else if hit {
// 计算缓存键作为报告ID可持久化
reportID := cacheManager.GetCacheKey(paramsDto.Name, paramsDto.IDCard)
// 缓存命中,模拟慢几秒
zapLogger.Info("PDF缓存命中返回缓存文件",
zap.String("name", paramsDto.Name),
zap.String("id_card", paramsDto.IDCard),
zap.String("report_id", reportID),
zap.Time("created_at", createdAt),
)
// 模拟慢几秒2-4秒
time.Sleep(2 * time.Second)
// 生成下载链接
downloadURL := generateDownloadURL(paramsDto.Name, paramsDto.IDCard)
// 生成下载链接基于报告ID
downloadURL := generateDownloadURL(reportID)
return json.Marshal(map[string]interface{}{
"download_url": downloadURL,
"report_id": reportID,
"cached": true,
"created_at": createdAt.Format(time.RFC3339),
})
@@ -130,7 +135,7 @@ func ProcessPDFG01GZRequest(ctx context.Context, params []byte, deps *processors
// 打印完整的apiData为避免日志过大这里直接序列化为JSON字符串
apiDataBytes, _ := json.Marshal(apiData)
zapLogger.Debug("PDFG01GZ数据准备完成",
logger.L().Info("PDFG01GZ数据准备完成",
zap.Int("api_data_count", len(apiData)),
zap.Int("formatted_items", len(formattedData)),
zap.ByteString("api_data", apiDataBytes),
@@ -150,6 +155,9 @@ func ProcessPDFG01GZRequest(ctx context.Context, params []byte, deps *processors
reportNumber = generateReportNumber()
}
// 计算报告ID与缓存键一致便于通过ID直接下载
reportID := cacheManager.GetCacheKey(paramsDto.Name, paramsDto.IDCard)
// 构建PDF生成请求
pdfReq := &pdfgen.GeneratePDFRequest{
Data: formattedData,
@@ -159,11 +167,10 @@ func ProcessPDFG01GZRequest(ctx context.Context, params []byte, deps *processors
// 调用PDF生成服务
// 即使部分子处理器失败只要有APPLICANT_BASIC_INFO就可以生成PDF
zapLogger.Debug("PDFG01GZ开始调用PDF生成服务",
logger.L().Info("PDFG01GZ开始调用PDF生成服务",
zap.String("report_number", reportNumber),
zap.Int("data_items", len(formattedData)),
)
pdfResp, err := pdfGenService.GenerateGuangzhouPDF(ctx, pdfReq)
if err != nil {
zapLogger.Error("生成PDF失败",
@@ -173,24 +180,26 @@ func ProcessPDFG01GZRequest(ctx context.Context, params []byte, deps *processors
return nil, errors.Join(processors.ErrSystem, fmt.Errorf("生成PDF失败: %w", err))
}
// 保存到缓存
// 保存到缓存(基于姓名+身份证)
if err := cacheManager.Set(paramsDto.Name, paramsDto.IDCard, pdfResp.PDFBytes); err != nil {
zapLogger.Warn("保存PDF到缓存失败", zap.Error(err))
// 不影响返回结果,只记录警告
}
// 生成下载链接
downloadURL := generateDownloadURL(paramsDto.Name, paramsDto.IDCard)
// 生成下载链接基于报告ID
downloadURL := generateDownloadURL(reportID)
zapLogger.Info("PDF生成成功",
zap.String("name", paramsDto.Name),
zap.String("id_card", paramsDto.IDCard),
zap.String("report_id", reportID),
zap.String("report_number", reportNumber),
zap.String("download_url", downloadURL),
)
return json.Marshal(map[string]interface{}{
"download_url": downloadURL,
"report_id": reportID,
"report_number": reportNumber,
"cached": false,
})
@@ -491,10 +500,10 @@ func generateReportNumber() string {
return fmt.Sprintf("RPT%s", time.Now().Format("20060102150405"))
}
// generateDownloadURL 生成下载链接
func generateDownloadURL(name, idCard string) string {
// generateDownloadURL 生成下载链接基于报告ID/缓存键)
func generateDownloadURL(reportID string) string {
// 这里应该生成实际的下载URL
// 暂时返回一个占位符,实际应该根据服务器配置生成
return fmt.Sprintf("/api/v1/pdfg/download?name=%s&id_card=%s", name, idCard)
return fmt.Sprintf("/api/v1/pdfg/download?id=%s", reportID)
}