-f
This commit is contained in:
@@ -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(),
|
||||
}
|
||||
|
||||
// 如果是组合包,获取子产品信息
|
||||
|
||||
Reference in New Issue
Block a user