From 2583d630205582822e2af3026b75c5f915352bfc Mon Sep 17 00:00:00 2001
From: CZT <czt18638530771@163.com>
Date: 星期六, 07 十月 2023 18:51:24 +0800
Subject: [PATCH] 贝博粮情解析6-温湿度解析

---
 igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/analysis/AnalysisService.java |  207 +++++++++++++++++++++++++++++++++++++++------------
 1 files changed, 158 insertions(+), 49 deletions(-)

diff --git a/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/analysis/AnalysisService.java b/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/analysis/AnalysisService.java
index 5a789b8..a516d11 100644
--- a/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/analysis/AnalysisService.java
+++ b/igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/analysis/AnalysisService.java
@@ -65,11 +65,6 @@
     public static double MAX_TEMP = -50.0;
     public static double MIN_TEMP = 50.0;
 
-    public static void main(String[] args) {
-        String str = "00000000FFEB90FEAA41E821EC21EA21EC21ED21EC21E921E221E921E921E921EC21E921ED21F021E521E521E221E421E321E321E121DE21D721E021DD21DC21DF21FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF";
-        System.out.println(str.substring(9 * 2, 10 * 2));
-    }
-
     /**
      * 00000000FFEB90FEAA41E821EC21EA21EC21ED21EC21E921E221E921E921E921EC21E921ED21F021E521E521E221E421E321E321E121DE21D721E021DD21DC21DF21FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
      *
@@ -241,6 +236,10 @@
             sumNum += Integer.valueOf(cableRuleAtt[i]);
         }
 
+        if(cableZ < ser.getCableZ()){
+            cableZ = ser.getCableZ();
+        }
+
         // 鏍规嵁灞傝鍒楄幏鍙栨寚瀹氶暱搴�
         int start = 4 * (depotConf.getCableStart() - ser.getCableStart()) * cableZ;
         int len = 4 * cableZ * sumNum;
@@ -252,10 +251,6 @@
         List<Double> temps = new ArrayList<>();
         double tempValue;
         String temp;
-        int curLay = 1;//鎵�鍦ㄥ眰浠�1寮�濮�
-        int curRoot = 1;//鎵�鍦ㄦ牴
-        int curCir = 1;//鎵�鍦ㄥ湀
-        int cirLay = 1;//褰撳墠鍦堢殑灞�
         int symbol = 0; //绗﹀彿浣�
         for (int i = 0; i < strPoints.length() / 4; i++) {
             temp = strPoints.substring(i * 4, i * 4 + 4);
@@ -289,38 +284,7 @@
             if (tempValue >= FAULT_CHECK_TAG) {
                 tempValue = Constant.FAULT_TEMP;
             }
-
-            // 澶囩敤鍊�
-            if (tempValue == ERROR_CHECK_TAG) {
-                tempValue = Constant.ERROR_TEMP;
-
-
-                //楠岃瘉鏄笉鏄敟褰粨琛ュ伩鍊�
-                curLay = (i % layMax) + 1;
-                curRoot = (i / layMax) + 1;
-                curCir = getCurCir(curRoot, cableRuleAtt);
-
-                cirLay = Integer.valueOf(cableCirAtt[curCir - 1]);
-
-                //姣斿閰嶇疆浜�5灞備絾鏄綋鍓嶆槸6灞傦紝璇存槑褰撳墠鐐逛负琛ュ伩鐐�
-                if (curLay > cirLay) {
-                    tempValue = Constant.ADD_TEMP;
-
-                    //鍒ゆ柇鏄笉鏄笂閿ュ舰锛屽皢琛ョ偣杞Щ鍒颁笂鏂�
-                    if (Constant.CABLE_CONE_1.equals(depotConf.getCableCone())) {
-                        int index = i - curLay - 1;
-                        temps.add(index, tempValue);
-                    } else {
-                        temps.add(tempValue);
-                    }
-
-                } else {
-                    temps.add(tempValue);
-                }
-
-            } else {
-                temps.add(tempValue);
-            }
+            temps.add(tempValue);
         }
 
         log.debug("-------CheckGrainRequest--={}", exeRequest.toString());
@@ -460,8 +424,38 @@
         grain.setCompanyId(depotConf.getCompanyId());
         grain.setCable(depotConf.getCableRule());
         grain.setBatchId(msg.getBatchId());
-        grain.setTempIn(Constant.ERROR_TEMP);
-        grain.setHumidityIn(Constant.ERROR_TEMP);
+
+        int humidity = -100;
+        int tem = -100;
+        String substring = "";
+
+        //瑙f瀽澶栨箍澶栨俯
+        String thStr = msg.getThStr().substring(6, 12);
+        humidity = BytesUtil.hexToInt(thStr.substring(0, 2));
+        grain.setHumidityOut(humidity * 1.0);
+        substring = thStr.substring(2);
+        tem = BytesUtil.hexToInt(substring);
+        grain.setTempOut(tem * 1.0);
+        if(substring.startsWith("1")){
+            grain.setTempOut(tem * -1.0);
+        }
+
+        //瑙f瀽浠撳唴娓╀粨鍐呮箍
+        int thConf = Integer.valueOf(depotConf.getThConf());
+        int start = 0, end = 6;
+        if(thConf > 1){
+            start += 6*thConf; //12-18
+            end += start;
+        }
+        thStr = msg.getThStr().substring(start, end);
+        humidity = BytesUtil.hexToInt(thStr.substring(0, 2));
+        grain.setHumidityIn(humidity * 1.0);
+        substring = thStr.substring(2);
+        tem = BytesUtil.hexToInt(substring);
+        grain.setTempIn(tem * 1.0);
+        if(substring.startsWith("1")){
+            grain.setTempIn(tem * -1.0);
+        }
 
         grain.setReceiveDate(new Date());
         grain.setRemark("绮俯姝e父");
@@ -542,8 +536,38 @@
         grain.setCable(depotConf.getCableRule());
         grain.setCableCir(depotConf.getCableCir());
         grain.setBatchId(msg.getBatchId());
-        grain.setTempIn(Constant.ERROR_TEMP);
-        grain.setHumidityIn(Constant.ERROR_TEMP);
+
+        int humidity = -100;
+        int tem = -100;
+        String substring = "";
+
+        //瑙f瀽澶栨箍澶栨俯
+        String thStr = msg.getThStr().substring(6, 12);
+        humidity = BytesUtil.hexToInt(thStr.substring(0, 2));
+        grain.setHumidityOut(humidity * 1.0);
+        substring = thStr.substring(2);
+        tem = BytesUtil.hexToInt(substring);
+        grain.setTempOut(tem * 1.0);
+        if(substring.startsWith("1")){
+            grain.setTempOut(tem * -1.0);
+        }
+
+        //瑙f瀽浠撳唴娓╀粨鍐呮箍
+        int thConf = Integer.valueOf(depotConf.getThConf());
+        int start = 0, end = 6;
+        if(thConf > 1){
+            start += 6*thConf; //12-18
+            end += start;
+        }
+        thStr = msg.getThStr().substring(start, end);
+        humidity = BytesUtil.hexToInt(thStr.substring(0, 2));
+        grain.setHumidityIn(humidity * 1.0);
+        substring = thStr.substring(2);
+        tem = BytesUtil.hexToInt(substring);
+        grain.setTempIn(tem * 1.0);
+        if(substring.startsWith("1")){
+            grain.setTempIn(tem * -1.0);
+        }
 
         grain.setReceiveDate(new Date());
         grain.setRemark("绮俯姝e父");
@@ -591,6 +615,17 @@
         grain.setTempMax(max);
         grain.setTempMin(min);
         grain.setPoints(StringUtils.join(temps, ","));
+        //鍒ゆ柇鏄惁鏄敟褰粨锛屾槸鐨勮瘽杩涜閿ュ舰浠撹ˉ鐐�
+        if(StringUtils.isNotEmpty(depotConf.getCableCone())){
+            //涓婇敟褰㈣ˉ鐐�
+            if(Constant.CABLE_CONE_1.equals(depotConf.getCableCone())){
+                grain.setPoints(upConePoints(depotConf, grain.getPoints()));
+            }
+            //涓嬮敟褰㈣ˉ鐐�
+            if(Constant.CABLE_CONE_2.equals(depotConf.getCableCone())){
+                grain.setPoints(downConePoints(depotConf, grain.getPoints()));
+            }
+        }
 
         String depotIds = exeRequest.getDepotIds();
         boolean notifyWeb = true;
@@ -682,11 +717,85 @@
         return temps;
     }
 
-    private String buildCurKey(ReMessage msg, int curPacket) {
-        return msg.getSerId() + "_" + curPacket;
+    /**
+     * 涓婇敟褰㈣ˉ鐐�(鐐逛綅浣嶇疆姝g‘锛岄渶瑕佽ˉ鐐逛负-102)
+     *
+     * @param depotConf
+     * @param points
+     * @return
+     */
+    private String upConePoints(DepotConf depotConf, String points){
+        String[] cableRuleAtt = depotConf.getCableRule().split("-");
+        String[] cableCirAtt = depotConf.getCableCir().split("-");
+        //鑾峰彇鏈�澶х殑灞傞厤缃�
+        int layMax = Integer.valueOf(cableCirAtt[0]);
+        for (int i = 0; i < cableCirAtt.length; i++) {
+            if (Integer.valueOf(cableCirAtt[i]) >= layMax) {
+                layMax = Integer.valueOf(cableCirAtt[i]);
+            }
+        }
+        //鎵�鍦ㄥ眰浠�1寮�濮�
+        int curLay = 1;
+        //鎵�鍦ㄦ牴
+        int curRoot = 1;
+        //鎵�鍦ㄥ湀
+        int curCir = 1;
+        //褰撳墠鍦堢殑灞�
+        int cirLay = 1;
+        String[] array = points.split(",");
+
+        for (int i = 0; i < array.length; i++) {
+            curLay = (i % layMax) + 1;
+            curRoot = (i / layMax) + 1;
+            curCir = getCurCir(curRoot, cableRuleAtt);
+            cirLay = Integer.valueOf(cableCirAtt[curCir - 1]);
+
+            //姣斿閰嶇疆浜�5灞備絾鏄綋鍓嶆槸6灞傦紝璇存槑褰撳墠鐐逛负琛ュ伩鐐�
+            if (curLay <= (layMax - cirLay)) {
+                array[i] = String.valueOf(Constant.ADD_TEMP);
+            }
+        }
+        return StringUtils.join(array, ",");
     }
 
-    private String buildContextKey(String companyId, String serId) {
-        return companyId + "_" + serId;
+    /**
+     * 涓嬮敟褰㈣ˉ鐐�(鐐逛綅浣嶇疆姝g‘锛岄渶瑕佽ˉ鐐逛负-102)
+     *
+     * @param depotConf
+     * @param points
+     * @return
+     */
+    private String downConePoints(DepotConf depotConf, String points){
+        String[] cableRuleAtt = depotConf.getCableRule().split("-");
+        String[] cableCirAtt = depotConf.getCableCir().split("-");
+        //鑾峰彇鏈�澶х殑灞傞厤缃�
+        int layMax = Integer.valueOf(cableCirAtt[0]);
+        for (int i = 0; i < cableCirAtt.length; i++) {
+            if (Integer.valueOf(cableCirAtt[i]) >= layMax) {
+                layMax = Integer.valueOf(cableCirAtt[i]);
+            }
+        }
+        //鎵�鍦ㄥ眰浠�1寮�濮�
+        int curLay = 1;
+        //鎵�鍦ㄦ牴
+        int curRoot = 1;
+        //鎵�鍦ㄥ湀
+        int curCir = 1;
+        //褰撳墠鍦堢殑灞�
+        int cirLay = 1;
+        String[] array = points.split(",");
+
+        for (int i = 0; i < array.length; i++) {
+            curLay = (i % layMax) + 1;
+            curRoot = (i / layMax) + 1;
+            curCir = getCurCir(curRoot, cableRuleAtt);
+            cirLay = Integer.valueOf(cableCirAtt[curCir - 1]);
+
+            //姣斿閰嶇疆浜�5灞備絾鏄綋鍓嶆槸6灞傦紝璇存槑褰撳墠鐐逛负琛ュ伩鐐�
+            if (curLay > cirLay) {
+                array[i] = String.valueOf(Constant.ADD_TEMP);
+            }
+        }
+        return StringUtils.join(array, ",");
     }
 }

--
Gitblit v1.9.3