From 3ec35029adfb63e79ad17bf351317768e687ec2b Mon Sep 17 00:00:00 2001 From: jinpengyong <jpy123456> Date: Mon, 17 Jan 2022 16:22:25 +0800 Subject: [PATCH] city_aqi月均值,年均值update --- screen-api/src/main/java/com/moral/api/service/SupervisionService.java | 2 screen-api/src/main/java/com/moral/api/service/impl/SupervisionServiceImpl.java | 7 ++ screen-job/src/main/java/com/moral/api/service/impl/CityAqiMonthlyServiceImpl.java | 27 +++++--- screen-api/src/main/java/com/moral/api/controller/SupervisionController.java | 11 +++ screen-job/src/main/java/com/moral/api/service/impl/CityAqiYearlyServiceImpl.java | 94 ++++++++++++++----------------- screen-common/src/main/java/com/moral/util/AmendUtils.java | 36 ++++++++++++ 6 files changed, 115 insertions(+), 62 deletions(-) diff --git a/screen-api/src/main/java/com/moral/api/controller/SupervisionController.java b/screen-api/src/main/java/com/moral/api/controller/SupervisionController.java index 5f07951..0aa0248 100644 --- a/screen-api/src/main/java/com/moral/api/controller/SupervisionController.java +++ b/screen-api/src/main/java/com/moral/api/controller/SupervisionController.java @@ -5,6 +5,7 @@ import io.swagger.annotations.ApiImplicitParams; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.util.ObjectUtils; import org.springframework.web.bind.annotation.CrossOrigin; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; @@ -69,4 +70,14 @@ return ResultMessage.ok(); } + @ApiOperation(value = "���������������", notes = "���������������") + @GetMapping("delete") + public ResultMessage delete(Integer supervisionId) { + if (ObjectUtils.isEmpty(supervisionId)) { + return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(), ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg()); + } + supervisionService.deleteSupervision(supervisionId); + return ResultMessage.ok(); + } + } diff --git a/screen-api/src/main/java/com/moral/api/service/SupervisionService.java b/screen-api/src/main/java/com/moral/api/service/SupervisionService.java index b17644f..72d909a 100644 --- a/screen-api/src/main/java/com/moral/api/service/SupervisionService.java +++ b/screen-api/src/main/java/com/moral/api/service/SupervisionService.java @@ -26,4 +26,6 @@ //��������������� Map<String, Object> updateSupervision(MultipartFile[] files, Supervision supervision); + void deleteSupervision(Integer id); + } diff --git a/screen-api/src/main/java/com/moral/api/service/impl/SupervisionServiceImpl.java b/screen-api/src/main/java/com/moral/api/service/impl/SupervisionServiceImpl.java index 0eaf937..3e38b31 100644 --- a/screen-api/src/main/java/com/moral/api/service/impl/SupervisionServiceImpl.java +++ b/screen-api/src/main/java/com/moral/api/service/impl/SupervisionServiceImpl.java @@ -124,7 +124,7 @@ public Map<String, Object> updateSupervision(MultipartFile[] files, Supervision supervision) { String path = this.getClass().getClassLoader() - .getResource("").getFile() + "static/img/"; + .getResource("").getFile() + "static/img"; Map<String, Object> result = new HashMap<>(); @@ -160,4 +160,9 @@ supervisionMapper.updateById(supervision); return result; } + + @Override + public void deleteSupervision(Integer id) { + supervisionMapper.deleteById(id); + } } diff --git a/screen-common/src/main/java/com/moral/util/AmendUtils.java b/screen-common/src/main/java/com/moral/util/AmendUtils.java index 7b7348d..33c985a 100644 --- a/screen-common/src/main/java/com/moral/util/AmendUtils.java +++ b/screen-common/src/main/java/com/moral/util/AmendUtils.java @@ -327,4 +327,40 @@ result.put(Constants.SENSOR_CODE_O3, percentile(data, 90)); return result; } + + //������������������������ + /** + * ��������������� + * PM2.5,PM10,CO,���������95��������� + * SO2,NO2,���������98��������� + * O3���������������90��������� + * + * @param list ������ + * @param sensorCode ������code + */ + public static Double getAvgOfYear(List<Map<String, Object>> list, String sensorCode) { + List<Double> data = new ArrayList<>(); + for (Map<String, Object> dataMap : list) { + Map<String, Object> dataValue = JSONObject.parseObject((String) dataMap.get("value"), Map.class); + Object o = dataValue.get(sensorCode); + if (ObjectUtils.isEmpty(o)) { + continue; + } + Double sensorValue = Double.parseDouble(o.toString()); + data.add(sensorValue); + } + if (data.size() == 0) { + return null; + } + + Double v = null; + if ("PM2_5".equals(sensorCode) || "PM10".equals(sensorCode) || "CO".equals(sensorCode)) { + v = percentile(data, 95); + } else if ("SO2".equals(sensorCode) || "NO2".equals(sensorCode)) { + v = percentile(data, 98); + } else if ("O3".equals(sensorCode)) { + v = percentile(data, 90); + } + return v; + } } diff --git a/screen-job/src/main/java/com/moral/api/service/impl/CityAqiMonthlyServiceImpl.java b/screen-job/src/main/java/com/moral/api/service/impl/CityAqiMonthlyServiceImpl.java index 5a68e10..d4e3b4b 100644 --- a/screen-job/src/main/java/com/moral/api/service/impl/CityAqiMonthlyServiceImpl.java +++ b/screen-job/src/main/java/com/moral/api/service/impl/CityAqiMonthlyServiceImpl.java @@ -69,7 +69,18 @@ return; } //���city_code������ - Map<String, List<Map<String, Object>>> data = monthlyData.parallelStream().collect(Collectors.groupingBy(o -> o.get("city_code").toString())); + Map<String, List<Map<String, Object>>> data = monthlyData.stream() + .collect(Collectors.groupingBy(o -> o.get("city_code").toString())); + + //������������������������������������������������ + QueryWrapper<CityAqiMonthly> queryWrapper = new QueryWrapper<>(); + queryWrapper.select("city_code", "value") + .eq("time", DateUtils.dateToDateString(lastLastMonth)); + //������������������ + List<CityAqiMonthly> lastCityAqiMonthly = cityAqiMonthlyMapper.selectList(queryWrapper); + Map<Integer, List<CityAqiMonthly>> lastMonthData = lastCityAqiMonthly.stream() + .collect(Collectors.groupingBy(CityAqiMonthly::getCityCode)); + CityAqiMonthly cityAqiMonthly = new CityAqiMonthly(); data.forEach((cityCode, value) -> { @@ -102,7 +113,7 @@ } sensors.forEach(sensor -> { - OptionalDouble optionalDouble = value.parallelStream().flatMapToDouble(v -> { + OptionalDouble optionalDouble = value.stream().flatMapToDouble(v -> { Map<String, Object> dataValue = JSONObject.parseObject((String) v.get("value"), Map.class); double aDouble = Double.parseDouble(dataValue.get(sensor).toString()); return DoubleStream.of(aDouble); @@ -118,14 +129,10 @@ jsonMap.put("compositeIndex", compositeIndex); //��������������������������� - QueryWrapper<CityAqiMonthly> queryWrapper = new QueryWrapper<>(); - queryWrapper.select("value") - .eq("city_code", cityCode) - .eq("time", DateUtils.dateToDateString(lastLastMonth)); - //��������������������� - CityAqiMonthly lastCityAqiMonthly = cityAqiMonthlyMapper.selectOne(queryWrapper); - if (lastCityAqiMonthly != null) { - Map<String, Object> map = JSONObject.parseObject(lastCityAqiMonthly.getValue(), Map.class); + List<CityAqiMonthly> cityAqiMonthlies = lastMonthData.get(Integer.parseInt(cityCode)); + if (!ObjectUtils.isEmpty(cityAqiMonthlies)) { + CityAqiMonthly monthly = cityAqiMonthlies.get(0); + Map<String, Object> map = JSONObject.parseObject(monthly.getValue(), Map.class); double lastCompositeIndex = Double.parseDouble(map.get("compositeIndex").toString()); DecimalFormat decimalFormat = new DecimalFormat("0.00%"); String format = decimalFormat.format((compositeIndex - lastCompositeIndex) / lastCompositeIndex); diff --git a/screen-job/src/main/java/com/moral/api/service/impl/CityAqiYearlyServiceImpl.java b/screen-job/src/main/java/com/moral/api/service/impl/CityAqiYearlyServiceImpl.java index 95ef4b0..fbea9a0 100644 --- a/screen-job/src/main/java/com/moral/api/service/impl/CityAqiYearlyServiceImpl.java +++ b/screen-job/src/main/java/com/moral/api/service/impl/CityAqiYearlyServiceImpl.java @@ -8,7 +8,6 @@ import com.moral.api.service.CityAqiDailyService; import com.moral.api.service.CityAqiYearlyService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; -import com.moral.constant.Constants; import com.moral.util.AmendUtils; import com.moral.util.ComprehensiveIndexUtils; import com.moral.util.DateUtils; @@ -18,15 +17,12 @@ import org.springframework.util.ObjectUtils; import java.text.DecimalFormat; -import java.util.ArrayList; import java.util.Arrays; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.OptionalDouble; import java.util.stream.Collectors; -import java.util.stream.DoubleStream; /** * <p> @@ -48,7 +44,12 @@ @Override public void insertCityAqiYearly() { - //��������������������������� + /* + * ��������������� + * PM2.5,PM10,CO,���������95��������� + * SO2,NO2,���������98��������� + * O3���������������90��������� + * */ List<String> sensors = Arrays.asList("PM2_5", "PM10", "SO2", "NO2"); //���������������������1��� @@ -59,7 +60,7 @@ Date end = DateUtils.getDate(DateUtils.getDateAddYear(DateUtils.dateToDateString(start, DateUtils.yyyy), 1), DateUtils.yyyy); - //������������������aqi������������ + //������������������aqi��������� QueryWrapper<CityAqiDaily> wrapper = new QueryWrapper<>(); wrapper.select("city_code", "time", "value") .ge("time", DateUtils.dateToDateString(start)) @@ -70,7 +71,18 @@ return; } //���city_code������ - Map<String, List<Map<String, Object>>> data = monthlyData.parallelStream().collect(Collectors.groupingBy(o -> o.get("city_code").toString())); + Map<String, List<Map<String, Object>>> data = monthlyData.stream() + .collect(Collectors.groupingBy(o -> o.get("city_code").toString())); + + //������������ + QueryWrapper<CityAqiYearly> queryWrapper = new QueryWrapper<>(); + queryWrapper.select("city_code", "value") + .eq("time", DateUtils.dateToDateString(lastLastYear)); + //������������������ + List<CityAqiYearly> lastCityAqiYearly = cityAqiYearlyMapper.selectList(queryWrapper); + Map<Integer, List<CityAqiYearly>> lastYearData = lastCityAqiYearly.stream() + .collect(Collectors.groupingBy(CityAqiYearly::getCityCode)); + CityAqiYearly cityAqiYearly = new CityAqiYearly(); data.forEach((cityCode, value) -> { @@ -78,57 +90,39 @@ cityAqiYearly.setCityCode(Integer.parseInt(cityCode)); cityAqiYearly.setTime(start); + //PM2.5 + Double pm25Avg = AmendUtils.getAvgOfYear(value, "PM2_5"); + jsonMap.put("PM2_5", pm25Avg); - Map<String, Object> params = new HashMap<>(); - List<Map<String, Object>> temp = new ArrayList<>(); + //PM10 + Double pm10Avg = AmendUtils.getAvgOfYear(value, "PM10"); + jsonMap.put("PM10", pm10Avg); - for (Map<String, Object> map : value) { - Map<String, Object> sensorsValue = JSONObject.parseObject(map.get("value").toString(), Map.class); - Map<String, Object> tempMap = new HashMap<>(); - tempMap.put(Constants.SENSOR_CODE_CO, sensorsValue.get("PM2_5")); - tempMap.put(Constants.SENSOR_CODE_O3, sensorsValue.get("O3")); - Map<String, Object> hashMap = new HashMap<>(); - hashMap.put("value", JSONObject.toJSONString(tempMap)); - temp.add(hashMap); - } - params.put("data", temp); - //1. CO 95������������������������ - Map<String, Object> coAvgOfWeekOrMonth = AmendUtils.getCOAvgOfWeekOrMonth(params); - if (!ObjectUtils.isEmpty(coAvgOfWeekOrMonth)) { - jsonMap.put("CO", coAvgOfWeekOrMonth.get(Constants.SENSOR_CODE_CO)); - } + //SO2 + Double so2Avg = AmendUtils.getAvgOfYear(value, "SO2"); + jsonMap.put("SO2", so2Avg); - //2. O3 90������������������������ - Map<String, Object> o3AvgOfWeekOrMonth = AmendUtils.getO3AvgOfWeekOrMonth(params); - if (!ObjectUtils.isEmpty(o3AvgOfWeekOrMonth)) { - jsonMap.put("O3", o3AvgOfWeekOrMonth.get(Constants.SENSOR_CODE_O3)); - } + //NO2 + Double no2Avg = AmendUtils.getAvgOfYear(value, "NO2"); + jsonMap.put("NO2", no2Avg); - sensors.forEach(sensor -> { - OptionalDouble optionalDouble = value.parallelStream().flatMapToDouble(v -> { - Map<String, Object> dataValue = JSONObject.parseObject((String) v.get("value"), Map.class); - double aDouble = Double.parseDouble(dataValue.get(sensor).toString()); - return DoubleStream.of(aDouble); - }).average(); - if (optionalDouble.isPresent()) { - //��������������������� - jsonMap.put(sensor, AmendUtils.sciCal(optionalDouble.getAsDouble(), 0)); - } - }); + //CO + Double coAvg = AmendUtils.getAvgOfYear(value, "CO"); + jsonMap.put("CO", coAvg); + + //O3 + Double o3Avg = AmendUtils.getAvgOfYear(value, "O3"); + jsonMap.put("O3", o3Avg); //��������������������� Double compositeIndex = ComprehensiveIndexUtils.dailyData(jsonMap); jsonMap.put("compositeIndex", compositeIndex); - //��������������������������� - QueryWrapper<CityAqiYearly> queryWrapper = new QueryWrapper<>(); - queryWrapper.select("value") - .eq("city_code", cityCode) - .eq("time", DateUtils.dateToDateString(lastLastYear)); - //��������������������� - CityAqiYearly lastCityAqiYearly = cityAqiYearlyMapper.selectOne(queryWrapper); - if (lastCityAqiYearly != null) { - Map<String, Object> map = JSONObject.parseObject(lastCityAqiYearly.getValue(), Map.class); + //��������������������������� + List<CityAqiYearly> cityAqiYearlies = lastYearData.get(Integer.parseInt(cityCode)); + if (!ObjectUtils.isEmpty(cityAqiYearlies)) { + CityAqiYearly yearly = cityAqiYearlies.get(0); + Map<String, Object> map = JSONObject.parseObject(yearly.getValue(), Map.class); double lastCompositeIndex = Double.parseDouble(map.get("compositeIndex").toString()); DecimalFormat decimalFormat = new DecimalFormat("0.00%"); String format = decimalFormat.format((compositeIndex - lastCompositeIndex) / lastCompositeIndex); @@ -137,7 +131,5 @@ cityAqiYearly.setValue(JSONObject.toJSONString(jsonMap)); cityAqiYearlyMapper.insert(cityAqiYearly); }); - - } } -- Gitblit v1.8.0