package com.template.services.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.template.config.MySecurity; import com.template.model.pojo.SmsCode; import com.template.mapper.SmsCodeMapper; import com.template.model.pojo.SystemUser; import com.template.model.result.CommonResult; import com.template.model.result.PageUtils; import com.template.services.SmsCodeService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.template.services.SystemUserService; import com.template.common.utils.EncryptionUtil; import com.template.common.utils.RSAUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; /** *

* 服务实现类 *

* * @author ceshi * @since 2023-04-20 */ @Service public class SmsCodeServiceImpl extends ServiceImpl implements SmsCodeService { @Autowired public SmsCodeMapper smsCodeMapper; @Autowired SystemUserService systemUserService; @Autowired MySecurity mySecurity; private static final int MAX_JSON_STRING = 40; @Override public int insertSmsCode(SmsCode sa) { int result = smsCodeMapper.insert(sa); return result; } @Override public int updateSmsCode(SmsCode sa) { int result = smsCodeMapper.updateById(sa); return result; } @Override public PageUtils queryPageSmsCode(int currentPage, int pageCount, QueryWrapper queryWrapper) { Page page = new Page<>(currentPage, pageCount); IPage result = smsCodeMapper.selectPage(page,queryWrapper); return new PageUtils<>(result); } @Override public int deleteSmsCodeById(int id) { int result = smsCodeMapper.deleteById(id); return result; } @Override public SmsCode getSmsCodeById(int id) { SmsCode result = smsCodeMapper.selectById(id); return result; } @Override public List getSmsCodeList() { QueryWrapper queryWrapper = new QueryWrapper<>(); queryWrapper.eq("deleted", 0); List result = smsCodeMapper.selectList(queryWrapper); return result; } @Override public List getSmsCodeByKey(QueryWrapper queryWrapper) { List result = smsCodeMapper.selectList(queryWrapper); return result; } @Override public CommonResult logIn(String phone, String code) { if (ObjectUtils.isEmpty(phone) || ObjectUtils.isEmpty(code)) { return CommonResult.fail("500", "参数为空"); } // 获取私钥 String privateKey = mySecurity.getPrivateKey(); // postman传参会将+转换成空格 phone = phone.replace(" ", "+"); code = code.replace(" ", "+"); String decryptPhone; String decryptCode; try { decryptPhone = RSAUtils.decrypt(phone, RSAUtils.getPrivateKey(privateKey)); decryptCode = RSAUtils.decrypt(code, RSAUtils.getPrivateKey(privateKey)); } catch (Exception e) { return CommonResult.fail("500", "解密失败"); } phone = decryptPhone; code = decryptCode; LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); wrapper.eq(SmsCode::getPhoneNumber, phone); wrapper.ge(SmsCode::getExpirationTime, new Date()); wrapper.eq(SmsCode::getIsVerify, "0"); SmsCode one = this.getOne(wrapper); if (ObjectUtils.isEmpty(one)) { return CommonResult.fail("500", "验证码已过期"); } String code1 = one.getCode(); // 验证 if (!(code1.equals(code))) { return CommonResult.fail("500", "验证码错误"); } // 登录成功,生成token LambdaQueryWrapper wrapper2 = new LambdaQueryWrapper<>(); wrapper2.eq(SystemUser::getPhoneNumber, phone); SystemUser one1 = systemUserService.getOne(wrapper2); // String token = JWTUtil.getToken(one1); // LoginVO loginVO = new LoginVO(); // loginVO.setToken(token); // loginVO.setTokenTtl(JWTUtil.getExpired()); // loginVO.setUserName(one1.getAccountName()); // loginVO.setTelPhone(phone); // 将返回值转成json字符串并加密 String s = "";//JSON.toJSONString(loginVO); Map encryption = new HashMap<>(); try { // 返回的加密字符串太长,无法解析,每次返回加密40长度的字符串 EncryptionUtil encryptionUtil = new EncryptionUtil(); encryption = encryptionUtil.encryption(s,mySecurity.getPublicKey()); } catch (Exception e) { return CommonResult.fail("500", "加密失败"); } return CommonResult.ok(encryption); } }