增加客服分组管理
This commit is contained in:
@@ -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
|
||||
}
|
||||
Reference in New Issue
Block a user