Bladeren bron

修改远程传输

523096025 3 jaren geleden
bovenliggende
commit
737e8c311d
94 gewijzigde bestanden met toevoegingen van 4616 en 6 verwijderingen
  1. 59 0
      huimv-farm-device/huimv-farm-eco/pom.xml
  2. 9 0
      huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/HuimvECOApplication.java
  3. 70 0
      huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/entity/BaseBox.java
  4. 69 0
      huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/entity/BaseRoom.java
  5. 123 0
      huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/entity/BaseWarningInfo.java
  6. 69 0
      huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/entity/HumAndTemDto.java
  7. 90 0
      huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/entity/SysDayWater.java
  8. 91 0
      huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/entity/SysFodder.java
  9. 90 0
      huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/entity/SysHumidity.java
  10. 100 0
      huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/entity/SysMonthWater.java
  11. 101 0
      huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/entity/SysTemperature.java
  12. 183 0
      huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/entity/SysThreshold.java
  13. 77 0
      huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/entity/SysWarningPhone.java
  14. 102 0
      huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/entity/SysWarningSet.java
  15. 18 0
      huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/mapper/BaseBoxMapper.java
  16. 20 0
      huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/mapper/BaseRoomMapper.java
  17. 16 0
      huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/mapper/BaseWarningInfoMapper.java
  18. 19 0
      huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/mapper/SysDayWaterMapper.java
  19. 21 0
      huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/mapper/SysFodderMapper.java
  20. 25 0
      huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/mapper/SysHumidityMapper.java
  21. 18 0
      huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/mapper/SysMonthWaterMapper.java
  22. 24 0
      huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/mapper/SysTemperatureMapper.java
  23. 16 0
      huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/mapper/SysThresholdMapper.java
  24. 16 0
      huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/mapper/SysWarningPhoneMapper.java
  25. 16 0
      huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/mapper/SysWarningSetMapper.java
  26. 15 0
      huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/service/IBaseBoxService.java
  27. 18 0
      huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/service/IBaseRoomService.java
  28. 17 0
      huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/service/IBaseWarningInfoService.java
  29. 18 0
      huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/service/ISysDayWaterService.java
  30. 20 0
      huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/service/ISysFodderService.java
  31. 19 0
      huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/service/ISysHumidityService.java
  32. 16 0
      huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/service/ISysMonthWaterService.java
  33. 19 0
      huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/service/ISysTemperatureService.java
  34. 16 0
      huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/service/ISysThresholdService.java
  35. 16 0
      huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/service/ISysWarningPhoneService.java
  36. 16 0
      huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/service/ISysWarningSetService.java
  37. 20 0
      huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/service/impl/BaseBoxServiceImpl.java
  38. 26 0
      huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/service/impl/BaseRoomServiceImpl.java
  39. 23 0
      huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/service/impl/BaseWarningInfoServiceImpl.java
  40. 22 0
      huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/service/impl/SysDayWaterServiceImpl.java
  41. 23 0
      huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/service/impl/SysFodderServiceImpl.java
  42. 37 0
      huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/service/impl/SysHumidityServiceImpl.java
  43. 23 0
      huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/service/impl/SysMonthWaterServiceImpl.java
  44. 36 0
      huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/service/impl/SysTemperatureServiceImpl.java
  45. 20 0
      huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/service/impl/SysThresholdServiceImpl.java
  46. 20 0
      huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/service/impl/SysWarningPhoneServiceImpl.java
  47. 20 0
      huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/service/impl/SysWarningSetServiceImpl.java
  48. 161 0
      huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/sgd/FBoxSignalRConnection.java
  49. 45 0
      huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/sgd/Global.java
  50. 215 0
      huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/sgd/Main.java
  51. 24 0
      huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/sgd/entity/Item.java
  52. 20 0
      huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/sgd/entity/Monitory.java
  53. 27 0
      huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/sgd/entity/MonitoryGetArgs.java
  54. 122 0
      huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/sgd/entity/MonitoryValue.java
  55. 18 0
      huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/sgd/fbox/BoxServerResponseException.java
  56. 18 0
      huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/sgd/fbox/ClientCredential.java
  57. 34 0
      huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/sgd/fbox/ConsoleLogger.java
  58. 12 0
      huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/sgd/fbox/ConsoleLoggerFactory.java
  59. 17 0
      huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/sgd/fbox/CredentialProvider.java
  60. 10 0
      huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/sgd/fbox/Logger.java
  61. 5 0
      huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/sgd/fbox/LoggerFactory.java
  62. 9 0
      huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/sgd/fbox/LoginFailedException.java
  63. 23 0
      huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/sgd/fbox/NullLogger.java
  64. 301 0
      huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/sgd/fbox/ServerCaller.java
  65. 21 0
      huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/sgd/fbox/StaticCredentialProvider.java
  66. 132 0
      huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/sgd/fbox/TokenManager.java
  67. 5 0
      huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/sgd/fbox/TokenResponse.java
  68. 18 0
      huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/sgd/fbox/UserCredential.java
  69. 24 0
      huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/sgd/fbox/models/Box.java
  70. 8 0
      huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/sgd/fbox/models/BoxGroup.java
  71. 18 0
      huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/sgd/fbox/models/BoxReg.java
  72. 7 0
      huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/sgd/fbox/models/BoxStateChanged.java
  73. 5 0
      huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/sgd/fbox/models/ByRowHdata.java
  74. 19 0
      huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/sgd/fbox/models/ByRowHdataRow.java
  75. 13 0
      huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/sgd/fbox/models/Cs.java
  76. 53 0
      huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/sgd/fbox/models/DataSource.java
  77. 76 0
      huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/sgd/fbox/models/DataType.java
  78. 14 0
      huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/sgd/fbox/models/DmonWriteValueArgs.java
  79. 11 0
      huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/sgd/fbox/models/GetByChannelHdataArgs.java
  80. 9 0
      huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/sgd/fbox/models/GetByRowHdataArgs.java
  81. 9 0
      huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/sgd/fbox/models/GetDmonValuesById.java
  82. 9 0
      huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/sgd/fbox/models/GetDmonValuesByName.java
  83. 39 0
      huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/sgd/fbox/models/GetHdataArgs.java
  84. 33 0
      huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/sgd/fbox/models/HdataChannelDef.java
  85. 5 0
      huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/sgd/fbox/models/HdataControlOptions.java
  86. 33 0
      huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/sgd/fbox/models/HdataDef.java
  87. 189 0
      huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/sgd/fbox/signalr/SignalRConnectionBase.java
  88. 28 0
      huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/sgd/fbox/signalr/SignalRLoggerWrapper.java
  89. 125 0
      huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/timer/SendTime.java
  90. 720 0
      huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/timer/SgdTimer.java
  91. 1 1
      huimv-farm-device/huimv-farm-eco/src/main/resources/application-dev.yml
  92. 13 0
      huimv-farm-device/huimv-farm-eco/src/main/resources/com/huimv/eco/mapper/SysHumidityMapper.xml
  93. 15 0
      huimv-farm-device/huimv-farm-eco/src/main/resources/com/huimv/eco/mapper/SysTemperatureMapper.xml
  94. 1 5
      huimv-farm-device/pom.xml

+ 59 - 0
huimv-farm-device/huimv-farm-eco/pom.xml

@@ -12,4 +12,63 @@
     <artifactId>huimv-farm-eco</artifactId>
 
 
+    <dependencies>
+        <dependency>
+            <groupId>com.baomidou</groupId>
+            <artifactId>mybatis-plus-boot-starter</artifactId>
+            <version>3.4.2</version>
+        </dependency>
+        <dependency>
+            <groupId>com.baomidou</groupId>
+            <artifactId>mybatis-plus-extension</artifactId>
+            <version>3.4.2</version>
+        </dependency>
+        <dependency>
+            <groupId>com.baomidou</groupId>
+            <artifactId>mybatis-plus-generator</artifactId>
+            <version>3.2.0</version>
+        </dependency>
+        <dependency>
+            <groupId>com.huimv</groupId>
+            <artifactId>huimv-common</artifactId>
+            <version>0.0.1-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>com.google.code.gson</groupId>
+            <artifactId>gson</artifactId>
+            <version>2.8.6</version>
+        </dependency>
+        <dependency>
+            <groupId>com.github.fryderykhuang</groupId>
+            <artifactId>signalr4j</artifactId>
+            <version>3.0.1</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.httpcomponents</groupId>
+            <artifactId>httpclient-cache</artifactId>
+            <version>4.5.3</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.httpcomponents</groupId>
+            <artifactId>httpcore</artifactId>
+            <version>4.4.4</version>
+        </dependency>
+        <dependency>
+            <groupId>commons-httpclient</groupId>
+            <artifactId>commons-httpclient</artifactId>
+            <version>3.1</version>
+        </dependency>
+
+
+        <dependency>
+            <groupId>com.zhenzikj</groupId>
+            <artifactId>zhenzisms</artifactId>
+            <version>2.0.2</version>
+        </dependency>
+        <dependency>
+            <groupId>org.springframework.data</groupId>
+            <artifactId>spring-data-jpa</artifactId>
+        </dependency>
+        <!-- JPA -->
+    </dependencies>
 </project>

+ 9 - 0
huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/HuimvECOApplication.java

@@ -1,8 +1,12 @@
 package com.huimv.eco;
 
+import com.baomidou.mybatisplus.extension.api.R;
+import org.mybatis.spring.annotation.MapperScan;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.context.ApplicationContext;
+import org.springframework.context.annotation.Bean;
+import org.springframework.web.client.RestTemplate;
 
 /**
  * @Project : huimv.shiwan
@@ -13,8 +17,13 @@ import org.springframework.context.ApplicationContext;
  * @Create : 2020-12-25
  **/
 @SpringBootApplication
+@MapperScan("com.huimv.eco.mapper")
 public class HuimvECOApplication {
     public static void main(String[] args) {
         ApplicationContext applicationContext = SpringApplication.run(HuimvECOApplication.class, args);
     }
+    @Bean
+    public static RestTemplate getRestTemplate(){
+        return new RestTemplate();
+    }
 }

+ 70 - 0
huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/entity/BaseBox.java

@@ -0,0 +1,70 @@
+package com.huimv.eco.entity;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author astupidcoder
+ * @since 2021-11-11
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@Accessors(chain = true)
+public class BaseBox extends Model {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "uid")
+    private String uid;
+
+    /**
+     * 别名
+     */
+    private String alias;
+
+    private Integer floorId;
+
+    public BaseBox() {
+    }
+
+    public BaseBox(String uid, String alias, Integer floorId) {
+        this.uid = uid;
+        this.alias = alias;
+        this.floorId = floorId;
+    }
+
+    public static long getSerialVersionUID() {
+        return serialVersionUID;
+    }
+
+    public String getUid() {
+        return uid;
+    }
+
+    public void setUid(String uid) {
+        this.uid = uid;
+    }
+
+    public String getAlias() {
+        return alias;
+    }
+
+    public void setAlias(String alias) {
+        this.alias = alias;
+    }
+
+    public Integer getFloorId() {
+        return floorId;
+    }
+
+    public void setFloorId(Integer floorId) {
+        this.floorId = floorId;
+    }
+}

+ 69 - 0
huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/entity/BaseRoom.java

@@ -0,0 +1,69 @@
+package com.huimv.eco.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author astupidcoder
+ * @since 2021-11-11
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@Accessors(chain = true)
+public class BaseRoom extends Model {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    private String boxId;
+
+    private String roomName;
+
+    private String alias;
+
+    public static long getSerialVersionUID() {
+        return serialVersionUID;
+    }
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public String getBoxId() {
+        return boxId;
+    }
+
+    public void setBoxId(String boxId) {
+        this.boxId = boxId;
+    }
+
+    public String getRoomName() {
+        return roomName;
+    }
+
+    public void setRoomName(String roomName) {
+        this.roomName = roomName;
+    }
+
+    public String getAlias() {
+        return alias;
+    }
+
+    public void setAlias(String alias) {
+        this.alias = alias;
+    }
+}

+ 123 - 0
huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/entity/BaseWarningInfo.java

@@ -0,0 +1,123 @@
+package com.huimv.eco.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.util.Date;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author astupidcoder
+ * @since 2021-12-02
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@Accessors(chain = true)
+public class BaseWarningInfo extends Model {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    private Integer farmId;
+
+    private Integer level;
+
+    private String msg;
+
+    private String levelName;
+
+    private String warningName;
+
+    @JsonFormat(pattern = "MM-dd HH:mm:ss" ,timezone = "GMT+8")
+    private Date warningTime;
+
+    @JsonFormat(pattern = "MM-dd HH:mm:ss" ,timezone = "GMT+8")
+    private Date uploadTime;
+
+    private Integer alarmType;
+
+
+
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public Integer getFarmId() {
+        return farmId;
+    }
+
+    public void setFarmId(Integer farmId) {
+        this.farmId = farmId;
+    }
+
+    public Integer getLevel() {
+        return level;
+    }
+
+    public void setLevel(Integer level) {
+        this.level = level;
+    }
+
+    public String getMsg() {
+        return msg;
+    }
+
+    public void setMsg(String msg) {
+        this.msg = msg;
+    }
+
+    public String getLevelName() {
+        return levelName;
+    }
+
+    public void setLevelName(String levelName) {
+        this.levelName = levelName;
+    }
+
+    public String getWarningName() {
+        return warningName;
+    }
+
+    public void setWarningName(String warningName) {
+        this.warningName = warningName;
+    }
+
+    public Date getWarningTime() {
+        return warningTime;
+    }
+
+    public void setWarningTime(Date warningTime) {
+        this.warningTime = warningTime;
+    }
+
+    public Date getUploadTime() {
+        return uploadTime;
+    }
+
+    public void setUploadTime(Date uploadTime) {
+        this.uploadTime = uploadTime;
+    }
+
+    public Integer getAlarmType() {
+        return alarmType;
+    }
+
+    public void setAlarmType(Integer alarmType) {
+        this.alarmType = alarmType;
+    }
+}

+ 69 - 0
huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/entity/HumAndTemDto.java

@@ -0,0 +1,69 @@
+package com.huimv.eco.entity;
+
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class HumAndTemDto {
+
+    private List<SysHumidity> humidity;
+
+    private List<SysTemperature> temperature;
+
+    private List<BaseWarningInfo> warningInfos;
+
+    private List<SysFodder> fodders;
+
+    private List<SysDayWater> dayWaters;
+
+    private List<SysMonthWater> monthWaters;
+
+    public List<SysHumidity> getHumidity() {
+        return humidity;
+    }
+
+    public void setHumidity(List<SysHumidity> humidity) {
+        this.humidity = humidity;
+    }
+
+    public List<SysTemperature> getTemperature() {
+        return temperature;
+    }
+
+    public void setTemperature(List<SysTemperature> temperature) {
+        this.temperature = temperature;
+    }
+
+    public List<BaseWarningInfo> getWarningInfos() {
+        return warningInfos;
+    }
+
+    public void setWarningInfos(List<BaseWarningInfo> warningInfos) {
+        this.warningInfos = warningInfos;
+    }
+
+    public List<SysFodder> getFodders() {
+        return fodders;
+    }
+
+    public void setFodders(List<SysFodder> fodders) {
+        this.fodders = fodders;
+    }
+
+    public List<SysDayWater> getDayWaters() {
+        return dayWaters;
+    }
+
+    public void setDayWaters(List<SysDayWater> dayWaters) {
+        this.dayWaters = dayWaters;
+    }
+
+    public List<SysMonthWater> getMonthWaters() {
+        return monthWaters;
+    }
+
+    public void setMonthWaters(List<SysMonthWater> monthWaters) {
+        this.monthWaters = monthWaters;
+    }
+}

+ 90 - 0
huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/entity/SysDayWater.java

@@ -0,0 +1,90 @@
+package com.huimv.eco.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.util.Date;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author astupidcoder
+ * @since 2021-11-12
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@Accessors(chain = true)
+public class SysDayWater extends Model {
+
+    private static final long serialVersionUID = 1L;
+
+    private String id;
+
+    private String value;
+
+    private Date createTime;
+
+    private Integer roomId;
+
+    @TableId(value = "day_water_id", type = IdType.AUTO)
+    private Integer dayWaterId;
+
+    private Integer farmId;
+
+
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getValue() {
+        return value;
+    }
+
+    public void setValue(String value) {
+        this.value = value;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    public Integer getRoomId() {
+        return roomId;
+    }
+
+    public void setRoomId(Integer roomId) {
+        this.roomId = roomId;
+    }
+
+    public Integer getDayWaterId() {
+        return dayWaterId;
+    }
+
+    public void setDayWaterId(Integer dayWaterId) {
+        this.dayWaterId = dayWaterId;
+    }
+
+    public Integer getFarmId() {
+        return farmId;
+    }
+
+    public void setFarmId(Integer farmId) {
+        this.farmId = farmId;
+    }
+}

+ 91 - 0
huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/entity/SysFodder.java

@@ -0,0 +1,91 @@
+package com.huimv.eco.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.util.Date;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author astupidcoder
+ * @since 2021-11-15
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@Accessors(chain = true)
+public class SysFodder extends Model {
+
+    private static final long serialVersionUID = 1L;
+
+    private String id;
+
+    private Double value;
+
+    private Date createTime;
+
+    private Integer floorId;
+
+    @TableId(value = "fodder_id", type = IdType.AUTO)
+    private Integer fodderId;
+
+    private Integer farmId;
+
+
+
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public Double getValue() {
+        return value;
+    }
+
+    public void setValue(Double value) {
+        this.value = value;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    public Integer getFloorId() {
+        return floorId;
+    }
+
+    public void setFloorId(Integer floorId) {
+        this.floorId = floorId;
+    }
+
+    public Integer getFodderId() {
+        return fodderId;
+    }
+
+    public void setFodderId(Integer fodderId) {
+        this.fodderId = fodderId;
+    }
+
+    public Integer getFarmId() {
+        return farmId;
+    }
+
+    public void setFarmId(Integer farmId) {
+        this.farmId = farmId;
+    }
+}

+ 90 - 0
huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/entity/SysHumidity.java

@@ -0,0 +1,90 @@
+package com.huimv.eco.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.util.Date;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author astupidcoder
+ * @since 2021-11-11
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@Accessors(chain = true)
+public class SysHumidity extends Model {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "hum_id", type = IdType.AUTO)
+    private Integer humId;
+
+    private String id;
+
+    private Double value;
+
+    private Date createTime;
+
+    private Integer roomId;
+
+    private Integer farmId;
+
+
+
+    public Integer getHumId() {
+        return humId;
+    }
+
+    public void setHumId(Integer humId) {
+        this.humId = humId;
+    }
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public Double getValue() {
+        return value;
+    }
+
+    public void setValue(Double value) {
+        this.value = value;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    public Integer getRoomId() {
+        return roomId;
+    }
+
+    public void setRoomId(Integer roomId) {
+        this.roomId = roomId;
+    }
+
+    public Integer getFarmId() {
+        return farmId;
+    }
+
+    public void setFarmId(Integer farmId) {
+        this.farmId = farmId;
+    }
+}

+ 100 - 0
huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/entity/SysMonthWater.java

@@ -0,0 +1,100 @@
+package com.huimv.eco.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.util.Date;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author astupidcoder
+ * @since 2021-11-12
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@Accessors(chain = true)
+public class SysMonthWater extends Model {
+
+    private static final long serialVersionUID = 1L;
+
+    private String id;
+
+    private String value;
+
+    private Date createTime;
+
+    private Integer roomId;
+
+    @TableId(value = "month_water_id", type = IdType.AUTO)
+    private Integer monthWaterId;
+
+    private String increaseValue;
+
+    private Integer farmId;
+
+
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public String getValue() {
+        return value;
+    }
+
+    public void setValue(String value) {
+        this.value = value;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    public Integer getRoomId() {
+        return roomId;
+    }
+
+    public void setRoomId(Integer roomId) {
+        this.roomId = roomId;
+    }
+
+    public Integer getMonthWaterId() {
+        return monthWaterId;
+    }
+
+    public void setMonthWaterId(Integer monthWaterId) {
+        this.monthWaterId = monthWaterId;
+    }
+
+    public String getIncreaseValue() {
+        return increaseValue;
+    }
+
+    public void setIncreaseValue(String increaseValue) {
+        this.increaseValue = increaseValue;
+    }
+
+    public Integer getFarmId() {
+        return farmId;
+    }
+
+    public void setFarmId(Integer farmId) {
+        this.farmId = farmId;
+    }
+}

+ 101 - 0
huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/entity/SysTemperature.java

@@ -0,0 +1,101 @@
+package com.huimv.eco.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+import java.util.Date;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author astupidcoder
+ * @since 2021-11-11
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@Accessors(chain = true)
+public class SysTemperature extends Model {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "tem_id", type = IdType.AUTO)
+    private Integer temId;
+
+    private String id;
+
+    private Double value;
+
+    private Date createTime;
+
+    private Integer roomId;
+
+    private Integer farmId;
+
+
+    private Double original;
+
+
+
+    public Integer getTemId() {
+        return temId;
+    }
+
+    public void setTemId(Integer temId) {
+        this.temId = temId;
+    }
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public Double getValue() {
+        return value;
+    }
+
+    public void setValue(Double value) {
+        this.value = value;
+    }
+
+    public Date getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(Date createTime) {
+        this.createTime = createTime;
+    }
+
+    public Integer getRoomId() {
+        return roomId;
+    }
+
+    public void setRoomId(Integer roomId) {
+        this.roomId = roomId;
+    }
+
+    public Integer getFarmId() {
+        return farmId;
+    }
+
+    public void setFarmId(Integer farmId) {
+        this.farmId = farmId;
+    }
+
+    public Double getOriginal() {
+        return original;
+    }
+
+    public void setOriginal(Double original) {
+        this.original = original;
+    }
+}

+ 183 - 0
huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/entity/SysThreshold.java

@@ -0,0 +1,183 @@
+package com.huimv.eco.entity;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author astupidcoder
+ * @since 2021-11-30
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@Accessors(chain = true)
+public class SysThreshold extends Model {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "farm_id")
+    private Integer farmId;
+
+    /**
+     * 高温
+     */
+    private String maxTem;
+
+    /**
+     * 低温
+     */
+    private String minTem;
+
+    /**
+     * 高湿度
+     */
+    private String maxHum;
+
+    /**
+     * 低湿度
+     */
+    private String minHum;
+
+    /**
+     * 累计流量
+     */
+    private String totalFlow;
+
+    /**
+     * 化学需氧量
+     */
+    @TableField("COD")
+    private String COD;
+
+    /**
+     * 氨氮
+     */
+    private String ammonia;
+
+    /**
+     * 氮
+     */
+    private String nitrogen;
+
+    /**
+     * 磷
+     */
+    private String phosphorus;
+
+
+    /**
+     * ph
+     */
+    private String ph;
+
+
+     /**
+     * 瞬时流量
+     */
+    private String flow;
+
+
+
+    public Integer getFarmId() {
+        return farmId;
+    }
+
+    public void setFarmId(Integer farmId) {
+        this.farmId = farmId;
+    }
+
+    public String getMaxTem() {
+        return maxTem;
+    }
+
+    public void setMaxTem(String maxTem) {
+        this.maxTem = maxTem;
+    }
+
+    public String getMinTem() {
+        return minTem;
+    }
+
+    public void setMinTem(String minTem) {
+        this.minTem = minTem;
+    }
+
+    public String getMaxHum() {
+        return maxHum;
+    }
+
+    public void setMaxHum(String maxHum) {
+        this.maxHum = maxHum;
+    }
+
+    public String getMinHum() {
+        return minHum;
+    }
+
+    public void setMinHum(String minHum) {
+        this.minHum = minHum;
+    }
+
+    public String getTotalFlow() {
+        return totalFlow;
+    }
+
+    public void setTotalFlow(String totalFlow) {
+        this.totalFlow = totalFlow;
+    }
+
+    public String getCOD() {
+        return COD;
+    }
+
+    public void setCOD(String COD) {
+        this.COD = COD;
+    }
+
+    public String getAmmonia() {
+        return ammonia;
+    }
+
+    public void setAmmonia(String ammonia) {
+        this.ammonia = ammonia;
+    }
+
+    public String getNitrogen() {
+        return nitrogen;
+    }
+
+    public void setNitrogen(String nitrogen) {
+        this.nitrogen = nitrogen;
+    }
+
+    public String getPhosphorus() {
+        return phosphorus;
+    }
+
+    public void setPhosphorus(String phosphorus) {
+        this.phosphorus = phosphorus;
+    }
+
+    public String getPh() {
+        return ph;
+    }
+
+    public void setPh(String ph) {
+        this.ph = ph;
+    }
+
+    public String getFlow() {
+        return flow;
+    }
+
+    public void setFlow(String flow) {
+        this.flow = flow;
+    }
+}

+ 77 - 0
huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/entity/SysWarningPhone.java

@@ -0,0 +1,77 @@
+package com.huimv.eco.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author astupidcoder
+ * @since 2021-12-01
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@Accessors(chain = true)
+public class SysWarningPhone extends Model {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    private Integer farmId;
+
+    private String wraningName;
+
+    private String phone;
+
+    private Integer level;
+
+
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public Integer getFarmId() {
+        return farmId;
+    }
+
+    public void setFarmId(Integer farmId) {
+        this.farmId = farmId;
+    }
+
+    public String getWraningName() {
+        return wraningName;
+    }
+
+    public void setWraningName(String wraningName) {
+        this.wraningName = wraningName;
+    }
+
+    public String getPhone() {
+        return phone;
+    }
+
+    public void setPhone(String phone) {
+        this.phone = phone;
+    }
+
+    public Integer getLevel() {
+        return level;
+    }
+
+    public void setLevel(Integer level) {
+        this.level = level;
+    }
+}

+ 102 - 0
huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/entity/SysWarningSet.java

@@ -0,0 +1,102 @@
+package com.huimv.eco.entity;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.extension.activerecord.Model;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author astupidcoder
+ * @since 2021-12-01
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@Accessors(chain = true)
+public class SysWarningSet extends Model {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    private Integer farmId;
+
+    /**
+     * 大项
+     */
+    private String major;
+
+    /**
+     * 内容
+     */
+    private String content;
+
+    private Boolean firstLevel;
+
+    private Boolean secondLevel;
+
+    private Boolean thirdlyLevel;
+
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public Integer getFarmId() {
+        return farmId;
+    }
+
+    public void setFarmId(Integer farmId) {
+        this.farmId = farmId;
+    }
+
+    public String getMajor() {
+        return major;
+    }
+
+    public void setMajor(String major) {
+        this.major = major;
+    }
+
+    public String getContent() {
+        return content;
+    }
+
+    public void setContent(String content) {
+        this.content = content;
+    }
+
+    public Boolean getFirstLevel() {
+        return firstLevel;
+    }
+
+    public void setFirstLevel(Boolean firstLevel) {
+        this.firstLevel = firstLevel;
+    }
+
+    public Boolean getSecondLevel() {
+        return secondLevel;
+    }
+
+    public void setSecondLevel(Boolean secondLevel) {
+        this.secondLevel = secondLevel;
+    }
+
+    public Boolean getThirdlyLevel() {
+        return thirdlyLevel;
+    }
+
+    public void setThirdlyLevel(Boolean thirdlyLevel) {
+        this.thirdlyLevel = thirdlyLevel;
+    }
+}

+ 18 - 0
huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/mapper/BaseBoxMapper.java

@@ -0,0 +1,18 @@
+package com.huimv.eco.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.huimv.eco.entity.BaseBox;
+import org.springframework.stereotype.Repository;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author astupidcoder
+ * @since 2021-11-11
+ */
+@Repository
+public interface BaseBoxMapper extends BaseMapper<BaseBox> {
+
+}

+ 20 - 0
huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/mapper/BaseRoomMapper.java

@@ -0,0 +1,20 @@
+package com.huimv.eco.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.huimv.eco.entity.BaseRoom;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author astupidcoder
+ * @since 2021-11-11
+ */
+@Repository
+public interface BaseRoomMapper extends BaseMapper<BaseRoom> {
+
+}

+ 16 - 0
huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/mapper/BaseWarningInfoMapper.java

@@ -0,0 +1,16 @@
+package com.huimv.eco.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.huimv.eco.entity.BaseWarningInfo;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author astupidcoder
+ * @since 2021-12-02
+ */
+public interface BaseWarningInfoMapper extends BaseMapper<BaseWarningInfo> {
+
+}

+ 19 - 0
huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/mapper/SysDayWaterMapper.java

@@ -0,0 +1,19 @@
+package com.huimv.eco.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.huimv.eco.entity.SysDayWater;
+import org.springframework.stereotype.Repository;
+
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author astupidcoder
+ * @since 2021-11-12
+ */
+@Repository
+public interface SysDayWaterMapper extends BaseMapper<SysDayWater> {
+
+}

+ 21 - 0
huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/mapper/SysFodderMapper.java

@@ -0,0 +1,21 @@
+package com.huimv.eco.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.huimv.eco.entity.SysFodder;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author astupidcoder
+ * @since 2021-11-15
+ */
+@Repository
+public interface SysFodderMapper extends BaseMapper<SysFodder> {
+
+
+}

+ 25 - 0
huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/mapper/SysHumidityMapper.java

@@ -0,0 +1,25 @@
+package com.huimv.eco.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.toolkit.Constants;
+import com.huimv.eco.entity.SysHumidity;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author astupidcoder
+ * @since 2021-11-11
+ */
+@Repository
+public interface SysHumidityMapper extends BaseMapper<SysHumidity> {
+
+
+    List<SysHumidity> getlist(@Param(Constants.WRAPPER) QueryWrapper<SysHumidity> wrapper);
+}

+ 18 - 0
huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/mapper/SysMonthWaterMapper.java

@@ -0,0 +1,18 @@
+package com.huimv.eco.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.huimv.eco.entity.SysMonthWater;
+import org.springframework.stereotype.Repository;
+
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author astupidcoder
+ * @since 2021-11-12
+ */
+@Repository
+public interface SysMonthWaterMapper extends BaseMapper<SysMonthWater> {
+}

+ 24 - 0
huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/mapper/SysTemperatureMapper.java

@@ -0,0 +1,24 @@
+package com.huimv.eco.mapper;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.toolkit.Constants;
+import com.huimv.eco.entity.SysTemperature;
+import org.apache.ibatis.annotations.Param;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author astupidcoder
+ * @since 2021-11-11
+ */
+@Repository
+public interface SysTemperatureMapper extends BaseMapper<SysTemperature> {
+
+    List<SysTemperature> getlist(@Param(Constants.WRAPPER) QueryWrapper<SysTemperature> wrapper);
+}

+ 16 - 0
huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/mapper/SysThresholdMapper.java

@@ -0,0 +1,16 @@
+package com.huimv.eco.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.huimv.eco.entity.SysThreshold;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author astupidcoder
+ * @since 2021-11-30
+ */
+public interface SysThresholdMapper extends BaseMapper<SysThreshold> {
+
+}

+ 16 - 0
huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/mapper/SysWarningPhoneMapper.java

@@ -0,0 +1,16 @@
+package com.huimv.eco.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.huimv.eco.entity.SysWarningPhone;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author astupidcoder
+ * @since 2021-12-01
+ */
+public interface SysWarningPhoneMapper extends BaseMapper<SysWarningPhone> {
+
+}

+ 16 - 0
huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/mapper/SysWarningSetMapper.java

@@ -0,0 +1,16 @@
+package com.huimv.eco.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.huimv.eco.entity.SysWarningSet;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author astupidcoder
+ * @since 2021-12-01
+ */
+public interface SysWarningSetMapper extends BaseMapper<SysWarningSet> {
+
+}

+ 15 - 0
huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/service/IBaseBoxService.java

@@ -0,0 +1,15 @@
+package com.huimv.eco.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.huimv.eco.entity.BaseBox;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author astupidcoder
+ * @since 2021-11-11
+ */
+public interface IBaseBoxService extends IService<BaseBox> {
+}

+ 18 - 0
huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/service/IBaseRoomService.java

@@ -0,0 +1,18 @@
+package com.huimv.eco.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.huimv.eco.entity.BaseRoom;
+
+import java.util.Map;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author astupidcoder
+ * @since 2021-11-11
+ */
+public interface IBaseRoomService extends IService<BaseRoom> {
+
+}

+ 17 - 0
huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/service/IBaseWarningInfoService.java

@@ -0,0 +1,17 @@
+package com.huimv.eco.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.huimv.eco.entity.BaseWarningInfo;
+
+import java.util.Map;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author astupidcoder
+ * @since 2021-12-02
+ */
+public interface IBaseWarningInfoService extends IService<BaseWarningInfo> {
+}

+ 18 - 0
huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/service/ISysDayWaterService.java

@@ -0,0 +1,18 @@
+package com.huimv.eco.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.huimv.eco.entity.SysDayWater;
+
+import java.util.Map;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author astupidcoder
+ * @since 2021-11-12
+ */
+public interface ISysDayWaterService extends IService<SysDayWater> {
+
+}

+ 20 - 0
huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/service/ISysFodderService.java

@@ -0,0 +1,20 @@
+package com.huimv.eco.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.huimv.eco.entity.SysFodder;
+
+import java.util.Map;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author astupidcoder
+ * @since 2021-11-15
+ */
+public interface ISysFodderService extends IService<SysFodder> {
+
+
+
+}

+ 19 - 0
huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/service/ISysHumidityService.java

@@ -0,0 +1,19 @@
+package com.huimv.eco.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.huimv.eco.entity.SysHumidity;
+
+import java.util.List;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author astupidcoder
+ * @since 2021-11-11
+ */
+public interface ISysHumidityService extends IService<SysHumidity> {
+
+    List<SysHumidity> getlist();
+}

+ 16 - 0
huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/service/ISysMonthWaterService.java

@@ -0,0 +1,16 @@
+package com.huimv.eco.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.huimv.eco.entity.SysMonthWater;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author astupidcoder
+ * @since 2021-11-12
+ */
+public interface ISysMonthWaterService extends IService<SysMonthWater> {
+
+}

+ 19 - 0
huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/service/ISysTemperatureService.java

@@ -0,0 +1,19 @@
+package com.huimv.eco.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.huimv.eco.entity.SysTemperature;
+
+import java.util.List;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author astupidcoder
+ * @since 2021-11-11
+ */
+public interface ISysTemperatureService extends IService<SysTemperature> {
+
+    List<SysTemperature> getList();
+}

+ 16 - 0
huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/service/ISysThresholdService.java

@@ -0,0 +1,16 @@
+package com.huimv.eco.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.huimv.eco.entity.SysThreshold;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author astupidcoder
+ * @since 2021-11-30
+ */
+public interface ISysThresholdService extends IService<SysThreshold> {
+
+}

+ 16 - 0
huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/service/ISysWarningPhoneService.java

@@ -0,0 +1,16 @@
+package com.huimv.eco.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.huimv.eco.entity.SysWarningPhone;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author astupidcoder
+ * @since 2021-12-01
+ */
+public interface ISysWarningPhoneService extends IService<SysWarningPhone> {
+
+}

+ 16 - 0
huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/service/ISysWarningSetService.java

@@ -0,0 +1,16 @@
+package com.huimv.eco.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.huimv.eco.entity.SysWarningSet;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author astupidcoder
+ * @since 2021-12-01
+ */
+public interface ISysWarningSetService extends IService<SysWarningSet> {
+
+}

+ 20 - 0
huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/service/impl/BaseBoxServiceImpl.java

@@ -0,0 +1,20 @@
+package com.huimv.eco.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.huimv.eco.entity.BaseBox;
+import com.huimv.eco.mapper.BaseBoxMapper;
+import com.huimv.eco.service.IBaseBoxService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author astupidcoder
+ * @since 2021-11-11
+ */
+@Service
+public class BaseBoxServiceImpl extends ServiceImpl<BaseBoxMapper, BaseBox> implements IBaseBoxService {
+
+}

+ 26 - 0
huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/service/impl/BaseRoomServiceImpl.java

@@ -0,0 +1,26 @@
+package com.huimv.eco.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.huimv.eco.entity.BaseRoom;
+import com.huimv.eco.mapper.BaseRoomMapper;
+import com.huimv.eco.service.IBaseRoomService;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author astupidcoder
+ * @since 2021-11-11
+ */
+@Service
+public class BaseRoomServiceImpl extends ServiceImpl<BaseRoomMapper, BaseRoom> implements IBaseRoomService {
+
+
+}

+ 23 - 0
huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/service/impl/BaseWarningInfoServiceImpl.java

@@ -0,0 +1,23 @@
+package com.huimv.eco.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.huimv.eco.entity.BaseWarningInfo;
+import com.huimv.eco.mapper.BaseWarningInfoMapper;
+import com.huimv.eco.service.IBaseWarningInfoService;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+import java.util.Map;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author astupidcoder
+ * @since 2021-12-02
+ */
+@Service
+public class BaseWarningInfoServiceImpl extends ServiceImpl<BaseWarningInfoMapper, BaseWarningInfo> implements IBaseWarningInfoService {
+
+}

+ 22 - 0
huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/service/impl/SysDayWaterServiceImpl.java

@@ -0,0 +1,22 @@
+package com.huimv.eco.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.huimv.eco.entity.SysDayWater;
+import com.huimv.eco.mapper.SysDayWaterMapper;
+import com.huimv.eco.service.ISysDayWaterService;
+import org.springframework.stereotype.Service;
+
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author astupidcoder
+ * @since 2021-11-12
+ */
+@Service
+public class SysDayWaterServiceImpl extends ServiceImpl<SysDayWaterMapper, SysDayWater> implements ISysDayWaterService {
+
+
+}

+ 23 - 0
huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/service/impl/SysFodderServiceImpl.java

@@ -0,0 +1,23 @@
+package com.huimv.eco.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.huimv.eco.entity.SysFodder;
+import com.huimv.eco.mapper.SysFodderMapper;
+import com.huimv.eco.service.ISysFodderService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author astupidcoder
+ * @since 2021-11-15
+ */
+@Service
+public class SysFodderServiceImpl extends ServiceImpl<SysFodderMapper, SysFodder> implements ISysFodderService {
+
+
+
+
+}

+ 37 - 0
huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/service/impl/SysHumidityServiceImpl.java

@@ -0,0 +1,37 @@
+package com.huimv.eco.service.impl;
+
+import cn.hutool.core.date.DateUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.huimv.eco.entity.SysHumidity;
+import com.huimv.eco.mapper.SysHumidityMapper;
+import com.huimv.eco.service.ISysHumidityService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author astupidcoder
+ * @since 2021-11-11
+ */
+@Service
+public class SysHumidityServiceImpl extends ServiceImpl<SysHumidityMapper, SysHumidity> implements ISysHumidityService {
+
+    @Autowired
+    private SysHumidityMapper humidityMapper;
+
+    @Override
+    public List<SysHumidity> getlist() {
+        QueryWrapper<SysHumidity> wrapper = new QueryWrapper<>();
+        wrapper.eq("farm_id",1);
+        wrapper.ge("create_time", DateUtil.offsetMinute(new Date(),-30));
+        return  humidityMapper.getlist(wrapper);
+
+    }
+}

+ 23 - 0
huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/service/impl/SysMonthWaterServiceImpl.java

@@ -0,0 +1,23 @@
+package com.huimv.eco.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.huimv.eco.entity.SysMonthWater;
+import com.huimv.eco.mapper.SysMonthWaterMapper;
+import com.huimv.eco.service.ISysMonthWaterService;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author astupidcoder
+ * @since 2021-11-12
+ */
+@Service
+public class SysMonthWaterServiceImpl extends ServiceImpl<SysMonthWaterMapper, SysMonthWater> implements ISysMonthWaterService {
+
+
+}

+ 36 - 0
huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/service/impl/SysTemperatureServiceImpl.java

@@ -0,0 +1,36 @@
+package com.huimv.eco.service.impl;
+
+import cn.hutool.core.date.DateUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.huimv.eco.entity.SysHumidity;
+import com.huimv.eco.entity.SysTemperature;
+import com.huimv.eco.mapper.SysHumidityMapper;
+import com.huimv.eco.mapper.SysTemperatureMapper;
+import com.huimv.eco.service.ISysTemperatureService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author astupidcoder
+ * @since 2021-11-11
+ */
+@Service
+public class SysTemperatureServiceImpl extends ServiceImpl<SysTemperatureMapper, SysTemperature> implements ISysTemperatureService {
+    @Autowired
+    private SysTemperatureMapper temperatureMapper;
+    @Override
+    public List<SysTemperature> getList() {
+        QueryWrapper<SysTemperature> wrapper = new QueryWrapper<>();
+        wrapper.eq("farm_id",1);
+        wrapper.ge("create_time", DateUtil.offsetMinute(new Date(),-30));
+        return  temperatureMapper.getlist(wrapper);
+    }
+}

+ 20 - 0
huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/service/impl/SysThresholdServiceImpl.java

@@ -0,0 +1,20 @@
+package com.huimv.eco.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.huimv.eco.entity.SysThreshold;
+import com.huimv.eco.mapper.SysThresholdMapper;
+import com.huimv.eco.service.ISysThresholdService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author astupidcoder
+ * @since 2021-11-30
+ */
+@Service
+public class SysThresholdServiceImpl extends ServiceImpl<SysThresholdMapper, SysThreshold> implements ISysThresholdService {
+
+}

+ 20 - 0
huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/service/impl/SysWarningPhoneServiceImpl.java

@@ -0,0 +1,20 @@
+package com.huimv.eco.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.huimv.eco.entity.SysWarningPhone;
+import com.huimv.eco.mapper.SysWarningPhoneMapper;
+import com.huimv.eco.service.ISysWarningPhoneService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author astupidcoder
+ * @since 2021-12-01
+ */
+@Service
+public class SysWarningPhoneServiceImpl extends ServiceImpl<SysWarningPhoneMapper, SysWarningPhone> implements ISysWarningPhoneService {
+
+}

+ 20 - 0
huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/service/impl/SysWarningSetServiceImpl.java

@@ -0,0 +1,20 @@
+package com.huimv.eco.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.huimv.eco.entity.SysWarningSet;
+import com.huimv.eco.mapper.SysWarningSetMapper;
+import com.huimv.eco.service.ISysWarningSetService;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author astupidcoder
+ * @since 2021-12-01
+ */
+@Service
+public class SysWarningSetServiceImpl extends ServiceImpl<SysWarningSetMapper, SysWarningSet> implements ISysWarningSetService {
+
+}

+ 161 - 0
huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/sgd/FBoxSignalRConnection.java

@@ -0,0 +1,161 @@
+package com.huimv.eco.sgd;
+
+import com.github.signalr4j.client.hubs.HubProxy;
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import com.google.gson.JsonArray;
+import com.google.gson.JsonObject;
+import com.huimv.eco.sgd.fbox.Logger;
+import com.huimv.eco.sgd.fbox.LoggerFactory;
+import com.huimv.eco.sgd.fbox.TokenManager;
+import com.huimv.eco.sgd.fbox.signalr.SignalRConnectionBase;
+
+import java.net.Proxy;
+import java.text.SimpleDateFormat;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.atomic.LongAdder;
+
+public class FBoxSignalRConnection extends SignalRConnectionBase {
+    private final Gson gson;
+    private final Logger logger;
+    ConcurrentHashMap<Long, LongAdder> dmonIds = new ConcurrentHashMap<>();
+    private LongAdder dmonMsgCounter = new LongAdder();
+    private long lastDmonItemCount;
+    private long lastDmonMsgCount;
+    private long lastReportTime;
+    private Proxy proxy;
+    private LongAdder dmonItemCounter = new LongAdder();
+
+    public FBoxSignalRConnection(String hubUrl, String signalrClientId, TokenManager tokenManager, Proxy proxy, LoggerFactory loggerFactory) {
+        super(hubUrl, signalrClientId, tokenManager, proxy, loggerFactory);
+        this.logger = loggerFactory.createLogger("FBoxSignalRConnection");
+        this.proxy = proxy;
+        gson = new GsonBuilder().create();
+//        new Thread(() -> {
+//            //统计条目数线程,可以去掉此线程代码
+//            for (; ; ) {
+//                try {
+//                    Thread.sleep(5000);
+//                } catch (InterruptedException e) {
+//                    e.printStackTrace();
+//                }
+//                long currentTime = System.nanoTime();
+//                long currentMsgCount = this.dmonMsgCounter.longValue();
+//                long currentItemCount = this.dmonItemCounter.longValue();
+//                long msgRate = (currentMsgCount - this.lastDmonMsgCount) * 1000000000 / (currentTime - this.lastReportTime);
+//                long itemRate = (currentItemCount - this.lastDmonItemCount) * 1000000000 / (currentTime - this.lastReportTime);
+//                this.logger.logInformation(String.format("Dmon id count: %d, item rate: %d, message rate: %d", this.dmonIds.size(), itemRate, msgRate));
+//                this.lastReportTime = currentTime;
+//                this.lastDmonMsgCount = currentMsgCount;
+//                this.lastDmonItemCount = currentItemCount;
+//            }
+//        }).start();
+    }
+
+    @Override
+    public void connected() {
+        super.connected();
+        dmonIds.clear();
+    }
+
+
+    @Override
+    protected void onHubProxyDestroyed(HubProxy hubProxy){
+        hubProxy.removeSubscription("dMonUpdateValue");
+        hubProxy.removeSubscription("alarmTriggered");
+        hubProxy.removeSubscription("alarmRecovered");
+        hubProxy.removeSubscription("boxConnStateChanged");
+    }
+
+    SimpleDateFormat sdf  = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
+    @Override
+    protected void onHubProxyCreated(HubProxy hubProxy) {
+        //signalr实时数据推送事件,接收此事件数据前提条件,开启监控点数据推送控制接口(订阅)
+        hubProxy.subscribe("dMonUpdateValue").addReceivedHandler(jsonElements -> {
+            Global.threadPool.submit(() -> {
+                //try{
+                    this.dmonMsgCounter.increment();
+                    //System.out.println("Dmon data received: ");
+                    //收到的推送数据
+                    JsonArray items = jsonElements[1].getAsJsonArray();
+                    for (com.google.gson.JsonElement jsonElement : items) {
+                        JsonObject item = jsonElement.getAsJsonObject();
+                        this.dmonIds.computeIfAbsent(item.get("id").getAsLong(), aLong -> new LongAdder()).increment();
+                        this.dmonItemCounter.increment();
+                        //收到的推送数据
+                        String name = item.get("name").getAsString();
+                        String value = item.get("value").getAsString();
+                        long time = item.get("t").getAsLong();
+                        this.logger.logInformation(String.format(" %s, %s, %d\n",name,value,time));
+                        //监控点正常无status属性
+                        //long statu = item.get("status").getAsLong();
+                    };
+                    //打印监控点的值集合,集合详细信息请看接口文档http://docs.flexem.net/fbox/zh-cn/tutorials/RealtimeDataPush.html
+                    System.out.printf("%s",jsonElements[1].getAsJsonArray());
+                    //打印boxUid
+                    System.out.printf("%s",jsonElements[2].getAsLong());
+//                }
+//                catch (Exception e) {
+//                    System.out.printf("%s", e);
+//                }
+            });
+        });
+
+        // signalr报警触发事件
+//        hubProxy.subscribe("alarmTriggered").addReceivedHandler(jsonElements -> {
+//            Global.threadPool.submit(() -> {
+//                System.out.println("Alarm triggered: ");
+//                for (com.google.gson.JsonElement jsonElement : jsonElements) {
+//                    //报警推送消息全部打印。具体参数解释请看接口文档http://docs.flexem.net/fbox/zh-cn/tutorials/AlarmTiggerPush.html
+//                    System.out.println("\t" + jsonElement);
+//                };
+//                //打印报警条目的值集合
+//                System.out.printf("%s",jsonElements[1].getAsJsonArray());
+//                //打印boxUid
+//                System.out.printf("%s",jsonElements[2].getAsLong());
+//            });
+//        });
+
+        // signalr报警还原事件
+//        hubProxy.subscribe("alarmRecovered").addReceivedHandler(jsonElements -> {
+//            Global.threadPool.submit(() -> {
+//                System.out.println("Alarm recovered: ");
+//                for (com.google.gson.JsonElement jsonElement : jsonElements) {
+//                    //报警推送消息全部打印。具体参数解释请看接口文档http://docs.flexem.net/fbox/zh-cn/tutorials/AlarmReductionPush.html
+//                    System.out.println("\t" + jsonElement);
+//                };
+//                //打印报警条目的值集合
+//                System.out.printf("%s",jsonElements[1].getAsJsonArray());
+//                //打印boxUid
+//                System.out.printf("%s",jsonElements[2].getAsLong());
+//            });
+//        });
+
+        // signalr盒子状态变更事件
+//        hubProxy.subscribe("boxConnStateChanged").addReceivedHandler(jsonElements -> {
+//            Global.threadPool.submit(() -> {
+//                System.out.println("Box state changed.");
+//                if (jsonElements.length <= 0)
+//                    return;
+//                BoxStateChanged[] stateChanges = gson.fromJson(jsonElements[0], BoxStateChanged[].class);
+//                this.logger.logInformation(String.format("receive count: %d", stateChanges.length));
+//                for (BoxStateChanged stateChange : stateChanges) {
+//                    // stateChange.id 是盒子列表中BoxReg对象下的box.id,可以根据这个过滤要开的盒子。
+//                    // stateChange.state 为1、2是盒子上线事件。实时数据推送需要开点
+//                    if (stateChange.state == 1 || stateChange.state == 2) {
+//                            try {
+//                                // 盒子每次上线后,均需要开启FBox数据推送控制接口(订阅)
+//                                Global.commServer.executePost("box/" + stateChange.id + "/dmon/start", String.class);
+//                                // token有效期为两小时。若token过期,demo会自动刷新token。所以返回401后均需要重试接口
+//                                this.logger.logInformation(String.format("Start dmon points on box ok %s\n",stateChange.id));
+//                            } catch (IOException e) {
+//                                System.out.println(e);
+//                                e.printStackTrace();
+//                            }
+//                    }
+//                }
+//
+//            });
+//        });
+    }
+}

+ 45 - 0
huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/sgd/Global.java

@@ -0,0 +1,45 @@
+package com.huimv.eco.sgd;
+
+
+import com.huimv.eco.sgd.fbox.ServerCaller;
+
+import java.net.Proxy;
+import java.util.UUID;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+
+public class Global {
+    public static Proxy proxy = null;
+//    配置流量过Fiddler代理
+//    public static Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("127.0.0.1", 8888));
+    public static ExecutorService threadPool = Executors.newCachedThreadPool();
+    public static ServerCaller commServer;
+    public static ServerCaller appServer;
+    public static ServerCaller hdataServer;
+    public static ServerCaller apiBaseServer;
+
+    // 以下服务器地址是繁易公有云,私有云请根据实际情况修改
+//    public static final String idServerUrl = "https://account.flexem.com/core/";
+//    public static String appServerApiUrl = "http://fbox360.com/api/client/";
+//    public static final String commServerApiUrl = "http://fbcs101.fbox360.com/api/";
+//    public static final String commServerSignalRUrl = "http://fbcs101.fbox360.com/push";
+//    public static String hdataServerApiUrl = "http://fbhs1.fbox360.com/api/";
+
+    public static final String idServerUrl = "http://account.highgerman.cn/core/";
+    public static String appServerApiUrl = "http://cloud.highgerman.cn/";
+    public static final String commServerApiUrl = "http://cs.highgerman.cn/api/";
+    public static final String commServerSignalRUrl = "http://cs.highgerman.cn/push";
+    public static String hdataServerApiUrl = "http://hs.highgerman.cn/api/";
+    public static String apiBaserUrl = "http://cs.highgerman.cn/api";
+    public static String signalrClientId = UUID.randomUUID().toString();
+
+
+    //FlexManager注册的账号
+    public static String username = "sgdsgd103";
+    public static String password = "sgdsgd123";
+    // 获取API账号请咨询对接的销售。
+    public static String clientId = "fboxsdkcc";
+    public static String clientSecret = "6f556f31d524498baa0fc8c8bcb99285";
+
+
+}

+ 215 - 0
huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/sgd/Main.java

@@ -0,0 +1,215 @@
+package com.huimv.eco.sgd;
+
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.json.JSONUtil;
+import com.huimv.eco.sgd.entity.Item;
+import com.huimv.eco.sgd.entity.Monitory;
+import com.huimv.eco.sgd.entity.MonitoryGetArgs;
+import com.huimv.eco.sgd.entity.MonitoryValue;
+import com.huimv.eco.sgd.fbox.ConsoleLoggerFactory;
+import com.huimv.eco.sgd.fbox.ServerCaller;
+import com.huimv.eco.sgd.fbox.StaticCredentialProvider;
+import com.huimv.eco.sgd.fbox.TokenManager;
+import com.huimv.eco.sgd.fbox.models.BoxGroup;
+import com.huimv.eco.sgd.fbox.models.BoxReg;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class Main {
+    private static final long SLEEP_TIME = 1000;
+
+    public static void main(String[] args) throws IOException, InterruptedException {
+        ConsoleLoggerFactory loggerFactory = new ConsoleLoggerFactory();
+        // 指定连接服务器的凭据参数
+        TokenManager tokenManager = new TokenManager(new StaticCredentialProvider(Global.clientId, Global.clientSecret, Global.username, Global.password), Global.idServerUrl, loggerFactory);
+        ServerCaller appServer = new ServerCaller(tokenManager, Global.appServerApiUrl, Global.signalrClientId, loggerFactory);
+        ServerCaller apiBaseServer = new ServerCaller(tokenManager, Global.apiBaserUrl, Global.signalrClientId, loggerFactory);
+        Global.appServer = appServer;
+        Global.apiBaseServer = apiBaseServer;
+
+        BoxGroup[] boxGroups = appServer.executeGet("api/client/box/grouped", BoxGroup[].class);
+        // 返回的是 盒子分组-盒子注册项(BoxReg) 的二层结构
+        List<Map> list = new ArrayList();
+        for (BoxGroup group : boxGroups) {
+            //盒子
+            for (BoxReg boxReg : group.boxRegs) {
+                if (boxReg.alias.contains("环控")){
+                    Monitory[] monitories = apiBaseServer.executeGet("/v2/box/" + boxReg.boxUid + "/dmon/grouped", Monitory[].class);
+                    //每个监控点
+                    List<Map> groupnames = new ArrayList();
+                    for (Monitory monitory : monitories) {
+//                        System.out.println("监控点------------->" + monitory.toString());
+                       List names = new ArrayList();
+                        for (Item item : monitory.items) {
+                            String name = item.name;
+                            if ( monitory.name.contains("每个房间") && name != null ) {
+                                if (name.contains("平均温度") || name.contains("湿度") ||name.contains("日用水量") ||name.contains("月用水量")  ) {
+                                    names.add(name);
+                                }
+                            }
+
+                        }
+                                              Map map = new HashMap();
+
+                        if (ObjectUtil.isNotEmpty(names)) {
+                            MonitoryValue[] monitoryValues = apiBaseServer.executePost("/v2/box/" + boxReg.boxUid + "/dmon/value/get", new MonitoryGetArgs(names, null, new ArrayList()), MonitoryValue[].class);
+                            StringBuilder str = new StringBuilder();
+                            for (MonitoryValue monitoryValue : monitoryValues) {
+                                if (ObjectUtil.isNotEmpty(monitory)) {
+                                    str.append(JSONUtil.toJsonStr(monitoryValue));
+                                }
+
+                            }
+                            map.put("monitoryValues", str);
+                            map.put("grpName", monitory.name);
+//                        map.put("names",names);
+                            groupnames.add(map);
+                        }
+                    }
+
+                    if (ObjectUtil.isNotEmpty(groupnames)){
+                        Map map = new HashMap();
+                        map.put("name",boxReg.alias);
+                        map.put("groupnames",groupnames);
+
+                        list.add(map);
+                    }
+                }
+            }
+        }
+
+        for (Map map : list) {
+            System.out.println(map.get("name")+"----->"+map.get("groupnames"));
+        }
+
+
+    }
+
+
+
+
+   /* private static final long SLEEP_TIME = 3000;
+    public static void main(String[] args) {
+
+        ConsoleLoggerFactory loggerFactory = new ConsoleLoggerFactory();
+
+        // 指定连接服务器的凭据参数
+        TokenManager tokenManager = new TokenManager(new StaticCredentialProvider(Global.clientId, Global.clientSecret, Global.username, Global.password), Global.idServerUrl, loggerFactory);
+
+        ServerCaller commServer = new ServerCaller(tokenManager, Global.commServerApiUrl, Global.signalrClientId, loggerFactory);
+        ServerCaller appServer = new ServerCaller(tokenManager, Global.appServerApiUrl, Global.signalrClientId, loggerFactory);
+        ServerCaller hdataServer = new ServerCaller(tokenManager, Global.hdataServerApiUrl, Global.signalrClientId, loggerFactory);
+
+        Global.commServer = commServer;
+        Global.appServer = appServer;
+        Global.hdataServer = hdataServer;
+
+        //建立signalr实例,signalr为单例模式
+        FBoxSignalRConnection fboxSignalR = new FBoxSignalRConnection(Global.commServerSignalRUrl, Global.signalrClientId, tokenManager, Global.proxy, loggerFactory);
+
+        // 连接SignalR推送通道
+        fboxSignalR.start();
+//        fboxSignalR.onHubProxyCreated();
+        // signalr连上后,请看src/main/java/FBoxSignalRConnection.java 接受推送数据的回调类。
+
+        System.out.println("Box list:");
+//        try {
+//以下为调接口示例,可忽略,若使用,参数请根据文档填写自己的账号下的参数
+
+        // 获取盒子列表接口示例,可忽略
+        try {
+            BoxGroup[] boxGroups = Global.appServer.executeGet("api/client/box/grouped", BoxGroup[].class);
+            // 返回的是 盒子分组-盒子注册项(BoxReg) 的二层结构
+//            for (BoxGroup group : boxGroups) {
+//                for (BoxReg boxReg : group.boxRegs) {
+//                    System.out.printf("\t%s\t%s\t%s\n", boxReg.alias, boxReg.box.boxNo, boxReg.box.boxType);
+//                }
+//            }
+//            commServer.executePost("box/300220120152/dmon/start", Object.class);
+            for (BoxGroup boxGroup : boxGroups) {
+                for (BoxReg boxReg : boxGroup.boxRegs) {
+                    commServer.executePost("box/" + boxReg.boxUid +"/dmon/start", Object.class);
+                    Thread.sleep(1000);
+                }
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+//        try {
+//            JsonObject jsonObject = commServer.executePost("dmon/222171502968050130/start", JsonObject.class);
+//        } catch (IOException e) {
+//            System.out.println("调用失败!");
+//            e.printStackTrace();
+//        }
+
+//        try {
+//            commServer.executePost("box/-6025651360718913057/dmon/start", Object.class);
+//        } catch (Exception e) {
+//            System.out.println("500");
+//            e.printStackTrace();
+//        }
+        System.out.println("测试");
+
+
+
+//
+//            // 获取按通道的数据接口示例 (数组第1维是固定两个元素时间和值,第2维是单个通道的所有数据,第3维是请求的每个通道)
+//            Object[][][] result =
+////                    String  result =
+//                    Global.hdataServer.executePost(String.format("v2/hdata/get"),
+//                            new GetByChannelHdataArgs(channelIds, new Date().getTime() - 7 * 86400000, new Date().getTime(), -100, 3),
+////                    String.class);
+//                            Object[][][].class);
+//
+//            System.out.println(result);
+//
+//            SimpleDateFormat dateFormatter = new SimpleDateFormat("yyyyMMdd");
+//
+//            for (int i = 0; i < result.length; i++) {
+//                Object[][] channel = result[i];
+//                System.out.print("Channel " + channelNames.get(i));
+//                for (Object[] datum : channel) {
+//                    System.out.printf("(%s: %s)", dateFormatter.format(new Date(Math.round((double) datum[0]))), datum[1]);
+//                }
+//                System.out.println();
+//            }
+//
+//            //获取按行的数据接口示例(每行固定有通道个数个数据,如果这行的时间某些通道没有值,则为null)
+//            ByRowHdata result2 =
+////            String result2 =
+//                    Global.hdataServer.executePost(String.format("v2/hdata/get"),
+//                            new GetByRowHdataArgs(channelIds, new Date().getTime() - 7 * 86400000, new Date().getTime(), -100, 3),
+////                            String.class);
+//                            ByRowHdata.class);
+////            System.out.println(result2);
+//
+//            for (ByRowHdataRow row : result2.rows) {
+//                System.out.print(dateFormatter.format(row.getTime()) + ": ");
+//                Object[] c = row.c;
+//                for (int i = 0; i < c.length; i++) {
+//                    Object value = c[i];
+//                    if (i == 0) {
+//                        System.out.printf("%s", value);
+//                    } else {
+//                        System.out.printf(",%s", value);
+//                    }
+//                }
+//                System.out.println();
+//            }
+
+
+//        } catch (IOException e) {
+//            e.printStackTrace();
+//        }
+//
+//
+//        Scanner s = new Scanner(System.in);
+//        s.nextLine();
+    }*/
+
+
+}

+ 24 - 0
huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/sgd/entity/Item.java

@@ -0,0 +1,24 @@
+package com.huimv.eco.sgd.entity;
+
+
+public class Item {
+
+    public String id;
+
+    public String name;
+
+    public String devAlias;
+
+    public String dataType;
+    public String grpName;
+
+    @Override
+    public String toString() {
+        return "Items{" +
+                "id='" + id + '\'' +
+                ", name='" + name + '\'' +
+                ", devAlias='" + devAlias + '\'' +
+                ", dataType='" + dataType + '\'' +
+                '}';
+    }
+}

+ 20 - 0
huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/sgd/entity/Monitory.java

@@ -0,0 +1,20 @@
+package com.huimv.eco.sgd.entity;
+
+
+import java.util.Arrays;
+
+public class Monitory {
+    public String id;
+    public String name;
+    public Item[] items;
+
+
+    @Override
+    public String toString() {
+        return "Monitory{" +
+                "id='" + id + '\'' +
+                ", name='" + name + '\'' +
+                ", items=" + Arrays.toString(items) +
+                '}';
+    }
+}

+ 27 - 0
huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/sgd/entity/MonitoryGetArgs.java

@@ -0,0 +1,27 @@
+package com.huimv.eco.sgd.entity;
+
+
+import java.util.List;
+
+public class MonitoryGetArgs {
+    public List names;
+    public Long timeOut;
+    public List groupnames;
+    public MonitoryGetArgs() {
+    }
+    public MonitoryGetArgs(List names, Long timeOut, List groupnames) {
+        this.names = names;
+        this.timeOut = timeOut;
+        this.groupnames = groupnames;
+    }
+
+
+    @Override
+    public String toString() {
+        return "Test{" +
+                "names=" + names +
+                ", timeOut=" + timeOut +
+                ", groupnames=" + groupnames +
+                '}';
+    }
+}

+ 122 - 0
huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/sgd/entity/MonitoryValue.java

@@ -0,0 +1,122 @@
+package com.huimv.eco.sgd.entity;
+
+
+import java.util.Date;
+
+public class MonitoryValue {
+
+    //监控点id
+    private String id;
+
+    //时间戳,由于从缓存里拉的数据,所以需要时间戳来判断是否已经过期,UTC 时间
+    private Date timestamp;
+
+    //数据类型,见附录二
+    private int dataType;
+
+    //值
+    private Object value;
+
+    //监控点名称
+    private String name;
+
+    //盒子id
+    private long boxId;
+
+    //监控点状态,0:正常,1:无数据,2:超时,3:错误,4:Socket 异常,5:FDS 错误,16:未完成
+    private int status;
+
+    //盒子连接状态, 0:未知 , 1:已连接 ,2:超时, 3:断开
+    private int connState;
+
+    //盒子的上线时间
+    private Date connStateTimestamp ;
+
+
+    public String getId() {
+        return id;
+    }
+
+    public void setId(String id) {
+        this.id = id;
+    }
+
+    public Date getTimestamp() {
+        return timestamp;
+    }
+
+    public void setTimestamp(Date timestamp) {
+        this.timestamp = timestamp;
+    }
+
+    public int getDataType() {
+        return dataType;
+    }
+
+    public void setDataType(int dataType) {
+        this.dataType = dataType;
+    }
+
+    public Object getValue() {
+        return value;
+    }
+
+    public void setValue(Object value) {
+        this.value = value;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public long getBoxId() {
+        return boxId;
+    }
+
+    public void setBoxId(long boxId) {
+        this.boxId = boxId;
+    }
+
+    public int getStatus() {
+        return status;
+    }
+
+    public void setStatus(int status) {
+        this.status = status;
+    }
+
+    public int getConnState() {
+        return connState;
+    }
+
+    public void setConnState(int connState) {
+        this.connState = connState;
+    }
+
+    public Date getConnStateTimestamp() {
+        return connStateTimestamp;
+    }
+
+    public void setConnStateTimestamp(Date connStateTimestamp) {
+        this.connStateTimestamp = connStateTimestamp;
+    }
+
+    @Override
+    public String toString() {
+        return "MonitoryValue{" +
+                "id='" + id + '\'' +
+                ", timestamp=" + timestamp +
+                ", dataType=" + dataType +
+                ", value=" + value +
+                ", name='" + name + '\'' +
+                ", boxId=" + boxId +
+                ", status=" + status +
+                ", connState=" + connState +
+                ", connStateTimestamp=" + connStateTimestamp +
+                '}';
+    }
+}

+ 18 - 0
huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/sgd/fbox/BoxServerResponseException.java

@@ -0,0 +1,18 @@
+package com.huimv.eco.sgd.fbox;
+
+import org.apache.http.client.HttpResponseException;
+
+public class BoxServerResponseException extends HttpResponseException {
+    public BoxServerResponseException(int statusCode, String s) {
+        super(statusCode, s);
+    }
+
+    public BoxServerResponseException(int statusCode, String s, int errCode) {
+        super(statusCode, s);
+        this.errCode = errCode;
+    }
+
+    public int errCode;
+
+
+}

+ 18 - 0
huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/sgd/fbox/ClientCredential.java

@@ -0,0 +1,18 @@
+package com.huimv.eco.sgd.fbox;
+
+public class ClientCredential {
+    public ClientCredential(String clientId, String clientSecret) {
+        this.clientId = clientId;
+        this.clientSecret = clientSecret;
+    }
+
+    /// <summary>
+    /// API账号
+    /// </summary>
+    public String clientId;
+
+    /// <summary>
+    /// API secret
+    /// </summary>
+    public String clientSecret;
+}

+ 34 - 0
huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/sgd/fbox/ConsoleLogger.java

@@ -0,0 +1,34 @@
+package com.huimv.eco.sgd.fbox;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+public class ConsoleLogger implements Logger {
+    private final String name;
+    private final SimpleDateFormat formatter;
+
+    ConsoleLogger(String name) {
+        this.formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        this.name = name;
+    }
+
+    @Override
+    public void logInformation(String msg) {
+        System.out.println(formatter.format(new Date()) + " [Info ][" + name + "] " + msg);
+    }
+
+    @Override
+    public void logWarning(String msg) {
+        System.out.println(formatter.format(new Date()) + " [Warn ][" + name + "] " + msg);
+    }
+
+    @Override
+    public void logError(String msg) {
+        System.out.println(formatter.format(new Date()) + " [Error][" + name + "] " + msg);
+    }
+
+    @Override
+    public void logTrace(String msg) {
+        System.out.println(formatter.format(new Date()) + " [Trace][" + name + "] " + msg);
+    }
+}

+ 12 - 0
huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/sgd/fbox/ConsoleLoggerFactory.java

@@ -0,0 +1,12 @@
+package com.huimv.eco.sgd.fbox;
+
+public class ConsoleLoggerFactory implements LoggerFactory {
+    @Override
+    public Logger createLogger(String name) {
+        if (name == "FBoxSignalRConnection" || name == "SignalRConnectionBase" || name == "ServerCaller") {
+            return new ConsoleLogger(name);
+        }
+
+        return new NullLogger();
+    }
+}

+ 17 - 0
huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/sgd/fbox/CredentialProvider.java

@@ -0,0 +1,17 @@
+package com.huimv.eco.sgd.fbox;
+
+public interface CredentialProvider {
+
+    /// <summary>
+    /// 获取用户密钥信息
+    /// </summary>
+    /// <returns></returns>
+    ClientCredential getClientCredential();
+
+    /// <summary>
+    /// 获取用户信息
+    /// </summary>
+    /// <returns></returns>
+    UserCredential getUserCredential();
+
+}

+ 10 - 0
huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/sgd/fbox/Logger.java

@@ -0,0 +1,10 @@
+package com.huimv.eco.sgd.fbox;
+
+public interface Logger{
+    void logInformation(String msg);
+    void logWarning(String msg);
+    void logError(String msg);
+    void logTrace(String msg);
+}
+
+

+ 5 - 0
huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/sgd/fbox/LoggerFactory.java

@@ -0,0 +1,5 @@
+package com.huimv.eco.sgd.fbox;
+
+public interface LoggerFactory {
+    Logger createLogger(String name);
+}

+ 9 - 0
huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/sgd/fbox/LoginFailedException.java

@@ -0,0 +1,9 @@
+package com.huimv.eco.sgd.fbox;
+
+import org.apache.http.client.HttpResponseException;
+
+public class LoginFailedException extends HttpResponseException {
+    public LoginFailedException(int statusCode, String s) {
+        super(statusCode, s);
+    }
+}

+ 23 - 0
huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/sgd/fbox/NullLogger.java

@@ -0,0 +1,23 @@
+package com.huimv.eco.sgd.fbox;
+
+public class NullLogger implements Logger {
+    @Override
+    public void logInformation(String msg) {
+        
+    }
+
+    @Override
+    public void logWarning(String msg) {
+
+    }
+
+    @Override
+    public void logError(String msg) {
+
+    }
+
+    @Override
+    public void logTrace(String msg) {
+
+    }
+}

+ 301 - 0
huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/sgd/fbox/ServerCaller.java

@@ -0,0 +1,301 @@
+package com.huimv.eco.sgd.fbox;
+
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import com.google.gson.JsonSyntaxException;
+import org.apache.http.*;
+import org.apache.http.client.HttpResponseException;
+import org.apache.http.client.ServiceUnavailableRetryStrategy;
+import org.apache.http.client.methods.*;
+import org.apache.http.client.protocol.HttpClientContext;
+import org.apache.http.entity.ContentType;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClientBuilder;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.impl.client.cache.CacheConfig;
+import org.apache.http.impl.client.cache.ExponentialBackOffSchedulingStrategy;
+import org.apache.http.message.BasicHeader;
+import org.apache.http.protocol.BasicHttpContext;
+import org.apache.http.protocol.HttpContext;
+import org.apache.http.util.EntityUtils;
+
+import javax.net.ssl.SSLException;
+import java.io.IOException;
+import java.io.InterruptedIOException;
+import java.net.MalformedURLException;
+import java.net.SocketException;
+import java.net.URI;
+import java.net.UnknownHostException;
+import java.util.ArrayList;
+import java.util.Iterator;
+
+public class ServerCaller {
+    private static final long RETRY_SLEEP_TIME_MILLIS = 2000;
+    private static ArrayList<Class<?>> exceptionWhitelist = new ArrayList<>();
+    private static ArrayList<Class<?>> exceptionBlacklist = new ArrayList<>();
+
+    static {
+        // Retry if the server dropped connection on us
+        exceptionWhitelist.add(NoHttpResponseException.class);
+        // retry-this, since it may happens as part of a Wi-Fi to 3G failover
+        exceptionWhitelist.add(UnknownHostException.class);
+        // retry-this, since it may happens as part of a Wi-Fi to 3G failover
+        exceptionWhitelist.add(SocketException.class);
+
+        // never retry timeouts
+        exceptionBlacklist.add(InterruptedIOException.class);
+        // never retry SSL handshake failures
+        exceptionBlacklist.add(SSLException.class);
+    }
+
+    private final String baseUrl;
+    private final String signalrClientId;
+    private final Gson gson;
+    private final Logger logger;
+    private CloseableHttpClient http;
+    private TokenManager tokenManager;
+    private String accessToken;
+    private int maxRetries = 30;
+
+    public ServerCaller(TokenManager tokenManager, LoggerFactory loggerFactory) throws MalformedURLException {
+        this(tokenManager, null, null, loggerFactory);
+    }
+
+    public ServerCaller(TokenManager tokenManager, String signalrClientId, LoggerFactory loggerFactory) {
+        this(tokenManager, null, signalrClientId, null, null, loggerFactory);
+    }
+
+    public ServerCaller(TokenManager tokenManager, String baseUrl, String signalrClientId, LoggerFactory loggerFactory) {
+        this(tokenManager, baseUrl, signalrClientId, null, null, loggerFactory);
+    }
+
+    public ServerCaller(TokenManager tokenManager, String baseUrl, String signalrClientId, CloseableHttpClient http, HttpHost proxy, LoggerFactory loggerFactory) {
+        logger = loggerFactory.createLogger("ServerCaller");
+        this.baseUrl = baseUrl;
+        this.tokenManager = tokenManager;
+        this.signalrClientId = signalrClientId;
+        this.http = http;
+
+        this.gson = new GsonBuilder().create();
+
+        ArrayList<Header> headers = new ArrayList<>();
+        if (signalrClientId != null) {
+            headers.add(new BasicHeader("X-FBox-ClientId", signalrClientId));
+        }
+
+        if (http == null) {
+            CacheConfig cc = CacheConfig.DEFAULT;
+            ExponentialBackOffSchedulingStrategy ebo = new ExponentialBackOffSchedulingStrategy(cc);
+
+            HttpClientBuilder httpBuilder = HttpClients.custom()
+                    .setDefaultHeaders(headers).setServiceUnavailableRetryStrategy(new ServiceUnavailableRetryStrategy() {
+                        @Override
+                        public boolean retryRequest(HttpResponse response, int executionCount, HttpContext context) {
+                            if (executionCount > maxRetries)
+                                return false;
+                            if (response == null) {
+                                return false;
+                            }
+                            if (response.getStatusLine()== null) {
+                                return false;
+                            }
+                            switch (response.getStatusLine().getStatusCode()) {
+//                                case 401:
+//                                    Object otm = context.getAttribute("ServerCaller");
+//                                    if (otm == null)
+//                                        return false;
+//
+//                                    ServerCaller tm = (ServerCaller) otm;
+//                                    try {
+//                                        tm.accessToken = tm.tokenManager.getOrUpdateToken(tm.accessToken);
+//                                    } catch (IOException e) {
+//                                        System.err.printf("Error fetching token in service unavailable retry logic %s.\n", e.toString());
+//                                        return true;
+//                                    }
+//
+//                                    HttpClientContext clientContext = HttpClientContext.adapt(context);
+//                                    clientContext.getRequest().setHeader("Authorization", "Bearer " + tm.accessToken);
+//                                    return true;
+
+                                case HttpStatus.SC_BAD_GATEWAY:
+                                case HttpStatus.SC_SERVICE_UNAVAILABLE:
+                                    return true;
+                                default:
+                                    return false;
+                            }
+                        }
+
+                        @Override
+                        public long getRetryInterval() {
+                            return 1000;
+                        }
+                    })
+                    .setRetryHandler((exception, executionCount, context) -> {
+                        if (exception != null) {
+                            System.err.printf("Retrying due to %s.\n", exception.toString());
+                        }
+                        if (executionCount > maxRetries) {
+                            // Do not retry if over max retry count
+                            System.err.printf("Maxmimum retry count reached.\n");
+                            return false;
+                        } else if (isInList(exceptionBlacklist, exception)) {
+                            // immediately cancel retry if the error is blacklisted
+                            return false;
+                        } else if (isInList(exceptionWhitelist, exception)) {
+                            // immediately retry if error is whitelisted
+                        }
+
+                        HttpClientContext clientContext = HttpClientContext.adapt(context);
+                        if (clientContext == null) {
+                            return true;
+                        }
+
+                        HttpRequest request = clientContext.getRequest();
+                        if (request == null) {
+                            return true;
+                        }
+
+                        HttpResponse response = clientContext.getResponse();
+                        if (response == null) {
+                            return true;
+                        }
+                        StatusLine statusLine = response.getStatusLine();
+
+                        if (statusLine != null && statusLine.getStatusCode() == 401) {
+                            try {
+                                System.err.println("ServerCaller: try get another token for " + request.toString());
+                                this.accessToken = this.tokenManager.getOrUpdateToken(this.accessToken);
+                                request.setHeader("Authorization", "Bearer " + this.accessToken);
+                                return true;
+                            } catch (IOException e) {
+                                System.err.printf("Error fetching token in retry logic %s.\n", e.toString());
+                            }
+                        } else {
+
+                        }
+
+                        try {
+                            Thread.sleep(RETRY_SLEEP_TIME_MILLIS);
+                        } catch (InterruptedException e) {
+                        }
+                        return true;
+                    });
+            if (proxy != null)
+                httpBuilder = httpBuilder.setProxy(proxy);
+            this.http = httpBuilder.build();
+        }
+    }
+
+    protected boolean isInList(ArrayList<Class<?>> list, Throwable error) {
+        Iterator<Class<?>> itr = list.iterator();
+        while (itr.hasNext()) {
+            if (itr.next().isInstance(error)) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    public <T> T executeGet(String url, Class<T> responseType) throws IOException {
+        HttpGet request;
+        request = new HttpGet(baseUrl + url);
+        return executeCore(request, responseType);
+    }
+
+    public <T> T executePost(String url, Class<T> responseType) throws IOException {
+        return executePost(url, null, responseType);
+    }
+
+    public <T> T executePost(String url, Object entity, Class<T> responseType) throws IOException {
+        HttpPost request;
+        request = new HttpPost(baseUrl + url);
+        if (entity != null) {
+            String str = gson.toJson(entity);
+            request.setEntity(new StringEntity(str, ContentType.APPLICATION_JSON));
+        }
+        return executeCore(request, responseType);
+    }
+
+    public <T> T executePost(String url, HttpEntity body, Class<T> responseType) throws IOException {
+        HttpPost request;
+        request = new HttpPost(baseUrl + url);
+        if (body != null)
+            request.setEntity(body);
+        return executeCore(request, responseType);
+    }
+
+    public <T> T executePut(String url, HttpEntity body, Class<T> responseType) throws IOException {
+        HttpPut request;
+        request = new HttpPut(baseUrl + url);
+        request.setEntity(body);
+        return executeCore(request, responseType);
+    }
+
+    public <T> T executeDelete(String url, Class<T> responseType) throws IOException {
+        HttpDelete request;
+        request = new HttpDelete(baseUrl + url);
+        return executeCore(request, responseType);
+    }
+
+    private <T> T executeCore(HttpUriRequest request, Class<T> responseType) throws IOException {
+        if (this.accessToken == null) {
+            this.accessToken = this.tokenManager.getOrUpdateToken(this.accessToken);
+        }
+        request.setHeader("Authorization", "Bearer " + this.accessToken);
+        request.addHeader("Accept", "application/json; */*");
+        for (; ; ) {
+            String method = request.getMethod();
+            URI uri = request.getURI();
+         //   this.logger.logTrace(String.format("Executing request %s %s", method, uri));
+            CloseableHttpResponse response = null;
+            BasicHttpContext ctx = new BasicHttpContext();
+            ctx.setAttribute("ServerCaller", this);
+            try {
+                response = this.http.execute(request, ctx);
+            } catch (IOException e) {
+                System.err.printf("Request failed with error: %s.\n", e.toString());
+                throw e;
+            }
+            try {
+                StatusLine statusLine = response.getStatusLine();
+                if (statusLine == null)
+                    throw new HttpResponseException(0, "Null status line.");
+                int statusCode = statusLine.getStatusCode();
+              //  this.logger.logTrace(String.format("Executed request %s %s with code %d", method, uri, statusCode));
+                if (statusCode == 401) {
+//                    throw new HttpResponseException(401, "Unauthorized request");
+                    this.logger.logTrace("ServerCaller: 401 from " + request.getURI().toString());
+                    this.accessToken = this.tokenManager.getOrUpdateToken(this.accessToken);
+                    request.setHeader("Authorization", "Bearer " + this.accessToken);
+                    continue;
+                } else if (statusCode >= 300) {
+                    String exmsg = statusLine.getReasonPhrase();
+                    Header errCodeHeader = response.getFirstHeader("X-FBox-Code");
+                    int errCode = 0;
+                    if (errCodeHeader != null) {
+                        errCode = Integer.parseInt(errCodeHeader.getValue());
+                        exmsg += " code=" + errCode;
+                    }
+                    throw new BoxServerResponseException(statusCode, exmsg, errCode);
+                }
+                HttpEntity body = response.getEntity();
+                if (body != null && responseType != null) {
+                    String str = EntityUtils.toString(body);
+                    try {
+                        return gson.fromJson(str, responseType);
+                    } catch (JsonSyntaxException ex) {
+                        if (responseType.isAssignableFrom(String.class))
+                            return (T) str;
+                        else
+                            throw new IllegalArgumentException("Response cannot be parsed to " + responseType.toString() + " contentType is " + body.getContentType());
+                    }
+                }
+//                this.logger.logTrace(String.format("Request %s %s returned with empty body.", method, uri));
+                return null;
+            } finally {
+                response.close();
+            }
+        }
+    }
+}

+ 21 - 0
huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/sgd/fbox/StaticCredentialProvider.java

@@ -0,0 +1,21 @@
+package com.huimv.eco.sgd.fbox;
+
+public class StaticCredentialProvider implements CredentialProvider {
+    private final ClientCredential clientCred;
+    private final UserCredential userCred;
+
+    public StaticCredentialProvider(String clientId, String clientSecret, String userName, String password) {
+        this.clientCred = new ClientCredential(clientId, clientSecret);
+        this.userCred = new UserCredential(userName, password);
+    }
+
+    @Override
+    public ClientCredential getClientCredential() {
+        return clientCred;
+    }
+
+    @Override
+    public UserCredential getUserCredential() {
+        return userCred;
+    }
+}

+ 132 - 0
huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/sgd/fbox/TokenManager.java

@@ -0,0 +1,132 @@
+package com.huimv.eco.sgd.fbox;
+
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import org.apache.http.HttpEntity;
+import org.apache.http.NameValuePair;
+import org.apache.http.StatusLine;
+import org.apache.http.client.ClientProtocolException;
+import org.apache.http.client.HttpResponseException;
+import org.apache.http.client.config.RequestConfig;
+import org.apache.http.client.entity.UrlEncodedFormEntity;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.entity.ContentType;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.message.BasicNameValuePair;
+
+import java.io.Closeable;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.Reader;
+import java.nio.charset.Charset;
+import java.util.ArrayList;
+import java.util.List;
+
+public class TokenManager implements Closeable {
+    private final CredentialProvider credentialProvider;
+    private final Object tokenLock;
+    private final Gson gson;
+    private final Logger logger;
+    private CloseableHttpClient http;
+    private final String idSvrUrl;
+
+    public TokenManager(CredentialProvider credentialProvider, LoggerFactory loggerFactory) {
+        this(credentialProvider, "https://account.flexem.com/core/", loggerFactory);
+    }
+
+    public TokenManager(CredentialProvider credentialProvider, String idSvrUrl, LoggerFactory loggerFactory) {
+        this(credentialProvider, idSvrUrl, null, loggerFactory);
+    }
+
+    public TokenManager(CredentialProvider credentialProvider, String idSvrUrl, CloseableHttpClient http, LoggerFactory loggerFactory) {
+        this.logger = loggerFactory.createLogger("TokenManager");
+        this.idSvrUrl = idSvrUrl;
+        this.credentialProvider = credentialProvider;
+        this.tokenLock = new Object();
+        this.http = http;
+        if (http == null) {
+            this.http = HttpClients.createDefault();
+        }
+        this.gson = new GsonBuilder().create();
+    }
+
+    private String accessToken;
+
+    public String getOrUpdateToken(String currentToken) throws IOException {
+        if (currentToken == null) {
+            String at = accessToken;
+            if (at != null)
+                return at;
+        }
+
+        synchronized (tokenLock) {
+            String at = accessToken;
+            if (at != null && at != currentToken)
+                return at;
+
+            at = fetchToken();
+            accessToken = at;
+            return at;
+        }
+    }
+
+    private String fetchToken() throws IOException {
+        ClientCredential clientCredential = credentialProvider.getClientCredential();
+        UserCredential userCredential = credentialProvider.getUserCredential();
+        // 登录接口,用于获取access_Token,access_Token有效期2小时
+        HttpPost request = new HttpPost(idSvrUrl + "connect/token");
+        List<NameValuePair> formparams = new ArrayList<NameValuePair>();
+        formparams.add(new BasicNameValuePair("username", userCredential.userName));
+        formparams.add(new BasicNameValuePair("password", userCredential.password));
+        formparams.add(new BasicNameValuePair("scope", "openid offline_access fbox email profile"));
+        formparams.add(new BasicNameValuePair("client_id", clientCredential.clientId));
+        formparams.add(new BasicNameValuePair("client_secret", clientCredential.clientSecret));
+        formparams.add(new BasicNameValuePair("grant_type", "password"));
+        request.setEntity(new UrlEncodedFormEntity(formparams));
+        CloseableHttpResponse response = http.execute(request);
+        //401
+        final RequestConfig params = RequestConfig.custom().setConnectTimeout(8000).setSocketTimeout(8000).build();
+        request.setConfig(params);
+
+
+        try {
+            StatusLine statusLine = response.getStatusLine();
+            HttpEntity entity = response.getEntity();
+            int statusCode = statusLine.getStatusCode();
+            // the following status code range mostly caused by incorrect credential.
+            if (statusCode >= 400 && statusCode < 500 && statusCode != 429) {
+                throw new LoginFailedException(
+                        statusLine.getStatusCode(),
+                        statusLine.getReasonPhrase());
+            }
+            if (statusCode >= 300) {
+                throw new HttpResponseException(statusCode, statusLine.getReasonPhrase());
+            }
+            if (entity == null) {
+                throw new ClientProtocolException("Response contains no content");
+            }
+            ContentType contentType = ContentType.getOrDefault(entity);
+            Charset charset = contentType.getCharset();
+            Reader reader = new InputStreamReader(entity.getContent(), charset);
+            String at;
+            try {
+                at = (gson.fromJson(reader, TokenResponse.class)).access_token;
+            } finally {
+                reader.close();
+            }
+            this.logger.logTrace("Fetched new token.");
+            return at;
+        } finally {
+            response.close();
+        }
+    }
+
+    @Override
+    public void close() throws IOException {
+        if (this.http instanceof Closeable) {
+            ((Closeable) this.http).close();
+        }
+    }
+}

+ 5 - 0
huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/sgd/fbox/TokenResponse.java

@@ -0,0 +1,5 @@
+package com.huimv.eco.sgd.fbox;
+
+public class TokenResponse {
+    public String access_token;
+}

+ 18 - 0
huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/sgd/fbox/UserCredential.java

@@ -0,0 +1,18 @@
+package com.huimv.eco.sgd.fbox;
+
+public class UserCredential {
+    public UserCredential(String userName, String password) {
+        this.userName = userName;
+        this.password = password;
+    }
+
+    /// <summary>
+    /// 用户名
+    /// </summary>
+    public String userName;
+
+    /// <summary>
+    /// 密码
+    /// </summary>
+    public String password;
+}

+ 24 - 0
huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/sgd/fbox/models/Box.java

@@ -0,0 +1,24 @@
+package com.huimv.eco.sgd.fbox.models;
+
+public class Box {
+    public long id;
+    public String boxNo;
+    public int boxType;
+    public int connState;
+    public int net;
+    public int feat;
+    public Cs cs;
+
+    @Override
+    public String toString() {
+        return "Box{" +
+                "id=" + id +
+                ", boxNo='" + boxNo + '\'' +
+                ", boxType=" + boxType +
+                ", connState=" + connState +
+                ", net=" + net +
+                ", feat=" + feat +
+                ", cs=" + cs +
+                '}';
+    }
+}

+ 8 - 0
huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/sgd/fbox/models/BoxGroup.java

@@ -0,0 +1,8 @@
+package com.huimv.eco.sgd.fbox.models;
+
+public class BoxGroup {
+    public long id;
+    public String name;
+    public BoxReg[] boxRegs;
+}
+

+ 18 - 0
huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/sgd/fbox/models/BoxReg.java

@@ -0,0 +1,18 @@
+package com.huimv.eco.sgd.fbox.models;
+
+public class BoxReg {
+    public long id;
+    public String alias;
+    public String boxUid;
+    public Box box;
+
+    @Override
+    public String toString() {
+        return "BoxReg{" +
+                "id=" + id +
+                ", alias='" + alias + '\'' +
+                ", boxUid='" + boxUid + '\'' +
+                ", box=" + box +
+                '}';
+    }
+}

+ 7 - 0
huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/sgd/fbox/models/BoxStateChanged.java

@@ -0,0 +1,7 @@
+package com.huimv.eco.sgd.fbox.models;
+
+public class BoxStateChanged {
+    public long id;
+    public int state;
+    public int net;
+}

+ 5 - 0
huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/sgd/fbox/models/ByRowHdata.java

@@ -0,0 +1,5 @@
+package com.huimv.eco.sgd.fbox.models;
+
+public class ByRowHdata {
+    public ByRowHdataRow[] rows;
+}

+ 19 - 0
huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/sgd/fbox/models/ByRowHdataRow.java

@@ -0,0 +1,19 @@
+package com.huimv.eco.sgd.fbox.models;
+
+import java.util.Date;
+
+public class ByRowHdataRow {
+    /**
+     * 时间戳(1970-1-1以来的毫秒数)
+     */
+    public long t;
+
+    public Date getTime (){
+        return new Date(t);
+    }
+
+    /**
+     * 一行中每个单元格的值
+     */
+    public Object[] c;
+}

+ 13 - 0
huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/sgd/fbox/models/Cs.java

@@ -0,0 +1,13 @@
+package com.huimv.eco.sgd.fbox.models;
+
+
+public class Cs {
+    public String signalRUrl;
+
+    @Override
+    public String toString() {
+        return "Cs{" +
+                "signalRUrl='" + signalRUrl + '\'' +
+                '}';
+    }
+}

+ 53 - 0
huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/sgd/fbox/models/DataSource.java

@@ -0,0 +1,53 @@
+package com.huimv.eco.sgd.fbox.models;
+
+public class DataSource {
+    /**
+     * PLC别名
+     */
+    public String devAlias;
+
+    /**
+     * 站号
+     */
+    public int stationNo;
+
+    /**
+     * 数据类型
+     */
+    public int dataType;
+
+    /**
+     * 寄存器ID(与寄存器位宽联合使用)
+     */
+    public int regId;
+
+    /**
+     * 寄存器位宽 (与寄存器ID联合使用)
+     */
+    public int ioWidth;
+    /// <summary>
+    ///     寄存器名称
+    /// </summary>
+    public String regName;
+    /// <summary>
+    ///     主地址
+    /// </summary>
+    public int addr;
+    /// <summary>
+    ///     子地址
+    /// </summary>
+    public int subAddr;
+    /// <summary>
+    ///     数据块(DB块)
+    /// </summary>
+    public int addrBlk;
+    /// <summary>
+    /// 是否启用按位索引
+    /// </summary>
+    public boolean bitIndexEnabled;
+    /// <summary>
+    /// 按位索引号
+    /// </summary>
+    public int bitIndex;
+
+}

+ 76 - 0
huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/sgd/fbox/models/DataType.java

@@ -0,0 +1,76 @@
+package com.huimv.eco.sgd.fbox.models;//package fbox.models;
+//
+//public enum DataType {
+//        /// <summary>
+//        /// 位
+//        /// </summary>
+//        Bit(0),
+//
+//            /// <summary>
+//            /// 16位无符号
+//            /// </summary>
+//        UInt16 = 1,
+//
+//            /// <summary>
+//            /// 16位有符号
+//            /// </summary>
+//        Int16 = 2,
+//
+//            /// <summary>
+//            /// 16位BCD
+//            /// </summary>
+//        Bcd16 = 3,
+//
+//            /// <summary>
+//            /// 16位16进制
+//            /// </summary>
+//        Hex16 = 4,
+//
+//            /// <summary>
+//            /// 16位二进制
+//            /// </summary>
+//        Binary16 = 5,
+//
+//            /// <summary>
+//            /// 32位无符号
+//            /// </summary>
+//            [Description("32位无符号")]
+//        UInt32 = 11,
+//
+//            /// <summary>
+//            /// 32位有符号
+//            /// </summary>
+//            [Description("32位有符号")]
+//        Int32 = 12,
+//
+//            /// <summary>
+//            /// 32位BCD
+//            /// </summary>
+//            [Description("32位BCD")]
+//        Bcd32 = 13,
+//
+//            /// <summary>
+//            /// 32位16进制
+//            /// </summary>
+//            [Description("32位16进制")]
+//        Hex32 = 14,
+//
+//            /// <summary>
+//            /// 32位二进制
+//            /// </summary>
+//            [Description("32位二进制")]
+//        Binary32 = 15,
+//
+//            /// <summary>
+//            /// 单精度浮点
+//            /// </summary>
+//            [Description("单精度浮点")]
+//        Single = 16,
+//
+//            /// <summary>
+//            /// 字符串
+//            /// </summary>
+//            [Description("字符串")]
+//        String = 30,
+//    }
+//}

+ 14 - 0
huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/sgd/fbox/models/DmonWriteValueArgs.java

@@ -0,0 +1,14 @@
+package com.huimv.eco.sgd.fbox.models;
+
+public class DmonWriteValueArgs {
+    public DmonWriteValueArgs(String groupName, String name, String value) {
+        this.name = name;
+        this.value = value;
+        this.groupName = groupName;
+    }
+
+    public String name;
+    public int type = 0;
+    public String value;
+    public String groupName;
+}

+ 11 - 0
huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/sgd/fbox/models/GetByChannelHdataArgs.java

@@ -0,0 +1,11 @@
+package com.huimv.eco.sgd.fbox.models;
+
+import java.util.List;
+
+
+public class GetByChannelHdataArgs extends GetHdataArgs{
+    public GetByChannelHdataArgs(List<Long> ids, long begin, long end, int limit, int tr) {
+        super(1, ids, begin, end, limit, tr);
+    }
+}
+

+ 9 - 0
huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/sgd/fbox/models/GetByRowHdataArgs.java

@@ -0,0 +1,9 @@
+package com.huimv.eco.sgd.fbox.models;
+
+import java.util.List;
+
+public class GetByRowHdataArgs extends GetHdataArgs{
+    public GetByRowHdataArgs(List<Long> ids, long begin, long end, int limit, int tr) {
+        super(0, ids, begin, end, limit, tr);
+    }
+}

+ 9 - 0
huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/sgd/fbox/models/GetDmonValuesById.java

@@ -0,0 +1,9 @@
+package com.huimv.eco.sgd.fbox.models;
+
+public class GetDmonValuesById {
+    public GetDmonValuesById(long[] ids) {
+        this.ids = ids;
+    }
+
+    public long[] ids;
+}

+ 9 - 0
huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/sgd/fbox/models/GetDmonValuesByName.java

@@ -0,0 +1,9 @@
+package com.huimv.eco.sgd.fbox.models;
+
+public class GetDmonValuesByName {
+    public GetDmonValuesByName(String[] names) {
+        this.names = names;
+    }
+
+    public String[] names;
+}

+ 39 - 0
huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/sgd/fbox/models/GetHdataArgs.java

@@ -0,0 +1,39 @@
+package com.huimv.eco.sgd.fbox.models;
+
+import java.util.List;
+
+public class GetHdataArgs {
+    /**
+     * 通道ID列表
+     */
+    public List<Long> ids;
+    /**
+     * 开始时间(1970-1-1以来的毫秒数)
+     */
+    public long begin;
+    /**
+     * 结束时间(1970-1-1以来的毫秒数)
+     */
+    public long end;
+    /**
+     * 取值最大个数
+     * 正数表示从开始时间向结束时间取最多limit个,负值表示从结束时间向开始时间最多取limit个
+     */
+    public int limit;
+    /**
+     * 时间范围边界类型
+     * 0:全开区间, 1:左开右闭, 2: 左闭右开, 3:全闭区间
+     */
+    public int tr;
+
+    public int type;
+
+    public GetHdataArgs(int type, List<Long> ids, long begin, long end, int limit, int tr) {
+        this.ids = ids;
+        this.begin = begin;
+        this.end = end;
+        this.limit = limit;
+        this.tr = tr;
+        this.type = type;
+    }
+}

+ 33 - 0
huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/sgd/fbox/models/HdataChannelDef.java

@@ -0,0 +1,33 @@
+package com.huimv.eco.sgd.fbox.models;
+
+public class HdataChannelDef extends DataSource {
+    /**
+     * 通道ID
+     */
+    public long uid;
+
+    /**
+     * 通道名称
+     */
+    public String name;
+
+    /**
+     * 单位
+     */
+    public String unit;
+
+    /**
+     * 描述
+     */
+    public String desc;
+
+    /**
+     * 整数位
+     */
+    public int intDigits;
+
+    /**
+     * 小数位
+     */
+    public int fracDigits;
+}

+ 5 - 0
huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/sgd/fbox/models/HdataControlOptions.java

@@ -0,0 +1,5 @@
+package com.huimv.eco.sgd.fbox.models;
+
+public class HdataControlOptions extends DataSource {
+        public int ctrlType;
+}

+ 33 - 0
huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/sgd/fbox/models/HdataDef.java

@@ -0,0 +1,33 @@
+package com.huimv.eco.sgd.fbox.models;
+
+public class HdataDef {
+
+    public long uid;
+
+    /**
+     * 名称
+     */
+    public String name;
+
+    /**
+     * 采样时间
+     */
+    public int period;
+
+    /**
+     * 关联的盒子ID
+     */
+    public long boxId;
+
+    /**
+     * 是否使用使能设置
+     */
+    public boolean hasCtrl;
+
+    /**
+     * 使能控制详细配置
+     */
+    public HdataControlOptions ctrl;
+
+    public HdataChannelDef[] channels;
+}

+ 189 - 0
huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/sgd/fbox/signalr/SignalRConnectionBase.java

@@ -0,0 +1,189 @@
+package com.huimv.eco.sgd.fbox.signalr;
+
+import com.github.signalr4j.client.ConnectionState;
+import com.github.signalr4j.client.http.java.JavaHttpConnection;
+import com.github.signalr4j.client.hubs.HubConnection;
+import com.github.signalr4j.client.hubs.HubProxy;
+import com.github.signalr4j.client.transport.ServerSentEventsTransport;
+import com.huimv.eco.sgd.fbox.Logger;
+import com.huimv.eco.sgd.fbox.LoggerFactory;
+import com.huimv.eco.sgd.fbox.LoginFailedException;
+import com.huimv.eco.sgd.fbox.TokenManager;
+
+import java.io.IOException;
+import java.net.Proxy;
+import java.util.Date;
+import java.util.concurrent.Semaphore;
+import java.util.concurrent.TimeUnit;
+
+public abstract class SignalRConnectionBase {
+    private final Semaphore connectEvent;
+    private HubConnection hubConnection;
+    private HubProxy hubProxy;
+    private final Logger logger;
+    private final LoggerFactory loggerFactory;
+    private final SignalRLoggerWrapper javaconnLogger;
+    private final SignalRLoggerWrapper sseLogger;
+    private String hubUrl;
+    private String signalrClientId;
+    private Proxy proxy;
+    private TokenManager tokenManager;
+    private String accessToken;
+    private boolean shouldGetNewToken;
+    private int retryCount;
+    private long lastConnectedTime = 0;
+    private boolean reconnecting;
+    private boolean monitorStarted;
+
+    public SignalRConnectionBase(String hubUrl, String signalrClientId, TokenManager tokenManager, Proxy proxy, LoggerFactory loggerFactory) {
+        this.hubUrl = hubUrl;
+        this.signalrClientId = signalrClientId;
+        this.proxy = proxy;
+        this.loggerFactory = loggerFactory;
+        this.logger = loggerFactory.createLogger("SignalRConnectionBase");
+        this.sseLogger = new SignalRLoggerWrapper(this.loggerFactory.createLogger("ServerSentEventsTransport"));
+        this.javaconnLogger = new SignalRLoggerWrapper(this.loggerFactory.createLogger("SignalRTransportConnection"));
+        this.tokenManager = tokenManager;
+        this.connectEvent = new Semaphore(1);
+        new Thread(() -> {
+            try {
+                SignalRConnectWorker();
+            } catch (InterruptedException e) {
+                logger.logError("SignalR connect worker exited with " + e.toString());
+            }
+        }).start();
+    }
+
+    private void HookEvents() {
+        this.hubConnection.error(throwable -> onConnectionError(throwable));
+        this.hubConnection.reconnecting(() -> onReconnecting());
+        this.hubConnection.reconnected(() -> onReconnected());
+        this.hubConnection.closed(() -> onConnectionClosed());
+        this.hubConnection.connected(() -> connected());
+    }
+
+    private void UnhookEvents() {
+        this.hubConnection.error(null);
+        this.hubConnection.reconnecting(null);
+        this.hubConnection.reconnected(null);
+        this.hubConnection.closed(null);
+        this.hubConnection.connected(null);
+    }
+
+    private void onReconnecting() {
+        this.logger.logInformation("Reconnecting. hubconn=" + this.hubConnection.getUrl());
+    }
+
+    private void onReconnected() {
+        this.logger.logInformation("Reconnected. hubconn=" + this.hubConnection.getUrl());
+    }
+
+    private void onConnectionClosed() {
+        this.logger.logInformation("Closed. hubconn=" + this.hubConnection.getUrl());
+        this.connectEvent.release();
+    }
+
+    private void onConnectionError(Throwable e) {
+        this.logger.logInformation(String.format("Connection error. exception=%s. hubConnection=%s", e, this.hubConnection.getUrl()));
+        if (e != null) {
+            Throwable cause = e.getCause();
+            if (cause != null && cause.getMessage() != null && cause.getMessage().contains("401")) {
+                this.shouldGetNewToken = true;
+            }
+        }
+    }
+
+    protected abstract void onHubProxyCreated(HubProxy hubProxy);
+
+    protected abstract void onHubProxyDestroyed(HubProxy hubProxy);
+
+    public void connected() {
+        this.reconnecting = false;
+        this.logger.logInformation("Connected. hubconn=" + this.hubConnection.getUrl());
+    }
+
+    private void UpdateToken() throws LoginFailedException, InterruptedException {
+        int retryCount2 = 0;
+        for (; ; ) {
+            try {
+                this.accessToken = this.tokenManager.getOrUpdateToken(this.accessToken);
+                break;
+            } catch (LoginFailedException e) {
+                throw e;
+            } catch (IOException e) {
+                logger.logError("Get token failed. " + e.toString());
+                int waitTime2 = retryCount2++ * 1000;
+                if (waitTime2 > 300000) {
+                    waitTime2 = 5000;
+                }
+                Thread.sleep(waitTime2);
+            }
+        }
+    }
+
+    private void SignalRConnectWorker() throws InterruptedException {
+        //signalr重连代码
+        for (; ; ) {
+            do {
+//                this.logger.logTrace("Current connection state is " + this.hubConnection.getState());
+                this.connectEvent.acquire();
+            }
+            while (this.hubConnection != null && this.hubConnection.getState() == ConnectionState.Connected);
+
+            try {
+                //刷新token
+                UpdateToken();
+                if (this.hubConnection != null)
+                    this.UnhookEvents();
+                if (this.hubProxy != null) {
+                    onHubProxyDestroyed(this.hubProxy);
+                }
+                if (this.hubConnection != null)
+                    this.hubConnection.disconnect();
+                this.hubConnection = new HubConnection(hubUrl, "cid=" + signalrClientId, true, new SignalRLoggerWrapper(loggerFactory.createLogger("SignalR")));
+                this.hubConnection.setReconnectOnError(false);
+                this.HookEvents();
+                this.hubProxy = this.hubConnection.createHubProxy("clienthub");
+                this.onHubProxyCreated(this.hubProxy);
+                this.hubConnection.setCredentials(request -> request.addHeader("Authorization", "Bearer " + this.accessToken));
+                this.connectEvent.drainPermits();
+                this.hubConnection.start(new ServerSentEventsTransport(this.sseLogger, new JavaHttpConnection(this.javaconnLogger))).get(40, TimeUnit.SECONDS);
+                this.retryCount = 0;
+                this.shouldGetNewToken = false;
+                this.lastConnectedTime = new Date().getTime();
+            } catch (Exception e) {
+                assert hubConnection.getState() != ConnectionState.Connected;
+                if (e instanceof LoginFailedException) {
+                    this.logger.logError("Login error.");
+                } else {
+                    this.logger.logError("Hub connection start error. " + e.toString());
+                    e.printStackTrace();
+                }
+                Throwable cause = e.getCause();
+                if (cause != null) {
+                    String msg = cause.getMessage();
+                    if (msg != null && msg.contains("401"))
+                        this.shouldGetNewToken = true;
+                }
+
+                int waitTime = this.retryCount++ * 1000;
+                if (waitTime > 60000) {
+                    waitTime = 5000;
+                }
+
+                if (waitTime > 0)
+                    Thread.sleep(waitTime);
+                this.connectEvent.release();
+                this.reconnecting = true;
+            }
+        }
+    }
+
+    public void start() {
+        this.connectEvent.release();
+    }
+
+    public void stop() {
+        this.hubConnection.stop();
+    }
+}

+ 28 - 0
huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/sgd/fbox/signalr/SignalRLoggerWrapper.java

@@ -0,0 +1,28 @@
+package com.huimv.eco.sgd.fbox.signalr;
+
+import com.github.signalr4j.client.LogLevel;
+import com.github.signalr4j.client.Logger;
+
+public class SignalRLoggerWrapper implements Logger {
+
+    private final  com.huimv.eco.sgd.fbox.Logger logger;
+
+    public SignalRLoggerWrapper( com.huimv.eco.sgd.fbox.Logger logger){
+        this.logger = logger;
+    }
+    @Override
+    public void log(String message, LogLevel level) {
+        switch (level) {
+            case Critical:
+                this.logger.logError(message);
+                break;
+            case Information:
+                this.logger.logInformation(message);
+                break;
+            case Verbose:
+                this.logger.logTrace(message);
+                break;
+        }
+    }
+
+}

+ 125 - 0
huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/timer/SendTime.java

@@ -0,0 +1,125 @@
+package com.huimv.eco.timer;
+
+
+import cn.hutool.core.date.DateTime;
+import cn.hutool.core.date.DateUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.huimv.eco.entity.*;
+import com.huimv.eco.service.*;
+import org.apache.http.HttpEntity;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.io.FileSystemResource;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.MediaType;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+import org.springframework.util.LinkedMultiValueMap;
+import org.springframework.util.MultiValueMap;
+import org.springframework.web.client.RestTemplate;
+
+import java.util.Date;
+import java.util.List;
+
+
+@Component
+public class SendTime {
+    @Autowired
+    private RestTemplate restTemplate;
+
+    @Autowired
+    private ISysHumidityService humidityService;
+
+    @Autowired
+    private ISysTemperatureService temperatureService;
+
+    @Autowired
+    private IBaseWarningInfoService baseWarningInfoService;
+
+    @Autowired
+    private ISysFodderService fodderService;
+
+    @Autowired
+    private ISysMonthWaterService monthWaterService;
+
+    @Autowired
+    private ISysDayWaterService dayWaterService;
+
+//    String url = "http://127.0.0.1:8098/receiver/eco/save";
+    String url = "http://120.27.234.126:8010/receiver/receiver/eco/save";
+
+
+
+    @Scheduled(cron = "0 0/30 * * * ?")
+//    @Scheduled(cron = "0 * * * * ?")
+    private void sendTime(){
+
+        DateTime dateTime = DateUtil.offsetMinute(new Date(), -30);
+        HumAndTemDto humAndTemDto = new HumAndTemDto();
+
+        //湿度
+        List<SysHumidity> hum = humidityService.getlist();
+
+        //温度
+        List<SysTemperature> tem = temperatureService.getList();
+
+        //报警
+        QueryWrapper<BaseWarningInfo> warningInfoQueryWrapper = new QueryWrapper<>();
+        warningInfoQueryWrapper.ge("warning_time",dateTime);
+        List<BaseWarningInfo> warningInfos = baseWarningInfoService.list(warningInfoQueryWrapper);
+
+        //料
+        QueryWrapper<SysFodder> fodderWrapper = new QueryWrapper<>();
+        fodderWrapper.ge("create_time",dateTime);
+        List<SysFodder> fodders = fodderService.list(fodderWrapper);
+
+        //月用水
+        QueryWrapper<SysMonthWater> monthWaterWrapper = new QueryWrapper<>();
+        monthWaterWrapper.ge("create_time",dateTime);
+        List<SysMonthWater> monthWaters = monthWaterService.list(monthWaterWrapper);
+
+
+        //月用水
+        QueryWrapper<SysDayWater> dayWaterWrapper = new QueryWrapper<>();
+        dayWaterWrapper.ge("create_time",dateTime);
+        List<SysDayWater> dayWaters = dayWaterService.list(dayWaterWrapper);
+
+
+        humAndTemDto.setHumidity(hum);
+        humAndTemDto.setTemperature(tem);
+        humAndTemDto.setWarningInfos(warningInfos);
+        humAndTemDto.setFodders(fodders);
+        humAndTemDto.setMonthWaters(monthWaters);
+        humAndTemDto.setDayWaters(dayWaters);
+        String s = restTemplate.postForObject(url, humAndTemDto, String.class);
+        System.out.println(s);
+
+    }
+
+
+
+    @Scheduled(cron = "0 0 * * * ?")
+//    @Scheduled(cron = "0 * * * * ?")
+    private void sendTime1(){
+
+        DateTime dateTime = DateUtil.offsetHour(new Date(), -1);
+        HumAndTemDto humAndTemDto = new HumAndTemDto();
+
+
+        //月用水
+        QueryWrapper<SysMonthWater> monthWaterWrapper = new QueryWrapper<>();
+        monthWaterWrapper.ge("create_time",dateTime);
+        List<SysMonthWater> monthWaters = monthWaterService.list(monthWaterWrapper);
+
+
+        //月用水
+        QueryWrapper<SysDayWater> dayWaterWrapper = new QueryWrapper<>();
+        dayWaterWrapper.ge("create_time",dateTime);
+        List<SysDayWater> dayWaters = dayWaterService.list(dayWaterWrapper);
+
+        humAndTemDto.setMonthWaters(monthWaters);
+        humAndTemDto.setDayWaters(dayWaters);
+        String s = restTemplate.postForObject(url, humAndTemDto, String.class);
+        System.out.println(s);
+
+    }
+}

+ 720 - 0
huimv-farm-device/huimv-farm-eco/src/main/java/com/huimv/eco/timer/SgdTimer.java

@@ -0,0 +1,720 @@
+package com.huimv.eco.timer;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.huimv.eco.entity.*;
+import com.huimv.eco.service.*;
+import com.huimv.eco.sgd.Global;
+import com.huimv.eco.sgd.entity.Item;
+import com.huimv.eco.sgd.entity.Monitory;
+import com.huimv.eco.sgd.entity.MonitoryGetArgs;
+import com.huimv.eco.sgd.entity.MonitoryValue;
+import com.huimv.eco.sgd.fbox.ConsoleLoggerFactory;
+import com.huimv.eco.sgd.fbox.ServerCaller;
+import com.huimv.eco.sgd.fbox.StaticCredentialProvider;
+import com.huimv.eco.sgd.fbox.TokenManager;
+import com.zhenzi.sms.ZhenziSmsClient;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.stereotype.Component;
+
+import java.io.IOException;
+import java.text.DecimalFormat;
+import java.util.*;
+
+@Component
+public class SgdTimer {
+    private static final long SLEEP_TIME = 1000;
+
+    @Autowired
+    private  IBaseBoxService baseBoxService;
+
+    @Autowired
+    private  IBaseRoomService baseRoomService;
+
+    @Autowired
+    private ISysHumidityService humidityService;
+
+    @Autowired
+    private ISysTemperatureService temperatureService;
+
+    @Autowired
+    private ISysDayWaterService dayWaterService;
+
+    @Autowired
+    private ISysMonthWaterService monthWaterService;
+
+    @Autowired
+    private ISysFodderService fodderService;
+
+    @Autowired
+    private ISysWarningSetService warningSetService;
+
+    @Autowired
+    private IBaseWarningInfoService warningInfoService;
+
+    @Autowired
+    private ISysWarningPhoneService warningPhoneService;
+
+    //阈值
+    @Autowired
+    private ISysThresholdService thresholdService;
+
+    private Integer hyFarmId = 1;
+
+    //更新环境数据
+    @Scheduled(cron = "0 0/3 * * * ?")
+//    @Scheduled(cron = "0 * * * * ?")
+    private void updateEnv(){
+
+        ConsoleLoggerFactory loggerFactory = new ConsoleLoggerFactory();
+        // 指定连接服务器的凭据参数
+        TokenManager tokenManager = new TokenManager(new StaticCredentialProvider(Global.clientId, Global.clientSecret, Global.username, Global.password), Global.idServerUrl, loggerFactory);
+        ServerCaller apiBaseServer = new ServerCaller(tokenManager, Global.apiBaserUrl, Global.signalrClientId, loggerFactory);
+        Global.apiBaseServer = apiBaseServer;
+        DecimalFormat df = new DecimalFormat("#.00");
+
+        SysThreshold byId = thresholdService.getById(hyFarmId);
+        String maxHum = byId.getMaxHum();
+        String minHum = byId.getMinHum();
+        String maxTem = byId.getMaxTem();
+        String minTem = byId.getMinTem();
+        try {
+        List<BaseBox> boxes = baseBoxService.list();
+        for (BaseBox box : boxes) {
+            String uid = box.getUid();
+            Monitory[] monitories = apiBaseServer.executeGet("/v2/box/" + uid + "/dmon/grouped", Monitory[].class);
+            List names = new ArrayList();
+            for (Monitory monitory : monitories) {
+                for (Item item : monitory.items) {
+                    String name = item.name;
+                    if (monitory.name.contains("每个房间") && name != null&& name.startsWith("房舍")) {
+                        if (name.contains("平均温度") || name.contains("湿度")) {
+                            names.add(name);
+                        }
+                    }
+                }
+            }
+
+
+            if (ObjectUtil.isNotEmpty(names)) {
+                MonitoryValue[] monitoryValues = apiBaseServer.executePost("/v2/box/" +uid + "/dmon/value/get", new MonitoryGetArgs(names, null, new ArrayList()), MonitoryValue[].class);
+                List<SysTemperature> temList = new ArrayList();
+                List<SysHumidity> humList = new ArrayList<>();
+                for (MonitoryValue monitoryValue : monitoryValues) {
+                    if (ObjectUtil.isEmpty(monitoryValue)){
+                        continue;
+                    }
+                    String name = monitoryValue.getName();
+                    String[] split = name.split("-");
+                    BaseRoom room = baseRoomService.getOne(new QueryWrapper<BaseRoom>().eq("room_name", split[0]).eq("box_id", uid));
+                    Integer roomId = room.getId();
+                    if (split[1].contains("温度")){
+                        SysTemperature sysTemperature = new SysTemperature();
+                        if (ObjectUtil.isNotEmpty(monitoryValue.getValue())){
+                            Double value1 = (Double)monitoryValue.getValue();
+                            Double value = value1* 0.1;
+                            sysTemperature.setId(monitoryValue.getId());
+                            sysTemperature.setFarmId(hyFarmId);
+                            sysTemperature.setOriginal(value1);
+                            sysTemperature.setRoomId(roomId);
+                            if (value != 0.0){
+                                sysTemperature.setValue(Double.parseDouble(df.format(value)));
+                            }else {
+                                sysTemperature.setValue(value);
+                            }
+                            sysTemperature.setCreateTime(monitoryValue.getTimestamp());
+                            temList.add(sysTemperature);
+                        }
+
+                    }
+                    if (split[1].contains("湿度")){
+                        SysHumidity humidity = new SysHumidity();
+                        Double value = (Double)monitoryValue.getValue() ;
+                        humidity.setId(monitoryValue.getId());
+                        humidity.setRoomId(roomId);
+                        humidity.setFarmId(hyFarmId);
+                        if (ObjectUtil.isNotEmpty(value)){
+                            if (value != 0.0){
+                                humidity.setValue(Double.parseDouble(df.format(value)));
+                            }else{
+                                humidity.setValue(value);
+                            }
+
+                            humidity.setCreateTime(monitoryValue.getTimestamp());
+                            humList.add(humidity);
+                        }
+
+                    }
+
+                }
+                humidityService.saveBatch(humList);
+                temperatureService.saveBatch(temList);
+
+                humWarning(humList,minHum,maxHum);
+                temWarning(temList,minTem,maxTem);
+
+
+            }
+        }
+
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        System.out.println("更新温湿度信息,更新时间------------->"+ new Date());
+    }
+    //温度报警
+    private void temWarning(List<SysTemperature> temList, String minTem, String maxTem) {
+        QueryWrapper<SysWarningSet> wrapper = new QueryWrapper<>();
+        wrapper.eq("content","高温报警");
+        SysWarningSet maxWarning = warningSetService.getOne(wrapper);
+        wrapper.clear();
+        wrapper.eq("content","低温报警");
+        SysWarningSet minWarning = warningSetService.getOne(wrapper);
+
+        Double min = null;
+        Double max = null;
+        try {
+            min =  Double.valueOf(minTem);
+        }catch (NumberFormatException e) {
+            e.printStackTrace();
+        }
+
+        try {
+            max =  Double.valueOf(maxTem);
+        }catch (NumberFormatException e) {
+            e.printStackTrace();
+        }
+
+        for ( SysTemperature temperature : temList) {
+            BaseRoom baseRoom = baseRoomService.getById(temperature.getRoomId());
+            Double value = temperature.getValue();
+            Date now = new Date();
+            if (min != null && value <min) {
+                if (minWarning.getFirstLevel() || minWarning.getSecondLevel() || minWarning.getThirdlyLevel()) {
+                    BaseWarningInfo baseWarningInfo = new BaseWarningInfo();
+                    baseWarningInfo.setFarmId(hyFarmId);
+                    baseWarningInfo.setWarningName("低温报警");
+                    baseWarningInfo.setMsg(baseRoom.getAlias() + baseRoom.getRoomName() + "出现低温报警,温度为:" + value);
+                    baseWarningInfo.setWarningTime(now);
+                    baseWarningInfo.setUploadTime(temperature.getCreateTime());
+                    baseWarningInfo.setAlarmType(8);
+
+                    if (minWarning.getFirstLevel()) {
+                        baseWarningInfo.setLevel(1);
+                        baseWarningInfo.setLevelName("一级报警");
+                    }
+                    if (minWarning.getSecondLevel()) {
+                        baseWarningInfo.setLevel(2);
+                        baseWarningInfo.setLevelName("二级报警");
+                        //这个写短信内容
+                        send(baseRoom.getAlias(), baseRoom.getRoomName(), value + "℃");
+                    }
+                    if (minWarning.getThirdlyLevel()) {
+                        baseWarningInfo.setLevel(3);
+                        baseWarningInfo.setLevelName("三级报警");
+                        //这个写短信内容
+                    }
+                    warningInfoService.save(baseWarningInfo);
+
+                }
+            }
+
+            if (max != null && value >max){
+                if (maxWarning.getFirstLevel() || maxWarning.getSecondLevel() || maxWarning.getThirdlyLevel()) {
+                    BaseWarningInfo baseWarningInfo = new BaseWarningInfo();
+                    baseWarningInfo.setFarmId(hyFarmId);
+                    baseWarningInfo.setWarningName("高温报警");
+                    baseWarningInfo.setMsg(baseRoom.getAlias() + baseRoom.getRoomName() + "出现高温报警,温度为:" + value);
+                    baseWarningInfo.setWarningTime(now);
+                    baseWarningInfo.setUploadTime(temperature.getCreateTime());
+                    baseWarningInfo.setAlarmType(7);
+
+                    if (maxWarning.getFirstLevel()) {
+                        baseWarningInfo.setLevel(1);
+                        baseWarningInfo.setLevelName("一级报警");
+                    }
+                    if (maxWarning.getSecondLevel()) {
+                        baseWarningInfo.setLevel(2);
+                        baseWarningInfo.setLevelName("二级报警");
+                        //这个写短信内容
+                        send(baseRoom.getAlias(), baseRoom.getRoomName(), value + "℃");
+
+                    }
+                    if (maxWarning.getThirdlyLevel()) {
+                        baseWarningInfo.setLevel(3);
+                        baseWarningInfo.setLevelName("三级报警");
+                        //这个写短信内容
+                    }
+                    warningInfoService.save(baseWarningInfo);
+                }
+            }
+
+        }
+
+    }
+
+    //湿度报警
+    private void humWarning(List<SysHumidity> humList, String minHum, String maxHum) {
+        QueryWrapper<SysWarningSet> wrapper = new QueryWrapper<>();
+        wrapper.eq("content","高湿度报警");
+        SysWarningSet maxWarning = warningSetService.getOne(wrapper);
+        wrapper.clear();
+        wrapper.eq("content","低湿度报警");
+        SysWarningSet minWarning = warningSetService.getOne(wrapper);
+
+        Double min = null;
+        Double max = null;
+        try {
+            min =  Double.valueOf(minHum);
+        }catch (NumberFormatException e) {
+            e.printStackTrace();
+        }
+
+        try {
+            max =  Double.valueOf(maxHum);
+        }catch (NumberFormatException e) {
+            e.printStackTrace();
+        }
+
+        for (SysHumidity humidity : humList) {
+            BaseRoom baseRoom = baseRoomService.getById(humidity.getRoomId());
+            Double value = humidity.getValue();
+            Date now = new Date();
+            if (min != null && value <min){
+                if (minWarning.getFirstLevel() || minWarning.getSecondLevel()|| minWarning.getThirdlyLevel()){
+                    BaseWarningInfo baseWarningInfo = new BaseWarningInfo();
+                    baseWarningInfo.setFarmId(hyFarmId);
+                    baseWarningInfo.setWarningName("低湿度报警");
+                    baseWarningInfo.setMsg(baseRoom.getAlias()+baseRoom.getRoomName()+"出现低湿度报警,湿度为:"+value);
+                    baseWarningInfo.setWarningTime(now);
+                    baseWarningInfo.setUploadTime(humidity.getCreateTime());
+                    baseWarningInfo.setAlarmType(10);
+
+                    if (minWarning.getFirstLevel()){
+                        baseWarningInfo.setLevel(1);
+                        baseWarningInfo.setLevelName("一级报警");
+                    }
+
+                    if (minWarning.getSecondLevel()){
+                        baseWarningInfo.setLevel(2);
+                        baseWarningInfo.setLevelName("二级报警");
+                        //这个写短信内容
+                        send( baseRoom.getAlias(),baseRoom.getRoomName(),value+"%");
+                    }
+                    if (minWarning.getThirdlyLevel()){
+                        baseWarningInfo.setLevel(3);
+                        baseWarningInfo.setLevelName("三级报警");
+                        //这个写短信内容
+                    }
+                    warningInfoService.save(baseWarningInfo);
+                }
+
+
+
+            }
+            if (max != null && value >max) {
+                if (maxWarning.getFirstLevel() || maxWarning.getSecondLevel() || maxWarning.getThirdlyLevel()) {
+                    BaseWarningInfo baseWarningInfo = new BaseWarningInfo();
+                    baseWarningInfo.setFarmId(hyFarmId);
+                    baseWarningInfo.setWarningName("高湿度报警");
+                    baseWarningInfo.setMsg(baseRoom.getAlias() + baseRoom.getRoomName() + "出现高湿度报警,湿度为:" + value);
+                    baseWarningInfo.setWarningTime(now);
+                    baseWarningInfo.setUploadTime(humidity.getCreateTime());
+                    baseWarningInfo.setAlarmType(9);
+                    if (maxWarning.getFirstLevel()) {
+
+                        baseWarningInfo.setLevel(1);
+                        baseWarningInfo.setLevelName("一级报警");
+
+                    }
+
+                    if (maxWarning.getSecondLevel()) {
+                        baseWarningInfo.setLevel(2);
+                        baseWarningInfo.setLevelName("二级报警");
+                        //这个写短信内容
+                        send(baseRoom.getAlias(), baseRoom.getRoomName(), value + "%");
+
+                    }
+                    if (maxWarning.getThirdlyLevel()) {
+                        baseWarningInfo.setLevelName("三级报警");
+                        baseWarningInfo.setAlarmType(9);
+                        //这个写短信内容
+
+                    }
+                    warningInfoService.save(baseWarningInfo);
+                }
+            }
+
+        }
+    }
+
+    //更新日用水  9
+    @Scheduled(cron = "0 55 8 * * ? ")
+//    @Scheduled(cron = "0 * * * * ?")
+    private void updateDayWater(){
+        ConsoleLoggerFactory loggerFactory = new ConsoleLoggerFactory();
+        // 指定连接服务器的凭据参数
+        TokenManager tokenManager = new TokenManager(new StaticCredentialProvider(Global.clientId, Global.clientSecret, Global.username, Global.password), Global.idServerUrl, loggerFactory);
+        ServerCaller apiBaseServer = new ServerCaller(tokenManager, Global.apiBaserUrl, Global.signalrClientId, loggerFactory);
+        Global.apiBaseServer = apiBaseServer;
+        DecimalFormat df = new DecimalFormat("#.00");
+
+
+        try {
+
+            List<BaseBox> boxes = baseBoxService.list();
+            for (BaseBox box : boxes) {
+                String uid = box.getUid();
+                Monitory[] monitories = apiBaseServer.executeGet("/v2/box/" + uid + "/dmon/grouped", Monitory[].class);
+                List names = new ArrayList();
+                if (ObjectUtil.isEmpty(monitories)){
+                    continue;
+                }
+                for (Monitory monitory : monitories) {
+                    for (Item item : monitory.items) {
+                        String name = item.name;
+                        if (monitory.name.contains("每个房间") && name != null&& name.startsWith("房舍")) {
+                            if (name.contains("日用水量") ) {
+                                names.add(name);
+                            }
+                        }
+                    }
+                }
+
+
+                if (ObjectUtil.isNotEmpty(names)) {
+                    MonitoryValue[] monitoryValues = apiBaseServer.executePost("/v2/box/" +uid + "/dmon/value/get", new MonitoryGetArgs(names, null, new ArrayList()), MonitoryValue[].class);
+
+                    List<SysDayWater> dayWatersList = new ArrayList();
+                    for (MonitoryValue monitoryValue : monitoryValues) {
+                        if (ObjectUtil.isEmpty(monitoryValue)){
+                            continue;
+                        }
+                        String name = monitoryValue.getName();
+                        String[] split = name.split("-");
+                        BaseRoom room = baseRoomService.getOne(new QueryWrapper<BaseRoom>().eq("room_name", split[0]).eq("box_id", uid));
+                        Integer roomId = room.getId();
+
+                        SysDayWater dayWater = new SysDayWater();
+                        Double value = (Double)monitoryValue.getValue();
+
+                        dayWater.setId(monitoryValue.getId());
+                        dayWater.setRoomId(roomId);
+                        dayWater.setFarmId(hyFarmId);
+                        if (value == null){
+                            continue;
+                        }
+                        if (0.0 != value){
+                            String format = df.format(value);
+                            if (format.length()==3){
+                                dayWater.setValue(0+format);
+                            }else {
+                                dayWater.setValue(format);
+                            }
+
+                        }else {
+                            dayWater.setValue(value+"");
+                        }
+                        dayWater.setCreateTime(monitoryValue.getTimestamp());
+                        dayWatersList.add(dayWater);
+                    }
+                    dayWaterService.saveBatch(dayWatersList);
+                }
+            }
+
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        System.out.println("更新日用水信息,更新时间------------->"+ new Date());
+    }
+
+    //更新两个小时用水数据
+    @Scheduled(cron = "0 59 0,2,4,6,8,10,12,14,16,18,20,22 * * ? ")
+//    @Scheduled(cron = "0 0/2 * * * ?")
+    private void updateMonthWater(){
+        ConsoleLoggerFactory loggerFactory = new ConsoleLoggerFactory();
+        // 指定连接服务器的凭据参数
+        TokenManager tokenManager = new TokenManager(new StaticCredentialProvider(Global.clientId, Global.clientSecret, Global.username, Global.password), Global.idServerUrl, loggerFactory);
+        ServerCaller apiBaseServer = new ServerCaller(tokenManager, Global.apiBaserUrl, Global.signalrClientId, loggerFactory);
+        Global.apiBaseServer = apiBaseServer;
+        DecimalFormat df = new DecimalFormat("#.00");
+
+
+        try {
+
+            List<BaseBox> boxes = baseBoxService.list();
+            for (BaseBox box : boxes) {
+                String uid = box.getUid();
+                Monitory[] monitories = apiBaseServer.executeGet("/v2/box/" + uid + "/dmon/grouped", Monitory[].class);
+                List names = new ArrayList();
+                for (Monitory monitory : monitories) {
+                    for (Item item : monitory.items) {
+                        String name = item.name;
+                        if (monitory.name.contains("每个房间") && name != null&& name.startsWith("房舍")) {
+                            if (name.contains("日用水量") ) {
+                                names.add(name);
+                            }
+                        }
+                    }
+                }
+
+
+                if (ObjectUtil.isNotEmpty(names)) {
+                    MonitoryValue[] monitoryValues = apiBaseServer.executePost("/v2/box/" +uid + "/dmon/value/get", new MonitoryGetArgs(names, null, new ArrayList()), MonitoryValue[].class);
+                    List<SysMonthWater> dayWatersList = new ArrayList();
+                    for (MonitoryValue monitoryValue : monitoryValues) {
+
+
+
+                        if (ObjectUtil.isEmpty(monitoryValue)){
+                            continue;
+                        }
+                        String name = monitoryValue.getName();
+                        String[] split = name.split("-");
+                        BaseRoom room = baseRoomService.getOne(new QueryWrapper<BaseRoom>().eq("room_name", split[0]).eq("box_id", uid));
+                        Integer roomId = room.getId();
+                        SysMonthWater oldWater = monthWaterService.getOne(
+                                new QueryWrapper<SysMonthWater>()
+                                        .eq("room_id", roomId)
+                                        .eq("farm_id",hyFarmId)
+                                        .orderByDesc("month_water_id")
+                                        .last("LIMIT 1"));
+
+                        SysMonthWater monthWater = new SysMonthWater();
+                        monthWater.setFarmId(hyFarmId);
+                        Double newValue = (Double)monitoryValue.getValue();
+                        Double add  ;
+                        if (ObjectUtil.isEmpty(oldWater)){
+                            if (newValue == null){
+                                add = 0.0;
+                            }else {
+                                add = newValue;
+                            }
+
+                        }else {
+                            Double oldValue = Double.parseDouble(oldWater.getValue());
+                            if (newValue >= oldValue){
+                                add = newValue  -oldValue;
+                            }else {
+                                add =  newValue;
+                            }
+
+                        }
+
+
+                        if (add != 0.0){
+                            String format = df.format(add);
+                            if (format.length()==3){
+                                monthWater.setIncreaseValue(0+format);
+                            }else {
+                                monthWater.setIncreaseValue(format);
+                            }
+                        }else {
+                            monthWater.setIncreaseValue(add+"");
+                        }
+
+                        monthWater.setId(monitoryValue.getId());
+                        monthWater.setRoomId(roomId);
+                        if (newValue != 0.0){
+                            String format = df.format(newValue);
+                            if (format.length()==3){
+                                monthWater.setValue(0+format);
+                            }else {
+                                monthWater.setValue(format);
+                            }
+                        }else {
+                            monthWater.setValue(newValue+"");
+                        }
+                        monthWater.setCreateTime(monitoryValue.getTimestamp());
+                        dayWatersList.add(monthWater);
+
+                    }
+                    monthWaterService.saveBatch(dayWatersList);
+                }
+            }
+
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        System.out.println("更新月用水信息,更新时间------------->"+ new Date());
+    }
+
+
+    //更新料控
+    @Scheduled(cron = "0 0/6 * * * ? ")
+//    @Scheduled(cron = "0 0/5 * * * ?")
+    private void updateFodder() throws IOException {
+        ConsoleLoggerFactory loggerFactory = new ConsoleLoggerFactory();
+        // 指定连接服务器的凭据参数
+        TokenManager tokenManager = new TokenManager(new StaticCredentialProvider(Global.clientId, Global.clientSecret, Global.username, Global.password), Global.idServerUrl, loggerFactory);
+        ServerCaller apiBaseServer = new ServerCaller(tokenManager, Global.apiBaserUrl, Global.signalrClientId, loggerFactory);
+        Global.apiBaseServer = apiBaseServer;
+
+        List names = new ArrayList();
+        String oneUid = "-1277226674647203111";
+        String twoUid = "-1277176930335980834";
+        String threeUid = "-1277075358654397725";
+        names.add("累计重量");
+
+        MonitoryValue[] monitoryValues = apiBaseServer.executePost("/v2/box/" + oneUid + "/dmon/value/get", new MonitoryGetArgs(names, null, new ArrayList()), MonitoryValue[].class);
+
+        MonitoryValue monitoryValue = monitoryValues[0];
+        Double value = (Double)monitoryValue.getValue();
+        SysFodder oneFodder = fodderService.getOne(new QueryWrapper<SysFodder>().eq("floor_id", 1).last("ORDER BY fodder_id DESC limit 1"));
+        Double oldVale = oneFodder.getValue();
+        if (oldVale < value){
+            oneFodder.setValue(value);
+            fodderService.updateById(oneFodder);
+        }else if (value < oldVale){
+            SysFodder fodder = new SysFodder();
+            fodder.setValue(value);
+            fodder.setCreateTime(monitoryValue.getTimestamp());
+            fodder.setFloorId(1);
+            fodder.setId(monitoryValue.getId());
+            fodder.setFarmId(hyFarmId);
+            fodderService.save(fodder);
+
+        }
+
+
+
+        MonitoryValue[] twoMonitoryValues = apiBaseServer.executePost("/v2/box/" + twoUid + "/dmon/value/get", new MonitoryGetArgs(names, null, new ArrayList()), MonitoryValue[].class);
+        MonitoryValue twoMonitoryValue = twoMonitoryValues[0];
+        Double twoValue = (Double)twoMonitoryValue.getValue();
+        SysFodder twoFodder = fodderService.getOne(new QueryWrapper<SysFodder>().eq("floor_id", 2).last("ORDER BY fodder_id DESC limit 1"));
+        Double twoOldVale = twoFodder.getValue();
+        if (twoOldVale < twoValue){
+            twoFodder.setValue(twoValue);
+            fodderService.updateById(twoFodder);
+//            System.out.println("二号楼更新------------>"+twoFodder);
+        }else if (twoValue < twoOldVale){
+            SysFodder fodder = new SysFodder();
+            fodder.setValue(twoValue);
+            fodder.setCreateTime(twoMonitoryValue.getTimestamp());
+            fodder.setFloorId(2);
+            fodder.setId(twoMonitoryValue.getId());
+            fodder.setFarmId(hyFarmId);
+            fodderService.save(fodder);
+//            System.out.println("二号楼新增------------>"+twoMonitoryValue);
+        }else {
+//            System.out.println("二号楼舍弃------------>"+twoMonitoryValue);
+        }
+
+
+        MonitoryValue[] threeMonitoryValues = apiBaseServer.executePost("/v2/box/" + threeUid + "/dmon/value/get", new MonitoryGetArgs(names, null, new ArrayList()), MonitoryValue[].class);
+        MonitoryValue threeMonitoryValue = threeMonitoryValues[0];
+        Double threeValue = (Double)threeMonitoryValue.getValue();
+        SysFodder threeFodder = fodderService.getOne(new QueryWrapper<SysFodder>().eq("floor_id", 3).last("ORDER BY fodder_id DESC limit 1"));
+        Double threeOldVale = threeFodder.getValue();
+        if (threeOldVale < threeValue){
+            threeFodder.setValue(threeValue);
+            fodderService.updateById(threeFodder);
+//            System.out.println("三号楼更新------------>"+threeFodder);
+        }else if (threeValue < threeOldVale){
+            SysFodder fodder = new SysFodder();
+            fodder.setValue(threeValue);
+            fodder.setCreateTime(threeMonitoryValue.getTimestamp());
+            fodder.setFloorId(3);
+            fodder.setId(threeMonitoryValue.getId());
+            fodder.setFarmId(hyFarmId);
+            fodderService.save(fodder);
+        }else {
+        }
+
+
+
+        System.out.println("更新料塔信息,更新时间------------->" + new Date());
+
+    }
+
+
+
+    public void send(String alias, String roomName, String value)  {
+
+
+        ZhenziSmsClient client = new ZhenziSmsClient("https://sms_developer.zhenzikj.com",
+                "109928", "2684d129-1946-43fc-9074-93cee1687eb7");
+        Map<String, Object> params = new HashMap<String, Object>();
+        //从数据库查询
+        SysWarningPhone one = warningPhoneService.getOne(new QueryWrapper<SysWarningPhone>().eq("farm_id", hyFarmId).eq("level", 2));
+        String[] split = one.getPhone().split(",");
+        for (String phone : split) {
+            params.put("number",phone);
+            params.put("templateId", "7445");
+
+            String[] templateParams = new String[3];
+            templateParams[0] = alias;
+            templateParams[1] = roomName;
+
+            templateParams[2] = value;
+            params.put("templateParams", templateParams);
+            try {
+                System.out.println(client.send(params));
+            } catch (Exception e) {
+                e.printStackTrace();
+            }
+
+        }
+
+
+    }
+
+     /*  //更新盒子,房间信息
+    @Scheduled(cron = "0 0 0 1/7 * ?")
+//    @Scheduled(cron = "0 0/6 * * * ?")
+    private void updateBox(){
+
+        ConsoleLoggerFactory loggerFactory = new ConsoleLoggerFactory();
+        // 指定连接服务器的凭据参数
+        TokenManager tokenManager = new TokenManager(new StaticCredentialProvider(Global.clientId, Global.clientSecret, Global.username, Global.password), Global.idServerUrl, loggerFactory);
+        ServerCaller appServer = new ServerCaller(tokenManager, Global.appServerApiUrl, Global.signalrClientId, loggerFactory);
+        ServerCaller apiBaseServer = new ServerCaller(tokenManager, Global.apiBaserUrl, Global.signalrClientId, loggerFactory);
+        Global.appServer = appServer;
+        Global.apiBaseServer = apiBaseServer;
+        try {
+            BoxGroup[] boxGroups = appServer.executeGet("api/client/box/grouped", BoxGroup[].class);
+            List<BaseBox> boxs = new ArrayList<>();
+            List<BaseRoom> rooms = new ArrayList<>();
+            for (BoxGroup group : boxGroups) {
+                //盒子
+                for (BoxReg boxReg : group.boxRegs) {
+                    String alias = boxReg.alias;
+                    if (alias.endsWith("层环控系统")) {
+                        if (alias.startsWith("海盐青莲1号楼")){
+                            boxs.add( new BaseBox(boxReg.boxUid,alias,1));
+                        }
+                        if (alias.startsWith("海盐青莲2号楼")){
+                            boxs.add( new BaseBox(boxReg.boxUid,alias,2));
+                        }
+                        if (alias.startsWith("海盐青莲3号楼")){
+                            boxs.add( new BaseBox(boxReg.boxUid,alias,3));
+                        }
+                        for (int i= 1 ;i <= 6 ;i++){
+                            BaseRoom baseRoom = new BaseRoom();
+                            baseRoom.setBoxId(boxReg.boxUid);
+                            baseRoom.setRoomName("房舍"+i);
+                            baseRoom.setAlias(alias.substring(4,9));
+                            rooms.add(baseRoom);
+                        }
+
+                    }
+
+                }
+            }
+            baseBoxService.remove(null);
+            baseBoxService.saveBatch(boxs);
+
+            baseRoomService.remove(null);
+            baseRoomService.saveBatch(rooms);
+            System.out.println("更新房舍信息,更新时间------------->"+ new Date());
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+
+    }*/
+
+
+}
+
+

+ 1 - 1
huimv-farm-device/huimv-farm-eco/src/main/resources/application-dev.yml

@@ -1,5 +1,5 @@
 server:
-  port: 8099
+  port: 10001
 spring:
   application:
     name: huimv-farm-eco

+ 13 - 0
huimv-farm-device/huimv-farm-eco/src/main/resources/com/huimv/eco/mapper/SysHumidityMapper.xml

@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.huimv.eco.mapper.SysHumidityMapper">
+
+
+    <select id="getlist" resultType="com.huimv.eco.entity.SysHumidity">
+         SELECT  a.id,ROUND(b.value ,2)`value`,a.create_time,a.room_id,a.farm_id FROM  `sys_humidity`  a RIGHT  JOIN
+                (
+                SELECT  hum_id, room_id , AVG(`value`) `value` FROM `sys_humidity`  ${ew.customSqlSegment}     GROUP BY room_id
+                ) b
+                ON  a.hum_id=  b.hum_id
+    </select>
+</mapper>

+ 15 - 0
huimv-farm-device/huimv-farm-eco/src/main/resources/com/huimv/eco/mapper/SysTemperatureMapper.xml

@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.huimv.eco.mapper.SysTemperatureMapper">
+
+
+    <select id="getlist" resultType="com.huimv.eco.entity.SysTemperature">
+
+
+         SELECT  a.id,ROUND(b.value ,2)`value`,a.create_time,a.room_id,a.farm_id,a.original FROM  `sys_temperature`  a RIGHT  JOIN
+                (
+                SELECT  tem_id, room_id , AVG(`value`) `value` FROM `sys_temperature`  ${ew.customSqlSegment}     GROUP BY room_id
+                ) b
+                ON  a.tem_id=  b.tem_id
+    </select>
+</mapper>

+ 1 - 5
huimv-farm-device/pom.xml

@@ -43,11 +43,7 @@
             <scope>provided</scope>
         </dependency>
         <!-- fastjson -->
-        <dependency>
-            <groupId>com.alibaba</groupId>
-            <artifactId>fastjson</artifactId>
-            <version>1.2.28</version>
-        </dependency>
+
         <!-- JPA -->
         <dependency>
             <groupId>org.springframework.boot</groupId>