search.go 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399
  1. package controllers
  2. import (
  3. "fmt"
  4. "github.com/rdlucklib/rdluck_tools/paging"
  5. "hongze/hongze_clpt/models"
  6. "hongze/hongze_clpt/services"
  7. "hongze/hongze_clpt/utils"
  8. "strings"
  9. )
  10. type SearchController struct {
  11. BaseAuthController
  12. }
  13. type BaseSearchController struct {
  14. BaseCommonController
  15. }
  16. type MobileSearchController struct {
  17. BaseAuthMobileController
  18. }
  19. // @Title 搜索接口
  20. // @Description 搜索接口
  21. // @Param PageSize query int false "每页数据条数"
  22. // @Param CurrentIndex query int false "当前页页码,从1开始"
  23. // @Param KeyWord query string true "搜索关键词"
  24. // @Param OrderColumn query string false "排序字段 ,Comprehensive综合 ,Matching匹配度 ,PublishDate 发布时间 "
  25. // @Param ListType query int false "列表类型,1最新/全部,2 纪要 ,3图表 默认1"
  26. // @Success 200 {object} models.SearchResp
  27. // @router /list [get]
  28. func (this *MobileSearchController) ListHomeArtAndChart() {
  29. br := new(models.BaseResponse).Init()
  30. defer func() {
  31. this.Data["json"] = br
  32. this.ServeJSON()
  33. }()
  34. pageSize, _ := this.GetInt("PageSize")
  35. currentIndex, _ := this.GetInt("CurrentIndex")
  36. listType, _ := this.GetInt("ListType")
  37. var startSize int
  38. if pageSize <= 0 {
  39. pageSize = utils.PageSize20
  40. }
  41. if currentIndex <= 0 {
  42. currentIndex = 1
  43. }
  44. if listType == 0 {
  45. listType = 1
  46. }
  47. startSize = paging.StartIndex(currentIndex, pageSize)
  48. keyWord := this.GetString("KeyWord")
  49. orderColumn := this.GetString("OrderColumn")
  50. if keyWord == "" {
  51. br.Msg = "请输入搜索词"
  52. br.ErrMsg = "请输入搜索词"
  53. return
  54. }
  55. //添加映射关系
  56. keyWord = strings.ToUpper(keyWord)
  57. keyWordDetail, _ := models.GetCygxCygxIkWordMapDetail(keyWord)
  58. if keyWordDetail != nil {
  59. keyWord = keyWordDetail.KeyWordMap
  60. }
  61. user := this.User
  62. if user == nil {
  63. br.Msg = "请重新登录"
  64. br.Ret = 408
  65. return
  66. }
  67. //研选的五张图片
  68. detailResearch, errConfig := models.GetConfigByCode("category_research_img_url")
  69. if errConfig != nil {
  70. br.Msg = "获取数据失败"
  71. br.ErrMsg = "获取数据研选分类图片失败,Err:" + errConfig.Error()
  72. return
  73. }
  74. researchList := strings.Split(detailResearch.ConfigValue, "{|}")
  75. //对应分类的所图片
  76. detailCategoryUrl, errConfig := models.GetConfigByCode("category_map_img_url")
  77. if errConfig != nil {
  78. br.Msg = "获取数据失败"
  79. br.ErrMsg = "行业配置信息失败,Err:" + errConfig.Error()
  80. return
  81. }
  82. categoryUrlList := strings.Split(detailCategoryUrl.ConfigValue, "{|}")
  83. mapCategoryUrl := make(map[string]string)
  84. var categoryId string
  85. var imgUrlChart string
  86. for _, v := range categoryUrlList {
  87. vslice := strings.Split(v, "_")
  88. categoryId = vslice[0]
  89. imgUrlChart = vslice[len(vslice)-1]
  90. mapCategoryUrl[categoryId] = imgUrlChart
  91. }
  92. if orderColumn == "" {
  93. orderColumn = "Matching"
  94. }
  95. orderColumn = "Matching"
  96. //indexName := utils.IndexName
  97. //pageSize = 20
  98. var chartTotal int
  99. resp := new(models.SearchResp)
  100. //page := paging.GetPaging(currentIndex, pageSize, total)
  101. var chartList []*models.HomeChartListResp
  102. var err error
  103. var condition string
  104. var pars []interface{}
  105. if listType == 1 || listType == 3 {
  106. //if listType == 1 {
  107. // pageSize = 100
  108. //}
  109. if currentIndex <= 2 {
  110. condition = ` AND title LIKE '%` + keyWord + `%'`
  111. chartList, err = models.GetChartList(condition, pars, startSize, pageSize)
  112. if err != nil {
  113. br.Msg = "获取信息失败"
  114. br.ErrMsg = "获取用户信息失败,Err:" + err.Error()
  115. return
  116. }
  117. chartTotal, err = models.GetChartCount(condition, pars)
  118. if err != nil {
  119. br.Msg = "获取信息失败"
  120. br.Msg = "获取帖子总数失败,Err:" + err.Error()
  121. return
  122. }
  123. }
  124. }
  125. for k, v := range chartList {
  126. chartList[k].IsNeedJump = true
  127. chartList[k].Source = 2
  128. if v.PtagName != "" {
  129. chartList[k].CtagNamePc = v.PtagName
  130. }
  131. if v.CtagName != "" {
  132. chartList[k].CtagNamePc += "," + v.CtagName
  133. }
  134. if v.PtagNameTwo != "" {
  135. chartList[k].CtagNamePc += "," + v.PtagNameTwo
  136. }
  137. if v.CtagNameTwo != "" {
  138. chartList[k].CtagNamePc += "," + v.CtagNameTwo
  139. }
  140. if v.PtagName != "" {
  141. labelItem := new(models.LabelList)
  142. labelItem.PtagName = v.PtagName
  143. labelItem.CtagName = v.CtagName
  144. chartList[k].LabelList = append(chartList[k].LabelList, labelItem)
  145. }
  146. if v.PtagNameTwo != "" {
  147. labelItemTwo := new(models.LabelList)
  148. labelItemTwo.PtagName = v.PtagNameTwo
  149. labelItemTwo.CtagName = v.CtagNameTwo
  150. chartList[k].LabelList = append(chartList[k].LabelList, labelItemTwo)
  151. }
  152. if len(chartList[k].LabelList) == 0 {
  153. chartList[k].LabelList = make([]*models.LabelList, 0)
  154. }
  155. }
  156. if len(chartList) == 0 {
  157. chartList = make([]*models.HomeChartListResp, 0)
  158. }
  159. resp.ChartList = chartList
  160. var result []*models.SearchItem
  161. var total int64
  162. if listType == 1 || listType == 2 {
  163. //if orderColumn == "PublishDate" {
  164. // tmpResult, tmpTotal, tmpErr := services.EsMultiMatchFunctionScoreQueryTimeSort(indexName, keyWord, startSize, 100, user.UserId)
  165. // result = tmpResult
  166. // total = tmpTotal
  167. // err = tmpErr
  168. //} else {
  169. // tmpResult, tmpTotal, tmpErr := services.EsMultiMatchFunctionScoreQuerySort(indexName, keyWord, startSize, pageSize, user.UserId, orderColumn)
  170. // result = tmpResult
  171. // total = tmpTotal
  172. // err = tmpErr
  173. //}
  174. _, tmpTotal, err := services.EsArticleSearch(keyWord, startSize, pageSize, orderColumn, 0)
  175. if err != nil {
  176. br.Msg = "检索失败"
  177. br.ErrMsg = "检索失败,Err:" + err.Error()
  178. return
  179. }
  180. tmpResult, tmpTotalResult, err := services.EsArticleSearchBody(keyWord, startSize, pageSize, orderColumn, 1)
  181. if err != nil {
  182. br.Msg = "检索失败"
  183. br.ErrMsg = "检索失败,Err:" + err.Error()
  184. return
  185. }
  186. result = tmpResult
  187. fmt.Println(tmpTotalResult)
  188. if int(tmpTotalResult) < currentIndex*pageSize {
  189. startSizeBody := startSize - int(tmpTotalResult)
  190. if startSizeBody < 0 {
  191. startSizeBody = 0
  192. }
  193. var pageSizeBody int
  194. pageSizeBody = pageSize - len(tmpResult)
  195. tmpResultBody, tmpTotalBody, err := services.EsArticleSearchBody(keyWord, startSizeBody, pageSizeBody, orderColumn, 2)
  196. if err != nil {
  197. br.Msg = "检索失败"
  198. br.ErrMsg = "检索失败,Err:" + err.Error()
  199. return
  200. }
  201. for _, v := range tmpResultBody {
  202. result = append(result, v)
  203. }
  204. tmpTotalResult += tmpTotalBody
  205. }
  206. if int(tmpTotalResult) < currentIndex*pageSize {
  207. startSizeIk := startSize - int(tmpTotalResult)
  208. if startSizeIk < 0 {
  209. startSizeIk = 0
  210. }
  211. var pageSizeIk int
  212. pageSizeIk = pageSize - len(result)
  213. tmpResultIk, _, err := services.EsArticleSearch(keyWord, startSizeIk, pageSizeIk, orderColumn, 2)
  214. if err != nil {
  215. br.Msg = "检索失败"
  216. br.ErrMsg = "检索失败,Err:" + err.Error()
  217. return
  218. }
  219. for _, v := range tmpResultIk {
  220. result = append(result, v)
  221. }
  222. }
  223. total = tmpTotal
  224. if len(result) == 0 {
  225. result = make([]*models.SearchItem, 0)
  226. }
  227. for k, v := range result {
  228. //如果是研选系列的任意取五张图片的中的一张
  229. if v.CategoryId == "0" {
  230. knum := v.ArticleId % 5
  231. result[k].ImgUrlPc = researchList[knum]
  232. } else {
  233. result[k].ImgUrlPc = mapCategoryUrl[v.CategoryId]
  234. }
  235. result[k].Source = 1
  236. }
  237. }
  238. //ListType query int true "列表类型,1最新/全部,2 纪要 ,3图表 默认1"
  239. //记录用户搜索关键词
  240. var source int
  241. if listType == 1 {
  242. source = 3
  243. } else if listType == 2 {
  244. source = 1
  245. } else {
  246. source = 2
  247. }
  248. //如果是有效用户就记录搜索历史
  249. if user.UserId > 0 {
  250. go services.AddSearchKeyWord(user, keyWord, source)
  251. }
  252. if chartTotal > int(total) {
  253. total = int64(chartTotal)
  254. }
  255. if listType == 1 {
  256. total = total + int64(chartTotal)
  257. }
  258. if len(result) == 0 {
  259. result = make([]*models.SearchItem, 0)
  260. }
  261. page := paging.GetPaging(currentIndex, pageSize, int(total))
  262. resp.Paging = page
  263. resp.List = result
  264. br.Ret = 200
  265. br.Success = true
  266. br.Msg = "获取成功"
  267. br.Data = resp
  268. }
  269. // @Title 获取搜索推荐词
  270. // @Description 获取搜索推荐词
  271. // @Success 200 {object} models.ConfigResp
  272. // @router /keyWord [get]
  273. func (this *MobileSearchController) BrowseHistoryList() {
  274. br := new(models.BaseResponse).Init()
  275. defer func() {
  276. this.Data["json"] = br
  277. this.ServeJSON()
  278. }()
  279. user := this.User
  280. if user == nil {
  281. br.Msg = "请重新登录"
  282. br.Ret = 408
  283. return
  284. }
  285. resp := new(models.ConfigResp)
  286. hotSearch, err := models.GetHotSearch()
  287. if err != nil {
  288. br.Msg = "获取数据失败"
  289. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  290. return
  291. }
  292. slicehotSearch := strings.Split(hotSearch, ",")
  293. for _, v := range slicehotSearch {
  294. item := new(models.KeyWord)
  295. item.KeyWord = v
  296. resp.ListRecommend = append(resp.ListRecommend, item)
  297. }
  298. hotList, err := models.GetSearchKeyWordTop()
  299. if err != nil {
  300. br.Msg = "获取信息失败"
  301. br.ErrMsg = "获取用户信息失败,Err:" + err.Error()
  302. return
  303. }
  304. for _, v := range hotList {
  305. item := new(models.KeyWord)
  306. item.KeyWord = v.KeyWord
  307. resp.ListHot = append(resp.ListHot, item)
  308. }
  309. //如果用户存在就展示历史搜索记录
  310. if user.UserId > 0 {
  311. historySearch, err := models.GetSearchKeyWordByUser(user.UserId)
  312. if err != nil {
  313. br.Msg = "获取数据失败"
  314. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  315. return
  316. }
  317. resp.ListHistory = historySearch
  318. }
  319. if len(resp.ListHistory) == 0 {
  320. resp.ListHistory = make([]*models.KeyWord, 0)
  321. }
  322. br.Msg = "获取成功!"
  323. br.Ret = 200
  324. br.Success = true
  325. br.Data = resp
  326. }
  327. // @Title 综合搜索接口
  328. // @Description 综合搜索接口
  329. // @Param PageSize query int true "每页数据条数"
  330. // @Param CurrentIndex query int true "当前页页码,从1开始"
  331. // @Param KeyWord query string true "搜索关键词"
  332. // @Success 200 {object} models.SearchItem
  333. // @router /comprehensive/list [get]
  334. func (this *MobileSearchController) ComprehensiveList() {
  335. br := new(models.BaseResponse).Init()
  336. defer func() {
  337. this.Data["json"] = br
  338. this.ServeJSON()
  339. }()
  340. pageSize, _ := this.GetInt("PageSize")
  341. currentIndex, _ := this.GetInt("CurrentIndex")
  342. var startSize int
  343. if pageSize <= 0 {
  344. pageSize = utils.PageSize20
  345. }
  346. if currentIndex <= 0 {
  347. currentIndex = 1
  348. }
  349. startSize = paging.StartIndex(currentIndex, pageSize)
  350. keyWord := this.GetString("KeyWord")
  351. if keyWord == "" {
  352. br.Msg = "请输入搜索词"
  353. br.ErrMsg = "请输入搜索词"
  354. return
  355. }
  356. user := this.User
  357. if user == nil {
  358. br.Msg = "请重新登录"
  359. br.Ret = 408
  360. return
  361. }
  362. resp := new(models.HomeResourceDataListNewResp)
  363. tmpResult, tmpTotalResult, err := services.EsComprehensiveSearch(keyWord, startSize, pageSize)
  364. if err != nil {
  365. br.Msg = "检索失败"
  366. br.ErrMsg = "检索失败,Err:" + err.Error()
  367. return
  368. }
  369. list, err := services.GetResourceDataEsList(tmpResult, user)
  370. if err != nil {
  371. br.Msg = "获取失败"
  372. br.ErrMsg = "获取数据失败,Err:" + err.Error()
  373. return
  374. }
  375. if len(list) == 0 {
  376. list = make([]*models.CygxResourceDataNewResp, 0)
  377. }
  378. resp.List = list
  379. page := paging.GetPaging(currentIndex, pageSize, int(tmpTotalResult))
  380. resp.Paging = page
  381. br.Ret = 200
  382. br.Success = true
  383. br.Msg = "获取成功"
  384. br.Data = resp
  385. }