From 964ca18c53443ab783604201e87f7ebc447b8bf9 Mon Sep 17 00:00:00 2001 From: tanyp <742354529@qq.com> Date: Wed, 29 Mar 2023 16:10:18 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- tansci-boot-ui/.env.development | 2 +- tansci-boot-ui/.env.production | 2 +- tansci-boot-ui/src/api/auth.ts | 53 ++++---- .../src/components/layout/Empty.vue | 3 + .../src/components/layout/Index.vue | 5 +- tansci-boot-ui/src/components/layout/None.vue | 7 + tansci-boot-ui/src/router/common.ts | 18 +++ tansci-boot-ui/src/router/index.ts | 51 ++++++- tansci-boot-ui/src/router/permission.ts | 97 +++++++++++++ tansci-boot-ui/src/utils/common.ts | 16 +++ tansci-boot-ui/src/utils/request.ts | 2 +- tansci-boot-ui/src/views/common/Component.vue | 12 ++ tansci-boot-ui/src/views/common/Iframe.vue | 23 ++++ tansci-boot-ui/src/views/common/Login.vue | 3 +- tansci-boot-ui/vite.config.ts | 14 +- .../java/com/tansci/config/SaTokenConfig.java | 2 +- .../com/tansci/controller/AuthController.java | 7 +- .../tansci/controller/SysDicController.java | 26 ++++ .../tansci/controller/SysLogController.java | 29 ++++ .../tansci/controller/SysMenuController.java | 39 ++++++ .../tansci/controller/SysOrgController.java | 26 ++++ .../tansci/controller/SysRoleController.java | 27 ++++ .../tansci/controller/SysUserController.java | 14 +- .../main/java/com/tansci/domain/SysRole.java | 5 +- .../main/java/com/tansci/domain/SysUser.java | 13 +- .../tansci/domain/vo/SysUserSessionVo.java | 41 ++++++ .../java/com/tansci/domain/vo/SysUserVo.java | 46 +++++++ .../handler/GlobalExceptionHandler.java | 2 +- .../java/com/tansci/mapper/SysDicMapper.java | 16 +++ .../com/tansci/mapper/SysLoginLogMapper.java | 16 +++ .../java/com/tansci/mapper/SysMenuMapper.java | 16 +++ .../com/tansci/mapper/SysOperLogMapper.java | 16 +++ .../java/com/tansci/mapper/SysOrgMapper.java | 16 +++ .../java/com/tansci/mapper/SysRoleMapper.java | 16 +++ .../com/tansci/mapper/SysRoleMenuMapper.java | 16 +++ .../com/tansci/mapper/SysRoleOrgMapper.java | 16 +++ .../com/tansci/mapper/SysUserRoleMapper.java | 16 +++ .../com/tansci/service/SysDicService.java | 14 ++ .../tansci/service/SysLoginLogService.java | 14 ++ .../com/tansci/service/SysMenuService.java | 19 +++ .../com/tansci/service/SysOperLogService.java | 14 ++ .../com/tansci/service/SysOrgService.java | 14 ++ .../tansci/service/SysRoleMenuService.java | 14 ++ .../com/tansci/service/SysRoleService.java | 14 ++ .../tansci/service/SysUserRoleService.java | 14 ++ .../com/tansci/service/SysUserService.java | 11 +- .../service/impl/SysDicServiceImpl.java | 20 +++ .../service/impl/SysLoginLogServiceImpl.java | 20 +++ .../service/impl/SysMenuServiceImpl.java | 63 +++++++++ .../service/impl/SysOperLogServiceImpl.java | 20 +++ .../service/impl/SysOrgServiceImpl.java | 21 +++ .../service/impl/SysRoleMenuServiceImpl.java | 20 +++ .../service/impl/SysRoleServiceImpl.java | 20 +++ .../service/impl/SysUserRoleServiceImpl.java | 20 +++ .../service/impl/SysUserServiceImpl.java | 128 +++++++++++------- .../src/main/resources/application.yml | 4 +- 56 files changed, 1085 insertions(+), 108 deletions(-) create mode 100644 tansci-boot-ui/src/components/layout/Empty.vue create mode 100644 tansci-boot-ui/src/components/layout/None.vue create mode 100644 tansci-boot-ui/src/router/permission.ts create mode 100644 tansci-boot-ui/src/utils/common.ts create mode 100644 tansci-boot-ui/src/views/common/Component.vue create mode 100644 tansci-boot-ui/src/views/common/Iframe.vue create mode 100644 tansci-boot/src/main/java/com/tansci/controller/SysDicController.java create mode 100644 tansci-boot/src/main/java/com/tansci/controller/SysLogController.java create mode 100644 tansci-boot/src/main/java/com/tansci/controller/SysMenuController.java create mode 100644 tansci-boot/src/main/java/com/tansci/controller/SysOrgController.java create mode 100644 tansci-boot/src/main/java/com/tansci/controller/SysRoleController.java create mode 100644 tansci-boot/src/main/java/com/tansci/domain/vo/SysUserSessionVo.java create mode 100644 tansci-boot/src/main/java/com/tansci/domain/vo/SysUserVo.java create mode 100644 tansci-boot/src/main/java/com/tansci/mapper/SysDicMapper.java create mode 100644 tansci-boot/src/main/java/com/tansci/mapper/SysLoginLogMapper.java create mode 100644 tansci-boot/src/main/java/com/tansci/mapper/SysMenuMapper.java create mode 100644 tansci-boot/src/main/java/com/tansci/mapper/SysOperLogMapper.java create mode 100644 tansci-boot/src/main/java/com/tansci/mapper/SysOrgMapper.java create mode 100644 tansci-boot/src/main/java/com/tansci/mapper/SysRoleMapper.java create mode 100644 tansci-boot/src/main/java/com/tansci/mapper/SysRoleMenuMapper.java create mode 100644 tansci-boot/src/main/java/com/tansci/mapper/SysRoleOrgMapper.java create mode 100644 tansci-boot/src/main/java/com/tansci/mapper/SysUserRoleMapper.java create mode 100644 tansci-boot/src/main/java/com/tansci/service/SysDicService.java create mode 100644 tansci-boot/src/main/java/com/tansci/service/SysLoginLogService.java create mode 100644 tansci-boot/src/main/java/com/tansci/service/SysMenuService.java create mode 100644 tansci-boot/src/main/java/com/tansci/service/SysOperLogService.java create mode 100644 tansci-boot/src/main/java/com/tansci/service/SysOrgService.java create mode 100644 tansci-boot/src/main/java/com/tansci/service/SysRoleMenuService.java create mode 100644 tansci-boot/src/main/java/com/tansci/service/SysRoleService.java create mode 100644 tansci-boot/src/main/java/com/tansci/service/SysUserRoleService.java create mode 100644 tansci-boot/src/main/java/com/tansci/service/impl/SysDicServiceImpl.java create mode 100644 tansci-boot/src/main/java/com/tansci/service/impl/SysLoginLogServiceImpl.java create mode 100644 tansci-boot/src/main/java/com/tansci/service/impl/SysMenuServiceImpl.java create mode 100644 tansci-boot/src/main/java/com/tansci/service/impl/SysOperLogServiceImpl.java create mode 100644 tansci-boot/src/main/java/com/tansci/service/impl/SysOrgServiceImpl.java create mode 100644 tansci-boot/src/main/java/com/tansci/service/impl/SysRoleMenuServiceImpl.java create mode 100644 tansci-boot/src/main/java/com/tansci/service/impl/SysRoleServiceImpl.java create mode 100644 tansci-boot/src/main/java/com/tansci/service/impl/SysUserRoleServiceImpl.java diff --git a/tansci-boot-ui/.env.development b/tansci-boot-ui/.env.development index be64e7f..63051f1 100644 --- a/tansci-boot-ui/.env.development +++ b/tansci-boot-ui/.env.development @@ -1 +1 @@ -VITE_BASE_API = 'http://localhost:8081/' \ No newline at end of file +VITE_BASE_API = 'http://localhost:8080/' \ No newline at end of file diff --git a/tansci-boot-ui/.env.production b/tansci-boot-ui/.env.production index be64e7f..63051f1 100644 --- a/tansci-boot-ui/.env.production +++ b/tansci-boot-ui/.env.production @@ -1 +1 @@ -VITE_BASE_API = 'http://localhost:8081/' \ No newline at end of file +VITE_BASE_API = 'http://localhost:8080/' \ No newline at end of file diff --git a/tansci-boot-ui/src/api/auth.ts b/tansci-boot-ui/src/api/auth.ts index 68d2a1e..4ee261e 100644 --- a/tansci-boot-ui/src/api/auth.ts +++ b/tansci-boot-ui/src/api/auth.ts @@ -1,52 +1,59 @@ import request from '@/utils/request' -// token key +const userKey:string = 'tansci_boot_user' const tokenKey:string = 'tansci_boot_token' -// 获取token +// token信息 export function getToken() { return sessionStorage.getItem(tokenKey); } - -// 存储token export function setToken(token:string) { sessionStorage.setItem(tokenKey, token); } - -// 删除token export function removeToken() { sessionStorage.removeItem(tokenKey); } +// 用户信息 +export function getUser() { + return sessionStorage.getItem(userKey); +} +export function setUser(data:any) { + return sessionStorage.setItem(userKey, JSON.stringify(data)); +} +export function removeUser() { + return sessionStorage.removeItem(userKey); +} + // 登录 export function login(data:any){ return new Promise((resolve, reject) => { - request({ - url: '/system/security/login', - method: 'post', - data: { - username: data.username, - password: data.password, - code: data.code, - uuid: data.uuid - } - }).then((res:any) => { - var token = res.data - setToken(token) - resolve(token) - }).catch((e:any) => { - reject(e) - }) + request({ + url: '/tansci/auth/login', + method: 'post', + data: { + username: data.username, + password: data.password, + code: data.code + } + }).then((res:any) => { + setToken(res.data.result.token) + setUser(res.data.result) + resolve(res.data.result.token) + }).catch((e:any) => { + reject(e) + }) }) } // 登出 export function logout(){ request({ - url: '/system/security/logout', + url: '/tansci/auth/logout', method: 'get' }).then(() => { removeToken() + removeUser() location.reload() }) } \ No newline at end of file diff --git a/tansci-boot-ui/src/components/layout/Empty.vue b/tansci-boot-ui/src/components/layout/Empty.vue new file mode 100644 index 0000000..400c7f2 --- /dev/null +++ b/tansci-boot-ui/src/components/layout/Empty.vue @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/tansci-boot-ui/src/components/layout/Index.vue b/tansci-boot-ui/src/components/layout/Index.vue index 05ae6af..2ffd1a4 100644 --- a/tansci-boot-ui/src/components/layout/Index.vue +++ b/tansci-boot-ui/src/components/layout/Index.vue @@ -23,6 +23,9 @@ // 获取菜单 let routers:any = []; let _routes = router.options.routes; + + console.log("_routes:",_routes) + _routes.forEach((item:any)=>{ if(item.children && item.type == 0){ routers.push(item) @@ -109,7 +112,7 @@ } } .el-aside{ - ::v-deep .el-menu{ + :deep(.el-menu) { margin: 0 0.6rem; padding: 0 0.2rem; border-right: none; diff --git a/tansci-boot-ui/src/components/layout/None.vue b/tansci-boot-ui/src/components/layout/None.vue new file mode 100644 index 0000000..3582ba1 --- /dev/null +++ b/tansci-boot-ui/src/components/layout/None.vue @@ -0,0 +1,7 @@ + \ No newline at end of file diff --git a/tansci-boot-ui/src/router/common.ts b/tansci-boot-ui/src/router/common.ts index a13698d..38e3131 100644 --- a/tansci-boot-ui/src/router/common.ts +++ b/tansci-boot-ui/src/router/common.ts @@ -20,5 +20,23 @@ export default[ name: '500', meta: {title: "500"}, component: () => import('@/views/common/500.vue') + }, + { + path: '/index', + name: 'index', + type: 0, + icon: 'HomeFilled', + meta: { title: "首页" }, + component: () => import("@/components/layout/Index.vue"), + children: [ + { + path: '/index', + name: 'index', + type: 0, + icon: 'HomeFilled', + meta: { title: "首页" }, + component: () => import('@/views/Index.vue') + } + ] } ] \ No newline at end of file diff --git a/tansci-boot-ui/src/router/index.ts b/tansci-boot-ui/src/router/index.ts index 2b33c7e..fb80bda 100644 --- a/tansci-boot-ui/src/router/index.ts +++ b/tansci-boot-ui/src/router/index.ts @@ -1,14 +1,61 @@ import { createRouter, createWebHistory } from "vue-router" +import { ElMessage } from 'element-plus' +import { getToken, removeToken, removeUser } from "@/api/auth" +import { generateRoutes } from "./permission" -import routers from './routers' +// import routers from './routers' import common from './common' const router = createRouter({ history: createWebHistory(), routes: [ ...common, - ...routers + // ...routers ] }) +const whiteList = ['/login'] +let load = false +router.beforeEach(async (to:any, from:any, next) => { + // 设置头部 + if(to.meta.title){ + document.title = to.meta.title + } else { + document.title = "Tansci Boot" + } + + if(getToken()){ + if(to.path === '/login'){ + next({ path: '/index' }) + } else { + if(load){ + next() + } else { + load = true + try { + // 获取菜单 + await generateRoutes().then( (accessRoutes:any) => { + accessRoutes.forEach( (item:any) => { + router.addRoute(item) + }) + }) + + next({ ...to, replace: true }) + } catch (error:any) { + removeToken() + removeUser() + ElMessage.error(error.data || 'Has Error') + next(`/login`) + } + } + } + } else { + if(whiteList.indexOf(to.path) !== -1){ + next() + } else { + next({ path: "/login" }) + } + } +}) + export default router \ No newline at end of file diff --git a/tansci-boot-ui/src/router/permission.ts b/tansci-boot-ui/src/router/permission.ts new file mode 100644 index 0000000..c86babe --- /dev/null +++ b/tansci-boot-ui/src/router/permission.ts @@ -0,0 +1,97 @@ +import request from '@/utils/request' +import common from '@/utils/common' + +const viewModules = import.meta.glob("../views/**/**.vue") +const layoutModules = import.meta.glob("../components/layout/**.vue") + +// 根据菜单构建动态路由 +export const filterAsyncRouter = (routers:any, level:any) => { + level = level || 0 + const accessedRouters = routers.filter( (router:any) => { + if (router.isShow === 1) { + var setIframe = () => { + router.component = loadView(`/common/Iframe`) + router.props = { url: router.url } + router.path = "/" + router.url + } + + if(router.url && router.url.startsWith('http')){ + if(router.openMode == '0'){ + setIframe() + } + } else if(router.url && router.url.startsWith('/') && router.url.indexOf('.htm') != -1) { + if(router.openMode == '0'){ + setIframe() + }else{ + router.path = location.href.substring(0, location.href.indexOf('/', location.href.indexOf('/', location.href.indexOf('/') + 1) + 1)) + router.path + } + } else if (router.componentName) { + router.props = { + name: router.componentName, + id :router.id + } + + // 根据组件类型渲染 + router.component = loadView(`/common/Component`) + } else if (router.component) { // 如果是现成组件 + const component:any = router.component + if (component === 'Layout') { + router.path = "/" + common.uuid() + router.component = level > 0 ? layoutModules[`../components/layout/None.vue`] : loadLayoutView() + } else { + router.path = router.path.startsWith('/') ? router.path : '/' + router.path + router.component = loadView(component) || layoutModules[`../components/layout/Empty.vue`] + } + } + if (router.children && router.children.length) { + router.children = filterAsyncRouter(router.children, level + 1) + } + return true + } + return false + }) + return accessedRouters +} + +export const loadLayoutView = () => { + return layoutModules[`../components/layout/Index.vue`] +} + +export const loadView = (view:any) => { + view = view.substring(0, 1) === '/' ? view : '/' + view + return viewModules[`../views${view}.vue`] +} + +// 获取当前用户的权限菜单 +export function generateRoutes(){ + return new Promise((resolve, reject) => { + request({ + url: '/tansci/sysmenu/tree', + method: 'get' + }).then( (res:any) => { + let data = recastData(res.data.result, []) + console.log(data) + const asyncRouter = filterAsyncRouter(data, 0) + resolve(asyncRouter) + }) + }) +} + +export function recastData(data:any, arr:any){ + data.forEach( (item:any) => { + arr.push({ + path: item.url, + name: item.url, + icon: item.icon, + isShow: item.isShow, + component: item.component, + meta: { + title: item.chineseName, + keepAlive: item.keepAlive + } + }) + if (item.children && item.children.length) { + recastData(item.children, arr); + } + }); +} \ No newline at end of file diff --git a/tansci-boot-ui/src/utils/common.ts b/tansci-boot-ui/src/utils/common.ts new file mode 100644 index 0000000..348f691 --- /dev/null +++ b/tansci-boot-ui/src/utils/common.ts @@ -0,0 +1,16 @@ +const common:any = {} + +// 生成UUID +common.uuid = () => { + function S4() { + return (((1+Math.random())*0x10000)|0).toString(16).substring(1); + } + return (S4()+S4()+S4()+S4()+S4()+S4()+S4()+S4()); +} + +// 是否包含逗号 +common.isComma = (value:any) => { + return value.toString().indexOf(',') !== -1 +} + +export default common \ No newline at end of file diff --git a/tansci-boot-ui/src/utils/request.ts b/tansci-boot-ui/src/utils/request.ts index b3114b5..bc9224a 100644 --- a/tansci-boot-ui/src/utils/request.ts +++ b/tansci-boot-ui/src/utils/request.ts @@ -18,7 +18,7 @@ const axiosInstance: AxiosInstance = axios.create({ axiosInstance.interceptors.request.use((config: AxiosRequestConfig) => { // 设置token if (getToken()) { - config.headers.Authorization = `Bearer ${getToken()}` + config.headers.token = getToken() } return config; }, diff --git a/tansci-boot-ui/src/views/common/Component.vue b/tansci-boot-ui/src/views/common/Component.vue new file mode 100644 index 0000000..74a6a08 --- /dev/null +++ b/tansci-boot-ui/src/views/common/Component.vue @@ -0,0 +1,12 @@ + + + \ No newline at end of file diff --git a/tansci-boot-ui/src/views/common/Iframe.vue b/tansci-boot-ui/src/views/common/Iframe.vue new file mode 100644 index 0000000..cf6379a --- /dev/null +++ b/tansci-boot-ui/src/views/common/Iframe.vue @@ -0,0 +1,23 @@ + + + + + + diff --git a/tansci-boot-ui/src/views/common/Login.vue b/tansci-boot-ui/src/views/common/Login.vue index b41f05a..f51d693 100644 --- a/tansci-boot-ui/src/views/common/Login.vue +++ b/tansci-boot-ui/src/views/common/Login.vue @@ -78,8 +78,7 @@ + {required: true,message: '请输入密码',trigger: 'blur'}]"> diff --git a/tansci-boot-ui/vite.config.ts b/tansci-boot-ui/vite.config.ts index 533762d..236faa7 100644 --- a/tansci-boot-ui/vite.config.ts +++ b/tansci-boot-ui/vite.config.ts @@ -10,6 +10,7 @@ import { transformerVariantGroup, } from 'unocss' +const url = "http://127.0.0.1:8080" export default defineConfig({ resolve: { alias: { @@ -39,5 +40,16 @@ export default defineConfig({ transformerVariantGroup(), ] }), - ] + ], + server: { + proxy: { + '/tansci': { + target: url, + changeOrigin: true, + pathRewrite: { + '^/tansci':'/tansci' + } + } + } + } }) diff --git a/tansci-boot/src/main/java/com/tansci/config/SaTokenConfig.java b/tansci-boot/src/main/java/com/tansci/config/SaTokenConfig.java index a0f3107..bc22bd3 100644 --- a/tansci-boot/src/main/java/com/tansci/config/SaTokenConfig.java +++ b/tansci-boot/src/main/java/com/tansci/config/SaTokenConfig.java @@ -23,7 +23,7 @@ public class SaTokenConfig implements WebMvcConfigurer { // 验证所有接口 .addPathPatterns("/**") // 忽略校验 - .excludePathPatterns("/auth/**","/magic/**"); + .excludePathPatterns("/auth/**"); } } diff --git a/tansci-boot/src/main/java/com/tansci/controller/AuthController.java b/tansci-boot/src/main/java/com/tansci/controller/AuthController.java index b8eda16..4b361f2 100644 --- a/tansci-boot/src/main/java/com/tansci/controller/AuthController.java +++ b/tansci-boot/src/main/java/com/tansci/controller/AuthController.java @@ -1,9 +1,11 @@ package com.tansci.controller; +import cn.dev33.satoken.session.SaSessionCustomUtil; import cn.dev33.satoken.stp.StpUtil; import com.tansci.common.WrapMapper; import com.tansci.common.Wrapper; import com.tansci.domain.SysUser; +import com.tansci.domain.vo.SysUserVo; import com.tansci.service.SysUserService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -29,13 +31,14 @@ public class AuthController { @ApiOperation(value = "登录", notes = "登录") @PostMapping("/login") - public Wrapper login(@RequestBody SysUser user) { - return WrapMapper.wrap(Wrapper.SUCCESS_CODE, Wrapper.SUCCESS_MESSAGE, sysUserService.login(user.getUsername())); + public Wrapper login(@RequestBody SysUser user) { + return WrapMapper.wrap(Wrapper.SUCCESS_CODE, Wrapper.SUCCESS_MESSAGE, sysUserService.login(user)); } @ApiOperation(value = "登出", notes = "登出") @GetMapping("/logout") public Wrapper logout() { + SaSessionCustomUtil.deleteSessionById(String.valueOf(StpUtil.getLoginId())); StpUtil.logout(); return WrapMapper.wrap(Wrapper.SUCCESS_CODE, Wrapper.SUCCESS_MESSAGE, "登出成功!"); } diff --git a/tansci-boot/src/main/java/com/tansci/controller/SysDicController.java b/tansci-boot/src/main/java/com/tansci/controller/SysDicController.java new file mode 100644 index 0000000..b03324f --- /dev/null +++ b/tansci-boot/src/main/java/com/tansci/controller/SysDicController.java @@ -0,0 +1,26 @@ +package com.tansci.controller; + +import com.tansci.service.SysDicService; +import io.swagger.annotations.Api; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @ClassName: SysDicController.java + * @ClassPath: com.tansci.controller.SysDicController.java + * @Description: 字典管理 + * @Author: tanyp + * @Date: 2023/3/29 9:45 + **/ +@Slf4j +@RestController +@RequestMapping("/sysdic") +@Api(value = "sysdic", tags = "字典管理") +public class SysDicController { + + @Autowired + private SysDicService sysDicService; + +} diff --git a/tansci-boot/src/main/java/com/tansci/controller/SysLogController.java b/tansci-boot/src/main/java/com/tansci/controller/SysLogController.java new file mode 100644 index 0000000..6b391bf --- /dev/null +++ b/tansci-boot/src/main/java/com/tansci/controller/SysLogController.java @@ -0,0 +1,29 @@ +package com.tansci.controller; + +import com.tansci.service.SysLoginLogService; +import com.tansci.service.SysOperLogService; +import io.swagger.annotations.Api; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @ClassName: SysLogController.java + * @ClassPath: com.tansci.controller.SysLogController.java + * @Description: 日志管理 + * @Author: tanyp + * @Date: 2023/3/29 9:45 + **/ +@Slf4j +@RestController +@RequestMapping("/syslog") +@Api(value = "syslog", tags = "日志管理") +public class SysLogController { + + @Autowired + private SysLoginLogService sysLoginLogService; + @Autowired + private SysOperLogService sysOperLogService; + +} diff --git a/tansci-boot/src/main/java/com/tansci/controller/SysMenuController.java b/tansci-boot/src/main/java/com/tansci/controller/SysMenuController.java new file mode 100644 index 0000000..c2b4e7e --- /dev/null +++ b/tansci-boot/src/main/java/com/tansci/controller/SysMenuController.java @@ -0,0 +1,39 @@ +package com.tansci.controller; + +import com.tansci.common.WrapMapper; +import com.tansci.common.Wrapper; +import com.tansci.domain.SysMenu; +import com.tansci.service.SysMenuService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +/** + * @ClassName: SysMenuController.java + * @ClassPath: com.tansci.controller.SysMenuController.java + * @Description: 菜单管理 + * @Author: tanyp + * @Date: 2023/3/29 9:45 + **/ +@Slf4j +@RestController +@RequestMapping("/sysmenu") +@Api(value = "sysmenu", tags = "菜单管理") +public class SysMenuController { + + @Autowired + private SysMenuService sysMenuService; + + @ApiOperation(value = "菜单树", notes = "菜单树") + @GetMapping("/tree") + public Wrapper> tree(SysMenu menu) { + return WrapMapper.wrap(Wrapper.SUCCESS_CODE, Wrapper.SUCCESS_MESSAGE, sysMenuService.tree(menu)); + } + +} diff --git a/tansci-boot/src/main/java/com/tansci/controller/SysOrgController.java b/tansci-boot/src/main/java/com/tansci/controller/SysOrgController.java new file mode 100644 index 0000000..7bee37f --- /dev/null +++ b/tansci-boot/src/main/java/com/tansci/controller/SysOrgController.java @@ -0,0 +1,26 @@ +package com.tansci.controller; + +import com.tansci.service.SysOrgService; +import io.swagger.annotations.Api; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @ClassName: SysOrgController.java + * @ClassPath: com.tansci.controller.SysOrgController.java + * @Description: 组织管理 + * @Author: tanyp + * @Date: 2023/3/29 9:46 + **/ +@Slf4j +@RestController +@RequestMapping("/sysrog") +@Api(value = "sysrog", tags = "组织管理") +public class SysOrgController { + + @Autowired + private SysOrgService sysOrgService; + +} diff --git a/tansci-boot/src/main/java/com/tansci/controller/SysRoleController.java b/tansci-boot/src/main/java/com/tansci/controller/SysRoleController.java new file mode 100644 index 0000000..c020590 --- /dev/null +++ b/tansci-boot/src/main/java/com/tansci/controller/SysRoleController.java @@ -0,0 +1,27 @@ +package com.tansci.controller; + +import com.tansci.service.SysRoleService; +import io.swagger.annotations.Api; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * @ClassName: SysRoleController.java + * @ClassPath: com.tansci.controller.SysRoleController.java + * @Description: 角色管理 + * @Author: tanyp + * @Date: 2023/3/29 9:46 + **/ +@Slf4j +@RestController +@RequestMapping("/sysrole") +@Api(value = "sysrole", tags = "角色管理") +public class SysRoleController { + + @Autowired + private SysRoleService sysRoleService; + + +} diff --git a/tansci-boot/src/main/java/com/tansci/controller/SysUserController.java b/tansci-boot/src/main/java/com/tansci/controller/SysUserController.java index 86ed60c..826d356 100644 --- a/tansci-boot/src/main/java/com/tansci/controller/SysUserController.java +++ b/tansci-boot/src/main/java/com/tansci/controller/SysUserController.java @@ -23,8 +23,8 @@ import java.util.List; **/ @Slf4j @RestController -@RequestMapping("/user") -@Api(value = "user", tags = "用户管理") +@RequestMapping("/sysuser") +@Api(value = "sysuser", tags = "用户管理") public class SysUserController { @Autowired @@ -44,25 +44,25 @@ public class SysUserController { @ApiOperation(value = "添加用户信息", notes = "添加用户信息") @PostMapping("/save") - public Wrapper save(@RequestBody SysUser user) { - return WrapMapper.wrap(Wrapper.SUCCESS_CODE, Wrapper.SUCCESS_MESSAGE, sysUserService.save(user)); + public Wrapper save(@RequestBody SysUser user) { + return WrapMapper.wrap(Wrapper.SUCCESS_CODE, Wrapper.SUCCESS_MESSAGE, sysUserService.insert(user)); } @ApiOperation(value = "修改用户信息", notes = "修改用户信息") @PostMapping("/update") - public Wrapper update(@RequestBody SysUser user) { + public Wrapper update(@RequestBody SysUser user) { return WrapMapper.wrap(Wrapper.SUCCESS_CODE, Wrapper.SUCCESS_MESSAGE, sysUserService.update(user)); } @ApiOperation(value = "删除用户", notes = "删除用户") @GetMapping("/del") - public Wrapper del(SysUser user) { + public Wrapper del(SysUser user) { return WrapMapper.wrap(Wrapper.SUCCESS_CODE, Wrapper.SUCCESS_MESSAGE, sysUserService.del(user)); } @ApiOperation(value = "修改密码", notes = "修改密码") @PostMapping("/modifyPass") - public Wrapper modifyPass(@RequestBody SysUser user) { + public Wrapper modifyPass(@RequestBody SysUser user) { return WrapMapper.wrap(Wrapper.SUCCESS_CODE, Wrapper.SUCCESS_MESSAGE, sysUserService.modifyPass(user)); } diff --git a/tansci-boot/src/main/java/com/tansci/domain/SysRole.java b/tansci-boot/src/main/java/com/tansci/domain/SysRole.java index cec2b8c..cffb66c 100644 --- a/tansci-boot/src/main/java/com/tansci/domain/SysRole.java +++ b/tansci-boot/src/main/java/com/tansci/domain/SysRole.java @@ -1,7 +1,6 @@ package com.tansci.domain; import com.baomidou.mybatisplus.annotation.IdType; -import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.annotation.JsonFormat; @@ -17,7 +16,7 @@ import java.time.LocalDateTime; /** * @ClassName: SysRole.java * @ClassPath: com.tansci.domain.SysRole.java - * @Description: 权限 + * @Description: 角色 * @Author: tanyp * @Date: 2023/03/20 10:38 **/ @@ -26,7 +25,7 @@ import java.time.LocalDateTime; @AllArgsConstructor @NoArgsConstructor @TableName(value = "sys_role") -@ApiModel(value = "权限") +@ApiModel(value = "角色") public class SysRole { @TableId(type = IdType.ASSIGN_UUID) diff --git a/tansci-boot/src/main/java/com/tansci/domain/SysUser.java b/tansci-boot/src/main/java/com/tansci/domain/SysUser.java index 607d1bd..7ba9987 100644 --- a/tansci-boot/src/main/java/com/tansci/domain/SysUser.java +++ b/tansci-boot/src/main/java/com/tansci/domain/SysUser.java @@ -15,6 +15,7 @@ import lombok.NoArgsConstructor; import java.time.LocalDate; import java.time.LocalDateTime; +import java.util.List; /** * @path:com.tansci.domain.SysUser.java @@ -48,8 +49,6 @@ public class SysUser { @ApiModelProperty(value = "用户类型:1、管理员,2、普通用户") private Integer type; - @TableField(exist = false) - private String typeName; @ApiModelProperty(value = "手机号") private String phone; @@ -59,8 +58,6 @@ public class SysUser { @ApiModelProperty(value = "性别:0、男,1、女") private Integer gender; - @TableField(exist = false) - private String genderName; @ApiModelProperty(value = "出生日期") private LocalDate birthday; @@ -98,11 +95,7 @@ public class SysUser { private String remarks; @TableField(exist = false) - @ApiModelProperty(value = "角色id") - private String roleId; - - @TableField(exist = false) - @ApiModelProperty(value = "token") - private String token; + @ApiModelProperty(value = "权限IDS") + private List roleIds; } \ No newline at end of file diff --git a/tansci-boot/src/main/java/com/tansci/domain/vo/SysUserSessionVo.java b/tansci-boot/src/main/java/com/tansci/domain/vo/SysUserSessionVo.java new file mode 100644 index 0000000..0d07e5a --- /dev/null +++ b/tansci-boot/src/main/java/com/tansci/domain/vo/SysUserSessionVo.java @@ -0,0 +1,41 @@ +package com.tansci.domain.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; + +/** + * @ClassName: SysUserSession.java + * @ClassPath: com.tansci.domain.vo.SysUserSession.java + * @Description: 用户session信息 + * @Author: tanyp + * @Date: 2023/3/29 11:02 + **/ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +@ApiModel(value = "用户session信息") +public class SysUserSessionVo { + + @ApiModelProperty(value = "用户ID") + private String id; + + @ApiModelProperty(value = "用户名称") + private String username; + + @ApiModelProperty(value = "用户昵称") + private String nickname; + + @ApiModelProperty(value = "用户类型:1、管理员,2、普通用户") + private Integer type; + + @ApiModelProperty(value = "权限IDS") + private List roleIds; + +} diff --git a/tansci-boot/src/main/java/com/tansci/domain/vo/SysUserVo.java b/tansci-boot/src/main/java/com/tansci/domain/vo/SysUserVo.java new file mode 100644 index 0000000..58010be --- /dev/null +++ b/tansci-boot/src/main/java/com/tansci/domain/vo/SysUserVo.java @@ -0,0 +1,46 @@ +package com.tansci.domain.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.time.LocalDateTime; + +/** + * @ClassName: SysUserVo.java + * @ClassPath: com.tansci.domain.vo.SysUserVo.java + * @Description: 用户信息 + * @Author: tanyp + * @Date: 2023/3/29 9:13 + **/ +@Data +@Builder +@AllArgsConstructor +@NoArgsConstructor +@ApiModel(value = "用户信息") +public class SysUserVo { + + @ApiModelProperty(value = "用户名称") + private String username; + + @ApiModelProperty(value = "用户昵称") + private String nickname; + + @ApiModelProperty(value = "用户类型:1、管理员,2、普通用户") + private Integer type; + + @ApiModelProperty(value = "头像") + private String avatar; + + @ApiModelProperty(value = "token") + private String token; + + @ApiModelProperty(value = "登录时间") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", locale = "zh", timezone = "GMT+8") + private LocalDateTime loginTime; + +} diff --git a/tansci-boot/src/main/java/com/tansci/handler/GlobalExceptionHandler.java b/tansci-boot/src/main/java/com/tansci/handler/GlobalExceptionHandler.java index 857d595..b4da295 100644 --- a/tansci-boot/src/main/java/com/tansci/handler/GlobalExceptionHandler.java +++ b/tansci-boot/src/main/java/com/tansci/handler/GlobalExceptionHandler.java @@ -37,7 +37,7 @@ public class GlobalExceptionHandler { return WrapMapper.wrap(Wrapper.ILLEGAL_ARGUMENT_CODE_, "参数有误:" + ex.getBindingResult().getFieldError().getDefaultMessage(), null); } else { log.error("统一系统异常:{}", e); - return WrapMapper.wrap(Wrapper.ERROR_CODE, Wrapper.ERROR_MESSAGE, null); + return WrapMapper.wrap(Wrapper.ERROR_CODE, e.getMessage(), null); } } diff --git a/tansci-boot/src/main/java/com/tansci/mapper/SysDicMapper.java b/tansci-boot/src/main/java/com/tansci/mapper/SysDicMapper.java new file mode 100644 index 0000000..460fafb --- /dev/null +++ b/tansci-boot/src/main/java/com/tansci/mapper/SysDicMapper.java @@ -0,0 +1,16 @@ +package com.tansci.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.tansci.domain.SysDic; +import org.apache.ibatis.annotations.Mapper; + +/** + * @ClassName: SysDicMapper.java + * @ClassPath: com.tansci.mapper.SysDicMapper.java + * @Description: 字典信息 + * @Author: tanyp + * @Date: 2023/3/29 9:28 + **/ +@Mapper +public interface SysDicMapper extends BaseMapper { +} diff --git a/tansci-boot/src/main/java/com/tansci/mapper/SysLoginLogMapper.java b/tansci-boot/src/main/java/com/tansci/mapper/SysLoginLogMapper.java new file mode 100644 index 0000000..e67e49e --- /dev/null +++ b/tansci-boot/src/main/java/com/tansci/mapper/SysLoginLogMapper.java @@ -0,0 +1,16 @@ +package com.tansci.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.tansci.domain.SysLoginLog; +import org.apache.ibatis.annotations.Mapper; + +/** + * @ClassName: SysLoginLogMapper.java + * @ClassPath: com.tansci.mapper.SysLoginLogMapper.java + * @Description: 登录日志 + * @Author: tanyp + * @Date: 2023/3/29 9:29 + **/ +@Mapper +public interface SysLoginLogMapper extends BaseMapper { +} diff --git a/tansci-boot/src/main/java/com/tansci/mapper/SysMenuMapper.java b/tansci-boot/src/main/java/com/tansci/mapper/SysMenuMapper.java new file mode 100644 index 0000000..f20b747 --- /dev/null +++ b/tansci-boot/src/main/java/com/tansci/mapper/SysMenuMapper.java @@ -0,0 +1,16 @@ +package com.tansci.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.tansci.domain.SysMenu; +import org.apache.ibatis.annotations.Mapper; + +/** + * @ClassName: SysMenuMapper.java + * @ClassPath: com.tansci.mapper.SysMenuMapper.java + * @Description: 菜单信息 + * @Author: tanyp + * @Date: 2023/3/29 9:26 + **/ +@Mapper +public interface SysMenuMapper extends BaseMapper { +} diff --git a/tansci-boot/src/main/java/com/tansci/mapper/SysOperLogMapper.java b/tansci-boot/src/main/java/com/tansci/mapper/SysOperLogMapper.java new file mode 100644 index 0000000..ce09585 --- /dev/null +++ b/tansci-boot/src/main/java/com/tansci/mapper/SysOperLogMapper.java @@ -0,0 +1,16 @@ +package com.tansci.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.tansci.domain.SysOperLog; +import org.apache.ibatis.annotations.Mapper; + +/** + * @ClassName: SysOperLogMapper.java + * @ClassPath: com.tansci.mapper.SysOperLogMapper.java + * @Description: 操作日志 + * @Author: tanyp + * @Date: 2023/3/29 9:29 + **/ +@Mapper +public interface SysOperLogMapper extends BaseMapper { +} diff --git a/tansci-boot/src/main/java/com/tansci/mapper/SysOrgMapper.java b/tansci-boot/src/main/java/com/tansci/mapper/SysOrgMapper.java new file mode 100644 index 0000000..bbeddd1 --- /dev/null +++ b/tansci-boot/src/main/java/com/tansci/mapper/SysOrgMapper.java @@ -0,0 +1,16 @@ +package com.tansci.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.tansci.domain.SysOrg; +import org.apache.ibatis.annotations.Mapper; + +/** + * @ClassName: SysOrgMapper.java + * @ClassPath: com.tansci.mapper.SysOrgMapper.java + * @Description: 组织机构 + * @Author: tanyp + * @Date: 2023/3/29 9:27 + **/ +@Mapper +public interface SysOrgMapper extends BaseMapper { +} diff --git a/tansci-boot/src/main/java/com/tansci/mapper/SysRoleMapper.java b/tansci-boot/src/main/java/com/tansci/mapper/SysRoleMapper.java new file mode 100644 index 0000000..85caf2c --- /dev/null +++ b/tansci-boot/src/main/java/com/tansci/mapper/SysRoleMapper.java @@ -0,0 +1,16 @@ +package com.tansci.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.tansci.domain.SysRole; +import org.apache.ibatis.annotations.Mapper; + +/** + * @ClassName: SysRoleMapper.java + * @ClassPath: com.tansci.mapper.SysRoleMapper.java + * @Description: 角色信息 + * @Author: tanyp + * @Date: 2023/3/29 9:25 + **/ +@Mapper +public interface SysRoleMapper extends BaseMapper { +} diff --git a/tansci-boot/src/main/java/com/tansci/mapper/SysRoleMenuMapper.java b/tansci-boot/src/main/java/com/tansci/mapper/SysRoleMenuMapper.java new file mode 100644 index 0000000..a591dd3 --- /dev/null +++ b/tansci-boot/src/main/java/com/tansci/mapper/SysRoleMenuMapper.java @@ -0,0 +1,16 @@ +package com.tansci.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.tansci.domain.SysRoleMenu; +import org.apache.ibatis.annotations.Mapper; + +/** + * @ClassName: SysRoleMenuMapper.java + * @ClassPath: com.tansci.mapper.SysRoleMenuMapper.java + * @Description: 菜单角色 + * @Author: tanyp + * @Date: 2023/3/29 9:30 + **/ +@Mapper +public interface SysRoleMenuMapper extends BaseMapper { +} diff --git a/tansci-boot/src/main/java/com/tansci/mapper/SysRoleOrgMapper.java b/tansci-boot/src/main/java/com/tansci/mapper/SysRoleOrgMapper.java new file mode 100644 index 0000000..e5ff092 --- /dev/null +++ b/tansci-boot/src/main/java/com/tansci/mapper/SysRoleOrgMapper.java @@ -0,0 +1,16 @@ +package com.tansci.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.tansci.domain.SysRoleOrg; +import org.apache.ibatis.annotations.Mapper; + +/** + * @ClassName: SysRoleOrgMapper.java + * @ClassPath: com.tansci.mapper.SysRoleOrgMapper.java + * @Description: 组织角色 + * @Author: tanyp + * @Date: 2023/3/29 9:30 + **/ +@Mapper +public interface SysRoleOrgMapper extends BaseMapper { +} diff --git a/tansci-boot/src/main/java/com/tansci/mapper/SysUserRoleMapper.java b/tansci-boot/src/main/java/com/tansci/mapper/SysUserRoleMapper.java new file mode 100644 index 0000000..f7b7988 --- /dev/null +++ b/tansci-boot/src/main/java/com/tansci/mapper/SysUserRoleMapper.java @@ -0,0 +1,16 @@ +package com.tansci.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.tansci.domain.SysUserRole; +import org.apache.ibatis.annotations.Mapper; + +/** + * @ClassName: SysUserRoleMapper.java + * @ClassPath: com.tansci.mapper.SysUserRoleMapper.java + * @Description: 用户权限 + * @Author: tanyp + * @Date: 2023/3/29 9:30 + **/ +@Mapper +public interface SysUserRoleMapper extends BaseMapper { +} diff --git a/tansci-boot/src/main/java/com/tansci/service/SysDicService.java b/tansci-boot/src/main/java/com/tansci/service/SysDicService.java new file mode 100644 index 0000000..9c9fdf8 --- /dev/null +++ b/tansci-boot/src/main/java/com/tansci/service/SysDicService.java @@ -0,0 +1,14 @@ +package com.tansci.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.tansci.domain.SysDic; + +/** + * @ClassName: SysDicService.java + * @ClassPath: com.tansci.service.SysDicService.java + * @Description: 字典信息 + * @Author: tanyp + * @Date: 2023/3/29 9:33 + **/ +public interface SysDicService extends IService { +} diff --git a/tansci-boot/src/main/java/com/tansci/service/SysLoginLogService.java b/tansci-boot/src/main/java/com/tansci/service/SysLoginLogService.java new file mode 100644 index 0000000..403b70c --- /dev/null +++ b/tansci-boot/src/main/java/com/tansci/service/SysLoginLogService.java @@ -0,0 +1,14 @@ +package com.tansci.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.tansci.domain.SysLoginLog; + +/** + * @ClassName: SysLoginLogService.java + * @ClassPath: com.tansci.service.SysLoginLogService.java + * @Description: 登录日志 + * @Author: tanyp + * @Date: 2023/3/29 9:34 + **/ +public interface SysLoginLogService extends IService { +} diff --git a/tansci-boot/src/main/java/com/tansci/service/SysMenuService.java b/tansci-boot/src/main/java/com/tansci/service/SysMenuService.java new file mode 100644 index 0000000..f85d3c8 --- /dev/null +++ b/tansci-boot/src/main/java/com/tansci/service/SysMenuService.java @@ -0,0 +1,19 @@ +package com.tansci.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.tansci.domain.SysMenu; + +import java.util.List; + +/** + * @ClassName: SysMenuService.java + * @ClassPath: com.tansci.service.SysMenuService.java + * @Description: 菜单信息 + * @Author: tanyp + * @Date: 2023/3/29 9:35 + **/ +public interface SysMenuService extends IService { + + List tree(SysMenu menu); + +} diff --git a/tansci-boot/src/main/java/com/tansci/service/SysOperLogService.java b/tansci-boot/src/main/java/com/tansci/service/SysOperLogService.java new file mode 100644 index 0000000..fc31bdb --- /dev/null +++ b/tansci-boot/src/main/java/com/tansci/service/SysOperLogService.java @@ -0,0 +1,14 @@ +package com.tansci.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.tansci.domain.SysOperLog; + +/** + * @ClassName: SysOperLogService.java + * @ClassPath: com.tansci.service.SysOperLogService.java + * @Description: 操作日志 + * @Author: tanyp + * @Date: 2023/3/29 9:35 + **/ +public interface SysOperLogService extends IService { +} diff --git a/tansci-boot/src/main/java/com/tansci/service/SysOrgService.java b/tansci-boot/src/main/java/com/tansci/service/SysOrgService.java new file mode 100644 index 0000000..b056634 --- /dev/null +++ b/tansci-boot/src/main/java/com/tansci/service/SysOrgService.java @@ -0,0 +1,14 @@ +package com.tansci.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.tansci.domain.SysOrg; + +/** + * @ClassName: SysOrgService.java + * @ClassPath: com.tansci.service.SysOrgService.java + * @Description: 组织信息 + * @Author: tanyp + * @Date: 2023/3/29 9:36 + **/ +public interface SysOrgService extends IService { +} diff --git a/tansci-boot/src/main/java/com/tansci/service/SysRoleMenuService.java b/tansci-boot/src/main/java/com/tansci/service/SysRoleMenuService.java new file mode 100644 index 0000000..c78e738 --- /dev/null +++ b/tansci-boot/src/main/java/com/tansci/service/SysRoleMenuService.java @@ -0,0 +1,14 @@ +package com.tansci.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.tansci.domain.SysRoleMenu; + +/** + * @ClassName: SysRoleMenuService.java + * @ClassPath: com.tansci.service.SysRoleMenuService.java + * @Description: 菜单角色 + * @Author: tanyp + * @Date: 2023/3/29 10:26 + **/ +public interface SysRoleMenuService extends IService { +} diff --git a/tansci-boot/src/main/java/com/tansci/service/SysRoleService.java b/tansci-boot/src/main/java/com/tansci/service/SysRoleService.java new file mode 100644 index 0000000..844168e --- /dev/null +++ b/tansci-boot/src/main/java/com/tansci/service/SysRoleService.java @@ -0,0 +1,14 @@ +package com.tansci.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.tansci.domain.SysRole; + +/** + * @ClassName: SysRoleService.java + * @ClassPath: com.tansci.service.SysRoleService.java + * @Description: 角色信息 + * @Author: tanyp + * @Date: 2023/3/29 9:37 + **/ +public interface SysRoleService extends IService { +} diff --git a/tansci-boot/src/main/java/com/tansci/service/SysUserRoleService.java b/tansci-boot/src/main/java/com/tansci/service/SysUserRoleService.java new file mode 100644 index 0000000..898f736 --- /dev/null +++ b/tansci-boot/src/main/java/com/tansci/service/SysUserRoleService.java @@ -0,0 +1,14 @@ +package com.tansci.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.tansci.domain.SysUserRole; + +/** + * @ClassName: SysUserRoleService.java + * @ClassPath: com.tansci.service.SysUserRoleService.java + * @Description: 用户角色 + * @Author: tanyp + * @Date: 2023/3/29 10:04 + **/ +public interface SysUserRoleService extends IService { +} diff --git a/tansci-boot/src/main/java/com/tansci/service/SysUserService.java b/tansci-boot/src/main/java/com/tansci/service/SysUserService.java index 89802b3..f7eec94 100644 --- a/tansci-boot/src/main/java/com/tansci/service/SysUserService.java +++ b/tansci-boot/src/main/java/com/tansci/service/SysUserService.java @@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import com.tansci.domain.SysUser; +import com.tansci.domain.vo.SysUserVo; import java.util.List; @@ -20,14 +21,14 @@ public interface SysUserService extends IService { List list(SysUser user); - Integer modifyPass(SysUser user); + Object insert(SysUser user); - boolean save(SysUser user); + Object update(SysUser user); - boolean update(SysUser user); + Object del(SysUser user); - boolean del(SysUser user); + SysUserVo login(SysUser user); - SysUser login(String username); + Object modifyPass(SysUser user); } diff --git a/tansci-boot/src/main/java/com/tansci/service/impl/SysDicServiceImpl.java b/tansci-boot/src/main/java/com/tansci/service/impl/SysDicServiceImpl.java new file mode 100644 index 0000000..afaca59 --- /dev/null +++ b/tansci-boot/src/main/java/com/tansci/service/impl/SysDicServiceImpl.java @@ -0,0 +1,20 @@ +package com.tansci.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.tansci.domain.SysDic; +import com.tansci.mapper.SysDicMapper; +import com.tansci.service.SysDicService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +/** + * @ClassName: SysDicServiceImpl.java + * @ClassPath: com.tansci.service.impl.SysDicServiceImpl.java + * @Description: 字典信息 + * @Author: tanyp + * @Date: 2023/3/29 9:39 + **/ +@Slf4j +@Service +public class SysDicServiceImpl extends ServiceImpl implements SysDicService { +} diff --git a/tansci-boot/src/main/java/com/tansci/service/impl/SysLoginLogServiceImpl.java b/tansci-boot/src/main/java/com/tansci/service/impl/SysLoginLogServiceImpl.java new file mode 100644 index 0000000..2e102fe --- /dev/null +++ b/tansci-boot/src/main/java/com/tansci/service/impl/SysLoginLogServiceImpl.java @@ -0,0 +1,20 @@ +package com.tansci.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.tansci.domain.SysLoginLog; +import com.tansci.mapper.SysLoginLogMapper; +import com.tansci.service.SysLoginLogService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +/** + * @ClassName: SysLoginLogServiceImpl.java + * @ClassPath: com.tansci.service.impl.SysLoginLogServiceImpl.java + * @Description: 登录日志 + * @Author: tanyp + * @Date: 2023/3/29 9:40 + **/ +@Slf4j +@Service +public class SysLoginLogServiceImpl extends ServiceImpl implements SysLoginLogService { +} diff --git a/tansci-boot/src/main/java/com/tansci/service/impl/SysMenuServiceImpl.java b/tansci-boot/src/main/java/com/tansci/service/impl/SysMenuServiceImpl.java new file mode 100644 index 0000000..94231ec --- /dev/null +++ b/tansci-boot/src/main/java/com/tansci/service/impl/SysMenuServiceImpl.java @@ -0,0 +1,63 @@ +package com.tansci.service.impl; + +import cn.dev33.satoken.stp.StpUtil; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.google.common.collect.Lists; +import com.tansci.common.constant.Constants; +import com.tansci.domain.SysMenu; +import com.tansci.domain.SysRoleMenu; +import com.tansci.domain.vo.SysUserSessionVo; +import com.tansci.mapper.SysMenuMapper; +import com.tansci.service.SysMenuService; +import com.tansci.service.SysRoleMenuService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.*; +import java.util.stream.Collectors; + +/** + * @ClassName: SysMenuServiceImpl.java + * @ClassPath: com.tansci.service.impl.SysMenuServiceImpl.java + * @Description: 菜单信息 + * @Author: tanyp + * @Date: 2023/3/29 9:41 + **/ +@Slf4j +@Service +public class SysMenuServiceImpl extends ServiceImpl implements SysMenuService { + + @Autowired + private SysRoleMenuService sysRoleMenuService; + + @Override + public List tree(SysMenu menu) { + // 菜单权限 + String userId = String.valueOf(StpUtil.getLoginId()); + SysUserSessionVo sessionVo = (SysUserSessionVo) StpUtil.getSession().get(userId); + List menuIds = Lists.newArrayList(); + if (Objects.nonNull(sessionVo) && Objects.nonNull(sessionVo.getRoleIds()) && sessionVo.getRoleIds().size() > 0) { + List menus = sysRoleMenuService.list(Wrappers.lambdaQuery().eq(SysRoleMenu::getRoleId, sessionVo.getRoleIds())); + menuIds.addAll(menus.stream().map(SysRoleMenu::getMenuId).collect(Collectors.toList())); + } + + List list = this.baseMapper.selectList( + Wrappers.lambdaQuery() + .eq(SysMenu::getIsDel, Constants.NOT_DEL_FALG) + .eq(Objects.nonNull(menuIds) && menuIds.size() > 0, SysMenu::getId, menuIds) + .eq(Objects.nonNull(menu.getParentId()), SysMenu::getParentId, menu.getParentId()) + .like(Objects.nonNull(menu.getName()), SysMenu::getName, menu.getName()) + .like(Objects.nonNull(menu.getChineseName()), SysMenu::getChineseName, menu.getChineseName()) + .orderByDesc(SysMenu::getUpdateTime) + ); + list = list.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(SysMenu::getId))), ArrayList::new)); + Map> map = list.stream().collect(Collectors.groupingBy(SysMenu::getParentId, Collectors.toList())); + list.stream().forEach(item -> item.setChildren(map.get(item.getId()))); + + List menuList = map.get("0").stream().sorted(Comparator.comparing(SysMenu::getSort)).collect(Collectors.toList()); + return menuList; + } + +} diff --git a/tansci-boot/src/main/java/com/tansci/service/impl/SysOperLogServiceImpl.java b/tansci-boot/src/main/java/com/tansci/service/impl/SysOperLogServiceImpl.java new file mode 100644 index 0000000..60028aa --- /dev/null +++ b/tansci-boot/src/main/java/com/tansci/service/impl/SysOperLogServiceImpl.java @@ -0,0 +1,20 @@ +package com.tansci.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.tansci.domain.SysOperLog; +import com.tansci.mapper.SysOperLogMapper; +import com.tansci.service.SysOperLogService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +/** + * @ClassName: SysOperLogServiceImpl.java + * @ClassPath: com.tansci.service.impl.SysOperLogServiceImpl.java + * @Description: 操作日志 + * @Author: tanyp + * @Date: 2023/3/29 9:42 + **/ +@Slf4j +@Service +public class SysOperLogServiceImpl extends ServiceImpl implements SysOperLogService { +} diff --git a/tansci-boot/src/main/java/com/tansci/service/impl/SysOrgServiceImpl.java b/tansci-boot/src/main/java/com/tansci/service/impl/SysOrgServiceImpl.java new file mode 100644 index 0000000..af3606d --- /dev/null +++ b/tansci-boot/src/main/java/com/tansci/service/impl/SysOrgServiceImpl.java @@ -0,0 +1,21 @@ +package com.tansci.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.tansci.domain.SysOrg; +import com.tansci.mapper.SysOrgMapper; +import com.tansci.service.SysOrgService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +/** + * @ClassName: SysOrgServiceImpl.java + * @ClassPath: com.tansci.service.impl.SysOrgServiceImpl.java + * @Description: 组织信息 + * @Author: tanyp + * @Date: 2023/3/29 9:43 + **/ +@Slf4j +@Service +public class SysOrgServiceImpl extends ServiceImpl implements SysOrgService { + +} diff --git a/tansci-boot/src/main/java/com/tansci/service/impl/SysRoleMenuServiceImpl.java b/tansci-boot/src/main/java/com/tansci/service/impl/SysRoleMenuServiceImpl.java new file mode 100644 index 0000000..5e5ec82 --- /dev/null +++ b/tansci-boot/src/main/java/com/tansci/service/impl/SysRoleMenuServiceImpl.java @@ -0,0 +1,20 @@ +package com.tansci.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.tansci.domain.SysRoleMenu; +import com.tansci.mapper.SysRoleMenuMapper; +import com.tansci.service.SysRoleMenuService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +/** + * @ClassName: SysRoleMenuServiceImpl.java + * @ClassPath: com.tansci.service.impl.SysRoleMenuServiceImpl.java + * @Description: 菜单权限 + * @Author: tanyp + * @Date: 2023/3/29 10:26 + **/ +@Slf4j +@Service +public class SysRoleMenuServiceImpl extends ServiceImpl implements SysRoleMenuService { +} diff --git a/tansci-boot/src/main/java/com/tansci/service/impl/SysRoleServiceImpl.java b/tansci-boot/src/main/java/com/tansci/service/impl/SysRoleServiceImpl.java new file mode 100644 index 0000000..599bbf9 --- /dev/null +++ b/tansci-boot/src/main/java/com/tansci/service/impl/SysRoleServiceImpl.java @@ -0,0 +1,20 @@ +package com.tansci.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.tansci.domain.SysRole; +import com.tansci.mapper.SysRoleMapper; +import com.tansci.service.SysRoleService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +/** + * @ClassName: SysRoleServiceImpl.java + * @ClassPath: com.tansci.service.impl.SysRoleServiceImpl.java + * @Description: 权限信息 + * @Author: tanyp + * @Date: 2023/3/29 9:44 + **/ +@Slf4j +@Service +public class SysRoleServiceImpl extends ServiceImpl implements SysRoleService { +} diff --git a/tansci-boot/src/main/java/com/tansci/service/impl/SysUserRoleServiceImpl.java b/tansci-boot/src/main/java/com/tansci/service/impl/SysUserRoleServiceImpl.java new file mode 100644 index 0000000..d2c033c --- /dev/null +++ b/tansci-boot/src/main/java/com/tansci/service/impl/SysUserRoleServiceImpl.java @@ -0,0 +1,20 @@ +package com.tansci.service.impl; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.tansci.domain.SysUserRole; +import com.tansci.mapper.SysUserRoleMapper; +import com.tansci.service.SysUserRoleService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +/** + * @ClassName: SysUserRoleServiceImpl.java + * @ClassPath: com.tansci.service.impl.SysUserRoleServiceImpl.java + * @Description: 用户权限 + * @Author: tanyp + * @Date: 2023/3/29 10:05 + **/ +@Slf4j +@Service +public class SysUserRoleServiceImpl extends ServiceImpl implements SysUserRoleService { +} diff --git a/tansci-boot/src/main/java/com/tansci/service/impl/SysUserServiceImpl.java b/tansci-boot/src/main/java/com/tansci/service/impl/SysUserServiceImpl.java index c0ee2f8..fdb18b0 100644 --- a/tansci-boot/src/main/java/com/tansci/service/impl/SysUserServiceImpl.java +++ b/tansci-boot/src/main/java/com/tansci/service/impl/SysUserServiceImpl.java @@ -5,18 +5,25 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.google.common.collect.Lists; import com.tansci.common.constant.Constants; -import com.tansci.domain.SysUser; import com.tansci.common.exception.BusinessException; +import com.tansci.domain.SysUser; +import com.tansci.domain.SysUserRole; +import com.tansci.domain.vo.SysUserSessionVo; +import com.tansci.domain.vo.SysUserVo; import com.tansci.mapper.SysUserMapper; +import com.tansci.service.SysUserRoleService; import com.tansci.service.SysUserService; import com.tansci.utils.Sha256Util; import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.time.LocalDateTime; import java.util.List; import java.util.Objects; +import java.util.stream.Collectors; /** * @ClassName: SysUserServiceImpl.java @@ -29,6 +36,9 @@ import java.util.Objects; @Service public class SysUserServiceImpl extends ServiceImpl implements SysUserService { + @Autowired + private SysUserRoleService sysUserRoleService; + @Override public IPage page(Page page, SysUser user) { return this.baseMapper.selectPage(page, @@ -51,7 +61,77 @@ public class SysUserServiceImpl extends ServiceImpl impl } @Override - public Integer modifyPass(SysUser user) { + public Object insert(SysUser user) { + Integer count = this.baseMapper.selectCount(Wrappers.lambdaQuery().eq(SysUser::getUsername, user.getUsername())); + if (Objects.nonNull(count) && count > 0) { + throw new BusinessException("用户名称已存在!"); + } + user.setIsDel(Constants.NOT_DEL_FALG); + user.setCreateTime(LocalDateTime.now()); + user.setPassword(Sha256Util.getSHA256(user.getPassword())); + int rows = this.baseMapper.insert(user); + if (rows > 0) { + // 添加权限 + List userRoles = Lists.newArrayList(); + user.getRoleIds().forEach(item -> { + userRoles.add(SysUserRole.builder().userId(user.getId()).roleId(item).build()); + }); + sysUserRoleService.saveBatch(userRoles); + } + return rows; + } + + @Override + public Object update(SysUser user) { + user.setUpdateTime(LocalDateTime.now()); + return this.baseMapper.updateById(user); + } + + @Override + public Object del(SysUser user) { + user.setIsDel(Constants.IS_DEL_FALG); + int rows = this.baseMapper.updateById(user); + if (rows > 0) { + sysUserRoleService.remove(Wrappers.lambdaQuery().eq(SysUserRole::getUserId, user.getId())); + } + return rows; + } + + @Override + public SysUserVo login(SysUser user) { + SysUser sysUser = this.baseMapper.selectOne(Wrappers.lambdaQuery().eq(SysUser::getUsername, user.getUsername())); + if (Objects.nonNull(sysUser) && Objects.equals(sysUser.getPassword(), Sha256Util.getSHA256(user.getPassword()))) { + // 生成token + StpUtil.login(sysUser.getId()); + + // 用户角色到session + List roles = sysUserRoleService.list(Wrappers.lambdaQuery().eq(SysUserRole::getUserId, sysUser.getId())); + if (Objects.nonNull(roles) && roles.size() > 0) { + StpUtil.getSession().set(sysUser.getId(), + SysUserSessionVo.builder() + .id(sysUser.getId()) + .username(sysUser.getUsername()) + .nickname(sysUser.getNickname()) + .type(sysUser.getType()) + .roleIds(roles.stream().map(SysUserRole::getRoleId).collect(Collectors.toList())) + .build() + ); + } + + return SysUserVo.builder() + .username(sysUser.getUsername()) + .nickname(sysUser.getNickname()) + .type(sysUser.getType()) + .avatar(sysUser.getAvatar()) + .loginTime(LocalDateTime.now()) + .token(StpUtil.getTokenInfo().getTokenValue()) + .build(); + } + return null; + } + + @Override + public Object modifyPass(SysUser user) { SysUser sysUser = this.baseMapper.selectOne(Wrappers.lambdaQuery().eq(SysUser::getUsername, user.getUsername())); if (Objects.isNull(sysUser) || !Objects.equals(Sha256Util.getSHA256(sysUser.getPassword()), Sha256Util.getSHA256(user.getPassword()))) { @@ -63,48 +143,4 @@ public class SysUserServiceImpl extends ServiceImpl impl return this.baseMapper.updateById(sysUser); } - @Override - public boolean save(SysUser user) { - Integer count = this.baseMapper.selectCount(Wrappers.lambdaQuery().eq(SysUser::getUsername, user.getUsername())); - if (Objects.nonNull(count) && count > 0) { - throw new BusinessException("用户名称已存在!"); - } - user.setIsDel(Constants.NOT_DEL_FALG); - user.setCreateTime(LocalDateTime.now()); - user.setPassword(Sha256Util.getSHA256(user.getPassword())); - int row = this.baseMapper.insert(user); - return false; - } - - @Override - public boolean update(SysUser user) { - user.setUpdateTime(LocalDateTime.now()); - int row = this.baseMapper.updateById(user); - return false; - } - - @Override - public boolean del(SysUser user) { - user.setIsDel(Constants.IS_DEL_FALG); - this.baseMapper.updateById(user); - return false; - } - - @Override - public SysUser login(String username) { - SysUser user = this.baseMapper.selectOne(Wrappers.lambdaQuery().eq(SysUser::getUsername, username)); - if (Objects.nonNull(user)) { - // 生成token - StpUtil.login(user.getId()); - // 获取token信息 - return SysUser.builder() - .username(user.getUsername()) - .nickname(user.getNickname()) - .type(user.getType()) - .token(StpUtil.getTokenInfo().getTokenValue()) - .build(); - } - return null; - } - } diff --git a/tansci-boot/src/main/resources/application.yml b/tansci-boot/src/main/resources/application.yml index 83790a7..d36b0bd 100644 --- a/tansci-boot/src/main/resources/application.yml +++ b/tansci-boot/src/main/resources/application.yml @@ -1,5 +1,7 @@ server: - port: 8081 + port: 8080 + servlet: + context-path: /tansci/ spring: jackson: