Browse Source

# 根据站点编号、时间段查询降雨量接口开发

(cherry picked from commit 5618b6c177)
zhongwei
haungxing 10 months ago
parent
commit
2186702b8f
  1. 21
      hzims-service-api/weather-api/src/main/java/com/hnac/hzims/hzimsweather/feign/IRainfallClient.java
  2. 63
      hzims-service/weather/src/main/java/com/hnac/hzims/weather/feign/RainfallClient.java

21
hzims-service-api/weather-api/src/main/java/com/hnac/hzims/hzimsweather/feign/IRainfallClient.java

@ -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);
}

63
hzims-service/weather/src/main/java/com/hnac/hzims/weather/feign/RainfallClient.java

@ -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…
Cancel
Save