Commit 0722baf4 authored by 王亮's avatar 王亮

update v2.

parent d5f001a8
......@@ -4,11 +4,11 @@
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>cn.quantgroup</groupId>
<artifactId>commons-parent</artifactId>
<version>0.5.4</version>
<groupId>cn.quantgroup.boot</groupId>
<artifactId>qg-boot-parent</artifactId>
<version>2.6.3.18</version>
<relativePath/>
</parent>
<artifactId>xyqb-user2</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
......@@ -16,25 +16,10 @@
<name>xyqb-user2</name>
<description>xyqb web application</description>
<profiles>
<profile>
<id>dev</id>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<version>1.5.8.RELEASE</version>
<optional>true</optional>
<scope>true</scope>
</dependency>
</dependencies>
</profile>
</profiles>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<java.version>1.8</java.version>
<junit.version>4.12</junit.version>
<junit.jupiter.version>5.0.2</junit.jupiter.version>
<maven.test.skip>true</maven.test.skip>
<org.springframework.security.version>3.2.7.RELEASE</org.springframework.security.version>
......@@ -42,35 +27,39 @@
<dependencies>
<dependency>
<groupId>com.sensorsdata.analytics.javasdk</groupId>
<artifactId>SensorsAnalyticsSDK</artifactId>
<version>3.2.0</version>
<groupId>cn.quantgroup.boot</groupId>
<artifactId>qg-apollo-starter</artifactId>
</dependency>
<dependency>
<groupId>cn.quantgroup.boot</groupId>
<artifactId>qg-web-starter</artifactId>
</dependency>
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-core</artifactId>
<version>RELEASE</version>
<groupId>cn.quantgroup.boot</groupId>
<artifactId>qg-discovery-starter</artifactId>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>RELEASE</version>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
<!-- swagger2 end -->
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.3.1</version>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-sleuth-zipkin</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.amqp</groupId>
<artifactId>spring-rabbit</artifactId>
<groupId>com.sensorsdata.analytics.javasdk</groupId>
<artifactId>SensorsAnalyticsSDK</artifactId>
<version>3.2.0</version>
</dependency>
<dependency>
<groupId>org.springframework.integration</groupId>
<artifactId>spring-integration-amqp</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.61</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
......@@ -99,18 +88,26 @@
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
<groupId>cn.quantgroup.boot</groupId>
<artifactId>qg-micrometer-register-kafka-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-undertow</artifactId>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-web-servlet</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>
<dependency>
<groupId>org.hibernate.validator</groupId>
<artifactId>hibernate-validator</artifactId>
<version>6.2.0.Final</version>
</dependency>
<dependency>
<groupId>com.alibaba.csp</groupId>
<artifactId>sentinel-datasource-apollo</artifactId>
<version>1.8.3</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
......@@ -121,45 +118,32 @@
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>${junit.jupiter.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-params</artifactId>
<version>${junit.jupiter.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>${junit.version}</version>
<scope>test</scope>
</dependency>
<!-- hibernate -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.0.3.Final</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.0.4.Final</version>
<version>5.6.14.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-ehcache</artifactId>
<version>5.0.4.Final</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.47</version>
<version>5.6.14.Final</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpcore</artifactId>
......@@ -198,19 +182,16 @@
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.5.3</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.5.3</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.5.3</version>
</dependency>
<dependency>
......@@ -231,11 +212,7 @@
<artifactId>commons-codec</artifactId>
<version>1.10</version>
</dependency>
<dependency>
<groupId>com.rabbitmq</groupId>
<artifactId>amqp-client</artifactId>
<version>4.0.3</version>
</dependency>
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
......@@ -266,20 +243,6 @@
<artifactId>poi</artifactId>
<version>3.10-FINAL</version>
</dependency>
<dependency>
<groupId>com.ctrip.framework.apollo</groupId>
<artifactId>apollo-client</artifactId>
<version>0.10.2</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>cn.quantgroup</groupId>
<artifactId>commons-spring</artifactId>
</dependency>
<dependency>
<groupId>cn.quantgroup</groupId>
<artifactId>shutdown-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
......@@ -314,11 +277,6 @@
<artifactId>quantgroup-sms-sdk</artifactId>
<version>3.0</version>
</dependency>
<dependency>
<groupId>io.sentry</groupId>
<artifactId>sentry-spring</artifactId>
<version>1.7.30</version>
</dependency>
<dependency>
<groupId>com.vaadin.external.google</groupId>
<artifactId>android-json</artifactId>
......@@ -340,8 +298,8 @@
<version>2.1.0</version>
<exclusions>
<exclusion>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy</artifactId>
</exclusion>
</exclusions>
</dependency>
......@@ -353,7 +311,6 @@
<dependency>
<groupId>io.netty</groupId>
<artifactId>netty-all</artifactId>
<version>4.1.77.Final</version>
</dependency>
</dependencies>
......@@ -374,19 +331,6 @@
<fork>true</fork>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<encoding>UTF-8</encoding>
<compilerArgs>
<arg>-Xlint:unchecked</arg>
</compilerArgs>
</configuration>
</plugin>
</plugins>
</build>
......
package cn.quantgroup.xyqb;
import cn.quantgroup.xyqb.config.SequencerProperties;
import com.ctrip.framework.apollo.spring.annotation.EnableApolloConfig;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
import org.springframework.scheduling.annotation.EnableAsync;
......@@ -18,6 +20,8 @@ import org.springframework.scheduling.annotation.EnableAsync;
* -Denv=dev -Didc=k8s -Dlogging.config=classpath:logback-dev.xml -DNAMESPACE=xxx -Dserver.port=8099
*/
@Slf4j
@EnableApolloConfig
@EnableDiscoveryClient
@ComponentScan(basePackages = {"cn.quantgroup"})
@EnableCaching
@EnableAsync
......
......@@ -11,7 +11,6 @@ import javax.persistence.EntityManagerFactory;
import javax.sql.DataSource;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.DependsOn;
......
......@@ -7,7 +7,7 @@ import javax.persistence.EntityManagerFactory;
import javax.sql.DataSource;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.DependsOn;
......
package cn.quantgroup.xyqb.config.data;
import cn.quantgroup.xyqb.session.XyqbSessionContextHolder;
import java.util.HashSet;
import java.util.Set;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cache.CacheManager;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.cache.RedisCacheManager;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.connection.RedisNode;
import org.springframework.data.redis.connection.RedisSentinelConfiguration;
import org.springframework.data.redis.connection.RedisStandaloneConfiguration;
import org.springframework.data.redis.connection.jedis.JedisConnectionFactory;
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.serializer.JdkSerializationRedisSerializer;
import org.springframework.data.redis.serializer.StringRedisSerializer;
import redis.clients.jedis.JedisPoolConfig;
/**
* Created by Miraculous on 15/7/4.
......@@ -46,48 +42,19 @@ public class RedisConfig {
private int sentinel3port;
private RedisConnectionFactory generateDevConnectionFactory() {
JedisConnectionFactory factory = new JedisConnectionFactory();
factory.setHostName(masterHost);
factory.setPort(masterPort);
factory.setUsePool(true);
factory.setConvertPipelineAndTxResults(true);
JedisPoolConfig poolConfig = generatePoolConfig();
factory.setPoolConfig(poolConfig);
factory.afterPropertiesSet();
return factory;
}
RedisStandaloneConfiguration config = new RedisStandaloneConfiguration(
masterHost, masterPort);
private RedisConnectionFactory generateReleaseConnectionFactory() {
RedisSentinelConfiguration sentinelConfiguration = new RedisSentinelConfiguration();
RedisNode master = new RedisNode(masterHost, masterPort);
master.setName(masterName);
Set<RedisNode> sentinels = new HashSet<>();
RedisNode sentinel1 = new RedisNode(sentinel1Host, sentinel1port);
RedisNode sentinel2 = new RedisNode(sentinel2Host, sentinel2port);
RedisNode sentinel3 = new RedisNode(sentinel3Host, sentinel3port);
sentinels.add(sentinel1);
sentinels.add(sentinel2);
sentinels.add(sentinel3);
sentinelConfiguration.setMaster(master);
sentinelConfiguration.setSentinels(sentinels);
JedisPoolConfig poolConfig = generatePoolConfig();
JedisConnectionFactory factory = new JedisConnectionFactory(sentinelConfiguration, poolConfig);
factory.setHostName(masterHost);
factory.setPort(masterPort);
factory.setTimeout(5000);
factory.setUsePool(true);
factory.setConvertPipelineAndTxResults(true);
factory.afterPropertiesSet();
return factory;
return new LettuceConnectionFactory(config);
}
private JedisPoolConfig generatePoolConfig() {
JedisPoolConfig poolConfig = new JedisPoolConfig();
poolConfig.setMinIdle(20);
poolConfig.setMaxTotal(300);
poolConfig.setMaxWaitMillis(5000);
poolConfig.setTestOnBorrow(true);
return poolConfig;
private RedisConnectionFactory generateReleaseConnectionFactory() {
RedisSentinelConfiguration sentinelConfig = new RedisSentinelConfiguration()
.master(masterName)
.sentinel(sentinel1Host, sentinel1port)
.sentinel(sentinel2Host, sentinel2port)
.sentinel(sentinel3Host,sentinel3port);
return new LettuceConnectionFactory(sentinelConfig);
}
@Bean(name = "redisConnectionFactory")
......@@ -131,11 +98,4 @@ public class RedisConfig {
return template;
}
@Bean(name = "cacheManager")
public CacheManager cacheManager(RedisTemplate<String, Object> redisTemplate) {
RedisCacheManager cacheManager = new RedisCacheManager(redisTemplate);
cacheManager.setDefaultExpiration(defaultExpiration);
cacheManager.setUsePrefix(true);
return cacheManager;
}
}
package cn.quantgroup.xyqb.config.event;
import cn.quantgroup.tool.monitor.metric.api.ExecutorUtils;
import com.rabbitmq.client.impl.VariableLinkedBlockingQueue;
import java.util.concurrent.Executor;
import java.util.concurrent.RejectedExecutionHandler;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
......@@ -9,11 +12,6 @@ import org.springframework.context.event.ApplicationEventMulticaster;
import org.springframework.context.event.SimpleApplicationEventMulticaster;
import org.springframework.scheduling.support.TaskUtils;
import java.util.concurrent.Executor;
import java.util.concurrent.RejectedExecutionHandler;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
@Slf4j
@Configuration
public class EventConfig {
......@@ -25,19 +23,4 @@ public class EventConfig {
simpleApplicationEventMulticaster.setErrorHandler(TaskUtils.LOG_AND_PROPAGATE_ERROR_HANDLER);
return simpleApplicationEventMulticaster;
}
@Bean
public Executor taskExecutor() {
return ExecutorUtils.newExecutor(10, 50, 60, TimeUnit.SECONDS, new VariableLinkedBlockingQueue(1024), "Spring-UserLogin-Event");
}
public static class RejectedHandler implements RejectedExecutionHandler {
@Override
public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) {
log.error("rejected : {}", r);
}
}
}
package cn.quantgroup.xyqb.config.http;
import cn.quantgroup.tool.monitor.metric.api.TechHttpClient;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.SerializationFeature;
......@@ -25,6 +24,7 @@ import org.apache.http.cookie.CookieOrigin;
import org.apache.http.cookie.CookieSpecProvider;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.DefaultConnectionKeepAliveStrategy;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.client.StandardHttpRequestRetryHandler;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.apache.http.impl.cookie.BestMatchSpecFactory;
......@@ -138,7 +138,7 @@ public class HttpConfig {
ConnectionKeepAliveStrategy keepAliveStrategy = new DefaultConnectionKeepAliveStrategy();
// httpclient
return TechHttpClient.createHttpClientBuilder()
return HttpClientBuilder.create()
.setConnectionManager(connectionManager)
.setRetryHandler(retryHandler)
.setKeepAliveStrategy(keepAliveStrategy)
......
package cn.quantgroup.xyqb.config.sentry;
import cn.quantgroup.xyqb.exception.AccessForbiddenException;
import cn.quantgroup.xyqb.exception.AppletException;
import cn.quantgroup.xyqb.exception.DataException;
import cn.quantgroup.xyqb.exception.PasswordErrorLimitException;
import cn.quantgroup.xyqb.exception.UserRegisterLoginException;
import cn.quantgroup.xyqb.exception.VerificationCodeErrorException;
import io.sentry.Sentry;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.core.Ordered;
import org.springframework.security.authentication.BadCredentialsException;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;
/**
* {@link HandlerExceptionResolver} implementation that will record any exception that a
* Spring {@link org.springframework.web.servlet.mvc.Controller} throws to Sentry. It then
* returns null, which will let the other (default or custom) exception resolvers handle
* the actual error.
*/
public class CustomSentryExceptionResolver implements HandlerExceptionResolver, Ordered {
@Override
public ModelAndView resolveException(HttpServletRequest request,
HttpServletResponse response,
Object handler,
Exception ex) {
// TODO: 2020/2/4 临时测试,后期修改成通用。
if (ex instanceof VerificationCodeErrorException || ex instanceof DataException || ex instanceof UserRegisterLoginException
|| ex instanceof AppletException || ex instanceof AccessForbiddenException || ex instanceof PasswordErrorLimitException || ex instanceof BadCredentialsException) {
return null;
}
Sentry.capture(ex);
// null = run other HandlerExceptionResolvers to actually handle the exception
return null;
}
@Override
public int getOrder() {
// ensure this resolver runs first so that all exceptions are reported
return Integer.MIN_VALUE;
}
}
\ No newline at end of file
package cn.quantgroup.xyqb.config.sentry;
import cn.quantgroup.tech.util.TechEnvironment;
import brave.Tracing;
import brave.propagation.TraceContext;
import cn.quantgroup.boot.web.util.TechEnvironment;
import io.sentry.Sentry;
import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.servlet.ServletContextInitializer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.core.env.Environment;
/**
* 初始化Sentry配置
......@@ -20,20 +22,33 @@ public class SentryConfig {
@Value("${dsn}")
private String dsn;
@Bean
public HandlerExceptionResolver sentryExceptionResolver() {
return new CustomSentryExceptionResolver();
}
@Bean
public ServletContextInitializer sentryServletContextInitializer() {
return new io.sentry.spring.SentryServletContextInitializer();
}
@Resource
private Tracing tracing;
@Autowired
private Environment environment;
@PostConstruct
public void initSentry(){
public void initSentry() {
environment.getActiveProfiles();
if (TechEnvironment.isPro()) {
Sentry.init(dsn);
Sentry.init(options -> {
options.setDsn(dsn);
options.setBeforeSend((event, hint) -> {
if (tracing.currentTraceContext() != null) {
TraceContext traceContext = tracing.currentTraceContext().get();
if (traceContext != null) {
event.setTag("tracingId", traceContext.traceIdString());
event.setTag("spanId", Long.toHexString(traceContext.spanId()));
event.setTag("parentId", traceContext.parentId() == null ? null : Long.toHexString(traceContext.parentId()));
}
}
return event;
});
});
}
}
}
package cn.quantgroup.xyqb.config.swagger;
/**
* Swagger文档框架
* 这个第三方新版本竟然不兼容旧的服气啊 没有再用了直接干掉
*
*/
@Deprecated
//@EnableSwagger2
//@Configuration
public class SwaggerConfig {
// @Value("${openapi.swagger.on:false}")
//// private Boolean swaggerOn;
////
//// @Bean
//// public Docket createRestApi() {
//// return new Docket(DocumentationType.SWAGGER_2)
//// .useDefaultResponseMessages(false)
//// .enable(swaggerOn)
//// .apiInfo(apiInfo())
//// .select()
//// .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
//// .paths(PathSelectors.any())
//// .paths(Predicates.not(PathSelectors.regex("/error.*")))
//// .build();
//// }
////
//// private ApiInfo apiInfo() {
//// return new ApiInfoBuilder()
//// .title("xyqb-user api")
//// .description("用户中心接口文档")
//// .contact(new Contact("wenchao.ren", "", "wenchao.ren@quantgroup.cn"))
//// .license("Apache License Version 2.0")
//// .licenseUrl("https://github.com/springfox/springfox/blob/master/LICENSE")
//// .version("2.0")
//// .build();
//// }
}
package cn.quantgroup.xyqb.controller.external.sms;
import cn.quantgroup.boot.web.util.TechEnvironment;
import cn.quantgroup.sms.MsgParams;
import cn.quantgroup.tech.util.TechEnvironment;
import cn.quantgroup.xyqb.Constants;
import cn.quantgroup.xyqb.aspect.captcha.CaptchaNewValidator;
import cn.quantgroup.xyqb.controller.IBaseController;
......
......@@ -30,7 +30,6 @@ public class ContactRegisteredEventListener implements ApplicationListener<Regis
}
contactList.forEach(contact -> contact.setUserId(user.getId()));
contactRepository.save(contactList);
contactRepository.saveAll(contactList);
}
}
......@@ -30,7 +30,7 @@ public class NotifyWechatBindEventListener implements ApplicationListener<Wechat
log.info("微信绑定数据,没有用户 ID 信息,openId:{}", wechatEventMsg.getOpenId());
return;
}
User user = userRepository.findById(wechatEventMsg.getUserId());
User user = userRepository.getById(wechatEventMsg.getUserId());
if (user == null) {
log.info("微信绑定数据,没有用户信息,openId:{},userId:{}", wechatEventMsg.getOpenId(), wechatEventMsg.getUserId());
return;
......
......@@ -40,7 +40,6 @@ public interface IUserRepository extends JpaRepository<User, Long>, JpaSpecifica
List<User> findByIdIn(List<Long> ids);
User findById(Long id);
@Query(value = "select * from user where created_at>=?1 and created_at<?2 ", nativeQuery = true)
List<User> findRegisterUserByTime(String beginTime, String endTime);
......
package cn.quantgroup.xyqb.service.http.impl;
import cn.quantgroup.tool.monitor.metric.api.TechHttpClient;
import cn.quantgroup.xyqb.service.http.BodyType;
import cn.quantgroup.xyqb.service.http.IHttpService;
import cn.quantgroup.xyqb.util.PasswordUtil;
......@@ -44,6 +43,7 @@ import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.DefaultConnectionKeepAliveStrategy;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.client.StandardHttpRequestRetryHandler;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.apache.http.impl.cookie.BestMatchSpecFactory;
......@@ -198,7 +198,7 @@ public class HttpServiceImpl implements IHttpService {
ConnectionKeepAliveStrategy keepAliveStrategy = new DefaultConnectionKeepAliveStrategy();
// httpclient
return TechHttpClient.createHttpClientBuilder()
return HttpClientBuilder.create()
.setConnectionManager(connectionManager)
.setRetryHandler(retryHandler)
.setKeepAliveStrategy(keepAliveStrategy)
......
package cn.quantgroup.xyqb.service.sms.impl;
import cn.quantgroup.boot.web.util.TechEnvironment;
import cn.quantgroup.sms.MsgParams;
import cn.quantgroup.sms.SmsSender;
import cn.quantgroup.tech.util.TechEnvironment;
import cn.quantgroup.xyqb.Constants;
import cn.quantgroup.xyqb.service.sms.ISmsService;
import java.util.Collections;
......
......@@ -46,7 +46,7 @@ public class ContactServiceImpl implements IContactService {
@Override
public Contact findById(Long id) {
return contactRepository.findOne(id);
return contactRepository.getById(id);
}
@Override
......@@ -59,7 +59,7 @@ public class ContactServiceImpl implements IContactService {
}
// 合并当前用户列表到更新列表
mergeContacts(userId, contacts);
return contactRepository.save(contacts);
return contactRepository.saveAll(contacts);
}
@Override
......@@ -93,7 +93,7 @@ public class ContactServiceImpl implements IContactService {
@Override
public void save(List<Contact> contactList) {
contactRepository.save(contactList);
contactRepository.saveAll(contactList);
}
@Override
......
......@@ -37,6 +37,7 @@ import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.data.domain.Sort.Direction;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
......@@ -94,7 +95,7 @@ public class ModifyPhoneNoServiceImpl implements IModifyPhoneNoService {
@Override
@Transactional(rollbackFor = Exception.class)
public void saveStep2(Step2Req step2Req) {
ModifyPhoneNo modifyPhoneNo = modifyPhoneNoRepository.findOne(step2Req.getId());
ModifyPhoneNo modifyPhoneNo = modifyPhoneNoRepository.getById(step2Req.getId());
if (modifyPhoneNo == null) {
throw new DataException("数据不存在。");
}
......@@ -134,9 +135,11 @@ public class ModifyPhoneNoServiceImpl implements IModifyPhoneNoService {
@Override
public Page<ModifyPhoneNo> list(ModifyPhoneNoQueryReq modifyPhoneNoQueryReq) {
Sort.Order order = new Sort.Order(Sort.Direction.DESC, "id");
Sort sort = new Sort(order);
Pageable pageable = new PageRequest(modifyPhoneNoQueryReq.getPage() - 1, modifyPhoneNoQueryReq.getSize(), sort);
Sort.Order sort = new Sort.Order(Direction.DESC, "id");
PageRequest pageable = PageRequest.of(modifyPhoneNoQueryReq.getPage() - 1, modifyPhoneNoQueryReq.getSize(),
sort.getDirection());
Specification<ModifyPhoneNo> specification = new Specification<ModifyPhoneNo>() {
@Override
......@@ -187,7 +190,7 @@ public class ModifyPhoneNoServiceImpl implements IModifyPhoneNoService {
@Override
@Transactional(rollbackFor = Exception.class)
public void feedback(Long id) {
ModifyPhoneNo modifyPhoneNo = modifyPhoneNoRepository.findOne(id);
ModifyPhoneNo modifyPhoneNo = modifyPhoneNoRepository.getById(id);
if (modifyPhoneNo == null) {
throw new DataException("数据不存在。");
}
......@@ -197,7 +200,7 @@ public class ModifyPhoneNoServiceImpl implements IModifyPhoneNoService {
@Override
@Transactional(rollbackFor = Exception.class)
public void audit(AuditReq auditReq) {
ModifyPhoneNo modifyPhoneNo = modifyPhoneNoRepository.findOne(auditReq.getId());
ModifyPhoneNo modifyPhoneNo = modifyPhoneNoRepository.getById(auditReq.getId());
if (modifyPhoneNo == null) {
throw new DataException("数据不存在。");
}
......
......@@ -5,6 +5,7 @@ import cn.quantgroup.xyqb.repository.IUserBtRegisterRepository;
import cn.quantgroup.xyqb.service.user.IUserBtRegisterService;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import javax.persistence.criteria.Predicate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
......@@ -21,7 +22,7 @@ public class UserBtRegisterServiceImpl implements IUserBtRegisterService {
// @Cacheable(value = "btRegisterCache", key = "'userId' + #userId", unless = "#result == null", cacheManager = "cacheManager")
public UserBtRegister findByUserId(Long userId) {
if (null != userId) {
return userBtRegisterRepository.findOne((root, query, cb) -> {
Optional<UserBtRegister> result = userBtRegisterRepository.findOne((root, query, cb) -> {
List<Predicate> list = new ArrayList<>();
list.add(cb.equal(root.get("isActive").as(Boolean.class), Boolean.TRUE));
list.add(cb.equal(root.get("userId").as(Long.class), userId));
......@@ -29,6 +30,9 @@ public class UserBtRegisterServiceImpl implements IUserBtRegisterService {
query.where(cb.and(list.toArray(p)));
return query.getRestriction();
});
if(result.isPresent()){
return result.get();
}
}
return null;
}
......
......@@ -27,6 +27,7 @@ import org.springframework.dao.DataIntegrityViolationException;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.data.domain.Sort.Direction;
import org.springframework.data.jpa.domain.Specification;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
......@@ -57,7 +58,7 @@ public class UserDetailServiceImpl implements IUserDetailService {
userDetail.setEmail(AddressFilter.getEmail(userDetail.getPhoneNo(), userDetail.getEmail()));
return userDetail;
}
@Override
public UserDetail findSlaveByUserId(Long userId) {
UserDetail userDetail = userDetailRepository.findByUserId(userId);
......@@ -222,12 +223,16 @@ public class UserDetailServiceImpl implements IUserDetailService {
}
private PageRequest buildPageRequest(int pageNumber, int pagzSize, String sortType) {
Sort sort = null;
Sort.Order sort = null;
if (Constants.AUTO_SORT_TYPE.equals(sortType)) {
sort = new Sort(Sort.Direction.ASC, "userId");
sort = new Sort.Order(Sort.Direction.ASC, "userId");
}
return new PageRequest(pageNumber - 1, pagzSize, sort);
if (sort != null) {
return PageRequest.of(pageNumber - 1, pagzSize, sort.getDirection());
}else{
return PageRequest.of(pageNumber - 1, pagzSize);
}
}
@Override
......
......@@ -184,12 +184,12 @@ public class UserServiceImpl implements IUserService, IBaseController {
@Override
public User findById(Long userId) {
return userRepository.findById(userId);
return userRepository.getById(userId);
}
@Override
public List<User> findByPhones(List<String> phones) {
Pageable pageable = new PageRequest(0, 500, new Sort(Sort.Direction.DESC, "id"));
Pageable pageable = PageRequest.of(0, 500, new Sort.Order(Sort.Direction.DESC, "id").getDirection());
Page<User> userPageList = userRepository.findAll((root, query, cb) -> {
query.where(root.get(Constants.ENCRYPTED_PHONE_NO).as(String.class).in(phones));
return query.getRestriction();
......@@ -311,7 +311,7 @@ public class UserServiceImpl implements IUserService, IBaseController {
return null;
}
Long userId = userHashMapping.getUserId();
return userRepository.findById(userId);
return userRepository.getById(userId);
}
@Override
......@@ -333,7 +333,7 @@ public class UserServiceImpl implements IUserService, IBaseController {
return null;
}
Long userId = userHashMapping.getUserId();
return userRepository.findById(userId);
return userRepository.getById(userId);
}
@Override
......@@ -491,7 +491,7 @@ public class UserServiceImpl implements IUserService, IBaseController {
*/
@Override
public UserFullResp findUserFullSearchByUserId(Long userId) {
User user = userRepository.findById(userId);
User user = userRepository.getById(userId);
UserDetail userDetail = userDetailService.findByUserId(userId);
UserExtInfo userExtInfo = userExtInfoService.findByUserId(userId);
Address address = addressService.findByUserId(userId);
......@@ -595,7 +595,7 @@ public class UserServiceImpl implements IUserService, IBaseController {
@Override
public void deregister(Long userId) {
User user = userRepository.findById(userId);
User user = userRepository.getById(userId);
if (Objects.isNull(user)) {
throw new UserRegisterLoginException("用户不存在");
......
package cn.quantgroup.xyqb.util;
import cn.quantgroup.tech.util.TechEnvironment;
import cn.quantgroup.boot.web.util.TechEnvironment;
import com.google.common.collect.Sets;
import java.util.Arrays;
import java.util.Objects;
......
package cn.quantgroup.xyqb.util;
import com.xxl.job.core.executor.XxlJobExecutor;
import com.xxl.job.core.handler.IJobHandler;
import com.xxl.job.core.handler.annotation.JobHandler;
import java.util.Iterator;
import java.util.Map;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
public class XxlJobSpringExecutor extends XxlJobExecutor implements ApplicationContextAware {
private static ApplicationContext applicationContext;
public void start() throws Exception {
this.initJobHandlerRepository(applicationContext);
super.start();
}
private void initJobHandlerRepository(ApplicationContext applicationContext) {
if (applicationContext != null) {
Map<String, Object> serviceBeanMap = applicationContext
.getBeansWithAnnotation(JobHandler.class);
if (serviceBeanMap != null && serviceBeanMap.size() > 0) {
Iterator var3 = serviceBeanMap.values().iterator();
while (var3.hasNext()) {
Object serviceBean = var3.next();
if (serviceBean instanceof IJobHandler) {
String name = ((JobHandler) serviceBean.getClass().getAnnotation(JobHandler.class))
.value();
IJobHandler handler = (IJobHandler) serviceBean;
if (loadJobHandler(name) != null) {
throw new RuntimeException("xxl-job jobhandler naming conflicts.");
}
registJobHandler(name, handler);
}
}
}
}
}
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
XxlJobSpringExecutor.applicationContext = applicationContext;
}
public static ApplicationContext getApplicationContext() {
return applicationContext;
}
}
package cn.quantgroup.xyqb.xxlJob;
import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
import cn.quantgroup.xyqb.util.XxlJobSpringExecutor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
......@@ -32,35 +32,20 @@ public class XxlJobConfig {
@Bean(initMethod = "start", destroyMethod = "destroy")
public XxlJobSpringExecutor xxlJobExecutor() {
public XxlJobSpringExecutor xxlJobSpringExecutor() {
//如果是预发环境,不启动xxljob
if(appName.equalsIgnoreCase("keystone-pre")){
return null;
}
log.info(">>>>>>>>>>> xxl-job config init.");
XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
// 调度中心部署跟地址 [选填]:如调度中心集群部署存在多个地址则用逗号分隔。执行器将会使用该地址进行"执行器心跳注册"和"任务结果回调";为空则关闭自动注册;
xxlJobSpringExecutor.setAdminAddresses(adminAddresses);
// 执行器AppName [选填]:执行器心跳注册分组依据;为空则关闭自动注册
xxlJobSpringExecutor.setAppName(appName);
//xxlJobSpringExecutor.setAppName("xxl-job-executor-vcc-analysis");
// 执行器IP [选填]:默认为空表示自动获取IP,多网卡时可手动设置指定IP,该IP不会绑定Host仅作为通讯实用;地址信息用于 "执行器注册" 和 "调度中心请求并触发任务";
xxlJobSpringExecutor.setIp(ip);
// 执行器端口号 [选填]:小于等于0则自动获取;默认端口为9999,单机部署多个执行器时,注意要配置不同执行器端口;
xxlJobSpringExecutor.setPort(port);
// 执行器通讯TOKEN [选填]:非空时启用;调度中心和执行器进行安全性校验,双方AccessToken匹配才允许通讯
xxlJobSpringExecutor.setAccessToken(accessToken);
// 执行器运行日志文件存储磁盘路径 [选填] :需要对该路径拥有读写权限;为空则使用默认路径;
xxlJobSpringExecutor.setLogPath(logPath);
// 执行器日志保存天数 [选填] :值大于3时生效,启用执行器Log文件定期清理功能,否则不生效;
xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);
return xxlJobSpringExecutor;
}
}
app.id=xyqb-user2
namespace=application,cash.common,tech.common,tech.sleuth,tech.service.urls,tech.msg.sdk,tech.acolyte
\ No newline at end of file
namespace=application,cash.common,tech.common,tech.sleuth,tech.service.urls,tech.msg.sdk,tech.acolyte,tech.supply
\ No newline at end of file
......@@ -75,7 +75,7 @@
<!--<logger name="org.hibernate.type.descriptor.sql.BasicBinder" level="${logging.hibernate.level}"/>-->
<!--<logger name="org.hibernate.engine.QueryParameters" level="DEBUG"/>-->
<!--<logger name="org.hibernate.SQL" level="DEBUG" />-->
<root level="DEBUG">
<root level="INFO">
<appender-ref ref="STDOUT"/>
<appender-ref ref="ROLLINGFILE"/>
</root>
......
package login;
import cn.quantgroup.tool.monitor.metric.api.TechHttpClient;
import cn.quantgroup.xyqb.Bootstrap;
import cn.quantgroup.xyqb.Constants;
import cn.quantgroup.xyqb.controller.external.UserController;
......@@ -21,6 +20,7 @@ import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.junit.Test;
......@@ -93,7 +93,7 @@ public class UserLoginTest {
String token = authBean.getToken();
System.out.println("user token:" + token);
//用获取到的token请求xyqb的receive_token
CloseableHttpClient httpClient = TechHttpClient.createHttpClientBuilder().build();
CloseableHttpClient httpClient = HttpClientBuilder.create().build();
HttpPost post = new HttpPost("http://localhost:9004/ex/login/receive_token");
List<NameValuePair> pairList = new ArrayList<>();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment