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 1c1c80a6..ea6f1f39 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 @@ -50,6 +50,8 @@ public class ApiConst { public static final String ROLL_HOLIDAYS = "ROLL-节假日"; + public static final String ROLL_MOBILE_BELONG = "ROLL-手机归属地"; + //-------------------url------------------------------ @@ -99,6 +101,10 @@ public class ApiConst { */ public static final String ROLL_HOLIDAYS_URL = "https://www.mxnzp.com/api/holiday/recent/list"; + /** + * 接口文档:https://www.mxnzp.com/doc/detail?id=13 + */ + public static final String ROLL_MOBILE_BELONG_URL = "https://www.mxnzp.com/api/mobile_location/aim_mobile"; //-----------------------api请求参数常量----------------------------- diff --git a/xjs-business/xjs-business-common/src/main/java/com/xjs/consts/RegexConst.java b/xjs-business/xjs-business-common/src/main/java/com/xjs/consts/RegexConst.java new file mode 100644 index 00000000..25f68776 --- /dev/null +++ b/xjs-business/xjs-business-common/src/main/java/com/xjs/consts/RegexConst.java @@ -0,0 +1,14 @@ +package com.xjs.consts; + +/** + * 正则表达式常量 + * @author xiejs + * @since 2022-01-18 + */ +public class RegexConst { + /** + * 手机号码正则 + */ + public static final String MOBILE_REGEX= "^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\\d{8}$"; + +} 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 cc6c9240..1629637f 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 @@ -1,10 +1,10 @@ package com.xjs.apitools.controller; -import cn.hutool.core.collection.CollUtil; import com.ruoyi.common.core.domain.R; 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.service.ApiToolsService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -12,9 +12,13 @@ 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 java.util.List; +import java.util.regex.Pattern; + +import static com.xjs.consts.RegexConst.MOBILE_REGEX; /** * api小工具控制器 @@ -33,13 +37,25 @@ public class ApiToolsController { private ApiToolsService apiToolsService; - @GetMapping + @GetMapping("holiday") @ApiOperation("获取节假日信息") @Log(title = "获取节假日") @RequiresPermissions("open:apitools:holiday") public R> getHolidayApiData() { - List apiHolidayList = apiToolsService.getApiHolidayList(); - return CollUtil.isNotEmpty(apiHolidayList) ? R.ok(apiHolidayList) : R.fail(); + return R.ok(apiToolsService.getApiHolidayList()); + } + + + @GetMapping("mobilebelong") + @ApiOperation("获取手机归属地信息") + @Log(title = "获取手机归属地") + @RequiresPermissions("open:apitools:mobilebelong") + public R getMobileBelongApiData(@RequestParam(name = "mobile") String mobile) { + boolean matches = Pattern.matches(MOBILE_REGEX, mobile); + if (!matches) { + return R.fail("请输入正确的手机号码!!!"); + } + return R.ok(apiToolsService.getApiMobileBelong(mobile)); } diff --git a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/apitools/domain/ApiMobileBelong.java b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/apitools/domain/ApiMobileBelong.java new file mode 100644 index 00000000..f1f80905 --- /dev/null +++ b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/apitools/domain/ApiMobileBelong.java @@ -0,0 +1,35 @@ +package com.xjs.apitools.domain; + +import lombok.Data; + +import java.io.Serializable; + +/** + * api手机归属地实体 + * + * @author xiejs + * @since 2022-01-18 + */ +@Data +public class ApiMobileBelong implements Serializable { + + private static final long serialVersionUID = 1L; + + + /** + * 目标手机号 + */ + private String mobile; + + /** + * 归属地省份 + */ + private String province; + + /** + * 归属地描述 + */ + private String carrier; + + +} 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 new file mode 100644 index 00000000..53e88fda --- /dev/null +++ b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/apitools/domain/RequestBody.java @@ -0,0 +1,28 @@ +package com.xjs.apitools.domain; + +import lombok.Data; + +/** + * + * @author xiejs + * @since 2022-01-18 + */ +@Data +public class RequestBody { + + /** + * 应用id + */ + private String app_id; + + + /** + * 应用密钥 + */ + private String app_secret; + + /** + * 目标手机 + */ + private String mobile; +} diff --git a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/apitools/factory/impl/RollHolidayFactory.java b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/apitools/factory/impl/RollHolidayFactory.java index 5ecdde19..60c99fb0 100644 --- a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/apitools/factory/impl/RollHolidayFactory.java +++ b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/apitools/factory/impl/RollHolidayFactory.java @@ -3,10 +3,10 @@ package com.xjs.apitools.factory.impl; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.xjs.apitools.domain.ApiHoliday; +import com.xjs.apitools.domain.RequestBody; import com.xjs.apitools.factory.ApiToolsFactory; import com.xjs.common.client.api.roll.RollHolidayFeignClient; import com.xjs.config.RollProperties; -import com.xjs.copywriting.domain.RequestBody; import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; diff --git a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/apitools/factory/impl/RollMobileBelongFactory.java b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/apitools/factory/impl/RollMobileBelongFactory.java new file mode 100644 index 00000000..d31a2bf5 --- /dev/null +++ b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/apitools/factory/impl/RollMobileBelongFactory.java @@ -0,0 +1,42 @@ +package com.xjs.apitools.factory.impl; + +import com.alibaba.fastjson.JSONObject; +import com.xjs.apitools.domain.ApiMobileBelong; +import com.xjs.apitools.domain.RequestBody; +import com.xjs.apitools.factory.ApiToolsFactory; +import com.xjs.common.client.api.roll.RollMobileBelongFeignClient; +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 RollMobileBelongFactory implements ApiToolsFactory { + + @Autowired + private RollProperties rollProperties; + @Autowired + private RollMobileBelongFeignClient rollMobileBelongFeignClient; + + + @Override + public ApiMobileBelong apiData(RequestBody req) { + req.setApp_secret(rollProperties.getApp_secret()); + req.setApp_id(rollProperties.getApp_id()); + JSONObject jsonObject = rollMobileBelongFeignClient.mobileBelongApi(req); + if (!jsonObject.containsKey(DEMOTE_ERROR) && jsonObject.getInteger("code") == ROLL_CODE_SUCCESS.intValue()) { + JSONObject jsonData = jsonObject.getJSONObject("data"); + return jsonData.toJavaObject(ApiMobileBelong.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 db49e3c3..ca115b24 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 @@ -1,6 +1,7 @@ package com.xjs.apitools.service; import com.xjs.apitools.domain.ApiHoliday; +import com.xjs.apitools.domain.ApiMobileBelong; import java.util.List; @@ -17,4 +18,12 @@ public interface ApiToolsService { */ List getApiHolidayList(); + + /** + * 获取手机归属地信息 + * @param mobile 手机号 + * @return ApiMobileBelong + */ + ApiMobileBelong getApiMobileBelong(String mobile); + } 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 5afc4cb4..9082cb34 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 @@ -1,14 +1,19 @@ package com.xjs.apitools.service.impl; import com.xjs.apitools.domain.ApiHoliday; +import com.xjs.apitools.domain.ApiMobileBelong; +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.service.ApiToolsService; +import com.xjs.exception.ApiException; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; import java.util.Objects; +import java.util.Optional; import java.util.stream.Collectors; /** @@ -21,24 +26,38 @@ import java.util.stream.Collectors; public class ApiToolsServiceImpl implements ApiToolsService { private ApiToolsFactory holidayFactory; + private ApiToolsFactory mobileBelongFactory; @Autowired public void setHolidayFactory(RollHolidayFactory rollHolidayFactory) { this.holidayFactory = rollHolidayFactory; } + @Autowired + public void setMobileBelongFactory(RollMobileBelongFactory rollMobileBelongFactory) { + this.mobileBelongFactory = rollMobileBelongFactory; + } @Override public List getApiHolidayList() { List apiHolidayList = holidayFactory.apiDataList(); + Optional.ofNullable(apiHolidayList).orElseThrow(ApiException::new); List collect = apiHolidayList.stream().map(holidayFactory -> { if (holidayFactory.getResidueDays() >= 0) { return holidayFactory; - }else { + } else { return null; } }).collect(Collectors.toList()); collect.removeIf(Objects::isNull); return collect; } + + @Override + public ApiMobileBelong getApiMobileBelong(String mobile) { + RequestBody requestBody = new RequestBody(); + requestBody.setMobile(mobile); + return Optional.ofNullable(mobileBelongFactory.apiData(requestBody)) + .orElseThrow(ApiException::new); + } } diff --git a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/common/client/api/roll/RollHolidayFeignClient.java b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/common/client/api/roll/RollHolidayFeignClient.java index 3e5d28e0..67cab6cf 100644 --- a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/common/client/api/roll/RollHolidayFeignClient.java +++ b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/common/client/api/roll/RollHolidayFeignClient.java @@ -2,8 +2,8 @@ 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.RollHolidayFeignFactory; -import com.xjs.copywriting.domain.RequestBody; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.cloud.openfeign.SpringQueryMap; import org.springframework.web.bind.annotation.GetMapping; diff --git a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/common/client/api/roll/RollMobileBelongFeignClient.java b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/common/client/api/roll/RollMobileBelongFeignClient.java new file mode 100644 index 00000000..82465d5b --- /dev/null +++ b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/common/client/api/roll/RollMobileBelongFeignClient.java @@ -0,0 +1,26 @@ +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.RollMobileBelongFeignFactory; +import org.springframework.cloud.openfeign.FeignClient; +import org.springframework.cloud.openfeign.SpringQueryMap; +import org.springframework.web.bind.annotation.GetMapping; + +import static com.xjs.consts.ApiConst.*; + +/** + * roll手机归属地接口api调用 + * @author xiejs + * @since 2022-01-18 + */ +@FeignClient(name = "rollMobileBelong", url = ROLL_MOBILE_BELONG_URL, fallbackFactory = RollMobileBelongFeignFactory.class) +public interface RollMobileBelongFeignClient { + + @GetMapping() + @ApiLog(name = ROLL_MOBILE_BELONG, + url = ROLL_MOBILE_BELONG_URL, + method = "Get") + JSONObject mobileBelongApi(@SpringQueryMap RequestBody requestBody); +} diff --git a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/common/client/factory/RollMobileBelongFeignFactory.java b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/common/client/factory/RollMobileBelongFeignFactory.java new file mode 100644 index 00000000..02172c15 --- /dev/null +++ b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/common/client/factory/RollMobileBelongFeignFactory.java @@ -0,0 +1,28 @@ +package com.xjs.common.client.factory; + +import com.alibaba.fastjson.JSONObject; +import com.ruoyi.common.core.domain.R; +import com.xjs.common.client.api.roll.RollMobileBelongFeignClient; +import lombok.extern.log4j.Log4j2; +import org.springframework.cloud.openfeign.FallbackFactory; +import org.springframework.stereotype.Component; + +import static com.xjs.consts.ApiConst.DEMOTE_ERROR; + +/** + * @author xiejs + * @since 2022-01-18 + */ +@Component +@Log4j2 +public class RollMobileBelongFeignFactory implements FallbackFactory { + @Override + public RollMobileBelongFeignClient create(Throwable cause) { + log.error("api模块roll 手机归属地服务调用失败:{},执行降级处理", cause.getMessage()); + return requestBody -> { + 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/service/impl/IPServiceImpl.java b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/weather/service/impl/IPServiceImpl.java index 69d7e8a1..aa36d853 100644 --- a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/weather/service/impl/IPServiceImpl.java +++ b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/weather/service/impl/IPServiceImpl.java @@ -1,7 +1,7 @@ package com.xjs.weather.service.impl; import com.ruoyi.common.redis.service.RedisService; -import com.xjs.exception.BusinessException; +import com.xjs.exception.ApiException; import com.xjs.weather.domain.IPInfoVo; import com.xjs.weather.factory.impl.RollIPFactory; import com.xjs.weather.service.IPService; @@ -37,7 +37,7 @@ public class IPServiceImpl implements IPService { redisService.setCacheObject(IP_INFO, ipInfoVo, IP_INFO_EXPIRE, TimeUnit.MINUTES); return ipInfoVo; }else { - throw new BusinessException("获取IP信息异常!!"); + throw new ApiException("获取IP信息异常!!"); } } }