package controllers import ( "encoding/json" "github.com/rdlucklib/rdluck_tools/paging" "hongze/hongze_mfyx/models" "hongze/hongze_mfyx/services" "hongze/hongze_mfyx/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) 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) } //处理关联的产业 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) //时间字符串格式转时间格式 } resp := new(models.ArticleCollectionLIstResp) 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) 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 } //} for k, v := range list { list[k].IsNew = mapNew[v.IndustrialManagementId] list[k].IsHot = mapHot[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 := new(models.IndustrialManagementHotListResp) 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) 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] //} } resp := new(models.DepartmentListResp) 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 } 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) } } 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) 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 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) } } //处理对应的文章类型标签按钮 nameMap, styleMap, err := services.GetArticleTypeMap() if err != nil { br.Msg = "获取信息失败" br.ErrMsg = "GetArticleTypeMap Err:" + err.Error() return } page := paging.GetPaging(currentIndex, pageSize, total) resp := new(models.ArticleResearchListResp) 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 }