TeacherServiceImpl.java 6.12 KB
package com.subsidy.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.subsidy.common.exception.HttpException;
import com.subsidy.dto.teacher.LoginVO;
import com.subsidy.dto.teacher.RegisterDTO;
import com.subsidy.mapper.CollegesDictMapper;
import com.subsidy.mapper.SmsVerifyCodeMapper;
import com.subsidy.model.CollegesDictDO;
import com.subsidy.model.SmsVerifyCodeDO;
import com.subsidy.model.TeacherDO;
import com.subsidy.mapper.TeacherMapper;
import com.subsidy.service.TeacherService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.subsidy.util.ConstantUtils;
import com.subsidy.util.JwtUtil;
import com.subsidy.util.RandomUtil;
import com.subsidy.util.SMSUtils;
import com.subsidy.vo.teacher.TeacherInfoVO;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.time.LocalDateTime;

/**
 * <p>
 * 教师信息表 服务实现类
 * </p>
 *
 * @author Tuyp
 * @since 2025-01-07
 */
@Service
public class TeacherServiceImpl extends ServiceImpl<TeacherMapper, TeacherDO> implements TeacherService {

    @Autowired
    private SmsVerifyCodeMapper smsVerifyCodeMapper;

    @Autowired
    private CollegesDictMapper collegesDictMapper;

    public String registerCode(TeacherDO teacherDO) throws Exception {

        //判断是否注册过
        int count = this.baseMapper.selectCount(new QueryWrapper<TeacherDO>()
                .lambda()
                .eq(TeacherDO::getTelephone, teacherDO.getTelephone()));

        if (count > 0) {
            throw new HttpException(10003);
        }

        String verifyCode = RandomUtil.getRandomCode(6);
        String param = "{ \"code\":\"" + verifyCode + "\"}";

        //插入短信验证码
        smsVerifyCodeMapper.delete(new QueryWrapper<SmsVerifyCodeDO>()
                .lambda()
                .eq(SmsVerifyCodeDO::getTelephone, teacherDO.getTelephone()));

        SmsVerifyCodeDO smsCodeDO = new SmsVerifyCodeDO();
        smsCodeDO.setTelephone(teacherDO.getTelephone());
        smsCodeDO.setVerifyCode(verifyCode);
        smsCodeDO.setCreateDate(LocalDateTime.now());
        smsVerifyCodeMapper.insert(smsCodeDO);
        return SMSUtils.sendVerifySMS(ConstantUtils.TEMPLATE_CODE, smsCodeDO.getTelephone(), param);
    }


    public LoginVO register(RegisterDTO registerDTO) {

        LoginVO loginVO = new LoginVO();
        //判断是否注册过
        int count = this.baseMapper.selectCount(new QueryWrapper<TeacherDO>()
                .lambda()
                .eq(TeacherDO::getTelephone, registerDTO.getTelephone()));

        if (count > 0) {
            throw new HttpException(10003);
        }

        Integer smsCnt = smsVerifyCodeMapper.selectCount(new QueryWrapper<SmsVerifyCodeDO>()
                .lambda()
                .eq(SmsVerifyCodeDO::getTelephone, registerDTO.getTelephone())
                .eq(SmsVerifyCodeDO::getVerifyCode, registerDTO.getVerifyCode())
                .gt(SmsVerifyCodeDO::getCreateDate, LocalDateTime.now().minusMinutes(10L))
        );

        if (smsCnt > 0) {
            this.baseMapper.insert(registerDTO);
            CollegesDictDO collegesDictDO = collegesDictMapper.selectById(registerDTO.getCollegeId());
            loginVO.setCollegeName(collegesDictDO.getName());
            BeanUtils.copyProperties(registerDTO,loginVO);
            return loginVO;
        } else {
            throw new HttpException(10003);
        }
    }

    public String loginCode(SmsVerifyCodeDO smsVerifyCodeDO) {

        //判断是否注册过
        int count = this.baseMapper.selectCount(new QueryWrapper<TeacherDO>()
                .lambda()
                .eq(TeacherDO::getTelephone, smsVerifyCodeDO.getTelephone()));

        if (count == 0) {
            throw new HttpException(10005);
        }
        String verifyCode = RandomUtil.getRandomCode(6);
        String param = "{ \"code\":\"" + verifyCode + "\"}";

        //插入短信验证码
        smsVerifyCodeMapper.delete(new QueryWrapper<SmsVerifyCodeDO>()
                .lambda()
                .eq(SmsVerifyCodeDO::getTelephone, smsVerifyCodeDO.getTelephone()));

        SmsVerifyCodeDO smsCodeDO = new SmsVerifyCodeDO();
        smsCodeDO.setTelephone(smsVerifyCodeDO.getTelephone());
        smsCodeDO.setVerifyCode(verifyCode);
        smsCodeDO.setCreateDate(LocalDateTime.now());
        smsVerifyCodeMapper.insert(smsCodeDO);
        return SMSUtils.sendVerifySMS(ConstantUtils.TEMPLATE_CODE, smsCodeDO.getTelephone(), param);
    }

    public LoginVO login(SmsVerifyCodeDO smsVerifyCodeDO) {

        LoginVO loginVO = new LoginVO();

        TeacherDO teacherDO = this.baseMapper.selectOne(new QueryWrapper<TeacherDO>()
                .lambda()
                .eq(TeacherDO::getTelephone, smsVerifyCodeDO.getTelephone()));
        if (null == teacherDO) {
            throw new HttpException(10005);
        }

        Integer smsCnt = smsVerifyCodeMapper.selectCount(new QueryWrapper<SmsVerifyCodeDO>()
                .lambda()
                .eq(SmsVerifyCodeDO::getTelephone, smsVerifyCodeDO.getTelephone())
                .eq(SmsVerifyCodeDO::getVerifyCode, smsVerifyCodeDO.getVerifyCode())
                .gt(SmsVerifyCodeDO::getCreateDate, LocalDateTime.now().minusMinutes(10L))
        );

        if (smsCnt > 0) {
            smsVerifyCodeMapper.insert(smsVerifyCodeDO);
            CollegesDictDO collegesDictDO = collegesDictMapper.selectById(teacherDO.getCollegeId());
            loginVO.setCollegeName(collegesDictDO.getName());
            BeanUtils.copyProperties(teacherDO,loginVO);
            return loginVO;
        } else {
            throw new HttpException(10004);
        }
    }

    public TeacherInfoVO teacherInfo(TeacherDO teacherDO) {
        TeacherDO teacherDO1 = this.baseMapper.selectById(teacherDO.getId());
        TeacherInfoVO teacherInfoVO = new TeacherInfoVO();
        BeanUtils.copyProperties(teacherDO1, teacherInfoVO);
        return teacherInfoVO;
    }

    public String updateTeacher(TeacherDO teacherDO) {
        this.baseMapper.updateById(teacherDO);
        return ConstantUtils.SUCCESS_UPDATE;
    }

}