| | |
| | | |
| | | @Override |
| | | @Transactional(rollbackFor = Exception.class) |
| | | public void dcResistanceDataAnalysis(String jsonStr,String deviceCode) { |
| | | public void dcResistanceDataAnalysis(String jsonStr) { |
| | | Map<String, Object> dataMap = JSONObject.parseObject(jsonStr, new TypeReference<Map<String, Object>>(){}.getType()); |
| | | if(CollectionUtil.isNotEmpty(dataMap) && Objects.nonNull(dataMap.get("data"))){ |
| | | List<DeviceMqttVO> dataList = JSONArray.parseObject(dataMap.get("data").toString(), new TypeReference<List<DeviceMqttVO>>(){}.getType()); |
| | | if(CollectionUtil.isNotEmpty(dataMap)){ |
| | | //过滤出包含实际电阻值的对象 |
| | | String entrustCode = getValueByDataStream(dataList,DCResistanceMqttConstants.NSDQCS_DQCS_SN); |
| | | BigDecimal zxdzzValue = new BigDecimal(getValueByDataStream(dataList,DCResistanceMqttConstants.NSDQCS_DQCS_ZXDZZ)); |
| | | BigDecimal fxdzzValue = new BigDecimal(getValueByDataStream(dataList,DCResistanceMqttConstants.NSDQCS_DQCS_FXDZZ)); |
| | | String entrustCode = getValueByDataStream(dataMap,DCResistanceMqttConstants.NSDQCS_DQCS_SN); |
| | | String deviceCode = getValueByDataStream(dataMap,DCResistanceMqttConstants.deviceName); |
| | | BigDecimal zxdzzValue = new BigDecimal(getValueByDataStream(dataMap,DCResistanceMqttConstants.NSDQCS_DQCS_ZXDZZ)); |
| | | BigDecimal fxdzzValue = new BigDecimal(getValueByDataStream(dataMap,DCResistanceMqttConstants.NSDQCS_DQCS_FXDZZ)); |
| | | // BigDecimal testLength = new BigDecimal(getValueByDataStream(dataList,DCResistanceMqttConstants.NSDQCS_DQCS_CD)); |
| | | Double tempValue = new BigDecimal(getValueByDataStream(dataList,DCResistanceMqttConstants.NSDQCS_DQCS_WD)).setScale(2, RoundingMode.HALF_UP).doubleValue(); |
| | | Double tempValue = new BigDecimal(getValueByDataStream(dataMap,DCResistanceMqttConstants.NSDQCS_DQCS_WD)).setScale(2, RoundingMode.HALF_UP).doubleValue(); |
| | | //计算平均电阻值 |
| | | BigDecimal value = zxdzzValue.abs().add(fxdzzValue.abs()).divide(BigDecimal.valueOf(2L), RoundingMode.HALF_UP); |
| | | Long count = collectBridgeMapper.selectCount(Wrappers.<CollectBridge>lambdaQuery().eq(CollectBridge::getEntrustCode, entrustCode)); |
| | |
| | | } |
| | | |
| | | @Override |
| | | public void elongationDataAnalysis(String jsonStr,String deviceCode) { |
| | | public void elongationDataAnalysis(String jsonStr) { |
| | | Map<String, Object> dataMap = JSONObject.parseObject(jsonStr, new TypeReference<Map<String, Object>>(){}.getType()); |
| | | if(CollectionUtil.isNotEmpty(dataMap) && Objects.nonNull(dataMap.get("data"))){ |
| | | List<DeviceMqttVO> dataList = JSONArray.parseObject(dataMap.get("data").toString(), new TypeReference<List<DeviceMqttVO>>(){}.getType()); |
| | | if(CollectionUtil.isNotEmpty(dataMap)){ |
| | | // 伸长率:处理 NSTSSC.TSSC.SCL 数据 |
| | | processMultipleValueDataStream(dataList, ElongationMqttConstants.NSTSSC_TSSC_SCL,3,10.0,deviceCode); |
| | | }else{ |
| | | processMultipleValueDataStream(dataMap, ElongationMqttConstants.NSTSSC1_TSSC_SCL,3,10.0,deviceCode); |
| | | processMultipleValueDataStream(dataMap, ElongationMqttConstants.NSTSSC_TSSC_SCL,3,10.0); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 获取mqtt消息体中对应标识的值 |
| | | * @param dataList 数据列表 |
| | | * @param dataMap 数据列表 |
| | | * @param dataStream 数据流标识 |
| | | */ |
| | | private String getValueByDataStream(List<DeviceMqttVO> dataList, String dataStream) { |
| | | DeviceMqttVO deviceMqttVO = dataList.stream() |
| | | .filter(f -> StringUtils.equals(f.getDataStream(), dataStream)) |
| | | .findFirst() |
| | | .orElse(null); |
| | | if(Objects.nonNull(deviceMqttVO)){ |
| | | List<DeviceMqttVO.DataPoint> dataPoints = deviceMqttVO.getDataPoints(); |
| | | return CollectionUtil.isNotEmpty(dataPoints)?dataPoints.get(0).getValue():""; |
| | | private String getValueByDataStream(Map<String,Object> dataMap, String dataStream) { |
| | | try{ |
| | | String val = dataMap.get(dataStream).toString(); |
| | | return StringUtils.isNotBlank(val)?val:"0"; |
| | | }catch (Exception e){ |
| | | return "0"; |
| | | } |
| | | return ""; |
| | | } |
| | | |
| | | /** |
| | | * 处理需要保存多个值的数据流,并保存到 Redis |
| | | * @param dataList 数据列表 |
| | | * @param dataMap 数据列表 |
| | | * @param dataStream 数据流标识 |
| | | * @param maxSize 保存的最大个数 |
| | | * @param minVal 存储数据的最小值,低于该值则跳过;-1代表不限制 |
| | | * @param deviceCode 设备编号 |
| | | */ |
| | | private void processMultipleValueDataStream(List<DeviceMqttVO> dataList, String dataStream,int maxSize,Double minVal,String deviceCode){ |
| | | private void processMultipleValueDataStream(Map<String,Object> dataMap, String dataStream,int maxSize,Double minVal){ |
| | | // 筛选出当前数据流对应的数据 |
| | | Double value = Double.parseDouble(getValueByDataStream(dataList, dataStream)); |
| | | Double value = Double.parseDouble(getValueByDataStream(dataMap, dataStream)); |
| | | //如果最小值不为空且不为-1,获取到的值小于最小值则跳过不做处理 |
| | | if(Objects.nonNull(minVal)&&minVal!=-1&&value<minVal){ |
| | | return; |
| | |
| | | RedisUtil.delZSetRange(dataStream,0,0); |
| | | } |
| | | } |
| | | String deviceCode = getValueByDataStream(dataMap,ElongationMqttConstants.deviceName); |
| | | RedisUtil.addZSet(dataStream+"."+deviceCode,System.currentTimeMillis(),value); |
| | | } |
| | | |