package com.web.util;
import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.Map;
/**
* 综合指数计算
*
*
* @author Winy
* @version 1.0
* 附件1:综合指数计算公式=PM2.5/35+PM10/70+SO2/60+NO2/40+CO/4+O3/160
* 序号 污染物指数 日排名取值 月排名取值 年
* 1 PM2.5 日平均值 月平均值 年均值 第95百 分位数
* 2 PM10 日平均值 月平均值 年均值 第95百分位数
* 3 SO2 日平均值 月平均值 年均值 第98百分位数
* 4 NO2 日平均值 月平均值 年均值 第98百分位数
* 5 CO 日平均值 月第95百分比 年均值 第95百分位数
* 6 O3 日最大8小时平均值 月 日最大8小时平均值的 第90百分比 日最大 O3_8年均值 第90百分位数
* @date 2022年4月7日
*/
public class CompositeIndexUtil {
/**
* 计算综合指数各参数得取值类型
*/
public static enum Type {DAY, MONTH, YEAR};
/**
* @param type 0=小时,1=日,2=月
*/
public static Float getComIndex(Object o, Type type) {
Float coi = null;
try {
Map<String, Object> map = objectToMap(o);
float pm10 = 0, pm25 = 0, so2 = 0, no2 = 0, co = 0, o3 = 0;
if (map.get("pm10") != null && (Float) map.get("pm10") > 0) {
pm10 = (float) map.get("pm10");
}
if (map.get("pm25") != null && (Float) map.get("pm25") > 0) {
pm25 = (float) map.get("pm25");
}
if (map.get("so2") != null && (Float) map.get("so2") > 0) {
so2 = (float) map.get("so2");
}
if (map.get("no2") != null && (Float) map.get("no2") > 0) {
no2 = (float) map.get("no2");
}
if (map.get("co") != null && (Float) map.get("co") > 0) {
co = (float) map.get("co");
}
switch (type) {
case DAY:
if (map.get("o3") != null && (Float) map.get("o3") > 0) {
o3 = (float) map.get("o3");
}
break;
case MONTH:
co = co * 0.95f;
if (map.get("o3_8") != null && (Float) map.get("o3_8") > 0) {
o3 = (float) map.get("o3_8") * 0.9f;
}
break;
case YEAR:
//用于年报中 年均值
pm10 = pm10 * 0.95f;
pm25 = pm25 * 0.95f;
so2 = so2 * 0.98f;
no2 = no2 * 0.98f;
co = co * 0.95f;
if (map.get("o3_8") != null && (Float) map.get("o3_8") > 0) {
o3 = (float) map.get("o3_8") * 0.9f;
}
break;
default:
return null;
}
coi = pm25 / 35 + pm10 / 70 + so2 / 60 + no2 / 40 + co / 4 + o3 / 160;
return FloatUtil.subPoint_1(coi);
} catch (IllegalArgumentException | IllegalAccessException e) {
e.printStackTrace();
}
return null;
}
/**
* object转map
*
* @throws IllegalAccessException
* @throws IllegalArgumentException
*/
public static Map<String, Object> objectToMap(Object obj) throws IllegalArgumentException, IllegalAccessException {
if (obj == null) {
return null;
}
Map<String, Object> map = new HashMap<String, Object>();
Field[] declaredFields = obj.getClass().getDeclaredFields();
for (Field field : declaredFields) {
field.setAccessible(true);
map.put(field.getName(), field.get(obj));
}
return map;
}
}
|