Procházet zdrojové kódy

增加新的RabbitMQ虚拟机服务器(192.168.1.82)

zhuoning před 2 roky
rodič
revize
10ae36f9c3
14 změnil soubory, kde provedl 609 přidání a 118 odebrání
  1. 2 0
      huimv-eartag2-platform/huimv-eartag2-common/src/main/java/com/huimv/eartag2/common/dao/repo/EartagEartagRegister2EntityRepo.java
  2. 38 0
      huimv-eartag2-platform/huimv-eartag2-common/src/main/java/com/huimv/eartag2/common/utils/FileUtil.java
  3. 107 0
      huimv-eartag2-platform/huimv-eartag2-device/src/main/resources/application-test.yml
  4. 1 1
      huimv-eartag2-platform/huimv-eartag2-device/src/main/resources/application.properties
  5. 31 1
      huimv-eartag2-platform/huimv-eartag2-eartag/src/main/java/com/huimv/eartag2/eartag/listener/EartagListener.java
  6. 82 54
      huimv-eartag2-platform/huimv-eartag2-eartag/src/main/java/com/huimv/eartag2/eartag/service/impl/EartagServiceImpl.java
  7. 107 0
      huimv-eartag2-platform/huimv-eartag2-eartag/src/main/resources/application-test.yml
  8. 1 1
      huimv-eartag2-platform/huimv-eartag2-eartag/src/main/resources/application.properties
  9. 93 38
      huimv-eartag2-platform/huimv-eartag2-input/src/main/java/com/huimv/eartag2/config/TopicRabbitMQConfig.java
  10. 32 20
      huimv-eartag2-platform/huimv-eartag2-input/src/main/java/com/huimv/eartag2/server/EartagServerHandler2.java
  11. 2 1
      huimv-eartag2-platform/huimv-eartag2-input/src/main/java/com/huimv/eartag2/service/IDataService.java
  12. 8 1
      huimv-eartag2-platform/huimv-eartag2-input/src/main/java/com/huimv/eartag2/service/impl/DataServiceImpl.java
  13. 104 0
      huimv-eartag2-platform/huimv-eartag2-input/src/main/resources/application-test.yml
  14. 1 1
      huimv-eartag2-platform/huimv-eartag2-input/src/main/resources/application.properties

+ 2 - 0
huimv-eartag2-platform/huimv-eartag2-common/src/main/java/com/huimv/eartag2/common/dao/repo/EartagEartagRegister2EntityRepo.java

@@ -12,4 +12,6 @@ public interface EartagEartagRegister2EntityRepo extends JpaRepository<EartagEar
     @Query(nativeQuery=true, value="SELECT * FROM eartag_eartag_register2 WHERE farm_id=?2 AND earmark=?1")
     EartagEartagRegister2Entity getOneByEarmark(String earmark,String farmId);
 
+    @Query(nativeQuery=true, value="SELECT * FROM eartag_eartag_register2 WHERE earmark=?1")
+    EartagEartagRegister2Entity getOneByEarmark2(String earmark);
 }

+ 38 - 0
huimv-eartag2-platform/huimv-eartag2-common/src/main/java/com/huimv/eartag2/common/utils/FileUtil.java

@@ -0,0 +1,38 @@
+package com.huimv.eartag2.common.utils;
+
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+/**
+ * @Project : huimv.shiwan
+ * @Package : com.huimv.biosafety.uface.controller
+ * @Description : TODO
+ * @Version : 1.0
+ * @Author : ZhuoNing
+ * @Create : 2020-12-25
+ **/
+public class FileUtil {
+
+    public void writeTxt(String conent,String file) throws ParseException, IOException {
+        File f = new File(file);
+        if (f.exists()) {
+        } else {
+            f.createNewFile();// 不存在则创建
+        }
+        BufferedWriter output = new BufferedWriter(new FileWriter(f,true));//true,则追加写入text文本
+        output.write(conent);
+        output.write("\r\n");//换行
+        output.flush();
+        output.close();
+    }
+
+    public String getTodayDateText() throws ParseException {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+        return sdf.format(new Date());
+    }
+}

+ 107 - 0
huimv-eartag2-platform/huimv-eartag2-device/src/main/resources/application-test.yml

@@ -0,0 +1,107 @@
+server:
+  port: 8092
+spring:
+  application:
+    name: huimv-eartag2-device
+
+  datasource:
+    url: jdbc:mysql://192.168.1.7:3306/huimv-demo-eartag20?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:
+    show-sql: true
+    database: mysql
+    hibernate:
+      ddl-auto: update
+    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: 192.168.1.82
+    port: 5672
+    username: admin
+    password: admin
+    #虚拟host 可以不设置,使用server默认host
+    virtual-host: /
+    listener:
+      simple:
+        acknowledge-mode: none  #消费端不需要确认
+
+  #redis
+  redis:
+    database: 0
+    host: 192.168.1.68
+    port: 6379
+    password: hm123456
+    timeout: 5000ms
+    jedis:
+      pool:
+        max-active: 20
+        max-wait: -1
+        max-idle: 10
+        min-idle: 0
+
+  #redis
+#  redis:
+#    database: 0
+#    host: 192.168.1.68
+#    port: 6379
+#    password: hm123456
+#    timeout: 5000ms
+#    jedis:
+#      pool:
+#        max-active: 20
+#        max-wait: -1
+#        max-idle: 10
+#        min-idle: 0
+#    lettuce:
+#      pool:
+#        max-active: 3
+#        min-idle: 2
+#        max-idle: 3
+#        max-wait: 1
+#      shutdown-timeout: 100
+
+#  data:
+#    redis:
+#      repositories:
+#        enabled: false
+
+  #是否缓存空值
+#  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
+
+

+ 1 - 1
huimv-eartag2-platform/huimv-eartag2-device/src/main/resources/application.properties

@@ -1,4 +1,4 @@
-spring.profiles.active=dev
+spring.profiles.active=test
 
 service.farmAllStatus.url=/deviceController/updateFarmAllStatus
 service.farmAllStatus.host=192.168.1.68

+ 31 - 1
huimv-eartag2-platform/huimv-eartag2-eartag/src/main/java/com/huimv/eartag2/eartag/listener/EartagListener.java

@@ -11,8 +11,14 @@ import org.springframework.amqp.rabbit.annotation.RabbitListener;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
 import java.math.BigDecimal;
 import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Date;
 import java.util.HashMap;
 import java.util.Map;
 
@@ -43,7 +49,7 @@ public class EartagListener {
      */
     @RabbitListener(queues = Const.QUEUE_ASK_EARTAG)
     @RabbitHandler
-    public void processRawdata(Map RawMap) throws ParseException {
+    public void processRawdata(Map RawMap) throws ParseException, IOException {
         System.out.println("<<<<<<<<<<<<<<< RawMap>>" + RawMap.toString());
         String askText = RawMap.get("askText").toString();
         System.out.println("<<<<<<<<<<<<<<<<<<<<<<< 处理耳标 <<<<<<<<<<<<<<<<<<<<<<<");
@@ -53,6 +59,11 @@ public class EartagListener {
         //--保存设备环境流水数据(设备温度流水表)
         //--保存耳标流水数据(耳标流水表)
 
+        //测试-临时写入耳标数据到文件
+        if(askText.trim().indexOf("330110002000002") != -1){
+            writeTxt(askText,"eartag");
+        }
+
         //{处理请求报文}
         Map askMap = handleAskText(askText);
         String type = askMap.get("type").toString();
@@ -80,6 +91,25 @@ public class EartagListener {
 //        }
     }
 
+    public void writeTxt(String conent,String file) throws ParseException, IOException {
+        String todayText = getTodayDateText();
+        File f = new File("/opt/log/log_"+file+"_"+todayText+".txt");
+        if (f.exists()) {
+        } else {
+            f.createNewFile();// 不存在则创建
+        }
+        BufferedWriter output = new BufferedWriter(new FileWriter(f,true));//true,则追加写入text文本
+        output.write(conent);
+        output.write("\r\n");//换行
+        output.flush();
+        output.close();
+    }
+
+    public String getTodayDateText() throws ParseException {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+        return sdf.format(new Date());
+    }
+
     private boolean checkTestRange(String earmark) {
         Long c = Long.parseLong(earmark);
         Long a = 122083123610001L;

+ 82 - 54
huimv-eartag2-platform/huimv-eartag2-eartag/src/main/java/com/huimv/eartag2/eartag/service/impl/EartagServiceImpl.java

@@ -11,6 +11,7 @@ import com.huimv.eartag2.eartag.service.IEartagService;
 //import com.huimv.eartag2.manage2.mapper.EartagData2Mapper;
 //import com.huimv.eartag2.manage2.pojo.EartagData2;
 //import com.huimv.eartag2.manage2.service.IEartagData2Service;
+import javafx.beans.binding.BooleanBinding;
 import lombok.extern.slf4j.Slf4j;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.domain.Example;
@@ -130,71 +131,71 @@ public class EartagServiceImpl implements IEartagService {
     // 更新耳标连线状态
     private void updateEartagLiveStatus(String earmark, String deviceCode, String todayDateText, java.sql.Date todayDate, Timestamp nowTimestamp, JSONObject dataJo, String farmId) {
         // 通过耳标注册表查找耳标所属单元
-        EartagEartagRegister2Entity eartagEartagRegister2Entity = eartagEartagRegister2EntityRepo.getOneByEarmark(earmark,farmId);
-        if(eartagEartagRegister2Entity == null){
-            log.info("该耳标不存在(earmark="+earmark+",farmId="+farmId+")");
-            return ;
+        EartagEartagRegister2Entity eartagEartagRegister2Entity = eartagEartagRegister2EntityRepo.getOneByEarmark(earmark, farmId);
+        if (eartagEartagRegister2Entity == null) {
+            log.info("该耳标不存在(earmark=" + earmark + ",farmId=" + farmId + ")");
+            return;
         }
         Integer unitId = eartagEartagRegister2Entity.getUnitId();
-        Optional<EartagOnlineStatusEntity> optionEartagStatus = eartagOnlineStatusEntityRepo.findLastOne(farmId,unitId);
+        Optional<EartagOnlineStatusEntity> optionEartagStatus = eartagOnlineStatusEntityRepo.findLastOne(farmId, unitId);
         if (!optionEartagStatus.isPresent()) {
             System.out.println("该记录不存在");
-            return ;
+            return;
         }
         EartagOnlineStatusEntity eartagOnlineStatusEntity = optionEartagStatus.get();
-        System.out.println("onlineEarmark="+eartagOnlineStatusEntity.getOnlineEarmark());
-        System.out.println("offlineEarmark="+eartagOnlineStatusEntity.getOfflineEarmark());
-        if(eartagOnlineStatusEntity.getOnlineEarmark().indexOf(earmark) == -1 && eartagOnlineStatusEntity.getOfflineEarmark().indexOf(earmark) == -1){
+        System.out.println("onlineEarmark=" + eartagOnlineStatusEntity.getOnlineEarmark());
+        System.out.println("offlineEarmark=" + eartagOnlineStatusEntity.getOfflineEarmark());
+        if (eartagOnlineStatusEntity.getOnlineEarmark().indexOf(earmark) == -1 && eartagOnlineStatusEntity.getOfflineEarmark().indexOf(earmark) == -1) {
             //新耳标(在线,离线都不包含该耳标)
-            log.info("耳标连线状态统计:增加新耳标["+earmark+"]");
+            log.info("耳标连线状态统计:增加新耳标[" + earmark + "]");
             String onlineEarmark = eartagOnlineStatusEntity.getOnlineEarmark();
-            if(onlineEarmark.trim().length()>0){
+            if (onlineEarmark.trim().length() > 0) {
                 onlineEarmark += ",";
             }
             onlineEarmark += earmark;
-            eartagOnlineStatusEntity.setTotal(eartagOnlineStatusEntity.getTotal()+1);
-            eartagOnlineStatusEntity.setOnline(eartagOnlineStatusEntity.getOnline()+1);
+            eartagOnlineStatusEntity.setTotal(eartagOnlineStatusEntity.getTotal() + 1);
+            eartagOnlineStatusEntity.setOnline(eartagOnlineStatusEntity.getOnline() + 1);
             eartagOnlineStatusEntity.setOnlineEarmark(onlineEarmark);
             eartagOnlineStatusEntityRepo.saveAndFlush(eartagOnlineStatusEntity);
-        }else if(eartagOnlineStatusEntity.getOfflineEarmark().indexOf(earmark) != -1){
-            log.info("耳标连线状态统计:耳标离线--在线["+earmark+"]");
+        } else if (eartagOnlineStatusEntity.getOfflineEarmark().indexOf(earmark) != -1) {
+            log.info("耳标连线状态统计:耳标离线--在线[" + earmark + "]");
             //上一次处于离线状态
-            eartagOnlineStatusEntity.setOnline(eartagOnlineStatusEntity.getOnline()+1);
-            eartagOnlineStatusEntity.setOffline(eartagOnlineStatusEntity.getOffline()-1);
+            eartagOnlineStatusEntity.setOnline(eartagOnlineStatusEntity.getOnline() + 1);
+            eartagOnlineStatusEntity.setOffline(eartagOnlineStatusEntity.getOffline() - 1);
             String onlineEarmark = eartagOnlineStatusEntity.getOnlineEarmark();
-            if(onlineEarmark.trim().length()>0){
-                onlineEarmark+=",";
+            if (onlineEarmark.trim().length() > 0) {
+                onlineEarmark += ",";
             }
             onlineEarmark += earmark;
             eartagOnlineStatusEntity.setOnlineEarmark(onlineEarmark);
             String offlineEarmark = eartagOnlineStatusEntity.getOfflineEarmark();
-            offlineEarmark = offlineEarmark.replace(offlineEarmark,"");
+            offlineEarmark = offlineEarmark.replace(offlineEarmark, "");
             eartagOnlineStatusEntity.setOfflineEarmark(offlineEarmark);
             eartagOnlineStatusEntityRepo.saveAndFlush(eartagOnlineStatusEntity);
-        }else{
-            log.info("耳标连线状态统计:该耳标["+earmark+"]已经在线");
+        } else {
+            log.info("耳标连线状态统计:该耳标[" + earmark + "]已经在线");
         }
     }
 
 
     /**
-     * @Method      : countTimesByInTime
+     * @Method : countTimesByInTime
      * @Description :
-     * @Params      : [earmark, nowTimestamp]
-     * @Return      : java.lang.Boolean
-     *
-     * @Author      : ZhuoNing
-     * @Date        : 2022/8/5
-     * @Time        : 14:16
+     * @Params : [earmark, nowTimestamp]
+     * @Return : java.lang.Boolean
+     * @Author : ZhuoNing
+     * @Date : 2022/8/5
+     * @Time : 14:16
      */
     public Map countTimesByInTime(String earmark, Timestamp nowTimestamp, String farmId) {
         Map countMap = new HashMap();
         //
-        Optional<EartagData2Entity> optionEartagData = eartagData2Repo.getLastByEarmark(earmark,farmId);
+        Optional<EartagData2Entity> optionEartagData = eartagData2Repo.getLastByEarmark(earmark, farmId);
         if (!optionEartagData.isPresent()) {
-            log.info("该耳标号无数据["+earmark+"].");
-            countMap.put("countTimes",true);
-            countMap.put("act",0);
+            log.info("该耳标号无数据[" + earmark + "].");
+            countMap.put("countTimes", true);
+            countMap.put("act", 0);
+            countMap.put("fisrtStatus", true);
             return countMap;
         } else {
             EartagData2Entity eartagData2Entity = optionEartagData.get();
@@ -205,18 +206,19 @@ public class EartagServiceImpl implements IEartagService {
             Optional<SysBaseConfigEntity> optionConfig = sysBaseConfigEntityRepo.getConfigValue("timeDifference");
             if (optionConfig.isPresent()) {
                 setTimeDiff = Integer.parseInt(optionConfig.get().getConfigValue());
-                log.info("耳标数据过滤时间差="+setTimeDiff);
-            }else{
+                log.info("耳标数据过滤时间差=" + setTimeDiff);
+            } else {
                 log.error("耳标数据过滤时间差属性未配置.");
             }
+            countMap.put("fisrtStatus", false);
             if (timeDifference / 1000 < setTimeDiff) {
                 // 同一耳标数据距上一次上传数据时间<5秒,视为被其他基站上传。
-                countMap.put("countTimes",false);
+                countMap.put("countTimes", false);
                 return countMap;
             } else {
                 // 同一耳标数据距上一次上传数据时间>5
-                countMap.put("countTimes",true);
-                countMap.put("act",act);
+                countMap.put("countTimes", true);
+                countMap.put("act", act);
                 return countMap;
             }
         }
@@ -677,14 +679,22 @@ public class EartagServiceImpl implements IEartagService {
      * @Time : 9:39
      */
     public void updateEartagRegister2(String earmark, String deviceCode, String bat, Timestamp nowTimestamp, java.sql.Date todayDate, String farmId, JSONObject eartagJo) {
+        System.out.println(" ============================ 更新耳标编码 ============================ ");
+        if (deviceCode.trim().equalsIgnoreCase("330112002000002")) {
+            System.out.println("deviceCode=" + deviceCode + ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
+        }
         EartagDeviceRegisterEntity deviceRegisterEntity = deviceRegisterRepo.getByDeviceCode(deviceCode);
         Integer unitId = deviceRegisterEntity.getUnitId();
         Integer pigpenId = deviceRegisterEntity.getPigpenId();
+        System.out.println("unitId>>" + unitId);
+        System.out.println("pigpenId>>" + pigpenId);
         List<BasePigpenEntity> basePigpenEntityList = basePigpenRepo.getPigpenByPigpenIdAndUnitId(pigpenId, unitId);
+        System.out.println("basePigpenEntityList.size>>" + basePigpenEntityList.size());
         if (basePigpenEntityList.size() == 0) {
             log.error("栋舍不存在[" + pigpenId + "," + unitId + "].");
             return;
         }
+
         //-- 获取栋舍名称--//
         String pigpenName = "";
         String unitName = "";
@@ -699,12 +709,17 @@ public class EartagServiceImpl implements IEartagService {
                 stageCode = basePigpenEntity.getStageCode();
             }
         }
+        System.out.println("pigpenName>>" + pigpenName);
+        System.out.println("unitName>>" + unitName);
+        System.out.println("stageCode>>" + stageCode);
         //-- 获取阶段名称 --//
         Optional<BizBaseStageEntity> optionalBizBaseStageEntity = bizBaseStageRepo.getStageByStageCode(stageCode);
+        System.out.println("optionalBizBaseStageEntity.isPresent()>>" + optionalBizBaseStageEntity.isPresent());
         if (!optionalBizBaseStageEntity.isPresent()) {
             log.error("该阶段不存在[" + stageCode + "].");
             return;
         }
+        System.out.println("更新耳标数据...");
         BizBaseStageEntity bizBaseStageEntity = optionalBizBaseStageEntity.get();
         String stageName = bizBaseStageEntity.getStageName();
         //# 判断耳标注册表是否存在;
@@ -713,14 +728,18 @@ public class EartagServiceImpl implements IEartagService {
         Integer registerType = 1;
         Integer activeStatus = 1;
         Integer liveStatus = 1;        //
-        System.out.println("earmark="+earmark);
-        System.out.println("farmId="+farmId);
-        EartagEartagRegister2Entity eartagRegisterEntity = eartagEartagRegister2EntityRepo.getOneByEarmark(earmark, farmId);
-        System.out.println("判断是否有耳标注册信息 eartagRegisterEntity="+eartagRegisterEntity.toString());
+        System.out.println("deviceCode=" + deviceCode);
+        System.out.println("earmark=" + earmark);
+        System.out.println("farmId=" + farmId);
+//        EartagEartagRegister2Entity eartagRegisterEntity = eartagEartagRegister2EntityRepo.getOneByEarmark(earmark, farmId);
+        EartagEartagRegister2Entity eartagRegisterEntity = eartagEartagRegister2EntityRepo.getOneByEarmark2(earmark);
+        System.out.println("判断是否有耳标注册信息 eartagRegisterEntity=" + eartagRegisterEntity.toString());
         if (eartagRegisterEntity == null) {
+            System.out.println("新建耳标数据...");
             //{新建耳标注册信息}
             newEartagRegister2(earmark, nowTimestamp, deviceCode, registerType, activeStatus, liveStatus, bat, todayDate, farmId, eartagJo, stageCode, stageName, pigpenId, pigpenName, unitId, unitName, deviceRegisterEntity);
         } else {
+            System.out.println("更新耳标数据...");
             eartagRegisterEntity.setLastTime(nowTimestamp);
             eartagRegisterEntity.setLastDevice(deviceCode);
             eartagRegisterEntity.setActiveStatus(activeStatus);
@@ -738,6 +757,8 @@ public class EartagServiceImpl implements IEartagService {
             eartagRegisterEntity.setSignal1(Integer.parseInt(eartagJo.getString("signal")));
             eartagRegisterEntity.setAskTime(getAskTime(eartagJo.getString("askTime")));
             eartagRegisterEntity.setOther(eartagJo.getString("other"));
+            eartagRegisterEntity.setFarmId(farmId);
+            eartagRegisterEntity.setLiveStatus(1);
 
             eartagEartagRegister2EntityRepo.saveAndFlush(eartagRegisterEntity);
             //更新耳标注册消息缓存
@@ -933,21 +954,27 @@ public class EartagServiceImpl implements IEartagService {
     public void saveEartagFlow2(JSONObject eartagJo, Timestamp nowTimestamp, java.sql.Date todayDate, String farmId) throws ParseException {
         // 判断近五分钟内是否有耳标数据 先获取耳标号
         String earmark = eartagJo.getString("earmark");
-//        System.out.println("earmark ====================================="+earmark);
         // {}
-        Map countMap = countTimesByInTime(earmark, nowTimestamp,farmId);
+        Map countMap = countTimesByInTime(earmark, nowTimestamp, farmId);
         Boolean countTimes = Boolean.parseBoolean(countMap.get("countTimes").toString());
         //true:设定过滤时间内无耳标数据上传入库;false:有数据入库;
-        if(countTimes){
+        if (countTimes) {
+            Integer act = 0;
             Integer act1 = 0;
-            Integer act = Integer.parseInt(eartagJo.getString("act"));
-            Integer lastAct = Integer.parseInt(countMap.get("act").toString());
-            // 耳标重启之后运动量可能为0
-            if(act > 0){
-                act1 = act - lastAct;
+            if (Boolean.parseBoolean(countMap.get("fisrtStatus").toString())) {
+                act = Integer.parseInt(eartagJo.getString("act"));
+                System.out.println("1 act="+act);
+            } else {
+                act = Integer.parseInt(eartagJo.getString("act"));
+                System.out.println("2 act="+act);
+                Integer lastAct = Integer.parseInt(countMap.get("act").toString());
+                System.out.println("3 lastAct="+lastAct);
+                if (act > lastAct) {
+                    act1 = act - lastAct;
+                }
+                System.out.println("3 act1="+act1);
             }
-//            System.out.println("act ====================="+act);
-//            System.out.println("lastAct ====================="+lastAct);
+            System.out.println("4 act1="+act1);
             DateUtil dateUtil = new DateUtil();
             EartagData2Entity dataEntity = new EartagData2Entity();
             dataEntity.setCmdHeader(eartagJo.getString("cmdHeader"));
@@ -968,10 +995,11 @@ public class EartagServiceImpl implements IEartagService {
             dataEntity.setFarmId(farmId);
             dataEntity.setAskDate(new java.sql.Date(dateUtil.parseDate(getAskDate(eartagJo.getString("askTime"))).getTime()));
             eartagData2EntityRepo.saveAndFlush(dataEntity);
+
             //更新耳标注册表中的运动量数据
             EartagEartagRegister2Entity eartagRegister2Entity = eartagEartagRegister2EntityRepo.getOneByEarmark(earmark, farmId);
-            if(eartagRegister2Entity != null){
-                System.out.println("更新耳标="+earmark+","+act1);
+            if (eartagRegister2Entity != null) {
+                System.out.println("更新耳标=" + earmark + "," + act1);
                 eartagRegister2Entity.setAct(act1);
                 eartagEartagRegister2EntityRepo.saveAndFlush(eartagRegister2Entity);
             }

+ 107 - 0
huimv-eartag2-platform/huimv-eartag2-eartag/src/main/resources/application-test.yml

@@ -0,0 +1,107 @@
+server:
+  port: 8094
+spring:
+  application:
+    name: huimv-eartag2-eartag
+
+  datasource:
+    url: jdbc:mysql://192.168.1.7:3306/huimv-demo-eartag20?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:
+    show-sql: true
+    database: mysql
+    hibernate:
+      ddl-auto: update
+    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: 192.168.1.82
+    port: 5672
+    username: admin
+    password: admin
+    #虚拟host 可以不设置,使用server默认host
+    virtual-host: /
+    listener:
+      simple:
+        acknowledge-mode: none  #消费端不需要确认
+
+  #redis
+  redis:
+    database: 0
+    host: 192.168.1.68
+    port: 6379
+    password: hm123456
+    timeout: 5000ms
+    jedis:
+      pool:
+        max-active: 20
+        max-wait: -1
+        max-idle: 10
+        min-idle: 0
+
+  #redis
+#  redis:
+#    database: 0
+#    host: 192.168.1.68
+#    port: 6379
+#    password: hm123456
+#    timeout: 5000ms
+#    jedis:
+#      pool:
+#        max-active: 20
+#        max-wait: -1
+#        max-idle: 10
+#        min-idle: 0
+#    lettuce:
+#      pool:
+#        max-active: 3
+#        min-idle: 2
+#        max-idle: 3
+#        max-wait: 1
+#      shutdown-timeout: 100
+
+#  data:
+#    redis:
+#      repositories:
+#        enabled: false
+
+  #是否缓存空值
+#  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
+
+

+ 1 - 1
huimv-eartag2-platform/huimv-eartag2-eartag/src/main/resources/application.properties

@@ -1,4 +1,4 @@
-spring.profiles.active=dev
+spring.profiles.active=test
 #spring.profiles.active=local
 device.register.prefix=device_register_
 redis.expire.eartag_online_set=25

+ 93 - 38
huimv-eartag2-platform/huimv-eartag2-input/src/main/java/com/huimv/eartag2/config/TopicRabbitMQConfig.java

@@ -64,57 +64,112 @@ public class TopicRabbitMQConfig {
         return BindingBuilder.bind(SysConfigQueue()).to(SysConfigExchange()).with(Const.ROUTING_KEY_SYNC_SYS_CONFIG);
     }
 
+    // 设备 -------------------------------------------------------------------
+//心跳
+    @Bean
+    public Queue heartbeatQueue() {
+        return new Queue(Const.QUEUE_DEVICE_HEARTBEAT);
+    }
+    //采集器温度
+    @Bean
+    public Queue deviceTempQueue() {
+        return new Queue(Const.QUEUE_DEVICE_TEMP);
+    }
+    //耳标数据
+    @Bean
+    public Queue eartagQueue() {
+        return new Queue(Const.QUEUE_EARTAG);
+    }
 
+    //采集器设备交换机
+    @Bean
+    TopicExchange deviceExchange() {
+        return new TopicExchange(Const.EXCHANGE_DEVICE);
+    }
 
+    //耳标交换机
+    @Bean
+    TopicExchange eartagExchange() {
+        return new TopicExchange(Const.EXCHANGE_EARTAG);
+    }
 
+    //设备交换机、心跳队列、心跳路由键绑定
+    @Bean
+    Binding bindingHeartbeatExchangeMessage() {
+        return BindingBuilder.bind(heartbeatQueue()).to(deviceExchange()).with(Const.ROUTING_KEY_DEVICE_HEARTBEAT);
+    }
+    //设备交换机、设备环境温度队列、设备环境路由键绑定
+    @Bean
+    Binding bindingDeviceTempExchangeMessage() {
+        return BindingBuilder.bind(deviceTempQueue()).to(deviceExchange()).with(Const.ROUTING_KEY_DEVICE_TEMP);
+    }
+    //耳标交换机、耳标队列、耳标路由键绑定
+//    @Bean
+//    Binding bindingEartagExchangeMessage() {
+//        return BindingBuilder.bind(eartagQueue()).to(eartagExchange()).with(Const.ROUTING_KEY_EARTAG);
+//    }
 
+    // ============================= 设备绑定队列 ============================= //
+    @Bean
+    public Queue syncDeviceRegisterQueue() {
+        return new Queue(Const.QUEUE_SYNC_DEVICE_REGISTER);
+    }
+    @Bean
+    TopicExchange syncDeviceRegisterExchange() {
+        return new TopicExchange(Const.EXCHANGE_SYNC_DEVICE_REGISTER);
+    }
+    @Bean
+    Binding bindingDeviceRegisterExchangeMessage() {
+        return BindingBuilder.bind(syncDeviceRegisterQueue()).to(syncDeviceRegisterExchange()).with(Const.ROUTING_KEY_SYNC_DEVICE_REGISTER);
+    }
 
+    // =============================耳标绑定队列 ============================= //
+    @Bean
+    public Queue syncEartagRegisterQueue() {
+        return new Queue(Const.QUEUE_SYNC_EARTAG_REGISTER);
+    }
+    @Bean
+    TopicExchange syncEartagRegisterExchange() {
+        return new TopicExchange(Const.EXCHANGE_SYNC_EARTAG_REGISTER);
+    }
+    @Bean
+    Binding bindingEartagRegisterExchangeMessage() {
+        return BindingBuilder.bind(syncEartagRegisterQueue()).to(syncEartagRegisterExchange()).with(Const.ROUTING_KEY_SYNC_EARTAG_REGISTER);
+    }
 
+    // ============================= 同步设备总数-绑定队列 ============================= //
+    @Bean
+    public Queue syncDeviceTotalQueue() {
+        return new Queue(Const.QUEUE_SYNC_DEVICE_TOTAL);
+    }
+    @Bean
+    TopicExchange syncDeviceTotalExchange() {
+        return new TopicExchange(Const.EXCHANGE_SYNC_DEVICE_TOTAL);
+    }
+    @Bean
+    Binding bindingDeviceTotalExchangeMessage() {
+        return BindingBuilder.bind(syncDeviceTotalQueue()).to(syncDeviceTotalExchange()).with(Const.ROUTING_KEY_SYNC_DEVICE_TOTAL);
+    }
 
-
-
-//    //采集器注册队列路由键
-//    public final static String deviceRegister = "topic.device.register";
-//    //采集器在线记录队列路由键
-//    public final static String deviceOnline = "topic.device.online";
-//    //采集器总状态队列路由键
-//    public final static String deviceAllState = "topic.device.allstate";
-//    //采集器温度路由键
-//    public final static String deviceTemp = "topic.device.temp";
-//    //采集器心跳路由键
-//    public final static String deviceHeartbeat = "topic.device.heartbeat";
-//    //采集器原始数据
-//    public final static String deviceRawData = "topic.device.rawdata";
-//    //耳标原始数据
-//    public final static String eartagRawData = "topic.eartag.rawdata";
-    //
-
-//    //采集器注册队列
-//    @Bean
-//    public Queue deviceQueue() {
-//        return new Queue(deviceRegister);
-//    }
-//    //采集器在线记录队列
+    // 耳标 -------------------------------------------------------------------------------------
+    //心跳
 //    @Bean
-//    public Queue deviceOnlineQueue() {
-//        return new Queue(deviceOnline);
+//    public Queue heartbeatQueue() {
+//        return new Queue(Const.QUEUE_DEVICE_HEARTBEAT);
 //    }
-//    //采集器总状态队列
-//    @Bean
-//    public Queue deviceAllStateQueue() {
-//        return new Queue(deviceAllState);
-//    }
-
-//    //设备交换机
-//    @Bean
+//    //采集器设备交换机
 //    TopicExchange deviceExchange() {
-//        return new TopicExchange("deviceTopicExchange");
+//        return new TopicExchange(Const.EXCHANGE_DEVICE);
 //    }
-//    //耳标交换机
+
 //    @Bean
-//    TopicExchange eartagExchange() {
-//        return new TopicExchange("eartagTopicExchange");
+//    Binding bindingHeartbeatExchangeMessage() {
+//        return BindingBuilder.bind(heartbeatQueue()).to(deviceExchange()).with(Const.ROUTING_KEY_DEVICE_HEARTBEAT);
 //    }
 
 
+
+
+
+
 }

+ 32 - 20
huimv-eartag2-platform/huimv-eartag2-input/src/main/java/com/huimv/eartag2/server/EartagServerHandler2.java

@@ -18,6 +18,7 @@ import org.springframework.beans.factory.annotation.Value;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Component;
 
+import java.io.*;
 import java.text.ParseException;
 import java.util.HashMap;
 import java.util.Map;
@@ -66,6 +67,8 @@ public class EartagServerHandler2 extends ChannelInboundHandlerAdapter {
 //        System.out.println((++num)+"次, 客户端消息clientAskText>>"+clientAskText);
         //保存实例内的客户端请求
         appendClientAsk(clientAskText);
+        //临时写入耳标数据到文件
+//        writeTxt(clientAskText,"all");
     }
 
     @Override
@@ -105,16 +108,13 @@ public class EartagServerHandler2 extends ChannelInboundHandlerAdapter {
      * @Date        : 2022/3/28       
      * @Time        : 17:36
      */
-    private void handleClientEartagMessage(String clientAskText,ChannelHandlerContext ctx) throws ParseException {
-//        System.out.println("## clientAskText>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> "+clientAskText);
+    private void handleClientEartagMessage(String clientAskText,ChannelHandlerContext ctx) throws ParseException, IOException {
         clientAskText = clientAskText.replaceAll("\r","").replaceAll("\n","");
         System.out.println("### 服务端接收数据 >>" + clientAskText);
-        /////////////////////////////////////////////////////////////
         //TEST-saveRawData()
         if(dataTestInput == 1){
             deviceService.saveRawData(clientAskText);
         }
-        /////////////////////////////////////////////////////////////
 
         //{}
         int countPlus = regexUtil.countPlus(clientAskText);
@@ -124,21 +124,15 @@ public class EartagServerHandler2 extends ChannelInboundHandlerAdapter {
             //--处理客户端请求数据
             //{拆分粘包数据}
             JSONArray askJa = getPerData(clientAskText);
-//            System.out.println("askJa.size()="+askJa.size());
             for (int a = 0; a < askJa.size(); a++) {
                 String askText = askJa.getString(a);
-//                System.out.println((a+1)+",askText"+askText);
-                /////////////////////////////////////////////////////////////
-                //TEST-saveRawData()
-//                deviceService.saveRawData(askText);
-                /////////////////////////////////////////////////////////////
-                if (dataInputFlow == 1) {
-                    //{处理请求内容}
-                    handleAskText(askText, ctx);
-                } else {
+//                if (dataInputFlow == 1) {
+//                    //{处理请求内容}
+//                    handleAskText(askText, ctx);
+//                } else {
                     //{处理请求内容2}
                     handleAskText2(askText, ctx);
-                }
+//                }
             }
         }
     }
@@ -152,7 +146,7 @@ public class EartagServerHandler2 extends ChannelInboundHandlerAdapter {
      * @Date : 2022/3/23
      * @Time : 18:08
      */
-    private void handleAskText2(String askText, ChannelHandlerContext ctx) throws ParseException {
+    private void handleAskText2(String askText, ChannelHandlerContext ctx) throws ParseException, IOException {
         String[] dataArray = askText.split("\\+");
         String cmdHeader = dataArray[0];
         //芯片id/设备编码
@@ -224,10 +218,14 @@ public class EartagServerHandler2 extends ChannelInboundHandlerAdapter {
             }
         } else if (cmdHeader.trim().equalsIgnoreCase("zj")) {
             System.out.println("==>耳标命令请求 askText>>"+askText);
+            //测试-临时写入耳标数据到文件
+            if(askText.trim().indexOf("330110002000002") != -1){
+                writeTxt(askText,"input");
+            }
             //耳标应答数据(不需要应答)
-            if (checkValidEarmark(cmd)) {
-                log.error(">>舍弃掉未配置耳标号的耳标," + askText + "");
-            } else {
+//            if (checkValidEarmark(cmd)) {
+//                log.error(">>舍弃掉未配置耳标号的耳标," + askText + "");
+//            } else {
                 //{检查设备是否在处于工作状态或待机状态}
 //                if (dataService.isWorkStatusDevice(idCode)) {
                 if (dataService.isEffectiveDevice(idCode)) {
@@ -237,13 +235,27 @@ public class EartagServerHandler2 extends ChannelInboundHandlerAdapter {
                 }else{
                     System.out.println("无效设备编码 idCode="+idCode);
                 }
-            }
+//            }
         } else {
             System.out.println("==>未知命令");
             log.error("##当前请求数据为非法数据>>" + askText);
         }
     }
 
+    public void writeTxt(String conent,String file) throws ParseException, IOException {
+        String todayText = new DateUtil2().getTodayDateText();
+        File f = new File("/opt/log/log_"+file+"_"+todayText+".txt");
+        if (f.exists()) {
+        } else {
+            f.createNewFile();// 不存在则创建
+        }
+        BufferedWriter output = new BufferedWriter(new FileWriter(f,true));//true,则追加写入text文本
+        output.write(conent);
+        output.write("\r\n");//换行
+        output.flush();
+        output.close();
+    }
+
     //检查无效耳标
     public boolean checkValidEarmark(String earmark) {
         if (earmark.trim().equalsIgnoreCase("ffffffffffffffff") || earmark.trim().equalsIgnoreCase("0000000000000000")) {

+ 2 - 1
huimv-eartag2-platform/huimv-eartag2-input/src/main/java/com/huimv/eartag2/service/IDataService.java

@@ -1,5 +1,6 @@
 package com.huimv.eartag2.service;
 
+import java.io.IOException;
 import java.text.ParseException;
 import java.util.Map;
 
@@ -20,7 +21,7 @@ public interface IDataService {
     void sendBizMQ(String cmdHeader, String cmd, String askText);
 
     //发送设备消息
-    void sendEartagMQ(Map map);
+    void sendEartagMQ(Map map) throws IOException, ParseException;
 
     //
     String getDeviceCodeByChipId(String idCode);

+ 8 - 1
huimv-eartag2-platform/huimv-eartag2-input/src/main/java/com/huimv/eartag2/service/impl/DataServiceImpl.java

@@ -12,6 +12,7 @@ import com.huimv.eartag2.common.dao.repo.EartagHeartbeatRepo;
 import com.huimv.eartag2.common.dao.repo.EartagRawRepo;
 import com.huimv.eartag2.common.mq.Const;
 import com.huimv.eartag2.common.utils.BizConst;
+import com.huimv.eartag2.common.utils.FileUtil;
 import com.huimv.eartag2.producer.Producer;
 import com.huimv.eartag2.service.ICacheService;
 import com.huimv.eartag2.service.IDataService;
@@ -26,6 +27,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.redis.core.RedisTemplate;
 import org.springframework.stereotype.Service;
 
+import java.io.IOException;
 import java.math.BigDecimal;
 import java.sql.Timestamp;
 import java.text.DecimalFormat;
@@ -289,7 +291,12 @@ public class DataServiceImpl implements IDataService {
     }
 
     @Override
-    public void sendEartagMQ(Map map) {
+    public void sendEartagMQ(Map map) throws IOException, ParseException {
+        String askText = map.get("askText").toString();
+        FileUtil fileUtil= new FileUtil();
+        if(askText.trim().indexOf("330110002000002") != -1){
+            fileUtil.writeTxt(askText,"/opt/log/log_mq_20220809.txt");
+        }
         //发送到耳标处理消息队列
         rabbitTemplate.convertAndSend(Const.EXCHANGE_ASK_EARTAG, Const.ROUTING_KEY_ASK_EARTAG, map);
     }

+ 104 - 0
huimv-eartag2-platform/huimv-eartag2-input/src/main/resources/application-test.yml

@@ -0,0 +1,104 @@
+server:
+  port: 8090
+
+spring:
+  application:
+    name: huimv-eartag2-input
+
+  datasource:
+    url: jdbc:mysql://192.168.1.7:3306/huimv-demo-eartag20?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:
+    show-sql: true
+    database: mysql
+    hibernate:
+      ddl-auto: update
+    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: 192.168.1.82
+    port: 5672
+    username: admin
+    password: admin
+    #虚拟host 可以不设置,使用server默认host
+    virtual-host: /
+
+    #确认消息已发送到交换机(Exchange)
+#    publisher-confirms: true #(过时、弃用)
+    publisher-confirm-type: correlated
+    #确认消息已发送到队列(Queue)
+    publisher-returns: true
+
+  #redis
+  redis:
+    database: 0
+    host: 192.168.1.68
+    port: 6379
+    password: hm123456
+    timeout: 5000ms
+    jedis:
+      pool:
+        max-active: 20
+        max-wait: -1
+        max-idle: 10
+        min-idle: 0
+    lettuce:
+      pool:
+        max-active: 3
+        min-idle: 2
+        max-idle: 3
+        max-wait: 1
+      shutdown-timeout: 100
+
+  data:
+    redis:
+      repositories:
+        enabled: false
+
+  #是否缓存空值
+  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
+management:
+  endpoints:
+    web:
+      exposure:
+        include: "*"   # * 在yaml 文件属于关键字,所以需要加引号
+

+ 1 - 1
huimv-eartag2-platform/huimv-eartag2-input/src/main/resources/application.properties

@@ -1,4 +1,4 @@
-spring.profiles.active=dev
+spring.profiles.active=test
 
 #¿ªÆô½¡¿µ¼à¿Ø
 management.endpoints.web.exposure.include=*