go-common/app/admin/main/member/dao/search.go
2019-04-22 18:49:16 +08:00

164 lines
4.4 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package dao
import (
"context"
"fmt"
"regexp"
"strconv"
"strings"
"time"
"go-common/app/admin/main/member/model"
"go-common/library/database/elastic"
"go-common/library/log"
"github.com/pkg/errors"
)
var (
_numPattern = regexp.MustCompile(`^\d+$`)
)
func allnum(s string) bool {
return _numPattern.MatchString(s)
}
// SearchMember is.
func (d *Dao) SearchMember(ctx context.Context, arg *model.ArgList) (*model.SearchMemberResult, error) {
r := d.es.NewRequest("member_user").
Fields("mid", "name").
Index("user_base").
Order("mid", elastic.OrderAsc).
Ps(int(arg.PS)).
Pn(int(arg.PN))
if arg.Mid != 0 {
r.WhereEq("mid", arg.Mid)
}
if arg.Keyword != "" {
fields := []string{"name"}
if allnum(arg.Keyword) {
fields = append(fields, "mid")
}
r.WhereLike(fields, []string{arg.Keyword}, true, elastic.LikeLevelLow)
}
result := &model.SearchMemberResult{}
if err := r.Scan(ctx, &result); err != nil {
return nil, errors.WithStack(err)
}
return result, nil
}
// SearchLog is.
func (d *Dao) SearchLog(ctx context.Context, uid, oid int64, uname, action string) (*model.SearchLogResult, error) {
nowYear := time.Now().Year()
index := []string{
fmt.Sprintf("log_audit_121_%d", nowYear),
fmt.Sprintf("log_audit_121_%d", nowYear-1),
}
r := d.es.NewRequest("log_audit").
Index(index...).
Fields("uid", "uname", "oid", "type", "action", "str_0", "str_1", "str_2", "int_0", "int_1", "int_2", "ctime", "extra_data").
Order("ctime", elastic.OrderDesc)
// 默认查询的是第一页每夜10条记录
if uid > 0 {
r.WhereEq("uid", strconv.FormatInt(uid, 10))
}
if oid > 0 {
r.WhereEq("oid", strconv.FormatInt(oid, 10))
}
if uname != "" {
r.WhereEq("uname", uname)
}
if action != "" {
r.WhereIn("action", strings.Split(action, ","))
}
result := &model.SearchLogResult{}
if err := r.Scan(ctx, result); err != nil {
log.Error("Failed to SearchLog: Scan params(%s) error(%+v)", r.Params(), err)
return nil, err
}
return result, nil
}
// SearchFaceCheckRes is.
func (d *Dao) SearchFaceCheckRes(ctx context.Context, fileName string) (*model.SearchLogResult, error) {
index := fmt.Sprintf("log_audit_161_%s", time.Now().Format("2006_01"))
r := d.es.NewRequest("log_audit").
Index(index).
Fields("uid", "uname", "oid", "type", "action", "str_0", "str_1", "str_2", "int_0", "int_1", "int_2", "ctime", "extra_data").
WhereEq("str_1", "face").
WhereEq("str_2", fileName).
Order("ctime", elastic.OrderDesc).
Pn(1).
Ps(1)
result := &model.SearchLogResult{}
if err := r.Scan(ctx, result); err != nil {
log.Error("Failed to SearchFaceCheckRes: Scan params(%s) error(%+v)", r.Params(), err)
return nil, err
}
return result, nil
}
// SearchUserAuditLog is.
func (d *Dao) SearchUserAuditLog(ctx context.Context, mid int64) (*model.SearchLogResult, error) {
nowYear := time.Now().Year()
index := []string{
fmt.Sprintf("log_audit_121_%d", nowYear),
fmt.Sprintf("log_audit_121_%d", nowYear-1),
}
r := d.es.NewRequest("log_audit").
Index(index...).
Fields("uid", "uname", "oid", "type", "action", "str_0", "str_1", "str_2", "int_0", "int_1", "int_2", "ctime", "extra_data").
WhereEq("action", "base_audit").
WhereEq("oid", strconv.FormatInt(mid, 10)).
Order("ctime", elastic.OrderDesc).
Pn(1).
Ps(5)
result := &model.SearchLogResult{}
if err := r.Scan(ctx, result); err != nil {
log.Error("Failed to SearchUserAuditLog: Scan params(%s) error(%+v)", r.Params(), err)
return nil, err
}
return result, nil
}
// SearchUserPropertyReview is.
func (d *Dao) SearchUserPropertyReview(ctx context.Context, mid int64, property []int, state []int, isMonitor, isDesc bool, operator, stime, etime string, pn, ps int) (*model.SearchUserPropertyReviewResult, error) {
order := elastic.OrderAsc
if isDesc {
order = elastic.OrderDesc
}
monitor := 0
if isMonitor {
monitor = 1
}
r := d.es.NewRequest("user_property_review").
Fields("id").
Index("user_property_review").
WhereEq("is_monitor", monitor).
WhereRange("ctime", stime, etime, elastic.RangeScopeLcRc).
Order("id", order).
Ps(ps).
Pn(pn)
if mid > 0 {
r.WhereEq("mid", mid)
}
if operator != "" {
r.WhereEq("operator", operator)
}
if len(property) > 0 {
r.WhereIn("property", property)
}
if len(state) > 0 {
r.WhereIn("state", state)
}
result := &model.SearchUserPropertyReviewResult{}
if err := r.Scan(ctx, result); err != nil {
return nil, errors.WithStack(err)
}
return result, nil
}