123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 |
- package dao
- import (
- "context"
- "encoding/json"
- "fmt"
- "sort"
- "time"
- "go-common/app/admin/main/answer/model"
- "go-common/library/log"
- xtime "go-common/library/time"
- )
- // Page search page info
- type Page struct {
- Num int64 `json:"num"`
- Size int64 `json:"size"`
- Total int64 `json:"total"`
- }
- // SearchSubjectLog get subject logs
- type SearchSubjectLog struct {
- Page *Page
- Result []*struct {
- MID int64 `json:"mid"`
- Business string `json:"business"`
- Action string `json:"action"`
- ExtraData string `json:"extra_data"`
- Ctime string `json:"ctime"`
- }
- }
- // const .
- const (
- answerLogID = 15
- answerUpdate = "answer_update"
- basePass = "basePass"
- extraStartTime = "extraStartTime"
- extraCheck = "extraCheck"
- proQues = "proQues"
- proCheck = "proCheck"
- captcha = "captchaPass"
- level = "level"
- )
- // HistoryES search archives by es.
- func (d *Dao) HistoryES(c context.Context, arg *model.ArgHistory) (reply []*model.AnswerHistoryDB, err error) {
- var index []string
- for year := time.Now().Year(); year >= 2018; year-- { // 2018.12 开始接入日志
- index = append(index, fmt.Sprintf("log_user_action_%d_%d", answerLogID, year))
- }
- r := d.es.NewRequest("log_user_action").Index(index...)
- r.Fields("mid", "action", "ctime", "extra_data")
- r.WhereEq("mid", arg.Mid)
- r.Pn(arg.Pn).Ps(arg.Ps)
- res := &SearchSubjectLog{}
- if err = r.Scan(c, &res); err != nil || res == nil {
- log.Error("HistoryES:Scan params(%s) error(%v)", r.Params(), err)
- return
- }
- log.Error("HistoryES:%+v", res)
- mmh := make(map[int64]map[string]*model.AnswerHistory)
- for _, v := range res.Result {
- mh := make(map[string]*model.AnswerHistory)
- if err = json.Unmarshal([]byte(v.ExtraData), &mh); err != nil {
- log.Error("json.Unmarshal(%s) error(%v)", v.ExtraData, err)
- return
- }
- for k, v := range mh {
- if mmh[v.Hid] == nil {
- mmh[v.Hid] = make(map[string]*model.AnswerHistory)
- }
- mmh[v.Hid][k] = v
- }
- }
- data := make([]*model.AnswerHistory, 0)
- for _, v := range mmh {
- if v == nil {
- continue
- }
- h := new(model.AnswerHistory)
- if eh, ok := v[basePass]; ok && eh != nil {
- h = eh
- }
- if eh, ok := v[extraStartTime]; ok && eh != nil {
- h.StepExtraStartTime = eh.StepExtraStartTime
- h.Mtime = eh.Mtime
- }
- if eh, ok := v[extraCheck]; ok && eh != nil {
- h.StepExtraCompleteTime = eh.StepExtraCompleteTime
- h.Score = eh.Score
- h.StepExtraScore = eh.StepExtraScore
- h.Mtime = eh.Mtime
- }
- if eh, ok := v[proQues]; ok && eh != nil {
- h.StepTwoStartTime = eh.StepTwoStartTime
- h.Mtime = eh.Mtime
- }
- if eh, ok := v[proCheck]; ok && eh != nil {
- h.CompleteResult = eh.CompleteResult
- h.CompleteTime = eh.CompleteTime
- h.Score = eh.Score
- h.IsFirstPass = eh.IsFirstPass
- h.RankID = eh.RankID
- h.Mtime = eh.Mtime
- }
- if eh, ok := v[captcha]; ok && eh != nil {
- h.IsPassCaptcha = eh.IsPassCaptcha
- h.Mtime = eh.Mtime
- }
- if eh, ok := v[level]; ok && eh != nil {
- h.IsFirstPass = eh.IsFirstPass
- h.PassedLevel = eh.PassedLevel
- h.Mtime = eh.Mtime
- }
- data = append(data, h)
- }
- sort.Sort(model.Histories(data))
- return convent(data), nil
- }
- func convent(src []*model.AnswerHistory) []*model.AnswerHistoryDB {
- res := make([]*model.AnswerHistoryDB, 0, len(src))
- for _, s := range src {
- r := &model.AnswerHistoryDB{
- ID: s.ID,
- Hid: s.Hid,
- Mid: s.Mid,
- StartTime: xtime.Time(s.StartTime.Unix()),
- StepOneErrTimes: s.StepOneErrTimes,
- StepOneCompleteTime: s.StepOneCompleteTime,
- StepExtraStartTime: xtime.Time(s.StepExtraStartTime.Unix()),
- StepExtraCompleteTime: s.StepExtraCompleteTime,
- StepExtraScore: s.StepExtraScore,
- StepTwoStartTime: xtime.Time(s.StepTwoStartTime.Unix()),
- CompleteTime: xtime.Time(s.CompleteTime.Unix()),
- CompleteResult: s.CompleteResult,
- Score: s.Score,
- IsFirstPass: s.IsFirstPass,
- IsPassCaptcha: s.IsPassCaptcha,
- PassedLevel: s.PassedLevel,
- RankID: s.RankID,
- Ctime: xtime.Time(s.Ctime.Unix()),
- Mtime: xtime.Time(s.Mtime.Unix()),
- }
- res = append(res, r)
- }
- return res
- }
|