lixuliang
2024-11-22 4f7362ec2854732c2ff2454331ec815c4c3147f0
Merge branch 'master' of http://103.135.160.14:9034/r/se-cloud
已重命名13个文件
已添加18个文件
已修改53个文件
已删除7个文件
2999 ■■■■ 文件已修改
.gitignore 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
504/放这里面.txt 补丁 | 查看 | 原始文档 | blame | 历史
docker-compose/docker-compose.yml 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docker-compose/docker-compose_241121.yml 169 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docker-compose/mysql/initdb/se_cloud_20240629.sql 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
docker-compose/mysql/initdb/se_cloud_20241119.sql 219 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
docker-compose/nginx/conf/nginx.conf 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-api/se-api-system/se-api-system.iml 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-auth/src/main/java/com/se/auth/controller/HealthController.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-auth/src/main/resources/bootstrap.yml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-cloud.iml 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-common/se-common-core/se-common-core.iml 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-common/se-common-core/src/main/java/com/se/common/core/utils/AesUtils.java 71 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-common/se-common-core/src/main/java/com/se/common/core/utils/RsaUtils.java 81 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-common/se-common-core/src/main/java/com/se/common/core/web/domain/BaseEntity.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-common/se-common-datascope/se-common-datascope.iml 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-common/se-common-datasource/se-common-datasource.iml 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-common/se-common-log/se-common-log.iml 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-common/se-common-redis/se-common-redis.iml 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-common/se-common-seata/se-common-seata.iml 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-common/se-common-security/se-common-security.iml 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-common/se-common-swagger/se-common-swagger.iml 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-gateway/se-gateway.iml 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-gateway/src/main/java/com/se/gateway/handler/HealthController.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-modules/se-file/se-file.iml 201 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-modules/se-gen/se-gen.iml 193 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-modules/se-job/se-job.iml 194 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-modules/se-system/pom.xml 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-modules/se-system/se-system.iml 205 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-modules/se-system/src/main/java/com/se/system/config/MinioConfig.java 82 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-modules/se-system/src/main/java/com/se/system/config/ResourcesConfig.java 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-modules/se-system/src/main/java/com/se/system/controller/HealthController.java 7 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-modules/se-system/src/main/java/com/se/system/controller/SysConfigController.java 76 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-modules/se-system/src/main/java/com/se/system/controller/SysDeptController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-modules/se-system/src/main/java/com/se/system/controller/SysDictDataController.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-modules/se-system/src/main/java/com/se/system/controller/SysDictTypeController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-modules/se-system/src/main/java/com/se/system/controller/SysFileController.java 49 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-modules/se-system/src/main/java/com/se/system/controller/SysLogininforController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-modules/se-system/src/main/java/com/se/system/controller/SysMenuController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-modules/se-system/src/main/java/com/se/system/controller/SysNoticeController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-modules/se-system/src/main/java/com/se/system/controller/SysOperlogController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-modules/se-system/src/main/java/com/se/system/controller/SysPostController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-modules/se-system/src/main/java/com/se/system/controller/SysProfileController.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-modules/se-system/src/main/java/com/se/system/controller/SysRoleController.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-modules/se-system/src/main/java/com/se/system/controller/SysUserController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-modules/se-system/src/main/java/com/se/system/controller/SysUserOnlineController.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-modules/se-system/src/main/java/com/se/system/controller/TokenController.java 95 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-modules/se-system/src/main/java/com/se/system/domain/LoginBody.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-modules/se-system/src/main/java/com/se/system/domain/RegisterBody.java 11 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-modules/se-system/src/main/java/com/se/system/mapper/SysMenuMapper.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-modules/se-system/src/main/java/com/se/system/service/SysLoginService.java 163 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-modules/se-system/src/main/java/com/se/system/service/SysPasswordService.java 87 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-modules/se-system/src/main/java/com/se/system/service/SysRecordLogService.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-modules/se-system/src/main/java/com/se/system/service/impl/FastDfsSysFileServiceImpl.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-modules/se-system/src/main/java/com/se/system/service/impl/IsimUserService.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-modules/se-system/src/main/java/com/se/system/service/impl/LocalSysFileServiceImpl.java 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-modules/se-system/src/main/java/com/se/system/service/impl/MinioSysFileServiceImpl.java 51 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-modules/se-system/src/main/java/com/se/system/service/impl/SyncUserService.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-modules/se-system/src/main/java/com/se/system/service/impl/SysConfigServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-modules/se-system/src/main/java/com/se/system/service/impl/SysDeptServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-modules/se-system/src/main/java/com/se/system/service/impl/SysDictDataServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-modules/se-system/src/main/java/com/se/system/service/impl/SysDictTypeServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-modules/se-system/src/main/java/com/se/system/service/impl/SysLogininforServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-modules/se-system/src/main/java/com/se/system/service/impl/SysMenuServiceImpl.java 17 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-modules/se-system/src/main/java/com/se/system/service/impl/SysNoticeServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-modules/se-system/src/main/java/com/se/system/service/impl/SysOperLogServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-modules/se-system/src/main/java/com/se/system/service/impl/SysPermissionServiceImpl.java 8 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-modules/se-system/src/main/java/com/se/system/service/impl/SysPostServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-modules/se-system/src/main/java/com/se/system/service/impl/SysRoleServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-modules/se-system/src/main/java/com/se/system/service/impl/SysUserOnlineServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-modules/se-system/src/main/java/com/se/system/service/impl/SysUserServiceImpl.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-modules/se-system/src/main/java/com/se/system/service/inte/ISysConfigService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-modules/se-system/src/main/java/com/se/system/service/inte/ISysDeptService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-modules/se-system/src/main/java/com/se/system/service/inte/ISysDictDataService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-modules/se-system/src/main/java/com/se/system/service/inte/ISysDictTypeService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-modules/se-system/src/main/java/com/se/system/service/inte/ISysFileService.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-modules/se-system/src/main/java/com/se/system/service/inte/ISysLogininforService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-modules/se-system/src/main/java/com/se/system/service/inte/ISysMenuService.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-modules/se-system/src/main/java/com/se/system/service/inte/ISysNoticeService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-modules/se-system/src/main/java/com/se/system/service/inte/ISysOperLogService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-modules/se-system/src/main/java/com/se/system/service/inte/ISysPermissionService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-modules/se-system/src/main/java/com/se/system/service/inte/ISysPostService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-modules/se-system/src/main/java/com/se/system/service/inte/ISysRoleService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-modules/se-system/src/main/java/com/se/system/service/inte/ISysUserOnlineService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-modules/se-system/src/main/java/com/se/system/service/inte/ISysUserService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-modules/se-system/src/main/java/com/se/system/utils/FileUploadUtils.java 186 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-modules/se-system/src/main/resources/logback.xml 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-modules/se-system/src/main/resources/mapper/system/SysMenuMapper.xml 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-visual/se-monitor/ruoyi-visual-monitor.iml 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
se-visual/se-monitor/se-monitor.iml 144 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
说明.txt 37 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
.gitignore
@@ -22,7 +22,7 @@
### IntelliJ IDEA ###
.idea
*.iws
#*.iml
*.iml
*.ipr
### JRebel ###
504/·ÅÕâÀïÃæ.txt
docker-compose/docker-compose.yml
@@ -38,7 +38,7 @@
#      - 7848:7848
      - 8848:8848
      - 9848:9848
#      - 9849:9849
#      - 9849:9849
    depends_on:
      - se-mysql
    networks:
@@ -67,31 +67,13 @@
      - ./gateway:/data
    environment:
      TZ: Asia/Shanghai
    entrypoint: java -jar /data/se-gateway.jar --spring.config.location=file:/data/
    entrypoint: /bin/sh -c "sleep 25 && java -jar /data/se-gateway.jar --spring.config.location=file:/data/"
    depends_on:
      - se-redis
      - se-mysql
      - se-nacos
#    links:
#      - se-redis
    networks:
      - network-se
    restart: always
  # auth
  se-auth:
    image: openjdk:8-jre
#    ports:
#      - 9200:9200
    volumes:
      - ./auth/logs:/logs
      - ./auth:/data
    environment:
      TZ: Asia/Shanghai
    entrypoint: java -jar /data/se-auth.jar --spring.config.location=file:/data/
    depends_on:
      - se-redis
      - se-mysql
      - se-nacos
    networks:
      - network-se
    restart: always
@@ -105,26 +87,9 @@
      - ./system:/data
    environment:
      TZ: Asia/Shanghai
    entrypoint: java -jar /data/se-modules-system.jar --spring.config.location=file:/data/
    entrypoint: /bin/sh -c "sleep 30 && java -jar /data/se-modules-system.jar --spring.config.location=file:/data/"
    depends_on:
      - se-redis
      - se-mysql
      - se-nacos
    networks:
      - network-se
    restart: always
  # se-file
  se-file:
    image: openjdk:8-jre
#    ports:
#      - 9300:9300
    volumes:
      - ./file/logs:/logs
      - ./file:/data
    environment:
      TZ: Asia/Shanghai
    entrypoint: java -jar /data/se-modules-file.jar --spring.config.location=file:/data/
    depends_on:
      - se-mysql
      - se-nacos
    networks:
docker-compose/docker-compose_241121.yml
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,169 @@
version : '3.8'
services:
  # mysql
  se-mysql:
    image: mysql:5.7
    ports:
      - 3307:3306
    volumes:
      - ./mysql/logs:/logs
      - ./mysql/data:/var/lib/mysql
      - ./mysql/conf:/etc/mysql/conf.d
      - ./mysql/initdb:/docker-entrypoint-initdb.d
    command: [
          'mysqld',
          '--innodb-buffer-pool-size=80M',
          '--character-set-server=utf8mb4',
          '--collation-server=utf8mb4_unicode_ci',
          '--default-time-zone=+8:00',
          '--lower-case-table-names=1'
        ]
    environment:
      TZ: Asia/Shanghai
      MYSQL_DATABASE: 'se-cloud'
      MYSQL_ROOT_PASSWORD: My_Sql_s!E_v5.7
    networks:
      - network-se
    restart: always
  # nacos
  se-nacos:
    image: nacos/nacos-server:v2.4.1
    environment:
      MODE: standalone
      TZ: Asia/Shanghai
    volumes:
      - ./nacos/logs/:/home/nacos/logs
      - ./nacos/conf/application.properties:/home/nacos/conf/application.properties
    ports:
#      - 7848:7848
      - 8848:8848
      - 9848:9848
#      - 9849:9849
    depends_on:
      - se-mysql
    networks:
      - network-se
    restart: always
  # redis
  se-redis:
    image: redis:latest
    ports:
      - 6379:6379
    volumes:
      - ./redis/data/redis.conf:/data/redis.conf
      - ./redis/data:/data
    command: redis-server /data/redis.conf
#    command: redis-server --requirepass Redis_s!E_6.2.6
    networks:
      - network-se
    restart: always
  # gateway
  se-gateway:
    image: openjdk:8-jre
#    ports:
#      - 9204:8080
    volumes:
      - ./gateway/logs:/logs
      - ./gateway:/data
    environment:
      TZ: Asia/Shanghai
    entrypoint: java -jar /data/se-gateway.jar --spring.config.location=file:/data/
    depends_on:
      - se-redis
      - se-mysql
      - se-nacos
#    links:
#      - se-redis
    networks:
      - network-se
    restart: always
  # auth
  se-auth:
    image: openjdk:8-jre
#    ports:
#      - 9200:9200
    volumes:
      - ./auth/logs:/logs
      - ./auth:/data
    environment:
      TZ: Asia/Shanghai
    entrypoint: java -jar /data/se-auth.jar --spring.config.location=file:/data/
    depends_on:
      - se-redis
      - se-mysql
      - se-nacos
    networks:
      - network-se
    restart: always
  # system
  se-system:
    image: openjdk:8-jre
#    ports:
#      - 9201:9201
    volumes:
      - ./system/logs:/logs
      - ./system:/data
    environment:
      TZ: Asia/Shanghai
    entrypoint: java -jar /data/se-modules-system.jar --spring.config.location=file:/data/
    depends_on:
      - se-redis
      - se-mysql
      - se-nacos
    networks:
      - network-se
    restart: always
  # se-file
  se-file:
    image: openjdk:8-jre
#    ports:
#      - 9300:9300
    volumes:
      - ./file/logs:/logs
      - ./file:/data
    environment:
      TZ: Asia/Shanghai
    entrypoint: java -jar /data/se-modules-file.jar --spring.config.location=file:/data/
    depends_on:
      - se-mysql
      - se-nacos
    networks:
      - network-se
    restart: always
  # se-wgcloud
  se-wgcloud:
    image: openjdk:8-jre
    ports:
      - 9999:9999
    volumes:
      - ./wgcloud/logs:/log
      - ./wgcloud:/data
    environment:
      TZ: Asia/Shanghai
    entrypoint: java -jar /data/wgcloud-server-release.jar --spring.config.location=file:/data/
    depends_on:
      - se-mysql
    networks:
      - network-se
    restart: always
  # nginx
  se-nginx:
    image: nginx:latest
    ports:
      - 8090:80
    environment:
      TZ: Asia/Shanghai
    volumes:
      - ./nginx/logs:/var/log/nginx
      - ./nginx/conf.d:/etc/nginx/conf.d
      - ./nginx/html:/usr/share/nginx/html
      - ./nginx/conf/nginx.conf:/etc/nginx/nginx.conf
    depends_on:
      - se-gateway
    networks:
      - network-se
    restart: always
# networks
networks:
  network-se:
    driver: bridge
docker-compose/mysql/initdb/se_cloud_20240629.sql
@@ -570,7 +570,7 @@
) engine=innodb auto_increment=6 comment = '参数配置表';
insert into sys_config values(1, '主框架页-默认皮肤样式名称',     'sys.index.skinName',       'skin-blue',     'Y', 'admin', sysdate(), '', null, '蓝色 skin-blue、绿色 skin-green、紫色 skin-purple、红色 skin-red、黄色 skin-yellow' );
insert into sys_config values(2, '用户管理-账号初始密码',         'sys.user.initPassword',    '123456',        'Y', 'admin', sysdate(), '', null, '初始化密码 123456' );
insert into sys_config values(2, '用户管理-账号初始密码',         'sys.user.initPassword',    '123456',        'Y', 'admin', sysdate(), '', null, '初始化密码' );
insert into sys_config values(3, '主框架页-侧边栏主题',           'sys.index.sideTheme',      'theme-dark',    'Y', 'admin', sysdate(), '', null, '深色主题theme-dark,浅色主题theme-light' );
insert into sys_config values(4, '账号自助-是否开启用户注册功能', 'sys.account.registerUser', 'false',         'Y', 'admin', sysdate(), '', null, '是否开启注册用户功能(true开启,false关闭)');
insert into sys_config values(5, '用户登录-黑名单列表',           'sys.login.blackIPList',    '',              'Y', 'admin', sysdate(), '', null, '设置登录IP黑名单限制,多个匹配项以;分隔,支持匹配(*通配、网段)');
docker-compose/mysql/initdb/se_cloud_20241119.sql
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,219 @@
-- DROP DATABASE IF EXISTS `se-cloud`;
CREATE DATABASE IF NOT EXISTS  `se-cloud` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
USE `se-cloud`;
-- ----------------------------
-- 01、软件表
-- ----------------------------
drop table if exists sys_soft;
create table sys_soft (
  soft_id           bigint(20)      not null auto_increment    comment '软件ID',
  name              varchar(200)    not null                   comment '名称',
  type              char(1)         default '0'                comment '类型(0-应用软件,1-数据库,2-中间件,3-操作系统)',
  lic               varchar(500)                               comment '许可',
  descr             varchar(500)                               comment '描述',
  args              varchar(8000)                              comment '参数',
  status            char(1)         default 0                  comment '状态(0正常 1停用)',
  create_by         varchar(64)     default ''                 comment '创建者',
  create_time       datetime                                   comment '创建时间',
  update_by         varchar(64)     default ''                 comment '更新者',
  update_time       datetime                                   comment '更新时间',
  remark            varchar(500)    default ''                 comment '备注',
  primary key (soft_id)
) engine=innodb auto_increment=1 comment = '软件表';
select * from sys_soft order by soft_id;
-- ----------------------------
-- 02、硬件表
-- ----------------------------
drop table if exists sys_hard;
create table sys_hard (
  hard_id           bigint(20)      not null auto_increment    comment '硬件ID',
  name              varchar(200)    not null                   comment '名称',
  cpu               varchar(20)                                comment 'CPU',
  mem               varchar(200)                               comment '内存',
  disk              varchar(200)                               comment '硬盘',
  net               varchar(200)                               comment '网络',
  descr             varchar(500)                               comment '描述',
  args              varchar(8000)                              comment '参数',
  status            char(1)         default 0                  comment '状态(0正常 1停用)',
  create_by         varchar(64)     default ''                 comment '创建者',
  create_time       datetime                                   comment '创建时间',
  update_by         varchar(64)     default ''                 comment '更新者',
  update_time       datetime                                   comment '更新时间',
  remark            varchar(500)    default ''                 comment '备注',
  primary key (hard_id)
) engine=innodb auto_increment=1 comment = '硬件表';
select * from sys_hard order by hard_id;
-- ----------------------------
-- 03、配置表
-- ----------------------------
drop table if exists sys_cfg;
create table sys_cfg (
  cfg_id            bigint(20)      not null auto_increment    comment '配置ID',
  name              varchar(200)    not null                   comment '名称',
  hard              varchar(4000)                              comment '硬件',
  soft              varchar(4000)                              comment '软件',
  args              varchar(4000)                              comment '参数',
  status            char(1)         default 0                  comment '状态(0正常 1停用)',
  create_by         varchar(64)     default ''                 comment '创建者',
  create_time       datetime                                   comment '创建时间',
  update_by         varchar(64)     default ''                 comment '更新者',
  update_time       datetime                                   comment '更新时间',
  remark            varchar(500)    default ''                 comment '备注',
  primary key (cfg_id)
) engine=innodb auto_increment=1 comment = '配置表';
select * from sys_cfg order by cfg_id;
-- ----------------------------
-- 04、资源表
-- ----------------------------
drop table if exists sys_res;
create table sys_res (
  res_id            bigint(20)      not null auto_increment    comment '资源ID',
  name              varchar(200)    not null                   comment '名称',
  type              char(1)         default '0'                comment '类型(0-其它,1-IP,2-数据库,3-消息中间件,4-共享文件,5-分系统软件,6-引擎)',
  descr             varchar(500)                               comment '描述',
  args              varchar(4000)                              comment '参数',
  status            char(1)         default 0                  comment '状态(0正常 1停用)',
  create_by         varchar(64)     default ''                 comment '创建者',
  create_time       datetime                                   comment '创建时间',
  update_by         varchar(64)     default ''                 comment '更新者',
  update_time       datetime                                   comment '更新时间',
  remark            varchar(500)    default ''                 comment '备注',
  primary key (res_id)
) engine=innodb auto_increment=1 comment = '资源表';
select * from sys_res order by res_id;
-- ----------------------------
-- 05、接口表
-- ----------------------------
drop table if exists sys_inte;
create table sys_inte (
  inte_id           bigint(20)      not null auto_increment    comment '接口ID',
  name              varchar(200)    not null                   comment '名称',
  type              char(1)         default '0'                comment '类型',
  descr             varchar(500)                               comment '描述',
  url               varchar(4000)                              comment 'URL',
  data              varchar(500)                               comment '数据',
  args              varchar(4000)                              comment '参数',
  status            char(1)         default 0                  comment '状态(0正常 1停用)',
  create_by         varchar(64)     default ''                 comment '创建者',
  create_time       datetime                                   comment '创建时间',
  update_by         varchar(64)     default ''                 comment '更新者',
  update_time       datetime                                   comment '更新时间',
  remark            varchar(500)    default ''                 comment '备注',
  primary key (inte_id)
) engine=innodb auto_increment=1 comment = '接口表';
select * from sys_inte order by inte_id;
-- ----------------------------
-- 06、告警表
-- ----------------------------
drop table if exists sys_warn;
create table sys_warn (
  warn_id           bigint(20)      not null auto_increment    comment '告警ID',
  name              varchar(200)    not null                   comment '名称',
  type              char(1)         default '0'                comment '类型',
  descr             varchar(500)                               comment '描述',
  data              varchar(500)                               comment '数据',
  args              varchar(4000)                              comment '参数',
  status            char(1)         default 0                  comment '状态(0正常 1停用)',
  create_by         varchar(64)     default ''                 comment '创建者',
  create_time       datetime                                   comment '创建时间',
  update_by         varchar(64)     default ''                 comment '更新者',
  update_time       datetime                                   comment '更新时间',
  remark            varchar(500)    default ''                 comment '备注',
  primary key (warn_id)
) engine=innodb auto_increment=1 comment = '告警表';
select * from sys_warn order by warn_id;
-- ----------------------------
-- 07、控制表
-- ----------------------------
drop table if exists sys_ctrl;
create table sys_ctrl (
  ctrl_id           bigint(20)      not null auto_increment    comment '控制ID',
  name              varchar(200)    not null                   comment '名称',
  type              char(1)         default '0'                comment '类型',
  descr             varchar(500)                               comment '描述',
  data              varchar(500)                               comment '数据',
  args              varchar(4000)                              comment '参数',
  status            char(1)         default 0                  comment '状态(0正常 1停用)',
  create_by         varchar(64)     default ''                 comment '创建者',
  create_time       datetime                                   comment '创建时间',
  update_by         varchar(64)     default ''                 comment '更新者',
  update_time       datetime                                   comment '更新时间',
  remark            varchar(500)    default ''                 comment '备注',
  primary key (ctrl_id)
) engine=innodb auto_increment=1 comment = '控制表';
select * from sys_ctrl order by ctrl_id;
-- ----------------------------
-- 08、控制日志表
-- ----------------------------
drop table if exists sys_ctrl_log;
create table sys_ctrl_log (
  log_id            bigint(20)      not null auto_increment    comment '日志ID',
  title             varchar(100)    not null                   comment '标题',
  type              char(1)         default '0'                comment '类型',
  ip                varchar(50)                                comment 'IP',
  url               varchar(4000)                              comment 'URL',
  method            varchar(20)                                comment '方法',
  args              varchar(4000)                              comment '参数',
  msg               varchar(2000)                              comment '消息',
  oper              varchar(50)                                comment '操作员',
  time              datetime        default now()              comment '操作时间',
  remark            varchar(500)    default ''                 comment '备注',
  primary key (log_id)
) engine=innodb auto_increment=1 comment = '控制日志表';
select * from sys_ctrl_log order by log_id;
-- ----------------------------
-- 09、角色控制表
-- ----------------------------
drop table if exists sys_role_ctrl;
create table sys_role_ctrl (
  role_id   bigint(20) not null comment '角色ID',
  ctrl_id   bigint(20) not null comment '控制ID',
  primary key(role_id, ctrl_id)
) engine=innodb comment = '角色控制表';
select * from sys_role_ctrl;
-- ----------------------------
-- 10、角色接口表
-- ----------------------------
drop table if exists sys_role_inte;
create table sys_role_inte (
  role_id   bigint(20) not null comment '角色ID',
  inte_id   bigint(20) not null comment '接口ID',
  primary key(role_id, inte_id)
) engine=innodb comment = '角色接口表';
select * from sys_role_inte;
-- ----------------------------
-- 11、角色资源表
-- ----------------------------
drop table if exists sys_role_res;
create table sys_role_res (
  role_id   bigint(20) not null comment '角色ID',
  res_id   bigint(20) not null comment '资源ID',
  primary key(role_id, res_id)
) engine=innodb comment = '角色资源表';
select * from sys_role_res;
docker-compose/nginx/conf/nginx.conf
@@ -38,7 +38,8 @@
            proxy_set_header REMOTE-HOST $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            
            proxy_pass http://se-file:9300/;
            #proxy_pass http://se-file:9300/;
            proxy_pass http://se-system:9201/;
        }
        
        location /prod-api/ {
se-api/se-api-system/se-api-system.iml
@@ -6,12 +6,12 @@
    </facet>
  </component>
  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
    <output url="file://$MODULE_DIR$/../../se-api/se-api-system/target/classes" />
    <output-test url="file://$MODULE_DIR$/../../se-api/se-api-system/target/test-classes" />
    <content url="file://$MODULE_DIR$/../../se-api/se-api-system">
      <sourceFolder url="file://$MODULE_DIR$/../../se-api/se-api-system/src/main/java" isTestSource="false" />
      <sourceFolder url="file://$MODULE_DIR$/../../se-api/se-api-system/src/main/resources" type="java-resource" />
      <excludeFolder url="file://$MODULE_DIR$/../../se-api/se-api-system/target" />
    <output url="file://$MODULE_DIR$/target/classes" />
    <output-test url="file://$MODULE_DIR$/target/test-classes" />
    <content url="file://$MODULE_DIR$">
      <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
      <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
      <excludeFolder url="file://$MODULE_DIR$/target" />
    </content>
    <orderEntry type="jdk" jdkName="jdk-1.8" jdkType="JavaSDK" />
    <orderEntry type="sourceFolder" forTests="false" />
se-auth/src/main/java/com/se/auth/controller/HealthController.java
@@ -5,13 +5,8 @@
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
 * å¥åº·æŽ§åˆ¶å™¨
 *
 * @author WWW
 * @date 2024-08-24
 */
@RestController
@SuppressWarnings("ALL")
public class HealthController extends BaseController {
    @GetMapping("/health")
    public long test() {
se-auth/src/main/resources/bootstrap.yml
@@ -25,4 +25,4 @@
        # å…±äº«é…ç½®
        shared-configs:
          - application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
enableEncrypt: false
enableEncrypt: true
se-cloud.iml
ÎļþÒÑɾ³ý
se-common/se-common-core/se-common-core.iml
@@ -6,12 +6,12 @@
    </facet>
  </component>
  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
    <output url="file://$MODULE_DIR$/../../se-common/se-common-core/target/classes" />
    <output-test url="file://$MODULE_DIR$/../../se-common/se-common-core/target/test-classes" />
    <content url="file://$MODULE_DIR$/../../se-common/se-common-core">
      <sourceFolder url="file://$MODULE_DIR$/../../se-common/se-common-core/src/main/java" isTestSource="false" />
      <sourceFolder url="file://$MODULE_DIR$/../../se-common/se-common-core/src/main/resources" type="java-resource" />
      <excludeFolder url="file://$MODULE_DIR$/../../se-common/se-common-core/target" />
    <output url="file://$MODULE_DIR$/target/classes" />
    <output-test url="file://$MODULE_DIR$/target/test-classes" />
    <content url="file://$MODULE_DIR$">
      <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
      <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
      <excludeFolder url="file://$MODULE_DIR$/target" />
    </content>
    <orderEntry type="jdk" jdkName="jdk-1.8" jdkType="JavaSDK" />
    <orderEntry type="sourceFolder" forTests="false" />
se-common/se-common-core/src/main/java/com/se/common/core/utils/AesUtils.java
@@ -4,77 +4,30 @@
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;
/**
 * AES加密工具
 *
 * @author WWW
 * @date 2024-08-25
 */
@SuppressWarnings("ALL")
public class AesUtils {
    /**
     * å¯†é’¥é•¿åº¦å¿…须是16
     */
    private static final String DEFAULT_KEY = "A#s_zZ3seRve_k.y";
    private static final String KEY_ALGORITHM = "AES";
    /**
     * ç®—法
     */
    private static final String ALGORITHMSTR = "AES/ECB/PKCS5Padding";
    /**
     * aes解密
     *
     * @param encrypt å†…容
     * @return
     * @throws Exception
     */
    public static String decrypt(String encrypt) throws Exception {
        return decrypt(encrypt, DEFAULT_KEY);
    }
    /**
     * aes加密
     *
     * @param content å†…容
     * @return
     * @throws Exception
     */
    public static String encrypt(String content) throws Exception {
        return encrypt(content, DEFAULT_KEY);
    }
    /**
     * base 64 encode
     *
     * @param bytes å¾…编码的byte[]
     * @return ç¼–码后的base64 code
     */
    private static String base64Encode(byte[] bytes) {
        return Base64.getEncoder().encodeToString(bytes);
    }
    /**
     * base 64 decode
     *
     * @param base64Code å¾…解码的base64 code
     * @return è§£ç åŽçš„byte[]
     * @throws Exception
     */
    private static byte[] base64Decode(String base64Code) {
        return StringUtils.isEmpty(base64Code) ? null : Base64.getDecoder().decode(base64Code);
    }
    /**
     * AES加密
     *
     * @param content    å¾…加密的内容
     * @param encryptKey åР坆坆钥
     * @return åŠ å¯†åŽçš„byte[]
     * @throws Exception
     */
    private static byte[] aesEncryptToBytes(String content, String encryptKey) throws Exception {
        // KeyGenerator kGen = KeyGenerator.getInstance(KEY_ALGORITHM)
        // kGen.init(128)
@@ -85,38 +38,14 @@
        return cipher.doFinal(content.getBytes("utf-8"));
    }
    /**
     * AES加密为base 64 code
     *
     * @param content    å¾…加密的内容
     * @param encryptKey åР坆坆钥
     * @return åŠ å¯†åŽçš„base 64 code
     * @throws Exception
     */
    public static String encrypt(String content, String encryptKey) throws Exception {
        return base64Encode(aesEncryptToBytes(content, encryptKey));
    }
    /**
     * å°†base 64 code AES解密
     *
     * @param encryptStr å¾…解密的base 64 code
     * @param decryptKey è§£å¯†å¯†é’¥
     * @return è§£å¯†åŽçš„string
     * @throws Exception
     */
    public static String decrypt(String encryptStr, String decryptKey) throws Exception {
        return StringUtils.isEmpty(encryptStr) ? null : aesDecryptByBytes(base64Decode(encryptStr), decryptKey);
    }
    /**
     * AES解密
     *
     * @param encryptBytes å¾…解密的byte[]
     * @param decryptKey   è§£å¯†å¯†é’¥
     * @return è§£å¯†åŽçš„String
     * @throws Exception
     */
    private static String aesDecryptByBytes(byte[] encryptBytes, String decryptKey) throws Exception {
        // KeyGenerator kGen = KeyGenerator.getInstance(KEY_ALGORITHM)
        // kGen.init(128)
se-common/se-common-core/src/main/java/com/se/common/core/utils/RsaUtils.java
@@ -16,53 +16,24 @@
import java.util.HashMap;
import java.util.Map;
/**
 * RSA工具类
 *
 * @author WWW
 * @date 2024-08-25
 */
@SuppressWarnings("ALL")
public class RsaUtils {
    /**
     * ç§é’¥
     */
    private static String privateKey;
    /**
     * å…¬é’¥
     */
    private static String publicKey;
    /**
     * å¯†é’¥ç®—法
     */
    private static final String KEY_ALGORITHM = "RSA";
    /**
     * RSA密钥长度:1024 æˆ– 2048
     */
    private static final int DEFAULT_RSA_KEY_SIZE = 1024;
    /**
     * æ—¥å¿—
     */
    private static final Logger log = LoggerFactory.getLogger(RsaUtils.class);
    /**
     * ç”Ÿæˆå…¬ç§é’¥
     */
    public static void generate() {
        Map<String, String> result = generateRsaKey(DEFAULT_RSA_KEY_SIZE);
        System.out.println("公钥为:" + result.get("publicKey"));
        System.out.println("私钥为:" + result.get("privateKey"));
    }
    /**
     * èŽ·å–RSA加密私钥
     *
     * @return
     * @throws IOException
     */
    public static String getPrivateKey() throws IOException {
        if (privateKey == null) {
            InputStream inPrivate = new ClassPathResource("config" + File.separator + "rsa_private_key.txt").getInputStream();
@@ -73,12 +44,6 @@
        return privateKey;
    }
    /**
     * èŽ·å–RSA加密公钥
     *
     * @return
     * @throws IOException
     */
    public static String getPublicKey() throws IOException {
        if (publicKey == null) {
            InputStream inPrivate = new ClassPathResource("config" + File.separator + "rsa_public_key.txt").getInputStream();
@@ -89,13 +54,6 @@
        return publicKey;
    }
    /**
     * è¯»å–文本文件
     *
     * @param fileName æ–‡ä»¶è·¯å¾„
     * @return
     * @throws IOException
     */
    public static String readFile(String fileName) throws IOException {
        File file = new File(fileName);
        BufferedReader br = new BufferedReader(new FileReader(file));
@@ -111,13 +69,6 @@
        return result.toString();
    }
    /**
     * æŠŠinputStream转成String
     *
     * @param is
     * @return
     * @throws IOException
     */
    private static String inputStream2String(InputStream is) throws IOException {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
@@ -132,28 +83,18 @@
        return str;
    }
    /**
     * ç”ŸæˆRSA的公私钥
     *
     * @param keySize 1025 æˆ– 2048
     * @return
     */
    public static Map<String, String> generateRsaKey(int keySize) {
        Map<String, String> result = new HashMap<>(2);
        try {
            KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance(KEY_ALGORITHM);
            // åˆå§‹åŒ–密钥对生成器,密钥大小为1024 2048位
            keyPairGen.initialize(keySize, new SecureRandom());
            // ç”Ÿæˆä¸€ä¸ªå¯†é’¥å¯¹ï¼Œä¿å­˜åœ¨keyPair中
            KeyPair keyPair = keyPairGen.generateKeyPair();
            // å¾—到公钥字符串
            String pub = new String(Base64.encodeBase64(keyPair.getPublic().getEncoded()));
            result.put("publicKey", pub);
            // å¾—到私钥字符串
            String pri = new String(Base64.encodeBase64(keyPair.getPrivate().getEncoded()));
            result.put("privateKey", pri);
        } catch (Exception ex) {
@@ -163,22 +104,13 @@
        return result;
    }
    /**
     * RSA私钥解密
     *
     * @param str åŠ å¯†çš„å­—ç¬¦ä¸²
     * @return è§£å¯†å­—符串
     * @throws Exception åŠ å¯†è¿‡ç¨‹ä¸­çš„å¼‚å¸¸ä¿¡æ¯
     */
    public static String decrypt(String str) throws Exception {
        // 64位解码加密后的字符串
        byte[] inputByte = Base64.decodeBase64(str.getBytes(StandardCharsets.UTF_8));
        // Base64编码的私钥
        byte[] decoded = Base64.decodeBase64(getPrivateKey());
        RSAPrivateKey priKey = (RSAPrivateKey) KeyFactory.getInstance("RSA").generatePrivate(new PKCS8EncodedKeySpec(decoded));
        // RSA解密:RSA/ECB/NoPadding
        // RSA/ECB/NoPadding
        Cipher cipher = Cipher.getInstance("RSA");
        cipher.init(Cipher.DECRYPT_MODE, priKey);
@@ -187,20 +119,11 @@
        return outStr;
    }
    /**
     * RSA公钥加密
     *
     * @param str éœ€è¦åŠ å¯†çš„å­—ç¬¦ä¸²
     * @return å¯†æ–‡
     * @throws Exception åŠ å¯†è¿‡ç¨‹ä¸­çš„å¼‚å¸¸ä¿¡æ¯
     */
    public static String encrypt(String str) throws Exception {
        // Base64编码的公钥
        byte[] decoded = Base64.decodeBase64(getPublicKey());
        RSAPublicKey pubKey = (RSAPublicKey) KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(decoded));
        // RSA加密:RSA/ECB/NoPadding
        Cipher cipher = Cipher.getInstance("RSA");
        cipher.init(Cipher.ENCRYPT_MODE, pubKey);
se-common/se-common-core/src/main/java/com/se/common/core/web/domain/BaseEntity.java
@@ -13,6 +13,7 @@
 * 
 * @author admin
 */
@SuppressWarnings("ALL")
public class BaseEntity implements Serializable
{
    private static final long serialVersionUID = 1L;
@@ -39,6 +40,7 @@
    private String remark;
    /** è¯·æ±‚参数 */
    //@TableField(exist = false)
    @JsonInclude(JsonInclude.Include.NON_EMPTY)
    private Map<String, Object> params;
se-common/se-common-datascope/se-common-datascope.iml
@@ -6,12 +6,12 @@
    </facet>
  </component>
  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
    <output url="file://$MODULE_DIR$/../../se-common/se-common-datascope/target/classes" />
    <output-test url="file://$MODULE_DIR$/../../se-common/se-common-datascope/target/test-classes" />
    <content url="file://$MODULE_DIR$/../../se-common/se-common-datascope">
      <sourceFolder url="file://$MODULE_DIR$/../../se-common/se-common-datascope/src/main/java" isTestSource="false" />
      <sourceFolder url="file://$MODULE_DIR$/../../se-common/se-common-datascope/src/main/resources" type="java-resource" />
      <excludeFolder url="file://$MODULE_DIR$/../../se-common/se-common-datascope/target" />
    <output url="file://$MODULE_DIR$/target/classes" />
    <output-test url="file://$MODULE_DIR$/target/test-classes" />
    <content url="file://$MODULE_DIR$">
      <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
      <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
      <excludeFolder url="file://$MODULE_DIR$/target" />
    </content>
    <orderEntry type="jdk" jdkName="jdk-1.8" jdkType="JavaSDK" />
    <orderEntry type="sourceFolder" forTests="false" />
se-common/se-common-datasource/se-common-datasource.iml
@@ -6,11 +6,11 @@
    </facet>
  </component>
  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
    <output url="file://$MODULE_DIR$/../../se-common/se-common-datasource/target/classes" />
    <output-test url="file://$MODULE_DIR$/../../se-common/se-common-datasource/target/test-classes" />
    <content url="file://$MODULE_DIR$/../../se-common/se-common-datasource">
      <sourceFolder url="file://$MODULE_DIR$/../../se-common/se-common-datasource/src/main/java" isTestSource="false" />
      <excludeFolder url="file://$MODULE_DIR$/../../se-common/se-common-datasource/target" />
    <output url="file://$MODULE_DIR$/target/classes" />
    <output-test url="file://$MODULE_DIR$/target/test-classes" />
    <content url="file://$MODULE_DIR$">
      <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
      <excludeFolder url="file://$MODULE_DIR$/target" />
    </content>
    <orderEntry type="jdk" jdkName="jdk-1.8" jdkType="JavaSDK" />
    <orderEntry type="sourceFolder" forTests="false" />
se-common/se-common-log/se-common-log.iml
@@ -6,12 +6,12 @@
    </facet>
  </component>
  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
    <output url="file://$MODULE_DIR$/../../se-common/se-common-log/target/classes" />
    <output-test url="file://$MODULE_DIR$/../../se-common/se-common-log/target/test-classes" />
    <content url="file://$MODULE_DIR$/../../se-common/se-common-log">
      <sourceFolder url="file://$MODULE_DIR$/../../se-common/se-common-log/src/main/java" isTestSource="false" />
      <sourceFolder url="file://$MODULE_DIR$/../../se-common/se-common-log/src/main/resources" type="java-resource" />
      <excludeFolder url="file://$MODULE_DIR$/../../se-common/se-common-log/target" />
    <output url="file://$MODULE_DIR$/target/classes" />
    <output-test url="file://$MODULE_DIR$/target/test-classes" />
    <content url="file://$MODULE_DIR$">
      <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
      <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
      <excludeFolder url="file://$MODULE_DIR$/target" />
    </content>
    <orderEntry type="jdk" jdkName="jdk-1.8" jdkType="JavaSDK" />
    <orderEntry type="sourceFolder" forTests="false" />
se-common/se-common-redis/se-common-redis.iml
@@ -6,12 +6,12 @@
    </facet>
  </component>
  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
    <output url="file://$MODULE_DIR$/../../se-common/se-common-redis/target/classes" />
    <output-test url="file://$MODULE_DIR$/../../se-common/se-common-redis/target/test-classes" />
    <content url="file://$MODULE_DIR$/../../se-common/se-common-redis">
      <sourceFolder url="file://$MODULE_DIR$/../../se-common/se-common-redis/src/main/java" isTestSource="false" />
      <sourceFolder url="file://$MODULE_DIR$/../../se-common/se-common-redis/src/main/resources" type="java-resource" />
      <excludeFolder url="file://$MODULE_DIR$/../../se-common/se-common-redis/target" />
    <output url="file://$MODULE_DIR$/target/classes" />
    <output-test url="file://$MODULE_DIR$/target/test-classes" />
    <content url="file://$MODULE_DIR$">
      <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
      <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
      <excludeFolder url="file://$MODULE_DIR$/target" />
    </content>
    <orderEntry type="jdk" jdkName="jdk-1.8" jdkType="JavaSDK" />
    <orderEntry type="sourceFolder" forTests="false" />
se-common/se-common-seata/se-common-seata.iml
@@ -6,10 +6,10 @@
    </facet>
  </component>
  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
    <output url="file://$MODULE_DIR$/../../se-common/se-common-seata/target/classes" />
    <output-test url="file://$MODULE_DIR$/../../se-common/se-common-seata/target/test-classes" />
    <content url="file://$MODULE_DIR$/../../se-common/se-common-seata">
      <excludeFolder url="file://$MODULE_DIR$/../../se-common/se-common-seata/target" />
    <output url="file://$MODULE_DIR$/target/classes" />
    <output-test url="file://$MODULE_DIR$/target/test-classes" />
    <content url="file://$MODULE_DIR$">
      <excludeFolder url="file://$MODULE_DIR$/target" />
    </content>
    <orderEntry type="jdk" jdkName="jdk-1.8" jdkType="JavaSDK" />
    <orderEntry type="sourceFolder" forTests="false" />
se-common/se-common-security/se-common-security.iml
@@ -6,12 +6,12 @@
    </facet>
  </component>
  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
    <output url="file://$MODULE_DIR$/../../se-common/se-common-security/target/classes" />
    <output-test url="file://$MODULE_DIR$/../../se-common/se-common-security/target/test-classes" />
    <content url="file://$MODULE_DIR$/../../se-common/se-common-security">
      <sourceFolder url="file://$MODULE_DIR$/../../se-common/se-common-security/src/main/java" isTestSource="false" />
      <sourceFolder url="file://$MODULE_DIR$/../../se-common/se-common-security/src/main/resources" type="java-resource" />
      <excludeFolder url="file://$MODULE_DIR$/../../se-common/se-common-security/target" />
    <output url="file://$MODULE_DIR$/target/classes" />
    <output-test url="file://$MODULE_DIR$/target/test-classes" />
    <content url="file://$MODULE_DIR$">
      <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
      <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
      <excludeFolder url="file://$MODULE_DIR$/target" />
    </content>
    <orderEntry type="jdk" jdkName="jdk-1.8" jdkType="JavaSDK" />
    <orderEntry type="sourceFolder" forTests="false" />
se-common/se-common-swagger/se-common-swagger.iml
@@ -11,12 +11,12 @@
    </facet>
  </component>
  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
    <output url="file://$MODULE_DIR$/../../se-common/se-common-swagger/target/classes" />
    <output-test url="file://$MODULE_DIR$/../../se-common/se-common-swagger/target/test-classes" />
    <content url="file://$MODULE_DIR$/../../se-common/se-common-swagger">
      <sourceFolder url="file://$MODULE_DIR$/../../se-common/se-common-swagger/src/main/java" isTestSource="false" />
      <sourceFolder url="file://$MODULE_DIR$/../../se-common/se-common-swagger/src/main/resources" type="java-resource" />
      <excludeFolder url="file://$MODULE_DIR$/../../se-common/se-common-swagger/target" />
    <output url="file://$MODULE_DIR$/target/classes" />
    <output-test url="file://$MODULE_DIR$/target/test-classes" />
    <content url="file://$MODULE_DIR$">
      <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
      <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
      <excludeFolder url="file://$MODULE_DIR$/target" />
    </content>
    <orderEntry type="jdk" jdkName="jdk-1.8" jdkType="JavaSDK" />
    <orderEntry type="sourceFolder" forTests="false" />
se-gateway/se-gateway.iml
@@ -6,12 +6,12 @@
    </facet>
  </component>
  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
    <output url="file://$MODULE_DIR$/../se-gateway/target/classes" />
    <output-test url="file://$MODULE_DIR$/../se-gateway/target/test-classes" />
    <content url="file://$MODULE_DIR$/../se-gateway">
      <sourceFolder url="file://$MODULE_DIR$/../se-gateway/src/main/java" isTestSource="false" />
      <sourceFolder url="file://$MODULE_DIR$/../se-gateway/src/main/resources" type="java-resource" />
      <excludeFolder url="file://$MODULE_DIR$/../se-gateway/target" />
    <output url="file://$MODULE_DIR$/target/classes" />
    <output-test url="file://$MODULE_DIR$/target/test-classes" />
    <content url="file://$MODULE_DIR$">
      <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
      <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
      <excludeFolder url="file://$MODULE_DIR$/target" />
    </content>
    <orderEntry type="jdk" jdkName="jdk-1.8" jdkType="JavaSDK" />
    <orderEntry type="sourceFolder" forTests="false" />
se-gateway/src/main/java/com/se/gateway/handler/HealthController.java
@@ -5,13 +5,8 @@
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
 * å¥åº·æŽ§åˆ¶å™¨
 *
 * @author WWW
 * @date 2024-08-24
 */
@RestController
@SuppressWarnings("ALL")
@RequestMapping("/gateway")
public class HealthController extends BaseController {
    @GetMapping("/health")
se-modules/se-file/se-file.iml
ÎļþÒÑɾ³ý
se-modules/se-gen/se-gen.iml
ÎļþÒÑɾ³ý
se-modules/se-job/se-job.iml
ÎļþÒÑɾ³ý
se-modules/se-system/pom.xml
@@ -85,6 +85,26 @@
            <version>1.18.22</version>
            <optional>true</optional>
        </dependency>
        <!-- FastDFS -->
        <dependency>
            <groupId>com.github.tobato</groupId>
            <artifactId>fastdfs-client</artifactId>
        </dependency>
        <!-- Minio -->
        <dependency>
            <groupId>io.minio</groupId>
            <artifactId>minio</artifactId>
            <version>8.2.2</version>
            <!--            <version>${minio.version}</version>-->
        </dependency>
        <!-- SE Api System -->
        <dependency>
            <groupId>com.se</groupId>
            <artifactId>se-api-system</artifactId>
        </dependency>
    </dependencies>
    <build>
se-modules/se-system/se-system.iml
ÎļþÒÑɾ³ý
se-modules/se-system/src/main/java/com/se/system/config/MinioConfig.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,82 @@
package com.se.system.config;
import io.minio.MinioClient;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
 * Minio é…ç½®ä¿¡æ¯
 *
 * @author admin
 */
@Configuration
@ConfigurationProperties(prefix = "minio")
public class MinioConfig
{
    /**
     * æœåŠ¡åœ°å€
     */
    private String url;
    /**
     * ç”¨æˆ·å
     */
    private String accessKey;
    /**
     * å¯†ç 
     */
    private String secretKey;
    /**
     * å­˜å‚¨æ¡¶åç§°
     */
    private String bucketName;
    public String getUrl()
    {
        return url;
    }
    public void setUrl(String url)
    {
        this.url = url;
    }
    public String getAccessKey()
    {
        return accessKey;
    }
    public void setAccessKey(String accessKey)
    {
        this.accessKey = accessKey;
    }
    public String getSecretKey()
    {
        return secretKey;
    }
    public void setSecretKey(String secretKey)
    {
        this.secretKey = secretKey;
    }
    public String getBucketName()
    {
        return bucketName;
    }
    public void setBucketName(String bucketName)
    {
        this.bucketName = bucketName;
    }
    @Bean
    public MinioClient getMinioClient()
    {
        return MinioClient.builder().endpoint(url).credentials(accessKey, secretKey).build();
    }
}
se-modules/se-system/src/main/java/com/se/system/config/ResourcesConfig.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,51 @@
package com.se.system.config;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import java.io.File;
/**
 * é€šç”¨æ˜ å°„配置
 *
 * @author admin
 */
@Configuration
public class ResourcesConfig implements WebMvcConfigurer
{
    /**
     * ä¸Šä¼ æ–‡ä»¶å­˜å‚¨åœ¨æœ¬åœ°çš„æ ¹è·¯å¾„
     */
    @Value("${file.path}")
    private String localFilePath;
    /**
     * èµ„源映射路径 å‰ç¼€
     */
    @Value("${file.prefix}")
    public String localFilePrefix;
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry)
    {
        /** æœ¬åœ°æ–‡ä»¶ä¸Šä¼ è·¯å¾„ */
        registry.addResourceHandler(localFilePrefix + "/**")
                .addResourceLocations("file:" + localFilePath + File.separator);
    }
    /**
     * å¼€å¯è·¨åŸŸ
     */
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        // è®¾ç½®å…è®¸è·¨åŸŸçš„路由
        registry.addMapping(localFilePrefix  + "/**")
                // è®¾ç½®å…è®¸è·¨åŸŸè¯·æ±‚的域名
                .allowedOrigins("*")
                // è®¾ç½®å…è®¸çš„æ–¹æ³•
                .allowedMethods("GET");
    }
}
se-modules/se-system/src/main/java/com/se/system/controller/HealthController.java
@@ -4,13 +4,8 @@
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
/**
 * å¥åº·æŽ§åˆ¶å™¨
 *
 * @author WWW
 * @date 2024-08-24
 */
@RestController
@SuppressWarnings("ALL")
public class HealthController extends BaseController {
    @GetMapping("/health")
    public long test() {
se-modules/se-system/src/main/java/com/se/system/controller/SysConfigController.java
@@ -5,6 +5,7 @@
import com.se.system.domain.SysConfig;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
@@ -22,7 +23,7 @@
import com.se.common.log.enums.BusinessType;
import com.se.common.security.annotation.RequiresPermissions;
import com.se.common.security.utils.SecurityUtils;
import com.se.system.service.ISysConfigService;
import com.se.system.service.inte.ISysConfigService;
/**
 * å‚数配置 ä¿¡æ¯æ“ä½œå¤„理
@@ -31,8 +32,13 @@
 */
@RestController
@RequestMapping("/config")
public class SysConfigController extends BaseController
{
@SuppressWarnings("ALL")
public class SysConfigController extends BaseController {
    @Value("${enableEncrypt}")
    boolean enableEncrypt;
    private final static String PWD_KEY = "sys.user.initPassword";
    @Autowired
    private ISysConfigService configService;
@@ -41,19 +47,33 @@
     */
    @RequiresPermissions("system:config:list")
    @GetMapping("/list")
    public TableDataInfo list(SysConfig config)
    {
    public TableDataInfo list(SysConfig config) throws Exception {
        startPage();
        List<SysConfig> list = configService.selectConfigList(config);
        /*if (enableEncrypt && null != list) {
            for (SysConfig cfg : list) {
                if (null != cfg && PWD_KEY.equals(cfg.getConfigKey()) && !StringUtils.isEmpty(cfg.getConfigValue())) {
                    cfg.setConfigValue(AesUtils.encrypt(cfg.getConfigValue()));
                }
            }
        }*/
        return getDataTable(list);
    }
    @Log(title = "参数管理", businessType = BusinessType.EXPORT)
    @RequiresPermissions("system:config:export")
    @PostMapping("/export")
    public void export(HttpServletResponse response, SysConfig config)
    {
    public void export(HttpServletResponse response, SysConfig config) {
        List<SysConfig> list = configService.selectConfigList(config);
        /*if (enableEncrypt && null != list) {
            for (SysConfig cfg : list) {
                if (null != cfg && PWD_KEY.equals(cfg.getConfigKey()) && !StringUtils.isEmpty(cfg.getConfigValue())) {
                    cfg.setConfigValue(AesUtils.encrypt(cfg.getConfigValue()));
                }
            }
        }*/
        ExcelUtil<SysConfig> util = new ExcelUtil<SysConfig>(SysConfig.class);
        util.exportExcel(response, list, "参数数据");
    }
@@ -62,18 +82,26 @@
     * æ ¹æ®å‚数编号获取详细信息
     */
    @GetMapping(value = "/{configId}")
    public AjaxResult getInfo(@PathVariable Long configId)
    {
        return success(configService.selectConfigById(configId));
    public AjaxResult getInfo(@PathVariable Long configId) throws Exception {
        SysConfig config = configService.selectConfigById(configId);
        /*if ((enableEncrypt && null != config && PWD_KEY.equals(config.getConfigKey()) && !StringUtils.isEmpty(config.getConfigValue())) {
            config.setConfigValue(AesUtils.encrypt(config.getConfigValue()));
        }*/
        return success(config);
    }
    /**
     * æ ¹æ®å‚数键名查询参数值
     */
    @GetMapping(value = "/configKey/{configKey}")
    public AjaxResult getConfigKey(@PathVariable String configKey)
    {
        return success(configService.selectConfigByKey(configKey));
    public AjaxResult getConfigKey(@PathVariable String configKey) throws Exception {
        String val = configService.selectConfigByKey(configKey);
        /*if (enableEncrypt && PWD_KEY.equals(configKey) && !StringUtils.isEmpty(val)) {
            val = AesUtils.encrypt(val);
        }*/
        return success(val);
    }
    /**
@@ -82,10 +110,8 @@
    @RequiresPermissions("system:config:add")
    @Log(title = "参数管理", businessType = BusinessType.INSERT)
    @PostMapping
    public AjaxResult add(@Validated @RequestBody SysConfig config)
    {
        if (!configService.checkConfigKeyUnique(config))
        {
    public AjaxResult add(@Validated @RequestBody SysConfig config) {
        if (!configService.checkConfigKeyUnique(config)) {
            return error("新增参数'" + config.getConfigName() + "'失败,参数键名已存在");
        }
        config.setCreateBy(SecurityUtils.getUsername());
@@ -98,13 +124,15 @@
    @RequiresPermissions("system:config:edit")
    @Log(title = "参数管理", businessType = BusinessType.UPDATE)
    @PutMapping
    public AjaxResult edit(@Validated @RequestBody SysConfig config)
    {
        if (!configService.checkConfigKeyUnique(config))
        {
    public AjaxResult edit(@Validated @RequestBody SysConfig config) throws Exception {
        if (!configService.checkConfigKeyUnique(config)) {
            return error("修改参数'" + config.getConfigName() + "'失败,参数键名已存在");
        }
        config.setUpdateBy(SecurityUtils.getUsername());
        /*if ((enableEncrypt && PWD_KEY.equals(config.getConfigKey()) && !StringUtils.isEmpty(config.getConfigValue())){
            config.setConfigValue(AesUtils.decrypt(config.getConfigValue()));
        }*/
        return toAjax(configService.updateConfig(config));
    }
@@ -114,8 +142,7 @@
    @RequiresPermissions("system:config:remove")
    @Log(title = "参数管理", businessType = BusinessType.DELETE)
    @DeleteMapping("/{configIds}")
    public AjaxResult remove(@PathVariable Long[] configIds)
    {
    public AjaxResult remove(@PathVariable Long[] configIds) {
        configService.deleteConfigByIds(configIds);
        return success();
    }
@@ -126,8 +153,7 @@
    @RequiresPermissions("system:config:remove")
    @Log(title = "参数管理", businessType = BusinessType.CLEAN)
    @DeleteMapping("/refreshCache")
    public AjaxResult refreshCache()
    {
    public AjaxResult refreshCache() {
        configService.resetConfigCache();
        return success();
    }
se-modules/se-system/src/main/java/com/se/system/controller/SysDeptController.java
@@ -21,7 +21,7 @@
import com.se.common.security.annotation.RequiresPermissions;
import com.se.common.security.utils.SecurityUtils;
import com.se.system.api.domain.SysDept;
import com.se.system.service.ISysDeptService;
import com.se.system.service.inte.ISysDeptService;
/**
 * éƒ¨é—¨ä¿¡æ¯
se-modules/se-system/src/main/java/com/se/system/controller/SysDictDataController.java
@@ -23,8 +23,8 @@
import com.se.common.security.annotation.RequiresPermissions;
import com.se.common.security.utils.SecurityUtils;
import com.se.system.api.domain.SysDictData;
import com.se.system.service.ISysDictDataService;
import com.se.system.service.ISysDictTypeService;
import com.se.system.service.inte.ISysDictDataService;
import com.se.system.service.inte.ISysDictTypeService;
/**
 * æ•°æ®å­—典信息
se-modules/se-system/src/main/java/com/se/system/controller/SysDictTypeController.java
@@ -21,7 +21,7 @@
import com.se.common.security.annotation.RequiresPermissions;
import com.se.common.security.utils.SecurityUtils;
import com.se.system.api.domain.SysDictType;
import com.se.system.service.ISysDictTypeService;
import com.se.system.service.inte.ISysDictTypeService;
/**
 * æ•°æ®å­—典信息
se-modules/se-system/src/main/java/com/se/system/controller/SysFileController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,49 @@
package com.se.system.controller;
import com.se.common.core.domain.R;
import com.se.common.core.utils.file.FileUtils;
import com.se.system.api.domain.SysFile;
import com.se.system.service.inte.ISysFileService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
/**
 * æ–‡ä»¶è¯·æ±‚处理
 *
 * @author admin
 */
@RestController
public class SysFileController
{
    private static final Logger log = LoggerFactory.getLogger(SysFileController.class);
    @Resource
    private ISysFileService sysFileService;
    /**
     * æ–‡ä»¶ä¸Šä¼ è¯·æ±‚
     */
    @PostMapping("upload")
    public R<SysFile> upload(MultipartFile file)
    {
        try
        {
            // ä¸Šä¼ å¹¶è¿”回访问地址
            String url = sysFileService.uploadFile(file);
            SysFile sysFile = new SysFile();
            sysFile.setName(FileUtils.getName(url));
            sysFile.setUrl(url);
            return R.ok(sysFile);
        }
        catch (Exception e)
        {
            log.error("上传文件失败", e);
            return R.fail(e.getMessage());
        }
    }
}
se-modules/se-system/src/main/java/com/se/system/controller/SysLogininforController.java
@@ -21,7 +21,7 @@
import com.se.common.security.annotation.InnerAuth;
import com.se.common.security.annotation.RequiresPermissions;
import com.se.system.api.domain.SysLogininfor;
import com.se.system.service.ISysLogininforService;
import com.se.system.service.inte.ISysLogininforService;
/**
 * ç³»ç»Ÿè®¿é—®è®°å½•
se-modules/se-system/src/main/java/com/se/system/controller/SysMenuController.java
@@ -21,7 +21,7 @@
import com.se.common.log.enums.BusinessType;
import com.se.common.security.annotation.RequiresPermissions;
import com.se.common.security.utils.SecurityUtils;
import com.se.system.service.ISysMenuService;
import com.se.system.service.inte.ISysMenuService;
/**
 * èœå•信息
se-modules/se-system/src/main/java/com/se/system/controller/SysNoticeController.java
@@ -20,7 +20,7 @@
import com.se.common.log.enums.BusinessType;
import com.se.common.security.annotation.RequiresPermissions;
import com.se.common.security.utils.SecurityUtils;
import com.se.system.service.ISysNoticeService;
import com.se.system.service.inte.ISysNoticeService;
/**
 * å…¬å‘Š ä¿¡æ¯æ“ä½œå¤„ç†
se-modules/se-system/src/main/java/com/se/system/controller/SysOperlogController.java
@@ -19,7 +19,7 @@
import com.se.common.security.annotation.InnerAuth;
import com.se.common.security.annotation.RequiresPermissions;
import com.se.system.api.domain.SysOperLog;
import com.se.system.service.ISysOperLogService;
import com.se.system.service.inte.ISysOperLogService;
/**
 * æ“ä½œæ—¥å¿—记录
se-modules/se-system/src/main/java/com/se/system/controller/SysPostController.java
@@ -22,7 +22,7 @@
import com.se.common.log.enums.BusinessType;
import com.se.common.security.annotation.RequiresPermissions;
import com.se.common.security.utils.SecurityUtils;
import com.se.system.service.ISysPostService;
import com.se.system.service.inte.ISysPostService;
/**
 * å²—位信息操作处理
se-modules/se-system/src/main/java/com/se/system/controller/SysProfileController.java
@@ -27,7 +27,7 @@
import com.se.system.api.domain.SysFile;
import com.se.system.api.domain.SysUser;
import com.se.system.api.model.LoginUser;
import com.se.system.service.ISysUserService;
import com.se.system.service.inte.ISysUserService;
/**
 * ä¸ªäººä¿¡æ¯ ä¸šåŠ¡å¤„ç†
@@ -98,11 +98,13 @@
    @Log(title = "个人信息", businessType = BusinessType.UPDATE)
    @PutMapping("/updatePwd")
    public AjaxResult updatePwd(String oldPassword, String newPassword) throws Exception {
        if (enableEncrypt) {
            oldPassword = AesUtils.decrypt(oldPassword);
            newPassword = AesUtils.decrypt(newPassword);
        }
        String username = SecurityUtils.getUsername();
        SysUser user = userService.selectUserByUserName(username);
        if (enableEncrypt && !StringUtils.isEmpty(user.getPassword())) {
            user.setPassword(AesUtils.decrypt(user.getPassword()));
        }
        String password = user.getPassword();
        if (!SecurityUtils.matchesPassword(oldPassword, password)) {
            return error("修改密码失败,旧密码错误");
se-modules/se-system/src/main/java/com/se/system/controller/SysRoleController.java
@@ -25,9 +25,9 @@
import com.se.system.api.domain.SysDept;
import com.se.system.api.domain.SysRole;
import com.se.system.api.domain.SysUser;
import com.se.system.service.ISysDeptService;
import com.se.system.service.ISysRoleService;
import com.se.system.service.ISysUserService;
import com.se.system.service.inte.ISysDeptService;
import com.se.system.service.inte.ISysRoleService;
import com.se.system.service.inte.ISysUserService;
/**
 * è§’色信息
se-modules/se-system/src/main/java/com/se/system/controller/SysUserController.java
@@ -7,6 +7,7 @@
import javax.servlet.http.HttpServletResponse;
import com.se.common.core.utils.AesUtils;
import com.se.system.service.inte.*;
import org.apache.commons.lang3.ArrayUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
@@ -36,7 +37,6 @@
import com.se.system.api.domain.SysRole;
import com.se.system.api.domain.SysUser;
import com.se.system.api.model.LoginUser;
import com.se.system.service.*;
/**
 * ç”¨æˆ·ä¿¡æ¯
se-modules/se-system/src/main/java/com/se/system/controller/SysUserOnlineController.java
@@ -22,7 +22,7 @@
import com.se.common.redis.service.RedisService;
import com.se.common.security.annotation.RequiresPermissions;
import com.se.system.api.model.LoginUser;
import com.se.system.service.ISysUserOnlineService;
import com.se.system.service.inte.ISysUserOnlineService;
/**
 * åœ¨çº¿ç”¨æˆ·ç›‘控
se-modules/se-system/src/main/java/com/se/system/controller/TokenController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,95 @@
package com.se.system.controller;
import com.se.common.core.domain.R;
import com.se.common.core.utils.AesUtils;
import com.se.common.core.utils.JwtUtils;
import com.se.common.core.utils.StringUtils;
import com.se.common.security.auth.AuthUtil;
import com.se.common.security.service.TokenService;
import com.se.common.security.utils.SecurityUtils;
import com.se.system.api.model.LoginUser;
import com.se.system.domain.LoginBody;
import com.se.system.service.SysLoginService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
/**
 * token æŽ§åˆ¶
 *
 * @author admin
 */
@RestController
public class TokenController {
    @Resource
    private TokenService tokenService;
    @Autowired
    private SysLoginService sysLoginService;
    @Value("${enableEncrypt}")
    boolean enableEncrypt;
    @PostMapping("login")
    public R<?> login(@RequestBody LoginBody form) throws Exception {
        if (enableEncrypt && !StringUtils.isEmpty(form.getPassword())) {
            form.setPassword(AesUtils.decrypt(form.getPassword()));
        }
        // ç”¨æˆ·ç™»å½•
        LoginUser userInfo = sysLoginService.login(form.getUsername(), form.getPassword());
        // èŽ·å–ç™»å½•token
        return R.ok(tokenService.createToken(userInfo));
    }
    @GetMapping("validate")
    @PostMapping("validate")
    public R<Object> validate(HttpServletRequest request) {
        try {
            boolean flag = false;
            String token = SecurityUtils.getToken(request);
            if (!StringUtils.isNotEmpty(token)) {
                String userName = JwtUtils.getUserName(token);
                flag = !StringUtils.isEmpty(userName);
            }
            return R.ok(flag);
        } catch (Exception ex) {
            return R.fail(ex.getMessage());
        }
    }
    @DeleteMapping("logout")
    public R<?> logout(HttpServletRequest request) {
        String token = SecurityUtils.getToken(request);
        if (StringUtils.isNotEmpty(token)) {
            String username = JwtUtils.getUserName(token);
            // åˆ é™¤ç”¨æˆ·ç¼“存记录
            AuthUtil.logoutByToken(token);
            // è®°å½•用户退出日志
            sysLoginService.logout(username);
        }
        return R.ok();
    }
    @PostMapping("refresh")
    public R<?> refresh(HttpServletRequest request) {
        LoginUser loginUser = tokenService.getLoginUser(request);
        if (StringUtils.isNotNull(loginUser)) {
            // åˆ·æ–°ä»¤ç‰Œæœ‰æ•ˆæœŸ
            tokenService.refreshToken(loginUser);
            return R.ok();
        }
        return R.ok();
    }
    /*@PostMapping("register")
    public R<?> register(@RequestBody RegisterBody registerBody)
    {
        // ç”¨æˆ·æ³¨å†Œ
        sysLoginService.register(registerBody.getUsername(), registerBody.getPassword());
        return R.ok();
    }*/
}
se-modules/se-system/src/main/java/com/se/system/domain/LoginBody.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,39 @@
package com.se.system.domain;
/**
 * ç”¨æˆ·ç™»å½•对象
 *
 * @author admin
 */
public class LoginBody
{
    /**
     * ç”¨æˆ·å
     */
    private String username;
    /**
     * ç”¨æˆ·å¯†ç 
     */
    private String password;
    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;
    }
}
se-modules/se-system/src/main/java/com/se/system/domain/RegisterBody.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,11 @@
package com.se.system.domain;
/**
 * ç”¨æˆ·æ³¨å†Œå¯¹è±¡
 *
 * @author admin
 */
public class RegisterBody extends LoginBody
{
}
se-modules/se-system/src/main/java/com/se/system/mapper/SysMenuMapper.java
@@ -29,7 +29,7 @@
    /**
     * æ ¹æ®ç”¨æˆ·æŸ¥è¯¢ç³»ç»Ÿèœå•列表
     *
     * @param menu èœå•信息
     * @param menu   èœå•信息
     * @return èœå•列表
     */
    public List<SysMenu> selectMenuListByUserId(SysMenu menu);
@@ -61,7 +61,7 @@
     * æ ¹æ®ç”¨æˆ·ID查询菜单
     *
     * @param userId ç”¨æˆ·ID
     * @param mark   æ ‡è¯†
     * @param mark   èœå•标识
     * @return èœå•列表
     */
    public List<SysMenu> selectMenuTreeByUserId(@Param("userId") Long userId, @Param("mark") String mark);
@@ -128,7 +128,7 @@
     * æ ¹æ®ç”¨æˆ·ID和标识查询菜单
     *
     * @param userId ç”¨æˆ·ID
     * @param mark   æ ‡è¯†
     * @param mark   èœå•标识
     * @return èœå•集合
     */
    List<SysMenu> selectMenusByUserIdAndMark(@Param("userId") Long userId, @Param("mark") String mark);
se-modules/se-system/src/main/java/com/se/system/service/SysLoginService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,163 @@
package com.se.system.service;
import com.se.common.core.constant.CacheConstants;
import com.se.common.core.constant.Constants;
import com.se.common.core.constant.SecurityConstants;
import com.se.common.core.constant.UserConstants;
import com.se.common.core.domain.R;
import com.se.common.core.enums.UserStatus;
import com.se.common.core.exception.ServiceException;
import com.se.common.core.text.Convert;
import com.se.common.core.utils.DateUtils;
import com.se.common.core.utils.StringUtils;
import com.se.common.core.utils.ip.IpUtils;
import com.se.common.redis.service.RedisService;
import com.se.common.security.utils.SecurityUtils;
import com.se.system.api.RemoteUserService;
import com.se.system.api.domain.SysUser;
import com.se.system.api.model.LoginUser;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
/**
 * ç™»å½•校验方法
 *
 * @author admin
 */
@Component
public class SysLoginService
{
    @Autowired
    private RemoteUserService remoteUserService;
    @Autowired
    private SysPasswordService passwordService;
    @Autowired
    private SysRecordLogService recordLogService;
    @Resource
    private RedisService redisService;
    /**
     * ç™»å½•
     */
    public LoginUser login(String username, String password)
    {
        // ç”¨æˆ·åæˆ–密码为空 é”™è¯¯
        if (StringUtils.isAnyBlank(username, password))
        {
            recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "用户/密码必须填写");
            throw new ServiceException("用户/密码必须填写");
        }
        // å¯†ç å¦‚果不在指定范围内 é”™è¯¯
        if (password.length() < UserConstants.PASSWORD_MIN_LENGTH
                || password.length() > UserConstants.PASSWORD_MAX_LENGTH)
        {
            recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "用户密码不在指定范围");
            throw new ServiceException("用户密码不在指定范围");
        }
        // ç”¨æˆ·åä¸åœ¨æŒ‡å®šèŒƒå›´å†… é”™è¯¯
        if (username.length() < UserConstants.USERNAME_MIN_LENGTH
                || username.length() > UserConstants.USERNAME_MAX_LENGTH)
        {
            recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "用户名不在指定范围");
            throw new ServiceException("用户名不在指定范围");
        }
        // IP黑名单校验
        String blackStr = Convert.toStr(redisService.getCacheObject(CacheConstants.SYS_LOGIN_BLACKIPLIST));
        if (IpUtils.isMatchedIp(blackStr, IpUtils.getIpAddr()))
        {
            recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "很遗憾,访问IP已被列入系统黑名单");
            throw new ServiceException("很遗憾,访问IP已被列入系统黑名单");
        }
        // æŸ¥è¯¢ç”¨æˆ·ä¿¡æ¯
        R<LoginUser> userResult = remoteUserService.getUserInfo(username, SecurityConstants.INNER);
        if (StringUtils.isNull(userResult) || StringUtils.isNull(userResult.getData()))
        {
            recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "登录用户不存在");
            throw new ServiceException("登录用户:" + username + " ä¸å­˜åœ¨");
        }
        if (R.FAIL == userResult.getCode())
        {
            throw new ServiceException(userResult.getMsg());
        }
        LoginUser userInfo = userResult.getData();
        SysUser user = userResult.getData().getSysUser();
        if (UserStatus.DELETED.getCode().equals(user.getDelFlag()))
        {
            recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "对不起,您的账号已被删除");
            throw new ServiceException("对不起,您的账号:" + username + " å·²è¢«åˆ é™¤");
        }
        if (UserStatus.DISABLE.getCode().equals(user.getStatus()))
        {
            recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "用户已停用,请联系管理员");
            throw new ServiceException("对不起,您的账号:" + username + " å·²åœç”¨");
        }
        passwordService.validate(user, password);
        recordLogService.recordLogininfor(username, Constants.LOGIN_SUCCESS, "登录成功");
        recordLoginInfo(user.getUserId());
        return userInfo;
    }
    /**
     * è®°å½•登录信息
     *
     * @param userId ç”¨æˆ·ID
     */
    public void recordLoginInfo(Long userId)
    {
        SysUser sysUser = new SysUser();
        sysUser.setUserId(userId);
        // æ›´æ–°ç”¨æˆ·ç™»å½•IP
        sysUser.setLoginIp(IpUtils.getIpAddr());
        // æ›´æ–°ç”¨æˆ·ç™»å½•æ—¶é—´
        sysUser.setLoginDate(DateUtils.getNowDate());
        remoteUserService.recordUserLogin(sysUser, SecurityConstants.INNER);
    }
    public void logout(String loginName)
    {
        recordLogService.recordLogininfor(loginName, Constants.LOGOUT, "退出成功");
    }
    /**
     * æ³¨å†Œ
     */
    public void register(String username, String password)
    {
        // ç”¨æˆ·åæˆ–密码为空 é”™è¯¯
        if (StringUtils.isAnyBlank(username, password))
        {
            throw new ServiceException("用户/密码必须填写");
        }
        if (username.length() < UserConstants.USERNAME_MIN_LENGTH
                || username.length() > UserConstants.USERNAME_MAX_LENGTH)
        {
            throw new ServiceException("账户长度必须在2到20个字符之间");
        }
        if (password.length() < UserConstants.PASSWORD_MIN_LENGTH
                || password.length() > UserConstants.PASSWORD_MAX_LENGTH)
        {
            throw new ServiceException("密码长度必须在5到20个字符之间");
        }
        // æ³¨å†Œç”¨æˆ·ä¿¡æ¯
        SysUser sysUser = new SysUser();
        sysUser.setUserName(username);
        sysUser.setNickName(username);
        sysUser.setPassword(SecurityUtils.encryptPassword(password));
        R<?> registerResult = remoteUserService.registerUserInfo(sysUser, SecurityConstants.INNER);
        if (R.FAIL == registerResult.getCode())
        {
            throw new ServiceException(registerResult.getMsg());
        }
        recordLogService.recordLogininfor(username, Constants.REGISTER, "注册成功");
    }
}
se-modules/se-system/src/main/java/com/se/system/service/SysPasswordService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,87 @@
package com.se.system.service;
import com.se.common.core.constant.CacheConstants;
import com.se.common.core.constant.Constants;
import com.se.common.core.exception.ServiceException;
import com.se.common.redis.service.RedisService;
import com.se.common.security.utils.SecurityUtils;
import com.se.system.api.domain.SysUser;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.concurrent.TimeUnit;
/**
 * ç™»å½•密码方法
 *
 * @author admin
 */
@Component
@SuppressWarnings("ALL")
public class SysPasswordService
{
    @Autowired
    private RedisService redisService;
    private int maxRetryCount = CacheConstants.PASSWORD_MAX_RETRY_COUNT;
    private Long lockTime = CacheConstants.PASSWORD_LOCK_TIME;
    @Autowired
    private SysRecordLogService recordLogService;
    /**
     * ç™»å½•账户密码错误次数缓存键名
     *
     * @param username ç”¨æˆ·å
     * @return ç¼“存键key
     */
    private String getCacheKey(String username)
    {
        return CacheConstants.PWD_ERR_CNT_KEY + username;
    }
    public void validate(SysUser user, String password)
    {
        String username = user.getUserName();
        Integer retryCount = redisService.getCacheObject(getCacheKey(username));
        if (retryCount == null)
        {
            retryCount = 0;
        }
        /*if (retryCount >= Integer.valueOf(maxRetryCount).intValue())
        {
            String errMsg = String.format("密码输入错误%s次,帐户锁定%s分钟", maxRetryCount, lockTime);
            recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL,errMsg);
            throw new ServiceException(errMsg);
        }*/
        if (!matches(user, password))
        {
            retryCount = retryCount + 1;
            recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, String.format("密码输入错误%s次", retryCount));
            redisService.setCacheObject(getCacheKey(username), retryCount, lockTime, TimeUnit.MINUTES);
            throw new ServiceException("用户不存在/密码错误");
        }
        else
        {
            clearLoginRecordCache(username);
        }
    }
    public boolean matches(SysUser user, String rawPassword)
    {
        return SecurityUtils.matchesPassword(rawPassword, user.getPassword());
    }
    public void clearLoginRecordCache(String loginName)
    {
        if (redisService.hasKey(getCacheKey(loginName)))
        {
            redisService.deleteObject(getCacheKey(loginName));
        }
    }
}
se-modules/se-system/src/main/java/com/se/system/service/SysRecordLogService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,48 @@
package com.se.system.service;
import com.se.common.core.constant.Constants;
import com.se.common.core.constant.SecurityConstants;
import com.se.common.core.utils.StringUtils;
import com.se.common.core.utils.ip.IpUtils;
import com.se.system.api.RemoteLogService;
import com.se.system.api.domain.SysLogininfor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
/**
 * è®°å½•日志方法
 *
 * @author admin
 */
@Component
public class SysRecordLogService
{
    @Autowired
    private RemoteLogService remoteLogService;
    /**
     * è®°å½•登录信息
     *
     * @param username ç”¨æˆ·å
     * @param status çŠ¶æ€
     * @param message æ¶ˆæ¯å†…容
     * @return
     */
    public void recordLogininfor(String username, String status, String message)
    {
        SysLogininfor logininfor = new SysLogininfor();
        logininfor.setUserName(username);
        logininfor.setIpaddr(IpUtils.getIpAddr());
        logininfor.setMsg(message);
        // æ—¥å¿—状态
        if (StringUtils.equalsAny(status, Constants.LOGIN_SUCCESS, Constants.LOGOUT, Constants.REGISTER))
        {
            logininfor.setStatus(Constants.LOGIN_SUCCESS_STATUS);
        }
        else if (Constants.LOGIN_FAIL.equals(status))
        {
            logininfor.setStatus(Constants.LOGIN_FAIL_STATUS);
        }
        remoteLogService.saveLogininfor(logininfor, SecurityConstants.INNER);
    }
}
se-modules/se-system/src/main/java/com/se/system/service/impl/FastDfsSysFileServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,48 @@
package com.se.system.service.impl;
import com.alibaba.nacos.common.utils.IoUtils;
import com.github.tobato.fastdfs.domain.fdfs.StorePath;
import com.github.tobato.fastdfs.service.FastFileStorageClient;
import com.se.common.core.utils.file.FileTypeUtils;
import com.se.system.service.inte.ISysFileService;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import java.io.InputStream;
/**
 * FastDFS æ–‡ä»¶å­˜å‚¨
 *
 * @author admin
 */
@Service
public class FastDfsSysFileServiceImpl implements ISysFileService
{
    /**
     * åŸŸåæˆ–本机访问地址
     */
    @Value("${fdfs.domain}")
    public String domain;
    @Resource
    private FastFileStorageClient storageClient;
    /**
     * FastDfs文件上传接口
     *
     * @param file ä¸Šä¼ çš„æ–‡ä»¶
     * @return è®¿é—®åœ°å€
     * @throws Exception
     */
    @Override
    public String uploadFile(MultipartFile file) throws Exception
    {
        InputStream inputStream = file.getInputStream();
        StorePath storePath = storageClient.uploadFile(inputStream, file.getSize(),
                FileTypeUtils.getExtension(file), null);
        IoUtils.closeQuietly(inputStream);
        return domain + "/" + storePath.getFullPath();
    }
}
se-modules/se-system/src/main/java/com/se/system/service/impl/IsimUserService.java
@@ -6,12 +6,6 @@
import java.util.List;
/**
 * ISIM用户服务
 *
 * @author WWW
 * @date 2024-08-30
 */
@Slf4j
@Service
@SuppressWarnings("ALL")
se-modules/se-system/src/main/java/com/se/system/service/impl/LocalSysFileServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,51 @@
package com.se.system.service.impl;
import com.se.system.service.inte.ISysFileService;
import com.se.system.utils.FileUploadUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Primary;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
/**
 * æœ¬åœ°æ–‡ä»¶å­˜å‚¨
 *
 * @author admin
 */
@Primary
@Service
public class LocalSysFileServiceImpl implements ISysFileService
{
    /**
     * èµ„源映射路径 å‰ç¼€
     */
    @Value("${file.prefix}")
    public String localFilePrefix;
    /**
     * åŸŸåæˆ–本机访问地址
     */
    @Value("${file.domain}")
    public String domain;
    /**
     * ä¸Šä¼ æ–‡ä»¶å­˜å‚¨åœ¨æœ¬åœ°çš„æ ¹è·¯å¾„
     */
    @Value("${file.path}")
    private String localFilePath;
    /**
     * æœ¬åœ°æ–‡ä»¶ä¸Šä¼ æŽ¥å£
     *
     * @param file ä¸Šä¼ çš„æ–‡ä»¶
     * @return è®¿é—®åœ°å€
     * @throws Exception
     */
    @Override
    public String uploadFile(MultipartFile file) throws Exception
    {
        String name = FileUploadUtils.upload(localFilePath, file);
        String url = domain + localFilePrefix + name;
        return url;
    }
}
se-modules/se-system/src/main/java/com/se/system/service/impl/MinioSysFileServiceImpl.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,51 @@
package com.se.system.service.impl;
import com.alibaba.nacos.common.utils.IoUtils;
import com.se.system.config.MinioConfig;
import com.se.system.service.inte.ISysFileService;
import com.se.system.utils.FileUploadUtils;
import io.minio.MinioClient;
import io.minio.PutObjectArgs;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import java.io.InputStream;
/**
 * Minio æ–‡ä»¶å­˜å‚¨
 *
 * @author admin
 */
@Service
public class MinioSysFileServiceImpl implements ISysFileService
{
    @Resource
    private MinioConfig minioConfig;
    @Resource
    private MinioClient client;
    /**
     * Minio文件上传接口
     *
     * @param file ä¸Šä¼ çš„æ–‡ä»¶
     * @return è®¿é—®åœ°å€
     * @throws Exception
     */
    @Override
    public String uploadFile(MultipartFile file) throws Exception
    {
        String fileName = FileUploadUtils.extractFilename(file);
        InputStream inputStream = file.getInputStream();
        PutObjectArgs args = PutObjectArgs.builder()
                .bucket(minioConfig.getBucketName())
                .object(fileName)
                .stream(inputStream, file.getSize(), -1)
                .contentType(file.getContentType())
                .build();
        client.putObject(args);
        IoUtils.closeQuietly(inputStream);
        return minioConfig.getUrl() + "/" + minioConfig.getBucketName() + "/" + fileName;
    }
}
se-modules/se-system/src/main/java/com/se/system/service/impl/SyncUserService.java
@@ -11,12 +11,6 @@
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
 * ç”¨æˆ·åŒæ­¥æœåŠ¡
 *
 * @author WWW
 * @date 2024-08-30
 */
@Slf4j
@Service
@SuppressWarnings("ALL")
@@ -25,7 +19,6 @@
    IsimUserService isimUserService;
    public void insertUser(SysUser user) {
        // supplyAsync-带返回值,runAsync-无返回值
        CompletableFuture.runAsync(() -> {
            isimUserService.insertUser(user);
        });
se-modules/se-system/src/main/java/com/se/system/service/impl/SysConfigServiceImpl.java
@@ -14,7 +14,7 @@
import com.se.common.core.utils.StringUtils;
import com.se.common.redis.service.RedisService;
import com.se.system.mapper.SysConfigMapper;
import com.se.system.service.ISysConfigService;
import com.se.system.service.inte.ISysConfigService;
/**
 * å‚数配置 æœåŠ¡å±‚å®žçŽ°
se-modules/se-system/src/main/java/com/se/system/service/impl/SysDeptServiceImpl.java
@@ -19,7 +19,7 @@
import com.se.system.domain.vo.TreeSelect;
import com.se.system.mapper.SysDeptMapper;
import com.se.system.mapper.SysRoleMapper;
import com.se.system.service.ISysDeptService;
import com.se.system.service.inte.ISysDeptService;
/**
 * éƒ¨é—¨ç®¡ç† æœåŠ¡å®žçŽ°
se-modules/se-system/src/main/java/com/se/system/service/impl/SysDictDataServiceImpl.java
@@ -6,7 +6,7 @@
import com.se.common.security.utils.DictUtils;
import com.se.system.api.domain.SysDictData;
import com.se.system.mapper.SysDictDataMapper;
import com.se.system.service.ISysDictDataService;
import com.se.system.service.inte.ISysDictDataService;
/**
 * å­—å…¸ ä¸šåŠ¡å±‚å¤„ç†
se-modules/se-system/src/main/java/com/se/system/service/impl/SysDictTypeServiceImpl.java
@@ -16,7 +16,7 @@
import com.se.system.api.domain.SysDictType;
import com.se.system.mapper.SysDictDataMapper;
import com.se.system.mapper.SysDictTypeMapper;
import com.se.system.service.ISysDictTypeService;
import com.se.system.service.inte.ISysDictTypeService;
/**
 * å­—å…¸ ä¸šåŠ¡å±‚å¤„ç†
se-modules/se-system/src/main/java/com/se/system/service/impl/SysLogininforServiceImpl.java
@@ -5,7 +5,7 @@
import org.springframework.stereotype.Service;
import com.se.system.api.domain.SysLogininfor;
import com.se.system.mapper.SysLogininforMapper;
import com.se.system.service.ISysLogininforService;
import com.se.system.service.inte.ISysLogininforService;
/**
 * ç³»ç»Ÿè®¿é—®æ—¥å¿—情况信息 æœåŠ¡å±‚å¤„ç†
se-modules/se-system/src/main/java/com/se/system/service/impl/SysMenuServiceImpl.java
@@ -17,11 +17,10 @@
import com.se.common.core.utils.StringUtils;
import com.se.common.security.utils.SecurityUtils;
import com.se.system.api.domain.SysRole;
import com.se.system.api.domain.SysUser;
import com.se.system.domain.vo.*;
import com.se.system.mapper.SysMenuMapper;
import com.se.system.mapper.*;
import com.se.system.service.ISysMenuService;
import com.se.system.service.inte.ISysMenuService;
/**
 * èœå• ä¸šåŠ¡å±‚å¤„ç†
@@ -29,6 +28,7 @@
 * @author admin
 */
@Service
@SuppressWarnings("ALL")
public class SysMenuServiceImpl implements ISysMenuService {
    public static final String PREMISSION_STRING = "perms[\"{0}\"]";
@@ -60,15 +60,16 @@
     */
    @Override
    public List<SysMenu> selectMenuList(SysMenu menu, Long userId) {
        List<SysMenu> menuList = null;
        /*List<SysMenu> menuList = null;
        // ç®¡ç†å‘˜æ˜¾ç¤ºæ‰€æœ‰èœå•信息
        if (SysUser.isAdmin(userId)) {
            menuList = menuMapper.selectMenuList(menu);
        } else {
            menu.getParams().put("userId", userId);
            menuList = menuMapper.selectMenuListByUserId(menu);
        }
        return menuList;
        }*/
        menu.setMenuId(SecurityUtils.isAdmin(userId) ? null : userId);
        return menuMapper.selectMenuListByUserId(menu);
    }
    /**
@@ -111,7 +112,7 @@
     * æ ¹æ®ç”¨æˆ·ID查询菜单
     *
     * @param userId ç”¨æˆ·åç§°
     * @param mark   æ ‡è¯†
     * @param mark   èœå•标识
     * @return èœå•列表
     */
    @Override
@@ -337,8 +338,8 @@
    /**
     * èŽ·å–è·¯ç”±åç§°ï¼Œå¦‚æ²¡æœ‰é…ç½®è·¯ç”±åç§°åˆ™å–è·¯ç”±åœ°å€
     *
     * @param routerName è·¯ç”±åç§°
     * @param path       è·¯ç”±åœ°å€
     * @param name è·¯ç”±åç§°
     * @param path è·¯ç”±åœ°å€
     * @return è·¯ç”±åç§°ï¼ˆé©¼å³°æ ¼å¼ï¼‰
     */
    public String getRouteName(String name, String path) {
se-modules/se-system/src/main/java/com/se/system/service/impl/SysNoticeServiceImpl.java
@@ -6,7 +6,7 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.se.system.mapper.SysNoticeMapper;
import com.se.system.service.ISysNoticeService;
import com.se.system.service.inte.ISysNoticeService;
/**
 * å…¬å‘Š æœåŠ¡å±‚å®žçŽ°
se-modules/se-system/src/main/java/com/se/system/service/impl/SysOperLogServiceImpl.java
@@ -5,7 +5,7 @@
import org.springframework.stereotype.Service;
import com.se.system.api.domain.SysOperLog;
import com.se.system.mapper.SysOperLogMapper;
import com.se.system.service.ISysOperLogService;
import com.se.system.service.inte.ISysOperLogService;
/**
 * æ“ä½œæ—¥å¿— æœåŠ¡å±‚å¤„ç†
se-modules/se-system/src/main/java/com/se/system/service/impl/SysPermissionServiceImpl.java
@@ -1,12 +1,10 @@
package com.se.system.service.impl;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
import com.se.common.core.utils.StringUtils;
import com.se.system.domain.SysPost;
import com.se.system.mapper.SysPostMapper;
import org.springframework.beans.factory.annotation.Autowired;
@@ -14,9 +12,9 @@
import org.springframework.util.CollectionUtils;
import com.se.system.api.domain.SysRole;
import com.se.system.api.domain.SysUser;
import com.se.system.service.ISysMenuService;
import com.se.system.service.ISysPermissionService;
import com.se.system.service.ISysRoleService;
import com.se.system.service.inte.ISysMenuService;
import com.se.system.service.inte.ISysPermissionService;
import com.se.system.service.inte.ISysRoleService;
import javax.annotation.Resource;
se-modules/se-system/src/main/java/com/se/system/service/impl/SysPostServiceImpl.java
@@ -10,7 +10,7 @@
import com.se.common.core.utils.StringUtils;
import com.se.system.mapper.SysPostMapper;
import com.se.system.mapper.SysUserPostMapper;
import com.se.system.service.ISysPostService;
import com.se.system.service.inte.ISysPostService;
/**
 * å²—位信息 æœåŠ¡å±‚å¤„ç†
se-modules/se-system/src/main/java/com/se/system/service/impl/SysRoleServiceImpl.java
@@ -24,7 +24,7 @@
import com.se.system.mapper.SysRoleMapper;
import com.se.system.mapper.SysRoleMenuMapper;
import com.se.system.mapper.SysUserRoleMapper;
import com.se.system.service.ISysRoleService;
import com.se.system.service.inte.ISysRoleService;
/**
 * è§’色 ä¸šåŠ¡å±‚å¤„ç†
se-modules/se-system/src/main/java/com/se/system/service/impl/SysUserOnlineServiceImpl.java
@@ -4,7 +4,7 @@
import org.springframework.stereotype.Service;
import com.se.common.core.utils.StringUtils;
import com.se.system.api.model.LoginUser;
import com.se.system.service.ISysUserOnlineService;
import com.se.system.service.inte.ISysUserOnlineService;
/**
 * åœ¨çº¿ç”¨æˆ· æœåŠ¡å±‚å¤„ç†
se-modules/se-system/src/main/java/com/se/system/service/impl/SysUserServiceImpl.java
@@ -29,9 +29,9 @@
import com.se.system.mapper.SysUserMapper;
import com.se.system.mapper.SysUserPostMapper;
import com.se.system.mapper.SysUserRoleMapper;
import com.se.system.service.ISysConfigService;
import com.se.system.service.ISysDeptService;
import com.se.system.service.ISysUserService;
import com.se.system.service.inte.ISysConfigService;
import com.se.system.service.inte.ISysDeptService;
import com.se.system.service.inte.ISysUserService;
/**
 * ç”¨æˆ· ä¸šåŠ¡å±‚å¤„ç†
se-modules/se-system/src/main/java/com/se/system/service/inte/ISysConfigService.java
ÎļþÃû´Ó se-modules/se-system/src/main/java/com/se/system/service/ISysConfigService.java ÐÞ¸Ä
@@ -1,4 +1,4 @@
package com.se.system.service;
package com.se.system.service.inte;
import java.util.List;
import com.se.system.domain.*;
se-modules/se-system/src/main/java/com/se/system/service/inte/ISysDeptService.java
ÎļþÃû´Ó se-modules/se-system/src/main/java/com/se/system/service/ISysDeptService.java ÐÞ¸Ä
@@ -1,4 +1,4 @@
package com.se.system.service;
package com.se.system.service.inte;
import java.util.List;
import com.se.system.api.domain.SysDept;
se-modules/se-system/src/main/java/com/se/system/service/inte/ISysDictDataService.java
ÎļþÃû´Ó se-modules/se-system/src/main/java/com/se/system/service/ISysDictDataService.java ÐÞ¸Ä
@@ -1,4 +1,4 @@
package com.se.system.service;
package com.se.system.service.inte;
import java.util.List;
import com.se.system.api.domain.SysDictData;
se-modules/se-system/src/main/java/com/se/system/service/inte/ISysDictTypeService.java
ÎļþÃû´Ó se-modules/se-system/src/main/java/com/se/system/service/ISysDictTypeService.java ÐÞ¸Ä
@@ -1,4 +1,4 @@
package com.se.system.service;
package com.se.system.service.inte;
import java.util.List;
import com.se.system.api.domain.SysDictData;
se-modules/se-system/src/main/java/com/se/system/service/inte/ISysFileService.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,20 @@
package com.se.system.service.inte;
import org.springframework.web.multipart.MultipartFile;
/**
 * æ–‡ä»¶ä¸Šä¼ æŽ¥å£
 *
 * @author admin
 */
public interface ISysFileService
{
    /**
     * æ–‡ä»¶ä¸Šä¼ æŽ¥å£
     *
     * @param file ä¸Šä¼ çš„æ–‡ä»¶
     * @return è®¿é—®åœ°å€
     * @throws Exception
     */
    public String uploadFile(MultipartFile file) throws Exception;
}
se-modules/se-system/src/main/java/com/se/system/service/inte/ISysLogininforService.java
ÎļþÃû´Ó se-modules/se-system/src/main/java/com/se/system/service/ISysLogininforService.java ÐÞ¸Ä
@@ -1,4 +1,4 @@
package com.se.system.service;
package com.se.system.service.inte;
import java.util.List;
import com.se.system.api.domain.SysLogininfor;
se-modules/se-system/src/main/java/com/se/system/service/inte/ISysMenuService.java
ÎļþÃû´Ó se-modules/se-system/src/main/java/com/se/system/service/ISysMenuService.java ÐÞ¸Ä
@@ -1,4 +1,4 @@
package com.se.system.service;
package com.se.system.service.inte;
import java.util.List;
import java.util.Set;
@@ -49,7 +49,7 @@
     * æ ¹æ®ç”¨æˆ·ID查询菜单树信息
     *
     * @param userId ç”¨æˆ·ID
     * @param mark   æ ‡è¯†
     * @param mark   èœå•标识
     * @return èœå•列表
     */
    public List<SysMenu> selectMenuTreeByUserId(Long userId, String mark);
@@ -146,7 +146,7 @@
     * æ ¹æ®ç”¨æˆ·ID和标识查询菜单
     *
     * @param userId ç”¨æˆ·ID
     * @param mark   æ ‡è¯†
     * @param mark   èœå•标识
     * @return èœå•集合
     */
    List<SysMenu> selectMenusByUserIdAndMark(Long userId, String mark);
se-modules/se-system/src/main/java/com/se/system/service/inte/ISysNoticeService.java
ÎļþÃû´Ó se-modules/se-system/src/main/java/com/se/system/service/ISysNoticeService.java ÐÞ¸Ä
@@ -1,4 +1,4 @@
package com.se.system.service;
package com.se.system.service.inte;
import java.util.List;
import com.se.system.domain.SysNotice;
se-modules/se-system/src/main/java/com/se/system/service/inte/ISysOperLogService.java
ÎļþÃû´Ó se-modules/se-system/src/main/java/com/se/system/service/ISysOperLogService.java ÐÞ¸Ä
@@ -1,4 +1,4 @@
package com.se.system.service;
package com.se.system.service.inte;
import java.util.List;
import com.se.system.api.domain.SysOperLog;
se-modules/se-system/src/main/java/com/se/system/service/inte/ISysPermissionService.java
ÎļþÃû´Ó se-modules/se-system/src/main/java/com/se/system/service/ISysPermissionService.java ÐÞ¸Ä
@@ -1,4 +1,4 @@
package com.se.system.service;
package com.se.system.service.inte;
import java.util.List;
import java.util.Set;
se-modules/se-system/src/main/java/com/se/system/service/inte/ISysPostService.java
ÎļþÃû´Ó se-modules/se-system/src/main/java/com/se/system/service/ISysPostService.java ÐÞ¸Ä
@@ -1,4 +1,4 @@
package com.se.system.service;
package com.se.system.service.inte;
import java.util.List;
import com.se.system.domain.SysPost;
se-modules/se-system/src/main/java/com/se/system/service/inte/ISysRoleService.java
ÎļþÃû´Ó se-modules/se-system/src/main/java/com/se/system/service/ISysRoleService.java ÐÞ¸Ä
@@ -1,4 +1,4 @@
package com.se.system.service;
package com.se.system.service.inte;
import java.util.List;
import java.util.Set;
se-modules/se-system/src/main/java/com/se/system/service/inte/ISysUserOnlineService.java
ÎļþÃû´Ó se-modules/se-system/src/main/java/com/se/system/service/ISysUserOnlineService.java ÐÞ¸Ä
@@ -1,4 +1,4 @@
package com.se.system.service;
package com.se.system.service.inte;
import com.se.system.api.model.LoginUser;
import com.se.system.domain.SysUserOnline;
se-modules/se-system/src/main/java/com/se/system/service/inte/ISysUserService.java
ÎļþÃû´Ó se-modules/se-system/src/main/java/com/se/system/service/ISysUserService.java ÐÞ¸Ä
@@ -1,4 +1,4 @@
package com.se.system.service;
package com.se.system.service.inte;
import java.util.List;
import com.se.system.api.domain.SysUser;
se-modules/se-system/src/main/java/com/se/system/utils/FileUploadUtils.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,186 @@
package com.se.system.utils;
import com.se.common.core.exception.file.FileException;
import com.se.common.core.exception.file.FileNameLengthLimitExceededException;
import com.se.common.core.exception.file.FileSizeLimitExceededException;
import com.se.common.core.exception.file.InvalidExtensionException;
import com.se.common.core.utils.DateUtils;
import com.se.common.core.utils.StringUtils;
import com.se.common.core.utils.file.FileTypeUtils;
import com.se.common.core.utils.file.MimeTypeUtils;
import com.se.common.core.utils.uuid.Seq;
import org.apache.commons.io.FilenameUtils;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
import java.nio.file.Paths;
import java.util.Objects;
/**
 * æ–‡ä»¶ä¸Šä¼ å·¥å…·ç±»
 *
 * @author admin
 */
public class FileUploadUtils
{
    /**
     * é»˜è®¤å¤§å° 50M
     */
    public static final long DEFAULT_MAX_SIZE = 50 * 1024 * 1024L;
    /**
     * é»˜è®¤çš„æ–‡ä»¶åæœ€å¤§é•¿åº¦ 100
     */
    public static final int DEFAULT_FILE_NAME_LENGTH = 100;
    /**
     * æ ¹æ®æ–‡ä»¶è·¯å¾„上传
     *
     * @param baseDir ç›¸å¯¹åº”用的基目录
     * @param file ä¸Šä¼ çš„æ–‡ä»¶
     * @return æ–‡ä»¶åç§°
     * @throws IOException
     */
    public static final String upload(String baseDir, MultipartFile file) throws IOException
    {
        try
        {
            return upload(baseDir, file, MimeTypeUtils.DEFAULT_ALLOWED_EXTENSION);
        }
        catch (FileException fe)
        {
            throw new IOException(fe.getDefaultMessage(), fe);
        }
        catch (Exception e)
        {
            throw new IOException(e.getMessage(), e);
        }
    }
    /**
     * æ–‡ä»¶ä¸Šä¼ 
     *
     * @param baseDir ç›¸å¯¹åº”用的基目录
     * @param file ä¸Šä¼ çš„æ–‡ä»¶
     * @param allowedExtension ä¸Šä¼ æ–‡ä»¶ç±»åž‹
     * @return è¿”回上传成功的文件名
     * @throws FileSizeLimitExceededException å¦‚果超出最大大小
     * @throws FileNameLengthLimitExceededException æ–‡ä»¶åå¤ªé•¿
     * @throws IOException æ¯”如读写文件出错时
     * @throws InvalidExtensionException æ–‡ä»¶æ ¡éªŒå¼‚常
     */
    public static final String upload(String baseDir, MultipartFile file, String[] allowedExtension)
            throws FileSizeLimitExceededException, IOException, FileNameLengthLimitExceededException,
            InvalidExtensionException
    {
        int fileNamelength = Objects.requireNonNull(file.getOriginalFilename()).length();
        if (fileNamelength > FileUploadUtils.DEFAULT_FILE_NAME_LENGTH)
        {
            throw new FileNameLengthLimitExceededException(FileUploadUtils.DEFAULT_FILE_NAME_LENGTH);
        }
        assertAllowed(file, allowedExtension);
        String fileName = extractFilename(file);
        String absPath = getAbsoluteFile(baseDir, fileName).getAbsolutePath();
        file.transferTo(Paths.get(absPath));
        return getPathFileName(fileName);
    }
    /**
     * ç¼–码文件名
     */
    public static final String extractFilename(MultipartFile file)
    {
        return StringUtils.format("{}/{}_{}.{}", DateUtils.datePath(),
                FilenameUtils.getBaseName(file.getOriginalFilename()), Seq.getId(Seq.uploadSeqType), FileTypeUtils.getExtension(file));
    }
    private static final File getAbsoluteFile(String uploadDir, String fileName) throws IOException
    {
        File desc = new File(uploadDir + File.separator + fileName);
        if (!desc.exists())
        {
            if (!desc.getParentFile().exists())
            {
                desc.getParentFile().mkdirs();
            }
        }
        return desc.isAbsolute() ? desc : desc.getAbsoluteFile();
    }
    private static final String getPathFileName(String fileName) throws IOException
    {
        String pathFileName = "/" + fileName;
        return pathFileName;
    }
    /**
     * æ–‡ä»¶å¤§å°æ ¡éªŒ
     *
     * @param file ä¸Šä¼ çš„æ–‡ä»¶
     * @throws FileSizeLimitExceededException å¦‚果超出最大大小
     * @throws InvalidExtensionException æ–‡ä»¶æ ¡éªŒå¼‚常
     */
    public static final void assertAllowed(MultipartFile file, String[] allowedExtension)
            throws FileSizeLimitExceededException, InvalidExtensionException
    {
        long size = file.getSize();
        if (size > DEFAULT_MAX_SIZE)
        {
            throw new FileSizeLimitExceededException(DEFAULT_MAX_SIZE / 1024 / 1024);
        }
        String fileName = file.getOriginalFilename();
        String extension = FileTypeUtils.getExtension(file);
        if (allowedExtension != null && !isAllowedExtension(extension, allowedExtension))
        {
            if (allowedExtension == MimeTypeUtils.IMAGE_EXTENSION)
            {
                throw new InvalidExtensionException.InvalidImageExtensionException(allowedExtension, extension,
                        fileName);
            }
            else if (allowedExtension == MimeTypeUtils.FLASH_EXTENSION)
            {
                throw new InvalidExtensionException.InvalidFlashExtensionException(allowedExtension, extension,
                        fileName);
            }
            else if (allowedExtension == MimeTypeUtils.MEDIA_EXTENSION)
            {
                throw new InvalidExtensionException.InvalidMediaExtensionException(allowedExtension, extension,
                        fileName);
            }
            else if (allowedExtension == MimeTypeUtils.VIDEO_EXTENSION)
            {
                throw new InvalidExtensionException.InvalidVideoExtensionException(allowedExtension, extension,
                        fileName);
            }
            else
            {
                throw new InvalidExtensionException(allowedExtension, extension, fileName);
            }
        }
    }
    /**
     * åˆ¤æ–­MIME类型是否是允许的MIME类型
     *
     * @param extension ä¸Šä¼ æ–‡ä»¶ç±»åž‹
     * @param allowedExtension å…è®¸ä¸Šä¼ æ–‡ä»¶ç±»åž‹
     * @return true/false
     */
    public static final boolean isAllowedExtension(String extension, String[] allowedExtension)
    {
        for (String str : allowedExtension)
        {
            if (str.equalsIgnoreCase(extension))
            {
                return true;
            }
        }
        return false;
    }
}
se-modules/se-system/src/main/resources/logback.xml
@@ -58,7 +58,7 @@
    </appender>
    <!-- ç³»ç»Ÿæ¨¡å—日志级别控制:info,debug  -->
    <logger name="com.se" level="info" />
    <logger name="com.se" level="debug" />
    <!-- Spring日志级别控制  -->
    <logger name="org.springframework" level="warn" />
se-modules/se-system/src/main/resources/mapper/system/SysMenuMapper.xml
@@ -59,19 +59,26 @@
    <select id="selectMenuListByUserId" parameterType="SysMenu" resultMap="SysMenuResult">
        select distinct m.menu_id, m.parent_id, m.menu_name, m.path, m.component, m.`query`, m.route_name, m.visible, m.status, ifnull(m.perms,'') as perms, m.is_frame, m.is_cache, m.menu_type, m.icon, m.order_num, m.create_time, m.mark
        from sys_menu m
        left join sys_role_menu rm on m.menu_id = rm.menu_id
        left join sys_user_role ur on rm.role_id = ur.role_id
        left join sys_role ro on ur.role_id = ro.role_id
        where ur.user_id = #{params.userId}
        <if test="menuName != null and menuName != ''">
            AND m.menu_name like concat('%', #{menuName}, '%')
        </if>
        <if test="visible != null and visible != ''">
            AND m.visible = #{visible}
        </if>
        <if test="status != null and status != ''">
            AND m.status = #{status}
        </if>
            left join sys_role_menu rm on m.menu_id = rm.menu_id
            left join sys_user_role ur on rm.role_id = ur.role_id
            left join sys_role ro on ur.role_id = ro.role_id
        <where>
            <if test="menuId != null">
                ur.user_id = #{menuId}
            </if>
            <if test="menuName != null and menuName != ''">
                AND m.menu_name like concat('%', #{menuName}, '%')
            </if>
            <if test="visible != null and visible != ''">
                AND m.visible = #{visible}
            </if>
            <if test="status != null and status != ''">
                AND m.status = #{status}
            </if>
            <if test="mark != null and mark != ''">
                AND m.mark = #{mark}
            </if>
        </where>
        order by m.parent_id, m.order_num
    </select>
@@ -83,7 +90,7 @@
             left join sys_role ro on ur.role_id = ro.role_id
             left join sys_user u on ur.user_id = u.user_id
        where m.menu_type in ('M', 'C') and m.status = 0 and ro.status = 0
            <if test="userId != null and userId != ''">
            <if test="userId != null">
                and u.user_id = #{userId}
            </if>
            <if test="mark != null and mark != ''">
se-visual/se-monitor/ruoyi-visual-monitor.iml
ÎļþÒÑɾ³ý
se-visual/se-monitor/se-monitor.iml
ÎļþÒÑɾ³ý
˵Ã÷.txt
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,37 @@
http://192.168.11.203:8090/sso/login
http://192.168.11.203:8848/nacos,nAcos_!9#_admIn
docker-compose logs -f -n 50 se-system
se-gateway-dev.yml,修改
--------------------------------------------------------
uri: lb://se-auth â†’ uri: lb://se-system
uri: lb://se-file   â†’ uri: lb://se-system
--------------------------------------------------------
se-system-dev.yml,添加
--------------------------------------------------------
# æœ¬åœ°æ–‡ä»¶ä¸Šä¼ 
file:
    domain: http://127.0.0.1:9300
    path: D:/se/uploadPath
    prefix: /statics
# FastDFS配置
fdfs:
  domain: http://8.129.231.12
  soTimeout: 3000
  connectTimeout: 2000
  trackerList: 8.129.231.12:22122
# Minio配置
minio:
  url: http://8.129.231.12:9000
  accessKey: minioadmin
  secretKey: minioadmin
  bucketName: test
--------------------------------------------------------