提交 5a6ec16c 作者: 方治民

feat: 合并 basic-api

......@@ -7,5 +7,5 @@ indent_style = space
end_of_line = lf
insert_final_newline = true
[**.yml]
[*.{yml,yaml}]
indent_size = 2
......@@ -36,3 +36,5 @@ out/
### VS Code ###
.vscode/
node_modules
logs/
......@@ -5,8 +5,8 @@
## 开发环境
<!-- prettier-ignore -->
- JDK 1.8+ (推荐同时安装最新 LTS 版本) [下载](https://www.oracle.com/java/technologies/downloads/#jdk17-windows)
- NodeJS [latest](https://nodejs.org/zh-cn/)
- JDK 17 [版本管理工具](https://github.com/shyiko/jabba)
- NodeJS [下载](https://nodejs.org/zh-cn/)
- IDEA [下载](https://www.jetbrains.com/idea/)
- Navicat Premium [下载](http://www.downcc.com/soft/430673.html)
- RedisDesktopManager [下载](https://github.com/FuckDoctors/rdm-builder)
......
......@@ -16,7 +16,7 @@ dependencies {
implementation "com.alibaba:fastjson:${fastJsonVersion}"
// https://github.com/vladmihalcea/hibernate-types
// hibernate-types-52
implementation "com.vladmihalcea:hibernate-types-52:${hibernateTypesVersion}"
// hibernate-types-55
implementation "com.vladmihalcea:hibernate-types-55:${hibernateTypesVersion}"
}
......@@ -9,7 +9,7 @@ import javax.persistence.*;
import lombok.*;
import lombok.experimental.FieldDefaults;
import lombok.experimental.FieldNameConstants;
import org.hibernate.annotaions.Comment;
import org.hibernate.annotations.Comment;
import org.hibernate.annotations.GenericGenerator;
import org.hibernate.annotations.Type;
import org.hibernate.annotations.TypeDef;
......
......@@ -7,6 +7,7 @@ bootJar {
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-validation'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-data-redis'
implementation 'org.springframework.boot:spring-boot-starter-amqp'
......@@ -23,13 +24,14 @@ dependencies {
implementation project(":basic-common:core")
implementation project(":basic-common:util")
implementation project(":basic-common:redis")
implementation project(":app-push")
// Optional: Redis
implementation project(":basic-common:redis")
// Optional: Doc
implementation project(":basic-common:doc")
implementation "io.swagger:swagger-annotations:${swaggerAnnotationsVersion}"
implementation "org.hibernate.validator:hibernate-validator:${hibernateValidatorVersion}"
// Optional: Auth
implementation project(":basic-auth")
......
/* (C) 2021 YiRing, Inc. */
package com.yiring.app;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.data.jpa.convert.threeten.Jsr310JpaConverters;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
@MapperScan(basePackages = Application.BASE_PACKAGES + ".app.mapper")
@EnableJpaRepositories(basePackages = Application.BASE_PACKAGES)
@EntityScan(
basePackageClasses = { Application.class, Jsr310JpaConverters.class },
......
......@@ -43,8 +43,7 @@ public class GlobalExceptionHandler {
String error = "未知参数校验错误";
if (e instanceof ConstraintViolationException) {
ConstraintViolationException ex = (ConstraintViolationException) e;
error = ex.getConstraintViolations().iterator().next().getMessage();
error = ((ConstraintViolationException) e).getConstraintViolations().iterator().next().getMessage();
} else {
BindingResult result = null;
if (e instanceof MethodArgumentNotValidException) {
......
......@@ -2,6 +2,7 @@
package com.yiring.app.domain.location;
import com.yiring.common.annotation.FieldMapping;
import java.io.Serial;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
......@@ -11,7 +12,7 @@ import lombok.*;
import lombok.experimental.FieldDefaults;
import lombok.experimental.FieldNameConstants;
import org.hibernate.Hibernate;
import org.hibernate.annotaions.Comment;
import org.hibernate.annotations.Comment;
import org.hibernate.annotations.GenericGenerator;
import org.hibernate.snowflake.SnowflakeId;
import org.locationtech.jts.geom.Point;
......@@ -19,8 +20,8 @@ import org.locationtech.jts.geom.Point;
/**
* 定位信标
* 引用:
* 1. 查询地图分区(定位系统), https://nl.yz-cloud.com/position/area/list
* 2. 查询信标点(定位系统), https://nl.yz-cloud.com/position/config/point/list
* 1. 查询地图分区(定位系统), <a href="https://nl.yz-cloud.com/position/area/list">https://nl.yz-cloud.com/position/area/list</a>
* 2. 查询信标点(定位系统), <a href="https://nl.yz-cloud.com/position/config/point/list">https://nl.yz-cloud.com/position/config/point/list</a>
*
* @author Jim
* @version 0.1
......@@ -43,6 +44,7 @@ import org.locationtech.jts.geom.Point;
@Comment("定位信标")
public class LocationBeacon implements Serializable {
@Serial
private static final long serialVersionUID = 5419734189897829250L;
@Comment("主键")
......
......@@ -2,6 +2,7 @@
package com.yiring.app.domain.location;
import com.yiring.common.annotation.FieldMapping;
import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.HashSet;
......@@ -10,7 +11,7 @@ import javax.persistence.*;
import lombok.*;
import lombok.experimental.FieldDefaults;
import lombok.experimental.FieldNameConstants;
import org.hibernate.annotaions.Comment;
import org.hibernate.annotations.Comment;
import org.hibernate.annotations.GenericGenerator;
import org.hibernate.snowflake.SnowflakeId;
import org.locationtech.jts.geom.Geometry;
......@@ -37,6 +38,7 @@ import org.locationtech.jts.geom.Geometry;
@Comment("围栏")
public class LocationFence implements Serializable {
@Serial
private static final long serialVersionUID = 4155868702188991300L;
@Comment("主键")
......
......@@ -3,6 +3,7 @@ package com.yiring.app.domain.location;
import com.yiring.auth.domain.user.User;
import com.yiring.common.annotation.FieldMapping;
import java.io.Serial;
import java.io.Serializable;
import java.time.LocalTime;
import java.util.HashSet;
......@@ -11,7 +12,7 @@ import javax.persistence.*;
import lombok.*;
import lombok.experimental.FieldDefaults;
import lombok.experimental.FieldNameConstants;
import org.hibernate.annotaions.Comment;
import org.hibernate.annotations.Comment;
import org.hibernate.annotations.GenericGenerator;
import org.hibernate.snowflake.SnowflakeId;
......@@ -33,10 +34,11 @@ import org.hibernate.snowflake.SnowflakeId;
@FieldNameConstants
@FieldDefaults(level = AccessLevel.PRIVATE)
@Entity
@Table(name = "BS_LOCATION_FENCE_RULE", indexes = {})
@Table(name = "BS_LOCATION_FENCE_RULE")
@Comment("围栏规则")
public class LocationFenceRule implements Serializable {
@Serial
private static final long serialVersionUID = -6683465582430417205L;
@Comment("主键")
......
......@@ -4,6 +4,7 @@ package com.yiring.app.domain.location;
import com.alibaba.fastjson.JSONObject;
import com.yiring.auth.domain.user.User;
import com.yiring.common.config.converter.JSONObjectConverter;
import java.io.Serial;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
......@@ -15,7 +16,7 @@ import lombok.*;
import lombok.experimental.FieldDefaults;
import lombok.experimental.FieldNameConstants;
import org.hibernate.Hibernate;
import org.hibernate.annotaions.Comment;
import org.hibernate.annotations.Comment;
import org.hibernate.annotations.GenericGenerator;
import org.hibernate.snowflake.SnowflakeId;
import org.locationtech.jts.geom.Point;
......@@ -42,6 +43,7 @@ import org.locationtech.jts.geom.Point;
@Comment("定位数据")
public class LocationLog implements Serializable {
@Serial
private static final long serialVersionUID = 3467455881020691989L;
@Comment("主键")
......
......@@ -3,6 +3,7 @@ package com.yiring.app.domain.location;
import com.yiring.auth.domain.user.User;
import com.yiring.common.annotation.FieldMapping;
import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.Objects;
......@@ -11,7 +12,7 @@ import lombok.*;
import lombok.experimental.FieldDefaults;
import lombok.experimental.FieldNameConstants;
import org.hibernate.Hibernate;
import org.hibernate.annotaions.Comment;
import org.hibernate.annotations.Comment;
import org.hibernate.annotations.GenericGenerator;
import org.hibernate.snowflake.SnowflakeId;
......@@ -48,6 +49,7 @@ import org.hibernate.snowflake.SnowflakeId;
@Comment("定位标签")
public class LocationTag implements Serializable {
@Serial
private static final long serialVersionUID = 5419734189897829250L;
@Comment("主键")
......
/* (C) 2022 YiRing, Inc. */
package com.yiring.app.domain.video;
import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDateTime;
import javax.persistence.*;
import lombok.*;
import lombok.experimental.FieldDefaults;
import lombok.experimental.FieldNameConstants;
import org.hibernate.annotaions.Comment;
import org.hibernate.annotations.Comment;
import org.hibernate.annotations.GenericGenerator;
import org.hibernate.snowflake.SnowflakeId;
import org.locationtech.jts.geom.Point;
......@@ -33,6 +34,7 @@ import org.locationtech.jts.geom.Point;
@Comment("监控视频")
public class Video implements Serializable {
@Serial
private static final long serialVersionUID = -4382898847143469396L;
@Comment("主键")
......
......@@ -2,6 +2,7 @@
package com.yiring.app.exception;
import com.yiring.app.constant.Code;
import java.io.Serial;
import lombok.*;
import lombok.experimental.FieldDefaults;
......@@ -19,6 +20,7 @@ import lombok.experimental.FieldDefaults;
@FieldDefaults(level = AccessLevel.PRIVATE)
public class CodeException extends RuntimeException {
@Serial
private static final long serialVersionUID = -4226669531686389671L;
/**
......
spring:
mvc:
pathmatch:
# 修复 swagger 插件在 2.6.x 接口路径匹配问题
matching-strategy: ant_path_matcher
......@@ -7,8 +7,8 @@ spring:
application:
name: "kshg-api"
profiles:
include: auth
active: dev
include: auth, conf-patch
active: mock
# DEBUG
debug: false
......@@ -3,13 +3,13 @@ dependencies {
implementation project(':basic-common:util')
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-validation'
// 本地依赖
implementation fileTree(dir: project.rootDir.getPath() + '\\libs', includes: ['*jar'])
// swagger annotations
implementation "io.swagger:swagger-annotations:${swaggerAnnotationsVersion}"
implementation "org.hibernate.validator:hibernate-validator:${hibernateValidatorVersion}"
// sa-token
implementation "cn.dev33:sa-token-spring-boot-starter:${saTokenVersion}"
......
......@@ -4,6 +4,7 @@ package com.yiring.auth.domain.dept;
import com.yiring.auth.domain.post.Post;
import com.yiring.auth.domain.user.User;
import com.yiring.common.annotation.FieldMapping;
import java.io.Serial;
import java.io.Serializable;
import java.util.HashSet;
import java.util.Objects;
......@@ -13,7 +14,7 @@ import lombok.*;
import lombok.experimental.FieldDefaults;
import lombok.experimental.FieldNameConstants;
import org.hibernate.Hibernate;
import org.hibernate.annotaions.Comment;
import org.hibernate.annotations.Comment;
import org.hibernate.annotations.GenericGenerator;
import org.hibernate.snowflake.SnowflakeId;
......@@ -37,6 +38,7 @@ import org.hibernate.snowflake.SnowflakeId;
@Table(name = "SYS_DEPARTMENT", indexes = { @Index(columnList = "pid"), @Index(columnList = "tree") })
public class Department implements Serializable {
@Serial
private static final long serialVersionUID = -5402731145404250150L;
@Comment("主键")
......
......@@ -3,16 +3,17 @@ package com.yiring.auth.domain.permission;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.yiring.common.domain.BasicEntity;
import java.io.Serial;
import java.io.Serializable;
import java.util.Objects;
import javax.persistence.*;
import lombok.*;
import lombok.experimental.FieldDefaults;
import lombok.experimental.FieldNameConstants;
import lombok.experimental.SuperBuilder;
import org.hibernate.Hibernate;
import org.hibernate.annotaions.Comment;
import org.hibernate.annotations.GenericGenerator;
import org.hibernate.snowflake.SnowflakeId;
import org.hibernate.annotations.Comment;
/**
* 权限
......@@ -24,7 +25,7 @@ import org.hibernate.snowflake.SnowflakeId;
@Getter
@Setter
@ToString
@Builder
@SuperBuilder(toBuilder = true)
@NoArgsConstructor
@AllArgsConstructor
@FieldNameConstants
......@@ -40,16 +41,11 @@ import org.hibernate.snowflake.SnowflakeId;
@Index(columnList = "uid", unique = true),
}
)
public class Permission implements Serializable {
public class Permission extends BasicEntity implements Serializable {
@Serial
private static final long serialVersionUID = -2001221843529000953L;
@Comment("主键")
@Id
@GeneratedValue(generator = SnowflakeId.GENERATOR)
@GenericGenerator(name = SnowflakeId.GENERATOR, strategy = SnowflakeId.Strategy.LONG)
Long id;
@Comment("类型(MENU: 菜单, BUTTON: 按钮)")
@Enumerated(EnumType.STRING)
Type type;
......@@ -138,7 +134,7 @@ public class Permission implements Serializable {
if (this == o) return true;
if (o == null || Hibernate.getClass(this) != Hibernate.getClass(o)) return false;
Permission that = (Permission) o;
return id != null && Objects.equals(id, that.id);
return this.getId() != null && Objects.equals(this.getId(), that.getId());
}
@Override
......
/* (C) 2022 YiRing, Inc. */
package com.yiring.auth.domain.post;
import java.io.Serial;
import java.io.Serializable;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
......@@ -9,7 +10,7 @@ import javax.persistence.Table;
import lombok.*;
import lombok.experimental.FieldDefaults;
import lombok.experimental.FieldNameConstants;
import org.hibernate.annotaions.Comment;
import org.hibernate.annotations.Comment;
import org.hibernate.annotations.GenericGenerator;
import org.hibernate.snowflake.SnowflakeId;
......@@ -33,6 +34,7 @@ import org.hibernate.snowflake.SnowflakeId;
@Table(name = "SYS_POST")
public class Post implements Serializable {
@Serial
private static final long serialVersionUID = 3744892781714515997L;
@Comment("主键")
......
......@@ -4,6 +4,8 @@ package com.yiring.auth.domain.role;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.yiring.auth.domain.permission.Permission;
import com.yiring.auth.domain.user.User;
import com.yiring.common.domain.BasicEntity;
import java.io.Serial;
import java.io.Serializable;
import java.util.HashSet;
import java.util.Objects;
......@@ -12,10 +14,9 @@ import javax.persistence.*;
import lombok.*;
import lombok.experimental.FieldDefaults;
import lombok.experimental.FieldNameConstants;
import lombok.experimental.SuperBuilder;
import org.hibernate.Hibernate;
import org.hibernate.annotaions.Comment;
import org.hibernate.annotations.GenericGenerator;
import org.hibernate.snowflake.SnowflakeId;
import org.hibernate.annotations.Comment;
/**
* 角色
......@@ -27,7 +28,7 @@ import org.hibernate.snowflake.SnowflakeId;
@Getter
@Setter
@ToString
@Builder
@SuperBuilder(toBuilder = true)
@NoArgsConstructor
@AllArgsConstructor
@FieldNameConstants
......@@ -35,16 +36,11 @@ import org.hibernate.snowflake.SnowflakeId;
@Entity
@Comment("系统角色")
@Table(name = "SYS_ROLE", indexes = { @Index(columnList = "uid", unique = true) })
public class Role implements Serializable {
public class Role extends BasicEntity implements Serializable {
@Serial
private static final long serialVersionUID = 910404402503275957L;
@Comment("主键")
@Id
@GeneratedValue(generator = SnowflakeId.GENERATOR)
@GenericGenerator(name = SnowflakeId.GENERATOR, strategy = SnowflakeId.Strategy.LONG)
Long id;
@Comment("标识")
@Column(unique = true, nullable = false)
String uid;
......@@ -57,7 +53,7 @@ public class Role implements Serializable {
@Comment("权限集合")
@ManyToMany
@ToString.Exclude
private Set<Permission> permissions = new HashSet<>();
Set<Permission> permissions = new HashSet<>();
@JsonIgnore
@EqualsAndHashCode.Exclude
......@@ -70,14 +66,14 @@ public class Role implements Serializable {
joinColumns = { @JoinColumn(name = "role_id") },
inverseJoinColumns = { @JoinColumn(name = "user_id") }
)
private Set<User> users = new HashSet<>();
Set<User> users = new HashSet<>();
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || Hibernate.getClass(this) != Hibernate.getClass(o)) return false;
Role role = (Role) o;
return id != null && Objects.equals(id, role.id);
return this.getId() != null && Objects.equals(this.getId(), role.getId());
}
@Override
......
......@@ -3,9 +3,10 @@ package com.yiring.auth.domain.user;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.yiring.auth.domain.dept.Department;
import com.yiring.auth.domain.post.Post;
import com.yiring.auth.domain.role.Role;
import com.yiring.common.annotation.FieldMapping;
import com.yiring.common.domain.BasicEntity;
import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.HashSet;
......@@ -16,9 +17,7 @@ import lombok.*;
import lombok.experimental.FieldDefaults;
import lombok.experimental.FieldNameConstants;
import org.hibernate.Hibernate;
import org.hibernate.annotaions.Comment;
import org.hibernate.annotations.GenericGenerator;
import org.hibernate.snowflake.SnowflakeId;
import org.hibernate.annotations.Comment;
/**
* 用户
......@@ -39,7 +38,6 @@ import org.hibernate.snowflake.SnowflakeId;
@Table(
name = "SYS_USER",
indexes = {
@Index(columnList = "uuid", unique = true),
@Index(columnList = "mobile", unique = true),
@Index(columnList = "username", unique = true),
@Index(columnList = "email", unique = true),
......@@ -48,16 +46,11 @@ import org.hibernate.snowflake.SnowflakeId;
}
)
@Comment("系统用户")
public class User implements Serializable {
public class User extends BasicEntity implements Serializable {
@Serial
private static final long serialVersionUID = -5787847701210907511L;
@Comment("主键")
@Id
@GeneratedValue(generator = SnowflakeId.GENERATOR)
@GenericGenerator(name = SnowflakeId.GENERATOR, strategy = SnowflakeId.Strategy.LONG)
Long id;
/**
* 数据来源于【真源人员定位系统 - 定位信标】
* 作用: 用于双向联动进行数据同步
......@@ -97,17 +90,6 @@ public class User implements Serializable {
@Comment("头像")
String avatar;
@Comment("职称")
String title;
@Comment("岗位")
@ManyToOne
@JoinColumn(name = "post_id")
Post post;
@Comment("性别(1: 男, 2: 女)")
Integer gender;
@Comment("是否启用")
Boolean enabled;
......@@ -148,12 +130,6 @@ public class User implements Serializable {
@Comment("最后登录时间")
LocalDateTime lastLoginTime;
@Comment("更新时间")
LocalDateTime updateTime;
@Comment("创建时间")
LocalDateTime createTime;
@SuppressWarnings({ "unused" })
public enum Type {
EMPLOYEES("员工"),
......@@ -194,7 +170,7 @@ public class User implements Serializable {
if (this == o) return true;
if (o == null || Hibernate.getClass(this) != Hibernate.getClass(o)) return false;
User user = (User) o;
return id != null && Objects.equals(id, user.id);
return getId() != null && Objects.equals(getId(), user.getId());
}
@Override
......
......@@ -3,6 +3,7 @@ package com.yiring.auth.param;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serial;
import java.io.Serializable;
import java.util.Arrays;
import java.util.Set;
......@@ -28,6 +29,7 @@ import lombok.experimental.FieldDefaults;
@FieldDefaults(level = AccessLevel.PRIVATE)
public class IdsParam implements Serializable {
@Serial
private static final long serialVersionUID = -8379896695668632733L;
@ApiModelProperty(value = "ids 多个以逗号分割", example = "1,2", required = true)
......
......@@ -3,6 +3,7 @@ package com.yiring.auth.param.auth;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serial;
import java.io.Serializable;
import javax.validation.constraints.NotEmpty;
import lombok.*;
......@@ -23,6 +24,7 @@ import lombok.experimental.FieldDefaults;
@FieldDefaults(level = AccessLevel.PRIVATE)
public class LoginParam implements Serializable {
@Serial
private static final long serialVersionUID = -8690942241103456895L;
@ApiModelProperty(value = "账号(支持用户名/手机号/邮箱)", example = "admin", required = true)
......
......@@ -3,6 +3,7 @@ package com.yiring.auth.param.auth;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serial;
import java.io.Serializable;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.Pattern;
......@@ -24,6 +25,7 @@ import lombok.experimental.FieldDefaults;
@FieldDefaults(level = AccessLevel.PRIVATE)
public class RegisterParam implements Serializable {
@Serial
private static final long serialVersionUID = -8690942241103456895L;
@ApiModelProperty(value = "用户名", example = "admin", required = true)
......
......@@ -5,6 +5,7 @@ import com.fasterxml.jackson.annotation.JsonInclude;
import com.yiring.auth.domain.permission.Permission;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serial;
import java.io.Serializable;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
......@@ -27,6 +28,7 @@ import lombok.experimental.FieldDefaults;
@FieldDefaults(level = AccessLevel.PRIVATE)
public class PermissionParam implements Serializable {
@Serial
private static final long serialVersionUID = -6781934969837655538L;
@ApiModelProperty(value = "权限类型", example = "MENU", required = true)
......
......@@ -3,6 +3,7 @@ package com.yiring.auth.param.role;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serial;
import java.io.Serializable;
import javax.validation.constraints.NotEmpty;
import lombok.*;
......@@ -23,6 +24,7 @@ import lombok.experimental.FieldDefaults;
@FieldDefaults(level = AccessLevel.PRIVATE)
public class RoleParam implements Serializable {
@Serial
private static final long serialVersionUID = 6572751635422870217L;
@ApiModelProperty(value = "标识", example = "admin", required = true)
......
......@@ -5,9 +5,11 @@ import cn.dev33.satoken.exception.NotLoginException;
import cn.dev33.satoken.stp.StpUtil;
import com.yiring.auth.domain.user.User;
import com.yiring.auth.domain.user.UserRepository;
import com.yiring.common.core.Status;
import java.util.Objects;
import java.util.Optional;
import javax.annotation.Resource;
import lombok.NonNull;
import org.springframework.stereotype.Component;
/**
......@@ -18,6 +20,7 @@ import org.springframework.stereotype.Component;
* 2022/4/8 17:34
*/
@SuppressWarnings("unused")
@Component
public class Auths {
......@@ -26,21 +29,36 @@ public class Auths {
/**
* 根据 Token 获取用户信息
* 如果用户未登录或校验失败会抛出 NotLoginException
* 如果用户未登录或校验失败会抛出 NotLoginException {@link Status#UNAUTHORIZED}
* @param token token
* @return 用户信息
*/
public User getUserByToken(String token) {
public User getUserByToken(@NonNull String token) {
Object id = StpUtil.getLoginIdByToken(token);
if (id == null) {
StpUtil.logoutByTokenValue(token);
throw NotLoginException.newInstance(StpUtil.TYPE, null);
}
Optional<User> optional = userRepository.findById(Long.valueOf(Objects.toString(id)));
if (optional.isEmpty()) {
StpUtil.logout(id);
throw NotLoginException.newInstance(StpUtil.TYPE, NotLoginException.INVALID_TOKEN);
}
return optional.get();
}
/**
* 获取当前登录用户
* 如果用户未登录会抛出 NotLoginException {@link Status#UNAUTHORIZED}
*/
public User getLoginUser() {
String token = StpUtil.getTokenValue();
if (token == null) {
throw NotLoginException.newInstance(StpUtil.TYPE, null);
}
return getUserByToken(token);
}
}
......@@ -5,6 +5,7 @@ import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serial;
import java.io.Serializable;
import lombok.*;
import lombok.experimental.FieldDefaults;
......@@ -25,6 +26,7 @@ import lombok.experimental.FieldDefaults;
@FieldDefaults(level = AccessLevel.PRIVATE)
public class LoginVo implements Serializable {
@Serial
private static final long serialVersionUID = -8690942241103456896L;
@JsonSerialize(using = ToStringSerializer.class)
......
......@@ -6,6 +6,7 @@ import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serial;
import java.io.Serializable;
import java.util.List;
import lombok.*;
......@@ -27,6 +28,7 @@ import lombok.experimental.FieldDefaults;
@FieldDefaults(level = AccessLevel.PRIVATE)
public class MenuVo implements Serializable {
@Serial
private static final long serialVersionUID = -9139328772148985141L;
@JsonIgnore
......
......@@ -8,6 +8,7 @@ import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.yiring.auth.domain.permission.Permission;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serial;
import java.io.Serializable;
import java.util.List;
import lombok.*;
......@@ -29,6 +30,7 @@ import lombok.experimental.FieldDefaults;
@FieldDefaults(level = AccessLevel.PRIVATE)
public class PermissionVo implements Serializable {
@Serial
private static final long serialVersionUID = -9139328772148985141L;
@JsonSerialize(using = ToStringSerializer.class)
......
......@@ -6,6 +6,7 @@ import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.yiring.auth.vo.permission.PermissionVo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serial;
import java.io.Serializable;
import java.util.List;
import lombok.*;
......@@ -26,6 +27,7 @@ import lombok.experimental.FieldDefaults;
@FieldDefaults(level = AccessLevel.PRIVATE)
public class RoleVo implements Serializable {
@Serial
private static final long serialVersionUID = -9154497137563970840L;
@JsonSerialize(using = ToStringSerializer.class)
......
......@@ -6,6 +6,7 @@ import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.yiring.auth.vo.role.RoleVo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serial;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
......@@ -26,6 +27,7 @@ import lombok.experimental.FieldDefaults;
@FieldDefaults(level = AccessLevel.PRIVATE)
public class UserInfoVo implements Serializable {
@Serial
private static final long serialVersionUID = -5319037883240327088L;
@JsonSerialize(using = ToStringSerializer.class)
......
......@@ -6,6 +6,7 @@ import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import com.yiring.auth.vo.role.RoleVo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serial;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
......@@ -26,6 +27,7 @@ import lombok.experimental.FieldDefaults;
@FieldDefaults(level = AccessLevel.PRIVATE)
public class UserMenuListVo implements Serializable {
@Serial
private static final long serialVersionUID = -5319037883240327088L;
@JsonSerialize(using = ToStringSerializer.class)
......
......@@ -5,6 +5,7 @@ import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDateTime;
import lombok.*;
......@@ -24,6 +25,7 @@ import lombok.experimental.FieldDefaults;
@FieldDefaults(level = AccessLevel.PRIVATE)
public class UserVo implements Serializable {
@Serial
private static final long serialVersionUID = -2184378273450466835L;
@JsonSerialize(using = ToStringSerializer.class)
......
......@@ -78,7 +78,6 @@ public class AuthController {
.password(SaSecureUtil.sha256(param.getPassword()))
.enabled(param.getEnable())
.deleted(Boolean.FALSE)
.createTime(LocalDateTime.now())
.build();
userRepository.saveAndFlush(user);
return Result.ok();
......
/* (C) 2022 YiRing, Inc. */
package com.yiring.auth.web.user;
import cn.dev33.satoken.stp.StpUtil;
import com.yiring.auth.domain.permission.Permission;
import com.yiring.auth.domain.role.Role;
import com.yiring.auth.domain.role.RoleRepository;
import com.yiring.auth.domain.user.User;
import com.yiring.auth.domain.user.UserRepository;
import com.yiring.auth.param.IdsParam;
import com.yiring.auth.util.Auths;
import com.yiring.auth.util.Permissions;
import com.yiring.auth.vo.permission.MenuVo;
import com.yiring.auth.vo.user.UserInfoVo;
import com.yiring.auth.vo.user.UserVo;
import com.yiring.common.core.Result;
import com.yiring.common.core.Status;
import com.yiring.common.exception.FailStatusException;
import com.yiring.common.param.IdParam;
import com.yiring.common.param.PageParam;
import com.yiring.common.vo.PageVo;
......@@ -52,6 +51,9 @@ import org.springframework.web.bind.annotation.RestController;
public class UserController {
@Resource
Auths auths;
@Resource
UserRepository userRepository;
@Resource
......@@ -60,7 +62,7 @@ public class UserController {
@ApiOperation(value = "获取登录用户信息")
@GetMapping("getUserInfo")
public Result<UserInfoVo> getUserInfo() {
User user = getLoginUser();
User user = auths.getLoginUser();
UserInfoVo userInfoVo = UserInfoVo
.builder()
.userId(user.getId())
......@@ -76,7 +78,7 @@ public class UserController {
@ApiOperation(value = "获取用户菜单")
@GetMapping("getMenuList")
public Result<ArrayList<MenuVo>> getMenuList() {
User user = getLoginUser();
User user = auths.getLoginUser();
List<Permission> permissions = Permissions
.toPermissions(user.getRoles())
.stream()
......@@ -89,7 +91,7 @@ public class UserController {
@ApiOperation(value = "获取用户权限")
@GetMapping("getPermCode")
public Result<ArrayList<String>> getPermCode() {
User user = getLoginUser();
User user = auths.getLoginUser();
List<Permission> permissions = Permissions.toPermissions(user.getRoles());
List<String> codes = permissions.stream().map(Permission::getUid).collect(Collectors.toList());
return Result.ok((ArrayList<String>) codes);
......@@ -132,19 +134,4 @@ public class UserController {
PageVo<UserVo> vo = PageVo.build(data, page.getTotalElements());
return Result.ok(vo);
}
/**
* 获取登录用户信息
* @return 用户信息
*/
private User getLoginUser() {
Long id = StpUtil.getLoginIdAsLong();
Optional<User> optional = userRepository.findById(id);
if (optional.isPresent()) {
return optional.get();
}
StpUtil.logout(id);
throw new FailStatusException(Status.UNAUTHORIZED);
}
}
......@@ -3,11 +3,14 @@ dependencies {
implementation 'org.springframework.boot:spring-boot-starter-aop'
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-validation'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
// 本地依赖
implementation fileTree(dir: project.rootDir.getPath() + '\\libs', includes: ['*jar'])
// swagger annotations
implementation "io.swagger:swagger-annotations:${swaggerAnnotationsVersion}"
implementation "org.hibernate.validator:hibernate-validator:${hibernateValidatorVersion}"
// hutool-extra
implementation "cn.hutool:hutool-extra:${hutoolVersion}"
......
/* (C) 2022 YiRing, Inc. */
package com.yiring.common.config;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
......@@ -28,8 +26,8 @@ import org.springframework.core.convert.converter.Converter;
@Configuration
public class DateTimeConfig {
@Bean(name = "mapperObject")
public ObjectMapper getObjectMapper() {
@Bean
public JavaTimeModule javaTimeModule() {
JavaTimeModule timeModule = new JavaTimeModule();
timeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateFormatter.DATE_TIME));
timeModule.addSerializer(LocalDate.class, new LocalDateSerializer(DateFormatter.DATE));
......@@ -37,9 +35,7 @@ public class DateTimeConfig {
timeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateFormatter.DATE_TIME));
timeModule.addDeserializer(LocalDate.class, new LocalDateDeserializer(DateFormatter.DATE));
timeModule.addDeserializer(LocalTime.class, new LocalTimeDeserializer(DateFormatter.TIME));
// feat: add AdminServerModule
// .setSerializationInclusion(JsonInclude.Include.NON_NULL)
return new ObjectMapper().setSerializationInclusion(JsonInclude.Include.NON_NULL).registerModules(timeModule);
return timeModule;
}
@Bean
......
/* (C) 2022 YiRing, Inc. */
package com.yiring.common.config;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import javax.annotation.Resource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* Jackson Config
*
* @author Jim
* @version 0.1
* 2022/4/17 16:54
*/
@Configuration
public class JacksonConfig {
@Resource
JavaTimeModule javaTimeModule;
@Bean
public ObjectMapper objectMapper() {
ObjectMapper mapper = new ObjectMapper();
mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
mapper.registerModule(javaTimeModule);
// feat: add AdminServerModule
return mapper;
}
}
......@@ -4,6 +4,7 @@ package com.yiring.common.core;
import com.fasterxml.jackson.annotation.JsonInclude;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serial;
import java.io.Serializable;
import lombok.AccessLevel;
import lombok.Builder;
......@@ -28,6 +29,7 @@ import lombok.extern.slf4j.Slf4j;
@FieldDefaults(level = AccessLevel.PRIVATE)
public class Result<T extends Serializable> implements Serializable {
@Serial
private static final long serialVersionUID = -4802543396830024571L;
/**
......
/* (C) 2022 YiRing, Inc. */
package com.yiring.common.domain;
import java.time.LocalDateTime;
import java.util.Objects;
import javax.persistence.Column;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.MappedSuperclass;
import lombok.*;
import lombok.experimental.FieldDefaults;
import lombok.experimental.FieldNameConstants;
import lombok.experimental.SuperBuilder;
import org.hibernate.Hibernate;
import org.hibernate.annotations.Comment;
import org.hibernate.annotations.CreationTimestamp;
import org.hibernate.annotations.GenericGenerator;
import org.hibernate.annotations.UpdateTimestamp;
import org.hibernate.snowflake.SnowflakeId;
/**
* 基础表抽象类
*
* @author Jim
* @version 0.1
* 2022/4/17 12:11
*/
@Getter
@Setter
@ToString
@NoArgsConstructor
@AllArgsConstructor
@FieldNameConstants
@FieldDefaults(level = AccessLevel.PRIVATE)
@SuperBuilder(toBuilder = true)
@MappedSuperclass
public abstract class BasicEntity {
@Comment("主键")
@Id
@GeneratedValue(generator = SnowflakeId.GENERATOR)
@GenericGenerator(name = SnowflakeId.GENERATOR, strategy = SnowflakeId.Strategy.LONG)
Long id;
@Comment("创建时间")
@Column(nullable = false)
@CreationTimestamp
LocalDateTime createTime;
@Comment("最后修改时间")
@Column(nullable = false)
@UpdateTimestamp
LocalDateTime updateTime;
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || Hibernate.getClass(this) != Hibernate.getClass(o)) return false;
BasicEntity that = (BasicEntity) o;
return id != null && Objects.equals(id, that.id);
}
@Override
public int hashCode() {
return getClass().hashCode();
}
}
......@@ -2,6 +2,7 @@
package com.yiring.common.exception;
import com.yiring.common.core.Status;
import java.io.Serial;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Data;
......@@ -22,6 +23,7 @@ import lombok.experimental.FieldDefaults;
@FieldDefaults(level = AccessLevel.PRIVATE)
public class FailStatusException extends RuntimeException {
@Serial
private static final long serialVersionUID = -4226669531686389671L;
/**
......
......@@ -3,6 +3,7 @@ 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;
......@@ -25,6 +26,7 @@ import lombok.experimental.FieldDefaults;
@FieldDefaults(level = AccessLevel.PRIVATE)
public class IdParam implements Serializable {
@Serial
private static final long serialVersionUID = -8690942241103456893L;
@ApiModelProperty(value = "id", example = "1", required = true)
......
......@@ -3,6 +3,7 @@ package com.yiring.common.param;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serial;
import java.io.Serializable;
import java.util.Objects;
import javax.validation.constraints.DecimalMin;
......@@ -32,6 +33,7 @@ import org.springframework.data.domain.Sort;
@FieldDefaults(level = AccessLevel.PRIVATE)
public class PageParam implements Serializable {
@Serial
private static final long serialVersionUID = 6103761701912769946L;
@ApiModelProperty(value = "分页条数", example = "10", required = true)
......
......@@ -3,6 +3,7 @@ package com.yiring.common.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDateTime;
import lombok.*;
......@@ -22,6 +23,7 @@ import lombok.experimental.FieldDefaults;
@FieldDefaults(level = AccessLevel.PRIVATE)
public class DataVo<T extends Serializable> implements Serializable {
@Serial
private static final long serialVersionUID = 2472779197432240431L;
@ApiModelProperty(value = "数据")
......
......@@ -3,6 +3,7 @@ package com.yiring.common.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serial;
import java.io.Serializable;
import lombok.*;
import lombok.experimental.FieldDefaults;
......@@ -23,6 +24,7 @@ import lombok.experimental.FieldDefaults;
@FieldDefaults(level = AccessLevel.PRIVATE)
public class KeyValueVo implements Serializable {
@Serial
private static final long serialVersionUID = -5238793972067296346L;
@ApiModelProperty(value = "key", example = "key")
......
......@@ -3,6 +3,7 @@ package com.yiring.common.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.List;
......@@ -22,6 +23,7 @@ import lombok.experimental.FieldDefaults;
@FieldDefaults(level = AccessLevel.PRIVATE)
public class PageVo<T extends Serializable> implements Serializable {
@Serial
private static final long serialVersionUID = 6103761701912769946L;
@ApiModelProperty(value = "数据")
......
......@@ -2,9 +2,12 @@ dependencies {
implementation project(":basic-common:core")
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-validation'
// swagger(knife4j)
implementation "com.github.xiaoymin:knife4j-spring-boot-starter:${knife4jVersion}"
implementation "org.hibernate.validator:hibernate-validator:${hibernateValidatorVersion}"
// hutool-core
implementation "cn.hutool:hutool-core:${hutoolVersion}"
}
/* (C) 2021 YiRing, Inc. */
package com.yiring.common.swagger;
import cn.hutool.core.net.NetUtil;
import com.github.xiaoymin.knife4j.spring.extension.OpenApiExtensionResolver;
import com.yiring.common.core.Status;
import io.swagger.annotations.Api;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.function.Predicate;
import java.util.stream.Collectors;
import javax.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.CommandLineRunner;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
......@@ -41,7 +45,7 @@ import springfox.documentation.swagger2.annotations.EnableSwagger2WebMvc;
@EnableSwagger2WebMvc
@Configuration
@Import(BeanValidatorPluginsConfiguration.class)
public class SwaggerConfig {
public class SwaggerConfig implements CommandLineRunner {
@Value("${spring.application.name}")
String applicationName;
......@@ -61,8 +65,6 @@ public class SwaggerConfig {
}
private Docket api(Predicate<String> paths) {
log.info("API Doc: http://localhost:{}{}/doc.html", port, path);
String group = "default";
return new Docket(DocumentationType.SWAGGER_2)
.groupName(group)
......@@ -99,4 +101,16 @@ public class SwaggerConfig {
.map(status -> new ResponseMessageBuilder().code(status.value()).message(status.getReasonPhrase()).build())
.collect(Collectors.toList());
}
@Override
public void run(String... args) {
Set<String> hosts = new HashSet<>();
hosts.add("localhost");
hosts.addAll(NetUtil.localIpv4s());
String link = hosts
.stream()
.map(host -> "> http://" + host + ":" + port + path + "/doc.html")
.collect(Collectors.joining("\n\t\t"));
System.out.println("\n\t📖 API Doc (Swagger2): \n\t\t" + link + "\n");
}
}
......@@ -8,6 +8,7 @@ import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.ser.ContextualSerializer;
import com.fasterxml.jackson.databind.ser.std.StdSerializer;
import java.io.IOException;
import java.io.Serial;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
......@@ -21,6 +22,7 @@ import java.util.Objects;
*/
public class ObjectMappingSerializer extends StdSerializer<Object> implements ContextualSerializer {
@Serial
private static final long serialVersionUID = -1924851196524453827L;
protected ObjectMappingSerializer() {
......
......@@ -7,10 +7,6 @@ buildscript {
knife4jVersion = '2.0.9'
// https://mvnrepository.com/artifact/io.swagger/swagger-annotations
swaggerAnnotationsVersion = '1.6.6'
// https://mvnrepository.com/artifact/org.hibernate.validator/hibernate-validator
hibernateValidatorVersion = '7.0.4.Final'
// https://mvnrepository.com/artifact/org.hibernate.orm/hibernate-spatial
hibernateSpatialVersion = '5.4.33.Final'
// https://mvnrepository.com/artifact/cn.dev33/sa-token-spring-boot-starter
saTokenVersion = '1.29.1.trial'
// https://mvnrepository.com/artifact/cn.hutool/hutool-all
......@@ -22,27 +18,29 @@ buildscript {
// https://mvnrepository.com/artifact/com.squareup.okhttp3/okhttp
okhttpVersion = '4.9.3'
// https://mvnrepository.com/artifact/io.minio/minio
minioVersion = '8.3.7'
minioVersion = '8.3.8'
// https://mvnrepository.com/artifact/com.baomidou/mybatis-plus-boot-starter
mybatisPlusVersion = '3.5.1'
// https://mvnrepository.com/artifact/org.hibernate/hibernate-spatial
hibernateSpatialVersion = '5.6.8.Final'
// https://mvnrepository.com/artifact/org.locationtech.jts/jts-core
jtsVersion = '1.18.2'
// https://mvnrepository.com/artifact/com.vladmihalcea/hibernate-types-52
hibernateTypesVersion = '2.16.0'
// https://mvnrepository.com/artifact/com.vladmihalcea/hibernate-types-55
hibernateTypesVersion = '2.16.1'
}
}
plugins {
id 'java'
id 'org.springframework.boot' version '2.5.12'
id 'org.springframework.boot' version '2.6.6'
// https://plugins.gradle.org/plugin/io.spring.dependency-management
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
// https://plugins.gradle.org/plugin/com.diffplug.spotless
id "com.diffplug.spotless" version "6.3.0"
id "com.diffplug.spotless" version "6.4.2"
// https://plugins.gradle.org/plugin/com.github.spotbugs
// id "com.github.spotbugs" version "4.7.10"
// id "com.github.spotbugs" version "5.0.6"
}
sourceCompatibility = '1.8'
allprojects {
repositories {
mavenLocal()
......@@ -51,12 +49,15 @@ allprojects {
maven { url 'https://maven.aliyun.com/repository/public' }
mavenCentral()
}
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}
subprojects {
apply plugin: 'java'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
apply plugin: 'java'
apply plugin: "com.diffplug.spotless"
// apply plugin: "com.github.spotbugs"
......@@ -110,7 +111,7 @@ subprojects {
licenseHeader '/* (C) $YEAR YiRing, Inc. */'
// https://www.npmjs.com/package/prettier
// https://www.npmjs.com/package/prettier-plugin-java
prettier(['prettier': '2.6.0', 'prettier-plugin-java': '1.6.1']).config([
prettier(['prettier': '2.6.2', 'prettier-plugin-java': '1.6.1']).config([
'parser' : 'java',
'tabWidth' : 4,
'printWidth': 120,
......@@ -120,9 +121,6 @@ subprojects {
}
}
// format
spotlessApply
// GitHook pre-commit (spotless, spotbugs)
def hook = new File("$rootProject.projectDir/.git/hooks/pre-commit")
hook.text = """#!/bin/bash
......
......@@ -3,10 +3,11 @@
### 基础
<!-- prettier-ignore -->
- [SpringBoot v2.5.x](https://spring.io/projects/spring-boot)
- [SpringBoot v2.6.x](https://spring.io/projects/spring-boot)
- [Lombok](https://projectlombok.org/)
- [Spring Web](https://docs.spring.io/spring-framework/docs/current/reference/html/web.html)
- [Spring Data Jpa](https://spring.io/projects/spring-data-jpa)
- [Spring Data Redis](https://spring.io/projects/spring-data-redis)
### SQL
......@@ -42,6 +43,7 @@
<!-- prettier-ignore -->
- [Hutool](https://www.hutool.cn/) 工具包
- [FastJson](https://github.com/alibaba/fastjson) JSON 工具包
### Doc
......@@ -52,7 +54,12 @@
<!-- prettier-ignore -->
- [sa-token](https://sa-token.dev33.cn/) 权限认证框架
- [MinIO](https://docs.min.io/) MinIO S3 文件存储
- [MinIO](https://docs.min.io/) 文件存储
### 可选
<!-- prettier-ignore -->
- [MyBatis Plus](https://baomidou.com/) MyBatis 增强包(允许与 JPA 混合使用)
### 构建工具
......
# https://github.com/diffplug/spotless/issues/834
# fix: jdk16+
org.gradle.jvmargs=--add-exports jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED \
--add-exports jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED \
--add-exports jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED \
--add-exports jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED \
--add-exports jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-bin.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-7.4.1-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论