| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286 |
- package com.ruoyi.web.service;
- import com.alibaba.fastjson2.JSONArray;
- import com.alibaba.fastjson2.JSONObject;
- import com.google.common.collect.Lists;
- import com.ruoyi.common.core.domain.model.LoginUser;
- import com.ruoyi.common.enums.UserRegStatus;
- import com.ruoyi.common.exception.base.BaseException;
- import com.ruoyi.common.utils.bean.BeanUtils;
- import com.ruoyi.dz.domain.DzCards;
- import com.ruoyi.dz.service.IDzCardsService;
- import com.ruoyi.enums.CardDistributeStatus;
- import com.ruoyi.enums.CardStatus;
- import com.ruoyi.enums.UserTypeEnum;
- import com.ruoyi.framework.web.service.TokenService;
- import com.ruoyi.learn.domain.LearnStudent;
- import com.ruoyi.learn.mapper.LearnStudentMapper;
- import com.ruoyi.system.mapper.SysUserMapper;
- import com.ruoyi.web.domain.CardUserBody;
- import org.apache.commons.collections4.CollectionUtils;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.stereotype.Component;
- import com.ruoyi.common.constant.CacheConstants;
- import com.ruoyi.common.constant.UserConstants;
- import com.ruoyi.common.core.domain.entity.SysUser;
- import com.ruoyi.common.core.domain.model.RegisterBody;
- import com.ruoyi.common.core.redis.RedisCache;
- import com.ruoyi.common.exception.user.CaptchaException;
- import com.ruoyi.common.exception.user.CaptchaExpireException;
- import com.ruoyi.common.utils.DateUtils;
- import com.ruoyi.common.utils.SecurityUtils;
- import com.ruoyi.common.utils.StringUtils;
- import com.ruoyi.system.service.ISysConfigService;
- import com.ruoyi.system.service.ISysUserService;
- import org.springframework.transaction.annotation.Transactional;
- import javax.validation.ValidationException;
- import java.text.ParseException;
- import java.util.List;
- /**
- * 注册校验方法
- *
- * @author ruoyi
- */
- @Component
- public class SysRegisterService
- {
- @Autowired
- private ISysUserService userService;
- @Autowired
- private ISysConfigService configService;
- @Autowired
- private RedisCache redisCache;
- @Autowired
- private IDzCardsService cardsService;
- @Autowired
- private TokenService tokenService;
- @Autowired
- private LearnStudentMapper learnStudentMapper;
- @Autowired
- private SysUserMapper sysUserMapper;
- @Autowired
- private LearnTeacherService learnTeacherService;
- /**
- * 注册
- */
- @Transactional(rollbackFor = Exception.class)
- public String register(RegisterBody registerBody, LoginUser loginUser)
- {
- String username = registerBody.getUsername(), mobile = registerBody.getMobile(), password = registerBody.getPassword();
- DzCards upCard = null;
- SysUser upUser = new SysUser();
- upUser.setPhonenumber(mobile);
- if(null == loginUser) { // 手机注册或卡注册
- if (StringUtils.isBlank(mobile)) {
- return "手机号不能为空";
- }
- if(StringUtils.isNotBlank(username)) { // 卡注册
- DzCards exist = cardsService.selectDzCardsByCardNo(username);
- if (StringUtils.isNull(exist)) {
- return "卡号密码不正确";
- }
- if(StringUtils.isBlank(password) || !password.equals(exist.getPassword())) {
- return "卡号密码不正确";
- }
- upCard = new DzCards();
- upCard.setCardId(exist.getCardId());
- upCard.setStatus(exist.getStatus());
- upCard.setDistributeStatus(exist.getDistributeStatus());
- upCard.setDays(exist.getDays());
- } else {
- username = mobile;
- password = "123456";
- registerBody.setUsername(username); // TODO 带回去重登陆
- registerBody.setPassword(password); // TODO 带回去重登陆
- }
- upUser.setPassword2(SecurityUtils.encryptPassword2(password));
- upUser.setPassword(SecurityUtils.encryptPassword(password));
- upUser.setPwdUpdateDate(DateUtils.getNowDate());
- } else {// 注册用户完善 不能改手机, 不能改邀请码
- DzCards exist = cardsService.selectDzCardsByCardNo(username);
- if(null == exist) {
- throw new BaseException("卡号不存在: " + username);
- }
- username = exist.getCardNo();
- upCard = new DzCards();
- upCard.setCardId(exist.getCardId());
- upCard.setStatus(exist.getStatus());
- upCard.setDistributeStatus(exist.getDistributeStatus());
- upCard.setDays(exist.getDays());
- upUser.setUserId(loginUser.getUserId());
- }
- upUser.setUserName(username);
- if (StringUtils.isEmpty(username)) {
- return "用户名不能为空";
- }
- else if (StringUtils.isEmpty(password))
- {
- return "用户密码不能为空";
- }
- else if (username.length() < UserConstants.USERNAME_MIN_LENGTH
- || username.length() > UserConstants.USERNAME_MAX_LENGTH)
- {
- return "账户长度必须在2到20个字符之间";
- }
- else if (password.length() < UserConstants.PASSWORD_MIN_LENGTH
- || password.length() > UserConstants.PASSWORD_MAX_LENGTH)
- {
- return "密码长度必须在5到20个字符之间";
- }
- else if (!userService.checkUserNameUnique(upUser))
- {
- return "保存用户'" + username + "'失败,注册卡号已存在";
- }
- else if (!userService.checkPhoneUnique(upUser))
- {
- return "保存用户'" + username + "'失败,注册手机已存在" + mobile;
- }
- saveInfo(upUser, upCard, registerBody); // 注册或完善后刷新登陆信息
- if(null != loginUser) {
- BeanUtils.copyProperties(userService.selectUserById(loginUser.getUserId()), loginUser.getUser(), "password");
- if(null != upCard.getCardId()) {
- BeanUtils.copyProperties(cardsService.selectDzCardsByCardId(upCard.getCardId()), loginUser.getCard());
- }
- tokenService.refreshToken(loginUser);
- }
- return "";
- }
- @Transactional(rollbackFor = Exception.class)
- public void improve(CardUserBody cardUserBody) {
- DzCards card = cardsService.selectDzCardsByCardId(cardUserBody.getCardId());
- if(null == card) {
- throw new ValidationException("卡用户不存在");
- }
- List<SysUser> sysUserList = sysUserMapper.selectUserByCardIds(Lists.newArrayList(card.getCardId()));
- if(CollectionUtils.isEmpty(sysUserList)) {
- throw new ValidationException("卡用户不存在");
- }
- Long userId = sysUserList.get(0).getUserId();
- SysUser upUser = new SysUser();
- upUser.setUserId(userId);
- upUser.setNickName(cardUserBody.getNickName());
- upUser.setLocation(cardUserBody.getLocation());
- upUser.setExamType(cardUserBody.getExamType());
- upUser.setEndYear(cardUserBody.getEndYear());
- upUser.setScores(cardUserBody.getScores());
- upUser.setSchoolId(cardUserBody.getSchoolId());
- upUser.setClassId(cardUserBody.getClassId());
- upUser.setPhonenumber(cardUserBody.getMobile());
- if (!userService.checkPhoneUnique(upUser)) {
- throw new ValidationException("保存用户'" + upUser.getNickName() + "'失败,注册手机已存在" + cardUserBody.getMobile());
- }
- JSONArray directList = cardUserBody.getDirectionStudy();
- if (null != directList && !directList.isEmpty()) {
- JSONObject directed = directList.getJSONObject(0);
- Long planId = directed.getLongValue("majorId");
- Long universityId = directed.getLongValue("universityId");
- directed.put("notice", learnTeacherService.updateDirected(userId, universityId, planId));
- cardUserBody.getDirectionStudy().set(0, directed);
- upUser.setDirectedStudy(cardUserBody.getDirectionStudy().toJSONString());
- }
- DzCards upCard = new DzCards();
- upCard.setCardId(card.getCardId());
- upCard.setSchoolId(cardUserBody.getSchoolId());
- upCard.setClassId(cardUserBody.getClassId());
- upCard.setCampusId(cardUserBody.getCampusSchoolId());
- upCard.setCampusClassId(cardUserBody.getCampusClassId());
- upCard.setOutDate(cardUserBody.getOutDate());
- userService.updateUserInfo(upUser);
- cardsService.updateDzCards(upCard);
- }
- private void saveInfo(SysUser user, DzCards card, RegisterBody register) {
- user.setNickName(register.getNickName());
- user.setLocation(register.getLocation());
- user.setExamType(register.getExamType());
- user.setEndYear(register.getEndYear());
- user.setScores(register.getScores());
- user.setSchoolId(register.getSchoolId());
- user.setClassId(register.getClassId());
- if(null == card) { // 手机注册时 无卡
- user.setInviteCode(register.getInviteCode()); //
- user.setRegStatus(UserRegStatus.User);
- } else {
- card.setEndYear(register.getEndYear());
- card.setYear(register.getEndYear() - 3);
- card.setSchoolId(register.getSchoolId());
- card.setClassId(register.getClassId());
- if(null == user.getCardId() || !user.getCardId().equals(card.getCardId())) { // 未绑定或换绑时激活卡
- if(!CardDistributeStatus.Assign.getVal().equals(card.getDistributeStatus()) || !CardStatus.Free.getVal().equals(card.getStatus())) {
- throw new RuntimeException("无效卡");
- }
- user.setEvalCounts("{\"1\":1,\"2\":1,\"3\":1,\"11\":1,\"0\":0}");
- user.setCardId(card.getCardId());
- user.setRegStatus(UserRegStatus.Student);
- card.setStatus(CardStatus.Active.getVal());
- card.setActiveTime(DateUtils.getNowDate());
- if(null != card.getDays()) {
- card.setOutDate(DateUtils.addDays(card.getActiveTime(), card.getDays()));
- }
- }
- try {
- if(null == card.getDays()) {
- card.setOutDate(DateUtils.parseDate(register.getEndYear() + "-08-30", "yyyy-MM-dd"));
- }
- card.setDays(null);
- } catch (ParseException e) {
- throw new RuntimeException("saveInfo 日期错误", e);
- }
- }
- if(null == user.getUserId()) {
- user.setUserType(UserTypeEnum.Card.getVal());
- userService.insertUser(user);
- LearnStudent upStudent = new LearnStudent();
- upStudent.setStudentId(user.getUserId());
- upStudent.setClassId(user.getClassId());
- learnStudentMapper.insertLearnStudent(upStudent);
- } else {
- LearnStudent upStudent = new LearnStudent();
- upStudent.setStudentId(user.getUserId());
- upStudent.setClassId(user.getClassId());
- learnStudentMapper.updateLearnStudent(upStudent);
- userService.updateUser(user);
- }
- if(null != card) {
- cardsService.updateDzCards(card);
- }
- }
- /**
- * 校验验证码
- *
- * @param username 用户名
- * @param code 验证码
- * @param uuid 唯一标识
- * @return 结果
- */
- public void validateCaptcha(String username, String code, String uuid)
- {
- String verifyKey = CacheConstants.CAPTCHA_CODE_KEY + StringUtils.nvl(uuid, "");
- String captcha = redisCache.getCacheObject(verifyKey);
- redisCache.deleteObject(verifyKey);
- if (captcha == null)
- {
- throw new CaptchaExpireException();
- }
- if (!code.equalsIgnoreCase(captcha))
- {
- throw new CaptchaException();
- }
- }
- public void validateSmsCaptcha(String mobile, String code, String uuid) {
- }
- }
|