SysRegisterService.java 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. package com.ruoyi.web.service;
  2. import com.ruoyi.common.core.domain.model.LoginCard;
  3. import com.ruoyi.common.core.domain.model.LoginUser;
  4. import com.ruoyi.common.enums.UserRegStatus;
  5. import com.ruoyi.common.exception.base.BaseException;
  6. import com.ruoyi.common.utils.bean.BeanUtils;
  7. import com.ruoyi.dz.domain.DzCards;
  8. import com.ruoyi.dz.service.IDzCardsService;
  9. import com.ruoyi.framework.web.service.TokenService;
  10. import org.springframework.beans.factory.annotation.Autowired;
  11. import org.springframework.stereotype.Component;
  12. import com.ruoyi.common.constant.CacheConstants;
  13. import com.ruoyi.common.constant.UserConstants;
  14. import com.ruoyi.common.core.domain.entity.SysUser;
  15. import com.ruoyi.common.core.domain.model.RegisterBody;
  16. import com.ruoyi.common.core.redis.RedisCache;
  17. import com.ruoyi.common.exception.user.CaptchaException;
  18. import com.ruoyi.common.exception.user.CaptchaExpireException;
  19. import com.ruoyi.common.utils.DateUtils;
  20. import com.ruoyi.common.utils.SecurityUtils;
  21. import com.ruoyi.common.utils.StringUtils;
  22. import com.ruoyi.system.service.ISysConfigService;
  23. import com.ruoyi.system.service.ISysUserService;
  24. import org.springframework.transaction.annotation.Transactional;
  25. /**
  26. * 注册校验方法
  27. *
  28. * @author ruoyi
  29. */
  30. @Component
  31. public class SysRegisterService
  32. {
  33. @Autowired
  34. private ISysUserService userService;
  35. @Autowired
  36. private ISysConfigService configService;
  37. @Autowired
  38. private RedisCache redisCache;
  39. @Autowired
  40. private IDzCardsService cardsService;
  41. @Autowired
  42. private TokenService tokenService;
  43. /**
  44. * 注册
  45. */
  46. @Transactional(rollbackFor = Exception.class)
  47. public String register(RegisterBody registerBody, LoginUser loginUser)
  48. {
  49. String username = registerBody.getUsername(), mobile = registerBody.getMobile(), password = registerBody.getPassword();
  50. DzCards upCard = null;
  51. SysUser upUser = new SysUser();
  52. upUser.setPhonenumber(mobile);
  53. if(null == loginUser) { // 手机注册或卡注册
  54. if (StringUtils.isBlank(mobile)) {
  55. return "手机号不能为空";
  56. }
  57. if(StringUtils.isNotBlank(username)) { // 卡注册
  58. DzCards exist = cardsService.selectDzCardsByCardNo(username);
  59. if (StringUtils.isNull(exist)) {
  60. return "卡号不正确";
  61. }
  62. upCard = new DzCards();
  63. upCard.setCardId(exist.getCardId());
  64. } else {
  65. username = mobile;
  66. password = "123456";
  67. registerBody.setUsername(username); // TODO 带回去重登陆
  68. registerBody.setPassword(password); // TODO 带回去重登陆
  69. }
  70. upUser.setPassword2(SecurityUtils.encryptPassword2(password));
  71. upUser.setPassword(SecurityUtils.encryptPassword(password));
  72. upUser.setPwdUpdateDate(DateUtils.getNowDate());
  73. } else {// 注册用户完善 不能改手机, 不能改邀请码
  74. DzCards exist = cardsService.selectDzCardsByCardNo(username);
  75. if(null == exist) {
  76. throw new BaseException("卡号不存在: " + username);
  77. }
  78. username = exist.getCardNo();
  79. upCard = new DzCards();
  80. upCard.setCardId(exist.getCardId());
  81. upUser.setUserId(loginUser.getUserId());
  82. }
  83. upUser.setUserName(username);
  84. if (StringUtils.isEmpty(username)) {
  85. return "用户名不能为空";
  86. }
  87. else if (StringUtils.isEmpty(password))
  88. {
  89. return "用户密码不能为空";
  90. }
  91. else if (username.length() < UserConstants.USERNAME_MIN_LENGTH
  92. || username.length() > UserConstants.USERNAME_MAX_LENGTH)
  93. {
  94. return "账户长度必须在2到20个字符之间";
  95. }
  96. else if (password.length() < UserConstants.PASSWORD_MIN_LENGTH
  97. || password.length() > UserConstants.PASSWORD_MAX_LENGTH)
  98. {
  99. return "密码长度必须在5到20个字符之间";
  100. }
  101. else if (!userService.checkUserNameUnique(upUser))
  102. {
  103. return "保存用户'" + username + "'失败,注册卡号已存在";
  104. }
  105. else if (!userService.checkPhoneUnique(upUser))
  106. {
  107. return "保存用户'" + username + "'失败,注册手机已存在" + mobile;
  108. }
  109. saveInfo(upUser, upCard, registerBody); // 注册或完善后刷新登陆信息
  110. if(null != loginUser) {
  111. BeanUtils.copyProperties(userService.selectUserById(loginUser.getUserId()), loginUser.getUser(), "password");
  112. if(null != upCard.getCardId()) {
  113. BeanUtils.copyProperties(cardsService.selectDzCardsByCardId(upCard.getCardId()), loginUser.getCard());
  114. }
  115. tokenService.refreshToken(loginUser);
  116. }
  117. return "";
  118. }
  119. private void saveInfo(SysUser user, DzCards card, RegisterBody register) {
  120. user.setNickName(register.getNickName());
  121. user.setLocation(register.getLocation());
  122. user.setExamType(register.getExamType());
  123. user.setEndYear(register.getEndYear());
  124. user.setScores(register.getScores());
  125. if(null == card) { // 手机注册时 无卡
  126. user.setInviteCode(register.getInviteCode()); //
  127. user.setRegStatus(UserRegStatus.User);
  128. } else {
  129. card.setEndYear(register.getEndYear());
  130. card.setYear(register.getEndYear() - 3);
  131. card.setSchoolId(register.getSchoolId());
  132. card.setClassId(register.getClassId());
  133. if(null == user.getCardId() || !user.getCardId().equals(card.getCardId())) { // 未绑定或换绑时激活卡
  134. user.setCardId(card.getCardId());
  135. user.setRegStatus(UserRegStatus.Student);
  136. card.setActiveTime(DateUtils.getNowDate());
  137. }
  138. }
  139. if(null == user.getUserId()) {
  140. userService.insertUser(user);
  141. } else {
  142. userService.updateUser(user);
  143. }
  144. if(null != card) {
  145. cardsService.updateDzCards(card);
  146. }
  147. }
  148. /**
  149. * 校验验证码
  150. *
  151. * @param username 用户名
  152. * @param code 验证码
  153. * @param uuid 唯一标识
  154. * @return 结果
  155. */
  156. public void validateCaptcha(String username, String code, String uuid)
  157. {
  158. String verifyKey = CacheConstants.CAPTCHA_CODE_KEY + StringUtils.nvl(uuid, "");
  159. String captcha = redisCache.getCacheObject(verifyKey);
  160. redisCache.deleteObject(verifyKey);
  161. if (captcha == null)
  162. {
  163. throw new CaptchaExpireException();
  164. }
  165. if (!code.equalsIgnoreCase(captcha))
  166. {
  167. throw new CaptchaException();
  168. }
  169. }
  170. public void validateSmsCaptcha(String mobile, String code, String uuid) {
  171. }
  172. }