Commit e94b0a53 by zhangxingmin

Initial commit

parents
# Default ignored files
/shelf/
/workspace.xml
# Datasource local storage ignored files
/../../../../../../:\soft\ideaproject\v2\yd-csf-wx\.idea/dataSources/
/dataSources.local.xml
# Editor-based HTTP Client requests
/httpRequests/
<component name="ProjectCodeStyleConfiguration">
<state>
<option name="PREFERRED_PROJECT_CODE_STYLE" value="Default" />
</state>
</component>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CompilerConfiguration">
<annotationProcessing>
<profile name="Maven default annotation processors profile" enabled="true">
<sourceOutputDir name="target/generated-sources/annotations" />
<sourceTestOutputDir name="target/generated-test-sources/test-annotations" />
<outputRelativeToContentRoot value="true" />
<module name="yd-csf-wx-feign" />
<module name="yd-csf-wx-api" />
</profile>
</annotationProcessing>
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Encoding">
<file url="file://$PROJECT_DIR$/yd-csf-wx-api/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/yd-csf-wx-api/src/main/resources" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/yd-csf-wx-feign/src/main/java" charset="UTF-8" />
<file url="file://$PROJECT_DIR$/yd-csf-wx-feign/src/main/resources" charset="UTF-8" />
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="RemoteRepositoriesConfiguration">
<remote-repository>
<option name="id" value="yd-releases" />
<option name="name" value="yd-releases" />
<option name="url" value="http://139.224.145.34:8081/repository/yd-maven-public/" />
</remote-repository>
<remote-repository>
<option name="id" value="central" />
<option name="name" value="Central Repository" />
<option name="url" value="http://139.224.145.34:8081/repository/yd-maven-public/" />
</remote-repository>
<remote-repository>
<option name="id" value="yd-snapshots" />
<option name="name" value="yd-snapshots" />
<option name="url" value="http://139.224.145.34:8081/repository/yd-maven-public/" />
</remote-repository>
<remote-repository>
<option name="id" value="central" />
<option name="name" value="Maven Central repository" />
<option name="url" value="https://repo1.maven.org/maven2" />
</remote-repository>
<remote-repository>
<option name="id" value="jboss.community" />
<option name="name" value="JBoss Community repository" />
<option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" />
</remote-repository>
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ExternalStorageConfigurationManager" enabled="true" />
<component name="MavenProjectsManager">
<option name="originalFiles">
<list>
<option value="$PROJECT_DIR$/pom.xml" />
</list>
</option>
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" project-jdk-name="1.8" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/out" />
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="Palette2">
<group name="Swing">
<item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" />
</item>
<item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" />
</item>
<item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" />
</item>
<item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.png" removable="false" auto-create-binding="false" can-attach-label="true">
<default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" />
</item>
<item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" />
<initial-values>
<property name="text" value="Button" />
</initial-values>
</item>
<item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
<initial-values>
<property name="text" value="RadioButton" />
</initial-values>
</item>
<item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
<initial-values>
<property name="text" value="CheckBox" />
</initial-values>
</item>
<item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" />
<initial-values>
<property name="text" value="Label" />
</initial-values>
</item>
<item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
<preferred-size width="150" height="-1" />
</default-constraints>
</item>
<item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" />
</item>
<item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
<preferred-size width="150" height="50" />
</default-constraints>
</item>
<item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
<preferred-size width="200" height="200" />
</default-constraints>
</item>
<item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
<preferred-size width="200" height="200" />
</default-constraints>
</item>
<item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.png" removable="false" auto-create-binding="true" can-attach-label="true">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
</item>
<item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
</item>
<item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" />
</item>
<item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" />
</item>
<item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1">
<preferred-size width="-1" height="20" />
</default-constraints>
</item>
<item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.png" removable="false" auto-create-binding="false" can-attach-label="false">
<default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" />
</item>
<item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
<default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" />
</item>
</group>
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="GitSharedSettings">
<option name="FORCE_PUSH_PROHIBITED_PATTERNS">
<list />
</option>
</component>
</project>
\ No newline at end of file
<?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.yd</groupId>
<artifactId>yd-parent-pom</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
<groupId>com.yd</groupId>
<artifactId>yd-csf-wx</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<description>香港保险服务-小程序端</description>
<modules>
<module>yd-csf-wx-api</module>
<module>yd-csf-wx-feign</module>
</modules>
<dependencyManagement>
<dependencies>
<!-- 实体类模块 -->
<dependency>
<groupId>com.yd</groupId>
<artifactId>yd-csf-service</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.yd</groupId>
<artifactId>yd-csf-wx-feign</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<!-- 部署到Nexus -->
<distributionManagement>
<repository>
<id>yd-releases</id>
<url>http://139.224.145.34:8081/repository/yd-project-releases/</url>
</repository>
<snapshotRepository>
<id>yd-snapshots</id>
<url>http://139.224.145.34:8081/repository/yd-project-snapshots/</url>
</snapshotRepository>
</distributionManagement>
<repositories>
<!-- 配置Nexus快照仓库,用于拉取快照版本依赖 -->
<repository>
<id>yd-snapshots</id>
<url>http://139.224.145.34:8081/repository/yd-project-snapshots/</url>
<snapshots>
<enabled>true</enabled> <!-- 允许拉取快照版本 -->
</snapshots>
<releases>
<enabled>false</enabled> <!-- 不启用正式版仓库(按需调整) -->
</releases>
</repository>
</repositories>
</project>
\ No newline at end of file
<?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">
<parent>
<artifactId>yd-csf-wx</artifactId>
<groupId>com.yd</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>yd-csf-wx-api</artifactId>
<description>香港保险服务-小程序端</description>
<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- SpringCloud Alibaba Nacos Config -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!-- swagger2-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
</dependency>
<!--对于bootstrap.properties/bootstrap.yaml配置文件(我们合起来成为Bootstrap配置文件)的支持,需要导入如下的依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
<!-- Jackson 数据绑定库 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
</dependency>
<!-- Jackson 注解支持 -->
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
</dependency>
<!-- Java 8 时间类型支持 -->
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
</dependency>
<!-- 实体类模块 -->
<dependency>
<groupId>com.yd</groupId>
<artifactId>yd-csf-service</artifactId>
</dependency>
<dependency>
<groupId>com.yd</groupId>
<artifactId>yd-csf-wx-feign</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>${springboot.version}</version>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
<configuration>
<classifier>exec</classifier>
<mainClass>com.yd.email.api.EmailApiApplication</mainClass>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
\ No newline at end of file
package com.yd.csf.wx.api;
import com.yd.common.constant.ServerNameConstants;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.cloud.openfeign.EnableFeignClients;
@SpringBootApplication(scanBasePackages = "com.yd")
@MapperScan("com.yd.**.dao")
@EnableFeignClients(basePackages = "com.yd")
public class CsfWxApiApplication {
public static void main(String[] args) {
new SpringApplicationBuilder(CsfWxApiApplication.class)
.properties("spring.application.name="+ ServerNameConstants.ydCsfWxApi)
.build().run(args);
System.out.println("(♥◠‿◠)ノ゙ yd-csf-wx-api启动成功 ლ(´ڡ`ლ)゙ ");
}
}
package com.yd.csf.wx.api.controller;
import com.yd.common.result.Result;
import com.yd.csf.wx.api.service.ApiLoginService;
import com.yd.csf.wx.feign.client.login.ApiLoginFeignClient;
import com.yd.csf.wx.feign.request.login.ApiPhoneCodeLoginRequest;
import com.yd.csf.wx.feign.response.login.ApiPhoneCodeLoginResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* 登录信息
*
* @author zxm
* @since 2025-10-21
*/
@RestController
@RequestMapping("/login")
@Validated
public class ApiLoginController implements ApiLoginFeignClient {
@Autowired
private ApiLoginService apiLoginService;
/**
* 手机验证码登录
* @param request
* @return
*/
@Override
public Result<ApiPhoneCodeLoginResponse> phoneCodeLogin(ApiPhoneCodeLoginRequest request) {
return apiLoginService.phoneCodeLogin(request);
}
}
package com.yd.csf.wx.api.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.yd.common.result.Result;
import com.yd.csf.wx.api.service.ApiUserService;
import com.yd.csf.wx.feign.client.user.ApiUserFeignClient;
import com.yd.csf.wx.feign.request.user.ApiApprovalAccountPageRequest;
import com.yd.csf.wx.feign.request.user.ApiApprovalAccountRequest;
import com.yd.csf.wx.feign.request.user.ApiUserImproveRequest;
import com.yd.csf.wx.feign.response.user.ApiApprovalAccountPageResponse;
import com.yd.csf.wx.feign.response.user.ApiUserDetailResponse;
import com.yd.csf.wx.feign.response.user.ApiUserImproveResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* 个人信息
*
* @author zxm
* @since 2025-10-21
*/
@RestController
@RequestMapping("/user")
@Validated
public class ApiUserController implements ApiUserFeignClient {
@Autowired
private ApiUserService apiUserService;
/**
* 完善信息
* @param request
* @return
*/
@Override
public Result<ApiUserImproveResponse> userImprove(ApiUserImproveRequest request) {
return apiUserService.userImprove(request);
}
/**
* 审批账号列表查询
* @param request
* @return
*/
@Override
public Result<IPage<ApiApprovalAccountPageResponse>> approvalAccountPage(ApiApprovalAccountPageRequest request) {
return null;
}
/**
* 审批账号
* @param request
* @return
*/
@Override
public Result approvalAccount(ApiApprovalAccountRequest request) {
return apiUserService.approvalAccount(request);
}
/**
* 当前登录客户端用户详情
* @return
*/
@Override
public Result<ApiUserDetailResponse> detail() {
return apiUserService.detail();
}
}
package com.yd.csf.wx.api.service;
import com.yd.common.result.Result;
import com.yd.csf.wx.feign.request.login.ApiPhoneCodeLoginRequest;
import com.yd.csf.wx.feign.response.login.ApiPhoneCodeLoginResponse;
public interface ApiLoginService {
Result<ApiPhoneCodeLoginResponse> phoneCodeLogin(ApiPhoneCodeLoginRequest request);
}
package com.yd.csf.wx.api.service;
import com.yd.common.result.Result;
import com.yd.csf.wx.feign.request.user.ApiApprovalAccountRequest;
import com.yd.csf.wx.feign.request.user.ApiUserImproveRequest;
import com.yd.csf.wx.feign.response.user.ApiUserDetailResponse;
import com.yd.csf.wx.feign.response.user.ApiUserImproveResponse;
import com.yd.user.feign.response.clientuser.ApiClientUserPageResponse;
public interface ApiUserService {
Result<ApiUserImproveResponse> userImprove(ApiUserImproveRequest request);
Result approvalAccount(ApiApprovalAccountRequest request);
Result<ApiUserDetailResponse> detail();
ApiClientUserPageResponse getApiClientUserPageResponse(String phone, String invitationCode);
}
package com.yd.csf.wx.api.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.yd.auth.core.config.LoginConfig;
import com.yd.auth.core.dto.AuthUserDto;
import com.yd.auth.core.security.JwtTokenProvider;
import com.yd.common.constant.RedisConstants;
import com.yd.common.enums.CommonEnum;
import com.yd.common.enums.ProjectEnum;
import com.yd.common.enums.TenantEnum;
import com.yd.common.exception.BusinessException;
import com.yd.common.result.Result;
import com.yd.common.utils.RedisUtil;
import com.yd.csf.wx.api.service.ApiLoginService;
import com.yd.csf.wx.api.service.ApiUserService;
import com.yd.csf.wx.feign.dto.TokenDto;
import com.yd.csf.wx.feign.enums.RedirectPageEnum;
import com.yd.csf.wx.feign.request.login.ApiPhoneCodeLoginRequest;
import com.yd.csf.wx.feign.response.login.ApiPhoneCodeLoginResponse;
import com.yd.user.feign.client.clientuser.ApiClientUserFeignClient;
import com.yd.user.feign.request.clientuser.ApiClientUserPageRequest;
import com.yd.user.feign.response.clientuser.ApiClientUserPageResponse;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.List;
import java.util.Objects;
import java.util.concurrent.TimeUnit;
@Slf4j
@Service
public class ApiLoginServiceImpl implements ApiLoginService {
@Autowired
private ApiClientUserFeignClient apiClientUserFeignClient;
@Autowired
private JwtTokenProvider jwtTokenProvider;
@Autowired
private RedisUtil redisUtil;
@Autowired
private LoginConfig loginConfig;
@Autowired
private ApiUserService apiUserService;
/**
* 手机验证码登录
* @param request
* @return
*/
@Override
public Result<ApiPhoneCodeLoginResponse> phoneCodeLogin(ApiPhoneCodeLoginRequest request) {
ApiPhoneCodeLoginResponse loginResponse = new ApiPhoneCodeLoginResponse();
//TODO 校验手机号验证码是否正确 - redis缓存
//调用yd-user-api服务,查询客户端用户表信息,查询当前租户项目下是否有客户端手机号用户
ApiClientUserPageResponse response = apiUserService.getApiClientUserPageResponse(request.getPhone(),"");
if (!Objects.isNull(response)) {
//有客户端手机号用户数据:判断审批状态是否审批成功,审批成功直接到首页,其他状态到审批进度页面
if (CommonEnum.APPROVAL_STATUS_CG.getCode().equals(response.getApprovalStatus())) {
//审批成功 - 跳转到首页
loginResponse.setRedirectPage(RedirectPageEnum.HOME_PAGE.getItemValue());
}else {
//其他状态 - 审批进度页
loginResponse.setRedirectPage(RedirectPageEnum.PROGRESS.getItemValue());
}
//生成客户端用户登录token
TokenDto tokenDto = generateToken(response);
loginResponse.setTokenDto(tokenDto);
}else {
//无客户端手机号用户数据:判断入参有无推荐人邀请码,无推荐人邀请码则提示无权限登录。有推荐人邀请码到完善信息注册登录
if (StringUtils.isBlank(request.getInvitationCode())) {
throw new BusinessException("无权限登录!");
}
//有推荐人邀请码到完善信息页
loginResponse.setRedirectPage(RedirectPageEnum.IMPROVE.getItemValue());
}
return Result.success(loginResponse);
}
/**
* 生成客户端用户登录token
* @param response
* @return
*/
public TokenDto generateToken(ApiClientUserPageResponse response) {
//生成JWT令牌
String token = jwtTokenProvider.generateToken(response.getClientUserBizId());
log.info("生成JWT令牌:{}", token);
TokenDto tokenDto = new TokenDto();
//设置生成的JWT令牌
tokenDto.setToken(token);
// 设置令牌过期时间
tokenDto.setExpiresIn(jwtTokenProvider.getJwtExpiration());
//获取用户登录信息存入redis缓存中
AuthUserDto currentUser = (AuthUserDto) queryUserDetails(response);
redisUtil.setCacheObject(RedisConstants.LOGIN_USER + response.getClientUserBizId(),currentUser,loginConfig.getRedisTimeout(), TimeUnit.DAYS);
return tokenDto;
}
/**
* 客户端用户信息构造spring security认证对象UserDetails
* @param response
* @return spring security认证对象UserDetails
*/
public UserDetails queryUserDetails(ApiClientUserPageResponse response) {
AuthUserDto authUserDto = new AuthUserDto();
BeanUtils.copyProperties(response,authUserDto);
// 查询用户角色 TODO
// authUserDto.setRoles(roles);
return authUserDto;
}
}
package com.yd.csf.wx.api.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.yd.auth.core.dto.AuthUserDto;
import com.yd.auth.core.utils.SecurityUtil;
import com.yd.common.enums.CommonEnum;
import com.yd.common.enums.ProjectEnum;
import com.yd.common.enums.TenantEnum;
import com.yd.common.result.Result;
import com.yd.csf.feign.client.agentreferralrelation.ApiAgentReferralRelationFeignClient;
import com.yd.csf.feign.request.agentreferralrelation.ApiAgentReferralRelationSaveRequest;
import com.yd.csf.wx.api.service.ApiUserService;
import com.yd.csf.wx.feign.request.user.ApiApprovalAccountRequest;
import com.yd.csf.wx.feign.request.user.ApiUserImproveRequest;
import com.yd.csf.wx.feign.response.user.ApiUserDetailResponse;
import com.yd.csf.wx.feign.response.user.ApiUserImproveResponse;
import com.yd.user.feign.client.clientuser.ApiClientUserFeignClient;
import com.yd.user.feign.request.clientuser.ApiClientUserEditApprovalStatusRequest;
import com.yd.user.feign.request.clientuser.ApiClientUserPageRequest;
import com.yd.user.feign.request.clientuser.ApiClientUserSaveRequest;
import com.yd.user.feign.response.clientuser.ApiClientUserDetailResponse;
import com.yd.user.feign.response.clientuser.ApiClientUserPageResponse;
import com.yd.user.feign.response.clientuser.ApiClientUserSaveResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
@Slf4j
@Service
public class ApiUserServiceImpl implements ApiUserService {
@Autowired
private ApiClientUserFeignClient apiClientUserFeignClient;
@Autowired
private ApiAgentReferralRelationFeignClient apiAgentReferralRelationFeignClient;
/**
* 完善信息
* @param request
* @return
*/
@Override
public Result<ApiUserImproveResponse> userImprove(ApiUserImproveRequest request) {
ApiClientUserPageResponse pageResponse = getApiClientUserPageResponse(request.getPhone(),"");
ApiClientUserSaveRequest saveRequest = new ApiClientUserSaveRequest();
BeanUtils.copyProperties(request,saveRequest);
if (!Objects.isNull(pageResponse)) {
//有客户端用户数据,编辑
saveRequest.setClientUserBizId(pageResponse.getClientUserBizId());
}else {
//没有客户端用户数据,新增
saveRequest.setClientUserBizId("");
}
//审批状态 - 待同意(需要推荐人同意才能到管理端运营去审核)
saveRequest.setApprovalStatus(CommonEnum.APPROVAL_STATUS_DTY.getCode());
saveRequest.setBankFileUrlList(request.getBankFileUrlList());
saveRequest.setIdCardFileUrlList(request.getIdCardFileUrlList());
//保存账号信息 - 更新审批状态为待同意状态,需要推荐人审核同意
Result<ApiClientUserSaveResponse> result = apiClientUserFeignClient.save(saveRequest);
//被推荐人客户端用户信息
ApiClientUserSaveResponse saveResponse = result.getData();
//保存推荐关系信息
//查询推荐人客户端用户信息
ApiClientUserPageResponse pageResponse1 = getApiClientUserPageResponse("",request.getInvitationCode());
//被推荐人ID(客户端用户表唯一业务ID)列表
List<String> agentIdList = new ArrayList<>();
String referrerId = "";
String referrerAccount = "";
if (!Objects.isNull(saveResponse)) {
agentIdList.add(saveResponse.getClientUserBizId());
}
if (!Objects.isNull(pageResponse1)) {
referrerId = pageResponse1.getClientUserBizId();
referrerAccount = pageResponse1.getPhone();
}
saveAgentReferralRelation(agentIdList,referrerId,referrerAccount);
return Result.success();
}
/**
* 推荐人审批账号
* @param request
* @return
*/
@Override
public Result approvalAccount(ApiApprovalAccountRequest request) {
ApiClientUserEditApprovalStatusRequest statusRequest = new ApiClientUserEditApprovalStatusRequest();
statusRequest.setClientUserBizId(request.getClientUserBizId());
statusRequest.setRemark(request.getRemark());
if (1 == request.getStatus()) {
//同意 - 审批状态为待审核
statusRequest.setApprovalStatus(CommonEnum.APPROVAL_STATUS_DSH.getCode());
}else {
//拒绝 - 审批状态为拒绝
statusRequest.setApprovalStatus(CommonEnum.APPROVAL_STATUS_JJ.getCode());
}
apiClientUserFeignClient.editApprovalStatus(statusRequest);
return Result.success();
}
/**
* 当前登录客户端用户详情
* @return
*/
@Override
public Result<ApiUserDetailResponse> detail() {
ApiUserDetailResponse detailResponse = new ApiUserDetailResponse();
//当前认证上下文的登录用户信息,查询最新的用户信息需要单独调接口去查询
AuthUserDto authUserDto = SecurityUtil.getCurrentLoginUser();
Result<ApiClientUserDetailResponse> result = apiClientUserFeignClient.detail(authUserDto.getClientUserBizId());
ApiClientUserDetailResponse response = result.getData();
if (!Objects.isNull(response)) {
BeanUtils.copyProperties(response,detailResponse);
detailResponse.setBankFileUrlList(response.getBankFileUrlList());
detailResponse.setIdCardFileUrlList(response.getIdCardFileUrlList());
}
return Result.success(detailResponse);
}
/**
* 保存推荐关系
* @param agentIdList 被推荐人ID(客户端用户表唯一业务ID)列表
* @param referrerId 推荐人ID(客户端用户表唯一业务ID)
* @param referrerAccount 推荐人账号(客户端用户表手机号,如果是PC,这里就是sys_user的用户名)
* @return
*/
public Result saveAgentReferralRelation(List<String> agentIdList, String referrerId,
String referrerAccount) {
//CSF小程序项目 - 添加推荐关系
ApiAgentReferralRelationSaveRequest request = new ApiAgentReferralRelationSaveRequest();
//被推荐人ID(客户端用户表唯一业务ID)列表
request.setAgentIdList(agentIdList);
//租户业务ID
request.setTenantBizId(TenantEnum.YD.getTenantBizId());
//项目业务ID
request.setProjectBizId(ProjectEnum.CSF_MINI_PROGRAM.getProjectBizId());
//推荐人ID(客户端用户表唯一业务ID)
request.setReferrerId(referrerId);
//推荐人账号(客户端用户表手机号,如果是PC,这里就是sys_user的用户名)
request.setReferrerAccount(referrerAccount);
//推荐来源(PC、小程序等,字典,PC就是中台加入申请的)
request.setSource(CommonEnum.SOURCE_TYPE_MINI_PROGRAM.getCode());
apiAgentReferralRelationFeignClient.save(request);
return Result.success();
}
/**
* 根据手机号查询客户端用户信息
* @param phone
* @return
*/
@Override
public ApiClientUserPageResponse getApiClientUserPageResponse(String phone, String invitationCode) {
ApiClientUserPageResponse response = null;
//调用yd-user-api服务,查询客户端用户表信息,查询当前租户项目下是否有客户端手机号用户
ApiClientUserPageRequest pageRequest = new ApiClientUserPageRequest();
pageRequest.setPhone(phone);
pageRequest.setInvitationCode(invitationCode);
//暂时银盾租户 - 后期csf小程序多租户使用,小程序登录页应该有个下拉框去选择对应租户登录
pageRequest.setTenantBizId(TenantEnum.YD.getTenantBizId());
//CSF-小程序项目唯一业务ID(枚举固定)
pageRequest.setProjectBizId(ProjectEnum.CSF_MINI_PROGRAM.getProjectBizId());
Result<IPage<ApiClientUserPageResponse>> result = apiClientUserFeignClient.page(pageRequest);
if (!Objects.isNull(result.getData()) && !CollectionUtils.isEmpty(result.getData().getRecords())) {
List<ApiClientUserPageResponse> responses = result.getData().getRecords();
response = responses.get(0);
}
return response;
}
}
${AnsiColor.GREEN}
_ _ _ __ __ ____ _ _ _ _
| | (_)_ __ | | _\ \ / /__ / ___| |__ __ _| |_ / \ _ __ (_)
| | | | '_ \| |/ /\ \ /\ / / _ \ | | '_ \ / _` | __| / _ \ | '_ \| |
| |___| | | | | < \ V V / __/ |___| | | | (_| | |_ / ___ \| |_) | |
|_____|_|_| |_|_|\_\ \_/\_/ \___|\____|_| |_|\__,_|\__/_/ \_\ .__/|_|
|_|
${AnsiColor.BRIGHT_WHITE}
Spring Boot Version: ${spring-boot.version}
\ No newline at end of file
spring:
profiles:
active: test
# active: '@spring.profiles.active@'
---
spring:
application:
name: yd-csf-wx-api
profiles: dev
main:
allow-bean-definition-overriding: true
allow-circular-references: true
cloud:
nacos:
# 配置中心
config:
# 命名空间id(此处不用public,因public初始化的空间, id为空) 4e237601-cea8-414d-b7b9-d7adc8cbcf95
namespace: 22f9d61e-9011-4d45-88cb-24f9857e3eec
# nacos的ip地址和端口 120.79.64.17:10848
server-addr: 127.0.0.1:8848
# 这个就表示 在我们nacos命名空间id为 dev中 有一个data-id 为 demo-service.yml 的配置文件 读取这个里面的配置
file-extension: yml
config-retry-time: 300000
# 共享配置, 可以把公共配置放在同个命名空间下,然后创建一个 common.yml 文件 ,里面可以放共用的配置
shared-configs[0]:
dataId: linkwe-common.yml
refresh: true
# 发布到注册中心 (如果没有使用可以不配)
discovery:
# 命名空间id(此处不用public,因public初始化的空间, id为空)
namespace: ${spring.cloud.nacos.config.namespace}
# nacos的ip地址和端口
server-addr: ${spring.cloud.nacos.config.server-addr}
---
spring:
application:
name: yd-csf-wx-api
profiles: test
main:
allow-bean-definition-overriding: true
allow-circular-references: true
cloud:
nacos:
# 配置中心
config:
# 命名空间id(此处不用public,因public初始化的空间, id为空)
namespace: b3b01715-eb85-4242-992a-5aff03d864d4
# nacos的ip地址和端口
server-addr: 139.224.145.34:8848
# 这个就表示 在我们nacos命名空间id为 dev中 有一个data-id 为 demo-service.yml 的配置文件 读取这个里面的配置
file-extension: yml
config-retry-time: 300000
# 共享配置, 可以把公共配置放在同个命名空间下,然后创建一个 common.yml 文件 ,里面可以放共用的配置
shared-configs[0]:
dataId: yd-common.yml
group: YD_GROUP
refresh: true
extension-configs: # 扩展配置
- data-id: yd-csf-wx-api.yml
group: YD_GROUP
refresh: true
# 发布到注册中心 (如果没有使用可以不配)
discovery:
# 命名空间id(此处不用public,因public初始化的空间, id为空)
namespace: ${spring.cloud.nacos.config.namespace}
# nacos的ip地址和端口
server-addr: ${spring.cloud.nacos.config.server-addr}
group: YD_GROUP
---
spring:
profiles: prod
main:
allow-bean-definition-overriding: true
allow-circular-references: true
cloud:
nacos:
# 配置中心
config:
# 命名空间id(此处不用public,因public初始化的空间, id为空)
namespace: ewscrm
# nacos的ip地址和端口
server-addr: 127.0.0.1:8848
# 这个就表示 在我们nacos命名空间id为 dev中 有一个data-id 为 demo-service.yml 的配置文件 读取这个里面的配置
file-extension: yml
config-retry-time: 300000
# 共享配置, 可以把公共配置放在同个命名空间下,然后创建一个 common.yml 文件 ,里面可以放共用的配置
shared-configs[0]:
dataId: yd-common.yml
refresh: true
group: YD_GROUP
# 发布到注册中心 (如果没有使用可以不配)
discovery:
# 命名空间id(此处不用public,因public初始化的空间, id为空)
namespace: ${spring.cloud.nacos.config.namespace}
# nacos的ip地址和端口
server-addr: ${spring.cloud.nacos.config.server-addr}
#3.2.1\u4EE5\u4E0A\u4F7F\u7528
modulelist=com.baomidou.mybatisplus.extension.p6spy.MybatisPlusLogFactory,com.p6spy.engine.outage.P6OutageFactory
#3.2.1\u4EE5\u4E0B\u4F7F\u7528\u6216\u8005\u4E0D\u914D\u7F6E
#modulelist=com.p6spy.engine.logging.P6LogFactory,com.p6spy.engine.outage.P6OutageFactory
# \u81EA\u5B9A\u4E49\u65E5\u5FD7\u6253\u5370
logMessageFormat=com.baomidou.mybatisplus.extension.p6spy.P6SpyLogger
#\u65E5\u5FD7\u8F93\u51FA\u5230\u63A7\u5236\u53F0
appender=com.baomidou.mybatisplus.extension.p6spy.StdoutLogger
# \u4F7F\u7528\u65E5\u5FD7\u7CFB\u7EDF\u8BB0\u5F55 sql
#appender=com.p6spy.engine.spy.appender.Slf4JLogger
# \u8BBE\u7F6E p6spy driver \u4EE3\u7406
deregisterdrivers=true
# \u53D6\u6D88JDBC URL\u524D\u7F00
useprefix=true
# \u914D\u7F6E\u8BB0\u5F55 Log \u4F8B\u5916,\u53EF\u53BB\u6389\u7684\u7ED3\u679C\u96C6\u6709error,info,batch,debug,statement,commit,rollback,result,resultset.
excludecategories=info,debug,result,commit,resultset
# \u65E5\u671F\u683C\u5F0F
dateformat=yyyy-MM-dd HH:mm:ss
# \u5B9E\u9645\u9A71\u52A8\u53EF\u591A\u4E2A
#driverlist=org.h2.Driver
# \u662F\u5426\u5F00\u542F\u6162SQL\u8BB0\u5F55
outagedetection=true
# \u6162SQL\u8BB0\u5F55\u6807\u51C6 2 \u79D2
outagedetectioninterval=2
<?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">
<parent>
<artifactId>yd-csf-wx</artifactId>
<groupId>com.yd</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>yd-csf-wx-feign</artifactId>
<dependencies>
<dependency>
<groupId>com.yd</groupId>
<artifactId>yd-feign</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.yd</groupId>
<artifactId>yd-common</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
</dependency>
</dependencies>
</project>
\ No newline at end of file
package com.yd.csf.wx.feign.client.login;
import com.yd.common.result.Result;
import com.yd.csf.wx.feign.fallback.login.ApiLoginFeignFallbackFactory;
import com.yd.csf.wx.feign.request.login.ApiPhoneCodeLoginRequest;
import com.yd.csf.wx.feign.response.login.ApiPhoneCodeLoginResponse;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
/**
* 香港保险小程序端服务-登录信息Feign客户端
*/
@FeignClient(name = "yd-csf-api",fallbackFactory = ApiLoginFeignFallbackFactory.class)
public interface ApiLoginFeignClient {
/**
* 手机验证码登录
* @param request
* @return
*/
@PostMapping("/phone/code")
Result<ApiPhoneCodeLoginResponse> phoneCodeLogin(@Validated @RequestBody ApiPhoneCodeLoginRequest request);
}
package com.yd.csf.wx.feign.client.user;
import com.yd.common.result.Result;
import com.yd.csf.wx.feign.fallback.user.ApiUserFeignFactory;
import com.yd.csf.wx.feign.request.user.ApiApprovalAccountPageRequest;
import com.yd.csf.wx.feign.request.user.ApiApprovalAccountRequest;
import com.yd.csf.wx.feign.request.user.ApiUserImproveRequest;
import com.yd.csf.wx.feign.response.user.ApiUserDetailResponse;
import com.yd.csf.wx.feign.response.user.ApiUserImproveResponse;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
/**
* 香港保险小程序端服务-个人信息Feign客户端
*/
@FeignClient(name = "yd-csf-api",fallbackFactory = ApiUserFeignFactory.class)
public interface ApiUserFeignClient {
/**
* 完善信息
* @param request
* @return
*/
@PostMapping("/improve")
Result<ApiUserImproveResponse> userImprove(@Validated @RequestBody ApiUserImproveRequest request);
/**
* 审批账号列表查询
* @param request
* @return
*/
@PostMapping("/referrer/approval/page")
Result approvalAccountPage(@Validated @RequestBody ApiApprovalAccountPageRequest request);
/**
* 审批账号
* @param request
* @return
*/
@PostMapping("/referrer/approval")
Result approvalAccount(@Validated @RequestBody ApiApprovalAccountRequest request);
/**
* 当前登录客户端用户详情
* @return
*/
@GetMapping("/detail")
Result<ApiUserDetailResponse> detail();
}
package com.yd.csf.wx.feign.dto;
import lombok.Data;
/**
* 封装token DTO
*/
@Data
public class TokenDto {
/**
* 访问令牌,用于访问受保护的资源
*/
private String token;
/**
* 令牌类型,通常为 "Bearer",表示持有者令牌
*/
private String tokenType = "Bearer";
/**
* 令牌的有效期(以秒为单位),表示令牌在多少秒后过期
*/
private long expiresIn;
}
package com.yd.csf.wx.feign.enums;
/**
* 登录跳转页枚举
*/
public enum RedirectPageEnum {
HOME_PAGE("首页","HOME_PAGE"),
PROGRESS("审批进度页","PROGRESS"),
IMPROVE("完善信息页","IMPROVE"),
;
//字典项标签(名称)
private String itemLabel;
//字典项值
private String itemValue;
//构造函数
RedirectPageEnum(String itemLabel, String itemValue) {
this.itemLabel = itemLabel;
this.itemValue = itemValue;
}
public String getItemLabel() {
return itemLabel;
}
public String getItemValue() {
return itemValue;
}
}
package com.yd.csf.wx.feign.fallback.login;
import com.yd.common.result.Result;
import com.yd.csf.wx.feign.client.login.ApiLoginFeignClient;
import com.yd.csf.wx.feign.request.login.ApiPhoneCodeLoginRequest;
import com.yd.csf.wx.feign.response.login.ApiPhoneCodeLoginResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cloud.openfeign.FallbackFactory;
import org.springframework.stereotype.Component;
/**
* 香港保险小程序端服务-登录信息Feign降级处理
*/
@Slf4j
@Component
public class ApiLoginFeignFallbackFactory implements FallbackFactory<ApiLoginFeignClient> {
@Override
public ApiLoginFeignClient create(Throwable cause) {
return new ApiLoginFeignClient() {
@Override
public Result<ApiPhoneCodeLoginResponse> phoneCodeLogin(ApiPhoneCodeLoginRequest request) {
return null;
}
};
}
}
package com.yd.csf.wx.feign.fallback.user;
import com.yd.common.result.Result;
import com.yd.csf.wx.feign.client.user.ApiUserFeignClient;
import com.yd.csf.wx.feign.request.user.ApiApprovalAccountPageRequest;
import com.yd.csf.wx.feign.request.user.ApiApprovalAccountRequest;
import com.yd.csf.wx.feign.request.user.ApiUserImproveRequest;
import com.yd.csf.wx.feign.response.user.ApiUserDetailResponse;
import com.yd.csf.wx.feign.response.user.ApiUserImproveResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cloud.openfeign.FallbackFactory;
import org.springframework.stereotype.Component;
/**
* 香港保险小程序端服务-个人信息Feign降级处理
*/
@Slf4j
@Component
public class ApiUserFeignFactory implements FallbackFactory<ApiUserFeignClient> {
@Override
public ApiUserFeignClient create(Throwable cause) {
return new ApiUserFeignClient() {
@Override
public Result<ApiUserImproveResponse> userImprove(ApiUserImproveRequest request) {
return null;
}
@Override
public Result approvalAccountPage(ApiApprovalAccountPageRequest request) {
return null;
}
@Override
public Result approvalAccount(ApiApprovalAccountRequest request) {
return null;
}
@Override
public Result<ApiUserDetailResponse> detail() {
return null;
}
};
}
}
package com.yd.csf.wx.feign.request.login;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Pattern;
@Data
public class ApiPhoneCodeLoginRequest {
/**
* 手机号
*/
@NotBlank(message = "手机号不能为空")
@Pattern(regexp = "^(?:(?:\\+|00)86)?1[3-9]\\d{9}$", message = "手机号格式不正确")
private String phone;
/**
* 手机号验证码
*/
@NotBlank(message = "手机号验证码不能为空")
private String phoneCode;
/**
* 推荐人的邀请码,推荐链接带入进来,有值表示通过邀请加入,无值表示直接打开小程序
*/
private String invitationCode;
}
package com.yd.csf.wx.feign.request.user;
import com.yd.common.dto.PageDto;
import lombok.Data;
@Data
public class ApiApprovalAccountPageRequest extends PageDto {
}
package com.yd.csf.wx.feign.request.user;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
@Data
public class ApiApprovalAccountRequest {
/**
* 被审批的客户端用户表唯一业务ID
*/
@NotBlank(message = "被审批的客户端用户表唯一业务ID不能为空")
private String clientUserBizId;
/**
* 审批状态:0-拒绝 1-同意
*/
@NotNull(message = "审批状态不能为空")
private Integer status;
/**
* 备注
*/
private String remark;
}
package com.yd.csf.wx.feign.request.user;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.Pattern;
import java.util.List;
@Data
public class ApiUserImproveRequest {
/**
* 头像
*/
private String avatar;
/**
* 姓名
*/
@NotBlank(message = "姓名不能为空")
private String name;
/**
* 证件类型
*/
@NotBlank(message = "证件类型不能为空")
private String idCardType;
/**
* 证件号码
*/
@NotBlank(message = "证件号码不能为空")
private String idCardNumber;
/**
* 证件文件url列表
*/
@NotEmpty(message = "证件文件url不能为空")
private List<String> idCardFileUrlList;
/**
* 银行卡号
*/
@NotBlank(message = "银行卡号不能为空")
private String bankNumber;
/**
* 开户行
*/
@NotBlank(message = "开户行不能为空")
private String openBank;
/**
* 银行卡文件url(多个分号分开)
*/
@NotEmpty(message = "银行卡文件url不能为空")
private List<String> bankFileUrlList;
/**
* 手机号
*/
@NotBlank(message = "手机号不能为空")
@Pattern(regexp = "^(?:(?:\\+|00)86)?1[3-9]\\d{9}$", message = "手机号格式不正确")
private String phone;
/**
* 推荐人的邀请码,推荐链接带入进来,有值表示通过邀请加入,无值表示直接打开小程序
*/
@NotBlank(message = "推荐人的邀请码不能为空")
private String invitationCode;
}
package com.yd.csf.wx.feign.response.login;
import com.yd.csf.wx.feign.dto.TokenDto;
import lombok.Data;
@Data
public class ApiPhoneCodeLoginResponse {
/**
* 跳转页:首页-HOME_PAGE,审批进度页-PROGRESS,完善信息页-IMPROVE
*/
private String redirectPage;
/**
* 封装的TokenDto
*/
private TokenDto tokenDto;
}
package com.yd.csf.wx.feign.response.user;
import lombok.Data;
@Data
public class ApiApprovalAccountPageResponse {
}
package com.yd.csf.wx.feign.response.user;
import lombok.Data;
import java.util.List;
@Data
public class ApiUserDetailResponse {
/**
* 主键ID
*/
private Long id;
/**
* 客户端用户表唯一业务ID
*/
private String clientUserBizId;
/**
* 头像
*/
private String avatar;
/**
* 姓名
*/
private String name;
/**
* 手机号
*/
private String phone;
/**
* 邮箱
*/
private String email;
/**
* 证件类型
*/
private String idCardType;
/**
* 证件号码
*/
private String idCardNumber;
/**
* 证件文件url列表
*/
private List<String> idCardFileUrlList;
/**
* 银行卡号
*/
private String bankNumber;
/**
* 开户行
*/
private String openBank;
/**
* 银行卡文件url列表
*/
private List<String> bankFileUrlList;
/**
* 登录密码
*/
private String password;
/**
* 邀请码
*/
private String invitationCode;
/**
* 状态(0:停用 1:启用)
*/
private Integer status;
/**
* 审批状态
*/
private String approvalStatus;
/**
* 注册来源(PC、小程序等)默认小程序 - MINI_PROGRAM
*/
private String registerSource;
/**
* 所属租户唯一业务ID(冗余)
*/
private String tenantBizId;
/**
* 所属项目唯一业务ID(冗余)
*/
private String projectBizId;
}
package com.yd.csf.wx.feign.response.user;
import lombok.Data;
@Data
public class ApiUserImproveResponse {
}
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4" />
\ No newline at end of file
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