package controllers

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

// 研选
type ResearchController struct {
	BaseAuthController
}

// @Title 近期更新主题列表
// @Description 近期更新主题列表接口
// @Param   ChartPermissionId   query   int  true       "分类ID"
// @Success 200 {object} models.IndustrialManagementNewList
// @router /theme/newList [get]
func (this *ResearchController) NewList() {
	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
	}
	articleTypeIds, err := services.GetYanXuanArticleTypeIds()
	if err != nil {
		br.Msg = "获取信息失败"
		br.ErrMsg = "GetYanXuanArticleTypeIds,Err:" + err.Error()
		return
	}
	if articleTypeIds == "" {
		br.Msg = "获取信息失败"
		br.ErrMsg = "研选分类ID不能为空"
		return
	}
	var condition string
	var conditionOrder string
	condition = ` AND a.article_type_id IN (` + articleTypeIds + `)  `
	list, err := models.GetIndustrialManagementNewList(condition)
	if err != nil {
		br.Msg = "获取信息失败"
		br.ErrMsg = "获取品种信息失败,Err:" + err.Error()
		return
	}
	mapHot := make(map[string]int)

	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 _, v := range listHot {
		mapHot[v.IndustryName] = v.IndustrialManagementId
	}
	for k, v := range list {
		if mapHot[v.IndustryName] > 0 {
			list[k].IsHot = true
		}
	}
	resp := new(models.IndustrialManagementNewList)
	resp.List = list
	br.Ret = 200
	br.Success = true
	br.Msg = "获取成功"
	br.Data = resp
}

// @Title 用户收藏列表
// @Description 用户收藏列表接口
// @Param   ChartPermissionId   query   int  true       "分类ID"
// @Success 200 {object} models.ArticleCollectionLIstResp
// @router /collectionList [get]
func (this *ResearchController) CollectionList() {
	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
	}

	pageSize, _ := this.GetInt("PageSize", 15)
	resp := new(models.ArticleCollectionLIstResp)
	if user.CompanyId == utils.GAO_YI_ZI_CHAN_COMPANY_ID {
		resp.List = make([]*models.ArticleCollectionResp, 0)
		br.Ret = 200
		br.Success = true
		br.Msg = "获取成功"
		br.Data = resp
		return
	}
	var condition string
	var pars []interface{}
	articleTypeIds, err := services.GetYanXuanArticleTypeIds()
	if err != nil {
		br.Msg = "获取信息失败"
		br.ErrMsg = "GetYanXuanArticleTypeIds,Err:" + err.Error()
		return
	}
	if articleTypeIds != "" {
		condition = ` AND a.article_type_id IN (` + articleTypeIds + `)  `
	} else {
		br.Msg = "获取信息失败"
		br.ErrMsg = "研选分类ID不能为空"
		return
	}
	// 根据关注时间一个月前至昨日的增量数据排序
	nowTime := time.Now().Local()
	startTime := nowTime.AddDate(0, -1, 0)
	endTime := nowTime.AddDate(0, 0, -1)
	condition += ` AND ac.create_time BETWEEN ? AND ? `
	pars = append(pars, startTime, endTime)
	list, err := models.GetReportCollectionBillboardListYx(pageSize, pars, condition)
	if err != nil {
		br.Msg = "获取失败"
		br.ErrMsg = "获取报告阅读增量排行榜失败, Err:" + err.Error()
		return
	}
	for k, v := range list {
		if v.MyCollectNum > 0 {
			list[k].IsCollect = true
		}
	}
	var articleIds []int
	for k, v := range list {
		if v.MyCollectNum > 0 {
			list[k].IsCollect = true
		}
		articleIds = append(articleIds, v.ArticleId)
	}
	articleMapPv := services.GetArticleHistoryByArticleId(articleIds) //文章Pv
	//处理关联的产业
	industrialMap, err := services.GetArticleIndustrialByArticleId(articleIds)
	if err != nil {
		br.Msg = "获取信息失败"
		br.ErrMsg = "获取关联的产业信息失败,GetArticleIndustrialByArticleId Err:" + err.Error()
		return
	}
	for k, v := range list {
		if len(industrialMap[v.ArticleId]) > 0 {
			list[k].List = industrialMap[v.ArticleId]
		} else {
			list[k].List = make([]*models.IndustrialManagementResp, 0)
		}
		list[k].PublishDate = utils.StrTimeToTime(v.PublishDate).Format(utils.FormatDate) //时间字符串格式转时间格式
		list[k].Pv = articleMapPv[v.ArticleId]
	}

	resp.List = list
	br.Ret = 200
	br.Success = true
	br.Msg = "获取成功"
	br.Data = resp
}

// @Title 主题热度/近期更新更多，列表
// @Description 主题热度/近期更新更多,列表接口
// @Param   ChartPermissionId   query   int  true       "分类ID"
// @Param   ThemeType   query   int  true       "主题类型，1主题热度、2近期更新 默认1"
// @Param   PageSize   query   int  true       "每页数据条数"
// @Param   CurrentIndex   query   int  true       "当前页页码，从1开始"
// @Success 200 {object} models.IndustrialManagementHotListResp
// @router /hotList [get]
func (this *ResearchController) HotList() {
	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
	}
	themeType, _ := this.GetInt("ThemeType")
	pageSize, _ := this.GetInt("PageSize")
	currentIndex, _ := this.GetInt("CurrentIndex")
	var startSize int
	if pageSize <= 0 {
		pageSize = utils.PageSize15
	}
	if currentIndex <= 0 {
		currentIndex = 1
	}
	startSize = utils.StartIndex(currentIndex, pageSize)
	resp := new(models.IndustrialManagementHotListResp)
	if user.CompanyId == utils.GAO_YI_ZI_CHAN_COMPANY_ID {
		resp.List = make([]*models.IndustrialManagementHotResp, 0)
		resp.Paging = paging.GetPaging(currentIndex, pageSize, 0)
		br.Ret = 200
		br.Success = true
		br.Msg = "获取成功"
		br.Data = resp
		return
	}
	var condition string
	var conditionOrder 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.article_type_id IN (` + articleTypeIds + `)  `
	if themeType == 2 {
		conditionOrder = `ORDER BY publish_date DESC  `
	} else {
		conditionOrder = `ORDER BY sum_num DESC   `
	}

	total, err := models.GetThemeHeatListCount(condition)
	if err != nil {
		br.Msg = "获取失败"
		br.ErrMsg = "获取失败，Err:" + err.Error()
		return
	}
	list, err := models.GetThemeHeatList(user.UserId, condition, conditionOrder, startSize, pageSize)
	if err != nil {
		br.Msg = "获取信息失败"
		br.ErrMsg = "获取品种信息失败,Err:" + err.Error()
		return
	}
	listSubjcet, err := models.GetThemeHeatSubjectList(condition)
	if err != nil {
		br.Msg = "获取信息失败"
		br.ErrMsg = "获取标的信息失败,Err:" + err.Error()
		return
	}
	mapHot := make(map[int]bool)
	mapNew, err := services.GetYanXuanIndustrialManagementIdNewMap(articleTypeIds)
	if err != nil {
		br.Msg = "获取信息失败"
		br.ErrMsg = "GetYanXuanIndustrialManagementIdNewMap,Err:" + err.Error()
		return
	}
	//if themeType == 2 {
	mapHot, err = services.GetYanXuanIndustrialManagementIdHotMap(articleTypeIds)
	if err != nil {
		br.Msg = "获取信息失败"
		br.ErrMsg = "GetYanXuanIndustrialManagementIdNewMap,Err:" + err.Error()
		return
	}
	followTypeMap := services.GetCygxIndustryFllowListTypeMapByMobile(user.Mobile) // 关注的对应状态
	//}
	for k, v := range list {
		list[k].IsNew = mapNew[v.IndustrialManagementId]
		list[k].IsHot = mapHot[v.IndustrialManagementId]
		list[k].FollowType = followTypeMap[v.IndustrialManagementId]
		if v.FllowNum > 0 {
			list[k].IsFollw = true
		}
		for _, v2 := range listSubjcet {
			if v2.IndustrialManagementId == v.IndustrialManagementId {
				list[k].IndustrialSubjectList = append(list[k].IndustrialSubjectList, v2)
			}
		}
	}
	page := paging.GetPaging(currentIndex, pageSize, total)

	resp.Paging = page
	resp.List = list
	br.Ret = 200
	br.Success = true
	br.Msg = "获取成功"
	br.Data = resp
}

// @Title KOL榜列表
// @Description KOL榜列表接口
// @Param   ChartPermissionId   query   int  true       "分类ID"
// @Param   PageSize   query   int  true       "每页数据条数"
// @Param   CurrentIndex   query   int  true       "当前页页码，从1开始"
// @Param   ThemeType   query   int  true       "主题类型，1关注度、2更新时间 "
// @Success 200 {object} models.DepartmentListResp
// @router /kolList [get]
func (this *ResearchController) KolList() {
	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
	}
	themeType, _ := this.GetInt("ThemeType")
	pageSize, _ := this.GetInt("PageSize")
	currentIndex, _ := this.GetInt("CurrentIndex")
	var startSize int
	if pageSize <= 0 {
		pageSize = utils.PageSize15
	}
	if currentIndex <= 0 {
		currentIndex = 1
	}
	startSize = utils.StartIndex(currentIndex, pageSize)

	resp := new(models.DepartmentListResp)
	if user.CompanyId == utils.GAO_YI_ZI_CHAN_COMPANY_ID {
		resp.List = make([]*models.DepartmentResp, 0)
		resp.Paging = paging.GetPaging(currentIndex, pageSize, 0)
		br.Ret = 200
		br.Success = true
		br.Msg = "获取成功"
		br.Data = resp
		return
	}

	articleTypeIds, err := services.GetYanXuanArticleTypeIds()
	if err != nil {
		br.Msg = "获取信息失败"
		br.ErrMsg = "GetYanXuanArticleTypeIds,Err:" + err.Error()
		return
	}
	if articleTypeIds == "" {
		br.Msg = "获取信息失败"
		br.ErrMsg = "研选分类ID不能为空"
		return
	}
	var condition string
	var conditionOrder string
	condition = ` AND a.article_type_id IN (` + articleTypeIds + `)  `

	total, err := models.GetDepartmentlistCount(condition)
	if err != nil {
		br.Msg = "获取失败"
		br.ErrMsg = "获取失败，Err:" + err.Error()
		return
	}

	if themeType == 2 {
		conditionOrder = `ORDER BY publish_date DESC  `
	} else {
		conditionOrder = `ORDER BY sum_num DESC `
	}
	mapHot := make(map[int]bool)
	//if themeType == 2 {
	conditionHot := `ORDER BY sum_num DESC `
	listhot, err := models.GetDepartmentList(condition, conditionHot, user.UserId, 0, 3)
	if err != nil {
		br.Msg = "获取信息失败"
		br.ErrMsg = "获取信息失败,Err:" + err.Error()
		return
	}
	for _, v := range listhot {
		mapHot[v.DepartmentId] = true
	}
	//}

	list, err := models.GetDepartmentList(condition, conditionOrder, user.UserId, startSize, pageSize)
	if err != nil {
		br.Msg = "获取信息失败"
		br.ErrMsg = "获取信息失败,Err:" + err.Error()
		return
	}
	listIndustrial, err := models.GetIndustrialDepartmentList()
	if err != nil {
		br.Msg = "获取信息失败"
		br.ErrMsg = "获取品种信息失败,Err:" + err.Error()
		return
	}
	departmentMap := make(map[string]string)
	for k, v := range list {
		if v.FllowNum > 0 {
			list[k].IsFollw = true
		}
		for _, v2 := range listIndustrial {
			if v2.DepartmentId == v.DepartmentId {
				if departmentMap["D"+strconv.Itoa(v2.DepartmentId)+"In"+strconv.Itoa(v2.IndustrialManagementId)] == "" && len(list[k].List) < 4 {
					list[k].List = append(list[k].List, v2)
					departmentMap["D"+strconv.Itoa(v2.DepartmentId)+"In"+strconv.Itoa(v2.IndustrialManagementId)] = v.NickName
				}
			}
		}
		//if themeType == 2 {
		v.IsHot = mapHot[v.DepartmentId]
		//}
	}

	page := paging.GetPaging(currentIndex, pageSize, total)
	resp.Paging = page
	resp.List = list
	br.Ret = 200
	br.Success = true
	br.Msg = "获取成功"
	br.Data = resp
}

// @Title 主题详情
// @Description 主题详情接口
// @Param   IndustrialManagementId   query   int  true       "分类ID"
// @Param   Source   query   int  true       "来源 1：研选，2：报告 默认1"
// @Success 200 {object} models.GetThemeDetailResp
// @router /theme/detail [get]
func (this *ResearchController) ThemeDetail() {
	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
	}
	industrialManagementId, _ := this.GetInt("IndustrialManagementId")
	if industrialManagementId < 1 {
		br.Msg = "请输入产业ID"
		return
	}
	source, _ := this.GetInt("Source")
	if source != 2 {
		source = 1
	}

	articleTypeIds, err := services.GetYanXuanArticleTypeIds()
	if err != nil {
		br.Msg = "获取信息失败"
		br.ErrMsg = "GetYanXuanArticleTypeIds,Err:" + err.Error()
		return
	}
	if articleTypeIds == "" {
		br.Msg = "获取信息失败"
		br.ErrMsg = "研选分类ID不能为空"
		return
	}
	var condition string
	if source == 1 {
		condition = ` AND a.article_type_id IN (` + articleTypeIds + `)  `
	} else {
		condition = ` AND a.article_type_id  NOT IN (` + articleTypeIds + `)  `
	}
	resp := new(models.GetThemeDetailResp)
	list, err := models.GetThemeDetail(user.UserId, industrialManagementId, condition)
	if err != nil {
		br.Msg = "获取信息失败"
		br.ErrMsg = "获取品种信息失败,Err:" + err.Error()
		return
	}
	var articleIds []int
	for _, v := range list {
		resp.IndustryName = v.IndustryName
		resp.IndustrialManagementId = v.IndustrialManagementId
		if v.FllowNum > 0 {
			resp.IsFollw = true
		}
		articleIds = append(articleIds, v.ArticleId)
	}
	mapArticleSubjectName, subjectMap, err := services.GetArticleSubjectName(articleIds)
	if err != nil {
		br.Msg = "获取信息失败"
		br.ErrMsg = "获取品种信息失败,Err:" + err.Error()
		return
	}
	followTypeMap := services.GetCygxIndustryFllowListTypeMapByMobile(user.Mobile) // 关注的对应状态
	for _, v2 := range list {
		item := new(models.GetThemeAericleListResp)
		item.ArticleId = v2.ArticleId
		item.Title = v2.Title
		item.PublishDate = v2.PublishDate
		item.SubjectName = v2.SubjectName
		item.IndustrialSubjectId = v2.IndustrialSubjectId
		item.DepartmentId = v2.DepartmentId
		item.NickName = v2.NickName
		item.Pv = v2.Pv
		item.CollectNum = v2.CollectNum
		item.MyCollectNum = v2.MyCollectNum
		if v2.MyCollectNum > 0 {
			item.IsCollect = true
		}
		item.SubjectName = mapArticleSubjectName[v2.ArticleId]
		resp.List = append(resp.List, item)
	}

	listSub, err := models.GetcygxIndustrialSubject(industrialManagementId)
	if err != nil {
		br.Msg = "获取信息失败"
		br.ErrMsg = "获取品种信息失败,Err:" + err.Error()
		return
	}
	for _, v := range listSub {
		itemSubJect := new(models.IndustrialSubject)
		itemSubJect.SubjectName = v.SubjectName
		itemSubJect.IndustrialSubjectId = v.IndustrialSubjectId
		if subjectMap[v.IndustrialSubjectId] != "" {
			resp.ListSubject = append(resp.ListSubject, itemSubJect)
		}
	}
	resp.FollowType = followTypeMap[industrialManagementId]
	br.Ret = 200
	br.Success = true
	br.Msg = "获取成功"
	br.Data = resp
}

// @Title 研选作者详情
// @Description 研选作者详情接口
// @Param   DepartmentId   query   int  true       "作者ID"
// @Success 200 {object} models.DepartmentDetailResp
// @router /departmentId/detail [get]
func (this *ResearchController) DepartmentIdDetail() {
	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
	}
	departmentId, _ := this.GetInt("DepartmentId")
	if departmentId < 1 {
		br.Msg = "请输入作者ID"
		return
	}
	articleTypeIds, err := services.GetYanXuanArticleTypeIds()
	if err != nil {
		br.Msg = "获取信息失败"
		br.ErrMsg = "GetYanXuanArticleTypeIds,Err:" + err.Error()
		return
	}
	if articleTypeIds == "" {
		br.Msg = "获取信息失败"
		br.ErrMsg = "研选分类ID不能为空"
		return
	}
	var condition string
	condition = ` AND a.article_type_id IN (` + articleTypeIds + `)  `
	resp := new(models.DepartmentDetailResp)
	detail, err := models.GetDepartmentDetail(user.UserId, departmentId, condition)
	if err != nil {
		br.Msg = "获取信息失败"
		br.ErrMsg = "获取作者信息失败,Err:" + err.Error()
		return
	}
	resp.DepartmentId = detail.DepartmentId
	resp.NickName = detail.NickName
	resp.ImgUrl = detail.ImgUrl
	resp.FllowNum = detail.FllowNum
	resp.ArticleNum = detail.ArticleNum
	resp.CollectNum = detail.CollectNum
	if detail.MyFllowNum > 0 {
		resp.IsFllow = true
	}
	condition += `  AND a.department_id = ` + strconv.Itoa(departmentId) + `  GROUP BY a.article_id  ORDER BY a.publish_date DESC  `
	list, err := models.GetArticleCollectionList(condition, user.UserId)
	if err != nil {
		br.Msg = "获取信息失败"
		br.ErrMsg = "获取文章列表失败,Err:" + err.Error()
		return
	}
	var articleIds []int
	for k, v := range list {
		if v.MyCollectNum > 0 {
			list[k].IsCollect = true
		}
		articleIds = append(articleIds, v.ArticleId)
	}
	//处理关联的产业
	industrialMap, err := services.GetArticleIndustrialByArticleId(articleIds)
	if err != nil {
		br.Msg = "获取信息失败"
		br.ErrMsg = "获取关联的产业信息失败,GetArticleIndustrialByArticleId Err:" + err.Error()
		return
	}
	for k, v := range list {
		if len(industrialMap[v.ArticleId]) > 0 {
			list[k].List = industrialMap[v.ArticleId]
		} else {
			list[k].List = make([]*models.IndustrialManagementResp, 0)
		}
	}

	condition = ` AND a.department_id =  ` + strconv.Itoa(departmentId)
	listIndustrial, err := models.GetIndustrialManagementNewList(condition)
	if err != nil {
		br.Msg = "获取信息失败"
		br.ErrMsg = "获取品种信息失败,Err:" + err.Error()
		return
	}
	resp.List = list
	resp.ListIndustrial = listIndustrial
	br.Ret = 200
	br.Success = true
	br.Msg = "获取成功"
	br.Data = resp
}

// @Title 文章相关热门收藏
// @Description 文章相关热门收藏接口
// @Param   ArticleId   query   int  true       "文章ID"
// @Success 200 {object} models.ArticleCollectionLIstResp
// @router /article/hotList [get]
func (this *ResearchController) ArticleHotList() {
	br := new(models.BaseResponse).Init()
	defer func() {
		this.Data["json"] = br
		this.ServeJSON()
	}()
	user := this.User
	if user == nil {
		br.Msg = "请重新登录"
		br.Ret = 408
		return
	}
	articleId, _ := this.GetInt("ArticleId")
	if articleId < 1 {
		br.Msg = "请输入分类ID"
		return
	}
	var condition string
	condition = ` AND a.article_id IN (SELECT article_id FROM cygx_industrial_article_group_management WHERE industrial_management_id IN (SELECT industrial_management_id  FROM cygx_industrial_article_group_management  WHERE  article_id = ` + strconv.Itoa(articleId) + ` ) ) AND a.article_id != ` + strconv.Itoa(articleId) + ` AND a.category_name LIKE '%研选%' AND publish_status = 1 GROUP BY a.article_id ORDER BY collect_num DESC, publish_date DESC LIMIT 3 `
	list, err := models.GetArticleCollectionList(condition, user.UserId)
	if err != nil {
		br.Msg = "获取信息失败"
		br.ErrMsg = "获取品种信息失败,Err:" + err.Error()
		return
	}
	for k, v := range list {
		if v.MyCollectNum > 0 {
			list[k].IsCollect = true
		}
	}
	resp := new(models.ArticleCollectionLIstResp)
	resp.List = list
	br.Ret = 200
	br.Success = true
	br.Msg = "获取成功"
	br.Data = resp
}

// @Title 热搜关键词
// @Description 热搜关键词接口
// @Success 200 {object} models.UserSearchKeyWordListResp
// @router /hotKeyWord [get]
func (this *ResearchController) HotKeyWord() {
	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
	}
	//本来应该放在config控制器下，与未上线的代码冲突，所以放在这里
	list, err := models.GetUserSearchKeyWord()
	if err != nil {
		br.Msg = "获取信息失败"
		br.ErrMsg = "获取品种信息失败,Err:" + err.Error()
		return
	}
	resp := new(models.UserSearchKeyWordListResp)
	resp.List = list
	br.Ret = 200
	br.Success = true
	br.Msg = "获取成功"
	br.Data = resp
}

// @Title 研选文章类型列表
// @Description 研选文章类型列表接口
// @Success 200 {object} models.CygxArticleTypeListResp
// @router /article/typeList [get]
func (this *ResearchController) ArticleType() {
	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
	}
	key := utils.YAN_XUAN_TAB_KEY
	conf, e := models.GetConfigByCode(key)
	if e != nil {
		br.Msg = "获取失败"
		br.ErrMsg = "获取首页头部导航失败, Err: " + e.Error()
		return
	}
	if conf.ConfigValue == "" {
		br.Msg = "获取失败"
		br.ErrMsg = "首页头部导航配置值有误"
		return
	}
	list := new(models.CygxArticleTypeListResp)
	if e = json.Unmarshal([]byte(conf.ConfigValue), &list); e != nil {
		br.Msg = "获取失败"
		br.ErrMsg = "首页头部导航配置值解析失败, Err: " + e.Error()
		return
	}
	resp := new(models.CygxArticleTypeListResp)
	resp = 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   ArticleTypeIds   query   array  true       "文章类型ID多个用  , 隔开"
// @Success 200 {object} models.IndustrialManagementNewList
// @router /article/newList [get]
func (this *ResearchController) ArticleNewList() {
	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
	}
	pageSize, _ := this.GetInt("PageSize")
	currentIndex, _ := this.GetInt("CurrentIndex")
	articleTypeIds := this.GetString("ArticleTypeIds")
	var startSize int
	if pageSize <= 0 {
		pageSize = utils.PageSize20
	}
	if currentIndex <= 0 {
		currentIndex = 1
	}
	startSize = paging.StartIndex(currentIndex, pageSize)
	resp := new(models.ArticleResearchListResp)
	if user.CompanyId == utils.GAO_YI_ZI_CHAN_COMPANY_ID {
		resp.List = make([]*models.ArticleResearchResp, 0)
		resp.Paging = paging.GetPaging(currentIndex, pageSize, 0)
		br.Ret = 200
		br.Success = true
		br.Msg = "获取成功"
		br.Data = resp
		return
	}

	var condition string
	var conditiontype string
	var pars []interface{}
	condition = `    AND publish_status = 1  `
	if articleTypeIds == "" || strings.Contains(articleTypeIds, "999") {
		conditiontype = " AND is_show_yanx  = 1 "
	} else {
		conditiontype = ` AND   group_id IN  (` + articleTypeIds + `) `
	}
	listType, err := models.GetCygxArticleTypeListCondition(conditiontype)
	if err != nil {
		br.Msg = "获取信息失败"
		br.ErrMsg = "获取品种信息失败,Err:" + err.Error()
		return
	}
	needYanxuanSpecial := true
	if articleTypeIds != "" && !strings.Contains(articleTypeIds, "999") {
		needYanxuanSpecial = false
	}

	//只勾选了研选专栏时去掉文章的统计
	if articleTypeIds == "999" {
		condition += ` AND 1<0 `
	}
	articleTypeIds = ""
	for _, v := range listType {
		articleTypeIds += strconv.Itoa(v.ArticleTypeId) + ","
	}
	articleTypeIds = strings.TrimRight(articleTypeIds, ",")
	condition += `   AND a.article_type_id IN (` + articleTypeIds + `) `

	total, err := models.GetArticleResearchCount(condition, pars, needYanxuanSpecial)
	if err != nil {
		br.Msg = "获取信息失败"
		br.ErrMsg = "GetArticleResearchCount,Err:" + err.Error()
		return
	}
	list, err := models.GetArticleResearchList(condition, pars, startSize, pageSize, user.UserId, needYanxuanSpecial)
	if err != nil {
		br.Msg = "获取信息失败"
		br.ErrMsg = "获取品种信息失败,Err:" + err.Error()
		return
	}
	var articleIds []int
	//var articleIdsArr []int
	var articleIdsSpecialArr []int // 研选专栏ID
	for k, v := range list {
		if v.MyCollectNum > 0 {
			list[k].IsCollect = true
		}
		if v.IsSpecial == 1 {
			articleIdsSpecialArr = append(articleIdsSpecialArr, v.ArticleId)
		} else {
			articleIds = append(articleIds, v.ArticleId)
		}
	}

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

	yanxuanSpecialPv := services.GetYanxuanSpecialRecordByYanxuanSpecialId(articleIdsSpecialArr)

	//处理关联的产业
	industrialMap, err := services.GetArticleIndustrialByArticleId(articleIds)
	if err != nil {
		br.Msg = "获取信息失败"
		br.ErrMsg = "获取关联的产业信息失败,GetArticleIndustrialByArticleId Err:" + err.Error()
		return
	}
	for k, v := range list {
		if v.IsSpecial == 1 {
			v.IsCollect = articleCollectYanxuanSpecialMap[v.ArticleId]
			v.Pv = yanxuanSpecialPv[v.ArticleId]
		} else {
			v.Pv = articleMapPv[v.ArticleId]
			v.CollectNum = articleCollectNumMap[v.ArticleId]
			v.IsCollect = articleCollectMap[v.ArticleId]
		}
		if len(industrialMap[v.ArticleId]) > 0 {
			list[k].List = industrialMap[v.ArticleId]
		} else {
			list[k].List = make([]*models.IndustrialManagementResp, 0)
		}
	}
	//处理对应的文章类型标签按钮
	nameMap, styleMap, err := services.GetArticleTypeMap()
	if err != nil {
		br.Msg = "获取信息失败"
		br.ErrMsg = "GetArticleTypeMap Err:" + err.Error()
		return
	}
	page := paging.GetPaging(currentIndex, pageSize, total)

	for _, v := range list {
		item := models.ArticleResearchResp{
			ArticleId:       v.ArticleId,
			Title:           v.Title,
			PublishDate:     v.PublishTime.Format(utils.FormatDate),
			DepartmentId:    v.DepartmentId,
			NickName:        v.NickName,
			IsCollect:       v.IsCollect,
			Pv:              v.Pv,
			CollectNum:      v.CollectNum,
			IsSpecial:       v.IsSpecial,
			ArticleTypeName: nameMap[v.ArticleTypeId],
			ButtonStyle:     styleMap[v.ArticleTypeId],
			SpecialTags:     v.SpecialTags,
			UserId:          v.UserId,
			List:            v.List,
			TopTime:         v.TopTime,
		}
		if v.ArticleTypeId == -1 {
			item.ArticleTypeName = utils.CYGX_YANXUAN_SPECIAL
		}
		if v.SpecialType == 1 {
			item.Title = "【笔记】" + item.Title
		} else if v.SpecialType == 2 {
			item.Title = "【观点】" + item.Title
		}
		if v.CompanyTags != "" {
			v.SpecialTags += v.CompanyTags
		}
		if v.IndustryTags != "" {
			if v.SpecialTags != "" {
				v.SpecialTags += ","
			}
			v.SpecialTags += v.IndustryTags
		}
		item.SpecialTags = v.SpecialTags
		resp.List = append(resp.List, &item)
	}
	resp.Paging = page
	br.Ret = 200
	br.Success = true
	br.Msg = "获取成功"
	br.Data = resp
}
