523096025 пре 11 месеци
родитељ
комит
0d060ee62f
39 измењених фајлова са 926 додато и 167 уклоњено
  1. 4 0
      huimv-env-admin/.gitignore
  2. 4 0
      huimv-env-input/.gitignore
  3. 14 0
      huimv-env-input/pom.xml
  4. 2 4
      huimv-env-input/src/main/java/com/huimv/env/input/HuimvEnvInputApplication.java
  5. 83 0
      huimv-env-input/src/main/java/com/huimv/env/input/config/WeChatMessage2.java
  6. 2 2
      huimv-env-input/src/main/java/com/huimv/env/input/controller/BaseFarmController.java
  7. 20 0
      huimv-env-input/src/main/java/com/huimv/env/input/controller/GatewayController.java
  8. 71 0
      huimv-env-input/src/main/java/com/huimv/env/input/entity/Gateway.java
  9. 26 0
      huimv-env-input/src/main/java/com/huimv/env/input/entity/vo/AlarmInfoVO.java
  10. 28 0
      huimv-env-input/src/main/java/com/huimv/env/input/entity/vo/DataInfoVO.java
  11. 14 0
      huimv-env-input/src/main/java/com/huimv/env/input/entity/vo/HeartInfoVo.java
  12. 28 0
      huimv-env-input/src/main/java/com/huimv/env/input/mapper/GatewayMapper.java
  13. 82 34
      huimv-env-input/src/main/java/com/huimv/env/input/server/EnvInputServerHandler.java
  14. 11 0
      huimv-env-input/src/main/java/com/huimv/env/input/service/IBaseFarmService.java
  15. 16 0
      huimv-env-input/src/main/java/com/huimv/env/input/service/IGatewayService.java
  16. 27 0
      huimv-env-input/src/main/java/com/huimv/env/input/service/impl/BaseFarmServiceImpl.java
  17. 20 0
      huimv-env-input/src/main/java/com/huimv/env/input/service/impl/GatewayServiceImpl.java
  18. 123 0
      huimv-env-input/src/main/java/com/huimv/env/input/timer/ElePostTimer.java
  19. 48 0
      huimv-env-input/src/main/java/com/huimv/env/input/utils/ElePostUtils.java
  20. 172 0
      huimv-env-input/src/main/java/com/huimv/env/input/utils/HttpClientUtil.java
  21. 4 58
      huimv-env-input/src/main/resources/application-prod.yml
  22. 0 0
      huimv-env-input/src/main/resources/com/huimv/env/input/mapper/BaseFarmMapper.xml
  23. 0 0
      huimv-env-input/src/main/resources/com/huimv/env/input/mapper/BasePigpenMapper.xml
  24. 0 0
      huimv-env-input/src/main/resources/com/huimv/env/input/mapper/EnvDataMapper.xml
  25. 53 0
      huimv-env-input/src/main/resources/com/huimv/env/input/mapper/GatewayMapper.xml
  26. 0 0
      huimv-env-input/src/main/resources/com/huimv/env/input/mapper/HeartInfoMapper.xml
  27. 0 0
      huimv-env-input/src/main/resources/com/huimv/env/input/mapper/PortChangeDataMapper.xml
  28. 0 0
      huimv-env-input/src/main/resources/com/huimv/env/input/mapper/PortWarningInfoMapper.xml
  29. 0 0
      huimv-env-input/src/main/resources/com/huimv/env/input/mapper/SysAccountMultilevelMapper.xml
  30. 0 0
      huimv-env-input/src/main/resources/com/huimv/env/input/mapper/TerminalMapper.xml
  31. 0 0
      huimv-env-input/src/main/resources/com/huimv/env/input/mapper/TerminalPortMapper.xml
  32. 7 57
      huimv-env-input/target/classes/application-prod.yml
  33. BIN
      huimv-env-input/target/classes/com/huimv/env/input/HuimvEnvInputApplication.class
  34. BIN
      huimv-env-input/target/classes/com/huimv/env/input/server/EnvInputServerHandler.class
  35. BIN
      huimv-env-input/target/huimv-new-env-input-0.0.1-SNAPSHOT.jar
  36. BIN
      huimv-env-input/target/huimv-new-env-input-0.0.1-SNAPSHOT.jar.original
  37. 1 1
      huimv-env-input/target/maven-archiver/pom.properties
  38. 0 4
      huimv-env-input/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
  39. 66 7
      huimv-env-input/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst

+ 4 - 0
huimv-env-admin/.gitignore

@@ -0,0 +1,4 @@
+/target/
+.idea
+*.iml
+.log

+ 4 - 0
huimv-env-input/.gitignore

@@ -0,0 +1,4 @@
+/target/
+.idea
+*.iml
+.log

+ 14 - 0
huimv-env-input/pom.xml

@@ -26,6 +26,20 @@
             <artifactId>jna</artifactId>
             <version>5.13.0</version>
         </dependency>
+        <!--        HttpClient      -->
+        <!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient -->
+        <dependency>
+            <groupId>org.apache.httpcomponents</groupId>
+            <artifactId>httpclient</artifactId>
+            <version>4.5.13</version>
+        </dependency>
+        <!--    log4j    -->
+        <!-- https://mvnrepository.com/artifact/log4j/log4j -->
+        <dependency>
+            <groupId>log4j</groupId>
+            <artifactId>log4j</artifactId>
+            <version>1.2.17</version>
+        </dependency>
 
         <!--生成二维码-->
         <dependency>

+ 2 - 4
huimv-env-input/src/main/java/com/huimv/env/input/HuimvEnvInputApplication.java

@@ -5,19 +5,17 @@ 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.scheduling.annotation.EnableScheduling;
 
 
 @SpringBootApplication
 @MapperScan("com.huimv.env.input.mapper")
+@EnableScheduling
 public class HuimvEnvInputApplication {
     public static void main(String[] args) throws InterruptedException {
         ApplicationContext applicationContext = SpringApplication.run(HuimvEnvInputApplication.class, args);
         // EnvInputServer
         applicationContext.getBean(EnvInputServer.class).run();
     }
-//    @Bean
-//    public ServerEndpointExporter serverEndpointExporter() {
-//        return new ServerEndpointExporter();
-//    }
 
 }

+ 83 - 0
huimv-env-input/src/main/java/com/huimv/env/input/config/WeChatMessage2.java

@@ -0,0 +1,83 @@
+package com.huimv.env.input.config;
+
+
+import cn.hutool.http.HttpUtil;
+import cn.hutool.json.JSONObject;
+import cn.hutool.json.JSONUtil;
+import org.springframework.stereotype.Component;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.HashMap;
+
+@Component
+public class WeChatMessage2 {
+//    wx:
+//    appId: "wx707fcfd7d09e02eb"  #小程序appId
+//    secret: "w95K45G9-2xGocleqrtGoHwEGF6ocqSu8EbDBxCQSR0"   #小程序密钥
+//    templateId: "f932c54f1cbd427b10218a0d1cfb88bf"  #订阅消息模板
+//
+//    @Value("${wx.appId}")
+//    private String appId;
+//
+//    @Value("${wx.secret}")
+//    private String secret;
+//
+//    @Value("${wx.templateId}")
+//    private String templateId;
+    private static  final  String  appId= "wx135afbc98e976019";
+    private static  final  String  secret= "d22f323303373cbc0677634fbc2abbbf";
+    private static  final  String  templateId= "NL455v2_O8E6NdC-GPw-TNXFPa_-dIbojubBmoUk9us";
+
+    public static  void sendMsg( Date uploadDate,String warningReason,String location,String zhanDian,String openId){
+        //1:获取token(接口调用凭证)
+        String token = queryToken();
+        //2:发送订阅消息
+        send(token,uploadDate,warningReason,location,zhanDian,openId);
+    }
+
+    // 1: 获取 access_token  (2h过期)
+    public static String queryToken(){
+        String tokenUrl="https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential";
+        tokenUrl = tokenUrl + "&appid=" + appId + "&secret=" + secret;
+        String result = HttpUtil.get(tokenUrl);
+        System.out.println(result);
+        JSONObject jsonObject = JSONUtil.parseObj(result);
+        String token = jsonObject.get("access_token").toString();
+        return token;
+    }
+
+    public static void send(String token,Date uploadDate,String warningReason,String location,String zhanDian ,String openId){
+        String msgUrl="https://api.weixin.qq.com/cgi-bin/message/subscribe/send";
+        msgUrl = msgUrl + "?access_token=" + token;
+        // 设置模板参数
+        HashMap<String, Object> paramMap = new HashMap<>();
+        paramMap.put("touser", openId);                 // 接收方
+        paramMap.put("template_id", templateId);        // 模板id
+        paramMap.put("page","pages/warn/warn");         // 消息中要跳转的页面
+        // 设置data 模板内容
+        HashMap<String, Object> data = new HashMap<>();
+        //报警类型
+        data.put("thing10", formatParam(warningReason));
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // 定义日期和时间的格式
+        //报警时间
+        data.put("date3", formatParam(sdf.format(uploadDate)));
+//        //报警时间
+        data.put("thing11",formatParam(location));
+//        //报警原因
+        data.put("thing6", formatParam(zhanDian));
+//        //报警地点
+        paramMap.put("data", data);
+        // 转json字符串
+        String jsonObject = JSONUtil.toJsonStr(paramMap);
+        String result= HttpUtil.post(msgUrl, jsonObject);
+        System.out.println(result);
+    }
+
+    public static HashMap<String, Object> formatParam(String value){
+        HashMap<String, Object> data = new HashMap<>();
+        data.put("value", value);
+        return data;
+    }
+
+}

+ 2 - 2
huimv-env-input/src/main/java/com/huimv/env/input/controller/BaseFarmController.java

@@ -61,7 +61,7 @@ public class BaseFarmController {
     }
 
     @GetMapping("/test1")
-    public  String add2() throws InterruptedException {
+    public  String add2()   {
 
         // 步骤1: 将两个数组写入临时文件
         int[] array1 = new int[]{2,0,222,-5,-6,-8,-4,-2,-7,-2,-4,-5,-5,-7,-6,-2,-4,-7,0,-5,-5,-1,0,-2,-4,-6,-4,-2,-6,-5,-6,-3,-4,-6,-7,-6,1,-5,-7,-4,-5,-7,-4,-3,-3,-6,-5,-6,-7,-1,0,-5,-6,-4,-8,-7,-6,-5,-7,-5,-4,-5,-5,-5,-6,-3,-5,-4,-6,-6,-7,-4,-6,-5,-7,-6,-7,-12,1,-8,-6,-6,-4,-6,-5,-5,-4,-4,-4,-6,-4,-8,-11,-5,-2,-6,-5,-3,-7,-4,-6,-5,-5,-6,-7,-5,0,-3,-5,-3,-6,-4,-6,-6,-7,-5,-5,-4,-6,-3,-7,-7,-5,-6,-3,-6,-9,-6,-4,-7,-4};
@@ -121,7 +121,7 @@ public class BaseFarmController {
     }
 
     @GetMapping("/test5")
-    public  String add5() throws InterruptedException {
+    public  String add5()   {
 
         // 步骤1: 将两个数组写入临时文件
         int[] array2 = new int[]{2,0,222,-5,-6,-8,-4,-2,-7,-2,-4,-5,-5,-7,-6,-2,-4,-7,0,-5,-5,-1,0,-2,-4,-6,-4,-2,-6,-5,-6,-3,-4,-6,-7,-6,1,-5,-7,-4,-5,-7,-4,-3,-3,-6,-5,-6,-7,-1,0,-5,-6,-4,-8,-7,-6,-5,-7,-5,-4,-5,-5,-5,-6,-3,-5,-4,-6,-6,-7,-4,-6,-5,-7,-6,-7,-12,1,-8,-6,-6,-4,-6,-5,-5,-4,-4,-4,-6,-4,-8,-11,-5,-2,-6,-5,-3,-7,-4,-6,-5,-5,-6,-7,-5,0,-3,-5,-3,-6,-4,-6,-6,-7,-5,-5,-4,-6,-3,-7,-7,-5,-6,-3,-6,-9,-6,-4,-7,-4};

+ 20 - 0
huimv-env-input/src/main/java/com/huimv/env/input/controller/GatewayController.java

@@ -0,0 +1,20 @@
+package com.huimv.env.input.controller;
+
+
+import org.springframework.web.bind.annotation.RequestMapping;
+
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * <p>
+ * 采集网关 前端控制器
+ * </p>
+ *
+ * @author author
+ * @since 2024-06-19
+ */
+@RestController
+@RequestMapping("/gateway")
+public class GatewayController {
+
+}

+ 71 - 0
huimv-env-input/src/main/java/com/huimv/env/input/entity/Gateway.java

@@ -0,0 +1,71 @@
+package com.huimv.env.input.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import java.io.Serializable;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * <p>
+ * 采集网关
+ * </p>
+ *
+ * @author author
+ * @since 2024-06-19
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@TableName("gateway")
+public class Gateway implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    /**
+     * 设备编号
+     */
+    private String deviceCode;
+
+    /**
+     * 设备名称
+     */
+    private String deviceName;
+
+    /**
+     * 型号
+     */
+    private String type;
+
+    /**
+     * 安装位置ID
+     */
+    private Integer locationId;
+
+    /**
+     * 状态 0为离线 1为在线
+     */
+    private Integer status;
+
+    /**
+     * 终端数量
+     */
+    private Integer terminalNum;
+
+    /**
+     * 小区ID
+     */
+    private Integer farmId;
+
+    /**
+     * 版本类型 2版本只有一个端口
+     */
+    private String version;
+
+
+}

+ 26 - 0
huimv-env-input/src/main/java/com/huimv/env/input/entity/vo/AlarmInfoVO.java

@@ -0,0 +1,26 @@
+package com.huimv.env.input.entity.vo;
+
+import lombok.Data;
+
+@Data
+public class AlarmInfoVO {
+
+    private String device_id;
+
+    private Integer   error_code;
+    private String   error_value;
+    private Integer   frequency;
+    private String   leakage;
+    private String  volt_a;
+    private String    volt_b;
+    private String  volt_c;
+    private String   curr_a;
+    private String  curr_b;
+    private String  curr_c;
+    private String  temp_a;
+    private String    temp_b;
+    private String    temp_c;
+    private Integer    power_a;
+    private String    power_b;
+    private String    power_c;
+}

+ 28 - 0
huimv-env-input/src/main/java/com/huimv/env/input/entity/vo/DataInfoVO.java

@@ -0,0 +1,28 @@
+package com.huimv.env.input.entity.vo;
+
+import lombok.Data;
+
+@Data
+public class DataInfoVO {
+
+    private String device_id;
+
+    private String   switch_state;
+    private String   frequency;
+    private String   leakage;
+    private String  volt_a;
+    private String    volt_b;
+    private String  volt_c;
+    private String   curr_a;
+    private String  curr_b;
+    private String  curr_c;
+    private String  temp_a;
+    private String    temp_b;
+    private String    temp_c;
+    private String    power_a;
+    private String    power_b;
+    private String    power_c;
+    private String  power_factor;
+    private String   today_elec;
+    private String  total_elec;
+}

+ 14 - 0
huimv-env-input/src/main/java/com/huimv/env/input/entity/vo/HeartInfoVo.java

@@ -0,0 +1,14 @@
+package com.huimv.env.input.entity.vo;
+
+
+import lombok.Data;
+
+@Data
+public class HeartInfoVo {
+    private String device_id;
+    private String device_name;
+    private String device_address;
+    private String mode;
+    private String version;
+    private Integer np;
+}

+ 28 - 0
huimv-env-input/src/main/java/com/huimv/env/input/mapper/GatewayMapper.java

@@ -0,0 +1,28 @@
+package com.huimv.env.input.mapper;
+
+import cn.hutool.core.date.DateTime;
+import com.huimv.env.input.entity.Gateway;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.huimv.env.input.entity.vo.DataInfoVO;
+import com.huimv.env.input.entity.vo.HeartInfoVo;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 采集网关 Mapper 接口
+ * </p>
+ *
+ * @author author
+ * @since 2024-06-19
+ */
+public interface GatewayMapper extends BaseMapper<Gateway> {
+
+    List<Gateway> getUploadFarm();
+
+    List<HeartInfoVo> trackImport(@Param("dateTime") DateTime dateTime, @Param("gateWay") String gateWay);
+
+    List<DataInfoVO> dataImport(@Param("dateTime") DateTime dateTime, @Param("deviceCode") String deviceCode);
+}
+

+ 82 - 34
huimv-env-input/src/main/java/com/huimv/env/input/server/EnvInputServerHandler.java

@@ -5,9 +5,13 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.huimv.env.input.c.MyNativeClass;
 import com.huimv.env.input.config.WeChatMessage;
+import com.huimv.env.input.config.WeChatMessage2;
 import com.huimv.env.input.entity.*;
+import com.huimv.env.input.entity.vo.AlarmInfoVO;
+import com.huimv.env.input.entity.vo.DataInfoVO;
 import com.huimv.env.input.mapper.TerminalPortMapper;
 import com.huimv.env.input.service.*;
+import com.huimv.env.input.utils.ElePostUtils;
 import com.huimv.env.input.ws.WebsocketWorkerUtil;
 import io.netty.buffer.ByteBuf;
 import io.netty.buffer.Unpooled;
@@ -25,16 +29,16 @@ import java.io.*;
 import java.math.BigDecimal;
 import java.text.DecimalFormat;
 import java.text.ParseException;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.Date;
-import java.util.List;
+import java.util.*;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 import java.util.stream.Collectors;
 import java.util.stream.IntStream;
 import java.util.stream.Stream;
 
+import static com.huimv.env.input.timer.ElePostTimer.ALARM_URL;
+import static com.huimv.env.input.timer.ElePostTimer.BASE_URL;
+
 /**
  * @Project : huimv.shiwan
  * @Package : com.huimv.biosafety.uface.controller
@@ -72,6 +76,10 @@ public class EnvInputServerHandler extends ChannelInboundHandlerAdapter {
 
     @Autowired
     private IHeartInfoService heartInfoService;
+    @Autowired
+    private IGatewayService gatewayService;
+
+
 
     @Autowired
     private ISysAccountMultilevelService sysAccountMultilevelService;
@@ -121,7 +129,7 @@ public class EnvInputServerHandler extends ChannelInboundHandlerAdapter {
      * @Date : 2022/3/28
      * @Time : 17:36
      */
-    private void handleClientAskCmd(String clientAskText, ChannelHandlerContext ctx) throws ParseException, IOException {
+    private void handleClientAskCmd(String clientAskText, ChannelHandlerContext ctx) throws  IOException {
         clientAskText = clientAskText.replaceAll("\r", "").replaceAll("\n", "");
         //{处理非正常命令}
 //        int countPlus = regexUtil.countPlus(clientAskText);
@@ -148,7 +156,7 @@ public class EnvInputServerHandler extends ChannelInboundHandlerAdapter {
      * @Date : 2022/3/23
      * @Time : 18:08
      */
-    private void askCmdActuator(String askText, ChannelHandlerContext ctx) throws ParseException, IOException {
+    private void askCmdActuator(String askText, ChannelHandlerContext ctx) throws  IOException {
         System.out.println("======>接收设备请求:" + askText);
         String[] dataArray = askText.split("\\+");
 
@@ -162,11 +170,11 @@ public class EnvInputServerHandler extends ChannelInboundHandlerAdapter {
             askCmdActuatorV2(askText, ctx, dataArray);
         } else {
             askCmdActuatorV1(askText, ctx, dataArray);
-            log.info("当前版本异常[" + askText + "]");
+
         }
     }
 
-    private void askCmdActuatorV2(String askText, ChannelHandlerContext ctx,  String[] dataArray){
+    private void askCmdActuatorV2(String askText, ChannelHandlerContext ctx,  String[] dataArray) throws IOException {
         //芯片id/设备编码
         String cmd = dataArray[1];
         switch (cmd) {
@@ -229,6 +237,10 @@ public class EnvInputServerHandler extends ChannelInboundHandlerAdapter {
                         String ans = "hm+5+1+end";
                         answerCmd(ans,ctx);
                         saveChargingWarning(portChangeData,deviceCode);
+                        EnvData envData  = new EnvData();
+
+                        envData.setActivePower(portChangeData.getActivePower());
+                        pushAlarm(terminalCode +terminalPortCode,12,envData);
                     }else {
                         String ans = "hm+5+0+end";
                         answerCmd(ans,ctx);
@@ -451,10 +463,12 @@ public class EnvInputServerHandler extends ChannelInboundHandlerAdapter {
         List<SysAccountMultilevel> list = sysAccountMultilevelService.list(new QueryWrapper<SysAccountMultilevel>().eq("last_farm_id", deviceCode.getFarmId()).eq("subscribe", 1));
         for (SysAccountMultilevel sysAccountMultilevel : list) {
             WeChatMessage.sendMsg(now,"充电预警",basePigpen1.getBuildName(),basePigpen.getBuildName().substring(basePigpen1.getBuildName().length()),sysAccountMultilevel.getWechatId());
+            WeChatMessage2.sendMsg(now,"充电预警",basePigpen1.getBuildName(),basePigpen.getBuildName().substring(basePigpen1.getBuildName().length()),sysAccountMultilevel.getWechatId());
             sysAccountMultilevel.setSubscribe(0);
             sysAccountMultilevelService.updateById(sysAccountMultilevel);
         }
         WebsocketWorkerUtil.sendWarningMessage(deviceCode.getFarmId(),String.format("%s 充电预警",basePigpen.getBuildName()));
+
     }
 
     private boolean changeDataIsAll(PortChangeData portChangeData) {
@@ -468,7 +482,7 @@ public class EnvInputServerHandler extends ChannelInboundHandlerAdapter {
                 portChangeData.getBeforeElectricCurrent() != null ;
     }
 
-    private void getChuanGanData2(String askText, String[] dataArray, ChannelHandlerContext ctx) {
+    private void getChuanGanData2(String askText, String[] dataArray, ChannelHandlerContext ctx) throws IOException {
         String ans = "hm+2+1+end";
         answerCmd(ans,ctx);
         //hm+2+867699060007086+1+2222+7+260+0+104,17,159+0,0+v2.0+24+end
@@ -509,9 +523,9 @@ public class EnvInputServerHandler extends ChannelInboundHandlerAdapter {
         deviceCode.setStatus(1);
         terminalPortService.updateById(deviceCode);
         //添加报警
-        saveWarning2(gateWayCode,terminalCode,terminalPortCode,deviceCode,splitStatus,now);
+        saveWarning2(gateWayCode,terminalCode,terminalPortCode,deviceCode,splitStatus,now,envData);
     }
-    private void saveWarning2(String gateWayCode,String terminaCode,String terminalPortCode ,TerminalPort terminalPort,int[] splitStatus,Date now) {
+    private void saveWarning2(String gateWayCode,String terminaCode,String terminalPortCode ,TerminalPort terminalPort,int[] splitStatus,Date now,EnvData envData) throws IOException {
         if (splitStatus[0] == 0 && splitStatus[1] == 0 )
             return;
         Integer farmId = terminalPort.getFarmId();
@@ -539,10 +553,12 @@ public class EnvInputServerHandler extends ChannelInboundHandlerAdapter {
             List<SysAccountMultilevel> list = sysAccountMultilevelService.list(new QueryWrapper<SysAccountMultilevel>().eq("last_farm_id", farmId).eq("subscribe", 1));
             for (SysAccountMultilevel sysAccountMultilevel : list) {
                WeChatMessage.sendMsg(now,"充电预警",basePigpen1.getBuildName(),basePigpen.getBuildName().substring(basePigpen1.getBuildName().length()),sysAccountMultilevel.getWechatId());
+                WeChatMessage2.sendMsg(now,"充电预警",basePigpen1.getBuildName(),basePigpen.getBuildName().substring(basePigpen1.getBuildName().length()),sysAccountMultilevel.getWechatId());
                 sysAccountMultilevel.setSubscribe(0);
                 sysAccountMultilevelService.updateById(sysAccountMultilevel);
             }
             WebsocketWorkerUtil.sendWarningMessage(farmId,String.format("%s 高温预警",basePigpen.getBuildName()));
+            pushAlarm(terminaCode +terminalPortCode,2,envData);
         }
         if (splitStatus[1] == 1){
             portWarningInfo.setContent(String.format("%s 漏电预警",basePigpen.getBuildName()));
@@ -552,14 +568,17 @@ public class EnvInputServerHandler extends ChannelInboundHandlerAdapter {
             List<SysAccountMultilevel> list = sysAccountMultilevelService.list(new QueryWrapper<SysAccountMultilevel>().eq("last_farm_id", farmId).eq("subscribe", 1));
             for (SysAccountMultilevel sysAccountMultilevel : list) {
                 WeChatMessage.sendMsg(now,"充电预警",basePigpen1.getBuildName(),basePigpen.getBuildName().substring(basePigpen1.getBuildName().length()),sysAccountMultilevel.getWechatId());
+                WeChatMessage2.sendMsg(now,"充电预警",basePigpen1.getBuildName(),basePigpen.getBuildName().substring(basePigpen1.getBuildName().length()),sysAccountMultilevel.getWechatId());
+
                 sysAccountMultilevel.setSubscribe(0);
                 sysAccountMultilevelService.updateById(sysAccountMultilevel);
             }
             WebsocketWorkerUtil.sendWarningMessage(farmId,String.format("%s 漏电预警",basePigpen.getBuildName()));
+            pushAlarm(terminaCode +terminalPortCode,1,envData);
         }
     }
 
-    private void askCmdActuatorV1(String askText, ChannelHandlerContext ctx,  String[] dataArray){
+    private void askCmdActuatorV1(String askText, ChannelHandlerContext ctx,  String[] dataArray) throws IOException {
         //芯片id/设备编码
         String cmd = dataArray[1];
         switch (cmd) {
@@ -701,7 +720,7 @@ public class EnvInputServerHandler extends ChannelInboundHandlerAdapter {
             log.error(e);
         }
     }
-    private void getHear(String askText,String[] dataArray, ChannelHandlerContext ctx,int version) {
+    private void getHear(String askText,String[] dataArray, ChannelHandlerContext ctx,int version) throws IOException {
         /**
          * 接口中只需要定义你要用到的函数或者公共变量,不需要的可以不定义
          * 映射libadd.so里面的函数,注意类型要匹配
@@ -710,35 +729,28 @@ public class EnvInputServerHandler extends ChannelInboundHandlerAdapter {
         String ans = "hm+1+1+end";
         answerCmd(ans,ctx);
         String gateWayCode = dataArray[2];
-        String  terminalCode = dataArray[3];
+       String  terminalCode = version == 1 ? dataArray[3] : "1";
+
         TerminalPort terminalPort = new TerminalPort();
-         terminalPort.setStatus(1);
+        terminalPort.setStatus(1);
         terminalPortService.update(terminalPort,new UpdateWrapper<TerminalPort>().like("device_code",gateWayCode + terminalCode));
         Terminal terminal = new Terminal();
         terminal.setStatus(1);
         terminalService.update(terminal,new UpdateWrapper<Terminal>().eq("device_code",gateWayCode + terminalCode));
-        switch ( version){
-            case 1:
-                HeartInfo heartInfo1 = new HeartInfo(new Date(), gateWayCode + terminalCode, gateWayCode, askText);
-                heartInfoService.save(heartInfo1);
-                break;
-            case 2:
-                HeartInfo heartInfo2 = new HeartInfo(new Date(), gateWayCode + "1", gateWayCode, askText);
-                heartInfoService.save(heartInfo2);
-                break;
-            default:
-                log.info("未知版本");
-                break;
-        }
+        Gateway gateway = new Gateway();
+        gateway.setStatus(1);
+        gatewayService.update(gateway,new UpdateWrapper<Gateway>().eq("device_code",gateWayCode ));
 
+        HeartInfo heartInfo1 = new HeartInfo(new Date(), gateWayCode + terminalCode, gateWayCode, askText);
+        heartInfoService.save(heartInfo1);
 
     }
 
 
-    private void getChuanGanData(String askText,String[] dataArray, ChannelHandlerContext ctx) {
+    private void getChuanGanData(String askText,String[] dataArray, ChannelHandlerContext ctx) throws IOException {
         String ans = "hm+2+1+end";
         answerCmd(ans,ctx);
-        //hm+1+867699060007086+1+1+242+3+2494+9+0+0+31+0+0+0+V1.0+0+end
+        //hm+2+867699060005643+1+1+2207+0+0+4+1,0,20+0,0,0+v1.0+21+end
         String gateWayCode = dataArray[2];
         String  terminalCode = dataArray[3];
         String terminalPortCode = dataArray[4];
@@ -776,7 +788,7 @@ public class EnvInputServerHandler extends ChannelInboundHandlerAdapter {
             deviceCode.setStatus(1);
             terminalPortService.updateById(deviceCode);
             //添加报警
-            saveWarning(gateWayCode,terminalCode,terminalPortCode,deviceCode,splitStatus,now);
+            saveWarning(gateWayCode,terminalCode,terminalPortCode,deviceCode,splitStatus,now,envData);
 //        }catch (Exception e){
 //            log.error(String.format("端口设备查询失败--> %s" ,askText));
 //            log.error(e);
@@ -784,7 +796,7 @@ public class EnvInputServerHandler extends ChannelInboundHandlerAdapter {
 
     }
 
-    private void saveWarning(String gateWayCode,String terminaCode,String terminalPortCode ,TerminalPort terminalPort,int[] splitStatus,Date now) {
+    private void saveWarning(String gateWayCode,String terminaCode,String terminalPortCode ,TerminalPort terminalPort,int[] splitStatus,Date now,EnvData envData) throws IOException {
         if (splitStatus[0] == 0 && splitStatus[1] == 0 &&splitStatus[2] == 0 )
             return;
         Integer farmId = terminalPort.getFarmId();
@@ -818,11 +830,15 @@ public class EnvInputServerHandler extends ChannelInboundHandlerAdapter {
 
             List<SysAccountMultilevel> list = sysAccountMultilevelService.list(new QueryWrapper<SysAccountMultilevel>().eq("last_farm_id", farmId).eq("subscribe", 1));
             for (SysAccountMultilevel sysAccountMultilevel : list) {
-                WeChatMessage.sendMsg(now,"充电预警",basePigpen1.getBuildName(),basePigpen.getBuildName().substring(basePigpen1.getBuildName().length()),sysAccountMultilevel.getWechatId());
+                WeChatMessage.sendMsg(now,"高温预警",basePigpen1.getBuildName(),basePigpen.getBuildName().substring(basePigpen1.getBuildName().length()),sysAccountMultilevel.getWechatId());
+                WeChatMessage2.sendMsg(now,"高温预警",basePigpen1.getBuildName(),basePigpen.getBuildName().substring(basePigpen1.getBuildName().length()),sysAccountMultilevel.getWechatId());
                 sysAccountMultilevel.setSubscribe(0);
                 sysAccountMultilevelService.updateById(sysAccountMultilevel);
             }
+            //
             WebsocketWorkerUtil.sendWarningMessage(farmId,String.format("%s 高温预警",basePigpen.getBuildName()));
+            //推送事件
+            pushAlarm(terminaCode +terminalPortCode,2,envData);
         }
 
         if (splitStatus[1] == 1){
@@ -832,10 +848,12 @@ public class EnvInputServerHandler extends ChannelInboundHandlerAdapter {
             List<SysAccountMultilevel> list = sysAccountMultilevelService.list(new QueryWrapper<SysAccountMultilevel>().eq("last_farm_id", farmId).eq("subscribe", 1));
             for (SysAccountMultilevel sysAccountMultilevel : list) {
                 WeChatMessage.sendMsg(now,"充电预警",basePigpen1.getBuildName(),basePigpen.getBuildName().substring(basePigpen1.getBuildName().length()),sysAccountMultilevel.getWechatId());
+                WeChatMessage2.sendMsg(now,"充电预警",basePigpen1.getBuildName(),basePigpen.getBuildName().substring(basePigpen1.getBuildName().length()),sysAccountMultilevel.getWechatId());
                 sysAccountMultilevel.setSubscribe(0);
                 sysAccountMultilevelService.updateById(sysAccountMultilevel);
             }
             WebsocketWorkerUtil.sendWarningMessage(farmId,String.format("%s 充电预警",basePigpen.getBuildName()));
+            pushAlarm(terminaCode +terminalPortCode,12,envData);
         }
         if (splitStatus[2] == 1){
             portWarningInfo.setContent(String.format("%s 漏电预警",basePigpen.getBuildName()));
@@ -843,12 +861,42 @@ public class EnvInputServerHandler extends ChannelInboundHandlerAdapter {
             portWarningInfoService.save(portWarningInfo);
             List<SysAccountMultilevel> list = sysAccountMultilevelService.list(new QueryWrapper<SysAccountMultilevel>().eq("last_farm_id", farmId).eq("subscribe", 1));
             for (SysAccountMultilevel sysAccountMultilevel : list) {
-                WeChatMessage.sendMsg(now,"充电预警",basePigpen1.getBuildName(),basePigpen.getBuildName().substring(basePigpen1.getBuildName().length()),sysAccountMultilevel.getWechatId());
+                WeChatMessage.sendMsg(now,"漏电预警",basePigpen1.getBuildName(),basePigpen.getBuildName().substring(basePigpen1.getBuildName().length()),sysAccountMultilevel.getWechatId());
+                WeChatMessage2.sendMsg(now,"漏电预警",basePigpen1.getBuildName(),basePigpen.getBuildName().substring(basePigpen1.getBuildName().length()),sysAccountMultilevel.getWechatId());
                 sysAccountMultilevel.setSubscribe(0);
                 sysAccountMultilevelService.updateById(sysAccountMultilevel);
             }
             WebsocketWorkerUtil.sendWarningMessage(farmId,String.format("%s 漏电预警",basePigpen.getBuildName()));
+            pushAlarm(terminaCode +terminalPortCode,1,envData);
+        }
+    }
+
+    private void pushAlarm(String deviceId,Integer errorCode, EnvData envData) throws IOException {
+        AlarmInfoVO alarmInfoVO = new AlarmInfoVO();
+        alarmInfoVO.setDevice_id(deviceId);
+        alarmInfoVO.setError_code(errorCode);
+        switch (errorCode){
+            case 2:
+                alarmInfoVO.setError_value(envData.getTemp());
+                break;
+            case 1:
+                alarmInfoVO.setError_value(envData.getLeakageValue());
+                break;
+            default :
+//                alarmInfoVO.setError_value(envData.getActivePower());
+                System.out.println("充电报警");
+                break;
         }
+
+        alarmInfoVO.setFrequency(50);
+        alarmInfoVO.setLeakage(envData.getLeakageValue());
+        alarmInfoVO.setVolt_a(envData.getVoltage());
+        alarmInfoVO.setCurr_a(envData.getElectricCurrent());
+        alarmInfoVO.setTemp_a(envData.getTemp());
+        alarmInfoVO.setPower_a(envData.getActivePower());
+        ArrayList<AlarmInfoVO> list1 = new ArrayList<>();
+        list1.add(alarmInfoVO);
+        ElePostUtils.heartPost(BASE_URL + ALARM_URL, envData.getGatwayCode(),list1);
     }
 
     private String getNum(String  num){

+ 11 - 0
huimv-env-input/src/main/java/com/huimv/env/input/service/IBaseFarmService.java

@@ -1,7 +1,13 @@
 package com.huimv.env.input.service;
 
+import cn.hutool.core.date.DateTime;
 import com.huimv.env.input.entity.BaseFarm;
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.huimv.env.input.entity.Gateway;
+import com.huimv.env.input.entity.vo.DataInfoVO;
+import com.huimv.env.input.entity.vo.HeartInfoVo;
+
+import java.util.List;
 
 /**
  * <p>
@@ -13,4 +19,9 @@ import com.baomidou.mybatisplus.extension.service.IService;
  */
 public interface IBaseFarmService extends IService<BaseFarm> {
 
+    List<Gateway> getUploadFarm();
+
+    List<HeartInfoVo> trackImport(DateTime dateTime,String gateWay);
+
+    List<DataInfoVO> dataImport(DateTime dateTime, String deviceCode);
 }

+ 16 - 0
huimv-env-input/src/main/java/com/huimv/env/input/service/IGatewayService.java

@@ -0,0 +1,16 @@
+package com.huimv.env.input.service;
+
+import com.huimv.env.input.entity.Gateway;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * <p>
+ * 采集网关 服务类
+ * </p>
+ *
+ * @author author
+ * @since 2024-06-19
+ */
+public interface IGatewayService extends IService<Gateway> {
+
+}

+ 27 - 0
huimv-env-input/src/main/java/com/huimv/env/input/service/impl/BaseFarmServiceImpl.java

@@ -1,11 +1,20 @@
 package com.huimv.env.input.service.impl;
 
+import cn.hutool.core.date.DateTime;
 import com.huimv.env.input.entity.BaseFarm;
+import com.huimv.env.input.entity.Gateway;
+import com.huimv.env.input.entity.vo.DataInfoVO;
+import com.huimv.env.input.entity.vo.HeartInfoVo;
 import com.huimv.env.input.mapper.BaseFarmMapper;
+import com.huimv.env.input.mapper.GatewayMapper;
 import com.huimv.env.input.service.IBaseFarmService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.text.SimpleDateFormat;
+import java.util.List;
+
 /**
  * <p>
  *  服务实现类
@@ -17,4 +26,22 @@ import org.springframework.stereotype.Service;
 @Service
 public class BaseFarmServiceImpl extends ServiceImpl<BaseFarmMapper, BaseFarm> implements IBaseFarmService {
 
+    @Autowired
+    private GatewayMapper gatewayMapper;
+
+    @Override
+    public List<Gateway> getUploadFarm() {
+        return gatewayMapper.getUploadFarm();
+    }
+
+    @Override
+    public List<HeartInfoVo> trackImport(DateTime dateTime,String gateWay) {
+        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        return gatewayMapper.trackImport(dateTime,gateWay);
+    }
+
+    @Override
+    public  List<DataInfoVO>  dataImport(DateTime dateTime, String deviceCode) {
+        return  gatewayMapper.dataImport(dateTime,deviceCode);
+    }
 }

+ 20 - 0
huimv-env-input/src/main/java/com/huimv/env/input/service/impl/GatewayServiceImpl.java

@@ -0,0 +1,20 @@
+package com.huimv.env.input.service.impl;
+
+import com.huimv.env.input.entity.Gateway;
+import com.huimv.env.input.mapper.GatewayMapper;
+import com.huimv.env.input.service.IGatewayService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 采集网关 服务实现类
+ * </p>
+ *
+ * @author author
+ * @since 2024-06-19
+ */
+@Service
+public class GatewayServiceImpl extends ServiceImpl<GatewayMapper, Gateway> implements IGatewayService {
+
+}

+ 123 - 0
huimv-env-input/src/main/java/com/huimv/env/input/timer/ElePostTimer.java

@@ -0,0 +1,123 @@
+package com.huimv.env.input.timer;
+
+import cn.hutool.core.date.DateTime;
+import cn.hutool.core.date.DateUtil;
+
+import com.huimv.env.input.entity.BasePigpen;
+import com.huimv.env.input.entity.Gateway;
+import com.huimv.env.input.entity.vo.AlarmInfoVO;
+import com.huimv.env.input.entity.vo.DataInfoVO;
+import com.huimv.env.input.entity.vo.HeartInfoVo;
+import com.huimv.env.input.service.IBaseFarmService;
+import com.huimv.env.input.service.IBasePigpenService;
+import com.huimv.env.input.service.IGatewayService;
+import com.huimv.env.input.service.IHeartInfoService;
+import com.huimv.env.input.utils.ElePostUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.scheduling.annotation.EnableScheduling;
+import org.springframework.scheduling.annotation.Scheduled;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.io.IOException;
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+
+/**
+ * @Project : huimv.shiwan
+ * @Package : com.huimv.env.input
+ * @Description : TODO
+ * @Author : yuxuexuan
+ * @Create : 2024/6/19 0019 14:49
+ **/
+//@Configuration
+//@EnableScheduling
+@RestController
+@RequestMapping("/test")
+public class ElePostTimer {
+
+    public static  final  String  BASE_URL = "https://south.bowaniot.com";
+    //网关信息
+    public static  final  String  GATEWAY_INFO_URL = "/airswitch/message/elec/gateway/info/import";
+    //心跳信息
+    public static  final  String  TRACK_URL = "/airswitch/message/elec/track/import";
+    //流水信息
+    public static  final  String  DATA_URL = "/airswitch/message/elec/data/import";
+    //事件数据
+    public static  final  String  ALARM_URL = "/airswitch/message/elec/alarm/import";
+
+    @Autowired
+    private IBaseFarmService baseFarmService;
+    @Autowired
+    private IBasePigpenService basePigpenService;
+
+//    @Scheduled(cron = "0 0 0/1 * * ? ")
+//    @Scheduled(cron = "0 * * * * ? ")
+    @GetMapping("/test")
+    public void  gateWayImport() throws IOException {
+        System.out.println("----网关传输开始----");
+        List<Gateway> gateways = baseFarmService.getUploadFarm();
+        for (Gateway gateway : gateways) {
+            BasePigpen byId = basePigpenService.getById(gateway.getLocationId());
+            HashMap<String, Object> dataMap = new HashMap<>();
+            dataMap.put("mode",null);
+            dataMap.put("version","v1.0");
+            dataMap.put("np",null);
+            dataMap.put("heartbeat",null);
+            dataMap.put("longitude",byId.getLng());
+            dataMap.put("latitude",byId.getLat());
+            dataMap.put("imsi",null);
+            dataMap.put("iccid",null);
+            System.out.println("result--->"+ElePostUtils.basePost(BASE_URL + GATEWAY_INFO_URL, gateway.getDeviceCode(), dataMap));
+        }
+        System.out.println("----网关传输结束----");
+    }
+
+
+//    @Scheduled(cron = "5 * * * * ? ")
+    @GetMapping("/test1")
+    public void  trackImport() throws IOException {
+        System.out.println("----心跳传输开始----");
+        List<Gateway> gateways = baseFarmService.getUploadFarm();
+        for (Gateway gateway : gateways) {
+            DateTime dateTime = DateUtil.offsetMinute(new Date(), -1);
+            List<HeartInfoVo> heartInfoVos = baseFarmService.trackImport(dateTime,gateway.getDeviceCode());
+            System.out.println("result--->"+ElePostUtils.heartPost(BASE_URL + TRACK_URL, gateway.getDeviceCode(), heartInfoVos));
+        }
+        System.out.println("----心跳传输结束----");
+
+    }
+
+//    @Scheduled(cron = "10 * * * * ? ")
+    @GetMapping("/test2")
+    public void  dataImport() throws IOException {
+        System.out.println("----流水传输开始----");
+        List<Gateway> gateways = baseFarmService.getUploadFarm();
+        for (Gateway gateway : gateways) {
+            DateTime dateTime = DateUtil.offsetMinute(new Date(), -1);
+            List<DataInfoVO> dataInfoVOS = baseFarmService.dataImport(dateTime,gateway.getDeviceCode());
+            System.out.println("result--->"+ElePostUtils.heartPost(BASE_URL + DATA_URL, gateway.getDeviceCode(), dataInfoVOS));
+        }
+        System.out.println("----流水传输结束----");
+
+    }
+
+//    @Scheduled(cron = "1 * * * * ? ")
+//    public void  alarmImport() throws IOException {
+//        System.out.println("----事件传输开始----");
+//        List<Gateway> gateways = baseFarmService.getUploadFarm();
+//        for (Gateway gateway : gateways) {
+//            DateTime dateTime = DateUtil.offsetMinute(new Date(), -1);
+//            List<AlarmInfoVO> dataInfoVOS = baseFarmService.alarmImport(dateTime,gateway.getDeviceCode());
+//            System.out.println("data--->"+dataInfoVOS.toString());
+//            System.out.println("result--->"+ElePostUtils.heartPost(BASE_URL + ALARM_URL, gateway.getDeviceCode(), dataInfoVOS));
+//        }
+//        System.out.println("----事件传输结束----");
+//
+//    }
+
+
+}

+ 48 - 0
huimv-env-input/src/main/java/com/huimv/env/input/utils/ElePostUtils.java

@@ -0,0 +1,48 @@
+package com.huimv.env.input.utils;
+
+
+import com.alibaba.fastjson.JSONObject;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public  class ElePostUtils {
+
+
+
+    public static String basePost(String url,String deviceId, Map data) throws IOException {
+        long currentTimeMillis = System.currentTimeMillis();
+
+        Map map = new HashMap();
+        map.put("message_id",currentTimeMillis);
+        map.put("gateway_id",deviceId);
+        map.put("timestamp",currentTimeMillis / 1000);
+        map.put("method","4g");
+        map.put("signal",null);
+//        List list = new ArrayList();
+//        list.add(data);
+        map.put("data",data);
+        String string = JSONObject.toJSONString(map);
+        System.out.println("data---->" + string);
+         return   HttpClientUtil.post(url, string);
+    }
+
+    public static String heartPost(String url,String deviceId, List data) throws IOException {
+        long currentTimeMillis = System.currentTimeMillis();
+
+        Map map = new HashMap();
+        map.put("message_id",currentTimeMillis);
+        map.put("device_id",deviceId);
+        map.put("timestamp",currentTimeMillis / 1000);
+        map.put("method","4g");
+        map.put("signal",null);
+        map.put("data",data);
+        String string = JSONObject.toJSONString(map);
+        System.out.println("data---->" + string);
+        return   HttpClientUtil.post(url, string);
+    }
+
+}

+ 172 - 0
huimv-env-input/src/main/java/com/huimv/env/input/utils/HttpClientUtil.java

@@ -0,0 +1,172 @@
+package com.huimv.env.input.utils;
+
+import com.alibaba.fastjson.JSONObject;
+import org.apache.http.HttpResponse;
+import org.apache.http.NameValuePair;
+import org.apache.http.client.HttpClient;
+import org.apache.http.client.config.RequestConfig;
+import org.apache.http.client.entity.UrlEncodedFormEntity;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.client.methods.HttpPost;
+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.message.BasicNameValuePair;
+import org.apache.http.util.EntityUtils;
+import org.apache.logging.log4j.LogManager;
+import org.apache.logging.log4j.Logger;
+import org.springframework.util.ObjectUtils;
+
+import java.io.*;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+
+public class HttpClientUtil {
+    private static final Logger logger = LogManager.getLogger(HttpClientUtil.class);
+
+
+
+    /**
+     * 封装POST请求(Map入参)
+     *
+     * @param url 请求的路径
+     * @param map 请求的参数
+     * @return
+     * @throws IOException
+     */
+    public static String post(String url, Map map) throws IOException {
+        // 1、创建HttpClient对象
+        CloseableHttpClient httpClient = HttpClients.createDefault();
+        // 2、创建请求方式的实例
+        HttpPost httpPost = new HttpPost();
+        try {
+            httpPost.setURI(new URI(url));
+        } catch (URISyntaxException e) {
+            e.printStackTrace();
+        }
+        // 3、添加请求参数(设置请求和传输超时时间)
+        RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(60000).setConnectTimeout(60000).build();
+        httpPost.setConfig(requestConfig);
+
+        ArrayList<NameValuePair> list = new ArrayList<>();
+        Set<Map.Entry> entrySet = map.entrySet();
+        for (Map.Entry entry : entrySet) {
+            String key = entry.getKey().toString();
+            String value = entry.getValue().toString();
+            list.add(new BasicNameValuePair(key, value));
+        }
+        httpPost.setEntity(new UrlEncodedFormEntity(list, org.apache.http.protocol.HTTP.UTF_8));
+        // 4、发送Http请求
+        HttpResponse response = httpClient.execute(httpPost);
+        // 5、获取返回的内容
+        String result = null;
+        int statusCode = response.getStatusLine().getStatusCode();
+        if (200 == statusCode) {
+            result = EntityUtils.toString(response.getEntity());
+        } else {
+            logger.info("请求第三方接口出现错误,状态码为:{}", statusCode);
+            return null;
+        }
+        // 6、释放资源
+        httpPost.abort();
+        httpClient.getConnectionManager().shutdown();
+        return result;
+    }
+
+    /**
+     * 封装POST请求(String入参)
+     *
+     * @param url  请求的路径
+     * @param data String类型数据
+     * @return
+     * @throws IOException
+     */
+    public static String post(String url, String data) throws IOException {
+        // 1、创建HttpClient对象
+        HttpClient httpClient = HttpClientBuilder.create().build();
+        // 2、创建请求方式的实例
+        HttpPost httpPost = new HttpPost(url);
+        // 3、添加请求参数(设置请求和传输超时时间)
+        RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(60000).setConnectTimeout(60000).build();
+        httpPost.setConfig(requestConfig);
+        httpPost.setHeader("Accept", "application/json");
+        httpPost.setHeader("Content-Type", "application/json");
+        // 设置请求参数
+        httpPost.setEntity(new StringEntity(data, "UTF-8"));
+        // 4、发送Http请求
+        HttpResponse response = httpClient.execute(httpPost);
+        // 5、获取返回的内容
+        String result = null;
+        int statusCode = response.getStatusLine().getStatusCode();
+        if (200 == statusCode) {
+            result = EntityUtils.toString(response.getEntity());
+        } else {
+            logger.info("请求第三方接口出现错误,状态码为:{}", statusCode);
+            return null;
+        }
+        // 6、释放资源
+        httpPost.abort();
+        httpClient.getConnectionManager().shutdown();
+        return result;
+    }
+
+    /**
+     * 封装GET请求
+     *
+     * @param url
+     * @return
+     * @throws IOException
+     */
+    public static String get(String url) throws IOException {
+        // 1、创建HttpClient对象
+        HttpClient httpClient = HttpClientBuilder.create().build();
+        // 2、创建请求方式的实例
+        HttpGet httpGet = new HttpGet(url);
+        // 3、添加请求参数(设置请求和传输超时时间)
+        RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(60000).setConnectTimeout(60000).build();
+        httpGet.setConfig(requestConfig);
+        // 4、发送Http请求
+        HttpResponse response = httpClient.execute(httpGet);
+        // 5、获取返回的内容
+        String result = null;
+        int statusCode = response.getStatusLine().getStatusCode();
+        if (200 == statusCode) {
+            result = EntityUtils.toString(response.getEntity());
+        } else {
+            logger.info("请求第三方接口出现错误,状态码为:{}", statusCode);
+            return null;
+        }
+        // 6、释放资源
+        httpGet.abort();
+        httpClient.getConnectionManager().shutdown();
+        return result;
+    }
+
+    public static void main(String[] args) throws IOException {
+        String url = "https://south.bowaniot.com";
+        String trackUrl = "/airswitch/message/elec/track/import";
+        Map map = new HashMap();
+        map.put("message_id",1);
+        map.put("device_id","867699060007086");
+        map.put("timestamp",System.currentTimeMillis() / 1000);
+        map.put("method","4g");
+        map.put("signal",-1);
+        HashMap<Object, Object> dataMap = new HashMap<>();
+        dataMap.put("mode","ss");
+        map.put("data",dataMap);
+//        System.out.println(post(url + trackUrl, map));
+        System.out.println(post(url + trackUrl, JSONObject.toJSONString(map)));
+//        System.out.println(post(url + trackUrl, map));
+//
+//        Map<String, Object> map = new HashMap<>();
+//        map.put("accountName", "1");
+//        map.put("password", "1");
+//        System.out.println(post("https://smartele.ifarmcloud.com/smarteleApi/admin/my/loginMultilevel", JSONObject.toJSONString(map)));
+
+    }
+}

+ 4 - 58
huimv-env-input/src/main/resources/application-prod.yml

@@ -18,38 +18,6 @@ spring:
     database-platform: org.hibernate.dialect.MySQL5InnoDBDialect
     open-in-view: true
 
-#mybatis-plus:
-#  configuration:
-#    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
-
-  #配置rabbitMq 服务器
-#  rabbitmq:
-#    host: 10.0.0.4
-#    port: 5672
-#    username: huimv
-#    password: hm123456
-#    #虚拟host 可以不设置,使用server默认host
-#    virtual-host: /
-#  rabbitmq:
-#    host: 121.36.134.218
-#    port: 5672
-#    username: admin
-#    password: admin
-#    #虚拟host 可以不设置,使用server默认host
-#    virtual-host: /env
-#
-#    #确认消息已发送到交换机(Exchange)
-##    publisher-confirms: true #(过时、弃用)
-#    publisher-confirm-type: correlated
-#    #确认消息已发送到队列(Queue)
-#    publisher-returns: true
-
-  #redis
-#  redis:
-#    host: 122.112.224.199
-#    port: 6379
-#    password: hm123456
-
   data:
     redis:
       repositories:
@@ -59,32 +27,10 @@ spring:
   cache:
     redis:
       cache-null-values: false
-
-
-
-    #server:
-#  port: 9110
-#spring:
-#  application:
-#    name: huimv-hy-autoGetData
-#
-#  datasource:
-##    url: jdbc:mysql://47.98.175.112:3306/huimv_ql_farm_haiyan?useUnicode=true&characterEncoding=UTF-8&useSSL=false&autoReconnect=true&serverTimezone=Asia/Shanghai
-#    #    url: jdbc:mysql://36.22.189.214:3306/huimv_ql_farm?useUnicode=true&characterEncoding=UTF-8&useSSL=false&autoReconnect=true&serverTimezone=Asia/Shanghai
-#        url: jdbc:mysql://192.168.1.7:3306/huimv_ql_farm?useUnicode=true&characterEncoding=UTF-8&useSSL=false&autoReconnect=true&serverTimezone=Asia/Shanghai
-#    username: root
-#    password: hm123456
-#    driver-class-name: com.mysql.cj.jdbc.Driver
-#  jpa:
-#    properties:
-#      hibernate:
-#        enable_lazy_load_no_trans: true
-#    show-sql: true
-#    database: mysql
-#    hibernate:
-#      ddl-auto: update
-#    database-platform: org.hibernate.dialect.MySQL5InnoDBDialect
-#    open-in-view: true
+mybatis-plus:
+  configuration:
+      log-impl: org.apache.ibatis.logging.nologging.NoLoggingImpl
+#    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
 management:
   endpoints:
     web:

huimv-env-input/src/main/resources/com/huimv/env/mapper/BaseFarmMapper.xml → huimv-env-input/src/main/resources/com/huimv/env/input/mapper/BaseFarmMapper.xml


huimv-env-input/src/main/resources/com/huimv/env/mapper/BasePigpenMapper.xml → huimv-env-input/src/main/resources/com/huimv/env/input/mapper/BasePigpenMapper.xml


huimv-env-input/src/main/resources/com/huimv/env/mapper/EnvDataMapper.xml → huimv-env-input/src/main/resources/com/huimv/env/input/mapper/EnvDataMapper.xml


+ 53 - 0
huimv-env-input/src/main/resources/com/huimv/env/input/mapper/GatewayMapper.xml

@@ -0,0 +1,53 @@
+<?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.env.input.mapper.GatewayMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.huimv.env.input.entity.Gateway">
+        <id column="id" property="id" />
+        <result column="device_code" property="deviceCode" />
+        <result column="device_name" property="deviceName" />
+        <result column="type" property="type" />
+        <result column="location_id" property="locationId" />
+        <result column="status" property="status" />
+        <result column="terminal_num" property="terminalNum" />
+        <result column="farm_id" property="farmId" />
+        <result column="version" property="version" />
+    </resultMap>
+    <select id="getUploadFarm" resultType="com.huimv.env.input.entity.Gateway">
+                SELECT a.* FROM `gateway` a LEFT JOIN  base_farm  b ON a.farm_id = b.id WHERE b.is_upload =1
+    </select>
+
+    <select id="dataImport" resultType="com.huimv.env.input.entity.vo.DataInfoVO">
+    SELECT
+      RIGHT(terminal_port_code, CHAR_LENGTH(terminal_port_code) - CHAR_LENGTH(gatway_code)) AS device_id ,
+       50   AS frequency ,
+       leakage_value leakage,
+      voltage  volt_a ,
+      electric_current  curr_a,
+     temp  temp_a,
+    active_power  power_a
+      FROM `env_data`   WHERE
+      create_time &gt;= #{dateTime} and gatway_code =#{deviceCode} ;
+      </select>
+    <select id="trackImport" resultType="com.huimv.env.input.entity.vo.HeartInfoVo">
+         SELECT
+
+            RIGHT(a.device_code, CHAR_LENGTH(h.terminal_code) - CHAR_LENGTH(h.gatway_code)) AS device_id,
+            a.device_name AS device_name,
+            c.build_name AS device_address,
+            a.type AS `version`
+        FROM
+            heart_info h
+        LEFT JOIN
+            `terminal` a ON h.terminal_code = a.device_code
+        JOIN
+            base_farm b ON a.farm_id = b.id
+        LEFT JOIN
+            base_pigpen c ON a.floor_id = c.id
+        WHERE
+            b.is_upload = 1 and h.create_time &gt;= #{dateTime} and h.gatway_code =#{gateWay} ;
+
+    </select>
+
+</mapper>

huimv-env-input/src/main/resources/com/huimv/env/mapper/HeartInfoMapper.xml → huimv-env-input/src/main/resources/com/huimv/env/input/mapper/HeartInfoMapper.xml


huimv-env-input/src/main/resources/mapper/PortChangeDataMapper.xml → huimv-env-input/src/main/resources/com/huimv/env/input/mapper/PortChangeDataMapper.xml


huimv-env-input/src/main/resources/com/huimv/env/mapper/PortWarningInfoMapper.xml → huimv-env-input/src/main/resources/com/huimv/env/input/mapper/PortWarningInfoMapper.xml


huimv-env-input/src/main/resources/mapper/SysAccountMultilevelMapper.xml → huimv-env-input/src/main/resources/com/huimv/env/input/mapper/SysAccountMultilevelMapper.xml


huimv-env-input/src/main/resources/mapper/TerminalMapper.xml → huimv-env-input/src/main/resources/com/huimv/env/input/mapper/TerminalMapper.xml


huimv-env-input/src/main/resources/com/huimv/env/mapper/TerminalPortMapper.xml → huimv-env-input/src/main/resources/com/huimv/env/input/mapper/TerminalPortMapper.xml


+ 7 - 57
huimv-env-input/target/classes/application-prod.yml

@@ -6,9 +6,9 @@ spring:
     name: huimv-env-input
 
   datasource:
-    url: jdbc:mysql://139.9.172.209:3309/huimv-farm-env?useUnicode=true&characterEncoding=UTF-8&useSSL=false&autoReconnect=true&serverTimezone=Asia/Shanghai
-    username: eartag
-    password: eartag@2022
+    url: jdbc:mysql://122.112.219.87:3306/huimv-new-input?useUnicode=true&characterEncoding=UTF-8&useSSL=false&autoReconnect=true&serverTimezone=Asia/Shanghai
+    username: root
+    password: ?root@huimv_farm!
     driver-class-name: com.mysql.cj.jdbc.Driver
   jpa:
     show-sql: true
@@ -18,34 +18,6 @@ spring:
     database-platform: org.hibernate.dialect.MySQL5InnoDBDialect
     open-in-view: true
 
-  #配置rabbitMq 服务器
-#  rabbitmq:
-#    host: 10.0.0.4
-#    port: 5672
-#    username: huimv
-#    password: hm123456
-#    #虚拟host 可以不设置,使用server默认host
-#    virtual-host: /
-  rabbitmq:
-    host: 121.36.134.218
-    port: 5672
-    username: admin
-    password: admin
-    #虚拟host 可以不设置,使用server默认host
-    virtual-host: /env
-
-    #确认消息已发送到交换机(Exchange)
-#    publisher-confirms: true #(过时、弃用)
-    publisher-confirm-type: correlated
-    #确认消息已发送到队列(Queue)
-    publisher-returns: true
-
-  #redis
-  redis:
-    host: 122.112.224.199
-    port: 6379
-    password: hm123456
-
   data:
     redis:
       repositories:
@@ -55,32 +27,10 @@ spring:
   cache:
     redis:
       cache-null-values: false
-
-
-
-    #server:
-#  port: 9110
-#spring:
-#  application:
-#    name: huimv-hy-autoGetData
-#
-#  datasource:
-##    url: jdbc:mysql://47.98.175.112:3306/huimv_ql_farm_haiyan?useUnicode=true&characterEncoding=UTF-8&useSSL=false&autoReconnect=true&serverTimezone=Asia/Shanghai
-#    #    url: jdbc:mysql://36.22.189.214:3306/huimv_ql_farm?useUnicode=true&characterEncoding=UTF-8&useSSL=false&autoReconnect=true&serverTimezone=Asia/Shanghai
-#        url: jdbc:mysql://192.168.1.7:3306/huimv_ql_farm?useUnicode=true&characterEncoding=UTF-8&useSSL=false&autoReconnect=true&serverTimezone=Asia/Shanghai
-#    username: root
-#    password: hm123456
-#    driver-class-name: com.mysql.cj.jdbc.Driver
-#  jpa:
-#    properties:
-#      hibernate:
-#        enable_lazy_load_no_trans: true
-#    show-sql: true
-#    database: mysql
-#    hibernate:
-#      ddl-auto: update
-#    database-platform: org.hibernate.dialect.MySQL5InnoDBDialect
-#    open-in-view: true
+mybatis-plus:
+  configuration:
+      log-impl: org.apache.ibatis.logging.nologging.NoLoggingImpl
+#    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
 management:
   endpoints:
     web:

BIN
huimv-env-input/target/classes/com/huimv/env/input/HuimvEnvInputApplication.class


BIN
huimv-env-input/target/classes/com/huimv/env/input/server/EnvInputServerHandler.class


BIN
huimv-env-input/target/huimv-new-env-input-0.0.1-SNAPSHOT.jar


BIN
huimv-env-input/target/huimv-new-env-input-0.0.1-SNAPSHOT.jar.original


+ 1 - 1
huimv-env-input/target/maven-archiver/pom.properties

@@ -1,3 +1,3 @@
 artifactId=huimv-new-env-input
-groupId=org.springframework.boot
+groupId=com.huimv
 version=0.0.1-SNAPSHOT

+ 0 - 4
huimv-env-input/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst

@@ -1,4 +0,0 @@
-com\huimv\env\input\HuimvEnvInputApplication.class
-com\huimv\env\input\server\EnvInputServerHandler.class
-com\huimv\env\input\server\EnvInputServer$1.class
-com\huimv\env\input\server\EnvInputServer.class

+ 66 - 7
huimv-env-input/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst

@@ -1,10 +1,69 @@
-G:\idea\huimv-2022\huimv-new-input\huimv-env-input\src\main\java\com\huimv\env\input\service\impl\CommandProcessorServiceImpl.java
+G:\idea\huimv-2022\huimv-new-input\huimv-env-input\src\main\java\com\huimv\env\input\controller\EnvDataController.java
+G:\idea\huimv-2022\huimv-new-input\huimv-env-input\src\main\java\com\huimv\env\input\mapper\SysAccountMultilevelMapper.java
+G:\idea\huimv-2022\huimv-new-input\huimv-env-input\src\main\java\com\huimv\env\input\utils\ElePostUtils.java
+G:\idea\huimv-2022\huimv-new-input\huimv-env-input\src\main\java\com\huimv\env\input\controller\SysAccountMultilevelController.java
+G:\idea\huimv-2022\huimv-new-input\huimv-env-input\src\main\java\com\huimv\env\input\service\IEnvDataService.java
+G:\idea\huimv-2022\huimv-new-input\huimv-env-input\src\main\java\com\huimv\env\input\entity\HeartInfo.java
+G:\idea\huimv-2022\huimv-new-input\huimv-env-input\src\main\java\com\huimv\env\input\service\impl\SysAccountMultilevelServiceImpl.java
+G:\idea\huimv-2022\huimv-new-input\huimv-env-input\src\main\java\com\huimv\env\input\service\IHeartInfoService.java
+G:\idea\huimv-2022\huimv-new-input\huimv-env-input\src\main\java\com\huimv\env\input\service\ITerminalPortService.java
+G:\idea\huimv-2022\huimv-new-input\huimv-env-input\src\main\java\com\huimv\env\input\mapper\BasePigpenMapper.java
 G:\idea\huimv-2022\huimv-new-input\huimv-env-input\src\main\java\com\huimv\env\input\producer\Producer.java
-G:\idea\huimv-2022\huimv-new-input\huimv-env-input\src\main\java\com\huimv\env\input\utils\DSendSMS.java
-G:\idea\huimv-2022\huimv-new-input\huimv-env-input\src\main\java\com\huimv\env\input\server\EnvInputServerHandler.java
+G:\idea\huimv-2022\huimv-new-input\huimv-env-input\src\main\java\com\huimv\env\input\controller\TerminalPortController.java
+G:\idea\huimv-2022\huimv-new-input\huimv-env-input\src\main\java\com\huimv\env\input\mapper\TerminalPortMapper.java
+G:\idea\huimv-2022\huimv-new-input\huimv-env-input\src\main\java\com\huimv\env\input\config\WebSocketConfiguration.java
+G:\idea\huimv-2022\huimv-new-input\huimv-env-input\src\main\java\com\huimv\env\input\service\impl\PortChangeDataServiceImpl.java
+G:\idea\huimv-2022\huimv-new-input\huimv-env-input\src\main\java\com\huimv\env\input\service\ISysAccountMultilevelService.java
+G:\idea\huimv-2022\huimv-new-input\huimv-env-input\src\main\java\com\huimv\env\input\ws\WebsocketWorkerUtil.java
+G:\idea\huimv-2022\huimv-new-input\huimv-env-input\src\main\java\com\huimv\env\input\entity\vo\HeartInfoVo.java
+G:\idea\huimv-2022\huimv-new-input\huimv-env-input\src\main\java\com\huimv\env\input\entity\SysAccountMultilevel.java
+G:\idea\huimv-2022\huimv-new-input\huimv-env-input\src\main\java\com\huimv\env\input\entity\Terminal.java
+G:\idea\huimv-2022\huimv-new-input\huimv-env-input\src\main\java\com\huimv\env\input\service\impl\TerminalServiceImpl.java
+G:\idea\huimv-2022\huimv-new-input\huimv-env-input\src\main\java\com\huimv\env\input\entity\PortChangeData.java
+G:\idea\huimv-2022\huimv-new-input\huimv-env-input\src\main\java\com\huimv\env\input\service\impl\BasePigpenServiceImpl.java
+G:\idea\huimv-2022\huimv-new-input\huimv-env-input\src\main\java\com\huimv\env\input\ws\WorkerController.java
+G:\idea\huimv-2022\huimv-new-input\huimv-env-input\src\main\java\com\huimv\env\input\entity\PortWarningInfo.java
+G:\idea\huimv-2022\huimv-new-input\huimv-env-input\src\main\java\com\huimv\env\input\controller\GatewayController.java
+G:\idea\huimv-2022\huimv-new-input\huimv-env-input\src\main\java\com\huimv\env\input\service\IPortWarningInfoService.java
+G:\idea\huimv-2022\huimv-new-input\huimv-env-input\src\main\java\com\huimv\env\input\server\EnvInputServer.java
+G:\idea\huimv-2022\huimv-new-input\huimv-env-input\src\main\java\com\huimv\env\input\controller\PortWarningInfoController.java
 G:\idea\huimv-2022\huimv-new-input\huimv-env-input\src\main\java\com\huimv\env\input\service\ICommandProcessorService.java
-G:\idea\huimv-2022\huimv-new-input\huimv-env-input\src\main\java\com\huimv\env\input\config\TopicRabbitMQConfig.java
 G:\idea\huimv-2022\huimv-new-input\huimv-env-input\src\main\java\com\huimv\env\input\HuimvEnvInputApplication.java
-G:\idea\huimv-2022\huimv-new-input\huimv-env-input\src\main\java\com\huimv\env\input\utils\DateUtil2.java
-G:\idea\huimv-2022\huimv-new-input\huimv-env-input\src\main\java\com\huimv\env\input\server\EnvInputServer.java
-G:\idea\huimv-2022\huimv-new-input\huimv-env-input\src\main\java\com\huimv\env\input\utils\SendSMS.java
+G:\idea\huimv-2022\huimv-new-input\huimv-env-input\src\main\java\com\huimv\env\input\service\impl\EnvDataServiceImpl.java
+G:\idea\huimv-2022\huimv-new-input\huimv-env-input\src\main\java\com\huimv\env\input\service\ITerminalService.java
+G:\idea\huimv-2022\huimv-new-input\huimv-env-input\src\main\java\com\huimv\env\input\utils\HttpClientUtil.java
+G:\idea\huimv-2022\huimv-new-input\huimv-env-input\src\main\java\com\huimv\env\input\controller\HeartInfoController.java
+G:\idea\huimv-2022\huimv-new-input\huimv-env-input\src\main\java\com\huimv\env\input\service\IBaseFarmService.java
+G:\idea\huimv-2022\huimv-new-input\huimv-env-input\src\main\java\com\huimv\env\input\entity\EnvData.java
+G:\idea\huimv-2022\huimv-new-input\huimv-env-input\src\main\java\com\huimv\env\input\service\impl\BaseFarmServiceImpl.java
+G:\idea\huimv-2022\huimv-new-input\huimv-env-input\src\main\java\com\huimv\env\input\entity\vo\AlarmInfoVO.java
+G:\idea\huimv-2022\huimv-new-input\huimv-env-input\src\main\java\com\huimv\env\input\mapper\PortWarningInfoMapper.java
+G:\idea\huimv-2022\huimv-new-input\huimv-env-input\src\main\java\com\huimv\env\input\server\EnvInputServerHandler.java
+G:\idea\huimv-2022\huimv-new-input\huimv-env-input\src\main\java\com\huimv\env\input\service\IPortChangeDataService.java
+G:\idea\huimv-2022\huimv-new-input\huimv-env-input\src\main\java\com\huimv\env\input\entity\vo\DataInfoVO.java
+G:\idea\huimv-2022\huimv-new-input\huimv-env-input\src\main\java\com\huimv\env\input\service\impl\PortWarningInfoServiceImpl.java
+G:\idea\huimv-2022\huimv-new-input\huimv-env-input\src\main\java\com\huimv\env\input\mapper\PortChangeDataMapper.java
+G:\idea\huimv-2022\huimv-new-input\huimv-env-input\src\main\java\com\huimv\env\input\service\impl\GatewayServiceImpl.java
+G:\idea\huimv-2022\huimv-new-input\huimv-env-input\src\main\java\com\huimv\env\input\entity\BasePigpen.java
+G:\idea\huimv-2022\huimv-new-input\huimv-env-input\src\main\java\com\huimv\env\input\controller\PortChangeDataController.java
+G:\idea\huimv-2022\huimv-new-input\huimv-env-input\src\main\java\com\huimv\env\input\c\MyNativeClass.java
+G:\idea\huimv-2022\huimv-new-input\huimv-env-input\src\main\java\com\huimv\env\input\mapper\BaseFarmMapper.java
+G:\idea\huimv-2022\huimv-new-input\huimv-env-input\src\main\java\com\huimv\env\input\service\IBasePigpenService.java
+G:\idea\huimv-2022\huimv-new-input\huimv-env-input\src\main\java\com\huimv\env\input\service\IGatewayService.java
+G:\idea\huimv-2022\huimv-new-input\huimv-env-input\src\main\java\com\huimv\env\input\timer\ElePostTimer.java
+G:\idea\huimv-2022\huimv-new-input\huimv-env-input\src\main\java\com\huimv\env\input\controller\BasePigpenController.java
+G:\idea\huimv-2022\huimv-new-input\huimv-env-input\src\main\java\com\huimv\env\input\service\impl\HeartInfoServiceImpl.java
+G:\idea\huimv-2022\huimv-new-input\huimv-env-input\src\main\java\com\huimv\env\input\controller\BaseFarmController.java
+G:\idea\huimv-2022\huimv-new-input\huimv-env-input\src\main\java\com\huimv\env\input\mapper\HeartInfoMapper.java
+G:\idea\huimv-2022\huimv-new-input\huimv-env-input\src\main\java\com\huimv\env\input\config\TopicRabbitMQConfig.java
+G:\idea\huimv-2022\huimv-new-input\huimv-env-input\src\main\java\com\huimv\env\input\mapper\EnvDataMapper.java
+G:\idea\huimv-2022\huimv-new-input\huimv-env-input\src\main\java\com\huimv\env\input\config\WeChatMessage2.java
+G:\idea\huimv-2022\huimv-new-input\huimv-env-input\src\main\java\com\huimv\env\input\entity\TerminalPort.java
+G:\idea\huimv-2022\huimv-new-input\huimv-env-input\src\main\java\com\huimv\env\input\service\impl\CommandProcessorServiceImpl.java
+G:\idea\huimv-2022\huimv-new-input\huimv-env-input\src\main\java\com\huimv\env\input\controller\TerminalController.java
+G:\idea\huimv-2022\huimv-new-input\huimv-env-input\src\main\java\com\huimv\env\input\config\WeChatMessage.java
+G:\idea\huimv-2022\huimv-new-input\huimv-env-input\src\main\java\com\huimv\env\input\mapper\TerminalMapper.java
+G:\idea\huimv-2022\huimv-new-input\huimv-env-input\src\main\java\com\huimv\env\input\service\impl\TerminalPortServiceImpl.java
+G:\idea\huimv-2022\huimv-new-input\huimv-env-input\src\main\java\com\huimv\env\input\entity\Gateway.java
+G:\idea\huimv-2022\huimv-new-input\huimv-env-input\src\main\java\com\huimv\env\input\entity\BaseFarm.java
+G:\idea\huimv-2022\huimv-new-input\huimv-env-input\src\main\java\com\huimv\env\input\mapper\GatewayMapper.java