Commit df1d7dc5 authored by kang.nie@inzymeits.com's avatar kang.nie@inzymeits.com
Browse files

初始化代码

parent 565dfc9e
Pipeline #3110 failed with stages
in 0 seconds
#Built application files
*.apk
*.ap_
# Files for the Dalvik VM
*.dex
# Java class files
*.class
# Generated files
*/bin/
*/gen/
*/out/
# Gradle files
.gradle/
build/
*/build/
gradlew
gradlew.bat
# Local configuration file (sdk path, etc)
local.properties
# Proguard folder generated by Eclipse
proguard/
# Log Files
*.log
# Android Studio Navigation editor temp files
.navigation/
# Android Studio captures folder
captures/
# Intellij
*.iml
*/*.iml
# Keystore files
#*.jks
#gradle wrapper
gradle/
#some local files
*/.settings/
*/.DS_Store
.DS_Store
*/.idea/
.idea/
gradlew
gradlew.bat
unused.txt
# Eclipse Project files
.classpath
.project
.settings/
.factorypath
*/target/
# Nodejs files
*/node-modules/
<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.cusc.nirvana</groupId>
<artifactId>cusc-parent</artifactId>
<version>1.2.1-SNAPSHOT</version>
<relativePath/>
</parent>
<groupId>com.cusc.nirvana</groupId>
<artifactId>local-rnr-openapi</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<sharding-sphere.version>4.1.1</sharding-sphere.version>
<mysql-connector-j.version>5.1.49</mysql-connector-j.version>
<druid.version>1.1.24</druid.version>
<pagehelper.version>5.1.11</pagehelper.version>
<jsqlparser.version>3.2</jsqlparser.version>
<mybatis.version>3.5.4</mybatis.version>
<poi.version>4.0.1</poi.version>
<mybatis-plus.version>3.3.2</mybatis-plus.version>
<mapstruct.version>1.4.2.Final</mapstruct.version>
<skipTests>true</skipTests>
</properties>
<dependencies>
<!-- <dependency>-->
<!-- <groupId>com.cusc.nirvana</groupId>-->
<!-- <artifactId>cusc-rds</artifactId>-->
<!-- </dependency>-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<exclusions>
<exclusion>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.cusc.nirvana</groupId>
<artifactId>user-config-common</artifactId>
<version>1.2-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-core</artifactId>
<version>4.0.0</version>
<scope>test</scope>
</dependency>
<!-- mapstruct-->
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
<version>${mapstruct.version}</version>
</dependency>
<!-- poi 相关 -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>${poi.version}</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>${poi.version}</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
<version>${poi.version}</version>
</dependency>
<!-- apache 文件处理 -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.4</version>
</dependency>
<!-- AOP -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<!-- redis依赖 -->
<dependency>
<groupId>com.cusc.component</groupId>
<artifactId>cache-spring</artifactId>
<version>1.0.4-RELEASE</version>
</dependency>
<dependency>
<groupId>com.cusc.component</groupId>
<artifactId>cache-annotation</artifactId>
<version>1.0.4-RELEASE</version>
</dependency>
<dependency>
<groupId>com.cusc.nirvana</groupId>
<artifactId>local-rnr-user-remote</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.cusc.nirvana</groupId>
<artifactId>local-rnr-fp-remote</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.cusc.nirvana</groupId>
<artifactId>local-rnr-mg-remote</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.8</source>
<target>1.8</target>
<annotationProcessorPaths>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</path>
<path>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>${mapstruct.version}</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
</plugins>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
<resource>
<directory>src/main/resources/</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.yml</include>
<include>**/*.yaml</include>
<include>**/*.xml</include>
<include>**/*.factories</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>
</project>
package com.cusc.nirvana.user.rnr.openapi;
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.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.ComponentScan;
/**
* Description: 实名admin启动
* <br />
* CreateDate 2021-11-09 13:38:16
*
* @author yuyi
**/
@Slf4j
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class})
@ComponentScan({"com.cusc", "com.cache.*"})
@EnableDiscoveryClient
public class LocalRnrOpenApiApplication {
public static void main(String[] args) {
try {
ApplicationContext context = SpringApplication.run(LocalRnrOpenApiApplication.class, args);
String serverPort = context.getEnvironment().getProperty("server.port");
log.info("启动成功! Swagger2: http://127.0.0.1:" + serverPort + "/swagger-ui.html");
} catch (Exception ex) {
log.error("", ex);
}
}
}
package com.cusc.nirvana.user.rnr.openapi.common;
/**
* @author yubo
* @since 2022-06-09 14:26
*/
public class Constants {
/**应用ID的key名称*/
public final static String APP_ID = "APPID";
/**随机数key*/
public final static String NONCE_STR = "NONCE_STR";
/**时间戳key*/
public final static String TIMESTAMP = "TIMESTAMP";
/**版本key*/
public final static String VERSION = "VERSION";
/**签名key*/
public final static String SIGN = "SIGN";
}
package com.cusc.nirvana.user.rnr.openapi.common;
/**
* @author stayAnd
* @date 2022/4/14
*/
public class RedisConstants {
/**
* 组织code生成key
*/
public static final String ORG_ORGAN_CODE_PREFIX = "CT:USER:ORGAN:";
}
package com.cusc.nirvana.user.rnr.openapi.common;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* @author stayAnd
* @date 2022/4/15
*/
@Getter
@AllArgsConstructor
/**
* 车企租户管理员 101
*
* 车企业务操作员 102
* 经销商管理员 201
* 经销商业务操作员202
*/
public enum RoleEnum {
/**
* 车企租户管理员
*/
CAR_ENTERPRISES_ADMIN("101","车企租户管理员"),
/**
* 车企业务操作员
*/
CAR_ENTERPRISES_OP("102","车企业务操作员"),
/**
* 经销商管理员
*/
DISTRIBUTOR_ENTERPRISES_ADMIN("201","经销商管理员"),
/**
* 经销商业务操作员
*/
DISTRIBUTOR_ENTERPRISES_OP("202","经销商业务操作员"),
;
private String code;
private String name;
}
package com.cusc.nirvana.user.rnr.openapi.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;
@Configuration
public class GlobalCorsConfig {
@Bean
public CorsFilter corsFilter() {
CorsConfiguration config = new CorsConfiguration();
config.addAllowedOrigin("*");
config.setAllowCredentials(true);
config.addAllowedMethod("POST");
config.addAllowedMethod("OPTIONS");
config.addAllowedMethod("GET");
config.addAllowedHeader("*");
UrlBasedCorsConfigurationSource configSource = new UrlBasedCorsConfigurationSource();
configSource.registerCorsConfiguration("/**", config);
return new CorsFilter(configSource);
}
}
package com.cusc.nirvana.user.rnr.openapi.config;
import com.cusc.nirvana.user.rnr.openapi.interceptor.AuthInterceptor;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.Ordered;
import org.springframework.web.servlet.config.annotation.InterceptorRegistration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import java.util.List;
/**
* Description: 拦截器配置
* 0. 请求的URL是否在白名单中,如果是,直接放行,不做处理。
* <br />
* CreateDate 2022-05-06 14:24
*
* @author caow
**/
@Configuration
public class InterceptorConfig implements WebMvcConfigurer {
@Value("#{'${auth.whiteList}'.split(',')}")
private List<String> whiteList;
@Bean
public AuthInterceptor authInterceptor() {
return new AuthInterceptor();
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
InterceptorRegistration ir;
ir = registry.addInterceptor(authInterceptor()).addPathPatterns("/**");
ir.excludePathPatterns(whiteList)
.excludePathPatterns("/swagger-resources/**", "/webjars/**", "/v2/**", "/swagger-ui.html/**");
}
}
package com.cusc.nirvana.user.rnr.openapi.config;
import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
/**
* @author yubo
* @since 2022-06-09 16:00
*/
@Configuration
@Data
public class OpenapiConfig {
@Value("${rnr.tenantNo}")
private String tenantNo;
@Value("${rnr.appId}")
private String appId;
@Value("${rnr.appSecret}")
private String appSecret;
@Value("${rnr.dataSecret}")
private String dataSecret;
@Value("${rnr.timeStamp.timeOut:1800000}")
private int timeOut;
}
package com.cusc.nirvana.user.rnr.openapi.config;
import com.alibaba.fastjson.JSON;
import lombok.extern.slf4j.Slf4j;
import org.apache.http.client.HttpClient;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.config.Registry;
import org.apache.http.config.RegistryBuilder;
import org.apache.http.conn.socket.ConnectionSocketFactory;
import org.apache.http.conn.socket.PlainConnectionSocketFactory;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.impl.client.HttpClientBuilder;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.ClientHttpRequestFactory;
import org.springframework.http.client.ClientHttpRequestInterceptor;
import org.springframework.http.client.ClientHttpResponse;
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
import org.springframework.web.client.RestTemplate;
import java.util.ArrayList;
import java.util.List;
/**
* RestTemplate对象
*
* @author yubo
* @since 2022-04-18 09:54
*/
@Configuration
@Slf4j
public class RestTemplateRnrConfig {
@Bean(name = "eRestTemplate")
@LoadBalanced
public RestTemplate restTemplate() {
return getRestTemplateRnr();
}
@Bean
RestTemplate nonLoadBalanced() {
return getRestTemplateRnr();
}
public RestTemplate getRestTemplateRnr() {
RestTemplate restTemplate = new RestTemplate(httpRequestFactoryRnr());
List<ClientHttpRequestInterceptor> list = new ArrayList<>();
list.add((request, body, execution) -> {
long startTime = System.currentTimeMillis();
log.info("getRestTemplateRnr request url:{} , params:{}", request.getURI(), new String(body));
ClientHttpResponse ret = execution.execute(request, body);
log.info("getRestTemplateRnr response url:{} , result:{} , cost:{} ms", request.getURI(),
JSON.toJSONString(ret),
System.currentTimeMillis() - startTime);
return ret;
});
restTemplate.setInterceptors(list);
return restTemplate;
}
private ClientHttpRequestFactory httpRequestFactoryRnr() {
return new HttpComponentsClientHttpRequestFactory(httpClientRnr());
}
private HttpClient httpClientRnr() {
Registry<ConnectionSocketFactory> registry = RegistryBuilder.<ConnectionSocketFactory>create()
.register("http", PlainConnectionSocketFactory.getSocketFactory())
.register("https", SSLConnectionSocketFactory.getSocketFactory())
.build();
PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager(registry);
//设置整个连接池最大连接数
connectionManager.setMaxTotal(100);
//路由是对maxTotal的细分
connectionManager.setDefaultMaxPerRoute(100);
RequestConfig requestConfig = RequestConfig.custom()
.setSocketTimeout(5000) //返回数据的超时时间
.setConnectTimeout(3000) //连接上服务器的超时时间
.setConnectionRequestTimeout(1000) //从连接池中获取连接的超时时间
.build();
return HttpClientBuilder.create()
.setDefaultRequestConfig(requestConfig)
.setConnectionManager(connectionManager)
.build();
}
}
package com.cusc.nirvana.user.rnr.openapi.config;
import com.cusc.nirvana.common.result.Response;
import com.cusc.nirvana.user.exception.CuscUserException;
import com.cusc.nirvana.user.rnr.fp.common.ResponseCode;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.annotation.Order;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.ResponseStatus;
/**
* Description: 异常处理
* <br />
* CreateDate 2021-11-10 10:00
*
* @author yuyi
**/
@ControllerAdvice
@Order(0)
public class UserRnrEnterpriseExceptionHandler {
private static final Logger LOGGER = LoggerFactory.getLogger(UserRnrEnterpriseExceptionHandler.class);
@ExceptionHandler(CuscUserException.class)
@ResponseBody
@ResponseStatus(HttpStatus.OK)
public Response<?> cuscUserHandler(CuscUserException e) {
LOGGER.warn("cuscUserHandler Handler code: {}, msg: {}", e.getCode(), e.getMessage());
return Response.createError(e.getMessage(), StringUtils.isBlank(e.getCode()) ? ResponseCode.SYSTEM_ERROR.getCode() : Integer.parseInt(e.getCode()));
}
}
package com.cusc.nirvana.user.rnr.openapi.constants;
/**
* 鉴权常量类
* @author caow
* @since 2022-05-06 18:30
*/
public class AuthConstant {
//用户id名称
public static final String USER_ID_NAME = "userId";
//租户编号名称
public static final String TENANT_NO_NAME = "tenantNo";
//请求头中的开放平台租户ID
public static final String HEADER_TENANT_ID = "TENANT_NO";
//请求体中的组织ID
public static final String BODY_ORG_ID = "orgId";
}
package com.cusc.nirvana.user.rnr.openapi.constants;
public enum CompanyTypeEnum {
/**
* 企业
*/
ENTERPRISE("ENTERPRISE", "企业"),
/**
* 车企
*/
AUTOMOBILE_ENTERPRISE("AUTOMOBILE_ENTERPRISE", "车企");
private String code;
private String name;
CompanyTypeEnum(String code, String name) {
this.code = code;
this.name = name;
}
public static CompanyTypeEnum getEnumByCode(String code) {
for (CompanyTypeEnum sys : CompanyTypeEnum.values()) {
if (sys.getCode().equals(code)) {
return sys;
}
}
return null;
}
public String getCode() {
return code;
}
public String getName() {
return name;
}
}
package com.cusc.nirvana.user.rnr.openapi.constants;
/**
* 客户类型
*
* @author huchenhui
* @date 2022-04-15
*/
public enum CustomerTypeEnum {
/**
* 新车车主
*/
NEW_CAR_OWNER(0, "新车车主"),
/**
* 二手车车主
*/
USED_CAR_OWNER(1, "二手车新车主");
private int code;
private String name;
CustomerTypeEnum(int code, String name) {
this.code = code;
this.name = name;
}
public static CustomerTypeEnum getEnumByCode(int code) {
for (CustomerTypeEnum e : CustomerTypeEnum.values()) {
if (e.getCode() == code) {
return e;
}
}
return null;
}
public int getCode() {
return code;
}
public String getName() {
return name;
}
}
package com.cusc.nirvana.user.rnr.openapi.constants;
import lombok.AllArgsConstructor;
import lombok.Getter;
import java.util.Arrays;
/**
* Description: 应用常量信息
* <br />
* CreateDate 2022-01-24 16:48:59
*
* @author yuyi
**/
@AllArgsConstructor
@Getter
public enum EnterpriseLoginSourceEnum {
/**
* WEB
*/
WEB("WEB","4"),
/**
* H5
*/
H5("H5","7");
/**
* 平台来源
*/
private String platformSource;
/**
* appId
*/
private String appId;
public static EnterpriseLoginSourceEnum getByPlatform(String platformSource){
return Arrays.stream(EnterpriseLoginSourceEnum.values())
.filter(e->e.getPlatformSource().equals(platformSource)).findFirst()
.orElse(EnterpriseLoginSourceEnum.WEB);
}
}
package com.cusc.nirvana.user.rnr.openapi.constants;
/**
* @author yubo
* @since 2022-04-19 13:56
*/
public class IdentifyConstants {
//身份证校验规则
public static final String ID_CARD_REGEX = "(^\\d{15}$)|(^\\d{17}([0-9]|X|x)$)";
//港澳通行证校验规则
public static final String HK_MACAU_REGEX = "^[H|M][0-9]{10}$";
//台湾同行证校验规则
public static final String HK_TAIWAN_CITIZEN_REGEX = "^([0-9]|[a-z]|[A-Z]){10}$";
//手机校验规则
public static final String PHONE_REGEX = "[0-9]{11}";
//男性
public static final String GENDER_MALE = "0";
//女性
public static final String GENDER_FEMALE = "1";
}
package com.cusc.nirvana.user.rnr.openapi.constants;
public enum ResponseCode {
USER_SUBJECT_INVALID(1701,"用户主体信息无效"),
COMPANY_UUID_INVALID(1702,"项目关联的公司信息无效"),
USER_INVALID(1703,"用户信息无效"),
SUBJECT_CUSTOMER_INFO_INVALID(1704,"主体实名信息无效"),
USER_PHONE_REPEAT(1705,"用户手机号重复"),
SUBJECT_CUSTOMER_INFO_NOT_FOUND(1706,"未找到主体实名信息"),
ENCRYPT_FAIL(1707,"加密失败"),
DECRYPT_FAIL(1708,"解密失败"),
REPEAT_REQUEST_FAIL(1709,"请勿重复提交"),
RNR_INFO_INVALID(1710,"实名信息无效"),
SMS_CAPTCHA_INVALID(1711,"短信验证码无效"),
ICCID_INVALID(1712,"ICCID无效"),
RNR_PHONE_NOT_FOUND(1713,"手机号未找到"),
IMG_CAPTCHA_INVALID(1714,"图形验证码无效"),
INVALID_DATA(1001, "数据校验不通过"),
SYS_BUSY(1002, "服务调用失败"),
SERVICE_NOT_FOUND(1003, "服务不存在"),
TP_SYS_BUSY(1004, "第三方服务调用失败"),
JSON_FORMAT_ERROR(1005, "参数格式错误"),
REQ_TOO_MANY_TIMES(1007, "请求过于频繁,请稍后再试!"),
NO_DATA_AUTH(1008, "服务,请稍后再试!"),
PARAMETER_NOT_NULL(1009, "参数不能为空!"),
;
private Integer code;
private String msg;
ResponseCode(Integer code, String msg) {
this.code = code;
this.msg = msg;
}
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
}
package com.cusc.nirvana.user.rnr.openapi.controller;
import com.cusc.nirvana.common.result.Response;
import com.cusc.nirvana.user.rnr.mg.client.MgRnrCardInfoClient;
import com.cusc.nirvana.user.rnr.mg.client.MgRnrInfoClient;
import com.cusc.nirvana.user.rnr.mg.client.MgRnrUnboundClient;
import com.cusc.nirvana.user.rnr.mg.constants.*;
import com.cusc.nirvana.user.rnr.mg.dto.MgRnrCardInfoDTO;
import com.cusc.nirvana.user.rnr.mg.dto.MgRnrInfoDTO;
import com.cusc.nirvana.user.rnr.mg.dto.RnrOrderDTO;
import com.cusc.nirvana.user.rnr.mg.dto.VehicleUnbindDTO;
import com.cusc.nirvana.user.rnr.openapi.constants.ResponseCode;
import com.cusc.nirvana.user.rnr.openapi.dto.RnrUnboundReqDTO;
import com.cusc.nirvana.user.rnr.openapi.dto.SecondHandUnbindRequestDTO;
import com.cusc.nirvana.user.rnr.openapi.dto.VehicleCardRnrDTO;
import com.cusc.nirvana.user.rnr.openapi.dto.groups.VehicleCardRnrGroup;
import com.cusc.nirvana.user.rnr.openapi.service.ICardUnBindService;
import com.cusc.nirvana.user.rnr.openapi.util.UserSubjectUtil;
import com.cusc.nirvana.user.util.CuscStringUtils;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.validation.Valid;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* Description: 实名解绑控制层
* <br />
* CreateDate 2022-04-16 15:16:55
*
* @author yuyi
**/
@RestController
@RequestMapping("/rnAuth/unbind")
public class OpenApiCardUnBindController {
@Autowired
private MgRnrCardInfoClient rnrCardInfoClient;
@Autowired
private MgRnrUnboundClient unboundClient;
@Autowired
ICardUnBindService cardUnBindService;
@Autowired
private MgRnrInfoClient rnrInfoClient;
@Autowired
private MgRnrCardInfoClient mgRnrCardInfoClient;
@ApiOperation(value = "原车主解绑即一手车解绑操作", notes = "原车主解绑即一手车解绑操作")
@PostMapping("/firstHandCar")
public Response firstHandCar(@Validated(VehicleCardRnrGroup.Submit.class) @RequestBody VehicleCardRnrDTO bean) {
String rnrId = getRnrIdByVinIccid(bean.getVin(), null);
if (StringUtils.isEmpty(rnrId)) {
return Response.createError("根据vin没有查询到任何已经实名的卡");
}
bean.setRnrId(rnrId);
//todo api层 解绑 短信 回调流程 待确认开发 是否轮询结果 然后给与回调
Response response = cardUnBindService.originalOwner(bean);
if (response.isSuccess()) {
return Response.createSuccess("解绑请求已受理,请查收解绑短信");
} else {
return response;
}
}
@ApiOperation(value = "二手车现车主解绑-自然人", notes = "二手车现车主解绑-自然人")
@PostMapping("/secondHandCar")
public Response secondHandCar(@Valid @RequestBody SecondHandUnbindRequestDTO bean) {
//todo api层 解绑 短信 回调流程 待确认开发 是否轮询结果 然后给与回调
return cardUnBindService.secondHandPersonalUnbind(bean);
}
@ApiOperation(value = "发送短信", notes = "发送短信")
@PostMapping("/sendMessage")
public Response sendMessage(@RequestBody VehicleCardRnrDTO bean) {
return cardUnBindService.sendMessage(bean);
}
@ApiOperation(value = "轮询查询工单状态", notes = "轮询查询工单状态")
@PostMapping("/checkOrderStatus")
public Response checkOrderStatus(@RequestBody RnrOrderDTO bean) {
return cardUnBindService.checkOrderStatus(bean);
}
@PostMapping("/byIccid")
@ApiOperation(value = "解绑", notes = "解绑")
public Response unbound(@Valid @RequestBody RnrUnboundReqDTO bean) {
// String rnrId = getRnrIdByVinIccid(null, bean.getIccid());
// if (StringUtils.isEmpty(rnrId)) {
// return Response.createError("根据iccid没有查询到任何已经实名的卡");
// }
//验证卡的状态
MgRnrCardInfoDTO card = new MgRnrCardInfoDTO();
card.setIccid(bean.getIccid());
card.setTenantNo(UserSubjectUtil.getTenantNo());
Response<MgRnrCardInfoDTO> cardResp = rnrCardInfoClient.getOneByIccid(card);
if (cardResp == null || !cardResp.isSuccess() || cardResp.getData() == null) {
return Response.createError(ResponseCode.ICCID_INVALID.getMsg(), ResponseCode.ICCID_INVALID.getCode());
}
// //判断输入的rnrid 和 iccid查询出来的 rnrId是否一致
// if (!cardResp.getData().getRnrId().equals(rnrId)) {
// return Response.createError(ResponseCode.INVALID_DATA.getMsg(), ResponseCode.INVALID_DATA.getCode());
// }
MgRnrInfoDTO info = new MgRnrInfoDTO();
info.setUuid(cardResp.getData().getRnrId());
info.setTenantNo(UserSubjectUtil.getTenantNo());
Response<MgRnrInfoDTO> infoResp = rnrInfoClient.getByUuid(info);
if (infoResp == null || !infoResp.isSuccess() || infoResp.getData() == null || CuscStringUtils.isEmpty(
infoResp.getData().getPhone())) {
return Response.createError(ResponseCode.RNR_INFO_INVALID.getMsg(),
ResponseCode.RNR_INFO_INVALID.getCode());
}
info = infoResp.getData();
//解绑
VehicleUnbindDTO unbind = new VehicleUnbindDTO();
unbind.setTenantNo(UserSubjectUtil.getTenantNo());
unbind.setIsTrust(0);
unbind.setIsSecondHandCar(0);
info.setSerial_number(CuscStringUtils.generateUuid());
info.setUuid(CuscStringUtils.generateUuid());
info.setRnrBizzType(RnrBizzTypeEnum.Unbound.getCode());
unbind.setInfo(info);
unbind.setOrder(createOrderInfo(info));
unbind.setCardList(createCardInfo(info, unbind.getOrder().getUuid(), cardResp.getData().getIotId(), cardResp.getData().getIccid()));
unbind.setCardIds(Arrays.asList(cardResp.getData().getUuid()));
unbind.setRnrIds(Arrays.asList(cardResp.getData().getRnrId()));
return unboundClient.batchUnbound(unbind);
}
private String getRnrIdByVinIccid(String vin, String iccid) {
MgRnrCardInfoDTO bean = new MgRnrCardInfoDTO();
bean.setIotId(vin);
List<String> iccids = new ArrayList<>();
iccids.add(iccid);
bean.setIccidList(iccids);
//bean.setTenantNo(UserSubjectUtil.getTenantNo());
Response<List<MgRnrCardInfoDTO>> mgRsp = mgRnrCardInfoClient.queryByList(bean);
if (mgRsp.isSuccess()) {
List<MgRnrCardInfoDTO> cardInfoDTOS = mgRsp.getData();
if (!CollectionUtils.isEmpty(cardInfoDTOS)) {
for (MgRnrCardInfoDTO cardInfo : cardInfoDTOS) {
if (null != cardInfo.getRnrStatus() && cardInfo.getRnrStatus().equals(RnrStatus.RNR.getCode())) {
return cardInfo.getRnrId();
}
}
}
}
return "";
}
//获取实名工单信息
private RnrOrderDTO createOrderInfo(MgRnrInfoDTO info) {
RnrOrderDTO rnrOrderDTO = new RnrOrderDTO();
rnrOrderDTO.setRnrBizzType(RnrBizzTypeEnum.Unbound.getCode());
rnrOrderDTO.setOrderType(RnrOrderType.UNBIND.getCode());
rnrOrderDTO.setRnrId(info.getUuid());
rnrOrderDTO.setUuid(CuscStringUtils.generateUuid());
rnrOrderDTO.setTenantNo(info.getTenantNo());
rnrOrderDTO.setOperator(UserSubjectUtil.getUserId());
rnrOrderDTO.setCreator(UserSubjectUtil.getUserId());
rnrOrderDTO.setOrderSource(RnrOrderSourceEnum.API.getCode());
rnrOrderDTO.setSerialNumber(info.getSerial_number());
rnrOrderDTO.setOrderStatus(RnrOrderStatusEnum.PASS.getCode());
rnrOrderDTO.setAutoRnr(true);
rnrOrderDTO.setAuditType(RnrOrderAuditTypeEnum.AUTO.getCode());
rnrOrderDTO.setSendWorkOrder(false);
rnrOrderDTO.setIsBatchOrder(IsBatchEnum.NO_BATCH.getCode());
return rnrOrderDTO;
}
//获取车卡信息
private List<MgRnrCardInfoDTO> createCardInfo(MgRnrInfoDTO info, String orderId, String iotId, String iccid) {
List<MgRnrCardInfoDTO> retList = new ArrayList<>();
MgRnrCardInfoDTO card = new MgRnrCardInfoDTO();
card.setRnrBizzType(RnrBizzTypeEnum.Unbound.getCode());
card.setIccid(iccid);
card.setIotId(iotId);
card.setRnrId(info.getUuid());
card.setOrderId(orderId);
card.setCreator(UserSubjectUtil.getUserId());
card.setSerial_number(info.getSerial_number());
card.setUuid(CuscStringUtils.generateUuid());
card.setTenantNo(info.getTenantNo());
retList.add(card);
return retList;
}
}
package com.cusc.nirvana.user.rnr.openapi.controller;
import com.cusc.nirvana.common.result.Response;
import com.cusc.nirvana.user.rnr.mg.dto.RnrOrderDTO;
import com.cusc.nirvana.user.rnr.openapi.dto.ChangeTboxDTO;
import com.cusc.nirvana.user.rnr.openapi.dto.groups.VehicleCardRnrGroup;
import com.cusc.nirvana.user.rnr.openapi.service.ICardUnBindService;
import com.cusc.nirvana.user.rnr.openapi.service.IChangeTboxService;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* Description: 更换车机控制层
* <br />
* CreateDate 2022-04-16 15:16:55
*
* @author yuyi
**/
@RestController
@RequestMapping("/rnAuth/tBox")
public class OpenApiChangeTboxController {
@Autowired
private IChangeTboxService changeTboxService;
@Autowired
private ICardUnBindService cardUnBindService;
@ApiOperation(value = "直接换件 不需要发业务短信", notes = "直接换件 不需要发业务短信")
@PostMapping("/changeDirect")
public Response changeDirect(@RequestBody ChangeTboxDTO bean) {
return changeTboxService.submit(bean);
}
/**
* 轮询查询工单状态
*
* @param bean
* @return
*/
@ApiOperation(value = "轮询查询工单状态", notes = "轮询查询工单状态")
@PostMapping("/checkOrderStatus")
public Response checkOrderStatus(@RequestBody RnrOrderDTO bean) {
return cardUnBindService.checkOrderStatus(bean);
}
/**
* Description: 查询绑定结果
* <br />
* CreateDate 2022-04-20 16:43:36
*
* @author yuyi
**/
@ApiOperation(value = "查询绑定结果", notes = "查询绑定结果")
@PostMapping("/bindResult")
public Response queryResult(@Validated(VehicleCardRnrGroup.Query.class) @RequestBody ChangeTboxDTO bean) {
return changeTboxService.queryResult(bean);
}
}
package com.cusc.nirvana.user.rnr.openapi.controller;
import com.cusc.nirvana.common.result.Response;
import com.cusc.nirvana.user.rnr.openapi.dto.QueryRnAuthDTO;
import com.cusc.nirvana.user.rnr.openapi.dto.VinDTO;
import com.cusc.nirvana.user.rnr.openapi.dto.response.RnAuthInfoRsp;
import com.cusc.nirvana.user.rnr.openapi.dto.response.RnAuthStateRsp;
import com.cusc.nirvana.user.rnr.openapi.service.IRnrAuthSearchService;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.validation.Valid;
import java.util.List;
/**
* Description: 实名查询api
* <br />
* CreateDate 2022-04-16 15:16:55
*
* @author yuyi
**/
@RestController
@RequestMapping("/rnAuth/search")
public class OpenApiRnrAuthSearchController {
@Autowired
IRnrAuthSearchService rnrAuthSearchService;
/**
* Description: 通过VIN查询已实名信息
* <br />
* CreateDate 2022-04-20 16:43:36
*
* @author yuyi
**/
@ApiOperation(value = "通过VIN查询已实名信息", notes = "通过VIN查询已实名信息")
@PostMapping("/getRnAuthInfoByVin")
public Response<List<RnAuthInfoRsp>> getRnrInfoByVin(@Valid @RequestBody VinDTO vinDTO) {
return rnrAuthSearchService.getRnrInfoByVin(vinDTO);
}
@ApiOperation(value = "通过VIN/iccid查询实名状态", notes = "通过VIN/iccid查询实名状态 iccid支持多个")
@PostMapping("/getRnAuthState")
public Response<RnAuthStateRsp> getRnAuthState(@Valid @RequestBody QueryRnAuthDTO queryRnAuthDTO) {
return rnrAuthSearchService.getRnAuthState(queryRnAuthDTO);
}
}
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