From 1f7f4bf537ff317395fd7d1412d49eb67914883b Mon Sep 17 00:00:00 2001 From: chenyouting <514333061@qq.com> Date: Tue, 24 Jun 2025 13:38:36 +0800 Subject: [PATCH] =?UTF-8?q?app=E7=AB=AF=E5=BF=98=E8=AE=B0=E5=AF=86?= =?UTF-8?q?=E7=A0=81=E5=8A=9F=E8=83=BD=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fuyuanshen/constants/RedisConstants.java | 6 +++ .../modules/security/rest/AuthController.java | 5 --- .../modules/system/domain/app/APPUser.java | 4 ++ .../domain/dto/app/APPForgotPasswordDTO.java | 27 +++++++++++ .../modules/system/domain/vo/APPUserVo.java | 37 +++++++++++++++ .../system/rest/app/APPUserController.java | 45 +++++++++++++++++-- .../system/service/app/APPUserService.java | 5 +++ .../service/impl/app/APPUserServiceImpl.java | 38 ++++++++++++++++ 8 files changed, 158 insertions(+), 9 deletions(-) create mode 100644 fys-common/src/main/java/com/fuyuanshen/constants/RedisConstants.java create mode 100644 fys-system/src/main/java/com/fuyuanshen/modules/system/domain/dto/app/APPForgotPasswordDTO.java create mode 100644 fys-system/src/main/java/com/fuyuanshen/modules/system/domain/vo/APPUserVo.java diff --git a/fys-common/src/main/java/com/fuyuanshen/constants/RedisConstants.java b/fys-common/src/main/java/com/fuyuanshen/constants/RedisConstants.java new file mode 100644 index 0000000..18decd3 --- /dev/null +++ b/fys-common/src/main/java/com/fuyuanshen/constants/RedisConstants.java @@ -0,0 +1,6 @@ +package com.fuyuanshen.constants; + +public class RedisConstants { + + public static final String APP_SMS_TOKEN = "app_sms_forgotPassword:"; +} diff --git a/fys-system/src/main/java/com/fuyuanshen/modules/security/rest/AuthController.java b/fys-system/src/main/java/com/fuyuanshen/modules/security/rest/AuthController.java index b227ccf..ec3da10 100644 --- a/fys-system/src/main/java/com/fuyuanshen/modules/security/rest/AuthController.java +++ b/fys-system/src/main/java/com/fuyuanshen/modules/security/rest/AuthController.java @@ -143,11 +143,6 @@ public class AuthController { } - - - - - @Log("app用户登录") @ApiOperation("app用户登录") @AnonymousPostMapping(value = "/app/login") diff --git a/fys-system/src/main/java/com/fuyuanshen/modules/system/domain/app/APPUser.java b/fys-system/src/main/java/com/fuyuanshen/modules/system/domain/app/APPUser.java index 653c72c..83bd2e4 100644 --- a/fys-system/src/main/java/com/fuyuanshen/modules/system/domain/app/APPUser.java +++ b/fys-system/src/main/java/com/fuyuanshen/modules/system/domain/app/APPUser.java @@ -133,4 +133,8 @@ public class APPUser extends BaseEntity implements Serializable { @ApiModelProperty(hidden = true) private Integer userType; + /** + * 地区 + */ + private String region; } \ No newline at end of file diff --git a/fys-system/src/main/java/com/fuyuanshen/modules/system/domain/dto/app/APPForgotPasswordDTO.java b/fys-system/src/main/java/com/fuyuanshen/modules/system/domain/dto/app/APPForgotPasswordDTO.java new file mode 100644 index 0000000..0c7c6d8 --- /dev/null +++ b/fys-system/src/main/java/com/fuyuanshen/modules/system/domain/dto/app/APPForgotPasswordDTO.java @@ -0,0 +1,27 @@ +package com.fuyuanshen.modules.system.domain.dto.app; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotBlank; + +/** + * @author: 默苍璃 + * @date: 2025-06-1818:36 + */ +@Data +public class APPForgotPasswordDTO { + + @NotBlank(message = "手机号不能为空") + @ApiModelProperty(value = "手机号(APP登录)") + private String phoneNumber; + + + @NotBlank(message = "密码不能为空") + @ApiModelProperty(value = "密码") + private String password; + + @ApiModelProperty(value = "验证码") + @NotBlank(message = "验证码不能为空") + private String verificationCode; +} diff --git a/fys-system/src/main/java/com/fuyuanshen/modules/system/domain/vo/APPUserVo.java b/fys-system/src/main/java/com/fuyuanshen/modules/system/domain/vo/APPUserVo.java new file mode 100644 index 0000000..031f8b2 --- /dev/null +++ b/fys-system/src/main/java/com/fuyuanshen/modules/system/domain/vo/APPUserVo.java @@ -0,0 +1,37 @@ +package com.fuyuanshen.modules.system.domain.vo; + +import com.fuyuanshen.base.BaseEntity; +import com.fuyuanshen.modules.system.domain.Dept; +import com.fuyuanshen.modules.system.domain.Job; +import com.fuyuanshen.modules.system.domain.Role; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.util.Date; +import java.util.List; +import java.util.Objects; +import java.util.Set; + +/** + * @author: 默苍璃 + * @date: 2025-06-1211:34 + */ +@Data +public class APPUserVo { + + @ApiModelProperty(value = "ID", hidden = true) + private Long id; + + @ApiModelProperty(value = "用户昵称") + private String nickName; + + @ApiModelProperty(value = "用户性别") + private String gender; + + @ApiModelProperty(value = "电话号码") + private Long phone; + +} diff --git a/fys-system/src/main/java/com/fuyuanshen/modules/system/rest/app/APPUserController.java b/fys-system/src/main/java/com/fuyuanshen/modules/system/rest/app/APPUserController.java index 529729a..a046c34 100644 --- a/fys-system/src/main/java/com/fuyuanshen/modules/system/rest/app/APPUserController.java +++ b/fys-system/src/main/java/com/fuyuanshen/modules/system/rest/app/APPUserController.java @@ -29,8 +29,10 @@ import com.fuyuanshen.modules.system.domain.User; import com.fuyuanshen.modules.system.domain.app.APPUser; import com.fuyuanshen.modules.system.domain.dto.UserPassVo; import com.fuyuanshen.modules.system.domain.dto.UserQueryCriteria; +import com.fuyuanshen.modules.system.domain.dto.app.APPForgotPasswordDTO; import com.fuyuanshen.modules.system.domain.dto.app.APPUserDTO; import com.fuyuanshen.modules.system.domain.query.APPUserQuery; +import com.fuyuanshen.modules.system.domain.vo.APPUserVo; import com.fuyuanshen.modules.system.domain.vo.ConsumerVo; import com.fuyuanshen.modules.system.enums.UserType; import com.fuyuanshen.modules.system.mapper.UserMapper; @@ -46,6 +48,7 @@ import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.apache.ibatis.annotations.Param; import org.apache.poi.ss.formula.functions.T; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.crypto.password.PasswordEncoder; @@ -91,10 +94,17 @@ public class APPUserController { @ApiOperation("用户中心") @GetMapping(value = "/get") @PreAuthorize("@el.check('appUser:get')") - public ResponseVO getAPPUser(UserQueryCriteria criteria) { + public ResponseVO getAPPUser() { String userName = SecurityUtils.getCurrentUsername(); - return null; -// return ResponseVO.success(appUserService.getAPPUser(criteria)); + APPUser appUser = appUserService.getLoginData(userName); + + APPUserVo appUserVo = new APPUserVo(); + appUserVo.setId(appUser.getId()); + appUserVo.setNickName(appUser.getNickName()); + appUserVo.setGender(appUser.getGender()); + appUserVo.setPhone(appUser.getPhone()); + + return ResponseVO.success(appUserVo); } @Log("app用户注册") @@ -103,7 +113,7 @@ public class APPUserController { public ResponseVO APPRegister(@Validated @RequestBody APPUserDTO user) throws Exception { //暫定0000 - if (user.getVerificationCode() == null || !"0000".equals(user.getVerificationCode())) { + if (!"0000".equals(user.getVerificationCode())) { throw new BadRequestException("验证码错误"); } appUserService.addUser(user); @@ -115,9 +125,36 @@ public class APPUserController { @PutMapping @PreAuthorize("@el.check('appUser:edit')") public ResponseVO updateUser(@Validated(APPUser.Update.class) @RequestBody APPUser appUser) throws Exception { + Long userId = SecurityUtils.getCurrentUserId(); + if(!userId.equals(appUser.getId())){ + throw new BadRequestException("不能修改他人资料"); + } + APPUser updUser= new APPUser(); + updUser.setId(appUser.getId()); + updUser.setNickName(appUser.getNickName()); + updUser.setAvatarPath(appUser.getAvatarPath()); + updUser.setRegion(appUser.getRegion()); + updUser.setGender(appUser.getGender()); appUserService.updateById(appUser); return ResponseVO.success("success!!!"); } + @Log("忘记密码") + @ApiOperation("忘记密码") + @PostMapping(value = "/forgotPassword") + @PreAuthorize("@el.check('appUser:edit')") + public ResponseVO forgotPassword(@RequestBody APPForgotPasswordDTO appForgotPasswordDTO) throws Exception { + appUserService.forgotPassword(appForgotPasswordDTO); + return ResponseVO.success("success!!!"); + } + + @Log("发送验证码") + @ApiOperation("发送验证码") + @PostMapping(value = "/sendSms") + @PreAuthorize("@el.check('appUser:edit')") + public ResponseVO sendSms(@Param("phoneNumber") String phoneNumber) throws Exception { + appUserService.sendSms(phoneNumber); + return ResponseVO.success("success!!!"); + } } diff --git a/fys-system/src/main/java/com/fuyuanshen/modules/system/service/app/APPUserService.java b/fys-system/src/main/java/com/fuyuanshen/modules/system/service/app/APPUserService.java index c8fdacf..ab40f4d 100644 --- a/fys-system/src/main/java/com/fuyuanshen/modules/system/service/app/APPUserService.java +++ b/fys-system/src/main/java/com/fuyuanshen/modules/system/service/app/APPUserService.java @@ -21,6 +21,7 @@ import com.fuyuanshen.modules.security.service.dto.app.AppRoleDto; import com.fuyuanshen.modules.system.domain.Role; import com.fuyuanshen.modules.system.domain.app.APPUser; import com.fuyuanshen.modules.system.domain.dto.UserQueryCriteria; +import com.fuyuanshen.modules.system.domain.dto.app.APPForgotPasswordDTO; import com.fuyuanshen.modules.system.domain.dto.app.APPUserDTO; import com.fuyuanshen.modules.utils.ResponseVO; import com.fuyuanshen.utils.PageResult; @@ -54,4 +55,8 @@ public interface APPUserService extends IService { ResponseVO addUser(APPUserDTO user); Integer selectRoleByUserLevel(Set roles); + + void forgotPassword(APPForgotPasswordDTO appForgotPasswordDTO); + + void sendSms(String phoneNumber); } diff --git a/fys-system/src/main/java/com/fuyuanshen/modules/system/service/impl/app/APPUserServiceImpl.java b/fys-system/src/main/java/com/fuyuanshen/modules/system/service/impl/app/APPUserServiceImpl.java index 83da1ad..df787f6 100644 --- a/fys-system/src/main/java/com/fuyuanshen/modules/system/service/impl/app/APPUserServiceImpl.java +++ b/fys-system/src/main/java/com/fuyuanshen/modules/system/service/impl/app/APPUserServiceImpl.java @@ -15,6 +15,7 @@ */ package com.fuyuanshen.modules.system.service.impl.app; +import cn.hutool.core.util.RandomUtil; import cn.hutool.crypto.digest.MD5; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; @@ -22,17 +23,21 @@ import com.fuyuanshen.exception.BadRequestException; import com.fuyuanshen.modules.system.domain.Role; import com.fuyuanshen.modules.system.domain.app.APPUser; import com.fuyuanshen.modules.system.domain.dto.UserQueryCriteria; +import com.fuyuanshen.modules.system.domain.dto.app.APPForgotPasswordDTO; import com.fuyuanshen.modules.system.domain.dto.app.APPUserDTO; import com.fuyuanshen.modules.system.mapper.app.APPUserMapper; import com.fuyuanshen.modules.system.service.app.APPUserService; import com.fuyuanshen.modules.utils.ResponseVO; import com.fuyuanshen.utils.*; import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Service; import java.util.Set; +import static com.fuyuanshen.constants.RedisConstants.APP_SMS_TOKEN; + /** * @author Zheng Jie * @date 2018-11-23 @@ -45,6 +50,10 @@ public class APPUserServiceImpl extends ServiceImpl impl private final PasswordEncoder passwordEncoder; + @Autowired + private final RedisUtils redisUtils; + + /** * 查询APP/小程序用户 * @@ -96,4 +105,33 @@ public class APPUserServiceImpl extends ServiceImpl impl return 0; } + @Override + public void forgotPassword(APPForgotPasswordDTO appForgotPasswordDTO) { + String phoneNumber = appForgotPasswordDTO.getPhoneNumber(); + APPUser appUser = appUserMapper.appFindByUsername(phoneNumber); + if (appUser == null) { + throw new BadRequestException("手机号不存在"); + } + Object verificationCode = redisUtils.get(APP_SMS_TOKEN + phoneNumber); + if (verificationCode == null) { + throw new BadRequestException("验证码已过期"); + } + if(!appForgotPasswordDTO.getVerificationCode().equals(verificationCode.toString())){ + throw new BadRequestException("验证码错误"); + } + appUser.setPassword(appForgotPasswordDTO.getPassword()); + appUserMapper.updateById(appUser); + } + + @Override + public void sendSms(String phoneNumber) { + if (appUserMapper.appFindByUsername(phoneNumber) == null) { + throw new BadRequestException("手机号不存在"); + } + // todo 发送验证码 + + redisUtils.set(APP_SMS_TOKEN + phoneNumber, RandomUtil.randomNumbers(4), 5 * 60); + + } + }