diff --git a/soul-api/internal/handler/match.go b/soul-api/internal/handler/match.go index 5e5e88ef..139d5ce3 100644 --- a/soul-api/internal/handler/match.go +++ b/soul-api/internal/handler/match.go @@ -236,17 +236,30 @@ func MatchUsers(c *gin.Context) { if len(todayMatchedIDs) > 0 { q = q.Where("id NOT IN ?", todayMatchedIDs) } - // 按池子来源筛选 - 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: + // 按池子来源筛选(多选取并集) + if hasSource("all") { q = q.Where("((wechat_id IS NOT NULL AND wechat_id != '') OR (phone IS NOT NULL AND phone != ''))") + } else { + var orConds []string + if hasSource("vip") { + orConds = append(orConds, "(is_vip = 1 AND vip_expire_date > NOW())") + } + if hasSource("complete") { + orConds = append(orConds, "((phone IS NOT NULL AND phone != '') AND (nickname IS NOT NULL AND nickname != ''))") + } + if len(orConds) > 0 { + combined := "(" + orConds[0] + for i := 1; i < len(orConds); i++ { + combined += " OR " + orConds[i] + } + combined += ")" + q = q.Where(combined) + } else { + q = q.Where("is_vip = 1 AND vip_expire_date > NOW()") + } } // partner 类型强制 VIP - if body.MatchType == "partner" && poolSource != "vip" { + if body.MatchType == "partner" && !hasSource("vip") && !hasSource("all") { q = q.Where("is_vip = 1 AND vip_expire_date > NOW()") } // 按完善程度筛选