浏览代码

体征数据更新删除接口,微信运动数据上传查询接口

LiTaohong 7 年之前
父节点
当前提交
d79af31c72
共有 19 个文件被更改,包括 595 次插入212 次删除
  1. 6 4
      base/common-data-es/src/main/java/com/yihu/base/es/config/ElastricSearchHelper.java
  2. 96 96
      common/common-entity/src/main/java/com/yihu/jw/iot/datainput/Data.java
  3. 28 0
      common/common-entity/src/main/java/com/yihu/jw/iot/datainput/StepInfoDO.java
  4. 38 0
      common/common-entity/src/main/java/com/yihu/jw/iot/datainput/WeRunDataDO.java
  5. 5 4
      common/common-request-mapping/src/main/java/com/yihu/jw/rm/iot/DataRequestMapping.java
  6. 32 0
      common/common-rest-model/src/main/java/com/yihu/jw/restmodel/iot/datainput/StepInfoVO.java
  7. 39 0
      common/common-rest-model/src/main/java/com/yihu/jw/restmodel/iot/datainput/WeRunDataVO.java
  8. 18 6
      svr/svr-iot/src/main/java/com/yihu/iot/datainput/controller/DataInputController.java
  9. 32 9
      svr/svr-iot/src/main/java/com/yihu/iot/datainput/controller/DataSearchController.java
  10. 32 1
      svr/svr-iot/src/main/java/com/yihu/iot/datainput/service/DataInputService.java
  11. 175 69
      svr/svr-iot/src/main/java/com/yihu/iot/datainput/service/DataSearchService.java
  12. 7 0
      svr/svr-iot/src/main/java/com/yihu/iot/datainput/util/ConstantUtils.java
  13. 1 0
      web-gateway/src/main/java/com/yihu/jw/commnon/iot/DataConstants.java
  14. 12 7
      web-gateway/src/main/java/com/yihu/jw/controller/iot/data_input/DataInputController.java
  15. 33 15
      web-gateway/src/main/java/com/yihu/jw/controller/iot/data_input/DataSearchController.java
  16. 8 1
      web-gateway/src/main/java/com/yihu/jw/feign/fallbackfactory/iot/data_input/DataInputFeignFallbackFactory.java
  17. 21 0
      web-gateway/src/main/java/com/yihu/jw/feign/fallbackfactory/iot/data_input/DataSearchFeignFallbackFactory.java
  18. 3 0
      web-gateway/src/main/java/com/yihu/jw/feign/iot/data_input/DataInputFeign.java
  19. 9 0
      web-gateway/src/main/java/com/yihu/jw/feign/iot/data_input/DataSearchFeign.java

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

@ -67,6 +67,7 @@ public class ElastricSearchHelper {
    public Boolean save(String index, String type, String source) {
        JestClient jestClient = null;
        BulkResult br = null;
        try {
            //得到链接elasticFactory.getJestClient();
            jestClient = elasticFactory.getJestClient();
@ -81,7 +82,7 @@ public class ElastricSearchHelper {
                logger.error(e.getMessage());
                error++;
            }
            BulkResult br = jestClient.execute(bulk.build());
            br = jestClient.execute(bulk.build());
            logger.info("save flag:" + br.isSucceeded());
            logger.info("save success:" + success);
            logger.info("save error:" + error);
@ -93,12 +94,13 @@ public class ElastricSearchHelper {
                jestClient.shutdownClient();
            }
        }
        return null;
        return br.isSucceeded();
    }
    public Boolean update(String index, String type, List<SaveModel> sms) {
        JestClient jestClient = null;
        BulkResult br = null;
        try {
            //得到链接
            jestClient = elasticFactory.getJestClient();
@ -120,7 +122,7 @@ public class ElastricSearchHelper {
                }
            }
            BulkResult br = jestClient.execute(bulk.build());
            br = jestClient.execute(bulk.build());
            logger.info("update flag:" + br.isSucceeded());
            logger.info("update success:" + success);
            logger.info("update error:" + error);
@ -132,7 +134,7 @@ public class ElastricSearchHelper {
                jestClient.shutdownClient();
            }
        }
        return null;
        return br.isSucceeded();
    }
    /**

+ 96 - 96
common/common-entity/src/main/java/com/yihu/jw/iot/datainput/Data.java

@ -7,66 +7,66 @@ public class Data {
    private String rid; // 存到hbase中的id
    private int del = 1; //删除标记,1代表正常,0代表删除
    private String measure_time;     //测量时间  yyyy-MM-dd HH:mm:ss
    private double systolic;        //收缩压
    private String systolic;        //收缩压
    private String systolic_unit;   //收缩压测量单位
    private double diastolic;       //舒张压
    private double pulse;            //脉搏
    private String diastolic;       //舒张压
    private String pulse;            //脉搏
    private String pulse_unit;
    private double blood_sugar;     //血糖
    private String blood_sugar;     //血糖
    private String blood_sugar_unit;
    private double blood_sugar_result;
    private double blood_oxygen; //血氧
    private String blood_sugar_result;
    private String blood_oxygen; //血氧
    private String blood_oxygen_unit;
    private double bbt; //体温
    private String bbt; //体温
    private String bbt_unit;
    private double ket; //酮体
    private String ket; //酮体
    private String ket_unit;
    private double uro; //尿胆原
    private String uro; //尿胆原
    private String uro_unit;
    private double uric_acid;   //尿酸
    private String uric_acid;   //尿酸
    private String uric_acid_unit;
    private double tchol;   //总胆固醇
    private String tchol;   //总胆固醇
    private String tchol_unit;
    private double hdl; //高密度脂蛋白
    private String hdl; //高密度脂蛋白
    private String hdl_unit;
    private double tg;  //甘油三酯
    private String tg;  //甘油三酯
    private String tg_unit;
    private double ldl; //低密度脂蛋白
    private String ldl; //低密度脂蛋白
    private String ldl_unit;
    private double height;  //身高
    private String height;  //身高
    private String height_unit;
    private double weight;  //体重
    private String weight;  //体重
    private String weight_unit;
    private double waist;   //腰围
    private String waist;   //腰围
    private String waist_unit;
    private double bmi; //BMI
    private String bmi; //BMI
    private String bmi_unit;
    private double hgb; //血红蛋白
    private String hgb; //血红蛋白
    private String hgb_unit;
    private double hbalc;   //糖化血红蛋白
    private String hbalc;   //糖化血红蛋白
    private String hbalc_unit;
    private double left_eye;//  左眼
    private String left_eye;//  左眼
    private String left_eye_unit;
    private double right_eye;// 左眼
    private String right_eye;// 左眼
    private String right_eye_unit;
    private double ecg; //心电
    private String ecg; //心电
    private String ecg_attach;
    private double ph;  //PH值
    private double nit; //亚硝酸盐
    private String ph;  //PH值
    private String nit; //亚硝酸盐
    private String nit_unit;
    private double pro; //蛋白质
    private String pro; //蛋白质
    private String pro_unit;
    private double glu; //葡萄糖
    private String glu; //葡萄糖
    private String glu_unit;
    private double bil; //胆红素
    private String bil; //胆红素
    private String bil_unit;
    private double sg;  //比重
    private String sg;  //比重
    private String sg_unit;
    private double wbc; //白细胞
    private String wbc; //白细胞
    private String wbc_unit;
    private double vc;      //维生素C
    private String vc;      //维生素C
    private String vc_unit;
    private double bld; //潜血
    private String bld; //潜血
    private String bld_unit;
    public String getRid() {
@ -93,11 +93,11 @@ public class Data {
        this.measure_time = measure_time;
    }
    public double getSystolic() {
    public String getSystolic() {
        return systolic;
    }
    public void setSystolic(double systolic) {
    public void setSystolic(String systolic) {
        this.systolic = systolic;
    }
@ -109,19 +109,19 @@ public class Data {
        this.systolic_unit = systolic_unit;
    }
    public double getDiastolic() {
    public String getDiastolic() {
        return diastolic;
    }
    public void setDiastolic(double diastolic) {
    public void setDiastolic(String diastolic) {
        this.diastolic = diastolic;
    }
    public double getPulse() {
    public String getPulse() {
        return pulse;
    }
    public void setPulse(double pulse) {
    public void setPulse(String pulse) {
        this.pulse = pulse;
    }
@ -133,11 +133,11 @@ public class Data {
        this.pulse_unit = pulse_unit;
    }
    public double getBlood_sugar() {
    public String getBlood_sugar() {
        return blood_sugar;
    }
    public void setBlood_sugar(double blood_sugar) {
    public void setBlood_sugar(String blood_sugar) {
        this.blood_sugar = blood_sugar;
    }
@ -149,19 +149,19 @@ public class Data {
        this.blood_sugar_unit = blood_sugar_unit;
    }
    public double getBlood_sugar_result() {
    public String getBlood_sugar_result() {
        return blood_sugar_result;
    }
    public void setBlood_sugar_result(double blood_sugar_result) {
    public void setBlood_sugar_result(String blood_sugar_result) {
        this.blood_sugar_result = blood_sugar_result;
    }
    public double getBlood_oxygen() {
    public String getBlood_oxygen() {
        return blood_oxygen;
    }
    public void setBlood_oxygen(double blood_oxygen) {
    public void setBlood_oxygen(String blood_oxygen) {
        this.blood_oxygen = blood_oxygen;
    }
@ -173,11 +173,11 @@ public class Data {
        this.blood_oxygen_unit = blood_oxygen_unit;
    }
    public double getBbt() {
    public String getBbt() {
        return bbt;
    }
    public void setBbt(double bbt) {
    public void setBbt(String bbt) {
        this.bbt = bbt;
    }
@ -189,11 +189,11 @@ public class Data {
        this.bbt_unit = bbt_unit;
    }
    public double getKet() {
    public String getKet() {
        return ket;
    }
    public void setKet(double ket) {
    public void setKet(String ket) {
        this.ket = ket;
    }
@ -205,11 +205,11 @@ public class Data {
        this.ket_unit = ket_unit;
    }
    public double getUro() {
    public String getUro() {
        return uro;
    }
    public void setUro(double uro) {
    public void setUro(String uro) {
        this.uro = uro;
    }
@ -221,11 +221,11 @@ public class Data {
        this.uro_unit = uro_unit;
    }
    public double getUric_acid() {
    public String getUric_acid() {
        return uric_acid;
    }
    public void setUric_acid(double uric_acid) {
    public void setUric_acid(String uric_acid) {
        this.uric_acid = uric_acid;
    }
@ -237,11 +237,11 @@ public class Data {
        this.uric_acid_unit = uric_acid_unit;
    }
    public double getTchol() {
    public String getTchol() {
        return tchol;
    }
    public void setTchol(double tchol) {
    public void setTchol(String tchol) {
        this.tchol = tchol;
    }
@ -253,11 +253,11 @@ public class Data {
        this.tchol_unit = tchol_unit;
    }
    public double getHdl() {
    public String getHdl() {
        return hdl;
    }
    public void setHdl(double hdl) {
    public void setHdl(String hdl) {
        this.hdl = hdl;
    }
@ -269,11 +269,11 @@ public class Data {
        this.hdl_unit = hdl_unit;
    }
    public double getTg() {
    public String getTg() {
        return tg;
    }
    public void setTg(double tg) {
    public void setTg(String tg) {
        this.tg = tg;
    }
@ -285,11 +285,11 @@ public class Data {
        this.tg_unit = tg_unit;
    }
    public double getLdl() {
    public String getLdl() {
        return ldl;
    }
    public void setLdl(double ldl) {
    public void setLdl(String ldl) {
        this.ldl = ldl;
    }
@ -301,11 +301,11 @@ public class Data {
        this.ldl_unit = ldl_unit;
    }
    public double getHeight() {
    public String getHeight() {
        return height;
    }
    public void setHeight(double height) {
    public void setHeight(String height) {
        this.height = height;
    }
@ -317,11 +317,11 @@ public class Data {
        this.height_unit = height_unit;
    }
    public double getWeight() {
    public String getWeight() {
        return weight;
    }
    public void setWeight(double weight) {
    public void setWeight(String weight) {
        this.weight = weight;
    }
@ -333,11 +333,11 @@ public class Data {
        this.weight_unit = weight_unit;
    }
    public double getWaist() {
    public String getWaist() {
        return waist;
    }
    public void setWaist(double waist) {
    public void setWaist(String waist) {
        this.waist = waist;
    }
@ -349,11 +349,11 @@ public class Data {
        this.waist_unit = waist_unit;
    }
    public double getBmi() {
    public String getBmi() {
        return bmi;
    }
    public void setBmi(double bmi) {
    public void setBmi(String bmi) {
        this.bmi = bmi;
    }
@ -365,11 +365,11 @@ public class Data {
        this.bmi_unit = bmi_unit;
    }
    public double getHgb() {
    public String getHgb() {
        return hgb;
    }
    public void setHgb(double hgb) {
    public void setHgb(String hgb) {
        this.hgb = hgb;
    }
@ -381,11 +381,11 @@ public class Data {
        this.hgb_unit = hgb_unit;
    }
    public double getHbalc() {
    public String getHbalc() {
        return hbalc;
    }
    public void setHbalc(double hbalc) {
    public void setHbalc(String hbalc) {
        this.hbalc = hbalc;
    }
@ -397,11 +397,11 @@ public class Data {
        this.hbalc_unit = hbalc_unit;
    }
    public double getLeft_eye() {
    public String getLeft_eye() {
        return left_eye;
    }
    public void setLeft_eye(double left_eye) {
    public void setLeft_eye(String left_eye) {
        this.left_eye = left_eye;
    }
@ -413,11 +413,11 @@ public class Data {
        this.left_eye_unit = left_eye_unit;
    }
    public double getRight_eye() {
    public String getRight_eye() {
        return right_eye;
    }
    public void setRight_eye(double right_eye) {
    public void setRight_eye(String right_eye) {
        this.right_eye = right_eye;
    }
@ -429,11 +429,11 @@ public class Data {
        this.right_eye_unit = right_eye_unit;
    }
    public double getEcg() {
    public String getEcg() {
        return ecg;
    }
    public void setEcg(double ecg) {
    public void setEcg(String ecg) {
        this.ecg = ecg;
    }
@ -445,19 +445,19 @@ public class Data {
        this.ecg_attach = ecg_attach;
    }
    public double getPh() {
    public String getPh() {
        return ph;
    }
    public void setPh(double ph) {
    public void setPh(String ph) {
        this.ph = ph;
    }
    public double getNit() {
    public String getNit() {
        return nit;
    }
    public void setNit(double nit) {
    public void setNit(String nit) {
        this.nit = nit;
    }
@ -469,11 +469,11 @@ public class Data {
        this.nit_unit = nit_unit;
    }
    public double getPro() {
    public String getPro() {
        return pro;
    }
    public void setPro(double pro) {
    public void setPro(String pro) {
        this.pro = pro;
    }
@ -485,11 +485,11 @@ public class Data {
        this.pro_unit = pro_unit;
    }
    public double getGlu() {
    public String getGlu() {
        return glu;
    }
    public void setGlu(double glu) {
    public void setGlu(String glu) {
        this.glu = glu;
    }
@ -501,11 +501,11 @@ public class Data {
        this.glu_unit = glu_unit;
    }
    public double getBil() {
    public String getBil() {
        return bil;
    }
    public void setBil(double bil) {
    public void setBil(String bil) {
        this.bil = bil;
    }
@ -517,11 +517,11 @@ public class Data {
        this.bil_unit = bil_unit;
    }
    public double getSg() {
    public String getSg() {
        return sg;
    }
    public void setSg(double sg) {
    public void setSg(String sg) {
        this.sg = sg;
    }
@ -533,11 +533,11 @@ public class Data {
        this.sg_unit = sg_unit;
    }
    public double getWbc() {
    public String getWbc() {
        return wbc;
    }
    public void setWbc(double wbc) {
    public void setWbc(String wbc) {
        this.wbc = wbc;
    }
@ -549,11 +549,11 @@ public class Data {
        this.wbc_unit = wbc_unit;
    }
    public double getVc() {
    public String getVc() {
        return vc;
    }
    public void setVc(double vc) {
    public void setVc(String vc) {
        this.vc = vc;
    }
@ -565,11 +565,11 @@ public class Data {
        this.vc_unit = vc_unit;
    }
    public double getBld() {
    public String getBld() {
        return bld;
    }
    public void setBld(double bld) {
    public void setBld(String bld) {
        this.bld = bld;
    }

+ 28 - 0
common/common-entity/src/main/java/com/yihu/jw/iot/datainput/StepInfoDO.java

@ -0,0 +1,28 @@
package com.yihu.jw.iot.datainput;
import com.fasterxml.jackson.annotation.JsonInclude;
/**
 * 微信运动具体时间步数实体类
 * @author lith on 2018/01/17.
 */
public class StepInfoDO {
    private String timestamp; //时间戳
    private Integer step; //运动步数
    public String getTimestamp() {
        return timestamp;
    }
    public void setTimestamp(String timestamp) {
        this.timestamp = timestamp;
    }
    public Integer getStep() {
        return step;
    }
    public void setStep(Integer step) {
        this.step = step;
    }
}

+ 38 - 0
common/common-entity/src/main/java/com/yihu/jw/iot/datainput/WeRunDataDO.java

@ -0,0 +1,38 @@
package com.yihu.jw.iot.datainput;
import java.util.List;
/**
 * 微信运动数据实体类
 * @author lith on 2018/01/17.
 */
public class WeRunDataDO {
    private String usercode; //用户code,唯一识别码
    private String username; //用户名
    private List<StepInfoDO> stepInfoList;//用户过去三十天的微信运动步数
    public String getUsercode() {
        return usercode;
    }
    public void setUsercode(String usercode) {
        this.usercode = usercode;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public List<StepInfoDO> getStepInfoList() {
        return stepInfoList;
    }
    public void setStepInfoList(List<StepInfoDO> stepInfoList) {
        this.stepInfoList = stepInfoList;
    }
}

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

@ -22,8 +22,8 @@ public class DataRequestMapping {
    public static class DataInput{
        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 api_weRunData_input = "inputWeRunData";//微信运动数据上传
        public static final String message_success = "upload success";
        public static final String message_fail = "upload fail";
@ -41,14 +41,15 @@ public class DataRequestMapping {
        public static final String api_user_search_recent1 = "recent1";
        public static final String api_user_abnormal_times_a_week = "abnormalTimes";
        public static final String api_user_search_list_code_del = "searchListByCodeAndDel";
        public static final String api_user_search_werun_datas = "getWeRunDataListById";
        public static final String api_user_delete = "delete";
        public static final String api_user_update = "update";
        public static final String message_success = "search success";
        public static final String search_success = "search success";
        public static final String update_success = "update success";
        public static final String delete_success = "delete success";
        public static final String message_fail = "search fail";
        public static final String message_fail = "failed";
        public static final String message_fail_jsonData_is_null = "param is null";
    }

+ 32 - 0
common/common-rest-model/src/main/java/com/yihu/jw/restmodel/iot/datainput/StepInfoVO.java

@ -0,0 +1,32 @@
package com.yihu.jw.restmodel.iot.datainput;
import com.fasterxml.jackson.annotation.JsonInclude;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.util.List;
@ApiModel
@JsonInclude(JsonInclude.Include.NON_NULL)
public class StepInfoVO {
    @ApiModelProperty(value = "时间戳",hidden = true)
    private String timestamp;
    @ApiModelProperty(value = "运动步数",hidden = true)
    private Integer step;
    public String getTimestamp() {
        return timestamp;
    }
    public void setTimestamp(String timestamp) {
        this.timestamp = timestamp;
    }
    public Integer getStep() {
        return step;
    }
    public void setStep(Integer step) {
        this.step = step;
    }
}

+ 39 - 0
common/common-rest-model/src/main/java/com/yihu/jw/restmodel/iot/datainput/WeRunDataVO.java

@ -0,0 +1,39 @@
package com.yihu.jw.restmodel.iot.datainput;
import io.swagger.annotations.ApiModelProperty;
import java.util.List;
public class WeRunDataVO{
    @ApiModelProperty(value = "用户code,唯一识别码",hidden = true)
    private String usercode;
    @ApiModelProperty(value = "用户名",hidden = true)
    private String username;
    @ApiModelProperty(value = "用户过去三十天的微信运动步数")
    private List<StepInfoVO> stepInfoList;
    public String getUsercode() {
        return usercode;
    }
    public void setUsercode(String usercode) {
        this.usercode = usercode;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public List<StepInfoVO> getStepInfoList() {
        return stepInfoList;
    }
    public void setStepInfoList(List<StepInfoVO> stepInfoList) {
        this.stepInfoList = stepInfoList;
    }
}

+ 18 - 6
svr/svr-iot/src/main/java/com/yihu/iot/datainput/controller/DataInputController.java

@ -34,16 +34,28 @@ public class DataInputController {
    }
    @PostMapping(value = DataRequestMapping.DataInput.api_data_input, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
    @ApiOperation(value = "数据上传", notes = "数据上传入库")
    @ApiOperation(value = "体征数据上传", notes = "数据上传入库")
    public Envelop uploadData(@ApiParam(name = "json_data", value = "", defaultValue = "") @RequestBody String jsonData) {
        String str = "";
        try {
            str = dataInputService.uploadData(jsonData);
            if (str.equals("fail")) {
                return Envelop.getError(DataRequestMapping.DataInput.message_fail, 0);
            str = dataInputService.inputBodySignsData(jsonData);
            if (!str.equals("success")) {
                return Envelop.getSuccess(DataRequestMapping.DataInput.message_fail, str);
            }
            if (str.equals("json no data")) {
                return Envelop.getError(DataRequestMapping.DataInput.message_fail_jsonData_is_null, 1);
        } catch (ApiException e) {
            return Envelop.getError(e.getMessage(), e.getErrorCode());
        }
        return Envelop.getSuccess(DataRequestMapping.DataInput.message_success, str);
    }
    @PostMapping(value = DataRequestMapping.DataInput.api_weRunData_input, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
    @ApiOperation(value = "微信运动数据上传", notes = "微信运动数据上传入库")
    public Envelop uploadWeRunData(@ApiParam(name = "json_data", value = "", defaultValue = "") @RequestBody String jsonData) {
        String str = "";
        try {
            str = dataInputService.inputWeRunData(jsonData);
            if (!StringUtils.endsWithIgnoreCase("success",str)) {
                return Envelop.getError(DataRequestMapping.DataInput.message_fail, 0);
            }
        } catch (ApiException e) {
            return Envelop.getError(e.getMessage(), e.getErrorCode());

+ 32 - 9
svr/svr-iot/src/main/java/com/yihu/iot/datainput/controller/DataSearchController.java

@ -1,5 +1,6 @@
package com.yihu.iot.datainput.controller;
import com.alibaba.fastjson.JSONObject;
import com.yihu.iot.datainput.service.DataSearchService;
import com.yihu.jw.exception.ApiException;
import com.yihu.jw.restmodel.common.Envelop;
@ -9,6 +10,7 @@ import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;
@ -26,7 +28,7 @@ public class DataSearchController {
    public Envelop<DataBodySignsVO> getOne(
            @ApiParam(name = "json_data", value = "", defaultValue = "") @RequestBody String jsonData){
        try{
            return Envelop.getSuccess(DataRequestMapping.DataSearch.message_success,dataSearchService.getDataToBean(jsonData));
            return Envelop.getSuccess(DataRequestMapping.DataSearch.search_success,dataSearchService.getDataToBean(jsonData));
        } catch (ApiException e){
            return Envelop.getError(e.getMessage(), e.getErrorCode());
        }
@ -37,7 +39,7 @@ public class DataSearchController {
    @ApiModelProperty()
    public Envelop<DataBodySignsVO> getList(@ApiParam(name = "json_data", value = "", defaultValue = "") @RequestBody String jsonData){
        try{
            return Envelop.getSuccess(DataRequestMapping.DataSearch.message_success,dataSearchService.getDataToBean(jsonData));
            return Envelop.getSuccess(DataRequestMapping.DataSearch.search_success,dataSearchService.getDataToBean(jsonData));
        } catch (ApiException e){
            return Envelop.getError(e.getMessage(), e.getErrorCode());
        }
@ -47,7 +49,7 @@ public class DataSearchController {
    @ApiOperation(value = "查询数据,分页", notes = "根据条件查询数据,分页")
    public Envelop getListPage(@ApiParam(name = "json_data", value = "", defaultValue = "") @RequestBody String jsonData){
        try{
            return Envelop.getSuccess(DataRequestMapping.DataSearch.message_success,dataSearchService.getData(jsonData));
            return Envelop.getSuccess(DataRequestMapping.DataSearch.search_success,dataSearchService.getDataToBean(jsonData));
        } catch (ApiException e){
            return Envelop.getError(e.getMessage(), e.getErrorCode());
        }
@ -57,7 +59,9 @@ public class DataSearchController {
    @ApiOperation(value = "获取最近5条数据", notes = "根据居民的体征类型,测量时间获取")
    public Envelop<DataBodySignsVO> getRecent5ByTypeAndTime(@ApiParam(name = "json_data", value = "", defaultValue = "") @RequestBody String jsonData ){
        try{
            return Envelop.getSuccess(DataRequestMapping.DataSearch.message_success,dataSearchService.getDataToBean(jsonData));
            JSONObject jsonObject = JSONObject.parseObject(jsonData);
            jsonObject.put("size",5);
            return Envelop.getSuccess(DataRequestMapping.DataSearch.search_success,dataSearchService.getDataToBean(jsonObject.toJSONString()));
        } catch (ApiException e){
            return Envelop.getError(e.getMessage(), e.getErrorCode());
        }
@ -67,7 +71,7 @@ public class DataSearchController {
    @ApiOperation(value = "获取居民一周内体征数据异常次数", notes = "血糖或血压体征数据")
    public Envelop getAbnormalTimesAWeek(@ApiParam(name = "json_data", value = "", defaultValue = "") @RequestBody String jsonData){
        try{
            return Envelop.getSuccess(DataRequestMapping.DataSearch.message_success,dataSearchService.getData(jsonData));
            return Envelop.getSuccess(DataRequestMapping.DataSearch.search_success,dataSearchService.getDataToBean(jsonData));
        } catch (ApiException e){
            return Envelop.getError(e.getMessage(), e.getErrorCode());
        }
@ -77,7 +81,9 @@ public class DataSearchController {
    @ApiOperation(value = "查询体征数据", notes = "根据居民code和删除标识获取最近一次体征数据")
    public Envelop getRecent1ByCodeAndDel(@ApiParam(name = "json_data", value = "", defaultValue = "") @RequestBody String jsonData) {
        try {
            return Envelop.getSuccess(DataRequestMapping.DataSearch.message_success, dataSearchService.getData(jsonData));
            JSONObject jsonObject = JSONObject.parseObject(jsonData);
            jsonObject.put("size",1);
            return Envelop.getSuccess(DataRequestMapping.DataSearch.search_success, dataSearchService.getDataToBean(jsonData));
        } catch (ApiException e) {
            return Envelop.getError(e.getMessage(), e.getErrorCode());
        }
@ -87,7 +93,7 @@ public class DataSearchController {
    @ApiOperation(value = "查询体征数据", notes = "根据居民code和删除标识获取所有体征数据,时间倒序")
    public Envelop getListByCodeAndDel(@ApiParam(name = "json_data", value = "", defaultValue = "") @RequestBody String jsonData){
        try{
            return Envelop.getSuccess(DataRequestMapping.DataSearch.message_success,dataSearchService.getData(jsonData));
            return Envelop.getSuccess(DataRequestMapping.DataSearch.search_success,dataSearchService.getDataToBean(jsonData));
        } catch (ApiException e){
            return Envelop.getError(e.getMessage(), e.getErrorCode());
        }
@ -97,7 +103,11 @@ public class DataSearchController {
    @ApiOperation(value = "体征数据删除", notes = "根据id删除标志,支持伪删除")
    public Envelop delete(@ApiParam(name = "json_data", value = "", defaultValue = "") @RequestBody String jsonData){
        try{
            return Envelop.getSuccess(DataRequestMapping.DataSearch.delete_success,dataSearchService.updateData(jsonData));
            String str = dataSearchService.updateData(jsonData);
            if(!StringUtils.equalsIgnoreCase("success",str)){
                return Envelop.getSuccess(DataRequestMapping.DataSearch.message_fail,str);
            }
            return Envelop.getSuccess(DataRequestMapping.DataSearch.delete_success,str);
        } catch (ApiException e){
            return Envelop.getError(e.getMessage(), e.getErrorCode());
        }
@ -107,10 +117,23 @@ public class DataSearchController {
    @ApiOperation(value = "更新体征记录", notes = "根据id更新体征记录(包括体征值、上传时间等)")
    public Envelop update(@ApiParam(name = "json_data", value = "", defaultValue = "") @RequestBody String jsonData){
        try{
            return Envelop.getSuccess(DataRequestMapping.DataSearch.update_success,dataSearchService.updateData(jsonData));
            String str = dataSearchService.updateData(jsonData);
            if(!StringUtils.equalsIgnoreCase("success",str)){
                return Envelop.getSuccess(DataRequestMapping.DataSearch.message_fail,str);
            }
            return Envelop.getSuccess(DataRequestMapping.DataSearch.update_success,str);
        } catch (ApiException e){
            return Envelop.getError(e.getMessage(), e.getErrorCode());
        }
    }
    @PostMapping(value = DataRequestMapping.DataSearch.api_user_search_werun_datas, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
    @ApiOperation(value = "查询微信运动数据", notes = "根据Id获取用户微信运动数据")
    public Envelop getWeRunDataListById(@ApiParam(name = "json_data", value = "", defaultValue = "") @RequestBody String jsonData){
        try{
            return Envelop.getSuccess(DataRequestMapping.DataSearch.search_success,dataSearchService.getWeRunDataList(jsonData));
        } catch (ApiException e){
            return Envelop.getError(e.getMessage(), e.getErrorCode());
        }
    }
}

+ 32 - 1
svr/svr-iot/src/main/java/com/yihu/iot/datainput/service/DataInputService.java

@ -11,9 +11,12 @@ import com.yihu.iot.datainput.util.ConstantUtils;
import com.yihu.iot.datainput.util.RowKeyUtils;
import com.yihu.iot.service.device.IotDeviceService;
import com.yihu.jw.iot.datainput.DataBodySignsDO;
import com.yihu.jw.iot.datainput.WeRunDataDO;
import com.yihu.jw.iot.device.IotDeviceDO;
import com.yihu.jw.restmodel.iot.datainput.WeRunDataVO;
import com.yihu.jw.util.date.DateUtil;
import org.apache.commons.lang.StringUtils;
import org.apache.hadoop.hbase.util.CollectionUtils;
import org.apache.http.client.utils.DateUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ -215,7 +218,7 @@ public class DataInputService {
     * @param json
     * @return
     */
    public String inputData(String json){
    public String inputBodySignsData(String json){
        String fileName = "";
        String fileAbsPath = "";
        String rowkey = "";
@ -302,4 +305,32 @@ public class DataInputService {
        result.put("upload_time",DateUtils.formatDate(new Date(), DateUtil.yyyy_MM_dd_HH_mm_ss));
        return result.toJSONString();
    }
    /**
     * 上传微信运动数据
     * 目前只上传到es,hbase没有可用服务器
     * @param json
     * @return
     */
    public String inputWeRunData(String json){
        WeRunDataDO weRunData = JSONObject.parseObject(json,WeRunDataDO.class);
        boolean bool = false;
        //用户code不能为空
        if(StringUtils.isEmpty(weRunData.getUsercode())){
            return "invalid usercode";
        }
        //步数数据不能为空
        if(CollectionUtils.isEmpty(weRunData.getStepInfoList())){
            return "invalid stepinfolist";
        }
        try{
            bool = elastricSearchHelper.save(ConstantUtils.weRunDataIndex,ConstantUtils.weRunDataType,json);
        }catch (Exception e){
            logger.error("upload weRunData to elasticsearch failed," + e.getMessage());
            return e.getMessage();
        }
       return String.valueOf(bool);
    }
}

+ 175 - 69
svr/svr-iot/src/main/java/com/yihu/iot/datainput/service/DataSearchService.java

@ -11,7 +11,9 @@ 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;
@ -20,6 +22,8 @@ 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;
@ -48,14 +52,22 @@ public class DataSearchService {
    @Autowired
    private HBaseHelper hBaseHelper;
    private Set<String> fieldsSet = new HashSet<>();
    private static Map<String,Set<String>> fieldsMap = new HashMap<>();
    @PostConstruct
    public void init(){
    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
@ -127,14 +139,7 @@ public class DataSearchService {
        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 "";
@ -167,9 +172,10 @@ public class DataSearchService {
     * @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类型 不需要分页,传""
             "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"}}
@ -177,7 +183,7 @@ public class DataSearchService {
            }
     * @return
     */
    private SearchSourceBuilder getQueryBuilder(String jsonData) {
    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") == 0 ? 1:json.getIntValue("page"); //从第一页开始
@ -185,15 +191,87 @@ public class DataSearchService {
        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");
            if(!CollectionUtils.isEmpty(fieldsSet) && fieldsSet.contains(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);
@ -208,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");
                }
@ -228,34 +306,7 @@ public class DataSearchService {
                }
            }
        }
        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(fieldsSet.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);
                }
            }
        }
        NestedQueryBuilder nestedQueryBuilder = new NestedQueryBuilder("data",boolQueryBuilder);
        searchSourceBuilder.query(nestedQueryBuilder);
        return searchSourceBuilder;
        return boolQueryBuilder;
    }
@ -269,37 +320,49 @@ public class DataSearchService {
     */
    public String updateData(String json) {
        JSONObject params = JSONObject.parseObject(json);
        //拿到rid
        //拿到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("rid",rid);
        String queryString = getQueryString(query.toJSONString());
        //将该rid的文档取出来
        SearchResult searchResult = elastricSearchHelper.search(ConstantUtils.esIndex, ConstantUtils.esType, queryString);
        params.remove("rid");
        String _id = getEsId(searchResult.getJsonString());
        String resultSource = searchResult.getSourceAsString();
        //inner,nested object在es中修改只支持替换整个的object
        JSONObject resultObject = (JSONObject) JSONObject.parse(String.valueOf(resultSource));
        //文档里的data数组对象数据
        JSONArray 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里面的数据
        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);
        JSONObject updateResult = new JSONObject();
        updateResult.put("result", bool);
        return updateResult.toJSONString();
        return String.valueOf(bool);
    }
    private String getEsId(String str){
@ -352,7 +415,7 @@ public class DataSearchService {
        } catch (Exception e) {
            e.printStackTrace();
            logger.error("get data from hbase fail.",e.getMessage());
            logger.error("get data from hbase failed.",e.getMessage());
            return esResult.getSourceAsString();
        }
        resultArray.addAll(resultList);
@ -363,12 +426,17 @@ public class DataSearchService {
        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(jsonData);
        SearchSourceBuilder query = getQueryBuilder("data",jsonData);
        SearchResult esResult = elastricSearchHelper.search(ConstantUtils.esIndex,ConstantUtils.esType,query.toString());
        if(esResult.getTotal() == 0){
        if(null!= esResult && esResult.getTotal() == 0){
            return result;
        }
        for(String str :esResult.getSourceAsStringList()){
@ -379,7 +447,45 @@ public class DataSearchService {
        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);
    }
}

+ 7 - 0
svr/svr-iot/src/main/java/com/yihu/iot/datainput/util/ConstantUtils.java

@ -2,11 +2,18 @@ package com.yihu.iot.datainput.util;
public class ConstantUtils {
    //体征数据es索引
    public static String esIndex = "body_health_data";
    //体征数据es类型
    public static String esType = "signs_data";
    //体征数据hbase表名
    public static String tableName = "body_health_data";
    public static String familyA = "column_signs_header";
    public static String familyB = "column_signs_data";
    //微信运动数据es索引
    public static String weRunDataIndex = "wechat_run_data";
    //微信运动数据es类型
    public static String weRunDataType = "step_data";
}

+ 1 - 0
web-gateway/src/main/java/com/yihu/jw/commnon/iot/DataConstants.java

@ -14,6 +14,7 @@ public class DataConstants {
        public static final String api_common = api_iot_common + "/dataInput";
        public static final String api_bind_user = "/userBind";
        public static final String api_upload_data = "/input";
        public static final String api_upload_weRunData = "/inputWeRunData";
    }

+ 12 - 7
web-gateway/src/main/java/com/yihu/jw/controller/iot/data_input/DataInputController.java

@ -28,20 +28,25 @@ public class DataInputController {
    @HystrixCommand(commandProperties = {
            @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "-1"),//超时时间
            @HystrixProperty(name = "execution.timeout.enabled", value = "false") })
    public Envelop bindUser(
            @ApiParam(name = "json_data", value = "", defaultValue = "")
            @RequestBody String jsonData) {
    public Envelop bindUser(@ApiParam(name = "json_data", value = "", defaultValue = "") @RequestBody String jsonData) {
        return dataInputFeign.bindUser(jsonData);
    }
    @PostMapping(value = DataConstants.DataInput.api_upload_data, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
    @ApiOperation(value = "数据上传", notes = "数据上传")
    @ApiOperation(value = "体征数据上传", notes = "体征数据上传")
    @HystrixCommand(commandProperties = {
            @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "-1"),//超时时间
            @HystrixProperty(name = "execution.timeout.enabled", value = "false") })
    public Envelop uploadData(
            @ApiParam(name = "json_data", value = "", defaultValue = "")
            @RequestBody String jsonData) {
    public Envelop uploadData(@ApiParam(name = "json_data", value = "", defaultValue = "") @RequestBody String jsonData) {
        return dataInputFeign.uploadData(jsonData);
    }
    @PostMapping(value = DataConstants.DataInput.api_upload_weRunData, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
    @ApiOperation(value = "微信运动数据上传", notes = "微信运动数据上传")
    @HystrixCommand(commandProperties = {
            @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "-1"),//超时时间
            @HystrixProperty(name = "execution.timeout.enabled", value = "false") })
    public Envelop uploadWeRunData(@ApiParam(name = "json_data", value = "", defaultValue = "") @RequestBody String jsonData) {
        return dataInputFeign.uploadWeRunData(jsonData);
    }
}

+ 33 - 15
web-gateway/src/main/java/com/yihu/jw/controller/iot/data_input/DataSearchController.java

@ -27,50 +27,68 @@ public class DataSearchController {
    @ApiOperation(value = "查询单条数据", notes = "根据id查询单条数据")
    @HystrixCommand(commandProperties = {
            @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "-1"),//超时时间
            @HystrixProperty(name = "execution.timeout.enabled", value = "false") })
            @HystrixProperty(name = "execution.timeout.enabled", value = "false")})
    public Envelop getOne(
            @ApiParam(name = "json_data", value = ""  )@RequestBody String jsonData) {
            @ApiParam(name = "json_data", value = "") @RequestBody String jsonData) {
        return dataSearchFeign.getOne(jsonData);
    }
    @PostMapping(value = DataConstants.DataSearch.api_user_search_list, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
    @ApiOperation(value = "查询数据", notes = "根据条件查询数据")
    public Envelop getList(@ApiParam(name = "json_data", value = "json_data"  ) @RequestBody String jsonData){
        try{
            return dataSearchFeign.getList(jsonData );
        } catch (ApiException e){
    public Envelop getList(@ApiParam(name = "json_data", value = "json_data") @RequestBody String jsonData) {
        try {
            return dataSearchFeign.getList(jsonData);
        } catch (ApiException e) {
            return Envelop.getError(e.getMessage(), e.getErrorCode());
        }
    }
    @PostMapping(value = DataConstants.DataSearch.api_user_search_list_page, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
    @ApiOperation(value = "查询数据,分页", notes = "根据条件查询数据,分页")
    public Envelop getListPage(@ApiParam(name = "json_data", value = ""  )@RequestBody String jsonData ){
    public Envelop getListPage(@ApiParam(name = "json_data", value = "") @RequestBody String jsonData) {
            return dataSearchFeign.getListPage(jsonData );
        return dataSearchFeign.getListPage(jsonData);
    }
    @PostMapping(value = DataConstants.DataSearch.api_user_search_recent5, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
    @ApiOperation(value = "获取最近5条数据", notes = "根据居民的体征类型,测量时间获取")
    public Envelop getRecent5ByTypeAndTime(@ApiParam(name = "json_data", value = ""  )@RequestBody String jsonData){
            return dataSearchFeign.getRecent5ByTypeAndTime(jsonData );
    public Envelop getRecent5ByTypeAndTime(@ApiParam(name = "json_data", value = "") @RequestBody String jsonData) {
        return dataSearchFeign.getRecent5ByTypeAndTime(jsonData);
    }
    @PostMapping(value = DataConstants.DataSearch.api_user_abnormal_times_a_week, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
    @ApiOperation(value = "获取居民一周内体征数据异常次数", notes = "血糖或血压体征数据")
    public Envelop getAbnormalTimesAWeek(@ApiParam(name = "json_data", value = "") @RequestBody String jsonData){
            return dataSearchFeign.getAbnormalTimesAWeek(jsonData );
    public Envelop getAbnormalTimesAWeek(@ApiParam(name = "json_data", value = "") @RequestBody String jsonData) {
        return dataSearchFeign.getAbnormalTimesAWeek(jsonData);
    }
    @PostMapping(value = DataConstants.DataSearch.api_user_search_recent1, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
    @ApiOperation(value = "查询体征数据", notes = "根据居民code和删除标识获取最近一次体征数据")
    public Envelop getRecent1ByCodeAndDel(@ApiParam(name = "json_data", value = "") @RequestBody String jsonData) {
            return dataSearchFeign.getRecent1ByCodeAndDel(jsonData );
        return dataSearchFeign.getRecent1ByCodeAndDel(jsonData);
    }
    @PostMapping(value = DataConstants.DataSearch.api_user_search_list_code_del, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
    @ApiOperation(value = "查询体征数据", notes = "根据居民code和删除标识获取所有体征数据,时间倒序")
    public Envelop getListByCodeAndDel(@ApiParam(name = "json_data", value = "") @RequestBody String jsonData){
            return dataSearchFeign.getListByCodeAndDel(jsonData );
    public Envelop getListByCodeAndDel(@ApiParam(name = "json_data", value = "") @RequestBody String jsonData) {
        return dataSearchFeign.getListByCodeAndDel(jsonData);
    }
    @PostMapping(value = DataRequestMapping.DataSearch.api_user_delete, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
    @ApiOperation(value = "体征数据删除", notes = "根据id删除标志,支持伪删除")
    public Envelop delete(@ApiParam(name = "json_data", value = "", defaultValue = "") @RequestBody String jsonData) {
        return dataSearchFeign.delete(jsonData);
    }
    @PostMapping(value = DataRequestMapping.DataSearch.api_user_update, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
    @ApiOperation(value = "更新体征记录", notes = "根据id更新体征记录(包括体征值、上传时间等)")
    public Envelop update(@ApiParam(name = "json_data", value = "", defaultValue = "") @RequestBody String jsonData) {
        return dataSearchFeign.update(jsonData);
    }
    @PostMapping(value = DataRequestMapping.DataSearch.api_user_search_werun_datas, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
    @ApiOperation(value = "查询微信运动数据", notes = "根据Id获取用户微信运动数据")
    public Envelop getWeRunDataListById(@ApiParam(name = "json_data", value = "", defaultValue = "") @RequestBody String jsonData) {
        return dataSearchFeign.getWeRunDataListById(jsonData);
    }
}

+ 8 - 1
web-gateway/src/main/java/com/yihu/jw/feign/fallbackfactory/iot/data_input/DataInputFeignFallbackFactory.java

@ -26,7 +26,14 @@ public class DataInputFeignFallbackFactory implements FallbackFactory<DataInputF
            @Override
            public Envelop uploadData(@RequestBody String jsonData) {
                tracer.getCurrentSpan().logEvent("数据上传失败:原因:" + e.getMessage());
                tracer.getCurrentSpan().logEvent("体征数据上传失败:原因:" + e.getMessage());
                tracer.getCurrentSpan().logEvent("jsonData:" + jsonData);
                return null;
            }
            @Override
            public Envelop uploadWeRunData(String jsonData) {
                tracer.getCurrentSpan().logEvent("微信运动数据上传失败:原因:" + e.getMessage());
                tracer.getCurrentSpan().logEvent("jsonData:" + jsonData);
                return null;
            }

+ 21 - 0
web-gateway/src/main/java/com/yihu/jw/feign/fallbackfactory/iot/data_input/DataSearchFeignFallbackFactory.java

@ -67,6 +67,27 @@ public class DataSearchFeignFallbackFactory implements FallbackFactory<DataSearc
                tracer.getCurrentSpan().logEvent("jsonData:" + jsonData);
                return null;
            }
            @Override
            public Envelop delete(String jsonData) {
                tracer.getCurrentSpan().logEvent("根据居民rid删除用户体征数据失败:原因:" + throwable.getMessage());
                tracer.getCurrentSpan().logEvent("jsonData:" + jsonData);
                return null;
            }
            @Override
            public Envelop update(String jsonData) {
                tracer.getCurrentSpan().logEvent("根据rid修改用户体征数据失败:原因:" + throwable.getMessage());
                tracer.getCurrentSpan().logEvent("jsonData:" + jsonData);
                return null;
            }
            @Override
            public Envelop getWeRunDataListById(String jsonData) {
                tracer.getCurrentSpan().logEvent("根据用户code用户微信运动数据列表数据失败:原因:" + throwable.getMessage());
                tracer.getCurrentSpan().logEvent("jsonData:" + jsonData);
                return null;
            }
        };
    }
}

+ 3 - 0
web-gateway/src/main/java/com/yihu/jw/feign/iot/data_input/DataInputFeign.java

@ -25,4 +25,7 @@ public interface DataInputFeign {
    @PostMapping(value = DataRequestMapping.DataInput.api_data_input, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
    Envelop uploadData(@RequestBody String jsonData);
    @PostMapping(value = DataRequestMapping.DataInput.api_weRunData_input, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
    Envelop uploadWeRunData(@RequestBody String jsonData);
}

+ 9 - 0
web-gateway/src/main/java/com/yihu/jw/feign/iot/data_input/DataSearchFeign.java

@ -44,4 +44,13 @@ public interface DataSearchFeign {
    @PostMapping(value = DataRequestMapping.DataSearch.api_user_search_list_code_del, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public Envelop getListByCodeAndDel( @RequestBody String jsonData);
    @PostMapping(value = DataRequestMapping.DataSearch.api_user_delete, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public Envelop delete( @RequestBody String jsonData);
    @PostMapping(value = DataRequestMapping.DataSearch.api_user_update, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public Envelop update( @RequestBody String jsonData);
    @PostMapping(value = DataRequestMapping.DataSearch.api_user_search_werun_datas, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
    public Envelop getWeRunDataListById( @RequestBody String jsonData);
}