增加客服分组管理

This commit is contained in:
yml
2026-06-18 02:09:02 +08:00
parent 2223665b14
commit 233920025e
16 changed files with 1082 additions and 20 deletions
@@ -0,0 +1,57 @@
package supportgroup
import (
"errors"
"hfb_sys/backend/internal/model"
"gorm.io/gorm"
)
func PickSupportAdmin(tx *gorm.DB, groupCode string) (uint64, error) {
var row struct {
ID uint64
}
err := tx.Table("chat_support_groups AS g").
Select("au.id").
Joins("JOIN chat_support_group_members AS gm ON gm.group_id = g.id").
Joins("JOIN admin_users AS au ON au.id = gm.admin_user_id").
Where("g.code = ? AND g.status = ? AND au.status = ?", groupCode, "active", "active").
Order(`CASE au.support_status WHEN 'online' THEN 0 WHEN 'busy' THEN 1 ELSE 2 END,
(
SELECT COUNT(1)
FROM chat_participants AS cp
WHERE cp.participant_type = 'admin'
AND cp.role = 'support'
AND cp.participant_id = au.id
) ASC,
au.id ASC`).
Limit(1).
Scan(&row).Error
if err != nil {
return 0, err
}
if row.ID > 0 {
return row.ID, nil
}
return fallbackSupportAdmin(tx)
}
func fallbackSupportAdmin(tx *gorm.DB) (uint64, error) {
var admin model.AdminUser
err := tx.Table("admin_users AS au").
Select("au.*").
Joins("JOIN admin_user_roles AS aur ON aur.admin_user_id = au.id").
Joins("JOIN roles AS r ON r.id = aur.role_id").
Where("au.status = ? AND r.code = ?", "active", "cs").
Order("CASE au.support_status WHEN 'online' THEN 0 WHEN 'busy' THEN 1 ELSE 2 END, au.id ASC").
Limit(1).
First(&admin).Error
if err != nil {
if errors.Is(err, gorm.ErrRecordNotFound) {
return 0, nil
}
return 0, err
}
return admin.ID, nil
}