package handler import ( "strconv" "github.com/casehub/ticket-workbench/internal/config" "github.com/casehub/ticket-workbench/internal/dto" "github.com/casehub/ticket-workbench/internal/middleware" "github.com/casehub/ticket-workbench/internal/model" "github.com/casehub/ticket-workbench/internal/service" "github.com/gin-gonic/gin" "gorm.io/gorm" ) func AnalyzeTicket(db *gorm.DB, cfg *config.Config) gin.HandlerFunc { return func(c *gin.Context) { idStr := c.Param("id") id, err := strconv.Atoi(idStr) if err != nil { c.JSON(200, dto.Fail("参数错误")) return } var ticket model.TicketInfo if err := db.Where("ticketid = ?", id).First(&ticket).Error; err != nil { c.JSON(200, dto.Fail("工单不存在")) return } analysis, err := service.AnalyzeTicket(db, id, cfg.GLM.APIKey, cfg.GLM.BaseURL, cfg.GLM.Model, ticket.Title, ticket.Content, ticket.Contactname, ticket.Contactphone) if err != nil { c.JSON(200, dto.Fail("AI分析失败: "+err.Error())) return } c.JSON(200, dto.Success(analysis)) } } func GetAnalysis(db *gorm.DB) gin.HandlerFunc { return func(c *gin.Context) { idStr := c.Param("id") id, err := strconv.Atoi(idStr) if err != nil { c.JSON(200, dto.Fail("参数错误")) return } analyses, err := service.GetAnalysisByTicketID(db, id) if err != nil { c.JSON(200, dto.Fail("查询失败")) return } c.JSON(200, dto.Success(analyses)) } } func ConfirmAnalysis(db *gorm.DB) gin.HandlerFunc { return func(c *gin.Context) { idStr := c.Param("id") ticketid, err := strconv.Atoi(idStr) if err != nil { c.JSON(200, dto.Fail("参数错误")) return } var req dto.ConfirmAnalysisRequest if err := c.ShouldBindJSON(&req); err != nil { c.JSON(200, dto.Fail("参数错误")) return } user := middleware.GetCurrentUser(c) if user == nil { c.JSON(200, dto.Fail("未登录")) return } var analysis model.TicketAiAnalysis if err := db.Where("ticketid = ? AND confirmed = 0", ticketid).Order("createtime DESC").First(&analysis).Error; err != nil { c.JSON(200, dto.Fail("未找到待确认的分析结果")) return } err = service.ConfirmAnalysis(db, analysis.Analysisid, req.Category, req.Priority, req.Summary, user.Userid) if err != nil { c.JSON(200, dto.Fail("确认失败")) return } c.JSON(200, dto.Success(nil)) } }