用户的功能迁移

This commit is contained in:
YunaiV
2020-07-22 20:15:44 +08:00
parent 8edc49f4e7
commit ef1354478e
97 changed files with 859 additions and 1483 deletions

View File

@@ -34,6 +34,12 @@
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>cn.iocoder.mall</groupId>
<artifactId>system-service-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!-- 自身项目 -->
<dependency>
<groupId>cn.iocoder.mall</groupId>

View File

@@ -24,7 +24,7 @@ public interface UserErrorCodeConstants {
// ========== 用户信息模块 1004004100 ==========
ErrorCode USER_NOT_EXISTS = new ErrorCode(1004004100, "用户不存在");
ErrorCode USER_STATUS_NOT_EXISTS = new ErrorCode(1004004101, "用户状态不存在");
ErrorCode USER_STATUS_EQUALS = new ErrorCode(1004004101, "用户已经是该状态");
ErrorCode USER_MOBILE_EXISTS = new ErrorCode(1004004102, "手机号已经存在");
}

View File

@@ -1,16 +1,16 @@
package cn.iocoder.mall.userservice.rpc.sms;
import cn.iocoder.common.framework.vo.CommonResult;
import cn.iocoder.mall.userservice.rpc.sms.vo.UserSendSmsCodeDTO;
import cn.iocoder.mall.userservice.rpc.sms.vo.UserVerifySmsCodeDTO;
import cn.iocoder.mall.userservice.rpc.sms.dto.UserSendSmsCodeReqDTO;
import cn.iocoder.mall.userservice.rpc.sms.dto.UserVerifySmsCodeReqDTO;
/**
* 用户短信验证码 Rpc 接口
*/
public interface UserSmsCodeRpc {
CommonResult<Boolean> sendSmsCode(UserSendSmsCodeDTO sendSmsCodeDTO);
CommonResult<Boolean> sendSmsCode(UserSendSmsCodeReqDTO sendSmsCodeDTO);
CommonResult<Boolean> verifySmsCode(UserVerifySmsCodeDTO verifySmsCodeDTO);
CommonResult<Boolean> verifySmsCode(UserVerifySmsCodeReqDTO verifySmsCodeDTO);
}

View File

@@ -1,4 +1,4 @@
package cn.iocoder.mall.userservice.rpc.sms.vo;
package cn.iocoder.mall.userservice.rpc.sms.dto;
import cn.iocoder.common.framework.validator.InEnum;
import cn.iocoder.mall.userservice.enums.sms.UserSmsSceneEnum;
@@ -10,12 +10,12 @@ import javax.validation.constraints.NotNull;
import java.io.Serializable;
/**
* 用户发送短信验证码 DTO
* 用户发送短信验证码 Request DTO
*/
@Data
@Accessors(chain = true)
@Builder
public class UserSendSmsCodeDTO implements Serializable {
public class UserSendSmsCodeReqDTO implements Serializable {
/**
* 手机号码

View File

@@ -1,4 +1,4 @@
package cn.iocoder.mall.userservice.rpc.sms.vo;
package cn.iocoder.mall.userservice.rpc.sms.dto;
import cn.iocoder.common.framework.validator.InEnum;
import cn.iocoder.mall.userservice.enums.sms.UserSmsSceneEnum;
@@ -10,12 +10,12 @@ import javax.validation.constraints.NotNull;
import java.io.Serializable;
/**
* 用户校验验证码 DTO
* 用户校验验证码 Request DTO
*/
@Data
@Accessors(chain = true)
@Builder
public class UserVerifySmsCodeDTO implements Serializable {
public class UserVerifySmsCodeReqDTO implements Serializable {
/**
* 手机号码

View File

@@ -1,13 +1,54 @@
package cn.iocoder.mall.userservice.rpc.user;
import cn.iocoder.common.framework.vo.CommonResult;
import cn.iocoder.mall.userservice.rpc.user.dto.UserCreateDTO;
import cn.iocoder.mall.userservice.rpc.user.vo.UserVO;
import cn.iocoder.common.framework.vo.PageResult;
import cn.iocoder.mall.userservice.rpc.user.dto.UserCreateReqDTO;
import cn.iocoder.mall.userservice.rpc.user.dto.UserPageReqDTO;
import cn.iocoder.mall.userservice.rpc.user.dto.UserRespDTO;
import cn.iocoder.mall.userservice.rpc.user.dto.UserUpdateReqDTO;
import java.util.List;
public interface UserRpc {
CommonResult<UserVO> getUser(Integer id);
/**
* 获得用户
*
* @param userId 用户编号
* @return 用户
*/
CommonResult<UserRespDTO> getUser(Integer userId);
CommonResult<UserVO> createUserIfAbsent(UserCreateDTO createDTO);
/**
* 基于手机号创建用户。
* 如果用户已经存在,则直接进行返回
*
* @param createDTO 创建用户 DTO
* @return 用户信息
*/
CommonResult<UserRespDTO> createUserIfAbsent(UserCreateReqDTO createDTO);
/**
* 更新用户
*
* @param updateDTO 更新用户 DTO
*/
CommonResult<Boolean> updateUser(UserUpdateReqDTO updateDTO);
/**
* 获得用户列表
*
* @param userIds 用户编号列表
* @return 用户列表
*/
CommonResult<List<UserRespDTO>> listUsers(List<Integer> userIds);
/**
* 获得用户分页
*
* @param pageDTO 用户分页查询
* @return 用户分页结果
*/
CommonResult<PageResult<UserRespDTO>> pageUser(UserPageReqDTO pageDTO);
}

View File

@@ -8,11 +8,11 @@ import javax.validation.constraints.NotNull;
import java.io.Serializable;
/**
* 用户创建 DTO
* 用户创建 Request DTO
*/
@Data
@Accessors(chain = true)
public class UserCreateDTO implements Serializable {
public class UserCreateReqDTO implements Serializable {
/**
* 手机号

View File

@@ -0,0 +1,28 @@
package cn.iocoder.mall.userservice.rpc.user.dto;
import cn.iocoder.common.framework.enums.CommonStatusEnum;
import cn.iocoder.common.framework.validator.InEnum;
import cn.iocoder.common.framework.vo.PageParam;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
* 用户分页 Request DTO
*/
@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
public class UserPageReqDTO extends PageParam {
/**
* 昵称,模糊匹配
*/
private String nickname;
/**
* 状态
*/
@InEnum(value = CommonStatusEnum.class, message = "修改状态必须是 {value}")
private Integer status;
}

View File

@@ -1,4 +1,4 @@
package cn.iocoder.mall.userservice.rpc.user.vo;
package cn.iocoder.mall.userservice.rpc.user.dto;
import cn.iocoder.common.framework.enums.CommonStatusEnum;
import lombok.Data;
@@ -7,11 +7,11 @@ import lombok.experimental.Accessors;
import java.io.Serializable;
/**
* 用户响应
* 用户信息 Response DTO
*/
@Data
@Accessors(chain = true)
public class UserVO implements Serializable {
public class UserRespDTO implements Serializable {
/**
* 用户编号

View File

@@ -0,0 +1,47 @@
package cn.iocoder.mall.userservice.rpc.user.dto;
import cn.iocoder.common.framework.enums.CommonStatusEnum;
import cn.iocoder.common.framework.validator.InEnum;
import cn.iocoder.common.framework.validator.Mobile;
import lombok.Data;
import lombok.experimental.Accessors;
import javax.validation.constraints.NotNull;
import java.io.Serializable;
/**
* 用户更新 Request DTO
*/
@Data
@Accessors(chain = true)
public class UserUpdateReqDTO implements Serializable {
/**
* 用户编号
*/
@NotNull(message = "用户编号不能为空")
private Integer id;
/**
* 昵称
*/
private String nickname;
/**
* 头像
*/
private String avatar;
/**
* 状态
*/
@InEnum(value = CommonStatusEnum.class, message = "修改状态必须是 {value}")
private Integer status;
/**
* 手机号
*/
@Mobile
private String mobile;
/**
* 加密后的密码
*/
private String password;
}

View File

@@ -17,6 +17,12 @@
<artifactId>spring-cloud-starter-dubbo</artifactId>
</dependency>
<dependency>
<!-- 系统服务 -->
<groupId>cn.iocoder.mall</groupId>
<artifactId>system-service-api</artifactId>
</dependency>
<dependency>
<!-- 用户服务 -->
<groupId>cn.iocoder.mall</groupId>

View File

@@ -1,20 +0,0 @@
package cn.iocoder.mall.userservice.config;
import cn.iocoder.common.framework.exception.util.ServiceExceptionUtil;
import cn.iocoder.mall.userservice.enums.UserErrorCodeConstants;
import org.springframework.boot.context.event.ApplicationReadyEvent;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.event.EventListener;
import java.util.Arrays;
@Configuration
public class ServiceExceptionConfiguration {
@EventListener(ApplicationReadyEvent.class)
public void initMessages() {
Arrays.stream(UserErrorCodeConstants.values()).forEach(
item -> ServiceExceptionUtil.put(item.getCode(), item.getMessage()));
}
}

View File

@@ -1,26 +1,49 @@
package cn.iocoder.mall.userservice.convert.user;
import cn.iocoder.mall.userservice.rpc.user.dto.UserCreateDTO;
import cn.iocoder.common.framework.vo.PageResult;
import cn.iocoder.mall.userservice.rpc.user.dto.UserCreateReqDTO;
import cn.iocoder.mall.userservice.rpc.user.dto.UserPageReqDTO;
import cn.iocoder.mall.userservice.rpc.user.dto.UserUpdateReqDTO;
import cn.iocoder.mall.userservice.service.user.bo.UserBO;
import cn.iocoder.mall.userservice.dal.mysql.dataobject.user.UserDO;
import cn.iocoder.mall.userservice.rpc.user.vo.UserVO;
import cn.iocoder.mall.userservice.rpc.user.dto.UserRespDTO;
import cn.iocoder.mall.userservice.service.user.bo.UserCreateBO;
import cn.iocoder.mall.userservice.service.user.bo.UserPageBO;
import cn.iocoder.mall.userservice.service.user.bo.UserUpdateBO;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.factory.Mappers;
import java.util.List;
@Mapper
public interface UserConvert {
UserConvert INSTANCE = Mappers.getMapper(UserConvert.class);
UserVO convert(UserBO bean);
UserRespDTO convert(UserBO bean);
UserBO convert(UserDO bean);
UserDO convert(UserCreateBO bean);
@Mapping(source = "ip", target = "createIp")
UserCreateBO convert(UserCreateDTO createDTO);
UserCreateBO convert(UserCreateReqDTO bean);
UserDO convert(UserUpdateBO bean);
@Mapping(source = "records", target = "list")
PageResult<UserBO> convertPage(IPage<UserDO> page);
UserUpdateBO convert(UserUpdateReqDTO bean);
List<UserBO> convertList(List<UserDO> list);
UserPageBO convert(UserPageReqDTO bean);
PageResult<UserRespDTO> convertPage(PageResult<UserBO> page);
List<UserRespDTO> convertList02(List<UserBO> list);
}

View File

@@ -1,8 +1,12 @@
package cn.iocoder.mall.userservice.dal.mysql.mapper.user;
import cn.iocoder.mall.mybatis.core.query.QueryWrapperX;
import cn.iocoder.mall.userservice.dal.mysql.dataobject.user.UserDO;
import cn.iocoder.mall.userservice.service.user.bo.UserPageBO;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.stereotype.Repository;
@Repository
@@ -14,18 +18,10 @@ public interface UserMapper extends BaseMapper<UserDO> {
);
}
// /**
// * 根据条件分页查询用户列表
// * @param userPageDTO
// * @return
// */
// default IPage<UserDO> selectUserPage(UserPageDTO userPageDTO) {
// // TODO FROM 芋艿 to jwf1173看下 QueryWrapperX 噢,已经提供判空啦 [DONE]
// return this.selectPage(new Page<>(userPageDTO.getPageNo(), userPageDTO.getPageSize()),
// new QueryWrapperX<UserDO>()
// .eq(StringUtils.isNotBlank(userPageDTO.getNickname()), "nickname", userPageDTO.getNickname())
// .eq(null != userPageDTO.getStatus(), "status", userPageDTO.getStatus())
// );
// }
default IPage<UserDO> selectPage(UserPageBO pageBO) {
return selectPage(new Page<>(pageBO.getPageNo(), pageBO.getPageSize()),
new QueryWrapperX<UserDO>().likeIfPresent("nickname", pageBO.getNickname())
.eqIfPresent("status", pageBO.getStatus()));
}
}

View File

@@ -1,7 +1,7 @@
package cn.iocoder.mall.userservice.manager.sms;
import cn.iocoder.mall.userservice.rpc.sms.vo.UserSendSmsCodeDTO;
import cn.iocoder.mall.userservice.rpc.sms.vo.UserVerifySmsCodeDTO;
import cn.iocoder.mall.userservice.rpc.sms.dto.UserSendSmsCodeReqDTO;
import cn.iocoder.mall.userservice.rpc.sms.dto.UserVerifySmsCodeReqDTO;
import cn.iocoder.mall.userservice.service.sms.UserSmsCodeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -12,14 +12,14 @@ public class UserSmsCodeManager {
@Autowired
private UserSmsCodeService userSmsCodeService;
public void sendSmsCode(UserSendSmsCodeDTO sendSmsCodeDTO) {
public void sendSmsCode(UserSendSmsCodeReqDTO sendSmsCodeDTO) {
// 生成短信验证码
String smsCode = userSmsCodeService.createSmsCode(sendSmsCodeDTO.getMobile(),
sendSmsCodeDTO.getScene(), sendSmsCodeDTO.getIp());
// TODO 调用发送验证码
}
public void verifySmsCode(UserVerifySmsCodeDTO verifySmsCodeDTO) {
public void verifySmsCode(UserVerifySmsCodeReqDTO verifySmsCodeDTO) {
userSmsCodeService.verifySmsCode(verifySmsCodeDTO.getMobile(), verifySmsCodeDTO.getCode(),
verifySmsCodeDTO.getScene(), verifySmsCodeDTO.getIp());
}

View File

@@ -1,25 +1,34 @@
package cn.iocoder.mall.userservice.manager.user;
import cn.iocoder.common.framework.enums.CommonStatusEnum;
import cn.iocoder.common.framework.enums.UserTypeEnum;
import cn.iocoder.common.framework.util.StringUtils;
import cn.iocoder.common.framework.vo.PageResult;
import cn.iocoder.mall.systemservice.rpc.oauth.OAuth2Rpc;
import cn.iocoder.mall.systemservice.rpc.oauth.dto.OAuth2RemoveTokenByUserReqDTO;
import cn.iocoder.mall.userservice.convert.user.UserConvert;
import cn.iocoder.mall.userservice.rpc.user.dto.UserCreateDTO;
import cn.iocoder.mall.userservice.rpc.user.vo.UserVO;
import cn.iocoder.mall.userservice.rpc.user.dto.UserCreateReqDTO;
import cn.iocoder.mall.userservice.rpc.user.dto.UserPageReqDTO;
import cn.iocoder.mall.userservice.rpc.user.dto.UserRespDTO;
import cn.iocoder.mall.userservice.rpc.user.dto.UserUpdateReqDTO;
import cn.iocoder.mall.userservice.service.user.UserService;
import cn.iocoder.mall.userservice.service.user.bo.UserBO;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class UserManager {
@Autowired
private UserService userService;
public UserVO getUser(Integer id) {
UserBO userBO = userService.getUser(id);
return UserConvert.INSTANCE.convert(userBO);
}
@DubboReference(version = "${dubbo.consumer.OAuth2Rpc.version}")
private OAuth2Rpc oauth2Rpc;
public UserVO createUserIfAbsent(UserCreateDTO createDTO) {
public UserRespDTO createUserIfAbsent(UserCreateReqDTO createDTO) {
// 用户已经存在
UserBO userBO = userService.getUser(createDTO.getMobile());
if (userBO != null) {
@@ -30,4 +39,53 @@ public class UserManager {
return UserConvert.INSTANCE.convert(userBO);
}
/**
* 更新用户
*
* @param updateDTO 更新用户 DTO
*/
public void updateUser(UserUpdateReqDTO updateDTO) {
// 更新管理员信息
userService.updateUser(UserConvert.INSTANCE.convert(updateDTO));
// 如果修改密码,或者禁用管理员
if (StringUtils.hasText(updateDTO.getPassword())
|| CommonStatusEnum.DISABLE.getValue().equals(updateDTO.getStatus())) {
oauth2Rpc.removeToken(new OAuth2RemoveTokenByUserReqDTO().setUserId(updateDTO.getId())
.setUserType(UserTypeEnum.ADMIN.getValue()));
}
}
/**
* 获得用户
*
* @param userId 用户编号
* @return 用户
*/
public UserRespDTO getUser(Integer userId) {
UserBO userBO = userService.getUser(userId);
return UserConvert.INSTANCE.convert(userBO);
}
/**
* 获得用户列表
*
* @param userIds 用户编号列表
* @return 用户列表
*/
public List<UserRespDTO> listUsers(List<Integer> userIds) {
List<UserBO> userBOs = userService.listUsers(userIds);
return UserConvert.INSTANCE.convertList02(userBOs);
}
/**
* 获得用户分页
*
* @param pageDTO 用户分页查询
* @return 用户分页结果
*/
public PageResult<UserRespDTO> pageUser(UserPageReqDTO pageDTO) {
PageResult<UserBO> pageResultBO = userService.pageUser(UserConvert.INSTANCE.convert(pageDTO));
return UserConvert.INSTANCE.convertPage(pageResultBO);
}
}

View File

@@ -2,8 +2,8 @@ package cn.iocoder.mall.userservice.rpc.sms;
import cn.iocoder.common.framework.vo.CommonResult;
import cn.iocoder.mall.userservice.manager.sms.UserSmsCodeManager;
import cn.iocoder.mall.userservice.rpc.sms.vo.UserSendSmsCodeDTO;
import cn.iocoder.mall.userservice.rpc.sms.vo.UserVerifySmsCodeDTO;
import cn.iocoder.mall.userservice.rpc.sms.dto.UserSendSmsCodeReqDTO;
import cn.iocoder.mall.userservice.rpc.sms.dto.UserVerifySmsCodeReqDTO;
import org.apache.dubbo.config.annotation.Service;
import org.springframework.beans.factory.annotation.Autowired;
@@ -14,13 +14,13 @@ public class UserSmsCodeRpcImpl implements UserSmsCodeRpc {
private UserSmsCodeManager userSmsCodeManager;
@Override
public CommonResult<Boolean> sendSmsCode(UserSendSmsCodeDTO sendSmsCodeDTO) {
public CommonResult<Boolean> sendSmsCode(UserSendSmsCodeReqDTO sendSmsCodeDTO) {
userSmsCodeManager.sendSmsCode(sendSmsCodeDTO);
return CommonResult.success(true);
}
@Override
public CommonResult<Boolean> verifySmsCode(UserVerifySmsCodeDTO verifySmsCodeDTO) {
public CommonResult<Boolean> verifySmsCode(UserVerifySmsCodeReqDTO verifySmsCodeDTO) {
userSmsCodeManager.verifySmsCode(verifySmsCodeDTO);
return CommonResult.success(true);
}

View File

@@ -1,12 +1,17 @@
package cn.iocoder.mall.userservice.rpc.user;
import cn.iocoder.common.framework.vo.CommonResult;
import cn.iocoder.common.framework.vo.PageResult;
import cn.iocoder.mall.userservice.manager.user.UserManager;
import cn.iocoder.mall.userservice.rpc.user.dto.UserCreateDTO;
import cn.iocoder.mall.userservice.rpc.user.vo.UserVO;
import cn.iocoder.mall.userservice.rpc.user.dto.UserCreateReqDTO;
import cn.iocoder.mall.userservice.rpc.user.dto.UserPageReqDTO;
import cn.iocoder.mall.userservice.rpc.user.dto.UserRespDTO;
import cn.iocoder.mall.userservice.rpc.user.dto.UserUpdateReqDTO;
import org.apache.dubbo.config.annotation.Service;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.List;
import static cn.iocoder.common.framework.vo.CommonResult.success;
@Service(version = "${dubbo.provider.UserRpc.version}", validation = "false")
@@ -16,13 +21,29 @@ public class UserRpcImpl implements UserRpc {
private UserManager userManager;
@Override
public CommonResult<UserVO> getUser(Integer id) {
public CommonResult<UserRespDTO> getUser(Integer id) {
return success(userManager.getUser(id));
}
@Override
public CommonResult<UserVO> createUserIfAbsent(UserCreateDTO createDTO) {
public CommonResult<List<UserRespDTO>> listUsers(List<Integer> userIds) {
return success(userManager.listUsers(userIds));
}
@Override
public CommonResult<UserRespDTO> createUserIfAbsent(UserCreateReqDTO createDTO) {
return success(userManager.createUserIfAbsent(createDTO));
}
@Override
public CommonResult<Boolean> updateUser(UserUpdateReqDTO updateDTO) {
userManager.updateUser(updateDTO);
return success(true);
}
@Override
public CommonResult<PageResult<UserRespDTO>> pageUser(UserPageReqDTO pageDTO) {
return success(userManager.pageUser(pageDTO));
}
}

View File

@@ -1,16 +1,25 @@
package cn.iocoder.mall.userservice.service.user;
import cn.iocoder.common.framework.enums.CommonStatusEnum;
import cn.iocoder.common.framework.exception.util.ServiceExceptionUtil;
import cn.iocoder.common.framework.util.DigestUtils;
import cn.iocoder.common.framework.util.StringUtils;
import cn.iocoder.common.framework.vo.PageResult;
import cn.iocoder.mall.userservice.convert.user.UserConvert;
import cn.iocoder.mall.userservice.dal.mysql.dataobject.user.UserDO;
import cn.iocoder.mall.userservice.dal.mysql.mapper.user.UserMapper;
import cn.iocoder.mall.userservice.service.user.bo.UserBO;
import cn.iocoder.mall.userservice.service.user.bo.UserCreateBO;
import cn.iocoder.mall.userservice.service.user.bo.UserPageBO;
import cn.iocoder.mall.userservice.service.user.bo.UserUpdateBO;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import static cn.iocoder.mall.userservice.enums.UserErrorCodeConstants.*;
@Service
public class UserService {
@@ -22,6 +31,17 @@ public class UserService {
return UserConvert.INSTANCE.convert(userDO);
}
/**
* 获得用户列表
*
* @param userIds 用户编号列表
* @return 用户列表
*/
public List<UserBO> listUsers(List<Integer> userIds) {
List<UserDO> userDOs = userMapper.selectBatchIds(userIds);
return UserConvert.INSTANCE.convertList(userDOs);
}
public UserBO getUser(String mobile) {
UserDO userDO = userMapper.selectByMobile(mobile);
return UserConvert.INSTANCE.convert(userDO);
@@ -43,6 +63,45 @@ public class UserService {
return UserConvert.INSTANCE.convert(userDO);
}
public void updateUser(UserUpdateBO updateBO) {
// 校验用户存在
UserDO userDO = userMapper.selectById(updateBO.getId());
if (userDO == null) {
throw ServiceExceptionUtil.exception(USER_NOT_EXISTS);
}
// 校验手机唯一
if (StringUtils.hasText(updateBO.getMobile())) {
UserDO mobileAdmin = userMapper.selectByMobile(updateBO.getMobile());
if (mobileAdmin != null && !mobileAdmin.getId().equals(updateBO.getId())) {
throw ServiceExceptionUtil.exception(USER_MOBILE_EXISTS);
}
}
// 如果有更新状态,则校验是否已经是该状态
if (updateBO.getStatus() != null && updateBO.getStatus().equals(userDO.getStatus())) {
throw ServiceExceptionUtil.exception(USER_STATUS_EQUALS);
}
// 更新到数据库
UserDO updateUser = UserConvert.INSTANCE.convert(updateBO);
// 如果更新密码,需要特殊加密
if (StringUtils.hasText(updateBO.getPassword())) {
String passwordSalt = genPasswordSalt();
String password = encodePassword(updateBO.getPassword(), passwordSalt);
updateUser.setPassword(password).setPasswordSalt(passwordSalt);
}
userMapper.updateById(updateUser);
}
/**
* 获得用户分页
*
* @param pageBO 用户分页查询
* @return 用户分页结果
*/
public PageResult<UserBO> pageUser(UserPageBO pageBO) {
IPage<UserDO> userDOPage = userMapper.selectPage(pageBO);
return UserConvert.INSTANCE.convertPage(userDOPage);
}
private String genPasswordSalt() {
return DigestUtils.genBcryptSalt();
}

View File

@@ -1,5 +1,6 @@
package cn.iocoder.mall.userservice.service.user.bo;
import cn.iocoder.common.framework.validator.Mobile;
import lombok.Data;
import lombok.experimental.Accessors;
@@ -24,6 +25,7 @@ public class UserCreateBO {
* 手机
*/
@NotNull(message = "手机号不能为空")
@Mobile
private String mobile;
/**
* 原始密码,允许空

View File

@@ -0,0 +1,30 @@
package cn.iocoder.mall.userservice.service.user.bo;
import cn.iocoder.common.framework.enums.CommonStatusEnum;
import cn.iocoder.common.framework.validator.InEnum;
import cn.iocoder.common.framework.vo.PageParam;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
/**
* 用户分页 BO
*/
@Data
@EqualsAndHashCode(callSuper = true)
@Accessors(chain = true)
public class UserPageBO extends PageParam {
/**
* 昵称
*
* 模糊
*/
private String nickname;
/**
* 状态
*/
@InEnum(value = CommonStatusEnum.class, message = "修改状态必须是 {value}")
private Integer status;
}

View File

@@ -0,0 +1,46 @@
package cn.iocoder.mall.userservice.service.user.bo;
import cn.iocoder.common.framework.enums.CommonStatusEnum;
import cn.iocoder.common.framework.validator.InEnum;
import cn.iocoder.common.framework.validator.Mobile;
import lombok.Data;
import lombok.experimental.Accessors;
import javax.validation.constraints.NotNull;
/**
* 用户更新 BO
*/
@Data
@Accessors(chain = true)
public class UserUpdateBO {
/**
* 用户编号
*/
@NotNull(message = "用户编号不能为空")
private Integer id;
/**
* 昵称
*/
private String nickname;
/**
* 头像
*/
private String avatar;
/**
* 状态
*/
@InEnum(value = CommonStatusEnum.class, message = "修改状态必须是 {value}")
private Integer status;
/**
* 手机号
*/
@Mobile
private String mobile;
/**
* 密码
*/
private String password;
}

View File

@@ -38,3 +38,7 @@ dubbo:
version: 1.0.0
UserSmsCodeRpc:
version: 1.0.0
# Dubbo 服务消费者的配置
consumer:
OAuth2Rpc:
versoin: 1.0.0