feat: 全量提交

This commit is contained in:
horizons
2022-10-24 07:50:54 +08:00
commit de9157143a
128 changed files with 7493 additions and 0 deletions

View File

@@ -0,0 +1,47 @@
package com.youlai.system.controller;
import com.youlai.system.common.result.Result;
import com.youlai.system.security.jwt.JwtTokenManager;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.web.bind.annotation.*;
@Api(tags = "认证管理")
@RestController
@RequestMapping("/api/v1/auth")
@RequiredArgsConstructor
public class AuthController {
private final AuthenticationManager authenticationManager;
private final JwtTokenManager jwtTokenManager;
@ApiOperation(value = "登录",notes = "生成token")
@PostMapping("/login")
public Result login(
@RequestParam String username,
@RequestParam String password
) {
UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(username,
password);
Authentication authentication = authenticationManager.authenticate(authenticationToken);
SecurityContextHolder.getContext().setAuthentication(authentication);
// 生成token
String token = jwtTokenManager.createToken(authentication);
return Result.success("Bearer " + token);
}
@ApiOperation(value = "注销")
@DeleteMapping("/logout")
public Result login() {
SecurityContextHolder.clearContext();
return Result.success("注销成功");
}
}

View File

@@ -0,0 +1,83 @@
package com.youlai.system.controller;
import com.youlai.system.common.model.Option;
import com.youlai.system.common.result.Result;
import com.youlai.system.pojo.form.DeptForm;
import com.youlai.system.pojo.query.DeptQuery;
import com.youlai.system.pojo.vo.dept.DeptVO;
import com.youlai.system.service.SysDeptService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import java.util.List;
/**
* 部门控制器
*
* @author haoxr
* @date 2020/11/6
*/
@Api(tags = "部门接口")
@RestController
@RequestMapping("/api/v1/dept")
@RequiredArgsConstructor
public class SysDeptController {
private final SysDeptService deptService;
@ApiOperation(value = "获取部门列表")
@GetMapping
public Result<List<DeptVO>> listDepartments(DeptQuery queryParams) {
List<DeptVO> list = deptService.listDepartments(queryParams);
return Result.success(list);
}
@ApiOperation(value = "获取部门下拉选项")
@GetMapping("/options")
public Result<List<Option>> listDeptOptions() {
List<Option> list = deptService.listDeptOptions();
return Result.success(list);
}
@ApiOperation(value = "获取部门详情")
@GetMapping("/{deptId}/form")
public Result<DeptForm> getDeptForm(
@ApiParam("部门ID") @PathVariable Long deptId
) {
DeptForm deptForm = deptService.getDeptForm(deptId);
return Result.success(deptForm);
}
@ApiOperation(value = "新增部门")
@PostMapping
public Result saveDept(
@Valid @RequestBody DeptForm formData
) {
Long id = deptService.saveDept(formData);
return Result.success(id);
}
@ApiOperation(value = "修改部门")
@PutMapping(value = "/{deptId}")
public Result updateDept(
@PathVariable Long deptId,
@Valid @RequestBody DeptForm formData
) {
deptId = deptService.updateDept(deptId, formData);
return Result.success(deptId);
}
@ApiOperation(value = "删除部门")
@DeleteMapping("/{ids}")
public Result deleteDepartments(
@ApiParam("部门ID多个以英文逗号(,)分割") @PathVariable("ids") String ids
) {
boolean result = deptService.deleteByIds(ids);
return Result.judge(result);
}
}

View File

@@ -0,0 +1,70 @@
package com.youlai.system.controller;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.youlai.system.common.result.PageResult;
import com.youlai.system.common.result.Result;
import com.youlai.system.pojo.form.DictItemForm;
import com.youlai.system.pojo.query.DictItemPageQuery;
import com.youlai.system.pojo.vo.dict.DictItemPageVO;
import com.youlai.system.service.SysDictItemService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
@Api(tags = "字典数据接口")
@RestController
@RequestMapping("/api/v1/dict/items")
@RequiredArgsConstructor
public class SysDictItemController {
private final SysDictItemService dictItemService;
@ApiOperation(value = "字典数据分页列表")
@GetMapping("/pages")
public PageResult<DictItemPageVO> listDictItemPages(
DictItemPageQuery queryParams
) {
Page<DictItemPageVO> result = dictItemService.listDictItemPages(queryParams);
return PageResult.success(result);
}
@ApiOperation(value = "字典数据表单数据")
@GetMapping("/{id}/form")
public Result<DictItemForm> getDictItemForm(
@ApiParam("字典ID") @PathVariable Long id
) {
DictItemForm formData = dictItemService.getDictItemForm(id);
return Result.success(formData);
}
@ApiOperation(value = "新增字典数据")
@PostMapping
public Result saveDictItem(
@RequestBody DictItemForm DictItemForm
) {
boolean result = dictItemService.saveDictItem(DictItemForm);
return Result.judge(result);
}
@ApiOperation(value = "修改字典数据")
@PutMapping("/{id}")
public Result updateDictItem(
@PathVariable Long id,
@RequestBody DictItemForm DictItemForm
) {
boolean status = dictItemService.updateDictItem(id, DictItemForm);
return Result.judge(status);
}
@ApiOperation(value = "删除字典")
@DeleteMapping("/{ids}")
public Result deleteDictItems(
@ApiParam("字典ID多个以英文逗号(,)拼接") @PathVariable String ids
) {
boolean result = dictItemService.deleteDictItems(ids);
return Result.judge(result);
}
}

View File

@@ -0,0 +1,74 @@
package com.youlai.system.controller;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.youlai.system.common.model.Option;
import com.youlai.system.common.result.PageResult;
import com.youlai.system.common.result.Result;
import com.youlai.system.pojo.form.DictTypeForm;
import com.youlai.system.pojo.query.DictTypePageQuery;
import com.youlai.system.pojo.vo.dict.DictTypePageVO;
import com.youlai.system.service.SysDictTypeService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@Api(tags = "字典类型接口")
@RestController
@RequestMapping("/api/v1/dict/types")
@RequiredArgsConstructor
public class SysDictTypeController {
private final SysDictTypeService dictTypeService;
@ApiOperation(value = "字典类型分页列表")
@GetMapping("/pages")
public PageResult<DictTypePageVO> listDictTypePages(DictTypePageQuery queryParams) {
Page<DictTypePageVO> result = dictTypeService.listDictTypePages(queryParams);
return PageResult.success(result);
}
@ApiOperation(value = "字典类型表单详情")
@GetMapping("/{id}/form")
public Result<DictTypeForm> getDictTypeFormData(
@ApiParam("字典ID") @PathVariable Long id
) {
DictTypeForm dictTypeForm = dictTypeService.getDictTypeFormData(id);
return Result.success(dictTypeForm);
}
@ApiOperation(value = "新增字典类型")
@PostMapping
public Result saveDictType(@RequestBody DictTypeForm dictTypeForm) {
boolean result = dictTypeService.saveDictType(dictTypeForm);
return Result.judge(result);
}
@ApiOperation(value = "修改字典类型")
@PutMapping("/{id}")
public Result updateDict(@PathVariable Long id, @RequestBody DictTypeForm dictTypeForm) {
boolean status = dictTypeService.updateDictType(id, dictTypeForm);
return Result.judge(status);
}
@ApiOperation(value = "删除字典类型")
@DeleteMapping("/{ids}")
public Result deleteDictTypes(
@ApiParam("字典类型ID多个以英文逗号(,)分割") @PathVariable String ids
) {
boolean result = dictTypeService.deleteDictTypes(ids);
return Result.judge(result);
}
@ApiOperation(value = "获取字典类型的数据项")
@GetMapping("/{typeCode}/items")
public Result<List<Option>> listDictItemsByTypeCode(
@ApiParam("字典类型编码") @PathVariable String typeCode
) {
List<Option> list = dictTypeService.listDictItemsByTypeCode(typeCode);
return Result.success(list);
}
}

View File

@@ -0,0 +1,116 @@
package com.youlai.system.controller;
import com.youlai.system.common.model.Option;
import com.youlai.system.common.result.Result;
import com.youlai.system.pojo.entity.SysMenu;
import com.youlai.system.pojo.vo.menu.MenuVO;
import com.youlai.system.pojo.vo.menu.ResourceVO;
import com.youlai.system.pojo.vo.menu.RouteVO;
import com.youlai.system.service.SysMenuService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cache.annotation.CacheEvict;
import org.springframework.web.bind.annotation.*;
import java.util.Arrays;
import java.util.List;
/**
* 菜单控制器
*
* @author haoxr
* @date 2020/11/06
*/
@Api(tags = "菜单接口")
@RestController
@RequestMapping("/api/v1/menus")
@RequiredArgsConstructor
@Slf4j
public class SysMenuController {
private final SysMenuService menuService;
@ApiOperation(value = "资源(菜单+权限)列表")
@GetMapping("/resources")
public Result<List<ResourceVO>> listResources() {
List<ResourceVO> resources = menuService.listResources();
return Result.success(resources);
}
@ApiOperation(value = "菜单列表")
@GetMapping
public Result listMenus(
@ApiParam("菜单名称") String name
) {
List<MenuVO> menuList = menuService.listMenus(name);
return Result.success(menuList);
}
@ApiOperation(value = "菜单下拉列表")
@GetMapping("/options")
public Result listMenuOptions() {
List<Option> menus = menuService.listMenuOptions();
return Result.success(menus);
}
@ApiOperation(value = "路由列表")
@GetMapping("/routes")
public Result listRoutes() {
List<RouteVO> routeList = menuService.listRoutes();
return Result.success(routeList);
}
@ApiOperation(value = "菜单详情")
@GetMapping("/{id}")
public Result detail(
@ApiParam(value = "菜单ID") @PathVariable Long id
) {
SysMenu menu = menuService.getById(id);
return Result.success(menu);
}
@ApiOperation(value = "新增菜单")
@PostMapping
@CacheEvict(cacheNames = "system", key = "'routes'")
public Result addMenu(@RequestBody SysMenu menu) {
boolean result = menuService.saveMenu(menu);
return Result.judge(result);
}
@ApiOperation(value = "修改菜单")
@PutMapping(value = "/{id}")
@CacheEvict(cacheNames = "system", key = "'routes'")
public Result updateMenu(
@RequestBody SysMenu menu
) {
boolean result = menuService.saveMenu(menu);
return Result.judge(result);
}
@ApiOperation(value = "删除菜单")
@DeleteMapping("/{ids}")
@CacheEvict(cacheNames = "system", key = "'routes'")
public Result deleteMenus(
@ApiParam("菜单ID多个以英文(,)分割") @PathVariable("ids") String ids
) {
boolean result = menuService.removeByIds(Arrays.asList(ids.split(",")));
return Result.judge(result);
}
@ApiOperation(value = "修改菜单显示状态")
@PatchMapping("/{menuId}")
public Result updateMenuVisible(
@ApiParam(value = "菜单ID") @PathVariable Long menuId,
@ApiParam(value = "显示状态(1:显示;0:隐藏)") Integer visible
) {
boolean result =menuService.updateMenuVisible(menuId, visible);
return Result.judge(result);
}
}

View File

@@ -0,0 +1,104 @@
package com.youlai.system.controller;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.youlai.system.common.model.Option;
import com.youlai.system.common.result.PageResult;
import com.youlai.system.common.result.Result;
import com.youlai.system.pojo.entity.SysRole;
import com.youlai.system.pojo.form.RoleForm;
import com.youlai.system.pojo.form.RoleResourceForm;
import com.youlai.system.pojo.query.RolePageQuery;
import com.youlai.system.pojo.vo.role.RolePageVO;
import com.youlai.system.service.SysRoleService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import java.util.List;
@Api(tags = "角色接口")
@RestController
@RequestMapping("/api/v1/roles")
@RequiredArgsConstructor
public class SysRoleController {
private final SysRoleService sysRoleService;
@ApiOperation(value = "角色分页列表")
@GetMapping("/pages")
public PageResult<RolePageVO> listRolePages(RolePageQuery queryParams) {
Page<RolePageVO> result = sysRoleService.listRolePages(queryParams);
return PageResult.success(result);
}
@ApiOperation(value = "角色下拉列表")
@GetMapping("/options")
public Result<List<Option>> listRoleOptions() {
List<Option> list = sysRoleService.listRoleOptions();
return Result.success(list);
}
@ApiOperation(value = "角色详情")
@GetMapping("/{roleId}")
public Result getRoleDetail(
@ApiParam("角色ID") @PathVariable Long roleId
) {
SysRole role = sysRoleService.getById(roleId);
return Result.success(role);
}
@ApiOperation(value = "新增角色")
@PostMapping
public Result addRole(@Valid @RequestBody RoleForm roleForm) {
boolean result = sysRoleService.saveRole(roleForm);
return Result.judge(result);
}
@ApiOperation(value = "修改角色")
@PutMapping(value = "/{id}")
public Result updateRole(@Valid @RequestBody RoleForm roleForm) {
boolean result = sysRoleService.saveRole(roleForm);
return Result.judge(result);
}
@ApiOperation(value = "删除角色")
@DeleteMapping("/{ids}")
public Result deleteRoles(
@ApiParam("删除角色,多个以英文逗号(,)分割") @PathVariable String ids
) {
boolean result = sysRoleService.deleteRoles(ids);
return Result.judge(result);
}
@ApiOperation(value = "修改角色状态")
@PutMapping(value = "/{roleId}/status")
public Result updateRoleStatus(
@ApiParam("角色ID") @PathVariable Long roleId,
@ApiParam("角色状态:1-正常0-禁用") @RequestParam Integer status
) {
boolean result = sysRoleService.updateRoleStatus(roleId, status);
return Result.judge(result);
}
@ApiOperation(value = "获取角色的资源ID集合", notes = "资源包括菜单和权限ID")
@GetMapping("/{roleId}/resources")
public Result<RoleResourceForm> getRoleResources(
@ApiParam("角色ID") @PathVariable Long roleId
) {
RoleResourceForm resourceIds = sysRoleService.getRoleResources(roleId);
return Result.success(resourceIds);
}
@ApiOperation(value = "分配角色的资源权限")
@PutMapping("/{roleId}/resources")
public Result updateRoleResource(
@PathVariable Long roleId,
@RequestBody RoleResourceForm roleResourceForm
) {
boolean result = sysRoleService.updateRoleResource(roleId,roleResourceForm);
return Result.judge(result);
}
}

View File

@@ -0,0 +1,153 @@
package com.youlai.system.controller;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.youlai.system.common.result.PageResult;
import com.youlai.system.common.result.Result;
import com.youlai.system.pojo.dto.UserImportDTO;
import com.youlai.system.pojo.form.UserForm;
import com.youlai.system.pojo.entity.SysUser;
import com.youlai.system.pojo.query.UserPageQuery;
import com.youlai.system.pojo.vo.user.UserExportVO;
import com.youlai.system.pojo.vo.user.UserLoginVO;
import com.youlai.system.pojo.vo.user.UserVO;
import com.youlai.system.service.SysUserService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.net.URLEncoder;
import java.util.List;
/**
* 用户控制器
*
* @author haoxr
* @date 2022/10/16
*/
@Api(tags = "用户接口")
@RestController
@RequestMapping("/api/v1/users")
@RequiredArgsConstructor
public class SysUserController {
private final SysUserService userService;
@ApiOperation(value = "用户分页列表")
@GetMapping("/pages")
public PageResult<UserVO> listUserPages(UserPageQuery queryParams) {
IPage<UserVO> result = userService.listUserPages(queryParams);
return PageResult.success(result);
}
@ApiOperation(value = "用户表单数据")
@GetMapping("/{userId}/form")
public Result<UserForm> getUserDetail(
@ApiParam(value = "用户ID") @PathVariable Long userId
) {
UserForm formData = userService.getUserFormData(userId);
return Result.success(formData);
}
@ApiOperation(value = "新增用户")
@PostMapping
public Result saveUser(
@RequestBody @Valid UserForm userForm
) {
boolean result = userService.saveUser(userForm);
return Result.judge(result);
}
@ApiOperation(value = "修改用户")
@PutMapping(value = "/{userId}")
public Result updateUser(
@ApiParam("用户ID") @PathVariable Long userId,
@RequestBody @Validated UserForm userForm) {
boolean result = userService.updateUser(userId, userForm);
return Result.judge(result);
}
@ApiOperation(value = "删除用户")
@DeleteMapping("/{ids}")
public Result deleteUsers(
@ApiParam("用户ID多个以英文逗号(,)分割") @PathVariable String ids
) {
boolean result = userService.deleteUsers(ids);
return Result.judge(result);
}
@ApiOperation(value = "修改用户密码")
@PatchMapping(value = "/{userId}/password")
public Result updatePassword(
@ApiParam("用户ID") @PathVariable Long userId,
@RequestParam String password
) {
boolean result = userService.updatePassword(userId, password);
return Result.judge(result);
}
@ApiOperation(value = "修改用户状态")
@PatchMapping(value = "/{userId}/status")
public Result updatePassword(
@ApiParam("用户ID") @PathVariable Long userId,
@ApiParam("用户状态(1:启用;0:禁用)") @RequestParam Integer status
) {
boolean result = userService.update(new LambdaUpdateWrapper<SysUser>()
.eq(SysUser::getId, userId)
.set(SysUser::getStatus, status)
);
return Result.judge(result);
}
@ApiOperation(value = "获取登录用户信息")
@GetMapping("/me")
public Result<UserLoginVO> getUserLoginInfo() {
UserLoginVO userLoginVO = userService.getUserLoginInfo();
return Result.success(userLoginVO);
}
@ApiOperation("用户导入模板下载")
@GetMapping("/template")
public void downloadTemplate(HttpServletResponse response) throws IOException {
String fileName = "用户导入模板.xlsx";
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(fileName, "UTF-8"));
String fileClassPath = "excel-templates" + File.separator + fileName;
InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream(fileClassPath);
ServletOutputStream outputStream = response.getOutputStream();
ExcelWriter excelWriter = EasyExcel.write(outputStream).withTemplate(inputStream).build();
excelWriter.finish();
}
@ApiOperation("导入用户")
@PostMapping("/_import")
public Result importUsers(UserImportDTO userImportDTO) throws IOException {
String msg = userService.importUsers(userImportDTO);
return Result.success(msg);
}
@ApiOperation("导出用户")
@GetMapping("/_export")
public void exportUsers(UserPageQuery queryParams, HttpServletResponse response) throws IOException {
String fileName = "用户列表.xlsx";
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(fileName, "UTF-8"));
List<UserExportVO> exportUserList = userService.listExportUsers(queryParams);
EasyExcel.write(response.getOutputStream(), UserExportVO.class).sheet("用户列表").doWrite(exportUserList);
}
}