package data_source import ( "eta/eta_api/models" "eta/eta_api/models/data_manage" dataSourceModel "eta/eta_api/models/data_source" "eta/eta_api/services/elastic" "eta/eta_api/utils" "fmt" "github.com/rdlucklib/rdluck_tools/paging" ) // SearchByEs // @Title ES搜索 // @Description ES搜索 // @Param PageSize query int true "每页数据条数" // @Param CurrentIndex query int true "当前页页码,从1开始" // @Param Keyword query string true "搜索关键词" // @Param Source query int true "数据源" // @Success 200 {object} response.ExcelListResp // @router /common/search_by_es [get] func (c *DataSourceController) SearchByEs() { br := new(models.BaseResponse).Init() defer func() { if br.ErrMsg == "" { br.IsSendEmail = false } c.Data["json"] = br c.ServeJSON() }() sysUser := c.SysUser if sysUser == nil { br.Msg = "请登录" br.ErrMsg = "请登录,SysUser Is Empty" br.Ret = 408 return } pageSize, _ := c.GetInt("PageSize") currentIndex, _ := c.GetInt("CurrentIndex") keyword := c.GetString("KeyWord") if keyword == `` { keyword = c.GetString("Keyword") } source, _ := c.GetInt("Source") if source <= 0 { br.Msg = "来源有误" br.ErrMsg = fmt.Sprintf("数据来源有误, Source: %d", source) return } subSource, _ := c.GetInt("SubSource") // 以下为兼容各旧接口的额外传参,不为空时修改Resp对应的Key primaryIdKey := c.GetString("PrimaryIdKey") indexNameKey := c.GetString("IndexNameKey") classifyIdKey := c.GetString("ClassifyIdKey") var total, startSize int if pageSize <= 0 { pageSize = utils.PageSize15 } if currentIndex <= 0 { currentIndex = 1 } startSize = paging.StartIndex(currentIndex, pageSize) // es搜索 t, list, e := elastic.SearchDataSourceIndex(utils.EsDataSourceIndexName, keyword, source, subSource, []int{}, []int{}, []string{}, startSize, pageSize) if e != nil { br.Msg = "获取失败" br.ErrMsg = fmt.Sprintf("ES-搜索数据源列表失败, %v", e) return } total = int(t) listMap := make([]map[string]interface{}, 0) for _, v := range list { // 由于start_date、end_date和latest_value字段不全的历史遗留问题,这里查出来并补充进ES里面去 if v.StartDate == "" || v.EndDate == "" { minMax, e := dataSourceModel.GetBaseIndexDataMinMax(v.Source, v.SubSource, v.IndexCode) if e != nil { if e.Error() == utils.ErrNoRow() { continue } br.Msg = "获取失败" br.ErrMsg = fmt.Sprintf("获取指标开始结束时间失败, %v", e) return } v.StartDate = minMax.MinDate v.EndDate = minMax.MaxDate v.LatestValue = minMax.LatestValue // 写入ES更新队列 if e := utils.Rc.LPush(utils.CACHE_DATA_SOURCE_ES_HANDLE, v); e != nil { br.Msg = "获取失败" br.ErrMsg = fmt.Sprintf("写入ES更新队列失败, Source: %d, IndexCode: %s, err: %v", v.Source, v.IndexCode, e) return } } // 转换成map返回 listMap = append(listMap, v.ToMap(primaryIdKey, indexNameKey, classifyIdKey)) } // 美国农业部(多一个ParentClassifyId字段) if source == utils.DATA_SOURCE_USDA_FAS { // 父级分类ID classifyIds := make([]int, 0) for _, v := range list { classifyIds = append(classifyIds, v.ClassifyId) } classifyList, e := data_manage.GetBaseFromUsdaFasClassifyByIds(classifyIds) if e != nil { br.Msg = "获取失败" br.ErrMsg = fmt.Sprintf("获取美国农业部分类失败, %v", e) return } classifyMap := make(map[int]int) for _, v := range classifyList { classifyMap[v.ClassifyId] = v.ParentId } for _, v := range listMap { id, ok := v["ClassifyId"].(int) if !ok { v["ParentClassifyId"] = 0 continue } v["ParentClassifyId"] = classifyMap[id] } } // 煤炭江湖(多一个Area字段) if source == utils.DATA_SOURCE_MTJH { cond := `` pars := make([]interface{}, 0) indexes, e := data_manage.GetMtjhItemsByCondition(cond, pars) if e != nil { br.Msg = "获取失败" br.ErrMsg = fmt.Sprintf("获取煤炭江湖指标失败, %v", e) return } indexArea := make(map[string]string) for _, v := range indexes { indexArea[v.IndexCode] = v.Area } for _, v := range listMap { code, ok := v["IndexCode"].(string) if !ok { v["Area"] = "" continue } v["Area"] = indexArea[code] } } page := paging.GetPaging(currentIndex, pageSize, total) resp := dataSourceModel.SearchDataSourceResp{ Paging: page, List: listMap, } br.Data = resp br.Ret = 200 br.Success = true br.Msg = "获取成功" }