package com.moral.api.service.impl;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
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 org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import java.util.Map;
/**
*
* 城市实测小时气象数据表 服务实现类
*
*
* @author moral
* @since 2021-10-28
*/
@Service
public class CityWeatherServiceImpl extends ServiceImpl implements CityWeatherService {
@Autowired
RedisTemplate redisTemplate;
@Autowired
CityWeatherMapper cityWeatherMapper;
@Override
public Map queryWeatherByRegionCode(Integer regionCode) {
Map value = (Map) redisTemplate.opsForHash().get(RedisConstants.CITY_WEATHER,String.valueOf(regionCode));
if(value==null)
value = queryCityWeatherByRegionCodeFromDB(regionCode);
return value;
}
/**
* @Description: 从数据库查询天气数据
* @Param: [regionCode]
* @return: java.util.Map
* @Author: 陈凯裕
* @Date: 2021/10/29
*/
private Map queryCityWeatherByRegionCodeFromDB(Integer regionCode) {
QueryWrapper 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);
}
}