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; /** *

* 短信验证码 前端控制器 *

* * @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 query = Wrappers.lambdaQuery(); query.eq(TAdmin::getPhone, phoneOrEmail); List 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 query = Wrappers.lambdaQuery(); query.eq(TAdmin::getEmail, phoneOrEmail); List 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 query = Wrappers.lambdaQuery(); query.eq(TAdmin::getEmail, phoneOrEmail); List 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 query = Wrappers.lambdaQuery(); query.eq(TAdmin::getPhone, phoneOrEmail); query.eq(TAdmin::getUsername, username); List 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 query = Wrappers.lambdaQuery(); query.eq(TAdmin::getEmail, phoneOrEmail); query.eq(TAdmin::getUsername, username); List 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 query = Wrappers.lambdaQuery(); query.eq(TAdmin::getEmail, phoneOrEmail); query.eq(TAdmin::getUsername, username); List 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 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 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, "没有找到验证码"); } } }