|
|
|
@ -12,6 +12,7 @@ import (
|
|
|
|
|
"recook/internal/v2/model/keywords"
|
|
|
|
|
goods2 "recook/internal/v2/model/recook/goods"
|
|
|
|
|
"recook/internal/v2/model/recook/user"
|
|
|
|
|
"recook/internal/v2/model/search_ali"
|
|
|
|
|
"recook/tools"
|
|
|
|
|
"strconv"
|
|
|
|
|
"strings"
|
|
|
|
@ -22,7 +23,6 @@ import (
|
|
|
|
|
"github.com/golangkit/formatime"
|
|
|
|
|
"github.com/shopspring/decimal"
|
|
|
|
|
gorm2 "gorm.io/gorm"
|
|
|
|
|
"gorm.io/gorm/clause"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
type queryOrderGoodsListParam struct {
|
|
|
|
@ -67,87 +67,6 @@ type QueryCategoryGoodsListResp struct {
|
|
|
|
|
SecKill SecKillDetail `json:"sec_kill"`
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func getFillList(c *gin.Context, goodsList []goods.Information, volSort string) []goods.Information {
|
|
|
|
|
// 显示记录太少
|
|
|
|
|
// 1.用浏览历史记录填充
|
|
|
|
|
// 2.用T1 - T4商品记录填充
|
|
|
|
|
|
|
|
|
|
uid, _ := strconv.Atoi(c.Request.Header.Get("X-Recook-ID"))
|
|
|
|
|
deviceType := cache.GetDeviceType(c)
|
|
|
|
|
recookUserLoginModel := user.RecookUserLoginModel{}
|
|
|
|
|
tokenInfo := recookUserLoginModel.FindByIdAndDeviceType(uint(uid), deviceType)
|
|
|
|
|
|
|
|
|
|
// 购买记录
|
|
|
|
|
s11 := mysql2.Db.Select("goods_id").Table("recook_order_goods_detail").
|
|
|
|
|
Where("user_id = ?", tokenInfo.UserId)
|
|
|
|
|
|
|
|
|
|
// 已经存在的数据
|
|
|
|
|
var id []uint
|
|
|
|
|
for _, v := range goodsList {
|
|
|
|
|
id = append(id, v.ID)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
add := 20 - len(goodsList)
|
|
|
|
|
// 浏览记录
|
|
|
|
|
sh1 := mysql2.Db.Table("recook_app_user_history").Select("MAX(id)").
|
|
|
|
|
Where("user_id = ?", tokenInfo.UserId).
|
|
|
|
|
Where("goods_id not in (?)", s11).
|
|
|
|
|
Group("goods_id")
|
|
|
|
|
|
|
|
|
|
if len(id) != 0 {
|
|
|
|
|
sh1 = sh1.Where("goods_id not in (?)", id)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var args []uint
|
|
|
|
|
mysql2.Db.Table("recook_app_user_history").
|
|
|
|
|
Select("goods_id").Where("id in (?)", sh1).Order("id DESC").Pluck("goods_id", &args)
|
|
|
|
|
|
|
|
|
|
var history []goods.Information
|
|
|
|
|
query := mysql2.Db.Table("recook_goods_info").Clauses(clause.OrderBy{
|
|
|
|
|
Expression: clause.Expr{SQL: "FIELD(id,?)", Vars: []interface{}{args}, WithoutParentheses: true}}).
|
|
|
|
|
Where("id in (?) AND publish_status = 1", args)
|
|
|
|
|
|
|
|
|
|
if volSort != "" {
|
|
|
|
|
query = query.Order("sales_volume " + volSort)
|
|
|
|
|
}
|
|
|
|
|
query.Limit(add).Find(&history)
|
|
|
|
|
|
|
|
|
|
goodsList = append(goodsList, history...)
|
|
|
|
|
id = []uint{}
|
|
|
|
|
for _, v := range goodsList {
|
|
|
|
|
id = append(id, v.ID)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if len(goodsList) < 20 {
|
|
|
|
|
// 检索 t1 - t4
|
|
|
|
|
add = 20 - len(goodsList)
|
|
|
|
|
s1 := mysql2.Db.Table("recook_activity_info").Select("MAX(id)").
|
|
|
|
|
Where("is_active = 1 AND type > 0").Group("type")
|
|
|
|
|
|
|
|
|
|
s2 := mysql2.Db.Table("recook_activity_goods").
|
|
|
|
|
Select("goods_id").
|
|
|
|
|
Where("activity_id IN (?)", s1).
|
|
|
|
|
Where("goods_id NOT IN (?)", s11)
|
|
|
|
|
|
|
|
|
|
if len(id) != 0 {
|
|
|
|
|
s2 = s2.Where("goods_id not in (?)", id)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var remain []goods.Information
|
|
|
|
|
query = mysql2.Db.Table("recook_goods_info").
|
|
|
|
|
Where("id in (?) AND publish_status = 1", s2)
|
|
|
|
|
|
|
|
|
|
if volSort != "" {
|
|
|
|
|
query = query.Order("sales_volume " + volSort)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
query.Limit(add).Find(&remain)
|
|
|
|
|
|
|
|
|
|
goodsList = append(goodsList, remain...)
|
|
|
|
|
}
|
|
|
|
|
return goodsList
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// QueryGoodsListByComprehension 综合排序
|
|
|
|
|
func QueryGoodsListByComprehension(c *gin.Context) {
|
|
|
|
|
var p queryOrderGoodsListParam
|
|
|
|
@ -191,34 +110,16 @@ func QueryGoodsListByComprehension(c *gin.Context) {
|
|
|
|
|
q3 = q3.Where("vendor_id = 2000")
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
findByKeyWord(q3, p.Keyword, &goodsList)
|
|
|
|
|
findByKeyWord(q3, p.Keyword, &goodsList, p.Page)
|
|
|
|
|
back.Suc(c, "", GetGoodsRespByInfoList(goodsList, p.UserId))
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func findByKeyWord(q *gorm2.DB, str string, data *[]goods.Information) {
|
|
|
|
|
if len(str) > 0 {
|
|
|
|
|
r := es.IKReq{
|
|
|
|
|
Text: str,
|
|
|
|
|
Tokenizer: "ik_smart",
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
res := es.GetIK(r)
|
|
|
|
|
if len(res.Tokens) <= 1 {
|
|
|
|
|
q.Find(&data, `goods_name like "%`+str+`%"`)
|
|
|
|
|
} else {
|
|
|
|
|
//keys := make([]string, 0)
|
|
|
|
|
for _, v := range res.Tokens {
|
|
|
|
|
q = q.Where(`goods_name like "%` + v.Token + `%"`)
|
|
|
|
|
//keys = append(keys, v.Token)
|
|
|
|
|
}
|
|
|
|
|
//score := fmt.Sprintf("MATCH(goods_name) AGAINST('%s' in boolean mode)", strings.Join(keys, "* ")+"*")
|
|
|
|
|
//selectSql := fmt.Sprintf("a.*, (%s) as score", score)
|
|
|
|
|
//q.Select(selectSql).Or("MATCH(goods_name) AGAINST(? in boolean mode)", strings.Join(keys, "* ")+"*").
|
|
|
|
|
// Order("score desc").Find(&data)
|
|
|
|
|
q.Find(&data)
|
|
|
|
|
}
|
|
|
|
|
func findByKeyWord(q *gorm2.DB, str string, data *[]goods.Information, page uint) {
|
|
|
|
|
if str != "" {
|
|
|
|
|
gl, _, _ := search_ali.SearchByAliES(str, 20, int(page))
|
|
|
|
|
q.Where("a.id in (?)", gl).Find(&data)
|
|
|
|
|
} else {
|
|
|
|
|
q.Find(&data)
|
|
|
|
|
q.Limit(20).Offset(int(page * 20)).Find(&data)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -263,24 +164,7 @@ func QueryGoodsListBySalesVolume(c *gin.Context) {
|
|
|
|
|
case 3:
|
|
|
|
|
q3 = q3.Where("vendor_id = 2000")
|
|
|
|
|
}
|
|
|
|
|
findByKeyWord(q3, p.Keyword, &goodsList)
|
|
|
|
|
//if p.Kind == 0 {
|
|
|
|
|
// if len(goodsList) < 20 && p.Page == 0 && p.Keyword != "" {
|
|
|
|
|
// goodsList = getFillList(c, goodsList, p.Order)
|
|
|
|
|
// if p.Order != "" {
|
|
|
|
|
// switch p.Order {
|
|
|
|
|
// case "desc":
|
|
|
|
|
// gs := DescVolGoodsList(goodsList)
|
|
|
|
|
// sort.Sort(gs)
|
|
|
|
|
// goodsList = gs
|
|
|
|
|
// case "asc":
|
|
|
|
|
// gs := AscVolGoodsList(goodsList)
|
|
|
|
|
// sort.Sort(gs)
|
|
|
|
|
// goodsList = gs
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
//}
|
|
|
|
|
findByKeyWord(q3, p.Keyword, &goodsList, p.Page)
|
|
|
|
|
back.Suc(c, "", GetGoodsRespByInfoList(goodsList, p.UserId))
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -349,13 +233,7 @@ func QueryGoodsListByDiscountPrice(c *gin.Context) {
|
|
|
|
|
case 3:
|
|
|
|
|
q3 = q3.Where("vendor_id = 2000")
|
|
|
|
|
}
|
|
|
|
|
findByKeyWord(q3, p.Keyword, &goodsInfoIdList)
|
|
|
|
|
//if p.Kind == 0 {
|
|
|
|
|
// if len(goodsInfoIdList) < 20 && p.Page == 0 && p.Keyword != "" {
|
|
|
|
|
// goodsInfoIdList = getFillList(c, goodsInfoIdList, "")
|
|
|
|
|
// }
|
|
|
|
|
//}
|
|
|
|
|
|
|
|
|
|
findByKeyWord(q3, p.Keyword, &goodsInfoIdList, p.Page)
|
|
|
|
|
for _, v := range goodsInfoIdList {
|
|
|
|
|
goodsIdList = append(goodsIdList, v.ID)
|
|
|
|
|
}
|
|
|
|
|