瀏覽代碼

Merge branch 'cygx_12.8.1' of http://8.136.199.33:3000/cxzhang/hongze_clpt

xingzai 1 年之前
父節點
當前提交
04473809fa

+ 9 - 1
controllers/morning_meeting.go

@@ -165,7 +165,15 @@ func (this *MorningMeetingController) GatherDetail() {
 			br.Msg = "获取失败"
 			br.ErrMsg = "获取失败,Err:" + err.Error()
 		}
-		detailResp.List = listMeet
+		var meetingreviewchaptIds []int
+		for _, v := range listMeet {
+			meetingreviewchaptIds = append(meetingreviewchaptIds, v.Id)
+		}
+		detailResp.List, err = services.GetCygxMorningMeetingReviewChapterListByIds(meetingreviewchaptIds)
+		if err != nil {
+			br.Msg = "获取失败"
+			br.ErrMsg = "GetCygxMorningMeetingReviewChapterListByIds,Err:" + err.Error()
+		}
 	} else {
 		detailResp.List = make([]*models.CygxMorningMeetingGatherDetailListResp, 0)
 	}

+ 1 - 0
controllers/product_interior.go

@@ -122,6 +122,7 @@ func (this *ProductInteriorController) Detail() {
 	detail.PublishTime = utils.TimeRemoveHms2(detail.PublishTime)
 	resp.Detail = detail
 	detail.BodySlice = services.GetProductInteriorUrlBody(detail.Body)
+	resp.Disclaimers = utils.DISCLAIMERS_PRODUCT_INTERIOR // 免责声明
 	go services.AddCygxProductInteriorHistory(user, productInteriorId)
 	go services.ProductInteriorHistoryUserRmind(user, productInteriorId)
 	br.Ret = 200

+ 25 - 1
controllers/report.go

@@ -1332,6 +1332,27 @@ func (this *MobileReportController) Timeline() {
 		br.ErrMsg = "获取产业报告+晨会点评列表,Err:" + err.Error()
 		return
 	}
+	//处理晨会精华关联的标的,以及要跳转的文章ID
+	var meetingreviewchaptIds []int
+	mapchaptIdAndArticleId := make(map[int]int)                            // 晨会精华ID与跳转文章ID的映射关系
+	mapchaptIdListSubject := make(map[int][]*models.CygxIndustrialSubject) // 晨会精华ID与标的列表的映射关系
+	for _, v := range list {
+		if v.Resource == 3 {
+			meetingreviewchaptIds = append(meetingreviewchaptIds, v.Id)
+		}
+	}
+	if len(meetingreviewchaptIds) > 0 {
+		listMeet, err := services.GetCygxMorningMeetingReviewChapterListByIds(meetingreviewchaptIds)
+		if err != nil {
+			br.Msg = "获取失败"
+			br.ErrMsg = "GetCygxMorningMeetingReviewChapterListByIds,Err:" + err.Error()
+		}
+		for _, v := range listMeet {
+			mapchaptIdAndArticleId[v.Id] = v.LinkArticleId
+			mapchaptIdListSubject[v.Id] = v.ListSubject
+		}
+	}
+
 	//查询用户今天是否看过时间线
 	//count, err := models.GetTimeLineRecordCount(user.UserId, industrialManagementId)
 	//if err != nil {
@@ -1366,7 +1387,10 @@ func (this *MobileReportController) Timeline() {
 			list[k].IsHaveVideo = true
 		}
 		v.PublishDate = utils.TimeRemoveHms2(v.PublishDate)
-
+		if v.Resource == 3 {
+			v.LinkArticleId = mapchaptIdAndArticleId[v.Id]
+			v.ListSubject = mapchaptIdListSubject[v.Id]
+		}
 	}
 
 	//添加我的日程访问记录

+ 1 - 0
controllers/research.go

@@ -165,6 +165,7 @@ func (this *MobileResearchController) ArticleNewList() {
 			ButtonStyle:     styleMap[v.ArticleTypeId],
 			List:            v.List,
 			SpecialColumnId: v.SpecialColumnId,
+			TopTime:         v.TopTime,
 		}
 		if v.IsSpecial == 1 {
 			//去除图片标签

+ 13 - 8
models/cygx_morning_meeting_gather.go

@@ -67,14 +67,19 @@ func GetCygxMorningMeetingGatherById(condition string, pars []interface{}) (item
 }
 
 type CygxMorningMeetingGatherDetailListResp struct {
-	Id                  int    `description:"ID"`
-	IndustryId          int    `description:"产业id"` // 产业id
-	IndustryName        string `description:"产业名称"` // 产业名称
-	ChartPermissionName string `description:"行业名称"` // 行业名称
-	ChartPermissionId   int    `description:"行业id"` // 行业id
-	MeetingId           int    `description:"主表id"` // 主表id
-	Content             string `description:"内容"`   // 内容
-	PublishTime         string `description:"发布日期"`
+	Id                   int                      `description:"ID"`
+	IndustryId           int                      `description:"产业id"` // 产业id
+	IndustryName         string                   `description:"产业名称"` // 产业名称
+	ChartPermissionName  string                   `description:"行业名称"` // 行业名称
+	ChartPermissionId    int                      `description:"行业id"` // 行业id
+	MeetingId            int                      `description:"主表id"` // 主表id
+	Content              string                   `description:"内容"`   // 内容
+	PublishTime          string                   `description:"发布日期"`
+	ReportLink           string                   `description:"报告链接"`
+	LinkArticleId        int                      `description:"报告ID链接"`
+	Title                string                   `description:"标题"`
+	IndustrialSubjectIds string                   `description:"标的id"`
+	ListSubject          []*CygxIndustrialSubject `description:"标的列表"`
 }
 
 type CygxMorningMeetingGatherDetailResp struct {

+ 1 - 0
models/home.go

@@ -84,6 +84,7 @@ type ArticleListResp struct {
 	SpecialColumnId     int      `description:"专栏栏目id"`
 	SpecialType         int      `description:"专栏类型 1:笔记,2:观点"`
 	List                []*IndustrialManagementIdInt
+	TopTime             int `description:"置顶时间"`
 }
 
 type HomeChartListResp struct {

+ 5 - 6
models/industrial_subject.go

@@ -2,7 +2,6 @@ package models
 
 import (
 	"github.com/beego/beego/v2/client/orm"
-	"time"
 )
 
 type IndustrialSubjectByArticle struct {
@@ -19,11 +18,11 @@ type SubjectArticlGroupList struct {
 }
 
 type CygxIndustrialSubject struct {
-	IndustrialSubjectId    int       `orm:"column(industrial_subject_id);pk" description:"标的id"`
-	IndustrialManagementId int       `description:"产业id"`
-	SubjectName            string    `description:"标的名称"`
-	CreateTime             time.Time `description:"创建时间"`
-	Source                 int       `description:"来源,1正常添加,2:通过文章添加,3通过活动添加(默认为1)"`
+	IndustrialSubjectId    int    `orm:"column(industrial_subject_id);pk" description:"标的id"`
+	IndustrialManagementId int    `description:"产业id"`
+	SubjectName            string `description:"标的名称"`
+	CreateTime             string `description:"创建时间"`
+	Source                 int    `description:"来源,1正常添加,2:通过文章添加,3通过活动添加(默认为1)"`
 }
 
 // 获取标的列表

+ 3 - 2
models/product_interior.go

@@ -120,8 +120,9 @@ func GetCygxProductInteriorList(condition string, pars []interface{}, startSize,
 
 type GetCygxProductInteriorDetailResp struct {
 	Detail        *CygxProductInteriorResp
-	HasPermission int  `description:"1:有该行业权限,正常展示,2:无该行业权限,不存在权益客户下,3:无该品类权限,已提交过申请,4:无该行业权限,未提交过申请,5:潜在客户,未提交过申请,6:潜在客户,已提交过申请"`
-	IsShow        bool `description:"是否展示"`
+	HasPermission int    `description:"1:有该行业权限,正常展示,2:无该行业权限,不存在权益客户下,3:无该品类权限,已提交过申请,4:无该行业权限,未提交过申请,5:潜在客户,未提交过申请,6:潜在客户,已提交过申请"`
+	IsShow        bool   `description:"是否展示"`
+	Disclaimers   string `description:"免责声明"`
 }
 
 // 通过ID获取详情

+ 30 - 27
models/report.go

@@ -596,17 +596,19 @@ type TimeLineReportItem struct {
 	ArticleId int    `description:"文章id"`
 	Title     string `description:"标题"`
 	//PublishTime     string `description:"发布时间"`
-	PublishDate     string `description:"发布时间"`
-	Content         string `description:"内容"`
-	VideoUrl        string `description:"视频链接"`
-	VoiceUrl        string `description:"音频链接"`
-	IsHaveVideo     bool   `description:"是否包含视频"`
-	ImgUrlPc        string `description:"pc图片"`
-	SubCategoryName string `description:"二级分类"`
-	IsRed           bool   `description:"是否标红"`
-	Readnum         int    `description:"阅读数量"`
-	Resource        int    `description:"来源类型,1:文章、2:产品内测、3:晨报点评 4:活动回放视频 5:活动回放音频 "`
-	Type            int    `description:"类型: 1-音频; 2-活动视频; 3-产业视频 、 4-系列问答视频"`
+	PublishDate     string                   `description:"发布时间"`
+	Content         string                   `description:"内容"`
+	VideoUrl        string                   `description:"视频链接"`
+	VoiceUrl        string                   `description:"音频链接"`
+	IsHaveVideo     bool                     `description:"是否包含视频"`
+	ImgUrlPc        string                   `description:"pc图片"`
+	SubCategoryName string                   `description:"二级分类"`
+	IsRed           bool                     `description:"是否标红"`
+	Readnum         int                      `description:"阅读数量"`
+	Resource        int                      `description:"来源类型,1:文章、2:产品内测、3:晨报点评 4:活动回放视频 5:活动回放音频 "`
+	Type            int                      `description:"类型: 1-音频; 2-活动视频; 3-产业视频 、 4-系列问答视频"`
+	LinkArticleId   int                      `description:"晨会精华报告ID链接"`
+	ListSubject     []*CygxIndustrialSubject `description:"标的列表"`
 }
 
 // 获取产业报告+晨会点评列表
@@ -638,12 +640,12 @@ FROM
 	SELECT
 		mmc.id,
 		0 as  article_id,
-		mmc.content AS title,
+		mmc.title,
 		mm.publish_time AS publish_date,
 		'' AS video_url,
 		'' AS voice_url,
 		'时间线' AS sub_category_name,
-		'' AS content,
+		mmc.content,
 		3 AS resource,
 		0 AS type,
 		0  AS readnum 
@@ -850,6 +852,7 @@ type ArticleResearchResp struct {
 	IndustryTags    []string                     `description:"研选专栏行业标签"`
 	CompanyTags     []string                     `description:"研选专栏公司标签"`
 	SpecialColumnId int                          `description:"专栏栏目id"`
+	TopTime         int                          `description:"置顶时间"`
 }
 
 // 获取数量
@@ -890,7 +893,8 @@ func GetArticleResearchList(condition string, pars []interface{}, startSize, pag
 			0 AS special_type,
 			0 AS special_column_id,
 			'' AS company_tags, 
-			'' AS industry_tags
+			'' AS industry_tags,
+			a.top_time
 		FROM
 			cygx_article AS a
 			LEFT JOIN cygx_industrial_article_group_management AS mg ON mg.article_id = a.article_id
@@ -921,16 +925,17 @@ func GetArticleResearchList(condition string, pars []interface{}, startSize, pag
 		a.type AS special_type,
 		b.id AS special_column_id,
 		a.company_tags AS company_tags, 
-		a.industry_tags AS industry_tags 
+		a.industry_tags AS industry_tags,
+		0 as top_time
 	FROM
 	cygx_yanxuan_special AS a
 	JOIN cygx_yanxuan_special_author AS b ON a.user_id = b.user_id
 	WHERE
 	1 = 1  AND a.status = 3 `
-		sql += ` GROUP BY article_id ORDER  BY publish_date DESC  LIMIT ?,? `
+		sql += ` GROUP BY article_id ORDER  BY  top_time DESC , publish_date DESC  LIMIT ?,? `
 		_, err = o.Raw(sql, userId, userId, pars, startSize, pageSize).QueryRows(&items)
 	} else {
-		sql += ` GROUP BY a.article_id ORDER  BY a.publish_date DESC  LIMIT ?,? `
+		sql += ` GROUP BY  a.article_id ORDER  BY top_time DESC , a.publish_date DESC  LIMIT ?,? `
 		_, err = o.Raw(sql, userId, pars, startSize, pageSize).QueryRows(&items)
 	}
 	return
@@ -954,7 +959,8 @@ func GetArticleResearchListYx(condition string, pars []interface{}, startSize, p
 			0 AS special_type,
 			0 AS special_column_id,
 			'' AS company_tags, 
-			'' AS industry_tags
+			'' AS industry_tags,
+			a.top_time
 		FROM
 			cygx_article AS a
 			INNER JOIN cygx_article_department AS d ON d.department_id = a.department_id 
@@ -963,8 +969,8 @@ func GetArticleResearchListYx(condition string, pars []interface{}, startSize, p
 	if condition != "" {
 		sql += condition
 	}
-	if needYanxuanSpecial {
-		sql += `UNION ALL
+
+	sql += `UNION ALL
 	SELECT
 		a.id AS article_id,
 		a.title AS title,
@@ -981,18 +987,15 @@ func GetArticleResearchListYx(condition string, pars []interface{}, startSize, p
 		a.type AS special_type,
 		b.id AS special_column_id,
 		a.company_tags AS company_tags, 
-		a.industry_tags AS industry_tags 
+		a.industry_tags AS industry_tags,
+		0 as top_time
 	FROM
 	cygx_yanxuan_special AS a
 	JOIN cygx_yanxuan_special_author AS b ON a.user_id = b.user_id
 	WHERE
 	1 = 1  AND a.status = 3 `
-		sql += ` GROUP BY article_id ORDER  BY publish_date DESC  LIMIT ?,? `
-		_, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&items)
-	} else {
-		sql += ` GROUP BY a.article_id ORDER  BY a.publish_date DESC  LIMIT ?,? `
-		_, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&items)
-	}
+	sql += ` 	GROUP BY  article_id ORDER  BY top_time DESC , publish_date DESC   LIMIT  ?,? `
+	_, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&items)
 	return
 }
 

+ 5 - 5
services/es_comprehensive.go

@@ -414,13 +414,13 @@ func GetResourceDataEsList(list []*SearchComprehensiveItem, user *models.WxUserI
 
 	//处理晨会精华
 	if len(meetingreviewchaptIds) > 0 {
-		pars = make([]interface{}, 0)
-		condition = ` AND c.id IN (` + utils.GetOrmInReplace(len(meetingreviewchaptIds)) + `)`
-		pars = append(pars, meetingreviewchaptIds)
+		//pars = make([]interface{}, 0)
+		//condition = ` AND c.id IN (` + utils.GetOrmInReplace(len(meetingreviewchaptIds)) + `)`
+		//pars = append(pars, meetingreviewchaptIds)
 
-		listrMeet, e := models.GetCygxMorningMeetingReviewChapterList(condition, pars)
+		listrMeet, e := GetCygxMorningMeetingReviewChapterListByIds(meetingreviewchaptIds)
 		if e != nil {
-			err = errors.New("GetResourceDataList, Err: " + e.Error())
+			err = errors.New("GetCygxMorningMeetingReviewChapterListByIds, Err: " + e.Error())
 			return
 		}
 		for _, v := range listrMeet {

+ 71 - 0
services/morning_meeting.go

@@ -5,6 +5,8 @@ import (
 	"fmt"
 	"hongze/hongze_clpt/models"
 	"hongze/hongze_clpt/utils"
+	"strconv"
+	"strings"
 	"time"
 )
 
@@ -48,3 +50,72 @@ func AddCygxMorningMeetingReviewChapterHistory(user *models.WxUserItem, articleI
 	}
 	return
 }
+
+// 通过晨会精华子ID,获取出参列表详情
+func GetCygxMorningMeetingReviewChapterListByIds(meetingreviewchaptIds []int) (items []*models.CygxMorningMeetingGatherDetailListResp, err error) {
+	lenArr := len(meetingreviewchaptIds)
+	if lenArr == 0 {
+		return
+	}
+	defer func() {
+		if err != nil {
+			go utils.SendAlarmMsg(fmt.Sprint("通过晨会精华子ID,获取出参列表详情失败 ,GetCygxMorningMeetingReviewChapterListByIds err"+err.Error(), "meetingreviewchaptIds:", meetingreviewchaptIds), 2)
+		}
+	}()
+	var condition string
+	var pars []interface{}
+
+	pars = make([]interface{}, 0)
+	condition = ` AND c.id IN (` + utils.GetOrmInReplace(lenArr) + `)`
+	pars = append(pars, meetingreviewchaptIds)
+
+	//查询晨会
+	listrMeet, e := models.GetCygxMorningMeetingReviewChapterList(condition, pars)
+	if e != nil {
+		err = errors.New("GetCygxMorningMeetingReviewChapterList, Err: " + e.Error())
+		return
+	}
+
+	//获取晨会相关的标的
+	var subjectIds []string
+	for _, v := range listrMeet {
+		if v.IndustrialSubjectIds != "" {
+			slice := strings.Split(v.IndustrialSubjectIds, ",")
+			for _, vS := range slice {
+				subjectIds = append(subjectIds, vS)
+			}
+		}
+	}
+
+	lensubjectIds := len(subjectIds)
+	if lensubjectIds > 0 {
+		//获取标的信息
+		pars = make([]interface{}, 0)
+		condition = ` AND industrial_subject_id  IN (` + utils.GetOrmInReplace(lensubjectIds) + `)`
+		pars = append(pars, subjectIds)
+		listsubject, e := models.GetCygxIndustrialSubjectListCondition(condition, pars)
+		if e != nil {
+			err = errors.New("GetCygxIndustrialSubjectListCondition, Err: " + e.Error())
+			return
+		}
+
+		var meetSubjectItems = make(map[string]*models.CygxIndustrialSubject)
+		for _, v := range listsubject {
+			meetSubjectItems[strconv.Itoa(v.IndustrialSubjectId)] = v
+		}
+
+		//建立标的与晨会的映射关系
+		for _, v := range listrMeet {
+			if v.IndustrialSubjectIds != "" {
+				slice := strings.Split(v.IndustrialSubjectIds, ",")
+				for _, vS := range slice {
+					if meetSubjectItems[vS] != nil {
+						v.ListSubject = append(v.ListSubject, meetSubjectItems[vS])
+					}
+				}
+			}
+		}
+	}
+	items = listrMeet
+	return
+}

+ 6 - 6
services/resource_data.go

@@ -135,13 +135,13 @@ func GetResourceDataList(condition string, pars []interface{}, startSize, pageSi
 
 	//处理晨会精华
 	if len(meetingreviewchaptIds) > 0 {
-		pars = make([]interface{}, 0)
-		condition = ` AND c.id IN (` + utils.GetOrmInReplace(len(meetingreviewchaptIds)) + `)`
-		pars = append(pars, meetingreviewchaptIds)
-
-		listrMeet, e := models.GetCygxMorningMeetingReviewChapterList(condition, pars)
+		//pars = make([]interface{}, 0)
+		//condition = ` AND c.id IN (` + utils.GetOrmInReplace(len(meetingreviewchaptIds)) + `)`
+		//pars = append(pars, meetingreviewchaptIds)
+		//
+		listrMeet, e := GetCygxMorningMeetingReviewChapterListByIds(meetingreviewchaptIds)
 		if e != nil {
-			err = errors.New("GetResourceDataList, Err: " + e.Error())
+			err = errors.New("GetCygxMorningMeetingReviewChapterListByIds, Err: " + e.Error())
 			return
 		}
 		for _, v := range listrMeet {

+ 8 - 7
utils/constants.go

@@ -22,13 +22,14 @@ const (
 )
 
 const (
-	APPNAME             = "弘则-策略平台网页版"
-	EmailSendToUsers    = "cxzhang@hzinsights.com"
-	ApiAuthorization    = "bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkiLCJwaG9uZV9udW1iZXIiOiIxMjM0NTY3ODkiLCJuYW1lIjoi5YW25LuWIiwiZW50cmFuY2UiOiJwYXNzd3dvcmQiLCJpYXQiOjE2MzQ4NzA1OTQsImV4cCI6MTYzNDg3NDE5NH0.tho2L9jsbDPn8ltEGUVDve_nHsh0Kzf6ZrSz0RcZ0ag"
-	ApiUrl              = "https://vmp.hzinsights.com/v2api/"
-	CHART_INFO_HTTP_URL = "https://vmp.hzinsights.com/v2/charts/"
-	DISCLAIMERS         = "本文为用户投稿,用户在平台中发表的所有资料、言论等仅代表个人观点,与本平台立场无关,不对您构成任何投资建议。本平台对文中陈述、观点判断保持中立,不对所包含内容及数据的真实性、准确性、可靠性或完整性提供任何明示或暗示的保证。请读者仅作参考,并请自行承担全部责任。"
-	REGISTER_PLATFORM   = 2 // 来源 1小程序,2:网页
+	APPNAME                             = "弘则-策略平台网页版"
+	EmailSendToUsers                    = "cxzhang@hzinsights.com"
+	ApiAuthorization                    = "bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkiLCJwaG9uZV9udW1iZXIiOiIxMjM0NTY3ODkiLCJuYW1lIjoi5YW25LuWIiwiZW50cmFuY2UiOiJwYXNzd3dvcmQiLCJpYXQiOjE2MzQ4NzA1OTQsImV4cCI6MTYzNDg3NDE5NH0.tho2L9jsbDPn8ltEGUVDve_nHsh0Kzf6ZrSz0RcZ0ag"
+	ApiUrl                              = "https://vmp.hzinsights.com/v2api/"
+	CHART_INFO_HTTP_URL                 = "https://vmp.hzinsights.com/v2/charts/"
+	DISCLAIMERS                         = "本文为用户投稿,用户在平台中发表的所有资料、言论等仅代表个人观点,与本平台立场无关,不对您构成任何投资建议。本平台对文中陈述、观点判断保持中立,不对所包含内容及数据的真实性、准确性、可靠性或完整性提供任何明示或暗示的保证。请读者仅作参考,并请自行承担全部责任。"
+	DISCLAIMERS_PRODUCT_INTERIOR string = "<pstyle=\"text-align: center;\">免责声明</p><p>本报告仅供弘则弥道(上海)投资咨询有限公司正式签约的机构客户使用,不会因接收人/接收机构收到本报告而将其视为客户。本报告根据国际和行业通行的准则,以合法渠道获得这些信息,尽可能保证可靠、准确和完整,但并不保证报告所述信息的准确性和完整性,也不保证本报告所包含的信息或建议在本报告发出后不会发生任何变更。本报告中所提供的信息仅供参考。报告中的内容不对投资者做出的最终操作建议做任何的担保,也没有任何形式的分享投资收益或者分担投资损失的书面或口头承诺。不作为客户在投资、法律、会计或税务等方面的最终操作建议,也不作为道义的、责任的和法律的依据或者凭证,无论是否已经明示或者暗示。在任何情况下,本公司不对客户/接收人/接收机构因使用报告中内容所引致的一切损失负责任,客户/接收人/接收机构需自行承担全部风险。</p><p><br/></p>" // 产品内测免责声明
+	REGISTER_PLATFORM                   = 2                                                                                                                                                                                                                                                                                                                                                                                                                            // 来源 1小程序,2:网页
 )
 
 // 手机号,电子邮箱正则