package handler import ( "github.com/gin-gonic/gin" "kefu-sys/server/internal/middleware" "kefu-sys/server/internal/model" ) type StatisticsHandler struct{} func NewStatisticsHandler() *StatisticsHandler { return &StatisticsHandler{} } func (h *StatisticsHandler) KPIs(c *gin.Context) { tenantID := middleware.GetTenantID(c) var totalSessions, totalMessages int64 var avgResponseTime float64 var satisfactionAvg float64 var firstResolveRate float64 model.DB.Model(&model.Session{}).Where("tenant_id = ?", tenantID).Count(&totalSessions) model.DB.Model(&model.Message{}). Joins("JOIN sessions ON messages.session_id = sessions.id"). Where("sessions.tenant_id = ?", tenantID). Count(&totalMessages) middleware.JSON(c, gin.H{ "total_sessions": totalSessions, "avg_response_time": avgResponseTime, "satisfaction_avg": satisfactionAvg, "first_resolve_rate": firstResolveRate, "total_messages": totalMessages, }) } func (h *StatisticsHandler) SessionTrend(c *gin.Context) { tenantID := middleware.GetTenantID(c) period := c.DefaultQuery("period", "day") _ = tenantID var data []gin.H if period == "day" { data = []gin.H{ {"date": "07-08", "count": 420}, {"date": "07-09", "count": 380}, {"date": "07-10", "count": 450}, {"date": "07-11", "count": 520}, {"date": "07-12", "count": 490}, {"date": "07-13", "count": 550}, {"date": "07-14", "count": 610}, } } else { data = []gin.H{ {"date": "06", "count": 12500}, {"date": "07", "count": 13800}, } } middleware.JSON(c, data) } func (h *StatisticsHandler) AgentPerformance(c *gin.Context) { tenantID := middleware.GetTenantID(c) _ = tenantID data := []gin.H{ {"name": "客服小王", "conversations": 420, "avg_response": 28, "satisfaction": 4.9}, {"name": "客服小李", "conversations": 380, "avg_response": 35, "satisfaction": 4.7}, {"name": "客服小张", "conversations": 350, "avg_response": 42, "satisfaction": 4.5}, } middleware.JSON(c, data) } func (h *StatisticsHandler) ChannelDistribution(c *gin.Context) { data := []gin.H{ {"type": "网页", "value": 45}, {"type": "微信", "value": 28}, {"type": "APP", "value": 18}, {"type": "电话", "value": 6}, {"type": "邮件", "value": 3}, } middleware.JSON(c, data) }