Procházet zdrojové kódy

Merge branch 'dev' of LiTaohong/jw2.0 into dev

yeshijie před 7 roky
rodič
revize
403eb4d83a
47 změnil soubory, kde provedl 2712 přidání a 269 odebrání
  1. 36 4
      base/common-data-es/src/main/java/com/yihu/base/es/config/ElastricSearchHelper.java
  2. 10 2
      base/common-data-hbase/src/main/java/com/yihu/base/hbase/config/HbaseConfig.java
  3. 2 2
      base/common-data-hbase/src/main/resources/hbase/core-site.xml
  4. 1 1
      base/common-data-hbase/src/main/resources/hbase/hbase-site.xml
  5. 1 1
      base/common-data-mysql/src/main/java/com/yihu/base/mysql/query/BaseJpaService.java
  6. 15 0
      common/common-entity/pom.xml
  7. 583 0
      common/common-entity/src/main/java/com/yihu/jw/iot/datainput/Data.java
  8. 104 0
      common/common-entity/src/main/java/com/yihu/jw/iot/datainput/DataBodySignsDO.java
  9. 1 2
      common/common-entity/src/main/java/com/yihu/jw/iot/data_input/DataProcessLogDO.java
  10. 1 2
      common/common-entity/src/main/java/com/yihu/jw/iot/data_input/DataStandardDO.java
  11. 28 0
      common/common-entity/src/main/java/com/yihu/jw/iot/datainput/StepInfoDO.java
  12. 38 0
      common/common-entity/src/main/java/com/yihu/jw/iot/datainput/WeRunDataDO.java
  13. 10 4
      common/common-request-mapping/src/main/java/com/yihu/jw/rm/iot/DataRequestMapping.java
  14. 114 0
      common/common-rest-model/src/main/java/com/yihu/jw/restmodel/iot/datainput/DataBodySignsVO.java
  15. 630 0
      common/common-rest-model/src/main/java/com/yihu/jw/restmodel/iot/datainput/DataVO.java
  16. 32 0
      common/common-rest-model/src/main/java/com/yihu/jw/restmodel/iot/datainput/StepInfoVO.java
  17. 39 0
      common/common-rest-model/src/main/java/com/yihu/jw/restmodel/iot/datainput/WeRunDataVO.java
  18. 15 22
      svr/svr-iot/src/main/java/com/yihu/iot/datainput/controller/DataInputController.java
  19. 59 26
      svr/svr-iot/src/main/java/com/yihu/iot/datainput/controller/DataSearchController.java
  20. 1 1
      svr/svr-iot/src/main/java/com/yihu/iot/datainput/dao/DataProcessLogDao.java
  21. 1 1
      svr/svr-iot/src/main/java/com/yihu/iot/datainput/dao/DataStandardDao.java
  22. 120 13
      svr/svr-iot/src/main/java/com/yihu/iot/datainput/service/DataInputService.java
  23. 1 1
      svr/svr-iot/src/main/java/com/yihu/iot/datainput/service/DataProcessLogService.java
  24. 304 106
      svr/svr-iot/src/main/java/com/yihu/iot/datainput/service/DataSearchService.java
  25. 8 39
      svr/svr-iot/src/main/java/com/yihu/iot/datainput/service/DataStandardConvertService.java
  26. 1 1
      svr/svr-iot/src/main/java/com/yihu/iot/datainput/service/DataStandardService.java
  27. 7 0
      svr/svr-iot/src/main/java/com/yihu/iot/datainput/util/ConstantUtils.java
  28. 163 0
      svr/svr-iot/src/main/resources/core-site.xml
  29. 243 0
      svr/svr-iot/src/main/resources/hbase-site.xml
  30. 35 0
      svr/svr-iot/src/main/resources/logback.xml
  31. 4 0
      svr/svr-manage/pom.xml
  32. 2 2
      svr/svr-manage/src/main/java/com/yihu/jw/manage/controller/base/ModuleController.java
  33. 2 2
      svr/svr-manage/src/main/java/com/yihu/jw/manage/controller/wechat/TemplateController.java
  34. 2 2
      svr/svr-manage/src/main/java/com/yihu/jw/manage/controller/wechat/WechatConfigController.java
  35. 1 1
      svr/svr-manage/src/main/java/com/yihu/jw/manage/service/base/FunctionService.java
  36. 3 3
      svr/svr-manage/src/main/java/com/yihu/jw/manage/service/base/ModuleService.java
  37. 2 2
      svr/svr-manage/src/main/java/com/yihu/jw/manage/service/wechat/GraphicMessageService.java
  38. 2 2
      svr/svr-manage/src/main/java/com/yihu/jw/manage/service/wechat/TemplateService.java
  39. 2 2
      svr/svr-manage/src/main/java/com/yihu/jw/manage/service/wechat/WechatConfigService.java
  40. 2 2
      svr/svr-manage/src/main/java/com/yihu/jw/manage/service/wechat/WechatMenuService.java
  41. 1 0
      web-gateway/src/main/java/com/yihu/jw/commnon/iot/DataConstants.java
  42. 12 7
      web-gateway/src/main/java/com/yihu/jw/controller/iot/data_input/DataInputController.java
  43. 33 15
      web-gateway/src/main/java/com/yihu/jw/controller/iot/data_input/DataSearchController.java
  44. 8 1
      web-gateway/src/main/java/com/yihu/jw/feign/fallbackfactory/iot/data_input/DataInputFeignFallbackFactory.java
  45. 21 0
      web-gateway/src/main/java/com/yihu/jw/feign/fallbackfactory/iot/data_input/DataSearchFeignFallbackFactory.java
  46. 3 0
      web-gateway/src/main/java/com/yihu/jw/feign/iot/data_input/DataInputFeign.java
  47. 9 0
      web-gateway/src/main/java/com/yihu/jw/feign/iot/data_input/DataSearchFeign.java

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

@ -6,14 +6,18 @@ import com.yihu.base.es.config.model.SaveModel;
import io.searchbox.client.JestClient;
import io.searchbox.client.JestResult;
import io.searchbox.core.*;
import org.elasticsearch.action.update.UpdateRequest;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.data.elasticsearch.core.ElasticsearchTemplate;
import org.springframework.data.elasticsearch.core.query.UpdateQueryBuilder;
import org.springframework.stereotype.Component;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
;
@ -63,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();
@ -77,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);
@ -89,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();
@ -116,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);
@ -128,7 +134,7 @@ public class ElastricSearchHelper {
                jestClient.shutdownClient();
            }
        }
        return null;
        return br.isSucceeded();
    }
    /**
@ -185,6 +191,32 @@ public class ElastricSearchHelper {
        return result;
    }
    /**
     * 修改
     */
    public boolean update(String index, String type,String _id, JSONObject source) {
        JestClient jestClient = null;
        JestResult jestResult = null;
        try {
            jestClient = elasticFactory.getJestClient();
            JSONObject docSource = new JSONObject();
            docSource.put("doc",source);
            Update update = new Update.Builder(docSource).index(index).type(type).id(_id).build();
            jestResult = jestClient.execute(update);
            logger.info("update info:" + jestResult.isSucceeded());
        } catch (Exception e) {
            logger.error("update fail:" + _id,e.getMessage());
            return false;
        } finally {
            if (jestClient != null) {
                jestClient.shutdownClient();
            }
        }
        return true;
    }
    public static void main(String args[]){
        String json = "";
        JSONObject resultJsonObject = (JSONObject)JSONObject.parse(json);

+ 10 - 2
base/common-data-hbase/src/main/java/com/yihu/base/hbase/config/HbaseConfig.java

@ -6,6 +6,8 @@ import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.security.User;
import org.apache.hadoop.hbase.util.Bytes;
import org.apache.hadoop.security.UserGroupInformation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
@ -23,6 +25,7 @@ import java.util.*;
@Configuration
@ConfigurationProperties(prefix = "hadoop")
public class HbaseConfig{
    private static Logger logger = LoggerFactory.getLogger(HbaseConfig.class);
    private Map<String, String> hbaseProperties = new HashMap<>();
    public Map<String, String> getHbaseProperties(){
@ -57,9 +60,14 @@ public class HbaseConfig{
        try
        {
            logger.info("set System property for hbase ---",user);
            System.setProperty("HADOOP_USER_NAME", user);
            String tableName = "HealthProfile";
            //覆盖默认的配置文件
            org.apache.hadoop.conf.Configuration.addDefaultResource("core-site.xml");
            org.apache.hadoop.conf.Configuration.addDefaultResource("hbase-site.xml");
            Connection connection = ConnectionFactory.createConnection(configuration);
            logger.info("Hbase createConnection finished---",connection.getConfiguration());
            Admin admin = connection.getAdmin();
            boolean ex = admin.tableExists(TableName.valueOf(tableName));
            //判断是否存在
@ -80,9 +88,9 @@ public class HbaseConfig{
        }
        catch (Exception ex)
        {
            ex.printStackTrace();
            logger.info("Hbase createConnection failure",ex.getMessage());
        }
        return hbaseTemplate;
    }
}

+ 2 - 2
base/common-data-hbase/src/main/resources/hbase/core-site.xml

@ -132,12 +132,12 @@
    
    <property>
      <name>ipc.client.connect.max.retries</name>
      <value>50</value>
      <value>2</value><!--50-->
    </property>
    
    <property>
      <name>ipc.client.connection.maxidletime</name>
      <value>30000</value>
      <value>1000</value><!--30000-->
    </property>
    
    <property>

+ 1 - 1
base/common-data-hbase/src/main/resources/hbase/hbase-site.xml

@ -17,7 +17,7 @@
    
    <property>
      <name>hbase.client.retries.number</name>
      <value>35</value>
      <value>1</value><!--35-->
    </property>
    
    <property>

+ 1 - 1
base/common-data-mysql/src/main/java/com/yihu/base/mysql/query/BaseJpaService.java

@ -26,7 +26,7 @@ import java.text.ParseException;
import java.util.*;
/**
 * Service基础类。此类基于Spring Data JPA进行封装(Spring Data JPA又是基于JPA封装,EHR平台使用Hibernate作为JPA实现者)。
 * Service基础类。此类基于Spring DataVO JPA进行封装(Spring DataVO JPA又是基于JPA封装,EHR平台使用Hibernate作为JPA实现者)。
 * 需要注意的是,部分功能会跳过JPA接口而直接使用Hibernate接口,比如访问Hibernate的Session接口,因为它把JPA的EntityManager功能强大。
 *
 * @author lincl

+ 15 - 0
common/common-entity/pom.xml

@ -36,5 +36,20 @@
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
        </dependency>
        <dependency>
            <groupId>io.searchbox</groupId>
            <artifactId>jest-common</artifactId>
            <version>2.4.0</version>
        </dependency>
        <dependency>
            <groupId>io.searchbox</groupId>
            <artifactId>jest-common</artifactId>
            <version>2.4.0</version>
        </dependency>
        <dependency>
            <groupId>com.yihu.base</groupId>
            <artifactId>common-data-es</artifactId>
            <version>1.0.0</version>
        </dependency>
    </dependencies>
</project>

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

@ -0,0 +1,583 @@
package com.yihu.jw.iot.datainput;
/**
 * 具体各项体征指标数据值
 * @author lith on 2018/01/17.
 */
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 String systolic;        //收缩压
    private String systolic_unit;   //收缩压测量单位
    private String diastolic;       //舒张压
    private String pulse;            //脉搏
    private String pulse_unit;
    private String blood_sugar;     //血糖
    private String blood_sugar_unit;
    private String blood_sugar_result;
    private String blood_oxygen; //血氧
    private String blood_oxygen_unit;
    private String bbt; //体温
    private String bbt_unit;
    private String ket; //酮体
    private String ket_unit;
    private String uro; //尿胆原
    private String uro_unit;
    private String uric_acid;   //尿酸
    private String uric_acid_unit;
    private String tchol;   //总胆固醇
    private String tchol_unit;
    private String hdl; //高密度脂蛋白
    private String hdl_unit;
    private String tg;  //甘油三酯
    private String tg_unit;
    private String ldl; //低密度脂蛋白
    private String ldl_unit;
    private String height;  //身高
    private String height_unit;
    private String weight;  //体重
    private String weight_unit;
    private String waist;   //腰围
    private String waist_unit;
    private String bmi; //BMI
    private String bmi_unit;
    private String hgb; //血红蛋白
    private String hgb_unit;
    private String hbalc;   //糖化血红蛋白
    private String hbalc_unit;
    private String left_eye;//  左眼
    private String left_eye_unit;
    private String right_eye;// 左眼
    private String right_eye_unit;
    private String ecg; //心电
    private String ecg_attach;
    private String ph;  //PH值
    private String nit; //亚硝酸盐
    private String nit_unit;
    private String pro; //蛋白质
    private String pro_unit;
    private String glu; //葡萄糖
    private String glu_unit;
    private String bil; //胆红素
    private String bil_unit;
    private String sg;  //比重
    private String sg_unit;
    private String wbc; //白细胞
    private String wbc_unit;
    private String vc;      //维生素C
    private String vc_unit;
    private String bld; //潜血
    private String bld_unit;
    public String getRid() {
        return rid;
    }
    public void setRid(String rid) {
        this.rid = rid;
    }
    public int getDel() {
        return del;
    }
    public void setDel(int del) {
        this.del = del;
    }
    public String getMeasure_time() {
        return measure_time;
    }
    public void setMeasure_time(String measure_time) {
        this.measure_time = measure_time;
    }
    public String getSystolic() {
        return systolic;
    }
    public void setSystolic(String systolic) {
        this.systolic = systolic;
    }
    public String getSystolic_unit() {
        return systolic_unit;
    }
    public void setSystolic_unit(String systolic_unit) {
        this.systolic_unit = systolic_unit;
    }
    public String getDiastolic() {
        return diastolic;
    }
    public void setDiastolic(String diastolic) {
        this.diastolic = diastolic;
    }
    public String getPulse() {
        return pulse;
    }
    public void setPulse(String pulse) {
        this.pulse = pulse;
    }
    public String getPulse_unit() {
        return pulse_unit;
    }
    public void setPulse_unit(String pulse_unit) {
        this.pulse_unit = pulse_unit;
    }
    public String getBlood_sugar() {
        return blood_sugar;
    }
    public void setBlood_sugar(String blood_sugar) {
        this.blood_sugar = blood_sugar;
    }
    public String getBlood_sugar_unit() {
        return blood_sugar_unit;
    }
    public void setBlood_sugar_unit(String blood_sugar_unit) {
        this.blood_sugar_unit = blood_sugar_unit;
    }
    public String getBlood_sugar_result() {
        return blood_sugar_result;
    }
    public void setBlood_sugar_result(String blood_sugar_result) {
        this.blood_sugar_result = blood_sugar_result;
    }
    public String getBlood_oxygen() {
        return blood_oxygen;
    }
    public void setBlood_oxygen(String blood_oxygen) {
        this.blood_oxygen = blood_oxygen;
    }
    public String getBlood_oxygen_unit() {
        return blood_oxygen_unit;
    }
    public void setBlood_oxygen_unit(String blood_oxygen_unit) {
        this.blood_oxygen_unit = blood_oxygen_unit;
    }
    public String getBbt() {
        return bbt;
    }
    public void setBbt(String bbt) {
        this.bbt = bbt;
    }
    public String getBbt_unit() {
        return bbt_unit;
    }
    public void setBbt_unit(String bbt_unit) {
        this.bbt_unit = bbt_unit;
    }
    public String getKet() {
        return ket;
    }
    public void setKet(String ket) {
        this.ket = ket;
    }
    public String getKet_unit() {
        return ket_unit;
    }
    public void setKet_unit(String ket_unit) {
        this.ket_unit = ket_unit;
    }
    public String getUro() {
        return uro;
    }
    public void setUro(String uro) {
        this.uro = uro;
    }
    public String getUro_unit() {
        return uro_unit;
    }
    public void setUro_unit(String uro_unit) {
        this.uro_unit = uro_unit;
    }
    public String getUric_acid() {
        return uric_acid;
    }
    public void setUric_acid(String uric_acid) {
        this.uric_acid = uric_acid;
    }
    public String getUric_acid_unit() {
        return uric_acid_unit;
    }
    public void setUric_acid_unit(String uric_acid_unit) {
        this.uric_acid_unit = uric_acid_unit;
    }
    public String getTchol() {
        return tchol;
    }
    public void setTchol(String tchol) {
        this.tchol = tchol;
    }
    public String getTchol_unit() {
        return tchol_unit;
    }
    public void setTchol_unit(String tchol_unit) {
        this.tchol_unit = tchol_unit;
    }
    public String getHdl() {
        return hdl;
    }
    public void setHdl(String hdl) {
        this.hdl = hdl;
    }
    public String getHdl_unit() {
        return hdl_unit;
    }
    public void setHdl_unit(String hdl_unit) {
        this.hdl_unit = hdl_unit;
    }
    public String getTg() {
        return tg;
    }
    public void setTg(String tg) {
        this.tg = tg;
    }
    public String getTg_unit() {
        return tg_unit;
    }
    public void setTg_unit(String tg_unit) {
        this.tg_unit = tg_unit;
    }
    public String getLdl() {
        return ldl;
    }
    public void setLdl(String ldl) {
        this.ldl = ldl;
    }
    public String getLdl_unit() {
        return ldl_unit;
    }
    public void setLdl_unit(String ldl_unit) {
        this.ldl_unit = ldl_unit;
    }
    public String getHeight() {
        return height;
    }
    public void setHeight(String height) {
        this.height = height;
    }
    public String getHeight_unit() {
        return height_unit;
    }
    public void setHeight_unit(String height_unit) {
        this.height_unit = height_unit;
    }
    public String getWeight() {
        return weight;
    }
    public void setWeight(String weight) {
        this.weight = weight;
    }
    public String getWeight_unit() {
        return weight_unit;
    }
    public void setWeight_unit(String weight_unit) {
        this.weight_unit = weight_unit;
    }
    public String getWaist() {
        return waist;
    }
    public void setWaist(String waist) {
        this.waist = waist;
    }
    public String getWaist_unit() {
        return waist_unit;
    }
    public void setWaist_unit(String waist_unit) {
        this.waist_unit = waist_unit;
    }
    public String getBmi() {
        return bmi;
    }
    public void setBmi(String bmi) {
        this.bmi = bmi;
    }
    public String getBmi_unit() {
        return bmi_unit;
    }
    public void setBmi_unit(String bmi_unit) {
        this.bmi_unit = bmi_unit;
    }
    public String getHgb() {
        return hgb;
    }
    public void setHgb(String hgb) {
        this.hgb = hgb;
    }
    public String getHgb_unit() {
        return hgb_unit;
    }
    public void setHgb_unit(String hgb_unit) {
        this.hgb_unit = hgb_unit;
    }
    public String getHbalc() {
        return hbalc;
    }
    public void setHbalc(String hbalc) {
        this.hbalc = hbalc;
    }
    public String getHbalc_unit() {
        return hbalc_unit;
    }
    public void setHbalc_unit(String hbalc_unit) {
        this.hbalc_unit = hbalc_unit;
    }
    public String getLeft_eye() {
        return left_eye;
    }
    public void setLeft_eye(String left_eye) {
        this.left_eye = left_eye;
    }
    public String getLeft_eye_unit() {
        return left_eye_unit;
    }
    public void setLeft_eye_unit(String left_eye_unit) {
        this.left_eye_unit = left_eye_unit;
    }
    public String getRight_eye() {
        return right_eye;
    }
    public void setRight_eye(String right_eye) {
        this.right_eye = right_eye;
    }
    public String getRight_eye_unit() {
        return right_eye_unit;
    }
    public void setRight_eye_unit(String right_eye_unit) {
        this.right_eye_unit = right_eye_unit;
    }
    public String getEcg() {
        return ecg;
    }
    public void setEcg(String ecg) {
        this.ecg = ecg;
    }
    public String getEcg_attach() {
        return ecg_attach;
    }
    public void setEcg_attach(String ecg_attach) {
        this.ecg_attach = ecg_attach;
    }
    public String getPh() {
        return ph;
    }
    public void setPh(String ph) {
        this.ph = ph;
    }
    public String getNit() {
        return nit;
    }
    public void setNit(String nit) {
        this.nit = nit;
    }
    public String getNit_unit() {
        return nit_unit;
    }
    public void setNit_unit(String nit_unit) {
        this.nit_unit = nit_unit;
    }
    public String getPro() {
        return pro;
    }
    public void setPro(String pro) {
        this.pro = pro;
    }
    public String getPro_unit() {
        return pro_unit;
    }
    public void setPro_unit(String pro_unit) {
        this.pro_unit = pro_unit;
    }
    public String getGlu() {
        return glu;
    }
    public void setGlu(String glu) {
        this.glu = glu;
    }
    public String getGlu_unit() {
        return glu_unit;
    }
    public void setGlu_unit(String glu_unit) {
        this.glu_unit = glu_unit;
    }
    public String getBil() {
        return bil;
    }
    public void setBil(String bil) {
        this.bil = bil;
    }
    public String getBil_unit() {
        return bil_unit;
    }
    public void setBil_unit(String bil_unit) {
        this.bil_unit = bil_unit;
    }
    public String getSg() {
        return sg;
    }
    public void setSg(String sg) {
        this.sg = sg;
    }
    public String getSg_unit() {
        return sg_unit;
    }
    public void setSg_unit(String sg_unit) {
        this.sg_unit = sg_unit;
    }
    public String getWbc() {
        return wbc;
    }
    public void setWbc(String wbc) {
        this.wbc = wbc;
    }
    public String getWbc_unit() {
        return wbc_unit;
    }
    public void setWbc_unit(String wbc_unit) {
        this.wbc_unit = wbc_unit;
    }
    public String getVc() {
        return vc;
    }
    public void setVc(String vc) {
        this.vc = vc;
    }
    public String getVc_unit() {
        return vc_unit;
    }
    public void setVc_unit(String vc_unit) {
        this.vc_unit = vc_unit;
    }
    public String getBld() {
        return bld;
    }
    public void setBld(String bld) {
        this.bld = bld;
    }
    public String getBld_unit() {
        return bld_unit;
    }
    public void setBld_unit(String bld_unit) {
        this.bld_unit = bld_unit;
    }
}

+ 104 - 0
common/common-entity/src/main/java/com/yihu/jw/iot/datainput/DataBodySignsDO.java

@ -0,0 +1,104 @@
package com.yihu.jw.iot.datainput;
import com.yihu.base.es.config.model.SaveModel;
import java.util.List;
/**
 * 体征数据实体类,新的标准的数据格式
 * @author lith on 2018/01/17.
 */
public class DataBodySignsDO extends SaveModel {
    private String access_token; //访问token
    private String data_source; //数据来源
    private String sn;          //设备序列码
    private String ext_code;    //设备A,B键,取值为0,1,代表绑定不同的用户,
    private String device_name; //设备名称
    private String device_model;//设备型号
    private List<Data> data;    //设备所测量的数据内容
    private String idCard;      //设备绑定的用户身份证号
    private String username;    //用户名
    private String usercode;    //用户在系统中的code,唯一识别
    public String getAccess_token() {
        return access_token;
    }
    public void setAccess_token(String access_token) {
        this.access_token = access_token;
    }
    public String getData_source() {
        return data_source;
    }
    public void setData_source(String data_source) {
        this.data_source = data_source;
    }
    public String getSn() {
        return sn;
    }
    public void setSn(String sn) {
        this.sn = sn;
    }
    public String getExt_code() {
        return ext_code;
    }
    public void setExt_code(String ext_code) {
        this.ext_code = ext_code;
    }
    public String getDevice_name() {
        return device_name;
    }
    public void setDevice_name(String device_name) {
        this.device_name = device_name;
    }
    public String getDevice_model() {
        return device_model;
    }
    public void setDevice_model(String device_model) {
        this.device_model = device_model;
    }
    public List<Data> getData() {
        return data;
    }
    public void setData(List<Data> data) {
        this.data = data;
    }
    public String getIdCard() {
        return idCard;
    }
    public void setIdCard(String idCard) {
        this.idCard = idCard;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getUsercode() {
        return usercode;
    }
    public void setUsercode(String usercode) {
        this.usercode = usercode;
    }
}

+ 1 - 2
common/common-entity/src/main/java/com/yihu/jw/iot/data_input/DataProcessLogDO.java

@ -1,7 +1,6 @@
package com.yihu.jw.iot.data_input;
package com.yihu.jw.iot.datainput;
import com.yihu.jw.IdEntity;
import com.yihu.jw.IdEntityWithOperation;
import javax.persistence.Column;
import javax.persistence.Entity;

+ 1 - 2
common/common-entity/src/main/java/com/yihu/jw/iot/data_input/DataStandardDO.java

@ -1,7 +1,6 @@
package com.yihu.jw.iot.data_input;
package com.yihu.jw.iot.datainput;
import com.yihu.jw.IdEntity;
import com.yihu.jw.IdEntityWithOperation;
import javax.persistence.Column;
import javax.persistence.Entity;

+ 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;
    }
}

+ 10 - 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,9 +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 message_fail = "search fail";
        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 = "failed";
        public static final String message_fail_jsonData_is_null = "param is null";
    }

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

@ -0,0 +1,114 @@
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;
/**
 * 体征数据实体类,新的标准的数据格式
 * @author lith on 2018/01/17.
 */
@JsonInclude(JsonInclude.Include.NON_NULL)
@ApiModel
public class DataBodySignsVO {
    private String access_token; //访问token
    private String data_source; //数据来源
    private String sn;          //设备序列码
    @ApiModelProperty(value = "设备数据识别代码",hidden = true)
    private String ext_code;    //设备A,B键,取值为0,1,代表绑定不同的用户,
    @ApiModelProperty(value = "设备名称",hidden = true)
    private String device_name; //设备名称
    @ApiModelProperty(value = "设备型号",hidden = true)
    private String device_model;//设备型号
    private List<DataVO> data;    //设备所测量的数据内容
    @ApiModelProperty(value = "身份证号",hidden = true)
    private String idCard;      //设备绑定的用户身份证号
    @ApiModelProperty(value = "用户名",hidden = true)
    private String username;    //用户名
    @ApiModelProperty(value = "用户code",hidden = true)
    private String usercode;    //用户在系统中的code,唯一识别
    public String getAccess_token() {
        return access_token;
    }
    public void setAccess_token(String access_token) {
        this.access_token = access_token;
    }
    public String getData_source() {
        return data_source;
    }
    public void setData_source(String data_source) {
        this.data_source = data_source;
    }
    public String getSn() {
        return sn;
    }
    public void setSn(String sn) {
        this.sn = sn;
    }
    public String getExt_code() {
        return ext_code;
    }
    public void setExt_code(String ext_code) {
        this.ext_code = ext_code;
    }
    public String getDevice_name() {
        return device_name;
    }
    public void setDevice_name(String device_name) {
        this.device_name = device_name;
    }
    public String getDevice_model() {
        return device_model;
    }
    public void setDevice_model(String device_model) {
        this.device_model = device_model;
    }
    public List<DataVO> getData() {
        return data;
    }
    public void setData(List<DataVO> data) {
        this.data = data;
    }
    public String getIdCard() {
        return idCard;
    }
    public void setIdCard(String idCard) {
        this.idCard = idCard;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getUsercode() {
        return usercode;
    }
    public void setUsercode(String usercode) {
        this.usercode = usercode;
    }
}

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

@ -0,0 +1,630 @@
package com.yihu.jw.restmodel.iot.datainput;
import com.fasterxml.jackson.annotation.JsonInclude;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
/**
 * 具体各项体征指标数据值
 * @author lith on 2018/01/17.
 */
@JsonInclude(JsonInclude.Include.NON_NULL)
@ApiModel
public class DataVO {
    @ApiModelProperty(hidden = true)
    private String rid; // 存到hbase中的id
    @ApiModelProperty(value = "是否删除,0代表删除,1代表未删除",hidden = true)
    private int del = 1; //删除标记,1代表正常,0代表删除
    @ApiModelProperty(value = "测量时间",hidden = true)
    private String measure_time;     //测量时间  yyyy-MM-dd HH:mm:ss
    @ApiModelProperty(value = "收缩压",hidden = true)
    private  String systolic;        //收缩压
    private String systolic_unit;   //收缩压测量单位
    @ApiModelProperty(value = "舒张压",hidden = true)
    private  String diastolic;       //舒张压
    @ApiModelProperty(value = "脉搏",hidden = true)
    private  String pulse;            //脉搏
    private String pulse_unit;
    @ApiModelProperty(value = "血糖",hidden = true)
    private  String blood_sugar;     //血糖
    private String blood_sugar_unit;
    @ApiModelProperty(value = "血糖,1 : 空腹血糖 , 2 : 早餐后血糖 , 3 : 午餐前血糖 , 4 : 午餐后血糖 , 5 : 晚餐前血糖 , 6 : 晚餐后血糖 , 7 : 睡前血糖",hidden = true)
    private  String blood_sugar_result;
    @ApiModelProperty(value = "血氧",hidden = true)
    private  String blood_oxygen; //血氧
    private String blood_oxygen_unit;
    @ApiModelProperty(value = "体温",hidden = true)
    private  String bbt; //体温
    private String bbt_unit;
    @ApiModelProperty(value = "酮体",hidden = true)
    private  String ket; //酮体
    private String ket_unit;
    @ApiModelProperty(value = "尿胆原",hidden = true)
    private  String uro; //尿胆原
    private String uro_unit;
    @ApiModelProperty(value = "尿酸",hidden = true)
    private  String uric_acid;   //尿酸
    private String uric_acid_unit;
    @ApiModelProperty(value = "总胆固醇",hidden = true)
    private  String tchol;   //总胆固醇
    private String tchol_unit;
    @ApiModelProperty(value = "高密度脂蛋白",hidden = true)
    private  String hdl; //高密度脂蛋白
    private String hdl_unit;
    @ApiModelProperty(value = "甘油三酯",hidden = true)
    private  String tg;  //甘油三酯
    private String tg_unit;
    @ApiModelProperty(value = "低密度脂蛋白",hidden = true)
    private  String ldl; //低密度脂蛋白
    private String ldl_unit;
    @ApiModelProperty(value = "身高",hidden = true)
    private  String height;  //身高
    private String height_unit;
    @ApiModelProperty(value = "体重",hidden = true)
    private  String weight;  //体重
    private String weight_unit;
    @ApiModelProperty(value = "腰围",hidden = true)
    private  String waist;   //腰围
    private String waist_unit;
    @ApiModelProperty(value = "BMI",hidden = true)
    private  String bmi; //BMI
    private String bmi_unit;
    @ApiModelProperty(value = "血红蛋白",hidden = true)
    private  String hgb; //血红蛋白
    private String hgb_unit;
    private  String hbalc;   //糖化血红蛋白
    @ApiModelProperty(value = "糖化血红蛋白",hidden = true)
    private String hbalc_unit;
    @ApiModelProperty(value = "左眼",hidden = true)
    private  String left_eye;//  左眼
    private String left_eye_unit;
    @ApiModelProperty(value = "右眼",hidden = true)
    private  String right_eye;// 右眼
    private String right_eye_unit;
    @ApiModelProperty(value = "心电图",hidden = true)
    private  String ecg; //心电
    private String ecg_attach;
    @ApiModelProperty(value = "PH",hidden = true)
    private  String ph;  //PH值
    @ApiModelProperty(value = "亚硝酸盐",hidden = true)
    private  String nit; //亚硝酸盐
    private String nit_unit;
    @ApiModelProperty(value = "蛋白质",hidden = true)
    private  String pro; //蛋白质
    private String pro_unit;
    @ApiModelProperty(value = "葡萄糖",hidden = true)
    private  String glu; //葡萄糖
    private String glu_unit;
    @ApiModelProperty(value = "胆红素",hidden = true)
    private  String bil; //胆红素
    private String bil_unit;
    @ApiModelProperty(value = "比重",hidden = true)
    private  String sg;  //比重
    private String sg_unit;
    @ApiModelProperty(value = "白细胞",hidden = true)
    private  String wbc; //白细胞
    @ApiModelProperty(value = "白细胞数值单位",hidden = true)
    private String wbc_unit;
    @ApiModelProperty(value = "维生素C",hidden = true)
    private  String vc;      //维生素C
    @ApiModelProperty(value = "维生素C数值单位",hidden = true)
    private String vc_unit;
    @ApiModelProperty(value = "潜血",hidden = true)
    private  String bld;
    @ApiModelProperty(value = "潜血数值单位",hidden = true)
    private String bld_unit;
    public String getRid() {
        return rid;
    }
    public void setRid(String rid) {
        this.rid = rid;
    }
    public int getDel() {
        return del;
    }
    public void setDel(int del) {
        this.del = del;
    }
    public String getMeasure_time() {
        return measure_time;
    }
    public void setMeasure_time(String measure_time) {
        this.measure_time = measure_time;
    }
    public  String getSystolic() {
        return systolic;
    }
    public void setSystolic( String systolic) {
        this.systolic = systolic;
    }
    public String getSystolic_unit() {
        return systolic_unit;
    }
    public void setSystolic_unit(String systolic_unit) {
        this.systolic_unit = systolic_unit;
    }
    public  String getDiastolic() {
        return diastolic;
    }
    public void setDiastolic( String diastolic) {
        this.diastolic = diastolic;
    }
    public  String getPulse() {
        return pulse;
    }
    public void setPulse( String pulse) {
        this.pulse = pulse;
    }
    public String getPulse_unit() {
        return pulse_unit;
    }
    public void setPulse_unit(String pulse_unit) {
        this.pulse_unit = pulse_unit;
    }
    public  String getBlood_sugar() {
        return blood_sugar;
    }
    public void setBlood_sugar( String blood_sugar) {
        this.blood_sugar = blood_sugar;
    }
    public String getBlood_sugar_unit() {
        return blood_sugar_unit;
    }
    public void setBlood_sugar_unit(String blood_sugar_unit) {
        this.blood_sugar_unit = blood_sugar_unit;
    }
    public  String getBlood_sugar_result() {
        return blood_sugar_result;
    }
    public void setBlood_sugar_result( String blood_sugar_result) {
        this.blood_sugar_result = blood_sugar_result;
    }
    public  String getBlood_oxygen() {
        return blood_oxygen;
    }
    public void setBlood_oxygen( String blood_oxygen) {
        this.blood_oxygen = blood_oxygen;
    }
    public String getBlood_oxygen_unit() {
        return blood_oxygen_unit;
    }
    public void setBlood_oxygen_unit(String blood_oxygen_unit) {
        this.blood_oxygen_unit = blood_oxygen_unit;
    }
    public  String getBbt() {
        return bbt;
    }
    public void setBbt( String bbt) {
        this.bbt = bbt;
    }
    public String getBbt_unit() {
        return bbt_unit;
    }
    public void setBbt_unit(String bbt_unit) {
        this.bbt_unit = bbt_unit;
    }
    public  String getKet() {
        return ket;
    }
    public void setKet( String ket) {
        this.ket = ket;
    }
    public String getKet_unit() {
        return ket_unit;
    }
    public void setKet_unit(String ket_unit) {
        this.ket_unit = ket_unit;
    }
    public  String getUro() {
        return uro;
    }
    public void setUro( String uro) {
        this.uro = uro;
    }
    public String getUro_unit() {
        return uro_unit;
    }
    public void setUro_unit(String uro_unit) {
        this.uro_unit = uro_unit;
    }
    public  String getUric_acid() {
        return uric_acid;
    }
    public void setUric_acid( String uric_acid) {
        this.uric_acid = uric_acid;
    }
    public String getUric_acid_unit() {
        return uric_acid_unit;
    }
    public void setUric_acid_unit(String uric_acid_unit) {
        this.uric_acid_unit = uric_acid_unit;
    }
    public  String getTchol() {
        return tchol;
    }
    public void setTchol( String tchol) {
        this.tchol = tchol;
    }
    public String getTchol_unit() {
        return tchol_unit;
    }
    public void setTchol_unit(String tchol_unit) {
        this.tchol_unit = tchol_unit;
    }
    public  String getHdl() {
        return hdl;
    }
    public void setHdl( String hdl) {
        this.hdl = hdl;
    }
    public String getHdl_unit() {
        return hdl_unit;
    }
    public void setHdl_unit(String hdl_unit) {
        this.hdl_unit = hdl_unit;
    }
    public  String getTg() {
        return tg;
    }
    public void setTg( String tg) {
        this.tg = tg;
    }
    public String getTg_unit() {
        return tg_unit;
    }
    public void setTg_unit(String tg_unit) {
        this.tg_unit = tg_unit;
    }
    public  String getLdl() {
        return ldl;
    }
    public void setLdl( String ldl) {
        this.ldl = ldl;
    }
    public String getLdl_unit() {
        return ldl_unit;
    }
    public void setLdl_unit(String ldl_unit) {
        this.ldl_unit = ldl_unit;
    }
    public  String getHeight() {
        return height;
    }
    public void setHeight( String height) {
        this.height = height;
    }
    public String getHeight_unit() {
        return height_unit;
    }
    public void setHeight_unit(String height_unit) {
        this.height_unit = height_unit;
    }
    public  String getWeight() {
        return weight;
    }
    public void setWeight( String weight) {
        this.weight = weight;
    }
    public String getWeight_unit() {
        return weight_unit;
    }
    public void setWeight_unit(String weight_unit) {
        this.weight_unit = weight_unit;
    }
    public  String getWaist() {
        return waist;
    }
    public void setWaist( String waist) {
        this.waist = waist;
    }
    public String getWaist_unit() {
        return waist_unit;
    }
    public void setWaist_unit(String waist_unit) {
        this.waist_unit = waist_unit;
    }
    public  String getBmi() {
        return bmi;
    }
    public void setBmi( String bmi) {
        this.bmi = bmi;
    }
    public String getBmi_unit() {
        return bmi_unit;
    }
    public void setBmi_unit(String bmi_unit) {
        this.bmi_unit = bmi_unit;
    }
    public  String getHgb() {
        return hgb;
    }
    public void setHgb( String hgb) {
        this.hgb = hgb;
    }
    public String getHgb_unit() {
        return hgb_unit;
    }
    public void setHgb_unit(String hgb_unit) {
        this.hgb_unit = hgb_unit;
    }
    public  String getHbalc() {
        return hbalc;
    }
    public void setHbalc( String hbalc) {
        this.hbalc = hbalc;
    }
    public String getHbalc_unit() {
        return hbalc_unit;
    }
    public void setHbalc_unit(String hbalc_unit) {
        this.hbalc_unit = hbalc_unit;
    }
    public  String getLeft_eye() {
        return left_eye;
    }
    public void setLeft_eye( String left_eye) {
        this.left_eye = left_eye;
    }
    public String getLeft_eye_unit() {
        return left_eye_unit;
    }
    public void setLeft_eye_unit(String left_eye_unit) {
        this.left_eye_unit = left_eye_unit;
    }
    public  String getRight_eye() {
        return right_eye;
    }
    public void setRight_eye( String right_eye) {
        this.right_eye = right_eye;
    }
    public String getRight_eye_unit() {
        return right_eye_unit;
    }
    public void setRight_eye_unit(String right_eye_unit) {
        this.right_eye_unit = right_eye_unit;
    }
    public  String getEcg() {
        return ecg;
    }
    public void setEcg( String ecg) {
        this.ecg = ecg;
    }
    public String getEcg_attach() {
        return ecg_attach;
    }
    public void setEcg_attach(String ecg_attach) {
        this.ecg_attach = ecg_attach;
    }
    public  String getPh() {
        return ph;
    }
    public void setPh( String ph) {
        this.ph = ph;
    }
    public  String getNit() {
        return nit;
    }
    public void setNit( String nit) {
        this.nit = nit;
    }
    public String getNit_unit() {
        return nit_unit;
    }
    public void setNit_unit(String nit_unit) {
        this.nit_unit = nit_unit;
    }
    public  String getPro() {
        return pro;
    }
    public void setPro( String pro) {
        this.pro = pro;
    }
    public String getPro_unit() {
        return pro_unit;
    }
    public void setPro_unit(String pro_unit) {
        this.pro_unit = pro_unit;
    }
    public  String getGlu() {
        return glu;
    }
    public void setGlu( String glu) {
        this.glu = glu;
    }
    public String getGlu_unit() {
        return glu_unit;
    }
    public void setGlu_unit(String glu_unit) {
        this.glu_unit = glu_unit;
    }
    public  String getBil() {
        return bil;
    }
    public void setBil( String bil) {
        this.bil = bil;
    }
    public String getBil_unit() {
        return bil_unit;
    }
    public void setBil_unit(String bil_unit) {
        this.bil_unit = bil_unit;
    }
    public  String getSg() {
        return sg;
    }
    public void setSg( String sg) {
        this.sg = sg;
    }
    public String getSg_unit() {
        return sg_unit;
    }
    public void setSg_unit(String sg_unit) {
        this.sg_unit = sg_unit;
    }
    public  String getWbc() {
        return wbc;
    }
    public void setWbc( String wbc) {
        this.wbc = wbc;
    }
    public String getWbc_unit() {
        return wbc_unit;
    }
    public void setWbc_unit(String wbc_unit) {
        this.wbc_unit = wbc_unit;
    }
    public  String getVc() {
        return vc;
    }
    public void setVc( String vc) {
        this.vc = vc;
    }
    public String getVc_unit() {
        return vc_unit;
    }
    public void setVc_unit(String vc_unit) {
        this.vc_unit = vc_unit;
    }
    public  String getBld() {
        return bld;
    }
    public void setBld( String bld) {
        this.bld = bld;
    }
    public String getBld_unit() {
        return bld_unit;
    }
    public void setBld_unit(String bld_unit) {
        this.bld_unit = bld_unit;
    }
}

+ 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;
    }
}

+ 15 - 22
svr/svr-iot/src/main/java/com/yihu/iot/datainput/controller/DataInputController.java

@ -34,16 +34,13 @@ 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);
            }
            if (str.equals("json no data")) {
                return Envelop.getError(DataRequestMapping.DataInput.message_fail_jsonData_is_null, 1);
            str = dataInputService.inputBodySignsData(jsonData);
            if (!str.equals("success")) {
                return Envelop.getSuccess(DataRequestMapping.DataInput.message_fail, str);
            }
        } catch (ApiException e) {
            return Envelop.getError(e.getMessage(), e.getErrorCode());
@ -51,23 +48,19 @@ public class DataInputController {
        return Envelop.getSuccess(DataRequestMapping.DataInput.message_success, str);
    }
    @PostMapping(value = DataRequestMapping.DataInput.api_update_record, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
    @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.updateRecordStatus(jsonData));
        } catch (ApiException e){
    @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());
        }
        return Envelop.getSuccess(DataRequestMapping.DataInput.message_success, str);
    }
    @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());
        }
    }
}

+ 59 - 26
svr/svr-iot/src/main/java/com/yihu/iot/datainput/controller/DataSearchController.java

@ -4,12 +4,13 @@ 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;
import com.yihu.jw.restmodel.iot.datainput.DataBodySignsVO;
import com.yihu.jw.rm.iot.DataRequestMapping;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;
@ -24,10 +25,10 @@ public class DataSearchController {
    @PostMapping(value = DataRequestMapping.DataSearch.api_data_search_one, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
    @ApiOperation(value = "查询单条数据", notes = "根据id查询单条数据")
    public Envelop getOne(
    public Envelop<DataBodySignsVO> getOne(
            @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());
        }
@ -35,11 +36,10 @@ public class DataSearchController {
    @PostMapping(value = DataRequestMapping.DataSearch.api_user_search_list, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
    @ApiOperation(value = "查询数据", notes = "根据条件查询数据")
    public Envelop getList(@ApiParam(name = "json_data", value = "", defaultValue = "") @RequestBody String jsonData,
                           @ApiParam(name = "page", value = "", defaultValue = "") @RequestParam int page,
                           @ApiParam(name = "size", value = "", defaultValue = "") @RequestParam int size){
    @ApiModelProperty()
    public Envelop<DataBodySignsVO> getList(@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());
        }
@ -47,11 +47,9 @@ public class DataSearchController {
    @PostMapping(value = DataRequestMapping.DataSearch.api_user_search_list_page, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
    @ApiOperation(value = "查询数据,分页", notes = "根据条件查询数据,分页")
    public Envelop getListPage(@ApiParam(name = "json_data", value = "", defaultValue = "") @RequestBody String jsonData,
                               @ApiParam(name = "page", value = "", defaultValue = "") @RequestParam int page,
                               @ApiParam(name = "size", value = "", defaultValue = "") @RequestParam int size){
    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());
        }
@ -59,9 +57,11 @@ public class DataSearchController {
    @PostMapping(value = DataRequestMapping.DataSearch.api_user_search_recent5, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
    @ApiOperation(value = "获取最近5条数据", notes = "根据居民的体征类型,测量时间获取")
    public Envelop getRecent5ByTypeAndTime(@ApiParam(name = "json_data", value = "", defaultValue = "") @RequestBody String jsonData ){
    public Envelop<DataBodySignsVO> getRecent5ByTypeAndTime(@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",5);
            return Envelop.getSuccess(DataRequestMapping.DataSearch.search_success,dataSearchService.getDataToBean(jsonObject.toJSONString()));
        } catch (ApiException e){
            return Envelop.getError(e.getMessage(), e.getErrorCode());
        }
@ -69,11 +69,9 @@ public class DataSearchController {
    @PostMapping(value = DataRequestMapping.DataSearch.api_user_abnormal_times_a_week, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
    @ApiOperation(value = "获取居民一周内体征数据异常次数", notes = "血糖或血压体征数据")
    public Envelop getAbnormalTimesAWeek(@ApiParam(name = "json_data", value = "", defaultValue = "") @RequestBody String jsonData,
                                         @ApiParam(name = "page", value = "", defaultValue = "") @RequestParam int page,
                                         @ApiParam(name = "size", value = "", defaultValue = "") @RequestParam int size){
    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());
        }
@ -81,11 +79,11 @@ public class DataSearchController {
    @PostMapping(value = DataRequestMapping.DataSearch.api_user_search_recent1, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
    @ApiOperation(value = "查询体征数据", notes = "根据居民code和删除标识获取最近一次体征数据")
    public Envelop getRecent1ByCodeAndDel(@ApiParam(name = "json_data", value = "", defaultValue = "") @RequestBody String jsonData,
                                      @ApiParam(name = "page", value = "", defaultValue = "") @RequestParam int page,
                                      @ApiParam(name = "size", value = "", defaultValue = "") @RequestParam int size) {
    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());
        }
@ -93,14 +91,49 @@ 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 = "json_data", value = "", defaultValue = "") @RequestBody String jsonData,
                                       @ApiParam(name = "page", value = "", defaultValue = "") @RequestParam int page,
                                       @ApiParam(name = "size", value = "", defaultValue = "") @RequestParam int size){
    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());
        }
    }
    @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){
        try{
            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());
        }
    }
    @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){
        try{
            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());
        }
    }
}

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

@ -1,6 +1,6 @@
package com.yihu.iot.datainput.dao;
import com.yihu.jw.iot.data_input.DataProcessLogDO;
import com.yihu.jw.iot.datainput.DataProcessLogDO;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.repository.PagingAndSortingRepository;

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

@ -1,6 +1,6 @@
package com.yihu.iot.datainput.dao;
import com.yihu.jw.iot.data_input.DataStandardDO;
import com.yihu.jw.iot.datainput.DataStandardDO;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.PagingAndSortingRepository;

+ 120 - 13
svr/svr-iot/src/main/java/com/yihu/iot/datainput/service/DataInputService.java

@ -3,15 +3,20 @@ 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.es.config.model.SaveModel;
import com.yihu.base.hbase.HBaseAdmin;
import com.yihu.base.hbase.HBaseHelper;
import com.yihu.iot.datainput.enums.DataOperationTypeEnum;
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;
@ -127,11 +132,12 @@ public class DataInputService {
        String fileAbsPath = "";
        String rowkey = "";
        //提取json某些项值
        DataBodySignsDO dataBodySignsDO = JSONObject.parseObject(json,DataBodySignsDO.class);
        JSONObject jsonObject = JSONObject.parseObject(json);
        String accessToken= jsonObject.getString("access_token");
        String dataSource = jsonObject.getString("data_source");
        String deviceSn = jsonObject.getString("sn");
        String extCode = jsonObject.getString("ext_code");
        String accessToken= dataBodySignsDO.getAccess_token();
        String dataSource = dataBodySignsDO.getData_source();
        String deviceSn = dataBodySignsDO.getSn();
        String extCode = dataBodySignsDO.getExt_code();
        //包含居民身份的数据,对设备数据进行校验绑定,此处包含的信息只有身份证号和用户名以及设备序列号,如果设备库中存在该序号的设备,则对绑定居民进行修改,改为当前居民,如果没有则跳过
        if(jsonObject.containsKey("idcard") && jsonObject.containsKey("username")){
@ -158,7 +164,7 @@ public class DataInputService {
                    measuretime = DateUtils.formatDate(new Date(), DateUtil.yyyy_MM_dd_HH_mm_ss);
                }
                //生成一份json数据的rowkey
                rowkey = RowKeyUtils.makeRowKey(accessToken,deviceSn, extCode, DateUtil.dateTimeParse(measuretime).getTime());
                rowkey = RowKeyUtils.makeRowKey(accessToken,dataSource, extCode, DateUtil.dateTimeParse(measuretime).getTime());
                data.put("rid",rowkey);//hbase的rowkey
                rowkeyList.add(rowkey);
            } catch (Exception e) {
@ -208,22 +214,123 @@ public class DataInputService {
    }
    /**
     * 修改用户体征状态标志
     * 上传数据
     * @param json
     * @return
     */
    public String updateRecordStatus(String json){
//        elastricSearchHelper.update();
        return "";
    public String inputBodySignsData(String json){
        String fileName = "";
        String fileAbsPath = "";
        String rowkey = "";
        //提取json某些项值
        DataBodySignsDO dataBodySignsDO = JSONObject.parseObject(json,DataBodySignsDO.class);
        JSONObject jsonObject = JSONObject.parseObject(json);
        String accessToken= dataBodySignsDO.getAccess_token();
        String dataSource = dataBodySignsDO.getData_source();
        String deviceSn = dataBodySignsDO.getSn();
        String extCode = dataBodySignsDO.getExt_code();
        //包含居民身份的数据,对设备数据进行校验绑定,此处包含的信息只有身份证号和用户名以及设备序列号,如果设备库中存在该序号的设备,则对绑定居民进行修改,改为当前居民,如果没有则跳过
        if(jsonObject.containsKey("idcard") && jsonObject.containsKey("username")){
            String idcard = jsonObject.getString("idcard");
            String username = jsonObject.getString("username");
            updateBindUser(dataSource,deviceSn,idcard,username);
        }
        JSONArray jsonArray = jsonObject.getJSONArray("data");
        if(null == jsonArray || jsonArray.size() == 0){
            return "json no data";
        }
        List<String> rowkeyList = new ArrayList<>();
        List<Map<String,Map<String,String>>> familyList = new ArrayList<>();
        //循环数据,一组数据存一行,生成一个rowkey,并将该rowkey存到es中
        for(Object obj:jsonArray){
            JSONObject data = (JSONObject)obj;
            data.put("del","1"); //添加删除标记
            try {
                String measuretime = jsonObject.getString("measure_time");
                if(null == measuretime){
                    measuretime = DateUtils.formatDate(new Date(), DateUtil.yyyy_MM_dd_HH_mm_ss);
                }
                //生成一份json数据的rowkey
                rowkey = RowKeyUtils.makeRowKey(accessToken,dataSource, extCode, DateUtil.dateTimeParse(measuretime).getTime());
                data.put("rid",rowkey);//hbase的rowkey
                rowkeyList.add(rowkey);
            } catch (Exception e) {
                e.printStackTrace();
            }
            //组装B列
            Map<String, Map<String, String>> family = new HashMap<>();
            Map<String, String> columnsB = new HashMap<>();
            for(String key:data.keySet()){
                if(StringUtils.equalsIgnoreCase("rid",key)){ //存到hbase里的数据不需要rid
                    continue;
                }
                columnsB.put(key,data.getString(key));
            }
            if(data.containsKey("ecg")){
                fileName = data.getString("fileName");
                fileAbsPath = data.getString("filepath");
            }
            family.put(ConstantUtils.familyB,columnsB);
            familyList.add(family);
        }
        DataBodySignsDO bodySignsDO = JSONObject.parseObject(jsonObject.toJSONString(),DataBodySignsDO.class);
        List<SaveModel> list = new ArrayList<>();
        list.add(bodySignsDO);
        //将数据存入es
        elastricSearchHelper.save(ConstantUtils.esIndex, ConstantUtils.esType, list);
        /*try {
            boolean tableExists = hBaseAdmin.isTableExists(ConstantUtils.tableName);
            if (!tableExists) {
                hBaseAdmin.createTable(ConstantUtils.tableName,ConstantUtils.familyB);
            }
            hBaseHelper.addBulk(ConstantUtils.tableName, rowkeyList, familyList);
        } catch (Exception e) {
            e.printStackTrace();
            //保存日志
            dataProcessLogService.saveLog(fileName, fileAbsPath, dataSource, "", DateUtils.formatDate(new Date(), DateUtil.yyyy_MM_dd_HH_mm_ss), "1", "3", "com.yihu.iot.datainput.service.DataInputService.uploadData", DataOperationTypeEnum.upload1.getName(), 1);
            return "fail";
        }*/
        //保存日志
        dataProcessLogService.saveLog(fileName, fileAbsPath, dataSource, "", DateUtils.formatDate(new Date(), DateUtil.yyyy_MM_dd_HH_mm_ss), "1", "4", "com.yihu.iot.datainput.service.DataInputService.uploadData", DataOperationTypeEnum.upload1.getName(), 0);
        JSONObject result = new JSONObject();
        JSONArray rids = new JSONArray();
        rids.addAll(rowkeyList);
        result.put("rid",rids);
        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 deleteRecord(String json){
//        elastricSearchHelper.deleteData();
        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);
    }
}

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

@ -2,7 +2,7 @@ package com.yihu.iot.datainput.service;
import com.yihu.base.mysql.query.BaseJpaService;
import com.yihu.iot.datainput.dao.DataProcessLogDao;
import com.yihu.jw.iot.data_input.DataProcessLogDO;
import com.yihu.jw.iot.datainput.DataProcessLogDO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

+ 304 - 106
svr/svr-iot/src/main/java/com/yihu/iot/datainput/service/DataSearchService.java

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

+ 8 - 39
svr/svr-iot/src/main/java/com/yihu/iot/datainput/service/DataStandardConvertService.java

@ -5,12 +5,13 @@ import com.alibaba.fastjson.JSONObject;
import com.yihu.iot.datainput.enums.DataDeviceTypeEnum;
import com.yihu.iot.datainput.enums.DataOperationTypeEnum;
import com.yihu.iot.datainput.enums.DataTypeEnum;
import com.yihu.jw.iot.data_input.DataStandardDO;
import com.yihu.jw.iot.datainput.DataBodySignsDO;
import com.yihu.jw.iot.datainput.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.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@ -52,49 +53,17 @@ public class DataStandardConvertService {
     * @param oldJson 要转换的json
     */
    public String iconvert(String oldJson){
        //将传过来的数据转换为对象
        DataBodySignsDO dataBodySignsDO = JSONObject.parseObject(oldJson,DataBodySignsDO.class);
        JSONObject jsonObject = JSONObject.parseObject(oldJson);
        //如果没有授权或者数据来源,则表示数据异常
        if(!jsonObject.containsKey("access_token") || !jsonObject.containsKey("data_source")){
        if(null == dataBodySignsDO.getAccess_token() || (null != dataBodySignsDO.getAccess_token() && null == dataBodySignsDO.getData_source())){
            logger.warn("传过来的数据无有效access_token或data_source",oldJson);
            return "";
        }
        //拿到i健康json数据里的各项值
        Object id = jsonObject.get("id");
        if(null == id){
            id = UUID.randomUUID();
        }
        String access_token = (String)jsonObject.get("access_token");
        String data_source = (String)jsonObject.get("data_source");
        String sn = (String)jsonObject.get("deviceSn");
        String deviceType = jsonObject.getString("deviceType");
        String ext_code = (String)jsonObject.get("userType");
        String data = (String)jsonObject.get("userType") + (String)jsonObject.get("unit");
        String device_name = (String)jsonObject.get("device_name");
        String device_model = (String)jsonObject.get("device_model");
        String measure_time = (String)jsonObject.get("sendTime");
        JSONObject newJsonObject = new JSONObject();
        JSONArray jsonArray = new JSONArray();
        JSONObject dataJsonObject = new JSONObject();
        newJsonObject.put("id",id);
        newJsonObject.put("access_token",access_token);
        newJsonObject.put("data_source",data_source);
        newJsonObject.put("sn",sn);
        newJsonObject.put("ext_code",ext_code);
        newJsonObject.put("device_name",device_name);
        newJsonObject.put("device_model",device_model);
        newJsonObject.put("data",jsonArray);
        dataJsonObject.put("measure_time",measure_time);
        String deviceDataName = DataDeviceTypeEnum.getNameByType(deviceType);
        dataJsonObject.put(deviceDataName,data);
        jsonArray.add(dataJsonObject);
        //保存日志
        dataProcessLogService.saveLog("","",data_source,measure_time, DateUtils.formatDate(new Date(),DateUtil.yyyy_MM_dd_HH_mm_ss),"1","4","com.yihu.iot.datainput.service.DataStandardConvertService.iconvert", DataOperationTypeEnum.convert.getName(),0);
        //转换后的标准json数据
        return newJsonObject.toJSONString();
        dataProcessLogService.saveLog("","",dataBodySignsDO.getData_source(),"", DateUtils.formatDate(new Date(),DateUtil.yyyy_MM_dd_HH_mm_ss),"1","4","com.yihu.iot.datainput.service.DataStandardConvertService.iconvert", DataOperationTypeEnum.convert.getName(),0);
        return String.valueOf(dataBodySignsDO);
    }
}

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

@ -2,7 +2,7 @@ package com.yihu.iot.datainput.service;
import com.yihu.base.mysql.query.BaseJpaService;
import com.yihu.iot.datainput.dao.DataStandardDao;
import com.yihu.jw.iot.data_input.DataStandardDO;
import com.yihu.jw.iot.datainput.DataStandardDO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

+ 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";
}

+ 163 - 0
svr/svr-iot/src/main/resources/core-site.xml

@ -0,0 +1,163 @@
  <configuration>
    
    <property>
      <name>fs.defaultFS</name>
      <value>hdfs://dev</value>
    </property>
    
    <property>
      <name>fs.trash.interval</name>
      <value>360</value>
    </property>
    
    <property>
      <name>ha.failover-controller.active-standby-elector.zk.op.retries</name>
      <value>120</value>
    </property>
    
    <property>
      <name>ha.zookeeper.quorum</name>
      <value>node1.hde.h3c.com:2181,node2.hde.h3c.com:2181,node3.hde.h3c.com:2181</value>
    </property>
    
    <property>
      <name>hadoop.http.authentication.simple.anonymous.allowed</name>
      <value>true</value>
    </property>
    
    <property>
      <name>hadoop.proxyuser.hbase.groups</name>
      <value>*</value>
    </property>
    
    <property>
      <name>hadoop.proxyuser.hbase.hosts</name>
      <value>*</value>
    </property>
    
    <property>
      <name>hadoop.proxyuser.hcat.groups</name>
      <value>users</value>
    </property>
    
    <property>
      <name>hadoop.proxyuser.hcat.hosts</name>
      <value>node2.hde.h3c.com</value>
    </property>
    
    <property>
      <name>hadoop.proxyuser.hdfs.groups</name>
      <value>*</value>
    </property>
    
    <property>
      <name>hadoop.proxyuser.hdfs.hosts</name>
      <value>*</value>
    </property>
    
    <property>
      <name>hadoop.proxyuser.hive.groups</name>
      <value>*</value>
    </property>
    
    <property>
      <name>hadoop.proxyuser.hive.hosts</name>
      <value>node2.hde.h3c.com</value>
    </property>
    
    <property>
      <name>hadoop.proxyuser.HTTP.groups</name>
      <value>*</value>
    </property>
    
    <property>
      <name>hadoop.proxyuser.HTTP.hosts</name>
      <value>*</value>
    </property>
    
    <property>
      <name>hadoop.proxyuser.hue.groups</name>
      <value>*</value>
    </property>
    
    <property>
      <name>hadoop.proxyuser.hue.hosts</name>
      <value>*</value>
    </property>
    
    <property>
      <name>hadoop.proxyuser.oozie.groups</name>
      <value>*</value>
    </property>
    
    <property>
      <name>hadoop.proxyuser.oozie.hosts</name>
      <value>*</value>
    </property>
    
    <property>
      <name>hadoop.security.auth_to_local</name>
      <value>DEFAULT</value>
    </property>
    
    <property>
      <name>hadoop.security.authentication</name>
      <value>simple</value>
    </property>
    
    <property>
      <name>hadoop.security.authorization</name>
      <value>false</value>
    </property>
    
    <property>
      <name>hadoop.security.key.provider.path</name>
      <value></value>
    </property>
    
    <property>
      <name>io.compression.codecs</name>
      <value>org.apache.hadoop.io.compress.GzipCodec,org.apache.hadoop.io.compress.DefaultCodec,org.apache.hadoop.io.compress.SnappyCodec</value>
    </property>
    
    <property>
      <name>io.file.buffer.size</name>
      <value>131072</value>
    </property>
    
    <property>
      <name>io.serializations</name>
      <value>org.apache.hadoop.io.serializer.WritableSerialization</value>
    </property>
    
    <property>
      <name>ipc.client.connect.max.retries</name>
      <value>1</value><!--50-->
    </property>
    
    <property>
      <name>ipc.client.connection.maxidletime</name>
      <value>1000</value><!--30000-->
    </property>
    
    <property>
      <name>ipc.client.idlethreshold</name>
      <value>8000</value>
    </property>
    
    <property>
      <name>ipc.server.tcpnodelay</name>
      <value>true</value>
    </property>
    
    <property>
      <name>mapreduce.jobtracker.webinterface.trusted</name>
      <value>false</value>
    </property>
    
    <property>
      <name>net.topology.script.file.name</name>
      <value>/etc/hadoop/conf/topology_script.py</value>
    </property>
    
  </configuration>

+ 243 - 0
svr/svr-iot/src/main/resources/hbase-site.xml

@ -0,0 +1,243 @@
  <configuration>
    
    <property>
      <name>dfs.domain.socket.path</name>
      <value>/var/lib/hadoop-hdfs/dn_socket</value>
    </property>
    
    <property>
      <name>hbase.bulkload.staging.dir</name>
      <value>/apps/hbase/staging</value>
    </property>
    
    <property>
      <name>hbase.client.keyvalue.maxsize</name>
      <value>1048576</value>
    </property>
    
    <property>
      <name>hbase.client.retries.number</name>
      <value>1</value><!--35-->
    </property>
    
    <property>
      <name>hbase.client.scanner.caching</name>
      <value>100</value>
    </property>
    
    <property>
      <name>hbase.cluster.distributed</name>
      <value>true</value>
    </property>
    
    <property>
      <name>hbase.coprocessor.master.classes</name>
      <value>org.apache.hadoop.hbase.security.access.AccessController</value>
    </property>
    
    <property>
      <name>hbase.coprocessor.region.classes</name>
      <value>org.apache.hadoop.hbase.security.access.AccessController,org.apache.hadoop.hbase.security.access.SecureBulkLoadEndpoint</value>
    </property>
    
    <property>
      <name>hbase.coprocessor.regionserver.classes</name>
      <value>org.apache.hadoop.hbase.security.access.AccessController</value>
    </property>
    
    <property>
      <name>hbase.defaults.for.version.skip</name>
      <value>true</value>
    </property>
    
    <property>
      <name>hbase.hregion.majorcompaction</name>
      <value>604800000</value>
    </property>
    
    <property>
      <name>hbase.hregion.majorcompaction.jitter</name>
      <value>0.50</value>
    </property>
    
    <property>
      <name>hbase.hregion.max.filesize</name>
      <value>10737418240</value>
    </property>
    
    <property>
      <name>hbase.hregion.memstore.block.multiplier</name>
      <value>4</value>
    </property>
    
    <property>
      <name>hbase.hregion.memstore.flush.size</name>
      <value>134217728</value>
    </property>
    
    <property>
      <name>hbase.hregion.memstore.mslab.enabled</name>
      <value>true</value>
    </property>
    
    <property>
      <name>hbase.hstore.blockingStoreFiles</name>
      <value>10</value>
    </property>
    
    <property>
      <name>hbase.hstore.compaction.max</name>
      <value>10</value>
    </property>
    
    <property>
      <name>hbase.hstore.compactionThreshold</name>
      <value>3</value>
    </property>
    
    <property>
      <name>hbase.local.dir</name>
      <value>${hbase.tmp.dir}/local</value>
    </property>
    
    <property>
      <name>hbase.master.info.bindAddress</name>
      <value>0.0.0.0</value>
    </property>
    
    <property>
      <name>hbase.master.info.port</name>
      <value>16010</value>
    </property>
    
    <property>
      <name>hbase.master.port</name>
      <value>16000</value>
    </property>
    
    <property>
      <name>hbase.regionserver.global.memstore.size</name>
      <value>0.4</value>
    </property>
    
    <property>
      <name>hbase.regionserver.handler.count</name>
      <value>30</value>
    </property>
    
    <property>
      <name>hbase.regionserver.info.port</name>
      <value>16030</value>
    </property>
    
    <property>
      <name>hbase.regionserver.port</name>
      <value>16020</value>
    </property>
    
    <property>
      <name>hbase.regionserver.thrift.http</name>
      <value>true</value>
    </property>
    
    <property>
      <name>hbase.regionserver.wal.codec</name>
      <value>org.apache.hadoop.hbase.regionserver.wal.WALCellCodec</value>
    </property>
    
    <property>
      <name>hbase.replication</name>
      <value>true</value>
    </property>
    
    <property>
      <name>hbase.rootdir</name>
      <value>hdfs://dev/apps/hbase/data</value>
    </property>
    
    <property>
      <name>hbase.rpc.protection</name>
      <value>authentication</value>
    </property>
    
    <property>
      <name>hbase.rpc.timeout</name>
      <value>90000</value>
    </property>
    
    <property>
      <name>hbase.security.authentication</name>
      <value>simple</value>
    </property>
    
    <property>
      <name>hbase.security.authorization</name>
      <value>true</value>
    </property>
    
    <property>
      <name>hbase.superuser</name>
      <value>hbase</value>
    </property>
    
    <property>
      <name>hbase.thrift.support.proxyuser</name>
      <value>true</value>
    </property>
    
    <property>
      <name>hbase.tmp.dir</name>
      <value>/hadoop/hbase</value>
    </property>
    
    <property>
      <name>hbase.zookeeper.property.clientPort</name>
      <value>2181</value>
    </property>
    
    <property>
      <name>hbase.zookeeper.quorum</name>
      <value>node1.hde.h3c.com,node2.hde.h3c.com,node3.hde.h3c.com</value>
    </property>
    
    <property>
      <name>hbase.zookeeper.useMulti</name>
      <value>true</value>
    </property>
    
    <property>
      <name>hfile.block.cache.size</name>
      <value>0.40</value>
    </property>
    
    <property>
      <name>phoenix.query.timeoutMs</name>
      <value>60000</value>
    </property>
    
    <property>
      <name>replication.replicationsource.implementation</name>
      <value>com.ngdata.sep.impl.SepReplicationSource</value>
    </property>
    
    <property>
      <name>replication.source.nb.capacity</name>
      <value>1000</value>
    </property>
    
    <property>
      <name>replication.source.ratio</name>
      <value>1</value>
    </property>
    
    <property>
      <name>zookeeper.session.timeout</name>
      <value>90000</value>
    </property>
    
    <property>
      <name>zookeeper.znode.parent</name>
      <value>/hbase-unsecure</value>
    </property>
    
  </configuration>

+ 35 - 0
svr/svr-iot/src/main/resources/logback.xml

@ -0,0 +1,35 @@
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!--定义日志文件的存储地址 勿在 LogBack 的配置中使用相对路径-->
    <property name="LOG_HOME" value="D:/software/soft_dev/IdeaWorkSpace/jw2.0-dev/jw2.0/svr/svr-iot/logs" />
    <!-- 控制台输出 -->
    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
        </encoder>
    </appender>
    <!-- 按照每天生成日志文件 -->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日志文件输出的文件名-->
            <FileNamePattern>${LOG_HOME}/svr-iot.%d{yyyy-MM-dd}.log</FileNamePattern>
            <!--日志文件保留天数-->
            <MaxHistory>30</MaxHistory>
        </rollingPolicy>
        <encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
            <!--格式化输出:%d表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度%msg:日志消息,%n是换行符-->
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n</pattern>
        </encoder>
        <!--日志文件最大的大小-->
        <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
            <MaxFileSize>10MB</MaxFileSize>
        </triggeringPolicy>
    </appender>
    <!-- 日志输出级别 -->
    <root level="INFO">
        <appender-ref ref="CONSOLE" />
        <appender-ref ref="FILE" />
    </root>
</configuration>

+ 4 - 0
svr/svr-manage/pom.xml

@ -125,6 +125,10 @@
            <artifactId>spring-boot-starter-tomcat</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>com.yihu.jw</groupId>
            <artifactId>common-entity</artifactId>
        </dependency>
    </dependencies>
    <!--<build>
        <finalName>svr-manage</finalName>

+ 2 - 2
svr/svr-manage/src/main/java/com/yihu/jw/manage/controller/base/ModuleController.java

@ -1,8 +1,8 @@
package com.yihu.jw.manage.controller.base;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.yihu.jw.base.base.ModuleDO;
import com.yihu.jw.manage.service.base.ModuleService;
import com.yihu.jw.restmodel.base.base.MModule;
import com.yihu.jw.restmodel.common.Envelop;
import com.yihu.jw.rm.base.BaseRequestMapping;
import io.swagger.annotations.Api;
@ -90,7 +90,7 @@ public class ModuleController {
    @PostMapping(BaseRequestMapping.Module.api_create)
    @ApiOperation(value = "保存/更新", notes = "保存/更新")
    public Envelop saveOrUpdate(@ModelAttribute @Valid MModule module,String userCode) throws JsonProcessingException {
    public Envelop saveOrUpdate(@ModelAttribute @Valid ModuleDO module, String userCode) throws JsonProcessingException {
        return moduleService.saveOrUpdate(module,userCode);
    }

+ 2 - 2
svr/svr-manage/src/main/java/com/yihu/jw/manage/controller/wechat/TemplateController.java

@ -1,9 +1,9 @@
package com.yihu.jw.manage.controller.wechat;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.yihu.jw.base.wx.WxTemplateDO;
import com.yihu.jw.manage.service.wechat.TemplateService;
import com.yihu.jw.restmodel.common.Envelop;
import com.yihu.jw.restmodel.base.wx.MWxTemplate;
import com.yihu.jw.rm.base.WechatRequestMapping;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@ -73,7 +73,7 @@ public class TemplateController {
    @PostMapping(value = WechatRequestMapping.WxTemplate.api_create)
    @ApiOperation(value = "保存或者修改微信模板消息", notes = "保存或者修改微信模板消息")
    public Envelop saveOrUpdate(@ModelAttribute @Valid MWxTemplate template,@RequestParam String userCode) throws JsonProcessingException {
    public Envelop saveOrUpdate(@ModelAttribute @Valid WxTemplateDO template, @RequestParam String userCode) throws JsonProcessingException {
        Envelop envelop = templateService.saveOrUpdate(template,userCode);
        return envelop;
    }

+ 2 - 2
svr/svr-manage/src/main/java/com/yihu/jw/manage/controller/wechat/WechatConfigController.java

@ -1,9 +1,9 @@
package com.yihu.jw.manage.controller.wechat;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.yihu.jw.base.wx.WxWechatDO;
import com.yihu.jw.manage.service.wechat.WechatConfigService;
import com.yihu.jw.restmodel.common.Envelop;
import com.yihu.jw.restmodel.base.wx.MWxWechat;
import com.yihu.jw.rm.base.WechatRequestMapping;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
@ -74,7 +74,7 @@ public class WechatConfigController {
    @PostMapping(value = WechatRequestMapping.WxConfig.api_create)
    @ApiOperation(value = "保存微信配置", notes = "保存微信配置")
    public Envelop save(@ModelAttribute @Valid MWxWechat wechatConfig,@RequestParam String userCode) throws JsonProcessingException {
    public Envelop save(@ModelAttribute @Valid WxWechatDO wechatConfig, @RequestParam String userCode) throws JsonProcessingException {
        return wechatConfigService.saveOrUpdate(wechatConfig, userCode);
    }

+ 1 - 1
svr/svr-manage/src/main/java/com/yihu/jw/manage/service/base/FunctionService.java

@ -121,7 +121,7 @@ public class FunctionService {
            func.setCreateUser(userCode);
            func.setStatus(1);
            func.setCreateUserName(userName);
            func.setCode(UUID.randomUUID().toString().replaceAll("-",""));
//            func.setCode(UUID.randomUUID().toString().replaceAll("-",""));
        }
        func.setUpdateUserName(userName);
        func.setUpdateUser(userCode);

+ 3 - 3
svr/svr-manage/src/main/java/com/yihu/jw/manage/service/base/ModuleService.java

@ -1,9 +1,9 @@
package com.yihu.jw.manage.service.base;
import com.yihu.jw.base.base.ModuleDO;
import com.yihu.jw.manage.model.system.ManageUser;
import com.yihu.jw.manage.service.system.UserService;
import com.yihu.jw.manage.util.RestTemplateUtil;
import com.yihu.jw.restmodel.base.base.MModule;
import com.yihu.jw.restmodel.common.Envelop;
import com.yihu.jw.rm.base.BaseRequestMapping;
import net.sf.json.JSONObject;
@ -89,7 +89,7 @@ public class ModuleService {
        return template.getForObject(url +"/module/children/"+code, Envelop.class);
    }
    public Envelop saveOrUpdate(MModule module,String userCode) {
    public Envelop saveOrUpdate(ModuleDO module, String userCode) {
        ManageUser user = userService.findByCode(userCode);
        String userName = user.getName();
@ -98,7 +98,7 @@ public class ModuleService {
            module.setCreateUser(userCode);
            module.setStatus(1);
            module.setCreateUserName(userName);
            module.setCode(UUID.randomUUID().toString().replaceAll("-",""));
//            module.setCode(UUID.randomUUID().toString().replaceAll("-",""));
        }
        module.setUpdateUserName(userName);
        module.setUpdateUser(userCode);

+ 2 - 2
svr/svr-manage/src/main/java/com/yihu/jw/manage/service/wechat/GraphicMessageService.java

@ -1,11 +1,11 @@
package com.yihu.jw.manage.service.wechat;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.yihu.jw.base.wx.WxGraphicMessageDO;
import com.yihu.jw.manage.model.system.ManageUser;
import com.yihu.jw.manage.service.system.UserService;
import com.yihu.jw.manage.util.RestTemplateUtil;
import com.yihu.jw.restmodel.common.Envelop;
import com.yihu.jw.restmodel.base.wx.MWxGraphicMessage;
import com.yihu.jw.rm.base.WechatRequestMapping;
import net.sf.json.JSONObject;
import org.apache.commons.lang3.StringUtils;
@ -77,7 +77,7 @@ public class GraphicMessageService {
        return envelop;
    }
    public Envelop saveOrUpdate(MWxGraphicMessage graphicMessage, String userCode) throws JsonProcessingException {
    public Envelop saveOrUpdate(WxGraphicMessageDO graphicMessage, String userCode) throws JsonProcessingException {
        ManageUser user = userService.findByCode(userCode);
        String userName = user.getName();

+ 2 - 2
svr/svr-manage/src/main/java/com/yihu/jw/manage/service/wechat/TemplateService.java

@ -5,7 +5,7 @@ import com.yihu.jw.manage.model.system.ManageUser;
import com.yihu.jw.manage.service.system.UserService;
import com.yihu.jw.manage.util.RestTemplateUtil;
import com.yihu.jw.restmodel.common.Envelop;
import com.yihu.jw.restmodel.base.wx.MWxTemplate;
import com.yihu.jw.base.wx.WxTemplateDO;
import com.yihu.jw.rm.base.WechatRequestMapping;
import net.sf.json.JSONObject;
import org.apache.commons.lang3.StringUtils;
@ -79,7 +79,7 @@ public class TemplateService {
        return envelop;
    }
    public Envelop saveOrUpdate(MWxTemplate temp, String userCode) throws JsonProcessingException {
    public Envelop saveOrUpdate(WxTemplateDO temp, String userCode) throws JsonProcessingException {
        ManageUser user = userService.findByCode(userCode);
        String userName = user.getName();

+ 2 - 2
svr/svr-manage/src/main/java/com/yihu/jw/manage/service/wechat/WechatConfigService.java

@ -1,11 +1,11 @@
package com.yihu.jw.manage.service.wechat;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.yihu.jw.base.wx.WxWechatDO;
import com.yihu.jw.manage.model.system.ManageUser;
import com.yihu.jw.manage.service.system.UserService;
import com.yihu.jw.manage.util.RestTemplateUtil;
import com.yihu.jw.restmodel.common.Envelop;
import com.yihu.jw.restmodel.base.wx.MWxWechat;
import com.yihu.jw.rm.base.WechatRequestMapping;
import net.sf.json.JSONObject;
import org.apache.commons.lang3.StringUtils;
@ -75,7 +75,7 @@ public class WechatConfigService {
        return envelop;
    }
    public Envelop saveOrUpdate(MWxWechat wechatConfig,String userCode) throws JsonProcessingException {
    public Envelop saveOrUpdate(WxWechatDO wechatConfig, String userCode) throws JsonProcessingException {
        ManageUser user = userService.findByCode(userCode);
        String userName = user.getName();

+ 2 - 2
svr/svr-manage/src/main/java/com/yihu/jw/manage/service/wechat/WechatMenuService.java

@ -1,11 +1,11 @@
package com.yihu.jw.manage.service.wechat;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.yihu.jw.base.wx.WxMenuDO;
import com.yihu.jw.manage.model.system.ManageUser;
import com.yihu.jw.manage.service.system.UserService;
import com.yihu.jw.manage.util.RestTemplateUtil;
import com.yihu.jw.restmodel.common.Envelop;
import com.yihu.jw.restmodel.base.wx.MWxMenu;
import com.yihu.jw.rm.base.WechatRequestMapping;
import net.sf.json.JSONObject;
import org.apache.commons.lang3.StringUtils;
@ -74,7 +74,7 @@ public class WechatMenuService {
        return envelop;
    }
    public Envelop saveOrUpdate(MWxMenu menu,String userCode) throws JsonProcessingException {
    public Envelop saveOrUpdate(WxMenuDO menu, String userCode) throws JsonProcessingException {
        ManageUser user = userService.findByCode(userCode);
        String userName = user.getName();

+ 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

@ -23,4 +23,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);
}