From ad2c2d53d756c8c9caa6e043c1868cfdf9736b9d Mon Sep 17 00:00:00 2001
From: xiaoyong931011 <15274802129@163.com>
Date: Thu, 26 May 2022 17:52:09 +0800
Subject: [PATCH] 20220526

---
 src/main/java/com/xcong/farmer/cms/modules/system/service/IMenuService.java           |   21 
 src/main/resources/mapper/RoleMenuMapper.xml                                          |   13 
 src/main/java/com/xcong/farmer/cms/modules/system/dto/AdminAddRoleDto.java            |   20 
 src/main/java/com/xcong/farmer/cms/modules/system/mapper/RoleMapper.java              |   14 
 src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/UserServiceImpl.java   |  187 +++++++
 src/main/java/com/xcong/farmer/cms/modules/system/vo/AdminMenuVo.java                 |   40 +
 src/main/java/com/xcong/farmer/cms/common/response/Result.java                        |    9 
 src/main/java/com/xcong/farmer/cms/modules/system/mapper/MenuMapper.java              |   14 
 src/main/java/com/xcong/farmer/cms/modules/system/mapper/UserMapper.java              |   14 
 src/main/resources/mapper/UserMapper.xml                                              |   20 
 src/main/java/com/xcong/farmer/cms/modules/system/dto/AdminAddUserDto.java            |   28 +
 src/main/java/com/xcong/farmer/cms/modules/system/vo/AdminUserVo.java                 |   38 +
 src/main/java/com/xcong/farmer/cms/modules/system/entity/MenuEntity.java              |   35 +
 src/main/java/com/xcong/farmer/cms/modules/system/dto/AdminUserDto.java               |   20 
 src/main/java/com/xcong/farmer/cms/modules/system/service/IUserService.java           |   27 +
 src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/RoleServiceImpl.java   |  169 ++++++
 src/main/java/com/xcong/farmer/cms/modules/system/service/IRoleService.java           |   21 
 src/main/java/com/xcong/farmer/cms/common/system/base/BaseEntity.java                 |    2 
 src/main/java/com/xcong/farmer/cms/modules/system/vo/AdminSeeMenuInfoVo.java          |   28 +
 src/main/java/com/xcong/farmer/cms/modules/system/dto/AdminRoleDto.java               |   19 
 src/main/java/com/xcong/farmer/cms/modules/system/dto/AdminUpdateUserDto.java         |   32 +
 src/main/java/com/xcong/farmer/cms/modules/system/vo/AdminSeeUserInfoVo.java          |   32 +
 src/main/java/com/xcong/farmer/cms/modules/system/Controller/AdminRoleController.java |   60 ++
 src/main/resources/mapper/RoleMapper.xml                                              |   20 
 src/main/java/com/xcong/farmer/cms/modules/system/dto/AdminUpdateMenuDto.java         |   29 +
 src/main/java/com/xcong/farmer/cms/modules/system/dto/AdminUpdateRoleDto.java         |   23 
 src/main/java/com/xcong/farmer/cms/modules/system/Controller/AdminUserController.java |   82 +++
 src/main/java/com/xcong/farmer/cms/modules/system/entity/RoleMenuEntity.java          |   16 
 src/main/java/com/xcong/farmer/cms/modules/system/entity/UserRoleEntity.java          |   16 
 src/main/resources/mapper/UserRoleMapper.xml                                          |    5 
 src/main/java/com/xcong/farmer/cms/FarmerCmsApplication.java                          |    1 
 src/main/java/com/xcong/farmer/cms/modules/system/mapper/UserRoleMapper.java          |    7 
 src/main/java/com/xcong/farmer/cms/modules/system/dto/AdminAddMenuDto.java            |   26 +
 src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/MenuServiceImpl.java   |  171 ++++++
 src/main/java/com/xcong/farmer/cms/modules/system/vo/AdminSeeRoleInfoVo.java          |   25 +
 src/main/java/com/xcong/farmer/cms/modules/system/Controller/AdminMenuController.java |   60 ++
 src/main/java/com/xcong/farmer/cms/modules/system/vo/AdminMenuInfoVo.java             |   17 
 src/main/java/com/xcong/farmer/cms/modules/system/vo/AdminRoleVo.java                 |   26 +
 src/main/resources/mapper/MenuMapper.xml                                              |   20 
 src/main/java/com/xcong/farmer/cms/modules/system/entity/UserEntity.java              |   43 +
 src/main/java/com/xcong/farmer/cms/modules/system/entity/RoleEntity.java              |   17 
 src/main/resources/application.yml                                                    |    2 
 src/main/java/com/xcong/farmer/cms/modules/system/dto/AdminMenuDto.java               |   17 
 src/main/java/com/xcong/farmer/cms/modules/system/mapper/RoleMenuMapper.java          |   14 
 44 files changed, 1,498 insertions(+), 2 deletions(-)

diff --git a/src/main/java/com/xcong/farmer/cms/FarmerCmsApplication.java b/src/main/java/com/xcong/farmer/cms/FarmerCmsApplication.java
index 2f6a03e..1ee1f2f 100644
--- a/src/main/java/com/xcong/farmer/cms/FarmerCmsApplication.java
+++ b/src/main/java/com/xcong/farmer/cms/FarmerCmsApplication.java
@@ -13,6 +13,7 @@
  */
 @EnableSwagger2
 @SpringBootApplication
+@MapperScan("com.xcong.farmer.cms.modules.*.mapper")
 @MapperScan("com.xcong.farmer.cms.modules.*.dao")
 public class FarmerCmsApplication implements CommandLineRunner {
 
diff --git a/src/main/java/com/xcong/farmer/cms/common/response/Result.java b/src/main/java/com/xcong/farmer/cms/common/response/Result.java
index bdb5333..6da0933 100644
--- a/src/main/java/com/xcong/farmer/cms/common/response/Result.java
+++ b/src/main/java/com/xcong/farmer/cms/common/response/Result.java
@@ -16,7 +16,7 @@
 
     private static final long serialVersionUID = 1L;
 
-    private static final int SUCCESS = 0;
+    private static final int SUCCESS = 200;
 
     private static final int FAIL = -1;
 
@@ -38,6 +38,13 @@
         return result;
     }
 
+    public static Result ok(Object data) {
+        Result result = new Result();
+        result.code = SUCCESS;
+        result.data = data;
+        return result;
+    }
+
     public static Result ok(String msg, Object data) {
         Result result = new Result();
         result.code = SUCCESS;
diff --git a/src/main/java/com/xcong/farmer/cms/common/system/base/BaseEntity.java b/src/main/java/com/xcong/farmer/cms/common/system/base/BaseEntity.java
index 970c4d5..ce55de5 100644
--- a/src/main/java/com/xcong/farmer/cms/common/system/base/BaseEntity.java
+++ b/src/main/java/com/xcong/farmer/cms/common/system/base/BaseEntity.java
@@ -30,4 +30,6 @@
 
     @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
     private Date updateTime;
+
+    private Integer version;
 }
diff --git a/src/main/java/com/xcong/farmer/cms/modules/system/Controller/AdminMenuController.java b/src/main/java/com/xcong/farmer/cms/modules/system/Controller/AdminMenuController.java
new file mode 100644
index 0000000..5deebfa
--- /dev/null
+++ b/src/main/java/com/xcong/farmer/cms/modules/system/Controller/AdminMenuController.java
@@ -0,0 +1,60 @@
+package com.xcong.farmer.cms.modules.system.Controller;
+
+import com.xcong.farmer.cms.common.response.Result;
+import com.xcong.farmer.cms.modules.system.dto.*;
+import com.xcong.farmer.cms.modules.system.service.IMenuService;
+import com.xcong.farmer.cms.modules.system.service.IRoleService;
+import com.xcong.farmer.cms.modules.system.vo.AdminMenuVo;
+import com.xcong.farmer.cms.modules.system.vo.AdminRoleVo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiResponse;
+import io.swagger.annotations.ApiResponses;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.security.core.context.SecurityContextHolder;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.validation.Valid;
+
+@RestController
+@RequestMapping(value = "/menu")
+@Slf4j
+@Api(value = "系统菜单", tags = "系统菜单")
+public class AdminMenuController {
+
+    @Resource
+    private IMenuService iMenuService;
+
+    @ApiOperation(value = "系统菜单分页列表", notes = "系统菜单分页列表")
+    @ApiResponses({@ApiResponse(code = 200, message = "ok", response = AdminMenuVo.class)})
+    @PostMapping(value = "/menuInPage")
+    public Result getMenuInPage(@RequestBody @Valid AdminMenuDto adminMenuDto) {
+        log.info("--->{}", SecurityContextHolder.getContext().getAuthentication());
+        return iMenuService.getMenuInPage(adminMenuDto);
+    }
+
+    @ApiOperation(value = "添加系统菜单", notes = "添加系统菜单")
+    @PostMapping(value = "/addMenu")
+    public Result addMenu(@RequestBody @Valid AdminAddMenuDto adminAddMenuDto) {
+        return iMenuService.addMenu(adminAddMenuDto);
+    }
+
+    @ApiOperation(value = "删除系统菜单", notes = "删除系统菜单")
+    @GetMapping(value = "/deleteMenu/{id}")
+    public Result deleteMenu(@PathVariable(value = "id") Long id) {
+        return iMenuService.deleteMenu(id);
+    }
+
+    @ApiOperation(value = "查看系统菜单详情", notes = "查看系统菜单详情")
+    @GetMapping(value = "/seeMenuInfo/{id}")
+    public Result seeMenuInfo(@PathVariable(value = "id") Long id) {
+        return iMenuService.seeMenuInfo(id);
+    }
+
+    @ApiOperation(value = "更新系统菜单", notes = "更新系统菜单")
+    @PostMapping(value = "/updateMenu")
+    public Result updateMenu(@RequestBody @Valid AdminUpdateMenuDto adminUpdateMenuDto) {
+        return iMenuService.updateMenu(adminUpdateMenuDto);
+    }
+}
diff --git a/src/main/java/com/xcong/farmer/cms/modules/system/Controller/AdminRoleController.java b/src/main/java/com/xcong/farmer/cms/modules/system/Controller/AdminRoleController.java
new file mode 100644
index 0000000..44a5fae
--- /dev/null
+++ b/src/main/java/com/xcong/farmer/cms/modules/system/Controller/AdminRoleController.java
@@ -0,0 +1,60 @@
+package com.xcong.farmer.cms.modules.system.Controller;
+
+import com.xcong.farmer.cms.common.response.Result;
+import com.xcong.farmer.cms.modules.system.dto.*;
+import com.xcong.farmer.cms.modules.system.service.IRoleService;
+import com.xcong.farmer.cms.modules.system.service.IUserService;
+import com.xcong.farmer.cms.modules.system.vo.AdminRoleVo;
+import com.xcong.farmer.cms.modules.system.vo.AdminUserVo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiResponse;
+import io.swagger.annotations.ApiResponses;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.security.core.context.SecurityContextHolder;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.validation.Valid;
+
+@RestController
+@RequestMapping(value = "/role")
+@Slf4j
+@Api(value = "系统角色", tags = "系统角色")
+public class AdminRoleController {
+
+    @Resource
+    private IRoleService iRoleService;
+
+    @ApiOperation(value = "系统角色分页列表", notes = "系统角色分页列表")
+    @ApiResponses({@ApiResponse(code = 200, message = "ok", response = AdminRoleVo.class)})
+    @PostMapping(value = "/userInPage")
+    public Result getUserInPage(@RequestBody @Valid AdminRoleDto adminRoleDto) {
+        log.info("--->{}", SecurityContextHolder.getContext().getAuthentication());
+        return iRoleService.getRoleInPage(adminRoleDto);
+    }
+
+    @ApiOperation(value = "添加系统角色", notes = "添加系统角色")
+    @PostMapping(value = "/addRole")
+    public Result addRole(@RequestBody @Valid AdminAddRoleDto adminAddRoleDto) {
+        return iRoleService.addRole(adminAddRoleDto);
+    }
+
+    @ApiOperation(value = "删除系统角色", notes = "删除系统角色")
+    @GetMapping(value = "/deleteRole/{id}")
+    public Result deleteRole(@PathVariable(value = "id") Long id) {
+        return iRoleService.deleteRole(id);
+    }
+
+    @ApiOperation(value = "查看系统角色详情", notes = "查看系统角色详情")
+    @GetMapping(value = "/seeRoleInfo/{id}")
+    public Result seeRoleInfo(@PathVariable(value = "id") Long id) {
+        return iRoleService.seeRoleInfo(id);
+    }
+
+    @ApiOperation(value = "更新系统角色", notes = "更新系统角色")
+    @PostMapping(value = "/updateRole")
+    public Result updateRole(@RequestBody @Valid AdminUpdateRoleDto adminUpdateRoleDto) {
+        return iRoleService.updateRole(adminUpdateRoleDto);
+    }
+}
diff --git a/src/main/java/com/xcong/farmer/cms/modules/system/Controller/AdminUserController.java b/src/main/java/com/xcong/farmer/cms/modules/system/Controller/AdminUserController.java
new file mode 100644
index 0000000..2b04b81
--- /dev/null
+++ b/src/main/java/com/xcong/farmer/cms/modules/system/Controller/AdminUserController.java
@@ -0,0 +1,82 @@
+package com.xcong.farmer.cms.modules.system.Controller;
+
+import com.xcong.farmer.cms.common.response.Result;
+import com.xcong.farmer.cms.modules.system.dto.AdminAddUserDto;
+import com.xcong.farmer.cms.modules.system.dto.AdminUpdateUserDto;
+import com.xcong.farmer.cms.modules.system.dto.AdminUserDto;
+import com.xcong.farmer.cms.modules.system.service.IUserService;
+import com.xcong.farmer.cms.modules.system.vo.AdminUserVo;
+import com.xcong.farmer.cms.modules.test.dto.TestUserDto;
+import com.xcong.farmer.cms.modules.test.entity.TestUserEntity;
+import com.xcong.farmer.cms.modules.test.mapper.TestUserEntityMapper;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiResponse;
+import io.swagger.annotations.ApiResponses;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.security.core.context.SecurityContextHolder;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.validation.Valid;
+
+@RestController
+@RequestMapping(value = "/user")
+@Slf4j
+@Api(value = "系统用户", tags = "系统用户")
+public class AdminUserController {
+
+    @Resource
+    private IUserService iUserService;
+
+    @ApiOperation(value = "系统用户分页列表", notes = "系统用户分页列表")
+    @ApiResponses({@ApiResponse(code = 200, message = "ok", response = AdminUserVo.class)})
+    @PostMapping(value = "/userInPage")
+    public Result getUserInPage(@RequestBody @Valid AdminUserDto adminUserDto) {
+        log.info("--->{}", SecurityContextHolder.getContext().getAuthentication());
+        return iUserService.getUserInPage(adminUserDto);
+    }
+
+    @ApiOperation(value = "添加系统用户", notes = "添加系统用户")
+    @PostMapping(value = "/addUser")
+    public Result addUser(@RequestBody @Valid AdminAddUserDto adminAddUserDto) {
+        return iUserService.addUser(adminAddUserDto);
+    }
+
+    @ApiOperation(value = "激活用户", notes = "激活用户")
+    @GetMapping(value = "/activeUser/{id}")
+    public Result activeUser(@PathVariable(value = "id") Long id) {
+        return iUserService.activeUser(id);
+    }
+
+    @ApiOperation(value = "禁用用户", notes = "禁用用户")
+    @GetMapping(value = "/forbiddenUser/{id}")
+    public Result forbiddenUser(@PathVariable(value = "id") Long id) {
+        return iUserService.forbiddenUser(id);
+    }
+
+    @ApiOperation(value = "删除用户", notes = "删除用户")
+    @GetMapping(value = "/deleteUser/{id}")
+    public Result deleteUser(@PathVariable(value = "id") Long id) {
+        return iUserService.deleteUser(id);
+    }
+
+    @ApiOperation(value = "查看用户详情", notes = "查看用户详情")
+    @GetMapping(value = "/seeUserInfo/{id}")
+    public Result seeUserInfo(@PathVariable(value = "id") Long id) {
+        return iUserService.seeUserInfo(id);
+    }
+
+    @ApiOperation(value = "更新系统用户", notes = "更新系统用户")
+    @PostMapping(value = "/updateUser")
+    public Result updateUser(@RequestBody @Valid AdminUpdateUserDto adminUpdateUserDto) {
+        return iUserService.updateUser(adminUpdateUserDto);
+    }
+
+    @ApiOperation(value = "重置密码", notes = "重置密码")
+    @GetMapping(value = "/resetPassword/{id}")
+    public Result resetPassword(@PathVariable(value = "id") Long id) {
+        return iUserService.resetPassword(id);
+    }
+
+}
diff --git a/src/main/java/com/xcong/farmer/cms/modules/system/dto/AdminAddMenuDto.java b/src/main/java/com/xcong/farmer/cms/modules/system/dto/AdminAddMenuDto.java
new file mode 100644
index 0000000..6a742ec
--- /dev/null
+++ b/src/main/java/com/xcong/farmer/cms/modules/system/dto/AdminAddMenuDto.java
@@ -0,0 +1,26 @@
+package com.xcong.farmer.cms.modules.system.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel(value = "AdminAddMenuDto", description = "参数接收类")
+public class AdminAddMenuDto {
+
+    @ApiModelProperty(value = "菜单按钮标题")
+    private String menuName;
+
+    @ApiModelProperty(value = "菜单类型 1:菜单 2:按钮")
+    private Integer menuType;
+
+    @ApiModelProperty(value = "路由地址")
+    private String routeUrl;
+
+    @ApiModelProperty(value = "排序")
+    private Integer orderNum;
+
+    @ApiModelProperty(value = "父级ID")
+    private Long parentId;
+
+}
diff --git a/src/main/java/com/xcong/farmer/cms/modules/system/dto/AdminAddRoleDto.java b/src/main/java/com/xcong/farmer/cms/modules/system/dto/AdminAddRoleDto.java
new file mode 100644
index 0000000..55538d1
--- /dev/null
+++ b/src/main/java/com/xcong/farmer/cms/modules/system/dto/AdminAddRoleDto.java
@@ -0,0 +1,20 @@
+package com.xcong.farmer.cms.modules.system.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel(value = "AdminAddRoleDto", description = "参数接收类")
+public class AdminAddRoleDto {
+
+    @ApiModelProperty(value = "角色名称")
+    private String roleName;
+
+    @ApiModelProperty(value = "备注")
+    private String remark;
+
+    @ApiModelProperty(value = "菜单按钮ID")
+    private String menuIds;
+
+}
diff --git a/src/main/java/com/xcong/farmer/cms/modules/system/dto/AdminAddUserDto.java b/src/main/java/com/xcong/farmer/cms/modules/system/dto/AdminAddUserDto.java
new file mode 100644
index 0000000..532989b
--- /dev/null
+++ b/src/main/java/com/xcong/farmer/cms/modules/system/dto/AdminAddUserDto.java
@@ -0,0 +1,28 @@
+package com.xcong.farmer.cms.modules.system.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+@Data
+@ApiModel(value = "AdminAddUserDto", description = "参数接收类")
+public class AdminAddUserDto {
+
+    @ApiModelProperty(value = "用户名")
+    private String username;
+
+    @ApiModelProperty(value = "昵称")
+    private String nickname;
+
+    @ApiModelProperty(value = "角色ID")
+    private Long roleId;
+
+    @ApiModelProperty(value = "联系电话")
+    private String phone;
+
+    @ApiModelProperty(value = "邮箱")
+    private String email;
+
+}
diff --git a/src/main/java/com/xcong/farmer/cms/modules/system/dto/AdminMenuDto.java b/src/main/java/com/xcong/farmer/cms/modules/system/dto/AdminMenuDto.java
new file mode 100644
index 0000000..5c43e47
--- /dev/null
+++ b/src/main/java/com/xcong/farmer/cms/modules/system/dto/AdminMenuDto.java
@@ -0,0 +1,17 @@
+package com.xcong.farmer.cms.modules.system.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel(value = "AdminMenuDto", description = "参数接收类")
+public class AdminMenuDto {
+
+    @ApiModelProperty(value = "每页条数", example = "10")
+    private Integer pageSize;
+
+    @ApiModelProperty(value = "第几页", example = "1")
+    private Integer pageNum;
+
+}
diff --git a/src/main/java/com/xcong/farmer/cms/modules/system/dto/AdminRoleDto.java b/src/main/java/com/xcong/farmer/cms/modules/system/dto/AdminRoleDto.java
new file mode 100644
index 0000000..0b1ef0c
--- /dev/null
+++ b/src/main/java/com/xcong/farmer/cms/modules/system/dto/AdminRoleDto.java
@@ -0,0 +1,19 @@
+package com.xcong.farmer.cms.modules.system.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel(value = "AdminRoleDto", description = "参数接收类")
+public class AdminRoleDto {
+
+    @ApiModelProperty(value = "角色名称", example = "管理员")
+    private String roleName;
+
+    @ApiModelProperty(value = "每页条数", example = "10")
+    private Integer pageSize;
+
+    @ApiModelProperty(value = "第几页", example = "1")
+    private Integer pageNum;
+}
diff --git a/src/main/java/com/xcong/farmer/cms/modules/system/dto/AdminUpdateMenuDto.java b/src/main/java/com/xcong/farmer/cms/modules/system/dto/AdminUpdateMenuDto.java
new file mode 100644
index 0000000..c624a07
--- /dev/null
+++ b/src/main/java/com/xcong/farmer/cms/modules/system/dto/AdminUpdateMenuDto.java
@@ -0,0 +1,29 @@
+package com.xcong.farmer.cms.modules.system.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel(value = "AdminUpdateMenuDto", description = "参数接收类")
+public class AdminUpdateMenuDto {
+
+    @ApiModelProperty(value = "菜单ID")
+    private Long id;
+
+    @ApiModelProperty(value = "菜单按钮标题")
+    private String menuName;
+
+    @ApiModelProperty(value = "菜单类型 1:菜单 2:按钮")
+    private Integer menuType;
+
+    @ApiModelProperty(value = "路由地址")
+    private String routeUrl;
+
+    @ApiModelProperty(value = "排序")
+    private Integer orderNum;
+
+    @ApiModelProperty(value = "父级ID")
+    private Long parentId;
+
+}
diff --git a/src/main/java/com/xcong/farmer/cms/modules/system/dto/AdminUpdateRoleDto.java b/src/main/java/com/xcong/farmer/cms/modules/system/dto/AdminUpdateRoleDto.java
new file mode 100644
index 0000000..2a8506c
--- /dev/null
+++ b/src/main/java/com/xcong/farmer/cms/modules/system/dto/AdminUpdateRoleDto.java
@@ -0,0 +1,23 @@
+package com.xcong.farmer.cms.modules.system.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel(value = "AdminUpdateRoleDto", description = "参数接收类")
+public class AdminUpdateRoleDto {
+
+    @ApiModelProperty(value = "角色ID")
+    private Long id;
+
+    @ApiModelProperty(value = "角色名称")
+    private String roleName;
+
+    @ApiModelProperty(value = "拓展备注")
+    private String remark;
+
+    @ApiModelProperty(value = "菜单按钮ID")
+    private String menuIds;
+
+}
diff --git a/src/main/java/com/xcong/farmer/cms/modules/system/dto/AdminUpdateUserDto.java b/src/main/java/com/xcong/farmer/cms/modules/system/dto/AdminUpdateUserDto.java
new file mode 100644
index 0000000..4aaa771
--- /dev/null
+++ b/src/main/java/com/xcong/farmer/cms/modules/system/dto/AdminUpdateUserDto.java
@@ -0,0 +1,32 @@
+package com.xcong.farmer.cms.modules.system.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel(value = "AdminUpdateUserDto", description = "参数接收类")
+public class AdminUpdateUserDto {
+
+    @ApiModelProperty(value = "用户ID")
+    private Long id;
+
+    @ApiModelProperty(value = "用户名")
+    private String username;
+
+    @ApiModelProperty(value = "昵称")
+    private String nickname;
+
+    @ApiModelProperty(value = "联系电话")
+    private String phone;
+
+    @ApiModelProperty(value = "邮箱")
+    private String email;
+
+    @ApiModelProperty(value = "角色ID")
+    private Long roleId;
+
+    @ApiModelProperty(value = "角色名称")
+    private String roleName;
+
+}
diff --git a/src/main/java/com/xcong/farmer/cms/modules/system/dto/AdminUserDto.java b/src/main/java/com/xcong/farmer/cms/modules/system/dto/AdminUserDto.java
new file mode 100644
index 0000000..1eea18a
--- /dev/null
+++ b/src/main/java/com/xcong/farmer/cms/modules/system/dto/AdminUserDto.java
@@ -0,0 +1,20 @@
+package com.xcong.farmer.cms.modules.system.dto;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel(value = "AdminUserDto", description = "参数接收类")
+public class AdminUserDto {
+
+    @ApiModelProperty(value = "用户名", example = "张三")
+    private String username;
+
+    @ApiModelProperty(value = "每页条数", example = "10")
+    private Integer pageSize;
+
+    @ApiModelProperty(value = "第几页", example = "1")
+    private Integer pageNum;
+
+}
diff --git a/src/main/java/com/xcong/farmer/cms/modules/system/entity/MenuEntity.java b/src/main/java/com/xcong/farmer/cms/modules/system/entity/MenuEntity.java
new file mode 100644
index 0000000..239a893
--- /dev/null
+++ b/src/main/java/com/xcong/farmer/cms/modules/system/entity/MenuEntity.java
@@ -0,0 +1,35 @@
+package com.xcong.farmer.cms.modules.system.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.xcong.farmer.cms.common.system.base.BaseEntity;
+import lombok.Data;
+
+/**
+ * 菜单按钮表
+ */
+@Data
+@TableName("t_menu")
+public class MenuEntity extends BaseEntity {
+    /**
+     * 菜单类型 - 菜单
+     */
+    public static final Long PARENTID_DEFAULT = 0L;
+    /**
+     * 菜单类型 - 菜单
+     */
+    public static final Integer MENU_TYPE_MENU = 1;
+    /**
+     * 菜单类型 - 按钮
+     */
+    public static final Integer MENU_TYPE_BUTTON = 2;
+    //菜单按钮标题
+    private String menuName;
+    //菜单类型 1:菜单 2:按钮
+    private Integer menuType;
+    //路由地址
+    private String routeUrl;
+    //排序
+    private Integer orderNum;
+    //父级ID
+    private Long parentId;
+}
diff --git a/src/main/java/com/xcong/farmer/cms/modules/system/entity/RoleEntity.java b/src/main/java/com/xcong/farmer/cms/modules/system/entity/RoleEntity.java
new file mode 100644
index 0000000..153ce47
--- /dev/null
+++ b/src/main/java/com/xcong/farmer/cms/modules/system/entity/RoleEntity.java
@@ -0,0 +1,17 @@
+package com.xcong.farmer.cms.modules.system.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.xcong.farmer.cms.common.system.base.BaseEntity;
+import lombok.Data;
+
+/**
+ * 角色表
+ */
+@Data
+@TableName("t_role")
+public class RoleEntity extends BaseEntity {
+    //角色名称
+    private String roleName;
+    //拓展备注
+    private String remark;
+}
diff --git a/src/main/java/com/xcong/farmer/cms/modules/system/entity/RoleMenuEntity.java b/src/main/java/com/xcong/farmer/cms/modules/system/entity/RoleMenuEntity.java
new file mode 100644
index 0000000..6086e25
--- /dev/null
+++ b/src/main/java/com/xcong/farmer/cms/modules/system/entity/RoleMenuEntity.java
@@ -0,0 +1,16 @@
+package com.xcong.farmer.cms.modules.system.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+/**
+ * 角色菜单关联表
+ */
+@Data
+@TableName("t_role_menu")
+public class RoleMenuEntity {
+    //角色ID
+    private Long roleId;
+    //菜单/按钮ID
+    private Long menuId;
+}
diff --git a/src/main/java/com/xcong/farmer/cms/modules/system/entity/UserEntity.java b/src/main/java/com/xcong/farmer/cms/modules/system/entity/UserEntity.java
new file mode 100644
index 0000000..638af70
--- /dev/null
+++ b/src/main/java/com/xcong/farmer/cms/modules/system/entity/UserEntity.java
@@ -0,0 +1,43 @@
+package com.xcong.farmer.cms.modules.system.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.xcong.farmer.cms.common.system.base.BaseEntity;
+import lombok.Data;
+
+/**
+ * 用户表
+ */
+@Data
+@TableName("t_user")
+public class UserEntity extends BaseEntity {
+    /**
+     * 默认密码
+     */
+    public static final String PASSWORD_DEFAULT = "123456";
+    /**
+     * 账号状态 - 禁用
+     */
+    public static final Integer STATUS_DISABLED = 0;
+    /**
+     * 账号状态 - 激活
+     */
+    public static final Integer STATUS_ENABLE = 1;
+    //用户名
+    private String username;
+    //昵称
+    private String nickname;
+    //登录密码
+    private String password;
+    //角色ID
+    private Long roleId;
+    //角色名称
+    private String roleName;
+    //联系电话
+    private String phone;
+    //邮箱
+    private String email;
+    //账号状态 0:禁用 1:激活
+    private Integer status;
+    //拓展备注
+    private String remark;
+}
diff --git a/src/main/java/com/xcong/farmer/cms/modules/system/entity/UserRoleEntity.java b/src/main/java/com/xcong/farmer/cms/modules/system/entity/UserRoleEntity.java
new file mode 100644
index 0000000..f1f703a
--- /dev/null
+++ b/src/main/java/com/xcong/farmer/cms/modules/system/entity/UserRoleEntity.java
@@ -0,0 +1,16 @@
+package com.xcong.farmer.cms.modules.system.entity;
+
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+/**
+ * 用户角色关联表
+ */
+@Data
+@TableName("t_user_role")
+public class UserRoleEntity {
+    //用户ID
+    private Long userId;
+    //角色ID
+    private Long roleId;
+}
diff --git a/src/main/java/com/xcong/farmer/cms/modules/system/mapper/MenuMapper.java b/src/main/java/com/xcong/farmer/cms/modules/system/mapper/MenuMapper.java
new file mode 100644
index 0000000..5f775e6
--- /dev/null
+++ b/src/main/java/com/xcong/farmer/cms/modules/system/mapper/MenuMapper.java
@@ -0,0 +1,14 @@
+package com.xcong.farmer.cms.modules.system.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.xcong.farmer.cms.modules.system.entity.MenuEntity;
+import com.xcong.farmer.cms.modules.system.vo.AdminMenuVo;
+import org.apache.ibatis.annotations.Param;
+
+public interface MenuMapper extends BaseMapper<MenuEntity> {
+
+    IPage<AdminMenuVo> selectAdminMenuVoInPage(Page<AdminMenuVo> page, @Param("record")MenuEntity menuEntity);
+
+}
diff --git a/src/main/java/com/xcong/farmer/cms/modules/system/mapper/RoleMapper.java b/src/main/java/com/xcong/farmer/cms/modules/system/mapper/RoleMapper.java
new file mode 100644
index 0000000..97c3d46
--- /dev/null
+++ b/src/main/java/com/xcong/farmer/cms/modules/system/mapper/RoleMapper.java
@@ -0,0 +1,14 @@
+package com.xcong.farmer.cms.modules.system.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.xcong.farmer.cms.modules.system.entity.RoleEntity;
+import com.xcong.farmer.cms.modules.system.vo.AdminRoleVo;
+import org.apache.ibatis.annotations.Param;
+
+public interface RoleMapper extends BaseMapper<RoleEntity> {
+
+    IPage<AdminRoleVo> selectAdminRoleVoInPage(Page<AdminRoleVo> page, @Param("record") RoleEntity roleEntity);
+
+}
diff --git a/src/main/java/com/xcong/farmer/cms/modules/system/mapper/RoleMenuMapper.java b/src/main/java/com/xcong/farmer/cms/modules/system/mapper/RoleMenuMapper.java
new file mode 100644
index 0000000..7fd6821
--- /dev/null
+++ b/src/main/java/com/xcong/farmer/cms/modules/system/mapper/RoleMenuMapper.java
@@ -0,0 +1,14 @@
+package com.xcong.farmer.cms.modules.system.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.xcong.farmer.cms.modules.system.entity.RoleMenuEntity;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+public interface RoleMenuMapper extends BaseMapper<RoleMenuEntity> {
+
+    List<RoleMenuEntity> selectListByRoleId(@Param("roleId") Long id);
+
+    void deleteByMenuId(@Param("menuId")Long id);
+}
diff --git a/src/main/java/com/xcong/farmer/cms/modules/system/mapper/UserMapper.java b/src/main/java/com/xcong/farmer/cms/modules/system/mapper/UserMapper.java
new file mode 100644
index 0000000..bf49c1d
--- /dev/null
+++ b/src/main/java/com/xcong/farmer/cms/modules/system/mapper/UserMapper.java
@@ -0,0 +1,14 @@
+package com.xcong.farmer.cms.modules.system.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.xcong.farmer.cms.modules.system.entity.UserEntity;
+import com.xcong.farmer.cms.modules.system.vo.AdminUserVo;
+import org.apache.ibatis.annotations.Param;
+
+public interface UserMapper extends BaseMapper<UserEntity> {
+
+    IPage<AdminUserVo> selectAdminUserVoInPage(Page<AdminUserVo> page, @Param("record") UserEntity userEntity);
+
+}
diff --git a/src/main/java/com/xcong/farmer/cms/modules/system/mapper/UserRoleMapper.java b/src/main/java/com/xcong/farmer/cms/modules/system/mapper/UserRoleMapper.java
new file mode 100644
index 0000000..27db250
--- /dev/null
+++ b/src/main/java/com/xcong/farmer/cms/modules/system/mapper/UserRoleMapper.java
@@ -0,0 +1,7 @@
+package com.xcong.farmer.cms.modules.system.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.xcong.farmer.cms.modules.system.entity.UserRoleEntity;
+
+public interface UserRoleMapper extends BaseMapper<UserRoleEntity> {
+}
diff --git a/src/main/java/com/xcong/farmer/cms/modules/system/service/IMenuService.java b/src/main/java/com/xcong/farmer/cms/modules/system/service/IMenuService.java
new file mode 100644
index 0000000..d1ba9fd
--- /dev/null
+++ b/src/main/java/com/xcong/farmer/cms/modules/system/service/IMenuService.java
@@ -0,0 +1,21 @@
+package com.xcong.farmer.cms.modules.system.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.xcong.farmer.cms.common.response.Result;
+import com.xcong.farmer.cms.modules.system.dto.AdminAddMenuDto;
+import com.xcong.farmer.cms.modules.system.dto.AdminMenuDto;
+import com.xcong.farmer.cms.modules.system.dto.AdminUpdateMenuDto;
+import com.xcong.farmer.cms.modules.system.entity.MenuEntity;
+
+public interface IMenuService extends IService<MenuEntity> {
+
+    Result getMenuInPage(AdminMenuDto adminMenuDto);
+
+    Result addMenu(AdminAddMenuDto adminAddMenuDto);
+
+    Result deleteMenu(Long id);
+
+    Result seeMenuInfo(Long id);
+
+    Result updateMenu(AdminUpdateMenuDto adminUpdateMenuDto);
+}
diff --git a/src/main/java/com/xcong/farmer/cms/modules/system/service/IRoleService.java b/src/main/java/com/xcong/farmer/cms/modules/system/service/IRoleService.java
new file mode 100644
index 0000000..f6e2a9f
--- /dev/null
+++ b/src/main/java/com/xcong/farmer/cms/modules/system/service/IRoleService.java
@@ -0,0 +1,21 @@
+package com.xcong.farmer.cms.modules.system.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.xcong.farmer.cms.common.response.Result;
+import com.xcong.farmer.cms.modules.system.dto.AdminAddRoleDto;
+import com.xcong.farmer.cms.modules.system.dto.AdminRoleDto;
+import com.xcong.farmer.cms.modules.system.dto.AdminUpdateRoleDto;
+import com.xcong.farmer.cms.modules.system.entity.RoleEntity;
+
+public interface IRoleService extends IService<RoleEntity> {
+
+    Result getRoleInPage(AdminRoleDto adminRoleDto);
+
+    Result addRole(AdminAddRoleDto adminAddRoleDto);
+
+    Result deleteRole(Long id);
+
+    Result seeRoleInfo(Long id);
+
+    Result updateRole(AdminUpdateRoleDto adminUpdateRoleDto);
+}
diff --git a/src/main/java/com/xcong/farmer/cms/modules/system/service/IUserService.java b/src/main/java/com/xcong/farmer/cms/modules/system/service/IUserService.java
new file mode 100644
index 0000000..1baac3d
--- /dev/null
+++ b/src/main/java/com/xcong/farmer/cms/modules/system/service/IUserService.java
@@ -0,0 +1,27 @@
+package com.xcong.farmer.cms.modules.system.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.xcong.farmer.cms.common.response.Result;
+import com.xcong.farmer.cms.modules.system.dto.AdminAddUserDto;
+import com.xcong.farmer.cms.modules.system.dto.AdminUpdateUserDto;
+import com.xcong.farmer.cms.modules.system.dto.AdminUserDto;
+import com.xcong.farmer.cms.modules.system.entity.UserEntity;
+
+public interface IUserService extends IService<UserEntity> {
+
+    Result getUserInPage(AdminUserDto adminUserDto);
+
+    Result addUser(AdminAddUserDto adminAddUserDto);
+
+    Result activeUser(Long id);
+
+    Result forbiddenUser(Long id);
+
+    Result deleteUser(Long id);
+
+    Result seeUserInfo(Long id);
+
+    Result updateUser(AdminUpdateUserDto adminUpdateUserDto);
+
+    Result resetPassword(Long id);
+}
diff --git a/src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/MenuServiceImpl.java b/src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/MenuServiceImpl.java
new file mode 100644
index 0000000..b148be8
--- /dev/null
+++ b/src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/MenuServiceImpl.java
@@ -0,0 +1,171 @@
+package com.xcong.farmer.cms.modules.system.service.Impl;
+
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.xcong.farmer.cms.common.response.Result;
+import com.xcong.farmer.cms.modules.system.dto.AdminAddMenuDto;
+import com.xcong.farmer.cms.modules.system.dto.AdminMenuDto;
+import com.xcong.farmer.cms.modules.system.dto.AdminUpdateMenuDto;
+import com.xcong.farmer.cms.modules.system.entity.MenuEntity;
+import com.xcong.farmer.cms.modules.system.mapper.MenuMapper;
+import com.xcong.farmer.cms.modules.system.mapper.RoleMenuMapper;
+import com.xcong.farmer.cms.modules.system.service.IMenuService;
+import com.xcong.farmer.cms.modules.system.vo.AdminMenuVo;
+import com.xcong.farmer.cms.modules.system.vo.AdminSeeMenuInfoVo;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.collection.CollUtil;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+
+@Service
+@Slf4j
+public class MenuServiceImpl extends ServiceImpl<MenuMapper, MenuEntity> implements IMenuService {
+
+    @Resource
+    private RoleMenuMapper roleMenuMapper;
+
+    @Override
+    public Result getMenuInPage(AdminMenuDto adminMenuDto) {
+        Page<AdminMenuVo> page = new Page<>(adminMenuDto.getPageNum(), adminMenuDto.getPageSize());
+        MenuEntity menuEntity = new MenuEntity();
+        menuEntity.setParentId(MenuEntity.PARENTID_DEFAULT);
+        IPage<AdminMenuVo> list = this.baseMapper.selectAdminMenuVoInPage(page,menuEntity);
+        List<AdminMenuVo> records = list.getRecords();
+        list.getTotal();
+        if(CollUtil.isNotEmpty(records)){
+            for(AdminMenuVo adminMenuVo : records){
+                Long id = adminMenuVo.getId();
+                QueryWrapper<MenuEntity> objectQueryWrapper = new QueryWrapper<>();
+                objectQueryWrapper.eq("parent_id",id);
+                List<MenuEntity> menuEntities = this.baseMapper.selectList(objectQueryWrapper);
+                List<AdminMenuVo> adminMenuVoChilds = new ArrayList<>();
+                if(CollUtil.isNotEmpty(menuEntities)){
+                    for(MenuEntity menuEntityChild : menuEntities){
+                        AdminMenuVo child = new AdminMenuVo();
+                        child.setId(menuEntityChild.getId());
+                        child.setMenuName(menuEntityChild.getMenuName());
+                        child.setMenuType(menuEntityChild.getMenuType());
+                        child.setRouteUrl(menuEntityChild.getRouteUrl());
+                        child.setOrderNum(menuEntityChild.getOrderNum());
+                        child.setCreateTime(menuEntityChild.getCreateTime());
+                        adminMenuVoChilds.add(child);
+                    }
+                }
+                adminMenuVo.setChild(adminMenuVoChilds);
+            }
+        }
+        return Result.ok(list);
+    }
+
+    @Override
+    @Transactional
+    public Result addMenu(AdminAddMenuDto adminAddMenuDto) {
+        String menuName = adminAddMenuDto.getMenuName();
+        if(StrUtil.isEmpty(menuName)){
+            return Result.fail("请输入菜单名称");
+        }
+        Integer menuType = adminAddMenuDto.getMenuType();
+        if(ObjectUtil.isEmpty(menuType)){
+            return Result.fail("请输入菜单类型");
+        }
+        MenuEntity menuEntity = new MenuEntity();
+        menuEntity.setMenuName(menuName);
+        menuEntity.setMenuType(menuType);
+        Long parentId = adminAddMenuDto.getParentId();
+        if(ObjectUtil.isEmpty(parentId)){
+            menuEntity.setParentId(MenuEntity.PARENTID_DEFAULT);
+        }else{
+            menuEntity.setParentId(parentId);
+        }
+        Integer orderNum = adminAddMenuDto.getOrderNum();
+        if(ObjectUtil.isNotEmpty(orderNum)){
+            menuEntity.setOrderNum(orderNum);
+        }
+        String routeUrl = adminAddMenuDto.getRouteUrl();
+        if(StrUtil.isNotEmpty(routeUrl)){
+            menuEntity.setRouteUrl(routeUrl);
+        }
+        this.baseMapper.insert(menuEntity);
+        return Result.ok("新增成功");
+    }
+
+    @Override
+    @Transactional
+    public Result deleteMenu(Long id) {
+        MenuEntity menuEntity = this.baseMapper.selectById(id);
+        if(ObjectUtil.isEmpty(menuEntity)){
+            return Result.fail("菜单不存在");
+        }
+        QueryWrapper<MenuEntity> objectQueryWrapper = new QueryWrapper<>();
+        objectQueryWrapper.eq("parent_id",id);
+        List<MenuEntity> menuEntities = this.baseMapper.selectList(objectQueryWrapper);
+        if(CollUtil.isNotEmpty(menuEntities)){
+            return Result.fail("请先清空它的二级菜单");
+        }
+        this.baseMapper.deleteById(id);
+        roleMenuMapper.deleteByMenuId(id);
+        return Result.ok("删除成功");
+    }
+
+    @Override
+    public Result seeMenuInfo(Long id) {
+        MenuEntity menuEntity = this.baseMapper.selectById(id);
+        if(ObjectUtil.isEmpty(menuEntity)){
+            return Result.fail("菜单不存在");
+        }
+        AdminSeeMenuInfoVo adminSeeMenuInfoVo = new AdminSeeMenuInfoVo();
+        adminSeeMenuInfoVo.setId(id);
+        adminSeeMenuInfoVo.setMenuName(menuEntity.getMenuName());
+        adminSeeMenuInfoVo.setMenuType(menuEntity.getMenuType());
+        adminSeeMenuInfoVo.setRouteUrl(menuEntity.getRouteUrl());
+        adminSeeMenuInfoVo.setOrderNum(menuEntity.getOrderNum());
+        adminSeeMenuInfoVo.setParentId(menuEntity.getParentId());
+        return Result.ok(adminSeeMenuInfoVo);
+    }
+
+    @Override
+    @Transactional
+    public Result updateMenu(AdminUpdateMenuDto adminUpdateMenuDto) {
+        Long id = adminUpdateMenuDto.getId();
+        MenuEntity menuEntity = this.baseMapper.selectById(id);
+        if(ObjectUtil.isEmpty(menuEntity)){
+            return Result.fail("菜单不存在");
+        }
+        String menuName = adminUpdateMenuDto.getMenuName();
+        if(StrUtil.isEmpty(menuName)){
+            return Result.fail("请输入菜单名称");
+        }
+        menuEntity.setMenuName(menuName);
+        Integer menuType = adminUpdateMenuDto.getMenuType();
+        if(ObjectUtil.isEmpty(menuType)){
+            return Result.fail("请输入菜单类型");
+        }
+        menuEntity.setMenuType(menuType);
+        String routeUrl = adminUpdateMenuDto.getRouteUrl();
+        if(StrUtil.isNotEmpty(routeUrl)){
+            menuEntity.setRouteUrl(routeUrl);
+        }
+        Integer orderNum = adminUpdateMenuDto.getOrderNum();
+        if(ObjectUtil.isNotEmpty(orderNum)){
+            menuEntity.setOrderNum(orderNum);
+        }
+        Long parentId = adminUpdateMenuDto.getParentId();
+        if(ObjectUtil.isEmpty(parentId)){
+            menuEntity.setParentId(MenuEntity.PARENTID_DEFAULT);
+        }else{
+            menuEntity.setParentId(parentId);
+        }
+        this.baseMapper.updateById(menuEntity);
+        return Result.ok("更新成功");
+    }
+}
diff --git a/src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/RoleServiceImpl.java b/src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/RoleServiceImpl.java
new file mode 100644
index 0000000..4078bbd
--- /dev/null
+++ b/src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/RoleServiceImpl.java
@@ -0,0 +1,169 @@
+package com.xcong.farmer.cms.modules.system.service.Impl;
+
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.StringPool;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.xcong.farmer.cms.common.response.Result;
+import com.xcong.farmer.cms.modules.system.dto.AdminAddRoleDto;
+import com.xcong.farmer.cms.modules.system.dto.AdminRoleDto;
+import com.xcong.farmer.cms.modules.system.dto.AdminUpdateRoleDto;
+import com.xcong.farmer.cms.modules.system.entity.MenuEntity;
+import com.xcong.farmer.cms.modules.system.entity.RoleEntity;
+import com.xcong.farmer.cms.modules.system.entity.RoleMenuEntity;
+import com.xcong.farmer.cms.modules.system.entity.UserRoleEntity;
+import com.xcong.farmer.cms.modules.system.mapper.MenuMapper;
+import com.xcong.farmer.cms.modules.system.mapper.RoleMapper;
+import com.xcong.farmer.cms.modules.system.mapper.RoleMenuMapper;
+import com.xcong.farmer.cms.modules.system.mapper.UserRoleMapper;
+import com.xcong.farmer.cms.modules.system.service.IRoleService;
+import com.xcong.farmer.cms.modules.system.vo.AdminMenuInfoVo;
+import com.xcong.farmer.cms.modules.system.vo.AdminRoleVo;
+import com.xcong.farmer.cms.modules.system.vo.AdminSeeRoleInfoVo;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.collection.CollUtil;
+
+
+@Service
+@Slf4j
+public class RoleServiceImpl extends ServiceImpl<RoleMapper, RoleEntity> implements IRoleService {
+
+    @Resource
+    private RoleMenuMapper roleMenuMapper;
+    @Resource
+    private UserRoleMapper userRoleMapper;
+    @Resource
+    private MenuMapper menuMapper;
+
+    @Override
+    public Result getRoleInPage(AdminRoleDto adminRoleDto) {
+        Page<AdminRoleVo> page = new Page<>(adminRoleDto.getPageNum(), adminRoleDto.getPageSize());
+        RoleEntity roleEntity = new RoleEntity();
+        if(StrUtil.isNotEmpty(adminRoleDto.getRoleName())){
+            roleEntity.setRoleName(adminRoleDto.getRoleName());
+        }
+        IPage<AdminRoleVo> list = this.baseMapper.selectAdminRoleVoInPage(page,roleEntity);
+        return Result.ok(list);
+    }
+
+    @Override
+    @Transactional
+    public Result addRole(AdminAddRoleDto adminAddRoleDto) {
+        String roleName = adminAddRoleDto.getRoleName();
+        if(StrUtil.isEmpty(roleName)){
+            return Result.fail("请输入角色名称");
+        }
+        String menuIds = adminAddRoleDto.getMenuIds();
+        if(StrUtil.isEmpty(menuIds)){
+            return Result.fail("请选择角色权限");
+        }
+        RoleEntity roleEntity = new RoleEntity();
+        String remark = adminAddRoleDto.getRemark();
+        if(StrUtil.isNotEmpty(remark)){
+            roleEntity.setRemark(remark);
+        }
+        roleEntity.setRoleName(roleName);
+        int insert = this.baseMapper.insert(roleEntity);
+        if(insert > 0){
+            saveRoleMenus(menuIds,roleEntity.getId());
+            return Result.ok("添加成功");
+        }
+        return Result.fail("添加失败");
+    }
+
+    @Override
+    @Transactional
+    public Result deleteRole(Long id) {
+        RoleEntity roleEntity = this.baseMapper.selectById(id);
+        if(ObjectUtil.isEmpty(roleEntity)){
+            return Result.fail("角色不存在");
+        }
+        //获取角色下对应的用户信息
+        QueryWrapper<UserRoleEntity> objectQueryWrapper = new QueryWrapper<>();
+        objectQueryWrapper.eq("role_id",id);
+        List<UserRoleEntity> userRoleEntities = userRoleMapper.selectList(objectQueryWrapper);
+        if(CollUtil.isNotEmpty(userRoleEntities)){
+            return Result.fail("当前角色下还有用户,请重新分配角色");
+        }
+        this.baseMapper.deleteById(id);
+        return Result.ok("删除成功");
+    }
+
+    @Override
+    public Result seeRoleInfo(Long id) {
+        RoleEntity roleEntity = this.baseMapper.selectById(id);
+        if(ObjectUtil.isEmpty(roleEntity)){
+            return Result.fail("角色不存在");
+        }
+        AdminSeeRoleInfoVo adminSeeRoleInfoVo = new AdminSeeRoleInfoVo();
+        adminSeeRoleInfoVo.setId(roleEntity.getId());
+        adminSeeRoleInfoVo.setRoleName(roleEntity.getRoleName());
+        adminSeeRoleInfoVo.setRemark(roleEntity.getRemark());
+        List<RoleMenuEntity> roleMenuEntities = roleMenuMapper.selectListByRoleId(id);
+        if(CollUtil.isNotEmpty(roleMenuEntities)){
+            List<AdminMenuInfoVo> adminMenuInfoVos = new ArrayList<>();
+            for(RoleMenuEntity roleMenuEntity : roleMenuEntities){
+                MenuEntity menuEntity = menuMapper.selectById(roleMenuEntity.getMenuId());
+                AdminMenuInfoVo adminMenuInfoVo = new AdminMenuInfoVo();
+                adminMenuInfoVo.setId(menuEntity.getId());
+                adminMenuInfoVo.setMenuName(menuEntity.getMenuName());
+                adminMenuInfoVos.add(adminMenuInfoVo);
+            }
+            adminSeeRoleInfoVo.setMenuInfoVos(adminMenuInfoVos);
+        }
+        return Result.ok(adminSeeRoleInfoVo);
+    }
+
+    @Override
+    @Transactional
+    public Result updateRole(AdminUpdateRoleDto adminUpdateRoleDto) {
+        Long id = adminUpdateRoleDto.getId();
+        RoleEntity roleEntity = this.baseMapper.selectById(id);
+        if(ObjectUtil.isEmpty(roleEntity)){
+            return Result.fail("角色不存在");
+        }
+        String roleName = adminUpdateRoleDto.getRoleName();
+        if(StrUtil.isEmpty(roleName)){
+            return Result.fail("请输入角色名称");
+        }
+        roleEntity.setRoleName(roleName);
+        String remark = adminUpdateRoleDto.getRemark();
+        if(StrUtil.isNotEmpty(remark)){
+            roleEntity.setRemark(remark);
+        }
+        this.baseMapper.updateById(roleEntity);
+        QueryWrapper<RoleMenuEntity> objectQueryWrapper = new QueryWrapper<>();
+        objectQueryWrapper.eq("role_id",id);
+        roleMenuMapper.delete(objectQueryWrapper);
+        String menuIds = adminUpdateRoleDto.getMenuIds();
+        if(StrUtil.isNotEmpty(menuIds)){
+            saveRoleMenus(menuIds,id);
+        }
+        return Result.ok("更新成功");
+    }
+
+    private void saveRoleMenus(String menuIds,Long roleId) {
+        if (StrUtil.isNotEmpty(menuIds)) {
+            String[] menuIdList = menuIds.split(StringPool.COMMA);
+            Arrays.stream(menuIdList).forEach(menuId -> {
+                RoleMenuEntity roleMenu = new RoleMenuEntity();
+                roleMenu.setMenuId(Long.valueOf(menuId));
+                roleMenu.setRoleId(roleId);
+                roleMenuMapper.insert(roleMenu);
+            });
+        }
+    }
+
+}
diff --git a/src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/UserServiceImpl.java b/src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/UserServiceImpl.java
new file mode 100644
index 0000000..66dd7c0
--- /dev/null
+++ b/src/main/java/com/xcong/farmer/cms/modules/system/service/Impl/UserServiceImpl.java
@@ -0,0 +1,187 @@
+package com.xcong.farmer.cms.modules.system.service.Impl;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.xcong.farmer.cms.common.response.Result;
+import com.xcong.farmer.cms.modules.system.dto.AdminAddUserDto;
+import com.xcong.farmer.cms.modules.system.dto.AdminUpdateUserDto;
+import com.xcong.farmer.cms.modules.system.dto.AdminUserDto;
+import com.xcong.farmer.cms.modules.system.entity.RoleEntity;
+import com.xcong.farmer.cms.modules.system.entity.UserEntity;
+import com.xcong.farmer.cms.modules.system.mapper.RoleMapper;
+import com.xcong.farmer.cms.modules.system.mapper.UserMapper;
+import com.xcong.farmer.cms.modules.system.service.IUserService;
+import com.xcong.farmer.cms.modules.system.vo.AdminSeeUserInfoVo;
+import com.xcong.farmer.cms.modules.system.vo.AdminUserVo;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+import cn.hutool.core.util.StrUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.codec.Rot;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+
+@Service
+@Slf4j
+public class UserServiceImpl extends ServiceImpl<UserMapper, UserEntity> implements IUserService {
+
+    @Resource
+    private RoleMapper roleMapper;
+
+    @Override
+    public Result getUserInPage(AdminUserDto adminUserDto) {
+        Page<AdminUserVo> page = new Page<>(adminUserDto.getPageNum(), adminUserDto.getPageSize());
+        UserEntity userEntity = new UserEntity();
+        if(StrUtil.isNotEmpty(adminUserDto.getUsername())){
+            userEntity.setUsername(adminUserDto.getUsername());
+        }
+        IPage<AdminUserVo> list = this.baseMapper.selectAdminUserVoInPage(page,userEntity);
+        return Result.ok(list);
+    }
+
+    @Override
+    @Transactional
+    public Result addUser(AdminAddUserDto adminAddUserDto) {
+        String username = adminAddUserDto.getUsername();
+        if(StrUtil.isEmpty(username)){
+            return Result.fail("请输入用户名");
+        }
+        Long roleId = adminAddUserDto.getRoleId();
+        if(ObjectUtil.isEmpty(roleId)){
+            return Result.fail("请选择用户角色");
+        }
+        RoleEntity roleEntity = roleMapper.selectById(roleId);
+        if(ObjectUtil.isEmpty(roleEntity)){
+            return Result.fail("请选择用户角色");
+        }
+        String phone = adminAddUserDto.getPhone();
+        if(StrUtil.isEmpty(phone)){
+            return Result.fail("请输入联系电话");
+        }
+        UserEntity userEntity = new UserEntity();
+        userEntity.setUsername(username);
+        userEntity.setPhone(phone);
+        userEntity.setRoleId(roleId);
+        userEntity.setRoleName(roleEntity.getRoleName());
+        if(StrUtil.isNotEmpty(adminAddUserDto.getNickname())){
+            userEntity.setNickname(adminAddUserDto.getNickname());
+        }
+        if(StrUtil.isNotEmpty(adminAddUserDto.getEmail())){
+            userEntity.setEmail(adminAddUserDto.getEmail());
+        }
+        ;
+        userEntity.setPassword(Rot.encode13(UserEntity.PASSWORD_DEFAULT));
+        userEntity.setStatus(UserEntity.STATUS_ENABLE);
+        int insert = this.baseMapper.insert(userEntity);
+        if(insert > 0){
+            return Result.ok("添加成功");
+        }
+        return Result.fail("添加失败");
+    }
+
+    @Override
+    @Transactional
+    public Result activeUser(Long id) {
+        UserEntity userEntity = this.baseMapper.selectById(id);
+        if(ObjectUtil.isEmpty(userEntity)){
+            return Result.fail("用户不存在");
+        }
+        userEntity.setStatus(UserEntity.STATUS_ENABLE);
+        this.baseMapper.updateById(userEntity);
+        return Result.ok("激活成功");
+    }
+
+    @Override
+    @Transactional
+    public Result forbiddenUser(Long id) {
+        UserEntity userEntity = this.baseMapper.selectById(id);
+        if(ObjectUtil.isEmpty(userEntity)){
+            return Result.fail("用户不存在");
+        }
+        userEntity.setStatus(UserEntity.STATUS_DISABLED);
+        this.baseMapper.updateById(userEntity);
+        return Result.ok("禁用成功");
+    }
+
+    @Override
+    @Transactional
+    public Result deleteUser(Long id) {
+        UserEntity userEntity = this.baseMapper.selectById(id);
+        if(ObjectUtil.isEmpty(userEntity)){
+            return Result.fail("用户不存在");
+        }
+        this.baseMapper.deleteById(id);
+        return Result.ok("删除成功");
+    }
+
+    @Override
+    public Result seeUserInfo(Long id) {
+        UserEntity userEntity = this.baseMapper.selectById(id);
+        if(ObjectUtil.isEmpty(userEntity)){
+            return Result.fail("用户不存在");
+        }
+        AdminSeeUserInfoVo adminSeeUserInfoVo = new AdminSeeUserInfoVo();
+        adminSeeUserInfoVo.setId(userEntity.getId());
+        adminSeeUserInfoVo.setUsername(userEntity.getUsername());
+        adminSeeUserInfoVo.setNickname(userEntity.getNickname());
+        adminSeeUserInfoVo.setPhone(userEntity.getPhone());
+        adminSeeUserInfoVo.setEmail(userEntity.getEmail());
+        adminSeeUserInfoVo.setRoleId(userEntity.getRoleId());
+        adminSeeUserInfoVo.setRoleName(userEntity.getRoleName());
+        return Result.ok(adminSeeUserInfoVo);
+    }
+
+    @Override
+    @Transactional
+    public Result updateUser(AdminUpdateUserDto adminUpdateUserDto) {
+        String username = adminUpdateUserDto.getUsername();
+        if(StrUtil.isEmpty(username)){
+            return Result.fail("请输入用户名");
+        }
+        Long roleId = adminUpdateUserDto.getRoleId();
+        if(ObjectUtil.isEmpty(roleId)){
+            return Result.fail("请选择用户角色");
+        }
+        RoleEntity roleEntity = roleMapper.selectById(roleId);
+        if(ObjectUtil.isEmpty(roleEntity)){
+            return Result.fail("请选择用户角色");
+        }
+        String phone = adminUpdateUserDto.getPhone();
+        if(StrUtil.isEmpty(phone)){
+            return Result.fail("请输入联系电话");
+        }
+        UserEntity userEntity =  this.baseMapper.selectById(adminUpdateUserDto.getId());
+        if(ObjectUtil.isEmpty(userEntity)){
+            return Result.fail("用户不存在");
+        }
+        userEntity.setUsername(username);
+        userEntity.setPhone(phone);
+        userEntity.setRoleId(roleId);
+        userEntity.setRoleName(roleEntity.getRoleName());
+        if(StrUtil.isNotEmpty(adminUpdateUserDto.getNickname())){
+            userEntity.setNickname(adminUpdateUserDto.getNickname());
+        }
+        if(StrUtil.isNotEmpty(adminUpdateUserDto.getEmail())){
+            userEntity.setEmail(adminUpdateUserDto.getEmail());
+        }
+        int insert = this.baseMapper.updateById(userEntity);
+        if(insert > 0){
+            return Result.ok("更新成功");
+        }
+        return Result.fail("更新失败");
+    }
+
+    @Override
+    @Transactional
+    public Result resetPassword(Long id) {
+        UserEntity userEntity =  this.baseMapper.selectById(id);
+        if(ObjectUtil.isEmpty(userEntity)){
+            return Result.fail("用户不存在");
+        }
+        userEntity.setPassword(Rot.encode13(UserEntity.PASSWORD_DEFAULT));
+        this.baseMapper.updateById(userEntity);
+        return Result.ok("重置成功");
+    }
+}
diff --git a/src/main/java/com/xcong/farmer/cms/modules/system/vo/AdminMenuInfoVo.java b/src/main/java/com/xcong/farmer/cms/modules/system/vo/AdminMenuInfoVo.java
new file mode 100644
index 0000000..0f86898
--- /dev/null
+++ b/src/main/java/com/xcong/farmer/cms/modules/system/vo/AdminMenuInfoVo.java
@@ -0,0 +1,17 @@
+package com.xcong.farmer.cms.modules.system.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel(value = "AdminMenuInfoVo", description = "返回")
+public class AdminMenuInfoVo {
+
+    @ApiModelProperty(value = "菜单ID")
+    private Long id;
+
+    @ApiModelProperty(value = "菜单名称")
+    private String menuName;
+
+}
diff --git a/src/main/java/com/xcong/farmer/cms/modules/system/vo/AdminMenuVo.java b/src/main/java/com/xcong/farmer/cms/modules/system/vo/AdminMenuVo.java
new file mode 100644
index 0000000..f880922
--- /dev/null
+++ b/src/main/java/com/xcong/farmer/cms/modules/system/vo/AdminMenuVo.java
@@ -0,0 +1,40 @@
+package com.xcong.farmer.cms.modules.system.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import java.util.Date;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import java.util.List;
+
+@Data
+@ApiModel(value = "AdminMenuVo", description = "系统菜单列表返回")
+public class AdminMenuVo {
+
+    @ApiModelProperty(value = "菜单ID")
+    private Long id;
+
+    //菜单按钮标题
+    @ApiModelProperty(value = "菜单按钮标题")
+    private String menuName;
+
+    //菜单类型 1:菜单 2:按钮
+    @ApiModelProperty(value = "菜单类型 1:菜单 2:按钮")
+    private Integer menuType;
+
+    //路由地址
+    @ApiModelProperty(value = "路由地址")
+    private String routeUrl;
+
+    //排序
+    @ApiModelProperty(value = "排序")
+    private Integer orderNum;
+
+    @ApiModelProperty(value = "创建时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date createTime;
+
+    @ApiModelProperty(value = "子菜单")
+    private List<AdminMenuVo> child;
+
+}
diff --git a/src/main/java/com/xcong/farmer/cms/modules/system/vo/AdminRoleVo.java b/src/main/java/com/xcong/farmer/cms/modules/system/vo/AdminRoleVo.java
new file mode 100644
index 0000000..3733f7d
--- /dev/null
+++ b/src/main/java/com/xcong/farmer/cms/modules/system/vo/AdminRoleVo.java
@@ -0,0 +1,26 @@
+package com.xcong.farmer.cms.modules.system.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import java.util.Date;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel(value = "AdminRoleVo", description = "系统角色列表返回")
+public class AdminRoleVo {
+
+    @ApiModelProperty(value = "角色ID")
+    private Long id;
+
+    @ApiModelProperty(value = "角色名称")
+    private String roleName;
+
+    @ApiModelProperty(value = "拓展备注")
+    private String remark;
+
+    @ApiModelProperty(value = "创建时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date createTime;
+
+}
diff --git a/src/main/java/com/xcong/farmer/cms/modules/system/vo/AdminSeeMenuInfoVo.java b/src/main/java/com/xcong/farmer/cms/modules/system/vo/AdminSeeMenuInfoVo.java
new file mode 100644
index 0000000..10e4a90
--- /dev/null
+++ b/src/main/java/com/xcong/farmer/cms/modules/system/vo/AdminSeeMenuInfoVo.java
@@ -0,0 +1,28 @@
+package com.xcong.farmer.cms.modules.system.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel(value = "AdminSeeMenuInfoVo", description = "系统菜单详情返回")
+public class AdminSeeMenuInfoVo {
+
+    @ApiModelProperty(value = "菜单ID")
+    private Long id;
+
+    @ApiModelProperty(value = "菜单按钮标题")
+    private String menuName;
+
+    @ApiModelProperty(value = "菜单类型 1:菜单 2:按钮")
+    private Integer menuType;
+
+    @ApiModelProperty(value = "路由地址")
+    private String routeUrl;
+
+    @ApiModelProperty(value = "排序")
+    private Integer orderNum;
+
+    @ApiModelProperty(value = "父级ID")
+    private Long parentId;
+}
diff --git a/src/main/java/com/xcong/farmer/cms/modules/system/vo/AdminSeeRoleInfoVo.java b/src/main/java/com/xcong/farmer/cms/modules/system/vo/AdminSeeRoleInfoVo.java
new file mode 100644
index 0000000..edee956
--- /dev/null
+++ b/src/main/java/com/xcong/farmer/cms/modules/system/vo/AdminSeeRoleInfoVo.java
@@ -0,0 +1,25 @@
+package com.xcong.farmer.cms.modules.system.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import java.util.List;
+
+
+@Data
+@ApiModel(value = "AdminSeeRoleInfoVo", description = "系统角色详情返回")
+public class AdminSeeRoleInfoVo {
+
+    @ApiModelProperty(value = "角色ID")
+    private Long id;
+
+    @ApiModelProperty(value = "角色名称")
+    private String roleName;
+
+    @ApiModelProperty(value = "拓展备注")
+    private String remark;
+
+    @ApiModelProperty(value = "菜单按钮")
+    private List<AdminMenuInfoVo> menuInfoVos;
+
+}
diff --git a/src/main/java/com/xcong/farmer/cms/modules/system/vo/AdminSeeUserInfoVo.java b/src/main/java/com/xcong/farmer/cms/modules/system/vo/AdminSeeUserInfoVo.java
new file mode 100644
index 0000000..9c616b5
--- /dev/null
+++ b/src/main/java/com/xcong/farmer/cms/modules/system/vo/AdminSeeUserInfoVo.java
@@ -0,0 +1,32 @@
+package com.xcong.farmer.cms.modules.system.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel(value = "AdminSeeUserInfoVo", description = "系统用户详情返回")
+public class AdminSeeUserInfoVo {
+
+    @ApiModelProperty(value = "用户ID")
+    private Long id;
+
+    @ApiModelProperty(value = "用户名")
+    private String username;
+
+    @ApiModelProperty(value = "昵称")
+    private String nickname;
+
+    @ApiModelProperty(value = "联系电话")
+    private String phone;
+
+    @ApiModelProperty(value = "邮箱")
+    private String email;
+
+    @ApiModelProperty(value = "角色ID")
+    private Long roleId;
+
+    @ApiModelProperty(value = "角色名称")
+    private String roleName;
+
+}
diff --git a/src/main/java/com/xcong/farmer/cms/modules/system/vo/AdminUserVo.java b/src/main/java/com/xcong/farmer/cms/modules/system/vo/AdminUserVo.java
new file mode 100644
index 0000000..9f22a8e
--- /dev/null
+++ b/src/main/java/com/xcong/farmer/cms/modules/system/vo/AdminUserVo.java
@@ -0,0 +1,38 @@
+package com.xcong.farmer.cms.modules.system.vo;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import java.util.Date;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel(value = "AdminUserVo", description = "系统用户列表返回")
+public class AdminUserVo {
+
+    @ApiModelProperty(value = "用户ID")
+    private Long id;
+
+    @ApiModelProperty(value = "用户名")
+    private String username;
+
+    @ApiModelProperty(value = "昵称")
+    private String nickname;
+
+    @ApiModelProperty(value = "联系电话")
+    private String phone;
+
+    @ApiModelProperty(value = "邮箱")
+    private String email;
+
+    @ApiModelProperty(value = "角色名称")
+    private String roleName;
+
+    @ApiModelProperty(value = "账号状态 0:禁用 1:激活")
+    private Integer status;
+
+    @ApiModelProperty(value = "创建时间")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date createTime;
+
+}
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index c941319..0086006 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -5,7 +5,7 @@
 
 spring:
   datasource:
-    url: jdbc:mysql://120.27.238.55:3306/kss_framework?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2b8
+    url: jdbc:mysql://120.27.238.55:3306/farmer-cms?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2b8
     username: ct_test
     password: 123456
     driver-class-name: com.mysql.jdbc.Driver
diff --git a/src/main/resources/mapper/MenuMapper.xml b/src/main/resources/mapper/MenuMapper.xml
new file mode 100644
index 0000000..74e8534
--- /dev/null
+++ b/src/main/resources/mapper/MenuMapper.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.xcong.farmer.cms.modules.system.mapper.MenuMapper">
+
+    <select id="selectAdminMenuVoInPage" resultType="com.xcong.farmer.cms.modules.system.vo.AdminMenuVo">
+        SELECT
+        a.*
+        FROM
+        t_menu a
+        <where>
+            <if test="record != null" >
+                <if test="record.parentId != null">
+                    and a.parent_id = #{record.parentId}
+                </if>
+            </if>
+        </where>
+        order by a.create_time desc
+    </select>
+
+</mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/RoleMapper.xml b/src/main/resources/mapper/RoleMapper.xml
new file mode 100644
index 0000000..92d5440
--- /dev/null
+++ b/src/main/resources/mapper/RoleMapper.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.xcong.farmer.cms.modules.system.mapper.RoleMapper">
+
+    <select id="selectAdminRoleVoInPage" resultType="com.xcong.farmer.cms.modules.system.vo.AdminRoleVo">
+        SELECT
+        a.*
+        FROM
+        t_role a
+        <where>
+            <if test="record != null" >
+                <if test="record.roleName!=null">
+                    and a.role_name like concat ('%',#{record.roleName},'%')
+                </if>
+            </if>
+        </where>
+        order by a.create_time desc
+    </select>
+
+</mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/RoleMenuMapper.xml b/src/main/resources/mapper/RoleMenuMapper.xml
new file mode 100644
index 0000000..c46bda2
--- /dev/null
+++ b/src/main/resources/mapper/RoleMenuMapper.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.xcong.farmer.cms.modules.system.mapper.RoleMenuMapper">
+
+    <select id="selectListByRoleId" resultType="com.xcong.farmer.cms.modules.system.entity.RoleMenuEntity">
+        SELECT a.* FROM t_role_menu a where a.role_id = #{roleId}
+    </select>
+
+    <delete id="deleteByMenuId">
+        DELETE FROM t_role_menu where menu_id=#{menuId}
+    </delete>
+
+</mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/UserMapper.xml b/src/main/resources/mapper/UserMapper.xml
new file mode 100644
index 0000000..d417a2a
--- /dev/null
+++ b/src/main/resources/mapper/UserMapper.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.xcong.farmer.cms.modules.system.mapper.UserMapper">
+
+    <select id="selectAdminUserVoInPage" resultType="com.xcong.farmer.cms.modules.system.vo.AdminUserVo">
+        SELECT
+        a.*
+        FROM
+        t_user a
+        <where>
+            <if test="record != null" >
+                <if test="record.username!=null">
+                    and a.username like concat ('%',#{record.username},'%')
+                </if>
+            </if>
+        </where>
+        order by a.create_time desc
+    </select>
+
+</mapper>
\ No newline at end of file
diff --git a/src/main/resources/mapper/UserRoleMapper.xml b/src/main/resources/mapper/UserRoleMapper.xml
new file mode 100644
index 0000000..b1f80af
--- /dev/null
+++ b/src/main/resources/mapper/UserRoleMapper.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.xcong.farmer.cms.modules.system.mapper.UserRoleMapper">
+
+</mapper>
\ No newline at end of file

--
Gitblit v1.9.1