Browse Source

查询参数格式化

LiTaohong 7 years ago
parent
commit
401eca9321

+ 1 - 1
base/common-data-es/src/main/java/com/yihu/base/es/config/ElastricSearchHelper.java

@ -134,7 +134,7 @@ public class ElastricSearchHelper {
    /**
     * 删除
     */
    private void deleteData(String index, String type, List<SaveModel> saveModels) {
    public void deleteData(String index, String type, List<SaveModel> saveModels) {
        JestClient jestClient = null;
        try {
            jestClient = elasticFactory.getJestClient();

+ 1 - 0
common/common-request-mapping/src/main/java/com/yihu/jw/rm/iot/DataRequestMapping.java

@ -23,6 +23,7 @@ public class DataRequestMapping {
        public static final String api_data_input = "input";//数据上传
        public static final String api_user_bind = "userBind";//设备注册绑定
        public static final String api_update_record = "updateRecord";//更新体征状态标识
        public static final String api_delete_record = "deleteRecord";//更新体征状态标识
        public static final String message_success = "upload success";
        public static final String message_fail = "upload fail";

+ 6 - 1
common/common-util/src/main/java/com/yihu/jw/util/spring/SpringContext.java

@ -1,10 +1,13 @@
package com.yihu.jw.util.spring;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
/**
 * Spring上下文管理器。
 *
@ -13,7 +16,9 @@ import org.springframework.stereotype.Component;
 * @created 12-05-2015 17:47:55
 */
@Component
public class SpringContext implements ApplicationContextAware {
public class SpringContextHolder implements ApplicationContextAware {
    @Autowired
    private static ApplicationContext springContext = null;
    /**

+ 5 - 0
svr/svr-iot/pom.xml

@ -126,6 +126,11 @@
            <artifactId>common-data-es</artifactId>
            <version>1.0.0</version>
        </dependency>
        <dependency>
            <groupId>com.yihu.jw</groupId>
            <artifactId>common-util</artifactId>
            <version>1.0.0</version>
        </dependency>
    </dependencies>
    <build>
        <finalName>svr-iot</finalName>

+ 11 - 1
svr/svr-iot/src/main/java/com/yihu/iot/datainput/controller/DataInputController.java

@ -55,7 +55,17 @@ public class DataInputController {
    @ApiOperation(value = "用户体征状态修改", notes = "用户体征状态修改,0-标准,1-异常")
    public Envelop updateRecord(@ApiParam(name = "json_data", value = "", defaultValue = "") @RequestBody String jsonData){
        try{
            return Envelop.getSuccess(DataRequestMapping.DataInput.message_success,dataInputService.bindUser(jsonData));
            return Envelop.getSuccess(DataRequestMapping.DataInput.message_success,dataInputService.updateRecordStatus(jsonData));
        } catch (ApiException e){
            return Envelop.getError(e.getMessage(), e.getErrorCode());
        }
    }
    @PostMapping(value = DataRequestMapping.DataInput.api_delete_record, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
    @ApiOperation(value = "删除体征数据", notes = "删除标志,支持伪删除")
    public Envelop deleteRecord(@ApiParam(name = "json_data", value = "", defaultValue = "") @RequestBody String jsonData){
        try{
            return Envelop.getSuccess(DataRequestMapping.DataInput.message_success,dataInputService.updateRecordStatus(jsonData));
        } catch (ApiException e){
            return Envelop.getError(e.getMessage(), e.getErrorCode());
        }

+ 4 - 12
svr/svr-iot/src/main/java/com/yihu/iot/datainput/controller/DataSearchController.java

@ -27,9 +27,8 @@ public class DataSearchController {
    @PostMapping(value = DataRequestMapping.DataSearch.api_data_search_one, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
    @ApiOperation(value = "查询单条数据", notes = "根据id查询单条数据")
    public Envelop getOne(@ApiParam(name = "id", value = "", defaultValue = "") @RequestBody String id){
    public Envelop getOne(@ApiParam(name = "json_data", value = "", defaultValue = "") @RequestBody String jsonData){
        try{
            String jsonData = "{\"id\":" + id + "}";
            return Envelop.getSuccess(DataRequestMapping.DataInput.message_success,dataSearchService.getData(jsonData));
        } catch (ApiException e){
            return Envelop.getError(e.getMessage(), e.getErrorCode());
@ -78,10 +77,8 @@ public class DataSearchController {
    @PostMapping(value = DataRequestMapping.DataSearch.api_user_search_recent1, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
    @ApiOperation(value = "查询体征数据", notes = "根据居民code和删除标识获取最近一次体征数据")
    public Envelop getOneByCodeAndDel(@ApiParam(name = "userCode", value = "", defaultValue = "") @RequestBody String userCode,
                                      @ApiParam(name = "del", value = "", defaultValue = "") @RequestBody String del) {
    public Envelop getOneByCodeAndDel(@ApiParam(name = "json_data", value = "", defaultValue = "") @RequestBody String jsonData) {
        try {
            String jsonData = "{\"userCode\":" + userCode + ",\"del\":" + del + "}";
            return Envelop.getSuccess(DataRequestMapping.DataInput.message_success, dataSearchService.getData(jsonData));
        } catch (ApiException e) {
            return Envelop.getError(e.getMessage(), e.getErrorCode());
@ -90,17 +87,12 @@ public class DataSearchController {
    @PostMapping(value = DataRequestMapping.DataSearch.api_user_search_list_code_del, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
    @ApiOperation(value = "查询体征数据", notes = "根据居民code和删除标识获取所有体征数据,时间倒序")
    public Envelop getListByCodeAndDel(
            @ApiParam(name = "userCode", value = "", defaultValue = "") @RequestBody String userCode,
            @ApiParam(name = "del", value = "", defaultValue = "") @RequestBody String del){
    public Envelop getListByCodeAndDel(@ApiParam(name = "json_data", value = "", defaultValue = "") @RequestBody String jsonData){
        try{
            String jsonData = "{\"userCode\":"+userCode+",\"del\":"+ del +"}";
            SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
            searchSourceBuilder.query(QueryBuilders.matchQuery("user", "kimchy"));
//            searchSourceBuilder.query(JSONObject.parseObject(jsonData).);
            return Envelop.getSuccess(DataRequestMapping.DataInput.message_success,dataSearchService.getData(jsonData));
        } catch (ApiException e){
            return Envelop.getError(e.getMessage(), e.getErrorCode());
        }
    }
}

+ 1 - 1
svr/svr-iot/src/main/java/com/yihu/iot/datainput/dao/DataStandardDao.java

@ -9,6 +9,6 @@ import java.util.List;
public interface DataStandardDao extends PagingAndSortingRepository<DataStandardDO, String>, JpaSpecificationExecutor<DataStandardDO> {
    @Query("select baseName,itemCode,itemName,itemType,required,itemValueMin,itemValueMax from DataStandardDO" )
    @Query("from DataStandardDO" )
    List<DataStandardDO>  getList();
}

+ 20 - 0
svr/svr-iot/src/main/java/com/yihu/iot/datainput/service/DataInputService.java

@ -198,4 +198,24 @@ public class DataInputService {
        return "success";
    }
    /**
     * 修改用户体征状态标志
     * @param json
     * @return
     */
    public String updateRecordStatus(String json){
//        elastricSearchHelper.update();
        return "";
    }
    /**
     * 修改用户体征状态标志
     * @param json
     * @return
     */
    public String deleteRecord(String json){
//        elastricSearchHelper.deleteData();
        return "";
    }
}

+ 82 - 5
svr/svr-iot/src/main/java/com/yihu/iot/datainput/service/DataSearchService.java

@ -1,13 +1,24 @@
package com.yihu.iot.datainput.service;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.yihu.base.es.config.ElastricSearchHelper;
import com.yihu.base.hbase.HBaseHelper;
import com.yihu.iot.datainput.util.ConstantUtils;
import io.searchbox.core.Search;
import org.apache.commons.lang.StringUtils;
import org.elasticsearch.action.search.SearchRequestBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.index.query.TermQueryBuilder;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.ArrayList;
import java.util.List;
@Component
public class DataSearchService {
@ -19,17 +30,83 @@ public class DataSearchService {
    @Autowired
    private HBaseHelper hBaseHelper;
    /**
     * 获取数据
     * 拼接es搜索json string
     * @param json
     * @return
     */
    public String getData(String json){
        String result = elastricSearchHelper.search(ConstantUtils.esIndex,ConstantUtils.esType,json);
        if(null == result){
            return "no data";
    public static String getQueryString(String json){
        JSONObject jsonObject = (JSONObject)JSONObject.parse(json);
        //第一层query
        JSONObject query = new JSONObject();
        //bool层
        JSONObject boolQuery = new JSONObject();
        // and 还是 or,es中key为and--->must,or--->should
        JSONObject mustOrShouldQuery = new JSONObject();
        //匹配项,字段-值
        JSONArray jsonArray = new JSONArray();
        for(String key : jsonObject.keySet()){
            //分页用,from表示数据从第几条开始取
            if(StringUtils.equalsIgnoreCase("from",key)){
                query.put("from",jsonObject.getInteger("from"));
                continue;
            }
            //分页用,size表示获取几条数据
            if(StringUtils.equalsIgnoreCase("size",key)){
                query.put("size",jsonObject.getInteger("size"));
                continue;
            }
            //排序
            if(StringUtils.equalsIgnoreCase("sort",key)){
                JSONObject sortJsonObj = (JSONObject)jsonObject.get("sort");
                for(String sortKey:sortJsonObj.keySet()){
                    if(!StringUtils.equalsIgnoreCase("asc",sortJsonObj.getString(sortKey)) && !StringUtils.equalsIgnoreCase("desc",sortJsonObj.getString(sortKey) )){
                        JSONObject error = new JSONObject();
                        error.put("error","sort contains bad value !");
                        return error.toJSONString();
                    }
                }
                query.put("sort",sortJsonObj);
                continue;
            }
            JSONObject matchQuery = new JSONObject();
            JSONObject subQuery = new JSONObject();
            if(DataStandardConvertService.dataMap.get("body_sign_params").contains(key)){
                subQuery.put("data."+key,jsonObject.get(key)); //data数据里内嵌的字段,真正的数据值内容
            }else{
                subQuery.put(key,jsonObject.get(key));
            }
            matchQuery.put("match",subQuery);
            jsonArray.add(matchQuery);
        }
        //默认为must
        if(null != jsonObject.get("should") && StringUtils.equals("should",jsonObject.getString("should"))){
            mustOrShouldQuery.put("should",jsonArray);
        }else{
            mustOrShouldQuery.put("must",jsonArray);
        }
        boolQuery.put("bool",mustOrShouldQuery);
        query.put("query",boolQuery);
        return query.toJSONString();
    }
    public String getData(String jsonData){
        String query = getQueryString(jsonData);
        String result = elastricSearchHelper.search(ConstantUtils.esIndex,ConstantUtils.esType,query);
        return result;
    }
    public static void main(String args[]){
        String str = "{\n" +
                "\t\"systolic\":\"59\",\n" +
                "\t\"extcode\":\"1\",\n" +
                "\t\"from\":1,\n" +
                "\t\"size\":5\n" +
                "}";
        System.out.println(getQueryString(str));
    }
}

+ 7 - 4
svr/svr-iot/src/main/java/com/yihu/iot/datainput/service/DataStandardConvertService.java

@ -6,12 +6,14 @@ import com.yihu.iot.datainput.enums.DataDeviceTypeEnum;
import com.yihu.iot.datainput.enums.DataOperationTypeEnum;
import com.yihu.jw.iot.data_input.DataStandardDO;
import com.yihu.jw.util.date.DateUtil;
import com.yihu.jw.util.spring.SpringContextHolder;
import org.apache.http.client.utils.DateUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import java.util.*;
/**
@ -21,21 +23,22 @@ import java.util.*;
public class DataStandardConvertService {
    private Logger logger = LoggerFactory.getLogger(DataStandardConvertService.class);
    public static Map<String,List<Object>> dataMap = new HashMap<>();
    public  static Map<String,List<Object>> dataMap = new HashMap<>();
    @Autowired
    private DataProcessLogService dataProcessLogService;
    @Autowired
    private DataStandardService dataStandardService;
    @Autowired
    private DataProcessLogService dataProcessLogService;
    /**
     * 从数据库读取标准,并放到map,key为协议大类名称,目前只有体征数据协议
     */
    @PostConstruct
    public void init(){
        List<DataStandardDO>  resultList = dataStandardService.getList();
        if(null == resultList && resultList.size() < 1){
        if(null == resultList || resultList.isEmpty()){
            return;
        }
        List list = new ArrayList();