package controllers import ( "github.com/rdlucklib/rdluck_tools/paging" "hongze/hongze_cygx/models" "hongze/hongze_cygx/services" "hongze/hongze_cygx/utils" "strings" "time" ) type SearchController struct { BaseAuthController } type BaseSearchController struct { BaseCommonController } // @Title 搜索接口 // @Description 搜索接口 // @Param PageSize query int true "每页数据条数" // @Param CurrentIndex query int true "当前页页码,从1开始" // @Param KeyWord query string true "搜索关键词" // @Param OrderColumn query int true "排序字段 ,Comprehensive综合 ,Matching匹配度 ,PublishDate 发布时间 " // @Success 200 {object} models.SearchItem // @router /list [get] func (this *SearchController) SearchList() { br := new(models.BaseResponse).Init() defer func() { this.Data["json"] = br this.ServeJSON() }() pageSize, _ := this.GetInt("PageSize") currentIndex, _ := this.GetInt("CurrentIndex") var startSize int if pageSize <= 0 { pageSize = utils.PageSize20 } if currentIndex <= 0 { currentIndex = 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 result []*models.SearchItem var total int64 var err error 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 } if err != nil { br.Msg = "检索失败" br.ErrMsg = "检索失败,Err:" + err.Error() return } if len(result) == 0 { result = make([]*models.SearchItem, 0) } detail, errKey := models.GetNewSearchKeyWordByThisUser(user.UserId, keyWord) if errKey != nil && errKey.Error() != utils.ErrNoRow() { br.Msg = "获取信息失败" br.ErrMsg = "获取信息失败,Err:" + errKey.Error() return } //同一个用户一分钟之内搜索的词不重复记录 if detail == nil || time.Now().After(detail.CreateTime.Add(+time.Minute*1)) { //fmt.Println("一分钟之内没有搜索") keyWordItem := new(models.CygxSearchKeyWord) keyWordItem.UserId = user.UserId keyWordItem.KeyWord = keyWord keyWordItem.CreateTime = time.Now() go models.AddSearchKeyWord(keyWordItem) } 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] } } resp := new(models.SearchResp) page := paging.GetPaging(currentIndex, pageSize, int(total)) resp.Paging = page resp.List = result br.Ret = 200 br.Success = true br.Msg = "获取成功" br.Data = resp } //https://blog.csdn.net/my_miuye/article/details/110496025 //search // @Title 报告搜索接口 // @Description 报告搜索接口 // @Param PageSize query int true "每页数据条数" // @Param CurrentIndex query int true "当前页页码,从1开始" // @Param KeyWord query string true "搜索关键词" // @Success 200 {object} models.SearchItem // @router /report/list [get] func (this *SearchController) SearchReport() { br := new(models.BaseResponse).Init() defer func() { this.Data["json"] = br this.ServeJSON() }() pageSize, _ := this.GetInt("PageSize") currentIndex, _ := this.GetInt("CurrentIndex") var startSize int if pageSize <= 0 { pageSize = utils.PageSize20 } if currentIndex <= 0 { currentIndex = 1 } startSize = paging.StartIndex(currentIndex, pageSize) keyWord := this.GetString("KeyWord") if keyWord == "" { br.Msg = "请输入搜索词" br.ErrMsg = "请输入搜索词" return } user := this.User if user == nil { br.Msg = "请重新登录" br.Ret = 408 return } //indexName := "article_list" indexName := utils.IndexName pageSize = 100 var result []*models.SearchItem var total int64 var err error tmpResult, tmpTotal, tmpErr := services.EsSearchReport(indexName, keyWord, startSize, pageSize, user.UserId) 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) } detail, errKey := models.GetNewSearchKeyWordByThisUser(user.UserId, keyWord) if errKey != nil && errKey.Error() != utils.ErrNoRow() { br.Msg = "获取信息失败" br.ErrMsg = "获取信息失败,Err:" + errKey.Error() return } //同一个用户一分钟之内搜索的词不重复记录 if detail == nil || time.Now().After(detail.CreateTime.Add(+time.Minute*1)) { //fmt.Println("一分钟之内没有搜索") keyWordItem := new(models.CygxSearchKeyWord) keyWordItem.UserId = user.UserId keyWordItem.KeyWord = keyWord keyWordItem.CreateTime = time.Now() go models.AddSearchKeyWord(keyWordItem) } resp := new(models.SearchResp) 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 搜索接口(无需token) // @Description 搜索接口(无需token) // @Param PageSize query int true "每页数据条数" // @Param CurrentIndex query int true "当前页页码,从1开始" // @Param KeyWord query string true "搜索关键词" // @Param OrderColumn query int true "排序字段 ,Comprehensive综合 ,Matching匹配度 ,PublishDate 发布时间 " // @Param CompanyCode query string false "机构编号" // @Param CompanyName query string false "机构名称" // @Param Email query string false "邮箱" // @Param Sign query string false "加密签名" // @Success 200 {object} models.SearchItem // @router /listPublic [get] func (this *BaseSearchController) SearchListPublic() { br := new(models.BaseResponse).Init() defer func() { this.Data["json"] = br this.ServeJSON() }() pageSize, _ := this.GetInt("PageSize") currentIndex, _ := this.GetInt("CurrentIndex") var startSize int if pageSize <= 0 { pageSize = utils.PageSize20 } if currentIndex <= 0 { currentIndex = 1 } startSize = paging.StartIndex(currentIndex, pageSize) keyWord := this.GetString("KeyWord") orderColumn := this.GetString("OrderColumn") if keyWord == "" { br.Msg = "请输入搜索词" br.ErrMsg = "请输入搜索词" return } companyCode := this.GetString("CompanyCode") companyNameHt := this.GetString("CompanyName") email := this.GetString("Email") sign := this.GetString("Sign") if orderColumn == "" { orderColumn = "Matching" } indexName := utils.IndexName pageSize = 20 var result []*models.SearchItem var total int64 var err error if orderColumn == "PublishDate" { tmpResult, tmpTotal, tmpErr := services.EsMultiMatchFunctionScoreQueryTimeSort(indexName, keyWord, startSize, 100, 0) result = tmpResult total = tmpTotal err = tmpErr } else { tmpResult, tmpTotal, tmpErr := services.EsMultiMatchFunctionScoreQuerySort(indexName, keyWord, startSize, pageSize, 0, 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) } if companyCode != "" && companyNameHt != "" && email != "" { errMsg, errHt, wxUser, _ := services.CheckHtgj(companyCode, companyNameHt, email, sign) if errHt != nil { br.Msg = "获取" br.ErrMsg = "获取数据失败,Err:" + errHt.Error() return } if errMsg != "" { br.Msg = errMsg return } user := wxUser detail, errKey := models.GetNewSearchKeyWordByThisUser(user.UserId, keyWord) if errKey != nil && errKey.Error() != utils.ErrNoRow() { br.Msg = "获取信息失败" br.ErrMsg = "获取信息失败,Err:" + errKey.Error() return } //同一个用户一分钟之内搜索的词不重复记录 if detail == nil || time.Now().After(detail.CreateTime.Add(+time.Minute*1)) { keyWordItem := new(models.CygxSearchKeyWord) keyWordItem.UserId = user.UserId keyWordItem.KeyWord = keyWord keyWordItem.CreateTime = time.Now() go models.AddSearchKeyWord(keyWordItem) } } resp := new(models.SearchResp) 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 搜索接口 // @Param PageSize query int true "每页数据条数" // @Param CurrentIndex query int true "当前页页码,从1开始" // @Param KeyWord query string true "搜索关键词" // @Param OrderColumn query int true "排序字段 ,Comprehensive综合 ,Matching匹配度 ,PublishDate 发布时间 " // @Param ListType query int true "列表类型,1最新,2 纪要 ,3图表 默认1" // @Success 200 {object} models.SearchItem // @router /artAndChart/list [get] func (this *SearchController) 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 //} //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 // //var total, chartTotal int //resp := new(models.HomeArtAndChartListResp) //page := paging.GetPaging(currentIndex, pageSize, total) //resp.HaveResearch = true //var chartList []*models.HomeChartListResp //var err error //if listType == 1 { // if currentIndex <= 2 { // chartList, err = models.GetChartList(condition, pars, startSize, pageSize) // if err != nil { // br.Msg = "获取信息失败" // br.ErrMsg = "获取用户信息失败,Err:" + err.Error() // return // } // } //} //var result []*models.SearchItem //var total int64 //var err error //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 //} //if err != nil { // br.Msg = "检索失败" // br.ErrMsg = "检索失败,Err:" + err.Error() // return //} //if len(result) == 0 { // result = make([]*models.SearchItem, 0) //} //detail, errKey := models.GetNewSearchKeyWordByThisUser(user.UserId, keyWord) //if errKey != nil && errKey.Error() != utils.ErrNoRow() { // br.Msg = "获取信息失败" // br.ErrMsg = "获取信息失败,Err:" + errKey.Error() // return //} ////同一个用户一分钟之内搜索的词不重复记录 //if detail == nil || time.Now().After(detail.CreateTime.Add(+time.Minute*1)) { // //fmt.Println("一分钟之内没有搜索") // keyWordItem := new(models.CygxSearchKeyWord) // keyWordItem.UserId = user.UserId // keyWordItem.KeyWord = keyWord // keyWordItem.CreateTime = time.Now() // go models.AddSearchKeyWord(keyWordItem) //} //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] // } //} ////resp := new(models.SearchResp) ////page := paging.GetPaging(currentIndex, pageSize, int(total)) ////resp.Paging = page ////resp.List = result br.Ret = 200 br.Success = true br.Msg = "获取成功" //br.Data = resp }