Merge remote-tracking branch 'origin/master'
This commit is contained in:
commit
55e988d299
13
README.md
13
README.md
@ -16,6 +16,17 @@
|
|||||||
> 一起交流,Get 知识。
|
> 一起交流,Get 知识。
|
||||||
|
|
||||||
* 我们迫切希望更多的参与进来,可以加入「交流群」,一起骚聊。
|
* 我们迫切希望更多的参与进来,可以加入「交流群」,一起骚聊。
|
||||||
|
* [《Onemall 电商开源项目 —— 应用分层》](http://www.iocoder.cn/Onemall/Application-layer/?vip&onemall)
|
||||||
|
|
||||||
|
# 近期计划
|
||||||
|
|
||||||
|
近期准备开发如下功能:
|
||||||
|
|
||||||
|
1. 微信 H5 网页登陆
|
||||||
|
2. 订单评价
|
||||||
|
3. 商品品牌
|
||||||
|
4. 短信接入
|
||||||
|
5. 访问日志、错误日志接入
|
||||||
|
|
||||||
# 演示
|
# 演示
|
||||||
|
|
||||||
@ -126,7 +137,7 @@ TODO 此处应有一个架构图的装逼 JPG 图。
|
|||||||
| [Zookeeper](http://zookeeper.apache.org/) | 分布式系统协调 | 3.4.9 作为注册中心 |
|
| [Zookeeper](http://zookeeper.apache.org/) | 分布式系统协调 | 3.4.9 作为注册中心 |
|
||||||
| [XXL-Job](http://www.xuxueli.com/xxl-job/) | 分布式任务调度平台 | 2.0.1 |
|
| [XXL-Job](http://www.xuxueli.com/xxl-job/) | 分布式任务调度平台 | 2.0.1 |
|
||||||
| [springfox-swagger2](https://github.com/springfox/springfox/tree/master/springfox-swagger2) | API 文档 | 2.9.2 |
|
| [springfox-swagger2](https://github.com/springfox/springfox/tree/master/springfox-swagger2) | API 文档 | 2.9.2 |
|
||||||
| [swagger-bootstrap-ui](https://gitee.com/xiaoym/swagger-bootstrap-ui) | API 文档 | 1.9.3 |
|
| [swagger-bootstrap-ui](https://gitee.com/xiaoym/swagger-bootstrap-ui) | Swagger 增强 UI 实现 | 1.9.3 |
|
||||||
|
|
||||||
未来考虑引入
|
未来考虑引入
|
||||||
|
|
||||||
|
@ -32,6 +32,11 @@
|
|||||||
<artifactId>mybatis</artifactId>
|
<artifactId>mybatis</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.baomidou</groupId>
|
||||||
|
<artifactId>mybatis-plus-annotation</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
<!-- RPC 相关 -->
|
<!-- RPC 相关 -->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.apache.dubbo</groupId>
|
<groupId>org.apache.dubbo</groupId>
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
package cn.iocoder.common.framework.dataobject;
|
package cn.iocoder.common.framework.dataobject;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableLogic;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* extends BaseDO 扩展 delete 操作
|
* extends BaseDO 扩展 delete 操作
|
||||||
*
|
*
|
||||||
@ -11,6 +13,7 @@ public class DeletableDO extends BaseDO {
|
|||||||
/**
|
/**
|
||||||
* 是否删除
|
* 是否删除
|
||||||
*/
|
*/
|
||||||
|
@TableLogic
|
||||||
private Integer deleted;
|
private Integer deleted;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -37,7 +37,6 @@
|
|||||||
- [ ] 短信管理
|
- [ ] 短信管理
|
||||||
- [ ] 短信模板
|
- [ ] 短信模板
|
||||||
- [ ] 发送日志
|
- [ ] 发送日志
|
||||||
- [ ] 用户访问日志
|
|
||||||
- [ ] 员工访问日志
|
|
||||||
- [ ] 员工操作日志
|
- [ ] 员工操作日志
|
||||||
|
- [ ] 访问日志
|
||||||
- [ ] 异常日志
|
- [ ] 异常日志
|
||||||
|
5
pom.xml
5
pom.xml
@ -138,6 +138,11 @@
|
|||||||
<artifactId>mybatis-spring-boot-starter</artifactId>
|
<artifactId>mybatis-spring-boot-starter</artifactId>
|
||||||
<version>${mybatis-spring-boot-starter.version}</version>
|
<version>${mybatis-spring-boot-starter.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.baomidou</groupId>
|
||||||
|
<artifactId>mybatis-plus-annotation</artifactId>
|
||||||
|
<version>${mybatis-plus.version}</version>
|
||||||
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>com.baomidou</groupId>
|
<groupId>com.baomidou</groupId>
|
||||||
<artifactId>mybatis-plus-boot-starter</artifactId>
|
<artifactId>mybatis-plus-boot-starter</artifactId>
|
||||||
|
@ -1,24 +1,24 @@
|
|||||||
package cn.iocoder.mall.admin.application.controller.admins;
|
package cn.iocoder.mall.admin.application.controller.admins;
|
||||||
|
|
||||||
|
import cn.iocoder.common.framework.constant.MallConstants;
|
||||||
import cn.iocoder.common.framework.vo.CommonResult;
|
import cn.iocoder.common.framework.vo.CommonResult;
|
||||||
import cn.iocoder.mall.admin.api.AdminService;
|
import cn.iocoder.mall.admin.api.AdminService;
|
||||||
import cn.iocoder.mall.admin.api.ResourceService;
|
import cn.iocoder.mall.admin.api.ResourceService;
|
||||||
import cn.iocoder.mall.admin.api.RoleService;
|
import cn.iocoder.mall.admin.api.RoleService;
|
||||||
import cn.iocoder.mall.admin.api.bo.AdminPageBO;
|
|
||||||
import cn.iocoder.mall.admin.api.bo.ResourceBO;
|
import cn.iocoder.mall.admin.api.bo.ResourceBO;
|
||||||
import cn.iocoder.mall.admin.api.bo.RoleBO;
|
import cn.iocoder.mall.admin.api.bo.RoleBO;
|
||||||
|
import cn.iocoder.mall.admin.api.bo.admin.AdminBO;
|
||||||
|
import cn.iocoder.mall.admin.api.bo.admin.AdminPageBO;
|
||||||
import cn.iocoder.mall.admin.api.constant.ResourceConstants;
|
import cn.iocoder.mall.admin.api.constant.ResourceConstants;
|
||||||
import cn.iocoder.mall.admin.api.dto.AdminAddDTO;
|
import cn.iocoder.mall.admin.api.dto.admin.AdminAddDTO;
|
||||||
import cn.iocoder.mall.admin.api.dto.AdminPageDTO;
|
import cn.iocoder.mall.admin.api.dto.admin.AdminPageDTO;
|
||||||
import cn.iocoder.mall.admin.api.dto.AdminUpdateDTO;
|
import cn.iocoder.mall.admin.api.dto.admin.AdminUpdateDTO;
|
||||||
import cn.iocoder.mall.admin.application.convert.AdminConvert;
|
import cn.iocoder.mall.admin.application.convert.AdminConvert;
|
||||||
import cn.iocoder.mall.admin.application.convert.ResourceConvert;
|
import cn.iocoder.mall.admin.application.convert.ResourceConvert;
|
||||||
import cn.iocoder.mall.admin.application.vo.AdminMenuTreeNodeVO;
|
import cn.iocoder.mall.admin.application.vo.AdminMenuTreeNodeVO;
|
||||||
import cn.iocoder.mall.admin.application.vo.AdminPageVO;
|
import cn.iocoder.mall.admin.application.vo.AdminPageVO;
|
||||||
import cn.iocoder.mall.admin.application.vo.AdminRoleVO;
|
import cn.iocoder.mall.admin.application.vo.AdminRoleVO;
|
||||||
import cn.iocoder.mall.admin.application.vo.AdminVO;
|
|
||||||
import cn.iocoder.mall.admin.sdk.context.AdminSecurityContextHolder;
|
import cn.iocoder.mall.admin.sdk.context.AdminSecurityContextHolder;
|
||||||
import cn.iocoder.common.framework.constant.MallConstants;
|
|
||||||
import io.swagger.annotations.Api;
|
import io.swagger.annotations.Api;
|
||||||
import io.swagger.annotations.ApiImplicitParam;
|
import io.swagger.annotations.ApiImplicitParam;
|
||||||
import io.swagger.annotations.ApiImplicitParams;
|
import io.swagger.annotations.ApiImplicitParams;
|
||||||
@ -29,6 +29,8 @@ import org.springframework.web.bind.annotation.*;
|
|||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
import static cn.iocoder.common.framework.vo.CommonResult.success;
|
||||||
|
|
||||||
@RestController
|
@RestController
|
||||||
@RequestMapping(MallConstants.ROOT_PATH_ADMIN + "/admin")
|
@RequestMapping(MallConstants.ROOT_PATH_ADMIN + "/admin")
|
||||||
@Api("管理员模块")
|
@Api("管理员模块")
|
||||||
@ -70,7 +72,7 @@ public class AdminController {
|
|||||||
.filter(node -> node.getPid().equals(ResourceConstants.PID_ROOT))
|
.filter(node -> node.getPid().equals(ResourceConstants.PID_ROOT))
|
||||||
// .sorted(Comparator.comparing(AdminMenuTreeNodeVO::getSort))
|
// .sorted(Comparator.comparing(AdminMenuTreeNodeVO::getSort))
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
return CommonResult.success(rootNodes);
|
return success(rootNodes);
|
||||||
}
|
}
|
||||||
|
|
||||||
@GetMapping("/url_resource_list")
|
@GetMapping("/url_resource_list")
|
||||||
@ -78,7 +80,7 @@ public class AdminController {
|
|||||||
// @ApiModelProperty(value = "data", example = "['/admin/role/add', '/admin/role/update']") 没效果
|
// @ApiModelProperty(value = "data", example = "['/admin/role/add', '/admin/role/update']") 没效果
|
||||||
public CommonResult<Set<String>> urlResourceList() {
|
public CommonResult<Set<String>> urlResourceList() {
|
||||||
List<ResourceBO> resources = resourceService.getResourcesByTypeAndRoleIds(ResourceConstants.TYPE_URL, AdminSecurityContextHolder.getContext().getRoleIds());
|
List<ResourceBO> resources = resourceService.getResourcesByTypeAndRoleIds(ResourceConstants.TYPE_URL, AdminSecurityContextHolder.getContext().getRoleIds());
|
||||||
return CommonResult.success(resources.stream().map(ResourceBO::getHandler).collect(Collectors.toSet()));
|
return success(resources.stream().map(ResourceBO::getHandler).collect(Collectors.toSet()));
|
||||||
}
|
}
|
||||||
|
|
||||||
// =========== 管理员管理 API ===========
|
// =========== 管理员管理 API ===========
|
||||||
@ -90,25 +92,16 @@ public class AdminController {
|
|||||||
@ApiImplicitParam(name = "pageNo", value = "页码,从 1 开始", example = "1"),
|
@ApiImplicitParam(name = "pageNo", value = "页码,从 1 开始", example = "1"),
|
||||||
@ApiImplicitParam(name = "pageSize", value = "每页条数", required = true, example = "10"),
|
@ApiImplicitParam(name = "pageSize", value = "每页条数", required = true, example = "10"),
|
||||||
})
|
})
|
||||||
public CommonResult<AdminPageVO> page(@RequestParam(value = "nickname", required = false) String nickname,
|
public CommonResult<AdminPageVO> page(AdminPageDTO adminPageDTO) {
|
||||||
@RequestParam(value = "pageNo", defaultValue = "0") Integer pageNo,
|
// CommonResult<AdminPageBO> result = adminService.getAdminPage(new AdminPageDTO().setNickname(nickname).setPageNo(pageNo).setPageSize(pageSize));
|
||||||
@RequestParam(value = "pageSize", defaultValue = "10") Integer pageSize) {
|
CommonResult<AdminPageBO> result = adminService.getAdminPage(adminPageDTO);
|
||||||
CommonResult<AdminPageBO> result = adminService.getAdminPage(new AdminPageDTO().setNickname(nickname).setPageNo(pageNo).setPageSize(pageSize));
|
|
||||||
return AdminConvert.INSTANCE.convert(result);
|
return AdminConvert.INSTANCE.convert(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
@PostMapping("/add")
|
@PostMapping("/add")
|
||||||
@ApiOperation(value = "创建管理员")
|
@ApiOperation(value = "创建管理员")
|
||||||
@ApiImplicitParams({
|
public CommonResult<AdminBO> add(AdminAddDTO adminAddDTO) {
|
||||||
@ApiImplicitParam(name = "username", value = "账号", required = true, example = "15601691300"),
|
return success(adminService.addAdmin(AdminSecurityContextHolder.getContext().getAdminId(), adminAddDTO));
|
||||||
@ApiImplicitParam(name = "nickname", value = "昵称", required = true, example = "小王"),
|
|
||||||
@ApiImplicitParam(name = "password", value = "密码", required = true, example = "buzhidao"),
|
|
||||||
})
|
|
||||||
public CommonResult<AdminVO> add(@RequestParam("username") String username,
|
|
||||||
@RequestParam("nickname") String nickname,
|
|
||||||
@RequestParam("password") String password) {
|
|
||||||
AdminAddDTO adminAddDTO = new AdminAddDTO().setUsername(username).setNickname(nickname).setPassword(password);
|
|
||||||
return AdminConvert.INSTANCE.convert2(adminService.addAdmin(AdminSecurityContextHolder.getContext().getAdminId(), adminAddDTO));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@PostMapping("/update")
|
@PostMapping("/update")
|
||||||
@ -157,7 +150,7 @@ public class AdminController {
|
|||||||
List<AdminRoleVO> result = AdminConvert.INSTANCE.convert(allRoleList);
|
List<AdminRoleVO> result = AdminConvert.INSTANCE.convert(allRoleList);
|
||||||
// 设置每个角色是否赋予给改管理员
|
// 设置每个角色是否赋予给改管理员
|
||||||
result.forEach(adminRoleVO -> adminRoleVO.setAssigned(adminRoleIdSet.contains(adminRoleVO.getId())));
|
result.forEach(adminRoleVO -> adminRoleVO.setAssigned(adminRoleIdSet.contains(adminRoleVO.getId())));
|
||||||
return CommonResult.success(result);
|
return success(result);
|
||||||
}
|
}
|
||||||
|
|
||||||
@PostMapping("/assign_role")
|
@PostMapping("/assign_role")
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
package cn.iocoder.mall.admin.application.convert;
|
package cn.iocoder.mall.admin.application.convert;
|
||||||
|
|
||||||
import cn.iocoder.common.framework.vo.CommonResult;
|
import cn.iocoder.common.framework.vo.CommonResult;
|
||||||
import cn.iocoder.mall.admin.api.bo.AdminBO;
|
import cn.iocoder.mall.admin.api.bo.admin.AdminBO;
|
||||||
import cn.iocoder.mall.admin.api.bo.AdminPageBO;
|
import cn.iocoder.mall.admin.api.bo.admin.AdminPageBO;
|
||||||
import cn.iocoder.mall.admin.api.bo.RoleBO;
|
import cn.iocoder.mall.admin.api.bo.RoleBO;
|
||||||
import cn.iocoder.mall.admin.application.vo.AdminInfoVO;
|
import cn.iocoder.mall.admin.application.vo.AdminInfoVO;
|
||||||
import cn.iocoder.mall.admin.application.vo.AdminPageVO;
|
import cn.iocoder.mall.admin.application.vo.AdminPageVO;
|
||||||
@ -35,4 +35,4 @@ public interface AdminConvert {
|
|||||||
@Mappings({})
|
@Mappings({})
|
||||||
List<AdminRoleVO> convert(List<RoleBO> roleList);
|
List<AdminRoleVO> convert(List<RoleBO> roleList);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -14,12 +14,16 @@ public class AdminVO {
|
|||||||
|
|
||||||
@ApiModelProperty(value = "管理员编号", required = true, example = "1")
|
@ApiModelProperty(value = "管理员编号", required = true, example = "1")
|
||||||
private Integer id;
|
private Integer id;
|
||||||
|
|
||||||
@ApiModelProperty(value = "登陆账号", required = true, example = "15601691300")
|
@ApiModelProperty(value = "登陆账号", required = true, example = "15601691300")
|
||||||
private String username;
|
private String username;
|
||||||
|
|
||||||
@ApiModelProperty(value = "昵称", required = true, example = "小王")
|
@ApiModelProperty(value = "昵称", required = true, example = "小王")
|
||||||
private String nickname;
|
private String nickname;
|
||||||
|
|
||||||
@ApiModelProperty(value = "账号状态", required = true, example = "1")
|
@ApiModelProperty(value = "账号状态", required = true, example = "1")
|
||||||
private Integer status;
|
private Integer status;
|
||||||
|
|
||||||
@ApiModelProperty(value = "创建时间", required = true, example = "时间戳格式")
|
@ApiModelProperty(value = "创建时间", required = true, example = "时间戳格式")
|
||||||
private Date createTime;
|
private Date createTime;
|
||||||
|
|
||||||
|
@ -16,7 +16,3 @@ management:
|
|||||||
|
|
||||||
swagger:
|
swagger:
|
||||||
enable: true # 暂时不去掉
|
enable: true # 暂时不去掉
|
||||||
title: 管理员子系统
|
|
||||||
description: 管理员子系统
|
|
||||||
version: 1.0.0
|
|
||||||
base-package: cn.iocoder.mall.admin.application.controller
|
|
||||||
|
@ -19,4 +19,8 @@ qiniu:
|
|||||||
bucket: onemall
|
bucket: onemall
|
||||||
|
|
||||||
swagger:
|
swagger:
|
||||||
enable: false # 暂时不去掉
|
enable: true # 暂时不去掉
|
||||||
|
title: 管理员子系统
|
||||||
|
description: 管理员子系统
|
||||||
|
version: 1.0.0
|
||||||
|
base-package: cn.iocoder.mall.admin.application.controller
|
||||||
|
@ -19,6 +19,12 @@
|
|||||||
<version>1.0-SNAPSHOT</version>
|
<version>1.0-SNAPSHOT</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<!-- Web 相关 -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>io.springfox</groupId>
|
||||||
|
<artifactId>springfox-swagger2</artifactId>
|
||||||
|
</dependency>
|
||||||
|
|
||||||
<!-- 工具类相关 -->
|
<!-- 工具类相关 -->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.mapstruct</groupId>
|
<groupId>org.mapstruct</groupId>
|
||||||
|
@ -3,11 +3,11 @@ package cn.iocoder.mall.admin.api;
|
|||||||
import cn.iocoder.common.framework.constant.CommonStatusEnum;
|
import cn.iocoder.common.framework.constant.CommonStatusEnum;
|
||||||
import cn.iocoder.common.framework.validator.InEnum;
|
import cn.iocoder.common.framework.validator.InEnum;
|
||||||
import cn.iocoder.common.framework.vo.CommonResult;
|
import cn.iocoder.common.framework.vo.CommonResult;
|
||||||
import cn.iocoder.mall.admin.api.bo.AdminBO;
|
import cn.iocoder.mall.admin.api.bo.admin.AdminBO;
|
||||||
import cn.iocoder.mall.admin.api.bo.AdminPageBO;
|
import cn.iocoder.mall.admin.api.bo.admin.AdminPageBO;
|
||||||
import cn.iocoder.mall.admin.api.dto.AdminAddDTO;
|
import cn.iocoder.mall.admin.api.dto.admin.AdminAddDTO;
|
||||||
import cn.iocoder.mall.admin.api.dto.AdminPageDTO;
|
import cn.iocoder.mall.admin.api.dto.admin.AdminPageDTO;
|
||||||
import cn.iocoder.mall.admin.api.dto.AdminUpdateDTO;
|
import cn.iocoder.mall.admin.api.dto.admin.AdminUpdateDTO;
|
||||||
|
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
@ -18,7 +18,7 @@ public interface AdminService {
|
|||||||
|
|
||||||
CommonResult<AdminPageBO> getAdminPage(AdminPageDTO adminPageDTO);
|
CommonResult<AdminPageBO> getAdminPage(AdminPageDTO adminPageDTO);
|
||||||
|
|
||||||
CommonResult<AdminBO> addAdmin(Integer adminId, AdminAddDTO adminAddDTO);
|
AdminBO addAdmin(Integer adminId, AdminAddDTO adminAddDTO);
|
||||||
|
|
||||||
CommonResult<Boolean> updateAdmin(Integer adminId, AdminUpdateDTO adminUpdateDTO);
|
CommonResult<Boolean> updateAdmin(Integer adminId, AdminUpdateDTO adminUpdateDTO);
|
||||||
|
|
||||||
|
@ -1,37 +0,0 @@
|
|||||||
package cn.iocoder.mall.admin.api.bo;
|
|
||||||
|
|
||||||
import lombok.Data;
|
|
||||||
import lombok.experimental.Accessors;
|
|
||||||
|
|
||||||
import java.io.Serializable;
|
|
||||||
import java.util.Date;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 管理员 BO
|
|
||||||
*/
|
|
||||||
@Data
|
|
||||||
@Accessors(chain = true)
|
|
||||||
public class AdminBO implements Serializable {
|
|
||||||
|
|
||||||
/**
|
|
||||||
* 管理员编号
|
|
||||||
*/
|
|
||||||
private Integer id;
|
|
||||||
/**
|
|
||||||
* 登陆账号
|
|
||||||
*/
|
|
||||||
private String username;
|
|
||||||
/**
|
|
||||||
* 昵称
|
|
||||||
*/
|
|
||||||
private String nickname;
|
|
||||||
/**
|
|
||||||
* 账号状态
|
|
||||||
*/
|
|
||||||
private Integer status;
|
|
||||||
/**
|
|
||||||
* 创建时间
|
|
||||||
*/
|
|
||||||
private Date createTime;
|
|
||||||
|
|
||||||
}
|
|
@ -0,0 +1,31 @@
|
|||||||
|
package cn.iocoder.mall.admin.api.bo.admin;
|
||||||
|
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.experimental.Accessors;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
@ApiModel("管理员 BO")
|
||||||
|
@Data
|
||||||
|
@Accessors(chain = true)
|
||||||
|
public class AdminBO implements Serializable {
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "管理员编号", required = true, example = "1")
|
||||||
|
private Integer id;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "登陆账号", required = true, example = "15601691300")
|
||||||
|
private String username;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "昵称", required = true, example = "小王")
|
||||||
|
private String nickname;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "账号状态", required = true, example = "1", dataType= "CommonStatusEnum")
|
||||||
|
private Integer status;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "创建时间", required = true, example = "时间戳格式")
|
||||||
|
private Date createTime;
|
||||||
|
|
||||||
|
}
|
@ -1,4 +1,4 @@
|
|||||||
package cn.iocoder.mall.admin.api.bo;
|
package cn.iocoder.mall.admin.api.bo.admin;
|
||||||
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.experimental.Accessors;
|
import lombok.experimental.Accessors;
|
@ -1,5 +1,7 @@
|
|||||||
package cn.iocoder.mall.admin.api.dto;
|
package cn.iocoder.mall.admin.api.dto.admin;
|
||||||
|
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.experimental.Accessors;
|
import lombok.experimental.Accessors;
|
||||||
import org.hibernate.validator.constraints.Length;
|
import org.hibernate.validator.constraints.Length;
|
||||||
@ -8,29 +10,23 @@ import javax.validation.constraints.NotEmpty;
|
|||||||
import javax.validation.constraints.Pattern;
|
import javax.validation.constraints.Pattern;
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
|
|
||||||
/**
|
@ApiModel("管理员添加 DTO")
|
||||||
* 管理员添加 DTO
|
|
||||||
*/
|
|
||||||
@Data
|
@Data
|
||||||
@Accessors(chain = true)
|
@Accessors(chain = true)
|
||||||
public class AdminAddDTO implements Serializable {
|
public class AdminAddDTO implements Serializable {
|
||||||
|
|
||||||
/**
|
@ApiModelProperty(value = "登陆账号", required = true, example = "15601691300")
|
||||||
* 登陆账号
|
|
||||||
*/
|
|
||||||
@NotEmpty(message = "登陆账号不能为空")
|
@NotEmpty(message = "登陆账号不能为空")
|
||||||
@Length(min = 6, max = 16, message = "账号长度为 6-16 位")
|
@Length(min = 6, max = 16, message = "账号长度为 6-16 位")
|
||||||
@Pattern(regexp = "^[A-Za-z0-9]+$", message = "账号格式为数字以及字母")
|
@Pattern(regexp = "^[A-Za-z0-9]+$", message = "账号格式为数字以及字母")
|
||||||
private String username;
|
private String username;
|
||||||
/**
|
|
||||||
* 昵称
|
@ApiModelProperty(value = "昵称", required = true, example = "小王")
|
||||||
*/
|
|
||||||
@NotEmpty(message = "昵称不能为空")
|
@NotEmpty(message = "昵称不能为空")
|
||||||
@Length(max = 10, message = "昵称长度最大为 10 位")
|
@Length(max = 10, message = "昵称长度最大为 10 位")
|
||||||
private String nickname;
|
private String nickname;
|
||||||
/**
|
|
||||||
* 密码
|
@ApiModelProperty(value = "密码", required = true, example = "buzhidao")
|
||||||
*/
|
|
||||||
@NotEmpty(message = "密码不能为空")
|
@NotEmpty(message = "密码不能为空")
|
||||||
@Length(min = 6, max = 16, message = "密码长度为 6-16 位")
|
@Length(min = 6, max = 16, message = "密码长度为 6-16 位")
|
||||||
private String password;
|
private String password;
|
@ -1,4 +1,4 @@
|
|||||||
package cn.iocoder.mall.admin.api.dto;
|
package cn.iocoder.mall.admin.api.dto.admin;
|
||||||
|
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.experimental.Accessors;
|
import lombok.experimental.Accessors;
|
@ -1,5 +1,7 @@
|
|||||||
package cn.iocoder.mall.admin.api.dto;
|
package cn.iocoder.mall.admin.api.dto.admin;
|
||||||
|
|
||||||
|
import io.swagger.annotations.ApiImplicitParam;
|
||||||
|
import io.swagger.annotations.ApiImplicitParams;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.experimental.Accessors;
|
import lombok.experimental.Accessors;
|
||||||
import org.hibernate.validator.constraints.Length;
|
import org.hibernate.validator.constraints.Length;
|
||||||
@ -14,6 +16,12 @@ import java.io.Serializable;
|
|||||||
*/
|
*/
|
||||||
@Data
|
@Data
|
||||||
@Accessors(chain = true)
|
@Accessors(chain = true)
|
||||||
|
@ApiImplicitParams({
|
||||||
|
@ApiImplicitParam(name = "id", value = "管理员编号", required = true, example = "1"),
|
||||||
|
@ApiImplicitParam(name = "username", value = "账号", required = true, example = "15601691300"),
|
||||||
|
@ApiImplicitParam(name = "nickname", value = "昵称", required = true, example = "小王"),
|
||||||
|
@ApiImplicitParam(name = "password", value = "密码", example = "buzhidao"),
|
||||||
|
})
|
||||||
public class AdminUpdateDTO implements Serializable {
|
public class AdminUpdateDTO implements Serializable {
|
||||||
|
|
||||||
/**
|
/**
|
@ -1,6 +1,9 @@
|
|||||||
package cn.iocoder.mall.admin.config;
|
package cn.iocoder.mall.admin.config;
|
||||||
|
|
||||||
|
import com.baomidou.mybatisplus.core.injector.DefaultSqlInjector;
|
||||||
|
import com.baomidou.mybatisplus.core.injector.ISqlInjector;
|
||||||
import org.mybatis.spring.annotation.MapperScan;
|
import org.mybatis.spring.annotation.MapperScan;
|
||||||
|
import org.springframework.context.annotation.Bean;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
import org.springframework.transaction.annotation.EnableTransactionManagement;
|
import org.springframework.transaction.annotation.EnableTransactionManagement;
|
||||||
|
|
||||||
@ -11,4 +14,9 @@ public class DatabaseConfiguration {
|
|||||||
|
|
||||||
// 数据库连接池 Druid
|
// 数据库连接池 Druid
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
public ISqlInjector sqlInjector() {
|
||||||
|
return new DefaultSqlInjector(); // MyBatis Plus 逻辑删除
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,8 +1,8 @@
|
|||||||
package cn.iocoder.mall.admin.convert;
|
package cn.iocoder.mall.admin.convert;
|
||||||
|
|
||||||
import cn.iocoder.mall.admin.api.bo.AdminBO;
|
import cn.iocoder.mall.admin.api.bo.admin.AdminBO;
|
||||||
import cn.iocoder.mall.admin.api.dto.AdminAddDTO;
|
import cn.iocoder.mall.admin.api.dto.admin.AdminAddDTO;
|
||||||
import cn.iocoder.mall.admin.api.dto.AdminUpdateDTO;
|
import cn.iocoder.mall.admin.api.dto.admin.AdminUpdateDTO;
|
||||||
import cn.iocoder.mall.admin.dataobject.AdminDO;
|
import cn.iocoder.mall.admin.dataobject.AdminDO;
|
||||||
import org.mapstruct.Mapper;
|
import org.mapstruct.Mapper;
|
||||||
import org.mapstruct.Mappings;
|
import org.mapstruct.Mappings;
|
||||||
@ -27,4 +27,4 @@ public interface AdminConvert {
|
|||||||
@Mappings({})
|
@Mappings({})
|
||||||
List<AdminBO> convert(List<AdminDO> adminBOs);
|
List<AdminBO> convert(List<AdminDO> adminBOs);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,17 +1,19 @@
|
|||||||
package cn.iocoder.mall.admin.dao;
|
package cn.iocoder.mall.admin.dao;
|
||||||
|
|
||||||
import cn.iocoder.mall.admin.dataobject.AdminDO;
|
import cn.iocoder.mall.admin.dataobject.AdminDO;
|
||||||
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||||
|
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||||
import org.apache.ibatis.annotations.Param;
|
import org.apache.ibatis.annotations.Param;
|
||||||
import org.springframework.stereotype.Repository;
|
import org.springframework.stereotype.Repository;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@Repository
|
@Repository
|
||||||
public interface AdminMapper {
|
public interface AdminMapper extends BaseMapper<AdminDO> {
|
||||||
|
|
||||||
AdminDO selectById(@Param("id") Integer id);
|
default AdminDO selectByUsername(@Param("username") String username) {
|
||||||
|
return selectOne(new QueryWrapper<AdminDO>().eq("username", username));
|
||||||
AdminDO selectByUsername(@Param("username") String username);
|
}
|
||||||
|
|
||||||
List<AdminDO> selectListByNicknameLike(@Param("nickname") String nickname,
|
List<AdminDO> selectListByNicknameLike(@Param("nickname") String nickname,
|
||||||
@Param("offset") Integer offset,
|
@Param("offset") Integer offset,
|
||||||
@ -19,8 +21,6 @@ public interface AdminMapper {
|
|||||||
|
|
||||||
Integer selectCountByNicknameLike(@Param("nickname") String nickname);
|
Integer selectCountByNicknameLike(@Param("nickname") String nickname);
|
||||||
|
|
||||||
void insert(AdminDO admin);
|
|
||||||
|
|
||||||
int update(AdminDO admin);
|
int update(AdminDO admin);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,12 +1,14 @@
|
|||||||
package cn.iocoder.mall.admin.dataobject;
|
package cn.iocoder.mall.admin.dataobject;
|
||||||
|
|
||||||
import cn.iocoder.common.framework.dataobject.DeletableDO;
|
import cn.iocoder.common.framework.dataobject.DeletableDO;
|
||||||
|
import com.baomidou.mybatisplus.annotation.TableName;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.experimental.Accessors;
|
import lombok.experimental.Accessors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 管理员实体
|
* 管理员实体
|
||||||
*/
|
*/
|
||||||
|
@TableName(value = "admin")
|
||||||
@Data
|
@Data
|
||||||
@Accessors(chain = true)
|
@Accessors(chain = true)
|
||||||
public class AdminDO extends DeletableDO {
|
public class AdminDO extends DeletableDO {
|
||||||
|
@ -5,13 +5,13 @@ import cn.iocoder.common.framework.constant.DeletedStatusEnum;
|
|||||||
import cn.iocoder.common.framework.util.ServiceExceptionUtil;
|
import cn.iocoder.common.framework.util.ServiceExceptionUtil;
|
||||||
import cn.iocoder.common.framework.vo.CommonResult;
|
import cn.iocoder.common.framework.vo.CommonResult;
|
||||||
import cn.iocoder.mall.admin.api.AdminService;
|
import cn.iocoder.mall.admin.api.AdminService;
|
||||||
import cn.iocoder.mall.admin.api.bo.AdminBO;
|
import cn.iocoder.mall.admin.api.bo.admin.AdminBO;
|
||||||
import cn.iocoder.mall.admin.api.bo.AdminPageBO;
|
import cn.iocoder.mall.admin.api.bo.admin.AdminPageBO;
|
||||||
import cn.iocoder.mall.admin.api.constant.AdminConstants;
|
import cn.iocoder.mall.admin.api.constant.AdminConstants;
|
||||||
import cn.iocoder.mall.admin.api.constant.AdminErrorCodeEnum;
|
import cn.iocoder.mall.admin.api.constant.AdminErrorCodeEnum;
|
||||||
import cn.iocoder.mall.admin.api.dto.AdminAddDTO;
|
import cn.iocoder.mall.admin.api.dto.admin.AdminAddDTO;
|
||||||
import cn.iocoder.mall.admin.api.dto.AdminPageDTO;
|
import cn.iocoder.mall.admin.api.dto.admin.AdminPageDTO;
|
||||||
import cn.iocoder.mall.admin.api.dto.AdminUpdateDTO;
|
import cn.iocoder.mall.admin.api.dto.admin.AdminUpdateDTO;
|
||||||
import cn.iocoder.mall.admin.convert.AdminConvert;
|
import cn.iocoder.mall.admin.convert.AdminConvert;
|
||||||
import cn.iocoder.mall.admin.dao.AdminMapper;
|
import cn.iocoder.mall.admin.dao.AdminMapper;
|
||||||
import cn.iocoder.mall.admin.dao.AdminRoleMapper;
|
import cn.iocoder.mall.admin.dao.AdminRoleMapper;
|
||||||
@ -79,10 +79,10 @@ public class AdminServiceImpl implements AdminService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CommonResult<AdminBO> addAdmin(Integer adminId, AdminAddDTO adminAddDTO) {
|
public AdminBO addAdmin(Integer adminId, AdminAddDTO adminAddDTO) {
|
||||||
// 校验账号唯一
|
// 校验账号唯一
|
||||||
if (adminMapper.selectByUsername(adminAddDTO.getUsername()) != null) {
|
if (adminMapper.selectByUsername(adminAddDTO.getUsername()) != null) {
|
||||||
return ServiceExceptionUtil.error(AdminErrorCodeEnum.ADMIN_USERNAME_EXISTS.getCode());
|
throw ServiceExceptionUtil.exception(AdminErrorCodeEnum.ADMIN_USERNAME_EXISTS.getCode());
|
||||||
}
|
}
|
||||||
// 保存到数据库
|
// 保存到数据库
|
||||||
AdminDO admin = AdminConvert.INSTANCE.convert(adminAddDTO)
|
AdminDO admin = AdminConvert.INSTANCE.convert(adminAddDTO)
|
||||||
@ -93,7 +93,7 @@ public class AdminServiceImpl implements AdminService {
|
|||||||
adminMapper.insert(admin);
|
adminMapper.insert(admin);
|
||||||
// TODO 插入操作日志
|
// TODO 插入操作日志
|
||||||
// 返回成功
|
// 返回成功
|
||||||
return CommonResult.success(AdminConvert.INSTANCE.convert(admin));
|
return AdminConvert.INSTANCE.convert(admin);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -19,6 +19,8 @@ mybatis-plus:
|
|||||||
global-config:
|
global-config:
|
||||||
db-config:
|
db-config:
|
||||||
id-type: auto
|
id-type: auto
|
||||||
|
logic-delete-value: 1 # 逻辑已删除值(默认为 1)
|
||||||
|
logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)
|
||||||
mapper-locations: classpath*:mapper/*.xml
|
mapper-locations: classpath*:mapper/*.xml
|
||||||
type-aliases-package: cn.iocoder.mall.admin.dataobject
|
type-aliases-package: cn.iocoder.mall.admin.dataobject
|
||||||
|
|
||||||
|
@ -7,14 +7,6 @@
|
|||||||
create_time
|
create_time
|
||||||
</sql>
|
</sql>
|
||||||
|
|
||||||
<select id="selectByUsername" parameterType="String" resultType="AdminDO">
|
|
||||||
SELECT
|
|
||||||
<include refid="FIELDS" />
|
|
||||||
FROM admin
|
|
||||||
WHERE username = #{username}
|
|
||||||
AND deleted = 0
|
|
||||||
</select>
|
|
||||||
|
|
||||||
<select id="selectListByNicknameLike" resultType="AdminDO">
|
<select id="selectListByNicknameLike" resultType="AdminDO">
|
||||||
SELECT
|
SELECT
|
||||||
<include refid="FIELDS" />
|
<include refid="FIELDS" />
|
||||||
@ -40,16 +32,6 @@
|
|||||||
</where>
|
</where>
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<insert id="insert" parameterType="AdminDO" useGeneratedKeys="true" keyColumn="id" keyProperty="id">
|
|
||||||
INSERT INTO admin (
|
|
||||||
username, nickname, password, status,
|
|
||||||
create_time, deleted
|
|
||||||
) VALUES (
|
|
||||||
#{username}, #{nickname}, #{password}, #{status},
|
|
||||||
#{createTime}, #{deleted}
|
|
||||||
)
|
|
||||||
</insert>
|
|
||||||
|
|
||||||
<select id="selectById" parameterType="Integer" resultType="AdminDO">
|
<select id="selectById" parameterType="Integer" resultType="AdminDO">
|
||||||
SELECT
|
SELECT
|
||||||
<include refid="FIELDS" />
|
<include refid="FIELDS" />
|
||||||
|
Loading…
Reference in New Issue
Block a user