New file |
| | |
| | | package com.moral.api.task; |
| | | |
| | | import com.alibaba.fastjson.JSON; |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; |
| | | import com.moral.api.entity.*; |
| | | import com.moral.api.service.*; |
| | | import com.xxl.job.core.biz.model.ReturnT; |
| | | import com.xxl.job.core.context.XxlJobHelper; |
| | | import com.xxl.job.core.handler.annotation.XxlJob; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import java.text.ParseException; |
| | | import java.text.SimpleDateFormat; |
| | | import java.util.*; |
| | | |
| | | /** |
| | | * @program: screen |
| | | * @description: 提示信息自动生成接口 |
| | | * @author: lizijie |
| | | * @create: 2021-10-12 08:53 |
| | | **/ |
| | | @Component |
| | | public class InformationTask { |
| | | |
| | | @Autowired |
| | | private OrganizationService organizationService; |
| | | |
| | | @Autowired |
| | | private GovMonitorPointService govMonitorPointService; |
| | | |
| | | @Autowired |
| | | private HistoryAqiService historyAqiService; |
| | | |
| | | @Autowired |
| | | private DeviceService deviceService; |
| | | |
| | | @Autowired |
| | | private HistoryHourlyService historyHourlyService; |
| | | |
| | | @Autowired |
| | | private CityWeatherService cityWeatherService; |
| | | |
| | | @Autowired |
| | | private InformationService informationService; |
| | | |
| | | @XxlJob("informationInsert") |
| | | public ReturnT informationInsert(){ |
| | | String params = XxlJobHelper.getJobParam(); |
| | | Map organizationIdMap = JSON.parseObject(params); |
| | | List<Integer> orgIdList = (List<Integer>) organizationIdMap.get("orgId"); |
| | | Calendar nowCalendar = Calendar.getInstance(); |
| | | Calendar beforeCalendar = Calendar.getInstance(); |
| | | /* HOUR_OF_DAY 指示一天中的小时 */ |
| | | nowCalendar.set(Calendar.HOUR_OF_DAY, nowCalendar.get(Calendar.HOUR_OF_DAY) - 1); |
| | | beforeCalendar.set(Calendar.HOUR_OF_DAY, beforeCalendar.get(Calendar.HOUR_OF_DAY) - 2); |
| | | SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH"); |
| | | String nowTime = df.format(nowCalendar.getTime())+":00:00"; |
| | | String beforeTime = df.format(beforeCalendar.getTime())+":00:00"; |
| | | String realTime = df.format(new Date())+":00:00"; |
| | | for (Integer orgId:orgIdList) { |
| | | if (!ObjectUtils.isEmpty(organizationService.getOrganizationById(orgId))){ |
| | | Organization organization = organizationService.getOrganizationById(orgId); |
| | | Integer locationLevelCode = organization.getLocationLevelCode(); |
| | | List<GovMonitorPoint> govMonitorPoints = govMonitorPointService.getGovMonitorPointByRegionCode(locationLevelCode); |
| | | Double PM2_5AvgBefore = null; |
| | | Double PM10AvgBefore = null; |
| | | Double O3AvgBefore = null; |
| | | Double PM2_5AvgNow = null; |
| | | Double PM10AvgNow = null; |
| | | Double O3AvgNow = null; |
| | | Double AQIAvgNow = null; |
| | | Double TVOCAvgNow = null; |
| | | Double TVOCAvgBefore = null; |
| | | if (govMonitorPoints.size()>0){ |
| | | List<Double> PM2_5ListBefore = new ArrayList<>(); |
| | | List<Double> PM10ListBefore = new ArrayList<>(); |
| | | List<Double> O3ListBefore = new ArrayList<>(); |
| | | List<Double> PM2_5ListNow = new ArrayList<>(); |
| | | List<Double> PM10ListNow = new ArrayList<>(); |
| | | List<Double> O3ListNow = new ArrayList<>(); |
| | | List<Double> AQIListNow = new ArrayList<>(); |
| | | for (GovMonitorPoint govMonitorPoint:govMonitorPoints) { |
| | | String guid = govMonitorPoint.getGuid(); |
| | | HistoryAqi beforeHistoryAqi = new HistoryAqi(); |
| | | beforeHistoryAqi = historyAqiService.getHistoryApiByTimeAndGuid(guid,beforeTime); |
| | | if (!ObjectUtils.isEmpty(beforeHistoryAqi)){ |
| | | String value = beforeHistoryAqi.getValue(); |
| | | if (!ObjectUtils.isEmpty(value)){ |
| | | JSONObject jsonObject = new JSONObject(); |
| | | jsonObject = JSONObject.parseObject(value); |
| | | if (!ObjectUtils.isEmpty(jsonObject.get("pm2_5"))){ |
| | | PM2_5ListBefore.add(Double.parseDouble(jsonObject.get("pm2_5").toString())); |
| | | } |
| | | if (!ObjectUtils.isEmpty(jsonObject.get("pm10"))){ |
| | | PM10ListBefore.add(Double.parseDouble(jsonObject.get("pm10").toString())); |
| | | } |
| | | if (!ObjectUtils.isEmpty(jsonObject.get("o3"))){ |
| | | O3ListBefore.add(Double.parseDouble(jsonObject.get("o3").toString())); |
| | | } |
| | | } |
| | | } |
| | | HistoryAqi nowHistoryAqi = new HistoryAqi(); |
| | | nowHistoryAqi = historyAqiService.getHistoryApiByTimeAndGuid(guid,nowTime); |
| | | if (!ObjectUtils.isEmpty(nowHistoryAqi)){ |
| | | String value = nowHistoryAqi.getValue(); |
| | | if (!ObjectUtils.isEmpty(value)){ |
| | | JSONObject jsonObject = JSONObject.parseObject(value); |
| | | if (!ObjectUtils.isEmpty(jsonObject.get("pm2_5"))){ |
| | | PM2_5ListNow.add(Double.parseDouble(jsonObject.get("pm2_5").toString())); |
| | | } |
| | | if (!ObjectUtils.isEmpty(jsonObject.get("pm10"))){ |
| | | PM10ListNow.add(Double.parseDouble(jsonObject.get("pm10").toString())); |
| | | } |
| | | if (!ObjectUtils.isEmpty(jsonObject.get("o3"))){ |
| | | O3ListNow.add(Double.parseDouble(jsonObject.get("o3").toString())); |
| | | } |
| | | if (!ObjectUtils.isEmpty(jsonObject.get("aqi"))){ |
| | | AQIListNow.add(Double.parseDouble(jsonObject.get("aqi").toString())); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | if (PM2_5ListBefore.size()>0){ |
| | | PM2_5AvgBefore = (double)Math.round(PM2_5ListBefore.stream().mapToDouble(aDouble -> aDouble).summaryStatistics().getAverage()); |
| | | } |
| | | if (PM10ListBefore.size()>0){ |
| | | PM10AvgBefore = (double)Math.round(PM10ListBefore.stream().mapToDouble(aDouble -> aDouble).summaryStatistics().getAverage()); |
| | | } |
| | | if (O3ListBefore.size()>0){ |
| | | O3AvgBefore = (double)Math.round(O3ListBefore.stream().mapToDouble(aDouble -> aDouble).summaryStatistics().getAverage()); |
| | | } |
| | | if (PM2_5ListNow.size()>0){ |
| | | PM2_5AvgNow = (double)Math.round(PM2_5ListNow.stream().mapToDouble(aDouble -> aDouble).summaryStatistics().getAverage()); |
| | | } |
| | | if (PM10ListNow.size()>0){ |
| | | PM10AvgNow = (double)Math.round(PM10ListNow.stream().mapToDouble(aDouble -> aDouble).summaryStatistics().getAverage()); |
| | | } |
| | | if (O3ListNow.size()>0){ |
| | | O3AvgNow = (double)Math.round(O3ListNow.stream().mapToDouble(aDouble -> aDouble).summaryStatistics().getAverage()); |
| | | } |
| | | if (AQIListNow.size()>0){ |
| | | AQIAvgNow = (double)Math.round(AQIListNow.stream().mapToDouble(aDouble -> aDouble).summaryStatistics().getAverage()); |
| | | } |
| | | List<Device> devices = new ArrayList<>(); |
| | | devices = deviceService.getDateByOrgId(orgId); |
| | | List<Double> TVOCListNow = new ArrayList<>(); |
| | | List<Double> TVOCListBefore = new ArrayList<>(); |
| | | SimpleDateFormat df1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); |
| | | try { |
| | | for (Device device:devices) { |
| | | String mac = device.getMac(); |
| | | List<HistoryHourly> historyHourliesNow = new ArrayList<>(); |
| | | historyHourliesNow = historyHourlyService.getValueByMacAndTime(mac, df1.parse(nowTime), df1.parse(df.format(nowCalendar.getTime()) + ":00:01")); |
| | | if (!ObjectUtils.isEmpty(historyHourliesNow) && historyHourliesNow.size()>0){ |
| | | String value = historyHourliesNow.get(0).getValue(); |
| | | JSONObject jsonObject = JSONObject.parseObject(value); |
| | | TVOCListNow.add(Double.parseDouble(jsonObject.get("a99054").toString())); |
| | | } |
| | | List<HistoryHourly> historyHourliesBefore = new ArrayList<>(); |
| | | historyHourliesBefore = historyHourlyService.getValueByMacAndTime("p5dnd7a0392252", df1.parse(beforeTime), df1.parse(df.format(beforeCalendar.getTime()) + ":00:01")); |
| | | if (!ObjectUtils.isEmpty(historyHourliesBefore) && historyHourliesBefore.size()>0){ |
| | | String value = historyHourliesBefore.get(0).getValue(); |
| | | JSONObject jsonObject = JSONObject.parseObject(value); |
| | | TVOCListBefore.add(Double.parseDouble(jsonObject.get("a99054").toString())); |
| | | } |
| | | } |
| | | }catch (ParseException e){ |
| | | e.printStackTrace(); |
| | | } |
| | | if (TVOCListNow.size()>0){ |
| | | TVOCAvgNow = (double)Math.round(TVOCListNow.stream().mapToDouble(aDouble -> aDouble).summaryStatistics().getAverage()); |
| | | } |
| | | if (TVOCListBefore.size()>0){ |
| | | TVOCAvgBefore = (double)Math.round(TVOCListBefore.stream().mapToDouble(aDouble -> aDouble).summaryStatistics().getAverage()); |
| | | } |
| | | } |
| | | String temp = ""; |
| | | String humidity = ""; |
| | | String windDir = ""; |
| | | String windScale = ""; |
| | | CityWeather cityWeather = new CityWeather(); |
| | | cityWeather = cityWeatherService.getDataByCityCodeAndTime(locationLevelCode.toString(),nowTime); |
| | | if (!ObjectUtils.isEmpty(cityWeather)){ |
| | | String value = cityWeather.getValue(); |
| | | if (!ObjectUtils.isEmpty(value)){ |
| | | JSONObject jsonObject = JSONObject.parseObject(value); |
| | | if (!ObjectUtils.isEmpty(jsonObject.get("temp"))){ |
| | | temp = jsonObject.getString("temp"); |
| | | } |
| | | if (!ObjectUtils.isEmpty(jsonObject.get("humidity"))){ |
| | | humidity = jsonObject.getString("humidity"); |
| | | } |
| | | if (!ObjectUtils.isEmpty(jsonObject.get("windDir"))){ |
| | | windDir = jsonObject.getString("windDir"); |
| | | } |
| | | if (!ObjectUtils.isEmpty(jsonObject.get("windScale "))){ |
| | | windScale = jsonObject.getString("windScale"); |
| | | } |
| | | } |
| | | } |
| | | Information information = new Information(); |
| | | JSONObject jsonObject = new JSONObject(); |
| | | String realHour = realTime.substring(11,13); |
| | | String nowHour = nowTime.substring(11,13); |
| | | String beforeHour = beforeTime.substring(11,13); |
| | | String title = "【"+realHour+"时数据提醒】"; |
| | | String airInfo = nowHour+"时,"; |
| | | String AQILevel = ""; |
| | | if (!ObjectUtils.isEmpty(AQIAvgNow)){ |
| | | airInfo = airInfo + "我市AQI:"+AQIAvgNow+",等级:"; |
| | | if (AQIAvgNow<50 || AQIAvgNow==50){ |
| | | AQILevel = "优"; |
| | | }else if (AQIAvgNow<100 || AQIAvgNow==100){ |
| | | AQILevel = "良好"; |
| | | }else if (AQIAvgNow<200 || AQIAvgNow==200){ |
| | | AQILevel = "轻度污染"; |
| | | }else if (AQIAvgNow<300 || AQIAvgNow==300){ |
| | | AQILevel = "中度污染"; |
| | | }else{ |
| | | AQILevel = "重度污染"; |
| | | } |
| | | }else { |
| | | airInfo = airInfo + "我市AQI:"+",等级:"; |
| | | } |
| | | airInfo = airInfo+AQILevel+"。"; |
| | | String PM10Info = ""; |
| | | PM10Info = PM10Info+"PM10:"+PM10AvgNow+"微克/立方米,"; |
| | | if (!ObjectUtils.isEmpty(PM10AvgBefore) && !ObjectUtils.isEmpty(PM10AvgNow)){ |
| | | String upOrDown = (PM10AvgBefore<PM10AvgNow)?"上升":"下降"; |
| | | PM10Info = PM10Info + upOrDown+Math.abs(PM10AvgNow-PM10AvgBefore)+";"; |
| | | } |
| | | String PM2_5Info = ""; |
| | | PM2_5Info = PM2_5Info+"PM10:"+PM2_5AvgNow+"微克/立方米,"; |
| | | if (!ObjectUtils.isEmpty(PM2_5AvgBefore) && !ObjectUtils.isEmpty(PM2_5AvgNow)){ |
| | | String upOrDown = (PM2_5AvgBefore<PM2_5AvgNow)?"上升":"下降"; |
| | | PM2_5Info = PM2_5Info + upOrDown+Math.abs(PM2_5AvgNow-PM2_5AvgBefore)+";"; |
| | | } |
| | | String O3Info = ""; |
| | | O3Info = O3Info+"O3:"+O3AvgNow+"微克/立方米,"; |
| | | if (!ObjectUtils.isEmpty(O3AvgBefore) && !ObjectUtils.isEmpty(O3AvgNow)){ |
| | | String upOrDown = (O3AvgBefore<PM10AvgNow)?"上升":"下降"; |
| | | O3Info = O3Info + upOrDown+Math.abs(O3AvgNow-O3AvgBefore)+";"; |
| | | } |
| | | String TVOCInfo = ""; |
| | | TVOCInfo = TVOCInfo+"TVOC总量:"+TVOCAvgNow+"微克/立方米。"; |
| | | String cityWeatherInfo = ""; |
| | | cityWeatherInfo = cityWeatherInfo + "当天天气状况:温度"+temp+"℃,湿度"+humidity+"%,"+windDir+windScale+"级。"; |
| | | airInfo = airInfo+"与"+beforeHour+"相比,"+PM10Info+PM2_5Info+O3Info+TVOCInfo; |
| | | airInfo = airInfo.replace("null",""); |
| | | cityWeatherInfo = cityWeatherInfo.replace("null",""); |
| | | List info = new ArrayList(); |
| | | info.add(airInfo); |
| | | info.add(cityWeatherInfo); |
| | | String author = "(七星瓢虫专家组)"; |
| | | jsonObject.put("title",title); |
| | | jsonObject.put("info",info); |
| | | jsonObject.put("author",author); |
| | | |
| | | information.setInfo(jsonObject.toString()); |
| | | information.setOrganizationId(orgId); |
| | | information.setType("0"); |
| | | informationService.insert(information); |
| | | } |
| | | } |
| | | return ReturnT.SUCCESS; |
| | | } |
| | | } |