Files
backend-go/services/dashboard_service.go
2026-06-05 18:00:14 +08:00

65 lines
1.7 KiB
Go

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
}