提交 9ffc3622 作者: 方治民

feat: 变更主键 id 类型为 string 适配前端 ts 传参问题、增加 tag 默认排序及描述文字兼容(Pont)

上级 2ac056c0
...@@ -27,7 +27,7 @@ dependencies { ...@@ -27,7 +27,7 @@ dependencies {
// Optional: Doc // Optional: Doc
implementation project(":basic-common:doc") implementation project(":basic-common:doc")
implementation "io.swagger:swagger-annotations:${swaggerAnnotationsVersion}" implementation "com.github.xiaoymin:knife4j-spring-boot-starter:${knife4jVersion}"
// Optional: Auth // Optional: Auth
implementation project(":basic-auth") implementation project(":basic-auth")
......
/* (C) 2021 YiRing, Inc. */ /* (C) 2021 YiRing, Inc. */
package com.yiring.app.web; package com.yiring.app.web;
import com.github.xiaoymin.knife4j.annotations.ApiSupport;
import com.yiring.app.constant.Code; import com.yiring.app.constant.Code;
import com.yiring.app.domain.TestTable; import com.yiring.app.domain.TestTable;
import com.yiring.app.exception.CodeException; import com.yiring.app.exception.CodeException;
...@@ -27,6 +28,8 @@ import org.springframework.web.bind.annotation.RestController; ...@@ -27,6 +28,8 @@ import org.springframework.web.bind.annotation.RestController;
@Slf4j @Slf4j
@Validated @Validated
@SuppressWarnings({ "deprecation" })
@ApiSupport(order = 0)
@Api(tags = "示例", description = "Example") @Api(tags = "示例", description = "Example")
@RequestMapping("/example/") @RequestMapping("/example/")
@RestController @RestController
......
...@@ -35,7 +35,7 @@ knife4j: ...@@ -35,7 +35,7 @@ knife4j:
username: admin username: admin
password: 123456 password: 123456
setting: setting:
enableOpenApi: false enableOpenApi: true
enableDebug: true enableDebug: true
# minio # minio
......
...@@ -13,7 +13,7 @@ spring: ...@@ -13,7 +13,7 @@ spring:
name: "basic-api-app" name: "basic-api-app"
profiles: profiles:
include: auth, conf-patch include: auth, conf-patch
active: test active: mock
# DEBUG # DEBUG
debug: false debug: false
...@@ -8,8 +8,8 @@ dependencies { ...@@ -8,8 +8,8 @@ dependencies {
// 本地依赖 // 本地依赖
implementation fileTree(dir: project.rootDir.getPath() + '\\libs', includes: ['*jar']) implementation fileTree(dir: project.rootDir.getPath() + '\\libs', includes: ['*jar'])
// swagger annotations // swagger(knife4j)
implementation "io.swagger:swagger-annotations:${swaggerAnnotationsVersion}" implementation "com.github.xiaoymin:knife4j-spring-boot-starter:${knife4jVersion}"
// sa-token // sa-token
implementation "cn.dev33:sa-token-spring-boot-starter:${saTokenVersion}" implementation "cn.dev33:sa-token-spring-boot-starter:${saTokenVersion}"
......
...@@ -34,11 +34,11 @@ public class SaTokenConfigure implements WebMvcConfigurer { ...@@ -34,11 +34,11 @@ public class SaTokenConfigure implements WebMvcConfigurer {
// TODO // TODO
// .notMatch("/**") // .notMatch("/**")
// 示例接口 // 示例接口
.notMatch("/hello/**") .notMatch("/example/**")
// 授权相关接口(登录、登出、注册等) // 授权相关接口(登录、登出、注册等)
.notMatch("/auth/**") .notMatch("/auth/**")
.notMatch("/favicon.ico", "/**/*.html", "/**/*.js", "/**/*.css") .notMatch("/favicon.ico", "/**/*.html", "/**/*.js", "/**/*.css")
.notMatch("/v2/api-docs", "/v3/api-docs", "/swagger-resources/**") .notMatch("/v2/api-docs/**", "/v3/api-docs/**", "/swagger-resources/**")
.check(r -> StpUtil.checkLogin()); .check(r -> StpUtil.checkLogin());
}) })
) )
......
...@@ -52,7 +52,7 @@ public class StpInterfaceImpl implements StpInterface { ...@@ -52,7 +52,7 @@ public class StpInterfaceImpl implements StpInterface {
* @return 用户信息 * @return 用户信息
*/ */
private User getUser(Object loginId) { private User getUser(Object loginId) {
Long id = Long.parseLong(Objects.toString(loginId)); String id = Objects.toString(loginId);
Optional<User> optional = userRepository.findById(id); Optional<User> optional = userRepository.findById(id);
if (optional.isEmpty()) { if (optional.isEmpty()) {
throw new RuntimeException("用户不存在"); throw new RuntimeException("用户不存在");
......
...@@ -81,7 +81,7 @@ public class Permission extends BasicEntity implements Serializable { ...@@ -81,7 +81,7 @@ public class Permission extends BasicEntity implements Serializable {
Boolean enable; Boolean enable;
@Comment("权限父级ID") @Comment("权限父级ID")
Long pid; String pid;
@Comment("树节点标识") @Comment("树节点标识")
String tree; String tree;
......
...@@ -66,11 +66,8 @@ public class PermissionParam implements Serializable { ...@@ -66,11 +66,8 @@ public class PermissionParam implements Serializable {
@ApiModelProperty(value = "父级ID", example = "0") @ApiModelProperty(value = "父级ID", example = "0")
@Builder.Default @Builder.Default
Long pid = 0L; String pid = "0";
@ApiModelProperty( @ApiModelProperty(value = "元数据", example = "{\"title\": \"routes.dashboard.dashboard\"}")
value = "元数据",
example = "{\"title\": \"routes.dashboard.dashboard\", \"hideChildrenInMenu\": true}"
)
String meta; String meta;
} }
...@@ -59,7 +59,7 @@ public class Permissions { ...@@ -59,7 +59,7 @@ public class Permissions {
ArrayList<MenuVo> roots = new ArrayList<>(); ArrayList<MenuVo> roots = new ArrayList<>();
// 将数据添加到 Map // 将数据添加到 Map
Map<Long, MenuVo> map = list.stream().collect(Collectors.toMap(MenuVo::getId, Function.identity())); Map<String, MenuVo> map = list.stream().collect(Collectors.toMap(MenuVo::getId, Function.identity()));
list.forEach(entity -> { list.forEach(entity -> {
MenuVo menu = map.get(entity.getPid()); MenuVo menu = map.get(entity.getPid());
...@@ -115,7 +115,7 @@ public class Permissions { ...@@ -115,7 +115,7 @@ public class Permissions {
* @param pid 权限父级 ID * @param pid 权限父级 ID
* @return 树状权限集合 * @return 树状权限集合
*/ */
public List<PermissionVo> toTree(List<Permission> permissions, @NonNull Long pid) { public List<PermissionVo> toTree(List<Permission> permissions, @NonNull String pid) {
return permissions return permissions
.stream() .stream()
.filter(permission -> pid.equals(permission.getPid())) .filter(permission -> pid.equals(permission.getPid()))
......
/* (C) 2021 YiRing, Inc. */ /* (C) 2021 YiRing, Inc. */
package com.yiring.auth.vo.auth; package com.yiring.auth.vo.auth;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import java.io.Serial; import java.io.Serial;
...@@ -29,9 +27,8 @@ public class LoginVo implements Serializable { ...@@ -29,9 +27,8 @@ public class LoginVo implements Serializable {
@Serial @Serial
private static final long serialVersionUID = -8690942241103456896L; private static final long serialVersionUID = -8690942241103456896L;
@JsonSerialize(using = ToStringSerializer.class) @ApiModelProperty(value = "用户 ID", example = "1")
@ApiModelProperty(value = "主键", example = "1") String userId;
Long userId;
@ApiModelProperty(value = "token", example = "c68ca9c8c04b4a59afeafd2fb7c04741") @ApiModelProperty(value = "token", example = "c68ca9c8c04b4a59afeafd2fb7c04741")
String token; String token;
......
...@@ -32,10 +32,10 @@ public class MenuVo implements Serializable { ...@@ -32,10 +32,10 @@ public class MenuVo implements Serializable {
private static final long serialVersionUID = -9139328772148985141L; private static final long serialVersionUID = -9139328772148985141L;
@JsonIgnore @JsonIgnore
Long id; String id;
@JsonIgnore @JsonIgnore
Long pid; String pid;
@ApiModelProperty(value = "名称", example = "Dashboard") @ApiModelProperty(value = "名称", example = "Dashboard")
String name; String name;
...@@ -49,10 +49,7 @@ public class MenuVo implements Serializable { ...@@ -49,10 +49,7 @@ public class MenuVo implements Serializable {
@ApiModelProperty(value = "组件", example = "LAYOUT") @ApiModelProperty(value = "组件", example = "LAYOUT")
String component; String component;
@ApiModelProperty( @ApiModelProperty(value = "元数据", example = "{\"title\": \"routes.dashboard.dashboard\"}")
value = "元数据",
example = "{\"title\": \"routes.dashboard.dashboard\", \"hideChildrenInMenu\": true}"
)
JSONObject meta; JSONObject meta;
@ApiModelProperty(value = "子权限") @ApiModelProperty(value = "子权限")
......
...@@ -3,8 +3,6 @@ package com.yiring.auth.vo.permission; ...@@ -3,8 +3,6 @@ package com.yiring.auth.vo.permission;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.yiring.auth.domain.permission.Permission; import com.yiring.auth.domain.permission.Permission;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
...@@ -33,9 +31,8 @@ public class PermissionVo implements Serializable { ...@@ -33,9 +31,8 @@ public class PermissionVo implements Serializable {
@Serial @Serial
private static final long serialVersionUID = -9139328772148985141L; private static final long serialVersionUID = -9139328772148985141L;
@JsonSerialize(using = ToStringSerializer.class)
@ApiModelProperty(value = "主键", example = "1") @ApiModelProperty(value = "主键", example = "1")
Long id; String id;
@ApiModelProperty(value = "权限类型", example = "MENU") @ApiModelProperty(value = "权限类型", example = "MENU")
Permission.Type type; Permission.Type type;
...@@ -65,7 +62,7 @@ public class PermissionVo implements Serializable { ...@@ -65,7 +62,7 @@ public class PermissionVo implements Serializable {
Boolean enable; Boolean enable;
@ApiModelProperty(value = "父级ID", example = "0") @ApiModelProperty(value = "父级ID", example = "0")
Long pid; String pid;
@ApiModelProperty(value = "元数据", example = "{}") @ApiModelProperty(value = "元数据", example = "{}")
JSONObject meta; JSONObject meta;
......
/* (C) 2022 YiRing, Inc. */ /* (C) 2022 YiRing, Inc. */
package com.yiring.auth.vo.role; package com.yiring.auth.vo.role;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.yiring.auth.vo.permission.PermissionVo; import com.yiring.auth.vo.permission.PermissionVo;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
...@@ -30,9 +28,8 @@ public class RoleVo implements Serializable { ...@@ -30,9 +28,8 @@ public class RoleVo implements Serializable {
@Serial @Serial
private static final long serialVersionUID = -9154497137563970840L; private static final long serialVersionUID = -9154497137563970840L;
@JsonSerialize(using = ToStringSerializer.class)
@ApiModelProperty(value = "主键", example = "1") @ApiModelProperty(value = "主键", example = "1")
Long id; String id;
@ApiModelProperty(value = "标识", example = "admin") @ApiModelProperty(value = "标识", example = "admin")
String uid; String uid;
......
/* (C) 2022 YiRing, Inc. */ /* (C) 2022 YiRing, Inc. */
package com.yiring.auth.vo.user; package com.yiring.auth.vo.user;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.yiring.auth.vo.role.RoleVo; import com.yiring.auth.vo.role.RoleVo;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
...@@ -30,9 +28,8 @@ public class UserInfoVo implements Serializable { ...@@ -30,9 +28,8 @@ public class UserInfoVo implements Serializable {
@Serial @Serial
private static final long serialVersionUID = -5319037883240327088L; private static final long serialVersionUID = -5319037883240327088L;
@JsonSerialize(using = ToStringSerializer.class)
@ApiModelProperty(value = "主键", example = "1") @ApiModelProperty(value = "主键", example = "1")
Long userId; String userId;
@ApiModelProperty(value = "真实姓名", example = "超级用户") @ApiModelProperty(value = "真实姓名", example = "超级用户")
String realName; String realName;
......
/* (C) 2022 YiRing, Inc. */ /* (C) 2022 YiRing, Inc. */
package com.yiring.auth.vo.user; package com.yiring.auth.vo.user;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.yiring.auth.vo.role.RoleVo; import com.yiring.auth.vo.role.RoleVo;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
...@@ -30,9 +28,8 @@ public class UserMenuListVo implements Serializable { ...@@ -30,9 +28,8 @@ public class UserMenuListVo implements Serializable {
@Serial @Serial
private static final long serialVersionUID = -5319037883240327088L; private static final long serialVersionUID = -5319037883240327088L;
@JsonSerialize(using = ToStringSerializer.class)
@ApiModelProperty(value = "主键", example = "1") @ApiModelProperty(value = "主键", example = "1")
Long userId; String userId;
@ApiModelProperty(value = "真实姓名", example = "超级用户") @ApiModelProperty(value = "真实姓名", example = "超级用户")
String realName; String realName;
......
/* (C) 2022 YiRing, Inc. */ /* (C) 2022 YiRing, Inc. */
package com.yiring.auth.vo.user; package com.yiring.auth.vo.user;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import java.io.Serial; import java.io.Serial;
...@@ -28,9 +26,8 @@ public class UserVo implements Serializable { ...@@ -28,9 +26,8 @@ public class UserVo implements Serializable {
@Serial @Serial
private static final long serialVersionUID = -2184378273450466835L; private static final long serialVersionUID = -2184378273450466835L;
@JsonSerialize(using = ToStringSerializer.class)
@ApiModelProperty(value = "主键", example = "1") @ApiModelProperty(value = "主键", example = "1")
Long id; String id;
@ApiModelProperty(value = "真实姓名", example = "超级用户") @ApiModelProperty(value = "真实姓名", example = "超级用户")
String realName; String realName;
......
...@@ -4,6 +4,7 @@ package com.yiring.auth.web.auth; ...@@ -4,6 +4,7 @@ package com.yiring.auth.web.auth;
import cn.dev33.satoken.secure.SaSecureUtil; import cn.dev33.satoken.secure.SaSecureUtil;
import cn.dev33.satoken.stp.StpUtil; import cn.dev33.satoken.stp.StpUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.github.xiaoymin.knife4j.annotations.ApiSupport;
import com.yiring.auth.domain.user.User; import com.yiring.auth.domain.user.User;
import com.yiring.auth.domain.user.UserRepository; import com.yiring.auth.domain.user.UserRepository;
import com.yiring.auth.param.auth.LoginParam; import com.yiring.auth.param.auth.LoginParam;
...@@ -36,7 +37,9 @@ import org.springframework.web.bind.annotation.RestController; ...@@ -36,7 +37,9 @@ import org.springframework.web.bind.annotation.RestController;
@Slf4j @Slf4j
@Validated @Validated
@Api(tags = "Auth") @SuppressWarnings({ "deprecation" })
@ApiSupport(order = -99)
@Api(tags = "身份认证", description = "Auth")
@RestController @RestController
@RequestMapping("/auth/") @RequestMapping("/auth/")
public class AuthController { public class AuthController {
......
/* (C) 2022 YiRing, Inc. */ /* (C) 2022 YiRing, Inc. */
package com.yiring.auth.web.permission; package com.yiring.auth.web.permission;
import cn.hutool.core.util.StrUtil;
import com.github.xiaoymin.knife4j.annotations.ApiSupport;
import com.yiring.auth.domain.permission.Permission; import com.yiring.auth.domain.permission.Permission;
import com.yiring.auth.domain.permission.PermissionRepository; import com.yiring.auth.domain.permission.PermissionRepository;
import com.yiring.auth.param.permission.PermissionParam; import com.yiring.auth.param.permission.PermissionParam;
...@@ -10,13 +12,12 @@ import com.yiring.common.core.Result; ...@@ -10,13 +12,12 @@ import com.yiring.common.core.Result;
import com.yiring.common.core.Status; import com.yiring.common.core.Status;
import com.yiring.common.param.IdParam; import com.yiring.common.param.IdParam;
import com.yiring.common.param.PageParam; import com.yiring.common.param.PageParam;
import com.yiring.common.param.PidParam;
import com.yiring.common.vo.PageVo; import com.yiring.common.vo.PageVo;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Objects;
import java.util.Optional; import java.util.Optional;
import javax.annotation.Resource; import javax.annotation.Resource;
import javax.validation.Valid; import javax.validation.Valid;
...@@ -26,7 +27,10 @@ import org.springframework.data.domain.Example; ...@@ -26,7 +27,10 @@ import org.springframework.data.domain.Example;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
import org.springframework.http.MediaType; import org.springframework.http.MediaType;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/** /**
* 系统权限管理控制器 * 系统权限管理控制器
...@@ -38,7 +42,9 @@ import org.springframework.web.bind.annotation.*; ...@@ -38,7 +42,9 @@ import org.springframework.web.bind.annotation.*;
@Slf4j @Slf4j
@Validated @Validated
@Api(tags = "Permission") @SuppressWarnings({ "deprecation" })
@ApiSupport(order = -97)
@Api(tags = "权限管理", description = "Permission")
@RestController @RestController
@RequestMapping("/manage/permission/") @RequestMapping("/manage/permission/")
public class PermissionController { public class PermissionController {
...@@ -119,11 +125,12 @@ public class PermissionController { ...@@ -119,11 +125,12 @@ public class PermissionController {
@ApiOperation(value = "树结构查询") @ApiOperation(value = "树结构查询")
@GetMapping(value = "tree", headers = "Content-Type=" + MediaType.APPLICATION_FORM_URLENCODED_VALUE) @GetMapping(value = "tree", headers = "Content-Type=" + MediaType.APPLICATION_FORM_URLENCODED_VALUE)
public Result<ArrayList<PermissionVo>> tree( public Result<ArrayList<PermissionVo>> tree(@Valid PidParam param) {
@ApiParam(value = "父级 id", example = "0") @RequestParam(required = false) Long pid
) {
List<Permission> permissions = permissionRepository.findAll(); List<Permission> permissions = permissionRepository.findAll();
List<PermissionVo> vos = Permissions.toTree(permissions, Objects.isNull(pid) ? 0L : pid); List<PermissionVo> vos = Permissions.toTree(
permissions,
StrUtil.isEmpty(param.getPid()) ? "0" : param.getPid()
);
return Result.ok((ArrayList<PermissionVo>) vos); return Result.ok((ArrayList<PermissionVo>) vos);
} }
...@@ -132,10 +139,10 @@ public class PermissionController { ...@@ -132,10 +139,10 @@ public class PermissionController {
* @param pid 父级 ID * @param pid 父级 ID
* @return 树节点标识 * @return 树节点标识
*/ */
private String getTreeNode(Long pid) { private String getTreeNode(String pid) {
Optional<Permission> parent = permissionRepository.findById(pid); Optional<Permission> parent = permissionRepository.findById(pid);
if (parent.isEmpty()) { if (parent.isEmpty()) {
return String.valueOf(pid); return pid;
} else { } else {
return String.format("%s.%s", parent.get().getTree(), pid); return String.format("%s.%s", parent.get().getTree(), pid);
} }
......
/* (C) 2022 YiRing, Inc. */ /* (C) 2022 YiRing, Inc. */
package com.yiring.auth.web.role; package com.yiring.auth.web.role;
import com.github.xiaoymin.knife4j.annotations.ApiSupport;
import com.yiring.auth.domain.permission.Permission; import com.yiring.auth.domain.permission.Permission;
import com.yiring.auth.domain.permission.PermissionRepository; import com.yiring.auth.domain.permission.PermissionRepository;
import com.yiring.auth.domain.role.Role; import com.yiring.auth.domain.role.Role;
import com.yiring.auth.domain.role.RoleRepository; import com.yiring.auth.domain.role.RoleRepository;
import com.yiring.auth.param.IdsParam;
import com.yiring.auth.param.role.RoleParam; import com.yiring.auth.param.role.RoleParam;
import com.yiring.auth.util.Permissions; import com.yiring.auth.util.Permissions;
import com.yiring.auth.vo.role.RoleVo; import com.yiring.auth.vo.role.RoleVo;
import com.yiring.common.core.Result; import com.yiring.common.core.Result;
import com.yiring.common.core.Status; import com.yiring.common.core.Status;
import com.yiring.common.param.IdParam; import com.yiring.common.param.IdParam;
import com.yiring.common.param.IdsParam;
import com.yiring.common.param.PageParam; import com.yiring.common.param.PageParam;
import com.yiring.common.vo.PageVo; import com.yiring.common.vo.PageVo;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
...@@ -40,7 +41,9 @@ import org.springframework.web.bind.annotation.RestController; ...@@ -40,7 +41,9 @@ import org.springframework.web.bind.annotation.RestController;
@Slf4j @Slf4j
@Validated @Validated
@Api(tags = "Role") @SuppressWarnings({ "deprecation" })
@ApiSupport(order = -96)
@Api(tags = "角色管理", description = "Role")
@RestController @RestController
@RequestMapping("/manage/role/") @RequestMapping("/manage/role/")
public class RoleController { public class RoleController {
......
/* (C) 2022 YiRing, Inc. */ /* (C) 2022 YiRing, Inc. */
package com.yiring.auth.web.user; package com.yiring.auth.web.user;
import com.github.xiaoymin.knife4j.annotations.ApiSupport;
import com.yiring.auth.domain.permission.Permission; import com.yiring.auth.domain.permission.Permission;
import com.yiring.auth.domain.role.Role; import com.yiring.auth.domain.role.Role;
import com.yiring.auth.domain.role.RoleRepository; import com.yiring.auth.domain.role.RoleRepository;
import com.yiring.auth.domain.user.User; import com.yiring.auth.domain.user.User;
import com.yiring.auth.domain.user.UserRepository; import com.yiring.auth.domain.user.UserRepository;
import com.yiring.auth.param.IdsParam;
import com.yiring.auth.util.Auths; import com.yiring.auth.util.Auths;
import com.yiring.auth.util.Permissions; import com.yiring.auth.util.Permissions;
import com.yiring.auth.vo.permission.MenuVo; import com.yiring.auth.vo.permission.MenuVo;
...@@ -15,6 +15,7 @@ import com.yiring.auth.vo.user.UserVo; ...@@ -15,6 +15,7 @@ import com.yiring.auth.vo.user.UserVo;
import com.yiring.common.core.Result; import com.yiring.common.core.Result;
import com.yiring.common.core.Status; import com.yiring.common.core.Status;
import com.yiring.common.param.IdParam; import com.yiring.common.param.IdParam;
import com.yiring.common.param.IdsParam;
import com.yiring.common.param.PageParam; import com.yiring.common.param.PageParam;
import com.yiring.common.vo.PageVo; import com.yiring.common.vo.PageVo;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
...@@ -45,7 +46,9 @@ import org.springframework.web.bind.annotation.RestController; ...@@ -45,7 +46,9 @@ import org.springframework.web.bind.annotation.RestController;
@Slf4j @Slf4j
@Validated @Validated
@Api(tags = "User") @SuppressWarnings({ "deprecation" })
@ApiSupport(order = -95)
@Api(tags = "用户管理", description = "User")
@RestController @RestController
@RequestMapping("/user/") @RequestMapping("/user/")
public class UserController { public class UserController {
......
...@@ -9,8 +9,8 @@ dependencies { ...@@ -9,8 +9,8 @@ dependencies {
// 本地依赖 // 本地依赖
implementation fileTree(dir: project.rootDir.getPath() + '\\libs', includes: ['*jar']) implementation fileTree(dir: project.rootDir.getPath() + '\\libs', includes: ['*jar'])
// swagger annotations // swagger(knife4j)
implementation "io.swagger:swagger-annotations:${swaggerAnnotationsVersion}" implementation "com.github.xiaoymin:knife4j-spring-boot-starter:${knife4jVersion}"
// hutool-extra // hutool-extra
implementation "cn.hutool:hutool-extra:${hutoolVersion}" implementation "cn.hutool:hutool-extra:${hutoolVersion}"
......
...@@ -40,8 +40,8 @@ public abstract class BasicEntity { ...@@ -40,8 +40,8 @@ public abstract class BasicEntity {
@Comment("主键") @Comment("主键")
@Id @Id
@GeneratedValue(generator = SnowflakeId.GENERATOR) @GeneratedValue(generator = SnowflakeId.GENERATOR)
@GenericGenerator(name = SnowflakeId.GENERATOR, strategy = SnowflakeId.Strategy.LONG) @GenericGenerator(name = SnowflakeId.GENERATOR, strategy = SnowflakeId.Strategy.STRING)
Long id; String id;
@Comment("创建时间") @Comment("创建时间")
@Column(nullable = false) @Column(nullable = false)
......
...@@ -17,7 +17,7 @@ import lombok.experimental.FieldDefaults; ...@@ -17,7 +17,7 @@ import lombok.experimental.FieldDefaults;
* @version 0.1 * @version 0.1
* 2019/5/28 22:11 * 2019/5/28 22:11
*/ */
@ApiModel("IdParam") @ApiModel(value = "IdParam", description = "公共的 ID 查询参数")
@Valid @Valid
@Data @Data
@Builder @Builder
...@@ -31,5 +31,5 @@ public class IdParam implements Serializable { ...@@ -31,5 +31,5 @@ public class IdParam implements Serializable {
@ApiModelProperty(value = "id", example = "1", required = true) @ApiModelProperty(value = "id", example = "1", required = true)
@NotNull(message = "id 不能为空") @NotNull(message = "id 不能为空")
Long id; String id;
} }
/* (C) 2021 YiRing, Inc. */ /* (C) 2021 YiRing, Inc. */
package com.yiring.auth.param; package com.yiring.common.param;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
......
...@@ -16,7 +16,7 @@ import lombok.experimental.FieldDefaults; ...@@ -16,7 +16,7 @@ import lombok.experimental.FieldDefaults;
* @version 0.1 * @version 0.1
* 2022/4/27 08:53 * 2022/4/27 08:53
*/ */
@ApiModel("KeywordParam") @ApiModel(value = "KeywordParam", description = "公共的关键字查询参数")
@Valid @Valid
@Data @Data
@Builder @Builder
......
...@@ -19,13 +19,12 @@ import org.springframework.data.domain.Pageable; ...@@ -19,13 +19,12 @@ import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort; import org.springframework.data.domain.Sort;
/** /**
* 分页查询参数公共类 * 公共的分页排序查询参数
* *
* @author ifzm * @author ifzm
* @version 0.1 2019/3/10 16:29 * @version 0.1 2019/3/10 16:29
*/ */
@SuppressWarnings({ "unused" }) @ApiModel(value = "PageParam", description = "公共的分页排序查询参数")
@ApiModel("分页查询参数公共类")
@Data @Data
@SuperBuilder @SuperBuilder
@NoArgsConstructor @NoArgsConstructor
...@@ -58,6 +57,7 @@ public class PageParam implements Serializable { ...@@ -58,6 +57,7 @@ public class PageParam implements Serializable {
* @param param {@link PageParam} * @param param {@link PageParam}
* @return Pageable * @return Pageable
*/ */
@SuppressWarnings({ "unused" })
public static Pageable toPageable(PageParam param) { public static Pageable toPageable(PageParam param) {
if (param == null) { if (param == null) {
return Pageable.unpaged(); return Pageable.unpaged();
......
/* (C) 2021 YiRing, Inc. */
package com.yiring.common.param;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serial;
import java.io.Serializable;
import javax.validation.Valid;
import javax.validation.constraints.NotNull;
import lombok.*;
import lombok.experimental.FieldDefaults;
/**
* 公共的父级 ID 查询参数类
*
* @author ifzm
* @version 0.1
* 2019/5/28 22:11
*/
@ApiModel(value = "PidParam", description = "公共的父级 ID 查询参数")
@Valid
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@FieldDefaults(level = AccessLevel.PRIVATE)
public class PidParam implements Serializable {
@Serial
private static final long serialVersionUID = -8690942241103456893L;
@ApiModelProperty(value = "pid", example = "1", required = true)
@NotNull(message = "pid 不能为空")
String pid;
}
...@@ -16,7 +16,7 @@ import lombok.experimental.FieldDefaults; ...@@ -16,7 +16,7 @@ import lombok.experimental.FieldDefaults;
* @version 0.1 * @version 0.1
* 2022/3/23 16:47 * 2022/3/23 16:47
*/ */
@ApiModel("DataVo") @ApiModel(value = "DataVo", description = "公共数据响应输出")
@Data @Data
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor
......
...@@ -16,7 +16,7 @@ import lombok.experimental.FieldDefaults; ...@@ -16,7 +16,7 @@ import lombok.experimental.FieldDefaults;
* 2022/3/24 17:29 * 2022/3/24 17:29
*/ */
@ApiModel("KeyValueVo") @ApiModel(value = "KeyValueVo", description = "键值对响应输出")
@Data @Data
@Builder @Builder
@NoArgsConstructor @NoArgsConstructor
......
...@@ -16,7 +16,7 @@ import lombok.experimental.FieldDefaults; ...@@ -16,7 +16,7 @@ import lombok.experimental.FieldDefaults;
* @author ifzm * @author ifzm
* @version 0.1 2019/3/10 16:29 * @version 0.1 2019/3/10 16:29
*/ */
@ApiModel("PageVo") @ApiModel(value = "PageVo", description = "公共分页查询响应输出")
@Data @Data
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor
...@@ -26,10 +26,10 @@ public class PageVo<T extends Serializable> implements Serializable { ...@@ -26,10 +26,10 @@ public class PageVo<T extends Serializable> implements Serializable {
@Serial @Serial
private static final long serialVersionUID = 6103761701912769946L; private static final long serialVersionUID = 6103761701912769946L;
@ApiModelProperty(value = "数据") @ApiModelProperty(value = "数据", required = true)
List<T> data; List<T> data;
@ApiModelProperty(value = "数据总数", example = "100") @ApiModelProperty(value = "数据总数", example = "100", required = true)
Long total; Long total;
/** /**
......
...@@ -3,8 +3,8 @@ dependencies { ...@@ -3,8 +3,8 @@ dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-starter-web'
// swagger // swagger(knife4j)
implementation "io.swagger:swagger-annotations:${swaggerAnnotationsVersion}" implementation "com.github.xiaoymin:knife4j-spring-boot-starter:${knife4jVersion}"
// minio // minio
implementation "io.minio:minio:${minioVersion}" implementation "io.minio:minio:${minioVersion}"
......
...@@ -3,6 +3,7 @@ package com.yiring.common.web; ...@@ -3,6 +3,7 @@ package com.yiring.common.web;
import cn.hutool.core.lang.Snowflake; import cn.hutool.core.lang.Snowflake;
import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.IdUtil;
import com.github.xiaoymin.knife4j.annotations.ApiSupport;
import com.yiring.common.core.Minio; import com.yiring.common.core.Minio;
import com.yiring.common.core.Result; import com.yiring.common.core.Result;
import com.yiring.common.core.Status; import com.yiring.common.core.Status;
...@@ -29,9 +30,11 @@ import org.springframework.web.multipart.MultipartFile; ...@@ -29,9 +30,11 @@ import org.springframework.web.multipart.MultipartFile;
@Slf4j @Slf4j
@Validated @Validated
@Api(tags = "Minio") @SuppressWarnings({ "deprecation" })
@ApiSupport(order = -98)
@Api(tags = "文件管理", description = "file")
@RestController @RestController
@RequestMapping("/common/minio/") @RequestMapping("/common/file/")
public class MinioController { public class MinioController {
@Resource @Resource
...@@ -48,8 +51,8 @@ public class MinioController { ...@@ -48,8 +51,8 @@ public class MinioController {
long uuid = snowflake.nextId(); long uuid = snowflake.nextId();
// 文件上传 // 文件上传
String folder = String date = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy/M/d"));
"upload/" + LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy/M/d")) + "/" + uuid; String folder = "upload/" + date + "/" + uuid;
ObjectWriteResponse response = minio.putObject(file, folder); ObjectWriteResponse response = minio.putObject(file, folder);
String uri = minio.getURI(response.object()); String uri = minio.getURI(response.object());
return Result.ok(uri); return Result.ok(uri);
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论