This commit is contained in:
张良(004796)
2024-01-23 17:08:49 +08:00
parent 434555e744
commit 17895469ee
8 changed files with 96 additions and 20 deletions

View File

@@ -1,11 +1,18 @@
package com.ruoyi.cai.controller.app; package com.ruoyi.cai.controller.app;
import cn.hutool.core.util.PhoneUtil;
import com.ruoyi.cai.auth.RegisterCode;
import com.ruoyi.cai.domain.Adolescent; import com.ruoyi.cai.domain.Adolescent;
import com.ruoyi.cai.dto.app.query.user.AdolescentSetting; import com.ruoyi.cai.domain.User;
import com.ruoyi.cai.dto.app.query.user.AdolescentSwitch; import com.ruoyi.cai.dto.app.query.user.AdolescentSettingReq;
import com.ruoyi.cai.dto.app.query.user.AdolescentSmsCheckReq;
import com.ruoyi.cai.dto.app.query.user.AdolescentSwitchReq;
import com.ruoyi.cai.dto.app.vo.user.AdolescentVo; import com.ruoyi.cai.dto.app.vo.user.AdolescentVo;
import com.ruoyi.cai.enums.CodeEnum;
import com.ruoyi.cai.service.AdolescentService; import com.ruoyi.cai.service.AdolescentService;
import com.ruoyi.cai.service.SmsVerifyService;
import com.ruoyi.cai.service.UserService;
import com.ruoyi.common.annotation.Log; import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.domain.R;
import com.ruoyi.common.enums.BusinessType; import com.ruoyi.common.enums.BusinessType;
@@ -13,8 +20,11 @@ import com.ruoyi.common.helper.LoginHelper;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.util.Map;
@RestController @RestController
@RequestMapping("/api/adolescent") @RequestMapping("/api/adolescent")
@Tag(name = "青少年模式接口") @Tag(name = "青少年模式接口")
@@ -22,11 +32,13 @@ public class AdolescentAppController {
@Autowired @Autowired
private AdolescentService adolescentService; private AdolescentService adolescentService;
@Autowired
private UserService userService;
@PostMapping("/set") @PostMapping("/set")
@Operation(summary = "设置青少年模式") @Operation(summary = "设置青少年模式")
@Log(title = "设置青少年模式", businessType = BusinessType.OTHER, isSaveDb = false) @Log(title = "设置青少年模式", businessType = BusinessType.OTHER, isSaveDb = false)
public R<Void> set(@RequestBody AdolescentSetting setting){ public R<Void> set(@RequestBody AdolescentSettingReq setting){
adolescentService.setAdolescent(setting); adolescentService.setAdolescent(setting);
return R.ok(); return R.ok();
} }
@@ -49,9 +61,36 @@ public class AdolescentAppController {
@PostMapping("/switch") @PostMapping("/switch")
@Operation(summary = "青少年模式开关") @Operation(summary = "青少年模式开关")
@Log(title = "青少年模式开关", businessType = BusinessType.OTHER, isSaveDb = false) @Log(title = "青少年模式开关", businessType = BusinessType.OTHER, isSaveDb = false)
public R<Void> switchAdolescent(@RequestBody AdolescentSwitch adolescentSwitch){ public R<Void> switchAdolescent(@RequestBody AdolescentSwitchReq adolescentSwitchReq){
adolescentService.switchAdolescent(adolescentSwitch); adolescentService.switchAdolescent(adolescentSwitchReq);
return R.ok(); return R.ok();
} }
@PostMapping("/verifyMobileCode")
@Operation(summary = "校验验证码-青少年模式")
@Log(title = "校验验证码-青少年模式", businessType = BusinessType.OTHER, isSaveDb = false)
public R<Void> verifyMobileCode(@RequestBody AdolescentSmsCheckReq req){
adolescentService.verifyMobileCode(req);
return R.ok();
}
@Autowired
private SmsVerifyService smsVerifyService;
@PostMapping("/sms/code")
@Operation(summary = "获取验证码-青少年模式")
@Log(title = "获取验证码-青少年模式", businessType = BusinessType.OTHER, isSaveDb = false)
public R<Map<String,String>> resetPasswordCode(@Validated @RequestBody RegisterCode code){
boolean mobile = PhoneUtil.isMobile(code.getMobile());
if(!mobile){
return R.fail(600,"请输入正确的手机格式");
}
User user = userService.getById(LoginHelper.getUserId());
if(user == null || !user.getMobile().equals(code.getMobile())){
return R.fail(600,"手机号码和绑定的手机号码不一致");
}
smsVerifyService.put(CodeEnum.RESET_ADOLESCENT,code.getMobile());
return R.ok("发送成功");
}
} }

View File

@@ -3,6 +3,6 @@ package com.ruoyi.cai.dto.app.query.user;
import lombok.Data; import lombok.Data;
@Data @Data
public class AdolescentSetting { public class AdolescentSettingReq {
private String password; private String password;
} }

View File

@@ -0,0 +1,12 @@
package com.ruoyi.cai.dto.app.query.user;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
@Data
public class AdolescentSmsCheckReq {
@Schema(description = "手机号")
private String mobile;
@Schema(description = "验证码")
private String code;
}

View File

@@ -3,7 +3,7 @@ package com.ruoyi.cai.dto.app.query.user;
import lombok.Data; import lombok.Data;
@Data @Data
public class AdolescentSwitch { public class AdolescentSwitchReq {
private Integer isOpen; private Integer isOpen;
private String password; private String password;
} }

View File

@@ -5,7 +5,8 @@ import lombok.Getter;
@Getter @Getter
public enum CodeEnum { public enum CodeEnum {
REGISTER("注册短信","SMS_294195165"), REGISTER("注册短信","SMS_294195165"),
RESET_PASSWORD("重置密码","SMS_294195165") RESET_PASSWORD("重置密码","SMS_294195165"),
RESET_ADOLESCENT("重置青少年模式密码","SMS_294195165"),
; ;
private final String name; private final String name;
private final String aliTemplate; private final String aliTemplate;

View File

@@ -2,8 +2,9 @@ package com.ruoyi.cai.service;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.cai.domain.Adolescent; import com.ruoyi.cai.domain.Adolescent;
import com.ruoyi.cai.dto.app.query.user.AdolescentSetting; import com.ruoyi.cai.dto.app.query.user.AdolescentSettingReq;
import com.ruoyi.cai.dto.app.query.user.AdolescentSwitch; import com.ruoyi.cai.dto.app.query.user.AdolescentSmsCheckReq;
import com.ruoyi.cai.dto.app.query.user.AdolescentSwitchReq;
/** /**
* 青少年模式Service接口 * 青少年模式Service接口
@@ -12,10 +13,11 @@ import com.ruoyi.cai.dto.app.query.user.AdolescentSwitch;
* @date 2024-01-23 * @date 2024-01-23
*/ */
public interface AdolescentService extends IService<Adolescent> { public interface AdolescentService extends IService<Adolescent> {
void setAdolescent(AdolescentSetting setting); void setAdolescent(AdolescentSettingReq setting);
Adolescent getByUserId(Long userId); Adolescent getByUserId(Long userId);
void switchAdolescent(AdolescentSwitch adolescentSwitch); void switchAdolescent(AdolescentSwitchReq adolescentSwitchReq);
void verifyMobileCode(AdolescentSmsCheckReq req);
} }

View File

@@ -4,14 +4,18 @@ import cn.dev33.satoken.secure.BCrypt;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.cai.domain.Adolescent; import com.ruoyi.cai.domain.Adolescent;
import com.ruoyi.cai.dto.app.query.user.AdolescentSetting; import com.ruoyi.cai.dto.app.query.user.AdolescentSettingReq;
import com.ruoyi.cai.dto.app.query.user.AdolescentSwitch; import com.ruoyi.cai.dto.app.query.user.AdolescentSmsCheckReq;
import com.ruoyi.cai.dto.app.query.user.AdolescentSwitchReq;
import com.ruoyi.cai.enums.CodeEnum;
import com.ruoyi.cai.mapper.AdolescentMapper; import com.ruoyi.cai.mapper.AdolescentMapper;
import com.ruoyi.cai.service.AdolescentService; import com.ruoyi.cai.service.AdolescentService;
import com.ruoyi.cai.service.SmsVerifyService;
import com.ruoyi.common.exception.ServiceException; import com.ruoyi.common.exception.ServiceException;
import com.ruoyi.common.helper.LoginHelper; import com.ruoyi.common.helper.LoginHelper;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.concurrent.locks.ReentrantLock; import java.util.concurrent.locks.ReentrantLock;
@@ -26,10 +30,12 @@ import java.util.concurrent.locks.ReentrantLock;
@Service @Service
public class AdolescentServiceImpl extends ServiceImpl<AdolescentMapper,Adolescent> implements AdolescentService { public class AdolescentServiceImpl extends ServiceImpl<AdolescentMapper,Adolescent> implements AdolescentService {
@Autowired
private SmsVerifyService smsVerifyService;
@Override @Override
public void setAdolescent(AdolescentSetting setting) { public void setAdolescent(AdolescentSettingReq setting) {
if(StringUtils.isEmpty(setting.getPassword())){ if(StringUtils.isEmpty(setting.getPassword())){
throw new ServiceException("密码不能为空"); throw new ServiceException("密码不能为空");
} }
@@ -55,21 +61,31 @@ public class AdolescentServiceImpl extends ServiceImpl<AdolescentMapper,Adolesce
} }
@Override @Override
public void switchAdolescent(AdolescentSwitch adolescentSwitch) { public void switchAdolescent(AdolescentSwitchReq adolescentSwitchReq) {
if(adolescentSwitch.getIsOpen() == null) { if(adolescentSwitchReq.getIsOpen() == null) {
throw new ServiceException("参数不正确"); throw new ServiceException("参数不正确");
}else if(adolescentSwitch.getIsOpen() != 0 && adolescentSwitch.getIsOpen() != 1){ }else if(adolescentSwitchReq.getIsOpen() != 0 && adolescentSwitchReq.getIsOpen() != 1){
throw new ServiceException("参数不正确"); throw new ServiceException("参数不正确");
} }
Adolescent adolescent = this.getByUserId(LoginHelper.getUserId()); Adolescent adolescent = this.getByUserId(LoginHelper.getUserId());
if(adolescent == null || !BCrypt.checkpw(adolescentSwitch.getPassword(), adolescent.getPassword())){ if(adolescent == null || !BCrypt.checkpw(adolescentSwitchReq.getPassword(), adolescent.getPassword())){
throw new ServiceException("密码错误"); throw new ServiceException("密码错误");
} }
if(adolescentSwitch.getIsOpen() == 0){ if(adolescentSwitchReq.getIsOpen() == 0){
this.removeById(adolescent); this.removeById(adolescent);
}else { }else {
adolescent.setOpen(1); adolescent.setOpen(1);
this.updateById(adolescent); this.updateById(adolescent);
} }
} }
@Override
public void verifyMobileCode(AdolescentSmsCheckReq req) {
boolean check = smsVerifyService.check(CodeEnum.RESET_ADOLESCENT, req.getMobile(), req.getCode());
if(!check){
throw new ServiceException("验证码错误");
}
Long userId = LoginHelper.getUserId();
this.remove(Wrappers.lambdaQuery(Adolescent.class).eq(Adolescent::getUserId,userId));
}
} }

View File

@@ -85,6 +85,12 @@ public class SmsVerifyServiceImpl extends ServiceImpl<SmsVerifyMapper,SmsVerify>
if(count == 0){ if(count == 0){
throw new ServiceException("手机号未注册!"); throw new ServiceException("手机号未注册!");
} }
}else if(codeEnum == CodeEnum.RESET_ADOLESCENT){
long count = userService.count(Wrappers.lambdaQuery(User.class)
.eq(User::getMobile, mobile));
if(count == 0){
throw new ServiceException("手机号未注册!");
}
} }
LocalDateTime now = LocalDateTime.now(); LocalDateTime now = LocalDateTime.now();
SmsVerify one = this.getOne(Wrappers.lambdaQuery(SmsVerify.class) SmsVerify one = this.getOne(Wrappers.lambdaQuery(SmsVerify.class)