sync: soul-api 接口逻辑 | 原因: 后端接口逻辑修改

This commit is contained in:
卡若
2026-03-08 10:27:09 +08:00
parent 13541c902a
commit 387a9fc5fa

View File

@@ -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"})