From 6794af1462862f51d9fb9693df3101aa215025a0 Mon Sep 17 00:00:00 2001 From: howell <2827207845@qq.com> Date: Tue, 8 Feb 2022 14:20:52 +0800 Subject: [PATCH] =?UTF-8?q?feat:=E6=89=B9=E5=8F=91=E6=89=BE=E4=BD=A0?= =?UTF-8?q?=E5=8F=AF=E8=83=BD=E5=96=9C=E6=AC=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/app/shoppingcart/shopping.go | 2 +- internal/v2/logic/app/shopping/logic.go | 201 +++++++++--------- 2 files changed, 99 insertions(+), 104 deletions(-) diff --git a/internal/v2/controller/app/shoppingcart/shopping.go b/internal/v2/controller/app/shoppingcart/shopping.go index 758c335..24c7e41 100644 --- a/internal/v2/controller/app/shoppingcart/shopping.go +++ b/internal/v2/controller/app/shoppingcart/shopping.go @@ -41,7 +41,7 @@ func (s ShoppingController) ViewLikeMaybe(c *gin.Context) { back.Fail(c, err.Error()) return } - rest := shopping.LogicShoppingCart.ViewLikeMayBe(c, p.UserId) + rest := shopping.LogicShoppingCart.ViewLikeMayBe(p.UserId, p.IsSale) back.Suc(c, "", rest) } diff --git a/internal/v2/logic/app/shopping/logic.go b/internal/v2/logic/app/shopping/logic.go index 751b9a2..e5728cf 100644 --- a/internal/v2/logic/app/shopping/logic.go +++ b/internal/v2/logic/app/shopping/logic.go @@ -2,21 +2,15 @@ package shopping import ( "fmt" + mysql2 "git.oa00.com/go/mysql" + "github.com/golangkit/formatime" + "github.com/shopspring/decimal" "math/rand" goods3 "recook/internal/api/mobile/goods" - "recook/internal/cache" "recook/internal/dbc" "recook/internal/model/goods" "recook/internal/v2/model/keywords" goods2 "recook/internal/v2/model/recook/goods" - "recook/internal/v2/model/recook/user" - "strconv" - - mysql2 "git.oa00.com/go/mysql" - "github.com/gin-gonic/gin" - "github.com/golangkit/formatime" - "github.com/shopspring/decimal" - "gorm.io/gorm/clause" ) type logic struct { @@ -66,127 +60,128 @@ func (l logic) ViewLike(id uint, userID uint, isSale bool) []goods3.QueryCategor } var likeList []int dbc.DB.Table((&goods2.Associate{}).TableName()).Where("goods_id=?", id).Pluck("other_goods_id", &likeList) - var newlike []int + var newLike []int num := rand.Perm(len(likeList)) for _, v := range num { - newlike = append(newlike, likeList[v]) - if len(newlike) == 10 { + newLike = append(newLike, likeList[v]) + if len(newLike) == 10 { break } } var goodsList []goods.Information - dbc.DB.Table((&goods.Information{}).TableName()).Where("publish_status = 1").Where("id in(?)", newlike).Find(&goodsList) + dbc.DB.Table((&goods.Information{}).TableName()).Where("publish_status = 1").Where("id in(?)", newLike).Find(&goodsList) return goods3.GetGoodsRespByInfoList(goodsList, userID, false) } //ViewLikeMayBe 可能喜欢的商品 -func (l logic) ViewLikeMayBe(c *gin.Context, userId uint) []goods3.QueryCategoryGoodsListResp { +func (l logic) ViewLikeMayBe(userId uint, isSale bool) []goods3.QueryCategoryGoodsListResp { //浏览过的商品 - var kewords []string - mysql2.Db.Table((&keywords.RecookUserKeywordsModel{}).TableName()).Where("user_id=?", userId).Limit(10).Pluck("keywords", &kewords) + var kw []string + mysql2.Db.Table((&keywords.RecookUserKeywordsModel{}).TableName()).Where("user_id=?", userId).Limit(10).Pluck("keywords", &kw) where := mysql2.Db.Where("publish_status = 1") - for _, v := range kewords { + if isSale { + where = mysql2.Db.Where("sale_publish = 1 and is_sale=1") + } + for _, v := range kw { where = where.Where("goods_name like ?", fmt.Sprintf("%%%v%%", v)) } var goodsList []goods.Information - if len(kewords) > 0 { + if len(kw) > 0 { mysql2.Db.Table((&goods.Information{}).TableName()).Where(where).Find(&goodsList) } fmt.Println("sql:", len(goodsList)) - var newgoodsList []goods.Information + var newGoodsList []goods.Information if len(goodsList) >= 20 { num := rand.Perm(len(goodsList)) num1 := num[:20] for _, v := range num1 { - newgoodsList = append(newgoodsList, goodsList[v]) + newGoodsList = append(newGoodsList, goodsList[v]) } } - if len(goodsList) < 20 { - newgoodsList = getFillList(c, goodsList, "") - } - return goods3.GetGoodsRespByInfoList(newgoodsList, userId, false) + return goods3.GetGoodsRespByInfoList(newGoodsList, userId, isSale) } -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 -} +//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 +//} //func getGoodsRespByInfoList(goodsList []goods.Information) []queryCategoryGoodsListResp { // list := make([]queryCategoryGoodsListResp, 0, 0)