Browse Source

查研观向网页版4.2

xingzai 2 years ago
parent
commit
bfde1271c7

+ 330 - 0
controllers/report.go

@@ -1502,3 +1502,333 @@ func (this *ReportController) CommentAdd() {
 	br.Success = true
 	br.Msg = "提交成功"
 }
+
+// @Title 报告精选、本周研究汇总、上周纪要汇总列表
+// @Description 获取报告精选、本周研究汇总、上周纪要汇总列表接口
+// @Param   PageSize   query   int  true       "每页数据条数"
+// @Param   CurrentIndex   query   int  true       "当前页页码,从1开始"
+// @Param   ReportType   string   query     true       "报告类型 ,1报告精选、2本周研究汇总、3上周纪要汇总"
+// @Success 200 {object} models.CygxReportSelectionListPublicRep
+// @router /reportList/byType [get]
+func (this *ReportController) ReportListByType() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	user := this.User
+	if user == nil {
+		br.Msg = "请重新登录"
+		br.Ret = 408
+		return
+	}
+	uid := user.UserId
+	pageSize, _ := this.GetInt("PageSize")
+	currentIndex, _ := this.GetInt("CurrentIndex")
+	reportType := this.GetString("ReportType")
+	var condition string
+	var startSize int
+	if pageSize <= 0 {
+		pageSize = utils.PageSize20
+	}
+	if currentIndex <= 0 {
+		currentIndex = 1
+	}
+	startSize = paging.StartIndex(currentIndex, pageSize)
+	var pars []interface{}
+	var total int
+	resp := new(models.CygxReportSelectionListPublicRep)
+	page := paging.GetPaging(currentIndex, pageSize, total)
+	var tbdb string
+	var readSql string
+	var reportTypeStr string
+	if reportType == "1" {
+		tbdb = "cygx_report_selection"
+		reportTypeStr = "bgjx"
+	} else if reportType == "2" {
+		tbdb = "cygx_research_summary"
+		reportTypeStr = "bzyjhz"
+	} else if reportType == "3" {
+		tbdb = "cygx_minutes_summary"
+		reportTypeStr = "szjyhz"
+	} else {
+		br.Msg = "请选择报告类型"
+		return
+	}
+	condition = ` AND publish_status = 1  `
+	if user.CompanyId != utils.HZ_COMPANY_ID {
+		condition += ` AND visible_range = 1  `
+	}
+	total, err := models.GetCygxReportSelectionPublic(condition, tbdb, pars)
+	if err != nil {
+		br.Msg = "获取信息失败"
+		br.ErrMsg = "获取帖子总数失败,Err:" + err.Error()
+		return
+	}
+	//研究汇总--报告精选 只显示最新一期,往期都隐藏
+	if reportType == "1" {
+		startSize = 0
+		pageSize = 1
+		total = 1
+	}
+	readSql = ` (SELECT COUNT(1) AS  count  FROM cygx_report_history_record AS h WHERE h.article_id = art.article_id AND  report_type ='` + reportTypeStr + `' AND h.user_id = ` + strconv.Itoa(uid) + `) as read_num`
+	page = paging.GetPaging(currentIndex, pageSize, total)
+	list, err := models.GetReportSelectionListPublic(condition, readSql, tbdb, pars, startSize, pageSize)
+	if err != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取失败,Err:" + err.Error()
+		return
+	}
+	for k, v := range list {
+		if reportType == "1" {
+			list[k].Abstract = v.UpdateDescription
+		}
+		list[k].PublishDate = utils.StrTimeToTime(v.PublishDate).Format("2006-01-02")
+		if v.ReadNum == 0 {
+			list[k].IsRed = true
+		}
+	}
+	resp.List = list
+	resp.Paging = page
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = resp
+}
+
+// @Title 获取本周研究汇总详情
+// @Description 获取本周研究汇总详情接口
+// @Param   ArticleId   query   int  true       "报告ID"
+// @Success 200 {object} models.ResearchSummaryLetailResp
+// @router /researchSummary/detail [get]
+func (this *ReportController) ResearchDetail() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	user := this.User
+	if user == nil {
+		br.Msg = "请重新登录"
+		br.Ret = 408
+		return
+	}
+	//uid := user.UserId
+	articleId, _ := this.GetInt("ArticleId")
+	if articleId < 0 {
+		br.Msg = "参数错误"
+		br.ErrMsg = "参数错误"
+		return
+	}
+	resp := new(models.ResearchSummaryLetailResp)
+	//判断用户权限
+	hasPermission, err := services.GetUserhasPermission(user)
+	if err != nil {
+		br.Msg = "获取信息失败"
+		br.ErrMsg = "获取用户权限信息失败,Err:" + err.Error()
+	}
+	detail, err := models.GetCygxResearchSummaryInfoById(articleId)
+	if err != nil {
+		br.Msg = "获取信息失败"
+		br.ErrMsg = "报告不存在,Err:" + err.Error() + "articleId:" + strconv.Itoa(articleId)
+		return
+	}
+
+	//未设置全部可见的只能给弘则内部查看
+	if detail.VisibleRange == 1 || user.CompanyId == utils.HZ_COMPANY_ID {
+		resp.IsShow = true
+	}
+	resp.HasPermission = hasPermission
+	if hasPermission != 1 || !resp.IsShow {
+		br.Ret = 200
+		br.Success = true
+		br.Msg = "获取成功"
+		br.Data = resp
+		return
+	}
+	detail.PublishDate = utils.StrTimeToTime(detail.PublishDate).Format(utils.FormatDate)
+	detail.VideoPlaySeconds = utils.Mp3Time(detail.VideoPlaySeconds)
+	listFirst, err := models.GetResearchSummarylogListFirst(articleId)
+	if err != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取子类信息失败,Err:" + err.Error()
+		return
+	}
+	listArticleType, err := models.GetCygxArticleTypeList()
+	if err != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取文章类型数据失败,Err:" + err.Error()
+		return
+	}
+	for k, v := range listFirst {
+		listSecond, err := models.GetResearchSummarylogSonListSecond(articleId, v.Type)
+		if err != nil && err.Error() != utils.ErrNoRow() {
+			br.Msg = "获取信息失败"
+			br.ErrMsg = "获取信息失败,Err:" + err.Error()
+			return
+		}
+		for k2, v2 := range listSecond {
+			listThird, err := models.GetResearchSummarylogSonListThird(articleId, v2.ChartPermissionId, v.Type)
+			if err != nil && err.Error() != utils.ErrNoRow() {
+				br.Msg = "获取信息失败"
+				br.ErrMsg = "获取信息失败,Err:" + err.Error()
+				return
+			}
+			for _, vType := range listArticleType {
+				if v2.ChartPermissionId == vType.YanxPermissionId {
+					listSecond[k2].IcoLink = vType.IcoLinkM
+					listSecond[k2].PermissionName = vType.YanxPermissionName
+				}
+			}
+			if len(listThird) > 0 {
+				for k3, v3 := range listThird {
+					if v3.VideoUrl != "" {
+						listThird[k3].IsHaveVideo = true
+					}
+					if v3.ReportLink == "0" {
+						listThird[k3].ReportLink = ""
+					}
+				}
+				listSecond[k2].List = listThird
+			}
+		}
+		if len(listSecond) > 0 {
+			listFirst[k].List = listSecond
+		}
+		//`description:"类型'SDBG深度报告片篇,’CYDYJY:产业调研纪要’,’SJDP事件点评,’BZCHJH:本周晨会精华’"`
+		if v.Type == "SDBG" {
+			listFirst[k].ListName = "深度报告"
+			listFirst[k].IcoLink = "https://hongze.oss-cn-shanghai.aliyuncs.com/static/images/202110/20211027/le8AcRjDz0MhA72bVDiaf3d5ALSe.png"
+		} else if v.Type == "BZCHJH" {
+			listFirst[k].ListName = "本周晨会精华"
+			listFirst[k].IcoLink = "https://hongze.oss-cn-shanghai.aliyuncs.com/static/images/202110/20211020/DCfekcxaIKGePBsNVu1ULfmNcJBY.png"
+		} else if v.Type == "CYDYJY" {
+			listFirst[k].ListName = "产业调研纪要"
+			listFirst[k].IcoLink = "https://hongze.oss-cn-shanghai.aliyuncs.com/static/images/202110/20211020/UPAdozy96z9ypzY04vi0Y3Ogqzji.png"
+		} else if v.Type == "SSGS" {
+			listFirst[k].ListName = "上市公司调研纪要篇"
+			listFirst[k].IcoLink = "https://hongze.oss-cn-shanghai.aliyuncs.com/static/images/202111/20211101/ujHXB48I8ay9T0XoPRI7lorz7OkL.png"
+		} else if v.Type == "SJDP" {
+			listFirst[k].ListName = "市场QA汇总"
+			listFirst[k].IcoLink = "https://hongze.oss-cn-shanghai.aliyuncs.com/static/images/202110/20211020/2a5cXafO3Iws4QcFp1bd5WPdYikV.png"
+		} else if v.Type == "YANX" {
+			listFirst[k].ListName = "买方研选"
+			listFirst[k].IcoLink = "https://hongze.oss-cn-shanghai.aliyuncs.com/static/images/202111/20211104/QbTGTNhD9MxYp24cJ7V5WpCN0oNl.png"
+		}
+	}
+	go services.AddCygxReportHistoryRecord(user, articleId, "bzyjhz")
+	resp.List = listFirst
+	resp.Detail = detail
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = resp
+}
+
+// @Title 上周纪要汇总内容详情
+// @Description 获取上周纪要汇总内容详情接口
+// @Param   ArticleId   query   int  true       "报告ID"
+// @Success 200 {object} models.MinutesSummaryLetailResp
+// @router /minutesSummary/detail [get]
+func (this *ReportController) MinutesDetail() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	user := this.User
+	if user == nil {
+		br.Msg = "请重新登录"
+		br.Ret = 408
+		return
+	}
+	articleId, _ := this.GetInt("ArticleId")
+	if articleId < 0 {
+		br.Msg = "参数错误"
+		br.ErrMsg = "参数错误"
+		return
+	}
+	resp := new(models.MinutesSummaryLetailRespV4)
+	//判断用户权限
+	hasPermission, err := services.GetUserhasPermission(user)
+	if err != nil {
+		br.Msg = "获取信息失败"
+		br.ErrMsg = "获取用户权限信息失败,Err:" + err.Error()
+	}
+
+	detail, err := models.GetCygxMinutesSummaryInfoById(articleId)
+	if err != nil {
+		br.Msg = "获取信息失败"
+		br.ErrMsg = "报告不存在,Err:" + err.Error() + "articleId:" + strconv.Itoa(articleId)
+		return
+	}
+	//未设置全部可见的只能给弘则内部查看
+	if detail.VisibleRange == 1 || user.CompanyId == utils.HZ_COMPANY_ID {
+		resp.IsShow = true
+	}
+	resp.HasPermission = hasPermission
+	if hasPermission != 1 || !resp.IsShow {
+		br.Ret = 200
+		br.Success = true
+		br.Msg = "获取成功"
+		br.Data = resp
+		return
+	}
+	detail.PublishDate = utils.StrTimeToTime(detail.PublishDate).Format(utils.FormatDate)
+	detail.VideoPlaySeconds = utils.Mp3Time(detail.VideoPlaySeconds)
+	listFirst, err := models.GetMinutesSummarylogListAllV4(articleId)
+	if err != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取子类信息失败,Err:" + err.Error()
+		return
+	}
+	for k, v := range listFirst {
+		listSecond, err := models.GetMinutesSummarylogSonListSecond(articleId, v.Type)
+		if err != nil && err.Error() != utils.ErrNoRow() {
+			br.Msg = "获取信息失败"
+			br.ErrMsg = "获取信息失败,Err:" + err.Error()
+			return
+		}
+		for k2, v2 := range listSecond {
+			listThird, err := models.GetMinutesSummarylogListThird(articleId, v2.ChartPermissionId, v.Type)
+			if err != nil && err.Error() != utils.ErrNoRow() {
+				br.Msg = "获取信息失败"
+				br.ErrMsg = "获取信息失败,Err:" + err.Error()
+				return
+			}
+			if len(listThird) > 0 {
+				for k3, v3 := range listThird {
+					if v3.VideoUrl != "" {
+						listThird[k3].IsHaveVideo = true
+					}
+					if v3.ReportLink == "0" {
+						listThird[k3].ReportLink = ""
+					}
+				}
+				listSecond[k2].List = listThird
+			}
+		}
+		if len(listSecond) > 0 {
+			listFirst[k].List = listSecond
+		}
+		//`description:"类型'SDBG深度报告片篇,’CYDYJY:产业调研纪要’,’SJDP事件点评,’BZCHJH:本周晨会精华’"`
+		if v.Type == "CYDYJY" {
+			listFirst[k].ListName = "产业调研纪要"
+			listFirst[k].IcoLink = "https://hongze.oss-cn-shanghai.aliyuncs.com/static/images/202110/20211020/UPAdozy96z9ypzY04vi0Y3Ogqzji.png"
+		} else if v.Type == "SSGS" {
+			listFirst[k].ListName = "上市公司调研纪要篇"
+			listFirst[k].IcoLink = "https://hongze.oss-cn-shanghai.aliyuncs.com/static/images/202111/20211101/ujHXB48I8ay9T0XoPRI7lorz7OkL.png"
+		} else if v.Type == "YANX" {
+			listFirst[k].ListName = "买方研选纪要"
+			listFirst[k].IcoLink = "https://hongze.oss-cn-shanghai.aliyuncs.com/static/images/202111/20211104/QbTGTNhD9MxYp24cJ7V5WpCN0oNl.png"
+		}
+	}
+
+	go services.AddCygxReportHistoryRecord(user, articleId, "szjyhz")
+	resp.List = listFirst
+	resp.Detail = detail
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = resp
+}

+ 233 - 0
controllers/report_selection.go

@@ -0,0 +1,233 @@
+package controllers
+
+import (
+	"encoding/json"
+	"hongze/hongze_clpt/models"
+	"hongze/hongze_clpt/services"
+	"hongze/hongze_clpt/utils"
+	"strconv"
+	"strings"
+	"time"
+)
+
+// 报告
+type ReportSelectionController struct {
+	BaseAuthController
+}
+
+// @Title 获取报告精选详情
+// @Description 获取报告精选详情接口
+// @Param   ArticleId   query   int  true       "报告ID"
+// @Param   IsBestNew   query   bool  false       "是否获取最新的一篇报告"
+// @Success 200 {object} models.ReportSelectionLetailResp
+// @router /detail [get]
+func (this *ReportSelectionController) Detail() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	user := this.User
+	if user == nil {
+		br.Msg = "请重新登录"
+		br.Ret = 408
+		return
+	}
+	//uid := user.UserId
+	articleId, _ := this.GetInt("ArticleId")
+	isBestNew, _ := this.GetBool("IsBestNew")
+	isBestNew = true
+	if isBestNew {
+		tbdb := "cygx_report_selection"
+		condition := ` AND publish_status = 1  `
+		var pars []interface{}
+		list, err := models.GetReportSelectionListPublic(condition, "1", tbdb, pars, 0, 1)
+		if err != nil {
+			br.Msg = "获取失败"
+			br.ErrMsg = "获取失败,Err:" + err.Error()
+			return
+		}
+		for _, v := range list {
+			articleId = v.ArticleId
+		}
+	}
+	if articleId < 1 {
+		br.Msg = "获取信息失败"
+		br.ErrMsg = "报告ID错误" + strconv.Itoa(articleId)
+		return
+	}
+	resp := new(models.ReportSelectionLetailResp)
+	//判断用户权限
+	hasPermission, err := services.GetUserhasPermission(user)
+	if err != nil {
+		br.Msg = "获取信息失败"
+		br.ErrMsg = "获取用户权限信息失败,Err:" + err.Error()
+	}
+	detail, err := models.GetCygxReportSelectionInfoById(articleId)
+	if err != nil {
+		br.Msg = "获取信息失败"
+		br.ErrMsg = "报告不存在,Err:" + err.Error() + "articleId:" + strconv.Itoa(articleId)
+		return
+	}
+	//未设置全部可见的只能给弘则内部查看
+	if detail.VisibleRange == 1 || user.CompanyId == utils.HZ_COMPANY_ID {
+		resp.IsShow = true
+	}
+	resp.HasPermission = hasPermission
+	if hasPermission != 1 || !resp.IsShow {
+		br.Ret = 200
+		br.Success = true
+		br.Msg = "获取成功"
+		br.Data = resp
+		return
+	}
+	if detail.ReportLink != "" {
+		articleIdLink, _ := services.GetReportLinkToArticleid(detail.ReportLink)
+		detail.CeLueArticleId = articleIdLink
+	}
+	articleStockMap, _ := services.GetArticleStockMap()
+	detail.PublishDate = utils.StrTimeToTime(detail.PublishDate).Format("2006-01-02")
+	existMap := make(map[int]int)
+	var items []*models.ReportSelectionChartPermission
+	var itemsSubject []*models.ReportSelectionChartLogPermission
+	listLog, err := models.GetReportSelectionlogListAll(articleId)
+	if err != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取子类信息失败,Err:" + err.Error()
+		return
+	}
+	detail.VideoPlaySeconds = utils.Mp3Time(detail.VideoPlaySeconds)
+	//获取行业核心逻辑汇总
+	listChartLog, err := models.GetCygxReportSelectionChartLogRepList(articleId)
+	if err != nil {
+		br.Msg = "获取失败"
+		br.ErrMsg = "获取失败,Err:" + err.Error()
+		return
+	}
+	mapChartLog := make(map[string]string)
+	for _, v := range listChartLog {
+		mapChartLog[v.ChartPermissionName] = v.BodyChartSummary
+	}
+	for _, v := range listLog {
+		item := new(models.ReportSelectionChartPermission)
+		itemSubject := new(models.ReportSelectionChartLogPermission)
+		itemSubject.PermissionName = v.PermissionName
+		if existMap[v.ChartPermissionId] == 0 {
+			//item.PermissionName = v.PermissionName + "领域深度报告和调研"
+			item.PermissionName = v.PermissionName
+			item.IcoLink = v.IcoLink
+			listSonLog, err := models.GetReportSelectionlogSonListAll(articleId, v.ChartPermissionId)
+			if err != nil && err.Error() != utils.ErrNoRow() {
+				br.Msg = "获取信息失败"
+				br.ErrMsg = "获取信息失败,Err:" + err.Error()
+				return
+			}
+			for k2, v2 := range listSonLog {
+				if v2.IndustrialManagementId != "" {
+					listIndustrial, err := models.GetIndustrialByIds(v2.IndustrialManagementId)
+					if err != nil && err.Error() != utils.ErrNoRow() {
+						br.Msg = "获取信息失败"
+						br.ErrMsg = "获取信息失败,Err:" + err.Error()
+						return
+					}
+					listSonLog[k2].OverviewArticleId = articleStockMap[v2.SubjectName]
+					listSonLog[k2].List = listIndustrial
+					if v2.Label != "" {
+						v2.CompanyLabel = strings.Split(v2.Label, "{|}")
+					}
+				}
+				itemSubject.ListSubject = append(itemSubject.ListSubject, &models.ReportSelectionChartLogSubjectName{SubjectName: v2.SubjectName, IsNew: v2.IsNew, IndustrialSubjectId: v2.IndustrialSubjectId})
+			}
+			item.BodyChartSummary = mapChartLog[v.PermissionName]
+			item.List = listSonLog
+			items = append(items, item)
+			itemsSubject = append(itemsSubject, itemSubject)
+			//itemLogs = make([]*models.CygxReportSelectionLogDetail, 0)
+		}
+		existMap[v.ChartPermissionId] = v.ChartPermissionId
+	}
+	//historyRecord := new(models.CygxReportHistoryRecord)
+	//historyRecord.UserId = uid
+	//historyRecord.ArticleId = articleId
+	//historyRecord.CreateTime = time.Now()
+	//historyRecord.Mobile = user.Mobile
+	//historyRecord.Email = user.Email
+	//historyRecord.CompanyId = user.CompanyId
+	//historyRecord.CompanyName = user.CompanyName
+	//historyRecord.RegisterPlatform = utils.REGISTER_PLATFORM
+	//historyRecord.ReportType = "bgjx"
+	//sellerItem, err := models.GetSellerByCompanyIdCheckFicc(user.CompanyId, 2)
+	//if err != nil && err.Error() != utils.ErrNoRow() {
+	//	br.Msg = "获取信息失败"
+	//	br.ErrMsg = "获取销售信息失败,Err:" + err.Error()
+	//	return
+	//}
+	//historyRecord.RealName = user.RealName
+	//if sellerItem != nil {
+	//	historyRecord.SellerName = sellerItem.RealName
+	//}
+	go services.AddCygxReportHistoryRecord(user, articleId, "bgjx")
+	resp.List = items
+	resp.ListPermissionSubject = itemsSubject
+	resp.Detail = detail
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "获取成功"
+	br.Data = resp
+}
+
+// @Title 标的点击记录
+// @Description 标的点击记录接口
+// @Param	request	body models.AddCygxReportSelectionSubjectHistoryReq true "type json string"
+// @router /click/history [post]
+func (this *ReportSelectionController) ClickHistory() {
+	br := new(models.BaseResponse).Init()
+	defer func() {
+		this.Data["json"] = br
+		this.ServeJSON()
+	}()
+	user := this.User
+	if user == nil {
+		br.Msg = "请重新登录"
+		br.Ret = 408
+		return
+	}
+	var req models.AddCygxReportSelectionSubjectHistoryReq
+	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
+	if err != nil {
+		br.Msg = "参数解析异常!"
+		br.ErrMsg = "参数解析失败,Err:" + err.Error()
+		return
+	}
+	if req.ArticleId <= 0 {
+		br.Msg = "文章不存在"
+		br.ErrMsg = "文章不存在,文章ID错误"
+		return
+	}
+	if req.IndustrialSubjectId <= 0 {
+		br.Msg = "标的ID不存在"
+		br.ErrMsg = "标的ID不存在,标的ID错误"
+		return
+	}
+	item := models.CygxReportSelectionSubjectHistory{
+		UserId:              user.UserId,
+		ArticleId:           req.ArticleId,
+		CreateTime:          time.Now(),
+		ModifyTime:          time.Now(),
+		Mobile:              user.Mobile,
+		Email:               user.Email,
+		CompanyId:           user.CompanyId,
+		CompanyName:         user.CompanyName,
+		IndustrialSubjectId: req.IndustrialSubjectId,
+		RegisterPlatform:    utils.REGISTER_PLATFORM,
+	}
+	err = models.AddCygxReportSelectionSubjectHistory(&item)
+	if err != nil {
+		br.Msg = "记录失败"
+		br.ErrMsg = "记录失败,Err:" + err.Error()
+		return
+	}
+	br.Ret = 200
+	br.Success = true
+	br.Msg = "记录成功"
+}

+ 31 - 0
models/article.go

@@ -225,3 +225,34 @@ func GetNewArticleByCategoryId(categoryId int) (item *ArticleDetail, err error)
 	err = o.Raw(sql, categoryId).QueryRow(&item)
 	return
 }
+
+func GetArticleDetailByIdMd5(articleIdMd5 string) (item *ArticleDetail, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM cygx_article WHERE article_id_md5 = ? `
+	err = o.Raw(sql, articleIdMd5).QueryRow(&item)
+	return
+}
+
+type SummaryArticleStock struct {
+	Id        int    `description:"新ID"`
+	ArticleId int    `description:"文章id"`
+	Stock     string `description:"个股标签"`
+}
+
+type SummaryArticleStockResp struct {
+	List []*SummaryArticleStock
+}
+
+// 综述报告
+func GetArticleStock() (items []*SummaryArticleStock, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT
+			stock,article_id
+		FROM
+			cygx_article AS art 
+		WHERE
+			1 = 1 
+			AND type_name = '综述报告' `
+	_, err = o.Raw(sql).QueryRows(&items)
+	return
+}

+ 2 - 0
models/db.go

@@ -61,6 +61,8 @@ func init() {
 		new(CygxArticleHistoryRecord),
 		new(CygxArticleHistoryRecordAll),
 		new(CygxActivitySpecialTripBill),
+		new(CygxReportHistoryRecord),
+		new(CygxReportSelectionSubjectHistory),
 	)
 	// 记录ORM查询日志
 	orm.Debug = true

+ 132 - 0
models/minutesSummary.go

@@ -0,0 +1,132 @@
+package models
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+)
+
+type DetailCygxMinutesSummaryRep struct {
+	ArticleId        int    `description:"报告Id"`
+	Title            string `description:"标题"`
+	Department       string `description:"作者"`
+	PublishDate      string `description:"发布时间"`
+	VideoUrl         string `description:"链接"`
+	VideoPlaySeconds string `description:"时长"`
+	VideoName        string `description:"音频名称"`
+	Abstract         string `description:"摘要"`
+	VisibleRange     int    `description:"设置可见范围1全部,0内部"`
+}
+
+type MinutesSummaryLetailRespV4 struct {
+	Detail        *DetailCygxMinutesSummaryRep
+	HasPermission int `description:"1:有该行业权限,正常展示,2:无该行业权限,不存在权益客户下,3:无该品类权限,已提交过申请,4:无该行业权限,未提交过申请,5:潜在客户,未提交过申请,6:潜在客户,已提交过申请"`
+	List          []*ResearchSummaryChartPermission
+	IsShow        bool `description:"是否展示"`
+}
+
+type MinutesSummaryLetailResp struct {
+	Detail        *DetailCygxMinutesSummaryRep
+	HasPermission int `description:"1:有该行业权限,正常展示,2:无该行业权限,不存在权益客户下,3:无该品类权限,已提交过申请,4:无该行业权限,未提交过申请,5:潜在客户,未提交过申请,6:潜在客户,已提交过申请"`
+	List          []*MinutesSummaryChartPermission
+	IsShow        bool `description:"是否展示"`
+}
+
+type MinutesSummaryChartPermission struct {
+	PermissionName    string `description:"行业名称"`
+	ChartPermissionId int    `description:"行业ID"`
+	IcoLink           string `orm:"column(image_url)"description:"图标链接"`
+	List              []*CygxMinutesSummaryLogDetail
+}
+
+type CygxMinutesSummaryLogDetail struct {
+	Body        string `description:"内容"`
+	ReportLink  string `orm:"column(link_article_id)"description:"报告链接"`
+	VideoUrl    string `description:"链接"`
+	IsHaveVideo bool   `description:"是否含有音频文件"`
+}
+type IndustriaMinutesSummary struct {
+	IndustrialManagementId int    `description:"产业Id"`
+	IndustryName           string `description:"产业名称"`
+}
+
+type MinutesSummaryId struct {
+	ArticleId int `description:"报告I"`
+}
+
+// 通过纪要ID获取详情
+func GetCygxMinutesSummaryInfoById(articleId int) (item *DetailCygxMinutesSummaryRep, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM cygx_minutes_summary  WHERE article_id=? AND publish_status = 1 `
+	err = o.Raw(sql, articleId).QueryRow(&item)
+	return
+}
+
+// 列表
+func GetMinutesSummarylogListAllV4(articleId int) (items []*ResearchSummaryChartPermission, err error) {
+	o := orm.NewOrm()
+	//sql := `SELECT c.permission_name ,c.image_url,l.*
+	//		FROM
+	//		cygx_minutes_summary_log AS l
+	//		INNER JOIN chart_permission AS c ON c.chart_permission_id = l.chart_permission_id
+	//		WHERE l.article_id = ?
+	//		GROUP BY l.chart_permission_id
+	//		ORDER BY l.chart_permission_sort ASC   `
+	sql := `SELECT l.* 
+			FROM cygx_minutes_summary_log AS l 
+			WHERE l.article_id = ? 
+			GROUP BY l.type 
+			ORDER BY l.sort ASC`
+	_, err = o.Raw(sql, articleId).QueryRows(&items)
+	return
+}
+
+// 列表
+func GetMinutesSummarylogListAll(articleId int) (items []*MinutesSummaryChartPermission, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT c.permission_name ,c.image_url,l.*
+			FROM
+			cygx_minutes_summary_log AS l
+			INNER JOIN chart_permission AS c ON c.chart_permission_id = l.chart_permission_id 
+			WHERE l.article_id = ? 
+			GROUP BY l.chart_permission_id
+			ORDER BY l.chart_permission_sort ASC   `
+	_, err = o.Raw(sql, articleId).QueryRows(&items)
+	return
+}
+
+// 列表
+func GetMinutesSummarylogSonListAll(articleId, chartPermissionId int) (items []*CygxMinutesSummaryLogDetail, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT   l.link_article_id,l.body ,a.video_url 
+			FROM
+			cygx_minutes_summary_log AS l
+			LEFT JOIN cygx_article as a ON a.article_id = l.link_article_id
+			WHERE l.article_id = ? AND l.chart_permission_id =?`
+	_, err = o.Raw(sql, articleId, chartPermissionId).QueryRows(&items)
+	return
+}
+
+// 列表
+func GetMinutesSummarylogSonListSecond(articleId int, artType string) (items []*CygxResearchSummaryLogSecond, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT c.permission_name ,c.chart_permission_id ,c.image_url_m as image_url, l.* 
+			FROM
+			cygx_minutes_summary_log AS l
+			LEFT JOIN chart_permission AS c ON c.chart_permission_id = l.chart_permission_id 
+			WHERE l.article_id = ? AND l.type =?
+			GROUP BY l.chart_permission_id
+			ORDER  BY l.chart_permission_sort ASC`
+	_, err = o.Raw(sql, articleId, artType).QueryRows(&items)
+	return
+}
+
+// 列表
+func GetMinutesSummarylogListThird(articleId, chartPermissionId int, artType string) (items []*CygxResearchSummaryLogThird, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT  l.link_article_id,l.body ,a.video_url
+			FROM cygx_minutes_summary_log AS l
+			LEFT JOIN cygx_article as a ON a.article_id = l.link_article_id
+			WHERE l.article_id = ? AND l.type =? AND  l.chart_permission_id = ? 
+			ORDER  BY l.chart_permission_sort ASC `
+	_, err = o.Raw(sql, articleId, artType, chartPermissionId).QueryRows(&items)
+	return
+}

+ 30 - 0
models/report_history_record.go

@@ -0,0 +1,30 @@
+package models
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+type CygxReportHistoryRecord struct {
+	Id               int `orm:"column(id);pk"`
+	ArticleId        int
+	UserId           int
+	CreateTime       time.Time
+	Mobile           string    `description:"手机号"`
+	Email            string    `description:"邮箱"`
+	CompanyId        int       `description:"公司id"`
+	CompanyName      string    `description:"公司名称"`
+	ModifyTime       time.Time `description:"修改时间"`
+	ReportType       string    `description:"报告类型,bgjx:报告精选、bzyjhz:本周研究汇总、szjyhz:上周纪要汇总"`
+	RealName         string    `description:"用户实际名称"`
+	SellerName       string    `description:"所属销售"`
+	RegisterPlatform int       `description:"来源 1小程序,2:网页"`
+}
+
+// 添加历史信息
+func AddCygxReportHistoryRecord(item *CygxReportHistoryRecord) (lastId int64, err error) {
+	o := orm.NewOrm()
+	item.ModifyTime = time.Now()
+	lastId, err = o.Insert(item)
+	return
+}

+ 178 - 0
models/report_selection.go

@@ -0,0 +1,178 @@
+package models
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"github.com/rdlucklib/rdluck_tools/paging"
+	"time"
+)
+
+type CygxReportSelectionRep struct {
+	ArticleId         int    `orm:"column(article_id);pk"description:"报告id"`
+	Title             string `description:"标题"`
+	Department        string `description:"作者"`
+	PublishDate       string `description:"发布时间"`
+	CreateTime        string `description:"创建时间"`
+	Abstract          string `description:"摘要/更新说明"`
+	UpdateDescription string `description:"更新说明"`
+	IsRed             bool   `description:"是否标记红点"`
+	ReadNum           int    `description:"阅读次数"`
+}
+
+type CygxReportSelectionListPublicRep struct {
+	Paging *paging.PagingItem `description:"分页数据"`
+	List   []*CygxReportSelectionRep
+}
+
+type DetailCygxReportSelectionRep struct {
+	ArticleId          int    `description:"报告Id"`
+	Title              string `description:"标题"`
+	Department         string `description:"作者"`
+	PublishDate        string `description:"发布时间"`
+	CreateTime         string `description:"创建时间"`
+	LastUpdatedTime    string `description:"最后一次更新时间"`
+	Periods            int    `description:"期数"`
+	VideoUrl           string `description:"链接"`
+	VideoPlaySeconds   string `description:"时长"`
+	VideoName          string `description:"音频名称"`
+	ProductDescription string `description:"产品说明"`
+	UpdateDescription  string `description:"更新说明"`
+	FocusOn            string `description:"近期重点关注方向"`
+	MarketStrategy     string `description:"市场策略核心逻辑汇总"`
+	ReportLink         string `description:"报告链接"`
+	CeLueArticleId     int    `description:"策略报告详情"`
+	VisibleRange       int    `description:"设置可见范围1全部,0内部"`
+}
+
+type ReportSelectionLetailResp struct {
+	Detail                *DetailCygxReportSelectionRep
+	HasPermission         int `description:"1:有该行业权限,正常展示,2:无该行业权限,不存在权益客户下,3:无该品类权限,已提交过申请,4:无该行业权限,未提交过申请,5:潜在客户,未提交过申请,6:潜在客户,已提交过申请"`
+	List                  []*ReportSelectionChartPermission
+	ListPermissionSubject []*ReportSelectionChartLogPermission `description:"行业列表"`
+	IsShow                bool                                 `description:"是否展示"`
+}
+
+type ReportSelectionChartPermission struct {
+	PermissionName   string `description:"权限名称"`
+	IcoLink          string `orm:"column(image_url)"description:"图标链接"`
+	List             []*CygxReportSelectionLogDetail
+	BodyChartSummary string `description:"行业核心逻辑汇总"`
+}
+
+type ReportSelectionChartLogPermission struct {
+	PermissionName string                                `description:"权限名称"`
+	ListSubject    []*ReportSelectionChartLogSubjectName `description:"标的列表"`
+}
+
+type ReportSelectionChartLogSubjectName struct {
+	SubjectName         string `description:"标的名称"`
+	IndustrialSubjectId int    `description:"标的ID"`
+	IsNew               bool   `description:"是否展示新标签"`
+}
+
+type CygxReportSelectionLogDetail struct {
+	IndustrialManagementId string   `description:"产业Id"`
+	IndustrialSubjectId    int      `description:"标的ID"`
+	SubjectName            string   `description:"标的名称"`
+	IsNew                  bool     `description:"是否展示新标签"`
+	Body                   string   `description:"内容"`
+	CompanyLabel           []string `description:"公司标签"`
+	Label                  string   `description:"公司标签"`
+	OverviewArticleId      int      `description:"综述报告Id"`
+	List                   []*IndustriaReportSelection
+}
+type IndustriaReportSelection struct {
+	IndustrialManagementId int    `description:"产业Id"`
+	IndustryName           string `description:"产业名称"`
+}
+
+type ReportSelectionId struct {
+	ArticleId int `description:"报告I"`
+}
+
+// 获取数量
+func GetCygxReportSelectionPublic(condition, tbdb string, pars []interface{}) (count int, err error) {
+	sqlCount := ` SELECT COUNT(1) AS count  FROM ` + tbdb + ` as art WHERE 1= 1 AND art.publish_status = 1   `
+	if condition != "" {
+		sqlCount += condition
+	}
+	o := orm.NewOrm()
+	err = o.Raw(sqlCount, pars).QueryRow(&count)
+	return
+}
+
+// 通过ID获取详情
+func GetCygxReportSelectionInfoById(articleId int) (item *DetailCygxReportSelectionRep, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM cygx_report_selection  WHERE article_id=? AND publish_status = 1 `
+	err = o.Raw(sql, articleId).QueryRow(&item)
+	return
+}
+
+// 通过期数获取详情
+func GetCygxReportSelectionInfoByperiods(periods int) (item *DetailCygxReportSelectionRep, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM cygx_report_selection  WHERE periods=?  `
+	err = o.Raw(sql, periods).QueryRow(&item)
+	return
+}
+
+// 列表
+func GetReportSelectionListPublic(condition, readSql, tbdb string, pars []interface{}, startSize, pageSize int) (items []*CygxReportSelectionRep, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * ,` + readSql + ` FROM  ` + tbdb + ` as art WHERE 1= 1 AND art.publish_status = 1  `
+	if condition != "" {
+		sql += condition
+	}
+	sql += ` ORDER BY  art.publish_date  DESC  LIMIT ?,?`
+	_, err = o.Raw(sql, pars, startSize, pageSize).QueryRows(&items)
+	return
+}
+
+type CygxReportSelectionLog struct {
+	ArticleSunId           int       `description:"子级报告id"`
+	ArticleId              int       `description:"父级报告Id"`
+	ChartPermissionId      int       `description:"行业ID"`
+	PermissionName         string    `description:"行业ID"`
+	CreateTime             time.Time `description:"创建时间"`
+	Body                   string    `description:"内容"`
+	IndustrialSubjectId    int       `description:"标的ID"`
+	IndustrialManagementId string    `description:"产业资源包Id  多个用 , 隔开"`
+	SubjectName            string    `description:"标的名称"`
+	IcoLink                string    `orm:"column(image_url)"description:"图标链接"`
+	CompanyLabel           []string  `description:"公司标签"`
+	Label                  string    `description:"公司标签"`
+	OverviewArticleId      int       `description:"综述报告Id"`
+}
+
+// 列表
+func GetReportSelectionlogListAll(articleId int) (items []*CygxReportSelectionLog, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT c.permission_name ,c.image_url,s.subject_name , l.*  ,l.company_label as label
+			FROM
+			cygx_report_selection_log AS l
+			INNER JOIN chart_permission AS c ON c.chart_permission_id = l.chart_permission_id 
+			INNER JOIN cygx_industrial_subject AS s ON s.industrial_subject_id = l.industrial_subject_id 
+			WHERE l.article_id = ? `
+	_, err = o.Raw(sql, articleId).QueryRows(&items)
+	return
+}
+
+// 列表
+func GetReportSelectionlogSonListAll(articleId, chartPermissionId int) (items []*CygxReportSelectionLogDetail, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT c.permission_name , l.* ,l.company_label as label
+			FROM
+			cygx_report_selection_log AS l
+			INNER JOIN chart_permission AS c ON c.chart_permission_id = l.chart_permission_id 
+			LEFT JOIN cygx_industrial_subject AS s ON s.industrial_subject_id = l.industrial_subject_id 
+			WHERE l.article_id = ? AND l.chart_permission_id =?`
+	_, err = o.Raw(sql, articleId, chartPermissionId).QueryRows(&items)
+	return
+}
+
+func GetIndustrialByIds(industrialManagementIds string) (items []*IndustriaReportSelection, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM cygx_industrial_management  WHERE industrial_management_id IN (` + industrialManagementIds + `)`
+	_, err = o.Raw(sql).QueryRows(&items)
+	return
+}

+ 36 - 0
models/report_selection_chart_log.go

@@ -0,0 +1,36 @@
+package models
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+type CygxReportSelectionChartLog struct {
+	ArticleSunId      int       `orm:"column(article_sun_id);pk"description:"子级报告id"`
+	ArticleId         int       `description:"父级报告Id"`
+	ChartPermissionId int       `description:"行业ID"`
+	CreateTime        time.Time `description:"创建时间"`
+	Body              string    `description:"内容"`
+}
+
+type CygxReportSelectionChartLogRep struct {
+	ChartPermissionId   int    `description:"行业ID"`
+	ChartPermissionName string `description:"行业ID"`
+	BodyChartSummary    string `orm:"column(body)"description:"内容"`
+}
+
+type AddCygxReportSelectionChartLog struct {
+	ChartPermissionId   int    `description:"行业ID"`
+	ChartPermissionName string `description:"行业ID"`
+	BodyChartSummary    string `orm:"column(body)"description:"内容"`
+}
+
+func GetCygxReportSelectionChartLogRepList(articleId int) (items []*CygxReportSelectionChartLogRep, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT l.*,c.chart_permission_name
+			FROM cygx_report_selection_chart_log AS l
+			LEFT JOIN chart_permission as c  ON c.chart_permission_id = l.chart_permission_id
+			WHERE  1= 1 AND article_id=?  `
+	_, err = o.Raw(sql, articleId).QueryRows(&items)
+	return
+}

+ 32 - 0
models/report_selection_subject_history.go

@@ -0,0 +1,32 @@
+package models
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+type CygxReportSelectionSubjectHistory struct {
+	Id                  int       `orm:"column(id);pk"`
+	ArticleId           int       `description:"文章ID"`
+	UserId              int       `description:"用户ID"`
+	CreateTime          time.Time `description:"创建时间"`
+	ModifyTime          time.Time `description:"修改时间"`
+	Mobile              string    `description:"手机号"`
+	Email               string    `description:"邮箱"`
+	CompanyId           int       `description:"公司id"`
+	CompanyName         string    `description:"公司名称"`
+	IndustrialSubjectId int       `description:"标的ID"`
+	RegisterPlatform    int       `description:"来源 1小程序,2:网页"`
+}
+
+type AddCygxReportSelectionSubjectHistoryReq struct {
+	ArticleId           int `description:"文章id"`
+	IndustrialSubjectId int `description:"标的ID"`
+}
+
+// 添加
+func AddCygxReportSelectionSubjectHistory(item *CygxReportSelectionSubjectHistory) (err error) {
+	o := orm.NewOrm()
+	_, err = o.Insert(item)
+	return
+}

+ 134 - 0
models/researchSummary.go

@@ -0,0 +1,134 @@
+package models
+
+import (
+	"github.com/beego/beego/v2/client/orm"
+	"time"
+)
+
+type DetailCygxResearchSummaryRep struct {
+	ArticleId        int    `description:"报告Id"`
+	Title            string `description:"标题"`
+	Department       string `description:"作者"`
+	PublishDate      string `description:"发布时间"`
+	VideoUrl         string `description:"链接"`
+	VideoPlaySeconds string `description:"时长"`
+	VideoName        string `description:"音频名称"`
+	Abstract         string `description:"摘要"`
+	VisibleRange     int    `description:"设置可见范围1全部,0内部"`
+}
+
+type ResearchSummaryLetailResp struct {
+	Detail        *DetailCygxResearchSummaryRep
+	HasPermission int `description:"1:有该行业权限,正常展示,2:无该行业权限,不存在权益客户下,3:无该品类权限,已提交过申请,4:无该行业权限,未提交过申请,5:潜在客户,未提交过申请,6:潜在客户,已提交过申请"`
+	List          []*ResearchSummaryChartPermission
+	IsShow        bool `description:"是否展示"`
+}
+
+type ResearchSummaryChartPermission struct {
+	ListName string `description:"列表名称"`
+	IcoLink  string `orm:"column(image_url)"description:"图标链接"`
+	Type     string `description:"类型'SDBG深度报告片篇,’CYDYJY:产业调研纪要’,’SJDP事件点评,’BZCHJH:本周晨会精华’"`
+	List     []*CygxResearchSummaryLogSecond
+}
+
+type CygxResearchSummaryLogSecond struct {
+	PermissionName    string `description:"行业名称"`
+	ChartPermissionId int    `description:"行业ID"`
+	IcoLink           string `orm:"column(image_url)"description:"图标链接"`
+	List              []*CygxResearchSummaryLogThird
+}
+
+type CygxResearchSummaryLogThird struct {
+	Body        string `description:"内容"`
+	ReportLink  string `orm:"column(link_article_id)"description:"报告链接"`
+	VideoUrl    string `description:"链接"`
+	IsHaveVideo bool   `description:"是否含有音频文件"`
+}
+type IndustriaResearchSummary struct {
+	IndustrialManagementId int    `description:"产业Id"`
+	IndustryName           string `description:"产业名称"`
+}
+
+type ResearchSummaryId struct {
+	ArticleId int `description:"报告I"`
+}
+
+// 通过纪要ID获取详情
+func GetCygxResearchSummaryInfoById(articleId int) (item *DetailCygxResearchSummaryRep, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT * FROM cygx_research_summary  WHERE article_id=?  AND publish_status = 1 `
+	err = o.Raw(sql, articleId).QueryRow(&item)
+	return
+}
+
+type CygxResearchSummaryLog struct {
+	ArticleSunId           int       `description:"子级报告id"`
+	ArticleId              int       `description:"父级报告Id"`
+	ChartPermissionId      int       `description:"行业ID"`
+	PermissionName         string    `description:"行业ID"`
+	CreateTime             time.Time `description:"创建时间"`
+	Body                   string    `description:"内容"`
+	IndustrialSubjectId    string    `description:"标的ID"`
+	IndustrialManagementId string    `description:"产业资源包Id  多个用 , 隔开"`
+	SubjectName            string    `description:"标的名称"`
+	Type                   string    `description:"类型'SDBG深度报告片篇,’CYDYJY:产业调研纪要’,’SJDP事件点评,’BZCHJH:本周晨会精华’"`
+}
+
+// 列表
+func GetResearchSummarylogListFirst(articleId int) (items []*ResearchSummaryChartPermission, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT l.* 
+			FROM cygx_research_summary_log AS l 
+			WHERE l.article_id = ? 
+			GROUP BY l.type 
+			ORDER BY l.sort ASC`
+	_, err = o.Raw(sql, articleId).QueryRows(&items)
+	return
+}
+
+// 列表
+func GetResearchSummarylogSonListSecond(articleId int, artType string) (items []*CygxResearchSummaryLogSecond, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT c.permission_name ,c.chart_permission_id ,c.image_url_m as image_url, l.* 
+			FROM
+			cygx_research_summary_log AS l
+			LEFT JOIN chart_permission AS c ON c.chart_permission_id = l.chart_permission_id 
+			WHERE l.article_id = ? AND l.type =?
+			GROUP BY l.chart_permission_id
+			ORDER  BY l.chart_permission_sort ASC`
+	_, err = o.Raw(sql, articleId, artType).QueryRows(&items)
+	return
+}
+
+// 列表
+func GetResearchSummarylogSonListThird(articleId, chartPermissionId int, artType string) (items []*CygxResearchSummaryLogThird, err error) {
+	o := orm.NewOrm()
+	sql := `SELECT  l.link_article_id,l.body ,a.video_url
+			FROM cygx_research_summary_log AS l
+			LEFT JOIN cygx_article as a ON a.article_id = l.link_article_id
+			WHERE l.article_id = ? AND l.type =? AND  l.chart_permission_id = ? 
+			ORDER  BY l.chart_permission_sort ASC `
+	_, err = o.Raw(sql, articleId, artType, chartPermissionId).QueryRows(&items)
+	return
+}
+
+func UpdateResearchSummaryVoiceCounts(articleId int) (err error) {
+	sql := `UPDATE cygx_research_summary SET voice_counts = voice_counts+1 WHERE article_id = ?  `
+	o := orm.NewOrm()
+	_, err = o.Raw(sql, articleId).Exec()
+	return
+}
+
+func UpdateMinutesSummaryVoiceCounts(articleId int) (err error) {
+	sql := `UPDATE cygx_minutes_summary SET voice_counts = voice_counts+1 WHERE article_id = ?  `
+	o := orm.NewOrm()
+	_, err = o.Raw(sql, articleId).Exec()
+	return
+}
+
+func UpdateReportSelectionVoiceCounts(articleId int) (err error) {
+	sql := `UPDATE cygx_report_selection SET voice_counts = voice_counts+1 WHERE article_id = ?  `
+	o := orm.NewOrm()
+	_, err = o.Raw(sql, articleId).Exec()
+	return
+}

+ 45 - 0
routers/commentsRouter.go

@@ -547,6 +547,51 @@ func init() {
             Filters: nil,
             Params: nil})
 
+    beego.GlobalControllerRouter["hongze/hongze_clpt/controllers:ReportController"] = append(beego.GlobalControllerRouter["hongze/hongze_clpt/controllers:ReportController"],
+        beego.ControllerComments{
+            Method: "MinutesDetail",
+            Router: `/minutesSummary/detail`,
+            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: "ReportListByType",
+            Router: `/reportList/byType`,
+            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: "ResearchDetail",
+            Router: `/researchSummary/detail`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["hongze/hongze_clpt/controllers:ReportSelectionController"] = append(beego.GlobalControllerRouter["hongze/hongze_clpt/controllers:ReportSelectionController"],
+        beego.ControllerComments{
+            Method: "ClickHistory",
+            Router: `/click/history`,
+            AllowHTTPMethods: []string{"post"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
+    beego.GlobalControllerRouter["hongze/hongze_clpt/controllers:ReportSelectionController"] = append(beego.GlobalControllerRouter["hongze/hongze_clpt/controllers:ReportSelectionController"],
+        beego.ControllerComments{
+            Method: "Detail",
+            Router: `/detail`,
+            AllowHTTPMethods: []string{"get"},
+            MethodParams: param.Make(),
+            Filters: nil,
+            Params: nil})
+
     beego.GlobalControllerRouter["hongze/hongze_clpt/controllers:ResourceController"] = append(beego.GlobalControllerRouter["hongze/hongze_clpt/controllers:ResourceController"],
         beego.ControllerComments{
             Method: "Upload",

+ 5 - 0
routers/router.go

@@ -106,6 +106,11 @@ func init() {
 				&controllers.MobileResearchController{},
 			),
 		),
+		web.NSNamespace("/report_selection",
+			web.NSInclude(
+				&controllers.ReportSelectionController{},
+			),
+		),
 	)
 	web.AddNamespace(ns)
 }

+ 76 - 0
services/article.go

@@ -495,3 +495,79 @@ func GetUserAticleCollectMap(user *models.WxUserItem) (respMap map[int]int, err
 	respMap = articleMap
 	return
 }
+
+// 通过接解析带有Md5的文章链接获取文章ID
+func GetReportLinkToArticleid(reportLink string) (articleId int, err error) {
+	defer func() {
+		if err != nil {
+			go utils.SendAlarmMsg("通过接解析带有Md5的文章链接获取文章ID失败"+err.Error(), 2)
+		}
+	}()
+	var artMd5 string
+	//处理Md5的
+	strnum1 := strings.Index(reportLink, "id=")
+	if strnum1 > 0 {
+		sliceId := strings.Split(reportLink, "id=")
+		if len(sliceId) > 1 {
+			reportLink = sliceId[1]
+			sliceMd5Id := strings.Split(reportLink, "&")
+			artMd5 = sliceMd5Id[0]
+		}
+		if artMd5 != "" {
+			detail, errArt := models.GetArticleDetailByIdMd5(artMd5)
+			if errArt != nil && errArt.Error() != utils.ErrNoRow() {
+				err = errArt
+				return
+			}
+			if detail != nil {
+				articleId = detail.ArticleId
+			}
+		}
+	} else {
+		//处理活动的
+		linkList := strings.Split(reportLink, "/")
+		if linkList[len(linkList)-1] != "" {
+			linkArticleId, _ := strconv.Atoi(linkList[len(linkList)-1])
+			if linkArticleId > 0 {
+				articleInfo, errArt := models.GetArticleDetailById(linkArticleId)
+				if errArt != nil && errArt.Error() != utils.ErrNoRow() {
+					err = errArt
+					return
+				}
+				if articleInfo != nil {
+					articleId = articleInfo.ArticleId
+				}
+			}
+		}
+	}
+	return
+}
+
+// GetArticleStockMap 获取个股标签所对应的文章ID
+func GetArticleStockMap() (mapResp map[string]int, err error) {
+	defer func() {
+		if err != nil {
+			go utils.SendAlarmMsg("获取个股标签所对应的文章ID失败"+err.Error(), 2)
+		}
+	}()
+	list, err := models.GetArticleStock()
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		return
+	}
+	mapResp = make(map[string]int, 0)
+	if len(list) > 0 {
+		//一对一精准匹配
+		for _, v := range list {
+			sliceSubjects := strings.Split(v.Stock, "/")
+			if len(sliceSubjects) > 0 {
+				for _, vSubject := range sliceSubjects {
+					sliceKuohao := strings.Split(vSubject, "(")           //过滤括号
+					sliceXiahuaxian := strings.Split(sliceKuohao[0], "-") //过滤下划线
+					subject := sliceXiahuaxian[0]
+					mapResp[subject] = v.ArticleId
+				}
+			}
+		}
+	}
+	return
+}

+ 35 - 0
services/report_history_record.go

@@ -0,0 +1,35 @@
+package services
+
+import (
+	"hongze/hongze_clpt/models"
+	"hongze/hongze_clpt/utils"
+	"time"
+)
+
+func AddCygxReportHistoryRecord(user *models.WxUserItem, articleId int, reportType string) (err error) {
+	defer func() {
+		if err != nil {
+			go utils.SendAlarmMsg("研究汇总用户浏览信息记录失败"+err.Error(), 2)
+		}
+	}()
+	historyRecord := new(models.CygxReportHistoryRecord)
+	historyRecord.UserId = user.UserId
+	historyRecord.ArticleId = articleId
+	historyRecord.CreateTime = time.Now()
+	historyRecord.Mobile = user.Mobile
+	historyRecord.Email = user.Email
+	historyRecord.CompanyId = user.CompanyId
+	historyRecord.CompanyName = user.CompanyName
+	historyRecord.RegisterPlatform = utils.REGISTER_PLATFORM
+	historyRecord.ReportType = reportType
+	sellerItem, err := models.GetSellerByCompanyIdCheckFicc(user.CompanyId, 2)
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		return
+	}
+	historyRecord.RealName = user.RealName
+	if sellerItem != nil {
+		historyRecord.SellerName = sellerItem.RealName
+	}
+	_, err = models.AddCygxReportHistoryRecord(historyRecord)
+	return
+}

+ 34 - 0
services/user.go

@@ -429,3 +429,37 @@ func GetMicroRoadShowMycollect(pageSize, currentIndex int, audioIds, videoIds, a
 	respList = videoList
 	return
 }
+
+// 获取用户权限
+func GetUserhasPermission(user *models.WxUserItem) (hasPermission int, err error) {
+	//判断是否已经申请过
+	applyCount, err := models.GetApplyRecordCount(user.UserId)
+	if err != nil && err.Error() != utils.ErrNoRow() {
+		return
+	}
+	if applyCount > 0 {
+		hasPermission = 3
+	} else {
+		hasPermission = 4
+	}
+	//HasPermission int  `description:"1:有该行业权限,正常展示,2:无该行业权限,不存在权益客户下,3:无该品类权限,已提交过申请,4:无该行业权限,未提交过申请,5:潜在客户,未提交过申请,6:潜在客户,已提交过申请"`
+	if user.CompanyId > 1 {
+		companyPermission, errPer := models.GetCompanyPermission(user.CompanyId)
+		if errPer != nil {
+			err = errPer
+			return
+		}
+		if companyPermission == "" {
+			if applyCount > 0 {
+				hasPermission = 3
+			} else {
+				hasPermission = 4
+			}
+		} else {
+			if strings.Contains(companyPermission, "医药") || strings.Contains(companyPermission, "科技") || strings.Contains(companyPermission, "消费") || strings.Contains(companyPermission, "智造") {
+				hasPermission = 1
+			}
+		}
+	}
+	return
+}