mirror of
				https://github.com/YunaiV/ruoyi-vue-pro.git
				synced 2025-10-31 02:28:03 +08:00 
			
		
		
		
	[update] 新增修改昵称,修改头像,查询昵称与头像接口
This commit is contained in:
		| @ -2,12 +2,12 @@ package cn.iocoder.yudao.adminserver.modules.infra.controller.file; | ||||
|  | ||||
| import cn.hutool.core.io.IoUtil; | ||||
| import cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.file.InfFileDO; | ||||
| import cn.iocoder.yudao.coreservice.modules.infra.service.file.InfFileCoreService; | ||||
| import cn.iocoder.yudao.framework.common.pojo.CommonResult; | ||||
| import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||||
| import cn.iocoder.yudao.adminserver.modules.infra.controller.file.vo.InfFilePageReqVO; | ||||
| import cn.iocoder.yudao.adminserver.modules.infra.controller.file.vo.InfFileRespVO; | ||||
| import cn.iocoder.yudao.coreservice.modules.infra.file.vo.InfFilePageReqVO; | ||||
| import cn.iocoder.yudao.coreservice.modules.infra.file.vo.InfFileRespVO; | ||||
| import cn.iocoder.yudao.adminserver.modules.infra.convert.file.InfFileConvert; | ||||
| import cn.iocoder.yudao.adminserver.modules.infra.service.file.InfFileService; | ||||
| import cn.iocoder.yudao.framework.common.util.servlet.ServletUtils; | ||||
| import io.swagger.annotations.Api; | ||||
| import io.swagger.annotations.ApiImplicitParam; | ||||
| @ -35,7 +35,7 @@ import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; | ||||
| public class InfFileController { | ||||
|  | ||||
|     @Resource | ||||
|     private InfFileService fileService; | ||||
|     private InfFileCoreService fileService; | ||||
|  | ||||
|     @PostMapping("/upload") | ||||
|     @ApiOperation("上传文件") | ||||
|  | ||||
| @ -2,7 +2,7 @@ package cn.iocoder.yudao.adminserver.modules.infra.convert.file; | ||||
|  | ||||
| import cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.file.InfFileDO; | ||||
| import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||||
| import cn.iocoder.yudao.adminserver.modules.infra.controller.file.vo.InfFileRespVO; | ||||
| import cn.iocoder.yudao.coreservice.modules.infra.file.vo.InfFileRespVO; | ||||
| import org.mapstruct.Mapper; | ||||
| import org.mapstruct.factory.Mappers; | ||||
|  | ||||
|  | ||||
| @ -1,25 +0,0 @@ | ||||
| package cn.iocoder.yudao.adminserver.modules.infra.dal.mysql.file; | ||||
|  | ||||
| import cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.file.InfFileDO; | ||||
| import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||||
| import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; | ||||
| import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX; | ||||
| import cn.iocoder.yudao.adminserver.modules.infra.controller.file.vo.InfFilePageReqVO; | ||||
| import org.apache.ibatis.annotations.Mapper; | ||||
|  | ||||
| @Mapper | ||||
| public interface InfFileMapper extends BaseMapperX<InfFileDO> { | ||||
|  | ||||
|     default Integer selectCountById(String id) { | ||||
|         return selectCount("id", id); | ||||
|     } | ||||
|  | ||||
|     default PageResult<InfFileDO> selectPage(InfFilePageReqVO reqVO) { | ||||
|         return selectPage(reqVO, new QueryWrapperX<InfFileDO>() | ||||
|                 .likeIfPresent("id", reqVO.getId()) | ||||
|                 .likeIfPresent("type", reqVO.getType()) | ||||
|                 .betweenIfPresent("create_time", reqVO.getBeginCreateTime(), reqVO.getEndCreateTime()) | ||||
|                 .orderByDesc("create_time")); | ||||
|     } | ||||
|  | ||||
| } | ||||
| @ -27,7 +27,4 @@ public interface InfErrorCodeConstants { | ||||
|     ErrorCode API_ERROR_LOG_NOT_FOUND = new ErrorCode(1001002000, "API 错误日志不存在"); | ||||
|     ErrorCode API_ERROR_LOG_PROCESSED = new ErrorCode(1001002001, "API 错误日志已处理"); | ||||
|  | ||||
|     // ========== 文件 1001003000 ========== | ||||
|     ErrorCode FILE_NOT_EXISTS = new ErrorCode(1001003000, "文件不存在"); | ||||
|  | ||||
| } | ||||
|  | ||||
| @ -4,7 +4,6 @@ import cn.hutool.core.collection.CollUtil; | ||||
| import cn.hutool.core.io.IoUtil; | ||||
| import cn.hutool.core.util.IdUtil; | ||||
| import cn.hutool.core.util.StrUtil; | ||||
| import cn.iocoder.yudao.adminserver.modules.infra.service.file.InfFileService; | ||||
| import cn.iocoder.yudao.adminserver.modules.system.controller.user.vo.profile.SysUserProfileUpdatePasswordReqVO; | ||||
| import cn.iocoder.yudao.adminserver.modules.system.controller.user.vo.profile.SysUserProfileUpdateReqVO; | ||||
| import cn.iocoder.yudao.adminserver.modules.system.controller.user.vo.user.*; | ||||
| @ -16,6 +15,7 @@ import cn.iocoder.yudao.adminserver.modules.system.service.dept.SysDeptService; | ||||
| import cn.iocoder.yudao.adminserver.modules.system.service.dept.SysPostService; | ||||
| import cn.iocoder.yudao.adminserver.modules.system.service.permission.SysPermissionService; | ||||
| import cn.iocoder.yudao.adminserver.modules.system.service.user.SysUserService; | ||||
| import cn.iocoder.yudao.coreservice.modules.infra.service.file.InfFileCoreService; | ||||
| import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; | ||||
| import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; | ||||
| import cn.iocoder.yudao.framework.common.exception.ServiceException; | ||||
| @ -59,7 +59,7 @@ public class SysUserServiceImpl implements SysUserService { | ||||
|     @Resource | ||||
|     private PasswordEncoder passwordEncoder; | ||||
|     @Resource | ||||
|     private InfFileService fileService; | ||||
|     private InfFileCoreService fileService; | ||||
|  | ||||
|     @Override | ||||
|     public Long createUser(SysUserCreateReqVO reqVO) { | ||||
|  | ||||
| @ -3,11 +3,11 @@ package cn.iocoder.yudao.adminserver.modules.infra.service.file; | ||||
| import cn.hutool.core.io.resource.ResourceUtil; | ||||
| import cn.iocoder.yudao.adminserver.BaseDbUnitTest; | ||||
| import cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.file.InfFileDO; | ||||
| import cn.iocoder.yudao.coreservice.modules.infra.dal.mysql.file.InfFileCoreMapper; | ||||
| import cn.iocoder.yudao.coreservice.modules.infra.service.file.impl.InfFileCoreServiceImpl; | ||||
| import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||||
| import cn.iocoder.yudao.adminserver.modules.infra.framework.file.config.FileProperties; | ||||
| import cn.iocoder.yudao.adminserver.modules.infra.controller.file.vo.InfFilePageReqVO; | ||||
| import cn.iocoder.yudao.adminserver.modules.infra.dal.mysql.file.InfFileMapper; | ||||
| import cn.iocoder.yudao.adminserver.modules.infra.service.file.impl.InfFileServiceImpl; | ||||
| import cn.iocoder.yudao.coreservice.modules.infra.framework.file.config.FileProperties; | ||||
| import cn.iocoder.yudao.coreservice.modules.infra.file.vo.InfFilePageReqVO; | ||||
| import cn.iocoder.yudao.framework.common.util.object.ObjectUtils; | ||||
| import org.junit.jupiter.api.Test; | ||||
| import org.springframework.boot.test.mock.mockito.MockBean; | ||||
| @ -15,8 +15,8 @@ import org.springframework.context.annotation.Import; | ||||
|  | ||||
| import javax.annotation.Resource; | ||||
|  | ||||
| import static cn.iocoder.yudao.coreservice.modules.system.enums.SysErrorCodeConstants.FILE_NOT_EXISTS; | ||||
| import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertPojoEquals; | ||||
| import static cn.iocoder.yudao.adminserver.modules.infra.enums.InfErrorCodeConstants.FILE_NOT_EXISTS; | ||||
| import static cn.iocoder.yudao.adminserver.modules.system.enums.SysErrorCodeConstants.FILE_PATH_EXISTS; | ||||
| import static cn.iocoder.yudao.framework.test.core.util.AssertUtils.assertServiceException; | ||||
| import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomPojo; | ||||
| @ -24,17 +24,17 @@ import static cn.iocoder.yudao.framework.test.core.util.RandomUtils.randomString | ||||
| import static cn.iocoder.yudao.framework.common.util.date.DateUtils.buildTime; | ||||
| import static org.junit.jupiter.api.Assertions.*; | ||||
|  | ||||
| @Import({InfFileServiceImpl.class, FileProperties.class}) | ||||
| @Import({InfFileCoreServiceImpl.class, FileProperties.class}) | ||||
| public class InfFileServiceTest extends BaseDbUnitTest { | ||||
|  | ||||
|     @Resource | ||||
|     private InfFileServiceImpl fileService; | ||||
|     private InfFileCoreServiceImpl fileService; | ||||
|  | ||||
|     @MockBean | ||||
|     private FileProperties fileProperties; | ||||
|  | ||||
|     @Resource | ||||
|     private InfFileMapper fileMapper; | ||||
|     private InfFileCoreMapper fileMapper; | ||||
|  | ||||
|     @Test | ||||
|     public void testCreateFile_success() { | ||||
|  | ||||
| @ -3,7 +3,6 @@ package cn.iocoder.yudao.adminserver.modules.system.service.user; | ||||
| import cn.hutool.core.collection.CollUtil; | ||||
| import cn.hutool.core.util.RandomUtil; | ||||
| import cn.iocoder.yudao.adminserver.BaseDbUnitTest; | ||||
| import cn.iocoder.yudao.adminserver.modules.infra.service.file.InfFileService; | ||||
| import cn.iocoder.yudao.adminserver.modules.system.controller.user.vo.profile.SysUserProfileUpdatePasswordReqVO; | ||||
| import cn.iocoder.yudao.adminserver.modules.system.controller.user.vo.profile.SysUserProfileUpdateReqVO; | ||||
| import cn.iocoder.yudao.adminserver.modules.system.controller.user.vo.user.*; | ||||
| @ -14,6 +13,7 @@ import cn.iocoder.yudao.adminserver.modules.system.service.dept.SysDeptService; | ||||
| import cn.iocoder.yudao.adminserver.modules.system.service.dept.SysPostService; | ||||
| import cn.iocoder.yudao.adminserver.modules.system.service.permission.SysPermissionService; | ||||
| import cn.iocoder.yudao.adminserver.modules.system.service.user.impl.SysUserServiceImpl; | ||||
| import cn.iocoder.yudao.coreservice.modules.infra.service.file.InfFileCoreService; | ||||
| import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; | ||||
| import cn.iocoder.yudao.coreservice.modules.system.enums.common.SysSexEnum; | ||||
| import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; | ||||
| @ -69,7 +69,7 @@ public class SysUserServiceImplTest extends BaseDbUnitTest { | ||||
|     @MockBean | ||||
|     private PasswordEncoder passwordEncoder; | ||||
|     @MockBean | ||||
|     private InfFileService fileService; | ||||
|     private InfFileCoreService fileService; | ||||
|  | ||||
|     @Test | ||||
|     public void testCreatUser_success() { | ||||
|  | ||||
| @ -1,10 +1,24 @@ | ||||
| package cn.iocoder.yudao.coreservice.modules.infra.dal.mysql.file; | ||||
|  | ||||
| import cn.iocoder.yudao.coreservice.modules.infra.file.vo.InfFilePageReqVO; | ||||
| import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||||
| import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; | ||||
| import cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.file.InfFileDO; | ||||
| import cn.iocoder.yudao.framework.mybatis.core.query.QueryWrapperX; | ||||
| import org.apache.ibatis.annotations.Mapper; | ||||
|  | ||||
| @Mapper | ||||
| public interface InfFileCoreMapper extends BaseMapperX<InfFileDO> { | ||||
|     default Integer selectCountById(String id) { | ||||
|         return selectCount("id", id); | ||||
|     } | ||||
|  | ||||
|     default PageResult<InfFileDO> selectPage(InfFilePageReqVO reqVO) { | ||||
|         return selectPage(reqVO, new QueryWrapperX<InfFileDO>() | ||||
|                 .likeIfPresent("id", reqVO.getId()) | ||||
|                 .likeIfPresent("type", reqVO.getType()) | ||||
|                 .betweenIfPresent("create_time", reqVO.getBeginCreateTime(), reqVO.getEndCreateTime()) | ||||
|                 .orderByDesc("create_time")); | ||||
|     } | ||||
|  | ||||
| } | ||||
|  | ||||
| @ -1,4 +1,4 @@ | ||||
| package cn.iocoder.yudao.adminserver.modules.infra.controller.file.vo; | ||||
| package cn.iocoder.yudao.coreservice.modules.infra.file.vo; | ||||
| 
 | ||||
| import cn.iocoder.yudao.framework.common.pojo.PageParam; | ||||
| import io.swagger.annotations.ApiModel; | ||||
| @ -1,4 +1,4 @@ | ||||
| package cn.iocoder.yudao.adminserver.modules.infra.controller.file.vo; | ||||
| package cn.iocoder.yudao.coreservice.modules.infra.file.vo; | ||||
| 
 | ||||
| import io.swagger.annotations.ApiModel; | ||||
| import io.swagger.annotations.ApiModelProperty; | ||||
| @ -1,4 +1,4 @@ | ||||
| package cn.iocoder.yudao.adminserver.modules.infra.framework.file.config; | ||||
| package cn.iocoder.yudao.coreservice.modules.infra.framework.file.config; | ||||
| 
 | ||||
| import org.springframework.boot.context.properties.EnableConfigurationProperties; | ||||
| import org.springframework.context.annotation.Configuration; | ||||
| @ -1,4 +1,4 @@ | ||||
| package cn.iocoder.yudao.adminserver.modules.infra.framework.file.config; | ||||
| package cn.iocoder.yudao.coreservice.modules.infra.framework.file.config; | ||||
| 
 | ||||
| import lombok.Data; | ||||
| import org.springframework.boot.context.properties.ConfigurationProperties; | ||||
| @ -13,4 +13,4 @@ | ||||
|  * 综合考虑,暂时使用方案 3 的方式,比较适合这样一个 all in one 的项目。 | ||||
|  * 随着文件的量级大了之后,还是推荐采用云服务。 | ||||
|  */ | ||||
| package cn.iocoder.yudao.adminserver.modules.infra.framework.file; | ||||
| package cn.iocoder.yudao.coreservice.modules.infra.framework.file; | ||||
| @ -1,15 +1,17 @@ | ||||
| package cn.iocoder.yudao.adminserver.modules.infra.service.file; | ||||
| package cn.iocoder.yudao.coreservice.modules.infra.service.file; | ||||
| 
 | ||||
| import cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.file.InfFileDO; | ||||
| import cn.iocoder.yudao.coreservice.modules.infra.file.vo.InfFilePageReqVO; | ||||
| import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||||
| import cn.iocoder.yudao.adminserver.modules.infra.controller.file.vo.InfFilePageReqVO; | ||||
| 
 | ||||
| /** | ||||
|  * 文件 Service 接口 | ||||
|  * | ||||
|  * @author 芋道源码 | ||||
|  * @Class:ruoyi-vue-pro.cn.iocoder.yudao.coreservice.modules.infra.service.file.InfFileCoreService | ||||
|  * @Descript: 文件 core Service 接口 | ||||
|  * @Author:宋天 | ||||
|  * @Date:2021/10/19 | ||||
|  */ | ||||
| public interface InfFileService { | ||||
| public interface InfFileCoreService { | ||||
| 
 | ||||
| 
 | ||||
|     /** | ||||
|      * 保存文件,并返回文件的访问路径 | ||||
| @ -42,5 +44,4 @@ public interface InfFileService { | ||||
|      * @return 文件分页 | ||||
|      */ | ||||
|     PageResult<InfFileDO> getFilePage(InfFilePageReqVO pageReqVO); | ||||
| 
 | ||||
| } | ||||
| @ -1,31 +1,32 @@ | ||||
| package cn.iocoder.yudao.adminserver.modules.infra.service.file.impl; | ||||
| package cn.iocoder.yudao.coreservice.modules.infra.service.file.impl; | ||||
| 
 | ||||
| import cn.hutool.core.io.FileTypeUtil; | ||||
| import cn.iocoder.yudao.coreservice.modules.infra.dal.dataobject.file.InfFileDO; | ||||
| import cn.iocoder.yudao.coreservice.modules.infra.dal.mysql.file.InfFileCoreMapper; | ||||
| import cn.iocoder.yudao.coreservice.modules.infra.file.vo.InfFilePageReqVO; | ||||
| import cn.iocoder.yudao.coreservice.modules.infra.framework.file.config.FileProperties; | ||||
| import cn.iocoder.yudao.coreservice.modules.infra.service.file.InfFileCoreService; | ||||
| import cn.iocoder.yudao.framework.common.pojo.PageResult; | ||||
| import cn.iocoder.yudao.adminserver.modules.infra.framework.file.config.FileProperties; | ||||
| import cn.iocoder.yudao.adminserver.modules.infra.controller.file.vo.InfFilePageReqVO; | ||||
| import cn.iocoder.yudao.adminserver.modules.infra.dal.mysql.file.InfFileMapper; | ||||
| import cn.iocoder.yudao.adminserver.modules.infra.service.file.InfFileService; | ||||
| import org.springframework.stereotype.Service; | ||||
| 
 | ||||
| import javax.annotation.Resource; | ||||
| import java.io.ByteArrayInputStream; | ||||
| 
 | ||||
| import static cn.iocoder.yudao.coreservice.modules.system.enums.SysErrorCodeConstants.FILE_NOT_EXISTS; | ||||
| import static cn.iocoder.yudao.coreservice.modules.system.enums.SysErrorCodeConstants.FILE_PATH_EXISTS; | ||||
| import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; | ||||
| import static cn.iocoder.yudao.adminserver.modules.infra.enums.InfErrorCodeConstants.FILE_NOT_EXISTS; | ||||
| import static cn.iocoder.yudao.adminserver.modules.system.enums.SysErrorCodeConstants.FILE_PATH_EXISTS; | ||||
| 
 | ||||
| /** | ||||
|  * 文件 Service 实现类 | ||||
|  * | ||||
|  * @author 芋道源码 | ||||
|  * @Class:ruoyi-vue-pro.cn.iocoder.yudao.coreservice.modules.infra.service.file.impl.InfFileCoreServiceImpl | ||||
|  * @Descript: core service 文件实现类 | ||||
|  * @Author:宋天 | ||||
|  * @Date:2021/10/19 | ||||
|  */ | ||||
| @Service | ||||
| public class InfFileServiceImpl implements InfFileService { | ||||
| public class InfFileCoreServiceImpl implements InfFileCoreService { | ||||
| 
 | ||||
|     @Resource | ||||
|     private InfFileMapper fileMapper; | ||||
|     private InfFileCoreMapper fileMapper; | ||||
| 
 | ||||
|     @Resource | ||||
|     private FileProperties fileProperties; | ||||
| @ -0,0 +1,20 @@ | ||||
| package cn.iocoder.yudao.coreservice.modules.system.controller.user.vo; | ||||
|  | ||||
| import io.swagger.annotations.ApiModel; | ||||
| import io.swagger.annotations.ApiModelProperty; | ||||
| import lombok.AllArgsConstructor; | ||||
| import lombok.Data; | ||||
| import lombok.NoArgsConstructor; | ||||
|  | ||||
| @Data | ||||
| @NoArgsConstructor | ||||
| @AllArgsConstructor | ||||
| @ApiModel("用户个人中心信息 Response VO") | ||||
| public class SysUserCoreProfileRespVo { | ||||
|  | ||||
|     @ApiModelProperty(value = "用户昵称", required = true, example = "芋艿") | ||||
|     private String nickName; | ||||
|  | ||||
|     @ApiModelProperty(value = "用户头像", required = true, example = "/infra/file/get/35a12e57-4297-4faa-bf7d-7ed2f211c952") | ||||
|     private String avatar; | ||||
| } | ||||
| @ -14,4 +14,7 @@ public interface SysErrorCodeConstants { | ||||
|     ErrorCode SMS_SEND_MOBILE_TEMPLATE_PARAM_MISS = new ErrorCode(1006000001, "模板参数({})缺失"); | ||||
|     ErrorCode SMS_SEND_TEMPLATE_NOT_EXISTS = new ErrorCode(1006000000, "短信模板不存在"); | ||||
|  | ||||
|     // 文件相关 | ||||
|     ErrorCode FILE_PATH_EXISTS = new ErrorCode(1006001000, "文件路径已存在"); | ||||
|     ErrorCode FILE_NOT_EXISTS = new ErrorCode(1006001002, "文件不存在"); | ||||
| } | ||||
|  | ||||
| @ -1,3 +1,11 @@ | ||||
| ### 请求 /system/user/profile/get 接口 => 没有权限 | ||||
| GET {{userServerUrl}}/system/user/profile/get | ||||
| Authorization: Bearer test245 | ||||
|  | ||||
| ### 请求 /system/user/profile/revise-nickname 接口 成功 | ||||
| PUT http://localhost:28080/api/system/user/profile/revise-nickname?nickName=yunai111 | ||||
| Authorization: Bearer test245 | ||||
|  | ||||
| ### 请求 /system/user/profile/get-user-info 接口 成功 | ||||
| GET http://localhost:28080/api/system/user/profile/get-user-info?id=245 | ||||
| Authorization: Bearer test245 | ||||
| @ -1,14 +1,24 @@ | ||||
| package cn.iocoder.yudao.userserver.modules.member.controller.user; | ||||
|  | ||||
| import cn.iocoder.yudao.coreservice.modules.system.controller.user.vo.SysUserCoreProfileRespVo; | ||||
| import cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil; | ||||
| import cn.iocoder.yudao.framework.common.pojo.CommonResult; | ||||
| import cn.iocoder.yudao.framework.security.core.annotations.PreAuthenticated; | ||||
| import cn.iocoder.yudao.userserver.modules.member.service.user.MbrUserService; | ||||
| import io.swagger.annotations.Api; | ||||
| import io.swagger.annotations.ApiOperation; | ||||
| import lombok.extern.slf4j.Slf4j; | ||||
| import org.springframework.validation.annotation.Validated; | ||||
| import org.springframework.web.bind.annotation.GetMapping; | ||||
| import org.springframework.web.bind.annotation.RequestMapping; | ||||
| import org.springframework.web.bind.annotation.RestController; | ||||
| import org.springframework.web.bind.annotation.*; | ||||
| import org.springframework.web.multipart.MultipartFile; | ||||
|  | ||||
| import javax.annotation.Resource; | ||||
|  | ||||
| import java.io.IOException; | ||||
|  | ||||
| import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; | ||||
| import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId; | ||||
| import static cn.iocoder.yudao.userserver.modules.member.enums.MbrErrorCodeConstants.FILE_IS_EMPTY; | ||||
|  | ||||
| @Api(tags = "用户个人中心") | ||||
| @RestController | ||||
| @ -17,6 +27,9 @@ import org.springframework.web.bind.annotation.RestController; | ||||
| @Slf4j | ||||
| public class SysUserProfileController { | ||||
|  | ||||
|     @Resource | ||||
|     private MbrUserService userService; | ||||
|  | ||||
|     @GetMapping("/get") | ||||
|     @ApiOperation("获得登录用户信息") | ||||
|     @PreAuthenticated | ||||
| @ -24,4 +37,27 @@ public class SysUserProfileController { | ||||
|         return null; | ||||
|     } | ||||
|  | ||||
|     @PutMapping("/revise-nickname") | ||||
|     @ApiOperation("修改用户昵称") | ||||
|     public CommonResult<Boolean> reviseNickname(@RequestParam("nickName") String nickName) { | ||||
|         userService.reviseNickname(getLoginUserId(), nickName); | ||||
|         return success(true); | ||||
|     } | ||||
|  | ||||
|     @PutMapping("/revise-avatar") | ||||
|     @ApiOperation("修改用户头像") | ||||
|     public CommonResult<String> reviseAvatar(@RequestParam("avatarFile") MultipartFile file) throws IOException { | ||||
|         if (file.isEmpty()) { | ||||
|             throw ServiceExceptionUtil.exception(FILE_IS_EMPTY); | ||||
|         } | ||||
|         String avatar = userService.reviseAvatar(getLoginUserId(), file.getInputStream()); | ||||
|         return success(avatar); | ||||
|     } | ||||
|  | ||||
|     @GetMapping("/get-user-info") | ||||
|     @ApiOperation("获取用户头像与昵称") | ||||
|     public CommonResult<SysUserCoreProfileRespVo> getUserInfo(@RequestParam("id") Long id) { | ||||
|         return success(userService.getUserInfo(id)); | ||||
|     } | ||||
| } | ||||
|  | ||||
|  | ||||
| @ -9,4 +9,9 @@ import cn.iocoder.yudao.framework.common.exception.ErrorCode; | ||||
|  */ | ||||
| public interface MbrErrorCodeConstants { | ||||
|  | ||||
|     // 用户相关 | ||||
|     ErrorCode USER_NOT_EXISTS = new ErrorCode(1004000000, "用户不存在"); | ||||
|  | ||||
|     // 文件相关 | ||||
|     ErrorCode FILE_IS_EMPTY = new ErrorCode(1004000000, "用户不存在"); | ||||
| } | ||||
|  | ||||
| @ -1,8 +1,11 @@ | ||||
| package cn.iocoder.yudao.userserver.modules.member.service.user; | ||||
|  | ||||
| import cn.iocoder.yudao.coreservice.modules.member.dal.dataobject.user.MbrUserDO; | ||||
| import cn.iocoder.yudao.coreservice.modules.system.controller.user.vo.SysUserCoreProfileRespVo; | ||||
| import cn.iocoder.yudao.framework.common.validation.Mobile; | ||||
|  | ||||
| import java.io.InputStream; | ||||
|  | ||||
| /** | ||||
|  * 前台用户 Service 接口 | ||||
|  * | ||||
| @ -44,4 +47,26 @@ public interface MbrUserService { | ||||
|      */ | ||||
|     MbrUserDO getUser(Long id); | ||||
|  | ||||
|     /** | ||||
|      * 修改用户昵称 | ||||
|      * @param loginUserId 登录用户id | ||||
|      * @param nickName 用户新昵称 | ||||
|      */ | ||||
|     void reviseNickname(Long loginUserId, String nickName); | ||||
|  | ||||
|     /** | ||||
|      * 修改用户头像 | ||||
|      * @param loginUserId 登录用户id | ||||
|      * @param inputStream 头像文件 | ||||
|      * @return 头像url | ||||
|      */ | ||||
|     String reviseAvatar(Long loginUserId, InputStream inputStream); | ||||
|  | ||||
|     /** | ||||
|      * 根据用户id,获取用户头像与昵称 | ||||
|      * @param loginUserId 登录用户id | ||||
|      * @return 用户响应实体类 | ||||
|      */ | ||||
|     SysUserCoreProfileRespVo getUserInfo(Long loginUserId); | ||||
|  | ||||
| } | ||||
|  | ||||
| @ -1,18 +1,27 @@ | ||||
| package cn.iocoder.yudao.userserver.modules.member.service.user.impl; | ||||
|  | ||||
| import cn.hutool.core.io.IoUtil; | ||||
| import cn.hutool.core.util.IdUtil; | ||||
| import cn.iocoder.yudao.coreservice.modules.infra.service.file.InfFileCoreService; | ||||
| import cn.iocoder.yudao.coreservice.modules.member.dal.dataobject.user.MbrUserDO; | ||||
| import cn.iocoder.yudao.coreservice.modules.system.controller.user.vo.SysUserCoreProfileRespVo; | ||||
| import cn.iocoder.yudao.coreservice.modules.system.dal.dataobject.user.SysUserDO; | ||||
| import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum; | ||||
| import cn.iocoder.yudao.userserver.modules.member.dal.mysql.user.MbrUserMapper; | ||||
| import cn.iocoder.yudao.userserver.modules.member.service.user.MbrUserService; | ||||
| import com.google.common.annotations.VisibleForTesting; | ||||
| import lombok.extern.slf4j.Slf4j; | ||||
| import org.springframework.security.crypto.password.PasswordEncoder; | ||||
| import org.springframework.stereotype.Service; | ||||
|  | ||||
| import javax.annotation.Resource; | ||||
| import javax.validation.Valid; | ||||
| import java.io.InputStream; | ||||
| import java.util.Date; | ||||
|  | ||||
| import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; | ||||
| import static cn.iocoder.yudao.userserver.modules.member.enums.MbrErrorCodeConstants.USER_NOT_EXISTS; | ||||
|  | ||||
| /** | ||||
|  * User Service 实现类 | ||||
|  * | ||||
| @ -26,6 +35,9 @@ public class MbrUserServiceImpl implements MbrUserService { | ||||
|     @Resource | ||||
|     private MbrUserMapper userMapper; | ||||
|  | ||||
|     @Resource | ||||
|     private InfFileCoreService fileCoreService; | ||||
|  | ||||
|     @Resource | ||||
|     private PasswordEncoder passwordEncoder; | ||||
|  | ||||
| @ -68,4 +80,53 @@ public class MbrUserServiceImpl implements MbrUserService { | ||||
|         return userMapper.selectById(id); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void reviseNickname(Long loginUserId, String nickName) { | ||||
|         MbrUserDO mbrUserDO = userMapper.selectById(loginUserId); | ||||
|         // 仅当新昵称不等于旧昵称时进行修改 | ||||
|         if (!nickName.equals(mbrUserDO.getNickname())){ | ||||
|             MbrUserDO user = new MbrUserDO(); | ||||
|             user.setId(mbrUserDO.getId()); | ||||
|             user.setNickname(nickName); | ||||
|             userMapper.updateById(user); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public String reviseAvatar(Long loginUserId, InputStream avatarFile) { | ||||
|         this.checkUserExists(loginUserId); | ||||
|         // 创建文件 | ||||
|         String avatar = fileCoreService.createFile(IdUtil.fastUUID(), IoUtil.readBytes(avatarFile)); | ||||
|         // 更新头像路径 | ||||
|         MbrUserDO userDO = new MbrUserDO(); | ||||
|         userDO.setId(loginUserId); | ||||
|         userDO.setAvatar(avatar); | ||||
|         userMapper.updateById(userDO); | ||||
|         return avatar; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public SysUserCoreProfileRespVo getUserInfo(Long loginUserId) { | ||||
|         MbrUserDO mbrUserDO = userMapper.selectById(loginUserId); | ||||
|         if (mbrUserDO == null){ | ||||
|             log.error("用户不存在:{}",loginUserId); | ||||
|             throw exception(USER_NOT_EXISTS); | ||||
|         } | ||||
|  | ||||
|         SysUserCoreProfileRespVo userRes = new SysUserCoreProfileRespVo(); | ||||
|         userRes.setNickName(mbrUserDO.getNickname()); | ||||
|         userRes.setAvatar(mbrUserDO.getAvatar()); | ||||
|         return userRes; | ||||
|     } | ||||
|  | ||||
|     @VisibleForTesting | ||||
|     public void checkUserExists(Long id) { | ||||
|         if (id == null) { | ||||
|             return; | ||||
|         } | ||||
|         MbrUserDO user = userMapper.selectById(id); | ||||
|         if (user == null) { | ||||
|             throw exception(USER_NOT_EXISTS); | ||||
|         } | ||||
|     } | ||||
| } | ||||
|  | ||||
		Reference in New Issue
	
	Block a user
	 宋天
					宋天