This commit is contained in:
2026-01-14 15:59:15 +08:00
parent 7a589a9c13
commit 6618e35869
3 changed files with 93 additions and 66 deletions

View File

@@ -565,13 +565,14 @@ func (s *ComponentReportOrderService) createFreeOrder(
// 创建下载记录
download := &productEntities.ComponentReportDownload{
UserID: req.UserID,
ProductID: req.ProductID,
ProductCode: product.Code,
ProductName: product.Name,
OrderID: &createdPurchaseOrder.ID, // 关联购买订单ID
OrderNumber: &createdPurchaseOrder.OrderNo, // 外部订单号
ExpiresAt: calculateExpiryTime(), // 30天后过期
UserID: req.UserID,
ProductID: req.ProductID,
ProductCode: product.Code,
ProductName: product.Name,
OrderID: &createdPurchaseOrder.ID, // 关联购买订单ID
OrderNumber: &createdPurchaseOrder.OrderNo, // 外部订单号
DownloadPrice: finalPrice, // 设置下载价格
ExpiresAt: calculateExpiryTime(), // 30天后过期
}
err = s.componentReportRepo.Create(ctx, download)
@@ -735,7 +736,7 @@ func (s *ComponentReportOrderService) CheckPaymentStatus(ctx context.Context, or
// DownloadFile 下载文件
func (s *ComponentReportOrderService) DownloadFile(ctx context.Context, orderID string) (string, error) {
s.logger.Info("开始下载文件", zap.String("order_id", orderID))
// 首先通过orderID查询购买订单
purchaseOrder, err := s.purchaseOrderRepo.GetByID(ctx, orderID)
if err != nil {
@@ -747,70 +748,71 @@ func (s *ComponentReportOrderService) DownloadFile(ctx context.Context, orderID
s.logger.Error("购买订单不存在", zap.String("order_id", orderID))
return "", fmt.Errorf("购买订单不存在")
}
// 检查购买订单状态
if purchaseOrder.Status != entities.PurchaseOrderStatusPaid {
s.logger.Error("订单未支付,无法下载文件",
zap.String("order_id", orderID),
s.logger.Error("订单未支付,无法下载文件",
zap.String("order_id", orderID),
zap.String("status", string(purchaseOrder.Status)))
return "", fmt.Errorf("订单未支付,无法下载文件")
}
// 获取产品信息
product, err := s.productRepo.GetByID(ctx, purchaseOrder.ProductID)
if err != nil {
s.logger.Error("获取产品信息失败", zap.Error(err), zap.String("product_id", purchaseOrder.ProductID))
return "", fmt.Errorf("获取产品信息失败: %w", err)
}
// 检查是否已有下载记录
download, err := s.componentReportRepo.GetDownloadByPaymentOrderID(ctx, orderID)
if err != nil {
s.logger.Warn("查询下载记录失败,将创建新记录", zap.Error(err), zap.String("order_id", orderID))
download = nil
}
// 如果没有下载记录,创建一个新的
if download == nil {
s.logger.Info("创建新的下载记录",
s.logger.Info("创建新的下载记录",
zap.String("order_id", orderID),
zap.String("user_id", purchaseOrder.UserID),
zap.String("product_id", purchaseOrder.ProductID))
// 创建新的下载记录
newDownload := &productEntities.ComponentReportDownload{
UserID: purchaseOrder.UserID,
ProductID: purchaseOrder.ProductID,
ProductCode: product.Code,
ProductName: product.Name,
OrderID: &purchaseOrder.ID,
OrderNumber: &purchaseOrder.OrderNo,
ExpiresAt: calculateExpiryTime(),
UserID: purchaseOrder.UserID,
ProductID: purchaseOrder.ProductID,
ProductCode: product.Code,
ProductName: product.Name,
OrderID: &purchaseOrder.ID,
OrderNumber: &purchaseOrder.OrderNo,
DownloadPrice: purchaseOrder.Amount, // 设置下载价格(从订单获取)
ExpiresAt: calculateExpiryTime(),
}
// 保存下载记录
err = s.componentReportRepo.Create(ctx, newDownload)
if err != nil {
s.logger.Error("创建下载记录失败", zap.Error(err))
return "", fmt.Errorf("创建下载记录失败: %w", err)
}
s.logger.Info("成功创建下载记录",
zap.String("order_id", orderID),
zap.String("download_id", newDownload.ID),
zap.String("product_id", newDownload.ProductID))
download = newDownload
}
// 检查是否过期
if download.IsExpired() {
s.logger.Error("下载链接已过期",
s.logger.Error("下载链接已过期",
zap.String("order_id", orderID),
zap.Time("expires_at", *download.ExpiresAt))
return "", fmt.Errorf("下载链接已过期,无法下载文件")
}
// 检查文件是否已存在
if download.FilePath != nil && *download.FilePath != "" {
// 文件已存在,直接返回文件路径
@@ -897,7 +899,7 @@ func (s *ComponentReportOrderService) createDownloadRecordForPaidOrder(ctx conte
zap.String("order_no", purchaseOrder.OrderNo),
zap.String("user_id", purchaseOrder.UserID),
zap.String("product_id", purchaseOrder.ProductID))
// 检查是否已有下载记录
existingDownload, err := s.componentReportRepo.GetDownloadByPaymentOrderID(ctx, purchaseOrder.ID)
if err == nil && existingDownload != nil {
@@ -906,41 +908,42 @@ func (s *ComponentReportOrderService) createDownloadRecordForPaidOrder(ctx conte
zap.String("download_id", existingDownload.ID))
return nil
}
// 获取产品信息
product, err := s.productRepo.GetByID(ctx, purchaseOrder.ProductID)
if err != nil {
s.logger.Error("获取产品信息失败",
zap.Error(err),
s.logger.Error("获取产品信息失败",
zap.Error(err),
zap.String("product_id", purchaseOrder.ProductID))
return fmt.Errorf("获取产品信息失败: %w", err)
}
// 创建新的下载记录
download := &productEntities.ComponentReportDownload{
UserID: purchaseOrder.UserID,
ProductID: purchaseOrder.ProductID,
ProductCode: product.Code,
ProductName: product.Name,
OrderID: &purchaseOrder.ID,
OrderNumber: &purchaseOrder.OrderNo,
ExpiresAt: calculateExpiryTime(), // 30天后过期
UserID: purchaseOrder.UserID,
ProductID: purchaseOrder.ProductID,
ProductCode: product.Code,
ProductName: product.Name,
OrderID: &purchaseOrder.ID,
OrderNumber: &purchaseOrder.OrderNo,
DownloadPrice: purchaseOrder.Amount, // 设置下载价格(从订单获取)
ExpiresAt: calculateExpiryTime(), // 30天后过期
}
// 保存下载记录
err = s.componentReportRepo.Create(ctx, download)
if err != nil {
s.logger.Error("创建下载记录失败", zap.Error(err))
return fmt.Errorf("创建下载记录失败: %w", err)
}
s.logger.Info("成功为已支付订单创建下载记录",
zap.String("purchase_order_id", purchaseOrder.ID),
zap.String("order_no", purchaseOrder.OrderNo),
zap.String("download_id", download.ID),
zap.String("product_id", download.ProductID),
zap.String("user_id", download.UserID))
return nil
}
@@ -1121,7 +1124,7 @@ func (s *ComponentReportOrderService) queryAlipayOrderStatusAndUpdate(ctx contex
zap.String("order_no", purchaseOrder.OrderNo),
zap.String("status", "paid"),
)
// 支付成功后,自动创建下载记录
err = s.createDownloadRecordForPaidOrder(ctx, purchaseOrder)
if err != nil {
@@ -1296,7 +1299,7 @@ func (s *ComponentReportOrderService) queryWechatOrderStatusAndUpdate(ctx contex
zap.String("order_no", purchaseOrder.OrderNo),
zap.String("status", "paid"),
)
// 支付成功后,自动创建下载记录
err = s.createDownloadRecordForPaidOrder(ctx, purchaseOrder)
if err != nil {