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

@@ -333,20 +333,20 @@ func (h *ComponentReportHandler) GenerateAndDownloadZip(c *gin.Context) {
// 如果有待支付订单,尝试主动查询支付状态
if pendingOrder != nil {
h.logger.Info("发现待支付订单,尝试主动查询支付状态",
h.logger.Info("发现待支付订单,尝试主动查询支付状态",
zap.String("order_id", pendingOrder.ID),
zap.String("pay_channel", pendingOrder.PayChannel))
// 如果是支付宝订单,主动查询状态
if pendingOrder.PayChannel == "alipay" && h.aliPayService != nil {
// 这里可以调用支付宝查询服务,但为了简化,我们只记录日志
h.logger.Info("支付宝订单状态待查询,但当前实现简化处理",
h.logger.Info("支付宝订单状态待查询,但当前实现简化处理",
zap.String("order_id", pendingOrder.ID))
}
// 如果是微信订单,主动查询状态
if pendingOrder.PayChannel == "wechat" && h.wechatPayService != nil {
// 这里可以调用微信查询服务,但为了简化,我们只记录日志
h.logger.Info("微信订单状态待查询,但当前实现简化处理",
h.logger.Info("微信订单状态待查询,但当前实现简化处理",
zap.String("order_id", pendingOrder.ID))
}
}
@@ -397,9 +397,14 @@ func (h *ComponentReportHandler) GenerateAndDownloadZip(c *gin.Context) {
}
}()
// 创建带超时的上下文避免ZIP生成时间过长导致网关超时
// 设置超时时间为 25 秒,略小于服务器的 write_timeout (30秒)
ctx, cancel := context.WithTimeout(c.Request.Context(), 25*time.Second)
defer cancel()
// 生成ZIP文件
zipPath, err := h.zipGenerator.GenerateZipFile(
c.Request.Context(),
ctx,
req.ProductID,
req.SubProductCodes,
h.exampleJSONGenerator,
@@ -407,6 +412,18 @@ func (h *ComponentReportHandler) GenerateAndDownloadZip(c *gin.Context) {
)
if err != nil {
h.logger.Error("生成ZIP文件失败", zap.Error(err), zap.String("product_id", req.ProductID))
// 检查是否是超时错误
if ctx.Err() == context.DeadlineExceeded {
h.logger.Error("ZIP文件生成超时", zap.String("product_id", req.ProductID))
c.JSON(http.StatusRequestTimeout, gin.H{
"code": 504,
"message": "文件生成超时,请稍后重试",
"error": "请求处理时间过长",
})
return
}
c.JSON(http.StatusInternalServerError, gin.H{
"code": 500,
"message": "生成ZIP文件失败",
@@ -987,8 +1004,9 @@ func (h *ComponentReportHandler) CreatePaymentOrder(c *gin.Context) {
SubProductIDs: string(subProductIDsJSON),
SubProductCodes: string(subProductCodesJSON),
// 关联购买订单ID
OrderID: &createdPurchaseOrder.ID,
OrderNumber: &outTradeNo,
OrderID: &createdPurchaseOrder.ID,
OrderNumber: &outTradeNo,
DownloadPrice: finalPrice, // 设置下载价格
}
// 记录创建前的详细信息用于调试
@@ -1384,13 +1402,14 @@ func (h *ComponentReportHandler) createDownloadRecordIfEligible(ctx context.Cont
// 3. 创建下载记录
download := &entities.ComponentReportDownload{
UserID: userID,
ProductID: productID,
ProductCode: product.Code,
ProductName: product.Name,
OrderID: &validOrder.ID, // 添加OrderID字段
OrderNumber: &validOrder.OrderNo, // 使用OrderNumber字段
ExpiresAt: calculateExpiryTime(), // 从创建日起30天
UserID: userID,
ProductID: productID,
ProductCode: product.Code,
ProductName: product.Name,
OrderID: &validOrder.ID, // 添加OrderID字段
OrderNumber: &validOrder.OrderNo, // 使用OrderNumber字段
DownloadPrice: validOrder.Amount, // 设置下载价格(从订单获取)
ExpiresAt: calculateExpiryTime(), // 从创建日起30天
}
// 4. 如果是组合包,获取子产品信息
@@ -1562,13 +1581,14 @@ func (h *ComponentReportHandler) createDownloadRecordForPaidOrder(ctx context.Co
// 创建下载记录
download := &entities.ComponentReportDownload{
UserID: order.UserID,
ProductID: order.ProductID,
ProductCode: order.ProductCode,
ProductName: order.ProductName,
OrderID: &order.ID,
OrderNumber: &order.OrderNo,
ExpiresAt: calculateExpiryTime(),
UserID: order.UserID,
ProductID: order.ProductID,
ProductCode: order.ProductCode,
ProductName: order.ProductName,
OrderID: &order.ID,
OrderNumber: &order.OrderNo,
DownloadPrice: order.Amount, // 设置下载价格(从订单获取)
ExpiresAt: calculateExpiryTime(),
}
// 如果是组合包,获取子产品信息