Commit fe0b4108 authored by 黎博's avatar 黎博

Initial commit

parents
HELP.md
target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**
!**/src/test/**
### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/
### VS Code ###
.vscode/
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.1.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>cn.quantgroup</groupId>
<artifactId>qa-platform</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>qa-platform</name>
<description>qa platform service</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--common-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-io</artifactId>
<version>1.3.2</version>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.0</version>
</dependency>
<!--mybatis-->
<!-- <dependency>-->
<!-- <groupId>org.mybatis.spring.boot</groupId>-->
<!-- <artifactId>mybatis-spring-boot-starter</artifactId>-->
<!-- <version>2.1.2</version>-->
<!-- </dependency>-->
<!--mybatis-plus-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.3.2</version>
</dependency>
<!-- pageHelper分页插件 -->
<!-- <dependency>-->
<!-- <groupId>com.github.pagehelper</groupId>-->
<!-- <artifactId>pagehelper</artifactId>-->
<!-- <version>5.1.2</version>-->
<!-- </dependency>-->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.12</version>
</dependency>
<!--mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.48</version>
</dependency>
<!--集成druid连接池-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.1.10</version>
</dependency>
<!--lombok-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
</dependency>
<!-- log4j -->
<dependency>
<groupId>org.apache.logging.log4j</groupId>
<artifactId>log4j-1.2-api</artifactId>
<version>2.11.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.httpcomponents/httpclient -->
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.12</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
package cn.quantgroup.qaplatform;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
@SpringBootApplication
@MapperScan(value = "cn.quantgroup.qaplatform.dao")
public class QaPlatformApplication {
public static void main(String[] args) {
SpringApplication.run(QaPlatformApplication.class, args);
}
}
package cn.quantgroup.qaplatform.common;
import cn.quantgroup.qaplatform.common.enums.ErrorType;
import lombok.Data;
/**
* 统一返回的json格式
*/
@Data
public class JsonResult<T> {
private Long code = ErrorType.SUCCESS.getCode();
private String msg = ErrorType.SUCCESS.getMessage();
private T data;
private Long timestamp;
private JsonResult() {
this.timestamp = System.currentTimeMillis();
}
private JsonResult(ErrorType errorType, String msg, T data) {
this();
this.code = errorType.getCode();
this.msg = msg;
this.data = data;
}
/**
* 成功
*/
public static <T> JsonResult<T> success() {
return buildResult(ErrorType.SUCCESS);
}
public static <T> JsonResult<T> success(T data) {
return buildResult(ErrorType.SUCCESS, ErrorType.SUCCESS.getMessage(), data);
}
/**
* 客户端失败
*/
public static <T> JsonResult<T> clientFailed() {
return buildResult(ErrorType.CLIENT_FAILED);
}
public static <T> JsonResult<T> clientFailed(T data) {
return buildResult(ErrorType.CLIENT_FAILED, ErrorType.CLIENT_FAILED.getMessage(), data);
}
/**
* 服务器失败
*/
public static <T> JsonResult<T> serverFailed() {
return buildResult(ErrorType.SERVER_FAILED);
}
public static <T> JsonResult<T> serverFailed(T data) {
return buildResult(ErrorType.SERVER_FAILED, ErrorType.SERVER_FAILED.getMessage(), data);
}
/**
* 构建data为null的响应结果
*/
public static <T> JsonResult<T> buildResult(ErrorType errorType) {
return new JsonResult<T>(errorType, errorType.getMessage(), null);
}
/**
* 构建带data的响应接口
*/
public static <T> JsonResult<T> buildResult(ErrorType errorType, String msg, T data) {
return new JsonResult<T>(errorType, msg, data);
}
}
package cn.quantgroup.qaplatform.common;
import cn.quantgroup.qaplatform.common.enums.Namespace;
import cn.quantgroup.qaplatform.config.DynamicDataSource;
import com.alibaba.druid.pool.DruidDataSource;
/**
* 切换数据源
* @author libo
*/
public class SwitchDataSource {
public static final String SUFFIX = "?characterEncoding=utf-8&useSSL=false&serverTimezone=UTC&useAffectedRows=true";
public static void dataSourceSwitch(String namespace, String database) {
/**
* PRE 环境
*/
if (namespace.equals("pre")) {
DruidDataSource druidDataSource = new DruidDataSource();
String url = Namespace.PRE.getUrl() + database + SUFFIX;
String dbKey = Namespace.PRE.getKey();
druidDataSource.setUrl(url);
druidDataSource.setUsername(Namespace.PRE.getUsername());
druidDataSource.setPassword(Namespace.PRE.getPassword());
DynamicDataSource.dataSourcesMap.put(dbKey, druidDataSource);
DynamicDataSource.setDataSource(dbKey);
}
/**
* qa 环境
*/
if (namespace.equals("qa")) {
DruidDataSource druidDataSource = new DruidDataSource();
String url = Namespace.QA.getUrl() + database + SUFFIX;
String dbKey = Namespace.QA.getKey();
druidDataSource.setUrl(url);
druidDataSource.setUsername(Namespace.QA.getUsername());
druidDataSource.setPassword(Namespace.QA.getPassword());
DynamicDataSource.dataSourcesMap.put(dbKey, druidDataSource);
DynamicDataSource.setDataSource(dbKey);
}
/**
* qa2 环境
*/
if (namespace.equals("qa2")) {
DruidDataSource druidDataSource = new DruidDataSource();
String url = Namespace.QA2.getUrl() + database + SUFFIX;
String dbKey = Namespace.QA2.getKey();
druidDataSource.setUrl(url);
druidDataSource.setUsername(Namespace.QA2.getUsername());
druidDataSource.setPassword(Namespace.QA2.getPassword());
DynamicDataSource.dataSourcesMap.put(dbKey, druidDataSource);
DynamicDataSource.setDataSource(dbKey);
}
/**
* qa3 环境
*/
if (namespace.equals("qa3")) {
DruidDataSource druidDataSource = new DruidDataSource();
String url = Namespace.QA3.getUrl() + database + SUFFIX;
String dbKey = Namespace.QA3.getKey();
druidDataSource.setUrl(url);
druidDataSource.setUsername(Namespace.QA3.getUsername());
druidDataSource.setPassword(Namespace.QA3.getPassword());
DynamicDataSource.dataSourcesMap.put(dbKey, druidDataSource);
DynamicDataSource.setDataSource(dbKey);
}
/**
* test1 环境
*/
if (namespace.equals("test1")) {
DruidDataSource druidDataSource = new DruidDataSource();
String url = Namespace.TEST1.getUrl() + database + SUFFIX;
String dbKey = Namespace.TEST1.getKey();
druidDataSource.setUrl(url);
druidDataSource.setUsername(Namespace.TEST1.getUsername());
druidDataSource.setPassword(Namespace.TEST1.getPassword());
DynamicDataSource.dataSourcesMap.put(dbKey, druidDataSource);
DynamicDataSource.setDataSource(dbKey);
}
/**
* xjfq 环境
*/
if (namespace.equals("xjfq")) {
DruidDataSource druidDataSource = new DruidDataSource();
String url = Namespace.XJFQ.getUrl() + database + SUFFIX;
String dbKey = Namespace.XJFQ.getKey();
druidDataSource.setUrl(url);
druidDataSource.setUsername(Namespace.XJFQ.getUsername());
druidDataSource.setPassword(Namespace.XJFQ.getPassword());
DynamicDataSource.dataSourcesMap.put(dbKey, druidDataSource);
DynamicDataSource.setDataSource(dbKey);
}
/**
* xyqb 环境
*/
if (namespace.equals("xyqb")) {
DruidDataSource druidDataSource = new DruidDataSource();
String url = Namespace.XYQB.getUrl() + database + SUFFIX;
String dbKey = Namespace.XYQB.getKey();
druidDataSource.setUrl(url);
druidDataSource.setUsername(Namespace.XYQB.getUsername());
druidDataSource.setPassword(Namespace.XYQB.getPassword());
DynamicDataSource.dataSourcesMap.put(dbKey, druidDataSource);
DynamicDataSource.setDataSource(dbKey);
}
}
}
package cn.quantgroup.qaplatform.common.aspect;
import cn.quantgroup.qaplatform.utils.JsonTransUtil;
import com.fasterxml.jackson.core.JsonProcessingException;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.Signature;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
import java.lang.reflect.Method;
import java.lang.reflect.Parameter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 日志切面
*/
@Aspect
@Component
public class LogAspect {
private Logger logger = LoggerFactory.getLogger(LogAspect.class);
private Map<String, Object> logMap = new HashMap<>();
@Pointcut("execution(public * cn.quantgroup.qaplatform.controller..*.*(..))")
public void apiLog() {}
/**
* 前置通知:在连接点之前执行的通知
*
* @param joinPoint
* @throws Throwable
*/
@Before("apiLog()")
public void doBefore(JoinPoint joinPoint) throws JsonProcessingException {
ServletRequestAttributes servletRequestAttributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = servletRequestAttributes.getRequest();
Signature signature = joinPoint.getSignature();
MethodSignature methodSignature = (MethodSignature) signature;
Method method = methodSignature.getMethod();
logMap.put("url", request.getRequestURL().toString());
logMap.put("method", request.getMethod());
logMap.put("host", request.getRemoteAddr());
logMap.put("class", joinPoint.getSignature().getDeclaringTypeName() + "." + joinPoint.getSignature().getName());
logMap.put("requestParams", getParameter(method, joinPoint.getArgs()));
// 记录下请求内容
logger.info("请求信息:" + JsonTransUtil.mapToJson(logMap));
}
/**
* 后置通知:在连接点之后执行的通知
*
* @param ret
* @throws Throwable
*/
@AfterReturning(returning = "ret", pointcut = "apiLog()")
public void doAfterReturning(Object ret) throws Throwable {
// 处理完请求,返回内容
logger.info("返回结果:" + JsonTransUtil.objToJson(ret));
}
/**
* 根据方法和传入参数获取请求参数
*/
private Object getParameter(Method method, Object[] args) {
List<Object> argList = new ArrayList<>();
Parameter[] parameters = method.getParameters();
for(int i=0; i < parameters.length; i++) {
//将RequestBody注解修饰的参数作为请求参数
RequestBody requestBody = parameters[i].getAnnotation(RequestBody.class);
if (requestBody != null) {
argList.add(args[i]);
}
//将RequestParam注解修饰的参数作为请求参数
RequestParam requestParam = parameters[i].getAnnotation(RequestParam.class);
if (requestParam != null) {
Map<String, Object> map = new HashMap<>();
String key = parameters[i].getName();
if (!StringUtils.isEmpty(requestParam.value())) {
key = requestParam.value();
}
map.put(key, args[i]);
argList.add(map);
}
}
if (argList.size() == 0) {
return null;
} else if (argList.size() == 1) {
return argList.get(0);
} else {
return argList;
}
}
}
\ No newline at end of file
package cn.quantgroup.qaplatform.common.enums;
/**
* 定义错误类别
*/
public enum ErrorType {
SUCCESS(200L, "请求成功"),
CLIENT_FAILED(400L, "客户端请求失败"),
SERVER_FAILED(500L, "服务器异常");
private Long code;
private String message;
ErrorType(Long code, String message) {
this.code = code;
this.message = message;
}
public Long getCode() {
return this.code;
}
public String getMessage() {
return this.message;
}
}
package cn.quantgroup.qaplatform.common.enums;
/**
* 借款状态枚举
*/
public enum LoanStatus {
UNLOGIN(0, "未登录"),
UNAPPLY(1, "未申请"),
UNDER_REVIEW(2, "审核中"),
REVIEW_PASS(3, "审核通过"),
REVIEW_REFUSE(4, "审核拒绝"),
LOAN_ING(5, "放款中"),
LOAN_SUCESS(6, "放款成功"),
LOAN_FAIL(7, "放款失败"),
MULTI_ORDER(8, "多订单未申请");
private Integer status;
private String desc;
LoanStatus(Integer status, String desc) {
this.status = status;
this.desc = desc;
}
public Integer getStatus() {
return this.status;
}
public String getDesc() {
return this.desc;
}
}
package cn.quantgroup.qaplatform.common.enums;
public enum Namespace {
PRE("pre","pre", "jdbc:mysql://172.17.5.14:32178/", "qa", "qatest"),
QA("qa", "qa","jdbc:mysql://172.17.5.16:32743/", "qa", "qatest"),
QA2("qa2", "qa2", "jdbc:mysql://172.17.5.5:31905/", "qa", "qatest"),
QA3("qa3", "qa3","jdbc:mysql://172.17.5.14:32659/", "qa", "qatest"),
TEST1("test1", "test1","jdbc:mysql://172.17.5.14:31548/", "qa", "qatest"),
XJFQ("xjfq", "xjfq", "jdbc:mysql://172.17.5.2:32188/", "qa", "qatest"),
XYQB("xyqb", "xyqb","jdbc:mysql://172.17.5.5:32556/", "qa", "qatest");
private String key;
private String desc;
private String url;
private String username;
private String password;
Namespace(String key, String desc, String url, String username, String password) {
this.key = key;
this.desc = desc;
this.url = url;
this.username = username;
this.password = password;
}
public String getKey() {
return this.key;
}
public String getDesc() {
return this.desc;
}
public String getUrl() {
return this.url;
}
public String getUsername() {
return this.username;
}
public String getPassword() {
return this.password;
}
}
package cn.quantgroup.qaplatform.config;
import com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceBuilder;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.DependsOn;
import org.springframework.context.annotation.Primary;
import javax.sql.DataSource;
@Configuration
public class DataSourceConfig {
@Bean
@ConfigurationProperties("spring.datasource.druid")
public DataSource defaultDataSource() {
return DruidDataSourceBuilder.create().build();
}
@Bean
@Primary
@DependsOn({"springUtils", "defaultDataSource"})
public DynamicDataSource dataSource() {
DynamicDataSource dynamicDataSource = new DynamicDataSource();
dynamicDataSource.setTargetDataSources(DynamicDataSource.dataSourcesMap);
return dynamicDataSource;
}
}
package cn.quantgroup.qaplatform.config;
import cn.quantgroup.qaplatform.utils.SpringUtils;
import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
public class DynamicDataSource extends AbstractRoutingDataSource {
private static final ThreadLocal<String> dataSourceKey = ThreadLocal.withInitial(() -> "defaultDataSource");
public static Map<Object, Object> dataSourcesMap = new ConcurrentHashMap<>(20);
static {
dataSourcesMap.put("defaultDataSource", SpringUtils.getBean("defaultDataSource"));
}
@Override
protected Object determineCurrentLookupKey() {
return DynamicDataSource.dataSourceKey.get();
}
public static void setDataSource(String dataSource) {
DynamicDataSource.dataSourceKey.set(dataSource);
DynamicDataSource dynamicDataSource = (DynamicDataSource) SpringUtils.getBean("dataSource");
dynamicDataSource.afterPropertiesSet();
}
public static String getDataSource() {
return DynamicDataSource.dataSourceKey.get();
}
public static void clear() {
DynamicDataSource.dataSourceKey.remove();
}
}
package cn.quantgroup.qaplatform.controller;
import cn.quantgroup.qaplatform.common.JsonResult;
import cn.quantgroup.qaplatform.service.BasicLoanStatusDataService;
import cn.quantgroup.qaplatform.service.LoanUserDataService;
import cn.quantgroup.qaplatform.utils.page.PageResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
import java.util.Map;
@CrossOrigin
@RestController
public class LoanUserDataController {
@Autowired
private BasicLoanStatusDataService basicLoanStatusDataService;
@Autowired
private LoanUserDataService loanUserDataService;
/**
* @return 获取所有借款用户状态
*/
@GetMapping("/allUserLoanStatus")
public JsonResult getLoanUserDataStatus() {
List<Map<String, Object>> statusList = basicLoanStatusDataService.getAllUserLoanStatus();
return JsonResult.success(statusList);
}
/**
* @return 获取所有环境namespace
*/
@GetMapping("/allEnvInfo")
public JsonResult getAllEnvInfo() {
List<Map<String, Object>> envList = basicLoanStatusDataService.getAllEnvInfo();
return JsonResult.success(envList);
}
/**
* @param status 用户状态
* @param pageNum
* @param pageSize
* @return 所有借款用户数据
*/
@GetMapping("/getLoanUserData")
public JsonResult getLoanUserData(@RequestParam(value = "namespace") String namespace,
@RequestParam(value = "status") Integer status,
@RequestParam(defaultValue = "1") Integer pageNum,
@RequestParam(defaultValue = "10") Integer pageSize) {
PageResult result = loanUserDataService.getLoanUserData(namespace, status, pageNum, pageSize);
return JsonResult.success(result);
}
/**
* 查看手机号是否存在
* @param phone
* @return
*/
@GetMapping("/checkPhoneExistence")
public JsonResult checkPhoneExistence(@RequestParam(value = "namespace") String namespace,
@RequestParam(value = "phone") String phone) {
return JsonResult.success(basicLoanStatusDataService.queryIfPhoneExist(namespace, phone));
}
}
package cn.quantgroup.qaplatform.dao;
import cn.quantgroup.qaplatform.domain.LoanUser;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import java.util.List;
public interface BasicLoanStatusDataMapper {
/**
* 根据uuidList获取用户数据信息
* @param uuidList
* @return
*/
List<LoanUser> getUserDataListByUuidList(List<String> uuidList);
/**
* 获取未申请用户数据uuidList
*/
List<String> getUnApplyLoanUserUuidList();
/**
* 判断手机号是否存在库里
*/
Object queryIfPhoneExist(String phone);
/**
* 查询审核中的user_id
*/
List<String> getReviewPassedUserIdList();
/**
* 根据userIdList获取用户信息列表
* @param userIdList
* @return
*/
List<LoanUser> getUserDataListByUserIdList(List<String> userIdList);
}
package cn.quantgroup.qaplatform.domain;
import lombok.Data;
import java.util.Date;
/**
* 贷款用户实体类
*/
@Data
public class LoanUser {
/**
* 手机号
*/
private String phoneNo;
/**
* 用户id
*/
private String userId;
/**
* uuid
*/
private String uuid;
/**
* 贷款状态
*/
private Integer enable;
/**
* 创建渠道
*/
private Long registeredFrom;
/**
* 创建日期
*/
private Date createdAt;
}
package cn.quantgroup.qaplatform.service;
import cn.quantgroup.qaplatform.domain.LoanUser;
import java.util.List;
import java.util.Map;
/**
* 单个状态数据查询
*/
public interface BasicLoanStatusDataService {
/**
* 获取所有的用户状态
*/
List<Map<String, Object>> getAllUserLoanStatus();
/**
* 获取所有环境信息
*/
List<Map<String, Object>> getAllEnvInfo();
/**
* 根据uuid获取用户信息
*/
List<LoanUser> getUserDataListByUuidList(String namespace, List<String> uuidList);
/**
* 获取未申请用户
* @return uuidList
*/
List<String> getUnApplyUserUuidList(String namespace);
/**
* 判断用户是否存在
*/
boolean queryIfPhoneExist(String namespace, String phone);
/**
* 获取审核中用户的userid
*/
List<String> getReviewPassedUserIdList(String namespace);
/**
* 根据userIdList获取用户信息列表
*/
List<LoanUser> getUserDataListByUserIdList(String namespace, List<String> userIdList);
}
package cn.quantgroup.qaplatform.service;
import cn.quantgroup.qaplatform.utils.page.PageResult;
/**
* 多个状态结合查询
*/
public interface LoanUserDataService {
/**
* 获取已有用户状态数据
* @param status 用户状态
* @param namespace 环境
* @return
*/
PageResult getLoanUserData(String namespace, Integer status, Integer pageNum, Integer pageSize);
}
package cn.quantgroup.qaplatform.service.impl;
import cn.quantgroup.qaplatform.common.SwitchDataSource;
import cn.quantgroup.qaplatform.common.enums.LoanStatus;
import cn.quantgroup.qaplatform.common.enums.Namespace;
import cn.quantgroup.qaplatform.dao.BasicLoanStatusDataMapper;
import cn.quantgroup.qaplatform.domain.LoanUser;
import cn.quantgroup.qaplatform.service.BasicLoanStatusDataService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Service
public class BasicLoanStatusDataServiceImpl implements BasicLoanStatusDataService {
@Autowired
BasicLoanStatusDataMapper loanStatusDataMapper;
/**
* 获取所有用户状态
* @return 用户状态列表
*/
@Override
public List<Map<String, Object>> getAllUserLoanStatus() {
List<Map<String, Object>> allUserLoanStatusList = new ArrayList<>();
for (LoanStatus loanStatus:LoanStatus.values()) {
Map<String, Object> tempMap = new HashMap<>();
tempMap.put("value", loanStatus.getStatus());
tempMap.put("label", loanStatus.getDesc());
allUserLoanStatusList.add(tempMap);
}
return allUserLoanStatusList;
}
/**
* 获取所有环境信息
* @return 环境信息列表
*/
@Override
public List<Map<String, Object>> getAllEnvInfo() {
List<Map<String, Object>> allEnvList = new ArrayList<>();
for (Namespace namespace: Namespace.values()) {
Map<String, Object> tempMap = new HashMap<>();
tempMap.put("value", namespace.getKey());
tempMap.put("label", namespace.getDesc());
allEnvList.add(tempMap);
}
return allEnvList;
}
/**
* 根据uuidList获取用户信息
* @param uuidList
* @return
*/
@Override
public List<LoanUser> getUserDataListByUuidList(String namespace, List<String> uuidList) {
SwitchDataSource.dataSourceSwitch(namespace, "xyqb_user");
return loanStatusDataMapper.getUserDataListByUuidList(uuidList);
}
/**
* 获取未申请用户uuidList
* @return
*/
@Override
public List<String> getUnApplyUserUuidList(String namespace) {
SwitchDataSource.dataSourceSwitch(namespace, "business_flow");
return loanStatusDataMapper.getUnApplyLoanUserUuidList();
}
/**
* 查看手机号是否在库里
* @param phone
* @return
*/
@Override
public boolean queryIfPhoneExist(String namespace, String phone) {
SwitchDataSource.dataSourceSwitch(namespace, "xyqb_user");
if (loanStatusDataMapper.queryIfPhoneExist(phone) != null) {
return true;
}
return false;
}
/**
* 获取审核中用户的user_id列表
* @return
*/
@Override
public List<String> getReviewPassedUserIdList(String namespace) {
SwitchDataSource.dataSourceSwitch(namespace, "xyqb");
return loanStatusDataMapper.getReviewPassedUserIdList();
}
/**
* 根据userIdList获取用户信息列表
*
* @param userIdList
* @return
*/
@Override
public List<LoanUser> getUserDataListByUserIdList(String namespace, List<String> userIdList) {
SwitchDataSource.dataSourceSwitch(namespace, "xyqb_user");
List<LoanUser> result = loanStatusDataMapper.getUserDataListByUserIdList(userIdList);
return result;
}
}
package cn.quantgroup.qaplatform.service.impl;
import cn.quantgroup.qaplatform.config.DynamicDataSource;
import cn.quantgroup.qaplatform.domain.LoanUser;
import cn.quantgroup.qaplatform.service.BasicLoanStatusDataService;
import cn.quantgroup.qaplatform.service.LoanUserDataService;
import cn.quantgroup.qaplatform.utils.RandomDataUtil;
import cn.quantgroup.qaplatform.utils.page.PageResult;
import cn.quantgroup.qaplatform.utils.page.PageUtil;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
/**
* 查询旧有数据
*/
@Service
public class LoadUserDataServiceImpl implements LoanUserDataService {
@Autowired
private BasicLoanStatusDataService basicLoanStatusDataService;
/**
* 筛选某个状态的用户(0-未登录,1-未申请,2-审核中,3-审核通过待提现,4-放款中,5-放款失败,6-还款中,7-审核拒绝)
* @param namespace 环境
* @param status 用户状态
* @return
*/
@Override
public PageResult getLoanUserData(String namespace, Integer status, Integer pageNum, Integer pageSize) {
List<LoanUser> result = new ArrayList<>();
/**
* 0-未登录
*/
if (status == 0) {
int count = 0;
do {
String phone = RandomDataUtil.createMobile();
LoanUser loanUser = new LoanUser();
if (!basicLoanStatusDataService.queryIfPhoneExist(namespace, phone)) {
loanUser.setPhoneNo(phone);
result.add(loanUser);
count++;
}
} while (count < 10);
PageInfo<LoanUser> pageList = new PageInfo<>(result);
PageResult pageResult = PageUtil.getPageResult(pageList, pageNum, pageSize);
return pageResult;
}
/**
* 1-未申请
*/
if (status == 1) {
List<String> uuidList = basicLoanStatusDataService.getUnApplyUserUuidList(namespace);
PageHelper.startPage(pageNum, pageSize);
result = basicLoanStatusDataService.getUserDataListByUuidList(namespace, uuidList);
PageInfo<LoanUser> pageList = new PageInfo<>(result);
PageResult pageResult = PageUtil.getPageResult(pageList, pageNum, pageSize);
return pageResult;
}
/**
* 3-审核通过
*/
if (status == 3) {
List<String> userIdList = basicLoanStatusDataService.getReviewPassedUserIdList(namespace);
PageHelper.startPage(pageNum, pageSize);
result = basicLoanStatusDataService.getUserDataListByUserIdList(namespace, userIdList);
PageInfo<LoanUser> pageList = new PageInfo<>(result);
PageResult pageResult = PageUtil.getPageResult(pageList, pageNum, pageSize);
return pageResult;
}
return null;
}
/**
* 清除数据源并重置为默认数据源
* @throws Throwable
*/
protected void finalize() throws Throwable {
super.finalize();
DynamicDataSource.clear();
}
}
package cn.quantgroup.qaplatform.utils;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URISyntaxException;
import java.util.*;
@Slf4j
public class HttpClientUtil {
private static CloseableHttpClient client = HttpClients.createDefault();
public static String doGet(String url) {
HttpGet get = new HttpGet(url);
String respStr = null;
Map<String, Object> resultMap = new HashMap<>();
try {
CloseableHttpResponse response = client.execute(get);
HttpEntity httpEntity = response.getEntity();
respStr = EntityUtils.toString(httpEntity, "utf-8");
// resultMap = JsonTransUtil.strToMap(respStr);
} catch (IOException e) {
e.printStackTrace();
}
// return resultMap;
return respStr;
}
public static String doGet(String url, Map<String, Object> params) throws URISyntaxException {
// HttpGet get = new HttpGet(url);
URIBuilder uriBuilder = new URIBuilder(url);
if (params != null && !params.isEmpty()) {
Set<String> keySet = params.keySet();
for(String key: keySet) {
uriBuilder.setParameter(key, params.get(key).toString());
}
}
HttpGet get = new HttpGet(uriBuilder.build());
String respStr = null;
try {
CloseableHttpResponse response = client.execute(get);
HttpEntity httpEntity = response.getEntity();
respStr = EntityUtils.toString(httpEntity, "utf-8");
System.out.println(respStr);
} catch (IOException e) {
e.printStackTrace();
}
return respStr;
}
public static void doPost(String url, String params) {
try {
HttpPost post = new HttpPost(url);
List<NameValuePair> list = new ArrayList<>();
if (StringUtils.isNotEmpty(params)) {
String[] splitStrings = params.split("&");
for (String splitString : splitStrings) {
String[] split = splitString.split("=");
list.add(new BasicNameValuePair(split[0], split[1]));
}
UrlEncodedFormEntity urlEncodedFormEntity = new UrlEncodedFormEntity(list, "utf-8");
post.setEntity(urlEncodedFormEntity);
}
CloseableHttpResponse response = client.execute(post);
HttpEntity responseEntity = response.getEntity();
String responseString = EntityUtils.toString(responseEntity, "utf-8");
System.out.println(responseString);
} catch (IOException e) {
e.printStackTrace();
}
}
public static void doPost(String url, Map<String, Object> params) {
try {
HttpPost post = new HttpPost(url);
List list = new ArrayList();
if (params != null && !params.isEmpty()) {
Set<String> keySet = params.keySet();
for (String key : keySet) {
list.add(new BasicNameValuePair(key, params.get(key).toString()));
}
UrlEncodedFormEntity urlEncodedFormEntity =
new UrlEncodedFormEntity(list, "utf-8");
post.setEntity(urlEncodedFormEntity);
}
CloseableHttpResponse response = client.execute(post);
HttpEntity responseEntity = response.getEntity();
String responseString = EntityUtils.toString(responseEntity, "utf-8");
System.out.println(responseString);
} catch (IOException e) {
e.printStackTrace();
}
}
public static Map<String, Object> doPost(String url, Map<String, Object> params, Map<String, Object> headers) {
Map<String, Object> resultMap = new HashMap<>();
try {
HttpPost post = new HttpPost(url);
List list = new ArrayList();
if (params != null && !params.isEmpty()) {
Set<String> keySet = params.keySet();
for (String key : keySet) {
list.add(new BasicNameValuePair(key, params.get(key).toString()));
}
UrlEncodedFormEntity urlEncodedFormEntity =
new UrlEncodedFormEntity(list, "utf-8");
post.setEntity(urlEncodedFormEntity);
}
if (headers != null && !headers.isEmpty()) {
Set<String> keySet = headers.keySet();
for (String s : keySet) {
post.addHeader(s, headers.get(s).toString());
}
}
CloseableHttpResponse response = client.execute(post);
HttpEntity responseEntity = response.getEntity();
String responseString = EntityUtils.toString(responseEntity, "utf-8");
resultMap = JsonTransUtil.strToMap(responseString);
} catch (IOException e) {
e.printStackTrace();
}
return resultMap;
}
public static void doPostJson(String url, String params, String headers) {
HttpPost httpPost = new HttpPost(url);
if (StringUtils.isNotEmpty(params)) {
StringEntity stringEntity = new StringEntity(params, "utf-8");
httpPost.setEntity(stringEntity);
}
if (StringUtils.isNotEmpty(headers)) {
httpPost.setHeader("Content-Type", "application/json");
}
try {
CloseableHttpResponse response = client.execute(httpPost);
HttpEntity responseEntity = response.getEntity();
String toString = EntityUtils.toString(responseEntity, "utf-8");
System.out.println(toString);
} catch (IOException e) {
e.printStackTrace();
}
}
public static Map<String, Object> doPostJson(String url, String params, Map<String, Object> headers) {
HttpPost httpPost = new HttpPost(url);
Map<String, Object> resultMap = new HashMap<>();
if (StringUtils.isNotEmpty(params)) {
StringEntity stringEntity = new StringEntity(params, "utf-8");
httpPost.setEntity(stringEntity);
}
if (headers != null && !headers.isEmpty()) {
Set<String> keySet = headers.keySet();
for (String s : keySet) {
httpPost.addHeader(s, headers.get(s).toString());
}
}
try {
CloseableHttpResponse response = client.execute(httpPost);
HttpEntity responseEntity = response.getEntity();
String responseStr = EntityUtils.toString(responseEntity, "utf-8");
resultMap = JsonTransUtil.strToMap(responseStr);
} catch (IOException e) {
e.printStackTrace();
}
return resultMap;
}
public static void main(String[] args) throws UnsupportedEncodingException {
String url = "http://passportapi-qa.liangkebang.net/user/login/fastV1";
String phoneNo = "13712345678:0000";
Base64.Encoder encoder = Base64.getEncoder();
byte[] textByte = phoneNo.getBytes("UTF-8");
String phoneNoBase64 = encoder.encodeToString(textByte);
Map<String, Object> headers = new HashMap<>();
Map<String, Object> formData = new HashMap<>();
headers.put("Content-Type", "application/x-www-form-urlencoded");
headers.put("Authorization", "Verification " + phoneNoBase64);
formData.put("channelId", 1);
formData.put("createdFrom", 1);
formData.put("key", "xyqb");
formData.put("btRegisterChannelId", "");
formData.put("dimension", "");
formData.put("click_id", "");
Map<String,Object> resMap = doPost(url, formData, headers);
System.out.println(resMap.keySet());
}
}
package cn.quantgroup.qaplatform.utils;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.Map;
/**
* json转换工具类
*/
public class JsonTransUtil {
/**
* json转换成对象
* @param jsonStr
* @return
* @throws JsonProcessingException
*/
public static Object jsonToObj(String jsonStr) throws JsonProcessingException {
ObjectMapper objectMapper = new ObjectMapper();
Object obj = new Object();
return obj = objectMapper.readValue(jsonStr, obj.getClass());
}
/**
* 对象转换成json
*
* @param:传入对象
* @return:json字符串
*/
public static String objToJson(Object obj) throws JsonProcessingException {
ObjectMapper mapper = new ObjectMapper();
return mapper.writeValueAsString(obj);
}
/**
* 字符串转换成map
*/
public static Map<String, Object> strToMap(String str) throws JsonProcessingException {
ObjectMapper objectMapper = new ObjectMapper();
return objectMapper.readValue(str, Map.class);
}
/**
* map转json对象
*/
public static String mapToJson(Map<String, Object> map) throws JsonProcessingException {
ObjectMapper objectMapper = new ObjectMapper();
String jsonStr = objectMapper.writeValueAsString(map);
return jsonStr;
}
}
package cn.quantgroup.qaplatform.utils;
import java.util.Random;
/**
* 生成随机数据的工具类
*/
public class RandomDataUtil {
//中国移动
public static final String[] CHINA_MOBILE = {
"134", "135", "136", "137", "138", "139", "150", "151", "152", "157", "158", "159",
"182", "183", "184", "187", "188", "178", "147", "172", "198"
};
//中国联通
public static final String[] CHINA_UNICOM = {
"130", "131", "132", "145", "155", "156", "166", "171", "175", "176", "185", "186", "166"
};
//中国电信
public static final String[] CHINA_TELECOME = {
"133", "149", "153", "173", "177", "180", "181", "189", "199"
};
public static final String[] TOTAL = {"134", "135", "136", "137", "138", "139", "150", "151", "152", "157", "158", "159",
"182", "183", "184", "187", "188", "178", "147", "172", "198", "130", "131", "132", "145", "155", "156", "166", "171", "175", "176", "185", "186", "166", "133", "149", "153", "173", "177", "180", "181", "189", "199"};
/**
* 生成随机手机号
*/
public static String createMobile() {
StringBuilder sb = new StringBuilder();
Random random = new Random();
int temp;
String mobilePart1 = TOTAL[random.nextInt(TOTAL.length)];
sb.append(mobilePart1);
for (int i=0; i < 8; i++) {
temp = random.nextInt(10);
sb.append(temp);
}
return sb.toString();
}
public static void main(String[] args) {
for (int i=0; i < 10; i++) {
System.out.println(createMobile());
}
}
}
package cn.quantgroup.qaplatform.utils;
import lombok.Getter;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
@Component
public final class SpringUtils implements ApplicationContextAware {
@Getter
private static ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
if (SpringUtils.applicationContext == null) {
SpringUtils.applicationContext = applicationContext;
}
}
public static <T> T getBean(Class<T> clazz) {
return SpringUtils.applicationContext.getBean(clazz);
}
public static Object getBean(String name) {
return SpringUtils.applicationContext.getBean(name);
}
public static String getProperty(String key) {
return SpringUtils.applicationContext.getEnvironment().getProperty(key);
}
}
package cn.quantgroup.qaplatform.utils.page;
import lombok.Getter;
import lombok.Setter;
import java.util.List;
@Getter
@Setter
public class PageResult {
private int pageNum; // 当前页数
private int pageSize; // 每页记录数
private int totalPage; // 总页数
private long totalNum; // 总记录数
private List<?> content; // 每行显示的内容
}
package cn.quantgroup.qaplatform.utils.page;
import com.github.pagehelper.PageInfo;
public class PageUtil {
/**
* 设置接口分页返回的结果
* @param pageList
* @param pageNum
* @param pageSize
* @return
*/
public static PageResult getPageResult(PageInfo<?> pageList, Integer pageNum, Integer pageSize) {
PageResult pageResult = new PageResult();
pageResult.setPageNum(pageNum);
pageResult.setPageSize(pageSize);
pageResult.setTotalPage(pageList.getPages());
pageResult.setTotalNum(pageList.getTotal());
pageResult.setContent(pageList.getList());
return pageResult;
}
}
# 环境配置
spring:
datasource:
url: jdbc:mysql://172.17.5.16:32743/xyqb
username: qa
password: qatest
driver-class-name: com.mysql.jdbc.Driver
type: com.alibaba.druid.pool.DruidDataSource
jackson:
date-format: yyyy-MM-dd HH:mm:ss
time-zone: GMT+8
server:
port: 8082
# mybatis-plus 配置
mybatis-plus:
mapper-locations: classpath:mapper/*.xml
type-aliases-package: cn.quantgroup.qaplatform.domain
configuration:
map-underscore-to-camel-case: true
# pagehelper
pagehelper:
helper-dialect: mysql
reasonable: true
support-methods-arguments: true
params: count=countSql
<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="cn.quantgroup.qaplatform.dao.BasicLoanStatusDataMapper">
<!-- 未申请 -->
<select id="getUnApplyLoanUserUuidList" resultType="java.lang.String">
SELECT `uuid` FROM `apply_list`
<where>
`apply_status` = 1
</where>
</select>
<!-- 根据uuidList获取用户信息列表 -->
<select id="getUserDataListByUuidList" parameterType="java.util.List" resultType="cn.quantgroup.qaplatform.domain.LoanUser">
SELECT `id` as userId, `phone_no` as phoneNo, `uuid`, `registered_from` as registeredFrom, `enable`, `created_at` as createdAt FROM `user`
where `uuid` in
<foreach collection="list" index="index" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</select>
<select id="queryIfPhoneExist" resultType="object">
SELECT * FROM `user` where phone_no = #{phone}
</select>
<!-- 获取审核通过用户列表 -->
<select id="getReviewPassedUserIdList" resultType="java.lang.String">
SELECT `user_id` FROM `apply_funding_risk_record`
<where>
`apply_status` = 2
</where>
</select>
<!-- 根据userIdList获取用户信息List -->
<select id="getUserDataListByUserIdList" resultType="cn.quantgroup.qaplatform.domain.LoanUser">
SELECT `id` as userId, `uuid`, `phone_no` as phoneNo, `registered_from` as registeredFrom, `enable`, `created_at` as createdAt FROM `user`
where `id` in
<foreach collection="list" index="index" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</select>
</mapper>
\ No newline at end of file
package cn.quantgroup.qaplatform;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class QaPlatformApplicationTests {
@Test
void contextLoads() {
}
}
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