From eaadd850bf0b3a6b3d598fb63c4e87b14fba2663 Mon Sep 17 00:00:00 2001 From: cjl <276999030@qq.com> Date: Fri, 11 Aug 2023 16:51:22 +0800 Subject: [PATCH] improvement:臭氧预测修改 --- screen-api/src/main/java/com/moral/api/mapper/CityConfigAqiMapper.java | 16 ++ screen-common/src/main/java/com/moral/util/DateUtils.java | 8 + screen-api/src/main/java/com/moral/api/exception/consumer/SecondDataConsumer.java | 6 screen-api/src/main/java/com/moral/api/controller/AqiController.java | 32 ++++- screen-api/src/main/java/com/moral/api/service/impl/CityAqiServiceImpl.java | 65 ++++++++++ screen-api/src/main/java/com/moral/api/service/CityConfigAqiService.java | 19 +++ screen-api/src/main/resources/mapper/CityConfigAqiMapper.xml | 14 ++ screen-api/src/main/java/com/moral/api/exception/consumer/CruiserDataConsumer.java | 6 screen-api/src/main/java/com/moral/api/controller/pubController.java | 40 ++++++ screen-api/src/main/java/com/moral/api/service/impl/CityConfigAqiServiceImpl.java | 33 +++++ screen-api/src/main/java/com/moral/api/service/CityAqiService.java | 2 myBatisPlusGenerator/src/main/java/com/moral/CodeGenerator.java | 4 screen-api/src/main/java/com/moral/api/entity/CityConfigAqi.java | 56 +++++++++ 13 files changed, 289 insertions(+), 12 deletions(-) diff --git a/myBatisPlusGenerator/src/main/java/com/moral/CodeGenerator.java b/myBatisPlusGenerator/src/main/java/com/moral/CodeGenerator.java index 10e56d0..a64c9bf 100644 --- a/myBatisPlusGenerator/src/main/java/com/moral/CodeGenerator.java +++ b/myBatisPlusGenerator/src/main/java/com/moral/CodeGenerator.java @@ -43,7 +43,7 @@ // ������������ GlobalConfig gc = new GlobalConfig(); //String projectPath = System.getProperty("user.dir"); - String projectPath="C:\\Users\\cdl\\Desktop\\comProject\\newProject\\moral\\screen-api"; + String projectPath="D:\\gitproject\\newmoral\\screen-api"; gc.setOutputDir(projectPath + "/src/main/java"); gc.setAuthor("moral"); gc.setOpen(false); @@ -67,7 +67,7 @@ // ��������������� DataSourceConfig dsc = new DataSourceConfig(); - dsc.setUrl("jdbc:mysql://rm-bp1pr3rx9m3fnkwsk8o.mysql.rds.aliyuncs.com:3306/moral?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC"); + dsc.setUrl("jdbc:mysql://121.199.44.85:3306/moral?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC"); //dsc.setUrl("jdbc:mysql://rm-bp1pr3rx9m3fnkwsk8o.mysql.rds.aliyuncs.com:3306/moral?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai"); dsc.setDriverName("com.mysql.cj.jdbc.Driver"); dsc.setUsername("root"); diff --git a/screen-api/src/main/java/com/moral/api/controller/AqiController.java b/screen-api/src/main/java/com/moral/api/controller/AqiController.java index 2cc538b..c5180e8 100644 --- a/screen-api/src/main/java/com/moral/api/controller/AqiController.java +++ b/screen-api/src/main/java/com/moral/api/controller/AqiController.java @@ -8,18 +8,12 @@ import com.moral.api.service.CityAqiDailyService; import com.moral.api.service.CityAqiYearlyService; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiImplicitParam; -import io.swagger.annotations.ApiImplicitParams; -import io.swagger.annotations.ApiOperation; +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.CrossOrigin; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import java.util.*; @@ -60,6 +54,28 @@ 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<String, Object> params = new HashMap<>(); + params.put("regionCode",regionCode); + params.put("time",time); + List<Map<String, Object>> 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<String, Object> params = new HashMap<>(); + params.put("regionCode",regionCode); + params.put("time",time); + List<Map<String, Object>> response = cityAqiService.measuredCompareForecastOfO3_8H(params); + return ResultMessage.ok(response); + } + /** * @Description: ���������������6������aqi������ * @Param: [regionCode] diff --git a/screen-api/src/main/java/com/moral/api/controller/pubController.java b/screen-api/src/main/java/com/moral/api/controller/pubController.java new file mode 100644 index 0000000..82ea0ea --- /dev/null +++ b/screen-api/src/main/java/com/moral/api/controller/pubController.java @@ -0,0 +1,40 @@ +package com.moral.api.controller; + +import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; +import com.moral.api.entity.CityConfigAqi; +import com.moral.api.service.CityConfigAqiService; +import com.moral.constant.ResultMessage; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiParam; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.format.annotation.DateTimeFormat; +import org.springframework.web.bind.annotation.*; + +import java.util.Date; +import java.util.List; + +/** + * @ClassName pubController + * @Description TODO + * @Author @lizijie + * @Date 2023-08-11 14:35 + * @Version 1.0 + */ +@RestController +@RequestMapping("/pub") +@CrossOrigin(origins = "*", maxAge = 3600) +@Api(tags = {"������"}) +public class pubController { + @Autowired + private CityConfigAqiService cityConfigAqiService; + + @GetMapping("cityAll") + public ResultMessage airQualityBulletin(@RequestParam(required = false) @ApiParam(value = "regionCode",name = "������code") String regionCode, + @RequestParam(required = false) @ApiParam(value = "regionName",name = "������������") String regionName) { + + List<CityConfigAqi> list = cityConfigAqiService.listAll(regionCode,regionName); + return ResultMessage.ok(list); + } + +} diff --git a/screen-api/src/main/java/com/moral/api/entity/CityConfigAqi.java b/screen-api/src/main/java/com/moral/api/entity/CityConfigAqi.java new file mode 100644 index 0000000..d312396 --- /dev/null +++ b/screen-api/src/main/java/com/moral/api/entity/CityConfigAqi.java @@ -0,0 +1,56 @@ +package com.moral.api.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.extension.activerecord.Model; +import com.baomidou.mybatisplus.annotation.TableId; +import java.io.Serializable; +import lombok.Data; +import lombok.EqualsAndHashCode; + +/** + * <p> + * ������������������������������������������������������ + * </p> + * + * @author moral + * @since 2023-08-11 + */ +@Data +@EqualsAndHashCode(callSuper = false) +public class CityConfigAqi extends Model<CityConfigAqi> { + + private static final long serialVersionUID = 1L; + + /** + * ������id + */ + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + /** + * ������code + */ + private Integer cityCode; + + /** + * ������������ + */ + private String cityName; + + /** + * ��������������������� + */ + private Integer cityId; + + /** + * ������������,0���������������1��������� + */ + private String isDelete; + + + @Override + protected Serializable pkVal() { + return this.id; + } + +} diff --git a/screen-api/src/main/java/com/moral/api/exception/consumer/CruiserDataConsumer.java b/screen-api/src/main/java/com/moral/api/exception/consumer/CruiserDataConsumer.java index 5f392d9..c2be6d5 100644 --- a/screen-api/src/main/java/com/moral/api/exception/consumer/CruiserDataConsumer.java +++ b/screen-api/src/main/java/com/moral/api/exception/consumer/CruiserDataConsumer.java @@ -1,3 +1,4 @@ +/* package com.moral.api.exception.consumer; @@ -27,9 +28,11 @@ import com.moral.constant.KafkaConstants; +*/ /* * ������������������������ - * */ + * *//* + @Component @Slf4j @@ -118,3 +121,4 @@ } } +*/ diff --git a/screen-api/src/main/java/com/moral/api/exception/consumer/SecondDataConsumer.java b/screen-api/src/main/java/com/moral/api/exception/consumer/SecondDataConsumer.java index d266d21..536c6f0 100644 --- a/screen-api/src/main/java/com/moral/api/exception/consumer/SecondDataConsumer.java +++ b/screen-api/src/main/java/com/moral/api/exception/consumer/SecondDataConsumer.java @@ -1,3 +1,4 @@ +/* package com.moral.api.exception.consumer; @@ -24,13 +25,15 @@ import java.util.concurrent.CopyOnWriteArraySet; +*/ /** * @ClassName SecondsDataConsumer1 * @Description TODO * @Author ��������� * @Date 2021/6/15 14:49 * @Version TODO - **/ + **//* + @Component @Slf4j @@ -120,3 +123,4 @@ } +*/ diff --git a/screen-api/src/main/java/com/moral/api/mapper/CityConfigAqiMapper.java b/screen-api/src/main/java/com/moral/api/mapper/CityConfigAqiMapper.java new file mode 100644 index 0000000..ddd8c03 --- /dev/null +++ b/screen-api/src/main/java/com/moral/api/mapper/CityConfigAqiMapper.java @@ -0,0 +1,16 @@ +package com.moral.api.mapper; + +import com.moral.api.entity.CityConfigAqi; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; + +/** + * <p> + * ������������������������������������������������������ Mapper ������ + * </p> + * + * @author moral + * @since 2023-08-11 + */ +public interface CityConfigAqiMapper extends BaseMapper<CityConfigAqi> { + +} diff --git a/screen-api/src/main/java/com/moral/api/service/CityAqiService.java b/screen-api/src/main/java/com/moral/api/service/CityAqiService.java index 9b3d460..a79a893 100644 --- a/screen-api/src/main/java/com/moral/api/service/CityAqiService.java +++ b/screen-api/src/main/java/com/moral/api/service/CityAqiService.java @@ -22,6 +22,8 @@ //��������������������������� List<Map<String, Object>> measuredCompareForecastOfO3(Map<String, Object> params); + + List<Map<String, Object>> measuredCompareForecastOfO3_8H(Map<String, Object> params); /** * @Description: ���������������������aqi������6��� * @Param: [regionCode] diff --git a/screen-api/src/main/java/com/moral/api/service/CityConfigAqiService.java b/screen-api/src/main/java/com/moral/api/service/CityConfigAqiService.java new file mode 100644 index 0000000..1bdc933 --- /dev/null +++ b/screen-api/src/main/java/com/moral/api/service/CityConfigAqiService.java @@ -0,0 +1,19 @@ +package com.moral.api.service; + +import com.moral.api.entity.CityConfigAqi; +import com.baomidou.mybatisplus.extension.service.IService; + +import java.util.List; + +/** + * <p> + * ������������������������������������������������������ ��������� + * </p> + * + * @author moral + * @since 2023-08-11 + */ +public interface CityConfigAqiService extends IService<CityConfigAqi> { + + List<CityConfigAqi> listAll(String regionCode,String regionName); +} diff --git a/screen-api/src/main/java/com/moral/api/service/impl/CityAqiServiceImpl.java b/screen-api/src/main/java/com/moral/api/service/impl/CityAqiServiceImpl.java index 68f32c2..10d5f6d 100644 --- a/screen-api/src/main/java/com/moral/api/service/impl/CityAqiServiceImpl.java +++ b/screen-api/src/main/java/com/moral/api/service/impl/CityAqiServiceImpl.java @@ -1,5 +1,6 @@ package com.moral.api.service.impl; +import com.alibaba.excel.util.StringUtils; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; @@ -146,6 +147,34 @@ } return result; } + + + @Override + public List<Map<String, Object>> measuredCompareForecastOfO3_8H(Map<String, Object> params) { + String regionCode = params.get("regionCode").toString(); + String time = params.get("time").toString(); + Date endTime = DateUtils.getDate(time+" "+"23:00:00",DateUtils.yyyy_MM_dd_HH_mm_ss_EN); + Date startDate = DateUtils.getDate(time+" "+"00:00:00",DateUtils.yyyy_MM_dd_HH_mm_ss_EN); + Date startTime = DateUtils.addHours(startDate,-7); + //������������ + QueryWrapper<Forecast> forecastQueryWrapper = new QueryWrapper<>(); + forecastQueryWrapper.select("time", "value") + .eq("city_code", regionCode) + .between("time",startTime,endTime) + .orderByAsc("time"); + List<Map<String, Object>> forecastData = forecastMapper.selectMaps(forecastQueryWrapper); + //������������ + QueryWrapper<CityAqi> cityAqiQueryWrapper = new QueryWrapper<>(); + cityAqiQueryWrapper.select("time", "value") + .eq("city_code", regionCode) + .between("time",startTime,endTime).orderByAsc("time"); + List<Map<String, Object>> measuredData = cityAqiMapper.selectMaps(cityAqiQueryWrapper); + + List<Map<String, Object>> result = getO3_8H(forecastData,0,time); + result.addAll(getO3_8H(measuredData,1,time)); + return result; + } + @Override public Map<String, Object> queryCityAqiByRegionCode(Integer regionCode) { @@ -1386,4 +1415,40 @@ } return s; } + + public List<Map<String, Object>> getO3_8H(List<Map<String, Object>> data , int type,String day) { + List<Map<String, Object>> list = new ArrayList<>(); + for(int i = 0 ;i<=23;i++){ + Map<String, Object> map = new HashMap<>(); + if(type == 0){ + map.put("type","������"); + }else { + map.put("type","������"); + } + String times = day+" "+i; + Date endDate = DateUtils.getDate(times,DateUtils.yyyy_MM_dd_HH_EN); + Date startDate = DateUtils.addHours(DateUtils.getDate(day+" "+i,DateUtils.yyyy_MM_dd_HH_EN),-7); + List<Double> value = new ArrayList<>(); + for(Map<String, Object> m : data){ + Date time = (Date) m.get("time"); + if(DateUtils.isTimeBeforE(time,startDate) && DateUtils.isTimeBeforE(endDate,time)){ + Map<String, Object> sensorValue = JSONObject.parseObject((String) m.get("value"), Map.class); + Double o3 = Double.parseDouble(sensorValue.get("O3").toString()); + value.add(o3); + + } + } + if (value.size() < 6) { + continue; + } + double average = value.stream().mapToDouble(aDouble -> aDouble).summaryStatistics().getAverage(); + map.put("O3", new BigDecimal(average).setScale(3, BigDecimal.ROUND_HALF_UP).doubleValue()); + map.put("time",times); + list.add(map); + } + + return list; + + } + } diff --git a/screen-api/src/main/java/com/moral/api/service/impl/CityConfigAqiServiceImpl.java b/screen-api/src/main/java/com/moral/api/service/impl/CityConfigAqiServiceImpl.java new file mode 100644 index 0000000..2eea048 --- /dev/null +++ b/screen-api/src/main/java/com/moral/api/service/impl/CityConfigAqiServiceImpl.java @@ -0,0 +1,33 @@ +package com.moral.api.service.impl; + +import com.baomidou.mybatisplus.extension.conditions.query.LambdaQueryChainWrapper; +import com.moral.api.entity.CityConfigAqi; +import com.moral.api.mapper.CityConfigAqiMapper; +import com.moral.api.service.CityConfigAqiService; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * <p> + * ������������������������������������������������������ ��������������� + * </p> + * + * @author moral + * @since 2023-08-11 + */ +@Service +public class CityConfigAqiServiceImpl extends ServiceImpl<CityConfigAqiMapper, CityConfigAqi> implements CityConfigAqiService { + + @Override + public List<CityConfigAqi> listAll(String regionCode, String regionName) { + LambdaQueryChainWrapper<CityConfigAqi> wrapper = lambdaQuery(); + wrapper.eq(StringUtils.isNotEmpty(regionCode),CityConfigAqi::getCityCode,regionCode); + wrapper.like(StringUtils.isNotEmpty(regionName),CityConfigAqi::getCityName,regionName); + wrapper.eq(CityConfigAqi::getIsDelete,0); + wrapper.orderByAsc(CityConfigAqi::getCityCode,CityConfigAqi::getCityId); + return wrapper.list(); + } +} diff --git a/screen-api/src/main/resources/mapper/CityConfigAqiMapper.xml b/screen-api/src/main/resources/mapper/CityConfigAqiMapper.xml new file mode 100644 index 0000000..6fa2eab --- /dev/null +++ b/screen-api/src/main/resources/mapper/CityConfigAqiMapper.xml @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> +<mapper namespace="com.moral.api.mapper.CityConfigAqiMapper"> + + <!-- ������������������������ --> + <resultMap id="BaseResultMap" type="com.moral.api.entity.CityConfigAqi"> + <id column="id" property="id" /> + <result column="city_code" property="cityCode" /> + <result column="city_name" property="cityName" /> + <result column="city_id" property="cityId" /> + <result column="is_delete" property="isDelete" /> + </resultMap> + +</mapper> \ No newline at end of file diff --git a/screen-common/src/main/java/com/moral/util/DateUtils.java b/screen-common/src/main/java/com/moral/util/DateUtils.java index b86ee1c..e725576 100644 --- a/screen-common/src/main/java/com/moral/util/DateUtils.java +++ b/screen-common/src/main/java/com/moral/util/DateUtils.java @@ -507,6 +507,14 @@ } } + public static boolean isTimeBeforE(Date nows, Date date) { + long hous = nows.getTime() - date.getTime(); + if (hous >= 0) { + return true; + } else { + return false; + } + } /** * ������������������������������������������������������ * -- Gitblit v1.8.0