diff --git a/pom.xml b/pom.xml
index d5f603e0..453ff635 100644
--- a/pom.xml
+++ b/pom.xml
@@ -29,6 +29,8 @@
+
+
@@ -44,6 +46,12 @@
+
+
+ eu.bitwalker
+ UserAgentUtils
+ 1.21
+
org.springframework.boot
spring-boot-starter-web
diff --git a/src/main/java/cn/lihongjie/coal/common/JwtUtils.java b/src/main/java/cn/lihongjie/coal/common/JwtUtils.java
new file mode 100644
index 00000000..5a7f4f23
--- /dev/null
+++ b/src/main/java/cn/lihongjie/coal/common/JwtUtils.java
@@ -0,0 +1,10 @@
+package cn.lihongjie.coal.common;
+
+import lombok.experimental.UtilityClass;
+
+@UtilityClass
+public class JwtUtils {
+
+
+
+}
diff --git a/src/main/java/cn/lihongjie/coal/controller/BaseController.java b/src/main/java/cn/lihongjie/coal/controller/BaseController.java
index d25dae82..9bb93ff4 100644
--- a/src/main/java/cn/lihongjie/coal/controller/BaseController.java
+++ b/src/main/java/cn/lihongjie/coal/controller/BaseController.java
@@ -3,7 +3,7 @@ package cn.lihongjie.coal.controller;
import cn.lihongjie.coal.dao.BaseRepository;
import cn.lihongjie.coal.dto.CommonQuery;
import cn.lihongjie.coal.dto.IdRequest;
-import cn.lihongjie.coal.entity.BaseEntity;
+import cn.lihongjie.coal.entity.base.BaseEntity;
import cn.lihongjie.coal.service.BaseService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
diff --git a/src/main/java/cn/lihongjie/coal/controller/OrganizationController.java b/src/main/java/cn/lihongjie/coal/controller/OrganizationController.java
new file mode 100644
index 00000000..fd215274
--- /dev/null
+++ b/src/main/java/cn/lihongjie/coal/controller/OrganizationController.java
@@ -0,0 +1,12 @@
+package cn.lihongjie.coal.controller;
+
+import cn.lihongjie.coal.dao.OrganizationRepository;
+import cn.lihongjie.coal.entity.OrganizationEntity;
+import cn.lihongjie.coal.service.OrganizationService;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+@RequestMapping("/coalWashingDailyAnalysis")
+public class OrganizationController extends BaseController {
+}
diff --git a/src/main/java/cn/lihongjie/coal/dao/OrganizationRepository.java b/src/main/java/cn/lihongjie/coal/dao/OrganizationRepository.java
new file mode 100644
index 00000000..1e1366d9
--- /dev/null
+++ b/src/main/java/cn/lihongjie/coal/dao/OrganizationRepository.java
@@ -0,0 +1,8 @@
+package cn.lihongjie.coal.dao;
+
+import org.springframework.stereotype.Repository;
+import cn.lihongjie.coal.entity.OrganizationEntity;
+
+@Repository
+public interface OrganizationRepository extends BaseRepository {
+}
\ No newline at end of file
diff --git a/src/main/java/cn/lihongjie/coal/entity/CoalWashingDailyAnalysisEntity.java b/src/main/java/cn/lihongjie/coal/entity/CoalWashingDailyAnalysisEntity.java
index 9f8d15bc..4240d066 100644
--- a/src/main/java/cn/lihongjie/coal/entity/CoalWashingDailyAnalysisEntity.java
+++ b/src/main/java/cn/lihongjie/coal/entity/CoalWashingDailyAnalysisEntity.java
@@ -1,5 +1,6 @@
package cn.lihongjie.coal.entity;
+import cn.lihongjie.coal.entity.base.OrgCommonEntity;
import jakarta.persistence.Entity;
import lombok.Data;
import org.hibernate.annotations.Comment;
@@ -8,7 +9,7 @@ import java.time.LocalDate;
@Entity
@Data
-public class CoalWashingDailyAnalysisEntity extends BaseEntity {
+public class CoalWashingDailyAnalysisEntity extends OrgCommonEntity {
diff --git a/src/main/java/cn/lihongjie/coal/entity/DictionaryEntity.java b/src/main/java/cn/lihongjie/coal/entity/DictionaryEntity.java
index 08eec1c9..f3d54bb6 100644
--- a/src/main/java/cn/lihongjie/coal/entity/DictionaryEntity.java
+++ b/src/main/java/cn/lihongjie/coal/entity/DictionaryEntity.java
@@ -1,12 +1,12 @@
package cn.lihongjie.coal.entity;
+import cn.lihongjie.coal.entity.base.CommonEntity;
import com.fasterxml.jackson.annotation.JsonManagedReference;
import jakarta.persistence.Entity;
import jakarta.persistence.OneToMany;
import lombok.Getter;
import lombok.Setter;
import org.hibernate.annotations.Comment;
-import org.hibernate.annotations.JoinFormula;
import java.util.List;
diff --git a/src/main/java/cn/lihongjie/coal/entity/DictionaryItemEntity.java b/src/main/java/cn/lihongjie/coal/entity/DictionaryItemEntity.java
index ee0fc24e..3f165c9c 100644
--- a/src/main/java/cn/lihongjie/coal/entity/DictionaryItemEntity.java
+++ b/src/main/java/cn/lihongjie/coal/entity/DictionaryItemEntity.java
@@ -1,5 +1,6 @@
package cn.lihongjie.coal.entity;
+import cn.lihongjie.coal.entity.base.CommonEntity;
import com.fasterxml.jackson.annotation.JsonBackReference;
import com.fasterxml.jackson.annotation.JsonManagedReference;
import jakarta.persistence.*;
diff --git a/src/main/java/cn/lihongjie/coal/entity/OperationLog.java b/src/main/java/cn/lihongjie/coal/entity/OperationLog.java
new file mode 100644
index 00000000..03a52170
--- /dev/null
+++ b/src/main/java/cn/lihongjie/coal/entity/OperationLog.java
@@ -0,0 +1,39 @@
+package cn.lihongjie.coal.entity;
+
+import cn.lihongjie.coal.entity.base.OrgBaseEntity;
+import jakarta.persistence.Entity;
+import jakarta.persistence.OneToOne;
+import lombok.Data;
+import org.hibernate.annotations.Comment;
+
+@Entity
+@Data
+@Comment("操作日志")
+public class OperationLog extends OrgBaseEntity {
+
+ @Comment("ip")
+ private String ip;
+ @Comment("ip定位")
+ private String ipLocation;
+
+ @Comment("userAgent")
+ private String userAgent;
+
+
+ @Comment("耗时")
+ private Integer timeCost;
+
+ @Comment("URL")
+ private String url;
+
+
+ @Comment("操作状态")
+ @OneToOne
+ private DictionaryItemEntity status;
+
+ @Comment("错误堆栈")
+ private String stacktrace;
+
+
+
+}
diff --git a/src/main/java/cn/lihongjie/coal/entity/OrganizationEntity.java b/src/main/java/cn/lihongjie/coal/entity/OrganizationEntity.java
new file mode 100644
index 00000000..1b98f3ed
--- /dev/null
+++ b/src/main/java/cn/lihongjie/coal/entity/OrganizationEntity.java
@@ -0,0 +1,30 @@
+package cn.lihongjie.coal.entity;
+
+import cn.lihongjie.coal.entity.base.CommonEntity;
+import com.fasterxml.jackson.annotation.JsonBackReference;
+import com.fasterxml.jackson.annotation.JsonManagedReference;
+import jakarta.persistence.*;
+import lombok.Getter;
+import lombok.Setter;
+import org.hibernate.annotations.Comment;
+
+import java.util.List;
+
+@Entity
+@Comment("机构")
+@Getter
+@Setter
+public class OrganizationEntity extends CommonEntity {
+
+
+ @OneToMany
+ @JsonManagedReference
+ private List children;
+
+ @ManyToOne
+ @JsonBackReference
+ @JoinColumn(name = "parent_id", foreignKey = @ForeignKey(value = ConstraintMode.NO_CONSTRAINT))
+ private OrganizationEntity parent;
+
+
+}
diff --git a/src/main/java/cn/lihongjie/coal/entity/PermissionEntity.java b/src/main/java/cn/lihongjie/coal/entity/PermissionEntity.java
new file mode 100644
index 00000000..0dc3d144
--- /dev/null
+++ b/src/main/java/cn/lihongjie/coal/entity/PermissionEntity.java
@@ -0,0 +1,23 @@
+package cn.lihongjie.coal.entity;
+
+import cn.lihongjie.coal.entity.base.CommonEntity;
+import com.fasterxml.jackson.annotation.JsonManagedReference;
+import jakarta.persistence.Entity;
+import jakarta.persistence.ManyToMany;
+import lombok.Data;
+import org.hibernate.annotations.Comment;
+
+import java.util.List;
+
+@Data
+@Entity
+@Comment("权限")
+public class PermissionEntity extends CommonEntity {
+
+
+ @ManyToMany(mappedBy = "permissions")
+ @JsonManagedReference
+ private List resources;
+
+
+}
diff --git a/src/main/java/cn/lihongjie/coal/entity/ResourceEntity.java b/src/main/java/cn/lihongjie/coal/entity/ResourceEntity.java
new file mode 100644
index 00000000..d6799b86
--- /dev/null
+++ b/src/main/java/cn/lihongjie/coal/entity/ResourceEntity.java
@@ -0,0 +1,49 @@
+package cn.lihongjie.coal.entity;
+
+import cn.lihongjie.coal.entity.base.CommonEntity;
+import com.fasterxml.jackson.annotation.JsonBackReference;
+import com.fasterxml.jackson.annotation.JsonManagedReference;
+import jakarta.persistence.*;
+import lombok.Data;
+import org.hibernate.annotations.Comment;
+
+import java.util.List;
+
+@Data
+@Entity
+@Comment("资源")
+public class ResourceEntity extends CommonEntity {
+
+ @ManyToMany
+ @JsonBackReference
+ private List permissions;
+
+
+ @OneToMany
+ @JsonManagedReference
+ private List children;
+
+ @ManyToOne
+ @JsonBackReference
+ @JoinColumn(name = "parent_id", foreignKey = @ForeignKey(value = ConstraintMode.NO_CONSTRAINT))
+ private ResourceEntity parent;
+
+
+ @Comment("资源类型")
+ private String type;
+
+
+
+ @Comment("资源地址")
+ private String url;
+
+
+
+
+
+
+
+
+
+
+}
diff --git a/src/main/java/cn/lihongjie/coal/entity/RoleEntity.java b/src/main/java/cn/lihongjie/coal/entity/RoleEntity.java
new file mode 100644
index 00000000..2146a11a
--- /dev/null
+++ b/src/main/java/cn/lihongjie/coal/entity/RoleEntity.java
@@ -0,0 +1,23 @@
+package cn.lihongjie.coal.entity;
+
+import cn.lihongjie.coal.entity.base.OrgBaseEntity;
+import com.fasterxml.jackson.annotation.JsonBackReference;
+import jakarta.persistence.Entity;
+import jakarta.persistence.ManyToMany;
+import lombok.Data;
+
+import java.util.List;
+
+@Entity
+@Data
+public class RoleEntity extends OrgBaseEntity {
+
+
+ @ManyToMany(mappedBy = "roles")
+ @JsonBackReference
+ private List users;
+
+ @ManyToMany
+ private List permissions;
+
+}
diff --git a/src/main/java/cn/lihongjie/coal/entity/UserEntity.java b/src/main/java/cn/lihongjie/coal/entity/UserEntity.java
new file mode 100644
index 00000000..c6df3ccd
--- /dev/null
+++ b/src/main/java/cn/lihongjie/coal/entity/UserEntity.java
@@ -0,0 +1,48 @@
+package cn.lihongjie.coal.entity;
+
+import cn.lihongjie.coal.entity.base.OrgCommonEntity;
+import com.fasterxml.jackson.annotation.JsonManagedReference;
+import jakarta.persistence.Entity;
+import jakarta.persistence.ManyToMany;
+import lombok.Data;
+import org.hibernate.annotations.Comment;
+
+import java.util.List;
+
+@Data
+@Entity
+public class UserEntity extends OrgCommonEntity {
+
+
+ @Comment("用户名")
+ private String username;
+
+ @Comment("密码")
+ private String password;
+
+
+ @Comment("邮箱")
+ private String email;
+
+
+
+ @Comment("手机号")
+ private String phone;
+
+ @ManyToMany
+ @JsonManagedReference
+ private List roles;
+
+
+
+
+
+
+
+
+
+
+
+
+
+}
diff --git a/src/main/java/cn/lihongjie/coal/entity/BaseEntity.java b/src/main/java/cn/lihongjie/coal/entity/base/BaseEntity.java
similarity index 96%
rename from src/main/java/cn/lihongjie/coal/entity/BaseEntity.java
rename to src/main/java/cn/lihongjie/coal/entity/base/BaseEntity.java
index 6227ba6d..940ef89b 100644
--- a/src/main/java/cn/lihongjie/coal/entity/BaseEntity.java
+++ b/src/main/java/cn/lihongjie/coal/entity/base/BaseEntity.java
@@ -1,4 +1,4 @@
-package cn.lihongjie.coal.entity;
+package cn.lihongjie.coal.entity.base;
import jakarta.persistence.GeneratedValue;
diff --git a/src/main/java/cn/lihongjie/coal/entity/CommonEntity.java b/src/main/java/cn/lihongjie/coal/entity/base/CommonEntity.java
similarity index 75%
rename from src/main/java/cn/lihongjie/coal/entity/CommonEntity.java
rename to src/main/java/cn/lihongjie/coal/entity/base/CommonEntity.java
index ff6237e8..e63b6425 100644
--- a/src/main/java/cn/lihongjie/coal/entity/CommonEntity.java
+++ b/src/main/java/cn/lihongjie/coal/entity/base/CommonEntity.java
@@ -1,5 +1,6 @@
-package cn.lihongjie.coal.entity;
+package cn.lihongjie.coal.entity.base;
+import cn.lihongjie.coal.entity.base.BaseEntity;
import jakarta.persistence.MappedSuperclass;
import lombok.Getter;
import lombok.Setter;
@@ -17,6 +18,11 @@ public class CommonEntity extends BaseEntity {
private String code;
+ @Comment("备注")
+ private String remarks;
+
+
+
@Comment("排序键")
private Integer sortKey;
diff --git a/src/main/java/cn/lihongjie/coal/entity/base/OrgBaseEntity.java b/src/main/java/cn/lihongjie/coal/entity/base/OrgBaseEntity.java
new file mode 100644
index 00000000..b745397c
--- /dev/null
+++ b/src/main/java/cn/lihongjie/coal/entity/base/OrgBaseEntity.java
@@ -0,0 +1,18 @@
+package cn.lihongjie.coal.entity.base;
+
+import cn.lihongjie.coal.entity.OrganizationEntity;
+import cn.lihongjie.coal.entity.base.BaseEntity;
+import jakarta.persistence.*;
+import lombok.Getter;
+import lombok.Setter;
+
+@MappedSuperclass
+@Getter
+@Setter
+public class OrgBaseEntity extends BaseEntity {
+
+ @ManyToOne
+ @JoinColumn(name = "organization_id", foreignKey = @ForeignKey(ConstraintMode.NO_CONSTRAINT))
+ private OrganizationEntity organization;
+
+}
diff --git a/src/main/java/cn/lihongjie/coal/entity/base/OrgCommonEntity.java b/src/main/java/cn/lihongjie/coal/entity/base/OrgCommonEntity.java
new file mode 100644
index 00000000..bfd5064e
--- /dev/null
+++ b/src/main/java/cn/lihongjie/coal/entity/base/OrgCommonEntity.java
@@ -0,0 +1,20 @@
+package cn.lihongjie.coal.entity.base;
+
+import cn.lihongjie.coal.entity.OrganizationEntity;
+import cn.lihongjie.coal.entity.base.CommonEntity;
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import jakarta.persistence.*;
+import lombok.Getter;
+import lombok.Setter;
+
+@MappedSuperclass
+@Getter
+@Setter
+public class OrgCommonEntity extends CommonEntity {
+
+ @ManyToOne
+ @JoinColumn(name = "organization_id", foreignKey = @ForeignKey(ConstraintMode.NO_CONSTRAINT))
+ @JsonIgnore
+ private OrganizationEntity organization;
+
+}
diff --git a/src/main/java/cn/lihongjie/coal/service/BaseService.java b/src/main/java/cn/lihongjie/coal/service/BaseService.java
index 39898e7c..574df88b 100644
--- a/src/main/java/cn/lihongjie/coal/service/BaseService.java
+++ b/src/main/java/cn/lihongjie/coal/service/BaseService.java
@@ -3,13 +3,11 @@ package cn.lihongjie.coal.service;
import cn.lihongjie.coal.dao.BaseRepository;
import cn.lihongjie.coal.dto.CommonQuery;
import cn.lihongjie.coal.dto.IdRequest;
-import cn.lihongjie.coal.dto.PagedData;
-import cn.lihongjie.coal.entity.BaseEntity;
+import cn.lihongjie.coal.entity.base.BaseEntity;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.convert.ConversionService;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
-import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
public abstract class BaseService> {
diff --git a/src/main/java/cn/lihongjie/coal/service/OrganizationService.java b/src/main/java/cn/lihongjie/coal/service/OrganizationService.java
new file mode 100644
index 00000000..d8591e86
--- /dev/null
+++ b/src/main/java/cn/lihongjie/coal/service/OrganizationService.java
@@ -0,0 +1,11 @@
+package cn.lihongjie.coal.service;
+
+import cn.lihongjie.coal.dao.OrganizationRepository;
+import cn.lihongjie.coal.entity.OrganizationEntity;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Service;
+
+@Service
+@Slf4j
+public class OrganizationService extends BaseService {
+}