用户的功能迁移
This commit is contained in:
@@ -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>
|
||||
|
||||
@@ -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, "手机号已经存在");
|
||||
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
|
||||
/**
|
||||
* 手机号码
|
||||
@@ -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 {
|
||||
|
||||
/**
|
||||
* 手机号码
|
||||
@@ -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);
|
||||
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
|
||||
/**
|
||||
* 手机号
|
||||
@@ -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;
|
||||
|
||||
}
|
||||
@@ -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 {
|
||||
|
||||
/**
|
||||
* 用户编号
|
||||
@@ -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;
|
||||
|
||||
}
|
||||
@@ -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>
|
||||
|
||||
@@ -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()));
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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);
|
||||
|
||||
}
|
||||
|
||||
@@ -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()));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
/**
|
||||
* 原始密码,允许空
|
||||
|
||||
@@ -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;
|
||||
|
||||
}
|
||||
@@ -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;
|
||||
|
||||
}
|
||||
@@ -38,3 +38,7 @@ dubbo:
|
||||
version: 1.0.0
|
||||
UserSmsCodeRpc:
|
||||
version: 1.0.0
|
||||
# Dubbo 服务消费者的配置
|
||||
consumer:
|
||||
OAuth2Rpc:
|
||||
versoin: 1.0.0
|
||||
|
||||
Reference in New Issue
Block a user