├── .gitignore ├── LICENSE ├── README.md ├── apidoc-footer.md ├── apidoc-header.md ├── apidoc.json ├── java-spring-boot-admin.iml ├── mvnw ├── mvnw.cmd ├── pom.xml ├── slipper-backstage ├── pom.xml └── src │ ├── main │ ├── java │ │ └── com │ │ │ └── slipper │ │ │ ├── SlipperApplication.java │ │ │ └── modules │ │ │ ├── AbstractController.java │ │ │ ├── administrator │ │ │ └── AdministratorController.java │ │ │ ├── captcha │ │ │ └── CaptchaController.java │ │ │ ├── enterprise │ │ │ └── EnterpriseController.java │ │ │ ├── enterpriseMenu │ │ │ └── EnterpriseMenuController.java │ │ │ ├── file │ │ │ └── FileController.java │ │ │ ├── home │ │ │ └── HomeController.java │ │ │ ├── log │ │ │ ├── LoginLogController.java │ │ │ └── OperationLogController.java │ │ │ ├── login │ │ │ └── LoginController.java │ │ │ ├── menu │ │ │ └── MenuController.java │ │ │ └── role │ │ │ └── RoleController.java │ └── resources │ │ ├── application-dev.yml │ │ ├── application-prod.yml │ │ ├── application-test.yml │ │ ├── application.yml │ │ ├── banner.txt │ │ ├── logback-spring.xml │ │ └── static │ │ └── apidoc │ │ ├── assets │ │ ├── android-chrome-192x192.png │ │ ├── android-chrome-512x512.png │ │ ├── apple-touch-icon.png │ │ ├── bootstrap.min.css │ │ ├── bootstrap.min.css.map │ │ ├── favicon-16x16.png │ │ ├── favicon-32x32.png │ │ ├── favicon.ico │ │ ├── glyphicons-halflings-regular.eot │ │ ├── glyphicons-halflings-regular.svg │ │ ├── glyphicons-halflings-regular.ttf │ │ ├── glyphicons-halflings-regular.woff │ │ ├── glyphicons-halflings-regular.woff2 │ │ ├── main.bundle.js │ │ ├── main.css │ │ └── prism.css │ │ └── index.html │ └── test │ └── java │ └── com │ └── slipper │ └── SlipperBackstageApplicationTests.java ├── slipper-common ├── .gitignore ├── .mvn │ └── wrapper │ │ ├── maven-wrapper.jar │ │ └── maven-wrapper.properties ├── mvnw ├── mvnw.cmd ├── pom.xml └── src │ └── main │ ├── java │ └── com │ │ └── slipper │ │ └── common │ │ ├── config │ │ ├── CaptchaConfig.java │ │ └── ValidatorConfig.java │ │ ├── exception │ │ └── RunException.java │ │ ├── utils │ │ ├── BeanUtils.java │ │ ├── Common.java │ │ ├── Constant.java │ │ ├── DateUtils.java │ │ ├── HttpContextUtils.java │ │ ├── HttpUtils.java │ │ ├── Query.java │ │ ├── R.java │ │ ├── RPage.java │ │ ├── RequestBody.java │ │ ├── SpringContext.java │ │ └── TokenUtils.java │ │ └── validator │ │ ├── ValidatorUtils.java │ │ └── group │ │ ├── Also.java │ │ ├── Create.java │ │ └── Update.java │ └── resources │ └── application.properties ├── slipper-core ├── pom.xml └── src │ └── main │ ├── java │ └── com │ │ └── slipper │ │ └── core │ │ ├── config │ │ ├── FilterConfig.java │ │ ├── MybatisPlusConfig.java │ │ ├── RedisConfig.java │ │ └── WebMvcConfig.java │ │ ├── utils │ │ └── RedisUtils.java │ │ └── xss │ │ ├── HTMLFilter.java │ │ ├── XssFilter.java │ │ └── XssHttpServletRequestWrapper.java │ └── resources │ └── application.properties ├── slipper-service ├── pom.xml └── src │ └── main │ ├── java │ └── com │ │ └── slipper │ │ └── service │ │ ├── annotation │ │ └── Log.java │ │ ├── aspect │ │ └── LogAspect.java │ │ ├── handler │ │ └── RunExceptionHandler.java │ │ ├── model │ │ ├── DateModel.java │ │ ├── KeyModel.java │ │ ├── KeyValueModel.java │ │ ├── KeysModel.java │ │ ├── PageDateModel.java │ │ └── PageModel.java │ │ └── modules │ │ ├── administrator │ │ ├── dao │ │ │ ├── AdministratorDao.java │ │ │ └── AdministratorRoleDao.java │ │ ├── entity │ │ │ ├── AdministratorEntity.java │ │ │ └── AdministratorRoleEntity.java │ │ ├── model │ │ │ ├── dto │ │ │ │ └── AdministratorRoleDTO.java │ │ │ ├── form │ │ │ │ ├── AdministratorCreateOrUpdateForm.java │ │ │ │ ├── AdministratorOnlinePageForm.java │ │ │ │ ├── AdministratorPageDateForm.java │ │ │ │ ├── AdministratorUpdateBasicForm.java │ │ │ │ ├── AdministratorUpdatePasswordForm.java │ │ │ │ └── EnterpriseAdministratorPageDateForm.java │ │ │ └── vo │ │ │ │ └── AdministratorOnlineVO.java │ │ └── service │ │ │ ├── AdministratorRoleService.java │ │ │ ├── AdministratorService.java │ │ │ └── impl │ │ │ ├── AdministratorRoleServiceImpl.java │ │ │ └── AdministratorServiceImpl.java │ │ ├── captcha │ │ ├── dao │ │ │ └── CaptchaDao.java │ │ ├── entity │ │ │ └── CaptchaEntity.java │ │ └── service │ │ │ ├── CaptchaService.java │ │ │ └── impl │ │ │ └── CaptchaServiceImpl.java │ │ ├── enterprise │ │ ├── dao │ │ │ ├── EnterpriseDao.java │ │ │ └── EnterpriseMenuDao.java │ │ ├── entity │ │ │ ├── EnterpriseEntity.java │ │ │ └── EnterpriseMenuEntity.java │ │ ├── model │ │ │ ├── dto │ │ │ │ └── EnterpriseMenuTreeDTO.java │ │ │ ├── form │ │ │ │ ├── EnterpriseCreateOrUpdateForm.java │ │ │ │ ├── EnterpriseMenuModifyForm.java │ │ │ │ ├── EnterpriseMenuUpdateForm.java │ │ │ │ ├── EnterprisePageDateForm.java │ │ │ │ └── EnterprisePageForm.java │ │ │ └── vo │ │ │ │ ├── EnterpriseMenuSimplifyTreeVO.java │ │ │ │ ├── EnterpriseMenuTreeVO.java │ │ │ │ ├── EnterpriseMenuVO.java │ │ │ │ ├── EnterpriseSimplifyVO.java │ │ │ │ └── EnterpriseVO.java │ │ └── service │ │ │ ├── EnterpriseMenuService.java │ │ │ ├── EnterpriseService.java │ │ │ └── impl │ │ │ ├── EnterpriseMenuServiceImpl.java │ │ │ └── EnterpriseServiceImpl.java │ │ ├── file │ │ ├── dao │ │ │ └── FileDao.java │ │ ├── entity │ │ │ └── FileEntity.java │ │ ├── model │ │ │ ├── form │ │ │ │ └── FilePageDateForm.java │ │ │ └── vo │ │ │ │ ├── FileSimplifyVO.java │ │ │ │ └── FileVO.java │ │ ├── service │ │ │ ├── FileService.java │ │ │ └── impl │ │ │ │ └── FileServiceImpl.java │ │ └── utils │ │ │ └── FileUtils.java │ │ ├── log │ │ ├── login │ │ │ ├── dao │ │ │ │ └── LoginLogDao.java │ │ │ ├── entity │ │ │ │ └── LoginLogEntity.java │ │ │ ├── model │ │ │ │ ├── form │ │ │ │ │ └── LoginLogPageDateForm.java │ │ │ │ └── vo │ │ │ │ │ ├── LoginLogSimplifyVO.java │ │ │ │ │ ├── LoginLogVO.java │ │ │ │ │ └── VisitsVO.java │ │ │ └── service │ │ │ │ ├── LoginLogService.java │ │ │ │ └── impl │ │ │ │ └── LoginLogServiceImpl.java │ │ └── operation │ │ │ ├── dao │ │ │ └── OperationLogDao.java │ │ │ ├── entity │ │ │ └── OperationLogEntity.java │ │ │ ├── model │ │ │ ├── form │ │ │ │ └── OperationLogPageDateForm.java │ │ │ └── vo │ │ │ │ ├── OperationLogSimplifyVO.java │ │ │ │ └── OperationLogVO.java │ │ │ └── service │ │ │ ├── OperationLogService.java │ │ │ └── impl │ │ │ └── OperationLogServiceImpl.java │ │ ├── login │ │ ├── model │ │ │ └── form │ │ │ │ └── BackstageLoginForm.java │ │ └── service │ │ │ ├── LoginService.java │ │ │ └── impl │ │ │ └── LoginServiceImpl.java │ │ ├── menu │ │ ├── dao │ │ │ └── MenuDao.java │ │ ├── entity │ │ │ └── MenuEntity.java │ │ ├── model │ │ │ ├── form │ │ │ │ ├── MenuCreateOrUpdateForm.java │ │ │ │ └── MenuUpdateParentAndSortForm.java │ │ │ └── vo │ │ │ │ ├── MenuSimplifyTreeVO.java │ │ │ │ ├── MenuTreeVO.java │ │ │ │ └── MenuVO.java │ │ └── service │ │ │ ├── MenuService.java │ │ │ └── impl │ │ │ └── MenuServiceImpl.java │ │ ├── role │ │ ├── dao │ │ │ ├── RoleDao.java │ │ │ └── RoleMenuDao.java │ │ ├── entity │ │ │ ├── RoleEntity.java │ │ │ └── RoleMenuEntity.java │ │ ├── model │ │ │ ├── dto │ │ │ │ ├── RoleMenuDTO.java │ │ │ │ └── RoleSimplifyDTO.java │ │ │ ├── form │ │ │ │ ├── EnterpriseRolePageForm.java │ │ │ │ ├── RoleCreateOrUpdateForm.java │ │ │ │ └── RolePageForm.java │ │ │ └── vo │ │ │ │ ├── RoleInfoVO.java │ │ │ │ ├── RolePageVO.java │ │ │ │ └── RoleVO.java │ │ └── service │ │ │ ├── RoleMenuService.java │ │ │ ├── RoleService.java │ │ │ └── impl │ │ │ ├── RoleMenuServiceImpl.java │ │ │ └── RoleServiceImpl.java │ │ └── token │ │ ├── dao │ │ └── TokenDao.java │ │ ├── entity │ │ └── TokenEntity.java │ │ └── service │ │ ├── TokenService.java │ │ └── impl │ │ └── TokenServiceImpl.java │ └── resources │ ├── application.properties │ └── mapper │ ├── administrator │ ├── AdministratorDao.xml │ └── AdministratorRoleDao.xml │ ├── captcha │ └── CaptchaDao.xml │ ├── enterprise │ ├── EnterpriseDao.xml │ └── EnterpriseMenuDao.xml │ ├── file │ └── FileDao.xml │ ├── log │ ├── login │ │ └── LoginLogDao.xml │ └── operation │ │ └── OperationLogDao.xml │ ├── menu │ └── MenuDao.xml │ ├── role │ ├── RoleDao.xml │ └── RoleMenuDao.xml │ └── token │ └── TokenDao.xml └── slipper-shiro ├── pom.xml └── src └── main ├── java └── com │ └── slipper │ └── shiro │ ├── config │ └── ShiroConfig.java │ ├── filter │ └── AuthFilter.java │ ├── realm │ └── AuthRealm.java │ ├── service │ ├── ShiroService.java │ └── impl │ │ └── ShiroServiceImpl.java │ ├── token │ └── AuthToken.java │ └── utils │ └── ShiroUtils.java └── resources └── application.properties /.gitignore: -------------------------------------------------------------------------------- 1 | HELP.md 2 | target/ 3 | !.mvn/wrapper/maven-wrapper.jar 4 | !**/src/main/**/target/ 5 | !**/src/test/**/target/ 6 | 7 | ### STS ### 8 | .apt_generated 9 | .classpath 10 | .factorypath 11 | .project 12 | .settings 13 | .springBeans 14 | .sts4-cache 15 | 16 | ### IntelliJ IDEA ### 17 | .idea 18 | *.iws 19 | *.iml 20 | *.ipr 21 | 22 | ### NetBeans ### 23 | /nbproject/private/ 24 | /nbbuild/ 25 | /dist/ 26 | /nbdist/ 27 | /.nb-gradle/ 28 | build/ 29 | !**/src/main/**/build/ 30 | !**/src/test/**/build/ 31 | 32 | ### VS Code ### 33 | .vscode/ 34 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 GuMingChen 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /apidoc-footer.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gmingchen/java-spring-boot-admin/5a5972b476e0d5d1cd885b1eddc05f252f21e699/apidoc-footer.md -------------------------------------------------------------------------------- /apidoc-header.md: -------------------------------------------------------------------------------- 1 | **API分组说明** 2 | | 分组名称 | 对应表名 | 备注 | 3 | | :----:| :----: | :----: | 4 | | Role | role | 角色 | 5 | | Administrator | administrator | 管理员账户 | 6 | | Menu | menu | 菜单 | 7 | | Enterprise | enterprise | 企业 | 8 | | LoginLog | login_log | 登录日志 | 9 | | OperationLog | operation_log | 操作日志 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /apidoc.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "Loafer", 3 | "version": "1.0.0", 4 | "description": "Api Document", 5 | "title": "Slipper", 6 | "url" : "http://localhost:8806/slipper", 7 | "header": { 8 | "title": "Tips", 9 | "filename": "apidoc-header.md" 10 | }, 11 | "footer": { 12 | "title": "Footer", 13 | "filename": "apidoc-footer.md" 14 | }, 15 | "order": [ 16 | "GetUser", 17 | "PostUser" 18 | ], 19 | "template": { 20 | "withCompare": true, 21 | "withGenerator": true 22 | } 23 | } -------------------------------------------------------------------------------- /slipper-backstage/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 4.0.0 5 | 6 | 7 | slipper 8 | com.slipper 9 | 2.0.0 10 | 11 | 12 | slipper-backstage 13 | 14 | 后台 15 | 16 | 17 | 18 | 19 | com.slipper 20 | slipper-service 21 | 22 | 23 | 24 | com.slipper 25 | slipper-shiro 26 | 27 | 28 | 29 | 30 | 31 | 32 | org.springframework.boot 33 | spring-boot-maven-plugin 34 | ${spring-boot.version} 35 | 36 | true 37 | 38 | 39 | org.projectlombok 40 | lombok 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | -------------------------------------------------------------------------------- /slipper-backstage/src/main/java/com/slipper/SlipperApplication.java: -------------------------------------------------------------------------------- 1 | package com.slipper; 2 | 3 | import org.springframework.boot.SpringApplication; 4 | import org.springframework.boot.autoconfigure.SpringBootApplication; 5 | 6 | /** 7 | * @author gumingchen 8 | */ 9 | @SpringBootApplication 10 | public class SlipperApplication { 11 | 12 | public static void main(String[] args) { 13 | SpringApplication.run(SlipperApplication.class, args); 14 | } 15 | 16 | } 17 | -------------------------------------------------------------------------------- /slipper-backstage/src/main/java/com/slipper/modules/AbstractController.java: -------------------------------------------------------------------------------- 1 | package com.slipper.modules; 2 | 3 | import com.slipper.service.modules.administrator.model.dto.AdministratorRoleDTO; 4 | import com.slipper.shiro.utils.ShiroUtils; 5 | import org.slf4j.Logger; 6 | import org.slf4j.LoggerFactory; 7 | 8 | /** 9 | * Controller公共组件 10 | * 11 | * @author gumingchen 12 | * @email 1240235512@qq.com 13 | * @date 1995-08-30 00:00:00 14 | */ 15 | public abstract class AbstractController { 16 | protected Logger logger = LoggerFactory.getLogger(getClass()); 17 | 18 | protected AdministratorRoleDTO getAdministrator() { 19 | return ShiroUtils.getAdministrator(); 20 | } 21 | 22 | protected Long getAdministratorId() { 23 | return ShiroUtils.getAdministratorId(); 24 | } 25 | 26 | protected Long getEnterpriseId() { 27 | return ShiroUtils.getEnterpriseId(); 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /slipper-backstage/src/main/java/com/slipper/modules/captcha/CaptchaController.java: -------------------------------------------------------------------------------- 1 | package com.slipper.modules.captcha; 2 | 3 | import com.slipper.common.utils.Constant; 4 | import com.slipper.service.modules.captcha.service.CaptchaService; 5 | import org.apache.commons.io.IOUtils; 6 | import org.springframework.web.bind.annotation.GetMapping; 7 | import org.springframework.web.bind.annotation.RequestMapping; 8 | import org.springframework.web.bind.annotation.RequestParam; 9 | import org.springframework.web.bind.annotation.RestController; 10 | 11 | import javax.annotation.Resource; 12 | import javax.imageio.ImageIO; 13 | import javax.servlet.ServletOutputStream; 14 | import javax.servlet.http.HttpServletResponse; 15 | import java.io.IOException; 16 | 17 | /** 18 | * 验证码 19 | * 20 | * @author gumingchen 21 | * @email 1240235512@qq.com 22 | * @date 1995-08-30 00:00:00 23 | */ 24 | @RestController 25 | @RequestMapping("/backstage") 26 | public class CaptchaController { 27 | 28 | @Resource 29 | private CaptchaService captchaService; 30 | 31 | /** 32 | * 验证码 33 | * 34 | * @api {GET} /backstage/captcha.jpg captcha 35 | * @apiDescription 验证码图片 36 | * @apiVersion 1.0.0 37 | * @apiGroup Captcha 38 | * @apiName get 39 | * @apiParamExample 请求参数示例 40 | * { 41 | * uuid: 1 42 | * } 43 | */ 44 | @GetMapping("/captcha.jpg") 45 | public void get(HttpServletResponse response, @RequestParam String uuid) throws IOException { 46 | ServletOutputStream servletOutputStream = response.getOutputStream(); 47 | 48 | response.setHeader("Cache-Control", "no-store"); 49 | response.setHeader("Pragma", "no-cache"); 50 | response.setDateHeader("Expires", 0); 51 | response.setContentType("image/jpeg"); 52 | 53 | ImageIO.write(captchaService.createCaptcha(uuid, Constant.STORAGE_MODE), "jpg", servletOutputStream); 54 | IOUtils.close(servletOutputStream); 55 | } 56 | 57 | } 58 | -------------------------------------------------------------------------------- /slipper-backstage/src/main/java/com/slipper/modules/file/FileController.java: -------------------------------------------------------------------------------- 1 | package com.slipper.modules.file; 2 | 3 | import com.slipper.common.utils.BeanUtils; 4 | import com.slipper.common.utils.R; 5 | import com.slipper.modules.AbstractController; 6 | import com.slipper.service.modules.file.model.vo.FileSimplifyVO; 7 | import com.slipper.service.modules.file.service.FileService; 8 | import org.springframework.web.bind.annotation.PostMapping; 9 | import org.springframework.web.bind.annotation.RequestMapping; 10 | import org.springframework.web.bind.annotation.RestController; 11 | import org.springframework.web.multipart.MultipartFile; 12 | 13 | import javax.annotation.Resource; 14 | 15 | /** 16 | * 文件 17 | * 18 | * @author gumingchen 19 | * @email 1240235512@qq.com 20 | * @date 2022-06-21 05:29:36 21 | */ 22 | @RestController 23 | @RequestMapping("/backstage/file") 24 | public class FileController extends AbstractController { 25 | @Resource 26 | private FileService fileService; 27 | 28 | /** 29 | * 文件上传 30 | * 31 | * @api {GET} /backstage/file/upload upload 32 | * @apiDescription 上传图片 33 | * @apiVersion 1.0.0 34 | * @apiGroup File 35 | * @apiName upload 36 | * @apiParamExample 请求参数示例 37 | * { 38 | * file: (binary), // 文件流 39 | * } 40 | * @apiSuccessExample 响应结果示例 41 | * { 42 | * code: 0, 43 | * status: 'success', 44 | * message: '成功!' 45 | * data: { 46 | * id: '', // ID 47 | * original: '', // 原始名称 48 | * actual: '', // 实际名称 49 | * url: '', // 虚拟路径 50 | * } 51 | * } 52 | */ 53 | @PostMapping("/upload") 54 | public R upload(MultipartFile file) { 55 | FileSimplifyVO fileSimplifyVO = new FileSimplifyVO(); 56 | BeanUtils.copyProperties(fileService.create(file, getAdministratorId()), fileSimplifyVO); 57 | return R.success(fileSimplifyVO); 58 | } 59 | 60 | } 61 | -------------------------------------------------------------------------------- /slipper-backstage/src/main/java/com/slipper/modules/home/HomeController.java: -------------------------------------------------------------------------------- 1 | package com.slipper.modules.home; 2 | 3 | import com.slipper.common.utils.R; 4 | import com.slipper.modules.AbstractController; 5 | import com.slipper.service.modules.log.login.service.LoginLogService; 6 | import org.apache.shiro.authz.annotation.RequiresPermissions; 7 | import org.springframework.web.bind.annotation.*; 8 | 9 | import javax.annotation.Resource; 10 | 11 | /** 12 | * 首页 13 | * 14 | * @author gumingchen 15 | * @email 1240235512@qq.com 16 | * @date 1995-08-30 00:00:00 17 | */ 18 | @RestController 19 | @RequestMapping("/backstage/home") 20 | public class HomeController extends AbstractController { 21 | 22 | @Resource 23 | private LoginLogService loginLogService; 24 | 25 | /** 26 | * 获取最近30天登录量 27 | * 28 | * @api {GET} /backstage/home/visits visits 29 | * @apiDescription 获取当前管理员信息 30 | * @apiVersion 1.0.0 31 | * @apiGroup Home 32 | * @apiName visits 33 | * @apiParamExample 请求参数示例 34 | * {} 35 | * @apiSuccessExample 响应结果示例 36 | * { 37 | * code: 0, 38 | * status: 'success', 39 | * message: '成功!', 40 | * data: [{ 41 | * date: '', // 日期 42 | * count: '' // 数量 43 | * }] 44 | * } 45 | */ 46 | @RequiresPermissions("home:visits") 47 | @GetMapping("/visits") 48 | public R queryVisits() { 49 | return R.success(loginLogService.queryVisits(30)); 50 | } 51 | 52 | } 53 | -------------------------------------------------------------------------------- /slipper-backstage/src/main/java/com/slipper/modules/login/LoginController.java: -------------------------------------------------------------------------------- 1 | package com.slipper.modules.login; 2 | 3 | import com.slipper.common.utils.R; 4 | import com.slipper.modules.AbstractController; 5 | import com.slipper.service.modules.login.model.form.BackstageLoginForm; 6 | import com.slipper.service.modules.login.service.LoginService; 7 | import org.springframework.validation.annotation.Validated; 8 | import org.springframework.web.bind.annotation.PostMapping; 9 | import org.springframework.web.bind.annotation.RequestBody; 10 | import org.springframework.web.bind.annotation.RequestMapping; 11 | import org.springframework.web.bind.annotation.RestController; 12 | 13 | import javax.annotation.Resource; 14 | 15 | /** 16 | * 登录 17 | * 18 | * @author gumingchen 19 | * @email 1240235512@qq.com 20 | * @date 1995-08-30 00:00:00 21 | */ 22 | @RestController 23 | @RequestMapping("/backstage") 24 | public class LoginController extends AbstractController { 25 | 26 | @Resource 27 | private LoginService loginService; 28 | 29 | /** 30 | * 登录 31 | * 32 | * @api {POST} /backstage/login 33 | * @apiDescription 登录 34 | * @apiVersion 1.0.0 35 | * @apiGroup Login 36 | * @apiName login 37 | * @apiParamExample 请求参数示例 38 | * { 39 | * username: '', // 帐号 40 | * password: '', // 密码 41 | * uuid: '', // UUID 42 | * code: '' // 验证码 43 | * } 44 | * @apiSuccessExample 响应结果示例 45 | * { 46 | * code: 0, 47 | * status: 'success', 48 | * message: '成功!', 49 | * data: { 50 | * admin_id: '', // 用户ID 51 | * token: '', // token 52 | * expired_at: '', // 过期时间 53 | * created_at: '' // 创建时间 54 | * } 55 | * } 56 | */ 57 | @PostMapping("/login") 58 | public R login(@RequestBody @Validated BackstageLoginForm backstageLoginForm) { 59 | return R.success(loginService.backstageLogin(backstageLoginForm)); 60 | } 61 | 62 | /** 63 | * 登出 64 | * 65 | * @api {POST} /backstage/logout 66 | * @apiDescription 登录 67 | * @apiVersion 1.0.0 68 | * @apiGroup Login 69 | * @apiName logout 70 | * @apiParamExample 请求参数示例 71 | * {} 72 | * @apiSuccessExample 响应结果示例 73 | * { 74 | * code: 0, 75 | * status: 'success', 76 | * message: '成功!' 77 | * } 78 | */ 79 | @PostMapping("/logout") 80 | public R logout() { 81 | loginService.backstageLogout(getAdministratorId()); 82 | return R.success(); 83 | } 84 | 85 | } 86 | -------------------------------------------------------------------------------- /slipper-backstage/src/main/resources/application-dev.yml: -------------------------------------------------------------------------------- 1 | project: 2 | group: slipper 3 | name: slipper 4 | 5 | service: 6 | port: 8806 7 | context-path: /slipper 8 | 9 | database: 10 | ip: localhost 11 | port: 3306 12 | name: slipper-admin-base 13 | username: root 14 | password: root 15 | 16 | druid: 17 | url-pattern: /druid/* 18 | username: 19 | password: 20 | 21 | token: 22 | expire: 7200 23 | 24 | redis: 25 | host: localhost 26 | port: 6379 27 | password: 28 | -------------------------------------------------------------------------------- /slipper-backstage/src/main/resources/application-prod.yml: -------------------------------------------------------------------------------- 1 | project: 2 | group: slipper 3 | name: slipper 4 | 5 | service: 6 | port: 8806 7 | context-path: /slipper 8 | 9 | database: 10 | ip: localhost 11 | port: 3306 12 | name: slipper-admin-base 13 | username: root 14 | password: root 15 | 16 | druid: 17 | url-pattern: /druid/* 18 | username: 19 | password: 20 | 21 | token: 22 | expire: 7200 23 | 24 | redis: 25 | host: localhost 26 | port: 6379 27 | password: 28 | -------------------------------------------------------------------------------- /slipper-backstage/src/main/resources/application-test.yml: -------------------------------------------------------------------------------- 1 | project: 2 | group: slipper 3 | name: slipper 4 | 5 | service: 6 | port: 8806 7 | context-path: /slipper 8 | 9 | database: 10 | ip: localhost 11 | port: 3306 12 | name: slipper-admin-base 13 | username: root 14 | password: root 15 | 16 | druid: 17 | url-pattern: /druid/* 18 | username: 19 | password: 20 | 21 | token: 22 | expire: 7200 23 | 24 | redis: 25 | host: localhost 26 | port: 6379 27 | password: 28 | -------------------------------------------------------------------------------- /slipper-backstage/src/main/resources/banner.txt: -------------------------------------------------------------------------------- 1 | _ooOoo_ 2 | o8888888o 3 | 88" . "88 4 | (| ^_^ |) 5 | O\ = /O 6 | ____/`---'\____ 7 | .' \\| |// `. 8 | / \\||| : |||// \ 9 | / _||||| -:- |||||- \ 10 | | | \\\ - /// | | 11 | | \_| ''\---/'' | | 12 | \ .-\__ `-` ___/-. / 13 | ___`. .' /--.--\ `. . ___ 14 | ."" '< `.___\_<|>_/___.' >'"". 15 | | | : `- \`.;`\ _ /`;.`/ - ` : | | 16 | \ \ `-. \_ __\ /__ _/ .-` / / 17 | ========`-.____`-.___\_____/___.-`____.-'======== 18 | `=---=' 19 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 20 | 佛 祖 镇 楼 永 不 宕 机 21 | 佛曰: 22 | 写 字 楼 里 写 字 间, 写 字 间 里 程 序 员; 23 | 程 序 人 员 写 程 序, 又 拿 程 序 换 酒 钱。 24 | 酒 醒 只 在 网 上 做, 酒 醉 还 来 网 下 眠; 25 | 酒 醉 酒 醒 日 复 日, 网 上 网 下 年 复 年。 26 | 但 愿 老 死 电 脑 间, 不 愿 鞠 躬 老 板 前; 27 | 奔 驰 宝 马 贵 者 趣, 公 交 自 行 程 序 员。 28 | 别 人 笑 我 忒 疯 癫, 我 笑 自 己 命 太 贱; 29 | 不 见 满 街 漂 亮 妹, 哪 个 归 得 程 序 员? 30 | -------------------------------------------------------------------------------- /slipper-backstage/src/main/resources/static/apidoc/assets/android-chrome-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gmingchen/java-spring-boot-admin/5a5972b476e0d5d1cd885b1eddc05f252f21e699/slipper-backstage/src/main/resources/static/apidoc/assets/android-chrome-192x192.png -------------------------------------------------------------------------------- /slipper-backstage/src/main/resources/static/apidoc/assets/android-chrome-512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gmingchen/java-spring-boot-admin/5a5972b476e0d5d1cd885b1eddc05f252f21e699/slipper-backstage/src/main/resources/static/apidoc/assets/android-chrome-512x512.png -------------------------------------------------------------------------------- /slipper-backstage/src/main/resources/static/apidoc/assets/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gmingchen/java-spring-boot-admin/5a5972b476e0d5d1cd885b1eddc05f252f21e699/slipper-backstage/src/main/resources/static/apidoc/assets/apple-touch-icon.png -------------------------------------------------------------------------------- /slipper-backstage/src/main/resources/static/apidoc/assets/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gmingchen/java-spring-boot-admin/5a5972b476e0d5d1cd885b1eddc05f252f21e699/slipper-backstage/src/main/resources/static/apidoc/assets/favicon-16x16.png -------------------------------------------------------------------------------- /slipper-backstage/src/main/resources/static/apidoc/assets/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gmingchen/java-spring-boot-admin/5a5972b476e0d5d1cd885b1eddc05f252f21e699/slipper-backstage/src/main/resources/static/apidoc/assets/favicon-32x32.png -------------------------------------------------------------------------------- /slipper-backstage/src/main/resources/static/apidoc/assets/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gmingchen/java-spring-boot-admin/5a5972b476e0d5d1cd885b1eddc05f252f21e699/slipper-backstage/src/main/resources/static/apidoc/assets/favicon.ico -------------------------------------------------------------------------------- /slipper-backstage/src/main/resources/static/apidoc/assets/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gmingchen/java-spring-boot-admin/5a5972b476e0d5d1cd885b1eddc05f252f21e699/slipper-backstage/src/main/resources/static/apidoc/assets/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /slipper-backstage/src/main/resources/static/apidoc/assets/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gmingchen/java-spring-boot-admin/5a5972b476e0d5d1cd885b1eddc05f252f21e699/slipper-backstage/src/main/resources/static/apidoc/assets/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /slipper-backstage/src/main/resources/static/apidoc/assets/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gmingchen/java-spring-boot-admin/5a5972b476e0d5d1cd885b1eddc05f252f21e699/slipper-backstage/src/main/resources/static/apidoc/assets/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /slipper-backstage/src/main/resources/static/apidoc/assets/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gmingchen/java-spring-boot-admin/5a5972b476e0d5d1cd885b1eddc05f252f21e699/slipper-backstage/src/main/resources/static/apidoc/assets/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /slipper-backstage/src/main/resources/static/apidoc/assets/prism.css: -------------------------------------------------------------------------------- 1 | /** 2 | * prism.js tomorrow night eighties for JavaScript, CoffeeScript, CSS and HTML 3 | * Based on https://github.com/chriskempson/tomorrow-theme 4 | * @author Rose Pritchard 5 | */ 6 | 7 | code[class*="language-"], 8 | pre[class*="language-"] { 9 | color: #ccc; 10 | background: none; 11 | font-family: Consolas, Monaco, 'Andale Mono', 'Ubuntu Mono', monospace; 12 | font-size: 1em; 13 | text-align: left; 14 | white-space: pre; 15 | word-spacing: normal; 16 | word-break: normal; 17 | word-wrap: normal; 18 | line-height: 1.5; 19 | 20 | -moz-tab-size: 4; 21 | -o-tab-size: 4; 22 | tab-size: 4; 23 | 24 | -webkit-hyphens: none; 25 | -moz-hyphens: none; 26 | -ms-hyphens: none; 27 | hyphens: none; 28 | 29 | } 30 | 31 | /* Code blocks */ 32 | pre[class*="language-"] { 33 | padding: 1em; 34 | margin: .5em 0; 35 | overflow: auto; 36 | } 37 | 38 | :not(pre) > code[class*="language-"], 39 | pre[class*="language-"] { 40 | background: #2d2d2d; 41 | } 42 | 43 | /* Inline code */ 44 | :not(pre) > code[class*="language-"] { 45 | padding: .1em; 46 | border-radius: .3em; 47 | white-space: normal; 48 | } 49 | 50 | .token.comment, 51 | .token.block-comment, 52 | .token.prolog, 53 | .token.doctype, 54 | .token.cdata { 55 | color: #999; 56 | } 57 | 58 | .token.punctuation { 59 | color: #ccc; 60 | } 61 | 62 | .token.tag, 63 | .token.attr-name, 64 | .token.namespace, 65 | .token.deleted { 66 | color: #e2777a; 67 | } 68 | 69 | .token.function-name { 70 | color: #6196cc; 71 | } 72 | 73 | .token.boolean, 74 | .token.number, 75 | .token.function { 76 | color: #f08d49; 77 | } 78 | 79 | .token.property, 80 | .token.class-name, 81 | .token.constant, 82 | .token.symbol { 83 | color: #f8c555; 84 | } 85 | 86 | .token.selector, 87 | .token.important, 88 | .token.atrule, 89 | .token.keyword, 90 | .token.builtin { 91 | color: #cc99cd; 92 | } 93 | 94 | .token.string, 95 | .token.char, 96 | .token.attr-value, 97 | .token.regex, 98 | .token.variable { 99 | color: #7ec699; 100 | } 101 | 102 | .token.operator, 103 | .token.entity, 104 | .token.url { 105 | color: #67cdcc; 106 | } 107 | 108 | .token.important, 109 | .token.bold { 110 | font-weight: bold; 111 | } 112 | .token.italic { 113 | font-style: italic; 114 | } 115 | 116 | .token.entity { 117 | cursor: help; 118 | } 119 | 120 | .token.inserted { 121 | color: green; 122 | } 123 | -------------------------------------------------------------------------------- /slipper-backstage/src/test/java/com/slipper/SlipperBackstageApplicationTests.java: -------------------------------------------------------------------------------- 1 | package com.slipper; 2 | 3 | import org.junit.jupiter.api.Test; 4 | import org.springframework.boot.test.context.SpringBootTest; 5 | 6 | @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) 7 | class SlipperBackstageApplicationTests { 8 | 9 | @Test 10 | void contextLoads() { 11 | } 12 | 13 | } 14 | -------------------------------------------------------------------------------- /slipper-common/.gitignore: -------------------------------------------------------------------------------- 1 | HELP.md 2 | target/ 3 | !.mvn/wrapper/maven-wrapper.jar 4 | !**/src/main/**/target/ 5 | !**/src/test/**/target/ 6 | 7 | ### STS ### 8 | .apt_generated 9 | .classpath 10 | .factorypath 11 | .project 12 | .settings 13 | .springBeans 14 | .sts4-cache 15 | 16 | ### IntelliJ IDEA ### 17 | .idea 18 | *.iws 19 | *.iml 20 | *.ipr 21 | 22 | ### NetBeans ### 23 | /nbproject/private/ 24 | /nbbuild/ 25 | /dist/ 26 | /nbdist/ 27 | /.nb-gradle/ 28 | build/ 29 | !**/src/main/**/build/ 30 | !**/src/test/**/build/ 31 | 32 | ### VS Code ### 33 | .vscode/ 34 | -------------------------------------------------------------------------------- /slipper-common/.mvn/wrapper/maven-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/gmingchen/java-spring-boot-admin/5a5972b476e0d5d1cd885b1eddc05f252f21e699/slipper-common/.mvn/wrapper/maven-wrapper.jar -------------------------------------------------------------------------------- /slipper-common/.mvn/wrapper/maven-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.8.4/apache-maven-3.8.4-bin.zip 2 | wrapperUrl=https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.1.0/maven-wrapper-3.1.0.jar 3 | -------------------------------------------------------------------------------- /slipper-common/src/main/java/com/slipper/common/config/CaptchaConfig.java: -------------------------------------------------------------------------------- 1 | package com.slipper.common.config; 2 | 3 | import com.google.code.kaptcha.impl.DefaultKaptcha; 4 | import com.google.code.kaptcha.util.Config; 5 | import org.springframework.context.annotation.Bean; 6 | import org.springframework.stereotype.Component; 7 | 8 | import java.util.Properties; 9 | 10 | /** 11 | * Captcha 图片验证配置 12 | * 13 | * @author gumingchen 14 | * @email 1240235512@qq.com 15 | * @date 1995-08-30 00:00:00 16 | */ 17 | @Component 18 | public class CaptchaConfig { 19 | 20 | @Bean 21 | public DefaultKaptcha getDefaultKaptcha() { 22 | DefaultKaptcha defaultKaptcha = new DefaultKaptcha(); 23 | 24 | Properties properties = new Properties(); 25 | // 是否有边框 26 | properties.setProperty("kaptcha.border", "no"); 27 | // 边框颜色 28 | properties.setProperty("kaptcha.border.color", "black"); 29 | // 边框粗细 30 | properties.setProperty("kaptcha.border.thickness", "1"); 31 | // 验证码生成器 32 | properties.setProperty("kaptcha.producer.impl", "DefaultKaptcha"); 33 | // 验证码文本字符内容范围 34 | properties.setProperty("kaptcha.textproducer.char.string", "12345678abcdefghijklmnopqrstuvwxyz"); 35 | // 验证码文本字符长度 36 | properties.setProperty("kaptcha.textproducer.char.length", "4"); 37 | // 验证码文本字体样式 38 | properties.setProperty("kaptcha.textproducer.font.names", "Arial,Courier,宋体,楷体,微软雅黑"); 39 | // 验证码文本字符大小 40 | properties.setProperty("kaptcha.textproducer.font.size", "40"); 41 | // 验证码文本字符颜色 42 | properties.setProperty("kaptcha.textproducer.font.color", "black"); 43 | // 验证码文本字符间距 44 | properties.setProperty("kaptcha.textproducer.char.space", "6"); 45 | // 验证码噪点颜色 46 | properties.setProperty("kaptcha.noise.color", "black"); 47 | // 验证码背景颜色渐进 48 | properties.setProperty("kaptcha.background.clear.from", "white"); 49 | // 验证码背景颜色渐进 50 | properties.setProperty("kaptcha.background.clear.to", "white"); 51 | // 验证码图片宽度 52 | properties.setProperty("kaptcha.image.width", "200"); 53 | // 验证码图片高度 54 | properties.setProperty("kaptcha.image.height", "50"); 55 | Config config = new Config(properties); 56 | defaultKaptcha.setConfig(config); 57 | return defaultKaptcha; 58 | } 59 | } 60 | -------------------------------------------------------------------------------- /slipper-common/src/main/java/com/slipper/common/config/ValidatorConfig.java: -------------------------------------------------------------------------------- 1 | package com.slipper.common.config; 2 | 3 | import org.hibernate.validator.HibernateValidator; 4 | import org.springframework.context.annotation.Bean; 5 | import org.springframework.context.annotation.Configuration; 6 | 7 | import javax.validation.Validation; 8 | import javax.validation.Validator; 9 | import javax.validation.ValidatorFactory; 10 | 11 | /** 12 | * hibernate-validator 配置 13 | * 14 | * @author gumingchen 15 | * @email 1240235512@qq.com 16 | * @date 1995-08-30 00:00:00 17 | */ 18 | @Configuration 19 | public class ValidatorConfig { 20 | 21 | @Bean 22 | public Validator validator() { 23 | return getValidator(); 24 | } 25 | 26 | /** 27 | * failFast - true: 快速校验模式 false: 普通校验模式 28 | * @return 29 | */ 30 | public static Validator getValidator() { 31 | ValidatorFactory validatorFactory = Validation.byProvider(HibernateValidator.class) 32 | .configure() 33 | .failFast(false) 34 | .buildValidatorFactory(); 35 | Validator validator = validatorFactory.getValidator(); 36 | return validator; 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /slipper-common/src/main/java/com/slipper/common/exception/RunException.java: -------------------------------------------------------------------------------- 1 | package com.slipper.common.exception; 2 | 3 | import com.slipper.common.utils.Constant; 4 | 5 | import java.io.Serializable; 6 | 7 | /** 8 | * 自定义异常 9 | * 10 | * @author gumingchen 11 | * @email 1240235512@qq.com 12 | * @date 1995-08-30 00:00:00 13 | */ 14 | public class RunException extends RuntimeException implements Serializable { 15 | private static final long serialVersionUID = 1L; 16 | 17 | private int code = Constant.ERROR_CODE; 18 | private String message = Constant.ERROR_MESSAGE; 19 | 20 | public RunException(int code) { 21 | super(); 22 | this.code = code; 23 | } 24 | 25 | public RunException(int code, Throwable e) { 26 | super(e); 27 | this.code = code; 28 | } 29 | 30 | public RunException(String message) { 31 | super(); 32 | this.message = message; 33 | } 34 | 35 | public RunException(String message, Throwable e) { 36 | super(e); 37 | this.message = message; 38 | } 39 | 40 | public RunException(int code, String message) { 41 | super(); 42 | this.code = code; 43 | this.message = message; 44 | } 45 | 46 | public RunException(int code, String message, Throwable e) { 47 | super(e); 48 | this.code = code; 49 | this.message = message; 50 | } 51 | 52 | public int getCode() { 53 | return code; 54 | } 55 | 56 | public void setCode(int code) { 57 | this.code = code; 58 | } 59 | 60 | public String getMessage() { 61 | return message; 62 | } 63 | 64 | public void setMessage(String message) { 65 | this.message = message; 66 | } 67 | } 68 | -------------------------------------------------------------------------------- /slipper-common/src/main/java/com/slipper/common/utils/BeanUtils.java: -------------------------------------------------------------------------------- 1 | package com.slipper.common.utils; 2 | 3 | import java.util.ArrayList; 4 | import java.util.List; 5 | import java.util.function.Supplier; 6 | 7 | /** 8 | * 对象工具类 9 | * @author gumingchen 10 | */ 11 | public class BeanUtils extends org.springframework.beans.BeanUtils { 12 | 13 | /** 14 | * 集合数据拷贝 15 | * @param sources 数据源数组 16 | * @param target 对象 17 | * @return 18 | */ 19 | public static List copyProperties(List sources, Class target) { 20 | List result = new ArrayList<>(); 21 | if (sources == null || sources.isEmpty()) { 22 | return result; 23 | } 24 | sources.forEach(f -> { 25 | T t = null; 26 | try { 27 | t = target.newInstance(); 28 | } catch (InstantiationException | IllegalAccessException e) { 29 | e.printStackTrace(); 30 | } 31 | copyProperties(f, t); 32 | result.add(t); 33 | }); 34 | return result; 35 | } 36 | 37 | } 38 | -------------------------------------------------------------------------------- /slipper-common/src/main/java/com/slipper/common/utils/Common.java: -------------------------------------------------------------------------------- 1 | package com.slipper.common.utils; 2 | 3 | /** 4 | * 通用业务工具类 5 | * 6 | * @author gumingchen 7 | * @email 1240235512@qq.com 8 | * @date 1995-08-30 00:00:00 9 | */ 10 | public class Common { 11 | 12 | } 13 | -------------------------------------------------------------------------------- /slipper-common/src/main/java/com/slipper/common/utils/Constant.java: -------------------------------------------------------------------------------- 1 | package com.slipper.common.utils; 2 | 3 | /** 4 | * 常量工具类 5 | * 6 | * @author gumingchen 7 | * @email 1240235512@qq.com 8 | * @date 1995-08-30 00:00:00 9 | */ 10 | public class Constant { 11 | /** 12 | * 后台登录 后台验证码 存储位置:1-数据库 2-Redis 13 | */ 14 | public static final Integer STORAGE_MODE = 1; 15 | 16 | /** 17 | * token 键值 18 | */ 19 | public static final String TOKEN_KEY = "token"; 20 | 21 | /** 22 | * 状态码 异常信息 23 | */ 24 | public static final int SUCCESS_CODE = 0; 25 | public static final String SUCCESS_STATUS = "success"; 26 | public static final String SUCCESS_MESSAGE = "成功!"; 27 | public static final int ERROR_CODE = 500; 28 | public static final String ERROR_STATUS = "error"; 29 | public static final String ERROR_MESSAGE = "未知异常!"; 30 | public static final int VERIFICATION_ERROR_CODE = 400; 31 | public static final String VERIFICATION_ERROR_MESSAGE = "校验异常!"; 32 | public static final int NOT_ALLOWED_CODE = 401; 33 | public static final String NOT_ALLOWED_MESSAGE = "没有权限!"; 34 | public static final int NOT_FOUND_CODE = 404; 35 | public static final String NOT_FOUND_MESSAGE = "路径不存在!"; 36 | public static final int METHOD_ERROR_CODE = 405; 37 | public static final String METHOD_ERROR_MESSAGE = "不支持该请求方法!"; 38 | public static final int TOKEN_EXPIRE_CODE = 4001; 39 | public static final String TOKEN_EXPIRE_MESSAGE = "凭证已过期,请重新登录!"; 40 | public static final int WARNING_CODE = 600; 41 | 42 | /** 43 | * 分页 44 | */ 45 | public enum Page { 46 | /** 47 | * 当前页 key 48 | */ 49 | CURRENT("current"), 50 | /** 51 | * 分页大小 key 52 | */ 53 | SIZE("size"); 54 | 55 | private final String value; 56 | 57 | Page(String value) { 58 | this.value = value; 59 | } 60 | 61 | public String getValue() { 62 | return value; 63 | } 64 | } 65 | 66 | /** 67 | * 定时任务状态 68 | */ 69 | public enum TimedTaskStatus { 70 | /** 71 | * 正常 72 | */ 73 | NORMAL(1), 74 | /** 75 | * 暂停 76 | */ 77 | PAUSE(0); 78 | 79 | private final int value; 80 | 81 | TimedTaskStatus(int value) { 82 | this.value = value; 83 | } 84 | 85 | public int getValue() { 86 | return value; 87 | } 88 | } 89 | 90 | /** 91 | * 菜单类型 92 | */ 93 | public enum MenuType { 94 | /** 95 | * 目录 96 | */ 97 | CATALOG(0), 98 | /** 99 | * 菜单 100 | */ 101 | MENU(1), 102 | /** 103 | * 按钮 104 | */ 105 | BUTTON(2), 106 | /** 107 | * iframe 108 | */ 109 | IFRAME(3), 110 | /** 111 | * 外链 112 | */ 113 | URL(4); 114 | 115 | private final int value; 116 | 117 | MenuType(int value) { 118 | this.value = value; 119 | } 120 | 121 | public int getValue() { 122 | return value; 123 | } 124 | } 125 | 126 | } 127 | -------------------------------------------------------------------------------- /slipper-common/src/main/java/com/slipper/common/utils/HttpContextUtils.java: -------------------------------------------------------------------------------- 1 | package com.slipper.common.utils; 2 | 3 | import cn.hutool.http.useragent.UserAgent; 4 | import cn.hutool.http.useragent.UserAgentUtil; 5 | import org.apache.commons.lang3.StringUtils; 6 | import org.springframework.web.context.request.RequestContextHolder; 7 | import org.springframework.web.context.request.ServletRequestAttributes; 8 | 9 | import javax.servlet.http.HttpServletRequest; 10 | import java.util.HashMap; 11 | import java.util.Map; 12 | 13 | /** 14 | * Http 内容 15 | * 16 | * @author slipper 17 | * @email 1240235512@qq.com 18 | * @date 1995-08-30 00:00:00 19 | */ 20 | public class HttpContextUtils { 21 | 22 | public static HttpServletRequest getHttpServletRequest() { 23 | return ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); 24 | } 25 | 26 | public static String getDomain(){ 27 | HttpServletRequest request = getHttpServletRequest(); 28 | StringBuffer url = request.getRequestURL(); 29 | return url.delete(url.length() - request.getRequestURI().length(), url.length()).toString(); 30 | } 31 | 32 | public static String getIp() { 33 | HttpServletRequest request = getHttpServletRequest(); 34 | String ip = request.getHeader("X-Forwarded-For"); 35 | if(StringUtils.isNotEmpty(ip) && !"unKnown".equalsIgnoreCase(ip)){ 36 | // 多次反向代理后会有多个ip值,第一个ip才是真实ip 37 | int index = ip.indexOf(","); 38 | if(index != -1){ 39 | return ip.substring(0,index); 40 | }else{ 41 | return ip; 42 | } 43 | } 44 | ip = request.getHeader("X-Real-IP"); 45 | if(StringUtils.isNotEmpty(ip) && !"unKnown".equalsIgnoreCase(ip)){ 46 | return ip; 47 | } 48 | return request.getRemoteAddr(); 49 | } 50 | 51 | public static String getOrigin(){ 52 | HttpServletRequest request = getHttpServletRequest(); 53 | return request.getHeader("Origin"); 54 | } 55 | 56 | public static String getUserAgent(){ 57 | HttpServletRequest request = getHttpServletRequest(); 58 | return request.getHeader("User-Agent"); 59 | } 60 | 61 | public static String getMethod(){ 62 | HttpServletRequest request = getHttpServletRequest(); 63 | return request.getMethod(); 64 | } 65 | 66 | public static String getRequestUrl(){ 67 | HttpServletRequest request = getHttpServletRequest(); 68 | return request.getRequestURI(); 69 | } 70 | 71 | public static String getOperatingSystem() { 72 | String userAgent = getUserAgent(); 73 | UserAgent ua = UserAgentUtil.parse(userAgent); 74 | return ua.getOs().toString(); 75 | } 76 | 77 | public static String getBrowser() { 78 | String userAgent = getUserAgent(); 79 | UserAgent ua = UserAgentUtil.parse(userAgent); 80 | return ua.getBrowser().toString(); 81 | } 82 | 83 | public static Map getParams(){ 84 | HttpServletRequest request = getHttpServletRequest(); 85 | Map map = new HashMap<>(); 86 | request.getParameterMap().forEach((key, value) -> map.put(key, value[0])); 87 | 88 | return map; 89 | } 90 | } 91 | -------------------------------------------------------------------------------- /slipper-common/src/main/java/com/slipper/common/utils/Query.java: -------------------------------------------------------------------------------- 1 | package com.slipper.common.utils; 2 | 3 | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 4 | 5 | import java.util.Map; 6 | 7 | /** 8 | * 分页参数处理工具类 9 | * 10 | * @author gumingchen 11 | * @email 1240235512@qq.com 12 | * @date 1995-08-30 00:00:00 13 | * @param 14 | */ 15 | public class Query { 16 | 17 | public Page getPage(Map params) { 18 | long current = 1; 19 | long size = 10; 20 | 21 | if (params.get(Constant.Page.CURRENT.getValue()) != null) { 22 | current = Long.parseLong((String) params.get(Constant.Page.CURRENT.getValue())); 23 | } 24 | if (params.get(Constant.Page.SIZE.getValue()) != null) { 25 | size = Long.parseLong((String) params.get(Constant.Page.SIZE.getValue())); 26 | } 27 | 28 | Page page = new Page<>(current, size); 29 | return page; 30 | } 31 | 32 | public Page getPage(Integer c, Integer s) { 33 | long current = c != null ? c : 1; 34 | long size = s != null ? s : 10; 35 | 36 | Page page = new Page<>(current, size); 37 | return page; 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /slipper-common/src/main/java/com/slipper/common/utils/R.java: -------------------------------------------------------------------------------- 1 | package com.slipper.common.utils; 2 | 3 | import java.io.Serializable; 4 | import java.util.HashMap; 5 | 6 | /** 7 | * 自定义响应结果工具 8 | * 9 | * @author gumingchen 10 | * @email 1240235512@qq.com 11 | * @date 1995-08-30 00:00:00 12 | */ 13 | public class R extends HashMap implements Serializable { 14 | private static final long serialVersionUID = 1L; 15 | 16 | private static final String STATUS = "status"; 17 | private static final String CODE = "code"; 18 | private static final String MESSAGE = "message"; 19 | private static final String DATA = "data"; 20 | 21 | public R() { 22 | put(STATUS, Constant.SUCCESS_STATUS); 23 | put(CODE, Constant.SUCCESS_CODE); 24 | put(MESSAGE, Constant.SUCCESS_MESSAGE); 25 | } 26 | 27 | public static R success() { 28 | return new R(); 29 | } 30 | public static R success(Object data) { 31 | R r = new R(); 32 | r.put(DATA, data); 33 | return r; 34 | } 35 | public static R success(HashMap map) { 36 | R r = new R(); 37 | r.putAll(map); 38 | return r; 39 | } 40 | 41 | public static R error() { 42 | R r = new R(); 43 | r.put(STATUS, Constant.ERROR_STATUS); 44 | r.put(CODE, Constant.ERROR_CODE); 45 | r.put(MESSAGE, Constant.ERROR_MESSAGE); 46 | return r; 47 | } 48 | 49 | public static R error(Integer code) { 50 | R r = new R(); 51 | r.put(STATUS, Constant.ERROR_STATUS); 52 | r.put(CODE, code); 53 | r.put(MESSAGE, Constant.ERROR_MESSAGE); 54 | return r; 55 | } 56 | 57 | public static R error(String message) { 58 | R r = new R(); 59 | r.put(STATUS, Constant.ERROR_STATUS); 60 | r.put(CODE, Constant.ERROR_CODE); 61 | r.put(MESSAGE, message); 62 | return r; 63 | } 64 | 65 | public static R error(Integer code, String message) { 66 | R r = new R(); 67 | r.put(STATUS, Constant.ERROR_STATUS); 68 | r.put(CODE, code); 69 | r.put(MESSAGE, message); 70 | return r; 71 | } 72 | 73 | @Override 74 | public R put(String key, Object value) { 75 | super.put(key, value); 76 | return this; 77 | } 78 | 79 | } 80 | -------------------------------------------------------------------------------- /slipper-common/src/main/java/com/slipper/common/utils/RPage.java: -------------------------------------------------------------------------------- 1 | package com.slipper.common.utils; 2 | 3 | import com.baomidou.mybatisplus.core.metadata.IPage; 4 | import lombok.Data; 5 | 6 | import java.io.Serializable; 7 | import java.util.List; 8 | import java.util.function.Supplier; 9 | 10 | /** 11 | * 分页结果封装工具类 12 | * 13 | * @author gumingchen 14 | * @email 1240235512@qq.com 15 | * @date 1995-08-30 00:00:00 16 | * @param 17 | */ 18 | @Data 19 | public class RPage implements Serializable { 20 | private static final long serialVersionUID = 1L; 21 | /** 22 | * 当前页 23 | */ 24 | private long current; 25 | /** 26 | * 分页大小 27 | */ 28 | private long size; 29 | /** 30 | * 总记录数 31 | */ 32 | private long total; 33 | /** 34 | * 总页数 35 | */ 36 | private long pages; 37 | /** 38 | * 记录 39 | */ 40 | private List list; 41 | 42 | public RPage(IPage iPage) { 43 | this.current = iPage.getCurrent(); 44 | this.size = iPage.getSize(); 45 | this.total = iPage.getTotal(); 46 | this.pages = iPage.getPages(); 47 | this.list = iPage.getRecords(); 48 | } 49 | 50 | public RPage(IPage iPage, List list) { 51 | this.current = iPage.getCurrent(); 52 | this.size = iPage.getSize(); 53 | this.total = iPage.getTotal(); 54 | this.pages = iPage.getPages(); 55 | this.list = list; 56 | } 57 | } 58 | -------------------------------------------------------------------------------- /slipper-common/src/main/java/com/slipper/common/utils/RequestBody.java: -------------------------------------------------------------------------------- 1 | package com.slipper.common.utils; 2 | 3 | import org.springframework.web.context.request.RequestContextHolder; 4 | import org.springframework.web.context.request.ServletRequestAttributes; 5 | 6 | import javax.servlet.http.HttpServletRequest; 7 | 8 | /** 9 | * request body utils 10 | * 11 | * @author gumingchen 12 | * @email 1240235512@qq.com 13 | * @date 1995-08-30 00:00:00 14 | */ 15 | public class RequestBody { 16 | 17 | public static HttpServletRequest getHttpServletRequest() { 18 | return ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); 19 | } 20 | 21 | public static String getHeader(String name){ 22 | HttpServletRequest request = getHttpServletRequest(); 23 | return request.getHeader(name); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /slipper-common/src/main/java/com/slipper/common/utils/SpringContext.java: -------------------------------------------------------------------------------- 1 | package com.slipper.common.utils; 2 | 3 | import org.springframework.beans.BeansException; 4 | import org.springframework.context.ApplicationContext; 5 | import org.springframework.context.ApplicationContextAware; 6 | import org.springframework.stereotype.Component; 7 | 8 | /** 9 | * Spring Context 工具类 10 | * 11 | * @author gumingchen 12 | * @email 1240235512@qq.com 13 | * @date 1995-08-30 00:00:00 14 | */ 15 | @Component 16 | public class SpringContext implements ApplicationContextAware { 17 | public static ApplicationContext applicationContext; 18 | 19 | @Override 20 | public void setApplicationContext(ApplicationContext applicationContext) 21 | throws BeansException { 22 | SpringContext.applicationContext = applicationContext; 23 | } 24 | 25 | public static Object getBean(String name) { 26 | return applicationContext.getBean(name); 27 | } 28 | 29 | public static T getBean(String name, Class requiredType) { 30 | return applicationContext.getBean(name, requiredType); 31 | } 32 | 33 | public static boolean containsBean(String name) { 34 | return applicationContext.containsBean(name); 35 | } 36 | 37 | public static boolean isSingleton(String name) { 38 | return applicationContext.isSingleton(name); 39 | } 40 | 41 | public static Class getType(String name) { 42 | return applicationContext.getType(name); 43 | } 44 | 45 | } 46 | -------------------------------------------------------------------------------- /slipper-common/src/main/java/com/slipper/common/utils/TokenUtils.java: -------------------------------------------------------------------------------- 1 | package com.slipper.common.utils; 2 | 3 | import com.slipper.common.exception.RunException; 4 | import org.springframework.boot.context.properties.ConfigurationProperties; 5 | import org.springframework.stereotype.Component; 6 | 7 | import java.security.MessageDigest; 8 | import java.util.UUID; 9 | 10 | /** 11 | * 生成token 12 | * 13 | * @author gumingchen 14 | * @email 1240235512@qq.com 15 | * @date 1995-08-30 00:00:00 16 | */ 17 | @ConfigurationProperties(prefix = "token") 18 | @Component 19 | public class TokenUtils { 20 | 21 | private static final char[] hexCode = "0123456789abcdef".toCharArray(); 22 | 23 | private static long expire; 24 | 25 | public static String generate() { 26 | return generate(UUID.randomUUID().toString()); 27 | } 28 | 29 | public static String generate(String uuid) { 30 | try { 31 | MessageDigest messageDigest = MessageDigest.getInstance("MD5"); 32 | messageDigest.reset(); 33 | messageDigest.update(uuid.getBytes()); 34 | byte[] digest = messageDigest.digest(); 35 | String token = toHexString(digest); 36 | return token; 37 | } catch (Exception e) { 38 | throw new RunException("数据库中已存在该记录!", e); 39 | } 40 | } 41 | 42 | public static String toHexString(byte[] digest) { 43 | if(digest == null) { 44 | return null; 45 | } 46 | StringBuilder r = new StringBuilder(digest.length*2); 47 | for ( byte b : digest) { 48 | r.append(hexCode[(b >> 4) & 0xF]); 49 | r.append(hexCode[(b & 0xF)]); 50 | } 51 | return r.toString(); 52 | } 53 | 54 | public long getExpire() { 55 | return expire; 56 | } 57 | 58 | public void setExpire(long expire) { 59 | TokenUtils.expire = expire; 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /slipper-common/src/main/java/com/slipper/common/validator/ValidatorUtils.java: -------------------------------------------------------------------------------- 1 | package com.slipper.common.validator; 2 | 3 | import com.slipper.common.config.ValidatorConfig; 4 | import com.slipper.common.exception.RunException; 5 | import com.slipper.common.utils.Constant; 6 | 7 | import javax.validation.ConstraintViolation; 8 | import javax.validation.Validator; 9 | import java.util.Set; 10 | 11 | /** 12 | * hibernate-validator校验工具类 13 | * 14 | * @author gumingchen 15 | * @email 1240235512@qq.com 16 | * @date 1995-08-30 00:00:00 17 | */ 18 | public class ValidatorUtils { 19 | private static Validator validator; 20 | 21 | static { 22 | validator = ValidatorConfig.getValidator(); 23 | } 24 | 25 | /** 26 | * 功能描述:校验注解参数 27 | */ 28 | public static void validated(T object, Class... groups) throws RunException { 29 | Set> constraintViolations = validator.validate(object, groups); 30 | if (!constraintViolations.isEmpty()) { 31 | StringBuilder message = new StringBuilder(); 32 | message.append(Constant.VERIFICATION_ERROR_MESSAGE); 33 | String comma = ""; 34 | for (ConstraintViolation constraint: constraintViolations) { 35 | message.append(comma).append(constraint.getPropertyPath()+ "-" + constraint.getMessage()); 36 | comma = ","; 37 | } 38 | throw new RunException(Constant.VERIFICATION_ERROR_CODE, message.toString()); 39 | } 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /slipper-common/src/main/java/com/slipper/common/validator/group/Also.java: -------------------------------------------------------------------------------- 1 | package com.slipper.common.validator.group; 2 | 3 | import javax.validation.GroupSequence; 4 | 5 | /** 6 | * 校验顺序 并且关系 7 | * 8 | * @author gumingchen 9 | * @email 1240235512@qq.com 10 | * @date 1995-08-30 00:00:00 11 | */ 12 | @GroupSequence({Create.class, Update.class}) 13 | public interface Also { 14 | } 15 | -------------------------------------------------------------------------------- /slipper-common/src/main/java/com/slipper/common/validator/group/Create.java: -------------------------------------------------------------------------------- 1 | package com.slipper.common.validator.group; 2 | 3 | import javax.validation.groups.Default; 4 | 5 | /** 6 | * 插入校验 7 | * 8 | * @author gumingchen 9 | * @email 1240235512@qq.com 10 | * @date 1995-08-30 00:00:00 11 | */ 12 | public interface Create extends Default { 13 | } 14 | -------------------------------------------------------------------------------- /slipper-common/src/main/java/com/slipper/common/validator/group/Update.java: -------------------------------------------------------------------------------- 1 | package com.slipper.common.validator.group; 2 | 3 | import javax.validation.groups.Default; 4 | 5 | /** 6 | * 更新校验 7 | * 8 | * @author gumingchen 9 | * @email 1240235512@qq.com 10 | * @date 1995-08-30 00:00:00 11 | */ 12 | public interface Update extends Default { 13 | } 14 | -------------------------------------------------------------------------------- /slipper-common/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /slipper-core/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 4.0.0 5 | 6 | 7 | slipper 8 | com.slipper 9 | 2.0.0 10 | 11 | 12 | slipper-core 13 | 14 | com.slipper 15 | 16 | 核心 17 | 18 | 19 | 20 | 21 | mysql 22 | mysql-connector-java 23 | 24 | 25 | 26 | 27 | com.alibaba 28 | druid-spring-boot-starter 29 | 30 | 31 | 32 | 33 | org.apache.shiro 34 | shiro-core 35 | 36 | 37 | 38 | 39 | org.springframework.boot 40 | spring-boot-starter-data-redis 41 | 42 | 43 | 44 | 45 | com.slipper 46 | slipper-common 47 | 48 | 49 | 50 | 51 | -------------------------------------------------------------------------------- /slipper-core/src/main/java/com/slipper/core/config/FilterConfig.java: -------------------------------------------------------------------------------- 1 | package com.slipper.core.config; 2 | 3 | import com.slipper.core.xss.XssFilter; 4 | import org.springframework.boot.web.servlet.FilterRegistrationBean; 5 | import org.springframework.context.annotation.Bean; 6 | import org.springframework.context.annotation.Configuration; 7 | import org.springframework.web.filter.DelegatingFilterProxy; 8 | 9 | /** 10 | * Filter配置 11 | * 12 | * @author slipper 13 | * @email 1240235512@qq.com 14 | * @date 1995-08-30 00:00:00 15 | */ 16 | @Configuration 17 | public class FilterConfig { 18 | 19 | /** 20 | * shiro 过滤 21 | * @return 22 | */ 23 | @Bean 24 | public FilterRegistrationBean shiroFilterRegistration() { 25 | FilterRegistrationBean registration = new FilterRegistrationBean(); 26 | registration.setFilter(new DelegatingFilterProxy("shiroFilter")); 27 | registration.addInitParameter("targetFilterLifecycle", "true"); 28 | registration.setEnabled(true); 29 | registration.setOrder(Integer.MAX_VALUE - 1); 30 | registration.addUrlPatterns("/*"); 31 | return registration; 32 | } 33 | 34 | /** 35 | * xss 过滤 36 | * @return 37 | */ 38 | @Bean 39 | public FilterRegistrationBean xssFilterRegister() { 40 | FilterRegistrationBean registration = new FilterRegistrationBean(); 41 | // 设置系统过滤器 (setFilter就是你所定义的过滤器filter类) 42 | registration.setFilter(new XssFilter()); 43 | // 过滤所有路径 44 | registration.addUrlPatterns("/*"); 45 | // 过滤器名称 46 | registration.setName("XssFilter"); 47 | // 优先级 48 | registration.setOrder(Integer.MAX_VALUE); 49 | return registration; 50 | } 51 | 52 | } 53 | -------------------------------------------------------------------------------- /slipper-core/src/main/java/com/slipper/core/config/MybatisPlusConfig.java: -------------------------------------------------------------------------------- 1 | package com.slipper.core.config; 2 | 3 | import com.baomidou.mybatisplus.annotation.DbType; 4 | import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; 5 | import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; 6 | import org.springframework.context.annotation.Bean; 7 | import org.springframework.context.annotation.Configuration; 8 | 9 | /** 10 | * mybatis-plus 配置 11 | * 12 | * @author gumingchen 13 | * @email 1240235512@qq.com 14 | * @date 1995-08-30 00:00:00 15 | */ 16 | @Configuration 17 | public class MybatisPlusConfig { 18 | 19 | @Bean 20 | public MybatisPlusInterceptor mybatisPlusInterceptor() { 21 | MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); 22 | interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); 23 | return interceptor; 24 | } 25 | 26 | } 27 | -------------------------------------------------------------------------------- /slipper-core/src/main/java/com/slipper/core/config/RedisConfig.java: -------------------------------------------------------------------------------- 1 | package com.slipper.core.config; 2 | 3 | import org.springframework.context.annotation.Bean; 4 | import org.springframework.context.annotation.Configuration; 5 | import org.springframework.data.redis.connection.RedisConnectionFactory; 6 | import org.springframework.data.redis.core.RedisTemplate; 7 | import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; 8 | import org.springframework.data.redis.serializer.StringRedisSerializer; 9 | 10 | /** 11 | * redis配置 12 | * 13 | * @author gumingchen 14 | * @email 1240235512@qq.com 15 | * @date 1995-08-30 00:00:00 16 | */ 17 | @Configuration 18 | public class RedisConfig { 19 | 20 | @Bean 21 | public RedisTemplate redisTemplate(RedisConnectionFactory factory) { 22 | RedisTemplate redisTemplate = new RedisTemplate<>(); 23 | 24 | StringRedisSerializer stringRedisSerializer = new StringRedisSerializer(); 25 | Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer(Object.class); 26 | // key采用String的序列化方式 27 | redisTemplate.setKeySerializer(stringRedisSerializer); 28 | // value采用jackson的序列化方式 29 | redisTemplate.setValueSerializer(jackson2JsonRedisSerializer); 30 | // hash的key采用String的序列化方式 31 | redisTemplate.setHashKeySerializer(stringRedisSerializer); 32 | // hash的value采用jackson的序列化方式 33 | redisTemplate.setHashValueSerializer(jackson2JsonRedisSerializer); 34 | 35 | redisTemplate.setConnectionFactory(factory); 36 | redisTemplate.afterPropertiesSet(); 37 | 38 | return redisTemplate; 39 | } 40 | 41 | } 42 | -------------------------------------------------------------------------------- /slipper-core/src/main/java/com/slipper/core/config/WebMvcConfig.java: -------------------------------------------------------------------------------- 1 | package com.slipper.core.config; 2 | 3 | import org.springframework.context.annotation.Configuration; 4 | import org.springframework.web.servlet.config.annotation.CorsRegistry; 5 | import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; 6 | 7 | /** 8 | * web mvc config 9 | * 10 | * @author gumingchen 11 | * @email 1240235512@qq.com 12 | * @date 1995-08-30 00:00:00 13 | */ 14 | @Configuration 15 | public class WebMvcConfig implements WebMvcConfigurer { 16 | 17 | /** 18 | * 页面跨域访问Controller过滤 19 | * @param corsRegistry 20 | */ 21 | @Override 22 | public void addCorsMappings(CorsRegistry corsRegistry){ 23 | // 设置允许跨域的路由 24 | corsRegistry.addMapping("/**") 25 | // 设置允许跨域请求的域名 26 | .allowedOriginPatterns("*") 27 | // 是否允许证书(cookies) 28 | .allowCredentials(true) 29 | // 设置允许的方法 30 | .allowedMethods("*") 31 | // 设置允许的请求头 32 | .allowedHeaders("*"); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /slipper-core/src/main/java/com/slipper/core/xss/XssFilter.java: -------------------------------------------------------------------------------- 1 | package com.slipper.core.xss; 2 | 3 | import javax.servlet.*; 4 | import javax.servlet.http.HttpServletRequest; 5 | import java.io.IOException; 6 | 7 | /** 8 | * XssFilter配置 9 | * 10 | * @author slipper 11 | * @email 1240235512@qq.com 12 | * @date 1995-08-30 00:00:00 13 | */ 14 | public class XssFilter implements Filter { 15 | 16 | @Override 17 | public void init(FilterConfig filterConfig) throws ServletException { 18 | } 19 | 20 | @Override 21 | public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { 22 | XssHttpServletRequestWrapper xssRequest = new XssHttpServletRequestWrapper( 23 | (HttpServletRequest) servletRequest); 24 | filterChain.doFilter(xssRequest, servletResponse); 25 | } 26 | 27 | @Override 28 | public void destroy() { 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /slipper-core/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /slipper-service/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 4.0.0 5 | 6 | 7 | slipper 8 | com.slipper 9 | 2.0.0 10 | 11 | 12 | slipper-service 13 | 14 | 业务 15 | 16 | 17 | 18 | 19 | com.slipper 20 | slipper-core 21 | 22 | 23 | 24 | 25 | -------------------------------------------------------------------------------- /slipper-service/src/main/java/com/slipper/service/annotation/Log.java: -------------------------------------------------------------------------------- 1 | package com.slipper.service.annotation; 2 | 3 | import java.lang.annotation.*; 4 | 5 | /** 6 | * 操作 日志注解 7 | * 8 | * @author gumingchen 9 | * @email 1240235512@qq.com 10 | * @date 1995-08-30 00:00:00 11 | */ 12 | @Target(ElementType.METHOD) 13 | @Retention(RetentionPolicy.RUNTIME) 14 | @Documented 15 | public @interface Log { 16 | String value() default ""; 17 | } 18 | -------------------------------------------------------------------------------- /slipper-service/src/main/java/com/slipper/service/model/DateModel.java: -------------------------------------------------------------------------------- 1 | package com.slipper.service.model; 2 | 3 | /** 4 | * 时间范围数据模型 5 | * 6 | * @author gumingchen 7 | * @email 1240235512@qq.com 8 | * @date 1995-08-30 00:00:00 9 | */ 10 | public class DateModel { 11 | /** 12 | * 开始时间 13 | */ 14 | private String start; 15 | /** 16 | * 结束时间 17 | */ 18 | private String end; 19 | } 20 | -------------------------------------------------------------------------------- /slipper-service/src/main/java/com/slipper/service/model/KeyModel.java: -------------------------------------------------------------------------------- 1 | package com.slipper.service.model; 2 | 3 | import lombok.Data; 4 | 5 | import javax.validation.constraints.NotNull; 6 | import javax.validation.constraints.Size; 7 | import java.util.List; 8 | 9 | /** 10 | * 键值 11 | * 12 | * @author gumingchen 13 | * @email 1240235512@qq.com 14 | * @date 1995-08-30 00:00:00 15 | */ 16 | @Data 17 | public class KeyModel { 18 | /** 19 | * 键值 20 | */ 21 | @NotNull(message = "Key不能为空") 22 | private K key; 23 | } 24 | -------------------------------------------------------------------------------- /slipper-service/src/main/java/com/slipper/service/model/KeyValueModel.java: -------------------------------------------------------------------------------- 1 | package com.slipper.service.model; 2 | 3 | import lombok.Data; 4 | 5 | import javax.validation.constraints.NotNull; 6 | 7 | /** 8 | * 键-值 对象 9 | * 10 | * @author gumingchen 11 | * @email 1240235512@qq.com 12 | * @date 1995-08-30 00:00:00 13 | */ 14 | @Data 15 | public class KeyValueModel { 16 | /** 17 | * 键值 18 | */ 19 | @NotNull(message = "Key不能为空") 20 | private K key; 21 | /** 22 | * 值 23 | */ 24 | @NotNull(message = "Value不能为空") 25 | private V value; 26 | } 27 | -------------------------------------------------------------------------------- /slipper-service/src/main/java/com/slipper/service/model/KeysModel.java: -------------------------------------------------------------------------------- 1 | package com.slipper.service.model; 2 | 3 | import lombok.Data; 4 | 5 | import javax.validation.constraints.NotNull; 6 | import javax.validation.constraints.Size; 7 | import java.util.List; 8 | 9 | /** 10 | * 键值 数组 11 | * 12 | * @author gumingchen 13 | * @email 1240235512@qq.com 14 | * @date 1995-08-30 00:00:00 15 | */ 16 | @Data 17 | public class KeysModel { 18 | /** 19 | * 键值 20 | */ 21 | @NotNull(message = "Key不能为空") 22 | @Size(min = 1, message = "至少有一个Key") 23 | private List keys; 24 | } 25 | -------------------------------------------------------------------------------- /slipper-service/src/main/java/com/slipper/service/model/PageDateModel.java: -------------------------------------------------------------------------------- 1 | package com.slipper.service.model; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * 分页时间数据模型 7 | * 8 | * @author gumingchen 9 | * @email 1240235512@qq.com 10 | * @date 1995-08-30 00:00:00 11 | */ 12 | @Data 13 | public class PageDateModel { 14 | /** 15 | * 当前页 16 | */ 17 | private Integer current; 18 | /** 19 | * 分页大小 20 | */ 21 | private Integer size; 22 | /** 23 | * 开始时间 24 | */ 25 | private String start; 26 | /** 27 | * 结束时间 28 | */ 29 | private String end; 30 | } 31 | -------------------------------------------------------------------------------- /slipper-service/src/main/java/com/slipper/service/model/PageModel.java: -------------------------------------------------------------------------------- 1 | package com.slipper.service.model; 2 | 3 | import lombok.Data; 4 | 5 | /** 6 | * 分页数据模型 7 | * 8 | * @author gumingchen 9 | * @email 1240235512@qq.com 10 | * @date 1995-08-30 00:00:00 11 | */ 12 | @Data 13 | public class PageModel { 14 | /** 15 | * 当前页 16 | */ 17 | private Integer current; 18 | /** 19 | * 分页大小 20 | */ 21 | private Integer size; 22 | } 23 | -------------------------------------------------------------------------------- /slipper-service/src/main/java/com/slipper/service/modules/administrator/dao/AdministratorDao.java: -------------------------------------------------------------------------------- 1 | package com.slipper.service.modules.administrator.dao; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.baomidou.mybatisplus.core.metadata.IPage; 5 | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 6 | import com.slipper.service.modules.administrator.entity.AdministratorEntity; 7 | import com.slipper.service.modules.administrator.model.dto.AdministratorRoleDTO; 8 | import com.slipper.service.modules.administrator.model.vo.AdministratorOnlineVO; 9 | import org.apache.ibatis.annotations.Mapper; 10 | import org.apache.ibatis.annotations.Param; 11 | 12 | import java.util.List; 13 | 14 | /** 15 | * 管理员 16 | * 17 | * @author gumingchen 18 | * @email 1240235512@qq.com 19 | * @date 1995-08-30 00:00:00 20 | */ 21 | @Mapper 22 | public interface AdministratorDao extends BaseMapper { 23 | /** 24 | * 通过ID查询管理员 25 | * @param id 管理员ID 26 | * @return 27 | */ 28 | AdministratorRoleDTO queryById(@Param("id") Long id); 29 | 30 | /** 31 | * 管理员分页列表 查询该企业下管理员所创建的管理员 超级管理员查询该企业下所有的管理员 32 | * @param page 分页参数 33 | * @param enterpriseId 企业ID 34 | * @param creator 创建者ID 35 | * @param supervisor 是否是超管:0-否 1-是 36 | * @param name 昵称 / 帐号 37 | * @param start 创建开始时间 38 | * @param end 创建结束时间 39 | * @return 40 | */ 41 | IPage queryPage(Page page, 42 | @Param("enterpriseId") Long enterpriseId, 43 | @Param("creator") Long creator, 44 | @Param("supervisor") Integer supervisor, 45 | @Param("name") String name, 46 | @Param("start") String start, 47 | @Param("end") String end); 48 | 49 | /** 50 | * 分页列表 根据ID获取管理员 51 | * @param page 分页参数 52 | * @param ids 用户ID 53 | * @param name 昵称 / 帐号 54 | * @return 55 | */ 56 | IPage queryPageByIds(Page page, 57 | @Param("ids") List ids, 58 | @Param("name") String name); 59 | } 60 | -------------------------------------------------------------------------------- /slipper-service/src/main/java/com/slipper/service/modules/administrator/dao/AdministratorRoleDao.java: -------------------------------------------------------------------------------- 1 | package com.slipper.service.modules.administrator.dao; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.slipper.service.modules.administrator.entity.AdministratorRoleEntity; 5 | import org.apache.ibatis.annotations.Mapper; 6 | import org.apache.ibatis.annotations.Param; 7 | 8 | import java.util.List; 9 | 10 | /** 11 | * 管理员-角色 12 | * 13 | * @author gumingchen 14 | * @email 1240235512@qq.com 15 | * @date 1995-08-30 00:00:00 16 | */ 17 | @Mapper 18 | public interface AdministratorRoleDao extends BaseMapper { 19 | 20 | /** 21 | * 批量创建 22 | * @param administratorId 管理员ID 23 | * @param roleIds 角色ID 24 | */ 25 | void createBatch(@Param("administratorId") Long administratorId, @Param("roleIds") List roleIds); 26 | 27 | } 28 | -------------------------------------------------------------------------------- /slipper-service/src/main/java/com/slipper/service/modules/administrator/entity/AdministratorEntity.java: -------------------------------------------------------------------------------- 1 | package com.slipper.service.modules.administrator.entity; 2 | 3 | import com.baomidou.mybatisplus.annotation.IdType; 4 | import com.baomidou.mybatisplus.annotation.TableId; 5 | import com.baomidou.mybatisplus.annotation.TableLogic; 6 | import com.baomidou.mybatisplus.annotation.TableName; 7 | import com.fasterxml.jackson.annotation.JsonProperty; 8 | import com.slipper.common.validator.group.Create; 9 | import com.slipper.common.validator.group.Update; 10 | import lombok.AllArgsConstructor; 11 | import lombok.Data; 12 | import lombok.NoArgsConstructor; 13 | 14 | import javax.validation.constraints.Email; 15 | import javax.validation.constraints.NotBlank; 16 | import javax.validation.constraints.NotNull; 17 | import java.io.Serializable; 18 | import java.util.Date; 19 | 20 | /** 21 | * 管理员 22 | * 23 | * @author gumingchen 24 | * @email 1240235512@qq.com 25 | * @date 1995-08-30 00:00:00 26 | */ 27 | @Data 28 | @TableName("administrator") 29 | public class AdministratorEntity implements Serializable { 30 | private static final long serialVersionUID = 1L; 31 | 32 | @NotNull(message = "ID不能为空", groups = Update.class) 33 | @TableId(value = "id", type = IdType.AUTO) 34 | private Long id; 35 | /** 36 | * 用户名 37 | */ 38 | @NotBlank(message = "用户名不能为空", groups = {Create.class, Update.class}) 39 | private String username; 40 | /** 41 | * 密码 42 | */ 43 | @NotBlank(message = "密码不能为空", groups = {Create.class}) 44 | private String password; 45 | /** 46 | * 加密盐 47 | */ 48 | private String salt; 49 | /** 50 | * 昵称 51 | */ 52 | @NotBlank(message = "昵称不能为空", groups = {Create.class, Update.class}) 53 | private String nickname; 54 | /** 55 | * 头像 56 | */ 57 | private String avatar; 58 | /** 59 | * 手机 60 | */ 61 | private String mobile; 62 | /** 63 | * 邮箱 64 | */ 65 | @Email(message = "邮箱格式不正确", groups = {Create.class, Update.class}) 66 | private String email; 67 | /** 68 | * 性别:0-女 1-男 2-未知 69 | */ 70 | private Integer sex; 71 | /** 72 | * 状态:0-禁用 1-正常 73 | */ 74 | private Integer status; 75 | /** 76 | * 是否是超管:0-否 1-是 77 | */ 78 | private Integer supervisor; 79 | /** 80 | * 企业ID 81 | */ 82 | @JsonProperty("enterprise_id") 83 | private Long enterpriseId; 84 | /** 85 | * 创建者 86 | */ 87 | private Long creator; 88 | /** 89 | * 创建时间 90 | */ 91 | @JsonProperty("created_at") 92 | private Date createdAt; 93 | /** 94 | * 更新者 95 | */ 96 | private Long updater; 97 | /** 98 | * 更新时间 99 | */ 100 | @JsonProperty("updated_at") 101 | private Date updatedAt; 102 | /** 103 | * 是否删除:0-否 1-是 104 | */ 105 | @TableLogic 106 | private Integer deleted; 107 | } 108 | -------------------------------------------------------------------------------- /slipper-service/src/main/java/com/slipper/service/modules/administrator/entity/AdministratorRoleEntity.java: -------------------------------------------------------------------------------- 1 | package com.slipper.service.modules.administrator.entity; 2 | 3 | import com.baomidou.mybatisplus.annotation.IdType; 4 | import com.baomidou.mybatisplus.annotation.TableId; 5 | import com.baomidou.mybatisplus.annotation.TableLogic; 6 | import com.baomidou.mybatisplus.annotation.TableName; 7 | import com.fasterxml.jackson.annotation.JsonProperty; 8 | import com.slipper.common.validator.group.Create; 9 | import com.slipper.common.validator.group.Update; 10 | import lombok.Data; 11 | 12 | import javax.validation.constraints.Email; 13 | import javax.validation.constraints.NotBlank; 14 | import javax.validation.constraints.NotNull; 15 | import java.io.Serializable; 16 | import java.util.Date; 17 | 18 | /** 19 | * 管理员-角色 20 | * 21 | * @author gumingchen 22 | * @email 1240235512@qq.com 23 | * @date 1995-08-30 00:00:00 24 | */ 25 | @Data 26 | @TableName("administrator__role") 27 | public class AdministratorRoleEntity implements Serializable { 28 | private static final long serialVersionUID = 1L; 29 | 30 | @TableId(value = "id", type = IdType.AUTO) 31 | private Long id; 32 | /** 33 | * 管理员ID 34 | */ 35 | @JsonProperty("administrator_id") 36 | private Long administratorId; 37 | /** 38 | * 角色ID 39 | */ 40 | @JsonProperty("role_id") 41 | private Long roleId; 42 | } 43 | -------------------------------------------------------------------------------- /slipper-service/src/main/java/com/slipper/service/modules/administrator/model/dto/AdministratorRoleDTO.java: -------------------------------------------------------------------------------- 1 | package com.slipper.service.modules.administrator.model.dto; 2 | 3 | import com.fasterxml.jackson.annotation.JsonProperty; 4 | import com.slipper.service.modules.role.model.dto.RoleSimplifyDTO; 5 | import lombok.Data; 6 | 7 | import java.io.Serializable; 8 | import java.util.Date; 9 | import java.util.List; 10 | 11 | /** 12 | * 管理员 角色 信息 13 | * 14 | * @author gumingchen 15 | * @email 1240235512@qq.com 16 | * @date 1995-08-30 00:00:00 17 | */ 18 | @Data 19 | public class AdministratorRoleDTO implements Serializable { 20 | private static final long serialVersionUID = 1L; 21 | 22 | private Long id; 23 | /** 24 | * 用户名 25 | */ 26 | private String username; 27 | /** 28 | * 昵称 29 | */ 30 | private String nickname; 31 | /** 32 | * 头像 33 | */ 34 | private String avatar; 35 | /** 36 | * 手机 37 | */ 38 | private String mobile; 39 | /** 40 | * 邮箱 41 | */ 42 | private String email; 43 | /** 44 | * 性别:0-女 1-男 2-未知 45 | */ 46 | private Integer sex; 47 | /** 48 | * 状态:0-禁用 1-正常 49 | */ 50 | private Integer status; 51 | /** 52 | * 是否是超管:0-否 1-是 53 | */ 54 | private Integer supervisor; 55 | /** 56 | * 企业ID 57 | */ 58 | @JsonProperty("enterprise_id") 59 | private Long enterpriseId; 60 | /** 61 | * 创建时间 62 | */ 63 | @JsonProperty("created_at") 64 | private Date createdAt; 65 | /** 66 | * 更新时间 67 | */ 68 | @JsonProperty("updated_at") 69 | private Date updatedAt; 70 | /** 71 | * 角色列表 72 | */ 73 | private List roles; 74 | } 75 | -------------------------------------------------------------------------------- /slipper-service/src/main/java/com/slipper/service/modules/administrator/model/form/AdministratorCreateOrUpdateForm.java: -------------------------------------------------------------------------------- 1 | package com.slipper.service.modules.administrator.model.form; 2 | 3 | import com.baomidou.mybatisplus.annotation.IdType; 4 | import com.baomidou.mybatisplus.annotation.TableId; 5 | import com.baomidou.mybatisplus.annotation.TableLogic; 6 | import com.fasterxml.jackson.annotation.JsonProperty; 7 | import com.slipper.common.validator.group.Create; 8 | import com.slipper.common.validator.group.Update; 9 | import lombok.Data; 10 | 11 | import javax.validation.constraints.Email; 12 | import javax.validation.constraints.NotBlank; 13 | import javax.validation.constraints.NotNull; 14 | import javax.validation.constraints.Size; 15 | import java.io.Serializable; 16 | import java.util.Date; 17 | import java.util.List; 18 | 19 | /** 20 | * 管理员 新增 编辑 参数 21 | * 22 | * @author gumingchen 23 | * @email 1240235512@qq.com 24 | * @date 1995-08-30 00:00:00 25 | */ 26 | @Data 27 | public class AdministratorCreateOrUpdateForm implements Serializable { 28 | 29 | private static final long serialVersionUID = 1L; 30 | 31 | @NotNull(message = "ID不能为空", groups = Update.class) 32 | @TableId(value = "id", type = IdType.AUTO) 33 | private Long id; 34 | /** 35 | * 用户名 36 | */ 37 | @NotBlank(message = "用户名不能为空", groups = {Create.class, Update.class}) 38 | private String username; 39 | /** 40 | * 密码 41 | */ 42 | @NotBlank(message = "密码不能为空", groups = {Create.class}) 43 | private String password; 44 | /** 45 | * 昵称 46 | */ 47 | @NotBlank(message = "昵称不能为空", groups = {Create.class, Update.class}) 48 | private String nickname; 49 | /** 50 | * 头像 51 | */ 52 | private String avatar; 53 | /** 54 | * 手机 55 | */ 56 | private String mobile; 57 | /** 58 | * 邮箱 59 | */ 60 | @Email(message = "邮箱格式不正确", groups = {Create.class, Update.class}) 61 | private String email; 62 | /** 63 | * 性别:0-女 1-男 2-未知 64 | */ 65 | private Integer sex; 66 | /** 67 | * 角色ID 68 | */ 69 | @JsonProperty("role_ids") 70 | private List roleIds; 71 | /** 72 | * 企业ID 73 | */ 74 | @JsonProperty("enterprise_id") 75 | private Long enterpriseId; 76 | /** 77 | * 是否是超管:0-否 1-是 78 | */ 79 | private Integer supervisor; 80 | } 81 | -------------------------------------------------------------------------------- /slipper-service/src/main/java/com/slipper/service/modules/administrator/model/form/AdministratorOnlinePageForm.java: -------------------------------------------------------------------------------- 1 | package com.slipper.service.modules.administrator.model.form; 2 | 3 | import com.slipper.service.model.PageModel; 4 | import lombok.Data; 5 | 6 | import java.io.Serializable; 7 | 8 | /** 9 | * 管理员列表分页参数 10 | * 11 | * @author gumingchen 12 | * @email 1240235512@qq.com 13 | * @date 1995-08-30 00:00:00 14 | */ 15 | @Data 16 | public class AdministratorOnlinePageForm extends PageModel implements Serializable { 17 | private static final long serialVersionUID = 1L; 18 | 19 | /** 20 | * 用户名 / 昵称 21 | */ 22 | private String name; 23 | } 24 | -------------------------------------------------------------------------------- /slipper-service/src/main/java/com/slipper/service/modules/administrator/model/form/AdministratorPageDateForm.java: -------------------------------------------------------------------------------- 1 | package com.slipper.service.modules.administrator.model.form; 2 | 3 | import com.slipper.service.model.PageDateModel; 4 | import lombok.Data; 5 | 6 | import java.io.Serializable; 7 | 8 | /** 9 | * 管理员列表分页参数 10 | * 11 | * @author gumingchen 12 | * @email 1240235512@qq.com 13 | * @date 1995-08-30 00:00:00 14 | */ 15 | @Data 16 | public class AdministratorPageDateForm extends PageDateModel implements Serializable { 17 | private static final long serialVersionUID = 1L; 18 | /** 19 | * 昵称 / 帐号 20 | */ 21 | private String name; 22 | } 23 | -------------------------------------------------------------------------------- /slipper-service/src/main/java/com/slipper/service/modules/administrator/model/form/AdministratorUpdateBasicForm.java: -------------------------------------------------------------------------------- 1 | package com.slipper.service.modules.administrator.model.form; 2 | 3 | import com.slipper.common.validator.group.Create; 4 | import com.slipper.common.validator.group.Update; 5 | import lombok.Data; 6 | 7 | import javax.validation.constraints.Email; 8 | import javax.validation.constraints.NotBlank; 9 | 10 | import java.io.Serializable; 11 | 12 | 13 | /** 14 | * 管理员 编辑 基础信息 参数 15 | * 16 | * @author gumingchen 17 | * @email 1240235512@qq.com 18 | * @date 1995-08-30 00:00:00 19 | */ 20 | @Data 21 | public class AdministratorUpdateBasicForm implements Serializable { 22 | 23 | private static final long serialVersionUID = 1L; 24 | 25 | private Long id; 26 | /** 27 | * 昵称 28 | */ 29 | @NotBlank(message = "昵称不能为空") 30 | private String nickname; 31 | /** 32 | * 头像 33 | */ 34 | private String avatar; 35 | /** 36 | * 手机 37 | */ 38 | private String mobile; 39 | /** 40 | * 邮箱 41 | */ 42 | @Email(message = "邮箱格式不正确", groups = {Create.class, Update.class}) 43 | private String email; 44 | /** 45 | * 性别:0-女 1-男 2-未知 46 | */ 47 | private Integer sex; 48 | } 49 | -------------------------------------------------------------------------------- /slipper-service/src/main/java/com/slipper/service/modules/administrator/model/form/AdministratorUpdatePasswordForm.java: -------------------------------------------------------------------------------- 1 | package com.slipper.service.modules.administrator.model.form; 2 | 3 | import com.fasterxml.jackson.annotation.JsonProperty; 4 | import com.slipper.common.validator.group.Create; 5 | import com.slipper.common.validator.group.Update; 6 | import lombok.Data; 7 | 8 | import javax.validation.constraints.Email; 9 | import javax.validation.constraints.NotBlank; 10 | import java.io.Serializable; 11 | 12 | /** 13 | * 管理员 编辑 密码 参数 14 | * 15 | * @author gumingchen 16 | * @email 1240235512@qq.com 17 | * @date 1995-08-30 00:00:00 18 | */ 19 | @Data 20 | public class AdministratorUpdatePasswordForm implements Serializable { 21 | 22 | private static final long serialVersionUID = 1L; 23 | 24 | private Long id; 25 | /** 26 | * 旧密码 27 | */ 28 | @NotBlank(message = "旧密码不能为空") 29 | @JsonProperty("old_password") 30 | private String oldPassword; 31 | /** 32 | * 新密码 33 | */ 34 | @NotBlank(message = "新密码不能为空") 35 | @JsonProperty("new_password") 36 | private String newPassword; 37 | } 38 | -------------------------------------------------------------------------------- /slipper-service/src/main/java/com/slipper/service/modules/administrator/model/form/EnterpriseAdministratorPageDateForm.java: -------------------------------------------------------------------------------- 1 | package com.slipper.service.modules.administrator.model.form; 2 | 3 | import com.slipper.service.model.PageDateModel; 4 | import lombok.Data; 5 | 6 | import java.io.Serializable; 7 | 8 | /** 9 | * 管理员列表分页参数 10 | * 11 | * @author gumingchen 12 | * @email 1240235512@qq.com 13 | * @date 1995-08-30 00:00:00 14 | */ 15 | @Data 16 | public class EnterpriseAdministratorPageDateForm extends PageDateModel implements Serializable { 17 | private static final long serialVersionUID = 1L; 18 | /** 19 | * 昵称 / 帐号 20 | */ 21 | private String name; 22 | /** 23 | * 企业ID 24 | */ 25 | private Long id; 26 | } 27 | -------------------------------------------------------------------------------- /slipper-service/src/main/java/com/slipper/service/modules/administrator/model/vo/AdministratorOnlineVO.java: -------------------------------------------------------------------------------- 1 | package com.slipper.service.modules.administrator.model.vo; 2 | 3 | import com.fasterxml.jackson.annotation.JsonProperty; 4 | import com.slipper.service.modules.role.model.dto.RoleSimplifyDTO; 5 | import lombok.Data; 6 | 7 | import java.io.Serializable; 8 | import java.util.Date; 9 | import java.util.List; 10 | 11 | /** 12 | * 管理员 在线 信息 13 | * 14 | * @author gumingchen 15 | * @email 1240235512@qq.com 16 | * @date 1995-08-30 00:00:00 17 | */ 18 | @Data 19 | public class AdministratorOnlineVO implements Serializable { 20 | private static final long serialVersionUID = 1L; 21 | 22 | private Long id; 23 | /** 24 | * 用户名 25 | */ 26 | private String username; 27 | /** 28 | * 昵称 29 | */ 30 | private String nickname; 31 | /** 32 | * 头像 33 | */ 34 | private String avatar; 35 | /** 36 | * 手机 37 | */ 38 | private String mobile; 39 | /** 40 | * 邮箱 41 | */ 42 | private String email; 43 | /** 44 | * 性别:0-女 1-男 2-未知 45 | */ 46 | private Integer sex; 47 | /** 48 | * 是否是超管:0-否 1-是 49 | */ 50 | private Integer supervisor; 51 | /** 52 | * 企业ID 53 | */ 54 | @JsonProperty("enterprise_id") 55 | private Long enterpriseId; 56 | /** 57 | * 企业名称 58 | */ 59 | @JsonProperty("enterprise_name") 60 | private String enterpriseName; 61 | /** 62 | * 登录时间 63 | */ 64 | @JsonProperty("login_at") 65 | private Date loginAt; 66 | 67 | } 68 | -------------------------------------------------------------------------------- /slipper-service/src/main/java/com/slipper/service/modules/administrator/service/AdministratorRoleService.java: -------------------------------------------------------------------------------- 1 | package com.slipper.service.modules.administrator.service; 2 | 3 | import com.baomidou.mybatisplus.extension.service.IService; 4 | import com.slipper.service.modules.administrator.entity.AdministratorRoleEntity; 5 | 6 | import java.util.List; 7 | 8 | /** 9 | * 管理员-角色 10 | * 11 | * @author gumingchen 12 | * @email 1240235512@qq.com 13 | * @date 1995-08-30 00:00:00 14 | */ 15 | public interface AdministratorRoleService extends IService { 16 | 17 | /** 18 | * 批量添加 管理员 与 角色的关联 19 | * @param administratorId 管理员ID 20 | * @param roleIds 角色ID数组 21 | */ 22 | void createOrUpdateBatch(Long administratorId, List roleIds); 23 | } 24 | -------------------------------------------------------------------------------- /slipper-service/src/main/java/com/slipper/service/modules/administrator/service/AdministratorService.java: -------------------------------------------------------------------------------- 1 | package com.slipper.service.modules.administrator.service; 2 | 3 | import com.baomidou.mybatisplus.extension.service.IService; 4 | import com.slipper.common.utils.RPage; 5 | import com.slipper.service.modules.administrator.entity.AdministratorEntity; 6 | import com.slipper.service.modules.administrator.model.dto.AdministratorRoleDTO; 7 | import com.slipper.service.modules.administrator.model.form.*; 8 | import com.slipper.service.modules.administrator.model.vo.AdministratorOnlineVO; 9 | 10 | import java.util.List; 11 | 12 | /** 13 | * 管理员 14 | * 15 | * @author gumingchen 16 | * @email 1240235512@qq.com 17 | * @date 1995-08-30 00:00:00 18 | */ 19 | public interface AdministratorService extends IService { 20 | 21 | /** 22 | * 分页列表 23 | * @param pageForm 分页参数 24 | * @param administratorRoleDto 当前管理员 25 | * @return 26 | */ 27 | RPage queryPage(AdministratorPageDateForm pageForm, AdministratorRoleDTO administratorRoleDto); 28 | 29 | /** 30 | * 信息 31 | * @param id 管理员ID 32 | * @return 33 | */ 34 | AdministratorRoleDTO queryInfo(Long id); 35 | 36 | /** 37 | * 更新基础信息 38 | * @param updateBasicForm 参数 39 | */ 40 | void updateBasic(AdministratorUpdateBasicForm updateBasicForm); 41 | 42 | /** 43 | * 更新密码 44 | * @param updatePasswordForm 45 | */ 46 | void updatePassword(AdministratorUpdatePasswordForm updatePasswordForm); 47 | 48 | /** 49 | * 创建 50 | * @param createOrUpdateForm 创建参数 51 | * @param enterpriseId 企业ID 52 | * @param administratorId 创建者ID 53 | */ 54 | void create(AdministratorCreateOrUpdateForm createOrUpdateForm, Long enterpriseId, Long administratorId); 55 | 56 | /** 57 | * 更新 58 | * @param createOrUpdateForm 编辑参数 59 | * @param administratorId 更新者ID 60 | */ 61 | void update(AdministratorCreateOrUpdateForm createOrUpdateForm, Long administratorId); 62 | 63 | /** 64 | * 删除 65 | * @param ids ID列表 66 | */ 67 | void delete(List ids); 68 | 69 | /* todo:-------------------------------------------------------------------------------------- */ 70 | 71 | /** 72 | * 分页列表 企业ID获取企业下所有的管理员 73 | * @param pageForm 分页参数 74 | * @return 75 | */ 76 | RPage queryPage(EnterpriseAdministratorPageDateForm pageForm); 77 | 78 | /** 79 | * 分页列表 根据ID获取管理员 80 | * @param pageForm 81 | * @param ids 82 | * @return 83 | */ 84 | RPage queryPage(AdministratorOnlinePageForm pageForm, List ids); 85 | 86 | } 87 | -------------------------------------------------------------------------------- /slipper-service/src/main/java/com/slipper/service/modules/administrator/service/impl/AdministratorRoleServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.slipper.service.modules.administrator.service.impl; 2 | 3 | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; 4 | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 5 | import com.slipper.common.exception.RunException; 6 | import com.slipper.service.modules.administrator.dao.AdministratorRoleDao; 7 | import com.slipper.service.modules.administrator.entity.AdministratorRoleEntity; 8 | import com.slipper.service.modules.administrator.service.AdministratorRoleService; 9 | import org.springframework.stereotype.Service; 10 | import org.springframework.transaction.annotation.Transactional; 11 | 12 | import java.util.ArrayList; 13 | import java.util.List; 14 | 15 | /** 16 | * 管理员-角色 17 | * 18 | * @author gumingchen 19 | * @email 1240235512@qq.com 20 | * @date 1995-08-30 00:00:00 21 | */ 22 | @Service("administratorRoleService") 23 | public class AdministratorRoleServiceImpl extends ServiceImpl implements AdministratorRoleService { 24 | 25 | @Transactional(rollbackFor = RunException.class) 26 | @Override 27 | public void createOrUpdateBatch(Long administratorId, List roleIds) { 28 | // 获取该管理员已经存在的角色 29 | LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper() 30 | .eq(AdministratorRoleEntity::getAdministratorId, administratorId); 31 | List administratorRoleEntities = this.list(queryWrapper); 32 | 33 | // 需要删除的ID 34 | List deleteIds = new ArrayList<>(); 35 | // 不需要修改的角色ID 36 | List unmodifiedIds = new ArrayList<>(); 37 | for (AdministratorRoleEntity administratorRoleEntity : administratorRoleEntities) { 38 | if (!roleIds.contains(administratorRoleEntity.getRoleId())) { 39 | deleteIds.add(administratorRoleEntity.getId()); 40 | } else { 41 | unmodifiedIds.add(administratorRoleEntity.getRoleId()); 42 | } 43 | } 44 | // 需要创建的角色ID 45 | List createIds = new ArrayList<>(); 46 | for (Long roleId : roleIds) { 47 | if (!unmodifiedIds.contains(roleId)) { 48 | createIds.add(roleId); 49 | } 50 | } 51 | 52 | // 删除 53 | if (deleteIds.size() > 0) { 54 | LambdaQueryWrapper deleteWrapper = new LambdaQueryWrapper() 55 | .in(AdministratorRoleEntity::getId, deleteIds); 56 | this.remove(deleteWrapper); 57 | } 58 | 59 | // 创建 60 | if (createIds.size() > 0) { 61 | baseMapper.createBatch(administratorId, createIds); 62 | } 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /slipper-service/src/main/java/com/slipper/service/modules/captcha/dao/CaptchaDao.java: -------------------------------------------------------------------------------- 1 | package com.slipper.service.modules.captcha.dao; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.slipper.service.modules.captcha.entity.CaptchaEntity; 5 | import org.apache.ibatis.annotations.Mapper; 6 | 7 | /** 8 | * 验证码 9 | * 10 | * @author gumingchen 11 | * @email 1240235512@qq.com 12 | * @date 1995-08-30 00:00:00 13 | */ 14 | @Mapper 15 | public interface CaptchaDao extends BaseMapper { 16 | 17 | } 18 | -------------------------------------------------------------------------------- /slipper-service/src/main/java/com/slipper/service/modules/captcha/entity/CaptchaEntity.java: -------------------------------------------------------------------------------- 1 | package com.slipper.service.modules.captcha.entity; 2 | 3 | import com.baomidou.mybatisplus.annotation.IdType; 4 | import com.baomidou.mybatisplus.annotation.TableId; 5 | import com.baomidou.mybatisplus.annotation.TableLogic; 6 | import com.baomidou.mybatisplus.annotation.TableName; 7 | import com.fasterxml.jackson.annotation.JsonProperty; 8 | import com.slipper.common.validator.group.Create; 9 | import com.slipper.common.validator.group.Update; 10 | import lombok.Data; 11 | 12 | import javax.validation.constraints.NotBlank; 13 | import javax.validation.constraints.NotNull; 14 | import java.io.Serializable; 15 | import java.util.Date; 16 | 17 | /** 18 | * 验证码 19 | * 20 | * @author gumingchen 21 | * @email 1240235512@qq.com 22 | * @date 1995-08-30 00:00:00 23 | */ 24 | @Data 25 | @TableName("captcha") 26 | public class CaptchaEntity implements Serializable { 27 | private static final long serialVersionUID = 1L; 28 | 29 | @TableId(value = "uuid", type = IdType.INPUT) 30 | private String uuid; 31 | /** 32 | * 验证码 33 | */ 34 | private String code; 35 | /** 36 | * 到期时间 37 | */ 38 | @JsonProperty("expired_at") 39 | private Date expiredAt; 40 | /** 41 | * 创建时间 42 | */ 43 | @JsonProperty("created_at") 44 | private Date createdAt; 45 | } 46 | -------------------------------------------------------------------------------- /slipper-service/src/main/java/com/slipper/service/modules/captcha/service/CaptchaService.java: -------------------------------------------------------------------------------- 1 | package com.slipper.service.modules.captcha.service; 2 | 3 | import com.baomidou.mybatisplus.extension.service.IService; 4 | import com.slipper.service.modules.captcha.entity.CaptchaEntity; 5 | 6 | import java.awt.image.BufferedImage; 7 | 8 | /** 9 | * 验证码 10 | * 11 | * @author gumingchen 12 | * @email 1240235512@qq.com 13 | * @date 1995-08-30 00:00:00 14 | */ 15 | public interface CaptchaService extends IService { 16 | 17 | /** 18 | * 获取验证码 19 | * @param uuid UUID 20 | * @param mode 形式:1-存储在数据库 2-存储在Redis 21 | * @return 22 | */ 23 | BufferedImage createCaptcha(String uuid, Integer mode); 24 | 25 | /** 26 | * 验证验证码 27 | * @param uuid uuid 28 | * @param code 验证码 29 | * @param mode 形式:1-存储在数据库 2-存储在Redis 30 | * @return 31 | */ 32 | boolean validateCode(String uuid, String code, Integer mode); 33 | } 34 | -------------------------------------------------------------------------------- /slipper-service/src/main/java/com/slipper/service/modules/captcha/service/impl/CaptchaServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.slipper.service.modules.captcha.service.impl; 2 | 3 | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; 4 | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 5 | import com.google.code.kaptcha.Producer; 6 | import com.slipper.common.exception.RunException; 7 | import com.slipper.common.utils.Constant; 8 | import com.slipper.common.utils.DateUtils; 9 | import com.slipper.service.modules.captcha.dao.CaptchaDao; 10 | import com.slipper.service.modules.captcha.entity.CaptchaEntity; 11 | import com.slipper.service.modules.captcha.service.CaptchaService; 12 | import org.apache.commons.lang3.StringUtils; 13 | import org.springframework.stereotype.Service; 14 | 15 | import javax.annotation.Resource; 16 | import java.awt.image.BufferedImage; 17 | import java.util.Date; 18 | 19 | /** 20 | * 验证码 21 | * 22 | * @author gumingchen 23 | * @email 1240235512@qq.com 24 | * @date 1995-08-30 00:00:00 25 | */ 26 | @Service("captchaService") 27 | public class CaptchaServiceImpl extends ServiceImpl implements CaptchaService { 28 | 29 | @Resource 30 | private Producer producer; 31 | 32 | @Override 33 | public BufferedImage createCaptcha(String uuid, Integer mode) { 34 | if (StringUtils.isBlank(uuid)) { 35 | String message = Constant.VERIFICATION_ERROR_MESSAGE + "-UUID不能为空"; 36 | throw new RunException(Constant.VERIFICATION_ERROR_CODE, message); 37 | } 38 | String code = producer.createText(); 39 | Date now = new Date(); 40 | CaptchaEntity captchaEntity = new CaptchaEntity(); 41 | captchaEntity.setUuid(uuid); 42 | captchaEntity.setCode(code); 43 | captchaEntity.setExpiredAt(DateUtils.addMinutes(now, 1)); 44 | captchaEntity.setCreatedAt(now); 45 | switch (mode) { 46 | case 1: 47 | this.save(captchaEntity); 48 | break; 49 | default: 50 | } 51 | 52 | return producer.createImage(code); 53 | } 54 | 55 | @Override 56 | public boolean validateCode(String uuid, String code, Integer mode) { 57 | CaptchaEntity captchaEntity = null; 58 | switch (mode) { 59 | case 1: 60 | LambdaQueryWrapper wrapper = new LambdaQueryWrapper() 61 | .eq(CaptchaEntity::getUuid, uuid); 62 | captchaEntity = this.getOne(wrapper); 63 | // 验证存在验证码之后删除验证码 64 | if (captchaEntity != null) { 65 | this.removeById(captchaEntity.getUuid()); 66 | } 67 | break; 68 | default: 69 | } 70 | if (captchaEntity != null && captchaEntity.getCode().equals(code) && captchaEntity.getExpiredAt().getTime() >= System.currentTimeMillis()) { 71 | return true; 72 | } 73 | return false; 74 | } 75 | 76 | } -------------------------------------------------------------------------------- /slipper-service/src/main/java/com/slipper/service/modules/enterprise/dao/EnterpriseDao.java: -------------------------------------------------------------------------------- 1 | package com.slipper.service.modules.enterprise.dao; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.baomidou.mybatisplus.core.metadata.IPage; 5 | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 6 | import com.slipper.service.modules.enterprise.entity.EnterpriseEntity; 7 | import com.slipper.service.modules.enterprise.model.vo.EnterpriseSimplifyVO; 8 | import org.apache.ibatis.annotations.Mapper; 9 | import org.apache.ibatis.annotations.Param; 10 | 11 | /** 12 | * 企业 13 | * 14 | * @author gumingchen 15 | * @email 1240235512@qq.com 16 | * @date 1995-08-30 00:00:00 17 | */ 18 | @Mapper 19 | public interface EnterpriseDao extends BaseMapper { 20 | /** 21 | * 企业分页列表 精简信息 22 | * @param page 23 | * @param name 24 | * @return 25 | */ 26 | IPage queryPage(Page page, @Param("name") String name); 27 | } 28 | -------------------------------------------------------------------------------- /slipper-service/src/main/java/com/slipper/service/modules/enterprise/dao/EnterpriseMenuDao.java: -------------------------------------------------------------------------------- 1 | package com.slipper.service.modules.enterprise.dao; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.slipper.service.modules.enterprise.entity.EnterpriseMenuEntity; 5 | import com.slipper.service.modules.enterprise.model.dto.EnterpriseMenuTreeDTO; 6 | import com.slipper.service.modules.enterprise.model.vo.EnterpriseMenuSimplifyTreeVO; 7 | import com.slipper.service.modules.enterprise.model.vo.EnterpriseMenuTreeVO; 8 | import org.apache.ibatis.annotations.Mapper; 9 | import org.apache.ibatis.annotations.Param; 10 | 11 | import java.util.Date; 12 | import java.util.List; 13 | 14 | /** 15 | * 企业菜单权限 16 | * 17 | * @author gumingchen 18 | * @email 1240235512@qq.com 19 | * @date 1995-08-30 00:00:00 20 | */ 21 | @Mapper 22 | public interface EnterpriseMenuDao extends BaseMapper { 23 | 24 | /** 25 | * 获取企业拥有的权限 26 | * @param id 企业ID 27 | * @return 28 | */ 29 | List queryPermissionByEnterpriseId(@Param("id") Long id); 30 | 31 | /** 32 | * 获取企业拥有的菜单权限 33 | * @param id 企业ID 34 | * @return 35 | */ 36 | List queryCompleteEnterpriseMenuByEnterpriseId(@Param("id") Long id); 37 | 38 | /** 39 | * 获取管理員拥有的权限 40 | * @param id 管理員ID 41 | * @return 42 | */ 43 | List queryPermissionByAdministratorId(@Param("id") Long id); 44 | 45 | /** 46 | * 获取管理員拥有的菜单权限 47 | * @param id 管理員ID 48 | * @return 49 | */ 50 | List queryCompleteEnterpriseMenuByAdministratorId(@Param("id") Long id); 51 | 52 | /** 53 | * 获取企业拥有的菜单权限 54 | * @param id 企业ID 55 | * @return 56 | */ 57 | List queryEnterpriseMenuByEnterpriseId(@Param("id") Long id); 58 | 59 | /** 60 | * 获取企业下的菜单权限 只包括名称 id 61 | * @param enterpriseId 企业ID 62 | * @return 63 | */ 64 | List queryListByEnterpriseId(Long enterpriseId); 65 | 66 | /** 67 | * 获取角色下面的菜单权限 只包括名称 id 68 | * @param roleIds 角色ID数组 69 | * @return 70 | */ 71 | List queryListByRoleId(List roleIds); 72 | 73 | /** 74 | * 获取企业下的企业菜单ID 75 | * @param enterpriseId 企业ID 76 | * @return 77 | */ 78 | List queryMenuIdByEnterpriseId(@Param("enterpriseId") Long enterpriseId); 79 | 80 | /** 81 | * 批量创建 82 | * @param enterpriseId 企业ID 83 | * @param menuIds 菜单ID 84 | * @param administratorId 管理员ID 85 | * @param createdAt 创建时间 86 | */ 87 | void createBatch( 88 | @Param("enterpriseId") Long enterpriseId, 89 | @Param("menuIds") List menuIds, 90 | @Param("administratorId") Long administratorId, 91 | @Param("createdAt") Date createdAt 92 | ); 93 | } 94 | -------------------------------------------------------------------------------- /slipper-service/src/main/java/com/slipper/service/modules/enterprise/entity/EnterpriseEntity.java: -------------------------------------------------------------------------------- 1 | package com.slipper.service.modules.enterprise.entity; 2 | 3 | import com.baomidou.mybatisplus.annotation.*; 4 | import com.fasterxml.jackson.annotation.JsonProperty; 5 | import com.slipper.common.validator.group.Create; 6 | import com.slipper.common.validator.group.Update; 7 | import lombok.AllArgsConstructor; 8 | import lombok.Data; 9 | import lombok.NoArgsConstructor; 10 | 11 | import javax.validation.constraints.NotBlank; 12 | import javax.validation.constraints.NotNull; 13 | import java.io.Serializable; 14 | import java.util.Date; 15 | 16 | /** 17 | * 企业 18 | * 19 | * @author gumingchen 20 | * @email 1240235512@qq.com 21 | * @date 1995-08-30 00:00:00 22 | */ 23 | @Data 24 | @TableName("enterprise") 25 | public class EnterpriseEntity implements Serializable { 26 | private static final long serialVersionUID = 1L; 27 | 28 | @NotNull(message = "ID不能为空", groups = Update.class) 29 | @TableId(value = "id", type = IdType.AUTO) 30 | private Long id; 31 | /** 32 | * 名称 33 | */ 34 | @NotBlank(message = "名称不能为空", groups = {Create.class, Update.class}) 35 | private String name; 36 | /** 37 | * Logo 38 | */ 39 | private String logo; 40 | /** 41 | * Logo 42 | */ 43 | @TableField("`describe`") 44 | private String describe; 45 | /** 46 | * 状态:0-禁用 1-正常 47 | */ 48 | private Integer status; 49 | /** 50 | * 创建者 51 | */ 52 | private Long creator; 53 | /** 54 | * 创建时间 55 | */ 56 | @JsonProperty("created_at") 57 | private Date createdAt; 58 | /** 59 | * 更新者 60 | */ 61 | private Long updater; 62 | /** 63 | * 更新时间 64 | */ 65 | @JsonProperty("updated_at") 66 | private Date updatedAt; 67 | /** 68 | * 是否删除:0-否 1-是 69 | */ 70 | @TableLogic 71 | private Integer deleted; 72 | } 73 | -------------------------------------------------------------------------------- /slipper-service/src/main/java/com/slipper/service/modules/enterprise/entity/EnterpriseMenuEntity.java: -------------------------------------------------------------------------------- 1 | package com.slipper.service.modules.enterprise.entity; 2 | 3 | import com.baomidou.mybatisplus.annotation.IdType; 4 | import com.baomidou.mybatisplus.annotation.TableId; 5 | import com.baomidou.mybatisplus.annotation.TableLogic; 6 | import com.baomidou.mybatisplus.annotation.TableName; 7 | import com.fasterxml.jackson.annotation.JsonProperty; 8 | import com.slipper.common.validator.group.Create; 9 | import com.slipper.common.validator.group.Update; 10 | import lombok.Data; 11 | 12 | import javax.validation.constraints.NotBlank; 13 | import javax.validation.constraints.NotNull; 14 | import java.io.Serializable; 15 | import java.util.Date; 16 | 17 | /** 18 | * 企业菜单权限 19 | * 20 | * @author gumingchen 21 | * @email 1240235512@qq.com 22 | * @date 1995-08-30 00:00:00 23 | */ 24 | @Data 25 | @TableName("enterprise__menu") 26 | public class EnterpriseMenuEntity implements Serializable { 27 | private static final long serialVersionUID = 1L; 28 | 29 | @NotNull(message = "ID不能为空", groups = Update.class) 30 | @TableId(value = "id", type = IdType.AUTO) 31 | private Long id; 32 | /** 33 | * 中文名称 34 | */ 35 | @NotBlank(message = "中文名称不能为空", groups = {Create.class, Update.class}) 36 | @JsonProperty("name_cn") 37 | private String nameCn; 38 | /** 39 | * 英文名称 40 | */ 41 | @JsonProperty("name_en") 42 | private String nameEn; 43 | /** 44 | * 图标 45 | */ 46 | private String icon; 47 | /** 48 | * 排序 49 | */ 50 | private Integer sort; 51 | /** 52 | * 菜单ID 53 | */ 54 | @JsonProperty("menu_id") 55 | private Long menuId; 56 | /** 57 | * 企业ID 58 | */ 59 | @JsonProperty("enterprise_id") 60 | private Long enterpriseId; 61 | /** 62 | * 创建者 63 | */ 64 | private Long creator; 65 | /** 66 | * 创建时间 67 | */ 68 | @JsonProperty("created_at") 69 | private Date createdAt; 70 | /** 71 | * 更新者 72 | */ 73 | private Long updater; 74 | /** 75 | * 更新时间 76 | */ 77 | @JsonProperty("updated_at") 78 | private Date updatedAt; 79 | /** 80 | * 是否删除:0-否 1-是 81 | */ 82 | @TableLogic 83 | private Integer deleted; 84 | } 85 | -------------------------------------------------------------------------------- /slipper-service/src/main/java/com/slipper/service/modules/enterprise/model/dto/EnterpriseMenuTreeDTO.java: -------------------------------------------------------------------------------- 1 | package com.slipper.service.modules.enterprise.model.dto; 2 | 3 | import com.fasterxml.jackson.annotation.JsonProperty; 4 | import lombok.Data; 5 | 6 | import java.io.Serializable; 7 | import java.util.List; 8 | 9 | /** 10 | * 企业菜单权限 树形结构 11 | * 12 | * @author gumingchen 13 | * @email 1240235512@qq.com 14 | * @date 1995-08-30 00:00:00 15 | */ 16 | @Data 17 | public class EnterpriseMenuTreeDTO implements Serializable { 18 | private static final long serialVersionUID = 1L; 19 | 20 | private Long id; 21 | /** 22 | * 中文名称 23 | */ 24 | @JsonProperty("name_cn") 25 | private String nameCn; 26 | /** 27 | * 英文名称 28 | */ 29 | @JsonProperty("name_en") 30 | private String nameEn; 31 | /** 32 | * 路由 path 属性值 若为空则按照url路径处理 33 | */ 34 | private String path; 35 | /** 36 | * 路由 name 属性值 若为空则按照url路径处理 37 | */ 38 | private String name; 39 | /** 40 | * 菜单路由 或 URL 41 | */ 42 | private String url; 43 | /** 44 | * 授权(多个用逗号分隔,如:user:list,user:create) 45 | */ 46 | private String permission; 47 | /** 48 | * 类型:0-目录 1-菜单 2-按钮 3-iframe 4-外链 49 | */ 50 | private Integer type; 51 | /** 52 | * 图标 53 | */ 54 | private String icon; 55 | /** 56 | * 是否在菜单显示:0-否 1-是 57 | */ 58 | private Integer show; 59 | /** 60 | * 是否显示在tab页签:0-否 1-是 61 | */ 62 | private Integer tab; 63 | /** 64 | * 是否支持tab页签多开:0-否 1-是 65 | */ 66 | private Integer multiple; 67 | /** 68 | * 是否支持缓存:0-否 1-是 69 | */ 70 | private Integer keepalive; 71 | /** 72 | * 排序 73 | */ 74 | private Integer sort; 75 | /** 76 | * 菜单ID 77 | */ 78 | @JsonProperty("menu_id") 79 | private Long menuId; 80 | /** 81 | * 父ID 82 | */ 83 | @JsonProperty("parent_id") 84 | private Long parentId; 85 | /** 86 | * 企业ID 87 | */ 88 | @JsonProperty("enterprise_id") 89 | private Long enterpriseId; 90 | /** 91 | * 子集 92 | */ 93 | private List children; 94 | } 95 | -------------------------------------------------------------------------------- /slipper-service/src/main/java/com/slipper/service/modules/enterprise/model/form/EnterpriseCreateOrUpdateForm.java: -------------------------------------------------------------------------------- 1 | package com.slipper.service.modules.enterprise.model.form; 2 | 3 | import com.slipper.common.validator.group.Create; 4 | import com.slipper.common.validator.group.Update; 5 | import lombok.Data; 6 | 7 | import javax.validation.constraints.NotBlank; 8 | import javax.validation.constraints.NotNull; 9 | import java.io.Serializable; 10 | 11 | /** 12 | * 企业 新增 编辑 参数 13 | * 14 | * @author gumingchen 15 | * @email 1240235512@qq.com 16 | * @date 1995-08-30 00:00:00 17 | */ 18 | @Data 19 | public class EnterpriseCreateOrUpdateForm implements Serializable { 20 | 21 | private static final long serialVersionUID = 1L; 22 | 23 | @NotNull(message = "ID不能为空", groups = Update.class) 24 | private Long id; 25 | /** 26 | * 名称 27 | */ 28 | @NotBlank(message = "名称不能为空", groups = {Create.class, Update.class}) 29 | private String name; 30 | /** 31 | * Logo 32 | */ 33 | private String logo; 34 | /** 35 | * 描述 36 | */ 37 | private String describe; 38 | } 39 | -------------------------------------------------------------------------------- /slipper-service/src/main/java/com/slipper/service/modules/enterprise/model/form/EnterpriseMenuModifyForm.java: -------------------------------------------------------------------------------- 1 | package com.slipper.service.modules.enterprise.model.form; 2 | 3 | import com.fasterxml.jackson.annotation.JsonProperty; 4 | import lombok.Data; 5 | 6 | import javax.validation.constraints.NotBlank; 7 | import javax.validation.constraints.NotNull; 8 | import javax.validation.constraints.Size; 9 | import java.io.Serializable; 10 | import java.util.Date; 11 | import java.util.List; 12 | 13 | /** 14 | * 企业菜单权限修改 15 | * 16 | * @author gumingchen 17 | * @email 1240235512@qq.com 18 | * @date 1995-08-30 00:00:00 19 | */ 20 | @Data 21 | public class EnterpriseMenuModifyForm implements Serializable { 22 | private static final long serialVersionUID = 1L; 23 | 24 | /** 25 | * 企业ID 26 | */ 27 | @NotNull(message = "企业ID不能为空") 28 | @JsonProperty("enterprise_id") 29 | private Long enterpriseId; 30 | /** 31 | * 菜单ID 32 | */ 33 | @Size(min = 1, message = "至少选择一个菜单权限") 34 | @JsonProperty("menu_ids") 35 | private List menuIds; 36 | 37 | } 38 | -------------------------------------------------------------------------------- /slipper-service/src/main/java/com/slipper/service/modules/enterprise/model/form/EnterpriseMenuUpdateForm.java: -------------------------------------------------------------------------------- 1 | package com.slipper.service.modules.enterprise.model.form; 2 | 3 | import com.fasterxml.jackson.annotation.JsonProperty; 4 | import lombok.Data; 5 | 6 | import javax.validation.constraints.NotBlank; 7 | import javax.validation.constraints.NotNull; 8 | import java.io.Serializable; 9 | import java.util.Date; 10 | 11 | /** 12 | * 企业菜单编辑 13 | * 14 | * @author gumingchen 15 | * @email 1240235512@qq.com 16 | * @date 1995-08-30 00:00:00 17 | */ 18 | @Data 19 | public class EnterpriseMenuUpdateForm implements Serializable { 20 | private static final long serialVersionUID = 1L; 21 | 22 | @NotNull(message = "ID不能为空") 23 | private Long id; 24 | /** 25 | * 中文名称 26 | */ 27 | @NotBlank(message = "中文名称不能为空") 28 | @JsonProperty("name_cn") 29 | private String nameCn; 30 | /** 31 | * 英文名称 32 | */ 33 | @NotBlank(message = "英文名称不能为空") 34 | @JsonProperty("name_en") 35 | private String nameEn; 36 | /** 37 | * 图标 38 | */ 39 | // @NotBlank(message = "图标不能为空") 40 | private String icon; 41 | /** 42 | * 排序 43 | */ 44 | private Integer sort; 45 | /** 46 | * 更新者 47 | */ 48 | private Long updater; 49 | /** 50 | * 更新时间 51 | */ 52 | @JsonProperty("updated_at") 53 | private Date updatedAt; 54 | } 55 | -------------------------------------------------------------------------------- /slipper-service/src/main/java/com/slipper/service/modules/enterprise/model/form/EnterprisePageDateForm.java: -------------------------------------------------------------------------------- 1 | package com.slipper.service.modules.enterprise.model.form; 2 | 3 | import com.slipper.service.model.PageDateModel; 4 | import lombok.Data; 5 | 6 | import java.io.Serializable; 7 | 8 | /** 9 | * 企业列表分页参数 10 | * 11 | * @author gumingchen 12 | * @email 1240235512@qq.com 13 | * @date 1995-08-30 00:00:00 14 | */ 15 | @Data 16 | public class EnterprisePageDateForm extends PageDateModel implements Serializable { 17 | private static final long serialVersionUID = 1L; 18 | /** 19 | * 名称 20 | */ 21 | private String name; 22 | } 23 | -------------------------------------------------------------------------------- /slipper-service/src/main/java/com/slipper/service/modules/enterprise/model/form/EnterprisePageForm.java: -------------------------------------------------------------------------------- 1 | package com.slipper.service.modules.enterprise.model.form; 2 | 3 | import com.slipper.service.model.PageDateModel; 4 | import com.slipper.service.model.PageModel; 5 | import lombok.Data; 6 | 7 | import java.io.Serializable; 8 | 9 | /** 10 | * 企业列表分页参数 11 | * 12 | * @author gumingchen 13 | * @email 1240235512@qq.com 14 | * @date 1995-08-30 00:00:00 15 | */ 16 | @Data 17 | public class EnterprisePageForm extends PageModel implements Serializable { 18 | private static final long serialVersionUID = 1L; 19 | /** 20 | * 名称 21 | */ 22 | private String name; 23 | } 24 | -------------------------------------------------------------------------------- /slipper-service/src/main/java/com/slipper/service/modules/enterprise/model/vo/EnterpriseMenuSimplifyTreeVO.java: -------------------------------------------------------------------------------- 1 | package com.slipper.service.modules.enterprise.model.vo; 2 | 3 | import com.fasterxml.jackson.annotation.JsonProperty; 4 | import lombok.Data; 5 | 6 | import java.io.Serializable; 7 | import java.util.List; 8 | 9 | /** 10 | * 企业菜单权限 精简信息 11 | * 12 | * @author gumingchen 13 | * @email 1240235512@qq.com 14 | * @date 1995-08-30 00:00:00 15 | */ 16 | @Data 17 | public class EnterpriseMenuSimplifyTreeVO implements Serializable { 18 | private static final long serialVersionUID = 1L; 19 | 20 | private Long id; 21 | /** 22 | * 中文名称 23 | */ 24 | @JsonProperty("name_cn") 25 | private String nameCn; 26 | /** 27 | * 英文名称 28 | */ 29 | @JsonProperty("name_en") 30 | private String nameEn; 31 | /** 32 | * 菜单ID 33 | */ 34 | @JsonProperty("menuId") 35 | private Long menuId; 36 | /** 37 | * 菜单父级ID 38 | */ 39 | @JsonProperty("parent_id") 40 | private Long parentId; 41 | /** 42 | * 子集 43 | */ 44 | private List children; 45 | 46 | } 47 | -------------------------------------------------------------------------------- /slipper-service/src/main/java/com/slipper/service/modules/enterprise/model/vo/EnterpriseMenuTreeVO.java: -------------------------------------------------------------------------------- 1 | package com.slipper.service.modules.enterprise.model.vo; 2 | 3 | import com.fasterxml.jackson.annotation.JsonProperty; 4 | import lombok.Data; 5 | 6 | import java.io.Serializable; 7 | import java.util.Date; 8 | import java.util.List; 9 | 10 | /** 11 | * 企业菜单 树形结构 12 | * 13 | * @author gumingchen 14 | * @email 1240235512@qq.com 15 | * @date 1995-08-30 00:00:00 16 | */ 17 | @Data 18 | public class EnterpriseMenuTreeVO implements Serializable { 19 | private static final long serialVersionUID = 1L; 20 | 21 | private Long id; 22 | /** 23 | * 中文名称 24 | */ 25 | @JsonProperty("name_cn") 26 | private String nameCn; 27 | /** 28 | * 英文名称 29 | */ 30 | @JsonProperty("name_en") 31 | private String nameEn; 32 | /** 33 | * 类型:0-目录 1-菜单 2-按钮 3-iframe 4-外链 34 | */ 35 | private Integer type; 36 | /** 37 | * 图标 38 | */ 39 | private String icon; 40 | /** 41 | * 排序 42 | */ 43 | private Integer sort; 44 | /** 45 | * 菜单ID 46 | */ 47 | @JsonProperty("menu_id") 48 | private Long menuId; 49 | /** 50 | * 父ID 51 | */ 52 | @JsonProperty("parent_id") 53 | private Long parentId; 54 | /** 55 | * 企业ID 56 | */ 57 | @JsonProperty("enterprise_id") 58 | private Long enterpriseId; 59 | /** 60 | * 更新时间 61 | */ 62 | @JsonProperty("updated_at") 63 | private Date updatedAt; 64 | /** 65 | * 子集 66 | */ 67 | private List children; 68 | } 69 | -------------------------------------------------------------------------------- /slipper-service/src/main/java/com/slipper/service/modules/enterprise/model/vo/EnterpriseMenuVO.java: -------------------------------------------------------------------------------- 1 | package com.slipper.service.modules.enterprise.model.vo; 2 | 3 | import com.slipper.service.modules.enterprise.model.dto.EnterpriseMenuTreeDTO; 4 | import lombok.Data; 5 | 6 | import java.io.Serializable; 7 | import java.util.List; 8 | import java.util.Set; 9 | 10 | /** 11 | * 企业菜单权限 12 | * 13 | * @author gumingchen 14 | * @email 1240235512@qq.com 15 | * @date 1995-08-30 00:00:00 16 | */ 17 | @Data 18 | public class EnterpriseMenuVO implements Serializable { 19 | private static final long serialVersionUID = 1L; 20 | 21 | /** 22 | * 权限数组 逗号分割 23 | */ 24 | private Set permissions; 25 | /** 26 | * 菜单 树形结构 27 | */ 28 | private List menus; 29 | } 30 | -------------------------------------------------------------------------------- /slipper-service/src/main/java/com/slipper/service/modules/enterprise/model/vo/EnterpriseSimplifyVO.java: -------------------------------------------------------------------------------- 1 | package com.slipper.service.modules.enterprise.model.vo; 2 | 3 | import lombok.Data; 4 | 5 | import java.io.Serializable; 6 | 7 | /** 8 | * 企业 精简信息 9 | * 10 | * @author gumingchen 11 | * @email 1240235512@qq.com 12 | * @date 1995-08-30 00:00:00 13 | */ 14 | @Data 15 | public class EnterpriseSimplifyVO implements Serializable { 16 | private static final long serialVersionUID = 1L; 17 | 18 | private Long id; 19 | /** 20 | * 名称 21 | */ 22 | private String name; 23 | 24 | } 25 | -------------------------------------------------------------------------------- /slipper-service/src/main/java/com/slipper/service/modules/enterprise/model/vo/EnterpriseVO.java: -------------------------------------------------------------------------------- 1 | package com.slipper.service.modules.enterprise.model.vo; 2 | 3 | import com.fasterxml.jackson.annotation.JsonProperty; 4 | import lombok.Data; 5 | 6 | import java.io.Serializable; 7 | import java.util.Date; 8 | 9 | /** 10 | * 企业视图数据 11 | * 12 | * @author gumingchen 13 | * @email 1240235512@qq.com 14 | * @date 1995-08-30 00:00:00 15 | */ 16 | @Data 17 | public class EnterpriseVO implements Serializable { 18 | private static final long serialVersionUID = 1L; 19 | 20 | private Long id; 21 | /** 22 | * 名称 23 | */ 24 | private String name; 25 | /** 26 | * Logo 27 | */ 28 | private String logo; 29 | /** 30 | * Logo 31 | */ 32 | private String describe; 33 | /** 34 | * 状态:0-禁用 1-正常 35 | */ 36 | private Integer status; 37 | /** 38 | * 创建时间 39 | */ 40 | @JsonProperty("created_at") 41 | private Date createdAt; 42 | /** 43 | * 更新时间 44 | */ 45 | @JsonProperty("updated_at") 46 | private Date updatedAt; 47 | 48 | } 49 | -------------------------------------------------------------------------------- /slipper-service/src/main/java/com/slipper/service/modules/enterprise/service/EnterpriseMenuService.java: -------------------------------------------------------------------------------- 1 | package com.slipper.service.modules.enterprise.service; 2 | 3 | import com.baomidou.mybatisplus.extension.service.IService; 4 | import com.slipper.service.modules.administrator.model.dto.AdministratorRoleDTO; 5 | import com.slipper.service.modules.enterprise.entity.EnterpriseMenuEntity; 6 | import com.slipper.service.modules.enterprise.model.form.EnterpriseMenuModifyForm; 7 | import com.slipper.service.modules.enterprise.model.form.EnterpriseMenuUpdateForm; 8 | import com.slipper.service.modules.enterprise.model.vo.EnterpriseMenuSimplifyTreeVO; 9 | import com.slipper.service.modules.enterprise.model.vo.EnterpriseMenuTreeVO; 10 | import com.slipper.service.modules.enterprise.model.vo.EnterpriseMenuVO; 11 | 12 | import java.util.List; 13 | 14 | /** 15 | * 企业菜单权限 16 | * 17 | * @author gumingchen 18 | * @email 1240235512@qq.com 19 | * @date 1995-08-30 00:00:00 20 | */ 21 | public interface EnterpriseMenuService extends IService { 22 | 23 | /** 24 | * 获取用户拥有的权限、菜单 25 | * @param administratorRoleDto 管理员 26 | * @return 27 | */ 28 | EnterpriseMenuVO queryPermissionAndMenuByAdministrator(AdministratorRoleDTO administratorRoleDto); 29 | 30 | /** 31 | * 列表 32 | * @param enterpriseId 企业ID 33 | * @return 34 | */ 35 | List list(Long enterpriseId); 36 | 37 | /** 38 | * 编辑企业菜单 39 | * @param enterpriseMenuForm 40 | */ 41 | void update(EnterpriseMenuUpdateForm enterpriseMenuForm); 42 | 43 | /** 44 | * 获取取管理员在该企业下的菜单权限 只包括名称 id 45 | * 超级管理员 返回所有 否则 返回该用户角色下面的所有 46 | * @param administratorRoleDto 47 | * @return 48 | */ 49 | List queryListByAdministrator(AdministratorRoleDTO administratorRoleDto); 50 | 51 | /* todo:-------------------------------------------------------------------------------------- */ 52 | 53 | /** 54 | * 获取企业下的企业菜单ID 55 | * @param enterpriseId 企业ID 56 | * @return 57 | */ 58 | List queryMenuIdByEnterpriseId(Long enterpriseId); 59 | 60 | /** 61 | * 修改企业菜单权限 62 | * @param modifyForm 企业id 菜单列表 63 | * @param administratorId 管理员ID 64 | */ 65 | void modify(EnterpriseMenuModifyForm modifyForm, Long administratorId); 66 | 67 | /** 68 | * 删除企业菜单全新啊 69 | * @param enterpriseMenuId 企业菜单ID 70 | */ 71 | void delete(Long enterpriseMenuId); 72 | 73 | /** 74 | * 获取该企业下的所有菜单权限 只包括名称 id 75 | * @param enterpriseId 企业ID 76 | * @return 77 | */ 78 | List queryListByEnterpriseId(Long enterpriseId); 79 | 80 | } 81 | -------------------------------------------------------------------------------- /slipper-service/src/main/java/com/slipper/service/modules/enterprise/service/EnterpriseService.java: -------------------------------------------------------------------------------- 1 | package com.slipper.service.modules.enterprise.service; 2 | 3 | import com.baomidou.mybatisplus.extension.service.IService; 4 | import com.slipper.common.utils.RPage; 5 | import com.slipper.service.modules.enterprise.entity.EnterpriseEntity; 6 | import com.slipper.service.modules.enterprise.model.form.EnterpriseCreateOrUpdateForm; 7 | import com.slipper.service.modules.enterprise.model.form.EnterprisePageDateForm; 8 | import com.slipper.service.modules.enterprise.model.form.EnterprisePageForm; 9 | import com.slipper.service.modules.enterprise.model.vo.EnterpriseSimplifyVO; 10 | import com.slipper.service.modules.enterprise.model.vo.EnterpriseVO; 11 | 12 | import java.util.List; 13 | 14 | /** 15 | * 企业 16 | * 17 | * @author gumingchen 18 | * @email 1240235512@qq.com 19 | * @date 1995-08-30 00:00:00 20 | */ 21 | public interface EnterpriseService extends IService { 22 | 23 | /** 24 | * 企业分页数据 25 | * @param PageForm 分页参数 26 | * @return 27 | */ 28 | RPage queryPage(EnterprisePageDateForm PageForm); 29 | 30 | /** 31 | * 创建 32 | * @param createOrUpdateForm 创建参数 33 | * @param administratorId 创建用户ID 34 | */ 35 | void create(EnterpriseCreateOrUpdateForm createOrUpdateForm, Long administratorId); 36 | 37 | /** 38 | * 更新 39 | * @param createOrUpdateForm 更新参数 40 | * @param administratorId 更新用户ID 41 | */ 42 | void update(EnterpriseCreateOrUpdateForm createOrUpdateForm, Long administratorId); 43 | 44 | /** 45 | * 删除 46 | * @param ids ID列表 47 | */ 48 | void delete(List ids); 49 | 50 | /* todo:-------------------------------------------------------------------------------------- */ 51 | 52 | /** 53 | * 企业分页列表 精简信息 54 | * @param PageForm 分页参数 55 | * @return 56 | */ 57 | RPage queryPage(EnterprisePageForm PageForm); 58 | 59 | } 60 | -------------------------------------------------------------------------------- /slipper-service/src/main/java/com/slipper/service/modules/file/dao/FileDao.java: -------------------------------------------------------------------------------- 1 | package com.slipper.service.modules.file.dao; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.slipper.service.modules.file.entity.FileEntity; 5 | import org.apache.ibatis.annotations.Mapper; 6 | 7 | /** 8 | * 文件 9 | * 10 | * @author gumingchen 11 | * @email 1240235512@qq.com 12 | * @date 2022-06-21 05:29:36 13 | */ 14 | @Mapper 15 | public interface FileDao extends BaseMapper { 16 | 17 | } 18 | -------------------------------------------------------------------------------- /slipper-service/src/main/java/com/slipper/service/modules/file/entity/FileEntity.java: -------------------------------------------------------------------------------- 1 | package com.slipper.service.modules.file.entity; 2 | 3 | import com.baomidou.mybatisplus.annotation.IdType; 4 | import com.baomidou.mybatisplus.annotation.TableId; 5 | import com.baomidou.mybatisplus.annotation.TableLogic; 6 | import com.baomidou.mybatisplus.annotation.TableName; 7 | import com.fasterxml.jackson.annotation.JsonProperty; 8 | import com.slipper.common.validator.group.Create; 9 | import com.slipper.common.validator.group.Update; 10 | import lombok.Data; 11 | 12 | import javax.validation.constraints.NotBlank; 13 | import javax.validation.constraints.NotNull; 14 | import java.io.Serializable; 15 | import java.util.Date; 16 | 17 | /** 18 | * 文件 19 | * 20 | * @author gumingchen 21 | * @email 1240235512@qq.com 22 | * @date 2022-06-21 05:29:36 23 | */ 24 | @Data 25 | @TableName("file") 26 | public class FileEntity implements Serializable { 27 | private static final long serialVersionUID = 1L; 28 | 29 | /** 30 | * 31 | */ 32 | @TableId(value = "id", type = IdType.AUTO) 33 | private Long id; 34 | /** 35 | * 原始名称 36 | */ 37 | private String original; 38 | /** 39 | * 实际名称 40 | */ 41 | private String actual; 42 | /** 43 | * 扩展名称 44 | */ 45 | private String extension; 46 | /** 47 | * 大小 48 | */ 49 | private Long size; 50 | /** 51 | * 物理路径 52 | */ 53 | private String path; 54 | /** 55 | * 虚拟路径 56 | */ 57 | private String url; 58 | /** 59 | * 前缀 60 | */ 61 | private String prefix; 62 | /** 63 | * 存储类型 64 | */ 65 | private Integer type; 66 | /** 67 | * 上传用户ID 68 | */ 69 | private Long creator; 70 | /** 71 | * 上传时间 72 | */ 73 | @JsonProperty("created_at") 74 | private Date createdAt; 75 | /** 76 | * 是否删除:0-否 1-是 77 | */ 78 | @TableLogic 79 | private Integer deleted; 80 | } 81 | -------------------------------------------------------------------------------- /slipper-service/src/main/java/com/slipper/service/modules/file/model/form/FilePageDateForm.java: -------------------------------------------------------------------------------- 1 | package com.slipper.service.modules.file.model.form; 2 | 3 | import lombok.Data; 4 | 5 | import java.io.Serializable; 6 | import com.slipper.service.model.PageDateModel; 7 | 8 | /** 9 | * 文件 10 | * 11 | * @author gumingchen 12 | * @email 1240235512@qq.com 13 | * @date 2022-06-21 05:29:36 14 | */ 15 | @Data 16 | public class FilePageDateForm extends PageDateModel implements Serializable { 17 | private static final long serialVersionUID = 1L; 18 | /** 19 | * 文件名 20 | */ 21 | private String name; 22 | /** 23 | * 存储类型 24 | */ 25 | private Integer type; 26 | } 27 | -------------------------------------------------------------------------------- /slipper-service/src/main/java/com/slipper/service/modules/file/model/vo/FileSimplifyVO.java: -------------------------------------------------------------------------------- 1 | package com.slipper.service.modules.file.model.vo; 2 | 3 | import lombok.Data; 4 | 5 | import java.io.Serializable; 6 | 7 | /** 8 | * 文件 9 | * 10 | * @author gumingchen 11 | * @email 1240235512@qq.com 12 | * @date 2022-06-21 05:29:36 13 | */ 14 | @Data 15 | public class FileSimplifyVO implements Serializable { 16 | private static final long serialVersionUID = 1L; 17 | 18 | /** 19 | * 20 | */ 21 | private Long id; 22 | /** 23 | * 原始名称 24 | */ 25 | private String original; 26 | /** 27 | * 实际名称 28 | */ 29 | private String actual; 30 | /** 31 | * 扩展名称 32 | */ 33 | private String extension; 34 | /** 35 | * 虚拟路径 36 | */ 37 | private String url; 38 | } 39 | -------------------------------------------------------------------------------- /slipper-service/src/main/java/com/slipper/service/modules/file/model/vo/FileVO.java: -------------------------------------------------------------------------------- 1 | package com.slipper.service.modules.file.model.vo; 2 | 3 | import com.fasterxml.jackson.annotation.JsonProperty; 4 | import lombok.Data; 5 | 6 | import java.io.Serializable; 7 | import java.util.Date; 8 | 9 | /** 10 | * 文件 11 | * 12 | * @author gumingchen 13 | * @email 1240235512@qq.com 14 | * @date 2022-06-21 05:29:36 15 | */ 16 | @Data 17 | public class FileVO implements Serializable { 18 | private static final long serialVersionUID = 1L; 19 | 20 | /** 21 | * 22 | */ 23 | private Long id; 24 | /** 25 | * 原始名称 26 | */ 27 | private String original; 28 | /** 29 | * 实际名称 30 | */ 31 | private String actual; 32 | /** 33 | * 扩展名称 34 | */ 35 | private String extension; 36 | /** 37 | * 大小 38 | */ 39 | private Long size; 40 | /** 41 | * 物理路径 42 | */ 43 | private String path; 44 | /** 45 | * 虚拟路径 46 | */ 47 | private String url; 48 | /** 49 | * 前缀 50 | */ 51 | private String prefix; 52 | /** 53 | * 存储类型 54 | */ 55 | private Integer type; 56 | /** 57 | * 上传时间 58 | */ 59 | @JsonProperty("created_at") 60 | private Date createdAt; 61 | } 62 | -------------------------------------------------------------------------------- /slipper-service/src/main/java/com/slipper/service/modules/file/service/FileService.java: -------------------------------------------------------------------------------- 1 | package com.slipper.service.modules.file.service; 2 | 3 | import com.baomidou.mybatisplus.extension.service.IService; 4 | import com.slipper.service.modules.file.entity.FileEntity; 5 | import org.springframework.web.multipart.MultipartFile; 6 | 7 | /** 8 | * 文件 9 | * 10 | * @author gumingchen 11 | * @email 1240235512@qq.com 12 | * @date 2022-06-21 05:29:36 13 | */ 14 | public interface FileService extends IService { 15 | 16 | /** 17 | * 文件创建存储 18 | * @param file 19 | * @param administratorId 20 | * @return 21 | */ 22 | FileEntity create(MultipartFile file, Long administratorId); 23 | 24 | } 25 | 26 | -------------------------------------------------------------------------------- /slipper-service/src/main/java/com/slipper/service/modules/file/service/impl/FileServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.slipper.service.modules.file.service.impl; 2 | 3 | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 4 | import com.slipper.common.exception.RunException; 5 | import com.slipper.common.utils.Constant; 6 | import com.slipper.service.modules.file.dao.FileDao; 7 | import com.slipper.service.modules.file.entity.FileEntity; 8 | import com.slipper.service.modules.file.service.FileService; 9 | import com.slipper.service.modules.file.utils.FileUtils; 10 | import org.apache.commons.lang3.StringUtils; 11 | import org.springframework.stereotype.Service; 12 | import org.springframework.web.multipart.MultipartFile; 13 | 14 | import java.util.Date; 15 | import java.util.UUID; 16 | 17 | /** 18 | * 文件 19 | * 20 | * @author gumingchen 21 | * @email 1240235512@qq.com 22 | * @date 2022-06-21 05:29:36 23 | */ 24 | @Service("fileService") 25 | public class FileServiceImpl extends ServiceImpl implements FileService { 26 | /** 27 | * 文件存储路径 28 | */ 29 | private static final String PATH = "/home/static/file"; 30 | /** 31 | * 访问域名 32 | */ 33 | private static final String DOMAIN = "http://resource.gumingchen.icu"; 34 | /** 35 | * 前缀 36 | */ 37 | private static final String PREFIX = "file"; 38 | 39 | @Override 40 | public FileEntity create(MultipartFile file, Long administratorId) { 41 | 42 | FileEntity fileEntity = new FileEntity(); 43 | fileEntity.setCreator(administratorId); 44 | 45 | setFileEntity(fileEntity, file, PATH, DOMAIN, PREFIX, 1); 46 | Boolean result = FileUtils.save(file, fileEntity.getPath()); 47 | 48 | if (!result) { 49 | throw new RunException(Constant.WARNING_CODE, "上传失败"); 50 | } 51 | 52 | this.save(fileEntity); 53 | return fileEntity; 54 | } 55 | 56 | /** 57 | * 获取文件对象 58 | * @param fileEntity 文件对象 59 | * @param file 文件 60 | * @param path 路径 61 | * @param url 虚拟路径 62 | * @param prefix 前缀 63 | * @param type 类型 64 | * @return 65 | */ 66 | private void setFileEntity(FileEntity fileEntity, MultipartFile file, String path, String url, String prefix, Integer type) { 67 | // 设置文件名 68 | fileEntity.setOriginal(file.getOriginalFilename()); 69 | // 获取扩展名 70 | fileEntity.setExtension(fileEntity 71 | .getOriginal() 72 | .substring(fileEntity 73 | .getOriginal() 74 | .lastIndexOf("."))); 75 | // 设置文件实际名称 76 | fileEntity.setActual(UUID.randomUUID().toString() 77 | + fileEntity.getExtension()); 78 | // 文件大小 79 | fileEntity.setSize(file.getSize()); 80 | // 设置文件物理路径 81 | if (StringUtils.isNotBlank(path)) { 82 | fileEntity.setPath(path + "/" + fileEntity.getActual()); 83 | } 84 | // 设置前缀 85 | fileEntity.setPrefix(prefix); 86 | // 设置存储类型 87 | fileEntity.setType(type); 88 | // 设置文件虚拟路径 89 | fileEntity.setUrl(url + (StringUtils.isNotBlank(prefix) ? ("/" + prefix) : "") + "/" + fileEntity.getActual()); 90 | // 设置创建时间 91 | fileEntity.setCreatedAt(new Date()); 92 | } 93 | 94 | } 95 | -------------------------------------------------------------------------------- /slipper-service/src/main/java/com/slipper/service/modules/log/login/dao/LoginLogDao.java: -------------------------------------------------------------------------------- 1 | package com.slipper.service.modules.log.login.dao; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.baomidou.mybatisplus.core.metadata.IPage; 5 | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 6 | import com.slipper.service.modules.log.login.entity.LoginLogEntity; 7 | import com.slipper.service.modules.log.login.model.vo.LoginLogVO; 8 | import com.slipper.service.modules.log.login.model.vo.LoginLogSimplifyVO; 9 | import com.slipper.service.modules.log.login.model.vo.VisitsVO; 10 | import org.apache.ibatis.annotations.Mapper; 11 | import org.apache.ibatis.annotations.Param; 12 | 13 | import java.util.List; 14 | 15 | /** 16 | * 操作日志 17 | * 18 | * @author gumingchen 19 | * @email 1240235512@qq.com 20 | * @date 1995-08-30 00:00:00 21 | */ 22 | @Mapper 23 | public interface LoginLogDao extends BaseMapper { 24 | 25 | /** 26 | * 分页列表 27 | * @param page 分页参数 28 | * @param name 昵称 / 用户名 29 | * @param start 开始时间 30 | * @param end 结束时间 31 | * @param enterpriseId 企业ID 32 | * @return 33 | */ 34 | IPage queryPage( 35 | Page page, 36 | @Param("name") String name, 37 | @Param("start") String start, 38 | @Param("end") String end, 39 | @Param("enterpriseId") Long enterpriseId 40 | ); 41 | 42 | /** 43 | * 分页列表 44 | * @param page 分页参数 45 | * @param administratorId 管理员ID 46 | * @return 47 | */ 48 | IPage queryPageByAdministrator(Page page, @Param("administratorId") Long administratorId); 49 | 50 | /** 51 | * 删除 52 | * @param enterpriseId 53 | */ 54 | void delete(@Param("enterpriseId") Long enterpriseId); 55 | 56 | /** 57 | * 清空操作日志表 58 | */ 59 | void truncate(); 60 | 61 | /** 62 | * 查询最近登录量 63 | * @param day 天数 64 | * @return 65 | */ 66 | List queryVisits(@Param("day") Integer day); 67 | 68 | } 69 | -------------------------------------------------------------------------------- /slipper-service/src/main/java/com/slipper/service/modules/log/login/entity/LoginLogEntity.java: -------------------------------------------------------------------------------- 1 | package com.slipper.service.modules.log.login.entity; 2 | 3 | import com.baomidou.mybatisplus.annotation.IdType; 4 | import com.baomidou.mybatisplus.annotation.TableId; 5 | import com.baomidou.mybatisplus.annotation.TableLogic; 6 | import com.baomidou.mybatisplus.annotation.TableName; 7 | import com.fasterxml.jackson.annotation.JsonProperty; 8 | import lombok.Data; 9 | 10 | import java.io.Serializable; 11 | import java.util.Date; 12 | 13 | /** 14 | * 登录日志 15 | * 16 | * @author gumingchen 17 | * @email 1240235512@qq.com 18 | * @date 1995-08-30 00:00:00 19 | */ 20 | @Data 21 | @TableName("login_log") 22 | public class LoginLogEntity implements Serializable { 23 | private static final long serialVersionUID = 1L; 24 | 25 | @TableId(value = "id", type = IdType.AUTO) 26 | private Long id; 27 | /** 28 | * 登录帐号 29 | */ 30 | private String account; 31 | /** 32 | * 登录信息 33 | */ 34 | private String message; 35 | /** 36 | * 请求参数 37 | */ 38 | @JsonProperty("request_data") 39 | private String requestData; 40 | /** 41 | * IP地址 42 | */ 43 | private String ip; 44 | /** 45 | * 地址 46 | */ 47 | private String address; 48 | /** 49 | * 浏览器 50 | */ 51 | private String browser; 52 | /** 53 | * 操作系统 54 | */ 55 | @JsonProperty("operating_system") 56 | private String operatingSystem; 57 | /** 58 | * 用户代理 59 | */ 60 | private String agent; 61 | /** 62 | * 创建者 63 | */ 64 | private Long creator; 65 | /** 66 | * 创建时间 67 | */ 68 | @JsonProperty("created_at") 69 | private Date createdAt; 70 | /** 71 | * 是否删除:0-否 1-是 72 | */ 73 | @TableLogic 74 | private Integer deleted; 75 | } 76 | -------------------------------------------------------------------------------- /slipper-service/src/main/java/com/slipper/service/modules/log/login/model/form/LoginLogPageDateForm.java: -------------------------------------------------------------------------------- 1 | package com.slipper.service.modules.log.login.model.form; 2 | 3 | import com.slipper.service.model.PageDateModel; 4 | import lombok.Data; 5 | 6 | import java.io.Serializable; 7 | 8 | /** 9 | * 登录日志分页参数 10 | * 11 | * @author gumingchen 12 | * @email 1240235512@qq.com 13 | * @date 1995-08-30 00:00:00 14 | */ 15 | @Data 16 | public class LoginLogPageDateForm extends PageDateModel implements Serializable { 17 | private static final long serialVersionUID = 1L; 18 | /** 19 | * 管理员 昵称 / 帐号 20 | */ 21 | public String name; 22 | /** 23 | * 企业ID 24 | */ 25 | public Long id; 26 | } 27 | -------------------------------------------------------------------------------- /slipper-service/src/main/java/com/slipper/service/modules/log/login/model/vo/LoginLogSimplifyVO.java: -------------------------------------------------------------------------------- 1 | package com.slipper.service.modules.log.login.model.vo; 2 | 3 | import com.fasterxml.jackson.annotation.JsonProperty; 4 | import lombok.Data; 5 | 6 | import java.io.Serializable; 7 | import java.util.Date; 8 | 9 | /** 10 | * 当前管理员登录日志 11 | * 12 | * @author gumingchen 13 | * @email 1240235512@qq.com 14 | * @date 1995-08-30 00:00:00 15 | */ 16 | @Data 17 | public class LoginLogSimplifyVO implements Serializable { 18 | private static final long serialVersionUID = 1L; 19 | 20 | public Long id; 21 | /** 22 | * 登录信息 23 | */ 24 | private String message; 25 | /** 26 | * IP地址 27 | */ 28 | public String ip; 29 | /** 30 | * 地址 31 | */ 32 | public String address; 33 | /** 34 | * 浏览器 35 | */ 36 | public String browser; 37 | /** 38 | * 操作系统 39 | */ 40 | @JsonProperty("operating_system") 41 | public String operatingSystem; 42 | /** 43 | * 创建时间 44 | */ 45 | @JsonProperty("created_at") 46 | public Date createdAt; 47 | } 48 | -------------------------------------------------------------------------------- /slipper-service/src/main/java/com/slipper/service/modules/log/login/model/vo/LoginLogVO.java: -------------------------------------------------------------------------------- 1 | package com.slipper.service.modules.log.login.model.vo; 2 | 3 | import com.fasterxml.jackson.annotation.JsonProperty; 4 | import lombok.Data; 5 | 6 | import java.io.Serializable; 7 | import java.util.Date; 8 | 9 | /** 10 | * 登录日志 用户信息 11 | * 12 | * @author gumingchen 13 | * @email 1240235512@qq.com 14 | * @date 1995-08-30 00:00:00 15 | */ 16 | @Data 17 | public class LoginLogVO implements Serializable { 18 | private static final long serialVersionUID = 1L; 19 | 20 | public Long id; 21 | /** 22 | * 登录帐号 23 | */ 24 | private String account; 25 | /** 26 | * 登录信息 27 | */ 28 | private String message; 29 | /** 30 | * 请求参数 31 | */ 32 | @JsonProperty("request_data") 33 | public String requestData; 34 | /** 35 | * IP地址 36 | */ 37 | public String ip; 38 | /** 39 | * 地址 40 | */ 41 | public String address; 42 | /** 43 | * 浏览器 44 | */ 45 | public String browser; 46 | /** 47 | * 操作系统 48 | */ 49 | @JsonProperty("operating_system") 50 | public String operatingSystem; 51 | /** 52 | * 用户代理 53 | */ 54 | public String agent; 55 | /** 56 | * 创建者 57 | */ 58 | public Long creator; 59 | /** 60 | * 头像 61 | */ 62 | public String avatar; 63 | /** 64 | * 用户名 65 | */ 66 | public String username; 67 | /** 68 | * 昵称 69 | */ 70 | public String nickname; 71 | /** 72 | * 创建时间 73 | */ 74 | @JsonProperty("created_at") 75 | public Date createdAt; 76 | } 77 | -------------------------------------------------------------------------------- /slipper-service/src/main/java/com/slipper/service/modules/log/login/model/vo/VisitsVO.java: -------------------------------------------------------------------------------- 1 | package com.slipper.service.modules.log.login.model.vo; 2 | 3 | import com.fasterxml.jackson.annotation.JsonProperty; 4 | import lombok.Data; 5 | 6 | import java.io.Serializable; 7 | import java.util.Date; 8 | 9 | /** 10 | * 最近登录用户量 11 | * 12 | * @author gumingchen 13 | * @email 1240235512@qq.com 14 | * @date 1995-08-30 00:00:00 15 | */ 16 | @Data 17 | public class VisitsVO implements Serializable { 18 | private static final long serialVersionUID = 1L; 19 | /** 20 | * 日期 21 | */ 22 | private String date; 23 | /** 24 | * 访问量 25 | */ 26 | private Integer count; 27 | } 28 | -------------------------------------------------------------------------------- /slipper-service/src/main/java/com/slipper/service/modules/log/login/service/LoginLogService.java: -------------------------------------------------------------------------------- 1 | package com.slipper.service.modules.log.login.service; 2 | 3 | import com.baomidou.mybatisplus.extension.service.IService; 4 | import com.slipper.common.utils.RPage; 5 | import com.slipper.service.model.PageModel; 6 | import com.slipper.service.modules.log.login.entity.LoginLogEntity; 7 | import com.slipper.service.modules.log.login.model.form.LoginLogPageDateForm; 8 | import com.slipper.service.modules.log.login.model.vo.LoginLogVO; 9 | import com.slipper.service.modules.log.login.model.vo.LoginLogSimplifyVO; 10 | import com.slipper.service.modules.log.login.model.vo.VisitsVO; 11 | import org.apache.ibatis.annotations.Param; 12 | 13 | import java.util.List; 14 | 15 | /** 16 | * 登录日志 17 | * 18 | * @author gumingchen 19 | * @email 1240235512@qq.com 20 | * @date 1995-08-30 00:00:00 21 | */ 22 | public interface LoginLogService extends IService { 23 | 24 | /** 25 | * 分页列表 26 | * @param pageDateForm 分页参数 27 | * @param enterpriseId 企业ID 28 | * @return 29 | */ 30 | RPage queryPage(LoginLogPageDateForm pageDateForm, Long enterpriseId); 31 | 32 | /** 33 | * 分页列表 34 | * @param pageModel 分页参数 35 | * @param administratorId 管理员ID 36 | * @return 37 | */ 38 | RPage queryPage(PageModel pageModel, Long administratorId); 39 | 40 | /** 41 | * 删除企业日志 42 | * @param enterpriseId 43 | */ 44 | void delete(Long enterpriseId); 45 | 46 | /** 47 | * 清空操作日志表 48 | */ 49 | void truncate(); 50 | 51 | /** 52 | * 查询最近登录量 53 | * @param day 天数 54 | * @return 55 | */ 56 | List queryVisits(Integer day); 57 | 58 | } 59 | -------------------------------------------------------------------------------- /slipper-service/src/main/java/com/slipper/service/modules/log/login/service/impl/LoginLogServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.slipper.service.modules.log.login.service.impl; 2 | 3 | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 4 | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 5 | import com.slipper.common.utils.Query; 6 | import com.slipper.common.utils.RPage; 7 | import com.slipper.service.model.PageModel; 8 | import com.slipper.service.modules.log.login.dao.LoginLogDao; 9 | import com.slipper.service.modules.log.login.entity.LoginLogEntity; 10 | import com.slipper.service.modules.log.login.model.form.LoginLogPageDateForm; 11 | import com.slipper.service.modules.log.login.model.vo.LoginLogVO; 12 | import com.slipper.service.modules.log.login.model.vo.LoginLogSimplifyVO; 13 | import com.slipper.service.modules.log.login.model.vo.VisitsVO; 14 | import com.slipper.service.modules.log.login.service.LoginLogService; 15 | import org.springframework.stereotype.Service; 16 | 17 | import java.util.List; 18 | 19 | /** 20 | * 登录日志 21 | * 22 | * @author gumingchen 23 | * @email 1240235512@qq.com 24 | * @date 1995-08-30 00:00:00 25 | */ 26 | @Service("loginLogService") 27 | public class LoginLogServiceImpl extends ServiceImpl implements LoginLogService { 28 | 29 | @Override 30 | public RPage queryPage(LoginLogPageDateForm pageDateForm, Long enterpriseId) { 31 | Page page = new Query().getPage(pageDateForm.getCurrent(), pageDateForm.getSize()); 32 | pageDateForm.setId(enterpriseId); 33 | return new RPage<>( 34 | baseMapper.queryPage( 35 | page, 36 | pageDateForm.getName(), 37 | pageDateForm.getStart(), 38 | pageDateForm.getEnd(), 39 | pageDateForm.getId() 40 | ) 41 | ); 42 | } 43 | 44 | @Override 45 | public RPage queryPage(PageModel pageModel, Long administratorId) { 46 | Page page = new Query().getPage(pageModel.getCurrent(), pageModel.getSize()); 47 | 48 | return new RPage<>( 49 | baseMapper.queryPageByAdministrator(page,administratorId ) 50 | ); 51 | } 52 | 53 | @Override 54 | public void delete(Long enterpriseId) { 55 | baseMapper.delete(enterpriseId); 56 | } 57 | 58 | @Override 59 | public void truncate() { 60 | baseMapper.truncate(); 61 | } 62 | 63 | @Override 64 | public List queryVisits(Integer day) { 65 | return baseMapper.queryVisits(day); 66 | } 67 | } 68 | -------------------------------------------------------------------------------- /slipper-service/src/main/java/com/slipper/service/modules/log/operation/dao/OperationLogDao.java: -------------------------------------------------------------------------------- 1 | package com.slipper.service.modules.log.operation.dao; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.baomidou.mybatisplus.core.metadata.IPage; 5 | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 6 | import com.slipper.service.modules.log.operation.entity.OperationLogEntity; 7 | import com.slipper.service.modules.log.operation.model.vo.OperationLogVO; 8 | import com.slipper.service.modules.log.operation.model.vo.OperationLogSimplifyVO; 9 | import org.apache.ibatis.annotations.Mapper; 10 | import org.apache.ibatis.annotations.Param; 11 | 12 | /** 13 | * 操作日志 14 | * 15 | * @author gumingchen 16 | * @email 1240235512@qq.com 17 | * @date 1995-08-30 00:00:00 18 | */ 19 | @Mapper 20 | public interface OperationLogDao extends BaseMapper { 21 | 22 | /** 23 | * 分页列表 24 | * @param page 分页参数 25 | * @param operation 操作 26 | * @param name 昵称 / 用户名 27 | * @param start 开始时间 28 | * @param end 结束时间 29 | * @param enterpriseId 企业ID 30 | * @return 31 | */ 32 | IPage queryPage( 33 | Page page, 34 | @Param("operation") String operation, 35 | @Param("name") String name, 36 | @Param("start") String start, 37 | @Param("end") String end, 38 | @Param("enterpriseId") Long enterpriseId 39 | ); 40 | 41 | /** 42 | * 分页列表 43 | * @param page 分页参数 44 | * @param administratorId 管理员ID 45 | * @return 46 | */ 47 | IPage queryPageByAdministrator(Page page, @Param("administratorId") Long administratorId); 48 | 49 | /** 50 | * 删除 51 | * @param enterpriseId 52 | */ 53 | void delete(@Param("enterpriseId") Long enterpriseId); 54 | 55 | /** 56 | * 清空操作日志表 57 | */ 58 | void truncate(); 59 | 60 | } 61 | -------------------------------------------------------------------------------- /slipper-service/src/main/java/com/slipper/service/modules/log/operation/entity/OperationLogEntity.java: -------------------------------------------------------------------------------- 1 | package com.slipper.service.modules.log.operation.entity; 2 | 3 | import com.baomidou.mybatisplus.annotation.*; 4 | import com.fasterxml.jackson.annotation.JsonProperty; 5 | import lombok.Data; 6 | 7 | import java.io.Serializable; 8 | import java.util.Date; 9 | 10 | /** 11 | * 操作日志 12 | * 13 | * @author gumingchen 14 | * @email 1240235512@qq.com 15 | * @date 1995-08-30 00:00:00 16 | */ 17 | @Data 18 | @TableName("operation_log") 19 | public class OperationLogEntity implements Serializable { 20 | private static final long serialVersionUID = 1L; 21 | 22 | @TableId(value = "id", type = IdType.AUTO) 23 | private Long id; 24 | /** 25 | * 操作 26 | */ 27 | private String operation; 28 | /** 29 | * 请求URL 30 | */ 31 | private String url; 32 | /** 33 | * 请求方式 34 | */ 35 | private String method; 36 | /** 37 | * 请求参数 38 | */ 39 | @JsonProperty("request_data") 40 | private String requestData; 41 | /** 42 | * 响应参数 43 | */ 44 | @JsonProperty("response_data") 45 | private String responseData; 46 | /** 47 | * IP地址 48 | */ 49 | private String ip; 50 | /** 51 | * 地址 52 | */ 53 | private String address; 54 | /** 55 | * 浏览器 56 | */ 57 | private String browser; 58 | /** 59 | * 操作系统 60 | */ 61 | @JsonProperty("operating_system") 62 | private String operatingSystem; 63 | /** 64 | * 用户代理 65 | */ 66 | private String agent; 67 | /** 68 | * 执行时长 69 | */ 70 | private Long times; 71 | /** 72 | * 完整方法名 73 | */ 74 | @JsonProperty("method_name") 75 | private String methodName; 76 | /** 77 | * 创建者 78 | */ 79 | private Long creator; 80 | /** 81 | * 创建时间 82 | */ 83 | @JsonProperty("created_at") 84 | private Date createdAt; 85 | /** 86 | * 是否删除:0-否 1-是 87 | */ 88 | @TableLogic 89 | private Integer deleted; 90 | } 91 | -------------------------------------------------------------------------------- /slipper-service/src/main/java/com/slipper/service/modules/log/operation/model/form/OperationLogPageDateForm.java: -------------------------------------------------------------------------------- 1 | package com.slipper.service.modules.log.operation.model.form; 2 | 3 | import com.slipper.service.model.PageDateModel; 4 | import lombok.Data; 5 | 6 | import java.io.Serializable; 7 | 8 | /** 9 | * 操作日志分页参数 10 | * 11 | * @author gumingchen 12 | * @email 1240235512@qq.com 13 | * @date 1995-08-30 00:00:00 14 | */ 15 | @Data 16 | public class OperationLogPageDateForm extends PageDateModel implements Serializable { 17 | private static final long serialVersionUID = 1L; 18 | /** 19 | * 操作 20 | */ 21 | public String operation; 22 | /** 23 | * 管理员 昵称 / 帐号 24 | */ 25 | public String name; 26 | /** 27 | * 企业ID 28 | */ 29 | public Long id; 30 | } 31 | -------------------------------------------------------------------------------- /slipper-service/src/main/java/com/slipper/service/modules/log/operation/model/vo/OperationLogSimplifyVO.java: -------------------------------------------------------------------------------- 1 | package com.slipper.service.modules.log.operation.model.vo; 2 | 3 | import com.fasterxml.jackson.annotation.JsonProperty; 4 | import lombok.Data; 5 | 6 | import java.io.Serializable; 7 | import java.util.Date; 8 | 9 | /** 10 | * 当前管理员操作日志 11 | * 12 | * @author gumingchen 13 | * @email 1240235512@qq.com 14 | * @date 1995-08-30 00:00:00 15 | */ 16 | @Data 17 | public class OperationLogSimplifyVO implements Serializable { 18 | private static final long serialVersionUID = 1L; 19 | 20 | public Long id; 21 | /** 22 | * 操作 23 | */ 24 | private String operation; 25 | /** 26 | * IP地址 27 | */ 28 | public String ip; 29 | /** 30 | * 地址 31 | */ 32 | public String address; 33 | /** 34 | * 浏览器 35 | */ 36 | public String browser; 37 | /** 38 | * 操作系统 39 | */ 40 | @JsonProperty("operating_system") 41 | public String operatingSystem; 42 | /** 43 | * 创建时间 44 | */ 45 | @JsonProperty("created_at") 46 | public Date createdAt; 47 | } 48 | -------------------------------------------------------------------------------- /slipper-service/src/main/java/com/slipper/service/modules/log/operation/model/vo/OperationLogVO.java: -------------------------------------------------------------------------------- 1 | package com.slipper.service.modules.log.operation.model.vo; 2 | 3 | import com.fasterxml.jackson.annotation.JsonProperty; 4 | import lombok.Data; 5 | 6 | import java.io.Serializable; 7 | import java.util.Date; 8 | 9 | /** 10 | * 操作日志 用户信息 11 | * 12 | * @author gumingchen 13 | * @email 1240235512@qq.com 14 | * @date 1995-08-30 00:00:00 15 | */ 16 | @Data 17 | public class OperationLogVO implements Serializable { 18 | private static final long serialVersionUID = 1L; 19 | 20 | public Long id; 21 | /** 22 | * 操作 23 | */ 24 | public String operation; 25 | /** 26 | * 请求URL 27 | */ 28 | public String url; 29 | /** 30 | * 请求方式 31 | */ 32 | public String method; 33 | /** 34 | * 请求参数 35 | */ 36 | @JsonProperty("request_data") 37 | public String requestData; 38 | /** 39 | * 响应参数 40 | */ 41 | @JsonProperty("response_data") 42 | public String responseData; 43 | /** 44 | * IP地址 45 | */ 46 | public String ip; 47 | /** 48 | * 地址 49 | */ 50 | public String address; 51 | /** 52 | * 浏览器 53 | */ 54 | public String browser; 55 | /** 56 | * 操作系统 57 | */ 58 | @JsonProperty("operating_system") 59 | public String operatingSystem; 60 | /** 61 | * 用户代理 62 | */ 63 | public String agent; 64 | /** 65 | * 执行时长 66 | */ 67 | public Long times; 68 | /** 69 | * 完整方法名 70 | */ 71 | @JsonProperty("method_name") 72 | public String methodName; 73 | /** 74 | * 创建者 75 | */ 76 | public Long creator; 77 | /** 78 | * 头像 79 | */ 80 | public String avatar; 81 | /** 82 | * 用户名 83 | */ 84 | public String username; 85 | /** 86 | * 昵称 87 | */ 88 | public String nickname; 89 | /** 90 | * 创建时间 91 | */ 92 | @JsonProperty("created_at") 93 | public Date createdAt; 94 | } 95 | -------------------------------------------------------------------------------- /slipper-service/src/main/java/com/slipper/service/modules/log/operation/service/OperationLogService.java: -------------------------------------------------------------------------------- 1 | package com.slipper.service.modules.log.operation.service; 2 | 3 | import com.baomidou.mybatisplus.extension.service.IService; 4 | import com.slipper.common.utils.RPage; 5 | import com.slipper.service.model.PageModel; 6 | import com.slipper.service.modules.log.operation.entity.OperationLogEntity; 7 | import com.slipper.service.modules.log.operation.model.form.OperationLogPageDateForm; 8 | import com.slipper.service.modules.log.operation.model.vo.OperationLogVO; 9 | import com.slipper.service.modules.log.operation.model.vo.OperationLogSimplifyVO; 10 | 11 | /** 12 | * 操作日志 13 | * 14 | * @author gumingchen 15 | * @email 1240235512@qq.com 16 | * @date 1995-08-30 00:00:00 17 | */ 18 | public interface OperationLogService extends IService { 19 | 20 | /** 21 | * 分页列表 22 | * @param pageDateForm 分页参数 23 | * @param enterpriseId 企业ID 24 | * @return 25 | */ 26 | RPage queryPage(OperationLogPageDateForm pageDateForm, Long enterpriseId); 27 | 28 | /** 29 | * 分页列表 30 | * @param pageModel 分页参数 31 | * @param administratorId 管理员ID 32 | * @return 33 | */ 34 | RPage queryPage(PageModel pageModel, Long administratorId); 35 | 36 | /** 37 | * 删除企业日志 38 | * @param enterpriseId 39 | */ 40 | void delete(Long enterpriseId); 41 | 42 | /** 43 | * 清空操作日志表 44 | */ 45 | void truncate(); 46 | 47 | } 48 | -------------------------------------------------------------------------------- /slipper-service/src/main/java/com/slipper/service/modules/log/operation/service/impl/OperationLogServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.slipper.service.modules.log.operation.service.impl; 2 | 3 | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 4 | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 5 | import com.slipper.common.utils.Query; 6 | import com.slipper.common.utils.RPage; 7 | import com.slipper.service.model.PageModel; 8 | import com.slipper.service.modules.log.operation.dao.OperationLogDao; 9 | import com.slipper.service.modules.log.operation.entity.OperationLogEntity; 10 | import com.slipper.service.modules.log.operation.model.form.OperationLogPageDateForm; 11 | import com.slipper.service.modules.log.operation.model.vo.OperationLogVO; 12 | import com.slipper.service.modules.log.operation.model.vo.OperationLogSimplifyVO; 13 | import com.slipper.service.modules.log.operation.service.OperationLogService; 14 | import org.springframework.stereotype.Service; 15 | 16 | /** 17 | * 操作日志 18 | * 19 | * @author gumingchen 20 | * @email 1240235512@qq.com 21 | * @date 1995-08-30 00:00:00 22 | */ 23 | @Service("operationLogService") 24 | public class OperationLogServiceImpl extends ServiceImpl implements OperationLogService { 25 | 26 | @Override 27 | public RPage queryPage(OperationLogPageDateForm pageDateForm, Long enterpriseId) { 28 | Page page = new Query().getPage(pageDateForm.getCurrent(), pageDateForm.getSize()); 29 | pageDateForm.setId(enterpriseId); 30 | return new RPage<>( 31 | baseMapper.queryPage( 32 | page, 33 | pageDateForm.getOperation(), 34 | pageDateForm.getName(), 35 | pageDateForm.getStart(), 36 | pageDateForm.getEnd(), 37 | pageDateForm.getId() 38 | ) 39 | ); 40 | } 41 | 42 | @Override 43 | public RPage queryPage(PageModel pageModel, Long administratorId) { 44 | Page page = new Query().getPage(pageModel.getCurrent(), pageModel.getSize()); 45 | 46 | return new RPage<>( 47 | baseMapper.queryPageByAdministrator(page,administratorId ) 48 | ); 49 | } 50 | 51 | @Override 52 | public void delete(Long enterpriseId) { 53 | baseMapper.delete(enterpriseId); 54 | } 55 | 56 | @Override 57 | public void truncate() { 58 | baseMapper.truncate(); 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /slipper-service/src/main/java/com/slipper/service/modules/login/model/form/BackstageLoginForm.java: -------------------------------------------------------------------------------- 1 | package com.slipper.service.modules.login.model.form; 2 | 3 | import lombok.Data; 4 | 5 | import javax.validation.constraints.NotBlank; 6 | import java.io.Serializable; 7 | 8 | /** 9 | * 后台登录 10 | * 11 | * @author gumingchen 12 | * @email 1240235512@qq.com 13 | * @date 1995-08-30 00:00:00 14 | */ 15 | @Data 16 | public class BackstageLoginForm implements Serializable { 17 | private static final long serialVersionUID = 1L; 18 | 19 | /** 20 | * 用户名 21 | */ 22 | @NotBlank(message = "帐号不能为空") 23 | private String username; 24 | /** 25 | * 密码 26 | */ 27 | @NotBlank(message = "密码不能为空") 28 | private String password; 29 | /** 30 | * UUID 31 | */ 32 | @NotBlank(message = "uuid不能为空") 33 | private String uuid; 34 | /** 35 | * 验证码 36 | */ 37 | @NotBlank(message = "code不能为空") 38 | private String code; 39 | } 40 | -------------------------------------------------------------------------------- /slipper-service/src/main/java/com/slipper/service/modules/login/service/LoginService.java: -------------------------------------------------------------------------------- 1 | package com.slipper.service.modules.login.service; 2 | 3 | import com.slipper.service.modules.login.model.form.BackstageLoginForm; 4 | import com.slipper.service.modules.token.entity.TokenEntity; 5 | 6 | /** 7 | * 登录 8 | * 9 | * @author gumingchen 10 | * @email 1240235512@qq.com 11 | * @date 1995-08-30 00:00:00 12 | */ 13 | public interface LoginService { 14 | 15 | /** 16 | * 后台登录 17 | * @param backstageLoginForm 登录参数 18 | * @return 19 | */ 20 | TokenEntity backstageLogin(BackstageLoginForm backstageLoginForm); 21 | 22 | /** 23 | * 后台登出 24 | * @param id 管理员ID 25 | */ 26 | void backstageLogout(Long id); 27 | } 28 | -------------------------------------------------------------------------------- /slipper-service/src/main/java/com/slipper/service/modules/menu/dao/MenuDao.java: -------------------------------------------------------------------------------- 1 | package com.slipper.service.modules.menu.dao; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.slipper.service.modules.menu.entity.MenuEntity; 5 | import com.slipper.service.modules.menu.model.vo.MenuSimplifyTreeVO; 6 | import com.slipper.service.modules.menu.model.vo.MenuTreeVO; 7 | import org.apache.ibatis.annotations.Mapper; 8 | import org.apache.ibatis.annotations.Param; 9 | 10 | import java.util.List; 11 | 12 | /** 13 | * 菜单权限 14 | * 15 | * @author gumingchen 16 | * @email 1240235512@qq.com 17 | * @date 1995-08-30 00:00:00 18 | */ 19 | @Mapper 20 | public interface MenuDao extends BaseMapper { 21 | /** 22 | * 查询所有菜单 树形结构 23 | * @return 24 | */ 25 | List queryList(); 26 | /** 27 | * 查询所有菜单 只包括 ID 中英文名称 父级ID 28 | * @return 29 | */ 30 | List querySelectList(); 31 | 32 | /** 33 | * 批量修改排序 34 | * @param list 35 | */ 36 | void updateSortBatch(@Param("list") List list); 37 | } 38 | -------------------------------------------------------------------------------- /slipper-service/src/main/java/com/slipper/service/modules/menu/entity/MenuEntity.java: -------------------------------------------------------------------------------- 1 | package com.slipper.service.modules.menu.entity; 2 | 3 | import com.baomidou.mybatisplus.annotation.*; 4 | import com.fasterxml.jackson.annotation.JsonProperty; 5 | import com.slipper.common.validator.group.Create; 6 | import com.slipper.common.validator.group.Update; 7 | import lombok.Data; 8 | 9 | import javax.validation.constraints.NotBlank; 10 | import javax.validation.constraints.NotNull; 11 | import java.io.Serializable; 12 | import java.util.Date; 13 | 14 | /** 15 | * 菜单权限 16 | * 17 | * @author gumingchen 18 | * @email 1240235512@qq.com 19 | * @date 1995-08-30 00:00:00 20 | */ 21 | @Data 22 | @TableName("menu") 23 | public class MenuEntity implements Serializable { 24 | private static final long serialVersionUID = 1L; 25 | 26 | @NotNull(message = "ID不能为空", groups = Update.class) 27 | @TableId(value = "id", type = IdType.AUTO) 28 | private Long id; 29 | /** 30 | * 中文名称 31 | */ 32 | @NotBlank(message = "中文名称不能为空", groups = {Create.class, Update.class}) 33 | @JsonProperty("name_cn") 34 | private String nameCn; 35 | /** 36 | * 英文名称 37 | */ 38 | @JsonProperty("name_en") 39 | private String nameEn; 40 | /** 41 | * 路由 path 属性值 若为空则按照url路径处理 42 | */ 43 | private String path; 44 | /** 45 | * 路由 name 属性值 若为空则按照url路径处理 46 | */ 47 | private String name; 48 | /** 49 | * 菜单路由 或 URL 50 | */ 51 | private String url; 52 | /** 53 | * 授权(多个用逗号分隔,如:user:list,user:create) 54 | */ 55 | private String permission; 56 | /** 57 | * 类型:0-目录 1-菜单 2-按钮 3-iframe 4-外链 58 | */ 59 | private Integer type; 60 | /** 61 | * 图标 62 | */ 63 | private String icon; 64 | /** 65 | * 是否在菜单显示:0-否 1-是 66 | */ 67 | @TableField("`show`") 68 | private Integer show; 69 | /** 70 | * 是否显示在tab页签:0-否 1-是 71 | */ 72 | private Integer tab; 73 | /** 74 | * 是否支持tab页签多开:0-否 1-是 75 | */ 76 | private Integer multiple; 77 | /** 78 | * 是否支持缓存:0-否 1-是 79 | */ 80 | private Integer keepalive; 81 | /** 82 | * 排序 83 | */ 84 | private Integer sort; 85 | /** 86 | * 父ID 87 | */ 88 | @NotNull(message = "上级菜单不能为空", groups = {Create.class, Update.class}) 89 | @JsonProperty("parent_id") 90 | private Long parentId; 91 | /** 92 | * 创建者 93 | */ 94 | private Long creator; 95 | /** 96 | * 创建时间 97 | */ 98 | @JsonProperty("created_at") 99 | private Date createdAt; 100 | /** 101 | * 更新者 102 | */ 103 | private Long updater; 104 | /** 105 | * 更新时间 106 | */ 107 | @JsonProperty("updated_at") 108 | private Date updatedAt; 109 | /** 110 | * 是否删除:0-否 1-是 111 | */ 112 | @TableLogic 113 | private Integer deleted; 114 | } 115 | -------------------------------------------------------------------------------- /slipper-service/src/main/java/com/slipper/service/modules/menu/model/form/MenuCreateOrUpdateForm.java: -------------------------------------------------------------------------------- 1 | package com.slipper.service.modules.menu.model.form; 2 | 3 | import com.baomidou.mybatisplus.annotation.IdType; 4 | import com.baomidou.mybatisplus.annotation.TableField; 5 | import com.baomidou.mybatisplus.annotation.TableId; 6 | import com.baomidou.mybatisplus.annotation.TableLogic; 7 | import com.fasterxml.jackson.annotation.JsonProperty; 8 | import com.slipper.common.validator.group.Create; 9 | import com.slipper.common.validator.group.Update; 10 | import lombok.Data; 11 | 12 | import javax.validation.constraints.NotBlank; 13 | import javax.validation.constraints.NotNull; 14 | import javax.validation.constraints.Size; 15 | import java.io.Serializable; 16 | import java.util.Date; 17 | import java.util.List; 18 | 19 | /** 20 | * 菜单 新增 编辑 参数 21 | * 22 | * @author gumingchen 23 | * @email 1240235512@qq.com 24 | * @date 1995-08-30 00:00:00 25 | */ 26 | @Data 27 | public class MenuCreateOrUpdateForm implements Serializable { 28 | private static final long serialVersionUID = 1L; 29 | 30 | @NotNull(message = "ID不能为空", groups = Update.class) 31 | @TableId(value = "id", type = IdType.AUTO) 32 | private Long id; 33 | /** 34 | * 中文名称 35 | */ 36 | @NotBlank(message = "中文名称不能为空", groups = {Create.class, Update.class}) 37 | @JsonProperty("name_cn") 38 | private String nameCn; 39 | /** 40 | * 英文名称 41 | */ 42 | @JsonProperty("name_en") 43 | private String nameEn; 44 | /** 45 | * 路由 path 属性值 若为空则按照url路径处理 46 | */ 47 | private String path; 48 | /** 49 | * 路由 name 属性值 若为空则按照url路径处理 50 | */ 51 | private String name; 52 | /** 53 | * 菜单路由 或 URL 54 | */ 55 | private String url; 56 | /** 57 | * 授权(多个用逗号分隔,如:user:list,user:create) 58 | */ 59 | private String permission; 60 | /** 61 | * 类型:0-目录 1-菜单 2-按钮 3-iframe 4-外链 62 | */ 63 | @NotNull(message = "类型不能为空") 64 | private Integer type; 65 | /** 66 | * 图标 67 | */ 68 | private String icon; 69 | /** 70 | * 是否在菜单显示:0-否 1-是 71 | */ 72 | private Integer show; 73 | /** 74 | * 是否显示在tab页签:0-否 1-是 75 | */ 76 | private Integer tab; 77 | /** 78 | * 是否支持tab页签多开:0-否 1-是 79 | */ 80 | private Integer multiple; 81 | /** 82 | * 是否支持缓存:0-否 1-是 83 | */ 84 | private Integer keepalive; 85 | /** 86 | * 排序 87 | */ 88 | private Integer sort; 89 | /** 90 | * 父ID 91 | */ 92 | @NotNull(message = "上级ID不能为空", groups = {Create.class, Update.class}) 93 | @JsonProperty("parent_id") 94 | private Long parentId; 95 | } 96 | -------------------------------------------------------------------------------- /slipper-service/src/main/java/com/slipper/service/modules/menu/model/form/MenuUpdateParentAndSortForm.java: -------------------------------------------------------------------------------- 1 | package com.slipper.service.modules.menu.model.form; 2 | 3 | import com.baomidou.mybatisplus.annotation.IdType; 4 | import com.baomidou.mybatisplus.annotation.TableId; 5 | import com.fasterxml.jackson.annotation.JsonProperty; 6 | import lombok.Data; 7 | 8 | import javax.validation.constraints.NotNull; 9 | import javax.validation.constraints.Size; 10 | import java.io.Serializable; 11 | import java.util.List; 12 | 13 | /** 14 | * 菜单 更新 父级 和 排序 参数 15 | * 16 | * @author gumingchen 17 | * @email 1240235512@qq.com 18 | * @date 1995-08-30 00:00:00 19 | */ 20 | @Data 21 | public class MenuUpdateParentAndSortForm implements Serializable { 22 | private static final long serialVersionUID = 1L; 23 | 24 | @NotNull(message = "ID不能为空") 25 | @TableId(value = "id", type = IdType.AUTO) 26 | private Long id; 27 | /** 28 | * 父ID 29 | */ 30 | @NotNull(message = "父级ID不能为空") 31 | @JsonProperty("parent_id") 32 | private Long parentId; 33 | /** 34 | * 排序ID 当前菜单同级的菜单ID数组 35 | */ 36 | @Size(min = 1, message = "至少有一个排序ID") 37 | @JsonProperty("sort_ids") 38 | private List sortIds; 39 | } 40 | -------------------------------------------------------------------------------- /slipper-service/src/main/java/com/slipper/service/modules/menu/model/vo/MenuSimplifyTreeVO.java: -------------------------------------------------------------------------------- 1 | package com.slipper.service.modules.menu.model.vo; 2 | 3 | import com.baomidou.mybatisplus.annotation.IdType; 4 | import com.baomidou.mybatisplus.annotation.TableId; 5 | import com.fasterxml.jackson.annotation.JsonProperty; 6 | import lombok.Data; 7 | 8 | import java.io.Serializable; 9 | import java.util.List; 10 | 11 | /** 12 | * 菜单 只包括 ID 中英文名称 父级ID 13 | * 14 | * @author gumingchen 15 | * @email 1240235512@qq.com 16 | * @date 1995-08-30 00:00:00 17 | */ 18 | @Data 19 | public class MenuSimplifyTreeVO implements Serializable { 20 | private static final long serialVersionUID = 1L; 21 | 22 | @TableId(value = "id", type = IdType.AUTO) 23 | private Long id; 24 | /** 25 | * 中文名称 26 | */ 27 | @JsonProperty("name_cn") 28 | private String nameCn; 29 | /** 30 | * 英文名称 31 | */ 32 | @JsonProperty("name_en") 33 | private String nameEn; 34 | /** 35 | * 类型:0-目录 1-菜单 2-按钮 3-iframe 4-外链 36 | */ 37 | private Integer type; 38 | /** 39 | * 父级ID 40 | */ 41 | @JsonProperty("parent_id") 42 | private Long parentId; 43 | /** 44 | * 子集 45 | */ 46 | private List children; 47 | } 48 | -------------------------------------------------------------------------------- /slipper-service/src/main/java/com/slipper/service/modules/menu/model/vo/MenuTreeVO.java: -------------------------------------------------------------------------------- 1 | package com.slipper.service.modules.menu.model.vo; 2 | 3 | import com.baomidou.mybatisplus.annotation.*; 4 | import com.fasterxml.jackson.annotation.JsonProperty; 5 | import lombok.Data; 6 | 7 | import java.io.Serializable; 8 | import java.util.Date; 9 | import java.util.List; 10 | 11 | /** 12 | * 菜单权限 树形 13 | * 14 | * @author gumingchen 15 | * @email 1240235512@qq.com 16 | * @date 1995-08-30 00:00:00 17 | */ 18 | @Data 19 | public class MenuTreeVO implements Serializable { 20 | private static final long serialVersionUID = 1L; 21 | 22 | private Long id; 23 | /** 24 | * 中文名称 25 | */ 26 | @JsonProperty("name_cn") 27 | private String nameCn; 28 | /** 29 | * 英文名称 30 | */ 31 | @JsonProperty("name_en") 32 | private String nameEn; 33 | /** 34 | * 路由 path 属性值 若为空则按照url路径处理 35 | */ 36 | private String path; 37 | /** 38 | * 路由 name 属性值 若为空则按照url路径处理 39 | */ 40 | private String name; 41 | /** 42 | * 菜单路由 或 URL 43 | */ 44 | private String url; 45 | /** 46 | * 授权(多个用逗号分隔,如:user:list,user:create) 47 | */ 48 | private String permission; 49 | /** 50 | * 类型:0-目录 1-菜单 2-按钮 3-iframe 4-外链 51 | */ 52 | private Integer type; 53 | /** 54 | * 图标 55 | */ 56 | private String icon; 57 | /** 58 | * 是否在菜单显示:0-否 1-是 59 | */ 60 | @TableField("`show`") 61 | private Integer show; 62 | /** 63 | * 是否显示在tab页签:0-否 1-是 64 | */ 65 | private Integer tab; 66 | /** 67 | * 是否支持tab页签多开:0-否 1-是 68 | */ 69 | private Integer multiple; 70 | /** 71 | * 是否支持缓存:0-否 1-是 72 | */ 73 | private Integer keepalive; 74 | /** 75 | * 排序 76 | */ 77 | private Integer sort; 78 | /** 79 | * 父ID 80 | */ 81 | @JsonProperty("parent_id") 82 | private Long parentId; 83 | /** 84 | * 创建时间 85 | */ 86 | @JsonProperty("created_at") 87 | private Date createdAt; 88 | /** 89 | * 更新时间 90 | */ 91 | @JsonProperty("updated_at") 92 | private Date updatedAt; 93 | /** 94 | * 子集 95 | */ 96 | private List children; 97 | } 98 | -------------------------------------------------------------------------------- /slipper-service/src/main/java/com/slipper/service/modules/menu/model/vo/MenuVO.java: -------------------------------------------------------------------------------- 1 | package com.slipper.service.modules.menu.model.vo; 2 | 3 | import com.baomidou.mybatisplus.annotation.*; 4 | import com.fasterxml.jackson.annotation.JsonProperty; 5 | import com.slipper.common.validator.group.Create; 6 | import com.slipper.common.validator.group.Update; 7 | import lombok.Data; 8 | 9 | import javax.validation.constraints.NotBlank; 10 | import javax.validation.constraints.NotNull; 11 | import java.io.Serializable; 12 | import java.util.Date; 13 | 14 | /** 15 | * 菜单权限 视图数据 16 | * 17 | * @author gumingchen 18 | * @email 1240235512@qq.com 19 | * @date 1995-08-30 00:00:00 20 | */ 21 | @Data 22 | public class MenuVO implements Serializable { 23 | private static final long serialVersionUID = 1L; 24 | 25 | private Long id; 26 | /** 27 | * 中文名称 28 | */ 29 | @JsonProperty("name_cn") 30 | private String nameCn; 31 | /** 32 | * 英文名称 33 | */ 34 | @JsonProperty("name_en") 35 | private String nameEn; 36 | /** 37 | * 路由 path 属性值 若为空则按照url路径处理 38 | */ 39 | private String path; 40 | /** 41 | * 路由 name 属性值 若为空则按照url路径处理 42 | */ 43 | private String name; 44 | /** 45 | * 菜单路由 或 URL 46 | */ 47 | private String url; 48 | /** 49 | * 授权(多个用逗号分隔,如:user:list,user:create) 50 | */ 51 | private String permission; 52 | /** 53 | * 类型:0-目录 1-菜单 2-按钮 3-iframe 4-外链 54 | */ 55 | private Integer type; 56 | /** 57 | * 图标 58 | */ 59 | private String icon; 60 | /** 61 | * 是否在菜单显示:0-否 1-是 62 | */ 63 | @TableField("`show`") 64 | private Integer show; 65 | /** 66 | * 是否显示在tab页签:0-否 1-是 67 | */ 68 | private Integer tab; 69 | /** 70 | * 是否支持tab页签多开:0-否 1-是 71 | */ 72 | private Integer multiple; 73 | /** 74 | * 是否支持缓存:0-否 1-是 75 | */ 76 | private Integer keepalive; 77 | /** 78 | * 排序 79 | */ 80 | private Integer sort; 81 | /** 82 | * 父ID 83 | */ 84 | @JsonProperty("parent_id") 85 | private Long parentId; 86 | /** 87 | * 创建时间 88 | */ 89 | @JsonProperty("created_at") 90 | private Date createdAt; 91 | /** 92 | * 更新时间 93 | */ 94 | @JsonProperty("updated_at") 95 | private Date updatedAt; 96 | } 97 | -------------------------------------------------------------------------------- /slipper-service/src/main/java/com/slipper/service/modules/menu/service/MenuService.java: -------------------------------------------------------------------------------- 1 | package com.slipper.service.modules.menu.service; 2 | 3 | import com.baomidou.mybatisplus.extension.service.IService; 4 | import com.slipper.service.modules.menu.entity.MenuEntity; 5 | import com.slipper.service.modules.menu.model.form.MenuCreateOrUpdateForm; 6 | import com.slipper.service.modules.menu.model.form.MenuUpdateParentAndSortForm; 7 | import com.slipper.service.modules.menu.model.vo.MenuSimplifyTreeVO; 8 | import com.slipper.service.modules.menu.model.vo.MenuTreeVO; 9 | 10 | import java.util.List; 11 | 12 | /** 13 | * 菜单权限 14 | * 15 | * @author gumingchen 16 | * @email 1240235512@qq.com 17 | * @date 1995-08-30 00:00:00 18 | */ 19 | public interface MenuService extends IService { 20 | 21 | /** 22 | * 查询所有菜单 树形结构 23 | * @return 24 | */ 25 | List queryList(); 26 | 27 | /** 28 | * 查询所有菜单 只包括 ID 中英文名称 父级ID 树形结构 29 | * @return 30 | */ 31 | List querySelectList(); 32 | 33 | /** 34 | * 菜单创建 35 | * @param createOrUpdateForm 参数 36 | * @param administratorId 管理员ID 37 | * @return 38 | */ 39 | Long create(MenuCreateOrUpdateForm createOrUpdateForm, Long administratorId); 40 | 41 | /** 42 | * 菜单更新 43 | * @param createOrUpdateForm 参数 44 | * @param administratorId 管理员ID 45 | */ 46 | void update(MenuCreateOrUpdateForm createOrUpdateForm, Long administratorId); 47 | 48 | /** 49 | * 菜单删除 50 | * @param id 51 | */ 52 | void delete(Long id); 53 | 54 | /** 55 | * 修改菜单 父级 和 排序 56 | * @param updateParentAndSortForm 参数 57 | * @param administratorId 管理员ID 58 | */ 59 | void updateParentAndSort(MenuUpdateParentAndSortForm updateParentAndSortForm, Long administratorId); 60 | } 61 | -------------------------------------------------------------------------------- /slipper-service/src/main/java/com/slipper/service/modules/role/dao/RoleDao.java: -------------------------------------------------------------------------------- 1 | package com.slipper.service.modules.role.dao; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.slipper.service.modules.role.entity.RoleEntity; 5 | import com.slipper.service.modules.role.model.vo.RoleInfoVO; 6 | import org.apache.ibatis.annotations.Mapper; 7 | import org.apache.ibatis.annotations.Param; 8 | 9 | /** 10 | * 角色 11 | * 12 | * @author gumingchen 13 | * @email 1240235512@qq.com 14 | * @date 1995-08-30 00:00:00 15 | */ 16 | @Mapper 17 | public interface RoleDao extends BaseMapper { 18 | 19 | /** 20 | * 信息 21 | * @param id 22 | * @return 23 | */ 24 | RoleInfoVO queryInfo(@Param("id") Long id); 25 | } 26 | -------------------------------------------------------------------------------- /slipper-service/src/main/java/com/slipper/service/modules/role/dao/RoleMenuDao.java: -------------------------------------------------------------------------------- 1 | package com.slipper.service.modules.role.dao; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.slipper.service.modules.role.entity.RoleMenuEntity; 5 | import org.apache.ibatis.annotations.Mapper; 6 | import org.apache.ibatis.annotations.Param; 7 | 8 | import java.util.List; 9 | 10 | /** 11 | * 角色-菜单 12 | * 13 | * @author gumingchen 14 | * @email 1240235512@qq.com 15 | * @date 1995-08-30 00:00:00 16 | */ 17 | @Mapper 18 | public interface RoleMenuDao extends BaseMapper { 19 | 20 | /** 21 | * 批量创建 22 | * @param roleId 角色ID 23 | * @param enterpriseMenuIds 企业菜单ID 24 | */ 25 | void createBatch(@Param("roleId") Long roleId, @Param("enterpriseMenuIds") List enterpriseMenuIds); 26 | } 27 | -------------------------------------------------------------------------------- /slipper-service/src/main/java/com/slipper/service/modules/role/entity/RoleEntity.java: -------------------------------------------------------------------------------- 1 | package com.slipper.service.modules.role.entity; 2 | 3 | import com.baomidou.mybatisplus.annotation.*; 4 | import com.fasterxml.jackson.annotation.JsonProperty; 5 | import com.slipper.common.validator.group.Create; 6 | import com.slipper.common.validator.group.Update; 7 | import lombok.AllArgsConstructor; 8 | import lombok.Data; 9 | import lombok.NoArgsConstructor; 10 | 11 | import javax.validation.constraints.NotBlank; 12 | import javax.validation.constraints.NotNull; 13 | import java.io.Serializable; 14 | import java.util.Date; 15 | 16 | /** 17 | * 角色 18 | * 19 | * @author gumingchen 20 | * @email 1240235512@qq.com 21 | * @date 1995-08-30 00:00:00 22 | */ 23 | @Data 24 | @TableName("role") 25 | public class RoleEntity implements Serializable { 26 | private static final long serialVersionUID = 1L; 27 | 28 | @NotNull(message = "ID不能为空", groups = Update.class) 29 | @TableId(value = "id", type = IdType.AUTO) 30 | private Long id; 31 | /** 32 | * 名称 33 | */ 34 | @NotBlank(message = "名称不能为空", groups = {Create.class, Update.class}) 35 | private String name; 36 | /** 37 | * 备注 38 | */ 39 | private String remark; 40 | /** 41 | * 是否显示:0-否 1-是 42 | * 用于不给用户操作的角色 系统角色 43 | */ 44 | @TableField("`show`") 45 | private Integer show; 46 | /** 47 | * 企业ID 48 | */ 49 | @JsonProperty("enterprise_id") 50 | private Long enterpriseId; 51 | /** 52 | * 创建者 53 | */ 54 | private Long creator; 55 | /** 56 | * 创建时间 57 | */ 58 | @JsonProperty("created_at") 59 | private Date createdAt; 60 | /** 61 | * 更新者 62 | */ 63 | private Long updater; 64 | /** 65 | * 更新时间 66 | */ 67 | @JsonProperty("updated_at") 68 | private Date updatedAt; 69 | /** 70 | * 是否删除:0-否 1-是 71 | */ 72 | @TableLogic 73 | private Integer deleted; 74 | } 75 | -------------------------------------------------------------------------------- /slipper-service/src/main/java/com/slipper/service/modules/role/entity/RoleMenuEntity.java: -------------------------------------------------------------------------------- 1 | package com.slipper.service.modules.role.entity; 2 | 3 | import com.baomidou.mybatisplus.annotation.*; 4 | import com.fasterxml.jackson.annotation.JsonProperty; 5 | import com.slipper.common.validator.group.Create; 6 | import com.slipper.common.validator.group.Update; 7 | import lombok.Data; 8 | 9 | import javax.validation.constraints.NotBlank; 10 | import javax.validation.constraints.NotNull; 11 | import java.io.Serializable; 12 | import java.util.Date; 13 | 14 | /** 15 | * 角色-菜单 16 | * 17 | * @author gumingchen 18 | * @email 1240235512@qq.com 19 | * @date 1995-08-30 00:00:00 20 | */ 21 | @Data 22 | @TableName("role__menu") 23 | public class RoleMenuEntity implements Serializable { 24 | private static final long serialVersionUID = 1L; 25 | 26 | @TableId(value = "id", type = IdType.AUTO) 27 | private Long id; 28 | /** 29 | * 角色ID 30 | */ 31 | @JsonProperty("role_id") 32 | private Long roleId; 33 | /** 34 | * 企业-菜单ID 35 | */ 36 | @JsonProperty("enterprise_menu_id") 37 | private Long enterpriseMenuId; 38 | } 39 | -------------------------------------------------------------------------------- /slipper-service/src/main/java/com/slipper/service/modules/role/model/dto/RoleMenuDTO.java: -------------------------------------------------------------------------------- 1 | package com.slipper.service.modules.role.model.dto; 2 | 3 | import com.fasterxml.jackson.annotation.JsonProperty; 4 | import lombok.Data; 5 | 6 | import java.io.Serializable; 7 | import java.util.Date; 8 | import java.util.List; 9 | 10 | /** 11 | * 角色 菜单ID 信息 12 | * 13 | * @author gumingchen 14 | * @email 1240235512@qq.com 15 | * @date 1995-08-30 00:00:00 16 | */ 17 | @Data 18 | public class RoleMenuDTO implements Serializable { 19 | private static final long serialVersionUID = 1L; 20 | 21 | private Long id; 22 | /** 23 | * 名称 24 | */ 25 | private String name; 26 | /** 27 | * 备注 28 | */ 29 | private String remark; 30 | /** 31 | * 是否显示:0-否 1-是 32 | * 用于不给用户操作的角色 系统角色 33 | */ 34 | private Integer show; 35 | /** 36 | * 企业ID 37 | */ 38 | @JsonProperty("enterprise_id") 39 | private Long enterpriseId; 40 | /** 41 | * 创建时间 42 | */ 43 | @JsonProperty("created_at") 44 | private Date createdAt; 45 | /** 46 | * 菜单ID 47 | */ 48 | @JsonProperty("menu_ids") 49 | private List menuIds; 50 | } 51 | -------------------------------------------------------------------------------- /slipper-service/src/main/java/com/slipper/service/modules/role/model/dto/RoleSimplifyDTO.java: -------------------------------------------------------------------------------- 1 | package com.slipper.service.modules.role.model.dto; 2 | 3 | import lombok.Data; 4 | 5 | import java.io.Serializable; 6 | 7 | /** 8 | * 角色精简信息 9 | * 10 | * @author gumingchen 11 | * @email 1240235512@qq.com 12 | * @date 1995-08-30 00:00:00 13 | */ 14 | @Data 15 | public class RoleSimplifyDTO implements Serializable { 16 | private static final long serialVersionUID = 1L; 17 | 18 | private Long id; 19 | /** 20 | * 名称 21 | */ 22 | private String name; 23 | } 24 | -------------------------------------------------------------------------------- /slipper-service/src/main/java/com/slipper/service/modules/role/model/form/EnterpriseRolePageForm.java: -------------------------------------------------------------------------------- 1 | package com.slipper.service.modules.role.model.form; 2 | 3 | import com.slipper.service.model.PageModel; 4 | import lombok.Data; 5 | 6 | import java.io.Serializable; 7 | 8 | /** 9 | * 角色列表分页参数 10 | * 11 | * @author gumingchen 12 | * @email 1240235512@qq.com 13 | * @date 1995-08-30 00:00:00 14 | */ 15 | @Data 16 | public class EnterpriseRolePageForm extends PageModel implements Serializable { 17 | private static final long serialVersionUID = 1L; 18 | /** 19 | * 名称 20 | */ 21 | public String name; 22 | /** 23 | * 企业ID 24 | */ 25 | public Long id; 26 | } 27 | -------------------------------------------------------------------------------- /slipper-service/src/main/java/com/slipper/service/modules/role/model/form/RoleCreateOrUpdateForm.java: -------------------------------------------------------------------------------- 1 | package com.slipper.service.modules.role.model.form; 2 | 3 | import com.baomidou.mybatisplus.annotation.IdType; 4 | import com.baomidou.mybatisplus.annotation.TableField; 5 | import com.baomidou.mybatisplus.annotation.TableId; 6 | import com.baomidou.mybatisplus.annotation.TableLogic; 7 | import com.fasterxml.jackson.annotation.JsonProperty; 8 | import com.slipper.common.validator.group.Create; 9 | import com.slipper.common.validator.group.Update; 10 | import lombok.Data; 11 | import org.hibernate.validator.constraints.Length; 12 | 13 | import javax.validation.constraints.NotBlank; 14 | import javax.validation.constraints.NotNull; 15 | import javax.validation.constraints.Size; 16 | import java.io.Serializable; 17 | import java.util.List; 18 | 19 | /** 20 | * 角色 新增 编辑 参数 21 | * 22 | * @author gumingchen 23 | * @email 1240235512@qq.com 24 | * @date 1995-08-30 00:00:00 25 | */ 26 | @Data 27 | public class RoleCreateOrUpdateForm implements Serializable { 28 | 29 | private static final long serialVersionUID = 1L; 30 | 31 | @NotNull(message = "ID不能为空", groups = Update.class) 32 | public Long id; 33 | /** 34 | * 名称 35 | */ 36 | @NotBlank(message = "名称不能为空", groups = {Create.class, Update.class}) 37 | public String name; 38 | /** 39 | * 备注 40 | */ 41 | public String remark; 42 | /** 43 | * 企业菜单ID 44 | */ 45 | @Size(min = 1, message = "至少选择一个权限") 46 | @JsonProperty("enterprise_menu_ids") 47 | public List enterpriseMenuIds; 48 | /** 49 | * 企业ID 50 | */ 51 | @JsonProperty("enterprise_id") 52 | private Long enterpriseId; 53 | } 54 | -------------------------------------------------------------------------------- /slipper-service/src/main/java/com/slipper/service/modules/role/model/form/RolePageForm.java: -------------------------------------------------------------------------------- 1 | package com.slipper.service.modules.role.model.form; 2 | 3 | import com.slipper.service.model.PageModel; 4 | import lombok.Data; 5 | 6 | import java.io.Serializable; 7 | 8 | /** 9 | * 角色列表分页参数 10 | * 11 | * @author gumingchen 12 | * @email 1240235512@qq.com 13 | * @date 1995-08-30 00:00:00 14 | */ 15 | @Data 16 | public class RolePageForm extends PageModel implements Serializable { 17 | private static final long serialVersionUID = 1L; 18 | /** 19 | * 名称 20 | */ 21 | public String name; 22 | } 23 | -------------------------------------------------------------------------------- /slipper-service/src/main/java/com/slipper/service/modules/role/model/vo/RoleInfoVO.java: -------------------------------------------------------------------------------- 1 | package com.slipper.service.modules.role.model.vo; 2 | 3 | import com.fasterxml.jackson.annotation.JsonProperty; 4 | import lombok.Data; 5 | 6 | import java.io.Serializable; 7 | import java.util.List; 8 | 9 | /** 10 | * 角色详情 视图数据 11 | * 12 | * @author gumingchen 13 | * @email 1240235512@qq.com 14 | * @date 1995-08-30 00:00:00 15 | */ 16 | @Data 17 | public class RoleInfoVO implements Serializable { 18 | private static final long serialVersionUID = 1L; 19 | 20 | private Long id; 21 | /** 22 | * 名称 23 | */ 24 | private String name; 25 | /** 26 | * 备注 27 | */ 28 | private String remark; 29 | /** 30 | * 是否显示:0-否 1-是 31 | * 用于不给用户操作的角色 系统角色 32 | */ 33 | private Integer show; 34 | /** 35 | * 企业菜单ID 36 | */ 37 | @JsonProperty("enterprise_menu_ids") 38 | public List enterpriseMenuIds; 39 | } 40 | -------------------------------------------------------------------------------- /slipper-service/src/main/java/com/slipper/service/modules/role/model/vo/RolePageVO.java: -------------------------------------------------------------------------------- 1 | package com.slipper.service.modules.role.model.vo; 2 | 3 | import com.fasterxml.jackson.annotation.JsonProperty; 4 | import lombok.Data; 5 | 6 | import java.io.Serializable; 7 | import java.util.Date; 8 | 9 | /** 10 | * 角色分页 视图数据 11 | * 12 | * @author gumingchen 13 | * @email 1240235512@qq.com 14 | * @date 1995-08-30 00:00:00 15 | */ 16 | @Data 17 | public class RolePageVO implements Serializable { 18 | private static final long serialVersionUID = 1L; 19 | 20 | private Long id; 21 | /** 22 | * 名称 23 | */ 24 | private String name; 25 | /** 26 | * 备注 27 | */ 28 | private String remark; 29 | /** 30 | * 是否显示:0-否 1-是 31 | * 用于不给用户操作的角色 系统角色 32 | */ 33 | private Integer show; 34 | /** 35 | * 创建时间 36 | */ 37 | @JsonProperty("created_at") 38 | private Date createdAt; 39 | /** 40 | * 更新时间 41 | */ 42 | @JsonProperty("updated_at") 43 | private Date updatedAt; 44 | } 45 | -------------------------------------------------------------------------------- /slipper-service/src/main/java/com/slipper/service/modules/role/model/vo/RoleVO.java: -------------------------------------------------------------------------------- 1 | package com.slipper.service.modules.role.model.vo; 2 | 3 | import com.baomidou.mybatisplus.annotation.*; 4 | import com.fasterxml.jackson.annotation.JsonProperty; 5 | import com.slipper.common.validator.group.Create; 6 | import com.slipper.common.validator.group.Update; 7 | import lombok.Data; 8 | 9 | import javax.validation.constraints.NotBlank; 10 | import javax.validation.constraints.NotNull; 11 | import java.io.Serializable; 12 | import java.util.Date; 13 | 14 | /** 15 | * 角色 视图数据 16 | * 17 | * @author gumingchen 18 | * @email 1240235512@qq.com 19 | * @date 1995-08-30 00:00:00 20 | */ 21 | @Data 22 | public class RoleVO implements Serializable { 23 | private static final long serialVersionUID = 1L; 24 | 25 | private Long id; 26 | /** 27 | * 名称 28 | */ 29 | private String name; 30 | /** 31 | * 备注 32 | */ 33 | private String remark; 34 | /** 35 | * 是否显示:0-否 1-是 36 | * 用于不给用户操作的角色 系统角色 37 | */ 38 | private Integer show; 39 | /** 40 | * 企业ID 41 | */ 42 | @JsonProperty("enterprise_id") 43 | private Long enterpriseId; 44 | /** 45 | * 创建时间 46 | */ 47 | @JsonProperty("created_at") 48 | private Date createdAt; 49 | /** 50 | * 更新时间 51 | */ 52 | private Date updatedAt; 53 | } 54 | -------------------------------------------------------------------------------- /slipper-service/src/main/java/com/slipper/service/modules/role/service/RoleMenuService.java: -------------------------------------------------------------------------------- 1 | package com.slipper.service.modules.role.service; 2 | 3 | import com.baomidou.mybatisplus.extension.service.IService; 4 | import com.slipper.service.modules.role.entity.RoleMenuEntity; 5 | 6 | import java.util.List; 7 | 8 | /** 9 | * 角色-菜单 10 | * 11 | * @author gumingchen 12 | * @email 1240235512@qq.com 13 | * @date 1995-08-30 00:00:00 14 | */ 15 | public interface RoleMenuService extends IService { 16 | 17 | /** 18 | * 批量添加 角色 与 企业菜单的关联 19 | * @param roleId 角色ID 20 | * @param enterpriseMenuIds 企业菜单ID数组 21 | */ 22 | void createOrUpdateBatch(Long roleId, List enterpriseMenuIds); 23 | 24 | } 25 | -------------------------------------------------------------------------------- /slipper-service/src/main/java/com/slipper/service/modules/role/service/RoleService.java: -------------------------------------------------------------------------------- 1 | package com.slipper.service.modules.role.service; 2 | 3 | import com.baomidou.mybatisplus.extension.service.IService; 4 | import com.slipper.common.utils.RPage; 5 | import com.slipper.service.modules.administrator.model.dto.AdministratorRoleDTO; 6 | import com.slipper.service.modules.role.entity.RoleEntity; 7 | import com.slipper.service.modules.role.model.form.EnterpriseRolePageForm; 8 | import com.slipper.service.modules.role.model.form.RoleCreateOrUpdateForm; 9 | import com.slipper.service.modules.role.model.form.RolePageForm; 10 | import com.slipper.service.modules.role.model.vo.RoleInfoVO; 11 | import com.slipper.service.modules.role.model.vo.RoleVO; 12 | 13 | import java.util.List; 14 | 15 | /** 16 | * 角色 17 | * 18 | * @author gumingchen 19 | * @email 1240235512@qq.com 20 | * @date 1995-08-30 00:00:00 21 | */ 22 | public interface RoleService extends IService { 23 | 24 | /** 25 | * 分页 - 企业下所有角色 或者 企业下当前管理员创建的角色 26 | * @param pageForm 分页参数 27 | * @param administratorRoleDto 当前管理员 28 | * @return 29 | */ 30 | RPage queryPage(RolePageForm pageForm, AdministratorRoleDTO administratorRoleDto); 31 | 32 | /** 33 | * 详情 34 | * @param id 35 | * @return 36 | */ 37 | RoleInfoVO queryInfo(Long id); 38 | 39 | /** 40 | * 创建 41 | * @param createOrUpdateForm 创建参数 42 | * @param enterpriseId 企业ID 43 | * @param administratorId 管理员ID 44 | * @return 45 | */ 46 | void create(RoleCreateOrUpdateForm createOrUpdateForm, Long enterpriseId, Long administratorId); 47 | 48 | /** 49 | * 更新 50 | * @param createOrUpdateForm 更新参数 51 | * @param administratorId 管理员ID 52 | * @return 53 | */ 54 | void update(RoleCreateOrUpdateForm createOrUpdateForm, Long administratorId); 55 | 56 | /** 57 | * 删除 58 | * @param ids ID列表 59 | */ 60 | void delete(List ids); 61 | 62 | /** 63 | * 获取管理员创建的角色 超级管理员返回企业下所有的角色 64 | * @param administratorRoleDto 65 | * @return 66 | */ 67 | List queryListByAdministrator(AdministratorRoleDTO administratorRoleDto); 68 | 69 | /* todo:-------------------------------------------------------------------------------------- */ 70 | 71 | /** 72 | * 分页 - 企业ID查询所有角色 73 | * @param pageForm 分页参数 74 | * @return 75 | */ 76 | RPage queryPage(EnterpriseRolePageForm pageForm); 77 | 78 | /** 79 | * 获取企业下所有的角色 80 | * @param enterpriseId 企业ID 81 | * @return 82 | */ 83 | List queryListByEnterpriseId(Long enterpriseId); 84 | 85 | } 86 | -------------------------------------------------------------------------------- /slipper-service/src/main/java/com/slipper/service/modules/role/service/impl/RoleMenuServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.slipper.service.modules.role.service.impl; 2 | 3 | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; 4 | import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; 5 | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 6 | import com.slipper.common.exception.RunException; 7 | import com.slipper.service.modules.role.dao.RoleMenuDao; 8 | import com.slipper.service.modules.role.entity.RoleMenuEntity; 9 | import com.slipper.service.modules.role.service.RoleMenuService; 10 | import org.springframework.stereotype.Service; 11 | import org.springframework.transaction.annotation.Transactional; 12 | 13 | import java.util.ArrayList; 14 | import java.util.List; 15 | 16 | /** 17 | * 角色-菜单 18 | * 19 | * @author gumingchen 20 | * @email 1240235512@qq.com 21 | * @date 1995-08-30 00:00:00 22 | */ 23 | @Service("roleMenuService") 24 | public class RoleMenuServiceImpl extends ServiceImpl implements RoleMenuService { 25 | 26 | @Transactional(rollbackFor = RunException.class) 27 | @Override 28 | public void createOrUpdateBatch(Long roleId, List enterpriseMenuIds) { 29 | // 获取该角色已经存在的企业菜单 30 | LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper() 31 | .eq(RoleMenuEntity::getRoleId, roleId); 32 | List roleMenuEntities = this.list(queryWrapper); 33 | 34 | // 需要删除的ID 35 | List deleteIds = new ArrayList<>(); 36 | // 不需要修改的企业菜单ID 37 | List unmodifiedIds = new ArrayList<>(); 38 | for (RoleMenuEntity roleMenuEntity : roleMenuEntities) { 39 | if (!enterpriseMenuIds.contains(roleMenuEntity.getEnterpriseMenuId())) { 40 | deleteIds.add(roleMenuEntity.getId()); 41 | } else { 42 | unmodifiedIds.add(roleMenuEntity.getEnterpriseMenuId()); 43 | } 44 | } 45 | // 需要创建的企业菜单ID 46 | List createIds = new ArrayList<>(); 47 | for (Long enterpriseMenuId : enterpriseMenuIds) { 48 | if (!unmodifiedIds.contains(enterpriseMenuId)) { 49 | createIds.add(enterpriseMenuId); 50 | } 51 | } 52 | 53 | // 删除 54 | if (deleteIds.size() > 0) { 55 | LambdaQueryWrapper deleteWrapper = new LambdaQueryWrapper() 56 | .in(RoleMenuEntity::getId, deleteIds); 57 | this.remove(deleteWrapper); 58 | } 59 | 60 | // 创建 61 | if (createIds.size() > 0) { 62 | baseMapper.createBatch(roleId, createIds); 63 | } 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /slipper-service/src/main/java/com/slipper/service/modules/token/dao/TokenDao.java: -------------------------------------------------------------------------------- 1 | package com.slipper.service.modules.token.dao; 2 | 3 | import com.baomidou.mybatisplus.core.mapper.BaseMapper; 4 | import com.slipper.service.modules.role.entity.RoleEntity; 5 | import com.slipper.service.modules.token.entity.TokenEntity; 6 | import org.apache.ibatis.annotations.Mapper; 7 | import org.apache.ibatis.annotations.Param; 8 | 9 | /** 10 | * 用户凭证 11 | * 12 | * @author gumingchen 13 | * @email 1240235512@qq.com 14 | * @date 1995-08-30 00:00:00 15 | */ 16 | @Mapper 17 | public interface TokenDao extends BaseMapper { 18 | 19 | } 20 | -------------------------------------------------------------------------------- /slipper-service/src/main/java/com/slipper/service/modules/token/entity/TokenEntity.java: -------------------------------------------------------------------------------- 1 | package com.slipper.service.modules.token.entity; 2 | 3 | import com.baomidou.mybatisplus.annotation.IdType; 4 | import com.baomidou.mybatisplus.annotation.TableId; 5 | import com.baomidou.mybatisplus.annotation.TableLogic; 6 | import com.baomidou.mybatisplus.annotation.TableName; 7 | import com.fasterxml.jackson.annotation.JsonProperty; 8 | import com.slipper.common.validator.group.Create; 9 | import com.slipper.common.validator.group.Update; 10 | import lombok.AllArgsConstructor; 11 | import lombok.Data; 12 | import lombok.NoArgsConstructor; 13 | 14 | import javax.validation.constraints.NotBlank; 15 | import javax.validation.constraints.NotNull; 16 | import java.io.Serializable; 17 | import java.util.Date; 18 | 19 | /** 20 | * 用户凭证 21 | * 22 | * @author gumingchen 23 | * @email 1240235512@qq.com 24 | * @date 1995-08-30 00:00:00 25 | */ 26 | @Data 27 | @TableName("token") 28 | public class TokenEntity implements Serializable { 29 | private static final long serialVersionUID = 1L; 30 | 31 | @JsonProperty("administrator_id") 32 | @TableId(value = "administrator_id", type = IdType.INPUT) 33 | private Long administratorId; 34 | /** 35 | * 凭证 36 | */ 37 | private String token; 38 | /** 39 | * 到期时间 40 | */ 41 | @JsonProperty("expired_at") 42 | private Date expiredAt; 43 | /** 44 | * 创建时间 45 | */ 46 | @JsonProperty("created_at") 47 | private Date createdAt; 48 | } 49 | -------------------------------------------------------------------------------- /slipper-service/src/main/java/com/slipper/service/modules/token/service/TokenService.java: -------------------------------------------------------------------------------- 1 | package com.slipper.service.modules.token.service; 2 | 3 | import com.baomidou.mybatisplus.extension.service.IService; 4 | import com.slipper.service.modules.role.entity.RoleEntity; 5 | import com.slipper.service.modules.token.entity.TokenEntity; 6 | 7 | /** 8 | * 用户凭证 9 | * 10 | * @author gumingchen 11 | * @email 1240235512@qq.com 12 | * @date 1995-08-30 00:00:00 13 | */ 14 | public interface TokenService extends IService { 15 | 16 | /** 17 | * 创建token 18 | * @param id 管理员ID 19 | * @param mode 存储位置:1-数据库 2-Redis 20 | * @return 21 | */ 22 | TokenEntity createToken (Long id, Integer mode); 23 | 24 | /** 25 | * 销毁token 26 | * @param id 管理员ID 27 | * @param mode 存储位置:1-数据库 2-Redis 28 | * @return 29 | */ 30 | void destroyToken (Long id, Integer mode); 31 | } 32 | -------------------------------------------------------------------------------- /slipper-service/src/main/java/com/slipper/service/modules/token/service/impl/TokenServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.slipper.service.modules.token.service.impl; 2 | 3 | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; 4 | import com.slipper.common.utils.TokenUtils; 5 | import com.slipper.service.modules.role.dao.RoleDao; 6 | import com.slipper.service.modules.role.entity.RoleEntity; 7 | import com.slipper.service.modules.role.service.RoleService; 8 | import com.slipper.service.modules.token.dao.TokenDao; 9 | import com.slipper.service.modules.token.entity.TokenEntity; 10 | import com.slipper.service.modules.token.service.TokenService; 11 | import org.springframework.stereotype.Service; 12 | 13 | import javax.annotation.Resource; 14 | import java.util.Date; 15 | 16 | /** 17 | * 用户凭证 18 | * 19 | * @author gumingchen 20 | * @email 1240235512@qq.com 21 | * @date 1995-08-30 00:00:00 22 | */ 23 | @Service("tokenService") 24 | public class TokenServiceImpl extends ServiceImpl implements TokenService { 25 | 26 | @Resource 27 | private TokenUtils tokenUtils; 28 | 29 | @Override 30 | public TokenEntity createToken(Long id, Integer mode) { 31 | // 生成token 32 | String token = TokenUtils.generate(); 33 | // 获取当前时间 34 | Date now = new Date(); 35 | // 计算过期时间 36 | Date expire = new Date(now.getTime() + tokenUtils.getExpire() * 1000); 37 | // 设置token信息 38 | TokenEntity tokenEntity = new TokenEntity(); 39 | tokenEntity.setAdministratorId(id); 40 | tokenEntity.setToken(token); 41 | tokenEntity.setExpiredAt(expire); 42 | tokenEntity.setCreatedAt(now); 43 | 44 | switch (mode) { 45 | case 1: 46 | if (this.getById(id) == null) { 47 | this.save(tokenEntity); 48 | } else { 49 | this.updateById(tokenEntity); 50 | } 51 | break; 52 | default: 53 | } 54 | 55 | return tokenEntity; 56 | } 57 | 58 | @Override 59 | public void destroyToken(Long id, Integer mode) { 60 | switch (mode) { 61 | case 1: 62 | this.removeById(id); 63 | default: 64 | } 65 | } 66 | } 67 | -------------------------------------------------------------------------------- /slipper-service/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /slipper-service/src/main/resources/mapper/administrator/AdministratorRoleDao.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | INSERT INTO administrator__role 9 | (administrator_id, role_id) 10 | VALUES 11 | 12 | (#{administratorId}, #{item}) 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /slipper-service/src/main/resources/mapper/captcha/CaptchaDao.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /slipper-service/src/main/resources/mapper/enterprise/EnterpriseDao.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /slipper-service/src/main/resources/mapper/file/FileDao.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /slipper-service/src/main/resources/mapper/log/login/LoginLogDao.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 34 | 35 | 36 | 42 | 43 | 44 | 45 | UPDATE login_log AS ll 46 | LEFT JOIN administrator AS a ON a.id = ll.creator 47 | SET ll.deleted = 1 48 | WHERE a.enterprise_id = ${enterpriseId} 49 | 50 | 51 | 52 | 53 | TRUNCATE TABLE login_log; 54 | 55 | 56 | 57 | 69 | 70 | 71 | -------------------------------------------------------------------------------- /slipper-service/src/main/resources/mapper/log/operation/OperationLogDao.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 37 | 38 | 39 | 45 | 46 | 47 | 48 | UPDATE operation_log AS ol 49 | LEFT JOIN administrator AS a ON a.id = ol.creator 50 | SET ol.deleted = 1 51 | WHERE a.enterprise_id = ${enterpriseId} 52 | 53 | 54 | 55 | 56 | TRUNCATE TABLE operation_log; 57 | 58 | 59 | 60 | -------------------------------------------------------------------------------- /slipper-service/src/main/resources/mapper/menu/MenuDao.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 13 | 14 | 15 | 21 | 22 | 23 | 24 | 25 | UPDATE menu 26 | 27 | sort= #{item.sort}, 28 | updater = #{item.updater}, 29 | updated_at = #{item.updatedAt} 30 | 31 | WHERE id = ${item.id} 32 | 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /slipper-service/src/main/resources/mapper/role/RoleDao.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /slipper-service/src/main/resources/mapper/role/RoleMenuDao.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | INSERT INTO role__menu 9 | (role_id, enterprise_menu_id) 10 | VALUES 11 | 12 | (#{roleId}, #{item}) 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /slipper-service/src/main/resources/mapper/token/TokenDao.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /slipper-shiro/pom.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 4.0.0 5 | 6 | 7 | slipper 8 | com.slipper 9 | 2.0.0 10 | 11 | 12 | slipper-shiro 13 | 14 | shiro 15 | 16 | 17 | 18 | 19 | org.apache.shiro 20 | shiro-spring 21 | 22 | 23 | 24 | com.slipper 25 | slipper-core 26 | 27 | 28 | 29 | com.slipper 30 | slipper-service 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /slipper-shiro/src/main/java/com/slipper/shiro/service/ShiroService.java: -------------------------------------------------------------------------------- 1 | package com.slipper.shiro.service; 2 | 3 | import com.slipper.service.modules.administrator.model.dto.AdministratorRoleDTO; 4 | import com.slipper.service.modules.token.entity.TokenEntity; 5 | 6 | import java.util.Set; 7 | 8 | /** 9 | * shiro 10 | * 11 | * @author gumingchen 12 | * @email 1240235512@qq.com 13 | * @date 1995-08-30 00:00:00 14 | */ 15 | public interface ShiroService { 16 | 17 | /** 18 | * 获取token 19 | * @param token 20 | * @return 21 | */ 22 | TokenEntity queryTokenByToken(String token); 23 | 24 | /** 25 | * 获取管理员信息 26 | * @param id 管理员ID 27 | * @return 28 | */ 29 | AdministratorRoleDTO queryAdministratorById(Long id); 30 | 31 | /** 32 | * 获取管理员权限 33 | * @param administratorRoleDto 管理员 34 | * @return 35 | */ 36 | Set queryPermissionByAdministrator(AdministratorRoleDTO administratorRoleDto); 37 | } 38 | 39 | -------------------------------------------------------------------------------- /slipper-shiro/src/main/java/com/slipper/shiro/service/impl/ShiroServiceImpl.java: -------------------------------------------------------------------------------- 1 | package com.slipper.shiro.service.impl; 2 | 3 | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; 4 | import com.slipper.service.modules.administrator.dao.AdministratorDao; 5 | import com.slipper.service.modules.administrator.model.dto.AdministratorRoleDTO; 6 | import com.slipper.service.modules.enterprise.dao.EnterpriseMenuDao; 7 | import com.slipper.service.modules.token.dao.TokenDao; 8 | import com.slipper.service.modules.token.entity.TokenEntity; 9 | import com.slipper.shiro.service.ShiroService; 10 | import org.apache.commons.lang3.StringUtils; 11 | import org.springframework.stereotype.Service; 12 | 13 | import javax.annotation.Resource; 14 | import java.util.*; 15 | 16 | /** 17 | * shiro 18 | * 19 | * @author gumingchen 20 | * @email 1240235512@qq.com 21 | * @date 1995-08-30 00:00:00 22 | */ 23 | @Service("shiroService") 24 | public class ShiroServiceImpl implements ShiroService { 25 | 26 | @Resource 27 | TokenDao tokenDao; 28 | @Resource 29 | AdministratorDao administratorDao; 30 | @Resource 31 | EnterpriseMenuDao enterpriseMenuDao; 32 | 33 | @Override 34 | public TokenEntity queryTokenByToken(String token) { 35 | LambdaQueryWrapper wrapper = new LambdaQueryWrapper() 36 | .eq(TokenEntity::getToken, token); 37 | return tokenDao.selectOne(wrapper); 38 | } 39 | 40 | @Override 41 | public AdministratorRoleDTO queryAdministratorById(Long id) { 42 | return administratorDao.queryById(id); 43 | } 44 | 45 | @Override 46 | public Set queryPermissionByAdministrator(AdministratorRoleDTO administratorRoleDto) { 47 | List list; 48 | if (administratorRoleDto.getSupervisor() == 1) { 49 | list = enterpriseMenuDao.queryPermissionByEnterpriseId(administratorRoleDto.getEnterpriseId()); 50 | } else { 51 | list = enterpriseMenuDao.queryPermissionByAdministratorId(administratorRoleDto.getId()); 52 | } 53 | return getPermissionSet(list); 54 | } 55 | 56 | /** 57 | * 权限list 转 set 58 | * @param permissionList 59 | * @return 60 | */ 61 | private Set getPermissionSet(List permissionList) { 62 | Set permissions = new HashSet<>(); 63 | for (String p : permissionList) { 64 | if (StringUtils.isBlank(p)) { 65 | continue; 66 | } 67 | permissions.addAll(Arrays.asList(p.trim().split(";"))); 68 | } 69 | return permissions; 70 | } 71 | } -------------------------------------------------------------------------------- /slipper-shiro/src/main/java/com/slipper/shiro/token/AuthToken.java: -------------------------------------------------------------------------------- 1 | package com.slipper.shiro.token; 2 | 3 | import org.apache.shiro.authc.AuthenticationToken; 4 | 5 | /** 6 | * @author gumingchen 7 | * 8 | * @author gumingchen 9 | * @email 1240235512@qq.com 10 | * @date 1995-08-30 00:00:00 11 | */ 12 | public class AuthToken implements AuthenticationToken { 13 | private String token; 14 | 15 | public AuthToken(String token){ 16 | this.token = token; 17 | } 18 | 19 | @Override 20 | public Object getPrincipal() { 21 | return token; 22 | } 23 | 24 | @Override 25 | public Object getCredentials() { 26 | return token; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /slipper-shiro/src/main/java/com/slipper/shiro/utils/ShiroUtils.java: -------------------------------------------------------------------------------- 1 | package com.slipper.shiro.utils; 2 | 3 | import com.slipper.service.modules.administrator.model.dto.AdministratorRoleDTO; 4 | import org.apache.shiro.SecurityUtils; 5 | import org.apache.shiro.subject.Subject; 6 | 7 | /** 8 | * Shiro 工具类 9 | * 10 | * @author gumingchen 11 | * @email 1240235512@qq.com 12 | * @date 1995-08-30 00:00:00 13 | */ 14 | public class ShiroUtils { 15 | 16 | public static Subject getSubject() { 17 | return SecurityUtils.getSubject(); 18 | } 19 | 20 | public static AdministratorRoleDTO getAdministrator() { 21 | return (AdministratorRoleDTO) SecurityUtils.getSubject().getPrincipal(); 22 | } 23 | 24 | public static Long getAdministratorId() { 25 | return getAdministrator().getId(); 26 | } 27 | 28 | public static Long getEnterpriseId() { 29 | return getAdministrator().getEnterpriseId(); 30 | } 31 | 32 | public static String getIp() { 33 | return getSubject().getSession().getHost(); 34 | } 35 | 36 | } 37 | -------------------------------------------------------------------------------- /slipper-shiro/src/main/resources/application.properties: -------------------------------------------------------------------------------- 1 | 2 | --------------------------------------------------------------------------------