SmsVerifyCodeServiceImpl.java 4.19 KB
package com.subsidy.service.impl;

import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.subsidy.common.constant.SmsCode;
import com.subsidy.common.exception.HttpException;
import com.subsidy.mapper.AdministerMapper;
import com.subsidy.model.AdministerDO;
import com.subsidy.model.ProjectJudgeDO;
import com.subsidy.model.SmsVerifyCodeDO;
import com.subsidy.mapper.SmsVerifyCodeMapper;
import com.subsidy.service.ProjectJudgeService;
import com.subsidy.service.SmsVerifyCodeService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.subsidy.util.*;
import com.subsidy.util.excel.ExcelUtil;
import org.apache.http.HttpResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.LinkedList;

/**
 * <p>
 * 短信验证码记录表 服务实现类
 * </p>
 *
 * @author Tuyp
 * @since 2025-01-07
 */
@Service
public class SmsVerifyCodeServiceImpl extends ServiceImpl<SmsVerifyCodeMapper, SmsVerifyCodeDO> implements SmsVerifyCodeService {

    @Autowired
    private AdministerMapper administerMapper;

    @Autowired
    private ProjectJudgeService projectJudgeService;

    @Autowired
    private AliyunSmsUtil aliyunSmsUtil;

    @Autowired
    private SmsVerifyCodeMapper smsVerifyCodeMapper;

    @Override
    @Transactional(rollbackFor = Exception.class)
    public void sendAdministerLoginCode(AdministerDO administerDO) {
        AdministerDO administer = administerMapper.selectOne(new QueryWrapper<AdministerDO>()
                .lambda()
                .eq(AdministerDO::getTelephone, administerDO.getTelephone()));
        if (administer == null) {
            throw new HttpException(10009);
        }

        smsVerifyCodeMapper.delete(new QueryWrapper<SmsVerifyCodeDO>()
                .lambda()
                .eq(SmsVerifyCodeDO::getTelephone, administerDO.getTelephone()));


        String verifyCode = RandomUtil.getRandomCode(6);

        String param = "{ \"code\":\"" + verifyCode + "\"}";
        SMSUtils.sendVerifySMS(ConstantUtils.TEMPLATE_CODE, administerDO.getTelephone(), param);

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

        SmsVerifyCodeDO smsCodeDO = new SmsVerifyCodeDO();
        smsCodeDO.setTelephone(administerDO.getTelephone());
        smsCodeDO.setVerifyCode(verifyCode);
        this.baseMapper.insert(smsCodeDO);

    }

    @Override
    @Transactional(rollbackFor = Exception.class)
    public void sendJudgeLoginCode(SmsVerifyCodeDO smsCodeDO) {

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

        smsVerifyCodeMapper.delete(new QueryWrapper<SmsVerifyCodeDO>()
                .lambda()
                .eq(SmsVerifyCodeDO::getTelephone, smsCodeDO.getTelephone()));

        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")) {
                SmsVerifyCodeDO smsCode = this.baseMapper.selectOne(new QueryWrapper<SmsVerifyCodeDO>()
                        .lambda()
                        .eq(SmsVerifyCodeDO::getTelephone, smsCodeDO.getTelephone()));
                if (smsCode != null) {
                    this.baseMapper.deleteById(smsCode.getId());
                }

                SmsVerifyCodeDO sc = new SmsVerifyCodeDO();
                sc.setTelephone(smsCodeDO.getTelephone());
                sc.setVerifyCode(String.valueOf(code));
                this.baseMapper.insert(sc);
            } else {
                throw new HttpException(10011);
            }
        }
    }
}