package com.moral.api.service.impl; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.xssf.usermodel.XSSFRow; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.web.multipart.MultipartFile; import java.io.IOException; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; import java.util.stream.Collectors; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.moral.api.entity.TbExcel; import com.moral.api.mapper.ExcelMapper; import com.moral.api.pojo.bo.ExcelBO; import com.moral.api.pojo.vo.excel.HnExcelVo; import com.moral.api.pojo.vo.excel.SyExcelVo; import com.moral.api.service.HnExcelService; import com.moral.api.utils.AqiUtils; import com.moral.api.utils.ExcelUtils; import com.moral.util.AQIUtils; import com.moral.util.AmendUtils; import com.moral.util.DateUtils; @Service public class HnExcelServiceImpl implements HnExcelService { @Autowired private ExcelMapper excelMapper; /** * 浑南区模板 * * @param files */ @Override public ExcelBO getExcelImport(List files, Map params) throws IOException, ParseException { String time = (String) params.get("time"); String code = (String) params.get("code"); String time1 = (String) params.get("date"); Date date = DateUtils.getDate(time, "yyyy-MM-dd"); Date date1 = DateUtils.getDate(time1, "yyyy-MM-dd"); ExcelBO excelBO = new ExcelBO(); QueryWrapper wrapper = new QueryWrapper<>(); wrapper.eq("time",date).eq("code",code); TbExcel excel = excelMapper.selectOne(wrapper); if (excel==null){ TbExcel excel1 = new TbExcel(); HashMap>> map = new HashMap<>(); MultipartFile file1 = files.get(0); Map> map1 = getMap1(file1, 0,time); map.put("浑南东路",map1); Map> map2 = getMap1(file1, 1,time); map.put("新秀街",map2); Map> map3 = getTo(file1,time); map.put("浑南区",map3); Map> map4 = getSys(file1, 2, time); map.put("沈阳市",map4); String s = JSON.toJSONString(map); excel1.setValue(s); excel1.setTime(date); excel1.setCode(code); excel1.setDate(date1); excelMapper.insert(excel1); excelBO.setId(excel1.getId()); excelBO.setTime(excel1.getTime()); excelBO.setDate(excel1.getDate()); }else { Date date2 = new Date(); HashMap>> map = new HashMap<>(); MultipartFile file1 = files.get(0); Map> map1 = getMap1(file1, 0,time); map.put("浑南东路",map1); Map> map2 = getMap1(file1, 1,time); map.put("新秀街",map2); Map> map3 = getTo(file1,time); map.put("浑南区",map3); Map> map4 = getSys(file1, 2, time); map.put("沈阳市",map4); String s = JSON.toJSONString(map); excel.setValue(s); excel.setDate(date2); excelMapper.updateById(excel); excelBO.setId(excel.getId()); excelBO.setTime(excel.getTime()); excelBO.setDate(date2); } return excelBO; } /** * 挂图作战导出 * @param id * @return */ @Override public SyExcelVo SyExport(Integer id) { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); HashMap> rsMap = new HashMap<>(); SyExcelVo syExcelVo = new SyExcelVo(); TbExcel excel = excelMapper.selectById(id); String value = excel.getValue(); Date time = excel.getTime(); String format = sdf.format(time); String substring = format.substring(5, 7); int data= Integer.parseInt(substring); Map>> map = JSON.parseObject(value, Map.class); Set strings = map.keySet(); for (String string : strings) { if (string.equals("浑南东路")){ Map> stringListMap = map.get(string); Set strings1 = stringListMap.keySet(); for (String s : strings1) { if (s.equals("count")){ ArrayList list1 = getList(stringListMap, s); rsMap.put("hnd1",list1); } if (s.equals("PM2_5")){ ArrayList list1 = getArrayList(stringListMap, s); rsMap.put("hnd2",list1); } } } if (string.equals("新秀街")){ Map> stringListMap = map.get(string); Set strings1 = stringListMap.keySet(); for (String s : strings1) { if (s.equals("count")){ ArrayList list1 = getList(stringListMap, s); rsMap.put("xxj1",list1); } if (s.equals("PM2_5")){ ArrayList list1 = getArrayList(stringListMap, s); rsMap.put("xxj2",list1); } } } if (string.equals("沈阳市")){ Map> stringListMap = map.get(string); Set strings1 = stringListMap.keySet(); for (String s : strings1) { if (s.equals("count")){ ArrayList list1 = getList(stringListMap, s); rsMap.put("sy1",list1); } if (s.equals("PM2_5")){ ArrayList list1 = getArrayList(stringListMap, s); rsMap.put("sy2",list1); } } } if (string.equals("浑南区")){ Map> stringListMap = map.get(string); Set strings1 = stringListMap.keySet(); for (String s : strings1) { if (s.equals("count")){ ArrayList list1 = new ArrayList<>(); List list = stringListMap.get(s); String season; Integer sum =0; if (data>=1 && data<=3){ sum = list.get(0) + list.get(1) + list.get(2); season = "一"; }else if (data>=4 &&data<=6){ sum = list.get(3) + list.get(4) + list.get(5); season = "二"; }else if (data>=7 &&data<=9){ sum = list.get(6) + list.get(7) + list.get(8); season = "三"; }else { sum = list.get(9) + list.get(10) + list.get(11); season = "四"; } syExcelVo.setCode5(sum.toString()); syExcelVo.setSeason(season); for (int i = 0; i < list.size()-1; i++) { if (list.get(i)==0){ list1.add(""); continue; } list1.add(list.get(i).toString()); } Integer integer = list.get(12); syExcelVo.setCode1(integer.toString()); Integer integer1 = list.get(13); int i = integer - integer1; String code =""; if (i<0){ code = "减少"+i+"天"; }else if (i>0){ code = "增加"+i+"天"; }else { code = "持平"; } list1.add(code); syExcelVo.setCode2(code); list1.add(0,"优良天数"); rsMap.put("hnq1",list1); } if (s.equals("季度")){ List list = stringListMap.get(s); if (list.size()>0){ syExcelVo.setCode6(list.get(0).toString()); }else { syExcelVo.setCode6(""); } } if (s.equals("PM2_5")){ ArrayList list1 = new ArrayList<>(); List list = stringListMap.get(s); for (int i = 0; i < list.size()-1; i++) { if (list.get(i)==0){ list1.add(""); continue; } list1.add(list.get(i).toString()); } Integer integer = list.get(12); syExcelVo.setCode3(integer.toString()); Integer integer1 = list.get(13); double i = integer - integer1; double i1 = AmendUtils.sciCal((Math.abs(i) / integer1)*100,1); String code = ""; if (i<0){ code = "改善"+i1+"%"; }else if (i>0){ code = "改善-"+i1+"%"; }else { code ="持平"; } list1.add(code); syExcelVo.setCode4(code); list1.add(0,"PM2.5浓度微克/立方"); rsMap.put("hnq2",list1); } } } } if (map.size()==3){ ArrayList list1 = new ArrayList<>(); ArrayList list2 = new ArrayList<>(); for (int i = 0; i <14 ; i++) { list1.add(""); list2.add(""); } list1.add(0,"优良天数"); list2.add(0,"PM2.5浓度微克/立方"); rsMap.put("sy1",list1); rsMap.put("sy2",list2); } syExcelVo.setList(rsMap); return syExcelVo; } /** * 浑南区质量报告导出 * @param id * @return */ @Override public HnExcelVo hnExport(Integer id) throws ParseException { HashMap rsMap = new HashMap<>(); HnExcelVo hnExcelVo = new HnExcelVo(); ArrayList syList = new ArrayList<>(); TbExcel excel = excelMapper.selectById(id); //获取上传的时间 Date time = excel.getTime(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); String format = sdf.format(time); hnExcelVo.setTime(format.substring(5)); //获取上传后一天的时间 Calendar instance = Calendar.getInstance(); instance.setTime(sdf.parse(format)); instance.add(Calendar.DAY_OF_MONTH, 1); Date date = instance.getTime(); hnExcelVo.setTime2(sdf.format(date)); String value = excel.getValue(); Map>> map = JSON.parseObject(value, Map.class); Set strings = map.keySet(); Map> listMap = map.get("沈阳市"); List listSy = listMap.get("day"); //pm25 syList.add(listSy.get(0).toString()); //pm10 syList.add(listSy.get(1).toString()); //so2 syList.add(listSy.get(2).toString()); //no2 syList.add(listSy.get(3).toString()); //O3 syList.add(listSy.get(4).toString()); //CO syList.add(listSy.get(5).toString()+"."+listSy.get(6)); Map mapSy = getCityMap(listSy); rsMap.put("sy",mapSy); for (String string : strings) { if (string.equals("浑南东路")){ Map> stringListMap = map.get(string); List list = stringListMap.get("day"); Map cityMap = getCityMap(list); rsMap.put("hnd",cityMap); ArrayList list1 = new ArrayList<>(); for (int i = 0; i < list.size()-2; i++) { Integer code1 = list.get(i); int code2 = Integer.parseInt(syList.get(i)); double data = getData(code1, code2); list1.add(data); } //获取CO String s = list.get(5) + "." + list.get(6); double v = Double.parseDouble(s) - Double.parseDouble(syList.get(5)); double i1 =0.0; if (Double.parseDouble(syList.get(5))!=0.0){ i1 = AmendUtils.sciCal((v / Double.parseDouble(syList.get(5)))*100,1); } hnExcelVo.setHnCO(i1); hnExcelVo.setHnPM25(list1.get(0)); hnExcelVo.setHnPM10(list1.get(1)); hnExcelVo.setHnSO2(list1.get(2)); hnExcelVo.setHnNO2(list1.get(3)); hnExcelVo.setHnO3(list1.get(4)); HashMap> years = getYears(stringListMap,"hnd"); hnExcelVo.setHnd(years); } if (string.equals("新秀街")){ Map> stringListMap = map.get(string); HashMap> years = getYears(stringListMap,"xxj"); hnExcelVo.setXxj(years); List list = stringListMap.get("day"); Map map1 = getCityMap(list); rsMap.put("xxj",map1); ArrayList list2 = new ArrayList<>(); for (int i = 0; i < list.size()-2; i++) { Integer code1 = list.get(i); int code2 = Integer.parseInt(syList.get(i)); double data = getData(code1, code2); list2.add(data); } //获取CO String s = list.get(5) + "." + list.get(6); double v = Double.parseDouble(s) - Double.parseDouble(syList.get(5)); double i1 =0.0; if (Double.parseDouble(syList.get(5))!=0.0){ i1 = AmendUtils.sciCal((v / Double.parseDouble(syList.get(5)))*100,1); } hnExcelVo.setXxjCO(i1); hnExcelVo.setXxjPM25(list2.get(0)); hnExcelVo.setXxjPM10(list2.get(1)); hnExcelVo.setXxjSO2(list2.get(2)); hnExcelVo.setXxjNO2(list2.get(3)); hnExcelVo.setXxjO3(list2.get(4)); } if (string.equals("浑南区")){ Map> stringListMap = map.get(string); List list = stringListMap.get("count"); Integer integer = list.get(12); Integer integer1 = list.get(13); int i = integer - integer1; String code = ""; if (i<0){ code = "减少"+i+"天"; }else if (i>0){ code = "增加"+i+"天"; }else { code= "持平"; } hnExcelVo.setCode1(integer.toString()); hnExcelVo.setCode2(integer1.toString()); hnExcelVo.setCode3(code); List list1 = stringListMap.get("PM2_5"); Integer integer2 = list1.get(12); Integer integer3 = list1.get(13); String code1 = getString(integer2, integer3); hnExcelVo.setCode4(integer2.toString()); hnExcelVo.setCode5(code1); List list2 = stringListMap.get("PM10"); Integer integer4 = list2.get(0); Integer integer5 = list2.get(1); String code2 = getString(integer4, integer5); hnExcelVo.setCode6(integer4.toString()); hnExcelVo.setCode7(code2); HashMap hnqMap = new HashMap<>(); List list3 = stringListMap.get("day"); hnqMap.put("PM2_5",list3.get(0)); hnqMap.put("PM10",list3.get(1)); hnqMap.put("SO2",list3.get(2)); hnqMap.put("NO2",list3.get(3)); hnqMap.put("O3",list3.get(4)); hnqMap.put("CO",list3.get(5)+"."+list3.get(6)); Map aqi = AqiUtils.getAqi(hnqMap); String aqi1 = aqi.get("AQI").toString(); String su = aqi.get("SU").toString(); String s = AQIUtils.classOfPollutionByAqi(Integer.parseInt(aqi1)); hnExcelVo.setData1(s); hnExcelVo.setData2(su); hnExcelVo.setData3(list3.get(1).toString()); hnExcelVo.setData4(list3.get(0).toString()); hnExcelVo.setData5(list3.get(2).toString()); hnExcelVo.setData6(list3.get(3).toString()); hnExcelVo.setData7(hnqMap.get("CO").toString()); hnExcelVo.setData8(list3.get(4).toString()); } } hnExcelVo.setList1(rsMap); return hnExcelVo; } private String getString(Integer integer2, Integer integer3) { double i2 = integer2 - integer3; double i1 = 0.0; if (integer3 !=0){ i1 = AmendUtils.sciCal((Math.abs(i2) / integer3)*100,1); } String code1 = ""; if (i2==0){ code1 = "持平"; }else if (i2>0){ code1 = "改善-"+i1+"%"; }else { code1 = "改善"+i1+"%"; } return code1; } //计算百分比 private double getData(int code1,int code2) { double i = code1 - code2; double i1 =0.0; if (code2!=0){ i1 = AmendUtils.sciCal((i / code2)*100,1); } return i1; } //获取aqi和首污 private Map getCityMap(List list) { HashMap map1 = new HashMap<>(); map1.put("PM2_5", list.get(0)); map1.put("PM10", list.get(1)); map1.put("SO2", list.get(2)); map1.put("NO2", list.get(3)); map1.put("O3", list.get(4)); map1.put("CO", list.get(5)+"."+ list.get(6)); map1.put("ZH",""); map1.put("PaiM",""); Map aqi = AqiUtils.getAqi(map1); map1.put("AQI",aqi.get("AQI")); return map1; } /** * 计算幅度变化 * @param stringListMap * @return */ private HashMap> getYears(Map> stringListMap,String data) { HashMap> map = new HashMap<>(); List list1 = stringListMap.get("今年"); HashMap hudMap1 = new HashMap<>(); HashMap hudMap2 = new HashMap<>(); HashMap hudMap3 = new HashMap<>(); hudMap1.put("nd",list1.get(7)); hudMap1.put("yl",list1.get(0)); hudMap1.put("excellent",list1.get(1)); hudMap1.put("good",list1.get(2)); hudMap1.put("slightPol",list1.get(3)); hudMap1.put("moderatePol",list1.get(4)); hudMap1.put("heavyPol",list1.get(5)); hudMap1.put("seriousPol",list1.get(6)); map.put(data+"1",hudMap1); List list2 = stringListMap.get("去年"); hudMap2.put("nd",list2.get(7)); hudMap2.put("yl",list2.get(0)); hudMap2.put("excellent",list2.get(1)); hudMap2.put("good",list2.get(2)); hudMap2.put("slightPol",list2.get(3)); hudMap2.put("moderatePol",list2.get(4)); hudMap2.put("heavyPol",list2.get(5)); hudMap2.put("seriousPol",list2.get(6)); hudMap3.put("nd","变化幅度"); hudMap3.put("yl",list1.get(0)-list2.get(0)); hudMap3.put("excellent",list1.get(1)-list2.get(1)); hudMap3.put("good",list1.get(2)-list2.get(2)); hudMap3.put("slightPol",list1.get(3)-list2.get(3)); hudMap3.put("moderatePol",list1.get(4)-list2.get(4)); hudMap3.put("heavyPol",list1.get(5)-list2.get(5)); hudMap3.put("seriousPol",list1.get(6)-list2.get(6)); map.put(data+2,hudMap2); map.put(data+3,hudMap3); return map; } /** * 计算pm2.5同比 * @param stringListMap * @param s * @return */ private ArrayList getArrayList(Map> stringListMap, String s) { ArrayList list1 = new ArrayList<>(); List list = stringListMap.get(s); for (int i = 0; i < list.size()-1; i++) { if (list.get(i)==0){ list1.add(""); continue; } list1.add(list.get(i).toString()); } Integer integer = list.get(12); Integer integer1 = list.get(13); double i1 = 0.0; double i = integer - integer1; if (integer1!=0){ i1 = AmendUtils.sciCal((Math.abs(i) / integer1)*100,1); } String code = ""; if (i<0){ code = "改善"+i1+"%"; }else if (i>0){ code = "改善-"+i1+"%"; }else { code = "持平"; } list1.add(code); list1.add(0,"PM2.5浓度微克/立方"); return list1; } /** * 计算优良天数 * @param stringListMap * @param s * @return */ private ArrayList getList(Map> stringListMap, String s) { ArrayList list1 = new ArrayList<>(); List list = stringListMap.get(s); for (int i = 0; i < list.size()-1; i++) { if (list.get(i)==0){ list1.add(""); continue; } list1.add(list.get(i).toString()); } Integer integer = list.get(12); Integer integer1 = list.get(13); int i = integer - integer1; String code = ""; if (i<0){ code = "减少"+i+"天"; }else if (i>0){ code = "增加"+i+"天"; }else { code = "持平"; } list1.add(code); list1.add(0,"优良天数"); return list1; } private Map> getSys(MultipartFile file, int code,String time) throws IOException, ParseException { XSSFWorkbook workbook = new XSSFWorkbook(file.getInputStream()); HashMap rsMap1 = new HashMap<>(); HashMap rsMap2 = new HashMap<>(); XSSFSheet sheetAt = workbook.getSheetAt(code); String sheetName = sheetAt.getSheetName(); if (!sheetName.equals("沈阳市")){ return null; } //一共有多少行 int lastRowNum = sheetAt.getLastRowNum(); for (int i = 2; i <= lastRowNum; i++) { XSSFRow row = sheetAt.getRow(i); if (row == null) { continue; } short lastCellNum = row.getLastCellNum(); if (lastCellNum<=0){ continue; } Object[] objects = new Object[lastCellNum]; for (int j = 0; j < lastCellNum; j++) { Cell cell = row.getCell(j); if (cell != null) { Object value = ExcelUtils.getValue(cell); objects[j] = value; } } HashMap map1 = new HashMap<>(); HashMap map2 = new HashMap<>(); if (objects.length == 8 || objects.length == 9) { if (objects[0]!=null){ if (!objects[1].toString().contains("H") && !objects[2].toString().contains("H") && !objects[3].toString().contains("H") && !objects[4].toString().contains("H") && !objects[5].toString().contains("H") && !objects[6].toString().contains("H")) { map1.put("time", objects[0]); map1.put("PM10", objects[1]); map1.put("PM2_5", objects[2]); map1.put("SO2", objects[3]); map1.put("NO2", objects[4]); map1.put("CO", objects[5]); map1.put("O3", objects[6]); map1.put("AQI", objects[7]); rsMap1.put(objects[0].toString(), map1); } } } if (objects.length == 17) { if (!objects[1].toString().contains("H") && !objects[2].toString().contains("H") && !objects[3].toString().contains("H") && !objects[4].toString().contains("H") && !objects[5].toString().contains("H") && !objects[6].toString().contains("H")) { map1.put("time", objects[0]); map1.put("PM10", objects[1]); map1.put("PM2_5", objects[2]); map1.put("SO2", objects[3]); map1.put("NO2", objects[4]); map1.put("CO", objects[5]); map1.put("O3", objects[6]); map1.put("AQI", objects[7]); rsMap1.put(objects[0].toString(), map1); } if (objects[9]!=null){ if (!objects[10].toString().contains("H") && !objects[11].toString().contains("H") && !objects[12].toString().contains("H") && !objects[13].toString().contains("H") && !objects[14].toString().contains("H") && !objects[15].toString().contains("H")) { map2.put("time", objects[9]); map2.put("PM10", objects[10]); map2.put("PM2_5", objects[11]); map2.put("SO2", objects[12]); map2.put("NO2", objects[13]); map2.put("CO", objects[14]); map2.put("O3", objects[15]); map2.put("AQI", objects[16]); rsMap2.put(objects[9].toString(), map2); } } } } //计算本年度pm2.5和优良天数 Map> map = getMap(rsMap2,time); //计算去年PM2.5和优良天数 Map> map2 = getResult(rsMap1, time); List list = map.get("count"); list.add(map2.get("count").get(0)); List list1 = map.get("PM2_5"); list1.add(map2.get("PM2_5").get(0)); return map; } private Map> getMap1(MultipartFile file, int code,String time) throws IOException, ParseException { XSSFWorkbook workbook = new XSSFWorkbook(file.getInputStream()); HashMap rsMap1 = new HashMap<>(); HashMap rsMap2 = new HashMap<>(); HashMap rsMap3 = new HashMap<>(); XSSFSheet sheetAt = workbook.getSheetAt(code); //一共有多少行 int lastRowNum = sheetAt.getLastRowNum(); for (int i = 2; i <= lastRowNum; i++) { XSSFRow row = sheetAt.getRow(i); if (row == null) { continue; } short lastCellNum = row.getLastCellNum(); if (lastCellNum < 8) { continue; } Object[] objects = new Object[lastCellNum]; for (int j = 0; j < lastCellNum; j++) { Cell cell = row.getCell(j); if (cell != null) { Object value = ExcelUtils.getValue(cell); objects[j] = value; } } HashMap map = new HashMap<>(); HashMap map1 = new HashMap<>(); HashMap map2 = new HashMap<>(); // if (objects.length == 9) { // map.put("time", objects[0]); // map.put("PM10", objects[1]); // map.put("PM2_5", objects[2]); // map.put("SO2", objects[3]); // map.put("NO2", objects[4]); // map.put("CO", objects[5]); // map.put("O3", objects[6]); // map.put("AQI", objects[7]); // rsMap1.put(objects[0].toString(), map); // } if (objects.length == 18) { map.put("time", objects[0]); map.put("PM10", objects[1]); map.put("PM2_5", objects[2]); map.put("SO2", objects[3]); map.put("NO2", objects[4]); map.put("CO", objects[5]); map.put("O3", objects[6]); map.put("AQI", objects[7]); rsMap1.put(objects[0].toString(), map); if (!objects[11].toString().contains("H") && !objects[12].toString().contains("H") && !objects[13].toString().contains("H") && !objects[14].toString().contains("H") && !objects[15].toString().contains("H") && !objects[16].toString().contains("H")) { map1.put("time", objects[10]); map1.put("PM10", objects[11]); map1.put("PM2_5", objects[12]); map1.put("SO2", objects[13]); map1.put("NO2", objects[14]); map1.put("CO", objects[15]); map1.put("O3", objects[16]); map1.put("AQI", objects[17]); rsMap2.put(objects[10].toString(), map1); } } if (objects.length == 27) { map.put("time", objects[0]); map.put("PM10", objects[1]); map.put("PM2_5", objects[2]); map.put("SO2", objects[3]); map.put("NO2", objects[4]); map.put("CO", objects[5]); map.put("O3", objects[6]); map.put("AQI", objects[7]); rsMap1.put(objects[0].toString(), map); if ( !objects[11].toString().contains("H") && !objects[12].toString().contains("H") && !objects[13].toString().contains("H") && !objects[14].toString().contains("H") && !objects[15].toString().contains("H") && !objects[16].toString().contains("H") ) { map1.put("time", objects[10]); map1.put("PM10", objects[11]); map1.put("PM2_5", objects[12]); map1.put("SO2", objects[13]); map1.put("NO2", objects[14]); map1.put("CO", objects[15]); map1.put("O3", objects[16]); map1.put("AQI", objects[17]); rsMap2.put(objects[10].toString(), map1); } if (objects[19]!=null){ if ( !objects[20].toString().contains("H") && !objects[21].toString().contains("H") && !objects[22].toString().contains("H") && !objects[23].toString().contains("H") && !objects[24].toString().contains("H") && !objects[25].toString().contains("H") ) { map2.put("time", objects[19]); map2.put("PM10", objects[20]); map2.put("PM2_5", objects[21]); map2.put("SO2", objects[22]); map2.put("NO2", objects[23]); map2.put("CO", objects[24]); map2.put("O3", objects[25]); map2.put("AQI", objects[26]); rsMap3.put(objects[19].toString(), map2); } } } } //计算本年度pm2.5和优良天数 Map> map = getMap(rsMap3,time); //计算去年PM2.5和优良天数 Map> map2 = getResult(rsMap2, time); List list = map.get("count"); list.add(map2.get("count").get(0)); List list1 = map.get("PM2_5"); list1.add(map2.get("PM2_5").get(0)); map.put("去年",map2.get("去年")); return map; } /** * 计算本年的PM2.5 和优良天数 * * @param rsMap3 */ private Map> getMap(HashMap rsMap3,String time) { HashMap> listMap = new HashMap<>(); ArrayList dayList = new ArrayList<>(); ArrayList list1 = new ArrayList<>(); ArrayList list2 = new ArrayList<>(); ArrayList list3 = new ArrayList<>(); ArrayList list4 = new ArrayList<>(); ArrayList list5 = new ArrayList<>(); ArrayList list6 = new ArrayList<>(); ArrayList list7 = new ArrayList<>(); ArrayList list8 = new ArrayList<>(); ArrayList list9 = new ArrayList<>(); ArrayList list10 = new ArrayList<>(); ArrayList list11 = new ArrayList<>(); ArrayList list12 = new ArrayList<>(); ArrayList resList = new ArrayList<>(); ArrayList list = new ArrayList<>(); ArrayList listPM = new ArrayList<>(); ArrayList AQI = new ArrayList<>(); ArrayList pm10List = new ArrayList<>(); int count1 = 0; int count2 = 0; int count3 = 0; int count4 = 0; int count5 = 0; int count6 = 0; int count7 = 0; int count8 = 0; int count9 = 0; int count10 = 0; int count11 = 0; int count12 = 0; Set strings = rsMap3.keySet(); for (String string : strings) { if (string.equals(time)){ Object o = rsMap3.get(string); String s = JSON.toJSONString(o); JSONObject jsonObject = JSON.parseObject(s); Object pm25 = jsonObject.get("PM2_5"); String co = jsonObject.getString("CO"); String[] split = co.split("\\."); int PM2_5 = (int) Double.parseDouble(pm25.toString()); int PM10 = (int) Double.parseDouble(jsonObject.getString("PM10")); int SO2 = (int) Double.parseDouble(jsonObject.getString("SO2")); int NO2 = (int) Double.parseDouble(jsonObject.getString("NO2")); int O3 = (int) Double.parseDouble(jsonObject.getString("O3")); dayList.add(PM2_5); dayList.add(PM10); dayList.add(SO2); dayList.add(NO2); dayList.add(O3); dayList.add(Integer.parseInt(split[0])); dayList.add(Integer.parseInt(split[1])); } String substring = string.substring(5, 7); if (substring.equals("01")) { Object o = rsMap3.get(string); String s = JSON.toJSONString(o); Map map = JSON.parseObject(s, Map.class); String aqi = map.get("AQI").toString(); String pm2_5 = map.get("PM2_5").toString(); String pm10 = map.get("PM10").toString(); pm10List.add(Double.parseDouble(pm10)); list1.add(Double.parseDouble(pm2_5)); resList.add(Double.parseDouble(pm2_5)); AQI.add(Double.parseDouble(aqi)); if (Double.parseDouble(aqi) <= 100) { count1++; } } if (substring.equals("02")) { Object o = rsMap3.get(string); String s = JSON.toJSONString(o); Map map = JSON.parseObject(s, Map.class); String aqi = map.get("AQI").toString(); String pm2_5 = map.get("PM2_5").toString(); String pm10 = map.get("PM10").toString(); pm10List.add(Double.parseDouble(pm10)); list2.add(Double.parseDouble(pm2_5)); resList.add(Double.parseDouble(pm2_5)); AQI.add(Double.parseDouble(aqi)); if (Double.parseDouble(aqi) <= 100) { count2++; } } if (substring.equals("03")) { Object o = rsMap3.get(string); String s = JSON.toJSONString(o); Map map = JSON.parseObject(s, Map.class); String aqi = map.get("AQI").toString(); String pm2_5 = map.get("PM2_5").toString(); String pm10 = map.get("PM10").toString(); pm10List.add(Double.parseDouble(pm10)); list3.add(Double.parseDouble(pm2_5)); resList.add(Double.parseDouble(pm2_5)); AQI.add(Double.parseDouble(aqi)); if (Double.parseDouble(aqi) <= 100) { count3++; } } if (substring.equals("04")) { Object o = rsMap3.get(string); String s = JSON.toJSONString(o); Map map = JSON.parseObject(s, Map.class); String aqi = map.get("AQI").toString(); String pm2_5 = map.get("PM2_5").toString(); String pm10 = map.get("PM10").toString(); pm10List.add(Double.parseDouble(pm10)); list4.add(Double.parseDouble(pm2_5)); resList.add(Double.parseDouble(pm2_5)); AQI.add(Double.parseDouble(aqi)); if (Double.parseDouble(aqi) <= 100) { count4++; } } if (substring.equals("05")) { Object o = rsMap3.get(string); String s = JSON.toJSONString(o); Map map = JSON.parseObject(s, Map.class); String aqi = map.get("AQI").toString(); String pm2_5 = map.get("PM2_5").toString(); String pm10 = map.get("PM10").toString(); pm10List.add(Double.parseDouble(pm10)); list5.add(Double.parseDouble(pm2_5)); resList.add(Double.parseDouble(pm2_5)); AQI.add(Double.parseDouble(aqi)); if (Double.parseDouble(aqi) <= 100) { count5++; } } if (substring.equals("06")) { Object o = rsMap3.get(string); String s = JSON.toJSONString(o); Map map = JSON.parseObject(s, Map.class); String aqi = map.get("AQI").toString(); String pm2_5 = map.get("PM2_5").toString(); String pm10 = map.get("PM10").toString(); pm10List.add(Double.parseDouble(pm10)); list6.add(Double.parseDouble(pm2_5)); resList.add(Double.parseDouble(pm2_5)); AQI.add(Double.parseDouble(aqi)); if (Double.parseDouble(aqi) <= 100) { count6++; } } if (substring.equals("07")) { Object o = rsMap3.get(string); String s = JSON.toJSONString(o); Map map = JSON.parseObject(s, Map.class); String aqi = map.get("AQI").toString(); String pm2_5 = map.get("PM2_5").toString(); String pm10 = map.get("PM10").toString(); pm10List.add(Double.parseDouble(pm10)); list7.add(Double.parseDouble(pm2_5)); resList.add(Double.parseDouble(pm2_5)); AQI.add(Double.parseDouble(aqi)); if (Double.parseDouble(aqi) <= 100) { count7++; } } if (substring.equals("08")) { Object o = rsMap3.get(string); String s = JSON.toJSONString(o); Map map = JSON.parseObject(s, Map.class); String aqi = map.get("AQI").toString(); String pm2_5 = map.get("PM2_5").toString(); String pm10 = map.get("PM10").toString(); pm10List.add(Double.parseDouble(pm10)); list8.add(Double.parseDouble(pm2_5)); resList.add(Double.parseDouble(pm2_5)); AQI.add(Double.parseDouble(aqi)); if (Double.parseDouble(aqi) <= 100) { count8++; } } if (substring.equals("09")) { Object o = rsMap3.get(string); String s = JSON.toJSONString(o); Map map = JSON.parseObject(s, Map.class); String aqi = map.get("AQI").toString(); String pm2_5 = map.get("PM2_5").toString(); String pm10 = map.get("PM10").toString(); pm10List.add(Double.parseDouble(pm10)); list9.add(Double.parseDouble(pm2_5)); resList.add(Double.parseDouble(pm2_5)); AQI.add(Double.parseDouble(aqi)); if (Double.parseDouble(aqi) <= 100) { count9++; } } if (substring.equals("10")) { Object o = rsMap3.get(string); String s = JSON.toJSONString(o); Map map = JSON.parseObject(s, Map.class); String aqi = map.get("AQI").toString(); String pm2_5 = map.get("PM2_5").toString(); String pm10 = map.get("PM10").toString(); pm10List.add(Double.parseDouble(pm10)); list10.add(Double.parseDouble(pm2_5)); resList.add(Double.parseDouble(pm2_5)); AQI.add(Double.parseDouble(aqi)); if (Double.parseDouble(aqi) <= 100) { count10++; } } if (substring.equals("11")) { Object o = rsMap3.get(string); String s = JSON.toJSONString(o); Map map = JSON.parseObject(s, Map.class); String aqi = map.get("AQI").toString(); String pm2_5 = map.get("PM2_5").toString(); String pm10 = map.get("PM10").toString(); pm10List.add(Double.parseDouble(pm10)); list11.add(Double.parseDouble(pm2_5)); resList.add(Double.parseDouble(pm2_5)); AQI.add(Double.parseDouble(aqi)); if (Double.parseDouble(aqi) <= 100) { count11++; } } if (substring.equals("12")) { Object o = rsMap3.get(string); String s = JSON.toJSONString(o); Map map = JSON.parseObject(s, Map.class); String aqi = map.get("AQI").toString(); String pm2_5 = map.get("PM2_5").toString(); String pm10 = map.get("PM10").toString(); pm10List.add(Double.parseDouble(pm10)); list12.add(Double.parseDouble(pm2_5)); resList.add(Double.parseDouble(pm2_5)); AQI.add(Double.parseDouble(aqi)); if (Double.parseDouble(aqi) <= 100) { count12++; } } } //获取季度pm2.5 String ju = time.substring(5, 7); int data = Integer.parseInt(ju); ArrayList rsData = new ArrayList<>(); if (data>=1 && data<=3){ rsData.addAll(list1); rsData.addAll(list2); rsData.addAll(list3); }else if (data>=4 &&data<=6){ rsData.addAll(list4); rsData.addAll(list5); rsData.addAll(list6); }else if (data>=7 &&data<=9){ rsData.addAll(list7); rsData.addAll(list8); rsData.addAll(list9); }else { rsData.addAll(list10); rsData.addAll(list11); rsData.addAll(list12); } ArrayList pmList = new ArrayList<>(); if (rsData.size()>0){ int pm = (int) AmendUtils.sciCal(rsData.stream().collect(Collectors.averagingDouble(Double::doubleValue)), 0); pmList.add(pm); } //获取污染状态 ArrayList integers = getCode(AQI); String rsTime = time.substring(0, 4); integers.add(Integer.parseInt(rsTime)); list.add(count1); list.add(count2); list.add(count3); list.add(count4); list.add(count5); list.add(count6); list.add(count7); list.add(count8); list.add(count9); list.add(count10); list.add(count11); list.add(count12); Integer sum = list.stream().reduce(Integer::sum).orElse(0); list.add(sum); listMap.put("count", list); Integer collect1 = 0; if (list1.size() > 0) { collect1 = (int) AmendUtils.sciCal(list1.stream().collect(Collectors.averagingDouble(Double::doubleValue)), 0); } Integer collect2 = 0; if (list2.size() > 0) { collect2= (int) AmendUtils.sciCal(list2.stream().collect(Collectors.averagingDouble(Double::doubleValue)), 0); } Integer collect3 = 0; if (list3.size() > 0) { collect3 = (int) AmendUtils.sciCal(list3.stream().collect(Collectors.averagingDouble(Double::doubleValue)), 0); } Integer collect4 = 0; if (list4.size() > 0) { collect4 = (int) AmendUtils.sciCal(list4.stream().collect(Collectors.averagingDouble(Double::doubleValue)), 0); } Integer collect5 = 0; if (list5.size() > 0) { collect5 = (int) AmendUtils.sciCal(list5.stream().collect(Collectors.averagingDouble(Double::doubleValue)), 0); } Integer collect6 = 0; if (list6.size() > 0) { collect6 = (int) AmendUtils.sciCal(list6.stream().collect(Collectors.averagingDouble(Double::doubleValue)), 0); } Integer collect7 = 0; if (list7.size() > 0) { collect7 = (int) AmendUtils.sciCal(list7.stream().collect(Collectors.averagingDouble(Double::doubleValue)), 0); } Integer collect8 = 0; if (list8.size() > 0) { collect8 = (int) AmendUtils.sciCal(list8.stream().collect(Collectors.averagingDouble(Double::doubleValue)), 0); } Integer collect9 = 0; if (list9.size() > 0) { collect9 = (int) AmendUtils.sciCal(list9.stream().collect(Collectors.averagingDouble(Double::doubleValue)), 0); } Integer collect10 = 0; if (list10.size() > 0) { collect10 = (int) AmendUtils.sciCal(list10.stream().collect(Collectors.averagingDouble(Double::doubleValue)), 0); } Integer collect11 = 0; if (list11.size() > 0) { collect11 = (int) AmendUtils.sciCal(list11.stream().collect(Collectors.averagingDouble(Double::doubleValue)), 0); } Integer collect12 = 0; if (list12.size() > 0) { collect12 = (int) AmendUtils.sciCal(list12.stream().collect(Collectors.averagingDouble(Double::doubleValue)), 0); } //今年的pm2.5累计 int resPM25 = (int) AmendUtils.sciCal(resList.stream().collect(Collectors.averagingDouble(Double::doubleValue)), 0); ArrayList list13 = new ArrayList<>(); int rsPM10 = (int) AmendUtils.sciCal(pm10List.stream().collect(Collectors.averagingDouble(Double::doubleValue)), 0); list13.add(rsPM10); listPM.add(collect1); listPM.add(collect2); listPM.add(collect3); listPM.add(collect4); listPM.add(collect5); listPM.add(collect6); listPM.add(collect7); listPM.add(collect8); listPM.add(collect9); listPM.add(collect10); listPM.add(collect11); listPM.add(collect12); listPM.add(resPM25); listMap.put("PM2_5",listPM); listMap.put("今年",integers); listMap.put("day",dayList); listMap.put("季度",pmList); listMap.put("PM10",list13); return listMap; } /** * 获取污染状态 * @param AQI * @return */ private ArrayList getCode(ArrayList AQI) { ArrayList integers = new ArrayList<>(); int code1 =0; int code2 =0; int code3 =0; int code4 =0; int code5 =0; int code6 =0; int i; for (double aDouble : AQI) { i=(int)aDouble; String s = AQIUtils.classOfPollutionByAqi(i); if (s.equals("优")){ code1++; } if (s.equals("良")){ code2++; } if (s.equals("轻度污染")){ code3++; } if (s.equals("中度污染")){ code4++; } if (s.equals("重度污染")){ code5++; } if (s.equals("严重污染")){ code6++; } } integers.add(code1+code2); integers.add(code1); integers.add(code2); integers.add(code3); integers.add(code4); integers.add(code5); integers.add(code6); return integers; } /** * 计算去年PM2.5和优良天数 * * @param rsMap2 */ private Map> getResult(HashMap rsMap2, String time) throws ParseException { HashMap> rsMap = new HashMap<>(); ArrayList list = new ArrayList<>(); ArrayList list2 = new ArrayList<>(); ArrayList list3 = new ArrayList<>(); ArrayList AQI = new ArrayList<>(); ArrayList list4 = new ArrayList<>(); ArrayList pm10List = new ArrayList<>(); SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd"); Calendar instance = Calendar.getInstance(); instance.setTime(sdf1.parse(time)); instance.add(Calendar.YEAR, -1); Date date = instance.getTime(); //获取年 String format = sdf1.format(date); String rsTime = format.substring(0, 4); //时间戳 long time1 = date.getTime(); int count = 0; Set strings = rsMap2.keySet(); for (String string : strings) { Date parse = sdf1.parse(string); long time2 = parse.getTime(); if (time2 <= time1) { Object o = rsMap2.get(string); String s = JSON.toJSONString(o); Map map = JSON.parseObject(s, Map.class); String aqi = map.get("AQI").toString(); String pm2_5 = map.get("PM2_5").toString(); String pm10 = map.get("PM10").toString(); list4.add(Double.parseDouble(pm10)); list.add(Double.parseDouble(pm2_5)); AQI.add(Double.parseDouble(aqi)); if (Double.parseDouble(aqi) <= 100) { count++; } } } list2.add(count); ArrayList rsAqi = getCode(AQI); rsAqi.add(Integer.parseInt(rsTime)); //去年的pm2.5累积 int PM2_5 = (int) AmendUtils.sciCal(list.stream().collect(Collectors.averagingDouble(Double::doubleValue)), 0); int PM10 = (int) AmendUtils.sciCal(list4.stream().collect(Collectors.averagingDouble(Double::doubleValue)), 0); list3.add(PM2_5); pm10List.add(PM10); rsMap.put("count", list2); rsMap.put("PM2_5", list3); rsMap.put("去年",rsAqi); rsMap.put("PM10",pm10List); return rsMap; } /** * 计算 浑南区的数据 * @param file * @throws IOException */ private Map> getTo(MultipartFile file,String time) throws IOException, ParseException { XSSFWorkbook workbook = new XSSFWorkbook(file.getInputStream()); HashMap rsMap1 = new HashMap<>(); HashMap rsMap2 = new HashMap<>(); HashMap rsMap3 = new HashMap<>(); HashMap rsMap4 = new HashMap<>(); //去年的浑南区 HashMap hnMap1 = new HashMap<>(); //今年的浑南区 HashMap hnMap2 = new HashMap<>(); XSSFSheet sheetAt = workbook.getSheetAt(0); //一共有多少行 //浑南东路 int lastRowNum = sheetAt.getLastRowNum(); for (int i = 2; i <= lastRowNum; i++) { XSSFRow row = sheetAt.getRow(i); if (row == null) { continue; } short lastCellNum = row.getLastCellNum(); if (lastCellNum < 8) { continue; } Object[] objects = new Object[lastCellNum]; for (int j = 0; j < lastCellNum; j++) { Cell cell = row.getCell(j); if (cell != null) { Object value = ExcelUtils.getValue(cell); objects[j] = value; } } HashMap map1 = new HashMap<>(); HashMap map2 = new HashMap<>(); if (objects.length == 18) { map1.put("PM10", objects[11]); map1.put("PM2_5", objects[12]); map1.put("SO2", objects[13]); map1.put("NO2", objects[14]); map1.put("CO", objects[15]); map1.put("O3", objects[16]); rsMap1.put(objects[10].toString(), map1); } if (objects.length == 27) { map1.put("PM10", objects[11]); map1.put("PM2_5", objects[12]); map1.put("SO2", objects[13]); map1.put("NO2", objects[14]); map1.put("CO", objects[15]); map1.put("O3", objects[16]); rsMap1.put(objects[10].toString(), map1); if (objects[19]!=null){ map2.put("PM10", objects[20]); map2.put("PM2_5", objects[21]); map2.put("SO2", objects[22]); map2.put("NO2", objects[23]); map2.put("CO", objects[24]); map2.put("O3", objects[25]); rsMap2.put(objects[19].toString(), map2); } } } //新秀街 XSSFSheet sheetAt1 = workbook.getSheetAt(1); int lastRowNum1 = sheetAt1.getLastRowNum(); for (int i = 2; i < lastRowNum1; i++) { XSSFRow row = sheetAt1.getRow(i); if (row == null) { continue; } short lastCellNum = row.getLastCellNum(); if (lastCellNum < 8) { continue; } Object[] objects = new Object[lastCellNum]; for (int j = 0; j < lastCellNum; j++) { Cell cell = row.getCell(j); if (cell != null) { Object value = ExcelUtils.getValue(cell); objects[j] = value; } } HashMap map1 = new HashMap<>(); HashMap map2 = new HashMap<>(); if (objects.length == 18) { map1.put("PM10", objects[11]); map1.put("PM2_5", objects[12]); map1.put("SO2", objects[13]); map1.put("NO2", objects[14]); map1.put("CO", objects[15]); map1.put("O3", objects[16]); rsMap3.put(objects[10].toString(), map1); } if (objects.length == 27) { map1.put("PM10", objects[11]); map1.put("PM2_5", objects[12]); map1.put("SO2", objects[13]); map1.put("NO2", objects[14]); map1.put("CO", objects[15]); map1.put("O3", objects[16]); rsMap3.put(objects[10].toString(), map1); if (objects[19]!=null){ map2.put("PM10", objects[20]); map2.put("PM2_5", objects[21]); map2.put("SO2", objects[22]); map2.put("NO2", objects[23]); map2.put("CO", objects[24]); map2.put("O3", objects[25]); rsMap4.put(objects[19].toString(), map2); } } } //获取去年的因子 Set strings = rsMap1.keySet(); for (String string : strings) { Object o = rsMap1.get(string); String s = JSON.toJSONString(o); Map map = JSON.parseObject(s, Map.class); Object o1 = rsMap3.get(string); String s1 = JSON.toJSONString(o1); Map map1 = JSON.parseObject(s1, Map.class); Set sets = map1.keySet(); HashMap hs = new HashMap<>(); for (Object set : sets) { if (set.toString().equals("CO")){ String s3 = map1.get(set).toString(); String s2 = map.get(set).toString(); if (s3.contains("H") && !s2.contains("H")){ hs.put(set,Double.parseDouble(s2)); }else if(!s3.contains("H") && s2.contains("H")){ hs.put(set,Double.parseDouble(s3)); }else if(s3.contains("H") && s2.contains("H")){ break; }else { hs.put(set, AmendUtils.sciCal((Double.parseDouble(s3)+Double.parseDouble(s2))/2,1)); } continue; } String s3 = map1.get(set).toString(); String s2 = map.get(set).toString(); if (s3.contains("H") && !s2.contains("H")){ hs.put(set,Double.parseDouble(s2)); }else if(!s3.contains("H") && s2.contains("H")){ hs.put(set,Double.parseDouble(s3)); }else if(s3.contains("H") && s2.contains("H")){ break; }else { hs.put(set, AmendUtils.sciCal((Double.parseDouble(s3)+Double.parseDouble(s2))/2,0)); } } if (hs.size()==6){ hnMap1.put(string,hs); } } //获取今年的因子 Set strings1 = rsMap2.keySet(); for (String s : strings1) { Object o = rsMap2.get(s); String s1 = JSON.toJSONString(o); Map map = JSON.parseObject(s1, Map.class); Object o1 = rsMap4.get(s); String s2 = JSON.toJSONString(o1); Map map1 = JSON.parseObject(s2, Map.class); Set sets = map1.keySet(); HashMap hs = new HashMap<>(); for (Object set : sets) { if (set.toString().equals("CO")){ String s3 = map1.get(set).toString(); String s4 = map.get(set).toString(); if (s3.contains("H") && !s4.contains("H")){ hs.put(set,Double.parseDouble(s4)); }else if(!s3.contains("H") && s4.contains("H")){ hs.put(set,Double.parseDouble(s3)); }else if(s3.contains("H") && s4.contains("H")){ break; }else { hs.put(set, AmendUtils.sciCal((Double.parseDouble(s3)+Double.parseDouble(s4))/2,1)); } continue; } String s3 = map1.get(set).toString(); String s4 = map.get(set).toString(); if (s3.contains("H") && !s4.contains("H")){ hs.put(set,Double.parseDouble(s4)); }else if(!s3.contains("H") && s4.contains("H")){ hs.put(set,Double.parseDouble(s3)); }else if(s3.contains("H") && s4.contains("H")){ break; }else { hs.put(set, AmendUtils.sciCal((Double.parseDouble(s3)+Double.parseDouble(s4))/2,0)); } } if (hs.size()==6){ hnMap2.put(s,hs); } } //计算今年的aqi getHnMap(hnMap2); //计算去年的aqi getHnMap(hnMap1); //计算本年的pm2.5 Map> map = getMap(hnMap2,time); //计算去年的pm2.5 Map> map2 = getResult(hnMap1, time); List list = map.get("count"); list.add(map2.get("count").get(0)); List list1 = map.get("PM2_5"); list1.add(map2.get("PM2_5").get(0)); List list2 = map.get("PM10"); list2.add(map2.get("PM10").get(0)); //获取今年本月的污染天数,和PM2.5 List month = getMonth1(time, hnMap2); int month2 = getMonth2(time, hnMap1); month.add(month2); map.put("month",month); return map; } /** * 获取去年本月的因子均值 * @param time * @param hnMap1 * @return */ private int getMonth2(String time, HashMap hnMap1) { String years = time.substring(0, 4); int s = Integer.parseInt(years) - 1; String month = time.substring(5, 7); String day = time.substring(8, 10); ArrayList list2 = new ArrayList<>(); for (int i = 1; i <= Integer.parseInt(day); i++) { if (i < 10) { Object o = hnMap1.get(s + "-" + month + "-0" + i); String s1 = JSON.toJSONString(o); if (s1.equals("null")){ list2.add(0.0); continue; } Map map1 = JSON.parseObject(s1, Map.class); String pm2_5 = map1.get("PM2_5").toString(); list2.add(Double.parseDouble(pm2_5)); } else { Object o = hnMap1.get(s + "-" + month + "-" + i); String s1 = JSON.toJSONString(o); if (s1.equals("null")){ list2.add(0.0); continue; } Map map1 = JSON.parseObject(s1, Map.class); String pm2_5 = map1.get("PM2_5").toString(); list2.add(Double.parseDouble(pm2_5)); } } int rsMonth = (int) AmendUtils.sciCal(list2.stream().collect(Collectors.averagingDouble(Double::doubleValue)), 0); return rsMonth; } /** * 获取本年本月的因子的平均值 * @param time * @param hnMap2 * @return */ private List getMonth1(String time, HashMap hnMap2) { String years = time.substring(0, 4); String month = time.substring(5, 7); String day = time.substring(8, 10); ArrayList list2 = new ArrayList<>(); ArrayList aqiList = new ArrayList<>(); for (int i = 1; i <=Integer.parseInt(day) ; i++) { if (i<10){ Object o = hnMap2.get(years + "-" + month + "-0" + i); String s1 = JSON.toJSONString(o); Map map1 = JSON.parseObject(s1, Map.class); String pm2_5 = map1.get("PM2_5").toString(); String aqi = map1.get("AQI").toString(); aqiList.add(Double.parseDouble(aqi)); list2.add(Double.parseDouble(pm2_5)); }else { Object o = hnMap2.get(years + "-" + month + "-" + i); String s1 = JSON.toJSONString(o); Map map1 = JSON.parseObject(s1, Map.class); String pm2_5 = map1.get("PM2_5").toString(); String aqi = map1.get("AQI").toString(); aqiList.add(Double.parseDouble(aqi)); list2.add(Double.parseDouble(pm2_5)); } } int rsMonth = (int) AmendUtils.sciCal(list2.stream().collect(Collectors.averagingDouble(Double::doubleValue)), 0); List code = getCode(aqiList); code.add(rsMonth); return code; } private void getHnMap(HashMap hnMap2) { Set strings4 = hnMap2.keySet(); for (String s : strings4) { Object o = hnMap2.get(s); String s1 = JSON.toJSONString(o); Map rs = JSON.parseObject(s1, Map.class); Map aqi1 = AqiUtils.getAqi(rs); JSONObject jsonObject = JSON.parseObject(s1); jsonObject.put("AQI",aqi1.get("AQI")); String s2 = JSON.toJSONString(jsonObject); Map map = JSON.parseObject(s2, Map.class); hnMap2.put(s,map); } } }