-f
This commit is contained in:
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user