Showing preview only (1,422K chars total). Download the full file or copy to clipboard to get everything.
Repository: oddfar/campus-imaotai
Branch: master
Commit: ff23e422111f
Files: 448
Total size: 1.3 MB
Directory structure:
gitextract_lhpb8umu/
├── .gitattributes
├── .github/
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug_report.yaml
│ │ └── feature_request.md
│ └── workflows/
│ ├── api.yml
│ ├── release.yml
│ └── web.yml
├── .gitignore
├── .run/
│ └── campus-server.run.xml
├── LICENSE
├── README.md
├── campus-admin/
│ ├── pom.xml
│ └── src/
│ └── main/
│ └── java/
│ └── com/
│ └── oddfar/
│ └── campus/
│ └── admin/
│ ├── config/
│ │ ├── CaptchaConfig.java
│ │ └── SwaggerConfig.java
│ └── controller/
│ ├── monitor/
│ │ ├── SysLogininforController.java
│ │ └── SysOperlogController.java
│ └── system/
│ ├── CaptchaController.java
│ ├── SysApiResourceController.java
│ ├── SysConfigController.java
│ ├── SysDictDataController.java
│ ├── SysDictTypeController.java
│ ├── SysIndexController.java
│ ├── SysLoginController.java
│ ├── SysMenuController.java
│ ├── SysProfileController.java
│ ├── SysRegisterController.java
│ ├── SysRoleController.java
│ └── SysUserController.java
├── campus-common/
│ ├── pom.xml
│ └── src/
│ └── main/
│ └── java/
│ └── com/
│ └── oddfar/
│ └── campus/
│ └── common/
│ ├── annotation/
│ │ ├── Anonymous.java
│ │ ├── ApiResource.java
│ │ ├── Log.java
│ │ ├── RepeatSubmit.java
│ │ └── Sensitive.java
│ ├── config/
│ │ ├── CampusConfig.java
│ │ ├── FastJson2JsonRedisSerializer.java
│ │ ├── RedisConfig.java
│ │ └── SensitiveSerializer.java
│ ├── constant/
│ │ ├── CacheConstants.java
│ │ ├── Constants.java
│ │ ├── HttpStatus.java
│ │ └── UserConstants.java
│ ├── core/
│ │ ├── BaseMapperX.java
│ │ ├── LambdaQueryWrapperX.java
│ │ ├── RedisCache.java
│ │ ├── page/
│ │ │ ├── PageQuery.java
│ │ │ └── TableDataInfo.java
│ │ └── text/
│ │ ├── CharsetKit.java
│ │ └── Convert.java
│ ├── domain/
│ │ ├── BaseEntity.java
│ │ ├── PageResult.java
│ │ ├── R.java
│ │ ├── TreeSelect.java
│ │ ├── entity/
│ │ │ ├── SysConfigEntity.java
│ │ │ ├── SysDictDataEntity.java
│ │ │ ├── SysDictTypeEntity.java
│ │ │ ├── SysLoginLogEntity.java
│ │ │ ├── SysMenuEntity.java
│ │ │ ├── SysOperLogEntity.java
│ │ │ ├── SysResourceEntity.java
│ │ │ ├── SysRoleEntity.java
│ │ │ ├── SysRoleMenuEntity.java
│ │ │ ├── SysRoleResourceEntity.java
│ │ │ ├── SysUserEntity.java
│ │ │ └── SysUserRoleEntity.java
│ │ ├── model/
│ │ │ ├── LoginBody.java
│ │ │ ├── LoginUser.java
│ │ │ ├── LoginUserToken.java
│ │ │ ├── RegisterBody.java
│ │ │ ├── SysRoleAuth.java
│ │ │ └── SysRoleAuthList.java
│ │ └── vo/
│ │ └── RouterVo.java
│ ├── enums/
│ │ ├── BizCodeEnum.java
│ │ ├── BusinessStatus.java
│ │ ├── ResBizTypeEnum.java
│ │ ├── SensitiveStrategy.java
│ │ └── UserStatusEnum.java
│ ├── exception/
│ │ ├── ServiceException.java
│ │ ├── UtilException.java
│ │ ├── base/
│ │ │ └── BaseException.java
│ │ ├── file/
│ │ │ ├── FileException.java
│ │ │ ├── FileNameLengthLimitExceededException.java
│ │ │ ├── FileSizeLimitExceededException.java
│ │ │ └── InvalidExtensionException.java
│ │ └── user/
│ │ ├── CaptchaException.java
│ │ ├── CaptchaExpireException.java
│ │ ├── UserException.java
│ │ ├── UserPasswordNotMatchException.java
│ │ └── UserPasswordRetryLimitExceedException.java
│ ├── filter/
│ │ ├── PropertyPreExcludeFilter.java
│ │ └── RepeatedlyRequestWrapper.java
│ ├── utils/
│ │ ├── DateUtils.java
│ │ ├── DictUtils.java
│ │ ├── LogUtils.java
│ │ ├── MessageUtils.java
│ │ ├── MetaVo.java
│ │ ├── SecurityUtils.java
│ │ ├── ServletUtils.java
│ │ ├── SpringUtils.java
│ │ ├── StringUtils.java
│ │ ├── Threads.java
│ │ ├── http/
│ │ │ ├── HttpHelper.java
│ │ │ └── HttpUtils.java
│ │ ├── ip/
│ │ │ ├── AddressUtils.java
│ │ │ └── IpUtils.java
│ │ ├── pol/
│ │ │ └── ExcelHandlerAdapter.java
│ │ ├── reflect/
│ │ │ └── ReflectUtils.java
│ │ ├── spring/
│ │ │ └── AopTargetUtils.java
│ │ ├── sql/
│ │ │ └── SqlUtil.java
│ │ ├── uuid/
│ │ │ ├── IdUtils.java
│ │ │ └── Seq.java
│ │ └── web/
│ │ └── WebFrameworkUtils.java
│ └── validator/
│ ├── Xss.java
│ └── XssValidator.java
├── campus-framework/
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── com/
│ │ └── oddfar/
│ │ └── campus/
│ │ └── framework/
│ │ ├── api/
│ │ │ ├── file/
│ │ │ │ ├── FileOperatorApi.java
│ │ │ │ ├── FileUploadUtils.java
│ │ │ │ ├── LocalFileOperator.java
│ │ │ │ ├── MimeTypeUtils.java
│ │ │ │ └── ZyFileAutoConfiguration.java
│ │ │ ├── mail/
│ │ │ │ ├── Impl/
│ │ │ │ │ └── MailServiceImpl.java
│ │ │ │ ├── MailConfigRead.java
│ │ │ │ ├── MailSendApi.java
│ │ │ │ ├── MailSendContext.java
│ │ │ │ └── ZyMailAutoConfig.java
│ │ │ ├── resource/
│ │ │ │ ├── ApiResourceAutoConfig.java
│ │ │ │ ├── ResourceCollectorApi.java
│ │ │ │ └── impl/
│ │ │ │ └── DefaultResourceCollector.java
│ │ │ └── sysconfig/
│ │ │ ├── ConfigContext.java
│ │ │ ├── ConfigExpander.java
│ │ │ └── ZyConfigAutoConfiguration.java
│ │ ├── aspectj/
│ │ │ └── LogAspect.java
│ │ ├── config/
│ │ │ ├── ApplicationConfig.java
│ │ │ ├── AsyncConfig.java
│ │ │ ├── JacksonConfig.java
│ │ │ ├── KaptchaTextCreator.java
│ │ │ ├── MyWebMvcConfig.java
│ │ │ ├── MybatisPlusConfig.java
│ │ │ ├── SecurityConfig.java
│ │ │ └── ThreadPoolConfig.java
│ │ ├── expander/
│ │ │ ├── SysConfigExpander.java
│ │ │ └── SysFileConfigExpander.java
│ │ ├── handler/
│ │ │ ├── BigNumberSerializer.java
│ │ │ └── MyDBFieldHandler.java
│ │ ├── interceptor/
│ │ │ ├── RepeatSubmitInterceptor.java
│ │ │ └── impl/
│ │ │ └── SameUrlDataInterceptor.java
│ │ ├── listener/
│ │ │ ├── ApiResourceScanner.java
│ │ │ ├── ReadyEventListener.java
│ │ │ └── ResourceReportListener.java
│ │ ├── manager/
│ │ │ ├── AsyncFactory.java
│ │ │ └── AsyncManager.java
│ │ ├── mapper/
│ │ │ ├── SysConfigMapper.java
│ │ │ ├── SysDictDataMapper.java
│ │ │ ├── SysDictTypeMapper.java
│ │ │ ├── SysLoginLogMapper.java
│ │ │ ├── SysMenuMapper.java
│ │ │ ├── SysOperLogMapper.java
│ │ │ ├── SysResourceMapper.java
│ │ │ ├── SysRoleMapper.java
│ │ │ ├── SysRoleMenuMapper.java
│ │ │ ├── SysRoleResourceMapper.java
│ │ │ ├── SysUserMapper.java
│ │ │ └── SysUserRoleMapper.java
│ │ ├── security/
│ │ │ ├── context/
│ │ │ │ ├── AuthenticationContextHolder.java
│ │ │ │ └── PermissionContextHolder.java
│ │ │ ├── filter/
│ │ │ │ └── JwtAuthenticationTokenFilter.java
│ │ │ ├── handle/
│ │ │ │ ├── AuthenticationEntryPointImpl.java
│ │ │ │ └── LogoutSuccessHandlerImpl.java
│ │ │ └── properties/
│ │ │ └── PermitAllUrlProperties.java
│ │ ├── service/
│ │ │ ├── SysConfigService.java
│ │ │ ├── SysDictDataService.java
│ │ │ ├── SysDictTypeService.java
│ │ │ ├── SysLoginLogService.java
│ │ │ ├── SysMenuService.java
│ │ │ ├── SysOperLogService.java
│ │ │ ├── SysResourceService.java
│ │ │ ├── SysRoleService.java
│ │ │ ├── SysUserService.java
│ │ │ └── impl/
│ │ │ ├── SysConfigServiceImpl.java
│ │ │ ├── SysDictDataServiceImpl.java
│ │ │ ├── SysDictTypeServiceImpl.java
│ │ │ ├── SysLoginLogServiceImpl.java
│ │ │ ├── SysMenuServiceImpl.java
│ │ │ ├── SysOperLogServiceImpl.java
│ │ │ ├── SysResourceServiceImpl.java
│ │ │ ├── SysRoleServiceImpl.java
│ │ │ └── SysUserServiceImpl.java
│ │ └── web/
│ │ ├── exception/
│ │ │ └── GlobalExceptionHandler.java
│ │ └── service/
│ │ ├── PermissionService.java
│ │ ├── SysLoginService.java
│ │ ├── SysPasswordService.java
│ │ ├── SysPermissionService.java
│ │ ├── SysRegisterService.java
│ │ ├── TokenService.java
│ │ └── UserDetailsServiceImpl.java
│ └── resources/
│ └── mapper/
│ ├── SysConfigMapper.xml
│ ├── SysDictDataMapper.xml
│ ├── SysDictTypeMapper.xml
│ ├── SysLoginLogMapper.xml
│ ├── SysMenuMapper.xml
│ ├── SysOperLogMapper.xml
│ ├── SysResourceMapper.xml
│ ├── SysRoleMapper.xml
│ ├── SysRoleMenuMapper.xml
│ ├── SysRoleResourceMapper.xml
│ ├── SysUserMapper.xml
│ └── SysUserRoleMapper.xml
├── campus-modular/
│ ├── Dockerfile
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── com/
│ │ └── oddfar/
│ │ └── campus/
│ │ ├── CampusApplication.java
│ │ └── business/
│ │ ├── api/
│ │ │ └── PushPlusApi.java
│ │ ├── controller/
│ │ │ ├── IItemController.java
│ │ │ ├── ILogController.java
│ │ │ ├── IShopController.java
│ │ │ ├── IUserController.java
│ │ │ └── TestController.java
│ │ ├── domain/
│ │ │ ├── IMTCacheConstants.java
│ │ │ ├── IMTItemInfo.java
│ │ │ ├── IUserRequest.java
│ │ │ └── MapPoint.java
│ │ ├── entity/
│ │ │ ├── IItem.java
│ │ │ ├── ILog.java
│ │ │ ├── IShop.java
│ │ │ └── IUser.java
│ │ ├── mapper/
│ │ │ ├── IItemMapper.java
│ │ │ ├── ILogMapper.java
│ │ │ ├── IShopMapper.java
│ │ │ └── IUserMapper.java
│ │ ├── service/
│ │ │ ├── IMTLogFactory.java
│ │ │ ├── IMTLogService.java
│ │ │ ├── IMTService.java
│ │ │ ├── IShopService.java
│ │ │ ├── IUserService.java
│ │ │ └── impl/
│ │ │ ├── IMTLogServiceImpl.java
│ │ │ ├── IMTServiceImpl.java
│ │ │ ├── IShopServiceImpl.java
│ │ │ └── IUserServiceImpl.java
│ │ └── task/
│ │ └── CampusIMTTask.java
│ └── resources/
│ ├── application-dev.yml
│ ├── application-prod.yml
│ ├── application.yml
│ ├── i18n/
│ │ └── messages.properties
│ ├── logback.xml
│ ├── mapper/
│ │ ├── IItemMapper.xml
│ │ ├── ILogMapper.xml
│ │ ├── IShopMapper.xml
│ │ └── IUserMapper.xml
│ └── spy.properties
├── doc/
│ ├── docker/
│ │ ├── docker-compose.yml
│ │ ├── nginx/
│ │ │ └── conf/
│ │ │ └── nginx.conf
│ │ ├── redis/
│ │ │ ├── conf/
│ │ │ │ └── redis.conf
│ │ │ └── data/
│ │ │ └── README.md
│ │ └── server/
│ │ └── conf/
│ │ └── README.md
│ └── sql/
│ └── campus_imaotai-1.0.5.sql
├── pom.xml
└── vue_campus_admin/
├── .editorconfig
├── .eslintignore
├── .eslintrc.js
├── .gitignore
├── Dockerfile
├── README.md
├── babel.config.js
├── bin/
│ ├── build.bat
│ ├── package.bat
│ └── run-web.bat
├── package.json
├── public/
│ ├── html/
│ │ └── ie.html
│ ├── index.html
│ └── robots.txt
├── src/
│ ├── App.vue
│ ├── api/
│ │ ├── imt/
│ │ │ ├── item.js
│ │ │ ├── log.js
│ │ │ ├── shop.js
│ │ │ └── user.js
│ │ ├── login.js
│ │ ├── menu.js
│ │ ├── monitor/
│ │ │ ├── cache.js
│ │ │ ├── job.js
│ │ │ ├── jobLog.js
│ │ │ ├── logininfor.js
│ │ │ ├── online.js
│ │ │ ├── operlog.js
│ │ │ └── server.js
│ │ ├── system/
│ │ │ ├── config.js
│ │ │ ├── dept.js
│ │ │ ├── dict/
│ │ │ │ ├── data.js
│ │ │ │ └── type.js
│ │ │ ├── index.js
│ │ │ ├── menu.js
│ │ │ ├── notice.js
│ │ │ ├── post.js
│ │ │ ├── resource.js
│ │ │ ├── role.js
│ │ │ └── user.js
│ │ └── tool/
│ │ └── gen.js
│ ├── assets/
│ │ ├── icons/
│ │ │ ├── index.js
│ │ │ └── svgo.yml
│ │ └── styles/
│ │ ├── btn.scss
│ │ ├── element-ui.scss
│ │ ├── element-variables.scss
│ │ ├── index.scss
│ │ ├── mixin.scss
│ │ ├── ruoyi.scss
│ │ ├── sidebar.scss
│ │ ├── transition.scss
│ │ └── variables.scss
│ ├── components/
│ │ ├── Breadcrumb/
│ │ │ └── index.vue
│ │ ├── Crontab/
│ │ │ ├── day.vue
│ │ │ ├── hour.vue
│ │ │ ├── index.vue
│ │ │ ├── min.vue
│ │ │ ├── month.vue
│ │ │ ├── result.vue
│ │ │ ├── second.vue
│ │ │ ├── week.vue
│ │ │ └── year.vue
│ │ ├── DictData/
│ │ │ └── index.js
│ │ ├── DictTag/
│ │ │ └── index.vue
│ │ ├── Editor/
│ │ │ └── index.vue
│ │ ├── FileUpload/
│ │ │ └── index.vue
│ │ ├── Hamburger/
│ │ │ └── index.vue
│ │ ├── HeaderSearch/
│ │ │ └── index.vue
│ │ ├── IconSelect/
│ │ │ ├── index.vue
│ │ │ └── requireIcons.js
│ │ ├── ImagePreview/
│ │ │ └── index.vue
│ │ ├── ImageUpload/
│ │ │ └── index.vue
│ │ ├── Pagination/
│ │ │ └── index.vue
│ │ ├── PanThumb/
│ │ │ └── index.vue
│ │ ├── ParentView/
│ │ │ └── index.vue
│ │ ├── RightPanel/
│ │ │ └── index.vue
│ │ ├── RightToolbar/
│ │ │ └── index.vue
│ │ ├── RuoYi/
│ │ │ ├── Doc/
│ │ │ │ └── index.vue
│ │ │ └── Git/
│ │ │ └── index.vue
│ │ ├── Screenfull/
│ │ │ └── index.vue
│ │ ├── SizeSelect/
│ │ │ └── index.vue
│ │ ├── SvgIcon/
│ │ │ └── index.vue
│ │ ├── ThemePicker/
│ │ │ └── index.vue
│ │ ├── TopNav/
│ │ │ └── index.vue
│ │ └── iFrame/
│ │ └── index.vue
│ ├── directive/
│ │ ├── dialog/
│ │ │ ├── drag.js
│ │ │ ├── dragHeight.js
│ │ │ └── dragWidth.js
│ │ ├── index.js
│ │ ├── module/
│ │ │ └── clipboard.js
│ │ └── permission/
│ │ ├── hasPermi.js
│ │ └── hasRole.js
│ ├── layout/
│ │ ├── components/
│ │ │ ├── AppMain.vue
│ │ │ ├── IframeToggle/
│ │ │ │ └── index.vue
│ │ │ ├── InnerLink/
│ │ │ │ └── index.vue
│ │ │ ├── Navbar.vue
│ │ │ ├── Settings/
│ │ │ │ └── index.vue
│ │ │ ├── Sidebar/
│ │ │ │ ├── FixiOSBug.js
│ │ │ │ ├── Item.vue
│ │ │ │ ├── Link.vue
│ │ │ │ ├── Logo.vue
│ │ │ │ ├── SidebarItem.vue
│ │ │ │ └── index.vue
│ │ │ ├── TagsView/
│ │ │ │ ├── ScrollPane.vue
│ │ │ │ └── index.vue
│ │ │ └── index.js
│ │ ├── index.vue
│ │ └── mixin/
│ │ └── ResizeHandler.js
│ ├── main.js
│ ├── permission.js
│ ├── plugins/
│ │ ├── auth.js
│ │ ├── cache.js
│ │ ├── download.js
│ │ ├── index.js
│ │ ├── modal.js
│ │ └── tab.js
│ ├── router/
│ │ └── index.js
│ ├── settings.js
│ ├── store/
│ │ ├── getters.js
│ │ ├── index.js
│ │ └── modules/
│ │ ├── app.js
│ │ ├── dict.js
│ │ ├── permission.js
│ │ ├── settings.js
│ │ ├── tagsView.js
│ │ └── user.js
│ ├── utils/
│ │ ├── auth.js
│ │ ├── crypto.js
│ │ ├── dict/
│ │ │ ├── Dict.js
│ │ │ ├── DictConverter.js
│ │ │ ├── DictData.js
│ │ │ ├── DictMeta.js
│ │ │ ├── DictOptions.js
│ │ │ └── index.js
│ │ ├── errorCode.js
│ │ ├── generator/
│ │ │ ├── config.js
│ │ │ ├── css.js
│ │ │ ├── drawingDefault.js
│ │ │ ├── html.js
│ │ │ ├── icon.json
│ │ │ ├── js.js
│ │ │ └── render.js
│ │ ├── index.js
│ │ ├── jsencrypt.js
│ │ ├── permission.js
│ │ ├── request.js
│ │ ├── ruoyi.js
│ │ ├── scroll-to.js
│ │ └── validate.js
│ └── views/
│ ├── components/
│ │ └── icons/
│ │ ├── element-icons.js
│ │ ├── index.vue
│ │ └── svg-icons.js
│ ├── dashboard/
│ │ ├── BarChart.vue
│ │ ├── LineChart.vue
│ │ ├── PanelGroup.vue
│ │ ├── PieChart.vue
│ │ ├── RaddarChart.vue
│ │ └── mixins/
│ │ └── resize.js
│ ├── error/
│ │ ├── 401.vue
│ │ └── 404.vue
│ ├── imt/
│ │ ├── item/
│ │ │ └── index.vue
│ │ ├── log/
│ │ │ └── index.vue
│ │ ├── shop/
│ │ │ └── index.vue
│ │ └── user/
│ │ └── index.vue
│ ├── index.vue
│ ├── index_v1.vue
│ ├── login.vue
│ ├── monitor/
│ │ ├── job/
│ │ │ ├── index.vue
│ │ │ └── log.vue
│ │ ├── logininfor/
│ │ │ └── index.vue
│ │ ├── online/
│ │ │ └── index.vue
│ │ └── operlog/
│ │ └── index.vue
│ ├── redirect.vue
│ ├── register.vue
│ ├── system/
│ │ ├── config/
│ │ │ └── index.vue
│ │ ├── dict/
│ │ │ ├── data.vue
│ │ │ └── index.vue
│ │ ├── menu/
│ │ │ └── index.vue
│ │ ├── notice/
│ │ │ └── index.vue
│ │ ├── role/
│ │ │ ├── authUser.vue
│ │ │ ├── index.vue
│ │ │ └── selectUser.vue
│ │ └── user/
│ │ ├── authRole.vue
│ │ ├── index.vue
│ │ └── profile/
│ │ ├── index.vue
│ │ ├── resetPwd.vue
│ │ ├── userAvatar.vue
│ │ └── userInfo.vue
│ └── tool/
│ ├── gen/
│ │ ├── basicInfoForm.vue
│ │ ├── editTable.vue
│ │ ├── genInfoForm.vue
│ │ ├── importTable.vue
│ │ └── index.vue
│ └── swagger/
│ └── index.vue
└── vue.config.js
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitattributes
================================================
================================================
FILE: .github/ISSUE_TEMPLATE/bug_report.yaml
================================================
name: 报告bug
description: 创建一个报告,请详细描述,来帮助我们改进
title: '[bug]: '
labels: [ "bug" ]
body:
# User's README and agreement
- type: markdown
attributes:
value: |
## 感谢您愿意填写错误回报!
## 以下是一些注意事项,请务必阅读让我们能够更容易处理
### ❗ | 查看[文档](https://oddfar.github.io/campus-doc/campus-imaotai)里是否有解决方案
### ❗ | 确定没有相同问题的 ISSUE 已被提出.
### ❗ | 如果是部署问题,在[讨论区](https://github.com/oddfar/campus-imaotai/discussions/categories/show-and-tell)里搜索是否存在相似的部署方案
## 如果您不知道如何有效、精准地表述,我们建议您先阅读《提问的智慧》
链接: [《提问的智慧》](https://github.com/ryanhanwu/How-To-Ask-Questions-The-Smart-Way/blob/main/README-zh_CN.md)
---
- type: checkboxes
id: terms
attributes:
label: 请确保您已阅读以上注意事项,并勾选下方的确认框。
options:
- label: "我已确认我已升级到最新版本(最新代码)测试过,问题依旧存在。"
required: true
- label: "我已经在 [Issue Tracker](https://github.com/oddfar/campus-imaotai/issues) 中找过我要提出的问题,没有找到相同问题的ISSUE。"
required: true
- label: "我理解并认可上述内容,并理解项目维护者精力有限,不遵循规则的 issue 可能会被无视或直接关闭"
required: true
# User's data
- type: markdown
attributes:
value: |
## 环境信息
请根据实际使用环境修改以下信息。
# Env | Version
- type: input
id: env-campus-version
attributes:
label: campus框架版本
- type: input
id: env-campus-imaotai-version
attributes:
label: 本项目 campus-imaotai 版本
validations:
required: true
# Env | VM Version
- type: dropdown
id: env-vm-ver
attributes:
label: 运行环境
description: 选择运行 campus-imaotai 的系统版本
options:
- Windows (64)
- Windows (32/x84)
- MacOS
- Linux
- Ubuntu
- CentOS
- ArchLinux
- UNIX (Android)
- 其它(请在下方说明)
validations:
required: true
# Env | VM Arch
- type: dropdown
id: env-vm-arch
attributes:
label: 运行架构
description: (可选) 选择运行 campus-imaotai 的系统架构
options:
- AMD64
- x86
- ARM [32] (别名:AArch32 / ARMv7)
- ARM [64] (别名:AArch64 / ARMv8)
- 其它
# Input | Reproduce
- type: textarea
id: problem-description
attributes:
label: 问题描述
description: |
1. 使用的什么功能,遇到什么问题
2. 返回的实际结果是什么
validations:
required: true
# Input | Expected result
- type: textarea
id: expected
attributes:
label: 期望的结果是什么?
validations:
required: true
# Optional | Reproduce code
- type: textarea
id: reproduce-code
attributes:
label: 简单的复现代码/链接(可选)
render: Java
# Optional | Logging
- type: textarea
id: logging
attributes:
label: 日志记录(可选)
description: |
截图或者日志记录都可以,比如 Docker 容器的日志。
Docker中查看容器的日志,可以使用 `docker logs container_id` 命令。
`container_id` 为目标容器的ID或名称
# Optional | Extra description
- type: textarea
id: extra-desc
attributes:
label: 补充说明(可选)
================================================
FILE: .github/ISSUE_TEMPLATE/feature_request.md
================================================
---
name: ⭐ 功能请求 —— Feature Request
about: 使用简练详细的语言描述希望加入的新功能
title: '[Feature] 请填写标题'
labels: enhancement
assignees: ''
---
## 例行检查
+ [ ] 我已确认目前没有类似 issue
+ [ ] 我已确认我已升级到最新版本
+ [ ] 我理解并愿意跟进此 issue,协助测试和提供反馈
+ [ ] 我理解并认可上述内容,并理解项目维护者精力有限,不遵循规则的 issue 可能会被无视或直接关闭
## 功能请求
<!--写一个清晰简洁的描述来表明功能或问题是什么。-->
## 解决方案和应用场景
<!-- 新功能的解决方案和应用场景。-->
================================================
FILE: .github/workflows/api.yml
================================================
name: api
on:
# 手动构建
workflow_dispatch:
push:
branches: [ "master","dev" ]
tags: [ 'v*','V*' ]
env:
REGISTRY: ghcr.io
IMAGE_NAME: ${{ github.repository }}
IMAGE_SUBNAME: api
WORKING_DIR: campus-modular
jobs:
java:
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
id-token: write
steps:
- name: Checkout 🛎️
uses: actions/checkout@v3
- name: Set up JDK 8
uses: actions/setup-java@v3
with:
java-version: '8'
distribution: 'temurin'
cache: maven
- name: Build with Maven
working-directory: ./
run: mvn -B package -P prod --file pom.xml
- name: Login to GHCR
if: github.event_name != 'pull_request'
uses: docker/login-action@v3
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Extract metadata (tags, labels) for Docker
id: meta
uses: docker/metadata-action@v5
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}-${{ env.IMAGE_SUBNAME }}
tags: |
type=ref,event=branch
type=ref,event=pr
type=semver,pattern={{version}}
type=semver,pattern={{major}}.{{minor}}
- name: Set up QEMU
uses: docker/setup-qemu-action@v2
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Build and push
uses: docker/build-push-action@v5
with:
context: ${{ env.WORKING_DIR }}
push: ${{ github.event_name != 'pull_request' }}
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
platforms: linux/amd64,linux/arm64,linux/arm/v7,linux/ppc64le
================================================
FILE: .github/workflows/release.yml
================================================
name: release
on:
# 手动构建
workflow_dispatch:
inputs:
version_name:
description: '版本号'
required: false
type: string
env:
API_WORKING_DIR: campus-modular
WEB_WORKING_DIR: vue_campus_admin
jobs:
release:
runs-on: ubuntu-latest
defaults:
run:
working-directory: ./
permissions: write-all
strategy:
matrix:
node-version: [16.x]
steps:
- name: Checkout 🛎️
uses: actions/checkout@v3
#--------------------构建jar--------------------
- name: Set up JDK 8
uses: actions/setup-java@v3
with:
java-version: '8'
distribution: 'temurin'
cache: maven
- name: Build with Maven
working-directory: ./
run: mvn -B package -P prod --file pom.xml
# 设置 Maven pom 版本环境变量
- name: Set Release version env variable
run: |
if [ ${{ github.event.inputs.version_name }} != "" ]; then
echo "RELEASE_VERSION=${{ github.event.inputs.version_name }}" >> $GITHUB_ENV
else
# 获取maven项目里的版本号
echo "RELEASE_VERSION=$(mvn help:evaluate -Dexpression=project.version -q -DforceStdout)" >> $GITHUB_ENV
fi
- name: Remane jar
working-directory: ${{ env.API_WORKING_DIR }}
run: |
cd target
# rename 's/(.*)\.jar/$1_${{ env.RELEASE_VERSION }}.jar/' *.jar
for file in *.jar; do mv "$file" "${file%.jar}_${{ env.RELEASE_VERSION }}.jar"; done
#--------------------构建前端--------------------
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node-version }}
- name: Cache ☕
id: cache
uses: actions/cache@v3
with:
path: vue_campus_admin/node_modules
key: ${{runner.os}}-npm-caches-${{ hashfiles('package-lock.json') }}
- name: Install 🔧
working-directory: ${{ env.WEB_WORKING_DIR }}
if: steps.cache.outputs.cache-hit != 'true'
run: npm install
- name: Build 🔧
working-directory: ${{ env.WEB_WORKING_DIR }}
run: |
npm run build:prod
- name: Tar dist file
working-directory: ${{ env.WEB_WORKING_DIR }}
run: |
tar -czvf dist_${{ env.RELEASE_VERSION }}.tar.gz dist
# 上传文件并发布 Release
- name: Create GitHub release
uses: marvinpinto/action-automatic-releases@latest
with:
repo_token: "${{ secrets.GITHUB_TOKEN }}"
automatic_release_tag: "v${{ env.RELEASE_VERSION }}"
prerelease: false
title: "v${{ env.RELEASE_VERSION }}"
files: |
${{ env.API_WORKING_DIR }}/target/*.jar
${{ env.WEB_WORKING_DIR }}/dist_*.tar.gz
================================================
FILE: .github/workflows/web.yml
================================================
name: web
on:
# 手动构建
workflow_dispatch:
push:
branches: [ "master","dev" ]
tags: [ 'v*','V*' ]
env:
REGISTRY: ghcr.io
IMAGE_NAME: ${{ github.repository }}
IMAGE_SUBNAME: web
WORKING_DIR: vue_campus_admin
jobs:
node:
runs-on: ubuntu-latest
defaults:
run:
working-directory: ${{ env.WORKING_DIR }}
permissions:
contents: read
packages: write
id-token: write
strategy:
matrix:
node-version: [16.x]
steps:
- name: Checkout 🛎️
uses: actions/checkout@v3
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node-version }}
- name: Cache ☕
id: cache
uses: actions/cache@v3
with:
path: vue_campus_admin/node_modules
key: ${{runner.os}}-npm-caches-${{ hashfiles('package-lock.json') }}
- name: Install 🔧
if: steps.cache.outputs.cache-hit != 'true'
run: npm install
- name: Build 🔧
run: |
npm run build:prod
- name: Login to GHCR
if: github.event_name != 'pull_request'
uses: docker/login-action@v3
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Extract metadata (tags, labels) for Docker
id: meta
uses: docker/metadata-action@v5
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}-${{ env.IMAGE_SUBNAME }}
tags: |
type=ref,event=branch
type=ref,event=pr
type=semver,pattern={{version}}
type=semver,pattern={{major}}.{{minor}}
- name: Set up QEMU
uses: docker/setup-qemu-action@v2
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: CP Docker conf
run: |
cp -r ../doc doc
- name: Build and push
uses: docker/build-push-action@v5
with:
context: ${{ env.WORKING_DIR }}
push: ${{ github.event_name != 'pull_request' }}
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
platforms: linux/386,linux/amd64,linux/arm64,linux/arm/v7,linux/ppc64le,linux/s390x
================================================
FILE: .gitignore
================================================
HELP.md
*.log
# Build Tools
target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/
!**/src/test/**/target/
### STS ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
### IntelliJ IDEA ###
.idea
*.iws
*.iml
*.ipr
### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/
!**/src/main/**/build/
!**/src/test/**/build/
### VS Code ###
.vscode/
~/
### mac ###
.DS_Store
.flattened-pom.xml
================================================
FILE: .run/campus-server.run.xml
================================================
<component name="ProjectRunConfigurationManager">
<configuration default="false" name="campus-server" type="docker-deploy" factoryName="dockerfile" server-name="Docker">
<deployment type="dockerfile">
<settings>
<option name="imageTag" value="campus/campus-imaotai:1.0.13" />
<option name="buildOnly" value="true" />
<option name="sourceFilePath" value="campus-modular/Dockerfile" />
</settings>
</deployment>
<method v="2" />
</configuration>
</component>
================================================
FILE: LICENSE
================================================
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
================================================
FILE: README.md
================================================
<p align="center"><a href="https://oddfar.com/" target="_blank" rel="noopener noreferrer"><img width="180" src="https://note.oddfar.com/img/web.png" alt="logo"></a></p>
<p align="center">
<a href="https://github.com/oddfar/campus-imaotai/stargazers"><img src="https://img.shields.io/github/stars/oddfar/campus-imaotai.svg"></a>
<a href="https://github.com/oddfar/campus-imaotai/blob/master/LICENSE"><img src="https://img.shields.io/github/license/oddfar/campus-imaotai.svg"></a>
</p>
<p align="center"> i茅台app自动预约,每日自动预约,支持docker一键部署</p>
<h2 align="center">Campus-imaotai</h2>
[笔记仓库](https://github.com/oddfar/notes) | [我的博客](https://oddfar.com)
## 项目介绍
i茅台app,每日自动预约茅台
- [x] 平台注册账号
- [x] 添加多个用户
- [x] 自动预约
- [x] 类型选择(本市出货量最大的门店,或位置附近门店)
- [x] 自动旅行
- [x] 首次旅行分享
- [x] 获取申购耐力值
- [x] 自定义时间/随机时间预约或旅行
- [x] 申购结果消息推送
此项目使用 **Campus** 进行编写:<https://github.com/oddfar/campus>
## 文档
- 文档:https://oddfar.github.io/campus-doc/campus-imaotai
- 视频:https://www.bilibili.com/video/BV1dj411H7oT
## 演示图
| i茅台预约 | |
| ------------------------------------------------------------ | ------------------------------------------------------------ |
|  |  |
| | |
|  |  |
## 贡献代码
若您有好的想法,发现一些 **BUG** 并修复了,欢迎提交 **Pull Request** 参与开源贡献
发起 pull request 请求,提交到 master 分支,等待作者合并
**感谢为这个项目贡献代码的朋友**
<a href="https://github.com/oddfar/campus-imaotai/graphs/contributors">
<img src="https://contrib.rocks/image?repo=oddfar/campus-imaotai" />
</a>
## star 趋势图

## 友情链接
- 本项目其他版
C#:<https://github.com/lisongkun/hygge-imaotai>
- 葫芦娃项目
yize8888-maotai:https://github.com/yize8888/maotai
## 声明
- 本项目涉及的数据由使用的个人或组织自行填写,本项目不对数据内容负责,包括但不限于数据的真实性、准确性、合法性。使用本项目所造成的一切后果,与本项目的所有贡献者无关,由使用的个人或组织完全承担。
- 本项目中涉及的第三方硬件、软件等,与本项目没有任何直接或间接的关系。本项目仅对部署和使用过程进行客观描述,不代表支持使用任何第三方硬件、软件。使用任何第三方硬件、软件,所造成的一切后果由使用的个人或组织承担,与本项目无关。
- 本项目中所有内容只供学习和研究使用,不得将本项目中任何内容用于违反国家/地区/组织等的法律法规或相关规定的其他用途。
- 所有基于本项目源代码,进行的任何修改,为其他个人或组织的自发行为,与本项目没有任何直接或间接的关系,所造成的一切后果亦与本项目无关。
- 所有直接或间接使用本项目的个人和组织,应24小时内完成学习和研究,并及时删除本项目中的所有内容。如对本项目的功能有需求,应自行开发相关功能。
- 本项目保留随时对免责声明进行补充或更改的权利,直接或间接使用本项目内容的个人或组织,视为接受本项目的特别声明。
## 鸣谢
> [IntelliJ IDEA](https://zh.wikipedia.org/zh-hans/IntelliJ_IDEA) 是一个在各个方面都最大程度地提高开发人员的生产力的 IDE,适用于 JVM 平台语言。
特别感谢 [JetBrains](https://www.jetbrains.com/?from=campus) 为开源项目提供免费的 [IntelliJ IDEA](https://www.jetbrains.com/idea/?from=campus) 等 IDE 的授权
[<img src="https://gcore.jsdelivr.net/gh/oddfar/campus-imaotai/.github/jetbrains-variant.png" width="200"/>](https://www.jetbrains.com/?from=campus)
[<img src="https://api.gitsponsors.com/api/badge/img?id=663458108" height="20">](https://api.gitsponsors.com/api/badge/link?p=B5hGpnclTmBJ3UZkEvdPGMFIr6mP8gfAX5zs5E7fvFS73izvYiiomLvUJSqDJ1PcIBTj9m7RAfJ+YSorEaTfDOXnqL5OsV3x5taooWf6/7j78cFmcDrgKyQYgKj41O17r5xkL3Nfi2mfpMBe5pGLpg==)
================================================
FILE: campus-admin/pom.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>campus</artifactId>
<groupId>com.oddfar.campus</groupId>
<version>${revision}</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>campus-admin</artifactId>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>com.oddfar.campus</groupId>
<artifactId>campus-framework</artifactId>
</dependency>
<!-- swagger3-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-boot-starter</artifactId>
</dependency>
<!-- 防止进入swagger页面报类型转换错误,排除3.0.0中的引用,手动增加1.6.2版本 -->
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-models</artifactId>
<version>1.6.2</version>
</dependency>
</dependencies>
</project>
================================================
FILE: campus-admin/src/main/java/com/oddfar/campus/admin/config/CaptchaConfig.java
================================================
package com.oddfar.campus.admin.config;
import com.google.code.kaptcha.impl.DefaultKaptcha;
import com.google.code.kaptcha.util.Config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.Properties;
import static com.google.code.kaptcha.Constants.*;
/**
* 验证码配置
*
* @author ruoyi
*/
@Configuration
public class CaptchaConfig {
@Bean(name = "captchaProducer")
public DefaultKaptcha getKaptchaBean() {
DefaultKaptcha defaultKaptcha = new DefaultKaptcha();
Properties properties = new Properties();
// 是否有边框 默认为true 我们可以自己设置yes,no
properties.setProperty(KAPTCHA_BORDER, "yes");
// 验证码文本字符颜色 默认为Color.BLACK
properties.setProperty(KAPTCHA_TEXTPRODUCER_FONT_COLOR, "black");
// 验证码图片宽度 默认为200
properties.setProperty(KAPTCHA_IMAGE_WIDTH, "160");
// 验证码图片高度 默认为50
properties.setProperty(KAPTCHA_IMAGE_HEIGHT, "60");
// 验证码文本字符大小 默认为40
properties.setProperty(KAPTCHA_TEXTPRODUCER_FONT_SIZE, "38");
// KAPTCHA_SESSION_KEY
properties.setProperty(KAPTCHA_SESSION_CONFIG_KEY, "kaptchaCode");
// 验证码文本字符长度 默认为5
properties.setProperty(KAPTCHA_TEXTPRODUCER_CHAR_LENGTH, "4");
// 验证码文本字体样式 默认为new Font("Arial", 1, fontSize), new Font("Courier", 1, fontSize)
properties.setProperty(KAPTCHA_TEXTPRODUCER_FONT_NAMES, "Arial,Courier");
// 图片样式 水纹com.google.code.kaptcha.impl.WaterRipple 鱼眼com.google.code.kaptcha.impl.FishEyeGimpy 阴影com.google.code.kaptcha.impl.ShadowGimpy
properties.setProperty(KAPTCHA_OBSCURIFICATOR_IMPL, "com.google.code.kaptcha.impl.ShadowGimpy");
Config config = new Config(properties);
defaultKaptcha.setConfig(config);
return defaultKaptcha;
}
@Bean(name = "captchaProducerMath")
public DefaultKaptcha getKaptchaBeanMath() {
DefaultKaptcha defaultKaptcha = new DefaultKaptcha();
Properties properties = new Properties();
// 是否有边框 默认为true 我们可以自己设置yes,no
properties.setProperty(KAPTCHA_BORDER, "yes");
// 边框颜色 默认为Color.BLACK
properties.setProperty(KAPTCHA_BORDER_COLOR, "105,179,90");
// 验证码文本字符颜色 默认为Color.BLACK
properties.setProperty(KAPTCHA_TEXTPRODUCER_FONT_COLOR, "blue");
// 验证码图片宽度 默认为200
properties.setProperty(KAPTCHA_IMAGE_WIDTH, "160");
// 验证码图片高度 默认为50
properties.setProperty(KAPTCHA_IMAGE_HEIGHT, "60");
// 验证码文本字符大小 默认为40
properties.setProperty(KAPTCHA_TEXTPRODUCER_FONT_SIZE, "35");
// KAPTCHA_SESSION_KEY
properties.setProperty(KAPTCHA_SESSION_CONFIG_KEY, "kaptchaCodeMath");
// 验证码文本生成器
properties.setProperty(KAPTCHA_TEXTPRODUCER_IMPL, "com.oddfar.campus.framework.config.KaptchaTextCreator");
// 验证码文本字符间距 默认为2
properties.setProperty(KAPTCHA_TEXTPRODUCER_CHAR_SPACE, "3");
// 验证码文本字符长度 默认为5
properties.setProperty(KAPTCHA_TEXTPRODUCER_CHAR_LENGTH, "6");
// 验证码文本字体样式 默认为new Font("Arial", 1, fontSize), new Font("Courier", 1, fontSize)
properties.setProperty(KAPTCHA_TEXTPRODUCER_FONT_NAMES, "Arial,Courier");
// 验证码噪点颜色 默认为Color.BLACK
properties.setProperty(KAPTCHA_NOISE_COLOR, "white");
// 干扰实现类
properties.setProperty(KAPTCHA_NOISE_IMPL, "com.google.code.kaptcha.impl.NoNoise");
// 图片样式 水纹com.google.code.kaptcha.impl.WaterRipple 鱼眼com.google.code.kaptcha.impl.FishEyeGimpy 阴影com.google.code.kaptcha.impl.ShadowGimpy
properties.setProperty(KAPTCHA_OBSCURIFICATOR_IMPL, "com.google.code.kaptcha.impl.ShadowGimpy");
Config config = new Config(properties);
defaultKaptcha.setConfig(config);
return defaultKaptcha;
}
}
================================================
FILE: campus-admin/src/main/java/com/oddfar/campus/admin/config/SwaggerConfig.java
================================================
package com.oddfar.campus.admin.config;
import io.swagger.models.auth.In;
import io.swagger.v3.oas.annotations.Operation;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.*;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spi.service.contexts.SecurityContext;
import springfox.documentation.spring.web.plugins.Docket;
import java.util.ArrayList;
import java.util.List;
/**
* Swagger2的接口配置
*
* @author ruoyi
*/
@Configuration
public class SwaggerConfig {
/**
* 是否开启swagger
*/
@Value("${swagger.enabled}")
private boolean enabled;
/**
* 版本情况
*/
@Value("${campus.version}")
private String version;
/**
* 创建API
*/
@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.OAS_30)
// 是否启用Swagger
.enable(enabled)
// 用来创建该API的基本信息,展示在文档的页面中(自定义展示的信息)
.apiInfo(apiInfo())
// 设置哪些接口暴露给Swagger展示
.select()
// 扫描所有有注解的api,用这种方式更灵活
.apis(RequestHandlerSelectors.withMethodAnnotation(Operation.class))
// 扫描指定包中的swagger注解
// .apis(RequestHandlerSelectors.basePackage("com.ruoyi.project.tool.swagger"))
// 扫描所有 .apis(RequestHandlerSelectors.any())
.paths(PathSelectors.any())
.build()
/* 设置安全模式,swagger可以设置访问token */
.securitySchemes(securitySchemes())
.securityContexts(securityContexts());
}
/**
* 安全模式,这里指定token通过Authorization头请求头传递
*/
private List<SecurityScheme> securitySchemes() {
List<SecurityScheme> apiKeyList = new ArrayList<SecurityScheme>();
apiKeyList.add(new ApiKey("Authorization", "Authorization", In.HEADER.toValue()));
return apiKeyList;
}
/**
* 安全上下文
*/
private List<SecurityContext> securityContexts() {
List<SecurityContext> securityContexts = new ArrayList<>();
securityContexts.add(
SecurityContext.builder()
.securityReferences(defaultAuth())
.operationSelector(o -> o.requestMappingPattern().matches("/.*"))
.build());
return securityContexts;
}
/**
* 默认的安全上引用
*/
private List<SecurityReference> defaultAuth() {
AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");
AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
authorizationScopes[0] = authorizationScope;
List<SecurityReference> securityReferences = new ArrayList<>();
securityReferences.add(new SecurityReference("Authorization", authorizationScopes));
return securityReferences;
}
/**
* 添加摘要信息
*/
private ApiInfo apiInfo() {
// 用ApiInfoBuilder进行定制
return new ApiInfoBuilder()
// 设置标题
.title("标题:Campus_接口文档")
// 描述
.description("描述:Campus的接口文档列表")
// 作者信息
.contact(new Contact("oddfar", null, null))
// 版本
.version("版本号:" + version)
.build();
}
}
================================================
FILE: campus-admin/src/main/java/com/oddfar/campus/admin/controller/monitor/SysLogininforController.java
================================================
package com.oddfar.campus.admin.controller.monitor;
import com.oddfar.campus.common.annotation.ApiResource;
import com.oddfar.campus.common.annotation.Log;
import com.oddfar.campus.common.domain.PageResult;
import com.oddfar.campus.common.domain.R;
import com.oddfar.campus.common.domain.entity.SysLoginLogEntity;
import com.oddfar.campus.common.enums.ResBizTypeEnum;
import com.oddfar.campus.framework.service.SysLoginLogService;
import com.oddfar.campus.framework.web.service.SysPasswordService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
/**
* 系统访问记录
*
* @author ruoyi
*/
@RestController
@RequestMapping("/monitor/logininfor")
@Log(openLog = false)
@ApiResource(name = "登录日志管理", resBizType = ResBizTypeEnum.SYSTEM)
public class SysLogininforController {
@Autowired
private SysLoginLogService logininforService;
@Autowired
private SysPasswordService passwordService;
@PreAuthorize("@ss.hasPermi('monitor:logininfor:list')")
@GetMapping(value = "/list",name = "登录日志-分类列表")
public R list(SysLoginLogEntity logininfor) {
PageResult<SysLoginLogEntity> page = logininforService.selectLogininforPage(logininfor);
return R.ok().put(page);
}
@PreAuthorize("@ss.hasPermi('monitor:logininfor:remove')")
@DeleteMapping(value = "/{infoIds}",name = "登录日志-删除")
public R remove(@PathVariable Long[] infoIds) {
return R.ok(logininforService.deleteLogininforByIds(infoIds));
}
@PreAuthorize("@ss.hasPermi('monitor:logininfor:remove')")
@DeleteMapping(value = "/clean",name = "登录日志-清空")
public R clean() {
logininforService.cleanLogininfor();
return R.ok();
}
@PreAuthorize("@ss.hasPermi('monitor:logininfor:unlock')")
@GetMapping(value = "/unlock/{userName}",name = "登录日志-解锁")
public R unlock(@PathVariable("userName") String userName) {
passwordService.clearLoginRecordCache(userName);
return R.ok();
}
}
================================================
FILE: campus-admin/src/main/java/com/oddfar/campus/admin/controller/monitor/SysOperlogController.java
================================================
package com.oddfar.campus.admin.controller.monitor;
import com.oddfar.campus.common.annotation.ApiResource;
import com.oddfar.campus.common.annotation.Log;
import com.oddfar.campus.common.domain.PageResult;
import com.oddfar.campus.common.domain.R;
import com.oddfar.campus.common.domain.entity.SysOperLogEntity;
import com.oddfar.campus.common.enums.ResBizTypeEnum;
import com.oddfar.campus.framework.service.SysOperLogService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
/**
* 操作日志记录
*/
@RestController
@RequestMapping("/monitor/operlog")
@Log(openLog = false)
@ApiResource(name = "操作日志管理", resBizType = ResBizTypeEnum.SYSTEM)
public class SysOperlogController {
@Autowired
private SysOperLogService operLogService;
@PreAuthorize("@ss.hasPermi('monitor:operlog:list')")
@GetMapping(value = "/list", name = "操作日志-分页")
public R list(SysOperLogEntity operLog) {
PageResult<SysOperLogEntity> page = operLogService.selectOperLogPage(operLog);
return R.ok().put(page);
}
@PreAuthorize("@ss.hasPermi('monitor:operlog:remove')")
@DeleteMapping(value = "/{operIds}", name = "操作日志-删除")
public R remove(@PathVariable Long[] operIds) {
return R.ok(operLogService.deleteOperLogByIds(operIds));
}
@PreAuthorize("@ss.hasPermi('monitor:operlog:remove')")
@DeleteMapping(value = "/clean", name = "操作日志-清空")
public R clean() {
operLogService.cleanOperLog();
return R.ok();
}
/**
* @author jamin
* 接下来要改造的是,将日志系统升级为elk 2025-03-21
*/
}
================================================
FILE: campus-admin/src/main/java/com/oddfar/campus/admin/controller/system/CaptchaController.java
================================================
package com.oddfar.campus.admin.controller.system;
import cn.hutool.core.codec.Base64;
import com.google.code.kaptcha.Producer;
import com.oddfar.campus.common.annotation.Log;
import com.oddfar.campus.common.constant.CacheConstants;
import com.oddfar.campus.common.constant.Constants;
import com.oddfar.campus.common.core.RedisCache;
import com.oddfar.campus.common.domain.R;
import com.oddfar.campus.common.utils.uuid.IdUtils;
import com.oddfar.campus.framework.api.sysconfig.ConfigExpander;
import com.oddfar.campus.framework.service.SysConfigService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.FastByteArrayOutputStream;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import javax.imageio.ImageIO;
import javax.servlet.http.HttpServletResponse;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.concurrent.TimeUnit;
/**
* 验证码操作处理
*
* @author ruoyi
*/
@RestController
@Log(openLog = false)
public class CaptchaController {
@Resource(name = "captchaProducer")
private Producer captchaProducer;
@Resource(name = "captchaProducerMath")
private Producer captchaProducerMath;
@Autowired
private RedisCache redisCache;
@Autowired
private SysConfigService configService;
/**
* 生成验证码
*/
@GetMapping(value = "/captchaImage", name = "生产验证码")
public R getCode(HttpServletResponse response) throws IOException {
R ajax = R.ok();
boolean captchaEnabled = configService.selectCaptchaEnabled();
ajax.put("captchaEnabled", captchaEnabled);
if (!captchaEnabled) {
return ajax;
}
// 保存验证码信息
String uuid = IdUtils.simpleUUID();
String verifyKey = CacheConstants.CAPTCHA_CODE_KEY + uuid;
String capStr = null, code = null;
BufferedImage image = null;
String captchaType = ConfigExpander.getLoginCaptchaType();
if ("math".equals(captchaType)) {
String capText = captchaProducerMath.createText();
capStr = capText.substring(0, capText.lastIndexOf("@"));
code = capText.substring(capText.lastIndexOf("@") + 1);
image = captchaProducerMath.createImage(capStr);
} else if ("char".equals(captchaType)) {
capStr = code = captchaProducer.createText();
image = captchaProducer.createImage(capStr);
}
redisCache.setCacheObject(verifyKey, code, Constants.CAPTCHA_EXPIRATION, TimeUnit.MINUTES);
// 转换流信息写出
FastByteArrayOutputStream os = new FastByteArrayOutputStream();
try {
ImageIO.write(image, "jpg", os);
} catch (IOException e) {
return R.error(e.getMessage());
}
ajax.put("uuid", uuid);
ajax.put("img", Base64.encode(os.toByteArray()));
return ajax;
}
}
================================================
FILE: campus-admin/src/main/java/com/oddfar/campus/admin/controller/system/SysApiResourceController.java
================================================
package com.oddfar.campus.admin.controller.system;
import com.oddfar.campus.common.annotation.ApiResource;
import com.oddfar.campus.common.domain.R;
import com.oddfar.campus.common.domain.entity.SysResourceEntity;
import com.oddfar.campus.common.enums.ResBizTypeEnum;
import com.oddfar.campus.framework.service.SysResourceService;
import com.oddfar.campus.framework.web.service.SysPermissionService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import static com.oddfar.campus.common.utils.SecurityUtils.getUserId;
@RestController
@RequestMapping("/system/resource")
@ApiResource(name = "资源管理", resBizType = ResBizTypeEnum.SYSTEM)
public class SysApiResourceController {
@Autowired
private SysResourceService resourceService;
@Autowired
private SysPermissionService permissionService;
/**
* 加载对应角色资源列表树
*/
@GetMapping(value = "/roleApiTreeselect/{roleId}", name = "资源管理-加载对应角色资源列表树")
public R roleMenuTreeSelect(@PathVariable("roleId") Long roleId) {
List<SysResourceEntity> resources = resourceService.selectApiResourceList(getUserId());
R ajax = R.ok();
ajax.put("checkedKeys", resourceService.selectResourceListByRoleId(roleId));
ajax.put("resources", resourceService.buildResourceTreeSelect(resources));
return ajax;
}
/**
* 修改对应角色api资源
*/
@PutMapping(value = "/roleApi", name = "修改对应角色api资源")
public R editRoleResource(Long roleId, Long[] resourceIds) {
resourceService.editRoleResource(roleId, resourceIds);
//更新redis缓存权限数据
permissionService.resetLoginUserRoleCache(roleId);
return R.ok();
}
}
================================================
FILE: campus-admin/src/main/java/com/oddfar/campus/admin/controller/system/SysConfigController.java
================================================
package com.oddfar.campus.admin.controller.system;
import com.oddfar.campus.common.annotation.ApiResource;
import com.oddfar.campus.common.domain.PageResult;
import com.oddfar.campus.common.domain.R;
import com.oddfar.campus.common.domain.entity.SysConfigEntity;
import com.oddfar.campus.common.enums.ResBizTypeEnum;
import com.oddfar.campus.framework.service.SysConfigService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
/**
* 配置管理
*/
@RestController
@RequestMapping("/system/config")
@ApiResource(name = "参数配置管理", resBizType = ResBizTypeEnum.SYSTEM)
public class SysConfigController {
@Autowired
private SysConfigService configService;
@GetMapping(value = "page", name = "参数配置管理-分页")
@PreAuthorize("@ss.hasPermi('system:config:list')")
public R page(SysConfigEntity sysConfigEntity) {
PageResult<SysConfigEntity> page = configService.page(sysConfigEntity);
return R.ok().put(page);
}
@GetMapping(value = "{id}", name = "参数配置管理-查询id信息")
@PreAuthorize("@ss.hasPermi('system:config:query')")
public R getInfo(@PathVariable("id") Long id) {
SysConfigEntity entity = configService.selectConfigById(id);
return R.ok().put(entity);
}
/**
* 根据参数键名查询参数值
*/
@GetMapping(value = "/configKey/{configKey:.+}")
public R getConfigKey(@PathVariable String configKey) {
return R.ok(configService.selectConfigByKey(configKey));
}
@PostMapping(name = "参数配置管理-新增")
@PreAuthorize("@ss.hasPermi('system:config:add')")
public R add(@Validated @RequestBody SysConfigEntity config) {
if (!configService.checkConfigKeyUnique(config)) {
return R.error("新增参数'" + config.getConfigName() + "'失败,参数键名已存在");
}
return R.ok(configService.insertConfig(config));
}
@PutMapping(name = "参数配置管理-修改")
@PreAuthorize("@ss.hasPermi('system:config:edit')")
public R edit(@Validated @RequestBody SysConfigEntity config) {
if (!configService.checkConfigKeyUnique(config)) {
return R.error("修改参数'" + config.getConfigName() + "'失败,参数键名已存在");
}
return R.ok(configService.updateConfig(config));
}
@DeleteMapping(value = "/{configIds}", name = "参数配置管理-删除")
@PreAuthorize("@ss.hasPermi('system:config:remove')")
public R remove(@PathVariable Long[] configIds) {
configService.deleteConfigByIds(configIds);
return R.ok();
}
/**
* 刷新参数缓存
*/
@PreAuthorize("@ss.hasPermi('system:config:remove')")
@DeleteMapping(value = "/refreshCache", name = "参数配置管理-刷新缓存")
public R refreshCache() {
configService.resetConfigCache();
return R.ok();
}
}
================================================
FILE: campus-admin/src/main/java/com/oddfar/campus/admin/controller/system/SysDictDataController.java
================================================
package com.oddfar.campus.admin.controller.system;
import com.oddfar.campus.common.annotation.Anonymous;
import com.oddfar.campus.common.annotation.ApiResource;
import com.oddfar.campus.common.domain.PageResult;
import com.oddfar.campus.common.domain.R;
import com.oddfar.campus.common.domain.entity.SysDictDataEntity;
import com.oddfar.campus.common.enums.ResBizTypeEnum;
import com.oddfar.campus.framework.service.SysDictDataService;
import com.oddfar.campus.framework.service.SysDictTypeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.util.StringUtils;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.List;
@RestController
@RequestMapping("/system/dict/data")
@ApiResource(name = "字典数据管理", resBizType = ResBizTypeEnum.SYSTEM)
public class SysDictDataController {
@Autowired
private SysDictDataService dictDataService;
@Autowired
private SysDictTypeService dictTypeService;
@PreAuthorize("@ss.hasPermi('system:dict:list')")
@GetMapping(value = "/list", name = "字典数据管理-分页")
public R page(SysDictDataEntity dictData) {
PageResult<SysDictDataEntity> page = dictDataService.page(dictData);
return R.ok().put(page);
}
/**
* 根据字典类型查询字典数据信息
*/
@GetMapping(value = "/type/{dictType}", name = "字典数据管理-根据字典类型查询字典数据信息")
@Anonymous
public R dictType(@PathVariable String dictType) {
List<SysDictDataEntity> data = dictTypeService.selectDictDataByType(dictType);
if (StringUtils.isEmpty(data)) {
data = new ArrayList<SysDictDataEntity>();
}
return R.ok().put(data);
}
/**
* 查询字典数据详细
*/
@PreAuthorize("@ss.hasPermi('system:dict:query')")
@GetMapping(value = "/{dictCode}", name = "字典数据管理-查询")
public R getInfo(@PathVariable Long dictCode) {
return R.ok(dictDataService.selectDictDataById(dictCode));
}
/**
* 新增字典类型
*/
@PreAuthorize("@ss.hasPermi('system:dict:add')")
@PostMapping(name = "字典数据管理-新增")
public R add(@Validated @RequestBody SysDictDataEntity dict) {
return R.ok(dictDataService.insertDictData(dict));
}
/**
* 修改保存字典类型
*/
@PreAuthorize("@ss.hasPermi('system:dict:edit')")
@PutMapping(name = "字典数据管理-修改")
public R edit(@Validated @RequestBody SysDictDataEntity dict) {
return R.ok(dictDataService.updateDictData(dict));
}
/**
* 删除字典类型
*/
@PreAuthorize("@ss.hasPermi('system:dict:remove')")
@DeleteMapping(value = "/{dictCodes}", name = "字典数据管理-删除")
public R remove(@PathVariable Long[] dictCodes) {
dictDataService.deleteDictDataByIds(dictCodes);
return R.ok();
}
}
================================================
FILE: campus-admin/src/main/java/com/oddfar/campus/admin/controller/system/SysDictTypeController.java
================================================
package com.oddfar.campus.admin.controller.system;
import com.oddfar.campus.common.annotation.ApiResource;
import com.oddfar.campus.common.domain.PageResult;
import com.oddfar.campus.common.domain.R;
import com.oddfar.campus.common.domain.entity.SysDictTypeEntity;
import com.oddfar.campus.common.enums.ResBizTypeEnum;
import com.oddfar.campus.framework.service.SysDictTypeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/system/dict/type")
@ApiResource(name = "字典类型管理", resBizType = ResBizTypeEnum.SYSTEM)
public class SysDictTypeController {
@Autowired
private SysDictTypeService dictTypeService;
@PreAuthorize("@ss.hasPermi('system:dict:list')")
@GetMapping(value = "/list", name = "字典类型管理-分页")
public R list(SysDictTypeEntity sysDictTypeEntity) {
PageResult<SysDictTypeEntity> page = dictTypeService.page(sysDictTypeEntity);
return R.ok().put(page);
}
/**
* 查询字典类型详细
*/
@PreAuthorize("@ss.hasPermi('system:dict:query')")
@GetMapping(value = "/{dictId}", name = "字典类型管理-查询")
public R getInfo(@PathVariable Long dictId) {
return R.ok(dictTypeService.selectDictTypeById(dictId));
}
/**
* 新增字典类型
*/
@PreAuthorize("@ss.hasPermi('system:dict:add')")
@PostMapping(name = "字典类型管理-新增")
public R add(@Validated @RequestBody SysDictTypeEntity dict) {
if (!dictTypeService.checkDictTypeUnique(dict)) {
return R.error("新增字典'" + dict.getDictName() + "'失败,字典类型已存在");
}
return R.ok(dictTypeService.insertDictType(dict));
}
/**
* 修改字典类型
*/
@PreAuthorize("@ss.hasPermi('system:dict:edit')")
@PutMapping(name = "字典类型管理-修改")
public R edit(@Validated @RequestBody SysDictTypeEntity dict) {
if (!dictTypeService.checkDictTypeUnique(dict)) {
return R.error("修改字典'" + dict.getDictName() + "'失败,字典类型已存在");
}
return R.ok(dictTypeService.updateDictType(dict));
}
/**
* 删除字典类型
*/
@PreAuthorize("@ss.hasPermi('system:dict:remove')")
@DeleteMapping(value = "/{dictIds}", name = "字典类型管理-删除")
public R remove(@PathVariable Long[] dictIds) {
dictTypeService.deleteDictTypeByIds(dictIds);
return R.ok();
}
/**
* 刷新字典缓存
*/
@PreAuthorize("@ss.hasPermi('system:dict:remove')")
@DeleteMapping(value = "/refreshCache", name = "字典类型管理-刷新")
public R refreshCache() {
dictTypeService.resetDictCache();
return R.ok();
}
/**
* 获取字典选择框列表
*/
@GetMapping(value = "/optionselect", name = "字典类型管理-获取字典选择框列表")
public R optionselect() {
List<SysDictTypeEntity> dictTypes = dictTypeService.selectDictTypeAll();
return R.ok(dictTypes);
}
}
================================================
FILE: campus-admin/src/main/java/com/oddfar/campus/admin/controller/system/SysIndexController.java
================================================
package com.oddfar.campus.admin.controller.system;
import com.oddfar.campus.common.config.CampusConfig;
import com.oddfar.campus.common.domain.R;
import com.oddfar.campus.common.utils.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
/**
* 首页
*
* @author oddfar
*/
@RestController
public class SysIndexController {
/**
* 系统基础配置
*/
@Autowired
private CampusConfig campusConfig;
/**
* 访问首页,提示语
*/
@RequestMapping("/")
public String index() {
return StringUtils.format("欢迎使用{}后台管理框架,当前版本:v{},请通过前端地址访问。", campusConfig.getName(), campusConfig.getVersion());
}
@Value("${campus.version}")
private String version;
@Value("${campus.frameworkVersion}")
private String frameworkVersion;
/**
* 版本情况
*/
@RequestMapping("/version")
public R version() {
HashMap<String, String> map = new HashMap<>();
map.put("version", version);
map.put("frameworkVersion", frameworkVersion);
return R.ok(map);
}
}
================================================
FILE: campus-admin/src/main/java/com/oddfar/campus/admin/controller/system/SysLoginController.java
================================================
package com.oddfar.campus.admin.controller.system;
import com.oddfar.campus.common.annotation.ApiResource;
import com.oddfar.campus.common.constant.Constants;
import com.oddfar.campus.common.domain.R;
import com.oddfar.campus.common.domain.entity.SysMenuEntity;
import com.oddfar.campus.common.domain.entity.SysUserEntity;
import com.oddfar.campus.common.domain.model.LoginBody;
import com.oddfar.campus.common.enums.ResBizTypeEnum;
import com.oddfar.campus.common.utils.SecurityUtils;
import com.oddfar.campus.framework.service.SysMenuService;
import com.oddfar.campus.framework.web.service.SysLoginService;
import com.oddfar.campus.framework.web.service.SysPermissionService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Set;
@RestController
@RequestMapping
@ApiResource(name = "登录路由", resBizType = ResBizTypeEnum.SYSTEM)
public class SysLoginController {
@Autowired
private SysMenuService menuService;
@Autowired
private SysLoginService loginService;
@Autowired
private SysPermissionService permissionService;
/**
* 登录方法
*
* @param loginBody 登录信息
* @return 结果
*/
@PostMapping(value = "/login", name = "登录方法")
public R login(@RequestBody LoginBody loginBody) {
R r = R.ok();
// 生成令牌
String token = loginService.login(loginBody.getUsername(), loginBody.getPassword(), loginBody.getCode(),
loginBody.getUuid());
r.put(Constants.TOKEN, token);
return r;
}
/**
* 获取用户信息
*
* @return 用户信息
*/
@GetMapping(value = "getInfo", name = "获取用户信息")
public R getInfo() {
SysUserEntity user = SecurityUtils.getLoginUser().getUser();
// 角色集合
Set<String> roles = permissionService.getRolePermission(user);
// 权限集合
Set<String> permissions = permissionService.getMenuPermission(user);
R ajax = R.ok();
ajax.put("user", user);
ajax.put("roles", roles);
ajax.put("permissions", permissions);
return ajax;
}
/**
* 获取路由信息
*
* @return 路由信息
*/
@GetMapping(value = "getRouters", name = "获取路由信息")
public R getRouters() {
Long userId = SecurityUtils.getUserId();
List<SysMenuEntity> menus = menuService.selectMenuTreeByUserId(userId);
return R.ok(menuService.buildMenus(menus));
}
}
================================================
FILE: campus-admin/src/main/java/com/oddfar/campus/admin/controller/system/SysMenuController.java
================================================
package com.oddfar.campus.admin.controller.system;
import com.oddfar.campus.common.annotation.ApiResource;
import com.oddfar.campus.common.constant.UserConstants;
import com.oddfar.campus.common.domain.R;
import com.oddfar.campus.common.domain.entity.SysMenuEntity;
import com.oddfar.campus.common.enums.ResBizTypeEnum;
import com.oddfar.campus.common.utils.StringUtils;
import com.oddfar.campus.framework.service.SysMenuService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import static com.oddfar.campus.common.utils.SecurityUtils.getUserId;
@RestController
@RequestMapping("/system/menu")
@ApiResource(name = "菜单管理", resBizType = ResBizTypeEnum.SYSTEM)
public class SysMenuController {
@Autowired
private SysMenuService menuService;
/**
* 获取菜单列表
*/
@PreAuthorize("@ss.hasPermi('system:menu:list')")
@GetMapping(value = "/list", name = "菜单管理-分页")
public R list(SysMenuEntity menu) {
List<SysMenuEntity> menus = menuService.selectMenuList(menu, getUserId());
return R.ok(menus);
}
/**
* 根据菜单编号获取详细信息
*/
@PreAuthorize("@ss.hasPermi('system:menu:query')")
@GetMapping(value = "/{menuId}", name = "菜单管理-查询")
public R getInfo(@PathVariable Long menuId) {
return R.ok(menuService.selectMenuById(menuId));
}
/**
* 获取菜单下拉树列表
*/
@GetMapping(value = "/treeselect", name = "菜单管理-获取菜单下拉树列表")
public R treeSelect(SysMenuEntity menu) {
List<SysMenuEntity> menus = menuService.selectMenuList(menu, getUserId());
return R.ok(menuService.buildMenuTreeSelect(menus));
}
/**
* 加载对应角色菜单列表树
*/
@GetMapping(value = "/roleMenuTreeselect/{roleId}", name = "菜单管理-加载对应角色菜单列表树")
public R roleMenuTreeselect(@PathVariable("roleId") Long roleId) {
List<SysMenuEntity> menus = menuService.selectMenuList(getUserId());
R ajax = R.ok();
ajax.put("checkedKeys", menuService.selectMenuListByRoleId(roleId));
ajax.put("menus", menuService.buildMenuTreeSelect(menus));
return ajax;
}
/**
* 新增菜单
*/
@PreAuthorize("@ss.hasPermi('system:menu:add')")
@PostMapping(name = "菜单管理-新增")
public R add(@Validated @RequestBody SysMenuEntity menu) {
if (!menuService.checkMenuNameUnique(menu)) {
return R.error("新增菜单'" + menu.getMenuName() + "'失败,菜单名称已存在");
} else if (UserConstants.YES_FRAME.equals(menu.getIsFrame()) && !StringUtils.ishttp(menu.getPath())) {
return R.error("新增菜单'" + menu.getMenuName() + "'失败,地址必须以http(s)://开头");
}
return R.ok(menuService.insertMenu(menu));
}
/**
* 修改菜单
*/
@PreAuthorize("@ss.hasPermi('system:menu:edit')")
@PutMapping(name = "菜单管理-修改")
public R edit(@Validated @RequestBody SysMenuEntity menu) {
if (!menuService.checkMenuNameUnique(menu)) {
return R.error("修改菜单'" + menu.getMenuName() + "'失败,菜单名称已存在");
} else if (UserConstants.YES_FRAME.equals(menu.getIsFrame()) && !StringUtils.ishttp(menu.getPath())) {
return R.error("修改菜单'" + menu.getMenuName() + "'失败,地址必须以http(s)://开头");
} else if (menu.getMenuId().equals(menu.getParentId())) {
return R.error("修改菜单'" + menu.getMenuName() + "'失败,上级菜单不能选择自己");
}
return R.ok(menuService.updateMenu(menu));
}
/**
* 删除菜单
*/
@PreAuthorize("@ss.hasPermi('system:menu:remove')")
@DeleteMapping(value = "/{menuId}", name = "菜单管理-删除")
public R remove(@PathVariable("menuId") Long menuId) {
if (menuService.hasChildByMenuId(menuId)) {
return R.error("存在子菜单,不允许删除");
}
if (menuService.checkMenuExistRole(menuId)) {
return R.error("菜单已分配,不允许删除");
}
return R.ok(menuService.deleteMenuById(menuId));
}
}
================================================
FILE: campus-admin/src/main/java/com/oddfar/campus/admin/controller/system/SysProfileController.java
================================================
package com.oddfar.campus.admin.controller.system;
import com.oddfar.campus.common.annotation.ApiResource;
import com.oddfar.campus.common.domain.R;
import com.oddfar.campus.common.domain.entity.SysUserEntity;
import com.oddfar.campus.common.domain.model.LoginUser;
import com.oddfar.campus.common.enums.ResBizTypeEnum;
import com.oddfar.campus.common.utils.SecurityUtils;
import com.oddfar.campus.common.utils.StringUtils;
import com.oddfar.campus.framework.api.file.FileUploadUtils;
import com.oddfar.campus.framework.api.file.MimeTypeUtils;
import com.oddfar.campus.framework.api.sysconfig.ConfigExpander;
import com.oddfar.campus.framework.service.SysUserService;
import com.oddfar.campus.framework.web.service.TokenService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import static com.oddfar.campus.common.utils.SecurityUtils.getLoginUser;
/**
* 个人信息 业务处理
*/
@RestController
@RequestMapping("/system/user/profile")
@ApiResource(name = "个人信息管理", resBizType = ResBizTypeEnum.SYSTEM)
public class SysProfileController {
@Autowired
private SysUserService userService;
@Autowired
private TokenService tokenService;
/**
* 个人信息
*/
@GetMapping(name = "个人信息管理-查询")
public R profile() {
LoginUser loginUser = getLoginUser();
SysUserEntity user = loginUser.getUser();
R ajax = R.ok(user);
ajax.put("roleGroup", userService.selectUserRoleGroup(loginUser.getUsername()));
return ajax;
}
/**
* 修改用户
*/
@PutMapping(name = "个人信息管理-修改")
public R updateProfile(@RequestBody SysUserEntity user) {
LoginUser loginUser = getLoginUser();
SysUserEntity sysUser = loginUser.getUser();
user.setUserName(sysUser.getUserName());
if (StringUtils.isNotEmpty(user.getPhonenumber())
&& !(userService.checkPhoneUnique(user))) {
return R.error("修改用户'" + user.getUserName() + "'失败,手机号码已存在");
}
if (StringUtils.isNotEmpty(user.getEmail())
&& !(userService.checkEmailUnique(user))) {
return R.error("修改用户'" + user.getUserName() + "'失败,邮箱账号已存在");
}
user.setUserId(sysUser.getUserId());
user.setPassword(null);
user.setAvatar(null);
if (userService.updateUserProfile(user) > 0) {
// 更新缓存用户信息
sysUser.setNickName(user.getNickName());
sysUser.setPhonenumber(user.getPhonenumber());
sysUser.setEmail(user.getEmail());
sysUser.setSex(user.getSex());
tokenService.setLoginUser(loginUser);
return R.ok();
}
return R.error("修改个人信息异常,请联系管理员");
}
/**
* 重置密码
*/
@PutMapping(value = "/updatePwd", name = "个人信息管理-重置密码")
public R updatePwd(String oldPassword, String newPassword) {
SysUserEntity user = userService.selectUserById(SecurityUtils.getUserId());
// LoginUser loginUser = getLoginUser();
String userName = user.getUserName();
String password = user.getPassword();
if (!SecurityUtils.matchesPassword(oldPassword, password)) {
return R.error("修改密码失败,旧密码错误");
}
if (SecurityUtils.matchesPassword(newPassword, password)) {
return R.error("新密码不能与旧密码相同");
}
if (userService.resetUserPwd(userName, SecurityUtils.encryptPassword(newPassword)) > 0) {
// // 更新缓存用户密码
// loginUser.getUser().setPassword(SecurityUtils.encryptPassword(newPassword));
// tokenService.setLoginUser(loginUser);
return R.ok();
}
return R.error("修改密码异常,请联系管理员");
}
/**
* 头像上传
*/
@PostMapping(value = "/avatar", name = "个人信息管理-头像上次")
public R avatar(@RequestParam("avatarfile") MultipartFile file) throws Exception {
if (!file.isEmpty()) {
LoginUser loginUser = getLoginUser();
String avatar = FileUploadUtils.upload(ConfigExpander.getAvatarPath(), file, MimeTypeUtils.IMAGE_EXTENSION);
if (userService.updateUserAvatar(loginUser.getUsername(), avatar)) {
R ajax = R.ok();
ajax.put("imgUrl", avatar);
// 更新缓存用户头像
loginUser.getUser().setAvatar(avatar);
tokenService.setLoginUser(loginUser);
return ajax;
}
}
return R.error("上传图片异常,请联系管理员");
}
}
================================================
FILE: campus-admin/src/main/java/com/oddfar/campus/admin/controller/system/SysRegisterController.java
================================================
package com.oddfar.campus.admin.controller.system;
import com.oddfar.campus.common.annotation.Anonymous;
import com.oddfar.campus.common.domain.R;
import com.oddfar.campus.common.domain.entity.SysUserEntity;
import com.oddfar.campus.common.domain.model.RegisterBody;
import com.oddfar.campus.common.utils.StringUtils;
import com.oddfar.campus.framework.service.SysConfigService;
import com.oddfar.campus.framework.service.SysUserService;
import com.oddfar.campus.framework.web.service.SysRegisterService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
/**
* 注册验证
*/
@RestController
public class SysRegisterController {
@Autowired
private SysRegisterService registerService;
@Autowired
private SysConfigService configService;
@Autowired
private SysUserService userService;
@PostMapping("/register")
public R register(@RequestBody RegisterBody user) {
if (!("true".equals(configService.selectConfigByKey("sys.account.registerUser")))) {
return R.error("当前系统没有开启注册功能!");
}
String msg = registerService.register(user);
return StringUtils.isEmpty(msg) ? R.ok() : R.error(msg);
}
@Anonymous
@GetMapping("/userNameUnique")
public R userNameUnique(String userName) {
SysUserEntity userEntity = new SysUserEntity();
userEntity.setUserName(userName);
return R.ok(userService.checkUserNameUnique(userEntity));
}
@Anonymous
@GetMapping("/emailUnique")
public R emailUnique(String email) {
SysUserEntity userEntity = new SysUserEntity();
userEntity.setEmail(email);
return R.ok(userService.checkEmailUnique(userEntity));
}
}
================================================
FILE: campus-admin/src/main/java/com/oddfar/campus/admin/controller/system/SysRoleController.java
================================================
package com.oddfar.campus.admin.controller.system;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.oddfar.campus.common.annotation.ApiResource;
import com.oddfar.campus.common.domain.PageResult;
import com.oddfar.campus.common.domain.R;
import com.oddfar.campus.common.domain.entity.SysRoleEntity;
import com.oddfar.campus.common.domain.entity.SysUserEntity;
import com.oddfar.campus.common.domain.entity.SysUserRoleEntity;
import com.oddfar.campus.common.domain.model.LoginUser;
import com.oddfar.campus.common.enums.ResBizTypeEnum;
import com.oddfar.campus.common.utils.SecurityUtils;
import com.oddfar.campus.common.utils.StringUtils;
import com.oddfar.campus.framework.service.SysRoleService;
import com.oddfar.campus.framework.service.SysUserService;
import com.oddfar.campus.framework.web.service.SysPermissionService;
import com.oddfar.campus.framework.web.service.TokenService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.Arrays;
@RestController
@RequestMapping("/system/role")
@ApiResource(name = "角色管理" , resBizType = ResBizTypeEnum.SYSTEM)
public class SysRoleController {
@Autowired
private SysRoleService roleService;
@Autowired
private SysUserService userService;
@Autowired
private SysPermissionService permissionService;
@Autowired
private TokenService tokenService;
@PreAuthorize("@ss.hasPermi('system:role:list')")
@GetMapping("/list")
public R list(SysRoleEntity role) {
PageResult<SysRoleEntity> list = roleService.page(role);
return R.ok().put(list);
}
/**
* 根据角色编号获取详细信息
*/
@PreAuthorize("@ss.hasPermi('system:role:query')")
@GetMapping(value = "/{roleId}")
public R getInfo(@PathVariable Long roleId) {
return R.ok(roleService.selectRoleById(roleId));
}
/**
* 新增角色
*/
@PreAuthorize("@ss.hasPermi('system:role:add')")
@PostMapping
public R add(@Validated @RequestBody SysRoleEntity role) {
if (!roleService.checkRoleNameUnique(role)) {
return R.error("新增角色'" + role.getRoleName() + "'失败,角色名称已存在");
} else if (!roleService.checkRoleKeyUnique(role)) {
return R.error("新增角色'" + role.getRoleName() + "'失败,角色权限已存在");
}
return R.ok(roleService.insertRole(role));
}
/**
* 修改保存角色
*/
@PreAuthorize("@ss.hasPermi('system:role:edit')")
@PutMapping
public R edit(@Validated @RequestBody SysRoleEntity role) {
roleService.checkRoleAllowed(role);
if (!roleService.checkRoleNameUnique(role)) {
return R.error("修改角色'" + role.getRoleName() + "'失败,角色名称已存在");
} else if (!roleService.checkRoleKeyUnique(role)) {
return R.error("修改角色'" + role.getRoleName() + "'失败,角色权限已存在");
}
if (roleService.updateRole(role) > 0) {
// 更新缓存用户权限
LoginUser loginUser = SecurityUtils.getLoginUser();
if (StringUtils.isNotNull(loginUser.getUser()) && !loginUser.getUser().isAdmin()) {
loginUser.setPermissions(permissionService.getMenuPermission(loginUser.getUser()));
loginUser.setUser(userService.selectUserByUserName(loginUser.getUser().getUserName()));
tokenService.setLoginUser(loginUser);
}
permissionService.resetLoginUserRoleCache(role.getRoleId());
return R.ok();
}
return R.error("修改角色'" + role.getRoleName() + "'失败,请联系管理员");
}
/**
* 状态修改
*/
@PreAuthorize("@ss.hasPermi('system:role:edit')")
@PutMapping("/changeStatus")
public R changeStatus(@RequestBody SysRoleEntity role) {
roleService.checkRoleAllowed(role);
roleService.updateRoleStatus(role);
//更新redis缓存权限数据
permissionService.resetLoginUserRoleCache(role.getRoleId());
return R.ok();
}
/**
* 删除角色
*/
@PreAuthorize("@ss.hasPermi('system:role:remove')")
@DeleteMapping("/{roleIds}")
public R remove(@PathVariable Long[] roleIds) {
roleService.deleteRoleByIds(roleIds);
//更新redis缓存权限数据
Arrays.stream(roleIds).forEach(id -> permissionService.resetLoginUserRoleCache(id));
return R.ok();
}
/**
* 查询已分配用户角色列表
*/
@PreAuthorize("@ss.hasPermi('system:role:list')")
@GetMapping("/authUser/allocatedList")
public R allocatedList(SysUserEntity user) {
Page<SysUserEntity> page = userService.selectAllocatedList(user);
return R.ok().put(page);
}
/**
* 查询未分配用户角色列表
*/
@PreAuthorize("@ss.hasPermi('system:role:list')")
@GetMapping("/authUser/unallocatedList")
public R unallocatedList(SysUserEntity user) {
Page<SysUserEntity> page = userService.selectUnallocatedList(user);
return R.ok().put(page);
}
/**
* 取消授权用户
*/
@PreAuthorize("@ss.hasPermi('system:role:edit')")
@PutMapping("/authUser/cancel")
public R cancelAuthUser(@RequestBody SysUserRoleEntity userRole) {
int i = roleService.deleteAuthUser(userRole);
//更新redis缓存权限数据
permissionService.resetLoginUserRoleCache(userRole.getRoleId());
return R.ok(i);
}
/**
* 批量取消授权用户
*/
@PreAuthorize("@ss.hasPermi('system:role:edit')")
@PutMapping("/authUser/cancelAll")
public R cancelAuthUserAll(Long roleId, Long[] userIds) {
int i = roleService.deleteAuthUsers(roleId, userIds);
//更新redis缓存权限数据
permissionService.resetLoginUserRoleCache(roleId);
return R.ok(i);
}
/**
* 批量选择用户授权
*/
@PreAuthorize("@ss.hasPermi('system:role:edit')")
@PutMapping("/authUser/selectAll")
public R selectAuthUserAll(Long roleId, Long[] userIds) {
return R.ok(roleService.insertAuthUsers(roleId, userIds));
}
}
================================================
FILE: campus-admin/src/main/java/com/oddfar/campus/admin/controller/system/SysUserController.java
================================================
package com.oddfar.campus.admin.controller.system;
import com.oddfar.campus.common.annotation.ApiResource;
import com.oddfar.campus.common.domain.PageResult;
import com.oddfar.campus.common.domain.R;
import com.oddfar.campus.common.domain.entity.SysRoleEntity;
import com.oddfar.campus.common.domain.entity.SysUserEntity;
import com.oddfar.campus.common.enums.ResBizTypeEnum;
import com.oddfar.campus.common.utils.SecurityUtils;
import com.oddfar.campus.common.utils.StringUtils;
import com.oddfar.campus.framework.service.SysRoleService;
import com.oddfar.campus.framework.service.SysUserService;
import com.oddfar.campus.framework.web.service.SysPermissionService;
import org.apache.commons.lang3.ArrayUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
/**
* 用户管理
*
* @author oddfar
*/
@RestController
@RequestMapping("/system/user")
@ApiResource(name = "用户管理", resBizType = ResBizTypeEnum.SYSTEM)
public class SysUserController {
@Autowired
private SysUserService userService;
@Autowired
private SysRoleService roleService;
@Autowired
private SysPermissionService permissionService;
/**
* 分页
*/
@GetMapping("list")
@PreAuthorize("@ss.hasPermi('system:user:list')")
public R page(SysUserEntity sysUserEntity) {
PageResult<SysUserEntity> page = userService.page(sysUserEntity);
return R.ok().put(page);
}
/**
* 信息
*/
@GetMapping({"{userId}", "/"})
@PreAuthorize("@ss.hasPermi('system:user:query')")
public R getInfo(@PathVariable(value = "userId", required = false) Long userId) {
R res = R.ok();
List<SysRoleEntity> roles = roleService.selectRoleAll();
res.put("roles", SysUserEntity.isAdmin(userId) ? roles : roles.stream().filter(r -> !r.isAdmin()).collect(Collectors.toList()));
if (StringUtils.isNotNull(userId)) {
SysUserEntity sysUser = userService.selectUserById(userId);
res.put("data", sysUser);
res.put("roleIds", sysUser.getRoles().stream().map(SysRoleEntity::getRoleId).filter(Objects::nonNull).collect(Collectors.toList()));
}
return res;
}
/**
* 新增用户
*/
@PostMapping
@PreAuthorize("@ss.hasPermi('system:user:add')")
public R add(@Validated @RequestBody SysUserEntity sysUserEntity) {
userService.insertUser(sysUserEntity);
return R.ok();
}
/**
* 修改
*/
@PutMapping
@PreAuthorize("@ss.hasPermi('system:user:edit')")
public R update(@Validated @RequestBody SysUserEntity user) {
userService.checkUserAllowed(user);
if (!(userService.checkUserNameUnique(user))) {
return R.error("修改用户'" + user.getUserName() + "'失败,登录账号已存在");
} else if (StringUtils.isNotEmpty(user.getPhonenumber())
&& !(userService.checkPhoneUnique(user))) {
return R.error("修改用户'" + user.getUserName() + "'失败,手机号码已存在");
} else if (StringUtils.isNotEmpty(user.getEmail())
&& !(userService.checkEmailUnique(user))) {
return R.error("修改用户'" + user.getUserName() + "'失败,邮箱账号已存在");
}
user.setPassword(null);
return R.ok(userService.updateUser(user));
}
/**
* 删除
*/
@DeleteMapping("/{userIds}")
@PreAuthorize("@ss.hasPermi('system:user:remove')")
public R remove(@PathVariable Long[] userIds) {
if (ArrayUtils.contains(userIds, SecurityUtils.getUserId())) {
return R.error("当前用户不能删除");
}
return R.ok(userService.deleteUserByIds(userIds));
}
/**
* 根据用户编号获取授权角色
*/
@PreAuthorize("@ss.hasPermi('system:user:query')")
@GetMapping("/authRole/{userId}")
public R authRole(@PathVariable("userId") Long userId) {
R res = R.ok();
SysUserEntity user = userService.selectUserById(userId);
List<SysRoleEntity> roles = roleService.selectRolesByUserId(userId);
res.put("user", user);
res.put("roles", SysUserEntity.isAdmin(userId) ? roles : roles.stream().filter(r -> !r.isAdmin()).collect(Collectors.toList()));
return res;
}
/**
* 用户授权角色
*/
@PreAuthorize("@ss.hasPermi('system:user:edit')")
@PutMapping("/authRole")
public R insertAuthRole(Long userId, Long[] roleIds) {
if (!SysUserEntity.isAdmin(userId)) {
userService.insertUserAuth(userId, roleIds);
return R.ok();
} else {
return R.error("不可操作超级管理员");
}
}
/**
* 重置密码
*/
@PreAuthorize("@ss.hasPermi('system:user:resetPwd')")
@PutMapping("/resetPwd")
public R resetPwd(@RequestBody SysUserEntity user) {
userService.checkUserAllowed(user);
user.setPassword(SecurityUtils.encryptPassword(user.getPassword()));
return R.ok(userService.resetPwd(user));
}
/**
* 状态修改
*/
@PreAuthorize("@ss.hasPermi('system:user:edit')")
@PutMapping("/changeStatus")
public R changeStatus(@RequestBody SysUserEntity user) {
userService.checkUserAllowed(user);
userService.updateUserStatus(user);
permissionService.resetUserRoleAuthCache(user.getUserId());
return R.ok();
}
}
================================================
FILE: campus-common/pom.xml
================================================
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>campus</artifactId>
<groupId>com.oddfar.campus</groupId>
<version>${revision}</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>campus-common</artifactId>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<!-- Token生成与解析-->
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
</dependency>
<!--常用工具类 -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
</dependency>
<!-- 文件上传工具类 -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
</dependency>
<!-- redis 缓存操作 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<!-- spring2.X集成redis所需common-pool2-->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</dependency>
<!-- spring security 安全认证 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<!--validation校验-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
<!-- excel工具 -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
</dependency>
<!--lombk-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<!--mybatisPlus依赖-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
</dependency>
<!-- sql性能分析插件 -->
<dependency>
<groupId>p6spy</groupId>
<artifactId>p6spy</artifactId>
</dependency>
<!-- dynamic-datasource 多数据源-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>dynamic-datasource-spring-boot-starter</artifactId>
</dependency>
<!--fastjson-->
<dependency>
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2</artifactId>
</dependency>
<!--validation-->
<dependency>
<groupId>jakarta.validation</groupId>
<artifactId>jakarta.validation-api</artifactId>
<scope>provided</scope> <!-- 设置为 provided,主要是 PageParam 使用到 -->
</dependency>
<!--hutool-->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
</dependency>
<!--mapstruct-->
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
</dependency>
<!-- 解析客户端操作系统、浏览器等 -->
<dependency>
<groupId>eu.bitwalker</groupId>
<artifactId>UserAgentUtils</artifactId>
</dependency>
<!-- servlet包 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
</dependency>
</dependencies>
</project>
================================================
FILE: campus-common/src/main/java/com/oddfar/campus/common/annotation/Anonymous.java
================================================
package com.oddfar.campus.common.annotation;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* 匿名访问不鉴权注解
*
* @author ruoyi
*/
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Anonymous {
}
================================================
FILE: campus-common/src/main/java/com/oddfar/campus/common/annotation/ApiResource.java
================================================
package com.oddfar.campus.common.annotation;
import com.oddfar.campus.common.enums.ResBizTypeEnum;
import java.lang.annotation.*;
/**
* 资源标识
*/
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface ApiResource {
/**
* 资源编码唯一标识
* 可不填写此注解属性,默认生成的编码标识为: 控制器类名称 + 分隔符 + 方法名称
*/
String code() default "";
/**
* 应用编码
* 用于区分不同业务
*/
String appCode() default "";
/**
* 资源名称(必填项)
*/
String name() default "";
/**
* 资源的类型,系统类还是业务类资源
*/
ResBizTypeEnum resBizType() default ResBizTypeEnum.BUSINESS;
}
================================================
FILE: campus-common/src/main/java/com/oddfar/campus/common/annotation/Log.java
================================================
package com.oddfar.campus.common.annotation;
import java.lang.annotation.*;
/**
* 用来标记在控制器类或方法上,进行判断是否需要对接口进行日志记录
*/
@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface Log {
/**
* 是否进行日志记录,默认开启
*/
boolean openLog() default true;
}
================================================
FILE: campus-common/src/main/java/com/oddfar/campus/common/annotation/RepeatSubmit.java
================================================
package com.oddfar.campus.common.annotation;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* 自定义注解防止表单重复提交
*
* @author ruoyi
*/
@Inherited
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface RepeatSubmit {
/**
* 间隔时间(ms),小于此时间视为重复提交
*/
public int interval() default 5000;
/**
* 提示消息
*/
public String message() default "不允许重复提交,请稍候再试";
}
================================================
FILE: campus-common/src/main/java/com/oddfar/campus/common/annotation/Sensitive.java
================================================
package com.oddfar.campus.common.annotation;
import com.fasterxml.jackson.annotation.JacksonAnnotationsInside;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.oddfar.campus.common.config.SensitiveSerializer;
import com.oddfar.campus.common.enums.SensitiveStrategy;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* 数据脱敏注解
*
* @author zhujie
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
@JacksonAnnotationsInside
@JsonSerialize(using = SensitiveSerializer.class)
public @interface Sensitive {
SensitiveStrategy strategy();
}
================================================
FILE: campus-common/src/main/java/com/oddfar/campus/common/config/CampusConfig.java
================================================
package com.oddfar.campus.common.config;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
/**
* 首页
*
* @author oddfar
*/
@Data
@Component
@ConfigurationProperties(prefix = "campus")
public class CampusConfig {
/**
* 项目名称
*/
private String name;
/**
* 版本
*/
private String version;
}
================================================
FILE: campus-common/src/main/java/com/oddfar/campus/common/config/FastJson2JsonRedisSerializer.java
================================================
package com.oddfar.campus.common.config;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONReader;
import com.alibaba.fastjson2.JSONWriter;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.data.redis.serializer.SerializationException;
import java.nio.charset.Charset;
/**
* Redis使用FastJson序列化
*
* @author ruoyi
*/
public class FastJson2JsonRedisSerializer<T> implements RedisSerializer<T>
{
public static final Charset DEFAULT_CHARSET = Charset.forName("UTF-8");
private Class<T> clazz;
public FastJson2JsonRedisSerializer(Class<T> clazz)
{
super();
this.clazz = clazz;
}
@Override
public byte[] serialize(T t) throws SerializationException
{
if (t == null)
{
return new byte[0];
}
return JSON.toJSONString(t, JSONWriter.Feature.WriteClassName).getBytes(DEFAULT_CHARSET);
}
@Override
public T deserialize(byte[] bytes) throws SerializationException
{
if (bytes == null || bytes.length <= 0)
{
return null;
}
String str = new String(bytes, DEFAULT_CHARSET);
return JSON.parseObject(str, clazz, JSONReader.Feature.SupportAutoType);
}
}
================================================
FILE: campus-common/src/main/java/com/oddfar/campus/common/config/RedisConfig.java
================================================
package com.oddfar.campus.common.config;
import org.springframework.cache.annotation.CachingConfigurerSupport;
import org.springframework.cache.annotation.EnableCaching;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.connection.RedisConnectionFactory;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.script.DefaultRedisScript;
import org.springframework.data.redis.serializer.StringRedisSerializer;
/**
* redis配置
*
* @author ruoyi
*/
@Configuration
@EnableCaching
public class RedisConfig extends CachingConfigurerSupport {
@Bean
@SuppressWarnings(value = {"unchecked", "rawtypes"})
public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory connectionFactory) {
RedisTemplate<Object, Object> template = new RedisTemplate<>();
template.setConnectionFactory(connectionFactory);
FastJson2JsonRedisSerializer serializer = new FastJson2JsonRedisSerializer(Object.class);
// 使用StringRedisSerializer来序列化和反序列化redis的key值
template.setKeySerializer(new StringRedisSerializer());
template.setValueSerializer(serializer);
// Hash的key也采用StringRedisSerializer的序列化方式
template.setHashKeySerializer(new StringRedisSerializer());
template.setHashValueSerializer(serializer);
template.afterPropertiesSet();
return template;
}
@Bean
public DefaultRedisScript<Long> limitScript() {
DefaultRedisScript<Long> redisScript = new DefaultRedisScript<>();
redisScript.setScriptText(limitScriptText());
redisScript.setResultType(Long.class);
return redisScript;
}
/**
* 限流脚本
*/
private String limitScriptText() {
return "local key = KEYS[1]\n" +
"local count = tonumber(ARGV[1])\n" +
"local time = tonumber(ARGV[2])\n" +
"local current = redis.call('get', key);\n" +
"if current and tonumber(current) > count then\n" +
" return tonumber(current);\n" +
"end\n" +
"current = redis.call('incr', key)\n" +
"if tonumber(current) == 1 then\n" +
" redis.call('expire', key, time)\n" +
"end\n" +
"return tonumber(current);";
}
}
================================================
FILE: campus-common/src/main/java/com/oddfar/campus/common/config/SensitiveSerializer.java
================================================
package com.oddfar.campus.common.config;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.databind.BeanProperty;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.JsonSerializer;
import com.fasterxml.jackson.databind.SerializerProvider;
import com.fasterxml.jackson.databind.ser.ContextualSerializer;
import com.oddfar.campus.common.annotation.Sensitive;
import com.oddfar.campus.common.enums.SensitiveStrategy;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeansException;
import java.io.IOException;
import java.util.Objects;
/**
* 数据脱敏json序列化工具
*
* @author Yjoioooo
*/
@Slf4j
public class SensitiveSerializer extends JsonSerializer<String> implements ContextualSerializer {
private SensitiveStrategy strategy;
@Override
public void serialize(String value, JsonGenerator gen, SerializerProvider serializers) throws IOException {
try {
gen.writeString(strategy.desensitizer().apply(value));
} catch (BeansException e) {
log.error("脱敏实现不存在, 采用默认处理 => {}", e.getMessage());
gen.writeString(value);
}
}
@Override
public JsonSerializer<?> createContextual(SerializerProvider prov, BeanProperty property) throws JsonMappingException {
Sensitive annotation = property.getAnnotation(Sensitive.class);
if (Objects.nonNull(annotation) && Objects.equals(String.class, property.getType().getRawClass())) {
this.strategy = annotation.strategy();
return this;
}
return prov.findValueSerializer(property.getType(), property);
}
}
================================================
FILE: campus-common/src/main/java/com/oddfar/campus/common/constant/CacheConstants.java
================================================
package com.oddfar.campus.common.constant;
/**
* 缓存的key 常量
*/
public class CacheConstants {
/**
* 登录用户 redis token key
*/
public static final String LOGIN_TOKEN_KEY = "login_tokens:";
/**
* 登录用户 redis userId key
*/
public static final String LOGIN_USER_KEY = "login_user:";
/**
* 验证码 redis key
*/
public static final String CAPTCHA_CODE_KEY = "captcha_codes:";
/**
* 参数管理 cache key
*/
public static final String SYS_CONFIG_KEY = "sys_config:";
/**
* 字典管理 cache key
*/
public static final String SYS_DICT_KEY = "sys_dict:";
/**
* 防重提交 redis key
*/
public static final String REPEAT_SUBMIT_KEY = "repeat_submit:";
/**
* 限流 redis key
*/
public static final String RATE_LIMIT_KEY = "rate_limit:";
/**
* 登录账户密码错误次数 redis key
*/
public static final String PWD_ERR_CNT_KEY = "pwd_err_cnt:";
}
================================================
FILE: campus-common/src/main/java/com/oddfar/campus/common/constant/Constants.java
================================================
package com.oddfar.campus.common.constant;
/**
* 通用常量信息
*
* @author ruoyi
*/
public class Constants {
/**
* UTF-8 字符集
*/
public static final String UTF8 = "UTF-8";
/**
* GBK 字符集
*/
public static final String GBK = "GBK";
/**
* www主域
*/
public static final String WWW = "www.";
/**
* http请求
*/
public static final String HTTP = "http://";
/**
* https请求
*/
public static final String HTTPS = "https://";
/**
* 通用成功标识
*/
public static final String SUCCESS = "0";
/**
* 通用失败标识
*/
public static final String FAIL = "1";
/**
* 是
*/
public static final String YES = "Y";
/**
* 否
*/
public static final String NO = "N";
/**
* 登录成功
*/
public static final String LOGIN_SUCCESS = "Success";
/**
* 注销
*/
public static final String LOGOUT = "Logout";
/**
* 注册
*/
public static final String REGISTER = "Register";
/**
* 登录失败
*/
public static final String LOGIN_FAIL = "Error";
/**
* 验证码有效期(分钟)
*/
public static final Integer CAPTCHA_EXPIRATION = 2;
/**
* 令牌
*/
public static final String TOKEN = "token";
/**
* 用户id
*/
public static final String USER_ID = "userId";
/**
* 令牌前缀
*/
public static final String TOKEN_PREFIX = "Bearer ";
/**
* 令牌前缀
*/
public static final String LOGIN_USER_KEY = "login_user_key";
/**
* 用户ID
*/
public static final String JWT_USERID = "userid";
/**
* 用户名称
*/
public static final String JWT_USERNAME = "sub";
/**
* 用户头像
*/
public static final String JWT_AVATAR = "avatar";
/**
* 创建时间
*/
public static final String JWT_CREATED = "created";
/**
* 用户权限
*/
public static final String JWT_AUTHORITIES = "authorities";
/**
* 资源映射路径 前缀
*/
public static final String RESOURCE_PREFIX = "/profile";
/**
* RMI 远程方法调用
*/
public static final String LOOKUP_RMI = "rmi:";
/**
* LDAP 远程方法调用
*/
public static final String LOOKUP_LDAP = "ldap:";
/**
* LDAPS 远程方法调用
*/
public static final String LOOKUP_LDAPS = "ldaps:";
/**
* 定时任务白名单配置(仅允许访问的包名,如其他需要可以自行添加)
*/
public static final String[] JOB_WHITELIST_STR = {"com.ruoyi"};
/**
* 定时任务违规的字符
*/
public static final String[] JOB_ERROR_STR = {"java.net.URL", "javax.naming.InitialContext", "org.yaml.snakeyaml",
"org.springframework", "org.apache", "com.ruoyi.common.utils.file"};
}
================================================
FILE: campus-common/src/main/java/com/oddfar/campus/common/constant/HttpStatus.java
================================================
package com.oddfar.campus.common.constant;
/**
* 返回状态码
*
* @author ruoyi
*/
public class HttpStatus {
/**
* 操作成功
*/
public static final int SUCCESS = 200;
/**
* 对象创建成功
*/
public static final int CREATED = 201;
/**
* 请求已经被接受
*/
public static final int ACCEPTED = 202;
/**
* 操作已经执行成功,但是没有返回数据
*/
public static final int NO_CONTENT = 204;
/**
* 资源已被移除
*/
public static final int MOVED_PERM = 301;
/**
* 重定向
*/
public static final int SEE_OTHER = 303;
/**
* 资源没有被修改
*/
public static final int NOT_MODIFIED = 304;
/**
* 参数列表错误(缺少,格式不匹配)
*/
public static final int BAD_REQUEST = 400;
/**
* 未授权
*/
public static final int UNAUTHORIZED = 401;
/**
* 访问受限,授权过期
*/
public static final int FORBIDDEN = 403;
/**
* 资源,服务未找到
*/
public static final int NOT_FOUND = 404;
/**
* 不允许的http方法
*/
public static final int BAD_METHOD = 405;
/**
* 资源冲突,或者资源被锁
*/
public static final int CONFLICT = 409;
/**
* 不支持的数据,媒体类型
*/
public static final int UNSUPPORTED_TYPE = 415;
/**
* 系统内部错误
*/
public static final int ERROR = 500;
/**
* 接口未实现
*/
public static final int NOT_IMPLEMENTED = 501;
}
================================================
FILE: campus-common/src/main/java/com/oddfar/campus/common/constant/UserConstants.java
================================================
package com.oddfar.campus.common.constant;
/**
* 用户常量信息
*
* @author ruoyi
*/
public class UserConstants {
/**
* 平台内系统用户的唯一标志
*/
public static final String SYS_USER = "SYS_USER";
/**
* 正常状态
*/
public static final String NORMAL = "0";
/**
* 异常状态
*/
public static final String EXCEPTION = "1";
/**
* 用户封禁状态
*/
public static final String USER_DISABLE = "1";
/**
* 角色封禁状态
*/
public static final String ROLE_DISABLE = "1";
/**
* 字典正常状态
*/
public static final String DICT_NORMAL = "0";
/**
* 是否为系统默认(是)
*/
public static final String YES = "Y";
/**
* 是否菜单外链(是)
*/
public static final String YES_FRAME = "0";
/**
* 是否菜单外链(否)
*/
public static final String NO_FRAME = "1";
/**
* 菜单类型(目录)
*/
public static final String TYPE_DIR = "M";
/**
* 菜单类型(菜单)
*/
public static final String TYPE_MENU = "C";
/**
* 菜单类型(按钮)
*/
public static final String TYPE_BUTTON = "F";
/**
* Layout组件标识
*/
public final static String LAYOUT = "Layout";
/**
* ParentView组件标识
*/
public final static String PARENT_VIEW = "ParentView";
/**
* InnerLink组件标识
*/
public final static String INNER_LINK = "InnerLink";
/**
* 校验返回结果码
*/
public final static String UNIQUE = "0";
public final static String NOT_UNIQUE = "1";
/**
* 用户名长度限制
*/
public static final int USERNAME_MIN_LENGTH = 2;
public static final int USERNAME_MAX_LENGTH = 20;
/**
* 密码长度限制
*/
public static final int PASSWORD_MIN_LENGTH = 5;
public static final int PASSWORD_MAX_LENGTH = 20;
}
================================================
FILE: campus-common/src/main/java/com/oddfar/campus/common/core/BaseMapperX.java
================================================
package com.oddfar.campus.common.core;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.oddfar.campus.common.core.page.PageQuery;
import com.oddfar.campus.common.domain.PageResult;
import org.apache.ibatis.annotations.Param;
import java.util.Collection;
import java.util.List;
/**
* 在 MyBatis Plus 的 BaseMapper 的基础上拓展,提供更多的能力
*/
public interface BaseMapperX<T> extends BaseMapper<T> {
default PageResult<T> selectPage(@Param("ew") Wrapper<T> queryWrapper) {
PageQuery pageQuery = new PageQuery();
Page<T> page = pageQuery.buildPage();
selectPage(page, queryWrapper);
// 转换返回
return new PageResult(page.getRecords(), page.getTotal());
}
default T selectOne(String field, Object value) {
return selectOne(new QueryWrapper<T>().eq(field, value));
}
default T selectOne(SFunction<T, ?> field, Object value) {
return selectOne(new LambdaQueryWrapper<T>().eq(field, value));
}
default T selectOne(String field1, Object value1, String field2, Object value2) {
return selectOne(new QueryWrapper<T>().eq(field1, value1).eq(field2, value2));
}
default T selectOne(SFunction<T, ?> field1, Object value1, SFunction<T, ?> field2, Object value2) {
return selectOne(new LambdaQueryWrapper<T>().eq(field1, value1).eq(field2, value2));
}
default Long selectCount() {
return selectCount(new QueryWrapper<T>());
}
default Long selectCount(String field, Object value) {
return selectCount(new QueryWrapper<T>().eq(field, value));
}
default Long selectCount(SFunction<T, ?> field, Object value) {
return selectCount(new LambdaQueryWrapper<T>().eq(field, value));
}
default List<T> selectList() {
return selectList(new QueryWrapper<>());
}
default List<T> selectList(String field, Object value) {
return selectList(new QueryWrapper<T>().eq(field, value));
}
default List<T> selectList(SFunction<T, ?> field, Object value) {
return selectList(new LambdaQueryWrapper<T>().eq(field, value));
}
default List<T> selectList(String field, Collection<?> values) {
return selectList(new QueryWrapper<T>().in(field, values));
}
default List<T> selectList(SFunction<T, ?> field, Collection<?> values) {
return selectList(new LambdaQueryWrapper<T>().in(field, values));
}
/**
* 逐条插入,适合少量数据插入,或者对性能要求不高的场景
* <p>
* 如果大量,请使用 {@link com.baomidou.mybatisplus.extension.service.impl.ServiceImpl#saveBatch(Collection)} 方法
*
* @param entities 实体们
*/
default void insertBatch(Collection<T> entities) {
entities.forEach(this::insert);
}
default void updateBatch(T update) {
update(update, new QueryWrapper<>());
}
}
================================================
FILE: campus-common/src/main/java/com/oddfar/campus/common/core/LambdaQueryWrapperX.java
================================================
package com.oddfar.campus.common.core;
import cn.hutool.core.util.ArrayUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
import org.springframework.util.StringUtils;
import java.util.Collection;
import java.util.Map;
/**
* 拓展 MyBatis Plus QueryWrapper 类,主要增加如下功能:
* <p>
* 1. 拼接条件的方法,增加 xxxIfPresent 方法,用于判断值不存在的时候,不要拼接到条件中。
*
* @param <T> 数据类型
*/
public class LambdaQueryWrapperX<T> extends LambdaQueryWrapper<T> {
public LambdaQueryWrapperX<T> likeIfPresent(SFunction<T, ?> column, String val) {
if (StringUtils.hasText(val)) {
return (LambdaQueryWrapperX<T>) super.like(column, val);
}
return this;
}
public LambdaQueryWrapperX<T> inIfPresent(SFunction<T, ?> column, Collection<?> values) {
if (!CollectionUtils.isEmpty(values)) {
return (LambdaQueryWrapperX<T>) super.in(column, values);
}
return this;
}
public LambdaQueryWrapperX<T> inIfPresent(SFunction<T, ?> column, Object... values) {
if (!ArrayUtil.isEmpty(values)) {
return (LambdaQueryWrapperX<T>) super.in(column, values);
}
return this;
}
public LambdaQueryWrapperX<T> eqIfPresent(SFunction<T, ?> column, Object val) {
if (val != null) {
return (LambdaQueryWrapperX<T>) super.eq(column, val);
}
return this;
}
public LambdaQueryWrapperX<T> neIfPresent(SFunction<T, ?> column, Object val) {
if (val != null) {
return (LambdaQueryWrapperX<T>) super.ne(column, val);
}
return this;
}
public LambdaQueryWrapperX<T> gtIfPresent(SFunction<T, ?> column, Object val) {
if (val != null) {
return (LambdaQueryWrapperX<T>) super.gt(column, val);
}
return this;
}
public LambdaQueryWrapperX<T> geIfPresent(SFunction<T, ?> column, Object val) {
if (val != null) {
return (LambdaQueryWrapperX<T>) super.ge(column, val);
}
return this;
}
public LambdaQueryWrapperX<T> ltIfPresent(SFunction<T, ?> column, Object val) {
if (val != null) {
return (LambdaQueryWrapperX<T>) super.lt(column, val);
}
return this;
}
public LambdaQueryWrapperX<T> leIfPresent(SFunction<T, ?> column, Object val) {
if (val != null) {
return (LambdaQueryWrapperX<T>) super.le(column, val);
}
return this;
}
public LambdaQueryWrapperX<T> betweenIfPresent(SFunction<T, ?> column, Object val1, Object val2) {
if (val1 != null && val2 != null) {
return (LambdaQueryWrapperX<T>) super.between(column, val1, val2);
}
if (val1 != null) {
return (LambdaQueryWrapperX<T>) ge(column, val1);
}
if (val2 != null) {
return (LambdaQueryWrapperX<T>) le(column, val2);
}
return this;
}
public LambdaQueryWrapperX<T> betweenIfPresent(SFunction<T, ?> column, Object[] values) {
Object val1 = ArrayUtil.get(values, 0);
Object val2 = ArrayUtil.get(values, 1);
return betweenIfPresent(column, val1, val2);
}
public LambdaQueryWrapperX<T> betweenIfPresent(SFunction<T, ?> column, Map<String, Object> values) {
String val1 = (String) values.get("beginTime");
String val2 = (String) values.get("endTime");
return betweenIfPresent(column, val1, val2);
}
// ========== 重写父类方法,方便链式调用 ==========
@Override
public LambdaQueryWrapperX<T> eq(boolean condition, SFunction<T, ?> column, Object val) {
super.eq(condition, column, val);
return this;
}
@Override
public LambdaQueryWrapperX<T> eq(SFunction<T, ?> column, Object val) {
super.eq(column, val);
return this;
}
@Override
public LambdaQueryWrapperX<T> orderByDesc(SFunction<T, ?> column) {
super.orderByDesc(true, column);
return this;
}
@Override
public LambdaQueryWrapperX<T> last(String lastSql) {
super.last(lastSql);
return this;
}
@Override
public LambdaQueryWrapperX<T> in(SFunction<T, ?> column, Collection<?> coll) {
super.in(column, coll);
return this;
}
}
================================================
FILE: campus-common/src/main/java/com/oddfar/campus/common/core/RedisCache.java
================================================
package com.oddfar.campus.common.core;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.BoundSetOperations;
import org.springframework.data.redis.core.HashOperations;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.ValueOperations;
import org.springframework.stereotype.Component;
import java.util.*;
import java.util.concurrent.TimeUnit;
/**
* spring redis 工具类
*
* @author ruoyi
**/
@SuppressWarnings(value = {"unchecked", "rawtypes"})
@Component
public class RedisCache {
@Autowired
public RedisTemplate redisTemplate;
/**
* 缓存基本的对象,Integer、String、实体类等
*
* @param key 缓存的键值
* @param value 缓存的值
*/
public <T> void setCacheObject(final String key, final T value) {
redisTemplate.opsForValue().set(key, value);
}
/**
* 缓存基本的对象,Integer、String、实体类等
*
* @param key 缓存的键值
* @param value 缓存的值
* @param timeout 时间
* @param timeUnit 时间颗粒度
*/
public <T> void setCacheObject(final String key, final T value, final Integer timeout, final TimeUnit timeUnit) {
redisTemplate.opsForValue().set(key, value, timeout, timeUnit);
}
/**
* 设置有效时间
*
* @param key Redis键
* @param timeout 超时时间
* @return true=设置成功;false=设置失败
*/
public boolean expire(final String key, final long timeout) {
return expire(key, timeout, TimeUnit.SECONDS);
}
/**
* 设置有效时间
*
* @param key Redis键
* @param timeout 超时时间
* @param unit 时间单位
* @return true=设置成功;false=设置失败
*/
public boolean expire(final String key, final long timeout, final TimeUnit unit) {
return redisTemplate.expire(key, timeout, unit);
}
/**
* 获取有效时间
*
* @param key Redis键
* @return 有效时间
*/
public long getExpire(final String key) {
return redisTemplate.getExpire(key);
}
/**
* 判断 key是否存在
*
* @param key 键
* @return true 存在 false不存在
*/
public Boolean hasKey(String key) {
return redisTemplate.hasKey(key);
}
/**
* 获得缓存的基本对象。
*
* @param key 缓存键值
* @return 缓存键值对应的数据
*/
public <T> T getCacheObject(final String key) {
ValueOperations<String, T> operation = redisTemplate.opsForValue();
return operation.get(key);
}
/**
* 删除单个对象
*
* @param key
*/
public boolean deleteObject(final String key) {
return redisTemplate.delete(key);
}
/**
* 删除集合对象
*
* @param collection 多个对象
* @return
*/
public boolean deleteObject(final Collection collection) {
return redisTemplate.delete(collection) > 0;
}
/**
* 缓存List数据
*
* @param key 缓存的键值
* @param dataList 待缓存的List数据
* @return 缓存的对象
*/
public <T> long setCacheList(final String key, final List<T> dataList) {
Long count = redisTemplate.opsForList().rightPushAll(key, dataList);
return count == null ? 0 : count;
}
/**
* 重新set缓存List数据
*
* @param key 缓存的键值
* @param dataList 待缓存的List数据
* @return 缓存的对象
*/
public <T> long reSetCacheList(final String key, final List<T> dataList) {
this.deleteObject(key);
Long count = redisTemplate.opsForList().rightPushAll(key, dataList);
return count == null ? 0 : count;
}
/**
* 获得缓存的list对象
*
* @param key 缓存的键值
* @return 缓存键值对应的数据
*/
public <T> List<T> getCacheList(final String key) {
return redisTemplate.opsForList().range(key, 0, -1);
}
/**
* 缓存Set
*
* @param key 缓存键值
* @param dataSet 缓存的数据
* @return 缓存数据的对象
*/
public <T> BoundSetOperations<String, T> setCacheSet(final String key, final Set<T> dataSet) {
BoundSetOperations<String, T> setOperation = redisTemplate.boundSetOps(key);
Iterator<T> it = dataSet.iterator();
while (it.hasNext()) {
setOperation.add(it.next());
}
return setOperation;
}
/**
* 获得缓存的set
*
* @param key
* @return
*/
public <T> Set<T> getCacheSet(final String key) {
return redisTemplate.opsForSet().members(key);
}
/**
* 缓存Map
*
* @param key
* @param dataMap
*/
public <T> void setCacheMap(final String key, final Map<String, T> dataMap) {
if (dataMap != null) {
redisTemplate.opsForHash().putAll(key, dataMap);
}
}
/**
* 获得缓存的Map
*
* @param key
* @return
*/
public <T> Map<String, T> getCacheMap(final String key) {
return redisTemplate.opsForHash().entries(key);
}
/**
* 往Hash中存入数据
*
* @param key Redis键
* @param hKey Hash键
* @param value 值
*/
public <T> void setCacheMapValue(final String key, final String hKey, final T value) {
redisTemplate.opsForHash().put(key, hKey, value);
}
/**
* 获取Hash中的数据
*
* @param key Redis键
* @param hKey Hash键
* @return Hash中的对象
*/
public <T> T getCacheMapValue(final String key, final String hKey) {
HashOperations<String, String, T> opsForHash = redisTemplate.opsForHash();
return opsForHash.get(key, hKey);
}
/**
* 获取多个Hash中的数据
*
* @param key Redis键
* @param hKeys Hash键集合
* @return Hash对象集合
*/
public <T> List<T> getMultiCacheMapValue(final String key, final Collection<Object> hKeys) {
return redisTemplate.opsForHash().multiGet(key, hKeys);
}
/**
* 删除Hash中的某条数据
*
* @param key Redis键
* @param hKey Hash键
* @return 是否成功
*/
public boolean deleteCacheMapValue(final String key, final String hKey) {
return redisTemplate.opsForHash().delete(key, hKey) > 0;
}
/**
* 获得缓存的基本对象列表
*
* @param pattern 字符串前缀
* @return 对象列表
*/
public Collection<String> keys(final String pattern) {
return redisTemplate.keys(pattern);
}
}
================================================
FILE: campus-common/src/main/java/com/oddfar/campus/common/core/page/PageQuery.java
================================================
package com.oddfar.campus.common.core.page;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.metadata.OrderItem;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.oddfar.campus.common.core.text.Convert;
import com.oddfar.campus.common.exception.ServiceException;
import com.oddfar.campus.common.utils.ServletUtils;
import com.oddfar.campus.common.utils.StringUtils;
import com.oddfar.campus.common.utils.sql.SqlUtil;
import lombok.Data;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
/**
* 分页查询实体类
*
* @author oddfar
* @date 2023/11/26
*/
@Data
public class PageQuery implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 当前记录起始索引
*/
private static final String PAGE_NUM = "pageNum";
/**
* 每页显示记录数
*/
private static final String PAGE_SIZE = "pageSize";
/**
* 分页大小
*/
private Integer pageSize;
/**
* 当前页数
*/
private Integer pageNum;
/**
* 排序列
*/
private String orderByColumn;
/**
* 排序的方向desc或者asc
*/
private String isAsc;
/**
* 当前记录起始索引 默认值
*/
public static final int DEFAULT_PAGE_NUM = 1;
/**
* 每页显示记录数 默认值 10
*/
public static final int DEFAULT_PAGE_SIZE = 10;
public final static String COMMA = ",";
public <T> Page<T> build() {
Integer pageNum = ObjectUtil.defaultIfNull(getPageNum(), DEFAULT_PAGE_NUM);
Integer pageSize = ObjectUtil.defaultIfNull(getPageSize(), DEFAULT_PAGE_SIZE);
if (pageNum <= 0) {
pageNum = DEFAULT_PAGE_NUM;
}
Page<T> page = new Page<>(pageNum, pageSize);
List<OrderItem> orderItems = buildOrderItem();
if (CollUtil.isNotEmpty(orderItems)) {
page.addOrder(orderItems);
}
return page;
}
public <T> Page<T> buildPage() {
Integer pageNum = Convert.toInt(ServletUtils.getParameter(PAGE_NUM), DEFAULT_PAGE_NUM);
Integer pageSize = Convert.toInt(ServletUtils.getParameter(PAGE_SIZE), DEFAULT_PAGE_SIZE);
if (pageNum <= 0) {
pageNum = DEFAULT_PAGE_NUM;
}
Page<T> page = new Page<>(pageNum, pageSize);
List<OrderItem> orderItems = buildOrderItem();
if (CollUtil.isNotEmpty(orderItems)) {
page.addOrder(orderItems);
}
return page;
}
/**
* 构建排序
* <p>
* 支持的用法如下:
* {isAsc:"asc",orderByColumn:"id"} order by id asc
* {isAsc:"asc",orderByColumn:"id,createTime"} order by id asc,create_time asc
* {isAsc:"desc",orderByColumn:"id,createTime"} order by id desc,create_time desc
* {isAsc:"asc,desc",orderByColumn:"id,createTime"} order by id asc,create_time desc
*/
private List<OrderItem> buildOrderItem() {
if (StringUtils.isBlank(orderByColumn) || StringUtils.isBlank(isAsc)) {
return null;
}
String orderBy = SqlUtil.escapeOrderBySql(orderByColumn);
orderBy = StringUtils.toUnderScoreCase(orderBy);
// 兼容前端排序类型
isAsc = StringUtils.replaceEach(isAsc, new String[]{"ascending", "descending"}, new String[]{"asc", "desc"});
String[] orderByArr = orderBy.split(COMMA);
String[] isAscArr = isAsc.split(COMMA);
if (isAscArr.length != 1 && isAscArr.length != orderByArr.length) {
throw new ServiceException("排序参数有误");
}
List<OrderItem> list = new ArrayList<>();
// 每个字段各自排序
for (int i = 0; i < orderByArr.length; i++) {
String orderByStr = orderByArr[i];
String isAscStr = isAscArr.length == 1 ? isAscArr[0] : isAscArr[i];
if ("asc".equals(isAscStr)) {
list.add(OrderItem.asc(orderByStr));
} else if ("desc".equals(isAscStr)) {
list.add(OrderItem.desc(orderByStr));
} else {
throw new ServiceException("排序参数有误");
}
}
return list;
}
}
================================================
FILE: campus-common/src/main/java/com/oddfar/campus/common/core/page/TableDataInfo.java
================================================
package com.oddfar.campus.common.core.page;
import java.io.Serializable;
import java.util.List;
/**
* 表格分页数据对象
*
* @author ruoyi
*/
public class TableDataInfo implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 总记录数
*/
private long total;
/**
* 列表数据
*/
private List<?> rows;
/**
* 消息状态码
*/
private int code;
/**
* 消息内容
*/
private String msg;
/**
* 表格数据对象
*/
public TableDataInfo() {
}
/**
* 分页
*
* @param list 列表数据
* @param total 总记录数
*/
public TableDataInfo(List<?> list, int total) {
this.rows = list;
this.total = total;
}
public long getTotal() {
return total;
}
public void setTotal(long total) {
this.total = total;
}
public List<?> getRows() {
return rows;
}
public void setRows(List<?> rows) {
this.rows = rows;
}
public int getCode() {
return code;
}
public void setCode(int code) {
this.code = code;
}
public String getMsg() {
return msg;
}
public void setMsg(String msg) {
this.msg = msg;
}
}
================================================
FILE: campus-common/src/main/java/com/oddfar/campus/common/core/text/CharsetKit.java
================================================
package com.oddfar.campus.common.core.text;
import com.oddfar.campus.common.utils.StringUtils;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
/**
* 字符集工具类
*
* @author ruoyi
*/
public class CharsetKit
{
/** ISO-8859-1 */
public static final String ISO_8859_1 = "ISO-8859-1";
/** UTF-8 */
public static final String UTF_8 = "UTF-8";
/** GBK */
public static final String GBK = "GBK";
/** ISO-8859-1 */
public static final Charset CHARSET_ISO_8859_1 = Charset.forName(ISO_8859_1);
/** UTF-8 */
public static final Charset CHARSET_UTF_8 = Charset.forName(UTF_8);
/** GBK */
public static final Charset CHARSET_GBK = Charset.forName(GBK);
/**
* 转换为Charset对象
*
* @param charset 字符集,为空则返回默认字符集
* @return Charset
*/
public static Charset charset(String charset)
{
return StringUtils.isEmpty(charset) ? Charset.defaultCharset() : Charset.forName(charset);
}
/**
* 转换字符串的字符集编码
*
* @param source 字符串
* @param srcCharset 源字符集,默认ISO-8859-1
* @param destCharset 目标字符集,默认UTF-8
* @return 转换后的字符集
*/
public static String convert(String source, String srcCharset, String destCharset)
{
return convert(source, Charset.forName(srcCharset), Charset.forName(destCharset));
}
/**
* 转换字符串的字符集编码
*
* @param source 字符串
* @param srcCharset 源字符集,默认ISO-8859-1
* @param destCharset 目标字符集,默认UTF-8
* @return 转换后的字符集
*/
public static String convert(String source, Charset srcCharset, Charset destCharset)
{
if (null == srcCharset)
{
srcCharset = StandardCharsets.ISO_8859_1;
}
if (null == destCharset)
{
destCharset = StandardCharsets.UTF_8;
}
if (StringUtils.isEmpty(source) || srcCharset.equals(destCharset))
{
return source;
}
return new String(source.getBytes(srcCharset), destCharset);
}
/**
* @return 系统字符集编码
*/
public static String systemCharset()
{
return Charset.defaultCharset().name();
}
}
================================================
FILE: campus-common/src/main/java/com/oddfar/campus/common/core/text/Convert.java
================================================
package com.oddfar.campus.common.core.text;
import com.oddfar.campus.common.utils.StringUtils;
import org.apache.commons.lang3.ArrayUtils;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.nio.ByteBuffer;
import java.nio.charset.Charset;
import java.text.NumberFormat;
import java.util.Set;
/**
* 类型转换器
*
* @author ruoyi
*/
public class Convert {
/**
* 转换为字符串<br>
* 如果给定的值为null,或者转换失败,返回默认值<br>
* 转换失败不会报错
*
* @param value 被转换的值
* @param defaultValue 转换错误时的默认值
* @return 结果
*/
public static String toStr(Object value, String defaultValue) {
if (null == value) {
return defaultValue;
}
if (value instanceof String) {
return (String) value;
}
return value.toString();
}
/**
* 转换为字符串<br>
* 如果给定的值为<code>null</code>,或者转换失败,返回默认值<code>null</code><br>
* 转换失败不会报错
*
* @param value 被转换的值
* @return 结果
*/
public static String toStr(Object value) {
return toStr(value, null);
}
/**
* 转换为字符<br>
* 如果给定的值为null,或者转换失败,返回默认值<br>
* 转换失败不会报错
*
* @param value 被转换的值
* @param defaultValue 转换错误时的默认值
* @return 结果
*/
public static Character toChar(Object value, Character defaultValue) {
if (null == value) {
return defaultValue;
}
if (value instanceof Character) {
return (Character) value;
}
final String valueStr = toStr(value, null);
return StringUtils.isEmpty(valueStr) ? defaultValue : valueStr.charAt(0);
}
/**
* 转换为字符<br>
* 如果给定的值为<code>null</code>,或者转换失败,返回默认值<code>null</code><br>
* 转换失败不会报错
*
* @param value 被转换的值
* @return 结果
*/
public static Character toChar(Object value) {
return toChar(value, null);
}
/**
* 转换为byte<br>
* 如果给定的值为<code>null</code>,或者转换失败,返回默认值<br>
* 转换失败不会报错
*
* @param value 被转换的值
* @param defaultValue 转换错误时的默认值
* @return 结果
*/
public static Byte toByte(Object value, Byte defaultValue) {
if (value == null) {
return defaultValue;
}
if (value instanceof Byte) {
return (Byte) value;
}
if (value instanceof Number) {
return ((Number) value).byteValue();
}
final String valueStr = toStr(value, null);
if (StringUtils.isEmpty(valueStr)) {
return defaultValue;
}
try {
return Byte.parseByte(valueStr);
} catch (Exception e) {
return defaultValue;
}
}
/**
* 转换为byte<br>
* 如果给定的值为<code>null</code>,或者转换失败,返回默认值<code>null</code><br>
* 转换失败不会报错
*
* @param value 被转换的值
* @return 结果
*/
public static Byte toByte(Object value) {
return toByte(value, null);
}
/**
* 转换为Short<br>
* 如果给定的值为<code>null</code>,或者转换失败,返回默认值<br>
* 转换失败不会报错
*
* @param value 被转换的值
* @param defaultValue 转换错误时的默认值
* @return 结果
*/
public static Short toShort(Object value, Short defaultValue) {
if (value == null) {
return defaultValue;
}
if (value instanceof Short) {
return (Short) value;
}
if (value instanceof Number) {
return ((Number) value).shortValue();
}
final String valueStr = toStr(value, null);
if (StringUtils.isEmpty(valueStr)) {
return defaultValue;
}
try {
return Short.parseShort(valueStr.trim());
} catch (Exception e) {
return defaultValue;
}
}
/**
* 转换为Short<br>
* 如果给定的值为<code>null</code>,或者转换失败,返回默认值<code>null</code><br>
* 转换失败不会报错
*
* @param value 被转换的值
* @return 结果
*/
public static Short toShort(Object value) {
return toShort(value, null);
}
/**
* 转换为Number<br>
* 如果给定的值为空,或者转换失败,返回默认值<br>
* 转换失败不会报错
*
* @param value 被转换的值
* @param defaultValue 转换错误时的默认值
* @return 结果
*/
public static Number toNumber(Object value, Number defaultValue) {
if (value == null) {
return defaultValue;
}
if (value instanceof Number) {
return (Number) value;
}
final String valueStr = toStr(value, null);
if (StringUtils.isEmpty(valueStr)) {
return defaultValue;
}
try {
return NumberFormat.getInstance().parse(valueStr);
} catch (Exception e) {
return defaultValue;
}
}
/**
* 转换为Number<br>
* 如果给定的值为空,或者转换失败,返回默认值<code>null</code><br>
* 转换失败不会报错
*
* @param value 被转换的值
* @return 结果
*/
public static Number toNumber(Object value) {
return toNumber(value, null);
}
/**
* 转换为int<br>
* 如果给定的值为空,或者转换失败,返回默认值<br>
* 转换失败不会报错
*
* @param value 被转换的值
* @param defaultValue 转换错误时的默认值
* @return 结果
*/
public static Integer toInt(Object value, Integer defaultValue) {
if (value == null) {
return defaultValue;
}
if (value instanceof Integer) {
return (Integer) value;
}
if (value instanceof Number) {
return ((Number) value).intValue();
}
final String valueStr = toStr(value, null);
if (StringUtils.isEmpty(valueStr)) {
return defaultValue;
}
try {
return Integer.parseInt(valueStr.trim());
} catch (Exception e) {
return defaultValue;
}
}
/**
* 转换为int<br>
* 如果给定的值为<code>null</code>,或者转换失败,返回默认值<code>null</code><br>
* 转换失败不会报错
*
* @param value 被转换的值
* @return 结果
*/
public static Integer toInt(Object value) {
return toInt(value, null);
}
/**
* 转换为Integer数组<br>
*
* @param str 被转换的值
* @return 结果
*/
public static Integer[] toIntArray(String str) {
return toIntArray(",", str);
}
/**
* 转换为Long数组<br>
*
* @param str 被转换的值
* @return 结果
*/
public static Long[] toLongArray(String str) {
return toLongArray(",", str);
}
/**
* 转换为Integer数组<br>
*
* @param split 分隔符
* @param split 被转换的值
* @return 结果
*/
public static Integer[] toIntArray(String split, String str) {
if (StringUtils.isEmpty(str)) {
return new Integer[]{};
}
String[] arr = str.split(split);
final Integer[] ints = new Integer[arr.length];
for (int i = 0; i < arr.length; i++) {
final Integer v = toInt(arr[i], 0);
ints[i] = v;
}
return ints;
}
/**
* 转换为Long数组<br>
*
* @param split 分隔符
* @param str 被转换的值
* @return 结果
*/
public static Long[] toLongArray(String split, String str) {
if (StringUtils.isEmpty(str)) {
return new Long[]{};
}
String[] arr = str.split(split);
final Long[] longs = new Long[arr.length];
for (int i = 0; i < arr.length; i++) {
final Long v = toLong(arr[i], null);
longs[i] = v;
}
return longs;
}
/**
* 转换为String数组<br>
*
* @param str 被转换的值
* @return 结果
*/
public static String[] toStrArray(String str) {
return toStrArray(",", str);
}
/**
* 转换为String数组<br>
*
* @param split 分隔符
* @param split 被转换的值
* @return 结果
*/
public static String[] toStrArray(String split, String str) {
return str.split(split);
}
/**
* 转换为long<br>
* 如果给定的值为空,或者转换失败,返回默认值<br>
* 转换失败不会报错
*
* @param value 被转换的值
* @param defaultValue 转换错误时的默认值
* @return 结果
*/
public static Long toLong(Object value, Long defaultValue) {
if (value == null) {
return defaultValue;
}
if (value instanceof Long) {
return (Long) value;
}
if (value instanceof Number) {
return ((Number) value).longValue();
}
final String valueStr = toStr(value, null);
if (StringUtils.isEmpty(valueStr)) {
return defaultValue;
}
try {
// 支持科学计数法
return new BigDecimal(valueStr.trim()).longValue();
} catch (Exception e) {
return defaultValue;
}
}
/**
* 转换为long<br>
* 如果给定的值为<code>null</code>,或者转换失败,返回默认值<code>null</code><br>
* 转换失败不会报错
*
* @param value 被转换的值
* @return 结果
*/
public static Long toLong(Object value) {
return toLong(value, null);
}
/**
* 转换为double<br>
* 如果给定的值为空,或者转换失败,返回默认值<br>
* 转换失败不会报错
*
* @param value 被转换的值
* @param defaultValue 转换错误时的默认值
* @return 结果
*/
public static Double toDouble(Object value, Double defaultValue) {
if (value == null) {
return defaultValue;
}
if (value instanceof Double) {
return (Double) value;
}
if (value instanceof Number) {
return ((Number) value).doubleValue();
}
final String valueStr = toStr(value, null);
if (StringUtils.isEmpty(valueStr)) {
return defaultValue;
}
try {
// 支持科学计数法
return new BigDecimal(valueStr.trim()).doubleValue();
} catch (Exception e) {
return defaultValue;
}
}
/**
* 转换为double<br>
* 如果给定的值为空,或者转换失败,返回默认值<code>null</code><br>
* 转换失败不会报错
*
* @param value 被转换的值
* @return 结果
*/
public static Double toDouble(Object value) {
return toDouble(value, null);
}
/**
* 转换为Float<br>
* 如果给定的值为空,或者转换失败,返回默认值<br>
* 转换失败不会报错
*
* @param value 被转换的值
* @param defaultValue 转换错误时的默认值
* @return 结果
*/
public static Float toFloat(Object value, Float defaultValue) {
if (value == null) {
return defaultValue;
}
if (value instanceof Float) {
return (Float) value;
}
if (value instanceof Number) {
return ((Number) value).floatValue();
}
final String valueStr = toStr(value, null);
if (StringUtils.isEmpty(valueStr)) {
return defaultValue;
}
try {
return Float.parseFloat(valueStr.trim());
} catch (Exception e) {
return defaultValue;
}
}
/**
* 转换为Float<br>
* 如果给定的值为空,或者转换失败,返回默认值<code>null</code><br>
* 转换失败不会报错
*
* @param value 被转换的值
* @return 结果
*/
public static Float toFloat(Object value) {
return toFloat(value, null);
}
/**
* 转换为boolean<br>
* String支持的值为:true、false、yes、ok、no,1,0 如果给定的值为空,或者转换失败,返回默认值<br>
* 转换失败不会报错
*
* @param value 被转换的值
* @param defaultValue 转换错误时的默认值
* @return 结果
*/
public static Boolean toBool(Object value, Boolean defaultValue) {
if (value == null) {
return defaultValue;
}
if (value instanceof Boolean) {
return (Boolean) value;
}
String valueStr = toStr(value, null);
if (StringUtils.isEmpty(valueStr)) {
return defaultValue;
}
valueStr = valueStr.trim().toLowerCase();
switch (valueStr) {
case "true":
case "yes":
case "ok":
case "1":
return true;
case "false":
case "no":
case "0":
return false;
default:
return defaultValue;
}
}
/**
* 转换为boolean<br>
* 如果给定的值为空,或者转换失败,返回默认值<code>null</code><br>
* 转换失败不会报错
*
* @param value 被转换的值
* @return 结果
*/
public static Boolean toBool(Object value) {
return toBool(value, null);
}
/**
* 转换为Enum对象<br>
* 如果给定的值为空,或者转换失败,返回默认值<br>
*
* @param clazz Enum的Class
* @param value 值
* @param defaultValue 默认值
* @return Enum
*/
public static <E extends Enum<E>> E toEnum(Class<E> clazz, Object value, E defaultValue) {
if (value == null) {
return defaultValue;
}
if (clazz.isAssignableFrom(value.getClass())) {
@SuppressWarnings("unchecked")
E myE = (E) value;
return myE;
}
final String valueStr = toStr(value, null);
if (StringUtils.isEmpty(valueStr)) {
return defaultValue;
}
try {
return Enum.valueOf(clazz, valueStr);
} catch (Exception e) {
return defaultValue;
}
}
/**
* 转换为Enum对象<br>
* 如果给定的值为空,或者转换失败,返回默认值<code>null</code><br>
*
* @param clazz Enum的Class
* @param value 值
* @return Enum
*/
public static <E extends Enum<E>> E toEnum(Class<E> clazz, Object value) {
return toEnum(clazz, value, null);
}
/**
* 转换为BigInteger<br>
* 如果给定的值为空,或者转换失败,返回默认值<br>
* 转换失败不会报错
*
* @param value 被转换的值
* @param defaultValue 转换错误时的默认值
* @return 结果
*/
public static BigInteger toBigInteger(Object value, BigInteger defaultValue) {
if (value == null) {
return defaultValue;
}
if (value instanceof BigInteger) {
return (BigInteger) value;
}
if (value instanceof Long) {
return BigInteger.valueOf((Long) value);
}
final String valueStr = toStr(value, null);
if (StringUtils.isEmpty(valueStr)) {
return defaultValue;
}
try {
return new BigInteger(valueStr);
} catch (Exception e) {
return defaultValue;
}
}
/**
* 转换为BigInteger<br>
* 如果给定的值为空,或者转换失败,返回默认值<code>null</code><br>
* 转换失败不会报错
*
* @param value 被转换的值
* @return 结果
*/
public static BigInteger toBigInteger(Object value) {
return toBigInteger(value, null);
}
/**
* 转换为BigDecimal<br>
* 如果给定的值为空,或者转换失败,返回默认值<br>
* 转换失败不会报错
*
* @param value 被转换的值
* @param defaultValue 转换错误时的默认值
* @return 结果
*/
public static BigDecimal toBigDecimal(Object value, BigDecimal defaultValue) {
if (value == null) {
return defaultValue;
}
if (value instanceof BigDecimal) {
return (BigDecimal) value;
}
if (value instanceof Long) {
return new BigDecimal((Long) value);
}
if (value instanceof Double) {
return new BigDecimal((Double) value);
}
if (value instanceof Integer) {
return new BigDecimal((Integer) value);
}
final String valueStr = toStr(value, null);
if (StringUtils.isEmpty(valueStr)) {
return defaultValue;
}
try {
return new BigDecimal(valueStr);
} catch (Exception e) {
return defaultValue;
}
}
/**
* 转换为BigDecimal<br>
* 如果给定的值为空,或者转换失败,返回默认值<br>
* 转换失败不会报错
*
* @param value 被转换的值
* @return 结果
*/
public static BigDecimal toBigDecimal(Object value) {
return toBigDecimal(value, null);
}
/**
* 将对象转为字符串<br>
* 1、Byte数组和ByteBuffer会被转换为对应字符串的数组 2、对象数组会调用Arrays.toString方法
*
* @param obj 对象
* @return 字符串
*/
public static String utf8Str(Object obj) {
return str(obj, CharsetKit.CHARSET_UTF_8);
}
/**
* 将对象转为字符串<br>
* 1、Byte数组和ByteBuffer会被转换为对应字符串的数组 2、对象数组会调用Arrays.toString方法
*
* @param obj 对象
* @param charsetName 字符集
* @return 字符串
*/
public static String str(Object obj, String charsetName) {
return str(obj, Charset.forName(charsetName));
}
/**
* 将对象转为字符串<br>
* 1、Byte数组和ByteBuffer会被转换为对应字符串的数组 2、对象数组会调用Arrays.toString方法
*
* @param obj 对象
* @param charset 字符集
* @return 字符串
*/
public static String str(Object obj, Charset charset) {
if (null == obj) {
return null;
}
if (obj instanceof String) {
return (String) obj;
} else if (obj instanceof byte[]) {
return str((byte[]) obj, charset);
} else if (obj instanceof Byte[]) {
byte[] bytes = ArrayUtils.toPrimitive((Byte[]) obj);
return str(bytes, charset);
} else if (obj instanceof ByteBuffer) {
return str((ByteBuffer) obj, charset);
}
return obj.toString();
}
/**
* 将byte数组转为字符串
*
* @param bytes byte数组
* @param charset 字符集
* @return 字符串
*/
public static String str(byte[] bytes, String charset) {
return str(bytes, StringUtils.isEmpty(charset) ? Charset.defaultCharset() : Charset.forName(charset));
}
/**
* 解码字节码
*
* @param data 字符串
* @param charset 字符集,如果此字段为空,则解码的结果取决于平台
* @return 解码后的字符串
*/
public static String str(byte[] data, Charset charset) {
if (data == null) {
return null;
}
if (null == charset) {
return new String(data);
}
return new String(data, charset);
}
/**
* 将编码的byteBuffer数据转换为字符串
*
* @param data 数据
* @param charset 字符集,如果为空使用当前系统字符集
* @return 字符串
*/
public static String str(ByteBuffer data, String charset) {
if (data == null) {
return null;
}
return str(data, Charset.forName(charset));
}
/**
* 将编码的byteBuffer数据转换为字符串
*
* @param data 数据
* @param charset 字符集,如果为空使用当前系统字符集
* @return 字符串
*/
public static String str(ByteBuffer data, Charset charset) {
if (null == charset) {
charset = Charset.defaultCharset();
}
return charset.decode(data).toString();
}
// ----------------------------------------------------------------------- 全角半角转换
/**
* 半角转全角
*
* @param input String.
* @return 全角字符串.
*/
public static String toSBC(String input) {
return toSBC(input, null);
}
/**
* 半角转全角
*
* @param input String
* @param notConvertSet 不替换的字符集合
* @return 全角字符串.
*/
public static String toSBC(String input, Set<Character> notConvertSet) {
char[] c = input.toCharArray();
for (int i = 0; i < c.length; i++) {
if (null != notConvertSet && notConvertSet.contains(c[i])) {
// 跳过不替换的字符
continue;
}
if (c[i] == ' ') {
c[i] = '\u3000';
} else if (c[i] < '\177') {
c[i] = (char) (c[i] + 65248);
}
}
return new String(c);
}
/**
* 全角转半角
*
* @param input String.
* @return 半角字符串
*/
public static String toDBC(String input) {
return toDBC(input, null);
}
/**
* 替换全角为半角
*
* @param text 文本
* @param notConvertSet 不替换的字符集合
* @return 替换后的字符
*/
public static String toDBC(String text, Set<Character> notConvertSet) {
char[] c = text.toCharArray();
for (int i = 0; i < c.length; i++) {
if (null != notConvertSet && notConvertSet.contains(c[i])) {
// 跳过不替换的字符
continue;
}
if (c[i] == '\u3000') {
c[i] = ' ';
} else if (c[i] > '\uFF00' && c[i] < '\uFF5F') {
c[i] = (char) (c[i] - 65248);
}
}
String returnString = new String(c);
return returnString;
}
/**
* 数字金额大写转换 先写个完整的然后将如零拾替换成零
*
* @param n 数字
* @return 中文大写数字
*/
public static String digitUppercase(double n) {
String[] fraction = {"角", "分"};
String[] digit = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};
String[][] unit = {{"元", "万", "亿"}, {"", "拾", "佰", "仟"}};
String head = n < 0 ? "负" : "";
n = Math.abs(n);
String s = "";
for (int i = 0; i < fraction.length; i++) {
s += (digit[(int) (Math.floor(n * 10 * Math.pow(10, i)) % 10)] + fraction[i]).replaceAll("(零.)+", "");
}
if (s.length() < 1) {
s = "整";
}
int integerPart = (int) Math.floor(n);
for (int i = 0; i < unit[0].length && integerPart > 0; i++) {
String p = "";
for (int j = 0; j < unit[1].length && n > 0; j++) {
p = digit[integerPart % 10] + unit[1][j] + p;
integerPart = integerPart / 10;
}
s = p.replaceAll("(零.)*零$", "").replaceAll("^$", "零") + unit[0][i] + s;
}
return head + s.replaceAll("(零.)*零元", "元").replaceFirst("(零.)+", "").replaceAll("(零.)+", "零").replaceAll("^整$", "零元整");
}
}
================================================
FILE: campus-common/src/main/java/com/oddfar/campus/common/domain/BaseEntity.java
================================================
package com.oddfar.campus.common.domain;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableLogic;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serializable;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
/**
* Entity基类
*
* @author oddfar
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class BaseEntity implements Serializable {
private static final long serialVersionUID = 1L;
@TableField(fill = FieldFill.INSERT)
private Date createTime;
@TableField(fill = FieldFill.INSERT)
private Long createUser;
@TableField(fill = FieldFill.UPDATE)
private Date updateTime;
@TableField(fill = FieldFill.UPDATE)
private Long updateUser;
@TableLogic
@TableField(fill = FieldFill.INSERT)
@JsonIgnore
private Integer delFlag;
@TableField(exist = false)
@JsonInclude(JsonInclude.Include.NON_EMPTY)
private Map<String, Object> params = new HashMap<>();;
}
================================================
FILE: campus-common/src/main/java/com/oddfar/campus/common/domain/PageResult.java
================================================
package com.oddfar.campus.common.domain;
import lombok.Data;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
@Data
public final class PageResult<T> implements Serializable {
private List<T> rows;
private long total;
public PageResult() {
}
public PageResult(List<T> rows, long total) {
this.rows = rows;
this.total = total;
}
public PageResult(int total) {
this.rows = new ArrayList<>();
this.total = total;
}
public static <T> PageResult<T> empty() {
return new PageResult<>(0);
}
public static <T> PageResult<T> empty(int total) {
return new PageResult<>(total);
}
}
================================================
FILE: campus-common/src/main/java/com/oddfar/campus/common/domain/R.java
================================================
package com.oddfar.campus.common.domain;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.TypeReference;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.oddfar.campus.common.enums.BizCodeEnum;
import java.util.HashMap;
import java.util.Map;
/**
* 返回数据
*/
public class R extends HashMap<String, Object> {
private static final long serialVersionUID = 1L;
public R setData(Object data) {
put("data", data);
return this;
}
//利用fastjson进行逆转
public <T> T getData(String key, TypeReference<T> typeReference) {
Object data = get(key);//默认是map
String s = JSON.toJSONString(data);
T t = JSON.parseObject(s, typeReference);
return t;
}
//利用fastjson进行逆转
public <T> T getData(TypeReference<T> typeReference) {
Object data = get("data");
String s = JSON.toJSONString(data);
T t = JSON.parseObject(s, typeReference);
return t;
}
public R() {
put("code", 200);
put("msg", "success");
}
public static R error() {
return error(500, "未知异常,请联系管理员");
}
public static R error(String msg) {
return error(500, msg);
}
public static R error(int code, String msg) {
R r = new R();
r.put("code", code);
r.put("msg", msg);
return r;
}
public static R error(BizCodeEnum bizCodeEnum) {
R r = new R();
r.put("code", bizCodeEnum.getCode());
r.put("msg", bizCodeEnum.getMsg());
return r;
}
public static R ok(String msg) {
R r = new R();
r.put("msg", msg);
return r;
}
public static R ok(Object data) {
R r = new R();
r.put("data", data);
return r;
}
public static R ok(Map<String, Object> map) {
R r = new R();
r.putAll(map);
return r;
}
public static R ok() {
return new R();
}
public R put(String key, Object value) {
super.put(key, value);
return this;
}
public R put(Object value) {
super.put("data", value);
return this;
}
public R put(PageResult pageResult) {
super.put("rows", pageResult.getRows());
super.put("total", pageResult.getTotal());
return this;
}
public R put(IPage page) {
super.put("rows", page.getRecords());
super.put("total", page.getTotal());
return this;
}
public Integer getCode() {
return (Integer) this.get("code");
}
}
================================================
FILE: campus-common/src/main/java/com/oddfar/campus/common/domain/TreeSelect.java
================================================
package com.oddfar.campus.common.domain;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.oddfar.campus.common.domain.entity.SysMenuEntity;
import com.oddfar.campus.common.domain.entity.SysResourceEntity;
import java.io.Serializable;
import java.util.List;
import java.util.stream.Collectors;
/**
* Treeselect树结构实体类
*
* @author ruoyi
*/
public class TreeSelect implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 节点ID
*/
private Long id;
/**
* 节点名称
*/
private String label;
/**
* 子节点
*/
@JsonInclude(JsonInclude.Include.NON_EMPTY)
private List<TreeSelect> children;
public TreeSelect() {
}
public TreeSelect(Long id, String label) {
this.id = id;
this.label = label;
}
public TreeSelect(Long id, String label, List<SysResourceEntity> resources) {
this.id = id;
this.label = label;
this.children = resources.stream().map(TreeSelect::new).collect(Collectors.toList());
}
public TreeSelect(SysMenuEntity menu) {
this.id = menu.getMenuId();
this.label = menu.getMenuName();
this.children = menu.getChildren().stream().map(TreeSelect::new).collect(Collectors.toList());
}
public TreeSelect(SysResourceEntity resource) {
this.id = resource.getResourceId();
this.label = resource.getResourceName();
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getLabel() {
return label;
}
public void setLabel(String label) {
this.label = label;
}
public List<TreeSelect> getChildren() {
return children;
}
public void setChildren(List<TreeSelect> children) {
this.children = children;
}
}
================================================
FILE: campus-common/src/main/java/com/oddfar/campus/common/domain/entity/SysConfigEntity.java
================================================
package com.oddfar.campus.common.domain.entity;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.oddfar.campus.common.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;
/**
* 配置实体类
*
* @author oddfar
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("sys_config")
public class SysConfigEntity extends BaseEntity {
private static final long serialVersionUID = 1L;
// @JsonFormat(shape = JsonFormat.Shape.STRING)
@TableId("config_id")
private Long configId;
/**
* 参数名称
*/
@NotBlank(message = "参数名称不能为空")
@Size(min = 0, max = 100, message = "参数名称不能超过100个字符")
private String configName;
/**
* 参数键名
*/
@NotBlank(message = "参数键名不能为空")
@Size(min = 0, max = 100, message = "参数键名长度不能超过100个字符")
private String configKey;
/**
* 参数键值
*/
@NotBlank(message = "参数键值不能为空")
@Size(min = 0, max = 500, message = "参数键值长度不能超过500个字符")
private String configValue;
/**
* 系统内置(Y是 N否)
*/
@NotBlank(message = "系统内置不能为空")
private String configType;
/**
* 所属分类的编码
*/
@NotBlank(message = "所属分类的编码不能为空")
private String groupCode;
/**
* 备注
*/
private String remark;
}
================================================
FILE: campus-common/src/main/java/com/oddfar/campus/common/domain/entity/SysDictDataEntity.java
================================================
package com.oddfar.campus.common.domain.entity;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.oddfar.campus.common.constant.UserConstants;
import com.oddfar.campus.common.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;
/**
* 字典数据表 sys_dict_data
*
* @author oddfar
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("sys_dict_data")
public class SysDictDataEntity extends BaseEntity {
private static final long serialVersionUID = 1L;
/**
* 字典编码
*/
@TableId("dict_code")
private Long dictCode;
/**
* 字典排序
*/
private Long dictSort;
/**
* 字典标签
*/
@NotBlank(message = "字典标签不能为空")
@Size(min = 0, max = 100, message = "字典标签长度不能超过100个字符")
private String dictLabel;
/**
* 字典键值
*/
@NotBlank(message = "字典键值不能为空")
@Size(min = 0, max = 100, message = "字典键值长度不能超过100个字符")
private String dictValue;
/**
* 字典类型
*/
@NotBlank(message = "字典类型不能为空")
@Size(min = 0, max = 100, message = "字典类型长度不能超过100个字符")
private String dictType;
/**
* 样式属性(其他样式扩展)
*/
@Size(min = 0, max = 100, message = "样式属性长度不能超过100个字符")
private String cssClass;
/**
* 表格字典样式
*/
private String listClass;
/**
* 是否默认(Y是 N否)
*/
private String isDefault;
/**
* 状态(0正常 1停用)
*/
private String status;
/**
* 备注
*/
private String remark;
public boolean getDefault() {
return UserConstants.YES.equals(this.isDefault);
}
}
================================================
FILE: campus-common/src/main/java/com/oddfar/campus/common/domain/entity/SysDictTypeEntity.java
================================================
package com.oddfar.campus.common.domain.entity;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.oddfar.campus.common.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;
/**
* 字典类型表 sys_dict_type
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("sys_dict_type")
public class SysDictTypeEntity extends BaseEntity {
private static final long serialVersionUID = 1L;
/**
* 字典主键
*/
@TableId("dict_id")
private Long dictId;
/**
* 字典名称
*/
@NotBlank(message = "字典名称不能为空")
@Size(min = 0, max = 100, message = "字典类型名称长度不能超过100个字符")
private String dictName;
/**
* 字典类型
*/
@NotBlank(message = "字典类型不能为空")
@Size(min = 0, max = 100, message = "字典类型类型长度不能超过100个字符")
@Pattern(regexp = "^[a-z][a-z0-9_]*$", message = "字典类型必须以字母开头,且只能为(小写字母,数字,下滑线)")
private String dictType;
/**
* 状态(0正常 1停用)
*/
private String status;
/**
* 备注
*/
private String remark;
}
================================================
FILE: campus-common/src/main/java/com/oddfar/campus/common/domain/entity/SysLoginLogEntity.java
================================================
package com.oddfar.campus.common.domain.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Data;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
/**
* 系统访问记录表 sys_logininfor
*
* @author ruoyi
*/
@Data
@TableName("sys_log_login")
public class SysLoginLogEntity {
private static final long serialVersionUID = 1L;
/**
* ID
*/
@TableId("info_id")
private Long infoId;
/**
* 登录成功的用户id
*/
private Long userId;
/**
* 用户账号
*/
private String userName;
/**
* 登录状态 0成功 1失败
*/
private String status;
/**
* 登录IP地址
*/
private String ipaddr;
/**
* 登录地点
*/
private String loginLocation;
/**
* 浏览器类型
*/
private String browser;
/**
* 操作系统
*/
private String os;
/**
* 提示消息
*/
private String msg;
/**
* 访问时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date loginTime;
private static final Integer PAGE_NUM = 1;
private static final Integer PAGE_SIZE = 10;
@TableField(exist = false)
private Map<String, Object> params;
@NotNull(message = "页码不能为空")
@Min(value = 1, message = "页码最小值为 1")
@TableField(exist = false)
@JsonIgnore
private Integer pageNum = PAGE_NUM;
@NotNull(message = "每页条数不能为空")
@Min(value = 1, message = "每页条数最小值为 1")
@Max(value = 100, message = "每页条数最大值为 100")
@TableField(exist = false)
@JsonIgnore
private Integer pageSize = PAGE_SIZE;
public Map<String, Object> getParams() {
if (params == null) {
params = new HashMap<>();
}
return params;
}
}
================================================
FILE: campus-common/src/main/java/com/oddfar/campus/common/domain/entity/SysMenuEntity.java
================================================
package com.oddfar.campus.common.domain.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.oddfar.campus.common.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import java.util.ArrayList;
import java.util.List;
/**
* 菜单权限表 sys_menu
* (根据若依项目修改)
*
* @author oddfar
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("sys_menu")
public class SysMenuEntity extends BaseEntity {
private static final long serialVersionUID = 1L;
/**
* 菜单ID
*/
@TableId("menu_id")
private Long menuId;
/**
* 菜单名称
*/
@NotBlank(message = "菜单名称不能为空")
@Size(min = 0, max = 50, message = "菜单名称长度不能超过50个字符")
private String menuName;
/**
* 父菜单名称
*/
@TableField(exist = false)
private String parentName;
/**
* 父菜单ID
*/
private Long parentId;
/**
* 显示顺序
*/
@NotNull(message = "显示顺序不能为空")
private Integer orderNum;
/**
* 路由地址
*/
@Size(min = 0, max = 200, message = "路由地址不能超过200个字符")
private String path;
/**
* 组件路径
*/
@Size(min = 0, max = 200, message = "组件路径不能超过255个字符")
private String component;
/**
* 路由参数
*/
private String query;
/**
* 是否为外链(0是 1否)
*/
private String isFrame;
/**
* 是否缓存(0缓存 1不缓存)
*/
private String isCache;
/**
* 类型(M目录 C菜单 F按钮)
*/
@NotBlank(message = "菜单类型不能为空")
private String menuType;
/**
* 显示状态(0显示 1隐藏)
*/
private String visible;
/**
* 菜单状态(0显示 1隐藏)
*/
private String status;
/**
* 权限字符串
*/
@Size(min = 0, max = 100, message = "权限标识长度不能超过100个字符")
private String perms;
/**
* 菜单图标
*/
private String icon;
/** 备注 */
private String remark;
/**
* 子菜单
*/
@TableField(exist = false)
private List<SysMenuEntity> children = new ArrayList<SysMenuEntity>();
}
================================================
FILE: campus-common/src/main/java/com/oddfar/campus/common/domain/entity/SysOperLogEntity.java
================================================
package com.oddfar.campus.common.domain.entity;
import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Data;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
/**
* 日志实体类 sys_log
*/
@Data
@TableName("sys_log_oper")
public class SysOperLogEntity {
private static final long serialVersionUID = 1L;
/**
* 日志主键
*/
@TableId("oper_id")
private Long operId;
/**
* 服务名称,一般为spring.application.name
*/
private String appName;
/**
* 操作模块
*/
private String logName;
/**
* 日志记录内容
*/
private String logContent;
/**
* 请求方法
*/
private String method;
/**
* 请求方式
*/
private String requestMethod;
/**
* 操作人员 id
*/
private Long operUserId;
/**
* 请求url
*/
private String operUrl;
/**
* 操作地址
*/
private String operIp;
/**
* 请求参数
*/
private String operParam;
/**
* 返回参数
*/
private String jsonResult;
/**
* 操作状态(0正常 1异常)
*/
private Integer status;
/**
* 错误消息
*/
private String errorMsg;
/**
* 操作时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date operTime;
private static final Integer PAGE_NUM = 1;
private static final Integer PAGE_SIZE = 10;
@TableField(exist = false)
private Map<String, Object> params;
@NotNull(message = "页码不能为空")
@Min(value = 1, message = "页码最小值为 1")
@TableField(exist = false)
@JsonIgnore
private Integer pageNum = PAGE_NUM;
@NotNull(message = "每页条数不能为空")
@Min(value = 1, message = "每页条数最小值为 1")
@Max(value = 100, message = "每页条数最大值为 100")
@TableField(exist = false)
@JsonIgnore
private Integer pageSize = PAGE_SIZE;
public Map<String, Object> getParams() {
if (params == null) {
params = new HashMap<>();
}
return params;
}
}
================================================
FILE: campus-common/src/main/java/com/oddfar/campus/common/domain/entity/SysResourceEntity.java
================================================
package com.oddfar.campus.common.domain.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.oddfar.campus.common.domain.BaseEntity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.ArrayList;
import java.util.List;
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("sys_resource")
public class SysResourceEntity extends BaseEntity {
private static final long serialVersionUID = 1L;
@TableId("resource_id")
private Long resourceId;
/**
* 应用编码
*/
private String appCode;
/**
* 资源编码
*/
private String resourceCode;
/**
* 资源名称
*/
private String resourceName;
/**
* 类名称
*/
private String className;
/**
* 方法名称
*/
private String methodName;
/**
* 资源模块编码,一般为控制器类名排除Controller
*/
@TableField(exist = false)
private String modular_code;
/**
* 资源模块名称,一般为控制器名称
*/
private String modularName;
/**
* 资源url
*/
private String url;
/**
* http请求方法
*/
private String httpMethod;
/**
* 资源的业务类型:1-业务类,2-系统类
*/
private Integer resourceBizType;
/**
* 是否需要鉴权:Y-是,N-否
*/
private String requiredPermissionFlag;
/**
* 子菜单
*/
@TableField(exist = false)
private List<SysResourceEntity> children = new ArrayList<SysResourceEntity>();
}
================================================
FILE: campus-common/src/main/java/com/oddfar/campus/common/domain/entity/SysRoleEntity.java
================================================
package com.oddfar.campus.common.domain.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.oddfar.campus.common.domain.BaseEntity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;
import java.util.Set;
/**
* 角色表 sys_role
*
* @author ruoyi
*/
@TableName("sys_role")
@EqualsAndHashCode(callSuper = true)
@Data
@AllArgsConstructor
@NoArgsConstructor
public class SysRoleEntity extends BaseEntity {
private static final long serialVersionUID = 1L;
/**
* 角色ID
*/
@TableId("role_id")
private Long roleId;
/**
* 角色名称
*/
@NotBlank(message = "角色名称不能为空")
@Size(min = 0, max = 30, message = "角色名称长度不能超过30个字符")
private String roleName;
/**
* 角色权限
*/
@NotBlank(message = "权限字符不能为空")
@Size(min = 0, max = 100, message = "权限字符长度不能超过100个字符")
private String roleKey;
/**
* 角色排序
*/
@NotBlank(message = "显示顺序不能为空")
private String roleSort;
/**
* 菜单树选择项是否关联显示( 0:父子不互相关联显示 1:父子互相关联显示)
*/
private boolean menuCheckStrictly;
/**
* 角色状态(0正常 1停用)
*/
private String status;
/**
* 用户是否存在此角色标识 默认不存在
*/
@TableField(exist = false)
private boolean flag = false;
/**
* 菜单组
*/
@TableField(exist = false)
private Long[] menuIds;
/**
* 角色菜单权限
*/
@TableField(exist = false)
private Set<String> permissions;
/**
* 备注
*/
private String remark;
public SysRoleEntity(Long roleId) {
this.roleId = roleId;
}
public boolean isAdmin() {
return isAdmin(this.roleId);
}
public static boolean isAdmin(Long roleId) {
return roleId != null && 1L == roleId;
}
}
================================================
FILE: campus-common/src/main/java/com/oddfar/campus/common/domain/entity/SysRoleMenuEntity.java
================================================
package com.oddfar.campus.common.domain.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.io.Serializable;
/**
* 角色和菜单关联 sys_role_menu
*/
@Data
@TableName("sys_role_menu")
public class SysRoleMenuEntity implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 角色ID
*/
@TableId(type = IdType.INPUT)
private Long roleId;
/**
* 菜单ID
*/
private Long menuId;
}
================================================
FILE: campus-common/src/main/java/com/oddfar/campus/common/domain/entity/SysRoleResourceEntity.java
================================================
package com.oddfar.campus.common.domain.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.io.Serializable;
/**
* 角色与接口资源关系表
*/
@Data
@TableName("sys_role_resource")
public class SysRoleResourceEntity implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 资源编码
*/
private String resourceCode;
/**
* 角色ID
*/
@TableId(type = IdType.INPUT)
private Long roleId;
}
================================================
FILE: campus-common/src/main/java/com/oddfar/campus/common/domain/entity/SysUserEntity.java
================================================
package com.oddfar.campus.common.domain.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.oddfar.campus.common.domain.BaseEntity;
import com.oddfar.campus.common.validator.Xss;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import javax.validation.constraints.Email;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;
import java.util.Date;
import java.util.List;
/**
* 用户对象 sys_user
*
* @author oddfar
* @since 1.0.0 2022-09-24
*/
@TableName("sys_user")
@EqualsAndHashCode(callSuper = true)
@Data
@NoArgsConstructor
public class SysUserEntity extends BaseEntity {
private static final long serialVersionUID = 1L;
/** 用户ID */
@TableId("user_id")
private Long userId;
/** 用户账号 */
@Xss(message = "用户账号不能包含脚本字符")
@NotBlank(message = "用户账号不能为空")
@Size(min = 0, max = 30, message = "用户账号长度不能超过30个字符")
private String userName;
/** 用户昵称 */
@Xss(message = "用户昵称不能包含脚本字符")
@Size(min = 0, max = 30, message = "用户昵称长度不能超过30个字符")
private String nickName;
/** 用户邮箱 */
@Email(message = "邮箱格式不正确")
@Size(min = 0, max = 50, message = "邮箱长度不能超过50个字符")
private String email;
/** 手机号码 */
@Size(min = 0, max = 11, message = "手机号码长度不能超过11个字符")
private String phonenumber;
/** 用户性别 */
private String sex;
/** 用户头像 */
private String avatar;
/** 密码 */
private String password;
/** 帐号状态(0正常 1停用) */
private String status;
/** 最后登录IP */
private String loginIp;
/** 最后登录时间 */
private Date loginDate;
/** 备注 */
private String remark;
/** 角色对象 */
@TableField(exist = false)
private List<SysRoleEntity> roles;
/** 资源对象 */
// @TableField(exist = false)
// private List<SysResourceEntity> resources;
/** 角色组 */
@TableField(exist = false)
private Long[] roleIds;
/** 岗位组 */
@TableField(exist = false)
private Long[] postIds;
/** 角色ID */
@TableField(exist = false)
private Long roleId;
public SysUserEntity(Long userId){
this.userId = userId;
}
public boolean isAdmin()
{
return isAdmin(this.userId);
}
public static boolean isAdmin(Long userId)
{
return userId != null && 1L == userId;
}
}
================================================
FILE: campus-common/src/main/java/com/oddfar/campus/common/domain/entity/SysUserRoleEntity.java
================================================
package com.oddfar.campus.common.domain.entity;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.io.Serializable;
/**
* 用户和角色关联 sys_user_role
*/
@Data
@TableName("sys_user_role")
public class SysUserRoleEntity implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 用户ID
*/
@TableId(type = IdType.INPUT)
private Long userId;
/**
* 角色ID
*/
private Long roleId;
}
================================================
FILE: campus-common/src/main/java/com/oddfar/campus/common/domain/model/LoginBody.java
================================================
package com.oddfar.campus.common.domain.model;
/**
* 用户登录对象
*
* @author ruoyi
*/
public class LoginBody {
/**
* 用户名
*/
private String username;
/**
* 用户密码
*/
private String password;
/**
* 验证码
*/
private String code;
/**
* 唯一标识
*/
private String uuid;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
public String getUuid() {
return uuid;
}
public void setUuid(String uuid) {
this.uuid = uuid;
}
}
================================================
FILE: campus-common/src/main/java/com/oddfar/campus/common/domain/model/LoginUser.java
================================================
package com.oddfar.campus.common.domain.model;
import com.alibaba.fastjson2.annotation.JSONField;
import com.oddfar.campus.common.domain.entity.SysUserEntity;
import lombok.AllArgsConstructor;
import lombok.Data;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;
import java.util.Collection;
import java.util.Set;
/**
* 登录用户身份权限
*
* @author ruoyi
*/
@Data
@AllArgsConstructor
public class LoginUser implements UserDetails {
private static final long serialVersionUID = 1L;
/**
* 用户ID
*/
private Long userId;
/**
* 用户唯一标识
*/
private String token;
/**
* 过期时间
*/
private Long expireTime;
/**
* 登录IP地址
*/
private String ipaddr;
/**
* 权限列表
*/
private Set<String> permissions;
/**
* 资源列表
*/
private Set<String> resources;
/**
* 用户信息
*/
private SysUserEntity user;
public LoginUser(Long userId, SysUserEntity user, Set<String> permissions, Set<String> resources) {
this.userId = userId;
this.user = user;
this.permissions = permissions;
this.resources = resources;
}
@JSONField(serialize = false)
@Override
public String getPassword() {
return user.getPassword();
}
@Override
public String getUsername() {
return user.getUserName();
}
/**
* 账户是否未过期,过期无法验证
*/
@JSONField(serialize = false)
@Override
public boolean isAccountNonExpired() {
return true;
}
/**
* 指定用户是否解锁,锁定的用户无法进行身份验证
*
* @return
*/
@JSONField(serialize = false)
@Override
public boolean isAccountNonLocked() {
return true;
}
/**
* 指示是否已过期的用户的凭据(密码),过期的凭据防止认证
*
* @return
*/
@JSONField(serialize = false)
@Override
public boolean isCredentialsNonExpired() {
return true;
}
/**
* 是否可用 ,禁用的用户不能身份验证
*
* @return
*/
@JSONField(serialize = false)
@Override
public boolean isEnabled() {
return true;
}
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
return null;
}
}
================================================
FILE: campus-common/src/main/java/com/oddfar/campus/common/domain/model/LoginUserToken.java
================================================
package com.oddfar.campus.common.domain.model;
import lombok.Data;
/**
* 登录用户身份信息
*
*/
@Data
public class LoginUserToken {
/**
* 用户ID
*/
private Long userId;
/**
* 用户唯一标识
*/
private String token;
/**
* 登录时间
*/
private Long loginTime;
/**
* 过期时间
*/
private Long expireTime;
/**
* 登录IP地址
*/
private String ipaddr;
/**
* 登录地点
*/
private String loginLocation;
/**
* 浏览器类型
*/
private String browser;
/**
* 操作系统
*/
private String os;
public LoginUserToken() {
}
public LoginUserToken(LoginUser loginUser) {
this.userId = loginUser.getUserId();
this.token = loginUser.getToken();
}
}
================================================
FILE: campus-common/src/main/java/com/oddfar/campus/common/domain/model/RegisterBody.java
================================================
package com.oddfar.campus.common.domain.model;
import lombok.Data;
/**
* 用户注册对象
*/
@Data
public class RegisterBody extends LoginBody {
/**
* 邮箱
*/
private String email;
}
================================================
FILE: campus-common/src/main/java/com/oddfar/campus/common/domain/model/SysRoleAuth.java
================================================
package com.oddfar.campus.common.domain.model;
import com.oddfar.campus.common.domain.entity.SysRoleResourceEntity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class SysRoleAuth {
/**
* 角色id
*/
Long roleID;
/**
* 权限字符
*/
String perms;
/**
* 资源编码
*/
String resourceCode;
public SysRoleAuth(SysRoleResourceEntity roleResourceEntity) {
this.roleID = roleResourceEntity.getRoleId();
this.resourceCode = roleResourceEntity.getResourceCode();
}
}
================================================
FILE: campus-common/src/main/java/com/oddfar/campus/common/domain/model/SysRoleAuthList.java
================================================
package com.oddfar.campus.common.domain.model;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Set;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class SysRoleAuthList {
/**
* 角色id
*/
Long roleID;
/**
* 权限字符
*/
Set<String> perms;
/**
* 资源编码
*/
Set<String> resourceCode;
}
================================================
FILE: campus-common/src/main/java/com/oddfar/campus/common/domain/vo/RouterVo.java
================================================
package com.oddfar.campus.common.domain.vo;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.oddfar.campus.common.utils.MetaVo;
import java.util.List;
/**
* 路由配置信息
*
* @author ruoyi
*/
@JsonInclude(JsonInclude.Include.NON_EMPTY)
public class RouterVo {
/**
* 路由名字
*/
private String name;
/**
* 路由地址
*/
private String path;
/**
* 是否隐藏路由,当设置 true 的时候该路由不会再侧边栏出现
*/
private boolean hidden;
/**
* 重定向地址,当设置 noRedirect 的时候该路由在面包屑导航中不可被点击
*/
private String redirect;
/**
* 组件地址
*/
private String component;
/**
* 路由参数:如 {"id": 1, "name": "ry"}
*/
private String query;
/**
* 当你一个路由下面的 children 声明的路由大于1个时,自动会变成嵌套的模式--如组件页面
*/
private Boolean alwaysShow;
/**
* 其他元素
*/
private MetaVo meta;
/**
* 子路由
*/
private List<RouterVo> children;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPath() {
return path;
}
public void setPath(String path) {
this.path = path;
}
public boolean getHidden() {
return hidden;
}
public void setHidden(boolean hidden) {
this.hidden = hidden;
}
public String getRedirect() {
return redirect;
}
public void setRedirect(String redirect) {
this.redirect = redirect;
}
public String getComponent() {
return component;
}
public void setComponent(String component) {
this.component = component;
}
public String getQuery() {
return query;
}
public void setQuery(String query) {
this.query = query;
}
public Boolean getAlwaysShow() {
return alwaysShow;
}
public void setAlwaysShow(Boolean alwaysShow) {
this.alwaysShow = alwaysShow;
}
public MetaVo getMeta() {
return meta;
}
public void setMeta(MetaVo meta) {
this.meta = meta;
}
public List<RouterVo> getChildren() {
return children;
}
public void setChildren(List<RouterVo> children) {
this.children = children;
}
}
================================================
FILE: campus-common/src/main/java/com/oddfar/campus/common/enums/BizCodeEnum.java
================================================
package com.oddfar.campus.common.enums;
/***
* 错误码和错误信息定义类
* 1. 错误码定义规则为5为数字
* 2. 前两位表示业务场景,最后三位表示错误码。例如:100001。10:通用 001:系统未知异常
* 3. 维护错误码后需要维护错误描述,将他们定义为枚举形式
* 错误码列表:
* 10: 通用
* 001:参数格式校验
*
*
*/
public enum BizCodeEnum {
UNKNOWN_EXCEPTION(10000, "系统未知错误"),
VALID_EXCEPTION(10001, "参数校验异常");
private Integer code;
private String msg;
private BizCodeEnum(Integer code, String msg) {
this.code = code;
this.msg = msg;
}
public Integer getCode() {
return code;
}
public String getMsg() {
return msg;
}
}
================================================
FILE: campus-common/src/main/java/com/oddfar/campus/common/enums/BusinessStatus.java
================================================
package com.oddfar.campus.common.enums;
/**
* 操作状态
*
* @author ruoyi
*/
public enum BusinessStatus {
/**
* 成功
*/
SUCCESS,
/**
* 失败
*/
FAIL,
}
================================================
FILE: campus-common/src/main/java/com/oddfar/campus/common/enums/ResBizTypeEnum.java
================================================
package com.oddfar.campus.common.enums;
import lombok.Getter;
/**
* 接口资源的类别
*/
@Getter
public enum ResBizTypeEnum {
/**
* 业务类
*/
BUSINESS(1, "业务类"),
/**
* 系统类
*/
SYSTEM(2, "系统类");
private final Integer code;
private final String message;
ResBizTypeEnum(Integer code, String message) {
this.code = code;
this.message = message;
}
}
================================================
FILE: campus-common/src/main/java/com/oddfar/campus/common/enums/SensitiveStrategy.java
================================================
package com.oddfar.campus.common.enums;
import cn.hutool.core.util.DesensitizedUtil;
import lombok.AllArgsConstructor;
import java.util.function.Function;
/**
* 脱敏策略
*
* @author Yjoioooo
* @version 3.6.0
*/
@AllArgsConstructor
public enum SensitiveStrategy {
/**
* 身份证脱敏
*/
ID_CARD(s -> DesensitizedUtil.idCardNum(s, 3, 4)),
/**
* 手机号脱敏
*/
PHONE(DesensitizedUtil::mobilePhone),
/**
* 地址脱敏
*/
ADDRESS(s -> DesensitizedUtil.address(s, 8)),
/**
* 邮箱脱敏
*/
EMAIL(DesensitizedUtil::email),
/**
* 银行卡
*/
BANK_CARD(DesensitizedUtil::bankCard);
//可自行添加其他脱敏策略
private final Function<String, String> desensitizer;
public Function<String, String> desensitizer() {
return desensitizer;
}
}
================================================
FILE: campus-common/src/main/java/com/oddfar/campus/common/enums/UserStatusEnum.java
================================================
package com.oddfar.campus.common.enums;
/**
* 用户状态
*
* @author ruoyi
*/
public enum UserStatusEnum {
OK("0", "正常"), DISABLE("1", "停用"), DELETED("2", "删除");
private final String code;
private final String info;
UserStatusEnum(String code, String info) {
this.code = code;
this.info = info;
}
public String getCode() {
return code;
}
public String getInfo() {
return info;
}
}
================================================
FILE: campus-common/src/main/java/com/oddfar/campus/common/exception/ServiceException.java
================================================
package com.oddfar.campus.common.exception;
/**
* 业务异常
*
* @author ruoyi
*/
public final class ServiceException extends RuntimeException {
private static final long serialVersionUID = 1L;
/**
* 错误码
*/
private Integer code;
/**
* 错误提示
*/
private String message;
/**
* 错误明细,内部调试错误
*/
private String detailMessage;
/**
* 空构造方法,避免反序列化问题
*/
public ServiceException() {
}
public ServiceException(String message) {
this.message = message;
}
public ServiceException(String message, Integer code) {
this.message = message;
this.code = code;
}
public String getDetailMessage() {
return detailMessage;
}
@Override
public String getMessage() {
return message;
}
public Integer getCode() {
return code;
}
public ServiceException setMessage(String message) {
this.message = message;
return this;
}
public ServiceException setDetailMessage(String detailMessage) {
this.detailMessage = detailMessage;
return this;
}
}
================================================
FILE: campus-common/src/main/java/com/oddfar/campus/common/exception/UtilException.java
================================================
package com.oddfar.campus.common.exception;
/**
* 工具类异常
*
* @author ruoyi
*/
public class UtilException extends RuntimeException {
private static final long serialVersionUID = 8247610319171014183L;
public UtilException(Throwable e) {
super(e.getMessage(), e);
}
public UtilException(String message) {
super(message);
}
public UtilException(String message, Throwable throwable) {
super(message, throwable);
}
}
================================================
FILE: campus-common/src/main/java/com/oddfar/campus/common/exception/base/BaseException.java
================================================
package com.oddfar.campus.common.exception.base;
import com.oddfar.campus.common.utils.MessageUtils;
import com.oddfar.campus.common.utils.StringUtils;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 基础异常
*
* @author ruoyi
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class BaseException extends RuntimeException {
private static final long serialVersionUID = 1L;
/**
* 所属模块
*/
private String module;
/**
* 错误码
*/
private String code;
/**
* 错误码对应的参数
*/
private Object[] args;
/**
* 错误消息
*/
private String defaultMessage;
@Override
public String getMessage() {
String message = null;
if (!StringUtils.isEmpty(code)) {
message = MessageUtils.message(code, args);
}
if (message == null) {
message = defaultMessage;
}
return message;
}
}
================================================
FILE: campus-common/src/main/java/com/oddfar/campus/common/exception/file/FileException.java
================================================
package com.oddfar.campus.common.exception.file;
import com.oddfar.campus.common.exception.base.BaseException;
/**
* 文件信息异常类
*
* @author ruoyi
*/
public class FileException extends BaseException {
private static final long serialVersionUID = 1L;
public FileException(String code, Object[] args) {
super("file", code, args, null);
}
}
================================================
FILE: campus-common/src/main/java/com/oddfar/campus/common/exception/file/FileNameLengthLimitExceededException.java
================================================
package com.oddfar.campus.common.exception.file;
/**
* 文件名称超长限制异常类
*
* @author ruoyi
*/
public class FileNameLengthLimitExceededException extends FileException
{
private static final long serialVersionUID = 1L;
public FileNameLengthLimitExceededException(int defaultFileNameLength)
{
super("upload.filename.exceed.length", new Object[] { defaultFileNameLength });
}
}
================================================
FILE: campus-common/src/main/java/com/oddfar/campus/common/exception/file/FileSizeLimitExceededException.java
================================================
package com.oddfar.campus.common.exception.file;
/**
* 文件名大小限制异常类
*
* @author ruoyi
*/
public class FileSizeLimitExceededException extends FileException
{
private static final long serialVersionUID = 1L;
public FileSizeLimitExceededException(long defaultMaxSize)
{
super("upload.exceed.maxSize", new Object[] { defaultMaxSize });
}
}
================================================
FILE: campus-common/src/main/java/com/oddfar/campus/common/exception/file/InvalidExtensionException.java
================================================
package com.oddfar.campus.common.exception.file;
import org.apache.commons.fileupload.FileUploadException;
import java.util.Arrays;
/**
* 文件上传 误异常类
*
* @author ruoyi
*/
public class InvalidExtensionException extends FileUploadException {
private static final long serialVersionUID = 1L;
private String[] allowedExtension;
private String extension;
private String filename;
public InvalidExtensionException(String[] allowedExtension, String extension, String filename) {
super("文件[" + filename + "]后缀[" + extension + "]不正确,请上传" + Arrays.toString(allowedExtension) + "格式");
this.allowedExtension = allowedExtension;
this.extension = extension;
this.filename = filename;
}
public String[] getAllowedExtension() {
return allowedExtension;
}
public String getExtension() {
return extension;
}
public String getFilename() {
return filename;
}
public static class InvalidImageExtensionException extends InvalidExtensionException {
private static final long serialVersionUID = 1L;
public InvalidImageExtensionException(String[] allowedExtension, String extension, String filename) {
super(allowedExtension, extension, filename);
}
}
public static class InvalidFlashExtensionException extends InvalidExtensionException {
private static final long serialVersionUID = 1L;
public InvalidFlashExtensionException(String[] allowedExtension, String extension, String filename) {
super(allowedExtension, extension, filename);
}
}
public static class InvalidMediaExtensionException extends InvalidExtensionException {
private static final long serialVersionUID = 1L;
public InvalidMediaExtensionException(String[] allowedExtension, String extension, String filename) {
super(allowedExtension, extension, filename);
}
}
public static class InvalidVideoExtensionException extends InvalidExtensionException {
private static final long serialVersionUID = 1L;
public InvalidVideoExtensionException(String[] allowedExtension, String extension, String filename) {
super(allowedExtension, extension, filename);
}
}
}
================================================
FILE: campus-common/src/main/java/com/oddfar/campus/common/exception/user/CaptchaException.java
================================================
package com.oddfar.campus.common.exception.user;
/**
* 验证码错误异常类
*
* @author ruoyi
*/
public class CaptchaException extends UserException {
private static final long serialVersionUID = 1L;
public CaptchaException() {
super("user.jcaptcha.error", null);
}
}
================================================
FILE: campus-common/src/main/java/com/oddfar/campus/common/exception/user/CaptchaExpireException.java
================================================
package com.oddfar.campus.common.exception.user;
/**
* 验证码失效异常类
*
* @author ruoyi
*/
public class CaptchaExpireException extends UserException {
private static final long serialVersionUID = 1L;
public CaptchaExpireException() {
super("user.jcaptcha.expire", null);
}
}
================================================
FILE: campus-common/src/main/java/com/oddfar/campus/common/exception/user/UserException.java
================================================
package com.oddfar.campus.common.exception.user;
import com.oddfar.campus.common.exception.base.BaseException;
/**
* 用户信息异常类
*
* @author ruoyi
*/
public class UserException extends BaseException {
private static final long serialVersionUID = 1L;
public UserException(String code, Object[] args) {
super("user", code, args, null);
}
}
================================================
FILE: campus-common/src/main/java/com/oddfar/campus/common/exception/user/UserPasswordNotMatchException.java
================================================
package com.oddfar.campus.common.exception.user;
/**
* 用户密码不正确或不符合规范异常类
*
* @author ruoyi
*/
public class UserPasswordNotMatchException extends UserException {
private static final long serialVersionUID = 1L;
public UserPasswordNotMatchException() {
super("user.password.not.match", null);
}
}
================================================
FILE: campus-common/src/main/java/com/oddfar/campus/common/exception/user/UserPasswordRetryLimitExceedException.java
================================================
package com.oddfar.campus.common.exception.user;
/**
* 用户错误最大次数异常类
*
* @author ruoyi
*/
public class UserPasswordRetryLimitExceedException extends UserException
{
private static final long serialVersionUID = 1L;
public UserPasswordRetryLimitExceedException(int retryLimitCount, int lockTime)
{
super("user.password.retry.limit.exceed", new Object[] { retryLimitCount, lockTime });
}
}
================================================
FILE: campus-common/src/main/java/com/oddfar/campus/common/filter/PropertyPreExcludeFilter.java
================================================
package com.oddfar.campus.common.filter;
import com.alibaba.fastjson2.filter.SimplePropertyPreFilter;
/**
* 排除JSON敏感属性
*
* @author ruoyi
*/
public class PropertyPreExcludeFilter extends SimplePropertyPreFilter {
public PropertyPreExcludeFilter() {
}
public PropertyPreExcludeFilter addExcludes(String... filters) {
for (int i = 0; i < filters.length; i++) {
this.getExcludes().add(filters[i]);
}
return this;
}
}
================================================
FILE: campus-common/src/main/java/com/oddfar/campus/common/filter/RepeatedlyRequestWrapper.java
================================================
package com.oddfar.campus.common.filter;
import com.oddfar.campus.common.constant.Constants;
import com.oddfar.campus.common.utils.http.HttpHelper;
import javax.servlet.ReadListener;
import javax.servlet.ServletInputStream;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
/**
* 构建可重复读取inputStream的request
*
* @author ruoyi
*/
public class RepeatedlyRequestWrapper extends HttpServletRequestWrapper
{
private final byte[] body;
public RepeatedlyRequestWrapper(HttpServletRequest request, ServletResponse response) throws IOException
{
super(request);
request.setCharacterEncoding(Constants.UTF8);
response.setCharacterEncoding(Constants.UTF8);
gitextract_lhpb8umu/
├── .gitattributes
├── .github/
│ ├── ISSUE_TEMPLATE/
│ │ ├── bug_report.yaml
│ │ └── feature_request.md
│ └── workflows/
│ ├── api.yml
│ ├── release.yml
│ └── web.yml
├── .gitignore
├── .run/
│ └── campus-server.run.xml
├── LICENSE
├── README.md
├── campus-admin/
│ ├── pom.xml
│ └── src/
│ └── main/
│ └── java/
│ └── com/
│ └── oddfar/
│ └── campus/
│ └── admin/
│ ├── config/
│ │ ├── CaptchaConfig.java
│ │ └── SwaggerConfig.java
│ └── controller/
│ ├── monitor/
│ │ ├── SysLogininforController.java
│ │ └── SysOperlogController.java
│ └── system/
│ ├── CaptchaController.java
│ ├── SysApiResourceController.java
│ ├── SysConfigController.java
│ ├── SysDictDataController.java
│ ├── SysDictTypeController.java
│ ├── SysIndexController.java
│ ├── SysLoginController.java
│ ├── SysMenuController.java
│ ├── SysProfileController.java
│ ├── SysRegisterController.java
│ ├── SysRoleController.java
│ └── SysUserController.java
├── campus-common/
│ ├── pom.xml
│ └── src/
│ └── main/
│ └── java/
│ └── com/
│ └── oddfar/
│ └── campus/
│ └── common/
│ ├── annotation/
│ │ ├── Anonymous.java
│ │ ├── ApiResource.java
│ │ ├── Log.java
│ │ ├── RepeatSubmit.java
│ │ └── Sensitive.java
│ ├── config/
│ │ ├── CampusConfig.java
│ │ ├── FastJson2JsonRedisSerializer.java
│ │ ├── RedisConfig.java
│ │ └── SensitiveSerializer.java
│ ├── constant/
│ │ ├── CacheConstants.java
│ │ ├── Constants.java
│ │ ├── HttpStatus.java
│ │ └── UserConstants.java
│ ├── core/
│ │ ├── BaseMapperX.java
│ │ ├── LambdaQueryWrapperX.java
│ │ ├── RedisCache.java
│ │ ├── page/
│ │ │ ├── PageQuery.java
│ │ │ └── TableDataInfo.java
│ │ └── text/
│ │ ├── CharsetKit.java
│ │ └── Convert.java
│ ├── domain/
│ │ ├── BaseEntity.java
│ │ ├── PageResult.java
│ │ ├── R.java
│ │ ├── TreeSelect.java
│ │ ├── entity/
│ │ │ ├── SysConfigEntity.java
│ │ │ ├── SysDictDataEntity.java
│ │ │ ├── SysDictTypeEntity.java
│ │ │ ├── SysLoginLogEntity.java
│ │ │ ├── SysMenuEntity.java
│ │ │ ├── SysOperLogEntity.java
│ │ │ ├── SysResourceEntity.java
│ │ │ ├── SysRoleEntity.java
│ │ │ ├── SysRoleMenuEntity.java
│ │ │ ├── SysRoleResourceEntity.java
│ │ │ ├── SysUserEntity.java
│ │ │ └── SysUserRoleEntity.java
│ │ ├── model/
│ │ │ ├── LoginBody.java
│ │ │ ├── LoginUser.java
│ │ │ ├── LoginUserToken.java
│ │ │ ├── RegisterBody.java
│ │ │ ├── SysRoleAuth.java
│ │ │ └── SysRoleAuthList.java
│ │ └── vo/
│ │ └── RouterVo.java
│ ├── enums/
│ │ ├── BizCodeEnum.java
│ │ ├── BusinessStatus.java
│ │ ├── ResBizTypeEnum.java
│ │ ├── SensitiveStrategy.java
│ │ └── UserStatusEnum.java
│ ├── exception/
│ │ ├── ServiceException.java
│ │ ├── UtilException.java
│ │ ├── base/
│ │ │ └── BaseException.java
│ │ ├── file/
│ │ │ ├── FileException.java
│ │ │ ├── FileNameLengthLimitExceededException.java
│ │ │ ├── FileSizeLimitExceededException.java
│ │ │ └── InvalidExtensionException.java
│ │ └── user/
│ │ ├── CaptchaException.java
│ │ ├── CaptchaExpireException.java
│ │ ├── UserException.java
│ │ ├── UserPasswordNotMatchException.java
│ │ └── UserPasswordRetryLimitExceedException.java
│ ├── filter/
│ │ ├── PropertyPreExcludeFilter.java
│ │ └── RepeatedlyRequestWrapper.java
│ ├── utils/
│ │ ├── DateUtils.java
│ │ ├── DictUtils.java
│ │ ├── LogUtils.java
│ │ ├── MessageUtils.java
│ │ ├── MetaVo.java
│ │ ├── SecurityUtils.java
│ │ ├── ServletUtils.java
│ │ ├── SpringUtils.java
│ │ ├── StringUtils.java
│ │ ├── Threads.java
│ │ ├── http/
│ │ │ ├── HttpHelper.java
│ │ │ └── HttpUtils.java
│ │ ├── ip/
│ │ │ ├── AddressUtils.java
│ │ │ └── IpUtils.java
│ │ ├── pol/
│ │ │ └── ExcelHandlerAdapter.java
│ │ ├── reflect/
│ │ │ └── ReflectUtils.java
│ │ ├── spring/
│ │ │ └── AopTargetUtils.java
│ │ ├── sql/
│ │ │ └── SqlUtil.java
│ │ ├── uuid/
│ │ │ ├── IdUtils.java
│ │ │ └── Seq.java
│ │ └── web/
│ │ └── WebFrameworkUtils.java
│ └── validator/
│ ├── Xss.java
│ └── XssValidator.java
├── campus-framework/
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── com/
│ │ └── oddfar/
│ │ └── campus/
│ │ └── framework/
│ │ ├── api/
│ │ │ ├── file/
│ │ │ │ ├── FileOperatorApi.java
│ │ │ │ ├── FileUploadUtils.java
│ │ │ │ ├── LocalFileOperator.java
│ │ │ │ ├── MimeTypeUtils.java
│ │ │ │ └── ZyFileAutoConfiguration.java
│ │ │ ├── mail/
│ │ │ │ ├── Impl/
│ │ │ │ │ └── MailServiceImpl.java
│ │ │ │ ├── MailConfigRead.java
│ │ │ │ ├── MailSendApi.java
│ │ │ │ ├── MailSendContext.java
│ │ │ │ └── ZyMailAutoConfig.java
│ │ │ ├── resource/
│ │ │ │ ├── ApiResourceAutoConfig.java
│ │ │ │ ├── ResourceCollectorApi.java
│ │ │ │ └── impl/
│ │ │ │ └── DefaultResourceCollector.java
│ │ │ └── sysconfig/
│ │ │ ├── ConfigContext.java
│ │ │ ├── ConfigExpander.java
│ │ │ └── ZyConfigAutoConfiguration.java
│ │ ├── aspectj/
│ │ │ └── LogAspect.java
│ │ ├── config/
│ │ │ ├── ApplicationConfig.java
│ │ │ ├── AsyncConfig.java
│ │ │ ├── JacksonConfig.java
│ │ │ ├── KaptchaTextCreator.java
│ │ │ ├── MyWebMvcConfig.java
│ │ │ ├── MybatisPlusConfig.java
│ │ │ ├── SecurityConfig.java
│ │ │ └── ThreadPoolConfig.java
│ │ ├── expander/
│ │ │ ├── SysConfigExpander.java
│ │ │ └── SysFileConfigExpander.java
│ │ ├── handler/
│ │ │ ├── BigNumberSerializer.java
│ │ │ └── MyDBFieldHandler.java
│ │ ├── interceptor/
│ │ │ ├── RepeatSubmitInterceptor.java
│ │ │ └── impl/
│ │ │ └── SameUrlDataInterceptor.java
│ │ ├── listener/
│ │ │ ├── ApiResourceScanner.java
│ │ │ ├── ReadyEventListener.java
│ │ │ └── ResourceReportListener.java
│ │ ├── manager/
│ │ │ ├── AsyncFactory.java
│ │ │ └── AsyncManager.java
│ │ ├── mapper/
│ │ │ ├── SysConfigMapper.java
│ │ │ ├── SysDictDataMapper.java
│ │ │ ├── SysDictTypeMapper.java
│ │ │ ├── SysLoginLogMapper.java
│ │ │ ├── SysMenuMapper.java
│ │ │ ├── SysOperLogMapper.java
│ │ │ ├── SysResourceMapper.java
│ │ │ ├── SysRoleMapper.java
│ │ │ ├── SysRoleMenuMapper.java
│ │ │ ├── SysRoleResourceMapper.java
│ │ │ ├── SysUserMapper.java
│ │ │ └── SysUserRoleMapper.java
│ │ ├── security/
│ │ │ ├── context/
│ │ │ │ ├── AuthenticationContextHolder.java
│ │ │ │ └── PermissionContextHolder.java
│ │ │ ├── filter/
│ │ │ │ └── JwtAuthenticationTokenFilter.java
│ │ │ ├── handle/
│ │ │ │ ├── AuthenticationEntryPointImpl.java
│ │ │ │ └── LogoutSuccessHandlerImpl.java
│ │ │ └── properties/
│ │ │ └── PermitAllUrlProperties.java
│ │ ├── service/
│ │ │ ├── SysConfigService.java
│ │ │ ├── SysDictDataService.java
│ │ │ ├── SysDictTypeService.java
│ │ │ ├── SysLoginLogService.java
│ │ │ ├── SysMenuService.java
│ │ │ ├── SysOperLogService.java
│ │ │ ├── SysResourceService.java
│ │ │ ├── SysRoleService.java
│ │ │ ├── SysUserService.java
│ │ │ └── impl/
│ │ │ ├── SysConfigServiceImpl.java
│ │ │ ├── SysDictDataServiceImpl.java
│ │ │ ├── SysDictTypeServiceImpl.java
│ │ │ ├── SysLoginLogServiceImpl.java
│ │ │ ├── SysMenuServiceImpl.java
│ │ │ ├── SysOperLogServiceImpl.java
│ │ │ ├── SysResourceServiceImpl.java
│ │ │ ├── SysRoleServiceImpl.java
│ │ │ └── SysUserServiceImpl.java
│ │ └── web/
│ │ ├── exception/
│ │ │ └── GlobalExceptionHandler.java
│ │ └── service/
│ │ ├── PermissionService.java
│ │ ├── SysLoginService.java
│ │ ├── SysPasswordService.java
│ │ ├── SysPermissionService.java
│ │ ├── SysRegisterService.java
│ │ ├── TokenService.java
│ │ └── UserDetailsServiceImpl.java
│ └── resources/
│ └── mapper/
│ ├── SysConfigMapper.xml
│ ├── SysDictDataMapper.xml
│ ├── SysDictTypeMapper.xml
│ ├── SysLoginLogMapper.xml
│ ├── SysMenuMapper.xml
│ ├── SysOperLogMapper.xml
│ ├── SysResourceMapper.xml
│ ├── SysRoleMapper.xml
│ ├── SysRoleMenuMapper.xml
│ ├── SysRoleResourceMapper.xml
│ ├── SysUserMapper.xml
│ └── SysUserRoleMapper.xml
├── campus-modular/
│ ├── Dockerfile
│ ├── pom.xml
│ └── src/
│ └── main/
│ ├── java/
│ │ └── com/
│ │ └── oddfar/
│ │ └── campus/
│ │ ├── CampusApplication.java
│ │ └── business/
│ │ ├── api/
│ │ │ └── PushPlusApi.java
│ │ ├── controller/
│ │ │ ├── IItemController.java
│ │ │ ├── ILogController.java
│ │ │ ├── IShopController.java
│ │ │ ├── IUserController.java
│ │ │ └── TestController.java
│ │ ├── domain/
│ │ │ ├── IMTCacheConstants.java
│ │ │ ├── IMTItemInfo.java
│ │ │ ├── IUserRequest.java
│ │ │ └── MapPoint.java
│ │ ├── entity/
│ │ │ ├── IItem.java
│ │ │ ├── ILog.java
│ │ │ ├── IShop.java
│ │ │ └── IUser.java
│ │ ├── mapper/
│ │ │ ├── IItemMapper.java
│ │ │ ├── ILogMapper.java
│ │ │ ├── IShopMapper.java
│ │ │ └── IUserMapper.java
│ │ ├── service/
│ │ │ ├── IMTLogFactory.java
│ │ │ ├── IMTLogService.java
│ │ │ ├── IMTService.java
│ │ │ ├── IShopService.java
│ │ │ ├── IUserService.java
│ │ │ └── impl/
│ │ │ ├── IMTLogServiceImpl.java
│ │ │ ├── IMTServiceImpl.java
│ │ │ ├── IShopServiceImpl.java
│ │ │ └── IUserServiceImpl.java
│ │ └── task/
│ │ └── CampusIMTTask.java
│ └── resources/
│ ├── application-dev.yml
│ ├── application-prod.yml
│ ├── application.yml
│ ├── i18n/
│ │ └── messages.properties
│ ├── logback.xml
│ ├── mapper/
│ │ ├── IItemMapper.xml
│ │ ├── ILogMapper.xml
│ │ ├── IShopMapper.xml
│ │ └── IUserMapper.xml
│ └── spy.properties
├── doc/
│ ├── docker/
│ │ ├── docker-compose.yml
│ │ ├── nginx/
│ │ │ └── conf/
│ │ │ └── nginx.conf
│ │ ├── redis/
│ │ │ ├── conf/
│ │ │ │ └── redis.conf
│ │ │ └── data/
│ │ │ └── README.md
│ │ └── server/
│ │ └── conf/
│ │ └── README.md
│ └── sql/
│ └── campus_imaotai-1.0.5.sql
├── pom.xml
└── vue_campus_admin/
├── .editorconfig
├── .eslintignore
├── .eslintrc.js
├── .gitignore
├── Dockerfile
├── README.md
├── babel.config.js
├── bin/
│ ├── build.bat
│ ├── package.bat
│ └── run-web.bat
├── package.json
├── public/
│ ├── html/
│ │ └── ie.html
│ ├── index.html
│ └── robots.txt
├── src/
│ ├── App.vue
│ ├── api/
│ │ ├── imt/
│ │ │ ├── item.js
│ │ │ ├── log.js
│ │ │ ├── shop.js
│ │ │ └── user.js
│ │ ├── login.js
│ │ ├── menu.js
│ │ ├── monitor/
│ │ │ ├── cache.js
│ │ │ ├── job.js
│ │ │ ├── jobLog.js
│ │ │ ├── logininfor.js
│ │ │ ├── online.js
│ │ │ ├── operlog.js
│ │ │ └── server.js
│ │ ├── system/
│ │ │ ├── config.js
│ │ │ ├── dept.js
│ │ │ ├── dict/
│ │ │ │ ├── data.js
│ │ │ │ └── type.js
│ │ │ ├── index.js
│ │ │ ├── menu.js
│ │ │ ├── notice.js
│ │ │ ├── post.js
│ │ │ ├── resource.js
│ │ │ ├── role.js
│ │ │ └── user.js
│ │ └── tool/
│ │ └── gen.js
│ ├── assets/
│ │ ├── icons/
│ │ │ ├── index.js
│ │ │ └── svgo.yml
│ │ └── styles/
│ │ ├── btn.scss
│ │ ├── element-ui.scss
│ │ ├── element-variables.scss
│ │ ├── index.scss
│ │ ├── mixin.scss
│ │ ├── ruoyi.scss
│ │ ├── sidebar.scss
│ │ ├── transition.scss
│ │ └── variables.scss
│ ├── components/
│ │ ├── Breadcrumb/
│ │ │ └── index.vue
│ │ ├── Crontab/
│ │ │ ├── day.vue
│ │ │ ├── hour.vue
│ │ │ ├── index.vue
│ │ │ ├── min.vue
│ │ │ ├── month.vue
│ │ │ ├── result.vue
│ │ │ ├── second.vue
│ │ │ ├── week.vue
│ │ │ └── year.vue
│ │ ├── DictData/
│ │ │ └── index.js
│ │ ├── DictTag/
│ │ │ └── index.vue
│ │ ├── Editor/
│ │ │ └── index.vue
│ │ ├── FileUpload/
│ │ │ └── index.vue
│ │ ├── Hamburger/
│ │ │ └── index.vue
│ │ ├── HeaderSearch/
│ │ │ └── index.vue
│ │ ├── IconSelect/
│ │ │ ├── index.vue
│ │ │ └── requireIcons.js
│ │ ├── ImagePreview/
│ │ │ └── index.vue
│ │ ├── ImageUpload/
│ │ │ └── index.vue
│ │ ├── Pagination/
│ │ │ └── index.vue
│ │ ├── PanThumb/
│ │ │ └── index.vue
│ │ ├── ParentView/
│ │ │ └── index.vue
│ │ ├── RightPanel/
│ │ │ └── index.vue
│ │ ├── RightToolbar/
│ │ │ └── index.vue
│ │ ├── RuoYi/
│ │ │ ├── Doc/
│ │ │ │ └── index.vue
│ │ │ └── Git/
│ │ │ └── index.vue
│ │ ├── Screenfull/
│ │ │ └── index.vue
│ │ ├── SizeSelect/
│ │ │ └── index.vue
│ │ ├── SvgIcon/
│ │ │ └── index.vue
│ │ ├── ThemePicker/
│ │ │ └── index.vue
│ │ ├── TopNav/
│ │ │ └── index.vue
│ │ └── iFrame/
│ │ └── index.vue
│ ├── directive/
│ │ ├── dialog/
│ │ │ ├── drag.js
│ │ │ ├── dragHeight.js
│ │ │ └── dragWidth.js
│ │ ├── index.js
│ │ ├── module/
│ │ │ └── clipboard.js
│ │ └── permission/
│ │ ├── hasPermi.js
│ │ └── hasRole.js
│ ├── layout/
│ │ ├── components/
│ │ │ ├── AppMain.vue
│ │ │ ├── IframeToggle/
│ │ │ │ └── index.vue
│ │ │ ├── InnerLink/
│ │ │ │ └── index.vue
│ │ │ ├── Navbar.vue
│ │ │ ├── Settings/
│ │ │ │ └── index.vue
│ │ │ ├── Sidebar/
│ │ │ │ ├── FixiOSBug.js
│ │ │ │ ├── Item.vue
│ │ │ │ ├── Link.vue
│ │ │ │ ├── Logo.vue
│ │ │ │ ├── SidebarItem.vue
│ │ │ │ └── index.vue
│ │ │ ├── TagsView/
│ │ │ │ ├── ScrollPane.vue
│ │ │ │ └── index.vue
│ │ │ └── index.js
│ │ ├── index.vue
│ │ └── mixin/
│ │ └── ResizeHandler.js
│ ├── main.js
│ ├── permission.js
│ ├── plugins/
│ │ ├── auth.js
│ │ ├── cache.js
│ │ ├── download.js
│ │ ├── index.js
│ │ ├── modal.js
│ │ └── tab.js
│ ├── router/
│ │ └── index.js
│ ├── settings.js
│ ├── store/
│ │ ├── getters.js
│ │ ├── index.js
│ │ └── modules/
│ │ ├── app.js
│ │ ├── dict.js
│ │ ├── permission.js
│ │ ├── settings.js
│ │ ├── tagsView.js
│ │ └── user.js
│ ├── utils/
│ │ ├── auth.js
│ │ ├── crypto.js
│ │ ├── dict/
│ │ │ ├── Dict.js
│ │ │ ├── DictConverter.js
│ │ │ ├── DictData.js
│ │ │ ├── DictMeta.js
│ │ │ ├── DictOptions.js
│ │ │ └── index.js
│ │ ├── errorCode.js
│ │ ├── generator/
│ │ │ ├── config.js
│ │ │ ├── css.js
│ │ │ ├── drawingDefault.js
│ │ │ ├── html.js
│ │ │ ├── icon.json
│ │ │ ├── js.js
│ │ │ └── render.js
│ │ ├── index.js
│ │ ├── jsencrypt.js
│ │ ├── permission.js
│ │ ├── request.js
│ │ ├── ruoyi.js
│ │ ├── scroll-to.js
│ │ └── validate.js
│ └── views/
│ ├── components/
│ │ └── icons/
│ │ ├── element-icons.js
│ │ ├── index.vue
│ │ └── svg-icons.js
│ ├── dashboard/
│ │ ├── BarChart.vue
│ │ ├── LineChart.vue
│ │ ├── PanelGroup.vue
│ │ ├── PieChart.vue
│ │ ├── RaddarChart.vue
│ │ └── mixins/
│ │ └── resize.js
│ ├── error/
│ │ ├── 401.vue
│ │ └── 404.vue
│ ├── imt/
│ │ ├── item/
│ │ │ └── index.vue
│ │ ├── log/
│ │ │ └── index.vue
│ │ ├── shop/
│ │ │ └── index.vue
│ │ └── user/
│ │ └── index.vue
│ ├── index.vue
│ ├── index_v1.vue
│ ├── login.vue
│ ├── monitor/
│ │ ├── job/
│ │ │ ├── index.vue
│ │ │ └── log.vue
│ │ ├── logininfor/
│ │ │ └── index.vue
│ │ ├── online/
│ │ │ └── index.vue
│ │ └── operlog/
│ │ └── index.vue
│ ├── redirect.vue
│ ├── register.vue
│ ├── system/
│ │ ├── config/
│ │ │ └── index.vue
│ │ ├── dict/
│ │ │ ├── data.vue
│ │ │ └── index.vue
│ │ ├── menu/
│ │ │ └── index.vue
│ │ ├── notice/
│ │ │ └── index.vue
│ │ ├── role/
│ │ │ ├── authUser.vue
│ │ │ ├── index.vue
│ │ │ └── selectUser.vue
│ │ └── user/
│ │ ├── authRole.vue
│ │ ├── index.vue
│ │ └── profile/
│ │ ├── index.vue
│ │ ├── resetPwd.vue
│ │ ├── userAvatar.vue
│ │ └── userInfo.vue
│ └── tool/
│ ├── gen/
│ │ ├── basicInfoForm.vue
│ │ ├── editTable.vue
│ │ ├── genInfoForm.vue
│ │ ├── importTable.vue
│ │ └── index.vue
│ └── swagger/
│ └── index.vue
└── vue.config.js
SYMBOL INDEX (1645 symbols across 271 files)
FILE: campus-admin/src/main/java/com/oddfar/campus/admin/config/CaptchaConfig.java
class CaptchaConfig (line 17) | @Configuration
method getKaptchaBean (line 19) | @Bean(name = "captchaProducer")
method getKaptchaBeanMath (line 46) | @Bean(name = "captchaProducerMath")
FILE: campus-admin/src/main/java/com/oddfar/campus/admin/config/SwaggerConfig.java
class SwaggerConfig (line 25) | @Configuration
method createRestApi (line 43) | @Bean
method securitySchemes (line 67) | private List<SecurityScheme> securitySchemes() {
method securityContexts (line 76) | private List<SecurityContext> securityContexts() {
method defaultAuth (line 89) | private List<SecurityReference> defaultAuth() {
method apiInfo (line 101) | private ApiInfo apiInfo() {
FILE: campus-admin/src/main/java/com/oddfar/campus/admin/controller/monitor/SysLogininforController.java
class SysLogininforController (line 21) | @RestController
method list (line 32) | @PreAuthorize("@ss.hasPermi('monitor:logininfor:list')")
method remove (line 39) | @PreAuthorize("@ss.hasPermi('monitor:logininfor:remove')")
method clean (line 45) | @PreAuthorize("@ss.hasPermi('monitor:logininfor:remove')")
method unlock (line 52) | @PreAuthorize("@ss.hasPermi('monitor:logininfor:unlock')")
FILE: campus-admin/src/main/java/com/oddfar/campus/admin/controller/monitor/SysOperlogController.java
class SysOperlogController (line 17) | @RestController
method list (line 26) | @PreAuthorize("@ss.hasPermi('monitor:operlog:list')")
method remove (line 34) | @PreAuthorize("@ss.hasPermi('monitor:operlog:remove')")
method clean (line 40) | @PreAuthorize("@ss.hasPermi('monitor:operlog:remove')")
FILE: campus-admin/src/main/java/com/oddfar/campus/admin/controller/system/CaptchaController.java
class CaptchaController (line 30) | @RestController
method getCode (line 47) | @GetMapping(value = "/captchaImage", name = "生产验证码")
FILE: campus-admin/src/main/java/com/oddfar/campus/admin/controller/system/SysApiResourceController.java
class SysApiResourceController (line 16) | @RestController
method roleMenuTreeSelect (line 28) | @GetMapping(value = "/roleApiTreeselect/{roleId}", name = "资源管理-加载对应角色...
method editRoleResource (line 40) | @PutMapping(value = "/roleApi", name = "修改对应角色api资源")
FILE: campus-admin/src/main/java/com/oddfar/campus/admin/controller/system/SysConfigController.java
class SysConfigController (line 17) | @RestController
method page (line 24) | @GetMapping(value = "page", name = "参数配置管理-分页")
method getInfo (line 32) | @GetMapping(value = "{id}", name = "参数配置管理-查询id信息")
method getConfigKey (line 43) | @GetMapping(value = "/configKey/{configKey:.+}")
method add (line 48) | @PostMapping(name = "参数配置管理-新增")
method edit (line 58) | @PutMapping(name = "参数配置管理-修改")
method remove (line 68) | @DeleteMapping(value = "/{configIds}", name = "参数配置管理-删除")
method refreshCache (line 79) | @PreAuthorize("@ss.hasPermi('system:config:remove')")
FILE: campus-admin/src/main/java/com/oddfar/campus/admin/controller/system/SysDictDataController.java
class SysDictDataController (line 20) | @RestController
method page (line 30) | @PreAuthorize("@ss.hasPermi('system:dict:list')")
method dictType (line 40) | @GetMapping(value = "/type/{dictType}", name = "字典数据管理-根据字典类型查询字典数据信息")
method getInfo (line 55) | @PreAuthorize("@ss.hasPermi('system:dict:query')")
method add (line 65) | @PreAuthorize("@ss.hasPermi('system:dict:add')")
method edit (line 74) | @PreAuthorize("@ss.hasPermi('system:dict:edit')")
method remove (line 83) | @PreAuthorize("@ss.hasPermi('system:dict:remove')")
FILE: campus-admin/src/main/java/com/oddfar/campus/admin/controller/system/SysDictTypeController.java
class SysDictTypeController (line 17) | @RestController
method list (line 25) | @PreAuthorize("@ss.hasPermi('system:dict:list')")
method getInfo (line 35) | @PreAuthorize("@ss.hasPermi('system:dict:query')")
method add (line 44) | @PreAuthorize("@ss.hasPermi('system:dict:add')")
method edit (line 57) | @PreAuthorize("@ss.hasPermi('system:dict:edit')")
method remove (line 69) | @PreAuthorize("@ss.hasPermi('system:dict:remove')")
method refreshCache (line 79) | @PreAuthorize("@ss.hasPermi('system:dict:remove')")
method optionselect (line 89) | @GetMapping(value = "/optionselect", name = "字典类型管理-获取字典选择框列表")
FILE: campus-admin/src/main/java/com/oddfar/campus/admin/controller/system/SysIndexController.java
class SysIndexController (line 18) | @RestController
method index (line 29) | @RequestMapping("/")
method version (line 43) | @RequestMapping("/version")
FILE: campus-admin/src/main/java/com/oddfar/campus/admin/controller/system/SysLoginController.java
class SysLoginController (line 20) | @RestController
method login (line 39) | @PostMapping(value = "/login", name = "登录方法")
method getInfo (line 54) | @GetMapping(value = "getInfo", name = "获取用户信息")
method getRouters (line 73) | @GetMapping(value = "getRouters", name = "获取路由信息")
FILE: campus-admin/src/main/java/com/oddfar/campus/admin/controller/system/SysMenuController.java
class SysMenuController (line 19) | @RestController
method list (line 30) | @PreAuthorize("@ss.hasPermi('system:menu:list')")
method getInfo (line 40) | @PreAuthorize("@ss.hasPermi('system:menu:query')")
method treeSelect (line 49) | @GetMapping(value = "/treeselect", name = "菜单管理-获取菜单下拉树列表")
method roleMenuTreeselect (line 58) | @GetMapping(value = "/roleMenuTreeselect/{roleId}", name = "菜单管理-加载对应角...
method add (line 70) | @PreAuthorize("@ss.hasPermi('system:menu:add')")
method edit (line 84) | @PreAuthorize("@ss.hasPermi('system:menu:edit')")
method remove (line 100) | @PreAuthorize("@ss.hasPermi('system:menu:remove')")
FILE: campus-admin/src/main/java/com/oddfar/campus/admin/controller/system/SysProfileController.java
class SysProfileController (line 24) | @RestController
method profile (line 37) | @GetMapping(name = "个人信息管理-查询")
method updateProfile (line 49) | @PutMapping(name = "个人信息管理-修改")
method updatePwd (line 80) | @PutMapping(value = "/updatePwd", name = "个人信息管理-重置密码")
method avatar (line 104) | @PostMapping(value = "/avatar", name = "个人信息管理-头像上次")
FILE: campus-admin/src/main/java/com/oddfar/campus/admin/controller/system/SysRegisterController.java
class SysRegisterController (line 20) | @RestController
method register (line 31) | @PostMapping("/register")
method userNameUnique (line 40) | @Anonymous
method emailUnique (line 48) | @Anonymous
FILE: campus-admin/src/main/java/com/oddfar/campus/admin/controller/system/SysRoleController.java
class SysRoleController (line 25) | @RestController
method list (line 39) | @PreAuthorize("@ss.hasPermi('system:role:list')")
method getInfo (line 49) | @PreAuthorize("@ss.hasPermi('system:role:query')")
method add (line 58) | @PreAuthorize("@ss.hasPermi('system:role:add')")
method edit (line 73) | @PreAuthorize("@ss.hasPermi('system:role:edit')")
method changeStatus (line 100) | @PreAuthorize("@ss.hasPermi('system:role:edit')")
method remove (line 113) | @PreAuthorize("@ss.hasPermi('system:role:remove')")
method allocatedList (line 127) | @PreAuthorize("@ss.hasPermi('system:role:list')")
method unallocatedList (line 137) | @PreAuthorize("@ss.hasPermi('system:role:list')")
method cancelAuthUser (line 147) | @PreAuthorize("@ss.hasPermi('system:role:edit')")
method cancelAuthUserAll (line 159) | @PreAuthorize("@ss.hasPermi('system:role:edit')")
method selectAuthUserAll (line 172) | @PreAuthorize("@ss.hasPermi('system:role:edit')")
FILE: campus-admin/src/main/java/com/oddfar/campus/admin/controller/system/SysUserController.java
class SysUserController (line 29) | @RestController
method page (line 43) | @GetMapping("list")
method getInfo (line 54) | @GetMapping({"{userId}", "/"})
method add (line 72) | @PostMapping
method update (line 83) | @PutMapping
method remove (line 104) | @DeleteMapping("/{userIds}")
method authRole (line 116) | @PreAuthorize("@ss.hasPermi('system:user:query')")
method insertAuthRole (line 130) | @PreAuthorize("@ss.hasPermi('system:user:edit')")
method resetPwd (line 146) | @PreAuthorize("@ss.hasPermi('system:user:resetPwd')")
method changeStatus (line 158) | @PreAuthorize("@ss.hasPermi('system:user:edit')")
FILE: campus-common/src/main/java/com/oddfar/campus/common/config/CampusConfig.java
class CampusConfig (line 13) | @Data
FILE: campus-common/src/main/java/com/oddfar/campus/common/config/FastJson2JsonRedisSerializer.java
class FastJson2JsonRedisSerializer (line 16) | public class FastJson2JsonRedisSerializer<T> implements RedisSerializer<T>
method FastJson2JsonRedisSerializer (line 22) | public FastJson2JsonRedisSerializer(Class<T> clazz)
method serialize (line 28) | @Override
method deserialize (line 38) | @Override
FILE: campus-common/src/main/java/com/oddfar/campus/common/config/RedisConfig.java
class RedisConfig (line 17) | @Configuration
method redisTemplate (line 20) | @Bean
method limitScript (line 40) | @Bean
method limitScriptText (line 51) | private String limitScriptText() {
FILE: campus-common/src/main/java/com/oddfar/campus/common/config/SensitiveSerializer.java
class SensitiveSerializer (line 22) | @Slf4j
method serialize (line 27) | @Override
method createContextual (line 37) | @Override
FILE: campus-common/src/main/java/com/oddfar/campus/common/constant/CacheConstants.java
class CacheConstants (line 6) | public class CacheConstants {
FILE: campus-common/src/main/java/com/oddfar/campus/common/constant/Constants.java
class Constants (line 8) | public class Constants {
FILE: campus-common/src/main/java/com/oddfar/campus/common/constant/HttpStatus.java
class HttpStatus (line 8) | public class HttpStatus {
FILE: campus-common/src/main/java/com/oddfar/campus/common/constant/UserConstants.java
class UserConstants (line 8) | public class UserConstants {
FILE: campus-common/src/main/java/com/oddfar/campus/common/core/BaseMapperX.java
type BaseMapperX (line 20) | public interface BaseMapperX<T> extends BaseMapper<T> {
method selectPage (line 22) | default PageResult<T> selectPage(@Param("ew") Wrapper<T> queryWrapper) {
method selectOne (line 30) | default T selectOne(String field, Object value) {
method selectOne (line 34) | default T selectOne(SFunction<T, ?> field, Object value) {
method selectOne (line 38) | default T selectOne(String field1, Object value1, String field2, Objec...
method selectOne (line 42) | default T selectOne(SFunction<T, ?> field1, Object value1, SFunction<T...
method selectCount (line 46) | default Long selectCount() {
method selectCount (line 50) | default Long selectCount(String field, Object value) {
method selectCount (line 54) | default Long selectCount(SFunction<T, ?> field, Object value) {
method selectList (line 58) | default List<T> selectList() {
method selectList (line 62) | default List<T> selectList(String field, Object value) {
method selectList (line 66) | default List<T> selectList(SFunction<T, ?> field, Object value) {
method selectList (line 70) | default List<T> selectList(String field, Collection<?> values) {
method selectList (line 74) | default List<T> selectList(SFunction<T, ?> field, Collection<?> values) {
method insertBatch (line 85) | default void insertBatch(Collection<T> entities) {
method updateBatch (line 89) | default void updateBatch(T update) {
FILE: campus-common/src/main/java/com/oddfar/campus/common/core/LambdaQueryWrapperX.java
class LambdaQueryWrapperX (line 19) | public class LambdaQueryWrapperX<T> extends LambdaQueryWrapper<T> {
method likeIfPresent (line 21) | public LambdaQueryWrapperX<T> likeIfPresent(SFunction<T, ?> column, St...
method inIfPresent (line 28) | public LambdaQueryWrapperX<T> inIfPresent(SFunction<T, ?> column, Coll...
method inIfPresent (line 35) | public LambdaQueryWrapperX<T> inIfPresent(SFunction<T, ?> column, Obje...
method eqIfPresent (line 42) | public LambdaQueryWrapperX<T> eqIfPresent(SFunction<T, ?> column, Obje...
method neIfPresent (line 49) | public LambdaQueryWrapperX<T> neIfPresent(SFunction<T, ?> column, Obje...
method gtIfPresent (line 56) | public LambdaQueryWrapperX<T> gtIfPresent(SFunction<T, ?> column, Obje...
method geIfPresent (line 63) | public LambdaQueryWrapperX<T> geIfPresent(SFunction<T, ?> column, Obje...
method ltIfPresent (line 70) | public LambdaQueryWrapperX<T> ltIfPresent(SFunction<T, ?> column, Obje...
method leIfPresent (line 77) | public LambdaQueryWrapperX<T> leIfPresent(SFunction<T, ?> column, Obje...
method betweenIfPresent (line 84) | public LambdaQueryWrapperX<T> betweenIfPresent(SFunction<T, ?> column,...
method betweenIfPresent (line 97) | public LambdaQueryWrapperX<T> betweenIfPresent(SFunction<T, ?> column,...
method betweenIfPresent (line 104) | public LambdaQueryWrapperX<T> betweenIfPresent(SFunction<T, ?> column,...
method eq (line 113) | @Override
method eq (line 119) | @Override
method orderByDesc (line 125) | @Override
method last (line 131) | @Override
method in (line 137) | @Override
FILE: campus-common/src/main/java/com/oddfar/campus/common/core/RedisCache.java
class RedisCache (line 18) | @SuppressWarnings(value = {"unchecked", "rawtypes"})
method setCacheObject (line 30) | public <T> void setCacheObject(final String key, final T value) {
method setCacheObject (line 42) | public <T> void setCacheObject(final String key, final T value, final ...
method expire (line 53) | public boolean expire(final String key, final long timeout) {
method expire (line 65) | public boolean expire(final String key, final long timeout, final Time...
method getExpire (line 75) | public long getExpire(final String key) {
method hasKey (line 85) | public Boolean hasKey(String key) {
method getCacheObject (line 95) | public <T> T getCacheObject(final String key) {
method deleteObject (line 105) | public boolean deleteObject(final String key) {
method deleteObject (line 115) | public boolean deleteObject(final Collection collection) {
method setCacheList (line 126) | public <T> long setCacheList(final String key, final List<T> dataList) {
method reSetCacheList (line 138) | public <T> long reSetCacheList(final String key, final List<T> dataLis...
method getCacheList (line 150) | public <T> List<T> getCacheList(final String key) {
method setCacheSet (line 161) | public <T> BoundSetOperations<String, T> setCacheSet(final String key,...
method getCacheSet (line 176) | public <T> Set<T> getCacheSet(final String key) {
method setCacheMap (line 186) | public <T> void setCacheMap(final String key, final Map<String, T> dat...
method getCacheMap (line 198) | public <T> Map<String, T> getCacheMap(final String key) {
method setCacheMapValue (line 209) | public <T> void setCacheMapValue(final String key, final String hKey, ...
method getCacheMapValue (line 220) | public <T> T getCacheMapValue(final String key, final String hKey) {
method getMultiCacheMapValue (line 232) | public <T> List<T> getMultiCacheMapValue(final String key, final Colle...
method deleteCacheMapValue (line 243) | public boolean deleteCacheMapValue(final String key, final String hKey) {
method keys (line 253) | public Collection<String> keys(final String pattern) {
FILE: campus-common/src/main/java/com/oddfar/campus/common/core/page/PageQuery.java
class PageQuery (line 24) | @Data
method build (line 71) | public <T> Page<T> build() {
method buildPage (line 85) | public <T> Page<T> buildPage() {
method buildOrderItem (line 108) | private List<OrderItem> buildOrderItem() {
FILE: campus-common/src/main/java/com/oddfar/campus/common/core/page/TableDataInfo.java
class TableDataInfo (line 11) | public class TableDataInfo implements Serializable {
method TableDataInfo (line 37) | public TableDataInfo() {
method TableDataInfo (line 46) | public TableDataInfo(List<?> list, int total) {
method getTotal (line 51) | public long getTotal() {
method setTotal (line 55) | public void setTotal(long total) {
method getRows (line 59) | public List<?> getRows() {
method setRows (line 63) | public void setRows(List<?> rows) {
method getCode (line 67) | public int getCode() {
method setCode (line 71) | public void setCode(int code) {
method getMsg (line 75) | public String getMsg() {
method setMsg (line 79) | public void setMsg(String msg) {
FILE: campus-common/src/main/java/com/oddfar/campus/common/core/text/CharsetKit.java
class CharsetKit (line 13) | public class CharsetKit
method charset (line 35) | public static Charset charset(String charset)
method convert (line 48) | public static String convert(String source, String srcCharset, String ...
method convert (line 61) | public static String convert(String source, Charset srcCharset, Charse...
method systemCharset (line 83) | public static String systemCharset()
FILE: campus-common/src/main/java/com/oddfar/campus/common/core/text/Convert.java
class Convert (line 18) | public class Convert {
method toStr (line 28) | public static String toStr(Object value, String defaultValue) {
method toStr (line 46) | public static String toStr(Object value) {
method toChar (line 59) | public static Character toChar(Object value, Character defaultValue) {
method toChar (line 79) | public static Character toChar(Object value) {
method toByte (line 92) | public static Byte toByte(Object value, Byte defaultValue) {
method toByte (line 121) | public static Byte toByte(Object value) {
method toShort (line 134) | public static Short toShort(Object value, Short defaultValue) {
method toShort (line 163) | public static Short toShort(Object value) {
method toNumber (line 176) | public static Number toNumber(Object value, Number defaultValue) {
method toNumber (line 202) | public static Number toNumber(Object value) {
method toInt (line 215) | public static Integer toInt(Object value, Integer defaultValue) {
method toInt (line 244) | public static Integer toInt(Object value) {
method toIntArray (line 254) | public static Integer[] toIntArray(String str) {
method toLongArray (line 264) | public static Long[] toLongArray(String str) {
method toIntArray (line 275) | public static Integer[] toIntArray(String split, String str) {
method toLongArray (line 295) | public static Long[] toLongArray(String split, String str) {
method toStrArray (line 314) | public static String[] toStrArray(String str) {
method toStrArray (line 325) | public static String[] toStrArray(String split, String str) {
method toLong (line 338) | public static Long toLong(Object value, Long defaultValue) {
method toLong (line 368) | public static Long toLong(Object value) {
method toDouble (line 381) | public static Double toDouble(Object value, Double defaultValue) {
method toDouble (line 411) | public static Double toDouble(Object value) {
method toFloat (line 424) | public static Float toFloat(Object value, Float defaultValue) {
method toFloat (line 453) | public static Float toFloat(Object value) {
method toBool (line 466) | public static Boolean toBool(Object value, Boolean defaultValue) {
method toBool (line 501) | public static Boolean toBool(Object value) {
method toEnum (line 514) | public static <E extends Enum<E>> E toEnum(Class<E> clazz, Object valu...
method toEnum (line 542) | public static <E extends Enum<E>> E toEnum(Class<E> clazz, Object valu...
method toBigInteger (line 555) | public static BigInteger toBigInteger(Object value, BigInteger default...
method toBigInteger (line 584) | public static BigInteger toBigInteger(Object value) {
method toBigDecimal (line 597) | public static BigDecimal toBigDecimal(Object value, BigDecimal default...
method toBigDecimal (line 632) | public static BigDecimal toBigDecimal(Object value) {
method utf8Str (line 643) | public static String utf8Str(Object obj) {
method str (line 655) | public static String str(Object obj, String charsetName) {
method str (line 667) | public static String str(Object obj, Charset charset) {
method str (line 692) | public static String str(byte[] bytes, String charset) {
method str (line 703) | public static String str(byte[] data, Charset charset) {
method str (line 721) | public static String str(ByteBuffer data, String charset) {
method str (line 736) | public static String str(ByteBuffer data, Charset charset) {
method toSBC (line 751) | public static String toSBC(String input) {
method toSBC (line 762) | public static String toSBC(String input, Set<Character> notConvertSet) {
method toDBC (line 786) | public static String toDBC(String input) {
method toDBC (line 797) | public static String toDBC(String text, Set<Character> notConvertSet) {
method digitUppercase (line 822) | public static String digitUppercase(double n) {
FILE: campus-common/src/main/java/com/oddfar/campus/common/domain/BaseEntity.java
class BaseEntity (line 22) | @Data
FILE: campus-common/src/main/java/com/oddfar/campus/common/domain/PageResult.java
class PageResult (line 9) | @Data
method PageResult (line 16) | public PageResult() {
method PageResult (line 19) | public PageResult(List<T> rows, long total) {
method PageResult (line 24) | public PageResult(int total) {
method empty (line 29) | public static <T> PageResult<T> empty() {
method empty (line 33) | public static <T> PageResult<T> empty(int total) {
FILE: campus-common/src/main/java/com/oddfar/campus/common/domain/R.java
class R (line 15) | public class R extends HashMap<String, Object> {
method setData (line 18) | public R setData(Object data) {
method getData (line 24) | public <T> T getData(String key, TypeReference<T> typeReference) {
method getData (line 32) | public <T> T getData(TypeReference<T> typeReference) {
method R (line 40) | public R() {
method error (line 45) | public static R error() {
method error (line 49) | public static R error(String msg) {
method error (line 53) | public static R error(int code, String msg) {
method error (line 60) | public static R error(BizCodeEnum bizCodeEnum) {
method ok (line 67) | public static R ok(String msg) {
method ok (line 73) | public static R ok(Object data) {
method ok (line 79) | public static R ok(Map<String, Object> map) {
method ok (line 85) | public static R ok() {
method put (line 89) | public R put(String key, Object value) {
method put (line 94) | public R put(Object value) {
method put (line 99) | public R put(PageResult pageResult) {
method put (line 105) | public R put(IPage page) {
method getCode (line 112) | public Integer getCode() {
FILE: campus-common/src/main/java/com/oddfar/campus/common/domain/TreeSelect.java
class TreeSelect (line 16) | public class TreeSelect implements Serializable {
method TreeSelect (line 35) | public TreeSelect() {
method TreeSelect (line 38) | public TreeSelect(Long id, String label) {
method TreeSelect (line 44) | public TreeSelect(Long id, String label, List<SysResourceEntity> resou...
method TreeSelect (line 50) | public TreeSelect(SysMenuEntity menu) {
method TreeSelect (line 56) | public TreeSelect(SysResourceEntity resource) {
method getId (line 61) | public Long getId() {
method setId (line 65) | public void setId(Long id) {
method getLabel (line 69) | public String getLabel() {
method setLabel (line 73) | public void setLabel(String label) {
method getChildren (line 77) | public List<TreeSelect> getChildren() {
method setChildren (line 81) | public void setChildren(List<TreeSelect> children) {
FILE: campus-common/src/main/java/com/oddfar/campus/common/domain/entity/SysConfigEntity.java
class SysConfigEntity (line 17) | @Data
FILE: campus-common/src/main/java/com/oddfar/campus/common/domain/entity/SysDictDataEntity.java
class SysDictDataEntity (line 18) | @Data
method getDefault (line 83) | public boolean getDefault() {
FILE: campus-common/src/main/java/com/oddfar/campus/common/domain/entity/SysDictTypeEntity.java
class SysDictTypeEntity (line 16) | @Data
FILE: campus-common/src/main/java/com/oddfar/campus/common/domain/entity/SysLoginLogEntity.java
class SysLoginLogEntity (line 22) | @Data
method getParams (line 99) | public Map<String, Object> getParams() {
FILE: campus-common/src/main/java/com/oddfar/campus/common/domain/entity/SysMenuEntity.java
class SysMenuEntity (line 23) | @Data
FILE: campus-common/src/main/java/com/oddfar/campus/common/domain/entity/SysOperLogEntity.java
class SysOperLogEntity (line 18) | @Data
method getParams (line 118) | public Map<String, Object> getParams() {
FILE: campus-common/src/main/java/com/oddfar/campus/common/domain/entity/SysResourceEntity.java
class SysResourceEntity (line 14) | @Data
FILE: campus-common/src/main/java/com/oddfar/campus/common/domain/entity/SysRoleEntity.java
class SysRoleEntity (line 22) | @TableName("sys_role")
method SysRoleEntity (line 91) | public SysRoleEntity(Long roleId) {
method isAdmin (line 95) | public boolean isAdmin() {
method isAdmin (line 99) | public static boolean isAdmin(Long roleId) {
FILE: campus-common/src/main/java/com/oddfar/campus/common/domain/entity/SysRoleMenuEntity.java
class SysRoleMenuEntity (line 14) | @Data
FILE: campus-common/src/main/java/com/oddfar/campus/common/domain/entity/SysRoleResourceEntity.java
class SysRoleResourceEntity (line 13) | @Data
FILE: campus-common/src/main/java/com/oddfar/campus/common/domain/entity/SysUserEntity.java
class SysUserEntity (line 26) | @TableName("sys_user")
method SysUserEntity (line 98) | public SysUserEntity(Long userId){
method isAdmin (line 102) | public boolean isAdmin()
method isAdmin (line 107) | public static boolean isAdmin(Long userId)
FILE: campus-common/src/main/java/com/oddfar/campus/common/domain/entity/SysUserRoleEntity.java
class SysUserRoleEntity (line 13) | @Data
FILE: campus-common/src/main/java/com/oddfar/campus/common/domain/model/LoginBody.java
class LoginBody (line 8) | public class LoginBody {
method getUsername (line 29) | public String getUsername() {
method setUsername (line 33) | public void setUsername(String username) {
method getPassword (line 37) | public String getPassword() {
method setPassword (line 41) | public void setPassword(String password) {
method getCode (line 45) | public String getCode() {
method setCode (line 49) | public void setCode(String code) {
method getUuid (line 53) | public String getUuid() {
method setUuid (line 57) | public void setUuid(String uuid) {
FILE: campus-common/src/main/java/com/oddfar/campus/common/domain/model/LoginUser.java
class LoginUser (line 19) | @Data
method LoginUser (line 61) | public LoginUser(Long userId, SysUserEntity user, Set<String> permissi...
method getPassword (line 69) | @JSONField(serialize = false)
method getUsername (line 75) | @Override
method isAccountNonExpired (line 83) | @JSONField(serialize = false)
method isAccountNonLocked (line 94) | @JSONField(serialize = false)
method isCredentialsNonExpired (line 105) | @JSONField(serialize = false)
method isEnabled (line 116) | @JSONField(serialize = false)
method getAuthorities (line 123) | @Override
FILE: campus-common/src/main/java/com/oddfar/campus/common/domain/model/LoginUserToken.java
class LoginUserToken (line 9) | @Data
method LoginUserToken (line 51) | public LoginUserToken() {
method LoginUserToken (line 54) | public LoginUserToken(LoginUser loginUser) {
FILE: campus-common/src/main/java/com/oddfar/campus/common/domain/model/RegisterBody.java
class RegisterBody (line 8) | @Data
FILE: campus-common/src/main/java/com/oddfar/campus/common/domain/model/SysRoleAuth.java
class SysRoleAuth (line 8) | @Data
method SysRoleAuth (line 28) | public SysRoleAuth(SysRoleResourceEntity roleResourceEntity) {
FILE: campus-common/src/main/java/com/oddfar/campus/common/domain/model/SysRoleAuthList.java
class SysRoleAuthList (line 9) | @Data
FILE: campus-common/src/main/java/com/oddfar/campus/common/domain/vo/RouterVo.java
class RouterVo (line 13) | @JsonInclude(JsonInclude.Include.NON_EMPTY)
method getName (line 60) | public String getName() {
method setName (line 64) | public void setName(String name) {
method getPath (line 68) | public String getPath() {
method setPath (line 72) | public void setPath(String path) {
method getHidden (line 76) | public boolean getHidden() {
method setHidden (line 80) | public void setHidden(boolean hidden) {
method getRedirect (line 84) | public String getRedirect() {
method setRedirect (line 88) | public void setRedirect(String redirect) {
method getComponent (line 92) | public String getComponent() {
method setComponent (line 96) | public void setComponent(String component) {
method getQuery (line 100) | public String getQuery() {
method setQuery (line 104) | public void setQuery(String query) {
method getAlwaysShow (line 108) | public Boolean getAlwaysShow() {
method setAlwaysShow (line 112) | public void setAlwaysShow(Boolean alwaysShow) {
method getMeta (line 116) | public MetaVo getMeta() {
method setMeta (line 120) | public void setMeta(MetaVo meta) {
method getChildren (line 124) | public List<RouterVo> getChildren() {
method setChildren (line 128) | public void setChildren(List<RouterVo> children) {
FILE: campus-common/src/main/java/com/oddfar/campus/common/enums/BizCodeEnum.java
type BizCodeEnum (line 14) | public enum BizCodeEnum {
method BizCodeEnum (line 21) | private BizCodeEnum(Integer code, String msg) {
method getCode (line 26) | public Integer getCode() {
method getMsg (line 30) | public String getMsg() {
FILE: campus-common/src/main/java/com/oddfar/campus/common/enums/BusinessStatus.java
type BusinessStatus (line 8) | public enum BusinessStatus {
FILE: campus-common/src/main/java/com/oddfar/campus/common/enums/ResBizTypeEnum.java
type ResBizTypeEnum (line 8) | @Getter
method ResBizTypeEnum (line 25) | ResBizTypeEnum(Integer code, String message) {
FILE: campus-common/src/main/java/com/oddfar/campus/common/enums/SensitiveStrategy.java
type SensitiveStrategy (line 14) | @AllArgsConstructor
method desensitizer (line 45) | public Function<String, String> desensitizer() {
FILE: campus-common/src/main/java/com/oddfar/campus/common/enums/UserStatusEnum.java
type UserStatusEnum (line 8) | public enum UserStatusEnum {
method UserStatusEnum (line 14) | UserStatusEnum(String code, String info) {
method getCode (line 19) | public String getCode() {
method getInfo (line 23) | public String getInfo() {
FILE: campus-common/src/main/java/com/oddfar/campus/common/exception/ServiceException.java
class ServiceException (line 8) | public final class ServiceException extends RuntimeException {
method ServiceException (line 29) | public ServiceException() {
method ServiceException (line 32) | public ServiceException(String message) {
method ServiceException (line 37) | public ServiceException(String message, Integer code) {
method getDetailMessage (line 42) | public String getDetailMessage() {
method getMessage (line 46) | @Override
method getCode (line 51) | public Integer getCode() {
method setMessage (line 55) | public ServiceException setMessage(String message) {
method setDetailMessage (line 60) | public ServiceException setDetailMessage(String detailMessage) {
FILE: campus-common/src/main/java/com/oddfar/campus/common/exception/UtilException.java
class UtilException (line 8) | public class UtilException extends RuntimeException {
method UtilException (line 11) | public UtilException(Throwable e) {
method UtilException (line 15) | public UtilException(String message) {
method UtilException (line 19) | public UtilException(String message, Throwable throwable) {
FILE: campus-common/src/main/java/com/oddfar/campus/common/exception/base/BaseException.java
class BaseException (line 15) | @Data
method getMessage (line 42) | @Override
FILE: campus-common/src/main/java/com/oddfar/campus/common/exception/file/FileException.java
class FileException (line 10) | public class FileException extends BaseException {
method FileException (line 13) | public FileException(String code, Object[] args) {
FILE: campus-common/src/main/java/com/oddfar/campus/common/exception/file/FileNameLengthLimitExceededException.java
class FileNameLengthLimitExceededException (line 8) | public class FileNameLengthLimitExceededException extends FileException
method FileNameLengthLimitExceededException (line 12) | public FileNameLengthLimitExceededException(int defaultFileNameLength)
FILE: campus-common/src/main/java/com/oddfar/campus/common/exception/file/FileSizeLimitExceededException.java
class FileSizeLimitExceededException (line 8) | public class FileSizeLimitExceededException extends FileException
method FileSizeLimitExceededException (line 12) | public FileSizeLimitExceededException(long defaultMaxSize)
FILE: campus-common/src/main/java/com/oddfar/campus/common/exception/file/InvalidExtensionException.java
class InvalidExtensionException (line 12) | public class InvalidExtensionException extends FileUploadException {
method InvalidExtensionException (line 19) | public InvalidExtensionException(String[] allowedExtension, String ext...
method getAllowedExtension (line 26) | public String[] getAllowedExtension() {
method getExtension (line 30) | public String getExtension() {
method getFilename (line 34) | public String getFilename() {
class InvalidImageExtensionException (line 38) | public static class InvalidImageExtensionException extends InvalidExte...
method InvalidImageExtensionException (line 41) | public InvalidImageExtensionException(String[] allowedExtension, Str...
class InvalidFlashExtensionException (line 46) | public static class InvalidFlashExtensionException extends InvalidExte...
method InvalidFlashExtensionException (line 49) | public InvalidFlashExtensionException(String[] allowedExtension, Str...
class InvalidMediaExtensionException (line 54) | public static class InvalidMediaExtensionException extends InvalidExte...
method InvalidMediaExtensionException (line 57) | public InvalidMediaExtensionException(String[] allowedExtension, Str...
class InvalidVideoExtensionException (line 62) | public static class InvalidVideoExtensionException extends InvalidExte...
method InvalidVideoExtensionException (line 65) | public InvalidVideoExtensionException(String[] allowedExtension, Str...
FILE: campus-common/src/main/java/com/oddfar/campus/common/exception/user/CaptchaException.java
class CaptchaException (line 8) | public class CaptchaException extends UserException {
method CaptchaException (line 11) | public CaptchaException() {
FILE: campus-common/src/main/java/com/oddfar/campus/common/exception/user/CaptchaExpireException.java
class CaptchaExpireException (line 8) | public class CaptchaExpireException extends UserException {
method CaptchaExpireException (line 11) | public CaptchaExpireException() {
FILE: campus-common/src/main/java/com/oddfar/campus/common/exception/user/UserException.java
class UserException (line 10) | public class UserException extends BaseException {
method UserException (line 13) | public UserException(String code, Object[] args) {
FILE: campus-common/src/main/java/com/oddfar/campus/common/exception/user/UserPasswordNotMatchException.java
class UserPasswordNotMatchException (line 8) | public class UserPasswordNotMatchException extends UserException {
method UserPasswordNotMatchException (line 11) | public UserPasswordNotMatchException() {
FILE: campus-common/src/main/java/com/oddfar/campus/common/exception/user/UserPasswordRetryLimitExceedException.java
class UserPasswordRetryLimitExceedException (line 8) | public class UserPasswordRetryLimitExceedException extends UserException
method UserPasswordRetryLimitExceedException (line 12) | public UserPasswordRetryLimitExceedException(int retryLimitCount, int ...
FILE: campus-common/src/main/java/com/oddfar/campus/common/filter/PropertyPreExcludeFilter.java
class PropertyPreExcludeFilter (line 10) | public class PropertyPreExcludeFilter extends SimplePropertyPreFilter {
method PropertyPreExcludeFilter (line 11) | public PropertyPreExcludeFilter() {
method addExcludes (line 14) | public PropertyPreExcludeFilter addExcludes(String... filters) {
FILE: campus-common/src/main/java/com/oddfar/campus/common/filter/RepeatedlyRequestWrapper.java
class RepeatedlyRequestWrapper (line 21) | public class RepeatedlyRequestWrapper extends HttpServletRequestWrapper
method RepeatedlyRequestWrapper (line 25) | public RepeatedlyRequestWrapper(HttpServletRequest request, ServletRes...
method getReader (line 34) | @Override
method getInputStream (line 40) | @Override
FILE: campus-common/src/main/java/com/oddfar/campus/common/utils/DateUtils.java
class DateUtils (line 16) | public class DateUtils extends org.apache.commons.lang3.time.DateUtils {
method getNowDate (line 37) | public static Date getNowDate() {
method getDate (line 46) | public static String getDate() {
method getTime (line 50) | public static final String getTime() {
method dateTimeNow (line 54) | public static final String dateTimeNow() {
method dateTimeNow (line 58) | public static final String dateTimeNow(final String format) {
method dateTime (line 62) | public static final String dateTime(final Date date) {
method parseDateToStr (line 66) | public static final String parseDateToStr(final String format, final D...
method dateTime (line 70) | public static final Date dateTime(final String format, final String ts) {
method datePath (line 81) | public static final String datePath() {
method dateTime (line 89) | public static final String dateTime() {
method parseDate (line 97) | public static Date parseDate(Object str) {
method getServerStartDate (line 111) | public static Date getServerStartDate() {
method differentDaysByMillisecond (line 119) | public static int differentDaysByMillisecond(Date date1, Date date2) {
method getDatePoor (line 126) | public static String getDatePoor(Date endDate, Date nowDate) {
method toDate (line 147) | public static Date toDate(LocalDateTime temporalAccessor) {
method toDate (line 155) | public static Date toDate(LocalDate temporalAccessor) {
FILE: campus-common/src/main/java/com/oddfar/campus/common/utils/DictUtils.java
class DictUtils (line 15) | public class DictUtils {
method setDictCache (line 27) | public static void setDictCache(String key, List<SysDictDataEntity> di...
method getDictCache (line 37) | public static List<SysDictDataEntity> getDictCache(String key) {
method getDictLabel (line 52) | public static String getDictLabel(String dictType, String dictValue) {
method getDictValue (line 63) | public static String getDictValue(String dictType, String dictLabel) {
method getDictLabel (line 75) | public static String getDictLabel(String dictType, String dictValue, S...
method getDictValue (line 108) | public static String getDictValue(String dictType, String dictLabel, S...
method removeDictCache (line 136) | public static void removeDictCache(String key) {
method clearDictCache (line 143) | public static void clearDictCache() {
method getCacheKey (line 154) | public static String getCacheKey(String configKey) {
FILE: campus-common/src/main/java/com/oddfar/campus/common/utils/LogUtils.java
class LogUtils (line 8) | public class LogUtils
method getBlock (line 10) | public static String getBlock(Object msg)
FILE: campus-common/src/main/java/com/oddfar/campus/common/utils/MessageUtils.java
class MessageUtils (line 11) | public class MessageUtils {
method message (line 19) | public static String message(String code, Object... args) {
FILE: campus-common/src/main/java/com/oddfar/campus/common/utils/MetaVo.java
class MetaVo (line 10) | public class MetaVo
method MetaVo (line 32) | public MetaVo()
method MetaVo (line 36) | public MetaVo(String title, String icon)
method MetaVo (line 42) | public MetaVo(String title, String icon, boolean noCache)
method MetaVo (line 49) | public MetaVo(String title, String icon, String link)
method MetaVo (line 56) | public MetaVo(String title, String icon, boolean noCache, String link)
method isNoCache (line 67) | public boolean isNoCache()
method setNoCache (line 72) | public void setNoCache(boolean noCache)
method getTitle (line 77) | public String getTitle()
method setTitle (line 82) | public void setTitle(String title)
method getIcon (line 87) | public String getIcon()
method setIcon (line 92) | public void setIcon(String icon)
method getLink (line 97) | public String getLink()
method setLink (line 102) | public void setLink(String link)
FILE: campus-common/src/main/java/com/oddfar/campus/common/utils/SecurityUtils.java
class SecurityUtils (line 17) | public class SecurityUtils {
method getUserId (line 21) | public static Long getUserId() {
method getUsername (line 33) | public static String getUsername() {
method getLoginUser (line 44) | public static LoginUser getLoginUser() {
method isLogin (line 62) | public static boolean isLogin() {
method getAuthentication (line 75) | public static Authentication getAuthentication() {
method encryptPassword (line 85) | public static String encryptPassword(String password) {
method matchesPassword (line 97) | public static boolean matchesPassword(String rawPassword, String encod...
method isAdmin (line 108) | public static boolean isAdmin(Long userId) {
FILE: campus-common/src/main/java/com/oddfar/campus/common/utils/ServletUtils.java
class ServletUtils (line 22) | public class ServletUtils {
method getParameter (line 26) | public static String getParameter(String name) {
method getParameter (line 33) | public static String getParameter(String name, String defaultValue) {
method getParameterToInt (line 40) | public static Integer getParameterToInt(String name) {
method getParameterToInt (line 47) | public static Integer getParameterToInt(String name, Integer defaultVa...
method getParameterToBool (line 54) | public static Boolean getParameterToBool(String name) {
method getParameterToBool (line 61) | public static Boolean getParameterToBool(String name, Boolean defaultV...
method getRequest (line 68) | public static HttpServletRequest getRequest() {
method getRequest2 (line 80) | public static HttpServletRequest getRequest2()
method getResponse (line 88) | public static HttpServletResponse getResponse() {
method getSession (line 95) | public static HttpSession getSession() {
method getRequestAttributes (line 99) | public static ServletRequestAttributes getRequestAttributes() {
method renderString (line 110) | public static void renderString(HttpServletResponse response, String s...
method isAjaxRequest (line 126) | public static boolean isAjaxRequest(HttpServletRequest request) {
method urlEncode (line 152) | public static String urlEncode(String str) {
method urlDecode (line 166) | public static String urlDecode(String str) {
FILE: campus-common/src/main/java/com/oddfar/campus/common/utils/SpringUtils.java
class SpringUtils (line 17) | @Component
method postProcessBeanFactory (line 26) | @Override
method setApplicationContext (line 31) | @Override
method getBean (line 43) | @SuppressWarnings("unchecked")
method getBean (line 55) | public static <T> T getBean(Class<T> clz) throws BeansException {
method containsBean (line 66) | public static boolean containsBean(String name) {
method isSingleton (line 77) | public static boolean isSingleton(String name) throws NoSuchBeanDefini...
method getType (line 86) | public static Class<?> getType(String name) throws NoSuchBeanDefinitio...
method getAliases (line 97) | public static String[] getAliases(String name) throws NoSuchBeanDefini...
method getAopProxy (line 107) | @SuppressWarnings("unchecked")
method getActiveProfiles (line 117) | public static String[] getActiveProfiles() {
method getActiveProfile (line 126) | public static String getActiveProfile() {
method getRequiredProperty (line 137) | public static String getRequiredProperty(String key) {
FILE: campus-common/src/main/java/com/oddfar/campus/common/utils/StringUtils.java
class StringUtils (line 14) | public class StringUtils extends org.apache.commons.lang3.StringUtils {
method nvl (line 31) | public static <T> T nvl(T value, T defaultValue) {
method isEmpty (line 41) | public static boolean isEmpty(Collection<?> coll) {
method isNotEmpty (line 51) | public static boolean isNotEmpty(Collection<?> coll) {
method isEmpty (line 61) | public static boolean isEmpty(Object[] objects) {
method isNotEmpty (line 71) | public static boolean isNotEmpty(Object[] objects) {
method isEmpty (line 81) | public static boolean isEmpty(Map<?, ?> map) {
method isNotEmpty (line 91) | public static boolean isNotEmpty(Map<?, ?> map) {
method isEmpty (line 101) | public static boolean isEmpty(String str) {
method isNotEmpty (line 111) | public static boolean isNotEmpty(String str) {
method isNull (line 121) | public static boolean isNull(Object object) {
method isNotNull (line 131) | public static boolean isNotNull(Object object) {
method isArray (line 141) | public static boolean isArray(Object object) {
method trim (line 148) | public static String trim(String str) {
method substring (line 159) | public static String substring(final String str, int start) {
method substring (line 186) | public static String substring(final String str, int start, int end) {
method format (line 229) | public static String format(String template, Object... params) {
method ishttp (line 242) | public static boolean ishttp(String link) {
method str2Set (line 253) | public static final Set<String> str2Set(String str, String sep) {
method str2List (line 266) | public static final List<String> str2List(String str, String sep, bool...
method containsAny (line 297) | public static boolean containsAny(Collection<String> collection, Strin...
method containsAnyIgnoreCase (line 317) | public static boolean containsAnyIgnoreCase(CharSequence cs, CharSeque...
method toUnderScoreCase (line 332) | public static String toUnderScoreCase(String str) {
method inStringIgnoreCase (line 375) | public static boolean inStringIgnoreCase(String str, String... strs) {
method convertToCamelCase (line 392) | public static String convertToCamelCase(String name) {
method toCamelCase (line 419) | public static String toCamelCase(String s) {
method matches (line 448) | public static boolean matches(String str, List<String> strs) {
method isMatch (line 470) | public static boolean isMatch(String pattern, String url) {
method cast (line 475) | @SuppressWarnings("unchecked")
method padl (line 487) | public static final String padl(final Number num, final int size) {
method padl (line 499) | public static final String padl(final String s, final int size, final ...
FILE: campus-common/src/main/java/com/oddfar/campus/common/utils/Threads.java
class Threads (line 13) | public class Threads {
method sleep (line 19) | public static void sleep(long milliseconds) {
method shutdownAndAwaitTermination (line 34) | public static void shutdownAndAwaitTermination(ExecutorService pool) {
method printException (line 54) | public static void printException(Runnable r, Throwable t) {
FILE: campus-common/src/main/java/com/oddfar/campus/common/utils/http/HttpHelper.java
class HttpHelper (line 19) | public class HttpHelper
method getBodyString (line 23) | public static String getBodyString(ServletRequest request)
FILE: campus-common/src/main/java/com/oddfar/campus/common/utils/http/HttpUtils.java
class HttpUtils (line 22) | public class HttpUtils
method sendGet (line 32) | public static String sendGet(String url)
method sendGet (line 44) | public static String sendGet(String url, String param)
method sendGet (line 57) | public static String sendGet(String url, String param, String contentT...
method sendPost (line 119) | public static String sendPost(String url, String param)
method sendSSLPost (line 184) | public static String sendSSLPost(String url, String param)
class TrustAnyTrustManager (line 239) | private static class TrustAnyTrustManager implements X509TrustManager
method checkClientTrusted (line 241) | @Override
method checkServerTrusted (line 246) | @Override
method getAcceptedIssuers (line 251) | @Override
class TrustAnyHostnameVerifier (line 258) | private static class TrustAnyHostnameVerifier implements HostnameVerifier
method verify (line 260) | @Override
FILE: campus-common/src/main/java/com/oddfar/campus/common/utils/ip/AddressUtils.java
class AddressUtils (line 16) | public class AddressUtils {
method getRealAddressByIP (line 25) | public static String getRealAddressByIP(String ip) {
FILE: campus-common/src/main/java/com/oddfar/campus/common/utils/ip/IpUtils.java
class IpUtils (line 15) | public class IpUtils
method getIpAddr (line 23) | public static String getIpAddr(HttpServletRequest request)
method internalIp (line 61) | public static boolean internalIp(String ip)
method internalIp (line 73) | private static boolean internalIp(byte[] addr)
method textToNumericFormatV4 (line 116) | public static byte[] textToNumericFormatV4(String text)
method getHostIp (line 203) | public static String getHostIp()
method getHostName (line 220) | public static String getHostName()
method getMultistageReverseProxyIp (line 238) | public static String getMultistageReverseProxyIp(String ip)
method isUnknown (line 262) | public static boolean isUnknown(String checkString)
FILE: campus-common/src/main/java/com/oddfar/campus/common/utils/pol/ExcelHandlerAdapter.java
type ExcelHandlerAdapter (line 8) | public interface ExcelHandlerAdapter {
method format (line 16) | Object format(Object value, String[] args);
FILE: campus-common/src/main/java/com/oddfar/campus/common/utils/reflect/ReflectUtils.java
class ReflectUtils (line 19) | @SuppressWarnings("rawtypes")
method invokeGetter (line 33) | @SuppressWarnings("unchecked")
method invokeSetter (line 47) | public static <E> void invokeSetter(Object obj, String propertyName, E...
method getFieldValue (line 64) | @SuppressWarnings("unchecked")
method setFieldValue (line 83) | public static <E> void setFieldValue(final Object obj, final String fi...
method invokeMethod (line 102) | @SuppressWarnings("unchecked")
method invokeMethodByName (line 126) | @SuppressWarnings("unchecked")
method getAccessibleField (line 174) | public static Field getAccessibleField(final Object obj, final String ...
method getAccessibleMethod (line 198) | public static Method getAccessibleMethod(final Object obj, final Strin...
method getAccessibleMethodByName (line 223) | public static Method getAccessibleMethodByName(final Object obj, final...
method makeAccessible (line 244) | public static void makeAccessible(Method method) {
method makeAccessible (line 254) | public static void makeAccessible(Field field) {
method getClassGenricType (line 265) | @SuppressWarnings("unchecked")
method getClassGenricType (line 274) | public static Class getClassGenricType(final Class clazz, final int in...
method getUserClass (line 297) | public static Class<?> getUserClass(Object instance) {
method convertReflectionExceptionToUnchecked (line 315) | public static RuntimeException convertReflectionExceptionToUnchecked(S...
FILE: campus-common/src/main/java/com/oddfar/campus/common/utils/spring/AopTargetUtils.java
class AopTargetUtils (line 40) | @Slf4j
method getTarget (line 49) | public static Object getTarget(Object proxy) {
method getCglibProxyTargetObject (line 75) | private static Object getCglibProxyTargetObject(Object proxy) throws E...
method getJdkDynamicProxyTargetObject (line 90) | private static Object getJdkDynamicProxyTargetObject(Object proxy) thr...
FILE: campus-common/src/main/java/com/oddfar/campus/common/utils/sql/SqlUtil.java
class SqlUtil (line 11) | public class SqlUtil
method escapeOrderBySql (line 26) | public static String escapeOrderBySql(String value)
method isValidOrderBySql (line 38) | public static boolean isValidOrderBySql(String value)
method filterKeyword (line 46) | public static void filterKeyword(String value)
FILE: campus-common/src/main/java/com/oddfar/campus/common/utils/uuid/IdUtils.java
class IdUtils (line 10) | public class IdUtils
method randomUUID (line 17) | public static String randomUUID()
method simpleUUID (line 27) | public static String simpleUUID()
method fastUUID (line 37) | public static String fastUUID()
method fastSimpleUUID (line 47) | public static String fastSimpleUUID()
FILE: campus-common/src/main/java/com/oddfar/campus/common/utils/uuid/Seq.java
class Seq (line 11) | public class Seq {
method getId (line 32) | public static String getId() {
method getId (line 41) | public static String getId(String type) {
method getId (line 56) | public static String getId(AtomicInteger atomicInt, int length) {
method getSeq (line 68) | private synchronized static String getSeq(AtomicInteger atomicInt, int...
FILE: campus-common/src/main/java/com/oddfar/campus/common/utils/web/WebFrameworkUtils.java
class WebFrameworkUtils (line 12) | public class WebFrameworkUtils {
method setLoginUserId (line 16) | public static void setLoginUserId(ServletRequest request, Long userId) {
method getLoginUserId (line 27) | public static Long getLoginUserId(HttpServletRequest request) {
FILE: campus-common/src/main/java/com/oddfar/campus/common/validator/XssValidator.java
class XssValidator (line 15) | public class XssValidator implements ConstraintValidator<Xss, String>
method isValid (line 19) | @Override
method containsHtml (line 29) | public static boolean containsHtml(String value)
FILE: campus-framework/src/main/java/com/oddfar/campus/framework/api/file/FileOperatorApi.java
type FileOperatorApi (line 11) | public interface FileOperatorApi {
method storageFile (line 13) | void storageFile(String bucketName, MultipartFile file, String[] allow...
FILE: campus-framework/src/main/java/com/oddfar/campus/framework/api/file/FileUploadUtils.java
class FileUploadUtils (line 26) | public class FileUploadUtils {
method setDefaultBaseDir (line 44) | public static void setDefaultBaseDir(String defaultBaseDir) {
method getDefaultBaseDir (line 48) | public static String getDefaultBaseDir() {
method upload (line 59) | public static final String upload(MultipartFile file) throws IOExcepti...
method upload (line 75) | public static final String upload(String baseDir, MultipartFile file) ...
method upload (line 95) | public static final String upload(String baseDir, MultipartFile file, ...
method extractFilename (line 115) | public static final String extractFilename(MultipartFile file) {
method getAbsoluteFile (line 121) | public static final File getAbsoluteFile(String uploadDir, String file...
method getPathFileName (line 132) | public static final String getPathFileName(String uploadDir, String fi...
method assertAllowed (line 146) | public static final void assertAllowed(MultipartFile file, String[] al...
method isAllowedExtension (line 181) | public static final boolean isAllowedExtension(String extension, Strin...
method getExtension (line 196) | public static final String getExtension(MultipartFile file) {
FILE: campus-framework/src/main/java/com/oddfar/campus/framework/api/file/LocalFileOperator.java
class LocalFileOperator (line 5) | public class LocalFileOperator implements FileOperatorApi {
method LocalFileOperator (line 9) | public LocalFileOperator(String currentSavePath) {
method storageFile (line 14) | @Override
FILE: campus-framework/src/main/java/com/oddfar/campus/framework/api/file/MimeTypeUtils.java
class MimeTypeUtils (line 8) | public class MimeTypeUtils {
method getExtension (line 47) | public static String getExtension(String prefix) {
FILE: campus-framework/src/main/java/com/oddfar/campus/framework/api/file/ZyFileAutoConfiguration.java
class ZyFileAutoConfiguration (line 12) | @Configuration
method fileOperatorApi (line 18) | @Bean
FILE: campus-framework/src/main/java/com/oddfar/campus/framework/api/mail/Impl/MailServiceImpl.java
class MailServiceImpl (line 12) | @Service
method sendQQMail (line 15) | @Async//异步发送邮件
FILE: campus-framework/src/main/java/com/oddfar/campus/framework/api/mail/MailConfigRead.java
class MailConfigRead (line 10) | public class MailConfigRead {
method getSmtpHost (line 12) | public static String getSmtpHost() {
method getSmtpPort (line 16) | public static String getSmtpPort() {
method getSendAccount (line 20) | public static String getSendAccount() {
method getPassword (line 24) | public static String getPassword() {
FILE: campus-framework/src/main/java/com/oddfar/campus/framework/api/mail/MailSendApi.java
type MailSendApi (line 11) | public interface MailSendApi {
method sendQQMail (line 21) | void sendQQMail(List<String> tos, String subject, String content, Bool...
FILE: campus-framework/src/main/java/com/oddfar/campus/framework/api/mail/MailSendContext.java
class MailSendContext (line 10) | public class MailSendContext {
method me (line 15) | public static MailSendApi me() {
FILE: campus-framework/src/main/java/com/oddfar/campus/framework/api/mail/ZyMailAutoConfig.java
class ZyMailAutoConfig (line 8) | @Configuration
method mailSenderApi (line 15) | @Bean
FILE: campus-framework/src/main/java/com/oddfar/campus/framework/api/resource/ApiResourceAutoConfig.java
class ApiResourceAutoConfig (line 13) | @Configuration
method apiResourceScanner (line 19) | @Bean
method resourceCollectorApi (line 29) | @Bean
FILE: campus-framework/src/main/java/com/oddfar/campus/framework/api/resource/ResourceCollectorApi.java
type ResourceCollectorApi (line 14) | public interface ResourceCollectorApi {
method collectResources (line 21) | void collectResources(List<SysResourceEntity> apiResource);
method getAllResources (line 28) | List<SysResourceEntity> getAllResources();
method setRoleAuthCache (line 35) | void setRoleAuthCache(Map<Long, List<SysRoleAuth>> rolePermsMap, Map<L...
method getRoleListMap (line 40) | Map<Long, SysRoleAuthList> getRoleListMap();
FILE: campus-framework/src/main/java/com/oddfar/campus/framework/api/resource/impl/DefaultResourceCollector.java
class DefaultResourceCollector (line 12) | public class DefaultResourceCollector implements ResourceCollectorApi {
method collectResources (line 21) | @Override
method getAllResources (line 34) | @Override
method setRoleAuthCache (line 44) | @Override
method getRoleListMap (line 108) | @Override
FILE: campus-framework/src/main/java/com/oddfar/campus/framework/api/sysconfig/ConfigContext.java
class ConfigContext (line 9) | public class ConfigContext {
method me (line 14) | public static SysConfigService me() {
FILE: campus-framework/src/main/java/com/oddfar/campus/framework/api/sysconfig/ConfigExpander.java
class ConfigExpander (line 5) | public class ConfigExpander {
method getUserDefaultAvatar (line 9) | public static String getUserDefaultAvatar() {
method getLoginCaptchaType (line 16) | public static String getLoginCaptchaType() {
method getFileProfile (line 23) | public static String getFileProfile() {
method getAvatarPath (line 41) | public static String getAvatarPath() {
method getGlobalControllerOpenFlag (line 49) | public static Boolean getGlobalControllerOpenFlag() {
FILE: campus-framework/src/main/java/com/oddfar/campus/framework/api/sysconfig/ZyConfigAutoConfiguration.java
class ZyConfigAutoConfiguration (line 12) | @Configuration
method configService (line 15) | @Bean
FILE: campus-framework/src/main/java/com/oddfar/campus/framework/aspectj/LogAspect.java
class LogAspect (line 48) | @Aspect
method webLog (line 67) | @Pointcut("execution(* *..controller..*(..))")
method doAfterReturning (line 77) | @AfterReturning(pointcut = "webLog()", returning = "jsonResult")
method doAfterThrowing (line 95) | @AfterThrowing(pointcut = "webLog()", throwing = "e")
method getAnnotationProp (line 113) | private Map<String, Object> getAnnotationProp(JoinPoint joinPoint) {
method handleLog (line 152) | protected void handleLog(final JoinPoint joinPoint, Map<String, Object...
method getControllerMethodDescription (line 203) | public void getControllerMethodDescription(JoinPoint joinPoint, SysOpe...
method setRequestValue (line 220) | private void setRequestValue(JoinPoint joinPoint, SysOperLogEntity ope...
method argsArrayToString (line 234) | private String argsArrayToString(Object[] paramsArray) {
method ensureMakeLog (line 254) | private boolean ensureMakeLog(JoinPoint point) {
method invokeAnnotationMethod (line 299) | private <T> T invokeAnnotationMethod(Annotation apiResource, String me...
method excludePropertyPreFilter (line 313) | public PropertyPreExcludeFilter excludePropertyPreFilter() {
method isFilterObject (line 323) | @SuppressWarnings("rawtypes")
FILE: campus-framework/src/main/java/com/oddfar/campus/framework/config/ApplicationConfig.java
class ApplicationConfig (line 9) | @Configuration
FILE: campus-framework/src/main/java/com/oddfar/campus/framework/config/AsyncConfig.java
class AsyncConfig (line 19) | @EnableAsync(proxyTargetClass = true)
method getAsyncExecutor (line 26) | @Override
method getAsyncUncaughtExceptionHandler (line 34) | @Override
FILE: campus-framework/src/main/java/com/oddfar/campus/framework/config/JacksonConfig.java
class JacksonConfig (line 26) | @Slf4j
method customizer (line 31) | @Bean
FILE: campus-framework/src/main/java/com/oddfar/campus/framework/config/KaptchaTextCreator.java
class KaptchaTextCreator (line 13) | public class KaptchaTextCreator extends DefaultTextCreator {
method getText (line 16) | @Override
FILE: campus-framework/src/main/java/com/oddfar/campus/framework/config/MyWebMvcConfig.java
class MyWebMvcConfig (line 21) | @Configuration
method addResourceHandlers (line 32) | @Override
method addInterceptors (line 48) | @Override
method corsFilter (line 56) | @Bean
method requestContextListenerBean (line 81) | @Bean
FILE: campus-framework/src/main/java/com/oddfar/campus/framework/config/MybatisPlusConfig.java
class MybatisPlusConfig (line 12) | @Configuration
method mybatisPlusInterceptor (line 19) | @Bean
method defaultMetaObjectHandler (line 32) | @Bean
FILE: campus-framework/src/main/java/com/oddfar/campus/framework/config/SecurityConfig.java
class SecurityConfig (line 28) | @EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true)
method authenticationManagerBean (line 74) | @Bean
method configure (line 95) | @Override
method bCryptPasswordEncoder (line 131) | @Bean
method configure (line 139) | @Override
FILE: campus-framework/src/main/java/com/oddfar/campus/framework/config/ThreadPoolConfig.java
class ThreadPoolConfig (line 18) | @Configuration
method threadPoolTaskExecutor (line 32) | @Bean(name = "threadPoolTaskExecutor")
method scheduledExecutorService (line 47) | @Bean(name = "scheduledExecutorService")
FILE: campus-framework/src/main/java/com/oddfar/campus/framework/expander/SysConfigExpander.java
class SysConfigExpander (line 12) | @Component
method init (line 20) | @PostConstruct
method getUserDefaultAvatar (line 29) | public static String getUserDefaultAvatar() {
method getLoginCaptchaType (line 38) | public static String getLoginCaptchaType() {
method getFileProfile (line 48) | public static String getFileProfile() {
FILE: campus-framework/src/main/java/com/oddfar/campus/framework/expander/SysFileConfigExpander.java
class SysFileConfigExpander (line 9) | @Component
method getProfile (line 14) | public static String getProfile() {
method getImportPath (line 32) | public static String getImportPath()
method getAvatarPath (line 39) | public static String getAvatarPath()
method getDownloadPath (line 47) | public static String getDownloadPath()
method getUploadPath (line 55) | public static String getUploadPath()
FILE: campus-framework/src/main/java/com/oddfar/campus/framework/handler/BigNumberSerializer.java
class BigNumberSerializer (line 15) | @JacksonStdImpl
method BigNumberSerializer (line 29) | public BigNumberSerializer(Class<? extends Number> rawType) {
method serialize (line 33) | @Override
FILE: campus-framework/src/main/java/com/oddfar/campus/framework/handler/MyDBFieldHandler.java
class MyDBFieldHandler (line 15) | public class MyDBFieldHandler implements MetaObjectHandler {
method insertFill (line 17) | @Override
method updateFill (line 50) | @Override
FILE: campus-framework/src/main/java/com/oddfar/campus/framework/interceptor/RepeatSubmitInterceptor.java
class RepeatSubmitInterceptor (line 20) | @Component
method preHandle (line 22) | @Override
method isRepeatSubmit (line 48) | public abstract boolean isRepeatSubmit(HttpServletRequest request, Rep...
FILE: campus-framework/src/main/java/com/oddfar/campus/framework/interceptor/impl/SameUrlDataInterceptor.java
class SameUrlDataInterceptor (line 26) | @Component
method isRepeatSubmit (line 40) | @SuppressWarnings("unchecked")
method compareParams (line 91) | private boolean compareParams(Map<String, Object> nowMap, Map<String, ...
method compareTime (line 101) | private boolean compareTime(Map<String, Object> nowMap, Map<String, Ob...
FILE: campus-framework/src/main/java/com/oddfar/campus/framework/listener/ApiResourceScanner.java
class ApiResourceScanner (line 29) | public class ApiResourceScanner implements BeanPostProcessor {
method ApiResourceScanner (line 40) | public ApiResourceScanner(ResourceCollectorApi resourceCollectorApi) {
method postProcessBeforeInitialization (line 44) | @Override
method postProcessAfterInitialization (line 49) | @Override
method getControllerFlag (line 79) | private boolean getControllerFlag(Class<?> clazz) {
method doScan (line 93) | private List<SysResourceEntity> doScan(Class<?> clazz) {
method createDefinition (line 122) | private SysResourceEntity createDefinition(Class<?> controllerClass, M...
method createControllerPath (line 186) | private String createControllerPath(Class<?> clazz, String[] paths) {
method invokeAnnotationMethod (line 221) | private <T> T invokeAnnotationMethod(Annotation apiResource, String me...
FILE: campus-framework/src/main/java/com/oddfar/campus/framework/listener/ReadyEventListener.java
class ReadyEventListener (line 21) | @Component
method onApplicationEvent (line 29) | @Override
FILE: campus-framework/src/main/java/com/oddfar/campus/framework/listener/ResourceReportListener.java
class ResourceReportListener (line 27) | public class ResourceReportListener {
method onApplicationEvent (line 36) | public void onApplicationEvent(ApplicationReadyEvent event) {
method setSource (line 64) | private void setSource(Method m) {
method setSource (line 95) | private void setSource(SysResourceEntity resource, Annotation a) {
FILE: campus-framework/src/main/java/com/oddfar/campus/framework/manager/AsyncFactory.java
class AsyncFactory (line 26) | public class AsyncFactory {
method recordLogininfor (line 38) | public static TimerTask recordLogininfor(final String userName, final ...
method recordOper (line 87) | public static TimerTask recordOper(final SysOperLogEntity operLog) {
FILE: campus-framework/src/main/java/com/oddfar/campus/framework/manager/AsyncManager.java
class AsyncManager (line 15) | public class AsyncManager {
method AsyncManager (line 29) | private AsyncManager() {
method me (line 34) | public static AsyncManager me() {
method execute (line 43) | public void execute(TimerTask task) {
method shutdown (line 50) | public void shutdown() {
FILE: campus-framework/src/main/java/com/oddfar/campus/framework/mapper/SysConfigMapper.java
type SysConfigMapper (line 9) | public interface SysConfigMapper extends BaseMapperX<SysConfigEntity> {
method selectPage (line 10) | default PageResult<SysConfigEntity> selectPage(SysConfigEntity config) {
method selectConfig (line 28) | default SysConfigEntity selectConfig(SysConfigEntity config) {
method checkConfigKeyUnique (line 39) | default SysConfigEntity checkConfigKeyUnique(SysConfigEntity config) {
FILE: campus-framework/src/main/java/com/oddfar/campus/framework/mapper/SysDictDataMapper.java
type SysDictDataMapper (line 12) | public interface SysDictDataMapper extends BaseMapperX<SysDictDataEntity> {
method selectPage (line 13) | default PageResult<SysDictDataEntity> selectPage(SysDictDataEntity dic...
method selectDictDataByType (line 23) | default List<SysDictDataEntity> selectDictDataByType(String dictType) {
method updateDictDataType (line 38) | default int updateDictDataType(@Param("oldDictType") String oldDictTyp...
method countDictDataByType (line 50) | default Long countDictDataByType(String dictType) {
FILE: campus-framework/src/main/java/com/oddfar/campus/framework/mapper/SysDictTypeMapper.java
type SysDictTypeMapper (line 12) | public interface SysDictTypeMapper extends BaseMapperX<SysDictTypeEntity> {
method selectPage (line 13) | default PageResult<SysDictTypeEntity> selectPage(SysDictTypeEntity dic...
method creatWrapper (line 22) | default LambdaQueryWrapper<SysDictTypeEntity> creatWrapper(SysDictType...
FILE: campus-framework/src/main/java/com/oddfar/campus/framework/mapper/SysLoginLogMapper.java
type SysLoginLogMapper (line 15) | public interface SysLoginLogMapper extends BaseMapperX<SysLoginLogEntity> {
method selectLogininforPage (line 17) | default PageResult<SysLoginLogEntity> selectLogininforPage(SysLoginLog...
method selectLogininforList (line 34) | default List<SysLoginLogEntity> selectLogininforList(SysLoginLogEntity...
method cleanLogininfor (line 47) | int cleanLogininfor();
FILE: campus-framework/src/main/java/com/oddfar/campus/framework/mapper/SysMenuMapper.java
type SysMenuMapper (line 13) | public interface SysMenuMapper extends BaseMapperX<SysMenuEntity> {
method selectPage (line 14) | default PageResult<SysMenuEntity> selectPage(SysMenuEntity sysMenuEnti...
method selectMenuList (line 25) | default List<SysMenuEntity> selectMenuList(SysMenuEntity menu) {
method selectMenuListByUserId (line 39) | List<SysMenuEntity> selectMenuListByUserId(SysMenuEntity menu);
method selectMenuTreeAll (line 46) | List<SysMenuEntity> selectMenuTreeAll();
method selectMenuTreeByUserId (line 54) | List<SysMenuEntity> selectMenuTreeByUserId(Long userId);
method selectMenuPermsByRoleId (line 63) | List<String> selectMenuPermsByRoleId(Long roleId);
method getMenuPermsAll (line 70) | List<SysRoleAuth> getMenuPermsAll();
method selectMenuPermsByUserId (line 78) | List<String> selectMenuPermsByUserId(Long userId);
method selectMenuListByRoleId (line 88) | List<Long> selectMenuListByRoleId(@Param("roleId") Long roleId, @Param...
method checkMenuNameUnique (line 93) | default SysMenuEntity checkMenuNameUnique(SysMenuEntity menu) {
FILE: campus-framework/src/main/java/com/oddfar/campus/framework/mapper/SysOperLogMapper.java
type SysOperLogMapper (line 14) | public interface SysOperLogMapper extends BaseMapperX<SysOperLogEntity> {
method selectOperLogPage (line 23) | default PageResult<SysOperLogEntity> selectOperLogPage(SysOperLogEntit...
method deleteOperLogByIds (line 42) | default int deleteOperLogByIds(Long[] operIds) {
method cleanOperLog (line 51) | public void cleanOperLog();
method selectOperLogList (line 57) | default List<SysOperLogEntity> selectOperLogList(SysOperLogEntity oper...
FILE: campus-framework/src/main/java/com/oddfar/campus/framework/mapper/SysResourceMapper.java
type SysResourceMapper (line 12) | public interface SysResourceMapper extends BaseMapperX<SysResourceEntity> {
method selectPage (line 13) | default PageResult<SysResourceEntity> selectPage(SysResourceEntity res...
method truncateResource (line 23) | @Update("truncate table sys_resource")
method selectResourceCodeByRoleId (line 32) | Set<String> selectResourceCodeByRoleId(Long roleId);
method selectResourceListByRoleId (line 40) | List<Long> selectResourceListByRoleId(Long roleId);
method selectResourceListByUserId (line 48) | List<SysResourceEntity> selectResourceListByUserId(SysResourceEntity r...
method selectResourceList (line 56) | List<SysResourceEntity> selectResourceList(SysResourceEntity resource);
FILE: campus-framework/src/main/java/com/oddfar/campus/framework/mapper/SysRoleMapper.java
type SysRoleMapper (line 12) | public interface SysRoleMapper extends BaseMapperX<SysRoleEntity> {
method selectPage (line 13) | default PageResult<SysRoleEntity> selectPage(SysRoleEntity role) {
method selectRolePermissionByUserId (line 28) | List<SysRoleEntity> selectRolePermissionByUserId(Long userId);
method selectRoleById (line 36) | SysRoleEntity selectRoleById(Long roleId);
method selectRoleList (line 44) | List<SysRoleEntity> selectRoleList(SysRoleEntity role);
method selectRoleListByKey (line 51) | List<SysRoleEntity> selectRoleListByKey(@Param("RoleKeys") Set<String>...
method checkRoleNameUnique (line 59) | SysRoleEntity checkRoleNameUnique(String roleName);
method checkRoleKeyUnique (line 67) | SysRoleEntity checkRoleKeyUnique(String roleKey);
method selectRolesByUserName (line 75) | public List<SysRoleEntity> selectRolesByUserName(String userName);
FILE: campus-framework/src/main/java/com/oddfar/campus/framework/mapper/SysRoleMenuMapper.java
type SysRoleMenuMapper (line 8) | public interface SysRoleMenuMapper extends BaseMapperX<SysRoleMenuEntity> {
method checkMenuExistRole (line 16) | public int checkMenuExistRole(Long menuId);
method deleteRoleMenuByRoleId (line 24) | public int deleteRoleMenuByRoleId(Long roleId);
method deleteRoleMenu (line 32) | public int deleteRoleMenu(Long[] ids);
method batchRoleMenu (line 40) | public int batchRoleMenu(List<SysRoleMenuEntity> roleMenuList);
FILE: campus-framework/src/main/java/com/oddfar/campus/framework/mapper/SysRoleResourceMapper.java
type SysRoleResourceMapper (line 9) | public interface SysRoleResourceMapper extends BaseMapperX<SysRoleResour...
method deleteRoleResourceByRoleId (line 17) | default int deleteRoleResourceByRoleId(Long roleId) {
method saveBatch (line 26) | int saveBatch(List<SysRoleResourceEntity> rrList);
FILE: campus-framework/src/main/java/com/oddfar/campus/framework/mapper/SysUserMapper.java
type SysUserMapper (line 12) | public interface SysUserMapper extends BaseMapperX<SysUserEntity> {
method selectPage (line 14) | default PageResult<SysUserEntity> selectPage(SysUserEntity user) {
method selectUserByUserName (line 31) | SysUserEntity selectUserByUserName(String userName);
method selectUserById (line 39) | SysUserEntity selectUserById(Long userId);
method selectAllocatedList (line 47) | Page<SysUserEntity> selectAllocatedList(@Param("page") Page<SysUserEnt...
method selectUnallocatedList (line 55) | Page<SysUserEntity> selectUnallocatedList(@Param("page") Page<SysUserE...
method updateUserAvatar (line 65) | int updateUserAvatar(@Param("userName") String userName, @Param("avata...
method checkEmailUnique (line 73) | default SysUserEntity checkEmailUnique(String email) {
method checkPhoneUnique (line 84) | default SysUserEntity checkPhoneUnique(String phonenumber) {
method resetUserPwd (line 95) | int resetUserPwd(@Param("userName") String userName, @Param("password"...
method checkUserNameUnique (line 104) | default SysUserEntity checkUserNameUnique(String userName) {
FILE: campus-framework/src/main/java/com/oddfar/campus/framework/mapper/SysUserRoleMapper.java
type SysUserRoleMapper (line 8) | public interface SysUserRoleMapper extends BaseMapperX<SysUserRoleEntity> {
method deleteUserRoleByUserId (line 16) | default int deleteUserRoleByUserId(Long userId) {
method deleteUserRoleInfo (line 27) | default int deleteUserRoleInfo(SysUserRoleEntity userRole) {
method deleteUserRoleInfos (line 40) | default int deleteUserRoleInfos(@Param("roleId") Long roleId, @Param("...
method countUserRoleByRoleId (line 52) | default int countUserRoleByRoleId(Long roleId) {
method deleteUserRole (line 63) | void deleteUserRole(Long[] userIds);
FILE: campus-framework/src/main/java/com/oddfar/campus/framework/security/context/AuthenticationContextHolder.java
class AuthenticationContextHolder (line 10) | public class AuthenticationContextHolder {
method getContext (line 13) | public static Authentication getContext() {
method setContext (line 17) | public static void setContext(Authentication context) {
method clearContext (line 21) | public static void clearContext() {
FILE: campus-framework/src/main/java/com/oddfar/campus/framework/security/context/PermissionContextHolder.java
class PermissionContextHolder (line 13) | public class PermissionContextHolder {
method setContext (line 16) | public static void setContext(String permission) {
method getContext (line 21) | public static String getContext() {
FILE: campus-framework/src/main/java/com/oddfar/campus/framework/security/filter/JwtAuthenticationTokenFilter.java
class JwtAuthenticationTokenFilter (line 26) | @Component
method doFilterInternal (line 31) | @Override
method setLoginUser (line 54) | public static void setLoginUser(LoginUser loginUser, HttpServletReques...
FILE: campus-framework/src/main/java/com/oddfar/campus/framework/security/handle/AuthenticationEntryPointImpl.java
class AuthenticationEntryPointImpl (line 22) | @Component
method commence (line 26) | @Override
FILE: campus-framework/src/main/java/com/oddfar/campus/framework/security/handle/LogoutSuccessHandlerImpl.java
class LogoutSuccessHandlerImpl (line 29) | @Configuration
method onLogoutSuccess (line 38) | @Override
FILE: campus-framework/src/main/java/com/oddfar/campus/framework/security/properties/PermitAllUrlProperties.java
class PermitAllUrlProperties (line 26) | @Configuration
method afterPropertiesSet (line 37) | @Override
method setApplicationContext (line 58) | @Override
method getUrls (line 64) | public List<String> getUrls()
method setUrls (line 69) | public void setUrls(List<String> urls)
FILE: campus-framework/src/main/java/com/oddfar/campus/framework/service/SysConfigService.java
type SysConfigService (line 6) | public interface SysConfigService {
method page (line 8) | PageResult<SysConfigEntity> page(SysConfigEntity sysConfigEntity);
method selectConfigById (line 16) | SysConfigEntity selectConfigById(Long configId);
method selectConfigByKey (line 24) | String selectConfigByKey(String configKey);
method selectConfigByKey (line 34) | <T> T selectConfigByKey(String configKey, Class<T> clazz);
method selectConfigByKey (line 46) | <T> T selectConfigByKey(String configKey, Class<T> clazz, T defaultVal...
method selectCaptchaEnabled (line 54) | boolean selectCaptchaEnabled();
method insertConfig (line 62) | int insertConfig(SysConfigEntity config);
method updateConfig (line 70) | int updateConfig(SysConfigEntity config);
method deleteConfigByIds (line 77) | void deleteConfigByIds(Long[] configIds);
method loadingConfigCache (line 82) | void loadingConfigCache();
method checkConfigKeyUnique (line 90) | boolean checkConfigKeyUnique(SysConfigEntity config);
method clearConfigCache (line 95) | void clearConfigCache();
method resetConfigCache (line 100) | void resetConfigCache();
FILE: campus-framework/src/main/java/com/oddfar/campus/framework/service/SysDictDataService.java
type SysDictDataService (line 6) | public interface SysDictDataService {
method page (line 8) | PageResult<SysDictDataEntity> page(SysDictDataEntity dictDataEntity);
method insertDictData (line 16) | int insertDictData(SysDictDataEntity dictData);
method selectDictDataById (line 24) | SysDictDataEntity selectDictDataById(Long dictCode);
method updateDictData (line 32) | int updateDictData(SysDictDataEntity dictData);
method deleteDictDataByIds (line 39) | void deleteDictDataByIds(Long[] dictCodes);
FILE: campus-framework/src/main/java/com/oddfar/campus/framework/service/SysDictTypeService.java
type SysDictTypeService (line 9) | public interface SysDictTypeService {
method page (line 11) | PageResult<SysDictTypeEntity> page(SysDictTypeEntity sysDictTypeEntity);
method selectDictDataByType (line 20) | List<SysDictDataEntity> selectDictDataByType(String dictType);
method selectDictTypeById (line 28) | SysDictTypeEntity selectDictTypeById(Long dictId);
method selectDictTypeAll (line 35) | List<SysDictTypeEntity> selectDictTypeAll();
method updateDictType (line 43) | int updateDictType(SysDictTypeEntity dictType);
method insertDictType (line 51) | int insertDictType(SysDictTypeEntity dictType);
method deleteDictTypeByIds (line 58) | void deleteDictTypeByIds(Long[] dictIds);
method resetDictCache (line 63) | void resetDictCache();
method loadingDictCache (line 68) | void loadingDictCache();
method checkDictTypeUnique (line 76) | boolean checkDictTypeUnique(SysDictTypeEntity dictType);
FILE: campus-framework/src/main/java/com/oddfar/campus/framework/service/SysLoginLogService.java
type SysLoginLogService (line 11) | public interface SysLoginLogService {
method selectLogininforPage (line 18) | public PageResult<SysLoginLogEntity> selectLogininforPage(SysLoginLogE...
method insertLogininfor (line 25) | public void insertLogininfor(SysLoginLogEntity logininfor);
method selectLogininforList (line 33) | public List<SysLoginLogEntity> selectLogininforList(SysLoginLogEntity ...
method deleteLogininforByIds (line 41) | public int deleteLogininforByIds(Long[] infoIds);
method cleanLogininfor (line 46) | public void cleanLogininfor();
FILE: campus-framework/src/main/java/com/oddfar/campus/framework/service/SysMenuService.java
type SysMenuService (line 13) | public interface SysMenuService {
method selectMenuList (line 21) | List<SysMenuEntity> selectMenuList(Long userId);
method selectMenuList (line 31) | List<SysMenuEntity> selectMenuList(SysMenuEntity menu, Long userId);
method selectMenuTreeByUserId (line 39) | List<SysMenuEntity> selectMenuTreeByUserId(Long userId);
method selectMenuListByRoleId (line 47) | List<Long> selectMenuListByRoleId(Long roleId);
method selectMenuById (line 55) | SysMenuEntity selectMenuById(Long menuId);
method buildMenus (line 63) | List<RouterVo> buildMenus(List<SysMenuEntity> menus);
method buildMenuTree (line 71) | List<SysMenuEntity> buildMenuTree(List<SysMenuEntity> menus);
method buildMenuTreeSelect (line 79) | List<TreeSelect> buildMenuTreeSelect(List<SysMenuEntity> menus);
method selectMenuPermsByRoleId (line 87) | Set<String> selectMenuPermsByRoleId(Long roleId);
method selectMenuPermsAll (line 94) | Map<Long, List<SysRoleAuth>> selectMenuPermsAll();
method selectMenuPermsByUserId (line 102) | Collection<String> selectMenuPermsByUserId(Long userId);
method insertMenu (line 110) | int insertMenu(SysMenuEntity menu);
method updateMenu (line 118) | int updateMenu(SysMenuEntity menu);
method deleteMenuById (line 126) | int deleteMenuById(Long menuId);
method checkMenuExistRole (line 134) | boolean checkMenuExistRole(Long menuId);
method hasChildByMenuId (line 142) | boolean hasChildByMenuId(Long menuId);
method checkMenuNameUnique (line 150) | boolean checkMenuNameUnique(SysMenuEntity menu);
FILE: campus-framework/src/main/java/com/oddfar/campus/framework/service/SysOperLogService.java
type SysOperLogService (line 11) | public interface SysOperLogService {
method insertOperlog (line 17) | public void insertOperlog(SysOperLogEntity operLog);
method selectOperLogPage (line 25) | PageResult<SysOperLogEntity> selectOperLogPage(SysOperLogEntity operLog);
method deleteOperLogByIds (line 33) | public int deleteOperLogByIds(Long[] operIds);
method selectOperLogById (line 41) | public SysOperLogEntity selectOperLogById(Long operId);
method cleanOperLog (line 46) | public void cleanOperLog();
method selectOperLogList (line 54) | List<SysOperLogEntity> selectOperLogList(SysOperLogEntity operLog);
FILE: campus-framework/src/main/java/com/oddfar/campus/framework/service/SysResourceService.java
type SysResourceService (line 12) | public interface SysResourceService extends IService<SysResourceEntity> {
method page (line 14) | PageResult<SysResourceEntity> page(SysResourceEntity sysResourceEntity);
method insertResource (line 23) | int insertResource(SysResourceEntity resource);
method truncateResource (line 28) | void truncateResource();
method selectResourceCodeByRoleId (line 36) | Set<String> selectResourceCodeByRoleId(Long roleId);
method selectApiResourceList (line 45) | List<SysResourceEntity> selectApiResourceList(Long userId);
method selectSysRoleAuthAll (line 50) | List<SysRoleAuth> selectSysRoleAuthAll();
method selectApiResourceList (line 58) | List<SysResourceEntity> selectApiResourceList(SysResourceEntity resour...
method selectResourceListByRoleId (line 66) | List<Long> selectResourceListByRoleId(Long roleId);
method buildResourceTreeSelect (line 74) | List<TreeSelect> buildResourceTreeSelect(List<SysResourceEntity> resou...
method editRoleResource (line 82) | void editRoleResource(Long roleId, Long[] resourceIds);
FILE: campus-framework/src/main/java/com/oddfar/campus/framework/service/SysRoleService.java
type SysRoleService (line 11) | public interface SysRoleService extends IService<SysUserRoleEntity> {
method page (line 14) | PageResult<SysRoleEntity> page(SysRoleEntity sysRoleEntity);
method selectRoleList (line 22) | List<SysRoleEntity> selectRoleList(SysRoleEntity role);
method selectRolePermissionByUserId (line 30) | Set<String> selectRolePermissionByUserId(Long userId);
method selectRoleById (line 38) | SysRoleEntity selectRoleById(Long roleId);
method selectRoleAll (line 45) | List<SysRoleEntity> selectRoleAll();
method selectRolesByUserId (line 53) | List<SysRoleEntity> selectRolesByUserId(Long userId);
method insertRole (line 62) | int insertRole(SysRoleEntity role);
method updateRole (line 70) | int updateRole(SysRoleEntity role);
method updateRoleStatus (line 78) | int updateRoleStatus(SysRoleEntity role);
method deleteRoleByIds (line 86) | int deleteRoleByIds(Long[] roleIds);
method deleteAuthUser (line 94) | int deleteAuthUser(SysUserRoleEntity userRole);
method deleteAuthUsers (line 103) | int deleteAuthUsers(Long roleId, Long[] userIds);
method insertAuthUsers (line 112) | boolean insertAuthUsers(Long roleId, Long[] userIds);
method countUserRoleByRoleId (line 120) | int countUserRoleByRoleId(Long roleId);
method checkRoleNameUnique (line 128) | boolean checkRoleNameUnique(SysRoleEntity role);
method checkRoleKeyUnique (line 136) | boolean checkRoleKeyUnique(SysRoleEntity role);
method checkRoleAllowed (line 143) | void checkRoleAllowed(SysRoleEntity role);
method resetRoleAuthCache (line 148) | void resetRoleAuthCache();
FILE: campus-framework/src/main/java/com/oddfar/campus/framework/service/SysUserService.java
type SysUserService (line 10) | public interface SysUserService {
method page (line 12) | PageResult<SysUserEntity> page(SysUserEntity sysUserEntity);
method selectUserByUserName (line 21) | SysUserEntity selectUserByUserName(String userName);
method selectUserById (line 29) | SysUserEntity selectUserById(Long userId);
method selectAllocatedList (line 37) | Page<SysUserEntity> selectAllocatedList(SysUserEntity user);
method selectUnallocatedList (line 45) | Page<SysUserEntity> selectUnallocatedList(SysUserEntity user);
method selectUserRoleGroup (line 53) | String selectUserRoleGroup(String userName);
method registerUser (line 61) | boolean registerUser(SysUserEntity user);
method insertUser (line 69) | int insertUser(SysUserEntity user);
method updateUser (line 77) | int updateUser(SysUserEntity user);
method deleteUserByIds (line 85) | int deleteUserByIds(Long[] userIds);
method updateUserProfile (line 93) | int updateUserProfile(SysUserEntity user);
method updateUserStatus (line 101) | int updateUserStatus(SysUserEntity user);
method updateUserAvatar (line 110) | boolean updateUserAvatar(String userName, String avatar);
method resetPwd (line 118) | int resetPwd(SysUserEntity user);
method checkUserAllowed (line 125) | void checkUserAllowed(SysUserEntity user);
method insertUserAuth (line 133) | void insertUserAuth(Long userId, Long[] roleIds);
method insertUserAuth (line 141) | void insertUserAuth(Long userId, Set<String> roleKey);
method resetUserPwd (line 150) | int resetUserPwd(String userName, String password);
method checkUserNameUnique (line 158) | boolean checkUserNameUnique(SysUserEntity user);
method checkPhoneUnique (line 166) | boolean checkPhoneUnique(SysUserEntity user);
method checkEmailUnique (line 174) | boolean checkEmailUnique(SysUserEntity user);
FILE: campus-framework/src/main/java/com/oddfar/campus/framework/service/impl/SysConfigServiceImpl.java
class SysConfigServiceImpl (line 22) | @Service
method init (line 34) | @PostConstruct
method page (line 39) | @Override
method selectConfigById (line 44) | @Override
method selectConfigByKey (line 57) | @Override
method selectConfigByKey (line 73) | @Override
method selectConfigByKey (line 89) | @Override
method selectCaptchaEnabled (line 100) | @Override
method insertConfig (line 109) | @Override
method updateConfig (line 118) | @Override
method deleteConfigByIds (line 127) | @Override
method loadingConfigCache (line 142) | @Override
method checkConfigKeyUnique (line 151) | @Override
method clearConfigCache (line 161) | @Override
method resetConfigCache (line 167) | @Override
method getCacheKey (line 179) | private String getCacheKey(String configKey) {
FILE: campus-framework/src/main/java/com/oddfar/campus/framework/service/impl/SysDictDataServiceImpl.java
class SysDictDataServiceImpl (line 13) | @Service
method page (line 20) | @Override
method insertDictData (line 25) | @Override
method selectDictDataById (line 35) | @Override
method updateDictData (line 41) | @Override
method deleteDictDataByIds (line 51) | @Override
FILE: campus-framework/src/main/java/com/oddfar/campus/framework/service/impl/SysDictTypeServiceImpl.java
class SysDictTypeServiceImpl (line 24) | @Service
method page (line 31) | @Override
method selectDictDataByType (line 42) | @Override
method selectDictTypeById (line 60) | @Override
method selectDictTypeAll (line 65) | @Override
method updateDictType (line 70) | @Override
method insertDictType (line 86) | @Override
method deleteDictTypeByIds (line 95) | @Override
method resetDictCache (line 108) | @Override
method loadingDictCache (line 117) | @Override
method checkDictTypeUnique (line 125) | @Override
FILE: campus-framework/src/main/java/com/oddfar/campus/framework/service/impl/SysLoginLogServiceImpl.java
class SysLoginLogServiceImpl (line 18) | @Service
method selectLogininforPage (line 30) | @Override
method insertLogininfor (line 40) | @Override
method selectLogininforList (line 51) | @Override
method deleteLogininforByIds (line 62) | @Override
method cleanLogininfor (line 70) | @Override
FILE: campus-framework/src/main/java/com/oddfar/campus/framework/service/impl/SysMenuServiceImpl.java
class SysMenuServiceImpl (line 30) | @Service
method selectMenuList (line 46) | @Override
method selectMenuList (line 57) | @Override
method selectMenuTreeByUserId (line 76) | @Override
method selectMenuListByRoleId (line 93) | @Override
method selectMenuById (line 99) | @Override
method buildMenus (line 110) | @Override
method buildMenuTreeSelect (line 161) | @Override
method buildMenuTree (line 173) | @Override
method selectMenuPermsByRoleId (line 200) | @Override
method selectMenuPermsAll (line 212) | @Override
method selectMenuPermsByUserId (line 225) | @Override
method insertMenu (line 237) | @Override
method updateMenu (line 242) | @Override
method deleteMenuById (line 247) | @Override
method checkMenuExistRole (line 252) | @Override
method hasChildByMenuId (line 258) | @Override
method checkMenuNameUnique (line 266) | @Override
method getRouterPath (line 282) | public String getRouterPath(SysMenuEntity menu) {
method isInnerLink (line 306) | public boolean isInnerLink(SysMenuEntity menu) {
method getComponent (line 316) | public String getComponent(SysMenuEntity menu) {
method isParentView (line 334) | public boolean isParentView(SysMenuEntity menu) {
method getRouteName (line 344) | public String getRouteName(SysMenuEntity menu) {
method isMenuFrame (line 359) | public boolean isMenuFrame(SysMenuEntity menu) {
method getChildPerms (line 371) | public List<SysMenuEntity> getChildPerms(List<SysMenuEntity> list, int...
method recursionFn (line 390) | private void recursionFn(List<SysMenuEntity> list, SysMenuEntity t) {
method hasChild (line 404) | private boolean hasChild(List<SysMenuEntity> list, SysMenuEntity t) {
method getChildList (line 411) | private List<SysMenuEntity> getChildList(List<SysMenuEntity> list, Sys...
method innerLinkReplaceEach (line 428) | public String innerLinkReplaceEach(String path) {
FILE: campus-framework/src/main/java/com/oddfar/campus/framework/service/impl/SysOperLogServiceImpl.java
class SysOperLogServiceImpl (line 15) | @Service
method insertOperlog (line 25) | @Override
method selectOperLogPage (line 36) | @Override
method deleteOperLogByIds (line 47) | @Override
method selectOperLogById (line 58) | @Override
method cleanOperLog (line 66) | @Override
method selectOperLogList (line 71) | @Override
FILE: campus-framework/src/main/java/com/oddfar/campus/framework/service/impl/SysResourceServiceImpl.java
class SysResourceServiceImpl (line 20) | @Service
method page (line 28) | @Override
method insertResource (line 39) | @Override
method truncateResource (line 49) | @Override
method selectResourceCodeByRoleId (line 60) | @Override
method selectApiResourceList (line 65) | @Override
method selectSysRoleAuthAll (line 72) | @Override
method selectApiResourceList (line 78) | @Override
method selectResourceListByRoleId (line 91) | @Override
method buildResourceTreeSelect (line 96) | @Override
method editRoleResource (line 112) | @Override
method insertRoleMenu (line 123) | public int insertRoleMenu(Long roleId, List<SysResourceEntity> resourc...
FILE: campus-framework/src/main/java/com/oddfar/campus/framework/service/impl/SysRoleServiceImpl.java
class SysRoleServiceImpl (line 26) | @Service
method page (line 43) | @Override
method selectRoleList (line 48) | @Override
method selectRolePermissionByUserId (line 59) | @Override
method selectRoleById (line 78) | @Override
method selectRoleAll (line 83) | @Override
method selectRolesByUserId (line 89) | @Override
method insertRole (line 105) | @Override
method updateRole (line 113) | @Override
method updateRoleStatus (line 123) | @Override
method deleteRoleByIds (line 128) | @Override
method deleteAuthUser (line 144) | @Override
method deleteAuthUsers (line 149) | @Override
method insertAuthUsers (line 154) | @Override
method countUserRoleByRoleId (line 168) | @Override
method checkRoleNameUnique (line 173) | @Override
method checkRoleKeyUnique (line 183) | @Override
method checkRoleAllowed (line 193) | @Override
method resetRoleAuthCache (line 200) | @Override
method insertRoleMenu (line 215) | public int insertRoleMenu(SysRoleEntity role) {
FILE: campus-framework/src/main/java/com/oddfar/campus/framework/service/impl/SysUserServiceImpl.java
class SysUserServiceImpl (line 33) | @Service
method page (line 45) | @Override
method selectUserByUserName (line 50) | @Override
method selectUserById (line 59) | @Override
method selectAllocatedList (line 68) | @Override
method selectUnallocatedList (line 81) | @Override
method selectUserRoleGroup (line 87) | @Override
method registerUser (line 96) | @Override
method insertUser (line 101) | @Override
method updateUser (line 124) | @Override
method deleteUserByIds (line 136) | @Override
method updateUserProfile (line 148) | @Override
method updateUserStatus (line 153) | @Override
method updateUserAvatar (line 158) | @Override
method resetPwd (line 163) | @Override
method checkUserAllowed (line 168) | @Override
method insertUserAuth (line 175) | @Override
method insertUserAuth (line 182) | @Override
method resetUserPwd (line 196) | @Override
method checkUserNameUnique (line 201) | @Override
method checkPhoneUnique (line 211) | @Override
method checkEmailUnique (line 221) | @Override
method insertUserRole (line 236) | public void insertUserRole(SysUserEntity user) {
method insertUserRole (line 247) | public void insertUserRole(Long userId, Long[] roleIds) {
FILE: campus-framework/src/main/java/com/oddfar/campus/framework/web/exception/GlobalExceptionHandler.java
class GlobalExceptionHandler (line 23) | @RestControllerAdvice
method handleAccessDeniedException (line 30) | @ExceptionHandler(AccessDeniedException.class)
method handleHttpRequestMethodNotSupported (line 40) | @ExceptionHandler(HttpRequestMethodNotSupportedException.class)
method handleServiceException (line 51) | @ExceptionHandler(ServiceException.class)
method handleRuntimeException (line 61) | @ExceptionHandler(RuntimeException.class)
method handleException (line 71) | @ExceptionHandler(Exception.class)
method handleBindException (line 81) | @ExceptionHandler(BindException.class)
method handleMethodArgumentNotValidException (line 91) | @ExceptionHandler(MethodArgumentNotValidException.class)
FILE: campus-framework/src/main/java/com/oddfar/campus/framework/web/service/PermissionService.java
class PermissionService (line 32) | @Service("ss")
method hasPermi (line 62) | public boolean hasPermi(String permission) {
method resourceAuth (line 78) | public boolean resourceAuth() {
method getResourceCode (line 106) | private String getResourceCode(HandlerMethod handler) {
method hasResources (line 137) | private boolean hasResources(Set<String> resources, String resource) {
method lacksPermi (line 147) | public boolean lacksPermi(String permission) {
method hasAnyPermi (line 157) | public boolean hasAnyPermi(String permissions) {
method hasRole (line 181) | public boolean hasRole(String role) {
method lacksRole (line 204) | public boolean lacksRole(String role) {
method hasAnyRoles (line 214) | public boolean hasAnyRoles(String roles) {
method hasPermissions (line 237) | private boolean hasPermissions(Set<String> permissions, String permiss...
FILE: campus-framework/src/main/java/com/oddfar/campus/framework/web/service/SysLoginService.java
class SysLoginService (line 34) | @Component
method login (line 60) | public String login(String username, String password, String code, Str...
method validateCaptcha (line 106) | public void validateCaptcha(String username, String code, String uuid) {
method recordLoginInfo (line 125) | public void recordLoginInfo(Long userId) {
FILE: campus-framework/src/main/java/com/oddfar/campus/framework/web/service/SysPasswordService.java
class SysPasswordService (line 26) | @Component
method getCacheKey (line 43) | private String getCacheKey(String username) {
method validate (line 47) | public void validate(SysUserEntity user) {
method matches (line 75) | public boolean matches(SysUserEntity user, String rawPassword) {
method clearLoginRecordCache (line 79) | public void clearLoginRecordCache(String loginName) {
FILE: campus-framework/src/main/java/com/oddfar/campus/framework/web/service/SysPermissionService.java
class SysPermissionService (line 23) | @Component
method getRolePermission (line 45) | public Set<String> getRolePermission(SysUserEntity user) {
method getMenuPermission (line 62) | public Set<String> getMenuPermission(SysUserEntity user) {
method getMenuPermissionByRoleId (line 89) | public Set<String> getMenuPermissionByRoleId(Long roleID) {
method getResources (line 106) | public Set<String> getResources(SysUserEntity user) {
method resetLoginUserRoleCache (line 129) | public void resetLoginUserRoleCache(long roleId) {
method resetUserRoleAuthCache (line 143) | public void resetUserRoleAuthCache(long userId) {
FILE: campus-framework/src/main/java/com/oddfar/campus/framework/web/service/SysRegisterService.java
class SysRegisterService (line 24) | @Component
method register (line 38) | public String register(RegisterBody registerBody) {
method validateCaptcha (line 83) | public void validateCaptcha(String username, String code, String uuid) {
FILE: campus-framework/src/main/java/com/oddfar/campus/framework/web/service/TokenService.java
class TokenService (line 32) | @Component
method getLoginUser (line 60) | public LoginUser getLoginUser(HttpServletRequest request) {
method getLoginUserToken (line 74) | public LoginUserToken getLoginUserToken(HttpServletRequest request) {
method getLoginUserByUserId (line 99) | public LoginUser getLoginUserByUserId(long userId) {
method setLoginUser (line 115) | public void setLoginUser(LoginUser loginUser) {
method delLoginUser (line 124) | public void delLoginUser(String token) {
method createToken (line 137) | public String createToken(LoginUser loginUser) {
method verifyToken (line 157) | public void verifyToken(LoginUser loginUser) {
method refreshToken (line 170) | public void refreshToken(LoginUser loginUser) {
method refreshToken (line 181) | public void refreshToken(LoginUser loginUser, LoginUserToken loginUser...
method setUserAgent (line 197) | public void setUserAgent(LoginUserToken loginUserToken) {
method createToken (line 213) | private String createToken(Map<String, Object> claims) {
method parseToken (line 226) | private Claims parseToken(String token) {
method getUsernameFromToken (line 239) | public String getUsernameFromToken(String token) {
method getToken (line 250) | private String getToken(HttpServletRequest request) {
method getTokenKey (line 258) | private String getTokenKey(String uuid) {
method getLoginKey (line 262) | private String getLoginKey(Long userId) {
FILE: campus-framework/src/main/java/com/oddfar/campus/framework/web/service/UserDetailsServiceImpl.java
class UserDetailsServiceImpl (line 23) | @Service
method loadUserByUsername (line 36) | @Override
method createLoginUser (line 55) | public UserDetails createLoginUser(SysUserEntity user) {
FILE: campus-modular/src/main/java/com/oddfar/campus/CampusApplication.java
class CampusApplication (line 13) | @SpringBootApplication
method main (line 16) | public static void main(String[] args) {
FILE: campus-modular/src/main/java/com/oddfar/campus/business/api/PushPlusApi.java
class PushPlusApi (line 16) | public class PushPlusApi {
method sendNotice (line 19) | public static void sendNotice(IUser iUser, ILog operLog) {
method sendNotice (line 48) | public static TimerTask sendNotice(String token, String title, String ...
FILE: campus-modular/src/main/java/com/oddfar/campus/business/controller/IItemController.java
class IItemController (line 23) | @RestController
method list (line 35) | @GetMapping(value = "/list", name = "查询I茅台预约商品列列表")
method refreshItem (line 45) | @GetMapping(value = "/refresh", name = "刷新i茅台预约商品列表")
FILE: campus-modular/src/main/java/com/oddfar/campus/business/controller/ILogController.java
class ILogController (line 18) | @RestController
method list (line 25) | @PreAuthorize("@ss.resourceAuth()")
method remove (line 32) | @PreAuthorize("@ss.resourceAuth()")
method clean (line 38) | @PreAuthorize("@ss.resourceAuth()")
FILE: campus-modular/src/main/java/com/oddfar/campus/business/controller/IShopController.java
class IShopController (line 22) | @RestController
method list (line 33) | @GetMapping("/list")
method refreshShop (line 44) | @GetMapping(value = "/refresh", name = "刷新i茅台商品列表")
FILE: campus-modular/src/main/java/com/oddfar/campus/business/controller/IUserController.java
class IUserController (line 24) | @RestController
method list (line 38) | @GetMapping(value = "/list", name = "查询I茅台用户列表")
method sendCode (line 49) | @GetMapping(value = "/sendCode", name = "发送验证码")
method reservation (line 60) | @GetMapping(value = "/reservation", name = "预约")
method travelReward (line 78) | @GetMapping(value = "/travelReward", name = "旅行")
method login (line 93) | @GetMapping(value = "/login", name = "登录")
method getInfo (line 105) | @PreAuthorize("@ss.resourceAuth()")
method add (line 114) | @PreAuthorize("@ss.resourceAuth()")
method edit (line 133) | @PreAuthorize("@ss.resourceAuth()")
method remove (line 150) | @PreAuthorize("@ss.resourceAuth()")
FILE: campus-modular/src/main/java/com/oddfar/campus/business/controller/TestController.java
class TestController (line 17) | @RestController
method test1 (line 33) | @PreAuthorize("@ss.resourceAuth()")
method test2 (line 43) | @PreAuthorize("@ss.hasPermi('campus:test')")
method test3 (line 53) | @Anonymous
FILE: campus-modular/src/main/java/com/oddfar/campus/business/domain/IMTCacheConstants.java
type IMTCacheConstants (line 9) | public interface IMTCacheConstants {
FILE: campus-modular/src/main/java/com/oddfar/campus/business/domain/IMTItemInfo.java
class IMTItemInfo (line 10) | @Data
FILE: campus-modular/src/main/java/com/oddfar/campus/business/domain/IUserRequest.java
class IUserRequest (line 14) | @Data
method getParams (line 92) | public Map<String, Object> getParams() {
method getMinute (line 99) | public int getMinute() {
FILE: campus-modular/src/main/java/com/oddfar/campus/business/domain/MapPoint.java
class MapPoint (line 7) | @Data
FILE: campus-modular/src/main/java/com/oddfar/campus/business/entity/IItem.java
class IItem (line 17) | @Data
method IItem (line 51) | public IItem() {
method IItem (line 54) | public IItem(JSONObject item) {
FILE: campus-modular/src/main/java/com/oddfar/campus/business/entity/ILog.java
class ILog (line 23) | @Data
method getParams (line 67) | public Map<String, Object> getParams() {
FILE: campus-modular/src/main/java/com/oddfar/campus/business/entity/IShop.java
class IShop (line 20) | @Data
method IShop (line 89) | public IShop() {
method IShop (line 92) | public IShop(String iShopId, JSONObject jsonObject) {
method getParams (line 106) | public Map<String, Object> getParams() {
FILE: campus-modular/src/main/java/com/oddfar/campus/business/entity/IUser.java
class IUser (line 22) | @Data
method IUser (line 129) | public IUser() {
method IUser (line 133) | public IUser(Long mobile, JSONObject jsonObject) {
method IUser (line 151) | public IUser(Long mobile, String deviceId, JSONObject jsonObject) {
method getParams (line 170) | public Map<String, Object> getParams() {
method getMinute (line 177) | public int getMinute() {
FILE: campus-modular/src/main/java/com/oddfar/campus/business/mapper/IItemMapper.java
type IItemMapper (line 13) | public interface IItemMapper extends BaseMapperX<IItem> {
method truncateItem (line 15) | @Update("truncate table i_item")
FILE: campus-modular/src/main/java/com/oddfar/campus/business/mapper/ILogMapper.java
type ILogMapper (line 15) | public interface ILogMapper extends BaseMapperX<ILog> {
method selectPage (line 17) | default PageResult<ILog> selectPage(ILog iLog) {
method selectPage (line 28) | default PageResult<ILog> selectPage(ILog iLog, Long userId) {
method cleanLog (line 40) | @Select("truncate table i_log")
FILE: campus-modular/src/main/java/com/oddfar/campus/business/mapper/IShopMapper.java
type IShopMapper (line 16) | public interface IShopMapper extends BaseMapperX<IShop> {
method truncateShop (line 18) | @Update("truncate table i_shop")
method selectPage (line 21) | default PageResult<IShop> selectPage(IShop iShop) {
FILE: campus-modular/src/main/java/com/oddfar/campus/business/mapper/IUserMapper.java
type IUserMapper (line 17) | public interface IUserMapper extends BaseMapperX<IUser> {
method selectPage (line 18) | default PageResult<IUser> selectPage(IUser iUser) {
method selectPage (line 30) | default PageResult<IUser> selectPage(IUser iUser, Long userId) {
method selectReservationUser (line 43) | default List<IUser> selectReservationUser() {
method selectReservationUserByMinute (line 58) | default List<IUser> selectReservationUserByMinute(int minute) {
method updateUserMinuteBatch (line 69) | @Update("UPDATE i_user SET `minute` = (SELECT FLOOR(RAND() * 50 + 1)) ...
method updateUserMinuteEven (line 72) | @Update("SET @row_number = 0;\n" +
method deleteIUser (line 78) | int deleteIUser(Long[] iUserId);
FILE: campus-modular/src/main/java/com/oddfar/campus/business/service/IMTLogFactory.java
class IMTLogFactory (line 15) | public class IMTLogFactory {
method reservation (line 18) | public static void reservation(IUser iUser, String logContent) {
method recordOper (line 45) | public static TimerTask recordOper(final ILog operLog) {
FILE: campus-modular/src/main/java/com/oddfar/campus/business/service/IMTLogService.java
type IMTLogService (line 9) | public interface IMTLogService {
method page (line 11) | PageResult<ILog> page(ILog iLog);
method insertLog (line 18) | public int insertLog(ILog iLog);
method deleteLogByIds (line 26) | public int deleteLogByIds(Long[] operIds);
method cleanLog (line 31) | public void cleanLog();
FILE: campus-modular/src/main/java/com/oddfar/campus/business/service/IMTService.java
type IMTService (line 5) | public interface IMTService {
method getMTVersion (line 11) | String getMTVersion();
method refreshMTVersion (line 16) | void refreshMTVersion();
method sendCode (line 24) | Boolean sendCode(String mobile, String deviceId);
method login (line 34) | boolean login(String mobile, String code, String deviceId);
method reservation (line 39) | void reservation(IUser iUser);
method getEnergyAward (line 44) | String getEnergyAward(IUser iUser);
method getTravelReward (line 52) | void getTravelReward(IUser iUser);
method reservationBatch (line 63) | void reservationBatch();
method getTravelRewardBatch (line 68) | void getTravelRewardBatch();
method refreshAll (line 73) | void refreshAll();
method appointmentResults (line 78) | void appointmentResults();
FILE: campus-modular/src/main/java/com/oddfar/campus/business/service/IShopService.java
type IShopService (line 9) | public interface IShopService extends IService<IShop> {
method selectShopList (line 11) | List<IShop> selectShopList();
method refreshShop (line 16) | void refreshShop();
method getCurrentSessionId (line 21) | String getCurrentSessionId();
method refreshItem (line 26) | void refreshItem();
method selectByIShopId (line 39) | IShop selectByIShopId(String iShopId);
method getShopsByProvince (line 47) | List<IMTItemInfo> getShopsByProvince(String province, String itemId);
method getShopId (line 56) | String getShopId(int shopType, String itemId, String province, String ...
FILE: campus-modular/src/main/java/com/oddfar/campus/business/service/IUserService.java
type IUserService (line 9) | public interface IUserService {
method page (line 11) | PageResult<IUser> page(IUser iUser);
method insertIUser (line 20) | int insertIUser(Long mobile, String deviceId, JSONObject body);
method selectReservationUser (line 27) | List<IUser> selectReservationUser();
method selectReservationUserByMinute (line 34) | List<IUser> selectReservationUserByMinute(int minute);
method insertIUser (line 42) | int insertIUser(IUser iUser);
method updateIUser (line 50) | int updateIUser(IUser iUser);
method updateUserMinuteBatch (line 57) | void updateUserMinuteBatch();
method deleteIUser (line 65) | int deleteIUser(Long[] iUserId);
FILE: campus-modular/src/main/java/com/oddfar/campus/business/service/impl/IMTLogServiceImpl.java
class IMTLogServiceImpl (line 13) | @Service
method page (line 19) | @Override
method deleteLogByIds (line 29) | @Override
method cleanLog (line 34) | @Override
method insertLog (line 39) | @Override
FILE: campus-modular/src/main/java/com/oddfar/campus/business/service/impl/IMTServiceImpl.java
class IMTServiceImpl (line 46) | @Service
method init (line 70) | @PostConstruct
method getMTVersion (line 82) | @Override
method refreshMTVersion (line 102) | @Override
method sendCode (line 108) | @Override
method login (line 141) | @Override
method reservation (line 181) | @Override
method getEnergyAwardDelay (line 224) | public void getEnergyAwardDelay(IUser iUser) {
method receiveReward (line 247) | public void receiveReward(IUser iUser) {
method shareReward (line 267) | public void shareReward(IUser iUser) {
method getEnergyAward (line 289) | @Override
method getTravelReward (line 312) | @Override
method travelReward (line 332) | public String travelReward(IUser iUser) {
method startTravel (line 366) | public String startTravel(IUser iUser) {
method getXmTravelReward (line 387) | public Double getXmTravelReward(IUser iUser) {
method getUserIsolationPageData (line 410) | public Map<String, Integer> getUserIsolationPageData(IUser iUser) {
method getExchangeRateInfo (line 481) | public int getExchangeRateInfo(IUser iUser) {
method reservationBatch (line 501) | @Async
method getTravelRewardBatch (line 521) | @Async
method refreshAll (line 540) | @Override
method appointmentResults (line 547) | @Override
method reservation (line 586) | public JSONObject reservation(IUser iUser, String itemId, String shopI...
method AesEncrypt (line 634) | public static String AesEncrypt(String params) {
method AesDecrypt (line 645) | public static String AesDecrypt(String params) {
method signature (line 657) | private static String signature(String content, long time) {
FILE: campus-modular/src/main/java/com/oddfar/campus/business/service/impl/IShopServiceImpl.java
class IShopServiceImpl (line 35) | @Service
method selectShopList (line 48) | @Override
method refreshShop (line 66) | @Override
method getCurrentSessionId (line 95) | @Override
method refreshItem (line 128) | @Override
method selectByIShopId (line 134) | @Override
method getShopsByProvince (line 144) | @Override
method reGetShopsByProvince (line 158) | public List<IMTItemInfo> reGetShopsByProvince(String province, String ...
method getShopId (line 205) | @Override
method getMaxInventoryShopId (line 250) | public String getMaxInventoryShopId(List<IMTItemInfo> list1, List<ISho...
method getMinDistanceShopId (line 275) | public String getMinDistanceShopId(List<IShop> list2, String province,...
method getDisdance (line 293) | public static Double getDisdance(MapPoint point1, MapPoint point2) {
FILE: campus-modular/src/main/java/com/oddfar/campus/business/service/impl/IUserServiceImpl.java
class IUserServiceImpl (line 19) | @Service
method page (line 24) | @Override
method insertIUser (line 33) | @Override
method selectReservationUser (line 57) | @Override
method selectReservationUserByMinute (line 63) | @Override
method insertIUser (line 68) | @Override
method updateIUser (line 83) | @Override
method updateUserMinuteBatch (line 91) | @Override
method deleteIUser (line 102) | @Override
FILE: campus-modular/src/main/java/com/oddfar/campus/business/task/CampusIMTTask.java
class CampusIMTTask (line 17) | @Configuration
method updateUserMinuteBatch (line 31) | @Async
method getTravelRewardBatch (line 41) | @Async
method reservationBatchTask (line 51) | @Async
method refresh (line 59) | @Async
method appointmentResults (line 75) | @Async
FILE: doc/sql/campus_imaotai-1.0.5.sql
type `i_item` (line 12) | CREATE TABLE `i_item` (
type `i_log` (line 31) | CREATE TABLE `i_log` (
type `i_shop` (line 46) | CREATE TABLE `i_shop` (
type `i_user` (line 71) | CREATE TABLE `i_user` (
type `sys_config` (line 104) | CREATE TABLE `sys_config` (
type `sys_dict_data` (line 147) | CREATE TABLE `sys_dict_data` (
type `sys_dict_type` (line 189) | CREATE TABLE `sys_dict_type` (
type `sys_log_login` (line 220) | CREATE TABLE `sys_log_login` (
type `sys_log_oper` (line 245) | CREATE TABLE `sys_log_oper` (
type `sys_menu` (line 273) | CREATE TABLE `sys_menu` (
type `sys_resource` (line 397) | CREATE TABLE `sys_resource` (
type `sys_role` (line 428) | CREATE TABLE `sys_role` (
type `sys_role_menu` (line 457) | CREATE TABLE `sys_role_menu` (
type `sys_role_resource` (line 494) | CREATE TABLE `sys_role_resource` (
type `sys_user` (line 520) | CREATE TABLE `sys_user` (
type `sys_user_role` (line 555) | CREATE TABLE `sys_user_role` (
FILE: vue_campus_admin/src/api/imt/item.js
function listItem (line 4) | function listItem() {
function refreshItem (line 14) | function refreshItem(itemId) {
FILE: vue_campus_admin/src/api/imt/log.js
function list (line 4) | function list(query) {
function delOperlog (line 13) | function delOperlog(operId) {
function cleanOperlog (line 21) | function cleanOperlog() {
FILE: vue_campus_admin/src/api/imt/shop.js
function listShop (line 4) | function listShop(query) {
function refreshShop (line 13) | function refreshShop() {
FILE: vue_campus_admin/src/api/imt/user.js
function reservation (line 5) | function reservation(mobile) {
function travelReward (line 13) | function travelReward(mobile) {
function sendCode (line 23) | function sendCode(mobile, deviceId) {
function login (line 32) | function login(mobile, code, deviceId) {
function listUser (line 41) | function listUser(query) {
function getUser (line 50) | function getUser(mobile) {
function addUser (line 58) | function addUser(data) {
function updateUser (line 67) | function updateUser(data) {
function delUser (line 76) | function delUser(mobile) {
FILE: vue_campus_admin/src/api/login.js
function login (line 4) | function login(username, password, code, uuid) {
function register (line 22) | function register(data) {
function getInfo (line 34) | function getInfo() {
function logout (line 42) | function logout() {
function getCodeImg (line 50) | function getCodeImg() {
FILE: vue_campus_admin/src/api/monitor/cache.js
function getCache (line 4) | function getCache() {
function listCacheName (line 12) | function listCacheName() {
function listCacheKey (line 20) | function listCacheKey(cacheName) {
function getCacheValue (line 28) | function getCacheValue(cacheName, cacheKey) {
function clearCacheName (line 36) | function clearCacheName(cacheName) {
function clearCacheKey (line 44) | function clearCacheKey(cacheKey) {
function clearCacheAll (line 52) | function clearCacheAll() {
FILE: vue_campus_admin/src/api/monitor/job.js
function listJob (line 4) | function listJob(query) {
function getJob (line 13) | function getJob(jobId) {
function addJob (line 21) | function addJob(data) {
function updateJob (line 30) | function updateJob(data) {
function delJob (line 39) | function delJob(jobId) {
function changeJobStatus (line 47) | function changeJobStatus(jobId, status) {
function runJob (line 61) | function runJob(jobId, jobGroup) {
FILE: vue_campus_admin/src/api/monitor/jobLog.js
function listJobLog (line 4) | function listJobLog(query) {
function delJobLog (line 13) | function delJobLog(jobLogId) {
function cleanJobLog (line 21) | function cleanJobLog() {
FILE: vue_campus_admin/src/api/monitor/logininfor.js
function list (line 4) | function list(query) {
function delLogininfor (line 13) | function delLogininfor(infoId) {
function unlockLogininfor (line 21) | function unlockLogininfor(userName) {
function cleanLogininfor (line 29) | function cleanLogininfor() {
FILE: vue_campus_admin/src/api/monitor/online.js
function list (line 4) | function list(query) {
function forceLogout (line 13) | function forceLogout(tokenId) {
FILE: vue_campus_admin/src/api/monitor/operlog.js
function list (line 4) | function list(query) {
function delOperlog (line 13) | function delOperlog(operId) {
function cleanOperlog (line 21) | function cleanOperlog() {
FILE: vue_campus_admin/src/api/monitor/server.js
function getServer (line 4) | function getServer() {
FILE: vue_campus_admin/src/api/system/config.js
function listConfig (line 4) | function listConfig(query) {
function getConfig (line 13) | function getConfig(configId) {
function getConfigKey (line 21) | function getConfigKey(configKey) {
function addConfig (line 29) | function addConfig(data) {
function updateConfig (line 38) | function updateConfig(data) {
function delConfig (line 47) | function delConfig(configId) {
function refreshCache (line 55) | function refreshCache() {
FILE: vue_campus_admin/src/api/system/dept.js
function listDept (line 4) | function listDept(query) {
function listDeptExcludeChild (line 13) | function listDeptExcludeChild(deptId) {
function getDept (line 21) | function getDept(deptId) {
function addDept (line 29) | function addDept(data) {
function updateDept (line 38) | function updateDept(data) {
function delDept (line 47) | function delDept(deptId) {
FILE: vue_campus_admin/src/api/system/dict/data.js
function listData (line 4) | function listData(query) {
function getData (line 13) | function getData(dictCode) {
function getDicts (line 21) | function getDicts(dictType) {
function addData (line 29) | function addData(data) {
function updateData (line 38) | function updateData(data) {
function delData (line 47) | function delData(dictCode) {
FILE: vue_campus_admin/src/api/system/dict/type.js
function listType (line 4) | function listType(query) {
function getType (line 13) | function getType(dictId) {
function addType (line 21) | function addType(data) {
function updateType (line 30) | function updateType(data) {
function delType (line 39) | function delType(dictId) {
function refreshCache (line 47) | function refreshCache() {
function optionselect (line 55) | function optionselect() {
FILE: vue_campus_admin/src/api/system/index.js
function getVersion (line 4) | function getVersion() {
FILE: vue_campus_admin/src/api/system/menu.js
function listMenu (line 4) | function listMenu(query) {
function getMenu (line 13) | function getMenu(menuId) {
function treeselect (line 21) | function treeselect() {
function roleMenuTreeselect (line 29) | function roleMenuTreeselect(roleId) {
function addMenu (line 37) | function addMenu(data) {
function updateMenu (line 46) | function updateMenu(data) {
function delMenu (line 55) | function delMenu(menuId) {
FILE: vue_campus_admin/src/api/system/notice.js
function listNotice (line 4) | function listNotice(query) {
function getNotice (line 13) | function getNotice(noticeId) {
function addNotice (line 21) | function addNotice(data) {
function updateNotice (line 30) | function updateNotice(data) {
function delNotice (line 39) | function delNotice(noticeId) {
FILE: vue_campus_admin/src/api/system/post.js
function listPost (line 4) | function listPost(query) {
function getPost (line 13) | function getPost(postId) {
function addPost (line 21) | function addPost(data) {
function updatePost (line 30) | function updatePost(data) {
function delPost (line 39) | function delPost(postId) {
FILE: vue_campus_admin/src/api/system/resource.js
function roleResourceTreeselect (line 5) | function roleResourceTreeselect(roleId) {
function editRoleResource (line 12) | function editRoleResource(data) {
FILE: vue_campus_admin/src/api/system/role.js
function listRole (line 4) | function listRole(query) {
function getRole (line 13) | function getRole(roleId) {
function addRole (line 21) | function addRole(data) {
function updateRole (line 30) | function updateRole(data) {
function dataScope (line 39) | function dataScope(data) {
function changeRoleStatus (line 48) | function changeRoleStatus(roleId, status) {
function delRole (line 61) | function delRole(roleId) {
function allocatedUserList (line 69) | function allocatedUserList(query) {
function unallocatedUserList (line 78) | function unallocatedUserList(query) {
function authUserCancel (line 87) | function authUserCancel(data) {
function authUserCancelAll (line 96) | function authUserCancelAll(data) {
function authUserSelectAll (line 105) | function authUserSelectAll(data) {
function deptTreeSelect (line 114) | function deptTreeSelect(roleId) {
FILE: vue_campus_admin/src/api/system/user.js
function listUser (line 5) | function listUser(query) {
function getUser (line 14) | function getUser(userId) {
function addUser (line 22) | function addUser(data) {
function updateUser (line 31) | function updateUser(data) {
function delUser (line 40) | function delUser(userId) {
function resetUserPwd (line 48) | function resetUserPwd(userId, password) {
function changeUserStatus (line 61) | function changeUserStatus(userId, status) {
function getUserProfile (line 74) | function getUserProfile() {
function updateUserProfile (line 82) | function updateUserProfile(data) {
function updateUserPwd (line 91) | function updateUserPwd(oldPassword, newPassword) {
function uploadAvatar (line 104) | function uploadAvatar(data) {
function getAuthRole (line 113) | function getAuthRole(userId) {
function updateAuthRole (line 121) | function updateAuthRole(data) {
FILE: vue_campus_admin/src/api/tool/gen.js
function listTable (line 4) | function listTable(query) {
function listDbTable (line 12) | function listDbTable(query) {
function getGenTable (line 21) | function getGenTable(tableId) {
function updateGenTable (line 29) | function updateGenTable(data) {
function importTable (line 38) | function importTable(data) {
function previewTable (line 47) | function previewTable(tableId) {
function delTable (line 55) | function delTable(tableId) {
function genCode (line 63) | function genCode(tableName) {
function synchDb (line 71) | function synchDb(tableName) {
FILE: vue_campus_admin/src/components/DictData/index.js
function searchDictByKey (line 6) | function searchDictByKey(dict, key) {
function install (line 21) | function install() {
FILE: vue_campus_admin/src/directive/dialog/drag.js
method bind (line 7) | bind(el, binding, vnode, oldVnode) {
FILE: vue_campus_admin/src/directive/dialog/dragHeight.js
method bind (line 7) | bind(el) {
FILE: vue_campus_admin/src/directive/dialog/dragWidth.js
method bind (line 7) | bind(el) {
FILE: vue_campus_admin/src/directive/module/clipboard.js
method bind (line 8) | bind(el, binding, vnode) {
method update (line 33) | update(el, binding) {
method unbind (line 43) | unbind(el, binding) {
FILE: vue_campus_admin/src/directive/permission/hasPermi.js
method inserted (line 9) | inserted(el, binding, vnode) {
FILE: vue_campus_admin/src/directive/permission/hasRole.js
method inserted (line 9) | inserted(el, binding, vnode) {
FILE: vue_campus_admin/src/layout/components/Sidebar/FixiOSBug.js
method device (line 3) | device() {
method mounted (line 7) | mounted() {
method fixBugIniOS (line 12) | fixBugIniOS() {
FILE: vue_campus_admin/src/layout/mixin/ResizeHandler.js
constant WIDTH (line 4) | const WIDTH = 992 // refer to Bootstrap's responsive design
method $route (line 8) | $route(route) {
method beforeMount (line 14) | beforeMount() {
method beforeDestroy (line 17) | beforeDestroy() {
method mounted (line 20) | mounted() {
method $_isMobile (line 30) | $_isMobile() {
method $_resizeHandler (line 34) | $_resizeHandler() {
FILE: vue_campus_admin/src/plugins/auth.js
function authPermission (line 3) | function authPermission(permission) {
function authRole (line 15) | function authRole(role) {
method hasPermi (line 29) | hasPermi(permission) {
method hasPermiOr (line 33) | hasPermiOr(permissions) {
method hasPermiAnd (line 39) | hasPermiAnd(permissions) {
method hasRole (line 45) | hasRole(role) {
method hasRoleOr (line 49) | hasRoleOr(roles) {
method hasRoleAnd (line 55) | hasRoleAnd(roles) {
FILE: vue_campus_admin/src/plugins/cache.js
method set (line 2) | set (key, value) {
method get (line 10) | get (key) {
method setJSON (line 19) | setJSON (key, jsonValue) {
method getJSON (line 24) | getJSON (key) {
method remove (line 30) | remove (key) {
method set (line 35) | set (key, value) {
method get (line 43) | get (key) {
method setJSON (line 52) | setJSON (key, jsonValue) {
method getJSON (line 57) | getJSON (key) {
method remove (line 63) | remove (key) {
FILE: vue_campus_admin/src/plugins/download.js
method name (line 11) | name(name, isDelete = true) {
method resource (line 28) | resource(resource) {
method zip (line 45) | zip(url, name) {
method saveAs (line 62) | saveAs(text, name, opts) {
method printErrMsg (line 65) | async printErrMsg(data) {
FILE: vue_campus_admin/src/plugins/index.js
method install (line 8) | install(Vue) {
FILE: vue_campus_admin/src/plugins/modal.js
method msg (line 7) | msg(content) {
method msgError (line 11) | msgError(content) {
method msgSuccess (line 15) | msgSuccess(content) {
method msgWarning (line 19) | msgWarning(content) {
method alert (line 23) | alert(content) {
method alertError (line 27) | alertError(content) {
method alertSuccess (line 31) | alertSuccess(content) {
method alertWarning (line 35) | alertWarning(content) {
method notify (line 39) | notify(content) {
method notifyError (line 43) | notifyError(content) {
method notifySuccess (line 47) | notifySuccess(content) {
method notifyWarning (line 51) | notifyWarning(content) {
method confirm (line 55) | confirm(content) {
method prompt (line 63) | prompt(content) {
method loading (line 71) | loading(content) {
method closeLoading (line 80) | closeLoading() {
FILE: vue_campus_admin/src/plugins/tab.js
method refreshPage (line 6) | refreshPage(obj) {
method closeOpenPage (line 26) | closeOpenPage(obj) {
method closePage (line 33) | closePage(obj) {
method closeAllPage (line 42) | closeAllPage() {
method closeLeftPage (line 46) | closeLeftPage(obj) {
method closeRightPage (line 50) | closeRightPage(obj) {
method closeOtherPage (line 54) | closeOtherPage(obj) {
method openPage (line 58) | openPage(title, url, params) {
method updatePage (line 64) | updatePage(obj) {
FILE: vue_campus_admin/src/store/modules/app.js
method toggleSideBar (line 44) | toggleSideBar({ commit }) {
method closeSideBar (line 47) | closeSideBar({ commit }, { withoutAnimation }) {
method toggleDevice (line 50) | toggleDevice({ commit }, device) {
method setSize (line 53) | setSize({ commit }, size) {
method toggleSideBarHide (line 56) | toggleSideBarHide({ commit }, status) {
FILE: vue_campus_admin/src/store/modules/dict.js
method setDict (line 31) | setDict({ commit }, data) {
method removeDict (line 35) | removeDict({ commit }, key) {
method cleanDict (line 39) | cleanDict({ commit }) {
FILE: vue_campus_admin/src/store/modules/permission.js
method GenerateRoutes (line 33) | GenerateRoutes({ commit }) {
function filterAsyncRouter (line 56) | function filterAsyncRouter(asyncRouterMap, lastRouter = false, type = fa...
function filterChildren (line 83) | function filterChildren(childrenMap, lastRouter = false) {
function filterDynamicRoutes (line 108) | function filterDynamicRoutes(routes) {
FILE: vue_campus_admin/src/store/modules/settings.js
method changeSetting (line 27) | changeSetting({ commit }, data) {
method setTitle (line 31) | setTitle({ commit }, title) {
FILE: vue_campus_admin/src/store/modules/tagsView.js
method addView (line 121) | addView({ dispatch }, view) {
method addIframeView (line 125) | addIframeView({ commit }, view) {
method addVisitedView (line 128) | addVisitedView({ commit }, view) {
method addCachedView (line 131) | addCachedView({ commit }, view) {
method delView (line 134) | delView({ dispatch, state }, view) {
method delVisitedView (line 144) | delVisitedView({ commit, state }, view) {
method delIframeView (line 150) | delIframeView({ commit, state }, view) {
method delCachedView (line 156) | delCachedView({ commit, state }, view) {
method delOthersViews (line 162) | delOthersViews({ dispatch, state }, view) {
method delOthersVisitedViews (line 172) | delOthersVisitedViews({ commit, state }, view) {
method delOthersCachedViews (line 178) | delOthersCachedViews({ commit, state }, view) {
method delAllViews (line 184) | delAllViews({ dispatch, state }, view) {
method delAllVisitedViews (line 194) | delAllVisitedViews({ commit, state }) {
method delAllCachedViews (line 200) | delAllCachedViews({ commit, state }) {
method updateVisitedView (line 206) | updateVisitedView({ commit }, view) {
method delRightTags (line 209) | delRightTags({ commit }, view) {
method delLeftTags (line 215) | delLeftTags({ commit }, view) {
FILE: vue_campus_admin/src/store/modules/user.js
method Login (line 33) | Login({ commit }, userInfo) {
method GetInfo (line 50) | GetInfo({ commit, state }) {
method LogOut (line 75) | LogOut({ commit, state }) {
method FedLogOut (line 90) | FedLogOut({ commit }) {
FILE: vue_campus_admin/src/utils/auth.js
function getToken (line 5) | function getToken() {
function setToken (line 9) | function setToken(token) {
function removeToken (line 13) | function removeToken() {
FILE: vue_campus_admin/src/utils/crypto.js
method set (line 9) | set(word, keyStr) {
method get (line 23) | get(word, keyStr) {
FILE: vue_campus_admin/src/utils/dict/Dict.js
constant DEFAULT_DICT_OPTIONS (line 6) | const DEFAULT_DICT_OPTIONS = {
class Dict (line 16) | class Dict {
method constructor (line 17) | constructor() {
method init (line 23) | init(options) {
method reloadDict (line 49) | reloadDict(type) {
function loadDict (line 64) | function loadDict(dict, dictMeta) {
FILE: vue_campus_admin/src/utils/dict/DictConverter.js
function determineDictField (line 15) | function determineDictField(dict, ...fields) {
FILE: vue_campus_admin/src/utils/dict/DictData.js
class DictData (line 7) | class DictData {
method constructor (line 8) | constructor(label, value, raw) {
FILE: vue_campus_admin/src/utils/dict/DictMeta.js
class DictMeta (line 11) | class DictMeta {
method constructor (line 12) | constructor(options) {
FILE: vue_campus_admin/src/utils/dict/DictOptions.js
function responseConverter (line 38) | function responseConverter(response, dictMeta) {
function mergeOptions (line 47) | function mergeOptions(src) {
FILE: vue_campus_admin/src/utils/dict/index.js
method data (line 7) | data() {
method created (line 17) | created() {
FILE: vue_campus_admin/src/utils/generator/css.js
function addCss (line 6) | function addCss(cssList, el) {
function makeUpCss (line 14) | function makeUpCss(conf) {
FILE: vue_campus_admin/src/utils/generator/html.js
function dialogWrapper (line 7) | function dialogWrapper(str) {
function vueTemplate (line 17) | function vueTemplate(str) {
function vueScript (line 25) | function vueScript(str) {
function cssStyle (line 31) | function cssStyle(cssStr) {
function buildFormTemplate (line 37) | function buildFormTemplate(conf, child, type) {
function buildFromBtns (line 55) | function buildFromBtns(conf, type) {
function colWrapper (line 72) | function colWrapper(element, str) {
method colFormItem (line 82) | colFormItem(element) {
method rowFormItem (line 95) | rowFormItem(element) {
function attrBuilder (line 277) | function attrBuilder(el) {
function buildElButtonChild (line 288) | function buildElButtonChild(conf) {
function buildElInputChild (line 297) | function buildElInputChild(conf) {
function buildElSelectChild (line 308) | function buildElSelectChild(conf) {
function buildElRadioGroupChild (line 316) | function buildElRadioGroupChild(conf) {
function buildElCheckboxGroupChild (line 326) | function buildElCheckboxGroupChild(conf) {
function buildElUploadChild (line 336) | function buildElUploadChild(conf) {
function makeUpHtml (line 344) | function makeUpHtml(conf, type) {
FILE: vue_campus_admin/src/utils/generator/js.js
function makeUpJs (line 17) | function makeUpJs(conf, type) {
function buildAttributes (line 44) | function buildAttributes(el, dataList, ruleList, optionsList, methodList...
function mixinMethod (line 79) | function mixinMethod(type) {
function buildData (line 120) | function buildData(conf, dataList) {
function buildRules (line 131) | function buildRules(conf, ruleList) {
function buildOptions (line 152) | function buildOptions(conf, optionsList) {
function buildProps (line 159) | function buildProps(conf, propsList) {
function buildBeforeUpload (line 169) | function buildBeforeUpload(conf) {
function buildSubmitUpload (line 194) | function buildSubmitUpload(conf) {
function buildOptionMethod (line 201) | function buildOptionMethod(methodName, model, methodList) {
function buildexport (line 209) | function buildexport(conf, type, data, rules, selectOptions, uploadVar, ...
FILE: vue_campus_admin/src/utils/generator/render.js
function vModel (line 20) | function vModel(self, dataObject, defaultValue) {
method default (line 30) | default(h, conf, key) {
method prepend (line 35) | prepend(h, conf, key) {
method append (line 38) | append(h, conf, key) {
method options (line 43) | options(h, conf, key) {
method options (line 52) | options(h, conf, key) {
method options (line 62) | options(h, conf, key) {
method render (line 91) | render(h) {
FILE: vue_campus_admin/src/utils/index.js
function formatDate (line 6) | function formatDate(cellValue) {
function formatTime (line 23) | function formatTime(time, option) {
function getQueryObject (line 65) | function getQueryObject(url) {
function byteLength (line 84) | function byteLength(str) {
function cleanArray (line 100) | function cleanArray(actual) {
function param (line 114) | function param(json) {
function param2Obj (line 128) | function param2Obj(url) {
function html2Text (line 150) | function html2Text(val) {
function objectMerge (line 162) | function objectMerge(target, source) {
function toggleClass (line 184) | function toggleClass(element, className) {
function getTime (line 204) | function getTime(type) {
function debounce (line 218) | function debounce(func, wait, immediate) {
function deepClone (line 260) | function deepClone(source) {
function uniqueArr (line 279) | function uniqueArr(arr) {
function createUniqueString (line 286) | function createUniqueString() {
function hasClass (line 298) | function hasClass(ele, cls) {
function addClass (line 307) | function addClass(ele, cls) {
function removeClass (line 316) | function removeClass(ele, cls) {
function makeMap (line 323) | function makeMap(str, expectsLowerCase) {
function titleCase (line 378) | function titleCase(str) {
function camelCase (line 383) | function camelCase(str) {
function isNumberStr (line 387) | function isNumberStr(str) {
FILE: vue_campus_admin/src/utils/jsencrypt.js
function encrypt (line 18) | function encrypt(txt) {
function decrypt (line 25) | function decrypt(txt) {
FILE: vue_campus_admin/src/utils/permission.js
function checkPermi (line 8) | function checkPermi(value) {
function checkRole (line 33) | function checkRole(value) {
FILE: vue_campus_admin/src/utils/request.js
function download (line 133) | function download(url, params, filename, config) {
FILE: vue_campus_admin/src/utils/ruoyi.js
function parseTime (line 9) | function parseTime(time, pattern) {
function resetForm (line 50) | function resetForm(refName) {
function addDateRange (line 57) | function addDateRange(params, dateRange, propName) {
function selectDictLabel (line 72) | function selectDictLabel(datas, value) {
function selectDictLabels (line 90) | function selectDictLabels(datas, value, separator) {
function sprintf (line 113) | function sprintf(str) {
function parseStrEmpty (line 127) | function parseStrEmpty(str) {
function mergeRecursive (line 135) | function mergeRecursive(source, target) {
function handleTree (line 157) | function handleTree(data, id, parentId, children) {
function tansParams (line 205) | function tansParams(params) {
function blobValidate (line 228) | async function blobValidate(data) {
FILE: vue_campus_admin/src/utils/scroll-to.js
function move (line 19) | function move(amount) {
function position (line 25) | function position() {
function scrollTo (line 34) | function scrollTo(to, duration, callback) {
FILE: vue_campus_admin/src/utils/validate.js
function isExternal (line 5) | function isExternal(path) {
function validUsername (line 13) | function validUsername(str) {
function validURL (line 22) | function validURL(url) {
function validLowerCase (line 31) | function validLowerCase(str) {
function validUpperCase (line 40) | function validUpperCase(str) {
function validAlphabets (line 49) | function validAlphabets(str) {
function validEmail (line 58) | function validEmail(email) {
function isString (line 67) | function isString(str) {
function isArray (line 78) | function isArray(arg) {
FILE: vue_campus_admin/src/views/dashboard/mixins/resize.js
method data (line 4) | data() {
method mounted (line 10) | mounted() {
method activated (line 13) | activated() {
method beforeDestroy (line 22) | beforeDestroy() {
method deactivated (line 25) | deactivated() {
method $_sidebarResizeHandler (line 31) | $_sidebarResizeHandler(e) {
method initListener (line 36) | initListener() {
method destroyListener (line 45) | destroyListener() {
method resize (line 51) | resize() {
FILE: vue_campus_admin/vue.config.js
function resolve (line 4) | function resolve(dir) {
method chainWebpack (line 72) | chainWebpack(config) {
Condensed preview — 448 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (1,426K chars).
[
{
"path": ".gitattributes",
"chars": 0,
"preview": ""
},
{
"path": ".github/ISSUE_TEMPLATE/bug_report.yaml",
"chars": 2917,
"preview": "name: 报告bug\ndescription: 创建一个报告,请详细描述,来帮助我们改进\ntitle: '[bug]: '\nlabels: [ \"bug\" ]\n\nbody:\n # User's README and agreement\n"
},
{
"path": ".github/ISSUE_TEMPLATE/feature_request.md",
"chars": 343,
"preview": "---\nname: ⭐ 功能请求 —— Feature Request\nabout: 使用简练详细的语言描述希望加入的新功能\ntitle: '[Feature] 请填写标题'\nlabels: enhancement\nassignees: '"
},
{
"path": ".github/workflows/api.yml",
"chars": 1867,
"preview": "name: api\non:\n # 手动构建\n workflow_dispatch: \n push:\n branches: [ \"master\",\"dev\" ]\n tags: [ 'v*','V*' ]\n\nenv:\n RE"
},
{
"path": ".github/workflows/release.yml",
"chars": 2855,
"preview": "name: release\non:\n # 手动构建\n workflow_dispatch: \n inputs:\n version_name:\n description: '版本号'\n "
},
{
"path": ".github/workflows/web.yml",
"chars": 2342,
"preview": "name: web\non:\n # 手动构建\n workflow_dispatch:\n push:\n branches: [ \"master\",\"dev\" ]\n tags: [ 'v*','V*' ]\n\nenv:\n REG"
},
{
"path": ".gitignore",
"chars": 462,
"preview": "HELP.md\n\n*.log\n\n# Build Tools\ntarget/\n!.mvn/wrapper/maven-wrapper.jar\n!**/src/main/**/target/\n!**/src/test/**/target/\n\n#"
},
{
"path": ".run/campus-server.run.xml",
"chars": 508,
"preview": "<component name=\"ProjectRunConfigurationManager\">\n <configuration default=\"false\" name=\"campus-server\" type=\"docker-dep"
},
{
"path": "LICENSE",
"chars": 11357,
"preview": " Apache License\n Version 2.0, January 2004\n "
},
{
"path": "README.md",
"chars": 3539,
"preview": "<p align=\"center\"><a href=\"https://oddfar.com/\" target=\"_blank\" rel=\"noopener noreferrer\"><img width=\"180\" src=\"https://"
},
{
"path": "campus-admin/pom.xml",
"chars": 1249,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n xmlns:xsi=\"http://www"
},
{
"path": "campus-admin/src/main/java/com/oddfar/campus/admin/config/CaptchaConfig.java",
"chars": 3800,
"preview": "package com.oddfar.campus.admin.config;\n\nimport com.google.code.kaptcha.impl.DefaultKaptcha;\nimport com.google.code.kapt"
},
{
"path": "campus-admin/src/main/java/com/oddfar/campus/admin/config/SwaggerConfig.java",
"chars": 3650,
"preview": "package com.oddfar.campus.admin.config;\n\n\nimport io.swagger.models.auth.In;\nimport io.swagger.v3.oas.annotations.Operati"
},
{
"path": "campus-admin/src/main/java/com/oddfar/campus/admin/controller/monitor/SysLogininforController.java",
"chars": 2074,
"preview": "package com.oddfar.campus.admin.controller.monitor;\n\nimport com.oddfar.campus.common.annotation.ApiResource;\nimport com."
},
{
"path": "campus-admin/src/main/java/com/oddfar/campus/admin/controller/monitor/SysOperlogController.java",
"chars": 1677,
"preview": "package com.oddfar.campus.admin.controller.monitor;\n\nimport com.oddfar.campus.common.annotation.ApiResource;\nimport com."
},
{
"path": "campus-admin/src/main/java/com/oddfar/campus/admin/controller/system/CaptchaController.java",
"chars": 2988,
"preview": "package com.oddfar.campus.admin.controller.system;\n\nimport cn.hutool.core.codec.Base64;\nimport com.google.code.kaptcha.P"
},
{
"path": "campus-admin/src/main/java/com/oddfar/campus/admin/controller/system/SysApiResourceController.java",
"chars": 1739,
"preview": "package com.oddfar.campus.admin.controller.system;\n\nimport com.oddfar.campus.common.annotation.ApiResource;\nimport com.o"
},
{
"path": "campus-admin/src/main/java/com/oddfar/campus/admin/controller/system/SysConfigController.java",
"chars": 2881,
"preview": "package com.oddfar.campus.admin.controller.system;\n\nimport com.oddfar.campus.common.annotation.ApiResource;\nimport com.o"
},
{
"path": "campus-admin/src/main/java/com/oddfar/campus/admin/controller/system/SysDictDataController.java",
"chars": 2883,
"preview": "package com.oddfar.campus.admin.controller.system;\n\nimport com.oddfar.campus.common.annotation.Anonymous;\nimport com.odd"
},
{
"path": "campus-admin/src/main/java/com/oddfar/campus/admin/controller/system/SysDictTypeController.java",
"chars": 3004,
"preview": "package com.oddfar.campus.admin.controller.system;\n\nimport com.oddfar.campus.common.annotation.ApiResource;\nimport com.o"
},
{
"path": "campus-admin/src/main/java/com/oddfar/campus/admin/controller/system/SysIndexController.java",
"chars": 1264,
"preview": "package com.oddfar.campus.admin.controller.system;\n\nimport com.oddfar.campus.common.config.CampusConfig;\nimport com.oddf"
},
{
"path": "campus-admin/src/main/java/com/oddfar/campus/admin/controller/system/SysLoginController.java",
"chars": 2469,
"preview": "package com.oddfar.campus.admin.controller.system;\n\nimport com.oddfar.campus.common.annotation.ApiResource;\nimport com.o"
},
{
"path": "campus-admin/src/main/java/com/oddfar/campus/admin/controller/system/SysMenuController.java",
"chars": 4041,
"preview": "package com.oddfar.campus.admin.controller.system;\n\nimport com.oddfar.campus.common.annotation.ApiResource;\nimport com.o"
},
{
"path": "campus-admin/src/main/java/com/oddfar/campus/admin/controller/system/SysProfileController.java",
"chars": 4537,
"preview": "package com.oddfar.campus.admin.controller.system;\n\nimport com.oddfar.campus.common.annotation.ApiResource;\nimport com.o"
},
{
"path": "campus-admin/src/main/java/com/oddfar/campus/admin/controller/system/SysRegisterController.java",
"chars": 1940,
"preview": "package com.oddfar.campus.admin.controller.system;\n\nimport com.oddfar.campus.common.annotation.Anonymous;\nimport com.odd"
},
{
"path": "campus-admin/src/main/java/com/oddfar/campus/admin/controller/system/SysRoleController.java",
"chars": 6037,
"preview": "package com.oddfar.campus.admin.controller.system;\n\nimport com.baomidou.mybatisplus.extension.plugins.pagination.Page;\ni"
},
{
"path": "campus-admin/src/main/java/com/oddfar/campus/admin/controller/system/SysUserController.java",
"chars": 5507,
"preview": "package com.oddfar.campus.admin.controller.system;\n\nimport com.oddfar.campus.common.annotation.ApiResource;\nimport com.o"
},
{
"path": "campus-common/pom.xml",
"chars": 3908,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n xmlns:xsi=\"http://www"
},
{
"path": "campus-common/src/main/java/com/oddfar/campus/common/annotation/Anonymous.java",
"chars": 417,
"preview": "package com.oddfar.campus.common.annotation;\n\nimport java.lang.annotation.Documented;\nimport java.lang.annotation.Elemen"
},
{
"path": "campus-common/src/main/java/com/oddfar/campus/common/annotation/ApiResource.java",
"chars": 640,
"preview": "package com.oddfar.campus.common.annotation;\n\nimport com.oddfar.campus.common.enums.ResBizTypeEnum;\n\nimport java.lang.an"
},
{
"path": "campus-common/src/main/java/com/oddfar/campus/common/annotation/Log.java",
"chars": 318,
"preview": "package com.oddfar.campus.common.annotation;\n\nimport java.lang.annotation.*;\n\n/**\n * 用来标记在控制器类或方法上,进行判断是否需要对接口进行日志记录\n */"
},
{
"path": "campus-common/src/main/java/com/oddfar/campus/common/annotation/RepeatSubmit.java",
"chars": 620,
"preview": "package com.oddfar.campus.common.annotation;\n\nimport java.lang.annotation.Documented;\nimport java.lang.annotation.Elemen"
},
{
"path": "campus-common/src/main/java/com/oddfar/campus/common/annotation/Sensitive.java",
"chars": 700,
"preview": "package com.oddfar.campus.common.annotation;\n\nimport com.fasterxml.jackson.annotation.JacksonAnnotationsInside;\nimport c"
},
{
"path": "campus-common/src/main/java/com/oddfar/campus/common/config/CampusConfig.java",
"chars": 425,
"preview": "package com.oddfar.campus.common.config;\n\nimport lombok.Data;\nimport org.springframework.boot.context.properties.Configu"
},
{
"path": "campus-common/src/main/java/com/oddfar/campus/common/config/FastJson2JsonRedisSerializer.java",
"chars": 1273,
"preview": "package com.oddfar.campus.common.config;\n\nimport com.alibaba.fastjson2.JSON;\nimport com.alibaba.fastjson2.JSONReader;\nim"
},
{
"path": "campus-common/src/main/java/com/oddfar/campus/common/config/RedisConfig.java",
"chars": 2436,
"preview": "package com.oddfar.campus.common.config;\n\nimport org.springframework.cache.annotation.CachingConfigurerSupport;\nimport o"
},
{
"path": "campus-common/src/main/java/com/oddfar/campus/common/config/SensitiveSerializer.java",
"chars": 1669,
"preview": "package com.oddfar.campus.common.config;\n\nimport com.fasterxml.jackson.core.JsonGenerator;\nimport com.fasterxml.jackson."
},
{
"path": "campus-common/src/main/java/com/oddfar/campus/common/constant/CacheConstants.java",
"chars": 940,
"preview": "package com.oddfar.campus.common.constant;\n\n/**\n * 缓存的key 常量\n */\npublic class CacheConstants {\n /**\n * 登录用户 redis"
},
{
"path": "campus-common/src/main/java/com/oddfar/campus/common/constant/Constants.java",
"chars": 2692,
"preview": "package com.oddfar.campus.common.constant;\n\n/**\n * 通用常量信息\n *\n * @author ruoyi\n */\npublic class Constants {\n /**\n "
},
{
"path": "campus-common/src/main/java/com/oddfar/campus/common/constant/HttpStatus.java",
"chars": 1371,
"preview": "package com.oddfar.campus.common.constant;\n\n/**\n * 返回状态码\n *\n * @author ruoyi\n */\npublic class HttpStatus {\n /**\n "
},
{
"path": "campus-common/src/main/java/com/oddfar/campus/common/constant/UserConstants.java",
"chars": 1766,
"preview": "package com.oddfar.campus.common.constant;\n\n/**\n * 用户常量信息\n *\n * @author ruoyi\n */\npublic class UserConstants {\n /**\n "
},
{
"path": "campus-common/src/main/java/com/oddfar/campus/common/core/BaseMapperX.java",
"chars": 3148,
"preview": "package com.oddfar.campus.common.core;\n\n\nimport com.baomidou.mybatisplus.core.conditions.Wrapper;\nimport com.baomidou.my"
},
{
"path": "campus-common/src/main/java/com/oddfar/campus/common/core/LambdaQueryWrapperX.java",
"chars": 4403,
"preview": "package com.oddfar.campus.common.core;\n\nimport cn.hutool.core.util.ArrayUtil;\nimport com.baomidou.mybatisplus.core.condi"
},
{
"path": "campus-common/src/main/java/com/oddfar/campus/common/core/RedisCache.java",
"chars": 6166,
"preview": "package com.oddfar.campus.common.core;\n\nimport org.springframework.beans.factory.annotation.Autowired;\nimport org.spring"
},
{
"path": "campus-common/src/main/java/com/oddfar/campus/common/core/page/PageQuery.java",
"chars": 4098,
"preview": "package com.oddfar.campus.common.core.page;\n\nimport cn.hutool.core.collection.CollUtil;\nimport cn.hutool.core.util.Objec"
},
{
"path": "campus-common/src/main/java/com/oddfar/campus/common/core/page/TableDataInfo.java",
"chars": 1233,
"preview": "package com.oddfar.campus.common.core.page;\n\nimport java.io.Serializable;\nimport java.util.List;\n\n/**\n * 表格分页数据对象\n *\n * "
},
{
"path": "campus-common/src/main/java/com/oddfar/campus/common/core/text/CharsetKit.java",
"chars": 2171,
"preview": "package com.oddfar.campus.common.core.text;\n\nimport com.oddfar.campus.common.utils.StringUtils;\n\nimport java.nio.charset"
},
{
"path": "campus-common/src/main/java/com/oddfar/campus/common/core/text/Convert.java",
"chars": 21356,
"preview": "package com.oddfar.campus.common.core.text;\n\nimport com.oddfar.campus.common.utils.StringUtils;\nimport org.apache.common"
},
{
"path": "campus-common/src/main/java/com/oddfar/campus/common/domain/BaseEntity.java",
"chars": 1219,
"preview": "package com.oddfar.campus.common.domain;\n\nimport com.baomidou.mybatisplus.annotation.FieldFill;\nimport com.baomidou.myba"
},
{
"path": "campus-common/src/main/java/com/oddfar/campus/common/domain/PageResult.java",
"chars": 709,
"preview": "package com.oddfar.campus.common.domain;\n\nimport lombok.Data;\n\nimport java.io.Serializable;\nimport java.util.ArrayList;\n"
},
{
"path": "campus-common/src/main/java/com/oddfar/campus/common/domain/R.java",
"chars": 2564,
"preview": "package com.oddfar.campus.common.domain;\n\n\nimport com.alibaba.fastjson2.JSON;\nimport com.alibaba.fastjson2.TypeReference"
},
{
"path": "campus-common/src/main/java/com/oddfar/campus/common/domain/TreeSelect.java",
"chars": 1862,
"preview": "package com.oddfar.campus.common.domain;\n\nimport com.fasterxml.jackson.annotation.JsonInclude;\nimport com.oddfar.campus."
},
{
"path": "campus-common/src/main/java/com/oddfar/campus/common/domain/entity/SysConfigEntity.java",
"chars": 1393,
"preview": "package com.oddfar.campus.common.domain.entity;\n\nimport com.baomidou.mybatisplus.annotation.TableId;\nimport com.baomidou"
},
{
"path": "campus-common/src/main/java/com/oddfar/campus/common/domain/entity/SysDictDataEntity.java",
"chars": 1708,
"preview": "package com.oddfar.campus.common.domain.entity;\n\nimport com.baomidou.mybatisplus.annotation.TableId;\nimport com.baomidou"
},
{
"path": "campus-common/src/main/java/com/oddfar/campus/common/domain/entity/SysDictTypeEntity.java",
"chars": 1200,
"preview": "package com.oddfar.campus.common.domain.entity;\n\nimport com.baomidou.mybatisplus.annotation.TableId;\nimport com.baomidou"
},
{
"path": "campus-common/src/main/java/com/oddfar/campus/common/domain/entity/SysLoginLogEntity.java",
"chars": 2080,
"preview": "package com.oddfar.campus.common.domain.entity;\n\nimport com.baomidou.mybatisplus.annotation.TableField;\nimport com.baomi"
},
{
"path": "campus-common/src/main/java/com/oddfar/campus/common/domain/entity/SysMenuEntity.java",
"chars": 2203,
"preview": "package com.oddfar.campus.common.domain.entity;\n\nimport com.baomidou.mybatisplus.annotation.TableField;\nimport com.baomi"
},
{
"path": "campus-common/src/main/java/com/oddfar/campus/common/domain/entity/SysOperLogEntity.java",
"chars": 2213,
"preview": "package com.oddfar.campus.common.domain.entity;\n\nimport com.baomidou.mybatisplus.annotation.*;\nimport com.fasterxml.jack"
},
{
"path": "campus-common/src/main/java/com/oddfar/campus/common/domain/entity/SysResourceEntity.java",
"chars": 1514,
"preview": "package com.oddfar.campus.common.domain.entity;\n\n\nimport com.baomidou.mybatisplus.annotation.TableField;\nimport com.baom"
},
{
"path": "campus-common/src/main/java/com/oddfar/campus/common/domain/entity/SysRoleEntity.java",
"chars": 1994,
"preview": "package com.oddfar.campus.common.domain.entity;\n\nimport com.baomidou.mybatisplus.annotation.TableField;\nimport com.baomi"
},
{
"path": "campus-common/src/main/java/com/oddfar/campus/common/domain/entity/SysRoleMenuEntity.java",
"chars": 580,
"preview": "package com.oddfar.campus.common.domain.entity;\n\n\nimport com.baomidou.mybatisplus.annotation.IdType;\nimport com.baomidou"
},
{
"path": "campus-common/src/main/java/com/oddfar/campus/common/domain/entity/SysRoleResourceEntity.java",
"chars": 583,
"preview": "package com.oddfar.campus.common.domain.entity;\n\nimport com.baomidou.mybatisplus.annotation.IdType;\nimport com.baomidou."
},
{
"path": "campus-common/src/main/java/com/oddfar/campus/common/domain/entity/SysUserEntity.java",
"chars": 2495,
"preview": "package com.oddfar.campus.common.domain.entity;\n\nimport com.baomidou.mybatisplus.annotation.TableField;\nimport com.baomi"
},
{
"path": "campus-common/src/main/java/com/oddfar/campus/common/domain/entity/SysUserRoleEntity.java",
"chars": 578,
"preview": "package com.oddfar.campus.common.domain.entity;\n\nimport com.baomidou.mybatisplus.annotation.IdType;\nimport com.baomidou."
},
{
"path": "campus-common/src/main/java/com/oddfar/campus/common/domain/model/LoginBody.java",
"chars": 902,
"preview": "package com.oddfar.campus.common.domain.model;\n\n/**\n * 用户登录对象\n *\n * @author ruoyi\n */\npublic class LoginBody {\n /**\n "
},
{
"path": "campus-common/src/main/java/com/oddfar/campus/common/domain/model/LoginUser.java",
"chars": 2263,
"preview": "package com.oddfar.campus.common.domain.model;\n\nimport com.alibaba.fastjson2.annotation.JSONField;\nimport com.oddfar.cam"
},
{
"path": "campus-common/src/main/java/com/oddfar/campus/common/domain/model/LoginUserToken.java",
"chars": 767,
"preview": "package com.oddfar.campus.common.domain.model;\n\nimport lombok.Data;\n\n/**\n * 登录用户身份信息\n *\n */\n@Data\npublic class LoginUser"
},
{
"path": "campus-common/src/main/java/com/oddfar/campus/common/domain/model/RegisterBody.java",
"chars": 195,
"preview": "package com.oddfar.campus.common.domain.model;\n\nimport lombok.Data;\n\n/**\n * 用户注册对象\n */\n@Data\npublic class RegisterBody e"
},
{
"path": "campus-common/src/main/java/com/oddfar/campus/common/domain/model/SysRoleAuth.java",
"chars": 619,
"preview": "package com.oddfar.campus.common.domain.model;\n\nimport com.oddfar.campus.common.domain.entity.SysRoleResourceEntity;\nimp"
},
{
"path": "campus-common/src/main/java/com/oddfar/campus/common/domain/model/SysRoleAuthList.java",
"chars": 394,
"preview": "package com.oddfar.campus.common.domain.model;\n\nimport lombok.AllArgsConstructor;\nimport lombok.Data;\nimport lombok.NoAr"
},
{
"path": "campus-common/src/main/java/com/oddfar/campus/common/domain/vo/RouterVo.java",
"chars": 2245,
"preview": "package com.oddfar.campus.common.domain.vo;\n\nimport com.fasterxml.jackson.annotation.JsonInclude;\nimport com.oddfar.camp"
},
{
"path": "campus-common/src/main/java/com/oddfar/campus/common/enums/BizCodeEnum.java",
"chars": 596,
"preview": "package com.oddfar.campus.common.enums;\n\n/***\n * 错误码和错误信息定义类\n * 1. 错误码定义规则为5为数字\n * 2. 前两位表示业务场景,最后三位表示错误码。例如:100001。10:通"
},
{
"path": "campus-common/src/main/java/com/oddfar/campus/common/enums/BusinessStatus.java",
"chars": 184,
"preview": "package com.oddfar.campus.common.enums;\n\n/**\n * 操作状态\n *\n * @author ruoyi\n */\npublic enum BusinessStatus {\n /**\n *"
},
{
"path": "campus-common/src/main/java/com/oddfar/campus/common/enums/ResBizTypeEnum.java",
"chars": 409,
"preview": "package com.oddfar.campus.common.enums;\n\nimport lombok.Getter;\n\n/**\n * 接口资源的类别\n */\n@Getter\npublic enum ResBizTypeEnum {\n"
},
{
"path": "campus-common/src/main/java/com/oddfar/campus/common/enums/SensitiveStrategy.java",
"chars": 806,
"preview": "package com.oddfar.campus.common.enums;\n\nimport cn.hutool.core.util.DesensitizedUtil;\nimport lombok.AllArgsConstructor;\n"
},
{
"path": "campus-common/src/main/java/com/oddfar/campus/common/enums/UserStatusEnum.java",
"chars": 452,
"preview": "package com.oddfar.campus.common.enums;\n\n/**\n * 用户状态\n *\n * @author ruoyi\n */\npublic enum UserStatusEnum {\n OK(\"0\", \"正"
},
{
"path": "campus-common/src/main/java/com/oddfar/campus/common/exception/ServiceException.java",
"chars": 1138,
"preview": "package com.oddfar.campus.common.exception;\n\n/**\n * 业务异常\n *\n * @author ruoyi\n */\npublic final class ServiceException ext"
},
{
"path": "campus-common/src/main/java/com/oddfar/campus/common/exception/UtilException.java",
"chars": 470,
"preview": "package com.oddfar.campus.common.exception;\n\n/**\n * 工具类异常\n *\n * @author ruoyi\n */\npublic class UtilException extends Run"
},
{
"path": "campus-common/src/main/java/com/oddfar/campus/common/exception/base/BaseException.java",
"chars": 963,
"preview": "package com.oddfar.campus.common.exception.base;\n\n\nimport com.oddfar.campus.common.utils.MessageUtils;\nimport com.oddfar"
},
{
"path": "campus-common/src/main/java/com/oddfar/campus/common/exception/file/FileException.java",
"chars": 362,
"preview": "package com.oddfar.campus.common.exception.file;\n\nimport com.oddfar.campus.common.exception.base.BaseException;\n\n/**\n * "
},
{
"path": "campus-common/src/main/java/com/oddfar/campus/common/exception/file/FileNameLengthLimitExceededException.java",
"chars": 399,
"preview": "package com.oddfar.campus.common.exception.file;\n\n/**\n * 文件名称超长限制异常类\n * \n * @author ruoyi\n */\npublic class FileNameLengt"
},
{
"path": "campus-common/src/main/java/com/oddfar/campus/common/exception/file/FileSizeLimitExceededException.java",
"chars": 365,
"preview": "package com.oddfar.campus.common.exception.file;\n\n/**\n * 文件名大小限制异常类\n * \n * @author ruoyi\n */\npublic class FileSizeLimitE"
},
{
"path": "campus-common/src/main/java/com/oddfar/campus/common/exception/file/InvalidExtensionException.java",
"chars": 2291,
"preview": "package com.oddfar.campus.common.exception.file;\n\nimport org.apache.commons.fileupload.FileUploadException;\n\nimport java"
},
{
"path": "campus-common/src/main/java/com/oddfar/campus/common/exception/user/CaptchaException.java",
"chars": 282,
"preview": "package com.oddfar.campus.common.exception.user;\n\n/**\n * 验证码错误异常类\n *\n * @author ruoyi\n */\npublic class CaptchaException "
},
{
"path": "campus-common/src/main/java/com/oddfar/campus/common/exception/user/CaptchaExpireException.java",
"chars": 295,
"preview": "package com.oddfar.campus.common.exception.user;\n\n/**\n * 验证码失效异常类\n *\n * @author ruoyi\n */\npublic class CaptchaExpireExce"
},
{
"path": "campus-common/src/main/java/com/oddfar/campus/common/exception/user/UserException.java",
"chars": 361,
"preview": "package com.oddfar.campus.common.exception.user;\n\nimport com.oddfar.campus.common.exception.base.BaseException;\n\n/**\n * "
},
{
"path": "campus-common/src/main/java/com/oddfar/campus/common/exception/user/UserPasswordNotMatchException.java",
"chars": 320,
"preview": "package com.oddfar.campus.common.exception.user;\n\n/**\n * 用户密码不正确或不符合规范异常类\n *\n * @author ruoyi\n */\npublic class UserPassw"
},
{
"path": "campus-common/src/main/java/com/oddfar/campus/common/exception/user/UserPasswordRetryLimitExceedException.java",
"chars": 416,
"preview": "package com.oddfar.campus.common.exception.user;\n\n/**\n * 用户错误最大次数异常类\n * \n * @author ruoyi\n */\npublic class UserPasswordR"
},
{
"path": "campus-common/src/main/java/com/oddfar/campus/common/filter/PropertyPreExcludeFilter.java",
"chars": 472,
"preview": "package com.oddfar.campus.common.filter;\n\nimport com.alibaba.fastjson2.filter.SimplePropertyPreFilter;\n\n/**\n * 排除JSON敏感属"
},
{
"path": "campus-common/src/main/java/com/oddfar/campus/common/filter/RepeatedlyRequestWrapper.java",
"chars": 2013,
"preview": "package com.oddfar.campus.common.filter;\n\nimport com.oddfar.campus.common.constant.Constants;\nimport com.oddfar.campus.c"
},
{
"path": "campus-common/src/main/java/com/oddfar/campus/common/utils/DateUtils.java",
"chars": 4298,
"preview": "package com.oddfar.campus.common.utils;\n\nimport org.apache.commons.lang3.time.DateFormatUtils;\n\nimport java.lang.managem"
},
{
"path": "campus-common/src/main/java/com/oddfar/campus/common/utils/DictUtils.java",
"chars": 4636,
"preview": "package com.oddfar.campus.common.utils;\n\nimport com.alibaba.fastjson2.JSONArray;\nimport com.oddfar.campus.common.constan"
},
{
"path": "campus-common/src/main/java/com/oddfar/campus/common/utils/LogUtils.java",
"chars": 277,
"preview": "package com.oddfar.campus.common.utils;\n\n/**\n * 处理并记录日志文件\n * \n * @author ruoyi\n */\npublic class LogUtils\n{\n public st"
},
{
"path": "campus-common/src/main/java/com/oddfar/campus/common/utils/MessageUtils.java",
"chars": 598,
"preview": "package com.oddfar.campus.common.utils;\n\nimport org.springframework.context.MessageSource;\nimport org.springframework.co"
},
{
"path": "campus-common/src/main/java/com/oddfar/campus/common/utils/MetaVo.java",
"chars": 1703,
"preview": "package com.oddfar.campus.common.utils;\n\n\n\n/**\n * 路由显示信息\n * \n * @author ruoyi\n */\npublic class MetaVo\n{\n /**\n * 设"
},
{
"path": "campus-common/src/main/java/com/oddfar/campus/common/utils/SecurityUtils.java",
"chars": 2965,
"preview": "package com.oddfar.campus.common.utils;\n\nimport com.oddfar.campus.common.constant.HttpStatus;\nimport com.oddfar.campus.c"
},
{
"path": "campus-common/src/main/java/com/oddfar/campus/common/utils/ServletUtils.java",
"chars": 4671,
"preview": "package com.oddfar.campus.common.utils;\n\nimport cn.hutool.core.convert.Convert;\nimport com.oddfar.campus.common.constant"
},
{
"path": "campus-common/src/main/java/com/oddfar/campus/common/utils/SpringUtils.java",
"chars": 3960,
"preview": "package com.oddfar.campus.common.utils;\n\nimport org.springframework.aop.framework.AopContext;\nimport org.springframework"
},
{
"path": "campus-common/src/main/java/com/oddfar/campus/common/utils/StringUtils.java",
"chars": 12814,
"preview": "package com.oddfar.campus.common.utils;\n\nimport cn.hutool.core.text.StrFormatter;\nimport com.oddfar.campus.common.consta"
},
{
"path": "campus-common/src/main/java/com/oddfar/campus/common/utils/Threads.java",
"chars": 1983,
"preview": "package com.oddfar.campus.common.utils;\n\nimport org.slf4j.Logger;\nimport org.slf4j.LoggerFactory;\n\nimport java.util.conc"
},
{
"path": "campus-common/src/main/java/com/oddfar/campus/common/utils/http/HttpHelper.java",
"chars": 1465,
"preview": "package com.oddfar.campus.common.utils.http;\n\nimport org.apache.commons.lang3.exception.ExceptionUtils;\nimport org.slf4j"
},
{
"path": "campus-common/src/main/java/com/oddfar/campus/common/utils/http/HttpUtils.java",
"chars": 8745,
"preview": "package com.oddfar.campus.common.utils.http;\n\nimport com.oddfar.campus.common.constant.Constants;\nimport com.oddfar.camp"
},
{
"path": "campus-common/src/main/java/com/oddfar/campus/common/utils/ip/AddressUtils.java",
"chars": 1489,
"preview": "package com.oddfar.campus.common.utils.ip;\n\nimport com.alibaba.fastjson2.JSON;\nimport com.alibaba.fastjson2.JSONObject;\n"
},
{
"path": "campus-common/src/main/java/com/oddfar/campus/common/utils/ip/IpUtils.java",
"chars": 7106,
"preview": "package com.oddfar.campus.common.utils.ip;\n\n\nimport com.oddfar.campus.common.utils.StringUtils;\n\nimport javax.servlet.ht"
},
{
"path": "campus-common/src/main/java/com/oddfar/campus/common/utils/pol/ExcelHandlerAdapter.java",
"chars": 297,
"preview": "package com.oddfar.campus.common.utils.pol;\n\n/**\n * Excel数据格式处理适配器\n *\n * @author ruoyi\n */\npublic interface ExcelHandler"
},
{
"path": "campus-common/src/main/java/com/oddfar/campus/common/utils/reflect/ReflectUtils.java",
"chars": 12323,
"preview": "package com.oddfar.campus.common.utils.reflect;\n\nimport com.oddfar.campus.common.core.text.Convert;\nimport com.oddfar.ca"
},
{
"path": "campus-common/src/main/java/com/oddfar/campus/common/utils/spring/AopTargetUtils.java",
"chars": 3046,
"preview": "/*\n * Copyright [2020-2030] [https://www.stylefeng.cn]\n *\n * Licensed under the Apache License, Version 2.0 (the \"Licens"
},
{
"path": "campus-common/src/main/java/com/oddfar/campus/common/utils/sql/SqlUtil.java",
"chars": 1404,
"preview": "package com.oddfar.campus.common.utils.sql;\n\nimport cn.hutool.core.exceptions.UtilException;\nimport com.oddfar.campus.co"
},
{
"path": "campus-common/src/main/java/com/oddfar/campus/common/utils/uuid/IdUtils.java",
"chars": 869,
"preview": "package com.oddfar.campus.common.utils.uuid;\n\nimport cn.hutool.core.lang.UUID;\n\n/**\n * ID生成器工具类\n * \n * @author ruoyi\n */"
},
{
"path": "campus-common/src/main/java/com/oddfar/campus/common/utils/uuid/Seq.java",
"chars": 1934,
"preview": "package com.oddfar.campus.common.utils.uuid;\n\nimport com.oddfar.campus.common.utils.DateUtils;\nimport com.oddfar.campus."
},
{
"path": "campus-common/src/main/java/com/oddfar/campus/common/utils/web/WebFrameworkUtils.java",
"chars": 840,
"preview": "package com.oddfar.campus.common.utils.web;\n\nimport javax.servlet.ServletRequest;\nimport javax.servlet.http.HttpServletR"
},
{
"path": "campus-common/src/main/java/com/oddfar/campus/common/validator/Xss.java",
"chars": 676,
"preview": "package com.oddfar.campus.common.validator;\n\nimport javax.validation.Constraint;\nimport javax.validation.Payload;\nimport"
},
{
"path": "campus-common/src/main/java/com/oddfar/campus/common/validator/XssValidator.java",
"chars": 905,
"preview": "package com.oddfar.campus.common.validator;\n\nimport com.oddfar.campus.common.utils.StringUtils;\n\nimport javax.validation"
},
{
"path": "campus-framework/pom.xml",
"chars": 1933,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<project xmlns=\"http://maven.apache.org/POM/4.0.0\"\n xmlns:xsi=\"http://www"
},
{
"path": "campus-framework/src/main/java/com/oddfar/campus/framework/api/file/FileOperatorApi.java",
"chars": 290,
"preview": "package com.oddfar.campus.framework.api.file;\n\nimport org.springframework.web.multipart.MultipartFile;\n\n/**\n * 文件操作api\n "
},
{
"path": "campus-framework/src/main/java/com/oddfar/campus/framework/api/file/FileUploadUtils.java",
"chars": 7088,
"preview": "package com.oddfar.campus.framework.api.file;\n\nimport com.oddfar.campus.common.constant.Constants;\nimport com.oddfar.cam"
},
{
"path": "campus-framework/src/main/java/com/oddfar/campus/framework/api/file/LocalFileOperator.java",
"chars": 455,
"preview": "package com.oddfar.campus.framework.api.file;\n\nimport org.springframework.web.multipart.MultipartFile;\n\npublic class Loc"
},
{
"path": "campus-framework/src/main/java/com/oddfar/campus/framework/api/file/MimeTypeUtils.java",
"chars": 1810,
"preview": "package com.oddfar.campus.framework.api.file;\n\n/**\n * 媒体类型工具类\n *\n * @author ruoyi\n */\npublic class MimeTypeUtils {\n p"
},
{
"path": "campus-framework/src/main/java/com/oddfar/campus/framework/api/file/ZyFileAutoConfiguration.java",
"chars": 603,
"preview": "package com.oddfar.campus.framework.api.file;\n\n\nimport com.oddfar.campus.framework.api.sysconfig.ConfigExpander;\nimport "
},
{
"path": "campus-framework/src/main/java/com/oddfar/campus/framework/api/mail/Impl/MailServiceImpl.java",
"chars": 1197,
"preview": "package com.oddfar.campus.framework.api.mail.Impl;\n\nimport cn.hutool.extra.mail.MailAccount;\nimport cn.hutool.extra.mail"
},
{
"path": "campus-framework/src/main/java/com/oddfar/campus/framework/api/mail/MailConfigRead.java",
"chars": 742,
"preview": "package com.oddfar.campus.framework.api.mail;\n\nimport com.oddfar.campus.framework.api.sysconfig.ConfigContext;\n\n/**\n * 读"
},
{
"path": "campus-framework/src/main/java/com/oddfar/campus/framework/api/mail/MailSendApi.java",
"chars": 472,
"preview": "package com.oddfar.campus.framework.api.mail;\n\nimport java.util.List;\n\n/**\n * 发送邮件Api\n * (后期整合下阿里云 腾讯云)\n *\n * @author od"
},
{
"path": "campus-framework/src/main/java/com/oddfar/campus/framework/api/mail/MailSendContext.java",
"chars": 300,
"preview": "package com.oddfar.campus.framework.api.mail;\n\nimport cn.hutool.extra.spring.SpringUtil;\n\n/**\n * 邮件发送的api上下文\n *\n * @auth"
},
{
"path": "campus-framework/src/main/java/com/oddfar/campus/framework/api/mail/ZyMailAutoConfig.java",
"chars": 538,
"preview": "package com.oddfar.campus.framework.api.mail;\n\nimport com.oddfar.campus.framework.api.mail.Impl.MailServiceImpl;\nimport "
},
{
"path": "campus-framework/src/main/java/com/oddfar/campus/framework/api/resource/ApiResourceAutoConfig.java",
"chars": 933,
"preview": "package com.oddfar.campus.framework.api.resource;\n\n\nimport com.oddfar.campus.framework.api.resource.impl.DefaultResource"
},
{
"path": "campus-framework/src/main/java/com/oddfar/campus/framework/api/resource/ResourceCollectorApi.java",
"chars": 912,
"preview": "package com.oddfar.campus.framework.api.resource;\n\nimport com.oddfar.campus.common.domain.entity.SysResourceEntity;\nimpo"
},
{
"path": "campus-framework/src/main/java/com/oddfar/campus/framework/api/resource/impl/DefaultResourceCollector.java",
"chars": 4091,
"preview": "package com.oddfar.campus.framework.api.resource.impl;\n\nimport com.oddfar.campus.common.domain.entity.SysResourceEntity;"
},
{
"path": "campus-framework/src/main/java/com/oddfar/campus/framework/api/sysconfig/ConfigContext.java",
"chars": 346,
"preview": "package com.oddfar.campus.framework.api.sysconfig;\n\nimport cn.hutool.extra.spring.SpringUtil;\nimport com.oddfar.campus.f"
},
{
"path": "campus-framework/src/main/java/com/oddfar/campus/framework/api/sysconfig/ConfigExpander.java",
"chars": 1525,
"preview": "package com.oddfar.campus.framework.api.sysconfig;\n\nimport cn.hutool.core.convert.Convert;\n\npublic class ConfigExpander "
},
{
"path": "campus-framework/src/main/java/com/oddfar/campus/framework/api/sysconfig/ZyConfigAutoConfiguration.java",
"chars": 617,
"preview": "package com.oddfar.campus.framework.api.sysconfig;\n\nimport com.oddfar.campus.framework.service.SysConfigService;\nimport "
},
{
"path": "campus-framework/src/main/java/com/oddfar/campus/framework/aspectj/LogAspect.java",
"chars": 12173,
"preview": "package com.oddfar.campus.framework.aspectj;\n\nimport cn.hutool.core.util.StrUtil;\nimport com.alibaba.fastjson2.JSON;\nimp"
},
{
"path": "campus-framework/src/main/java/com/oddfar/campus/framework/config/ApplicationConfig.java",
"chars": 325,
"preview": "package com.oddfar.campus.framework.config;\n\nimport org.springframework.context.annotation.Configuration;\nimport org.spr"
},
{
"path": "campus-framework/src/main/java/com/oddfar/campus/framework/config/AsyncConfig.java",
"chars": 1467,
"preview": "package com.oddfar.campus.framework.config;\n\nimport cn.hutool.core.util.ArrayUtil;\nimport cn.hutool.extra.spring.SpringU"
},
{
"path": "campus-framework/src/main/java/com/oddfar/campus/framework/config/JacksonConfig.java",
"chars": 2114,
"preview": "package com.oddfar.campus.framework.config;\n\nimport com.fasterxml.jackson.databind.ser.std.ToStringSerializer;\nimport co"
},
{
"path": "campus-framework/src/main/java/com/oddfar/campus/framework/config/KaptchaTextCreator.java",
"chars": 1800,
"preview": "package com.oddfar.campus.framework.config;\n\nimport com.google.code.kaptcha.text.impl.DefaultTextCreator;\nimport org.spr"
},
{
"path": "campus-framework/src/main/java/com/oddfar/campus/framework/config/MyWebMvcConfig.java",
"chars": 2715,
"preview": "package com.oddfar.campus.framework.config;\n\nimport com.oddfar.campus.common.constant.Constants;\nimport com.oddfar.campu"
},
{
"path": "campus-framework/src/main/java/com/oddfar/campus/framework/config/MybatisPlusConfig.java",
"chars": 1206,
"preview": "package com.oddfar.campus.framework.config;\n\nimport com.baomidou.mybatisplus.annotation.DbType;\nimport com.baomidou.myba"
},
{
"path": "campus-framework/src/main/java/com/oddfar/campus/framework/config/SecurityConfig.java",
"chars": 5427,
"preview": "package com.oddfar.campus.framework.config;\n\nimport com.oddfar.campus.framework.security.filter.JwtAuthenticationTokenFi"
},
{
"path": "campus-framework/src/main/java/com/oddfar/campus/framework/config/ThreadPoolConfig.java",
"chars": 1921,
"preview": "package com.oddfar.campus.framework.config;\n\nimport com.oddfar.campus.common.utils.Threads;\nimport org.apache.commons.la"
},
{
"path": "campus-framework/src/main/java/com/oddfar/campus/framework/expander/SysConfigExpander.java",
"chars": 1574,
"preview": "package com.oddfar.campus.framework.expander;\n\nimport com.oddfar.campus.framework.service.SysConfigService;\nimport org.s"
},
{
"path": "campus-framework/src/main/java/com/oddfar/campus/framework/expander/SysFileConfigExpander.java",
"chars": 1399,
"preview": "package com.oddfar.campus.framework.expander;\n\nimport com.oddfar.campus.framework.api.sysconfig.ConfigContext;\nimport or"
},
{
"path": "campus-framework/src/main/java/com/oddfar/campus/framework/handler/BigNumberSerializer.java",
"chars": 1249,
"preview": "package com.oddfar.campus.framework.handler;\n\nimport com.fasterxml.jackson.core.JsonGenerator;\nimport com.fasterxml.jack"
},
{
"path": "campus-framework/src/main/java/com/oddfar/campus/framework/handler/MyDBFieldHandler.java",
"chars": 2607,
"preview": "package com.oddfar.campus.framework.handler;\n\nimport com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;\nimport co"
},
{
"path": "campus-framework/src/main/java/com/oddfar/campus/framework/interceptor/RepeatSubmitInterceptor.java",
"chars": 1645,
"preview": "package com.oddfar.campus.framework.interceptor;\n\nimport com.alibaba.fastjson2.JSON;\nimport com.oddfar.campus.common.ann"
},
{
"path": "campus-framework/src/main/java/com/oddfar/campus/framework/interceptor/impl/SameUrlDataInterceptor.java",
"chars": 3746,
"preview": "package com.oddfar.campus.framework.interceptor.impl;\n\nimport com.alibaba.fastjson2.JSON;\nimport com.oddfar.campus.commo"
},
{
"path": "campus-framework/src/main/java/com/oddfar/campus/framework/listener/ApiResourceScanner.java",
"chars": 7874,
"preview": "package com.oddfar.campus.framework.listener;\n\nimport cn.hutool.core.util.StrUtil;\nimport com.oddfar.campus.common.annot"
},
{
"path": "campus-framework/src/main/java/com/oddfar/campus/framework/listener/ReadyEventListener.java",
"chars": 1515,
"preview": "package com.oddfar.campus.framework.listener;\n\n\nimport com.oddfar.campus.common.domain.entity.SysResourceEntity;\nimport "
},
{
"path": "campus-framework/src/main/java/com/oddfar/campus/framework/listener/ResourceReportListener.java",
"chars": 3683,
"preview": "package com.oddfar.campus.framework.listener;\n\nimport com.oddfar.campus.common.domain.entity.SysResourceEntity;\nimport c"
},
{
"path": "campus-framework/src/main/java/com/oddfar/campus/framework/manager/AsyncFactory.java",
"chars": 3647,
"preview": "package com.oddfar.campus.framework.manager;\n\nimport com.oddfar.campus.common.constant.Constants;\nimport com.oddfar.camp"
},
{
"path": "campus-framework/src/main/java/com/oddfar/campus/framework/manager/AsyncManager.java",
"chars": 1037,
"preview": "package com.oddfar.campus.framework.manager;\n\nimport com.oddfar.campus.common.utils.SpringUtils;\nimport com.oddfar.campu"
},
{
"path": "campus-framework/src/main/java/com/oddfar/campus/framework/mapper/SysConfigMapper.java",
"chars": 1752,
"preview": "package com.oddfar.campus.framework.mapper;\n\nimport cn.hutool.core.util.ObjectUtil;\nimport com.oddfar.campus.common.core"
},
{
"path": "campus-framework/src/main/java/com/oddfar/campus/framework/mapper/SysDictDataMapper.java",
"chars": 2205,
"preview": "package com.oddfar.campus.framework.mapper;\n\nimport com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;\nimpor"
},
{
"path": "campus-framework/src/main/java/com/oddfar/campus/framework/mapper/SysDictTypeMapper.java",
"chars": 1526,
"preview": "package com.oddfar.campus.framework.mapper;\n\nimport cn.hutool.core.util.ObjectUtil;\nimport com.baomidou.mybatisplus.core"
},
{
"path": "campus-framework/src/main/java/com/oddfar/campus/framework/mapper/SysLoginLogMapper.java",
"chars": 1612,
"preview": "package com.oddfar.campus.framework.mapper;\n\nimport com.oddfar.campus.common.core.BaseMapperX;\nimport com.oddfar.campus."
},
{
"path": "campus-framework/src/main/java/com/oddfar/campus/framework/mapper/SysMenuMapper.java",
"chars": 2618,
"preview": "package com.oddfar.campus.framework.mapper;\n\nimport cn.hutool.core.util.ObjectUtil;\nimport com.oddfar.campus.common.core"
},
{
"path": "campus-framework/src/main/java/com/oddfar/campus/framework/mapper/SysOperLogMapper.java",
"chars": 2051,
"preview": "package com.oddfar.campus.framework.mapper;\n\nimport com.oddfar.campus.common.core.BaseMapperX;\nimport com.oddfar.campus."
},
{
"path": "campus-framework/src/main/java/com/oddfar/campus/framework/mapper/SysResourceMapper.java",
"chars": 1430,
"preview": "package com.oddfar.campus.framework.mapper;\n\nimport com.oddfar.campus.common.core.BaseMapperX;\nimport com.oddfar.campus."
},
{
"path": "campus-framework/src/main/java/com/oddfar/campus/framework/mapper/SysRoleMapper.java",
"chars": 1869,
"preview": "package com.oddfar.campus.framework.mapper;\n\nimport com.oddfar.campus.common.core.BaseMapperX;\nimport com.oddfar.campus."
},
{
"path": "campus-framework/src/main/java/com/oddfar/campus/framework/mapper/SysRoleMenuMapper.java",
"chars": 833,
"preview": "package com.oddfar.campus.framework.mapper;\n\nimport com.oddfar.campus.common.core.BaseMapperX;\nimport com.oddfar.campus."
},
{
"path": "campus-framework/src/main/java/com/oddfar/campus/framework/mapper/SysRoleResourceMapper.java",
"chars": 682,
"preview": "package com.oddfar.campus.framework.mapper;\n\nimport com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;\nimport "
},
{
"path": "campus-framework/src/main/java/com/oddfar/campus/framework/mapper/SysUserMapper.java",
"chars": 2963,
"preview": "package com.oddfar.campus.framework.mapper;\n\nimport com.baomidou.mybatisplus.core.conditions.Wrapper;\nimport com.baomido"
},
{
"path": "campus-framework/src/main/java/com/oddfar/campus/framework/mapper/SysUserRoleMapper.java",
"chars": 1654,
"preview": "package com.oddfar.campus.framework.mapper;\n\nimport com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;\nimport "
},
{
"path": "campus-framework/src/main/java/com/oddfar/campus/framework/security/context/AuthenticationContextHolder.java",
"chars": 559,
"preview": "package com.oddfar.campus.framework.security.context;\n\nimport org.springframework.security.core.Authentication;\n\n/**\n * "
},
{
"path": "campus-framework/src/main/java/com/oddfar/campus/framework/security/context/PermissionContextHolder.java",
"chars": 837,
"preview": "package com.oddfar.campus.framework.security.context;\n\n\nimport cn.hutool.core.convert.Convert;\nimport org.springframewor"
},
{
"path": "campus-framework/src/main/java/com/oddfar/campus/framework/security/filter/JwtAuthenticationTokenFilter.java",
"chars": 2333,
"preview": "package com.oddfar.campus.framework.security.filter;\n\nimport com.oddfar.campus.common.domain.model.LoginUser;\nimport com"
},
{
"path": "campus-framework/src/main/java/com/oddfar/campus/framework/security/handle/AuthenticationEntryPointImpl.java",
"chars": 1227,
"preview": "package com.oddfar.campus.framework.security.handle;\n\nimport com.alibaba.fastjson2.JSON;\nimport com.oddfar.campus.common"
},
{
"path": "campus-framework/src/main/java/com/oddfar/campus/framework/security/handle/LogoutSuccessHandlerImpl.java",
"chars": 2017,
"preview": "package com.oddfar.campus.framework.security.handle;\n\nimport com.alibaba.fastjson2.JSON;\nimport com.oddfar.campus.common"
},
{
"path": "campus-framework/src/main/java/com/oddfar/campus/framework/security/properties/PermitAllUrlProperties.java",
"chars": 2616,
"preview": "package com.oddfar.campus.framework.security.properties;\n\nimport com.oddfar.campus.common.annotation.Anonymous;\nimport o"
},
{
"path": "campus-framework/src/main/java/com/oddfar/campus/framework/service/SysConfigService.java",
"chars": 1845,
"preview": "package com.oddfar.campus.framework.service;\n\nimport com.oddfar.campus.common.domain.PageResult;\nimport com.oddfar.campu"
},
{
"path": "campus-framework/src/main/java/com/oddfar/campus/framework/service/SysDictDataService.java",
"chars": 843,
"preview": "package com.oddfar.campus.framework.service;\n\nimport com.oddfar.campus.common.domain.PageResult;\nimport com.oddfar.campu"
},
{
"path": "campus-framework/src/main/java/com/oddfar/campus/framework/service/SysDictTypeService.java",
"chars": 1474,
"preview": "package com.oddfar.campus.framework.service;\n\nimport com.oddfar.campus.common.domain.PageResult;\nimport com.oddfar.campu"
},
{
"path": "campus-framework/src/main/java/com/oddfar/campus/framework/service/SysLoginLogService.java",
"chars": 980,
"preview": "package com.oddfar.campus.framework.service;\n\nimport com.oddfar.campus.common.domain.PageResult;\nimport com.oddfar.campu"
},
{
"path": "campus-framework/src/main/java/com/oddfar/campus/framework/service/SysMenuService.java",
"chars": 2846,
"preview": "package com.oddfar.campus.framework.service;\n\nimport com.oddfar.campus.common.domain.TreeSelect;\nimport com.oddfar.campu"
},
{
"path": "campus-framework/src/main/java/com/oddfar/campus/framework/service/SysOperLogService.java",
"chars": 1051,
"preview": "package com.oddfar.campus.framework.service;\n\nimport com.oddfar.campus.common.domain.PageResult;\nimport com.oddfar.campu"
},
{
"path": "campus-framework/src/main/java/com/oddfar/campus/framework/service/SysResourceService.java",
"chars": 1779,
"preview": "package com.oddfar.campus.framework.service;\n\nimport com.baomidou.mybatisplus.extension.service.IService;\nimport com.odd"
},
{
"path": "campus-framework/src/main/java/com/oddfar/campus/framework/service/SysRoleService.java",
"chars": 2747,
"preview": "package com.oddfar.campus.framework.service;\n\nimport com.baomidou.mybatisplus.extension.service.IService;\nimport com.odd"
},
{
"path": "campus-framework/src/main/java/com/oddfar/campus/framework/service/SysUserService.java",
"chars": 3157,
"preview": "package com.oddfar.campus.framework.service;\n\nimport com.baomidou.mybatisplus.extension.plugins.pagination.Page;\nimport "
},
{
"path": "campus-framework/src/main/java/com/oddfar/campus/framework/service/impl/SysConfigServiceImpl.java",
"chars": 5857,
"preview": "package com.oddfar.campus.framework.service.impl;\n\nimport cn.hutool.core.convert.Convert;\nimport cn.hutool.core.util.Obj"
},
{
"path": "campus-framework/src/main/java/com/oddfar/campus/framework/service/impl/SysDictDataServiceImpl.java",
"chars": 2029,
"preview": "package com.oddfar.campus.framework.service.impl;\n\nimport com.oddfar.campus.common.domain.PageResult;\nimport com.oddfar."
},
{
"path": "campus-framework/src/main/java/com/oddfar/campus/framework/service/impl/SysDictTypeServiceImpl.java",
"chars": 4786,
"preview": "package com.oddfar.campus.framework.service.impl;\n\nimport com.oddfar.campus.common.core.LambdaQueryWrapperX;\nimport com."
},
{
"path": "campus-framework/src/main/java/com/oddfar/campus/framework/service/impl/SysLoginLogServiceImpl.java",
"chars": 1726,
"preview": "package com.oddfar.campus.framework.service.impl;\n\nimport com.oddfar.campus.common.domain.PageResult;\nimport com.oddfar."
},
{
"path": "campus-framework/src/main/java/com/oddfar/campus/framework/service/impl/SysMenuServiceImpl.java",
"chars": 13916,
"preview": "package com.oddfar.campus.framework.service.impl;\n\nimport com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;\ni"
},
{
"path": "campus-framework/src/main/java/com/oddfar/campus/framework/service/impl/SysOperLogServiceImpl.java",
"chars": 1713,
"preview": "package com.oddfar.campus.framework.service.impl;\n\nimport com.oddfar.campus.common.domain.PageResult;\nimport com.oddfar."
},
{
"path": "campus-framework/src/main/java/com/oddfar/campus/framework/service/impl/SysResourceServiceImpl.java",
"chars": 4579,
"preview": "package com.oddfar.campus.framework.service.impl;\n\nimport com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;\ni"
},
{
"path": "campus-framework/src/main/java/com/oddfar/campus/framework/service/impl/SysRoleServiceImpl.java",
"chars": 7551,
"preview": "package com.oddfar.campus.framework.service.impl;\n\nimport com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;\ni"
},
{
"path": "campus-framework/src/main/java/com/oddfar/campus/framework/service/impl/SysUserServiceImpl.java",
"chars": 9135,
"preview": "package com.oddfar.campus.framework.service.impl;\n\nimport cn.hutool.core.util.ObjectUtil;\nimport com.baomidou.mybatisplu"
},
{
"path": "campus-framework/src/main/java/com/oddfar/campus/framework/web/exception/GlobalExceptionHandler.java",
"chars": 3344,
"preview": "package com.oddfar.campus.framework.web.exception;\n\nimport com.oddfar.campus.common.constant.HttpStatus;\nimport com.oddf"
},
{
"path": "campus-framework/src/main/java/com/oddfar/campus/framework/web/service/PermissionService.java",
"chars": 7510,
"preview": "package com.oddfar.campus.framework.web.service;\n\nimport cn.hutool.core.util.StrUtil;\nimport com.oddfar.campus.common.an"
},
{
"path": "campus-framework/src/main/java/com/oddfar/campus/framework/web/service/SysLoginService.java",
"chars": 5221,
"preview": "package com.oddfar.campus.framework.web.service;\n\nimport cn.hutool.core.date.DateUtil;\nimport com.oddfar.campus.common.c"
},
{
"path": "campus-framework/src/main/java/com/oddfar/campus/framework/web/service/SysPasswordService.java",
"chars": 3214,
"preview": "package com.oddfar.campus.framework.web.service;\n\nimport com.oddfar.campus.common.constant.CacheConstants;\nimport com.od"
},
{
"path": "campus-framework/src/main/java/com/oddfar/campus/framework/web/service/SysPermissionService.java",
"chars": 4525,
"preview": "package com.oddfar.campus.framework.web.service;\n\nimport com.oddfar.campus.common.core.RedisCache;\nimport com.oddfar.cam"
},
{
"path": "campus-framework/src/main/java/com/oddfar/campus/framework/web/service/SysRegisterService.java",
"chars": 3526,
"preview": "package com.oddfar.campus.framework.web.service;\n\nimport com.oddfar.campus.common.constant.CacheConstants;\nimport com.od"
},
{
"path": "campus-framework/src/main/java/com/oddfar/campus/framework/web/service/TokenService.java",
"chars": 7562,
"preview": "package com.oddfar.campus.framework.web.service;\n\nimport com.oddfar.campus.common.constant.CacheConstants;\nimport com.od"
},
{
"path": "campus-framework/src/main/java/com/oddfar/campus/framework/web/service/UserDetailsServiceImpl.java",
"chars": 2299,
"preview": "package com.oddfar.campus.framework.web.service;\n\nimport com.oddfar.campus.common.domain.entity.SysUserEntity;\nimport co"
},
{
"path": "campus-framework/src/main/resources/mapper/SysConfigMapper.xml",
"chars": 239,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\"\n \"http://myb"
},
{
"path": "campus-framework/src/main/resources/mapper/SysDictDataMapper.xml",
"chars": 241,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\"\n \"http://myb"
},
{
"path": "campus-framework/src/main/resources/mapper/SysDictTypeMapper.xml",
"chars": 241,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\"\n \"http://myb"
},
{
"path": "campus-framework/src/main/resources/mapper/SysLoginLogMapper.xml",
"chars": 991,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<!DOCTYPE mapper\n PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\"\n \"ht"
},
{
"path": "campus-framework/src/main/resources/mapper/SysMenuMapper.xml",
"chars": 6463,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<!DOCTYPE mapper PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\"\n \"http://myb"
},
{
"path": "campus-framework/src/main/resources/mapper/SysOperLogMapper.xml",
"chars": 1366,
"preview": "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n<!DOCTYPE mapper\n PUBLIC \"-//mybatis.org//DTD Mapper 3.0//EN\"\n \"ht"
}
]
// ... and 248 more files (download for full content)
About this extraction
This page contains the full source code of the oddfar/campus-imaotai GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 448 files (1.3 MB), approximately 374.2k tokens, and a symbol index with 1645 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.