feat: 弃用腾讯tts,改用火山引擎tts
This commit is contained in:
@@ -0,0 +1,143 @@
|
||||
package radio
|
||||
|
||||
import (
|
||||
"sundynix-go/global"
|
||||
common "sundynix-go/model/commom/request"
|
||||
"sundynix-go/model/radio/response"
|
||||
"sundynix-go/model/system"
|
||||
)
|
||||
|
||||
type UserService struct{}
|
||||
|
||||
// GetRadioUserList 获取电台用户列表(带订阅/收听统计)
|
||||
func (s *UserService) GetRadioUserList(info common.PageInfo, isVip int, keyword string) ([]response.RadioUserItem, int64, error) {
|
||||
var total int64
|
||||
var users []system.User
|
||||
|
||||
db := global.DB.Model(&system.User{})
|
||||
|
||||
// 关键字搜索
|
||||
if keyword != "" {
|
||||
db = db.Where("nick_name LIKE ? OR phone LIKE ? OR account LIKE ?",
|
||||
"%"+keyword+"%", "%"+keyword+"%", "%"+keyword+"%")
|
||||
}
|
||||
|
||||
// VIP 筛选: 1=VIP, 2=非VIP, 0或其他=全部
|
||||
if isVip == 1 {
|
||||
db = db.Where("is_vip = 1")
|
||||
} else if isVip == 2 {
|
||||
db = db.Where("is_vip = 0")
|
||||
}
|
||||
|
||||
// 统计总数
|
||||
if err := db.Count(&total).Error; err != nil {
|
||||
return nil, 0, err
|
||||
}
|
||||
|
||||
// 分页查询用户列表
|
||||
if err := db.Preload("Avatar").
|
||||
Scopes(info.Paginate()).
|
||||
Order("created_at DESC").
|
||||
Find(&users).Error; err != nil {
|
||||
return nil, 0, err
|
||||
}
|
||||
|
||||
// 批量获取用户ID
|
||||
userIds := make([]string, len(users))
|
||||
for i, u := range users {
|
||||
userIds[i] = u.Id
|
||||
}
|
||||
|
||||
if len(userIds) == 0 {
|
||||
return []response.RadioUserItem{}, total, nil
|
||||
}
|
||||
|
||||
// 批量查询订阅数
|
||||
type UserCount struct {
|
||||
UserId string
|
||||
Count int64
|
||||
}
|
||||
var subCounts []UserCount
|
||||
global.DB.Table("sundynix_radio_subscription").
|
||||
Select("user_id, COUNT(*) as count").
|
||||
Where("user_id IN ? AND status = 1 AND deleted_at IS NULL", userIds).
|
||||
Group("user_id").
|
||||
Scan(&subCounts)
|
||||
subMap := make(map[string]int64)
|
||||
for _, sc := range subCounts {
|
||||
subMap[sc.UserId] = sc.Count
|
||||
}
|
||||
|
||||
// 批量查询收听次数
|
||||
var listenCounts []UserCount
|
||||
global.DB.Table("sundynix_radio_listen_log").
|
||||
Select("user_id, COUNT(*) as count").
|
||||
Where("user_id IN ? AND deleted_at IS NULL", userIds).
|
||||
Group("user_id").
|
||||
Scan(&listenCounts)
|
||||
listenMap := make(map[string]int64)
|
||||
for _, lc := range listenCounts {
|
||||
listenMap[lc.UserId] = lc.Count
|
||||
}
|
||||
|
||||
// 批量查询收藏数
|
||||
var favCounts []UserCount
|
||||
global.DB.Table("sundynix_radio_favorite").
|
||||
Select("user_id, COUNT(*) as count").
|
||||
Where("user_id IN ? AND deleted_at IS NULL", userIds).
|
||||
Group("user_id").
|
||||
Scan(&favCounts)
|
||||
favMap := make(map[string]int64)
|
||||
for _, fc := range favCounts {
|
||||
favMap[fc.UserId] = fc.Count
|
||||
}
|
||||
|
||||
// 批量查询订单总额(分)
|
||||
type UserAmount struct {
|
||||
UserId string
|
||||
TotalAmount int64
|
||||
OrderCount int64
|
||||
}
|
||||
var orderStats []UserAmount
|
||||
global.DB.Table("sundynix_order").
|
||||
Select("user_id, SUM(amount) as total_amount, COUNT(*) as order_count").
|
||||
Where("user_id IN ? AND status = 1 AND deleted_at IS NULL", userIds).
|
||||
Group("user_id").
|
||||
Scan(&orderStats)
|
||||
amountMap := make(map[string]int64)
|
||||
orderCountMap := make(map[string]int64)
|
||||
for _, os := range orderStats {
|
||||
amountMap[os.UserId] = os.TotalAmount
|
||||
orderCountMap[os.UserId] = os.OrderCount
|
||||
}
|
||||
|
||||
// 组装结果
|
||||
result := make([]response.RadioUserItem, len(users))
|
||||
for i, u := range users {
|
||||
avatarUrl := ""
|
||||
if u.Avatar != nil {
|
||||
avatarUrl = u.Avatar.Url
|
||||
}
|
||||
result[i] = response.RadioUserItem{
|
||||
Id: u.Id,
|
||||
Name: u.Name,
|
||||
NickName: u.NickName,
|
||||
Account: u.Account,
|
||||
Phone: u.Phone,
|
||||
AvatarUrl: avatarUrl,
|
||||
Gender: u.Gender,
|
||||
IsVip: u.IsVip,
|
||||
VipExpireAt: u.VipExpireAt,
|
||||
LastLoginAt: u.LastLoginAt,
|
||||
LastLoginIp: u.LastLoginIp,
|
||||
CreatedAt: u.CreatedAt,
|
||||
SubscribeCount: subMap[u.Id],
|
||||
ListenCount: listenMap[u.Id],
|
||||
FavoriteCount: favMap[u.Id],
|
||||
TotalSpent: amountMap[u.Id],
|
||||
OrderCount: orderCountMap[u.Id],
|
||||
}
|
||||
}
|
||||
|
||||
return result, total, nil
|
||||
}
|
||||
Reference in New Issue
Block a user