package controllers

import (
	"encoding/json"
	"fmt"
	"github.com/medivhzhan/weapp/v2"
	"github.com/rdlucklib/rdluck_tools/paging"
	"hongze/hongze_cygx/models"
	"hongze/hongze_cygx/services"
	"hongze/hongze_cygx/utils"
	"html"
	"strconv"
	"strings"
	"time"
)

// 报告
type ReportController struct {
	BaseAuthController
}

type ReportCommonController struct {
	BaseCommonController
}

// @Title 行业报告分类列表接口
// @Description 获取行业报告分类列表接口
// @Param   ChartPermissionId   query   int  true       "分类ID"
// @Success 200 {object} models.IndustrialManagementList
// @router /home/tradeList [get]
func (this *ReportController) TradeList() {
	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
	ChartPermissionId, _ := this.GetInt("ChartPermissionId")
	if ChartPermissionId < 1 {
		br.Msg = "请输入分类ID"
		return
	}
	listCategory, err := models.GetTradeArticleAndProductInterior(ChartPermissionId)
	if err != nil {
		br.Msg = "获取信息失败"
		br.ErrMsg = "获取品种信息失败,Err:" + err.Error()
		return
	}
	var list []*models.TradeReportMapping
	categoryMap := make(map[int]int)
	for _, v := range listCategory {
		if categoryMap[v.CategoryId] > 0 {
			continue
		}
		categoryMap[v.CategoryId] = v.CategoryId
		list = append(list, v)
	}
	//加了一个需求，现有数据结构不支持，手动添加  2023-06-12
	//if ChartPermissionId == utils.KE_JI_ID {
	//	list = append(list, &models.TradeReportMapping{MatchTypeName: "AI前沿", CategoryId: utils.ACTEGORY_ID_AI_QY})
	//}

	//var condition string
	//var pars []interface{}
	for k, v := range list {
		//if v.PolymerizationId != "" {
		//	condition = ` AND a.category_id IN(` + v.PolymerizationId + `)`
		//} else {
		//	condition = ` AND a.category_id IN(` + strconv.Itoa(v.CategoryId) + `)`
		//}
		pageSize := 1
		var listArticle []*models.ReportArticle
		if v.CategoryId == utils.ACTEGORY_ID_AI_QY {
			//加了一个需求，现有数据结构不支持，手动添加  2023-06-12
			listArticle, _, err = services.GetAiQianYanArtilceList(0, pageSize)
			if err != nil && err.Error() != utils.ErrNoRow() {
				br.Msg = "获取信息失败"
				br.Msg = "GetHomeList，Err:" + err.Error()
				return
			}
			//for _, vAi := range listArticleAi {
			//	listArticle = append(listArticle, &models.ReportArticle{
			//		CategoryId:  vAi.CategoryId,
			//		PublishDate: vAi.PublishDate,
			//	})
			//}
		} else {
			listArticle, _, err = models.GetReportAndproductIndustrylList(v.CategoryId, 0, pageSize)
			if err != nil && err.Error() != utils.ErrNoRow() {
				br.Msg = "获取信息失败"
				br.Msg = "GetHomeList，Err:" + err.Error()
				return
			}
		}
		//listArticle, _, err := models.GetReportAndproductIndustrylList(v.CategoryId, 0, 1)

		if len(listArticle) > 0 {
			list[k].UpdateTime = utils.StrTimeToTime(listArticle[0].PublishDate).Format(utils.FormatDate) //时间字符串格式转时间格式 }
		}
	}
	resp := new(models.TradeReportMappingResp)
	resp.List = list
	br.Ret = 200
	br.Success = true
	br.Msg = "获取成功"
	br.Data = resp
}

// @Title 产业报告分类列表接口
// @Description 获取产业报告分类列表接口
// @Param   ChartPermissionId   query   int  true       "分类ID"
// @Param   IsNewLabel   query   string  true       "是否属于新标签，1是，0否"
// @Param   IsDeepLabel   query   string  true       "是否属于深标签，1是，0否"
// @Param   KeyWord   query   string  true       "搜索关键词"
// @Param   OrderColumn   query   int  true       "排序字段 ，NewTime 最近更新 ，Recommend弘则推荐"
// @Param   DeepCover   query   int  false       "深度覆盖：0-否；1-是"
// @Param   RecommendFocus   query   int  false       "推荐关注：0-否；1-是"
// @Param   IsOpen   query   int  true       "是否展开：0-否；1-是，默认0"
// @Param   PageSize   query   int  true       "每页数据条数"
// @Param   CurrentIndex   query   int  true       "当前页页码，从1开始"
// @Success 200 {object} models.IndustrialManagementList
// @router /home/industryList [get]
func (this *ReportController) IndustryList() {
	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
	ChartPermissionId, _ := this.GetInt("ChartPermissionId")
	orderColumn := this.GetString("OrderColumn")
	orderColumnNew := this.GetString("OrderColumn")
	isNewLabel := this.GetString("IsNewLabel")
	isDeepLabel := this.GetString("IsDeepLabel")
	keyWord := this.GetString("KeyWord")
	pageSize, _ := this.GetInt("PageSize")
	currentIndex, _ := this.GetInt("CurrentIndex")
	deepCover, _ := this.GetInt("DeepCover")
	recommendFocus, _ := this.GetInt("RecommendFocus")
	isOpen, _ := this.GetInt("IsOpen")
	var orderSrt string
	var condition string
	var startSize int
	resp := new(models.IndustrialManagementList)
	if pageSize <= 0 {
		pageSize = utils.PageSize20
	}
	if currentIndex <= 0 {
		currentIndex = 1
	}

	startSize = paging.StartIndex(currentIndex, pageSize)
	if isNewLabel == "1" {
		condition += ` AND is_new_label = ` + isNewLabel
	}
	if isDeepLabel == "1" {
		condition += ` AND is_deep_label = ` + isDeepLabel
	}
	if keyWord != "" {
		condition += ` AND  subject_names LIKE '%` + keyWord + `%'`
	}
	var sqlChartPermissionId string
	if ChartPermissionId > 0 {
		sqlChartPermissionId += ` AND man_g.industrial_management_id IN ( SELECT industrial_management_id FROM cygx_industrial_management WHERE chart_permission_id = ` + strconv.Itoa(ChartPermissionId) + ` ) `
		condition += ` AND man.chart_permission_id IN (` + strconv.Itoa(ChartPermissionId) + `)`
	}
	// 深度覆盖
	if deepCover == 1 {
		// 查询深标签产业报告数
		var deepCondition string
		var deepPars []interface{}
		deepCondition += ` AND man.is_deep_label = 1`
		if ChartPermissionId > 0 {
			deepCondition += ` AND man.chart_permission_id = ?`
			deepPars = append(deepPars, ChartPermissionId)
		}
		industryCountList, e := models.GetIndustryArtCountByCondition(deepCondition, deepPars)
		if e != nil {
			br.Msg = "获取信息失败"
			br.ErrMsg = "获取深标签产业报告数失败, Err: " + e.Error()
			return
		}
		deepIdArr := make([]string, 0)
		for i := range industryCountList {
			if industryCountList[i].ArtNum > 10 {
				deepIdArr = append(deepIdArr, strconv.Itoa(industryCountList[i].IndustrialManagementId))
			}
		}
		deepIds := strings.Join(deepIdArr, ",")
		if deepIds != "" {
			condition = `AND man.industrial_management_id IN (` + deepIds + `)`
		}
	}
	// 推荐关注
	if recommendFocus == 1 {
		condition += ` AND man.recommended_index >= 80`
	}
	var industrialFollow []string                                                  //重点关注ID
	var industrialUninterested []string                                            //重点关注ID
	followTypeMap := services.GetCygxIndustryFllowListTypeMapByMobile(user.Mobile) // 关注的对应状态
	for k, v := range followTypeMap {
		if v == 1 {
			industrialFollow = append(industrialFollow, strconv.Itoa(k))
		}
		if v == 3 {
			industrialUninterested = append(industrialUninterested, strconv.Itoa(k))
		}
	}

	industrialUninterested = append(industrialUninterested, "0")
	//是否展开,展开部分仅展示，不感兴趣的
	if isOpen == 0 {
		condition += ` AND man.industrial_management_id  NOT IN (` + strings.Join(industrialUninterested, ",") + `)  `
	} else {
		condition += ` AND man.industrial_management_id  IN (` + strings.Join(industrialUninterested, ",") + `)  `
	}

	// 列表总数据量
	var list []*models.IndustrialManagement
	total, err := models.GetIndustrialManagementAllCount(condition)
	if err != nil {
		br.Msg = "获取信息失败"
		br.ErrMsg = "获取数量失败,Err:" + err.Error()
		return
	}
	page := paging.GetPaging(currentIndex, pageSize, total)

	if orderColumn == "" {
		orderColumn = "NewTime"
	}
	if orderColumn == "NewTime" {
		orderSrt = "update_time DESC"
	} else {
		orderSrt = "man.recommended_index DESC,update_time DESC"
	}
	if ChartPermissionId == 0 {
		ChartPermissionId = 20
	}

	// 阅读第三的产业详情
	//detailHot3, err := models.GetIndustrialManagementHot3(ChartPermissionId)
	//if err != nil {
	//	br.Msg = "获取信息失败"
	//	br.ErrMsg = "获取信息失败,Err:" + err.Error()
	//	return
	//}
	list, err = models.GetIndustrialManagementAll(uid, condition, orderSrt, startSize, pageSize)
	if err != nil {
		br.Msg = "获取信息失败"
		br.ErrMsg = "获取品种信息失败,Err:" + err.Error()
		return
	}
	// 获取近一个月产业报告阅读次数最多的产业
	var topCond string
	var topPars []interface{}
	//topReadIndustryId := 0
	if ChartPermissionId > 0 {
		topCond += ` AND chart_permission_id = ?`
		topPars = append(topPars, ChartPermissionId)
	}
	list, err = services.HandleIndustryList(list, user)
	if orderColumnNew != "" {
		item := new(models.CygxReportIndustrialSeaarchHistory)
		item.UserId = user.UserId
		item.Mobile = user.Mobile
		item.CompanyId = user.CompanyId
		item.CompanyName = user.CompanyName
		item.CreateTime = time.Now()
		item.IsDeepLabel = isDeepLabel
		item.IsNewLabel = isNewLabel
		item.ChartPermissionId = ChartPermissionId
		if orderColumnNew == "NewTime" {
			item.OrderColumn = "0"
		} else {
			item.OrderColumn = "1"
		}
		go models.AddCygxReportIndustrialSeaarchHistory(item)
	}
	if len(list) == 0 {
		list = make([]*models.IndustrialManagement, 0)
	}
	resp.List = list
	resp.Paging = page
	//如果不感兴趣有值，而且展开按钮没有展开，就放出展开按钮
	if len(industrialUninterested) > 0 && isOpen == 0 {
		resp.IsShowOpen = true
	}
	if isOpen == 0 {
		resp.IsInterested = true
	}
	br.Ret = 200
	br.Success = true
	br.Msg = "获取成功"
	br.Data = resp
}

// @Title 产业下所关联的文章分类列表
// @Description 产业下所关联的文章分类列表接口
// @Param   IndustrialManagementId   query   int  true       "产业ID"
// @Param   ShowTimeLine   query   int  true       "是否展示时间线 0不展示，1展示"
// @Param   IsSendWx   query   int  false       "是否是通过微信模版进来的 1是，其它否"
// @Param   ChapterId   query   int  false       "晨会精华段落ID"
// @Success 200 {object} models.IndustrialToArticleCategoryListRep
// @router /toArticleCategoryList [get]
func (this *ReportController) ArticleCategoryList() {
	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
	industrialManagementId, _ := this.GetInt("IndustrialManagementId")
	if industrialManagementId < 1 {
		br.Msg = "请输入分类ID"
		return
	}
	showTimeLine, _ := this.GetInt("ShowTimeLine", 0)
	isSendWx, _ := this.GetInt("IsSendWx")
	chapterId, _ := this.GetInt("ChapterId")

	detail, err := models.GetIndustrialManagementDetail(industrialManagementId)
	if err != nil {
		br.Msg = "获取信息失败"
		br.ErrMsg = "获取信息失败,Err:" + err.Error()
		return
	}
	listCategory, err := models.IndustrialToArticleAndProductInteriorCategoryNew(industrialManagementId)
	if err != nil {
		br.Msg = "获取信息失败"
		br.ErrMsg = "获取品种信息失败,Err:" + err.Error()
		return
	}
	var list []*models.IndustrialToArticleCategoryRep
	categoryMap := make(map[int]int)
	for _, v := range listCategory {
		if categoryMap[v.CategoryId] > 0 {
			continue
		}
		categoryMap[v.CategoryId] = v.CategoryId
		list = append(list, v)
	}

	// 用户权限
	authInfo, permissionArr, e := services.GetUserRaiPermissionInfo(user.UserId, user.CompanyId)
	if e != nil {
		br.Msg = "获取失败"
		br.ErrMsg = "获取用户权限失败, Err: " + e.Error()
		return
	}

	videoSimple := new(models.MicroVideoSimpleInfo)
	// 权限
	var au *models.UserPermissionAuthInfo
	video, err := models.GetMicroRoadshowVideoByIndustryId(industrialManagementId)
	if err != nil {
		if err.Error() != utils.ErrNoRow() {
			br.Msg = "获取产业视频失败"
			br.ErrMsg = "获取产业视频失败,Err:" + err.Error()
			return
		}
	} else {
		videoSimple.Id = video.VideoId
		videoSimple.Title = "5min逻辑【" + video.IndustryName + "】解析"
		videoSimple.BackgroundImg = video.ImgUrl
		videoSimple.DetailImgUrl = video.DetailImgUrl
		if videoSimple.BackgroundImg == "" {
			// 获取默认图配置
			_, videoMap, _, _, e := services.GetMicroRoadShowDefaultImgConfig()
			if e != nil {
				br.Msg = "获取视频默认配置图失败"
				br.ErrMsg = "获取视频默认配置图失败, Err: " + e.Error()
				return
			}
			videoSimple.BackgroundImg = videoMap[video.ChartPermissionId]
		}
		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 au.HasPermission != 1 {
			if au.OperationMode == services.UserPermissionOperationModeCall {
				au.PopupMsg = services.UserPermissionPopupMsgCallMicroVideo
			} else {
				au.PopupMsg = services.UserPermissionPopupMsgApplyMicroVideo
			}
			videoSimple.ResourceUrl = ""
		}
	}

	//时间线
	if showTimeLine == 1 {
		timeLineItem := models.IndustrialToArticleCategoryRep{
			CategoryId:    99999,
			MatchTypeName: "时间线",
		}
		timeLineList, err := models.GetTimeLineReportIndustrialList(user.UserId, industrialManagementId, 0, 30)
		if err != nil {
			br.Msg = "获取信息失败"
			br.ErrMsg = "获取帖子数据失败，Err:" + err.Error()
			return
		}
		//查询用户今天是否看过时间线
		//haveMorningMeeting := false
		//var morningMeetingTime string
		//count, err := models.GetTimeLineRecordCount(user.UserId, industrialManagementId)
		//if err != nil {
		//	br.Msg = "查询浏览记录数量失败"
		//	br.ErrMsg = "查询浏览记录数量失败，Err:" + err.Error()
		//	return
		//}
		//var recordItem *models.CygxPageHistoryRecord
		//if count > 1 {
		//	recordItem, err = models.GetTimeLineRecordItem(user.UserId, industrialManagementId)
		//	if err != nil {
		//		br.Msg = "查询浏览记录失败"
		//		br.ErrMsg = "查询浏览记录失败，Err:" + err.Error()
		//		return
		//	}
		//}

		for _, v := range timeLineList {
			if v.Readnum == 0 && user.CreatedTime.Before(utils.StrTimeToTime(v.PublishTime)) && utils.StrTimeToTime(utils.OnlineTime).Before(utils.StrTimeToTime(v.PublishTime)) {
				if v.SubCategoryName == "时间线" {
					//haveMorningMeeting = true
					//morningMeetingTime = v.PublishTime
					continue
				}
				timeLineItem.IsRed = true
			}
		}
		//因为无法记录用户是否看过晨会点评，所以用用户今天是否看过时间线来判断是否显示小红点，这里是判断分类的小红点
		//timeLineRed := false
		//if count < 2 {
		//	timeLineRed = true
		//} else if count > 1 && recordItem.CreateTime.Before(utils.StrTimeToTime(morningMeetingTime)) {
		//	timeLineRed = true
		//}
		//if !timeLineItem.IsRed && timeLineRed && haveMorningMeeting {
		//	timeLineItem.IsRed = true
		//}
		list = append([]*models.IndustrialToArticleCategoryRep{&timeLineItem}, list...)

		if chapterId > 0 && isSendWx == 1 {
			go services.AddCygxMorningMeetingReviewChapterHistory(user, chapterId, "微信")
		}
	}

	resp := new(models.IndustrialToArticleCategoryListRep)
	resp.List = list
	resp.LayoutTime = utils.TimeRemoveHms(detail.LayoutTime)
	resp.IndustryName = detail.IndustryName
	resp.IndustrialManagementId = industrialManagementId
	resp.AuthInfo = au
	if videoSimple.Id > 0 {
		resp.IndustryVideo = videoSimple
	}
	if isSendWx == 1 {
		industryUserFollowMap, err := services.GetIndustryUserFollowMap(user)
		if err != nil {
			br.Msg = "获取信息失败"
			br.ErrMsg = "GetActivitySignupResp，Err:" + err.Error()
			return
		}
		resp.IsFollowButton = industryUserFollowMap[industrialManagementId]
		resp.IsShowFollowButton = true
	}
	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   CategoryId   query   int  true       "分类ID"
// @Param   IndustrialManagementId   query   int  true       "产业ID"
// @Success 200 {object} models.TacticsListResp
// @router /industry/ArticleList [get]
func (this *ReportController) List() {
	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")
	categoryId, _ := this.GetInt("CategoryId")
	industrialManagementId, _ := this.GetInt("IndustrialManagementId")

	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

	page := paging.GetPaging(currentIndex, pageSize, total)

	if categoryId < 1 {
		br.Msg = "请输入分类ID"
		return
	}
	if industrialManagementId < 1 {
		br.Msg = "请输入产业ID"
		return
	}
	if categoryId != 99999 {
		resp := new(models.TacticsListResp)
		list, total, err := models.GetReportAndproductInteriorIndustrialList(pars, categoryId, industrialManagementId, uid, startSize, pageSize)
		if err != nil {
			br.Msg = "获取信息失败"
			br.ErrMsg = "获取帖子数据失败，Err:" + err.Error()
			return
		}
		page = paging.GetPaging(currentIndex, pageSize, total)
		//对应分类的所图片
		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
		}
		var articleIds []int
		lenList := len(list)
		for i := 0; i < lenList; i++ {
			item := list[i]
			list[i].Body, _ = services.GetReportContentTextSub(item.Body)
			//list[i].Abstract = html.UnescapeString(item.Abstract)
			list[i].Abstract, _ = services.GetReportContentTextSub(item.Abstract)

			if item.Resource == 1 {
				articleIds = append(articleIds, item.ArticleId)
			}
		}

		articleMapPv := services.GetArticleHistoryByArticleId(articleIds)                       //文章Pv
		articleCollectMap, _ := services.GetCygxArticleCollectMap(user.UserId)                  //用户收藏的文章
		articleCollectNumMap, _ := services.GetCygxArticleCollectNumMapByArtcileIds(articleIds) //文章收藏的数量
		for k, v := range list {
			if v.Readnum == 0 && user.CreatedTime.Before(utils.StrTimeToTime(v.PublishDate)) && utils.StrTimeToTime(utils.OnlineTime).Before(utils.StrTimeToTime(v.PublishDate)) {
				list[k].IsRed = true
			}
			if v.VideoUrl != "" {
				list[k].IsHaveVideo = true
			}
			list[k].ImgUrlPc = mapCategoryUrl[v.CategoryId]

			if v.Resource == 1 {
				v.Pv = articleMapPv[v.ArticleId]
				v.IsCollect = articleCollectMap[v.ArticleId]
				v.CollectNum = articleCollectNumMap[v.ArticleId]
			}
			if v.Resource == 2 {
				v.PublishDate = utils.TimeRemoveHms2(v.PublishDate)
			}
		}

		//resp.CategoryImgUrlPc = mapChartPermission[detail.ChartPermissionName]
		//resp.ChartPermissionId = detail.ChartPermissionId
		resp.List = list
		resp.Paging = page
		br.Ret = 200
		br.Success = true
		br.Msg = "获取成功"
		br.Data = resp
	} else {
		//获取该产业下所对应的行业图片
		//因为时间线不属于数据表里的二级分类，所以图片Id用产业id查到的list中的任意一个categoryId取到的图片替代
		categoryList, err := models.IndustrialToArticleCategoryNew(industrialManagementId)
		if err != nil {
			br.Msg = "获取信息失败"
			br.ErrMsg = "获取品种信息失败,Err:" + err.Error()
			return
		}
		var timeLineCategoryId int
		if len(categoryList) > 0 {
			timeLineCategoryId = categoryList[0].CategoryId
		}

		var detail *models.ReportMapping
		var errCategory error

		if timeLineCategoryId > 0 {
			detail, errCategory = models.GetdetailByCategoryIdOne(timeLineCategoryId)
			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
		}

		total, err := models.GetTimeLineReportIndustrialCount(industrialManagementId)
		if err != nil {
			br.Msg = "获取信息失败"
			br.ErrMsg = "获取帖子总数失败，Err:" + err.Error()
			return
		}
		page = paging.GetPaging(currentIndex, pageSize, total)
		list, err := models.GetTimeLineReportIndustrialList(user.UserId, industrialManagementId, startSize, pageSize)
		if err != nil {
			br.Msg = "获取信息失败"
			br.ErrMsg = "获取帖子数据失败，Err:" + err.Error()
			return
		}

		//处理晨会精华关联的标的，以及要跳转的文章ID
		var meetingreviewchaptIds []int
		var articleIds []int
		mapchaptIdAndArticleId := make(map[int]int)                              // 晨会精华ID与跳转文章ID的映射关系
		mapchaptIdListSubject := make(map[int][]*models.CygxIndustrialSubject)   // 晨会精华ID与标的列表的映射关系
		mapArticleIdListSubject := make(map[int][]*models.CygxIndustrialSubject) // 报告ID与标的列表的映射关系
		for _, v := range list {
			if v.Resource == 3 {
				meetingreviewchaptIds = append(meetingreviewchaptIds, v.Id)
				v.Content = services.AnnotationHtml(v.Content)
			}
			if v.Resource == 1 {
				articleIds = append(articleIds, 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
			}
		}
		if len(articleIds) > 0 {
			mapArticleIdListSubject = services.GetArticleGroupSubjectMapByIndustrialManagementId(articleIds, industrialManagementId)
		}

		//对应分类的所图片
		detailCategoryUrl, err := models.GetConfigByCode("category_map_img_url")
		if err != nil {
			br.Msg = "获取数据失败"
			br.ErrMsg = "行业配置信息失败，Err:" + err.Error()
			return
		}
		categoryUrlList := strings.Split(detailCategoryUrl.ConfigValue, "{|}")
		mapCategoryUrl := make(map[string]string)
		var categoryIdStr string
		var imgUrlChart string
		for _, v := range categoryUrlList {
			vslice := strings.Split(v, "_")
			categoryIdStr = vslice[0]
			imgUrlChart = vslice[len(vslice)-1]
			mapCategoryUrl[categoryIdStr] = imgUrlChart
		}

		//lenList := len(list)
		//for i := 0; i < lenList; i++ {
		//	item := list[i]
		//	list[i].Content, _ = services.GetReportContentTextSub(item.Content)
		//	//list[i].Abstract = html.UnescapeString(item.Abstract)
		//	//list[i].Abstract, _ = services.GetReportContentTextSub(item.Abstract)
		//}

		//查询用户今天是否看过时间线
		//count, err := models.GetTimeLineRecordCount(user.UserId, industrialManagementId)
		//if err != nil {
		//	br.Msg = "查询浏览记录数量失败"
		//	br.ErrMsg = "查询浏览记录数量失败，Err:" + err.Error()
		//	return
		//}
		//var recordItem *models.CygxPageHistoryRecord
		//if count > 1 {
		//	recordItem, err = models.GetTimeLineRecordItem(user.UserId, industrialManagementId)
		//	if err != nil {
		//		br.Msg = "查询浏览记录失败"
		//		br.ErrMsg = "查询浏览记录失败，Err:" + err.Error()
		//		return
		//	}
		//}

		for k, v := range list {
			if v.SubCategoryName != "时间线" && v.Readnum == 0 && user.CreatedTime.Before(utils.StrTimeToTime(v.PublishTime)) && utils.StrTimeToTime(utils.OnlineTime).Before(utils.StrTimeToTime(v.PublishTime)) {
				list[k].IsRed = true
			}
			//timeLineRed := false
			//if count < 2 && v.SubCategoryName == "时间线" {
			//	timeLineRed = true
			//} else if count > 1 && recordItem.CreateTime.Before(utils.StrTimeToTime(v.PublishTime)) {
			//	timeLineRed = true
			//}
			//if v.SubCategoryName == "时间线" && timeLineRed {
			list[k].IsRed = true
			//}
			if v.VideoUrl != "" {
				list[k].IsHaveVideo = true
			}
			id := strconv.Itoa(timeLineCategoryId)
			list[k].ImgUrlPc = mapCategoryUrl[id]

			if mapCategoryUrl[id] == "" {
				if detail != nil {
					if detail.ChartPermissionId == utils.YI_YAO_ID {
						list[k].ImgUrlPc = utils.YI_YAO_QI_TA
					}
				}
			}
			if v.Resource == 3 {
				v.LinkArticleId = mapchaptIdAndArticleId[v.Id]
				v.ListSubject = mapchaptIdListSubject[v.Id]
			}
			if v.Resource == 1 {
				v.ListSubject = mapArticleIdListSubject[v.Id]
			}
		}

		resp := new(models.TimeLineReportListResp)
		//resp.CategoryImgUrlPc = mapChartPermission[detail.ChartPermissionName]
		go services.AddCygxTimelineLog(user, industrialManagementId)
		resp.List = list
		resp.Paging = page
		br.Ret = 200
		br.Success = true
		br.Msg = "获取成功"
		br.Data = resp
	}
}

// @Title 置顶/取消置顶
// @Description 置顶
// @Param	request	body models.CygxIndustryTopRep true "type json string"
// @Success 200
// @router /top [post]
func (this *ReportController) ArticleCollect() {
	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
	var req models.CygxIndustryTopRep
	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
	if err != nil {
		br.Msg = "参数解析异常！"
		br.ErrMsg = "参数解析失败，Err:" + err.Error()
		return
	}
	industrialManagementId := req.IndustrialManagementId
	countIndustrial, err := models.GetIndustrialManagementCount(industrialManagementId)
	if err != nil {
		br.Msg = "获取数据失败！"
		br.ErrMsg = "获取数据失败，Err:" + err.Error()
		return
	}
	if countIndustrial == 0 {
		br.Msg = "产业不存在！"
		br.ErrMsg = "产业ID不存在:" + strconv.Itoa(industrialManagementId)
		return
	}
	count, err := models.GetCygxIndustryTop(uid, industrialManagementId)
	if err != nil {
		br.Msg = "获取数据失败！"
		br.ErrMsg = "获取数据失败，Err:" + err.Error()
		return
	}
	resp := new(models.ArticleCollectResp)
	if count <= 0 {
		item := new(models.CygxIndustryTop)
		item.IndustrialManagementId = req.IndustrialManagementId
		item.UserId = uid
		item.CreateTime = time.Now()
		_, err = models.AddCygxIndustryTop(item)
		if err != nil {
			br.Msg = "置顶失败"
			br.ErrMsg = "置顶失败,Err:" + err.Error()
			return
		}
		br.Msg = "置顶成功"
		resp.Status = 1
	} else {
		err = models.RemoveCygxIndustryTop(uid, industrialManagementId)
		if err != nil {
			br.Msg = "取消置顶失败"
			br.ErrMsg = "取消置顶失败,Err:" + err.Error()
			return
		}
		br.Msg = "已取消置顶"
		resp.Status = 2
	}
	br.Ret = 200
	br.Success = true
	br.Data = resp
}

// @Title 关注/取消关注产业
// @Description 关注/取消关注 接口
// @Param	request	body models.CygxIndustryFllowRep true "type json string"
// @Success 200
// @router /fllow [post]
func (this *ReportController) Fllow() {
	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
	var req models.CygxIndustryFllowRep
	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
	if err != nil {
		br.Msg = "参数解析异常！"
		br.ErrMsg = "参数解析失败，Err:" + err.Error()
		return
	}
	industrialManagementId := req.IndustrialManagementId
	followType := req.FollowType
	var condition string
	countIndustrial, err := models.GetIndustrialManagementCount(industrialManagementId)
	if err != nil {
		br.Msg = "获取数据失败！"
		br.ErrMsg = "获取数据失败，Err:" + err.Error()
		return
	}
	if countIndustrial == 0 {
		br.Msg = "产业不存在！"
		br.ErrMsg = "产业ID不存在:" + strconv.Itoa(industrialManagementId)
		return
	}
	count, err := models.GetCountCygxIndustryFllow(uid, industrialManagementId, condition)
	if err != nil {
		br.Msg = "获取数据失败！"
		br.ErrMsg = "获取数据失败，Err:" + err.Error()
		return
	}
	resp := new(models.CygxIndustryFllowResp)
	countUser, err := models.GetCountCygxIndustryFllowByUid(uid)
	if countUser == 0 {
		resp.GoFollow = true
	}
	item := new(models.CygxIndustryFllow)
	item.IndustrialManagementId = industrialManagementId
	item.FollowType = followType
	item.UserId = uid
	item.Email = user.Email
	item.Mobile = user.Mobile
	item.RealName = user.RealName
	item.Source = utils.REGISTER_PLATFORM
	item.CompanyId = user.CompanyId
	item.CompanyName = user.CompanyName
	if followType == 3 {
		item.FollowTypeOrder = -1
	} else {
		item.FollowTypeOrder = followType
	}

	//if count == 0 {
	item.Type = 1
	item.CreateTime = time.Now()
	item.ModifyTime = time.Now()
	_, err = models.AddCygxIndustryFllow(item)
	if err != nil {
		br.Msg = "操作失败"
		br.ErrMsg = "操作失败,Err:" + err.Error()
		return
	}
	resp.Status = followType
	br.Msg = "操作成功"

	//go services.IndustryFllowWithTrack(industrialManagementId, count, uid)       //处理是否关注全部赛道字段
	go services.IndustryFllowUserLabelLogAdd(industrialManagementId, count, uid) //处理用户标签
	go services.AddCygxIndustryFllowLog(item)                                    //添加操作日志记录
	br.Msg = "操作成功"
	br.Ret = 200
	br.Success = true
	br.Data = resp
}

// @Title 产业报告分类关联作者列表接口
// @Description 获取产业报告分类关联作者列表接口
// @Param   ChartPermissionId   query   int  true       "分类ID"
// @Param   PageSize   query   int  true       "每页数据条数"
// @Param   CurrentIndex   query   int  true       "当前页页码，从1开始"
// @Success 200 {object} models.CygxArticleDepartmentList
// @router /industryListByDepartment [get]
func (this *ReportController) IndustryListByDepartment() {
	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")
	//chartPermissionId, _ := this.GetInt("ChartPermissionId")
	var startSize int
	var condition string
	//condition = `  AND a.publish_status=1  AND m.chart_permission_id =` + strconv.Itoa(chartPermissionId)
	condition = `  AND a.publish_status=1 `
	if pageSize <= 0 {
		pageSize = utils.PageSize20
	}
	if currentIndex <= 0 {
		currentIndex = 1
	}
	startSize = paging.StartIndex(currentIndex, pageSize)
	total, err := models.GetArticleDepartmentCount(condition)
	page := paging.GetPaging(currentIndex, pageSize, total)
	resp := new(models.CygxArticleDepartmentList)
	userType, _, err := services.GetUserType(user.CompanyId)
	if err != nil {
		br.Msg = "获取信息失败"
		br.ErrMsg = "获取用户信息失败,Err:" + err.Error()
		return
	}
	if userType == 1 {
		resp.Paging = page
		br.Ret = 200
		br.Success = true
		br.Msg = "获取成功"
		br.Data = resp
		return
	}
	resp.HaveResearch = true
	//获取作者信息，并排序
	list, err := models.GetCygxArticleDepartmentList(startSize, pageSize, condition, uid)
	if err != nil {
		br.Msg = "获取信息失败"
		br.ErrMsg = "获取品种信息失败,Err:" + err.Error()
		return
	}
	for k, v := range list {
		artList, err := models.GetArticleByDepartmentId(v.DepartmentId)
		if err != nil {
			br.Msg = "获取信息失败"
			br.ErrMsg = "获取文章信息失败,Err:" + err.Error()
			return
		}
		for k2, v2 := range artList {
			subjectNames, err := models.GetSubjectNames(v2.ArticleId)
			if err != nil {
				br.Msg = "获取失败" + strconv.Itoa(v2.ArticleId)
				br.ErrMsg = "获取失败，Err:" + err.Error()
				return
			}
			var subjectNamesNew string
			if len(subjectNames) > 0 {
				slice := strings.Split(subjectNames, "/")
				for k3, v3 := range slice {
					if k3 < 4 {
						subjectNamesNew += v3 + "/"
					}
				}
			}
			industryName, err := models.GetIndustrialNames(v2.ArticleId)
			if err != nil && err.Error() != utils.ErrNoRow() {
				br.Msg = "获取失败" + strconv.Itoa(v2.ArticleId)
				br.ErrMsg = "获取失败，Err:" + err.Error()
				return
			}
			subjectNamesNew = strings.TrimRight(subjectNamesNew, "/")
			artList[k2].SubjectName = subjectNamesNew
			artList[k2].DepartmentId = v.DepartmentId
			if subjectNamesNew == "" {
				artList[k2].IndustryName = industryName
			} else {
				artList[k2].IndustryName = industryName + "-" + subjectNamesNew
			}
			if artList[k2].IsReport == "1" {
				artList[k2].IndustryName = "【观点】" + artList[k2].IndustryName
			} else {
				artList[k2].IndustryName = "【纪要】" + artList[k2].IndustryName
			}
		}
		list[k].List = artList
		if v.FollowNum > 0 {
			list[k].IsMyFollow = true
		}
	}
	listnNew, err := models.GetIndustrialSubjectByDepartmentNew()
	if err != nil {
		br.Msg = "获取信息失败"
		br.ErrMsg = "获取品种信息失败,Err:" + err.Error()
		return
	}
	if len(listnNew) > 0 {
		for _, v := range listnNew {
			firstStr := strings.Index(v.IndustrialAndSubjectIds, "—")
			Management := new(models.IndustrialManagementIdInt)
			if firstStr == 0 {
				Management.IndustryName = v.IndustryName
			} else {
				listSub, err := models.GetIndustrialManagementSubjectList(v.ArticleId)
				if err != nil {
					br.Msg = "获取信息失败"
					br.ErrMsg = "获取关联标的列表失败，Err:" + err.Error()
					return
				}
				var subjectNamesNew string
				for _, v1 := range listSub {
					subjectNamesNew += v1.SubjectName + "/"
				}
				subjectNamesNew = strings.TrimRight(subjectNamesNew, "/")
				Management.IndustryName = subjectNamesNew
			}
			Management.IndustrialManagementId = v.IndustrialManagementId
			Management.ArticleId = v.ArticleId
			resp.ListnNew = append(resp.ListnNew, Management)
		}
	}
	resp.List = list
	resp.Paging = page
	br.Ret = 200
	br.Success = true
	br.Msg = "获取成功"
	br.Data = resp
}

// @Title 关注作者/取消关注作者
// @Description 关注作者/取消关注作者 接口
// @Param	request	body models.CygxArticleDepartmentId true "type json string"
// @Success 200
// @router /fllowDepartment [post]
func (this *ReportController) FllowDepartment() {
	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
	var req models.CygxArticleDepartmentId
	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
	if err != nil {
		br.Msg = "参数解析异常！"
		br.ErrMsg = "参数解析失败，Err:" + err.Error()
		return
	}
	departmentId := req.DepartmentId
	var condition string
	countDepartment, err := models.GetDepartmentCount(departmentId)
	if err != nil {
		br.Msg = "获取数据失败！"
		br.ErrMsg = "获取数据失败，Err:" + err.Error()
		return
	}
	if countDepartment == 0 {
		br.Msg = "作者不存在！"
		br.ErrMsg = "作者ID不存在:" + strconv.Itoa(departmentId)
		return
	}
	countUser, err := models.GetArticleDepartmentFollowByUid(uid)
	count, err := models.GetArticleDepartmentFollow(uid, departmentId, condition)
	if err != nil {
		br.Msg = "获取数据失败！"
		br.ErrMsg = "获取数据失败，Err:" + err.Error()
		return
	}
	resp := new(models.CygxArticleDepartmentFollowResp)
	if countUser == 0 {
		resp.GoFollow = true
	}
	if count == 0 {
		item := new(models.CygxArticleDepartmentFollow)
		item.DepartmentId = departmentId
		item.UserId = uid
		item.Email = user.Email
		item.Mobile = user.Mobile
		item.RealName = user.RealName
		item.CompanyId = user.CompanyId
		item.CompanyName = user.CompanyName
		item.Type = 1
		item.CreateTime = time.Now()
		item.ModifyTime = time.Now()
		_, err = models.AddArticleDepartmentFollow(item)
		if err != nil {
			br.Msg = "操作失败"
			br.ErrMsg = "操作失败,Err:" + err.Error()
			return
		}
		resp.Status = 1
	} else {
		var doType int
		condition = ` AND type = 1`
		count, err = models.GetArticleDepartmentFollow(uid, departmentId, condition)
		if err != nil {
			br.Msg = "操作失败！"
			br.ErrMsg = "获取数据失败，Err:" + err.Error()
			return
		}
		if count == 1 {
			resp.Status = 2
			doType = 2
		} else {
			resp.Status = 1
			doType = 1
		}
		err = models.RemoveArticleDepartmentFollow(uid, departmentId, doType)
		if err != nil {
			br.Msg = "操作失败"
			br.ErrMsg = "取消关注失败,Err:" + err.Error()
			return
		}
	}
	br.Msg = "操作成功"
	br.Ret = 200
	br.Success = true
	br.Data = resp
}

// @Title 研选文章列表接口
// @Description 获取研选文章列表接口
// @Param   PageSize   query   int  true       "每页数据条数"
// @Param   CurrentIndex   query   int  true       "当前页页码，从1开始"
// @Param   ArticleId      query   int  true       "文章id"
// @Param   DepartmentId   query   int  true       "作者ID"
// @Param   IndustrialManagementId   query   int  true       "产业ID"
// @Success 200 {object} models.ReportArticleWhichIndustrialRepList
// @router /industry/reportList [get]
func (this *ReportController) ReportList() {
	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")
	departmentId, _ := this.GetInt("DepartmentId")
	industrialManagementId, _ := this.GetInt("IndustrialManagementId")
	articleId, _ := this.GetInt("ArticleId")
	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.ReportArticleWhichIndustrialRepList)
	page := paging.GetPaging(currentIndex, pageSize, total)
	userType, _, err := services.GetUserType(user.CompanyId)
	if err != nil {
		br.Msg = "获取信息失败"
		br.ErrMsg = "获取用户信息失败,Err:" + err.Error()
		return
	}
	if userType == 1 {
		resp.Paging = page
		br.Ret = 200
		br.Success = true
		br.Msg = "获取成功"
		br.Data = resp
		return
	}
	resp.HaveResearch = true
	if departmentId > 0 {
		condition += ` AND art.department_id = ` + strconv.Itoa(departmentId)
		detail, err := models.GetArticleDepartmentDateilById(departmentId)
		if err != nil {
			br.Msg = "获取信息失败"
			br.ErrMsg = "获取信息失败,Err:" + err.Error()
			return
		}
		resp.NickName = detail.NickName
	}
	if industrialManagementId > 0 {
		condition += ` AND m.industrial_management_id = ` + strconv.Itoa(industrialManagementId)
	}
	if articleId > 0 {
		detail, err := models.GetArticleDetailById(articleId)

		if err != nil {
			br.Msg = "获取信息失败"
			br.ErrMsg = "获取信息失败,Err:" + err.Error()
			return
		}
		condition += ` AND art.subject_ids = '` + detail.SubjectIds + `'`
	}
	total, err = models.GetWhichDepartmentCount(condition)
	if err != nil {
		br.Msg = "获取信息失败"
		br.ErrMsg = "获取帖子总数失败，Err:" + err.Error()
		return
	}
	page = paging.GetPaging(currentIndex, pageSize, total)
	condition += `  GROUP BY art.article_id ORDER BY art.publish_date DESC`
	list, err := models.IndustrialToArticleWhichDepartment(condition, pars, uid, startSize, pageSize)
	if err != nil {
		br.Msg = "获取失败"
		br.ErrMsg = "获取失败，Err:" + err.Error()
		return
	}
	for k, v := range list {
		if v.Readnum == 0 {
			list[k].IsRed = true
		}
		list[k].IsResearch = true
		subjectNames, err := models.GetSubjectNames(v.ArticleId)
		if err != nil {
			br.Msg = "获取失败" + strconv.Itoa(v.ArticleId)
			br.ErrMsg = "获取失败，Err:" + err.Error()
			return
		}
		var subjectNamesNew string
		if len(subjectNames) > 0 {
			slice := strings.Split(subjectNames, "/")
			for k3, v3 := range slice {
				if k3 < 4 {
					subjectNamesNew += v3 + "/"
				}
			}
		}
		industryName, err := models.GetIndustrialNames(v.ArticleId)
		if err != nil && err.Error() != utils.ErrNoRow() {
			br.Msg = "获取失败" + strconv.Itoa(v.ArticleId)
			br.ErrMsg = "获取失败，Err:" + err.Error()
			return
		}
		subjectNamesNew = strings.TrimRight(subjectNamesNew, "/")
		list[k].SubjectName = subjectNamesNew
		if subjectNamesNew != "" {
			list[k].IndustryName = industryName + "-" + subjectNamesNew
		} else {
			list[k].IndustryName = industryName
		}
		resp.IndustryName = industryName
		list[k].ImgUrlPc = "https://hongze.oss-cn-shanghai.aliyuncs.com/static/images/202112/20211206/UvMadc63MLZY6rnQZQgGZAFXkqwf.png"
	}
	resp.List = list
	resp.Paging = page
	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   ArticleId      query   int  true       "文章id"
// @Success 200 {object} models.ReportArticleWhichIndustrialRepList
// @router /industry/reportListNew [get]
func (this *ReportController) ReportListNew() {
	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")
	articleId, _ := this.GetInt("ArticleId")
	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.ReportArticleWhichIndustrialRepList)
	page := paging.GetPaging(currentIndex, pageSize, total)
	userType, _, err := services.GetUserType(user.CompanyId)
	if err != nil {
		br.Msg = "获取信息失败"
		br.ErrMsg = "获取用户信息失败,Err:" + err.Error()
		return
	}
	if userType == 1 {
		resp.Paging = page
		br.Ret = 200
		br.Success = true
		br.Msg = "获取成功"
		br.Data = resp
		return
	}
	resp.HaveResearch = true
	if articleId > 0 {
		detail, err := models.GetArticleDetailById(articleId)
		if err != nil {
			br.Msg = "获取信息失败"
			br.ErrMsg = "获取信息失败,Err:" + err.Error()
			return
		}
		firstStr := strings.Index(detail.IndustrialAndSubjectIds, "—")
		if firstStr == 0 {
			condition += ` AND art.industrial_management_id = '` + strconv.Itoa(detail.IndustrialManagementId) + `'`
		} else {
			condition += ` AND art.industrial_and_subject_ids = '` + detail.IndustrialAndSubjectIds + `'`
		}
	}
	total, err = models.GetWhichDepartmentCount(condition)
	if err != nil {
		br.Msg = "获取信息失败"
		br.ErrMsg = "获取帖子总数失败，Err:" + err.Error()
		return
	}
	page = paging.GetPaging(currentIndex, pageSize, total)
	condition += `  GROUP BY art.article_id ORDER BY art.publish_date DESC`
	list, err := models.IndustrialToArticleWhichDepartment(condition, pars, uid, startSize, pageSize)
	if err != nil {
		br.Msg = "获取失败"
		br.ErrMsg = "获取失败，Err:" + err.Error()
		return
	}
	for k, v := range list {
		if v.Readnum == 0 {
			list[k].IsRed = true
		}
		list[k].IsResearch = true
		list[k].ImgUrlPc = "https://hongze.oss-cn-shanghai.aliyuncs.com/static/images/202112/20211206/UvMadc63MLZY6rnQZQgGZAFXkqwf.png"
		subjectNames, err := models.GetSubjectNames(v.ArticleId)
		if err != nil {
			br.Msg = "获取失败" + strconv.Itoa(v.ArticleId)
			br.ErrMsg = "获取失败，Err:" + err.Error()
			return
		}
		var subjectNamesNew string
		if len(subjectNames) > 0 {
			slice := strings.Split(subjectNames, "/")
			for k3, v3 := range slice {
				if k3 < 4 {
					subjectNamesNew += v3 + "/"
				}
			}
		}
		industryName, err := models.GetIndustrialNames(v.ArticleId)
		if err != nil && err.Error() != utils.ErrNoRow() {
			br.Msg = "获取失败" + strconv.Itoa(v.ArticleId)
			br.ErrMsg = "获取失败，Err:" + err.Error()
			return
		}
		subjectNamesNew = strings.TrimRight(subjectNamesNew, "/")
		list[k].SubjectName = subjectNamesNew
		if subjectNamesNew != "" {
			list[k].IndustryName = industryName + "-" + subjectNamesNew
		} else {
			list[k].IndustryName = industryName
		}
		resp.IndustryName = industryName
	}
	resp.List = list
	resp.Paging = page
	br.Ret = 200
	br.Success = true
	br.Msg = "获取成功"
	br.Data = resp
}

// @Title 是否展示绝密内参
// @Description 获取是否展示绝密内参接口
// @Param	request	body models.IsShow true "type json string"
// @Success 200
// @router /isShow [get]
func (this *ReportController) IsShow() {
	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 resp models.IsShow
	IsShowFreeButton, err := services.GetfreeButtonIsShow(user)
	if err != nil {
		br.Msg = "获取失败"
		br.ErrMsg = "获取失败，GetfreeButtonIsShow Err:" + err.Error()
		return
	}
	resp.IsShowChart = true
	//resp.IsShowResearch = true
	resp.LinkWxExplain = utils.LINK_WX_EXPLAIN
	resp.ActivitySpecialExplain = utils.ACTIVITY_SPECIAL_EXPLAIN
	//resp.YanXuan_Explain = true
	resp.IsShowFreeButton = IsShowFreeButton
	resp.IsBelongRai = services.GetBelongingRai(user.Mobile)
	resp.IsShowQuestionnaire = services.GetQuestionnaireButtonIsShow() // 获取研选问卷调查按钮是否展示
	resp.IsShowResearchPoints = true
	if utils.RunMode == "release" { //是否展示关于我们的视频，测试环境审核做隐藏
		resp.IsShowAboutVideo = true
	} else {
		resp.IsShowMobileAndEmailButton = true //是否展示手机号跟邮箱按钮
	}

	resp.IsShowTerminateButton, resp.EndData = services.GetWxUserEndDate(user)
	//mobile := user.Mobile
	//if mobile == "" {
	//	br.Ret = 200
	//	br.Success = true
	//	br.Data = resp
	//	return
	//}
	//total, _ := models.GetUserIsAdminCount(mobile)
	//if total > 0 {
	//	resp.IsShowList = true
	//}
	resp.IsShowList = true
	resp.SearchTxtList.SummarySearch = "全局搜索"
	resp.SearchTxtList.ReportSearch = "全局搜索"
	resp.SearchTxtList.YanXuanSearch = "全局搜索"
	resp.SearchTxtList.ActivitySearch = "全局搜索"
	resp.SearchTxtList.TabSearch = "请输入关键词"

	resp.IsShow = true
	br.Ret = 200
	br.Success = true
	br.Data = resp
}

// @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"
// @Param   IsBestNew   query   bool  false       "是否获取最新的一篇报告"
// @Success 200 {object} models.ReportSelectionLetailResp
// @router /reportSelection/detail [get]
func (this *ReportController) 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
	}
	//if user.CompanyId != utils.HZ_COMPANY_ID {
	//	br.Msg = "报告编辑中，请稍后"
	//	br.IsSendEmail = false
	//	return
	//}
	//uid := user.UserId
	articleId, _ := this.GetInt("ArticleId")
	isBestNew, _ := this.GetBool("IsBestNew")
	if isBestNew {
		tbdb := "cygx_report_selection"
		//reportTypeStr := "bgjx"
		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()
	}
	resp.HasPermission = hasPermission
	if hasPermission != 1 {
		br.Ret = 200
		br.Success = true
		br.Msg = "获取成功"
		br.Data = resp
		return
	}
	detail, err := models.GetCygxReportSelectionInfoById(articleId)
	if err != nil {
		br.Msg = "获取信息失败"
		br.ErrMsg = "报告不存在,Err:" + err.Error() + "articleId：" + strconv.Itoa(articleId)
		return
	}

	if detail.ReportLink != "" {
		articleIdLink, _ := services.GetReportLinkToArticleid(detail.ReportLink)
		detail.CeLueArticleId = articleIdLink
	}

	//较上一期有观点变化（后台填写的核心逻辑汇总内容、标签内容有更新），或者新增的公司，显示new标签
	var isAllNew bool // 判断是否都打新的标签
	lastPeriods := detail.Periods - 1
	mapBodyChartSummary := make(map[int]string)
	mapLabel := make(map[int]string)
	if lastPeriods > 0 {
		detailLast, err := models.GetCygxReportSelectionInfoByperiods(lastPeriods)
		if err != nil && err.Error() != utils.ErrNoRow() {
			br.Msg = "获取信息失败"
			br.ErrMsg = "报告不存在,Err:" + err.Error() + "Periods：" + strconv.Itoa(lastPeriods)
			return
		}
		if detailLast != nil {
			articleIdLast := detailLast.ArticleId
			listLogLast, err := models.GetReportSelectionlogListAll(articleIdLast)
			if err != nil {
				br.Msg = "获取失败"
				br.ErrMsg = "获取子类信息失败，Err:" + err.Error()
				return
			}
			for _, v := range listLogLast {
				mapBodyChartSummary[v.IndustrialSubjectId], _ = services.GetReportContentTextSubNew(v.Body)
				mapLabel[v.IndustrialSubjectId] = v.Label
			}
		}
	} else {
		isAllNew = true
	}
	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 {
				var isNew bool
				if isAllNew {
					isNew = true
				} else {
					v2Body, _ := services.GetReportContentTextSubNew(v2.Body)
					if mapBodyChartSummary[v2.IndustrialSubjectId] != v2Body || mapLabel[v2.IndustrialSubjectId] != v2.Label {
						isNew = true
					}
				}
				if v2.IndustrialManagementId != "" {
					listIndustrial, err := models.GetIndustrialByIds(v2.IndustrialManagementId)
					if err != nil && err.Error() != utils.ErrNoRow() {
						br.Msg = "获取信息失败"
						br.ErrMsg = "获取信息失败,Err:" + err.Error()
						return
					}
					//v2.IsNew = isNew
					listSonLog[k2].List = listIndustrial
					if v2.Label != "" {
						v2.CompanyLabel = strings.Split(v2.Label, "{|}")
					}
				}
				isNew = false
				itemSubject.ListSubject = append(itemSubject.ListSubject, &models.ReportSelectionChartLogSubjectName{SubjectName: v2.SubjectName, IsNew: 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.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 models.AddCygxReportHistoryRecord(historyRecord)
	resp.List = items
	resp.ListPermissionSubject = itemsSubject
	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.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
	}

	PermissionNameMap, err := services.GetPermissionNameMap()
	if err != nil {
		br.Msg = "获取失败"
		br.ErrMsg = "获取失败 GetPermissionNameMap，Err:" + err.Error()
		return
	}

	PermissionIcoMap, err := services.GetPermissionNameIcoMap()
	if err != nil {
		br.Msg = "获取失败"
		br.ErrMsg = "获取失败 GetPermissionNameMap，Err:" + err.Error()
		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 {
			v2.PermissionName = PermissionNameMap[v2.ChartPermissionId]
			v2.IcoLink = PermissionIcoMap[v2.ChartPermissionId]
			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 v2.ChartPermissionId == utils.YanxSummaryPermissionId {
			//	listSecond[k2].IcoLink = "https://hongze.oss-cn-shanghai.aliyuncs.com/static/images/202111/20211104/QbTGTNhD9MxYp24cJ7V5WpCN0oNl.png"
			//	listSecond[k2].PermissionName = "买方研选纪要"
			//} else if v2.ChartPermissionId == utils.YanxViewpointPermissionId {
			//	listSecond[k2].IcoLink = "https://hongze.oss-cn-shanghai.aliyuncs.com/static/images/202111/20211104/QbTGTNhD9MxYp24cJ7V5WpCN0oNl.png"
			//	listSecond[k2].PermissionName = "买方研选观点"
			//}
			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"
		}
	}
	//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.ReportType = "bzyjhz"
	//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 models.AddCygxReportHistoryRecord(historyRecord)

	go services.ResearchSummaryHistoryUserRmind(user, articleId) // 本周研究汇总用户阅读操作操作行为，模板消息推送
	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/detailv4 [get]
func (this *ReportController) MinutesDetailV4() {
	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.MinutesSummaryLetailRespV4)
	//判断用户权限
	hasPermission, err := services.GetUserhasPermission(user)
	if err != nil {
		br.Msg = "获取信息失败"
		br.ErrMsg = "获取用户权限信息失败,Err:" + err.Error()
	}
	//resp.HasPermission = hasPermission
	//if hasPermission != 1 {
	//	br.Ret = 200
	//	br.Success = true
	//	br.Msg = "获取成功"
	//	br.Data = resp
	//	return
	//}
	detail, err := models.GetCygxMinutesSummaryInfoById(articleId)
	if err != nil {
		br.Msg = "获取信息失败"
		br.ErrMsg = "报告不存在,Err:" + err.Error() + "articleId：" + strconv.Itoa(articleId)
		return
	}
	PermissionNameMap, err := services.GetPermissionNameMap()
	if err != nil {
		br.Msg = "获取失败"
		br.ErrMsg = "获取失败 GetPermissionNameMap，Err:" + err.Error()
		return
	}
	PermissionIcoMap, err := services.GetPermissionNameIcoMap()
	if err != nil {
		br.Msg = "获取失败"
		br.ErrMsg = "获取失败 GetPermissionNameMap，Err:" + err.Error()
		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 {
			v2.PermissionName = PermissionNameMap[v2.ChartPermissionId]
			v2.IcoLink = PermissionIcoMap[v2.ChartPermissionId]
			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"
		}
	}
	//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.ReportType = "szjyhz"
	//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 models.AddCygxReportHistoryRecord(historyRecord)

	go services.MinutesSummaryHistoryUserRmind(user, articleId) // 上周纪要汇总用户阅读，给销售发消息提醒
	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
	}
	//uid := user.UserId
	articleId, _ := this.GetInt("ArticleId")
	if articleId < 0 {
		br.Msg = "参数错误"
		br.ErrMsg = "参数错误"
		return
	}
	resp := new(models.MinutesSummaryLetailResp)
	//判断用户权限
	hasPermission, err := services.GetUserhasPermission(user)
	if err != nil {
		br.Msg = "获取信息失败"
		br.ErrMsg = "获取用户权限信息失败,Err:" + err.Error()
	}
	resp.HasPermission = hasPermission
	if hasPermission != 1 {
		br.Ret = 200
		br.Success = true
		br.Msg = "获取成功"
		br.Data = resp
		return
	}
	detail, err := models.GetCygxMinutesSummaryInfoById(articleId)
	if err != nil {
		br.Msg = "获取信息失败"
		br.ErrMsg = "报告不存在,Err:" + err.Error() + "articleId：" + strconv.Itoa(articleId)
		return
	}

	detail.PublishDate = utils.StrTimeToTime(detail.PublishDate).Format("2006-01-02")
	detail.VideoPlaySeconds = utils.Mp3Time(detail.VideoPlaySeconds)
	listLog, err := models.GetMinutesSummarylogListAll(articleId)
	if err != nil {
		br.Msg = "获取失败"
		br.ErrMsg = "获取子类信息失败，Err:" + err.Error()
		return
	}
	for k, v := range listLog {
		listSonLog, err := models.GetMinutesSummarylogSonListAll(articleId, v.ChartPermissionId)
		if err != nil && err.Error() != utils.ErrNoRow() {
			br.Msg = "获取信息失败"
			br.ErrMsg = "获取信息失败,Err:" + err.Error()
			return
		}
		if len(listSonLog) > 0 {
			for k2, v2 := range listSonLog {
				if v2.ReportLink == "0" {
					listSonLog[k2].ReportLink = ""
				}
			}
			listLog[k].List = listSonLog

		}
	}
	//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.ReportType = "szjyhz"
	//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 models.AddCygxReportHistoryRecord(historyRecord)
	resp.List = listLog
	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.RoadshowDetailResp
// @router /roadshowEssence/detail [get]
func (this *ReportController) RoadshowDetail() {
	br := new(models.BaseResponse).Init()
	defer func() {
		this.Data["json"] = br
		this.ServeJSON()
	}()
	user := this.User
	if user == nil {
		br.Msg = "请登录"
		br.ErrMsg = "请登录，用户信息为空"
		br.Ret = 408
		return
	}
	uid := user.UserId
	articleId, err := this.GetInt("ArticleId")
	if articleId <= 0 {
		br.Msg = "文章不存在"
		br.ErrMsg = "文章不存在，文章ID错误"
		return
	}
	detail := new(models.ReportDetailRoadshow)
	hasPermission := 0
	hasFree := 0
	//判断是否已经申请过
	applyCount, err := models.GetApplyRecordCount(uid)
	if err != nil && err.Error() != utils.ErrNoRow() {
		br.Msg = "获取信息失败"
		br.ErrMsg = "判断是否已申请过试用失败，Err:" + err.Error()
		return
	}
	articleLyjhMap, _ := services.GetLyjhArticleMap()
	articleCollectMap, _ := services.GetCygxArticleCollectMap(user.UserId)
	//`description:"1:有该行业权限,正常展示，2：无该行业权限，不存在权益客户下，3:无该品类权限，4：潜在客户，未提交过申请，5：潜在客户,已提交过申请"`
	if user.CompanyId > 1 {
		companyPermission, err := models.GetCompanyPermission(user.CompanyId)
		if err != nil {
			br.Msg = "获取信息失败"
			br.ErrMsg = "判断是否已申请访谈失败，Err:" + strconv.Itoa(uid) + ";articleId" + strconv.Itoa(articleId)
			return
		}
		detail, err = models.GetReportRoadshowDetailById(articleId)
		if err != nil {
			br.Msg = "获取信息失败"
			br.ErrMsg = "获取信息失败,Err:" + err.Error()
			return
		}
		detail.IsCollect = articleCollectMap[detail.ArticleId]
		detail.IsRoadShow = articleLyjhMap[detail.ArticleId]
		detail.Body = html.UnescapeString(detail.Body)
		detail.Abstract, _ = services.GetReportContentTextSubNew(detail.Abstract)
		detail.PublishDate = utils.StrTimeToTime(detail.PublishDate).Format("2006-01-02")
		detail.VideoPlaySeconds = utils.Mp3Time(detail.VideoPlaySeconds)
		if detail.ReportLink == "0" {
			detail.ReportLink = ""
		}
		if companyPermission == "" {
			if applyCount > 0 {
				hasPermission = 5
			} else {
				hasPermission = 2
			}
			hasFree = 2
			goto Loop
		} else {
			hasFree = 1
			var articlePermissionPermissionName string
			articlePermissionPermissionName = detail.CategoryName
			var hasPersion bool
			slice := strings.Split(articlePermissionPermissionName, ",")
			for _, v := range slice {
				if strings.Contains(companyPermission, v) {
					hasPersion = true
				}
			}
			if hasPersion {
				hasPermission = 1
				historyRecord := new(models.CygxArticleHistoryRecord)
				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
				go models.AddCygxArticleHistoryRecord(historyRecord)
			} else { //无该行业权限
				hasPermission = 3
			}
			if hasPermission == 1 {
				key := "CYGX_ARTICLE_" + strconv.Itoa(articleId) + "_" + strconv.Itoa(uid)
				if !utils.Rc.IsExist(key) {
					//新增浏览记录
					record := new(models.CygxArticleViewRecord)
					record.UserId = uid
					record.ArticleId = articleId
					record.CreateTime = time.Now()
					record.Mobile = user.Mobile
					record.Email = user.Email
					record.CompanyId = user.CompanyId
					record.CompanyName = user.CompanyName
					go models.AddCygxArticleViewRecord(record)
					utils.Rc.Put(key, 1, 5*time.Second)
					models.ModifyReportLastViewTime(uid)
				}
			}
		}
	} else { //潜在客户
		if applyCount > 0 {
			hasPermission = 5
		} else {
			hasPermission = 4
		}
	}
Loop:
	if hasPermission != 1 {
		detail.Body = ""
		detail.Abstract = ""
	}
	resp := new(models.RoadshowDetailResp)
	resp.HasPermission = hasPermission
	resp.HasFree = hasFree
	resp.Detail = detail
	br.Ret = 200
	br.Success = true
	br.Msg = "获取成功"
	br.Data = resp
}

// @Title 产业文章列表接口
// @Description 获取产业文章列表接口
// @Param   KeyWord   query   string  true       "搜索关键词"
// @Success 200 {object} models.CygxIndustrySearchList
// @router /industryAndArticle/list [get]
func (this *ReportController) IndustryAndArticleList() {
	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
	keyWord := this.GetString("KeyWord")
	orderSrt := "update_time DESC"
	condition := ` AND  subject_names LIKE '%` + keyWord + `%'`
	list, err := models.GetIndustrialManagementAll(uid, condition, orderSrt, 0, 100)
	if err != nil {
		br.Msg = "获取信息失败"
		br.ErrMsg = "获取品种信息失败,Err:" + err.Error()
		return
	}
	for k, v := range list {
		industrialSubjectList, err := models.GetIndustrialSubjectAll(v.IndustrialManagementId)
		if err != nil {
			br.Msg = "获取信息失败"
			br.ErrMsg = "获取品种信息失败,Err:" + err.Error()
			return
		}
		list[k].IndustrialSubjectList = industrialSubjectList
		//list[k].LayoutTime = utils.TimeRemoveHms(v.LayoutTime)
		newArtinfo, err := models.GetIndustrialNewArticleDetail(v.IndustrialManagementId)
		if err != nil {
			br.Msg = "获取信息失败"
			br.ErrMsg = "获取品种信息失败,Err:" + err.Error()
			return
		}
		list[k].UpdateTime = utils.TimeRemoveHms(newArtinfo.PublishDate)
	}
	artList, err := models.GetCygxIndustryAndArticleList(keyWord)
	if err != nil {
		br.Msg = "获取失败"
		br.ErrMsg = "获取失败，Err:" + err.Error()
		return
	}
	for k2, v2 := range artList {
		subjectNames, err := models.GetSubjectNames(v2.ArticleId)
		if err != nil {
			br.Msg = "获取失败" + strconv.Itoa(v2.ArticleId)
			br.ErrMsg = "获取失败，Err:" + err.Error()
			return
		}
		var subjectNamesNew string
		if len(subjectNames) > 0 {
			slice := strings.Split(subjectNames, "/")
			for k3, v3 := range slice {
				if k3 < 4 {
					subjectNamesNew += v3 + "/"
				}
			}
		}
		industryName, err := models.GetIndustrialNames(v2.ArticleId)
		if err != nil && err.Error() != utils.ErrNoRow() {
			br.Msg = "获取失败" + strconv.Itoa(v2.ArticleId)
			br.ErrMsg = "获取失败，Err:" + err.Error()
			return
		}
		subjectNamesNew = strings.TrimRight(subjectNamesNew, "/")
		artList[k2].SubjectName = subjectNamesNew
		if subjectNamesNew == "" {
			artList[k2].IndustryName = industryName
		} else {
			artList[k2].IndustryName = industryName + "-" + subjectNamesNew
		}
	}
	if keyWord != "" {
		keyWordItem := new(models.CygxUserSearchKeyWord)
		keyWordItem.UserId = user.UserId
		keyWordItem.KeyWord = keyWord
		keyWordItem.PageType = "ReortSearch"
		keyWordItem.CreateTime = time.Now()
		go models.AddUserSearchKeyWord(keyWordItem)
	}
	resp := new(models.CygxIndustrySearchList)
	resp.ArtList = artList
	resp.IndList = list
	br.Ret = 200
	br.Success = true
	br.Msg = "获取成功"
	br.Data = resp
}

// @Title 产业报告分类关联作者列表接口Pc端
// @Description 获取产业报告分类关联作者列表接口Pc端
// @Param   ChartPermissionId   query   int  true       "分类ID"
// @Param   KeyWord   query   string  true       "搜索关键词"
// @Param   PageSize   query   int  true       "每页数据条数"
// @Param   CurrentIndex   query   int  true       "当前页页码，从1开始"
// @Success 200 {object} models.CygxArticleDepartmentListPc
// @router /industryListByDepartmentPc [get]
func (this *ReportController) IndustryListByDepartmentPc() {
	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")
	chartPermissionId, _ := this.GetInt("ChartPermissionId")
	keyWord := this.GetString("KeyWord")
	var startSize int
	var condition string
	condition = `  AND a.publish_status=1  AND m.chart_permission_id =` + strconv.Itoa(chartPermissionId)
	if pageSize <= 0 {
		pageSize = utils.PageSize20
	}
	if currentIndex <= 0 {
		currentIndex = 1
	}
	var articleIdGroup string
	if keyWord != "" {
		//获取标的关联的文章ID
		articleIdSub, err := models.GetArticleIdSubjectGroup(keyWord)
		if err != nil {
			br.Msg = "获取信息失败"
			br.ErrMsg = "获取标的信息失败,Err:" + err.Error()
			return
		}
		//获取产业关联的标的
		articleIdInd, err := models.GetArticleIndustrialIdGroup(keyWord)
		if err != nil {
			br.Msg = "获取信息失败"
			br.ErrMsg = "获取产业信息失败,Err:" + err.Error()
			return
		}
		if articleIdSub != "" && articleIdInd != "" {
			articleIdGroup = articleIdSub + "," + articleIdInd
		} else if articleIdSub != "" && articleIdInd == "" {
			articleIdGroup = articleIdSub
		} else if articleIdSub == "" && articleIdInd != "" {
			articleIdGroup = articleIdInd
		}
		slice := strings.Split(keyWord, "/")
		if len(slice) > 1 {
			var subjectIds string
			for _, v := range slice {
				subjectId, err := models.GetcygxIndustrialSubjectByName(v)
				if err != nil && err.Error() != utils.ErrNoRow() {
					br.Msg = "获取信息失败"
					br.ErrMsg = "获取客户信息失败,Err:" + err.Error()
					return
				}
				if subjectId != "" {
					subjectIds += subjectId + ","
				}
			}
			subjectIds = strings.TrimRight(subjectIds, ",")
			if len(subjectIds) > 0 {
				articleBySub, err := models.GetArticleIdsBySubId(subjectIds)
				if err != nil {
					br.Msg = "获取信息失败"
					br.ErrMsg = "获取文章关联的标的失败,Err:" + err.Error()
					return
				}
				if articleIdGroup != "" {
					if articleBySub != "" {
						articleIdGroup += "," + articleBySub
					}
				} else {
					articleIdGroup = articleBySub
				}
			}
		}

	}

	if articleIdGroup != "" {
		condition += `  AND a.article_id IN (` + articleIdGroup + `)`
	}
	startSize = paging.StartIndex(currentIndex, pageSize)
	total, err := models.GetArticleDepartmentCount(condition)
	page := paging.GetPaging(currentIndex, pageSize, total)
	resp := new(models.CygxArticleDepartmentListPc)
	userType, _, err := services.GetUserType(user.CompanyId)
	if err != nil {
		br.Msg = "获取信息失败"
		br.ErrMsg = "获取用户信息失败,Err:" + err.Error()
		return
	}
	if userType == 1 {
		resp.Paging = page
		br.Ret = 200
		br.Success = true
		br.Msg = "获取成功"
		br.Data = resp
		return
	}
	resp.HaveResearch = true
	//获取作者信息，并排序
	list, err := models.GetCygxArticleDepartmentListPc(startSize, pageSize, condition, uid)
	if err != nil {
		br.Msg = "获取信息失败"
		br.ErrMsg = "获取品种信息失败,Err:" + err.Error()
		return
	}
	for k, v := range list {
		artList, err := models.GetArticleByDepartmentIdPc(v.DepartmentId, articleIdGroup)
		if err != nil {
			br.Msg = "获取信息失败"
			br.ErrMsg = "获取文章信息失败,Err:" + err.Error()
			return
		}
		for k2, v2 := range artList {
			if artList[k2].IsReport == "1" {
				artList[k2].Title = v2.Title
			} else {
				artList[k2].Title = v2.Title
			}
			artList[k2].IndustryName = strings.Replace(artList[k2].IndustryName, " ", "", -1)
		}
		list[k].List = artList
		if v.FollowNum > 0 {
			list[k].IsMyFollow = true
		}
	}
	listnNew, err := models.GetIndustrialSubjectByDepartmentNew()
	if err != nil {
		br.Msg = "获取信息失败"
		br.ErrMsg = "获取品种信息失败,Err:" + err.Error()
		return
	}
	if len(listnNew) > 0 {
		for _, v := range listnNew {
			firstStr := strings.Index(v.IndustrialAndSubjectIds, "—")
			Management := new(models.IndustrialManagementIdInt)
			if firstStr == 0 {
				Management.IndustryName = v.IndustryName
			} else {
				listSub, err := models.GetIndustrialManagementSubjectList(v.ArticleId)
				if err != nil {
					br.Msg = "获取信息失败"
					br.ErrMsg = "获取关联标的列表失败，Err:" + err.Error()
					return
				}
				var subjectNamesNew string
				for _, v1 := range listSub {
					subjectNamesNew += v1.SubjectName + "/"
				}
				subjectNamesNew = strings.TrimRight(subjectNamesNew, "/")
				Management.IndustryName = subjectNamesNew
			}
			Management.IndustrialManagementId = v.IndustrialManagementId
			Management.ArticleId = v.ArticleId
			resp.ListnNew = append(resp.ListnNew, Management)
		}
	}
	resp.List = list
	resp.Paging = page
	br.Ret = 200
	br.Success = true
	br.Msg = "获取成功"
	br.Data = resp
}

// @Title 产业文章列表接口Pc端
// @Description 获取产业文章列表接口Pc端
// @Param   KeyWord   query   string  true       "搜索关键词"
// @Success 200 {object} models.CygxIndustrySearchListPc
// @router /industryAndArticle/listPc [get]
func (this *ReportController) IndustryAndArticleListPc() {
	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
	keyWord := this.GetString("KeyWord")
	resp := new(models.CygxIndustrySearchListPc)
	orderSrt := "update_time DESC"
	condition := ` AND  subject_names LIKE '%` + keyWord + `%'`
	list, err := models.GetIndustrialManagementAll(uid, condition, orderSrt, 0, 100)
	if err != nil {
		br.Msg = "获取信息失败"
		br.ErrMsg = "获取品种信息失败,Err:" + err.Error()
		return
	}
	for k, v := range list {
		industrialSubjectList, err := models.GetIndustrialSubjectAll(v.IndustrialManagementId)
		if err != nil {
			br.Msg = "获取信息失败"
			br.ErrMsg = "获取品种信息失败,Err:" + err.Error()
			return
		}
		list[k].IndustrialSubjectList = industrialSubjectList
		//list[k].LayoutTime = utils.TimeRemoveHms(v.LayoutTime)
		newArtinfo, err := models.GetIndustrialNewArticleDetail(v.IndustrialManagementId)
		if err != nil {
			br.Msg = "获取信息失败"
			br.ErrMsg = "获取品种信息失败,Err:" + err.Error()
			return
		}
		list[k].UpdateTime = utils.TimeRemoveHms(newArtinfo.PublishDate)
	}
	artList, err := models.GetCygxIndustryAndArticleList(keyWord)
	if err != nil {
		br.Msg = "获取失败"
		br.ErrMsg = "获取失败，Err:" + err.Error()
		return
	}
	if len(artList) > 0 {
		var articleIds string
		for _, v := range artList {
			articleIds += strconv.Itoa(v.ArticleId) + ","
		}
		articleIds = strings.TrimRight(articleIds, ",")
		if articleIds != "" {
			condition = `  AND a.article_id IN (` + articleIds + `)`
			DepartmentList, err := models.GetCygxArticleDepartmentListPc(0, 20, condition, uid)
			if err != nil {
				br.Msg = "获取信息失败"
				br.ErrMsg = "获取品种信息失败,Err:" + err.Error()
				return
			}
			for k, v := range DepartmentList {
				artList, err := models.GetArticleByDepartmentIdPc(v.DepartmentId, articleIds)
				if err != nil {
					br.Msg = "获取信息失败"
					br.ErrMsg = "获取文章信息失败,Err:" + err.Error()
					return
				}
				for k2, v2 := range artList {
					if artList[k2].IsReport == "1" {
						artList[k2].Title = v2.Title
					} else {
						artList[k2].Title = v2.Title
					}
					artList[k2].IndustryName = strings.Replace(artList[k2].IndustryName, " ", "", -1)
				}
				DepartmentList[k].List = artList
				if v.FollowNum > 0 {
					DepartmentList[k].IsMyFollow = true
				}
			}
			resp.DepartmentList = DepartmentList
		}
	}
	if keyWord != "" {
		keyWordItem := new(models.CygxUserSearchKeyWord)
		keyWordItem.UserId = user.UserId
		keyWordItem.KeyWord = keyWord
		keyWordItem.PageType = "ReortSearch"
		keyWordItem.CreateTime = time.Now()
		go models.AddUserSearchKeyWord(keyWordItem)
	}
	resp.IndList = list
	br.Ret = 200
	br.Success = true
	br.Msg = "获取成功"
	br.Data = resp
}

// @Title 报告搜索
// @Description 报告搜索接口
// @Param   KeyWord   query   string  true       "搜索关键词"
// @Success 200 {object} models.ReoprtSearchResp
// @router /searchReport [get]
func (this *ReportController) SearchReport() {
	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
	}
	keyWord := this.GetString("KeyWord")
	var condition string
	var sqlGroup string
	//匹配报告标题、
	condition = `AND ( a.title LIKE '%` + keyWord + `%' OR  a.body LIKE '%` + keyWord + `%' OR  a.annotation LIKE '%` + keyWord + `%' OR  a.abstract LIKE '%` + keyWord + `%') AND a.publish_status = 1 `
	sqlGroup = ` GROUP BY  a.article_id  ORDER BY a.publish_date DESC  `
	//对应产业名称、标的名称。
	listYx, err := models.GetArticleCollectionList(` AND a.article_id >= 1000000 `+condition+sqlGroup, user.UserId)
	if err != nil {
		br.Msg = "获取信息失败"
		br.ErrMsg = "获取文章列表失败,Err:" + err.Error()
		return
	}
	for k, v := range listYx {
		listYx[k].Source = 2
		if v.MyCollectNum > 0 {
			listYx[k].IsCollect = true
		}
	}
	listHz, err := models.GetReoprtSearchList(` AND a.article_id < 1000000 `+condition+` OR ( article_type = 'lyjh' `+condition+` ) `+sqlGroup, user.UserId)
	if err != nil {
		br.Msg = "获取信息失败"
		br.ErrMsg = "获取文章列表失败,Err:" + err.Error()
		return
	}
	for k, v := range listHz {
		listHz[k].Source = 1
		if v.MyCollectNum > 0 {
			listHz[k].IsCollect = true
		}
	}
	if keyWord != "" {
		keyWordItem := new(models.CygxUserSearchKeyWord)
		keyWordItem.UserId = user.UserId
		keyWordItem.KeyWord = keyWord
		keyWordItem.PageType = "ReortSearch"
		keyWordItem.CreateTime = time.Now()
		go models.AddUserSearchKeyWord(keyWordItem)
		//go services.AddUserSearchLog(user, keyWord, 5)
	}
	if len(listYx) == 0 {
		listYx = make([]*models.ArticleCollectionResp, 0)
	}
	if len(listHz) == 0 {
		listHz = make([]*models.ArticleCollectionResp, 0)
	}
	resp := new(models.ReoprtSearchResp)
	resp.ListYx = listYx
	resp.ListHz = listHz
	br.Ret = 200
	br.Success = true
	br.Msg = "获取成功"
	br.Data = resp
}

// @Title 资源包搜索
// @Description 资源包搜索接口
// @Param   KeyWord   query   string  true       "搜索关键词"
// @Success 200 {object} models.SearchResourceResp
// @router /searchResource [get]
func (this *ReportController) SearchResource() {
	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
	fllowList, err := models.GetUserFllowIndustrialList(uid)
	if err != nil {
		br.Msg = "获取失败"
		br.ErrMsg = "获取失败，GetUserFllowIndustrialList Err:" + err.Error()
		return
	}
	fllowMap := make(map[int]int)
	if len(fllowList) > 0 {
		for _, v := range fllowList {
			fllowMap[v.IndustrialManagementId] = v.IndustrialManagementId
		}
	}
	keyWord := this.GetString("KeyWord")
	var condition string
	var conditionOr string
	//conditionOr = ` OR ( a.title LIKE '%` + keyWord + `%' AND a.article_id < ` + strconv.Itoa(utils.SummaryArticleId) + `  AND publish_status = 1 ) `
	conditionOr += ` OR ( m.subject_names LIKE '%` + keyWord + `%' AND a.article_id < ` + strconv.Itoa(utils.SummaryArticleId) + `  AND publish_status = 1 ) `
	condition = ` AND m.industry_name LIKE '%` + keyWord + `%' AND a.article_id < ` + strconv.Itoa(utils.SummaryArticleId) + conditionOr

	listHz, err := models.GetSearchResourceList(user.UserId, condition, 0, 0)
	if err != nil {
		br.Msg = "获取信息失败"
		br.ErrMsg = "获取品种信息失败,Err:" + err.Error()
		return
	}
	//conditionOr = ` OR ( a.title LIKE '%` + keyWord + `%' AND a.article_id >= ` + strconv.Itoa(utils.SummaryArticleId) + `  AND publish_status = 1 ) `
	conditionOr = ` OR ( m.subject_names LIKE '%` + keyWord + `%' AND a.article_id >= ` + strconv.Itoa(utils.SummaryArticleId) + `  AND publish_status = 1 ) `
	condition = ` AND m.industry_name LIKE '%` + keyWord + `%' AND a.article_id >= ` + strconv.Itoa(utils.SummaryArticleId) + conditionOr

	listYx, err := models.GetSearchResourceList(user.UserId, condition, 0, 0)
	if err != nil {
		br.Msg = "获取信息失败"
		br.ErrMsg = "获取文章列表失败,Err:" + err.Error()
		return
	}
	//合并产业关联的标的
	listSubjcet, err := models.GetThemeHeatSubjectList("")
	if err != nil {
		br.Msg = "获取信息失败"
		br.ErrMsg = "获取标的信息失败,Err:" + err.Error()
		return
	}
	industrialIdArr := make([]int, 0)
	for k, v := range listHz {
		listHz[k].Source = 1
		if fllowMap[v.IndustrialManagementId] > 0 {
			listHz[k].IsFollw = true
		}
		industrialIdArr = append(industrialIdArr, v.IndustrialManagementId)
	}

	for k, v := range listYx {
		listYx[k].Source = 2
		if fllowMap[v.IndustrialManagementId] > 0 {
			listYx[k].IsFollw = true
		}
		industrialIdArr = append(industrialIdArr, v.IndustrialManagementId)
	}

	if len(industrialIdArr) > 0 {
		//合并产业关联的标的
		listSubjcet, err = models.GetIndustrialSubjectAllByIndustrialId(industrialIdArr)
		if err != nil {
			br.Msg = "获取信息失败"
			br.ErrMsg = "获取标的信息失败,Err:" + err.Error()
			return
		}
		mapIndustrial := make(map[string]int)
		for _, v := range listSubjcet {
			for k2, v2 := range listYx {
				if v2.IndustrialManagementId == v.IndustrialManagementId && mapIndustrial[fmt.Sprint(v2.IndustrialManagementId, "Yx", v.SubjectName)] == 0 {
					listYx[k2].IndustrialSubjectList = append(listYx[k2].IndustrialSubjectList, v)
					mapIndustrial[fmt.Sprint(v2.IndustrialManagementId, "Yx", v.SubjectName)] = v2.IndustrialManagementId
				}
			}
			for k2, v2 := range listHz {
				if v2.IndustrialManagementId == v.IndustrialManagementId && mapIndustrial[fmt.Sprint(v2.IndustrialManagementId, "Hz", v.SubjectName)] == 0 {
					listHz[k2].IndustrialSubjectList = append(listHz[k2].IndustrialSubjectList, v)
					mapIndustrial[fmt.Sprint(v2.IndustrialManagementId, "Hz", v.SubjectName)] = v2.IndustrialManagementId
				}
			}
		}
	}

	if keyWord != "" {
		keyWordItem := new(models.CygxUserSearchKeyWord)
		keyWordItem.UserId = user.UserId
		keyWordItem.KeyWord = keyWord
		keyWordItem.PageType = "ReortSearch"
		keyWordItem.CreateTime = time.Now()
		go models.AddUserSearchKeyWord(keyWordItem)
	}

	resp := new(models.SearchResourceResp)
	if len(listYx) == 0 {
		listYx = make([]*models.IndustrialManagementHotResp, 0)
	}
	if len(listHz) == 0 {
		listHz = make([]*models.IndustrialManagementHotResp, 0)
	}
	resp.ListYx = listYx
	resp.ListHz = listHz
	br.Ret = 200
	br.Success = true
	br.Msg = "获取成功"
	br.Data = resp
}

// @Title 报告搜索、资源包搜索接口
// @Description 报告搜索、资源包搜索接口接口
// @Param   KeyWord   query   string  true       "搜索关键词"
// @Param   PageSize   query   int  true       "每页数据条数"
// @Success 200 {object} models.SearchReportAndResourceResp
// @router /searchReportAndResource [get]
func (this *ReportController) SearchReportAndResource() {
	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
	keyWord := this.GetString("KeyWord")
	pageSize, _ := this.GetInt("PageSize")
	var condition string
	var conditionSpecial string // 研选专栏
	var sqlGroup string
	articleTypeIds, err := services.GetYanXuanArticleTypeIds()
	if err != nil {
		br.Msg = "获取信息失败"
		br.ErrMsg = "GetYanXuanArticleTypeIds,Err:" + err.Error()
		return
	}
	if articleTypeIds == "" {
		br.Msg = "获取信息失败"
		br.ErrMsg = "研选分类ID不能为空"
		return
	}
	//匹配报告标题、
	//condition = `AND ( a.title LIKE '%` + keyWord + `%' OR  a.body LIKE '%` + keyWord + `%' OR  a.annotation LIKE '%` + keyWord + `%' OR  a.abstract LIKE '%` + keyWord + `%') AND a.publish_status = 1 `
	condition = `AND ( a.title LIKE '%` + keyWord + `%'   OR  a.annotation LIKE '%` + keyWord + `%' OR  a.abstract LIKE '%` + keyWord + `%') AND a.publish_status = 1 `
	sqlGroup = ` GROUP BY  a.article_id  ORDER BY a.publish_date DESC  `
	//if pageSize > 0 {
	//	sqlGroup += ` LIMIT 5 `
	//} else {
	sqlGroup += ` LIMIT 100 `
	//}
	conditionSpecial = ` AND ( a.title LIKE  '%` + keyWord + `%' OR  a.content LIKE '%` + keyWord + `%' )`
	//ListYxReport, err := models.GetArticleAndYxSpecialList(` AND a.article_type_id IN (`+articleTypeIds+`) `+condition, conditionSpecial, user.UserId)
	ListYxReport, err := models.GetArticleAndYxSpecialList(condition, conditionSpecial, user.UserId)
	if err != nil {
		br.Msg = "获取信息失败"
		br.ErrMsg = "获取研选文章列表失败,Err:" + err.Error()
		return
	}

	//ListHzReport, err := models.GetReoprtSearchList(` AND a.article_type_id NOT IN (`+articleTypeIds+`) `+condition+sqlGroup, user.UserId)
	//if err != nil {
	//	br.Msg = "获取信息失败"
	//	br.ErrMsg = "获取弘则报告文章列表失败,Err:" + err.Error()
	//	return
	//}

	keyWordArr, err := services.GetIndustryMapNameSliceV3(keyWord)
	if err != nil {
		br.Msg = "获取失败"
		br.ErrMsg = "获取分词失败,GetIndustryMapNameSliceV3 Err: " + err.Error()
		return
	}

	keyWordArr = services.RemoveDuplicatesAndEmpty(keyWordArr)
	var keyWordIk string
	if len(keyWordArr) > 1 {
		keyWordIk = services.KeyWordArrSqlRegexp(keyWordArr)
		var conditionIk string
		var sqlGroupIk string
		conditionIk = `AND ( a.title REGEXP '` + keyWordIk + `' OR  a.annotation REGEXP '` + keyWordIk + `' OR  a.abstract REGEXP '` + keyWordIk + `') AND a.publish_status = 1 `
		sqlGroupIk = ` GROUP BY  a.article_id  ORDER BY a.publish_date DESC  `
		if pageSize > 0 {
			sqlGroupIk += ` LIMIT 5 `
		} else {
			sqlGroupIk += ` LIMIT 20 `
		}
		//conditionIk += ` AND ( a.title NOT LIKE '%` + keyWord + `%' AND  a.body NOT LIKE '%` + keyWord + `%' AND  a.annotation NOT LIKE '%` + keyWord + `%' AND  a.abstract NOT LIKE '%` + keyWord + `%') `
		conditionIk += ` AND ( a.title NOT LIKE '%` + keyWord + `%'  AND  a.annotation NOT LIKE '%` + keyWord + `%' AND  a.abstract NOT LIKE '%` + keyWord + `%') `
		//研选的联想词列表
		//ListYxReportIk, err := models.GetArticleCollectionList(` AND a.article_type_id IN (`+articleTypeIds+`) `+conditionIk+sqlGroupIk, user.UserId)
		ListYxReportIk, err := models.GetArticleCollectionList(conditionIk+sqlGroupIk, user.UserId)
		if err != nil && err.Error() != utils.ErrNoRow() {
			br.Msg = "获取信息失败"
			br.ErrMsg = "获取研选IK文章列表失败,Err:" + err.Error()
			return
		}
		if len(ListYxReportIk) > 0 {
			for _, v := range ListYxReportIk {
				ListYxReport = append(ListYxReport, v)
			}
		}
		////弘则的联想词列表
		//ListHzReportIk, err := models.GetReoprtSearchList(`  AND a.article_type_id NOT IN (`+articleTypeIds+`) `+conditionIk+sqlGroupIk, user.UserId)
		//if err != nil && err.Error() != utils.ErrNoRow() {
		//	br.Msg = "获取信息失败"
		//	br.ErrMsg = "获取研选IK文章列表失败,Err:" + err.Error()
		//	return
		//}
		//if len(ListHzReportIk) > 0 {
		//	for _, v := range ListHzReportIk {
		//		ListHzReport = append(ListHzReport, v)
		//	}
		//}
	}

	var articleIdsArr []int
	var articleIdsSpecialArr []int // 研选专栏ID
	//for k, v := range ListHzReport {
	//	ListHzReport[k].Source = 1
	//	//if v.MyCollectNum > 0 {
	//	//	ListHzReport[k].IsCollect = true
	//	//}
	//	articleIdsArr = append(articleIdsArr, v.ArticleId)
	//}
	for k, v := range ListYxReport {
		ListYxReport[k].Source = 2
		//if v.MyCollectNum > 0 {
		//	ListYxReport[k].IsCollect = true
		//}
		if v.ArticleTypeId == -1 {
			articleIdsSpecialArr = append(articleIdsSpecialArr, v.ArticleId)
		} else {
			articleIdsArr = append(articleIdsArr, v.ArticleId)
		}
	}

	var articleIds string
	//for _, v := range ListHzReport {
	//	articleIds += strconv.Itoa(v.ArticleId) + ","
	//}

	articleMapPv := services.GetArticleHistoryByArticleId(articleIdsArr)                       //文章Pv
	articleCollectMap, _ := services.GetCygxArticleCollectMap(user.UserId)                     //用户收藏的文章
	articleCollectNumMap, _ := services.GetCygxArticleCollectNumMapByArtcileIds(articleIdsArr) //文章收藏的数量
	articleCollectYanxuanSpecialMap, _ := services.GetYanxuanSpecialCollectMap(user.UserId)    //用户收藏的研选专栏

	for i, v := range ListYxReport {
		articleIds += strconv.Itoa(v.ArticleId) + ","
		if v.ArticleTypeId == -1 {
			v.ArticleTypeName = utils.CYGX_YANXUAN_SPECIAL
			v.IsCollect = articleCollectYanxuanSpecialMap[v.ArticleId]
		} else if v.ArticleTypeId > 0 {
			ListYxReport[i].ArticleTypeName = utils.CYGX_YANXUAN_ARTICLE
			ListYxReport[i].Pv = articleMapPv[v.ArticleId]
			ListYxReport[i].CollectNum = articleCollectNumMap[v.ArticleId]
			ListYxReport[i].IsCollect = articleCollectMap[v.ArticleId]
		}
		if v.SpecialType == 1 {
			ListYxReport[i].Title = "【笔记】" + ListYxReport[i].Title
		} else if ListYxReport[i].SpecialType == 2 {
			ListYxReport[i].Title = "【观点】" + ListYxReport[i].Title
		}
		if v.CompanyTags != "" {
			v.SpecialTags += v.CompanyTags
		}
		if v.IndustryTags != "" {
			if v.SpecialTags != "" {
				v.SpecialTags += ","
			}
			v.SpecialTags += v.IndustryTags
		}
		v.SpecialTags = v.SpecialTags

		if v.IsSpecial == 1 {
			v.Resource = 2
			v.ResourceObj = "articlespecial"
		} else {
			if v.ReportId > 0 {
				v.Resource = 3
				v.ReportId = v.ReportId
				v.ResourceObj = "articleficc"
			} else {
				v.Resource = 1
				if v.ArticleTypeId > 0 {
					v.ResourceObj = "articleyx"
				} else {
					v.ResourceObj = "articlevmp"
				}
			}
		}
	}
	articleIds = strings.TrimRight(articleIds, ",")
	silcearticleIds := strings.Split(articleIds, ",")
	var parsindustrial []interface{}
	parsindustrial = make([]interface{}, 0)
	articleIdList := make([]string, 0)
	for _, v := range silcearticleIds {
		articleIdList = append(articleIdList, v)
	}
	conditionindustrial := ` AND mg.article_id IN (  ` + utils.GetOrmInReplace(len(silcearticleIds)) + ` )  `
	parsindustrial = append(parsindustrial, articleIdList)
	industrialList, err := models.GetIndustrialListByarticleId(parsindustrial, conditionindustrial)
	if err != nil {
		return
	}
	industrialMap := make(map[int][]*models.IndustrialManagementResp)
	if len(industrialList) > 0 {
		for _, v := range industrialList {
			item := new(models.IndustrialManagementResp)
			//item.ArticleId = v.ArticleId
			item.IndustrialManagementId = v.IndustrialManagementId
			item.IndustryName = v.IndustryName
			item.ChartPermissionId = v.ChartPermissionId
			industrialMap[v.ArticleId] = append(industrialMap[v.ArticleId], item)
		}
	}
	//for k, v := range ListHzReport {
	//	if len(industrialMap[v.ArticleId]) > 0 {
	//		ListHzReport[k].List = industrialMap[v.ArticleId]
	//	} else {
	//		ListHzReport[k].List = make([]*models.IndustrialManagementResp, 0)
	//	}
	//	v.Pv = articleMapPv[v.ArticleId]
	//	v.CollectNum = articleCollectNumMap[v.ArticleId]
	//	v.IsCollect = articleCollectMap[v.ArticleId]
	//	if v.ReportId > 0 {
	//		v.Resource = 3
	//	}
	//}
	for k, v := range ListYxReport {
		if len(industrialMap[v.ArticleId]) > 0 {
			ListYxReport[k].List = industrialMap[v.ArticleId]
		} else {
			ListYxReport[k].List = make([]*models.IndustrialManagementResp, 0)
		}
	}
	//获取文章关联的产业

	if len(ListYxReport) == 0 {
		ListYxReport = make([]*models.ArticleCollectionResp, 0)
	}
	//if len(ListHzReport) == 0 {
	//	ListHzReport = make([]*models.ArticleCollectionResp, 0)
	//}

	fllowList, err := models.GetUserFllowIndustrialList(uid)
	if err != nil {
		br.Msg = "获取失败"
		br.ErrMsg = "获取失败，GetUserFllowIndustrialList Err:" + err.Error()
		return
	}
	fllowMap := make(map[int]int)
	if len(fllowList) > 0 {
		for _, v := range fllowList {
			fllowMap[v.IndustrialManagementId] = v.IndustrialManagementId
		}
	}

	//condition = `  AND a.publish_status = 1 AND a.article_type_id NOT IN (` + articleTypeIds + `)  AND (m.industry_name LIKE '%` + keyWord + `%' OR m.subject_names LIKE '%` + keyWord + `%'  )  `
	condition = `  AND a.publish_status = 1   AND (m.industry_name LIKE '%` + keyWord + `%' OR m.subject_names LIKE '%` + keyWord + `%'  )  `

	listHzResource, err := models.GetSearchResourceListcondition(condition, 0, pageSize)
	if err != nil {
		br.Msg = "获取信息失败"
		br.ErrMsg = "获取品种信息失败,Err:" + err.Error()
		return
	}

	if len(listHzResource) > 0 {
		listHzResource, err = services.HandleIndustryListHzAndYx(listHzResource, user, "Hz")
		if err != nil {
			br.Msg = "获取信息失败"
			br.ErrMsg = "获取信息失败,Err:" + err.Error()
			return
		}
	} else {
		listHzResource = make([]*models.IndustrialManagement, 0)
	}

	//condition = `  AND a.publish_status = 1 AND a.article_type_id IN (` + articleTypeIds + `)  AND (m.industry_name LIKE '%` + keyWord + `%' OR m.subject_names LIKE '%` + keyWord + `%'  )  `
	//
	//hotMapindustrial, e := services.IndustrialManagementHotMapGropuPermission()
	//if e != nil {
	//	br.Msg = "获取信息失败"
	//	br.ErrMsg = "获取hot标签失败，IndustrialManagementHotMapGropuPermission ,Err:" + err.Error()
	//	return
	//}
	//listYxResource, err := models.GetSearchResourceList(user.UserId, condition, 0, pageSize)
	//if err != nil {
	//	br.Msg = "获取信息失败"
	//	br.ErrMsg = "获取文章列表失败,Err:" + err.Error()
	//	return
	//}
	////合并产业关联的标的
	//listSubjcet, err := models.GetThemeHeatSubjectList("")
	//if err != nil {
	//	br.Msg = "获取信息失败"
	//	br.ErrMsg = "获取标的信息失败,Err:" + err.Error()
	//	return
	//}
	//industrialIdArr := make([]int, 0)
	//nowTime := time.Now().Local()
	//threeMonBefore := nowTime.AddDate(0, -3, 0)
	//mapHot := make(map[int]bool)
	//
	////if themeType == 2 {
	//mapHot, err = services.GetYanXuanIndustrialManagementIdHotMap(articleTypeIds)
	//if err != nil {
	//	br.Msg = "获取信息失败"
	//	br.ErrMsg = "GetYanXuanIndustrialManagementIdNewMap,Err:" + err.Error()
	//	return
	//}
	//
	////conditionOrder := ` ORDER BY sum_num DESC  `
	////listHot, err := models.GetThemeHeatList(user.UserId, condition, conditionOrder, 0, 3)
	////if err != nil {
	////	br.Msg = "获取信息失败"
	////	br.ErrMsg = "获取品种信息失败,Err:" + err.Error()
	////	return
	////}
	//for k, _ := range mapHot {
	//	industrialIdArr = append(industrialIdArr, k)
	//}
	//orderSrt := "man.recommended_index DESC,update_time DESC"
	//for k, v := range listHzResource {
	//	// 关联报告发布时间均在3个月内则标记New
	//	if v.MinReportTime != "" {
	//		t, e := time.Parse(utils.FormatDateTime, v.MinReportTime)
	//		if e != nil {
	//			err = errors.New("报告最早发布时间有误，GetindustryVideo " + e.Error())
	//			return
	//		}
	//		if t.After(threeMonBefore) {
	//			listHzResource[k].IsNew = true
	//		}
	//	}
	//	//弘则资源包不展示hot标签
	//	//if mapHot[v.IndustryName] > 0 {
	//	//	listHzResource[k].IsHot = true
	//	//}
	//	listHzResource[k].Source = 1
	//	if fllowMap[v.IndustrialManagementId] > 0 {
	//		listHzResource[k].IsFollw = true
	//	}
	//	v.IsHot = hotMapindustrial[v.IndustrialManagementId]
	//	industrialIdSlice := make([]int, 0)
	//	articleIdArr := make([]int, 0)
	//	industrialIdSlice = append(industrialIdSlice, v.IndustrialManagementId)
	//	listUpdateTime, err := models.GetNewArticleDetailByIndustrialIds(industrialIdSlice)
	//	if err != nil && err.Error() != utils.ErrNoRow() {
	//		return
	//	}
	//	for _, v := range listUpdateTime {
	//		articleIdArr = append(articleIdArr, v.ArticleId)
	//	}
	//
	//	if err != nil {
	//		return
	//	}
	//	mapHistroyArticleId := make(map[int]int)
	//
	//	if user.UserId > 0 {
	//		listArticleHistory, e := models.GetUserToArticleHistory(user.UserId, articleIdArr)
	//		if e != nil && e.Error() != utils.ErrNoRow() {
	//			err = errors.New("获取产业关联的视频失败，GetindustryVideo " + e.Error())
	//			return
	//		}
	//		for _, v := range listArticleHistory {
	//			mapHistroyArticleId[v.ArticleId] = v.ArticleId
	//		}
	//	}
	//	condition2 := ` AND man.industry_name LIKE '%` + keyWord + `%' `
	//	list, err := models.GetIndustrialManagementAll(uid, condition2, orderSrt, 0, 20)
	//	if err != nil {
	//		br.Msg = "获取信息失败"
	//		br.ErrMsg = "获取品种信息失败,Err:" + err.Error()
	//		return
	//	}
	//
	//	mapUPdateTime := make(map[int]string)
	//	//获取这些产业下最新更新的文章
	//
	//	//时间线的更新时间
	//	//	maptimelineUPdateTime := make(map[int]string)
	//	listtimelinePublishdate, err := models.GetTimeLineReportIndustrialPublishdateList(industrialIdArr)
	//	if err != nil && err.Error() != utils.ErrNoRow() {
	//		br.Msg = "获取信息失败"
	//		br.ErrMsg = "GetTimeLineReportIndustrialPublishdateList,Err:" + err.Error()
	//		return
	//	}
	//	for _, v := range listtimelinePublishdate {
	//		if mapUPdateTime[v.IndustrialManagementId] != "" {
	//			if utils.StrTimeToTime(v.PublishDate).After(utils.StrTimeToTime(mapUPdateTime[v.IndustrialManagementId])) {
	//				mapUPdateTime[v.IndustrialManagementId] = v.PublishDate
	//			}
	//		}
	//	}
	//
	//	//mapHistroyArticleId := make(map[int]int)
	//
	//	//if userId > 0 {
	//	//	listArticleHistory, e := models.GetUserToArticleHistory(userId, articleIdArr)
	//	//	if e != nil && e.Error() != utils.ErrNoRow() {
	//	//		err = errors.New("获取产业关联的视频失败，GetindustryVideo " + e.Error())
	//	//		return
	//	//	}
	//	//	for _, v := range listArticleHistory {
	//	//		mapHistroyArticleId[v.ArticleId] = v.ArticleId
	//	//	}
	//	//}
	//	var industrialIds string
	//	for _, id := range industrialIdArr {
	//		industrialIds += strconv.Itoa(id) + ","
	//	}
	//	industrialIds = strings.TrimRight(industrialIds, ",")
	//	articleList, err := models.GetReportIndustrialReadNumList(user.UserId, industrialIds, user.CreatedTime)
	//	if err != nil && err.Error() != utils.ErrNoRow() {
	//		br.Msg = "获取信息失败"
	//		br.ErrMsg = "GetReportIndustrialReadNumList,Err:" + err.Error()
	//		return
	//	}
	//	mapHistroyindustrialId := make(map[int]int)
	//	for _, v := range articleList {
	//		mapHistroyindustrialId[v.IndustrialManagementId] = v.Readnum
	//	}
	//	//nowTime := time.Now().Local()
	//	//threeMonBefore := nowTime.AddDate(0, -3, 0)
	//
	//	//查询用户今天是否看过时间线
	//	//haveMorningMeeting := false
	//	//var morningMeetingTime string
	//	recrodList, err := models.GetTimeLineRecordAllCount(user.UserId, time.Now().Format(utils.FormatDate))
	//	if err != nil {
	//		br.Msg = "获取信息失败"
	//		br.ErrMsg = "GetTimeLineRecordAllCount,Err:" + err.Error()
	//		return
	//	}
	//	var industrialManagementIdstr string
	//	industrialIdMap := make(map[string]time.Time)
	//	for _, v := range recrodList {
	//		industrialManagementIdstr = strings.TrimLeft(v.Parameter, "PageSize=10&CurrentIndex=1&CategoryId=99999&IndustrialManagementId=")
	//		if createTime, ok := industrialIdMap[industrialManagementIdstr]; ok {
	//			if createTime.Before(v.CreateTime) {
	//				industrialIdMap[industrialManagementIdstr] = v.CreateTime
	//			}
	//		} else {
	//			industrialIdMap[industrialManagementIdstr] = v.CreateTime
	//		}
	//	}
	//
	//	mmList, err := models.GetCygxMorningMeetingReviewsListByIndustrialIds(industrialIds)
	//	if err != nil {
	//		return
	//	}
	//	morningMeetingTimeMap := make(map[int]time.Time)
	//	for _, v := range mmList {
	//		morningMeetingTimeMap[v.IndustryId] = v.CreateTime
	//	}
	//	timeLineRedMap := make(map[int]bool, 0)
	//
	//	for _, industrialId := range industrialIdArr {
	//		if createTime, ok := industrialIdMap[strconv.Itoa(industrialId)]; ok {
	//			if createTime.Before(morningMeetingTimeMap[industrialId]) {
	//				timeLineRedMap[industrialId] = true
	//			}
	//		}
	//	}
	//
	//	for k, v := range list {
	//		list[k].UpdateTime = utils.TimeRemoveHms(mapUPdateTime[v.IndustrialManagementId])
	//		if user.UserId > 0 {
	//			//如果文章没有阅读，而且，文章的发布时间晚于项目的上线时间，而且文章的发布时间晚于用户的注册时间，就进行标红处理
	//			if mapHistroyindustrialId[v.IndustrialManagementId] == 0 || timeLineRedMap[v.IndustrialManagementId] {
	//				if user.CreatedTime.Before(utils.StrTimeToTime(mapUPdateTime[v.IndustrialManagementId])) && utils.StrTimeToTime(utils.OnlineTime).Before(utils.StrTimeToTime(mapUPdateTime[v.IndustrialManagementId])) {
	//					list[k].IsRed = true
	//				}
	//			}
	//		} else {
	//			if utils.StrTimeToTime(utils.OnlineTime).Before(utils.StrTimeToTime(mapUPdateTime[v.IndustrialManagementId])) {
	//				list[k].IsRed = true
	//			}
	//			list[k].IsFollow = 0
	//		}
	//
	//		list[k].UpdateTime = utils.TimeRemoveHms(mapUPdateTime[v.IndustrialManagementId])
	//		if user.UserId > 0 {
	//			//如果文章没有阅读，而且，文章的发布时间晚于项目的上线时间，而且文章的发布时间晚于用户的注册时间，就进行标红处理
	//			if mapHistroyindustrialId[v.IndustrialManagementId] == 0 || timeLineRedMap[v.IndustrialManagementId] {
	//				if user.CreatedTime.Before(utils.StrTimeToTime(mapUPdateTime[v.IndustrialManagementId])) && utils.StrTimeToTime(utils.OnlineTime).Before(utils.StrTimeToTime(mapUPdateTime[v.IndustrialManagementId])) {
	//					list[k].IsRed = true
	//				}
	//			}
	//		} else {
	//			if utils.StrTimeToTime(utils.OnlineTime).Before(utils.StrTimeToTime(mapUPdateTime[v.IndustrialManagementId])) {
	//				list[k].IsRed = true
	//			}
	//			list[k].IsFollow = 0
	//		}
	//	}
	//
	//	industrialIdArr = append(industrialIdArr, v.IndustrialManagementId)
	//}
	//
	//for k, v := range listYxResource {
	//	// 关联报告发布时间均在3个月内则标记New
	//	if v.MinReportTime != "" {
	//		t, e := time.Parse(utils.FormatDateTime, v.MinReportTime)
	//		if e != nil {
	//			err = errors.New("报告最早发布时间有误，GetindustryVideo " + e.Error())
	//			return
	//		}
	//		if t.After(threeMonBefore) {
	//			listYxResource[k].IsNew = true
	//		}
	//	}
	//	listYxResource[k].IsHot = mapHot[v.IndustrialManagementId]
	//	listYxResource[k].Source = 2
	//	if fllowMap[v.IndustrialManagementId] > 0 {
	//		listYxResource[k].IsFollw = true
	//	}
	//	v.IsHot = hotMapindustrial[v.IndustrialManagementId]
	//	industrialIdArr = append(industrialIdArr, v.IndustrialManagementId)
	//}
	//
	//if len(industrialIdArr) > 0 {
	//	//查询产业视频
	//	industrialVideoMap := make(map[int]*models.MicroVideoSimpleInfo)
	//	// 获取默认图配置
	//	_, videoMap, _, _, e := services.GetMicroRoadShowDefaultImgConfig()
	//	if e != nil {
	//		br.Msg = "获取视频默认配置图失败"
	//		br.ErrMsg = "获取视频默认配置图失败, Err: " + e.Error()
	//		return
	//	}
	//	videoList, err := models.GetMicroRoadshowVideoByIndustryIds(industrialIdArr)
	//	if err != nil {
	//		br.Msg = "产业视频列表失败"
	//		br.ErrMsg = "产业视频列表失败, Err: " + err.Error()
	//		return
	//	}
	//	for _, v := range videoList {
	//		tmp := &models.MicroVideoSimpleInfo{
	//			Id:                  v.VideoId,
	//			Title:               "5min逻辑【" + v.IndustryName + "】解析",
	//			ResourceUrl:         v.VideoUrl,
	//			BackgroundImg:       v.ImgUrl,
	//			PlaySeconds:         v.VideoDuration,
	//			DetailImgUrl:        v.DetailImgUrl,
	//			ChartPermissionName: v.ChartPermissionName,
	//			ChartPermissionId:   v.ChartPermissionId,
	//		}
	//		if tmp.BackgroundImg == "" {
	//			tmp.BackgroundImg = videoMap[v.ChartPermissionId]
	//		}
	//		industrialVideoMap[v.IndustryId] = tmp
	//	}
	//
	//	//查询权限
	//	// 用户权限
	//	authInfo, permissionArr, e := services.GetUserRaiPermissionInfo(user.UserId, user.CompanyId)
	//	if e != nil {
	//		br.Msg = "获取失败"
	//		br.ErrMsg = "获取用户权限失败, Err: " + e.Error()
	//		return
	//	}
	//
	//	for k, v := range listHzResource {
	//		//展示产业视频
	//		if video, ok := industrialVideoMap[v.IndustrialManagementId]; ok {
	//			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 au.HasPermission != 1 {
	//				if au.OperationMode == services.UserPermissionOperationModeCall {
	//					au.PopupMsg = services.UserPermissionPopupMsgCallMicroVideo
	//				} else {
	//					au.PopupMsg = services.UserPermissionPopupMsgApplyMicroVideo
	//				}
	//				video.ResourceUrl = ""
	//			}
	//			listHzResource[k].AuthInfo = au
	//			listHzResource[k].IndustryVideo = video
	//		}
	//	}
	//
	//	//合并产业关联的标的
	//	listSubjcet, err = models.GetIndustrialSubjectAllByIndustrialId(industrialIdArr)
	//	if err != nil {
	//		br.Msg = "获取信息失败"
	//		br.ErrMsg = "获取标的信息失败,Err:" + err.Error()
	//		return
	//	}
	//	//严选的产业只关联研选下面的标的
	//	var yxcondition string
	//	var yxPer []interface{}
	//	yxcondition = ` AND ag.article_id >= ?`
	//	yxPer = append(yxPer, utils.SummaryArticleId)
	//	listYxAticleSubject, err := models.GetSubjectArticleGroupManagementList(yxcondition, yxPer)
	//	if err != nil && err.Error() != utils.ErrNoRow() {
	//		br.Msg = "获取信息失败"
	//		br.ErrMsg = "获取研选报告关联的标的信息失败,GetSubjectArticleGroupManagementListErr:" + err.Error()
	//		return
	//	}
	//	mapYxSubject := make(map[int]int)
	//	for _, v := range listYxAticleSubject {
	//		mapYxSubject[v.IndustrialSubjectId] = v.IndustrialSubjectId
	//	}
	//
	//	mapIndustrial := make(map[string]int)
	//	for _, v := range listSubjcet {
	//		for k2, v2 := range listYxResource {
	//			if v2.IndustrialManagementId == v.IndustrialManagementId && mapIndustrial[fmt.Sprint(v2.IndustrialManagementId, "Yx", v.SubjectName)] == 0 && mapYxSubject[v.IndustrialSubjectId] > 0 {
	//				listYxResource[k2].IndustrialSubjectList = append(listYxResource[k2].IndustrialSubjectList, v)
	//				mapIndustrial[fmt.Sprint(v2.IndustrialManagementId, "Yx", v.SubjectName)] = v2.IndustrialManagementId
	//			}
	//		}
	//		for k2, v2 := range listHzResource {
	//			if v2.IndustrialManagementId == v.IndustrialManagementId && mapIndustrial[fmt.Sprint(v2.IndustrialManagementId, "Hz", v.SubjectName)] == 0 {
	//				listHzResource[k2].IndustrialSubjectList = append(listHzResource[k2].IndustrialSubjectList, v)
	//				mapIndustrial[fmt.Sprint(v2.IndustrialManagementId, "Hz", v.SubjectName)] = v2.IndustrialManagementId
	//			}
	//		}
	//	}
	//}

	resp := new(models.SearchReportAndResourceResp)
	//if len(listYxResource) == 0 {
	//	listYxResource = make([]*models.IndustrialManagementHotResp, 0)
	//}
	//if len(listHzResource) == 0 {
	//	listHzResource =
	//	listHzResource = make([]*models.IndustrialManagement,0)
	//}

	if keyWord != "" {
		keyWordItem := new(models.CygxUserSearchKeyWord)
		keyWordItem.UserId = user.UserId
		keyWordItem.KeyWord = keyWord
		keyWordItem.PageType = "ReortSearch"
		keyWordItem.CreateTime = time.Now()
		go models.AddUserSearchKeyWord(keyWordItem)
		//go services.AddUserSearchLog(user, keyWord, 5)
	}

	resp.ListHzResource = listHzResource
	resp.ListYxResource = make([]*models.IndustrialManagementHotResp, 0)
	resp.ListYxReport = make([]*models.ArticleCollectionResp, 0)
	resp.ListHzReport = ListYxReport
	br.Ret = 200
	br.Success = true
	br.Msg = "获取成功"
	br.Data = resp
}

// @Title 产业报告公司列表
// @Description 获取产业报告公司列表接口
// @Param   ChartPermissionId   query   int  true       "行业id"
// @Success 200 {object} models.IndustrialManagementList
// @router /home/stockName [get]
func (this *ReportController) StockNameList() {
	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
	chartPermissionId, _ := this.GetInt("ChartPermissionId")

	list, err := models.GetSummaryArticle(chartPermissionId)
	if err != nil {
		br.Msg = "获取综述报告公司名称失败"
		br.ErrMsg = "获取综述报告公司名称失败,Err:" + err.Error()
		return
	}
	var respList []*models.SummaryArticleStock
	for _, item := range list {
		sliceSubjects := strings.Split(item.Stock, "/")
		if len(sliceSubjects) > 0 {
			for i, vSubject := range sliceSubjects {
				sliceKuohao := strings.Split(vSubject, "(")           //过滤括号
				sliceXiahuaxian := strings.Split(sliceKuohao[0], "-") //过滤下划线
				subject := sliceXiahuaxian[0]
				if i > 0 {
					newItem := models.SummaryArticleStock{
						Id:        item.Id,
						ArticleId: item.ArticleId,
						Stock:     subject,
					}

					respList = append(respList, &newItem)
				} else {
					item.Stock = subject
					respList = append(respList, item)
				}
			}
		}

		//index := strings.Index(item.Stock, "(")
		//item.Stock = item.Stock[:index]
		//if strings.Contains(item.Stock, "-B"){
		//	item.Stock = strings.Replace(item.Stock, "-B", "", -1)
		//}
		//if strings.Contains(item.Stock, "-W"){
		//	item.Stock = strings.Replace(item.Stock, "-W", "", -1)
		//}
	}
	resp := new(models.SummaryArticleStockResp)
	resp.List = respList
	br.Ret = 200
	br.Success = true
	br.Msg = "获取成功"
	br.Data = resp
}

// @Title 文章留言接口
// @Description 文章留言接口
// @Param	request	body models.AddCygxActivityHelpAsk true "type json string"
// @Success 200 {object} models.TacticsListResp
// @router /commentAdd [post]
func (this *ReportController) CommentAdd() {
	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.AddCygxArticleCommentReq
	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.Content == "" {
		br.Msg = "建议内容不可为空"
		return
	}
	content := req.Content
	itemToken, err := services.WxGetToken()
	if err != nil {
		br.Msg = "GetWxAccessToken Err:" + err.Error()
		return
	}
	if itemToken.AccessToken == "" {
		br.Msg = "accessToken is empty"
		return
	}
	commerr, err := weapp.MSGSecCheck(itemToken.AccessToken, content)
	if err != nil {
		br.Msg = "内容校验失败！"
		br.ErrMsg = "内容校验失败，Err:" + err.Error()
		return
	}
	if commerr.ErrCode != 0 {
		br.Msg = "内容违规,请重新提交！"
		br.ErrMsg = "内容违规，Err:" + commerr.ErrMSG
		return
	}

	articleId := req.ArticleId
	articleInfo, errInfo := models.GetArticleDetailById(articleId)
	if articleInfo == nil {
		br.Msg = "操作失败"
		br.ErrMsg = "文章ID错误,不存在articleId：" + strconv.Itoa(articleId)
		return
	}
	if errInfo != nil {
		br.Msg = "操作失败"
		br.ErrMsg = "操作失败,Err:" + errInfo.Error()
		return
	}

	companyDetail, err := models.GetCompanyDetailById(user.CompanyId)
	if err != nil {
		br.Msg = "提交失败！"
		br.ErrMsg = "获取客户详情失败，Err:" + err.Error()
		return
	}
	if companyDetail == nil {
		br.Msg = "提交失败！"
		br.ErrMsg = "客户不存在，uid:" + strconv.Itoa(user.UserId)
		return
	}
	item := models.CygxArticleComment{
		UserId:      user.UserId,
		ArticleId:   req.ArticleId,
		CreateTime:  time.Now(),
		Mobile:      user.Mobile,
		Email:       user.Email,
		CompanyId:   user.CompanyId,
		CompanyName: companyDetail.CompanyName,
		Content:     content,
		Title:       articleInfo.Title,
	}
	msgId, err := models.AddArticleComment(&item)
	if err != nil {
		br.Msg = "提交失败"
		br.ErrMsg = "提交留言失败,Err:" + err.Error()
		return
	}

	go services.SendCommentWxTemplateMsg(req, user, articleInfo, int(msgId))
	go services.SendCommentWxTemplateMsgByYxCategory(req, user, articleInfo, int(msgId)) // 发送用户留言提醒（研选公众号类目模版消息）
	br.Ret = 200
	br.Success = true
	br.Msg = "提交成功"
}

// @Title 记录用户浏览音频回放接口
// @Description 记录用户浏览音频回放接口
// @Param	request	body models.ArticleIdReq true "type json string"
// @Success Ret=200 操作成功
// @router /voiceHistory/add [post]
func (this *ReportController) ResearchSummaryVoiceHistoryAdd() {
	br := new(models.BaseResponse).Init()
	defer func() {
		this.Data["json"] = br
		this.ServeJSON()
	}()
	user := this.User
	if user == nil {
		br.Msg = "请登录"
		br.ErrMsg = "请登录，用户信息为空"
		br.Ret = 408
		return
	}
	uid := user.UserId
	var req models.ArticleIdReq
	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
	if err != nil {
		br.Msg = "参数解析异常！"
		br.ErrMsg = "参数解析失败，Err:" + err.Error()
		return
	}

	articleId := req.ArticleId
	playSeconds := req.PlaySeconds
	pageRouter := req.PageRouter

	if pageRouter == "本周研究汇总" {
		articleInfo, errInfo := models.GetCygxResearchSummaryInfoById(articleId)
		if articleInfo == nil {
			br.Msg = "操作失败"
			br.ErrMsg = "文章ID错误,不存在articleId：" + strconv.Itoa(articleId)
			return
		}
		if errInfo != nil {
			br.Msg = "操作失败"
			br.ErrMsg = "操作失败,Err:" + errInfo.Error()
			return
		}

		var sellerName string
		sellerName, err = models.GetCompanySellerName(user.CompanyId)
		if err != nil {
			br.Msg = "报名失败！"
			br.ErrMsg = "获取对应销售失败，Err:" + err.Error()
			return
		}
		item := models.CygxResearchSummaryVoiceHistory{
			ArticleId:   articleId,
			UserId:      uid,
			CreateTime:  time.Now(),
			Mobile:      user.Mobile,
			Email:       user.Email,
			CompanyId:   user.CompanyId,
			CompanyName: user.CompanyName,
			RealName:    user.RealName,
			SellerName:  sellerName,
			PlaySeconds: strconv.Itoa(req.PlaySeconds),
			ModifyTime:  time.Now(),
		}

		if playSeconds != 0 {
			lastItem, err := models.GetLastCygxResearchSummaryVoiceHistory(articleId, user.UserId)
			if err != nil {
				br.Msg = "操作失败"
				br.ErrMsg = "操作失败,GetLastCygxResearchSummaryVoiceHistory Err:" + err.Error()
				return
			}
			err = models.UpdateLastCygxResearchSummaryVoiceHistory(strconv.Itoa(req.PlaySeconds), lastItem.Id)
			if err != nil {
				br.Msg = "更新失败"
				br.ErrMsg = "更新失败,UpdateLastCygxResearchSummaryVoiceHistory Err:" + err.Error()
				return
			}
		} else {
			err = models.AddCygxResearchSummaryVoiceHistory(&item)
			if err != nil {
				br.Msg = "操作失败"
				br.ErrMsg = "操作失败,Err:" + err.Error()
				return
			}
			err = models.UpdateResearchSummaryVoiceCounts(articleId)
			if err != nil {
				br.Msg = "更新失败"
				br.ErrMsg = "更新失败,Err:" + err.Error()
				return
			}
		}
	} else if pageRouter == "上周纪要汇总" {
		articleInfo, errInfo := models.GetCygxMinutesSummaryInfoById(articleId)
		if articleInfo == nil {
			br.Msg = "操作失败"
			br.ErrMsg = "文章ID错误,不存在articleId：" + strconv.Itoa(articleId)
			return
		}
		if errInfo != nil {
			br.Msg = "操作失败"
			br.ErrMsg = "操作失败,Err:" + errInfo.Error()
			return
		}

		var sellerName string
		sellerName, err = models.GetCompanySellerName(user.CompanyId)
		if err != nil {
			br.Msg = "报名失败！"
			br.ErrMsg = "获取对应销售失败，Err:" + err.Error()
			return
		}
		item := models.CygxMinutesSummaryVoiceHistory{
			ArticleId:   articleId,
			UserId:      uid,
			CreateTime:  time.Now(),
			Mobile:      user.Mobile,
			Email:       user.Email,
			CompanyId:   user.CompanyId,
			CompanyName: user.CompanyName,
			RealName:    user.RealName,
			SellerName:  sellerName,
			PlaySeconds: strconv.Itoa(req.PlaySeconds),
			ModifyTime:  time.Now(),
		}

		if playSeconds != 0 {
			lastItem, err := models.GetLastCygxMinutesSummaryVoiceHistory(articleId, user.UserId)
			if err != nil {
				br.Msg = "操作失败"
				br.ErrMsg = "操作失败,GetLastCygxSummaryVoiceHistory Err:" + err.Error()
				return
			}
			err = models.UpdateLastCygxMinutesSummaryVoiceHistory(strconv.Itoa(req.PlaySeconds), lastItem.Id)
			if err != nil {
				br.Msg = "更新失败"
				br.ErrMsg = "更新失败,UpdateLastCygxSummaryVoiceHistory Err:" + err.Error()
				return
			}
		} else {
			err = models.AddCygxMinutesSummaryVoiceHistory(&item)
			if err != nil {
				br.Msg = "操作失败"
				br.ErrMsg = "操作失败,Err:" + err.Error()
				return
			}
			err = models.UpdateMinutesSummaryVoiceCounts(articleId)
			if err != nil {
				br.Msg = "更新失败"
				br.ErrMsg = "更新失败,Err:" + err.Error()
				return
			}
		}
	} else if pageRouter == "报告精选" {
		articleInfo, errInfo := models.GetCygxReportSelectionInfoById(articleId)
		if articleInfo == nil {
			br.Msg = "操作失败"
			br.ErrMsg = "文章ID错误,不存在articleId：" + strconv.Itoa(articleId)
			return
		}
		if errInfo != nil {
			br.Msg = "操作失败"
			br.ErrMsg = "操作失败,Err:" + errInfo.Error()
			return
		}

		var sellerName string
		sellerName, err = models.GetCompanySellerName(user.CompanyId)
		if err != nil {
			br.Msg = "报名失败！"
			br.ErrMsg = "获取对应销售失败，Err:" + err.Error()
			return
		}
		item := models.CygxReportSelectionVoiceHistory{
			ArticleId:   articleId,
			UserId:      uid,
			CreateTime:  time.Now(),
			Mobile:      user.Mobile,
			Email:       user.Email,
			CompanyId:   user.CompanyId,
			CompanyName: user.CompanyName,
			RealName:    user.RealName,
			SellerName:  sellerName,
			PlaySeconds: strconv.Itoa(req.PlaySeconds),
			ModifyTime:  time.Now(),
		}

		if playSeconds != 0 {
			lastItem, err := models.GetLastCygxReportSelectionVoiceHistory(articleId, user.UserId)
			if err != nil {
				br.Msg = "操作失败"
				br.ErrMsg = "操作失败,GetLastCygxSummaryVoiceHistory Err:" + err.Error()
				return
			}
			err = models.UpdateLastCygxReportSelectionVoiceHistory(strconv.Itoa(req.PlaySeconds), lastItem.Id)
			if err != nil {
				br.Msg = "更新失败"
				br.ErrMsg = "更新失败,UpdateLastCygxSummaryVoiceHistory Err:" + err.Error()
				return
			}
		} else {
			err = models.AddCygxReportSelectionVoiceHistory(&item)
			if err != nil {
				br.Msg = "操作失败"
				br.ErrMsg = "操作失败,Err:" + err.Error()
				return
			}
			err = models.UpdateReportSelectionVoiceCounts(articleId)
			if err != nil {
				br.Msg = "更新失败"
				br.ErrMsg = "更新失败,Err:" + err.Error()
				return
			}
		}
	}

	br.Ret = 200
	br.Success = true
	br.Msg = "操作成功"
	return
}

// @Title 周期行业报告分类列表接口
// @Description 周期获取行业报告分类列表接口
// @Success 200 {object} models.TradeReportMappingResp
// @router /zhouqi_tradeList [get]
func (this *ReportController) ZouqiTradeList() {
	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
	}
	listCategory, err := models.GetCygxZhouqiArticleMapFirst()
	if err != nil {
		br.Msg = "获取信息失败"
		br.ErrMsg = "获取品种信息失败,Err:" + err.Error()
		return
	}

	resp := new(models.TradeReportMappingResp)
	var list []*models.TradeReportMapping
	if len(listCategory) == 0 {
		list = make([]*models.TradeReportMapping, 0)
	} else {
		for _, v := range listCategory {
			item := new(models.TradeReportMapping)
			item.CategoryId = v.CategoryId
			item.MatchTypeName = v.MatchTypeName
			item.UpdateTime = v.ArticleUpdateTime
			//item.ListArticle = make([]*models.HomeArticle, 0)
			list = append(list, item)
		}
	}
	resp.List = list
	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   CategoryId   query   int  true       "分类ID"
// @Success 200 {object} models.TacticsListResp
// @router /tactics/zhouqi_list [get]
func (this *ReportController) ZhouqiTacticsList() {
	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")
	categoryId, _ := this.GetInt("CategoryId")

	var startSize int
	if pageSize <= 0 {
		pageSize = utils.PageSize20
	}
	if currentIndex <= 0 {
		currentIndex = 1
	}
	startSize = paging.StartIndex(currentIndex, pageSize)
	detail, err := models.GetCygxZhouqiArticleMapInfoById(categoryId)
	if err != nil {
		br.Msg = "获取信息失败"
		br.ErrMsg = "获取信息失败,Err:" + err.Error()
		return
	}
	var total int
	//var err error
	resp := new(models.TacticsListZhouqiResp)
	page := paging.GetPaging(currentIndex, pageSize, total)
	list := make([]*models.HomeArticle, 0)
	listCategory, err := models.GetCygxZhouqiArticleMapByParentId(categoryId)
	if err != nil {
		br.Msg = "获取信息失败"
		br.ErrMsg = "获取产业报告+晨会点评列表,Err:" + err.Error()
		return
	}
	var matchTypeName = []string{}
	var seriesName = []string{}
	for _, v := range listCategory {
		if v.MatchTypeName != "" {
			matchTypeName = append(matchTypeName, v.MatchTypeName)
		}

		if v.SeriesName != "" {
			seriesName = append(seriesName, v.SeriesName)
		}
	}

	var conditionOr string
	if detail.FiccReportId != "" {
		conditionOr = " OR  art.report_id  IN (" + detail.FiccReportId + ")" // 手动配置报告展示逻辑处理
	}
	if len(seriesName) > 0 {
		conditionOr += "  OR series_name IN  ('" + strings.Join(seriesName, "','") + "') "
	}

	var condition string
	//var pars []interface{}
	//if len(seriesName) == 0 {
	//	condition = " AND field_name  IN  ('" + strings.Join(matchTypeName, "','") + "')"
	//} else {
	//	condition = " AND  ( field_name  IN  ('" + strings.Join(matchTypeName, "','") + "')   OR series_name IN  ('" + strings.Join(seriesName, "','") + "')   )"
	//}
	condition = " AND  ( field_name  IN  ('" + strings.Join(matchTypeName, "','") + "')  " + conditionOr + " ) "
	list, total, err = models.GetReportAndproductIndustrylListimgZhouqi(condition, startSize, pageSize)
	if err != nil {
		br.Msg = "获取信息失败"
		br.Msg = "GetReportAndproductIndustrylListimgZhouqi，Err:" + err.Error()
		return
	}

	listPublic, err := services.HandleArticleCategoryImg(list)
	if err != nil {
		br.Msg = "获取失败"
		br.ErrMsg = "获取报告封面图片失败, Err:" + err.Error()
		return
	}

	var articleIds []int
	for _, v := range listPublic {
		if v.Resource == 1 {
			articleIds = append(articleIds, v.ArticleId)
		}
	}

	articleMapPv := services.GetArticleHistoryByArticleId(articleIds)                       //文章Pv
	articleCollectMap, _ := services.GetCygxArticleCollectMap(user.UserId)                  //用户收藏的文章
	articleCollectNumMap, _ := services.GetCygxArticleCollectNumMapByArtcileIds(articleIds) //文章收藏的数量
	resp.IsShowAbstract = true
	listResp := make([]*models.HomeArticle, 0)
	for _, v := range listPublic {
		item := new(models.HomeArticle)
		item.ArticleId = v.ArticleId
		item.ReportId = v.ReportId
		item.Title = v.Title
		item.Annotation = v.Annotation
		item.Abstract = v.Abstract
		item.ImgUrlPc = v.ImgUrlPc
		item.PublishDate = v.PublishDate
		item.Resource = v.Resource
		if v.Resource == 1 {
			item.Pv = articleMapPv[v.ArticleId]
			item.IsCollect = articleCollectMap[v.ArticleId]
			item.CollectNum = articleCollectNumMap[v.ArticleId]
		}

		if v.ReportId > 0 {
			item.Resource = 3
		}
		if v.Abstract != "" {
			item.IsShowAbstract = resp.IsShowAbstract
		}

		listResp = append(listResp, item)
	}
	if len(listResp) == 0 {
		listResp = make([]*models.HomeArticle, 0)
	}
	page = paging.GetPaging(currentIndex, pageSize, total)
	resp.List = listResp
	resp.Paging = page
	br.Ret = 200
	br.Success = true
	br.Msg = "获取成功"
	br.Data = resp
}

// @Title 获取用户的选择详情
// @Description 获取用户的选择详情接口
// @Success 200 {object}  models.CygxXzsChooseSendResp
// @router /choose/detail [get]
func (this *ReportController) ChooseDetail() {
	br := new(models.BaseResponse).Init()
	defer func() {
		this.Data["json"] = br
		this.ServeJSON()
	}()
	user := this.User
	if user == nil {
		br.Msg = "请登录"
		br.ErrMsg = "请登录，用户信息为空"
		br.Ret = 408
		return
	}
	resp := new(models.CygxXzsChooseSendResp)
	var condition string
	var pars []interface{}
	mobile := user.Mobile
	if mobile == "" {
		br.Ret = 200
		br.Success = true
		br.Msg = "获取成功"
		br.Data = resp
	}
	permissionId, err := models.GetCompanyPermissionId(user.CompanyId)
	if err != nil {
		br.Msg = "获取信息失败"
		br.ErrMsg = "GetCompanyPermissionId,Err:" + err.Error()
		return
	}
	if permissionId == "" {
		br.Ret = 200
		br.Success = true
		br.Msg = "获取成功"
		br.Data = resp
	}
	//mapIndustrial := make(map[int][]*models.IndustrialManagementRep)
	mapIndustrialFollow := make(map[int][]*models.IndustrialManagementRep)       // 重点关注的行业下的数组结构
	mapIndustrialPush := make(map[int][]*models.IndustrialManagementRep)         // 接受推送的行业下的数组结构
	mapIndustrialUninterested := make(map[int][]*models.IndustrialManagementRep) // 不感兴趣的行业下的数组结构
	//mapFllow := make(map[int]int)
	checkListFollow := make(map[int]int)       // 重点关注的ID
	checkListPush := make(map[int]int)         // 接受推送的ID
	checkListUninterested := make(map[int]int) // 不感兴趣的ID
	mapCategory := make(map[int]int)
	//ampCheckList := make(map[int][]int, 0)
	ampCheckListFollow := make(map[int][]int, 0)       // 重点关注的ID
	ampCheckListPush := make(map[int][]int, 0)         // 接受推送的ID
	ampCheckListUninterested := make(map[int][]int, 0) // 不感兴趣的ID
	//permissionIdList := make([]string, 0)
	fllowList, err := models.GetCygxIndustryFllowListByMobile(mobile)
	if err != nil && err.Error() != utils.ErrNoRow() {
		br.Msg = "获取信息失败"
		br.ErrMsg = "获取客户信息失败,Err:" + err.Error()
		return
	}

	for _, v := range fllowList {
		switch v.FollowType {
		case 1:
			checkListFollow[v.IndustrialManagementId] = v.IndustrialManagementId
		case 0:
			checkListPush[v.IndustrialManagementId] = v.IndustrialManagementId
		case 3:
			checkListUninterested[v.IndustrialManagementId] = v.IndustrialManagementId
		}
	}

	industrialList, err := models.GetindustrialManagement()
	if err != nil {
		br.Msg = "获取信息失败"
		br.ErrMsg = "获取产业信息失败,Err:" + err.Error()
		return
	}

	for _, v := range industrialList {
		if v.ChartPermissionId == utils.ZHOU_QI_ID {
			continue
		}
		v.IsFllow = true
		if checkListFollow[v.IndustrialManagementId] > 0 {
			//添加重点关注的行业赛道
			ampCheckListFollow[v.ChartPermissionId] = append(ampCheckListFollow[v.ChartPermissionId], v.IndustrialManagementId)
			mapIndustrialFollow[v.ChartPermissionId] = append(mapIndustrialFollow[v.ChartPermissionId], v)
		} else if checkListUninterested[v.IndustrialManagementId] > 0 {
			//添加不感兴趣的行业赛道
			ampCheckListUninterested[v.ChartPermissionId] = append(ampCheckListUninterested[v.ChartPermissionId], v.IndustrialManagementId)
			mapIndustrialUninterested[v.ChartPermissionId] = append(mapIndustrialUninterested[v.ChartPermissionId], v)
		} else {
			//添加接受推送的行业赛道
			mapIndustrialPush[v.ChartPermissionId] = append(mapIndustrialPush[v.ChartPermissionId], v)
			ampCheckListPush[v.ChartPermissionId] = append(ampCheckListPush[v.ChartPermissionId], v.IndustrialManagementId)
		}
	}

	slicepermissionId := strings.Split(permissionId, ",")

	permissionList, err := models.GetChartPermissionAllXzs(condition, pars)
	if err != nil {
		br.Msg = "获取信息失败"
		br.ErrMsg = "获取产业信息失败,Err:" + err.Error()
		return
	}

	//策略固收的处理
	categoryListFollow, err := models.GetCygxXzsChooseCategoryList(mobile)
	if err != nil && err.Error() != utils.ErrNoRow() {
		br.Msg = "获取信息失败"
		br.ErrMsg = "获取客户信息失败,Err:" + err.Error()
		return
	}
	checkListCelueFollow := make(map[int]int)       // 重点关注的ID
	checkListCeluePush := make(map[int]int)         // 接受推送的ID
	checkListCelueUninterested := make(map[int]int) // 不感兴趣的ID
	for _, v := range categoryListFollow {
		//mapFllow[v.IndustrialManagementId] = v.IndustrialManagementId
		switch v.FollowType {
		case 1:
			checkListCelueFollow[v.CategoryId] = v.CategoryId
		case 0:
			checkListCeluePush[v.CategoryId] = v.CategoryId
		case 3:
			checkListCelueUninterested[v.CategoryId] = v.CategoryId
		}
	}

	for _, v := range categoryListFollow {
		mapCategory[v.CategoryId] = v.CategoryId
	}
	celueList, err := models.GetReportMappingStrategyAllXzs()
	if err != nil {
		br.Msg = "获取信息失败"
		br.ErrMsg = "获取产业信息失败,Err:" + err.Error()
		return
	}

	for _, v := range celueList {
		v.IsFllow = true
		if checkListCelueFollow[v.IndustrialManagementId] > 0 {
			//添加重点关注的行业赛道
			ampCheckListFollow[v.ChartPermissionId] = append(ampCheckListFollow[v.ChartPermissionId], v.IndustrialManagementId)
			mapIndustrialFollow[v.ChartPermissionId] = append(mapIndustrialFollow[v.ChartPermissionId], v)
		} else if checkListCelueUninterested[v.IndustrialManagementId] > 0 {
			//添加不感兴趣的行业赛道
			ampCheckListUninterested[v.ChartPermissionId] = append(ampCheckListUninterested[v.ChartPermissionId], v.IndustrialManagementId)
			mapIndustrialUninterested[v.ChartPermissionId] = append(mapIndustrialUninterested[v.ChartPermissionId], v)
		} else {
			//添加接受推送的行业赛道
			mapIndustrialPush[v.ChartPermissionId] = append(mapIndustrialPush[v.ChartPermissionId], v)
			ampCheckListPush[v.ChartPermissionId] = append(ampCheckListPush[v.ChartPermissionId], v.IndustrialManagementId)
		}
	}
	//策略、固收的处理 end

	//周期的处理
	zhouqiListFollow, err := models.GetCygxXzsChooseCategoryZhouqiList(mobile)
	if err != nil && err.Error() != utils.ErrNoRow() {
		br.Msg = "获取信息失败"
		br.ErrMsg = "获取客户信息失败,Err:" + err.Error()
		return
	}
	checkListZhouqiFollow := make(map[int]int)       // 重点关注的ID
	checkListZhouqiPush := make(map[int]int)         // 接受推送的ID
	checkListZhouqiUninterested := make(map[int]int) // 不感兴趣的ID
	for _, v := range zhouqiListFollow {
		//mapFllow[v.IndustrialManagementId] = v.IndustrialManagementId
		switch v.FollowType {
		case 1:
			checkListZhouqiFollow[v.CategoryId] = v.CategoryId
		case 0:
			checkListZhouqiPush[v.CategoryId] = v.CategoryId
		case 3:
			checkListZhouqiUninterested[v.CategoryId] = v.CategoryId
		}
	}

	zhouqiList, err := models.GetCygxZhouqiArticleMapFirst()
	if err != nil {
		br.Msg = "获取信息失败"
		br.ErrMsg = "获取产业信息失败,Err:" + err.Error()
		return
	}

	for _, vZhouqi := range zhouqiList {
		v := new(models.IndustrialManagementRep)
		v.IsFllow = true
		v.IndustrialManagementId = vZhouqi.CategoryId
		v.IndustryName = vZhouqi.MatchTypeName
		v.ChartPermissionId = utils.ZHOU_QI_ID
		if checkListZhouqiFollow[v.IndustrialManagementId] > 0 {
			//添加重点关注的行业赛道
			ampCheckListFollow[v.ChartPermissionId] = append(ampCheckListFollow[v.ChartPermissionId], v.IndustrialManagementId)
			mapIndustrialFollow[v.ChartPermissionId] = append(mapIndustrialFollow[v.ChartPermissionId], v)
		} else if checkListZhouqiUninterested[v.IndustrialManagementId] > 0 {
			//添加不感兴趣的行业赛道
			ampCheckListUninterested[v.ChartPermissionId] = append(ampCheckListUninterested[v.ChartPermissionId], v.IndustrialManagementId)
			mapIndustrialUninterested[v.ChartPermissionId] = append(mapIndustrialUninterested[v.ChartPermissionId], v)
		} else {
			//添加接受推送的行业赛道
			mapIndustrialPush[v.ChartPermissionId] = append(mapIndustrialPush[v.ChartPermissionId], v)
			ampCheckListPush[v.ChartPermissionId] = append(ampCheckListPush[v.ChartPermissionId], v.IndustrialManagementId)
		}
	}
	//周期的处理end

	for k, v := range permissionList {
		if len(mapIndustrialFollow[v.ChartPermissionId]) == 0 {
			permissionList[k].ListFollow = make([]*models.IndustrialManagementRep, 0)
		} else {
			permissionList[k].ListFollow = mapIndustrialFollow[v.ChartPermissionId]
		}

		if len(mapIndustrialPush[v.ChartPermissionId]) == 0 {
			permissionList[k].ListPush = make([]*models.IndustrialManagementRep, 0)
		} else {
			permissionList[k].ListPush = mapIndustrialPush[v.ChartPermissionId]
		}

		if len(mapIndustrialUninterested[v.ChartPermissionId]) == 0 {
			permissionList[k].ListUninterested = make([]*models.IndustrialManagementRep, 0)
		} else {
			permissionList[k].ListUninterested = mapIndustrialUninterested[v.ChartPermissionId]
		}

		if len(ampCheckListFollow[v.ChartPermissionId]) == 0 {
			permissionList[k].CheckListFollow = make([]int, 0)
		} else {
			permissionList[k].CheckListFollow = ampCheckListFollow[v.ChartPermissionId]
		}

		if len(ampCheckListPush[v.ChartPermissionId]) == 0 {
			permissionList[k].CheckListPush = make([]int, 0)
		} else {
			permissionList[k].CheckListPush = ampCheckListPush[v.ChartPermissionId]
		}

		if len(ampCheckListUninterested[v.ChartPermissionId]) == 0 {
			permissionList[k].CheckListUninterested = make([]int, 0)
		} else {
			permissionList[k].CheckListUninterested = ampCheckListUninterested[v.ChartPermissionId]
		}

		v.HasCheck = utils.InArrayByStr(slicepermissionId, strconv.Itoa(v.ChartPermissionId))
	}
	count, err := models.GetXzsChooseSendCountByMobile(mobile)
	if err != nil {
		br.Msg = "获取信息失败"
		br.ErrMsg = "GetXzsChooseSendCountByMobile,Err:" + err.Error()
		return
	}
	if count == 0 {
		resp.IsObjective = 1
		resp.IsSubjective = 1
	} else {
		detail, err := models.GetCygxXzsChooseSendByMobile(mobile)
		if err != nil {
			br.Msg = "获取信息失败"
			br.ErrMsg = "GetCygxXzsChooseSendByMobile,Err:" + err.Error()
			return
		}
		resp.IsObjective = detail.IsObjective
		resp.IsSubjective = detail.IsSubjective
		resp.IsRefuse = detail.IsRefuse
	}

	resp.IsPush = 1 - resp.IsRefuse
	resp.List = permissionList
	br.Ret = 200
	br.Success = true
	br.Msg = "获取成功"
	br.Data = resp
}

// @Title 提交用户的选择关注的类型
// @Description 提交用户的选择关注的类型接口
// @Param	request	body models.SubmitChooseSendResp true "type json string"
// @Success 200 {object}  models.CygxXzsChooseSendResp
// @router /choose/submit_follow_type [post]
func (this *ReportController) ChooseSubmitFollowType() {
	br := new(models.BaseResponse).Init()
	defer func() {
		this.Data["json"] = br
		this.ServeJSON()
	}()
	user := this.User
	if user == nil {
		br.Msg = "请登录"
		br.ErrMsg = "请登录，用户信息为空"
		br.Ret = 408
		return
	}
	if user.Mobile == "" {
		br.Msg = "提交失败！"
		br.ErrMsg = "提交失败，手机号不能为空"
		return
	}
	var req models.SubmitChooseSendFollowTypeResp
	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
	if err != nil {
		br.Msg = "参数解析异常！"
		br.ErrMsg = "参数解析失败，Err:" + err.Error()
		return
	}

	listMap, err := models.GetCygxXzsChooseCategoryMapList()
	if err != nil {
		br.Msg = "操作失败！"
		br.ErrMsg = "获取数据失败，Err:" + err.Error()
		return
	}
	mapReport := make(map[int]int)
	for _, v := range listMap {
		mapReport[v.CategoryId] = v.Id
	}

	followType := req.FollowType
	listReq := req.List

	var itemsFllow []*models.CygxIndustryFllow
	var itemsCategory []*models.CygxXzsChooseCategory
	var itemsZhouqi []*models.CygxXzsChooseCategoryZhouqi

	var zhouqiIds []int
	var celueIds []int
	var industryIds []int
	for _, vChartPermissionn := range listReq {
		if vChartPermissionn.ChartPermissionName == utils.CE_LUE_NAME || vChartPermissionn.ChartPermissionName == utils.GU_SHOU_NAME {
			//策略与固收
			for _, v := range vChartPermissionn.CheckList {
				item := new(models.CygxXzsChooseCategory)
				categoryId := v
				item.CategoryId = v
				item.IdCygx = mapReport[categoryId]
				item.UserId = user.UserId
				item.Mobile = user.Mobile
				item.Email = user.Email
				item.CompanyId = user.CompanyId
				item.CompanyName = user.CompanyName
				item.RealName = user.RealName
				item.FollowType = followType
				item.CreateTime = time.Now()
				item.ModifyTime = time.Now()
				itemsCategory = append(itemsCategory, item)
				celueIds = append(celueIds, v)
			}
		} else if vChartPermissionn.ChartPermissionName == utils.ZHOU_QI_NAME {
			//周期
			for _, v := range vChartPermissionn.CheckList {
				item := new(models.CygxXzsChooseCategoryZhouqi)
				item.CategoryId = v
				item.UserId = user.UserId
				item.Email = user.Email
				item.Mobile = user.Mobile
				item.RealName = user.RealName
				item.CompanyId = user.CompanyId
				item.CompanyName = user.CompanyName
				item.FollowType = followType
				item.CreateTime = time.Now()
				item.ModifyTime = time.Now()
				itemsZhouqi = append(itemsZhouqi, item)
				zhouqiIds = append(zhouqiIds, v)
			}
		} else {
			//正常带有产业的行业
			for _, v := range vChartPermissionn.CheckList {
				item := new(models.CygxIndustryFllow)
				item.IndustrialManagementId = v
				item.UserId = user.UserId
				item.Mobile = user.Mobile
				item.Email = user.Email
				item.CompanyId = user.CompanyId
				item.CompanyName = user.CompanyName
				item.RealName = user.RealName
				item.Type = 1
				item.FollowType = followType
				if followType == 3 {
					item.FollowTypeOrder = -1
				} else {
					item.FollowTypeOrder = followType
				}
				item.CreateTime = time.Now()
				item.ModifyTime = time.Now()
				item.Source = 2
				itemsFllow = append(itemsFllow, item)
				industryIds = append(industryIds, v)
			}
		}
	}

	err = models.AddCygxXzsChooseSendFollow(user.Mobile, itemsFllow, itemsCategory, itemsZhouqi, industryIds, celueIds, zhouqiIds)
	if err != nil {
		br.Msg = "保存失败！"
		br.ErrMsg = "保存失败！,Err:" + err.Error()
		return
	}
	br.Ret = 200
	br.Success = true
	br.Msg = "保存成功"
}

// @Title 推送更新内容
// @Description 推送更新内容接口
// @Param	request	body models.SubmitChooseSendResp true "type json string"
// @Success 200 {object}  models.CygxXzsChooseSendResp
// @router /choose/submit_push [post]
func (this *ReportController) ChooseSubmitPush() {
	br := new(models.BaseResponse).Init()
	defer func() {
		this.Data["json"] = br
		this.ServeJSON()
	}()
	user := this.User
	if user == nil {
		br.Msg = "请登录"
		br.ErrMsg = "请登录，用户信息为空"
		br.Ret = 408
		return
	}
	if user.Mobile == "" {
		br.Msg = "提交失败！"
		br.ErrMsg = "提交失败，手机号不能为空"
		return
	}
	var req models.SubmitChooseSendResp
	err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
	if err != nil {
		br.Msg = "参数解析异常！"
		br.ErrMsg = "参数解析失败，Err:" + err.Error()
		return
	}

	isPush := req.IsPush // 是否接受推送
	//isRefuse := req.IsRefuse
	isSubjective := req.IsSubjective
	isObjective := req.IsObjective

	req.IsRefuse = 1 - isPush // 是否拒绝推送，与是否接收推送进行取反（兼容老的数据库字段）
	isRefuse := req.IsRefuse
	if isRefuse == 0 && isSubjective == 0 && isObjective == 0 {
		br.Msg = "请至少选择一项主客观内容"
		return
	}

	//如果为1 则不做任何推送 ，主观客观默认改成0
	if isRefuse == 1 {
		isSubjective = 0
		isObjective = 0
	}
	mobile := user.Mobile
	item := new(models.CygxXzsChooseSend)
	item.UserId = user.UserId
	item.Mobile = user.Mobile
	item.Email = user.Email
	item.CompanyId = user.CompanyId
	item.CompanyName = user.CompanyName
	item.RealName = user.RealName
	item.CreateTime = time.Now()
	item.ModifyTime = time.Now()
	item.IsRefuse = req.IsRefuse
	item.IsSubjective = isSubjective
	item.IsObjective = isObjective
	count, err := models.GetXzsChooseSendCountByMobile(mobile)
	if err != nil {
		br.Msg = "获取信息失败"
		br.ErrMsg = "GetXzsChooseSendCountByMobile,Err:" + err.Error()
		return
	}

	//如果有记录就新增，没有记录就修改
	if count == 0 {
		err = models.AddCygxXzsChooseSendPush(item)
	} else {
		err = models.UpdateCygxXzsChooseSendPush(item)
	}
	if err != nil {
		br.Msg = "保存失败！"
		br.ErrMsg = "保存失败！,Err:" + err.Error()
		return
	}
	br.Ret = 200
	br.Success = true
	br.Msg = "保存成功"
}
