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 1/4] =?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); + + } + } From a7bb1d8e84c2bb13a9c4d98ae88640ee2ed1e554 Mon Sep 17 00:00:00 2001 From: chenyouting <514333061@qq.com> Date: Tue, 24 Jun 2025 13:58:00 +0800 Subject: [PATCH 2/4] =?UTF-8?q?app=E7=AB=AF=E5=BF=98=E8=AE=B0=E5=AF=86?= =?UTF-8?q?=E7=A0=81redis=E7=BC=93=E5=AD=98key=E5=AD=97=E6=AE=B5=E4=BC=98?= =?UTF-8?q?=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../fuyuanshen/constants/RedisConstants.java | 4 +- .../system/rest/app/APPUserController.java | 47 ++++++------------- .../service/impl/app/APPUserServiceImpl.java | 16 +++++-- 3 files changed, 30 insertions(+), 37 deletions(-) diff --git a/fys-common/src/main/java/com/fuyuanshen/constants/RedisConstants.java b/fys-common/src/main/java/com/fuyuanshen/constants/RedisConstants.java index 18decd3..af4820a 100644 --- a/fys-common/src/main/java/com/fuyuanshen/constants/RedisConstants.java +++ b/fys-common/src/main/java/com/fuyuanshen/constants/RedisConstants.java @@ -2,5 +2,7 @@ package com.fuyuanshen.constants; public class RedisConstants { - public static final String APP_SMS_TOKEN = "app_sms_forgotPassword:"; + public static final String APP_FORGOT_PASSWORD_SMS_TOKEN = "app_sms_forgotPassword:"; + + public static final String APP_REGISTER_SMS_TOKEN = "app_sms_register:"; } 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 a046c34..1a4dcd6 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 @@ -15,57 +15,28 @@ */ package com.fuyuanshen.modules.system.rest.app; -import cn.hutool.core.collection.CollectionUtil; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.fuyuanshen.annotation.Log; import com.fuyuanshen.annotation.rest.AnonymousPostMapping; import com.fuyuanshen.exception.BadRequestException; -import com.fuyuanshen.modules.security.service.UserCacheManager; -import com.fuyuanshen.modules.security.service.dto.JwtUserDto; -import com.fuyuanshen.modules.system.constant.UserConstants; -import com.fuyuanshen.modules.system.domain.Dept; -import com.fuyuanshen.modules.system.domain.Role; -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; -import com.fuyuanshen.modules.system.service.*; import com.fuyuanshen.modules.system.service.app.APPUserService; import com.fuyuanshen.modules.utils.ResponseVO; import com.fuyuanshen.utils.PageResult; import com.fuyuanshen.utils.SecurityUtils; -import com.fuyuanshen.utils.StringUtils; -import com.fuyuanshen.utils.enums.CodeEnum; -import io.netty.util.internal.StringUtil; 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; -import org.springframework.util.CollectionUtils; -import org.springframework.util.ObjectUtils; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; -import org.springframework.web.multipart.MultipartFile; - -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.io.IOException; -import java.util.Collections; -import java.util.HashSet; -import java.util.List; -import java.util.Set; -import java.util.stream.Collectors; /** * @author Zheng Jie @@ -120,6 +91,15 @@ public class APPUserController { return ResponseVO.success("success!!!"); } + @Log("发送用户注册验证码") + @ApiOperation("发送用户注册验证码") + @PostMapping(value = "/sendRegisterSms") + @PreAuthorize("@el.check('appUser:edit')") + public ResponseVO sendRegisterSms(@Param("phoneNumber") String phoneNumber) throws Exception { + appUserService.sendSms(phoneNumber); + return ResponseVO.success("success!!!"); + } + @Log("修改APP用户") @ApiOperation("修改APP用户") @PutMapping @@ -145,15 +125,18 @@ public class APPUserController { @PostMapping(value = "/forgotPassword") @PreAuthorize("@el.check('appUser:edit')") public ResponseVO forgotPassword(@RequestBody APPForgotPasswordDTO appForgotPasswordDTO) throws Exception { + if (!"0000".equals(appForgotPasswordDTO.getVerificationCode())) { + throw new BadRequestException("验证码错误"); + } appUserService.forgotPassword(appForgotPasswordDTO); return ResponseVO.success("success!!!"); } - @Log("发送验证码") - @ApiOperation("发送验证码") + @Log("发送忘记密码验证码") + @ApiOperation("发送忘记密码验证码") @PostMapping(value = "/sendSms") @PreAuthorize("@el.check('appUser:edit')") - public ResponseVO sendSms(@Param("phoneNumber") String phoneNumber) throws Exception { + public ResponseVO sendForgotPasswordSms(@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/impl/app/APPUserServiceImpl.java b/fys-system/src/main/java/com/fuyuanshen/modules/system/service/impl/app/APPUserServiceImpl.java index df787f6..46ce0f4 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 @@ -36,7 +36,7 @@ import org.springframework.stereotype.Service; import java.util.Set; -import static com.fuyuanshen.constants.RedisConstants.APP_SMS_TOKEN; +import static com.fuyuanshen.constants.RedisConstants.*; /** * @author Zheng Jie @@ -82,6 +82,14 @@ public class APPUserServiceImpl extends ServiceImpl impl if (appUserMapper.getByUsername(username) != null) { throw new BadRequestException("该手机号已被注册"); } + + Object verificationCode = redisUtils.get(APP_REGISTER_SMS_TOKEN + username); + if (verificationCode == null) { + throw new BadRequestException("验证码已过期"); + } + if(!user.getVerificationCode().equals(verificationCode.toString())){ + throw new BadRequestException("验证码错误"); + } APPUser appUser = new APPUser(); appUser.setUsername(user.getPhoneNumber()); @@ -112,13 +120,13 @@ public class APPUserServiceImpl extends ServiceImpl impl if (appUser == null) { throw new BadRequestException("手机号不存在"); } - Object verificationCode = redisUtils.get(APP_SMS_TOKEN + phoneNumber); + /*Object verificationCode = redisUtils.get(APP_FORGOT_PASSWORD_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); } @@ -130,7 +138,7 @@ public class APPUserServiceImpl extends ServiceImpl impl } // todo 发送验证码 - redisUtils.set(APP_SMS_TOKEN + phoneNumber, RandomUtil.randomNumbers(4), 5 * 60); + redisUtils.set(APP_FORGOT_PASSWORD_SMS_TOKEN + phoneNumber, RandomUtil.randomNumbers(4), 5 * 60); } From ae88cc16ccbe7316f5eec8579b6e4d13c1e5381d Mon Sep 17 00:00:00 2001 From: chenyouting <514333061@qq.com> Date: Tue, 24 Jun 2025 17:43:45 +0800 Subject: [PATCH 3/4] =?UTF-8?q?=E4=BF=AE=E6=94=B9app=E7=94=A8=E6=88=B7?= =?UTF-8?q?=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../security/app/AppTokenProvider.java | 4 +- .../domain/dto/app/APPUpdateUserDTO.java | 32 +++++++++++ .../modules/system/domain/vo/APPUserVo.java | 14 +---- .../system/rest/app/APPUserController.java | 26 ++++----- .../system/service/app/APPUserService.java | 3 ++ .../service/impl/app/APPUserServiceImpl.java | 53 ++++++++++++++++++- .../main/resources/config/application-dev.yml | 4 ++ .../resources/config/application-prod.yml | 4 ++ .../src/main/resources/config/application.yml | 2 + 9 files changed, 109 insertions(+), 33 deletions(-) create mode 100644 fys-system/src/main/java/com/fuyuanshen/modules/system/domain/dto/app/APPUpdateUserDTO.java diff --git a/fys-system/src/main/java/com/fuyuanshen/modules/security/security/app/AppTokenProvider.java b/fys-system/src/main/java/com/fuyuanshen/modules/security/security/app/AppTokenProvider.java index 48f43fe..6104e05 100644 --- a/fys-system/src/main/java/com/fuyuanshen/modules/security/security/app/AppTokenProvider.java +++ b/fys-system/src/main/java/com/fuyuanshen/modules/security/security/app/AppTokenProvider.java @@ -77,7 +77,7 @@ public class AppTokenProvider implements InitializingBean { // 设置参数 Map claims = new HashMap<>(6); // 设置用户ID -// claims.put(AUTHORITIES_UID_KEY, user.getAppUser().getId()); + claims.put(AUTHORITIES_UID_KEY, user.getAppUser().getId()); // if (user.getAppUser() != null){ // claims.put(AUTHORITIES_UID_KEY, user.getAppUser().getId()); // }else { @@ -102,7 +102,7 @@ public class AppTokenProvider implements InitializingBean { Map claims = new HashMap<>(6); // 设置用户ID -// claims.put(AUTHORITIES_UID_KEY, user.getAppUser().getId()); + claims.put(AUTHORITIES_UID_KEY, user.getAppUser().getId()); // if (user.getAppUser() != null){ // claims.put(AUTHORITIES_UID_KEY, user.getAppUser().getId()); // }else { diff --git a/fys-system/src/main/java/com/fuyuanshen/modules/system/domain/dto/app/APPUpdateUserDTO.java b/fys-system/src/main/java/com/fuyuanshen/modules/system/domain/dto/app/APPUpdateUserDTO.java new file mode 100644 index 0000000..39c1e3c --- /dev/null +++ b/fys-system/src/main/java/com/fuyuanshen/modules/system/domain/dto/app/APPUpdateUserDTO.java @@ -0,0 +1,32 @@ +package com.fuyuanshen.modules.system.domain.dto.app; + +import com.fuyuanshen.modules.system.domain.app.APPUser; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.springframework.web.multipart.MultipartFile; + +import javax.validation.constraints.NotBlank; + +/** + * @author: 默苍璃 + * @date: 2025-06-1818:36 + */ +@Data +public class APPUpdateUserDTO { + + + @ApiModelProperty(value = "ID", hidden = true) + private Long id; + + @ApiModelProperty(value = "用户昵称") + private String nickName; + + @ApiModelProperty(value = "地区") + private String region; + + @ApiModelProperty(value = "用户性别") + private String gender; + + @ApiModelProperty(value = "头像图片") + private MultipartFile file; +} 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 index 031f8b2..32dba88 100644 --- 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 @@ -1,19 +1,7 @@ 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: 默苍璃 @@ -22,7 +10,7 @@ import java.util.Set; @Data public class APPUserVo { - @ApiModelProperty(value = "ID", hidden = true) + @ApiModelProperty(value = "ID") private Long id; @ApiModelProperty(value = "用户昵称") 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 1a4dcd6..a7ff195 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 @@ -20,8 +20,10 @@ import com.fuyuanshen.annotation.Log; import com.fuyuanshen.annotation.rest.AnonymousPostMapping; import com.fuyuanshen.exception.BadRequestException; import com.fuyuanshen.modules.system.domain.app.APPUser; +import com.fuyuanshen.modules.system.domain.dto.DeviceForm; 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.APPUpdateUserDTO; import com.fuyuanshen.modules.system.domain.dto.app.APPUserDTO; import com.fuyuanshen.modules.system.domain.vo.APPUserVo; import com.fuyuanshen.modules.system.enums.UserType; @@ -93,10 +95,9 @@ public class APPUserController { @Log("发送用户注册验证码") @ApiOperation("发送用户注册验证码") - @PostMapping(value = "/sendRegisterSms") - @PreAuthorize("@el.check('appUser:edit')") + @AnonymousPostMapping(value = "/sendRegisterSms") public ResponseVO sendRegisterSms(@Param("phoneNumber") String phoneNumber) throws Exception { - appUserService.sendSms(phoneNumber); +// appUserService.sendSms(phoneNumber); return ResponseVO.success("success!!!"); } @@ -104,26 +105,20 @@ public class APPUserController { @ApiOperation("修改APP用户") @PutMapping @PreAuthorize("@el.check('appUser:edit')") - public ResponseVO updateUser(@Validated(APPUser.Update.class) @RequestBody APPUser appUser) throws Exception { + public ResponseVO updateUser(@Validated @ModelAttribute APPUpdateUserDTO 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); + + appUserService.updateUser(appUser); return ResponseVO.success("success!!!"); } @Log("忘记密码") @ApiOperation("忘记密码") - @PostMapping(value = "/forgotPassword") - @PreAuthorize("@el.check('appUser:edit')") + @AnonymousPostMapping(value = "/forgotPassword") public ResponseVO forgotPassword(@RequestBody APPForgotPasswordDTO appForgotPasswordDTO) throws Exception { if (!"0000".equals(appForgotPasswordDTO.getVerificationCode())) { throw new BadRequestException("验证码错误"); @@ -134,10 +129,9 @@ public class APPUserController { @Log("发送忘记密码验证码") @ApiOperation("发送忘记密码验证码") - @PostMapping(value = "/sendSms") - @PreAuthorize("@el.check('appUser:edit')") + @AnonymousPostMapping(value = "/sendForgotPasswordSms") public ResponseVO sendForgotPasswordSms(@Param("phoneNumber") String phoneNumber) throws Exception { - appUserService.sendSms(phoneNumber); +// 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 ab40f4d..2d1cbf8 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 @@ -22,6 +22,7 @@ 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.APPUpdateUserDTO; import com.fuyuanshen.modules.system.domain.dto.app.APPUserDTO; import com.fuyuanshen.modules.utils.ResponseVO; import com.fuyuanshen.utils.PageResult; @@ -59,4 +60,6 @@ public interface APPUserService extends IService { void forgotPassword(APPForgotPasswordDTO appForgotPasswordDTO); void sendSms(String phoneNumber); + + void updateUser(APPUpdateUserDTO appUser); } 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 46ce0f4..f89014d 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 @@ -19,11 +19,13 @@ 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; +import com.fuyuanshen.constants.DeviceConstants; 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.APPUpdateUserDTO; 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; @@ -31,9 +33,13 @@ import com.fuyuanshen.modules.utils.ResponseVO; import com.fuyuanshen.utils.*; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; +import java.io.File; +import java.io.IOException; import java.util.Set; import static com.fuyuanshen.constants.RedisConstants.*; @@ -53,7 +59,16 @@ public class APPUserServiceImpl extends ServiceImpl impl @Autowired private final RedisUtils redisUtils; + @Value("${file.app_avatar.pic}") + private String filePath; + @Value("${file.app_avatar.ip}") + private String ip; + /** + * 文件访问路径前缀 + */ + public static final String FILE_ACCESS_PREFIX = "images"; + public static final String FILE_AVATAR_PREFIX = "avatar"; /** * 查询APP/小程序用户 * @@ -83,13 +98,13 @@ public class APPUserServiceImpl extends ServiceImpl impl throw new BadRequestException("该手机号已被注册"); } - Object verificationCode = redisUtils.get(APP_REGISTER_SMS_TOKEN + username); +/* Object verificationCode = redisUtils.get(APP_REGISTER_SMS_TOKEN + username); if (verificationCode == null) { throw new BadRequestException("验证码已过期"); } if(!user.getVerificationCode().equals(verificationCode.toString())){ throw new BadRequestException("验证码错误"); - } + }*/ APPUser appUser = new APPUser(); appUser.setUsername(user.getPhoneNumber()); @@ -142,4 +157,38 @@ public class APPUserServiceImpl extends ServiceImpl impl } + @Override + public void updateUser(APPUpdateUserDTO appUser) { + APPUser updUser= new APPUser(); + updUser.setId(appUser.getId()); + updUser.setNickName(appUser.getNickName()); + try { + updUser.setAvatarPath(saveUserAvatarImage(appUser.getFile())); + }catch (IOException e){ + throw new BadRequestException("上传头像失败"); + } + updUser.setRegion(appUser.getRegion()); + updUser.setGender(appUser.getGender()); + appUserMapper.updateById(updUser); + } + + private String saveUserAvatarImage(MultipartFile file) throws IOException { + if (file == null || file.isEmpty()) { + return null; + } + + String originalFileName = file.getOriginalFilename(); + String fileExtension = originalFileName.substring(originalFileName.lastIndexOf(".") + 1); + String newFileName = "PS_" + RandomUtil.randomNumbers(8) + "." + fileExtension; + + File newFile = new File(filePath + FILE_AVATAR_PREFIX + File.separator + newFileName); + + if (!newFile.getParentFile().exists()) { + newFile.getParentFile().mkdirs(); + } + + file.transferTo(newFile); + + return ip + DeviceConstants.FILE_ACCESS_PREFIX + "/" + FILE_AVATAR_PREFIX + "/" + newFileName; + } } diff --git a/fys-system/src/main/resources/config/application-dev.yml b/fys-system/src/main/resources/config/application-dev.yml index 5892d92..177945c 100644 --- a/fys-system/src/main/resources/config/application-dev.yml +++ b/fys-system/src/main/resources/config/application-dev.yml @@ -141,6 +141,10 @@ file: device: pic: C:\eladmin\file\ #设备图片存储路径 ip: http://fuyuanshen.com:81/ #服务器地址 + app_avatar: + pic: C:\eladmin\file\ #设备图片存储路径 + #ip: http://fuyuanshen.com:81/ #服务器地址 + ip: https://fuyuanshen.com/ #服务器地址 logging: level: diff --git a/fys-system/src/main/resources/config/application-prod.yml b/fys-system/src/main/resources/config/application-prod.yml index 63a86da..9208981 100644 --- a/fys-system/src/main/resources/config/application-prod.yml +++ b/fys-system/src/main/resources/config/application-prod.yml @@ -151,3 +151,7 @@ file: pic: /home/eladmin/file/ #设备图片存储路径 #ip: http://fuyuanshen.com:81/ #服务器地址 ip: https://fuyuanshen.com/ #服务器地址 + app_avatar: + pic: /home/eladmin/app_avatar/ #设备图片存储路径 + #ip: http://fuyuanshen.com:81/ #服务器地址 + ip: https://fuyuanshen.com/ #服务器地址 diff --git a/fys-system/src/main/resources/config/application.yml b/fys-system/src/main/resources/config/application.yml index 0669a77..76c354c 100644 --- a/fys-system/src/main/resources/config/application.yml +++ b/fys-system/src/main/resources/config/application.yml @@ -43,6 +43,8 @@ spring: multipart: max-file-size: 5MB # 设置单个上传文件的最大大小为10MB max-request-size: 5MB + jackson: + default-property-inclusion: non_null # pid: # file: /自行指定位置/eladmin.pid From c61f2a7265a14b58f90d771dd0b17a6fe9019ba1 Mon Sep 17 00:00:00 2001 From: chenyouting <514333061@qq.com> Date: Tue, 24 Jun 2025 18:35:30 +0800 Subject: [PATCH 4/4] =?UTF-8?q?app=E7=99=BB=E5=BD=95=E5=93=8D=E5=BA=94?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E7=A0=81=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/fuyuanshen/modules/security/rest/AuthController.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 ec3da10..e8a61b8 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 @@ -146,7 +146,7 @@ public class AuthController { @Log("app用户登录") @ApiOperation("app用户登录") @AnonymousPostMapping(value = "/app/login") - public ResponseEntity APPLogin(@Validated @RequestBody AppAuthUserDto authUser, HttpServletRequest request) throws Exception { + public ResponseVO APPLogin(@Validated @RequestBody AppAuthUserDto authUser, HttpServletRequest request) throws Exception { // 1. 构建查询参数 APPUserQuery appUserQuery = new APPUserQuery(); @@ -197,7 +197,7 @@ public class AuthController { onlineUserService.saveAppOnlineUser(jwtUser, token, request); // 11. 返回结果 - return ResponseEntity.ok(authInfo); + return ResponseVO.success(authInfo); }