From 7c6c387a07c2e9320649b9922e4f2271c31de08f Mon Sep 17 00:00:00 2001 From: lanyuanxiaoyao Date: Thu, 27 Mar 2025 18:38:42 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B0=9D=E8=AF=95=E5=A2=9E=E5=8A=A0=E7=BB=84?= =?UTF-8?q?=E7=BB=87=E6=9E=B6=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/compiler.xml | 1 + .../server/configuration/Constants.java | 9 ++++ ...flakeIdGenerator.java => SnowflakeId.java} | 38 +++++++++++----- .../server/entity/Department.java | 45 +++++++++++++++++++ .../server/entity/Organization.java | 35 +++++++++++++++ .../lanyuanxiaoyao/server/entity/User.java | 30 +++++++++++++ 6 files changed, 146 insertions(+), 12 deletions(-) create mode 100644 src/main/java/com/lanyuanxiaoyao/server/configuration/Constants.java rename src/main/java/com/lanyuanxiaoyao/server/configuration/database/{SnowflakeIdGenerator.java => SnowflakeId.java} (66%) create mode 100644 src/main/java/com/lanyuanxiaoyao/server/entity/Department.java create mode 100644 src/main/java/com/lanyuanxiaoyao/server/entity/Organization.java create mode 100644 src/main/java/com/lanyuanxiaoyao/server/entity/User.java diff --git a/.idea/compiler.xml b/.idea/compiler.xml index 67c191f..62ac42e 100644 --- a/.idea/compiler.xml +++ b/.idea/compiler.xml @@ -8,6 +8,7 @@ + diff --git a/src/main/java/com/lanyuanxiaoyao/server/configuration/Constants.java b/src/main/java/com/lanyuanxiaoyao/server/configuration/Constants.java new file mode 100644 index 0000000..2c24ccc --- /dev/null +++ b/src/main/java/com/lanyuanxiaoyao/server/configuration/Constants.java @@ -0,0 +1,9 @@ +package com.lanyuanxiaoyao.server.configuration; + +/** + * @author lanyuanxiaoyao + * @version 20250327 + */ +public interface Constants { + String DATABASE_TABLE_PREFIX = "system_"; +} diff --git a/src/main/java/com/lanyuanxiaoyao/server/configuration/database/SnowflakeIdGenerator.java b/src/main/java/com/lanyuanxiaoyao/server/configuration/database/SnowflakeId.java similarity index 66% rename from src/main/java/com/lanyuanxiaoyao/server/configuration/database/SnowflakeIdGenerator.java rename to src/main/java/com/lanyuanxiaoyao/server/configuration/database/SnowflakeId.java index f6bc1e5..54f93db 100644 --- a/src/main/java/com/lanyuanxiaoyao/server/configuration/database/SnowflakeIdGenerator.java +++ b/src/main/java/com/lanyuanxiaoyao/server/configuration/database/SnowflakeId.java @@ -1,11 +1,17 @@ package com.lanyuanxiaoyao.server.configuration.database; -import java.io.Serializable; +import java.lang.annotation.Retention; +import java.lang.annotation.Target; import java.time.Instant; +import lombok.extern.slf4j.Slf4j; +import org.hibernate.annotations.IdGeneratorType; +import org.hibernate.annotations.ValueGenerationType; import org.hibernate.engine.spi.SharedSessionContractImplementor; import org.hibernate.id.IdentifierGenerator; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; + +import static java.lang.annotation.ElementType.FIELD; +import static java.lang.annotation.ElementType.METHOD; +import static java.lang.annotation.RetentionPolicy.RUNTIME; /** * 使用雪花算法作为ID生成器 @@ -13,16 +19,24 @@ import org.slf4j.LoggerFactory; * @author lanyuanxiaoyao * @date 2024-11-14 */ -public class SnowflakeIdGenerator implements IdentifierGenerator { - private static final Logger logger = LoggerFactory.getLogger(SnowflakeIdGenerator.class); +@Slf4j +public class SnowflakeId { + @IdGeneratorType(IdGenerator.class) + @ValueGenerationType(generatedBy = IdGenerator.class) + @Retention(RUNTIME) + @Target({FIELD, METHOD}) + public @interface Generator { + } - @Override - public Serializable generate(SharedSessionContractImplementor session, Object object) { - try { - return Snowflake.next(); - } catch (Exception e) { - logger.error("Generate snowflake id failed", e); - throw new RuntimeException(e); + public static final class IdGenerator implements IdentifierGenerator { + @Override + public Object generate(SharedSessionContractImplementor session, Object object) { + try { + return Snowflake.next(); + } catch (Exception e) { + log.error("Generate snowflake id failed", e); + throw new RuntimeException(e); + } } } diff --git a/src/main/java/com/lanyuanxiaoyao/server/entity/Department.java b/src/main/java/com/lanyuanxiaoyao/server/entity/Department.java new file mode 100644 index 0000000..d8ccd9d --- /dev/null +++ b/src/main/java/com/lanyuanxiaoyao/server/entity/Department.java @@ -0,0 +1,45 @@ +package com.lanyuanxiaoyao.server.entity; + +import com.lanyuanxiaoyao.server.configuration.Constants; +import com.lanyuanxiaoyao.server.configuration.database.SnowflakeId; +import jakarta.persistence.ConstraintMode; +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.ForeignKey; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.OneToMany; +import jakarta.persistence.Table; +import java.util.Set; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +/** + * 组织 + * + * @author lanyuanxiaoyao + * @version 20250327 + */ +@Getter +@Setter +@ToString +@Entity +@Table(name = Constants.DATABASE_TABLE_PREFIX + "department") +public class Department { + @Id + @SnowflakeId.Generator + private Long departmentId; + private String departmentName; + + @ManyToOne + @JoinColumn(nullable = false, foreignKey = @ForeignKey(ConstraintMode.NO_CONSTRAINT)) + private Organization organization; + + @ManyToOne + private Department parent; + @OneToMany(fetch = FetchType.LAZY, mappedBy = "departmentParent") + @ToString.Exclude + private Set children; +} diff --git a/src/main/java/com/lanyuanxiaoyao/server/entity/Organization.java b/src/main/java/com/lanyuanxiaoyao/server/entity/Organization.java new file mode 100644 index 0000000..000d3e6 --- /dev/null +++ b/src/main/java/com/lanyuanxiaoyao/server/entity/Organization.java @@ -0,0 +1,35 @@ +package com.lanyuanxiaoyao.server.entity; + +import com.lanyuanxiaoyao.server.configuration.Constants; +import com.lanyuanxiaoyao.server.configuration.database.SnowflakeId; +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.Id; +import jakarta.persistence.OneToMany; +import jakarta.persistence.Table; +import java.util.Set; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +/** + * 组织 + * + * @author lanyuanxiaoyao + * @version 20250327 + */ +@Getter +@Setter +@ToString +@Entity +@Table(name = Constants.DATABASE_TABLE_PREFIX + "organization") +public class Organization { + @Id + @SnowflakeId.Generator + private Long organizationId; + private String organizationName; + + @OneToMany(fetch = FetchType.LAZY, mappedBy = "organization") + @ToString.Exclude + private Set departments; +} diff --git a/src/main/java/com/lanyuanxiaoyao/server/entity/User.java b/src/main/java/com/lanyuanxiaoyao/server/entity/User.java new file mode 100644 index 0000000..c77fa14 --- /dev/null +++ b/src/main/java/com/lanyuanxiaoyao/server/entity/User.java @@ -0,0 +1,30 @@ +package com.lanyuanxiaoyao.server.entity; + +import com.lanyuanxiaoyao.server.configuration.Constants; +import com.lanyuanxiaoyao.server.configuration.database.SnowflakeId; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.Table; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +/** + * 用户 + * + * @author lanyuanxiaoyao + * @version 20250327 + */ +@Getter +@Setter +@ToString +@Entity +@Table(name = Constants.DATABASE_TABLE_PREFIX + "user") +public class User { + @Id + @SnowflakeId.Generator + private Long userId; + private String userCode; + private String userNickName; + private String userSecret; +}