123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238 |
- package com.szwl.controller;
- import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
- import com.baomidou.mybatisplus.core.toolkit.Wrappers;
- import com.szwl.constant.ResponseCodesEnum;
- import com.szwl.model.bo.R;
- import com.szwl.model.bo.ResponseModel;
- import com.szwl.model.entity.TAdmin;
- import com.szwl.model.entity.TMessageCode;
- import com.szwl.service.TAdminService;
- import com.szwl.service.TMessageCodeService;
- import io.swagger.annotations.Api;
- import io.swagger.annotations.ApiOperation;
- import org.apache.commons.lang.StringUtils;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.web.bind.annotation.GetMapping;
- import org.springframework.web.bind.annotation.PostMapping;
- import org.springframework.web.bind.annotation.RequestMapping;
- import org.springframework.web.bind.annotation.RestController;
- import java.text.SimpleDateFormat;
- import java.util.Date;
- import java.util.List;
- import java.util.regex.Pattern;
- /**
- * <p>
- * 短信验证码 前端控制器
- * </p>
- *
- * @author wuhs
- * @since 2022-04-14
- */
- @Api(value = "/tMessageCode", tags = {"验证码"})
- @RestController
- @RequestMapping("/tMessageCode")
- public class TMessageCodeController {
- @Autowired
- TAdminService tAdminService;
- @Autowired
- TMessageCodeService tMessageCodeService;
- @ApiOperation(value = "获取上次发送验证码的时间")
- @GetMapping("/getLastSendTime")
- public ResponseModel<?> getLastSendTime(String phoneOrEmail) {
- if (StringUtils.isEmpty(phoneOrEmail)) {
- return R.fail(ResponseCodesEnum.A0100, "手机号或邮箱为空!");
- }
- // 查询该 手机号/邮箱 最后一次发送验证码的时间
- Date lastSendTime = tMessageCodeService.getLastSendTime(phoneOrEmail);
- // SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
- // String format = sdf.format(lastSendTime);
- // return R.ok(format);
- return R.ok(lastSendTime); // 返回时间戳
- }
- @ApiOperation(value = "发送注册验证码")
- @PostMapping("/sentRegisterCode")
- public ResponseModel<?> sentRegisterCode(String ifForeign, String phoneOrEmail, String hostName) {
- if (StringUtils.isEmpty(phoneOrEmail)) {
- // 说明参数为空
- return R.fail(ResponseCodesEnum.A0100, "手机号或邮箱为空!");
- }
- // 查询该 手机号/邮箱 最后一次发送验证码的时间
- Date lastSendTime = tMessageCodeService.getLastSendTime(phoneOrEmail);
- long lastTime = lastSendTime.getTime();
- long currentTime = System.currentTimeMillis();
- if (currentTime - lastTime < 10 * 60 * 1000) {
- return R.fail("请勿频繁发送,10分钟后再试");
- }
- String SZ = "Sunzee";
- String companyType = "";
- if (StringUtils.isNotEmpty(hostName) && SZ.equals(hostName)) {
- companyType = "0";
- } else {
- companyType = "1";
- }
- // 如果是国内
- if (ifForeign.equals("0")) {
- // 定义国内手机号和邮箱的正则表达式
- String phoneReg = "^1[3-9]\\d{9}$";
- String emailReg = "^[a-zA-Z0-9_-]+([a-zA-Z0-9_.-]*[a-zA-Z0-9])*@[a-zA-Z0-9_-]+(\\.[a-zA-Z0-9_-]+)+$";
- // 判断 phoneOrEmail 是手机号还是邮箱
- if (Pattern.matches(phoneReg, phoneOrEmail)) {
- //检测是否已有手机号注册
- LambdaQueryWrapper<TAdmin> query = Wrappers.lambdaQuery();
- query.eq(TAdmin::getPhone, phoneOrEmail);
- List<TAdmin> list = tAdminService.list(query);
- if (list.size() > 0) {
- return R.fail(ResponseCodesEnum.A0202, "用户手机号已存在");
- }
- // 国内发送短信
- String result = tMessageCodeService.sentMessage("0", phoneOrEmail, companyType);
- return R.ok(result);
- } else if (Pattern.matches(emailReg, phoneOrEmail)) {
- // 检测是否已有邮箱注册
- LambdaQueryWrapper<TAdmin> query = Wrappers.lambdaQuery();
- query.eq(TAdmin::getEmail, phoneOrEmail);
- List<TAdmin> list = tAdminService.list(query);
- if (list.size() > 0) {
- return R.fail(ResponseCodesEnum.A0207, "用户邮箱已存在");
- }
- // 国内发送邮箱
- String result = tMessageCodeService.sentEmail("0", phoneOrEmail);
- return R.ok(result);
- } else {
- System.out.println("不是有效的手机号或邮箱地址");
- return R.fail(ResponseCodesEnum.A0100, "不是有效的手机号或邮箱地址");
- }
- } else {
- //检测是否已有邮箱注册
- LambdaQueryWrapper<TAdmin> query = Wrappers.lambdaQuery();
- query.eq(TAdmin::getEmail, phoneOrEmail);
- List<TAdmin> list = tAdminService.list(query);
- if (list.size() > 0) {
- return R.fail(ResponseCodesEnum.A0207, "用户邮箱已存在");
- }
- //国外发邮件
- String result = tMessageCodeService.sentEmail("0", phoneOrEmail);
- return R.ok(result);
- }
- }
- @ApiOperation(value = "发送忘记密码验证码")
- @PostMapping("/sentForgetCode")
- public ResponseModel<?> sentForgetCode(String ifForeign, String username, String phoneOrEmail, String hostName) {
- if (StringUtils.isEmpty(username)) {
- return R.fail(ResponseCodesEnum.A0100, "用户名为空!");
- }
- if (ifForeign.equals("2")) {
- ifForeign = "0";
- }
- String SZ = "Sunzee";
- String companyType = "";
- if (StringUtils.isNotEmpty(hostName) && SZ.equals(hostName)) {
- companyType = "0";
- } else {
- companyType = "1";
- }
- // 如果是国内
- if (ifForeign.equals("0")) {
- if (StringUtils.isEmpty(phoneOrEmail)) {
- return R.fail(ResponseCodesEnum.A0100, "手机号或邮箱为空!");
- }
- // 定义国内手机号和邮箱的正则表达式
- String phoneReg = "^1[3-9]\\d{9}$";
- String emailReg = "^[a-zA-Z0-9_-]+([a-zA-Z0-9_.-]*[a-zA-Z0-9])*@[a-zA-Z0-9_-]+(\\.[a-zA-Z0-9_-]+)+$";
- // 判断 phoneOrEmail 是手机号还是邮箱
- if (Pattern.matches(phoneReg, phoneOrEmail)) {
- System.out.println("忘记密码 >>> 这是一个手机号");
- //检测是否已有手机号注册
- LambdaQueryWrapper<TAdmin> query = Wrappers.lambdaQuery();
- query.eq(TAdmin::getPhone, phoneOrEmail);
- query.eq(TAdmin::getUsername, username);
- List<TAdmin> list = tAdminService.list(query);
- if (list.size() <= 0) { // 说明手机未注册
- return R.fail(ResponseCodesEnum.A0001, "登录名或手机号出错");
- }
- //国内发送短信
- String result = tMessageCodeService.sentMessage("1", phoneOrEmail, companyType);
- return R.ok(result);
- } else if (Pattern.matches(emailReg, phoneOrEmail)) {
- System.out.println("忘记密码 >>> 这是一个邮箱地址");
- //检测是否已有邮箱注册
- LambdaQueryWrapper<TAdmin> query = Wrappers.lambdaQuery();
- query.eq(TAdmin::getEmail, phoneOrEmail);
- query.eq(TAdmin::getUsername, username);
- List<TAdmin> list = tAdminService.list(query);
- if (list.size() <= 0) { // 邮箱未注册
- return R.fail(ResponseCodesEnum.A0001, "登录名或邮箱出错");
- }
- //国内发邮件
- String result = tMessageCodeService.sentEmail("1", phoneOrEmail);
- return R.ok(result);
- } else {
- System.out.println("忘记密码 >>> 不是有效的手机号或邮箱地址");
- return R.fail(ResponseCodesEnum.A0001, "非有效的手机号或邮箱地址");
- }
- } else {
- if (StringUtils.isEmpty(phoneOrEmail)) {
- return R.fail(ResponseCodesEnum.A0100, "邮箱为空!");
- }
- //检测是否已有邮箱注册
- LambdaQueryWrapper<TAdmin> query = Wrappers.lambdaQuery();
- query.eq(TAdmin::getEmail, phoneOrEmail);
- query.eq(TAdmin::getUsername, username);
- List<TAdmin> list = tAdminService.list(query);
- if (list.size() <= 0) {
- return R.fail(ResponseCodesEnum.A0001, "登录名或邮箱出错");
- }
- //海外发邮件
- String result = tMessageCodeService.sentEmail("1", phoneOrEmail);
- return R.ok(result);
- }
- }
- @ApiOperation(value = "校验验证码")
- @PostMapping("/checkForgetCode")
- public ResponseModel<?> checkForgetCode(String ifForeign, String code, String phoneOrEmail) {
- if (StringUtils.isEmpty(code)) {
- return R.fail(ResponseCodesEnum.A0100, "验证码为空!");
- }
- if (ifForeign.equals("2")) {
- ifForeign = "0";
- }
- LambdaQueryWrapper<TMessageCode> query2 = Wrappers.lambdaQuery();
- if (ifForeign.equals("0")) {
- query2.eq(TMessageCode::getPhone, phoneOrEmail);
- } else {
- query2.eq(TMessageCode::getPhone, phoneOrEmail);
- }
- query2.eq(TMessageCode::getType, "1");//1,忘记密码验证码
- query2.eq(TMessageCode::getStatus, "0");
- List<TMessageCode> messageCodeList = tMessageCodeService.list(query2);
- if (messageCodeList.size() > 0) {
- TMessageCode tMessageCode = messageCodeList.get(messageCodeList.size() - 1);
- if (!tMessageCode.getCode().equals(code)) {
- return R.fail(ResponseCodesEnum.A0002, "验证码错误");
- } else {
- tMessageCode.setStatus("1");
- tMessageCode.setModifyDate(new Date());
- tMessageCodeService.saveOrUpdate(tMessageCode);
- return R.ok();
- }
- } else {
- return R.fail(ResponseCodesEnum.A0002, "没有找到验证码");
- }
- }
- }
|