pom.xml
@@ -165,6 +165,15 @@ <version>${fastjson.version}</version> </dependency> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> </dependency> <dependency> <groupId>dom4j</groupId> <artifactId>dom4j</artifactId> <version>1.6.1</version> </dependency> </dependencies> src/main/java/com/xcong/excoin/common/contants/AppContants.java
@@ -27,4 +27,14 @@ */ public static final String TOKEN_START_WITH = "Bearer "; /** * 账号类型-手机号 */ public static final String ACCOUNT_TYPE_MOBILE = "1"; /** * 账号类型-邮箱 */ public static final String ACCOUNT_TYPE_EMAIL = "2"; } src/main/java/com/xcong/excoin/common/exception/GlobalException.java
New file @@ -0,0 +1,17 @@ package com.xcong.excoin.common.exception; import lombok.Getter; /** * 统一异常处理 * * @author wzy * @date 2020-05-18 **/ @Getter public class GlobalException extends RuntimeException { public GlobalException(String msg) { super(msg); } } src/main/java/com/xcong/excoin/common/system/base/BaseEntity.java
@@ -28,4 +28,6 @@ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private Date updateTime; private Integer version; } src/main/java/com/xcong/excoin/common/system/bean/LoginUserBean.java
@@ -32,7 +32,7 @@ @JsonIgnore @Override public String getUsername() { return memberEntity.getUsername(); return ""; } @JsonIgnore src/main/java/com/xcong/excoin/common/system/controller/CommonController.java
New file @@ -0,0 +1,70 @@ package com.xcong.excoin.common.system.controller; import com.xcong.excoin.common.contants.AppContants; import com.xcong.excoin.common.response.Result; import com.xcong.excoin.utils.RedisUtils; import com.xcong.excoin.utils.SmsUtils; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; import java.util.HashMap; import java.util.Map; /** * 公共请求类 * * @author wzy * @date 2020-05-18 **/ @Slf4j @Api(value = "公共请求类", tags = "公共请求类") @RestController @RequestMapping(value = "/common") public class CommonController { private static final String SUCCESS = "Success"; @Resource private RedisUtils redisUtils; @ApiOperation(value = "获取验证码接口", notes = "获取验证码通用接口") @GetMapping(value = "/verifyCode") public Result verifyCode(String account, String type) { log.info("#账号:{}, 类型:{}#", account, type); int code = (int) ((Math.random() * 9 + 1) * 100000); if (AppContants.ACCOUNT_TYPE_MOBILE.equals(type)) { Map<String, Object> result = SmsUtils.sendVerifyCode(account, code); if (SUCCESS.equals(result.get("resultstatus"))) { Map<String, Object> map = new HashMap<>(); boolean flag = redisUtils.set("SMS_" + account, code, 120); map.put("code", flag); return Result.ok("success", map); } } else if (AppContants.ACCOUNT_TYPE_EMAIL.equals(type)) { return Result.ok("success"); } else { log.info("未定义账号类型"); return Result.fail("fail"); } return Result.fail("fail"); } @ApiOperation(value = "验证验证码是否正确", notes = "验证验证码是否正确") @GetMapping(value = "/checkVerify") public Result checkVerify() { return null; } @ApiOperation(value = "文件上次接口", notes = "文件上传") @GetMapping(value = "/uploadFile") public Result uploadFile() { return null; } } src/main/java/com/xcong/excoin/common/system/controller/LoginController.java
@@ -1,17 +1,23 @@ package com.xcong.excoin.common.system.controller; import cn.hutool.core.util.IdUtil; import cn.hutool.crypto.SecureUtil; import cn.hutool.crypto.asymmetric.KeyType; import cn.hutool.crypto.asymmetric.RSA; import cn.hutool.crypto.asymmetric.Sign; import cn.hutool.crypto.asymmetric.SignAlgorithm; import com.alibaba.fastjson.JSONObject; import com.xcong.excoin.common.contants.AppContants; import com.xcong.excoin.common.response.Result; import com.xcong.excoin.common.system.bean.LoginUserBean; import com.xcong.excoin.common.system.dto.LoginDto; import com.xcong.excoin.common.system.dto.RegisterDto; import com.xcong.excoin.configurations.properties.ApplicationProperties; import com.xcong.excoin.configurations.properties.SecurityProperties; import com.xcong.excoin.modules.member.service.MemberService; import com.xcong.excoin.utils.RedisUtils; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; @@ -31,10 +37,13 @@ * @Version V1.0 **/ @Slf4j @Api(value = "登陆类", tags = "登陆类") @Api(value = "登陆注册类", tags = "登陆注册类") @RestController @RequestMapping(value = "/") public class LoginController { @Resource private MemberService memberservice; @Resource private ApplicationProperties applicationProperties; @@ -48,14 +57,25 @@ @Resource private RedisUtils redisUtils; @ApiOperation(value = "登陆接口", notes = "登陆接口") @PostMapping("/login") public Result login(@RequestBody @Validated LoginDto loginDto) { // 使用md5加密前端传来的密码 Sign sign = SecureUtil.sign(SignAlgorithm.MD5withRSA); byte[] pwdByte = sign.sign(loginDto.getPassword().getBytes()); // 将账号密码交给spring security验证,并调用userServiceDetails UsernamePasswordAuthenticationToken authToken = new UsernamePasswordAuthenticationToken(loginDto.getUsername(), loginDto.getPassword()); Authentication authentication = authenticationManagerBuilder.getObject().authenticate(authToken); String token = IdUtil.simpleUUID(); // 获取当前验证过后的用户 LoginUserBean loginUserBean = (LoginUserBean) authentication.getPrincipal(); redisUtils.set(AppContants.APP_LOGIN_PREFIX + token, JSONObject.toJSONString(loginUserBean), 300000); // 生成UUID作为token String token = IdUtil.simpleUUID(); redisUtils.set(AppContants.APP_LOGIN_PREFIX + token, JSONObject.toJSONString(loginUserBean), applicationProperties.getRedisExpire()); Map<String, Object> authInfo = new HashMap<>(); // 开启debug模式,则将加密后的token返回 if (applicationProperties.isDebug()) { authInfo.put("token", token); authInfo.put("rsaToken", generateAsaToken(token)); @@ -71,4 +91,11 @@ RSA rsa = new RSA(null, securityProperties.getPublicKey()); return rsa.encryptBase64(token + "_" +System.currentTimeMillis(), KeyType.PublicKey); } @ApiOperation(value = "app注册接口", notes = "app注册接口,验证码必须输入可默认为123456") @PostMapping(value = "/register") public Result register(@RequestBody @Validated RegisterDto registerDto) { return null; } } src/main/java/com/xcong/excoin/common/system/dto/RegisterDto.java
New file @@ -0,0 +1,38 @@ package com.xcong.excoin.common.system.dto; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import org.hibernate.validator.constraints.Length; import javax.validation.constraints.NotBlank; /** * 注册用户接收类 * * @author wzy * @date 2020-05-18 **/ @Data @ApiModel(value = "注册接口参数类", description = "注册接口参数类") public class RegisterDto { @ApiModelProperty(value = "账号", example = "13412341234") @NotBlank(message = "账号不能为空") private String account; @ApiModelProperty(value = "密码", example = "123456") @NotBlank(message = "密码不能为空") private String password; @ApiModelProperty(value = "账号类型", notes = "1-手机 2-邮箱", example = "1") @NotBlank(message = "账号类型不能为空") private String type; @ApiModelProperty(value = "验证码", example = "123456") @NotBlank(message = "验证码不能为空") private String code; @ApiModelProperty(value = "推荐人id", example = "rxadr3") private String refererId; } src/main/java/com/xcong/excoin/common/system/service/UserDetailsServiceImpl.java
@@ -1,6 +1,11 @@ package com.xcong.excoin.common.system.service; import cn.hutool.crypto.SecureUtil; import cn.hutool.crypto.asymmetric.Sign; import cn.hutool.crypto.asymmetric.SignAlgorithm; import com.xcong.excoin.common.exception.GlobalException; import com.xcong.excoin.common.system.bean.LoginUserBean; import com.xcong.excoin.modules.member.dao.MemberDao; import com.xcong.excoin.modules.member.entity.MemberEntity; import lombok.extern.slf4j.Slf4j; import org.springframework.security.core.GrantedAuthority; @@ -9,6 +14,7 @@ import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.ArrayList; import java.util.List; @@ -22,16 +28,26 @@ @Service("userDetailsService") public class UserDetailsServiceImpl implements UserDetailsService { @Resource private MemberDao memberDao; @Override public LoginUserBean loadUserByUsername(String username) throws UsernameNotFoundException { log.info("#登陆账号:{}#", username); List<GrantedAuthority> grantedAuthorities = new ArrayList<>(); // GrantedAuthority grantedAuthority = new SimpleGrantedAuthority("ROLE_ADMIN"); // grantedAuthorities.add(grantedAuthority); MemberEntity memberEntity = new MemberEntity(); memberEntity.setId(1L); memberEntity.setUsername("11111"); memberEntity.setPassword(new BCryptPasswordEncoder().encode("123456")); MemberEntity memberEntity = memberDao.selectMemberInfoByAccount(username); if (memberEntity != null) { memberEntity.setPassword(new BCryptPasswordEncoder().encode(memberEntity.getPassword())); } else { throw new UsernameNotFoundException(""); } if (MemberEntity.ACCOUNT_STATUS_DISABLED == memberEntity.getAccountStatus()) { throw new GlobalException("账号已被禁用"); } return new LoginUserBean(memberEntity, null, null); } src/main/java/com/xcong/excoin/configurations/GlobalExceptionHandler.java
@@ -1,5 +1,6 @@ package com.xcong.excoin.configurations; import com.xcong.excoin.common.exception.GlobalException; import com.xcong.excoin.common.response.Result; import lombok.extern.slf4j.Slf4j; import org.springframework.dao.DuplicateKeyException; @@ -49,11 +50,6 @@ return null; } @ExceptionHandler(value = {Exception.class}) public Result handleException(Exception e) { log.error(e.getMessage(), e); return Result.fail("系统异常"); } /** * spring security 账户密码验证异常 @@ -67,4 +63,15 @@ return Result.fail("用户名或密码错误"); } @ExceptionHandler(value = {GlobalException.class}) public Result handleException(GlobalException e) { return Result.fail(e.getMessage()); } @ExceptionHandler(value = {Exception.class}) public Result handleException(Exception e) { log.error(e.getMessage(), e); return Result.fail("系统异常"); } } src/main/java/com/xcong/excoin/configurations/interceptor/MybatisInterceptor.java
@@ -79,8 +79,9 @@ if (o instanceof BaseEntity) { BaseEntity baseEntity = (BaseEntity) o; if (member != null) { baseEntity.setCreateBy(member.getUsername()); baseEntity.setUpdateBy(member.getUsername()); String by = member.getPhone() != null ? member.getPhone() : member.getEmail(); baseEntity.setCreateBy(by); baseEntity.setUpdateBy(by); } else { baseEntity.setCreateBy(AppContants.SYSTEM_USER); baseEntity.setUpdateBy(AppContants.SYSTEM_USER); @@ -95,7 +96,8 @@ if (o instanceof BaseEntity) { BaseEntity baseEntity = (BaseEntity) o; if (member != null) { baseEntity.setUpdateBy(member.getUsername()); String by = member.getPhone() != null ? member.getPhone() : member.getEmail(); baseEntity.setUpdateBy(by); } else { baseEntity.setUpdateBy(AppContants.SYSTEM_USER); } src/main/java/com/xcong/excoin/configurations/properties/ApplicationProperties.java
@@ -15,4 +15,6 @@ @ConfigurationProperties(prefix = "app") public class ApplicationProperties { private boolean debug; private Long redisExpire; } src/main/java/com/xcong/excoin/modules/member/controller/MemberController.java
New file @@ -0,0 +1,15 @@ package com.xcong.excoin.modules.member.controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** * 用户类 * * @author wzy * @date 2020-05-18 **/ @RestController @RequestMapping(value = "/api/member") public class MemberController { } src/main/java/com/xcong/excoin/modules/member/dao/MemberDao.java
New file @@ -0,0 +1,13 @@ package com.xcong.excoin.modules.member.dao; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.xcong.excoin.modules.member.entity.MemberEntity; import org.apache.ibatis.annotations.Param; /** * @author wzy */ public interface MemberDao extends BaseMapper<MemberEntity> { public MemberEntity selectMemberInfoByAccount(@Param("account") String account); } src/main/java/com/xcong/excoin/modules/member/entity/MemberAuthenticationEntity.java
New file @@ -0,0 +1,56 @@ package com.xcong.excoin.modules.member.entity; import com.baomidou.mybatisplus.annotation.TableName; import com.xcong.excoin.common.system.base.BaseEntity; import lombok.Data; /** * 用户实名认证信息实体 * * @author wzy * @date 2020-05-18 **/ @Data @TableName("member_authentication") public class MemberAuthenticationEntity extends BaseEntity { /** * 用户ID */ private Long memberId; /** * 真实姓名 */ private String realName; /** * 姓 */ private String firstName; /** * 名 */ private String secondName; /** * 国家 */ private String nation; /** * 身份证正面 */ private String idcardImageFront; /** * 身份证背面 */ private String idcardImageBack; /** * 手持身份证 */ private String idcardImageInHand; } src/main/java/com/xcong/excoin/modules/member/entity/MemberEntity.java
@@ -1,5 +1,6 @@ package com.xcong.excoin.modules.member.entity; import com.baomidou.mybatisplus.annotation.TableName; import com.xcong.excoin.common.system.base.BaseEntity; import lombok.Data; @@ -12,12 +13,91 @@ * @date 2020-05-12 **/ @Data public class MemberEntity extends BaseEntity implements Serializable { private static final long serialVersionUID = -1L; @TableName("member") public class MemberEntity extends BaseEntity { private Long id; /** * 账号状态 - 禁用 */ public static final Integer ACCOUNT_STATUS_DISABLED = 0; private String username; /** * 账号状态 - 启用 */ public static final Integer ACCOUNT_STATUS_ENABLE = 1; /** * 手机号(包含国际手机号) */ private String phone; /** * 邮箱 */ private String email; /** * 登陆密码 */ private String password; /** * 交易密码 */ private String tradePassword; /** * 交易密码时效性设置 */ private Integer tradeAgingSetting; /** * 邀请码 */ private String inviteId; /** * 账号状态 0-禁用 1-启用 */ private int accountStatus; /** * 上级推荐人id */ private String refererId; /** * 上级推荐人ID链 */ private String refererIds; /** * 账号类型 1-正常账号 2-测试账号 */ private Integer accountType; /** * 代理级别 */ private Integer agentLevel; /** * 实名认证状态 0-审核未通过 1-审核通过 2-等待审核 */ private Integer certifyStatus; /** * 身份证号 */ private String idcardNo; /** * 是否设置盈亏难度系数 0-否1-是 */ private Integer isProfit; /** * 是否设置预估强平价系数 0-否1-是 */ private Integer isForce; } src/main/java/com/xcong/excoin/modules/member/entity/MemberWalletAgentEntity.java
New file @@ -0,0 +1,53 @@ package com.xcong.excoin.modules.member.entity; import com.baomidou.mybatisplus.annotation.TableName; import com.xcong.excoin.common.system.base.BaseEntity; import lombok.Data; import java.math.BigDecimal; /** * 代理用户钱包 * * @author wzy * @date 2020-05-18 **/ @Data @TableName("member_wallet_agent") public class MemberWalletAgentEntity extends BaseEntity { /** * 用户Id */ private Long memberId; /** * 可用余额 */ private BigDecimal availableBalance; /** * 总金额 */ private BigDecimal totalBalance; /** * 冻结金额 */ private BigDecimal frozenBalance; /** * 借入资产金额 */ private BigDecimal borrowedFund; /** * 钱包标识 */ private String walletCode; /** * 钱包地址 */ private String walletAddress; } src/main/java/com/xcong/excoin/modules/member/entity/MemberWalletCoinEntity.java
New file @@ -0,0 +1,61 @@ package com.xcong.excoin.modules.member.entity; import com.baomidou.mybatisplus.annotation.TableName; import com.xcong.excoin.common.system.base.BaseEntity; import lombok.Data; import java.math.BigDecimal; /** * @author wzy * @date 2020-05-18 **/ @Data @TableName("member_wallet_coin") public class MemberWalletCoinEntity extends BaseEntity { /** * 用户Id */ private Long memberId; /** * 可用余额 */ private BigDecimal availableBalance; /** * 总金额 */ private BigDecimal totalBalance; /** * 冻结金额 */ private BigDecimal frozenBalance; /** * 借入资产金额 */ private BigDecimal borrowedFund; /** * 钱包标识 */ private String walletCode; /** * 钱包地址 */ private String walletAddress; /** * 上次余额 */ private BigDecimal earlyBalance; /** * 区块编号 */ private int blockNumber; } src/main/java/com/xcong/excoin/modules/member/entity/MemberWalletContractEntity.java
New file @@ -0,0 +1,33 @@ package com.xcong.excoin.modules.member.entity; import com.baomidou.mybatisplus.annotation.TableName; import com.xcong.excoin.common.system.base.BaseEntity; import lombok.Data; import java.math.BigDecimal; /** * @author wzy * @date 2020-05-18 **/ @Data @TableName("member_wallet_contract") public class MemberWalletContractEntity extends BaseEntity { private Long memberId; private BigDecimal availableBalance; private BigDecimal totalBalance; private BigDecimal frozenBalance; private BigDecimal borrowedFund; private BigDecimal earlyBalance; private int blockNumber; private String walletCode; private String walletAddress; } src/main/java/com/xcong/excoin/modules/member/service/MemberService.java
New file @@ -0,0 +1,11 @@ package com.xcong.excoin.modules.member.service; import com.baomidou.mybatisplus.extension.service.IService; import com.xcong.excoin.modules.member.entity.MemberEntity; import com.xcong.excoin.modules.test.entity.TestUserEntity; /** * @author wzy */ public interface MemberService extends IService<MemberEntity> { } src/main/java/com/xcong/excoin/modules/member/service/impl/MemberServiceImpl.java
New file @@ -0,0 +1,13 @@ package com.xcong.excoin.modules.member.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.xcong.excoin.modules.member.dao.MemberDao; import com.xcong.excoin.modules.member.entity.MemberEntity; import com.xcong.excoin.modules.member.service.MemberService; /** * @author wzy * @date 2020-05-18 **/ public class MemberServiceImpl extends ServiceImpl<MemberDao, MemberEntity> implements MemberService { } src/main/java/com/xcong/excoin/modules/test/entity/TestUserEntity.java
@@ -1,5 +1,6 @@ package com.xcong.excoin.modules.test.entity; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.xcong.excoin.common.system.base.BaseEntity; import lombok.Data; @@ -19,4 +20,7 @@ private String account; private String password; @TableField(exist = false) private String aaaaa; } src/main/java/com/xcong/excoin/utils/SSLClient.java
New file @@ -0,0 +1,49 @@ package com.xcong.excoin.utils; import org.apache.http.conn.ClientConnectionManager; import org.apache.http.conn.scheme.Scheme; import org.apache.http.conn.scheme.SchemeRegistry; import org.apache.http.conn.ssl.SSLSocketFactory; import org.apache.http.impl.client.DefaultHttpClient; import javax.net.ssl.SSLContext; import javax.net.ssl.TrustManager; import javax.net.ssl.X509TrustManager; import java.security.cert.CertificateException; import java.security.cert.X509Certificate; @SuppressWarnings("deprecation") class SSLClient extends DefaultHttpClient { public SSLClient() throws Exception { super(); SSLContext ctx = SSLContext.getInstance("TLS"); X509TrustManager tm = new X509TrustManager() { @Override public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException { // TODO Auto-generated method stub } @Override public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException { // TODO Auto-generated method stub } @Override public X509Certificate[] getAcceptedIssuers() { // TODO Auto-generated method stub return null; } }; ctx.init(null, new TrustManager[] { tm }, null); SSLSocketFactory ssf = new SSLSocketFactory(ctx, SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER); ClientConnectionManager ccm = this.getConnectionManager(); SchemeRegistry sr = ccm.getSchemeRegistry(); sr.register(new Scheme("https", 443, ssf)); } } src/main/java/com/xcong/excoin/utils/SmsUtils.java
New file @@ -0,0 +1,96 @@ package com.xcong.excoin.utils; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.NameValuePair; import org.apache.http.client.HttpClient; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpPost; import org.apache.http.message.BasicNameValuePair; import org.apache.http.protocol.HTTP; import org.apache.http.util.EntityUtils; import org.dom4j.Document; import org.dom4j.DocumentHelper; import org.dom4j.Element; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; /** * 短信发送工具 * * @author wzy * @date 2020-05-18 **/ public class SmsUtils { private static HttpClient httpclient; @SuppressWarnings("deprecation") public static Map<String, Object> hxSmsSend(String mobile, String sendContent) { Map<String, Object> map = new HashMap<String, Object>(); try { httpclient = new SSLClient(); //TFT001 String url = "https://dx.ipyy.net/sms.aspx"; //excoin DX001 //ctcoin:OT00028 //改为实际账号名 String accountName = "DX001"; //excoin 1qaz2wsx //ctcoin: atvckt //改为实际发送密码 String password = "1qaz2wsx"; String text = sendContent; HttpPost post = new HttpPost(url); post.setHeader("Content-type", "application/x-www-form-urlencoded;charset=utf-8"); List<NameValuePair> nvps = new ArrayList<NameValuePair>(); nvps.add(new BasicNameValuePair("action", "send")); nvps.add(new BasicNameValuePair("userid", "")); nvps.add(new BasicNameValuePair("account", accountName)); nvps.add(new BasicNameValuePair("password", password)); //多个手机号用逗号分隔 nvps.add(new BasicNameValuePair("mobile", mobile)); nvps.add(new BasicNameValuePair("content", text)); nvps.add(new BasicNameValuePair("sendTime", "")); nvps.add(new BasicNameValuePair("extno", "")); post.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8)); HttpResponse response = httpclient.execute(post); HttpEntity entity = response.getEntity(); // 将字符转化为XML String returnString = EntityUtils.toString(entity, "UTF-8"); Document doc = DocumentHelper.parseText(returnString); // 获取根节点 Element rootElt = doc.getRootElement(); // 获取根节点下的子节点的值 String returnstatus = rootElt.elementText("returnstatus").trim(); String message = rootElt.elementText("message").trim(); String remainpoint = rootElt.elementText("remainpoint").trim(); String taskID = rootElt.elementText("taskID").trim(); String successCounts = rootElt.elementText("successCounts").trim(); map.put("returnstatus", returnstatus); map.put("message", message); map.put("remainpoint", remainpoint); map.put("taskID", taskID); map.put("successCounts", successCounts); } catch (Exception e) { e.printStackTrace(); } return map; } /** * 短信验证码 * * @param phone 手机号 * @param code 验证码 * @return */ public static Map<String, Object> sendVerifyCode(String phone, int code) { String smsContent = "【Excoin】您的验证码为:"+code+",该验证码有效期为2分钟,请勿泄露于他人。"; return hxSmsSend(phone, smsContent); } } src/main/resources/application.yml
@@ -70,11 +70,12 @@ ## 连接超时时间(毫秒) timeout: 30000 mybatis-plus: mapper-locations: classpath:mapper/*.xml mapper-locations: classpath:mapper/**/*.xml app: debug: true redis_expire: 3000 rsa: public_key: MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCCf8UFZK54AiK4PRu7tNd+Z8qZ77o/QXCnk25DRmygVpOEu5mGNSAvfnWmKp2pEV2RljeXq3Rid/+LQkonaebMJeXKSF0yxL/VgyeT8JaQ5gNbOrdfdlc+mFkXJyzyJt8YkvApEdPRNSU2ENBn7mgRfD0BYPM4vZ6/rv+de38FJwIDAQAB src/main/resources/mapper/member/MemberDao.xml
New file @@ -0,0 +1,8 @@ <?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="com.xcong.excoin.modules.member.dao.MemberDao"> <select id="selectMemberInfoByAccount" resultType="com.xcong.excoin.modules.member.entity.MemberEntity"> select * from member where phone=#{account} or email=#{account} </select> </mapper>