From 0ee72c12068ca507b10e4004d381808e660f2794 Mon Sep 17 00:00:00 2001 From: xjs <1294405880@qq.com> Date: Tue, 18 Jan 2022 15:22:17 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E5=AE=9E=E7=8E=B0roll=E5=AE=9E?= =?UTF-8?q?=E6=97=B6=E5=A4=A9=E6=B0=94=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/xjs/consts/ApiConst.java | 10 +++++ .../controller/ApiToolsController.java | 16 +++++-- .../xjs/apitools/domain/ApiNowWeather.java | 25 +++++++++++ .../com/xjs/apitools/domain/RequestBody.java | 5 +++ .../factory/impl/RollNowWeatherFactory.java | 42 +++++++++++++++++++ .../xjs/apitools/service/ApiToolsService.java | 9 ++++ .../service/impl/ApiToolsServiceImpl.java | 17 ++++++++ .../api/roll/RollWeatherFeignClient.java | 36 ++++++++++++++++ .../client/factory/RollIPFeignFactory.java | 1 + .../factory/RollWeatherFeignFactory.java | 41 ++++++++++++++++++ .../weather/controller/WeatherController.java | 2 - 11 files changed, 198 insertions(+), 6 deletions(-) create mode 100644 xjs-business/xjs-business-openapi/src/main/java/com/xjs/apitools/domain/ApiNowWeather.java create mode 100644 xjs-business/xjs-business-openapi/src/main/java/com/xjs/apitools/factory/impl/RollNowWeatherFactory.java create mode 100644 xjs-business/xjs-business-openapi/src/main/java/com/xjs/common/client/api/roll/RollWeatherFeignClient.java create mode 100644 xjs-business/xjs-business-openapi/src/main/java/com/xjs/common/client/factory/RollWeatherFeignFactory.java diff --git a/xjs-business/xjs-business-common/src/main/java/com/xjs/consts/ApiConst.java b/xjs-business/xjs-business-common/src/main/java/com/xjs/consts/ApiConst.java index ea6f1f39..db743be5 100644 --- a/xjs-business/xjs-business-common/src/main/java/com/xjs/consts/ApiConst.java +++ b/xjs-business/xjs-business-common/src/main/java/com/xjs/consts/ApiConst.java @@ -52,6 +52,8 @@ public class ApiConst { public static final String ROLL_MOBILE_BELONG = "ROLL-手机归属地"; + public static final String ROLL_WEATHER = "ROLL-天气预报"; + //-------------------url------------------------------ @@ -106,6 +108,14 @@ public class ApiConst { */ public static final String ROLL_MOBILE_BELONG_URL = "https://www.mxnzp.com/api/mobile_location/aim_mobile"; + /** + * 接口文档:https://www.mxnzp.com/doc/detail?id=7 + */ + public static final String ROLL_WEATHER_URL = "https://www.mxnzp.com/api/weather"; + + + + //-----------------------api请求参数常量----------------------------- /** diff --git a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/apitools/controller/ApiToolsController.java b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/apitools/controller/ApiToolsController.java index 1629637f..359c6a7f 100644 --- a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/apitools/controller/ApiToolsController.java +++ b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/apitools/controller/ApiToolsController.java @@ -5,15 +5,13 @@ import com.ruoyi.common.log.annotation.Log; import com.ruoyi.common.security.annotation.RequiresPermissions; import com.xjs.apitools.domain.ApiHoliday; import com.xjs.apitools.domain.ApiMobileBelong; +import com.xjs.apitools.domain.ApiNowWeather; import com.xjs.apitools.service.ApiToolsService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import java.util.List; import java.util.regex.Pattern; @@ -58,5 +56,15 @@ public class ApiToolsController { return R.ok(apiToolsService.getApiMobileBelong(mobile)); } + @GetMapping("nowweather/{city}") + @ApiOperation("获取实时天气信息") + @Log(title = "获取实时天气") + public R getNowWeatherApiData(@PathVariable("city") String city) { + return R.ok(apiToolsService.getNowWeather(city)); + } + + + + } diff --git a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/apitools/domain/ApiNowWeather.java b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/apitools/domain/ApiNowWeather.java new file mode 100644 index 00000000..58223949 --- /dev/null +++ b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/apitools/domain/ApiNowWeather.java @@ -0,0 +1,25 @@ +package com.xjs.apitools.domain; + +import com.xjs.weather.domain.NowWeather; +import lombok.Data; + +/** + * api天气实体 + * + * @author xiejs + * @since 2022-01-18 + */ +@Data +public class ApiNowWeather extends NowWeather { + + /** + * 城市具体信息,比如 “广东省 深圳市” + */ + private String address; + + /** + * 温度 + */ + private String temp; + +} diff --git a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/apitools/domain/RequestBody.java b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/apitools/domain/RequestBody.java index 53e88fda..a42a2e3e 100644 --- a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/apitools/domain/RequestBody.java +++ b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/apitools/domain/RequestBody.java @@ -25,4 +25,9 @@ public class RequestBody { * 目标手机 */ private String mobile; + + /** + * 目标城市 + */ + private String city; } diff --git a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/apitools/factory/impl/RollNowWeatherFactory.java b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/apitools/factory/impl/RollNowWeatherFactory.java new file mode 100644 index 00000000..3bdd3648 --- /dev/null +++ b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/apitools/factory/impl/RollNowWeatherFactory.java @@ -0,0 +1,42 @@ +package com.xjs.apitools.factory.impl; + +import com.alibaba.fastjson.JSONObject; +import com.xjs.apitools.domain.ApiNowWeather; +import com.xjs.apitools.domain.RequestBody; +import com.xjs.apitools.factory.ApiToolsFactory; +import com.xjs.common.client.api.roll.RollWeatherFeignClient; +import com.xjs.config.RollProperties; +import lombok.extern.log4j.Log4j2; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import static com.xjs.consts.ApiConst.DEMOTE_ERROR; +import static com.xjs.consts.ApiConst.ROLL_CODE_SUCCESS; + +/** + * roll天气预报api工厂实现 + * @author xiejs + * @since 2022-01-18 + */ +@Component +@Log4j2 +public class RollNowWeatherFactory implements ApiToolsFactory { + + @Autowired + private RollProperties rollProperties; + @Autowired + private RollWeatherFeignClient rollWeatherFeignClient; + + + @Override + public ApiNowWeather apiData(RequestBody requestBody) { + requestBody.setApp_id(rollProperties.getApp_id()); + requestBody.setApp_secret(rollProperties.getApp_secret()); + JSONObject jsonObject = rollWeatherFeignClient.nowWeatherApi(requestBody, requestBody.getCity()); + if (!jsonObject.containsKey(DEMOTE_ERROR) && jsonObject.getInteger("code") == ROLL_CODE_SUCCESS.intValue()) { + JSONObject jsonData = jsonObject.getJSONObject("data"); + return jsonData.toJavaObject(ApiNowWeather.class); + } + return null; + } +} diff --git a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/apitools/service/ApiToolsService.java b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/apitools/service/ApiToolsService.java index ca115b24..4cbe2155 100644 --- a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/apitools/service/ApiToolsService.java +++ b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/apitools/service/ApiToolsService.java @@ -2,6 +2,7 @@ package com.xjs.apitools.service; import com.xjs.apitools.domain.ApiHoliday; import com.xjs.apitools.domain.ApiMobileBelong; +import com.xjs.apitools.domain.ApiNowWeather; import java.util.List; @@ -26,4 +27,12 @@ public interface ApiToolsService { */ ApiMobileBelong getApiMobileBelong(String mobile); + + /** + * 获取实时天气 + * @param city 目标城市 + * @return ApiWeather + */ + ApiNowWeather getNowWeather(String city); + } diff --git a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/apitools/service/impl/ApiToolsServiceImpl.java b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/apitools/service/impl/ApiToolsServiceImpl.java index 9082cb34..0ff1b078 100644 --- a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/apitools/service/impl/ApiToolsServiceImpl.java +++ b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/apitools/service/impl/ApiToolsServiceImpl.java @@ -2,10 +2,12 @@ package com.xjs.apitools.service.impl; import com.xjs.apitools.domain.ApiHoliday; import com.xjs.apitools.domain.ApiMobileBelong; +import com.xjs.apitools.domain.ApiNowWeather; import com.xjs.apitools.domain.RequestBody; import com.xjs.apitools.factory.ApiToolsFactory; import com.xjs.apitools.factory.impl.RollHolidayFactory; import com.xjs.apitools.factory.impl.RollMobileBelongFactory; +import com.xjs.apitools.factory.impl.RollNowWeatherFactory; import com.xjs.apitools.service.ApiToolsService; import com.xjs.exception.ApiException; import org.springframework.beans.factory.annotation.Autowired; @@ -27,6 +29,7 @@ public class ApiToolsServiceImpl implements ApiToolsService { private ApiToolsFactory holidayFactory; private ApiToolsFactory mobileBelongFactory; + private ApiToolsFactory nowWeatherFactory; @Autowired public void setHolidayFactory(RollHolidayFactory rollHolidayFactory) { @@ -38,6 +41,12 @@ public class ApiToolsServiceImpl implements ApiToolsService { this.mobileBelongFactory = rollMobileBelongFactory; } + @Autowired + public void setNowWeatherFactory(RollNowWeatherFactory rollNowWeatherFactory) { + this.nowWeatherFactory = rollNowWeatherFactory; + } + + @Override public List getApiHolidayList() { List apiHolidayList = holidayFactory.apiDataList(); @@ -60,4 +69,12 @@ public class ApiToolsServiceImpl implements ApiToolsService { return Optional.ofNullable(mobileBelongFactory.apiData(requestBody)) .orElseThrow(ApiException::new); } + + @Override + public ApiNowWeather getNowWeather(String city) { + RequestBody requestBody = new RequestBody(); + requestBody.setCity(city); + return Optional.ofNullable(nowWeatherFactory.apiData(requestBody)) + .orElseThrow(ApiException::new); + } } diff --git a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/common/client/api/roll/RollWeatherFeignClient.java b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/common/client/api/roll/RollWeatherFeignClient.java new file mode 100644 index 00000000..a9ed584a --- /dev/null +++ b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/common/client/api/roll/RollWeatherFeignClient.java @@ -0,0 +1,36 @@ +package com.xjs.common.client.api.roll; + +import com.alibaba.fastjson.JSONObject; +import com.xjs.annotation.ApiLog; +import com.xjs.apitools.domain.RequestBody; +import com.xjs.common.client.factory.RollWeatherFeignFactory; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.cloud.openfeign.SpringQueryMap; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; + +import static com.xjs.consts.ApiConst.ROLL_WEATHER; +import static com.xjs.consts.ApiConst.ROLL_WEATHER_URL; + +/** + * roll 天气预报api调用feign + * @author xiejs + * @since 2022-01-18 + */ +@FeignClient(name = "rollWeather", url = ROLL_WEATHER_URL, fallbackFactory = RollWeatherFeignFactory.class) +public interface RollWeatherFeignClient { + + @GetMapping("/current/{city}") + @ApiLog(name = ROLL_WEATHER, + url = ROLL_WEATHER_URL+"/current", + method = "Get") + JSONObject nowWeatherApi(@SpringQueryMap RequestBody requestBody, @PathVariable("city")String city); + + + @GetMapping("/forecast/{city}") + @ApiLog(name = ROLL_WEATHER, + url = ROLL_WEATHER_URL+"/forecast", + method = "Get") + JSONObject forecastWeatherApi(@SpringQueryMap RequestBody requestBody,@PathVariable("city")String city); + +} diff --git a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/common/client/factory/RollIPFeignFactory.java b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/common/client/factory/RollIPFeignFactory.java index c2dc8034..a624a74c 100644 --- a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/common/client/factory/RollIPFeignFactory.java +++ b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/common/client/factory/RollIPFeignFactory.java @@ -10,6 +10,7 @@ import org.springframework.stereotype.Component; import static com.xjs.consts.ApiConst.DEMOTE_ERROR; /** + * roll ip信息api降级处理 * @author xiejs * @since 2022-01-15 */ diff --git a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/common/client/factory/RollWeatherFeignFactory.java b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/common/client/factory/RollWeatherFeignFactory.java new file mode 100644 index 00000000..3bcd3ded --- /dev/null +++ b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/common/client/factory/RollWeatherFeignFactory.java @@ -0,0 +1,41 @@ +package com.xjs.common.client.factory; + +import com.alibaba.fastjson.JSONObject; +import com.ruoyi.common.core.domain.R; +import com.xjs.apitools.domain.RequestBody; +import com.xjs.common.client.api.roll.RollWeatherFeignClient; +import lombok.extern.log4j.Log4j2; +import org.springframework.cloud.openfeign.FallbackFactory; +import org.springframework.stereotype.Component; + +import static com.xjs.consts.ApiConst.DEMOTE_ERROR; + +/** + * roll 天气服务api降级处理 + * @author xiejs + * @since 2022-01-18 + */ +@Component +@Log4j2 +public class RollWeatherFeignFactory implements FallbackFactory { + @Override + public RollWeatherFeignClient create(Throwable cause) { + return new RollWeatherFeignClient() { + @Override + public JSONObject nowWeatherApi(RequestBody requestBody,String city) { + log.error("api模块roll 实时天气服务调用失败:{},执行降级处理", cause.getMessage()); + JSONObject jsonObject = new JSONObject(); + jsonObject.put(DEMOTE_ERROR, R.FAIL); + return jsonObject; + } + + @Override + public JSONObject forecastWeatherApi(RequestBody requestBody, String city) { + log.error("api模块roll 预报天气服务调用失败:{},执行降级处理", cause.getMessage()); + JSONObject jsonObject = new JSONObject(); + jsonObject.put(DEMOTE_ERROR, R.FAIL); + return jsonObject; + } + }; + } +} diff --git a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/weather/controller/WeatherController.java b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/weather/controller/WeatherController.java index 75713c11..97767606 100644 --- a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/weather/controller/WeatherController.java +++ b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/weather/controller/WeatherController.java @@ -62,8 +62,6 @@ public class WeatherController { /** * week类型转换 - * - * @return ForecastWeather */ private void weekConvert(ForecastWeather forecastWeather) { forecastWeather.getCasts().forEach(cast -> {