| 
					
				 | 
			
			
				@ -1,36 +1,45 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				package com.yihu.iot.datainput.service; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.alibaba.fastjson.JSON; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.alibaba.fastjson.JSONArray; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.alibaba.fastjson.JSONObject; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.fasterxml.jackson.databind.ObjectMapper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.google.gson.JsonArray; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.base.es.config.ElastricSearchHelper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.base.hbase.HBaseHelper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.iot.datainput.enums.DataTypeEnum; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.iot.datainput.util.ConstantUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.iot.datainput.util.RowKeyUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.iot.datainput.Data; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.iot.datainput.DataBodySignsDO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.iot.datainput.DataStandardDO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.iot.datainput.StepInfoDO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.restmodel.iot.datainput.DataBodySignsVO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.restmodel.iot.datainput.WeRunDataVO; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import com.yihu.jw.util.date.DateUtil; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import io.searchbox.core.SearchResult; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import io.searchbox.core.Update; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.apache.commons.lang.StringUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.apache.hadoop.hbase.Cell; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.apache.hadoop.hbase.client.Result; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.apache.hadoop.hbase.util.Bytes; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.apache.hadoop.hbase.util.CollectionUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.apache.lucene.queryparser.xml.FilterBuilder; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.apache.lucene.queryparser.xml.FilterBuilderFactory; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.elasticsearch.index.query.*; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.elasticsearch.search.builder.SearchSourceBuilder; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.elasticsearch.search.sort.FieldSortBuilder; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.elasticsearch.search.sort.SortBuilder; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.elasticsearch.search.sort.SortOrder; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.slf4j.Logger; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.slf4j.LoggerFactory; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.springframework.beans.BeanUtils; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.springframework.beans.factory.annotation.Autowired; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.springframework.data.elasticsearch.core.query.UpdateQuery; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.springframework.data.elasticsearch.core.query.UpdateQueryBuilder; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import org.springframework.stereotype.Component; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import javax.annotation.PostConstruct; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import java.beans.PropertyDescriptor; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import java.io.IOException; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import java.util.ArrayList; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import java.util.HashMap; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import java.util.List; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import java.util.Map; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				import java.util.*; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				@Component 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				public class DataSearchService { 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@ -43,14 +52,30 @@ public class DataSearchService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    @Autowired 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    private HBaseHelper hBaseHelper; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    private static Map<String,Set<String>> fieldsMap = new HashMap<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    @PostConstruct 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public static void init(){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        Set<String> fieldsSet = new HashSet<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        PropertyDescriptor[] properties = BeanUtils.getPropertyDescriptors(Data.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        for(PropertyDescriptor field:properties){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            fieldsSet.add(field.getName()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        fieldsMap.put("data",fieldsSet); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        Set<String> fieldsSet2 = new HashSet<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        PropertyDescriptor[] properties2 = BeanUtils.getPropertyDescriptors(StepInfoDO.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        for(PropertyDescriptor field:properties2){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            fieldsSet2.add(field.getName()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        fieldsMap.put("stepInfoList",fieldsSet2); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 拼接es搜索json string 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param json 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public static String getQueryString(String json){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        JSONObject jsonObject = (JSONObject)JSONObject.parse(json); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        JSONObject jsonObject = JSONObject.parseObject(json); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        //第一层query 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        JSONObject query = new JSONObject(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        //bool层 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@ -111,17 +136,10 @@ public class DataSearchService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public String getData(String jsonData){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				//        String query = getQueryString(jsonData); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        logger.info("load data from elasticsearch start:" + org.apache.http.client.utils.DateUtils.formatDate(new Date(), DateUtil.yyyy_MM_dd_HH_mm_ss)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        JSONObject resultJsonObj = new JSONObject(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        JSONArray  resultArray = new JSONArray(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				       /* List list = new ArrayList(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        ObjectMapper objectMapper = new ObjectMapper(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            list = objectMapper.readValue(jsonData,(List.class)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } catch (IOException e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            e.printStackTrace(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        }*/ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        SearchSourceBuilder query = getQueryBuilder(jsonData); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        SearchSourceBuilder query = getQueryBuilder("data",jsonData); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        SearchResult esResult = elastricSearchHelper.search(ConstantUtils.esIndex,ConstantUtils.esType,query.toString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if(esResult.getTotal() == 0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            return ""; 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@ -138,68 +156,122 @@ public class DataSearchService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if(CollectionUtils.isEmpty(rowkeys)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            resultArray.addAll(esResult.getSourceAsStringList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            resultJsonObj.put("data",resultArray); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            resultJsonObj.put("count",esResult.getTotal()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            return resultJsonObj.toJSONString(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        List<Map<String, Object>> resultList = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            //拿到rowkey后,去hbase读取数据内容 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            Result[] hbaseData = hBaseHelper.getResultList(ConstantUtils.tableName,rowkeys); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            for(Result res:hbaseData){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                List<Cell> ceList = res.listCells(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                if(null == ceList){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    continue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                Map<String, Object> map = new HashMap<String, Object>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                String rowkey = Bytes.toString(res.getRow()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                //rowkey是根据一些头部数据加密而来,解密即可还原 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                String tag = RowKeyUtils.getMessageFromRowKey(rowkey); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                String[] tags = tag.split(","); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                map.put("access_token", tags[0]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                map.put("sn", tags[1]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                map.put("ext_code", tags[2]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                if (ceList != null && ceList.size() > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    for (Cell cell : ceList) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        map.put(Bytes.toString(cell.getQualifierArray(), cell.getQualifierOffset(), cell.getQualifierLength()), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                Bytes.toString(cell.getValueArray(), cell.getValueOffset(), cell.getValueLength())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                resultList.add(map); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } catch (Exception e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            e.printStackTrace(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            logger.error("get data from hbase fail.",e.getMessage()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            return esResult.getSourceAsString(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        resultArray.addAll(resultList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        resultJsonObj.put("data",resultArray); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        resultJsonObj.put("count",esResult.getTotal());//count放最后最先读出来 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        resultArray.addAll(esResult.getSourceAsStringList()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        resultJsonObj.put("data", resultArray); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        resultJsonObj.put("count", esResult.getTotal()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        logger.info("load data from elasticsearch end:" + org.apache.http.client.utils.DateUtils.formatDate(new Date(), DateUtil.yyyy_MM_dd_HH_mm_ss)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return resultJsonObj.toJSONString(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				//        if (!CollectionUtils.isEmpty(rowkeys)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				//         return getDataFromHbase(rowkeys,esResult); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				//        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    //List<Map<String, Object>> filter,int page, int size,String sort 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    private SearchSourceBuilder getQueryBuilder(String jsonData) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 构造es查询参数 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param jsonData 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				             "filter":[{"andOr":"and|or","condition":">|=|<|>=|<=|?","field":"<filed>","value":"<value>"},<{...}>], 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                       - 参数说明:andOr跟数据库的中的AND和OR相似;condition指条件匹配程度,?相当于数据库中的like;filed指检索的字段;value为检索的值 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            "page":1,  - 参数格式:页码,默认1,int类型 不需要分页,传"" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            "size":10, - 参数格式:条数,默认10,int类型 不需要分页,传"" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            "sort":[ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     {"key":{"order":"asc|desc"}}, - 参数格式:排序, key要排序的字段,order固定,取值asc或desc,不需要排序,传"" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                     {"key":{"order":"asc|desc"}} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                  ] 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    private static SearchSourceBuilder getQueryBuilder(String nestedPath,String jsonData) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        JSONObject json = JSONObject.parseObject(jsonData); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        List<Map<String, Object>> filter = (List)json.getJSONArray("filter"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        int page = json.getIntValue("page"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        int size = json.getIntValue("size"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        int page = json.getIntValue("page") == 0 ? 1:json.getIntValue("page"); //从第一页开始 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        int size = json.getIntValue("size") == 0 ? 1:json.getIntValue("size"); //默认值为1,最少获取一条记录 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        JSONArray sort = json.getJSONArray("sort"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        boolQueryBuilder = getBoolQueryBuilder(nestedPath,jsonData,false);//非嵌套的数据查询不需要nested 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        NestedQueryBuilder nestedQueryBuilder = getNestedBuilder(nestedPath,jsonData);//嵌套的数据查询 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        QueryFilterBuilder filterBuilder = QueryBuilders.queryFilter(nestedQueryBuilder); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        FilteredQueryBuilder filteredQueryBuilder = QueryBuilders.filteredQuery(boolQueryBuilder,filterBuilder); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        searchSourceBuilder.from((page -1)*size); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        searchSourceBuilder.size(size); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        //排序 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if(CollectionUtils.notEmpty(sort)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            for(Object obj:sort){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                JSONObject object = JSONObject.parseObject(obj.toString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                FieldSortBuilder fieldSortBuilder = null; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                for(String key:object.keySet()){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    if(!CollectionUtils.isEmpty(fieldsMap.get(nestedPath)) && fieldsMap.get(nestedPath).contains(key)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        fieldSortBuilder = new FieldSortBuilder("data." + key); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    }else{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        fieldSortBuilder = new FieldSortBuilder(key); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    JSONObject sortValue = object.getJSONObject(key); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    if(StringUtils.equalsIgnoreCase(SortOrder.ASC.toString(),sortValue.getString("order"))){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        fieldSortBuilder.order(SortOrder.ASC); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    }else if(StringUtils.equalsIgnoreCase(SortOrder.DESC.toString(),sortValue.getString("order"))){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        fieldSortBuilder.order(SortOrder.DESC); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    fieldSortBuilder.setNestedPath("data"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    searchSourceBuilder.sort(fieldSortBuilder); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        searchSourceBuilder.query(filteredQueryBuilder); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return searchSourceBuilder; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 嵌套的查询query 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param nestedPath 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param queryCondition 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    private static NestedQueryBuilder getNestedBuilder(String nestedPath,String queryCondition){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        boolQueryBuilder = getBoolQueryBuilder(nestedPath,queryCondition,true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        NestedQueryBuilder nestedQueryBuilder = QueryBuilders.nestedQuery(nestedPath,boolQueryBuilder); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return nestedQueryBuilder; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 构造bool查询(里面有匹配,过滤,范围等) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param nestedPath 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param queryCondition 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    private static BoolQueryBuilder getBoolQueryBuilder(String nestedPath,String queryCondition,Boolean isNested){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        JSONObject jsonCondition = JSONObject.parseObject(queryCondition); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        List<Map<String, Object>> filter = (List)jsonCondition.getJSONArray("filter"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        for(Map<String, Object> param : filter) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            String andOr = String.valueOf(param.get("andOr")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            String condition = String.valueOf(param.get("condition")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            String field = String.valueOf(param.get("field")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            Object value = param.get("value"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            String baseName = DataTypeEnum.body_sign_params.name().toString(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            if(null != DataStandardConvertService.dataMap.get(baseName) && DataStandardConvertService.dataMap.get(baseName).contains(field) || StringUtils.equalsIgnoreCase("rid",field)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                field = "data." + field; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            if(!isNested){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                if(!CollectionUtils.isEmpty(fieldsMap.get(nestedPath)) && fieldsMap.get(nestedPath).contains(field)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    continue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            }else{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                if(!CollectionUtils.isEmpty(fieldsMap.get(nestedPath)) && !fieldsMap.get(nestedPath).contains(field)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    continue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                field = nestedPath + "." + field; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            if(condition.equals("=")) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            if(null == condition){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                MatchQueryBuilder matchQueryBuilder = QueryBuilders.matchPhraseQuery(field, value); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                if(null == andOr) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    boolQueryBuilder.must(matchQueryBuilder); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            }else if(condition.equals("=")) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                MatchQueryBuilder matchQueryBuilder = QueryBuilders.matchPhraseQuery(field, value); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                if("and".equals(andOr)) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    boolQueryBuilder.must(matchQueryBuilder); 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@ -214,7 +286,7 @@ public class DataSearchService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    boolQueryBuilder.should(queryStringQueryBuilder); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            }else { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                RangeQueryBuilder rangeQueryBuilder = QueryBuilders.rangeQuery(field);; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                RangeQueryBuilder rangeQueryBuilder = QueryBuilders.rangeQuery(field); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                if(field.endsWith("Date")) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    rangeQueryBuilder.format("yyyy-MM-dd HH:mm:ss"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                } 
			 | 
		
	
	
		
			
				| 
					
				 | 
			
			
				@ -234,60 +306,186 @@ public class DataSearchService { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        searchSourceBuilder.query(boolQueryBuilder); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        searchSourceBuilder.from((page -1)*size); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        searchSourceBuilder.size(size); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if(CollectionUtils.notEmpty(sort)){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            for(Object obj:sort){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                JSONObject object = JSONObject.parseObject(obj.toString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                for(String key:object.keySet()){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    FieldSortBuilder fieldSortBuilder = new FieldSortBuilder(key); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    JSONObject sortValue = object.getJSONObject(key); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    if(StringUtils.equalsIgnoreCase(SortOrder.ASC.toString(),sortValue.getString("order"))){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        fieldSortBuilder.order(SortOrder.ASC); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    }else if(StringUtils.equalsIgnoreCase(SortOrder.DESC.toString(),sortValue.getString("order"))){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        fieldSortBuilder.order(SortOrder.DESC); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    searchSourceBuilder.sort(fieldSortBuilder); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return searchSourceBuilder; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return boolQueryBuilder; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 修改 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 修改字段 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * {"rid":"", 要修改的文档data id 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     *  "key":"value", key:要修改的字段,value:要修改的值 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     *  <{...}>} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param json 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public String updateFiled(String json){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return "success"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public static void main(String args[]) {} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public String updateData(String json) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        JSONObject params = JSONObject.parseObject(json); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        //拿到rid,构造通用查询结构,查询对应es Id 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String rid = params.getString("rid"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        JSONObject queryField = new JSONObject(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        queryField.put("field","rid"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        queryField.put("value",rid); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        JSONArray filter = new JSONArray(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        filter.add(queryField); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        JSONObject query = new JSONObject(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        query.put("filter",filter); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        SearchSourceBuilder queryString = getQueryBuilder("data",query.toJSONString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        JSONArray datas = new JSONArray(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        JSONObject resultObject = new JSONObject(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String _id = ""; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            //将该rid的文档取出来 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            SearchResult searchResult = elastricSearchHelper.search(ConstantUtils.esIndex, ConstantUtils.esType, queryString.toString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            params.remove("rid"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            _id = getEsId(searchResult.getJsonString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            String resultSource = searchResult.getSourceAsString(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            //inner,nested object在es中修改只支持替换整个的object 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            resultObject = (JSONObject) JSONObject.parse(String.valueOf(resultSource)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            //文档里的data数组对象数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            datas = (JSONArray) resultObject.get("data"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            for (Object data : datas) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                JSONObject dataJson = (JSONObject) data; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                if (StringUtils.equalsIgnoreCase(rid, dataJson.getString("rid"))) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    for (String key : params.keySet()) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        dataJson.put(key, params.get(key));//改的是data里面的数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        }catch (Exception e){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            logger.error("get data failed from elasticsearch",e.getMessage()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            return "no data for rid:"+ rid +",update failed"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        JSONObject updateObj = new JSONObject(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        updateObj.put("data",datas); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				//        boolean bool = elastricSearchHelper.update(ConstantUtils.esIndex, ConstantUtils.esType, _id, updateObj.toJSONString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				//        Update update = new Update(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				//        update. 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        boolean bool = elastricSearchHelper.update(ConstantUtils.esIndex, ConstantUtils.esType, _id, resultObject); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return String.valueOf(bool); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    private String getEsId(String str){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String _id = ""; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        JSONObject jsonObject = JSONObject.parseObject(str); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        JSONObject hist1 = jsonObject.getJSONObject("hits"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        JSONArray array = (JSONArray)hist1.get("hits"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        for(Object obj:array){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            _id  = ((JSONObject)obj).getString("_id"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return _id; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 根据从es中搜索出来的结果去hbase中查询数据内容 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param rowkeys 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param esResult 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public String getDataFromHbase(List<String> rowkeys,SearchResult esResult){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        long time = System.currentTimeMillis(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        logger.info("load data from hbase start:" + org.apache.http.client.utils.DateUtils.formatDate(new Date(), DateUtil.yyyy_MM_dd_HH_mm_ss)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        JSONObject resultJsonObj = new JSONObject(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        JSONArray  resultArray = new JSONArray(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        List<Map<String, Object>> resultList = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        try { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            //拿到rowkey后,去hbase读取数据内容 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            Result[] hbaseData = hBaseHelper.getResultList(ConstantUtils.tableName,rowkeys); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            for(Result res:hbaseData){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                List<Cell> ceList = res.listCells(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                if(null == ceList){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    continue; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                Map<String, Object> map = new HashMap<String, Object>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                String rowkey = Bytes.toString(res.getRow()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                //rowkey是根据一些头部数据加密而来,解密即可还原 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                String tag = RowKeyUtils.getMessageFromRowKey(rowkey); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                String[] tags = tag.split(","); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                map.put("access_token", tags[0]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                map.put("sn", tags[1]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                map.put("ext_code", tags[2]); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                if (ceList != null && ceList.size() > 0) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    for (Cell cell : ceList) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                        map.put(Bytes.toString(cell.getQualifierArray(), cell.getQualifierOffset(), cell.getQualifierLength()), 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                                Bytes.toString(cell.getValueArray(), cell.getValueOffset(), cell.getValueLength())); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                resultList.add(map); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } catch (Exception e) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            e.printStackTrace(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            logger.error("get data from hbase failed.",e.getMessage()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            return esResult.getSourceAsString(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        resultArray.addAll(resultList); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        resultJsonObj.put("data",resultArray); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        resultJsonObj.put("count",esResult.getTotal()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        long count = System.currentTimeMillis() - time; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        logger.info("load data from hbase end:" + org.apache.http.client.utils.DateUtils.formatDate(new Date(), DateUtil.yyyy_MM_dd_HH_mm_ss) + ",count: " + count); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return resultJsonObj.toJSONString(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 体征数据查询,数据转为视图展示VO类 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param jsonData 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public List<DataBodySignsVO> getDataToBean(String jsonData){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        List<DataBodySignsVO> result = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        logger.info("load data from elasticsearch start:" + org.apache.http.client.utils.DateUtils.formatDate(new Date(), DateUtil.yyyy_MM_dd_HH_mm_ss)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        SearchSourceBuilder query = getQueryBuilder("data",jsonData); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        SearchResult esResult = elastricSearchHelper.search(ConstantUtils.esIndex,ConstantUtils.esType,query.toString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if(null!= esResult && esResult.getTotal() == 0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            return result; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        for(String str :esResult.getSourceAsStringList()){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            DataBodySignsVO dataBodySignsVO = JSONObject.parseObject(str,DataBodySignsVO.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            result.add(dataBodySignsVO); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return result; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    /** 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * 查询微信运动数据 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @param json 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     * @return 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				     */ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public List<WeRunDataVO> getWeRunDataList(String json){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        List<WeRunDataVO> result = new ArrayList<>(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        SearchSourceBuilder query = getQueryBuilder("stepInfoList",json); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        SearchResult esResult = elastricSearchHelper.search(ConstantUtils.weRunDataIndex,ConstantUtils.weRunDataType,query.toString()); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        if(null != esResult && esResult.getTotal() == 0){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            return result; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        for(String str:esResult.getSourceAsStringList()){ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            WeRunDataVO weRunDataVO = JSONObject.parseObject(str,WeRunDataVO.class); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				            result.add(weRunDataVO); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        return result; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    public static void main(String args[]) { 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        init(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        String str = "{\n" + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                "\t\"filter\":[{\n" + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                "\t\t\"andOr\":\"and\",\n" + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                "\t\t\"condition\":\"=\",\n" + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                "\t\t\"field\":\"usercode\",\n" + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                "\t\t\"value\":\"thisisjustatest\"\n" + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                "\t},\n" + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                "\t{\n" + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                "\t\t\"andOr\":\"and\",\n" + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                "\t\t\"condition\":\"=\",\n" + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                "\t\t\"field\":\"step\",\n" + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                "\t\t\"value\":100\n" + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                "\t}\n" + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                "\t]\n" + 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				                "}\n"; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				        getQueryBuilder("stepInfoList",str); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				    } 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				} 
			 |