diff --git a/pom.xml b/pom.xml
index 7c29fabd..211c9d4b 100644
--- a/pom.xml
+++ b/pom.xml
@@ -58,6 +58,15 @@
+
+ org.springframework.boot
+ spring-boot-starter-security
+
+
+ org.mapstruct
+ mapstruct
+ 1.5.5.Final
+
org.springframework.boot
spring-boot-starter-cache
@@ -197,10 +206,38 @@
ortools-java
9.6.2534
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+
+
+
+ org.projectlombok
+ lombok
+ 1.18.28
+
+
+ org.mapstruct
+ mapstruct-processor
+ 1.5.5.Final
+
+
+ org.projectlombok
+ lombok-mapstruct-binding
+ 0.2.0
+
+
+
+
+
org.springframework.boot
spring-boot-maven-plugin
diff --git a/src/main/java/cn/lihongjie/coal/controller/PermissionController.java b/src/main/java/cn/lihongjie/coal/controller/PermissionController.java
new file mode 100644
index 00000000..94f55060
--- /dev/null
+++ b/src/main/java/cn/lihongjie/coal/controller/PermissionController.java
@@ -0,0 +1,47 @@
+package cn.lihongjie.coal.controller;
+
+import cn.lihongjie.coal.dto.*;
+import cn.lihongjie.coal.service.PermissionService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RequestMapping("/permission")
+@RestController
+public class PermissionController {
+
+ @Autowired
+ PermissionService service;
+
+ @PostMapping("/create")
+ public PermissionDto create(@RequestBody CreatePermissionDto dto) {
+ return this.service.create(dto);
+ }
+
+ @PostMapping("/update")
+ public PermissionDto update(@RequestBody UpdatePermissionDto dto) {
+ return this.service.update(dto);
+ }
+
+
+ @PostMapping("/delete")
+ public Object delete(@RequestBody IdRequest dto) {
+ this.service.delete(dto);
+ return null;
+ }
+
+
+ @PostMapping("/list")
+ public Page list(@RequestBody CommonQuery dto) {
+ return this.service.list(dto);
+ }
+
+
+ @PostMapping("/getById")
+ public PermissionDto getById(@RequestBody IdRequest dto) {
+ return this.service.getById(dto.getId());
+ }
+}
diff --git a/src/main/java/cn/lihongjie/coal/controller/ResourceController.java b/src/main/java/cn/lihongjie/coal/controller/ResourceController.java
new file mode 100644
index 00000000..f53c26b2
--- /dev/null
+++ b/src/main/java/cn/lihongjie/coal/controller/ResourceController.java
@@ -0,0 +1,47 @@
+package cn.lihongjie.coal.controller;
+
+import cn.lihongjie.coal.dto.*;
+import cn.lihongjie.coal.service.ResourceService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RequestMapping("/resource")
+@RestController
+public class ResourceController {
+
+ @Autowired
+ ResourceService service;
+
+ @PostMapping("/create")
+ public ResourceDto create(@RequestBody CreateResourceDto dto) {
+ return this.service.create(dto);
+ }
+
+ @PostMapping("/update")
+ public ResourceDto update(@RequestBody UpdateResourceDto dto) {
+ return this.service.update(dto);
+ }
+
+
+ @PostMapping("/delete")
+ public Object delete(@RequestBody IdRequest dto) {
+ this.service.delete(dto);
+ return null;
+ }
+
+
+ @PostMapping("/list")
+ public Page list(@RequestBody CommonQuery dto) {
+ return this.service.list(dto);
+ }
+
+
+ @PostMapping("/getById")
+ public ResourceDto getById(@RequestBody IdRequest dto) {
+ return this.service.getById(dto.getId());
+ }
+}
diff --git a/src/main/java/cn/lihongjie/coal/controller/RoleController.java b/src/main/java/cn/lihongjie/coal/controller/RoleController.java
new file mode 100644
index 00000000..8db3055d
--- /dev/null
+++ b/src/main/java/cn/lihongjie/coal/controller/RoleController.java
@@ -0,0 +1,47 @@
+package cn.lihongjie.coal.controller;
+
+import cn.lihongjie.coal.dto.*;
+import cn.lihongjie.coal.service.RoleService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RequestMapping("/Role")
+@RestController
+public class RoleController {
+
+ @Autowired
+ RoleService service;
+
+ @PostMapping("/create")
+ public RoleDto create(@RequestBody CreateRoleDto dto) {
+ return this.service.create(dto);
+ }
+
+ @PostMapping("/update")
+ public RoleDto update(@RequestBody UpdateRoleDto dto) {
+ return this.service.update(dto);
+ }
+
+
+ @PostMapping("/delete")
+ public Object delete(@RequestBody IdRequest dto) {
+ this.service.delete(dto);
+ return null;
+ }
+
+
+ @PostMapping("/list")
+ public Page list(@RequestBody CommonQuery dto) {
+ return this.service.list(dto);
+ }
+
+
+ @PostMapping("/getById")
+ public RoleDto getById(@RequestBody IdRequest dto) {
+ return this.service.getById(dto.getId());
+ }
+}
diff --git a/src/main/java/cn/lihongjie/coal/controller/UserController.java b/src/main/java/cn/lihongjie/coal/controller/UserController.java
new file mode 100644
index 00000000..eaecd3d6
--- /dev/null
+++ b/src/main/java/cn/lihongjie/coal/controller/UserController.java
@@ -0,0 +1,62 @@
+package cn.lihongjie.coal.controller;
+
+import cn.lihongjie.coal.dto.CommonQuery;
+import cn.lihongjie.coal.dto.IdRequest;
+import cn.lihongjie.coal.dto.ChangeUserPwdDto;
+import cn.lihongjie.coal.dto.CreateUserDto;
+import cn.lihongjie.coal.dto.UpdateUserDto;
+import cn.lihongjie.coal.dto.UserDto;
+import cn.lihongjie.coal.service.UserService;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.domain.Page;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RequestMapping("/user")
+@RestController
+public class UserController {
+
+ @Autowired
+ UserService service;
+
+ @PostMapping("/create")
+ public UserDto create(@RequestBody CreateUserDto dto) {
+ return this.service.create(dto);
+ }
+
+ @PostMapping("/update")
+ public UserDto update(@RequestBody UpdateUserDto dto) {
+ return this.service.update(dto);
+ }
+
+
+ @PostMapping("/delete")
+ public Object delete(@RequestBody IdRequest dto) {
+ this.service.delete(dto);
+ return null;
+ }
+
+
+ @PostMapping("/changePwd")
+ public UserDto create(@RequestBody ChangeUserPwdDto dto) {
+ return this.service.changePwd(dto);
+ }
+
+
+
+ @PostMapping("/list")
+ public Page list(@RequestBody CommonQuery dto) {
+ return this.service.list(dto);
+ }
+
+
+
+
+ @PostMapping("/getById")
+ public UserDto getById(@RequestBody IdRequest dto) {
+ return this.service.getById(dto.getId());
+ }
+
+}
diff --git a/src/main/java/cn/lihongjie/coal/dao/BaseRepository.java b/src/main/java/cn/lihongjie/coal/dao/BaseRepository.java
index afd7fb3f..c176fe72 100644
--- a/src/main/java/cn/lihongjie/coal/dao/BaseRepository.java
+++ b/src/main/java/cn/lihongjie/coal/dao/BaseRepository.java
@@ -6,4 +6,10 @@ import org.springframework.data.repository.NoRepositoryBean;
@NoRepositoryBean
public interface BaseRepository extends JpaRepository, JpaSpecificationExecutor {
+
+ public default T get(String id){
+
+ return findById(id).orElseThrow(() -> new RuntimeException("数据不存在: " + id));
+
+ }
}
diff --git a/src/main/java/cn/lihongjie/coal/dao/PermissionRepository.java b/src/main/java/cn/lihongjie/coal/dao/PermissionRepository.java
new file mode 100644
index 00000000..c1a26937
--- /dev/null
+++ b/src/main/java/cn/lihongjie/coal/dao/PermissionRepository.java
@@ -0,0 +1,8 @@
+package cn.lihongjie.coal.dao;
+
+import cn.lihongjie.coal.entity.PermissionEntity;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface PermissionRepository extends BaseRepository {
+}
\ No newline at end of file
diff --git a/src/main/java/cn/lihongjie/coal/dao/ResourceRepository.java b/src/main/java/cn/lihongjie/coal/dao/ResourceRepository.java
new file mode 100644
index 00000000..2eb976d4
--- /dev/null
+++ b/src/main/java/cn/lihongjie/coal/dao/ResourceRepository.java
@@ -0,0 +1,8 @@
+package cn.lihongjie.coal.dao;
+
+import cn.lihongjie.coal.entity.ResourceEntity;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface ResourceRepository extends BaseRepository {
+}
\ No newline at end of file
diff --git a/src/main/java/cn/lihongjie/coal/dao/RoleRepository.java b/src/main/java/cn/lihongjie/coal/dao/RoleRepository.java
new file mode 100644
index 00000000..e165321d
--- /dev/null
+++ b/src/main/java/cn/lihongjie/coal/dao/RoleRepository.java
@@ -0,0 +1,8 @@
+package cn.lihongjie.coal.dao;
+
+import cn.lihongjie.coal.entity.RoleEntity;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface RoleRepository extends BaseRepository {
+}
\ No newline at end of file
diff --git a/src/main/java/cn/lihongjie/coal/dao/UserRepository.java b/src/main/java/cn/lihongjie/coal/dao/UserRepository.java
new file mode 100644
index 00000000..1c3b9a64
--- /dev/null
+++ b/src/main/java/cn/lihongjie/coal/dao/UserRepository.java
@@ -0,0 +1,9 @@
+package cn.lihongjie.coal.dao;
+
+import cn.lihongjie.coal.entity.DictionaryEntity;
+import cn.lihongjie.coal.entity.UserEntity;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface UserRepository extends BaseRepository {
+}
\ No newline at end of file
diff --git a/src/main/java/cn/lihongjie/coal/dto/ChangeUserPwdDto.java b/src/main/java/cn/lihongjie/coal/dto/ChangeUserPwdDto.java
new file mode 100644
index 00000000..34fbb925
--- /dev/null
+++ b/src/main/java/cn/lihongjie/coal/dto/ChangeUserPwdDto.java
@@ -0,0 +1,14 @@
+package cn.lihongjie.coal.dto;
+
+import cn.lihongjie.coal.dto.base.CommonDto;
+import lombok.Data;
+
+@Data
+public class ChangeUserPwdDto extends CommonDto {
+
+
+
+ private String newPassword;
+ private String newPassword2;
+
+}
diff --git a/src/main/java/cn/lihongjie/coal/dto/CreatePermissionDto.java b/src/main/java/cn/lihongjie/coal/dto/CreatePermissionDto.java
new file mode 100644
index 00000000..bf928dd8
--- /dev/null
+++ b/src/main/java/cn/lihongjie/coal/dto/CreatePermissionDto.java
@@ -0,0 +1,16 @@
+package cn.lihongjie.coal.dto;
+
+import cn.lihongjie.coal.dto.base.CommonDto;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class CreatePermissionDto extends CommonDto {
+
+
+
+ private List resources;
+
+
+}
diff --git a/src/main/java/cn/lihongjie/coal/dto/CreateResourceDto.java b/src/main/java/cn/lihongjie/coal/dto/CreateResourceDto.java
new file mode 100644
index 00000000..b0754cf7
--- /dev/null
+++ b/src/main/java/cn/lihongjie/coal/dto/CreateResourceDto.java
@@ -0,0 +1,19 @@
+package cn.lihongjie.coal.dto;
+
+import cn.lihongjie.coal.dto.base.CommonDto;
+import lombok.Data;
+import org.hibernate.annotations.Comment;
+
+@Data
+public class CreateResourceDto extends CommonDto {
+
+
+ @Comment("资源类型")
+ private String type;
+
+
+
+ @Comment("资源地址")
+ private String url;
+ private String parent;
+}
diff --git a/src/main/java/cn/lihongjie/coal/dto/CreateRoleDto.java b/src/main/java/cn/lihongjie/coal/dto/CreateRoleDto.java
new file mode 100644
index 00000000..813651b0
--- /dev/null
+++ b/src/main/java/cn/lihongjie/coal/dto/CreateRoleDto.java
@@ -0,0 +1,13 @@
+package cn.lihongjie.coal.dto;
+
+import cn.lihongjie.coal.dto.base.OrgCommonDto;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class CreateRoleDto extends OrgCommonDto
+{
+
+ private List permissions;
+}
diff --git a/src/main/java/cn/lihongjie/coal/dto/CreateUserDto.java b/src/main/java/cn/lihongjie/coal/dto/CreateUserDto.java
new file mode 100644
index 00000000..2662df7d
--- /dev/null
+++ b/src/main/java/cn/lihongjie/coal/dto/CreateUserDto.java
@@ -0,0 +1,34 @@
+package cn.lihongjie.coal.dto;
+
+import cn.lihongjie.coal.dto.base.OrgCommonDto;
+import lombok.Data;
+import org.hibernate.annotations.Comment;
+
+import java.util.List;
+
+@Data
+public class CreateUserDto extends OrgCommonDto {
+
+
+
+
+ @Comment("用户名")
+ private String username;
+
+ @Comment("密码")
+ private String password;
+
+
+ @Comment("邮箱")
+ private String email;
+
+
+
+ @Comment("手机号")
+ private String phone;
+
+ private List roles;
+
+
+
+}
diff --git a/src/main/java/cn/lihongjie/coal/dto/IdRequest.java b/src/main/java/cn/lihongjie/coal/dto/IdRequest.java
index 99795428..86cf4df8 100644
--- a/src/main/java/cn/lihongjie/coal/dto/IdRequest.java
+++ b/src/main/java/cn/lihongjie/coal/dto/IdRequest.java
@@ -1,13 +1,33 @@
package cn.lihongjie.coal.dto;
-import jakarta.validation.constraints.NotEmpty;
import lombok.Data;
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang3.StringUtils;
+import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
@Data
public class IdRequest {
- @NotEmpty(message = "ids不能为空")
+ private String id;
private List ids;
+
+ public List getIds() {
+
+ if (StringUtils.isEmpty(id)) {
+ return ids;
+ } else if (CollectionUtils.isEmpty(ids)) {
+ return Arrays.asList(id);
+ }else {
+
+
+ ArrayList dup = new ArrayList<>(ids);
+ dup.add(id);
+ return dup;
+ }
+
+
+ }
}
diff --git a/src/main/java/cn/lihongjie/coal/dto/PermissionDto.java b/src/main/java/cn/lihongjie/coal/dto/PermissionDto.java
new file mode 100644
index 00000000..7d4a0ef1
--- /dev/null
+++ b/src/main/java/cn/lihongjie/coal/dto/PermissionDto.java
@@ -0,0 +1,36 @@
+package cn.lihongjie.coal.dto;
+
+import cn.lihongjie.coal.dto.base.OrgCommonDto;
+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
+public class PermissionDto extends OrgCommonDto {
+
+
+
+ private List resources;
+
+ @Data
+ public static class ResourceDto extends OrgCommonDto {
+
+
+ @OneToMany(mappedBy = "parent")
+ private List children;
+
+
+
+ @Comment("资源类型")
+ private String type;
+
+
+
+ @Comment("资源地址")
+ private String url;
+ }
+}
diff --git a/src/main/java/cn/lihongjie/coal/dto/ResourceDto.java b/src/main/java/cn/lihongjie/coal/dto/ResourceDto.java
new file mode 100644
index 00000000..5548f869
--- /dev/null
+++ b/src/main/java/cn/lihongjie/coal/dto/ResourceDto.java
@@ -0,0 +1,19 @@
+package cn.lihongjie.coal.dto;
+
+import cn.lihongjie.coal.dto.base.CommonDto;
+import lombok.Data;
+import org.hibernate.annotations.Comment;
+
+@Data
+public class ResourceDto extends CommonDto {
+
+
+ @Comment("资源类型")
+ private String type;
+
+
+
+ @Comment("资源地址")
+ private String url;
+
+}
diff --git a/src/main/java/cn/lihongjie/coal/dto/RoleDto.java b/src/main/java/cn/lihongjie/coal/dto/RoleDto.java
new file mode 100644
index 00000000..b585fcb8
--- /dev/null
+++ b/src/main/java/cn/lihongjie/coal/dto/RoleDto.java
@@ -0,0 +1,18 @@
+package cn.lihongjie.coal.dto;
+
+import cn.lihongjie.coal.dto.base.OrgCommonDto;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class RoleDto extends OrgCommonDto
+{
+
+ private List permissions;
+
+ @Data
+ public static class PermissionDto extends OrgCommonDto {
+
+ }
+}
diff --git a/src/main/java/cn/lihongjie/coal/dto/UpdateCreateResourceDto.java b/src/main/java/cn/lihongjie/coal/dto/UpdateCreateResourceDto.java
new file mode 100644
index 00000000..e891ac8d
--- /dev/null
+++ b/src/main/java/cn/lihongjie/coal/dto/UpdateCreateResourceDto.java
@@ -0,0 +1,22 @@
+package cn.lihongjie.coal.dto;
+
+import cn.lihongjie.coal.dto.base.CommonDto;
+import lombok.Data;
+import org.hibernate.annotations.Comment;
+
+@Data
+public class UpdateCreateResourceDto extends CommonDto {
+
+
+ @Comment("资源类型")
+ private String type;
+
+
+
+ @Comment("资源地址")
+ private String url;
+
+
+ private String parent;
+
+}
diff --git a/src/main/java/cn/lihongjie/coal/dto/UpdatePermissionDto.java b/src/main/java/cn/lihongjie/coal/dto/UpdatePermissionDto.java
new file mode 100644
index 00000000..6374571e
--- /dev/null
+++ b/src/main/java/cn/lihongjie/coal/dto/UpdatePermissionDto.java
@@ -0,0 +1,16 @@
+package cn.lihongjie.coal.dto;
+
+import cn.lihongjie.coal.dto.base.CommonDto;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class UpdatePermissionDto extends CommonDto {
+
+
+
+ private List resources;
+
+
+}
diff --git a/src/main/java/cn/lihongjie/coal/dto/UpdateResourceDto.java b/src/main/java/cn/lihongjie/coal/dto/UpdateResourceDto.java
new file mode 100644
index 00000000..bbd4b0e2
--- /dev/null
+++ b/src/main/java/cn/lihongjie/coal/dto/UpdateResourceDto.java
@@ -0,0 +1,19 @@
+package cn.lihongjie.coal.dto;
+
+import cn.lihongjie.coal.dto.base.CommonDto;
+import lombok.Data;
+import org.hibernate.annotations.Comment;
+
+@Data
+public class UpdateResourceDto extends CommonDto {
+
+
+ @Comment("资源类型")
+ private String type;
+
+
+
+ @Comment("资源地址")
+ private String url;
+ private String parent;
+}
diff --git a/src/main/java/cn/lihongjie/coal/dto/UpdateRoleDto.java b/src/main/java/cn/lihongjie/coal/dto/UpdateRoleDto.java
new file mode 100644
index 00000000..bbf50304
--- /dev/null
+++ b/src/main/java/cn/lihongjie/coal/dto/UpdateRoleDto.java
@@ -0,0 +1,13 @@
+package cn.lihongjie.coal.dto;
+
+import cn.lihongjie.coal.dto.base.OrgCommonDto;
+import lombok.Data;
+
+import java.util.List;
+
+@Data
+public class UpdateRoleDto extends OrgCommonDto
+{
+
+ private List permissions;
+}
diff --git a/src/main/java/cn/lihongjie/coal/dto/UpdateUserDto.java b/src/main/java/cn/lihongjie/coal/dto/UpdateUserDto.java
new file mode 100644
index 00000000..375e47ca
--- /dev/null
+++ b/src/main/java/cn/lihongjie/coal/dto/UpdateUserDto.java
@@ -0,0 +1,30 @@
+package cn.lihongjie.coal.dto;
+
+import cn.lihongjie.coal.dto.base.OrgCommonDto;
+import lombok.Data;
+import org.hibernate.annotations.Comment;
+
+import java.util.List;
+
+@Data
+public class UpdateUserDto extends OrgCommonDto {
+
+
+
+
+
+
+
+ @Comment("邮箱")
+ private String email;
+
+
+
+ @Comment("手机号")
+ private String phone;
+
+ private List roles;
+
+
+
+}
diff --git a/src/main/java/cn/lihongjie/coal/dto/UserDto.java b/src/main/java/cn/lihongjie/coal/dto/UserDto.java
new file mode 100644
index 00000000..2f4d5b8a
--- /dev/null
+++ b/src/main/java/cn/lihongjie/coal/dto/UserDto.java
@@ -0,0 +1,40 @@
+package cn.lihongjie.coal.dto;
+
+import cn.lihongjie.coal.dto.base.OrgCommonDto;
+import cn.lihongjie.coal.entity.PermissionEntity;
+import jakarta.persistence.ManyToMany;
+import lombok.Data;
+import org.hibernate.annotations.Comment;
+
+import java.util.List;
+
+@Data
+public class UserDto extends OrgCommonDto {
+ @Comment("用户名")
+ private String username;
+
+
+
+ @Comment("邮箱")
+ private String email;
+
+
+
+ @Comment("手机号")
+ private String phone;
+
+
+
+
+ @Data
+ public static class RoleDto extends OrgCommonDto{
+
+
+
+
+ }
+
+
+ private List roles;
+
+}
diff --git a/src/main/java/cn/lihongjie/coal/dto/base/BaseDto.java b/src/main/java/cn/lihongjie/coal/dto/base/BaseDto.java
new file mode 100644
index 00000000..5734d6b2
--- /dev/null
+++ b/src/main/java/cn/lihongjie/coal/dto/base/BaseDto.java
@@ -0,0 +1,12 @@
+package cn.lihongjie.coal.dto.base;
+
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public abstract class BaseDto {
+
+ private String id;
+
+}
diff --git a/src/main/java/cn/lihongjie/coal/dto/base/CommonDto.java b/src/main/java/cn/lihongjie/coal/dto/base/CommonDto.java
new file mode 100644
index 00000000..35012248
--- /dev/null
+++ b/src/main/java/cn/lihongjie/coal/dto/base/CommonDto.java
@@ -0,0 +1,31 @@
+package cn.lihongjie.coal.dto.base;
+
+import lombok.Getter;
+import lombok.Setter;
+import org.hibernate.annotations.Comment;
+
+@Getter
+@Setter
+public class CommonDto extends BaseDto {
+
+
+ @Comment("名称")
+ private String name;
+
+ @Comment("编码")
+ private String code;
+
+
+ @Comment("备注")
+ private String remarks;
+
+
+
+ @Comment("排序键")
+ private Integer sortKey;
+
+
+ @Comment("常用状态 0 禁用 1 启用")
+ private Integer status;
+
+}
diff --git a/src/main/java/cn/lihongjie/coal/dto/base/OrgCommonDto.java b/src/main/java/cn/lihongjie/coal/dto/base/OrgCommonDto.java
new file mode 100644
index 00000000..f0e96028
--- /dev/null
+++ b/src/main/java/cn/lihongjie/coal/dto/base/OrgCommonDto.java
@@ -0,0 +1,10 @@
+package cn.lihongjie.coal.dto.base;
+
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class OrgCommonDto extends CommonDto {
+ private String organizationId;
+}
diff --git a/src/main/java/cn/lihongjie/coal/entity/DictionaryItemEntity.java b/src/main/java/cn/lihongjie/coal/entity/DictionaryItemEntity.java
index 7cfe9e39..983c87e3 100644
--- a/src/main/java/cn/lihongjie/coal/entity/DictionaryItemEntity.java
+++ b/src/main/java/cn/lihongjie/coal/entity/DictionaryItemEntity.java
@@ -1,8 +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.*;
import lombok.Getter;
import lombok.Setter;
@@ -18,17 +16,14 @@ public class DictionaryItemEntity extends CommonEntity {
@ManyToOne
- @JsonBackReference
private DictionaryEntity dictionary;
@OneToMany(mappedBy = "parent")
- @JsonManagedReference
private List children;
@ManyToOne
- @JsonBackReference
@JoinColumn(name = "parent_id",foreignKey = @ForeignKey(value = ConstraintMode.NO_CONSTRAINT))
private DictionaryItemEntity parent;
diff --git a/src/main/java/cn/lihongjie/coal/entity/PermissionEntity.java b/src/main/java/cn/lihongjie/coal/entity/PermissionEntity.java
index 0dc3d144..6bd9929a 100644
--- a/src/main/java/cn/lihongjie/coal/entity/PermissionEntity.java
+++ b/src/main/java/cn/lihongjie/coal/entity/PermissionEntity.java
@@ -16,7 +16,6 @@ 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
index 74985e7f..9b7aa943 100644
--- a/src/main/java/cn/lihongjie/coal/entity/ResourceEntity.java
+++ b/src/main/java/cn/lihongjie/coal/entity/ResourceEntity.java
@@ -1,8 +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.*;
import lombok.Data;
import org.hibernate.annotations.Comment;
@@ -15,16 +13,13 @@ import java.util.List;
public class ResourceEntity extends CommonEntity {
@ManyToMany
- @JsonBackReference
private List permissions;
@OneToMany(mappedBy = "parent")
- @JsonManagedReference
private List children;
@ManyToOne
- @JsonBackReference
@JoinColumn(name = "parent_id", foreignKey = @ForeignKey(value = ConstraintMode.NO_CONSTRAINT))
private ResourceEntity parent;
diff --git a/src/main/java/cn/lihongjie/coal/entity/RoleEntity.java b/src/main/java/cn/lihongjie/coal/entity/RoleEntity.java
index 2146a11a..50487d0a 100644
--- a/src/main/java/cn/lihongjie/coal/entity/RoleEntity.java
+++ b/src/main/java/cn/lihongjie/coal/entity/RoleEntity.java
@@ -1,6 +1,6 @@
package cn.lihongjie.coal.entity;
-import cn.lihongjie.coal.entity.base.OrgBaseEntity;
+import cn.lihongjie.coal.entity.base.OrgCommonEntity;
import com.fasterxml.jackson.annotation.JsonBackReference;
import jakarta.persistence.Entity;
import jakarta.persistence.ManyToMany;
@@ -10,7 +10,10 @@ import java.util.List;
@Entity
@Data
-public class RoleEntity extends OrgBaseEntity {
+
+public class RoleEntity extends OrgCommonEntity {
+
+
@ManyToMany(mappedBy = "roles")
diff --git a/src/main/java/cn/lihongjie/coal/entity/UserEntity.java b/src/main/java/cn/lihongjie/coal/entity/UserEntity.java
index c6df3ccd..68ec212e 100644
--- a/src/main/java/cn/lihongjie/coal/entity/UserEntity.java
+++ b/src/main/java/cn/lihongjie/coal/entity/UserEntity.java
@@ -29,8 +29,7 @@ public class UserEntity extends OrgCommonEntity {
@Comment("手机号")
private String phone;
- @ManyToMany
- @JsonManagedReference
+ @ManyToMany()
private List roles;
diff --git a/src/main/java/cn/lihongjie/coal/entity/base/BaseEntity.java b/src/main/java/cn/lihongjie/coal/entity/base/BaseEntity.java
index 940ef89b..907607bc 100644
--- a/src/main/java/cn/lihongjie/coal/entity/base/BaseEntity.java
+++ b/src/main/java/cn/lihongjie/coal/entity/base/BaseEntity.java
@@ -17,6 +17,10 @@ import java.time.LocalDateTime;
@Setter
public class BaseEntity {
+
+
+
+
@Id
@GeneratedValue(strategy = GenerationType.UUID)
private String id;
diff --git a/src/main/java/cn/lihongjie/coal/entity/base/OrgBaseEntity.java b/src/main/java/cn/lihongjie/coal/entity/base/OrgBaseEntity.java
index b745397c..a6758f67 100644
--- a/src/main/java/cn/lihongjie/coal/entity/base/OrgBaseEntity.java
+++ b/src/main/java/cn/lihongjie/coal/entity/base/OrgBaseEntity.java
@@ -11,6 +11,7 @@ import lombok.Setter;
@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/mapper/CommonMapper.java b/src/main/java/cn/lihongjie/coal/mapper/CommonMapper.java
new file mode 100644
index 00000000..2790cccc
--- /dev/null
+++ b/src/main/java/cn/lihongjie/coal/mapper/CommonMapper.java
@@ -0,0 +1,74 @@
+package cn.lihongjie.coal.mapper;
+
+import cn.lihongjie.coal.entity.*;
+import org.mapstruct.Mapper;
+
+@Mapper(componentModel = "spring")
+public interface CommonMapper {
+
+ public default UserEntity createUser(String id) {
+
+ UserEntity user = new UserEntity();
+
+ user.setId(id);
+
+ return user;
+ }
+
+
+ public default DictionaryEntity createDictionary(String id) {
+
+ DictionaryEntity e = new DictionaryEntity();
+ e.setId(id);
+ return e;
+
+ }
+
+ public default DictionaryItemEntity createDictionaryItem(String id) {
+
+ DictionaryItemEntity e = new DictionaryItemEntity();
+ e.setId(id);
+ return e;
+
+ }
+
+ public default OperationLog createOperat(String id) {
+
+ OperationLog e = new OperationLog();
+ e.setId(id);
+ return e;
+
+ }
+
+ public default OrganizationEntity createOrganization(String id) {
+
+ OrganizationEntity e = new OrganizationEntity();
+ e.setId(id);
+ return e;
+
+ }
+
+ public default PermissionEntity createPermission(String id) {
+
+ PermissionEntity e = new PermissionEntity();
+ e.setId(id);
+ return e;
+
+ }
+
+ public default ResourceEntity createResource(String id) {
+
+ ResourceEntity e = new ResourceEntity();
+ e.setId(id);
+ return e;
+
+ }
+
+ public default RoleEntity createRole(String id) {
+
+ RoleEntity e = new RoleEntity();
+ e.setId(id);
+ return e;
+
+ }
+}
diff --git a/src/main/java/cn/lihongjie/coal/mapper/PermissionMapper.java b/src/main/java/cn/lihongjie/coal/mapper/PermissionMapper.java
new file mode 100644
index 00000000..ad3e4ed7
--- /dev/null
+++ b/src/main/java/cn/lihongjie/coal/mapper/PermissionMapper.java
@@ -0,0 +1,24 @@
+package cn.lihongjie.coal.mapper;
+
+
+import cn.lihongjie.coal.dto.CreatePermissionDto;
+import cn.lihongjie.coal.dto.UpdatePermissionDto;
+import cn.lihongjie.coal.dto.PermissionDto;
+import cn.lihongjie.coal.entity.PermissionEntity;
+import org.mapstruct.Mapper;
+import org.mapstruct.MappingConstants;
+import org.mapstruct.MappingTarget;
+
+@Mapper(
+ componentModel = MappingConstants.ComponentModel.SPRING,
+ uses = {CommonMapper.class}
+
+)
+public interface PermissionMapper {
+ PermissionDto toDto(PermissionEntity user);
+
+ PermissionEntity toEntity(CreatePermissionDto request);
+
+
+ void updateEntity(@MappingTarget PermissionEntity entity, UpdatePermissionDto dto);
+}
diff --git a/src/main/java/cn/lihongjie/coal/mapper/ResourceMapper.java b/src/main/java/cn/lihongjie/coal/mapper/ResourceMapper.java
new file mode 100644
index 00000000..0381e703
--- /dev/null
+++ b/src/main/java/cn/lihongjie/coal/mapper/ResourceMapper.java
@@ -0,0 +1,24 @@
+package cn.lihongjie.coal.mapper;
+
+
+import cn.lihongjie.coal.dto.CreateResourceDto;
+import cn.lihongjie.coal.dto.UpdateResourceDto;
+import cn.lihongjie.coal.dto.ResourceDto;
+import cn.lihongjie.coal.entity.ResourceEntity;
+import org.mapstruct.Mapper;
+import org.mapstruct.MappingConstants;
+import org.mapstruct.MappingTarget;
+
+@Mapper(
+ componentModel = MappingConstants.ComponentModel.SPRING,
+ uses = {CommonMapper.class}
+
+)
+public interface ResourceMapper {
+ ResourceDto toDto(ResourceEntity user);
+
+ ResourceEntity toEntity(CreateResourceDto request);
+
+
+ void updateEntity(@MappingTarget ResourceEntity entity, UpdateResourceDto dto);
+}
diff --git a/src/main/java/cn/lihongjie/coal/mapper/RoleMapper.java b/src/main/java/cn/lihongjie/coal/mapper/RoleMapper.java
new file mode 100644
index 00000000..690770c9
--- /dev/null
+++ b/src/main/java/cn/lihongjie/coal/mapper/RoleMapper.java
@@ -0,0 +1,24 @@
+package cn.lihongjie.coal.mapper;
+
+
+import cn.lihongjie.coal.dto.CreateRoleDto;
+import cn.lihongjie.coal.dto.UpdateRoleDto;
+import cn.lihongjie.coal.dto.RoleDto;
+import cn.lihongjie.coal.entity.RoleEntity;
+import org.mapstruct.Mapper;
+import org.mapstruct.MappingConstants;
+import org.mapstruct.MappingTarget;
+
+@Mapper(
+ componentModel = MappingConstants.ComponentModel.SPRING,
+ uses = {CommonMapper.class}
+
+)
+public interface RoleMapper {
+ RoleDto toDto(RoleEntity user);
+
+ RoleEntity toEntity(CreateRoleDto request);
+
+
+ void updateEntity(@MappingTarget RoleEntity entity, UpdateRoleDto dto);
+}
diff --git a/src/main/java/cn/lihongjie/coal/mapper/UserMapper.java b/src/main/java/cn/lihongjie/coal/mapper/UserMapper.java
new file mode 100644
index 00000000..9b3d5367
--- /dev/null
+++ b/src/main/java/cn/lihongjie/coal/mapper/UserMapper.java
@@ -0,0 +1,24 @@
+package cn.lihongjie.coal.mapper;
+
+
+import cn.lihongjie.coal.dto.CreateUserDto;
+import cn.lihongjie.coal.dto.UpdateUserDto;
+import cn.lihongjie.coal.dto.UserDto;
+import cn.lihongjie.coal.entity.UserEntity;
+import org.mapstruct.Mapper;
+import org.mapstruct.MappingConstants;
+import org.mapstruct.MappingTarget;
+
+@Mapper(
+ componentModel = MappingConstants.ComponentModel.SPRING,
+ uses = {CommonMapper.class}
+
+)
+public interface UserMapper {
+ UserDto toDto(UserEntity user);
+
+ UserEntity toEntity(CreateUserDto request);
+
+
+ void updateEntity(@MappingTarget UserEntity entity, UpdateUserDto dto);
+}
diff --git a/src/main/java/cn/lihongjie/coal/service/PermissionService.java b/src/main/java/cn/lihongjie/coal/service/PermissionService.java
new file mode 100644
index 00000000..b3e153ab
--- /dev/null
+++ b/src/main/java/cn/lihongjie/coal/service/PermissionService.java
@@ -0,0 +1,81 @@
+package cn.lihongjie.coal.service;
+
+import cn.lihongjie.coal.dao.PermissionRepository;
+import cn.lihongjie.coal.dto.*;
+import cn.lihongjie.coal.entity.PermissionEntity;
+import cn.lihongjie.coal.mapper.PermissionMapper;
+import jakarta.annotation.PostConstruct;
+import lombok.extern.slf4j.Slf4j;
+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.Sort;
+import org.springframework.stereotype.Service;
+
+@Service
+@Slf4j
+public class PermissionService {
+
+ @Autowired
+ PermissionRepository repository;
+
+ @Autowired
+ PermissionMapper mapper;
+
+
+ @PostConstruct
+ public void init() {
+
+
+ }
+
+
+ public PermissionDto create(CreatePermissionDto request) {
+
+
+ PermissionEntity entity = mapper.toEntity(request);
+
+
+ this.repository.save(entity);
+ return getById(entity.getId());
+
+ }
+
+
+ public PermissionDto update(UpdatePermissionDto request) {
+ PermissionEntity entity = this.repository.get(request.getId());
+ this.mapper.updateEntity(entity, request);
+
+ return null;
+ }
+
+
+ public void delete(IdRequest request) {
+
+ this.repository.deleteAllById(request.getIds());
+
+ }
+
+
+ public PermissionDto getById(String id) {
+
+ PermissionEntity entity = repository.get(id);
+
+
+ return mapper.toDto(entity);
+ }
+
+
+ @Autowired
+ ConversionService conversionService;
+
+ public Page list(CommonQuery query) {
+
+ Page page = repository.findAll(query.specification(conversionService), PageRequest.of(query.getPageNo(), query.getPageSize(), Sort.by(query.getOrders())));
+
+
+ return page.map(this.mapper::toDto);
+
+ }
+}
diff --git a/src/main/java/cn/lihongjie/coal/service/ResourceService.java b/src/main/java/cn/lihongjie/coal/service/ResourceService.java
new file mode 100644
index 00000000..97af9a82
--- /dev/null
+++ b/src/main/java/cn/lihongjie/coal/service/ResourceService.java
@@ -0,0 +1,81 @@
+package cn.lihongjie.coal.service;
+
+import cn.lihongjie.coal.dao.ResourceRepository;
+import cn.lihongjie.coal.dto.*;
+import cn.lihongjie.coal.entity.ResourceEntity;
+import cn.lihongjie.coal.mapper.ResourceMapper;
+import jakarta.annotation.PostConstruct;
+import lombok.extern.slf4j.Slf4j;
+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.Sort;
+import org.springframework.stereotype.Service;
+
+@Service
+@Slf4j
+public class ResourceService {
+
+ @Autowired
+ ResourceRepository repository;
+
+ @Autowired
+ ResourceMapper mapper;
+
+
+ @PostConstruct
+ public void init() {
+
+
+ }
+
+
+ public ResourceDto create(CreateResourceDto request) {
+
+
+ ResourceEntity entity = mapper.toEntity(request);
+
+
+ this.repository.save(entity);
+ return getById(entity.getId());
+
+ }
+
+
+ public ResourceDto update(UpdateResourceDto request) {
+ ResourceEntity entity = this.repository.get(request.getId());
+ this.mapper.updateEntity(entity, request);
+
+ return null;
+ }
+
+
+ public void delete(IdRequest request) {
+
+ this.repository.deleteAllById(request.getIds());
+
+ }
+
+
+ public ResourceDto getById(String id) {
+
+ ResourceEntity entity = repository.get(id);
+
+
+ return mapper.toDto(entity);
+ }
+
+
+ @Autowired
+ ConversionService conversionService;
+
+ public Page list(CommonQuery query) {
+
+ Page page = repository.findAll(query.specification(conversionService), PageRequest.of(query.getPageNo(), query.getPageSize(), Sort.by(query.getOrders())));
+
+
+ return page.map(this.mapper::toDto);
+
+ }
+}
diff --git a/src/main/java/cn/lihongjie/coal/service/RoleService.java b/src/main/java/cn/lihongjie/coal/service/RoleService.java
new file mode 100644
index 00000000..8b9dffbf
--- /dev/null
+++ b/src/main/java/cn/lihongjie/coal/service/RoleService.java
@@ -0,0 +1,81 @@
+package cn.lihongjie.coal.service;
+
+import cn.lihongjie.coal.dao.RoleRepository;
+import cn.lihongjie.coal.dto.*;
+import cn.lihongjie.coal.entity.RoleEntity;
+import cn.lihongjie.coal.mapper.RoleMapper;
+import jakarta.annotation.PostConstruct;
+import lombok.extern.slf4j.Slf4j;
+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.Sort;
+import org.springframework.stereotype.Service;
+
+@Service
+@Slf4j
+public class RoleService {
+
+ @Autowired
+ RoleRepository repository;
+
+ @Autowired
+ RoleMapper mapper;
+
+
+ @PostConstruct
+ public void init() {
+
+
+ }
+
+
+ public RoleDto create(CreateRoleDto request) {
+
+
+ RoleEntity entity = mapper.toEntity(request);
+
+
+ this.repository.save(entity);
+ return getById(entity.getId());
+
+ }
+
+
+ public RoleDto update(UpdateRoleDto request) {
+ RoleEntity entity = this.repository.get(request.getId());
+ this.mapper.updateEntity(entity, request);
+
+ return null;
+ }
+
+
+ public void delete(IdRequest request) {
+
+ this.repository.deleteAllById(request.getIds());
+
+ }
+
+
+ public RoleDto getById(String id) {
+
+ RoleEntity entity = repository.get(id);
+
+
+ return mapper.toDto(entity);
+ }
+
+
+ @Autowired
+ ConversionService conversionService;
+
+ public Page list(CommonQuery query) {
+
+ Page page = repository.findAll(query.specification(conversionService), PageRequest.of(query.getPageNo(), query.getPageSize(), Sort.by(query.getOrders())));
+
+
+ return page.map(this.mapper::toDto);
+
+ }
+}
diff --git a/src/main/java/cn/lihongjie/coal/service/UserService.java b/src/main/java/cn/lihongjie/coal/service/UserService.java
new file mode 100644
index 00000000..5923b61b
--- /dev/null
+++ b/src/main/java/cn/lihongjie/coal/service/UserService.java
@@ -0,0 +1,120 @@
+package cn.lihongjie.coal.service;
+
+import cn.lihongjie.coal.dao.UserRepository;
+import cn.lihongjie.coal.dto.CommonQuery;
+import cn.lihongjie.coal.dto.IdRequest;
+import cn.lihongjie.coal.dto.ChangeUserPwdDto;
+import cn.lihongjie.coal.dto.CreateUserDto;
+import cn.lihongjie.coal.dto.UpdateUserDto;
+import cn.lihongjie.coal.dto.UserDto;
+import cn.lihongjie.coal.entity.UserEntity;
+import cn.lihongjie.coal.exception.BizException;
+import cn.lihongjie.coal.mapper.UserMapper;
+import jakarta.annotation.PostConstruct;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+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.Sort;
+import org.springframework.security.crypto.password.Pbkdf2PasswordEncoder;
+import org.springframework.stereotype.Service;
+
+@Service
+@Slf4j
+public class UserService {
+
+ @Autowired
+ UserRepository repository;
+
+ @Autowired
+ UserMapper mapper;
+
+ private Pbkdf2PasswordEncoder passwordEncoder;
+
+
+ @PostConstruct
+ public void init(){
+
+ passwordEncoder = Pbkdf2PasswordEncoder.defaultsForSpringSecurity_v5_8();
+
+ }
+
+
+
+ public UserDto create(CreateUserDto request){
+
+
+ UserEntity entity = mapper.toEntity(request);
+
+
+ this.repository.save(entity);
+ return getById(entity.getId());
+
+ }
+
+
+
+
+ public UserDto update(UpdateUserDto request){
+ UserEntity user = this.repository.get(request.getId());
+ this.mapper.updateEntity(user, request);
+
+ return null;
+ }
+
+
+
+
+ public void delete(IdRequest request){
+
+ this.repository.deleteAllById(request.getIds());
+
+ }
+
+
+
+ public UserDto getById(String id){
+
+ UserEntity user = repository.get(id);
+
+
+ return mapper.toDto(user);
+ }
+
+
+
+ public UserDto changePwd(ChangeUserPwdDto request){
+
+
+ UserEntity user = repository.findById(request.getId()).orElseThrow(() -> new BizException("用户不存在"));
+
+ if (!StringUtils.equals(request.getNewPassword(), request.getNewPassword2())) {
+ throw new BizException("两次输入的密码不一致");
+ }
+
+ user.setPassword(passwordEncoder.encode(request.getNewPassword()));
+
+ repository.save(user);
+
+ return
+ getById(request.getId());
+
+
+
+
+ }
+
+ @Autowired
+ ConversionService conversionService;
+
+ public Page list(CommonQuery query) {
+
+ Page page = repository.findAll(query.specification(conversionService), PageRequest.of(query.getPageNo(), query.getPageSize(), Sort.by(query.getOrders())));
+
+
+ return page.map(this.mapper::toDto);
+
+ }
+}