浏览代码

Merge branch 'clpt_v2.2' of http://8.136.199.33:3000/cxzhang/hongze_clpt into debug

xingzai 2 年之前
父节点
当前提交
4612666a56
共有 7 个文件被更改,包括 194 次插入142 次删除
  1. 16 57
      controllers/home.go
  2. 8 4
      controllers/report.go
  3. 52 58
      controllers/report_billboard.go
  4. 22 0
      models/article_history_record.go
  5. 33 23
      models/home.go
  6. 28 0
      models/report.go
  7. 35 0
      services/article.go

+ 16 - 57
controllers/home.go

@@ -5,7 +5,6 @@ import (
 	"hongze/hongze_clpt/models"
 	"hongze/hongze_clpt/services"
 	"hongze/hongze_clpt/utils"
-	"html"
 	"strconv"
 	"strings"
 )
@@ -203,71 +202,31 @@ func (this *MobileHomeController) List() {
 			return
 		}
 
-		list, err := models.GetHomeList(condition, pars, startSize, pageSize)
+		listPublic, err := models.GetHomeListPublic(condition, pars, startSize, pageSize)
 		if err != nil {
 			br.Msg = "获取信息失败"
 			br.Msg = "获取帖子数据失败,Err:" + err.Error()
 			return
 		}
-		//研选的五张图片
-		detailResearch, err := models.GetConfigByCode("category_research_img_url")
+		listPublic, err = services.HandleArticleCategoryImg(listPublic)
 		if err != nil {
-			br.Msg = "获取数据失败"
-			br.ErrMsg = "获取数据研选分类图片失败,Err:" + err.Error()
+			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[k].Body))
-			newBody, _ := services.GetReportContentTextSubByarticle(item.Body, item.Annotation, item.ArticleId)
-			list[k].Annotation = newBody
-			list[k].Body = ""
-			if imgurl != "" {
-				list[k].BodyHtml = imgurl
-			}
-			list[k].PublishDate = utils.StrTimeToTime(item.PublishDate).Format(utils.FormatDateTimeNoSecond) //时间字符串格式转时间格式
-			if strings.Contains(item.CategoryName, utils.CHART_PERMISSION_NAME_YANXUAN) {
-				list[k].IsResearch = true
-			}
-			if item.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]
-			}
-			if list[k].ArticleId < utils.SummaryArticleId {
-				list[k].HttpUrl = utils.StrategyPlatform + strconv.Itoa(v.ArticleId)
-				list[k].IsNeedJump = true
-			}
-			list[k].Source = 1
-		}
-
-		if len(list) == 0 {
+		var list []*models.HomeArticle
+		if len(listPublic) == 0 {
 			list = make([]*models.HomeArticle, 0)
+		} else {
+			for _, v := range listPublic {
+				list = append(list, &models.HomeArticle{
+					ArticleId:   v.ArticleId,
+					Title:       v.Title,
+					Annotation:  v.Annotation,
+					ImgUrlPc:    v.ImgUrlPc,
+					PublishDate: v.PublishDate,
+				})
+			}
 		}
 		resp.List = list
 	}

+ 8 - 4
controllers/report.go

@@ -173,10 +173,14 @@ func (this *MobileReportController) IndustryList() {
 		currentIndex = 1
 	}
 
-	if isBillboard {
-		pageSize = utils.PageSize15
-		currentIndex = 1
-	}
+	//if isBillboard {
+	//	if pageSize == 0 {
+	//		pageSize = utils.PageSize15
+	//	} else {
+	//		pageSize = utils.PageSize5
+	//	}
+	//	currentIndex = 1
+	//}
 
 	startSize = paging.StartIndex(currentIndex, pageSize)
 	if ChartPermissionId > 0 {

+ 52 - 58
controllers/report_billboard.go

@@ -23,6 +23,7 @@ type MobileReportBillboardController struct {
 // @Title 阅读飙升榜/报告收藏榜
 // @Description 获取阅读飙升榜/报告收藏榜接口
 // @Param   ChartPermissionId   query   int  false       "分类ID"
+// @Param   PageSize   query   int  true       "每页数据条数"
 // @Param   Source   query   int  true       "来源 1:阅读飙升 ,2:报告收藏"
 // @Success 200 {object} models.ReportBillboardListResp
 // @router /list [get]
@@ -39,41 +40,58 @@ func (this *MobileReportBillboardController) ReadList() {
 		return
 	}
 	chartPermissionId, _ := this.GetInt("ChartPermissionId")
+	pageSize, _ := this.GetInt("PageSize")
 	source, _ := this.GetInt("Source")
 	sourceArr := []int{1, 2}
 	if !utils.InArrayByInt(sourceArr, source) {
 		br.Msg = "来源有误"
 		return
 	}
-
-	topNum := utils.PageSize15
+	var topNum int
+	if pageSize == 0 {
+		topNum = utils.PageSize15
+	} else {
+		topNum = pageSize
+	}
 	list := make([]*models.ArticleListResp, 0)
-
 	// 阅读飙升榜
 	if source == 1 {
 		var topCond string
 		var topPars []interface{}
-		if chartPermissionId > 0 {
-			categoryId, err := models.GetCategoryId(chartPermissionId)
-			if err != nil && err.Error() != utils.ErrNoRow() {
-				br.Msg = "获取信息失败"
-				br.ErrMsg = "获取分类权限信息失败,Err:" + err.Error()
+		if chartPermissionId == utils.CHART_PERMISSION_ID_YANXUAN {
+			nowTime := time.Now().Local()
+			startTime := nowTime.AddDate(0, -1, 0)
+			endTime := nowTime.AddDate(0, 0, -1)
+			topCond += ` AND l.create_time BETWEEN ? AND ? AND a.article_id > ? `
+			topPars = append(topPars, startTime, endTime, utils.SummaryArticleId)
+			topList, e := models.GetTopReadRecordArticleListByConditionYx(topNum, topCond, topPars)
+			if e != nil {
+				br.Msg = "获取失败"
+				br.ErrMsg = "获取报告阅读增量排行榜失败, Err:" + e.Error()
 				return
 			}
-			if categoryId != "" {
-				topCond += ` AND a.category_id IN  (` + categoryId + `)`
+			list = topList
+		} else {
+			if chartPermissionId > 0 {
+				categoryId, err := models.GetCategoryId(chartPermissionId)
+				if err != nil && err.Error() != utils.ErrNoRow() {
+					br.Msg = "获取信息失败"
+					br.ErrMsg = "获取分类权限信息失败,Err:" + err.Error()
+					return
+				}
+				if categoryId != "" {
+					topCond += ` AND a.category_id IN  (` + categoryId + `)`
+				}
 			}
+			topList, e := models.GetTopReadRecordArticleListByCondition(topNum, topCond, topPars)
+			if e != nil {
+				br.Msg = "获取失败"
+				br.ErrMsg = "获取报告阅读增量排行榜失败, Err:" + e.Error()
+				return
+			}
+			list = topList
 		}
-		topList, e := models.GetTopReadRecordArticleListByCondition(topNum, topCond, topPars)
-		if e != nil {
-			br.Msg = "获取失败"
-			br.ErrMsg = "获取报告阅读增量排行榜失败, Err:" + e.Error()
-			return
-		}
-
-		list = topList
 	}
-
 	// 报告收藏榜
 	if source == 2 {
 		var collectCond string
@@ -95,46 +113,22 @@ func (this *MobileReportBillboardController) ReadList() {
 		endTime := nowTime.AddDate(0, 0, -1)
 		collectCond += ` AND ac.create_time BETWEEN ? AND ?`
 		collectPars = append(collectPars, startTime, endTime)
-		collectList, e := models.GetReportCollectionBillboardList(topNum, collectPars, collectCond)
-		if e != nil {
-			br.Msg = "获取失败"
-			br.ErrMsg = "获取报告收藏排行榜失败, Err:" + e.Error()
-			return
-		}
-		list = collectList
-	}
-	articleIds := make([]int, 0)
-	for i := range list {
-		articleIds = append(articleIds, list[i].ArticleId)
-	}
-	// 报告关联产业信息
-	industryMap := make(map[int][]*models.IndustrialManagementIdInt, 0)
-	if len(articleIds) > 0 {
-		var industryCond string
-		var industryPars []interface{}
-		industryCond += ` AND mg.article_id IN (` + utils.GetOrmInReplace(len(articleIds)) + `)`
-		industryPars = append(industryPars, articleIds)
-		industryList, e := models.GetIndustrialListByarticleId(industryPars, industryCond)
-		if e != nil {
-			br.Msg = "获取失败"
-			br.ErrMsg = "获取报告关联的产业信息失败, Err: " + e.Error()
-			return
-		}
-		for i := range industryList {
-			v := industryList[i]
-			industryMap[v.ArticleId] = append(industryMap[v.ArticleId], &models.IndustrialManagementIdInt{
-				ArticleId:              v.ArticleId,
-				IndustrialManagementId: v.IndustrialManagementId,
-				IndustryName:           v.IndustryName,
-				ChartPermissionId:      v.ChartPermissionId,
-			})
-		}
-	}
-	for k, v := range list {
-		if len(industryMap[v.ArticleId]) > 0 {
-			list[k].List = industryMap[v.ArticleId]
+		if chartPermissionId == utils.CHART_PERMISSION_ID_YANXUAN {
+			topList, e := models.GetReportCollectionBillboardListYx(topNum, collectPars, collectCond)
+			if e != nil {
+				br.Msg = "获取失败"
+				br.ErrMsg = "获取报告阅读增量排行榜失败, Err:" + e.Error()
+				return
+			}
+			list = topList
 		} else {
-			list[k].List = make([]*models.IndustrialManagementIdInt, 0)
+			collectList, e := models.GetReportCollectionBillboardList(topNum, collectPars, collectCond)
+			if e != nil {
+				br.Msg = "获取失败"
+				br.ErrMsg = "获取报告收藏排行榜失败, Err:" + e.Error()
+				return
+			}
+			list = collectList
 		}
 	}
 	var err error

+ 22 - 0
models/article_history_record.go

@@ -74,3 +74,25 @@ func GetTopReadRecordArticleListByCondition(limit int, condition string, pars []
 	_, err = orm.NewOrm().Raw(sql, pars, limit).QueryRows(&list)
 	return
 }
+
+// GetTopReadRecordArticleListByConditionYx 获取研选阅读量排行榜
+func GetTopReadRecordArticleListByConditionYx(limit int, condition string, pars []interface{}) (list []*ArticleListResp, err error) {
+	sql := `SELECT
+	a.article_id,
+	a.title,
+	date_format( a.publish_date, '%Y-%m-%d' ) AS publish_date,
+	'31' AS chart_permission_id,
+	'买方研选' AS permission_name,
+	COUNT( 1 ) AS pv 
+FROM
+	cygx_article_history_record_newpv AS l
+	JOIN cygx_article AS a ON a.article_id = l.article_id 
+WHERE
+	a.publish_status = 1 `
+	if condition != `` {
+		sql += condition
+	}
+	sql += `  GROUP BY  a.article_id ORDER BY pv DESC, a.publish_date DESC LIMIT ?`
+	_, err = orm.NewOrm().Raw(sql, pars, limit).QueryRows(&list)
+	return
+}

+ 33 - 23
models/home.go

@@ -21,29 +21,26 @@ type ReportBillboardListResp struct {
 }
 
 type HomeArticle struct {
-	ArticleId        int                  `description:"文章id"`
-	Title            string               `description:"标题"`
-	TitleEn          string               `description:"英文标题 "`
-	UpdateFrequency  string               `description:"更新周期"`
-	CreateDate       string               `description:"创建时间"`
-	PublishDate      string               `description:"发布时间"`
-	Body             string               `description:"内容"`
-	BodyHtml         string               `description:"内容带有HTML标签"`
-	Abstract         string               `description:"摘要"`
-	CategoryName     string               `description:"一级分类"`
-	SubCategoryName  string               `description:"二级分类"`
-	ExpertBackground string               `description:"专家背景"`
-	IsResearch       bool                 `description:"是否属于研选"`
-	Pv               int                  `description:"PV"`
-	ImgUrlPc         string               `description:"图片链接"`
-	CategoryId       string               `description:"文章分类"`
-	HttpUrl          string               `description:"文章链接跳转地址"`
-	IsNeedJump       bool                 `description:"是否需要跳转链接地址"`
-	Source           int                  `description:"来源  1:文章, 2:图表"`
-	Annotation       string               `description:"核心观点"`
-	HomeType         int                  `description:"数据类型:0-纪要(默认); 1-微路演音频"`
-	MicroAudio       *MicroAudioUnionList `description:"微路演音频"`
-	List             []*IndustrialManagementIdInt
+	ArticleId       int                  `description:"文章id"`
+	Title           string               `description:"标题"`
+	TitleEn         string               `description:"英文标题 "`
+	PublishDate     string               `description:"发布时间"`
+	Body            string               `description:"内容"`
+	BodyHtml        string               `description:"内容带有HTML标签"`
+	Abstract        string               `description:"摘要"`
+	CategoryName    string               `description:"一级分类"`
+	SubCategoryName string               `description:"二级分类"`
+	IsResearch      bool                 `description:"是否属于研选"`
+	Pv              int                  `description:"PV"`
+	ImgUrlPc        string               `description:"图片链接"`
+	CategoryId      string               `description:"文章分类"`
+	HttpUrl         string               `description:"文章链接跳转地址"`
+	IsNeedJump      bool                 `description:"是否需要跳转链接地址"`
+	Source          int                  `description:"来源  1:文章, 2:图表"`
+	Annotation      string               `description:"核心观点"`
+	HomeType        int                  `description:"数据类型:0-纪要(默认); 1-微路演音频"`
+	MicroAudio      *MicroAudioUnionList `description:"微路演音频"`
+	List            []*IndustrialManagementIdInt
 }
 
 type ArticleListResp struct {
@@ -115,6 +112,19 @@ func GetHomeList(condition string, pars []interface{}, startSize, pageSize int)
 	return
 }
 
+func GetHomeListPublic(condition string, pars []interface{}, startSize, pageSize int) (items []*ArticleListResp, err error) {
+	o := orm.NewOrm()
+	sql := ` SELECT * ,(SELECT count(1) FROM cygx_article_history_record_newpv as h WHERE h.article_id = a.article_id ) as pv
+                 FROM cygx_article AS a
+                WHERE a.publish_status=1 `
+	if condition != "" {
+		sql += condition
+	}
+	sql += ` ORDER BY publish_date DESC,article_id DESC LIMIT ?,? `
+	_, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&items)
+	return
+}
+
 func GetReportTacticsList(condition string, pars []interface{}, userId, startSize, pageSize int) (items []*HomeArticle, err error) {
 	o := orm.NewOrm()
 	sql := ` SELECT * 

+ 28 - 0
models/report.go

@@ -3,6 +3,7 @@ package models
 import (
 	"github.com/beego/beego/v2/client/orm"
 	"github.com/rdlucklib/rdluck_tools/paging"
+	"hongze/hongze_clpt/utils"
 	"strconv"
 )
 
@@ -307,6 +308,33 @@ func GetReportCollectionBillboardList(limit int, pars []interface{}, condition s
 	return
 }
 
+//研选报告收藏榜单列表
+func GetReportCollectionBillboardListYx(limit int, pars []interface{}, condition string) (items []*ArticleListResp, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT
+			ac.id,
+			a.article_id,
+			a.category_id,
+			a.title,
+			a.annotation,
+			a.publish_date,
+			'买方研选' as chart_permission_name,
+			COUNT(ac.id) AS collection_num
+		FROM
+			cygx_article AS a
+			INNER JOIN cygx_article_collect AS ac ON ac.article_id = a.article_id 
+		WHERE
+			1 = 1 
+			AND a.publish_status = 1  AND a.article_id >= ` + strconv.Itoa(utils.SummaryArticleId)
+	if condition != "" {
+		sql += condition
+	}
+	sql += ` GROUP BY a.article_id ORDER BY collection_num DESC, ac.id DESC, a.publish_date DESC`
+	sql += ` LIMIT ?`
+	_, err = o.Raw(sql, pars, limit).QueryRows(&items)
+	return
+}
+
 //获取产业报告+晨会点评列表
 func GetTimeLineReportIndustrialList(industrialManagementId, startSize, pageSize int) (items []*HomeArticle, total int, err error) {
 	o := orm.NewOrm()

+ 35 - 0
services/article.go

@@ -138,6 +138,41 @@ func HandleArticleCategoryImg(list []*models.ArticleListResp) (items []*models.A
 			}
 		}
 	}
+
+	articleIds := make([]int, 0)
+	for i := range list {
+		articleIds = append(articleIds, list[i].ArticleId)
+	}
+	// 报告关联产业信息
+	industryMap := make(map[int][]*models.IndustrialManagementIdInt, 0)
+	if len(articleIds) > 0 {
+		var industryCond string
+		var industryPars []interface{}
+		industryCond += ` AND mg.article_id IN (` + utils.GetOrmInReplace(len(articleIds)) + `)`
+		industryPars = append(industryPars, articleIds)
+		industryList, e := models.GetIndustrialListByarticleId(industryPars, industryCond)
+		if e != nil {
+			err = errors.New("GetIndustrialListByarticleId" + e.Error())
+			return
+		}
+		for i := range industryList {
+			v := industryList[i]
+			industryMap[v.ArticleId] = append(industryMap[v.ArticleId], &models.IndustrialManagementIdInt{
+				ArticleId:              v.ArticleId,
+				IndustrialManagementId: v.IndustrialManagementId,
+				IndustryName:           v.IndustryName,
+				ChartPermissionId:      v.ChartPermissionId,
+			})
+		}
+	}
+	for k, v := range list {
+		if len(industryMap[v.ArticleId]) > 0 {
+			list[k].List = industryMap[v.ArticleId]
+		} else {
+			list[k].List = make([]*models.IndustrialManagementIdInt, 0)
+		}
+	}
+
 	if len(list) == 0 {
 		list = make([]*models.ArticleListResp, 0)
 	}