TMessageCodeController.java 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238
  1. package com.szwl.controller;
  2. import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
  3. import com.baomidou.mybatisplus.core.toolkit.Wrappers;
  4. import com.szwl.constant.ResponseCodesEnum;
  5. import com.szwl.model.bo.R;
  6. import com.szwl.model.bo.ResponseModel;
  7. import com.szwl.model.entity.TAdmin;
  8. import com.szwl.model.entity.TMessageCode;
  9. import com.szwl.service.TAdminService;
  10. import com.szwl.service.TMessageCodeService;
  11. import io.swagger.annotations.Api;
  12. import io.swagger.annotations.ApiOperation;
  13. import org.apache.commons.lang.StringUtils;
  14. import org.springframework.beans.factory.annotation.Autowired;
  15. import org.springframework.web.bind.annotation.GetMapping;
  16. import org.springframework.web.bind.annotation.PostMapping;
  17. import org.springframework.web.bind.annotation.RequestMapping;
  18. import org.springframework.web.bind.annotation.RestController;
  19. import java.text.SimpleDateFormat;
  20. import java.util.Date;
  21. import java.util.List;
  22. import java.util.regex.Pattern;
  23. /**
  24. * <p>
  25. * 短信验证码 前端控制器
  26. * </p>
  27. *
  28. * @author wuhs
  29. * @since 2022-04-14
  30. */
  31. @Api(value = "/tMessageCode", tags = {"验证码"})
  32. @RestController
  33. @RequestMapping("/tMessageCode")
  34. public class TMessageCodeController {
  35. @Autowired
  36. TAdminService tAdminService;
  37. @Autowired
  38. TMessageCodeService tMessageCodeService;
  39. @ApiOperation(value = "获取上次发送验证码的时间")
  40. @GetMapping("/getLastSendTime")
  41. public ResponseModel<?> getLastSendTime(String phoneOrEmail) {
  42. if (StringUtils.isEmpty(phoneOrEmail)) {
  43. return R.fail(ResponseCodesEnum.A0100, "手机号或邮箱为空!");
  44. }
  45. // 查询该 手机号/邮箱 最后一次发送验证码的时间
  46. Date lastSendTime = tMessageCodeService.getLastSendTime(phoneOrEmail);
  47. // SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  48. // String format = sdf.format(lastSendTime);
  49. // return R.ok(format);
  50. return R.ok(lastSendTime); // 返回时间戳
  51. }
  52. @ApiOperation(value = "发送注册验证码")
  53. @PostMapping("/sentRegisterCode")
  54. public ResponseModel<?> sentRegisterCode(String ifForeign, String phoneOrEmail, String hostName) {
  55. if (StringUtils.isEmpty(phoneOrEmail)) {
  56. // 说明参数为空
  57. return R.fail(ResponseCodesEnum.A0100, "手机号或邮箱为空!");
  58. }
  59. // 查询该 手机号/邮箱 最后一次发送验证码的时间
  60. Date lastSendTime = tMessageCodeService.getLastSendTime(phoneOrEmail);
  61. long lastTime = lastSendTime.getTime();
  62. long currentTime = System.currentTimeMillis();
  63. if (currentTime - lastTime < 10 * 60 * 1000) {
  64. return R.fail("请勿频繁发送,10分钟后再试");
  65. }
  66. String SZ = "Sunzee";
  67. String companyType = "";
  68. if (StringUtils.isNotEmpty(hostName) && SZ.equals(hostName)) {
  69. companyType = "0";
  70. } else {
  71. companyType = "1";
  72. }
  73. // 如果是国内
  74. if (ifForeign.equals("0")) {
  75. // 定义国内手机号和邮箱的正则表达式
  76. String phoneReg = "^1[3-9]\\d{9}$";
  77. String emailReg = "^[a-zA-Z0-9_-]+([a-zA-Z0-9_.-]*[a-zA-Z0-9])*@[a-zA-Z0-9_-]+(\\.[a-zA-Z0-9_-]+)+$";
  78. // 判断 phoneOrEmail 是手机号还是邮箱
  79. if (Pattern.matches(phoneReg, phoneOrEmail)) {
  80. //检测是否已有手机号注册
  81. LambdaQueryWrapper<TAdmin> query = Wrappers.lambdaQuery();
  82. query.eq(TAdmin::getPhone, phoneOrEmail);
  83. List<TAdmin> list = tAdminService.list(query);
  84. if (list.size() > 0) {
  85. return R.fail(ResponseCodesEnum.A0202, "用户手机号已存在");
  86. }
  87. // 国内发送短信
  88. String result = tMessageCodeService.sentMessage("0", phoneOrEmail, companyType);
  89. return R.ok(result);
  90. } else if (Pattern.matches(emailReg, phoneOrEmail)) {
  91. // 检测是否已有邮箱注册
  92. LambdaQueryWrapper<TAdmin> query = Wrappers.lambdaQuery();
  93. query.eq(TAdmin::getEmail, phoneOrEmail);
  94. List<TAdmin> list = tAdminService.list(query);
  95. if (list.size() > 0) {
  96. return R.fail(ResponseCodesEnum.A0207, "用户邮箱已存在");
  97. }
  98. // 国内发送邮箱
  99. String result = tMessageCodeService.sentEmail("0", phoneOrEmail);
  100. return R.ok(result);
  101. } else {
  102. System.out.println("不是有效的手机号或邮箱地址");
  103. return R.fail(ResponseCodesEnum.A0100, "不是有效的手机号或邮箱地址");
  104. }
  105. } else {
  106. //检测是否已有邮箱注册
  107. LambdaQueryWrapper<TAdmin> query = Wrappers.lambdaQuery();
  108. query.eq(TAdmin::getEmail, phoneOrEmail);
  109. List<TAdmin> list = tAdminService.list(query);
  110. if (list.size() > 0) {
  111. return R.fail(ResponseCodesEnum.A0207, "用户邮箱已存在");
  112. }
  113. //国外发邮件
  114. String result = tMessageCodeService.sentEmail("0", phoneOrEmail);
  115. return R.ok(result);
  116. }
  117. }
  118. @ApiOperation(value = "发送忘记密码验证码")
  119. @PostMapping("/sentForgetCode")
  120. public ResponseModel<?> sentForgetCode(String ifForeign, String username, String phoneOrEmail, String hostName) {
  121. if (StringUtils.isEmpty(username)) {
  122. return R.fail(ResponseCodesEnum.A0100, "用户名为空!");
  123. }
  124. if (ifForeign.equals("2")) {
  125. ifForeign = "0";
  126. }
  127. String SZ = "Sunzee";
  128. String companyType = "";
  129. if (StringUtils.isNotEmpty(hostName) && SZ.equals(hostName)) {
  130. companyType = "0";
  131. } else {
  132. companyType = "1";
  133. }
  134. // 如果是国内
  135. if (ifForeign.equals("0")) {
  136. if (StringUtils.isEmpty(phoneOrEmail)) {
  137. return R.fail(ResponseCodesEnum.A0100, "手机号或邮箱为空!");
  138. }
  139. // 定义国内手机号和邮箱的正则表达式
  140. String phoneReg = "^1[3-9]\\d{9}$";
  141. String emailReg = "^[a-zA-Z0-9_-]+([a-zA-Z0-9_.-]*[a-zA-Z0-9])*@[a-zA-Z0-9_-]+(\\.[a-zA-Z0-9_-]+)+$";
  142. // 判断 phoneOrEmail 是手机号还是邮箱
  143. if (Pattern.matches(phoneReg, phoneOrEmail)) {
  144. System.out.println("忘记密码 >>> 这是一个手机号");
  145. //检测是否已有手机号注册
  146. LambdaQueryWrapper<TAdmin> query = Wrappers.lambdaQuery();
  147. query.eq(TAdmin::getPhone, phoneOrEmail);
  148. query.eq(TAdmin::getUsername, username);
  149. List<TAdmin> list = tAdminService.list(query);
  150. if (list.size() <= 0) { // 说明手机未注册
  151. return R.fail(ResponseCodesEnum.A0001, "登录名或手机号出错");
  152. }
  153. //国内发送短信
  154. String result = tMessageCodeService.sentMessage("1", phoneOrEmail, companyType);
  155. return R.ok(result);
  156. } else if (Pattern.matches(emailReg, phoneOrEmail)) {
  157. System.out.println("忘记密码 >>> 这是一个邮箱地址");
  158. //检测是否已有邮箱注册
  159. LambdaQueryWrapper<TAdmin> query = Wrappers.lambdaQuery();
  160. query.eq(TAdmin::getEmail, phoneOrEmail);
  161. query.eq(TAdmin::getUsername, username);
  162. List<TAdmin> list = tAdminService.list(query);
  163. if (list.size() <= 0) { // 邮箱未注册
  164. return R.fail(ResponseCodesEnum.A0001, "登录名或邮箱出错");
  165. }
  166. //国内发邮件
  167. String result = tMessageCodeService.sentEmail("1", phoneOrEmail);
  168. return R.ok(result);
  169. } else {
  170. System.out.println("忘记密码 >>> 不是有效的手机号或邮箱地址");
  171. return R.fail(ResponseCodesEnum.A0001, "非有效的手机号或邮箱地址");
  172. }
  173. } else {
  174. if (StringUtils.isEmpty(phoneOrEmail)) {
  175. return R.fail(ResponseCodesEnum.A0100, "邮箱为空!");
  176. }
  177. //检测是否已有邮箱注册
  178. LambdaQueryWrapper<TAdmin> query = Wrappers.lambdaQuery();
  179. query.eq(TAdmin::getEmail, phoneOrEmail);
  180. query.eq(TAdmin::getUsername, username);
  181. List<TAdmin> list = tAdminService.list(query);
  182. if (list.size() <= 0) {
  183. return R.fail(ResponseCodesEnum.A0001, "登录名或邮箱出错");
  184. }
  185. //海外发邮件
  186. String result = tMessageCodeService.sentEmail("1", phoneOrEmail);
  187. return R.ok(result);
  188. }
  189. }
  190. @ApiOperation(value = "校验验证码")
  191. @PostMapping("/checkForgetCode")
  192. public ResponseModel<?> checkForgetCode(String ifForeign, String code, String phoneOrEmail) {
  193. if (StringUtils.isEmpty(code)) {
  194. return R.fail(ResponseCodesEnum.A0100, "验证码为空!");
  195. }
  196. if (ifForeign.equals("2")) {
  197. ifForeign = "0";
  198. }
  199. LambdaQueryWrapper<TMessageCode> query2 = Wrappers.lambdaQuery();
  200. if (ifForeign.equals("0")) {
  201. query2.eq(TMessageCode::getPhone, phoneOrEmail);
  202. } else {
  203. query2.eq(TMessageCode::getPhone, phoneOrEmail);
  204. }
  205. query2.eq(TMessageCode::getType, "1");//1,忘记密码验证码
  206. query2.eq(TMessageCode::getStatus, "0");
  207. List<TMessageCode> messageCodeList = tMessageCodeService.list(query2);
  208. if (messageCodeList.size() > 0) {
  209. TMessageCode tMessageCode = messageCodeList.get(messageCodeList.size() - 1);
  210. if (!tMessageCode.getCode().equals(code)) {
  211. return R.fail(ResponseCodesEnum.A0002, "验证码错误");
  212. } else {
  213. tMessageCode.setStatus("1");
  214. tMessageCode.setModifyDate(new Date());
  215. tMessageCodeService.saveOrUpdate(tMessageCode);
  216. return R.ok();
  217. }
  218. } else {
  219. return R.fail(ResponseCodesEnum.A0002, "没有找到验证码");
  220. }
  221. }
  222. }