Explorar o código

feat:p525 jydocs-back 搜索接口调整

fuwencai hai 1 ano
pai
achega
a0902f9432

+ 3 - 2
jydocs-back/config.json

@@ -11,7 +11,7 @@
     "stdDoc": {
       "key": "jydocs.stdlib.rpc",
       "address": [
-        "192.168.3.206:2379"
+        "127.0.0.1:2379"
       ]
     },
     "userDoc": {
@@ -41,5 +41,6 @@
     "测试"
   ],
   "searchNumLimit": 200,
-  "shareUrl": "https://web-wky.jydev.jianyu360.com/swordfish/SingleLogin"
+  "shareUrl": "https://web-wky.jydev.jianyu360.com/swordfish/SingleLogin",
+  "doudingImg": "https://img3.douding.cn/%s_90x80.jpg"
 }

+ 1 - 0
jydocs-back/config/config.go

@@ -27,6 +27,7 @@ type appConfig struct {
 	IndexSearchTag []string `json:"indexSearchTag"` //首页标签
 	SearchNumLimit int64    `json:"searchNumLimit"` //检索条数限制
 	ShareUrl       string   `json:"shareUrl"`       //分享地址
+	DoudingImg     string   `json:"doudingImg"`     // 豆丁封面图片地址
 }
 
 type rpcConfig struct {

+ 1 - 3
jydocs-back/go.mod

@@ -2,11 +2,9 @@ module jy-docs
 
 go 1.21
 
-toolchain go1.21rc2
-
 require (
 	app.yhyue.com/moapp/jyPoints v1.1.2-0.20231020023521-1a4b1bbf9736
-	app.yhyue.com/moapp/jy_docs v1.1.1
+	app.yhyue.com/moapp/jy_docs v1.1.2-0.20240529083647-124db78ce6f4
 	app.yhyue.com/moapp/jybase v0.0.0-20240523083821-42a82b37ae20
 	app.yhyue.com/moapp/jyfs v0.0.0-20231024061508-480c270480d4
 	app.yhyue.com/moapp/jypkg v1.20.1

+ 4 - 0
jydocs-back/go.sum

@@ -6,6 +6,10 @@ app.yhyue.com/moapp/jyPoints v1.1.2-0.20231020023521-1a4b1bbf9736 h1:7Vl3qq1nJZy
 app.yhyue.com/moapp/jyPoints v1.1.2-0.20231020023521-1a4b1bbf9736/go.mod h1:NEkVbas7w0Lg4/BPoN4rkl808q4OKv7Bk5lwTXvOThU=
 app.yhyue.com/moapp/jy_docs v1.1.1 h1:eRCDfXuMMVMspB77gL7x8Pc3IU8FzHtTfLD4khu26lM=
 app.yhyue.com/moapp/jy_docs v1.1.1/go.mod h1:54sK98Z5tpMFd2aPLN1IRfEyV3zpFRyFxKj6oi2C5/Q=
+app.yhyue.com/moapp/jy_docs v1.1.2-0.20240527084525-87fb4a434b94 h1:IQ4HT0TWdx18VAsxnrusiOhey3UaMNDv3oUs/X55itc=
+app.yhyue.com/moapp/jy_docs v1.1.2-0.20240527084525-87fb4a434b94/go.mod h1:54sK98Z5tpMFd2aPLN1IRfEyV3zpFRyFxKj6oi2C5/Q=
+app.yhyue.com/moapp/jy_docs v1.1.2-0.20240529083647-124db78ce6f4 h1:wC+IgdEWOdGE/wVl8MDtyuscZpGSd65aBYCOaZahx0g=
+app.yhyue.com/moapp/jy_docs v1.1.2-0.20240529083647-124db78ce6f4/go.mod h1:54sK98Z5tpMFd2aPLN1IRfEyV3zpFRyFxKj6oi2C5/Q=
 app.yhyue.com/moapp/jybase v0.0.0-20210322021809-141cc2c37946/go.mod h1:29ShuI8y7qEyg2KviHSx1iamiCioBKdTMm2ndVzWAhk=
 app.yhyue.com/moapp/jybase v0.0.0-20220415064050-37ce64b3e2d4/go.mod h1:qNRA0sHuYqcLoYoP8irpaWnW9YsXixe6obBIkwaXpD0=
 app.yhyue.com/moapp/jybase v0.0.0-20220418104200-46c3fff161c7/go.mod h1:qNRA0sHuYqcLoYoP8irpaWnW9YsXixe6obBIkwaXpD0=

+ 12 - 0
jydocs-back/public/consts.go

@@ -0,0 +1,12 @@
+package public
+
+const (
+	ProductTypeMemberFree = 1 // 商品类型 会员免费
+	ProductTypePremium    = 2 // 商品类型 精品文档
+	ProductTypeFree       = 3 // 商品类型 免费
+	SourceJy              = 1 // 文档来源 剑鱼
+	SourceDd              = 2 // 文档来源 豆丁
+
+	// 缓存key
+	
+)

+ 25 - 8
jydocs-back/rpc/stdDocRpc.go

@@ -2,7 +2,6 @@ package rpc
 
 import (
 	"app.yhyue.com/moapp/jy_docs/rpc/stdlib/stdlib"
-	"app.yhyue.com/moapp/jy_docs/rpc/stdlib/stdlibclient"
 	"context"
 	"fmt"
 	"github.com/zeromicro/go-zero/core/discov"
@@ -12,10 +11,10 @@ import (
 )
 
 // 标准库RPC接口
-var jyStdDocStdlib stdlibclient.Stdlib
+var jyStdDocStdlib stdlib.Stdlib
 
 func init() {
-	jyStdDocStdlib = stdlibclient.NewStdlib(zrpc.MustNewClient(zrpc.RpcClientConf{
+	jyStdDocStdlib = stdlib.NewStdlib(zrpc.MustNewClient(zrpc.RpcClientConf{
 		Etcd: discov.EtcdConf{
 			Key:   config.JyDocsAppConfig.RpcServers.StdDoc.Key,
 			Hosts: config.JyDocsAppConfig.RpcServers.StdDoc.Address,
@@ -36,12 +35,14 @@ param
 	dSort 下载排序
 	vSort 浏览量排序
 */
-func GetDocQuery(userId, keyWord, tag string, pageNum, pageSize int64, sort string) ([]*stdlib.Doc, int64, error) {
+func GetDocQuery(userId, keyWord, tag string, pageNum, pageSize int64, sort string, productType, docFileType int64) ([]*stdlib.Doc, int64, error) {
 	param := &stdlib.DocQueryRequest{
-		AppId:    config.JyDocsAppConfig.AppId,
-		KeyWord:  keyWord,
-		PageSize: pageSize,
-		PageNum:  pageNum,
+		AppId:       config.JyDocsAppConfig.AppId,
+		KeyWord:     keyWord,
+		PageSize:    pageSize,
+		PageNum:     pageNum,
+		ProductType: productType,
+		DocFileType: docFileType,
 	}
 	if tag != "" {
 		param.DocTag = []string{tag}
@@ -156,3 +157,19 @@ func DocStatistics(userId, docId string, sign int32) {
 		log.Printf("%s DocStatistics fail Message %v\n", userId, resp)
 	}
 }
+
+func GetIndexTags() ([]string, error) {
+	resp, err := jyStdDocStdlib.DocIndexTag(context.Background(), &stdlib.DocIndexTagReq{})
+	if err != nil {
+		log.Printf("GetIndexTags call error %v\n", err)
+		return nil, err
+	}
+	if resp.Code != 1 {
+		log.Printf("GetIndexTags fail Message %v\n", resp.Msg)
+		return nil, fmt.Errorf("获取内容失败")
+	}
+	if resp.Tags == nil {
+		return nil, fmt.Errorf("查询异常")
+	}
+	return resp.Tags, nil
+}

+ 33 - 5
jydocs-back/servers/stdDoc.go

@@ -32,23 +32,50 @@ func (stdDoc *StdDoc) Search() {
 		sort := stdDoc.GetString("sort")                          //排序 tSort dSort vSort
 		pageNumReq, _ := stdDoc.GetInt("num")                     //页码 从1开始
 		pageSizeReq, _ := stdDoc.GetInt("size")                   //每页数量
+		productType, _ := stdDoc.GetInt("productType")            //每页数量
+		docFileType, _ := stdDoc.GetInt("docFileType")            //每页数量
 		pageNum, pageSize, err := public.PageNumParse(pageNumReq, pageSizeReq, config.JyDocsAppConfig.SearchNumLimit)
 		if err != nil {
 			return nil, err
 		}
-		if keyWord == "" {
+		if keyWord == "" && tag == "" && productType == 0 {
 			return nil, fmt.Errorf("检索内容不能为空")
 		}
 		if tag == "全部" {
 			tag = ""
 		}
-		list, total, err := rpc.GetDocQuery(userId, keyWord, tag, pageNum, pageSize, sort)
+		if keyWord == "" && (pageNum > 1 || pageSize > 50 || docFileType != 0) { // / 搜索时关键词不能为空 热门推荐 会员免费 精选推荐时关键词可以为空所以再判断一下页数
+			return nil, fmt.Errorf("参数有误")
+		}
+		// 关键词为空说明不是搜索过来的
+		topKey := fmt.Sprintf("jydoc_searchCache_%s_%d_%s_%d_%d", tag, productType, sort, pageNum, pageSize)
+		if keyWord == "" {
+			listCache := redis.Get("other", topKey)
+			if listCache != nil {
+				return listCache, nil
+			}
+		}
+		list, total, err := rpc.GetDocQuery(userId, keyWord, tag, pageNum, pageSize, sort, productType, docFileType)
 		if err != nil {
 			return nil, err
 		}
 		if total > config.JyDocsAppConfig.SearchNumLimit {
 			total = config.JyDocsAppConfig.SearchNumLimit
 		}
+		returnList := []interface{}{}
+		for _, v := range list {
+			//
+			if v.Source == public.SourceDd {
+				v.PreviewImgId = fmt.Sprintf(config.JyDocsAppConfig.DoudingImg, v.DocId)
+			} else {
+				v.PreviewImgId = fmt.Sprintf("https://%s.%s/%s", config.JyDocsAppConfig.OssBucket.Priv, config.JyDocsAppConfig.OssAdmin, v.PreviewImgId)
+			}
+			returnList = append(returnList, v)
+		}
+		// 存缓存
+		if keyWord == "" && len(returnList) > 0 {
+			redis.Put("other", topKey, list, 60*60*2)
+		}
 		return map[string]interface{}{
 			"total": total,
 			"list":  list,
@@ -61,7 +88,8 @@ func (stdDoc *StdDoc) Search() {
 }
 
 func (stdDoc *StdDoc) IndexTag() {
-	stdDoc.ServeJson(NewResult(config.JyDocsAppConfig.IndexSearchTag, nil))
+	tags, err := rpc.GetIndexTags()
+	stdDoc.ServeJson(NewResult(tags, err))
 }
 
 func (stdDoc *StdDoc) Detail() {
@@ -106,7 +134,7 @@ func (stdDoc *StdDoc) Recommend() {
 		if strings.Index(docTag, ",") > -1 {
 			docTag = strings.Split(docTag, ",")[0]
 		}
-		list, _, err := rpc.GetDocQuery(userId, "", docTag, 1, num+1, "dSort")
+		list, _, err := rpc.GetDocQuery(userId, "", docTag, 1, num+1, "dSort", 0, 0)
 		if err != nil {
 			return nil, err
 		}
@@ -182,7 +210,7 @@ func (stdDoc *StdDoc) TopList() {
 			return listCache, nil
 		}
 		log.Println("flush", topKey)
-		list, _, err := rpc.GetDocQuery(userId, "", "", 1, num, reqSort)
+		list, _, err := rpc.GetDocQuery(userId, "", "", 1, num, reqSort, 0, 0)
 		if err != nil {
 			return nil, err
 		}

+ 34 - 0
jydocs-back/test/p525.http

@@ -1,3 +1,37 @@
 POST http://127.0.0.1:821/jydocs/user/info
 Content-Type: application/x-www-form-urlencoded
 Cookie: SESSIONID=d6d16e5272466216cb3fb63c80f82cb2938a4e6c;
+
+### 热门文档
+POST http://127.0.0.1:821/jydocs/search
+Content-Type: application/x-www-form-urlencoded
+Cookie: SESSIONID=d6d16e5272466216cb3fb63c80f82cb2938a4e6c;
+
+tag=法律法规&&sort=vSort&num=1&size=10
+
+### 会员免费文档
+POST http://127.0.0.1:821/jydocs/search
+Content-Type: application/x-www-form-urlencoded
+Cookie: SESSIONID=d6d16e5272466216cb3fb63c80f82cb2938a4e6c;
+
+productType=1&&sort=vSort&num=1&size=10
+### 精选文档
+POST http://127.0.0.1:821/jydocs/search
+Content-Type: application/x-www-form-urlencoded
+Cookie: SESSIONID=d6d16e5272466216cb3fb63c80f82cb2938a4e6c;
+
+productType=2&&sort=vSort&num=1&size=10
+
+
+### 精选文档
+POST http://127.0.0.1:821/jydocs/search
+Content-Type: application/x-www-form-urlencoded
+Cookie: SESSIONID=d6d16e5272466216cb3fb63c80f82cb2938a4e6c;
+
+docFileType=2&&sort=vSort&num=1&size=10&keyWord=软件
+
+###
+POST http://127.0.0.1:821/jydocs/indexTag
+Content-Type: application/x-www-form-urlencoded
+Cookie: SESSIONID=d6d16e5272466216cb3fb63c80f82cb2938a4e6c;
+