yang_shj
10 months ago
2 changed files with 84 additions and 0 deletions
@ -0,0 +1,21 @@
|
||||
package com.hnac.hzims.hzimsweather.feign; |
||||
|
||||
import com.hnac.hzims.hzimsweather.constants.WeatherConstant; |
||||
import org.springblade.core.tool.api.R; |
||||
import org.springframework.cloud.openfeign.FeignClient; |
||||
import org.springframework.web.bind.annotation.GetMapping; |
||||
import org.springframework.web.bind.annotation.RequestParam; |
||||
|
||||
import java.util.List; |
||||
import java.util.Map; |
||||
|
||||
@FeignClient(WeatherConstant.APP_NAME) |
||||
public interface IRainfallClient { |
||||
|
||||
String API_PREFIX = "/weather/rainfall"; |
||||
String GET_DURATION_RAIN_FALL = API_PREFIX + "/getDurationRainFall"; |
||||
|
||||
@GetMapping(GET_DURATION_RAIN_FALL) |
||||
R<List<Map<String, Object>>> getDurationRainFall(@RequestParam String stationCode, @RequestParam String startDate, @RequestParam String endDate); |
||||
|
||||
} |
@ -0,0 +1,63 @@
|
||||
package com.hnac.hzims.weather.feign; |
||||
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
||||
import com.baomidou.mybatisplus.core.toolkit.Wrappers; |
||||
import com.google.common.collect.Lists; |
||||
import com.hnac.hzims.hzimsweather.entity.DailyHeWeatherEntity; |
||||
import com.hnac.hzims.hzimsweather.feign.IRainfallClient; |
||||
import com.hnac.hzims.weather.service.IDailyHeWeatherService; |
||||
import lombok.AllArgsConstructor; |
||||
import org.springblade.core.boot.ctrl.BladeController; |
||||
import org.springblade.core.log.exception.ServiceException; |
||||
import org.springblade.core.tool.api.R; |
||||
import org.springblade.core.tool.utils.DateUtil; |
||||
import org.springframework.util.Assert; |
||||
import org.springframework.web.bind.annotation.GetMapping; |
||||
import org.springframework.web.bind.annotation.RequestParam; |
||||
import org.springframework.web.bind.annotation.RestController; |
||||
|
||||
import java.time.Duration; |
||||
import java.time.LocalDate; |
||||
import java.util.*; |
||||
import java.util.stream.Collectors; |
||||
|
||||
@RestController |
||||
@AllArgsConstructor |
||||
public class RainfallClient extends BladeController implements IRainfallClient { |
||||
|
||||
private final IDailyHeWeatherService dailyHeWeatherService; |
||||
|
||||
@Override |
||||
@GetMapping(GET_DURATION_RAIN_FALL) |
||||
public R<List<Map<String, Object>>> getDurationRainFall(@RequestParam String stationCode, @RequestParam String startDate, @RequestParam String endDate) { |
||||
LocalDate start = LocalDate.parse(startDate, DateUtil.DATE_FORMATTER); |
||||
LocalDate end = LocalDate.parse(endDate, DateUtil.DATE_FORMATTER); |
||||
Assert.isTrue(start.isBefore(end) || start.isEqual(end),()-> { |
||||
throw new ServiceException("降雨量查询传参错误,开始时间必须小于等于结束时间"); |
||||
}); |
||||
LambdaQueryWrapper<DailyHeWeatherEntity> queryWrapper = Wrappers.<DailyHeWeatherEntity>lambdaQuery().select(DailyHeWeatherEntity::getFxDate, DailyHeWeatherEntity::getPrecip) |
||||
.eq(DailyHeWeatherEntity::getStationCode, stationCode) |
||||
.ge(DailyHeWeatherEntity::getFxDate, startDate) |
||||
.le(DailyHeWeatherEntity::getFxDate, endDate); |
||||
List<Map<String, Object>> precipList = dailyHeWeatherService.listMaps(queryWrapper); |
||||
List<LocalDate> days = Lists.newArrayList(); |
||||
while(start.isBefore(end) || start.isEqual(end)) { |
||||
days.add(start); |
||||
start = start.plusDays(1); |
||||
} |
||||
List<Map<String, Object>> result = days.stream().map(date -> { |
||||
String dateStr = DateUtil.format(date, DateUtil.PATTERN_DATE); |
||||
Optional<Map<String, Object>> exit = precipList.stream().filter(m -> DateUtil.format((Date) m.get("fx_date"),DateUtil.PATTERN_DATE).equals(dateStr)).findFirst(); |
||||
if (exit.isPresent()) { |
||||
return exit.get(); |
||||
} else { |
||||
return new HashMap<String, Object>() {{ |
||||
put("fx_date", dateStr); |
||||
put("precip", null); |
||||
}}; |
||||
} |
||||
}).collect(Collectors.toList()); |
||||
return R.data(result); |
||||
} |
||||
} |
Loading…
Reference in new issue