| 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(mac, 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; | 
|     } | 
| } |