parent
9d29b71a7b
commit
1afea13f56
|
@ -19,6 +19,7 @@
|
||||||
*.iml
|
*.iml
|
||||||
*.ipr
|
*.ipr
|
||||||
target/*
|
target/*
|
||||||
|
target/*
|
||||||
*.class
|
*.class
|
||||||
|
|
||||||
### NetBeans ###
|
### NetBeans ###
|
||||||
|
|
|
@ -0,0 +1,16 @@
|
||||||
|
package cn.iocoder.common.framework.util;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 校验工具类
|
||||||
|
*/
|
||||||
|
public class ValidationUtil {
|
||||||
|
|
||||||
|
public static boolean isMobile(String mobile) {
|
||||||
|
if (mobile == null || mobile.length() != 11) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
// TODO 芋艿,后面完善手机校验
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -119,6 +119,16 @@
|
||||||
</annotationProcessorPaths>
|
</annotationProcessorPaths>
|
||||||
</configuration>
|
</configuration>
|
||||||
</plugin>
|
</plugin>
|
||||||
|
|
||||||
|
<!-- 打包 -->
|
||||||
|
<plugin>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-maven-plugin</artifactId>
|
||||||
|
<configuration>
|
||||||
|
<fork>true</fork>
|
||||||
|
</configuration>
|
||||||
|
</plugin>
|
||||||
|
|
||||||
</plugins>
|
</plugins>
|
||||||
</build>
|
</build>
|
||||||
|
|
||||||
|
|
|
@ -1,25 +0,0 @@
|
||||||
package cn.iocoder.mall.user.application.controller;
|
|
||||||
|
|
||||||
import cn.iocoder.common.framework.vo.CommonResult;
|
|
||||||
import cn.iocoder.mall.user.sdk.context.UserSecurityContextHolder;
|
|
||||||
import cn.iocoder.mall.user.application.vo.UserInfoVO;
|
|
||||||
import io.swagger.annotations.Api;
|
|
||||||
import io.swagger.annotations.ApiOperation;
|
|
||||||
import org.springframework.web.bind.annotation.GetMapping;
|
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
|
||||||
|
|
||||||
@RestController
|
|
||||||
@RequestMapping("/user")
|
|
||||||
@Api("用户模块")
|
|
||||||
public class UserController {
|
|
||||||
|
|
||||||
@GetMapping("/info")
|
|
||||||
@ApiOperation(value = "用户信息")
|
|
||||||
public CommonResult<UserInfoVO> info() {
|
|
||||||
// TODO 芋艿,正在实现中
|
|
||||||
UserInfoVO user = new UserInfoVO().setId(UserSecurityContextHolder.getContext().getUid());
|
|
||||||
return CommonResult.success(user);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -0,0 +1,50 @@
|
||||||
|
package cn.iocoder.mall.user.application.controller.admins;
|
||||||
|
|
||||||
|
import cn.iocoder.common.framework.vo.CommonResult;
|
||||||
|
import cn.iocoder.mall.user.application.convert.UserConvert;
|
||||||
|
import cn.iocoder.mall.user.application.vo.admins.AdminsUserPageVO;
|
||||||
|
import cn.iocoder.mall.user.service.api.UserService;
|
||||||
|
import cn.iocoder.mall.user.service.api.bo.UserPageBO;
|
||||||
|
import cn.iocoder.mall.user.service.api.dto.UserPageDTO;
|
||||||
|
import com.alibaba.dubbo.config.annotation.Reference;
|
||||||
|
import io.swagger.annotations.Api;
|
||||||
|
import io.swagger.annotations.ApiImplicitParam;
|
||||||
|
import io.swagger.annotations.ApiImplicitParams;
|
||||||
|
import io.swagger.annotations.ApiOperation;
|
||||||
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestParam;
|
||||||
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/admins/user")
|
||||||
|
@Api("用户模块")
|
||||||
|
public class AdminsUserController {
|
||||||
|
|
||||||
|
@Reference(validation = "true")
|
||||||
|
private UserService userService;
|
||||||
|
|
||||||
|
// 分页
|
||||||
|
@GetMapping("/page")
|
||||||
|
@ApiOperation(value = "管理员分页")
|
||||||
|
@ApiImplicitParams({
|
||||||
|
@ApiImplicitParam(name = "nickname", value = "昵称,模糊匹配", example = "小王"),
|
||||||
|
@ApiImplicitParam(name = "pageNo", value = "页码,从 0 开始", example = "0"),
|
||||||
|
@ApiImplicitParam(name = "pageSize", value = "每页条数", required = true, example = "10"),
|
||||||
|
})
|
||||||
|
public CommonResult<AdminsUserPageVO> page(@RequestParam(value = "nickname", required = false) String nickname,
|
||||||
|
@RequestParam(value = "pageNo", defaultValue = "0") Integer pageNo,
|
||||||
|
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) {
|
||||||
|
// 创建 UserPageDTO
|
||||||
|
UserPageDTO userPageDTO = new UserPageDTO().setNickname(nickname).setPageNo(pageNo).setPageSize(pageSize);
|
||||||
|
// 查询分页
|
||||||
|
CommonResult<UserPageBO> result = userService.getUserPage(userPageDTO);
|
||||||
|
// 转换结果
|
||||||
|
return UserConvert.INSTANCE.convert(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
// 更新用户信息
|
||||||
|
|
||||||
|
// 开启禁用
|
||||||
|
|
||||||
|
}
|
|
@ -1,4 +1,4 @@
|
||||||
package cn.iocoder.mall.user.application.controller;
|
package cn.iocoder.mall.user.application.controller.users;
|
||||||
|
|
||||||
import cn.iocoder.common.framework.vo.CommonResult;
|
import cn.iocoder.common.framework.vo.CommonResult;
|
||||||
import cn.iocoder.mall.user.application.convert.PassportConvert;
|
import cn.iocoder.mall.user.application.convert.PassportConvert;
|
||||||
|
@ -51,13 +51,15 @@ public class PassportController {
|
||||||
}
|
}
|
||||||
|
|
||||||
@PermitAll
|
@PermitAll
|
||||||
@PostMapping("mobile/send")
|
@PostMapping("mobile/send_register_code")
|
||||||
@ApiOperation(value = "发送手机验证码")
|
@ApiOperation(value = "发送手机验证码")
|
||||||
@ApiImplicitParam(name = "mobile", value = "手机号", required = true, example = "15601691300")
|
@ApiImplicitParam(name = "mobile", value = "手机号", required = true, example = "15601691300")
|
||||||
public CommonResult<Void> mobileSend(@RequestParam("mobile") String mobile) {
|
public CommonResult<Void> mobileSend(@RequestParam("mobile") String mobile) {
|
||||||
return mobileCodeService.send(mobile);
|
return mobileCodeService.send(mobile);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO 芋艿,改绑手机号
|
||||||
|
|
||||||
// TODO 功能:qq 登陆
|
// TODO 功能:qq 登陆
|
||||||
@PermitAll
|
@PermitAll
|
||||||
@PostMapping("/qq/login")
|
@PostMapping("/qq/login")
|
|
@ -0,0 +1,49 @@
|
||||||
|
package cn.iocoder.mall.user.application.controller.users;
|
||||||
|
|
||||||
|
import cn.iocoder.common.framework.vo.CommonResult;
|
||||||
|
import cn.iocoder.mall.user.sdk.context.UserSecurityContextHolder;
|
||||||
|
import cn.iocoder.mall.user.application.vo.UsersUserVO;
|
||||||
|
import cn.iocoder.mall.user.service.api.UserService;
|
||||||
|
import cn.iocoder.mall.user.service.api.dto.UserUpdateDTO;
|
||||||
|
import com.alibaba.dubbo.config.annotation.Reference;
|
||||||
|
import io.swagger.annotations.Api;
|
||||||
|
import io.swagger.annotations.ApiOperation;
|
||||||
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/users/user")
|
||||||
|
@Api("用户模块")
|
||||||
|
public class UserController {
|
||||||
|
|
||||||
|
@Reference
|
||||||
|
private UserService userService;
|
||||||
|
|
||||||
|
@GetMapping("/info")
|
||||||
|
@ApiOperation(value = "用户信息")
|
||||||
|
public CommonResult<UsersUserVO> info() {
|
||||||
|
// TODO 芋艿,正在实现中
|
||||||
|
UsersUserVO user = new UsersUserVO().setId(UserSecurityContextHolder.getContext().getUserId());
|
||||||
|
return CommonResult.success(user);
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping("/update_avatar")
|
||||||
|
@ApiOperation(value = "更新头像")
|
||||||
|
public CommonResult<Boolean> updateAvatar(@RequestParam("avatar") String avatar) {
|
||||||
|
// 创建
|
||||||
|
UserUpdateDTO userUpdateDTO = new UserUpdateDTO().setId(UserSecurityContextHolder.getContext().getUserId())
|
||||||
|
.setAvatar(avatar);
|
||||||
|
// 更新头像
|
||||||
|
return userService.updateUser(userUpdateDTO);
|
||||||
|
}
|
||||||
|
|
||||||
|
@PostMapping("/update_nickname")
|
||||||
|
@ApiOperation(value = "更新昵称")
|
||||||
|
public CommonResult<Boolean> updateNickname(@RequestParam("nickname") String nickname) {
|
||||||
|
// 创建
|
||||||
|
UserUpdateDTO userUpdateDTO = new UserUpdateDTO().setId(UserSecurityContextHolder.getContext().getUserId())
|
||||||
|
.setNickname(nickname);
|
||||||
|
// 更新头像
|
||||||
|
return userService.updateUser(userUpdateDTO);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,18 @@
|
||||||
|
package cn.iocoder.mall.user.application.convert;
|
||||||
|
|
||||||
|
import cn.iocoder.common.framework.vo.CommonResult;
|
||||||
|
import cn.iocoder.mall.user.application.vo.admins.AdminsUserPageVO;
|
||||||
|
import cn.iocoder.mall.user.service.api.bo.UserPageBO;
|
||||||
|
import org.mapstruct.Mapper;
|
||||||
|
import org.mapstruct.Mappings;
|
||||||
|
import org.mapstruct.factory.Mappers;
|
||||||
|
|
||||||
|
@Mapper
|
||||||
|
public interface UserConvert {
|
||||||
|
|
||||||
|
UserConvert INSTANCE = Mappers.getMapper(UserConvert.class);
|
||||||
|
|
||||||
|
@Mappings({})
|
||||||
|
CommonResult<AdminsUserPageVO> convert(CommonResult<UserPageBO> result);
|
||||||
|
|
||||||
|
}
|
|
@ -4,16 +4,16 @@ import io.swagger.annotations.ApiModel;
|
||||||
import io.swagger.annotations.ApiModelProperty;
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
|
||||||
@ApiModel("用户信息 VO")
|
@ApiModel("用户信息 VO")
|
||||||
public class UserInfoVO {
|
public class UsersUserVO {
|
||||||
|
|
||||||
@ApiModelProperty(value = "用户编号", required = true, example = "123")
|
@ApiModelProperty(value = "用户编号", required = true, example = "123")
|
||||||
private Long id;
|
private Integer id;
|
||||||
|
|
||||||
public Long getId() {
|
public Integer getId() {
|
||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
|
||||||
public UserInfoVO setId(Long id) {
|
public UsersUserVO setId(Integer id) {
|
||||||
this.id = id;
|
this.id = id;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
|
@ -0,0 +1,34 @@
|
||||||
|
package cn.iocoder.mall.user.application.vo.admins;
|
||||||
|
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
@ApiModel("用户分页 VO")
|
||||||
|
public class AdminsUserPageVO {
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "用户数组")
|
||||||
|
private List<AdminsUserVO> users;
|
||||||
|
@ApiModelProperty(value = "用户总数")
|
||||||
|
private Integer count;
|
||||||
|
|
||||||
|
public List<AdminsUserVO> getUsers() {
|
||||||
|
return users;
|
||||||
|
}
|
||||||
|
|
||||||
|
public AdminsUserPageVO setUsers(List<AdminsUserVO> users) {
|
||||||
|
this.users = users;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getCount() {
|
||||||
|
return count;
|
||||||
|
}
|
||||||
|
|
||||||
|
public AdminsUserPageVO setCount(Integer count) {
|
||||||
|
this.count = count;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,78 @@
|
||||||
|
package cn.iocoder.mall.user.application.vo.admins;
|
||||||
|
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
@ApiModel("用户 VO")
|
||||||
|
public class AdminsUserVO {
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "用户编号", required = true, example = "1")
|
||||||
|
private Integer id;
|
||||||
|
@ApiModelProperty(value = "手机号", required = true, example = "15601691300")
|
||||||
|
private String mobile;
|
||||||
|
@ApiModelProperty(value = "昵称", required = true, example = "小王")
|
||||||
|
private String nickname;
|
||||||
|
@ApiModelProperty(value = "头像", required = true, example = "http://www.iocoder.cn/xxx.jpg")
|
||||||
|
private String avatar;
|
||||||
|
@ApiModelProperty(value = "账号状态", required = true, example = "1")
|
||||||
|
private Integer status;
|
||||||
|
@ApiModelProperty(value = "创建时间", required = true, example = "时间戳格式")
|
||||||
|
private Date createTime;
|
||||||
|
|
||||||
|
public Integer getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public AdminsUserVO setId(Integer id) {
|
||||||
|
this.id = id;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getMobile() {
|
||||||
|
return mobile;
|
||||||
|
}
|
||||||
|
|
||||||
|
public AdminsUserVO setMobile(String mobile) {
|
||||||
|
this.mobile = mobile;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getNickname() {
|
||||||
|
return nickname;
|
||||||
|
}
|
||||||
|
|
||||||
|
public AdminsUserVO setNickname(String nickname) {
|
||||||
|
this.nickname = nickname;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAvatar() {
|
||||||
|
return avatar;
|
||||||
|
}
|
||||||
|
|
||||||
|
public AdminsUserVO setAvatar(String avatar) {
|
||||||
|
this.avatar = avatar;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getStatus() {
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
public AdminsUserVO setStatus(Integer status) {
|
||||||
|
this.status = status;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Date getCreateTime() {
|
||||||
|
return createTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
public AdminsUserVO setCreateTime(Date createTime) {
|
||||||
|
this.createTime = createTime;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -5,14 +5,14 @@ package cn.iocoder.mall.user.sdk.context;
|
||||||
*/
|
*/
|
||||||
public class UserSecurityContext {
|
public class UserSecurityContext {
|
||||||
|
|
||||||
private final Long uid;
|
private final Integer userId;
|
||||||
|
|
||||||
public UserSecurityContext(Long uid) {
|
public UserSecurityContext(Integer userId) {
|
||||||
this.uid = uid;
|
this.userId = userId;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Long getUid() {
|
public Integer getUserId() {
|
||||||
return uid;
|
return userId;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -1,5 +1,38 @@
|
||||||
package cn.iocoder.mall.user.service.api;
|
package cn.iocoder.mall.user.service.api;
|
||||||
|
|
||||||
|
import cn.iocoder.common.framework.vo.CommonResult;
|
||||||
|
import cn.iocoder.mall.user.service.api.bo.UserPageBO;
|
||||||
|
import cn.iocoder.mall.user.service.api.dto.UserPageDTO;
|
||||||
|
import cn.iocoder.mall.user.service.api.dto.UserUpdateDTO;
|
||||||
|
|
||||||
public interface UserService {
|
public interface UserService {
|
||||||
|
|
||||||
|
CommonResult<UserPageBO> getUserPage(UserPageDTO userPageDTO);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 更新用户基本信息
|
||||||
|
*
|
||||||
|
* @param userUpdateDTO 更新 DTO
|
||||||
|
* @return 更新结果
|
||||||
|
*/
|
||||||
|
CommonResult<Boolean> updateUser(UserUpdateDTO userUpdateDTO);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 更新用户状态
|
||||||
|
*
|
||||||
|
* @param userId 用户编号
|
||||||
|
* @param status 状态
|
||||||
|
* @return 更新结果
|
||||||
|
*/
|
||||||
|
CommonResult<Boolean> updateUserStatus(Integer userId, Integer status);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 更新用户手机号
|
||||||
|
*
|
||||||
|
* @param userId 用户编号
|
||||||
|
* @param mobile 手机号
|
||||||
|
* @return 更新结果
|
||||||
|
*/
|
||||||
|
CommonResult<Boolean> updateUserMobile(Integer userId, String mobile);
|
||||||
|
|
||||||
}
|
}
|
|
@ -7,13 +7,13 @@ public class OAuth2AuthenticationBO implements Serializable {
|
||||||
/**
|
/**
|
||||||
* 用户编号
|
* 用户编号
|
||||||
*/
|
*/
|
||||||
private Long uid;
|
private Integer uid;
|
||||||
|
|
||||||
public Long getUid() {
|
public Integer getUid() {
|
||||||
return uid;
|
return uid;
|
||||||
}
|
}
|
||||||
|
|
||||||
public OAuth2AuthenticationBO setUid(Long uid) {
|
public OAuth2AuthenticationBO setUid(Integer uid) {
|
||||||
this.uid = uid;
|
this.uid = uid;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,22 +1,43 @@
|
||||||
package cn.iocoder.mall.user.service.api.bo;
|
package cn.iocoder.mall.user.service.api.bo;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
public class UserBO {
|
public class UserBO {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 用户编号
|
* 用户编号
|
||||||
*/
|
*/
|
||||||
private Long uid;
|
private Integer id;
|
||||||
/**
|
/**
|
||||||
* 手机号
|
* 手机号
|
||||||
*/
|
*/
|
||||||
private String mobile;
|
private String mobile;
|
||||||
|
/**
|
||||||
|
* 昵称
|
||||||
|
*/
|
||||||
|
private String nickname;
|
||||||
|
/**
|
||||||
|
* 头像
|
||||||
|
*/
|
||||||
|
private String avatar;
|
||||||
|
/**
|
||||||
|
* 账号状态
|
||||||
|
*
|
||||||
|
* 1 - 开启
|
||||||
|
* 2 - 禁用
|
||||||
|
*/
|
||||||
|
private Integer status;
|
||||||
|
/**
|
||||||
|
* 创建时间
|
||||||
|
*/
|
||||||
|
private Date createTime;
|
||||||
|
|
||||||
public Long getUid() {
|
public Integer getId() {
|
||||||
return uid;
|
return id;
|
||||||
}
|
}
|
||||||
|
|
||||||
public UserBO setUid(Long uid) {
|
public UserBO setId(Integer id) {
|
||||||
this.uid = uid;
|
this.id = id;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -29,4 +50,39 @@ public class UserBO {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getNickname() {
|
||||||
|
return nickname;
|
||||||
|
}
|
||||||
|
|
||||||
|
public UserBO setNickname(String nickname) {
|
||||||
|
this.nickname = nickname;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAvatar() {
|
||||||
|
return avatar;
|
||||||
|
}
|
||||||
|
|
||||||
|
public UserBO setAvatar(String avatar) {
|
||||||
|
this.avatar = avatar;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getStatus() {
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
public UserBO setStatus(Integer status) {
|
||||||
|
this.status = status;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Date getCreateTime() {
|
||||||
|
return createTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
public UserBO setCreateTime(Date createTime) {
|
||||||
|
this.createTime = createTime;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
}
|
}
|
|
@ -0,0 +1,34 @@
|
||||||
|
package cn.iocoder.mall.user.service.api.bo;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class UserPageBO {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用户数组
|
||||||
|
*/
|
||||||
|
private List<UserBO> users;
|
||||||
|
/**
|
||||||
|
* 总量
|
||||||
|
*/
|
||||||
|
private Integer count;
|
||||||
|
|
||||||
|
public List<UserBO> getUsers() {
|
||||||
|
return users;
|
||||||
|
}
|
||||||
|
|
||||||
|
public UserPageBO setUsers(List<UserBO> users) {
|
||||||
|
this.users = users;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getCount() {
|
||||||
|
return count;
|
||||||
|
}
|
||||||
|
|
||||||
|
public UserPageBO setCount(Integer count) {
|
||||||
|
this.count = count;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,14 @@
|
||||||
|
package cn.iocoder.mall.user.service.api.constant;
|
||||||
|
|
||||||
|
public class UserConstants {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 状态 - 开启
|
||||||
|
*/
|
||||||
|
public static final Integer STATUS_ENABLE = 1;
|
||||||
|
/**
|
||||||
|
* 状态 - 关闭
|
||||||
|
*/
|
||||||
|
public static final Integer STATUS_DISABLE = 2;
|
||||||
|
|
||||||
|
}
|
|
@ -20,6 +20,9 @@ public enum UserErrorCodeEnum {
|
||||||
// ========== 用户模块 ==========
|
// ========== 用户模块 ==========
|
||||||
USER_MOBILE_NOT_REGISTERED(1001002000, "手机号未注册用户"),
|
USER_MOBILE_NOT_REGISTERED(1001002000, "手机号未注册用户"),
|
||||||
USER_MOBILE_ALREADY_REGISTERED(1001002001, "手机号已经注册用户"),
|
USER_MOBILE_ALREADY_REGISTERED(1001002001, "手机号已经注册用户"),
|
||||||
|
USER_NOT_EXISTS(1001002002, "用户不存在"),
|
||||||
|
USER_STATUS_EQUALS(1001002003, "账号已经是该状态"),
|
||||||
|
USER_MOBILE_EQUALS(1001002004, "账号已经是该手机号"),
|
||||||
|
|
||||||
// ========== 手机验证码模块 ==========
|
// ========== 手机验证码模块 ==========
|
||||||
MOBILE_CODE_NOT_FOUND(1001003000, "验证码不存在"),
|
MOBILE_CODE_NOT_FOUND(1001003000, "验证码不存在"),
|
||||||
|
|
|
@ -0,0 +1,46 @@
|
||||||
|
package cn.iocoder.mall.user.service.api.dto;
|
||||||
|
|
||||||
|
import javax.validation.constraints.NotNull;
|
||||||
|
|
||||||
|
public class UserPageDTO {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 查询的昵称
|
||||||
|
*
|
||||||
|
* 模糊查询
|
||||||
|
*/
|
||||||
|
private String nickname;
|
||||||
|
|
||||||
|
@NotNull(message = "页码不能为空")
|
||||||
|
private Integer pageNo;
|
||||||
|
@NotNull(message = "每页条数不能为空")
|
||||||
|
private Integer pageSize;
|
||||||
|
|
||||||
|
public Integer getPageNo() {
|
||||||
|
return pageNo;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getNickname() {
|
||||||
|
return nickname;
|
||||||
|
}
|
||||||
|
|
||||||
|
public UserPageDTO setNickname(String nickname) {
|
||||||
|
this.nickname = nickname;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public UserPageDTO setPageNo(Integer pageNo) {
|
||||||
|
this.pageNo = pageNo;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Integer getPageSize() {
|
||||||
|
return pageSize;
|
||||||
|
}
|
||||||
|
|
||||||
|
public UserPageDTO setPageSize(Integer pageSize) {
|
||||||
|
this.pageSize = pageSize;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,48 @@
|
||||||
|
package cn.iocoder.mall.user.service.api.dto;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用户更新 DTO
|
||||||
|
*/
|
||||||
|
public class UserUpdateDTO {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 用户编号
|
||||||
|
*/
|
||||||
|
private Integer id;
|
||||||
|
/**
|
||||||
|
* 昵称
|
||||||
|
*/
|
||||||
|
private String nickname;
|
||||||
|
/**
|
||||||
|
* 头像
|
||||||
|
*/
|
||||||
|
private String avatar;
|
||||||
|
|
||||||
|
public Integer getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public UserUpdateDTO setId(Integer id) {
|
||||||
|
this.id = id;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getNickname() {
|
||||||
|
return nickname;
|
||||||
|
}
|
||||||
|
|
||||||
|
public UserUpdateDTO setNickname(String nickname) {
|
||||||
|
this.nickname = nickname;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAvatar() {
|
||||||
|
return avatar;
|
||||||
|
}
|
||||||
|
|
||||||
|
public UserUpdateDTO setAvatar(String avatar) {
|
||||||
|
this.avatar = avatar;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -2,10 +2,13 @@ package cn.iocoder.mall.user.convert;
|
||||||
|
|
||||||
import cn.iocoder.mall.user.dataobject.UserDO;
|
import cn.iocoder.mall.user.dataobject.UserDO;
|
||||||
import cn.iocoder.mall.user.service.api.bo.UserBO;
|
import cn.iocoder.mall.user.service.api.bo.UserBO;
|
||||||
|
import cn.iocoder.mall.user.service.api.dto.UserUpdateDTO;
|
||||||
import org.mapstruct.Mapper;
|
import org.mapstruct.Mapper;
|
||||||
import org.mapstruct.Mappings;
|
import org.mapstruct.Mappings;
|
||||||
import org.mapstruct.factory.Mappers;
|
import org.mapstruct.factory.Mappers;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
@Mapper
|
@Mapper
|
||||||
public interface UserConvert {
|
public interface UserConvert {
|
||||||
|
|
||||||
|
@ -14,4 +17,10 @@ public interface UserConvert {
|
||||||
@Mappings({})
|
@Mappings({})
|
||||||
UserBO convert(UserDO userDO);
|
UserBO convert(UserDO userDO);
|
||||||
|
|
||||||
|
@Mappings({})
|
||||||
|
UserDO convert(UserUpdateDTO userUpdateDTO);
|
||||||
|
|
||||||
|
@Mappings({})
|
||||||
|
List<UserBO> convert(List<UserDO> userDOs);
|
||||||
|
|
||||||
}
|
}
|
|
@ -1,6 +1,7 @@
|
||||||
package cn.iocoder.mall.user.dao;
|
package cn.iocoder.mall.user.dao;
|
||||||
|
|
||||||
import cn.iocoder.mall.user.dataobject.OAuth2AccessTokenDO;
|
import cn.iocoder.mall.user.dataobject.OAuth2AccessTokenDO;
|
||||||
|
import org.apache.ibatis.annotations.Param;
|
||||||
import org.springframework.stereotype.Repository;
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
@Repository
|
@Repository
|
||||||
|
@ -10,4 +11,6 @@ public interface OAuth2AccessTokenMapper {
|
||||||
|
|
||||||
OAuth2AccessTokenDO selectByTokenId(String tokenId);
|
OAuth2AccessTokenDO selectByTokenId(String tokenId);
|
||||||
|
|
||||||
|
void updateToInvalidByUserId(@Param("userId") Integer userId);
|
||||||
|
|
||||||
}
|
}
|
|
@ -1,6 +1,7 @@
|
||||||
package cn.iocoder.mall.user.dao;
|
package cn.iocoder.mall.user.dao;
|
||||||
|
|
||||||
import cn.iocoder.mall.user.dataobject.OAuth2RefreshTokenDO;
|
import cn.iocoder.mall.user.dataobject.OAuth2RefreshTokenDO;
|
||||||
|
import org.apache.ibatis.annotations.Param;
|
||||||
import org.springframework.stereotype.Repository;
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
@Repository
|
@Repository
|
||||||
|
@ -8,4 +9,6 @@ public interface OAuth2RefreshTokenMapper {
|
||||||
|
|
||||||
void insert(OAuth2RefreshTokenDO entity);
|
void insert(OAuth2RefreshTokenDO entity);
|
||||||
|
|
||||||
|
void updateToInvalidByUserId(@Param("userId") Integer userId);
|
||||||
|
|
||||||
}
|
}
|
|
@ -1,13 +1,26 @@
|
||||||
package cn.iocoder.mall.user.dao;
|
package cn.iocoder.mall.user.dao;
|
||||||
|
|
||||||
import cn.iocoder.mall.user.dataobject.UserDO;
|
import cn.iocoder.mall.user.dataobject.UserDO;
|
||||||
|
import org.apache.ibatis.annotations.Param;
|
||||||
import org.springframework.stereotype.Repository;
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
@Repository
|
@Repository
|
||||||
public interface UserMapper {
|
public interface UserMapper {
|
||||||
|
|
||||||
void insert(UserDO entity);
|
void insert(UserDO entity);
|
||||||
|
|
||||||
UserDO selectByMobile(String mobile);
|
int update(UserDO entity);
|
||||||
|
|
||||||
|
UserDO selectByMobile(@Param("mobile") String mobile);
|
||||||
|
|
||||||
|
UserDO selectById(@Param("id") Integer id);
|
||||||
|
|
||||||
|
List<UserDO> selectListByNicknameLike(@Param("nickname") String nickname,
|
||||||
|
@Param("offset") Integer offset,
|
||||||
|
@Param("limit") Integer limit);
|
||||||
|
|
||||||
|
Integer selectCountByNicknameLike(@Param("nickname") String nickname);
|
||||||
|
|
||||||
}
|
}
|
|
@ -8,7 +8,7 @@ public class MobileCodeDO {
|
||||||
/**
|
/**
|
||||||
* 编号
|
* 编号
|
||||||
*/
|
*/
|
||||||
private Long id;
|
private Integer id;
|
||||||
/**
|
/**
|
||||||
* 手机号
|
* 手机号
|
||||||
*/
|
*/
|
||||||
|
@ -28,7 +28,7 @@ public class MobileCodeDO {
|
||||||
/**
|
/**
|
||||||
* 注册的用户编号
|
* 注册的用户编号
|
||||||
*/
|
*/
|
||||||
private Long usedUid;
|
private Integer usedUserId;
|
||||||
/**
|
/**
|
||||||
* 创建时间
|
* 创建时间
|
||||||
*/
|
*/
|
||||||
|
@ -38,11 +38,11 @@ public class MobileCodeDO {
|
||||||
*/
|
*/
|
||||||
private Date usedTime;
|
private Date usedTime;
|
||||||
|
|
||||||
public Long getId() {
|
public Integer getId() {
|
||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
|
||||||
public MobileCodeDO setId(Long id) {
|
public MobileCodeDO setId(Integer id) {
|
||||||
this.id = id;
|
this.id = id;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
@ -83,12 +83,12 @@ public class MobileCodeDO {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Long getUsedUid() {
|
public Integer getUsedUserId() {
|
||||||
return usedUid;
|
return usedUserId;
|
||||||
}
|
}
|
||||||
|
|
||||||
public MobileCodeDO setUsedUid(Long usedUid) {
|
public MobileCodeDO setUsedUserId(Integer usedUserId) {
|
||||||
this.usedUid = usedUid;
|
this.usedUserId = usedUserId;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -15,7 +15,7 @@ public class OAuth2AccessTokenDO {
|
||||||
/**
|
/**
|
||||||
* 用户编号
|
* 用户编号
|
||||||
*/
|
*/
|
||||||
private Long uid;
|
private Integer userId;
|
||||||
/**
|
/**
|
||||||
* 过期时间
|
* 过期时间
|
||||||
*/
|
*/
|
||||||
|
@ -47,12 +47,12 @@ public class OAuth2AccessTokenDO {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Long getUid() {
|
public Integer getUserId() {
|
||||||
return uid;
|
return userId;
|
||||||
}
|
}
|
||||||
|
|
||||||
public OAuth2AccessTokenDO setUid(Long uid) {
|
public OAuth2AccessTokenDO setUserId(Integer userId) {
|
||||||
this.uid = uid;
|
this.userId = userId;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -16,7 +16,7 @@ public class OAuth2RefreshTokenDO {
|
||||||
/**
|
/**
|
||||||
* 用户编号
|
* 用户编号
|
||||||
*/
|
*/
|
||||||
private Long uid;
|
private Integer userId;
|
||||||
/**
|
/**
|
||||||
* 是否有效
|
* 是否有效
|
||||||
*/
|
*/
|
||||||
|
@ -39,12 +39,12 @@ public class OAuth2RefreshTokenDO {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Long getUid() {
|
public Integer getUserId() {
|
||||||
return uid;
|
return userId;
|
||||||
}
|
}
|
||||||
|
|
||||||
public OAuth2RefreshTokenDO setUid(Long uid) {
|
public OAuth2RefreshTokenDO setUserId(Integer userId) {
|
||||||
this.uid = uid;
|
this.userId = userId;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -12,7 +12,7 @@ public class UserDO extends BaseDO {
|
||||||
/**
|
/**
|
||||||
* 用户编号
|
* 用户编号
|
||||||
*/
|
*/
|
||||||
private Long id;
|
private Integer id;
|
||||||
/**
|
/**
|
||||||
* 手机号
|
* 手机号
|
||||||
*/
|
*/
|
||||||
|
@ -25,12 +25,19 @@ public class UserDO extends BaseDO {
|
||||||
* 头像
|
* 头像
|
||||||
*/
|
*/
|
||||||
private String avatar;
|
private String avatar;
|
||||||
|
/**
|
||||||
|
* 账号状态
|
||||||
|
*
|
||||||
|
* 1 - 开启
|
||||||
|
* 2 - 禁用
|
||||||
|
*/
|
||||||
|
private Integer status;
|
||||||
|
|
||||||
public Long getId() {
|
public Integer getId() {
|
||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
|
||||||
public UserDO setId(Long id) {
|
public UserDO setId(Integer id) {
|
||||||
this.id = id;
|
this.id = id;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
@ -62,4 +69,13 @@ public class UserDO extends BaseDO {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Integer getStatus() {
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
public UserDO setStatus(Integer status) {
|
||||||
|
this.status = status;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -10,7 +10,7 @@ public class UserRegisterDO {
|
||||||
/**
|
/**
|
||||||
* 用户编号
|
* 用户编号
|
||||||
*/
|
*/
|
||||||
private Long id;
|
private Integer id;
|
||||||
/**
|
/**
|
||||||
* 创建时间
|
* 创建时间
|
||||||
*/
|
*/
|
||||||
|
@ -21,11 +21,11 @@ public class UserRegisterDO {
|
||||||
// TODO 芋艿 方式,手机注册、qq 等等
|
// TODO 芋艿 方式,手机注册、qq 等等
|
||||||
|
|
||||||
|
|
||||||
public Long getId() {
|
public Integer getId() {
|
||||||
return id;
|
return id;
|
||||||
}
|
}
|
||||||
|
|
||||||
public UserRegisterDO setId(Long id) {
|
public UserRegisterDO setId(Integer id) {
|
||||||
this.id = id;
|
this.id = id;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
|
@ -68,10 +68,10 @@ public class MobileCodeServiceImpl implements MobileCodeService {
|
||||||
* 更新手机验证码已使用
|
* 更新手机验证码已使用
|
||||||
*
|
*
|
||||||
* @param id 验证码编号
|
* @param id 验证码编号
|
||||||
* @param uid 用户编号
|
* @param userId 用户编号
|
||||||
*/
|
*/
|
||||||
public void useMobileCode(Long id, Long uid) {
|
public void useMobileCode(Integer id, Integer userId) {
|
||||||
MobileCodeDO update = new MobileCodeDO().setId(id).setUsed(true).setUsedUid(uid).setUsedTime(new Date());
|
MobileCodeDO update = new MobileCodeDO().setId(id).setUsed(true).setUsedUserId(userId).setUsedTime(new Date());
|
||||||
mobileCodeMapper.update(update);
|
mobileCodeMapper.update(update);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -94,19 +94,32 @@ public class OAuth2ServiceImpl implements OAuth2Service {
|
||||||
return CommonResult.success(OAuth2Convert.INSTANCE.convertToAuthentication(accessTokenDO));
|
return CommonResult.success(OAuth2Convert.INSTANCE.convertToAuthentication(accessTokenDO));
|
||||||
}
|
}
|
||||||
|
|
||||||
private OAuth2AccessTokenDO createOAuth2AccessToken(Long uid, String refreshToken) {
|
/**
|
||||||
|
* 移除用户对应的 Token
|
||||||
|
*
|
||||||
|
* @param userId 管理员编号
|
||||||
|
*/
|
||||||
|
@Transactional
|
||||||
|
public void removeToken(Integer userId) {
|
||||||
|
// 设置 access token 失效
|
||||||
|
oauth2AccessTokenMapper.updateToInvalidByUserId(userId);
|
||||||
|
// 设置 refresh token 失效
|
||||||
|
oauth2RefreshTokenMapper.updateToInvalidByUserId(userId);
|
||||||
|
}
|
||||||
|
|
||||||
|
private OAuth2AccessTokenDO createOAuth2AccessToken(Integer uid, String refreshToken) {
|
||||||
OAuth2AccessTokenDO accessToken = new OAuth2AccessTokenDO().setId(generateAccessToken())
|
OAuth2AccessTokenDO accessToken = new OAuth2AccessTokenDO().setId(generateAccessToken())
|
||||||
.setRefreshToken(refreshToken)
|
.setRefreshToken(refreshToken)
|
||||||
.setUid(uid)
|
.setUserId(uid)
|
||||||
.setExpiresTime(new Date(System.currentTimeMillis() + accessTokenExpireTimeMillis))
|
.setExpiresTime(new Date(System.currentTimeMillis() + accessTokenExpireTimeMillis))
|
||||||
.setValid(true);
|
.setValid(true);
|
||||||
oauth2AccessTokenMapper.insert(accessToken);
|
oauth2AccessTokenMapper.insert(accessToken);
|
||||||
return accessToken;
|
return accessToken;
|
||||||
}
|
}
|
||||||
|
|
||||||
private OAuth2RefreshTokenDO createOAuth2RefreshToken(Long uid) {
|
private OAuth2RefreshTokenDO createOAuth2RefreshToken(Integer uid) {
|
||||||
OAuth2RefreshTokenDO refreshToken = new OAuth2RefreshTokenDO().setId(generateRefreshToken())
|
OAuth2RefreshTokenDO refreshToken = new OAuth2RefreshTokenDO().setId(generateRefreshToken())
|
||||||
.setUid(uid)
|
.setUserId(uid)
|
||||||
.setExpiresTime(new Date(System.currentTimeMillis() + refreshTokenExpireTimeMillis))
|
.setExpiresTime(new Date(System.currentTimeMillis() + refreshTokenExpireTimeMillis))
|
||||||
.setValid(true);
|
.setValid(true);
|
||||||
oauth2RefreshTokenMapper.insert(refreshToken);
|
oauth2RefreshTokenMapper.insert(refreshToken);
|
||||||
|
|
|
@ -1,13 +1,21 @@
|
||||||
package cn.iocoder.mall.user.service;
|
package cn.iocoder.mall.user.service;
|
||||||
|
|
||||||
|
import cn.iocoder.common.framework.constant.SysErrorCodeEnum;
|
||||||
|
import cn.iocoder.common.framework.dataobject.BaseDO;
|
||||||
import cn.iocoder.common.framework.util.ServiceExceptionUtil;
|
import cn.iocoder.common.framework.util.ServiceExceptionUtil;
|
||||||
|
import cn.iocoder.common.framework.util.ValidationUtil;
|
||||||
import cn.iocoder.common.framework.vo.CommonResult;
|
import cn.iocoder.common.framework.vo.CommonResult;
|
||||||
|
import cn.iocoder.mall.user.convert.UserConvert;
|
||||||
import cn.iocoder.mall.user.dao.UserMapper;
|
import cn.iocoder.mall.user.dao.UserMapper;
|
||||||
import cn.iocoder.mall.user.dao.UserRegisterMapper;
|
import cn.iocoder.mall.user.dao.UserRegisterMapper;
|
||||||
import cn.iocoder.mall.user.dataobject.UserDO;
|
import cn.iocoder.mall.user.dataobject.UserDO;
|
||||||
import cn.iocoder.mall.user.dataobject.UserRegisterDO;
|
import cn.iocoder.mall.user.dataobject.UserRegisterDO;
|
||||||
import cn.iocoder.mall.user.service.api.UserService;
|
import cn.iocoder.mall.user.service.api.UserService;
|
||||||
|
import cn.iocoder.mall.user.service.api.bo.UserPageBO;
|
||||||
|
import cn.iocoder.mall.user.service.api.constant.UserConstants;
|
||||||
import cn.iocoder.mall.user.service.api.constant.UserErrorCodeEnum;
|
import cn.iocoder.mall.user.service.api.constant.UserErrorCodeEnum;
|
||||||
|
import cn.iocoder.mall.user.service.api.dto.UserPageDTO;
|
||||||
|
import cn.iocoder.mall.user.service.api.dto.UserUpdateDTO;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
|
@ -25,7 +33,7 @@ public class UserServiceImpl implements UserService {
|
||||||
@Autowired
|
@Autowired
|
||||||
private UserRegisterMapper userRegisterMapper;
|
private UserRegisterMapper userRegisterMapper;
|
||||||
@Autowired
|
@Autowired
|
||||||
private MobileCodeServiceImpl mobileCodeService;
|
private OAuth2ServiceImpl oAuth2Service;
|
||||||
|
|
||||||
public UserDO getUser(String mobile) {
|
public UserDO getUser(String mobile) {
|
||||||
return userMapper.selectByMobile(mobile);
|
return userMapper.selectByMobile(mobile);
|
||||||
|
@ -33,14 +41,16 @@ public class UserServiceImpl implements UserService {
|
||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
public CommonResult<UserDO> createUser(String mobile) {
|
public CommonResult<UserDO> createUser(String mobile) {
|
||||||
// TODO 芋艿,校验手机格式
|
if (!ValidationUtil.isMobile(mobile)) {
|
||||||
|
return CommonResult.error(SysErrorCodeEnum.VALIDATION_REQUEST_PARAM_ERROR.getCode(), "手机格式不正确"); // TODO 有点搓
|
||||||
|
}
|
||||||
// 校验用户是否已经存在
|
// 校验用户是否已经存在
|
||||||
if (getUser(mobile) != null) {
|
if (getUser(mobile) != null) {
|
||||||
return ServiceExceptionUtil.error(UserErrorCodeEnum.USER_MOBILE_ALREADY_REGISTERED.getCode());
|
return ServiceExceptionUtil.error(UserErrorCodeEnum.USER_MOBILE_ALREADY_REGISTERED.getCode());
|
||||||
}
|
}
|
||||||
// 创建用户
|
// 创建用户
|
||||||
UserDO userDO = new UserDO().setMobile(mobile);
|
UserDO userDO = new UserDO().setMobile(mobile).setStatus(UserConstants.STATUS_ENABLE);
|
||||||
userDO.setCreateTime(new Date());
|
userDO.setCreateTime(new Date()).setDeleted(BaseDO.DELETED_NO);
|
||||||
userMapper.insert(userDO);
|
userMapper.insert(userDO);
|
||||||
// 插入注册信息
|
// 插入注册信息
|
||||||
createUserRegister(userDO);
|
createUserRegister(userDO);
|
||||||
|
@ -54,4 +64,81 @@ public class UserServiceImpl implements UserService {
|
||||||
userRegisterMapper.insert(userRegisterDO);
|
userRegisterMapper.insert(userRegisterDO);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CommonResult<UserPageBO> getUserPage(UserPageDTO userPageDTO) {
|
||||||
|
UserPageBO userPageBO = new UserPageBO();
|
||||||
|
// 查询分页数据
|
||||||
|
int offset = userPageDTO.getPageNo() * userPageDTO.getPageSize();
|
||||||
|
userPageBO.setUsers(UserConvert.INSTANCE.convert(userMapper.selectListByNicknameLike(userPageDTO.getNickname(),
|
||||||
|
offset, userPageDTO.getPageSize())));
|
||||||
|
// 查询分页总数
|
||||||
|
userPageBO.setCount(userMapper.selectCountByNicknameLike(userPageDTO.getNickname()));
|
||||||
|
return CommonResult.success(userPageBO);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CommonResult<Boolean> updateUser(UserUpdateDTO userUpdateDTO) {
|
||||||
|
// 校验用户存在
|
||||||
|
if (userMapper.selectById(userUpdateDTO.getId()) == null) {
|
||||||
|
return ServiceExceptionUtil.error(UserErrorCodeEnum.USER_NOT_EXISTS.getCode());
|
||||||
|
}
|
||||||
|
// 更新用户
|
||||||
|
UserDO updateUser = UserConvert.INSTANCE.convert(userUpdateDTO);
|
||||||
|
userMapper.update(updateUser);
|
||||||
|
// 返回成功
|
||||||
|
return CommonResult.success(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CommonResult<Boolean> updateUserStatus(Integer userId, Integer status) {
|
||||||
|
// 校验参数
|
||||||
|
if (!isValidStatus(status)) {
|
||||||
|
return CommonResult.error(SysErrorCodeEnum.VALIDATION_REQUEST_PARAM_ERROR.getCode(), "变更状态必须是开启(1)或关闭(2)"); // TODO 有点搓
|
||||||
|
}
|
||||||
|
// 校验用户存在
|
||||||
|
UserDO user = userMapper.selectById(userId);
|
||||||
|
if (user == null) {
|
||||||
|
return ServiceExceptionUtil.error(UserErrorCodeEnum.USER_NOT_EXISTS.getCode());
|
||||||
|
}
|
||||||
|
// 如果状态相同,则返回错误
|
||||||
|
if (status.equals(user.getStatus())) {
|
||||||
|
return ServiceExceptionUtil.error(UserErrorCodeEnum.USER_STATUS_EQUALS.getCode());
|
||||||
|
}
|
||||||
|
// 更新管理员状态
|
||||||
|
UserDO updateUser = new UserDO().setId(userId).setStatus(status);
|
||||||
|
userMapper.update(updateUser);
|
||||||
|
// 如果是关闭管理员,则标记 token 失效。否则,管理员还可以继续蹦跶
|
||||||
|
if (UserConstants.STATUS_DISABLE.equals(status)) {
|
||||||
|
oAuth2Service.removeToken(userId);
|
||||||
|
}
|
||||||
|
// 返回成功
|
||||||
|
return CommonResult.success(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CommonResult<Boolean> updateUserMobile(Integer userId, String mobile) {
|
||||||
|
if (!ValidationUtil.isMobile(mobile)) {
|
||||||
|
return CommonResult.error(SysErrorCodeEnum.VALIDATION_REQUEST_PARAM_ERROR.getCode(), "手机格式不正确"); // TODO 有点搓
|
||||||
|
}
|
||||||
|
// 校验用户存在
|
||||||
|
UserDO user = userMapper.selectById(userId);
|
||||||
|
if (user == null) {
|
||||||
|
return ServiceExceptionUtil.error(UserErrorCodeEnum.USER_NOT_EXISTS.getCode());
|
||||||
|
}
|
||||||
|
// 如果状态相同,则返回错误
|
||||||
|
if (mobile.equals(user.getMobile())) {
|
||||||
|
return ServiceExceptionUtil.error(UserErrorCodeEnum.USER_MOBILE_EQUALS.getCode());
|
||||||
|
}
|
||||||
|
// 更新管理员状态
|
||||||
|
UserDO updateUser = new UserDO().setId(userId).setMobile(mobile);
|
||||||
|
userMapper.update(updateUser);
|
||||||
|
// 返回成功
|
||||||
|
return CommonResult.success(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean isValidStatus(Integer status) {
|
||||||
|
return UserConstants.STATUS_ENABLE.equals(status)
|
||||||
|
|| UserConstants.STATUS_DISABLE.equals(status);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -1,14 +1,16 @@
|
||||||
spring:
|
spring:
|
||||||
# datasource
|
# datasource
|
||||||
datasource:
|
datasource:
|
||||||
url: jdbc:mysql://127.0.0.1:33061/mall_user?useSSL=false
|
url: jdbc:mysql://180.167.213.26:13306/mall_user?useSSL=false&useUnicode=true&characterEncoding=UTF-8
|
||||||
driver-class-name: com.mysql.jdbc.Driver
|
driver-class-name: com.mysql.jdbc.Driver
|
||||||
username: root
|
username: root
|
||||||
password: 123456
|
password: ${MALL_MYSQL_PASSWORD}
|
||||||
|
|
||||||
# server
|
# server
|
||||||
server:
|
server:
|
||||||
port: 8082
|
port: 18082
|
||||||
|
servlet:
|
||||||
|
context-path: /user-api/
|
||||||
|
|
||||||
# mybatis
|
# mybatis
|
||||||
mybatis:
|
mybatis:
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
used_uid, used_time, create_time
|
used_uid, used_time, create_time
|
||||||
) VALUES (
|
) VALUES (
|
||||||
#{id}, #{mobile}, #{code}, #{todayIndex}, #{used},
|
#{id}, #{mobile}, #{code}, #{todayIndex}, #{used},
|
||||||
#{usedUid}, #{usedTime}, #{createTime}
|
#{usedUserId}, #{usedTime}, #{createTime}
|
||||||
)
|
)
|
||||||
</insert>
|
</insert>
|
||||||
|
|
||||||
|
@ -16,7 +16,7 @@
|
||||||
UPDATE mobile_code
|
UPDATE mobile_code
|
||||||
<set>
|
<set>
|
||||||
<if test="used != null"> used = #{used}, </if>
|
<if test="used != null"> used = #{used}, </if>
|
||||||
<if test="usedUid != null"> used_uid = #{usedUid}, </if>
|
<if test="usedUserId != null"> used_uid = #{usedUserId}, </if>
|
||||||
<if test="usedTime != null"> used_time = #{usedTime}, </if>
|
<if test="usedTime != null"> used_time = #{usedTime}, </if>
|
||||||
</set>
|
</set>
|
||||||
WHERE id = #{id}
|
WHERE id = #{id}
|
||||||
|
|
|
@ -4,10 +4,10 @@
|
||||||
|
|
||||||
<insert id="insert" parameterType="OAuth2AccessTokenDO">
|
<insert id="insert" parameterType="OAuth2AccessTokenDO">
|
||||||
INSERT INTO oauth2_access_token (
|
INSERT INTO oauth2_access_token (
|
||||||
id, refresh_token, adminId, valid, expires_time,
|
id, refresh_token, user_id, valid, expires_time,
|
||||||
create_time
|
create_time
|
||||||
) VALUES (
|
) VALUES (
|
||||||
#{id}, #{refreshToken}, #{adminId}, #{valid}, #{expiresTime},
|
#{id}, #{refreshToken}, #{userId}, #{valid}, #{expiresTime},
|
||||||
#{createTime}
|
#{createTime}
|
||||||
)
|
)
|
||||||
</insert>
|
</insert>
|
||||||
|
@ -19,4 +19,11 @@
|
||||||
WHERE id = #{id}
|
WHERE id = #{id}
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
<update id="updateToInvalidByUserId" parameterType="Integer">
|
||||||
|
UPDATE oauth2_access_token
|
||||||
|
SET valid = 0
|
||||||
|
WHERE user_id = #{userId}
|
||||||
|
AND valid = 1
|
||||||
|
</update>
|
||||||
|
|
||||||
</mapper>
|
</mapper>
|
|
@ -4,10 +4,17 @@
|
||||||
|
|
||||||
<insert id="insert" parameterType="OAuth2RefreshTokenDO">
|
<insert id="insert" parameterType="OAuth2RefreshTokenDO">
|
||||||
INSERT INTO oauth2_refresh_token (
|
INSERT INTO oauth2_refresh_token (
|
||||||
id, adminId, valid, expires_time, create_time
|
id, user_id, valid, expires_time, create_time
|
||||||
) VALUES (
|
) VALUES (
|
||||||
#{id}, #{adminId}, #{valid}, #{expiresTime}, #{createTime}
|
#{id}, #{userId}, #{valid}, #{expiresTime}, #{createTime}
|
||||||
)
|
)
|
||||||
</insert>
|
</insert>
|
||||||
|
|
||||||
|
<update id="updateToInvalidByUserId" parameterType="Integer">
|
||||||
|
UPDATE oauth2_refresh_token
|
||||||
|
SET valid = 0
|
||||||
|
WHERE user_id = #{userId}
|
||||||
|
AND valid = 1
|
||||||
|
</update>
|
||||||
|
|
||||||
</mapper>
|
</mapper>
|
|
@ -2,19 +2,81 @@
|
||||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||||
<mapper namespace="cn.iocoder.mall.user.dao.UserMapper">
|
<mapper namespace="cn.iocoder.mall.user.dao.UserMapper">
|
||||||
|
|
||||||
|
<sql id="FIELDS">
|
||||||
|
id, mobile, nickname, avatar, status,
|
||||||
|
create_time, deleted
|
||||||
|
</sql>
|
||||||
|
|
||||||
<insert id="insert" parameterType="UserDO" useGeneratedKeys="true" keyProperty="id">
|
<insert id="insert" parameterType="UserDO" useGeneratedKeys="true" keyProperty="id">
|
||||||
INSERT INTO users (
|
INSERT INTO users (
|
||||||
id, mobile, create_time
|
id, mobile, status, create_time, deleted
|
||||||
) VALUES (
|
) VALUES (
|
||||||
#{id}, #{mobile}, #{createTime}
|
#{id}, #{mobile}, #{status} #{createTime}, #{deleted}
|
||||||
)
|
)
|
||||||
</insert>
|
</insert>
|
||||||
|
|
||||||
<select id="selectByMobile" parameterType="String" resultType="UserDO">
|
<update id="update" parameterType="UserDO">
|
||||||
SELECT
|
UPDATE users
|
||||||
id, mobile
|
<set>
|
||||||
FROM users
|
<if test="mobile != null">
|
||||||
WHERE mobile = #{mobile}
|
, mobile = #{mobile}
|
||||||
|
</if>
|
||||||
|
<if test="nickname != null">
|
||||||
|
, nickname = #{nickname}
|
||||||
|
</if>
|
||||||
|
<if test="avatar != null">
|
||||||
|
, avatar = #{avatar}
|
||||||
|
</if>
|
||||||
|
<if test="status != null">
|
||||||
|
, status = #{status}
|
||||||
|
</if>
|
||||||
|
<if test="deleted != null">
|
||||||
|
, deleted = #{deleted}
|
||||||
|
</if>
|
||||||
|
</set>
|
||||||
|
WHERE id = #{id}
|
||||||
|
</update>
|
||||||
|
|
||||||
|
<select id="selectById" parameterType="Integer" resultType="UserDO">
|
||||||
|
SELECT
|
||||||
|
<include refid="FIELDS" />
|
||||||
|
FROM users
|
||||||
|
WHERE id = #{id}
|
||||||
|
AND deleted = 0
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
<select id="selectByMobile" parameterType="String" resultType="UserDO">
|
||||||
|
SELECT
|
||||||
|
<include refid="FIELDS" />
|
||||||
|
FROM users
|
||||||
|
WHERE mobile = #{mobile}
|
||||||
|
AND deleted = 0
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<select id="selectListByNicknameLike" resultType="UserDO">
|
||||||
|
SELECT
|
||||||
|
<include refid="FIELDS" />
|
||||||
|
FROM users
|
||||||
|
<where>
|
||||||
|
<if test="nickname != null">
|
||||||
|
nickname LIKE "%"#{nickname}"%"
|
||||||
|
</if>
|
||||||
|
AND deleted = 0
|
||||||
|
</where>
|
||||||
|
LIMIT #{offset}, #{limit}
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<select id="selectCountByNicknameLike" resultType="Integer">
|
||||||
|
SELECT
|
||||||
|
COUNT(1)
|
||||||
|
FROM users
|
||||||
|
<where>
|
||||||
|
<if test="nickname != null">
|
||||||
|
nickname LIKE "%"#{nickname}"%"
|
||||||
|
</if>
|
||||||
|
AND deleted = 0
|
||||||
|
</where>
|
||||||
|
</select>
|
||||||
|
|
||||||
|
|
||||||
</mapper>
|
</mapper>
|
Loading…
Reference in New Issue