From ae81799a3b2a89d56280ee53db7f6789cb7842f9 Mon Sep 17 00:00:00 2001
From: CZT <czt18638530771@163.com>
Date: 星期日, 08 十月 2023 17:50:02 +0800
Subject: [PATCH] 优化贝博粮情协议-星仓补点问题

---
 igds-protocol-beibo/src/main/java/com/ld/igds/protocol/beibo/grainv1/analysis/AnalysisService.java |  432 ++++++++++++++++++++++++++++++++++++++----------------
 1 files changed, 304 insertions(+), 128 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 f130495..0338e4f 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
@@ -20,11 +20,13 @@
 import com.ld.igds.protocol.beibo.grainv1.util.BeiboGrainServerUtils;
 import com.ld.igds.util.BytesUtil;
 import com.ld.igds.util.ContextUtil;
+import com.ld.igds.util.NumberUtil;
 import com.ld.igds.warn.WarnUtils;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
+
 import java.util.*;
 
 /**
@@ -53,82 +55,115 @@
 
     public static String result = "";
 
-    public static Map<String, String> contextMap = new HashMap<>();
-
     public static double ERROR_CHECK_TAG = -100.0;
 
     public static double FAULT_CHECK_TAG = 85.0;
 
     public static double ERROR_CHECK_TAG2 = 50;
+    public static String ERROR_HEX = "FFFF";
 
     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));
-    }
+    /*
+    * 00000000FFEB90FEAA41D821DD21DB21DE21DE21DA21DD21DE21DC21DC21DC21DC21DB21D821D721CE21D121DD21DC21DF21DE21DE21DD21DA21DD21D921DD21DC21DA21D921D921D721D521D321DD21DE21DF21DC21DF21DC21DA21DD21DD21DD21DC21DC21DC21DB21D821D721D121DC21DF21DF21DD21DD21DA21DE21DD21DC21DE21DB21D821DA21DB21D821D721D321DE21E021DD21DF21DF21DE21DB21DC21DF21DF21DD21DF21DB21DC21DB21FFFFFFFFDA21DC21D721DB21DB21DA21DB21D421DB21D921DC21D821D921D621D321FFFFFFFFDF21E021DE21DE21DB21DD21DC21E021DF21DD21DD21DC21DC21DC21DA21FFFFFFFFD921DD21DD21DE21DB21DD21DA21DB21DF21DD21DC21DB21DB21DB21D921FFFFFFFFDD21DC21DE21DD21DE21DC21DB21DC21DE21DE21DC21DC21DB21D921D921FFFFFFFFE021DD21DB21E021DF21DB21DB21D821DE21DE21DD21DD21DB21DB21DB21FFFFFFFFE021E021E021E221DC21DE21DF21DD21DD21DF21DF21DB21DC21DD21DC21FFFFFFFFE221E321E321E521E421DF21E321E321E321E521E321E121D921DE21FFFFFFFFFFFFE321E421E321E621E521E321E621E021E521E321E221E321DF21DE21FFFFFFFFFFFFE421E621E521E521E621E321E521E121E621E121E321E421E121DE21FFFFFFFFFFFFE621E421E521E521E521E321E521E421E121E321E521E321DF21E021FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF40013D10101039014110101010101010101000000000000000E5113500031A4C
+    *
+    * 00000000FFEB90FEAA
+    * 41
+    * D821DD21DB21DE21DE21DA21DD21DE21DC21DC21DC21DC21DB21D821D721CE21D121
+    * DD21DC21DF21DE21DE21DD21DA21DD21D921DD21DC21DA21D921D921D721D521D321
+    * DD21DE21DF21DC21DF21DC21DA21DD21DD21DD21DC21DC21DC21DB21D821D721D121
+    * DC21DF21DF21DD21DD21DA21DE21DD21DC21DE21DB21D821DA21DB21D821D721D321
+    * DE21E021DD21DF21DF21DE21DB21DC21DF21DF21DD21DF21DB21DC21DB21FFFFFFFF
+    * DA21DC21D721DB21DB21DA21DB21D421DB21D921DC21D821D921D621D321FFFFFFFF
+    * DF21E021DE21DE21DB21DD21DC21E021DF21DD21DD21DC21DC21DC21DA21FFFFFFFF
+    * D921DD21DD21DE21DB21DD21DA21DB21DF21DD21DC21DB21DB21DB21D921FFFFFFFF
+    * DD21DC21DE21DD21DE21DC21DB21DC21DE21DE21DC21DC21DB21D921D921FFFFFFFF
+    * E021DD21DB21E021DF21DB21DB21D821DE21DE21DD21DD21DB21DB21DB21FFFFFFFF
+    * E021E021E021E221DC21DE21DF21DD21DD21DF21DF21DB21DC21DD21DC21FFFFFFFF
+    *
+    * E221E321E321E521E421DF21E321E321E321E521E321E121D921DE21FFFFFFFFFFFF
+    * E321E421E321E621E521E321E621E021E521E321E221E321DF21DE21FFFFFFFFFFFF
+    * E421E621E521E521E621E321E521E121E621E121E321E421E121DE21FFFFFFFFFFFF
+    * E621E421E521E521E521E321E521E421E121E321E521E321DF21E021FFFFFFFFFFFF
+    * FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+    * 40013D 101010 390141 101010101010101010
+    * 00000000000000E51135
+    * 00031A4C
+    *
+    *
+    *
+    *
+    *
+    * */
     /**
-     * 00000000FFEB90FEAA41E821EC21EA21EC21ED21EC21E921E221E921E921E921EC21E921ED21F021E521E521E221E421E321E321E121DE21D721E021DD21DC21DF21FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF
+     *
      *
      * @param hexStr
      */
     public void analysis(String ip, int port, String hexStr) {
 
         result += hexStr;
-        if(result.length() < 1066*2){
+        if (result.length() < 1066 * 2) {
             log.info("鍒嗘満------->>骞冲彴锛屾姤鏂囬暱搴︿笉澶燂紝绛夊緟涓嬩竴鍖呮暟鎹�");
             return;
         }
 
-        //灏佽鏁版嵁
-        ReMessage reMessage = ReMessageBuilder.getInstance().buildMessage(hexStr);
-        reMessage.setIp(ip);
-        reMessage.setPort(port);
-        log.info("鍒嗘満------->>骞冲彴锛氱伯鎯呭畬鏁存姤鏂囦俊鎭�={}", reMessage);
+        try {
 
-        if (!BeiboGrainServerUtils.MSG_START.startsWith(reMessage.getStartStr())) {
-            log.error("鍒嗘満------->>骞冲彴锛岃В鏋愮伯鎯呭け璐ワ細鎶ユ枃璧峰绗�={}閿欒锛屼笉瑙f瀽", reMessage.getStartStr());
-            return;
+
+            //灏佽鏁版嵁
+            ReMessage reMessage = ReMessageBuilder.getInstance().buildMessage(result);
+            reMessage.setIp(ip);
+            reMessage.setPort(port);
+            log.info("鍒嗘満------->>骞冲彴锛氱伯鎯呭畬鏁存姤鏂囦俊鎭�={}", reMessage);
+            result = "";
+            if (!BeiboGrainServerUtils.MSG_START.startsWith(reMessage.getStartStr())) {
+                log.error("鍒嗘満------->>骞冲彴锛岃В鏋愮伯鎯呭け璐ワ細鎶ユ枃璧峰绗�={}閿欒锛屼笉瑙f瀽", reMessage.getStartStr());
+                return;
+            }
+
+            //鏍规嵁鍒嗘満鍦板潃鑾峰彇鍒嗘満淇℃伅
+            DeviceSer ser = coreSerService.getCacheSer(ContextUtil.getDefaultCompanyId(), reMessage.getSerId());
+            if (ser == null) {
+                log.error("鍒嗘満-------->>骞冲彴锛岃В鏋愮伯鎯呭け璐ワ紝鏈幏鍙栧埌绯荤粺绮儏涓绘満閰嶇疆锛�" + reMessage.getSerId());
+                return;
+            }
+
+            List<ExeRequest> list = exeOrderService.getInProgressOrderBySerId(BizType.GRAIN.getCode(), ser.getId());
+            if (null == list || list.isEmpty()) {
+                String info = "绮儏瑙f瀽澶辫触:鍒嗘満=" + ser.getName() + "娌℃湁鑾峰彇鍒版墍灞炰粨搴撲俊鎭��";
+                log.error("鍒嗘満------>>>骞冲彴锛�" + info);
+                notifyGrainInvoker.notifyWeb(ser.getCompanyId(), OrderRespEnum.MSG_ERROR, BizType.GRAIN, info);
+                return;
+            }
+
+            ExeRequest exeRequest = list.get(0);
+            log.info("鑾峰彇绮儏鍛戒护淇℃伅={}", exeRequest);
+            if (null == exeRequest) {
+                String info = "绮儏瑙f瀽澶辫触:鍒嗘満=" + ser.getName() + "娌℃湁鑾峰彇鍘嗗彶鍛戒护銆�";
+                log.error("璐濆崥鍒嗘満------>>>骞冲彴锛�" + info);
+                return;
+            }
+
+            DepotConf depotConf = commonService.getCacheDepotConf(exeRequest.getCompanyId(), exeRequest.getDepotId());
+            if (null == depotConf) {
+                String info = "绮儏瑙f瀽澶辫触:鍒嗘満=" + ser.getName() + "娌℃湁鑾峰彇鍒扮伯鎯呭弬鏁伴厤缃俊鎭��";
+                log.error("鍒嗘満------>>>骞冲彴锛�" + info);
+                notifyGrainInvoker.notifyWeb(ser.getCompanyId(),
+                        OrderRespEnum.MSG_ERROR, BizType.GRAIN, info);
+                return;
+            }
+
+            // 棣栧厛鑾峰彇鍒扮郴缁熷弬鏁帮紝鍒ゆ柇鏄惁闇�瑕佹壒娆¤嚜鍔ㄤ紭鍖�
+            DicSysConf sysConf = commonService.getCacheSysConf(ser.getCompanyId());
+
+            reMessage.setCompanyId(ser.getCompanyId());
+            analysisGrain(depotConf, reMessage, ser, exeRequest, sysConf);
+        } catch (Exception e) {
+            result = "";
+            log.error("鍒嗘満------->>骞冲彴锛岃В鏋愮伯鎯呭紓甯革細鍘熷洜={}", e.toString());
         }
-
-        //鏍规嵁鍒嗘満鍦板潃鑾峰彇鍒嗘満淇℃伅
-        DeviceSer ser = coreSerService.getCacheSer(ContextUtil.getDefaultCompanyId(), reMessage.getSerId());
-        if (ser == null) {
-            log.error("鍒嗘満-------->>骞冲彴锛岃В鏋愮伯鎯呭け璐ワ紝鏈幏鍙栧埌绯荤粺绮儏涓绘満閰嶇疆锛�" + reMessage.getSerId());
-            return;
-        }
-
-        List<ExeRequest> list = exeOrderService.getInProgressOrderBySerId(BizType.GRAIN.getCode(), ser.getId());
-        if (null == list || list.isEmpty()) {
-            String info = "绮儏瑙f瀽澶辫触:鍒嗘満=" + ser.getName() + "娌℃湁鑾峰彇鍒版墍灞炰粨搴撲俊鎭��";
-            log.error("鍒嗘満------>>>骞冲彴锛�" + info);
-            notifyGrainInvoker.notifyWeb(ser.getCompanyId(), OrderRespEnum.MSG_ERROR, BizType.GRAIN, info);
-            return;
-        }
-
-        ExeRequest exeRequest = list.get(0);
-        log.info("鑾峰彇绮儏鍛戒护淇℃伅={}", exeRequest);
-        if (null == exeRequest) {
-            String info = "绮儏瑙f瀽澶辫触:鍒嗘満=" + ser.getName() + "娌℃湁鑾峰彇鍘嗗彶鍛戒护銆�";
-            log.error("璐濆崥鍒嗘満------>>>骞冲彴锛�" + info);
-            return;
-        }
-
-        DepotConf depotConf = commonService.getCacheDepotConf(exeRequest.getCompanyId(), exeRequest.getDepotId());
-        if (null == depotConf) {
-            String info = "绮儏瑙f瀽澶辫触:鍒嗘満=" + ser.getName() + "娌℃湁鑾峰彇鍒扮伯鎯呭弬鏁伴厤缃俊鎭��";
-            log.error("鍒嗘満------>>>骞冲彴锛�" + info);
-            notifyGrainInvoker.notifyWeb(ser.getCompanyId(),
-                    OrderRespEnum.MSG_ERROR, BizType.GRAIN, info);
-            return;
-        }
-
-        // 棣栧厛鑾峰彇鍒扮郴缁熷弬鏁帮紝鍒ゆ柇鏄惁闇�瑕佹壒娆¤嚜鍔ㄤ紭鍖�
-        DicSysConf sysConf = commonService.getCacheSysConf(ser.getCompanyId());
-
-        reMessage.setCompanyId(ser.getCompanyId());
-        analysisGrain(depotConf, reMessage, ser, exeRequest, sysConf);
     }
 
 
@@ -170,23 +205,6 @@
         }
 
         // 涓�鍒嗗嚑澶氫粨鎯呭喌锛岃�冭檻鍗曚粨閲囬泦鍜屽浠撻噰闆�
-        // 鍗曚粨閲囬泦鏃跺�欐暟鎹粠0杩斿洖
-        if (StringUtils.isEmpty(exeRequest.getDepotIds())) {
-
-            depotConf.setCableEnd(depotConf.getCableEnd() - depotConf.getCableStart() + 1);
-            depotConf.setCableStart(ser.getCableStart());
-
-            if (DepotType.TYPE_02.getCode().equals(depotConf.getDepotType())) {
-                analysisStep2(depotConf, ser, exeRequest, reMessage, sysConf);
-            } else if (DepotType.TYPE_04.getCode().equals(depotConf.getDepotType())) {
-                analysisStep2(depotConf, ser, exeRequest, reMessage, sysConf);
-            } else {
-                analysisStep1(depotConf, ser, exeRequest, reMessage, sysConf);
-            }
-
-            return;
-
-        }
 
         // 鎵归噺閲囬泦鎵�鏈夊叧鑱斾竴璧烽噰闆嗭紝閬嶅巻鎵ц
         for (DepotConf depotConfTemp : depotConfs) {
@@ -241,12 +259,19 @@
 
         log.info("------绛掍粨绮儏鎶ユ枃={}------", strPoints);
 
-        int sumNum = 0, cableZ = 1;// sumNum 鍏卞灏戞牴鐢电紗锛沜ableZ 灞傜殑鏈�澶у�硷紝閿ュ舰浠撹ˉ榻愭渶澶у眰
+        int sumNum = 0, cableZ = 1;  // sumNum 鍏卞灏戞牴鐢电紗锛沜ableZ 灞傜殑鏈�澶у�硷紝閿ュ舰浠撹ˉ榻愭渶澶у眰
+
         for (int i = 0; i < cableCirAtt.length; i++) {
             if (Integer.valueOf(cableCirAtt[i]) > cableZ) {
                 cableZ = Integer.valueOf(cableCirAtt[i]);
             }
             sumNum += Integer.valueOf(cableRuleAtt[i]);
+        }
+        int cableZTemp = 1;// 褰撳墠浠撶殑鏈�澶у眰
+        cableZTemp = cableZ;
+        //鍒ゆ柇鏈�澶у眰璺熷垎鏈虹殑灞傛暟鏄惁涓�鑷�
+        if(cableZ < ser.getCableZ()){
+            cableZ = ser.getCableZ();
         }
 
         // 鏍规嵁灞傝鍒楄幏鍙栨寚瀹氶暱搴�
@@ -260,58 +285,47 @@
         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; //绗﹀彿浣�
+        int num = 0; //鏍囪瑙f瀽鐨勫眰鏁�
         for (int i = 0; i < strPoints.length() / 4; i++) {
-            temp = strPoints.substring(i * 4, i * 4 + 4);
-            if (temp == null) {
-                temp = "0000";
+            if(num == cableZ){
+                num = 0;
             }
-            tempValue = BytesUtil.hexToInt(BytesUtil.tran_LH(temp)) / 10.0;
-
-            //闈炴甯稿��
-            if (tempValue > ERROR_CHECK_TAG2) {
-                tempValue = Constant.ERROR_TEMP;
-            }
-
-            // 鏁呴殰鍊煎鐞�
-            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);
+            if(num < cableZTemp){
+                temp = strPoints.substring(i * 4, i * 4 + 4);
+                if (temp == null) {
+                    temp = "0000";
+                }
+                //楂樹綆浣嶈浆鎹㈠悗杞负16浣嶄簩杩涘埗瀛楃涓�
+                temp = BytesUtil.tran_LH(temp);
+                if(ERROR_HEX.equals(temp)){
+                    tempValue = Constant.ERROR_TEMP;
+                }else {
+                    //10杩涘埗杞�16浣嶇殑2杩涘埗
+                    temp = BytesUtil.hexString2binaryString(temp, 16);
+                    //绗﹀彿浣�
+                    symbol = Integer.valueOf(temp.substring(0, 1));
+                    //鑾峰彇娓╁害鍊�
+                    tempValue = BytesUtil.biannary2Decimal(temp.substring(6)) * 0.0625;
+                    //鑻ヤ负璐燂紝鍒欒ˉ鐮侊細鍙栧弽鍔�1
+                    if (symbol == 1) {
+                        tempValue = ((~BytesUtil.biannary2Decimal(temp.substring(6))) + 1) * 0.0625;
                     }
-
-                } else {
-                    temps.add(tempValue);
+                    tempValue = NumberUtil.keepPrecision(tempValue, 1);
                 }
 
-            } else {
+                //闈炴甯稿��
+                if (tempValue > ERROR_CHECK_TAG2) {
+                    tempValue = Constant.ERROR_TEMP;
+                }
+
+                // 鏁呴殰鍊煎鐞�
+                if (tempValue >= FAULT_CHECK_TAG) {
+                    tempValue = Constant.FAULT_TEMP;
+                }
                 temps.add(tempValue);
             }
+            num ++;
         }
 
         log.debug("-------CheckGrainRequest--={}", exeRequest.toString());
@@ -369,12 +383,29 @@
         List<Double> temps = new ArrayList<>();
         double tempValue;
         String temp;
+        int symbol = 0;
         for (int i = 0; i < strPoints.length() / 4; i++) {
             temp = strPoints.substring(i * 4, i * 4 + 4);
             if (temp == null) {
                 temp = "0000";
             }
-            tempValue = BytesUtil.hexToInt(BytesUtil.tran_LH(temp)) / 10.0;
+
+            if(ERROR_HEX.equals(temp)){
+                tempValue = Constant.ERROR_TEMP;
+            }else {
+                //10杩涘埗杞�16浣嶇殑2杩涘埗
+                temp = BytesUtil.hexString2binaryString(temp, 16);
+                //绗﹀彿浣�
+                symbol = Integer.valueOf(temp.substring(0, 1));
+                //鑾峰彇娓╁害鍊�
+                tempValue = BytesUtil.biannary2Decimal(temp.substring(6)) * 0.0625;
+                //鑻ヤ负璐燂紝鍒欒ˉ鐮侊細鍙栧弽鍔�1
+                if (symbol == 1) {
+                    tempValue = ((~BytesUtil.biannary2Decimal(temp.substring(6))) + 1) * 0.0625;
+                }
+                tempValue = NumberUtil.keepPrecision(tempValue, 1);
+            }
+
             // 璇存槑瑙f瀽鐨勬暟鎹湁闂
             if (tempValue == ERROR_CHECK_TAG || tempValue == ERROR_CHECK_TAG2) {
                 tempValue = Constant.ERROR_TEMP;
@@ -434,10 +465,40 @@
         grain.setCompanyId(depotConf.getCompanyId());
         grain.setCable(depotConf.getCableRule());
         grain.setBatchId(msg.getBatchId());
-        grain.setTempIn(Constant.ERROR_TEMP);
-        grain.setHumidityIn(Constant.ERROR_TEMP);
 
-        grain.setReceiveDate(msg.getReceiveDate());
+        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 * 0.1);
+        if(substring.startsWith("1")){
+            grain.setTempOut(tem * -0.1);
+        }
+
+        //瑙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 * 0.1);
+        if(substring.startsWith("1")){
+            grain.setTempIn(tem * -0.1);
+        }
+
+        grain.setReceiveDate(new Date());
         grain.setRemark("绮俯姝e父");
 
         // 鑾峰彇缂撳瓨涓殑鍛戒护淇℃伅
@@ -516,10 +577,40 @@
         grain.setCable(depotConf.getCableRule());
         grain.setCableCir(depotConf.getCableCir());
         grain.setBatchId(msg.getBatchId());
-        grain.setTempIn(Constant.ERROR_TEMP);
-        grain.setHumidityIn(Constant.ERROR_TEMP);
 
-        grain.setReceiveDate(msg.getReceiveDate());
+        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 * 0.1);
+        if(substring.startsWith("1")){
+            grain.setTempOut(tem * -0.1);
+        }
+
+        //瑙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 * 0.1);
+        if(substring.startsWith("1")){
+            grain.setTempIn(tem * -0.1);
+        }
+
+        grain.setReceiveDate(new Date());
         grain.setRemark("绮俯姝e父");
         grain.setCheckUser(exeRequest.getExeUser());
 
@@ -565,6 +656,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;
@@ -656,11 +758,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