From b6426e088879fbc4c06c22ab9fda9a3cbaa322ac Mon Sep 17 00:00:00 2001 From: xgblack Date: Sat, 24 Feb 2024 23:21:22 +0800 Subject: [PATCH 1/6] =?UTF-8?q?=E2=AC=86=EF=B8=8F(pom):=20=E5=8D=87?= =?UTF-8?q?=E7=BA=A7=20mybatis-flex=201.7.9->1.8.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cool-dependencies/pom.xml | 2 +- pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/cool-dependencies/pom.xml b/cool-dependencies/pom.xml index f1b2a29..b14517f 100644 --- a/cool-dependencies/pom.xml +++ b/cool-dependencies/pom.xml @@ -21,7 +21,7 @@ 3.2.3 8.3.0 - 1.7.9 + 1.8.0 3.0.3 33.0.0-jre diff --git a/pom.xml b/pom.xml index 4d3dbae..054b6cb 100644 --- a/pom.xml +++ b/pom.xml @@ -59,7 +59,7 @@ 1.18.30 1.6.0.Beta1 - 1.7.9 + 1.8.0 -- Gitee From b3d896097d0bac84162e8597072afbb71dd03285 Mon Sep 17 00:00:00 2001 From: xgblack Date: Mon, 26 Feb 2024 00:10:10 +0800 Subject: [PATCH 2/6] =?UTF-8?q?=E2=9C=A8feat(rbac):=20=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E8=A7=92=E8=89=B2=E5=A2=9E=E5=88=A0=E6=94=B9=E6=9F=A5=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../module/system/web/RoleController.java | 12 ++--- .../module/system/web/UserController.java | 4 +- .../executor/permission/RoleAddCmdExe.java | 29 ++++++++++ .../executor/permission/RoleEditCmdExe.java | 23 ++++++++ .../permission/RoleEditStatusExe.java | 22 ++++++++ .../executor/permission/RoleRemoveCmdExe.java | 22 ++++++++ .../permission/query/RoleByIdQryExe.java | 21 ++++++++ .../permission/query/RolePageQryExe.java | 23 ++++++++ .../executor/user/UserEditLockedCmdExe.java | 1 + .../system/service/RoleServiceImpl.java | 45 ++++++++++++++++ .../system/service/UserServiceImpl.java | 4 +- .../cool/module/system/api/RoleServiceI.java | 18 +++++++ .../cool/module/system/api/UserServiceI.java | 4 +- .../system/dto/permission/RolePageQry.java | 3 +- .../system/domain/gateway/RoleGateway.java | 15 ++++++ .../system/convertor/RoleConvertor.java | 6 +++ .../system/gateway/RoleGatewayImpl.java | 54 +++++++++++++++++++ .../system/gateway/UserGatewayImpl.java | 8 +-- pom.xml | 4 +- 19 files changed, 300 insertions(+), 18 deletions(-) create mode 100644 cool-module-system/cool-module-system-app/src/main/java/com/xgblack/cool/module/system/executor/permission/RoleAddCmdExe.java create mode 100644 cool-module-system/cool-module-system-app/src/main/java/com/xgblack/cool/module/system/executor/permission/RoleEditCmdExe.java create mode 100644 cool-module-system/cool-module-system-app/src/main/java/com/xgblack/cool/module/system/executor/permission/RoleEditStatusExe.java create mode 100644 cool-module-system/cool-module-system-app/src/main/java/com/xgblack/cool/module/system/executor/permission/RoleRemoveCmdExe.java create mode 100644 cool-module-system/cool-module-system-app/src/main/java/com/xgblack/cool/module/system/executor/permission/query/RoleByIdQryExe.java create mode 100644 cool-module-system/cool-module-system-app/src/main/java/com/xgblack/cool/module/system/executor/permission/query/RolePageQryExe.java diff --git a/cool-module-system/cool-module-system-adapter/src/main/java/com/xgblack/cool/module/system/web/RoleController.java b/cool-module-system/cool-module-system-adapter/src/main/java/com/xgblack/cool/module/system/web/RoleController.java index 715fcb4..8145c5c 100644 --- a/cool-module-system/cool-module-system-adapter/src/main/java/com/xgblack/cool/module/system/web/RoleController.java +++ b/cool-module-system/cool-module-system-adapter/src/main/java/com/xgblack/cool/module/system/web/RoleController.java @@ -33,7 +33,7 @@ public class RoleController { @PostMapping //@PreAuthorize("@ss.hasPermission('system:role:create')") public void add(@Valid @RequestBody RoleAddCmd cmd) { - + roleService.add(cmd); } /** @@ -43,7 +43,7 @@ public class RoleController { @PutMapping("/update") //@PreAuthorize("@ss.hasPermission('system:role:update')") public void edit(@Valid @RequestBody RoleEditCmd cmd) { - + roleService.edit(cmd); } /** @@ -53,7 +53,7 @@ public class RoleController { @PutMapping("/update-status") //@PreAuthorize("@ss.hasPermission('system:role:update')") public void editStatus(@Valid @RequestBody RoleEditStatusCmd cmd) { - + roleService.editStatus(cmd); } /** @@ -63,7 +63,7 @@ public class RoleController { @DeleteMapping("/delete") //@PreAuthorize("@ss.hasPermission('system:role:delete')") public void remove(@RequestParam("id") Long id) { - + roleService.remove(id); } /** @@ -74,7 +74,7 @@ public class RoleController { @GetMapping("/get") //@PreAuthorize("@ss.hasPermission('system:role:query')") public RoleCO detail(@RequestParam("id") Long id) { - return null; + return roleService.detail(id); } /** @@ -85,7 +85,7 @@ public class RoleController { @GetMapping("/page") //@PreAuthorize("@ss.hasPermission('system:role:query')") public PageResult getRolePage(RolePageQry qry) { - return null; + return roleService.page(qry); } /*@GetMapping({"/list-all-simple", "/simple-list"}) diff --git a/cool-module-system/cool-module-system-adapter/src/main/java/com/xgblack/cool/module/system/web/UserController.java b/cool-module-system/cool-module-system-adapter/src/main/java/com/xgblack/cool/module/system/web/UserController.java index f4fdcc3..13caf09 100644 --- a/cool-module-system/cool-module-system-adapter/src/main/java/com/xgblack/cool/module/system/web/UserController.java +++ b/cool-module-system/cool-module-system-adapter/src/main/java/com/xgblack/cool/module/system/web/UserController.java @@ -32,7 +32,7 @@ public class UserController { @PostMapping //@PreAuthorize("@ss.hasPermission('system:user:create')") public void add(@Validated @RequestBody UserAddCmd cmd) { - userService.save(cmd); + userService.add(cmd); } /** @@ -43,7 +43,7 @@ public class UserController { //@Operation(summary = "修改用户") //@PreAuthorize("@ss.hasPermission('system:user:update')") public void edit(@Validated @RequestBody UserEditCmd cmd) { - userService.update(cmd); + userService.edit(cmd); } /** diff --git a/cool-module-system/cool-module-system-app/src/main/java/com/xgblack/cool/module/system/executor/permission/RoleAddCmdExe.java b/cool-module-system/cool-module-system-app/src/main/java/com/xgblack/cool/module/system/executor/permission/RoleAddCmdExe.java new file mode 100644 index 0000000..36f8234 --- /dev/null +++ b/cool-module-system/cool-module-system-app/src/main/java/com/xgblack/cool/module/system/executor/permission/RoleAddCmdExe.java @@ -0,0 +1,29 @@ +package com.xgblack.cool.module.system.executor.permission; + +import com.xgblack.cool.module.system.convertor.RoleConvertor; +import com.xgblack.cool.module.system.convertor.StudentConvertor; +import com.xgblack.cool.module.system.domain.gateway.RoleGateway; +import com.xgblack.cool.module.system.domain.gateway.StudentGateway; +import com.xgblack.cool.module.system.dto.permission.RoleAddCmd; +import com.xgblack.cool.module.system.dto.student.StudentAddCmd; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +/** + * @author xg black + */ + +@Slf4j +@Component +@RequiredArgsConstructor +public class RoleAddCmdExe { + + private final RoleGateway gateway; + + + public void execute(RoleAddCmd cmd) { + gateway.create(RoleConvertor.INSTANCE.toEntity(cmd)); + } + +} diff --git a/cool-module-system/cool-module-system-app/src/main/java/com/xgblack/cool/module/system/executor/permission/RoleEditCmdExe.java b/cool-module-system/cool-module-system-app/src/main/java/com/xgblack/cool/module/system/executor/permission/RoleEditCmdExe.java new file mode 100644 index 0000000..bb99d8b --- /dev/null +++ b/cool-module-system/cool-module-system-app/src/main/java/com/xgblack/cool/module/system/executor/permission/RoleEditCmdExe.java @@ -0,0 +1,23 @@ + +package com.xgblack.cool.module.system.executor.permission; + + +import com.xgblack.cool.module.system.convertor.RoleConvertor; +import com.xgblack.cool.module.system.domain.gateway.RoleGateway; +import com.xgblack.cool.module.system.dto.permission.RoleEditCmd; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +@Slf4j +@Component +@RequiredArgsConstructor +public class RoleEditCmdExe { + + private final RoleGateway gateway; + + + public void execute(RoleEditCmd cmd) { + gateway.update(RoleConvertor.INSTANCE.toEntity(cmd)); + } +} diff --git a/cool-module-system/cool-module-system-app/src/main/java/com/xgblack/cool/module/system/executor/permission/RoleEditStatusExe.java b/cool-module-system/cool-module-system-app/src/main/java/com/xgblack/cool/module/system/executor/permission/RoleEditStatusExe.java new file mode 100644 index 0000000..aef7289 --- /dev/null +++ b/cool-module-system/cool-module-system-app/src/main/java/com/xgblack/cool/module/system/executor/permission/RoleEditStatusExe.java @@ -0,0 +1,22 @@ + +package com.xgblack.cool.module.system.executor.permission; + + +import com.xgblack.cool.module.system.domain.gateway.RoleGateway; +import com.xgblack.cool.module.system.dto.permission.RoleEditStatusCmd; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +@Slf4j +@Component +@RequiredArgsConstructor +public class RoleEditStatusExe { + + private final RoleGateway gateway; + + + public void execute(RoleEditStatusCmd cmd) { + gateway.updateStatus(cmd.getId(), cmd.getStatus()); + } +} diff --git a/cool-module-system/cool-module-system-app/src/main/java/com/xgblack/cool/module/system/executor/permission/RoleRemoveCmdExe.java b/cool-module-system/cool-module-system-app/src/main/java/com/xgblack/cool/module/system/executor/permission/RoleRemoveCmdExe.java new file mode 100644 index 0000000..481c4a4 --- /dev/null +++ b/cool-module-system/cool-module-system-app/src/main/java/com/xgblack/cool/module/system/executor/permission/RoleRemoveCmdExe.java @@ -0,0 +1,22 @@ + +package com.xgblack.cool.module.system.executor.permission; + + +import com.xgblack.cool.module.system.domain.gateway.RoleGateway; +import com.xgblack.cool.module.system.domain.gateway.StudentGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +@Slf4j +@Component +@RequiredArgsConstructor +public class RoleRemoveCmdExe { + + private final RoleGateway gateway; + + + public void execute(Long id) { + gateway.delete(id); + } +} diff --git a/cool-module-system/cool-module-system-app/src/main/java/com/xgblack/cool/module/system/executor/permission/query/RoleByIdQryExe.java b/cool-module-system/cool-module-system-app/src/main/java/com/xgblack/cool/module/system/executor/permission/query/RoleByIdQryExe.java new file mode 100644 index 0000000..7fee38f --- /dev/null +++ b/cool-module-system/cool-module-system-app/src/main/java/com/xgblack/cool/module/system/executor/permission/query/RoleByIdQryExe.java @@ -0,0 +1,21 @@ +package com.xgblack.cool.module.system.executor.permission.query; + + +import com.xgblack.cool.module.system.convertor.RoleConvertor; +import com.xgblack.cool.module.system.domain.gateway.RoleGateway; +import com.xgblack.cool.module.system.dto.permission.clientobject.RoleCO; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +@Slf4j +@Component +@RequiredArgsConstructor +public class RoleByIdQryExe { + + private final RoleGateway gateway; + + public RoleCO execute(Long id) { + return RoleConvertor.INSTANCE.convertEntity2CO(gateway.getById(id)); + } +} diff --git a/cool-module-system/cool-module-system-app/src/main/java/com/xgblack/cool/module/system/executor/permission/query/RolePageQryExe.java b/cool-module-system/cool-module-system-app/src/main/java/com/xgblack/cool/module/system/executor/permission/query/RolePageQryExe.java new file mode 100644 index 0000000..78d5173 --- /dev/null +++ b/cool-module-system/cool-module-system-app/src/main/java/com/xgblack/cool/module/system/executor/permission/query/RolePageQryExe.java @@ -0,0 +1,23 @@ +package com.xgblack.cool.module.system.executor.permission.query; + + +import com.xgblack.cool.framework.common.pojo.dto.PageResult; +import com.xgblack.cool.module.system.convertor.RoleConvertor; +import com.xgblack.cool.module.system.domain.gateway.RoleGateway; +import com.xgblack.cool.module.system.dto.permission.RolePageQry; +import com.xgblack.cool.module.system.dto.permission.clientobject.RoleCO; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +@Slf4j +@Component +@RequiredArgsConstructor +public class RolePageQryExe { + + private final RoleGateway gateway; + + public PageResult execute(RolePageQry qry) { + return RoleConvertor.INSTANCE.convertEntity2COPageResult(gateway.getPage(qry)); + } +} diff --git a/cool-module-system/cool-module-system-app/src/main/java/com/xgblack/cool/module/system/executor/user/UserEditLockedCmdExe.java b/cool-module-system/cool-module-system-app/src/main/java/com/xgblack/cool/module/system/executor/user/UserEditLockedCmdExe.java index 4412945..2f5d281 100644 --- a/cool-module-system/cool-module-system-app/src/main/java/com/xgblack/cool/module/system/executor/user/UserEditLockedCmdExe.java +++ b/cool-module-system/cool-module-system-app/src/main/java/com/xgblack/cool/module/system/executor/user/UserEditLockedCmdExe.java @@ -13,6 +13,7 @@ import org.springframework.stereotype.Component; @Component @RequiredArgsConstructor public class UserEditLockedCmdExe { + private final UserGateway gateway; diff --git a/cool-module-system/cool-module-system-app/src/main/java/com/xgblack/cool/module/system/service/RoleServiceImpl.java b/cool-module-system/cool-module-system-app/src/main/java/com/xgblack/cool/module/system/service/RoleServiceImpl.java index 46e51d4..25caaee 100644 --- a/cool-module-system/cool-module-system-app/src/main/java/com/xgblack/cool/module/system/service/RoleServiceImpl.java +++ b/cool-module-system/cool-module-system-app/src/main/java/com/xgblack/cool/module/system/service/RoleServiceImpl.java @@ -1,6 +1,17 @@ package com.xgblack.cool.module.system.service; +import com.xgblack.cool.framework.common.pojo.dto.PageResult; import com.xgblack.cool.module.system.api.RoleServiceI; +import com.xgblack.cool.module.system.dto.permission.RoleAddCmd; +import com.xgblack.cool.module.system.dto.permission.RoleEditCmd; +import com.xgblack.cool.module.system.dto.permission.RoleEditStatusCmd; +import com.xgblack.cool.module.system.dto.permission.RolePageQry; +import com.xgblack.cool.module.system.dto.permission.clientobject.RoleCO; +import com.xgblack.cool.module.system.executor.permission.RoleAddCmdExe; +import com.xgblack.cool.module.system.executor.permission.RoleEditCmdExe; +import com.xgblack.cool.module.system.executor.permission.RoleRemoveCmdExe; +import com.xgblack.cool.module.system.executor.permission.query.RoleByIdQryExe; +import com.xgblack.cool.module.system.executor.permission.query.RolePageQryExe; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Service; @@ -14,6 +25,40 @@ import org.springframework.stereotype.Service; @RequiredArgsConstructor public class RoleServiceImpl implements RoleServiceI { + private final RoleAddCmdExe roleAddCmdExe; + private final RoleByIdQryExe roleByIdQryExe; + private final RoleRemoveCmdExe roleRemoveCmdExe; + private final RoleEditCmdExe roleEditCmdExe; + private final RolePageQryExe rolePageQryExe; + @Override + public void add(RoleAddCmd cmd) { + roleAddCmdExe.execute(cmd); + } + + @Override + public void edit(RoleEditCmd cmd) { + roleEditCmdExe.execute(cmd); + } + + @Override + public void editStatus(RoleEditStatusCmd cmd) { + + } + + @Override + public void remove(Long id) { + roleRemoveCmdExe.execute(id); + } + + @Override + public PageResult page(RolePageQry qry) { + return rolePageQryExe.execute(qry); + } + + @Override + public RoleCO detail(Long id) { + return roleByIdQryExe.execute(id); + } } diff --git a/cool-module-system/cool-module-system-app/src/main/java/com/xgblack/cool/module/system/service/UserServiceImpl.java b/cool-module-system/cool-module-system-app/src/main/java/com/xgblack/cool/module/system/service/UserServiceImpl.java index e4d3594..cf11142 100644 --- a/cool-module-system/cool-module-system-app/src/main/java/com/xgblack/cool/module/system/service/UserServiceImpl.java +++ b/cool-module-system/cool-module-system-app/src/main/java/com/xgblack/cool/module/system/service/UserServiceImpl.java @@ -31,7 +31,7 @@ public class UserServiceImpl implements UserServiceI { private final UserProfileEditPasswordCmdExe userProfileEditPasswordCmdExe; @Override - public void save(UserAddCmd cmd) { + public void add(UserAddCmd cmd) { userAddCmdExe.execute(cmd); } @@ -46,7 +46,7 @@ public class UserServiceImpl implements UserServiceI { } @Override - public void update(UserEditCmd cmd) { + public void edit(UserEditCmd cmd) { userEditCmdExe.execute(cmd); } diff --git a/cool-module-system/cool-module-system-client/src/main/java/com/xgblack/cool/module/system/api/RoleServiceI.java b/cool-module-system/cool-module-system-client/src/main/java/com/xgblack/cool/module/system/api/RoleServiceI.java index 5d3e5f8..4d9e1da 100644 --- a/cool-module-system/cool-module-system-client/src/main/java/com/xgblack/cool/module/system/api/RoleServiceI.java +++ b/cool-module-system/cool-module-system-client/src/main/java/com/xgblack/cool/module/system/api/RoleServiceI.java @@ -1,5 +1,12 @@ package com.xgblack.cool.module.system.api; +import com.xgblack.cool.framework.common.pojo.dto.PageResult; +import com.xgblack.cool.module.system.dto.permission.RoleAddCmd; +import com.xgblack.cool.module.system.dto.permission.RoleEditCmd; +import com.xgblack.cool.module.system.dto.permission.RoleEditStatusCmd; +import com.xgblack.cool.module.system.dto.permission.RolePageQry; +import com.xgblack.cool.module.system.dto.permission.clientobject.RoleCO; + /** * @author xg black */ @@ -7,5 +14,16 @@ package com.xgblack.cool.module.system.api; public interface RoleServiceI { + void add(RoleAddCmd cmd); + + void edit(RoleEditCmd cmd); + + void editStatus(RoleEditStatusCmd cmd); + + void remove(Long id); + + PageResult page(RolePageQry qry); + + RoleCO detail(Long id); } diff --git a/cool-module-system/cool-module-system-client/src/main/java/com/xgblack/cool/module/system/api/UserServiceI.java b/cool-module-system/cool-module-system-client/src/main/java/com/xgblack/cool/module/system/api/UserServiceI.java index 690c99f..710223a 100644 --- a/cool-module-system/cool-module-system-client/src/main/java/com/xgblack/cool/module/system/api/UserServiceI.java +++ b/cool-module-system/cool-module-system-client/src/main/java/com/xgblack/cool/module/system/api/UserServiceI.java @@ -10,13 +10,13 @@ import com.xgblack.cool.module.system.dto.user.clientobject.UserCO; public interface UserServiceI { - void save(UserAddCmd cmd); + void add(UserAddCmd cmd); UserCO getDetail(Long id); void remove(Long id); - void update(UserEditCmd cmd); + void edit(UserEditCmd cmd); PageResult getPage(UserPageQry qry); diff --git a/cool-module-system/cool-module-system-client/src/main/java/com/xgblack/cool/module/system/dto/permission/RolePageQry.java b/cool-module-system/cool-module-system-client/src/main/java/com/xgblack/cool/module/system/dto/permission/RolePageQry.java index 999e0eb..f12b642 100644 --- a/cool-module-system/cool-module-system-client/src/main/java/com/xgblack/cool/module/system/dto/permission/RolePageQry.java +++ b/cool-module-system/cool-module-system-client/src/main/java/com/xgblack/cool/module/system/dto/permission/RolePageQry.java @@ -1,5 +1,6 @@ package com.xgblack.cool.module.system.dto.permission; +import com.xgblack.cool.framework.common.pojo.dto.PageQuery; import com.xgblack.cool.framework.common.pojo.dto.Query; import lombok.Getter; import lombok.Setter; @@ -19,7 +20,7 @@ import static com.xgblack.cool.framework.common.utils.date.DateUtils.FORMAT_YEAR @Setter @ToString @Accessors(chain = true) -public class RolePageQry extends Query { +public class RolePageQry extends PageQuery { private String name; diff --git a/cool-module-system/cool-module-system-domain/src/main/java/com/xgblack/cool/module/system/domain/gateway/RoleGateway.java b/cool-module-system/cool-module-system-domain/src/main/java/com/xgblack/cool/module/system/domain/gateway/RoleGateway.java index bddb9ad..61c43c4 100644 --- a/cool-module-system/cool-module-system-domain/src/main/java/com/xgblack/cool/module/system/domain/gateway/RoleGateway.java +++ b/cool-module-system/cool-module-system-domain/src/main/java/com/xgblack/cool/module/system/domain/gateway/RoleGateway.java @@ -1,9 +1,24 @@ package com.xgblack.cool.module.system.domain.gateway; +import com.xgblack.cool.framework.common.pojo.dto.PageResult; +import com.xgblack.cool.module.system.domain.permission.Role; +import com.xgblack.cool.module.system.dto.permission.RolePageQry; + /** * @author xg black */ public interface RoleGateway { + void create(Role role); + + void delete(Long id); + + void update(Role role); + + Role getById(Long id); + + PageResult getPage(RolePageQry qry); + + void updateStatus(Long id, Boolean status); } diff --git a/cool-module-system/cool-module-system-infrastructure/src/main/java/com/xgblack/cool/module/system/convertor/RoleConvertor.java b/cool-module-system/cool-module-system-infrastructure/src/main/java/com/xgblack/cool/module/system/convertor/RoleConvertor.java index 3d23005..92e3aa2 100644 --- a/cool-module-system/cool-module-system-infrastructure/src/main/java/com/xgblack/cool/module/system/convertor/RoleConvertor.java +++ b/cool-module-system/cool-module-system-infrastructure/src/main/java/com/xgblack/cool/module/system/convertor/RoleConvertor.java @@ -2,6 +2,8 @@ package com.xgblack.cool.module.system.convertor; import com.xgblack.cool.framework.common.convertor.Convertor; import com.xgblack.cool.module.system.domain.permission.Role; +import com.xgblack.cool.module.system.dto.permission.RoleAddCmd; +import com.xgblack.cool.module.system.dto.permission.RoleEditCmd; import com.xgblack.cool.module.system.dto.permission.clientobject.RoleCO; import com.xgblack.cool.module.system.gateway.database.dataobject.RoleDO; import org.mapstruct.Mapper; @@ -14,5 +16,9 @@ import org.mapstruct.factory.Mappers; public interface RoleConvertor extends Convertor { RoleConvertor INSTANCE = Mappers.getMapper(RoleConvertor.class); + Role toEntity(RoleAddCmd cmd); + + Role toEntity(RoleEditCmd cmd); + } diff --git a/cool-module-system/cool-module-system-infrastructure/src/main/java/com/xgblack/cool/module/system/gateway/RoleGatewayImpl.java b/cool-module-system/cool-module-system-infrastructure/src/main/java/com/xgblack/cool/module/system/gateway/RoleGatewayImpl.java index 3d5c72e..13328ea 100644 --- a/cool-module-system/cool-module-system-infrastructure/src/main/java/com/xgblack/cool/module/system/gateway/RoleGatewayImpl.java +++ b/cool-module-system/cool-module-system-infrastructure/src/main/java/com/xgblack/cool/module/system/gateway/RoleGatewayImpl.java @@ -1,8 +1,17 @@ package com.xgblack.cool.module.system.gateway; +import com.mybatisflex.core.query.QueryChain; +import com.mybatisflex.core.update.UpdateChain; +import com.xgblack.cool.framework.common.pojo.dto.PageResult; +import com.xgblack.cool.module.system.convertor.RoleConvertor; import com.xgblack.cool.module.system.domain.gateway.RoleGateway; +import com.xgblack.cool.module.system.domain.permission.Role; +import com.xgblack.cool.module.system.dto.permission.RolePageQry; +import com.xgblack.cool.module.system.gateway.database.dataobject.table.RoleTableDef; +import com.xgblack.cool.module.system.gateway.database.mapper.RoleMapper; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.dromara.hutool.core.text.StrUtil; import org.springframework.stereotype.Component; /** @@ -14,4 +23,49 @@ import org.springframework.stereotype.Component; @RequiredArgsConstructor public class RoleGatewayImpl implements RoleGateway { + private final RoleMapper roleMapper; + + private final static RoleConvertor convertor = RoleConvertor.INSTANCE; + + @Override + public void create(Role role) { + roleMapper.insertSelective(convertor.toDataObject(role)); + } + + @Override + public void delete(Long id) { + roleMapper.deleteById(id); + } + + @Override + public void update(Role role) { + roleMapper.update(convertor.toDataObject(role)); + } + + @Override + public Role getById(Long id) { + return convertor.convertDO2Entity(roleMapper.selectOneById(id)); + } + + @Override + public PageResult getPage(RolePageQry qry) { + return PageResult.of( + QueryChain.of(roleMapper) + .from(RoleTableDef.ROLE) + .and(RoleTableDef.ROLE.NAME.like(qry.getName(), StrUtil.isNotBlank(qry.getName()))) + .and(RoleTableDef.ROLE.CODE.eq(qry.getCode(), StrUtil.isNotBlank(qry.getCode()))) + .and(RoleTableDef.ROLE.STATUS.eq(qry.getStatus(), qry.getStatus() != null)) + .and(RoleTableDef.ROLE.CREATE_TIME.between(qry.getCreateTime(), qry.getCreateTime() != null)) + .orderBy(RoleTableDef.ROLE.ID.desc()) + .pageAs(qry.buildPage(), Role.class) + ); + } + + @Override + public void updateStatus(Long id, Boolean status) { + UpdateChain.of(roleMapper) + .set(RoleTableDef.ROLE.STATUS, status) + .where(RoleTableDef.ROLE.ID.eq(id)) + .update(); + } } diff --git a/cool-module-system/cool-module-system-infrastructure/src/main/java/com/xgblack/cool/module/system/gateway/UserGatewayImpl.java b/cool-module-system/cool-module-system-infrastructure/src/main/java/com/xgblack/cool/module/system/gateway/UserGatewayImpl.java index 83d33ac..14c77cc 100644 --- a/cool-module-system/cool-module-system-infrastructure/src/main/java/com/xgblack/cool/module/system/gateway/UserGatewayImpl.java +++ b/cool-module-system/cool-module-system-infrastructure/src/main/java/com/xgblack/cool/module/system/gateway/UserGatewayImpl.java @@ -30,6 +30,8 @@ public class UserGatewayImpl implements UserGateway, RemoteUserService { private final UserMapper userMapper; + private final static UserConvertor convertor = UserConvertor.INSTANCE; + @Override public UserInfo info(String username, String phone) { SysUser sysUser = QueryChain.of(userMapper) @@ -55,17 +57,17 @@ public class UserGatewayImpl implements UserGateway, RemoteUserService { @Override public void create(User user) { - userMapper.insertSelective(UserConvertor.INSTANCE.toDataObject(user)); + userMapper.insertSelective(convertor.toDataObject(user)); } @Override public User getById(Long id) { - return UserConvertor.INSTANCE.convertDO2Entity(userMapper.selectOneById(id)); + return convertor.convertDO2Entity(userMapper.selectOneById(id)); } @Override public void update(User user) { - userMapper.update(UserConvertor.INSTANCE.toDataObject(user)); + userMapper.update(convertor.toDataObject(user)); } @Override diff --git a/pom.xml b/pom.xml index 054b6cb..c057c61 100644 --- a/pom.xml +++ b/pom.xml @@ -164,8 +164,8 @@ - aliyun - https://maven.aliyun.com/repository/public + repo-huawei + https://repo.huaweicloud.com/repository/maven/ ossrh -- Gitee From 79ba2040600962d818b4e89e1997b9a6947ac4a3 Mon Sep 17 00:00:00 2001 From: xgblack Date: Wed, 28 Feb 2024 22:23:48 +0800 Subject: [PATCH 3/6] =?UTF-8?q?=E2=9C=A8feat(rbac):=20=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E8=A7=92=E8=89=B2=E5=85=B3=E8=81=94=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../system/web/PermissionController.java | 73 +++++++++++++++++++ .../PermissionUserRoleAssignCmdExe.java | 42 +++++++++++ .../PermissionRoleIdsByUserIdQryExe.java | 24 ++++++ .../system/service/PermissionServiceImpl.java | 34 +++++++++ .../module/system/api/PermissionServiceI.java | 16 ++++ .../PermissionUserRoleAssignCmd.java | 33 +++++++++ .../domain/gateway/PermissionGateway.java | 16 ++++ .../system/gateway/PermissionGatewayImpl.java | 68 +++++++++++++++++ .../database/dataobject/UserRoleDO.java | 6 -- 9 files changed, 306 insertions(+), 6 deletions(-) create mode 100644 cool-module-system/cool-module-system-adapter/src/main/java/com/xgblack/cool/module/system/web/PermissionController.java create mode 100644 cool-module-system/cool-module-system-app/src/main/java/com/xgblack/cool/module/system/executor/permission/PermissionUserRoleAssignCmdExe.java create mode 100644 cool-module-system/cool-module-system-app/src/main/java/com/xgblack/cool/module/system/executor/permission/query/PermissionRoleIdsByUserIdQryExe.java create mode 100644 cool-module-system/cool-module-system-app/src/main/java/com/xgblack/cool/module/system/service/PermissionServiceImpl.java create mode 100644 cool-module-system/cool-module-system-client/src/main/java/com/xgblack/cool/module/system/api/PermissionServiceI.java create mode 100644 cool-module-system/cool-module-system-client/src/main/java/com/xgblack/cool/module/system/dto/permission/PermissionUserRoleAssignCmd.java create mode 100644 cool-module-system/cool-module-system-domain/src/main/java/com/xgblack/cool/module/system/domain/gateway/PermissionGateway.java create mode 100644 cool-module-system/cool-module-system-infrastructure/src/main/java/com/xgblack/cool/module/system/gateway/PermissionGatewayImpl.java diff --git a/cool-module-system/cool-module-system-adapter/src/main/java/com/xgblack/cool/module/system/web/PermissionController.java b/cool-module-system/cool-module-system-adapter/src/main/java/com/xgblack/cool/module/system/web/PermissionController.java new file mode 100644 index 0000000..c805040 --- /dev/null +++ b/cool-module-system/cool-module-system-adapter/src/main/java/com/xgblack/cool/module/system/web/PermissionController.java @@ -0,0 +1,73 @@ +package com.xgblack.cool.module.system.web; + +import com.xgblack.cool.module.system.api.PermissionServiceI; +import com.xgblack.cool.module.system.dto.permission.PermissionUserRoleAssignCmd; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.Set; + +/** + * 管理后台 - 权限 + * @author xg black + */ + +@RestController +@RequestMapping("/system/permission") +@RequiredArgsConstructor +public class PermissionController { + + private final PermissionServiceI permissionService; + + /*@Operation(summary = "获得角色拥有的菜单编号") + @Parameter(name = "roleId", description = "角色编号", required = true) + @GetMapping("/list-role-menus") + @PreAuthorize("@ss.hasPermission('system:permission:assign-role-menu')") + public CommonResult> getRoleMenuList(Long roleId) { + return success(permissionService.getRoleMenuListByRoleId(roleId)); + }*/ + + /*@PostMapping("/assign-role-menu") + @Operation(summary = "赋予角色菜单") + @PreAuthorize("@ss.hasPermission('system:permission:assign-role-menu')") + public CommonResult assignRoleMenu(@Validated @RequestBody PermissionAssignRoleMenuReqVO reqVO) { + // 开启多租户的情况下,需要过滤掉未开通的菜单 + tenantService.handleTenantMenu(menuIds -> reqVO.getMenuIds().removeIf(menuId -> !CollUtil.contains(menuIds, menuId))); + + // 执行菜单的分配 + permissionService.assignRoleMenu(reqVO.getRoleId(), reqVO.getMenuIds()); + return success(true); + }*/ + + /*@PostMapping("/assign-role-data-scope") + @Operation(summary = "赋予角色数据权限") + @PreAuthorize("@ss.hasPermission('system:permission:assign-role-data-scope')") + public CommonResult assignRoleDataScope(@Valid @RequestBody PermissionAssignRoleDataScopeReqVO reqVO) { + permissionService.assignRoleDataScope(reqVO.getRoleId(), reqVO.getDataScope(), reqVO.getDataScopeDeptIds()); + return success(true); + }*/ + + /** + * 获得管理员拥有的角色编号列表 + * @param userId + * @return + */ + //@Parameter(name = "userId", description = "用户编号", required = true) + @GetMapping("/list-user-roles") + //@PreAuthorize("@ss.hasPermission('system:permission:assign-user-role')") + public Set listAdminRoles(@RequestParam("userId") Long userId) { + return permissionService.queryUserRoleIdsByUserId(userId); + } + + /** + * 赋予用户角色 + * @param cmd + */ + @PostMapping("/assign-user-role") + //@PreAuthorize("@ss.hasPermission('system:permission:assign-user-role')") + public void assignUserRole(@Validated @RequestBody PermissionUserRoleAssignCmd cmd) { + permissionService.assignUserRole(cmd); + } + +} diff --git a/cool-module-system/cool-module-system-app/src/main/java/com/xgblack/cool/module/system/executor/permission/PermissionUserRoleAssignCmdExe.java b/cool-module-system/cool-module-system-app/src/main/java/com/xgblack/cool/module/system/executor/permission/PermissionUserRoleAssignCmdExe.java new file mode 100644 index 0000000..936f3d2 --- /dev/null +++ b/cool-module-system/cool-module-system-app/src/main/java/com/xgblack/cool/module/system/executor/permission/PermissionUserRoleAssignCmdExe.java @@ -0,0 +1,42 @@ +package com.xgblack.cool.module.system.executor.permission; + +import com.xgblack.cool.module.system.domain.gateway.PermissionGateway; +import com.xgblack.cool.module.system.dto.permission.PermissionUserRoleAssignCmd; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.dromara.hutool.core.collection.CollUtil; +import org.dromara.hutool.core.collection.set.SetUtil; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Set; + +/** + * @author xg black + */ + +@Slf4j +@Component +@RequiredArgsConstructor +public class PermissionUserRoleAssignCmdExe { + + private final PermissionGateway gateway; + + @Transactional(rollbackFor = Exception.class) + public void execute(PermissionUserRoleAssignCmd cmd) { + + // 获得角色拥有角色编号 + Set dbRoleIds = gateway.getRoleIdsByUserId(cmd.getUserId()); + // 用户要修改拥有的角色编号 + Set roleIdList = CollUtil.emptyIfNull(cmd.getRoleIds()); + + // 计算新增和删除的角色编号 + Set createRoleIds = SetUtil.of(CollUtil.subtract(roleIdList, dbRoleIds)); + Set deleteMenuIds = SetUtil.of(CollUtil.subtract(dbRoleIds, roleIdList)); + + // 执行新增和删除。对于已经授权的角色,不用做任何处理 + gateway.insertUserRole(cmd.getUserId(), createRoleIds); + gateway.deleteUserRole(cmd.getUserId(), deleteMenuIds); + + } +} diff --git a/cool-module-system/cool-module-system-app/src/main/java/com/xgblack/cool/module/system/executor/permission/query/PermissionRoleIdsByUserIdQryExe.java b/cool-module-system/cool-module-system-app/src/main/java/com/xgblack/cool/module/system/executor/permission/query/PermissionRoleIdsByUserIdQryExe.java new file mode 100644 index 0000000..2568b87 --- /dev/null +++ b/cool-module-system/cool-module-system-app/src/main/java/com/xgblack/cool/module/system/executor/permission/query/PermissionRoleIdsByUserIdQryExe.java @@ -0,0 +1,24 @@ +package com.xgblack.cool.module.system.executor.permission.query; + +import com.xgblack.cool.module.system.domain.gateway.PermissionGateway; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; + +import java.util.Set; + +/** + * @author xg black + */ + +@Slf4j +@Component +@RequiredArgsConstructor +public class PermissionRoleIdsByUserIdQryExe { + + private final PermissionGateway gateway; + + public Set execute(Long userId) { + return gateway.getRoleIdsByUserId(userId); + } +} diff --git a/cool-module-system/cool-module-system-app/src/main/java/com/xgblack/cool/module/system/service/PermissionServiceImpl.java b/cool-module-system/cool-module-system-app/src/main/java/com/xgblack/cool/module/system/service/PermissionServiceImpl.java new file mode 100644 index 0000000..041e9f4 --- /dev/null +++ b/cool-module-system/cool-module-system-app/src/main/java/com/xgblack/cool/module/system/service/PermissionServiceImpl.java @@ -0,0 +1,34 @@ +package com.xgblack.cool.module.system.service; + +import com.xgblack.cool.module.system.api.PermissionServiceI; +import com.xgblack.cool.module.system.dto.permission.PermissionUserRoleAssignCmd; +import com.xgblack.cool.module.system.executor.permission.PermissionUserRoleAssignCmdExe; +import com.xgblack.cool.module.system.executor.permission.query.PermissionRoleIdsByUserIdQryExe; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +import java.util.Set; + +/** + * @author xg black + */ +@Slf4j +@Service +@RequiredArgsConstructor +public class PermissionServiceImpl implements PermissionServiceI { + + private final PermissionUserRoleAssignCmdExe permissionUserRoleAssignCmdExe; + private final PermissionRoleIdsByUserIdQryExe permissionRoleIdsByUserIdQryExe; + + @Override + public void assignUserRole(PermissionUserRoleAssignCmd cmd) { + permissionUserRoleAssignCmdExe.execute(cmd); + } + + @Override + public Set queryUserRoleIdsByUserId(Long userId) { + return permissionRoleIdsByUserIdQryExe.execute(userId); + } + +} diff --git a/cool-module-system/cool-module-system-client/src/main/java/com/xgblack/cool/module/system/api/PermissionServiceI.java b/cool-module-system/cool-module-system-client/src/main/java/com/xgblack/cool/module/system/api/PermissionServiceI.java new file mode 100644 index 0000000..08718bf --- /dev/null +++ b/cool-module-system/cool-module-system-client/src/main/java/com/xgblack/cool/module/system/api/PermissionServiceI.java @@ -0,0 +1,16 @@ +package com.xgblack.cool.module.system.api; + +import com.xgblack.cool.module.system.dto.permission.PermissionUserRoleAssignCmd; + +import java.util.Set; + +/** + * @author xg black + */ + +public interface PermissionServiceI { + + void assignUserRole(PermissionUserRoleAssignCmd cmd); + + Set queryUserRoleIdsByUserId(Long userId); +} diff --git a/cool-module-system/cool-module-system-client/src/main/java/com/xgblack/cool/module/system/dto/permission/PermissionUserRoleAssignCmd.java b/cool-module-system/cool-module-system-client/src/main/java/com/xgblack/cool/module/system/dto/permission/PermissionUserRoleAssignCmd.java new file mode 100644 index 0000000..f36f89c --- /dev/null +++ b/cool-module-system/cool-module-system-client/src/main/java/com/xgblack/cool/module/system/dto/permission/PermissionUserRoleAssignCmd.java @@ -0,0 +1,33 @@ +package com.xgblack.cool.module.system.dto.permission; + +import jakarta.validation.constraints.NotNull; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; +import lombok.experimental.Accessors; +import org.dromara.hutool.core.collection.set.SetUtil; + +import java.util.Set; + +/** + * @author xg black + */ + +@Getter +@Setter +@ToString +@Accessors(chain = true) +public class PermissionUserRoleAssignCmd { + + /** + * 用户编号 + */ + @NotNull(message = "用户编号不能为空") + private Long userId; + + /** + * 角色编号列表 + */ + private Set roleIds = SetUtil.empty(); // 兜底 + +} diff --git a/cool-module-system/cool-module-system-domain/src/main/java/com/xgblack/cool/module/system/domain/gateway/PermissionGateway.java b/cool-module-system/cool-module-system-domain/src/main/java/com/xgblack/cool/module/system/domain/gateway/PermissionGateway.java new file mode 100644 index 0000000..bda9401 --- /dev/null +++ b/cool-module-system/cool-module-system-domain/src/main/java/com/xgblack/cool/module/system/domain/gateway/PermissionGateway.java @@ -0,0 +1,16 @@ +package com.xgblack.cool.module.system.domain.gateway; + +import java.util.Set; + +/** + * @author xg black + */ + +public interface PermissionGateway { + + Set getRoleIdsByUserId(Long userId); + + void insertUserRole(Long userId, Set roleIds); + + void deleteUserRole(Long userId, Set roleIds); +} diff --git a/cool-module-system/cool-module-system-infrastructure/src/main/java/com/xgblack/cool/module/system/gateway/PermissionGatewayImpl.java b/cool-module-system/cool-module-system-infrastructure/src/main/java/com/xgblack/cool/module/system/gateway/PermissionGatewayImpl.java new file mode 100644 index 0000000..98d31cc --- /dev/null +++ b/cool-module-system/cool-module-system-infrastructure/src/main/java/com/xgblack/cool/module/system/gateway/PermissionGatewayImpl.java @@ -0,0 +1,68 @@ +package com.xgblack.cool.module.system.gateway; + +import com.mybatisflex.core.query.QueryChain; +import com.mybatisflex.core.query.QueryWrapper; +import com.xgblack.cool.module.system.domain.gateway.PermissionGateway; +import com.xgblack.cool.module.system.gateway.database.dataobject.UserRoleDO; +import com.xgblack.cool.module.system.gateway.database.dataobject.table.UserRoleTableDef; +import com.xgblack.cool.module.system.gateway.database.mapper.UserRoleMapper; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.dromara.hutool.core.collection.CollUtil; +import org.dromara.hutool.core.collection.ListUtil; +import org.dromara.hutool.core.collection.set.SetUtil; +import org.springframework.stereotype.Component; + +import java.util.List; +import java.util.Set; + +/** + * @author xg black + */ + +@Slf4j +@Component +@RequiredArgsConstructor +public class PermissionGatewayImpl implements PermissionGateway { + + private final UserRoleMapper userRoleMapper; + + + @Override + public Set getRoleIdsByUserId(Long userId) { + List roleIds = QueryChain.of(userRoleMapper) + .select(UserRoleTableDef.USER_ROLE.ROLE_ID) + .from(UserRoleTableDef.USER_ROLE) + .and(UserRoleTableDef.USER_ROLE.USER_ID.eq(userId)) + .objListAs(Long.class); + if (CollUtil.isEmpty(roleIds)) { + return SetUtil.empty(); + } + return SetUtil.of(roleIds); + } + + @Override + public void insertUserRole(Long userId, Set roleIds) { + if (CollUtil.isEmpty(roleIds)) { + return; + } + List list = ListUtil.empty(); + for (Long roleId : roleIds) { + list.add(new UserRoleDO().setRoleId(roleId).setUserId(userId)); + } + userRoleMapper.insertBatch(list); + } + + @Override + public void deleteUserRole(Long userId, Set roleIds) { + if (CollUtil.isEmpty(roleIds)) { + return; + } + QueryWrapper query = QueryWrapper.create() + .from(UserRoleTableDef.USER_ROLE) + .and(UserRoleTableDef.USER_ROLE.ROLE_ID.in(roleIds)); + userRoleMapper.deleteByQuery(query); + } + + +} diff --git a/cool-module-system/cool-module-system-infrastructure/src/main/java/com/xgblack/cool/module/system/gateway/database/dataobject/UserRoleDO.java b/cool-module-system/cool-module-system-infrastructure/src/main/java/com/xgblack/cool/module/system/gateway/database/dataobject/UserRoleDO.java index 4201837..d49a90b 100644 --- a/cool-module-system/cool-module-system-infrastructure/src/main/java/com/xgblack/cool/module/system/gateway/database/dataobject/UserRoleDO.java +++ b/cool-module-system/cool-module-system-infrastructure/src/main/java/com/xgblack/cool/module/system/gateway/database/dataobject/UserRoleDO.java @@ -1,6 +1,5 @@ package com.xgblack.cool.module.system.gateway.database.dataobject; -import com.mybatisflex.annotation.Column; import com.mybatisflex.annotation.Id; import com.mybatisflex.annotation.KeyType; import com.mybatisflex.annotation.Table; @@ -37,10 +36,5 @@ public class UserRoleDO extends TenantBaseDO { */ private Long roleId; - /** - * 是否删除 - */ - @Column(isLogicDelete = true) - private Boolean deleted; } -- Gitee From 0912fa7c0d76c80b1940647e2afbaa3b1c1e8d77 Mon Sep 17 00:00:00 2001 From: xgblack Date: Wed, 28 Feb 2024 23:05:31 +0800 Subject: [PATCH 4/6] =?UTF-8?q?=E2=9C=A8feat(rbac):=20=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E8=8F=9C=E5=8D=95=E7=9B=B8=E5=85=B3=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../module/system/web/MenuController.java | 83 ++++++++++++++ .../module/system/web/RoleController.java | 10 +- .../module/system/web/UserController.java | 8 +- .../system/service/MenuServiceImpl.java | 17 +++ .../cool/module/system/api/MenuServiceI.java | 8 ++ .../system/dto/permission/MenuAddCmd.java | 69 ++++++++++++ .../system/dto/permission/MenuEditCmd.java | 73 +++++++++++++ .../system/dto/permission/MenuListQry.java | 29 +++++ .../PermissionUserRoleAssignCmd.java | 3 +- .../dto/permission/clientobject/MenuCO.java | 100 +++++++++++++++++ .../module/system/domain/permission/Menu.java | 101 ++++++++++++++++++ .../system/convertor/MenuConvertor.java | 19 ++++ .../gateway/database/dataobject/MenuDO.java | 5 +- 13 files changed, 512 insertions(+), 13 deletions(-) create mode 100644 cool-module-system/cool-module-system-adapter/src/main/java/com/xgblack/cool/module/system/web/MenuController.java create mode 100644 cool-module-system/cool-module-system-app/src/main/java/com/xgblack/cool/module/system/service/MenuServiceImpl.java create mode 100644 cool-module-system/cool-module-system-client/src/main/java/com/xgblack/cool/module/system/api/MenuServiceI.java create mode 100644 cool-module-system/cool-module-system-client/src/main/java/com/xgblack/cool/module/system/dto/permission/MenuAddCmd.java create mode 100644 cool-module-system/cool-module-system-client/src/main/java/com/xgblack/cool/module/system/dto/permission/MenuEditCmd.java create mode 100644 cool-module-system/cool-module-system-client/src/main/java/com/xgblack/cool/module/system/dto/permission/MenuListQry.java create mode 100644 cool-module-system/cool-module-system-client/src/main/java/com/xgblack/cool/module/system/dto/permission/clientobject/MenuCO.java create mode 100644 cool-module-system/cool-module-system-domain/src/main/java/com/xgblack/cool/module/system/domain/permission/Menu.java create mode 100644 cool-module-system/cool-module-system-infrastructure/src/main/java/com/xgblack/cool/module/system/convertor/MenuConvertor.java diff --git a/cool-module-system/cool-module-system-adapter/src/main/java/com/xgblack/cool/module/system/web/MenuController.java b/cool-module-system/cool-module-system-adapter/src/main/java/com/xgblack/cool/module/system/web/MenuController.java new file mode 100644 index 0000000..9d00f23 --- /dev/null +++ b/cool-module-system/cool-module-system-adapter/src/main/java/com/xgblack/cool/module/system/web/MenuController.java @@ -0,0 +1,83 @@ +package com.xgblack.cool.module.system.web; + +import com.xgblack.cool.module.system.api.MenuServiceI; +import com.xgblack.cool.module.system.dto.permission.MenuAddCmd; +import com.xgblack.cool.module.system.dto.permission.MenuEditCmd; +import com.xgblack.cool.module.system.dto.permission.MenuListQry; +import com.xgblack.cool.module.system.dto.permission.clientobject.MenuCO; +import jakarta.validation.Valid; +import lombok.RequiredArgsConstructor; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 管理后台 - 菜单 + * @author xg black + */ + + +@RestController +@RequestMapping("/system/menu") +@Validated +@RequiredArgsConstructor +public class MenuController { + + private final MenuServiceI menuService; + + /** + * 创建菜单 + * @param cmd + */ + @PostMapping + //@PreAuthorize("@ss.hasPermission('system:menu:add')") + public void add(@Valid @RequestBody MenuAddCmd cmd) { + + } + + /** + * 修改菜单 + * @param cmd + */ + @PutMapping + //@PreAuthorize("@ss.hasPermission('system:menu:edit')") + public void edit(@Valid @RequestBody MenuEditCmd cmd) { + + } + + /** + * 删除菜单 + * @param id + */ + @DeleteMapping("{id}") + //@Parameter(name = "id", description = "菜单编号", required= true, example = "1024") + //@PreAuthorize("@ss.hasPermission('system:menu:remove')") + public void remove(@PathVariable("id") Long id) { + + } + + @GetMapping("list") + //@Operation(summary = "获取菜单列表", description = "用于【菜单管理】界面") + //@PreAuthorize("@ss.hasPermission('system:menu:query')") + public List list(MenuListQry qry) { + return null; + } + + /*@GetMapping({"/list-all-simple", "simple-list"}) + @Operation(summary = "获取菜单精简信息列表", description = "只包含被开启的菜单,用于【角色分配菜单】功能的选项。" + + "在多租户的场景下,会只返回租户所在套餐有的菜单") + public CommonResult> getSimpleMenuList() { + List list = menuService.getMenuListByTenant( + new MenuListReqVO().setStatus(CommonStatusEnum.ENABLE.getStatus())); + list.sort(Comparator.comparing(MenuDO::getSort)); + return success(BeanUtils.toBean(list, MenuSimpleRespVO.class)); + }*/ + + @GetMapping("detail/{id}") + //@Operation(summary = "获取菜单信息") + //@PreAuthorize("@ss.hasPermission('system:menu:query')") + public MenuCO detail(@PathVariable Long id) { + return new MenuCO(); + } +} diff --git a/cool-module-system/cool-module-system-adapter/src/main/java/com/xgblack/cool/module/system/web/RoleController.java b/cool-module-system/cool-module-system-adapter/src/main/java/com/xgblack/cool/module/system/web/RoleController.java index 8145c5c..5d0b7ea 100644 --- a/cool-module-system/cool-module-system-adapter/src/main/java/com/xgblack/cool/module/system/web/RoleController.java +++ b/cool-module-system/cool-module-system-adapter/src/main/java/com/xgblack/cool/module/system/web/RoleController.java @@ -40,7 +40,7 @@ public class RoleController { * 修改角色 * @param cmd */ - @PutMapping("/update") + @PutMapping //@PreAuthorize("@ss.hasPermission('system:role:update')") public void edit(@Valid @RequestBody RoleEditCmd cmd) { roleService.edit(cmd); @@ -60,9 +60,9 @@ public class RoleController { * 删除角色 * @param id */ - @DeleteMapping("/delete") + @DeleteMapping("{id}") //@PreAuthorize("@ss.hasPermission('system:role:delete')") - public void remove(@RequestParam("id") Long id) { + public void remove(@PathVariable("id") Long id) { roleService.remove(id); } @@ -71,9 +71,9 @@ public class RoleController { * @param id * @return */ - @GetMapping("/get") + @GetMapping("detail/{id}") //@PreAuthorize("@ss.hasPermission('system:role:query')") - public RoleCO detail(@RequestParam("id") Long id) { + public RoleCO detail(@PathVariable Long id) { return roleService.detail(id); } diff --git a/cool-module-system/cool-module-system-adapter/src/main/java/com/xgblack/cool/module/system/web/UserController.java b/cool-module-system/cool-module-system-adapter/src/main/java/com/xgblack/cool/module/system/web/UserController.java index 13caf09..f48bc52 100644 --- a/cool-module-system/cool-module-system-adapter/src/main/java/com/xgblack/cool/module/system/web/UserController.java +++ b/cool-module-system/cool-module-system-adapter/src/main/java/com/xgblack/cool/module/system/web/UserController.java @@ -50,10 +50,10 @@ public class UserController { * 删除用户 * @param id 用户id */ - @DeleteMapping + @DeleteMapping("{id}") //@Operation(summary = "删除用户") //@PreAuthorize("@ss.hasPermission('system:user:delete')") - public void delete(@RequestParam("id") Long id) { + public void delete(@PathVariable Long id) { userService.remove(id); } @@ -117,11 +117,11 @@ public class UserController { * @param id * @return */ - @GetMapping + @GetMapping("detail/{id}") //@Operation(summary = "获得用户详情") //@Parameter(name = "id", description = "编号", required = true, example = "1024") //@PreAuthorize("@ss.hasPermission('system:user:query')") - public UserCO detail(@RequestParam("id") Long id) { + public UserCO detail(@PathVariable("id") Long id) { /*AdminUserDO user = userService.getUser(id); // 拼接数据 DeptDO dept = deptService.getDept(user.getDeptId()); diff --git a/cool-module-system/cool-module-system-app/src/main/java/com/xgblack/cool/module/system/service/MenuServiceImpl.java b/cool-module-system/cool-module-system-app/src/main/java/com/xgblack/cool/module/system/service/MenuServiceImpl.java new file mode 100644 index 0000000..b257966 --- /dev/null +++ b/cool-module-system/cool-module-system-app/src/main/java/com/xgblack/cool/module/system/service/MenuServiceImpl.java @@ -0,0 +1,17 @@ +package com.xgblack.cool.module.system.service; + +import com.xgblack.cool.module.system.api.MenuServiceI; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +/** + * @author xg black + */ + +@Slf4j +@Service +@RequiredArgsConstructor +public class MenuServiceImpl implements MenuServiceI { + +} diff --git a/cool-module-system/cool-module-system-client/src/main/java/com/xgblack/cool/module/system/api/MenuServiceI.java b/cool-module-system/cool-module-system-client/src/main/java/com/xgblack/cool/module/system/api/MenuServiceI.java new file mode 100644 index 0000000..543692c --- /dev/null +++ b/cool-module-system/cool-module-system-client/src/main/java/com/xgblack/cool/module/system/api/MenuServiceI.java @@ -0,0 +1,8 @@ +package com.xgblack.cool.module.system.api; + +/** + * @author xg black + */ + +public interface MenuServiceI { +} diff --git a/cool-module-system/cool-module-system-client/src/main/java/com/xgblack/cool/module/system/dto/permission/MenuAddCmd.java b/cool-module-system/cool-module-system-client/src/main/java/com/xgblack/cool/module/system/dto/permission/MenuAddCmd.java new file mode 100644 index 0000000..61b0c53 --- /dev/null +++ b/cool-module-system/cool-module-system-client/src/main/java/com/xgblack/cool/module/system/dto/permission/MenuAddCmd.java @@ -0,0 +1,69 @@ +package com.xgblack.cool.module.system.dto.permission; + +import com.xgblack.cool.framework.common.pojo.dto.Command; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; +import lombok.experimental.Accessors; + +/** + * @author xg black + */ + +@Getter +@Setter +@ToString +@Accessors(chain = true) +public class MenuAddCmd extends Command { + + /** 菜单名称 */ + @NotBlank(message = "菜单名称不能为空") + @Size(max = 50, message = "菜单名称长度不能超过50个字符") + private String name; + + /** 权限标识,仅菜单类型为按钮时,才需要传递 */ + @Size(max = 100) + private String permission; + + /** 类型,参见 MenuTypeEnum 枚举类 */ + @NotNull(message = "菜单类型不能为空") + private Integer type; + + /** 显示顺序不能为空 */ + @NotNull(message = "显示顺序不能为空") + private Integer sort; + + /** 父菜单 ID */ + @NotNull(message = "父菜单 ID 不能为空") + private Long parentId; + + /** 路由地址,仅菜单类型为菜单或者目录时,才需要传 */ + @Size(max = 200, message = "路由地址不能超过200个字符") + private String path; + + /** 菜单图标,仅菜单类型为菜单或者目录时,才需要传 */ + private String icon; + + /** 组件路径,仅菜单类型为菜单时,才需要传 */ + @Size(max = 200, message = "组件路径不能超过255个字符") + private String component; + + /** 组件名 */ + private String componentName; + + /** 状态 */ + @NotNull(message = "状态不能为空") + private Boolean status; + + /** 是否可见 */ + private Boolean visible; + + /** 是否缓存 */ + private Boolean keepAlive; + + /** 是否总是显示 */ + private Boolean alwaysShow; +} diff --git a/cool-module-system/cool-module-system-client/src/main/java/com/xgblack/cool/module/system/dto/permission/MenuEditCmd.java b/cool-module-system/cool-module-system-client/src/main/java/com/xgblack/cool/module/system/dto/permission/MenuEditCmd.java new file mode 100644 index 0000000..bcb6f52 --- /dev/null +++ b/cool-module-system/cool-module-system-client/src/main/java/com/xgblack/cool/module/system/dto/permission/MenuEditCmd.java @@ -0,0 +1,73 @@ +package com.xgblack.cool.module.system.dto.permission; + +import com.xgblack.cool.framework.common.pojo.dto.Command; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; +import lombok.experimental.Accessors; + +/** + * @author xg black + */ + +@Getter +@Setter +@ToString +@Accessors(chain = true) +public class MenuEditCmd extends Command { + + /** 菜单编号 */ + @NotNull(message = "菜单编号不能为空") + private Long id; + + /** 菜单名称 */ + @NotBlank(message = "菜单名称不能为空") + @Size(max = 50, message = "菜单名称长度不能超过50个字符") + private String name; + + /** 权限标识,仅菜单类型为按钮时,才需要传递 */ + @Size(max = 100) + private String permission; + + /** 类型,参见 MenuTypeEnum 枚举类 */ + @NotNull(message = "菜单类型不能为空") + private Integer type; + + /** 显示顺序不能为空 */ + @NotNull(message = "显示顺序不能为空") + private Integer sort; + + /** 父菜单 ID */ + @NotNull(message = "父菜单 ID 不能为空") + private Long parentId; + + /** 路由地址,仅菜单类型为菜单或者目录时,才需要传 */ + @Size(max = 200, message = "路由地址不能超过200个字符") + private String path; + + /** 菜单图标,仅菜单类型为菜单或者目录时,才需要传 */ + private String icon; + + /** 组件路径,仅菜单类型为菜单时,才需要传 */ + @Size(max = 200, message = "组件路径不能超过255个字符") + private String component; + + /** 组件名 */ + private String componentName; + + /** 状态 */ + @NotNull(message = "状态不能为空") + private Boolean status; + + /** 是否可见 */ + private Boolean visible; + + /** 是否缓存 */ + private Boolean keepAlive; + + /** 是否总是显示 */ + private Boolean alwaysShow; +} diff --git a/cool-module-system/cool-module-system-client/src/main/java/com/xgblack/cool/module/system/dto/permission/MenuListQry.java b/cool-module-system/cool-module-system-client/src/main/java/com/xgblack/cool/module/system/dto/permission/MenuListQry.java new file mode 100644 index 0000000..a871e59 --- /dev/null +++ b/cool-module-system/cool-module-system-client/src/main/java/com/xgblack/cool/module/system/dto/permission/MenuListQry.java @@ -0,0 +1,29 @@ +package com.xgblack.cool.module.system.dto.permission; + +import com.xgblack.cool.framework.common.pojo.dto.Query; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; +import lombok.experimental.Accessors; + +/** + * @author xg black + */ + +@Getter +@Setter +@ToString +@Accessors(chain = true) +public class MenuListQry extends Query { + + /** + * 菜单名称,模糊匹配 + */ + private String name; + + /** + * 展示状态 + */ + private Boolean status; + +} diff --git a/cool-module-system/cool-module-system-client/src/main/java/com/xgblack/cool/module/system/dto/permission/PermissionUserRoleAssignCmd.java b/cool-module-system/cool-module-system-client/src/main/java/com/xgblack/cool/module/system/dto/permission/PermissionUserRoleAssignCmd.java index f36f89c..23403bc 100644 --- a/cool-module-system/cool-module-system-client/src/main/java/com/xgblack/cool/module/system/dto/permission/PermissionUserRoleAssignCmd.java +++ b/cool-module-system/cool-module-system-client/src/main/java/com/xgblack/cool/module/system/dto/permission/PermissionUserRoleAssignCmd.java @@ -1,5 +1,6 @@ package com.xgblack.cool.module.system.dto.permission; +import com.xgblack.cool.framework.common.pojo.dto.Command; import jakarta.validation.constraints.NotNull; import lombok.Getter; import lombok.Setter; @@ -17,7 +18,7 @@ import java.util.Set; @Setter @ToString @Accessors(chain = true) -public class PermissionUserRoleAssignCmd { +public class PermissionUserRoleAssignCmd extends Command { /** * 用户编号 diff --git a/cool-module-system/cool-module-system-client/src/main/java/com/xgblack/cool/module/system/dto/permission/clientobject/MenuCO.java b/cool-module-system/cool-module-system-client/src/main/java/com/xgblack/cool/module/system/dto/permission/clientobject/MenuCO.java new file mode 100644 index 0000000..bff0562 --- /dev/null +++ b/cool-module-system/cool-module-system-client/src/main/java/com/xgblack/cool/module/system/dto/permission/clientobject/MenuCO.java @@ -0,0 +1,100 @@ +package com.xgblack.cool.module.system.dto.permission.clientobject; + +import com.xgblack.cool.framework.common.pojo.ClientObject; +import com.xgblack.cool.module.system.common.enums.permission.MenuTypeEnum; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; +import lombok.experimental.Accessors; + +import java.time.LocalDateTime; + +/** + * @author xg black + */ + +@Getter +@Setter +@ToString +@Accessors(chain = true) +public class MenuCO extends ClientObject { + /** + * 菜单编号 + */ + private Long id; + + /** + * 菜单名称 + */ + private String name; + /** + * 权限标识 + * + * 一般格式为:${系统}:${模块}:${操作} + * 例如说:system:admin:add,即 system 服务的添加管理员。 + * + * 当我们把该 MenuDO 赋予给角色后,意味着该角色有该资源: + * - 对于后端,配合 @PreAuthorize 注解,配置 API 接口需要该权限,从而对 API 接口进行权限控制。 + * - 对于前端,配合前端标签,配置按钮是否展示,避免用户没有该权限时,结果可以看到该操作。 + */ + private String permission; + /** + * 菜单类型 + * + * 枚举 {@link MenuTypeEnum} + */ + private Integer type; + /** + * 显示顺序 + */ + private Integer sort; + /** + * 父菜单ID + */ + private Long parentId; + /** + * 路由地址 + * + * 如果 path 为 http(s) 时,则它是外链 + */ + private String path; + /** + * 菜单图标 + */ + private String icon; + /** + * 组件路径 + */ + private String component; + /** + * 组件名 + */ + private String componentName; + + /** + * 状态 + */ + private Boolean status; + /** + * 是否可见 + * + * 只有菜单、目录使用 + * 当设置为 true 时,该菜单不会展示在侧边栏,但是路由还是存在。例如说,一些独立的编辑页面 /edit/1024 等等 + */ + private Boolean visible; + /** + * 是否缓存 + * + * 只有菜单、目录使用,否使用 Vue 路由的 keep-alive 特性 + * 注意:如果开启缓存,则必须填写 {@link #componentName} 属性,否则无法缓存 + */ + private Boolean keepAlive; + /** + * 是否总是显示 + * + * 如果为 false 时,当该菜单只有一个子菜单时,不展示自己,直接展示子菜单 + */ + private Boolean alwaysShow; + + private LocalDateTime createTime; +} diff --git a/cool-module-system/cool-module-system-domain/src/main/java/com/xgblack/cool/module/system/domain/permission/Menu.java b/cool-module-system/cool-module-system-domain/src/main/java/com/xgblack/cool/module/system/domain/permission/Menu.java new file mode 100644 index 0000000..0b8cd8d --- /dev/null +++ b/cool-module-system/cool-module-system-domain/src/main/java/com/xgblack/cool/module/system/domain/permission/Menu.java @@ -0,0 +1,101 @@ +package com.xgblack.cool.module.system.domain.permission; + +import com.xgblack.cool.module.system.common.enums.permission.MenuTypeEnum; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; +import lombok.experimental.Accessors; + +import java.time.LocalDateTime; + +/** + * @author xg black + */ + +@Getter +@Setter +@ToString +@Accessors(chain = true) +public class Menu { + + /** + * 菜单编号 + */ + private Long id; + + /** + * 菜单名称 + */ + private String name; + /** + * 权限标识 + * + * 一般格式为:${系统}:${模块}:${操作} + * 例如说:system:admin:add,即 system 服务的添加管理员。 + * + * 当我们把该 MenuDO 赋予给角色后,意味着该角色有该资源: + * - 对于后端,配合 @PreAuthorize 注解,配置 API 接口需要该权限,从而对 API 接口进行权限控制。 + * - 对于前端,配合前端标签,配置按钮是否展示,避免用户没有该权限时,结果可以看到该操作。 + */ + private String permission; + /** + * 菜单类型 + * + * 枚举 {@link MenuTypeEnum} + */ + private Integer type; + /** + * 显示顺序 + */ + private Integer sort; + /** + * 父菜单ID + */ + private Long parentId; + /** + * 路由地址 + * + * 如果 path 为 http(s) 时,则它是外链 + */ + private String path; + /** + * 菜单图标 + */ + private String icon; + /** + * 组件路径 + */ + private String component; + /** + * 组件名 + */ + private String componentName; + + /** + * 状态 + */ + private Boolean status; + /** + * 是否可见 + * + * 只有菜单、目录使用 + * 当设置为 true 时,该菜单不会展示在侧边栏,但是路由还是存在。例如说,一些独立的编辑页面 /edit/1024 等等 + */ + private Boolean visible; + /** + * 是否缓存 + * + * 只有菜单、目录使用,否使用 Vue 路由的 keep-alive 特性 + * 注意:如果开启缓存,则必须填写 {@link #componentName} 属性,否则无法缓存 + */ + private Boolean keepAlive; + /** + * 是否总是显示 + * + * 如果为 false 时,当该菜单只有一个子菜单时,不展示自己,直接展示子菜单 + */ + private Boolean alwaysShow; + + private LocalDateTime createTime; + +} diff --git a/cool-module-system/cool-module-system-infrastructure/src/main/java/com/xgblack/cool/module/system/convertor/MenuConvertor.java b/cool-module-system/cool-module-system-infrastructure/src/main/java/com/xgblack/cool/module/system/convertor/MenuConvertor.java new file mode 100644 index 0000000..96b3e47 --- /dev/null +++ b/cool-module-system/cool-module-system-infrastructure/src/main/java/com/xgblack/cool/module/system/convertor/MenuConvertor.java @@ -0,0 +1,19 @@ +package com.xgblack.cool.module.system.convertor; + +import com.xgblack.cool.framework.common.convertor.Convertor; +import com.xgblack.cool.module.system.domain.permission.Menu; +import com.xgblack.cool.module.system.dto.permission.clientobject.MenuCO; +import com.xgblack.cool.module.system.gateway.database.dataobject.MenuDO; +import org.mapstruct.Mapper; +import org.mapstruct.factory.Mappers; + +/** + * @author xg black + */ + +@Mapper +public interface MenuConvertor extends Convertor { + MenuConvertor INSTANCE = Mappers.getMapper(MenuConvertor.class); + + +} diff --git a/cool-module-system/cool-module-system-infrastructure/src/main/java/com/xgblack/cool/module/system/gateway/database/dataobject/MenuDO.java b/cool-module-system/cool-module-system-infrastructure/src/main/java/com/xgblack/cool/module/system/gateway/database/dataobject/MenuDO.java index 9a4200b..72dd0db 100644 --- a/cool-module-system/cool-module-system-infrastructure/src/main/java/com/xgblack/cool/module/system/gateway/database/dataobject/MenuDO.java +++ b/cool-module-system/cool-module-system-infrastructure/src/main/java/com/xgblack/cool/module/system/gateway/database/dataobject/MenuDO.java @@ -79,12 +79,11 @@ public class MenuDO extends TenantBaseDO { * 组件名 */ private String componentName; + /** * 状态 - * - * 枚举 {@link CommonStatusEnum} */ - private Integer status; + private Boolean status; /** * 是否可见 * -- Gitee From 9acc4e7261a23a3470130818e76ecb2bac2ede3b Mon Sep 17 00:00:00 2001 From: xgblack Date: Thu, 29 Feb 2024 09:41:58 +0800 Subject: [PATCH 5/6] =?UTF-8?q?=E2=AC=86=EF=B8=8F(pom):=20=E5=8D=87?= =?UTF-8?q?=E7=BA=A7=E7=BB=84=E4=BB=B6=E7=89=88=E6=9C=AC=EF=BC=88=E8=AF=A5?= =?UTF-8?q?=E7=BB=84=E4=BB=B6=E5=BD=93=E5=89=8D=E6=9C=AA=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cool-dependencies/pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cool-dependencies/pom.xml b/cool-dependencies/pom.xml index b14517f..d468204 100644 --- a/cool-dependencies/pom.xml +++ b/cool-dependencies/pom.xml @@ -34,9 +34,9 @@ 1.27.2 3.1.8 3.3.3 - 3.1.0 + 3.1.1 4.6.0 - 15.0.0.Dev07 + 15.0.0.Dev10 2.2.3 2.7.0 -- Gitee From 6ae3fd350c11dab2b6fde6489aab2e58bbe23dd1 Mon Sep 17 00:00:00 2001 From: xgblack Date: Thu, 29 Feb 2024 14:51:49 +0800 Subject: [PATCH 6/6] =?UTF-8?q?=F0=9F=93=9Adocs(README):=20=E4=BF=AE?= =?UTF-8?q?=E6=94=B9=20=E8=BF=81=E7=A7=BB=E4=BB=A3=E7=A0=81=E4=BB=93?= =?UTF-8?q?=E5=BA=93=E5=88=B0=E4=BC=81=E4=B8=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 1badf61..8aa93e7 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@

- + @@ -10,7 +10,7 @@

码匠君 - +

-- Gitee