fix: goods_info

master
howell 4 years ago
parent 4397a4e3b4
commit 12ff055a19

@ -7,6 +7,7 @@ require (
github.com/360EntSecGroup-Skylar/excelize/v2 v2.3.0
github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751
github.com/alibabacloud-go/opensearch-util v1.0.1
github.com/alibabacloud-go/tea v1.1.8
github.com/alibabacloud-go/tea-utils v1.4.3
github.com/aliyun/alibaba-cloud-sdk-go v1.61.454
github.com/aliyun/credentials-go v1.1.3

@ -50,7 +50,6 @@ github.com/alibabacloud-go/debug v0.0.0-20190504072949-9472017b5c68/go.mod h1:6p
github.com/alibabacloud-go/opensearch-util v1.0.1 h1:6WYmmFv0qTc3YHVJ9CEqrJPaOa+dJmeKehM9VwcfER8=
github.com/alibabacloud-go/opensearch-util v1.0.1/go.mod h1:jrHw5mkOJKinzpMoSKZCBwmdsdoVdPMejgE0cYj1TAs=
github.com/alibabacloud-go/tea v1.1.0/go.mod h1:IkGyUSX4Ba1V+k4pCtJUc6jDpZLFph9QMy2VUPTwukg=
github.com/alibabacloud-go/tea v1.1.7 h1:Wi3mcBU/oZistg85rmoJc6aiJ+MagsB+AeiF3Zwx6Tg=
github.com/alibabacloud-go/tea v1.1.7/go.mod h1:/tmnEaQMyb4Ky1/5D+SE1BAsa5zj/KeGOFfwYm3N/p4=
github.com/alibabacloud-go/tea v1.1.8 h1:vFF0707fqjGiQTxrtMnIXRjOCvQXf49CuDVRtTopmwU=
github.com/alibabacloud-go/tea v1.1.8/go.mod h1:/tmnEaQMyb4Ky1/5D+SE1BAsa5zj/KeGOFfwYm3N/p4=
@ -276,8 +275,8 @@ github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+
github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
github.com/gophercloud/gophercloud v0.3.0/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8=
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGaHF6qqu48+N2wcFQ5qg5FXgOdqsJ5d8=
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
github.com/gopherjs/gopherjs v0.0.0-20200217142428-fce0ec30dd00 h1:l5lAOZEym3oK3SQ2HBHWsJUfbNBiTXJDeW2QDxw9AQ0=
github.com/gopherjs/gopherjs v0.0.0-20200217142428-fce0ec30dd00/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg=
github.com/gorilla/handlers v1.4.2/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ=
@ -521,11 +520,11 @@ github.com/smartwalle/alipay/v3 v3.1.5 h1:oBJFxoaAhBL3XLtQ1HPw258drEL6ljHTFtCTQZ
github.com/smartwalle/alipay/v3 v3.1.5/go.mod h1:cZUMCCnsux9YAxA0/f3PWUR+7wckWtE1BqxbVRtGij0=
github.com/smartwalle/crypto4go v1.0.2 h1:9DUEOOsPhmp00438L4oBdcL8EZG1zumecft5bWj5phI=
github.com/smartwalle/crypto4go v1.0.2/go.mod h1:LQ7vCZIb7BE5+MuMtJBuO8ORkkQ01m4DXDBWPzLbkMY=
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d h1:zE9ykElWQ6/NYmHa3jpm/yHnI4xSofP+UP6SpjHcSeM=
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
github.com/smartystreets/assertions v1.1.0 h1:MkTeG1DMwsrdH7QtLXy5W+fUxWq+vmb6cLmyJ7aRtF0=
github.com/smartystreets/assertions v1.1.0/go.mod h1:tcbTF8ujkAEcZ8TElKY+i30BzYlVhC/LOxJk7iOWnoo=
github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a h1:pa8hGb/2YqsZKovtsgrwcDH1RZhVbTKCjLp47XpqCDs=
github.com/smartystreets/goconvey v0.0.0-20190330032615-68dc04aab96a/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s=
github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM=
github.com/src-d/gcfg v1.4.0/go.mod h1:p/UMsR43ujA89BJY9duynAwIpvqEujIH/jFlfL7jWoI=
@ -638,6 +637,7 @@ golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHl
golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
golang.org/x/mod v0.2.0 h1:KU7oHjnv3XNWfa5COkzUifxZmxp1TyI7ImMXqFxLwvQ=
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/net v0.0.0-20180218175443-cbe0f9307d01/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180611182652-db08ff08e862/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@ -751,8 +751,8 @@ golang.org/x/tools v0.0.0-20190907020128-2ca718005c18/go.mod h1:b+2E5dAYhXwXZwtn
golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20200117065230-39095c1d176c h1:FodBYPZKH5tAN2O60HlglMwXGAeV/4k+NKbli79M/2c=
golang.org/x/tools v0.0.0-20200117065230-39095c1d176c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200509030707-2212a7e161a5 h1:MeC2gMlMdkd67dn17MEby3rGXRxZtWeiRXOnISfTQ74=
golang.org/x/tools v0.0.0-20200509030707-2212a7e161a5/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
@ -807,7 +807,6 @@ gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df h1:n7WqCuqOuCbNr617RXOY0AW
gopkg.in/gomail.v2 v2.0.0-20160411212932-81ebce5c23df/go.mod h1:LRQQ+SO6ZHR7tOkpBDuZnXENFzX8qRjMDMyPD6BRkCw=
gopkg.in/h2non/gock.v1 v1.0.15/go.mod h1:sX4zAkdYX1TRGJ2JY156cFspQn4yRWn6p9EMdODlynE=
gopkg.in/ini.v1 v1.42.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
gopkg.in/ini.v1 v1.44.0 h1:YRJzTUp0kSYWUVFF5XAbDFfyiqwsl0Vb9R8TVP5eRi0=
gopkg.in/ini.v1 v1.44.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
gopkg.in/ini.v1 v1.56.0 h1:DPMeDvGTM54DXbPkVIZsp19fp/I2K7zwA/itHYHKo8Y=
gopkg.in/ini.v1 v1.56.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=

@ -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)
}

File diff suppressed because one or more lines are too long

@ -4,19 +4,93 @@ import (
"encoding/json"
"errors"
"fmt"
"os"
"strconv"
util "github.com/alibabacloud-go/tea-utils/service"
"github.com/alibabacloud-go/tea/tea"
"strconv"
)
type F struct {
ID uint `json:"id"`
GoodsName string `json:"goods_name"`
}
type Res struct {
Cmd string `json:"cmd"`
Fields F `json:"fields"`
}
var (
endPoint = "intranet.opensearch-cn-shanghai.aliyuncs.com"
aid = "LTAI5tR6hFZwtJLKFq4Sxibg"
ask = "pn0fKjGY7zoLzWdGjjcxJP95jrAhAn"
app = "zjyc"
table = "main"
)
func PushMessage() {
config := &Config{
Endpoint: tea.String(endPoint),
AccessKeyId: tea.String(aid),
AccessKeySecret: tea.String(ask),
}
client, _clientErr := NewClient(config)
// 如果 NewClient 过程中出现异常. 则 返回 _clientErr 且输出 错误信息.
if _clientErr != nil {
fmt.Println(_clientErr)
return
}
data, _ := os.ReadFile("goods_info.json")
runTime := &util.RuntimeOptions{
ConnectTimeout: tea.Int(5000),
ReadTimeout: tea.Int(10000),
Autoretry: tea.Bool(false),
IgnoreSSL: tea.Bool(false),
MaxIdleConns: tea.Int(50),
}
requestBody := make([]Res, 0)
json.Unmarshal(data, &requestBody)
for i := 0; i <= len(requestBody); i += 1000 {
body := make([]Res, 0)
if i+1000 > len(requestBody) {
body = requestBody[i:]
} else {
body = requestBody[i : i+1000]
}
// 发送请求的方法调用.
response, _requestErr := client.Request(
tea.String("POST"),
tea.String("/v3/openapi/apps/"+app+"/"+table+"/actions/bulk"),
nil,
nil,
body,
runTime)
// 如果 发送请求 过程中出现异常. 则 返回 _requestErr 且输出 错误信息.
if _requestErr != nil {
fmt.Println(_requestErr)
return
}
// 输出正常返回的 response 内容.
fmt.Println(response)
}
}
func SearchByAliES(keyWords string, limit, page int) (goodsList []uint, total uint, err error) {
// 创建请求用客户端实例
// Endpoint 为 要访问服务的区域域名.
// AccessKeyId 及AccessKeySecret 用于构造鉴权信息.
config := &Config{
Endpoint: tea.String("opensearch-cn-shanghai.aliyuncs.com"),
AccessKeyId: tea.String("LTAI5tBeJdJBq2R9quhwGeQH"),
AccessKeySecret: tea.String("sKvHrPwNWbVeDgUARAiGTluW06AQ4c"),
Endpoint: tea.String(endPoint),
AccessKeyId: tea.String(aid),
AccessKeySecret: tea.String(ask),
}
// New 一个client, 用以发送请求.
@ -44,12 +118,11 @@ func SearchByAliES(keyWords string, limit, page int) (goodsList []uint, total ui
// 搜索接口需要提供 appName.
// App 可以是 app 的版本信息. 也可以是 app 名称.
appName := "recook"
// 发送请求的方法调用.
response, _requestErr := client.Request(
tea.String("GET"),
tea.String("/v3/openapi/apps/"+appName+"/search"),
tea.String("/v3/openapi/apps/"+app+"/search"),
requestParams,
nil,
nil,

Loading…
Cancel
Save