This commit is contained in:
2026-01-16 18:37:47 +08:00
parent 96dfa3d758
commit 96d530a67d
12 changed files with 959 additions and 156 deletions

View File

@@ -6,25 +6,34 @@ import (
"strings"
"github.com/gin-gonic/gin"
"github.com/shopspring/decimal"
"go.uber.org/zap"
"tyapi-server/internal/application/product"
"tyapi-server/internal/config"
financeRepositories "tyapi-server/internal/domains/finance/repositories"
)
// ComponentReportOrderHandler 组件报告订单处理器
type ComponentReportOrderHandler struct {
service *product.ComponentReportOrderService
logger *zap.Logger
service *product.ComponentReportOrderService
purchaseOrderRepo financeRepositories.PurchaseOrderRepository
config *config.Config
logger *zap.Logger
}
// NewComponentReportOrderHandler 创建组件报告订单处理器
func NewComponentReportOrderHandler(
service *product.ComponentReportOrderService,
purchaseOrderRepo financeRepositories.PurchaseOrderRepository,
config *config.Config,
logger *zap.Logger,
) *ComponentReportOrderHandler {
return &ComponentReportOrderHandler{
service: service,
logger: logger,
service: service,
purchaseOrderRepo: purchaseOrderRepo,
config: config,
logger: logger,
}
}
@@ -241,6 +250,40 @@ func (h *ComponentReportOrderHandler) CreatePaymentOrder(c *gin.Context) {
zap.String("pay_url", response.PayURL),
)
// 开发环境下,自动将订单状态设置为已支付
if h.config != nil && h.config.App.IsDevelopment() {
h.logger.Info("开发环境:自动设置订单为已支付状态",
zap.String("order_id", response.OrderID),
zap.String("order_no", response.OrderNo))
// 获取订单信息
purchaseOrder, err := h.purchaseOrderRepo.GetByID(c.Request.Context(), response.OrderID)
if err != nil {
h.logger.Error("开发环境:获取订单信息失败", zap.Error(err), zap.String("order_id", response.OrderID))
} else {
// 解析金额
amount, err := decimal.NewFromString(response.Amount)
if err != nil {
h.logger.Error("开发环境:解析订单金额失败", zap.Error(err), zap.String("amount", response.Amount))
} else {
// 标记为已支付(使用开发环境的模拟交易号)
tradeNo := "DEV_" + response.OrderNo
purchaseOrder.MarkPaid(tradeNo, "", "", amount, amount)
// 更新订单状态
err = h.purchaseOrderRepo.Update(c.Request.Context(), purchaseOrder)
if err != nil {
h.logger.Error("开发环境:更新订单状态失败", zap.Error(err), zap.String("order_id", response.OrderID))
} else {
h.logger.Info("开发环境:订单状态已自动设置为已支付",
zap.String("order_id", response.OrderID),
zap.String("order_no", response.OrderNo),
zap.String("trade_no", tradeNo))
}
}
}
}
c.JSON(http.StatusOK, gin.H{
"code": 200,
"data": response,
@@ -300,7 +343,7 @@ func (h *ComponentReportOrderHandler) DownloadFile(c *gin.Context) {
})
return
}
h.logger.Info("获取用户ID", zap.String("user_id", userID))
orderID := c.Param("orderId")
@@ -312,17 +355,17 @@ func (h *ComponentReportOrderHandler) DownloadFile(c *gin.Context) {
})
return
}
h.logger.Info("获取订单ID", zap.String("order_id", orderID))
filePath, err := h.service.DownloadFile(c.Request.Context(), orderID)
if err != nil {
h.logger.Error("下载文件失败", zap.Error(err), zap.String("order_id", orderID), zap.String("user_id", userID))
// 根据错误类型返回不同的状态码和消息
errorMessage := err.Error()
statusCode := http.StatusInternalServerError
// 根据错误消息判断具体错误类型
if strings.Contains(errorMessage, "购买订单不存在") {
statusCode = http.StatusNotFound
@@ -331,7 +374,7 @@ func (h *ComponentReportOrderHandler) DownloadFile(c *gin.Context) {
} else if strings.Contains(errorMessage, "生成报告文件失败") {
statusCode = http.StatusInternalServerError
}
c.JSON(statusCode, gin.H{
"code": statusCode,
"message": "下载文件失败",
@@ -339,9 +382,9 @@ func (h *ComponentReportOrderHandler) DownloadFile(c *gin.Context) {
})
return
}
h.logger.Info("成功获取文件路径",
zap.String("order_id", orderID),
h.logger.Info("成功获取文件路径",
zap.String("order_id", orderID),
zap.String("user_id", userID),
zap.String("file_path", filePath))