Files
zmkgC/test/dupl_user_test.go

86 lines
1.8 KiB
Go
Raw Permalink Normal View History

2025-07-07 20:11:59 +08:00
package test
import (
"context"
"fmt"
"testing"
"github.com/gogf/gf/v2/frame/g"
"github.com/samber/lo"
)
type DuplUser struct {
UserName string `json:"user_name"`
Phone string `json:"phone"`
Openid string `json:"openid"`
ID uint `json:"id"`
}
// 查询具有相同手机号的用户
func TestDuplUser(t *testing.T) {
// SELECT
//
// id,
// user_name,
// phone,
// openid
//
// FROM
//
// bus_construction_user
//
// WHERE
//
// phone IN (
// SELECT
// phone
// FROM
// bus_construction_user
// where
// deleted_at is nullAND phone <> ''
// GROUP BY
// phone
// HAVING
// COUNT(phone) > 1
// )
// AND phone IS NOT NULL AND phone <> ''
//
// ORDER BY phone;
var duplUsers []DuplUser
// 查询具有相同手机号的用户
query, _ := g.DB().Query(context.Background(), "SELECT id, user_name, phone, openid FROM bus_construction_user WHERE phone IN (SELECT phone FROM bus_construction_user WHERE deleted_at IS NULL AND phone <> '' GROUP BY phone HAVING COUNT(phone) > 1) AND phone IS NOT NULL AND phone <> '' and deleted_at is null ORDER BY phone")
if err := query.Structs(&duplUsers); err != nil {
t.Fatal(err)
}
var errOpenids []DuplUser
duplUsers = lo.FilterMap(duplUsers, func(v DuplUser, _ int) (DuplUser, bool) {
// 如果 openid 不包含任何字母,则认为是无效的 openid
if !hasLetter(v.Openid) {
errOpenids = append(errOpenids, v)
return v, false
}
return v, true
})
for _, v := range duplUsers {
fmt.Printf("User: %#v\n", v)
}
fmt.Println("错误的OpenID")
for _, v := range errOpenids {
fmt.Printf("User: %#v\n", v)
}
}
// 判断字符串是否包含字母
func hasLetter(s string) bool {
for _, r := range s {
if (r >= 'a' && r <= 'z') || (r >= 'A' && r <= 'Z') {
return true
}
}
return false
}