From 0197af4fbe51c84886f6d508353d86b722dcaa4b Mon Sep 17 00:00:00 2001
From: wanggeng888 <450292408@qq.com>
Date: Wed, 14 Apr 2021 11:39:34 +0800
Subject: [PATCH] =?UTF-8?q?=E6=B5=8B=E8=AF=95=E9=80=BB=E8=BE=91?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
pom.xml | 40 +-
.../wgink/gateway/WgGatewayApplication.java | 7 +-
.../ink/wgink/gateway/config/BeanConfig.java | 44 ++
.../wgink/gateway/consts/ISystemConst.java | 19 +
.../controller/api/route/RouteController.java | 47 ++
.../java/ink/wgink/gateway/dao/BaseDao.java | 47 ++
.../java/ink/wgink/gateway/dao/IBaseDao.java | 65 +++
.../wgink/gateway/dao/route/IRouteDao.java | 21 +
.../gateway/dao/route/impl/RouteDaoImpl.java | 94 ++++
.../filter/global/CountGlobalFilter.java | 16 +-
.../java/ink/wgink/gateway/pojo/BasePOJO.java | 26 +
.../java/ink/wgink/gateway/pojo/ListPage.java | 33 ++
.../gateway/pojo/dtos/route/RouteDTO.java | 33 ++
.../wgink/gateway/pojo/pos/route/RoutePO.java | 35 ++
.../gateway/pojo/result/ErrorResult.java | 99 ++++
.../gateway/pojo/result/SuccessResult.java | 22 +
.../pojo/result/SuccessResultData.java | 36 ++
.../pojo/result/SuccessResultList.java | 61 +++
.../pojo/result/UploadExcelResultDTO.java | 61 +++
.../wgink/gateway/pojo/vos/route/RouteVO.java | 57 +++
.../wgink/gateway/service/BaseService.java | 14 +
.../gateway/service/route/IRouteService.java | 38 ++
.../service/route/impl/RouteServiceImpl.java | 44 ++
.../java/ink/wgink/gateway/util/DateUtil.java | 457 ++++++++++++++++++
.../ink/wgink/gateway/util/ReflectUtil.java | 124 +++++
.../java/ink/wgink/gateway/util/UUIDUtil.java | 20 +
src/main/resources/application.yml | 8 +
src/main/resources/static/route/list.html | 10 +
28 files changed, 1572 insertions(+), 6 deletions(-)
create mode 100644 src/main/java/ink/wgink/gateway/config/BeanConfig.java
create mode 100644 src/main/java/ink/wgink/gateway/consts/ISystemConst.java
create mode 100644 src/main/java/ink/wgink/gateway/controller/api/route/RouteController.java
create mode 100644 src/main/java/ink/wgink/gateway/dao/BaseDao.java
create mode 100644 src/main/java/ink/wgink/gateway/dao/IBaseDao.java
create mode 100644 src/main/java/ink/wgink/gateway/dao/route/IRouteDao.java
create mode 100644 src/main/java/ink/wgink/gateway/dao/route/impl/RouteDaoImpl.java
create mode 100644 src/main/java/ink/wgink/gateway/pojo/BasePOJO.java
create mode 100644 src/main/java/ink/wgink/gateway/pojo/ListPage.java
create mode 100644 src/main/java/ink/wgink/gateway/pojo/dtos/route/RouteDTO.java
create mode 100644 src/main/java/ink/wgink/gateway/pojo/pos/route/RoutePO.java
create mode 100644 src/main/java/ink/wgink/gateway/pojo/result/ErrorResult.java
create mode 100644 src/main/java/ink/wgink/gateway/pojo/result/SuccessResult.java
create mode 100644 src/main/java/ink/wgink/gateway/pojo/result/SuccessResultData.java
create mode 100644 src/main/java/ink/wgink/gateway/pojo/result/SuccessResultList.java
create mode 100644 src/main/java/ink/wgink/gateway/pojo/result/UploadExcelResultDTO.java
create mode 100644 src/main/java/ink/wgink/gateway/pojo/vos/route/RouteVO.java
create mode 100644 src/main/java/ink/wgink/gateway/service/BaseService.java
create mode 100644 src/main/java/ink/wgink/gateway/service/route/IRouteService.java
create mode 100644 src/main/java/ink/wgink/gateway/service/route/impl/RouteServiceImpl.java
create mode 100644 src/main/java/ink/wgink/gateway/util/DateUtil.java
create mode 100644 src/main/java/ink/wgink/gateway/util/ReflectUtil.java
create mode 100644 src/main/java/ink/wgink/gateway/util/UUIDUtil.java
create mode 100644 src/main/resources/static/route/list.html
diff --git a/pom.xml b/pom.xml
index f7bd389..c075360 100644
--- a/pom.xml
+++ b/pom.xml
@@ -9,14 +9,19 @@
ink.wgink
- gateway
+ wg-gateway
1.0.0-SNAPSHOT
wg-gateway
网关
+
1.8
+ 2.9.4
+ 1.18.16
+ 1.2.73
2020.0.2
+
org.springframework.cloud
@@ -26,12 +31,35 @@
org.springframework.cloud
spring-cloud-starter-gateway
-
+
+ org.springframework.boot
+ spring-boot-starter-data-mongodb
+
org.springframework.boot
spring-boot-starter-test
test
+
+ org.apache.commons
+ commons-lang3
+
+
+ com.alibaba
+ fastjson
+ ${fastjson.version}
+
+
+ joda-time
+ joda-time
+ ${jodatime.version}
+
+
+ org.projectlombok
+ lombok
+ ${lombok.version}
+ provided
+
@@ -50,6 +78,14 @@
org.springframework.boot
spring-boot-maven-plugin
+
+
+
+ org.projectlombok
+ lombok
+
+
+
diff --git a/src/main/java/ink/wgink/gateway/WgGatewayApplication.java b/src/main/java/ink/wgink/gateway/WgGatewayApplication.java
index 78227dc..c0f41ef 100644
--- a/src/main/java/ink/wgink/gateway/WgGatewayApplication.java
+++ b/src/main/java/ink/wgink/gateway/WgGatewayApplication.java
@@ -6,6 +6,7 @@ import org.springframework.boot.context.properties.EnableConfigurationProperties
import org.springframework.cloud.gateway.route.RouteLocator;
import org.springframework.cloud.gateway.route.builder.RouteLocatorBuilder;
import org.springframework.context.annotation.Bean;
+import org.yaml.snakeyaml.util.UriEncoder;
@EnableConfigurationProperties
@SpringBootApplication
@@ -19,9 +20,9 @@ public class WgGatewayApplication {
public RouteLocator routes(RouteLocatorBuilder builder) {
RouteLocator routeLocator = builder.routes()
.route(r -> r
- .path("/study")
- .filters(f -> f.addRequestHeader("name", "张三").addRequestParameter("test", "gogo"))
- .uri("http://127.0.0.1:7008/study"))
+ .path("/study/**")
+ .filters(f -> f.rewritePath("/study/", "/twoduty/").addRequestHeader("name", UriEncoder.encode("zhangsan")).addRequestParameter("test", "gogo"))
+ .uri("http://192.168.0.120:8080"))
.build();
routeLocator.getRoutes().toStream().forEach(System.out::println);
return routeLocator;
diff --git a/src/main/java/ink/wgink/gateway/config/BeanConfig.java b/src/main/java/ink/wgink/gateway/config/BeanConfig.java
new file mode 100644
index 0000000..27deced
--- /dev/null
+++ b/src/main/java/ink/wgink/gateway/config/BeanConfig.java
@@ -0,0 +1,44 @@
+package ink.wgink.gateway.config;
+
+import com.alibaba.fastjson.serializer.SerializerFeature;
+import com.alibaba.fastjson.support.config.FastJsonConfig;
+import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.SerializationFeature;
+import org.springframework.boot.autoconfigure.web.servlet.WebMvcAutoConfiguration;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.http.MediaType;
+import org.springframework.http.converter.HttpMessageConverter;
+import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
+import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
+import org.springframework.security.crypto.password.PasswordEncoder;
+
+import java.nio.charset.Charset;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * When you feel like quitting. Think about why you started
+ * 当你想要放弃的时候,想想当初你为何开始
+ *
+ * @ClassName: BeanConfig
+ * @Description: bean配置
+ * @Author: wanggeng
+ * @Date: 2021/2/5 6:44 下午
+ * @Version: 1.0
+ */
+@Configuration
+public class BeanConfig {
+
+ /**
+ * 解决 disable SerializationFeature.FAIL_ON_EMPTY_BEANS 问题,由于没有属性导致
+ *
+ * @return
+ */
+ @Bean
+ public ObjectMapper objectMapper() {
+ return new ObjectMapper().disable(SerializationFeature.FAIL_ON_EMPTY_BEANS);
+ }
+
+}
diff --git a/src/main/java/ink/wgink/gateway/consts/ISystemConst.java b/src/main/java/ink/wgink/gateway/consts/ISystemConst.java
new file mode 100644
index 0000000..622c060
--- /dev/null
+++ b/src/main/java/ink/wgink/gateway/consts/ISystemConst.java
@@ -0,0 +1,19 @@
+package ink.wgink.gateway.consts;
+
+/**
+ * When you feel like quitting. Think about why you started
+ * 当你想要放弃的时候,想想当初你为何开始
+ *
+ * @ClassName: ISystemConst
+ * @Description: 常量
+ * @Author: wanggeng
+ * @Date: 2021/4/14 10:16 上午
+ * @Version: 1.0
+ */
+public interface ISystemConst {
+
+ String UUID = "uuid";
+
+ String COUNT = "count";
+
+}
diff --git a/src/main/java/ink/wgink/gateway/controller/api/route/RouteController.java b/src/main/java/ink/wgink/gateway/controller/api/route/RouteController.java
new file mode 100644
index 0000000..2f4be1e
--- /dev/null
+++ b/src/main/java/ink/wgink/gateway/controller/api/route/RouteController.java
@@ -0,0 +1,47 @@
+package ink.wgink.gateway.controller.api.route;
+
+import ink.wgink.gateway.dao.route.IRouteDao;
+import ink.wgink.gateway.pojo.ListPage;
+import ink.wgink.gateway.pojo.dtos.route.RouteDTO;
+import ink.wgink.gateway.pojo.result.SuccessResult;
+import ink.wgink.gateway.pojo.result.SuccessResultList;
+import ink.wgink.gateway.pojo.vos.route.RouteVO;
+import ink.wgink.gateway.service.route.IRouteService;
+import ink.wgink.gateway.util.ReflectUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+/**
+ * When you feel like quitting. Think about why you started
+ * 当你想要放弃的时候,想想当初你为何开始
+ *
+ * @ClassName: RouteController
+ * @Description: 路由
+ * @Author: wanggeng
+ * @Date: 2021/4/13 6:41 下午
+ * @Version: 1.0
+ */
+@RestController("sys/route")
+public class RouteController {
+
+ @Autowired
+ private IRouteService routeService;
+
+ @PostMapping("save")
+ public SuccessResult save(@RequestBody RouteVO routeVO) throws ReflectUtil.ReflectException {
+ routeService.save(routeVO);
+ return new SuccessResult();
+ }
+
+ @GetMapping("list")
+ public SuccessResultList> listPage(ListPage page) {
+ return routeService.listPage(page);
+ }
+
+}
diff --git a/src/main/java/ink/wgink/gateway/dao/BaseDao.java b/src/main/java/ink/wgink/gateway/dao/BaseDao.java
new file mode 100644
index 0000000..572409a
--- /dev/null
+++ b/src/main/java/ink/wgink/gateway/dao/BaseDao.java
@@ -0,0 +1,47 @@
+package ink.wgink.gateway.dao;
+
+import ink.wgink.gateway.pojo.BasePOJO;
+import ink.wgink.gateway.util.DateUtil;
+import ink.wgink.gateway.util.UUIDUtil;
+import org.springframework.data.mongodb.core.query.Update;
+
+/**
+ * When you feel like quitting. Think about why you started
+ * 当你想要放弃的时候,想想当初你为何开始
+ *
+ * @ClassName: BaseDao
+ * @Description: dao接口
+ * @Author: wanggeng
+ * @Date: 2021/4/13 5:56 下午
+ * @Version: 1.0
+ */
+public class BaseDao {
+
+ public static final String CREATOR = "creator";
+ public static final String MODIFIER = "modifier";
+ public static final String GMT_CREATE = "gmtCreate";
+ public static final String GMT_MODIFIED = "gmtModified";
+
+ protected void setSave(BasePOJO base) {
+ String datetime = DateUtil.getTime();
+ base.setUuid(UUIDUtil.getUUID());
+ base.setCreator("1");
+ base.setGmtCreate(datetime);
+ base.setModifier("1");
+ base.setGmtModified(datetime);
+ }
+
+ protected void setUpdate(Update update) {
+ update.set(GMT_MODIFIED, DateUtil.getTime());
+ update.set(MODIFIER, "1");
+ }
+
+ protected int getLimit(int size) {
+ return size;
+ }
+
+ protected long getSkip(int page, int size) {
+ return (page - 1) * size;
+ }
+
+}
diff --git a/src/main/java/ink/wgink/gateway/dao/IBaseDao.java b/src/main/java/ink/wgink/gateway/dao/IBaseDao.java
new file mode 100644
index 0000000..0efef2b
--- /dev/null
+++ b/src/main/java/ink/wgink/gateway/dao/IBaseDao.java
@@ -0,0 +1,65 @@
+package ink.wgink.gateway.dao;
+
+import ink.wgink.gateway.pojo.BasePOJO;
+
+import java.util.List;
+
+/**
+ * When you feel like quitting. Think about why you started
+ * 当你想要放弃的时候,想想当初你为何开始
+ *
+ * @ClassName: IBaseDao
+ * @Description:
+ * @Author: wanggeng
+ * @Date: 2021/4/13 6:29 下午
+ * @Version: 1.0
+ */
+public interface IBaseDao {
+
+ /**
+ * 新增
+ *
+ * @param po
+ */
+ void save(PO po);
+
+ /**
+ * 删除
+ *
+ * @param ids
+ */
+ void remote(List ids);
+
+ /**
+ * 修改
+ *
+ * @param id
+ * @param po
+ */
+ void update(String id, PO po);
+
+ /**
+ * 详情
+ *
+ * @param id
+ * @return
+ */
+ DTO get(String id);
+
+ /**
+ * 列表
+ *
+ * @param page
+ * @param size
+ * @return
+ */
+ List list(int page, int size);
+
+ /**
+ * 统计
+ *
+ * @return
+ */
+ Long count();
+
+}
diff --git a/src/main/java/ink/wgink/gateway/dao/route/IRouteDao.java b/src/main/java/ink/wgink/gateway/dao/route/IRouteDao.java
new file mode 100644
index 0000000..487d708
--- /dev/null
+++ b/src/main/java/ink/wgink/gateway/dao/route/IRouteDao.java
@@ -0,0 +1,21 @@
+package ink.wgink.gateway.dao.route;
+
+import ink.wgink.gateway.dao.IBaseDao;
+import ink.wgink.gateway.pojo.dtos.route.RouteDTO;
+import ink.wgink.gateway.pojo.pos.route.RoutePO;
+
+/**
+ * When you feel like quitting. Think about why you started
+ * 当你想要放弃的时候,想想当初你为何开始
+ *
+ * @ClassName: IRouteDao
+ * @Description: 路由
+ * @Author: wanggeng
+ * @Date: 2021/4/13 5:28 下午
+ * @Version: 1.0
+ */
+public interface IRouteDao extends IBaseDao {
+
+ String COLLECTION_NAME = "sys_route";
+
+}
diff --git a/src/main/java/ink/wgink/gateway/dao/route/impl/RouteDaoImpl.java b/src/main/java/ink/wgink/gateway/dao/route/impl/RouteDaoImpl.java
new file mode 100644
index 0000000..cce2c20
--- /dev/null
+++ b/src/main/java/ink/wgink/gateway/dao/route/impl/RouteDaoImpl.java
@@ -0,0 +1,94 @@
+package ink.wgink.gateway.dao.route.impl;
+
+import ink.wgink.gateway.consts.ISystemConst;
+import ink.wgink.gateway.dao.BaseDao;
+import ink.wgink.gateway.dao.route.IRouteDao;
+import ink.wgink.gateway.pojo.dtos.route.RouteDTO;
+import ink.wgink.gateway.pojo.pos.route.RoutePO;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.mongodb.core.MongoTemplate;
+import org.springframework.data.mongodb.core.aggregation.Aggregation;
+import org.springframework.data.mongodb.core.aggregation.AggregationOperation;
+import org.springframework.data.mongodb.core.aggregation.AggregationResults;
+import org.springframework.data.mongodb.core.query.Criteria;
+import org.springframework.data.mongodb.core.query.Query;
+import org.springframework.data.mongodb.core.query.Update;
+import org.springframework.stereotype.Repository;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * When you feel like quitting. Think about why you started
+ * 当你想要放弃的时候,想想当初你为何开始
+ *
+ * @ClassName: RouteDaoImpl
+ * @Description: 路由
+ * @Author: wanggeng
+ * @Date: 2021/4/13 5:32 下午
+ * @Version: 1.0
+ */
+@Slf4j
+@Repository
+public class RouteDaoImpl extends BaseDao implements IRouteDao {
+
+ @Autowired
+ private MongoTemplate mongoTemplate;
+
+ @Override
+ public void save(RoutePO routePO) {
+ setSave(routePO);
+ mongoTemplate.save(routePO);
+ }
+
+ @Override
+ public void remote(List ids) {
+ if (ids.isEmpty()) {
+ return;
+ }
+ Criteria queryCriteria = Criteria.where(ISystemConst.UUID);
+ for (int i = 0; i < ids.size(); i++) {
+ if (i > 0) {
+ queryCriteria.and(ISystemConst.UUID);
+ }
+ queryCriteria.is(ids.get(i));
+ }
+
+ mongoTemplate.remove(new Query(queryCriteria), RoutePO.class);
+ }
+
+ @Override
+ public void update(String uuid, RoutePO routePO) {
+ Update update = new Update();
+ update.set("system", routePO.getSystem());
+ update.set("summary", routePO.getSummary());
+ update.set("inUrl", routePO.getInUrl());
+ update.set("outUrl", routePO.getOutUrl());
+ setUpdate(update);
+ mongoTemplate.updateMulti(new Query(Criteria.where(ISystemConst.UUID).is(uuid)), update, RoutePO.class);
+ }
+
+ @Override
+ public RouteDTO get(String uuid) {
+ return mongoTemplate.findOne(new Query(Criteria.where(ISystemConst.UUID).is(uuid)), RouteDTO.class);
+ }
+
+ @Override
+ public List list(int page, int size) {
+ Query query = new Query();
+ query.limit(getLimit(size));
+ query.skip(getSkip(page, size));
+ return mongoTemplate.find(query, RouteDTO.class);
+ }
+
+ @Override
+ public Long count() {
+ List operations = new ArrayList<>();
+ operations.add(Aggregation.group(ISystemConst.UUID).count().as(ISystemConst.COUNT));
+ Aggregation aggregation = Aggregation.newAggregation(operations);
+ AggregationResults