| | |
| | | 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 |
| | | */ |
| | |
| | | |
| | | log.info("------筒仓粮情报文={}------", strPoints); |
| | | |
| | | int sumNum = 0, cableZ = 1;// sumNum 共多少根电缆;cableZ 层的最大值,锥形仓补齐最大层 |
| | | int sumNum = 0, cableZ = 1; // sumNum 共多少根电缆;cableZ 层的最大值,锥形仓补齐最大层 |
| | | |
| | | 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(); |
| | | } |
| | | |
| | | // 根据层行列获取指定长度 |
| | |
| | | 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; //标记解析的层数 |
| | | 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; |
| | | } |
| | | //高低位转换后转为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; |
| | | if(num < cableZTemp){ |
| | | temp = strPoints.substring(i * 4, i * 4 + 4); |
| | | if (temp == null) { |
| | | temp = "0000"; |
| | | } |
| | | tempValue = NumberUtil.keepPrecision(tempValue, 1); |
| | | } |
| | | |
| | | //非正常值 |
| | | 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); |
| | | //高低位转换后转为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()); |
| | |
| | | int symbol = 0; |
| | | for (int i = 0; i < strPoints.length() / 4; i++) { |
| | | temp = strPoints.substring(i * 4, i * 4 + 4); |
| | | //高低位转换后转为16位二进制字符串 |
| | | temp = BytesUtil.tran_LH(temp); |
| | | if (temp == null) { |
| | | temp = "0000"; |
| | | } |
| | |
| | | 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 = ""; |
| | | |
| | | //解析仓内温仓内湿 |
| | | int thConf = Integer.valueOf(depotConf.getThConf()); |
| | | int start = 0, end = 6; |
| | | if(thConf > 1){ |
| | | start += 6*thConf; //12-18 |
| | | end += start; |
| | | } |
| | | String 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("粮温正常"); |
| | |
| | | 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 = ""; |
| | | |
| | | //解析仓内温仓内湿 |
| | | int thConf = Integer.valueOf(depotConf.getThConf()); |
| | | int start = 0, end = 6; |
| | | if(thConf > 1){ |
| | | start += 6*thConf; //12-18 |
| | | end += start; |
| | | } |
| | | String 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("粮温正常"); |
| | |
| | | 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; |
| | |
| | | return temps; |
| | | } |
| | | |
| | | private String buildCurKey(ReMessage msg, int curPacket) { |
| | | return msg.getSerId() + "_" + curPacket; |
| | | /** |
| | | * 上锥形补点(点位位置正确,需要补点为-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; |
| | | /** |
| | | * 下锥形补点(点位位置正确,需要补点为-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, ","); |
| | | } |
| | | } |