Browse Source

PC端文章分类图片显示

xingzai 3 years ago
parent
commit
485044e744
7 changed files with 113 additions and 51 deletions
  1. 41 20
      controllers/home.go
  2. 18 1
      controllers/report.go
  3. 35 10
      controllers/search.go
  4. 3 1
      models/article.go
  5. 1 0
      models/search.go
  6. 10 19
      services/elastic.go
  7. 5 0
      services/task.go

+ 41 - 20
controllers/home.go

@@ -106,34 +106,55 @@ func (this *HomeController) ListHome() {
 		br.Msg = "获取帖子数据失败,Err:" + err.Error()
 		return
 	}
-	lenList := len(list)
-	for i := 0; i < lenList; i++ {
-		item := list[i]
+	//研选的五张图片
+	detailResearch, err := models.GetConfigByCode("category_research_img_url")
+	if err != nil {
+		br.Msg = "获取数据失败"
+		br.ErrMsg = "获取数据研选分类图片失败,Err:" + err.Error()
+		return
+	}
+	researchList := strings.Split(detailResearch.ConfigValue, "{|}")
+	//对应分类的所图片
+	detailCategoryUrl, err := models.GetConfigByCode("category_map_img_url")
+	if err != nil {
+		br.Msg = "获取数据失败"
+		br.ErrMsg = "行业配置信息失败,Err:" + err.Error()
+		return
+	}
+	categoryUrlList := strings.Split(detailCategoryUrl.ConfigValue, "{|}")
+	mapCategoryUrl := make(map[string]string)
+	var categoryId string
+	var imgUrlChart string
+	for _, v := range categoryUrlList {
+		vslice := strings.Split(v, "_")
+		categoryId = vslice[0]
+		imgUrlChart = vslice[len(vslice)-1]
+		mapCategoryUrl[categoryId] = imgUrlChart
+	}
+
+	for k, v := range list {
+		item := list[k]
 		//如果文章一开始的内容是图片,优先展示第一张图片
-		imgurl, _ := services.FixArticleImgUrl(html.UnescapeString(list[i].Body))
+		imgurl, _ := services.FixArticleImgUrl(html.UnescapeString(list[k].Body))
 		newBody, _ := services.GetReportContentTextSub(item.Body)
-		list[i].Body = newBody
+		list[k].Body = newBody
 		if imgurl != "" {
-			//if len(newBody) > 0 {
-			//	strnum := strings.Index((list[i].Body), imgurl)
-			//	newBody = newBody[0:3]
-			//	strnum2 := strings.Index((list[i].Body), newBody)
-			//	if strnum < strnum2 {
-			//		list[i].BodyHtml = `<p><img src="` + imgurl + `" class="fr-fic fr-dib"></p>`
-			//	}
-			//} else {
-			//	list[i].BodyHtml = `<p><img src="` + imgurl + `" class="fr-fic fr-dib"></p>`
-			//}
-			list[i].BodyHtml = imgurl
+			list[k].BodyHtml = imgurl
 		}
-		list[i].PublishDate = utils.StrTimeToTime(item.PublishDate).Format(utils.FormatDateTimeNoSecond) //时间字符串格式转时间格式
+		list[k].PublishDate = utils.StrTimeToTime(item.PublishDate).Format(utils.FormatDateTimeNoSecond) //时间字符串格式转时间格式
 		if strings.Contains(item.CategoryName, "研选") {
-			list[i].IsResearch = true
+			list[k].IsResearch = true
 		}
 		if item.Pv > 999 {
-			list[i].Pv = 999
+			list[k].Pv = 999
+		}
+		//如果是研选系列的任意取五张图片的中的一张
+		if v.CategoryId == "0" {
+			knum := v.ArticleId % 5
+			list[k].ImgUrlPc = researchList[knum]
+		} else {
+			list[k].ImgUrlPc = mapCategoryUrl[v.CategoryId]
 		}
-		list[i].ImgUrlPc = "https://hongze.oss-cn-shanghai.aliyuncs.com/static/images/202112/20211206/UvMadc63MLZY6rnQZQgGZAFXkqwf.png"
 	}
 	resp.List = list
 	resp.Paging = page

+ 18 - 1
controllers/report.go

@@ -374,6 +374,23 @@ func (this *ReportController) List() {
 		br.ErrMsg = "获取帖子数据失败,Err:" + err.Error()
 		return
 	}
+	//对应分类的所图片
+	detailCategoryUrl, err := models.GetConfigByCode("category_map_img_url")
+	if err != nil {
+		br.Msg = "获取数据失败"
+		br.ErrMsg = "行业配置信息失败,Err:" + err.Error()
+		return
+	}
+	categoryUrlList := strings.Split(detailCategoryUrl.ConfigValue, "{|}")
+	mapCategoryUrl := make(map[string]string)
+	var categoryIdStr string
+	var imgUrlChart string
+	for _, v := range categoryUrlList {
+		vslice := strings.Split(v, "_")
+		categoryIdStr = vslice[0]
+		imgUrlChart = vslice[len(vslice)-1]
+		mapCategoryUrl[categoryIdStr] = imgUrlChart
+	}
 	lenList := len(list)
 	for i := 0; i < lenList; i++ {
 		item := list[i]
@@ -389,7 +406,7 @@ func (this *ReportController) List() {
 		if v.VideoUrl != "" {
 			list[k].IsHaveVideo = true
 		}
-		list[k].ImgUrlPc = "https://hongze.oss-cn-shanghai.aliyuncs.com/static/images/202112/20211206/UvMadc63MLZY6rnQZQgGZAFXkqwf.png"
+		list[k].ImgUrlPc = mapCategoryUrl[v.CategoryId]
 	}
 	resp.List = list
 	resp.Paging = page

+ 35 - 10
controllers/search.go

@@ -1,11 +1,11 @@
 package controllers
 
 import (
-	"fmt"
 	"github.com/rdlucklib/rdluck_tools/paging"
 	"hongze/hongze_cygx/models"
 	"hongze/hongze_cygx/services"
 	"hongze/hongze_cygx/utils"
+	"strings"
 	"time"
 )
 
@@ -37,8 +37,6 @@ func (this *SearchController) SearchList() {
 		currentIndex = 1
 	}
 	startSize = paging.StartIndex(currentIndex, pageSize)
-
-	fmt.Println(startSize)
 	keyWord := this.GetString("KeyWord")
 	orderColumn := this.GetString("OrderColumn")
 	if keyWord == "" {
@@ -52,6 +50,32 @@ func (this *SearchController) SearchList() {
 		br.Ret = 408
 		return
 	}
+
+	//研选的五张图片
+	detailResearch, errConfig := models.GetConfigByCode("category_research_img_url")
+	if errConfig != nil {
+		br.Msg = "获取数据失败"
+		br.ErrMsg = "获取数据研选分类图片失败,Err:" + errConfig.Error()
+		return
+	}
+	researchList := strings.Split(detailResearch.ConfigValue, "{|}")
+	//对应分类的所图片
+	detailCategoryUrl, errConfig := models.GetConfigByCode("category_map_img_url")
+	if errConfig != nil {
+		br.Msg = "获取数据失败"
+		br.ErrMsg = "行业配置信息失败,Err:" + errConfig.Error()
+		return
+	}
+	categoryUrlList := strings.Split(detailCategoryUrl.ConfigValue, "{|}")
+	mapCategoryUrl := make(map[string]string)
+	var categoryId string
+	var imgUrlChart string
+	for _, v := range categoryUrlList {
+		vslice := strings.Split(v, "_")
+		categoryId = vslice[0]
+		imgUrlChart = vslice[len(vslice)-1]
+		mapCategoryUrl[categoryId] = imgUrlChart
+	}
 	if orderColumn == "" {
 		orderColumn = "Matching"
 	}
@@ -67,15 +91,10 @@ func (this *SearchController) SearchList() {
 		err = tmpErr
 	} else {
 		tmpResult, tmpTotal, tmpErr := services.EsMultiMatchFunctionScoreQuerySort(indexName, keyWord, startSize, pageSize, user.UserId, orderColumn)
-		//tmpResult, tmpTotal, tmpErr := services.EsMultiMatchFunctionScoreQuery(indexName, keyWord, startSize, pageSize, user.UserId)
 		result = tmpResult
 		total = tmpTotal
 		err = tmpErr
 	}
-
-	//result, total, err := services.EsMultiMatchFunctionScoreQuery(indexName, keyWord, startSize, pageSize, user.UserId) //services.EsMatchFunctionScoreQuery(indexName, keyWord, startSize, pageSize) //services.EsMatchQuery(indexName, keyWord)
-	//result, total, err := services.SearchByKeyWordBack(indexName, keyWord, startSize, pageSize,user.UserId)
-	//result, total, err := services.EsMultiMatchFunctionScoreQueryFix(indexName, keyWord, startSize, pageSize)
 	if err != nil {
 		br.Msg = "检索失败"
 		br.ErrMsg = "检索失败,Err:" + err.Error()
@@ -99,8 +118,14 @@ func (this *SearchController) SearchList() {
 		keyWordItem.CreateTime = time.Now()
 		go models.AddSearchKeyWord(keyWordItem)
 	}
-	for k, _ := range result {
-		result[k].ImgUrlPc = "https://hongze.oss-cn-shanghai.aliyuncs.com/static/images/202112/20211206/UvMadc63MLZY6rnQZQgGZAFXkqwf.png"
+	for k, v := range result {
+		//如果是研选系列的任意取五张图片的中的一张
+		if v.CategoryId == "0" {
+			knum := v.ArticleId % 5
+			result[k].ImgUrlPc = researchList[knum]
+		} else {
+			result[k].ImgUrlPc = mapCategoryUrl[v.CategoryId]
+		}
 	}
 	resp := new(models.SearchResp)
 	page := paging.GetPaging(currentIndex, pageSize, int(total))

+ 3 - 1
models/article.go

@@ -57,7 +57,7 @@ type CygxArticleEs struct {
 	CategoryName     string `description:"一级分类"`
 	SubCategoryName  string `description:"二级分类"`
 	PublishStatus    int    `description:"发布状态"`
-	CategoryId       int    `description:"分类id"`
+	CategoryId       string `description:"分类id"`
 	ExpertBackground string `description:"专家背景"`
 	ExpertNumber     string `description:"专家编号"`
 	InterviewDate    string `description:"访谈日期"`
@@ -94,6 +94,7 @@ type HomeArticle struct {
 	IsResearch       bool   `description:"是否属于研选"`
 	Pv               int    `description:"PV"`
 	ImgUrlPc         string `description:"图片链接"`
+	CategoryId       string `description:"文章分类"`
 }
 
 type ArticleDetail struct {
@@ -360,6 +361,7 @@ type ReportArticle struct {
 	VideoUrl         string `description:"链接"`
 	IsHaveVideo      bool   `description:"是否含有音频文件"`
 	ImgUrlPc         string `description:"图片链接"`
+	CategoryId       string `description:"文章分类"`
 }
 
 func GetReportPermission(categoryName string) (item []*ChartPermission, err error) {

+ 1 - 0
models/search.go

@@ -12,6 +12,7 @@ type SearchItem struct {
 	PublishDate      string   `description:"发布时间"`
 	ExpertBackground string   `description:"专家背景"`
 	ImgUrlPc         string   `description:"图片链接"`
+	CategoryId       string   `description:"文章分类"`
 }
 
 type CategoryItem struct {

+ 10 - 19
services/elastic.go

@@ -69,9 +69,6 @@ func EsAddOrEditData(indexName, docId string, item *ElasticTestArticleDetail) (e
 		}
 	}()
 	client := utils.Client
-	//if err != nil {
-	//	return
-	//}
 	searchById, err := client.Get().Index(indexName).Id(docId).Do(context.Background())
 	if err != nil && !strings.Contains(err.Error(), "404") {
 		fmt.Println("Get Err" + err.Error())
@@ -79,14 +76,15 @@ func EsAddOrEditData(indexName, docId string, item *ElasticTestArticleDetail) (e
 	}
 	if searchById != nil && searchById.Found {
 		resp, err := client.Update().Index(indexName).Id(docId).Doc(map[string]interface{}{
-			"BodyText":    item.BodyText,
-			"Title":       item.Title,
-			"PublishDate": item.PublishDate,
+			"BodyText":         item.BodyText,
+			"Title":            item.Title,
+			"PublishDate":      item.PublishDate,
+			"CategoryId":       item.CategoryId,
+			"ExpertBackground": item.ExpertBackground,
 		}).Do(context.Background())
 		if err != nil {
 			return err
 		}
-		fmt.Println(resp.Status, resp.Result)
 		if resp.Status == 0 {
 			fmt.Println("修改成功")
 		} else {
@@ -763,7 +761,7 @@ func EsMultiMatchFunctionScoreQuerySort(indexName, keyWord string, startSize, pa
 						if err != nil {
 							return nil, 0, err
 						}
-						article := new(models.CygxArticle)
+						article := new(models.CygxArticleEs)
 						err = json.Unmarshal(articleJson, &article)
 						if err != nil {
 							return nil, 0, err
@@ -790,6 +788,7 @@ func EsMultiMatchFunctionScoreQuerySort(indexName, keyWord string, startSize, pa
 						searchItem.Title = title
 						searchItem.PublishDate = article.PublishDate
 						searchItem.ExpertBackground = article.ExpertBackground
+						searchItem.CategoryId = article.CategoryId
 						for _, v_result := range result {
 							if v_result.ArticleId == searchItem.ArticleId {
 								isAppend = true
@@ -836,19 +835,11 @@ func EsMultiMatchFunctionScoreQueryTimeSort(indexName, keyWord string, startSize
 		n++
 	}
 	boolquery.Should(matchArr...)
-
-	//multiMatch2 := elastic.NewMultiMatchQuery(1, "IsSummary")
-	//bodyFunctionQuery2 := elastic.NewFunctionScoreQuery()
-	//bodyFunctionQuery2.Query(multiMatch2)
-	//matchArr2 = append(matchArr2, bodyFunctionQuery2)
-	//boolquery.Must(matchArr2...).Should(matchArr...)
-
 	highlight := elastic.NewHighlight()
 	highlight = highlight.Fields(elastic.NewHighlighterField("Title"), elastic.NewHighlighterField("BodyText"))
 	highlight = highlight.PreTags("<font color='red'>").PostTags("</font>")
 	request := client.Search(indexName).Highlight(highlight).Sort("PublishDate", false).Size(pageSize).Query(boolquery)
 	searchByMatch, err := request.Do(context.Background())
-
 	if searchByMatch != nil {
 		matchResult, _ := json.Marshal(searchByMatch)
 		utils.FileLog.Info("%s", string(matchResult))
@@ -860,7 +851,7 @@ func EsMultiMatchFunctionScoreQueryTimeSort(indexName, keyWord string, startSize
 				if err != nil {
 					return nil, 0, err
 				}
-				article := new(models.CygxArticle)
+				article := new(models.CygxArticleEs)
 				err = json.Unmarshal(articleJson, &article)
 				if err != nil {
 					return nil, 0, err
@@ -887,6 +878,7 @@ func EsMultiMatchFunctionScoreQueryTimeSort(indexName, keyWord string, startSize
 				searchItem.Title = title
 				searchItem.PublishDate = article.PublishDate
 				searchItem.ExpertBackground = article.ExpertBackground
+				searchItem.CategoryId = article.CategoryId
 				result = append(result, searchItem)
 			}
 		}
@@ -943,14 +935,13 @@ func EsSearchReport(indexName, keyWord string, startSize, pageSize, userId int)
 						if err != nil {
 							return nil, 0, err
 						}
-						article := new(models.CygxArticle)
+						article := new(models.CygxArticleEs)
 						err = json.Unmarshal(articleJson, &article)
 						if err != nil {
 							return nil, 0, err
 						}
 						searchItem := new(models.SearchItem)
 						searchItem.ArticleId, _ = strconv.Atoi(v.Id)
-
 						var title string
 						if len(v.Highlight["Title"]) > 0 {
 							title = v.Highlight["Title"][0]

+ 5 - 0
services/task.go

@@ -84,6 +84,9 @@ func CreateIndex() {
      "ArticleId": {
        "type": "integer"
      },
+	 "CategoryId": {
+		"type": "text"
+	 },
      "BodyText": {
        "type": "text",
        "term_vector": "with_positions_offsets",
@@ -144,6 +147,7 @@ func AddAllArticle() {
 		item.PublishDate = v.PublishDate
 		item.BodyText = bodyText
 		item.ExpertBackground = v.ExpertBackground
+		item.CategoryId = strconv.Itoa(v.CategoryId)
 		EsAddOrEditData(indexName, strconv.Itoa(v.ArticleId), item)
 		fmt.Println(v.ArticleId)
 	}
@@ -211,6 +215,7 @@ type ElasticTestArticleDetail struct {
 	BodyText         string `description:"内容"`
 	PublishDate      string `description:"发布时间"`
 	ExpertBackground string `description:"专家背景"`
+	CategoryId       string `description:"文章分类"`
 }
 
 type ElasticTestArticleDetailV4 struct {