package com.moral.api.service.impl;
|
|
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSONObject;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
|
import com.moral.api.entity.CityWeather;
|
import com.moral.api.mapper.CityWeatherMapper;
|
import com.moral.api.service.CityWeatherService;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.moral.constant.RedisConstants;
|
import com.moral.util.WeatherUtils;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.data.redis.core.RedisTemplate;
|
import org.springframework.stereotype.Service;
|
|
import java.util.HashMap;
|
import java.util.Map;
|
|
/**
|
* <p>
|
* 城市实测小时气象数据表 服务实现类
|
* </p>
|
*
|
* @author moral
|
* @since 2021-10-28
|
*/
|
@Service
|
public class CityWeatherServiceImpl extends ServiceImpl<CityWeatherMapper, CityWeather> implements CityWeatherService {
|
|
@Autowired
|
RedisTemplate redisTemplate;
|
@Autowired
|
CityWeatherMapper cityWeatherMapper;
|
@Override
|
public Map<String, Object> queryWeatherByRegionCode(Integer regionCode) {
|
Map<String,Object> value = (Map<String, Object>) redisTemplate.opsForHash().get(RedisConstants.CITY_WEATHER,String.valueOf(regionCode));
|
if(value==null)
|
value = queryCityWeatherByRegionCodeFromDB(regionCode);
|
return value;
|
}
|
|
@Override
|
public Map<String, Object> dressingIndex(Map map) {
|
Map<String,Object> resultMap = new HashMap<>();
|
int city_code = Integer.parseInt(map.get("regionCode").toString());
|
String time = map.get("time").toString();
|
QueryWrapper<CityWeather> cityWeatherQueryWrapper = new QueryWrapper<>();
|
cityWeatherQueryWrapper.eq("city_code",city_code);
|
cityWeatherQueryWrapper.eq("time",time);
|
CityWeather cityWeather = cityWeatherMapper.selectOne(cityWeatherQueryWrapper);
|
if (ObjectUtils.isEmpty(cityWeather)){
|
return resultMap;
|
}
|
JSONObject jsonObject = JSONObject.parseObject(cityWeather.getValue());
|
Map<String,Object> weatherMap = new HashMap<>();
|
weatherMap.put("temp",jsonObject.get("temp"));
|
weatherMap.put("humidity",jsonObject.get("humidity"));
|
weatherMap.put("windScale",jsonObject.get("windScale"));
|
resultMap = WeatherUtils.dressingIndex(weatherMap);
|
return resultMap;
|
}
|
|
/**
|
* @Description: 从数据库查询天气数据
|
* @Param: [regionCode]
|
* @return: java.util.Map<java.lang.String,java.lang.Object>
|
* @Author: 陈凯裕
|
* @Date: 2021/10/29
|
*/
|
private Map<String, Object> queryCityWeatherByRegionCodeFromDB(Integer regionCode) {
|
QueryWrapper<CityWeather> wrapper = new QueryWrapper();
|
wrapper.eq("city_code",regionCode);
|
wrapper.orderByDesc("time");
|
wrapper.last(true,"limit 1");
|
CityWeather weather = cityWeatherMapper.selectOne(wrapper);
|
if(weather==null)
|
return null;
|
String value = weather.getValue();
|
redisTemplate.opsForHash().put(RedisConstants.CITY_WEATHER,regionCode,value);
|
return JSON.parseObject(value,Map.class);
|
}
|
}
|