| | |
| | | try { |
| | | Date time = DateUtils.getDate((String) deviceData.remove("DataTime"), DateUtils.yyyyMMddHHmmss_EN); |
| | | long finalTime = DateUtils.dataToTimeStampTime(time, DateUtils.HH_mm_ss_EN).getTime(); |
| | | |
| | | //先校准烟气流速,再用流速校准烟气流量 |
| | | if (deviceData.get(Constants.SENSOR_CODE_CURRENT_SPEED) != null) { |
| | | deviceData = adjustFlueSpeedAndFlow(deviceData, adjustFormula); |
| | | } |
| | | |
| | | for (String key : deviceData.keySet()) { |
| | | if (!key.contains("Flag")) { |
| | | //测量值 |
| | |
| | | } |
| | | return deviceData; |
| | | } |
| | | |
| | | /** |
| | | * 烟道流速,烟道流量校准 |
| | | * @param deviceData 数据,其中包含各传感器值,和数据时间(用于不同时间段不同校准公式校准) |
| | | * @param adjustFormula 该数据所属设备所有因子的校准公式,key为因子code |
| | | */ |
| | | public Map<String, Object> adjustFlueSpeedAndFlow(Map<String, Object> deviceData, Map<String, Object> adjustFormula) { |
| | | Date time = DateUtils.getDate((String) deviceData.remove("DataTime"), DateUtils.yyyyMMddHHmmss_EN); |
| | | long finalTime = DateUtils.dataToTimeStampTime(time, DateUtils.HH_mm_ss_EN).getTime(); |
| | | //流速测量值 |
| | | Object measuredValue = deviceData.get(Constants.SENSOR_CODE_CURRENT_SPEED); |
| | | |
| | | |
| | | //流速校准 |
| | | List<DeviceAdjustValue> speedFormulas = (List<DeviceAdjustValue>) adjustFormula.get(Constants.SENSOR_CODE_CURRENT_SPEED); |
| | | if (!ObjectUtils.isEmpty(speedFormulas)) { |
| | | //根据时间段筛选校准公式 |
| | | DeviceAdjustValue deviceAdjustValue = new DeviceAdjustValue(); |
| | | Optional<DeviceAdjustValue> optional = speedFormulas.stream() |
| | | .filter(o -> o.getStartTime().getTime() <= finalTime && o.getEndTime().getTime() > finalTime) |
| | | .findFirst(); |
| | | if (optional.isPresent()) { |
| | | deviceAdjustValue = optional.get(); |
| | | } |
| | | |
| | | String formula = deviceAdjustValue.getValue(); |
| | | if (!StringUtils.isEmpty(formula)) { |
| | | |
| | | Expression expression = AviatorEvaluator.compile(formula); |
| | | Map<String, Object> env = new HashMap<>(); |
| | | env.put("cel", Float.parseFloat((String) measuredValue)); |
| | | //校准 |
| | | measuredValue = expression.execute(env); |
| | | deviceData.put(Constants.SENSOR_CODE_CURRENT_SPEED, Double.parseDouble(String.format("%.4f", measuredValue))); |
| | | } |
| | | |
| | | |
| | | //流量校准 |
| | | List<DeviceAdjustValue> flowFormulas = (List<DeviceAdjustValue>) adjustFormula.get(Constants.SENSOR_CODE_CURRENT_FLOW); |
| | | //根据时间段筛选校准公式 |
| | | optional = flowFormulas.stream() |
| | | .filter(o -> o.getStartTime().getTime() <= finalTime && o.getEndTime().getTime() > finalTime) |
| | | .findFirst(); |
| | | if (optional.isPresent()) { |
| | | deviceAdjustValue = optional.get(); |
| | | } |
| | | |
| | | formula = deviceAdjustValue.getValue(); |
| | | if (!StringUtils.isEmpty(formula)) { |
| | | Expression expression = AviatorEvaluator.compile(formula); |
| | | Map<String, Object> env = new HashMap<>(); |
| | | String currentSpeed = deviceData.get(Constants.SENSOR_CODE_CURRENT_SPEED).toString(); |
| | | env.put("currentSpeed", Float.parseFloat(currentSpeed)); |
| | | deviceData.put(Constants.SENSOR_CODE_CURRENT_FLOW, Double.parseDouble(String.format("%.4f", expression.execute(env)))); |
| | | } |
| | | } |
| | | return deviceData; |
| | | } |
| | | } |