package controllers import ( "github.com/rdlucklib/rdluck_tools/paging" "hongze/hongze_clpt/models" "hongze/hongze_clpt/services" "hongze/hongze_clpt/utils" "strings" ) type SearchController struct { BaseAuthController } type BaseSearchController struct { BaseCommonController } type MobileSearchController struct { BaseAuthMobileController } // @Title 搜索接口 // @Description 搜索接口 // @Param PageSize query int false "每页数据条数" // @Param CurrentIndex query int false "当前页页码,从1开始" // @Param KeyWord query string true "搜索关键词" // @Param OrderColumn query string false "排序字段 ,Comprehensive综合 ,Matching匹配度 ,PublishDate 发布时间 " // @Param ListType query int false "列表类型,1最新/全部,2 纪要 ,3图表 默认1" // @Success 200 {object} models.SearchResp // @router /list [get] func (this *MobileSearchController) ListHomeArtAndChart() { br := new(models.BaseResponse).Init() defer func() { this.Data["json"] = br this.ServeJSON() }() pageSize, _ := this.GetInt("PageSize") currentIndex, _ := this.GetInt("CurrentIndex") listType, _ := this.GetInt("ListType") var startSize int if pageSize <= 0 { pageSize = utils.PageSize20 } if currentIndex <= 0 { currentIndex = 1 } if listType == 0 { listType = 1 } startSize = paging.StartIndex(currentIndex, pageSize) keyWord := this.GetString("KeyWord") orderColumn := this.GetString("OrderColumn") if keyWord == "" { br.Msg = "请输入搜索词" br.ErrMsg = "请输入搜索词" return } user := this.User if user == nil { br.Msg = "请重新登录" br.Ret = 408 return } //研选的五张图片 detailResearch, errConfig := models.GetConfigByCode("category_research_img_url") if errConfig != nil { br.Msg = "获取数据失败" br.ErrMsg = "获取数据研选分类图片失败,Err:" + errConfig.Error() return } researchList := strings.Split(detailResearch.ConfigValue, "{|}") //对应分类的所图片 detailCategoryUrl, errConfig := models.GetConfigByCode("category_map_img_url") if errConfig != nil { br.Msg = "获取数据失败" br.ErrMsg = "行业配置信息失败,Err:" + errConfig.Error() return } categoryUrlList := strings.Split(detailCategoryUrl.ConfigValue, "{|}") mapCategoryUrl := make(map[string]string) var categoryId string var imgUrlChart string for _, v := range categoryUrlList { vslice := strings.Split(v, "_") categoryId = vslice[0] imgUrlChart = vslice[len(vslice)-1] mapCategoryUrl[categoryId] = imgUrlChart } if orderColumn == "" { orderColumn = "Matching" } //indexName := utils.IndexName //pageSize = 20 var chartTotal int resp := new(models.SearchResp) //page := paging.GetPaging(currentIndex, pageSize, total) var chartList []*models.HomeChartListResp var err error var condition string var pars []interface{} if listType == 1 || listType == 3 { //if listType == 1 { // pageSize = 100 //} if currentIndex <= 2 { condition = ` AND title LIKE '%` + keyWord + `%'` chartList, err = models.GetChartList(condition, pars, startSize, pageSize) if err != nil { br.Msg = "获取信息失败" br.ErrMsg = "获取用户信息失败,Err:" + err.Error() return } chartTotal, err = models.GetChartCount(condition, pars) if err != nil { br.Msg = "获取信息失败" br.Msg = "获取帖子总数失败,Err:" + err.Error() return } } } for k, v := range chartList { chartList[k].IsNeedJump = true chartList[k].Source = 2 if v.PtagName != "" { chartList[k].CtagNamePc = v.PtagName } if v.CtagName != "" { chartList[k].CtagNamePc += "," + v.CtagName } if v.PtagNameTwo != "" { chartList[k].CtagNamePc += "," + v.PtagNameTwo } if v.CtagNameTwo != "" { chartList[k].CtagNamePc += "," + v.CtagNameTwo } if v.PtagName != "" { labelItem := new(models.LabelList) labelItem.PtagName = v.PtagName labelItem.CtagName = v.CtagName chartList[k].LabelList = append(chartList[k].LabelList, labelItem) } if v.PtagNameTwo != "" { labelItemTwo := new(models.LabelList) labelItemTwo.PtagName = v.PtagNameTwo labelItemTwo.CtagName = v.CtagNameTwo chartList[k].LabelList = append(chartList[k].LabelList, labelItemTwo) } if len(chartList[k].LabelList) == 0 { chartList[k].LabelList = make([]*models.LabelList, 0) } } if len(chartList) == 0 { chartList = make([]*models.HomeChartListResp, 0) } resp.ChartList = chartList var result []*models.SearchItem var total int64 if listType == 1 || listType == 2 { //if orderColumn == "PublishDate" { // tmpResult, tmpTotal, tmpErr := services.EsMultiMatchFunctionScoreQueryTimeSort(indexName, keyWord, startSize, 100, user.UserId) // result = tmpResult // total = tmpTotal // err = tmpErr //} else { // tmpResult, tmpTotal, tmpErr := services.EsMultiMatchFunctionScoreQuerySort(indexName, keyWord, startSize, pageSize, user.UserId, orderColumn) // result = tmpResult // total = tmpTotal // err = tmpErr //} tmpResult, tmpTotal, tmpErr := services.EsArticleSearch(keyWord, startSize, pageSize, orderColumn) result = tmpResult total = tmpTotal err = tmpErr if err != nil { br.Msg = "检索失败" br.ErrMsg = "检索失败,Err:" + err.Error() return } if len(result) == 0 { result = make([]*models.SearchItem, 0) } for k, v := range result { //如果是研选系列的任意取五张图片的中的一张 if v.CategoryId == "0" { knum := v.ArticleId % 5 result[k].ImgUrlPc = researchList[knum] } else { result[k].ImgUrlPc = mapCategoryUrl[v.CategoryId] } result[k].Source = 1 } } //ListType query int true "列表类型,1最新/全部,2 纪要 ,3图表 默认1" //记录用户搜索关键词 var source int if listType == 1 { source = 3 } else if listType == 2 { source = 1 } else { source = 2 } //如果是有效用户就记录搜索历史 if user.UserId > 0 { go services.AddSearchKeyWord(user, keyWord, source) } if chartTotal > int(total) { total = int64(chartTotal) } if listType == 1 { total = total + int64(chartTotal) } if len(result) == 0 { result = make([]*models.SearchItem, 0) } page := paging.GetPaging(currentIndex, pageSize, int(total)) resp.Paging = page resp.List = result br.Ret = 200 br.Success = true br.Msg = "获取成功" br.Data = resp } // @Title 获取搜索推荐词 // @Description 获取搜索推荐词 // @Success 200 {object} models.ConfigResp // @router /keyWord [get] func (this *MobileSearchController) BrowseHistoryList() { 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 } resp := new(models.ConfigResp) hotSearch, err := models.GetHotSearch() if err != nil { br.Msg = "获取数据失败" br.ErrMsg = "获取数据失败,Err:" + err.Error() return } slicehotSearch := strings.Split(hotSearch, ",") for _, v := range slicehotSearch { item := new(models.KeyWord) item.KeyWord = v resp.ListRecommend = append(resp.ListRecommend, item) } hotList, err := models.GetSearchKeyWordTop() if err != nil { br.Msg = "获取信息失败" br.ErrMsg = "获取用户信息失败,Err:" + err.Error() return } for _, v := range hotList { item := new(models.KeyWord) item.KeyWord = v.KeyWord resp.ListHot = append(resp.ListHot, item) } //如果用户存在就展示历史搜索记录 if user.UserId > 0 { historySearch, err := models.GetSearchKeyWordByUser(user.UserId) if err != nil { br.Msg = "获取数据失败" br.ErrMsg = "获取数据失败,Err:" + err.Error() return } resp.ListHistory = historySearch } if len(resp.ListHistory) == 0 { resp.ListHistory = make([]*models.KeyWord, 0) } br.Msg = "获取成功!" br.Ret = 200 br.Success = true br.Data = resp }