关于从redis条件查询,表现形式

503 发布于 2017/09/21 13:25
阅读 272
收藏 0

package com.ytwl.cms.basic.impl;

import static org.elasticsearch.index.query.QueryBuilders.boolQuery;
import static org.elasticsearch.index.query.QueryBuilders.matchPhraseQuery;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

import javax.annotation.Resource;

import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.common.base.Strings;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.elasticsearch.core.ElasticsearchTemplate;
import org.springframework.data.elasticsearch.core.ResultsExtractor;
import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;
import org.springframework.data.elasticsearch.core.query.SearchQuery;
import org.springframework.stereotype.Service;

import com.aicai.appmodel.domain.result.ModelResult;
import com.aicai.appmodel.domain.result.PageResult;
import com.aicai.appmodel.page.DataPage;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fid.util.RedisAPI;
import com.fid.util.RedisEntityUtil;
import com.google.gson.Gson;
import com.ytwl.cms.basic.common.service.BasicService;
import com.ytwl.cms.basic.manager.BasicManager;
import com.ytwl.cms.elasticsearch.common.domain.ContentSearchResult;
import com.ytwl.cms.elasticsearch.constant.ElasticSearchConstant;
import com.ytwl.cms.robots.common.domain.RbsConclusion;
import com.ytwl.cms.robots.common.domain.RbsWords;

import net.sf.json.JSONObject;

@Service
public class BasicServiceImpl<T> implements BasicService<T>{

    @Resource
    public BasicManager<T> basicManager; 
    
    @Autowired
    private ElasticsearchTemplate elasticsearchTemplate;
    
    
    @Override
    public ModelResult<T> selectByPrimaryKey(Class clz,Long id) {
        ModelResult<T> result = new ModelResult<T>();
        if (id == null) {
            result.withError("PARAMS", "ID is null");
            return result;
        }    
        T t = basicManager.selectByPrimaryKey(clz, id);
        result.setModel(t);
        return result;
    }

    @Override
    public Boolean deleteByPrimaryKey(Class clz,Long id) {
        return basicManager.deleteByPrimaryKey(clz,id);
    }

    @Override
    public Boolean insert(T t) {
        return basicManager.insert(t);
    }

    @Override
    public Boolean insertSelective(T t) {
        return basicManager.insertSelective(t);
    }

    @Override
    public Boolean updateByPrimaryKeySelective(T t) {
        return basicManager.updateByPrimaryKeySelective(t);
    }

    @Override
    public Boolean updateByPrimaryKey(T t) {
        return basicManager.updateByPrimaryKey(t);
    }

    @Override
    public PageResult<T> queryPage(DataPage<T> dataPage, Map<String, Object> param) {
        PageResult<T> result = new PageResult<>();
        DataPage<T> page = basicManager.queryPage(dataPage, param);
        result.withPage(page);
        return result;
    }

    @Override
    public ModelResult<List<T>> queryListByParam(Map<String, Object> param) {
        ModelResult<List<T>> result = new ModelResult<>();
        List<T> list = basicManager.queryListByParam(param);
        result.withModel(list);
        return result;
    }

    @Override
    public  ModelResult<List<T>> queryListByParamFormRedis(T t, String columnName,Collection<Object> columnValues){
        ModelResult<List<T>> result = new ModelResult<>();
        result.setModel(Collections.emptyList());
        if(columnValues == null) {
            return result;
        }
        columnValues.remove(null);
        Set<Object> set = new HashSet<>(columnValues);
        set.remove(null);
        String[] str = new String[set.size()];
        int i = 0;
        for (Object obj : set) {
            str[i++] = obj.toString();
        }
        
        List<T> list  = RedisEntityUtil.getObjectByColumn(t, columnName, str);
        result.setModel(list);
        return result;
    }
    
    
    @Override
    public ModelResult<List<T>> queryListByParamFormElasticsearch(T t, String columnName,Collection<Object> columnValues){
        ModelResult<List<T>> result = new ModelResult<>();

        //从elasticSearch里查询
        NativeSearchQueryBuilder nativeSearchQueryBuilder = new NativeSearchQueryBuilder();
        nativeSearchQueryBuilder.withIndices(ElasticSearchConstant.RBS_INDEX);
        String className = t.getClass().getSimpleName();
        className = String.valueOf(className.charAt(0)).toLowerCase()+className.substring(1,className.length());
        nativeSearchQueryBuilder.withTypes(className);
        BoolQueryBuilder boolQuery = boolQuery();
      //  for (Object columnValue : columnValues) {
        //     boolQuery.must(QueryBuilders.termQuery(columnName, columnValue));
        //}
        nativeSearchQueryBuilder.withQuery(boolQuery);
        SearchQuery searchQuery = nativeSearchQueryBuilder.build();
        List<T> list = elasticsearchTemplate.query(searchQuery,
                new ResultsExtractor<List<T>>() {

                    public List<T> extract(SearchResponse response) {
                        //long totalCount = response.getHits().totalHits();
                        List<T> results = new ArrayList<>();
                        ObjectMapper mapper = new ObjectMapper();
                        for (SearchHit hit : response.getHits()) {
                             if (hit != null) {
                                 T result = null;
                                 if (!Strings.isNullOrEmpty(hit.sourceAsString())) {
                                     try {
    //                                     result =mapper.readValue(hit.sourceAsString(), t.getClass());
                                         result = (T) mapper.readValue(hit.sourceAsString(), t.getClass());
                                     } catch (Exception e) {
                                         e.printStackTrace();
                                     }
                                 } else {
                                     //result = JSON.toJavaObject(hit.getFields().values(), ContentSearchResult.class);
                                 }
                             }
                        }
                        return results;
                    }
        });
        result.setModel(list);
        return result;
    }
    
    
    public static void main(String[] args) {
        String str= "股票代码    股票名称    财务    公司面    估值    规模    行业面    基本面    技术面    市场    消息面    资金面    综合评分    KDJ    MACD(指数平滑移动平均线)    RSI(相对强弱指标)    板块榜单    板块列表    个股k线图    个股分时    个股五日    股东    新闻,公告,研报等        股票代码热点    股票及板块    全局榜单    热门行业    市场行情    指数榜单    指数";
        for(String s:str.split("\\s+")){
            System.out.println(s);
        }
        System.out.println(str.split("\\s+").length);
    }

    @Override
    public Boolean insertDBWithCache(T t) {
        Boolean success = basicManager.insert(t);
        RedisEntityUtil.insertEntityToRedis(t);
        return success;
    }
    
    @Override
    public Boolean deleteByPrimaryKeyDBWithCache(Class clz, Long id) {
        Boolean success = basicManager.deleteByPrimaryKey(clz, id);
        RedisEntityUtil.deleteEntityFromRedisById(clz, id);
        return success;
    }

    @Override
    public Boolean updateByPrimaryKeyDBWithCache(T t) {
        basicManager.updateByPrimaryKey(t);
        Long id = RedisEntityUtil.getObjectIdLong(t);
        RedisEntityUtil.deleteEntityFromRedisById(t.getClass(), id);
        RedisEntityUtil.insertEntityToRedis(t);
        return true;
        
    }

    /**
     * 根据t查询所有
     */
    @Override 
    public ModelResult<List<T>> queryListAllFormRedis(T t) {
        ModelResult<List<T>> result = new ModelResult<>();
        List<T>  resultList = new ArrayList<>();
        Collection<String> list =  RedisAPI.getMap(t.getClass().getSimpleName()).values();
        Gson gson = new Gson();
        for (String jsonString : list) {
            t = (T) gson.fromJson(jsonString, t.getClass());
            resultList.add(t);
        }
        result.setModel(resultList);
        return result;
    }
}
 

加载中
0
秋痕
秋痕

所以 问题呢?

返回顶部
顶部