This commit is contained in:
Mrx
2026-05-29 21:13:46 +08:00
parent 4b1176b1e3
commit 5ee816d6c1
3 changed files with 61 additions and 26 deletions

View File

@@ -391,27 +391,56 @@ func (s *InvoiceApplicationServiceImpl) DownloadInvoiceFile(ctx context.Context,
return nil, fmt.Errorf("发票尚未通过审核")
}
// 4. 验证文件信息
if application.FileURL == nil || *application.FileURL == "" {
return nil, fmt.Errorf("发票文件不存在")
}
// 5. 从七牛云下载文件内容
fileContent, err := s.storageService.DownloadFile(ctx, *application.FileURL)
fileContent, fileID, fileName, fileSize, fileURL, err := downloadInvoiceFileFromStorage(ctx, s.storageService, application)
if err != nil {
return nil, fmt.Errorf("下载文件失败: %w", err)
return nil, err
}
// 6. 构建响应DTO
return &dto.FileDownloadResponse{
FileID: *application.FileID,
FileName: *application.FileName,
FileSize: *application.FileSize,
FileURL: *application.FileURL,
FileID: fileID,
FileName: fileName,
FileSize: fileSize,
FileURL: fileURL,
FileContent: fileContent,
}, nil
}
// downloadInvoiceFileFromStorage 从七牛云下载发票文件(优先用 FileID 生成新 URL避免私有空间签名过期
func downloadInvoiceFileFromStorage(ctx context.Context, storageService *storage.QiNiuStorageService, application *entities.InvoiceApplication) ([]byte, string, string, int64, string, error) {
if application.FileID == nil || *application.FileID == "" {
if application.FileURL == nil || *application.FileURL == "" {
return nil, "", "", 0, "", fmt.Errorf("发票文件不存在")
}
fileContent, err := storageService.DownloadFile(ctx, *application.FileURL)
if err != nil {
return nil, "", "", 0, "", fmt.Errorf("下载文件失败: %w", err)
}
return fileContent, derefString(application.FileID), derefString(application.FileName), derefInt64(application.FileSize), *application.FileURL, nil
}
fileContent, err := storageService.DownloadFileByKey(ctx, *application.FileID)
if err != nil {
return nil, "", "", 0, "", fmt.Errorf("下载文件失败: %w", err)
}
fileURL := storageService.GetFileURL(ctx, *application.FileID)
return fileContent, *application.FileID, derefString(application.FileName), derefInt64(application.FileSize), fileURL, nil
}
func derefString(v *string) string {
if v == nil {
return ""
}
return *v
}
func derefInt64(v *int64) int64 {
if v == nil {
return 0
}
return *v
}
// GetAvailableAmount 获取可开票金额
func (s *InvoiceApplicationServiceImpl) GetAvailableAmount(ctx context.Context, userID string) (*dto.AvailableAmountResponse, error) {
// 1. 验证用户是否存在
@@ -764,23 +793,16 @@ func (s *AdminInvoiceApplicationServiceImpl) DownloadInvoiceFile(ctx context.Con
return nil, fmt.Errorf("发票尚未通过审核")
}
// 3. 验证文件信息
if application.FileURL == nil || *application.FileURL == "" {
return nil, fmt.Errorf("发票文件不存在")
}
// 4. 从七牛云下载文件内容
fileContent, err := s.storageService.DownloadFile(ctx, *application.FileURL)
fileContent, fileID, fileName, fileSize, fileURL, err := downloadInvoiceFileFromStorage(ctx, s.storageService, application)
if err != nil {
return nil, fmt.Errorf("下载文件失败: %w", err)
return nil, err
}
// 5. 构建响应DTO
return &dto.FileDownloadResponse{
FileID: *application.FileID,
FileName: *application.FileName,
FileSize: *application.FileSize,
FileURL: *application.FileURL,
FileID: fileID,
FileName: fileName,
FileSize: fileSize,
FileURL: fileURL,
FileContent: fileContent,
}, nil
}