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.text.SimpleDateFormat; 
 | 
import java.util.Calendar; 
 | 
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 = ""; 
 | 
        Calendar calendar = Calendar.getInstance(); 
 | 
        calendar.set(Calendar.HOUR_OF_DAY, calendar.get(Calendar.HOUR_OF_DAY) - 2); 
 | 
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH"); 
 | 
        time = sdf.format(calendar.getTime())+":00:00"; 
 | 
        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); 
 | 
    } 
 | 
} 
 |