Browse Source

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

yeshijie 7 years ago
parent
commit
678ba7b6cb
59 changed files with 1495 additions and 255 deletions
  1. 32 1
      base/common-data-es/src/main/java/com/yihu/base/es/config/ElastricSearchHelper.java
  2. 128 0
      common/common-entity/src/main/java/com/yihu/jw/iot/data_input/DataProcessLogDO.java
  3. 91 0
      common/common-entity/src/main/java/com/yihu/jw/iot/data_input/DataStandardDO.java
  4. 33 0
      common/common-entity/src/main/java/com/yihu/jw/iot/device/IotDeviceDO.java
  5. 1 1
      common/common-request-mapping/src/main/java/com/yihu/jw/rm/base/BaseRequestMapping.java
  6. 31 0
      common/common-request-mapping/src/main/java/com/yihu/jw/rm/iot/DataRequestMapping.java
  7. 1 1
      server/svr-discovery/pom.xml
  8. 1 0
      server/svr-discovery/src/main/resources/application.yml
  9. 4 3
      svr/svr-base/src/main/resources/bootstrap.yml
  10. 37 0
      svr/svr-iot/pom.xml
  11. 1 1
      svr/svr-iot/src/main/java/com/yihu/iot/config/jpa/IotJpa.java
  12. 6 1
      svr/svr-iot/src/main/java/com/yihu/iot/dao/device/IotDeviceDao.java
  13. 0 1
      svr/svr-iot/src/main/java/com/yihu/iot/dao/device/IotDeviceOrderDao.java
  14. 0 1
      svr/svr-iot/src/main/java/com/yihu/iot/dao/device/IotDevicePurchaseDao.java
  15. 0 1
      svr/svr-iot/src/main/java/com/yihu/iot/dao/device/IotDeviceQualityInspectionPlanDao.java
  16. 0 1
      svr/svr-iot/src/main/java/com/yihu/iot/dao/dict/IotDeviceDictDao.java
  17. 0 2
      svr/svr-iot/src/main/java/com/yihu/iot/dao/supplier/IotDeviceSupplierDao.java
  18. 0 1
      svr/svr-iot/src/main/java/com/yihu/iot/dao/supplier/IotSupplyDeviceDao.java
  19. 0 1
      svr/svr-iot/src/main/java/com/yihu/iot/dao/supplier/IotSupplyDeviceDataTypeDao.java
  20. 44 0
      svr/svr-iot/src/main/java/com/yihu/iot/datainput/controller/DataInputController.java
  21. 35 0
      svr/svr-iot/src/main/java/com/yihu/iot/datainput/controller/DataStandardConvertController.java
  22. 9 0
      svr/svr-iot/src/main/java/com/yihu/iot/datainput/dao/DataProcessLogDao.java
  23. 14 0
      svr/svr-iot/src/main/java/com/yihu/iot/datainput/dao/DataStandardDao.java
  24. 58 0
      svr/svr-iot/src/main/java/com/yihu/iot/datainput/enums/DataDeviceTypeEnum.java
  25. 32 0
      svr/svr-iot/src/main/java/com/yihu/iot/datainput/enums/DataOperationTypeEnum.java
  26. 196 0
      svr/svr-iot/src/main/java/com/yihu/iot/datainput/service/DataInputService.java
  27. 39 0
      svr/svr-iot/src/main/java/com/yihu/iot/datainput/service/DataProcessLogService.java
  28. 110 0
      svr/svr-iot/src/main/java/com/yihu/iot/datainput/service/DataStandardConvertService.java
  29. 23 0
      svr/svr-iot/src/main/java/com/yihu/iot/datainput/service/DataStandardService.java
  30. 17 0
      svr/svr-iot/src/main/java/com/yihu/iot/datainput/util/RowKeyUtils.java
  31. 30 0
      svr/svr-iot/src/main/java/com/yihu/iot/service/device/IotDeviceService.java
  32. 41 1
      svr/svr-iot/src/main/resources/application.yml
  33. 4 4
      svr/svr-iot/src/main/resources/bootstrap.yml
  34. 16 21
      web-gateway/pom.xml
  35. 1 1
      web-gateway/src/main/java/com/yihu/jw/aspect/LogAspect.java
  36. 21 18
      web-gateway/src/main/java/com/yihu/jw/commnon/base/user/BaseUserContants.java
  37. 18 0
      web-gateway/src/main/java/com/yihu/jw/commnon/iot/DataConstants.java
  38. 40 40
      web-gateway/src/main/java/com/yihu/jw/config/security/ClientService.java
  39. 48 48
      web-gateway/src/main/java/com/yihu/jw/config/security/RbasService.java
  40. 61 61
      web-gateway/src/main/java/com/yihu/jw/config/security/UserService.java
  41. 4 4
      web-gateway/src/main/java/com/yihu/jw/controller/base/user/BaseMenuController.java
  42. 2 2
      web-gateway/src/main/java/com/yihu/jw/controller/base/user/BaseRoleController.java
  43. 2 2
      web-gateway/src/main/java/com/yihu/jw/controller/base/version/UserVersionController.java
  44. 47 0
      web-gateway/src/main/java/com/yihu/jw/controller/iot/data_input/DataInputController.java
  45. 36 0
      web-gateway/src/main/java/com/yihu/jw/controller/iot/data_input/DataStandardConvertController.java
  46. 32 32
      web-gateway/src/main/java/com/yihu/jw/controller/login/LoginController.java
  47. 1 1
      web-gateway/src/main/java/com/yihu/jw/feign/base/user/BaseMenuFeign.java
  48. 1 1
      web-gateway/src/main/java/com/yihu/jw/feign/base/user/BaseRoleFeign.java
  49. 1 1
      web-gateway/src/main/java/com/yihu/jw/feign/base/user/EmployFeign.java
  50. 2 1
      web-gateway/src/main/java/com/yihu/jw/feign/base/version/UserVersionFeign.java
  51. 2 0
      web-gateway/src/main/java/com/yihu/jw/feign/fallbackfactory/base/user/BaseMenuFeignFallbackFactory.java
  52. 2 0
      web-gateway/src/main/java/com/yihu/jw/feign/fallbackfactory/base/user/BaseRoleFeignFallbackFactory.java
  53. 2 0
      web-gateway/src/main/java/com/yihu/jw/feign/fallbackfactory/base/user/EmployeeFeignFallbackFactory.java
  54. 2 0
      web-gateway/src/main/java/com/yihu/jw/feign/fallbackfactory/base/version/UserVersionFeignFallbackFactory.java
  55. 35 0
      web-gateway/src/main/java/com/yihu/jw/feign/fallbackfactory/iot/data_input/DataInputFeignFallbackFactory.java
  56. 32 0
      web-gateway/src/main/java/com/yihu/jw/feign/fallbackfactory/iot/data_input/DataStandardConvertFeignFallbackFactory.java
  57. 28 0
      web-gateway/src/main/java/com/yihu/jw/feign/iot/data_input/DataInputFeign.java
  58. 23 0
      web-gateway/src/main/java/com/yihu/jw/feign/iot/data_input/DataStandardConvertFeign.java
  59. 18 1
      web-gateway/src/main/resources/application.yml

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

@ -30,7 +30,7 @@ public class ElastricSearchHelper {
        JestClient jestClient = null;
        try {
            //得到链接elasticFactory.getJestClient();
            jestClient = elasticFactory.getJestClient();
            int success = 0;
            int error = 0;
            Bulk.Builder bulk = new Bulk.Builder().defaultIndex(index).defaultType(type);
@ -59,6 +59,37 @@ public class ElastricSearchHelper {
        return null;
    }
    public Boolean save(String index, String type, String source) {
        JestClient jestClient = null;
        try {
            //得到链接elasticFactory.getJestClient();
            jestClient = elasticFactory.getJestClient();
            int success = 0;
            int error = 0;
            Bulk.Builder bulk = new Bulk.Builder().defaultIndex(index).defaultType(type);
            try {
                Index indexObj = new Index.Builder(source).build();
                success++;
                bulk.addAction(indexObj);
            } catch (Exception e) {
                logger.error(e.getMessage());
                error++;
            }
            BulkResult br = jestClient.execute(bulk.build());
            logger.info("save flag:" + br.isSucceeded());
            logger.info("save success:" + success);
            logger.info("save error:" + error);
            return br.isSucceeded();
        } catch (Exception e) {
            logger.error(" save error :" + e.getMessage());
        } finally {
            if (jestClient != null) {
                jestClient.shutdownClient();
            }
        }
        return null;
    }
    public Boolean update(String index, String type, List<SaveModel> sms) {
        JestClient jestClient = null;

+ 128 - 0
common/common-entity/src/main/java/com/yihu/jw/iot/data_input/DataProcessLogDO.java

@ -0,0 +1,128 @@
package com.yihu.jw.iot.data_input;
import com.yihu.jw.IdEntity;
import com.yihu.jw.IdEntityWithOperation;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import java.io.Serializable;
@Entity
@Table(name = "iot_data_process_log")
public class DataProcessLogDO extends IdEntity implements Serializable {
    @Column(name = "data_id")
    private String dataId;
    @Column(name = "file_name")
    private String fileName;
    @Column(name = "file_absoulte_path")
    private String fileAbsoultePath;
    @Column(name = "data_source")
    private String dataSource;
    @Column(name = "receive_time")
    private String receiveTime;
    @Column(name = "upload_time")
    private String uploadTime;
    @Column(name = "process_type")
    private String processType;
    @Column(name = "process_status")
    private String processStatus;
    @Column(name = "process_interface")
    private String processInterface;
    @Column(name = "process_des")
    private String processDes;
    @Column(name = "fail_count")
    private int fileCount;
    public String getFileName() {
        return fileName;
    }
    public void setFileName(String fileName) {
        this.fileName = fileName;
    }
    public String getFileAbsoultePath() {
        return fileAbsoultePath;
    }
    public void setFileAbsoultePath(String fileAbsoultePath) {
        this.fileAbsoultePath = fileAbsoultePath;
    }
    public String getDataSource() {
        return dataSource;
    }
    public void setDataSource(String dataSource) {
        this.dataSource = dataSource;
    }
    public String getReceiveTime() {
        return receiveTime;
    }
    public void setReceiveTime(String receiveTime) {
        this.receiveTime = receiveTime;
    }
    public String getUploadTime() {
        return uploadTime;
    }
    public void setUploadTime(String uploadTime) {
        this.uploadTime = uploadTime;
    }
    public String getProcessType() {
        return processType;
    }
    public void setProcessType(String processType) {
        this.processType = processType;
    }
    public String getProcessStatus() {
        return processStatus;
    }
    public void setProcessStatus(String processStatus) {
        this.processStatus = processStatus;
    }
    public String getProcessDes() {
        return processDes;
    }
    public void setProcessDes(String processDes) {
        this.processDes = processDes;
    }
    public int getFileCount() {
        return fileCount;
    }
    public void setFileCount(int fileCount) {
        this.fileCount = fileCount;
    }
    public String getProcessInterface() {
        return processInterface;
    }
    public void setProcessInterface(String processInterface) {
        this.processInterface = processInterface;
    }
}

+ 91 - 0
common/common-entity/src/main/java/com/yihu/jw/iot/data_input/DataStandardDO.java

@ -0,0 +1,91 @@
package com.yihu.jw.iot.data_input;
import com.yihu.jw.IdEntity;
import com.yihu.jw.IdEntityWithOperation;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Table;
import java.io.Serializable;
@Entity
@Table(name = "iot_base_data_def")
public class DataStandardDO extends IdEntity implements Serializable {
    @Column(name = "base_name")
    private String baseName;
    @Column(name = "item_code")
    private String itemCode;
    @Column(name = "item_name")
    private String itemName;
    @Column(name = "item_type")
    private String itemType;
    @Column(name = "required")
    private String required;
    @Column(name = "item_value_min")
    private String itemValueMin;
    @Column(name = "item_value_max")
    private String itemValueMax;
    public String getBaseName() {
        return baseName;
    }
    public void setBaseName(String baseName) {
        this.baseName = baseName;
    }
    public String getItemCode() {
        return itemCode;
    }
    public void setItemCode(String itemCode) {
        this.itemCode = itemCode;
    }
    public String getItemName() {
        return itemName;
    }
    public void setItemName(String itemName) {
        this.itemName = itemName;
    }
    public String getItemType() {
        return itemType;
    }
    public void setItemType(String itemType) {
        this.itemType = itemType;
    }
    public String getRequired() {
        return required;
    }
    public void setRequired(String required) {
        this.required = required;
    }
    public String getItemValueMin() {
        return itemValueMin;
    }
    public void setItemValueMin(String itemValueMin) {
        this.itemValueMin = itemValueMin;
    }
    public String getItemValueMax() {
        return itemValueMax;
    }
    public void setItemValueMax(String itemValueMax) {
        this.itemValueMax = itemValueMax;
    }
}

+ 33 - 0
common/common-entity/src/main/java/com/yihu/jw/iot/device/IotDeviceDO.java

@ -54,6 +54,9 @@ public class IotDeviceDO extends IdEntityWithOperation implements Serializable {
    @Column(name = "manufacturer_name")
    private String manufacturerName;//厂商名称
    @Column(name = "manufacturer_tel")
    private String manufactureTel;//厂商名称
    @Column(name = "order_code")
    private String orderCode;//订单code
@ -75,6 +78,12 @@ public class IotDeviceDO extends IdEntityWithOperation implements Serializable {
    @Column(name = "del")
    private Integer del;//删除标志(1有效,0删除)
    @Column(name = "sale_org_code")
    private String saleOrgCode; //经销商单位代码
    @Column(name = "sale_org_name")
    private String saleOrgName; //经销商单位名称
    public String getSaasId() {
        return saasId;
    }
@ -179,6 +188,14 @@ public class IotDeviceDO extends IdEntityWithOperation implements Serializable {
        this.manufacturerName = manufacturerName;
    }
    public String getManufactureTel() {
        return manufactureTel;
    }
    public void setManufactureTel(String manufactureTel) {
        this.manufactureTel = manufactureTel;
    }
    public String getOrderCode() {
        return orderCode;
    }
@ -234,4 +251,20 @@ public class IotDeviceDO extends IdEntityWithOperation implements Serializable {
    public void setDel(Integer del) {
        this.del = del;
    }
    public String getSaleOrgCode() {
        return saleOrgCode;
    }
    public void setSaleOrgCode(String saleOrgCode) {
        this.saleOrgCode = saleOrgCode;
    }
    public String getSaleOrgName() {
        return saleOrgName;
    }
    public void setSaleOrgName(String saleOrgName) {
        this.saleOrgName = saleOrgName;
    }
}

+ 1 - 1
common/common-request-mapping/src/main/java/com/yihu/jw/rm/base/BaseRequestMapping.java

@ -139,7 +139,7 @@ public class BaseRequestMapping {
        public static final String api_create="/systemDictList";
        public static final String api_update="/systemDictList";
        public static final String api_delete="/systemDictList";
        public static final String api_getById="/getById";
        public static final String api_getById="/systemDictList/getById";
        public static final String api_getList="/systemDictList/list";
        public static final String api_getListNoPage="/systemDictList/listNoPage";
        public static final String api_getChildren="/systemDictList/children/{id}";

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

@ -0,0 +1,31 @@
package com.yihu.jw.rm.iot;
public class DataRequestMapping {
    public static final String api_iot_common = "svr-iot";
    public static final Integer api_iot_fail = -1;
    /**
     * 数据标准转换
     */
    public static class DataStandardConvert{
        public static final String api_convert = "dataConvert";//文件流上传
        public static final String message_success_convert = "转换成功";
        public static final String message_fail_convert = "转换失败";
        public static final String message_fail_jsonData_is_null = "jsonData is null";
    }
    /**
     * 数据上传
     */
    public static class DataInput{
        public static final String api_data_input = "input";//数据上传
        public static final String api_user_bind = "userBind";//设备注册绑定
        public static final String message_success = "上传成功";
        public static final String message_fail = "上传失败";
        public static final String message_fail_jsonData_is_null = "jsonData is null";
    }
}

+ 1 - 1
server/svr-discovery/pom.xml

@ -13,7 +13,7 @@
    <groupId>com.yihu.jw</groupId>
    <artifactId>svr-discovery</artifactId>
    <version>1.0.0</version>
    <packaging>jar</packaging>
    <packaging>war</packaging>
    <dependencies>
        <dependency>

+ 1 - 0
server/svr-discovery/src/main/resources/application.yml

@ -1,5 +1,6 @@
server:
  port: 8761
  display-name: svr-discovery
spring:
  application:

+ 4 - 3
svr/svr-base/src/main/resources/bootstrap.yml

@ -3,11 +3,11 @@ spring:
  #从发现服务里面取配置服务的信息
  cloud:
    config:
      failFast: true ##启动快速失败 即链接不到配置服务就启动失败
      failFast: true #启动快速失败 即链接不到配置服务就启动失败
      username: jw
      password: jkzl
      discovery:
        enabled: true ##使用发现服务
        enabled: true #使用发现服务
        service-id: svr-configurations ##配置服务的名字
@ -20,7 +20,8 @@ eureka:
  client:
    serviceUrl:
      #http://账号:密码@127.0.0.1:8761/eureka/
      defaultZone: http://jw:jkzl@localhost:8761/eureka/
      defaultZone: http://jw:jkzl@172.19.103.33:8761//eureka/
#      defaultZone: http://jw:jkzl@127.0.0.1:8761//eureka/
---
spring:

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

@ -18,6 +18,10 @@
            <groupId>com.yihu.jw</groupId>
            <artifactId>common-entity</artifactId>
        </dependency>
        <dependency>
            <groupId>com.yihu.base</groupId>
            <artifactId>common-data-es</artifactId>
        </dependency>
        <dependency>
            <groupId>com.yihu.jw</groupId>
            <artifactId>common-request-mapping</artifactId>
@ -98,5 +102,38 @@
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-config</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-test-autoconfigure</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
        </dependency>
        <dependency>
            <groupId>com.yihu.base</groupId>
            <artifactId>common-data-es</artifactId>
            <version>1.0.0</version>
        </dependency>
        <dependency>
            <groupId>com.yihu.base</groupId>
            <artifactId>common-data-hbase</artifactId>
            <version>1.0.0</version>
        </dependency>
    </dependencies>
</project>

+ 1 - 1
svr/svr-iot/src/main/java/com/yihu/iot/config/jpa/IotJpa.java

@ -24,7 +24,7 @@ import javax.sql.DataSource;
@EnableJpaRepositories(
        entityManagerFactoryRef = "iotEntityManagerFactory",
        transactionManagerRef = "iotTransactionManager",
        basePackages = {"com.yihu.iot.dao"})   //设置Repository所在位置
        basePackages = {"com.yihu.iot.dao","com.yihu.iot.datainput.dao"})   //设置Repository所在位置
public class IotJpa {
    @Autowired

+ 6 - 1
svr/svr-iot/src/main/java/com/yihu/iot/dao/device/IotDeviceDao.java

@ -1,7 +1,6 @@
package com.yihu.iot.dao.device;
import com.yihu.jw.iot.device.IotDeviceDO;
import com.yihu.jw.iot.dict.IotDeviceDictDO;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.PagingAndSortingRepository;
@ -13,4 +12,10 @@ public interface IotDeviceDao extends PagingAndSortingRepository<IotDeviceDO, St
    @Query("from IotDeviceDO w where w.id =?1")
    IotDeviceDO findById(String id);
    @Query("select count(*) from IotDeviceDO w where w.deviceSn =?1")
    int countByDeviceSn(String deviceSn);
    @Query("from IotDeviceDO w where w.deviceSn =?1")
    IotDeviceDO findByDeviceSn(String deviceSn);
}

+ 0 - 1
svr/svr-iot/src/main/java/com/yihu/iot/dao/device/IotDeviceOrderDao.java

@ -1,6 +1,5 @@
package com.yihu.iot.dao.device;
import com.yihu.jw.iot.device.IotDeviceDO;
import com.yihu.jw.iot.device.IotDeviceOrderDO;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Query;

+ 0 - 1
svr/svr-iot/src/main/java/com/yihu/iot/dao/device/IotDevicePurchaseDao.java

@ -1,6 +1,5 @@
package com.yihu.iot.dao.device;
import com.yihu.jw.iot.device.IotDeviceDO;
import com.yihu.jw.iot.device.IotDevicePurchaseDO;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Query;

+ 0 - 1
svr/svr-iot/src/main/java/com/yihu/iot/dao/device/IotDeviceQualityInspectionPlanDao.java

@ -1,6 +1,5 @@
package com.yihu.iot.dao.device;
import com.yihu.jw.iot.device.IotDevicePurchaseDO;
import com.yihu.jw.iot.device.IotDeviceQualityInspectionPlanDO;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Query;

+ 0 - 1
svr/svr-iot/src/main/java/com/yihu/iot/dao/dict/IotDeviceDictDao.java

@ -1,7 +1,6 @@
package com.yihu.iot.dao.dict;
import com.yihu.jw.iot.dict.IotDeviceDictDO;
import com.yihu.jw.iot.supplier.IotSupplyDeviceDataTypeDO;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.PagingAndSortingRepository;

+ 0 - 2
svr/svr-iot/src/main/java/com/yihu/iot/dao/supplier/IotDeviceSupplierDao.java

@ -5,8 +5,6 @@ import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.PagingAndSortingRepository;
import java.util.List;
/**
 * @author yeshijie on 2017/12/5.
 */

+ 0 - 1
svr/svr-iot/src/main/java/com/yihu/iot/dao/supplier/IotSupplyDeviceDao.java

@ -1,6 +1,5 @@
package com.yihu.iot.dao.supplier;
import com.yihu.jw.iot.supplier.IotDeviceSupplierDO;
import com.yihu.jw.iot.supplier.IotSupplyDeviceDO;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Query;

+ 0 - 1
svr/svr-iot/src/main/java/com/yihu/iot/dao/supplier/IotSupplyDeviceDataTypeDao.java

@ -1,6 +1,5 @@
package com.yihu.iot.dao.supplier;
import com.yihu.jw.iot.supplier.IotSupplyDeviceDO;
import com.yihu.jw.iot.supplier.IotSupplyDeviceDataTypeDO;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Query;

+ 44 - 0
svr/svr-iot/src/main/java/com/yihu/iot/datainput/controller/DataInputController.java

@ -0,0 +1,44 @@
package com.yihu.iot.datainput.controller;
import com.yihu.iot.datainput.service.DataInputService;
import com.yihu.jw.exception.ApiException;
import com.yihu.jw.restmodel.common.Envelop;
import com.yihu.jw.rm.iot.DataRequestMapping;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping(DataRequestMapping.api_iot_common)
@Api(value = "数据上传操作", description = "数据上传操作")
public class DataInputController {
    @Autowired
    private DataInputService dataInputService;
    @PostMapping(value = DataRequestMapping.DataInput.api_user_bind, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
    @ApiOperation(value = "设备注册绑定", notes = "设备注册并绑定用户")
    public Envelop bindUser(@ApiParam(name = "json_data", value = "", defaultValue = "") @RequestBody String jsonData){
        try{
            return Envelop.getSuccess(DataRequestMapping.DataInput.message_success,dataInputService.bindUser(jsonData));
        } catch (ApiException e){
            return Envelop.getError(e.getMessage(), e.getErrorCode());
        }
    }
    @PostMapping(value = DataRequestMapping.DataInput.api_data_input, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
    @ApiOperation(value = "数据上传", notes = "数据上传入库")
    public Envelop uoloadData(@ApiParam(name = "json_data", value = "", defaultValue = "") @RequestBody String jsonData){
        try {
            return Envelop.getSuccess(DataRequestMapping.DataInput.message_success, dataInputService.uploadData(jsonData));
        } catch (ApiException e) {
            return Envelop.getError(e.getMessage(), e.getErrorCode());
        }
    }
}

+ 35 - 0
svr/svr-iot/src/main/java/com/yihu/iot/datainput/controller/DataStandardConvertController.java

@ -0,0 +1,35 @@
package com.yihu.iot.datainput.controller;
import com.yihu.iot.datainput.service.DataStandardConvertService;
import com.yihu.jw.exception.ApiException;
import com.yihu.jw.restmodel.common.Envelop;
import com.yihu.jw.rm.iot.DataRequestMapping;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping(DataRequestMapping.api_iot_common)
@Api(value = "数据标准转换操作", description = "数据标准转换接口")
public class DataStandardConvertController {
    @Autowired
    private DataStandardConvertService dataStandardConvertService;
    @PostMapping(value = DataRequestMapping.DataStandardConvert.api_convert, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
    @ApiOperation(value = "数据标准转换", notes = "数据标准转换")
    public Envelop convert(@ApiParam(name = "json_data", value = "", defaultValue = "") @RequestBody String jsonData){
        try{
            return Envelop.getSuccess(DataRequestMapping.DataStandardConvert.message_success_convert,dataStandardConvertService.iconvert(jsonData));
        } catch (ApiException e){
            return Envelop.getError(e.getMessage(), e.getErrorCode());
        }
    }
}

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

@ -0,0 +1,9 @@
package com.yihu.iot.datainput.dao;
import com.yihu.jw.iot.data_input.DataProcessLogDO;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.repository.PagingAndSortingRepository;
public interface DataProcessLogDao extends PagingAndSortingRepository<DataProcessLogDO, String>, JpaSpecificationExecutor<DataProcessLogDO> {
}

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

@ -0,0 +1,14 @@
package com.yihu.iot.datainput.dao;
import com.yihu.jw.iot.data_input.DataStandardDO;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.PagingAndSortingRepository;
import java.util.List;
public interface DataStandardDao extends PagingAndSortingRepository<DataStandardDO, String>, JpaSpecificationExecutor<DataStandardDO> {
    @Query("select baseName,itemCode,itemName,itemType,required,itemValueMin,itemValueMax from DataStandardDO" )
    List<DataStandardDO>  getList();
}

+ 58 - 0
svr/svr-iot/src/main/java/com/yihu/iot/datainput/enums/DataDeviceTypeEnum.java

@ -0,0 +1,58 @@
package com.yihu.iot.datainput.enums;
import org.apache.commons.lang.StringUtils;
/**
 * 设备类型枚举类,有些设备测量血压,有些设备测量血糖等
 */
public enum DataDeviceTypeEnum {
    SYSTOLIC("1","SYSTOLIC"),
    BLOOD_SUGAR("2","BLOOD_SUGAR");
    private String type;
    private String name;
    private DataDeviceTypeEnum(String type,String name){
        this.type = type;
        this.name = name;
    }
    public String getType() {
        return type;
    }
    public void setType(String type) {
        this.type = type;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    /**
     * 根据传入的设备类型返回对应的测量名称
     * @param type
     * @return
     */
    public static String getNameByType(String type){
        String name = "";
        DataDeviceTypeEnum[] arrays = DataDeviceTypeEnum.values();
        for(int i = 0;i < arrays.length;i++){
            if(StringUtils.equals(type,arrays[i].getType())){
                name = arrays[i].getName();
                return name;
            }
        }
        return name;
    }
    @Override
    public String toString() {
        return this.type.toString();
    }
}

+ 32 - 0
svr/svr-iot/src/main/java/com/yihu/iot/datainput/enums/DataOperationTypeEnum.java

@ -0,0 +1,32 @@
package com.yihu.iot.datainput.enums;
public enum DataOperationTypeEnum {
    convert("数据标准转换"),
    bindUser("设备注册绑定"),
    upload0("不含居民信息的数据上传"),
    upload1("含居民信息的数据上传"),
    search("数据查询");
    private String name;
    private DataOperationTypeEnum(String name){
        this.name = name;
    }
    public String getName() {
        return name.toString();
    }
    public void setName(String name) {
        this.name = name;
    }
    @Override
    public String toString() {
        return this.name.toString();
    }
}

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

@ -0,0 +1,196 @@
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.HBaseHelper;
import com.yihu.iot.datainput.enums.DataOperationTypeEnum;
import com.yihu.iot.datainput.util.RowKeyUtils;
import com.yihu.iot.service.device.IotDeviceService;
import com.yihu.jw.iot.device.IotDeviceDO;
import com.yihu.jw.util.date.DateUtil;
import org.apache.http.client.utils.DateUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.*;
/**
 * 1、设备注册及绑定
 * 2、不含居民身份的数据上传协议
 * 3、含居民身份的数据上传协议
 * 4、数据查询返回的协议格式
 */
@Component
public class DataInputService {
    private Logger logger = LoggerFactory.getLogger(DataInputService.class);
    @Autowired
    private IotDeviceService iotDeviceService;
    @Autowired
    private DataProcessLogService dataProcessLogService;
    @Autowired
    private ElastricSearchHelper elastricSearchHelper;
    @Autowired
    private HBaseHelper hBaseHelper;
    private String esIndex = "body_health_data";
    private String esType = "signs_data";
    private String tableName = "body_health_data";
    private String familyA = "column_signs_header";
    private String familyB = "column_signs_data";
    /**
     * 居民设备注册及绑定
     */
    public String bindUser(String json){
        List<IotDeviceDO> deviceDOList = new ArrayList<>();
        JSONObject jsonObject = JSONObject.parseObject(json);
        String data_source = jsonObject.getString("data_source");
        JSONArray jsonArray = jsonObject.getJSONArray("data");
        try {
            if(null != jsonArray){
                for(Object array:jsonArray){
                    JSONObject dataJson = (JSONObject)JSONObject.toJSON(array);
                    IotDeviceDO iotDeviceDO = new IotDeviceDO();
                    String sn = dataJson.getString("sn");
                    int count = iotDeviceService.countByDeviceSn(sn);
                    if(count > 0){
                        continue; //表示设备已经绑定过
                    }
                    iotDeviceDO.setDeviceSn(sn);
                    iotDeviceDO.setCode(dataJson.getString("ext_code"));
                    iotDeviceDO.setName(dataJson.getString("device_name"));
                    iotDeviceDO.setDeviceModel(dataJson.getString("device_model"));
                    iotDeviceDO.setDeviceSource("2"); //设备来源为居民绑定
                    iotDeviceDO.setCreateUser(dataJson.getString("idcard")); //居民绑定的,暂定创建人和修改人均为居民
                    iotDeviceDO.setCreateUserName(dataJson.getString("username"));
                    iotDeviceDO.setUpdateUser(dataJson.getString("idcard"));
                    iotDeviceDO.setUpdateUserName(dataJson.getString("username"));
                    iotDeviceDO.setManufacturerCode(dataJson.getString("manufacture_code"));
                    iotDeviceDO.setManufacturerName(dataJson.getString("manufacture_name"));
                    iotDeviceDO.setManufactureTel(dataJson.getString("manufacture_tel"));
                    iotDeviceDO.setSupplierCode(dataJson.getString("owner_org_code"));
                    iotDeviceDO.setSupplierName(dataJson.getString("owner_org_name"));
                    iotDeviceDO.setName(dataJson.getString("sale_org_code"));
                    iotDeviceDO.setName(dataJson.getString("sale_org_name"));
                    deviceDOList.add(iotDeviceDO);
                }
                iotDeviceService.bindUser(deviceDOList);
                //保存日志
                dataProcessLogService.saveLog("","",data_source,"", DateUtils.formatDate(new Date(), DateUtil.yyyy_MM_dd_HH_mm_ss),"1","4","com.yihu.iot.datainput.service.DataInputService.bindUser",DataOperationTypeEnum.bindUser.getName(),0);
            }
        }catch (Exception e){
            logger.error("注册绑定失败");
            //保存日志
            dataProcessLogService.saveLog("","",data_source,"", DateUtils.formatDate(new Date(), DateUtil.yyyy_MM_dd_HH_mm_ss),"1","3","com.yihu.iot.datainput.service.DataInputService.bindUser",DataOperationTypeEnum.bindUser.getName(),1);
            return "fail";
        }
        return "success";
    }
    /**
     * 修改设备绑定居民信息
     */
    public void updateBindUser(String data_source,String deviveSn,String idcard,String username){
        IotDeviceDO iotDeviceDO = iotDeviceService.findByDeviceSn(deviveSn);
        if(null != iotDeviceDO){
            iotDeviceDO.setUpdateUser(idcard);
            iotDeviceDO.setUpdateUserName(username);
        }
        iotDeviceService.save(iotDeviceDO);
        //保存日志
        dataProcessLogService.saveLog("","",data_source,"", DateUtils.formatDate(new Date(), DateUtil.yyyy_MM_dd_HH_mm_ss),"1","3","com.yihu.iot.datainput.service.DataInputService.bindUser","",1);
    }
    /**
     * 上传数据
     * @param json
     * @return
     */
    public String uploadData(String json){
        String fileName = "";
        String fileAbsPath = "";
        String rowkey = "";
        //提取json各项值
        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 measuretime = jsonObject.getString("measure_time");
        if(null == measuretime){
            measuretime = DateUtils.formatDate(new Date(), DateUtil.yyyy_MM_dd_HH_mm_ss);
        }
        //包含居民身份的数据,对设备数据进行校验绑定,此处包含的信息只有身份证号和用户名以及设备序列号,如果设备库中存在该序号的设备,则对绑定居民进行修改,改为当前居民,如果没有则跳过
        if(jsonObject.containsKey("idcard") && jsonObject.containsKey("username")){
            String idcard = jsonObject.getString("idcard");
            String username = jsonObject.getString("username");
            updateBindUser(dataSource,deviceSn,idcard,username);
        }
        try {
            rowkey = RowKeyUtils.makeRowKey(accessToken, deviceSn, extCode, DateUtil.dateTimeParse(measuretime).getTime());
        } catch (Exception e) {
            e.printStackTrace();
        }
        //将数据存入es
        jsonObject.put("_id", new SaveModel().getId());//es的id继承至jestId
        jsonObject.put("id", rowkey);//hbase的rowkey
        elastricSearchHelper.save(esIndex, esType, jsonObject.toJSONString());
        Map<String, Map<String, String>> family = new HashMap<>();
        Map<String, String> columnsA = new HashMap<>();
        Map<String, String> columnsB = new HashMap<>();
        //组装A列
        columnsA.put("access_token",accessToken);
        columnsA.put("data_source",dataSource);
        columnsA.put("sn",deviceSn);
        columnsA.put("ext_code",extCode);
        columnsA.put("device_name",jsonObject.getString("device_name"));
        columnsA.put("device_model",jsonObject.getString("device_model"));
        family.put(familyA,columnsA);
        JSONArray jsonArray = jsonObject.getJSONArray("data");
        if(null == jsonArray || jsonArray.size() == 0){
            return "json no data";
        }
        //组装B列
        for(Object obj:jsonArray){
            JSONObject data = (JSONObject)obj;
           for(String key:data.keySet()){
               columnsB.put(key,data.getString(key));
           }
           if(data.containsKey("ecg")){
               fileName = data.getString("fileName");
               fileAbsPath = data.getString("filepath");
           }
        }
        family.put(familyB,columnsB);
        try {
            hBaseHelper.add(tableName,rowkey,family);
        } 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);
        }
        //保存日志
        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);
        return "success";
    }
}

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

@ -0,0 +1,39 @@
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 org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class DataProcessLogService extends BaseJpaService<DataProcessLogDO,DataProcessLogDao> {
    @Autowired
    private DataProcessLogDao dataProcessLogDao;
    /**
     * 保存数据上传日志
     */
    public void saveDataLog(List<DataProcessLogDO> list){
        this.dataProcessLogDao.save(list);
    }
    public void saveLog(String fileName,String fileAbsPath,String dataSource,String receiveTime,String uploadTime,String processType,String status,String processInterface,String desc,int failCount){
        DataProcessLogDO dataProcessLog = new DataProcessLogDO();
        dataProcessLog.setFileName(fileName);
        dataProcessLog.setFileAbsoultePath(fileAbsPath);
        dataProcessLog.setDataSource(dataSource);
        dataProcessLog.setReceiveTime(receiveTime);
        dataProcessLog.setUploadTime(uploadTime);
        dataProcessLog.setProcessType(processType);
        dataProcessLog.setProcessStatus(status);
        dataProcessLog.setProcessInterface(processInterface);
        dataProcessLog.setProcessDes(desc);
        dataProcessLog.setFileCount(failCount);
        dataProcessLogDao.save(dataProcessLog);
    }
}

+ 110 - 0
svr/svr-iot/src/main/java/com/yihu/iot/datainput/service/DataStandardConvertService.java

@ -0,0 +1,110 @@
package com.yihu.iot.datainput.service;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.yihu.iot.datainput.enums.DataDeviceTypeEnum;
import com.yihu.iot.datainput.enums.DataOperationTypeEnum;
import com.yihu.jw.iot.data_input.DataStandardDO;
import com.yihu.jw.util.date.DateUtil;
import org.apache.http.client.utils.DateUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.*;
/**
 * 数据标准转换
 */
@Component
public class DataStandardConvertService {
    private Logger logger = LoggerFactory.getLogger(DataStandardConvertService.class);
    public static Map<String,List<Object>> dataMap = new HashMap<>();
    @Autowired
    private DataStandardService dataStandardService;
    @Autowired
    private DataProcessLogService dataProcessLogService;
    /**
     * 从数据库读取标准,并放到map,key为协议大类名称,目前只有体征数据协议
     */
    public void init(){
        List<DataStandardDO>  resultList = dataStandardService.getList();
        if(null == resultList && resultList.size() < 1){
            return;
        }
        List list = new ArrayList();
        for(DataStandardDO dataStandardDO:resultList){
            String baseName = dataStandardDO.getBaseName();
            if(dataMap.containsKey(baseName)){
                list.add(dataStandardDO);
            } else {
                List tempList = new ArrayList();
                list.add(dataStandardDO);
                tempList.addAll(list);
                list.clear();
                dataMap.put(baseName, tempList);
            }
        }
    }
    /**
     * 数据标准转换,i健康数据-->物联网数据标准
     * i健康模板数据
     * 物联网模板数据
     * @param oldJson 要转换的json
     */
    public String iconvert(String oldJson){
        JSONObject jsonObject = JSONObject.parseObject(oldJson);
        //如果没有授权或者数据来源,则表示数据异常
        if(!jsonObject.containsKey("access_token") || !jsonObject.containsKey("data_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();
    }
}

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

@ -0,0 +1,23 @@
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 org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
@Service
public class DataStandardService extends BaseJpaService<DataStandardDO,DataStandardDao> {
    @Autowired
    private DataStandardDao dataStandardDao;
    List<DataStandardDO> getList(){
        List<DataStandardDO> list = new ArrayList<>();
        list = dataStandardDao.getList();
        return list;
    }
}

+ 17 - 0
svr/svr-iot/src/main/java/com/yihu/iot/datainput/util/RowKeyUtils.java

@ -0,0 +1,17 @@
package com.yihu.iot.datainput.util;
import org.springframework.util.DigestUtils;
import java.io.UnsupportedEncodingException;
import java.security.NoSuchAlgorithmException;
public class RowKeyUtils {
    public static String makeRowKey(String accessToken,String deviceSn,String extCode,long measureTime) throws NoSuchAlgorithmException, UnsupportedEncodingException {
        StringBuilder sb = new StringBuilder();
        sb.append(accessToken+"_");
        sb.append(deviceSn+"_");
        sb.append(extCode+"_");
        sb.append(measureTime);
        return DigestUtils.md5DigestAsHex(sb.toString().getBytes("utf-8"));
    }
}

+ 30 - 0
svr/svr-iot/src/main/java/com/yihu/iot/service/device/IotDeviceService.java

@ -5,6 +5,9 @@ import com.yihu.iot.dao.device.IotDeviceDao;
import com.yihu.jw.iot.device.IotDeviceDO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
/**
 * @author yeshijie on 2017/12/8.
@ -29,4 +32,31 @@ public class IotDeviceService extends BaseJpaService<IotDeviceDO,IotDeviceDao> {
    public IotDeviceDO findById(String id) {
        return iotDeviceDao.findById(id);
    }
    /**
     * 设备注册及绑定
     * @param iotDeviceDO
     */
    @Transactional
    public void bindUser(List<IotDeviceDO> iotDeviceDO){
        this.batchInsert(iotDeviceDO);
    }
    /**
     * 根据设备序列号判断设备是否存在
     * @param deviceSn
     * @return
     */
    public int countByDeviceSn(String deviceSn) {
        return iotDeviceDao.countByDeviceSn(deviceSn);
    }
    /**
     * 根据设备序列号查找设备
     * @param deviceSn
     * @return
     */
    public IotDeviceDO findByDeviceSn(String deviceSn) {
        return iotDeviceDao.findByDeviceSn(deviceSn);
    }
}

+ 41 - 1
svr/svr-iot/src/main/resources/application.yml

@ -4,7 +4,7 @@ server:
spring:
  application:
    name:  svr-iot  ##注册到发现服务的id 如果id一样 eurika会自动做负载
    name:  svr-iot  #注册到发现服务的id 如果id一样 eurika会自动做负载
  datasource:
    driver-class-name: com.mysql.jdbc.Driver
@ -24,6 +24,24 @@ spring:
    min-evictable-idle-time-millis: 3600000 #连接池中连接,在时间段内一直空闲,被逐出连接池的时间(1000*60*60),以毫秒为单位
    time-between-eviction-runs-millis: 300000 #在空闲连接回收器线程运行期间休眠的时间值,以毫秒为单位,一般比minEvictableIdleTimeMillis小
  data:
    elasticsearch: #ElasticsearchProperties
      cluster-name: jkzl #默认即为elasticsearch  集群名
      cluster-nodes: 172.17.110.217:9300,172.17.110.128:9300 #配置es节点信息,逗号分隔,如果没有指定,则启动ClientNode
      local: false #是否本地连接
#      properties: # Additional properties used to configure the client.
  # JEST (Elasticsearch HTTP client) (JestProperties)
  elasticsearch:
    jest:
      uris: http://localhost:9200
      connection-timeout: 60000 # Connection timeout in milliseconds.
      multi-threaded: true # Enable connection requests from multiple execution threads.
#      username: # Login user.
#      password: # Login password.
#      proxy.port:  # Proxy port the HTTP client should use.
#      proxy.host:  # Proxy host the HTTP client should use.
#hibernate 配置
hibernate:
  dialect: org.hibernate.dialect.MySQL5Dialect
@ -45,6 +63,27 @@ fast-dfs:
    max-size: 20
    wait-time: 500
#es配置
es:
  host:  127.0.0.1
  port: 9200 #默认是9200
  tPort: 9300 #http端口 默认是9300
  clusterName: jkzl
hadoop:
  hbase-properties:
    hbase.zookeeper.property.clientPort: 2181
    zookeeper.znode.parent: /hbase-unsecure
    hbase.zookeeper.quorum:  node1.hde.h3c.com,node2.hde.h3c.com,node3.hde.h3c.com
  user:
    name: root
---
spring:
  profiles: jwdev
@ -55,6 +94,7 @@ spring:
    password: 123456
fastDFS:
  fastdfs_file_url: http://172.19.103.54:80/
---
spring:
  profiles: jwtest

+ 4 - 4
svr/svr-iot/src/main/resources/bootstrap.yml

@ -3,12 +3,12 @@ spring:
  #从发现服务里面取配置服务的信息
  cloud:
    config:
      failFast: true ##启动快速失败 即链接不到配置服务就启动失败
      failFast: true #启动快速失败 即链接不到配置服务就启动失败
      username: jw
      password: jkzl
      discovery:
        enabled: true ##使用发现服务
        service-id: svr-configurations ##配置服务的名字
        enabled: true #使用发现服务
        service-id: svr-configurations #配置服务的名字
---
@ -20,7 +20,7 @@ eureka:
  client:
    serviceUrl:
      #http://账号:密码@127.0.0.1:8761/eureka/
      defaultZone: http://jw:jkzl@127.0.0.1:8761/eureka/
      defaultZone: http://jw:jkzl@172.19.103.33:8761/eureka/
---
spring:

+ 16 - 21
web-gateway/pom.xml

@ -32,10 +32,10 @@
            <artifactId>common-swagger</artifactId>
        </dependency>
        <dependency>
            <groupId>com.yihu.base</groupId>
            <artifactId>common-security</artifactId>
        </dependency>
        <!--<dependency>-->
            <!--<groupId>com.yihu.base</groupId>-->
            <!--<artifactId>common-security</artifactId>-->
        <!--</dependency>-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
@ -56,24 +56,24 @@
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>
        <dependency>
      <!--  <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
        <dependency>
        </dependency>-->
        <!--<dependency>-->
            <!--<groupId>org.springframework.boot</groupId>-->
            <!--<artifactId>spring-boot-starter-security</artifactId>-->
        <!--</dependency>-->
     <!--   <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
        </dependency>-->
        <dependency>
      <!--  <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-oauth2</artifactId>
        </dependency>
        </dependency>-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
@ -121,11 +121,11 @@
            <groupId>org.json</groupId>
            <artifactId>json</artifactId>
        </dependency>
        <dependency>
    <!--    <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-core</artifactId>
            <version>RELEASE</version>
        </dependency>
        </dependency>-->
        <dependency>
            <groupId>commons-collections</groupId>
            <artifactId>commons-collections</artifactId>
@ -134,11 +134,6 @@
            <groupId>commons-codec</groupId>
            <artifactId>commons-codec</artifactId>
        </dependency>
        <dependency>
            <groupId>com.yihu.base</groupId>
            <artifactId>common-security</artifactId>
            <version>1.0.0</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>

+ 1 - 1
web-gateway/src/main/java/com/yihu/jw/aspect/LogAspect.java

@ -38,7 +38,7 @@ public class LogAspect {
            tracer.getCurrentSpan().tag(GatewayContanrts.ZipkinElasticKey.gateway_input_params,new JSONObject(request.getParameterMap()).toString());
            o = point.proceed();
            //访问后日志
            tracer.getCurrentSpan().tag(GatewayContanrts.ZipkinElasticKey.gateway_out_params,new JSONObject(o.toString()).toString());
            tracer.getCurrentSpan().tag(GatewayContanrts.ZipkinElasticKey.gateway_out_params,new JSONObject(o).toString());
        } catch (Exception ex) {
            ex.printStackTrace();
        }

+ 21 - 18
web-gateway/src/main/java/com/yihu/jw/commnon/base/user/BaseUserContants.java

@ -6,14 +6,16 @@ public class BaseUserContants {
    public static final String api_common = "/bases";
    public static final String api_baseRole = api_common+"/baseRole";
    public static final String api_employ = api_common+"/employee";
    public static final String api_baseMenu= api_common+"/employee";
    public static final String api_baseMenu= api_common+"/baseMenu";
    public static final String api_baseRoleMenu= api_common+"/baseRoleMenu";
    public static final String api_employRole= api_common+"/employeeRole";
    //角色常量
    public static class BaseRole{
        public static final String api_create="/";
        public static final String api_update="/";
        public static final String api_delete="/{id}";
        public static final String api_getById="/{id}";
        public static final String api_update="/update";
        public static final String api_delete="/delete/{id}";
        public static final String api_getById="/getById/{id}";
        public static final String api_getListNoPage="/listNoPage";
        public static final String api_getList="/list";
    }
@ -21,37 +23,38 @@ public class BaseUserContants {
    //角色菜单常量
    public static class BaseRoleMenu{
        public static final String api_create="/";
        public static final String api_update="/";
        public static final String api_delete="/{id}";
        public static final String api_getListNoPage="/listNoPage";
        public static final String api_create=api_baseRoleMenu ;
        public static final String api_update=api_baseRoleMenu + "/update";
        public static final String api_delete=api_baseRoleMenu + "/delete/{id}";
        public static final String api_getListNoPage=api_baseRoleMenu + "/listNoPage";
    }
    //用户常量
    public static class Employee{
        public static final String api_create="/";
        public static final String api_update="/";
        public static final String api_delete="/{id}";
        public static final String api_getById="/{id}";
        public static final String api_update="/update";
        public static final String api_delete="/delete/{id}";
        public static final String api_getById="/getById/{id}";
        public static final String api_getListNoPage="/listNoPage";
        public static final String api_getList="/list";
    }
    //用户角色常量
    public static class EmployeeRole{
        public static final String api_create="/";
        public static final String api_update="/";
        public static final String api_delete="/{id}";
        public static final String api_getListNoPage="/listNoPage";
        public static final String api_create= api_employRole;
        public static final String api_update= api_employRole + "/update";
        public static final String api_delete= api_employRole +"/delete/{id}";
        public static final String api_getListNoPage= api_employRole +"/listNoPage";
    }
    //菜单常量
    public static class BaseMenu{
        public static final String api_create="/";
        public static final String api_update="/";
        public static final String api_delete="/{id}";
        public static final String api_getById="/{id}";
        public static final String api_update="/update";
        public static final String api_delete="/delete/{id}";
        public static final String api_getById="/getById/{id}";
        public static final String api_children="/{saasId}/{parentId}";
        public static final String api_getListNoPage="/listNoPage";
        public static final String api_getList="/list";
    }

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

@ -0,0 +1,18 @@
package com.yihu.jw.commnon.iot;
public class DataConstants {
    public static final String api_iot_common = "/svr-iot";
    //数据标准转换
    public static class DataConvert{
        public static final String api_common = api_iot_common + "/dataConvert";
        public static final String api_convert = "/convert";
    }
    //数据上传常量
    public static class DataInput {
        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";
    }
}

+ 40 - 40
web-gateway/src/main/java/com/yihu/jw/config/security/ClientService.java

@ -1,40 +1,40 @@
package com.yihu.jw.config.security;
import com.yihu.base.security.rbas.ClientServiceProvider;
import org.springframework.context.annotation.Primary;
import org.springframework.security.oauth2.provider.ClientDetails;
import org.springframework.security.oauth2.provider.ClientRegistrationException;
import org.springframework.security.oauth2.provider.client.BaseClientDetails;
import org.springframework.stereotype.Component;
import java.util.HashSet;
import java.util.Set;
/**
 * Created by chenweida on 2017/12/1.
 */
@Component("baseClientDetailsService")
@Primary
public class ClientService implements ClientServiceProvider {
    @Override
    public ClientDetails loadClientByClientId(String clientId) throws ClientRegistrationException {
//        SaasDO saasDO = saasDao.findByAppId(clientId);
//        if (saasDO == null) {
//            throw new ClientRegistrationException("用户没有注册");
//        }
        BaseClientDetails baseClientDetails = new BaseClientDetails();
        baseClientDetails.setClientId("cwd");
        baseClientDetails.setClientSecret("cwd");
        Set<String> strings = new HashSet<>();
        strings.add("password");
        strings.add("custom_password");
        strings.add("authorization_code");
        strings.add("refresh_token");
        baseClientDetails.setAuthorizedGrantTypes(strings);
        return baseClientDetails;
    }
}
//package com.yihu.jw.config.security;
//
//import com.yihu.base.security.rbas.ClientServiceProvider;
//import org.springframework.context.annotation.Primary;
//import org.springframework.security.oauth2.provider.ClientDetails;
//import org.springframework.security.oauth2.provider.ClientRegistrationException;
//import org.springframework.security.oauth2.provider.client.BaseClientDetails;
//import org.springframework.stereotype.Component;
//
//import java.util.HashSet;
//import java.util.Set;
//
///**
// * Created by chenweida on 2017/12/1.
// */
//@Component("baseClientDetailsService")
//@Primary
//public class ClientService implements ClientServiceProvider {
//
//    @Override
//    public ClientDetails loadClientByClientId(String clientId) throws ClientRegistrationException {
////        SaasDO saasDO = saasDao.findByAppId(clientId);
////        if (saasDO == null) {
////            throw new ClientRegistrationException("用户没有注册");
////        }
//        BaseClientDetails baseClientDetails = new BaseClientDetails();
//        baseClientDetails.setClientId("cwd");
//        baseClientDetails.setClientSecret("cwd");
//
//        Set<String> strings = new HashSet<>();
//        strings.add("password");
//        strings.add("custom_password");
//        strings.add("authorization_code");
//        strings.add("refresh_token");
//        baseClientDetails.setAuthorizedGrantTypes(strings);
//        return baseClientDetails;
//    }
//
//
//}

+ 48 - 48
web-gateway/src/main/java/com/yihu/jw/config/security/RbasService.java

@ -1,48 +1,48 @@
package com.yihu.jw.config.security;
import com.yihu.base.security.rbas.IRbasService;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.stereotype.Service;
import org.springframework.util.AntPathMatcher;
import javax.servlet.http.HttpServletRequest;
import java.util.HashSet;
import java.util.Set;
/**
 * Created by chenweida on 2017/12/5.
 * 判断用户是否有权限访问该路径
 */
@Service("rbasService")
public class RbasService implements IRbasService {
    private AntPathMatcher antPathMatcher = new AntPathMatcher();
    @Override
    public Boolean hasPerssion(HttpServletRequest request, Authentication authentication) {
        Object principal = authentication.getPrincipal();
        boolean hasPerssion = false;
        if (principal instanceof UserDetails) {
            //获取用户名字
            String username = ((UserDetails) principal).getUsername();
            //获取用户全部权限
            Set<String> uris = new HashSet<>();
            for (String uri : uris) {
                if (antPathMatcher.match(uri, request.getRequestURI())) {
                    hasPerssion = true;
                    break;
                }
            }
        }
        return true;
        //  return hasPerssion;
    }
    public Boolean hello() {
        return true;
    }
}
//package com.yihu.jw.config.security;
//
//import com.yihu.base.security.rbas.IRbasService;
//import org.springframework.security.core.Authentication;
//import org.springframework.security.core.userdetails.UserDetails;
//import org.springframework.stereotype.Service;
//import org.springframework.util.AntPathMatcher;
//
//import javax.servlet.http.HttpServletRequest;
//import java.util.HashSet;
//import java.util.Set;
//
///**
// * Created by chenweida on 2017/12/5.
// * 判断用户是否有权限访问该路径
// */
//@Service("rbasService")
//public class RbasService implements IRbasService {
//
//    private AntPathMatcher antPathMatcher = new AntPathMatcher();
//
//
//    @Override
//    public Boolean hasPerssion(HttpServletRequest request, Authentication authentication) {
//        Object principal = authentication.getPrincipal();
//        boolean hasPerssion = false;
//        if (principal instanceof UserDetails) {
//            //获取用户名字
//            String username = ((UserDetails) principal).getUsername();
//
//
//            //获取用户全部权限
//            Set<String> uris = new HashSet<>();
//            for (String uri : uris) {
//                if (antPathMatcher.match(uri, request.getRequestURI())) {
//                    hasPerssion = true;
//                    break;
//                }
//            }
//        }
//        return true;
//        //  return hasPerssion;
//    }
//
//    public Boolean hello() {
//        return true;
//    }
//}

+ 61 - 61
web-gateway/src/main/java/com/yihu/jw/config/security/UserService.java

@ -1,61 +1,61 @@
package com.yihu.jw.config.security;
import com.yihu.jw.feign.base.user.EmployFeign;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.authority.AuthorityUtils;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.core.userdetails.UsernameNotFoundException;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
/**
 * Created by chenweida on 2017/11/29.
 * 处理用户校验
 */
@Component
public class UserService implements UserDetailsService {
    @Autowired
    private PasswordEncoder passwordEncoder;
    @Autowired
    private EmployFeign employFeign;
    /**
     * 我们只需要把用户返回给spring-security 密码框架自己帮我们校验
     *
     * @param userName
     * @return
     * @throws UsernameNotFoundException
     */
    @Override
    public UserDetails loadUserByUsername(String userName) throws UsernameNotFoundException {
        if ("admin".equals(userName)) {
            System.out.printf("password:" + passwordEncoder.encode("123456"));
            return new User("admin",
                    passwordEncoder.encode("123456"),
                    true,
                    true,
                    true,
                    true
                    , AuthorityUtils.commaSeparatedStringToAuthorityList("admin,ROLE_USER") //权限
            );
        } else if ((!StringUtils.isEmpty(userName))&&userName.length() == 11) {
            System.out.printf("password:" + passwordEncoder.encode("123456"));
            return new User("admin",
                    passwordEncoder.encode("123456"),
                    true,
                    true,
                    true,
                    true
                    , AuthorityUtils.commaSeparatedStringToAuthorityList("admin,ROLE_USER") //权限
            );
        } else {
            throw new UsernameNotFoundException("用户不存在");
        }
    }
}
//package com.yihu.jw.config.security;
//
//
//import com.yihu.jw.feign.base.user.EmployFeign;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.security.core.authority.AuthorityUtils;
//import org.springframework.security.core.userdetails.User;
//import org.springframework.security.core.userdetails.UserDetails;
//import org.springframework.security.core.userdetails.UserDetailsService;
//import org.springframework.security.core.userdetails.UsernameNotFoundException;
//import org.springframework.security.crypto.password.PasswordEncoder;
//import org.springframework.stereotype.Component;
//import org.springframework.util.StringUtils;
//
///**
// * Created by chenweida on 2017/11/29.
// * 处理用户校验
// */
//@Component
//public class UserService implements UserDetailsService {
//
//    @Autowired
//    private PasswordEncoder passwordEncoder;
//    @Autowired
//    private EmployFeign employFeign;
//
//    /**
//     * 我们只需要把用户返回给spring-security 密码框架自己帮我们校验
//     *
//     * @param userName
//     * @return
//     * @throws UsernameNotFoundException
//     */
//    @Override
//    public UserDetails loadUserByUsername(String userName) throws UsernameNotFoundException {
//        if ("admin".equals(userName)) {
//            System.out.printf("password:" + passwordEncoder.encode("123456"));
//            return new User("admin",
//                    passwordEncoder.encode("123456"),
//                    true,
//                    true,
//                    true,
//                    true
//                    , AuthorityUtils.commaSeparatedStringToAuthorityList("admin,ROLE_USER") //权限
//            );
//        } else if ((!StringUtils.isEmpty(userName))&&userName.length() == 11) {
//            System.out.printf("password:" + passwordEncoder.encode("123456"));
//            return new User("admin",
//                    passwordEncoder.encode("123456"),
//                    true,
//                    true,
//                    true,
//                    true
//                    , AuthorityUtils.commaSeparatedStringToAuthorityList("admin,ROLE_USER") //权限
//            );
//        } else {
//            throw new UsernameNotFoundException("用户不存在");
//        }
//    }
//
//}

+ 4 - 4
web-gateway/src/main/java/com/yihu/jw/controller/base/user/BaseMenuController.java

@ -84,8 +84,8 @@ public class BaseMenuController extends EnvelopRestController {
    @HystrixCommand(commandProperties = {
            @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "-1"),//超时时间
            @HystrixProperty(name = "execution.timeout.enabled", value = "false") })
    @GetMapping(value = BaseUserContants.BaseMenu.api_getById)
    @ApiOperation(value = "根据Id查找", notes = "根据uuid查找")
    @GetMapping(value = BaseUserContants.BaseMenu.api_children)
    @ApiOperation(value = "获取子菜单", notes = "根据父菜单id查找")
    public Envelop getChildren(@ApiParam(name = "saasId", value = "saasId") @RequestParam(value = "saasId", required = true) String saasId,
                               @ApiParam(name = "parentId", value = "parentId") @RequestParam(value = "parentId", required = true) String parentId) throws JiWeiException {
        return fegin.getChildren(saasId,parentId);
@ -96,7 +96,7 @@ public class BaseMenuController extends EnvelopRestController {
            @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "-1"),//超时时间
            @HystrixProperty(name = "execution.timeout.enabled", value = "false") })
    @RequestMapping(value = BaseUserContants.BaseMenu.api_getList, method = RequestMethod.GET)
    @ApiOperation(value = "获取功能列表(分页)")
    @ApiOperation(value = "获取菜单列表(分页)")
    public Envelop getBaseMenus(
            @ApiParam(name = "fields", value = "返回的字段,为空返回全部字段", defaultValue = "id,name,saasId,createUser,remark")
            @RequestParam(value = "fields", required = false) String fields,
@ -125,7 +125,7 @@ public class BaseMenuController extends EnvelopRestController {
            @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "-1"),//超时时间
            @HystrixProperty(name = "execution.timeout.enabled", value = "false") })
    @GetMapping(value = BaseUserContants.BaseMenu.api_getListNoPage)
    @ApiOperation(value = "获取功能列表,不分页")
    @ApiOperation(value = "获取菜单列表,不分页")
    public Envelop getListNoPage(
            @ApiParam(name = "fields", value = "返回的字段,为空返回全部字段", defaultValue = "id,name,saasId,createUser,remark")
            @RequestParam(value = "fields", required = false) String fields,

+ 2 - 2
web-gateway/src/main/java/com/yihu/jw/controller/base/user/BaseRoleController.java

@ -148,7 +148,7 @@ public class BaseRoleController extends EnvelopRestController {
    @HystrixCommand(commandProperties = {
            @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "-1"),//超时时间
            @HystrixProperty(name = "execution.timeout.enabled", value = "false") })
    @PutMapping(value = BaseUserContants.BaseRoleMenu.api_create, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
    @PutMapping(value = BaseUserContants.BaseRoleMenu.api_update, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
    @ApiOperation(value = "修改角色菜单", notes = "修改角色菜单")
    public Envelop updateRoleMenu(
            @ApiParam(name = "json_data", value = "", defaultValue = "")
@ -160,7 +160,7 @@ public class BaseRoleController extends EnvelopRestController {
    @HystrixCommand(commandProperties = {
            @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "-1"),//超时时间
            @HystrixProperty(name = "execution.timeout.enabled", value = "false") })
    @DeleteMapping(value = BaseUserContants.BaseRoleMenu.api_create, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
    @DeleteMapping(value = BaseUserContants.BaseRoleMenu.api_delete, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
    @ApiOperation(value = "删除角色菜单", notes = "删除角色菜单")
    public Envelop deleteRoleMenus(
            @ApiParam(name = "json_data", value = "", defaultValue = "")

+ 2 - 2
web-gateway/src/main/java/com/yihu/jw/controller/base/version/UserVersionController.java

@ -15,7 +15,7 @@ import org.springframework.web.bind.annotation.RestController;
@RequestMapping(BaseContants.api_common)
@Api(description = "灰度发布相关")
public class UserVersionController {
    @Autowired
    private UserVersionFeign userVersionFeign;
//    @Autowired
//    private UserVersionFeign userVersionFeign;
}

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

@ -0,0 +1,47 @@
package com.yihu.jw.controller.iot.data_input;
import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import com.netflix.hystrix.contrib.javanica.annotation.HystrixProperty;
import com.yihu.jw.commnon.iot.DataConstants;
import com.yihu.jw.feign.iot.data_input.DataInputFeign;
import com.yihu.jw.restmodel.common.Envelop;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping(DataConstants.DataInput.api_common)
@Api(value = "数据上传入库", description = "数据上传入库")
public class DataInputController {
    @Autowired
    private DataInputFeign dataInputFeign;
    @PostMapping(value = DataConstants.DataInput.api_bind_user, 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 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 = "数据上传")
    @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) {
        return dataInputFeign.uploadData(jsonData);
    }
}

+ 36 - 0
web-gateway/src/main/java/com/yihu/jw/controller/iot/data_input/DataStandardConvertController.java

@ -0,0 +1,36 @@
package com.yihu.jw.controller.iot.data_input;
import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import com.netflix.hystrix.contrib.javanica.annotation.HystrixProperty;
import com.yihu.jw.commnon.iot.DataConstants;
import com.yihu.jw.feign.iot.data_input.DataStandardConvertFeign;
import com.yihu.jw.restmodel.common.Envelop;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping(DataConstants.DataConvert.api_common)
@Api(value = "数据标准转换", description = "数据标准转换")
public class DataStandardConvertController {
    @Autowired
    private DataStandardConvertFeign dataStandardConvertFeign;
    @PostMapping(value = DataConstants.DataConvert.api_convert, 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 convert(
            @ApiParam(name = "json_data", value = "", defaultValue = "")
            @RequestBody String jsonData) {
        return dataStandardConvertFeign.convert(jsonData);
    }
}

+ 32 - 32
web-gateway/src/main/java/com/yihu/jw/controller/login/LoginController.java

@ -1,33 +1,33 @@
package com.yihu.jw.controller.login;
import com.yihu.jw.config.security.UserService;
import io.swagger.annotations.Api;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.sleuth.Tracer;
import org.springframework.web.bind.annotation.*;
/**
 * Created by chenweida on 2017/6/16.
 */
@RestController
@Api(value = "登陆相关操作", description = "登陆相关操作")
public class LoginController {
    @Autowired
    private Tracer tracer;
    @Autowired
    private UserService userService;
//    @GetMapping(value = "/employLogin", consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
//    @ApiOperation(value = "患者登陆", notes = "患者登陆")
//    public Envelop employLogin(
//            @ApiParam(name = "account", value = "账号", defaultValue = "")
//            @RequestParam(name = "account", required = true) String account,
//            @ApiParam(name = "password", value = "密码", defaultValue = "")
//            @RequestParam(name = "password", required = true) String password,
//            @ApiParam(name = "type", value = "登陆方式(默认1):1账号密码 2账号验证码", defaultValue = "")
//            @RequestParam(name = "type", required = false, defaultValue = "1") Integer type) throws Exception {
//package com.yihu.jw.controller.login;
//
//        return null;
//    }
}
//import com.yihu.jw.config.security.UserService;
//import io.swagger.annotations.Api;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.cloud.sleuth.Tracer;
//import org.springframework.web.bind.annotation.*;
//
///**
// * Created by chenweida on 2017/6/16.
// */
//@RestController
//@Api(value = "登陆相关操作", description = "登陆相关操作")
//public class LoginController {
//    @Autowired
//    private Tracer tracer;
//    @Autowired
//    private UserService userService;
//
//
////    @GetMapping(value = "/employLogin", consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
////    @ApiOperation(value = "患者登陆", notes = "患者登陆")
////    public Envelop employLogin(
////            @ApiParam(name = "account", value = "账号", defaultValue = "")
////            @RequestParam(name = "account", required = true) String account,
////            @ApiParam(name = "password", value = "密码", defaultValue = "")
////            @RequestParam(name = "password", required = true) String password,
////            @ApiParam(name = "type", value = "登陆方式(默认1):1账号密码 2账号验证码", defaultValue = "")
////            @RequestParam(name = "type", required = false, defaultValue = "1") Integer type) throws Exception {
////
////        return null;
////    }
//}

+ 1 - 1
web-gateway/src/main/java/com/yihu/jw/feign/base/user/BaseMenuFeign.java

@ -25,7 +25,7 @@ public interface BaseMenuFeign {
    Envelop update(@RequestBody String jsonData) throws JiWeiException;
    @RequestMapping(value =  BaseUserRequestMapping.BaseMenu.api_delete,method = RequestMethod.DELETE)
    Envelop delete(@PathVariable String id) throws JiWeiException;
    Envelop delete(@PathVariable(value = "id") String id) throws JiWeiException;
    @GetMapping(value = BaseUserRequestMapping.BaseMenu.api_getOne)
    Envelop findById(@PathVariable(value = "id", required = true) String id) throws JiWeiException;

+ 1 - 1
web-gateway/src/main/java/com/yihu/jw/feign/base/user/BaseRoleFeign.java

@ -25,7 +25,7 @@ public interface BaseRoleFeign {
    Envelop update(@RequestBody String jsonData) throws JiWeiException;
    @RequestMapping(value =  BaseUserRequestMapping.BaseRole.api_delete,method = RequestMethod.DELETE)
    Envelop delete(@PathVariable String id) throws JiWeiException;
    Envelop delete(@PathVariable(value = "id") String id) throws JiWeiException;
    @GetMapping(value = BaseUserRequestMapping.BaseRole.api_getById)
    Envelop findById(@PathVariable(value = "id", required = true) String id) throws JiWeiException;

+ 1 - 1
web-gateway/src/main/java/com/yihu/jw/feign/base/user/EmployFeign.java

@ -27,7 +27,7 @@ public interface EmployFeign {
    Envelop update(@RequestBody String jsonData) throws JiWeiException;
    @RequestMapping(value =  BaseUserRequestMapping.BaseEmploy.api_delete,method = RequestMethod.DELETE)
    Envelop delete(@PathVariable String id) throws JiWeiException;
    Envelop delete(@PathVariable (value = "id") String id) throws JiWeiException;
    @GetMapping(value = BaseUserRequestMapping.BaseEmploy.api_getById)
    Envelop findById(@PathVariable(value = "id", required = true) String id) throws JiWeiException;

+ 2 - 1
web-gateway/src/main/java/com/yihu/jw/feign/base/version/UserVersionFeign.java

@ -1,6 +1,7 @@
package com.yihu.jw.feign.base.version;
import com.yihu.jw.feign.fallbackfactory.base.base.SaasFeignFallbackFactory;
import com.yihu.jw.feign.fallbackfactory.base.version.UserVersionFeignFallbackFactory;
import com.yihu.jw.restmodel.CommonContants;
import com.yihu.jw.rm.base.BaseRequestMapping;
import org.springframework.cloud.netflix.feign.FeignClient;
@ -11,7 +12,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
 */
@FeignClient(
        name = CommonContants.svr_base // name值是eurika的实例名字
        ,fallbackFactory  = SaasFeignFallbackFactory.class
        ,fallbackFactory  = UserVersionFeignFallbackFactory.class
)
@RequestMapping(value = BaseRequestMapping.api_base_common)
public interface UserVersionFeign {

+ 2 - 0
web-gateway/src/main/java/com/yihu/jw/feign/fallbackfactory/base/user/BaseMenuFeignFallbackFactory.java

@ -7,12 +7,14 @@ import com.yihu.jw.restmodel.common.Envelop;
import feign.hystrix.FallbackFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.sleuth.Tracer;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
/**
 * Created by LiTaohong on 2017/11/28.
 */
@Component
public class BaseMenuFeignFallbackFactory implements FallbackFactory<BaseMenuFeign> {
    @Autowired

+ 2 - 0
web-gateway/src/main/java/com/yihu/jw/feign/fallbackfactory/base/user/BaseRoleFeignFallbackFactory.java

@ -6,12 +6,14 @@ import com.yihu.jw.restmodel.common.Envelop;
import feign.hystrix.FallbackFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.sleuth.Tracer;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
/**
 * Created by LiTaohong on 2017/11/28.
 */
@Component
public class BaseRoleFeignFallbackFactory implements FallbackFactory<BaseRoleFeign> {
    @Autowired

+ 2 - 0
web-gateway/src/main/java/com/yihu/jw/feign/fallbackfactory/base/user/EmployeeFeignFallbackFactory.java

@ -6,12 +6,14 @@ import com.yihu.jw.restmodel.common.Envelop;
import feign.hystrix.FallbackFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.sleuth.Tracer;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
/**
 * Created by chenweida on 2017/11/29.
 */
@Component
public class EmployeeFeignFallbackFactory  implements FallbackFactory<EmployFeign> {
    @Autowired
    private Tracer tracer;

+ 2 - 0
web-gateway/src/main/java/com/yihu/jw/feign/fallbackfactory/base/version/UserVersionFeignFallbackFactory.java

@ -2,10 +2,12 @@ package com.yihu.jw.feign.fallbackfactory.base.version;
import com.yihu.jw.feign.base.version.UserVersionFeign;
import feign.hystrix.FallbackFactory;
import org.springframework.stereotype.Component;
/**
 * Created by chenweida on 2017/11/13.
 */
@Component
public class UserVersionFeignFallbackFactory implements FallbackFactory<UserVersionFeign> {
    @Override
    public UserVersionFeign create(Throwable cause) {

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

@ -0,0 +1,35 @@
package com.yihu.jw.feign.fallbackfactory.iot.data_input;
import com.yihu.jw.feign.iot.data_input.DataInputFeign;
import com.yihu.jw.restmodel.common.Envelop;
import feign.hystrix.FallbackFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.sleuth.Tracer;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.RequestBody;
@Component
public class DataInputFeignFallbackFactory implements FallbackFactory<DataInputFeign> {
    @Autowired
    private Tracer tracer;
    @Override
    public DataInputFeign create(Throwable e) {
        return new DataInputFeign() {
            @Override
            public Envelop bindUser(@RequestBody String jsonData) {
                tracer.getCurrentSpan().logEvent("设备注册绑定失败:原因:" + e.getMessage());
                tracer.getCurrentSpan().logEvent("jsonData:" + jsonData);
                return null;
            }
            @Override
            public Envelop uploadData(@RequestBody String jsonData) {
                tracer.getCurrentSpan().logEvent("数据上传失败:原因:" + e.getMessage());
                tracer.getCurrentSpan().logEvent("jsonData:" + jsonData);
                return null;
            }
        };
    }
}

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

@ -0,0 +1,32 @@
package com.yihu.jw.feign.fallbackfactory.iot.data_input;
import com.yihu.jw.exception.business.JiWeiException;
import com.yihu.jw.feign.iot.data_input.DataInputFeign;
import com.yihu.jw.feign.iot.data_input.DataStandardConvertFeign;
import com.yihu.jw.feign.iot.supplier.IotDeviceSupplierFeign;
import com.yihu.jw.restmodel.common.Envelop;
import feign.hystrix.FallbackFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.sleuth.Tracer;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
@Component
public class DataStandardConvertFeignFallbackFactory implements FallbackFactory<DataStandardConvertFeign> {
    @Autowired
    private Tracer tracer;
    @Override
    public DataStandardConvertFeign create(Throwable throwable) {
        return new DataStandardConvertFeign() {
            @Override
            public Envelop convert(String jsonData) {
                tracer.getCurrentSpan().logEvent("标准转换失败:原因:" + throwable.getMessage());
                tracer.getCurrentSpan().logEvent("jsonData:" + jsonData);
                return null;
            }
        };
    }
}

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

@ -0,0 +1,28 @@
package com.yihu.jw.feign.iot.data_input;
import com.yihu.jw.feign.fallbackfactory.iot.data_input.DataInputFeignFallbackFactory;
import com.yihu.jw.feign.fallbackfactory.iot.supplier.IotDeviceSupplierFeignFallbackFactory;
import com.yihu.jw.restmodel.CommonContants;
import com.yihu.jw.restmodel.common.Envelop;
import com.yihu.jw.rm.iot.DataRequestMapping;
import com.yihu.jw.rm.iot.IotRequestMapping;
import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
@FeignClient(
        name = CommonContants.svr_iot // name值是eurika的实例名字
        ,fallbackFactory  = DataInputFeignFallbackFactory.class
)
@RequestMapping(DataRequestMapping.api_iot_common)
public interface DataInputFeign {
    @PostMapping(value = DataRequestMapping.DataInput.api_user_bind, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
    Envelop bindUser(@RequestBody String jsonData);
    @PostMapping(value = DataRequestMapping.DataInput.api_data_input, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
    Envelop uploadData(@RequestBody String jsonData);
}

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

@ -0,0 +1,23 @@
package com.yihu.jw.feign.iot.data_input;
import com.yihu.jw.feign.fallbackfactory.iot.data_input.DataInputFeignFallbackFactory;
import com.yihu.jw.feign.fallbackfactory.iot.data_input.DataStandardConvertFeignFallbackFactory;
import com.yihu.jw.restmodel.CommonContants;
import com.yihu.jw.restmodel.common.Envelop;
import com.yihu.jw.rm.iot.DataRequestMapping;
import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
@FeignClient(
        name = CommonContants.svr_iot // name值是eurika的实例名字
        ,fallbackFactory  = DataStandardConvertFeignFallbackFactory.class
)
@RequestMapping(DataRequestMapping.api_iot_common)
public interface DataStandardConvertFeign {
    @PostMapping(value = DataRequestMapping.DataStandardConvert.api_convert, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
    Envelop convert(@RequestBody String jsonData);
}

+ 18 - 1
web-gateway/src/main/resources/application.yml

@ -1,7 +1,7 @@
##如果有配置服务的话,远程服务器和本地服务器配置不一致的情况下,优先远程的为主
spring:
  application:
    name:  web-gateway-lith  #注册到发现服务的id 如果id一样 eurika会自动做负载
    name:  web-gateway  #注册到发现服务的id 如果id一样 eurika会自动做负载
  http:
    multipart:
      enabled: true
@ -19,6 +19,23 @@ management:
  security:
    enabled: false  #关闭 refresh的权限认证
hystrix:
  threadpool:
    default:
      coreSize: 500  #并发执行的最大线程数,默认10
  command:
    paas-file:
      execution:
        isolation:
          thread:
            timeoutInMilliseconds: 3600000
    default:
      execution:
        isolation:
          thread:
            timeoutInMilliseconds: 8000  #命令执行超时时间,默认1000ms
#zuul 默认会代理所有的微服务  路径 /{appliction.name}/**