193 lines
4.9 KiB
Go
193 lines
4.9 KiB
Go
package search
|
||
|
||
import (
|
||
"context"
|
||
"strconv"
|
||
"strings"
|
||
|
||
"go-common/app/interface/main/creative/model/search"
|
||
"go-common/library/database/elastic"
|
||
"go-common/library/ecode"
|
||
"go-common/library/log"
|
||
)
|
||
|
||
var (
|
||
orderMap = map[string]string{
|
||
"senddate": "pubdate", //发布时间
|
||
"click": "click", //点击数
|
||
"scores": "review", //评论
|
||
"stow": "favorite", //收藏
|
||
"dm_count": "dm_count", //弹幕
|
||
}
|
||
|
||
applyStateMap = map[string]string{
|
||
"pending": "pending",
|
||
"processed": "processed",
|
||
"neglected": "neglected",
|
||
}
|
||
)
|
||
|
||
// ArchivesES search archives by es.
|
||
func (d *Dao) ArchivesES(c context.Context, mid int64, tid int16, keyword, order, class, ip string, pn, ps, coop int) (sres *search.Result, err error) {
|
||
r := d.es.NewRequest("creative_archive_staff").Fields(
|
||
"id",
|
||
"pid",
|
||
"typeid",
|
||
"title",
|
||
"state",
|
||
"cover",
|
||
"description",
|
||
"duration",
|
||
"pubdate",
|
||
)
|
||
r.Index("creative_archive").Pn(pn).Ps(ps).OrderScoreFirst(false)
|
||
if mid > 0 && coop == 0 {
|
||
cmbup := &elastic.Combo{}
|
||
cmbup.ComboEQ([]map[string]interface{}{
|
||
{"mid": mid},
|
||
})
|
||
r.WhereCombo(cmbup.MinEQ(1))
|
||
} else if mid > 0 && coop == 1 {
|
||
cmbup := &elastic.Combo{}
|
||
cmbup.ComboEQ([]map[string]interface{}{
|
||
{"mid": mid},
|
||
{"staff_mid": mid},
|
||
})
|
||
r.WhereCombo(cmbup.MinEQ(1))
|
||
}
|
||
if keyword != "" { //筛选稿件标题或者描述
|
||
r.WhereLike([]string{"title", "description"}, []string{keyword}, true, "low")
|
||
}
|
||
if tid > 0 {
|
||
r.WhereEq("pid", tid)
|
||
}
|
||
if class != "" {
|
||
if len(strings.Split(class, ",")) == 1 { //如果筛选全部则不传参数
|
||
r.WhereEq("state", class) //state: is_pubing,pubed,not_pubed(全部) pubed (已通过) not_pubed(未通过) is_pubing(进行中)
|
||
}
|
||
}
|
||
if order != "" {
|
||
if o, ok := orderMap[order]; ok {
|
||
r.Order(o, "desc")
|
||
}
|
||
} else {
|
||
r.Order("pubdate", "desc") //默认按发布时间倒序排
|
||
}
|
||
log.Info("ArchivesES params(%s)", r.Params())
|
||
var res = &search.ArcResult{}
|
||
if err = r.Scan(c, res); err != nil {
|
||
log.Error("ArchivesES r.Scan error(%v)", err)
|
||
err = ecode.CreativeSearchErr
|
||
return
|
||
}
|
||
sres = &search.Result{}
|
||
sres.Page.Pn = res.Page.Num
|
||
sres.Page.Ps = res.Page.Size
|
||
sres.Page.Count = res.Page.Total
|
||
if res.Result.PList != nil {
|
||
sres.Class = &search.ClassCount{ //获取按稿件状态计数
|
||
Pubed: res.Result.PList.Pubed.Count,
|
||
NotPubed: res.Result.PList.NotPubed.Count,
|
||
Pubing: res.Result.PList.IsPubing.Count,
|
||
}
|
||
}
|
||
tcs := make(map[int16]*search.TypeCount)
|
||
for _, v := range res.Result.TList { //获取按一级分区稿件计数
|
||
if v != nil {
|
||
key, err := strconv.ParseInt(v.Key, 10, 16)
|
||
if err != nil {
|
||
log.Error("strconv.ParseInt(%s)|error(%v)", v.Key, err)
|
||
return nil, err
|
||
}
|
||
tid = int16(key)
|
||
tc := &search.TypeCount{
|
||
Tid: tid,
|
||
Count: int64(v.Count),
|
||
}
|
||
tcs[tid] = tc
|
||
}
|
||
}
|
||
sres.Type = tcs
|
||
for _, v := range res.Result.Vlist {
|
||
if v != nil {
|
||
sres.Aids = append(sres.Aids, v.ID)
|
||
}
|
||
}
|
||
return
|
||
}
|
||
|
||
// ArchivesStaffES search staff applies by es.
|
||
func (d *Dao) ArchivesStaffES(c context.Context, mid int64, tid int16, keyword, state string, pn, ps int) (sres *search.StaffApplyResult, err error) {
|
||
r := d.es.NewRequest("creative_archive_apply").Fields(
|
||
"id",
|
||
"pid",
|
||
"typeid",
|
||
"title",
|
||
"state",
|
||
"cover",
|
||
"description",
|
||
"duration",
|
||
"pubdate",
|
||
)
|
||
r.Index("creative_archive").Pn(pn).Ps(ps).OrderScoreFirst(false)
|
||
if mid > 0 {
|
||
r.WhereEq("apply_staff.apply_staff_mid", mid)
|
||
}
|
||
if state != "" {
|
||
if o, ok := applyStateMap[state]; ok {
|
||
r.WhereEq("apply_staff.deal_state", o)
|
||
}
|
||
} else {
|
||
r.WhereEq("apply_staff.deal_state", "pending")
|
||
}
|
||
if keyword != "" { //筛选稿件标题或者描述
|
||
r.WhereLike([]string{"title", "description"}, []string{keyword}, true, "low")
|
||
}
|
||
if tid > 0 {
|
||
r.WhereEq("pid", tid)
|
||
}
|
||
log.Info("ArchivesStaffES params(%s)", r.Params())
|
||
var res = &search.ApplyResult{}
|
||
if err = r.Scan(c, res); err != nil {
|
||
log.Error("ArchivesStaffES r.Scan error(%v)", err)
|
||
err = ecode.CreativeSearchErr
|
||
return
|
||
}
|
||
sres = &search.StaffApplyResult{}
|
||
sres.Page.Pn = res.Page.Num
|
||
sres.Page.Ps = res.Page.Size
|
||
sres.Page.Count = res.Page.Total
|
||
//tlist
|
||
if res.Result.ApplyPList != nil {
|
||
sres.StateCount = &search.ApplyStateCount{ //获取按稿件状态计数
|
||
Pending: res.Result.ApplyPList.Pending.Count,
|
||
Processed: res.Result.ApplyPList.Processed.Count,
|
||
Neglected: res.Result.ApplyPList.Neglected.Count,
|
||
}
|
||
}
|
||
// vlist
|
||
tcs := make(map[int16]*search.TypeCount)
|
||
for _, v := range res.Result.TList { //获取按一级分区稿件计数
|
||
if v != nil {
|
||
key, err := strconv.ParseInt(v.Key, 10, 16)
|
||
if err != nil {
|
||
log.Error("strconv.ParseInt(%s)|error(%v)", v.Key, err)
|
||
return nil, err
|
||
}
|
||
tid = int16(key)
|
||
tc := &search.TypeCount{
|
||
Tid: tid,
|
||
Count: int64(v.Count),
|
||
}
|
||
tcs[tid] = tc
|
||
}
|
||
}
|
||
sres.Type = tcs
|
||
for _, v := range res.Result.Vlist {
|
||
if v != nil {
|
||
sres.Aids = append(sres.Aids, v.ID)
|
||
}
|
||
}
|
||
return
|
||
}
|