You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
163 lines
4.4 KiB
163 lines
4.4 KiB
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 |
|
}
|
|
|