From 5eb60e5bdca9c680668d7d307c265acb20e4d8ef Mon Sep 17 00:00:00 2001 From: 86191 <2160251938@qq.com> Date: Tue, 20 Aug 2024 09:40:24 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- cloud-system-client/pom.xml | 23 + cloud-system-common/pom.xml | 30 + .../java/com/muyu/common}/domain/Query.java | 0 .../com/muyu/common}/domain/SysConfig.java | 0 .../java/com/muyu/common}/domain/SysMenu.java | 0 .../com/muyu/common}/domain/SysNotice.java | 0 .../java/com/muyu/common}/domain/SysPost.java | 0 .../com/muyu/common}/domain/SysRoleDept.java | 0 .../com/muyu/common}/domain/SysRoleMenu.java | 0 .../muyu/common}/domain/SysUserOnline.java | 0 .../com/muyu/common}/domain/SysUserPost.java | 0 .../com/muyu/common}/domain/SysUserRole.java | 0 .../com/muyu/common}/domain/UserNotice.java | 0 .../common}/domain/resp/AuthRoleResp.java | 0 .../common}/domain/resp/DeptTreeResp.java | 0 .../muyu/common}/domain/resp/ProfileResp.java | 0 .../common}/domain/resp/RoleMenuTreeResp.java | 0 .../domain/resp/UserDetailInfoResp.java | 0 .../common}/domain/resp/UserInfoResp.java | 0 .../common}/domain/resp/UserNoticeRes.java | 0 .../com/muyu/common}/domain/vo/MetaVo.java | 0 .../com/muyu/common}/domain/vo/RouterVo.java | 0 .../muyu/common}/domain/vo/TreeSelect.java | 0 .../muyu/common}/domain/vo/UserNoticeReq.java | 0 cloud-system-remote/pom.xml | 23 + cloud-system-server/pom.xml | 103 ++++ .../muyu/system/CloudSystemApplication.java | 21 + .../controller/SysConfigController.java | 122 ++++ .../system/controller/SysDeptController.java | 113 ++++ .../controller/SysDictDataController.java | 107 ++++ .../controller/SysDictTypeController.java | 115 ++++ .../controller/SysLogininforController.java | 80 +++ .../system/controller/SysMenuController.java | 137 +++++ .../controller/SysNoticeController.java | 114 ++++ .../controller/SysOperlogController.java | 67 +++ .../system/controller/SysPostController.java | 110 ++++ .../controller/SysProfileController.java | 134 +++++ .../system/controller/SysRoleController.java | 215 +++++++ .../system/controller/SysUserController.java | 303 ++++++++++ .../controller/SysUserOnlineController.java | 70 +++ .../java/com/muyu/system/domain/Query.java | 10 + .../com/muyu/system/domain/SysConfig.java | 80 +++ .../java/com/muyu/system/domain/SysMenu.java | 138 +++++ .../com/muyu/system/domain/SysNotice.java | 68 +++ .../java/com/muyu/system/domain/SysPost.java | 77 +++ .../com/muyu/system/domain/SysRoleDept.java | 27 + .../com/muyu/system/domain/SysRoleMenu.java | 28 + .../com/muyu/system/domain/SysUserOnline.java | 52 ++ .../com/muyu/system/domain/SysUserPost.java | 28 + .../com/muyu/system/domain/SysUserRole.java | 27 + .../com/muyu/system/domain/UserNotice.java | 18 + .../muyu/system/domain/resp/AuthRoleResp.java | 33 ++ .../muyu/system/domain/resp/DeptTreeResp.java | 32 ++ .../muyu/system/domain/resp/ProfileResp.java | 34 ++ .../system/domain/resp/RoleMenuTreeResp.java | 31 + .../domain/resp/UserDetailInfoResp.java | 47 ++ .../muyu/system/domain/resp/UserInfoResp.java | 36 ++ .../system/domain/resp/UserNoticeRes.java | 19 + .../com/muyu/system/domain/vo/MetaVo.java | 54 ++ .../com/muyu/system/domain/vo/RouterVo.java | 61 ++ .../com/muyu/system/domain/vo/TreeSelect.java | 56 ++ .../muyu/system/domain/vo/UserNoticeReq.java | 14 + .../muyu/system/mapper/SysConfigMapper.java | 12 + .../com/muyu/system/mapper/SysDeptMapper.java | 131 +++++ .../muyu/system/mapper/SysDictDataMapper.java | 106 ++++ .../muyu/system/mapper/SysDictTypeMapper.java | 92 +++ .../system/mapper/SysLogininforMapper.java | 45 ++ .../com/muyu/system/mapper/SysMenuMapper.java | 141 +++++ .../muyu/system/mapper/SysNoticeMapper.java | 81 +++ .../muyu/system/mapper/SysOperLogMapper.java | 52 ++ .../com/muyu/system/mapper/SysPostMapper.java | 110 ++++ .../muyu/system/mapper/SysRoleDeptMapper.java | 50 ++ .../com/muyu/system/mapper/SysRoleMapper.java | 119 ++++ .../muyu/system/mapper/SysRoleMenuMapper.java | 50 ++ .../com/muyu/system/mapper/SysUserMapper.java | 150 +++++ .../muyu/system/mapper/SysUserPostMapper.java | 49 ++ .../muyu/system/mapper/SysUserRoleMapper.java | 69 +++ .../muyu/system/service/SysConfigService.java | 44 ++ .../muyu/system/service/SysDeptService.java | 138 +++++ .../system/service/SysDictDataService.java | 66 +++ .../system/service/SysDictTypeService.java | 106 ++++ .../system/service/SysLogininforService.java | 43 ++ .../muyu/system/service/SysMenuService.java | 161 ++++++ .../muyu/system/service/SysNoticeService.java | 79 +++ .../system/service/SysOperLogService.java | 54 ++ .../system/service/SysPermissionService.java | 30 + .../muyu/system/service/SysPostService.java | 110 ++++ .../muyu/system/service/SysRoleService.java | 191 +++++++ .../system/service/SysUserOnlineService.java | 51 ++ .../muyu/system/service/SysUserService.java | 228 ++++++++ .../service/impl/SysConfigServiceImpl.java | 114 ++++ .../service/impl/SysDeptServiceImpl.java | 318 +++++++++++ .../service/impl/SysDictDataServiceImpl.java | 108 ++++ .../service/impl/SysDictTypeServiceImpl.java | 210 +++++++ .../impl/SysLogininforServiceImpl.java | 64 +++ .../service/impl/SysMenuServiceImpl.java | 502 +++++++++++++++++ .../service/impl/SysNoticeServiceImpl.java | 156 +++++ .../service/impl/SysOperLogServiceImpl.java | 77 +++ .../impl/SysPermissionServiceImpl.java | 76 +++ .../service/impl/SysPostServiceImpl.java | 174 ++++++ .../service/impl/SysRoleServiceImpl.java | 399 +++++++++++++ .../impl/SysUserOnlineServiceImpl.java | 84 +++ .../service/impl/SysUserServiceImpl.java | 531 ++++++++++++++++++ .../src/main/resources/banner.txt | 2 + .../src/main/resources/bootstrap.yml | 53 ++ .../src/main/resources/logback/dev.xml | 74 +++ .../src/main/resources/logback/prod.xml | 81 +++ .../src/main/resources/logback/test.xml | 81 +++ .../mapper/system/SysConfigMapper.xml | 128 +++++ .../resources/mapper/system/SysDeptMapper.xml | 183 ++++++ .../mapper/system/SysDictDataMapper.xml | 143 +++++ .../mapper/system/SysDictTypeMapper.xml | 107 ++++ .../mapper/system/SysLogininforMapper.xml | 54 ++ .../resources/mapper/system/SysMenuMapper.xml | 279 +++++++++ .../mapper/system/SysNoticeMapper.xml | 151 +++++ .../mapper/system/SysOperLogMapper.xml | 103 ++++ .../resources/mapper/system/SysPostMapper.xml | 131 +++++ .../mapper/system/SysRoleDeptMapper.xml | 38 ++ .../resources/mapper/system/SysRoleMapper.xml | 163 ++++++ .../mapper/system/SysRoleMenuMapper.xml | 38 ++ .../resources/mapper/system/SysUserMapper.xml | 297 ++++++++++ .../mapper/system/SysUserPostMapper.xml | 38 ++ .../mapper/system/SysUserRoleMapper.xml | 51 ++ pom.xml | 89 +-- src/main/resources/logback/dev.xml | 74 --- src/main/resources/logback/prod.xml | 81 --- src/main/resources/logback/test.xml | 81 --- 127 files changed, 10430 insertions(+), 318 deletions(-) create mode 100644 cloud-system-client/pom.xml create mode 100644 cloud-system-common/pom.xml rename {src/main/java/com/muyu/system => cloud-system-common/src/main/java/com/muyu/common}/domain/Query.java (100%) rename {src/main/java/com/muyu/system => cloud-system-common/src/main/java/com/muyu/common}/domain/SysConfig.java (100%) rename {src/main/java/com/muyu/system => cloud-system-common/src/main/java/com/muyu/common}/domain/SysMenu.java (100%) rename {src/main/java/com/muyu/system => cloud-system-common/src/main/java/com/muyu/common}/domain/SysNotice.java (100%) rename {src/main/java/com/muyu/system => cloud-system-common/src/main/java/com/muyu/common}/domain/SysPost.java (100%) rename {src/main/java/com/muyu/system => cloud-system-common/src/main/java/com/muyu/common}/domain/SysRoleDept.java (100%) rename {src/main/java/com/muyu/system => cloud-system-common/src/main/java/com/muyu/common}/domain/SysRoleMenu.java (100%) rename {src/main/java/com/muyu/system => cloud-system-common/src/main/java/com/muyu/common}/domain/SysUserOnline.java (100%) rename {src/main/java/com/muyu/system => cloud-system-common/src/main/java/com/muyu/common}/domain/SysUserPost.java (100%) rename {src/main/java/com/muyu/system => cloud-system-common/src/main/java/com/muyu/common}/domain/SysUserRole.java (100%) rename {src/main/java/com/muyu/system => cloud-system-common/src/main/java/com/muyu/common}/domain/UserNotice.java (100%) rename {src/main/java/com/muyu/system => cloud-system-common/src/main/java/com/muyu/common}/domain/resp/AuthRoleResp.java (100%) rename {src/main/java/com/muyu/system => cloud-system-common/src/main/java/com/muyu/common}/domain/resp/DeptTreeResp.java (100%) rename {src/main/java/com/muyu/system => cloud-system-common/src/main/java/com/muyu/common}/domain/resp/ProfileResp.java (100%) rename {src/main/java/com/muyu/system => cloud-system-common/src/main/java/com/muyu/common}/domain/resp/RoleMenuTreeResp.java (100%) rename {src/main/java/com/muyu/system => cloud-system-common/src/main/java/com/muyu/common}/domain/resp/UserDetailInfoResp.java (100%) rename {src/main/java/com/muyu/system => cloud-system-common/src/main/java/com/muyu/common}/domain/resp/UserInfoResp.java (100%) rename {src/main/java/com/muyu/system => cloud-system-common/src/main/java/com/muyu/common}/domain/resp/UserNoticeRes.java (100%) rename {src/main/java/com/muyu/system => cloud-system-common/src/main/java/com/muyu/common}/domain/vo/MetaVo.java (100%) rename {src/main/java/com/muyu/system => cloud-system-common/src/main/java/com/muyu/common}/domain/vo/RouterVo.java (100%) rename {src/main/java/com/muyu/system => cloud-system-common/src/main/java/com/muyu/common}/domain/vo/TreeSelect.java (100%) rename {src/main/java/com/muyu/system => cloud-system-common/src/main/java/com/muyu/common}/domain/vo/UserNoticeReq.java (100%) create mode 100644 cloud-system-remote/pom.xml create mode 100644 cloud-system-server/pom.xml create mode 100644 cloud-system-server/src/main/java/com/muyu/system/CloudSystemApplication.java create mode 100644 cloud-system-server/src/main/java/com/muyu/system/controller/SysConfigController.java create mode 100644 cloud-system-server/src/main/java/com/muyu/system/controller/SysDeptController.java create mode 100644 cloud-system-server/src/main/java/com/muyu/system/controller/SysDictDataController.java create mode 100644 cloud-system-server/src/main/java/com/muyu/system/controller/SysDictTypeController.java create mode 100644 cloud-system-server/src/main/java/com/muyu/system/controller/SysLogininforController.java create mode 100644 cloud-system-server/src/main/java/com/muyu/system/controller/SysMenuController.java create mode 100644 cloud-system-server/src/main/java/com/muyu/system/controller/SysNoticeController.java create mode 100644 cloud-system-server/src/main/java/com/muyu/system/controller/SysOperlogController.java create mode 100644 cloud-system-server/src/main/java/com/muyu/system/controller/SysPostController.java create mode 100644 cloud-system-server/src/main/java/com/muyu/system/controller/SysProfileController.java create mode 100644 cloud-system-server/src/main/java/com/muyu/system/controller/SysRoleController.java create mode 100644 cloud-system-server/src/main/java/com/muyu/system/controller/SysUserController.java create mode 100644 cloud-system-server/src/main/java/com/muyu/system/controller/SysUserOnlineController.java create mode 100644 cloud-system-server/src/main/java/com/muyu/system/domain/Query.java create mode 100644 cloud-system-server/src/main/java/com/muyu/system/domain/SysConfig.java create mode 100644 cloud-system-server/src/main/java/com/muyu/system/domain/SysMenu.java create mode 100644 cloud-system-server/src/main/java/com/muyu/system/domain/SysNotice.java create mode 100644 cloud-system-server/src/main/java/com/muyu/system/domain/SysPost.java create mode 100644 cloud-system-server/src/main/java/com/muyu/system/domain/SysRoleDept.java create mode 100644 cloud-system-server/src/main/java/com/muyu/system/domain/SysRoleMenu.java create mode 100644 cloud-system-server/src/main/java/com/muyu/system/domain/SysUserOnline.java create mode 100644 cloud-system-server/src/main/java/com/muyu/system/domain/SysUserPost.java create mode 100644 cloud-system-server/src/main/java/com/muyu/system/domain/SysUserRole.java create mode 100644 cloud-system-server/src/main/java/com/muyu/system/domain/UserNotice.java create mode 100644 cloud-system-server/src/main/java/com/muyu/system/domain/resp/AuthRoleResp.java create mode 100644 cloud-system-server/src/main/java/com/muyu/system/domain/resp/DeptTreeResp.java create mode 100644 cloud-system-server/src/main/java/com/muyu/system/domain/resp/ProfileResp.java create mode 100644 cloud-system-server/src/main/java/com/muyu/system/domain/resp/RoleMenuTreeResp.java create mode 100644 cloud-system-server/src/main/java/com/muyu/system/domain/resp/UserDetailInfoResp.java create mode 100644 cloud-system-server/src/main/java/com/muyu/system/domain/resp/UserInfoResp.java create mode 100644 cloud-system-server/src/main/java/com/muyu/system/domain/resp/UserNoticeRes.java create mode 100644 cloud-system-server/src/main/java/com/muyu/system/domain/vo/MetaVo.java create mode 100644 cloud-system-server/src/main/java/com/muyu/system/domain/vo/RouterVo.java create mode 100644 cloud-system-server/src/main/java/com/muyu/system/domain/vo/TreeSelect.java create mode 100644 cloud-system-server/src/main/java/com/muyu/system/domain/vo/UserNoticeReq.java create mode 100644 cloud-system-server/src/main/java/com/muyu/system/mapper/SysConfigMapper.java create mode 100644 cloud-system-server/src/main/java/com/muyu/system/mapper/SysDeptMapper.java create mode 100644 cloud-system-server/src/main/java/com/muyu/system/mapper/SysDictDataMapper.java create mode 100644 cloud-system-server/src/main/java/com/muyu/system/mapper/SysDictTypeMapper.java create mode 100644 cloud-system-server/src/main/java/com/muyu/system/mapper/SysLogininforMapper.java create mode 100644 cloud-system-server/src/main/java/com/muyu/system/mapper/SysMenuMapper.java create mode 100644 cloud-system-server/src/main/java/com/muyu/system/mapper/SysNoticeMapper.java create mode 100644 cloud-system-server/src/main/java/com/muyu/system/mapper/SysOperLogMapper.java create mode 100644 cloud-system-server/src/main/java/com/muyu/system/mapper/SysPostMapper.java create mode 100644 cloud-system-server/src/main/java/com/muyu/system/mapper/SysRoleDeptMapper.java create mode 100644 cloud-system-server/src/main/java/com/muyu/system/mapper/SysRoleMapper.java create mode 100644 cloud-system-server/src/main/java/com/muyu/system/mapper/SysRoleMenuMapper.java create mode 100644 cloud-system-server/src/main/java/com/muyu/system/mapper/SysUserMapper.java create mode 100644 cloud-system-server/src/main/java/com/muyu/system/mapper/SysUserPostMapper.java create mode 100644 cloud-system-server/src/main/java/com/muyu/system/mapper/SysUserRoleMapper.java create mode 100644 cloud-system-server/src/main/java/com/muyu/system/service/SysConfigService.java create mode 100644 cloud-system-server/src/main/java/com/muyu/system/service/SysDeptService.java create mode 100644 cloud-system-server/src/main/java/com/muyu/system/service/SysDictDataService.java create mode 100644 cloud-system-server/src/main/java/com/muyu/system/service/SysDictTypeService.java create mode 100644 cloud-system-server/src/main/java/com/muyu/system/service/SysLogininforService.java create mode 100644 cloud-system-server/src/main/java/com/muyu/system/service/SysMenuService.java create mode 100644 cloud-system-server/src/main/java/com/muyu/system/service/SysNoticeService.java create mode 100644 cloud-system-server/src/main/java/com/muyu/system/service/SysOperLogService.java create mode 100644 cloud-system-server/src/main/java/com/muyu/system/service/SysPermissionService.java create mode 100644 cloud-system-server/src/main/java/com/muyu/system/service/SysPostService.java create mode 100644 cloud-system-server/src/main/java/com/muyu/system/service/SysRoleService.java create mode 100644 cloud-system-server/src/main/java/com/muyu/system/service/SysUserOnlineService.java create mode 100644 cloud-system-server/src/main/java/com/muyu/system/service/SysUserService.java create mode 100644 cloud-system-server/src/main/java/com/muyu/system/service/impl/SysConfigServiceImpl.java create mode 100644 cloud-system-server/src/main/java/com/muyu/system/service/impl/SysDeptServiceImpl.java create mode 100644 cloud-system-server/src/main/java/com/muyu/system/service/impl/SysDictDataServiceImpl.java create mode 100644 cloud-system-server/src/main/java/com/muyu/system/service/impl/SysDictTypeServiceImpl.java create mode 100644 cloud-system-server/src/main/java/com/muyu/system/service/impl/SysLogininforServiceImpl.java create mode 100644 cloud-system-server/src/main/java/com/muyu/system/service/impl/SysMenuServiceImpl.java create mode 100644 cloud-system-server/src/main/java/com/muyu/system/service/impl/SysNoticeServiceImpl.java create mode 100644 cloud-system-server/src/main/java/com/muyu/system/service/impl/SysOperLogServiceImpl.java create mode 100644 cloud-system-server/src/main/java/com/muyu/system/service/impl/SysPermissionServiceImpl.java create mode 100644 cloud-system-server/src/main/java/com/muyu/system/service/impl/SysPostServiceImpl.java create mode 100644 cloud-system-server/src/main/java/com/muyu/system/service/impl/SysRoleServiceImpl.java create mode 100644 cloud-system-server/src/main/java/com/muyu/system/service/impl/SysUserOnlineServiceImpl.java create mode 100644 cloud-system-server/src/main/java/com/muyu/system/service/impl/SysUserServiceImpl.java create mode 100644 cloud-system-server/src/main/resources/banner.txt create mode 100644 cloud-system-server/src/main/resources/bootstrap.yml create mode 100644 cloud-system-server/src/main/resources/logback/dev.xml create mode 100644 cloud-system-server/src/main/resources/logback/prod.xml create mode 100644 cloud-system-server/src/main/resources/logback/test.xml create mode 100644 cloud-system-server/src/main/resources/mapper/system/SysConfigMapper.xml create mode 100644 cloud-system-server/src/main/resources/mapper/system/SysDeptMapper.xml create mode 100644 cloud-system-server/src/main/resources/mapper/system/SysDictDataMapper.xml create mode 100644 cloud-system-server/src/main/resources/mapper/system/SysDictTypeMapper.xml create mode 100644 cloud-system-server/src/main/resources/mapper/system/SysLogininforMapper.xml create mode 100644 cloud-system-server/src/main/resources/mapper/system/SysMenuMapper.xml create mode 100644 cloud-system-server/src/main/resources/mapper/system/SysNoticeMapper.xml create mode 100644 cloud-system-server/src/main/resources/mapper/system/SysOperLogMapper.xml create mode 100644 cloud-system-server/src/main/resources/mapper/system/SysPostMapper.xml create mode 100644 cloud-system-server/src/main/resources/mapper/system/SysRoleDeptMapper.xml create mode 100644 cloud-system-server/src/main/resources/mapper/system/SysRoleMapper.xml create mode 100644 cloud-system-server/src/main/resources/mapper/system/SysRoleMenuMapper.xml create mode 100644 cloud-system-server/src/main/resources/mapper/system/SysUserMapper.xml create mode 100644 cloud-system-server/src/main/resources/mapper/system/SysUserPostMapper.xml create mode 100644 cloud-system-server/src/main/resources/mapper/system/SysUserRoleMapper.xml diff --git a/cloud-system-client/pom.xml b/cloud-system-client/pom.xml new file mode 100644 index 0000000..c9f665d --- /dev/null +++ b/cloud-system-client/pom.xml @@ -0,0 +1,23 @@ + + + 4.0.0 + + com.muyu + cloud-modules-system + 1.0.0 + + + cloud-system-client + + + + + com.muyu + cloud-system-common + 1.0.0 + + + + diff --git a/cloud-system-common/pom.xml b/cloud-system-common/pom.xml new file mode 100644 index 0000000..2277b3e --- /dev/null +++ b/cloud-system-common/pom.xml @@ -0,0 +1,30 @@ + + + 4.0.0 + + com.muyu + cloud-modules-system + 1.0.0 + + + cloud-system-common + + + + + com.muyu + cloud-common-core + + + io.swagger.core.v3 + swagger-annotations-jakarta + + + com.muyu + cloud-common-security + + + + diff --git a/src/main/java/com/muyu/system/domain/Query.java b/cloud-system-common/src/main/java/com/muyu/common/domain/Query.java similarity index 100% rename from src/main/java/com/muyu/system/domain/Query.java rename to cloud-system-common/src/main/java/com/muyu/common/domain/Query.java diff --git a/src/main/java/com/muyu/system/domain/SysConfig.java b/cloud-system-common/src/main/java/com/muyu/common/domain/SysConfig.java similarity index 100% rename from src/main/java/com/muyu/system/domain/SysConfig.java rename to cloud-system-common/src/main/java/com/muyu/common/domain/SysConfig.java diff --git a/src/main/java/com/muyu/system/domain/SysMenu.java b/cloud-system-common/src/main/java/com/muyu/common/domain/SysMenu.java similarity index 100% rename from src/main/java/com/muyu/system/domain/SysMenu.java rename to cloud-system-common/src/main/java/com/muyu/common/domain/SysMenu.java diff --git a/src/main/java/com/muyu/system/domain/SysNotice.java b/cloud-system-common/src/main/java/com/muyu/common/domain/SysNotice.java similarity index 100% rename from src/main/java/com/muyu/system/domain/SysNotice.java rename to cloud-system-common/src/main/java/com/muyu/common/domain/SysNotice.java diff --git a/src/main/java/com/muyu/system/domain/SysPost.java b/cloud-system-common/src/main/java/com/muyu/common/domain/SysPost.java similarity index 100% rename from src/main/java/com/muyu/system/domain/SysPost.java rename to cloud-system-common/src/main/java/com/muyu/common/domain/SysPost.java diff --git a/src/main/java/com/muyu/system/domain/SysRoleDept.java b/cloud-system-common/src/main/java/com/muyu/common/domain/SysRoleDept.java similarity index 100% rename from src/main/java/com/muyu/system/domain/SysRoleDept.java rename to cloud-system-common/src/main/java/com/muyu/common/domain/SysRoleDept.java diff --git a/src/main/java/com/muyu/system/domain/SysRoleMenu.java b/cloud-system-common/src/main/java/com/muyu/common/domain/SysRoleMenu.java similarity index 100% rename from src/main/java/com/muyu/system/domain/SysRoleMenu.java rename to cloud-system-common/src/main/java/com/muyu/common/domain/SysRoleMenu.java diff --git a/src/main/java/com/muyu/system/domain/SysUserOnline.java b/cloud-system-common/src/main/java/com/muyu/common/domain/SysUserOnline.java similarity index 100% rename from src/main/java/com/muyu/system/domain/SysUserOnline.java rename to cloud-system-common/src/main/java/com/muyu/common/domain/SysUserOnline.java diff --git a/src/main/java/com/muyu/system/domain/SysUserPost.java b/cloud-system-common/src/main/java/com/muyu/common/domain/SysUserPost.java similarity index 100% rename from src/main/java/com/muyu/system/domain/SysUserPost.java rename to cloud-system-common/src/main/java/com/muyu/common/domain/SysUserPost.java diff --git a/src/main/java/com/muyu/system/domain/SysUserRole.java b/cloud-system-common/src/main/java/com/muyu/common/domain/SysUserRole.java similarity index 100% rename from src/main/java/com/muyu/system/domain/SysUserRole.java rename to cloud-system-common/src/main/java/com/muyu/common/domain/SysUserRole.java diff --git a/src/main/java/com/muyu/system/domain/UserNotice.java b/cloud-system-common/src/main/java/com/muyu/common/domain/UserNotice.java similarity index 100% rename from src/main/java/com/muyu/system/domain/UserNotice.java rename to cloud-system-common/src/main/java/com/muyu/common/domain/UserNotice.java diff --git a/src/main/java/com/muyu/system/domain/resp/AuthRoleResp.java b/cloud-system-common/src/main/java/com/muyu/common/domain/resp/AuthRoleResp.java similarity index 100% rename from src/main/java/com/muyu/system/domain/resp/AuthRoleResp.java rename to cloud-system-common/src/main/java/com/muyu/common/domain/resp/AuthRoleResp.java diff --git a/src/main/java/com/muyu/system/domain/resp/DeptTreeResp.java b/cloud-system-common/src/main/java/com/muyu/common/domain/resp/DeptTreeResp.java similarity index 100% rename from src/main/java/com/muyu/system/domain/resp/DeptTreeResp.java rename to cloud-system-common/src/main/java/com/muyu/common/domain/resp/DeptTreeResp.java diff --git a/src/main/java/com/muyu/system/domain/resp/ProfileResp.java b/cloud-system-common/src/main/java/com/muyu/common/domain/resp/ProfileResp.java similarity index 100% rename from src/main/java/com/muyu/system/domain/resp/ProfileResp.java rename to cloud-system-common/src/main/java/com/muyu/common/domain/resp/ProfileResp.java diff --git a/src/main/java/com/muyu/system/domain/resp/RoleMenuTreeResp.java b/cloud-system-common/src/main/java/com/muyu/common/domain/resp/RoleMenuTreeResp.java similarity index 100% rename from src/main/java/com/muyu/system/domain/resp/RoleMenuTreeResp.java rename to cloud-system-common/src/main/java/com/muyu/common/domain/resp/RoleMenuTreeResp.java diff --git a/src/main/java/com/muyu/system/domain/resp/UserDetailInfoResp.java b/cloud-system-common/src/main/java/com/muyu/common/domain/resp/UserDetailInfoResp.java similarity index 100% rename from src/main/java/com/muyu/system/domain/resp/UserDetailInfoResp.java rename to cloud-system-common/src/main/java/com/muyu/common/domain/resp/UserDetailInfoResp.java diff --git a/src/main/java/com/muyu/system/domain/resp/UserInfoResp.java b/cloud-system-common/src/main/java/com/muyu/common/domain/resp/UserInfoResp.java similarity index 100% rename from src/main/java/com/muyu/system/domain/resp/UserInfoResp.java rename to cloud-system-common/src/main/java/com/muyu/common/domain/resp/UserInfoResp.java diff --git a/src/main/java/com/muyu/system/domain/resp/UserNoticeRes.java b/cloud-system-common/src/main/java/com/muyu/common/domain/resp/UserNoticeRes.java similarity index 100% rename from src/main/java/com/muyu/system/domain/resp/UserNoticeRes.java rename to cloud-system-common/src/main/java/com/muyu/common/domain/resp/UserNoticeRes.java diff --git a/src/main/java/com/muyu/system/domain/vo/MetaVo.java b/cloud-system-common/src/main/java/com/muyu/common/domain/vo/MetaVo.java similarity index 100% rename from src/main/java/com/muyu/system/domain/vo/MetaVo.java rename to cloud-system-common/src/main/java/com/muyu/common/domain/vo/MetaVo.java diff --git a/src/main/java/com/muyu/system/domain/vo/RouterVo.java b/cloud-system-common/src/main/java/com/muyu/common/domain/vo/RouterVo.java similarity index 100% rename from src/main/java/com/muyu/system/domain/vo/RouterVo.java rename to cloud-system-common/src/main/java/com/muyu/common/domain/vo/RouterVo.java diff --git a/src/main/java/com/muyu/system/domain/vo/TreeSelect.java b/cloud-system-common/src/main/java/com/muyu/common/domain/vo/TreeSelect.java similarity index 100% rename from src/main/java/com/muyu/system/domain/vo/TreeSelect.java rename to cloud-system-common/src/main/java/com/muyu/common/domain/vo/TreeSelect.java diff --git a/src/main/java/com/muyu/system/domain/vo/UserNoticeReq.java b/cloud-system-common/src/main/java/com/muyu/common/domain/vo/UserNoticeReq.java similarity index 100% rename from src/main/java/com/muyu/system/domain/vo/UserNoticeReq.java rename to cloud-system-common/src/main/java/com/muyu/common/domain/vo/UserNoticeReq.java diff --git a/cloud-system-remote/pom.xml b/cloud-system-remote/pom.xml new file mode 100644 index 0000000..616b3d9 --- /dev/null +++ b/cloud-system-remote/pom.xml @@ -0,0 +1,23 @@ + + + 4.0.0 + + com.muyu + cloud-modules-system + 1.0.0 + + + cloud-system-remote + + + + + com.muyu + cloud-system-common + 1.0.0 + + + + diff --git a/cloud-system-server/pom.xml b/cloud-system-server/pom.xml new file mode 100644 index 0000000..0d3a5ac --- /dev/null +++ b/cloud-system-server/pom.xml @@ -0,0 +1,103 @@ + + + 4.0.0 + + com.muyu + cloud-modules-system + 1.0.0 + + + cloud-system-server + + + + + + com.muyu + cloud-system-common + 1.0.0 + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-discovery + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-nacos-config + + + + + + com.alibaba.cloud + spring-cloud-starter-alibaba-sentinel + + + + + org.springframework.boot + spring-boot-starter-actuator + + + + + com.mysql + mysql-connector-j + + + + + com.muyu + cloud-common-datasource + + + + + com.muyu + cloud-common-datascope + + + + + com.muyu + cloud-common-log + + + + + com.muyu + cloud-common-api-doc + + + + + com.muyu + cloud-common-xxl + + + + + + ${project.artifactId} + + + org.springframework.boot + spring-boot-maven-plugin + + + + repackage + + + + + + + + diff --git a/cloud-system-server/src/main/java/com/muyu/system/CloudSystemApplication.java b/cloud-system-server/src/main/java/com/muyu/system/CloudSystemApplication.java new file mode 100644 index 0000000..b01e5db --- /dev/null +++ b/cloud-system-server/src/main/java/com/muyu/system/CloudSystemApplication.java @@ -0,0 +1,21 @@ +package com.muyu.system; + +import com.muyu.common.security.annotation.EnableCustomConfig; +import com.muyu.common.security.annotation.EnableMyFeignClients; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +/** + * 系统模块 + * + * @author muyu + */ +@EnableCustomConfig +//@EnableCustomSwagger2 +@EnableMyFeignClients +@SpringBootApplication +public class CloudSystemApplication { + public static void main (String[] args) { + SpringApplication.run(CloudSystemApplication.class, args); + } +} diff --git a/cloud-system-server/src/main/java/com/muyu/system/controller/SysConfigController.java b/cloud-system-server/src/main/java/com/muyu/system/controller/SysConfigController.java new file mode 100644 index 0000000..3bced52 --- /dev/null +++ b/cloud-system-server/src/main/java/com/muyu/system/controller/SysConfigController.java @@ -0,0 +1,122 @@ +package com.muyu.system.controller; + +import com.muyu.common.core.domain.Result; +import com.muyu.common.core.utils.poi.ExcelUtil; +import com.muyu.common.core.web.controller.BaseController; +import com.muyu.common.core.web.page.TableDataInfo; +import com.muyu.common.log.annotation.Log; +import com.muyu.common.log.enums.BusinessType; +import com.muyu.common.security.annotation.RequiresPermissions; +import com.muyu.common.security.utils.SecurityUtils; +import com.muyu.system.domain.SysConfig; +import com.muyu.system.service.SysConfigService; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.servlet.http.HttpServletResponse; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.Arrays; +import java.util.List; + +/** + * 参数配置 信息操作处理 + * + * @author muyu + */ +@RestController +@RequestMapping("/config") +@Tag(name = "SysConfigController", description = "系统参数配置") +public class SysConfigController extends BaseController { + + @Autowired + private SysConfigService configService; + + /** + * 获取参数配置列表 + */ + @RequiresPermissions("system:config:list") + @GetMapping("/list") + @Operation(summary = "查询集合", description = "更新水果信息") + public Result> list (SysConfig config) { + startPage(); + List list = configService.pageQuery(config); + return getDataTable(list); + } + + @Log(title = "参数管理", businessType = BusinessType.EXPORT) + @RequiresPermissions("system:config:export") + @PostMapping("/export") + public void export (HttpServletResponse response, SysConfig config) { + List list = configService.pageQuery(config); + ExcelUtil util = new ExcelUtil(SysConfig.class); + util.exportExcel(response, list, "参数数据"); + } + + /** + * 根据参数编号获取详细信息 + */ + @GetMapping(value = "/{configId}") + public Result getInfo (@PathVariable("configId") Long configId) { + return success(configService.getById(configId)); + } + + /** + * 根据参数键名查询参数值 + */ + @GetMapping(value = "/configKey/{configKey}") + public Result getConfigKey (@PathVariable("configKey") String configKey) { + return success(configService.selectConfigByKey(configKey)); + } + + /** + * 新增参数配置 + */ + @RequiresPermissions("system:config:add") + @Log(title = "参数管理", businessType = BusinessType.INSERT) + @PostMapping + public Result add (@Validated @RequestBody SysConfig config) { + if (!configService.checkConfigKeyUnique(config)) { + return error("新增参数'" + config.getConfigName() + "'失败,参数键名已存在"); + } + config.setCreateBy(SecurityUtils.getUsername()); + return toAjax(configService.save(config)); + } + + /** + * 修改参数配置 + */ + @RequiresPermissions("system:config:edit") + @Log(title = "参数管理", businessType = BusinessType.UPDATE) + @PutMapping + public Result edit (@Validated @RequestBody SysConfig config) { + if (!configService.checkConfigKeyUnique(config)) { + return error("修改参数'" + config.getConfigName() + "'失败,参数键名已存在"); + } + config.setUpdateBy(SecurityUtils.getUsername()); + return toAjax(configService.updateById(config)); + } + + /** + * 删除参数配置 + */ + @RequiresPermissions("system:config:remove") + @Log(title = "参数管理", businessType = BusinessType.DELETE) + @DeleteMapping("/{configIds}") + public Result remove (@PathVariable("configIds") Long[] configIds) { + configService.removeBatchByIds(Arrays.asList(configIds)); + return success(); + } + + /** + * 刷新参数缓存 + */ + @RequiresPermissions("system:config:remove") + @Log(title = "参数管理", businessType = BusinessType.CLEAN) + @DeleteMapping("/refreshCache") + public Result refreshCache () { + configService.resetConfigCache(); + return success(); + } +} diff --git a/cloud-system-server/src/main/java/com/muyu/system/controller/SysDeptController.java b/cloud-system-server/src/main/java/com/muyu/system/controller/SysDeptController.java new file mode 100644 index 0000000..65fcab2 --- /dev/null +++ b/cloud-system-server/src/main/java/com/muyu/system/controller/SysDeptController.java @@ -0,0 +1,113 @@ +package com.muyu.system.controller; + +import com.muyu.common.core.constant.UserConstants; +import com.muyu.common.core.domain.Result; +import com.muyu.common.core.utils.StringUtils; +import com.muyu.common.core.web.controller.BaseController; +import com.muyu.common.log.annotation.Log; +import com.muyu.common.log.enums.BusinessType; +import com.muyu.common.security.annotation.RequiresPermissions; +import com.muyu.common.security.utils.SecurityUtils; +import com.muyu.common.system.domain.SysDept; +import com.muyu.system.service.SysDeptService; +import org.apache.commons.lang3.ArrayUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 部门信息 + * + * @author muyu + */ +@RestController +@RequestMapping("/dept") +public class SysDeptController extends BaseController { + + @Autowired + private SysDeptService deptService; + + /** + * 获取部门列表 + */ + @RequiresPermissions("system:dept:list") + @GetMapping("/list") + public Result list (SysDept dept) { + List depts = deptService.selectDeptList(dept); + return success(depts); + } + + /** + * 查询部门列表(排除节点) + */ + @RequiresPermissions("system:dept:list") + @GetMapping("/list/exclude/{deptId}") + public Result excludeChild (@PathVariable(value = "deptId", required = false) Long deptId) { + List depts = deptService.selectDeptList(new SysDept()); + depts.removeIf(d -> d.getDeptId().intValue() == deptId || ArrayUtils.contains(StringUtils.split(d.getAncestors(), ","), deptId + "")); + return success(depts); + } + + /** + * 根据部门编号获取详细信息 + */ + @RequiresPermissions("system:dept:query") + @GetMapping(value = "/{deptId}") + public Result getInfo (@PathVariable("deptId") Long deptId) { + deptService.checkDeptDataScope(deptId); + return success(deptService.selectDeptById(deptId)); + } + + /** + * 新增部门 + */ + @RequiresPermissions("system:dept:add") + @Log(title = "部门管理", businessType = BusinessType.INSERT) + @PostMapping + public Result add (@Validated @RequestBody SysDept dept) { + if (!deptService.checkDeptNameUnique(dept)) { + return error("新增部门'" + dept.getDeptName() + "'失败,部门名称已存在"); + } + dept.setCreateBy(SecurityUtils.getUsername()); + return toAjax(deptService.insertDept(dept)); + } + + /** + * 修改部门 + */ + @RequiresPermissions("system:dept:edit") + @Log(title = "部门管理", businessType = BusinessType.UPDATE) + @PutMapping + public Result edit (@Validated @RequestBody SysDept dept) { + Long deptId = dept.getDeptId(); + deptService.checkDeptDataScope(deptId); + if (!deptService.checkDeptNameUnique(dept)) { + return error("修改部门'" + dept.getDeptName() + "'失败,部门名称已存在"); + } else if (dept.getParentId().equals(deptId)) { + return error("修改部门'" + dept.getDeptName() + "'失败,上级部门不能是自己"); + } else if (StringUtils.equals(UserConstants.DEPT_DISABLE, dept.getStatus()) && deptService.selectNormalChildrenDeptById(deptId) > 0) { + return error("该部门包含未停用的子部门!"); + } + dept.setUpdateBy(SecurityUtils.getUsername()); + return toAjax(deptService.updateDept(dept)); + } + + /** + * 删除部门 + */ + @RequiresPermissions("system:dept:remove") + @Log(title = "部门管理", businessType = BusinessType.DELETE) + @DeleteMapping("/{deptId}") + public Result remove (@PathVariable("deptId") Long deptId) { + if (deptService.hasChildByDeptId(deptId)) { + return warn("存在下级部门,不允许删除"); + } + if (deptService.checkDeptExistUser(deptId)) { + return warn("部门存在用户,不允许删除"); + } + deptService.checkDeptDataScope(deptId); + return toAjax(deptService.deleteDeptById(deptId)); + } +} diff --git a/cloud-system-server/src/main/java/com/muyu/system/controller/SysDictDataController.java b/cloud-system-server/src/main/java/com/muyu/system/controller/SysDictDataController.java new file mode 100644 index 0000000..02c8132 --- /dev/null +++ b/cloud-system-server/src/main/java/com/muyu/system/controller/SysDictDataController.java @@ -0,0 +1,107 @@ +package com.muyu.system.controller; + +import com.muyu.common.core.domain.Result; +import com.muyu.common.core.utils.StringUtils; +import com.muyu.common.core.utils.poi.ExcelUtil; +import com.muyu.common.core.web.controller.BaseController; +import com.muyu.common.core.web.page.TableDataInfo; +import com.muyu.common.log.annotation.Log; +import com.muyu.common.log.enums.BusinessType; +import com.muyu.common.security.annotation.RequiresPermissions; +import com.muyu.common.security.utils.SecurityUtils; +import com.muyu.common.system.domain.SysDictData; +import com.muyu.system.service.SysDictDataService; +import com.muyu.system.service.SysDictTypeService; +import jakarta.servlet.http.HttpServletResponse; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.ArrayList; +import java.util.List; + +/** + * 数据字典信息 + * + * @author muyu + */ +@RestController +@RequestMapping("/dict/data") +public class SysDictDataController extends BaseController { + @Autowired + private SysDictDataService dictDataService; + + @Autowired + private SysDictTypeService dictTypeService; + + @RequiresPermissions("system:dict:list") + @GetMapping("/list") + public Result> list (SysDictData dictData) { + startPage(); + List list = dictDataService.selectDictDataList(dictData); + return getDataTable(list); + } + + @Log(title = "字典数据", businessType = BusinessType.EXPORT) + @RequiresPermissions("system:dict:export") + @PostMapping("/export") + public void export (HttpServletResponse response, SysDictData dictData) { + List list = dictDataService.selectDictDataList(dictData); + ExcelUtil util = new ExcelUtil(SysDictData.class); + util.exportExcel(response, list, "字典数据"); + } + + /** + * 查询字典数据详细 + */ + @RequiresPermissions("system:dict:query") + @GetMapping(value = "/{dictCode}") + public Result getInfo (@PathVariable("dictCode") Long dictCode) { + return success(dictDataService.selectDictDataById(dictCode)); + } + + /** + * 根据字典类型查询字典数据信息 + */ + @GetMapping(value = "/type/{dictType}") + public Result dictType (@PathVariable("dictType") String dictType) { + List data = dictTypeService.selectDictDataByType(dictType); + if (StringUtils.isNull(data)) { + data = new ArrayList(); + } + return success(data); + } + + /** + * 新增字典类型 + */ + @RequiresPermissions("system:dict:add") + @Log(title = "字典数据", businessType = BusinessType.INSERT) + @PostMapping + public Result add (@Validated @RequestBody SysDictData dict) { + dict.setCreateBy(SecurityUtils.getUsername()); + return toAjax(dictDataService.insertDictData(dict)); + } + + /** + * 修改保存字典类型 + */ + @RequiresPermissions("system:dict:edit") + @Log(title = "字典数据", businessType = BusinessType.UPDATE) + @PutMapping + public Result edit (@Validated @RequestBody SysDictData dict) { + dict.setUpdateBy(SecurityUtils.getUsername()); + return toAjax(dictDataService.updateDictData(dict)); + } + + /** + * 删除字典类型 + */ + @RequiresPermissions("system:dict:remove") + @Log(title = "字典类型", businessType = BusinessType.DELETE) + @DeleteMapping("/{dictCodes}") + public Result remove (@PathVariable("dictCode") Long[] dictCodes) { + dictDataService.deleteDictDataByIds(dictCodes); + return success(); + } +} diff --git a/cloud-system-server/src/main/java/com/muyu/system/controller/SysDictTypeController.java b/cloud-system-server/src/main/java/com/muyu/system/controller/SysDictTypeController.java new file mode 100644 index 0000000..2baf866 --- /dev/null +++ b/cloud-system-server/src/main/java/com/muyu/system/controller/SysDictTypeController.java @@ -0,0 +1,115 @@ +package com.muyu.system.controller; + +import com.muyu.common.core.domain.Result; +import com.muyu.common.core.utils.poi.ExcelUtil; +import com.muyu.common.core.web.controller.BaseController; +import com.muyu.common.core.web.page.TableDataInfo; +import com.muyu.common.log.annotation.Log; +import com.muyu.common.log.enums.BusinessType; +import com.muyu.common.security.annotation.RequiresPermissions; +import com.muyu.common.security.utils.SecurityUtils; +import com.muyu.common.system.domain.SysDictType; +import com.muyu.system.service.SysDictTypeService; +import jakarta.servlet.http.HttpServletResponse; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 数据字典信息 + * + * @author muyu + */ +@RestController +@RequestMapping("/dict/type") +public class SysDictTypeController extends BaseController { + @Autowired + private SysDictTypeService dictTypeService; + + @RequiresPermissions("system:dict:list") + @GetMapping("/list") + public Result> list (SysDictType dictType) { + startPage(); + List list = dictTypeService.selectDictTypeList(dictType); + return getDataTable(list); + } + + @Log(title = "字典类型", businessType = BusinessType.EXPORT) + @RequiresPermissions("system:dict:export") + @PostMapping("/export") + public void export (HttpServletResponse response, SysDictType dictType) { + List list = dictTypeService.selectDictTypeList(dictType); + ExcelUtil util = new ExcelUtil(SysDictType.class); + util.exportExcel(response, list, "字典类型"); + } + + /** + * 查询字典类型详细 + */ + @RequiresPermissions("system:dict:query") + @GetMapping(value = "/{dictId}") + public Result getInfo (@PathVariable("dictId") Long dictId) { + return success(dictTypeService.selectDictTypeById(dictId)); + } + + /** + * 新增字典类型 + */ + @RequiresPermissions("system:dict:add") + @Log(title = "字典类型", businessType = BusinessType.INSERT) + @PostMapping + public Result add (@Validated @RequestBody SysDictType dict) { + if (!dictTypeService.checkDictTypeUnique(dict)) { + return error("新增字典'" + dict.getDictName() + "'失败,字典类型已存在"); + } + dict.setCreateBy(SecurityUtils.getUsername()); + return toAjax(dictTypeService.insertDictType(dict)); + } + + /** + * 修改字典类型 + */ + @RequiresPermissions("system:dict:edit") + @Log(title = "字典类型", businessType = BusinessType.UPDATE) + @PutMapping + public Result edit (@Validated @RequestBody SysDictType dict) { + if (!dictTypeService.checkDictTypeUnique(dict)) { + return error("修改字典'" + dict.getDictName() + "'失败,字典类型已存在"); + } + dict.setUpdateBy(SecurityUtils.getUsername()); + return toAjax(dictTypeService.updateDictType(dict)); + } + + /** + * 删除字典类型 + */ + @RequiresPermissions("system:dict:remove") + @Log(title = "字典类型", businessType = BusinessType.DELETE) + @DeleteMapping("/{dictIds}") + public Result remove (@PathVariable("dictIds") Long[] dictIds) { + dictTypeService.deleteDictTypeByIds(dictIds); + return success(); + } + + /** + * 刷新字典缓存 + */ + @RequiresPermissions("system:dict:remove") + @Log(title = "字典类型", businessType = BusinessType.CLEAN) + @DeleteMapping("/refreshCache") + public Result refreshCache () { + dictTypeService.resetDictCache(); + return success(); + } + + /** + * 获取字典选择框列表 + */ + @GetMapping("/optionselect") + public Result optionselect () { + List dictTypes = dictTypeService.selectDictTypeAll(); + return success(dictTypes); + } +} diff --git a/cloud-system-server/src/main/java/com/muyu/system/controller/SysLogininforController.java b/cloud-system-server/src/main/java/com/muyu/system/controller/SysLogininforController.java new file mode 100644 index 0000000..1c85355 --- /dev/null +++ b/cloud-system-server/src/main/java/com/muyu/system/controller/SysLogininforController.java @@ -0,0 +1,80 @@ +package com.muyu.system.controller; + +import com.muyu.common.core.constant.CacheConstants; +import com.muyu.common.core.domain.Result; +import com.muyu.common.core.utils.poi.ExcelUtil; +import com.muyu.common.core.web.controller.BaseController; +import com.muyu.common.core.web.page.TableDataInfo; +import com.muyu.common.log.annotation.Log; +import com.muyu.common.log.enums.BusinessType; +import com.muyu.common.redis.service.RedisService; +import com.muyu.common.security.annotation.InnerAuth; +import com.muyu.common.security.annotation.RequiresPermissions; +import com.muyu.common.system.domain.SysLogininfor; +import com.muyu.system.service.SysLogininforService; +import jakarta.servlet.http.HttpServletResponse; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 系统访问记录 + * + * @author muyu + */ +@RestController +@RequestMapping("/logininfor") +public class SysLogininforController extends BaseController { + @Autowired + private SysLogininforService logininforService; + + @Autowired + private RedisService redisService; + + @RequiresPermissions("system:logininfor:list") + @GetMapping("/list") + public Result> list (SysLogininfor logininfor) { + startPage(); + List list = logininforService.selectLogininforList(logininfor); + return getDataTable(list); + } + + @Log(title = "登录日志", businessType = BusinessType.EXPORT) + @RequiresPermissions("system:logininfor:export") + @PostMapping("/export") + public void export (HttpServletResponse response, SysLogininfor logininfor) { + List list = logininforService.selectLogininforList(logininfor); + ExcelUtil util = new ExcelUtil(SysLogininfor.class); + util.exportExcel(response, list, "登录日志"); + } + + @RequiresPermissions("system:logininfor:remove") + @Log(title = "登录日志", businessType = BusinessType.DELETE) + @DeleteMapping("/{infoIds}") + public Result remove (@PathVariable("infoIds") Long[] infoIds) { + return toAjax(logininforService.deleteLogininforByIds(infoIds)); + } + + @RequiresPermissions("system:logininfor:remove") + @Log(title = "登录日志", businessType = BusinessType.DELETE) + @DeleteMapping("/clean") + public Result clean () { + logininforService.cleanLogininfor(); + return success(); + } + + @RequiresPermissions("system:logininfor:unlock") + @Log(title = "账户解锁", businessType = BusinessType.OTHER) + @GetMapping("/unlock/{userName}") + public Result unlock (@PathVariable("userName") String userName) { + redisService.deleteObject(CacheConstants.PWD_ERR_CNT_KEY + userName); + return success(); + } + + @InnerAuth + @PostMapping + public Result add (@RequestBody SysLogininfor logininfor) { + return toAjax(logininforService.insertLogininfor(logininfor)); + } +} diff --git a/cloud-system-server/src/main/java/com/muyu/system/controller/SysMenuController.java b/cloud-system-server/src/main/java/com/muyu/system/controller/SysMenuController.java new file mode 100644 index 0000000..be71291 --- /dev/null +++ b/cloud-system-server/src/main/java/com/muyu/system/controller/SysMenuController.java @@ -0,0 +1,137 @@ +package com.muyu.system.controller; + +import com.muyu.common.core.constant.UserConstants; +import com.muyu.common.core.domain.Result; +import com.muyu.common.core.utils.StringUtils; +import com.muyu.common.core.web.controller.BaseController; +import com.muyu.common.log.annotation.Log; +import com.muyu.common.log.enums.BusinessType; +import com.muyu.common.security.annotation.RequiresPermissions; +import com.muyu.common.security.utils.SecurityUtils; +import com.muyu.system.domain.SysMenu; +import com.muyu.system.domain.resp.RoleMenuTreeResp; +import com.muyu.system.service.SysMenuService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 菜单信息 + * + * @author muyu + */ +@RestController +@RequestMapping("/menu") +public class SysMenuController extends BaseController { + @Autowired + private SysMenuService menuService; + + /** + * 获取菜单列表 + */ + @RequiresPermissions("system:menu:list") + @GetMapping("/list") + public Result list (SysMenu menu) { + Long userId = SecurityUtils.getUserId(); + List menus = menuService.selectMenuList(menu, userId); + return success(menus); + } + + /** + * 根据菜单编号获取详细信息 + */ + @RequiresPermissions("system:menu:query") + @GetMapping(value = "/{menuId}") + public Result getInfo (@PathVariable("menuId") Long menuId) { + return success(menuService.selectMenuById(menuId)); + } + + /** + * 获取菜单下拉树列表 + */ + @GetMapping("/treeselect") + public Result treeselect (SysMenu menu) { + Long userId = SecurityUtils.getUserId(); + List menus = menuService.selectMenuList(menu, userId); + return success(menuService.buildMenuTreeSelect(menus)); + } + + /** + * 加载对应角色菜单列表树 + */ + @GetMapping(value = "/roleMenuTreeselect/{roleId}") + public Result roleMenuTreeselect (@PathVariable("roleId") Long roleId) { + Long userId = SecurityUtils.getUserId(); + List menus = menuService.selectMenuList(userId); + return Result.success( + RoleMenuTreeResp.builder() + .menus(menuService.buildMenuTreeSelect(menus)) + .checkedKeys(menuService.selectMenuListByRoleId(roleId)) + .build() + ); + } + + /** + * 新增菜单 + */ + @RequiresPermissions("system:menu:add") + @Log(title = "菜单管理", businessType = BusinessType.INSERT) + @PostMapping + public Result add (@Validated @RequestBody SysMenu menu) { + if (!menuService.checkMenuNameUnique(menu)) { + return error("新增菜单'" + menu.getMenuName() + "'失败,菜单名称已存在"); + } else if (UserConstants.YES_FRAME.equals(menu.getIsFrame()) && !StringUtils.ishttp(menu.getPath())) { + return error("新增菜单'" + menu.getMenuName() + "'失败,地址必须以http(s)://开头"); + } + menu.setCreateBy(SecurityUtils.getUsername()); + return toAjax(menuService.insertMenu(menu)); + } + + /** + * 修改菜单 + */ + @RequiresPermissions("system:menu:edit") + @Log(title = "菜单管理", businessType = BusinessType.UPDATE) + @PutMapping + public Result edit (@Validated @RequestBody SysMenu menu) { + if (!menuService.checkMenuNameUnique(menu)) { + return error("修改菜单'" + menu.getMenuName() + "'失败,菜单名称已存在"); + } else if (UserConstants.YES_FRAME.equals(menu.getIsFrame()) && !StringUtils.ishttp(menu.getPath())) { + return error("修改菜单'" + menu.getMenuName() + "'失败,地址必须以http(s)://开头"); + } else if (menu.getMenuId().equals(menu.getParentId())) { + return error("修改菜单'" + menu.getMenuName() + "'失败,上级菜单不能选择自己"); + } + menu.setUpdateBy(SecurityUtils.getUsername()); + return toAjax(menuService.updateMenu(menu)); + } + + /** + * 删除菜单 + */ + @RequiresPermissions("system:menu:remove") + @Log(title = "菜单管理", businessType = BusinessType.DELETE) + @DeleteMapping("/{menuId}") + public Result remove (@PathVariable("menuId") Long menuId) { + if (menuService.hasChildByMenuId(menuId)) { + return warn("存在子菜单,不允许删除"); + } + if (menuService.checkMenuExistRole(menuId)) { + return warn("菜单已分配,不允许删除"); + } + return toAjax(menuService.deleteMenuById(menuId)); + } + + /** + * 获取路由信息 + * + * @return 路由信息 + */ + @GetMapping("getRouters") + public Result getRouters () { + Long userId = SecurityUtils.getUserId(); + List menus = menuService.selectMenuTreeByUserId(userId); + return success(menuService.buildMenus(menus)); + } +} diff --git a/cloud-system-server/src/main/java/com/muyu/system/controller/SysNoticeController.java b/cloud-system-server/src/main/java/com/muyu/system/controller/SysNoticeController.java new file mode 100644 index 0000000..a9c1f1d --- /dev/null +++ b/cloud-system-server/src/main/java/com/muyu/system/controller/SysNoticeController.java @@ -0,0 +1,114 @@ +package com.muyu.system.controller; + +import com.muyu.common.core.domain.Result; +import com.muyu.common.core.web.controller.BaseController; +import com.muyu.common.core.web.page.TableDataInfo; +import com.muyu.common.log.annotation.Log; +import com.muyu.common.log.enums.BusinessType; +import com.muyu.common.security.annotation.RequiresPermissions; +import com.muyu.common.security.utils.SecurityUtils; +import com.muyu.system.domain.SysNotice; +import com.muyu.system.domain.resp.UserNoticeRes; +import com.muyu.system.domain.vo.UserNoticeReq; +import com.muyu.system.service.SysNoticeService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 公告 信息操作处理 + * + * @author muyu + */ +@RestController +@RequestMapping("/notice") +public class SysNoticeController extends BaseController { + @Autowired + private SysNoticeService noticeService; + + /** + * 获取通知公告列表 + */ + @RequiresPermissions("system:notice:list") + @GetMapping("/list") + public Result> list (SysNotice notice) { + startPage(); + List list = noticeService.selectNoticeList(notice); + return getDataTable(list); + } + + + @PostMapping("/findNoticeByUserId") + public Result> findNoticeByUserId ( @RequestBody UserNoticeReq notice) { + List list = noticeService.findNoticeByUserId(notice); + return success(list); + } + + @PostMapping("/findNoticeSumByUserId") + public Result findNoticeSumByUserId (@RequestBody UserNoticeReq userNoticeReq) { + + String sum = noticeService.findNoticeSumByUserId(userNoticeReq.getNoticeId()); + return success(sum); + } + + @PostMapping("/findNoticeCountByUserId") + public Result findNoticeCountByUserId (@RequestBody UserNoticeReq userNoticeReq) { + + String sum = noticeService.findNoticeCountByUserId(userNoticeReq.getNoticeId()); + return success(sum); + } + + + + + @PostMapping("/updNoticeStatus") + public Result> updNoticeStatus ( @RequestBody UserNoticeReq notice) { + noticeService.updNoticeStatus(notice.getId()); + return success(); + } + + + + /** + * 根据通知公告编号获取详细信息 + */ + @RequiresPermissions("system:notice:query") + @GetMapping(value = "/{noticeId}") + public Result getInfo (@PathVariable("noticeId") Long noticeId) { + return success(noticeService.selectNoticeById(noticeId)); + } + + /** + * 新增通知公告 + */ + @RequiresPermissions("system:notice:add") + @Log(title = "通知公告", businessType = BusinessType.INSERT) + @PostMapping + public Result add (@Validated @RequestBody SysNotice notice) { + notice.setCreateBy(SecurityUtils.getUsername()); + return toAjax(noticeService.insertNotice(notice)); + } + + /** + * 修改通知公告 + */ + @RequiresPermissions("system:notice:edit") + @Log(title = "通知公告", businessType = BusinessType.UPDATE) + @PutMapping + public Result edit (@Validated @RequestBody SysNotice notice) { + notice.setUpdateBy(SecurityUtils.getUsername()); + return toAjax(noticeService.updateNotice(notice)); + } + + /** + * 删除通知公告 + */ + @RequiresPermissions("system:notice:remove") + @Log(title = "通知公告", businessType = BusinessType.DELETE) + @DeleteMapping("/{noticeIds}") + public Result remove (@PathVariable("noticeIds") Long[] noticeIds) { + return toAjax(noticeService.deleteNoticeByIds(noticeIds)); + } +} diff --git a/cloud-system-server/src/main/java/com/muyu/system/controller/SysOperlogController.java b/cloud-system-server/src/main/java/com/muyu/system/controller/SysOperlogController.java new file mode 100644 index 0000000..667e8e8 --- /dev/null +++ b/cloud-system-server/src/main/java/com/muyu/system/controller/SysOperlogController.java @@ -0,0 +1,67 @@ +package com.muyu.system.controller; + +import com.muyu.common.core.domain.Result; +import com.muyu.common.core.utils.poi.ExcelUtil; +import com.muyu.common.core.web.controller.BaseController; +import com.muyu.common.core.web.page.TableDataInfo; +import com.muyu.common.log.annotation.Log; +import com.muyu.common.log.enums.BusinessType; +import com.muyu.common.security.annotation.InnerAuth; +import com.muyu.common.security.annotation.RequiresPermissions; +import com.muyu.common.system.domain.SysOperLog; +import com.muyu.system.service.SysOperLogService; +import jakarta.servlet.http.HttpServletResponse; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 操作日志记录 + * + * @author muyu + */ +@RestController +@RequestMapping("/operlog") +public class SysOperlogController extends BaseController { + @Autowired + private SysOperLogService operLogService; + + @RequiresPermissions("system:operlog:list") + @GetMapping("/list") + public Result> list (SysOperLog operLog) { + startPage(); + List list = operLogService.selectOperLogList(operLog); + return getDataTable(list); + } + + @Log(title = "操作日志", businessType = BusinessType.EXPORT) + @RequiresPermissions("system:operlog:export") + @PostMapping("/export") + public void export (HttpServletResponse response, SysOperLog operLog) { + List list = operLogService.selectOperLogList(operLog); + ExcelUtil util = new ExcelUtil(SysOperLog.class); + util.exportExcel(response, list, "操作日志"); + } + + @Log(title = "操作日志", businessType = BusinessType.DELETE) + @RequiresPermissions("system:operlog:remove") + @DeleteMapping("/{operIds}") + public Result remove (@PathVariable("operIds") Long[] operIds) { + return toAjax(operLogService.deleteOperLogByIds(operIds)); + } + + @RequiresPermissions("system:operlog:remove") + @Log(title = "操作日志", businessType = BusinessType.CLEAN) + @DeleteMapping("/clean") + public Result clean () { + operLogService.cleanOperLog(); + return success(); + } + + @InnerAuth + @PostMapping + public Result add (@RequestBody SysOperLog operLog) { + return toAjax(operLogService.insertOperlog(operLog)); + } +} diff --git a/cloud-system-server/src/main/java/com/muyu/system/controller/SysPostController.java b/cloud-system-server/src/main/java/com/muyu/system/controller/SysPostController.java new file mode 100644 index 0000000..464c207 --- /dev/null +++ b/cloud-system-server/src/main/java/com/muyu/system/controller/SysPostController.java @@ -0,0 +1,110 @@ +package com.muyu.system.controller; + +import com.muyu.common.core.domain.Result; +import com.muyu.common.core.utils.poi.ExcelUtil; +import com.muyu.common.core.web.controller.BaseController; +import com.muyu.common.core.web.page.TableDataInfo; +import com.muyu.common.log.annotation.Log; +import com.muyu.common.log.enums.BusinessType; +import com.muyu.common.security.annotation.RequiresPermissions; +import com.muyu.common.security.utils.SecurityUtils; +import com.muyu.system.domain.SysPost; +import com.muyu.system.service.SysPostService; +import jakarta.servlet.http.HttpServletResponse; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 岗位信息操作处理 + * + * @author muyu + */ +@RestController +@RequestMapping("/post") +public class SysPostController extends BaseController { + @Autowired + private SysPostService postService; + + /** + * 获取岗位列表 + */ + @RequiresPermissions("system:post:list") + @GetMapping("/list") + public Result> list (SysPost post) { + startPage(); + List list = postService.selectPostList(post); + return getDataTable(list); + } + + @Log(title = "岗位管理", businessType = BusinessType.EXPORT) + @RequiresPermissions("system:post:export") + @PostMapping("/export") + public void export (HttpServletResponse response, SysPost post) { + List list = postService.selectPostList(post); + ExcelUtil util = new ExcelUtil(SysPost.class); + util.exportExcel(response, list, "岗位数据"); + } + + /** + * 根据岗位编号获取详细信息 + */ + @RequiresPermissions("system:post:query") + @GetMapping(value = "/{postId}") + public Result getInfo (@PathVariable("postId") Long postId) { + return success(postService.selectPostById(postId)); + } + + /** + * 新增岗位 + */ + @RequiresPermissions("system:post:add") + @Log(title = "岗位管理", businessType = BusinessType.INSERT) + @PostMapping + public Result add (@Validated @RequestBody SysPost post) { + if (!postService.checkPostNameUnique(post)) { + return error("新增岗位'" + post.getPostName() + "'失败,岗位名称已存在"); + } else if (!postService.checkPostCodeUnique(post)) { + return error("新增岗位'" + post.getPostName() + "'失败,岗位编码已存在"); + } + post.setCreateBy(SecurityUtils.getUsername()); + return toAjax(postService.insertPost(post)); + } + + /** + * 修改岗位 + */ + @RequiresPermissions("system:post:edit") + @Log(title = "岗位管理", businessType = BusinessType.UPDATE) + @PutMapping + public Result edit (@Validated @RequestBody SysPost post) { + if (!postService.checkPostNameUnique(post)) { + return error("修改岗位'" + post.getPostName() + "'失败,岗位名称已存在"); + } else if (!postService.checkPostCodeUnique(post)) { + return error("修改岗位'" + post.getPostName() + "'失败,岗位编码已存在"); + } + post.setUpdateBy(SecurityUtils.getUsername()); + return toAjax(postService.updatePost(post)); + } + + /** + * 删除岗位 + */ + @RequiresPermissions("system:post:remove") + @Log(title = "岗位管理", businessType = BusinessType.DELETE) + @DeleteMapping("/{postIds}") + public Result remove (@PathVariable("postIds") Long[] postIds) { + return toAjax(postService.deletePostByIds(postIds)); + } + + /** + * 获取岗位选择框列表 + */ + @GetMapping("/optionselect") + public Result optionselect () { + List posts = postService.selectPostAll(); + return success(posts); + } +} diff --git a/cloud-system-server/src/main/java/com/muyu/system/controller/SysProfileController.java b/cloud-system-server/src/main/java/com/muyu/system/controller/SysProfileController.java new file mode 100644 index 0000000..d7ebacc --- /dev/null +++ b/cloud-system-server/src/main/java/com/muyu/system/controller/SysProfileController.java @@ -0,0 +1,134 @@ +package com.muyu.system.controller; + +import com.muyu.common.core.domain.Result; +import com.muyu.common.core.utils.StringUtils; +import com.muyu.common.core.utils.file.FileTypeUtils; +import com.muyu.common.core.utils.file.MimeTypeUtils; +import com.muyu.common.core.web.controller.BaseController; +import com.muyu.common.log.annotation.Log; +import com.muyu.common.log.enums.BusinessType; +import com.muyu.common.security.service.TokenService; +import com.muyu.common.security.utils.SecurityUtils; +import com.muyu.common.system.domain.LoginUser; +import com.muyu.common.system.domain.SysFile; +import com.muyu.common.system.domain.SysUser; +import com.muyu.common.system.remote.RemoteFileService; +import com.muyu.system.domain.resp.ProfileResp; +import com.muyu.system.service.SysUserService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import java.util.Arrays; + +/** + * 个人信息 业务处理 + * + * @author muyu + */ +@RestController +@RequestMapping("/user/profile") +public class SysProfileController extends BaseController { + @Autowired + private SysUserService userService; + + @Autowired + private TokenService tokenService; + + @Autowired + private RemoteFileService remoteFileService; + + /** + * 个人信息 + */ + @GetMapping + public Result profile () { + String username = SecurityUtils.getUsername(); + SysUser user = userService.selectUserByUserName(username); + return Result.success( + ProfileResp.builder() + .roleGroup( userService.selectUserRoleGroup(username) ) + .postGroup( userService.selectUserPostGroup(username) ) + .sysUser(user) + .build() + ); + } + + /** + * 修改用户 + */ + @Log(title = "个人信息", businessType = BusinessType.UPDATE) + @PutMapping + public Result updateProfile (@RequestBody SysUser user) { + LoginUser loginUser = SecurityUtils.getLoginUser(); + SysUser currentUser = loginUser.getSysUser(); + currentUser.setNickName(user.getNickName()); + currentUser.setEmail(user.getEmail()); + currentUser.setPhonenumber(user.getPhonenumber()); + currentUser.setSex(user.getSex()); + if (StringUtils.isNotEmpty(user.getPhonenumber()) && !userService.checkPhoneUnique(currentUser)) { + return error("修改用户'" + user.getUserName() + "'失败,手机号码已存在"); + } + if (StringUtils.isNotEmpty(user.getEmail()) && !userService.checkEmailUnique(currentUser)) { + return error("修改用户'" + user.getUserName() + "'失败,邮箱账号已存在"); + } + if (userService.updateUserProfile(currentUser) > 0) { + // 更新缓存用户信息 + tokenService.setLoginUser(loginUser); + return success(); + } + return error("修改个人信息异常,请联系管理员"); + } + + /** + * 重置密码 + */ + @Log(title = "个人信息", businessType = BusinessType.UPDATE) + @PutMapping("/updatePwd") + public Result updatePwd (String oldPassword, String newPassword) { + String username = SecurityUtils.getUsername(); + SysUser user = userService.selectUserByUserName(username); + String password = user.getPassword(); + if (!SecurityUtils.matchesPassword(oldPassword, password)) { + return error("修改密码失败,旧密码错误"); + } + if (SecurityUtils.matchesPassword(newPassword, password)) { + return error("新密码不能与旧密码相同"); + } + if (userService.resetUserPwd(username, SecurityUtils.encryptPassword(newPassword)) > 0) { + // 更新缓存用户密码 + LoginUser loginUser = SecurityUtils.getLoginUser(); + loginUser.getSysUser().setPassword(SecurityUtils.encryptPassword(newPassword)); + tokenService.setLoginUser(loginUser); + return success(); + } + return error("修改密码异常,请联系管理员"); + } + + /** + * 头像上传 + */ + @Log(title = "用户头像", businessType = BusinessType.UPDATE) + @PostMapping("/avatar") + public Result avatar (@RequestParam("avatarfile") MultipartFile file) { + if (!file.isEmpty()) { + LoginUser loginUser = SecurityUtils.getLoginUser(); + String extension = FileTypeUtils.getExtension(file); + if (!StringUtils.equalsAnyIgnoreCase(extension, MimeTypeUtils.IMAGE_EXTENSION)) { + return error("文件格式不正确,请上传" + Arrays.toString(MimeTypeUtils.IMAGE_EXTENSION) + "格式"); + } + Result fileResult = remoteFileService.upload(file); + if (StringUtils.isNull(fileResult) || StringUtils.isNull(fileResult.getData())) { + return error("文件服务异常,请联系管理员"); + } + String url = fileResult.getData().getUrl(); + if (userService.updateUserAvatar(loginUser.getUsername(), url)) { + // 更新缓存用户头像 + loginUser.getSysUser().setAvatar(url); + tokenService.setLoginUser(loginUser); + return Result.success(url); + } + } + return error("上传图片异常,请联系管理员"); + } +} diff --git a/cloud-system-server/src/main/java/com/muyu/system/controller/SysRoleController.java b/cloud-system-server/src/main/java/com/muyu/system/controller/SysRoleController.java new file mode 100644 index 0000000..05bdbe8 --- /dev/null +++ b/cloud-system-server/src/main/java/com/muyu/system/controller/SysRoleController.java @@ -0,0 +1,215 @@ +package com.muyu.system.controller; + +import com.muyu.common.core.domain.Result; +import com.muyu.common.core.utils.poi.ExcelUtil; +import com.muyu.common.core.web.controller.BaseController; +import com.muyu.common.core.web.page.TableDataInfo; +import com.muyu.common.log.annotation.Log; +import com.muyu.common.log.enums.BusinessType; +import com.muyu.common.security.annotation.RequiresPermissions; +import com.muyu.common.security.utils.SecurityUtils; +import com.muyu.common.system.domain.SysDept; +import com.muyu.common.system.domain.SysRole; +import com.muyu.common.system.domain.SysUser; +import com.muyu.system.domain.SysUserRole; +import com.muyu.system.domain.resp.DeptTreeResp; +import com.muyu.system.service.SysDeptService; +import com.muyu.system.service.SysRoleService; +import com.muyu.system.service.SysUserService; +import jakarta.servlet.http.HttpServletResponse; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +/** + * 角色信息 + * + * @author muyu + */ +@RestController +@RequestMapping("/role") +public class SysRoleController extends BaseController { + @Autowired + private SysRoleService roleService; + + @Autowired + private SysUserService userService; + + @Autowired + private SysDeptService deptService; + + @RequiresPermissions("system:role:list") + @GetMapping("/list") + public Result> list (SysRole role) { + startPage(); + List list = roleService.selectRoleList(role); + return getDataTable(list); + } + + @Log(title = "角色管理", businessType = BusinessType.EXPORT) + @RequiresPermissions("system:role:export") + @PostMapping("/export") + public void export (HttpServletResponse response, SysRole role) { + List list = roleService.selectRoleList(role); + ExcelUtil util = new ExcelUtil(SysRole.class); + util.exportExcel(response, list, "角色数据"); + } + + /** + * 根据角色编号获取详细信息 + */ + @RequiresPermissions("system:role:query") + @GetMapping(value = "/{roleId}") + public Result getInfo (@PathVariable("roleId") Long roleId) { + roleService.checkRoleDataScope(roleId); + return success(roleService.selectRoleById(roleId)); + } + + /** + * 新增角色 + */ + @RequiresPermissions("system:role:add") + @Log(title = "角色管理", businessType = BusinessType.INSERT) + @PostMapping + public Result add (@Validated @RequestBody SysRole role) { + if (!roleService.checkRoleNameUnique(role)) { + return error("新增角色'" + role.getRoleName() + "'失败,角色名称已存在"); + } else if (!roleService.checkRoleKeyUnique(role)) { + return error("新增角色'" + role.getRoleName() + "'失败,角色权限已存在"); + } + role.setCreateBy(SecurityUtils.getUsername()); + return toAjax(roleService.insertRole(role)); + + } + + /** + * 修改保存角色 + */ + @RequiresPermissions("system:role:edit") + @Log(title = "角色管理", businessType = BusinessType.UPDATE) + @PutMapping + public Result edit (@Validated @RequestBody SysRole role) { + roleService.checkRoleAllowed(role); + roleService.checkRoleDataScope(role.getRoleId()); + if (!roleService.checkRoleNameUnique(role)) { + return error("修改角色'" + role.getRoleName() + "'失败,角色名称已存在"); + } else if (!roleService.checkRoleKeyUnique(role)) { + return error("修改角色'" + role.getRoleName() + "'失败,角色权限已存在"); + } + role.setUpdateBy(SecurityUtils.getUsername()); + return toAjax(roleService.updateRole(role)); + } + + /** + * 修改保存数据权限 + */ + @RequiresPermissions("system:role:edit") + @Log(title = "角色管理", businessType = BusinessType.UPDATE) + @PutMapping("/dataScope") + public Result dataScope (@RequestBody SysRole role) { + roleService.checkRoleAllowed(role); + roleService.checkRoleDataScope(role.getRoleId()); + return toAjax(roleService.authDataScope(role)); + } + + /** + * 状态修改 + */ + @RequiresPermissions("system:role:edit") + @Log(title = "角色管理", businessType = BusinessType.UPDATE) + @PutMapping("/changeStatus") + public Result changeStatus (@RequestBody SysRole role) { + roleService.checkRoleAllowed(role); + roleService.checkRoleDataScope(role.getRoleId()); + role.setUpdateBy(SecurityUtils.getUsername()); + return toAjax(roleService.updateRoleStatus(role)); + } + + /** + * 删除角色 + */ + @RequiresPermissions("system:role:remove") + @Log(title = "角色管理", businessType = BusinessType.DELETE) + @DeleteMapping("/{roleIds}") + public Result remove (@PathVariable("roleIds") Long[] roleIds) { + return toAjax(roleService.deleteRoleByIds(roleIds)); + } + + /** + * 获取角色选择框列表 + */ + @RequiresPermissions("system:role:query") + @GetMapping("/optionselect") + public Result optionselect () { + return success(roleService.selectRoleAll()); + } + + /** + * 查询已分配用户角色列表 + */ + @RequiresPermissions("system:role:list") + @GetMapping("/authUser/allocatedList") + public Result> allocatedList (SysUser user) { + startPage(); + List list = userService.selectAllocatedList(user); + return getDataTable(list); + } + + /** + * 查询未分配用户角色列表 + */ + @RequiresPermissions("system:role:list") + @GetMapping("/authUser/unallocatedList") + public Result> unallocatedList (SysUser user) { + startPage(); + List list = userService.selectUnallocatedList(user); + return getDataTable(list); + } + + /** + * 取消授权用户 + */ + @RequiresPermissions("system:role:edit") + @Log(title = "角色管理", businessType = BusinessType.GRANT) + @PutMapping("/authUser/cancel") + public Result cancelAuthUser (@RequestBody SysUserRole userRole) { + return toAjax(roleService.deleteAuthUser(userRole)); + } + + /** + * 批量取消授权用户 + */ + @RequiresPermissions("system:role:edit") + @Log(title = "角色管理", businessType = BusinessType.GRANT) + @PutMapping("/authUser/cancelAll") + public Result cancelAuthUserAll (Long roleId, Long[] userIds) { + return toAjax(roleService.deleteAuthUsers(roleId, userIds)); + } + + /** + * 批量选择用户授权 + */ + @RequiresPermissions("system:role:edit") + @Log(title = "角色管理", businessType = BusinessType.GRANT) + @PutMapping("/authUser/selectAll") + public Result selectAuthUserAll (Long roleId, Long[] userIds) { + roleService.checkRoleDataScope(roleId); + return toAjax(roleService.insertAuthUsers(roleId, userIds)); + } + + /** + * 获取对应角色部门树列表 + */ + @RequiresPermissions("system:role:query") + @GetMapping(value = "/deptTree/{roleId}") + public Result deptTree (@PathVariable("roleId") Long roleId) { + return Result.success( + DeptTreeResp.builder() + .depts(deptService.selectDeptTreeList(new SysDept())) + .checkedKeys(deptService.selectDeptListByRoleId(roleId)) + .build() + ); + } +} diff --git a/cloud-system-server/src/main/java/com/muyu/system/controller/SysUserController.java b/cloud-system-server/src/main/java/com/muyu/system/controller/SysUserController.java new file mode 100644 index 0000000..197f531 --- /dev/null +++ b/cloud-system-server/src/main/java/com/muyu/system/controller/SysUserController.java @@ -0,0 +1,303 @@ +package com.muyu.system.controller; + +import com.muyu.common.core.domain.Result; +import com.muyu.common.core.utils.StringUtils; +import com.muyu.common.core.utils.poi.ExcelUtil; +import com.muyu.common.core.web.controller.BaseController; +import com.muyu.common.core.web.page.TableDataInfo; +import com.muyu.common.log.annotation.Log; +import com.muyu.common.log.enums.BusinessType; +import com.muyu.common.redis.service.RedisService; +import com.muyu.common.security.annotation.InnerAuth; +import com.muyu.common.security.annotation.RequiresPermissions; +import com.muyu.common.security.utils.SecurityUtils; +import com.muyu.common.system.domain.LoginUser; +import com.muyu.common.system.domain.SysDept; +import com.muyu.common.system.domain.SysRole; +import com.muyu.common.system.domain.SysUser; +import com.muyu.system.domain.resp.AuthRoleResp; +import com.muyu.system.domain.resp.UserDetailInfoResp; +import com.muyu.system.domain.resp.UserInfoResp; +import com.muyu.system.service.*; +import jakarta.servlet.http.HttpServletResponse; +import org.apache.commons.lang3.ArrayUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; + +import java.io.IOException; +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; + +/** + * 用户信息 + * + * @author muyu + */ +@RestController +@RequestMapping("/user") +public class SysUserController extends BaseController { + @Autowired + private SysUserService userService; + + @Autowired + private SysRoleService roleService; + + @Autowired + private SysDeptService deptService; + + @Autowired + private SysPostService postService; + + @Autowired + private SysPermissionService permissionService; + + @Autowired + private SysConfigService configService; + @Autowired + private RedisService redisService; + + /** + * 获取用户列表 + */ + @RequiresPermissions("system:user:list") + @GetMapping("/list") + public Result> list (SysUser user) { + startPage(); + List list = userService.selectUserList(user); + return getDataTable(list); + } + + @Log(title = "用户管理", businessType = BusinessType.EXPORT) + @RequiresPermissions("system:user:export") + @PostMapping("/export") + public void export (HttpServletResponse response, SysUser user) { + List list = userService.selectUserList(user); + ExcelUtil util = new ExcelUtil(SysUser.class); + util.exportExcel(response, list, "用户数据"); + } + + @Log(title = "用户管理", businessType = BusinessType.IMPORT) + @RequiresPermissions("system:user:import") + @PostMapping("/importData") + public Result importData (MultipartFile file, boolean updateSupport) throws Exception { + ExcelUtil util = new ExcelUtil(SysUser.class); + List userList = util.importExcel(file.getInputStream()); + String operName = SecurityUtils.getUsername(); + String message = userService.importUser(userList, updateSupport, operName); + return success(message); + } + + @PostMapping("/importTemplate") + public void importTemplate (HttpServletResponse response) throws IOException { + ExcelUtil util = new ExcelUtil(SysUser.class); + util.importTemplateExcel(response, "用户数据"); + } + + /** + * 获取当前用户信息 + */ + @InnerAuth + @GetMapping("/info/{username}") + public Result info (@PathVariable("username") String username) { + + SysUser sysUser = userService.selectUserByUserName(username); + + + + if (StringUtils.isNull(sysUser)) { + + return Result.error("用户名或密码错误"); + } + // 角色集合 + Set roles = permissionService.getRolePermission(sysUser); + // 权限集合 + Set permissions = permissionService.getMenuPermission(sysUser); + LoginUser sysUserVo = new LoginUser(); + sysUserVo.setSysUser(sysUser); + sysUserVo.setRoles(roles); + sysUserVo.setPermissions(permissions); + return Result.success(sysUserVo); + } + + /** + * 注册用户信息 + */ + @InnerAuth + @PostMapping("/register") + public Result register (@RequestBody SysUser sysUser) { + String username = sysUser.getUserName(); + if (!("true".equals(configService.selectConfigByKey("sys.account.registerUser")))) { + return Result.error("当前系统没有开启注册功能!"); + } + if (!userService.checkUserNameUnique(sysUser)) { + return Result.error("保存用户'" + username + "'失败,注册账号已存在"); + } + return Result.success(userService.registerUser(sysUser)); + } + + /** + * 获取用户信息 + * + * @return 用户信息 + */ + @GetMapping("getInfo") + public Result getInfo () { + SysUser user = userService.selectUserById(SecurityUtils.getUserId()); + // 角色集合 + Set roles = permissionService.getRolePermission(user); + // 权限集合 + Set permissions = permissionService.getMenuPermission(user); + + return Result.success( + UserInfoResp.builder() + .user(user) + .roles(roles) + .permissions(permissions) + .build() + ); + } + + /** + * 根据用户编号获取详细信息 + */ + @RequiresPermissions("system:user:query") + @GetMapping(value = {"/", "/{userId}"}) + public Result getInfo (@PathVariable(value = "userId", required = false) Long userId) { + userService.checkUserDataScope(userId); + UserDetailInfoResp.UserDetailInfoRespBuilder builder = UserDetailInfoResp.builder(); + List roles = roleService.selectRoleAll(); + builder.roles( + SysUser.isAdmin(userId) ? roles : roles.stream().filter(r -> !r.isAdmin()).collect(Collectors.toList()) + ) + .posts( postService.selectPostAll() ); + if (StringUtils.isNotNull(userId)) { + SysUser sysUser = userService.selectUserById(userId); + builder.sysUser(sysUser) + .postIds(postService.selectPostListByUserId(userId)) + .roleIds(sysUser.getRoles().stream().map(SysRole::getRoleId).collect(Collectors.toList())) + .build(); + } + return Result.success(builder.build()); + } + + /** + * 新增用户 + */ + @RequiresPermissions("system:user:add") + @Log(title = "用户管理", businessType = BusinessType.INSERT) + @PostMapping + public Result add (@Validated @RequestBody SysUser user) { + if (!userService.checkUserNameUnique(user)) { + return error("新增用户'" + user.getUserName() + "'失败,登录账号已存在"); + } else if (StringUtils.isNotEmpty(user.getPhonenumber()) && !userService.checkPhoneUnique(user)) { + return error("新增用户'" + user.getUserName() + "'失败,手机号码已存在"); + } else if (StringUtils.isNotEmpty(user.getEmail()) && !userService.checkEmailUnique(user)) { + return error("新增用户'" + user.getUserName() + "'失败,邮箱账号已存在"); + } + user.setCreateBy(SecurityUtils.getUsername()); + user.setPassword(SecurityUtils.encryptPassword(user.getPassword())); + return toAjax(userService.insertUser(user)); + } + + /** + * 修改用户 + */ + @RequiresPermissions("system:user:edit") + @Log(title = "用户管理", businessType = BusinessType.UPDATE) + @PutMapping + public Result edit (@Validated @RequestBody SysUser user) { + userService.checkUserAllowed(user); + userService.checkUserDataScope(user.getUserId()); + if (!userService.checkUserNameUnique(user)) { + return error("修改用户'" + user.getUserName() + "'失败,登录账号已存在"); + } else if (StringUtils.isNotEmpty(user.getPhonenumber()) && !userService.checkPhoneUnique(user)) { + return error("修改用户'" + user.getUserName() + "'失败,手机号码已存在"); + } else if (StringUtils.isNotEmpty(user.getEmail()) && !userService.checkEmailUnique(user)) { + return error("修改用户'" + user.getUserName() + "'失败,邮箱账号已存在"); + } + user.setUpdateBy(SecurityUtils.getUsername()); + return toAjax(userService.updateUser(user)); + } + + /** + * 删除用户 + */ + @RequiresPermissions("system:user:remove") + @Log(title = "用户管理", businessType = BusinessType.DELETE) + @DeleteMapping("/{userIds}") + public Result remove (@PathVariable("userIds") Long[] userIds) { + if (ArrayUtils.contains(userIds, SecurityUtils.getUserId())) { + return error("当前用户不能删除"); + } + return toAjax(userService.deleteUserByIds(userIds)); + } + + /** + * 重置密码 + */ + @RequiresPermissions("system:user:edit") + @Log(title = "用户管理", businessType = BusinessType.UPDATE) + @PutMapping("/resetPwd") + public Result resetPwd (@RequestBody SysUser user) { + userService.checkUserAllowed(user); + userService.checkUserDataScope(user.getUserId()); + user.setPassword(SecurityUtils.encryptPassword(user.getPassword())); + user.setUpdateBy(SecurityUtils.getUsername()); + + return toAjax(userService.resetPwd(user,SecurityUtils.getUserId())); + } + + + /** + * 状态修改 + */ + @RequiresPermissions("system:user:edit") + @Log(title = "用户管理", businessType = BusinessType.UPDATE) + @PutMapping("/changeStatus") + public Result changeStatus (@RequestBody SysUser user) { + userService.checkUserAllowed(user); + userService.checkUserDataScope(user.getUserId()); + user.setUpdateBy(SecurityUtils.getUsername()); + return toAjax(userService.updateUserStatus(user)); + } + + /** + * 根据用户编号获取授权角色 + */ + @RequiresPermissions("system:user:query") + @GetMapping("/authRole/{userId}") + public Result authRole (@PathVariable("userId") Long userId) { + SysUser user = userService.selectUserById(userId); + List roles = roleService.selectRolesByUserId(userId); + return Result.success( + AuthRoleResp.builder() + .roles(SysUser.isAdmin(userId) ? roles : roles.stream().filter(r -> !r.isAdmin()).collect(Collectors.toList())) + .user(user) + .build() + ); + } + + /** + * 用户授权角色 + */ + @RequiresPermissions("system:user:edit") + @Log(title = "用户管理", businessType = BusinessType.GRANT) + @PutMapping("/authRole") + public Result insertAuthRole (Long userId, Long[] roleIds) { + userService.checkUserDataScope(userId); + userService.insertUserAuth(userId, roleIds); + return success(); + } + + /** + * 获取部门树列表 + */ + @RequiresPermissions("system:user:list") + @GetMapping("/deptTree") + public Result deptTree (SysDept dept) { + return success(deptService.selectDeptTreeList(dept)); + } +} diff --git a/cloud-system-server/src/main/java/com/muyu/system/controller/SysUserOnlineController.java b/cloud-system-server/src/main/java/com/muyu/system/controller/SysUserOnlineController.java new file mode 100644 index 0000000..c1848bf --- /dev/null +++ b/cloud-system-server/src/main/java/com/muyu/system/controller/SysUserOnlineController.java @@ -0,0 +1,70 @@ +package com.muyu.system.controller; + +import com.muyu.common.core.constant.CacheConstants; +import com.muyu.common.core.domain.Result; +import com.muyu.common.core.utils.StringUtils; +import com.muyu.common.core.web.controller.BaseController; +import com.muyu.common.core.web.page.TableDataInfo; +import com.muyu.common.log.annotation.Log; +import com.muyu.common.log.enums.BusinessType; +import com.muyu.common.redis.service.RedisService; +import com.muyu.common.security.annotation.RequiresPermissions; +import com.muyu.common.system.domain.LoginUser; +import com.muyu.system.domain.Query; +import com.muyu.system.domain.SysUserOnline; +import com.muyu.system.service.SysUserOnlineService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.List; + +/** + * 在线用户监控 + * + * @author muyu + */ +@RestController +@RequestMapping("/online") +public class SysUserOnlineController extends BaseController { + @Autowired + private SysUserOnlineService userOnlineService; + + @Autowired + private RedisService redisService; + + @RequiresPermissions("monitor:online:list") + @PostMapping("/list") + public Result> list (@RequestBody Query query) { + Collection keys = redisService.keys(CacheConstants.LOGIN_TOKEN_KEY + "*"); + List userOnlineList = new ArrayList(); + for (String key : keys) { + LoginUser user = redisService.getCacheObject(key); + if (StringUtils.isNotEmpty(query.getIpaddr()) && StringUtils.isNotEmpty(query.getUserName())) { + userOnlineList.add(userOnlineService.selectOnlineByInfo(query.getIpaddr(), query.getUserName(), user)); + } else if (StringUtils.isNotEmpty(query.getIpaddr())) { + userOnlineList.add(userOnlineService.selectOnlineByIpaddr(query.getIpaddr(), user)); + } else if (StringUtils.isNotEmpty(query.getUserName())) { + userOnlineList.add(userOnlineService.selectOnlineByUserName(query.getUserName(), user)); + } else { + userOnlineList.add(userOnlineService.loginUserToUserOnline(user)); + } + } + Collections.reverse(userOnlineList); + userOnlineList.removeAll(Collections.singleton(null)); + return getDataTable(userOnlineList); + } + + /** + * 强退用户 + */ + @RequiresPermissions("monitor:online:forceLogout") + @Log(title = "在线用户", businessType = BusinessType.FORCE) + @DeleteMapping("/{tokenId}") + public Result forceLogout (@PathVariable("tokenId") String tokenId) { + redisService.deleteObject(CacheConstants.LOGIN_TOKEN_KEY + tokenId); + return success(); + } +} diff --git a/cloud-system-server/src/main/java/com/muyu/system/domain/Query.java b/cloud-system-server/src/main/java/com/muyu/system/domain/Query.java new file mode 100644 index 0000000..e995c0e --- /dev/null +++ b/cloud-system-server/src/main/java/com/muyu/system/domain/Query.java @@ -0,0 +1,10 @@ +package com.muyu.system.domain; + +import lombok.Data; + +@Data +public class Query { + + private String ipaddr; + private String userName; +} diff --git a/cloud-system-server/src/main/java/com/muyu/system/domain/SysConfig.java b/cloud-system-server/src/main/java/com/muyu/system/domain/SysConfig.java new file mode 100644 index 0000000..50a534f --- /dev/null +++ b/cloud-system-server/src/main/java/com/muyu/system/domain/SysConfig.java @@ -0,0 +1,80 @@ +package com.muyu.system.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.muyu.common.core.annotation.Excel; +import com.muyu.common.core.annotation.Excel.ColumnType; +import com.muyu.common.core.web.domain.BaseEntity; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.Size; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; + +/** + * 参数配置表 sys_config + * + * @author muyu + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@EqualsAndHashCode(callSuper = true) +@TableName("sys_config") +public class SysConfig extends BaseEntity { + private static final long serialVersionUID = 1L; + + /** + * 参数主键 + */ + @Excel(name = "参数主键", cellType = ColumnType.NUMERIC) + @TableId( type = IdType.AUTO) + private Long configId; + + /** + * 参数名称 + */ + @Excel(name = "参数名称") + private String configName; + + /** + * 参数键名 + */ + @Excel(name = "参数键名") + private String configKey; + + /** + * 参数键值 + */ + @Excel(name = "参数键值") + private String configValue; + + /** + * 系统内置(Y是 N否) + */ + @Excel(name = "系统内置", readConverterExp = "Y=是,N=否") + private String configType; + + @NotBlank(message = "参数名称不能为空") + @Size(min = 0, max = 100, message = "参数名称不能超过100个字符") + public String getConfigName () { + return configName; + } + + @NotBlank(message = "参数键名长度不能为空") + @Size(min = 0, max = 100, message = "参数键名长度不能超过100个字符") + public String getConfigKey () { + return configKey; + } + + @NotBlank(message = "参数键值不能为空") + @Size(min = 0, max = 500, message = "参数键值长度不能超过500个字符") + public String getConfigValue () { + return configValue; + } + +} diff --git a/cloud-system-server/src/main/java/com/muyu/system/domain/SysMenu.java b/cloud-system-server/src/main/java/com/muyu/system/domain/SysMenu.java new file mode 100644 index 0000000..b28c0a1 --- /dev/null +++ b/cloud-system-server/src/main/java/com/muyu/system/domain/SysMenu.java @@ -0,0 +1,138 @@ +package com.muyu.system.domain; + +import com.muyu.common.core.web.domain.BaseEntity; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; +import lombok.*; +import lombok.experimental.SuperBuilder; + +import java.util.ArrayList; +import java.util.List; + +/** + * 菜单权限表 sys_menu + * + * @author muyu + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@EqualsAndHashCode(callSuper = true) +public class SysMenu extends BaseEntity { + private static final long serialVersionUID = 1L; + + /** + * 菜单ID + */ + private Long menuId; + + /** + * 菜单名称 + */ + private String menuName; + + /** + * 父菜单名称 + */ + private String parentName; + + /** + * 父菜单ID + */ + private Long parentId; + + /** + * 显示顺序 + */ + private Integer orderNum; + + /** + * 路由地址 + */ + private String path; + + /** + * 组件路径 + */ + private String component; + + /** + * 路由参数 + */ + private String query; + + /** + * 是否为外链(0是 1否) + */ + private String isFrame; + + /** + * 是否缓存(0缓存 1不缓存) + */ + private String isCache; + + /** + * 类型(M目录 C菜单 F按钮) + */ + private String menuType; + + /** + * 显示状态(0显示 1隐藏) + */ + private String visible; + + /** + * 菜单状态(0正常 1停用) + */ + private String status; + + /** + * 权限字符串 + */ + private String perms; + + /** + * 菜单图标 + */ + private String icon; + + /** + * 子菜单 + */ + @Builder.Default + private List children = new ArrayList(); + + @NotBlank(message = "菜单名称不能为空") + @Size(min = 0, max = 50, message = "菜单名称长度不能超过50个字符") + public String getMenuName () { + return menuName; + } + + @NotNull(message = "显示顺序不能为空") + public Integer getOrderNum () { + return orderNum; + } + + @Size(min = 0, max = 200, message = "路由地址不能超过200个字符") + public String getPath () { + return path; + } + + @Size(min = 0, max = 200, message = "组件路径不能超过255个字符") + public String getComponent () { + return component; + } + + @NotBlank(message = "菜单类型不能为空") + public String getMenuType () { + return menuType; + } + + @Size(min = 0, max = 100, message = "权限标识长度不能超过100个字符") + public String getPerms () { + return perms; + } + +} diff --git a/cloud-system-server/src/main/java/com/muyu/system/domain/SysNotice.java b/cloud-system-server/src/main/java/com/muyu/system/domain/SysNotice.java new file mode 100644 index 0000000..2bc2733 --- /dev/null +++ b/cloud-system-server/src/main/java/com/muyu/system/domain/SysNotice.java @@ -0,0 +1,68 @@ +package com.muyu.system.domain; + +import com.muyu.common.core.web.domain.BaseEntity; +import com.muyu.common.core.xss.Xss; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.Size; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; + +/** + * 通知公告表 sys_notice + * + * @author muyu + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@EqualsAndHashCode(callSuper = true) +public class SysNotice extends BaseEntity { + private static final long serialVersionUID = 1L; + + /** + * 公告ID + */ + private Long noticeId; + + /** + * 公告标题 + */ + private String noticeTitle; + + /** + * 公告类型(1通知 2公告) + */ + private String noticeType; + + /** + * 公告内容 + */ + private String noticeContent; + + /** + * 公告状态(0正常 1关闭) + */ + private String status; + + //部门多选 + private Integer[] checkDeptList; + //用户多选 + private Integer[] checkUserList; + //截止时间 + private String endTime; + + + + + + @Xss(message = "公告标题不能包含脚本字符") + @NotBlank(message = "公告标题不能为空") + @Size(min = 0, max = 50, message = "公告标题不能超过50个字符") + public String getNoticeTitle () { + return noticeTitle; + } + } diff --git a/cloud-system-server/src/main/java/com/muyu/system/domain/SysPost.java b/cloud-system-server/src/main/java/com/muyu/system/domain/SysPost.java new file mode 100644 index 0000000..9475106 --- /dev/null +++ b/cloud-system-server/src/main/java/com/muyu/system/domain/SysPost.java @@ -0,0 +1,77 @@ +package com.muyu.system.domain; + +import com.muyu.common.core.annotation.Excel; +import com.muyu.common.core.annotation.Excel.ColumnType; +import com.muyu.common.core.web.domain.BaseEntity; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; +import lombok.*; +import lombok.experimental.SuperBuilder; + +/** + * 岗位表 sys_post + * + * @author muyu + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +@EqualsAndHashCode(callSuper = true) +public class SysPost extends BaseEntity { + private static final long serialVersionUID = 1L; + + /** + * 岗位序号 + */ + @Excel(name = "岗位序号", cellType = ColumnType.NUMERIC) + private Long postId; + + /** + * 岗位编码 + */ + @Excel(name = "岗位编码") + private String postCode; + + /** + * 岗位名称 + */ + @Excel(name = "岗位名称") + private String postName; + + /** + * 岗位排序 + */ + @Excel(name = "岗位排序") + private Integer postSort; + + /** + * 状态(0正常 1停用) + */ + @Excel(name = "状态", readConverterExp = "0=正常,1=停用") + private String status; + + /** + * 用户是否存在此岗位标识 默认不存在 + */ + @Builder.Default + private boolean flag = false; + + @NotBlank(message = "岗位编码不能为空") + @Size(min = 0, max = 64, message = "岗位编码长度不能超过64个字符") + public String getPostCode () { + return postCode; + } + + @NotBlank(message = "岗位名称不能为空") + @Size(min = 0, max = 50, message = "岗位名称长度不能超过50个字符") + public String getPostName () { + return postName; + } + + @NotNull(message = "显示顺序不能为空") + public Integer getPostSort () { + return postSort; + } +} diff --git a/cloud-system-server/src/main/java/com/muyu/system/domain/SysRoleDept.java b/cloud-system-server/src/main/java/com/muyu/system/domain/SysRoleDept.java new file mode 100644 index 0000000..ef9f13c --- /dev/null +++ b/cloud-system-server/src/main/java/com/muyu/system/domain/SysRoleDept.java @@ -0,0 +1,27 @@ +package com.muyu.system.domain; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 角色和部门关联 sys_role_dept + * + * @author muyu + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SysRoleDept { + /** + * 角色ID + */ + private Long roleId; + + /** + * 部门ID + */ + private Long deptId; +} diff --git a/cloud-system-server/src/main/java/com/muyu/system/domain/SysRoleMenu.java b/cloud-system-server/src/main/java/com/muyu/system/domain/SysRoleMenu.java new file mode 100644 index 0000000..fe4074b --- /dev/null +++ b/cloud-system-server/src/main/java/com/muyu/system/domain/SysRoleMenu.java @@ -0,0 +1,28 @@ +package com.muyu.system.domain; + + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 角色和菜单关联 sys_role_menu + * + * @author muyu + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SysRoleMenu { + /** + * 角色ID + */ + private Long roleId; + + /** + * 菜单ID + */ + private Long menuId; +} diff --git a/cloud-system-server/src/main/java/com/muyu/system/domain/SysUserOnline.java b/cloud-system-server/src/main/java/com/muyu/system/domain/SysUserOnline.java new file mode 100644 index 0000000..23d1979 --- /dev/null +++ b/cloud-system-server/src/main/java/com/muyu/system/domain/SysUserOnline.java @@ -0,0 +1,52 @@ +package com.muyu.system.domain; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 当前在线会话 + * + * @author muyu + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SysUserOnline { + /** + * 会话编号 + */ + private String tokenId; + + /** + * 用户名称 + */ + private String userName; + + /** + * 登录IP地址 + */ + private String ipaddr; + + /** + * 登录地址 + */ + private String loginLocation; + + /** + * 浏览器类型 + */ + private String browser; + + /** + * 操作系统 + */ + private String os; + + /** + * 登录时间 + */ + private Long loginTime; +} diff --git a/cloud-system-server/src/main/java/com/muyu/system/domain/SysUserPost.java b/cloud-system-server/src/main/java/com/muyu/system/domain/SysUserPost.java new file mode 100644 index 0000000..229dc70 --- /dev/null +++ b/cloud-system-server/src/main/java/com/muyu/system/domain/SysUserPost.java @@ -0,0 +1,28 @@ +package com.muyu.system.domain; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 用户和岗位关联 sys_user_post + * + * @author muyu + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SysUserPost { + /** + * 用户ID + */ + private Long userId; + + /** + * 岗位ID + */ + private Long postId; + +} diff --git a/cloud-system-server/src/main/java/com/muyu/system/domain/SysUserRole.java b/cloud-system-server/src/main/java/com/muyu/system/domain/SysUserRole.java new file mode 100644 index 0000000..ee9c945 --- /dev/null +++ b/cloud-system-server/src/main/java/com/muyu/system/domain/SysUserRole.java @@ -0,0 +1,27 @@ +package com.muyu.system.domain; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 用户和角色关联 sys_user_role + * + * @author muyu + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class SysUserRole { + /** + * 用户ID + */ + private Long userId; + + /** + * 角色ID + */ + private Long roleId; +} diff --git a/cloud-system-server/src/main/java/com/muyu/system/domain/UserNotice.java b/cloud-system-server/src/main/java/com/muyu/system/domain/UserNotice.java new file mode 100644 index 0000000..5bb2edd --- /dev/null +++ b/cloud-system-server/src/main/java/com/muyu/system/domain/UserNotice.java @@ -0,0 +1,18 @@ +package com.muyu.system.domain; + +import lombok.Data; + +@Data +public class UserNotice { + + private Integer userId; + private String userName; + private String createName; + + private String postName; + + private String deptName; + + + +} diff --git a/cloud-system-server/src/main/java/com/muyu/system/domain/resp/AuthRoleResp.java b/cloud-system-server/src/main/java/com/muyu/system/domain/resp/AuthRoleResp.java new file mode 100644 index 0000000..69294b6 --- /dev/null +++ b/cloud-system-server/src/main/java/com/muyu/system/domain/resp/AuthRoleResp.java @@ -0,0 +1,33 @@ +package com.muyu.system.domain.resp; + + +import com.muyu.common.system.domain.SysRole; +import com.muyu.common.system.domain.SysUser; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; + +import java.util.List; + +/** + * @author DongZl + * @description: 授权角色返回结果集 + * @Date 2023-6-19 下午 02:50 + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +public class AuthRoleResp { + + /** + * 用户信息 + */ + private SysUser user; + + /** + * 角色集合 + */ + private List roles; +} diff --git a/cloud-system-server/src/main/java/com/muyu/system/domain/resp/DeptTreeResp.java b/cloud-system-server/src/main/java/com/muyu/system/domain/resp/DeptTreeResp.java new file mode 100644 index 0000000..cd72807 --- /dev/null +++ b/cloud-system-server/src/main/java/com/muyu/system/domain/resp/DeptTreeResp.java @@ -0,0 +1,32 @@ +package com.muyu.system.domain.resp; + + +import com.muyu.system.domain.vo.TreeSelect; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; + +import java.util.List; + +/** + * @author DongZl + * @description: 部门树返回结果集 + * @Date 2023-6-19 下午 02:52 + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +public class DeptTreeResp { + + /** + * 授权的ID + */ + private List checkedKeys; + + /** + * 部门树 + */ + private List depts; +} diff --git a/cloud-system-server/src/main/java/com/muyu/system/domain/resp/ProfileResp.java b/cloud-system-server/src/main/java/com/muyu/system/domain/resp/ProfileResp.java new file mode 100644 index 0000000..21d9808 --- /dev/null +++ b/cloud-system-server/src/main/java/com/muyu/system/domain/resp/ProfileResp.java @@ -0,0 +1,34 @@ +package com.muyu.system.domain.resp; + +import com.muyu.common.system.domain.SysUser; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; + +/** + * @author DongZl + * @description: 个人信息模型对象 + * @Date 2023-6-19 下午 02:05 + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +public class ProfileResp { + + /** + * 系统用户 + */ + private SysUser sysUser; + + /** + * 用户权限组 + */ + private String roleGroup; + + /** + * 用户岗位组 + */ + private String postGroup; +} diff --git a/cloud-system-server/src/main/java/com/muyu/system/domain/resp/RoleMenuTreeResp.java b/cloud-system-server/src/main/java/com/muyu/system/domain/resp/RoleMenuTreeResp.java new file mode 100644 index 0000000..696763e --- /dev/null +++ b/cloud-system-server/src/main/java/com/muyu/system/domain/resp/RoleMenuTreeResp.java @@ -0,0 +1,31 @@ +package com.muyu.system.domain.resp; + +import com.muyu.system.domain.vo.TreeSelect; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; + +import java.util.List; + +/** + * @author DongZl + * @description: 角色返回菜单树 + * @Date 2023-6-19 下午 02:40 + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +public class RoleMenuTreeResp { + + /** + * 拥有的菜单权限 + */ + private List checkedKeys; + + /** + * 系统所有的菜单 + */ + private List menus; +} diff --git a/cloud-system-server/src/main/java/com/muyu/system/domain/resp/UserDetailInfoResp.java b/cloud-system-server/src/main/java/com/muyu/system/domain/resp/UserDetailInfoResp.java new file mode 100644 index 0000000..4c61832 --- /dev/null +++ b/cloud-system-server/src/main/java/com/muyu/system/domain/resp/UserDetailInfoResp.java @@ -0,0 +1,47 @@ +package com.muyu.system.domain.resp; + +import com.muyu.common.system.domain.SysRole; +import com.muyu.common.system.domain.SysUser; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; + +import java.util.List; + +/** + * @author DongZl + * @description: 用户详细信息 + * @Date 2023-6-19 下午 02:45 + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +public class UserDetailInfoResp { + + /** + * 角色权限集合 + */ + private List roles; + + /** + * 岗位集合 + */ + private List posts; + + /** + * 用户信息 + */ + private SysUser sysUser; + + /** + * 用户又有的职位ID + */ + private List postIds; + + /** + * 用户拥有的角色ID + */ + private List roleIds; +} diff --git a/cloud-system-server/src/main/java/com/muyu/system/domain/resp/UserInfoResp.java b/cloud-system-server/src/main/java/com/muyu/system/domain/resp/UserInfoResp.java new file mode 100644 index 0000000..d15a760 --- /dev/null +++ b/cloud-system-server/src/main/java/com/muyu/system/domain/resp/UserInfoResp.java @@ -0,0 +1,36 @@ +package com.muyu.system.domain.resp; + +import com.muyu.common.system.domain.SysUser; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; + +import java.util.Set; + +/** + * @author DongZl + * @description: 用户信息结果集 + * @Date 2023-6-19 下午 02:42 + */ +@Data +@SuperBuilder +@NoArgsConstructor +@AllArgsConstructor +public class UserInfoResp { + + /** + * 用户 + */ + private SysUser user; + + /** + * 角色集合 + */ + private Set roles; + + /** + * 权限集合 + */ + private Set permissions; +} diff --git a/cloud-system-server/src/main/java/com/muyu/system/domain/resp/UserNoticeRes.java b/cloud-system-server/src/main/java/com/muyu/system/domain/resp/UserNoticeRes.java new file mode 100644 index 0000000..7f5a996 --- /dev/null +++ b/cloud-system-server/src/main/java/com/muyu/system/domain/resp/UserNoticeRes.java @@ -0,0 +1,19 @@ +package com.muyu.system.domain.resp; + +import lombok.Data; + +@Data +public class UserNoticeRes { + + private Integer id; + private Integer noticeId; + private String noticeTitle; + private String createTime; + private String createBy; + private Integer noticeType; + private Integer status; + + + + +} diff --git a/cloud-system-server/src/main/java/com/muyu/system/domain/vo/MetaVo.java b/cloud-system-server/src/main/java/com/muyu/system/domain/vo/MetaVo.java new file mode 100644 index 0000000..c7d5f25 --- /dev/null +++ b/cloud-system-server/src/main/java/com/muyu/system/domain/vo/MetaVo.java @@ -0,0 +1,54 @@ +package com.muyu.system.domain.vo; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +/** + * 路由显示信息 + * + * @author muyu + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class MetaVo { + /** + * 设置该路由在侧边栏和面包屑中展示的名字 + */ + private String title; + + /** + * 设置该路由的图标,对应路径src/assets/icons/svg + */ + private String icon; + + /** + * 设置为true,则不会被 缓存 + */ + private boolean noCache; + + /** + * 内链地址(http(s)://开头) + */ + private String link; + + public MetaVo (String title, String icon) { + this.title = title; + this.icon = icon; + } + + public MetaVo (String title, String icon, boolean noCache) { + this.title = title; + this.icon = icon; + this.noCache = noCache; + } + + public MetaVo (String title, String icon, String link) { + this.title = title; + this.icon = icon; + this.link = link; + } +} diff --git a/cloud-system-server/src/main/java/com/muyu/system/domain/vo/RouterVo.java b/cloud-system-server/src/main/java/com/muyu/system/domain/vo/RouterVo.java new file mode 100644 index 0000000..5f680d0 --- /dev/null +++ b/cloud-system-server/src/main/java/com/muyu/system/domain/vo/RouterVo.java @@ -0,0 +1,61 @@ +package com.muyu.system.domain.vo; + +import com.fasterxml.jackson.annotation.JsonInclude; +import lombok.Data; + +import java.util.List; + +/** + * 路由配置信息 + * + * @author muyu + */ +@Data +@JsonInclude(JsonInclude.Include.NON_EMPTY) +public class RouterVo { + /** + * 路由名字 + */ + private String name; + + /** + * 路由地址 + */ + private String path; + + /** + * 是否隐藏路由,当设置 true 的时候该路由不会再侧边栏出现 + */ + private boolean hidden; + + /** + * 重定向地址,当设置 noRedirect 的时候该路由在面包屑导航中不可被点击 + */ + private String redirect; + + /** + * 组件地址 + */ + private String component; + + /** + * 路由参数:如 {"id": 1, "name": "ry"} + */ + private String query; + + /** + * 当你一个路由下面的 children 声明的路由大于1个时,自动会变成嵌套的模式--如组件页面 + */ + private Boolean alwaysShow; + + /** + * 其他元素 + */ + private MetaVo meta; + + /** + * 子路由 + */ + private List children; + +} diff --git a/cloud-system-server/src/main/java/com/muyu/system/domain/vo/TreeSelect.java b/cloud-system-server/src/main/java/com/muyu/system/domain/vo/TreeSelect.java new file mode 100644 index 0000000..d1ef75f --- /dev/null +++ b/cloud-system-server/src/main/java/com/muyu/system/domain/vo/TreeSelect.java @@ -0,0 +1,56 @@ +package com.muyu.system.domain.vo; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.muyu.common.system.domain.SysDept; +import com.muyu.system.domain.SysMenu; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.io.Serializable; +import java.util.List; +import java.util.stream.Collectors; + +/** + * Treeselect树结构实体类 + * + * @author muyu + */ +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class TreeSelect implements Serializable { + private static final long serialVersionUID = 1L; + + /** + * 节点ID + */ + private Long id; + + /** + * 节点名称 + */ + private String label; + + /** + * 子节点 + */ + @JsonInclude(JsonInclude.Include.NON_EMPTY) + private List children; + + + public TreeSelect (SysDept dept) { + this.id = dept.getDeptId(); + this.label = dept.getDeptName(); + this.children = dept.getChildren().stream().map(TreeSelect::new).collect(Collectors.toList()); + } + + public TreeSelect (SysMenu menu) { + this.id = menu.getMenuId(); + this.label = menu.getMenuName(); + this.children = menu.getChildren().stream().map(TreeSelect::new).collect(Collectors.toList()); + } + +} diff --git a/cloud-system-server/src/main/java/com/muyu/system/domain/vo/UserNoticeReq.java b/cloud-system-server/src/main/java/com/muyu/system/domain/vo/UserNoticeReq.java new file mode 100644 index 0000000..8aae113 --- /dev/null +++ b/cloud-system-server/src/main/java/com/muyu/system/domain/vo/UserNoticeReq.java @@ -0,0 +1,14 @@ +package com.muyu.system.domain.vo; + +import lombok.Data; + +@Data +public class UserNoticeReq { + + private Integer id; + private Long userId; + private String noticeId; + private Integer noticeType; + private Integer status; + +} diff --git a/cloud-system-server/src/main/java/com/muyu/system/mapper/SysConfigMapper.java b/cloud-system-server/src/main/java/com/muyu/system/mapper/SysConfigMapper.java new file mode 100644 index 0000000..ced239a --- /dev/null +++ b/cloud-system-server/src/main/java/com/muyu/system/mapper/SysConfigMapper.java @@ -0,0 +1,12 @@ +package com.muyu.system.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.muyu.system.domain.SysConfig; + +/** + * @author DongZl + * @description: 配置mybatis配置 + * @Date 2023-11-13 上午 10:05 + */ +public interface SysConfigMapper extends BaseMapper { +} diff --git a/cloud-system-server/src/main/java/com/muyu/system/mapper/SysDeptMapper.java b/cloud-system-server/src/main/java/com/muyu/system/mapper/SysDeptMapper.java new file mode 100644 index 0000000..5ef9ab4 --- /dev/null +++ b/cloud-system-server/src/main/java/com/muyu/system/mapper/SysDeptMapper.java @@ -0,0 +1,131 @@ +package com.muyu.system.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.muyu.common.system.domain.SysDept; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 部门管理 数据层 + * + * @author muyu + */ +public interface SysDeptMapper extends BaseMapper { + /** + * 查询部门管理数据 + * + * @param dept 部门信息 + * + * @return 部门信息集合 + */ + public List selectDeptList (SysDept dept); + + /** + * 根据角色ID查询部门树信息 + * + * @param roleId 角色ID + * @param deptCheckStrictly 部门树选择项是否关联显示 + * + * @return 选中部门列表 + */ + public List selectDeptListByRoleId (@Param("roleId") Long roleId, @Param("deptCheckStrictly") boolean deptCheckStrictly); + + /** + * 根据部门ID查询信息 + * + * @param deptId 部门ID + * + * @return 部门信息 + */ + public SysDept selectDeptById (Long deptId); + + /** + * 根据ID查询所有子部门 + * + * @param deptId 部门ID + * + * @return 部门列表 + */ + public List selectChildrenDeptById (Long deptId); + + /** + * 根据ID查询所有子部门(正常状态) + * + * @param deptId 部门ID + * + * @return 子部门数 + */ + public int selectNormalChildrenDeptById (Long deptId); + + /** + * 是否存在子节点 + * + * @param deptId 部门ID + * + * @return 结果 + */ + public int hasChildByDeptId (Long deptId); + + /** + * 查询部门是否存在用户 + * + * @param deptId 部门ID + * + * @return 结果 + */ + public int checkDeptExistUser (Long deptId); + + /** + * 校验部门名称是否唯一 + * + * @param deptName 部门名称 + * @param parentId 父部门ID + * + * @return 结果 + */ + public SysDept checkDeptNameUnique (@Param("deptName") String deptName, @Param("parentId") Long parentId); + + /** + * 新增部门信息 + * + * @param dept 部门信息 + * + * @return 结果 + */ + public int insertDept (SysDept dept); + + /** + * 修改部门信息 + * + * @param dept 部门信息 + * + * @return 结果 + */ + public int updateDept (SysDept dept); + + /** + * 修改所在部门正常状态 + * + * @param deptIds 部门ID组 + */ + public void updateDeptStatusNormal (Long[] deptIds); + + /** + * 修改子元素关系 + * + * @param depts 子元素 + * + * @return 结果 + */ + public int updateDeptChildren (@Param("depts") List depts); + + /** + * 删除部门管理信息 + * + * @param deptId 部门ID + * + * @return 结果 + */ + public int deleteDeptById (Long deptId); +} diff --git a/cloud-system-server/src/main/java/com/muyu/system/mapper/SysDictDataMapper.java b/cloud-system-server/src/main/java/com/muyu/system/mapper/SysDictDataMapper.java new file mode 100644 index 0000000..1e87a7e --- /dev/null +++ b/cloud-system-server/src/main/java/com/muyu/system/mapper/SysDictDataMapper.java @@ -0,0 +1,106 @@ +package com.muyu.system.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.muyu.common.system.domain.SysDictData; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 字典表 数据层 + * + * @author muyu + */ +public interface SysDictDataMapper extends BaseMapper { + /** + * 根据条件分页查询字典数据 + * + * @param dictData 字典数据信息 + * + * @return 字典数据集合信息 + */ + public List selectDictDataList (SysDictData dictData); + + /** + * 根据字典类型查询字典数据 + * + * @param dictType 字典类型 + * + * @return 字典数据集合信息 + */ + public List selectDictDataByType (String dictType); + + /** + * 根据字典类型和字典键值查询字典数据信息 + * + * @param dictType 字典类型 + * @param dictValue 字典键值 + * + * @return 字典标签 + */ + public String selectDictLabel (@Param("dictType") String dictType, @Param("dictValue") String dictValue); + + /** + * 根据字典数据ID查询信息 + * + * @param dictCode 字典数据ID + * + * @return 字典数据 + */ + public SysDictData selectDictDataById (Long dictCode); + + /** + * 查询字典数据 + * + * @param dictType 字典类型 + * + * @return 字典数据 + */ + public int countDictDataByType (String dictType); + + /** + * 通过字典ID删除字典数据信息 + * + * @param dictCode 字典数据ID + * + * @return 结果 + */ + public int deleteDictDataById (Long dictCode); + + /** + * 批量删除字典数据信息 + * + * @param dictCodes 需要删除的字典数据ID + * + * @return 结果 + */ + public int deleteDictDataByIds (Long[] dictCodes); + + /** + * 新增字典数据信息 + * + * @param dictData 字典数据信息 + * + * @return 结果 + */ + public int insertDictData (SysDictData dictData); + + /** + * 修改字典数据信息 + * + * @param dictData 字典数据信息 + * + * @return 结果 + */ + public int updateDictData (SysDictData dictData); + + /** + * 同步修改字典类型 + * + * @param oldDictType 旧字典类型 + * @param newDictType 新旧字典类型 + * + * @return 结果 + */ + public int updateDictDataType (@Param("oldDictType") String oldDictType, @Param("newDictType") String newDictType); +} diff --git a/cloud-system-server/src/main/java/com/muyu/system/mapper/SysDictTypeMapper.java b/cloud-system-server/src/main/java/com/muyu/system/mapper/SysDictTypeMapper.java new file mode 100644 index 0000000..0a4ffe6 --- /dev/null +++ b/cloud-system-server/src/main/java/com/muyu/system/mapper/SysDictTypeMapper.java @@ -0,0 +1,92 @@ +package com.muyu.system.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.muyu.common.system.domain.SysDictType; + +import java.util.List; + +/** + * 字典表 数据层 + * + * @author muyu + */ +public interface SysDictTypeMapper extends BaseMapper { + /** + * 根据条件分页查询字典类型 + * + * @param dictType 字典类型信息 + * + * @return 字典类型集合信息 + */ + public List selectDictTypeList (SysDictType dictType); + + /** + * 根据所有字典类型 + * + * @return 字典类型集合信息 + */ + public List selectDictTypeAll (); + + /** + * 根据字典类型ID查询信息 + * + * @param dictId 字典类型ID + * + * @return 字典类型 + */ + public SysDictType selectDictTypeById (Long dictId); + + /** + * 根据字典类型查询信息 + * + * @param dictType 字典类型 + * + * @return 字典类型 + */ + public SysDictType selectDictTypeByType (String dictType); + + /** + * 通过字典ID删除字典信息 + * + * @param dictId 字典ID + * + * @return 结果 + */ + public int deleteDictTypeById (Long dictId); + + /** + * 批量删除字典类型信息 + * + * @param dictIds 需要删除的字典ID + * + * @return 结果 + */ + public int deleteDictTypeByIds (Long[] dictIds); + + /** + * 新增字典类型信息 + * + * @param dictType 字典类型信息 + * + * @return 结果 + */ + public int insertDictType (SysDictType dictType); + + /** + * 修改字典类型信息 + * + * @param dictType 字典类型信息 + * + * @return 结果 + */ + public int updateDictType (SysDictType dictType); + + /** + * 校验字典类型称是否唯一 + * + * @param dictType 字典类型 + * + * @return 结果 + */ + public SysDictType checkDictTypeUnique (String dictType); +} diff --git a/cloud-system-server/src/main/java/com/muyu/system/mapper/SysLogininforMapper.java b/cloud-system-server/src/main/java/com/muyu/system/mapper/SysLogininforMapper.java new file mode 100644 index 0000000..0f1f86a --- /dev/null +++ b/cloud-system-server/src/main/java/com/muyu/system/mapper/SysLogininforMapper.java @@ -0,0 +1,45 @@ +package com.muyu.system.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.muyu.common.system.domain.SysLogininfor; + +import java.util.List; + +/** + * 系统访问日志情况信息 数据层 + * + * @author muyu + */ +public interface SysLogininforMapper extends BaseMapper { + /** + * 新增系统登录日志 + * + * @param logininfor 访问日志对象 + */ + public int insertLogininfor (SysLogininfor logininfor); + + /** + * 查询系统登录日志集合 + * + * @param logininfor 访问日志对象 + * + * @return 登录记录集合 + */ + public List selectLogininforList (SysLogininfor logininfor); + + /** + * 批量删除系统登录日志 + * + * @param infoIds 需要删除的登录日志ID + * + * @return 结果 + */ + public int deleteLogininforByIds (Long[] infoIds); + + /** + * 清空系统登录日志 + * + * @return 结果 + */ + public int cleanLogininfor (); +} diff --git a/cloud-system-server/src/main/java/com/muyu/system/mapper/SysMenuMapper.java b/cloud-system-server/src/main/java/com/muyu/system/mapper/SysMenuMapper.java new file mode 100644 index 0000000..6ad4481 --- /dev/null +++ b/cloud-system-server/src/main/java/com/muyu/system/mapper/SysMenuMapper.java @@ -0,0 +1,141 @@ +package com.muyu.system.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.muyu.system.domain.SysMenu; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 菜单表 数据层 + * + * @author muyu + */ +public interface SysMenuMapper extends BaseMapper { + /** + * 查询系统菜单列表 + * + * @param menu 菜单信息 + * + * @return 菜单列表 + */ + public List selectMenuList (SysMenu menu); + + /** + * 根据用户所有权限 + * + * @return 权限列表 + */ + public List selectMenuPerms (); + + /** + * 根据用户查询系统菜单列表 + * + * @param menu 菜单信息 + * + * @return 菜单列表 + */ + public List selectMenuListByUserId (SysMenu menu); + + /** + * 根据角色ID查询权限 + * + * @param roleId 角色ID + * + * @return 权限列表 + */ + public List selectMenuPermsByRoleId (Long roleId); + + /** + * 根据用户ID查询权限 + * + * @param userId 用户ID + * + * @return 权限列表 + */ + public List selectMenuPermsByUserId (Long userId); + + /** + * 根据用户ID查询菜单 + * + * @return 菜单列表 + */ + public List selectMenuTreeAll (); + + /** + * 根据用户ID查询菜单 + * + * @param userId 用户ID + * + * @return 菜单列表 + */ + public List selectMenuTreeByUserId (Long userId); + + /** + * 根据角色ID查询菜单树信息 + * + * @param roleId 角色ID + * @param menuCheckStrictly 菜单树选择项是否关联显示 + * + * @return 选中菜单列表 + */ + public List selectMenuListByRoleId (@Param("roleId") Long roleId, @Param("menuCheckStrictly") boolean menuCheckStrictly); + + /** + * 根据菜单ID查询信息 + * + * @param menuId 菜单ID + * + * @return 菜单信息 + */ + public SysMenu selectMenuById (Long menuId); + + /** + * 是否存在菜单子节点 + * + * @param menuId 菜单ID + * + * @return 结果 + */ + public int hasChildByMenuId (Long menuId); + + /** + * 新增菜单信息 + * + * @param menu 菜单信息 + * + * @return 结果 + */ + public int insertMenu (SysMenu menu); + + /** + * 修改菜单信息 + * + * @param menu 菜单信息 + * + * @return 结果 + */ + public int updateMenu (SysMenu menu); + + /** + * 删除菜单管理信息 + * + * @param menuId 菜单ID + * + * @return 结果 + */ + public int deleteMenuById (Long menuId); + + /** + * 校验菜单名称是否唯一 + * + * @param menuName 菜单名称 + * @param parentId 父菜单ID + * + * @return 结果 + */ + public SysMenu checkMenuNameUnique (@Param("menuName") String menuName, @Param("parentId") Long parentId); + + List selectMenuListByParentIds(@Param("menuList") List menuList); + +} diff --git a/cloud-system-server/src/main/java/com/muyu/system/mapper/SysNoticeMapper.java b/cloud-system-server/src/main/java/com/muyu/system/mapper/SysNoticeMapper.java new file mode 100644 index 0000000..ae4e1ca --- /dev/null +++ b/cloud-system-server/src/main/java/com/muyu/system/mapper/SysNoticeMapper.java @@ -0,0 +1,81 @@ +package com.muyu.system.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.muyu.system.domain.SysNotice; +import com.muyu.system.domain.resp.UserNoticeRes; +import com.muyu.system.domain.vo.UserNoticeReq; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 通知公告表 数据层 + * + * @author muyu + */ +public interface SysNoticeMapper extends BaseMapper { + /** + * 查询公告信息 + * + * @param noticeId 公告ID + * + * @return 公告信息 + */ + public SysNotice selectNoticeById (Long noticeId); + + /** + * 查询公告列表 + * + * @param notice 公告信息 + * + * @return 公告集合 + */ + public List selectNoticeList (SysNotice notice); + + /** + * 新增公告 + * + * @param notice 公告信息 + * + * @return 结果 + */ + public int insertNotice (SysNotice notice); + + /** + * 修改公告 + * + * @param notice 公告信息 + * + * @return 结果 + */ + public int updateNotice (SysNotice notice); + + /** + * 批量删除公告 + * + * @param noticeId 公告ID + * + * @return 结果 + */ + public int deleteNoticeById (Long noticeId); + + /** + * 批量删除公告信息 + * + * @param noticeIds 需要删除的公告ID + * + * @return 结果 + */ + public int deleteNoticeByIds (Long[] noticeIds); + + void addUserNotice(@Param("list") List list, @Param("noticeId") Long noticeId, @Param("endTime") String endTime); + + List findNoticeByUserId(UserNoticeReq notice); + + void updNoticeStatus(@Param("id") Integer id); + + String findNoticeSumByUserId(@Param("noticeId") String noticeId); + + String findNoticeCountByUserId(@Param("noticeId") String noticeId); + +} diff --git a/cloud-system-server/src/main/java/com/muyu/system/mapper/SysOperLogMapper.java b/cloud-system-server/src/main/java/com/muyu/system/mapper/SysOperLogMapper.java new file mode 100644 index 0000000..6ea1bcd --- /dev/null +++ b/cloud-system-server/src/main/java/com/muyu/system/mapper/SysOperLogMapper.java @@ -0,0 +1,52 @@ +package com.muyu.system.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.muyu.common.system.domain.SysOperLog; + +import java.util.List; + +/** + * 操作日志 数据层 + * + * @author muyu + */ +public interface SysOperLogMapper extends BaseMapper { + /** + * 新增操作日志 + * + * @param operLog 操作日志对象 + */ + public int insertOperlog (SysOperLog operLog); + + /** + * 查询系统操作日志集合 + * + * @param operLog 操作日志对象 + * + * @return 操作日志集合 + */ + public List selectOperLogList (SysOperLog operLog); + + /** + * 批量删除系统操作日志 + * + * @param operIds 需要删除的操作日志ID + * + * @return 结果 + */ + public int deleteOperLogByIds (Long[] operIds); + + /** + * 查询操作日志详细 + * + * @param operId 操作ID + * + * @return 操作日志对象 + */ + public SysOperLog selectOperLogById (Long operId); + + /** + * 清空操作日志 + */ + public void cleanOperLog (); +} diff --git a/cloud-system-server/src/main/java/com/muyu/system/mapper/SysPostMapper.java b/cloud-system-server/src/main/java/com/muyu/system/mapper/SysPostMapper.java new file mode 100644 index 0000000..4bfd66d --- /dev/null +++ b/cloud-system-server/src/main/java/com/muyu/system/mapper/SysPostMapper.java @@ -0,0 +1,110 @@ +package com.muyu.system.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.muyu.system.domain.SysPost; + +import java.util.List; + +/** + * 岗位信息 数据层 + * + * @author muyu + */ +public interface SysPostMapper extends BaseMapper { + /** + * 查询岗位数据集合 + * + * @param post 岗位信息 + * + * @return 岗位数据集合 + */ + public List selectPostList (SysPost post); + + /** + * 查询所有岗位 + * + * @return 岗位列表 + */ + public List selectPostAll (); + + /** + * 通过岗位ID查询岗位信息 + * + * @param postId 岗位ID + * + * @return 角色对象信息 + */ + public SysPost selectPostById (Long postId); + + /** + * 根据用户ID获取岗位选择框列表 + * + * @param userId 用户ID + * + * @return 选中岗位ID列表 + */ + public List selectPostListByUserId (Long userId); + + /** + * 查询用户所属岗位组 + * + * @param userName 用户名 + * + * @return 结果 + */ + public List selectPostsByUserName (String userName); + + /** + * 删除岗位信息 + * + * @param postId 岗位ID + * + * @return 结果 + */ + public int deletePostById (Long postId); + + /** + * 批量删除岗位信息 + * + * @param postIds 需要删除的岗位ID + * + * @return 结果 + */ + public int deletePostByIds (Long[] postIds); + + /** + * 修改岗位信息 + * + * @param post 岗位信息 + * + * @return 结果 + */ + public int updatePost (SysPost post); + + /** + * 新增岗位信息 + * + * @param post 岗位信息 + * + * @return 结果 + */ + public int insertPost (SysPost post); + + /** + * 校验岗位名称 + * + * @param postName 岗位名称 + * + * @return 结果 + */ + public SysPost checkPostNameUnique (String postName); + + /** + * 校验岗位编码 + * + * @param postCode 岗位编码 + * + * @return 结果 + */ + public SysPost checkPostCodeUnique (String postCode); +} diff --git a/cloud-system-server/src/main/java/com/muyu/system/mapper/SysRoleDeptMapper.java b/cloud-system-server/src/main/java/com/muyu/system/mapper/SysRoleDeptMapper.java new file mode 100644 index 0000000..0e6dd4d --- /dev/null +++ b/cloud-system-server/src/main/java/com/muyu/system/mapper/SysRoleDeptMapper.java @@ -0,0 +1,50 @@ +package com.muyu.system.mapper; + + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.muyu.system.domain.SysRoleDept; + +import java.util.List; + +/** + * 角色与部门关联表 数据层 + * + * @author muyu + */ +public interface SysRoleDeptMapper extends BaseMapper { + /** + * 通过角色ID删除角色和部门关联 + * + * @param roleId 角色ID + * + * @return 结果 + */ + public int deleteRoleDeptByRoleId (Long roleId); + + /** + * 批量删除角色部门关联信息 + * + * @param ids 需要删除的数据ID + * + * @return 结果 + */ + public int deleteRoleDept (Long[] ids); + + /** + * 查询部门使用数量 + * + * @param deptId 部门ID + * + * @return 结果 + */ + public int selectCountRoleDeptByDeptId (Long deptId); + + /** + * 批量新增角色部门信息 + * + * @param roleDeptList 角色部门列表 + * + * @return 结果 + */ + public int batchRoleDept (List roleDeptList); +} diff --git a/cloud-system-server/src/main/java/com/muyu/system/mapper/SysRoleMapper.java b/cloud-system-server/src/main/java/com/muyu/system/mapper/SysRoleMapper.java new file mode 100644 index 0000000..2b01dc3 --- /dev/null +++ b/cloud-system-server/src/main/java/com/muyu/system/mapper/SysRoleMapper.java @@ -0,0 +1,119 @@ +package com.muyu.system.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.muyu.common.system.domain.SysRole; + +import java.util.List; + +/** + * 角色表 数据层 + * + * @author muyu + */ +public interface SysRoleMapper extends BaseMapper { + /** + * 根据条件分页查询角色数据 + * + * @param role 角色信息 + * + * @return 角色数据集合信息 + */ + public List selectRoleList (SysRole role); + + /** + * 根据用户ID查询角色 + * + * @param userId 用户ID + * + * @return 角色列表 + */ + public List selectRolePermissionByUserId (Long userId); + + /** + * 查询所有角色 + * + * @return 角色列表 + */ + public List selectRoleAll (); + + /** + * 根据用户ID获取角色选择框列表 + * + * @param userId 用户ID + * + * @return 选中角色ID列表 + */ + public List selectRoleListByUserId (Long userId); + + /** + * 通过角色ID查询角色 + * + * @param roleId 角色ID + * + * @return 角色对象信息 + */ + public SysRole selectRoleById (Long roleId); + + /** + * 根据用户ID查询角色 + * + * @param userName 用户名 + * + * @return 角色列表 + */ + public List selectRolesByUserName (String userName); + + /** + * 校验角色名称是否唯一 + * + * @param roleName 角色名称 + * + * @return 角色信息 + */ + public SysRole checkRoleNameUnique (String roleName); + + /** + * 校验角色权限是否唯一 + * + * @param roleKey 角色权限 + * + * @return 角色信息 + */ + public SysRole checkRoleKeyUnique (String roleKey); + + /** + * 修改角色信息 + * + * @param role 角色信息 + * + * @return 结果 + */ + public int updateRole (SysRole role); + + /** + * 新增角色信息 + * + * @param role 角色信息 + * + * @return 结果 + */ + public int insertRole (SysRole role); + + /** + * 通过角色ID删除角色 + * + * @param roleId 角色ID + * + * @return 结果 + */ + public int deleteRoleById (Long roleId); + + /** + * 批量删除角色信息 + * + * @param roleIds 需要删除的角色ID + * + * @return 结果 + */ + public int deleteRoleByIds (Long[] roleIds); +} diff --git a/cloud-system-server/src/main/java/com/muyu/system/mapper/SysRoleMenuMapper.java b/cloud-system-server/src/main/java/com/muyu/system/mapper/SysRoleMenuMapper.java new file mode 100644 index 0000000..664ce26 --- /dev/null +++ b/cloud-system-server/src/main/java/com/muyu/system/mapper/SysRoleMenuMapper.java @@ -0,0 +1,50 @@ +package com.muyu.system.mapper; + + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.muyu.system.domain.SysRoleMenu; + +import java.util.List; + +/** + * 角色与菜单关联表 数据层 + * + * @author muyu + */ +public interface SysRoleMenuMapper extends BaseMapper { + /** + * 查询菜单使用数量 + * + * @param menuId 菜单ID + * + * @return 结果 + */ + public int checkMenuExistRole (Long menuId); + + /** + * 通过角色ID删除角色和菜单关联 + * + * @param roleId 角色ID + * + * @return 结果 + */ + public int deleteRoleMenuByRoleId (Long roleId); + + /** + * 批量删除角色菜单关联信息 + * + * @param ids 需要删除的数据ID + * + * @return 结果 + */ + public int deleteRoleMenu (Long[] ids); + + /** + * 批量新增角色菜单信息 + * + * @param roleMenuList 角色菜单列表 + * + * @return 结果 + */ + public int batchRoleMenu (List roleMenuList); +} diff --git a/cloud-system-server/src/main/java/com/muyu/system/mapper/SysUserMapper.java b/cloud-system-server/src/main/java/com/muyu/system/mapper/SysUserMapper.java new file mode 100644 index 0000000..0d96948 --- /dev/null +++ b/cloud-system-server/src/main/java/com/muyu/system/mapper/SysUserMapper.java @@ -0,0 +1,150 @@ +package com.muyu.system.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.muyu.common.system.domain.SysUser; +import com.muyu.system.domain.UserNotice; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 用户表 数据层 + * + * @author muyu + */ +public interface SysUserMapper extends BaseMapper { + /** + * 根据条件分页查询用户列表 + * + * @param sysUser 用户信息 + * + * @return 用户信息集合信息 + */ + public List selectUserList (SysUser sysUser); + + /** + * 根据条件分页查询已配用户角色列表 + * + * @param user 用户信息 + * + * @return 用户信息集合信息 + */ + public List selectAllocatedList (SysUser user); + + /** + * 根据条件分页查询未分配用户角色列表 + * + * @param user 用户信息 + * + * @return 用户信息集合信息 + */ + public List selectUnallocatedList (SysUser user); + + /** + * 通过用户名查询用户 + * + * @param userName 用户名 + * + * @return 用户对象信息 + */ + public SysUser selectUserByUserName (String userName); + + /** + * 通过用户ID查询用户 + * + * @param userId 用户ID + * + * @return 用户对象信息 + */ + public SysUser selectUserById (Long userId); + + /** + * 新增用户信息 + * + * @param user 用户信息 + * + * @return 结果 + */ + public int insertUser (SysUser user); + + /** + * 修改用户信息 + * + * @param user 用户信息 + * + * @return 结果 + */ + public int updateUser (SysUser user); + + /** + * 修改用户头像 + * + * @param userName 用户名 + * @param avatar 头像地址 + * + * @return 结果 + */ + public int updateUserAvatar (@Param("userName") String userName, @Param("avatar") String avatar); + + /** + * 重置用户密码 + * + * @param userName 用户名 + * @param password 密码 + * + * @return 结果 + */ + public int resetUserPwd (@Param("userName") String userName, @Param("password") String password); + + /** + * 通过用户ID删除用户 + * + * @param userId 用户ID + * + * @return 结果 + */ + public int deleteUserById (Long userId); + + /** + * 批量删除用户信息 + * + * @param userIds 需要删除的用户ID + * + * @return 结果 + */ + public int deleteUserByIds (Long[] userIds); + + /** + * 校验用户名称是否唯一 + * + * @param userName 用户名称 + * + * @return 结果 + */ + public SysUser checkUserNameUnique (String userName); + + /** + * 校验手机号码是否唯一 + * + * @param phonenumber 手机号码 + * + * @return 结果 + */ + public SysUser checkPhoneUnique (String phonenumber); + + /** + * 校验email是否唯一 + * + * @param email 用户邮箱 + * + * @return 结果 + */ + public SysUser checkEmailUnique (String email); + + List findUserByDept(@Param("checkDeptList") Integer[] checkDeptList); + + List findAllUser(); + + UserNotice findUserDeptByUserId(@Param("userId") Integer userId); + +} diff --git a/cloud-system-server/src/main/java/com/muyu/system/mapper/SysUserPostMapper.java b/cloud-system-server/src/main/java/com/muyu/system/mapper/SysUserPostMapper.java new file mode 100644 index 0000000..8d09a47 --- /dev/null +++ b/cloud-system-server/src/main/java/com/muyu/system/mapper/SysUserPostMapper.java @@ -0,0 +1,49 @@ +package com.muyu.system.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.muyu.system.domain.SysUserPost; + +import java.util.List; + +/** + * 用户与岗位关联表 数据层 + * + * @author muyu + */ +public interface SysUserPostMapper extends BaseMapper { + /** + * 通过用户ID删除用户和岗位关联 + * + * @param userId 用户ID + * + * @return 结果 + */ + public int deleteUserPostByUserId (Long userId); + + /** + * 通过岗位ID查询岗位使用数量 + * + * @param postId 岗位ID + * + * @return 结果 + */ + public int countUserPostById (Long postId); + + /** + * 批量删除用户和岗位关联 + * + * @param ids 需要删除的数据ID + * + * @return 结果 + */ + public int deleteUserPost (Long[] ids); + + /** + * 批量新增用户岗位信息 + * + * @param userPostList 用户角色列表 + * + * @return 结果 + */ + public int batchUserPost (List userPostList); +} diff --git a/cloud-system-server/src/main/java/com/muyu/system/mapper/SysUserRoleMapper.java b/cloud-system-server/src/main/java/com/muyu/system/mapper/SysUserRoleMapper.java new file mode 100644 index 0000000..512adb8 --- /dev/null +++ b/cloud-system-server/src/main/java/com/muyu/system/mapper/SysUserRoleMapper.java @@ -0,0 +1,69 @@ +package com.muyu.system.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.muyu.system.domain.SysUserRole; +import org.apache.ibatis.annotations.Param; + +import java.util.List; + +/** + * 用户与角色关联表 数据层 + * + * @author muyu + */ +public interface SysUserRoleMapper extends BaseMapper { + /** + * 通过用户ID删除用户和角色关联 + * + * @param userId 用户ID + * + * @return 结果 + */ + public int deleteUserRoleByUserId (Long userId); + + /** + * 批量删除用户和角色关联 + * + * @param ids 需要删除的数据ID + * + * @return 结果 + */ + public int deleteUserRole (Long[] ids); + + /** + * 通过角色ID查询角色使用数量 + * + * @param roleId 角色ID + * + * @return 结果 + */ + public int countUserRoleByRoleId (Long roleId); + + /** + * 批量新增用户角色信息 + * + * @param userRoleList 用户角色列表 + * + * @return 结果 + */ + public int batchUserRole (List userRoleList); + + /** + * 删除用户和角色关联信息 + * + * @param userRole 用户和角色关联信息 + * + * @return 结果 + */ + public int deleteUserRoleInfo (SysUserRole userRole); + + /** + * 批量取消授权用户角色 + * + * @param roleId 角色ID + * @param userIds 需要删除的用户数据ID + * + * @return 结果 + */ + public int deleteUserRoleInfos (@Param("roleId") Long roleId, @Param("userIds") Long[] userIds); +} diff --git a/cloud-system-server/src/main/java/com/muyu/system/service/SysConfigService.java b/cloud-system-server/src/main/java/com/muyu/system/service/SysConfigService.java new file mode 100644 index 0000000..f23d67e --- /dev/null +++ b/cloud-system-server/src/main/java/com/muyu/system/service/SysConfigService.java @@ -0,0 +1,44 @@ +package com.muyu.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.muyu.system.domain.SysConfig; + +import java.util.List; + +/** + * @author DongZl + * @description: 配置plus业务层 + * @Date 2023-11-13 上午 10:06 + */ +public interface SysConfigService extends IService { + List pageQuery (SysConfig config); + + /** + * 通过Key进行查询值 + * @param configKey + * @return + */ + String selectConfigByKey (String configKey); + + /** + * 检测参数是否唯一 + * @param config + * @return + */ + boolean checkConfigKeyUnique (SysConfig config); + + /** + * 刷新缓存 + */ + void resetConfigCache (); + + /** + * 清空参数缓存数据 + */ + public void clearConfigCache (); + + /** + * 加载参数缓存数据 + */ + public void loadingConfigCache (); +} diff --git a/cloud-system-server/src/main/java/com/muyu/system/service/SysDeptService.java b/cloud-system-server/src/main/java/com/muyu/system/service/SysDeptService.java new file mode 100644 index 0000000..140cf91 --- /dev/null +++ b/cloud-system-server/src/main/java/com/muyu/system/service/SysDeptService.java @@ -0,0 +1,138 @@ +package com.muyu.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.muyu.common.system.domain.SysDept; +import com.muyu.system.domain.vo.TreeSelect; + +import java.util.List; + +/** + * 部门管理 服务层 + * + * @author muyu + */ +public interface SysDeptService extends IService { + /** + * 查询部门管理数据 + * + * @param dept 部门信息 + * + * @return 部门信息集合 + */ + public List selectDeptList (SysDept dept); + + /** + * 查询部门树结构信息 + * + * @param dept 部门信息 + * + * @return 部门树信息集合 + */ + public List selectDeptTreeList (SysDept dept); + + /** + * 构建前端所需要树结构 + * + * @param depts 部门列表 + * + * @return 树结构列表 + */ + public List buildDeptTree (List depts); + + /** + * 构建前端所需要下拉树结构 + * + * @param depts 部门列表 + * + * @return 下拉树结构列表 + */ + public List buildDeptTreeSelect (List depts); + + /** + * 根据角色ID查询部门树信息 + * + * @param roleId 角色ID + * + * @return 选中部门列表 + */ + public List selectDeptListByRoleId (Long roleId); + + /** + * 根据部门ID查询信息 + * + * @param deptId 部门ID + * + * @return 部门信息 + */ + public SysDept selectDeptById (Long deptId); + + /** + * 根据ID查询所有子部门(正常状态) + * + * @param deptId 部门ID + * + * @return 子部门数 + */ + public int selectNormalChildrenDeptById (Long deptId); + + /** + * 是否存在部门子节点 + * + * @param deptId 部门ID + * + * @return 结果 + */ + public boolean hasChildByDeptId (Long deptId); + + /** + * 查询部门是否存在用户 + * + * @param deptId 部门ID + * + * @return 结果 true 存在 false 不存在 + */ + public boolean checkDeptExistUser (Long deptId); + + /** + * 校验部门名称是否唯一 + * + * @param dept 部门信息 + * + * @return 结果 + */ + public boolean checkDeptNameUnique (SysDept dept); + + /** + * 校验部门是否有数据权限 + * + * @param deptId 部门id + */ + public void checkDeptDataScope (Long deptId); + + /** + * 新增保存部门信息 + * + * @param dept 部门信息 + * + * @return 结果 + */ + public int insertDept (SysDept dept); + + /** + * 修改保存部门信息 + * + * @param dept 部门信息 + * + * @return 结果 + */ + public int updateDept (SysDept dept); + + /** + * 删除部门管理信息 + * + * @param deptId 部门ID + * + * @return 结果 + */ + public int deleteDeptById (Long deptId); +} diff --git a/cloud-system-server/src/main/java/com/muyu/system/service/SysDictDataService.java b/cloud-system-server/src/main/java/com/muyu/system/service/SysDictDataService.java new file mode 100644 index 0000000..47aae4b --- /dev/null +++ b/cloud-system-server/src/main/java/com/muyu/system/service/SysDictDataService.java @@ -0,0 +1,66 @@ +package com.muyu.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.muyu.common.system.domain.SysDictData; + +import java.util.List; + +/** + * 字典 业务层 + * + * @author muyu + */ +public interface SysDictDataService extends IService { + /** + * 根据条件分页查询字典数据 + * + * @param dictData 字典数据信息 + * + * @return 字典数据集合信息 + */ + public List selectDictDataList (SysDictData dictData); + + /** + * 根据字典类型和字典键值查询字典数据信息 + * + * @param dictType 字典类型 + * @param dictValue 字典键值 + * + * @return 字典标签 + */ + public String selectDictLabel (String dictType, String dictValue); + + /** + * 根据字典数据ID查询信息 + * + * @param dictCode 字典数据ID + * + * @return 字典数据 + */ + public SysDictData selectDictDataById (Long dictCode); + + /** + * 批量删除字典数据信息 + * + * @param dictCodes 需要删除的字典数据ID + */ + public void deleteDictDataByIds (Long[] dictCodes); + + /** + * 新增保存字典数据信息 + * + * @param dictData 字典数据信息 + * + * @return 结果 + */ + public int insertDictData (SysDictData dictData); + + /** + * 修改保存字典数据信息 + * + * @param dictData 字典数据信息 + * + * @return 结果 + */ + public int updateDictData (SysDictData dictData); +} diff --git a/cloud-system-server/src/main/java/com/muyu/system/service/SysDictTypeService.java b/cloud-system-server/src/main/java/com/muyu/system/service/SysDictTypeService.java new file mode 100644 index 0000000..1b3212d --- /dev/null +++ b/cloud-system-server/src/main/java/com/muyu/system/service/SysDictTypeService.java @@ -0,0 +1,106 @@ +package com.muyu.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.muyu.common.system.domain.SysDictData; +import com.muyu.common.system.domain.SysDictType; + +import java.util.List; + +/** + * 字典 业务层 + * + * @author muyu + */ +public interface SysDictTypeService extends IService { + /** + * 根据条件分页查询字典类型 + * + * @param dictType 字典类型信息 + * + * @return 字典类型集合信息 + */ + public List selectDictTypeList (SysDictType dictType); + + /** + * 根据所有字典类型 + * + * @return 字典类型集合信息 + */ + public List selectDictTypeAll (); + + /** + * 根据字典类型查询字典数据 + * + * @param dictType 字典类型 + * + * @return 字典数据集合信息 + */ + public List selectDictDataByType (String dictType); + + /** + * 根据字典类型ID查询信息 + * + * @param dictId 字典类型ID + * + * @return 字典类型 + */ + public SysDictType selectDictTypeById (Long dictId); + + /** + * 根据字典类型查询信息 + * + * @param dictType 字典类型 + * + * @return 字典类型 + */ + public SysDictType selectDictTypeByType (String dictType); + + /** + * 批量删除字典信息 + * + * @param dictIds 需要删除的字典ID + */ + public void deleteDictTypeByIds (Long[] dictIds); + + /** + * 加载字典缓存数据 + */ + public void loadingDictCache (); + + /** + * 清空字典缓存数据 + */ + public void clearDictCache (); + + /** + * 重置字典缓存数据 + */ + public void resetDictCache (); + + /** + * 新增保存字典类型信息 + * + * @param dictType 字典类型信息 + * + * @return 结果 + */ + public int insertDictType (SysDictType dictType); + + /** + * 修改保存字典类型信息 + * + * @param dictType 字典类型信息 + * + * @return 结果 + */ + public int updateDictType (SysDictType dictType); + + /** + * 校验字典类型称是否唯一 + * + * @param dictType 字典类型 + * + * @return 结果 + */ + public boolean checkDictTypeUnique (SysDictType dictType); +} diff --git a/cloud-system-server/src/main/java/com/muyu/system/service/SysLogininforService.java b/cloud-system-server/src/main/java/com/muyu/system/service/SysLogininforService.java new file mode 100644 index 0000000..bb3031e --- /dev/null +++ b/cloud-system-server/src/main/java/com/muyu/system/service/SysLogininforService.java @@ -0,0 +1,43 @@ +package com.muyu.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.muyu.common.system.domain.SysLogininfor; + +import java.util.List; + +/** + * 系统访问日志情况信息 服务层 + * + * @author muyu + */ +public interface SysLogininforService extends IService { + /** + * 新增系统登录日志 + * + * @param logininfor 访问日志对象 + */ + public int insertLogininfor (SysLogininfor logininfor); + + /** + * 查询系统登录日志集合 + * + * @param logininfor 访问日志对象 + * + * @return 登录记录集合 + */ + public List selectLogininforList (SysLogininfor logininfor); + + /** + * 批量删除系统登录日志 + * + * @param infoIds 需要删除的登录日志ID + * + * @return 结果 + */ + public int deleteLogininforByIds (Long[] infoIds); + + /** + * 清空系统登录日志 + */ + public void cleanLogininfor (); +} diff --git a/cloud-system-server/src/main/java/com/muyu/system/service/SysMenuService.java b/cloud-system-server/src/main/java/com/muyu/system/service/SysMenuService.java new file mode 100644 index 0000000..29bfb07 --- /dev/null +++ b/cloud-system-server/src/main/java/com/muyu/system/service/SysMenuService.java @@ -0,0 +1,161 @@ +package com.muyu.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.muyu.system.domain.SysMenu; +import com.muyu.system.domain.vo.RouterVo; +import com.muyu.system.domain.vo.TreeSelect; + +import java.util.List; +import java.util.Set; + +/** + * 菜单 业务层 + * + * @author muyu + */ +public interface SysMenuService extends IService { + /** + * 根据用户查询系统菜单列表 + * + * @param userId 用户ID + * + * @return 菜单列表 + */ + public List selectMenuList (Long userId); + + /** + * 根据用户查询系统菜单列表 + * + * @param menu 菜单信息 + * @param userId 用户ID + * + * @return 菜单列表 + */ + public List selectMenuList (SysMenu menu, Long userId); + + /** + * 根据用户ID查询权限 + * + * @param userId 用户ID + * + * @return 权限列表 + */ + public Set selectMenuPermsByUserId (Long userId); + + /** + * 根据角色ID查询权限 + * + * @param roleId 角色ID + * + * @return 权限列表 + */ + public Set selectMenuPermsByRoleId (Long roleId); + + /** + * 根据用户ID查询菜单树信息 + * + * @param userId 用户ID + * + * @return 菜单列表 + */ + public List selectMenuTreeByUserId (Long userId); + + /** + * 根据角色ID查询菜单树信息 + * + * @param roleId 角色ID + * + * @return 选中菜单列表 + */ + public List selectMenuListByRoleId (Long roleId); + + /** + * 构建前端路由所需要的菜单 + * + * @param menus 菜单列表 + * + * @return 路由列表 + */ + public List buildMenus (List menus); + + /** + * 构建前端所需要树结构 + * + * @param menus 菜单列表 + * + * @return 树结构列表 + */ + public List buildMenuTree (List menus); + + /** + * 构建前端所需要下拉树结构 + * + * @param menus 菜单列表 + * + * @return 下拉树结构列表 + */ + public List buildMenuTreeSelect (List menus); + + /** + * 根据菜单ID查询信息 + * + * @param menuId 菜单ID + * + * @return 菜单信息 + */ + public SysMenu selectMenuById (Long menuId); + + /** + * 是否存在菜单子节点 + * + * @param menuId 菜单ID + * + * @return 结果 true 存在 false 不存在 + */ + public boolean hasChildByMenuId (Long menuId); + + /** + * 查询菜单是否存在角色 + * + * @param menuId 菜单ID + * + * @return 结果 true 存在 false 不存在 + */ + public boolean checkMenuExistRole (Long menuId); + + /** + * 新增保存菜单信息 + * + * @param menu 菜单信息 + * + * @return 结果 + */ + public int insertMenu (SysMenu menu); + + /** + * 修改保存菜单信息 + * + * @param menu 菜单信息 + * + * @return 结果 + */ + public int updateMenu (SysMenu menu); + + /** + * 删除菜单管理信息 + * + * @param menuId 菜单ID + * + * @return 结果 + */ + public int deleteMenuById (Long menuId); + + /** + * 校验菜单名称是否唯一 + * + * @param menu 菜单信息 + * + * @return 结果 + */ + public boolean checkMenuNameUnique (SysMenu menu); +} diff --git a/cloud-system-server/src/main/java/com/muyu/system/service/SysNoticeService.java b/cloud-system-server/src/main/java/com/muyu/system/service/SysNoticeService.java new file mode 100644 index 0000000..bccd69c --- /dev/null +++ b/cloud-system-server/src/main/java/com/muyu/system/service/SysNoticeService.java @@ -0,0 +1,79 @@ +package com.muyu.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.muyu.system.domain.SysNotice; +import com.muyu.system.domain.resp.UserNoticeRes; +import com.muyu.system.domain.vo.UserNoticeReq; + +import java.util.List; + +/** + * 公告 服务层 + * + * @author muyu + */ +public interface SysNoticeService extends IService { + /** + * 查询公告信息 + * + * @param noticeId 公告ID + * + * @return 公告信息 + */ + public SysNotice selectNoticeById (Long noticeId); + + /** + * 查询公告列表 + * + * @param notice 公告信息 + * + * @return 公告集合 + */ + public List selectNoticeList (SysNotice notice); + + /** + * 新增公告 + * + * @param notice 公告信息 + * + * @return 结果 + */ + public int insertNotice (SysNotice notice); + + /** + * 修改公告 + * + * @param notice 公告信息 + * + * @return 结果 + */ + public int updateNotice (SysNotice notice); + + /** + * 删除公告信息 + * + * @param noticeId 公告ID + * + * @return 结果 + */ + public int deleteNoticeById (Long noticeId); + + /** + * 批量删除公告信息 + * + * @param noticeIds 需要删除的公告ID + * + * @return 结果 + */ + public int deleteNoticeByIds (Long[] noticeIds); + + + List findNoticeByUserId(UserNoticeReq notice); + + void updNoticeStatus(Integer id); + + String findNoticeSumByUserId(String noticeId); + + String findNoticeCountByUserId(String noticeId); + +} diff --git a/cloud-system-server/src/main/java/com/muyu/system/service/SysOperLogService.java b/cloud-system-server/src/main/java/com/muyu/system/service/SysOperLogService.java new file mode 100644 index 0000000..70b63ee --- /dev/null +++ b/cloud-system-server/src/main/java/com/muyu/system/service/SysOperLogService.java @@ -0,0 +1,54 @@ +package com.muyu.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.muyu.common.system.domain.SysOperLog; + +import java.util.List; + +/** + * 操作日志 服务层 + * + * @author muyu + */ +public interface SysOperLogService extends IService { + /** + * 新增操作日志 + * + * @param operLog 操作日志对象 + * + * @return 结果 + */ + public int insertOperlog (SysOperLog operLog); + + /** + * 查询系统操作日志集合 + * + * @param operLog 操作日志对象 + * + * @return 操作日志集合 + */ + public List selectOperLogList (SysOperLog operLog); + + /** + * 批量删除系统操作日志 + * + * @param operIds 需要删除的操作日志ID + * + * @return 结果 + */ + public int deleteOperLogByIds (Long[] operIds); + + /** + * 查询操作日志详细 + * + * @param operId 操作ID + * + * @return 操作日志对象 + */ + public SysOperLog selectOperLogById (Long operId); + + /** + * 清空操作日志 + */ + public void cleanOperLog (); +} diff --git a/cloud-system-server/src/main/java/com/muyu/system/service/SysPermissionService.java b/cloud-system-server/src/main/java/com/muyu/system/service/SysPermissionService.java new file mode 100644 index 0000000..02e9d14 --- /dev/null +++ b/cloud-system-server/src/main/java/com/muyu/system/service/SysPermissionService.java @@ -0,0 +1,30 @@ +package com.muyu.system.service; + +import com.muyu.common.system.domain.SysUser; + +import java.util.Set; + +/** + * 权限信息 服务层 + * + * @author muyu + */ +public interface SysPermissionService { + /** + * 获取角色数据权限 + * + * @param userId 用户Id + * + * @return 角色权限信息 + */ + public Set getRolePermission (SysUser user); + + /** + * 获取菜单数据权限 + * + * @param userId 用户Id + * + * @return 菜单权限信息 + */ + public Set getMenuPermission (SysUser user); +} diff --git a/cloud-system-server/src/main/java/com/muyu/system/service/SysPostService.java b/cloud-system-server/src/main/java/com/muyu/system/service/SysPostService.java new file mode 100644 index 0000000..fbd8677 --- /dev/null +++ b/cloud-system-server/src/main/java/com/muyu/system/service/SysPostService.java @@ -0,0 +1,110 @@ +package com.muyu.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.muyu.system.domain.SysPost; + +import java.util.List; + +/** + * 岗位信息 服务层 + * + * @author muyu + */ +public interface SysPostService extends IService { + /** + * 查询岗位信息集合 + * + * @param post 岗位信息 + * + * @return 岗位列表 + */ + public List selectPostList (SysPost post); + + /** + * 查询所有岗位 + * + * @return 岗位列表 + */ + public List selectPostAll (); + + /** + * 通过岗位ID查询岗位信息 + * + * @param postId 岗位ID + * + * @return 角色对象信息 + */ + public SysPost selectPostById (Long postId); + + /** + * 根据用户ID获取岗位选择框列表 + * + * @param userId 用户ID + * + * @return 选中岗位ID列表 + */ + public List selectPostListByUserId (Long userId); + + /** + * 校验岗位名称 + * + * @param post 岗位信息 + * + * @return 结果 + */ + public boolean checkPostNameUnique (SysPost post); + + /** + * 校验岗位编码 + * + * @param post 岗位信息 + * + * @return 结果 + */ + public boolean checkPostCodeUnique (SysPost post); + + /** + * 通过岗位ID查询岗位使用数量 + * + * @param postId 岗位ID + * + * @return 结果 + */ + public int countUserPostById (Long postId); + + /** + * 删除岗位信息 + * + * @param postId 岗位ID + * + * @return 结果 + */ + public int deletePostById (Long postId); + + /** + * 批量删除岗位信息 + * + * @param postIds 需要删除的岗位ID + * + * @return 结果 + */ + public int deletePostByIds (Long[] postIds); + + /** + * 新增保存岗位信息 + * + * @param post 岗位信息 + * + * @return 结果 + */ + public int insertPost (SysPost post); + + /** + * 修改保存岗位信息 + * + * @param post 岗位信息 + * + * @return 结果 + */ + public int updatePost (SysPost post); +} diff --git a/cloud-system-server/src/main/java/com/muyu/system/service/SysRoleService.java b/cloud-system-server/src/main/java/com/muyu/system/service/SysRoleService.java new file mode 100644 index 0000000..47009f8 --- /dev/null +++ b/cloud-system-server/src/main/java/com/muyu/system/service/SysRoleService.java @@ -0,0 +1,191 @@ +package com.muyu.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.muyu.common.system.domain.SysRole; +import com.muyu.system.domain.SysUserRole; + +import java.util.List; +import java.util.Set; + +/** + * 角色业务层 + * + * @author muyu + */ +public interface SysRoleService extends IService { + /** + * 根据条件分页查询角色数据 + * + * @param role 角色信息 + * + * @return 角色数据集合信息 + */ + public List selectRoleList (SysRole role); + + /** + * 根据用户ID查询角色列表 + * + * @param userId 用户ID + * + * @return 角色列表 + */ + public List selectRolesByUserId (Long userId); + + /** + * 根据用户ID查询角色权限 + * + * @param userId 用户ID + * + * @return 权限列表 + */ + public Set selectRolePermissionByUserId (Long userId); + + /** + * 查询所有角色 + * + * @return 角色列表 + */ + public List selectRoleAll (); + + /** + * 根据用户ID获取角色选择框列表 + * + * @param userId 用户ID + * + * @return 选中角色ID列表 + */ + public List selectRoleListByUserId (Long userId); + + /** + * 通过角色ID查询角色 + * + * @param roleId 角色ID + * + * @return 角色对象信息 + */ + public SysRole selectRoleById (Long roleId); + + /** + * 校验角色名称是否唯一 + * + * @param role 角色信息 + * + * @return 结果 + */ + public boolean checkRoleNameUnique (SysRole role); + + /** + * 校验角色权限是否唯一 + * + * @param role 角色信息 + * + * @return 结果 + */ + public boolean checkRoleKeyUnique (SysRole role); + + /** + * 校验角色是否允许操作 + * + * @param role 角色信息 + */ + public void checkRoleAllowed (SysRole role); + + /** + * 校验角色是否有数据权限 + * + * @param roleId 角色id + */ + public void checkRoleDataScope (Long roleId); + + /** + * 通过角色ID查询角色使用数量 + * + * @param roleId 角色ID + * + * @return 结果 + */ + public int countUserRoleByRoleId (Long roleId); + + /** + * 新增保存角色信息 + * + * @param role 角色信息 + * + * @return 结果 + */ + public int insertRole (SysRole role); + + /** + * 修改保存角色信息 + * + * @param role 角色信息 + * + * @return 结果 + */ + public int updateRole (SysRole role); + + /** + * 修改角色状态 + * + * @param role 角色信息 + * + * @return 结果 + */ + public int updateRoleStatus (SysRole role); + + /** + * 修改数据权限信息 + * + * @param role 角色信息 + * + * @return 结果 + */ + public int authDataScope (SysRole role); + + /** + * 通过角色ID删除角色 + * + * @param roleId 角色ID + * + * @return 结果 + */ + public int deleteRoleById (Long roleId); + + /** + * 批量删除角色信息 + * + * @param roleIds 需要删除的角色ID + * + * @return 结果 + */ + public int deleteRoleByIds (Long[] roleIds); + + /** + * 取消授权用户角色 + * + * @param userRole 用户和角色关联信息 + * + * @return 结果 + */ + public int deleteAuthUser (SysUserRole userRole); + + /** + * 批量取消授权用户角色 + * + * @param roleId 角色ID + * @param userIds 需要取消授权的用户数据ID + * + * @return 结果 + */ + public int deleteAuthUsers (Long roleId, Long[] userIds); + + /** + * 批量选择授权用户角色 + * + * @param roleId 角色ID + * @param userIds 需要删除的用户数据ID + * + * @return 结果 + */ + public int insertAuthUsers (Long roleId, Long[] userIds); +} diff --git a/cloud-system-server/src/main/java/com/muyu/system/service/SysUserOnlineService.java b/cloud-system-server/src/main/java/com/muyu/system/service/SysUserOnlineService.java new file mode 100644 index 0000000..bf3622b --- /dev/null +++ b/cloud-system-server/src/main/java/com/muyu/system/service/SysUserOnlineService.java @@ -0,0 +1,51 @@ +package com.muyu.system.service; + +import com.muyu.common.system.domain.LoginUser; +import com.muyu.system.domain.SysUserOnline; + +/** + * 在线用户 服务层 + * + * @author muyu + */ +public interface SysUserOnlineService { + /** + * 通过登录地址查询信息 + * + * @param ipaddr 登录地址 + * @param user 用户信息 + * + * @return 在线用户信息 + */ + public SysUserOnline selectOnlineByIpaddr (String ipaddr, LoginUser user); + + /** + * 通过用户名称查询信息 + * + * @param userName 用户名称 + * @param user 用户信息 + * + * @return 在线用户信息 + */ + public SysUserOnline selectOnlineByUserName (String userName, LoginUser user); + + /** + * 通过登录地址/用户名称查询信息 + * + * @param ipaddr 登录地址 + * @param userName 用户名称 + * @param user 用户信息 + * + * @return 在线用户信息 + */ + public SysUserOnline selectOnlineByInfo (String ipaddr, String userName, LoginUser user); + + /** + * 设置在线用户信息 + * + * @param user 用户信息 + * + * @return 在线用户 + */ + public SysUserOnline loginUserToUserOnline (LoginUser user); +} diff --git a/cloud-system-server/src/main/java/com/muyu/system/service/SysUserService.java b/cloud-system-server/src/main/java/com/muyu/system/service/SysUserService.java new file mode 100644 index 0000000..e384e16 --- /dev/null +++ b/cloud-system-server/src/main/java/com/muyu/system/service/SysUserService.java @@ -0,0 +1,228 @@ +package com.muyu.system.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.muyu.common.system.domain.SysUser; + +import java.util.List; + +/** + * 用户 业务层 + * + * @author muyu + */ +public interface SysUserService extends IService { + /** + * 根据条件分页查询用户列表 + * + * @param user 用户信息 + * + * @return 用户信息集合信息 + */ + public List selectUserList (SysUser user); + + /** + * 根据条件分页查询已分配用户角色列表 + * + * @param user 用户信息 + * + * @return 用户信息集合信息 + */ + public List selectAllocatedList (SysUser user); + + /** + * 根据条件分页查询未分配用户角色列表 + * + * @param user 用户信息 + * + * @return 用户信息集合信息 + */ + public List selectUnallocatedList (SysUser user); + + /** + * 通过用户名查询用户 + * + * @param userName 用户名 + * + * @return 用户对象信息 + */ + public SysUser selectUserByUserName (String userName); + + /** + * 通过用户ID查询用户 + * + * @param userId 用户ID + * + * @return 用户对象信息 + */ + public SysUser selectUserById (Long userId); + + /** + * 根据用户ID查询用户所属角色组 + * + * @param userName 用户名 + * + * @return 结果 + */ + public String selectUserRoleGroup (String userName); + + /** + * 根据用户ID查询用户所属岗位组 + * + * @param userName 用户名 + * + * @return 结果 + */ + public String selectUserPostGroup (String userName); + + /** + * 校验用户名称是否唯一 + * + * @param user 用户信息 + * + * @return 结果 + */ + public boolean checkUserNameUnique (SysUser user); + + /** + * 校验手机号码是否唯一 + * + * @param user 用户信息 + * + * @return 结果 + */ + public boolean checkPhoneUnique (SysUser user); + + /** + * 校验email是否唯一 + * + * @param user 用户信息 + * + * @return 结果 + */ + public boolean checkEmailUnique (SysUser user); + + /** + * 校验用户是否允许操作 + * + * @param user 用户信息 + */ + public void checkUserAllowed (SysUser user); + + /** + * 校验用户是否有数据权限 + * + * @param userId 用户id + */ + public void checkUserDataScope (Long userId); + + /** + * 新增用户信息 + * + * @param user 用户信息 + * + * @return 结果 + */ + public int insertUser (SysUser user); + + /** + * 注册用户信息 + * + * @param user 用户信息 + * + * @return 结果 + */ + public boolean registerUser (SysUser user); + + /** + * 修改用户信息 + * + * @param user 用户信息 + * + * @return 结果 + */ + public int updateUser (SysUser user); + + /** + * 用户授权角色 + * + * @param userId 用户ID + * @param roleIds 角色组 + */ + public void insertUserAuth (Long userId, Long[] roleIds); + + /** + * 修改用户状态 + * + * @param user 用户信息 + * + * @return 结果 + */ + public int updateUserStatus (SysUser user); + + /** + * 修改用户基本信息 + * + * @param user 用户信息 + * + * @return 结果 + */ + public int updateUserProfile (SysUser user); + + /** + * 修改用户头像 + * + * @param userName 用户名 + * @param avatar 头像地址 + * + * @return 结果 + */ + public boolean updateUserAvatar (String userName, String avatar); + + /** + * 重置用户密码 + * + * @param user 用户信息 + * + * @return 结果 + */ + public int resetPwd (SysUser user,Long userId); + + /** + * 重置用户密码 + * + * @param userName 用户名 + * @param password 密码 + * + * @return 结果 + */ + public int resetUserPwd (String userName, String password); + + /** + * 通过用户ID删除用户 + * + * @param userId 用户ID + * + * @return 结果 + */ + public int deleteUserById (Long userId); + + /** + * 批量删除用户信息 + * + * @param userIds 需要删除的用户ID + * + * @return 结果 + */ + public int deleteUserByIds (Long[] userIds); + + /** + * 导入用户数据 + * + * @param userList 用户数据列表 + * @param isUpdateSupport 是否更新支持,如果已存在,则进行更新数据 + * @param operName 操作用户 + * + * @return 结果 + */ + public String importUser (List userList, Boolean isUpdateSupport, String operName); +} diff --git a/cloud-system-server/src/main/java/com/muyu/system/service/impl/SysConfigServiceImpl.java b/cloud-system-server/src/main/java/com/muyu/system/service/impl/SysConfigServiceImpl.java new file mode 100644 index 0000000..bc07cc8 --- /dev/null +++ b/cloud-system-server/src/main/java/com/muyu/system/service/impl/SysConfigServiceImpl.java @@ -0,0 +1,114 @@ +package com.muyu.system.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.muyu.common.core.constant.CacheConstants; +import com.muyu.common.core.utils.StringUtils; +import com.muyu.common.redis.service.RedisService; +import com.muyu.system.domain.SysConfig; +import com.muyu.system.mapper.SysConfigMapper; +import com.muyu.system.service.SysConfigService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.Assert; + +import java.util.Collection; +import java.util.Date; +import java.util.List; +import java.util.Objects; + +/** + * @author DongZl + * @description: 配置plus业务实现层 + * @Date 2023-11-13 上午 10:06 + */ +@Service +public class SysConfigServiceImpl extends ServiceImpl + implements SysConfigService { + + @Autowired + private RedisService redisService; + + @Override + public List pageQuery (SysConfig config) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + if (StringUtils.isNotEmpty(config.getConfigName())){ + queryWrapper.like(SysConfig::getConfigName, config.getConfigName()); + } + if (StringUtils.isNotEmpty(config.getConfigType())){ + queryWrapper.like(SysConfig::getConfigType, config.getConfigType()); + } + if (StringUtils.isNotEmpty(config.getConfigKey())){ + queryWrapper.like(SysConfig::getConfigKey, config.getConfigKey()); + } + Object beginTime = config.getParams().get("beginTime"); + if (Objects.nonNull(beginTime) && beginTime instanceof Date beginDate){ + queryWrapper.gt(SysConfig::getCreateTime, beginDate); + } + Object endTime = config.getParams().get("endTime"); + if (Objects.nonNull(endTime) && endTime instanceof Date endDate){ + queryWrapper.lt(SysConfig::getCreateTime, endDate); + } + return this.list(queryWrapper); + } + + /** + * 通过Key进行查询值 + * + * @param configKey + * + * @return + */ + @Override + public String selectConfigByKey (String configKey) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + Assert.notNull(configKey, "key不可为空"); + queryWrapper.eq(SysConfig::getConfigKey, configKey); + SysConfig sysConfig = this.getOne(queryWrapper); + return sysConfig.getConfigValue(); + } + + @Override + public boolean checkConfigKeyUnique (SysConfig config) { + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.eq(SysConfig::getConfigKey, config.getConfigKey()); + return this.count(queryWrapper) > 0; + } + + @Override + public void resetConfigCache () { + this.clearConfigCache(); + this.loadingConfigCache(); + } + + /** + * 清空参数缓存数据 + */ + @Override + public void clearConfigCache () { + Collection keys = redisService.keys(CacheConstants.SYS_CONFIG_KEY + "*"); + redisService.deleteObject(keys); + } + + /** + * 加载参数缓存数据 + */ + @Override + public void loadingConfigCache () { + List configsList = this.list(); + for (SysConfig config : configsList) { + redisService.setCacheObject(getCacheKey(config.getConfigKey()), config.getConfigValue()); + } + } + + /** + * 设置cache key + * + * @param configKey 参数键 + * + * @return 缓存键key + */ + private String getCacheKey (String configKey) { + return CacheConstants.SYS_CONFIG_KEY + configKey; + } +} diff --git a/cloud-system-server/src/main/java/com/muyu/system/service/impl/SysDeptServiceImpl.java b/cloud-system-server/src/main/java/com/muyu/system/service/impl/SysDeptServiceImpl.java new file mode 100644 index 0000000..a55301b --- /dev/null +++ b/cloud-system-server/src/main/java/com/muyu/system/service/impl/SysDeptServiceImpl.java @@ -0,0 +1,318 @@ +package com.muyu.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.muyu.common.core.constant.UserConstants; +import com.muyu.common.core.exception.ServiceException; +import com.muyu.common.core.text.Convert; +import com.muyu.common.core.utils.SpringUtils; +import com.muyu.common.core.utils.StringUtils; +import com.muyu.common.datascope.annotation.DataScope; +import com.muyu.common.security.utils.SecurityUtils; +import com.muyu.common.system.domain.SysDept; +import com.muyu.common.system.domain.SysRole; +import com.muyu.common.system.domain.SysUser; +import com.muyu.system.domain.vo.TreeSelect; +import com.muyu.system.mapper.SysDeptMapper; +import com.muyu.system.mapper.SysRoleMapper; +import com.muyu.system.service.SysDeptService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 部门管理 服务实现 + * + * @author muyu + */ +@Service +public class SysDeptServiceImpl extends ServiceImpl implements SysDeptService { + @Autowired + private SysDeptMapper deptMapper; + + @Autowired + private SysRoleMapper roleMapper; + + /** + * 查询部门管理数据 + * + * @param dept 部门信息 + * + * @return 部门信息集合 + */ + @Override + @DataScope(deptAlias = "d") + public List selectDeptList (SysDept dept) { + return deptMapper.selectDeptList(dept); + } + + /** + * 查询部门树结构信息 + * + * @param dept 部门信息 + * + * @return 部门树信息集合 + */ + @Override + public List selectDeptTreeList (SysDept dept) { + List depts = SpringUtils.getAopProxy(this).selectDeptList(dept); + return buildDeptTreeSelect(depts); + } + + /** + * 构建前端所需要树结构 + * + * @param depts 部门列表 + * + * @return 树结构列表 + */ + @Override + public List buildDeptTree (List depts) { + List returnList = new ArrayList(); + List tempList = depts.stream().map(SysDept::getDeptId).collect(Collectors.toList()); + for (SysDept dept : depts) { + // 如果是顶级节点, 遍历该父节点的所有子节点 + if (!tempList.contains(dept.getParentId())) { + recursionFn(depts, dept); + returnList.add(dept); + } + } + if (returnList.isEmpty()) { + returnList = depts; + } + return returnList; + } + + /** + * 构建前端所需要下拉树结构 + * + * @param depts 部门列表 + * + * @return 下拉树结构列表 + */ + @Override + public List buildDeptTreeSelect (List depts) { + List deptTrees = buildDeptTree(depts); + return deptTrees.stream().map(TreeSelect::new).collect(Collectors.toList()); + } + + /** + * 根据角色ID查询部门树信息 + * + * @param roleId 角色ID + * + * @return 选中部门列表 + */ + @Override + public List selectDeptListByRoleId (Long roleId) { + SysRole role = roleMapper.selectRoleById(roleId); + return deptMapper.selectDeptListByRoleId(roleId, role.isDeptCheckStrictly()); + } + + /** + * 根据部门ID查询信息 + * + * @param deptId 部门ID + * + * @return 部门信息 + */ + @Override + public SysDept selectDeptById (Long deptId) { + return deptMapper.selectDeptById(deptId); + } + + /** + * 根据ID查询所有子部门(正常状态) + * + * @param deptId 部门ID + * + * @return 子部门数 + */ + @Override + public int selectNormalChildrenDeptById (Long deptId) { + return deptMapper.selectNormalChildrenDeptById(deptId); + } + + /** + * 是否存在子节点 + * + * @param deptId 部门ID + * + * @return 结果 + */ + @Override + public boolean hasChildByDeptId (Long deptId) { + int result = deptMapper.hasChildByDeptId(deptId); + return result > 0; + } + + /** + * 查询部门是否存在用户 + * + * @param deptId 部门ID + * + * @return 结果 true 存在 false 不存在 + */ + @Override + public boolean checkDeptExistUser (Long deptId) { + int result = deptMapper.checkDeptExistUser(deptId); + return result > 0; + } + + /** + * 校验部门名称是否唯一 + * + * @param dept 部门信息 + * + * @return 结果 + */ + @Override + public boolean checkDeptNameUnique (SysDept dept) { + Long deptId = StringUtils.isNull(dept.getDeptId()) ? -1L : dept.getDeptId(); + SysDept info = deptMapper.checkDeptNameUnique(dept.getDeptName(), dept.getParentId()); + if (StringUtils.isNotNull(info) && info.getDeptId().longValue() != deptId.longValue()) { + return UserConstants.NOT_UNIQUE; + } + return UserConstants.UNIQUE; + } + + /** + * 校验部门是否有数据权限 + * + * @param deptId 部门id + */ + @Override + public void checkDeptDataScope (Long deptId) { + if (!SysUser.isAdmin(SecurityUtils.getUserId())) { + SysDept dept = new SysDept(); + dept.setDeptId(deptId); + List depts = SpringUtils.getAopProxy(this).selectDeptList(dept); + if (StringUtils.isEmpty(depts)) { + throw new ServiceException("没有权限访问部门数据!"); + } + } + } + + /** + * 新增保存部门信息 + * + * @param dept 部门信息 + * + * @return 结果 + */ + @Override + public int insertDept (SysDept dept) { + SysDept info = deptMapper.selectDeptById(dept.getParentId()); + // 如果父节点不为正常状态,则不允许新增子节点 + if (!UserConstants.DEPT_NORMAL.equals(info.getStatus())) { + throw new ServiceException("部门停用,不允许新增"); + } + dept.setAncestors(info.getAncestors() + "," + dept.getParentId()); + return deptMapper.insertDept(dept); + } + + /** + * 修改保存部门信息 + * + * @param dept 部门信息 + * + * @return 结果 + */ + @Override + public int updateDept (SysDept dept) { + SysDept newParentDept = deptMapper.selectDeptById(dept.getParentId()); + SysDept oldDept = deptMapper.selectDeptById(dept.getDeptId()); + if (StringUtils.isNotNull(newParentDept) && StringUtils.isNotNull(oldDept)) { + String newAncestors = newParentDept.getAncestors() + "," + newParentDept.getDeptId(); + String oldAncestors = oldDept.getAncestors(); + dept.setAncestors(newAncestors); + updateDeptChildren(dept.getDeptId(), newAncestors, oldAncestors); + } + int result = deptMapper.updateDept(dept); + if (UserConstants.DEPT_NORMAL.equals(dept.getStatus()) && StringUtils.isNotEmpty(dept.getAncestors()) + && !StringUtils.equals("0", dept.getAncestors())) { + // 如果该部门是启用状态,则启用该部门的所有上级部门 + updateParentDeptStatusNormal(dept); + } + return result; + } + + /** + * 修改该部门的父级部门状态 + * + * @param dept 当前部门 + */ + private void updateParentDeptStatusNormal (SysDept dept) { + String ancestors = dept.getAncestors(); + Long[] deptIds = Convert.toLongArray(ancestors); + deptMapper.updateDeptStatusNormal(deptIds); + } + + /** + * 修改子元素关系 + * + * @param deptId 被修改的部门ID + * @param newAncestors 新的父ID集合 + * @param oldAncestors 旧的父ID集合 + */ + public void updateDeptChildren (Long deptId, String newAncestors, String oldAncestors) { + List children = deptMapper.selectChildrenDeptById(deptId); + for (SysDept child : children) { + child.setAncestors(child.getAncestors().replaceFirst(oldAncestors, newAncestors)); + } + if (children.size() > 0) { + deptMapper.updateDeptChildren(children); + } + } + + /** + * 删除部门管理信息 + * + * @param deptId 部门ID + * + * @return 结果 + */ + @Override + public int deleteDeptById (Long deptId) { + return deptMapper.deleteDeptById(deptId); + } + + /** + * 递归列表 + */ + private void recursionFn (List list, SysDept t) { + // 得到子节点列表 + List childList = getChildList(list, t); + t.setChildren(childList); + for (SysDept tChild : childList) { + if (hasChild(list, tChild)) { + recursionFn(list, tChild); + } + } + } + + /** + * 得到子节点列表 + */ + private List getChildList (List list, SysDept t) { + List tlist = new ArrayList(); + Iterator it = list.iterator(); + while (it.hasNext()) { + SysDept n = (SysDept) it.next(); + if (StringUtils.isNotNull(n.getParentId()) && n.getParentId().longValue() == t.getDeptId().longValue()) { + tlist.add(n); + } + } + return tlist; + } + + /** + * 判断是否有子节点 + */ + private boolean hasChild (List list, SysDept t) { + return getChildList(list, t).size() > 0 ? true : false; + } +} diff --git a/cloud-system-server/src/main/java/com/muyu/system/service/impl/SysDictDataServiceImpl.java b/cloud-system-server/src/main/java/com/muyu/system/service/impl/SysDictDataServiceImpl.java new file mode 100644 index 0000000..777ffbd --- /dev/null +++ b/cloud-system-server/src/main/java/com/muyu/system/service/impl/SysDictDataServiceImpl.java @@ -0,0 +1,108 @@ +package com.muyu.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.muyu.common.security.utils.DictUtils; +import com.muyu.common.system.domain.SysDictData; +import com.muyu.system.mapper.SysDictDataMapper; +import com.muyu.system.service.SysDictDataService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 字典 业务层处理 + * + * @author muyu + */ +@Service +public class SysDictDataServiceImpl extends ServiceImpl implements SysDictDataService { + @Autowired + private SysDictDataMapper dictDataMapper; + + /** + * 根据条件分页查询字典数据 + * + * @param dictData 字典数据信息 + * + * @return 字典数据集合信息 + */ + @Override + public List selectDictDataList (SysDictData dictData) { + return dictDataMapper.selectDictDataList(dictData); + } + + /** + * 根据字典类型和字典键值查询字典数据信息 + * + * @param dictType 字典类型 + * @param dictValue 字典键值 + * + * @return 字典标签 + */ + @Override + public String selectDictLabel (String dictType, String dictValue) { + return dictDataMapper.selectDictLabel(dictType, dictValue); + } + + /** + * 根据字典数据ID查询信息 + * + * @param dictCode 字典数据ID + * + * @return 字典数据 + */ + @Override + public SysDictData selectDictDataById (Long dictCode) { + return dictDataMapper.selectDictDataById(dictCode); + } + + /** + * 批量删除字典数据信息 + * + * @param dictCodes 需要删除的字典数据ID + */ + @Override + public void deleteDictDataByIds (Long[] dictCodes) { + for (Long dictCode : dictCodes) { + SysDictData data = selectDictDataById(dictCode); + dictDataMapper.deleteDictDataById(dictCode); + List dictDatas = dictDataMapper.selectDictDataByType(data.getDictType()); + DictUtils.setDictCache(data.getDictType(), dictDatas); + } + } + + /** + * 新增保存字典数据信息 + * + * @param data 字典数据信息 + * + * @return 结果 + */ + @Override + public int insertDictData (SysDictData data) { + int row = dictDataMapper.insertDictData(data); + if (row > 0) { + List dictDatas = dictDataMapper.selectDictDataByType(data.getDictType()); + DictUtils.setDictCache(data.getDictType(), dictDatas); + } + return row; + } + + /** + * 修改保存字典数据信息 + * + * @param data 字典数据信息 + * + * @return 结果 + */ + @Override + public int updateDictData (SysDictData data) { + int row = dictDataMapper.updateDictData(data); + if (row > 0) { + List dictDatas = dictDataMapper.selectDictDataByType(data.getDictType()); + DictUtils.setDictCache(data.getDictType(), dictDatas); + } + return row; + } +} diff --git a/cloud-system-server/src/main/java/com/muyu/system/service/impl/SysDictTypeServiceImpl.java b/cloud-system-server/src/main/java/com/muyu/system/service/impl/SysDictTypeServiceImpl.java new file mode 100644 index 0000000..4117411 --- /dev/null +++ b/cloud-system-server/src/main/java/com/muyu/system/service/impl/SysDictTypeServiceImpl.java @@ -0,0 +1,210 @@ +package com.muyu.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.muyu.common.core.constant.UserConstants; +import com.muyu.common.core.exception.ServiceException; +import com.muyu.common.core.utils.StringUtils; +import com.muyu.common.security.utils.DictUtils; +import com.muyu.common.system.domain.SysDictData; +import com.muyu.common.system.domain.SysDictType; +import com.muyu.system.mapper.SysDictDataMapper; +import com.muyu.system.mapper.SysDictTypeMapper; +import com.muyu.system.service.SysDictTypeService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.PostConstruct; +import java.util.Comparator; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +/** + * 字典 业务层处理 + * + * @author muyu + */ +@Service +public class SysDictTypeServiceImpl extends ServiceImpl implements SysDictTypeService { + @Autowired + private SysDictTypeMapper dictTypeMapper; + + @Autowired + private SysDictDataMapper dictDataMapper; + + /** + * 项目启动时,初始化字典到缓存 + */ + @PostConstruct + public void init () { + loadingDictCache(); + } + + /** + * 根据条件分页查询字典类型 + * + * @param dictType 字典类型信息 + * + * @return 字典类型集合信息 + */ + @Override + public List selectDictTypeList (SysDictType dictType) { + return dictTypeMapper.selectDictTypeList(dictType); + } + + /** + * 根据所有字典类型 + * + * @return 字典类型集合信息 + */ + @Override + public List selectDictTypeAll () { + return dictTypeMapper.selectDictTypeAll(); + } + + /** + * 根据字典类型查询字典数据 + * + * @param dictType 字典类型 + * + * @return 字典数据集合信息 + */ + @Override + public List selectDictDataByType (String dictType) { + List dictDatas = DictUtils.getDictCache(dictType); + if (StringUtils.isNotEmpty(dictDatas)) { + return dictDatas; + } + dictDatas = dictDataMapper.selectDictDataByType(dictType); + if (StringUtils.isNotEmpty(dictDatas)) { + DictUtils.setDictCache(dictType, dictDatas); + return dictDatas; + } + return null; + } + + /** + * 根据字典类型ID查询信息 + * + * @param dictId 字典类型ID + * + * @return 字典类型 + */ + @Override + public SysDictType selectDictTypeById (Long dictId) { + return dictTypeMapper.selectDictTypeById(dictId); + } + + /** + * 根据字典类型查询信息 + * + * @param dictType 字典类型 + * + * @return 字典类型 + */ + @Override + public SysDictType selectDictTypeByType (String dictType) { + return dictTypeMapper.selectDictTypeByType(dictType); + } + + /** + * 批量删除字典类型信息 + * + * @param dictIds 需要删除的字典ID + */ + @Override + public void deleteDictTypeByIds (Long[] dictIds) { + for (Long dictId : dictIds) { + SysDictType dictType = selectDictTypeById(dictId); + if (dictDataMapper.countDictDataByType(dictType.getDictType()) > 0) { + throw new ServiceException(String.format("%1$s已分配,不能删除", dictType.getDictName())); + } + dictTypeMapper.deleteDictTypeById(dictId); + DictUtils.removeDictCache(dictType.getDictType()); + } + } + + /** + * 加载字典缓存数据 + */ + @Override + public void loadingDictCache () { + SysDictData dictData = new SysDictData(); + dictData.setStatus("0"); + Map> dictDataMap = dictDataMapper.selectDictDataList(dictData).stream().collect(Collectors.groupingBy(SysDictData::getDictType)); + for (Map.Entry> entry : dictDataMap.entrySet()) { + DictUtils.setDictCache(entry.getKey(), entry.getValue().stream().sorted(Comparator.comparing(SysDictData::getDictSort)).collect(Collectors.toList())); + } + } + + /** + * 清空字典缓存数据 + */ + @Override + public void clearDictCache () { + DictUtils.clearDictCache(); + } + + /** + * 重置字典缓存数据 + */ + @Override + public void resetDictCache () { + clearDictCache(); + loadingDictCache(); + } + + /** + * 新增保存字典类型信息 + * + * @param dict 字典类型信息 + * + * @return 结果 + */ + @Override + public int insertDictType (SysDictType dict) { + int row = dictTypeMapper.insertDictType(dict); + if (row > 0) { + DictUtils.setDictCache(dict.getDictType(), null); + } + return row; + } + + /** + * 修改保存字典类型信息 + * + * @param dict 字典类型信息 + * + * @return 结果 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public int updateDictType (SysDictType dict) { + SysDictType oldDict = dictTypeMapper.selectDictTypeById(dict.getDictId()); + dictDataMapper.updateDictDataType(oldDict.getDictType(), dict.getDictType()); + int row = dictTypeMapper.updateDictType(dict); + if (row > 0) { + List dictDatas = dictDataMapper.selectDictDataByType(dict.getDictType()); + DictUtils.setDictCache(dict.getDictType(), dictDatas); + } + return row; + } + + /** + * 校验字典类型称是否唯一 + * + * @param dict 字典类型 + * + * @return 结果 + */ + @Override + public boolean checkDictTypeUnique (SysDictType dict) { + Long dictId = StringUtils.isNull(dict.getDictId()) ? -1L : dict.getDictId(); + SysDictType dictType = dictTypeMapper.checkDictTypeUnique(dict.getDictType()); + if (StringUtils.isNotNull(dictType) && dictType.getDictId().longValue() != dictId.longValue()) { + return UserConstants.NOT_UNIQUE; + } + return UserConstants.UNIQUE; + } +} diff --git a/cloud-system-server/src/main/java/com/muyu/system/service/impl/SysLogininforServiceImpl.java b/cloud-system-server/src/main/java/com/muyu/system/service/impl/SysLogininforServiceImpl.java new file mode 100644 index 0000000..1a7c7a0 --- /dev/null +++ b/cloud-system-server/src/main/java/com/muyu/system/service/impl/SysLogininforServiceImpl.java @@ -0,0 +1,64 @@ +package com.muyu.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.muyu.common.system.domain.SysLogininfor; +import com.muyu.system.mapper.SysLogininforMapper; +import com.muyu.system.service.SysLogininforService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 系统访问日志情况信息 服务层处理 + * + * @author muyu + */ +@Service +public class SysLogininforServiceImpl extends ServiceImpl implements SysLogininforService { + + @Autowired + private SysLogininforMapper logininforMapper; + + /** + * 新增系统登录日志 + * + * @param logininfor 访问日志对象 + */ + @Override + public int insertLogininfor (SysLogininfor logininfor) { + return logininforMapper.insertLogininfor(logininfor); + } + + /** + * 查询系统登录日志集合 + * + * @param logininfor 访问日志对象 + * + * @return 登录记录集合 + */ + @Override + public List selectLogininforList (SysLogininfor logininfor) { + return logininforMapper.selectLogininforList(logininfor); + } + + /** + * 批量删除系统登录日志 + * + * @param infoIds 需要删除的登录日志ID + * + * @return 结果 + */ + @Override + public int deleteLogininforByIds (Long[] infoIds) { + return logininforMapper.deleteLogininforByIds(infoIds); + } + + /** + * 清空系统登录日志 + */ + @Override + public void cleanLogininfor () { + logininforMapper.cleanLogininfor(); + } +} diff --git a/cloud-system-server/src/main/java/com/muyu/system/service/impl/SysMenuServiceImpl.java b/cloud-system-server/src/main/java/com/muyu/system/service/impl/SysMenuServiceImpl.java new file mode 100644 index 0000000..654138c --- /dev/null +++ b/cloud-system-server/src/main/java/com/muyu/system/service/impl/SysMenuServiceImpl.java @@ -0,0 +1,502 @@ +package com.muyu.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.muyu.common.core.constant.Constants; +import com.muyu.common.core.constant.UserConstants; +import com.muyu.common.core.utils.StringUtils; +import com.muyu.common.security.utils.SecurityUtils; +import com.muyu.common.system.domain.SysRole; +import com.muyu.common.system.domain.SysUser; +import com.muyu.system.domain.SysMenu; +import com.muyu.system.domain.vo.MetaVo; +import com.muyu.system.domain.vo.RouterVo; +import com.muyu.system.domain.vo.TreeSelect; +import com.muyu.system.mapper.SysMenuMapper; +import com.muyu.system.mapper.SysRoleMapper; +import com.muyu.system.mapper.SysRoleMenuMapper; +import com.muyu.system.service.SysMenuService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.*; +import java.util.stream.Collectors; + +/** + * 菜单 业务层处理 + * + * @author muyu + */ +@Service +public class SysMenuServiceImpl extends ServiceImpl implements SysMenuService { + public static final String PREMISSION_STRING = "perms[\"{0}\"]"; + + @Autowired + private SysMenuMapper menuMapper; + + @Autowired + private SysRoleMapper roleMapper; + + @Autowired + private SysRoleMenuMapper roleMenuMapper; + + /** + * 根据用户查询系统菜单列表 + * + * @param userId 用户ID + * + * @return 菜单列表 + */ + @Override + public List selectMenuList (Long userId) { + return selectMenuList(new SysMenu(), userId); + } + + /** + * 查询系统菜单列表 + * + * @param menu 菜单信息 + * + * @return 菜单列表 + */ + @Override + public List selectMenuList (SysMenu menu, Long userId) { + List menuList = null; + // 管理员显示所有菜单信息 + if (SysUser.isAdmin(userId)) { + menuList = menuMapper.selectMenuList(menu); + } else { + menu.getParams().put("userId", userId); + menuList = menuMapper.selectMenuListByUserId(menu); + } + //TODO 新方法,将菜单初步查询到的数据在查询 + return menuMapper.selectMenuListByParentIds(menuList); + } + + /** + * 根据用户ID查询权限 + * + * @param userId 用户ID + * + * @return 权限列表 + */ + @Override + public Set selectMenuPermsByUserId (Long userId) { + List perms = menuMapper.selectMenuPermsByUserId(userId); + Set permsSet = new HashSet<>(); + for (String perm : perms) { + if (StringUtils.isNotEmpty(perm)) { + permsSet.addAll(Arrays.asList(perm.trim().split(","))); + } + } + return permsSet; + } + + /** + * 根据角色ID查询权限 + * + * @param roleId 角色ID + * + * @return 权限列表 + */ + @Override + public Set selectMenuPermsByRoleId (Long roleId) { + List perms = menuMapper.selectMenuPermsByRoleId(roleId); + Set permsSet = new HashSet<>(); + for (String perm : perms) { + if (StringUtils.isNotEmpty(perm)) { + permsSet.addAll(Arrays.asList(perm.trim().split(","))); + } + } + return permsSet; + } + + /** + * 根据用户ID查询菜单 + * + * @param userId 用户名称 + * + * @return 菜单列表 + */ + @Override + public List selectMenuTreeByUserId (Long userId) { + List menus = null; + if (SecurityUtils.isAdmin(userId)) { + menus = menuMapper.selectMenuTreeAll(); + } else { + menus = menuMapper.selectMenuTreeByUserId(userId); + } + return getChildPerms(menus, 0); + } + + /** + * 根据角色ID查询菜单树信息 + * + * @param roleId 角色ID + * + * @return 选中菜单列表 + */ + @Override + public List selectMenuListByRoleId (Long roleId) { + SysRole role = roleMapper.selectRoleById(roleId); + return menuMapper.selectMenuListByRoleId(roleId, role.isMenuCheckStrictly()); + } + + /** + * 构建前端路由所需要的菜单 + * + * @param menus 菜单列表 + * + * @return 路由列表 + */ + @Override + public List buildMenus (List menus) { + List routers = new LinkedList(); + for (SysMenu menu : menus) { + RouterVo router = new RouterVo(); + router.setHidden("1".equals(menu.getVisible())); + router.setName(getRouteName(menu)); + router.setPath(getRouterPath(menu)); + router.setComponent(getComponent(menu)); + router.setQuery(menu.getQuery()); + router.setMeta( + MetaVo.builder() + .title(menu.getMenuName()) + .icon(menu.getIcon()) + .noCache(StringUtils.equals("1", menu.getIsCache())) + .link(StringUtils.ishttp(menu.getPath())? menu.getPath():null) + .build() + ); + List cMenus = menu.getChildren(); + if (StringUtils.isNotEmpty(cMenus) && UserConstants.TYPE_DIR.equals(menu.getMenuType())) { + router.setAlwaysShow(true); + router.setRedirect("noRedirect"); + router.setChildren(buildMenus(cMenus)); + } else if (isMenuFrame(menu)) { + router.setMeta(null); + List childrenList = new ArrayList(); + RouterVo children = new RouterVo(); + children.setPath(menu.getPath()); + children.setComponent(menu.getComponent()); + children.setName(StringUtils.capitalize(menu.getPath())); + children.setMeta( + MetaVo.builder() + .title(menu.getMenuName()) + .icon(menu.getIcon()) + .noCache(StringUtils.equals("1", menu.getIsCache())) + .link(StringUtils.ishttp(menu.getPath())? menu.getPath():null) + .build() + ); + children.setQuery(menu.getQuery()); + childrenList.add(children); + router.setChildren(childrenList); + } else if (menu.getParentId().intValue() == 0 && isInnerLink(menu)) { + router.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon())); + router.setPath("/"); + List childrenList = new ArrayList(); + RouterVo children = new RouterVo(); + String routerPath = innerLinkReplaceEach(menu.getPath()); + children.setPath(routerPath); + children.setComponent(UserConstants.INNER_LINK); + children.setName(StringUtils.capitalize(routerPath)); + children.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon(), menu.getPath())); + childrenList.add(children); + router.setChildren(childrenList); + } + routers.add(router); + } + return routers; + } + + /** + * 构建前端所需要树结构 + * + * @param menus 菜单列表 + * + * @return 树结构列表 + */ + @Override + public List buildMenuTree (List menus) { + List returnList = new ArrayList(); + List tempList = menus.stream().map(SysMenu::getMenuId).collect(Collectors.toList()); + for (Iterator iterator = menus.iterator() ; iterator.hasNext() ; ) { + SysMenu menu = (SysMenu) iterator.next(); + // 如果是顶级节点, 遍历该父节点的所有子节点 + if (!tempList.contains(menu.getParentId())) { + recursionFn(menus, menu); + returnList.add(menu); + } + } + if (returnList.isEmpty()) { + returnList = menus; + } + return returnList; + } + + /** + * 构建前端所需要下拉树结构 + * + * @param menus 菜单列表 + * + * @return 下拉树结构列表 + */ + @Override + public List buildMenuTreeSelect (List menus) { + List menuTrees = buildMenuTree(menus); + return menuTrees.stream().map(TreeSelect::new).collect(Collectors.toList()); + } + + /** + * 根据菜单ID查询信息 + * + * @param menuId 菜单ID + * + * @return 菜单信息 + */ + @Override + public SysMenu selectMenuById (Long menuId) { + return menuMapper.selectMenuById(menuId); + } + + /** + * 是否存在菜单子节点 + * + * @param menuId 菜单ID + * + * @return 结果 + */ + @Override + public boolean hasChildByMenuId (Long menuId) { + int result = menuMapper.hasChildByMenuId(menuId); + return result > 0; + } + + /** + * 查询菜单使用数量 + * + * @param menuId 菜单ID + * + * @return 结果 + */ + @Override + public boolean checkMenuExistRole (Long menuId) { + int result = roleMenuMapper.checkMenuExistRole(menuId); + return result > 0; + } + + /** + * 新增保存菜单信息 + * + * @param menu 菜单信息 + * + * @return 结果 + */ + @Override + public int insertMenu (SysMenu menu) { + return menuMapper.insertMenu(menu); + } + + /** + * 修改保存菜单信息 + * + * @param menu 菜单信息 + * + * @return 结果 + */ + @Override + public int updateMenu (SysMenu menu) { + return menuMapper.updateMenu(menu); + } + + /** + * 删除菜单管理信息 + * + * @param menuId 菜单ID + * + * @return 结果 + */ + @Override + public int deleteMenuById (Long menuId) { + return menuMapper.deleteMenuById(menuId); + } + + /** + * 校验菜单名称是否唯一 + * + * @param menu 菜单信息 + * + * @return 结果 + */ + @Override + public boolean checkMenuNameUnique (SysMenu menu) { + Long menuId = StringUtils.isNull(menu.getMenuId()) ? -1L : menu.getMenuId(); + SysMenu info = menuMapper.checkMenuNameUnique(menu.getMenuName(), menu.getParentId()); + if (StringUtils.isNotNull(info) && info.getMenuId().longValue() != menuId.longValue()) { + return UserConstants.NOT_UNIQUE; + } + return UserConstants.UNIQUE; + } + + /** + * 获取路由名称 + * + * @param menu 菜单信息 + * + * @return 路由名称 + */ + public String getRouteName (SysMenu menu) { + String routerName = StringUtils.capitalize(menu.getPath()); + // 非外链并且是一级目录(类型为目录) + if (isMenuFrame(menu)) { + routerName = StringUtils.EMPTY; + } + return routerName; + } + + /** + * 获取路由地址 + * + * @param menu 菜单信息 + * + * @return 路由地址 + */ + public String getRouterPath (SysMenu menu) { + String routerPath = menu.getPath(); + // 内链打开外网方式 + if (menu.getParentId().intValue() != 0 && isInnerLink(menu)) { + routerPath = innerLinkReplaceEach(routerPath); + } + // 非外链并且是一级目录(类型为目录) + if (0 == menu.getParentId().intValue() && UserConstants.TYPE_DIR.equals(menu.getMenuType()) + && UserConstants.NO_FRAME.equals(menu.getIsFrame())) { + routerPath = "/" + menu.getPath(); + } + // 非外链并且是一级目录(类型为菜单) + else if (isMenuFrame(menu)) { + routerPath = "/"; + } + return routerPath; + } + + /** + * 获取组件信息 + * + * @param menu 菜单信息 + * + * @return 组件信息 + */ + public String getComponent (SysMenu menu) { + String component = UserConstants.LAYOUT; + if (StringUtils.isNotEmpty(menu.getComponent()) && !isMenuFrame(menu)) { + component = menu.getComponent(); + } else if (StringUtils.isEmpty(menu.getComponent()) && menu.getParentId().intValue() != 0 && isInnerLink(menu)) { + component = UserConstants.INNER_LINK; + } else if (StringUtils.isEmpty(menu.getComponent()) && isParentView(menu)) { + component = UserConstants.PARENT_VIEW; + } + return component; + } + + /** + * 是否为菜单内部跳转 + * + * @param menu 菜单信息 + * + * @return 结果 + */ + public boolean isMenuFrame (SysMenu menu) { + return menu.getParentId().intValue() == 0 && UserConstants.TYPE_MENU.equals(menu.getMenuType()) + && menu.getIsFrame().equals(UserConstants.NO_FRAME); + } + + /** + * 是否为内链组件 + * + * @param menu 菜单信息 + * + * @return 结果 + */ + public boolean isInnerLink (SysMenu menu) { + return menu.getIsFrame().equals(UserConstants.NO_FRAME) && StringUtils.ishttp(menu.getPath()); + } + + /** + * 是否为parent_view组件 + * + * @param menu 菜单信息 + * + * @return 结果 + */ + public boolean isParentView (SysMenu menu) { + return menu.getParentId().intValue() != 0 && UserConstants.TYPE_DIR.equals(menu.getMenuType()); + } + + /** + * 根据父节点的ID获取所有子节点 + * + * @param list 分类表 + * @param parentId 传入的父节点ID + * + * @return String + */ + public List getChildPerms (List list, int parentId) { + List returnList = new ArrayList(); + for (Iterator iterator = list.iterator() ; iterator.hasNext() ; ) { + SysMenu t = (SysMenu) iterator.next(); + // 一、根据传入的某个父节点ID,遍历该父节点的所有子节点 + if (t.getParentId() == parentId) { + recursionFn(list, t); + returnList.add(t); + } + } + return returnList; + } + + /** + * 递归列表 + * + * @param list 分类表 + * @param t 子节点 + */ + private void recursionFn (List list, SysMenu t) { + // 得到子节点列表 + List childList = getChildList(list, t); + t.setChildren(childList); + for (SysMenu tChild : childList) { + if (hasChild(list, tChild)) { + recursionFn(list, tChild); + } + } + } + + /** + * 得到子节点列表 + */ + private List getChildList (List list, SysMenu t) { + List tlist = new ArrayList(); + Iterator it = list.iterator(); + while (it.hasNext()) { + SysMenu n = (SysMenu) it.next(); + if (n.getParentId().longValue() == t.getMenuId().longValue()) { + tlist.add(n); + } + } + return tlist; + } + + /** + * 判断是否有子节点 + */ + private boolean hasChild (List list, SysMenu t) { + return getChildList(list, t).size() > 0; + } + + /** + * 内链域名特殊字符替换 + * + * @return 替换后的内链域名 + */ + public String innerLinkReplaceEach (String path) { + return StringUtils.replaceEach(path, new String[]{Constants.HTTP, Constants.HTTPS, Constants.WWW, ".", ":"}, + new String[]{"", "", "", "/", "/"}); + } +} diff --git a/cloud-system-server/src/main/java/com/muyu/system/service/impl/SysNoticeServiceImpl.java b/cloud-system-server/src/main/java/com/muyu/system/service/impl/SysNoticeServiceImpl.java new file mode 100644 index 0000000..32605f3 --- /dev/null +++ b/cloud-system-server/src/main/java/com/muyu/system/service/impl/SysNoticeServiceImpl.java @@ -0,0 +1,156 @@ +package com.muyu.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.muyu.common.security.service.TokenService; +import com.muyu.common.system.domain.LoginUser; +import com.muyu.system.domain.SysNotice; +import com.muyu.system.domain.resp.UserNoticeRes; +import com.muyu.system.domain.vo.UserNoticeReq; +import com.muyu.system.mapper.SysNoticeMapper; +import com.muyu.system.mapper.SysUserMapper; +import com.muyu.system.service.SysNoticeService; +import jakarta.servlet.http.HttpServletRequest; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +/** + * 公告 服务层实现 + * + * @author muyu + */ +@Service +public class SysNoticeServiceImpl extends ServiceImpl implements SysNoticeService { + @Autowired + private SysNoticeMapper noticeMapper; + @Autowired + private SysUserMapper userMapper; + @Autowired + private TokenService tokenService; + @Autowired + private HttpServletRequest request; + + /** + * 查询公告信息 + * + * @param noticeId 公告ID + * + * @return 公告信息 + */ + @Override + public SysNotice selectNoticeById (Long noticeId) { + return noticeMapper.selectNoticeById(noticeId); + } + + /** + * 查询公告列表 + * + * @param notice 公告信息 + * + * @return 公告集合 + */ + @Override + public List selectNoticeList (SysNotice notice) { + return noticeMapper.selectNoticeList(notice); + } + + /** + * 新增公告 + * + * @param notice 公告信息 + * + * @return 结果 + */ + @Override + public int insertNotice (SysNotice notice) { + if (notice.getNoticeType().equals("1")){ + notice.setEndTime(""); + } + //添加通知表 + int i = noticeMapper.insertNotice(notice); + + List list=new ArrayList<>(); + + //判断部门多选是否为空 ,如果不为空 查询总人数 + if (notice.getNoticeType().equals("1")&¬ice.getCheckDeptList().length>0){ + list=userMapper.findUserByDept(notice.getCheckDeptList()); + } + //判断人员多选是否为空 ,如果不为空 + if (notice.getNoticeType().equals("1")&¬ice.getCheckUserList().length>0){ + for (Integer userId : notice.getCheckUserList()) { + list.add(userId); + } + } + //如果通知类型为公告 通知所有人 + if (notice.getNoticeType().equals("2")){ + list=userMapper.findAllUser(); + } + //添加信息中间表 + noticeMapper.addUserNotice(list,notice.getNoticeId(),notice.getEndTime()); + + return i; + } + + /** + * 修改公告 + * + * @param notice 公告信息 + * + * @return 结果 + */ + @Override + public int updateNotice (SysNotice notice) { + return noticeMapper.updateNotice(notice); + } + + /** + * 删除公告对象 + * + * @param noticeId 公告ID + * + * @return 结果 + */ + @Override + public int deleteNoticeById (Long noticeId) { + return noticeMapper.deleteNoticeById(noticeId); + } + + /** + * 批量删除公告信息 + * + * @param noticeIds 需要删除的公告ID + * + * @return 结果 + */ + @Override + public int deleteNoticeByIds (Long[] noticeIds) { + return noticeMapper.deleteNoticeByIds(noticeIds); + } + + @Override + public List findNoticeByUserId(UserNoticeReq notice) { + LoginUser loginUser = tokenService.getLoginUser(request); + notice.setUserId(loginUser.getUserid()); + + return noticeMapper.findNoticeByUserId(notice); + } + + + + @Override + public void updNoticeStatus(Integer id) { + noticeMapper.updNoticeStatus(id); + } + + @Override + public String findNoticeSumByUserId(String noticeId) { + return noticeMapper.findNoticeSumByUserId(noticeId); + } + + @Override + public String findNoticeCountByUserId(String noticeId) { + return noticeMapper.findNoticeCountByUserId(noticeId); + } +} diff --git a/cloud-system-server/src/main/java/com/muyu/system/service/impl/SysOperLogServiceImpl.java b/cloud-system-server/src/main/java/com/muyu/system/service/impl/SysOperLogServiceImpl.java new file mode 100644 index 0000000..24e7d39 --- /dev/null +++ b/cloud-system-server/src/main/java/com/muyu/system/service/impl/SysOperLogServiceImpl.java @@ -0,0 +1,77 @@ +package com.muyu.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.muyu.common.system.domain.SysOperLog; +import com.muyu.system.mapper.SysOperLogMapper; +import com.muyu.system.service.SysOperLogService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 操作日志 服务层处理 + * + * @author muyu + */ +@Service +public class SysOperLogServiceImpl extends ServiceImpl implements SysOperLogService { + @Autowired + private SysOperLogMapper operLogMapper; + + /** + * 新增操作日志 + * + * @param operLog 操作日志对象 + * + * @return 结果 + */ + @Override + public int insertOperlog (SysOperLog operLog) { + return operLogMapper.insertOperlog(operLog); + } + + /** + * 查询系统操作日志集合 + * + * @param operLog 操作日志对象 + * + * @return 操作日志集合 + */ + @Override + public List selectOperLogList (SysOperLog operLog) { + return operLogMapper.selectOperLogList(operLog); + } + + /** + * 批量删除系统操作日志 + * + * @param operIds 需要删除的操作日志ID + * + * @return 结果 + */ + @Override + public int deleteOperLogByIds (Long[] operIds) { + return operLogMapper.deleteOperLogByIds(operIds); + } + + /** + * 查询操作日志详细 + * + * @param operId 操作ID + * + * @return 操作日志对象 + */ + @Override + public SysOperLog selectOperLogById (Long operId) { + return operLogMapper.selectOperLogById(operId); + } + + /** + * 清空操作日志 + */ + @Override + public void cleanOperLog () { + operLogMapper.cleanOperLog(); + } +} diff --git a/cloud-system-server/src/main/java/com/muyu/system/service/impl/SysPermissionServiceImpl.java b/cloud-system-server/src/main/java/com/muyu/system/service/impl/SysPermissionServiceImpl.java new file mode 100644 index 0000000..0e260db --- /dev/null +++ b/cloud-system-server/src/main/java/com/muyu/system/service/impl/SysPermissionServiceImpl.java @@ -0,0 +1,76 @@ +package com.muyu.system.service.impl; + +import com.muyu.common.system.domain.SysRole; +import com.muyu.common.system.domain.SysUser; +import com.muyu.system.service.SysMenuService; +import com.muyu.system.service.SysPermissionService; +import com.muyu.system.service.SysRoleService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +/** + * 用户权限处理 + * + * @author muyu + */ +@Service +public class SysPermissionServiceImpl implements SysPermissionService { + @Autowired + private SysRoleService roleService; + + @Autowired + private SysMenuService menuService; + + /** + * 获取角色数据权限 + * + * @param userId 用户Id + * + * @return 角色权限信息 + */ + @Override + public Set getRolePermission (SysUser user) { + Set roles = new HashSet(); + // 管理员拥有所有权限 + if (user.isAdmin()) { + roles.add("admin"); + } else { + roles.addAll(roleService.selectRolePermissionByUserId(user.getUserId())); + } + return roles; + } + + /** + * 获取菜单数据权限 + * + * @param userId 用户Id + * + * @return 菜单权限信息 + */ + @Override + public Set getMenuPermission (SysUser user) { + Set perms = new HashSet(); + // 管理员拥有所有权限 + if (user.isAdmin()) { + perms.add("*:*:*"); + } else { + List roles = user.getRoles(); + if (!CollectionUtils.isEmpty(roles)) { + // 多角色设置permissions属性,以便数据权限匹配权限 + for (SysRole role : roles) { + Set rolePerms = menuService.selectMenuPermsByRoleId(role.getRoleId()); + role.setPermissions(rolePerms); + perms.addAll(rolePerms); + } + } else { + perms.addAll(menuService.selectMenuPermsByUserId(user.getUserId())); + } + } + return perms; + } +} diff --git a/cloud-system-server/src/main/java/com/muyu/system/service/impl/SysPostServiceImpl.java b/cloud-system-server/src/main/java/com/muyu/system/service/impl/SysPostServiceImpl.java new file mode 100644 index 0000000..457ac5a --- /dev/null +++ b/cloud-system-server/src/main/java/com/muyu/system/service/impl/SysPostServiceImpl.java @@ -0,0 +1,174 @@ +package com.muyu.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.muyu.common.core.constant.UserConstants; +import com.muyu.common.core.exception.ServiceException; +import com.muyu.common.core.utils.StringUtils; +import com.muyu.system.domain.SysPost; +import com.muyu.system.mapper.SysPostMapper; +import com.muyu.system.mapper.SysUserPostMapper; +import com.muyu.system.service.SysPostService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + +/** + * 岗位信息 服务层处理 + * + * @author muyu + */ +@Service +public class SysPostServiceImpl extends ServiceImpl implements SysPostService { + @Autowired + private SysPostMapper postMapper; + + @Autowired + private SysUserPostMapper userPostMapper; + + /** + * 查询岗位信息集合 + * + * @param post 岗位信息 + * + * @return 岗位信息集合 + */ + @Override + public List selectPostList (SysPost post) { + return postMapper.selectPostList(post); + } + + /** + * 查询所有岗位 + * + * @return 岗位列表 + */ + @Override + public List selectPostAll () { + return postMapper.selectPostAll(); + } + + /** + * 通过岗位ID查询岗位信息 + * + * @param postId 岗位ID + * + * @return 角色对象信息 + */ + @Override + public SysPost selectPostById (Long postId) { + return postMapper.selectPostById(postId); + } + + /** + * 根据用户ID获取岗位选择框列表 + * + * @param userId 用户ID + * + * @return 选中岗位ID列表 + */ + @Override + public List selectPostListByUserId (Long userId) { + return postMapper.selectPostListByUserId(userId); + } + + /** + * 校验岗位名称是否唯一 + * + * @param post 岗位信息 + * + * @return 结果 + */ + @Override + public boolean checkPostNameUnique (SysPost post) { + Long postId = StringUtils.isNull(post.getPostId()) ? -1L : post.getPostId(); + SysPost info = postMapper.checkPostNameUnique(post.getPostName()); + if (StringUtils.isNotNull(info) && info.getPostId().longValue() != postId.longValue()) { + return UserConstants.NOT_UNIQUE; + } + return UserConstants.UNIQUE; + } + + /** + * 校验岗位编码是否唯一 + * + * @param post 岗位信息 + * + * @return 结果 + */ + @Override + public boolean checkPostCodeUnique (SysPost post) { + Long postId = StringUtils.isNull(post.getPostId()) ? -1L : post.getPostId(); + SysPost info = postMapper.checkPostCodeUnique(post.getPostCode()); + if (StringUtils.isNotNull(info) && info.getPostId().longValue() != postId.longValue()) { + return UserConstants.NOT_UNIQUE; + } + return UserConstants.UNIQUE; + } + + /** + * 通过岗位ID查询岗位使用数量 + * + * @param postId 岗位ID + * + * @return 结果 + */ + @Override + public int countUserPostById (Long postId) { + return userPostMapper.countUserPostById(postId); + } + + /** + * 删除岗位信息 + * + * @param postId 岗位ID + * + * @return 结果 + */ + @Override + public int deletePostById (Long postId) { + return postMapper.deletePostById(postId); + } + + /** + * 批量删除岗位信息 + * + * @param postIds 需要删除的岗位ID + * + * @return 结果 + */ + @Override + public int deletePostByIds (Long[] postIds) { + for (Long postId : postIds) { + SysPost post = selectPostById(postId); + if (countUserPostById(postId) > 0) { + throw new ServiceException(String.format("%1$s已分配,不能删除", post.getPostName())); + } + } + return postMapper.deletePostByIds(postIds); + } + + /** + * 新增保存岗位信息 + * + * @param post 岗位信息 + * + * @return 结果 + */ + @Override + public int insertPost (SysPost post) { + return postMapper.insertPost(post); + } + + /** + * 修改保存岗位信息 + * + * @param post 岗位信息 + * + * @return 结果 + */ + @Override + public int updatePost (SysPost post) { + return postMapper.updatePost(post); + } +} diff --git a/cloud-system-server/src/main/java/com/muyu/system/service/impl/SysRoleServiceImpl.java b/cloud-system-server/src/main/java/com/muyu/system/service/impl/SysRoleServiceImpl.java new file mode 100644 index 0000000..fa832da --- /dev/null +++ b/cloud-system-server/src/main/java/com/muyu/system/service/impl/SysRoleServiceImpl.java @@ -0,0 +1,399 @@ +package com.muyu.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.muyu.common.core.constant.UserConstants; +import com.muyu.common.core.exception.ServiceException; +import com.muyu.common.core.utils.SpringUtils; +import com.muyu.common.core.utils.StringUtils; +import com.muyu.common.datascope.annotation.DataScope; +import com.muyu.common.security.utils.SecurityUtils; +import com.muyu.common.system.domain.SysRole; +import com.muyu.common.system.domain.SysUser; +import com.muyu.system.domain.SysRoleDept; +import com.muyu.system.domain.SysRoleMenu; +import com.muyu.system.domain.SysUserRole; +import com.muyu.system.mapper.SysRoleDeptMapper; +import com.muyu.system.mapper.SysRoleMapper; +import com.muyu.system.mapper.SysRoleMenuMapper; +import com.muyu.system.mapper.SysUserRoleMapper; +import com.muyu.system.service.SysRoleService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.*; + +/** + * 角色 业务层处理 + * + * @author muyu + */ +@Service +public class SysRoleServiceImpl extends ServiceImpl implements SysRoleService { + @Autowired + private SysRoleMapper roleMapper; + + @Autowired + private SysRoleMenuMapper roleMenuMapper; + + @Autowired + private SysUserRoleMapper userRoleMapper; + + @Autowired + private SysRoleDeptMapper roleDeptMapper; + + /** + * 根据条件分页查询角色数据 + * + * @param role 角色信息 + * + * @return 角色数据集合信息 + */ + @Override + @DataScope(deptAlias = "d") + public List selectRoleList (SysRole role) { + return roleMapper.selectRoleList(role); + } + + /** + * 根据用户ID查询角色 + * + * @param userId 用户ID + * + * @return 角色列表 + */ + @Override + public List selectRolesByUserId (Long userId) { + List userRoles = roleMapper.selectRolePermissionByUserId(userId); + List roles = selectRoleAll(); + for (SysRole role : roles) { + for (SysRole userRole : userRoles) { + if (role.getRoleId().longValue() == userRole.getRoleId().longValue()) { + role.setFlag(true); + break; + } + } + } + return roles; + } + + /** + * 根据用户ID查询权限 + * + * @param userId 用户ID + * + * @return 权限列表 + */ + @Override + public Set selectRolePermissionByUserId (Long userId) { + List perms = roleMapper.selectRolePermissionByUserId(userId); + Set permsSet = new HashSet<>(); + for (SysRole perm : perms) { + if (StringUtils.isNotNull(perm)) { + permsSet.addAll(Arrays.asList(perm.getRoleKey().trim().split(","))); + } + } + return permsSet; + } + + /** + * 查询所有角色 + * + * @return 角色列表 + */ + @Override + public List selectRoleAll () { + return SpringUtils.getAopProxy(this).selectRoleList(new SysRole()); + } + + /** + * 根据用户ID获取角色选择框列表 + * + * @param userId 用户ID + * + * @return 选中角色ID列表 + */ + @Override + public List selectRoleListByUserId (Long userId) { + return roleMapper.selectRoleListByUserId(userId); + } + + /** + * 通过角色ID查询角色 + * + * @param roleId 角色ID + * + * @return 角色对象信息 + */ + @Override + public SysRole selectRoleById (Long roleId) { + return roleMapper.selectRoleById(roleId); + } + + /** + * 校验角色名称是否唯一 + * + * @param role 角色信息 + * + * @return 结果 + */ + @Override + public boolean checkRoleNameUnique (SysRole role) { + Long roleId = StringUtils.isNull(role.getRoleId()) ? -1L : role.getRoleId(); + SysRole info = roleMapper.checkRoleNameUnique(role.getRoleName()); + if (StringUtils.isNotNull(info) && info.getRoleId().longValue() != roleId.longValue()) { + return UserConstants.NOT_UNIQUE; + } + return UserConstants.UNIQUE; + } + + /** + * 校验角色权限是否唯一 + * + * @param role 角色信息 + * + * @return 结果 + */ + @Override + public boolean checkRoleKeyUnique (SysRole role) { + Long roleId = StringUtils.isNull(role.getRoleId()) ? -1L : role.getRoleId(); + SysRole info = roleMapper.checkRoleKeyUnique(role.getRoleKey()); + if (StringUtils.isNotNull(info) && info.getRoleId().longValue() != roleId.longValue()) { + return UserConstants.NOT_UNIQUE; + } + return UserConstants.UNIQUE; + } + + /** + * 校验角色是否允许操作 + * + * @param role 角色信息 + */ + @Override + public void checkRoleAllowed (SysRole role) { + if (StringUtils.isNotNull(role.getRoleId()) && role.isAdmin()) { + throw new ServiceException("不允许操作超级管理员角色"); + } + } + + /** + * 校验角色是否有数据权限 + * + * @param roleId 角色id + */ + @Override + public void checkRoleDataScope (Long roleId) { + if (!SysUser.isAdmin(SecurityUtils.getUserId())) { + SysRole role = new SysRole(); + role.setRoleId(roleId); + List roles = SpringUtils.getAopProxy(this).selectRoleList(role); + if (StringUtils.isEmpty(roles)) { + throw new ServiceException("没有权限访问角色数据!"); + } + } + } + + /** + * 通过角色ID查询角色使用数量 + * + * @param roleId 角色ID + * + * @return 结果 + */ + @Override + public int countUserRoleByRoleId (Long roleId) { + return userRoleMapper.countUserRoleByRoleId(roleId); + } + + /** + * 新增保存角色信息 + * + * @param role 角色信息 + * + * @return 结果 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public int insertRole (SysRole role) { + // 新增角色信息 + roleMapper.insertRole(role); + return insertRoleMenu(role); + } + + /** + * 修改保存角色信息 + * + * @param role 角色信息 + * + * @return 结果 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public int updateRole (SysRole role) { + // 修改角色信息 + roleMapper.updateRole(role); + // 删除角色与菜单关联 + roleMenuMapper.deleteRoleMenuByRoleId(role.getRoleId()); + return insertRoleMenu(role); + } + + /** + * 修改角色状态 + * + * @param role 角色信息 + * + * @return 结果 + */ + @Override + public int updateRoleStatus (SysRole role) { + return roleMapper.updateRole(role); + } + + /** + * 修改数据权限信息 + * + * @param role 角色信息 + * + * @return 结果 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public int authDataScope (SysRole role) { + // 修改角色信息 + roleMapper.updateRole(role); + // 删除角色与部门关联 + roleDeptMapper.deleteRoleDeptByRoleId(role.getRoleId()); + // 新增角色和部门信息(数据权限) + return insertRoleDept(role); + } + + /** + * 新增角色菜单信息 + * + * @param role 角色对象 + */ + public int insertRoleMenu (SysRole role) { + int rows = 1; + // 新增用户与角色管理 + List list = new ArrayList(); + for (Long menuId : role.getMenuIds()) { + SysRoleMenu rm = new SysRoleMenu(); + rm.setRoleId(role.getRoleId()); + rm.setMenuId(menuId); + list.add(rm); + } + if (list.size() > 0) { + rows = roleMenuMapper.batchRoleMenu(list); + } + return rows; + } + + /** + * 新增角色部门信息(数据权限) + * + * @param role 角色对象 + */ + public int insertRoleDept (SysRole role) { + int rows = 1; + // 新增角色与部门(数据权限)管理 + List list = new ArrayList(); + for (Long deptId : role.getDeptIds()) { + SysRoleDept rd = new SysRoleDept(); + rd.setRoleId(role.getRoleId()); + rd.setDeptId(deptId); + list.add(rd); + } + if (list.size() > 0) { + rows = roleDeptMapper.batchRoleDept(list); + } + return rows; + } + + /** + * 通过角色ID删除角色 + * + * @param roleId 角色ID + * + * @return 结果 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public int deleteRoleById (Long roleId) { + // 删除角色与菜单关联 + roleMenuMapper.deleteRoleMenuByRoleId(roleId); + // 删除角色与部门关联 + roleDeptMapper.deleteRoleDeptByRoleId(roleId); + return roleMapper.deleteRoleById(roleId); + } + + /** + * 批量删除角色信息 + * + * @param roleIds 需要删除的角色ID + * + * @return 结果 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public int deleteRoleByIds (Long[] roleIds) { + for (Long roleId : roleIds) { + checkRoleAllowed(new SysRole(roleId)); + checkRoleDataScope(roleId); + SysRole role = selectRoleById(roleId); + if (countUserRoleByRoleId(roleId) > 0) { + throw new ServiceException(String.format("%1$s已分配,不能删除", role.getRoleName())); + } + } + // 删除角色与菜单关联 + roleMenuMapper.deleteRoleMenu(roleIds); + // 删除角色与部门关联 + roleDeptMapper.deleteRoleDept(roleIds); + return roleMapper.deleteRoleByIds(roleIds); + } + + /** + * 取消授权用户角色 + * + * @param userRole 用户和角色关联信息 + * + * @return 结果 + */ + @Override + public int deleteAuthUser (SysUserRole userRole) { + return userRoleMapper.deleteUserRoleInfo(userRole); + } + + /** + * 批量取消授权用户角色 + * + * @param roleId 角色ID + * @param userIds 需要取消授权的用户数据ID + * + * @return 结果 + */ + @Override + public int deleteAuthUsers (Long roleId, Long[] userIds) { + return userRoleMapper.deleteUserRoleInfos(roleId, userIds); + } + + /** + * 批量选择授权用户角色 + * + * @param roleId 角色ID + * @param userIds 需要授权的用户数据ID + * + * @return 结果 + */ + @Override + public int insertAuthUsers (Long roleId, Long[] userIds) { + // 新增用户与角色管理 + List list = new ArrayList(); + for (Long userId : userIds) { + SysUserRole ur = new SysUserRole(); + ur.setUserId(userId); + ur.setRoleId(roleId); + list.add(ur); + } + return userRoleMapper.batchUserRole(list); + } +} diff --git a/cloud-system-server/src/main/java/com/muyu/system/service/impl/SysUserOnlineServiceImpl.java b/cloud-system-server/src/main/java/com/muyu/system/service/impl/SysUserOnlineServiceImpl.java new file mode 100644 index 0000000..c1ef1ee --- /dev/null +++ b/cloud-system-server/src/main/java/com/muyu/system/service/impl/SysUserOnlineServiceImpl.java @@ -0,0 +1,84 @@ +package com.muyu.system.service.impl; + +import com.muyu.common.core.utils.StringUtils; +import com.muyu.common.system.domain.LoginUser; +import com.muyu.system.domain.SysUserOnline; +import com.muyu.system.service.SysUserOnlineService; +import org.springframework.stereotype.Service; + +/** + * 在线用户 服务层处理 + * + * @author muyu + */ +@Service +public class SysUserOnlineServiceImpl implements SysUserOnlineService { + /** + * 通过登录地址查询信息 + * + * @param ipaddr 登录地址 + * @param user 用户信息 + * + * @return 在线用户信息 + */ + @Override + public SysUserOnline selectOnlineByIpaddr (String ipaddr, LoginUser user) { + if (StringUtils.equals(ipaddr, user.getIpaddr())) { + return loginUserToUserOnline(user); + } + return null; + } + + /** + * 通过用户名称查询信息 + * + * @param userName 用户名称 + * @param user 用户信息 + * + * @return 在线用户信息 + */ + @Override + public SysUserOnline selectOnlineByUserName (String userName, LoginUser user) { + if (StringUtils.equals(userName, user.getUsername())) { + return loginUserToUserOnline(user); + } + return null; + } + + /** + * 通过登录地址/用户名称查询信息 + * + * @param ipaddr 登录地址 + * @param userName 用户名称 + * @param user 用户信息 + * + * @return 在线用户信息 + */ + @Override + public SysUserOnline selectOnlineByInfo (String ipaddr, String userName, LoginUser user) { + if (StringUtils.equals(ipaddr, user.getIpaddr()) && StringUtils.equals(userName, user.getUsername())) { + return loginUserToUserOnline(user); + } + return null; + } + + /** + * 设置在线用户信息 + * + * @param user 用户信息 + * + * @return 在线用户 + */ + @Override + public SysUserOnline loginUserToUserOnline (LoginUser user) { + if (StringUtils.isNull(user)) { + return null; + } + SysUserOnline sysUserOnline = new SysUserOnline(); + sysUserOnline.setTokenId(user.getToken()); + sysUserOnline.setUserName(user.getUsername()); + sysUserOnline.setIpaddr(user.getIpaddr()); + sysUserOnline.setLoginTime(user.getLoginTime()); + return sysUserOnline; + } +} diff --git a/cloud-system-server/src/main/java/com/muyu/system/service/impl/SysUserServiceImpl.java b/cloud-system-server/src/main/java/com/muyu/system/service/impl/SysUserServiceImpl.java new file mode 100644 index 0000000..3011754 --- /dev/null +++ b/cloud-system-server/src/main/java/com/muyu/system/service/impl/SysUserServiceImpl.java @@ -0,0 +1,531 @@ +package com.muyu.system.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.muyu.common.core.constant.CacheConstants; +import com.muyu.common.core.constant.UserConstants; +import com.muyu.common.core.exception.ServiceException; +import com.muyu.common.core.utils.SpringUtils; +import com.muyu.common.core.utils.StringUtils; +import com.muyu.common.core.utils.bean.BeanValidators; +import com.muyu.common.datascope.annotation.DataScope; +import com.muyu.common.redis.service.RedisService; +import com.muyu.common.security.utils.SecurityUtils; +import com.muyu.common.system.domain.LoginUser; +import com.muyu.common.system.domain.SysRole; +import com.muyu.common.system.domain.SysUser; +import com.muyu.system.domain.SysPost; +import com.muyu.system.domain.SysUserPost; +import com.muyu.system.domain.SysUserRole; +import com.muyu.system.mapper.*; +import com.muyu.system.service.SysConfigService; +import com.muyu.system.service.SysUserService; +import jakarta.validation.Validator; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.stream.Collectors; + +/** + * 用户 业务层处理 + * + * @author muyu + */ +@Service +public class SysUserServiceImpl extends ServiceImpl implements SysUserService { + private static final Logger log = LoggerFactory.getLogger(SysUserServiceImpl.class); + @Autowired + protected Validator validator; + @Autowired + private SysUserMapper userMapper; + @Autowired + private SysRoleMapper roleMapper; + @Autowired + private SysPostMapper postMapper; + @Autowired + private SysUserRoleMapper userRoleMapper; + @Autowired + private SysUserPostMapper userPostMapper; + @Autowired + private SysConfigService configService; + @Autowired + private RedisService redisService; + + /** + * 根据条件分页查询用户列表 + * + * @param user 用户信息 + * + * @return 用户信息集合信息 + */ + @Override + @DataScope(deptAlias = "d", userAlias = "u") + public List selectUserList (SysUser user) { + return userMapper.selectUserList(user); + } + + /** + * 根据条件分页查询已分配用户角色列表 + * + * @param user 用户信息 + * + * @return 用户信息集合信息 + */ + @Override + @DataScope(deptAlias = "d", userAlias = "u") + public List selectAllocatedList (SysUser user) { + return userMapper.selectAllocatedList(user); + } + + /** + * 根据条件分页查询未分配用户角色列表 + * + * @param user 用户信息 + * + * @return 用户信息集合信息 + */ + @Override + @DataScope(deptAlias = "d", userAlias = "u") + public List selectUnallocatedList (SysUser user) { + return userMapper.selectUnallocatedList(user); + } + + /** + * 通过用户名查询用户 + * + * @param userName 用户名 + * + * @return 用户对象信息 + */ + @Override + public SysUser selectUserByUserName (String userName) { + return userMapper.selectUserByUserName(userName); + } + + /** + * 通过用户ID查询用户 + * + * @param userId 用户ID + * + * @return 用户对象信息 + */ + @Override + public SysUser selectUserById (Long userId) { + return userMapper.selectUserById(userId); + } + + /** + * 查询用户所属角色组 + * + * @param userName 用户名 + * + * @return 结果 + */ + @Override + public String selectUserRoleGroup (String userName) { + List list = roleMapper.selectRolesByUserName(userName); + if (CollectionUtils.isEmpty(list)) { + return StringUtils.EMPTY; + } + return list.stream().map(SysRole::getRoleName).collect(Collectors.joining(",")); + } + + /** + * 查询用户所属岗位组 + * + * @param userName 用户名 + * + * @return 结果 + */ + @Override + public String selectUserPostGroup (String userName) { + List list = postMapper.selectPostsByUserName(userName); + if (CollectionUtils.isEmpty(list)) { + return StringUtils.EMPTY; + } + return list.stream().map(SysPost::getPostName).collect(Collectors.joining(",")); + } + + /** + * 校验用户名称是否唯一 + * + * @param user 用户信息 + * + * @return 结果 + */ + @Override + public boolean checkUserNameUnique (SysUser user) { + Long userId = StringUtils.isNull(user.getUserId()) ? -1L : user.getUserId(); + SysUser info = userMapper.checkUserNameUnique(user.getUserName()); + if (StringUtils.isNotNull(info) && info.getUserId().longValue() != userId.longValue()) { + return UserConstants.NOT_UNIQUE; + } + return UserConstants.UNIQUE; + } + + /** + * 校验手机号码是否唯一 + * + * @param user 用户信息 + * + * @return + */ + @Override + public boolean checkPhoneUnique (SysUser user) { + Long userId = StringUtils.isNull(user.getUserId()) ? -1L : user.getUserId(); + SysUser info = userMapper.checkPhoneUnique(user.getPhonenumber()); + if (StringUtils.isNotNull(info) && info.getUserId().longValue() != userId.longValue()) { + return UserConstants.NOT_UNIQUE; + } + return UserConstants.UNIQUE; + } + + /** + * 校验email是否唯一 + * + * @param user 用户信息 + * + * @return + */ + @Override + public boolean checkEmailUnique (SysUser user) { + Long userId = StringUtils.isNull(user.getUserId()) ? -1L : user.getUserId(); + SysUser info = userMapper.checkEmailUnique(user.getEmail()); + if (StringUtils.isNotNull(info) && info.getUserId().longValue() != userId.longValue()) { + return UserConstants.NOT_UNIQUE; + } + return UserConstants.UNIQUE; + } + + /** + * 校验用户是否允许操作 + * + * @param user 用户信息 + */ + @Override + public void checkUserAllowed (SysUser user) { + if (StringUtils.isNotNull(user.getUserId()) && user.isAdmin()) { + throw new ServiceException("不允许操作超级管理员用户"); + } + } + + /** + * 校验用户是否有数据权限 + * + * @param userId 用户id + */ + @Override + public void checkUserDataScope (Long userId) { + if (!SysUser.isAdmin(SecurityUtils.getUserId())) { + SysUser user = new SysUser(); + user.setUserId(userId); + List users = SpringUtils.getAopProxy(this).selectUserList(user); + if (StringUtils.isEmpty(users)) { + throw new ServiceException("没有权限访问用户数据!"); + } + } + } + + /** + * 新增保存用户信息 + * + * @param user 用户信息 + * + * @return 结果 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public int insertUser (SysUser user) { + // 新增用户信息 + int rows = userMapper.insertUser(user); + // 新增用户岗位关联 + insertUserPost(user); + // 新增用户与角色管理 + insertUserRole(user); + return rows; + } + + /** + * 注册用户信息 + * + * @param user 用户信息 + * + * @return 结果 + */ + @Override + public boolean registerUser (SysUser user) { + return userMapper.insertUser(user) > 0; + } + + /** + * 修改保存用户信息 + * + * @param user 用户信息 + * + * @return 结果 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public int updateUser (SysUser user) { + Long userId = user.getUserId(); + // 删除用户与角色关联 + userRoleMapper.deleteUserRoleByUserId(userId); + // 新增用户与角色管理 + insertUserRole(user); + // 删除用户与岗位关联 + userPostMapper.deleteUserPostByUserId(userId); + // 新增用户与岗位管理 + insertUserPost(user); + return userMapper.updateUser(user); + } + + /** + * 用户授权角色 + * + * @param userId 用户ID + * @param roleIds 角色组 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public void insertUserAuth (Long userId, Long[] roleIds) { + userRoleMapper.deleteUserRoleByUserId(userId); + insertUserRole(userId, roleIds); + } + + /** + * 修改用户状态 + * + * @param user 用户信息 + * + * @return 结果 + */ + @Override + public int updateUserStatus (SysUser user) { + return userMapper.updateUser(user); + } + + /** + * 修改用户基本信息 + * + * @param user 用户信息 + * + * @return 结果 + */ + @Override + public int updateUserProfile (SysUser user) { + return userMapper.updateUser(user); + } + + /** + * 修改用户头像 + * + * @param userName 用户名 + * @param avatar 头像地址 + * + * @return 结果 + */ + @Override + public boolean updateUserAvatar (String userName, String avatar) { + return userMapper.updateUserAvatar(userName, avatar) > 0; + } + + /** + * 重置用户密码 + * + * @param user 用户信息 + * + * @return 结果 + */ + @Override + public int resetPwd(SysUser user,Long userId) + { + + int i = userMapper.updateUser(user); + + if(i>0){ + delRedisUser(user,String.valueOf(user.getUserId())); + } + return i; + } + + + public void delRedisUser(SysUser sysUser, String userId) { + + Collection keys = redisService.keys(CacheConstants.LOGIN_TOKEN_KEY + "*"); + + for (String key : keys) { + LoginUser user = redisService.getCacheObject(key); + if (sysUser.getUserId().equals(user.getUserid()) && !user.getUserid().equals(Long.valueOf(userId))) { + redisService.deleteObject(key); + } + + } + + } + + /** + * 重置用户密码 + * + * @param userName 用户名 + * @param password 密码 + * + * @return 结果 + */ + @Override + public int resetUserPwd (String userName, String password) { + return userMapper.resetUserPwd(userName, password); + } + + /** + * 新增用户角色信息 + * + * @param user 用户对象 + */ + public void insertUserRole (SysUser user) { + this.insertUserRole(user.getUserId(), user.getRoleIds()); + } + + /** + * 新增用户岗位信息 + * + * @param user 用户对象 + */ + public void insertUserPost (SysUser user) { + Long[] posts = user.getPostIds(); + if (StringUtils.isNotEmpty(posts)) { + // 新增用户与岗位管理 + List list = new ArrayList(); + for (Long postId : posts) { + SysUserPost up = new SysUserPost(); + up.setUserId(user.getUserId()); + up.setPostId(postId); + list.add(up); + } + userPostMapper.batchUserPost(list); + } + } + + /** + * 新增用户角色信息 + * + * @param userId 用户ID + * @param roleIds 角色组 + */ + public void insertUserRole (Long userId, Long[] roleIds) { + if (StringUtils.isNotEmpty(roleIds)) { + // 新增用户与角色管理 + List list = new ArrayList(); + for (Long roleId : roleIds) { + SysUserRole ur = new SysUserRole(); + ur.setUserId(userId); + ur.setRoleId(roleId); + list.add(ur); + } + userRoleMapper.batchUserRole(list); + } + } + + /** + * 通过用户ID删除用户 + * + * @param userId 用户ID + * + * @return 结果 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public int deleteUserById (Long userId) { + // 删除用户与角色关联 + userRoleMapper.deleteUserRoleByUserId(userId); + // 删除用户与岗位表 + userPostMapper.deleteUserPostByUserId(userId); + return userMapper.deleteUserById(userId); + } + + /** + * 批量删除用户信息 + * + * @param userIds 需要删除的用户ID + * + * @return 结果 + */ + @Override + @Transactional(rollbackFor = Exception.class) + public int deleteUserByIds (Long[] userIds) { + for (Long userId : userIds) { + checkUserAllowed(new SysUser(userId)); + checkUserDataScope(userId); + } + // 删除用户与角色关联 + userRoleMapper.deleteUserRole(userIds); + // 删除用户与岗位关联 + userPostMapper.deleteUserPost(userIds); + return userMapper.deleteUserByIds(userIds); + } + + /** + * 导入用户数据 + * + * @param userList 用户数据列表 + * @param isUpdateSupport 是否更新支持,如果已存在,则进行更新数据 + * @param operName 操作用户 + * + * @return 结果 + */ + @Override + public String importUser (List userList, Boolean isUpdateSupport, String operName) { + if (StringUtils.isNull(userList) || userList.size() == 0) { + throw new ServiceException("导入用户数据不能为空!"); + } + int successNum = 0; + int failureNum = 0; + StringBuilder successMsg = new StringBuilder(); + StringBuilder failureMsg = new StringBuilder(); + String password = configService.selectConfigByKey("sys.user.initPassword"); + for (SysUser user : userList) { + try { + // 验证是否存在这个用户 + SysUser u = userMapper.selectUserByUserName(user.getUserName()); + if (StringUtils.isNull(u)) { + BeanValidators.validateWithException(validator, user); + user.setPassword(SecurityUtils.encryptPassword(password)); + user.setCreateBy(operName); + userMapper.insertUser(user); + successNum++; + successMsg.append("
" + successNum + "、账号 " + user.getUserName() + " 导入成功"); + } else if (isUpdateSupport) { + BeanValidators.validateWithException(validator, user); + checkUserAllowed(u); + checkUserDataScope(u.getUserId()); + user.setUserId(u.getUserId()); + user.setUpdateBy(operName); + userMapper.updateUser(user); + successNum++; + successMsg.append("
" + successNum + "、账号 " + user.getUserName() + " 更新成功"); + } else { + failureNum++; + failureMsg.append("
" + failureNum + "、账号 " + user.getUserName() + " 已存在"); + } + } catch (Exception e) { + failureNum++; + String msg = "
" + failureNum + "、账号 " + user.getUserName() + " 导入失败:"; + failureMsg.append(msg + e.getMessage()); + log.error(msg, e); + } + } + if (failureNum > 0) { + failureMsg.insert(0, "很抱歉,导入失败!共 " + failureNum + " 条数据格式不正确,错误如下:"); + throw new ServiceException(failureMsg.toString()); + } else { + successMsg.insert(0, "恭喜您,数据已全部导入成功!共 " + successNum + " 条,数据如下:"); + } + return successMsg.toString(); + } + +} diff --git a/cloud-system-server/src/main/resources/banner.txt b/cloud-system-server/src/main/resources/banner.txt new file mode 100644 index 0000000..0dd5eee --- /dev/null +++ b/cloud-system-server/src/main/resources/banner.txt @@ -0,0 +1,2 @@ +Spring Boot Version: ${spring-boot.version} +Spring Application Name: ${spring.application.name} diff --git a/cloud-system-server/src/main/resources/bootstrap.yml b/cloud-system-server/src/main/resources/bootstrap.yml new file mode 100644 index 0000000..b756209 --- /dev/null +++ b/cloud-system-server/src/main/resources/bootstrap.yml @@ -0,0 +1,53 @@ + +# Tomcat +server: + port: 9701 + + +# nacos线上地址 +nacos: + addr: 47.100.87.106:8848 + user-name: nacos + password: nacos + +# Spring +spring: + main: + allow-bean-definition-overriding: true + application: + # 应用名称 + name: cloud-system + profiles: + # 环境配置 + active: dev + cloud: + nacos: + discovery: + # 服务注册地址 + server-addr: ${nacos.addr} + # nacos用户名 + username: ${nacos.user-name} + # nacos密码 + password: ${nacos.password} + + config: + # 服务注册地址 + server-addr: ${nacos.addr} + # nacos用户名 + username: ${nacos.user-name} + # nacos密码 + password: ${nacos.password} + + # 配置文件格式 + file-extension: yml + # 共享配置 + shared-configs: + # 系统共享配置 + - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} + # 系统环境Config共享配置 + - application-config-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} + # xxl-job 配置文件 + - application-xxl-config-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} +logging: + level: + com.muyu.system.mapper: DEBUG diff --git a/cloud-system-server/src/main/resources/logback/dev.xml b/cloud-system-server/src/main/resources/logback/dev.xml new file mode 100644 index 0000000..d1b5629 --- /dev/null +++ b/cloud-system-server/src/main/resources/logback/dev.xml @@ -0,0 +1,74 @@ + + + + + + + + + + + ${log.pattern} + + + + + + ${log.path}/info.log + + + + ${log.path}/info.%d{yyyy-MM-dd}.log + + 60 + + + ${log.pattern} + + + + INFO + + ACCEPT + + DENY + + + + + ${log.path}/error.log + + + + ${log.path}/error.%d{yyyy-MM-dd}.log + + 60 + + + ${log.pattern} + + + + ERROR + + ACCEPT + + DENY + + + + + + + + + + + + + + + + + + diff --git a/cloud-system-server/src/main/resources/logback/prod.xml b/cloud-system-server/src/main/resources/logback/prod.xml new file mode 100644 index 0000000..76a0d8f --- /dev/null +++ b/cloud-system-server/src/main/resources/logback/prod.xml @@ -0,0 +1,81 @@ + + + + + + + + + + + + ${log.sky.pattern} + + + + + + ${log.path}/info.log + + + + ${log.path}/info.%d{yyyy-MM-dd}.log + + 60 + + + + + INFO + + ACCEPT + + DENY + + + + + ${log.path}/error.log + + + + ${log.path}/error.%d{yyyy-MM-dd}.log + + 60 + + + + + ERROR + + ACCEPT + + DENY + + + + + + + + ${log.sky.pattern} + + + + + + + + + + + + + + + + + + + + diff --git a/cloud-system-server/src/main/resources/logback/test.xml b/cloud-system-server/src/main/resources/logback/test.xml new file mode 100644 index 0000000..2cd69e4 --- /dev/null +++ b/cloud-system-server/src/main/resources/logback/test.xml @@ -0,0 +1,81 @@ + + + + + + + + + + + + ${log.sky.pattern} + + + + + + ${log.path}/info.log + + + + ${log.path}/info.%d{yyyy-MM-dd}.log + + 60 + + + + + INFO + + ACCEPT + + DENY + + + + + ${log.path}/error.log + + + + ${log.path}/error.%d{yyyy-MM-dd}.log + + 60 + + + + + ERROR + + ACCEPT + + DENY + + + + + + + + ${log.sky.pattern} + + + + + + + + + + + + + + + + + + + + diff --git a/cloud-system-server/src/main/resources/mapper/system/SysConfigMapper.xml b/cloud-system-server/src/main/resources/mapper/system/SysConfigMapper.xml new file mode 100644 index 0000000..2c35243 --- /dev/null +++ b/cloud-system-server/src/main/resources/mapper/system/SysConfigMapper.xml @@ -0,0 +1,128 @@ + + + + + + + + + + + + + + + + + + select config_id, + config_name, + config_key, + config_value, + config_type, + create_by, + create_time, + update_by, + update_time, + remark + from sys_config + + + + + + + and config_id = #{configId} + + + and config_key = #{configKey} + + + + + + + + + + + + + + insert into sys_config ( + config_name, + config_key, + config_value, + config_type, + create_by, + remark, + create_time + )values( + #{configName}, + #{configKey}, + #{configValue}, + #{configType}, + #{createBy}, + #{remark}, + sysdate() + ) + + + + update sys_config + + config_name = #{configName}, + config_key = #{configKey}, + config_value = #{configValue}, + config_type = #{configType}, + update_by = #{updateBy}, + remark = #{remark}, + update_time = sysdate() + + where config_id = #{configId} + + + + delete + from sys_config + where config_id = #{configId} + + + + delete from sys_config where config_id in + + #{configId} + + + + diff --git a/cloud-system-server/src/main/resources/mapper/system/SysDeptMapper.xml b/cloud-system-server/src/main/resources/mapper/system/SysDeptMapper.xml new file mode 100644 index 0000000..a571d8b --- /dev/null +++ b/cloud-system-server/src/main/resources/mapper/system/SysDeptMapper.xml @@ -0,0 +1,183 @@ + + + + + + + + + + + + + + + + + + + + + + + + select d.dept_id, + d.parent_id, + d.ancestors, + d.dept_name, + d.order_num, + d.leader, + d.phone, + d.email, + d.status, + d.del_flag, + d.create_by, + d.create_time + from sys_dept d + + + + + + + + + + + + + + + + + + + + insert into sys_dept( + dept_id, + parent_id, + dept_name, + ancestors, + order_num, + leader, + phone, + email, + status, + create_by, + create_time + )values( + #{deptId}, + #{parentId}, + #{deptName}, + #{ancestors}, + #{orderNum}, + #{leader}, + #{phone}, + #{email}, + #{status}, + #{createBy}, + sysdate() + ) + + + + update sys_dept + + parent_id = #{parentId}, + dept_name = #{deptName}, + ancestors = #{ancestors}, + order_num = #{orderNum}, + leader = #{leader}, + phone = #{phone}, + email = #{email}, + status = #{status}, + update_by = #{updateBy}, + update_time = sysdate() + + where dept_id = #{deptId} + + + + update sys_dept set ancestors = + + when #{item.deptId} then #{item.ancestors} + + where dept_id in + + #{item.deptId} + + + + + update sys_dept set status = '0' where dept_id in + + #{deptId} + + + + + update sys_dept + set del_flag = '2' + where dept_id = #{deptId} + + + diff --git a/cloud-system-server/src/main/resources/mapper/system/SysDictDataMapper.xml b/cloud-system-server/src/main/resources/mapper/system/SysDictDataMapper.xml new file mode 100644 index 0000000..5128c99 --- /dev/null +++ b/cloud-system-server/src/main/resources/mapper/system/SysDictDataMapper.xml @@ -0,0 +1,143 @@ + + + + + + + + + + + + + + + + + + + + + + select dict_code, + dict_sort, + dict_label, + dict_value, + dict_type, + css_class, + list_class, + is_default, + status, + create_by, + create_time, + remark + from sys_dict_data + + + + + + + + + + + + + + delete + from sys_dict_data + where dict_code = #{dictCode} + + + + delete from sys_dict_data where dict_code in + + #{dictCode} + + + + + update sys_dict_data + + dict_sort = #{dictSort}, + dict_label = #{dictLabel}, + dict_value = #{dictValue}, + dict_type = #{dictType}, + css_class = #{cssClass}, + list_class = #{listClass}, + is_default = #{isDefault}, + status = #{status}, + remark = #{remark}, + update_by = #{updateBy}, + update_time = sysdate() + + where dict_code = #{dictCode} + + + + update sys_dict_data + set dict_type = #{newDictType} + where dict_type = #{oldDictType} + + + + insert into sys_dict_data( + dict_sort, + dict_label, + dict_value, + dict_type, + css_class, + list_class, + is_default, + status, + remark, + create_by, + create_time + )values( + #{dictSort}, + #{dictLabel}, + #{dictValue}, + #{dictType}, + #{cssClass}, + #{listClass}, + #{isDefault}, + #{status}, + #{remark}, + #{createBy}, + sysdate() + ) + + + diff --git a/cloud-system-server/src/main/resources/mapper/system/SysDictTypeMapper.xml b/cloud-system-server/src/main/resources/mapper/system/SysDictTypeMapper.xml new file mode 100644 index 0000000..7c0ebd1 --- /dev/null +++ b/cloud-system-server/src/main/resources/mapper/system/SysDictTypeMapper.xml @@ -0,0 +1,107 @@ + + + + + + + + + + + + + + + + + select dict_id, dict_name, dict_type, status, create_by, create_time, remark + from sys_dict_type + + + + + + + + + + + + + + delete + from sys_dict_type + where dict_id = #{dictId} + + + + delete from sys_dict_type where dict_id in + + #{dictId} + + + + + update sys_dict_type + + dict_name = #{dictName}, + dict_type = #{dictType}, + status = #{status}, + remark = #{remark}, + update_by = #{updateBy}, + update_time = sysdate() + + where dict_id = #{dictId} + + + + insert into sys_dict_type( + dict_name, + dict_type, + status, + remark, + create_by, + create_time + )values( + #{dictName}, + #{dictType}, + #{status}, + #{remark}, + #{createBy}, + sysdate() + ) + + + diff --git a/cloud-system-server/src/main/resources/mapper/system/SysLogininforMapper.xml b/cloud-system-server/src/main/resources/mapper/system/SysLogininforMapper.xml new file mode 100644 index 0000000..114599c --- /dev/null +++ b/cloud-system-server/src/main/resources/mapper/system/SysLogininforMapper.xml @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + insert into sys_logininfor (user_name, status, ipaddr, msg, access_time) + values (#{userName}, #{status}, #{ipaddr}, #{msg}, sysdate()) + + + + + + delete from sys_logininfor where info_id in + + #{infoId} + + + + + truncate table sys_logininfor + + + diff --git a/cloud-system-server/src/main/resources/mapper/system/SysMenuMapper.xml b/cloud-system-server/src/main/resources/mapper/system/SysMenuMapper.xml new file mode 100644 index 0000000..89b4266 --- /dev/null +++ b/cloud-system-server/src/main/resources/mapper/system/SysMenuMapper.xml @@ -0,0 +1,279 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select menu_id, + menu_name, + parent_id, + order_num, + path, + component, + `query`, + is_frame, + is_cache, + menu_type, + visible, + status, + ifnull(perms, '') as perms, + icon, + create_time + from sys_menu + + + + + + + + + + + + + + + + + + + + + + + + + + + update sys_menu + + menu_name = #{menuName}, + parent_id = #{parentId}, + order_num = #{orderNum}, + path = #{path}, + component = #{component}, + `query` = #{query}, + is_frame = #{isFrame}, + is_cache = #{isCache}, + menu_type = #{menuType}, + visible = #{visible}, + status = #{status}, + perms = #{perms}, + icon = #{icon}, + remark = #{remark}, + update_by = #{updateBy}, + update_time = sysdate() + + where menu_id = #{menuId} + + + + insert into sys_menu( + menu_id, + parent_id, + menu_name, + order_num, + path, + component, + `query`, + is_frame, + is_cache, + menu_type, + visible, + status, + perms, + icon, + remark, + create_by, + create_time + )values( + #{menuId}, + #{parentId}, + #{menuName}, + #{orderNum}, + #{path}, + #{component}, + #{query}, + #{isFrame}, + #{isCache}, + #{menuType}, + #{visible}, + #{status}, + #{perms}, + #{icon}, + #{remark}, + #{createBy}, + sysdate() + ) + + + + delete + from sys_menu + where menu_id = #{menuId} + + + diff --git a/cloud-system-server/src/main/resources/mapper/system/SysNoticeMapper.xml b/cloud-system-server/src/main/resources/mapper/system/SysNoticeMapper.xml new file mode 100644 index 0000000..a0626c9 --- /dev/null +++ b/cloud-system-server/src/main/resources/mapper/system/SysNoticeMapper.xml @@ -0,0 +1,151 @@ + + + + + + + + + + + + + + + + + + + select notice_id, + notice_title, + notice_type, + cast(notice_content as char) as notice_content, + status, + create_by, + create_time, + update_by, + update_time, + remark + from sys_notice + + + + + + + + + + + insert into sys_notice ( + notice_title, + notice_type, + notice_content, + status, + remark, + create_by, + create_time + )values( + #{noticeTitle}, + #{noticeType}, + #{noticeContent}, + #{status}, + #{remark}, + #{createBy}, + sysdate() + ) + + + insert into sys_user_notice (user_id,notice_id, + end_time, + status) + values + + ( #{userId},#{noticeId}, + #{endTime}, + 0) + + + + + update sys_notice + + notice_title = #{noticeTitle}, + notice_type = #{noticeType}, + notice_content = #{noticeContent}, + status = #{status}, + update_by = #{updateBy}, + update_time = sysdate() + + where notice_id = #{noticeId} + + + update sys_user_notice + set status = 1 + where id=#{id}; + + + + delete + from sys_notice + where notice_id = #{noticeId} + + + + delete from sys_notice where notice_id in + + #{noticeId} + + + + diff --git a/cloud-system-server/src/main/resources/mapper/system/SysOperLogMapper.xml b/cloud-system-server/src/main/resources/mapper/system/SysOperLogMapper.xml new file mode 100644 index 0000000..1834ea1 --- /dev/null +++ b/cloud-system-server/src/main/resources/mapper/system/SysOperLogMapper.xml @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + + + + + + + + + + + select oper_id, + title, + business_type, + method, + request_method, + operator_type, + oper_name, + dept_name, + oper_url, + oper_ip, + oper_param, + json_result, + status, + error_msg, + oper_time, + cost_time + from sys_oper_log + + + + insert into sys_oper_log(title, business_type, method, request_method, operator_type, oper_name, dept_name, + oper_url, oper_ip, oper_param, json_result, status, error_msg, cost_time, oper_time) + values (#{title}, #{businessType}, #{method}, #{requestMethod}, #{operatorType}, #{operName}, #{deptName}, + #{operUrl}, #{operIp}, #{operParam}, #{jsonResult}, #{status}, #{errorMsg}, #{costTime}, sysdate()) + + + + + + delete from sys_oper_log where oper_id in + + #{operId} + + + + + + + truncate table sys_oper_log + + + diff --git a/cloud-system-server/src/main/resources/mapper/system/SysPostMapper.xml b/cloud-system-server/src/main/resources/mapper/system/SysPostMapper.xml new file mode 100644 index 0000000..63142c3 --- /dev/null +++ b/cloud-system-server/src/main/resources/mapper/system/SysPostMapper.xml @@ -0,0 +1,131 @@ + + + + + + + + + + + + + + + + + + + select post_id, + post_code, + post_name, + post_sort, + status, + create_by, + create_time, + remark + from sys_post + + + + + + + + + + + + + + + + + + update sys_post + + post_code = #{postCode}, + post_name = #{postName}, + post_sort = #{postSort}, + status = #{status}, + remark = #{remark}, + update_by = #{updateBy}, + update_time = sysdate() + + where post_id = #{postId} + + + + insert into sys_post( + post_id, + post_code, + post_name, + post_sort, + status, + remark, + create_by, + create_time + )values( + #{postId}, + #{postCode}, + #{postName}, + #{postSort}, + #{status}, + #{remark}, + #{createBy}, + sysdate() + ) + + + + delete + from sys_post + where post_id = #{postId} + + + + delete from sys_post where post_id in + + #{postId} + + + + diff --git a/cloud-system-server/src/main/resources/mapper/system/SysRoleDeptMapper.xml b/cloud-system-server/src/main/resources/mapper/system/SysRoleDeptMapper.xml new file mode 100644 index 0000000..1a9ab92 --- /dev/null +++ b/cloud-system-server/src/main/resources/mapper/system/SysRoleDeptMapper.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + delete + from sys_role_dept + where role_id = #{roleId} + + + + + + delete from sys_role_dept where role_id in + + #{roleId} + + + + + insert into sys_role_dept(role_id, dept_id) values + + (#{item.roleId},#{item.deptId}) + + + + diff --git a/cloud-system-server/src/main/resources/mapper/system/SysRoleMapper.xml b/cloud-system-server/src/main/resources/mapper/system/SysRoleMapper.xml new file mode 100644 index 0000000..f6b56b3 --- /dev/null +++ b/cloud-system-server/src/main/resources/mapper/system/SysRoleMapper.xml @@ -0,0 +1,163 @@ + + + + + + + + + + + + + + + + + + + + + + + select distinct r.role_id, + r.role_name, + r.role_key, + r.role_sort, + r.data_scope, + r.menu_check_strictly, + r.dept_check_strictly, + r.status, + r.del_flag, + r.create_time, + r.remark + from sys_role r + left join sys_user_role ur on ur.role_id = r.role_id + left join sys_user u on u.user_id = ur.user_id + left join sys_dept d on u.dept_id = d.dept_id + + + + + + + + + + + + + + + + + + + + insert into sys_role( + role_id, + role_name, + role_key, + role_sort, + data_scope, + menu_check_strictly, + dept_check_strictly, + status, + remark, + create_by, + create_time + )values( + #{roleId}, + #{roleName}, + #{roleKey}, + #{roleSort}, + #{dataScope}, + #{menuCheckStrictly}, + #{deptCheckStrictly}, + #{status}, + #{remark}, + #{createBy}, + sysdate() + ) + + + + update sys_role + + role_name = #{roleName}, + role_key = #{roleKey}, + role_sort = #{roleSort}, + data_scope = #{dataScope}, + menu_check_strictly = #{menuCheckStrictly}, + dept_check_strictly = #{deptCheckStrictly}, + status = #{status}, + remark = #{remark}, + update_by = #{updateBy}, + update_time = sysdate() + + where role_id = #{roleId} + + + + update sys_role + set del_flag = '2' + where role_id = #{roleId} + + + + update sys_role set del_flag = '2' where role_id in + + #{roleId} + + + + diff --git a/cloud-system-server/src/main/resources/mapper/system/SysRoleMenuMapper.xml b/cloud-system-server/src/main/resources/mapper/system/SysRoleMenuMapper.xml new file mode 100644 index 0000000..22d2609 --- /dev/null +++ b/cloud-system-server/src/main/resources/mapper/system/SysRoleMenuMapper.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + delete + from sys_role_menu + where role_id = #{roleId} + + + + delete from sys_role_menu where role_id in + + #{roleId} + + + + + insert into sys_role_menu(role_id, menu_id) values + + (#{item.roleId},#{item.menuId}) + + + + diff --git a/cloud-system-server/src/main/resources/mapper/system/SysUserMapper.xml b/cloud-system-server/src/main/resources/mapper/system/SysUserMapper.xml new file mode 100644 index 0000000..c5e2995 --- /dev/null +++ b/cloud-system-server/src/main/resources/mapper/system/SysUserMapper.xml @@ -0,0 +1,297 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + select u.user_id, + u.dept_id, + u.user_name, + u.nick_name, + u.email, + u.avatar, + u.phonenumber, + u.password, + u.sex, + u.status, + u.del_flag, + u.login_ip, + u.login_date, + u.create_by, + u.create_time, + u.remark, + d.dept_id, + d.parent_id, + d.ancestors, + d.dept_name, + d.order_num, + d.leader, + d.status as dept_status, + r.role_id, + r.role_name, + r.role_key, + r.role_sort, + r.data_scope, + r.status as role_status + from sys_user u + left join sys_dept d on u.dept_id = d.dept_id + left join sys_user_role ur on u.user_id = ur.user_id + left join sys_role r on r.role_id = ur.role_id + + + + + + + + + + + + + + + + + + + + + + + + + insert into sys_user( + user_id, + dept_id, + user_name, + nick_name, + email, + avatar, + phonenumber, + sex, + password, + status, + create_by, + remark, + create_time + )values( + #{userId}, + #{deptId}, + #{userName}, + #{nickName}, + #{email}, + #{avatar}, + #{phonenumber}, + #{sex}, + #{password}, + #{status}, + #{createBy}, + #{remark}, + sysdate() + ) + + + + update sys_user + + dept_id = #{deptId}, + user_name = #{userName}, + nick_name = #{nickName}, + email = #{email}, + phonenumber = #{phonenumber}, + sex = #{sex}, + avatar = #{avatar}, + password = #{password}, + status = #{status}, + login_ip = #{loginIp}, + login_date = #{loginDate}, + update_by = #{updateBy}, + remark = #{remark}, + update_time = sysdate() + + where user_id = #{userId} + + + + update sys_user + set status = #{status} + where user_id = #{userId} + + + + update sys_user + set avatar = #{avatar} + where user_name = #{userName} + + + + update sys_user + set password = #{password} + where user_name = #{userName} + + + + update sys_user + set del_flag = '2' + where user_id = #{userId} + + + + update sys_user set del_flag = '2' where user_id in + + #{userId} + + + + diff --git a/cloud-system-server/src/main/resources/mapper/system/SysUserPostMapper.xml b/cloud-system-server/src/main/resources/mapper/system/SysUserPostMapper.xml new file mode 100644 index 0000000..30e4f06 --- /dev/null +++ b/cloud-system-server/src/main/resources/mapper/system/SysUserPostMapper.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + delete + from sys_user_post + where user_id = #{userId} + + + + + + delete from sys_user_post where user_id in + + #{userId} + + + + + insert into sys_user_post(user_id, post_id) values + + (#{item.userId},#{item.postId}) + + + + diff --git a/cloud-system-server/src/main/resources/mapper/system/SysUserRoleMapper.xml b/cloud-system-server/src/main/resources/mapper/system/SysUserRoleMapper.xml new file mode 100644 index 0000000..b93bc72 --- /dev/null +++ b/cloud-system-server/src/main/resources/mapper/system/SysUserRoleMapper.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + delete + from sys_user_role + where user_id = #{userId} + + + + + + delete from sys_user_role where user_id in + + #{userId} + + + + + insert into sys_user_role(user_id, role_id) values + + (#{item.userId},#{item.roleId}) + + + + + delete + from sys_user_role + where user_id = #{userId} + and role_id = #{roleId} + + + + delete from sys_user_role where role_id=#{roleId} and user_id in + + #{userId} + + + diff --git a/pom.xml b/pom.xml index 08d9244..806d35d 100644 --- a/pom.xml +++ b/pom.xml @@ -7,6 +7,13 @@ cloud-server-parent 3.6.4 + pom + + cloud-system-common + cloud-system-server + cloud-system-remote + cloud-system-client + 4.0.0 cloud-modules-system @@ -17,86 +24,4 @@ cloud-modules-system系统模块 - - - - - com.alibaba.cloud - spring-cloud-starter-alibaba-nacos-discovery - - - - - com.alibaba.cloud - spring-cloud-starter-alibaba-nacos-config - - - - - - com.alibaba.cloud - spring-cloud-starter-alibaba-sentinel - - - - - org.springframework.boot - spring-boot-starter-actuator - - - - - com.mysql - mysql-connector-j - - - - - com.muyu - cloud-common-datasource - - - - - com.muyu - cloud-common-datascope - - - - - com.muyu - cloud-common-log - - - - - com.muyu - cloud-common-api-doc - - - - - com.muyu - cloud-common-xxl - - - - - - ${project.artifactId} - - - org.springframework.boot - spring-boot-maven-plugin - - - - repackage - - - - - - - diff --git a/src/main/resources/logback/dev.xml b/src/main/resources/logback/dev.xml index d1b5629..e69de29 100644 --- a/src/main/resources/logback/dev.xml +++ b/src/main/resources/logback/dev.xml @@ -1,74 +0,0 @@ - - - - - - - - - - - ${log.pattern} - - - - - - ${log.path}/info.log - - - - ${log.path}/info.%d{yyyy-MM-dd}.log - - 60 - - - ${log.pattern} - - - - INFO - - ACCEPT - - DENY - - - - - ${log.path}/error.log - - - - ${log.path}/error.%d{yyyy-MM-dd}.log - - 60 - - - ${log.pattern} - - - - ERROR - - ACCEPT - - DENY - - - - - - - - - - - - - - - - - - diff --git a/src/main/resources/logback/prod.xml b/src/main/resources/logback/prod.xml index 76a0d8f..e69de29 100644 --- a/src/main/resources/logback/prod.xml +++ b/src/main/resources/logback/prod.xml @@ -1,81 +0,0 @@ - - - - - - - - - - - - ${log.sky.pattern} - - - - - - ${log.path}/info.log - - - - ${log.path}/info.%d{yyyy-MM-dd}.log - - 60 - - - - - INFO - - ACCEPT - - DENY - - - - - ${log.path}/error.log - - - - ${log.path}/error.%d{yyyy-MM-dd}.log - - 60 - - - - - ERROR - - ACCEPT - - DENY - - - - - - - - ${log.sky.pattern} - - - - - - - - - - - - - - - - - - - - diff --git a/src/main/resources/logback/test.xml b/src/main/resources/logback/test.xml index 2cd69e4..e69de29 100644 --- a/src/main/resources/logback/test.xml +++ b/src/main/resources/logback/test.xml @@ -1,81 +0,0 @@ - - - - - - - - - - - - ${log.sky.pattern} - - - - - - ${log.path}/info.log - - - - ${log.path}/info.%d{yyyy-MM-dd}.log - - 60 - - - - - INFO - - ACCEPT - - DENY - - - - - ${log.path}/error.log - - - - ${log.path}/error.%d{yyyy-MM-dd}.log - - 60 - - - - - ERROR - - ACCEPT - - DENY - - - - - - - - ${log.sky.pattern} - - - - - - - - - - - - - - - - - - - -