package services import ( "errors" "git.beifan.cn/trace-system/backend-go/database" "git.beifan.cn/trace-system/backend-go/models" ) // DashboardService 控制台统计服务 type DashboardService struct{} // GetStats 获取控制台工单统计 func (s *DashboardService) GetStats() (map[string]any, error) { var aftersales []models.AftersalesOrder if err := database.DB.Preload("Technician").Order("created_at DESC").Find(&aftersales).Error; err != nil { return nil, errors.New("查询售后工单统计失败") } aftersalesTotal := len(aftersales) aftersalesPending := 0 aftersalesClosed := 0 aftersalesRejected := 0 for _, order := range aftersales { switch order.WorkOrderStatus { case "pending_confirmation": aftersalesPending++ case "closed": aftersalesClosed++ case "rejected": aftersalesRejected++ } } recentAftersales := make([]map[string]any, 0) for i, order := range aftersales { if i >= 10 { break } technicianName := "" if order.Technician != nil { technicianName = order.Technician.Name } recentAftersales = append(recentAftersales, map[string]any{ "serialNumber": order.SerialNumber, "companyName": order.CompanyName, "serviceType": order.ServiceType, "workOrderStatus": order.WorkOrderStatus, "authorizationStatus": order.AuthorizationStatus, "technicianName": technicianName, "createdAt": order.CreatedAt, }) } return map[string]any{ "overview": map[string]any{ "totalAftersales": aftersalesTotal, "pendingConfirmation": aftersalesPending, "closedAftersales": aftersalesClosed, "rejectedAftersales": aftersalesRejected, }, "recentAftersales": recentAftersales, }, nil }