SmsCodeServiceImpl.java 6.86 KB
package com.zhongzhi.service.impl;

import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.zhongzhi.common.constant.SmsCode;
import com.zhongzhi.common.exception.HttpException;
import com.zhongzhi.common.utils.AliyunSmsUtil;
import com.zhongzhi.common.utils.RandomUtil;
import com.zhongzhi.model.AdministerDO;
import com.zhongzhi.model.CollegesDictDO;
import com.zhongzhi.model.ProjectJudgeDO;
import com.zhongzhi.model.SmsCodeDO;
import com.zhongzhi.dao.SmsCodeDAO;
import com.zhongzhi.model.StudentDO;
import com.zhongzhi.service.AdministerService;
import com.zhongzhi.service.CollegesDictService;
import com.zhongzhi.service.ProjectJudgeService;
import com.zhongzhi.service.SmsCodeService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.zhongzhi.service.StudentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * <p>
 * 短信验证码 服务实现类
 * </p>
 *
 * @author DengMin
 * @since 2021-04-28
 */
@Service
public class SmsCodeServiceImpl extends ServiceImpl<SmsCodeDAO, SmsCodeDO> implements SmsCodeService {

    @Autowired
    private AliyunSmsUtil aliyunSmsUtil;

    @Autowired
    private StudentService studentService;

    @Autowired
    private AdministerService administerService;

    @Autowired
    private ProjectJudgeService projectJudgeService;

    @Autowired
    private CollegesDictService collegesDictService;

    @Override
    public void sendRegisterCode(SmsCodeDO smsCodeDO) {
        StudentDO studentDO = studentService.getOne(new QueryWrapper<StudentDO>()
                .lambda()
                .eq(StudentDO::getTelephone, smsCodeDO.getTelephone()));
        if (studentDO != null) {
            throw new HttpException(10020);
        }

        int code = RandomUtil.getCode();
        SendSmsResponse sendSmsResponse = aliyunSmsUtil.send(smsCodeDO.getTelephone(), code);
        if (sendSmsResponse != null && sendSmsResponse.getCode().equals("OK")) {
            SmsCodeDO smsCode = this.baseMapper.selectOne(new QueryWrapper<SmsCodeDO>()
                    .lambda()
                    .eq(SmsCodeDO::getTelephone, smsCodeDO.getTelephone()));
            if (smsCode != null) {
                this.baseMapper.deleteById(smsCode.getId());
            }

            smsCodeDO.setCode(String.valueOf(code));
            smsCodeDO.setPlatform(SmsCode.student);
            smsCodeDO.setType(SmsCode.register);
            this.baseMapper.insert(smsCodeDO);
        } else {
            throw new HttpException(10011);
        }
    }

    @Override
    public void sendStudentLoginCode(SmsCodeDO smsCodeDO) {
        StudentDO studentDO = studentService.getOne(new QueryWrapper<StudentDO>()
                .lambda()
                .eq(StudentDO::getTelephone, smsCodeDO.getTelephone()));
        if (studentDO == null) {
            throw new HttpException(10024);
        }

//        CollegesDictDO collegesDictDO = collegesDictService.getOne(new QueryWrapper<CollegesDictDO>()
//                .lambda()
//                .eq(CollegesDictDO::getName, studentDO.getCollege()));
//        if (collegesDictDO.getLoginStatus() == 0) {
//            throw new HttpException(10067);
//        }

        int code = RandomUtil.getCode();
        SendSmsResponse sendSmsResponse = aliyunSmsUtil.send(smsCodeDO.getTelephone(), code);
        if (sendSmsResponse != null && sendSmsResponse.getCode().equals("OK")) {
            SmsCodeDO smsCode = this.baseMapper.selectOne(new QueryWrapper<SmsCodeDO>()
                    .lambda()
                    .eq(SmsCodeDO::getTelephone, smsCodeDO.getTelephone()));
            if (smsCode != null) {
                this.baseMapper.deleteById(smsCode.getId());
            }

            smsCodeDO.setCode(String.valueOf(code));
            smsCodeDO.setPlatform(SmsCode.student);
            smsCodeDO.setType(SmsCode.login);
            this.baseMapper.insert(smsCodeDO);
        } else {
            throw new HttpException(10011);
        }
    }

    @Override
    public SmsCodeDO getOneByTelePhone(String telephone, String type, String platform) {
        return this.baseMapper.getOneByTelePhone(telephone, type, platform);
    }

    @Override
    public void sendAdministerLoginCode(AdministerDO administerDO) {
        AdministerDO administer = administerService.getOne(new QueryWrapper<AdministerDO>()
                .lambda()
                .eq(AdministerDO::getTelephone, administerDO.getTelephone()));
        if (administer == null) {
            throw new HttpException(10060);
        }

        int code = RandomUtil.getCode();
        SendSmsResponse sendSmsResponse = aliyunSmsUtil.send(administerDO.getTelephone(), code);
        if (sendSmsResponse != null && sendSmsResponse.getCode().equals("OK")) {
            SmsCodeDO smsCode = this.baseMapper.selectOne(new QueryWrapper<SmsCodeDO>()
                    .lambda()
                    .eq(SmsCodeDO::getTelephone, administerDO.getTelephone()));
            if (smsCode != null) {
                this.baseMapper.deleteById(smsCode.getId());
            }

            SmsCodeDO smsCodeDO = new SmsCodeDO();
            smsCodeDO.setTelephone(administerDO.getTelephone());
            smsCodeDO.setCode(String.valueOf(code));
            smsCodeDO.setPlatform(SmsCode.center);
            smsCodeDO.setType(SmsCode.login);
            this.baseMapper.insert(smsCodeDO);
        } else {
            throw new HttpException(10011);
        }
    }

    @Override
    public void sendJudgeLoginCode(SmsCodeDO smsCodeDO) {

        ProjectJudgeDO projectJudgeDO = projectJudgeService.getOne(new QueryWrapper<ProjectJudgeDO>()
                .lambda()
                .eq(ProjectJudgeDO::getTelephone, smsCodeDO.getTelephone()));
        if (projectJudgeDO == null) {
            throw new HttpException(10060);
        }

        if (projectJudgeDO.getPasswordFree() == null || projectJudgeDO.getPasswordFree() != 1) {
            int code = RandomUtil.getCode();
            SendSmsResponse sendSmsResponse = aliyunSmsUtil.send(smsCodeDO.getTelephone(), code);
            if (sendSmsResponse != null && sendSmsResponse.getCode().equals("OK")) {
                SmsCodeDO smsCode = this.baseMapper.selectOne(new QueryWrapper<SmsCodeDO>()
                        .lambda()
                        .eq(SmsCodeDO::getTelephone, smsCodeDO.getTelephone()));
                if (smsCode != null) {
                    this.baseMapper.deleteById(smsCode.getId());
                }

                SmsCodeDO sc = new SmsCodeDO();
                sc.setTelephone(smsCodeDO.getTelephone());
                sc.setCode(String.valueOf(code));
                sc.setPlatform(SmsCode.review);
                sc.setType(SmsCode.login);
                this.baseMapper.insert(sc);
            } else {
                throw new HttpException(10011);
            }
        }
    }
}