sync: soul-api 接口逻辑 | 原因: 后端接口逻辑修改
This commit is contained in:
@@ -181,13 +181,63 @@ func MatchUsers(c *gin.Context) {
|
||||
return
|
||||
}
|
||||
}
|
||||
// 找伙伴(partner):仅从超级个体池匹配(is_vip=1 且 vip_expire_date>NOW);其他类型:已绑定微信或手机号的用户
|
||||
// 读取 poolSettings 配置决定匹配范围
|
||||
var cfg model.SystemConfig
|
||||
poolSource := "vip"
|
||||
requirePhone := true
|
||||
requireNickname := false
|
||||
requireAvatar := false
|
||||
requireBusiness := false
|
||||
if err := db.Where("config_key = ?", "match_config").First(&cfg).Error; err == nil {
|
||||
var cfgMap map[string]interface{}
|
||||
if json.Unmarshal(cfg.ConfigValue, &cfgMap) == nil {
|
||||
if ps, ok := cfgMap["poolSettings"].(map[string]interface{}); ok {
|
||||
if v, ok := ps["poolSource"].(string); ok {
|
||||
poolSource = v
|
||||
}
|
||||
if v, ok := ps["requirePhone"].(bool); ok {
|
||||
requirePhone = v
|
||||
}
|
||||
if v, ok := ps["requireNickname"].(bool); ok {
|
||||
requireNickname = v
|
||||
}
|
||||
if v, ok := ps["requireAvatar"].(bool); ok {
|
||||
requireAvatar = v
|
||||
}
|
||||
if v, ok := ps["requireBusiness"].(bool); ok {
|
||||
requireBusiness = v
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var users []model.User
|
||||
q := db.Where("id != ?", body.UserID).
|
||||
Where("((wechat_id IS NOT NULL AND wechat_id != '') OR (phone IS NOT NULL AND phone != ''))")
|
||||
if body.MatchType == "partner" {
|
||||
// 超级个体:VIP 会员池
|
||||
q := db.Where("id != ?", body.UserID)
|
||||
// 按池子来源筛选
|
||||
switch poolSource {
|
||||
case "vip":
|
||||
q = q.Where("is_vip = 1 AND vip_expire_date > NOW()")
|
||||
case "complete":
|
||||
q = q.Where("((phone IS NOT NULL AND phone != '') AND (nickname IS NOT NULL AND nickname != ''))")
|
||||
default:
|
||||
q = q.Where("((wechat_id IS NOT NULL AND wechat_id != '') OR (phone IS NOT NULL AND phone != ''))")
|
||||
}
|
||||
// partner 类型强制 VIP
|
||||
if body.MatchType == "partner" && poolSource != "vip" {
|
||||
q = q.Where("is_vip = 1 AND vip_expire_date > NOW()")
|
||||
}
|
||||
// 按完善程度筛选
|
||||
if requirePhone {
|
||||
q = q.Where("phone IS NOT NULL AND phone != ''")
|
||||
}
|
||||
if requireNickname {
|
||||
q = q.Where("nickname IS NOT NULL AND nickname != ''")
|
||||
}
|
||||
if requireAvatar {
|
||||
q = q.Where("avatar IS NOT NULL AND avatar != ''")
|
||||
}
|
||||
if requireBusiness {
|
||||
q = q.Where("(help_offer IS NOT NULL AND help_offer != '') OR (help_need IS NOT NULL AND help_need != '')")
|
||||
}
|
||||
if err := q.Order("created_at DESC").Limit(20).Find(&users).Error; err != nil || len(users) == 0 {
|
||||
c.JSON(http.StatusOK, gin.H{"success": false, "message": "暂无匹配用户", "data": nil, "code": "NO_USERS"})
|
||||
|
||||
Reference in New Issue
Block a user