package com.moral.api.controller; import com.moral.api.config.properties.SpecialCitiesProperties; import com.moral.api.entity.SysArea; import com.moral.api.pojo.dto.cityAQI.*; import com.moral.api.pojo.form.aqi.*; import com.moral.api.pojo.vo.cityAQI.*; import com.moral.api.service.CityAqiDailyService; import com.moral.api.service.CityAqiYearlyService; import io.swagger.annotations.*; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Required; import org.springframework.format.annotation.DateTimeFormat; import org.springframework.util.ObjectUtils; import org.springframework.web.bind.annotation.*; import java.util.*; import javax.servlet.http.HttpServletRequest; import javax.validation.constraints.NotNull; import com.moral.api.service.CityAqiService; import com.moral.constant.ResponseCodeEnum; import com.moral.constant.ResultMessage; import com.moral.util.WebUtils; @RestController @RequestMapping("/aqi") @CrossOrigin(origins = "*", maxAge = 3600) @Api(tags = {"aqi"}) public class AqiController { @Autowired private CityAqiService cityAqiService; @Autowired private CityAqiDailyService cityAqiDailyService; @Autowired SpecialCitiesProperties specialCitiesProperties; @Autowired CityAqiYearlyService cityAqiYearlyService; @GetMapping("compareO3") @ApiOperation(value = "预测和实测臭氧对比", notes = "预测和实测臭氧对比") @ApiImplicitParams(value = { @ApiImplicitParam(name = "regionCode", value = "区号", required = true, paramType = "query", dataType = "String") }) public ResultMessage measuredCompareForecast(HttpServletRequest request) { Map params = WebUtils.getParametersStartingWith(request, null); if (!params.containsKey("regionCode") || !params.containsKey("time")) { return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(), ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg()); } List> response = cityAqiService.measuredCompareForecastOfO3(params); return ResultMessage.ok(response); } @GetMapping("compareO3New") @ApiOperation(value = "预测和实测臭氧对比New", notes = "预测和实测臭氧对比New") public ResultMessage compareO3New(@RequestParam @ApiParam(value = "regionCode",name = "城市code") String regionCode, @RequestParam @ApiParam(value = "time",name = "日期") String time) { Map params = new HashMap<>(); params.put("regionCode",regionCode); params.put("time",time); List> response = cityAqiService.measuredCompareForecastOfO3(params); return ResultMessage.ok(response); } @GetMapping("getO38H") @ApiOperation(value = "预测和实测臭氧对比New", notes = "预测和实测臭氧对比New") public ResultMessage getO38H(@RequestParam @ApiParam(value = "regionCode",name = "城市code") String regionCode, @RequestParam @ApiParam(value = "time",name = "日期") String time) { Map params = new HashMap<>(); params.put("regionCode",regionCode); params.put("time",time); List> response = cityAqiService.measuredCompareForecastOfO3_8H(params); return ResultMessage.ok(response); } /** * @Description: 查询最新的6参和aqi数据 * @Param: [regionCode] * @return: com.moral.constant.ResultMessage * @Author: 陈凯裕 * @Date: 2021/11/1 */ @GetMapping("queryByRegionCode") public ResultMessage queryByRegionCode(Integer regionCode) { Map value = cityAqiService.queryCityAqiByRegionCode(regionCode); return ResultMessage.ok(value); } /** * @Description: 查询最近24小时的aqi数据 * @Param: [regionCode] * @return: com.moral.constant.ResultMessage * @Author: 陈凯裕 * @Date: 2021/11/1 */ @GetMapping("query24HoursAQI") public ResultMessage query24HoursAQIByRegionCode(Integer regionCode) { Map datas = cityAqiService.query24HoursAqiByRegionCode(regionCode); return ResultMessage.ok(datas); } /** * @Description: 查询当天的累计aqi以及主要污染物 * @Param: [RegionCode] * @return: com.moral.constant.ResultMessage * @Author: 陈凯裕 * @Date: 2021/11/2 */ @GetMapping("queryTodayAqiAndPollutant") public ResultMessage queryTodayAqiAndPollutant(Integer regionCode) { Map datas = cityAqiService.queryTodayAqiAndPollutant(regionCode); return ResultMessage.ok(datas); } /** * @Description: 首页右下角,污染天数占比的饼状图 * @Param: [regionCode] * @return: com.moral.constant.ResultMessage * @Author: 陈凯裕 * @Date: 2021/11/11 */ @GetMapping("queryPieChartOfPollutionLevel") public ResultMessage queryPieChartOfPollutionLevel(ChartOfPollutionLevelForm form) { //判断是否缺少参数 if (!form.valid()) return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(), ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg()); PieChartOfPollutionLevelVO VO = cityAqiDailyService.queryPieChartOfPollutionLevels(form); return ResultMessage.ok(VO); } /** * @Description: 获取城市优良天气占比的柱状图数据 * @Param: [form] * @return: com.moral.constant.ResultMessage * @Author: 陈凯裕 * @Date: 2021/11/22 */ @GetMapping("queryBarChartOfPollutionLevel") public ResultMessage queryBarChartOfPollutionLevel(ChartOfPollutionLevelForm form) { //判断是否缺少参数 if (!form.valid()) return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(), ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg()); //查询数据 List datas = cityAqiDailyService.queryBarChartOfPollutionLevels(form); //数据格式转换 BarChartOfPollutionLevelVO vo = BarChartOfPollutionLevelVO.convert(datas); return ResultMessage.ok(vo); } /** * @Description: 获取城市优良天气占比的柱状图下的表格数据 * @Param: [form] * @return: com.moral.constant.ResultMessage * @Author: 陈凯裕 * @Date: 2021/11/22 */ @GetMapping("queryBarChatTableOfPollutionLevel") public ResultMessage queryBarChatTableOfPollutionLevel(ChartOfPollutionLevelForm form) { //判断是否缺少参数 if (!form.valid()) return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(), ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg()); //查询数据 List datas = cityAqiDailyService.queryBarChartOfPollutionLevels(form); List vos = new ArrayList<>(); for (MonthlyPollutionLevel data : datas) { BarChartTableOfPollutionLevelVO vo = BarChartTableOfPollutionLevelVO.convert(data); vos.add(vo); } return ResultMessage.ok(vos); } @GetMapping("provincialRanking") @ApiOperation(value = "省内排名", notes = "省内排名") @ApiImplicitParams(value = { @ApiImplicitParam(name = "regionCode", value = "区号", required = true, paramType = "query", dataType = "Integer") }) public ResultMessage provincialRanking(Integer regionCode) { if (ObjectUtils.isEmpty(regionCode)) { return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(), ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg()); } Map response = cityAqiService.provincialRanking(regionCode); return ResultMessage.ok(response); } @GetMapping("rankingDetails") @ApiOperation(value = "排名详情", notes = "排名详情") @ApiImplicitParams(value = { @ApiImplicitParam(name = "regionCode", value = "区号", required = true, paramType = "query", dataType = "Integer"), @ApiImplicitParam(name = "type", value = "排名类型,今日累计:today,小时:hour,日:day,月:month,年:year,自定义:custom", required = true, paramType = "query", dataType = "String"), @ApiImplicitParam(name = "time", value = "时间,排名类型为day,month,year是需传此参", required = true, paramType = "query", dataType = "String"), @ApiImplicitParam(name = "start", value = "开始时间,排名类型为custom自定义是传此参,精确到日,如:2021-11-02", required = true, paramType = "query", dataType = "String"), @ApiImplicitParam(name = "end", value = "结束时间,排名类型为custom自定义是传此参,精确到日,如:2021-11-03", required = true, paramType = "query", dataType = "String"), @ApiImplicitParam(name = "cityType", value = "城市类型,省内城市:province,市区排名:city,2+28城市排名:28", required = true, paramType = "query", dataType = "String"), }) public ResultMessage rankingDetails(HttpServletRequest request) { Map params = WebUtils.getParametersStartingWith(request, null); if (!params.containsKey("type") || !params.containsKey("cityType") || !params.containsKey("regionCode")) { return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(), ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg()); } Object type = params.get("type"); if ("hour".equals(type) || "day".equals(type) || "month".equals(type) || "year".equals(type)) { if (!params.containsKey("time")) { return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(), ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg()); } } if ("custom".equals(type)) { if (!params.containsKey("start") || !params.containsKey("end")) { return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(), ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg()); } } List> response = cityAqiService.rankingDetails(params); return ResultMessage.ok(response); } /** * @Description: 查询一个城市所有县级市的优良天气 * @Param: [regionCode] * @return: com.moral.constant.ResultMessage * @Author: 陈凯裕 * @Date: 2021/12/30 */ @GetMapping("queryAreaPollutionLevel") public ResultMessage queryAreaPollutionLevel(AreaPollutionLevelForm form) { //判断是否缺少参数 if (!form.valid()) return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(), ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg()); //查询业务数据 List datas = cityAqiDailyService.queryAreaPollutionLevel(form); //返回数据 return ResultMessage.ok(datas); } /** * @Description: 查询26+2城市优良天气数据 * @Param: [form] * @return: com.moral.constant.ResultMessage * @Author: 陈凯裕 * @Date: 2021/12/31 */ @GetMapping("qeury28CitiesPollutionLevel") public ResultMessage query28CitiesPollutionLevel(SpecialCitiesPollutionLevelForm form) { //判断是否缺少参数 if (!form.valid()) return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(), ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg()); //查询业务数据 List datas = cityAqiDailyService.querySpecialCitiesPollutionLevel(form); //返回数据 return ResultMessage.ok(datas); } /** * @Description: 查询一个省内所有城市的优良天数 * @Param: [form] * @return: com.moral.constant.ResultMessage * @Author: 陈凯裕 * @Date: 2022/1/7 */ @GetMapping("queryProvinceCitiesPollutionLevel") public ResultMessage queryProvinceCitiesPollutionLevel(ProvinceCitiesPollutionLevelForm form) { //判断是否缺少参数 if (!form.valid()) return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(), ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg()); //查询业务数据 List datas = cityAqiDailyService.queryProvinceCitiesPollutionLevel(form); //返回数据 return ResultMessage.ok(datas); } /** * @Description: 查询城市空气质量同期对比数据 * @Param: [form] * @return: com.moral.constant.ResultMessage * @Author: 陈凯裕 * @Date: 2022/1/12 */ @GetMapping("queryAirQualityComparison") public ResultMessage queryAirQualityComparison(AirQualityComparisonForm form){ //判断是否缺少参数 if (!form.valid()) return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(), ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg()); //查询业务 List datas = cityAqiService.queryAirQualityComparison(form); //返回数据 return ResultMessage.ok(datas); } /** * @Description: 优良天变化率分析 * @Param: [year, cityCode] * @return: com.moral.constant.ResultMessage * @Author: 陈凯裕 * @Date: 2022/2/10 */ @GetMapping("queryPollutionLevelAnalysis") public ResultMessage queryPollutionLevelAnalysis( String year, Integer cityCode){ if(year==null||cityCode==null) return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(), ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg()); Map result = cityAqiYearlyService.analysisPollutionLevel(year, cityCode); return ResultMessage.ok(result); } @GetMapping("queryComplianceDaysAnalysis") public ResultMessage queryComplianceDaysAnalysis( String year, Integer cityCode){ if(year==null||cityCode==null) return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(), ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg()); List dtos = cityAqiYearlyService.analysisComplianceDays(year, cityCode); return ResultMessage.ok(ComplianceDaysVO.convert(dtos)); } @GetMapping("momDate") public ResultMessage momDate(Integer regionCode, Integer size, Integer current, Integer orgId){ if(regionCode==null || size==null || current==null){ return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(), ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg()); } Map result = cityAqiService.momData(regionCode, size, current, orgId); return ResultMessage.ok(result); } /** * @Description: 查询市内所有县的排名 附件7 * @Param: [regionCode, time] * @return: com.moral.constant.ResultMessage * @Author: 陈凯裕 * @Date: 2022/3/16 */ @GetMapping("cityAreaRange") public ResultMessage cityAreaRange(Integer regionCode,@DateTimeFormat(pattern = "yyyy-MM-dd") Date time){ if(regionCode==null || time==null){ return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(), ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg()); } List vos = cityAqiDailyService.cityAreaRange(regionCode,time); return ResultMessage.ok(vos); } /** *@Description: 县市区数据 *@Param: [regionCode] *@return: com.moral.constant.ResultMessage *@Author: lizijie *@Date: 2022/3/16 16:54 **/ @GetMapping("countyData") public ResultMessage countyData(Integer regionCode){ if(regionCode==null){ return ResultMessage.fail(ResponseCodeEnum.PARAMETERS_IS_MISSING.getCode(), ResponseCodeEnum.PARAMETERS_IS_MISSING.getMsg()); } Map resultMap = cityAqiService.countyData(regionCode); return ResultMessage.ok(resultMap); } }