|
@ -1,36 +1,45 @@
|
|
package com.yihu.iot.datainput.service;
|
|
package com.yihu.iot.datainput.service;
|
|
|
|
|
|
import com.alibaba.fastjson.JSON;
|
|
|
|
import com.alibaba.fastjson.JSONArray;
|
|
import com.alibaba.fastjson.JSONArray;
|
|
import com.alibaba.fastjson.JSONObject;
|
|
import com.alibaba.fastjson.JSONObject;
|
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
import com.google.gson.JsonArray;
|
|
|
|
import com.yihu.base.es.config.ElastricSearchHelper;
|
|
import com.yihu.base.es.config.ElastricSearchHelper;
|
|
import com.yihu.base.hbase.HBaseHelper;
|
|
import com.yihu.base.hbase.HBaseHelper;
|
|
import com.yihu.iot.datainput.enums.DataTypeEnum;
|
|
import com.yihu.iot.datainput.enums.DataTypeEnum;
|
|
import com.yihu.iot.datainput.util.ConstantUtils;
|
|
import com.yihu.iot.datainput.util.ConstantUtils;
|
|
import com.yihu.iot.datainput.util.RowKeyUtils;
|
|
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.SearchResult;
|
|
|
|
import io.searchbox.core.Update;
|
|
import org.apache.commons.lang.StringUtils;
|
|
import org.apache.commons.lang.StringUtils;
|
|
import org.apache.hadoop.hbase.Cell;
|
|
import org.apache.hadoop.hbase.Cell;
|
|
import org.apache.hadoop.hbase.client.Result;
|
|
import org.apache.hadoop.hbase.client.Result;
|
|
import org.apache.hadoop.hbase.util.Bytes;
|
|
import org.apache.hadoop.hbase.util.Bytes;
|
|
import org.apache.hadoop.hbase.util.CollectionUtils;
|
|
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.index.query.*;
|
|
import org.elasticsearch.search.builder.SearchSourceBuilder;
|
|
import org.elasticsearch.search.builder.SearchSourceBuilder;
|
|
import org.elasticsearch.search.sort.FieldSortBuilder;
|
|
import org.elasticsearch.search.sort.FieldSortBuilder;
|
|
import org.elasticsearch.search.sort.SortBuilder;
|
|
|
|
import org.elasticsearch.search.sort.SortOrder;
|
|
import org.elasticsearch.search.sort.SortOrder;
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.LoggerFactory;
|
|
import org.slf4j.LoggerFactory;
|
|
|
|
import org.springframework.beans.BeanUtils;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
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 org.springframework.stereotype.Component;
|
|
|
|
|
|
|
|
import javax.annotation.PostConstruct;
|
|
|
|
import java.beans.PropertyDescriptor;
|
|
import java.io.IOException;
|
|
import java.io.IOException;
|
|
import java.util.ArrayList;
|
|
|
|
import java.util.HashMap;
|
|
|
|
import java.util.List;
|
|
|
|
import java.util.Map;
|
|
|
|
|
|
import java.util.*;
|
|
|
|
|
|
@Component
|
|
@Component
|
|
public class DataSearchService {
|
|
public class DataSearchService {
|
|
@ -43,14 +52,30 @@ public class DataSearchService {
|
|
@Autowired
|
|
@Autowired
|
|
private HBaseHelper hBaseHelper;
|
|
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
|
|
* 拼接es搜索json string
|
|
* @param json
|
|
* @param json
|
|
* @return
|
|
* @return
|
|
*/
|
|
*/
|
|
public static String getQueryString(String json){
|
|
public static String getQueryString(String json){
|
|
JSONObject jsonObject = (JSONObject)JSONObject.parse(json);
|
|
|
|
|
|
JSONObject jsonObject = JSONObject.parseObject(json);
|
|
//第一层query
|
|
//第一层query
|
|
JSONObject query = new JSONObject();
|
|
JSONObject query = new JSONObject();
|
|
//bool层
|
|
//bool层
|
|
@ -111,17 +136,10 @@ public class DataSearchService {
|
|
}
|
|
}
|
|
|
|
|
|
public String getData(String jsonData){
|
|
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();
|
|
JSONObject resultJsonObj = new JSONObject();
|
|
JSONArray resultArray = new JSONArray();
|
|
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());
|
|
SearchResult esResult = elastricSearchHelper.search(ConstantUtils.esIndex,ConstantUtils.esType,query.toString());
|
|
if(esResult.getTotal() == 0){
|
|
if(esResult.getTotal() == 0){
|
|
return "";
|
|
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();
|
|
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);
|
|
JSONObject json = JSONObject.parseObject(jsonData);
|
|
List<Map<String, Object>> filter = (List)json.getJSONArray("filter");
|
|
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");
|
|
JSONArray sort = json.getJSONArray("sort");
|
|
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
|
|
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
|
|
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
|
|
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) {
|
|
for(Map<String, Object> param : filter) {
|
|
String andOr = String.valueOf(param.get("andOr"));
|
|
String andOr = String.valueOf(param.get("andOr"));
|
|
String condition = String.valueOf(param.get("condition"));
|
|
String condition = String.valueOf(param.get("condition"));
|
|
String field = String.valueOf(param.get("field"));
|
|
String field = String.valueOf(param.get("field"));
|
|
Object value = param.get("value");
|
|
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);
|
|
MatchQueryBuilder matchQueryBuilder = QueryBuilders.matchPhraseQuery(field, value);
|
|
if("and".equals(andOr)) {
|
|
if("and".equals(andOr)) {
|
|
boolQueryBuilder.must(matchQueryBuilder);
|
|
boolQueryBuilder.must(matchQueryBuilder);
|
|
@ -214,7 +286,7 @@ public class DataSearchService {
|
|
boolQueryBuilder.should(queryStringQueryBuilder);
|
|
boolQueryBuilder.should(queryStringQueryBuilder);
|
|
}
|
|
}
|
|
}else {
|
|
}else {
|
|
RangeQueryBuilder rangeQueryBuilder = QueryBuilders.rangeQuery(field);;
|
|
|
|
|
|
RangeQueryBuilder rangeQueryBuilder = QueryBuilders.rangeQuery(field);
|
|
if(field.endsWith("Date")) {
|
|
if(field.endsWith("Date")) {
|
|
rangeQueryBuilder.format("yyyy-MM-dd HH:mm:ss");
|
|
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
|
|
* @param json
|
|
* @return
|
|
* @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);
|
|
|
|
}
|
|
|
|
|
|
}
|
|
}
|