From 059c89a086cf9fac8e1045278800268896921c58 Mon Sep 17 00:00:00 2001
From: xjs <1294405880@qq.com>
Date: Mon, 17 Jan 2022 21:30:13 +0800
Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E5=90=8E=E7=AB=AF=E5=AE=9E=E7=8E=B0?=
=?UTF-8?q?=E6=B5=8B=E9=80=9F=E7=BD=91=E8=8E=B7=E5=8F=96ip=E4=BF=A1?=
=?UTF-8?q?=E6=81=AF=E6=8E=A5=E5=8F=A3=EF=BC=8C=E6=9A=82=E6=97=B6=E6=97=A0?=
=?UTF-8?q?=E6=95=88?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
ruoyi-ui/src/layout/components/Navbar.vue | 9 ++--
.../views/business/tools/apitools/index.vue | 13 ++++++
.../main/java/com/xjs/consts/ApiConst.java | 29 ++++++++++--
.../controller/ApiToolsController.java | 18 ++++++++
.../com/xjs/apitools/domain/ApiHoliday.java | 42 ++++++++++++++++++
.../xjs/apitools/factory/ApiToolsFactory.java | 33 ++++++++++++++
.../factory/impl/RollHolidayFactory.java | 31 +++++++++++++
.../api/speedtest/SpeedTestIPFeignClient.java | 29 ++++++++++++
.../factory/SpeedTestIPFeignFactory.java | 28 ++++++++++++
.../weather/factory/impl/RollIPFactory.java | 16 +++----
.../factory/impl/SpeedTestIPFactory.java | 44 +++++++++++++++++++
.../TianXingOneEnglishFactoryTest.java | 10 +++++
12 files changed, 284 insertions(+), 18 deletions(-)
create mode 100644 ruoyi-ui/src/views/business/tools/apitools/index.vue
create mode 100644 xjs-business/xjs-business-openapi/src/main/java/com/xjs/apitools/controller/ApiToolsController.java
create mode 100644 xjs-business/xjs-business-openapi/src/main/java/com/xjs/apitools/domain/ApiHoliday.java
create mode 100644 xjs-business/xjs-business-openapi/src/main/java/com/xjs/apitools/factory/ApiToolsFactory.java
create mode 100644 xjs-business/xjs-business-openapi/src/main/java/com/xjs/apitools/factory/impl/RollHolidayFactory.java
create mode 100644 xjs-business/xjs-business-openapi/src/main/java/com/xjs/common/client/api/speedtest/SpeedTestIPFeignClient.java
create mode 100644 xjs-business/xjs-business-openapi/src/main/java/com/xjs/common/client/factory/SpeedTestIPFeignFactory.java
create mode 100644 xjs-business/xjs-business-openapi/src/main/java/com/xjs/weather/factory/impl/SpeedTestIPFactory.java
diff --git a/ruoyi-ui/src/layout/components/Navbar.vue b/ruoyi-ui/src/layout/components/Navbar.vue
index d48c762a..8153c452 100644
--- a/ruoyi-ui/src/layout/components/Navbar.vue
+++ b/ruoyi-ui/src/layout/components/Navbar.vue
@@ -17,10 +17,6 @@
v-model="weatherVisible">
- | {{cast.dayweather}}
-
- {{cast.nighttemp+"℃~"+cast.daytemp+"℃"}}
-
今天
@@ -33,7 +29,10 @@
大后天
-
+ {{cast.dayweather}}
+
+ {{cast.nighttemp+"℃~"+cast.daytemp+"℃"}}
+
星期一
diff --git a/ruoyi-ui/src/views/business/tools/apitools/index.vue b/ruoyi-ui/src/views/business/tools/apitools/index.vue
new file mode 100644
index 00000000..54b19c16
--- /dev/null
+++ b/ruoyi-ui/src/views/business/tools/apitools/index.vue
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
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 27e86bbf..1c1c80a6 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
@@ -44,8 +44,12 @@ public class ApiConst {
public static final String ROLL_IP = "ROLL-IP信息";
+ public static final String SPEED_TEST_IP = "测速网-IP信息";
+
public static final String GAODE_WEATHER = "高德-天气预报";
+ public static final String ROLL_HOLIDAYS = "ROLL-节假日";
+
//-------------------url------------------------------
@@ -83,12 +87,18 @@ public class ApiConst {
public static final String ROLL_IP_URL = "https://www.mxnzp.com/api/ip/aim_ip";
+ public static final String SPEED_TEST_IP_URL = "https://api-v3-ipv6.speedtest.cn/ip";
+
/**
- * 接口文档:
- * https://lbs.amap.com/api/webservice/guide/api/weatherinfo
+ * 接口文档:https://lbs.amap.com/api/webservice/guide/api/weatherinfo
*/
public static final String GAODE_WEATHER_URL = "https://restapi.amap.com/v3/weather/weatherInfo";
+ /**
+ * 接口文档:https://www.mxnzp.com/doc/detail?id=1
+ */
+ public static final String ROLL_HOLIDAYS_URL = "https://www.mxnzp.com/api/holiday/recent/list";
+
//-----------------------api请求参数常量-----------------------------
@@ -109,6 +119,12 @@ public class ApiConst {
* roll平台返回值code成功参数
*/
public static final Integer ROLL_CODE_SUCCESS = 1;
+ /**
+ * speedtest平台返回值code成功参数
+ */
+ public static final Integer SPEED_TEST_CODE_SUCCESS = 0;
+
+
/**
* 高德返回值infocode
@@ -121,11 +137,11 @@ public class ApiConst {
/**
* 高德返回值lives名称(需要的天气参数) (实时天气数据)
*/
- public static final String LIVES= "lives";
+ public static final String LIVES = "lives";
/**
* 高德返回值forecasts名称(预报天气数据)
*/
- public static final String FORECASTS= "forecasts";
+ public static final String FORECASTS = "forecasts";
//---------------------自定义相关请求响应常量----------------------------
@@ -136,4 +152,9 @@ public class ApiConst {
public static final String DEMOTE_ERROR = "error";
+ //--------------------其他常量------------------------------
+
+ public static final String LOCAL_IP = "127.0.0.1";
+
+
}
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
new file mode 100644
index 00000000..c49c1e2f
--- /dev/null
+++ b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/apitools/controller/ApiToolsController.java
@@ -0,0 +1,18 @@
+package com.xjs.apitools.controller;
+
+import io.swagger.annotations.Api;
+import lombok.extern.log4j.Log4j2;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * api小工具控制器
+ * @author xiejs
+ * @since 2022-01-17
+ */
+@RestController
+@RequestMapping("apitools")
+@Api(tags = "业务模块-API小工具")
+@Log4j2
+public class ApiToolsController {
+}
diff --git a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/apitools/domain/ApiHoliday.java b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/apitools/domain/ApiHoliday.java
new file mode 100644
index 00000000..01ce4ad3
--- /dev/null
+++ b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/apitools/domain/ApiHoliday.java
@@ -0,0 +1,42 @@
+package com.xjs.apitools.domain;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * 节假日api 实体
+ *
+ * @author xiejs
+ * @since 2022-01-17
+ */
+@Data
+public class ApiHoliday implements Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 节日日期
+ */
+ private String date;
+
+ /**
+ * 节日农历日期
+ */
+ private String lunarDate;
+
+ /**
+ * 节日名称
+ */
+ private String holidayName;
+
+ /**
+ * 距离今日的天数,已经过的节日为负数
+ */
+ private Integer residueDays;
+
+ /**
+ * 是否是农历节日
+ */
+ private Boolean lunarHoliday;
+}
diff --git a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/apitools/factory/ApiToolsFactory.java b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/apitools/factory/ApiToolsFactory.java
new file mode 100644
index 00000000..337bdc91
--- /dev/null
+++ b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/apitools/factory/ApiToolsFactory.java
@@ -0,0 +1,33 @@
+package com.xjs.apitools.factory;
+
+
+/**
+ * api工具工厂接口
+ *
+ * @author xiejs
+ * @since 2022-01-17
+ */
+public interface ApiToolsFactory {
+
+
+ /**
+ * 获取api数据工厂方法 (无参)
+ *
+ * @return T
+ */
+ default T ApiData() {
+ return null;
+ }
+
+ /**
+ * 获取api数据工厂方法 (有参)
+ *
+ * @param req 请求参数
+ * @return T
+ */
+ default T ApiData(R req) {
+ return null;
+ }
+
+
+}
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
new file mode 100644
index 00000000..03766716
--- /dev/null
+++ b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/apitools/factory/impl/RollHolidayFactory.java
@@ -0,0 +1,31 @@
+package com.xjs.apitools.factory.impl;
+
+import com.xjs.apitools.domain.ApiHoliday;
+import com.xjs.apitools.factory.ApiToolsFactory;
+import com.xjs.config.RollProperties;
+import lombok.extern.log4j.Log4j2;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+/**
+ * roll平台获取节假日api工厂实现
+ * @author xiejs
+ * @since 2022-01-17
+ */
+@Component
+@Log4j2
+public class RollHolidayFactory implements ApiToolsFactory {
+
+ @Autowired
+ private RollProperties rollProperties;
+
+
+
+
+ @Override
+ public ApiHoliday ApiData() {
+
+
+ return null;
+ }
+}
diff --git a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/common/client/api/speedtest/SpeedTestIPFeignClient.java b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/common/client/api/speedtest/SpeedTestIPFeignClient.java
new file mode 100644
index 00000000..0446cb0d
--- /dev/null
+++ b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/common/client/api/speedtest/SpeedTestIPFeignClient.java
@@ -0,0 +1,29 @@
+package com.xjs.common.client.api.speedtest;
+
+import com.alibaba.fastjson.JSONObject;
+import com.xjs.annotation.ApiLog;
+import com.xjs.common.client.factory.SpeedTestIPFeignFactory;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestParam;
+
+import static com.xjs.consts.ApiConst.SPEED_TEST_IP;
+import static com.xjs.consts.ApiConst.SPEED_TEST_IP_URL;
+
+/**
+ * https://myplugin.speedtest.cn/#/ 测速网
+ *
+ * @author xiejs
+ * @since 2022-01-17
+ */
+@FeignClient(name = "speedTestIP", url = SPEED_TEST_IP_URL,fallbackFactory = SpeedTestIPFeignFactory.class)
+public interface SpeedTestIPFeignClient {
+
+ @GetMapping()
+ @ApiLog(name = SPEED_TEST_IP,
+ url = SPEED_TEST_IP_URL,
+ method = "Get")
+ JSONObject IpApi(@RequestParam("ipv4") String requestBody);
+
+
+}
diff --git a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/common/client/factory/SpeedTestIPFeignFactory.java b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/common/client/factory/SpeedTestIPFeignFactory.java
new file mode 100644
index 00000000..3784c1c1
--- /dev/null
+++ b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/common/client/factory/SpeedTestIPFeignFactory.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.speedtest.SpeedTestIPFeignClient;
+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-17
+ */
+@Component
+@Log4j2
+public class SpeedTestIPFeignFactory implements FallbackFactory {
+ @Override
+ public SpeedTestIPFeignClient create(Throwable cause) {
+ log.error("api模块 测速网 IP服务调用失败:{},执行降级处理", 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/factory/impl/RollIPFactory.java b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/weather/factory/impl/RollIPFactory.java
index 80baddd5..2ffc9735 100644
--- a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/weather/factory/impl/RollIPFactory.java
+++ b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/weather/factory/impl/RollIPFactory.java
@@ -12,8 +12,9 @@ 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;
+import java.util.Optional;
+
+import static com.xjs.consts.ApiConst.*;
import static com.xjs.consts.RedisConst.IP_INFO;
/**
@@ -36,11 +37,8 @@ public class RollIPFactory implements IPFactory {
@Override
public IPInfoVo IpApi() {
RequestBody requestBody = new RequestBody();
- try {
- requestBody.setIp(IPUtils.getV4IP());
- } catch (Exception e) {
- requestBody.setIp("127.0.0.1");
- }
+ String ip = Optional.ofNullable(IPUtils.getV4IP()).orElse(LOCAL_IP);
+ requestBody.setIp(ip);
requestBody.setApp_id(rollProperties.getApp_id());
requestBody.setApp_secret(rollProperties.getApp_secret());
JSONObject jsonObject = rollIPFeignClient.IpApi(requestBody);
@@ -49,9 +47,9 @@ public class RollIPFactory implements IPFactory {
return data.toJavaObject(IPInfoVo.class);
} else {
log.error("天行全网热搜服务调用成功,但返回异常");
- if (redisService.hasKey(IP_INFO)){
+ if (redisService.hasKey(IP_INFO)) {
return (IPInfoVo) redisService.getCacheObject(IP_INFO);
- }else {
+ } else {
return null;
}
}
diff --git a/xjs-business/xjs-business-openapi/src/main/java/com/xjs/weather/factory/impl/SpeedTestIPFactory.java b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/weather/factory/impl/SpeedTestIPFactory.java
new file mode 100644
index 00000000..97d5c0d6
--- /dev/null
+++ b/xjs-business/xjs-business-openapi/src/main/java/com/xjs/weather/factory/impl/SpeedTestIPFactory.java
@@ -0,0 +1,44 @@
+package com.xjs.weather.factory.impl;
+
+import com.alibaba.fastjson.JSONObject;
+import com.xjs.common.client.api.speedtest.SpeedTestIPFeignClient;
+import com.xjs.utils.IPUtils;
+import com.xjs.weather.domain.IPInfoVo;
+import com.xjs.weather.factory.IPFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Component;
+
+import java.util.Optional;
+
+import static com.xjs.consts.ApiConst.*;
+
+/**
+ * 测速网 IP信息查询API工厂实现 (主要获取ipv6)
+ * @author xiejs
+ * @since 2022-01-17
+ */
+@Component
+public class SpeedTestIPFactory implements IPFactory {
+
+ @Autowired
+ private SpeedTestIPFeignClient speedTestIPFeignClient;
+
+ @Override
+ @Deprecated
+ public IPInfoVo IpApi() {
+ String v4IP = IPUtils.getV4IP();
+ String ip = Optional.ofNullable(v4IP).orElse(LOCAL_IP);
+ JSONObject jsonObject = speedTestIPFeignClient.IpApi(ip);
+ if (!jsonObject.containsKey(DEMOTE_ERROR) && jsonObject.getInteger("code") == SPEED_TEST_CODE_SUCCESS.intValue()) {
+ JSONObject data = jsonObject.getJSONObject("data");
+ IPInfoVo ipInfoVo = new IPInfoVo();
+ ipInfoVo.setCity(data.getString("city"));
+ ipInfoVo.setIp(data.getString("ip"));
+ ipInfoVo.setIsp(data.getString("isp"));
+ ipInfoVo.setProvince(data.getString("province"));
+ System.out.println("json!!!"+data.toJSONString());
+ return ipInfoVo;
+ }
+ return null;
+ }
+}
diff --git a/xjs-business/xjs-business-openapi/src/test/java/com/xjs/oneenglish/factory/TianXingOneEnglishFactoryTest.java b/xjs-business/xjs-business-openapi/src/test/java/com/xjs/oneenglish/factory/TianXingOneEnglishFactoryTest.java
index ecd78490..cc6d6218 100644
--- a/xjs-business/xjs-business-openapi/src/test/java/com/xjs/oneenglish/factory/TianXingOneEnglishFactoryTest.java
+++ b/xjs-business/xjs-business-openapi/src/test/java/com/xjs/oneenglish/factory/TianXingOneEnglishFactoryTest.java
@@ -8,6 +8,8 @@ import com.xjs.copywriting.service.CopyWritingService;
import com.xjs.oneenglish.domain.ApiEnglish;
import com.xjs.oneenglish.domain.RequestBody;
import com.xjs.oneenglish.factory.impl.TianXingOneEnglishFactory;
+import com.xjs.weather.domain.IPInfoVo;
+import com.xjs.weather.factory.impl.SpeedTestIPFactory;
import org.apache.ibatis.session.ExecutorType;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
@@ -34,6 +36,9 @@ class TianXingOneEnglishFactoryTest {
@Autowired
private SqlSessionFactory sqlSessionFactory;
+ @Autowired
+ private SpeedTestIPFactory speedTestIPFactory;
+
@Test
void getOneEnglish() {
RequestBody requestBody = new RequestBody();
@@ -42,6 +47,11 @@ class TianXingOneEnglishFactoryTest {
System.out.println(oneEnglish);
}
+ @Test
+ void ip() {
+ IPInfoVo ipInfoVo = speedTestIPFactory.IpApi();
+ System.out.println(ipInfoVo.toString());
+ }
@Test
void insert() {