This commit is contained in:
zhangchenbiao
2023-05-19 19:32:38 +08:00
parent e9b35b41f7
commit 63505941d0
70 changed files with 1238 additions and 192 deletions

View File

@@ -19,16 +19,19 @@
<orderEntry type="library" name="Maven: org.apache.commons:commons-collections4:4.1" level="project" />
<orderEntry type="library" name="Maven: org.apache.commons:commons-pool2:2.8.0" level="project" />
<orderEntry type="library" name="Maven: redis.clients:jedis:2.8.0" level="project" />
<orderEntry type="library" name="Maven: org.apache.tika:tika-core:1.9" level="project" />
<orderEntry type="library" name="Maven: xerces:xercesImpl:2.11.0" level="project" />
<orderEntry type="library" name="Maven: xml-apis:xml-apis:1.4.01" level="project" />
<orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.30" level="project" />
<orderEntry type="module" module-name="coolstore-partner-dao" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-jdbc:3.0.2" level="project" />
<orderEntry type="library" name="Maven: com.zaxxer:HikariCP:4.0.3" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-jdbc:5.3.27" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-tx:5.3.27" level="project" />
<orderEntry type="library" name="Maven: com.zaxxer:HikariCP:3.4.2" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-jdbc:5.2.5.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-tx:5.2.5.RELEASE" level="project" />
<orderEntry type="library" name="Maven: mysql:mysql-connector-java:8.0.18" level="project" />
<orderEntry type="library" name="Maven: com.google.protobuf:protobuf-java:3.6.1" level="project" />
<orderEntry type="library" name="Maven: com.alibaba:druid-spring-boot-starter:1.1.20" level="project" />
<orderEntry type="library" name="Maven: com.alibaba:druid:1.1.20" level="project" />
<orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.36" level="project" />
<orderEntry type="library" name="Maven: com.github.pagehelper:pagehelper-spring-boot-starter:1.4.6" level="project" />
<orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-starter:2.2.2" level="project" />
<orderEntry type="library" name="Maven: org.mybatis.spring.boot:mybatis-spring-boot-autoconfigure:2.2.2" level="project" />
@@ -49,47 +52,51 @@
<orderEntry type="library" name="Maven: io.springfox:springfox-swagger2:2.9.2" level="project" />
<orderEntry type="library" name="Maven: io.springfox:springfox-spi:2.9.2" level="project" />
<orderEntry type="library" name="Maven: io.springfox:springfox-core:2.9.2" level="project" />
<orderEntry type="library" name="Maven: net.bytebuddy:byte-buddy:1.12.23" level="project" />
<orderEntry type="library" name="Maven: net.bytebuddy:byte-buddy:1.10.8" level="project" />
<orderEntry type="library" name="Maven: io.springfox:springfox-schema:2.9.2" level="project" />
<orderEntry type="library" name="Maven: io.springfox:springfox-swagger-common:2.9.2" level="project" />
<orderEntry type="library" name="Maven: io.springfox:springfox-spring-web:2.9.2" level="project" />
<orderEntry type="library" name="Maven: com.google.guava:guava:20.0" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml:classmate:1.5.1" level="project" />
<orderEntry type="library" name="Maven: org.springframework.plugin:spring-plugin-core:1.2.0.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.plugin:spring-plugin-metadata:1.2.0.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.mapstruct:mapstruct:1.2.0.Final" level="project" />
<orderEntry type="library" name="Maven: io.springfox:springfox-bean-validators:2.9.2" level="project" />
<orderEntry type="library" name="Maven: com.github.xiaoymin:knife4j-spring-ui:2.0.4" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:2.7.11" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.7.11" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.7.11" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.7.11" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:2.7.11" level="project" />
<orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.2.12" level="project" />
<orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.2.12" level="project" />
<orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.17.2" level="project" />
<orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.17.2" level="project" />
<orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.36" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-web:2.2.6.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter:2.2.6.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot:2.2.6.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-autoconfigure:2.2.6.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-logging:2.2.6.RELEASE" level="project" />
<orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.2.3" level="project" />
<orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.2.3" level="project" />
<orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-to-slf4j:2.12.1" level="project" />
<orderEntry type="library" name="Maven: org.apache.logging.log4j:log4j-api:2.12.1" level="project" />
<orderEntry type="library" name="Maven: org.slf4j:jul-to-slf4j:1.7.30" level="project" />
<orderEntry type="library" name="Maven: jakarta.annotation:jakarta.annotation-api:1.3.5" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-core:5.3.27" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-jcl:5.3.27" level="project" />
<orderEntry type="library" name="Maven: org.yaml:snakeyaml:1.30" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-json:2.7.11" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.13.5" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.13.5" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.13.5" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.13.5" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.13.5" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-parameter-names:2.13.5" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-tomcat:2.7.11" level="project" />
<orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-core:9.0.74" level="project" />
<orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-el:9.0.74" level="project" />
<orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:9.0.74" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-web:5.3.27" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-beans:5.3.27" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-webmvc:5.3.27" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-aop:5.3.27" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-context:5.3.27" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-expression:5.3.27" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-core:5.2.5.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-jcl:5.2.5.RELEASE" level="project" />
<orderEntry type="library" scope="RUNTIME" name="Maven: org.yaml:snakeyaml:1.25" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-json:2.2.6.RELEASE" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-databind:2.10.3" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-annotations:2.10.3" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.core:jackson-core:2.10.3" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jdk8:2.10.3" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.datatype:jackson-datatype-jsr310:2.10.3" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml.jackson.module:jackson-module-parameter-names:2.10.3" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-tomcat:2.2.6.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-core:9.0.33" level="project" />
<orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-el:9.0.33" level="project" />
<orderEntry type="library" name="Maven: org.apache.tomcat.embed:tomcat-embed-websocket:9.0.33" level="project" />
<orderEntry type="library" name="Maven: org.springframework.boot:spring-boot-starter-validation:2.2.6.RELEASE" level="project" />
<orderEntry type="library" name="Maven: jakarta.validation:jakarta.validation-api:2.0.2" level="project" />
<orderEntry type="library" name="Maven: org.hibernate.validator:hibernate-validator:6.0.18.Final" level="project" />
<orderEntry type="library" name="Maven: org.jboss.logging:jboss-logging:3.4.1.Final" level="project" />
<orderEntry type="library" name="Maven: com.fasterxml:classmate:1.5.1" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-web:5.2.5.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-beans:5.2.5.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-webmvc:5.2.5.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-aop:5.2.5.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-context:5.2.5.RELEASE" level="project" />
<orderEntry type="library" name="Maven: org.springframework:spring-expression:5.2.5.RELEASE" level="project" />
</component>
</module>

View File

@@ -2,7 +2,7 @@ package com.cool.store.config;
import com.alibaba.fastjson.JSONObject;
import com.cool.store.config.datasource.DynamicDataSourceServiceImpl;
import com.cool.store.model.dto.DatasourceInfoDTO;
import com.cool.store.dto.DatasourceInfoDTO;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
@@ -15,7 +15,7 @@ import java.util.List;
* @author zhangchenbiao
* @FileName: CommonBeanConfig
* @Description:
* @date 2022-01-25 18:41
* @date 2023-05-19 18:41
*/
@Slf4j
@Component

View File

@@ -0,0 +1,125 @@
package com.cool.store.config;
import com.alibaba.fastjson.JSON;
import com.cool.store.constants.CommonConstants;
import com.cool.store.entity.SysRoleDO;
import com.cool.store.enums.ErrorCodeEnum;
import com.cool.store.mapper.SysRoleMapper;
import com.cool.store.response.ResponseResult;
import com.cool.store.service.context.DataSourceContext;
import com.cool.store.service.context.UserContext;
import com.cool.store.service.utils.DataSourceHelper;
import com.cool.store.utils.RedisUtilPool;
import com.cool.store.service.context.CurrentUser;
import com.google.common.collect.Lists;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.annotation.Order;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Component;
import org.springframework.util.AntPathMatcher;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
import java.util.Objects;
/**
* @author ydw
* @Description 权限校验
* @date 2020/1/15
*/
@Component
@Order(3)
@Slf4j
public class TokenValidateFilter implements Filter {
@Autowired
private RedisUtilPool redisUtilPool;
private static AntPathMatcher matcher = new AntPathMatcher();
private static List<String> patternList =
Lists.newArrayList("/web/check/ok","/check/ok", "/partner/doc.html",
"/**/swagger*/**",
"/**/webjars/**");
/**
* @param uri
* @return boolean
* @throws
* @Title excludePath
* @Description 是否是放行的请求
*/
private boolean excludePath(String uri) {
for (String pattern : patternList) {
if (matcher.match(pattern, uri)) {
return true;
}
}
return false;
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletResponse response = (HttpServletResponse) servletResponse;
HttpServletRequest reqs = (HttpServletRequest) servletRequest;
String uri = reqs.getRequestURI();
String method = reqs.getMethod();
String userStr = "";
CurrentUser currentUser = null;
boolean isInWhiteList = excludePath(uri);
String accessToken = reqs.getParameter("access_token");
String key = "access_token:" + accessToken;
if(StringUtils.isNotBlank(accessToken)){
userStr = redisUtilPool.getString(key);
if(StringUtils.isNotBlank(userStr)){
currentUser = JSON.parseObject(userStr, CurrentUser.class);
}
}
log.info("url:{}", uri);
if ( !isInWhiteList && !method.equals("OPTIONS")) {
if (StringUtils.isEmpty(accessToken)) {
response.setStatus(HttpStatus.OK.value());
response.getWriter().write(JSON.toJSONString(
ResponseResult.fail(ErrorCodeEnum.ACCESS_TOKEN_INVALID)));
return;
}
if (Objects.isNull(currentUser)) {
response.setStatus(HttpStatus.OK.value());
response.getWriter().write(JSON.toJSONString(
ResponseResult.fail(ErrorCodeEnum.ACCESS_TOKEN_INVALID)));
return;
}
log.info("url:{}, access_token:{}, userId:{}, username:{}, enterpriseId:{}", uri, accessToken, currentUser.getUserId(), currentUser.getName(), currentUser.getEnterpriseId());
}
if(StringUtils.isBlank(userStr) && !isInWhiteList){
response.setStatus(HttpStatus.OK.value());
response.getWriter().write(JSON.toJSONString(
ResponseResult.fail(ErrorCodeEnum.ACCESS_TOKEN_INVALID)));
return;
}
try {
UserContext.setUser(userStr);
DataSourceHelper.changeToMy();
filterChain.doFilter(servletRequest, servletResponse);
} finally {
UserContext.removeUser();
}
}
@Override
public void destroy() {
}
}

View File

@@ -1,6 +1,6 @@
package com.cool.store.config.datasource;
import com.cool.store.model.constants.CommonConstants;
import com.cool.store.constants.CommonConstants;
import com.cool.store.service.context.DataSourceContext;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;

View File

@@ -1,9 +1,9 @@
package com.cool.store.config.datasource;
import com.cool.store.model.constants.CommonConstants;
import com.cool.store.model.dto.DatasourceInfoDTO;
import com.cool.store.model.entity.EnterpriseConfigDO;
import com.cool.store.model.utils.RedisUtilPool;
import com.cool.store.constants.CommonConstants;
import com.cool.store.dto.DatasourceInfoDTO;
import com.cool.store.entity.EnterpriseConfigDO;
import com.cool.store.utils.RedisUtilPool;
import com.cool.store.service.EnterpriseConfigService;
import com.cool.store.service.context.DataSourceContext;
import com.github.pagehelper.Page;

View File

@@ -0,0 +1,115 @@
package com.cool.store.config.swagger;
import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j;
import com.google.common.base.Predicate;
import com.google.common.base.Predicates;
import org.apache.commons.lang3.StringUtils;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
import springfox.documentation.RequestHandler;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.ParameterBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.schema.ModelRef;
import springfox.documentation.service.ApiInfo;
import springfox.documentation.service.Parameter;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
import java.util.ArrayList;
import java.util.List;
/**
* @author zhangchenbiao
* @description:
* @date 2023/05/15 02:52
*/
@Profile({"local", "dev", "ab", "test"})
@Configuration
@EnableSwagger2
@EnableKnife4j
public class Swagger2Config {
/**
* 扫描接口地址的包名
*/
public static final String BASE_PACKAGE = "com.cool.store.controller";
private ApiInfo getApiInfo() {
return new ApiInfoBuilder()
.title("coolstore-partner-manage")
.description("接口文档")
.version("1.0")
.build();
}
private Docket createDocket (String groupName, String... packages){
List<Parameter> pars = getParameters();
return new Docket(DocumentationType.SWAGGER_2)
.enable(Boolean.TRUE)
.apiInfo(this.getApiInfo())
.groupName(groupName)
.select()
.apis(this.scanBasePackage(packages))
.build()
.globalOperationParameters(pars);
}
private Docket createDocketByPath (String groupName, String... paths){
List<Parameter> pars = getParameters();
return new Docket(DocumentationType.SWAGGER_2)
.enable(Boolean.TRUE)
.apiInfo(this.getApiInfo())
.groupName(groupName)
.select()
.paths(this.scanPath(paths))
.build()
.globalOperationParameters(pars);
}
private List<Parameter> getParameters() {
List<Parameter> pars = new ArrayList<>();
pars.add(new ParameterBuilder().name("access_token").description("令牌").required(true)
.modelRef(new ModelRef("string"))
.defaultValue("{{access_token}}")
.parameterType("query").build());
pars.add(new ParameterBuilder().name("enterprise-id").required(true)
.modelRef(new ModelRef("string"))
.defaultValue("45f92210375346858b6b6694967f44de")
.parameterType("path").build());
return pars;
}
private Predicate<RequestHandler> scanBasePackage(final String... controllerPack) {
Predicate<RequestHandler> predicate = null;
for (String strBasePackage : controllerPack) {
if(StringUtils.isNotBlank(strBasePackage)){
Predicate<RequestHandler> tempPredicate = RequestHandlerSelectors.basePackage(strBasePackage);
predicate = predicate == null ? tempPredicate : Predicates.or(tempPredicate,predicate);
}
}
return predicate;
}
private Predicate<String> scanPath(final String... paths) {
Predicate<String> predicate = null;
for (String path : paths) {
if(StringUtils.isNotBlank(path)){
Predicate<String> tempPredicate = PathSelectors.ant(path);
predicate = predicate == null ? tempPredicate : Predicates.or(tempPredicate,predicate);
}
}
return predicate;
}
@Bean
public Docket allApi() {
return this.createDocket("全部", BASE_PACKAGE);
}
}

View File

@@ -0,0 +1,65 @@
package com.cool.store.controller;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.cool.store.dto.login.FeiShuLoginDTO;
import com.cool.store.enums.ErrorCodeEnum;
import com.google.protobuf.ServiceException;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
/**
* @author zhangchenbiao
* @FileName: LoginController
* @Description:登录
* @date 2023-05-19 17:22
*/
@RestController
@Slf4j
public class LoginController {
/*@PostMapping(value = "/v3/feiShuLogin")
public Object feiShuLogin(@RequestBody FeiShuLoginDTO param) {
log.info("isvLoginV2 data={}", JSONObject.toJSONString(param));
String code = param.getCode();
String appId = param.getAppId();
String userId = "", corpId = "", appType = AppTypeEnum.FEI_SHU.getValue();
try {
String value = "code=" + code + "&appType=" + appType + "&appId=" + appId;
log.info("url:{}", ding_token_userId + value);
JSONObject userInfo = JSON.parseObject(HttpRequest.sendGet(ding_token_userId, value));
logger.info("userInfo:{}", JSONObject.toJSONString(userInfo));
userId = userInfo.getString("openId");
corpId = userInfo.getString("corpId");
String errorCode = userInfo.getString("error_code");
if (StringUtils.isBlank(userId) && StringUtils.isNotBlank(errorCode)) {
DingLoginErrorEnum dingLoginErrorEnum = DingLoginErrorEnum.getByCode(Integer.getInteger(errorCode));
if (dingLoginErrorEnum != null) {
throw new ServiceException(dingLoginErrorEnum.getCode(), dingLoginErrorEnum.getMsg());
}
}
} catch (Exception e) {
log.error(e.getMessage(), e);
if (e instanceof ServiceException) {
throw e;
} else {
throw new ServiceException(ErrorCodeEnum.PARAMS_VALIDATE_ERROR.getCode(), "用户不存在");
}
}
try {
return loginService.isvLogin(userId, corpId, Boolean.TRUE, appType, StringUtils.EMPTY);
} catch (ServiceException e) {
log.error(e.getMessage(), e);
throw new ServiceException(e.getErrorCode(), e.getErrorMessage());
} catch (Exception e) {
log.error(e.getMessage(), e);
throw new ServiceException(ErrorCodeEnum.PARAMS_VALIDATE_ERROR.getCode(), "登陆失败");
}
}*/
}