Browse Source

no message

xingzai 2 years ago
parent
commit
55f12aabb6

+ 211 - 79
controllers/report.go

@@ -101,7 +101,7 @@ func (this *MobileReportController) TradeList() {
 			if ChartPermissionId == utils.KE_JI_ID {
 				pageSize = 12
 			} else {
-				pageSize = 6
+				pageSize = 3
 			}
 			listArticle, err := models.GetHomeList(condition, pars, 0, pageSize)
 			if err != nil {
@@ -507,7 +507,6 @@ func (this *MobileReportController) ArticleCategoryList() {
 			list[k].IsRed = true
 		}
 	}
-
 	//标的列表
 	industrialSubjectList, err := models.GetIndustrialSubjectAll(industrialManagementId)
 	if err != nil {
@@ -515,12 +514,27 @@ func (this *MobileReportController) ArticleCategoryList() {
 		br.ErrMsg = "获取品种信息失败,Err:" + err.Error()
 		return
 	}
+	videoSimple, au, err := services.GetindustryVideo(user, industrialManagementId)
+	if err != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取用户权限失败, Err: " + err.Error()
+		return
+	}
+	timeLineItem := models.IndustrialToArticleCategoryRep{
+		CategoryId:    utils.TIME_CATEGORYID,
+		MatchTypeName: "时间线",
+	}
+	list = append([]*models.IndustrialToArticleCategoryRep{&timeLineItem}, list...)
 	resp := new(models.IndustrialToArticleCategoryListRep)
 	resp.List = list
 	resp.ListSubject = industrialSubjectList
 	resp.LayoutTime = utils.TimeRemoveHms(detail.LayoutTime)
 	resp.IndustryName = detail.IndustryName
 	resp.IndustrialManagementId = industrialManagementId
+	if videoSimple != nil && videoSimple.Id > 0 {
+		resp.IndustryVideo = videoSimple
+	}
+	resp.AuthInfo = au
 	br.Ret = 200
 	br.Success = true
 	br.Msg = "获取成功"
@@ -566,93 +580,103 @@ func (this *MobileReportController) List() {
 	var total int
 	resp := new(models.TacticsListResp)
 	page := paging.GetPaging(currentIndex, pageSize, total)
+	list := make([]*models.HomeArticle, 0)
 
-	//获取该产业下所对应的行业图片
-	detail, errCategory := models.GetdetailByCategoryIdOne(categoryId)
-	if errCategory != nil {
-		br.Msg = "获取信息失败"
-		br.ErrMsg = "获取信息失败,Err:" + errCategory.Error() + "categoryID 不存在:" + strconv.Itoa(categoryId)
-		return
-	}
-	//对应行业的图片
-	detailChartPermissionUrl, err := models.GetConfigByCode("category_chart_permissionimg_url")
-	if err != nil {
-		br.Msg = "获取数据失败"
-		br.ErrMsg = "行业配置信息失败,Err:" + err.Error()
-		return
-	}
-	chartPermissionUrlList := strings.Split(detailChartPermissionUrl.ConfigValue, "{|}")
-	mapChartPermission := make(map[string]string)
-	var permissionName string
-	var imgUrlChartPermission string
-	for _, v := range chartPermissionUrlList {
-		vslice := strings.Split(v, "_")
-		permissionName = vslice[0]
-		imgUrlChartPermission = vslice[len(vslice)-1]
-		mapChartPermission[permissionName] = imgUrlChartPermission
-	}
-
-	//对应分类的所图片
-	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
-	}
-	condition += ` AND category_id_two=? `
-	pars = append(pars, categoryId)
-
-	if industrialManagementId > 0 {
-		industrialManageentList, err := models.GetIndustrialArticleGroupManagementByIndustrialManagementId(industrialManagementId)
+	if categoryId == utils.TIME_CATEGORYID {
+		var err error
+		list, total, err = models.GetTimeLineReportIndustrialList(industrialManagementId, startSize, pageSize)
 		if err != nil {
 			br.Msg = "获取信息失败"
-			br.Msg = "获取产业关联的文章ID失败,GetIndustrialArticleGroupManagementByIndustrialManagementIdErr:" + err.Error()
+			br.ErrMsg = "获取产业报告+晨会点评列表,Err:" + err.Error()
 			return
 		}
-		articleIdList := make([]string, 0)
-		for _, v := range industrialManageentList {
-			articleIdList = append(articleIdList, strconv.Itoa(v.ArticleId))
+	} else {
+		//获取该产业下所对应的行业图片
+		detail, errCategory := models.GetdetailByCategoryIdOne(categoryId)
+		if errCategory != nil {
+			br.Msg = "获取信息失败"
+			br.ErrMsg = "获取信息失败,Err:" + errCategory.Error() + "categoryID 不存在:" + strconv.Itoa(categoryId)
+			return
+		}
+		//对应行业的图片
+		detailChartPermissionUrl, err := models.GetConfigByCode("category_chart_permissionimg_url")
+		if err != nil {
+			br.Msg = "获取数据失败"
+			br.ErrMsg = "行业配置信息失败,Err:" + err.Error()
+			return
+		}
+		chartPermissionUrlList := strings.Split(detailChartPermissionUrl.ConfigValue, "{|}")
+		mapChartPermission := make(map[string]string)
+		var permissionName string
+		var imgUrlChartPermission string
+		for _, v := range chartPermissionUrlList {
+			vslice := strings.Split(v, "_")
+			permissionName = vslice[0]
+			imgUrlChartPermission = vslice[len(vslice)-1]
+			mapChartPermission[permissionName] = imgUrlChartPermission
 		}
-		condition += ` AND a.article_id IN (  ` + utils.GetOrmInReplace(len(articleIdList)) + ` )  `
-		pars = append(pars, articleIdList)
-	}
 
-	total, err = models.GetHomeCount(condition, pars)
-	if err != nil {
-		br.Msg = "获取信息失败"
-		br.Msg = "获取帖子总数失败,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
+		}
+		condition += ` AND category_id_two=? `
+		pars = append(pars, categoryId)
 
-	page = paging.GetPaging(currentIndex, pageSize, total)
-	list, err := models.GetHomeList(condition, pars, startSize, pageSize)
-	if err != nil {
-		br.Msg = "获取信息失败"
-		br.Msg = "获取帖子数据失败,Err:" + err.Error()
-		return
-	}
+		if industrialManagementId > 0 {
+			industrialManageentList, err := models.GetIndustrialArticleGroupManagementByIndustrialManagementId(industrialManagementId)
+			if err != nil {
+				br.Msg = "获取信息失败"
+				br.Msg = "获取产业关联的文章ID失败,GetIndustrialArticleGroupManagementByIndustrialManagementIdErr:" + err.Error()
+				return
+			}
+			articleIdList := make([]string, 0)
+			for _, v := range industrialManageentList {
+				articleIdList = append(articleIdList, strconv.Itoa(v.ArticleId))
+			}
+			condition += ` AND a.article_id IN (  ` + utils.GetOrmInReplace(len(articleIdList)) + ` )  `
+			pars = append(pars, articleIdList)
+		}
 
-	for k, v := range list {
-		list[k].ImgUrlPc = mapCategoryUrl[v.CategoryId]
-	}
-	if categoryId > 0 {
-		detail, errCategory := models.GetdetailByCategoryId(categoryId)
-		if errCategory != nil {
+		total, err = models.GetHomeCount(condition, pars)
+		if err != nil {
 			br.Msg = "获取信息失败"
-			br.ErrMsg = "获取信息失败,Err:" + errCategory.Error() + "categoryID 不存在:" + strconv.Itoa(categoryId)
+			br.Msg = "获取帖子总数失败,Err:" + err.Error()
 			return
 		}
-		resp.MatchTypeName = detail.MatchTypeName
+
+		list, err = models.GetHomeList(condition, pars, startSize, pageSize)
+		if err != nil {
+			br.Msg = "获取信息失败"
+			br.Msg = "获取帖子数据失败,Err:" + err.Error()
+			return
+		}
+		for k, v := range list {
+			list[k].ImgUrlPc = mapCategoryUrl[v.CategoryId]
+		}
+		if categoryId > 0 {
+			detail, errCategory := models.GetdetailByCategoryId(categoryId)
+			if errCategory != nil {
+				br.Msg = "获取信息失败"
+				br.ErrMsg = "获取信息失败,Err:" + errCategory.Error() + "categoryID 不存在:" + strconv.Itoa(categoryId)
+				return
+			}
+			resp.MatchTypeName = detail.MatchTypeName
+		}
+		resp.CategoryImgUrlPc = mapChartPermission[detail.ChartPermissionName]
 	}
 	lenList := len(list)
 	for i := 0; i < lenList; i++ {
@@ -660,16 +684,16 @@ func (this *MobileReportController) List() {
 		list[i].Body = ""
 		list[i].Abstract, _ = services.GetReportContentTextSub(item.Abstract)
 		list[i].Annotation, _ = services.GetReportContentTextSub(item.Annotation)
+		list[i].PublishDate = utils.StrTimeToTime(item.PublishDate).Format(utils.FormatDate) //时间字符串格式转时间格式
 		//行业比较研究、资金流向,显示报告的摘要
 		if resp.MatchTypeName == "行业比较研究" || resp.MatchTypeName == "资金流向" {
 			list[i].Annotation = list[i].Abstract
 		}
 	}
-	resp.CategoryImgUrlPc = mapChartPermission[detail.ChartPermissionName]
-
 	if len(list) == 0 {
 		list = make([]*models.HomeArticle, 0)
 	}
+	page = paging.GetPaging(currentIndex, pageSize, total)
 	resp.List = list
 	resp.Paging = page
 	br.Ret = 200
@@ -1170,3 +1194,111 @@ func (this *MobileReportController) SearchReportAndResource() {
 	br.Msg = "获取成功"
 	br.Data = resp
 }
+
+// @Title 公司速览
+// @Description 公司速览接口
+// @Param   ChartPermissionId   query   int  false       "分类ID"
+// @Success 200 {object} models.TradeReportMappingResp
+// @router /companyList [get]
+func (this *ReportCommonController) CompanyList() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	var condition string
+	var pars []interface{}
+	chartPermissionId, _ := this.GetInt("ChartPermissionId")
+	if chartPermissionId > 1 {
+		categoryId, err := models.GetCategoryId(chartPermissionId)
+		if err != nil && err.Error() != utils.ErrNoRow() {
+			br.Msg = "获取信息失败"
+			br.ErrMsg = "获取分类权限信息失败,Err:" + err.Error()
+			return
+		}
+		if categoryId != "" {
+			condition += ` AND a.category_id IN  (` + categoryId + `)`
+		}
+	}
+	condition += ` 	AND a.type_name = '综述报告' `
+	list, err := models.CygxArticleDataList(condition, pars)
+	if err != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取报告封面图片失败, Err:" + err.Error()
+		return
+	}
+	listLogo := make([]*models.ArticleDataLogoResp, 0)
+	for i := range list {
+		v := list[i]
+		listLogo = append(listLogo, &models.ArticleDataLogoResp{
+			ArticleId:   v.ArticleId,
+			Cover:       v.Cover,
+			ComapnyList: services.HandleArticleStock(v.Stock),
+		})
+	}
+	resp := new(models.ArticleDataLogoListResp)
+	resp.List = listLogo
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = resp
+}
+
+// @Title 时间线
+// @Description 时间线接口
+// @Param   PageSize   query   int  true       "每页数据条数"
+// @Param   CurrentIndex   query   int  true       "当前页页码,从1开始"
+// @Param   IndustrialManagementId   query   int  false       "产业ID"
+// @Success 200 {object} models.TacticsListResp
+// @router /timeline [get]
+func (this *ReportCommonController) Timeline() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	pageSize, _ := this.GetInt("PageSize")
+	currentIndex, _ := this.GetInt("CurrentIndex")
+	industrialManagementId, _ := this.GetInt("IndustrialManagementId")
+	var startSize int
+	if pageSize <= 0 {
+		pageSize = utils.PageSize20
+	}
+	if currentIndex <= 0 {
+		currentIndex = 1
+	}
+	startSize = paging.StartIndex(currentIndex, pageSize)
+	var total int
+	resp := new(models.TacticsListResp)
+	page := paging.GetPaging(currentIndex, pageSize, total)
+	list := make([]*models.HomeArticle, 0)
+	var err error
+	list, total, err = models.GetTimeLineReportIndustrialList(industrialManagementId, startSize, pageSize)
+	if err != nil {
+		br.Msg = "获取信息失败"
+		br.ErrMsg = "获取产业报告+晨会点评列表,Err:" + err.Error()
+		return
+	}
+	lenList := len(list)
+	for i := 0; i < lenList; i++ {
+		item := list[i]
+		list[i].Body = ""
+		list[i].Abstract, _ = services.GetReportContentTextSub(item.Abstract)
+		list[i].Annotation, _ = services.GetReportContentTextSub(item.Annotation)
+		list[i].PublishDate = utils.StrTimeToTime(item.PublishDate).Format(utils.FormatDate) //时间字符串格式转时间格式
+		//行业比较研究、资金流向,显示报告的摘要
+		if resp.MatchTypeName == "行业比较研究" || resp.MatchTypeName == "资金流向" {
+			list[i].Annotation = list[i].Abstract
+		}
+	}
+	if len(list) == 0 {
+		list = make([]*models.HomeArticle, 0)
+	}
+	page = paging.GetPaging(currentIndex, pageSize, total)
+	resp.List = list
+	resp.Paging = page
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = resp
+}

+ 12 - 11
controllers/report_billboard.go

@@ -2,6 +2,7 @@ package controllers
 
 import (
 	"hongze/hongze_clpt/models"
+	"hongze/hongze_clpt/services"
 	"hongze/hongze_clpt/utils"
 	"time"
 )
@@ -46,7 +47,7 @@ func (this *MobileReportBillboardController) ReadList() {
 	}
 
 	topNum := utils.PageSize15
-	list := make([]*models.HomeArticle, 0)
+	list := make([]*models.ArticleListResp, 0)
 
 	// 阅读飙升榜
 	if source == 1 {
@@ -62,13 +63,8 @@ func (this *MobileReportBillboardController) ReadList() {
 			br.ErrMsg = "获取报告阅读增量排行榜失败, Err:" + e.Error()
 			return
 		}
-		for i := range topList {
-			list = append(list, &models.HomeArticle{
-				ArticleId:   topList[i].ArticleId,
-				Title:       topList[i].Title,
-				PublishDate: topList[i].PublishDate,
-			})
-		}
+
+		list = topList
 	}
 
 	// 报告收藏榜
@@ -97,7 +93,6 @@ func (this *MobileReportBillboardController) ReadList() {
 	for i := range list {
 		articleIds = append(articleIds, list[i].ArticleId)
 	}
-
 	// 报告关联产业信息
 	industryMap := make(map[int][]*models.IndustrialManagementIdInt, 0)
 	if len(articleIds) > 0 {
@@ -128,8 +123,14 @@ func (this *MobileReportBillboardController) ReadList() {
 			list[k].List = make([]*models.IndustrialManagementIdInt, 0)
 		}
 	}
-	resp := new(models.HomeArtAndChartListResp)
-	resp.List = list
+	var err error
+	resp := new(models.HomeArticleListResp)
+	resp.List, err = services.HandleArticleCategoryImg(list)
+	if err != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取报告封面图片失败, Err:" + err.Error()
+		return
+	}
 	br.Ret = 200
 	br.Success = true
 	br.Msg = "获取成功"

+ 46 - 0
models/article_data.go

@@ -0,0 +1,46 @@
+package models
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+)
+
+type CygxArticleDataResp struct {
+	ArticleId int    `description:"文章id"`
+	Stock     string `description:"文章个股标签"`
+	Cover     string `description:"封面图片,公司logo"`
+}
+
+type ArticleDataLogoResp struct {
+	ArticleId   int                `description:"文章id"`
+	Cover       string             `description:"封面图片,公司logo"`
+	ComapnyList []*ComapnyNameResp `description:"公司民称"`
+}
+
+type ArticleDataLogoListResp struct {
+	List []*ArticleDataLogoResp
+}
+
+type ComapnyNameResp struct {
+	ComapnyName string `description:"公司民称"`
+}
+
+//列表
+func CygxArticleDataList(condition string, pars []interface{}) (items []*CygxArticleDataResp, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT
+			a.article_id,
+			a.stock,
+			d.cover 
+		FROM
+			cygx_article AS a
+			INNER JOIN cygx_article_data AS d ON d.article_id = a.article_id 
+		WHERE
+			1 = 1 
+			AND a.publish_status = 1 
+`
+	if condition != "" {
+		sql += condition
+	}
+	_, err = o.Raw(sql, pars).QueryRows(&items)
+	return
+}

+ 14 - 3
models/article_history_record.go

@@ -54,12 +54,23 @@ func GetUserToArticleHistory(uid int, articleIdArr []int) (items []*CygxArticleH
 }
 
 // GetTopReadRecordArticleListByCondition 获取阅读量排行榜
-func GetTopReadRecordArticleListByCondition(limit int, condition string, pars []interface{}) (list []*ArticleTopHistoryRecord, err error) {
-	sql := `SELECT * FROM cygx_article_top_history_record WHERE 1 = 1 `
+func GetTopReadRecordArticleListByCondition(limit int, condition string, pars []interface{}) (list []*ArticleListResp, err error) {
+	sql := `SELECT
+			a.title,
+			a.article_id,
+			a.publish_date,
+			a.annotation,
+			a.abstract,
+			m.chart_permission_name,
+			a.category_id
+		FROM
+			cygx_article_top_history_record as  r 
+			INNER JOIN cygx_article as a ON a.article_id = r.article_id	
+			INNER JOIN cygx_report_mapping as m ON m.category_id = a.category_id_two`
 	if condition != `` {
 		sql += condition
 	}
-	sql += ` ORDER BY pv DESC, publish_date DESC LIMIT ?`
+	sql += ` ORDER BY r.pv DESC, a.publish_date DESC LIMIT ?`
 	_, err = orm.NewOrm().Raw(sql, pars, limit).QueryRows(&list)
 	return
 }

+ 1 - 1
models/chart_permission.go

@@ -29,7 +29,7 @@ func GetChartPermissionReportAll(condition string) (items []*ChartPermissionResp
 func GetCategoryId(chartPermissionId int) (category_id string, err error) {
 	o := orm.NewOrm()
 	sql := ` SELECT GROUP_CONCAT(a.category_id) AS category_id 
-			FROM cygx_permission_mapping AS a
+			FROM cygx_report_mapping AS a
 			WHERE a.chart_permission_id=? 
 			GROUP BY a.chart_permission_id `
 	err = o.Raw(sql, chartPermissionId).QueryRow(&category_id)

+ 25 - 0
models/home.go

@@ -11,6 +11,11 @@ type HomeArtAndChartListResp struct {
 	ChartList []*HomeChartListResp `description:"图表列表"`
 }
 
+type HomeArticleListResp struct {
+	Paging *paging.PagingItem
+	List   []*ArticleListResp `description:"文章列表"`
+}
+
 type HomeArticle struct {
 	ArticleId        int                  `description:"文章id"`
 	Title            string               `description:"标题"`
@@ -37,6 +42,26 @@ type HomeArticle struct {
 	List             []*IndustrialManagementIdInt
 }
 
+type ArticleListResp struct {
+	ArticleId           int    `description:"文章id"`
+	Title               string `description:"标题"`
+	TitleEn             string `description:"英文标题 "`
+	PublishDate         string `description:"发布时间"`
+	Body                string `description:"内容"`
+	Abstract            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:"核心观点"`
+	ChartPermissionName string `description:"权限名称"`
+	List                []*IndustrialManagementIdInt
+}
+
 type HomeChartListResp struct {
 	ChartId     int          `description:"图表ID"`
 	Title       string       `description:"标题"`

+ 9 - 0
models/micro_roadshow.go

@@ -304,3 +304,12 @@ func GetMicroRoadshowVideoByIndustryId(industryId int) (item *MicroRoadshowVideo
 	err = orm.NewOrm().Raw(sql, industryId).QueryRow(&item)
 	return
 }
+
+//GetMicroRoadshowVideoByIndustryIdCount  根据行业ID查询产业视频是否存在
+func GetMicroRoadshowVideoByIndustryIdCount(industryId int) (count int, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT COUNT(1) count
+			FROM cygx_micro_roadshow_video WHERE industry_id = ? and publish_status = 1`
+	err = o.Raw(sql, industryId).QueryRow(&count)
+	return
+}

+ 40 - 4
models/report.go

@@ -279,18 +279,20 @@ type SearchReportAndResourceResp struct {
 }
 
 //报告收藏榜单列表
-func GetReportCollectionBillboardList(limit int, pars []interface{}, condition string) (items []*HomeArticle, err error) {
+func GetReportCollectionBillboardList(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,
-			date_format(a.publish_date, '%Y-%m-%d') AS publish_date,
-			m.chart_permission_name AS permission_name,
+			a.annotation,
+			a.publish_date,
+			m.chart_permission_name,
 			COUNT(ac.id) AS collection_num
 		FROM
 			cygx_article AS a
-			INNER JOIN cygx_report_mapping AS m ON m.category_id = a.category_id
+			INNER JOIN cygx_report_mapping AS m ON m.category_id = a.category_id_two
 			INNER JOIN cygx_article_collect AS ac ON ac.article_id = a.article_id 
 		WHERE
 			1 = 1 
@@ -303,3 +305,37 @@ func GetReportCollectionBillboardList(limit int, pars []interface{}, condition s
 	_, err = o.Raw(sql, pars, limit).QueryRows(&items)
 	return
 }
+
+//获取产业报告+晨会点评列表
+func GetTimeLineReportIndustrialList(industrialManagementId, startSize, pageSize int) (items []*HomeArticle, total int, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT
+			a.id,
+			a.article_id,
+			a.title,
+			a.publish_date 
+		FROM
+			cygx_article AS a
+			INNER JOIN cygx_industrial_article_group_management AS man_g ON man_g.article_id = a.article_id 
+		WHERE
+			a.publish_status = 1 
+			AND a.is_class = 1 
+			AND man_g.industrial_management_id = ?  GROUP BY a.article_id  UNION ALL
+		SELECT
+			mmc.id,
+			0,
+			mmc.content AS title,
+			mm.meeting_time AS publish_data 
+		FROM
+			cygx_morning_meeting_review_chapter AS mmc
+			INNER JOIN cygx_morning_meeting_reviews AS mm 
+		WHERE
+			mm.id = mmc.meeting_id 
+			AND mm.STATUS = 1 
+			AND mmc.industry_id = ? `
+	totalSql := `SELECT COUNT(1) total FROM (` + sql + `) z `
+	err = o.Raw(totalSql, industrialManagementId, industrialManagementId).QueryRow(&total)
+	sql += ` ORDER BY publish_date DESC  LIMIT ?,? `
+	_, err = o.Raw(sql, industrialManagementId, industrialManagementId, startSize, pageSize).QueryRows(&items)
+	return
+}

+ 2 - 44
models/report_mapping.go

@@ -107,6 +107,8 @@ type IndustrialToArticleCategoryListRep struct {
 	IndustrialManagementId int    `description:"产业D"`
 	List                   []*IndustrialToArticleCategoryRep
 	ListSubject            []*IndustrialSubject
+	IndustryVideo          *MicroVideoSimpleInfo
+	AuthInfo               *UserPermissionAuthInfo
 }
 
 //通过分类ID获取详情
@@ -169,47 +171,3 @@ type ReportMappingStatistical struct {
 	Pv              int    `description:"Pv"`
 	Uv              int    `description:"Uv"`
 }
-
-//获取报表
-func GetStatisticalReportArtilce(chartPermissionId int) (items []*ReportMappingStatistical, err error) {
-	o := orm.NewOrm()
-	sql := `SELECT
-	m.category_id,
-	m.chart_permission_name,
-	a.article_id,
-	a.title,
-	a.is_summary,
-	a.is_class,
-	(SELECT count( 1 ) FROM cygx_article_history_record AS h  WHERE	h.article_id = a.article_id 	) AS pv,
-	(SELECT COUNT( DISTINCT h.user_id ) FROM cygx_article_history_record AS h   WHERE h.article_id = a.article_id ) AS uv
-FROM
-	cygx_report_mapping AS m
-	INNER JOIN cygx_article AS a ON a.category_id = m.category_id 
-WHERE
-	m.chart_permission_id = ?
-	and a.is_class= 1
-	and a.is_report= 1
-	and m.id !=28
-	and a.is_filter= 0
-	GROUP BY a.article_id`
-	_, err = o.Raw(sql, chartPermissionId).QueryRows(&items)
-	return
-}
-
-//获取报表
-func GetStatisticalReportArtilceExpert() (items []*ReportMappingStatistical, err error) {
-	o := orm.NewOrm()
-	sql := `SELECT
-	a.article_id,
-	a.title,
-	a.is_summary,
-	a.is_class,
-	(SELECT count( 1 ) FROM cygx_article_history_record AS h  WHERE	h.article_id = a.article_id ) AS pv,
-	(SELECT COUNT( DISTINCT h.user_id ) FROM cygx_article_history_record AS h   WHERE h.article_id = a.article_id ) AS uv
-	FROM
-		cygx_article AS a
-	WHERE
-		a.category_name LIKE '%研选%'`
-	_, err = o.Raw(sql).QueryRows(&items)
-	return
-}

+ 18 - 0
routers/commentsRouter.go

@@ -187,6 +187,24 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["hongze/hongze_clpt/controllers:ReportCommonController"] = append(beego.GlobalControllerRouter["hongze/hongze_clpt/controllers:ReportCommonController"],
+        beego.ControllerComments{
+            Method: "CompanyList",
+            Router: `/companyList`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["hongze/hongze_clpt/controllers:ReportCommonController"] = append(beego.GlobalControllerRouter["hongze/hongze_clpt/controllers:ReportCommonController"],
+        beego.ControllerComments{
+            Method: "Timeline",
+            Router: `/timeline`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["hongze/hongze_clpt/controllers:ReportController"] = append(beego.GlobalControllerRouter["hongze/hongze_clpt/controllers:ReportController"],
         beego.ControllerComments{
             Method: "CategoryFllow",

+ 72 - 2
services/article.go

@@ -1,10 +1,13 @@
 package services
 
 import (
+	"errors"
 	"fmt"
 	"github.com/PuerkitoBio/goquery"
+	"hongze/hongze_clpt/models"
 	"hongze/hongze_clpt/utils"
 	"html"
+	"strconv"
 	"strings"
 	"unicode/utf8"
 )
@@ -47,9 +50,7 @@ func GetReportContentTextSubByarticle(content, abstract string, articleId int) (
 	} else {
 		contentSub, err = GetReportContentTextSub(content)
 	}
-
 	return
-
 }
 
 func GetReportContentTextSub(content string) (contentSub string, err error) {
@@ -76,3 +77,72 @@ func GetReportContentTextArticleBody(content string) (contentSub string) {
 	contentSub = strings.Replace(contentSub, "pre", "div", -1)
 	return
 }
+
+//HandleArticleCategoryImg 预处理文章的封面图片
+func HandleArticleCategoryImg(list []*models.ArticleListResp) (items []*models.ArticleListResp, err error) {
+	//研选的五张图片
+	detailResearch, e := models.GetConfigByCode("category_research_img_url")
+	if e != nil {
+		err = errors.New("获取研选的五张图片失败" + e.Error())
+		return
+	}
+	researchList := strings.Split(detailResearch.ConfigValue, "{|}")
+	//对应分类的所图片
+	detailCategoryUrl, err := models.GetConfigByCode("category_map_img_url")
+	if err != nil {
+		err = errors.New("获取对应分类的所图片失败" + 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]
+		//如果文章一开始的内容是图片,优先展示第一张图片
+		newBody, _ := GetReportContentTextSubByarticle(item.Body, item.Annotation, item.ArticleId)
+		list[k].Annotation = newBody
+		list[k].Body = ""
+		list[k].PublishDate = utils.StrTimeToTime(item.PublishDate).Format(utils.FormatDate) //时间字符串格式转时间格式
+		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 {
+		list = make([]*models.ArticleListResp, 0)
+	}
+	items = list
+	return
+}
+
+//HandleArticleStock 处理报告关联的个股标签
+func HandleArticleStock(stock string) (items []*models.ComapnyNameResp) {
+	sliceSubjects := strings.Split(stock, "/")
+	if len(sliceSubjects) > 0 {
+		for _, vSubject := range sliceSubjects {
+			sliceKuohao := strings.Split(vSubject, "(")           //过滤括号
+			sliceXiahuaxian := strings.Split(sliceKuohao[0], "-") //过滤下划线
+			subject := sliceXiahuaxian[0]
+			items = append(items, &models.ComapnyNameResp{ComapnyName: subject})
+		}
+	}
+	return
+}

+ 44 - 178
services/micro_roadshow.go

@@ -41,200 +41,66 @@ func GetMicroRoadShowDefaultImgConfig() (audioMap, videoMap, audioShareMap, vide
 	return
 }
 
-// GetHomeNewestList 获取首页最新列表
-func GetHomeNewestList(userId, companyId, startSize, pageSize int, condition string, pars []interface{}) (resp []*models.HomeArticle, total int, err error) {
-	resp = make([]*models.HomeArticle, 0)
-	unionList, e := models.GetHomeNewestListUnionList(condition, pars, startSize, pageSize)
+func GetindustryVideo(user *models.WxUserItem, industrialManagementId int) (industryVideo *models.MicroVideoSimpleInfo, AuthInfo *models.UserPermissionAuthInfo, err error) {
+	total, e := models.GetMicroRoadshowVideoByIndustryIdCount(industrialManagementId)
 	if e != nil {
-		err = errors.New("获取首页最新列表失败")
+		err = errors.New("获取产业关联的视频失败,GetMicroRoadshowVideoByIndustryIdCount " + e.Error())
 		return
 	}
-	unionTotal, e := models.GetHomeNewestListUnionCount(condition, pars)
-	if e != nil {
-		err = errors.New("获取首页最新列表总数失败")
+	if total == 0 {
 		return
 	}
-	total = unionTotal
-
 	// 用户权限
-	authInfo, permissionArr, e := GetUserRaiPermissionInfo(userId, companyId)
+	authInfo, permissionArr, e := GetUserRaiPermissionInfo(user.UserId, user.CompanyId)
 	if e != nil {
-		err = errors.New("获取用户权限失败, Err: " + e.Error())
+		err = errors.New("获取用户权限失败,GetUserRaiPermissionInfo " + e.Error())
 		return
 	}
-
-	// 获取默认图配置
-	audioMap, videoMap, audioShareMap, videoShareMap, e := GetMicroRoadShowDefaultImgConfig()
+	videoSimple := new(models.MicroVideoSimpleInfo)
+	// 权限
+	var au *models.UserPermissionAuthInfo
+	video, e := models.GetMicroRoadshowVideoByIndustryId(industrialManagementId)
 	if e != nil {
-		err = errors.New("获取微路演默认图配置失败, Err: " + e.Error())
+		err = errors.New("获取产业关联的视频失败,GetMicroRoadshowVideoByIndustryId " + e.Error())
 		return
-	}
-
-	// 此处没有直接使用HomeArticle结构体而是多加了一层, 纯粹是为了方便前端区分纪要和微路演音频=_=!
-	for _, v := range unionList {
-		item := new(models.HomeArticle)
-		item.HomeType = v.HomeType
-		// 纪要
-		if item.HomeType == 0 {
-			item.ArticleId = v.ArticleId
-			item.Title = v.Title
-			item.TitleEn = v.TitleEn
-			item.UpdateFrequency = v.UpdateFrequency
-			item.CreateDate = v.CreateDate
-			item.PublishDate = v.PublishDate
-			item.Body = v.Body
-			item.BodyHtml = v.BodyHtml
-			item.Abstract = v.Abstract
-			item.CategoryName = v.CategoryName
-			item.SubCategoryName = v.SubCategoryName
-			item.ExpertBackground = v.ExpertBackground
-			item.IsResearch = v.IsResearch
-			item.Pv = v.Pv
-			item.ImgUrlPc = v.ImgUrlPc
-			item.CategoryId = v.CategoryId
-			item.HttpUrl = v.HttpUrl
-			item.IsNeedJump = v.IsNeedJump
-			item.Source = v.Source
-			item.Annotation = v.Annotation
+	} else {
+		videoSimple.Id = video.VideoId
+		videoSimple.Title = "5min逻辑【" + video.IndustryName + "】解析"
+		videoSimple.BackgroundImg = video.ImgUrl
+		videoSimple.DetailImgUrl = video.DetailImgUrl
+		if videoSimple.BackgroundImg == "" {
+			// 获取默认图配置
+			_, videoMap, _, _, e := GetMicroRoadShowDefaultImgConfig()
+			if e != nil {
+				err = errors.New("获取视频默认配置图失败,GetMicroRoadshowVideoByIndustryId " + e.Error())
+				return
+			}
+			videoSimple.BackgroundImg = videoMap[video.ChartPermissionId]
 		}
-		// 音频
-		if v.HomeType == 1 {
-			ad := new(models.MicroAudioUnionList)
-			ad.Id = v.Id
-			ad.AudioTitle = v.AudioTitle
-			ad.AudioResourceUrl = v.AudioResourceUrl
-			ad.AudioType = v.AudioType
-			ad.AudioPublishTime = utils.StrTimeToTime(v.AudioPublishTime).Format(utils.FormatDate)
-			ad.AudioImgUrl = v.AudioImgUrl
-			ad.AudioChartPermissionId = v.AudioChartPermissionId
-			ad.AudioChartPermissionName = v.AudioChartPermissionName
-			ad.AudioPlaySeconds = v.AudioPlaySeconds
-			ad.AudioPlaySeconds = v.AudioPlaySeconds
-			ad.AudioActivityId = v.AudioActivityId
-			item.MicroAudio = ad
-			// 默认图
-			if ad.AudioImgUrl == "" {
-				if ad.AudioType == 1 {
-					ad.AudioImgUrl = audioMap[ad.AudioChartPermissionId]
-				} else {
-					ad.AudioImgUrl = videoMap[ad.AudioChartPermissionId]
-				}
+		videoSimple.PlaySeconds = video.VideoDuration
+		videoSimple.ResourceUrl = video.VideoUrl
+		au = new(models.UserPermissionAuthInfo)
+		au.SellerName = authInfo.SellerName
+		au.SellerMobile = authInfo.SellerMobile
+		au.HasPermission = authInfo.HasPermission
+		au.OperationMode = authInfo.OperationMode
+		if au.HasPermission == 1 {
+			// 非宏观权限进一步判断是否有权限
+			if video.ChartPermissionId != utils.HONG_GUAN_ID && !utils.InArrayByStr(permissionArr, video.ChartPermissionName) {
+				au.HasPermission = 2
 			}
-			// 分享图
-			if ad.AudioType == 1 {
-				ad.AudioShareImg = audioShareMap[ad.AudioChartPermissionId]
+		}
+		// 无权限的弹框提示
+		if au.HasPermission != 1 {
+			if au.OperationMode == UserPermissionOperationModeCall {
+				au.PopupMsg = UserPermissionPopupMsgCallMicroVideo
 			} else {
-				ad.AudioShareImg = videoShareMap[ad.AudioChartPermissionId]
-			}
-			// 权限
-			au := new(models.UserPermissionAuthInfo)
-			au.SellerName = authInfo.SellerName
-			au.SellerMobile = authInfo.SellerMobile
-			au.HasPermission = authInfo.HasPermission
-			au.OperationMode = authInfo.OperationMode
-			if au.HasPermission == 1 {
-				// 非宏观权限进一步判断是否有权限
-				if ad.AudioChartPermissionId != utils.HONG_GUAN_ID && !utils.InArrayByStr(permissionArr, ad.AudioChartPermissionName) {
-					au.HasPermission = 2
-				}
+				au.PopupMsg = UserPermissionPopupMsgApplyMicroVideo
 			}
-			// 无权限的弹框提示
-			if au.HasPermission != 1 {
-				if au.OperationMode == UserPermissionOperationModeCall {
-					if ad.AudioType == 1 {
-						au.PopupMsg = UserPermissionPopupMsgCallActivity
-					} else {
-						au.PopupMsg = UserPermissionPopupMsgCallMicroVideo
-					}
-				} else {
-					if ad.AudioType == 1 {
-						au.PopupMsg = UserPermissionPopupMsgApplyActivity
-					} else {
-						au.PopupMsg = UserPermissionPopupMsgApplyMicroVideo
-					}
-				}
-			}
-			ad.AuthInfo = au
+			videoSimple.ResourceUrl = ""
 		}
-		resp = append(resp, item)
-	}
-	return
-}
-
-// GetMicroRoadShowPageList 获取微路演列表添加活动视频 更新与8.1版本
-func GetMicroRoadShowPageListV8(pageSize, currentIndex, audioId, videoId, activityVideoId int, keywords string) (respList []*models.MicroRoadShowPageList, total int, err error) {
-	var e error
-	// 根据每页数据量获取音视频配比
-	startSize := utils.StartIndex(currentIndex, pageSize)
-	videoList := make([]*models.MicroRoadShowPageList, 0)
-	if keywords != "" {
-		keywords = "%" + keywords + "%"
-	}
-
-	//音频的查询
-	var audioCond string
-	var audioPars []interface{}
-	// 如果筛选条件为指定视频ID则不做音频查询
-	if videoId > 0 || activityVideoId > 0 {
-		audioCond = ""
-	} else {
-		// 活动已发布且已结束
-		audioCond += ` AND b.publish_status = 1 AND b.active_state = 3`
-		//活动音频,设置有效时间为30天,失效后该活动就不再支持音频回放。有效期起始时间为活动的开始时间
-		//endTime := time.Now().AddDate(0, 0, -30).Format("2006-01-02 15:04:05")
-		//audioCond += ` AND b.activity_time > ? `
-		//audioPars = append(audioPars, endTime)
-		if keywords != "" {
-			audioCond += ` AND a.voice_name LIKE ? OR b.label LIKE ?`
-			audioPars = append(audioPars, keywords, keywords)
-		}
-		if audioId > 0 {
-			audioCond += ` AND a.activity_voice_id = ?`
-			audioPars = append(audioPars, audioId)
-		}
-	}
-	//视频的处理
-	var videoCond string
-	var videoCondAct string
-	var videoPars []interface{}
-	var videoParsAct []interface{}
-	if audioId > 0 {
-		videoCond = ""
-	} else {
-		if keywords != "" {
-			videoCond += ` AND video_name LIKE ?`
-			videoPars = append(videoPars, keywords)
-			videoCondAct += ` AND video_name LIKE ?`
-			videoParsAct = append(videoParsAct, keywords)
-		}
-		if videoId > 0 {
-			videoCond += ` AND video_id = ?`
-			videoPars = append(videoPars, videoId)
-		}
-		if activityVideoId > 0 {
-			videoCondAct += ` AND video_id = ?`
-			videoParsAct = append(videoParsAct, activityVideoId)
-		}
-
-		//如果传了路演的或者活动的视频ID只查询一个
-		if videoId > 0 {
-			videoCondAct += ` AND video_id = 0 `
-		}
-		if activityVideoId > 0 {
-			videoCond += ` AND video_id = 0 `
-		}
-		//if videoId == 0 {
-		//	endTime := time.Now().AddDate(0, 0, -30).Format("2006-01-02 15:04:05")
-		//	videoCondAct += ` AND art.activity_time > ? `
-		//	videoParsAct = append(videoParsAct, endTime)
-		//}
-		videoCond += ` AND publish_status = 1`
-	}
-	total, videoList, e = models.GetMicroRoadShowVideoPageListV8(startSize, pageSize, videoCond, videoPars, videoCondAct, videoParsAct, audioCond, audioPars, audioId, videoId, activityVideoId)
-	if e != nil {
-		err = errors.New("获取微路演音视频列表失败, Err: " + e.Error())
-		return
 	}
-	respList = videoList
+	industryVideo = videoSimple
+	AuthInfo = au
 	return
 }

+ 4 - 0
utils/constants.go

@@ -93,3 +93,7 @@ const (
 	COMPANY_PRODUCT_RAI_ID    = 2
 	COMPANY_PRODUCT_RAI_NAME  = "权益"
 )
+
+const (
+	TIME_CATEGORYID = 99999 //时间线的分类ID
+)