| | |
| | | *.class |
| | | ###################################################################### |
| | | # Build Tools |
| | | |
| | | # Mobile Tools for Java (J2ME) |
| | | .mtj.tmp/ |
| | | .gradle |
| | | /build/ |
| | | !gradle/wrapper/gradle-wrapper.jar |
| | | |
| | | # Package Files # |
| | | *.jar |
| | | *.war |
| | | *.ear |
| | | target/ |
| | | !.mvn/wrapper/maven-wrapper.jar |
| | | |
| | | # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml |
| | | hs_err_pid* |
| | | ###################################################################### |
| | | # IDE |
| | | |
| | | ### STS ### |
| | | .apt_generated |
| | | .classpath |
| | | .factorypath |
| | | .project |
| | | .settings |
| | | .springBeans |
| | | |
| | | ### IntelliJ IDEA ### |
| | | .idea |
| | | *.iws |
| | | *.iml |
| | | *.ipr |
| | | |
| | | ### JRebel ### |
| | | rebel.xml |
| | | ### NetBeans ### |
| | | nbproject/private/ |
| | | build/* |
| | | nbbuild/ |
| | | dist/ |
| | | nbdist/ |
| | | .nb-gradle/ |
| | | |
| | | ###################################################################### |
| | | # Others |
| | | *.log |
| | | *.xml.versionsBackup |
| | | *.swp |
| | | *.yml |
| | | |
| | | !*/build/*.java |
| | | !*/build/*.html |
| | | !*/build/*.xml |
New file |
| | |
| | | MIT License |
| | | |
| | | Copyright (c) 2020 若依 |
| | | |
| | | Permission is hereby granted, free of charge, to any person obtaining a copy |
| | | of this software and associated documentation files (the "Software"), to deal |
| | | in the Software without restriction, including without limitation the rights |
| | | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
| | | copies of the Software, and to permit persons to whom the Software is |
| | | furnished to do so, subject to the following conditions: |
| | | |
| | | The above copyright notice and this permission notice shall be included in all |
| | | copies or substantial portions of the Software. |
| | | |
| | | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
| | | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
| | | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
| | | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
| | | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
| | | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
| | | SOFTWARE. |
New file |
| | |
| | | @echo off |
| | | echo. |
| | | echo [ÐÅÏ¢] ÇåÀí¹¤³ÌtargetÉú³É·¾¶¡£ |
| | | echo. |
| | | |
| | | %~d0 |
| | | cd %~dp0 |
| | | |
| | | cd .. |
| | | call mvn clean |
| | | |
| | | pause |
New file |
| | |
| | | @echo off |
| | | echo. |
| | | echo [ÐÅÏ¢] ´ò°üWeb¹¤³Ì£¬Éú³Éwar/jar°üÎļþ¡£ |
| | | echo. |
| | | |
| | | %~d0 |
| | | cd %~dp0 |
| | | |
| | | cd .. |
| | | call mvn clean package -Dmaven.test.skip=true |
| | | |
| | | pause |
New file |
| | |
| | | @echo off |
| | | echo. |
| | | echo [ÐÅÏ¢] ʹÓÃJarÃüÁîÔËÐÐAuth¹¤³Ì¡£ |
| | | echo. |
| | | |
| | | cd %~dp0 |
| | | cd ../ruoyi-auth/target |
| | | |
| | | set JAVA_OPTS=-Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m |
| | | |
| | | java -Dfile.encoding=utf-8 %JAVA_OPTS% -jar ruoyi-auth.jar |
| | | |
| | | cd bin |
| | | pause |
New file |
| | |
| | | @echo off |
| | | echo. |
| | | echo [ÐÅÏ¢] ʹÓÃJarÃüÁîÔËÐÐGateway¹¤³Ì¡£ |
| | | echo. |
| | | |
| | | cd %~dp0 |
| | | cd ../ruoyi-gateway/target |
| | | |
| | | set JAVA_OPTS=-Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m |
| | | |
| | | java -Dfile.encoding=utf-8 %JAVA_OPTS% -jar ruoyi-gateway.jar |
| | | |
| | | cd bin |
| | | pause |
New file |
| | |
| | | @echo off |
| | | echo. |
| | | echo [ÐÅÏ¢] ʹÓÃJarÃüÁîÔËÐÐModules-File¹¤³Ì¡£ |
| | | echo. |
| | | |
| | | cd %~dp0 |
| | | cd ../ruoyi-modules/ruoyi-file/target |
| | | |
| | | set JAVA_OPTS=-Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m |
| | | |
| | | java -Dfile.encoding=utf-8 %JAVA_OPTS% -jar ruoyi-modules-file.jar |
| | | |
| | | cd bin |
| | | pause |
New file |
| | |
| | | @echo off |
| | | echo. |
| | | echo [ÐÅÏ¢] ʹÓÃJarÃüÁîÔËÐÐModules-Gen¹¤³Ì¡£ |
| | | echo. |
| | | |
| | | cd %~dp0 |
| | | cd ../ruoyi-modules/ruoyi-gen/target |
| | | |
| | | set JAVA_OPTS=-Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m |
| | | |
| | | java -Dfile.encoding=utf-8 %JAVA_OPTS% -jar ruoyi-modules-gen.jar |
| | | |
| | | cd bin |
| | | pause |
New file |
| | |
| | | @echo off |
| | | echo. |
| | | echo [ÐÅÏ¢] ʹÓÃJarÃüÁîÔËÐÐModules-Job¹¤³Ì¡£ |
| | | echo. |
| | | |
| | | cd %~dp0 |
| | | cd ../ruoyi-modules/ruoyi-job/target |
| | | |
| | | set JAVA_OPTS=-Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m |
| | | |
| | | java -Dfile.encoding=utf-8 %JAVA_OPTS% -jar ruoyi-modules-job.jar |
| | | |
| | | cd bin |
| | | pause |
New file |
| | |
| | | @echo off |
| | | echo. |
| | | echo [ÐÅÏ¢] ʹÓÃJarÃüÁîÔËÐÐModules-System¹¤³Ì¡£ |
| | | echo. |
| | | |
| | | cd %~dp0 |
| | | cd ../ruoyi-modules/ruoyi-system/target |
| | | |
| | | set JAVA_OPTS=-Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m |
| | | |
| | | java -Dfile.encoding=utf-8 %JAVA_OPTS% -jar ruoyi-modules-system.jar |
| | | |
| | | cd bin |
| | | pause |
New file |
| | |
| | | @echo off |
| | | echo. |
| | | echo [ÐÅÏ¢] ʹÓÃJarÃüÁîÔËÐÐMonitor¹¤³Ì¡£ |
| | | echo. |
| | | |
| | | cd %~dp0 |
| | | cd ../ruoyi-visual/ruoyi-monitor/target |
| | | |
| | | set JAVA_OPTS=-Xms512m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m |
| | | |
| | | java -Dfile.encoding=utf-8 %JAVA_OPTS% -jar ruoyi-visual-monitor.jar |
| | | |
| | | cd bin |
| | | pause |
New file |
| | |
| | | #!/bin/sh |
| | | |
| | | # 复制项目的文件到对应docker路径,便于一键生成镜像。 |
| | | usage() { |
| | | echo "Usage: sh copy.sh" |
| | | exit 1 |
| | | } |
| | | |
| | | |
| | | # copy sql |
| | | echo "begin copy sql " |
| | | cp ../sql/ry_20230223.sql ./mysql/db |
| | | cp ../sql/ry_config_20220929.sql ./mysql/db |
| | | |
| | | # copy html |
| | | echo "begin copy html " |
| | | cp -r ../ruoyi-ui/dist/** ./nginx/html/dist |
| | | |
| | | |
| | | # copy jar |
| | | echo "begin copy ruoyi-gateway " |
| | | cp ../ruoyi-gateway/target/ruoyi-gateway.jar ./ruoyi/gateway/jar |
| | | |
| | | echo "begin copy ruoyi-auth " |
| | | cp ../ruoyi-auth/target/ruoyi-auth.jar ./ruoyi/auth/jar |
| | | |
| | | echo "begin copy ruoyi-visual " |
| | | cp ../ruoyi-visual/ruoyi-monitor/target/ruoyi-visual-monitor.jar ./ruoyi/visual/monitor/jar |
| | | |
| | | echo "begin copy ruoyi-modules-system " |
| | | cp ../ruoyi-modules/ruoyi-system/target/ruoyi-modules-system.jar ./ruoyi/modules/system/jar |
| | | |
| | | echo "begin copy ruoyi-modules-file " |
| | | cp ../ruoyi-modules/ruoyi-file/target/ruoyi-modules-file.jar ./ruoyi/modules/file/jar |
| | | |
| | | echo "begin copy ruoyi-modules-job " |
| | | cp ../ruoyi-modules/ruoyi-job/target/ruoyi-modules-job.jar ./ruoyi/modules/job/jar |
| | | |
| | | echo "begin copy ruoyi-modules-gen " |
| | | cp ../ruoyi-modules/ruoyi-gen/target/ruoyi-modules-gen.jar ./ruoyi/modules/gen/jar |
| | | |
New file |
| | |
| | | #!/bin/sh |
| | | |
| | | # 使用说明,用来提示输入参数 |
| | | usage() { |
| | | echo "Usage: sh 执行脚本.sh [port|base|modules|stop|rm]" |
| | | exit 1 |
| | | } |
| | | |
| | | # 开启所需端口 |
| | | port(){ |
| | | firewall-cmd --add-port=80/tcp --permanent |
| | | firewall-cmd --add-port=8080/tcp --permanent |
| | | firewall-cmd --add-port=8848/tcp --permanent |
| | | firewall-cmd --add-port=9848/tcp --permanent |
| | | firewall-cmd --add-port=9849/tcp --permanent |
| | | firewall-cmd --add-port=6379/tcp --permanent |
| | | firewall-cmd --add-port=3306/tcp --permanent |
| | | firewall-cmd --add-port=9100/tcp --permanent |
| | | firewall-cmd --add-port=9200/tcp --permanent |
| | | firewall-cmd --add-port=9201/tcp --permanent |
| | | firewall-cmd --add-port=9202/tcp --permanent |
| | | firewall-cmd --add-port=9203/tcp --permanent |
| | | firewall-cmd --add-port=9300/tcp --permanent |
| | | service firewalld restart |
| | | } |
| | | |
| | | # 启动基础环境(必须) |
| | | base(){ |
| | | docker-compose up -d ruoyi-mysql ruoyi-redis ruoyi-nacos |
| | | } |
| | | |
| | | # 启动程序模块(必须) |
| | | modules(){ |
| | | docker-compose up -d ruoyi-nginx ruoyi-gateway ruoyi-auth ruoyi-modules-system |
| | | } |
| | | |
| | | # 关闭所有环境/模块 |
| | | stop(){ |
| | | docker-compose stop |
| | | } |
| | | |
| | | # 删除所有环境/模块 |
| | | rm(){ |
| | | docker-compose rm |
| | | } |
| | | |
| | | # 根据输入参数,选择执行对应方法,不输入则执行使用说明 |
| | | case "$1" in |
| | | "port") |
| | | port |
| | | ;; |
| | | "base") |
| | | base |
| | | ;; |
| | | "modules") |
| | | modules |
| | | ;; |
| | | "stop") |
| | | stop |
| | | ;; |
| | | "rm") |
| | | rm |
| | | ;; |
| | | *) |
| | | usage |
| | | ;; |
| | | esac |
New file |
| | |
| | | ´æ·ÅsqlĿ¼ÏµÄËùÓнű¾£¬ÓÃÓÚdocker×Ô¶¯Ö´ÐС£ |
New file |
| | |
| | | # 基础镜像 |
| | | FROM mysql:5.7 |
| | | # author |
| | | MAINTAINER ruoyi |
| | | |
| | | # 执行sql脚本 |
| | | ADD ./db/*.sql /docker-entrypoint-initdb.d/ |
New file |
| | |
| | | spring.datasource.platform=mysql |
| | | db.num=1 |
| | | db.url.0=jdbc:mysql://ruoyi-mysql:3306/ry-config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC |
| | | db.user=root |
| | | db.password=password |
| | | |
| | | nacos.naming.empty-service.auto-clean=true |
| | | nacos.naming.empty-service.clean.initial-delay-ms=50000 |
| | | nacos.naming.empty-service.clean.period-time-ms=30000 |
| | | |
| | | management.endpoints.web.exposure.include=* |
| | | |
| | | management.metrics.export.elastic.enabled=false |
| | | management.metrics.export.influx.enabled=false |
| | | |
| | | server.tomcat.accesslog.enabled=true |
| | | server.tomcat.accesslog.pattern=%h %l %u %t "%r" %s %b %D %{User-Agent}i %{Request-Source}i |
| | | |
| | | server.tomcat.basedir=/home/ruoyi/nacos/tomcat/logs |
| | | |
| | | nacos.security.ignore.urls=/,/error,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-ui/public/**,/v1/auth/**,/v1/console/health/**,/actuator/**,/v1/console/server/** |
| | | |
| | | nacos.core.auth.system.type=nacos |
| | | nacos.core.auth.enabled=false |
| | | nacos.core.auth.default.token.expire.seconds=18000 |
| | | nacos.core.auth.default.token.secret.key=SecretKey012345678901234567890123456789012345678901234567890123456789 |
| | | nacos.core.auth.caching.enabled=true |
| | | nacos.core.auth.enable.userAgentAuthWhite=false |
| | | nacos.core.auth.server.identity.key=serverIdentity |
| | | nacos.core.auth.server.identity.value=security |
| | | |
| | | nacos.istio.mcp.server.enabled=false |
New file |
| | |
| | | # 基础镜像 |
| | | FROM nacos/nacos-server |
| | | # author |
| | | MAINTAINER ruoyi |
| | | |
| | | # 复制conf文件到路径 |
| | | COPY ./conf/application.properties /home/nacos/conf/application.properties |
New file |
| | |
| | | worker_processes 1; |
| | | |
| | | events { |
| | | worker_connections 1024; |
| | | } |
| | | |
| | | http { |
| | | include mime.types; |
| | | default_type application/octet-stream; |
| | | sendfile on; |
| | | keepalive_timeout 65; |
| | | |
| | | server { |
| | | listen 80; |
| | | server_name localhost; |
| | | |
| | | location / { |
| | | root /home/ruoyi/projects/ruoyi-ui; |
| | | try_files $uri $uri/ /index.html; |
| | | index index.html index.htm; |
| | | } |
| | | |
| | | location /prod-api/{ |
| | | proxy_set_header Host $http_host; |
| | | proxy_set_header X-Real-IP $remote_addr; |
| | | proxy_set_header REMOTE-HOST $remote_addr; |
| | | proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; |
| | | proxy_pass http://ruoyi-gateway:8080/; |
| | | } |
| | | |
| | | # 避免actuator暴露 |
| | | if ($request_uri ~ "/actuator") { |
| | | return 403; |
| | | } |
| | | |
| | | error_page 500 502 503 504 /50x.html; |
| | | location = /50x.html { |
| | | root html; |
| | | } |
| | | } |
| | | } |
New file |
| | |
| | | # 基础镜像 |
| | | FROM nginx |
| | | # author |
| | | MAINTAINER ruoyi |
| | | |
| | | # 挂载目录 |
| | | VOLUME /home/ruoyi/projects/ruoyi-ui |
| | | # 创建目录 |
| | | RUN mkdir -p /home/ruoyi/projects/ruoyi-ui |
| | | # 指定路径 |
| | | WORKDIR /home/ruoyi/projects/ruoyi-ui |
| | | # 复制conf文件到路径 |
| | | COPY ./conf/nginx.conf /etc/nginx/nginx.conf |
| | | # 复制html文件到路径 |
| | | COPY ./html/dist /home/ruoyi/projects/ruoyi-ui |
New file |
| | |
| | | # requirepass 123456 |
New file |
| | |
| | | # 基础镜像 |
| | | FROM redis |
| | | # author |
| | | MAINTAINER ruoyi |
| | | |
| | | # 挂载目录 |
| | | VOLUME /home/ruoyi/redis |
| | | # 创建目录 |
| | | RUN mkdir -p /home/ruoyi/redis |
| | | # 指定路径 |
| | | WORKDIR /home/ruoyi/redis |
| | | # 复制conf文件到路径 |
| | | COPY ./conf/redis.conf /home/ruoyi/redis/redis.conf |
New file |
| | |
| | | # 基础镜像 |
| | | FROM openjdk:8-jre |
| | | # author |
| | | MAINTAINER ruoyi |
| | | |
| | | # 挂载目录 |
| | | VOLUME /home/ruoyi |
| | | # 创建目录 |
| | | RUN mkdir -p /home/ruoyi |
| | | # 指定路径 |
| | | WORKDIR /home/ruoyi |
| | | # 复制jar文件到路径 |
| | | COPY ./jar/ruoyi-auth.jar /home/ruoyi/ruoyi-auth.jar |
| | | # 启动认证服务 |
| | | ENTRYPOINT ["java","-jar","ruoyi-auth.jar"] |
New file |
| | |
| | | ´æ·ÅÈÏÖ¤ÖÐÐÄ´ò°üºÃµÄjarÎļþ£¬ÓÃÓÚdockerÆô¶¯Ó¦Óᣠ|
New file |
| | |
| | | # 基础镜像 |
| | | FROM openjdk:8-jre |
| | | # author |
| | | MAINTAINER ruoyi |
| | | |
| | | # 挂载目录 |
| | | VOLUME /home/ruoyi |
| | | # 创建目录 |
| | | RUN mkdir -p /home/ruoyi |
| | | # 指定路径 |
| | | WORKDIR /home/ruoyi |
| | | # 复制jar文件到路径 |
| | | COPY ./jar/ruoyi-gateway.jar /home/ruoyi/ruoyi-gateway.jar |
| | | # 启动网关服务 |
| | | ENTRYPOINT ["java","-jar","ruoyi-gateway.jar"] |
New file |
| | |
| | | ´æ·ÅÍø¹ØÄ£¿é´ò°üºÃµÄjarÎļþ£¬ÓÃÓÚdockerÆô¶¯Ó¦Óᣠ|
New file |
| | |
| | | # 基础镜像 |
| | | FROM openjdk:8-jre |
| | | # author |
| | | MAINTAINER ruoyi |
| | | |
| | | # 挂载目录 |
| | | VOLUME /home/ruoyi |
| | | # 创建目录 |
| | | RUN mkdir -p /home/ruoyi |
| | | # 指定路径 |
| | | WORKDIR /home/ruoyi |
| | | # 复制jar文件到路径 |
| | | COPY ./jar/ruoyi-modules-file.jar /home/ruoyi/ruoyi-modules-file.jar |
| | | # 启动文件服务 |
| | | ENTRYPOINT ["java","-jar","ruoyi-modules-file.jar"] |
New file |
| | |
| | | ´æ·ÅÎļþ·þÎñ´ò°üºÃµÄjarÎļþ£¬ÓÃÓÚdockerÆô¶¯Ó¦Óᣠ|
New file |
| | |
| | | # 基础镜像 |
| | | FROM openjdk:8-jre |
| | | # author |
| | | MAINTAINER ruoyi |
| | | |
| | | # 挂载目录 |
| | | VOLUME /home/ruoyi |
| | | # 创建目录 |
| | | RUN mkdir -p /home/ruoyi |
| | | # 指定路径 |
| | | WORKDIR /home/ruoyi |
| | | # 复制jar文件到路径 |
| | | COPY ./jar/ruoyi-modules-gen.jar /home/ruoyi/ruoyi-modules-gen.jar |
| | | # 启动代码生成服务 |
| | | ENTRYPOINT ["java","-jar","ruoyi-modules-gen.jar"] |
New file |
| | |
| | | ´æ·Å´úÂëÉú³É´ò°üºÃµÄjarÎļþ£¬ÓÃÓÚdockerÆô¶¯Ó¦Óᣠ|
New file |
| | |
| | | # 基础镜像 |
| | | FROM openjdk:8-jre |
| | | # author |
| | | MAINTAINER ruoyi |
| | | |
| | | # 挂载目录 |
| | | VOLUME /home/ruoyi |
| | | # 创建目录 |
| | | RUN mkdir -p /home/ruoyi |
| | | # 指定路径 |
| | | WORKDIR /home/ruoyi |
| | | # 复制jar文件到路径 |
| | | COPY ./jar/ruoyi-modules-job.jar /home/ruoyi/ruoyi-modules-job.jar |
| | | # 启动定时任务服务 |
| | | ENTRYPOINT ["java","-jar","ruoyi-modules-job.jar"] |
New file |
| | |
| | | ´æ·Å¶¨Ê±ÈÎÎñ´ò°üºÃµÄjarÎļþ£¬ÓÃÓÚdockerÆô¶¯Ó¦Óᣠ|
New file |
| | |
| | | # 基础镜像 |
| | | FROM openjdk:8-jre |
| | | # author |
| | | MAINTAINER ruoyi |
| | | |
| | | # 挂载目录 |
| | | VOLUME /home/ruoyi |
| | | # 创建目录 |
| | | RUN mkdir -p /home/ruoyi |
| | | # 指定路径 |
| | | WORKDIR /home/ruoyi |
| | | # 复制jar文件到路径 |
| | | COPY ./jar/ruoyi-modules-system.jar /home/ruoyi/ruoyi-modules-system.jar |
| | | # 启动系统服务 |
| | | ENTRYPOINT ["java","-jar","ruoyi-modules-system.jar"] |
New file |
| | |
| | | ´æ·Åϵͳģ¿é´ò°üºÃµÄjarÎļþ£¬ÓÃÓÚdockerÆô¶¯Ó¦Óᣠ|
New file |
| | |
| | | # 基础镜像 |
| | | FROM openjdk:8-jre |
| | | # author |
| | | MAINTAINER ruoyi |
| | | |
| | | # 挂载目录 |
| | | VOLUME /home/ruoyi |
| | | # 创建目录 |
| | | RUN mkdir -p /home/ruoyi |
| | | # 指定路径 |
| | | WORKDIR /home/ruoyi |
| | | # 复制jar文件到路径 |
| | | COPY ./jar/ruoyi-visual-monitor.jar /home/ruoyi/ruoyi-visual-monitor.jar |
| | | # 启动系统服务 |
| | | ENTRYPOINT ["java","-jar","ruoyi-visual-monitor.jar"] |
New file |
| | |
| | | ´æ·Å¼à¿ØÖÐÐÄ´ò°üºÃµÄjarÎļþ£¬ÓÃÓÚdockerÆô¶¯Ó¦Óᣠ|
New file |
| | |
| | | { |
| | | "name": "RuoYi-Cloud", |
| | | "lockfileVersion": 2, |
| | | "requires": true, |
| | | "packages": { |
| | | "": { |
| | | "dependencies": { |
| | | "node-sass": "^9.0.0" |
| | | } |
| | | }, |
| | | "node_modules/@babel/code-frame": { |
| | | "version": "7.21.4", |
| | | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.21.4.tgz", |
| | | "integrity": "sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==", |
| | | "dependencies": { |
| | | "@babel/highlight": "^7.18.6" |
| | | }, |
| | | "engines": { |
| | | "node": ">=6.9.0" |
| | | } |
| | | }, |
| | | "node_modules/@babel/helper-validator-identifier": { |
| | | "version": "7.19.1", |
| | | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", |
| | | "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", |
| | | "engines": { |
| | | "node": ">=6.9.0" |
| | | } |
| | | }, |
| | | "node_modules/@babel/highlight": { |
| | | "version": "7.18.6", |
| | | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", |
| | | "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", |
| | | "dependencies": { |
| | | "@babel/helper-validator-identifier": "^7.18.6", |
| | | "chalk": "^2.0.0", |
| | | "js-tokens": "^4.0.0" |
| | | }, |
| | | "engines": { |
| | | "node": ">=6.9.0" |
| | | } |
| | | }, |
| | | "node_modules/@babel/highlight/node_modules/ansi-styles": { |
| | | "version": "3.2.1", |
| | | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", |
| | | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", |
| | | "dependencies": { |
| | | "color-convert": "^1.9.0" |
| | | }, |
| | | "engines": { |
| | | "node": ">=4" |
| | | } |
| | | }, |
| | | "node_modules/@babel/highlight/node_modules/chalk": { |
| | | "version": "2.4.2", |
| | | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", |
| | | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", |
| | | "dependencies": { |
| | | "ansi-styles": "^3.2.1", |
| | | "escape-string-regexp": "^1.0.5", |
| | | "supports-color": "^5.3.0" |
| | | }, |
| | | "engines": { |
| | | "node": ">=4" |
| | | } |
| | | }, |
| | | "node_modules/@babel/highlight/node_modules/color-convert": { |
| | | "version": "1.9.3", |
| | | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", |
| | | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", |
| | | "dependencies": { |
| | | "color-name": "1.1.3" |
| | | } |
| | | }, |
| | | "node_modules/@babel/highlight/node_modules/color-name": { |
| | | "version": "1.1.3", |
| | | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", |
| | | "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" |
| | | }, |
| | | "node_modules/@babel/highlight/node_modules/has-flag": { |
| | | "version": "3.0.0", |
| | | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", |
| | | "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", |
| | | "engines": { |
| | | "node": ">=4" |
| | | } |
| | | }, |
| | | "node_modules/@babel/highlight/node_modules/supports-color": { |
| | | "version": "5.5.0", |
| | | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", |
| | | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", |
| | | "dependencies": { |
| | | "has-flag": "^3.0.0" |
| | | }, |
| | | "engines": { |
| | | "node": ">=4" |
| | | } |
| | | }, |
| | | "node_modules/@gar/promisify": { |
| | | "version": "1.1.3", |
| | | "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", |
| | | "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==" |
| | | }, |
| | | "node_modules/@npmcli/fs": { |
| | | "version": "2.1.2", |
| | | "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz", |
| | | "integrity": "sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==", |
| | | "dependencies": { |
| | | "@gar/promisify": "^1.1.3", |
| | | "semver": "^7.3.5" |
| | | }, |
| | | "engines": { |
| | | "node": "^12.13.0 || ^14.15.0 || >=16.0.0" |
| | | } |
| | | }, |
| | | "node_modules/@npmcli/move-file": { |
| | | "version": "2.0.1", |
| | | "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz", |
| | | "integrity": "sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==", |
| | | "deprecated": "This functionality has been moved to @npmcli/fs", |
| | | "dependencies": { |
| | | "mkdirp": "^1.0.4", |
| | | "rimraf": "^3.0.2" |
| | | }, |
| | | "engines": { |
| | | "node": "^12.13.0 || ^14.15.0 || >=16.0.0" |
| | | } |
| | | }, |
| | | "node_modules/@tootallnate/once": { |
| | | "version": "2.0.0", |
| | | "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", |
| | | "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", |
| | | "engines": { |
| | | "node": ">= 10" |
| | | } |
| | | }, |
| | | "node_modules/@types/minimist": { |
| | | "version": "1.2.2", |
| | | "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", |
| | | "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==" |
| | | }, |
| | | "node_modules/@types/normalize-package-data": { |
| | | "version": "2.4.1", |
| | | "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", |
| | | "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==" |
| | | }, |
| | | "node_modules/abbrev": { |
| | | "version": "1.1.1", |
| | | "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", |
| | | "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" |
| | | }, |
| | | "node_modules/agent-base": { |
| | | "version": "6.0.2", |
| | | "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", |
| | | "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", |
| | | "dependencies": { |
| | | "debug": "4" |
| | | }, |
| | | "engines": { |
| | | "node": ">= 6.0.0" |
| | | } |
| | | }, |
| | | "node_modules/agentkeepalive": { |
| | | "version": "4.3.0", |
| | | "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.3.0.tgz", |
| | | "integrity": "sha512-7Epl1Blf4Sy37j4v9f9FjICCh4+KAQOyXgHEwlyBiAQLbhKdq/i2QQU3amQalS/wPhdPzDXPL5DMR5bkn+YeWg==", |
| | | "dependencies": { |
| | | "debug": "^4.1.0", |
| | | "depd": "^2.0.0", |
| | | "humanize-ms": "^1.2.1" |
| | | }, |
| | | "engines": { |
| | | "node": ">= 8.0.0" |
| | | } |
| | | }, |
| | | "node_modules/aggregate-error": { |
| | | "version": "3.1.0", |
| | | "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", |
| | | "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", |
| | | "dependencies": { |
| | | "clean-stack": "^2.0.0", |
| | | "indent-string": "^4.0.0" |
| | | }, |
| | | "engines": { |
| | | "node": ">=8" |
| | | } |
| | | }, |
| | | "node_modules/ansi-regex": { |
| | | "version": "5.0.1", |
| | | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", |
| | | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", |
| | | "engines": { |
| | | "node": ">=8" |
| | | } |
| | | }, |
| | | "node_modules/ansi-styles": { |
| | | "version": "4.3.0", |
| | | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", |
| | | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", |
| | | "dependencies": { |
| | | "color-convert": "^2.0.1" |
| | | }, |
| | | "engines": { |
| | | "node": ">=8" |
| | | }, |
| | | "funding": { |
| | | "url": "https://github.com/chalk/ansi-styles?sponsor=1" |
| | | } |
| | | }, |
| | | "node_modules/aproba": { |
| | | "version": "2.0.0", |
| | | "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", |
| | | "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==" |
| | | }, |
| | | "node_modules/are-we-there-yet": { |
| | | "version": "3.0.1", |
| | | "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", |
| | | "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", |
| | | "dependencies": { |
| | | "delegates": "^1.0.0", |
| | | "readable-stream": "^3.6.0" |
| | | }, |
| | | "engines": { |
| | | "node": "^12.13.0 || ^14.15.0 || >=16.0.0" |
| | | } |
| | | }, |
| | | "node_modules/arrify": { |
| | | "version": "1.0.1", |
| | | "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", |
| | | "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", |
| | | "engines": { |
| | | "node": ">=0.10.0" |
| | | } |
| | | }, |
| | | "node_modules/async-foreach": { |
| | | "version": "0.1.3", |
| | | "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz", |
| | | "integrity": "sha512-VUeSMD8nEGBWaZK4lizI1sf3yEC7pnAQ/mrI7pC2fBz2s/tq5jWWEngTwaf0Gruu/OoXRGLGg1XFqpYBiGTYJA==", |
| | | "engines": { |
| | | "node": "*" |
| | | } |
| | | }, |
| | | "node_modules/balanced-match": { |
| | | "version": "1.0.2", |
| | | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", |
| | | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" |
| | | }, |
| | | "node_modules/brace-expansion": { |
| | | "version": "1.1.11", |
| | | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", |
| | | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", |
| | | "dependencies": { |
| | | "balanced-match": "^1.0.0", |
| | | "concat-map": "0.0.1" |
| | | } |
| | | }, |
| | | "node_modules/cacache": { |
| | | "version": "16.1.3", |
| | | "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz", |
| | | "integrity": "sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==", |
| | | "dependencies": { |
| | | "@npmcli/fs": "^2.1.0", |
| | | "@npmcli/move-file": "^2.0.0", |
| | | "chownr": "^2.0.0", |
| | | "fs-minipass": "^2.1.0", |
| | | "glob": "^8.0.1", |
| | | "infer-owner": "^1.0.4", |
| | | "lru-cache": "^7.7.1", |
| | | "minipass": "^3.1.6", |
| | | "minipass-collect": "^1.0.2", |
| | | "minipass-flush": "^1.0.5", |
| | | "minipass-pipeline": "^1.2.4", |
| | | "mkdirp": "^1.0.4", |
| | | "p-map": "^4.0.0", |
| | | "promise-inflight": "^1.0.1", |
| | | "rimraf": "^3.0.2", |
| | | "ssri": "^9.0.0", |
| | | "tar": "^6.1.11", |
| | | "unique-filename": "^2.0.0" |
| | | }, |
| | | "engines": { |
| | | "node": "^12.13.0 || ^14.15.0 || >=16.0.0" |
| | | } |
| | | }, |
| | | "node_modules/cacache/node_modules/brace-expansion": { |
| | | "version": "2.0.1", |
| | | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", |
| | | "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", |
| | | "dependencies": { |
| | | "balanced-match": "^1.0.0" |
| | | } |
| | | }, |
| | | "node_modules/cacache/node_modules/glob": { |
| | | "version": "8.1.0", |
| | | "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", |
| | | "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", |
| | | "dependencies": { |
| | | "fs.realpath": "^1.0.0", |
| | | "inflight": "^1.0.4", |
| | | "inherits": "2", |
| | | "minimatch": "^5.0.1", |
| | | "once": "^1.3.0" |
| | | }, |
| | | "engines": { |
| | | "node": ">=12" |
| | | }, |
| | | "funding": { |
| | | "url": "https://github.com/sponsors/isaacs" |
| | | } |
| | | }, |
| | | "node_modules/cacache/node_modules/minimatch": { |
| | | "version": "5.1.6", |
| | | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", |
| | | "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", |
| | | "dependencies": { |
| | | "brace-expansion": "^2.0.1" |
| | | }, |
| | | "engines": { |
| | | "node": ">=10" |
| | | } |
| | | }, |
| | | "node_modules/camelcase": { |
| | | "version": "5.3.1", |
| | | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", |
| | | "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", |
| | | "engines": { |
| | | "node": ">=6" |
| | | } |
| | | }, |
| | | "node_modules/camelcase-keys": { |
| | | "version": "6.2.2", |
| | | "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", |
| | | "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", |
| | | "dependencies": { |
| | | "camelcase": "^5.3.1", |
| | | "map-obj": "^4.0.0", |
| | | "quick-lru": "^4.0.1" |
| | | }, |
| | | "engines": { |
| | | "node": ">=8" |
| | | }, |
| | | "funding": { |
| | | "url": "https://github.com/sponsors/sindresorhus" |
| | | } |
| | | }, |
| | | "node_modules/chalk": { |
| | | "version": "4.1.2", |
| | | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", |
| | | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", |
| | | "dependencies": { |
| | | "ansi-styles": "^4.1.0", |
| | | "supports-color": "^7.1.0" |
| | | }, |
| | | "engines": { |
| | | "node": ">=10" |
| | | }, |
| | | "funding": { |
| | | "url": "https://github.com/chalk/chalk?sponsor=1" |
| | | } |
| | | }, |
| | | "node_modules/chownr": { |
| | | "version": "2.0.0", |
| | | "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", |
| | | "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", |
| | | "engines": { |
| | | "node": ">=10" |
| | | } |
| | | }, |
| | | "node_modules/clean-stack": { |
| | | "version": "2.2.0", |
| | | "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", |
| | | "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", |
| | | "engines": { |
| | | "node": ">=6" |
| | | } |
| | | }, |
| | | "node_modules/cliui": { |
| | | "version": "8.0.1", |
| | | "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", |
| | | "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", |
| | | "dependencies": { |
| | | "string-width": "^4.2.0", |
| | | "strip-ansi": "^6.0.1", |
| | | "wrap-ansi": "^7.0.0" |
| | | }, |
| | | "engines": { |
| | | "node": ">=12" |
| | | } |
| | | }, |
| | | "node_modules/color-convert": { |
| | | "version": "2.0.1", |
| | | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", |
| | | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", |
| | | "dependencies": { |
| | | "color-name": "~1.1.4" |
| | | }, |
| | | "engines": { |
| | | "node": ">=7.0.0" |
| | | } |
| | | }, |
| | | "node_modules/color-name": { |
| | | "version": "1.1.4", |
| | | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", |
| | | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" |
| | | }, |
| | | "node_modules/color-support": { |
| | | "version": "1.1.3", |
| | | "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", |
| | | "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", |
| | | "bin": { |
| | | "color-support": "bin.js" |
| | | } |
| | | }, |
| | | "node_modules/concat-map": { |
| | | "version": "0.0.1", |
| | | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", |
| | | "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" |
| | | }, |
| | | "node_modules/console-control-strings": { |
| | | "version": "1.1.0", |
| | | "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", |
| | | "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==" |
| | | }, |
| | | "node_modules/core-util-is": { |
| | | "version": "1.0.3", |
| | | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", |
| | | "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" |
| | | }, |
| | | "node_modules/cross-spawn": { |
| | | "version": "7.0.3", |
| | | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", |
| | | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", |
| | | "dependencies": { |
| | | "path-key": "^3.1.0", |
| | | "shebang-command": "^2.0.0", |
| | | "which": "^2.0.1" |
| | | }, |
| | | "engines": { |
| | | "node": ">= 8" |
| | | } |
| | | }, |
| | | "node_modules/debug": { |
| | | "version": "4.3.4", |
| | | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", |
| | | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", |
| | | "dependencies": { |
| | | "ms": "2.1.2" |
| | | }, |
| | | "engines": { |
| | | "node": ">=6.0" |
| | | }, |
| | | "peerDependenciesMeta": { |
| | | "supports-color": { |
| | | "optional": true |
| | | } |
| | | } |
| | | }, |
| | | "node_modules/decamelize": { |
| | | "version": "1.2.0", |
| | | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", |
| | | "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", |
| | | "engines": { |
| | | "node": ">=0.10.0" |
| | | } |
| | | }, |
| | | "node_modules/decamelize-keys": { |
| | | "version": "1.1.1", |
| | | "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", |
| | | "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", |
| | | "dependencies": { |
| | | "decamelize": "^1.1.0", |
| | | "map-obj": "^1.0.0" |
| | | }, |
| | | "engines": { |
| | | "node": ">=0.10.0" |
| | | }, |
| | | "funding": { |
| | | "url": "https://github.com/sponsors/sindresorhus" |
| | | } |
| | | }, |
| | | "node_modules/decamelize-keys/node_modules/map-obj": { |
| | | "version": "1.0.1", |
| | | "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", |
| | | "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", |
| | | "engines": { |
| | | "node": ">=0.10.0" |
| | | } |
| | | }, |
| | | "node_modules/delegates": { |
| | | "version": "1.0.0", |
| | | "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", |
| | | "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" |
| | | }, |
| | | "node_modules/depd": { |
| | | "version": "2.0.0", |
| | | "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", |
| | | "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", |
| | | "engines": { |
| | | "node": ">= 0.8" |
| | | } |
| | | }, |
| | | "node_modules/emoji-regex": { |
| | | "version": "8.0.0", |
| | | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", |
| | | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" |
| | | }, |
| | | "node_modules/encoding": { |
| | | "version": "0.1.13", |
| | | "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", |
| | | "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", |
| | | "optional": true, |
| | | "dependencies": { |
| | | "iconv-lite": "^0.6.2" |
| | | } |
| | | }, |
| | | "node_modules/env-paths": { |
| | | "version": "2.2.1", |
| | | "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", |
| | | "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", |
| | | "engines": { |
| | | "node": ">=6" |
| | | } |
| | | }, |
| | | "node_modules/err-code": { |
| | | "version": "2.0.3", |
| | | "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", |
| | | "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==" |
| | | }, |
| | | "node_modules/error-ex": { |
| | | "version": "1.3.2", |
| | | "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", |
| | | "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", |
| | | "dependencies": { |
| | | "is-arrayish": "^0.2.1" |
| | | } |
| | | }, |
| | | "node_modules/escalade": { |
| | | "version": "3.1.1", |
| | | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", |
| | | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", |
| | | "engines": { |
| | | "node": ">=6" |
| | | } |
| | | }, |
| | | "node_modules/escape-string-regexp": { |
| | | "version": "1.0.5", |
| | | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", |
| | | "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", |
| | | "engines": { |
| | | "node": ">=0.8.0" |
| | | } |
| | | }, |
| | | "node_modules/find-up": { |
| | | "version": "4.1.0", |
| | | "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", |
| | | "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", |
| | | "dependencies": { |
| | | "locate-path": "^5.0.0", |
| | | "path-exists": "^4.0.0" |
| | | }, |
| | | "engines": { |
| | | "node": ">=8" |
| | | } |
| | | }, |
| | | "node_modules/fs-minipass": { |
| | | "version": "2.1.0", |
| | | "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", |
| | | "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", |
| | | "dependencies": { |
| | | "minipass": "^3.0.0" |
| | | }, |
| | | "engines": { |
| | | "node": ">= 8" |
| | | } |
| | | }, |
| | | "node_modules/fs.realpath": { |
| | | "version": "1.0.0", |
| | | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", |
| | | "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" |
| | | }, |
| | | "node_modules/function-bind": { |
| | | "version": "1.1.1", |
| | | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", |
| | | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" |
| | | }, |
| | | "node_modules/gauge": { |
| | | "version": "4.0.4", |
| | | "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", |
| | | "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", |
| | | "dependencies": { |
| | | "aproba": "^1.0.3 || ^2.0.0", |
| | | "color-support": "^1.1.3", |
| | | "console-control-strings": "^1.1.0", |
| | | "has-unicode": "^2.0.1", |
| | | "signal-exit": "^3.0.7", |
| | | "string-width": "^4.2.3", |
| | | "strip-ansi": "^6.0.1", |
| | | "wide-align": "^1.1.5" |
| | | }, |
| | | "engines": { |
| | | "node": "^12.13.0 || ^14.15.0 || >=16.0.0" |
| | | } |
| | | }, |
| | | "node_modules/gaze": { |
| | | "version": "1.1.3", |
| | | "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", |
| | | "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", |
| | | "dependencies": { |
| | | "globule": "^1.0.0" |
| | | }, |
| | | "engines": { |
| | | "node": ">= 4.0.0" |
| | | } |
| | | }, |
| | | "node_modules/get-caller-file": { |
| | | "version": "2.0.5", |
| | | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", |
| | | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", |
| | | "engines": { |
| | | "node": "6.* || 8.* || >= 10.*" |
| | | } |
| | | }, |
| | | "node_modules/get-stdin": { |
| | | "version": "4.0.1", |
| | | "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", |
| | | "integrity": "sha512-F5aQMywwJ2n85s4hJPTT9RPxGmubonuB10MNYo17/xph174n2MIR33HRguhzVag10O/npM7SPk73LMZNP+FaWw==", |
| | | "engines": { |
| | | "node": ">=0.10.0" |
| | | } |
| | | }, |
| | | "node_modules/glob": { |
| | | "version": "7.2.3", |
| | | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", |
| | | "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", |
| | | "dependencies": { |
| | | "fs.realpath": "^1.0.0", |
| | | "inflight": "^1.0.4", |
| | | "inherits": "2", |
| | | "minimatch": "^3.1.1", |
| | | "once": "^1.3.0", |
| | | "path-is-absolute": "^1.0.0" |
| | | }, |
| | | "engines": { |
| | | "node": "*" |
| | | }, |
| | | "funding": { |
| | | "url": "https://github.com/sponsors/isaacs" |
| | | } |
| | | }, |
| | | "node_modules/globule": { |
| | | "version": "1.3.4", |
| | | "resolved": "https://registry.npmjs.org/globule/-/globule-1.3.4.tgz", |
| | | "integrity": "sha512-OPTIfhMBh7JbBYDpa5b+Q5ptmMWKwcNcFSR/0c6t8V4f3ZAVBEsKNY37QdVqmLRYSMhOUGYrY0QhSoEpzGr/Eg==", |
| | | "dependencies": { |
| | | "glob": "~7.1.1", |
| | | "lodash": "^4.17.21", |
| | | "minimatch": "~3.0.2" |
| | | }, |
| | | "engines": { |
| | | "node": ">= 0.10" |
| | | } |
| | | }, |
| | | "node_modules/globule/node_modules/glob": { |
| | | "version": "7.1.7", |
| | | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", |
| | | "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", |
| | | "dependencies": { |
| | | "fs.realpath": "^1.0.0", |
| | | "inflight": "^1.0.4", |
| | | "inherits": "2", |
| | | "minimatch": "^3.0.4", |
| | | "once": "^1.3.0", |
| | | "path-is-absolute": "^1.0.0" |
| | | }, |
| | | "engines": { |
| | | "node": "*" |
| | | }, |
| | | "funding": { |
| | | "url": "https://github.com/sponsors/isaacs" |
| | | } |
| | | }, |
| | | "node_modules/globule/node_modules/minimatch": { |
| | | "version": "3.0.8", |
| | | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz", |
| | | "integrity": "sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==", |
| | | "dependencies": { |
| | | "brace-expansion": "^1.1.7" |
| | | }, |
| | | "engines": { |
| | | "node": "*" |
| | | } |
| | | }, |
| | | "node_modules/graceful-fs": { |
| | | "version": "4.2.11", |
| | | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", |
| | | "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" |
| | | }, |
| | | "node_modules/hard-rejection": { |
| | | "version": "2.1.0", |
| | | "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", |
| | | "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", |
| | | "engines": { |
| | | "node": ">=6" |
| | | } |
| | | }, |
| | | "node_modules/has": { |
| | | "version": "1.0.3", |
| | | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", |
| | | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", |
| | | "dependencies": { |
| | | "function-bind": "^1.1.1" |
| | | }, |
| | | "engines": { |
| | | "node": ">= 0.4.0" |
| | | } |
| | | }, |
| | | "node_modules/has-flag": { |
| | | "version": "4.0.0", |
| | | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", |
| | | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", |
| | | "engines": { |
| | | "node": ">=8" |
| | | } |
| | | }, |
| | | "node_modules/has-unicode": { |
| | | "version": "2.0.1", |
| | | "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", |
| | | "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" |
| | | }, |
| | | "node_modules/hosted-git-info": { |
| | | "version": "4.1.0", |
| | | "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", |
| | | "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", |
| | | "dependencies": { |
| | | "lru-cache": "^6.0.0" |
| | | }, |
| | | "engines": { |
| | | "node": ">=10" |
| | | } |
| | | }, |
| | | "node_modules/hosted-git-info/node_modules/lru-cache": { |
| | | "version": "6.0.0", |
| | | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", |
| | | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", |
| | | "dependencies": { |
| | | "yallist": "^4.0.0" |
| | | }, |
| | | "engines": { |
| | | "node": ">=10" |
| | | } |
| | | }, |
| | | "node_modules/http-cache-semantics": { |
| | | "version": "4.1.1", |
| | | "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", |
| | | "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==" |
| | | }, |
| | | "node_modules/http-proxy-agent": { |
| | | "version": "5.0.0", |
| | | "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", |
| | | "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", |
| | | "dependencies": { |
| | | "@tootallnate/once": "2", |
| | | "agent-base": "6", |
| | | "debug": "4" |
| | | }, |
| | | "engines": { |
| | | "node": ">= 6" |
| | | } |
| | | }, |
| | | "node_modules/https-proxy-agent": { |
| | | "version": "5.0.1", |
| | | "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", |
| | | "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", |
| | | "dependencies": { |
| | | "agent-base": "6", |
| | | "debug": "4" |
| | | }, |
| | | "engines": { |
| | | "node": ">= 6" |
| | | } |
| | | }, |
| | | "node_modules/humanize-ms": { |
| | | "version": "1.2.1", |
| | | "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", |
| | | "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", |
| | | "dependencies": { |
| | | "ms": "^2.0.0" |
| | | } |
| | | }, |
| | | "node_modules/iconv-lite": { |
| | | "version": "0.6.3", |
| | | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", |
| | | "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", |
| | | "optional": true, |
| | | "dependencies": { |
| | | "safer-buffer": ">= 2.1.2 < 3.0.0" |
| | | }, |
| | | "engines": { |
| | | "node": ">=0.10.0" |
| | | } |
| | | }, |
| | | "node_modules/imurmurhash": { |
| | | "version": "0.1.4", |
| | | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", |
| | | "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", |
| | | "engines": { |
| | | "node": ">=0.8.19" |
| | | } |
| | | }, |
| | | "node_modules/indent-string": { |
| | | "version": "4.0.0", |
| | | "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", |
| | | "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", |
| | | "engines": { |
| | | "node": ">=8" |
| | | } |
| | | }, |
| | | "node_modules/infer-owner": { |
| | | "version": "1.0.4", |
| | | "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", |
| | | "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==" |
| | | }, |
| | | "node_modules/inflight": { |
| | | "version": "1.0.6", |
| | | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", |
| | | "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", |
| | | "dependencies": { |
| | | "once": "^1.3.0", |
| | | "wrappy": "1" |
| | | } |
| | | }, |
| | | "node_modules/inherits": { |
| | | "version": "2.0.4", |
| | | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", |
| | | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" |
| | | }, |
| | | "node_modules/ip": { |
| | | "version": "2.0.0", |
| | | "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", |
| | | "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==" |
| | | }, |
| | | "node_modules/is-arrayish": { |
| | | "version": "0.2.1", |
| | | "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", |
| | | "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" |
| | | }, |
| | | "node_modules/is-core-module": { |
| | | "version": "2.12.1", |
| | | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", |
| | | "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", |
| | | "dependencies": { |
| | | "has": "^1.0.3" |
| | | }, |
| | | "funding": { |
| | | "url": "https://github.com/sponsors/ljharb" |
| | | } |
| | | }, |
| | | "node_modules/is-fullwidth-code-point": { |
| | | "version": "3.0.0", |
| | | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", |
| | | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", |
| | | "engines": { |
| | | "node": ">=8" |
| | | } |
| | | }, |
| | | "node_modules/is-lambda": { |
| | | "version": "1.0.1", |
| | | "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", |
| | | "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==" |
| | | }, |
| | | "node_modules/is-plain-obj": { |
| | | "version": "1.1.0", |
| | | "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", |
| | | "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", |
| | | "engines": { |
| | | "node": ">=0.10.0" |
| | | } |
| | | }, |
| | | "node_modules/isarray": { |
| | | "version": "1.0.0", |
| | | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", |
| | | "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" |
| | | }, |
| | | "node_modules/isexe": { |
| | | "version": "2.0.0", |
| | | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", |
| | | "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" |
| | | }, |
| | | "node_modules/js-base64": { |
| | | "version": "2.6.4", |
| | | "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.4.tgz", |
| | | "integrity": "sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==" |
| | | }, |
| | | "node_modules/js-tokens": { |
| | | "version": "4.0.0", |
| | | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", |
| | | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" |
| | | }, |
| | | "node_modules/json-parse-even-better-errors": { |
| | | "version": "2.3.1", |
| | | "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", |
| | | "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" |
| | | }, |
| | | "node_modules/kind-of": { |
| | | "version": "6.0.3", |
| | | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", |
| | | "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", |
| | | "engines": { |
| | | "node": ">=0.10.0" |
| | | } |
| | | }, |
| | | "node_modules/lines-and-columns": { |
| | | "version": "1.2.4", |
| | | "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", |
| | | "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" |
| | | }, |
| | | "node_modules/locate-path": { |
| | | "version": "5.0.0", |
| | | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", |
| | | "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", |
| | | "dependencies": { |
| | | "p-locate": "^4.1.0" |
| | | }, |
| | | "engines": { |
| | | "node": ">=8" |
| | | } |
| | | }, |
| | | "node_modules/lodash": { |
| | | "version": "4.17.21", |
| | | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", |
| | | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" |
| | | }, |
| | | "node_modules/lru-cache": { |
| | | "version": "7.18.3", |
| | | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", |
| | | "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", |
| | | "engines": { |
| | | "node": ">=12" |
| | | } |
| | | }, |
| | | "node_modules/make-fetch-happen": { |
| | | "version": "10.2.1", |
| | | "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz", |
| | | "integrity": "sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==", |
| | | "dependencies": { |
| | | "agentkeepalive": "^4.2.1", |
| | | "cacache": "^16.1.0", |
| | | "http-cache-semantics": "^4.1.0", |
| | | "http-proxy-agent": "^5.0.0", |
| | | "https-proxy-agent": "^5.0.0", |
| | | "is-lambda": "^1.0.1", |
| | | "lru-cache": "^7.7.1", |
| | | "minipass": "^3.1.6", |
| | | "minipass-collect": "^1.0.2", |
| | | "minipass-fetch": "^2.0.3", |
| | | "minipass-flush": "^1.0.5", |
| | | "minipass-pipeline": "^1.2.4", |
| | | "negotiator": "^0.6.3", |
| | | "promise-retry": "^2.0.1", |
| | | "socks-proxy-agent": "^7.0.0", |
| | | "ssri": "^9.0.0" |
| | | }, |
| | | "engines": { |
| | | "node": "^12.13.0 || ^14.15.0 || >=16.0.0" |
| | | } |
| | | }, |
| | | "node_modules/map-obj": { |
| | | "version": "4.3.0", |
| | | "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", |
| | | "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", |
| | | "engines": { |
| | | "node": ">=8" |
| | | }, |
| | | "funding": { |
| | | "url": "https://github.com/sponsors/sindresorhus" |
| | | } |
| | | }, |
| | | "node_modules/meow": { |
| | | "version": "9.0.0", |
| | | "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz", |
| | | "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==", |
| | | "dependencies": { |
| | | "@types/minimist": "^1.2.0", |
| | | "camelcase-keys": "^6.2.2", |
| | | "decamelize": "^1.2.0", |
| | | "decamelize-keys": "^1.1.0", |
| | | "hard-rejection": "^2.1.0", |
| | | "minimist-options": "4.1.0", |
| | | "normalize-package-data": "^3.0.0", |
| | | "read-pkg-up": "^7.0.1", |
| | | "redent": "^3.0.0", |
| | | "trim-newlines": "^3.0.0", |
| | | "type-fest": "^0.18.0", |
| | | "yargs-parser": "^20.2.3" |
| | | }, |
| | | "engines": { |
| | | "node": ">=10" |
| | | }, |
| | | "funding": { |
| | | "url": "https://github.com/sponsors/sindresorhus" |
| | | } |
| | | }, |
| | | "node_modules/min-indent": { |
| | | "version": "1.0.1", |
| | | "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", |
| | | "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", |
| | | "engines": { |
| | | "node": ">=4" |
| | | } |
| | | }, |
| | | "node_modules/minimatch": { |
| | | "version": "3.1.2", |
| | | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", |
| | | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", |
| | | "dependencies": { |
| | | "brace-expansion": "^1.1.7" |
| | | }, |
| | | "engines": { |
| | | "node": "*" |
| | | } |
| | | }, |
| | | "node_modules/minimist-options": { |
| | | "version": "4.1.0", |
| | | "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", |
| | | "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", |
| | | "dependencies": { |
| | | "arrify": "^1.0.1", |
| | | "is-plain-obj": "^1.1.0", |
| | | "kind-of": "^6.0.3" |
| | | }, |
| | | "engines": { |
| | | "node": ">= 6" |
| | | } |
| | | }, |
| | | "node_modules/minipass": { |
| | | "version": "3.3.6", |
| | | "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", |
| | | "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", |
| | | "dependencies": { |
| | | "yallist": "^4.0.0" |
| | | }, |
| | | "engines": { |
| | | "node": ">=8" |
| | | } |
| | | }, |
| | | "node_modules/minipass-collect": { |
| | | "version": "1.0.2", |
| | | "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", |
| | | "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", |
| | | "dependencies": { |
| | | "minipass": "^3.0.0" |
| | | }, |
| | | "engines": { |
| | | "node": ">= 8" |
| | | } |
| | | }, |
| | | "node_modules/minipass-fetch": { |
| | | "version": "2.1.2", |
| | | "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.2.tgz", |
| | | "integrity": "sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==", |
| | | "dependencies": { |
| | | "minipass": "^3.1.6", |
| | | "minipass-sized": "^1.0.3", |
| | | "minizlib": "^2.1.2" |
| | | }, |
| | | "engines": { |
| | | "node": "^12.13.0 || ^14.15.0 || >=16.0.0" |
| | | }, |
| | | "optionalDependencies": { |
| | | "encoding": "^0.1.13" |
| | | } |
| | | }, |
| | | "node_modules/minipass-flush": { |
| | | "version": "1.0.5", |
| | | "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", |
| | | "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", |
| | | "dependencies": { |
| | | "minipass": "^3.0.0" |
| | | }, |
| | | "engines": { |
| | | "node": ">= 8" |
| | | } |
| | | }, |
| | | "node_modules/minipass-pipeline": { |
| | | "version": "1.2.4", |
| | | "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", |
| | | "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", |
| | | "dependencies": { |
| | | "minipass": "^3.0.0" |
| | | }, |
| | | "engines": { |
| | | "node": ">=8" |
| | | } |
| | | }, |
| | | "node_modules/minipass-sized": { |
| | | "version": "1.0.3", |
| | | "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", |
| | | "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", |
| | | "dependencies": { |
| | | "minipass": "^3.0.0" |
| | | }, |
| | | "engines": { |
| | | "node": ">=8" |
| | | } |
| | | }, |
| | | "node_modules/minizlib": { |
| | | "version": "2.1.2", |
| | | "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", |
| | | "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", |
| | | "dependencies": { |
| | | "minipass": "^3.0.0", |
| | | "yallist": "^4.0.0" |
| | | }, |
| | | "engines": { |
| | | "node": ">= 8" |
| | | } |
| | | }, |
| | | "node_modules/mkdirp": { |
| | | "version": "1.0.4", |
| | | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", |
| | | "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", |
| | | "bin": { |
| | | "mkdirp": "bin/cmd.js" |
| | | }, |
| | | "engines": { |
| | | "node": ">=10" |
| | | } |
| | | }, |
| | | "node_modules/ms": { |
| | | "version": "2.1.2", |
| | | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", |
| | | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" |
| | | }, |
| | | "node_modules/nan": { |
| | | "version": "2.17.0", |
| | | "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz", |
| | | "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==" |
| | | }, |
| | | "node_modules/negotiator": { |
| | | "version": "0.6.3", |
| | | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", |
| | | "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", |
| | | "engines": { |
| | | "node": ">= 0.6" |
| | | } |
| | | }, |
| | | "node_modules/node-gyp": { |
| | | "version": "8.4.1", |
| | | "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz", |
| | | "integrity": "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==", |
| | | "dependencies": { |
| | | "env-paths": "^2.2.0", |
| | | "glob": "^7.1.4", |
| | | "graceful-fs": "^4.2.6", |
| | | "make-fetch-happen": "^9.1.0", |
| | | "nopt": "^5.0.0", |
| | | "npmlog": "^6.0.0", |
| | | "rimraf": "^3.0.2", |
| | | "semver": "^7.3.5", |
| | | "tar": "^6.1.2", |
| | | "which": "^2.0.2" |
| | | }, |
| | | "bin": { |
| | | "node-gyp": "bin/node-gyp.js" |
| | | }, |
| | | "engines": { |
| | | "node": ">= 10.12.0" |
| | | } |
| | | }, |
| | | "node_modules/node-gyp/node_modules/@npmcli/fs": { |
| | | "version": "1.1.1", |
| | | "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", |
| | | "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", |
| | | "dependencies": { |
| | | "@gar/promisify": "^1.0.1", |
| | | "semver": "^7.3.5" |
| | | } |
| | | }, |
| | | "node_modules/node-gyp/node_modules/@npmcli/move-file": { |
| | | "version": "1.1.2", |
| | | "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", |
| | | "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", |
| | | "deprecated": "This functionality has been moved to @npmcli/fs", |
| | | "dependencies": { |
| | | "mkdirp": "^1.0.4", |
| | | "rimraf": "^3.0.2" |
| | | }, |
| | | "engines": { |
| | | "node": ">=10" |
| | | } |
| | | }, |
| | | "node_modules/node-gyp/node_modules/@tootallnate/once": { |
| | | "version": "1.1.2", |
| | | "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", |
| | | "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", |
| | | "engines": { |
| | | "node": ">= 6" |
| | | } |
| | | }, |
| | | "node_modules/node-gyp/node_modules/cacache": { |
| | | "version": "15.3.0", |
| | | "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", |
| | | "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", |
| | | "dependencies": { |
| | | "@npmcli/fs": "^1.0.0", |
| | | "@npmcli/move-file": "^1.0.1", |
| | | "chownr": "^2.0.0", |
| | | "fs-minipass": "^2.0.0", |
| | | "glob": "^7.1.4", |
| | | "infer-owner": "^1.0.4", |
| | | "lru-cache": "^6.0.0", |
| | | "minipass": "^3.1.1", |
| | | "minipass-collect": "^1.0.2", |
| | | "minipass-flush": "^1.0.5", |
| | | "minipass-pipeline": "^1.2.2", |
| | | "mkdirp": "^1.0.3", |
| | | "p-map": "^4.0.0", |
| | | "promise-inflight": "^1.0.1", |
| | | "rimraf": "^3.0.2", |
| | | "ssri": "^8.0.1", |
| | | "tar": "^6.0.2", |
| | | "unique-filename": "^1.1.1" |
| | | }, |
| | | "engines": { |
| | | "node": ">= 10" |
| | | } |
| | | }, |
| | | "node_modules/node-gyp/node_modules/http-proxy-agent": { |
| | | "version": "4.0.1", |
| | | "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", |
| | | "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", |
| | | "dependencies": { |
| | | "@tootallnate/once": "1", |
| | | "agent-base": "6", |
| | | "debug": "4" |
| | | }, |
| | | "engines": { |
| | | "node": ">= 6" |
| | | } |
| | | }, |
| | | "node_modules/node-gyp/node_modules/lru-cache": { |
| | | "version": "6.0.0", |
| | | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", |
| | | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", |
| | | "dependencies": { |
| | | "yallist": "^4.0.0" |
| | | }, |
| | | "engines": { |
| | | "node": ">=10" |
| | | } |
| | | }, |
| | | "node_modules/node-gyp/node_modules/make-fetch-happen": { |
| | | "version": "9.1.0", |
| | | "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", |
| | | "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", |
| | | "dependencies": { |
| | | "agentkeepalive": "^4.1.3", |
| | | "cacache": "^15.2.0", |
| | | "http-cache-semantics": "^4.1.0", |
| | | "http-proxy-agent": "^4.0.1", |
| | | "https-proxy-agent": "^5.0.0", |
| | | "is-lambda": "^1.0.1", |
| | | "lru-cache": "^6.0.0", |
| | | "minipass": "^3.1.3", |
| | | "minipass-collect": "^1.0.2", |
| | | "minipass-fetch": "^1.3.2", |
| | | "minipass-flush": "^1.0.5", |
| | | "minipass-pipeline": "^1.2.4", |
| | | "negotiator": "^0.6.2", |
| | | "promise-retry": "^2.0.1", |
| | | "socks-proxy-agent": "^6.0.0", |
| | | "ssri": "^8.0.0" |
| | | }, |
| | | "engines": { |
| | | "node": ">= 10" |
| | | } |
| | | }, |
| | | "node_modules/node-gyp/node_modules/minipass-fetch": { |
| | | "version": "1.4.1", |
| | | "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz", |
| | | "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", |
| | | "dependencies": { |
| | | "minipass": "^3.1.0", |
| | | "minipass-sized": "^1.0.3", |
| | | "minizlib": "^2.0.0" |
| | | }, |
| | | "engines": { |
| | | "node": ">=8" |
| | | }, |
| | | "optionalDependencies": { |
| | | "encoding": "^0.1.12" |
| | | } |
| | | }, |
| | | "node_modules/node-gyp/node_modules/socks-proxy-agent": { |
| | | "version": "6.2.1", |
| | | "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz", |
| | | "integrity": "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==", |
| | | "dependencies": { |
| | | "agent-base": "^6.0.2", |
| | | "debug": "^4.3.3", |
| | | "socks": "^2.6.2" |
| | | }, |
| | | "engines": { |
| | | "node": ">= 10" |
| | | } |
| | | }, |
| | | "node_modules/node-gyp/node_modules/ssri": { |
| | | "version": "8.0.1", |
| | | "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", |
| | | "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", |
| | | "dependencies": { |
| | | "minipass": "^3.1.1" |
| | | }, |
| | | "engines": { |
| | | "node": ">= 8" |
| | | } |
| | | }, |
| | | "node_modules/node-gyp/node_modules/unique-filename": { |
| | | "version": "1.1.1", |
| | | "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", |
| | | "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", |
| | | "dependencies": { |
| | | "unique-slug": "^2.0.0" |
| | | } |
| | | }, |
| | | "node_modules/node-gyp/node_modules/unique-slug": { |
| | | "version": "2.0.2", |
| | | "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", |
| | | "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", |
| | | "dependencies": { |
| | | "imurmurhash": "^0.1.4" |
| | | } |
| | | }, |
| | | "node_modules/node-sass": { |
| | | "version": "9.0.0", |
| | | "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-9.0.0.tgz", |
| | | "integrity": "sha512-yltEuuLrfH6M7Pq2gAj5B6Zm7m+gdZoG66wTqG6mIZV/zijq3M2OO2HswtT6oBspPyFhHDcaxWpsBm0fRNDHPg==", |
| | | "hasInstallScript": true, |
| | | "dependencies": { |
| | | "async-foreach": "^0.1.3", |
| | | "chalk": "^4.1.2", |
| | | "cross-spawn": "^7.0.3", |
| | | "gaze": "^1.0.0", |
| | | "get-stdin": "^4.0.1", |
| | | "glob": "^7.0.3", |
| | | "lodash": "^4.17.15", |
| | | "make-fetch-happen": "^10.0.4", |
| | | "meow": "^9.0.0", |
| | | "nan": "^2.17.0", |
| | | "node-gyp": "^8.4.1", |
| | | "sass-graph": "^4.0.1", |
| | | "stdout-stream": "^1.4.0", |
| | | "true-case-path": "^2.2.1" |
| | | }, |
| | | "bin": { |
| | | "node-sass": "bin/node-sass" |
| | | }, |
| | | "engines": { |
| | | "node": ">=16" |
| | | } |
| | | }, |
| | | "node_modules/nopt": { |
| | | "version": "5.0.0", |
| | | "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", |
| | | "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", |
| | | "dependencies": { |
| | | "abbrev": "1" |
| | | }, |
| | | "bin": { |
| | | "nopt": "bin/nopt.js" |
| | | }, |
| | | "engines": { |
| | | "node": ">=6" |
| | | } |
| | | }, |
| | | "node_modules/normalize-package-data": { |
| | | "version": "3.0.3", |
| | | "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", |
| | | "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", |
| | | "dependencies": { |
| | | "hosted-git-info": "^4.0.1", |
| | | "is-core-module": "^2.5.0", |
| | | "semver": "^7.3.4", |
| | | "validate-npm-package-license": "^3.0.1" |
| | | }, |
| | | "engines": { |
| | | "node": ">=10" |
| | | } |
| | | }, |
| | | "node_modules/npmlog": { |
| | | "version": "6.0.2", |
| | | "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", |
| | | "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", |
| | | "dependencies": { |
| | | "are-we-there-yet": "^3.0.0", |
| | | "console-control-strings": "^1.1.0", |
| | | "gauge": "^4.0.3", |
| | | "set-blocking": "^2.0.0" |
| | | }, |
| | | "engines": { |
| | | "node": "^12.13.0 || ^14.15.0 || >=16.0.0" |
| | | } |
| | | }, |
| | | "node_modules/once": { |
| | | "version": "1.4.0", |
| | | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", |
| | | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", |
| | | "dependencies": { |
| | | "wrappy": "1" |
| | | } |
| | | }, |
| | | "node_modules/p-limit": { |
| | | "version": "2.3.0", |
| | | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", |
| | | "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", |
| | | "dependencies": { |
| | | "p-try": "^2.0.0" |
| | | }, |
| | | "engines": { |
| | | "node": ">=6" |
| | | }, |
| | | "funding": { |
| | | "url": "https://github.com/sponsors/sindresorhus" |
| | | } |
| | | }, |
| | | "node_modules/p-locate": { |
| | | "version": "4.1.0", |
| | | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", |
| | | "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", |
| | | "dependencies": { |
| | | "p-limit": "^2.2.0" |
| | | }, |
| | | "engines": { |
| | | "node": ">=8" |
| | | } |
| | | }, |
| | | "node_modules/p-map": { |
| | | "version": "4.0.0", |
| | | "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", |
| | | "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", |
| | | "dependencies": { |
| | | "aggregate-error": "^3.0.0" |
| | | }, |
| | | "engines": { |
| | | "node": ">=10" |
| | | }, |
| | | "funding": { |
| | | "url": "https://github.com/sponsors/sindresorhus" |
| | | } |
| | | }, |
| | | "node_modules/p-try": { |
| | | "version": "2.2.0", |
| | | "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", |
| | | "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", |
| | | "engines": { |
| | | "node": ">=6" |
| | | } |
| | | }, |
| | | "node_modules/parse-json": { |
| | | "version": "5.2.0", |
| | | "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", |
| | | "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", |
| | | "dependencies": { |
| | | "@babel/code-frame": "^7.0.0", |
| | | "error-ex": "^1.3.1", |
| | | "json-parse-even-better-errors": "^2.3.0", |
| | | "lines-and-columns": "^1.1.6" |
| | | }, |
| | | "engines": { |
| | | "node": ">=8" |
| | | }, |
| | | "funding": { |
| | | "url": "https://github.com/sponsors/sindresorhus" |
| | | } |
| | | }, |
| | | "node_modules/path-exists": { |
| | | "version": "4.0.0", |
| | | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", |
| | | "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", |
| | | "engines": { |
| | | "node": ">=8" |
| | | } |
| | | }, |
| | | "node_modules/path-is-absolute": { |
| | | "version": "1.0.1", |
| | | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", |
| | | "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", |
| | | "engines": { |
| | | "node": ">=0.10.0" |
| | | } |
| | | }, |
| | | "node_modules/path-key": { |
| | | "version": "3.1.1", |
| | | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", |
| | | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", |
| | | "engines": { |
| | | "node": ">=8" |
| | | } |
| | | }, |
| | | "node_modules/path-parse": { |
| | | "version": "1.0.7", |
| | | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", |
| | | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" |
| | | }, |
| | | "node_modules/process-nextick-args": { |
| | | "version": "2.0.1", |
| | | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", |
| | | "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" |
| | | }, |
| | | "node_modules/promise-inflight": { |
| | | "version": "1.0.1", |
| | | "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", |
| | | "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==" |
| | | }, |
| | | "node_modules/promise-retry": { |
| | | "version": "2.0.1", |
| | | "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", |
| | | "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", |
| | | "dependencies": { |
| | | "err-code": "^2.0.2", |
| | | "retry": "^0.12.0" |
| | | }, |
| | | "engines": { |
| | | "node": ">=10" |
| | | } |
| | | }, |
| | | "node_modules/quick-lru": { |
| | | "version": "4.0.1", |
| | | "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", |
| | | "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", |
| | | "engines": { |
| | | "node": ">=8" |
| | | } |
| | | }, |
| | | "node_modules/read-pkg": { |
| | | "version": "5.2.0", |
| | | "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", |
| | | "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", |
| | | "dependencies": { |
| | | "@types/normalize-package-data": "^2.4.0", |
| | | "normalize-package-data": "^2.5.0", |
| | | "parse-json": "^5.0.0", |
| | | "type-fest": "^0.6.0" |
| | | }, |
| | | "engines": { |
| | | "node": ">=8" |
| | | } |
| | | }, |
| | | "node_modules/read-pkg-up": { |
| | | "version": "7.0.1", |
| | | "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", |
| | | "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", |
| | | "dependencies": { |
| | | "find-up": "^4.1.0", |
| | | "read-pkg": "^5.2.0", |
| | | "type-fest": "^0.8.1" |
| | | }, |
| | | "engines": { |
| | | "node": ">=8" |
| | | }, |
| | | "funding": { |
| | | "url": "https://github.com/sponsors/sindresorhus" |
| | | } |
| | | }, |
| | | "node_modules/read-pkg-up/node_modules/type-fest": { |
| | | "version": "0.8.1", |
| | | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", |
| | | "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", |
| | | "engines": { |
| | | "node": ">=8" |
| | | } |
| | | }, |
| | | "node_modules/read-pkg/node_modules/hosted-git-info": { |
| | | "version": "2.8.9", |
| | | "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", |
| | | "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" |
| | | }, |
| | | "node_modules/read-pkg/node_modules/normalize-package-data": { |
| | | "version": "2.5.0", |
| | | "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", |
| | | "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", |
| | | "dependencies": { |
| | | "hosted-git-info": "^2.1.4", |
| | | "resolve": "^1.10.0", |
| | | "semver": "2 || 3 || 4 || 5", |
| | | "validate-npm-package-license": "^3.0.1" |
| | | } |
| | | }, |
| | | "node_modules/read-pkg/node_modules/semver": { |
| | | "version": "5.7.1", |
| | | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", |
| | | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", |
| | | "bin": { |
| | | "semver": "bin/semver" |
| | | } |
| | | }, |
| | | "node_modules/read-pkg/node_modules/type-fest": { |
| | | "version": "0.6.0", |
| | | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", |
| | | "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", |
| | | "engines": { |
| | | "node": ">=8" |
| | | } |
| | | }, |
| | | "node_modules/readable-stream": { |
| | | "version": "3.6.2", |
| | | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", |
| | | "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", |
| | | "dependencies": { |
| | | "inherits": "^2.0.3", |
| | | "string_decoder": "^1.1.1", |
| | | "util-deprecate": "^1.0.1" |
| | | }, |
| | | "engines": { |
| | | "node": ">= 6" |
| | | } |
| | | }, |
| | | "node_modules/redent": { |
| | | "version": "3.0.0", |
| | | "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", |
| | | "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", |
| | | "dependencies": { |
| | | "indent-string": "^4.0.0", |
| | | "strip-indent": "^3.0.0" |
| | | }, |
| | | "engines": { |
| | | "node": ">=8" |
| | | } |
| | | }, |
| | | "node_modules/require-directory": { |
| | | "version": "2.1.1", |
| | | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", |
| | | "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", |
| | | "engines": { |
| | | "node": ">=0.10.0" |
| | | } |
| | | }, |
| | | "node_modules/resolve": { |
| | | "version": "1.22.2", |
| | | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", |
| | | "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", |
| | | "dependencies": { |
| | | "is-core-module": "^2.11.0", |
| | | "path-parse": "^1.0.7", |
| | | "supports-preserve-symlinks-flag": "^1.0.0" |
| | | }, |
| | | "bin": { |
| | | "resolve": "bin/resolve" |
| | | }, |
| | | "funding": { |
| | | "url": "https://github.com/sponsors/ljharb" |
| | | } |
| | | }, |
| | | "node_modules/retry": { |
| | | "version": "0.12.0", |
| | | "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", |
| | | "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", |
| | | "engines": { |
| | | "node": ">= 4" |
| | | } |
| | | }, |
| | | "node_modules/rimraf": { |
| | | "version": "3.0.2", |
| | | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", |
| | | "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", |
| | | "dependencies": { |
| | | "glob": "^7.1.3" |
| | | }, |
| | | "bin": { |
| | | "rimraf": "bin.js" |
| | | }, |
| | | "funding": { |
| | | "url": "https://github.com/sponsors/isaacs" |
| | | } |
| | | }, |
| | | "node_modules/safe-buffer": { |
| | | "version": "5.2.1", |
| | | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", |
| | | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", |
| | | "funding": [ |
| | | { |
| | | "type": "github", |
| | | "url": "https://github.com/sponsors/feross" |
| | | }, |
| | | { |
| | | "type": "patreon", |
| | | "url": "https://www.patreon.com/feross" |
| | | }, |
| | | { |
| | | "type": "consulting", |
| | | "url": "https://feross.org/support" |
| | | } |
| | | ] |
| | | }, |
| | | "node_modules/safer-buffer": { |
| | | "version": "2.1.2", |
| | | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", |
| | | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", |
| | | "optional": true |
| | | }, |
| | | "node_modules/sass-graph": { |
| | | "version": "4.0.1", |
| | | "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-4.0.1.tgz", |
| | | "integrity": "sha512-5YCfmGBmxoIRYHnKK2AKzrAkCoQ8ozO+iumT8K4tXJXRVCPf+7s1/9KxTSW3Rbvf+7Y7b4FR3mWyLnQr3PHocA==", |
| | | "dependencies": { |
| | | "glob": "^7.0.0", |
| | | "lodash": "^4.17.11", |
| | | "scss-tokenizer": "^0.4.3", |
| | | "yargs": "^17.2.1" |
| | | }, |
| | | "bin": { |
| | | "sassgraph": "bin/sassgraph" |
| | | }, |
| | | "engines": { |
| | | "node": ">=12" |
| | | } |
| | | }, |
| | | "node_modules/scss-tokenizer": { |
| | | "version": "0.4.3", |
| | | "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.4.3.tgz", |
| | | "integrity": "sha512-raKLgf1LI5QMQnG+RxHz6oK0sL3x3I4FN2UDLqgLOGO8hodECNnNh5BXn7fAyBxrA8zVzdQizQ6XjNJQ+uBwMw==", |
| | | "dependencies": { |
| | | "js-base64": "^2.4.9", |
| | | "source-map": "^0.7.3" |
| | | } |
| | | }, |
| | | "node_modules/semver": { |
| | | "version": "7.5.1", |
| | | "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", |
| | | "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", |
| | | "dependencies": { |
| | | "lru-cache": "^6.0.0" |
| | | }, |
| | | "bin": { |
| | | "semver": "bin/semver.js" |
| | | }, |
| | | "engines": { |
| | | "node": ">=10" |
| | | } |
| | | }, |
| | | "node_modules/semver/node_modules/lru-cache": { |
| | | "version": "6.0.0", |
| | | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", |
| | | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", |
| | | "dependencies": { |
| | | "yallist": "^4.0.0" |
| | | }, |
| | | "engines": { |
| | | "node": ">=10" |
| | | } |
| | | }, |
| | | "node_modules/set-blocking": { |
| | | "version": "2.0.0", |
| | | "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", |
| | | "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" |
| | | }, |
| | | "node_modules/shebang-command": { |
| | | "version": "2.0.0", |
| | | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", |
| | | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", |
| | | "dependencies": { |
| | | "shebang-regex": "^3.0.0" |
| | | }, |
| | | "engines": { |
| | | "node": ">=8" |
| | | } |
| | | }, |
| | | "node_modules/shebang-regex": { |
| | | "version": "3.0.0", |
| | | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", |
| | | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", |
| | | "engines": { |
| | | "node": ">=8" |
| | | } |
| | | }, |
| | | "node_modules/signal-exit": { |
| | | "version": "3.0.7", |
| | | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", |
| | | "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" |
| | | }, |
| | | "node_modules/smart-buffer": { |
| | | "version": "4.2.0", |
| | | "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", |
| | | "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", |
| | | "engines": { |
| | | "node": ">= 6.0.0", |
| | | "npm": ">= 3.0.0" |
| | | } |
| | | }, |
| | | "node_modules/socks": { |
| | | "version": "2.7.1", |
| | | "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", |
| | | "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", |
| | | "dependencies": { |
| | | "ip": "^2.0.0", |
| | | "smart-buffer": "^4.2.0" |
| | | }, |
| | | "engines": { |
| | | "node": ">= 10.13.0", |
| | | "npm": ">= 3.0.0" |
| | | } |
| | | }, |
| | | "node_modules/socks-proxy-agent": { |
| | | "version": "7.0.0", |
| | | "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", |
| | | "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", |
| | | "dependencies": { |
| | | "agent-base": "^6.0.2", |
| | | "debug": "^4.3.3", |
| | | "socks": "^2.6.2" |
| | | }, |
| | | "engines": { |
| | | "node": ">= 10" |
| | | } |
| | | }, |
| | | "node_modules/source-map": { |
| | | "version": "0.7.4", |
| | | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", |
| | | "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", |
| | | "engines": { |
| | | "node": ">= 8" |
| | | } |
| | | }, |
| | | "node_modules/spdx-correct": { |
| | | "version": "3.2.0", |
| | | "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", |
| | | "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", |
| | | "dependencies": { |
| | | "spdx-expression-parse": "^3.0.0", |
| | | "spdx-license-ids": "^3.0.0" |
| | | } |
| | | }, |
| | | "node_modules/spdx-exceptions": { |
| | | "version": "2.3.0", |
| | | "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", |
| | | "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==" |
| | | }, |
| | | "node_modules/spdx-expression-parse": { |
| | | "version": "3.0.1", |
| | | "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", |
| | | "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", |
| | | "dependencies": { |
| | | "spdx-exceptions": "^2.1.0", |
| | | "spdx-license-ids": "^3.0.0" |
| | | } |
| | | }, |
| | | "node_modules/spdx-license-ids": { |
| | | "version": "3.0.13", |
| | | "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", |
| | | "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==" |
| | | }, |
| | | "node_modules/ssri": { |
| | | "version": "9.0.1", |
| | | "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", |
| | | "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", |
| | | "dependencies": { |
| | | "minipass": "^3.1.1" |
| | | }, |
| | | "engines": { |
| | | "node": "^12.13.0 || ^14.15.0 || >=16.0.0" |
| | | } |
| | | }, |
| | | "node_modules/stdout-stream": { |
| | | "version": "1.4.1", |
| | | "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.1.tgz", |
| | | "integrity": "sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA==", |
| | | "dependencies": { |
| | | "readable-stream": "^2.0.1" |
| | | } |
| | | }, |
| | | "node_modules/stdout-stream/node_modules/readable-stream": { |
| | | "version": "2.3.8", |
| | | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", |
| | | "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", |
| | | "dependencies": { |
| | | "core-util-is": "~1.0.0", |
| | | "inherits": "~2.0.3", |
| | | "isarray": "~1.0.0", |
| | | "process-nextick-args": "~2.0.0", |
| | | "safe-buffer": "~5.1.1", |
| | | "string_decoder": "~1.1.1", |
| | | "util-deprecate": "~1.0.1" |
| | | } |
| | | }, |
| | | "node_modules/stdout-stream/node_modules/safe-buffer": { |
| | | "version": "5.1.2", |
| | | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", |
| | | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" |
| | | }, |
| | | "node_modules/stdout-stream/node_modules/string_decoder": { |
| | | "version": "1.1.1", |
| | | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", |
| | | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", |
| | | "dependencies": { |
| | | "safe-buffer": "~5.1.0" |
| | | } |
| | | }, |
| | | "node_modules/string_decoder": { |
| | | "version": "1.3.0", |
| | | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", |
| | | "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", |
| | | "dependencies": { |
| | | "safe-buffer": "~5.2.0" |
| | | } |
| | | }, |
| | | "node_modules/string-width": { |
| | | "version": "4.2.3", |
| | | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", |
| | | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", |
| | | "dependencies": { |
| | | "emoji-regex": "^8.0.0", |
| | | "is-fullwidth-code-point": "^3.0.0", |
| | | "strip-ansi": "^6.0.1" |
| | | }, |
| | | "engines": { |
| | | "node": ">=8" |
| | | } |
| | | }, |
| | | "node_modules/strip-ansi": { |
| | | "version": "6.0.1", |
| | | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", |
| | | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", |
| | | "dependencies": { |
| | | "ansi-regex": "^5.0.1" |
| | | }, |
| | | "engines": { |
| | | "node": ">=8" |
| | | } |
| | | }, |
| | | "node_modules/strip-indent": { |
| | | "version": "3.0.0", |
| | | "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", |
| | | "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", |
| | | "dependencies": { |
| | | "min-indent": "^1.0.0" |
| | | }, |
| | | "engines": { |
| | | "node": ">=8" |
| | | } |
| | | }, |
| | | "node_modules/supports-color": { |
| | | "version": "7.2.0", |
| | | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", |
| | | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", |
| | | "dependencies": { |
| | | "has-flag": "^4.0.0" |
| | | }, |
| | | "engines": { |
| | | "node": ">=8" |
| | | } |
| | | }, |
| | | "node_modules/supports-preserve-symlinks-flag": { |
| | | "version": "1.0.0", |
| | | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", |
| | | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", |
| | | "engines": { |
| | | "node": ">= 0.4" |
| | | }, |
| | | "funding": { |
| | | "url": "https://github.com/sponsors/ljharb" |
| | | } |
| | | }, |
| | | "node_modules/tar": { |
| | | "version": "6.1.15", |
| | | "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.15.tgz", |
| | | "integrity": "sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A==", |
| | | "dependencies": { |
| | | "chownr": "^2.0.0", |
| | | "fs-minipass": "^2.0.0", |
| | | "minipass": "^5.0.0", |
| | | "minizlib": "^2.1.1", |
| | | "mkdirp": "^1.0.3", |
| | | "yallist": "^4.0.0" |
| | | }, |
| | | "engines": { |
| | | "node": ">=10" |
| | | } |
| | | }, |
| | | "node_modules/tar/node_modules/minipass": { |
| | | "version": "5.0.0", |
| | | "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", |
| | | "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", |
| | | "engines": { |
| | | "node": ">=8" |
| | | } |
| | | }, |
| | | "node_modules/trim-newlines": { |
| | | "version": "3.0.1", |
| | | "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", |
| | | "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", |
| | | "engines": { |
| | | "node": ">=8" |
| | | } |
| | | }, |
| | | "node_modules/true-case-path": { |
| | | "version": "2.2.1", |
| | | "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-2.2.1.tgz", |
| | | "integrity": "sha512-0z3j8R7MCjy10kc/g+qg7Ln3alJTodw9aDuVWZa3uiWqfuBMKeAeP2ocWcxoyM3D73yz3Jt/Pu4qPr4wHSdB/Q==" |
| | | }, |
| | | "node_modules/type-fest": { |
| | | "version": "0.18.1", |
| | | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", |
| | | "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", |
| | | "engines": { |
| | | "node": ">=10" |
| | | }, |
| | | "funding": { |
| | | "url": "https://github.com/sponsors/sindresorhus" |
| | | } |
| | | }, |
| | | "node_modules/unique-filename": { |
| | | "version": "2.0.1", |
| | | "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz", |
| | | "integrity": "sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==", |
| | | "dependencies": { |
| | | "unique-slug": "^3.0.0" |
| | | }, |
| | | "engines": { |
| | | "node": "^12.13.0 || ^14.15.0 || >=16.0.0" |
| | | } |
| | | }, |
| | | "node_modules/unique-slug": { |
| | | "version": "3.0.0", |
| | | "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz", |
| | | "integrity": "sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==", |
| | | "dependencies": { |
| | | "imurmurhash": "^0.1.4" |
| | | }, |
| | | "engines": { |
| | | "node": "^12.13.0 || ^14.15.0 || >=16.0.0" |
| | | } |
| | | }, |
| | | "node_modules/util-deprecate": { |
| | | "version": "1.0.2", |
| | | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", |
| | | "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" |
| | | }, |
| | | "node_modules/validate-npm-package-license": { |
| | | "version": "3.0.4", |
| | | "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", |
| | | "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", |
| | | "dependencies": { |
| | | "spdx-correct": "^3.0.0", |
| | | "spdx-expression-parse": "^3.0.0" |
| | | } |
| | | }, |
| | | "node_modules/which": { |
| | | "version": "2.0.2", |
| | | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", |
| | | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", |
| | | "dependencies": { |
| | | "isexe": "^2.0.0" |
| | | }, |
| | | "bin": { |
| | | "node-which": "bin/node-which" |
| | | }, |
| | | "engines": { |
| | | "node": ">= 8" |
| | | } |
| | | }, |
| | | "node_modules/wide-align": { |
| | | "version": "1.1.5", |
| | | "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", |
| | | "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", |
| | | "dependencies": { |
| | | "string-width": "^1.0.2 || 2 || 3 || 4" |
| | | } |
| | | }, |
| | | "node_modules/wrap-ansi": { |
| | | "version": "7.0.0", |
| | | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", |
| | | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", |
| | | "dependencies": { |
| | | "ansi-styles": "^4.0.0", |
| | | "string-width": "^4.1.0", |
| | | "strip-ansi": "^6.0.0" |
| | | }, |
| | | "engines": { |
| | | "node": ">=10" |
| | | }, |
| | | "funding": { |
| | | "url": "https://github.com/chalk/wrap-ansi?sponsor=1" |
| | | } |
| | | }, |
| | | "node_modules/wrappy": { |
| | | "version": "1.0.2", |
| | | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", |
| | | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" |
| | | }, |
| | | "node_modules/y18n": { |
| | | "version": "5.0.8", |
| | | "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", |
| | | "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", |
| | | "engines": { |
| | | "node": ">=10" |
| | | } |
| | | }, |
| | | "node_modules/yallist": { |
| | | "version": "4.0.0", |
| | | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", |
| | | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" |
| | | }, |
| | | "node_modules/yargs": { |
| | | "version": "17.7.2", |
| | | "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", |
| | | "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", |
| | | "dependencies": { |
| | | "cliui": "^8.0.1", |
| | | "escalade": "^3.1.1", |
| | | "get-caller-file": "^2.0.5", |
| | | "require-directory": "^2.1.1", |
| | | "string-width": "^4.2.3", |
| | | "y18n": "^5.0.5", |
| | | "yargs-parser": "^21.1.1" |
| | | }, |
| | | "engines": { |
| | | "node": ">=12" |
| | | } |
| | | }, |
| | | "node_modules/yargs-parser": { |
| | | "version": "20.2.9", |
| | | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", |
| | | "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", |
| | | "engines": { |
| | | "node": ">=10" |
| | | } |
| | | }, |
| | | "node_modules/yargs/node_modules/yargs-parser": { |
| | | "version": "21.1.1", |
| | | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", |
| | | "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", |
| | | "engines": { |
| | | "node": ">=12" |
| | | } |
| | | } |
| | | }, |
| | | "dependencies": { |
| | | "@babel/code-frame": { |
| | | "version": "7.21.4", |
| | | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.21.4.tgz", |
| | | "integrity": "sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==", |
| | | "requires": { |
| | | "@babel/highlight": "^7.18.6" |
| | | } |
| | | }, |
| | | "@babel/helper-validator-identifier": { |
| | | "version": "7.19.1", |
| | | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", |
| | | "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==" |
| | | }, |
| | | "@babel/highlight": { |
| | | "version": "7.18.6", |
| | | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", |
| | | "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", |
| | | "requires": { |
| | | "@babel/helper-validator-identifier": "^7.18.6", |
| | | "chalk": "^2.0.0", |
| | | "js-tokens": "^4.0.0" |
| | | }, |
| | | "dependencies": { |
| | | "ansi-styles": { |
| | | "version": "3.2.1", |
| | | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", |
| | | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", |
| | | "requires": { |
| | | "color-convert": "^1.9.0" |
| | | } |
| | | }, |
| | | "chalk": { |
| | | "version": "2.4.2", |
| | | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", |
| | | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", |
| | | "requires": { |
| | | "ansi-styles": "^3.2.1", |
| | | "escape-string-regexp": "^1.0.5", |
| | | "supports-color": "^5.3.0" |
| | | } |
| | | }, |
| | | "color-convert": { |
| | | "version": "1.9.3", |
| | | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", |
| | | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", |
| | | "requires": { |
| | | "color-name": "1.1.3" |
| | | } |
| | | }, |
| | | "color-name": { |
| | | "version": "1.1.3", |
| | | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", |
| | | "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" |
| | | }, |
| | | "has-flag": { |
| | | "version": "3.0.0", |
| | | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", |
| | | "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" |
| | | }, |
| | | "supports-color": { |
| | | "version": "5.5.0", |
| | | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", |
| | | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", |
| | | "requires": { |
| | | "has-flag": "^3.0.0" |
| | | } |
| | | } |
| | | } |
| | | }, |
| | | "@gar/promisify": { |
| | | "version": "1.1.3", |
| | | "resolved": "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz", |
| | | "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==" |
| | | }, |
| | | "@npmcli/fs": { |
| | | "version": "2.1.2", |
| | | "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-2.1.2.tgz", |
| | | "integrity": "sha512-yOJKRvohFOaLqipNtwYB9WugyZKhC/DZC4VYPmpaCzDBrA8YpK3qHZ8/HGscMnE4GqbkLNuVcCnxkeQEdGt6LQ==", |
| | | "requires": { |
| | | "@gar/promisify": "^1.1.3", |
| | | "semver": "^7.3.5" |
| | | } |
| | | }, |
| | | "@npmcli/move-file": { |
| | | "version": "2.0.1", |
| | | "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-2.0.1.tgz", |
| | | "integrity": "sha512-mJd2Z5TjYWq/ttPLLGqArdtnC74J6bOzg4rMDnN+p1xTacZ2yPRCk2y0oSWQtygLR9YVQXgOcONrwtnk3JupxQ==", |
| | | "requires": { |
| | | "mkdirp": "^1.0.4", |
| | | "rimraf": "^3.0.2" |
| | | } |
| | | }, |
| | | "@tootallnate/once": { |
| | | "version": "2.0.0", |
| | | "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", |
| | | "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==" |
| | | }, |
| | | "@types/minimist": { |
| | | "version": "1.2.2", |
| | | "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", |
| | | "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==" |
| | | }, |
| | | "@types/normalize-package-data": { |
| | | "version": "2.4.1", |
| | | "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", |
| | | "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==" |
| | | }, |
| | | "abbrev": { |
| | | "version": "1.1.1", |
| | | "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", |
| | | "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" |
| | | }, |
| | | "agent-base": { |
| | | "version": "6.0.2", |
| | | "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", |
| | | "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", |
| | | "requires": { |
| | | "debug": "4" |
| | | } |
| | | }, |
| | | "agentkeepalive": { |
| | | "version": "4.3.0", |
| | | "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.3.0.tgz", |
| | | "integrity": "sha512-7Epl1Blf4Sy37j4v9f9FjICCh4+KAQOyXgHEwlyBiAQLbhKdq/i2QQU3amQalS/wPhdPzDXPL5DMR5bkn+YeWg==", |
| | | "requires": { |
| | | "debug": "^4.1.0", |
| | | "depd": "^2.0.0", |
| | | "humanize-ms": "^1.2.1" |
| | | } |
| | | }, |
| | | "aggregate-error": { |
| | | "version": "3.1.0", |
| | | "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", |
| | | "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", |
| | | "requires": { |
| | | "clean-stack": "^2.0.0", |
| | | "indent-string": "^4.0.0" |
| | | } |
| | | }, |
| | | "ansi-regex": { |
| | | "version": "5.0.1", |
| | | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", |
| | | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" |
| | | }, |
| | | "ansi-styles": { |
| | | "version": "4.3.0", |
| | | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", |
| | | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", |
| | | "requires": { |
| | | "color-convert": "^2.0.1" |
| | | } |
| | | }, |
| | | "aproba": { |
| | | "version": "2.0.0", |
| | | "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", |
| | | "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==" |
| | | }, |
| | | "are-we-there-yet": { |
| | | "version": "3.0.1", |
| | | "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", |
| | | "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", |
| | | "requires": { |
| | | "delegates": "^1.0.0", |
| | | "readable-stream": "^3.6.0" |
| | | } |
| | | }, |
| | | "arrify": { |
| | | "version": "1.0.1", |
| | | "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", |
| | | "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==" |
| | | }, |
| | | "async-foreach": { |
| | | "version": "0.1.3", |
| | | "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz", |
| | | "integrity": "sha512-VUeSMD8nEGBWaZK4lizI1sf3yEC7pnAQ/mrI7pC2fBz2s/tq5jWWEngTwaf0Gruu/OoXRGLGg1XFqpYBiGTYJA==" |
| | | }, |
| | | "balanced-match": { |
| | | "version": "1.0.2", |
| | | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", |
| | | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" |
| | | }, |
| | | "brace-expansion": { |
| | | "version": "1.1.11", |
| | | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", |
| | | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", |
| | | "requires": { |
| | | "balanced-match": "^1.0.0", |
| | | "concat-map": "0.0.1" |
| | | } |
| | | }, |
| | | "cacache": { |
| | | "version": "16.1.3", |
| | | "resolved": "https://registry.npmjs.org/cacache/-/cacache-16.1.3.tgz", |
| | | "integrity": "sha512-/+Emcj9DAXxX4cwlLmRI9c166RuL3w30zp4R7Joiv2cQTtTtA+jeuCAjH3ZlGnYS3tKENSrKhAzVVP9GVyzeYQ==", |
| | | "requires": { |
| | | "@npmcli/fs": "^2.1.0", |
| | | "@npmcli/move-file": "^2.0.0", |
| | | "chownr": "^2.0.0", |
| | | "fs-minipass": "^2.1.0", |
| | | "glob": "^8.0.1", |
| | | "infer-owner": "^1.0.4", |
| | | "lru-cache": "^7.7.1", |
| | | "minipass": "^3.1.6", |
| | | "minipass-collect": "^1.0.2", |
| | | "minipass-flush": "^1.0.5", |
| | | "minipass-pipeline": "^1.2.4", |
| | | "mkdirp": "^1.0.4", |
| | | "p-map": "^4.0.0", |
| | | "promise-inflight": "^1.0.1", |
| | | "rimraf": "^3.0.2", |
| | | "ssri": "^9.0.0", |
| | | "tar": "^6.1.11", |
| | | "unique-filename": "^2.0.0" |
| | | }, |
| | | "dependencies": { |
| | | "brace-expansion": { |
| | | "version": "2.0.1", |
| | | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", |
| | | "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", |
| | | "requires": { |
| | | "balanced-match": "^1.0.0" |
| | | } |
| | | }, |
| | | "glob": { |
| | | "version": "8.1.0", |
| | | "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", |
| | | "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", |
| | | "requires": { |
| | | "fs.realpath": "^1.0.0", |
| | | "inflight": "^1.0.4", |
| | | "inherits": "2", |
| | | "minimatch": "^5.0.1", |
| | | "once": "^1.3.0" |
| | | } |
| | | }, |
| | | "minimatch": { |
| | | "version": "5.1.6", |
| | | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", |
| | | "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", |
| | | "requires": { |
| | | "brace-expansion": "^2.0.1" |
| | | } |
| | | } |
| | | } |
| | | }, |
| | | "camelcase": { |
| | | "version": "5.3.1", |
| | | "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", |
| | | "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" |
| | | }, |
| | | "camelcase-keys": { |
| | | "version": "6.2.2", |
| | | "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", |
| | | "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", |
| | | "requires": { |
| | | "camelcase": "^5.3.1", |
| | | "map-obj": "^4.0.0", |
| | | "quick-lru": "^4.0.1" |
| | | } |
| | | }, |
| | | "chalk": { |
| | | "version": "4.1.2", |
| | | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", |
| | | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", |
| | | "requires": { |
| | | "ansi-styles": "^4.1.0", |
| | | "supports-color": "^7.1.0" |
| | | } |
| | | }, |
| | | "chownr": { |
| | | "version": "2.0.0", |
| | | "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", |
| | | "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==" |
| | | }, |
| | | "clean-stack": { |
| | | "version": "2.2.0", |
| | | "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", |
| | | "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==" |
| | | }, |
| | | "cliui": { |
| | | "version": "8.0.1", |
| | | "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", |
| | | "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", |
| | | "requires": { |
| | | "string-width": "^4.2.0", |
| | | "strip-ansi": "^6.0.1", |
| | | "wrap-ansi": "^7.0.0" |
| | | } |
| | | }, |
| | | "color-convert": { |
| | | "version": "2.0.1", |
| | | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", |
| | | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", |
| | | "requires": { |
| | | "color-name": "~1.1.4" |
| | | } |
| | | }, |
| | | "color-name": { |
| | | "version": "1.1.4", |
| | | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", |
| | | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" |
| | | }, |
| | | "color-support": { |
| | | "version": "1.1.3", |
| | | "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", |
| | | "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==" |
| | | }, |
| | | "concat-map": { |
| | | "version": "0.0.1", |
| | | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", |
| | | "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" |
| | | }, |
| | | "console-control-strings": { |
| | | "version": "1.1.0", |
| | | "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", |
| | | "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==" |
| | | }, |
| | | "core-util-is": { |
| | | "version": "1.0.3", |
| | | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", |
| | | "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" |
| | | }, |
| | | "cross-spawn": { |
| | | "version": "7.0.3", |
| | | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", |
| | | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", |
| | | "requires": { |
| | | "path-key": "^3.1.0", |
| | | "shebang-command": "^2.0.0", |
| | | "which": "^2.0.1" |
| | | } |
| | | }, |
| | | "debug": { |
| | | "version": "4.3.4", |
| | | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", |
| | | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", |
| | | "requires": { |
| | | "ms": "2.1.2" |
| | | } |
| | | }, |
| | | "decamelize": { |
| | | "version": "1.2.0", |
| | | "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", |
| | | "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==" |
| | | }, |
| | | "decamelize-keys": { |
| | | "version": "1.1.1", |
| | | "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", |
| | | "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", |
| | | "requires": { |
| | | "decamelize": "^1.1.0", |
| | | "map-obj": "^1.0.0" |
| | | }, |
| | | "dependencies": { |
| | | "map-obj": { |
| | | "version": "1.0.1", |
| | | "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", |
| | | "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==" |
| | | } |
| | | } |
| | | }, |
| | | "delegates": { |
| | | "version": "1.0.0", |
| | | "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", |
| | | "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" |
| | | }, |
| | | "depd": { |
| | | "version": "2.0.0", |
| | | "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", |
| | | "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==" |
| | | }, |
| | | "emoji-regex": { |
| | | "version": "8.0.0", |
| | | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", |
| | | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" |
| | | }, |
| | | "encoding": { |
| | | "version": "0.1.13", |
| | | "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", |
| | | "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", |
| | | "optional": true, |
| | | "requires": { |
| | | "iconv-lite": "^0.6.2" |
| | | } |
| | | }, |
| | | "env-paths": { |
| | | "version": "2.2.1", |
| | | "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", |
| | | "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==" |
| | | }, |
| | | "err-code": { |
| | | "version": "2.0.3", |
| | | "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", |
| | | "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==" |
| | | }, |
| | | "error-ex": { |
| | | "version": "1.3.2", |
| | | "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", |
| | | "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", |
| | | "requires": { |
| | | "is-arrayish": "^0.2.1" |
| | | } |
| | | }, |
| | | "escalade": { |
| | | "version": "3.1.1", |
| | | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", |
| | | "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" |
| | | }, |
| | | "escape-string-regexp": { |
| | | "version": "1.0.5", |
| | | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", |
| | | "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" |
| | | }, |
| | | "find-up": { |
| | | "version": "4.1.0", |
| | | "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", |
| | | "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", |
| | | "requires": { |
| | | "locate-path": "^5.0.0", |
| | | "path-exists": "^4.0.0" |
| | | } |
| | | }, |
| | | "fs-minipass": { |
| | | "version": "2.1.0", |
| | | "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", |
| | | "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", |
| | | "requires": { |
| | | "minipass": "^3.0.0" |
| | | } |
| | | }, |
| | | "fs.realpath": { |
| | | "version": "1.0.0", |
| | | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", |
| | | "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" |
| | | }, |
| | | "function-bind": { |
| | | "version": "1.1.1", |
| | | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", |
| | | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" |
| | | }, |
| | | "gauge": { |
| | | "version": "4.0.4", |
| | | "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", |
| | | "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", |
| | | "requires": { |
| | | "aproba": "^1.0.3 || ^2.0.0", |
| | | "color-support": "^1.1.3", |
| | | "console-control-strings": "^1.1.0", |
| | | "has-unicode": "^2.0.1", |
| | | "signal-exit": "^3.0.7", |
| | | "string-width": "^4.2.3", |
| | | "strip-ansi": "^6.0.1", |
| | | "wide-align": "^1.1.5" |
| | | } |
| | | }, |
| | | "gaze": { |
| | | "version": "1.1.3", |
| | | "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", |
| | | "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", |
| | | "requires": { |
| | | "globule": "^1.0.0" |
| | | } |
| | | }, |
| | | "get-caller-file": { |
| | | "version": "2.0.5", |
| | | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", |
| | | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" |
| | | }, |
| | | "get-stdin": { |
| | | "version": "4.0.1", |
| | | "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", |
| | | "integrity": "sha512-F5aQMywwJ2n85s4hJPTT9RPxGmubonuB10MNYo17/xph174n2MIR33HRguhzVag10O/npM7SPk73LMZNP+FaWw==" |
| | | }, |
| | | "glob": { |
| | | "version": "7.2.3", |
| | | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", |
| | | "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", |
| | | "requires": { |
| | | "fs.realpath": "^1.0.0", |
| | | "inflight": "^1.0.4", |
| | | "inherits": "2", |
| | | "minimatch": "^3.1.1", |
| | | "once": "^1.3.0", |
| | | "path-is-absolute": "^1.0.0" |
| | | } |
| | | }, |
| | | "globule": { |
| | | "version": "1.3.4", |
| | | "resolved": "https://registry.npmjs.org/globule/-/globule-1.3.4.tgz", |
| | | "integrity": "sha512-OPTIfhMBh7JbBYDpa5b+Q5ptmMWKwcNcFSR/0c6t8V4f3ZAVBEsKNY37QdVqmLRYSMhOUGYrY0QhSoEpzGr/Eg==", |
| | | "requires": { |
| | | "glob": "~7.1.1", |
| | | "lodash": "^4.17.21", |
| | | "minimatch": "~3.0.2" |
| | | }, |
| | | "dependencies": { |
| | | "glob": { |
| | | "version": "7.1.7", |
| | | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", |
| | | "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", |
| | | "requires": { |
| | | "fs.realpath": "^1.0.0", |
| | | "inflight": "^1.0.4", |
| | | "inherits": "2", |
| | | "minimatch": "^3.0.4", |
| | | "once": "^1.3.0", |
| | | "path-is-absolute": "^1.0.0" |
| | | } |
| | | }, |
| | | "minimatch": { |
| | | "version": "3.0.8", |
| | | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz", |
| | | "integrity": "sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==", |
| | | "requires": { |
| | | "brace-expansion": "^1.1.7" |
| | | } |
| | | } |
| | | } |
| | | }, |
| | | "graceful-fs": { |
| | | "version": "4.2.11", |
| | | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", |
| | | "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" |
| | | }, |
| | | "hard-rejection": { |
| | | "version": "2.1.0", |
| | | "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", |
| | | "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==" |
| | | }, |
| | | "has": { |
| | | "version": "1.0.3", |
| | | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", |
| | | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", |
| | | "requires": { |
| | | "function-bind": "^1.1.1" |
| | | } |
| | | }, |
| | | "has-flag": { |
| | | "version": "4.0.0", |
| | | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", |
| | | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" |
| | | }, |
| | | "has-unicode": { |
| | | "version": "2.0.1", |
| | | "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", |
| | | "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" |
| | | }, |
| | | "hosted-git-info": { |
| | | "version": "4.1.0", |
| | | "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", |
| | | "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", |
| | | "requires": { |
| | | "lru-cache": "^6.0.0" |
| | | }, |
| | | "dependencies": { |
| | | "lru-cache": { |
| | | "version": "6.0.0", |
| | | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", |
| | | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", |
| | | "requires": { |
| | | "yallist": "^4.0.0" |
| | | } |
| | | } |
| | | } |
| | | }, |
| | | "http-cache-semantics": { |
| | | "version": "4.1.1", |
| | | "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", |
| | | "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==" |
| | | }, |
| | | "http-proxy-agent": { |
| | | "version": "5.0.0", |
| | | "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", |
| | | "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", |
| | | "requires": { |
| | | "@tootallnate/once": "2", |
| | | "agent-base": "6", |
| | | "debug": "4" |
| | | } |
| | | }, |
| | | "https-proxy-agent": { |
| | | "version": "5.0.1", |
| | | "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", |
| | | "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", |
| | | "requires": { |
| | | "agent-base": "6", |
| | | "debug": "4" |
| | | } |
| | | }, |
| | | "humanize-ms": { |
| | | "version": "1.2.1", |
| | | "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", |
| | | "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", |
| | | "requires": { |
| | | "ms": "^2.0.0" |
| | | } |
| | | }, |
| | | "iconv-lite": { |
| | | "version": "0.6.3", |
| | | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", |
| | | "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", |
| | | "optional": true, |
| | | "requires": { |
| | | "safer-buffer": ">= 2.1.2 < 3.0.0" |
| | | } |
| | | }, |
| | | "imurmurhash": { |
| | | "version": "0.1.4", |
| | | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", |
| | | "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==" |
| | | }, |
| | | "indent-string": { |
| | | "version": "4.0.0", |
| | | "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", |
| | | "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" |
| | | }, |
| | | "infer-owner": { |
| | | "version": "1.0.4", |
| | | "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", |
| | | "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==" |
| | | }, |
| | | "inflight": { |
| | | "version": "1.0.6", |
| | | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", |
| | | "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", |
| | | "requires": { |
| | | "once": "^1.3.0", |
| | | "wrappy": "1" |
| | | } |
| | | }, |
| | | "inherits": { |
| | | "version": "2.0.4", |
| | | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", |
| | | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" |
| | | }, |
| | | "ip": { |
| | | "version": "2.0.0", |
| | | "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", |
| | | "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==" |
| | | }, |
| | | "is-arrayish": { |
| | | "version": "0.2.1", |
| | | "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", |
| | | "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==" |
| | | }, |
| | | "is-core-module": { |
| | | "version": "2.12.1", |
| | | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.1.tgz", |
| | | "integrity": "sha512-Q4ZuBAe2FUsKtyQJoQHlvP8OvBERxO3jEmy1I7hcRXcJBGGHFh/aJBswbXuS9sgrDH2QUO8ilkwNPHvHMd8clg==", |
| | | "requires": { |
| | | "has": "^1.0.3" |
| | | } |
| | | }, |
| | | "is-fullwidth-code-point": { |
| | | "version": "3.0.0", |
| | | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", |
| | | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" |
| | | }, |
| | | "is-lambda": { |
| | | "version": "1.0.1", |
| | | "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", |
| | | "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==" |
| | | }, |
| | | "is-plain-obj": { |
| | | "version": "1.1.0", |
| | | "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", |
| | | "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==" |
| | | }, |
| | | "isarray": { |
| | | "version": "1.0.0", |
| | | "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", |
| | | "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" |
| | | }, |
| | | "isexe": { |
| | | "version": "2.0.0", |
| | | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", |
| | | "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" |
| | | }, |
| | | "js-base64": { |
| | | "version": "2.6.4", |
| | | "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.4.tgz", |
| | | "integrity": "sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==" |
| | | }, |
| | | "js-tokens": { |
| | | "version": "4.0.0", |
| | | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", |
| | | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" |
| | | }, |
| | | "json-parse-even-better-errors": { |
| | | "version": "2.3.1", |
| | | "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", |
| | | "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" |
| | | }, |
| | | "kind-of": { |
| | | "version": "6.0.3", |
| | | "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", |
| | | "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" |
| | | }, |
| | | "lines-and-columns": { |
| | | "version": "1.2.4", |
| | | "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", |
| | | "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" |
| | | }, |
| | | "locate-path": { |
| | | "version": "5.0.0", |
| | | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", |
| | | "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", |
| | | "requires": { |
| | | "p-locate": "^4.1.0" |
| | | } |
| | | }, |
| | | "lodash": { |
| | | "version": "4.17.21", |
| | | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", |
| | | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" |
| | | }, |
| | | "lru-cache": { |
| | | "version": "7.18.3", |
| | | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", |
| | | "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==" |
| | | }, |
| | | "make-fetch-happen": { |
| | | "version": "10.2.1", |
| | | "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-10.2.1.tgz", |
| | | "integrity": "sha512-NgOPbRiaQM10DYXvN3/hhGVI2M5MtITFryzBGxHM5p4wnFxsVCbxkrBrDsk+EZ5OB4jEOT7AjDxtdF+KVEFT7w==", |
| | | "requires": { |
| | | "agentkeepalive": "^4.2.1", |
| | | "cacache": "^16.1.0", |
| | | "http-cache-semantics": "^4.1.0", |
| | | "http-proxy-agent": "^5.0.0", |
| | | "https-proxy-agent": "^5.0.0", |
| | | "is-lambda": "^1.0.1", |
| | | "lru-cache": "^7.7.1", |
| | | "minipass": "^3.1.6", |
| | | "minipass-collect": "^1.0.2", |
| | | "minipass-fetch": "^2.0.3", |
| | | "minipass-flush": "^1.0.5", |
| | | "minipass-pipeline": "^1.2.4", |
| | | "negotiator": "^0.6.3", |
| | | "promise-retry": "^2.0.1", |
| | | "socks-proxy-agent": "^7.0.0", |
| | | "ssri": "^9.0.0" |
| | | } |
| | | }, |
| | | "map-obj": { |
| | | "version": "4.3.0", |
| | | "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", |
| | | "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==" |
| | | }, |
| | | "meow": { |
| | | "version": "9.0.0", |
| | | "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz", |
| | | "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==", |
| | | "requires": { |
| | | "@types/minimist": "^1.2.0", |
| | | "camelcase-keys": "^6.2.2", |
| | | "decamelize": "^1.2.0", |
| | | "decamelize-keys": "^1.1.0", |
| | | "hard-rejection": "^2.1.0", |
| | | "minimist-options": "4.1.0", |
| | | "normalize-package-data": "^3.0.0", |
| | | "read-pkg-up": "^7.0.1", |
| | | "redent": "^3.0.0", |
| | | "trim-newlines": "^3.0.0", |
| | | "type-fest": "^0.18.0", |
| | | "yargs-parser": "^20.2.3" |
| | | } |
| | | }, |
| | | "min-indent": { |
| | | "version": "1.0.1", |
| | | "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", |
| | | "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==" |
| | | }, |
| | | "minimatch": { |
| | | "version": "3.1.2", |
| | | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", |
| | | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", |
| | | "requires": { |
| | | "brace-expansion": "^1.1.7" |
| | | } |
| | | }, |
| | | "minimist-options": { |
| | | "version": "4.1.0", |
| | | "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", |
| | | "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", |
| | | "requires": { |
| | | "arrify": "^1.0.1", |
| | | "is-plain-obj": "^1.1.0", |
| | | "kind-of": "^6.0.3" |
| | | } |
| | | }, |
| | | "minipass": { |
| | | "version": "3.3.6", |
| | | "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", |
| | | "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", |
| | | "requires": { |
| | | "yallist": "^4.0.0" |
| | | } |
| | | }, |
| | | "minipass-collect": { |
| | | "version": "1.0.2", |
| | | "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", |
| | | "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", |
| | | "requires": { |
| | | "minipass": "^3.0.0" |
| | | } |
| | | }, |
| | | "minipass-fetch": { |
| | | "version": "2.1.2", |
| | | "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-2.1.2.tgz", |
| | | "integrity": "sha512-LT49Zi2/WMROHYoqGgdlQIZh8mLPZmOrN2NdJjMXxYe4nkN6FUyuPuOAOedNJDrx0IRGg9+4guZewtp8hE6TxA==", |
| | | "requires": { |
| | | "encoding": "^0.1.13", |
| | | "minipass": "^3.1.6", |
| | | "minipass-sized": "^1.0.3", |
| | | "minizlib": "^2.1.2" |
| | | } |
| | | }, |
| | | "minipass-flush": { |
| | | "version": "1.0.5", |
| | | "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", |
| | | "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", |
| | | "requires": { |
| | | "minipass": "^3.0.0" |
| | | } |
| | | }, |
| | | "minipass-pipeline": { |
| | | "version": "1.2.4", |
| | | "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", |
| | | "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", |
| | | "requires": { |
| | | "minipass": "^3.0.0" |
| | | } |
| | | }, |
| | | "minipass-sized": { |
| | | "version": "1.0.3", |
| | | "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", |
| | | "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", |
| | | "requires": { |
| | | "minipass": "^3.0.0" |
| | | } |
| | | }, |
| | | "minizlib": { |
| | | "version": "2.1.2", |
| | | "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", |
| | | "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", |
| | | "requires": { |
| | | "minipass": "^3.0.0", |
| | | "yallist": "^4.0.0" |
| | | } |
| | | }, |
| | | "mkdirp": { |
| | | "version": "1.0.4", |
| | | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", |
| | | "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" |
| | | }, |
| | | "ms": { |
| | | "version": "2.1.2", |
| | | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", |
| | | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" |
| | | }, |
| | | "nan": { |
| | | "version": "2.17.0", |
| | | "resolved": "https://registry.npmjs.org/nan/-/nan-2.17.0.tgz", |
| | | "integrity": "sha512-2ZTgtl0nJsO0KQCjEpxcIr5D+Yv90plTitZt9JBfQvVJDS5seMl3FOvsh3+9CoYWXf/1l5OaZzzF6nDm4cagaQ==" |
| | | }, |
| | | "negotiator": { |
| | | "version": "0.6.3", |
| | | "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", |
| | | "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==" |
| | | }, |
| | | "node-gyp": { |
| | | "version": "8.4.1", |
| | | "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz", |
| | | "integrity": "sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==", |
| | | "requires": { |
| | | "env-paths": "^2.2.0", |
| | | "glob": "^7.1.4", |
| | | "graceful-fs": "^4.2.6", |
| | | "make-fetch-happen": "^9.1.0", |
| | | "nopt": "^5.0.0", |
| | | "npmlog": "^6.0.0", |
| | | "rimraf": "^3.0.2", |
| | | "semver": "^7.3.5", |
| | | "tar": "^6.1.2", |
| | | "which": "^2.0.2" |
| | | }, |
| | | "dependencies": { |
| | | "@npmcli/fs": { |
| | | "version": "1.1.1", |
| | | "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz", |
| | | "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", |
| | | "requires": { |
| | | "@gar/promisify": "^1.0.1", |
| | | "semver": "^7.3.5" |
| | | } |
| | | }, |
| | | "@npmcli/move-file": { |
| | | "version": "1.1.2", |
| | | "resolved": "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz", |
| | | "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", |
| | | "requires": { |
| | | "mkdirp": "^1.0.4", |
| | | "rimraf": "^3.0.2" |
| | | } |
| | | }, |
| | | "@tootallnate/once": { |
| | | "version": "1.1.2", |
| | | "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", |
| | | "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==" |
| | | }, |
| | | "cacache": { |
| | | "version": "15.3.0", |
| | | "resolved": "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz", |
| | | "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", |
| | | "requires": { |
| | | "@npmcli/fs": "^1.0.0", |
| | | "@npmcli/move-file": "^1.0.1", |
| | | "chownr": "^2.0.0", |
| | | "fs-minipass": "^2.0.0", |
| | | "glob": "^7.1.4", |
| | | "infer-owner": "^1.0.4", |
| | | "lru-cache": "^6.0.0", |
| | | "minipass": "^3.1.1", |
| | | "minipass-collect": "^1.0.2", |
| | | "minipass-flush": "^1.0.5", |
| | | "minipass-pipeline": "^1.2.2", |
| | | "mkdirp": "^1.0.3", |
| | | "p-map": "^4.0.0", |
| | | "promise-inflight": "^1.0.1", |
| | | "rimraf": "^3.0.2", |
| | | "ssri": "^8.0.1", |
| | | "tar": "^6.0.2", |
| | | "unique-filename": "^1.1.1" |
| | | } |
| | | }, |
| | | "http-proxy-agent": { |
| | | "version": "4.0.1", |
| | | "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", |
| | | "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", |
| | | "requires": { |
| | | "@tootallnate/once": "1", |
| | | "agent-base": "6", |
| | | "debug": "4" |
| | | } |
| | | }, |
| | | "lru-cache": { |
| | | "version": "6.0.0", |
| | | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", |
| | | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", |
| | | "requires": { |
| | | "yallist": "^4.0.0" |
| | | } |
| | | }, |
| | | "make-fetch-happen": { |
| | | "version": "9.1.0", |
| | | "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", |
| | | "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", |
| | | "requires": { |
| | | "agentkeepalive": "^4.1.3", |
| | | "cacache": "^15.2.0", |
| | | "http-cache-semantics": "^4.1.0", |
| | | "http-proxy-agent": "^4.0.1", |
| | | "https-proxy-agent": "^5.0.0", |
| | | "is-lambda": "^1.0.1", |
| | | "lru-cache": "^6.0.0", |
| | | "minipass": "^3.1.3", |
| | | "minipass-collect": "^1.0.2", |
| | | "minipass-fetch": "^1.3.2", |
| | | "minipass-flush": "^1.0.5", |
| | | "minipass-pipeline": "^1.2.4", |
| | | "negotiator": "^0.6.2", |
| | | "promise-retry": "^2.0.1", |
| | | "socks-proxy-agent": "^6.0.0", |
| | | "ssri": "^8.0.0" |
| | | } |
| | | }, |
| | | "minipass-fetch": { |
| | | "version": "1.4.1", |
| | | "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz", |
| | | "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", |
| | | "requires": { |
| | | "encoding": "^0.1.12", |
| | | "minipass": "^3.1.0", |
| | | "minipass-sized": "^1.0.3", |
| | | "minizlib": "^2.0.0" |
| | | } |
| | | }, |
| | | "socks-proxy-agent": { |
| | | "version": "6.2.1", |
| | | "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz", |
| | | "integrity": "sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==", |
| | | "requires": { |
| | | "agent-base": "^6.0.2", |
| | | "debug": "^4.3.3", |
| | | "socks": "^2.6.2" |
| | | } |
| | | }, |
| | | "ssri": { |
| | | "version": "8.0.1", |
| | | "resolved": "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz", |
| | | "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", |
| | | "requires": { |
| | | "minipass": "^3.1.1" |
| | | } |
| | | }, |
| | | "unique-filename": { |
| | | "version": "1.1.1", |
| | | "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", |
| | | "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", |
| | | "requires": { |
| | | "unique-slug": "^2.0.0" |
| | | } |
| | | }, |
| | | "unique-slug": { |
| | | "version": "2.0.2", |
| | | "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", |
| | | "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", |
| | | "requires": { |
| | | "imurmurhash": "^0.1.4" |
| | | } |
| | | } |
| | | } |
| | | }, |
| | | "node-sass": { |
| | | "version": "9.0.0", |
| | | "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-9.0.0.tgz", |
| | | "integrity": "sha512-yltEuuLrfH6M7Pq2gAj5B6Zm7m+gdZoG66wTqG6mIZV/zijq3M2OO2HswtT6oBspPyFhHDcaxWpsBm0fRNDHPg==", |
| | | "requires": { |
| | | "async-foreach": "^0.1.3", |
| | | "chalk": "^4.1.2", |
| | | "cross-spawn": "^7.0.3", |
| | | "gaze": "^1.0.0", |
| | | "get-stdin": "^4.0.1", |
| | | "glob": "^7.0.3", |
| | | "lodash": "^4.17.15", |
| | | "make-fetch-happen": "^10.0.4", |
| | | "meow": "^9.0.0", |
| | | "nan": "^2.17.0", |
| | | "node-gyp": "^8.4.1", |
| | | "sass-graph": "^4.0.1", |
| | | "stdout-stream": "^1.4.0", |
| | | "true-case-path": "^2.2.1" |
| | | } |
| | | }, |
| | | "nopt": { |
| | | "version": "5.0.0", |
| | | "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", |
| | | "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", |
| | | "requires": { |
| | | "abbrev": "1" |
| | | } |
| | | }, |
| | | "normalize-package-data": { |
| | | "version": "3.0.3", |
| | | "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", |
| | | "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", |
| | | "requires": { |
| | | "hosted-git-info": "^4.0.1", |
| | | "is-core-module": "^2.5.0", |
| | | "semver": "^7.3.4", |
| | | "validate-npm-package-license": "^3.0.1" |
| | | } |
| | | }, |
| | | "npmlog": { |
| | | "version": "6.0.2", |
| | | "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", |
| | | "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", |
| | | "requires": { |
| | | "are-we-there-yet": "^3.0.0", |
| | | "console-control-strings": "^1.1.0", |
| | | "gauge": "^4.0.3", |
| | | "set-blocking": "^2.0.0" |
| | | } |
| | | }, |
| | | "once": { |
| | | "version": "1.4.0", |
| | | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", |
| | | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", |
| | | "requires": { |
| | | "wrappy": "1" |
| | | } |
| | | }, |
| | | "p-limit": { |
| | | "version": "2.3.0", |
| | | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", |
| | | "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", |
| | | "requires": { |
| | | "p-try": "^2.0.0" |
| | | } |
| | | }, |
| | | "p-locate": { |
| | | "version": "4.1.0", |
| | | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", |
| | | "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", |
| | | "requires": { |
| | | "p-limit": "^2.2.0" |
| | | } |
| | | }, |
| | | "p-map": { |
| | | "version": "4.0.0", |
| | | "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", |
| | | "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", |
| | | "requires": { |
| | | "aggregate-error": "^3.0.0" |
| | | } |
| | | }, |
| | | "p-try": { |
| | | "version": "2.2.0", |
| | | "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", |
| | | "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" |
| | | }, |
| | | "parse-json": { |
| | | "version": "5.2.0", |
| | | "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", |
| | | "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", |
| | | "requires": { |
| | | "@babel/code-frame": "^7.0.0", |
| | | "error-ex": "^1.3.1", |
| | | "json-parse-even-better-errors": "^2.3.0", |
| | | "lines-and-columns": "^1.1.6" |
| | | } |
| | | }, |
| | | "path-exists": { |
| | | "version": "4.0.0", |
| | | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", |
| | | "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" |
| | | }, |
| | | "path-is-absolute": { |
| | | "version": "1.0.1", |
| | | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", |
| | | "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" |
| | | }, |
| | | "path-key": { |
| | | "version": "3.1.1", |
| | | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", |
| | | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" |
| | | }, |
| | | "path-parse": { |
| | | "version": "1.0.7", |
| | | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", |
| | | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" |
| | | }, |
| | | "process-nextick-args": { |
| | | "version": "2.0.1", |
| | | "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", |
| | | "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" |
| | | }, |
| | | "promise-inflight": { |
| | | "version": "1.0.1", |
| | | "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", |
| | | "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==" |
| | | }, |
| | | "promise-retry": { |
| | | "version": "2.0.1", |
| | | "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", |
| | | "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", |
| | | "requires": { |
| | | "err-code": "^2.0.2", |
| | | "retry": "^0.12.0" |
| | | } |
| | | }, |
| | | "quick-lru": { |
| | | "version": "4.0.1", |
| | | "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", |
| | | "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==" |
| | | }, |
| | | "read-pkg": { |
| | | "version": "5.2.0", |
| | | "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", |
| | | "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", |
| | | "requires": { |
| | | "@types/normalize-package-data": "^2.4.0", |
| | | "normalize-package-data": "^2.5.0", |
| | | "parse-json": "^5.0.0", |
| | | "type-fest": "^0.6.0" |
| | | }, |
| | | "dependencies": { |
| | | "hosted-git-info": { |
| | | "version": "2.8.9", |
| | | "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", |
| | | "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" |
| | | }, |
| | | "normalize-package-data": { |
| | | "version": "2.5.0", |
| | | "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", |
| | | "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", |
| | | "requires": { |
| | | "hosted-git-info": "^2.1.4", |
| | | "resolve": "^1.10.0", |
| | | "semver": "2 || 3 || 4 || 5", |
| | | "validate-npm-package-license": "^3.0.1" |
| | | } |
| | | }, |
| | | "semver": { |
| | | "version": "5.7.1", |
| | | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", |
| | | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==" |
| | | }, |
| | | "type-fest": { |
| | | "version": "0.6.0", |
| | | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", |
| | | "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==" |
| | | } |
| | | } |
| | | }, |
| | | "read-pkg-up": { |
| | | "version": "7.0.1", |
| | | "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", |
| | | "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", |
| | | "requires": { |
| | | "find-up": "^4.1.0", |
| | | "read-pkg": "^5.2.0", |
| | | "type-fest": "^0.8.1" |
| | | }, |
| | | "dependencies": { |
| | | "type-fest": { |
| | | "version": "0.8.1", |
| | | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", |
| | | "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==" |
| | | } |
| | | } |
| | | }, |
| | | "readable-stream": { |
| | | "version": "3.6.2", |
| | | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", |
| | | "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", |
| | | "requires": { |
| | | "inherits": "^2.0.3", |
| | | "string_decoder": "^1.1.1", |
| | | "util-deprecate": "^1.0.1" |
| | | } |
| | | }, |
| | | "redent": { |
| | | "version": "3.0.0", |
| | | "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", |
| | | "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", |
| | | "requires": { |
| | | "indent-string": "^4.0.0", |
| | | "strip-indent": "^3.0.0" |
| | | } |
| | | }, |
| | | "require-directory": { |
| | | "version": "2.1.1", |
| | | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", |
| | | "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==" |
| | | }, |
| | | "resolve": { |
| | | "version": "1.22.2", |
| | | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", |
| | | "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", |
| | | "requires": { |
| | | "is-core-module": "^2.11.0", |
| | | "path-parse": "^1.0.7", |
| | | "supports-preserve-symlinks-flag": "^1.0.0" |
| | | } |
| | | }, |
| | | "retry": { |
| | | "version": "0.12.0", |
| | | "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", |
| | | "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==" |
| | | }, |
| | | "rimraf": { |
| | | "version": "3.0.2", |
| | | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", |
| | | "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", |
| | | "requires": { |
| | | "glob": "^7.1.3" |
| | | } |
| | | }, |
| | | "safe-buffer": { |
| | | "version": "5.2.1", |
| | | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", |
| | | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" |
| | | }, |
| | | "safer-buffer": { |
| | | "version": "2.1.2", |
| | | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", |
| | | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", |
| | | "optional": true |
| | | }, |
| | | "sass-graph": { |
| | | "version": "4.0.1", |
| | | "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-4.0.1.tgz", |
| | | "integrity": "sha512-5YCfmGBmxoIRYHnKK2AKzrAkCoQ8ozO+iumT8K4tXJXRVCPf+7s1/9KxTSW3Rbvf+7Y7b4FR3mWyLnQr3PHocA==", |
| | | "requires": { |
| | | "glob": "^7.0.0", |
| | | "lodash": "^4.17.11", |
| | | "scss-tokenizer": "^0.4.3", |
| | | "yargs": "^17.2.1" |
| | | } |
| | | }, |
| | | "scss-tokenizer": { |
| | | "version": "0.4.3", |
| | | "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.4.3.tgz", |
| | | "integrity": "sha512-raKLgf1LI5QMQnG+RxHz6oK0sL3x3I4FN2UDLqgLOGO8hodECNnNh5BXn7fAyBxrA8zVzdQizQ6XjNJQ+uBwMw==", |
| | | "requires": { |
| | | "js-base64": "^2.4.9", |
| | | "source-map": "^0.7.3" |
| | | } |
| | | }, |
| | | "semver": { |
| | | "version": "7.5.1", |
| | | "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.1.tgz", |
| | | "integrity": "sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==", |
| | | "requires": { |
| | | "lru-cache": "^6.0.0" |
| | | }, |
| | | "dependencies": { |
| | | "lru-cache": { |
| | | "version": "6.0.0", |
| | | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", |
| | | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", |
| | | "requires": { |
| | | "yallist": "^4.0.0" |
| | | } |
| | | } |
| | | } |
| | | }, |
| | | "set-blocking": { |
| | | "version": "2.0.0", |
| | | "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", |
| | | "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" |
| | | }, |
| | | "shebang-command": { |
| | | "version": "2.0.0", |
| | | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", |
| | | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", |
| | | "requires": { |
| | | "shebang-regex": "^3.0.0" |
| | | } |
| | | }, |
| | | "shebang-regex": { |
| | | "version": "3.0.0", |
| | | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", |
| | | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" |
| | | }, |
| | | "signal-exit": { |
| | | "version": "3.0.7", |
| | | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", |
| | | "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" |
| | | }, |
| | | "smart-buffer": { |
| | | "version": "4.2.0", |
| | | "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", |
| | | "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==" |
| | | }, |
| | | "socks": { |
| | | "version": "2.7.1", |
| | | "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", |
| | | "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", |
| | | "requires": { |
| | | "ip": "^2.0.0", |
| | | "smart-buffer": "^4.2.0" |
| | | } |
| | | }, |
| | | "socks-proxy-agent": { |
| | | "version": "7.0.0", |
| | | "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", |
| | | "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", |
| | | "requires": { |
| | | "agent-base": "^6.0.2", |
| | | "debug": "^4.3.3", |
| | | "socks": "^2.6.2" |
| | | } |
| | | }, |
| | | "source-map": { |
| | | "version": "0.7.4", |
| | | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", |
| | | "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==" |
| | | }, |
| | | "spdx-correct": { |
| | | "version": "3.2.0", |
| | | "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", |
| | | "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", |
| | | "requires": { |
| | | "spdx-expression-parse": "^3.0.0", |
| | | "spdx-license-ids": "^3.0.0" |
| | | } |
| | | }, |
| | | "spdx-exceptions": { |
| | | "version": "2.3.0", |
| | | "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", |
| | | "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==" |
| | | }, |
| | | "spdx-expression-parse": { |
| | | "version": "3.0.1", |
| | | "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", |
| | | "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", |
| | | "requires": { |
| | | "spdx-exceptions": "^2.1.0", |
| | | "spdx-license-ids": "^3.0.0" |
| | | } |
| | | }, |
| | | "spdx-license-ids": { |
| | | "version": "3.0.13", |
| | | "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", |
| | | "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==" |
| | | }, |
| | | "ssri": { |
| | | "version": "9.0.1", |
| | | "resolved": "https://registry.npmjs.org/ssri/-/ssri-9.0.1.tgz", |
| | | "integrity": "sha512-o57Wcn66jMQvfHG1FlYbWeZWW/dHZhJXjpIcTfXldXEk5nz5lStPo3mK0OJQfGR3RbZUlbISexbljkJzuEj/8Q==", |
| | | "requires": { |
| | | "minipass": "^3.1.1" |
| | | } |
| | | }, |
| | | "stdout-stream": { |
| | | "version": "1.4.1", |
| | | "resolved": "https://registry.npmjs.org/stdout-stream/-/stdout-stream-1.4.1.tgz", |
| | | "integrity": "sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA==", |
| | | "requires": { |
| | | "readable-stream": "^2.0.1" |
| | | }, |
| | | "dependencies": { |
| | | "readable-stream": { |
| | | "version": "2.3.8", |
| | | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", |
| | | "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", |
| | | "requires": { |
| | | "core-util-is": "~1.0.0", |
| | | "inherits": "~2.0.3", |
| | | "isarray": "~1.0.0", |
| | | "process-nextick-args": "~2.0.0", |
| | | "safe-buffer": "~5.1.1", |
| | | "string_decoder": "~1.1.1", |
| | | "util-deprecate": "~1.0.1" |
| | | } |
| | | }, |
| | | "safe-buffer": { |
| | | "version": "5.1.2", |
| | | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", |
| | | "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" |
| | | }, |
| | | "string_decoder": { |
| | | "version": "1.1.1", |
| | | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", |
| | | "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", |
| | | "requires": { |
| | | "safe-buffer": "~5.1.0" |
| | | } |
| | | } |
| | | } |
| | | }, |
| | | "string_decoder": { |
| | | "version": "1.3.0", |
| | | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", |
| | | "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", |
| | | "requires": { |
| | | "safe-buffer": "~5.2.0" |
| | | } |
| | | }, |
| | | "string-width": { |
| | | "version": "4.2.3", |
| | | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", |
| | | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", |
| | | "requires": { |
| | | "emoji-regex": "^8.0.0", |
| | | "is-fullwidth-code-point": "^3.0.0", |
| | | "strip-ansi": "^6.0.1" |
| | | } |
| | | }, |
| | | "strip-ansi": { |
| | | "version": "6.0.1", |
| | | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", |
| | | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", |
| | | "requires": { |
| | | "ansi-regex": "^5.0.1" |
| | | } |
| | | }, |
| | | "strip-indent": { |
| | | "version": "3.0.0", |
| | | "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", |
| | | "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", |
| | | "requires": { |
| | | "min-indent": "^1.0.0" |
| | | } |
| | | }, |
| | | "supports-color": { |
| | | "version": "7.2.0", |
| | | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", |
| | | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", |
| | | "requires": { |
| | | "has-flag": "^4.0.0" |
| | | } |
| | | }, |
| | | "supports-preserve-symlinks-flag": { |
| | | "version": "1.0.0", |
| | | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", |
| | | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" |
| | | }, |
| | | "tar": { |
| | | "version": "6.1.15", |
| | | "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.15.tgz", |
| | | "integrity": "sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A==", |
| | | "requires": { |
| | | "chownr": "^2.0.0", |
| | | "fs-minipass": "^2.0.0", |
| | | "minipass": "^5.0.0", |
| | | "minizlib": "^2.1.1", |
| | | "mkdirp": "^1.0.3", |
| | | "yallist": "^4.0.0" |
| | | }, |
| | | "dependencies": { |
| | | "minipass": { |
| | | "version": "5.0.0", |
| | | "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", |
| | | "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==" |
| | | } |
| | | } |
| | | }, |
| | | "trim-newlines": { |
| | | "version": "3.0.1", |
| | | "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", |
| | | "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==" |
| | | }, |
| | | "true-case-path": { |
| | | "version": "2.2.1", |
| | | "resolved": "https://registry.npmjs.org/true-case-path/-/true-case-path-2.2.1.tgz", |
| | | "integrity": "sha512-0z3j8R7MCjy10kc/g+qg7Ln3alJTodw9aDuVWZa3uiWqfuBMKeAeP2ocWcxoyM3D73yz3Jt/Pu4qPr4wHSdB/Q==" |
| | | }, |
| | | "type-fest": { |
| | | "version": "0.18.1", |
| | | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", |
| | | "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==" |
| | | }, |
| | | "unique-filename": { |
| | | "version": "2.0.1", |
| | | "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-2.0.1.tgz", |
| | | "integrity": "sha512-ODWHtkkdx3IAR+veKxFV+VBkUMcN+FaqzUUd7IZzt+0zhDZFPFxhlqwPF3YQvMHx1TD0tdgYl+kuPnJ8E6ql7A==", |
| | | "requires": { |
| | | "unique-slug": "^3.0.0" |
| | | } |
| | | }, |
| | | "unique-slug": { |
| | | "version": "3.0.0", |
| | | "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-3.0.0.tgz", |
| | | "integrity": "sha512-8EyMynh679x/0gqE9fT9oilG+qEt+ibFyqjuVTsZn1+CMxH+XLlpvr2UZx4nVcCwTpx81nICr2JQFkM+HPLq4w==", |
| | | "requires": { |
| | | "imurmurhash": "^0.1.4" |
| | | } |
| | | }, |
| | | "util-deprecate": { |
| | | "version": "1.0.2", |
| | | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", |
| | | "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" |
| | | }, |
| | | "validate-npm-package-license": { |
| | | "version": "3.0.4", |
| | | "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", |
| | | "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", |
| | | "requires": { |
| | | "spdx-correct": "^3.0.0", |
| | | "spdx-expression-parse": "^3.0.0" |
| | | } |
| | | }, |
| | | "which": { |
| | | "version": "2.0.2", |
| | | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", |
| | | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", |
| | | "requires": { |
| | | "isexe": "^2.0.0" |
| | | } |
| | | }, |
| | | "wide-align": { |
| | | "version": "1.1.5", |
| | | "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", |
| | | "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", |
| | | "requires": { |
| | | "string-width": "^1.0.2 || 2 || 3 || 4" |
| | | } |
| | | }, |
| | | "wrap-ansi": { |
| | | "version": "7.0.0", |
| | | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", |
| | | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", |
| | | "requires": { |
| | | "ansi-styles": "^4.0.0", |
| | | "string-width": "^4.1.0", |
| | | "strip-ansi": "^6.0.0" |
| | | } |
| | | }, |
| | | "wrappy": { |
| | | "version": "1.0.2", |
| | | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", |
| | | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" |
| | | }, |
| | | "y18n": { |
| | | "version": "5.0.8", |
| | | "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", |
| | | "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" |
| | | }, |
| | | "yallist": { |
| | | "version": "4.0.0", |
| | | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", |
| | | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" |
| | | }, |
| | | "yargs": { |
| | | "version": "17.7.2", |
| | | "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", |
| | | "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", |
| | | "requires": { |
| | | "cliui": "^8.0.1", |
| | | "escalade": "^3.1.1", |
| | | "get-caller-file": "^2.0.5", |
| | | "require-directory": "^2.1.1", |
| | | "string-width": "^4.2.3", |
| | | "y18n": "^5.0.5", |
| | | "yargs-parser": "^21.1.1" |
| | | }, |
| | | "dependencies": { |
| | | "yargs-parser": { |
| | | "version": "21.1.1", |
| | | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", |
| | | "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==" |
| | | } |
| | | } |
| | | }, |
| | | "yargs-parser": { |
| | | "version": "20.2.9", |
| | | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", |
| | | "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==" |
| | | } |
| | | } |
| | | } |
New file |
| | |
| | | { |
| | | "dependencies": { |
| | | "node-sass": "^9.0.0" |
| | | } |
| | | } |
New file |
| | |
| | | <?xml version="1.0" encoding="UTF-8"?> |
| | | <project xmlns="http://maven.apache.org/POM/4.0.0" |
| | | xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
| | | xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> |
| | | <modelVersion>4.0.0</modelVersion> |
| | | |
| | | <groupId>com.ruoyi</groupId> |
| | | <artifactId>ruoyi</artifactId> |
| | | <version>3.6.2</version> |
| | | |
| | | <name>ruoyi</name> |
| | | <url>http://www.ruoyi.vip</url> |
| | | <description>益行通微服务系统</description> |
| | | |
| | | <properties> |
| | | <ruoyi.version>3.6.2</ruoyi.version> |
| | | <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> |
| | | <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> |
| | | <java.version>1.8</java.version> |
| | | <spring-boot.version>2.7.7</spring-boot.version> |
| | | <spring-cloud.version>2021.0.5</spring-cloud.version> |
| | | <spring-cloud-alibaba.version>2021.0.4.0</spring-cloud-alibaba.version> |
| | | <spring-boot-admin.version>2.7.10</spring-boot-admin.version> |
| | | <swagger.fox.version>3.0.0</swagger.fox.version> |
| | | <swagger.core.version>1.6.2</swagger.core.version> |
| | | <tobato.version>1.27.2</tobato.version> |
| | | <kaptcha.version>2.3.3</kaptcha.version> |
| | | <pagehelper.boot.version>1.4.6</pagehelper.boot.version> |
| | | <druid.version>1.2.16</druid.version> |
| | | <dynamic-ds.version>3.5.2</dynamic-ds.version> |
| | | <commons.io.version>2.11.0</commons.io.version> |
| | | <velocity.version>2.3</velocity.version> |
| | | <fastjson.version>2.0.25</fastjson.version> |
| | | <jjwt.version>0.9.1</jjwt.version> |
| | | <minio.version>8.2.2</minio.version> |
| | | <poi.version>4.1.2</poi.version> |
| | | <transmittable-thread-local.version>2.14.2</transmittable-thread-local.version> |
| | | </properties> |
| | | |
| | | <!-- 依赖声明 --> |
| | | <dependencyManagement> |
| | | <dependencies> |
| | | |
| | | <!-- SpringCloud 微服务 --> |
| | | <dependency> |
| | | <groupId>org.springframework.cloud</groupId> |
| | | <artifactId>spring-cloud-dependencies</artifactId> |
| | | <version>${spring-cloud.version}</version> |
| | | <type>pom</type> |
| | | <scope>import</scope> |
| | | </dependency> |
| | | |
| | | <!-- SpringCloud Alibaba 微服务 --> |
| | | <dependency> |
| | | <groupId>com.alibaba.cloud</groupId> |
| | | <artifactId>spring-cloud-alibaba-dependencies</artifactId> |
| | | <version>${spring-cloud-alibaba.version}</version> |
| | | <type>pom</type> |
| | | <scope>import</scope> |
| | | </dependency> |
| | | |
| | | <!-- SpringBoot 依赖配置 --> |
| | | <dependency> |
| | | <groupId>org.springframework.boot</groupId> |
| | | <artifactId>spring-boot-dependencies</artifactId> |
| | | <version>${spring-boot.version}</version> |
| | | <type>pom</type> |
| | | <scope>import</scope> |
| | | </dependency> |
| | | |
| | | <!-- FastDFS 分布式文件系统 --> |
| | | <dependency> |
| | | <groupId>com.github.tobato</groupId> |
| | | <artifactId>fastdfs-client</artifactId> |
| | | <version>${tobato.version}</version> |
| | | </dependency> |
| | | |
| | | <!-- Swagger 依赖配置 --> |
| | | <dependency> |
| | | <groupId>io.swagger</groupId> |
| | | <artifactId>swagger-models</artifactId> |
| | | <version>${swagger.core.version}</version> |
| | | </dependency> |
| | | <dependency> |
| | | <groupId>io.swagger</groupId> |
| | | <artifactId>swagger-annotations</artifactId> |
| | | <version>${swagger.core.version}</version> |
| | | </dependency> |
| | | |
| | | <!-- 验证码 --> |
| | | <dependency> |
| | | <groupId>pro.fessional</groupId> |
| | | <artifactId>kaptcha</artifactId> |
| | | <version>${kaptcha.version}</version> |
| | | </dependency> |
| | | |
| | | <!-- pagehelper 分页插件 --> |
| | | <dependency> |
| | | <groupId>com.github.pagehelper</groupId> |
| | | <artifactId>pagehelper-spring-boot-starter</artifactId> |
| | | <version>${pagehelper.boot.version}</version> |
| | | </dependency> |
| | | |
| | | <!-- io常用工具类 --> |
| | | <dependency> |
| | | <groupId>commons-io</groupId> |
| | | <artifactId>commons-io</artifactId> |
| | | <version>${commons.io.version}</version> |
| | | </dependency> |
| | | |
| | | <!-- excel工具 --> |
| | | <dependency> |
| | | <groupId>org.apache.poi</groupId> |
| | | <artifactId>poi-ooxml</artifactId> |
| | | <version>${poi.version}</version> |
| | | </dependency> |
| | | |
| | | <!-- 代码生成使用模板 --> |
| | | <dependency> |
| | | <groupId>org.apache.velocity</groupId> |
| | | <artifactId>velocity-engine-core</artifactId> |
| | | <version>${velocity.version}</version> |
| | | </dependency> |
| | | |
| | | <!-- JSON 解析器和生成器 --> |
| | | <dependency> |
| | | <groupId>com.alibaba.fastjson2</groupId> |
| | | <artifactId>fastjson2</artifactId> |
| | | <version>${fastjson.version}</version> |
| | | </dependency> |
| | | |
| | | <!-- JWT --> |
| | | <dependency> |
| | | <groupId>io.jsonwebtoken</groupId> |
| | | <artifactId>jjwt</artifactId> |
| | | <version>${jjwt.version}</version> |
| | | </dependency> |
| | | |
| | | <!-- 线程传递值 --> |
| | | <dependency> |
| | | <groupId>com.alibaba</groupId> |
| | | <artifactId>transmittable-thread-local</artifactId> |
| | | <version>${transmittable-thread-local.version}</version> |
| | | </dependency> |
| | | |
| | | <!-- 核心模块 --> |
| | | <dependency> |
| | | <groupId>com.ruoyi</groupId> |
| | | <artifactId>ruoyi-common-core</artifactId> |
| | | <version>${ruoyi.version}</version> |
| | | </dependency> |
| | | |
| | | <!-- 接口模块 --> |
| | | <dependency> |
| | | <groupId>com.ruoyi</groupId> |
| | | <artifactId>ruoyi-common-swagger</artifactId> |
| | | <version>${ruoyi.version}</version> |
| | | </dependency> |
| | | |
| | | <!-- 安全模块 --> |
| | | <dependency> |
| | | <groupId>com.ruoyi</groupId> |
| | | <artifactId>ruoyi-common-security</artifactId> |
| | | <version>${ruoyi.version}</version> |
| | | </dependency> |
| | | |
| | | <!-- 权限范围 --> |
| | | <dependency> |
| | | <groupId>com.ruoyi</groupId> |
| | | <artifactId>ruoyi-common-datascope</artifactId> |
| | | <version>${ruoyi.version}</version> |
| | | </dependency> |
| | | |
| | | <!-- 多数据源 --> |
| | | <dependency> |
| | | <groupId>com.ruoyi</groupId> |
| | | <artifactId>ruoyi-common-datasource</artifactId> |
| | | <version>${ruoyi.version}</version> |
| | | </dependency> |
| | | |
| | | <!-- 分布式事务 --> |
| | | <dependency> |
| | | <groupId>com.ruoyi</groupId> |
| | | <artifactId>ruoyi-common-seata</artifactId> |
| | | <version>${ruoyi.version}</version> |
| | | </dependency> |
| | | |
| | | <!-- 日志记录 --> |
| | | <dependency> |
| | | <groupId>com.ruoyi</groupId> |
| | | <artifactId>ruoyi-common-log</artifactId> |
| | | <version>${ruoyi.version}</version> |
| | | </dependency> |
| | | |
| | | <!-- 缓存服务 --> |
| | | <dependency> |
| | | <groupId>com.ruoyi</groupId> |
| | | <artifactId>ruoyi-common-redis</artifactId> |
| | | <version>${ruoyi.version}</version> |
| | | </dependency> |
| | | |
| | | <!-- 系统接口 --> |
| | | <dependency> |
| | | <groupId>com.ruoyi</groupId> |
| | | <artifactId>ruoyi-api-system</artifactId> |
| | | <version>${ruoyi.version}</version> |
| | | </dependency> |
| | | |
| | | <!--后台配置接口--> |
| | | <dependency> |
| | | <groupId>com.ruoyi</groupId> |
| | | <artifactId>ruoyi-api-management</artifactId> |
| | | <version>${ruoyi.version}</version> |
| | | </dependency> |
| | | |
| | | </dependencies> |
| | | </dependencyManagement> |
| | | |
| | | <modules> |
| | | <module>ruoyi-auth</module> |
| | | <module>ruoyi-gateway</module> |
| | | <module>ruoyi-visual</module> |
| | | <module>ruoyi-modules</module> |
| | | <module>ruoyi-api</module> |
| | | <module>ruoyi-common</module> |
| | | <module>ruoyi-service</module> |
| | | </modules> |
| | | <packaging>pom</packaging> |
| | | |
| | | <dependencies> |
| | | <!-- bootstrap 启动器 --> |
| | | <dependency> |
| | | <groupId>org.springframework.cloud</groupId> |
| | | <artifactId>spring-cloud-starter-bootstrap</artifactId> |
| | | </dependency> |
| | | </dependencies> |
| | | |
| | | <build> |
| | | <plugins> |
| | | <plugin> |
| | | <groupId>org.apache.maven.plugins</groupId> |
| | | <artifactId>maven-compiler-plugin</artifactId> |
| | | <configuration> |
| | | <source>${java.version}</source> |
| | | <target>${java.version}</target> |
| | | <encoding>${project.build.sourceEncoding}</encoding> |
| | | </configuration> |
| | | </plugin> |
| | | </plugins> |
| | | <pluginManagement> |
| | | <plugins> |
| | | <plugin> |
| | | <groupId>org.springframework.boot</groupId> |
| | | <artifactId>spring-boot-maven-plugin</artifactId> |
| | | <version>${spring-boot.version}</version> |
| | | <executions> |
| | | <execution> |
| | | <goals> |
| | | <goal>repackage</goal> |
| | | </goals> |
| | | </execution> |
| | | </executions> |
| | | </plugin> |
| | | </plugins> |
| | | </pluginManagement> |
| | | </build> |
| | | |
| | | <repositories> |
| | | <repository> |
| | | <id>public</id> |
| | | <name>aliyun nexus</name> |
| | | <url>https://maven.aliyun.com/repository/public</url> |
| | | <releases> |
| | | <enabled>true</enabled> |
| | | </releases> |
| | | </repository> |
| | | </repositories> |
| | | |
| | | <pluginRepositories> |
| | | <pluginRepository> |
| | | <id>public</id> |
| | | <name>aliyun nexus</name> |
| | | <url>https://maven.aliyun.com/repository/public</url> |
| | | <releases> |
| | | <enabled>true</enabled> |
| | | </releases> |
| | | <snapshots> |
| | | <enabled>false</enabled> |
| | | </snapshots> |
| | | </pluginRepository> |
| | | </pluginRepositories> |
| | | |
| | | </project> |
New file |
| | |
| | | <?xml version="1.0" encoding="UTF-8"?> |
| | | <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> |
| | | <mapper namespace="java\com\ruoyi\management\mapper.TVipSetMapper"> |
| | | |
| | | <!-- 通用查询映射结果 --> |
| | | <resultMap id="BaseResultMap" type="java\com\ruoyi\management\domain.TVipSet"> |
| | | <id column="id" property="id" /> |
| | | <result column="amount" property="amount" /> |
| | | <result column="time" property="time" /> |
| | | <result column="info" property="info" /> |
| | | </resultMap> |
| | | |
| | | <!-- 通用查询结果列 --> |
| | | <sql id="Base_Column_List"> |
| | | id, amount, time, info |
| | | </sql> |
| | | |
| | | </mapper> |
New file |
| | |
| | | <?xml version="1.0" encoding="UTF-8"?> |
| | | <project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0" |
| | | xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> |
| | | <parent> |
| | | <groupId>com.ruoyi</groupId> |
| | | <artifactId>ruoyi</artifactId> |
| | | <version>3.6.2</version> |
| | | </parent> |
| | | <modelVersion>4.0.0</modelVersion> |
| | | |
| | | <modules> |
| | | <module>ruoyi-api-system</module> |
| | | <module>ruoyi-api-management</module> |
| | | <module>ruoyi-api-goods</module> |
| | | <module>ruoyi-api-parent</module> |
| | | <module>ruoyi-api-study</module> |
| | | </modules> |
| | | |
| | | <artifactId>ruoyi-api</artifactId> |
| | | <packaging>pom</packaging> |
| | | |
| | | <description> |
| | | ruoyi-api系统接口 |
| | | </description> |
| | | |
| | | </project> |
New file |
| | |
| | | <?xml version="1.0" encoding="UTF-8"?> |
| | | <project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
| | | xmlns="http://maven.apache.org/POM/4.0.0" |
| | | xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> |
| | | <parent> |
| | | <groupId>com.ruoyi</groupId> |
| | | <artifactId>ruoyi-api</artifactId> |
| | | <version>3.6.2</version> |
| | | </parent> |
| | | <modelVersion>4.0.0</modelVersion> |
| | | |
| | | <artifactId>ruoyi-api-goods</artifactId> |
| | | |
| | | <description> |
| | | ruoyi-api-goods商城接口模块 |
| | | </description> |
| | | |
| | | <dependencies> |
| | | |
| | | <!-- RuoYi Common Core--> |
| | | <dependency> |
| | | <groupId>com.ruoyi</groupId> |
| | | <artifactId>ruoyi-common-core</artifactId> |
| | | <exclusions> |
| | | <exclusion> |
| | | <groupId>com.github.pagehelper</groupId> |
| | | <artifactId>pagehelper-spring-boot-starter</artifactId> |
| | | </exclusion> |
| | | </exclusions> |
| | | </dependency> |
| | | |
| | | </dependencies> |
| | | |
| | | </project> |
New file |
| | |
| | | package com.ruoyi.system.api.config; |
| | | |
| | | import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.apache.ibatis.reflection.MetaObject; |
| | | import org.springframework.context.annotation.Configuration; |
| | | |
| | | /** |
| | | * @author xiaochen |
| | | * @ClassName DataUpdateInterceptor |
| | | * @Description 数据更新操作处理 |
| | | * @date 2021-12-15 |
| | | * <p> |
| | | * 注意,之前在此处注入了 JwtTokenUtils |
| | | * <p> |
| | | * 造成spring循环依赖,项目支棱不起来 |
| | | */ |
| | | @Slf4j |
| | | @Configuration |
| | | public class DataUpdateHandlerConfig implements MetaObjectHandler { |
| | | |
| | | @Override |
| | | public void insertFill(MetaObject metaObject) { |
| | | |
| | | } |
| | | |
| | | @Override |
| | | public void updateFill(MetaObject metaObject) { |
| | | |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.system.api.config; |
| | | |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.boot.web.client.RestTemplateBuilder; |
| | | import org.springframework.context.annotation.Bean; |
| | | import org.springframework.context.annotation.Configuration; |
| | | import org.springframework.web.client.RestTemplate; |
| | | |
| | | /** |
| | | * http请求工具配置 |
| | | * |
| | | * @author: KingKong |
| | | * @create: 2018-11-14 10:47 |
| | | **/ |
| | | @Configuration |
| | | public class HttpConfig { |
| | | |
| | | @Autowired |
| | | private RestTemplateBuilder builder; |
| | | |
| | | @Bean |
| | | public RestTemplate restTemplate() { |
| | | return builder.build(); |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.system.api.config; |
| | | |
| | | import com.baomidou.mybatisplus.annotation.DbType; |
| | | import com.baomidou.mybatisplus.core.config.GlobalConfig; |
| | | import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; |
| | | import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.context.annotation.Bean; |
| | | import org.springframework.context.annotation.Configuration; |
| | | |
| | | /** |
| | | * @author xiaochen |
| | | * @ClassName MybatisPlusConfig |
| | | * @Description MybatisPlus相关配置 |
| | | * @date 2020-09-22 11:22、 |
| | | * 直接以实现类作为bean的注入(有事务管理的类) |
| | | * @EnableTransactionManagement(proxyTargetClass = true) |
| | | */ |
| | | @Configuration |
| | | public class MybatisPlusConfig { |
| | | private final DataUpdateHandlerConfig dataUpdateHandler; |
| | | |
| | | @Autowired |
| | | public MybatisPlusConfig(DataUpdateHandlerConfig dataUpdateHandler) { |
| | | this.dataUpdateHandler = dataUpdateHandler; |
| | | } |
| | | |
| | | /** |
| | | * 新的分页插件,一缓和二缓遵循mybatis的规则,需要设置 MybatisConfiguration#useDeprecatedExecutor = false 避免缓存出现问题 |
| | | */ |
| | | @Bean |
| | | public MybatisPlusInterceptor mybatisPlusInterceptor() { |
| | | MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); |
| | | interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); |
| | | return interceptor; |
| | | } |
| | | |
| | | /** |
| | | * 自动填充功能 |
| | | * |
| | | * @return |
| | | */ |
| | | @Bean |
| | | public GlobalConfig globalConfig() { |
| | | GlobalConfig globalConfig = new GlobalConfig(); |
| | | globalConfig.setMetaObjectHandler(dataUpdateHandler); |
| | | return globalConfig; |
| | | } |
| | | |
| | | |
| | | } |
New file |
| | |
| | | package com.ruoyi.goods.api.domain; |
| | | |
| | | |
| | | import com.baomidou.mybatisplus.annotation.IdType; |
| | | import com.baomidou.mybatisplus.annotation.TableId; |
| | | import com.baomidou.mybatisplus.annotation.TableName; |
| | | import com.ruoyi.common.core.web.domain.BaseModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | import java.math.BigDecimal; |
| | | |
| | | /** |
| | | * <p> |
| | | * 商品表 |
| | | * </p> |
| | | * |
| | | * @author 无关风月 |
| | | * @since 2024-04-26 |
| | | */ |
| | | @TableName("t_goods") |
| | | @Data |
| | | public class TGoods extends BaseModel { |
| | | |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | /** |
| | | * 主键id |
| | | */ |
| | | @TableId(value = "id", type = IdType.AUTO) |
| | | private Integer id; |
| | | /** |
| | | * 商品名称 |
| | | */ |
| | | @ApiModelProperty(value = "商品名称") |
| | | private String name; |
| | | /** |
| | | * 所需积分 |
| | | */ |
| | | @ApiModelProperty(value = "所需积分") |
| | | private Integer integral; |
| | | /** |
| | | * 商品原价 |
| | | */ |
| | | @ApiModelProperty(value = "商品原价") |
| | | private BigDecimal price; |
| | | /** |
| | | * 商品总数 |
| | | */ |
| | | @ApiModelProperty(value = "商品总数") |
| | | private Integer total; |
| | | @ApiModelProperty(value = "基础已兑换数量") |
| | | private Integer basicCount; |
| | | /** |
| | | * 剩余数量 |
| | | */ |
| | | @ApiModelProperty(value = "剩余数量") |
| | | private Integer surplus; |
| | | /** |
| | | * 单个用户可兑换数量 |
| | | */ |
| | | @ApiModelProperty(value = "单个用户可兑换数量") |
| | | private Integer userCount; |
| | | |
| | | /** |
| | | * 商品类型id |
| | | */ |
| | | @ApiModelProperty(value = "商品类型ids 逗号隔开") |
| | | private String typeIds; |
| | | /** |
| | | * 商品封面图 |
| | | */ |
| | | @ApiModelProperty(value = "商品封面图") |
| | | private String coverImg; |
| | | /** |
| | | * 商品详情图片 多张逗号隔开 |
| | | */ |
| | | @ApiModelProperty(value = "商品详情图片 多张逗号隔开") |
| | | private String detailImg; |
| | | /** |
| | | * 商品详情 |
| | | */ |
| | | @ApiModelProperty(value = "商品详情") |
| | | private String detail; |
| | | |
| | | /** |
| | | * 是否删除 0否1是 |
| | | */ |
| | | @ApiModelProperty(value = "是否删除 0否1是") |
| | | private Integer isDelete; |
| | | /** |
| | | * 兑换类型 1.0商城只有积分兑换 保留字段 |
| | | */ |
| | | @ApiModelProperty(value = "前端忽略 兑换类型 1.0商城只有积分兑换 保留字段 ") |
| | | private Integer type; |
| | | } |
New file |
| | |
| | | package com.ruoyi.goods.api.domain; |
| | | |
| | | import com.baomidou.mybatisplus.annotation.IdType; |
| | | import com.baomidou.mybatisplus.annotation.TableId; |
| | | import com.baomidou.mybatisplus.annotation.TableName; |
| | | import com.ruoyi.common.core.web.domain.BaseModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | |
| | | /** |
| | | * <p> |
| | | * 商品类型表 |
| | | * </p> |
| | | * |
| | | * @author 无关风月 |
| | | * @since 2024-04-26 |
| | | */ |
| | | @TableName("t_goods_type") |
| | | public class TGoodsType extends BaseModel { |
| | | |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | /** |
| | | * 主键id |
| | | */ |
| | | @TableId(value = "id", type = IdType.AUTO) |
| | | private Integer id; |
| | | /** |
| | | * 类型名称 |
| | | */ |
| | | @ApiModelProperty(value = "类型名称") |
| | | private String name; |
| | | /** |
| | | * 是否删除 0否1是 |
| | | */ |
| | | @ApiModelProperty(value = "是否删除0否1是") |
| | | private Integer isDelete; |
| | | |
| | | |
| | | public Integer getId() { |
| | | return id; |
| | | } |
| | | |
| | | public void setId(Integer id) { |
| | | this.id = id; |
| | | } |
| | | |
| | | public String getName() { |
| | | return name; |
| | | } |
| | | |
| | | public void setName(String name) { |
| | | this.name = name; |
| | | } |
| | | |
| | | public Integer getIsDelete() { |
| | | return isDelete; |
| | | } |
| | | |
| | | public void setIsDelete(Integer isDelete) { |
| | | this.isDelete = isDelete; |
| | | } |
| | | |
| | | @Override |
| | | public String toString() { |
| | | return "TGoodsType{" + |
| | | ", id=" + id + |
| | | ", name=" + name + |
| | | ", isDelete=" + isDelete + |
| | | "}"; |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.goods.api.domain; |
| | | |
| | | |
| | | import com.baomidou.mybatisplus.annotation.IdType; |
| | | import com.baomidou.mybatisplus.annotation.TableId; |
| | | import com.baomidou.mybatisplus.annotation.TableName; |
| | | import com.ruoyi.common.core.web.domain.BaseModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | import java.util.Date; |
| | | |
| | | /** |
| | | * <p> |
| | | * 订单 |
| | | * </p> |
| | | * |
| | | * @author 无关风月 |
| | | * @since 2024-04-26 |
| | | */ |
| | | @Data |
| | | @TableName("t_order") |
| | | public class TOrder extends BaseModel { |
| | | |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | /** |
| | | * 主键id |
| | | */ |
| | | @TableId(value = "id", type = IdType.AUTO) |
| | | private Integer id; |
| | | /** |
| | | * 订单编号 |
| | | */ |
| | | private String orderNumber; |
| | | /** |
| | | * 用户id |
| | | */ |
| | | private Integer userId; |
| | | /** |
| | | * 下单时间 |
| | | */ |
| | | private Date insertTime; |
| | | private Date completeTime; |
| | | /** |
| | | * 商品id |
| | | */ |
| | | private Integer goodsId; |
| | | /** |
| | | * 购买数量 |
| | | */ |
| | | private Integer count; |
| | | /** |
| | | * 订单状态1待发货2已发货3已完成 |
| | | */ |
| | | private Integer state; |
| | | /** |
| | | * 快递名称 |
| | | */ |
| | | private String express; |
| | | /** |
| | | * 快递编号 |
| | | */ |
| | | private String expressNumber; |
| | | /** |
| | | * 发货时间 |
| | | */ |
| | | private Date expressTime; |
| | | /** |
| | | * 消耗积分 |
| | | */ |
| | | private Integer integral; |
| | | @ApiModelProperty(value = "收货人姓名") |
| | | private String consigneeName; |
| | | /** |
| | | * 消耗积分 |
| | | */ |
| | | @ApiModelProperty(value = "收货人电话") |
| | | private String consigneePhone; |
| | | @ApiModelProperty(value = "收货人地址") |
| | | private String consigneeAddress; |
| | | |
| | | public Integer getId() { |
| | | return id; |
| | | } |
| | | |
| | | public void setId(Integer id) { |
| | | this.id = id; |
| | | } |
| | | |
| | | public String getOrderNumber() { |
| | | return orderNumber; |
| | | } |
| | | |
| | | public void setOrderNumber(String orderNumber) { |
| | | this.orderNumber = orderNumber; |
| | | } |
| | | |
| | | public Integer getUserId() { |
| | | return userId; |
| | | } |
| | | |
| | | public void setUserId(Integer userId) { |
| | | this.userId = userId; |
| | | } |
| | | |
| | | public Date getInsertTime() { |
| | | return insertTime; |
| | | } |
| | | |
| | | public void setInsertTime(Date insertTime) { |
| | | this.insertTime = insertTime; |
| | | } |
| | | |
| | | public Integer getGoodsId() { |
| | | return goodsId; |
| | | } |
| | | |
| | | public void setGoodsId(Integer goodsId) { |
| | | this.goodsId = goodsId; |
| | | } |
| | | |
| | | public Integer getCount() { |
| | | return count; |
| | | } |
| | | |
| | | public void setCount(Integer count) { |
| | | this.count = count; |
| | | } |
| | | |
| | | public Integer getState() { |
| | | return state; |
| | | } |
| | | |
| | | public void setState(Integer state) { |
| | | this.state = state; |
| | | } |
| | | |
| | | public String getExpress() { |
| | | return express; |
| | | } |
| | | |
| | | public void setExpress(String express) { |
| | | this.express = express; |
| | | } |
| | | |
| | | public String getExpressNumber() { |
| | | return expressNumber; |
| | | } |
| | | |
| | | public void setExpressNumber(String expressNumber) { |
| | | this.expressNumber = expressNumber; |
| | | } |
| | | |
| | | public Date getExpressTime() { |
| | | return expressTime; |
| | | } |
| | | |
| | | public void setExpressTime(Date expressTime) { |
| | | this.expressTime = expressTime; |
| | | } |
| | | |
| | | public Integer getIntegral() { |
| | | return integral; |
| | | } |
| | | |
| | | public void setIntegral(Integer integral) { |
| | | this.integral = integral; |
| | | } |
| | | |
| | | @Override |
| | | public String toString() { |
| | | return "TOrder{" + |
| | | ", id=" + id + |
| | | ", orderNumber=" + orderNumber + |
| | | ", userId=" + userId + |
| | | ", insertTime=" + insertTime + |
| | | ", goodsId=" + goodsId + |
| | | ", count=" + count + |
| | | ", state=" + state + |
| | | ", express=" + express + |
| | | ", expressNumber=" + expressNumber + |
| | | ", expressTime=" + expressTime + |
| | | ", integral=" + integral + |
| | | "}"; |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.goods.api.factory; |
| | | |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.common.core.web.page.PageInfo; |
| | | import com.ruoyi.goods.api.domain.TGoodsType; |
| | | import com.ruoyi.goods.api.feignClient.GoodsClient; |
| | | import com.ruoyi.goods.api.model.GoodsTypeQuery; |
| | | import org.springframework.cloud.openfeign.FallbackFactory; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | @Component |
| | | public class GoodsFallbackFactory implements FallbackFactory<GoodsClient> { |
| | | |
| | | @Override |
| | | public GoodsClient create(Throwable cause) |
| | | { |
| | | return new GoodsClient() { |
| | | |
| | | @Override |
| | | public R<PageInfo<TGoodsType>> listType(GoodsTypeQuery query) { |
| | | return R.fail("获取商品类型列表失败" + cause.getMessage()); |
| | | } |
| | | }; |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.goods.api.feignClient; |
| | | |
| | | import com.ruoyi.common.core.constant.ServiceNameConstants; |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.common.core.web.page.PageInfo; |
| | | import com.ruoyi.goods.api.domain.TGoodsType; |
| | | import com.ruoyi.goods.api.factory.GoodsFallbackFactory; |
| | | import com.ruoyi.goods.api.model.GoodsTypeQuery; |
| | | import org.springframework.cloud.openfeign.FeignClient; |
| | | import org.springframework.web.bind.annotation.PostMapping; |
| | | import org.springframework.web.bind.annotation.RequestBody; |
| | | |
| | | @FeignClient(contextId = "goodsClient", value = ServiceNameConstants.GOODS_SERVICE, fallbackFactory = GoodsFallbackFactory.class) |
| | | public interface GoodsClient { |
| | | @PostMapping("/base/goods/listType") |
| | | R<PageInfo<TGoodsType>> listType(@RequestBody GoodsTypeQuery query); |
| | | } |
New file |
| | |
| | | package com.ruoyi.goods.api.model; |
| | | |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | @Data |
| | | @ApiModel("商品/商品类型管理Query") |
| | | public class GoodsTypeQuery { |
| | | |
| | | @ApiModelProperty(value = "名称") |
| | | private String name; |
| | | @ApiModelProperty(value = "页码,首页1", required = true) |
| | | private Integer pageNumber; |
| | | @ApiModelProperty(value = "页条数", required = true) |
| | | private Integer pageSize; |
| | | } |
New file |
| | |
| | | com.ruoyi.goods.api.factory.GoodsFallbackFactory |
New file |
| | |
| | | <?xml version="1.0" encoding="UTF-8"?> |
| | | <project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
| | | xmlns="http://maven.apache.org/POM/4.0.0" |
| | | xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> |
| | | <parent> |
| | | <groupId>com.ruoyi</groupId> |
| | | <artifactId>ruoyi-api</artifactId> |
| | | <version>3.6.2</version> |
| | | </parent> |
| | | <modelVersion>4.0.0</modelVersion> |
| | | |
| | | <artifactId>ruoyi-api-management</artifactId> |
| | | |
| | | <description> |
| | | ruoyi-api-management后台配置接口模块 |
| | | </description> |
| | | |
| | | <dependencies> |
| | | |
| | | <!-- RuoYi Common Core--> |
| | | <dependency> |
| | | <groupId>com.ruoyi</groupId> |
| | | <artifactId>ruoyi-common-core</artifactId> |
| | | <exclusions> |
| | | <exclusion> |
| | | <groupId>com.github.pagehelper</groupId> |
| | | <artifactId>pagehelper-spring-boot-starter</artifactId> |
| | | </exclusion> |
| | | </exclusions> |
| | | </dependency> |
| | | |
| | | </dependencies> |
| | | |
| | | </project> |
New file |
| | |
| | | package com.ruoyi.management.api.factory; |
| | | |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.management.api.feignClient.TApproveConfigClient; |
| | | import com.ruoyi.management.api.vo.ApproveConfigClientVO; |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | | import org.springframework.cloud.openfeign.FallbackFactory; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * 门店服务降级处理 |
| | | * |
| | | * @author ruoyi |
| | | */ |
| | | @Component |
| | | public class TApproveConfigFallbackFactory implements FallbackFactory<TApproveConfigClient> |
| | | { |
| | | private static final Logger log = LoggerFactory.getLogger(TApproveConfigFallbackFactory.class); |
| | | |
| | | @Override |
| | | public TApproveConfigClient create(Throwable throwable) |
| | | { |
| | | log.error("审批服务调用失败:{}", throwable.getMessage()); |
| | | return new TApproveConfigClient() |
| | | { |
| | | @Override |
| | | public R<Boolean> add(Integer companyId) { |
| | | return R.fail("默认添加审批流配置失败:" + throwable.getMessage()); |
| | | } |
| | | |
| | | @Override |
| | | public R<List<ApproveConfigClientVO>> queryConfigByCompanyId(Integer companyId) { |
| | | return R.fail("查询公司审批流配置通过公司id失败:" + throwable.getMessage()); |
| | | } |
| | | }; |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.management.api.factory; |
| | | |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.management.api.feignClient.TCompanyRepairShopClient; |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | | import org.springframework.cloud.openfeign.FallbackFactory; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * 门店服务降级处理 |
| | | */ |
| | | @Component |
| | | public class TCompanyRepairShopFallbackFactory implements FallbackFactory<TCompanyRepairShopClient> |
| | | { |
| | | private static final Logger log = LoggerFactory.getLogger(TCompanyRepairShopFallbackFactory.class); |
| | | @Override |
| | | public TCompanyRepairShopClient create(Throwable cause) { |
| | | log.error("门店服务调用失败:{}", cause.getMessage()); |
| | | return new TCompanyRepairShopClient(){ |
| | | @Override |
| | | public R<List<Integer>> companyQueryRepairShopList(Long id) { |
| | | return R.fail("通过公司id查询修理厂id集合失败" + cause.getMessage()); |
| | | } |
| | | }; |
| | | |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.management.api.factory; |
| | | |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.common.core.web.domain.AjaxResult; |
| | | import com.ruoyi.management.api.feignClient.TCompanyShopClient; |
| | | import com.ruoyi.management.api.model.CompanyShopNameAndIdQuery; |
| | | import com.ruoyi.management.api.model.TCompany; |
| | | import com.ruoyi.management.api.model.TCompanyShop; |
| | | import com.ruoyi.management.api.query.ShopByShopNameAndCompanyNameQuery; |
| | | import com.ruoyi.management.api.vo.TCompanyShopElectronicClientVO; |
| | | import com.ruoyi.management.api.vo.TRepairShopByNameVO; |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | | import org.springframework.cloud.openfeign.FallbackFactory; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * 门店服务降级处理 |
| | | * |
| | | * @author ruoyi |
| | | */ |
| | | @Component |
| | | public class TCompanyShopFallbackFactory implements FallbackFactory<TCompanyShopClient> |
| | | { |
| | | private static final Logger log = LoggerFactory.getLogger(TCompanyShopFallbackFactory.class); |
| | | |
| | | @Override |
| | | public TCompanyShopClient create(Throwable throwable) |
| | | { |
| | | log.error("门店服务调用失败:{}", throwable.getMessage()); |
| | | return new TCompanyShopClient() |
| | | { |
| | | @Override |
| | | public R<List<TCompanyShop>> queryShopByShopId(List<Integer> shopIds) |
| | | { |
| | | return R.fail("通过门店id集合获取门店集合失败:" + throwable.getMessage()); |
| | | } |
| | | |
| | | @Override |
| | | public R<TCompanyShop> getInfo(Integer id) { |
| | | return R.fail("获取门店详情失败:" + throwable.getMessage()); |
| | | } |
| | | |
| | | @Override |
| | | public R<TCompanyShop> queryShopByShopName(String shopName) { |
| | | return R.fail("通过门店名称获取门店失败:" + throwable.getMessage()); |
| | | } |
| | | |
| | | @Override |
| | | public R<TCompany> queryCompanyByCompanyName(String companyName) { |
| | | return R.fail("通过门店名称获取公司失败:" + throwable.getMessage()); |
| | | } |
| | | |
| | | @Override |
| | | public R<TCompanyShop> queryShopByShopNameOne(CompanyShopNameAndIdQuery query) { |
| | | return R.fail("通过门店名称获取门店失败:" + throwable.getMessage()); |
| | | } |
| | | |
| | | @Override |
| | | public R<List<TCompanyShopElectronicClientVO>> queryElectronic(Integer shopId) { |
| | | return R.fail("通过门店id获取门店电子围栏信息失败:" + throwable.getMessage()); |
| | | } |
| | | |
| | | @Override |
| | | public R<List<TCompanyShop>> queryShopByCompany(Integer companyId) { |
| | | return R.fail("通过公司id查询门店失败:" + throwable.getMessage()); |
| | | } |
| | | |
| | | @Override |
| | | public R<TCompany> queryCompanyByCompany(Integer companyId) { |
| | | return R.fail("通过公司id查询公司失败:" + throwable.getMessage()); |
| | | } |
| | | |
| | | @Override |
| | | public R<TCompanyShop> queryShopByShopNameAndCompanyName(ShopByShopNameAndCompanyNameQuery query) { |
| | | return R.fail("通过门店名称和公司名称查询门店失败:" + throwable.getMessage()); |
| | | } |
| | | |
| | | @Override |
| | | public R<TCompanyShop> queryShopById(Integer id) { |
| | | return R.fail("通过门店id查询门店失败:" + throwable.getMessage()); |
| | | } |
| | | |
| | | @Override |
| | | public R<List<TRepairShopByNameVO>> queryRepairShopByName(String repairShopName) { |
| | | return R.fail("通过修理厂名称查询修理厂失败:" + throwable.getMessage()); |
| | | } |
| | | |
| | | @Override |
| | | public R<List<TRepairShopByNameVO>> queryRepairShopAll() { |
| | | return R.fail("查询所有修理厂失败:" + throwable.getMessage()); |
| | | } |
| | | |
| | | @Override |
| | | public R<List<TRepairShopByNameVO>> queryRepairShopByCompanyId(Integer companyId) { |
| | | return R.fail("通过公司id查询修理厂失败:" + throwable.getMessage()); |
| | | } |
| | | |
| | | @Override |
| | | public R<TCompany> queryCompanyByCompanyId(Integer companyId) { |
| | | return R.fail("通过公司id查询公司失败:" + throwable.getMessage()); |
| | | } |
| | | }; |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.management.api.factory; |
| | | |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.management.api.feignClient.TCompanyShopClient; |
| | | import com.ruoyi.management.api.feignClient.TCompanyShopToUserClient; |
| | | import com.ruoyi.management.api.model.AddUserShopClientDto; |
| | | import com.ruoyi.management.api.model.TCompanyShop; |
| | | import com.ruoyi.management.api.model.TCompanyShopToUser; |
| | | import com.ruoyi.management.api.model.TCompanyToUser; |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | | import org.springframework.cloud.openfeign.FallbackFactory; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * 门店服务降级处理 |
| | | * |
| | | * @author ruoyi |
| | | */ |
| | | @Component |
| | | public class TCompanyShopToUserFallbackFactory implements FallbackFactory<TCompanyShopToUserClient> |
| | | { |
| | | private static final Logger log = LoggerFactory.getLogger(TCompanyShopToUserFallbackFactory.class); |
| | | |
| | | @Override |
| | | public TCompanyShopToUserClient create(Throwable throwable) |
| | | { |
| | | log.error("门店用户关系服务调用失败:{}", throwable.getMessage()); |
| | | return new TCompanyShopToUserClient() |
| | | { |
| | | @Override |
| | | public R<List<TCompanyShopToUser>> getCompanyToUser(Long companyId) { |
| | | return R.fail("获取门店用户关系失败:" + throwable.getMessage()); |
| | | } |
| | | |
| | | @Override |
| | | public R<Boolean> addUserShop(AddUserShopClientDto addUserShopClientDto) { |
| | | return R.fail("添加门店账户失败:" + throwable.getMessage()); |
| | | } |
| | | |
| | | @Override |
| | | public R<List<Integer>> getShopIdsFromUserId(Long userId) { |
| | | return R.fail("根据用户id获取门店id失败:" + throwable.getMessage()); |
| | | } |
| | | |
| | | @Override |
| | | public R<Boolean> updateUserShop(AddUserShopClientDto addUserShopClientDto) { |
| | | return R.fail("更新门店账户失败:" + throwable.getMessage()); |
| | | } |
| | | |
| | | @Override |
| | | public R<List<TCompanyToUser>> getCompanyToUserFromCompanyId(Long companyId) { |
| | | return R.fail("通过公司id查询公司账户失败:" + throwable.getMessage()); |
| | | } |
| | | |
| | | @Override |
| | | public R<Boolean> addUserCompany(AddUserShopClientDto addUserShopClientDto) { |
| | | return R.fail("添加公司账户中间表失败:" + throwable.getMessage()); |
| | | } |
| | | |
| | | @Override |
| | | public R<String> getRepairNameFromId(Integer repairShopId) { |
| | | return R.fail("通过修理厂id查询修理厂失败:" + throwable.getMessage()); |
| | | } |
| | | |
| | | }; |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.management.api.factory; |
| | | |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.management.api.feignClient.TCompanyToUserClient; |
| | | import com.ruoyi.management.api.feignClient.TRepairShopClient; |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | | import org.springframework.cloud.openfeign.FallbackFactory; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import java.util.List; |
| | | |
| | | @Component |
| | | public class TCompanyToUserFallbackFactory implements FallbackFactory<TCompanyToUserClient> { |
| | | private static final Logger log = LoggerFactory.getLogger(TCompanyToUserFallbackFactory.class); |
| | | |
| | | |
| | | @Override |
| | | public TCompanyToUserClient create(Throwable cause) { |
| | | return new TCompanyToUserClient() { |
| | | @Override |
| | | public R<Integer> queryCompanyIdByUserId(Long id) { |
| | | return R.fail("通过用户ID查询公司ID失败" + cause.getMessage()); |
| | | } |
| | | |
| | | @Override |
| | | public R<List<Integer>> queryUserIdByCompanyId(Integer companyId) { |
| | | return R.fail("通过公司id查询用户id失败" + cause.getMessage()); |
| | | } |
| | | }; |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.management.api.factory; |
| | | |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.management.api.feignClient.TRepairShopClient; |
| | | import com.ruoyi.management.api.vo.TRepairShopClientVO; |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | | import org.springframework.cloud.openfeign.FallbackFactory; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import java.util.List; |
| | | |
| | | @Component |
| | | public class TRepairShopFallbackFactory implements FallbackFactory<TRepairShopClient> { |
| | | private static final Logger log = LoggerFactory.getLogger(TRepairShopFallbackFactory.class); |
| | | |
| | | @Override |
| | | public TRepairShopClient create(Throwable cause) { |
| | | return new TRepairShopClient() { |
| | | @Override |
| | | public R<String> getRepairById(Integer id) { |
| | | return R.fail("通过id获取修理厂获取详细信息失败:" + cause.getMessage()); |
| | | } |
| | | |
| | | @Override |
| | | public R<List<TRepairShopClientVO>> getRepairByCompanyId(Integer id) { |
| | | return R.fail("通过公司id获取修理厂列表失败:" + cause.getMessage()); |
| | | } |
| | | }; |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.management.api.factory; |
| | | |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.management.api.feignClient.TCompanyRepairShopClient; |
| | | import com.ruoyi.management.api.feignClient.TRepairShopToUserClient; |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | | import org.springframework.cloud.openfeign.FallbackFactory; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import java.util.List; |
| | | |
| | | @Component |
| | | public class TRepairShopToUserFallbackFactory implements FallbackFactory<TRepairShopToUserClient> { |
| | | private static final Logger log = LoggerFactory.getLogger(TRepairShopToUserFallbackFactory.class); |
| | | |
| | | |
| | | @Override |
| | | public TRepairShopToUserClient create(Throwable cause) { |
| | | log.error("门店服务调用失败:{}", cause.getMessage()); |
| | | return new TRepairShopToUserClient(){ |
| | | @Override |
| | | public R<Integer> selectByUserId(Long userId) { |
| | | return R.fail("通过userId获取修理厂id失败:" + cause.getMessage()); |
| | | } |
| | | }; |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.management.api.factory; |
| | | |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.common.core.web.page.PageInfo; |
| | | import com.ruoyi.management.api.feignClient.TCompanyShopClient; |
| | | import com.ruoyi.management.api.feignClient.ViolationClient; |
| | | import com.ruoyi.management.api.model.*; |
| | | import com.ruoyi.management.api.query.CarInfoQuery; |
| | | import com.ruoyi.management.api.query.VehicleViolationCountQuery; |
| | | import com.ruoyi.management.api.query.ViolationByCarIdAndTimeQuery; |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | | import org.springframework.cloud.openfeign.FallbackFactory; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * 门店服务降级处理 |
| | | * |
| | | * @author ruoyi |
| | | */ |
| | | @Component |
| | | public class ViolationShopFallbackFactory implements FallbackFactory<ViolationClient> |
| | | { |
| | | private static final Logger log = LoggerFactory.getLogger(ViolationShopFallbackFactory.class); |
| | | |
| | | @Override |
| | | public ViolationClient create(Throwable throwable) |
| | | { |
| | | return new ViolationClient() |
| | | { |
| | | @Override |
| | | public R<Integer> index(List<Integer> ids) { |
| | | return R.fail("违章管理调用失败" + throwable.getMessage()); |
| | | } |
| | | |
| | | @Override |
| | | public R<Integer> isViolation(Integer id) { |
| | | return R.fail("违章管理调用失败" + throwable.getMessage()); |
| | | } |
| | | |
| | | @Override |
| | | public R<PageInfo<TViolationManageInfo>> carInfoRecord(CarInfoRecordQuery query) { |
| | | return R.fail("违章管理调用失败" + throwable.getMessage()); |
| | | } |
| | | |
| | | @Override |
| | | public R<List<TViolationManage>> queryViolationByCarId(Integer carId) { |
| | | return R.fail("通过车辆id查询车辆的违章数据失败" + throwable.getMessage()); |
| | | } |
| | | |
| | | @Override |
| | | public R<TSystemConfig> querySystemConfigByType(CarInfoQuery query) { |
| | | return R.fail("通过类型查询系统规则配置失败" + throwable.getMessage()); |
| | | } |
| | | |
| | | @Override |
| | | public R<Integer> vehicleViolation(VehicleViolationCountQuery violationCountQuery) { |
| | | return R.fail("查询车辆违章数量失败" + throwable.getMessage()); |
| | | } |
| | | |
| | | @Override |
| | | public R<List<TViolationManage>> queryViolationByCarIdAndTime(ViolationByCarIdAndTimeQuery query) { |
| | | return R.fail("通过车辆id和开始结束时间查询车辆的违章数据失败" + throwable.getMessage()); |
| | | } |
| | | }; |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.management.api.feignClient; |
| | | |
| | | import com.ruoyi.common.core.constant.ServiceNameConstants; |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.management.api.factory.TApproveConfigFallbackFactory; |
| | | import com.ruoyi.management.api.factory.TCompanyShopFallbackFactory; |
| | | import com.ruoyi.management.api.model.CompanyShopNameAndIdQuery; |
| | | import com.ruoyi.management.api.model.TCompany; |
| | | import com.ruoyi.management.api.model.TCompanyShop; |
| | | import com.ruoyi.management.api.vo.ApproveConfigClientVO; |
| | | import com.ruoyi.management.api.vo.TCompanyShopElectronicClientVO; |
| | | import org.springframework.cloud.openfeign.FeignClient; |
| | | import org.springframework.web.bind.annotation.GetMapping; |
| | | import org.springframework.web.bind.annotation.PathVariable; |
| | | import org.springframework.web.bind.annotation.PostMapping; |
| | | import org.springframework.web.bind.annotation.RequestBody; |
| | | |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * 门店服务 |
| | | * |
| | | * @author ruoyi |
| | | */ |
| | | @FeignClient(contextId = "tApproveConfigClient", value = ServiceNameConstants.MANAGEMENT_SERVICE, fallbackFactory = TApproveConfigFallbackFactory.class) |
| | | public interface TApproveConfigClient |
| | | { |
| | | /** |
| | | * 默认添加审批流配置 |
| | | * |
| | | * @param companyId 公司id |
| | | * @return 结果 |
| | | */ |
| | | @PostMapping("/approveConfig/add/{companyId}") |
| | | public R<Boolean> add(@PathVariable("companyId") Integer companyId); |
| | | |
| | | /** |
| | | * 查询公司审批流配置通过公司id |
| | | * |
| | | * @param companyId 公司id |
| | | * @return 结果 |
| | | */ |
| | | @GetMapping("/approveConfig/queryConfigByCompanyId/{companyId}") |
| | | public R<List<ApproveConfigClientVO>> queryConfigByCompanyId(@PathVariable("companyId") Integer companyId); |
| | | |
| | | } |
New file |
| | |
| | | package com.ruoyi.management.api.feignClient; |
| | | |
| | | |
| | | import com.ruoyi.common.core.constant.ServiceNameConstants; |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.management.api.factory.TCompanyRepairShopFallbackFactory; |
| | | import org.springframework.cloud.openfeign.FeignClient; |
| | | import org.springframework.web.bind.annotation.PathVariable; |
| | | import org.springframework.web.bind.annotation.PostMapping; |
| | | |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * 门店服务 |
| | | */ |
| | | @FeignClient(contextId = "tCompanyRepairShopClient", value = ServiceNameConstants.MANAGEMENT_SERVICE, fallbackFactory = TCompanyRepairShopFallbackFactory.class) |
| | | public interface TCompanyRepairShopClient { |
| | | /** |
| | | * 通过公司id查询修理厂id集合 |
| | | * @param id |
| | | * @return |
| | | */ |
| | | @PostMapping("/repairShop/companyQueryRepairShopList/{id}") |
| | | R<List<Integer>> companyQueryRepairShopList(@PathVariable("id") Long id); |
| | | } |
New file |
| | |
| | | package com.ruoyi.management.api.feignClient; |
| | | |
| | | import com.ruoyi.common.core.constant.ServiceNameConstants; |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.common.core.web.domain.AjaxResult; |
| | | import com.ruoyi.management.api.factory.TCompanyShopFallbackFactory; |
| | | import com.ruoyi.management.api.model.CompanyShopNameAndIdQuery; |
| | | import com.ruoyi.management.api.model.TCompany; |
| | | import com.ruoyi.management.api.model.TCompanyShop; |
| | | import com.ruoyi.management.api.model.TCompanyShopToUser; |
| | | import com.ruoyi.management.api.query.ShopByShopNameAndCompanyNameQuery; |
| | | import com.ruoyi.management.api.vo.TCompanyShopElectronicClientVO; |
| | | import com.ruoyi.management.api.vo.TRepairShopByNameVO; |
| | | import org.springframework.cloud.openfeign.FeignClient; |
| | | import org.springframework.web.bind.annotation.GetMapping; |
| | | import org.springframework.web.bind.annotation.PathVariable; |
| | | import org.springframework.web.bind.annotation.PostMapping; |
| | | import org.springframework.web.bind.annotation.RequestBody; |
| | | |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * 门店服务 |
| | | * |
| | | * @author ruoyi |
| | | */ |
| | | @FeignClient(contextId = "tCompanyShopClient", value = ServiceNameConstants.MANAGEMENT_SERVICE, fallbackFactory = TCompanyShopFallbackFactory.class) |
| | | public interface TCompanyShopClient |
| | | { |
| | | /** |
| | | * 通过门店id集合查询门店 |
| | | * |
| | | * @param shopIds 门店id集合 |
| | | * @return 结果 |
| | | */ |
| | | @PostMapping("/companyShop/queryShopByShopId") |
| | | public R<List<TCompanyShop>> queryShopByShopId(@RequestBody List<Integer> shopIds); |
| | | |
| | | /** |
| | | * 通过门店id查询门店 |
| | | * |
| | | * @param id 门店id |
| | | * @return 结果 |
| | | */ |
| | | @GetMapping(value = "/companyShop/{id}") |
| | | public R<TCompanyShop> getInfo(@PathVariable("id") Integer id); |
| | | |
| | | /** |
| | | * 通过门店名称查询门店 |
| | | * |
| | | * @param shopName 门店名称 |
| | | * @return 结果 |
| | | */ |
| | | @PostMapping(value = "/companyShop/queryShopByShopName") |
| | | public R<TCompanyShop> queryShopByShopName(@RequestBody String shopName); |
| | | |
| | | /** |
| | | * 通过公司名称查询公司 |
| | | * @param companyName |
| | | * @return |
| | | */ |
| | | @PostMapping(value = "/companyShop/queryCompanyByCompanyName") |
| | | R<TCompany> queryCompanyByCompanyName(String companyName); |
| | | |
| | | /** |
| | | * 通过门店名称获取门店 |
| | | * @param query |
| | | * @return |
| | | */ |
| | | @PostMapping(value = "/companyShop/queryShopByShopNameOne") |
| | | R<TCompanyShop> queryShopByShopNameOne(@RequestBody CompanyShopNameAndIdQuery query); |
| | | |
| | | /** |
| | | * 通过门店id获取门店电子围栏信息 |
| | | * @param shopId |
| | | * @return |
| | | */ |
| | | @GetMapping(value = "/companyShop/queryElectronic/{shopId}") |
| | | R<List<TCompanyShopElectronicClientVO>> queryElectronic(@PathVariable("shopId") Integer shopId); |
| | | |
| | | /** |
| | | * 通过公司id查询门店 |
| | | * |
| | | * @param companyId 公司id |
| | | * @return 结果 |
| | | */ |
| | | @PostMapping("/companyShop/queryShopByCompany/{companyId}") |
| | | R<List<TCompanyShop>> queryShopByCompany(@PathVariable("companyId") Integer companyId); |
| | | |
| | | |
| | | /** |
| | | * 通过公司id查询公司 |
| | | * |
| | | * @param companyId 公司id |
| | | * @return 结果 |
| | | */ |
| | | @PostMapping("/companyShop/queryCompanyByCompany/{companyId}") |
| | | R<TCompany> queryCompanyByCompany(@PathVariable("companyId") Integer companyId); |
| | | |
| | | |
| | | /** |
| | | * 通过门店名称和公司名称查询门店 |
| | | * |
| | | * @param query |
| | | * @return 结果 |
| | | */ |
| | | @PostMapping(value = "/companyShop/queryShopByShopNameAndCompanyName") |
| | | R<TCompanyShop> queryShopByShopNameAndCompanyName(@RequestBody ShopByShopNameAndCompanyNameQuery query); |
| | | |
| | | /** |
| | | * 通过门店id查询门店 |
| | | * |
| | | * @param id 门店id |
| | | * @return 结果 |
| | | */ |
| | | @GetMapping(value = "/companyShop/queryShopById/{id}") |
| | | R<TCompanyShop> queryShopById(@PathVariable("id") Integer id); |
| | | |
| | | /** |
| | | * 通过修理厂名称查询修理厂 |
| | | * |
| | | * @param repairShopName 修理厂名称 |
| | | * @return 结果 |
| | | */ |
| | | @PostMapping(value = "/companyShop/queryRepairShopByName") |
| | | R<List<TRepairShopByNameVO>> queryRepairShopByName(@RequestBody String repairShopName); |
| | | |
| | | /** |
| | | * 查询所有修理厂 |
| | | * |
| | | * @return 结果 |
| | | */ |
| | | @PostMapping(value = "/companyShop/queryRepairShopAll") |
| | | R<List<TRepairShopByNameVO>> queryRepairShopAll(); |
| | | |
| | | /** |
| | | * 通过修理厂名称查询修理厂 |
| | | * |
| | | * @param companyId |
| | | * @return 结果 |
| | | */ |
| | | @GetMapping(value = "/companyShop/queryRepairShopByCompanyId/{companyId}") |
| | | R<List<TRepairShopByNameVO>> queryRepairShopByCompanyId(@PathVariable("companyId") Integer companyId); |
| | | |
| | | |
| | | /** |
| | | * 通过公司id查询公司 |
| | | */ |
| | | @GetMapping("/companyShop/queryCompanyByCompanyId/{companyId}") |
| | | R<TCompany> queryCompanyByCompanyId(@PathVariable("companyId") Integer companyId); |
| | | } |
New file |
| | |
| | | package com.ruoyi.management.api.feignClient; |
| | | |
| | | import com.ruoyi.common.core.constant.ServiceNameConstants; |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.management.api.factory.TCompanyShopFallbackFactory; |
| | | import com.ruoyi.management.api.model.AddUserShopClientDto; |
| | | import com.ruoyi.management.api.model.TCompanyShopToUser; |
| | | import com.ruoyi.management.api.model.TCompanyToUser; |
| | | import org.springframework.cloud.openfeign.FeignClient; |
| | | import org.springframework.web.bind.annotation.PostMapping; |
| | | import org.springframework.web.bind.annotation.RequestBody; |
| | | |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * 门店服务 |
| | | * |
| | | * @author ruoyi |
| | | */ |
| | | @FeignClient(contextId = "tCompanyShopToUserClient", value = ServiceNameConstants.MANAGEMENT_SERVICE, fallbackFactory = TCompanyShopFallbackFactory.class) |
| | | public interface TCompanyShopToUserClient { |
| | | |
| | | /** |
| | | * 通过公司id获取门店的中间表集合 |
| | | * |
| | | * @param companyId |
| | | * @return |
| | | */ |
| | | @PostMapping(value = "/companyShopToUser/getCompanyToUser") |
| | | R<List<TCompanyShopToUser>> getCompanyToUser(@RequestBody Long companyId); |
| | | |
| | | @PostMapping(value = "/companyShopToUser/addUserShop") |
| | | R<Boolean> addUserShop(@RequestBody AddUserShopClientDto addUserShopClientDto); |
| | | |
| | | @PostMapping(value = "/companyShopToUser/getShopIdsFromUserId") |
| | | R<List<Integer>> getShopIdsFromUserId(@RequestBody Long userId); |
| | | |
| | | @PostMapping(value = "/companyShopToUser/updateUserShop") |
| | | R<Boolean> updateUserShop(@RequestBody AddUserShopClientDto addUserShopClientDto); |
| | | |
| | | @PostMapping(value = "/companyShopToUser/getCompanyToUserFromCompanyId") |
| | | R<List<TCompanyToUser>> getCompanyToUserFromCompanyId(@RequestBody Long companyId); |
| | | @PostMapping(value = "/companyShopToUser/addUserCompany") |
| | | R<Boolean> addUserCompany(@RequestBody AddUserShopClientDto addUserShopClientDto); |
| | | |
| | | |
| | | @PostMapping(value = "/companyShopToUser/getRepairNameFromId") |
| | | R<String> getRepairNameFromId(Integer repairShopId); |
| | | |
| | | } |
New file |
| | |
| | | package com.ruoyi.management.api.feignClient; |
| | | |
| | | import com.ruoyi.common.core.constant.ServiceNameConstants; |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.management.api.factory.TCompanyShopFallbackFactory; |
| | | import com.ruoyi.management.api.factory.TCompanyToUserFallbackFactory; |
| | | import com.ruoyi.management.api.model.CompanyShopNameAndIdQuery; |
| | | import com.ruoyi.management.api.model.TCompany; |
| | | import com.ruoyi.management.api.model.TCompanyShop; |
| | | import com.ruoyi.management.api.query.ShopByShopNameAndCompanyNameQuery; |
| | | import com.ruoyi.management.api.vo.TCompanyShopElectronicClientVO; |
| | | import io.swagger.annotations.ApiOperation; |
| | | import org.springframework.cloud.openfeign.FeignClient; |
| | | import org.springframework.web.bind.annotation.GetMapping; |
| | | import org.springframework.web.bind.annotation.PathVariable; |
| | | import org.springframework.web.bind.annotation.PostMapping; |
| | | import org.springframework.web.bind.annotation.RequestBody; |
| | | |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * 门店服务 |
| | | * |
| | | * @author ruoyi |
| | | */ |
| | | @FeignClient(contextId = "tCompanyToUserClient", value = ServiceNameConstants.MANAGEMENT_SERVICE, fallbackFactory = TCompanyToUserFallbackFactory.class) |
| | | public interface TCompanyToUserClient |
| | | { |
| | | |
| | | /** |
| | | * 通过用户id查询公司id |
| | | */ |
| | | @GetMapping("/companyToUser/queryCompanyIdByUserId/{id}") |
| | | public R<Integer> queryCompanyIdByUserId(@PathVariable("id") Long id); |
| | | |
| | | /** |
| | | * 通过公司id查询用户id |
| | | */ |
| | | @GetMapping("/companyToUser/queryUserIdByCompanyId/{companyId}") |
| | | public R<List<Integer>> queryUserIdByCompanyId(@PathVariable("companyId") Integer companyId); |
| | | |
| | | } |
New file |
| | |
| | | package com.ruoyi.management.api.feignClient; |
| | | |
| | | import com.ruoyi.common.core.constant.ServiceNameConstants; |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.management.api.factory.TRepairShopFallbackFactory; |
| | | import com.ruoyi.management.api.vo.TRepairShopClientVO; |
| | | import io.swagger.annotations.ApiOperation; |
| | | import org.springframework.cloud.openfeign.FeignClient; |
| | | import org.springframework.web.bind.annotation.GetMapping; |
| | | import org.springframework.web.bind.annotation.PathVariable; |
| | | |
| | | import java.util.List; |
| | | |
| | | @FeignClient(contextId = "tRepairShopClient", value = ServiceNameConstants.MANAGEMENT_SERVICE, fallbackFactory = TRepairShopFallbackFactory.class) |
| | | public interface TRepairShopClient { |
| | | /** |
| | | * 通过id获取修理厂详细信息 |
| | | */ |
| | | @ApiOperation(value = "获取修理厂管理详细信息") |
| | | @GetMapping(value = "/repairShop/getRepairById/{id}") |
| | | public R<String> getRepairById(@PathVariable("id") Integer id); |
| | | |
| | | /** |
| | | * 根据公司id获取修理厂列表 |
| | | */ |
| | | @GetMapping(value = "/repairShop/getRepairByCompanyId/{id}") |
| | | public R<List<TRepairShopClientVO>> getRepairByCompanyId(@PathVariable("id") Integer id); |
| | | |
| | | |
| | | } |
New file |
| | |
| | | package com.ruoyi.management.api.feignClient; |
| | | |
| | | import com.ruoyi.common.core.constant.ServiceNameConstants; |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.management.api.factory.TRepairShopToUserFallbackFactory; |
| | | import io.swagger.annotations.ApiOperation; |
| | | import org.springframework.cloud.openfeign.FeignClient; |
| | | import org.springframework.web.bind.annotation.GetMapping; |
| | | import org.springframework.web.bind.annotation.PathVariable; |
| | | |
| | | @FeignClient(contextId = "tRepairShopToUserClient", value = ServiceNameConstants.MANAGEMENT_SERVICE, fallbackFactory = TRepairShopToUserFallbackFactory.class) |
| | | |
| | | public interface TRepairShopToUserClient { |
| | | /** |
| | | * 根据用户id获取修理厂id |
| | | */ |
| | | @ApiOperation(value = "通过userId查询对应修理厂Id") |
| | | @GetMapping("/repairShopToUser/selectByUserId/{userId}") |
| | | public R<Integer> selectByUserId(@PathVariable("userId") Long userId); |
| | | } |
New file |
| | |
| | | package com.ruoyi.management.api.feignClient; |
| | | |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.ruoyi.common.core.constant.ServiceNameConstants; |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.common.core.web.page.PageInfo; |
| | | import com.ruoyi.management.api.factory.TCompanyShopFallbackFactory; |
| | | import com.ruoyi.management.api.factory.ViolationShopFallbackFactory; |
| | | import com.ruoyi.management.api.model.CarInfoRecordQuery; |
| | | import com.ruoyi.management.api.model.TSystemConfig; |
| | | import com.ruoyi.management.api.model.TViolationManage; |
| | | import com.ruoyi.management.api.model.TViolationManageInfo; |
| | | import com.ruoyi.management.api.query.CarInfoQuery; |
| | | import com.ruoyi.management.api.query.VehicleViolationCountQuery; |
| | | import com.ruoyi.management.api.query.ViolationByCarIdAndTimeQuery; |
| | | import org.springframework.cloud.openfeign.FeignClient; |
| | | import org.springframework.web.bind.annotation.GetMapping; |
| | | import org.springframework.web.bind.annotation.PathVariable; |
| | | import org.springframework.web.bind.annotation.PostMapping; |
| | | import org.springframework.web.bind.annotation.RequestBody; |
| | | |
| | | import java.util.List; |
| | | |
| | | @FeignClient(contextId = "violationClient", value = ServiceNameConstants.MANAGEMENT_SERVICE, fallbackFactory = ViolationShopFallbackFactory.class) |
| | | public interface ViolationClient { |
| | | |
| | | @PostMapping("/violationManage/index") |
| | | R<Integer> index(@RequestBody List<Integer> ids); |
| | | |
| | | @PostMapping("/violationManage/isViolation") |
| | | R<Integer> isViolation(Integer id); |
| | | |
| | | @PostMapping("/violationManage/carInfoRecord") |
| | | R<PageInfo<TViolationManageInfo>> carInfoRecord(@RequestBody CarInfoRecordQuery query); |
| | | |
| | | /** |
| | | * 通过车辆id查询车辆的违章数据 |
| | | * @param carId |
| | | * @return |
| | | */ |
| | | @GetMapping("/violationManage/queryViolationByCarId/{carId}") |
| | | R<List<TViolationManage>> queryViolationByCarId(@PathVariable("carId") Integer carId); |
| | | |
| | | /** |
| | | * 通过类型查询系统规则配置 |
| | | * @param query |
| | | * @return |
| | | */ |
| | | @GetMapping("/violationManage/querySystemConfigByType") |
| | | R<TSystemConfig> querySystemConfigByType(@RequestBody CarInfoQuery query); |
| | | |
| | | /** |
| | | * 查询车辆违章数量 |
| | | * @param violationCountQuery |
| | | * @return |
| | | */ |
| | | @PostMapping("/violationManage/vehicleViolation") |
| | | R<Integer> vehicleViolation(@RequestBody VehicleViolationCountQuery violationCountQuery); |
| | | |
| | | /** |
| | | * 通过车辆id和开始结束时间查询车辆的违章数据 |
| | | * @param query |
| | | * @return |
| | | */ |
| | | @PostMapping("/violationManage/queryViolationByCarIdAndTime") |
| | | R<List<TViolationManage>> queryViolationByCarIdAndTime(@RequestBody ViolationByCarIdAndTimeQuery query); |
| | | |
| | | } |
New file |
| | |
| | | package com.ruoyi.management.api.model; |
| | | |
| | | import lombok.AllArgsConstructor; |
| | | import lombok.Data; |
| | | import lombok.NoArgsConstructor; |
| | | |
| | | import java.util.List; |
| | | |
| | | @Data |
| | | @AllArgsConstructor |
| | | @NoArgsConstructor |
| | | public class AddUserShopClientDto { |
| | | private Long userId; |
| | | |
| | | private List<Integer> shopIds; |
| | | } |
New file |
| | |
| | | package com.ruoyi.management.api.model; |
| | | |
| | | import com.ruoyi.common.core.web.page.BasePage; |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | import org.springframework.context.annotation.Bean; |
| | | |
| | | @Data |
| | | @ApiModel(value = "车辆详情model") |
| | | public class CarInfoRecordQuery extends BasePage { |
| | | @ApiModelProperty("车辆id") |
| | | private Integer carId; |
| | | @ApiModelProperty("type 1合同 2违章 3保养 4年检 5维修 6出险 7保单") |
| | | private Integer type; |
| | | } |
New file |
| | |
| | | package com.ruoyi.management.api.model; |
| | | |
| | | import lombok.Data; |
| | | |
| | | @Data |
| | | public class CompanyShopNameAndIdQuery { |
| | | private String shopName; |
| | | private Integer id; |
| | | } |
New file |
| | |
| | | package com.ruoyi.management.api.model; |
| | | |
| | | import com.baomidou.mybatisplus.annotation.IdType; |
| | | import com.baomidou.mybatisplus.annotation.TableId; |
| | | import com.ruoyi.common.core.annotation.Excel; |
| | | import com.ruoyi.common.core.web.domain.BaseModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import org.apache.commons.lang3.builder.ToStringBuilder; |
| | | import org.apache.commons.lang3.builder.ToStringStyle; |
| | | |
| | | /** |
| | | * 客户管理对象 t_company |
| | | * |
| | | * @author xiaochen |
| | | * @date 2023-06-07 |
| | | */ |
| | | public class TCompany extends BaseModel |
| | | { |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | /** $column.columnComment */ |
| | | @TableId(value = "id", type = IdType.AUTO) |
| | | private Integer id; |
| | | |
| | | /** 客户名称 */ |
| | | @Excel(name = "客户名称") |
| | | private String companyName; |
| | | |
| | | /** 省份 */ |
| | | @Excel(name = "省份") |
| | | private String province; |
| | | |
| | | /** 省份编码 */ |
| | | @Excel(name = "省份编码") |
| | | private String provinceCode; |
| | | |
| | | /** 城市 */ |
| | | @Excel(name = "城市") |
| | | private String city; |
| | | |
| | | /** 城市编码 */ |
| | | @Excel(name = "城市编码") |
| | | private String cityCode; |
| | | |
| | | /** 区县 */ |
| | | @Excel(name = "区县") |
| | | private String district; |
| | | |
| | | /** 区县编码 */ |
| | | @Excel(name = "区县编码") |
| | | private String districtCode; |
| | | |
| | | /** 负责人名称 */ |
| | | @Excel(name = "负责人名称") |
| | | private String headName; |
| | | |
| | | /** 负责人手机号 */ |
| | | @Excel(name = "负责人手机号") |
| | | private String headPhone; |
| | | |
| | | /** 详细地址 */ |
| | | @Excel(name = "详细地址") |
| | | private String address; |
| | | |
| | | /** 状态 1启用 0停用 */ |
| | | @Excel(name = "状态 1启用 0停用") |
| | | private Integer state; |
| | | |
| | | |
| | | |
| | | public void setId(Integer id) |
| | | { |
| | | this.id = id; |
| | | } |
| | | |
| | | public Integer getId() |
| | | { |
| | | return id; |
| | | } |
| | | public void setCompanyName(String companyName) |
| | | { |
| | | this.companyName = companyName; |
| | | } |
| | | |
| | | public String getCompanyName() |
| | | { |
| | | return companyName; |
| | | } |
| | | public void setProvince(String province) |
| | | { |
| | | this.province = province; |
| | | } |
| | | |
| | | public String getProvince() |
| | | { |
| | | return province; |
| | | } |
| | | public void setProvinceCode(String provinceCode) |
| | | { |
| | | this.provinceCode = provinceCode; |
| | | } |
| | | |
| | | public String getProvinceCode() |
| | | { |
| | | return provinceCode; |
| | | } |
| | | public void setCity(String city) |
| | | { |
| | | this.city = city; |
| | | } |
| | | |
| | | public String getCity() |
| | | { |
| | | return city; |
| | | } |
| | | public void setCityCode(String cityCode) |
| | | { |
| | | this.cityCode = cityCode; |
| | | } |
| | | |
| | | public String getCityCode() |
| | | { |
| | | return cityCode; |
| | | } |
| | | public void setDistrict(String district) |
| | | { |
| | | this.district = district; |
| | | } |
| | | |
| | | public String getDistrict() |
| | | { |
| | | return district; |
| | | } |
| | | public void setDistrictCode(String districtCode) |
| | | { |
| | | this.districtCode = districtCode; |
| | | } |
| | | |
| | | public String getDistrictCode() |
| | | { |
| | | return districtCode; |
| | | } |
| | | public void setHeadName(String headName) |
| | | { |
| | | this.headName = headName; |
| | | } |
| | | |
| | | public String getHeadName() |
| | | { |
| | | return headName; |
| | | } |
| | | public void setHeadPhone(String headPhone) |
| | | { |
| | | this.headPhone = headPhone; |
| | | } |
| | | |
| | | public String getHeadPhone() |
| | | { |
| | | return headPhone; |
| | | } |
| | | public void setAddress(String address) |
| | | { |
| | | this.address = address; |
| | | } |
| | | |
| | | public String getAddress() |
| | | { |
| | | return address; |
| | | } |
| | | public void setState(Integer state) |
| | | { |
| | | this.state = state; |
| | | } |
| | | |
| | | public Integer getState() |
| | | { |
| | | return state; |
| | | } |
| | | |
| | | @ApiModelProperty(value = "备注说明") |
| | | @Excel(name = "备注说明") |
| | | private String remark; |
| | | |
| | | public String getRemark() { |
| | | return remark; |
| | | } |
| | | |
| | | public void setRemark(String remark) { |
| | | this.remark = remark; |
| | | } |
| | | |
| | | @Override |
| | | public String toString() { |
| | | return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) |
| | | .append("id", getId()) |
| | | .append("companyName", getCompanyName()) |
| | | .append("province", getProvince()) |
| | | .append("provinceCode", getProvinceCode()) |
| | | .append("city", getCity()) |
| | | .append("cityCode", getCityCode()) |
| | | .append("district", getDistrict()) |
| | | .append("districtCode", getDistrictCode()) |
| | | .append("headName", getHeadName()) |
| | | .append("headPhone", getHeadPhone()) |
| | | .append("address", getAddress()) |
| | | .append("remark", getRemark()) |
| | | .append("state", getState()) |
| | | .append("createBy", getCreateBy()) |
| | | .append("updateBy", getUpdateBy()) |
| | | .append("createTime", getCreateTime()) |
| | | .append("updateTime", getUpdateTime()) |
| | | .append("disabled", getDisabled()) |
| | | .toString(); |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.management.api.model; |
| | | |
| | | import com.baomidou.mybatisplus.annotation.IdType; |
| | | import com.baomidou.mybatisplus.annotation.TableId; |
| | | import com.ruoyi.common.core.annotation.Excel; |
| | | import com.ruoyi.common.core.web.domain.BaseEntity; |
| | | import com.ruoyi.common.core.web.domain.BaseModel; |
| | | import org.apache.commons.lang3.builder.ToStringBuilder; |
| | | import org.apache.commons.lang3.builder.ToStringStyle; |
| | | |
| | | /** |
| | | * 公司门店对象 t_company_shop |
| | | * |
| | | * @author xiaochen |
| | | * @date 2023-06-07 |
| | | */ |
| | | public class TCompanyShop extends BaseModel |
| | | { |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | /** $column.columnComment */ |
| | | @TableId(value = "id", type = IdType.AUTO) |
| | | private Integer id; |
| | | |
| | | /** 公司id */ |
| | | @Excel(name = "公司id") |
| | | private Integer companyId; |
| | | |
| | | /** 门店名称 */ |
| | | @Excel(name = "门店名称") |
| | | private String shopName; |
| | | |
| | | /** 负责人名称 */ |
| | | @Excel(name = "负责人名称") |
| | | private String headName; |
| | | |
| | | /** 负责人电话 */ |
| | | @Excel(name = "负责人电话") |
| | | private String headPhone; |
| | | |
| | | /** 省份 */ |
| | | @Excel(name = "省份") |
| | | private String province; |
| | | |
| | | /** 省份编码 */ |
| | | @Excel(name = "省份编码") |
| | | private String provinceCode; |
| | | |
| | | /** 城市 */ |
| | | @Excel(name = "城市") |
| | | private String city; |
| | | |
| | | /** 城市编码 */ |
| | | @Excel(name = "城市编码") |
| | | private String cityCode; |
| | | |
| | | /** 区县 */ |
| | | @Excel(name = "区县") |
| | | private String district; |
| | | |
| | | /** 区县编码 */ |
| | | @Excel(name = "区县编码") |
| | | private String districtCode; |
| | | |
| | | /** 详细地址 */ |
| | | @Excel(name = "详细地址") |
| | | private String address; |
| | | |
| | | /** 状态 1启用 0停用 */ |
| | | @Excel(name = "状态 1启用 0停用") |
| | | private Integer state; |
| | | |
| | | |
| | | private String remark; |
| | | |
| | | public String getRemark() { |
| | | return remark; |
| | | } |
| | | |
| | | public void setRemark(String remark) { |
| | | this.remark = remark; |
| | | } |
| | | |
| | | public void setId(Integer id) |
| | | { |
| | | this.id = id; |
| | | } |
| | | |
| | | public Integer getId() |
| | | { |
| | | return id; |
| | | } |
| | | public void setCompanyId(Integer companyId) |
| | | { |
| | | this.companyId = companyId; |
| | | } |
| | | |
| | | public Integer getCompanyId() |
| | | { |
| | | return companyId; |
| | | } |
| | | public void setShopName(String shopName) |
| | | { |
| | | this.shopName = shopName; |
| | | } |
| | | |
| | | public String getShopName() |
| | | { |
| | | return shopName; |
| | | } |
| | | public void setHeadName(String headName) |
| | | { |
| | | this.headName = headName; |
| | | } |
| | | |
| | | public String getHeadName() |
| | | { |
| | | return headName; |
| | | } |
| | | public void setHeadPhone(String headPhone) |
| | | { |
| | | this.headPhone = headPhone; |
| | | } |
| | | |
| | | public String getHeadPhone() |
| | | { |
| | | return headPhone; |
| | | } |
| | | public void setProvince(String province) |
| | | { |
| | | this.province = province; |
| | | } |
| | | |
| | | public String getProvince() |
| | | { |
| | | return province; |
| | | } |
| | | public void setProvinceCode(String provinceCode) |
| | | { |
| | | this.provinceCode = provinceCode; |
| | | } |
| | | |
| | | public String getProvinceCode() |
| | | { |
| | | return provinceCode; |
| | | } |
| | | public void setCity(String city) |
| | | { |
| | | this.city = city; |
| | | } |
| | | |
| | | public String getCity() |
| | | { |
| | | return city; |
| | | } |
| | | public void setCityCode(String cityCode) |
| | | { |
| | | this.cityCode = cityCode; |
| | | } |
| | | |
| | | public String getCityCode() |
| | | { |
| | | return cityCode; |
| | | } |
| | | public void setDistrict(String district) |
| | | { |
| | | this.district = district; |
| | | } |
| | | |
| | | public String getDistrict() |
| | | { |
| | | return district; |
| | | } |
| | | public void setDistrictCode(String districtCode) |
| | | { |
| | | this.districtCode = districtCode; |
| | | } |
| | | |
| | | public String getDistrictCode() |
| | | { |
| | | return districtCode; |
| | | } |
| | | public void setAddress(String address) |
| | | { |
| | | this.address = address; |
| | | } |
| | | |
| | | public String getAddress() |
| | | { |
| | | return address; |
| | | } |
| | | public void setState(Integer state) |
| | | { |
| | | this.state = state; |
| | | } |
| | | |
| | | public Integer getState() |
| | | { |
| | | return state; |
| | | } |
| | | |
| | | @Override |
| | | public String toString() { |
| | | return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) |
| | | .append("id", getId()) |
| | | .append("companyId", getCompanyId()) |
| | | .append("shopName", getShopName()) |
| | | .append("headName", getHeadName()) |
| | | .append("headPhone", getHeadPhone()) |
| | | .append("province", getProvince()) |
| | | .append("provinceCode", getProvinceCode()) |
| | | .append("city", getCity()) |
| | | .append("cityCode", getCityCode()) |
| | | .append("district", getDistrict()) |
| | | .append("districtCode", getDistrictCode()) |
| | | .append("address", getAddress()) |
| | | .append("state", getState()) |
| | | .append("createBy", getCreateBy()) |
| | | .append("updateBy", getUpdateBy()) |
| | | .append("createTime", getCreateTime()) |
| | | .append("updateTime", getUpdateTime()) |
| | | .append("disabled", getDisabled()) |
| | | .toString(); |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.management.api.model; |
| | | |
| | | import com.baomidou.mybatisplus.annotation.IdType; |
| | | import com.baomidou.mybatisplus.annotation.TableId; |
| | | import com.baomidou.mybatisplus.annotation.TableName; |
| | | import com.ruoyi.common.core.annotation.Excel; |
| | | import com.ruoyi.common.core.web.domain.BaseEntity; |
| | | import io.swagger.annotations.ApiModel; |
| | | import org.apache.commons.lang3.builder.ToStringBuilder; |
| | | import org.apache.commons.lang3.builder.ToStringStyle; |
| | | |
| | | /** |
| | | * 门店-用户关联对象 t_company_shop_to_user |
| | | * |
| | | * @author xiaochen |
| | | * @date 2023-06-07 |
| | | */ |
| | | @TableName("t_company_shop_to_user") |
| | | @ApiModel(value="t_company_shop_to_user对象", description="门店-用户关联对象") |
| | | public class TCompanyShopToUser |
| | | { |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | /** $column.columnComment */ |
| | | @TableId(value = "id", type = IdType.AUTO) |
| | | private Integer id; |
| | | |
| | | /** 门店id */ |
| | | @Excel(name = "门店id") |
| | | private Integer shopId; |
| | | |
| | | /** 用户id */ |
| | | @Excel(name = "用户id") |
| | | private Integer userId; |
| | | |
| | | public void setId(Integer id) |
| | | { |
| | | this.id = id; |
| | | } |
| | | |
| | | public Integer getId() |
| | | { |
| | | return id; |
| | | } |
| | | public void setShopId(Integer shopId) |
| | | { |
| | | this.shopId = shopId; |
| | | } |
| | | |
| | | public Integer getShopId() |
| | | { |
| | | return shopId; |
| | | } |
| | | public void setUserId(Integer userId) |
| | | { |
| | | this.userId = userId; |
| | | } |
| | | |
| | | public Integer getUserId() |
| | | { |
| | | return userId; |
| | | } |
| | | |
| | | @Override |
| | | public String toString() { |
| | | return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) |
| | | .append("id", getId()) |
| | | .append("shopId", getShopId()) |
| | | .append("userId", getUserId()) |
| | | .toString(); |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.management.api.model; |
| | | |
| | | import com.baomidou.mybatisplus.annotation.IdType; |
| | | import com.baomidou.mybatisplus.annotation.TableId; |
| | | import org.apache.commons.lang3.builder.ToStringBuilder; |
| | | import org.apache.commons.lang3.builder.ToStringStyle; |
| | | import com.ruoyi.common.core.annotation.Excel; |
| | | import com.ruoyi.common.core.web.domain.BaseEntity; |
| | | |
| | | /** |
| | | * 客户(公司)-用户关联对象 t_company_to_user |
| | | * |
| | | * @author xiaochen |
| | | * @date 2023-06-07 |
| | | */ |
| | | public class TCompanyToUser |
| | | { |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | /** $column.columnComment */ |
| | | @TableId(value = "id", type = IdType.AUTO) |
| | | private Integer id; |
| | | |
| | | /** 公司id */ |
| | | @Excel(name = "公司id") |
| | | private Integer companyId; |
| | | |
| | | /** 用户id */ |
| | | @Excel(name = "用户id") |
| | | private Integer userId; |
| | | |
| | | public void setId(Integer id) |
| | | { |
| | | this.id = id; |
| | | } |
| | | |
| | | public Integer getId() |
| | | { |
| | | return id; |
| | | } |
| | | public void setCompanyId(Integer companyId) |
| | | { |
| | | this.companyId = companyId; |
| | | } |
| | | |
| | | public Integer getCompanyId() |
| | | { |
| | | return companyId; |
| | | } |
| | | public void setUserId(Integer userId) |
| | | { |
| | | this.userId = userId; |
| | | } |
| | | |
| | | public Integer getUserId() |
| | | { |
| | | return userId; |
| | | } |
| | | |
| | | @Override |
| | | public String toString() { |
| | | return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) |
| | | .append("id", getId()) |
| | | .append("companyId", getCompanyId()) |
| | | .append("userId", getUserId()) |
| | | .toString(); |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.management.api.model; |
| | | |
| | | import com.baomidou.mybatisplus.annotation.IdType; |
| | | import com.baomidou.mybatisplus.annotation.TableId; |
| | | import com.ruoyi.common.core.web.domain.BaseModel; |
| | | import lombok.Data; |
| | | import org.apache.commons.lang3.builder.ToStringBuilder; |
| | | import org.apache.commons.lang3.builder.ToStringStyle; |
| | | import com.ruoyi.common.core.annotation.Excel; |
| | | import com.ruoyi.common.core.web.domain.BaseEntity; |
| | | |
| | | /** |
| | | * 系统规则配置对象 t_system_config |
| | | * |
| | | * @author xiaochen |
| | | * @date 2023-06-07 |
| | | */ |
| | | @Data |
| | | public class TSystemConfig |
| | | { |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | /** $column.columnComment */ |
| | | @TableId(value = "id", type = IdType.AUTO) |
| | | private Integer id; |
| | | |
| | | /** 类型 1保养规则 */ |
| | | @Excel(name = "公司id") |
| | | private Integer companyId; |
| | | |
| | | /** 类型 1保养规则 */ |
| | | @Excel(name = "类型 1保养规则") |
| | | private Integer type; |
| | | |
| | | /** 规则内容 */ |
| | | @Excel(name = "规则内容") |
| | | private String content; |
| | | |
| | | public void setId(Integer id) |
| | | { |
| | | this.id = id; |
| | | } |
| | | |
| | | public Integer getId() |
| | | { |
| | | return id; |
| | | } |
| | | public void setType(Integer type) |
| | | { |
| | | this.type = type; |
| | | } |
| | | |
| | | public Integer getType() |
| | | { |
| | | return type; |
| | | } |
| | | public void setContent(String content) |
| | | { |
| | | this.content = content; |
| | | } |
| | | |
| | | public String getContent() |
| | | { |
| | | return content; |
| | | } |
| | | |
| | | @Override |
| | | public String toString() { |
| | | return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) |
| | | .append("id", getId()) |
| | | .append("type", getType()) |
| | | .append("content", getContent()) |
| | | .toString(); |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.management.api.model; |
| | | |
| | | import com.baomidou.mybatisplus.annotation.IdType; |
| | | import com.baomidou.mybatisplus.annotation.TableId; |
| | | import com.fasterxml.jackson.annotation.JsonFormat; |
| | | import com.ruoyi.common.core.annotation.Excel; |
| | | import com.ruoyi.common.core.web.domain.BaseModel; |
| | | import org.apache.commons.lang3.builder.ToStringBuilder; |
| | | import org.apache.commons.lang3.builder.ToStringStyle; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.util.Date; |
| | | |
| | | /** |
| | | * 违章管理对象 t_violation_manage |
| | | * |
| | | * @author xiaochen |
| | | * @date 2023-06-07 |
| | | */ |
| | | public class TViolationManage extends BaseModel |
| | | { |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | /** $column.columnComment */ |
| | | @TableId(value = "id", type = IdType.AUTO) |
| | | private Integer id; |
| | | |
| | | /** 车辆id */ |
| | | @Excel(name = "车辆id") |
| | | private Integer carId; |
| | | |
| | | /** 司机id */ |
| | | @Excel(name = "司机id") |
| | | private Integer driverId; |
| | | |
| | | /** 承租人 */ |
| | | @Excel(name = "承租人") |
| | | private String driverName; |
| | | |
| | | /** 承租人手机号 */ |
| | | @Excel(name = "承租人手机号") |
| | | private String driverPhone; |
| | | |
| | | /** 违章时间 */ |
| | | @JsonFormat(pattern = "yyyy-MM-dd") |
| | | @Excel(name = "违章时间", width = 30, dateFormat = "yyyy-MM-dd") |
| | | private Date violationTime; |
| | | |
| | | /** 违章地点 */ |
| | | @Excel(name = "违章地点") |
| | | private String violationAddress; |
| | | |
| | | /** 违章行为 */ |
| | | @Excel(name = "违章行为") |
| | | private String violationBehavior; |
| | | |
| | | /** 是否处理 1是 0否 */ |
| | | @Excel(name = "是否处理 1是 0否") |
| | | private Integer ifHandle; |
| | | |
| | | /** 处理时间 */ |
| | | @JsonFormat(pattern = "yyyy-MM-dd") |
| | | @Excel(name = "处理时间", width = 30, dateFormat = "yyyy-MM-dd") |
| | | private Date handleTime; |
| | | |
| | | /** 是否交款 1是 0否 */ |
| | | @Excel(name = "是否交款 1是 0否") |
| | | private Integer ifPayment; |
| | | |
| | | /** 采集单位 */ |
| | | @Excel(name = "采集单位") |
| | | private String collectionUnit; |
| | | |
| | | /** 违章罚款 */ |
| | | @Excel(name = "违章罚款") |
| | | private BigDecimal violationFines; |
| | | |
| | | /** 违章扣分 */ |
| | | @Excel(name = "违章扣分") |
| | | private Integer violationDeductPoints; |
| | | |
| | | /** 更新时间 */ |
| | | @JsonFormat(pattern = "yyyy-MM-dd") |
| | | @Excel(name = "更新时间", width = 30, dateFormat = "yyyy-MM-dd") |
| | | private Date renewTime; |
| | | |
| | | /** 违章图片 */ |
| | | @Excel(name = "违章图片") |
| | | private String violationPicture; |
| | | |
| | | private BigDecimal overMoney; |
| | | |
| | | |
| | | public BigDecimal getOverMoney() { |
| | | return overMoney; |
| | | } |
| | | |
| | | public void setOverMoney(BigDecimal overMoney) { |
| | | this.overMoney = overMoney; |
| | | } |
| | | |
| | | public void setId(Integer id) |
| | | { |
| | | this.id = id; |
| | | } |
| | | |
| | | public Integer getId() |
| | | { |
| | | return id; |
| | | } |
| | | public void setCarId(Integer carId) |
| | | { |
| | | this.carId = carId; |
| | | } |
| | | |
| | | public Integer getCarId() |
| | | { |
| | | return carId; |
| | | } |
| | | public void setDriverId(Integer driverId) |
| | | { |
| | | this.driverId = driverId; |
| | | } |
| | | |
| | | public Integer getDriverId() |
| | | { |
| | | return driverId; |
| | | } |
| | | public void setDriverName(String driverName) |
| | | { |
| | | this.driverName = driverName; |
| | | } |
| | | |
| | | public String getDriverName() |
| | | { |
| | | return driverName; |
| | | } |
| | | public void setDriverPhone(String driverPhone) |
| | | { |
| | | this.driverPhone = driverPhone; |
| | | } |
| | | |
| | | public String getDriverPhone() |
| | | { |
| | | return driverPhone; |
| | | } |
| | | public void setViolationTime(Date violationTime) |
| | | { |
| | | this.violationTime = violationTime; |
| | | } |
| | | |
| | | public Date getViolationTime() |
| | | { |
| | | return violationTime; |
| | | } |
| | | public void setViolationAddress(String violationAddress) |
| | | { |
| | | this.violationAddress = violationAddress; |
| | | } |
| | | |
| | | public String getViolationAddress() |
| | | { |
| | | return violationAddress; |
| | | } |
| | | public void setViolationBehavior(String violationBehavior) |
| | | { |
| | | this.violationBehavior = violationBehavior; |
| | | } |
| | | |
| | | public String getViolationBehavior() |
| | | { |
| | | return violationBehavior; |
| | | } |
| | | public void setIfHandle(Integer ifHandle) |
| | | { |
| | | this.ifHandle = ifHandle; |
| | | } |
| | | |
| | | public Integer getIfHandle() |
| | | { |
| | | return ifHandle; |
| | | } |
| | | public void setHandleTime(Date handleTime) |
| | | { |
| | | this.handleTime = handleTime; |
| | | } |
| | | |
| | | public Date getHandleTime() |
| | | { |
| | | return handleTime; |
| | | } |
| | | public void setIfPayment(Integer ifPayment) |
| | | { |
| | | this.ifPayment = ifPayment; |
| | | } |
| | | |
| | | public Integer getIfPayment() |
| | | { |
| | | return ifPayment; |
| | | } |
| | | public void setCollectionUnit(String collectionUnit) |
| | | { |
| | | this.collectionUnit = collectionUnit; |
| | | } |
| | | |
| | | public String getCollectionUnit() |
| | | { |
| | | return collectionUnit; |
| | | } |
| | | public void setViolationFines(BigDecimal violationFines) |
| | | { |
| | | this.violationFines = violationFines; |
| | | } |
| | | |
| | | public BigDecimal getViolationFines() |
| | | { |
| | | return violationFines; |
| | | } |
| | | public void setViolationDeductPoints(Integer violationDeductPoints) |
| | | { |
| | | this.violationDeductPoints = violationDeductPoints; |
| | | } |
| | | |
| | | public Integer getViolationDeductPoints() |
| | | { |
| | | return violationDeductPoints; |
| | | } |
| | | public void setRenewTime(Date renewTime) |
| | | { |
| | | this.renewTime = renewTime; |
| | | } |
| | | |
| | | public Date getRenewTime() |
| | | { |
| | | return renewTime; |
| | | } |
| | | public void setViolationPicture(String violationPicture) |
| | | { |
| | | this.violationPicture = violationPicture; |
| | | } |
| | | |
| | | public String getViolationPicture() |
| | | { |
| | | return violationPicture; |
| | | } |
| | | |
| | | @Override |
| | | public String toString() { |
| | | return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) |
| | | .append("id", getId()) |
| | | .append("carId", getCarId()) |
| | | .append("driverId", getDriverId()) |
| | | .append("driverName", getDriverName()) |
| | | .append("driverPhone", getDriverPhone()) |
| | | .append("violationTime", getViolationTime()) |
| | | .append("violationAddress", getViolationAddress()) |
| | | .append("violationBehavior", getViolationBehavior()) |
| | | .append("ifHandle", getIfHandle()) |
| | | .append("handleTime", getHandleTime()) |
| | | .append("ifPayment", getIfPayment()) |
| | | .append("collectionUnit", getCollectionUnit()) |
| | | .append("violationFines", getViolationFines()) |
| | | .append("violationDeductPoints", getViolationDeductPoints()) |
| | | .append("renewTime", getRenewTime()) |
| | | .append("violationPicture", getViolationPicture()) |
| | | .append("createBy", getCreateBy()) |
| | | .append("updateBy", getUpdateBy()) |
| | | .append("createTime", getCreateTime()) |
| | | .append("updateTime", getUpdateTime()) |
| | | .append("disabled", getDisabled()) |
| | | .toString(); |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.management.api.model; |
| | | |
| | | import com.baomidou.mybatisplus.annotation.IdType; |
| | | import com.baomidou.mybatisplus.annotation.TableId; |
| | | import com.fasterxml.jackson.annotation.JsonFormat; |
| | | import com.ruoyi.common.core.annotation.Excel; |
| | | import com.ruoyi.common.core.web.domain.BaseModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import org.apache.commons.lang3.builder.ToStringBuilder; |
| | | import org.apache.commons.lang3.builder.ToStringStyle; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.util.Date; |
| | | |
| | | /** |
| | | * 违章管理对象 t_violation_manage |
| | | * |
| | | * @author xiaochen |
| | | * @date 2023-06-07 |
| | | */ |
| | | public class TViolationManageInfo extends BaseModel |
| | | { |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | /** $column.columnComment */ |
| | | @TableId(value = "id", type = IdType.AUTO) |
| | | private Integer id; |
| | | |
| | | /** 车辆id */ |
| | | @Excel(name = "车辆id") |
| | | private Integer carId; |
| | | |
| | | /** 司机id */ |
| | | @Excel(name = "司机id") |
| | | private Integer driverId; |
| | | |
| | | /** 承租人 */ |
| | | @Excel(name = "承租人") |
| | | @ApiModelProperty("承租人") |
| | | private String driverName; |
| | | |
| | | /** 承租人手机号 */ |
| | | @Excel(name = "承租人手机号") |
| | | @ApiModelProperty("承租人手机号") |
| | | private String driverPhone; |
| | | |
| | | /** 违章时间 */ |
| | | @ApiModelProperty("违章时间") |
| | | @JsonFormat(pattern = "yyyy-MM-dd HH:mm") |
| | | @Excel(name = "违章时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm") |
| | | private Date violationTime; |
| | | |
| | | /** 违章地点 */ |
| | | @Excel(name = "违章地点") |
| | | @ApiModelProperty("违章地点") |
| | | private String violationAddress; |
| | | |
| | | /** 违章行为 */ |
| | | @ApiModelProperty("违章行为") |
| | | @Excel(name = "违章行为") |
| | | private String violationBehavior; |
| | | |
| | | /** 是否处理 1是 0否 */ |
| | | @ApiModelProperty("是否处理 1是 0否") |
| | | @Excel(name = "是否处理 1是 0否") |
| | | private Integer ifHandle; |
| | | |
| | | /** 处理时间 */ |
| | | @ApiModelProperty("处理时间") |
| | | @JsonFormat(pattern = "yyyy-MM-dd") |
| | | @Excel(name = "处理时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm") |
| | | private Date handleTime; |
| | | |
| | | /** 是否交款 1是 0否 */ |
| | | @ApiModelProperty("是否交款 1是 0否") |
| | | @Excel(name = "是否交款 1是 0否") |
| | | private Integer ifPayment; |
| | | |
| | | /** 采集单位 */ |
| | | @Excel(name = "采集单位") |
| | | @ApiModelProperty("采集单位") |
| | | private String collectionUnit; |
| | | |
| | | /** 违章罚款 */ |
| | | @Excel(name = "违章罚款") |
| | | @ApiModelProperty("违章罚款") |
| | | private BigDecimal violationFines; |
| | | |
| | | /** 违章扣分 */ |
| | | @Excel(name = "违章扣分") |
| | | @ApiModelProperty("违章扣分") |
| | | private Integer violationDeductPoints; |
| | | |
| | | /** 更新时间 */ |
| | | @JsonFormat(pattern = "yyyy-MM-dd") |
| | | @ApiModelProperty("更新时间") |
| | | @Excel(name = "更新时间", width = 30, dateFormat = "yyyy-MM-dd") |
| | | private Date renewTime; |
| | | |
| | | /** 违章图片 */ |
| | | @Excel(name = "违章图片") |
| | | @ApiModelProperty("违章图片") |
| | | private String violationPicture; |
| | | @ApiModelProperty("滞纳金") |
| | | private BigDecimal overMoney; |
| | | @ApiModelProperty("车架号") |
| | | private String carVinNumber; |
| | | |
| | | |
| | | |
| | | public String getCarVinNumber() { |
| | | return carVinNumber; |
| | | } |
| | | |
| | | public void setCarVinNumber(String carVinNumber) { |
| | | this.carVinNumber = carVinNumber; |
| | | } |
| | | |
| | | public BigDecimal getOverMoney() { |
| | | return overMoney; |
| | | } |
| | | |
| | | public void setOverMoney(BigDecimal overMoney) { |
| | | this.overMoney = overMoney; |
| | | } |
| | | |
| | | public void setId(Integer id) |
| | | { |
| | | this.id = id; |
| | | } |
| | | |
| | | public Integer getId() |
| | | { |
| | | return id; |
| | | } |
| | | public void setCarId(Integer carId) |
| | | { |
| | | this.carId = carId; |
| | | } |
| | | |
| | | public Integer getCarId() |
| | | { |
| | | return carId; |
| | | } |
| | | public void setDriverId(Integer driverId) |
| | | { |
| | | this.driverId = driverId; |
| | | } |
| | | |
| | | public Integer getDriverId() |
| | | { |
| | | return driverId; |
| | | } |
| | | public void setDriverName(String driverName) |
| | | { |
| | | this.driverName = driverName; |
| | | } |
| | | |
| | | public String getDriverName() |
| | | { |
| | | return driverName; |
| | | } |
| | | public void setDriverPhone(String driverPhone) |
| | | { |
| | | this.driverPhone = driverPhone; |
| | | } |
| | | |
| | | public String getDriverPhone() |
| | | { |
| | | return driverPhone; |
| | | } |
| | | public void setViolationTime(Date violationTime) |
| | | { |
| | | this.violationTime = violationTime; |
| | | } |
| | | |
| | | public Date getViolationTime() |
| | | { |
| | | return violationTime; |
| | | } |
| | | public void setViolationAddress(String violationAddress) |
| | | { |
| | | this.violationAddress = violationAddress; |
| | | } |
| | | |
| | | public String getViolationAddress() |
| | | { |
| | | return violationAddress; |
| | | } |
| | | public void setViolationBehavior(String violationBehavior) |
| | | { |
| | | this.violationBehavior = violationBehavior; |
| | | } |
| | | |
| | | public String getViolationBehavior() |
| | | { |
| | | return violationBehavior; |
| | | } |
| | | public void setIfHandle(Integer ifHandle) |
| | | { |
| | | this.ifHandle = ifHandle; |
| | | } |
| | | |
| | | public Integer getIfHandle() |
| | | { |
| | | return ifHandle; |
| | | } |
| | | public void setHandleTime(Date handleTime) |
| | | { |
| | | this.handleTime = handleTime; |
| | | } |
| | | |
| | | public Date getHandleTime() |
| | | { |
| | | return handleTime; |
| | | } |
| | | public void setIfPayment(Integer ifPayment) |
| | | { |
| | | this.ifPayment = ifPayment; |
| | | } |
| | | |
| | | public Integer getIfPayment() |
| | | { |
| | | return ifPayment; |
| | | } |
| | | public void setCollectionUnit(String collectionUnit) |
| | | { |
| | | this.collectionUnit = collectionUnit; |
| | | } |
| | | |
| | | public String getCollectionUnit() |
| | | { |
| | | return collectionUnit; |
| | | } |
| | | public void setViolationFines(BigDecimal violationFines) |
| | | { |
| | | this.violationFines = violationFines; |
| | | } |
| | | |
| | | public BigDecimal getViolationFines() |
| | | { |
| | | return violationFines; |
| | | } |
| | | public void setViolationDeductPoints(Integer violationDeductPoints) |
| | | { |
| | | this.violationDeductPoints = violationDeductPoints; |
| | | } |
| | | |
| | | public Integer getViolationDeductPoints() |
| | | { |
| | | return violationDeductPoints; |
| | | } |
| | | public void setRenewTime(Date renewTime) |
| | | { |
| | | this.renewTime = renewTime; |
| | | } |
| | | |
| | | public Date getRenewTime() |
| | | { |
| | | return renewTime; |
| | | } |
| | | public void setViolationPicture(String violationPicture) |
| | | { |
| | | this.violationPicture = violationPicture; |
| | | } |
| | | |
| | | public String getViolationPicture() |
| | | { |
| | | return violationPicture; |
| | | } |
| | | |
| | | @Override |
| | | public String toString() { |
| | | return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) |
| | | .append("id", getId()) |
| | | .append("carId", getCarId()) |
| | | .append("driverId", getDriverId()) |
| | | .append("driverName", getDriverName()) |
| | | .append("driverPhone", getDriverPhone()) |
| | | .append("violationTime", getViolationTime()) |
| | | .append("violationAddress", getViolationAddress()) |
| | | .append("violationBehavior", getViolationBehavior()) |
| | | .append("ifHandle", getIfHandle()) |
| | | .append("handleTime", getHandleTime()) |
| | | .append("ifPayment", getIfPayment()) |
| | | .append("collectionUnit", getCollectionUnit()) |
| | | .append("violationFines", getViolationFines()) |
| | | .append("violationDeductPoints", getViolationDeductPoints()) |
| | | .append("renewTime", getRenewTime()) |
| | | .append("violationPicture", getViolationPicture()) |
| | | .append("createBy", getCreateBy()) |
| | | .append("updateBy", getUpdateBy()) |
| | | .append("createTime", getCreateTime()) |
| | | .append("updateTime", getUpdateTime()) |
| | | .append("disabled", getDisabled()) |
| | | .toString(); |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.management.api.query; |
| | | |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | import java.io.Serializable; |
| | | |
| | | @Data |
| | | @ApiModel(value = "合同详情查询Query") |
| | | public class CarInfoQuery implements Serializable { |
| | | |
| | | @ApiModelProperty(value = "公司id",required = true) |
| | | private Integer companyId; |
| | | |
| | | @ApiModelProperty(value = "合同id",required = true) |
| | | private Integer contractId; |
| | | |
| | | @ApiModelProperty(value = "类型,前端忽略") |
| | | private Integer type; |
| | | |
| | | } |
New file |
| | |
| | | package com.ruoyi.management.api.query; |
| | | |
| | | import com.ruoyi.common.core.web.page.BasePage; |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | @Data |
| | | @ApiModel(value = "通过门店名称和公司名称Query") |
| | | public class ShopByShopNameAndCompanyNameQuery extends BasePage { |
| | | @ApiModelProperty("门店名称") |
| | | private String shopName; |
| | | @ApiModelProperty("公司名称") |
| | | private String companyName; |
| | | } |
New file |
| | |
| | | package com.ruoyi.management.api.query; |
| | | |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | import java.io.Serializable; |
| | | import java.util.List; |
| | | |
| | | @Data |
| | | @ApiModel(value = "查询车辆违章数量Query") |
| | | public class VehicleViolationCountQuery implements Serializable { |
| | | |
| | | @ApiModelProperty(value = "车辆id集合") |
| | | private List<Integer> carIds; |
| | | |
| | | @ApiModelProperty(value = "状态") |
| | | private Integer state; |
| | | |
| | | } |
New file |
| | |
| | | package com.ruoyi.management.api.query; |
| | | |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | import java.io.Serializable; |
| | | import java.util.Date; |
| | | |
| | | @Data |
| | | public class ViolationByCarIdAndTimeQuery implements Serializable { |
| | | |
| | | @ApiModelProperty(value = "车辆id") |
| | | private Integer carId; |
| | | |
| | | @ApiModelProperty(value = "开始时间") |
| | | private Date startTime; |
| | | |
| | | @ApiModelProperty(value = "结束时间") |
| | | private Date endTime; |
| | | |
| | | } |
New file |
| | |
| | | package com.ruoyi.management.api.vo; |
| | | |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | import java.io.Serializable; |
| | | |
| | | @Data |
| | | public class ApproveConfigClientVO implements Serializable { |
| | | private Integer id; |
| | | |
| | | /** 公司id */ |
| | | @ApiModelProperty(value = "公司id") |
| | | private Integer companyId; |
| | | |
| | | /** 审批类型 1=交车审批、2=续约审批、3=退车审批 */ |
| | | @ApiModelProperty(value = "审批类型 1=交车审批、2=续约审批、3=退车审批") |
| | | private Integer approveType; |
| | | |
| | | /** 状态 1开启 0关闭 */ |
| | | @ApiModelProperty(value = "状态 1开启 0关闭") |
| | | private Integer state; |
| | | |
| | | /** 审批节点 */ |
| | | @ApiModelProperty(value = "审批节点,逗号分隔") |
| | | private String approveNode; |
| | | |
| | | /** 审批节点id(逗号分隔) */ |
| | | @ApiModelProperty(value = "审批节点id,逗号分隔") |
| | | private String approveNodeId; |
| | | |
| | | } |
New file |
| | |
| | | package com.ruoyi.management.api.vo; |
| | | |
| | | import com.baomidou.mybatisplus.annotation.IdType; |
| | | import com.baomidou.mybatisplus.annotation.TableId; |
| | | import com.ruoyi.common.core.annotation.Excel; |
| | | import com.ruoyi.common.core.web.domain.BaseModel; |
| | | import lombok.Data; |
| | | import lombok.ToString; |
| | | import org.apache.commons.lang3.builder.ToStringBuilder; |
| | | import org.apache.commons.lang3.builder.ToStringStyle; |
| | | |
| | | /** |
| | | * 门店电子围栏对象 t_company_shop_electronic |
| | | * |
| | | * @author xiaochen |
| | | * @date 2023-06-07 |
| | | */ |
| | | @Data |
| | | @ToString |
| | | public class TCompanyShopElectronicClientVO |
| | | { |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | /** $column.columnComment */ |
| | | @TableId(value = "id", type = IdType.AUTO) |
| | | private Integer id; |
| | | |
| | | /** 电子围栏名称 */ |
| | | @Excel(name = "电子围栏名称") |
| | | private String electronicFenceName; |
| | | |
| | | /** 电子围栏信息 */ |
| | | @Excel(name = "电子围栏信息") |
| | | private String content; |
| | | |
| | | /** 省份 */ |
| | | @Excel(name = "省份") |
| | | private String province; |
| | | |
| | | /** 省份编码 */ |
| | | @Excel(name = "省份编码") |
| | | private String provinceCode; |
| | | |
| | | /** 城市 */ |
| | | @Excel(name = "城市") |
| | | private String city; |
| | | |
| | | /** 城市编码 */ |
| | | @Excel(name = "城市编码") |
| | | private String cityCode; |
| | | |
| | | /** 行政区域 */ |
| | | @Excel(name = "行政区域") |
| | | private String district; |
| | | |
| | | /** 行政区域编码 */ |
| | | @Excel(name = "行政区域编码") |
| | | private String districtCode; |
| | | |
| | | /** 地址名称 */ |
| | | @Excel(name = "地址名称") |
| | | private String address; |
| | | |
| | | /** 围栏类型 1=全部 2=多边形围栏 3=行政区围栏 */ |
| | | @Excel(name = "围栏类型 1=全部 2=多边形围栏 3=行政区围栏") |
| | | private Integer fenceType; |
| | | |
| | | /** 报警类型 1=驶出报警 2=驶入报警 */ |
| | | @Excel(name = "报警类型 1=驶出报警 2=驶入报警") |
| | | private Integer policeType; |
| | | |
| | | /** 受控车辆 1= 待上户、2=待办证、3=待整备、4=待租、5=已租,逗号分隔 */ |
| | | @Excel(name = "受控车辆 1= 待上户、2=待办证、3=待整备、4=待租、5=已租,逗号分隔") |
| | | private String controlCar; |
| | | |
| | | } |
New file |
| | |
| | | package com.ruoyi.management.api.vo; |
| | | |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | import java.io.Serializable; |
| | | |
| | | @Data |
| | | @ApiModel(value = "通过名称查询修理厂列表VO") |
| | | public class TRepairShopByNameVO implements Serializable { |
| | | |
| | | @ApiModelProperty(value = "修理厂id") |
| | | private Integer id; |
| | | |
| | | @ApiModelProperty(value = "公司id") |
| | | private Integer companyId; |
| | | |
| | | @ApiModelProperty(value = "修理厂名称") |
| | | private String repairShopName; |
| | | |
| | | } |
New file |
| | |
| | | package com.ruoyi.management.api.vo; |
| | | |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | import java.io.Serializable; |
| | | |
| | | @Data |
| | | public class TRepairShopClientVO implements Serializable { |
| | | private Integer id; |
| | | |
| | | /** 公司id */ |
| | | @ApiModelProperty(value = "公司id") |
| | | private Integer companyId; |
| | | /** 修理厂名称 */ |
| | | @ApiModelProperty(value = "修理厂名称") |
| | | private String repairShopName; |
| | | |
| | | } |
New file |
| | |
| | | com.ruoyi.management.api.factory.TCompanyShopFallbackFactory |
| | | com.ruoyi.management.api.factory.ViolationShopFallbackFactory |
| | | com.ruoyi.management.api.factory.TCompanyShopToUserFallbackFactory |
| | | com.ruoyi.management.api.factory.TApproveConfigFallbackFactory |
| | | com.ruoyi.management.api.factory.TCompanyRepairShopFallbackFactory |
| | | com.ruoyi.management.api.factory.TRepairShopToUserFallbackFactory |
| | | com.ruoyi.management.api.factory.TRepairShopFallbackFactory |
| | | com.ruoyi.management.api.factory.TCompanyToUserFallbackFactory |
New file |
| | |
| | | <?xml version="1.0" encoding="UTF-8"?> |
| | | <project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
| | | xmlns="http://maven.apache.org/POM/4.0.0" |
| | | xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> |
| | | <parent> |
| | | <groupId>com.ruoyi</groupId> |
| | | <artifactId>ruoyi-api</artifactId> |
| | | <version>3.6.2</version> |
| | | </parent> |
| | | <modelVersion>4.0.0</modelVersion> |
| | | |
| | | <artifactId>ruoyi-api-parent</artifactId> |
| | | |
| | | <description> |
| | | ruoyi-api-parent家长端模块 |
| | | </description> |
| | | |
| | | <dependencies> |
| | | |
| | | <!-- RuoYi Common Core--> |
| | | <dependency> |
| | | <groupId>com.ruoyi</groupId> |
| | | <artifactId>ruoyi-common-core</artifactId> |
| | | <exclusions> |
| | | <exclusion> |
| | | <groupId>com.github.pagehelper</groupId> |
| | | <artifactId>pagehelper-spring-boot-starter</artifactId> |
| | | </exclusion> |
| | | </exclusions> |
| | | </dependency> |
| | | |
| | | </dependencies> |
| | | |
| | | </project> |
New file |
| | |
| | | package com.ruoyi.system.api; |
| | | |
| | | import org.springframework.cloud.openfeign.FeignClient; |
| | | import org.springframework.http.MediaType; |
| | | import org.springframework.web.bind.annotation.PostMapping; |
| | | import org.springframework.web.bind.annotation.RequestPart; |
| | | import org.springframework.web.multipart.MultipartFile; |
| | | import com.ruoyi.common.core.constant.ServiceNameConstants; |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.system.api.domain.SysFile; |
| | | import com.ruoyi.system.api.factory.RemoteFileFallbackFactory; |
| | | |
| | | /** |
| | | * 文件服务 |
| | | * |
| | | * @author ruoyi |
| | | */ |
| | | @FeignClient(contextId = "remoteFileService", value = ServiceNameConstants.FILE_SERVICE, fallbackFactory = RemoteFileFallbackFactory.class) |
| | | public interface RemoteFileService |
| | | { |
| | | /** |
| | | * 上传文件 |
| | | * |
| | | * @param file 文件信息 |
| | | * @return 结果 |
| | | */ |
| | | @PostMapping(value = "/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) |
| | | public R<SysFile> upload(@RequestPart(value = "file") MultipartFile file); |
| | | } |
New file |
| | |
| | | package com.ruoyi.system.api; |
| | | |
| | | import org.springframework.cloud.openfeign.FeignClient; |
| | | import org.springframework.web.bind.annotation.PostMapping; |
| | | import org.springframework.web.bind.annotation.RequestBody; |
| | | import org.springframework.web.bind.annotation.RequestHeader; |
| | | import com.ruoyi.common.core.constant.SecurityConstants; |
| | | import com.ruoyi.common.core.constant.ServiceNameConstants; |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.system.api.domain.SysLogininfor; |
| | | import com.ruoyi.system.api.domain.SysOperLog; |
| | | import com.ruoyi.system.api.factory.RemoteLogFallbackFactory; |
| | | |
| | | /** |
| | | * 日志服务 |
| | | * |
| | | * @author ruoyi |
| | | */ |
| | | @FeignClient(contextId = "remoteLogService", value = ServiceNameConstants.SYSTEM_SERVICE, fallbackFactory = RemoteLogFallbackFactory.class) |
| | | public interface RemoteLogService |
| | | { |
| | | /** |
| | | * 保存系统日志 |
| | | * |
| | | * @param sysOperLog 日志实体 |
| | | * @param source 请求来源 |
| | | * @return 结果 |
| | | */ |
| | | @PostMapping("/operlog") |
| | | public R<Boolean> saveLog(@RequestBody SysOperLog sysOperLog, @RequestHeader(SecurityConstants.FROM_SOURCE) String source) throws Exception; |
| | | |
| | | /** |
| | | * 保存访问记录 |
| | | * |
| | | * @param sysLogininfor 访问实体 |
| | | * @param source 请求来源 |
| | | * @return 结果 |
| | | */ |
| | | @PostMapping("/logininfor") |
| | | public R<Boolean> saveLogininfor(@RequestBody SysLogininfor sysLogininfor, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); |
| | | } |
New file |
| | |
| | | package com.ruoyi.system.api; |
| | | |
| | | import org.springframework.cloud.openfeign.FeignClient; |
| | | import org.springframework.web.bind.annotation.GetMapping; |
| | | import org.springframework.web.bind.annotation.PathVariable; |
| | | import org.springframework.web.bind.annotation.PostMapping; |
| | | import org.springframework.web.bind.annotation.RequestBody; |
| | | import org.springframework.web.bind.annotation.RequestHeader; |
| | | import com.ruoyi.common.core.constant.SecurityConstants; |
| | | import com.ruoyi.common.core.constant.ServiceNameConstants; |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.system.api.domain.SysUser; |
| | | import com.ruoyi.system.api.factory.RemoteUserFallbackFactory; |
| | | import com.ruoyi.system.api.model.LoginUser; |
| | | |
| | | /** |
| | | * 用户服务 |
| | | * |
| | | * @author ruoyi |
| | | */ |
| | | @FeignClient(contextId = "remoteUserService", value = ServiceNameConstants.SYSTEM_SERVICE, fallbackFactory = RemoteUserFallbackFactory.class) |
| | | public interface RemoteUserService |
| | | { |
| | | /** |
| | | * 通过用户名查询用户信息 |
| | | * |
| | | * @param username 用户名 |
| | | * @param source 请求来源 |
| | | * @return 结果 |
| | | */ |
| | | @GetMapping("/user/info/{username}") |
| | | public R<LoginUser> getUserInfo(@PathVariable("username") String username, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); |
| | | |
| | | /** |
| | | * 注册用户信息 |
| | | * |
| | | * @param sysUser 用户信息 |
| | | * @param source 请求来源 |
| | | * @return 结果 |
| | | */ |
| | | @PostMapping("/user/register") |
| | | public R<Boolean> registerUserInfo(@RequestBody SysUser sysUser, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); |
| | | } |
New file |
| | |
| | | package com.ruoyi.system.api.config; |
| | | |
| | | import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.apache.ibatis.reflection.MetaObject; |
| | | import org.springframework.context.annotation.Configuration; |
| | | |
| | | /** |
| | | * @author xiaochen |
| | | * @ClassName DataUpdateInterceptor |
| | | * @Description 数据更新操作处理 |
| | | * @date 2021-12-15 |
| | | * <p> |
| | | * 注意,之前在此处注入了 JwtTokenUtils |
| | | * <p> |
| | | * 造成spring循环依赖,项目支棱不起来 |
| | | */ |
| | | @Slf4j |
| | | @Configuration |
| | | public class DataUpdateHandlerConfig implements MetaObjectHandler { |
| | | |
| | | @Override |
| | | public void insertFill(MetaObject metaObject) { |
| | | |
| | | } |
| | | |
| | | @Override |
| | | public void updateFill(MetaObject metaObject) { |
| | | |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.system.api.config; |
| | | |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.boot.web.client.RestTemplateBuilder; |
| | | import org.springframework.context.annotation.Bean; |
| | | import org.springframework.context.annotation.Configuration; |
| | | import org.springframework.web.client.RestTemplate; |
| | | |
| | | /** |
| | | * http请求工具配置 |
| | | * |
| | | * @author: KingKong |
| | | * @create: 2018-11-14 10:47 |
| | | **/ |
| | | @Configuration |
| | | public class HttpConfig { |
| | | |
| | | @Autowired |
| | | private RestTemplateBuilder builder; |
| | | |
| | | @Bean |
| | | public RestTemplate restTemplate() { |
| | | return builder.build(); |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.system.api.config; |
| | | |
| | | import com.baomidou.mybatisplus.annotation.DbType; |
| | | import com.baomidou.mybatisplus.core.config.GlobalConfig; |
| | | import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; |
| | | import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.context.annotation.Bean; |
| | | import org.springframework.context.annotation.Configuration; |
| | | |
| | | /** |
| | | * @author xiaochen |
| | | * @ClassName MybatisPlusConfig |
| | | * @Description MybatisPlus相关配置 |
| | | * @date 2020-09-22 11:22、 |
| | | * 直接以实现类作为bean的注入(有事务管理的类) |
| | | * @EnableTransactionManagement(proxyTargetClass = true) |
| | | */ |
| | | @Configuration |
| | | public class MybatisPlusConfig { |
| | | private final DataUpdateHandlerConfig dataUpdateHandler; |
| | | |
| | | @Autowired |
| | | public MybatisPlusConfig(DataUpdateHandlerConfig dataUpdateHandler) { |
| | | this.dataUpdateHandler = dataUpdateHandler; |
| | | } |
| | | |
| | | /** |
| | | * 新的分页插件,一缓和二缓遵循mybatis的规则,需要设置 MybatisConfiguration#useDeprecatedExecutor = false 避免缓存出现问题 |
| | | */ |
| | | @Bean |
| | | public MybatisPlusInterceptor mybatisPlusInterceptor() { |
| | | MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); |
| | | interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); |
| | | return interceptor; |
| | | } |
| | | |
| | | /** |
| | | * 自动填充功能 |
| | | * |
| | | * @return |
| | | */ |
| | | @Bean |
| | | public GlobalConfig globalConfig() { |
| | | GlobalConfig globalConfig = new GlobalConfig(); |
| | | globalConfig.setMetaObjectHandler(dataUpdateHandler); |
| | | return globalConfig; |
| | | } |
| | | |
| | | |
| | | } |
New file |
| | |
| | | package com.ruoyi.system.api.domain; |
| | | |
| | | import java.util.ArrayList; |
| | | import java.util.List; |
| | | import javax.validation.constraints.Email; |
| | | import javax.validation.constraints.Size; |
| | | import org.apache.commons.lang3.builder.ToStringBuilder; |
| | | import org.apache.commons.lang3.builder.ToStringStyle; |
| | | import com.ruoyi.common.core.web.domain.BaseEntity; |
| | | |
| | | /** |
| | | * 部门表 sys_dept |
| | | * |
| | | * @author ruoyi |
| | | */ |
| | | public class SysDept extends BaseEntity |
| | | { |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | /** 部门ID */ |
| | | private Long deptId; |
| | | |
| | | /** 父部门ID */ |
| | | private Long parentId; |
| | | |
| | | /** 祖级列表 */ |
| | | private String ancestors; |
| | | |
| | | /** 部门名称 */ |
| | | private String deptName; |
| | | |
| | | /** 显示顺序 */ |
| | | private Integer orderNum; |
| | | |
| | | /** 负责人 */ |
| | | private String leader; |
| | | |
| | | /** 联系电话 */ |
| | | private String phone; |
| | | |
| | | /** 邮箱 */ |
| | | private String email; |
| | | |
| | | /** 部门状态:0正常,1停用 */ |
| | | private String status; |
| | | |
| | | /** 删除标志(0代表存在 2代表删除) */ |
| | | private String delFlag; |
| | | |
| | | /** 父部门名称 */ |
| | | private String parentName; |
| | | |
| | | /** 子部门 */ |
| | | private List<SysDept> children = new ArrayList<SysDept>(); |
| | | |
| | | public Long getDeptId() |
| | | { |
| | | return deptId; |
| | | } |
| | | |
| | | public void setDeptId(Long deptId) |
| | | { |
| | | this.deptId = deptId; |
| | | } |
| | | |
| | | public Long getParentId() |
| | | { |
| | | return parentId; |
| | | } |
| | | |
| | | public void setParentId(Long parentId) |
| | | { |
| | | this.parentId = parentId; |
| | | } |
| | | |
| | | public String getAncestors() |
| | | { |
| | | return ancestors; |
| | | } |
| | | |
| | | public void setAncestors(String ancestors) |
| | | { |
| | | this.ancestors = ancestors; |
| | | } |
| | | |
| | | @Size(min = 0, max = 30, message = "部门名称长度不能超过30个字符") |
| | | public String getDeptName() |
| | | { |
| | | return deptName; |
| | | } |
| | | |
| | | public void setDeptName(String deptName) |
| | | { |
| | | this.deptName = deptName; |
| | | } |
| | | |
| | | public Integer getOrderNum() |
| | | { |
| | | return orderNum; |
| | | } |
| | | |
| | | public void setOrderNum(Integer orderNum) |
| | | { |
| | | this.orderNum = orderNum; |
| | | } |
| | | |
| | | public String getLeader() |
| | | { |
| | | return leader; |
| | | } |
| | | |
| | | public void setLeader(String leader) |
| | | { |
| | | this.leader = leader; |
| | | } |
| | | |
| | | @Size(min = 0, max = 11, message = "联系电话长度不能超过11个字符") |
| | | public String getPhone() |
| | | { |
| | | return phone; |
| | | } |
| | | |
| | | public void setPhone(String phone) |
| | | { |
| | | this.phone = phone; |
| | | } |
| | | |
| | | @Email(message = "邮箱格式不正确") |
| | | @Size(min = 0, max = 50, message = "邮箱长度不能超过50个字符") |
| | | public String getEmail() |
| | | { |
| | | return email; |
| | | } |
| | | |
| | | public void setEmail(String email) |
| | | { |
| | | this.email = email; |
| | | } |
| | | |
| | | public String getStatus() |
| | | { |
| | | return status; |
| | | } |
| | | |
| | | public void setStatus(String status) |
| | | { |
| | | this.status = status; |
| | | } |
| | | |
| | | public String getDelFlag() |
| | | { |
| | | return delFlag; |
| | | } |
| | | |
| | | public void setDelFlag(String delFlag) |
| | | { |
| | | this.delFlag = delFlag; |
| | | } |
| | | |
| | | public String getParentName() |
| | | { |
| | | return parentName; |
| | | } |
| | | |
| | | public void setParentName(String parentName) |
| | | { |
| | | this.parentName = parentName; |
| | | } |
| | | |
| | | public List<SysDept> getChildren() |
| | | { |
| | | return children; |
| | | } |
| | | |
| | | public void setChildren(List<SysDept> children) |
| | | { |
| | | this.children = children; |
| | | } |
| | | |
| | | @Override |
| | | public String toString() { |
| | | return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) |
| | | .append("deptId", getDeptId()) |
| | | .append("parentId", getParentId()) |
| | | .append("ancestors", getAncestors()) |
| | | .append("deptName", getDeptName()) |
| | | .append("orderNum", getOrderNum()) |
| | | .append("leader", getLeader()) |
| | | .append("phone", getPhone()) |
| | | .append("email", getEmail()) |
| | | .append("status", getStatus()) |
| | | .append("delFlag", getDelFlag()) |
| | | .append("createBy", getCreateBy()) |
| | | .append("createTime", getCreateTime()) |
| | | .append("updateBy", getUpdateBy()) |
| | | .append("updateTime", getUpdateTime()) |
| | | .toString(); |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.system.api.domain; |
| | | |
| | | import javax.validation.constraints.NotBlank; |
| | | import javax.validation.constraints.Size; |
| | | import org.apache.commons.lang3.builder.ToStringBuilder; |
| | | import org.apache.commons.lang3.builder.ToStringStyle; |
| | | import com.ruoyi.common.core.annotation.Excel; |
| | | import com.ruoyi.common.core.annotation.Excel.ColumnType; |
| | | import com.ruoyi.common.core.constant.UserConstants; |
| | | import com.ruoyi.common.core.web.domain.BaseEntity; |
| | | |
| | | /** |
| | | * 字典数据表 sys_dict_data |
| | | * |
| | | * @author ruoyi |
| | | */ |
| | | public class SysDictData extends BaseEntity |
| | | { |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | /** 字典编码 */ |
| | | @Excel(name = "字典编码", cellType = ColumnType.NUMERIC) |
| | | private Long dictCode; |
| | | |
| | | /** 字典排序 */ |
| | | @Excel(name = "字典排序", cellType = ColumnType.NUMERIC) |
| | | private Long dictSort; |
| | | |
| | | /** 字典标签 */ |
| | | @Excel(name = "字典标签") |
| | | private String dictLabel; |
| | | |
| | | /** 字典键值 */ |
| | | @Excel(name = "字典键值") |
| | | private String dictValue; |
| | | |
| | | /** 字典类型 */ |
| | | @Excel(name = "字典类型") |
| | | private String dictType; |
| | | |
| | | /** 样式属性(其他样式扩展) */ |
| | | private String cssClass; |
| | | |
| | | /** 表格字典样式 */ |
| | | private String listClass; |
| | | |
| | | /** 是否默认(Y是 N否) */ |
| | | @Excel(name = "是否默认", readConverterExp = "Y=是,N=否") |
| | | private String isDefault; |
| | | |
| | | /** 状态(0正常 1停用) */ |
| | | @Excel(name = "状态", readConverterExp = "0=正常,1=停用") |
| | | private String status; |
| | | |
| | | public Long getDictCode() |
| | | { |
| | | return dictCode; |
| | | } |
| | | |
| | | public void setDictCode(Long dictCode) |
| | | { |
| | | this.dictCode = dictCode; |
| | | } |
| | | |
| | | public Long getDictSort() |
| | | { |
| | | return dictSort; |
| | | } |
| | | |
| | | public void setDictSort(Long dictSort) |
| | | { |
| | | this.dictSort = dictSort; |
| | | } |
| | | |
| | | @NotBlank(message = "字典标签不能为空") |
| | | @Size(min = 0, max = 100, message = "字典标签长度不能超过100个字符") |
| | | public String getDictLabel() |
| | | { |
| | | return dictLabel; |
| | | } |
| | | |
| | | public void setDictLabel(String dictLabel) |
| | | { |
| | | this.dictLabel = dictLabel; |
| | | } |
| | | |
| | | @NotBlank(message = "字典键值不能为空") |
| | | @Size(min = 0, max = 100, message = "字典键值长度不能超过100个字符") |
| | | public String getDictValue() |
| | | { |
| | | return dictValue; |
| | | } |
| | | |
| | | public void setDictValue(String dictValue) |
| | | { |
| | | this.dictValue = dictValue; |
| | | } |
| | | |
| | | @NotBlank(message = "字典类型不能为空") |
| | | @Size(min = 0, max = 100, message = "字典类型长度不能超过100个字符") |
| | | public String getDictType() |
| | | { |
| | | return dictType; |
| | | } |
| | | |
| | | public void setDictType(String dictType) |
| | | { |
| | | this.dictType = dictType; |
| | | } |
| | | |
| | | @Size(min = 0, max = 100, message = "样式属性长度不能超过100个字符") |
| | | public String getCssClass() |
| | | { |
| | | return cssClass; |
| | | } |
| | | |
| | | public void setCssClass(String cssClass) |
| | | { |
| | | this.cssClass = cssClass; |
| | | } |
| | | |
| | | public String getListClass() |
| | | { |
| | | return listClass; |
| | | } |
| | | |
| | | public void setListClass(String listClass) |
| | | { |
| | | this.listClass = listClass; |
| | | } |
| | | |
| | | public boolean getDefault() |
| | | { |
| | | return UserConstants.YES.equals(this.isDefault); |
| | | } |
| | | |
| | | public String getIsDefault() |
| | | { |
| | | return isDefault; |
| | | } |
| | | |
| | | public void setIsDefault(String isDefault) |
| | | { |
| | | this.isDefault = isDefault; |
| | | } |
| | | |
| | | public String getStatus() |
| | | { |
| | | return status; |
| | | } |
| | | |
| | | public void setStatus(String status) |
| | | { |
| | | this.status = status; |
| | | } |
| | | |
| | | @Override |
| | | public String toString() { |
| | | return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) |
| | | .append("dictCode", getDictCode()) |
| | | .append("dictSort", getDictSort()) |
| | | .append("dictLabel", getDictLabel()) |
| | | .append("dictValue", getDictValue()) |
| | | .append("dictType", getDictType()) |
| | | .append("cssClass", getCssClass()) |
| | | .append("listClass", getListClass()) |
| | | .append("isDefault", getIsDefault()) |
| | | .append("status", getStatus()) |
| | | .append("createBy", getCreateBy()) |
| | | .append("createTime", getCreateTime()) |
| | | .append("updateBy", getUpdateBy()) |
| | | .append("updateTime", getUpdateTime()) |
| | | .append("remark", getRemark()) |
| | | .toString(); |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.system.api.domain; |
| | | |
| | | import javax.validation.constraints.NotBlank; |
| | | import javax.validation.constraints.Pattern; |
| | | import javax.validation.constraints.Size; |
| | | import org.apache.commons.lang3.builder.ToStringBuilder; |
| | | import org.apache.commons.lang3.builder.ToStringStyle; |
| | | import com.ruoyi.common.core.annotation.Excel; |
| | | import com.ruoyi.common.core.annotation.Excel.ColumnType; |
| | | import com.ruoyi.common.core.web.domain.BaseEntity; |
| | | |
| | | /** |
| | | * 字典类型表 sys_dict_type |
| | | * |
| | | * @author ruoyi |
| | | */ |
| | | public class SysDictType extends BaseEntity |
| | | { |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | /** 字典主键 */ |
| | | @Excel(name = "字典主键", cellType = ColumnType.NUMERIC) |
| | | private Long dictId; |
| | | |
| | | /** 字典名称 */ |
| | | @Excel(name = "字典名称") |
| | | private String dictName; |
| | | |
| | | /** 字典类型 */ |
| | | @Excel(name = "字典类型") |
| | | private String dictType; |
| | | |
| | | /** 状态(0正常 1停用) */ |
| | | @Excel(name = "状态", readConverterExp = "0=正常,1=停用") |
| | | private String status; |
| | | |
| | | public Long getDictId() |
| | | { |
| | | return dictId; |
| | | } |
| | | |
| | | public void setDictId(Long dictId) |
| | | { |
| | | this.dictId = dictId; |
| | | } |
| | | |
| | | @NotBlank(message = "字典名称不能为空") |
| | | @Size(min = 0, max = 100, message = "字典类型名称长度不能超过100个字符") |
| | | public String getDictName() |
| | | { |
| | | return dictName; |
| | | } |
| | | |
| | | public void setDictName(String dictName) |
| | | { |
| | | this.dictName = dictName; |
| | | } |
| | | |
| | | @NotBlank(message = "字典类型不能为空") |
| | | @Size(min = 0, max = 100, message = "字典类型类型长度不能超过100个字符") |
| | | @Pattern(regexp = "^[a-z][a-z0-9_]*$", message = "字典类型必须以字母开头,且只能为(小写字母,数字,下滑线)") |
| | | public String getDictType() |
| | | { |
| | | return dictType; |
| | | } |
| | | |
| | | public void setDictType(String dictType) |
| | | { |
| | | this.dictType = dictType; |
| | | } |
| | | |
| | | public String getStatus() |
| | | { |
| | | return status; |
| | | } |
| | | |
| | | public void setStatus(String status) |
| | | { |
| | | this.status = status; |
| | | } |
| | | |
| | | @Override |
| | | public String toString() { |
| | | return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) |
| | | .append("dictId", getDictId()) |
| | | .append("dictName", getDictName()) |
| | | .append("dictType", getDictType()) |
| | | .append("status", getStatus()) |
| | | .append("createBy", getCreateBy()) |
| | | .append("createTime", getCreateTime()) |
| | | .append("updateBy", getUpdateBy()) |
| | | .append("updateTime", getUpdateTime()) |
| | | .append("remark", getRemark()) |
| | | .toString(); |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.system.api.domain; |
| | | |
| | | import org.apache.commons.lang3.builder.ToStringBuilder; |
| | | import org.apache.commons.lang3.builder.ToStringStyle; |
| | | |
| | | /** |
| | | * 文件信息 |
| | | * |
| | | * @author ruoyi |
| | | */ |
| | | public class SysFile |
| | | { |
| | | /** |
| | | * 文件名称 |
| | | */ |
| | | private String name; |
| | | |
| | | /** |
| | | * 文件地址 |
| | | */ |
| | | private String url; |
| | | |
| | | public String getName() |
| | | { |
| | | return name; |
| | | } |
| | | |
| | | public void setName(String name) |
| | | { |
| | | this.name = name; |
| | | } |
| | | |
| | | public String getUrl() |
| | | { |
| | | return url; |
| | | } |
| | | |
| | | public void setUrl(String url) |
| | | { |
| | | this.url = url; |
| | | } |
| | | |
| | | @Override |
| | | public String toString() { |
| | | return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) |
| | | .append("name", getName()) |
| | | .append("url", getUrl()) |
| | | .toString(); |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.system.api.domain; |
| | | |
| | | import java.util.Date; |
| | | import com.fasterxml.jackson.annotation.JsonFormat; |
| | | import com.ruoyi.common.core.annotation.Excel; |
| | | import com.ruoyi.common.core.annotation.Excel.ColumnType; |
| | | import com.ruoyi.common.core.web.domain.BaseEntity; |
| | | |
| | | /** |
| | | * 系统访问记录表 sys_logininfor |
| | | * |
| | | * @author ruoyi |
| | | */ |
| | | public class SysLogininfor extends BaseEntity |
| | | { |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | /** ID */ |
| | | @Excel(name = "序号", cellType = ColumnType.NUMERIC) |
| | | private Long infoId; |
| | | |
| | | /** 用户账号 */ |
| | | @Excel(name = "用户账号") |
| | | private String userName; |
| | | |
| | | /** 状态 0成功 1失败 */ |
| | | @Excel(name = "状态", readConverterExp = "0=成功,1=失败") |
| | | private String status; |
| | | |
| | | /** 地址 */ |
| | | @Excel(name = "地址") |
| | | private String ipaddr; |
| | | |
| | | /** 描述 */ |
| | | @Excel(name = "描述") |
| | | private String msg; |
| | | |
| | | /** 访问时间 */ |
| | | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
| | | @Excel(name = "访问时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") |
| | | private Date accessTime; |
| | | |
| | | public Long getInfoId() |
| | | { |
| | | return infoId; |
| | | } |
| | | |
| | | public void setInfoId(Long infoId) |
| | | { |
| | | this.infoId = infoId; |
| | | } |
| | | |
| | | public String getUserName() |
| | | { |
| | | return userName; |
| | | } |
| | | |
| | | public void setUserName(String userName) |
| | | { |
| | | this.userName = userName; |
| | | } |
| | | |
| | | public String getStatus() |
| | | { |
| | | return status; |
| | | } |
| | | |
| | | public void setStatus(String status) |
| | | { |
| | | this.status = status; |
| | | } |
| | | |
| | | public String getIpaddr() |
| | | { |
| | | return ipaddr; |
| | | } |
| | | |
| | | public void setIpaddr(String ipaddr) |
| | | { |
| | | this.ipaddr = ipaddr; |
| | | } |
| | | |
| | | public String getMsg() |
| | | { |
| | | return msg; |
| | | } |
| | | |
| | | public void setMsg(String msg) |
| | | { |
| | | this.msg = msg; |
| | | } |
| | | |
| | | public Date getAccessTime() |
| | | { |
| | | return accessTime; |
| | | } |
| | | |
| | | public void setAccessTime(Date accessTime) |
| | | { |
| | | this.accessTime = accessTime; |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.system.api.domain; |
| | | |
| | | import java.util.Date; |
| | | import com.fasterxml.jackson.annotation.JsonFormat; |
| | | import com.ruoyi.common.core.annotation.Excel; |
| | | import com.ruoyi.common.core.annotation.Excel.ColumnType; |
| | | import com.ruoyi.common.core.web.domain.BaseEntity; |
| | | |
| | | /** |
| | | * 操作日志记录表 oper_log |
| | | * |
| | | * @author ruoyi |
| | | */ |
| | | public class SysOperLog extends BaseEntity |
| | | { |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | /** 日志主键 */ |
| | | @Excel(name = "操作序号", cellType = ColumnType.NUMERIC) |
| | | private Long operId; |
| | | |
| | | /** 操作模块 */ |
| | | @Excel(name = "操作模块") |
| | | private String title; |
| | | |
| | | /** 业务类型(0其它 1新增 2修改 3删除) */ |
| | | @Excel(name = "业务类型", readConverterExp = "0=其它,1=新增,2=修改,3=删除,4=授权,5=导出,6=导入,7=强退,8=生成代码,9=清空数据") |
| | | private Integer businessType; |
| | | |
| | | /** 业务类型数组 */ |
| | | private Integer[] businessTypes; |
| | | |
| | | /** 请求方法 */ |
| | | @Excel(name = "请求方法") |
| | | private String method; |
| | | |
| | | /** 请求方式 */ |
| | | @Excel(name = "请求方式") |
| | | private String requestMethod; |
| | | |
| | | /** 操作类别(0其它 1后台用户 2手机端用户) */ |
| | | @Excel(name = "操作类别", readConverterExp = "0=其它,1=后台用户,2=手机端用户") |
| | | private Integer operatorType; |
| | | |
| | | /** 操作人员 */ |
| | | @Excel(name = "操作人员") |
| | | private String operName; |
| | | |
| | | /** 部门名称 */ |
| | | @Excel(name = "部门名称") |
| | | private String deptName; |
| | | |
| | | /** 请求url */ |
| | | @Excel(name = "请求地址") |
| | | private String operUrl; |
| | | |
| | | /** 操作地址 */ |
| | | @Excel(name = "操作地址") |
| | | private String operIp; |
| | | |
| | | /** 请求参数 */ |
| | | @Excel(name = "请求参数") |
| | | private String operParam; |
| | | |
| | | /** 返回参数 */ |
| | | @Excel(name = "返回参数") |
| | | private String jsonResult; |
| | | |
| | | /** 操作状态(0正常 1异常) */ |
| | | @Excel(name = "状态", readConverterExp = "0=正常,1=异常") |
| | | private Integer status; |
| | | |
| | | /** 错误消息 */ |
| | | @Excel(name = "错误消息") |
| | | private String errorMsg; |
| | | |
| | | /** 操作时间 */ |
| | | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
| | | @Excel(name = "操作时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") |
| | | private Date operTime; |
| | | |
| | | /** 消耗时间 */ |
| | | @Excel(name = "消耗时间", suffix = "毫秒") |
| | | private Long costTime; |
| | | |
| | | public Long getOperId() |
| | | { |
| | | return operId; |
| | | } |
| | | |
| | | public void setOperId(Long operId) |
| | | { |
| | | this.operId = operId; |
| | | } |
| | | |
| | | public String getTitle() |
| | | { |
| | | return title; |
| | | } |
| | | |
| | | public void setTitle(String title) |
| | | { |
| | | this.title = title; |
| | | } |
| | | |
| | | public Integer getBusinessType() |
| | | { |
| | | return businessType; |
| | | } |
| | | |
| | | public void setBusinessType(Integer businessType) |
| | | { |
| | | this.businessType = businessType; |
| | | } |
| | | |
| | | public Integer[] getBusinessTypes() |
| | | { |
| | | return businessTypes; |
| | | } |
| | | |
| | | public void setBusinessTypes(Integer[] businessTypes) |
| | | { |
| | | this.businessTypes = businessTypes; |
| | | } |
| | | |
| | | public String getMethod() |
| | | { |
| | | return method; |
| | | } |
| | | |
| | | public void setMethod(String method) |
| | | { |
| | | this.method = method; |
| | | } |
| | | |
| | | public String getRequestMethod() |
| | | { |
| | | return requestMethod; |
| | | } |
| | | |
| | | public void setRequestMethod(String requestMethod) |
| | | { |
| | | this.requestMethod = requestMethod; |
| | | } |
| | | |
| | | public Integer getOperatorType() |
| | | { |
| | | return operatorType; |
| | | } |
| | | |
| | | public void setOperatorType(Integer operatorType) |
| | | { |
| | | this.operatorType = operatorType; |
| | | } |
| | | |
| | | public String getOperName() |
| | | { |
| | | return operName; |
| | | } |
| | | |
| | | public void setOperName(String operName) |
| | | { |
| | | this.operName = operName; |
| | | } |
| | | |
| | | public String getDeptName() |
| | | { |
| | | return deptName; |
| | | } |
| | | |
| | | public void setDeptName(String deptName) |
| | | { |
| | | this.deptName = deptName; |
| | | } |
| | | |
| | | public String getOperUrl() |
| | | { |
| | | return operUrl; |
| | | } |
| | | |
| | | public void setOperUrl(String operUrl) |
| | | { |
| | | this.operUrl = operUrl; |
| | | } |
| | | |
| | | public String getOperIp() |
| | | { |
| | | return operIp; |
| | | } |
| | | |
| | | public void setOperIp(String operIp) |
| | | { |
| | | this.operIp = operIp; |
| | | } |
| | | |
| | | public String getOperParam() |
| | | { |
| | | return operParam; |
| | | } |
| | | |
| | | public void setOperParam(String operParam) |
| | | { |
| | | this.operParam = operParam; |
| | | } |
| | | |
| | | public String getJsonResult() |
| | | { |
| | | return jsonResult; |
| | | } |
| | | |
| | | public void setJsonResult(String jsonResult) |
| | | { |
| | | this.jsonResult = jsonResult; |
| | | } |
| | | |
| | | public Integer getStatus() |
| | | { |
| | | return status; |
| | | } |
| | | |
| | | public void setStatus(Integer status) |
| | | { |
| | | this.status = status; |
| | | } |
| | | |
| | | public String getErrorMsg() |
| | | { |
| | | return errorMsg; |
| | | } |
| | | |
| | | public void setErrorMsg(String errorMsg) |
| | | { |
| | | this.errorMsg = errorMsg; |
| | | } |
| | | |
| | | public Date getOperTime() |
| | | { |
| | | return operTime; |
| | | } |
| | | |
| | | public void setOperTime(Date operTime) |
| | | { |
| | | this.operTime = operTime; |
| | | } |
| | | |
| | | public Long getCostTime() |
| | | { |
| | | return costTime; |
| | | } |
| | | |
| | | public void setCostTime(Long costTime) |
| | | { |
| | | this.costTime = costTime; |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.system.api.domain; |
| | | |
| | | import java.util.Set; |
| | | import javax.validation.constraints.NotBlank; |
| | | import javax.validation.constraints.NotNull; |
| | | import javax.validation.constraints.Size; |
| | | |
| | | import com.baomidou.mybatisplus.annotation.TableField; |
| | | import org.apache.commons.lang3.builder.ToStringBuilder; |
| | | import org.apache.commons.lang3.builder.ToStringStyle; |
| | | import com.ruoyi.common.core.annotation.Excel; |
| | | import com.ruoyi.common.core.annotation.Excel.ColumnType; |
| | | import com.ruoyi.common.core.web.domain.BaseEntity; |
| | | |
| | | /** |
| | | * 角色表 sys_role |
| | | * |
| | | * @author ruoyi |
| | | */ |
| | | public class SysRole extends BaseEntity |
| | | { |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | /** 角色ID */ |
| | | @Excel(name = "角色序号", cellType = ColumnType.NUMERIC) |
| | | @TableField("role_id") |
| | | private Long roleId; |
| | | |
| | | /** 角色名称 */ |
| | | @Excel(name = "角色名称") |
| | | @TableField("role_name") |
| | | private String roleName; |
| | | |
| | | /** 角色权限 */ |
| | | @Excel(name = "角色权限") |
| | | @TableField("role_key") |
| | | private String roleKey; |
| | | |
| | | /** 角色排序 */ |
| | | @Excel(name = "角色排序") |
| | | @TableField("role_sort") |
| | | private Integer roleSort; |
| | | |
| | | /** 数据范围(1:所有数据权限;2:自定义数据权限;3:本部门数据权限;4:本部门及以下数据权限;5:仅本人数据权限) */ |
| | | @Excel(name = "数据范围", readConverterExp = "1=所有数据权限,2=自定义数据权限,3=本部门数据权限,4=本部门及以下数据权限,5=仅本人数据权限") |
| | | @TableField("data_scope") |
| | | private String dataScope; |
| | | |
| | | /** 菜单树选择项是否关联显示( 0:父子不互相关联显示 1:父子互相关联显示) */ |
| | | @TableField("menu_check_strictly") |
| | | private boolean menuCheckStrictly; |
| | | |
| | | /** 部门树选择项是否关联显示(0:父子不互相关联显示 1:父子互相关联显示 ) */ |
| | | @TableField("dept_check_strictly") |
| | | private boolean deptCheckStrictly; |
| | | |
| | | /** 角色状态(0正常 1停用) */ |
| | | @Excel(name = "角色状态", readConverterExp = "0=正常,1=停用") |
| | | private String status; |
| | | |
| | | /** 删除标志(0代表存在 2代表删除) */ |
| | | @TableField("del_flag") |
| | | private String delFlag; |
| | | |
| | | /** 用户是否存在此角色标识 默认不存在 */ |
| | | @TableField(exist = false) |
| | | private boolean flag = false; |
| | | |
| | | /** 菜单组 */ |
| | | @TableField(exist = false) |
| | | private Long[] menuIds; |
| | | |
| | | /** 部门组(数据权限) */ |
| | | @TableField(exist = false) |
| | | private Long[] deptIds; |
| | | |
| | | /** 角色菜单权限 */ |
| | | @TableField(exist = false) |
| | | private Set<String> permissions; |
| | | |
| | | /** 车辆数据权限:1=所有数据 2=已租 3=未租 4=已租(仅自己负责的合同) 5=无数据权限 */ |
| | | private Integer carDataAuth; |
| | | |
| | | /** 车务数据权限:1=所有数据 2=已租 3=未租 4=已租(仅自己负责的合同) 5=无数据权限 */ |
| | | private Integer carTrainOperAuth; |
| | | |
| | | /** 合同数据权限:1=所有数据 2=仅自己负责的合同 3=无数据权限 */ |
| | | private Integer contractDataAuth; |
| | | |
| | | /** 公司id */ |
| | | private Integer companyId; |
| | | |
| | | |
| | | |
| | | public SysRole() |
| | | { |
| | | |
| | | } |
| | | |
| | | public SysRole(Long roleId) |
| | | { |
| | | this.roleId = roleId; |
| | | } |
| | | |
| | | public Integer getCarDataAuth() { |
| | | return carDataAuth; |
| | | } |
| | | |
| | | public void setCarDataAuth(Integer carDataAuth) { |
| | | this.carDataAuth = carDataAuth; |
| | | } |
| | | |
| | | public Integer getCarTrainOperAuth() { |
| | | return carTrainOperAuth; |
| | | } |
| | | |
| | | public void setCarTrainOperAuth(Integer carTrainOperAuth) { |
| | | this.carTrainOperAuth = carTrainOperAuth; |
| | | } |
| | | |
| | | public Integer getContractDataAuth() { |
| | | return contractDataAuth; |
| | | } |
| | | |
| | | public void setContractDataAuth(Integer contractDataAuth) { |
| | | this.contractDataAuth = contractDataAuth; |
| | | } |
| | | |
| | | public Integer getCompanyId() { |
| | | return companyId; |
| | | } |
| | | |
| | | public void setCompanyId(Integer companyId) { |
| | | this.companyId = companyId; |
| | | } |
| | | |
| | | public Long getRoleId() |
| | | { |
| | | return roleId; |
| | | } |
| | | |
| | | public void setRoleId(Long roleId) |
| | | { |
| | | this.roleId = roleId; |
| | | } |
| | | |
| | | public boolean isAdmin() |
| | | { |
| | | return isAdmin(this.roleId); |
| | | } |
| | | |
| | | public static boolean isAdmin(Long roleId) |
| | | { |
| | | return roleId != null && 1L == roleId; |
| | | } |
| | | |
| | | @NotBlank(message = "角色名称不能为空") |
| | | @Size(min = 0, max = 30, message = "角色名称长度不能超过30个字符") |
| | | public String getRoleName() |
| | | { |
| | | return roleName; |
| | | } |
| | | |
| | | public void setRoleName(String roleName) |
| | | { |
| | | this.roleName = roleName; |
| | | } |
| | | |
| | | @NotBlank(message = "权限字符不能为空") |
| | | @Size(min = 0, max = 100, message = "权限字符长度不能超过100个字符") |
| | | public String getRoleKey() |
| | | { |
| | | return roleKey; |
| | | } |
| | | |
| | | public void setRoleKey(String roleKey) |
| | | { |
| | | this.roleKey = roleKey; |
| | | } |
| | | |
| | | @NotNull(message = "显示顺序不能为空") |
| | | public Integer getRoleSort() |
| | | { |
| | | return roleSort; |
| | | } |
| | | |
| | | public void setRoleSort(Integer roleSort) |
| | | { |
| | | this.roleSort = roleSort; |
| | | } |
| | | |
| | | public String getDataScope() |
| | | { |
| | | return dataScope; |
| | | } |
| | | |
| | | public void setDataScope(String dataScope) |
| | | { |
| | | this.dataScope = dataScope; |
| | | } |
| | | |
| | | public boolean isMenuCheckStrictly() |
| | | { |
| | | return menuCheckStrictly; |
| | | } |
| | | |
| | | public void setMenuCheckStrictly(boolean menuCheckStrictly) |
| | | { |
| | | this.menuCheckStrictly = menuCheckStrictly; |
| | | } |
| | | |
| | | public boolean isDeptCheckStrictly() |
| | | { |
| | | return deptCheckStrictly; |
| | | } |
| | | |
| | | public void setDeptCheckStrictly(boolean deptCheckStrictly) |
| | | { |
| | | this.deptCheckStrictly = deptCheckStrictly; |
| | | } |
| | | |
| | | public String getStatus() |
| | | { |
| | | return status; |
| | | } |
| | | |
| | | public void setStatus(String status) |
| | | { |
| | | this.status = status; |
| | | } |
| | | |
| | | public String getDelFlag() |
| | | { |
| | | return delFlag; |
| | | } |
| | | |
| | | public void setDelFlag(String delFlag) |
| | | { |
| | | this.delFlag = delFlag; |
| | | } |
| | | |
| | | public boolean isFlag() |
| | | { |
| | | return flag; |
| | | } |
| | | |
| | | public void setFlag(boolean flag) |
| | | { |
| | | this.flag = flag; |
| | | } |
| | | |
| | | public Long[] getMenuIds() |
| | | { |
| | | return menuIds; |
| | | } |
| | | |
| | | public void setMenuIds(Long[] menuIds) |
| | | { |
| | | this.menuIds = menuIds; |
| | | } |
| | | |
| | | public Long[] getDeptIds() |
| | | { |
| | | return deptIds; |
| | | } |
| | | |
| | | public void setDeptIds(Long[] deptIds) |
| | | { |
| | | this.deptIds = deptIds; |
| | | } |
| | | |
| | | public Set<String> getPermissions() |
| | | { |
| | | return permissions; |
| | | } |
| | | |
| | | public void setPermissions(Set<String> permissions) |
| | | { |
| | | this.permissions = permissions; |
| | | } |
| | | |
| | | @Override |
| | | public String toString() { |
| | | return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) |
| | | .append("roleId", getRoleId()) |
| | | .append("roleName", getRoleName()) |
| | | .append("roleKey", getRoleKey()) |
| | | .append("roleSort", getRoleSort()) |
| | | .append("dataScope", getDataScope()) |
| | | .append("menuCheckStrictly", isMenuCheckStrictly()) |
| | | .append("deptCheckStrictly", isDeptCheckStrictly()) |
| | | .append("status", getStatus()) |
| | | .append("delFlag", getDelFlag()) |
| | | .append("createBy", getCreateBy()) |
| | | .append("createTime", getCreateTime()) |
| | | .append("updateBy", getUpdateBy()) |
| | | .append("updateTime", getUpdateTime()) |
| | | .append("remark", getRemark()) |
| | | .toString(); |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.system.api.domain; |
| | | |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | import javax.validation.constraints.*; |
| | | |
| | | import com.baomidou.mybatisplus.annotation.TableField; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import org.apache.commons.lang3.builder.ToStringBuilder; |
| | | import org.apache.commons.lang3.builder.ToStringStyle; |
| | | import com.ruoyi.common.core.annotation.Excel; |
| | | import com.ruoyi.common.core.annotation.Excel.ColumnType; |
| | | import com.ruoyi.common.core.annotation.Excel.Type; |
| | | import com.ruoyi.common.core.annotation.Excels; |
| | | import com.ruoyi.common.core.web.domain.BaseEntity; |
| | | import com.ruoyi.common.core.xss.Xss; |
| | | import org.springframework.format.annotation.DateTimeFormat; |
| | | |
| | | /** |
| | | * 用户对象 sys_user |
| | | * |
| | | * @author ruoyi |
| | | */ |
| | | public class SysUser extends BaseEntity |
| | | { |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | /** 用户ID */ |
| | | @Excel(name = "用户序号", cellType = ColumnType.NUMERIC, prompt = "用户编号") |
| | | @TableField("user_id") |
| | | private Long userId; |
| | | |
| | | /** 部门ID */ |
| | | @Excel(name = "部门编号", type = Type.IMPORT) |
| | | @TableField("dept_id") |
| | | private Long deptId; |
| | | |
| | | /** 用户账号 */ |
| | | @Excel(name = "登录名称") |
| | | @TableField("user_name") |
| | | private String userName; |
| | | |
| | | /** 用户昵称 */ |
| | | @Excel(name = "用户名称") |
| | | @NotBlank(message = "姓名不能为空") |
| | | @TableField("nick_name") |
| | | private String nickName; |
| | | |
| | | /** 用户邮箱 */ |
| | | @Excel(name = "用户邮箱") |
| | | private String email; |
| | | |
| | | /** 手机号码 */ |
| | | @Excel(name = "手机号码") |
| | | @NotBlank(message = "请输入账号") |
| | | private String phonenumber; |
| | | |
| | | /** 用户性别 */ |
| | | @Excel(name = "用户性别", readConverterExp = "0=男,1=女,2=未知") |
| | | private String sex; |
| | | |
| | | /** 用户头像 */ |
| | | private String avatar; |
| | | |
| | | /** 密码 */ |
| | | @NotBlank(message = "密码不能为空") |
| | | private String password; |
| | | |
| | | /** 帐号状态(0正常 1停用) */ |
| | | @Excel(name = "帐号状态", readConverterExp = "0=正常,1=停用") |
| | | private String status; |
| | | |
| | | /** 删除标志(0代表存在 2代表删除) */ |
| | | @TableField("del_flag") |
| | | private String delFlag; |
| | | |
| | | /** 最后登录IP */ |
| | | @Excel(name = "最后登录IP", type = Type.EXPORT) |
| | | @TableField("login_ip") |
| | | private String loginIp; |
| | | |
| | | /** 最后登录时间 */ |
| | | @Excel(name = "最后登录时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss", type = Type.EXPORT) |
| | | @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
| | | @TableField("login_date") |
| | | private Date loginDate; |
| | | |
| | | /** 部门对象 */ |
| | | @Excels({ |
| | | @Excel(name = "部门名称", targetAttr = "deptName", type = Type.EXPORT), |
| | | @Excel(name = "部门负责人", targetAttr = "leader", type = Type.EXPORT) |
| | | }) |
| | | @TableField(exist = false) |
| | | private SysDept dept; |
| | | |
| | | /** 角色对象 */ |
| | | @TableField(exist = false) |
| | | private List<SysRole> roles; |
| | | |
| | | /** 角色组 */ |
| | | @TableField(exist = false) |
| | | private Long[] roleIds; |
| | | |
| | | /** 岗位组 */ |
| | | @TableField(exist = false) |
| | | private Long[] postIds; |
| | | |
| | | /** 角色ID */ |
| | | @TableField(exist = false) |
| | | private Long roleId; |
| | | |
| | | /** |
| | | * 角色类型 1=平台 2=公司 3=门店 4=修理厂 |
| | | */ |
| | | @ApiModelProperty(value = "角色类型 1=平台 2=公司 3=门店 4=修理厂") |
| | | private Integer roleType; |
| | | |
| | | @Excel(name = "密码修改时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss", type = Type.EXPORT) |
| | | private Date passWordUpdate; |
| | | |
| | | @ApiModelProperty(value = "对象ID") |
| | | private Integer objectId; |
| | | |
| | | @ApiModelProperty(value = "备注") |
| | | private String remark; |
| | | |
| | | @Override |
| | | public String getRemark() { |
| | | return remark; |
| | | } |
| | | |
| | | @Override |
| | | public void setRemark(String remark) { |
| | | this.remark = remark; |
| | | } |
| | | |
| | | public SysUser() |
| | | { |
| | | |
| | | } |
| | | |
| | | public SysUser(Long userId) |
| | | { |
| | | this.userId = userId; |
| | | } |
| | | |
| | | public Integer getRoleType() { |
| | | return roleType; |
| | | } |
| | | |
| | | public void setRoleType(Integer roleType) { |
| | | this.roleType = roleType; |
| | | } |
| | | |
| | | public Date getPassWordUpdate() { |
| | | return passWordUpdate; |
| | | } |
| | | |
| | | public void setPassWordUpdate(Date passWordUpdate) { |
| | | this.passWordUpdate = passWordUpdate; |
| | | } |
| | | |
| | | public Integer getObjectId() { |
| | | return objectId; |
| | | } |
| | | |
| | | public void setObjectId(Integer objectId) { |
| | | this.objectId = objectId; |
| | | } |
| | | |
| | | public Long getUserId() |
| | | { |
| | | return userId; |
| | | } |
| | | |
| | | public void setUserId(Long userId) |
| | | { |
| | | this.userId = userId; |
| | | } |
| | | |
| | | public boolean isAdmin() |
| | | { |
| | | return isAdmin(this.userId); |
| | | } |
| | | |
| | | public static boolean isAdmin(Long userId) |
| | | { |
| | | return userId != null && 1L == userId; |
| | | } |
| | | |
| | | public Long getDeptId() |
| | | { |
| | | return deptId; |
| | | } |
| | | |
| | | public void setDeptId(Long deptId) |
| | | { |
| | | this.deptId = deptId; |
| | | } |
| | | |
| | | @Xss(message = "用户昵称不能包含脚本字符") |
| | | @Size(min = 0, max = 30, message = "用户昵称长度不能超过30个字符") |
| | | public String getNickName() |
| | | { |
| | | return nickName; |
| | | } |
| | | |
| | | public void setNickName(String nickName) |
| | | { |
| | | this.nickName = nickName; |
| | | } |
| | | |
| | | @Xss(message = "用户账号不能包含脚本字符") |
| | | @Size(min = 0, max = 30, message = "用户账号长度不能超过30个字符") |
| | | public String getUserName() |
| | | { |
| | | return userName; |
| | | } |
| | | |
| | | public void setUserName(String userName) |
| | | { |
| | | this.userName = userName; |
| | | } |
| | | |
| | | @Email(message = "邮箱格式不正确") |
| | | @Size(min = 0, max = 50, message = "邮箱长度不能超过50个字符") |
| | | public String getEmail() |
| | | { |
| | | return email; |
| | | } |
| | | |
| | | public void setEmail(String email) |
| | | { |
| | | this.email = email; |
| | | } |
| | | |
| | | @Size(min = 0, max = 11, message = "手机号码长度不能超过11个字符") |
| | | public String getPhonenumber() |
| | | { |
| | | return phonenumber; |
| | | } |
| | | |
| | | public void setPhonenumber(String phonenumber) |
| | | { |
| | | this.phonenumber = phonenumber; |
| | | } |
| | | |
| | | public String getSex() |
| | | { |
| | | return sex; |
| | | } |
| | | |
| | | public void setSex(String sex) |
| | | { |
| | | this.sex = sex; |
| | | } |
| | | |
| | | public String getAvatar() |
| | | { |
| | | return avatar; |
| | | } |
| | | |
| | | public void setAvatar(String avatar) |
| | | { |
| | | this.avatar = avatar; |
| | | } |
| | | |
| | | public String getPassword() |
| | | { |
| | | return password; |
| | | } |
| | | |
| | | public void setPassword(String password) |
| | | { |
| | | this.password = password; |
| | | } |
| | | |
| | | public String getStatus() |
| | | { |
| | | return status; |
| | | } |
| | | |
| | | public void setStatus(String status) |
| | | { |
| | | this.status = status; |
| | | } |
| | | |
| | | public String getDelFlag() |
| | | { |
| | | return delFlag; |
| | | } |
| | | |
| | | public void setDelFlag(String delFlag) |
| | | { |
| | | this.delFlag = delFlag; |
| | | } |
| | | |
| | | public String getLoginIp() |
| | | { |
| | | return loginIp; |
| | | } |
| | | |
| | | public void setLoginIp(String loginIp) |
| | | { |
| | | this.loginIp = loginIp; |
| | | } |
| | | |
| | | public Date getLoginDate() |
| | | { |
| | | return loginDate; |
| | | } |
| | | |
| | | public void setLoginDate(Date loginDate) |
| | | { |
| | | this.loginDate = loginDate; |
| | | } |
| | | |
| | | public SysDept getDept() |
| | | { |
| | | return dept; |
| | | } |
| | | |
| | | public void setDept(SysDept dept) |
| | | { |
| | | this.dept = dept; |
| | | } |
| | | |
| | | public List<SysRole> getRoles() |
| | | { |
| | | return roles; |
| | | } |
| | | |
| | | public void setRoles(List<SysRole> roles) |
| | | { |
| | | this.roles = roles; |
| | | } |
| | | |
| | | public Long[] getRoleIds() |
| | | { |
| | | return roleIds; |
| | | } |
| | | |
| | | public void setRoleIds(Long[] roleIds) |
| | | { |
| | | this.roleIds = roleIds; |
| | | } |
| | | |
| | | public Long[] getPostIds() |
| | | { |
| | | return postIds; |
| | | } |
| | | |
| | | public void setPostIds(Long[] postIds) |
| | | { |
| | | this.postIds = postIds; |
| | | } |
| | | |
| | | public Long getRoleId() |
| | | { |
| | | return roleId; |
| | | } |
| | | |
| | | public void setRoleId(Long roleId) |
| | | { |
| | | this.roleId = roleId; |
| | | } |
| | | @Override |
| | | public String toString() { |
| | | return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) |
| | | .append("userId", getUserId()) |
| | | .append("deptId", getDeptId()) |
| | | .append("userName", getUserName()) |
| | | .append("nickName", getNickName()) |
| | | .append("email", getEmail()) |
| | | .append("phonenumber", getPhonenumber()) |
| | | .append("sex", getSex()) |
| | | .append("avatar", getAvatar()) |
| | | .append("password", getPassword()) |
| | | .append("status", getStatus()) |
| | | .append("delFlag", getDelFlag()) |
| | | .append("loginIp", getLoginIp()) |
| | | .append("loginDate", getLoginDate()) |
| | | .append("createBy", getCreateBy()) |
| | | .append("createTime", getCreateTime()) |
| | | .append("updateBy", getUpdateBy()) |
| | | .append("updateTime", getUpdateTime()) |
| | | .append("remark", getRemark()) |
| | | .append("dept", getDept()) |
| | | .toString(); |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.system.api.factory; |
| | | |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | | import org.springframework.cloud.openfeign.FallbackFactory; |
| | | import org.springframework.stereotype.Component; |
| | | import org.springframework.web.multipart.MultipartFile; |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.system.api.RemoteFileService; |
| | | import com.ruoyi.system.api.domain.SysFile; |
| | | |
| | | /** |
| | | * 文件服务降级处理 |
| | | * |
| | | * @author ruoyi |
| | | */ |
| | | @Component |
| | | public class RemoteFileFallbackFactory implements FallbackFactory<RemoteFileService> |
| | | { |
| | | private static final Logger log = LoggerFactory.getLogger(RemoteFileFallbackFactory.class); |
| | | |
| | | @Override |
| | | public RemoteFileService create(Throwable throwable) |
| | | { |
| | | log.error("文件服务调用失败:{}", throwable.getMessage()); |
| | | return new RemoteFileService() |
| | | { |
| | | @Override |
| | | public R<SysFile> upload(MultipartFile file) |
| | | { |
| | | return R.fail("上传文件失败:" + throwable.getMessage()); |
| | | } |
| | | }; |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.system.api.factory; |
| | | |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | | import org.springframework.cloud.openfeign.FallbackFactory; |
| | | import org.springframework.stereotype.Component; |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.system.api.RemoteLogService; |
| | | import com.ruoyi.system.api.domain.SysLogininfor; |
| | | import com.ruoyi.system.api.domain.SysOperLog; |
| | | |
| | | /** |
| | | * 日志服务降级处理 |
| | | * |
| | | * @author ruoyi |
| | | */ |
| | | @Component |
| | | public class RemoteLogFallbackFactory implements FallbackFactory<RemoteLogService> |
| | | { |
| | | private static final Logger log = LoggerFactory.getLogger(RemoteLogFallbackFactory.class); |
| | | |
| | | @Override |
| | | public RemoteLogService create(Throwable throwable) |
| | | { |
| | | log.error("日志服务调用失败:{}", throwable.getMessage()); |
| | | return new RemoteLogService() |
| | | { |
| | | @Override |
| | | public R<Boolean> saveLog(SysOperLog sysOperLog, String source) |
| | | { |
| | | return null; |
| | | } |
| | | |
| | | @Override |
| | | public R<Boolean> saveLogininfor(SysLogininfor sysLogininfor, String source) |
| | | { |
| | | return null; |
| | | } |
| | | }; |
| | | |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.system.api.factory; |
| | | |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | | import org.springframework.cloud.openfeign.FallbackFactory; |
| | | import org.springframework.stereotype.Component; |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.system.api.RemoteUserService; |
| | | import com.ruoyi.system.api.domain.SysUser; |
| | | import com.ruoyi.system.api.model.LoginUser; |
| | | |
| | | /** |
| | | * 用户服务降级处理 |
| | | * |
| | | * @author ruoyi |
| | | */ |
| | | @Component |
| | | public class RemoteUserFallbackFactory implements FallbackFactory<RemoteUserService> |
| | | { |
| | | private static final Logger log = LoggerFactory.getLogger(RemoteUserFallbackFactory.class); |
| | | |
| | | @Override |
| | | public RemoteUserService create(Throwable throwable) |
| | | { |
| | | log.error("用户服务调用失败:{}", throwable.getMessage()); |
| | | return new RemoteUserService() |
| | | { |
| | | @Override |
| | | public R<LoginUser> getUserInfo(String username, String source) |
| | | { |
| | | return R.fail("获取用户失败:" + throwable.getMessage()); |
| | | } |
| | | |
| | | @Override |
| | | public R<Boolean> registerUserInfo(SysUser sysUser, String source) |
| | | { |
| | | return R.fail("注册用户失败:" + throwable.getMessage()); |
| | | } |
| | | }; |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.system.api.factory; |
| | | |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.system.api.domain.SysRole; |
| | | import com.ruoyi.system.api.domain.SysUser; |
| | | import com.ruoyi.system.api.feignClient.SysUserClient; |
| | | import com.ruoyi.system.api.model.*; |
| | | import org.springframework.cloud.openfeign.FallbackFactory; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import java.util.List; |
| | | @Component |
| | | public class SysUserFallbackFactory implements FallbackFactory<SysUserClient> { |
| | | @Override |
| | | public SysUserClient create(Throwable cause) { |
| | | return new SysUserClient(){ |
| | | |
| | | @Override |
| | | public R<List<CompanyUserListVo>> getSysUserFromCompanyId(CompanySysUserReq companySysUserReq) { |
| | | return R.fail("公司获取关联已有账号失败:" + cause.getMessage()); |
| | | } |
| | | |
| | | @Override |
| | | public R<SysUser> getSysUser(Long userId) { |
| | | return R.fail("获取用户失败:" + cause.getMessage()); |
| | | } |
| | | |
| | | @Override |
| | | public R<Boolean> updateSysUser(SysUser sysUser) { |
| | | return R.fail("更新用户失败:" + cause.getMessage()); |
| | | } |
| | | |
| | | @Override |
| | | public R<List<Integer>> companySaveSysUser(CompanyAddSysUserDto dto) { |
| | | return R.fail("添加用户失败:" + cause.getMessage()); |
| | | } |
| | | |
| | | @Override |
| | | public R<List<Integer>> addTRepairSysUser(TRepairShopAddDto dto) { |
| | | return R.fail("添加修理厂用户失败:" + cause.getMessage()); |
| | | } |
| | | |
| | | @Override |
| | | public R<List<SysUser>> getUserList(List<Integer> userIds) { |
| | | return R.fail("通过用户id集合查询用户失败:" + cause.getMessage()); |
| | | } |
| | | |
| | | @Override |
| | | public R<List<CompanyUserListVo>> getSysUserFromCompanyIdOne(CompanySysUserReq companySysUserReq) { |
| | | return R.fail("公司获取账号失败:" + cause.getMessage()); |
| | | } |
| | | |
| | | @Override |
| | | public R<Integer> isAdmin(Long userId) { |
| | | return R.fail("获取角色信息失败:" + cause.getMessage()); |
| | | } |
| | | |
| | | @Override |
| | | public R<Boolean> updateUser(SysUser sysUser) { |
| | | return R.fail("修改用户信息失败:" + cause.getMessage()); |
| | | } |
| | | |
| | | @Override |
| | | public R<SysRole> queryRoleByUserId(Long userId) { |
| | | return R.fail("通过用户id查询角色对象失败:" + cause.getMessage()); |
| | | } |
| | | |
| | | @Override |
| | | public R<SysRole> queryRoleByRoleId(Long roleId) { |
| | | return R.fail("通过角色id查询角色对象失败:" + cause.getMessage()); |
| | | } |
| | | |
| | | @Override |
| | | public R<List<SysUser>> queryUserByPhoneList(List<String> phoneList) { |
| | | return R.fail("通过手机号集合查询用户失败:" + cause.getMessage()); |
| | | } |
| | | |
| | | @Override |
| | | public R<Boolean> addUserRole(List<SysUserRoleDTO> dtoList) { |
| | | return R.fail("默认批量添加修理厂失败:" + cause.getMessage()); |
| | | } |
| | | |
| | | @Override |
| | | public R<SysUser> queryUserByPhone(String phone) { |
| | | return R.fail("通过手机号查询用户失败:" + cause.getMessage()); |
| | | } |
| | | |
| | | @Override |
| | | public R<SysUser> queryUserByUserName(String userName) { |
| | | return R.fail("通过账号查询用户失败:" + cause.getMessage()); |
| | | } |
| | | }; |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.system.api.feignClient; |
| | | |
| | | import com.ruoyi.common.core.constant.ServiceNameConstants; |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.system.api.domain.SysRole; |
| | | import com.ruoyi.system.api.domain.SysUser; |
| | | import com.ruoyi.system.api.factory.SysUserFallbackFactory; |
| | | import com.ruoyi.system.api.model.*; |
| | | import org.springframework.cloud.openfeign.FeignClient; |
| | | import org.springframework.web.bind.annotation.GetMapping; |
| | | import org.springframework.web.bind.annotation.PathVariable; |
| | | import org.springframework.web.bind.annotation.PostMapping; |
| | | import org.springframework.web.bind.annotation.RequestBody; |
| | | |
| | | import java.util.List; |
| | | |
| | | @FeignClient(contextId = "sysUserClient", value = ServiceNameConstants.SYSTEM_SERVICE, fallbackFactory = SysUserFallbackFactory.class) |
| | | public interface SysUserClient { |
| | | |
| | | @PostMapping("/user/getSysUserFromCompanyId") |
| | | R<List<CompanyUserListVo>> getSysUserFromCompanyId(@RequestBody CompanySysUserReq companySysUserReq); |
| | | |
| | | @PostMapping("/user/getSysUser") |
| | | R<SysUser> getSysUser(Long userId); |
| | | |
| | | @PostMapping("/user/updateSysUser") |
| | | R<Boolean> updateSysUser(@RequestBody SysUser sysUser); |
| | | |
| | | @PostMapping("/user/companySaveSysUser") |
| | | R<List<Integer>> companySaveSysUser(@RequestBody CompanyAddSysUserDto dto); |
| | | |
| | | @PostMapping("/user/addTRepairSysUser") |
| | | R<List<Integer>> addTRepairSysUser(@RequestBody TRepairShopAddDto dto); |
| | | |
| | | @PostMapping("/user/getUserList") |
| | | R<List<SysUser>> getUserList(@RequestBody List<Integer> userIds); |
| | | |
| | | |
| | | @PostMapping("/user/getSysUserFromCompanyIdOne") |
| | | R<List<CompanyUserListVo>> getSysUserFromCompanyIdOne(@RequestBody CompanySysUserReq companySysUserReq); |
| | | |
| | | @PostMapping("/user/isAdmin") |
| | | R<Integer> isAdmin(Long userId); |
| | | |
| | | @PostMapping("/user/updateUser") |
| | | R<Boolean> updateUser(@RequestBody SysUser sysUser); |
| | | |
| | | /** |
| | | * 通过用户id查询角色对象 |
| | | * @param userId |
| | | * @return |
| | | */ |
| | | @GetMapping("/user/queryRoleByUserId/{userId}") |
| | | R<SysRole> queryRoleByUserId(@PathVariable("userId") Long userId); |
| | | |
| | | |
| | | /** |
| | | * 通过角色id查询角色对象 |
| | | * @param roleId |
| | | * @return |
| | | */ |
| | | @GetMapping("/user/queryRoleByRoleId/{roleId}") |
| | | R<SysRole> queryRoleByRoleId(@PathVariable("roleId") Long roleId); |
| | | |
| | | /** |
| | | * 通过手机号集合查询用户 |
| | | * @param phoneList |
| | | * @return |
| | | */ |
| | | @PostMapping("/user/queryUserByPhoneList") |
| | | R<List<SysUser>> queryUserByPhoneList(@RequestBody List<String> phoneList); |
| | | |
| | | /** |
| | | * 默认批量添加修理厂 |
| | | * @param dtoList |
| | | * @return |
| | | */ |
| | | @PostMapping("/user/addUserRole") |
| | | R<Boolean> addUserRole(@RequestBody List<SysUserRoleDTO> dtoList); |
| | | |
| | | /** |
| | | * 通过手机号查询用户 |
| | | * @param phone |
| | | * @return |
| | | */ |
| | | @PostMapping("/user/queryUserByPhone") |
| | | R<SysUser> queryUserByPhone(@RequestBody String phone); |
| | | |
| | | /** |
| | | * 通过账号查询用户 |
| | | * @param userName |
| | | * @return |
| | | */ |
| | | @PostMapping("/user/queryUserByUserName") |
| | | R<SysUser> queryUserByUserName(@RequestBody String userName); |
| | | |
| | | } |
New file |
| | |
| | | package com.ruoyi.system.api.model; |
| | | |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | import java.util.List; |
| | | |
| | | @Data |
| | | public class CompanyAddSysUserDto { |
| | | List<CompanyUserListVo> list; |
| | | @ApiModelProperty("公司id") |
| | | private Integer companyId; |
| | | } |
New file |
| | |
| | | package com.ruoyi.system.api.model; |
| | | |
| | | import lombok.AllArgsConstructor; |
| | | import lombok.Data; |
| | | import lombok.NoArgsConstructor; |
| | | |
| | | import java.util.List; |
| | | |
| | | @Data |
| | | @AllArgsConstructor |
| | | @NoArgsConstructor |
| | | public class CompanySysUserReq { |
| | | private Integer companyId; |
| | | private String name; |
| | | private List<Integer> userIds; |
| | | |
| | | } |
New file |
| | |
| | | package com.ruoyi.system.api.model; |
| | | |
| | | import lombok.Data; |
| | | |
| | | @Data |
| | | public class CompanyUserListVo { |
| | | private Long id; |
| | | |
| | | private String userName; |
| | | |
| | | private String phoneNumber; |
| | | |
| | | private String password; |
| | | |
| | | private String nickName; |
| | | } |
New file |
| | |
| | | package com.ruoyi.system.api.model; |
| | | |
| | | import java.io.Serializable; |
| | | import java.util.Set; |
| | | import com.ruoyi.system.api.domain.SysUser; |
| | | |
| | | /** |
| | | * 用户信息 |
| | | * |
| | | * @author ruoyi |
| | | */ |
| | | public class LoginUser implements Serializable |
| | | { |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | /** |
| | | * 用户唯一标识 |
| | | */ |
| | | private String token; |
| | | |
| | | /** |
| | | * 用户名id |
| | | */ |
| | | private Long userid; |
| | | |
| | | /** |
| | | * 用户名 |
| | | */ |
| | | private String username; |
| | | |
| | | /** |
| | | * 登录时间 |
| | | */ |
| | | private Long loginTime; |
| | | |
| | | /** |
| | | * 过期时间 |
| | | */ |
| | | private Long expireTime; |
| | | |
| | | /** |
| | | * 登录IP地址 |
| | | */ |
| | | private String ipaddr; |
| | | |
| | | /** |
| | | * 权限列表 |
| | | */ |
| | | private Set<String> permissions; |
| | | |
| | | /** |
| | | * 角色列表 |
| | | */ |
| | | private Set<String> roles; |
| | | |
| | | /** |
| | | * 用户信息 |
| | | */ |
| | | private SysUser sysUser; |
| | | |
| | | public String getToken() |
| | | { |
| | | return token; |
| | | } |
| | | |
| | | public void setToken(String token) |
| | | { |
| | | this.token = token; |
| | | } |
| | | |
| | | public Long getUserid() |
| | | { |
| | | return userid; |
| | | } |
| | | |
| | | public void setUserid(Long userid) |
| | | { |
| | | this.userid = userid; |
| | | } |
| | | |
| | | public String getUsername() |
| | | { |
| | | return username; |
| | | } |
| | | |
| | | public void setUsername(String username) |
| | | { |
| | | this.username = username; |
| | | } |
| | | |
| | | public Long getLoginTime() |
| | | { |
| | | return loginTime; |
| | | } |
| | | |
| | | public void setLoginTime(Long loginTime) |
| | | { |
| | | this.loginTime = loginTime; |
| | | } |
| | | |
| | | public Long getExpireTime() |
| | | { |
| | | return expireTime; |
| | | } |
| | | |
| | | public void setExpireTime(Long expireTime) |
| | | { |
| | | this.expireTime = expireTime; |
| | | } |
| | | |
| | | public String getIpaddr() |
| | | { |
| | | return ipaddr; |
| | | } |
| | | |
| | | public void setIpaddr(String ipaddr) |
| | | { |
| | | this.ipaddr = ipaddr; |
| | | } |
| | | |
| | | public Set<String> getPermissions() |
| | | { |
| | | return permissions; |
| | | } |
| | | |
| | | public void setPermissions(Set<String> permissions) |
| | | { |
| | | this.permissions = permissions; |
| | | } |
| | | |
| | | public Set<String> getRoles() |
| | | { |
| | | return roles; |
| | | } |
| | | |
| | | public void setRoles(Set<String> roles) |
| | | { |
| | | this.roles = roles; |
| | | } |
| | | |
| | | public SysUser getSysUser() |
| | | { |
| | | return sysUser; |
| | | } |
| | | |
| | | public void setSysUser(SysUser sysUser) |
| | | { |
| | | this.sysUser = sysUser; |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.system.api.model; |
| | | |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | import java.io.Serializable; |
| | | |
| | | @Data |
| | | @ApiModel(value = "自动关联修理厂角色DTO") |
| | | public class SysUserRoleDTO implements Serializable { |
| | | |
| | | @ApiModelProperty(value = "用户id") |
| | | private Long userId; |
| | | @ApiModelProperty(value = "角色id") |
| | | private Long roleId; |
| | | |
| | | } |
New file |
| | |
| | | package com.ruoyi.system.api.model; |
| | | |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | import javax.validation.constraints.NotBlank; |
| | | |
| | | @Data |
| | | public class TRepairShopAdd { |
| | | @ApiModelProperty("账号") |
| | | @NotBlank(message = "账号不能为空") |
| | | private String phonenumber; |
| | | @ApiModelProperty("密码") |
| | | @NotBlank(message = "密码不能为空") |
| | | private String pwd; |
| | | |
| | | } |
New file |
| | |
| | | package com.ruoyi.system.api.model; |
| | | |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | import javax.validation.constraints.NotNull; |
| | | import java.util.List; |
| | | @Data |
| | | public class TRepairShopAddDto { |
| | | private List<TRepairShopAdd> list; |
| | | @ApiModelProperty("修理场id") |
| | | @NotNull(message = "修理厂id不能为空") |
| | | private Integer repairId; |
| | | } |
New file |
| | |
| | | com.ruoyi.system.api.factory.RemoteUserFallbackFactory |
| | | com.ruoyi.system.api.factory.RemoteLogFallbackFactory |
| | | com.ruoyi.system.api.factory.RemoteFileFallbackFactory |
| | | com.ruoyi.system.api.factory.SysUserFallbackFactory |
New file |
| | |
| | | <?xml version="1.0" encoding="UTF-8"?> |
| | | <project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
| | | xmlns="http://maven.apache.org/POM/4.0.0" |
| | | xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> |
| | | <parent> |
| | | <groupId>com.ruoyi</groupId> |
| | | <artifactId>ruoyi-api</artifactId> |
| | | <version>3.6.2</version> |
| | | </parent> |
| | | <modelVersion>4.0.0</modelVersion> |
| | | |
| | | <artifactId>ruoyi-api-study</artifactId> |
| | | |
| | | <description> |
| | | ruoyi-api-study学习端模块 |
| | | </description> |
| | | |
| | | <dependencies> |
| | | |
| | | <!-- RuoYi Common Core--> |
| | | <dependency> |
| | | <groupId>com.ruoyi</groupId> |
| | | <artifactId>ruoyi-common-core</artifactId> |
| | | <exclusions> |
| | | <exclusion> |
| | | <groupId>com.github.pagehelper</groupId> |
| | | <artifactId>pagehelper-spring-boot-starter</artifactId> |
| | | </exclusion> |
| | | </exclusions> |
| | | </dependency> |
| | | |
| | | </dependencies> |
| | | |
| | | </project> |
New file |
| | |
| | | package com.ruoyi.study.api.dto; |
| | | |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | import java.util.List; |
| | | |
| | | @Data |
| | | @ApiModel(value = "学习类型配置DTO") |
| | | public class AddStudySetDTO { |
| | | @ApiModelProperty("听音选图") |
| | | private List<StudyListenDTO> studyListen; |
| | | @ApiModelProperty("看图选音") |
| | | private List<StudyLookDTO> studyLook; |
| | | @ApiModelProperty("归纳判断") |
| | | private List<StudyInductionDTO> studyInduction; |
| | | @ApiModelProperty("有问有答") |
| | | private List<StudyAnswerDTO> studyAnswer; |
| | | @ApiModelProperty("音图相配") |
| | | private List<StudyPairDTO> studyPair; |
| | | @ApiModelProperty("自主游戏") |
| | | private GameDTO game; |
| | | @ApiModelProperty("听故事") |
| | | private StoryListenDTO storyListen; |
| | | |
| | | @ApiModelProperty("所属周目 1、2、3。。。") |
| | | private Integer week; |
| | | |
| | | @ApiModelProperty("Dayxx 自主游戏传6 听故事传7 ") |
| | | private Integer day; |
| | | @ApiModelProperty("类型1听2说3认读4阅读5练习6智能互动问答7智能识别 ") |
| | | private Integer type; |
| | | |
| | | } |
New file |
| | |
| | | package com.ruoyi.study.api.dto; |
| | | |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | @Data |
| | | @ApiModel(value = "学习类型添加周目DTO") |
| | | public class AddWeekDTO { |
| | | @ApiModelProperty("类型1=听 2=说 3=认读 4=阅读 5=练习 6=智能互动问答 7=智能识别") |
| | | private Integer type; |
| | | @ApiModelProperty("所属周目 1、2、3。。。") |
| | | private Integer week; |
| | | @ApiModelProperty("本周主题") |
| | | private String title; |
| | | } |
New file |
| | |
| | | package com.ruoyi.study.api.dto; |
| | | |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | @Data |
| | | @ApiModel(value = "学习类型自主游戏DTO") |
| | | public class GameDTO { |
| | | |
| | | @ApiModelProperty("超级听力 积分逗号隔开 第一个对应入门第二个对应中级...") |
| | | private String integral; |
| | | @ApiModelProperty("超级听力 时间逗号隔开 第一个对应入门第二个对应中级...") |
| | | private String time; |
| | | @ApiModelProperty("超级听力 题目数量") |
| | | private Integer count; |
| | | @ApiModelProperty("超级记忆存储该字段 答题时间") |
| | | private Integer answerTime; |
| | | @ApiModelProperty("超级记忆存储该字段 可获积分总数") |
| | | private Integer answerIntegral; |
| | | @ApiModelProperty("超级记忆游戏题目数量") |
| | | private Integer answerCount; |
| | | } |
New file |
| | |
| | | package com.ruoyi.study.api.dto; |
| | | |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | |
| | | @ApiModel |
| | | @Data |
| | | public class StoryDTO { |
| | | @ApiModelProperty(value = "题目id 编辑才传") |
| | | private Integer id; |
| | | @ApiModelProperty(value = "故事名称",required = true) |
| | | private String name; |
| | | @ApiModelProperty(value = "英文释义",required = true) |
| | | private String english; |
| | | @ApiModelProperty(value = "预期故事类型 传中文 多个顿号是顿号 不是逗号拼接",required = true) |
| | | private String type; |
| | | @ApiModelProperty(value = "图片",required = true) |
| | | private String img; |
| | | @ApiModelProperty(value = "正确语音",required = true) |
| | | private String right; |
| | | @ApiModelProperty(value = "错误语音 多个逗号拼接") |
| | | private String error; |
| | | |
| | | } |
New file |
| | |
| | | package com.ruoyi.study.api.dto; |
| | | |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | @Data |
| | | @ApiModel(value = "学习类型听故事DTO") |
| | | public class StoryListenDTO { |
| | | @ApiModelProperty("框架记忆故事ids 多个逗号隔开") |
| | | private String story; |
| | | @ApiModelProperty("框架记忆排序 多个逗号隔开和故事ids一一对应") |
| | | private String sort; |
| | | @ApiModelProperty("看图配音故事ids 多个逗号隔开") |
| | | private String lookStory; |
| | | @ApiModelProperty("看图配音排序 多个逗号隔开") |
| | | private String lookSort; |
| | | @ApiModelProperty("框架记忆可获积分") |
| | | private Integer integral; |
| | | @ApiModelProperty("看图配音可获积分") |
| | | private Integer lookIntegral; |
| | | } |
New file |
| | |
| | | package com.ruoyi.study.api.dto; |
| | | |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | @Data |
| | | @ApiModel(value = "学习类型有问有答DTO") |
| | | public class StudyAnswerDTO { |
| | | @ApiModelProperty("可获积分") |
| | | private Integer integral; |
| | | @ApiModelProperty("问题题目id") |
| | | private Integer subject; |
| | | @ApiModelProperty("回答题目id") |
| | | private Integer answerSubject; |
| | | @ApiModelProperty("问题题目是否为设置为答案图片 0否1是 为0 那么回答题目是答案图片") |
| | | private Integer isAnswer; |
| | | } |
New file |
| | |
| | | package com.ruoyi.study.api.dto; |
| | | |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | @Data |
| | | @ApiModel(value = "学习类型管理查询DTO") |
| | | public class StudyDTO { |
| | | @ApiModelProperty("类型1=听 2=说 3=认读 4=阅读 5=练习 6=智能互动问答 7=智能识别") |
| | | private Integer type; |
| | | @ApiModelProperty("所属周目 1、2、3。。。") |
| | | private Integer week; |
| | | @ApiModelProperty("Day1、2、3、4、5 6=自主游戏 7=听故事") |
| | | private Integer day; |
| | | } |
New file |
| | |
| | | package com.ruoyi.study.api.dto; |
| | | |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | @Data |
| | | @ApiModel(value = "学习类型归纳判断DTO") |
| | | public class StudyInductionDTO { |
| | | @ApiModelProperty("一共传六个题目id 逗号隔开,设置为答题选项的题目id前添加一个负号例如 1,2,3,-5,6,7") |
| | | private String subject; |
| | | @ApiModelProperty("完成答题可获积分") |
| | | private Integer integral; |
| | | } |
New file |
| | |
| | | package com.ruoyi.study.api.dto; |
| | | |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | @Data |
| | | @ApiModel(value = "学习类型听音选图DTO") |
| | | public class StudyListenDTO { |
| | | @ApiModelProperty("题目ids 逗号隔开") |
| | | private String subject; |
| | | @ApiModelProperty("完成答题可获积分") |
| | | private Integer integral; |
| | | } |
New file |
| | |
| | | package com.ruoyi.study.api.dto; |
| | | |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | @Data |
| | | @ApiModel(value = "学习类型看图选音DTO") |
| | | public class StudyLookDTO { |
| | | @ApiModelProperty("题目ids 逗号隔开 和排序一一对应") |
| | | private String subject; |
| | | @ApiModelProperty("排序ids 逗号隔开 和题目一一对应") |
| | | private String sort; |
| | | @ApiModelProperty("可获积分") |
| | | private Integer integral; |
| | | } |
New file |
| | |
| | | package com.ruoyi.study.api.dto; |
| | | |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | @Data |
| | | @ApiModel(value = "学习类型音图相配DTO") |
| | | public class StudyPairDTO { |
| | | @ApiModelProperty("题目ids 逗号隔开") |
| | | private String subject; |
| | | @ApiModelProperty("可获积分") |
| | | private Integer integral; |
| | | |
| | | |
| | | } |
New file |
| | |
| | | package com.ruoyi.study.api.dto; |
| | | |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | |
| | | @ApiModel |
| | | @Data |
| | | public class SubjectDTO { |
| | | @ApiModelProperty(value = "题目id 编辑才传") |
| | | private Integer id; |
| | | @ApiModelProperty(value = "题目名称",required = true) |
| | | private String name; |
| | | @ApiModelProperty(value = "英文释义",required = true) |
| | | private String english; |
| | | @ApiModelProperty(value = "预期题目类型 传中文 多个顿号是顿号 不是逗号拼接",required = true) |
| | | private String type; |
| | | @ApiModelProperty(value = "图片",required = true) |
| | | private String img; |
| | | @ApiModelProperty(value = "正确语音",required = true) |
| | | private String right; |
| | | @ApiModelProperty(value = "错误语音 多个逗号拼接") |
| | | private String error; |
| | | |
| | | } |
New file |
| | |
| | | package com.ruoyi.study.api.dto; |
| | | |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | |
| | | @ApiModel |
| | | @Data |
| | | public class SubjectQuery { |
| | | @ApiModelProperty(value = "题目名称") |
| | | private String name; |
| | | @ApiModelProperty(value = "英文释义") |
| | | private String english; |
| | | @ApiModelProperty(value = "预期题目类型 传数字1、2、3、4、5") |
| | | private String type; |
| | | @ApiModelProperty(value = "题目状态 1上架2下架") |
| | | private Integer state; |
| | | @ApiModelProperty(value = "页码,首页1", required = true) |
| | | private Integer pageNumber; |
| | | @ApiModelProperty(value = "页条数", required = true) |
| | | private Integer pageSize; |
| | | } |
New file |
| | |
| | | package com.ruoyi.study.api.dto; |
| | | |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | |
| | | @ApiModel |
| | | @Data |
| | | public class UserInfoQuery { |
| | | @ApiModelProperty(value = "用户id") |
| | | private Integer id; |
| | | @ApiModelProperty(value = "页码,首页1", required = true) |
| | | private Integer pageNumber; |
| | | @ApiModelProperty(value = "页条数", required = true) |
| | | private Integer pageSize; |
| | | } |
New file |
| | |
| | | package com.ruoyi.study.api.factory; |
| | | |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.common.core.web.page.PageInfo; |
| | | import com.ruoyi.study.api.dto.*; |
| | | import com.ruoyi.study.api.feignClient.StudyClient; |
| | | import com.ruoyi.study.api.model.TStory; |
| | | import com.ruoyi.study.api.model.TSubject; |
| | | import com.ruoyi.study.api.vo.*; |
| | | import com.ruoyi.study.api.vo.StudyDTO; |
| | | import org.springframework.cloud.openfeign.FallbackFactory; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import java.util.List; |
| | | |
| | | @Component |
| | | public class StudyFallbackFactory implements FallbackFactory<StudyClient> { |
| | | |
| | | @Override |
| | | public StudyClient create(Throwable cause) { |
| | | return new StudyClient() { |
| | | @Override |
| | | public R<PageInfo<TStory>> storyList(ChoiceStory query) { |
| | | return R.fail("选择故事列表获取失败" + cause.getMessage()); |
| | | } |
| | | |
| | | @Override |
| | | public R<PageInfo<TSubject>> subjectList(ChoiceSubject query) { |
| | | return R.fail("选择题目列表获取失败" + cause.getMessage()); |
| | | } |
| | | |
| | | @Override |
| | | public R<Object> addStudySet(AddStudySetDTO dto) { |
| | | return R.fail("新增或修改学习类型配置失败" + cause.getMessage()); |
| | | } |
| | | |
| | | @Override |
| | | public R<StudyVO> getStudySet(StudyDTO dto) { |
| | | return R.fail("获取后台学习配置失败" + cause.getMessage()); |
| | | } |
| | | |
| | | @Override |
| | | public R<List<StudyListVO>> getStudyList() { |
| | | return R.fail("获取后台学习类型列表失败" + cause.getMessage()); |
| | | } |
| | | |
| | | @Override |
| | | public R<Object> addWeek(AddWeekDTO dto) { |
| | | return R.fail("添加周目失败" + cause.getMessage()); |
| | | } |
| | | |
| | | @Override |
| | | public R<PageInfo<SubjectVO>> subjectList(SubjectQuery query) { |
| | | return R.fail("获取题目列表失败" + cause.getMessage()); |
| | | } |
| | | |
| | | @Override |
| | | public R add(SubjectDTO dto) { |
| | | return R.fail("添加题目失败" + cause.getMessage()); |
| | | } |
| | | |
| | | @Override |
| | | public R update(SubjectDTO dto) { |
| | | return R.fail("修改题目失败" + cause.getMessage()); |
| | | } |
| | | |
| | | @Override |
| | | public R<SubjectDTO> getInfo(Integer id) { |
| | | return R.fail("获取题目详情失败" + cause.getMessage()); |
| | | } |
| | | |
| | | @Override |
| | | public R updateState(Integer id, Integer state) { |
| | | return R.fail("修改题目状态失败" + cause.getMessage()); |
| | | } |
| | | |
| | | @Override |
| | | public R<PageInfo<SubjectVO>> storyList(SubjectQuery query) { |
| | | return R.fail("获取故事列表失败" + cause.getMessage()); |
| | | } |
| | | |
| | | @Override |
| | | public R add(StoryDTO dto) { |
| | | return R.fail("添加故事失败" + cause.getMessage()); |
| | | } |
| | | |
| | | @Override |
| | | public R update(StoryDTO dto) { |
| | | return R.fail("修改故事失败" + cause.getMessage()); |
| | | } |
| | | |
| | | @Override |
| | | public R<StoryDTO> getInfo1(Integer id) { |
| | | return R.fail("获取故事详情失败" + cause.getMessage()); |
| | | } |
| | | |
| | | @Override |
| | | public R updateState1(Integer id, Integer state) { |
| | | return R.fail("修改故事状态失败" + cause.getMessage()); |
| | | } |
| | | }; |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.study.api.feignClient; |
| | | |
| | | import com.ruoyi.common.core.constant.ServiceNameConstants; |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.common.core.web.page.PageInfo; |
| | | import com.ruoyi.study.api.dto.*; |
| | | import com.ruoyi.study.api.factory.StudyFallbackFactory; |
| | | import com.ruoyi.study.api.model.TStory; |
| | | import com.ruoyi.study.api.model.TSubject; |
| | | import com.ruoyi.study.api.vo.StudyDTO; |
| | | import com.ruoyi.study.api.vo.*; |
| | | import org.springframework.cloud.openfeign.FeignClient; |
| | | import org.springframework.web.bind.annotation.PathVariable; |
| | | import org.springframework.web.bind.annotation.PostMapping; |
| | | import org.springframework.web.bind.annotation.RequestBody; |
| | | import org.springframework.web.bind.annotation.RequestParam; |
| | | |
| | | import java.util.List; |
| | | |
| | | @FeignClient(contextId = "studyClient", value = ServiceNameConstants.STUDY_SERVICE, fallbackFactory = StudyFallbackFactory.class) |
| | | public interface StudyClient { |
| | | |
| | | |
| | | /** |
| | | * 选择故事列表查询 |
| | | * @param query |
| | | * @return |
| | | */ |
| | | @PostMapping("/base/study/storyList") |
| | | R<PageInfo<TStory>> storyList(@RequestBody ChoiceStory query); |
| | | /** |
| | | * 选择题目列表查询 |
| | | * @param query |
| | | * @return |
| | | */ |
| | | @PostMapping("/base/study/subjectList") |
| | | R<PageInfo<TSubject>> subjectList(@RequestBody ChoiceSubject query); |
| | | /** |
| | | * 新增/修改学习类型配置 |
| | | * @return |
| | | */ |
| | | @PostMapping("/base/study/addStudySet") |
| | | R<Object> addStudySet(@RequestBody AddStudySetDTO dto); |
| | | /** |
| | | * 通过类型、周目、day查询学习配置 |
| | | * @return |
| | | */ |
| | | @PostMapping("/base/study/getStudySet") |
| | | R<StudyVO> getStudySet(@RequestBody StudyDTO dto); |
| | | /** |
| | | * 学习类型列表查询 |
| | | * @return |
| | | */ |
| | | @PostMapping("/base/study/getStudyList") |
| | | R<List<StudyListVO>> getStudyList(); |
| | | /** |
| | | * 添加周目 |
| | | * @return |
| | | */ |
| | | @PostMapping("/base/study/addWeek") |
| | | R<Object> addWeek(@RequestBody AddWeekDTO dto); |
| | | |
| | | /** |
| | | * 题目管理列表查询 |
| | | * @param query |
| | | * @return |
| | | */ |
| | | @PostMapping("/base/tSubject/subjectList") |
| | | R<PageInfo<SubjectVO>> subjectList(@RequestBody SubjectQuery query); |
| | | /** |
| | | * 题目管理添加 |
| | | * @return |
| | | */ |
| | | @PostMapping("/base/tSubject/add") |
| | | R add(@RequestBody SubjectDTO dto) ; |
| | | /** |
| | | * 题目管理编辑 |
| | | * @return |
| | | */ |
| | | @PostMapping("/base/tSubject/update") |
| | | R update(@RequestBody SubjectDTO dto); |
| | | |
| | | /** |
| | | * 查看详情 |
| | | * @param id |
| | | * @return |
| | | */ |
| | | @PostMapping("/base/tSubject/getInfo") |
| | | R<SubjectDTO> getInfo(@RequestParam("id") Integer id); |
| | | /** |
| | | * 修改题目状态 |
| | | * @param id |
| | | * @return |
| | | */ |
| | | @PostMapping("/base/tSubject/updateState/{id}/{state}") |
| | | R updateState(@PathVariable("id") Integer id, @PathVariable("state") Integer state); |
| | | |
| | | /** |
| | | * 故事管理列表查询 |
| | | * @param query |
| | | * @return |
| | | */ |
| | | @PostMapping("/base/tStory/storyList") |
| | | R<PageInfo<SubjectVO>> storyList(@RequestBody SubjectQuery query); |
| | | |
| | | /** |
| | | * 故事管理添加 |
| | | * @param dto |
| | | * @return |
| | | */ |
| | | @PostMapping("/base/tStory/add") |
| | | R add(@RequestBody StoryDTO dto); |
| | | /** |
| | | * 故事管理编辑 |
| | | * @param dto |
| | | * @return |
| | | */ |
| | | @PostMapping("/base/tStory/update") |
| | | R update(@RequestBody StoryDTO dto); |
| | | /** |
| | | * 故事管理查看详情 |
| | | * @return |
| | | */ |
| | | @PostMapping("/base/tStory/getInfo") |
| | | R<StoryDTO> getInfo1(@RequestParam("id") Integer id); |
| | | |
| | | /** |
| | | * 故事管理修改状态 |
| | | * @param id |
| | | * @param state |
| | | * @return |
| | | */ |
| | | @PostMapping("/base/tStory/updateState/{id}/{state}") |
| | | R updateState1(@PathVariable("id") Integer id,@PathVariable("state")Integer state); |
| | | } |
New file |
| | |
| | | package com.ruoyi.study.api.model; |
| | | |
| | | import com.baomidou.mybatisplus.annotation.IdType; |
| | | import com.baomidou.mybatisplus.annotation.TableId; |
| | | import com.baomidou.mybatisplus.annotation.TableName; |
| | | import com.ruoyi.common.core.web.domain.BaseModel; |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | /** |
| | | * <p> |
| | | * 故事管理 |
| | | * </p> |
| | | * |
| | | * @author 无关风月 |
| | | * @since 2024-04-26 |
| | | */ |
| | | @Data |
| | | @TableName("t_story") |
| | | @ApiModel(value = "故事") |
| | | public class TStory extends BaseModel { |
| | | private static final long serialVersionUID = 1L; |
| | | /** |
| | | * 主键id |
| | | */ |
| | | @TableId(value = "id", type = IdType.AUTO) |
| | | private Integer id; |
| | | /** |
| | | * 故事名称 |
| | | */ |
| | | @ApiModelProperty(value = "故事名称") |
| | | private String name; |
| | | /** |
| | | * 英文释义 |
| | | */ |
| | | @ApiModelProperty(value = "英文释义") |
| | | private String english; |
| | | /** |
| | | * 预期题目类型多个顿号、拼接 |
| | | */ |
| | | @ApiModelProperty(value = "预期题目类型多个顿号拼接") |
| | | private String type; |
| | | /** |
| | | * 状态1上架2下架3删除 |
| | | */ |
| | | @ApiModelProperty(value = "状态1上架2下架3删除") |
| | | private Integer state; |
| | | /** |
| | | * 图片 |
| | | */ |
| | | @ApiModelProperty(value = "状态1上架2下架3删除") |
| | | private String img; |
| | | /** |
| | | * 正确语音 |
| | | */ |
| | | @ApiModelProperty(value = "正确语音") |
| | | private String correct; |
| | | /** |
| | | * 错误语音 多个逗号拼接 这里只要填入就必须是两个 可以不填入 |
| | | */ |
| | | @ApiModelProperty(value = "错误语音 多个逗号拼接 这里只要填入就必须是两个 可以不填入") |
| | | private String error; |
| | | |
| | | } |
New file |
| | |
| | | package com.ruoyi.study.api.model; |
| | | |
| | | import com.baomidou.mybatisplus.annotation.IdType; |
| | | import com.baomidou.mybatisplus.annotation.TableId; |
| | | import com.baomidou.mybatisplus.annotation.TableName; |
| | | import com.ruoyi.common.core.web.domain.BaseModel; |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | /** |
| | | * <p> |
| | | * 题目管理 |
| | | * </p> |
| | | * |
| | | * @author 无关风月 |
| | | * @since 2024-04-26 |
| | | */ |
| | | @Data |
| | | @TableName("t_subject") |
| | | @ApiModel(value = "题目") |
| | | public class TSubject extends BaseModel { |
| | | |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | /** |
| | | * 主键 |
| | | */ |
| | | @TableId(value = "id", type = IdType.AUTO) |
| | | private Integer id; |
| | | /** |
| | | * 题目名称 |
| | | */ |
| | | @ApiModelProperty(value = "题目名称") |
| | | private String name; |
| | | /** |
| | | * 英文释义 |
| | | */ |
| | | @ApiModelProperty(value = "英文释义") |
| | | private String english; |
| | | /** |
| | | * 预期题目类型多个顿号、拼接 |
| | | */ |
| | | @ApiModelProperty(value = "预期题目类型多个顿号拼接") |
| | | private String type; |
| | | /** |
| | | * 状态1上架2下架3删除 |
| | | */ |
| | | @ApiModelProperty(value = "状态1上架2下架3删除") |
| | | private Integer state; |
| | | /** |
| | | * 图片 |
| | | */ |
| | | @ApiModelProperty(value = "状态1上架2下架3删除") |
| | | private String img; |
| | | /** |
| | | * 正确语音 |
| | | */ |
| | | @ApiModelProperty(value = "正确语音") |
| | | private String correct; |
| | | /** |
| | | * 错误语音 多个逗号拼接 这里只要填入就必须是两个 可以不填入 |
| | | */ |
| | | @ApiModelProperty(value = "错误语音 多个逗号拼接 这里只要填入就必须是两个 可以不填入") |
| | | private String error; |
| | | |
| | | } |
New file |
| | |
| | | package com.ruoyi.study.api.vo; |
| | | |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | |
| | | @ApiModel |
| | | @Data |
| | | public class ChoiceStory { |
| | | @ApiModelProperty(value = "故事名称") |
| | | private String name; |
| | | @ApiModelProperty(value = "英文释义") |
| | | private String english; |
| | | @ApiModelProperty(value = "预期故事类型 传中文") |
| | | private String type; |
| | | @ApiModelProperty(value = "选择故事类型 1= 看图配音 2=框架记忆", required = true) |
| | | private Integer storyType; |
| | | @ApiModelProperty(value = "页码,首页1", required = true) |
| | | private Integer pageNumber; |
| | | @ApiModelProperty(value = "页条数", required = true) |
| | | private Integer pageSize; |
| | | } |
New file |
| | |
| | | package com.ruoyi.study.api.vo; |
| | | |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | |
| | | @ApiModel |
| | | @Data |
| | | public class ChoiceSubject { |
| | | @ApiModelProperty(value = "题目名称") |
| | | private String name; |
| | | @ApiModelProperty(value = "英文释义") |
| | | private String english; |
| | | @ApiModelProperty(value = "预期题目类型 传中文") |
| | | private String type; |
| | | @ApiModelProperty(value = "选择题目类型 1= 听音选图 2=看图选音 3=归纳排除 4=有问有答 5= 音图相配", required = true) |
| | | private Integer studyType; |
| | | @ApiModelProperty(value = "页码,首页1", required = true) |
| | | private Integer pageNumber; |
| | | @ApiModelProperty(value = "页条数", required = true) |
| | | private Integer pageSize; |
| | | } |
New file |
| | |
| | | package com.ruoyi.study.api.vo; |
| | | |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | @Data |
| | | @ApiModel(value = "自主游戏VO") |
| | | public class GameVO { |
| | | |
| | | @ApiModelProperty(value = "超级听力 时间逗号隔开 第一个对应入门第二个对应中级...") |
| | | private String time; |
| | | @ApiModelProperty(value = "超级听力 积分逗号隔开 第一个对应入门第二个对应中级...") |
| | | private String integral; |
| | | @ApiModelProperty(value = "超级听力 题目数量") |
| | | private Integer count; |
| | | @ApiModelProperty(value = "超级记忆 答题时间") |
| | | private Integer answerTime; |
| | | @ApiModelProperty(value = "超级记忆 可获积分总数") |
| | | private Integer answerIntegral; |
| | | @ApiModelProperty(value = "超级记忆游戏题目数量") |
| | | private Integer answerCount; |
| | | } |
New file |
| | |
| | | package com.ruoyi.study.api.vo; |
| | | |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | @Data |
| | | @ApiModel(value = "听故事VO") |
| | | public class StoryVO { |
| | | @ApiModelProperty(value = "框架记忆故事名称 逗号隔开") |
| | | private String name; |
| | | @ApiModelProperty(value = "框架记忆排序 多个逗号隔开和故事ids一一对应") |
| | | private String sort; |
| | | @ApiModelProperty(value = "框架记忆可获积分") |
| | | private Integer integral; |
| | | @ApiModelProperty(value = "看图配音故事名称 逗号隔开") |
| | | private String lookName; |
| | | @ApiModelProperty(value = "框架记忆排序 多个逗号隔开和故事ids一一对应") |
| | | private String lookSort; |
| | | @ApiModelProperty(value = "看图配音可获积分") |
| | | private Integer lookIntegral; |
| | | |
| | | |
| | | } |
New file |
| | |
| | | package com.ruoyi.study.api.vo; |
| | | |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | @Data |
| | | @ApiModel(value = "有问有答VO") |
| | | public class StudyAnswerVO { |
| | | @ApiModelProperty(value = "题组名称 逗号隔开 带负号为被答题图片 (状态为答案图片) 第一个是问题的题组名称 第二个是回答的题组名称") |
| | | private String name; |
| | | @ApiModelProperty(value = "可获积分") |
| | | private Integer integral; |
| | | @ApiModelProperty(value = "题目类型 1 = 问题 2=回答") |
| | | private Integer type; |
| | | } |
New file |
| | |
| | | package com.ruoyi.study.api.vo; |
| | | |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | @Data |
| | | @ApiModel(value = "学习类型管理查询DTO") |
| | | public class StudyDTO { |
| | | @ApiModelProperty("类型1=听 2=说 3=认读 4=阅读 5=练习 6=智能互动问答 7=智能识别") |
| | | private Integer type; |
| | | @ApiModelProperty("所属周目 1、2、3。。。") |
| | | private Integer week; |
| | | @ApiModelProperty("Day1、2、3、4、5 6=自主游戏 7=听故事") |
| | | private Integer day; |
| | | } |
New file |
| | |
| | | package com.ruoyi.study.api.vo; |
| | | |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | @Data |
| | | @ApiModel(value = "归纳排除VO") |
| | | public class StudyInductionVO { |
| | | @ApiModelProperty(value = "题组名称 逗号隔开 带负号为答题选项 返回的是6个 前三个为第一题 第四第五为第二题 最后一个为最后一题") |
| | | private String name; |
| | | @ApiModelProperty(value = "可获积分") |
| | | private Integer integral; |
| | | } |
New file |
| | |
| | | package com.ruoyi.study.api.vo; |
| | | |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | @Data |
| | | @ApiModel(value = "学习类型列表VO") |
| | | public class StudyListVO { |
| | | |
| | | @ApiModelProperty(value = "总周目 第一条数据对应听 第二条数据对应说以此类推") |
| | | private Integer weeks; |
| | | @ApiModelProperty(value = "已开始人数 第一条数据对应听 第二条数据对应说以此类推") |
| | | private Integer count; |
| | | |
| | | public StudyListVO() { |
| | | } |
| | | |
| | | public StudyListVO(Integer weeks, Integer count) { |
| | | this.weeks = weeks; |
| | | this.count = count; |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.study.api.vo; |
| | | |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | @Data |
| | | @ApiModel(value = "听音选图VO") |
| | | public class StudyListenVO { |
| | | @ApiModelProperty(value = "题组名称 逗号隔开") |
| | | private String name; |
| | | @ApiModelProperty(value = "可获积分") |
| | | private Integer integral; |
| | | } |
New file |
| | |
| | | package com.ruoyi.study.api.vo; |
| | | |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | @Data |
| | | @ApiModel(value = "看音选图VO") |
| | | public class StudyLookVO { |
| | | @ApiModelProperty(value = "题组名称 逗号隔开") |
| | | private String name; |
| | | @ApiModelProperty(value = "可获积分") |
| | | private Integer integral; |
| | | @ApiModelProperty(value = "排序 逗号隔开 与题组名称位置对应") |
| | | private String sort; |
| | | } |
New file |
| | |
| | | package com.ruoyi.study.api.vo; |
| | | |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | @Data |
| | | @ApiModel(value = "音图相配VO") |
| | | public class StudyPairVO { |
| | | @ApiModelProperty(value = "题组名称 逗号隔开") |
| | | private String name; |
| | | @ApiModelProperty(value = "可获积分") |
| | | private Integer integral; |
| | | } |
New file |
| | |
| | | package com.ruoyi.study.api.vo; |
| | | |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | import java.util.List; |
| | | |
| | | @Data |
| | | @ApiModel |
| | | public class StudyVO { |
| | | @ApiModelProperty(value = "本周主题") |
| | | private String title; |
| | | @ApiModelProperty(value = "已学习人数") |
| | | private Integer count; |
| | | @ApiModelProperty(value = "已有周目数量 例如5 那么就是第一周到第五周都有") |
| | | private Integer weeks; |
| | | @ApiModelProperty(value = "听音选图") |
| | | private List<StudyListenVO> listen; |
| | | @ApiModelProperty(value = "归纳排除") |
| | | private List<StudyInductionVO> induction; |
| | | @ApiModelProperty(value = "有问有答") |
| | | private List<StudyAnswerVO> answer; |
| | | @ApiModelProperty(value = "看图选音") |
| | | private List<StudyLookVO> look; |
| | | @ApiModelProperty(value = "音图相配") |
| | | private List<StudyPairVO> pair; |
| | | @ApiModelProperty(value = "自主游戏") |
| | | private List<GameVO> game; |
| | | @ApiModelProperty(value = "听故事") |
| | | private List<StoryVO> story; |
| | | |
| | | } |
New file |
| | |
| | | package com.ruoyi.study.api.vo; |
| | | |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | @Data |
| | | @ApiModel("故事/题目管理列表查询返回VO") |
| | | public class SubjectVO { |
| | | @ApiModelProperty(value = "题目名称") |
| | | private String name; |
| | | @ApiModelProperty(value = "英文释义") |
| | | private String english; |
| | | @ApiModelProperty(value = "预期题目类型") |
| | | private String type; |
| | | @ApiModelProperty(value = "题目状态 1=上架 2=下架") |
| | | private Integer state; |
| | | } |
New file |
| | |
| | | package com.ruoyi.study.api.vo; |
| | | |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | @Data |
| | | @ApiModel(value = "游戏数据VO") |
| | | public class UserGameRecordVO { |
| | | @ApiModelProperty(value = "游戏时间") |
| | | private Integer time; |
| | | @ApiModelProperty(value = "游戏名称") |
| | | private String gameName; |
| | | @ApiModelProperty(value = "用时时间") |
| | | private String useTime; |
| | | @ApiModelProperty(value = "正确率") |
| | | private String accuracy; |
| | | } |
New file |
| | |
| | | package com.ruoyi.study.api.vo; |
| | | |
| | | import com.ruoyi.common.core.web.page.PageInfo; |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | @Data |
| | | @ApiModel(value = "用户详情VO") |
| | | public class UserInfoVO { |
| | | @ApiModelProperty(value = "用户状态 1正常 2冻结") |
| | | private Integer state; |
| | | @ApiModelProperty(value = "用户名称") |
| | | private String name; |
| | | @ApiModelProperty(value = "电话") |
| | | private String phone; |
| | | @ApiModelProperty(value = "注册时间") |
| | | private String insertTime; |
| | | @ApiModelProperty(value = "是否是会员 0否1是") |
| | | private Integer isVip; |
| | | @ApiModelProperty(value = "成为会员时间 没有则为空") |
| | | private String vipPayTime; |
| | | @ApiModelProperty(value = "剩余积分") |
| | | private Integer integral; |
| | | @ApiModelProperty(value = "当前进度") |
| | | private Integer current; |
| | | @ApiModelProperty(value = "剩余进度") |
| | | private Integer surplus; |
| | | @ApiModelProperty(value = "学习总时长") |
| | | private Double totalHours; |
| | | @ApiModelProperty(value = "今日学习时长") |
| | | private Double todayHours; |
| | | @ApiModelProperty(value = "本周学习时长") |
| | | private Double weekHours; |
| | | @ApiModelProperty(value = "本月学习时长") |
| | | private Double monthHours; |
| | | @ApiModelProperty(value = "游戏数据列表") |
| | | private PageInfo<UserGameRecordVO> gameRecords; |
| | | } |
New file |
| | |
| | | com.ruoyi.study.api.factory.StudyFallbackFactory |
New file |
| | |
| | | <?xml version="1.0" encoding="UTF-8"?> |
| | | <project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
| | | xmlns="http://maven.apache.org/POM/4.0.0" |
| | | xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> |
| | | <parent> |
| | | <groupId>com.ruoyi</groupId> |
| | | <artifactId>ruoyi-api</artifactId> |
| | | <version>3.6.2</version> |
| | | </parent> |
| | | <modelVersion>4.0.0</modelVersion> |
| | | |
| | | <artifactId>ruoyi-api-system</artifactId> |
| | | |
| | | <description> |
| | | ruoyi-api-system系统接口模块 |
| | | </description> |
| | | |
| | | <dependencies> |
| | | |
| | | <!-- RuoYi Common Core--> |
| | | <dependency> |
| | | <groupId>com.ruoyi</groupId> |
| | | <artifactId>ruoyi-common-core</artifactId> |
| | | <exclusions> |
| | | <exclusion> |
| | | <groupId>com.github.pagehelper</groupId> |
| | | <artifactId>pagehelper-spring-boot-starter</artifactId> |
| | | </exclusion> |
| | | </exclusions> |
| | | </dependency> |
| | | |
| | | </dependencies> |
| | | |
| | | </project> |
New file |
| | |
| | | package com.ruoyi.system.api; |
| | | |
| | | import org.springframework.cloud.openfeign.FeignClient; |
| | | import org.springframework.http.MediaType; |
| | | import org.springframework.web.bind.annotation.PostMapping; |
| | | import org.springframework.web.bind.annotation.RequestPart; |
| | | import org.springframework.web.multipart.MultipartFile; |
| | | import com.ruoyi.common.core.constant.ServiceNameConstants; |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.system.api.domain.SysFile; |
| | | import com.ruoyi.system.api.factory.RemoteFileFallbackFactory; |
| | | |
| | | /** |
| | | * 文件服务 |
| | | * |
| | | * @author ruoyi |
| | | */ |
| | | @FeignClient(contextId = "remoteFileService", value = ServiceNameConstants.FILE_SERVICE, fallbackFactory = RemoteFileFallbackFactory.class) |
| | | public interface RemoteFileService |
| | | { |
| | | /** |
| | | * 上传文件 |
| | | * |
| | | * @param file 文件信息 |
| | | * @return 结果 |
| | | */ |
| | | @PostMapping(value = "/upload", consumes = MediaType.MULTIPART_FORM_DATA_VALUE) |
| | | public R<SysFile> upload(@RequestPart(value = "file") MultipartFile file); |
| | | } |
New file |
| | |
| | | package com.ruoyi.system.api; |
| | | |
| | | import org.springframework.cloud.openfeign.FeignClient; |
| | | import org.springframework.web.bind.annotation.PostMapping; |
| | | import org.springframework.web.bind.annotation.RequestBody; |
| | | import org.springframework.web.bind.annotation.RequestHeader; |
| | | import com.ruoyi.common.core.constant.SecurityConstants; |
| | | import com.ruoyi.common.core.constant.ServiceNameConstants; |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.system.api.domain.SysLogininfor; |
| | | import com.ruoyi.system.api.domain.SysOperLog; |
| | | import com.ruoyi.system.api.factory.RemoteLogFallbackFactory; |
| | | |
| | | /** |
| | | * 日志服务 |
| | | * |
| | | * @author ruoyi |
| | | */ |
| | | @FeignClient(contextId = "remoteLogService", value = ServiceNameConstants.SYSTEM_SERVICE, fallbackFactory = RemoteLogFallbackFactory.class) |
| | | public interface RemoteLogService |
| | | { |
| | | /** |
| | | * 保存系统日志 |
| | | * |
| | | * @param sysOperLog 日志实体 |
| | | * @param source 请求来源 |
| | | * @return 结果 |
| | | */ |
| | | @PostMapping("/operlog") |
| | | public R<Boolean> saveLog(@RequestBody SysOperLog sysOperLog, @RequestHeader(SecurityConstants.FROM_SOURCE) String source) throws Exception; |
| | | |
| | | /** |
| | | * 保存访问记录 |
| | | * |
| | | * @param sysLogininfor 访问实体 |
| | | * @param source 请求来源 |
| | | * @return 结果 |
| | | */ |
| | | @PostMapping("/logininfor") |
| | | public R<Boolean> saveLogininfor(@RequestBody SysLogininfor sysLogininfor, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); |
| | | } |
New file |
| | |
| | | package com.ruoyi.system.api; |
| | | |
| | | import org.springframework.cloud.openfeign.FeignClient; |
| | | import org.springframework.web.bind.annotation.GetMapping; |
| | | import org.springframework.web.bind.annotation.PathVariable; |
| | | import org.springframework.web.bind.annotation.PostMapping; |
| | | import org.springframework.web.bind.annotation.RequestBody; |
| | | import org.springframework.web.bind.annotation.RequestHeader; |
| | | import com.ruoyi.common.core.constant.SecurityConstants; |
| | | import com.ruoyi.common.core.constant.ServiceNameConstants; |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.system.api.domain.SysUser; |
| | | import com.ruoyi.system.api.factory.RemoteUserFallbackFactory; |
| | | import com.ruoyi.system.api.model.LoginUser; |
| | | |
| | | /** |
| | | * 用户服务 |
| | | * |
| | | * @author ruoyi |
| | | */ |
| | | @FeignClient(contextId = "remoteUserService", value = ServiceNameConstants.SYSTEM_SERVICE, fallbackFactory = RemoteUserFallbackFactory.class) |
| | | public interface RemoteUserService |
| | | { |
| | | /** |
| | | * 通过用户名查询用户信息 |
| | | * |
| | | * @param username 用户名 |
| | | * @param source 请求来源 |
| | | * @return 结果 |
| | | */ |
| | | @GetMapping("/user/info/{username}") |
| | | public R<LoginUser> getUserInfo(@PathVariable("username") String username, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); |
| | | |
| | | /** |
| | | * 注册用户信息 |
| | | * |
| | | * @param sysUser 用户信息 |
| | | * @param source 请求来源 |
| | | * @return 结果 |
| | | */ |
| | | @PostMapping("/user/register") |
| | | public R<Boolean> registerUserInfo(@RequestBody SysUser sysUser, @RequestHeader(SecurityConstants.FROM_SOURCE) String source); |
| | | } |
New file |
| | |
| | | package com.ruoyi.system.api.config; |
| | | |
| | | import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.apache.ibatis.reflection.MetaObject; |
| | | import org.springframework.context.annotation.Configuration; |
| | | |
| | | /** |
| | | * @author xiaochen |
| | | * @ClassName DataUpdateInterceptor |
| | | * @Description 数据更新操作处理 |
| | | * @date 2021-12-15 |
| | | * <p> |
| | | * 注意,之前在此处注入了 JwtTokenUtils |
| | | * <p> |
| | | * 造成spring循环依赖,项目支棱不起来 |
| | | */ |
| | | @Slf4j |
| | | @Configuration |
| | | public class DataUpdateHandlerConfig implements MetaObjectHandler { |
| | | |
| | | @Override |
| | | public void insertFill(MetaObject metaObject) { |
| | | |
| | | } |
| | | |
| | | @Override |
| | | public void updateFill(MetaObject metaObject) { |
| | | |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.system.api.config; |
| | | |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.boot.web.client.RestTemplateBuilder; |
| | | import org.springframework.context.annotation.Bean; |
| | | import org.springframework.context.annotation.Configuration; |
| | | import org.springframework.web.client.RestTemplate; |
| | | |
| | | /** |
| | | * http请求工具配置 |
| | | * |
| | | * @author: KingKong |
| | | * @create: 2018-11-14 10:47 |
| | | **/ |
| | | @Configuration |
| | | public class HttpConfig { |
| | | |
| | | @Autowired |
| | | private RestTemplateBuilder builder; |
| | | |
| | | @Bean |
| | | public RestTemplate restTemplate() { |
| | | return builder.build(); |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.system.api.config; |
| | | |
| | | import com.baomidou.mybatisplus.annotation.DbType; |
| | | import com.baomidou.mybatisplus.core.config.GlobalConfig; |
| | | import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; |
| | | import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.context.annotation.Bean; |
| | | import org.springframework.context.annotation.Configuration; |
| | | |
| | | /** |
| | | * @author xiaochen |
| | | * @ClassName MybatisPlusConfig |
| | | * @Description MybatisPlus相关配置 |
| | | * @date 2020-09-22 11:22、 |
| | | * 直接以实现类作为bean的注入(有事务管理的类) |
| | | * @EnableTransactionManagement(proxyTargetClass = true) |
| | | */ |
| | | @Configuration |
| | | public class MybatisPlusConfig { |
| | | private final DataUpdateHandlerConfig dataUpdateHandler; |
| | | |
| | | @Autowired |
| | | public MybatisPlusConfig(DataUpdateHandlerConfig dataUpdateHandler) { |
| | | this.dataUpdateHandler = dataUpdateHandler; |
| | | } |
| | | |
| | | /** |
| | | * 新的分页插件,一缓和二缓遵循mybatis的规则,需要设置 MybatisConfiguration#useDeprecatedExecutor = false 避免缓存出现问题 |
| | | */ |
| | | @Bean |
| | | public MybatisPlusInterceptor mybatisPlusInterceptor() { |
| | | MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); |
| | | interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); |
| | | return interceptor; |
| | | } |
| | | |
| | | /** |
| | | * 自动填充功能 |
| | | * |
| | | * @return |
| | | */ |
| | | @Bean |
| | | public GlobalConfig globalConfig() { |
| | | GlobalConfig globalConfig = new GlobalConfig(); |
| | | globalConfig.setMetaObjectHandler(dataUpdateHandler); |
| | | return globalConfig; |
| | | } |
| | | |
| | | |
| | | } |
New file |
| | |
| | | package com.ruoyi.system.api.domain; |
| | | |
| | | import com.ruoyi.common.core.web.domain.BaseEntity; |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | import org.apache.commons.lang3.builder.ToStringBuilder; |
| | | import org.apache.commons.lang3.builder.ToStringStyle; |
| | | |
| | | import javax.validation.constraints.Size; |
| | | import java.util.Date; |
| | | |
| | | /** |
| | | * 部门表 sys_dept |
| | | * |
| | | * @author ruoyi |
| | | */ |
| | | @ApiModel(value = "部门列表===用字段deptName和createTime1") |
| | | @Data |
| | | public class SysDept extends BaseEntity |
| | | { |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | /** 部门ID */ |
| | | @ApiModelProperty(value = "部门ID") |
| | | private Long deptId; |
| | | |
| | | /** 部门名称 */ |
| | | @ApiModelProperty(value = "部门名称") |
| | | private String deptName; |
| | | @ApiModelProperty(value = "创建时间") |
| | | private String createTime1; |
| | | |
| | | public String getCreateTime1() { |
| | | return createTime1; |
| | | } |
| | | |
| | | public void setCreateTime1(String createTime1) { |
| | | this.createTime1 = createTime1; |
| | | } |
| | | |
| | | @Override |
| | | public Date getCreateTime() { |
| | | return createTime; |
| | | } |
| | | |
| | | @Override |
| | | public void setCreateTime(Date createTime) { |
| | | this.createTime = createTime; |
| | | } |
| | | |
| | | private Date createTime; |
| | | |
| | | /** 删除标志(0代表存在 2代表删除) */ |
| | | private String delFlag; |
| | | |
| | | |
| | | |
| | | |
| | | public Long getDeptId() |
| | | { |
| | | return deptId; |
| | | } |
| | | |
| | | public void setDeptId(Long deptId) |
| | | { |
| | | this.deptId = deptId; |
| | | } |
| | | |
| | | |
| | | |
| | | |
| | | @Size(min = 0, max = 30, message = "部门名称长度不能超过30个字符") |
| | | public String getDeptName() |
| | | { |
| | | return deptName; |
| | | } |
| | | |
| | | public void setDeptName(String deptName) |
| | | { |
| | | this.deptName = deptName; |
| | | } |
| | | |
| | | |
| | | public String getDelFlag() |
| | | { |
| | | return delFlag; |
| | | } |
| | | |
| | | public void setDelFlag(String delFlag) |
| | | { |
| | | this.delFlag = delFlag; |
| | | } |
| | | |
| | | public String toString() { |
| | | return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) |
| | | .append("deptId", getDeptId()) |
| | | .append("deptName", getDeptName()) |
| | | .append("delFlag", getDelFlag()) |
| | | .append("createBy", getCreateBy()) |
| | | .append("createTime", getCreateTime()) |
| | | .append("updateBy", getUpdateBy()) |
| | | .append("updateTime", getUpdateTime()) |
| | | .toString(); |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.system.api.domain; |
| | | |
| | | import javax.validation.constraints.NotBlank; |
| | | import javax.validation.constraints.Size; |
| | | import org.apache.commons.lang3.builder.ToStringBuilder; |
| | | import org.apache.commons.lang3.builder.ToStringStyle; |
| | | import com.ruoyi.common.core.annotation.Excel; |
| | | import com.ruoyi.common.core.annotation.Excel.ColumnType; |
| | | import com.ruoyi.common.core.constant.UserConstants; |
| | | import com.ruoyi.common.core.web.domain.BaseEntity; |
| | | |
| | | /** |
| | | * 字典数据表 sys_dict_data |
| | | * |
| | | * @author ruoyi |
| | | */ |
| | | public class SysDictData extends BaseEntity |
| | | { |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | /** 字典编码 */ |
| | | @Excel(name = "字典编码", cellType = ColumnType.NUMERIC) |
| | | private Long dictCode; |
| | | |
| | | /** 字典排序 */ |
| | | @Excel(name = "字典排序", cellType = ColumnType.NUMERIC) |
| | | private Long dictSort; |
| | | |
| | | /** 字典标签 */ |
| | | @Excel(name = "字典标签") |
| | | private String dictLabel; |
| | | |
| | | /** 字典键值 */ |
| | | @Excel(name = "字典键值") |
| | | private String dictValue; |
| | | |
| | | /** 字典类型 */ |
| | | @Excel(name = "字典类型") |
| | | private String dictType; |
| | | |
| | | /** 样式属性(其他样式扩展) */ |
| | | private String cssClass; |
| | | |
| | | /** 表格字典样式 */ |
| | | private String listClass; |
| | | |
| | | /** 是否默认(Y是 N否) */ |
| | | @Excel(name = "是否默认", readConverterExp = "Y=是,N=否") |
| | | private String isDefault; |
| | | |
| | | /** 状态(0正常 1停用) */ |
| | | @Excel(name = "状态", readConverterExp = "0=正常,1=停用") |
| | | private String status; |
| | | |
| | | public Long getDictCode() |
| | | { |
| | | return dictCode; |
| | | } |
| | | |
| | | public void setDictCode(Long dictCode) |
| | | { |
| | | this.dictCode = dictCode; |
| | | } |
| | | |
| | | public Long getDictSort() |
| | | { |
| | | return dictSort; |
| | | } |
| | | |
| | | public void setDictSort(Long dictSort) |
| | | { |
| | | this.dictSort = dictSort; |
| | | } |
| | | |
| | | @NotBlank(message = "字典标签不能为空") |
| | | @Size(min = 0, max = 100, message = "字典标签长度不能超过100个字符") |
| | | public String getDictLabel() |
| | | { |
| | | return dictLabel; |
| | | } |
| | | |
| | | public void setDictLabel(String dictLabel) |
| | | { |
| | | this.dictLabel = dictLabel; |
| | | } |
| | | |
| | | @NotBlank(message = "字典键值不能为空") |
| | | @Size(min = 0, max = 100, message = "字典键值长度不能超过100个字符") |
| | | public String getDictValue() |
| | | { |
| | | return dictValue; |
| | | } |
| | | |
| | | public void setDictValue(String dictValue) |
| | | { |
| | | this.dictValue = dictValue; |
| | | } |
| | | |
| | | @NotBlank(message = "字典类型不能为空") |
| | | @Size(min = 0, max = 100, message = "字典类型长度不能超过100个字符") |
| | | public String getDictType() |
| | | { |
| | | return dictType; |
| | | } |
| | | |
| | | public void setDictType(String dictType) |
| | | { |
| | | this.dictType = dictType; |
| | | } |
| | | |
| | | @Size(min = 0, max = 100, message = "样式属性长度不能超过100个字符") |
| | | public String getCssClass() |
| | | { |
| | | return cssClass; |
| | | } |
| | | |
| | | public void setCssClass(String cssClass) |
| | | { |
| | | this.cssClass = cssClass; |
| | | } |
| | | |
| | | public String getListClass() |
| | | { |
| | | return listClass; |
| | | } |
| | | |
| | | public void setListClass(String listClass) |
| | | { |
| | | this.listClass = listClass; |
| | | } |
| | | |
| | | public boolean getDefault() |
| | | { |
| | | return UserConstants.YES.equals(this.isDefault); |
| | | } |
| | | |
| | | public String getIsDefault() |
| | | { |
| | | return isDefault; |
| | | } |
| | | |
| | | public void setIsDefault(String isDefault) |
| | | { |
| | | this.isDefault = isDefault; |
| | | } |
| | | |
| | | public String getStatus() |
| | | { |
| | | return status; |
| | | } |
| | | |
| | | public void setStatus(String status) |
| | | { |
| | | this.status = status; |
| | | } |
| | | |
| | | @Override |
| | | public String toString() { |
| | | return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) |
| | | .append("dictCode", getDictCode()) |
| | | .append("dictSort", getDictSort()) |
| | | .append("dictLabel", getDictLabel()) |
| | | .append("dictValue", getDictValue()) |
| | | .append("dictType", getDictType()) |
| | | .append("cssClass", getCssClass()) |
| | | .append("listClass", getListClass()) |
| | | .append("isDefault", getIsDefault()) |
| | | .append("status", getStatus()) |
| | | .append("createBy", getCreateBy()) |
| | | .append("createTime", getCreateTime()) |
| | | .append("updateBy", getUpdateBy()) |
| | | .append("updateTime", getUpdateTime()) |
| | | .append("remark", getRemark()) |
| | | .toString(); |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.system.api.domain; |
| | | |
| | | import javax.validation.constraints.NotBlank; |
| | | import javax.validation.constraints.Pattern; |
| | | import javax.validation.constraints.Size; |
| | | import org.apache.commons.lang3.builder.ToStringBuilder; |
| | | import org.apache.commons.lang3.builder.ToStringStyle; |
| | | import com.ruoyi.common.core.annotation.Excel; |
| | | import com.ruoyi.common.core.annotation.Excel.ColumnType; |
| | | import com.ruoyi.common.core.web.domain.BaseEntity; |
| | | |
| | | /** |
| | | * 字典类型表 sys_dict_type |
| | | * |
| | | * @author ruoyi |
| | | */ |
| | | public class SysDictType extends BaseEntity |
| | | { |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | /** 字典主键 */ |
| | | @Excel(name = "字典主键", cellType = ColumnType.NUMERIC) |
| | | private Long dictId; |
| | | |
| | | /** 字典名称 */ |
| | | @Excel(name = "字典名称") |
| | | private String dictName; |
| | | |
| | | /** 字典类型 */ |
| | | @Excel(name = "字典类型") |
| | | private String dictType; |
| | | |
| | | /** 状态(0正常 1停用) */ |
| | | @Excel(name = "状态", readConverterExp = "0=正常,1=停用") |
| | | private String status; |
| | | |
| | | public Long getDictId() |
| | | { |
| | | return dictId; |
| | | } |
| | | |
| | | public void setDictId(Long dictId) |
| | | { |
| | | this.dictId = dictId; |
| | | } |
| | | |
| | | @NotBlank(message = "字典名称不能为空") |
| | | @Size(min = 0, max = 100, message = "字典类型名称长度不能超过100个字符") |
| | | public String getDictName() |
| | | { |
| | | return dictName; |
| | | } |
| | | |
| | | public void setDictName(String dictName) |
| | | { |
| | | this.dictName = dictName; |
| | | } |
| | | |
| | | @NotBlank(message = "字典类型不能为空") |
| | | @Size(min = 0, max = 100, message = "字典类型类型长度不能超过100个字符") |
| | | @Pattern(regexp = "^[a-z][a-z0-9_]*$", message = "字典类型必须以字母开头,且只能为(小写字母,数字,下滑线)") |
| | | public String getDictType() |
| | | { |
| | | return dictType; |
| | | } |
| | | |
| | | public void setDictType(String dictType) |
| | | { |
| | | this.dictType = dictType; |
| | | } |
| | | |
| | | public String getStatus() |
| | | { |
| | | return status; |
| | | } |
| | | |
| | | public void setStatus(String status) |
| | | { |
| | | this.status = status; |
| | | } |
| | | |
| | | @Override |
| | | public String toString() { |
| | | return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) |
| | | .append("dictId", getDictId()) |
| | | .append("dictName", getDictName()) |
| | | .append("dictType", getDictType()) |
| | | .append("status", getStatus()) |
| | | .append("createBy", getCreateBy()) |
| | | .append("createTime", getCreateTime()) |
| | | .append("updateBy", getUpdateBy()) |
| | | .append("updateTime", getUpdateTime()) |
| | | .append("remark", getRemark()) |
| | | .toString(); |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.system.api.domain; |
| | | |
| | | import org.apache.commons.lang3.builder.ToStringBuilder; |
| | | import org.apache.commons.lang3.builder.ToStringStyle; |
| | | |
| | | /** |
| | | * 文件信息 |
| | | * |
| | | * @author ruoyi |
| | | */ |
| | | public class SysFile |
| | | { |
| | | /** |
| | | * 文件名称 |
| | | */ |
| | | private String name; |
| | | |
| | | /** |
| | | * 文件地址 |
| | | */ |
| | | private String url; |
| | | |
| | | public String getName() |
| | | { |
| | | return name; |
| | | } |
| | | |
| | | public void setName(String name) |
| | | { |
| | | this.name = name; |
| | | } |
| | | |
| | | public String getUrl() |
| | | { |
| | | return url; |
| | | } |
| | | |
| | | public void setUrl(String url) |
| | | { |
| | | this.url = url; |
| | | } |
| | | |
| | | @Override |
| | | public String toString() { |
| | | return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) |
| | | .append("name", getName()) |
| | | .append("url", getUrl()) |
| | | .toString(); |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.system.api.domain; |
| | | |
| | | import java.util.Date; |
| | | import com.fasterxml.jackson.annotation.JsonFormat; |
| | | import com.ruoyi.common.core.annotation.Excel; |
| | | import com.ruoyi.common.core.annotation.Excel.ColumnType; |
| | | import com.ruoyi.common.core.web.domain.BaseEntity; |
| | | |
| | | /** |
| | | * 系统访问记录表 sys_logininfor |
| | | * |
| | | * @author ruoyi |
| | | */ |
| | | public class SysLogininfor extends BaseEntity |
| | | { |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | /** ID */ |
| | | @Excel(name = "序号", cellType = ColumnType.NUMERIC) |
| | | private Long infoId; |
| | | |
| | | /** 用户账号 */ |
| | | @Excel(name = "用户账号") |
| | | private String userName; |
| | | |
| | | /** 状态 0成功 1失败 */ |
| | | @Excel(name = "状态", readConverterExp = "0=成功,1=失败") |
| | | private String status; |
| | | |
| | | /** 地址 */ |
| | | @Excel(name = "地址") |
| | | private String ipaddr; |
| | | |
| | | /** 描述 */ |
| | | @Excel(name = "描述") |
| | | private String msg; |
| | | |
| | | /** 访问时间 */ |
| | | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
| | | @Excel(name = "访问时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") |
| | | private Date accessTime; |
| | | |
| | | public Long getInfoId() |
| | | { |
| | | return infoId; |
| | | } |
| | | |
| | | public void setInfoId(Long infoId) |
| | | { |
| | | this.infoId = infoId; |
| | | } |
| | | |
| | | public String getUserName() |
| | | { |
| | | return userName; |
| | | } |
| | | |
| | | public void setUserName(String userName) |
| | | { |
| | | this.userName = userName; |
| | | } |
| | | |
| | | public String getStatus() |
| | | { |
| | | return status; |
| | | } |
| | | |
| | | public void setStatus(String status) |
| | | { |
| | | this.status = status; |
| | | } |
| | | |
| | | public String getIpaddr() |
| | | { |
| | | return ipaddr; |
| | | } |
| | | |
| | | public void setIpaddr(String ipaddr) |
| | | { |
| | | this.ipaddr = ipaddr; |
| | | } |
| | | |
| | | public String getMsg() |
| | | { |
| | | return msg; |
| | | } |
| | | |
| | | public void setMsg(String msg) |
| | | { |
| | | this.msg = msg; |
| | | } |
| | | |
| | | public Date getAccessTime() |
| | | { |
| | | return accessTime; |
| | | } |
| | | |
| | | public void setAccessTime(Date accessTime) |
| | | { |
| | | this.accessTime = accessTime; |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.system.api.domain; |
| | | |
| | | import java.util.Date; |
| | | import com.fasterxml.jackson.annotation.JsonFormat; |
| | | import com.ruoyi.common.core.annotation.Excel; |
| | | import com.ruoyi.common.core.annotation.Excel.ColumnType; |
| | | import com.ruoyi.common.core.web.domain.BaseEntity; |
| | | |
| | | /** |
| | | * 操作日志记录表 oper_log |
| | | * |
| | | * @author ruoyi |
| | | */ |
| | | public class SysOperLog extends BaseEntity |
| | | { |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | /** 日志主键 */ |
| | | @Excel(name = "操作序号", cellType = ColumnType.NUMERIC) |
| | | private Long operId; |
| | | |
| | | /** 操作模块 */ |
| | | @Excel(name = "操作模块") |
| | | private String title; |
| | | |
| | | /** 业务类型(0其它 1新增 2修改 3删除) */ |
| | | @Excel(name = "业务类型", readConverterExp = "0=其它,1=新增,2=修改,3=删除,4=授权,5=导出,6=导入,7=强退,8=生成代码,9=清空数据") |
| | | private Integer businessType; |
| | | |
| | | /** 业务类型数组 */ |
| | | private Integer[] businessTypes; |
| | | |
| | | /** 请求方法 */ |
| | | @Excel(name = "请求方法") |
| | | private String method; |
| | | |
| | | /** 请求方式 */ |
| | | @Excel(name = "请求方式") |
| | | private String requestMethod; |
| | | |
| | | /** 操作类别(0其它 1后台用户 2手机端用户) */ |
| | | @Excel(name = "操作类别", readConverterExp = "0=其它,1=后台用户,2=手机端用户") |
| | | private Integer operatorType; |
| | | |
| | | /** 操作人员 */ |
| | | @Excel(name = "操作人员") |
| | | private String operName; |
| | | |
| | | /** 部门名称 */ |
| | | @Excel(name = "部门名称") |
| | | private String deptName; |
| | | |
| | | /** 请求url */ |
| | | @Excel(name = "请求地址") |
| | | private String operUrl; |
| | | |
| | | /** 操作地址 */ |
| | | @Excel(name = "操作地址") |
| | | private String operIp; |
| | | |
| | | /** 请求参数 */ |
| | | @Excel(name = "请求参数") |
| | | private String operParam; |
| | | |
| | | /** 返回参数 */ |
| | | @Excel(name = "返回参数") |
| | | private String jsonResult; |
| | | |
| | | /** 操作状态(0正常 1异常) */ |
| | | @Excel(name = "状态", readConverterExp = "0=正常,1=异常") |
| | | private Integer status; |
| | | |
| | | /** 错误消息 */ |
| | | @Excel(name = "错误消息") |
| | | private String errorMsg; |
| | | |
| | | /** 操作时间 */ |
| | | @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
| | | @Excel(name = "操作时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") |
| | | private Date operTime; |
| | | |
| | | /** 消耗时间 */ |
| | | @Excel(name = "消耗时间", suffix = "毫秒") |
| | | private Long costTime; |
| | | |
| | | public Long getOperId() |
| | | { |
| | | return operId; |
| | | } |
| | | |
| | | public void setOperId(Long operId) |
| | | { |
| | | this.operId = operId; |
| | | } |
| | | |
| | | public String getTitle() |
| | | { |
| | | return title; |
| | | } |
| | | |
| | | public void setTitle(String title) |
| | | { |
| | | this.title = title; |
| | | } |
| | | |
| | | public Integer getBusinessType() |
| | | { |
| | | return businessType; |
| | | } |
| | | |
| | | public void setBusinessType(Integer businessType) |
| | | { |
| | | this.businessType = businessType; |
| | | } |
| | | |
| | | public Integer[] getBusinessTypes() |
| | | { |
| | | return businessTypes; |
| | | } |
| | | |
| | | public void setBusinessTypes(Integer[] businessTypes) |
| | | { |
| | | this.businessTypes = businessTypes; |
| | | } |
| | | |
| | | public String getMethod() |
| | | { |
| | | return method; |
| | | } |
| | | |
| | | public void setMethod(String method) |
| | | { |
| | | this.method = method; |
| | | } |
| | | |
| | | public String getRequestMethod() |
| | | { |
| | | return requestMethod; |
| | | } |
| | | |
| | | public void setRequestMethod(String requestMethod) |
| | | { |
| | | this.requestMethod = requestMethod; |
| | | } |
| | | |
| | | public Integer getOperatorType() |
| | | { |
| | | return operatorType; |
| | | } |
| | | |
| | | public void setOperatorType(Integer operatorType) |
| | | { |
| | | this.operatorType = operatorType; |
| | | } |
| | | |
| | | public String getOperName() |
| | | { |
| | | return operName; |
| | | } |
| | | |
| | | public void setOperName(String operName) |
| | | { |
| | | this.operName = operName; |
| | | } |
| | | |
| | | public String getDeptName() |
| | | { |
| | | return deptName; |
| | | } |
| | | |
| | | public void setDeptName(String deptName) |
| | | { |
| | | this.deptName = deptName; |
| | | } |
| | | |
| | | public String getOperUrl() |
| | | { |
| | | return operUrl; |
| | | } |
| | | |
| | | public void setOperUrl(String operUrl) |
| | | { |
| | | this.operUrl = operUrl; |
| | | } |
| | | |
| | | public String getOperIp() |
| | | { |
| | | return operIp; |
| | | } |
| | | |
| | | public void setOperIp(String operIp) |
| | | { |
| | | this.operIp = operIp; |
| | | } |
| | | |
| | | public String getOperParam() |
| | | { |
| | | return operParam; |
| | | } |
| | | |
| | | public void setOperParam(String operParam) |
| | | { |
| | | this.operParam = operParam; |
| | | } |
| | | |
| | | public String getJsonResult() |
| | | { |
| | | return jsonResult; |
| | | } |
| | | |
| | | public void setJsonResult(String jsonResult) |
| | | { |
| | | this.jsonResult = jsonResult; |
| | | } |
| | | |
| | | public Integer getStatus() |
| | | { |
| | | return status; |
| | | } |
| | | |
| | | public void setStatus(Integer status) |
| | | { |
| | | this.status = status; |
| | | } |
| | | |
| | | public String getErrorMsg() |
| | | { |
| | | return errorMsg; |
| | | } |
| | | |
| | | public void setErrorMsg(String errorMsg) |
| | | { |
| | | this.errorMsg = errorMsg; |
| | | } |
| | | |
| | | public Date getOperTime() |
| | | { |
| | | return operTime; |
| | | } |
| | | |
| | | public void setOperTime(Date operTime) |
| | | { |
| | | this.operTime = operTime; |
| | | } |
| | | |
| | | public Long getCostTime() |
| | | { |
| | | return costTime; |
| | | } |
| | | |
| | | public void setCostTime(Long costTime) |
| | | { |
| | | this.costTime = costTime; |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.system.api.domain; |
| | | |
| | | import com.baomidou.mybatisplus.annotation.TableField; |
| | | import com.ruoyi.common.core.annotation.Excel; |
| | | import com.ruoyi.common.core.annotation.Excel.ColumnType; |
| | | import com.ruoyi.common.core.web.domain.BaseEntity; |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | import org.apache.commons.lang3.builder.ToStringBuilder; |
| | | import org.apache.commons.lang3.builder.ToStringStyle; |
| | | |
| | | import javax.validation.constraints.NotBlank; |
| | | import javax.validation.constraints.NotNull; |
| | | import javax.validation.constraints.Size; |
| | | import java.util.Date; |
| | | import java.util.Set; |
| | | |
| | | /** |
| | | * 角色表 sys_role |
| | | * |
| | | * @author ruoyi |
| | | */ |
| | | @Data |
| | | public class SysRole extends BaseEntity |
| | | { |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | /** 角色ID */ |
| | | @Excel(name = "角色序号", cellType = ColumnType.NUMERIC) |
| | | @TableField("role_id") |
| | | @ApiModelProperty(value = "角色序号") |
| | | private Long roleId; |
| | | |
| | | /** 角色名称 */ |
| | | @Excel(name = "权限名称") |
| | | @TableField("role_name") |
| | | @ApiModelProperty(value = "权限名称") |
| | | private String roleName; |
| | | |
| | | @Excel(name = "创建时间") |
| | | @TableField("create_time") |
| | | private Date createTime; |
| | | |
| | | /** 角色权限 */ |
| | | @Excel(name = "角色权限") |
| | | @TableField("role_key") |
| | | private String roleKey; |
| | | |
| | | /** 角色排序 */ |
| | | @Excel(name = "角色排序") |
| | | @TableField("role_sort") |
| | | private Integer roleSort; |
| | | |
| | | /** 数据范围(1:所有数据权限;2:自定义数据权限;3:本部门数据权限;4:本部门及以下数据权限;5:仅本人数据权限) */ |
| | | @Excel(name = "数据范围", readConverterExp = "1=所有数据权限,2=自定义数据权限,3=本部门数据权限,4=本部门及以下数据权限,5=仅本人数据权限") |
| | | @TableField("data_scope") |
| | | private String dataScope; |
| | | |
| | | /** 菜单树选择项是否关联显示( 0:父子不互相关联显示 1:父子互相关联显示) */ |
| | | @TableField("menu_check_strictly") |
| | | private boolean menuCheckStrictly; |
| | | |
| | | /** 部门树选择项是否关联显示(0:父子不互相关联显示 1:父子互相关联显示 ) */ |
| | | @TableField("dept_check_strictly") |
| | | private boolean deptCheckStrictly; |
| | | |
| | | /** 角色状态(0正常 1停用) */ |
| | | @Excel(name = "角色状态", readConverterExp = "0=正常,1=停用") |
| | | private String status; |
| | | |
| | | /** 删除标志(0代表存在 2代表删除) */ |
| | | @TableField("del_flag") |
| | | private String delFlag; |
| | | |
| | | /** 用户是否存在此角色标识 默认不存在 */ |
| | | @TableField(exist = false) |
| | | private boolean flag = false; |
| | | |
| | | /** 菜单组 */ |
| | | @TableField(exist = false) |
| | | private Long[] menuIds; |
| | | |
| | | /** 部门组(数据权限) */ |
| | | @TableField(exist = false) |
| | | private Long[] deptIds; |
| | | |
| | | /** 角色菜单权限 */ |
| | | @TableField(exist = false) |
| | | private Set<String> permissions; |
| | | |
| | | public SysRole() |
| | | { |
| | | |
| | | } |
| | | |
| | | public SysRole(Long roleId) |
| | | { |
| | | this.roleId = roleId; |
| | | } |
| | | |
| | | |
| | | |
| | | public Long getRoleId() |
| | | { |
| | | return roleId; |
| | | } |
| | | |
| | | public void setRoleId(Long roleId) |
| | | { |
| | | this.roleId = roleId; |
| | | } |
| | | |
| | | public boolean isAdmin() |
| | | { |
| | | return isAdmin(this.roleId); |
| | | } |
| | | |
| | | public static boolean isAdmin(Long roleId) |
| | | { |
| | | return roleId != null && 1L == roleId; |
| | | } |
| | | |
| | | @NotBlank(message = "角色名称不能为空") |
| | | @Size(min = 0, max = 30, message = "角色名称长度不能超过30个字符") |
| | | public String getRoleName() |
| | | { |
| | | return roleName; |
| | | } |
| | | |
| | | public void setRoleName(String roleName) |
| | | { |
| | | this.roleName = roleName; |
| | | } |
| | | |
| | | @NotBlank(message = "权限字符不能为空") |
| | | @Size(min = 0, max = 100, message = "权限字符长度不能超过100个字符") |
| | | public String getRoleKey() |
| | | { |
| | | return roleKey; |
| | | } |
| | | |
| | | public void setRoleKey(String roleKey) |
| | | { |
| | | this.roleKey = roleKey; |
| | | } |
| | | |
| | | @NotNull(message = "显示顺序不能为空") |
| | | public Integer getRoleSort() |
| | | { |
| | | return roleSort; |
| | | } |
| | | |
| | | public void setRoleSort(Integer roleSort) |
| | | { |
| | | this.roleSort = roleSort; |
| | | } |
| | | |
| | | public String getDataScope() |
| | | { |
| | | return dataScope; |
| | | } |
| | | |
| | | public void setDataScope(String dataScope) |
| | | { |
| | | this.dataScope = dataScope; |
| | | } |
| | | |
| | | public boolean isMenuCheckStrictly() |
| | | { |
| | | return menuCheckStrictly; |
| | | } |
| | | |
| | | public void setMenuCheckStrictly(boolean menuCheckStrictly) |
| | | { |
| | | this.menuCheckStrictly = menuCheckStrictly; |
| | | } |
| | | |
| | | public boolean isDeptCheckStrictly() |
| | | { |
| | | return deptCheckStrictly; |
| | | } |
| | | |
| | | public void setDeptCheckStrictly(boolean deptCheckStrictly) |
| | | { |
| | | this.deptCheckStrictly = deptCheckStrictly; |
| | | } |
| | | |
| | | public String getStatus() |
| | | { |
| | | return status; |
| | | } |
| | | |
| | | public void setStatus(String status) |
| | | { |
| | | this.status = status; |
| | | } |
| | | |
| | | public String getDelFlag() |
| | | { |
| | | return delFlag; |
| | | } |
| | | |
| | | public void setDelFlag(String delFlag) |
| | | { |
| | | this.delFlag = delFlag; |
| | | } |
| | | |
| | | public boolean isFlag() |
| | | { |
| | | return flag; |
| | | } |
| | | |
| | | public void setFlag(boolean flag) |
| | | { |
| | | this.flag = flag; |
| | | } |
| | | |
| | | public Long[] getMenuIds() |
| | | { |
| | | return menuIds; |
| | | } |
| | | |
| | | public void setMenuIds(Long[] menuIds) |
| | | { |
| | | this.menuIds = menuIds; |
| | | } |
| | | |
| | | public Long[] getDeptIds() |
| | | { |
| | | return deptIds; |
| | | } |
| | | |
| | | public void setDeptIds(Long[] deptIds) |
| | | { |
| | | this.deptIds = deptIds; |
| | | } |
| | | |
| | | public Set<String> getPermissions() |
| | | { |
| | | return permissions; |
| | | } |
| | | |
| | | public void setPermissions(Set<String> permissions) |
| | | { |
| | | this.permissions = permissions; |
| | | } |
| | | |
| | | @Override |
| | | public String toString() { |
| | | return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) |
| | | .append("roleId", getRoleId()) |
| | | .append("roleName", getRoleName()) |
| | | .append("roleKey", getRoleKey()) |
| | | .append("roleSort", getRoleSort()) |
| | | .append("dataScope", getDataScope()) |
| | | .append("menuCheckStrictly", isMenuCheckStrictly()) |
| | | .append("deptCheckStrictly", isDeptCheckStrictly()) |
| | | .append("status", getStatus()) |
| | | .append("delFlag", getDelFlag()) |
| | | .append("createBy", getCreateBy()) |
| | | .append("createTime", getCreateTime()) |
| | | .append("updateBy", getUpdateBy()) |
| | | .append("updateTime", getUpdateTime()) |
| | | .append("remark", getRemark()) |
| | | .toString(); |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.system.api.domain; |
| | | |
| | | import com.baomidou.mybatisplus.annotation.TableField; |
| | | import com.fasterxml.jackson.annotation.JsonFormat; |
| | | import com.ruoyi.common.core.annotation.Excel; |
| | | import com.ruoyi.common.core.annotation.Excel.ColumnType; |
| | | import com.ruoyi.common.core.annotation.Excel.Type; |
| | | import com.ruoyi.common.core.annotation.Excels; |
| | | import com.ruoyi.common.core.web.domain.BaseEntity; |
| | | import com.ruoyi.common.core.xss.Xss; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | import org.apache.commons.lang3.builder.ToStringBuilder; |
| | | import org.apache.commons.lang3.builder.ToStringStyle; |
| | | import org.springframework.format.annotation.DateTimeFormat; |
| | | |
| | | import javax.validation.constraints.Email; |
| | | import javax.validation.constraints.NotBlank; |
| | | import javax.validation.constraints.Size; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * 用户对象 sys_user |
| | | * |
| | | * @author ruoyi |
| | | */ |
| | | @Data |
| | | public class SysUser extends BaseEntity |
| | | { |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | /** 用户ID */ |
| | | @Excel(name = "用户序号", cellType = ColumnType.NUMERIC, prompt = "用户编号") |
| | | @ApiModelProperty(value = "用户id") |
| | | @TableField("user_id") |
| | | private Long userId; |
| | | |
| | | /** 部门ID */ |
| | | @Excel(name = "部门id", type = Type.IMPORT) |
| | | @ApiModelProperty(value = "部门id") |
| | | @TableField("dept_id") |
| | | private Long deptId; |
| | | @ApiModelProperty(value = "所属部门") |
| | | private String deptName; |
| | | @ApiModelProperty(value = "所属权限") |
| | | private String roleName; |
| | | /** 用户账号 */ |
| | | @Excel(name = "登录名称") |
| | | @TableField("user_name") |
| | | private String userName; |
| | | |
| | | /** 用户昵称 */ |
| | | @TableField("nick_name") |
| | | @ApiModelProperty(value = "账号名称") |
| | | private String nickName; |
| | | |
| | | /** 用户邮箱 */ |
| | | @Excel(name = "用户邮箱") |
| | | private String email; |
| | | |
| | | /** 手机号码 */ |
| | | @Excel(name = "手机号码") |
| | | @ApiModelProperty(value = "联系电话") |
| | | private String phonenumber; |
| | | |
| | | /** 用户性别 */ |
| | | @Excel(name = "用户性别", readConverterExp = "0=男,1=女,2=未知") |
| | | private String sex; |
| | | |
| | | /** 用户头像 */ |
| | | private String avatar; |
| | | |
| | | /** 密码 */ |
| | | @NotBlank(message = "密码不能为空") |
| | | private String password; |
| | | |
| | | /** 帐号状态(0正常 1停用) */ |
| | | @Excel(name = "帐号状态", readConverterExp = "0=正常,1=停用") |
| | | private String status; |
| | | |
| | | /** 删除标志(0代表存在 2代表删除) */ |
| | | @TableField("del_flag") |
| | | private String delFlag; |
| | | |
| | | /** 最后登录IP */ |
| | | @Excel(name = "最后登录IP", type = Type.EXPORT) |
| | | @TableField("login_ip") |
| | | private String loginIp; |
| | | |
| | | /** 最后登录时间 */ |
| | | @Excel(name = "最后登录时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss", type = Type.EXPORT) |
| | | @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") |
| | | @TableField("login_date") |
| | | private Date loginDate; |
| | | |
| | | /** 部门对象 */ |
| | | @Excels({ |
| | | @Excel(name = "部门名称", targetAttr = "deptName", type = Type.EXPORT), |
| | | @Excel(name = "部门负责人", targetAttr = "leader", type = Type.EXPORT) |
| | | }) |
| | | @TableField(exist = false) |
| | | private SysDept dept; |
| | | |
| | | /** 角色对象 */ |
| | | @TableField(exist = false) |
| | | private List<SysRole> roles; |
| | | |
| | | /** 角色组 */ |
| | | @TableField(exist = false) |
| | | private Long[] roleIds; |
| | | |
| | | /** 岗位组 */ |
| | | @TableField(exist = false) |
| | | private Long[] postIds; |
| | | |
| | | /** 角色ID */ |
| | | @TableField(exist = false) |
| | | @ApiModelProperty(value = "角色id") |
| | | private Long roleId; |
| | | |
| | | /** |
| | | * 角色类型 1=平台 2=公司 3=门店 4=修理厂 |
| | | */ |
| | | // @ApiModelProperty(value = "角色类型 1=平台 2=公司 3=门店 4=修理厂") |
| | | private Integer roleType; |
| | | |
| | | @Excel(name = "密码修改时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss", type = Type.EXPORT) |
| | | private Date passWordUpdate; |
| | | |
| | | // @ApiModelProperty(value = "对象ID") |
| | | private Integer objectId; |
| | | |
| | | // @ApiModelProperty(value = "备注") |
| | | private String remark; |
| | | @ApiModelProperty(value = "创建时间") |
| | | @TableField("create_time") |
| | | @JsonFormat( pattern = "yyyy-MM-dd",timezone = "GMT+8") |
| | | private Date createTime; |
| | | |
| | | @Override |
| | | public String getRemark() { |
| | | return remark; |
| | | } |
| | | |
| | | @Override |
| | | public void setRemark(String remark) { |
| | | this.remark = remark; |
| | | } |
| | | |
| | | public SysUser() |
| | | { |
| | | |
| | | } |
| | | |
| | | public SysUser(Long userId) |
| | | { |
| | | this.userId = userId; |
| | | } |
| | | |
| | | public Integer getRoleType() { |
| | | return roleType; |
| | | } |
| | | |
| | | public void setRoleType(Integer roleType) { |
| | | this.roleType = roleType; |
| | | } |
| | | |
| | | public Date getPassWordUpdate() { |
| | | return passWordUpdate; |
| | | } |
| | | |
| | | public void setPassWordUpdate(Date passWordUpdate) { |
| | | this.passWordUpdate = passWordUpdate; |
| | | } |
| | | |
| | | public Integer getObjectId() { |
| | | return objectId; |
| | | } |
| | | |
| | | public void setObjectId(Integer objectId) { |
| | | this.objectId = objectId; |
| | | } |
| | | |
| | | public Long getUserId() |
| | | { |
| | | return userId; |
| | | } |
| | | |
| | | public void setUserId(Long userId) |
| | | { |
| | | this.userId = userId; |
| | | } |
| | | |
| | | public boolean isAdmin() |
| | | { |
| | | return isAdmin(this.userId); |
| | | } |
| | | |
| | | public static boolean isAdmin(Long userId) |
| | | { |
| | | return userId != null && 1L == userId; |
| | | } |
| | | |
| | | public Long getDeptId() |
| | | { |
| | | return deptId; |
| | | } |
| | | |
| | | public void setDeptId(Long deptId) |
| | | { |
| | | this.deptId = deptId; |
| | | } |
| | | |
| | | @Xss(message = "用户昵称不能包含脚本字符") |
| | | @Size(min = 0, max = 30, message = "用户昵称长度不能超过30个字符") |
| | | public String getNickName() |
| | | { |
| | | return nickName; |
| | | } |
| | | |
| | | public void setNickName(String nickName) |
| | | { |
| | | this.nickName = nickName; |
| | | } |
| | | |
| | | @Xss(message = "用户账号不能包含脚本字符") |
| | | @Size(min = 0, max = 30, message = "用户账号长度不能超过30个字符") |
| | | public String getUserName() |
| | | { |
| | | return userName; |
| | | } |
| | | |
| | | public void setUserName(String userName) |
| | | { |
| | | this.userName = userName; |
| | | } |
| | | |
| | | @Email(message = "邮箱格式不正确") |
| | | @Size(min = 0, max = 50, message = "邮箱长度不能超过50个字符") |
| | | public String getEmail() |
| | | { |
| | | return email; |
| | | } |
| | | |
| | | public void setEmail(String email) |
| | | { |
| | | this.email = email; |
| | | } |
| | | |
| | | @Size(min = 0, max = 11, message = "手机号码长度不能超过11个字符") |
| | | public String getPhonenumber() |
| | | { |
| | | return phonenumber; |
| | | } |
| | | |
| | | public void setPhonenumber(String phonenumber) |
| | | { |
| | | this.phonenumber = phonenumber; |
| | | } |
| | | |
| | | public String getSex() |
| | | { |
| | | return sex; |
| | | } |
| | | |
| | | public void setSex(String sex) |
| | | { |
| | | this.sex = sex; |
| | | } |
| | | |
| | | public String getAvatar() |
| | | { |
| | | return avatar; |
| | | } |
| | | |
| | | public void setAvatar(String avatar) |
| | | { |
| | | this.avatar = avatar; |
| | | } |
| | | |
| | | public String getPassword() |
| | | { |
| | | return password; |
| | | } |
| | | |
| | | public void setPassword(String password) |
| | | { |
| | | this.password = password; |
| | | } |
| | | |
| | | public String getStatus() |
| | | { |
| | | return status; |
| | | } |
| | | |
| | | public void setStatus(String status) |
| | | { |
| | | this.status = status; |
| | | } |
| | | |
| | | public String getDelFlag() |
| | | { |
| | | return delFlag; |
| | | } |
| | | |
| | | public void setDelFlag(String delFlag) |
| | | { |
| | | this.delFlag = delFlag; |
| | | } |
| | | |
| | | public String getLoginIp() |
| | | { |
| | | return loginIp; |
| | | } |
| | | |
| | | public void setLoginIp(String loginIp) |
| | | { |
| | | this.loginIp = loginIp; |
| | | } |
| | | |
| | | public Date getLoginDate() |
| | | { |
| | | return loginDate; |
| | | } |
| | | |
| | | public void setLoginDate(Date loginDate) |
| | | { |
| | | this.loginDate = loginDate; |
| | | } |
| | | |
| | | public SysDept getDept() |
| | | { |
| | | return dept; |
| | | } |
| | | |
| | | public void setDept(SysDept dept) |
| | | { |
| | | this.dept = dept; |
| | | } |
| | | |
| | | public List<SysRole> getRoles() |
| | | { |
| | | return roles; |
| | | } |
| | | |
| | | public void setRoles(List<SysRole> roles) |
| | | { |
| | | this.roles = roles; |
| | | } |
| | | |
| | | public Long[] getRoleIds() |
| | | { |
| | | return roleIds; |
| | | } |
| | | |
| | | public void setRoleIds(Long[] roleIds) |
| | | { |
| | | this.roleIds = roleIds; |
| | | } |
| | | |
| | | public Long[] getPostIds() |
| | | { |
| | | return postIds; |
| | | } |
| | | |
| | | public void setPostIds(Long[] postIds) |
| | | { |
| | | this.postIds = postIds; |
| | | } |
| | | |
| | | public Long getRoleId() |
| | | { |
| | | return roleId; |
| | | } |
| | | |
| | | public void setRoleId(Long roleId) |
| | | { |
| | | this.roleId = roleId; |
| | | } |
| | | @Override |
| | | public String toString() { |
| | | return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE) |
| | | .append("userId", getUserId()) |
| | | .append("deptId", getDeptId()) |
| | | .append("userName", getUserName()) |
| | | .append("nickName", getNickName()) |
| | | .append("email", getEmail()) |
| | | .append("phonenumber", getPhonenumber()) |
| | | .append("sex", getSex()) |
| | | .append("avatar", getAvatar()) |
| | | .append("password", getPassword()) |
| | | .append("status", getStatus()) |
| | | .append("delFlag", getDelFlag()) |
| | | .append("loginIp", getLoginIp()) |
| | | .append("loginDate", getLoginDate()) |
| | | .append("createBy", getCreateBy()) |
| | | .append("createTime", getCreateTime()) |
| | | .append("updateBy", getUpdateBy()) |
| | | .append("updateTime", getUpdateTime()) |
| | | .append("remark", getRemark()) |
| | | .append("dept", getDept()) |
| | | .toString(); |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.system.api.dto; |
| | | |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | /** |
| | | * 部门表 sys_dept |
| | | * |
| | | * @author ruoyi |
| | | */ |
| | | @Data |
| | | public class SysDeptAddDTO |
| | | { |
| | | |
| | | /** 部门ID */ |
| | | @ApiModelProperty(value = "部门ID / 修改传") |
| | | private Long deptId; |
| | | /** 部门名称 */ |
| | | @ApiModelProperty(value = "部门名称") |
| | | private String deptName; |
| | | |
| | | } |
New file |
| | |
| | | package com.ruoyi.system.api.factory; |
| | | |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | | import org.springframework.cloud.openfeign.FallbackFactory; |
| | | import org.springframework.stereotype.Component; |
| | | import org.springframework.web.multipart.MultipartFile; |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.system.api.RemoteFileService; |
| | | import com.ruoyi.system.api.domain.SysFile; |
| | | |
| | | /** |
| | | * 文件服务降级处理 |
| | | * |
| | | * @author ruoyi |
| | | */ |
| | | @Component |
| | | public class RemoteFileFallbackFactory implements FallbackFactory<RemoteFileService> |
| | | { |
| | | private static final Logger log = LoggerFactory.getLogger(RemoteFileFallbackFactory.class); |
| | | |
| | | @Override |
| | | public RemoteFileService create(Throwable throwable) |
| | | { |
| | | log.error("文件服务调用失败:{}", throwable.getMessage()); |
| | | return new RemoteFileService() |
| | | { |
| | | @Override |
| | | public R<SysFile> upload(MultipartFile file) |
| | | { |
| | | return R.fail("上传文件失败:" + throwable.getMessage()); |
| | | } |
| | | }; |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.system.api.factory; |
| | | |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | | import org.springframework.cloud.openfeign.FallbackFactory; |
| | | import org.springframework.stereotype.Component; |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.system.api.RemoteLogService; |
| | | import com.ruoyi.system.api.domain.SysLogininfor; |
| | | import com.ruoyi.system.api.domain.SysOperLog; |
| | | |
| | | /** |
| | | * 日志服务降级处理 |
| | | * |
| | | * @author ruoyi |
| | | */ |
| | | @Component |
| | | public class RemoteLogFallbackFactory implements FallbackFactory<RemoteLogService> |
| | | { |
| | | private static final Logger log = LoggerFactory.getLogger(RemoteLogFallbackFactory.class); |
| | | |
| | | @Override |
| | | public RemoteLogService create(Throwable throwable) |
| | | { |
| | | log.error("日志服务调用失败:{}", throwable.getMessage()); |
| | | return new RemoteLogService() |
| | | { |
| | | @Override |
| | | public R<Boolean> saveLog(SysOperLog sysOperLog, String source) |
| | | { |
| | | return null; |
| | | } |
| | | |
| | | @Override |
| | | public R<Boolean> saveLogininfor(SysLogininfor sysLogininfor, String source) |
| | | { |
| | | return null; |
| | | } |
| | | }; |
| | | |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.system.api.factory; |
| | | |
| | | import org.slf4j.Logger; |
| | | import org.slf4j.LoggerFactory; |
| | | import org.springframework.cloud.openfeign.FallbackFactory; |
| | | import org.springframework.stereotype.Component; |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.system.api.RemoteUserService; |
| | | import com.ruoyi.system.api.domain.SysUser; |
| | | import com.ruoyi.system.api.model.LoginUser; |
| | | |
| | | /** |
| | | * 用户服务降级处理 |
| | | * |
| | | * @author ruoyi |
| | | */ |
| | | @Component |
| | | public class RemoteUserFallbackFactory implements FallbackFactory<RemoteUserService> |
| | | { |
| | | private static final Logger log = LoggerFactory.getLogger(RemoteUserFallbackFactory.class); |
| | | |
| | | @Override |
| | | public RemoteUserService create(Throwable throwable) |
| | | { |
| | | log.error("用户服务调用失败:{}", throwable.getMessage()); |
| | | return new RemoteUserService() |
| | | { |
| | | @Override |
| | | public R<LoginUser> getUserInfo(String username, String source) |
| | | { |
| | | return R.fail("获取用户失败:" + throwable.getMessage()); |
| | | } |
| | | |
| | | @Override |
| | | public R<Boolean> registerUserInfo(SysUser sysUser, String source) |
| | | { |
| | | return R.fail("注册用户失败:" + throwable.getMessage()); |
| | | } |
| | | }; |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.system.api.factory; |
| | | |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.system.api.domain.SysRole; |
| | | import com.ruoyi.system.api.domain.SysUser; |
| | | import com.ruoyi.system.api.feignClient.SysUserClient; |
| | | import com.ruoyi.system.api.model.*; |
| | | import org.springframework.cloud.openfeign.FallbackFactory; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | import java.util.List; |
| | | @Component |
| | | public class SysUserFallbackFactory implements FallbackFactory<SysUserClient> { |
| | | @Override |
| | | public SysUserClient create(Throwable cause) { |
| | | return new SysUserClient(){ |
| | | |
| | | @Override |
| | | public R<List<CompanyUserListVo>> getSysUserFromCompanyId(CompanySysUserReq companySysUserReq) { |
| | | return R.fail("公司获取关联已有账号失败:" + cause.getMessage()); |
| | | } |
| | | |
| | | @Override |
| | | public R<SysUser> getSysUser(Long userId) { |
| | | return R.fail("获取用户失败:" + cause.getMessage()); |
| | | } |
| | | |
| | | @Override |
| | | public R<Boolean> updateSysUser(SysUser sysUser) { |
| | | return R.fail("更新用户失败:" + cause.getMessage()); |
| | | } |
| | | |
| | | @Override |
| | | public R<List<Integer>> companySaveSysUser(CompanyAddSysUserDto dto) { |
| | | return R.fail("添加用户失败:" + cause.getMessage()); |
| | | } |
| | | |
| | | @Override |
| | | public R<List<Integer>> addTRepairSysUser(TRepairShopAddDto dto) { |
| | | return R.fail("添加修理厂用户失败:" + cause.getMessage()); |
| | | } |
| | | |
| | | @Override |
| | | public R<List<SysUser>> getUserList(List<Integer> userIds) { |
| | | return R.fail("通过用户id集合查询用户失败:" + cause.getMessage()); |
| | | } |
| | | |
| | | @Override |
| | | public R<List<CompanyUserListVo>> getSysUserFromCompanyIdOne(CompanySysUserReq companySysUserReq) { |
| | | return R.fail("公司获取账号失败:" + cause.getMessage()); |
| | | } |
| | | |
| | | @Override |
| | | public R<Integer> isAdmin(Long userId) { |
| | | return R.fail("获取角色信息失败:" + cause.getMessage()); |
| | | } |
| | | |
| | | @Override |
| | | public R<Boolean> updateUser(SysUser sysUser) { |
| | | return R.fail("修改用户信息失败:" + cause.getMessage()); |
| | | } |
| | | |
| | | @Override |
| | | public R<SysRole> queryRoleByUserId(Long userId) { |
| | | return R.fail("通过用户id查询角色对象失败:" + cause.getMessage()); |
| | | } |
| | | |
| | | @Override |
| | | public R<SysRole> queryRoleByRoleId(Long roleId) { |
| | | return R.fail("通过角色id查询角色对象失败:" + cause.getMessage()); |
| | | } |
| | | |
| | | @Override |
| | | public R<List<SysUser>> queryUserByPhoneList(List<String> phoneList) { |
| | | return R.fail("通过手机号集合查询用户失败:" + cause.getMessage()); |
| | | } |
| | | |
| | | @Override |
| | | public R<Boolean> addUserRole(List<SysUserRoleDTO> dtoList) { |
| | | return R.fail("默认批量添加修理厂失败:" + cause.getMessage()); |
| | | } |
| | | |
| | | @Override |
| | | public R<SysUser> queryUserByPhone(String phone) { |
| | | return R.fail("通过手机号查询用户失败:" + cause.getMessage()); |
| | | } |
| | | |
| | | @Override |
| | | public R<SysUser> queryUserByUserName(String userName) { |
| | | return R.fail("通过账号查询用户失败:" + cause.getMessage()); |
| | | } |
| | | }; |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.system.api.feignClient; |
| | | |
| | | import com.ruoyi.common.core.constant.ServiceNameConstants; |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.system.api.domain.SysRole; |
| | | import com.ruoyi.system.api.domain.SysUser; |
| | | import com.ruoyi.system.api.factory.SysUserFallbackFactory; |
| | | import com.ruoyi.system.api.model.*; |
| | | import org.springframework.cloud.openfeign.FeignClient; |
| | | import org.springframework.web.bind.annotation.GetMapping; |
| | | import org.springframework.web.bind.annotation.PathVariable; |
| | | import org.springframework.web.bind.annotation.PostMapping; |
| | | import org.springframework.web.bind.annotation.RequestBody; |
| | | |
| | | import java.util.List; |
| | | |
| | | @FeignClient(contextId = "sysUserClient", value = ServiceNameConstants.SYSTEM_SERVICE, fallbackFactory = SysUserFallbackFactory.class) |
| | | public interface SysUserClient { |
| | | |
| | | @PostMapping("/user/getSysUserFromCompanyId") |
| | | R<List<CompanyUserListVo>> getSysUserFromCompanyId(@RequestBody CompanySysUserReq companySysUserReq); |
| | | |
| | | @PostMapping("/user/getSysUser") |
| | | R<SysUser> getSysUser(Long userId); |
| | | |
| | | @PostMapping("/user/updateSysUser") |
| | | R<Boolean> updateSysUser(@RequestBody SysUser sysUser); |
| | | |
| | | @PostMapping("/user/companySaveSysUser") |
| | | R<List<Integer>> companySaveSysUser(@RequestBody CompanyAddSysUserDto dto); |
| | | |
| | | @PostMapping("/user/addTRepairSysUser") |
| | | R<List<Integer>> addTRepairSysUser(@RequestBody TRepairShopAddDto dto); |
| | | |
| | | @PostMapping("/user/getUserList") |
| | | R<List<SysUser>> getUserList(@RequestBody List<Integer> userIds); |
| | | |
| | | |
| | | @PostMapping("/user/getSysUserFromCompanyIdOne") |
| | | R<List<CompanyUserListVo>> getSysUserFromCompanyIdOne(@RequestBody CompanySysUserReq companySysUserReq); |
| | | |
| | | @PostMapping("/user/isAdmin") |
| | | R<Integer> isAdmin(Long userId); |
| | | |
| | | @PostMapping("/user/updateUser") |
| | | R<Boolean> updateUser(@RequestBody SysUser sysUser); |
| | | |
| | | /** |
| | | * 通过用户id查询角色对象 |
| | | * @param userId |
| | | * @return |
| | | */ |
| | | @GetMapping("/user/queryRoleByUserId/{userId}") |
| | | R<SysRole> queryRoleByUserId(@PathVariable("userId") Long userId); |
| | | |
| | | |
| | | /** |
| | | * 通过角色id查询角色对象 |
| | | * @param roleId |
| | | * @return |
| | | */ |
| | | @GetMapping("/user/queryRoleByRoleId/{roleId}") |
| | | R<SysRole> queryRoleByRoleId(@PathVariable("roleId") Long roleId); |
| | | |
| | | /** |
| | | * 通过手机号集合查询用户 |
| | | * @param phoneList |
| | | * @return |
| | | */ |
| | | @PostMapping("/user/queryUserByPhoneList") |
| | | R<List<SysUser>> queryUserByPhoneList(@RequestBody List<String> phoneList); |
| | | |
| | | /** |
| | | * 默认批量添加修理厂 |
| | | * @param dtoList |
| | | * @return |
| | | */ |
| | | @PostMapping("/user/addUserRole") |
| | | R<Boolean> addUserRole(@RequestBody List<SysUserRoleDTO> dtoList); |
| | | |
| | | /** |
| | | * 通过手机号查询用户 |
| | | * @param phone |
| | | * @return |
| | | */ |
| | | @PostMapping("/user/queryUserByPhone") |
| | | R<SysUser> queryUserByPhone(@RequestBody String phone); |
| | | |
| | | /** |
| | | * 通过账号查询用户 |
| | | * @param userName |
| | | * @return |
| | | */ |
| | | @PostMapping("/user/queryUserByUserName") |
| | | R<SysUser> queryUserByUserName(@RequestBody String userName); |
| | | |
| | | } |
New file |
| | |
| | | package com.ruoyi.system.api.model; |
| | | |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | import java.util.List; |
| | | |
| | | @Data |
| | | public class CompanyAddSysUserDto { |
| | | List<CompanyUserListVo> list; |
| | | @ApiModelProperty("公司id") |
| | | private Integer companyId; |
| | | } |
New file |
| | |
| | | package com.ruoyi.system.api.model; |
| | | |
| | | import lombok.AllArgsConstructor; |
| | | import lombok.Data; |
| | | import lombok.NoArgsConstructor; |
| | | |
| | | import java.util.List; |
| | | |
| | | @Data |
| | | @AllArgsConstructor |
| | | @NoArgsConstructor |
| | | public class CompanySysUserReq { |
| | | private Integer companyId; |
| | | private String name; |
| | | private List<Integer> userIds; |
| | | |
| | | } |
New file |
| | |
| | | package com.ruoyi.system.api.model; |
| | | |
| | | import lombok.Data; |
| | | |
| | | @Data |
| | | public class CompanyUserListVo { |
| | | private Long id; |
| | | |
| | | private String userName; |
| | | |
| | | private String phoneNumber; |
| | | |
| | | private String password; |
| | | |
| | | private String nickName; |
| | | } |
New file |
| | |
| | | package com.ruoyi.system.api.model; |
| | | |
| | | import java.io.Serializable; |
| | | import java.util.Set; |
| | | import com.ruoyi.system.api.domain.SysUser; |
| | | |
| | | /** |
| | | * 用户信息 |
| | | * |
| | | * @author ruoyi |
| | | */ |
| | | public class LoginUser implements Serializable |
| | | { |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | /** |
| | | * 用户唯一标识 |
| | | */ |
| | | private String token; |
| | | |
| | | /** |
| | | * 用户名id |
| | | */ |
| | | private Long userid; |
| | | |
| | | /** |
| | | * 用户名 |
| | | */ |
| | | private String username; |
| | | |
| | | /** |
| | | * 登录时间 |
| | | */ |
| | | private Long loginTime; |
| | | |
| | | /** |
| | | * 过期时间 |
| | | */ |
| | | private Long expireTime; |
| | | |
| | | /** |
| | | * 登录IP地址 |
| | | */ |
| | | private String ipaddr; |
| | | |
| | | /** |
| | | * 权限列表 |
| | | */ |
| | | private Set<String> permissions; |
| | | |
| | | /** |
| | | * 角色列表 |
| | | */ |
| | | private Set<String> roles; |
| | | |
| | | /** |
| | | * 用户信息 |
| | | */ |
| | | private SysUser sysUser; |
| | | |
| | | public String getToken() |
| | | { |
| | | return token; |
| | | } |
| | | |
| | | public void setToken(String token) |
| | | { |
| | | this.token = token; |
| | | } |
| | | |
| | | public Long getUserid() |
| | | { |
| | | return userid; |
| | | } |
| | | |
| | | public void setUserid(Long userid) |
| | | { |
| | | this.userid = userid; |
| | | } |
| | | |
| | | public String getUsername() |
| | | { |
| | | return username; |
| | | } |
| | | |
| | | public void setUsername(String username) |
| | | { |
| | | this.username = username; |
| | | } |
| | | |
| | | public Long getLoginTime() |
| | | { |
| | | return loginTime; |
| | | } |
| | | |
| | | public void setLoginTime(Long loginTime) |
| | | { |
| | | this.loginTime = loginTime; |
| | | } |
| | | |
| | | public Long getExpireTime() |
| | | { |
| | | return expireTime; |
| | | } |
| | | |
| | | public void setExpireTime(Long expireTime) |
| | | { |
| | | this.expireTime = expireTime; |
| | | } |
| | | |
| | | public String getIpaddr() |
| | | { |
| | | return ipaddr; |
| | | } |
| | | |
| | | public void setIpaddr(String ipaddr) |
| | | { |
| | | this.ipaddr = ipaddr; |
| | | } |
| | | |
| | | public Set<String> getPermissions() |
| | | { |
| | | return permissions; |
| | | } |
| | | |
| | | public void setPermissions(Set<String> permissions) |
| | | { |
| | | this.permissions = permissions; |
| | | } |
| | | |
| | | public Set<String> getRoles() |
| | | { |
| | | return roles; |
| | | } |
| | | |
| | | public void setRoles(Set<String> roles) |
| | | { |
| | | this.roles = roles; |
| | | } |
| | | |
| | | public SysUser getSysUser() |
| | | { |
| | | return sysUser; |
| | | } |
| | | |
| | | public void setSysUser(SysUser sysUser) |
| | | { |
| | | this.sysUser = sysUser; |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.system.api.model; |
| | | |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | import java.io.Serializable; |
| | | |
| | | @Data |
| | | @ApiModel(value = "自动关联修理厂角色DTO") |
| | | public class SysUserRoleDTO implements Serializable { |
| | | |
| | | @ApiModelProperty(value = "用户id") |
| | | private Long userId; |
| | | @ApiModelProperty(value = "角色id") |
| | | private Long roleId; |
| | | |
| | | } |
New file |
| | |
| | | package com.ruoyi.system.api.model; |
| | | |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | import javax.validation.constraints.NotBlank; |
| | | |
| | | @Data |
| | | public class TRepairShopAdd { |
| | | @ApiModelProperty("账号") |
| | | @NotBlank(message = "账号不能为空") |
| | | private String phonenumber; |
| | | @ApiModelProperty("密码") |
| | | @NotBlank(message = "密码不能为空") |
| | | private String pwd; |
| | | |
| | | } |
New file |
| | |
| | | package com.ruoyi.system.api.model; |
| | | |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | import javax.validation.constraints.NotNull; |
| | | import java.util.List; |
| | | @Data |
| | | public class TRepairShopAddDto { |
| | | private List<TRepairShopAdd> list; |
| | | @ApiModelProperty("修理场id") |
| | | @NotNull(message = "修理厂id不能为空") |
| | | private Integer repairId; |
| | | } |
New file |
| | |
| | | package com.ruoyi.system.api.vo; |
| | | |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | /** |
| | | * 角色表 sys_role |
| | | * |
| | | * @author ruoyi |
| | | */ |
| | | @Data |
| | | @ApiModel(value = "权限列表查询返回VO") |
| | | public class SysRoleVO |
| | | { |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | /** 角色ID */ |
| | | @ApiModelProperty(value = "角色id") |
| | | private Long roleId; |
| | | |
| | | @ApiModelProperty(value = "权限名称") |
| | | private String roleName; |
| | | @ApiModelProperty(value = "创建时间") |
| | | private String createTime; |
| | | } |
New file |
| | |
| | | package com.ruoyi.system.api.vo; |
| | | |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | import lombok.Data; |
| | | |
| | | /** |
| | | * 角色表 sys_role |
| | | * |
| | | * @author ruoyi |
| | | */ |
| | | @Data |
| | | @ApiModel(value = "管理员列表查询返回VO") |
| | | public class SysUserVO |
| | | { |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | /** 角色ID */ |
| | | @ApiModelProperty(value = "账号id") |
| | | private Long userId; |
| | | @ApiModelProperty(value = "账号名称") |
| | | private String nickName; |
| | | @ApiModelProperty(value = "电话") |
| | | private String phonenumber; |
| | | @ApiModelProperty(value = "所属部门") |
| | | private String deptName; |
| | | @ApiModelProperty(value = "所属权限") |
| | | private String roleName; |
| | | @ApiModelProperty(value = "角色id") |
| | | private Long roleId; |
| | | @ApiModelProperty(value = "部门id") |
| | | private Long deptId; |
| | | } |
New file |
| | |
| | | com.ruoyi.system.api.factory.RemoteUserFallbackFactory |
| | | com.ruoyi.system.api.factory.RemoteLogFallbackFactory |
| | | com.ruoyi.system.api.factory.RemoteFileFallbackFactory |
| | | com.ruoyi.system.api.factory.SysUserFallbackFactory |
New file |
| | |
| | | <project xmlns="http://maven.apache.org/POM/4.0.0" |
| | | xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
| | | xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> |
| | | <parent> |
| | | <groupId>com.ruoyi</groupId> |
| | | <artifactId>ruoyi</artifactId> |
| | | <version>3.6.2</version> |
| | | </parent> |
| | | <modelVersion>4.0.0</modelVersion> |
| | | |
| | | <artifactId>ruoyi-auth</artifactId> |
| | | |
| | | <description> |
| | | ruoyi-auth认证授权中心 |
| | | </description> |
| | | |
| | | <properties> |
| | | <druid.version>1.1.13</druid.version> |
| | | <hutool.version>5.3.8</hutool.version> |
| | | </properties> |
| | | |
| | | <dependencies> |
| | | |
| | | <!-- SpringCloud Alibaba Nacos --> |
| | | <dependency> |
| | | <groupId>com.alibaba.cloud</groupId> |
| | | <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> |
| | | </dependency> |
| | | |
| | | <!-- SpringCloud Alibaba Nacos Config --> |
| | | <dependency> |
| | | <groupId>com.alibaba.cloud</groupId> |
| | | <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> |
| | | </dependency> |
| | | |
| | | <!-- SpringCloud Alibaba Sentinel --> |
| | | <dependency> |
| | | <groupId>com.alibaba.cloud</groupId> |
| | | <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId> |
| | | </dependency> |
| | | |
| | | <!-- SpringBoot Web --> |
| | | <dependency> |
| | | <groupId>org.springframework.boot</groupId> |
| | | <artifactId>spring-boot-starter-web</artifactId> |
| | | </dependency> |
| | | |
| | | <!-- SpringBoot Actuator --> |
| | | <dependency> |
| | | <groupId>org.springframework.boot</groupId> |
| | | <artifactId>spring-boot-starter-actuator</artifactId> |
| | | </dependency> |
| | | |
| | | <!-- RuoYi Common Security--> |
| | | <dependency> |
| | | <groupId>com.ruoyi</groupId> |
| | | <artifactId>ruoyi-common-security</artifactId> |
| | | </dependency> |
| | | |
| | | <!-- 引入Druid依赖,阿里巴巴所提供的数据源 --> |
| | | <dependency> |
| | | <groupId>com.alibaba</groupId> |
| | | <artifactId>druid-spring-boot-starter</artifactId> |
| | | <version>${druid.version}</version> |
| | | </dependency> |
| | | <dependency> |
| | | <groupId>com.alibaba</groupId> |
| | | <artifactId>fastjson</artifactId> |
| | | <version>1.2.47</version> |
| | | </dependency> |
| | | <!--mysql--> |
| | | <dependency> |
| | | <groupId>mysql</groupId> |
| | | <artifactId>mysql-connector-java</artifactId> |
| | | </dependency> |
| | | <!-- hutool工具类--> |
| | | <dependency> |
| | | <groupId>cn.hutool</groupId> |
| | | <artifactId>hutool-core</artifactId> |
| | | <version>${hutool.version}</version> |
| | | </dependency> |
| | | <dependency> |
| | | <groupId>cn.hutool</groupId> |
| | | <artifactId>hutool-crypto</artifactId> |
| | | <version>${hutool.version}</version> |
| | | </dependency> |
| | | |
| | | </dependencies> |
| | | |
| | | <build> |
| | | <finalName>${project.artifactId}</finalName> |
| | | <plugins> |
| | | <plugin> |
| | | <groupId>org.springframework.boot</groupId> |
| | | <artifactId>spring-boot-maven-plugin</artifactId> |
| | | <executions> |
| | | <execution> |
| | | <goals> |
| | | <goal>repackage</goal> |
| | | </goals> |
| | | </execution> |
| | | </executions> |
| | | </plugin> |
| | | </plugins> |
| | | </build> |
| | | |
| | | </project> |
New file |
| | |
| | | package com.ruoyi.auth; |
| | | |
| | | import org.springframework.boot.SpringApplication; |
| | | import org.springframework.boot.autoconfigure.SpringBootApplication; |
| | | import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration; |
| | | import com.ruoyi.common.security.annotation.EnableRyFeignClients; |
| | | |
| | | /** |
| | | * 认证授权中心 |
| | | * |
| | | * @author ruoyi |
| | | */ |
| | | @EnableRyFeignClients |
| | | @SpringBootApplication(exclude = {DataSourceAutoConfiguration.class }) |
| | | public class RuoYiAuthApplication |
| | | { |
| | | public static void main(String[] args) |
| | | { |
| | | try { |
| | | SpringApplication.run(RuoYiAuthApplication.class, args); |
| | | }catch (Exception e){ |
| | | e.printStackTrace(); |
| | | } |
| | | System.out.println("(♥◠‿◠)ノ゙ 认证授权中心启动成功 ლ(´ڡ`ლ)゙ \n" + |
| | | " .-------. ____ __ \n" + |
| | | " | _ _ \\ \\ \\ / / \n" + |
| | | " | ( ' ) | \\ _. / ' \n" + |
| | | " |(_ o _) / _( )_ .' \n" + |
| | | " | (_,_).' __ ___(_ o _)' \n" + |
| | | " | |\\ \\ | || |(_,_)' \n" + |
| | | " | | \\ `' /| `-' / \n" + |
| | | " | | \\ / \\ / \n" + |
| | | " ''-' `'-' `-..-' "); |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.auth.controller; |
| | | |
| | | import com.ruoyi.auth.form.LoginBody; |
| | | import com.ruoyi.auth.service.SysLoginService; |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.common.core.utils.JwtUtils; |
| | | import com.ruoyi.common.core.utils.StringUtils; |
| | | import com.ruoyi.common.security.auth.AuthUtil; |
| | | import com.ruoyi.common.security.service.TokenService; |
| | | import com.ruoyi.common.security.utils.SecurityUtils; |
| | | import com.ruoyi.system.api.domain.SysRole; |
| | | import com.ruoyi.system.api.domain.SysUser; |
| | | import com.ruoyi.system.api.feignClient.SysUserClient; |
| | | import com.ruoyi.system.api.model.LoginUser; |
| | | import io.swagger.annotations.Api; |
| | | import io.swagger.annotations.ApiOperation; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.util.CollectionUtils; |
| | | import org.springframework.web.bind.annotation.DeleteMapping; |
| | | import org.springframework.web.bind.annotation.PostMapping; |
| | | import org.springframework.web.bind.annotation.RequestBody; |
| | | import org.springframework.web.bind.annotation.RestController; |
| | | |
| | | import javax.servlet.http.HttpServletRequest; |
| | | import java.util.Date; |
| | | import java.util.HashMap; |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * token 控制 |
| | | * |
| | | * @author ruoyi |
| | | */ |
| | | |
| | | @RestController |
| | | @Api(tags = "登录") |
| | | public class TokenController |
| | | { |
| | | @Autowired |
| | | private TokenService tokenService; |
| | | |
| | | @Autowired |
| | | private SysLoginService sysLoginService; |
| | | @Autowired |
| | | private SysUserClient userClient; |
| | | |
| | | @PostMapping("login") |
| | | public R<?> login(@RequestBody LoginBody form) |
| | | { |
| | | // 用户登录 |
| | | LoginUser userInfo = sysLoginService.login(form.getUsername(), form.getPassword()); |
| | | HashMap<String, Object> map = new HashMap<>(); |
| | | map.put("token",tokenService.createToken(userInfo)); |
| | | List<SysRole> roles = userInfo.getSysUser().getRoles(); |
| | | if(CollectionUtils.isEmpty(roles)){ |
| | | return R.fail("请关联角色!"); |
| | | } |
| | | map.put("roleName",roles.get(0).getRoleName()); |
| | | map.put("info",userInfo); |
| | | // 修改用户最后登录时间 |
| | | SysUser sysUser = new SysUser(); |
| | | sysUser.setUserId(userInfo.getSysUser().getUserId()); |
| | | sysUser.setLoginDate(new Date()); |
| | | System.out.println("修改用户登录时间"+sysUser); |
| | | userClient.updateSysUser(sysUser); |
| | | // 获取登录token |
| | | return R.ok(map); |
| | | } |
| | | |
| | | @DeleteMapping("logout") |
| | | @ApiOperation("退出登录") |
| | | 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(); |
| | | } |
| | | |
| | | |
| | | } |
New file |
| | |
| | | package com.ruoyi.auth.form; |
| | | |
| | | /** |
| | | * 用户登录对象 |
| | | * |
| | | * @author ruoyi |
| | | */ |
| | | 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; |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.auth.form; |
| | | |
| | | /** |
| | | * 用户注册对象 |
| | | * |
| | | * @author ruoyi |
| | | */ |
| | | public class RegisterBody extends LoginBody |
| | | { |
| | | |
| | | } |
New file |
| | |
| | | package com.ruoyi.auth.service; |
| | | |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Component; |
| | | import com.ruoyi.common.core.constant.CacheConstants; |
| | | import com.ruoyi.common.core.constant.Constants; |
| | | import com.ruoyi.common.core.constant.SecurityConstants; |
| | | import com.ruoyi.common.core.constant.UserConstants; |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.common.core.enums.UserStatus; |
| | | import com.ruoyi.common.core.exception.ServiceException; |
| | | import com.ruoyi.common.core.text.Convert; |
| | | import com.ruoyi.common.core.utils.StringUtils; |
| | | import com.ruoyi.common.core.utils.ip.IpUtils; |
| | | import com.ruoyi.common.redis.service.RedisService; |
| | | import com.ruoyi.common.security.utils.SecurityUtils; |
| | | import com.ruoyi.system.api.RemoteUserService; |
| | | import com.ruoyi.system.api.domain.SysUser; |
| | | import com.ruoyi.system.api.model.LoginUser; |
| | | |
| | | /** |
| | | * 登录校验方法 |
| | | * |
| | | * @author ruoyi |
| | | */ |
| | | @Component |
| | | public class SysLoginService |
| | | { |
| | | @Autowired |
| | | private RemoteUserService remoteUserService; |
| | | |
| | | @Autowired |
| | | private SysPasswordService passwordService; |
| | | |
| | | @Autowired |
| | | private SysRecordLogService recordLogService; |
| | | |
| | | @Autowired |
| | | 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, "登录成功"); |
| | | return userInfo; |
| | | } |
| | | |
| | | 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, "注册成功"); |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.auth.service; |
| | | |
| | | import java.util.concurrent.TimeUnit; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Component; |
| | | import com.ruoyi.common.core.constant.CacheConstants; |
| | | import com.ruoyi.common.core.constant.Constants; |
| | | import com.ruoyi.common.core.exception.ServiceException; |
| | | import com.ruoyi.common.redis.service.RedisService; |
| | | import com.ruoyi.common.security.utils.SecurityUtils; |
| | | import com.ruoyi.system.api.domain.SysUser; |
| | | |
| | | /** |
| | | * 登录密码方法 |
| | | * |
| | | * @author ruoyi |
| | | */ |
| | | @Component |
| | | 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)); |
| | | } |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.auth.service; |
| | | |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Component; |
| | | import com.ruoyi.common.core.constant.Constants; |
| | | import com.ruoyi.common.core.constant.SecurityConstants; |
| | | import com.ruoyi.common.core.utils.StringUtils; |
| | | import com.ruoyi.common.core.utils.ip.IpUtils; |
| | | import com.ruoyi.system.api.RemoteLogService; |
| | | import com.ruoyi.system.api.domain.SysLogininfor; |
| | | |
| | | /** |
| | | * 记录日志方法 |
| | | * |
| | | * @author ruoyi |
| | | */ |
| | | @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); |
| | | } |
| | | } |
New file |
| | |
| | | Spring Boot Version: ${spring-boot.version} |
| | | Spring Application Name: ${spring.application.name} |
| | | _ _ _ |
| | | (_) | | | | |
| | | _ __ _ _ ___ _ _ _ ______ __ _ _ _ | |_ | |__ |
| | | | '__|| | | | / _ \ | | | || ||______| / _` || | | || __|| '_ \ |
| | | | | | |_| || (_) || |_| || | | (_| || |_| || |_ | | | | |
| | | |_| \__,_| \___/ \__, ||_| \__,_| \__,_| \__||_| |_| |
| | | __/ | |
| | | |___/ |
New file |
| | |
| | | <?xml version="1.0" encoding="UTF-8"?> |
| | | <configuration scan="true" scanPeriod="60 seconds" debug="false"> |
| | | <!-- 日志存放路径 --> |
| | | <property name="log.path" value="logs/ruoyi-auth" /> |
| | | <!-- 日志输出格式 --> |
| | | <property name="log.pattern" value="%d{HH:mm:ss.SSS} [%thread] %-5level %logger{20} - [%method,%line] - %msg%n" /> |
| | | |
| | | <!-- 控制台输出 --> |
| | | <appender name="console" class="ch.qos.logback.core.ConsoleAppender"> |
| | | <encoder> |
| | | <pattern>${log.pattern}</pattern> |
| | | </encoder> |
| | | </appender> |
| | | |
| | | <!-- 系统日志输出 --> |
| | | <appender name="file_info" class="ch.qos.logback.core.rolling.RollingFileAppender"> |
| | | <file>${log.path}/info.log</file> |
| | | <!-- 循环政策:基于时间创建日志文件 --> |
| | | <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> |
| | | <!-- 日志文件名格式 --> |
| | | <fileNamePattern>${log.path}/info.%d{yyyy-MM-dd}.log</fileNamePattern> |
| | | <!-- 日志最大的历史 60天 --> |
| | | <maxHistory>60</maxHistory> |
| | | </rollingPolicy> |
| | | <encoder> |
| | | <pattern>${log.pattern}</pattern> |
| | | </encoder> |
| | | <filter class="ch.qos.logback.classic.filter.LevelFilter"> |
| | | <!-- 过滤的级别 --> |
| | | <level>INFO</level> |
| | | <!-- 匹配时的操作:接收(记录) --> |
| | | <onMatch>ACCEPT</onMatch> |
| | | <!-- 不匹配时的操作:拒绝(不记录) --> |
| | | <onMismatch>DENY</onMismatch> |
| | | </filter> |
| | | </appender> |
| | | |
| | | <appender name="file_error" class="ch.qos.logback.core.rolling.RollingFileAppender"> |
| | | <file>${log.path}/error.log</file> |
| | | <!-- 循环政策:基于时间创建日志文件 --> |
| | | <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> |
| | | <!-- 日志文件名格式 --> |
| | | <fileNamePattern>${log.path}/error.%d{yyyy-MM-dd}.log</fileNamePattern> |
| | | <!-- 日志最大的历史 60天 --> |
| | | <maxHistory>60</maxHistory> |
| | | </rollingPolicy> |
| | | <encoder> |
| | | <pattern>${log.pattern}</pattern> |
| | | </encoder> |
| | | <filter class="ch.qos.logback.classic.filter.LevelFilter"> |
| | | <!-- 过滤的级别 --> |
| | | <level>ERROR</level> |
| | | <!-- 匹配时的操作:接收(记录) --> |
| | | <onMatch>ACCEPT</onMatch> |
| | | <!-- 不匹配时的操作:拒绝(不记录) --> |
| | | <onMismatch>DENY</onMismatch> |
| | | </filter> |
| | | </appender> |
| | | |
| | | <!-- 系统模块日志级别控制 --> |
| | | <logger name="com.ruoyi" level="info" /> |
| | | <!-- Spring日志级别控制 --> |
| | | <logger name="org.springframework" level="warn" /> |
| | | |
| | | <root level="info"> |
| | | <appender-ref ref="console" /> |
| | | </root> |
| | | |
| | | <!--系统操作日志--> |
| | | <root level="info"> |
| | | <appender-ref ref="file_info" /> |
| | | <appender-ref ref="file_error" /> |
| | | </root> |
| | | </configuration> |
New file |
| | |
| | | <?xml version="1.0" encoding="UTF-8"?> |
| | | <project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0" |
| | | xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> |
| | | <parent> |
| | | <groupId>com.ruoyi</groupId> |
| | | <artifactId>ruoyi</artifactId> |
| | | <version>3.6.2</version> |
| | | </parent> |
| | | <modelVersion>4.0.0</modelVersion> |
| | | |
| | | <modules> |
| | | <module>ruoyi-common-log</module> |
| | | <module>ruoyi-common-core</module> |
| | | <module>ruoyi-common-redis</module> |
| | | <module>ruoyi-common-seata</module> |
| | | <module>ruoyi-common-swagger</module> |
| | | <module>ruoyi-common-security</module> |
| | | <module>ruoyi-common-datascope</module> |
| | | <module>ruoyi-common-datasource</module> |
| | | </modules> |
| | | |
| | | <artifactId>ruoyi-common</artifactId> |
| | | <packaging>pom</packaging> |
| | | |
| | | <description> |
| | | ruoyi-common通用模块 |
| | | </description> |
| | | |
| | | <dependencies> |
| | | <!--lombok--> |
| | | <dependency> |
| | | <groupId>org.projectlombok</groupId> |
| | | <artifactId>lombok</artifactId> |
| | | </dependency> |
| | | </dependencies> |
| | | |
| | | </project> |
New file |
| | |
| | | <?xml version="1.0" encoding="UTF-8"?> |
| | | <project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
| | | xmlns="http://maven.apache.org/POM/4.0.0" |
| | | xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> |
| | | <parent> |
| | | <groupId>com.ruoyi</groupId> |
| | | <artifactId>ruoyi-common</artifactId> |
| | | <version>3.6.2</version> |
| | | </parent> |
| | | <modelVersion>4.0.0</modelVersion> |
| | | |
| | | <artifactId>ruoyi-common-core</artifactId> |
| | | |
| | | <description> |
| | | ruoyi-common-core核心模块 |
| | | </description> |
| | | |
| | | <dependencies> |
| | | |
| | | <!-- SpringCloud Openfeign --> |
| | | <dependency> |
| | | <groupId>org.springframework.cloud</groupId> |
| | | <artifactId>spring-cloud-starter-openfeign</artifactId> |
| | | </dependency> |
| | | |
| | | <!-- SpringCloud Loadbalancer --> |
| | | <dependency> |
| | | <groupId>org.springframework.cloud</groupId> |
| | | <artifactId>spring-cloud-starter-loadbalancer</artifactId> |
| | | </dependency> |
| | | |
| | | <!-- Spring Context Support --> |
| | | <dependency> |
| | | <groupId>org.springframework</groupId> |
| | | <artifactId>spring-context-support</artifactId> |
| | | </dependency> |
| | | |
| | | <!-- Spring Web --> |
| | | <dependency> |
| | | <groupId>org.springframework</groupId> |
| | | <artifactId>spring-web</artifactId> |
| | | </dependency> |
| | | |
| | | <!-- Transmittable ThreadLocal --> |
| | | <dependency> |
| | | <groupId>com.alibaba</groupId> |
| | | <artifactId>transmittable-thread-local</artifactId> |
| | | </dependency> |
| | | |
| | | <!-- Pagehelper --> |
| | | <dependency> |
| | | <groupId>com.github.pagehelper</groupId> |
| | | <artifactId>pagehelper-spring-boot-starter</artifactId> |
| | | </dependency> |
| | | |
| | | <!-- Hibernate Validator --> |
| | | <dependency> |
| | | <groupId>org.springframework.boot</groupId> |
| | | <artifactId>spring-boot-starter-validation</artifactId> |
| | | </dependency> |
| | | |
| | | <!-- Jackson --> |
| | | <dependency> |
| | | <groupId>com.fasterxml.jackson.core</groupId> |
| | | <artifactId>jackson-databind</artifactId> |
| | | </dependency> |
| | | |
| | | <!-- Alibaba Fastjson --> |
| | | <dependency> |
| | | <groupId>com.alibaba.fastjson2</groupId> |
| | | <artifactId>fastjson2</artifactId> |
| | | </dependency> |
| | | |
| | | <!-- Jwt --> |
| | | <dependency> |
| | | <groupId>io.jsonwebtoken</groupId> |
| | | <artifactId>jjwt</artifactId> |
| | | </dependency> |
| | | |
| | | <!-- Jaxb --> |
| | | <dependency> |
| | | <groupId>javax.xml.bind</groupId> |
| | | <artifactId>jaxb-api</artifactId> |
| | | </dependency> |
| | | |
| | | <!-- Apache Lang3 --> |
| | | <dependency> |
| | | <groupId>org.apache.commons</groupId> |
| | | <artifactId>commons-lang3</artifactId> |
| | | </dependency> |
| | | |
| | | <!-- Commons Io --> |
| | | <dependency> |
| | | <groupId>commons-io</groupId> |
| | | <artifactId>commons-io</artifactId> |
| | | </dependency> |
| | | |
| | | <!-- excel工具 --> |
| | | <dependency> |
| | | <groupId>org.apache.poi</groupId> |
| | | <artifactId>poi-ooxml</artifactId> |
| | | </dependency> |
| | | |
| | | <!-- Java Servlet --> |
| | | <dependency> |
| | | <groupId>javax.servlet</groupId> |
| | | <artifactId>javax.servlet-api</artifactId> |
| | | </dependency> |
| | | |
| | | <!-- Swagger --> |
| | | <dependency> |
| | | <groupId>io.swagger</groupId> |
| | | <artifactId>swagger-annotations</artifactId> |
| | | </dependency> |
| | | |
| | | <!--mybatis-plus--> |
| | | <dependency> |
| | | <groupId>com.baomidou</groupId> |
| | | <artifactId>mybatis-plus-boot-starter</artifactId> |
| | | <version>3.5.2</version> |
| | | </dependency> |
| | | |
| | | |
| | | <!--华为云的obs--> |
| | | <dependency> |
| | | <groupId>com.huaweicloud</groupId> |
| | | <artifactId>esdk-obs-java</artifactId> |
| | | <version>3.19.5</version> |
| | | </dependency> |
| | | |
| | | <dependency> |
| | | <groupId>com.squareup.okhttp3</groupId> |
| | | <artifactId>okhttp</artifactId> |
| | | <version>4.9.3</version> |
| | | </dependency> |
| | | |
| | | <dependency> |
| | | <groupId>com.squareup.okio</groupId> |
| | | <artifactId>okio</artifactId> |
| | | <version>2.8.0</version> |
| | | </dependency> |
| | | |
| | | |
| | | </dependencies> |
| | | |
| | | </project> |
New file |
| | |
| | | package com.ruoyi.common.core.annotation; |
| | | |
| | | import java.lang.annotation.ElementType; |
| | | import java.lang.annotation.Retention; |
| | | import java.lang.annotation.RetentionPolicy; |
| | | import java.lang.annotation.Target; |
| | | import java.math.BigDecimal; |
| | | import org.apache.poi.ss.usermodel.HorizontalAlignment; |
| | | import org.apache.poi.ss.usermodel.IndexedColors; |
| | | import com.ruoyi.common.core.utils.poi.ExcelHandlerAdapter; |
| | | |
| | | /** |
| | | * 自定义导出Excel数据注解 |
| | | * |
| | | * @author ruoyi |
| | | */ |
| | | @Retention(RetentionPolicy.RUNTIME) |
| | | @Target(ElementType.FIELD) |
| | | public @interface Excel |
| | | { |
| | | /** |
| | | * 导出时在excel中排序 |
| | | */ |
| | | public int sort() default Integer.MAX_VALUE; |
| | | |
| | | /** |
| | | * 导出到Excel中的名字. |
| | | */ |
| | | public String name() default ""; |
| | | |
| | | /** |
| | | * 日期格式, 如: yyyy-MM-dd |
| | | */ |
| | | public String dateFormat() default ""; |
| | | |
| | | /** |
| | | * 读取内容转表达式 (如: 0=男,1=女,2=未知) |
| | | */ |
| | | public String readConverterExp() default ""; |
| | | |
| | | /** |
| | | * 分隔符,读取字符串组内容 |
| | | */ |
| | | public String separator() default ","; |
| | | |
| | | /** |
| | | * BigDecimal 精度 默认:-1(默认不开启BigDecimal格式化) |
| | | */ |
| | | public int scale() default -1; |
| | | |
| | | /** |
| | | * BigDecimal 舍入规则 默认:BigDecimal.ROUND_HALF_EVEN |
| | | */ |
| | | public int roundingMode() default BigDecimal.ROUND_HALF_EVEN; |
| | | |
| | | /** |
| | | * 导出时在excel中每个列的高度 单位为字符 |
| | | */ |
| | | public double height() default 14; |
| | | |
| | | /** |
| | | * 导出时在excel中每个列的宽 单位为字符 |
| | | */ |
| | | public double width() default 16; |
| | | |
| | | /** |
| | | * 文字后缀,如% 90 变成90% |
| | | */ |
| | | public String suffix() default ""; |
| | | |
| | | /** |
| | | * 当值为空时,字段的默认值 |
| | | */ |
| | | public String defaultValue() default ""; |
| | | |
| | | /** |
| | | * 提示信息 |
| | | */ |
| | | public String prompt() default ""; |
| | | |
| | | /** |
| | | * 设置只能选择不能输入的列内容. |
| | | */ |
| | | public String[] combo() default {}; |
| | | |
| | | /** |
| | | * 是否需要纵向合并单元格,应对需求:含有list集合单元格) |
| | | */ |
| | | public boolean needMerge() default false; |
| | | |
| | | /** |
| | | * 是否导出数据,应对需求:有时我们需要导出一份模板,这是标题需要但内容需要用户手工填写. |
| | | */ |
| | | public boolean isExport() default true; |
| | | |
| | | /** |
| | | * 另一个类中的属性名称,支持多级获取,以小数点隔开 |
| | | */ |
| | | public String targetAttr() default ""; |
| | | |
| | | /** |
| | | * 是否自动统计数据,在最后追加一行统计数据总和 |
| | | */ |
| | | public boolean isStatistics() default false; |
| | | |
| | | /** |
| | | * 导出类型(0数字 1字符串) |
| | | */ |
| | | public ColumnType cellType() default ColumnType.STRING; |
| | | |
| | | /** |
| | | * 导出列头背景色 |
| | | */ |
| | | public IndexedColors headerBackgroundColor() default IndexedColors.GREY_50_PERCENT; |
| | | |
| | | /** |
| | | * 导出列头字体颜色 |
| | | */ |
| | | public IndexedColors headerColor() default IndexedColors.WHITE; |
| | | |
| | | /** |
| | | * 导出单元格背景色 |
| | | */ |
| | | public IndexedColors backgroundColor() default IndexedColors.WHITE; |
| | | |
| | | /** |
| | | * 导出单元格字体颜色 |
| | | */ |
| | | public IndexedColors color() default IndexedColors.BLACK; |
| | | |
| | | /** |
| | | * 导出字段对齐方式 |
| | | */ |
| | | public HorizontalAlignment align() default HorizontalAlignment.CENTER; |
| | | |
| | | /** |
| | | * 自定义数据处理器 |
| | | */ |
| | | public Class<?> handler() default ExcelHandlerAdapter.class; |
| | | |
| | | /** |
| | | * 自定义数据处理器参数 |
| | | */ |
| | | public String[] args() default {}; |
| | | |
| | | /** |
| | | * 字段类型(0:导出导入;1:仅导出;2:仅导入) |
| | | */ |
| | | Type type() default Type.ALL; |
| | | |
| | | public enum Type |
| | | { |
| | | ALL(0), EXPORT(1), IMPORT(2); |
| | | private final int value; |
| | | |
| | | Type(int value) |
| | | { |
| | | this.value = value; |
| | | } |
| | | |
| | | public int value() |
| | | { |
| | | return this.value; |
| | | } |
| | | } |
| | | |
| | | public enum ColumnType |
| | | { |
| | | NUMERIC(0), STRING(1), IMAGE(2); |
| | | private final int value; |
| | | |
| | | ColumnType(int value) |
| | | { |
| | | this.value = value; |
| | | } |
| | | |
| | | public int value() |
| | | { |
| | | return this.value; |
| | | } |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.common.core.annotation; |
| | | |
| | | import java.lang.annotation.ElementType; |
| | | import java.lang.annotation.Retention; |
| | | import java.lang.annotation.RetentionPolicy; |
| | | import java.lang.annotation.Target; |
| | | |
| | | /** |
| | | * Excel注解集 |
| | | * |
| | | * @author ruoyi |
| | | */ |
| | | @Target(ElementType.FIELD) |
| | | @Retention(RetentionPolicy.RUNTIME) |
| | | public @interface Excels |
| | | { |
| | | Excel[] value(); |
| | | } |
New file |
| | |
| | | package com.ruoyi.common.core.constant; |
| | | |
| | | /** |
| | | * 缓存常量信息 |
| | | * |
| | | * @author ruoyi |
| | | */ |
| | | public class CacheConstants |
| | | { |
| | | /** |
| | | * 缓存有效期,默认720(分钟) |
| | | */ |
| | | public final static long EXPIRATION = 720; |
| | | |
| | | /** |
| | | * 缓存刷新时间,默认120(分钟) |
| | | */ |
| | | public final static long REFRESH_TIME = 120; |
| | | |
| | | /** |
| | | * 密码最大错误次数 |
| | | */ |
| | | public final static int PASSWORD_MAX_RETRY_COUNT = 5; |
| | | |
| | | /** |
| | | * 密码锁定时间,默认10(分钟) |
| | | */ |
| | | public final static long PASSWORD_LOCK_TIME = 10; |
| | | |
| | | /** |
| | | * 权限缓存前缀 |
| | | */ |
| | | public final static String LOGIN_TOKEN_KEY = "login_tokens:"; |
| | | |
| | | /** |
| | | * 验证码 redis key |
| | | */ |
| | | public static final String CAPTCHA_CODE_KEY = "captcha_codes:"; |
| | | |
| | | /** |
| | | * 参数管理 cache key |
| | | */ |
| | | public static final String SYS_CONFIG_KEY = "sys_config:"; |
| | | |
| | | /** |
| | | * 字典管理 cache key |
| | | */ |
| | | public static final String SYS_DICT_KEY = "sys_dict:"; |
| | | |
| | | /** |
| | | * 登录账户密码错误次数 redis key |
| | | */ |
| | | public static final String PWD_ERR_CNT_KEY = "pwd_err_cnt:"; |
| | | |
| | | /** |
| | | * 登录IP黑名单 cache key |
| | | */ |
| | | public static final String SYS_LOGIN_BLACKIPLIST = SYS_CONFIG_KEY + "sys.login.blackIPList"; |
| | | } |
New file |
| | |
| | | package com.ruoyi.common.core.constant; |
| | | |
| | | /** |
| | | * 通用常量信息 |
| | | * |
| | | * @author ruoyi |
| | | */ |
| | | public class Constants |
| | | { |
| | | /** |
| | | * UTF-8 字符集 |
| | | */ |
| | | public static final String UTF8 = "UTF-8"; |
| | | |
| | | /** |
| | | * GBK 字符集 |
| | | */ |
| | | public static final String GBK = "GBK"; |
| | | |
| | | /** |
| | | * www主域 |
| | | */ |
| | | public static final String WWW = "www."; |
| | | |
| | | /** |
| | | * RMI 远程方法调用 |
| | | */ |
| | | public static final String LOOKUP_RMI = "rmi:"; |
| | | |
| | | /** |
| | | * LDAP 远程方法调用 |
| | | */ |
| | | public static final String LOOKUP_LDAP = "ldap:"; |
| | | |
| | | /** |
| | | * LDAPS 远程方法调用 |
| | | */ |
| | | public static final String LOOKUP_LDAPS = "ldaps:"; |
| | | |
| | | /** |
| | | * http请求 |
| | | */ |
| | | public static final String HTTP = "http://"; |
| | | |
| | | /** |
| | | * https请求 |
| | | */ |
| | | public static final String HTTPS = "https://"; |
| | | |
| | | /** |
| | | * 成功标记 |
| | | */ |
| | | public static final Integer SUCCESS = 200; |
| | | |
| | | /** |
| | | * 失败标记 |
| | | */ |
| | | public static final Integer FAIL = 500; |
| | | |
| | | /** |
| | | * 登录成功状态 |
| | | */ |
| | | public static final String LOGIN_SUCCESS_STATUS = "0"; |
| | | |
| | | /** |
| | | * 登录失败状态 |
| | | */ |
| | | public static final String LOGIN_FAIL_STATUS = "1"; |
| | | |
| | | /** |
| | | * 登录成功 |
| | | */ |
| | | public static final String LOGIN_SUCCESS = "Success"; |
| | | |
| | | /** |
| | | * 注销 |
| | | */ |
| | | public static final String LOGOUT = "Logout"; |
| | | |
| | | /** |
| | | * 注册 |
| | | */ |
| | | public static final String REGISTER = "Register"; |
| | | |
| | | /** |
| | | * 登录失败 |
| | | */ |
| | | public static final String LOGIN_FAIL = "Error"; |
| | | |
| | | /** |
| | | * 当前记录起始索引 |
| | | */ |
| | | public static final String PAGE_NUM = "pageNum"; |
| | | |
| | | /** |
| | | * 每页显示记录数 |
| | | */ |
| | | public static final String PAGE_SIZE = "pageSize"; |
| | | |
| | | /** |
| | | * 排序列 |
| | | */ |
| | | public static final String ORDER_BY_COLUMN = "orderByColumn"; |
| | | |
| | | /** |
| | | * 排序的方向 "desc" 或者 "asc". |
| | | */ |
| | | public static final String IS_ASC = "isAsc"; |
| | | |
| | | /** |
| | | * 验证码有效期(分钟) |
| | | */ |
| | | public static final long CAPTCHA_EXPIRATION = 2; |
| | | |
| | | /** |
| | | * 资源映射路径 前缀 |
| | | */ |
| | | public static final String RESOURCE_PREFIX = "/profile"; |
| | | |
| | | /** |
| | | * 定时任务白名单配置(仅允许访问的包名,如其他需要可以自行添加) |
| | | */ |
| | | public static final String[] JOB_WHITELIST_STR = { "com.ruoyi" }; |
| | | |
| | | /** |
| | | * 时间格式化 |
| | | */ |
| | | public static final String DATE_FORMATTER_TIME = "yyyy-MM-dd HH:mm:ss"; |
| | | public static final String DATE_FORMATTER_DATE = "yyyy-MM-dd"; |
| | | |
| | | /** |
| | | * 定时任务违规的字符 |
| | | */ |
| | | public static final String[] JOB_ERROR_STR = { "java.net.URL", "javax.naming.InitialContext", "org.yaml.snakeyaml", |
| | | "org.springframework", "org.apache", "com.ruoyi.common.core.utils.file" }; |
| | | } |
New file |
| | |
| | | package com.ruoyi.common.core.constant; |
| | | |
| | | /** |
| | | * 代码生成通用常量 |
| | | * |
| | | * @author ruoyi |
| | | */ |
| | | public class GenConstants |
| | | { |
| | | /** 单表(增删改查) */ |
| | | public static final String TPL_CRUD = "crud"; |
| | | |
| | | /** 树表(增删改查) */ |
| | | public static final String TPL_TREE = "tree"; |
| | | |
| | | /** 主子表(增删改查) */ |
| | | public static final String TPL_SUB = "sub"; |
| | | |
| | | /** 树编码字段 */ |
| | | public static final String TREE_CODE = "treeCode"; |
| | | |
| | | /** 树父编码字段 */ |
| | | public static final String TREE_PARENT_CODE = "treeParentCode"; |
| | | |
| | | /** 树名称字段 */ |
| | | public static final String TREE_NAME = "treeName"; |
| | | |
| | | /** 上级菜单ID字段 */ |
| | | public static final String PARENT_MENU_ID = "parentMenuId"; |
| | | |
| | | /** 上级菜单名称字段 */ |
| | | public static final String PARENT_MENU_NAME = "parentMenuName"; |
| | | |
| | | /** 数据库字符串类型 */ |
| | | public static final String[] COLUMNTYPE_STR = { "char", "varchar", "nvarchar", "varchar2" }; |
| | | |
| | | /** 数据库文本类型 */ |
| | | public static final String[] COLUMNTYPE_TEXT = { "tinytext", "text", "mediumtext", "longtext" }; |
| | | |
| | | /** 数据库时间类型 */ |
| | | public static final String[] COLUMNTYPE_TIME = { "datetime", "time", "date", "timestamp" }; |
| | | |
| | | /** 数据库数字类型 */ |
| | | public static final String[] COLUMNTYPE_NUMBER = { "tinyint", "smallint", "mediumint", "int", "number", "integer", |
| | | "bigint", "float", "double", "decimal" }; |
| | | |
| | | /** 页面不需要编辑字段 */ |
| | | public static final String[] COLUMNNAME_NOT_EDIT = { "id", "create_by", "create_time", "del_flag" }; |
| | | |
| | | /** 页面不需要显示的列表字段 */ |
| | | public static final String[] COLUMNNAME_NOT_LIST = { "id", "create_by", "create_time", "del_flag", "update_by", |
| | | "update_time" }; |
| | | |
| | | /** 页面不需要查询字段 */ |
| | | public static final String[] COLUMNNAME_NOT_QUERY = { "id", "create_by", "create_time", "del_flag", "update_by", |
| | | "update_time", "remark" }; |
| | | |
| | | /** Entity基类字段 */ |
| | | public static final String[] BASE_ENTITY = { "createBy", "createTime", "updateBy", "updateTime", "remark" }; |
| | | |
| | | /** Tree基类字段 */ |
| | | public static final String[] TREE_ENTITY = { "parentName", "parentId", "orderNum", "ancestors" }; |
| | | |
| | | /** 文本框 */ |
| | | public static final String HTML_INPUT = "input"; |
| | | |
| | | /** 文本域 */ |
| | | public static final String HTML_TEXTAREA = "textarea"; |
| | | |
| | | /** 下拉框 */ |
| | | public static final String HTML_SELECT = "select"; |
| | | |
| | | /** 单选框 */ |
| | | public static final String HTML_RADIO = "radio"; |
| | | |
| | | /** 复选框 */ |
| | | public static final String HTML_CHECKBOX = "checkbox"; |
| | | |
| | | /** 日期控件 */ |
| | | public static final String HTML_DATETIME = "datetime"; |
| | | |
| | | /** 图片上传控件 */ |
| | | public static final String HTML_IMAGE_UPLOAD = "imageUpload"; |
| | | |
| | | /** 文件上传控件 */ |
| | | public static final String HTML_FILE_UPLOAD = "fileUpload"; |
| | | |
| | | /** 富文本控件 */ |
| | | public static final String HTML_EDITOR = "editor"; |
| | | |
| | | /** 字符串类型 */ |
| | | public static final String TYPE_STRING = "String"; |
| | | |
| | | /** 整型 */ |
| | | public static final String TYPE_INTEGER = "Integer"; |
| | | |
| | | /** 长整型 */ |
| | | public static final String TYPE_LONG = "Long"; |
| | | |
| | | /** 浮点型 */ |
| | | public static final String TYPE_DOUBLE = "Double"; |
| | | |
| | | /** 高精度计算类型 */ |
| | | public static final String TYPE_BIGDECIMAL = "BigDecimal"; |
| | | |
| | | /** 时间类型 */ |
| | | public static final String TYPE_DATE = "Date"; |
| | | |
| | | /** 模糊查询 */ |
| | | public static final String QUERY_LIKE = "LIKE"; |
| | | |
| | | /** 相等查询 */ |
| | | public static final String QUERY_EQ = "EQ"; |
| | | |
| | | /** 需要 */ |
| | | public static final String REQUIRE = "1"; |
| | | } |
New file |
| | |
| | | package com.ruoyi.common.core.constant; |
| | | |
| | | /** |
| | | * 返回状态码 |
| | | * |
| | | * @author ruoyi |
| | | */ |
| | | public class HttpStatus |
| | | { |
| | | /** |
| | | * 操作成功 |
| | | */ |
| | | public static final int SUCCESS = 200; |
| | | |
| | | /** |
| | | * 对象创建成功 |
| | | */ |
| | | public static final int CREATED = 201; |
| | | |
| | | /** |
| | | * 请求已经被接受 |
| | | */ |
| | | public static final int ACCEPTED = 202; |
| | | |
| | | /** |
| | | * 操作已经执行成功,但是没有返回数据 |
| | | */ |
| | | public static final int NO_CONTENT = 204; |
| | | |
| | | /** |
| | | * 资源已被移除 |
| | | */ |
| | | public static final int MOVED_PERM = 301; |
| | | |
| | | /** |
| | | * 重定向 |
| | | */ |
| | | public static final int SEE_OTHER = 303; |
| | | |
| | | /** |
| | | * 资源没有被修改 |
| | | */ |
| | | public static final int NOT_MODIFIED = 304; |
| | | |
| | | /** |
| | | * 参数列表错误(缺少,格式不匹配) |
| | | */ |
| | | public static final int BAD_REQUEST = 400; |
| | | |
| | | /** |
| | | * 未授权 |
| | | */ |
| | | public static final int UNAUTHORIZED = 401; |
| | | |
| | | /** |
| | | * 访问受限,授权过期 |
| | | */ |
| | | public static final int FORBIDDEN = 403; |
| | | |
| | | /** |
| | | * 资源,服务未找到 |
| | | */ |
| | | public static final int NOT_FOUND = 404; |
| | | |
| | | /** |
| | | * 不允许的http方法 |
| | | */ |
| | | public static final int BAD_METHOD = 405; |
| | | |
| | | /** |
| | | * 资源冲突,或者资源被锁 |
| | | */ |
| | | public static final int CONFLICT = 409; |
| | | |
| | | /** |
| | | * 不支持的数据,媒体类型 |
| | | */ |
| | | public static final int UNSUPPORTED_TYPE = 415; |
| | | |
| | | /** |
| | | * 系统内部错误 |
| | | */ |
| | | public static final int ERROR = 500; |
| | | |
| | | /** |
| | | * 接口未实现 |
| | | */ |
| | | public static final int NOT_IMPLEMENTED = 501; |
| | | |
| | | /** |
| | | * 系统警告消息 |
| | | */ |
| | | public static final int WARN = 601; |
| | | } |
New file |
| | |
| | | package com.ruoyi.common.core.constant; |
| | | |
| | | /** |
| | | * 任务调度通用常量 |
| | | * |
| | | * @author ruoyi |
| | | */ |
| | | public class ScheduleConstants |
| | | { |
| | | public static final String TASK_CLASS_NAME = "TASK_CLASS_NAME"; |
| | | |
| | | /** 执行目标key */ |
| | | public static final String TASK_PROPERTIES = "TASK_PROPERTIES"; |
| | | |
| | | /** 默认 */ |
| | | public static final String MISFIRE_DEFAULT = "0"; |
| | | |
| | | /** 立即触发执行 */ |
| | | public static final String MISFIRE_IGNORE_MISFIRES = "1"; |
| | | |
| | | /** 触发一次执行 */ |
| | | public static final String MISFIRE_FIRE_AND_PROCEED = "2"; |
| | | |
| | | /** 不触发立即执行 */ |
| | | public static final String MISFIRE_DO_NOTHING = "3"; |
| | | |
| | | public enum Status |
| | | { |
| | | /** |
| | | * 正常 |
| | | */ |
| | | NORMAL("0"), |
| | | /** |
| | | * 暂停 |
| | | */ |
| | | PAUSE("1"); |
| | | |
| | | private String value; |
| | | |
| | | private Status(String value) |
| | | { |
| | | this.value = value; |
| | | } |
| | | |
| | | public String getValue() |
| | | { |
| | | return value; |
| | | } |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.common.core.constant; |
| | | |
| | | /** |
| | | * 权限相关通用常量 |
| | | * |
| | | * @author ruoyi |
| | | */ |
| | | public class SecurityConstants |
| | | { |
| | | /** |
| | | * 用户ID字段 |
| | | */ |
| | | public static final String DETAILS_USER_ID = "user_id"; |
| | | |
| | | /** |
| | | * 用户名字段 |
| | | */ |
| | | public static final String DETAILS_USERNAME = "username"; |
| | | |
| | | /** |
| | | * 授权信息字段 |
| | | */ |
| | | public static final String AUTHORIZATION_HEADER = "Authorization"; |
| | | |
| | | /** |
| | | * 请求来源 |
| | | */ |
| | | public static final String FROM_SOURCE = "from-source"; |
| | | |
| | | /** |
| | | * 内部请求 |
| | | */ |
| | | public static final String INNER = "inner"; |
| | | |
| | | /** |
| | | * 用户标识 |
| | | */ |
| | | public static final String USER_KEY = "user_key"; |
| | | |
| | | /** |
| | | * 登录用户 |
| | | */ |
| | | public static final String LOGIN_USER = "login_user"; |
| | | |
| | | /** |
| | | * 角色权限 |
| | | */ |
| | | public static final String ROLE_PERMISSION = "role_permission"; |
| | | } |
New file |
| | |
| | | package com.ruoyi.common.core.constant; |
| | | |
| | | /** |
| | | * 服务名称 |
| | | * |
| | | * @author ruoyi |
| | | */ |
| | | public class ServiceNameConstants |
| | | { |
| | | /** |
| | | * 认证服务的serviceid |
| | | */ |
| | | public static final String AUTH_SERVICE = "ruoyi-auth"; |
| | | |
| | | /** |
| | | * 系统模块的serviceid |
| | | */ |
| | | public static final String SYSTEM_SERVICE = "ruoyi-system"; |
| | | public static final String STUDY_SERVICE = "ruoyi-study"; |
| | | public static final String GOODS_SERVICE = "ruoyi-goods"; |
| | | |
| | | /** |
| | | * 文件服务的serviceid |
| | | */ |
| | | public static final String FILE_SERVICE = "ruoyi-file"; |
| | | /** |
| | | * 后台服务的serviceid |
| | | */ |
| | | public static final String MANAGEMENT_SERVICE = "ruoyi-management"; |
| | | |
| | | /** |
| | | * 车辆服务的serviceid |
| | | */ |
| | | public static final String VEHICLE_SERVICE = "ruoyi-vehicle"; |
| | | |
| | | /** |
| | | * 车辆合同的serviceid |
| | | */ |
| | | public static final String CONTRACT_SERVICE = "ruoyi-contract"; |
| | | } |
New file |
| | |
| | | package com.ruoyi.common.core.constant; |
| | | |
| | | /** |
| | | * Token的Key常量 |
| | | * |
| | | * @author ruoyi |
| | | */ |
| | | public class TokenConstants |
| | | { |
| | | /** |
| | | * 令牌自定义标识 |
| | | */ |
| | | public static final String AUTHENTICATION = "Authorization"; |
| | | |
| | | /** |
| | | * 令牌前缀 |
| | | */ |
| | | public static final String PREFIX = "Bearer "; |
| | | |
| | | /** |
| | | * 令牌秘钥 |
| | | */ |
| | | public final static String SECRET = "abcdefghijklmnopqrstuvwxyz"; |
| | | |
| | | } |
New file |
| | |
| | | package com.ruoyi.common.core.constant; |
| | | |
| | | /** |
| | | * 用户常量信息 |
| | | * |
| | | * @author ruoyi |
| | | */ |
| | | public class UserConstants |
| | | { |
| | | /** |
| | | * 平台内系统用户的唯一标志 |
| | | */ |
| | | public static final String SYS_USER = "SYS_USER"; |
| | | |
| | | /** 正常状态 */ |
| | | public static final String NORMAL = "0"; |
| | | |
| | | /** 异常状态 */ |
| | | public static final String EXCEPTION = "1"; |
| | | |
| | | /** 用户封禁状态 */ |
| | | public static final String USER_DISABLE = "1"; |
| | | |
| | | /** 角色封禁状态 */ |
| | | public static final String ROLE_DISABLE = "1"; |
| | | |
| | | /** 部门正常状态 */ |
| | | public static final String DEPT_NORMAL = "0"; |
| | | |
| | | /** 部门停用状态 */ |
| | | public static final String DEPT_DISABLE = "1"; |
| | | |
| | | /** 字典正常状态 */ |
| | | public static final String DICT_NORMAL = "0"; |
| | | |
| | | /** 是否为系统默认(是) */ |
| | | public static final String YES = "Y"; |
| | | |
| | | /** 是否菜单外链(是) */ |
| | | public static final String YES_FRAME = "0"; |
| | | |
| | | /** 是否菜单外链(否) */ |
| | | public static final String NO_FRAME = "1"; |
| | | |
| | | /** 菜单类型(目录) */ |
| | | public static final String TYPE_DIR = "M"; |
| | | |
| | | /** 菜单类型(菜单) */ |
| | | public static final String TYPE_MENU = "C"; |
| | | |
| | | /** 菜单类型(按钮) */ |
| | | public static final String TYPE_BUTTON = "F"; |
| | | |
| | | /** Layout组件标识 */ |
| | | public final static String LAYOUT = "Layout"; |
| | | |
| | | /** ParentView组件标识 */ |
| | | public final static String PARENT_VIEW = "ParentView"; |
| | | |
| | | /** InnerLink组件标识 */ |
| | | public final static String INNER_LINK = "InnerLink"; |
| | | |
| | | /** 校验是否唯一的返回标识 */ |
| | | public final static boolean UNIQUE = true; |
| | | public final static boolean NOT_UNIQUE = false; |
| | | |
| | | /** |
| | | * 用户名长度限制 |
| | | */ |
| | | public static final int USERNAME_MIN_LENGTH = 2; |
| | | |
| | | public static final int USERNAME_MAX_LENGTH = 20; |
| | | |
| | | /** |
| | | * 密码长度限制 |
| | | */ |
| | | public static final int PASSWORD_MIN_LENGTH = 5; |
| | | |
| | | public static final int PASSWORD_MAX_LENGTH = 20; |
| | | } |
New file |
| | |
| | | package com.ruoyi.common.core.context; |
| | | |
| | | import java.util.Map; |
| | | import java.util.concurrent.ConcurrentHashMap; |
| | | import com.alibaba.ttl.TransmittableThreadLocal; |
| | | import com.ruoyi.common.core.constant.SecurityConstants; |
| | | import com.ruoyi.common.core.text.Convert; |
| | | import com.ruoyi.common.core.utils.StringUtils; |
| | | |
| | | /** |
| | | * 获取当前线程变量中的 用户id、用户名称、Token等信息 |
| | | * 注意: 必须在网关通过请求头的方法传入,同时在HeaderInterceptor拦截器设置值。 否则这里无法获取 |
| | | * |
| | | * @author ruoyi |
| | | */ |
| | | public class SecurityContextHolder |
| | | { |
| | | private static final TransmittableThreadLocal<Map<String, Object>> THREAD_LOCAL = new TransmittableThreadLocal<>(); |
| | | |
| | | public static void set(String key, Object value) |
| | | { |
| | | Map<String, Object> map = getLocalMap(); |
| | | map.put(key, value == null ? StringUtils.EMPTY : value); |
| | | } |
| | | |
| | | public static String get(String key) |
| | | { |
| | | Map<String, Object> map = getLocalMap(); |
| | | return Convert.toStr(map.getOrDefault(key, StringUtils.EMPTY)); |
| | | } |
| | | |
| | | public static <T> T get(String key, Class<T> clazz) |
| | | { |
| | | Map<String, Object> map = getLocalMap(); |
| | | return StringUtils.cast(map.getOrDefault(key, null)); |
| | | } |
| | | |
| | | public static Map<String, Object> getLocalMap() |
| | | { |
| | | Map<String, Object> map = THREAD_LOCAL.get(); |
| | | if (map == null) |
| | | { |
| | | map = new ConcurrentHashMap<String, Object>(); |
| | | THREAD_LOCAL.set(map); |
| | | } |
| | | return map; |
| | | } |
| | | |
| | | public static void setLocalMap(Map<String, Object> threadLocalMap) |
| | | { |
| | | THREAD_LOCAL.set(threadLocalMap); |
| | | } |
| | | |
| | | public static Long getUserId() |
| | | { |
| | | return Convert.toLong(get(SecurityConstants.DETAILS_USER_ID), 0L); |
| | | } |
| | | |
| | | public static void setUserId(String account) |
| | | { |
| | | set(SecurityConstants.DETAILS_USER_ID, account); |
| | | } |
| | | |
| | | public static String getUserName() |
| | | { |
| | | return get(SecurityConstants.DETAILS_USERNAME); |
| | | } |
| | | |
| | | public static void setUserName(String username) |
| | | { |
| | | set(SecurityConstants.DETAILS_USERNAME, username); |
| | | } |
| | | |
| | | public static String getUserKey() |
| | | { |
| | | return get(SecurityConstants.USER_KEY); |
| | | } |
| | | |
| | | public static void setUserKey(String userKey) |
| | | { |
| | | set(SecurityConstants.USER_KEY, userKey); |
| | | } |
| | | |
| | | public static String getPermission() |
| | | { |
| | | return get(SecurityConstants.ROLE_PERMISSION); |
| | | } |
| | | |
| | | public static void setPermission(String permissions) |
| | | { |
| | | set(SecurityConstants.ROLE_PERMISSION, permissions); |
| | | } |
| | | |
| | | public static void remove() |
| | | { |
| | | THREAD_LOCAL.remove(); |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.common.core.domain; |
| | | |
| | | import java.io.Serializable; |
| | | import com.ruoyi.common.core.constant.Constants; |
| | | |
| | | /** |
| | | * 响应信息主体 |
| | | * |
| | | * @author ruoyi |
| | | */ |
| | | public class R<T> implements Serializable |
| | | { |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | /** 成功 */ |
| | | public static final int SUCCESS = Constants.SUCCESS; |
| | | |
| | | /** 失败 */ |
| | | public static final int FAIL = Constants.FAIL; |
| | | |
| | | private int code; |
| | | |
| | | private String msg; |
| | | |
| | | private T data; |
| | | |
| | | public static <T> R<T> ok() |
| | | { |
| | | return restResult(null, SUCCESS, null); |
| | | } |
| | | |
| | | public static <T> R<T> ok(T data) |
| | | { |
| | | return restResult(data, SUCCESS, null); |
| | | } |
| | | |
| | | public static <T> R<T> ok(T data, String msg) |
| | | { |
| | | return restResult(data, SUCCESS, msg); |
| | | } |
| | | |
| | | public static <T> R<T> fail() |
| | | { |
| | | return restResult(null, FAIL, null); |
| | | } |
| | | |
| | | public static <T> R<T> fail(String msg) |
| | | { |
| | | return restResult(null, FAIL, msg); |
| | | } |
| | | |
| | | public static <T> R<T> fail(T data) |
| | | { |
| | | return restResult(data, FAIL, null); |
| | | } |
| | | |
| | | public static <T> R<T> fail(T data, String msg) |
| | | { |
| | | return restResult(data, FAIL, msg); |
| | | } |
| | | |
| | | public static <T> R<T> fail(int code, String msg) |
| | | { |
| | | return restResult(null, code, msg); |
| | | } |
| | | |
| | | private static <T> R<T> restResult(T data, int code, String msg) |
| | | { |
| | | R<T> apiResult = new R<>(); |
| | | apiResult.setCode(code); |
| | | apiResult.setData(data); |
| | | apiResult.setMsg(msg); |
| | | return apiResult; |
| | | } |
| | | |
| | | public int getCode() |
| | | { |
| | | return code; |
| | | } |
| | | |
| | | public void setCode(int code) |
| | | { |
| | | this.code = code; |
| | | } |
| | | |
| | | public String getMsg() |
| | | { |
| | | return msg; |
| | | } |
| | | |
| | | public void setMsg(String msg) |
| | | { |
| | | this.msg = msg; |
| | | } |
| | | |
| | | public T getData() |
| | | { |
| | | return data; |
| | | } |
| | | |
| | | public void setData(T data) |
| | | { |
| | | this.data = data; |
| | | } |
| | | |
| | | public static <T> Boolean isError(R<T> ret) |
| | | { |
| | | return !isSuccess(ret); |
| | | } |
| | | |
| | | public static <T> Boolean isSuccess(R<T> ret) |
| | | { |
| | | return R.SUCCESS == ret.getCode(); |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.common.core.enums; |
| | | |
| | | import lombok.Getter; |
| | | |
| | | /** |
| | | * @Description |
| | | * @Author xiaochen |
| | | * @Date 2023/6/8 16:42 |
| | | */ |
| | | public enum ApproveConfigEnum { |
| | | |
| | | /*审批类型 1=交车审批、2=续约审批、3=退车审批*/ |
| | | |
| | | DELIVERY_APPROVAL(1, "交车审批"), |
| | | RENEWAL_APPROVAL(2, "续约审批"), |
| | | RETURN_APPROVAL(3, "退车审批"); |
| | | |
| | | @Getter |
| | | private String desc; |
| | | |
| | | |
| | | @Getter |
| | | private int code; |
| | | |
| | | |
| | | ApproveConfigEnum(int code, String desc) { |
| | | this.code = code; |
| | | this.desc = desc; |
| | | } |
| | | |
| | | /** |
| | | * 通过code获取枚举 |
| | | * |
| | | * @param code |
| | | * @return |
| | | */ |
| | | public static ApproveConfigEnum fromCode(Integer code) { |
| | | ApproveConfigEnum[] resultTypes = ApproveConfigEnum.values(); |
| | | for (ApproveConfigEnum resultType : resultTypes) { |
| | | if (code.equals(resultType.getCode())) { |
| | | return resultType; |
| | | } |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | } |
New file |
| | |
| | | package com.ruoyi.common.core.enums; |
| | | |
| | | import lombok.Getter; |
| | | |
| | | /** |
| | | * @Description |
| | | * @Author xiaochen |
| | | * @Date 2023/6/8 16:42 |
| | | */ |
| | | public enum AuditStateEnum { |
| | | |
| | | /*审核状态 0待审批 1通过 2驳回 3已撤回*/ |
| | | |
| | | PENDING_APPROVAL(0, "待审批"), |
| | | APPROVED(1, "审批通过"), |
| | | APPROVAL_REJECTION(2, "审批驳回"), |
| | | WITHDRAWN(3, "已撤回"); |
| | | |
| | | @Getter |
| | | private String desc; |
| | | |
| | | |
| | | @Getter |
| | | private int code; |
| | | |
| | | |
| | | AuditStateEnum(int code, String desc) { |
| | | this.code = code; |
| | | this.desc = desc; |
| | | } |
| | | |
| | | /** |
| | | * 通过code获取枚举 |
| | | * |
| | | * @param code |
| | | * @return |
| | | */ |
| | | public static AuditStateEnum fromCode(Integer code) { |
| | | AuditStateEnum[] resultTypes = AuditStateEnum.values(); |
| | | for (AuditStateEnum resultType : resultTypes) { |
| | | if (code.equals(resultType.getCode())) { |
| | | return resultType; |
| | | } |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | } |
New file |
| | |
| | | package com.ruoyi.common.core.enums; |
| | | |
| | | import lombok.Getter; |
| | | |
| | | /** |
| | | * @Description |
| | | * @Author xiaochen |
| | | * @Date 2023/6/8 16:42 |
| | | */ |
| | | public enum AuditTypeEnum { |
| | | |
| | | /*审核类型 1交车申请 2续约申请 3退车申请 4事故账单申请*/ |
| | | |
| | | DELIVERY_APPLICATION(1, "交车申请"), |
| | | RENEWAL_APPLICATION(2, "续约申请"), |
| | | RETURN_APPLICATION(3, "退车申请"), |
| | | ACCIDENT_BILL_APPLICATION(4, "事故账单申请"); |
| | | |
| | | @Getter |
| | | private String desc; |
| | | |
| | | |
| | | @Getter |
| | | private int code; |
| | | |
| | | |
| | | AuditTypeEnum(int code, String desc) { |
| | | this.code = code; |
| | | this.desc = desc; |
| | | } |
| | | |
| | | /** |
| | | * 通过code获取枚举 |
| | | * |
| | | * @param code |
| | | * @return |
| | | */ |
| | | public static AuditTypeEnum fromCode(Integer code) { |
| | | AuditTypeEnum[] resultTypes = AuditTypeEnum.values(); |
| | | for (AuditTypeEnum resultType : resultTypes) { |
| | | if (code.equals(resultType.getCode())) { |
| | | return resultType; |
| | | } |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | } |
New file |
| | |
| | | package com.ruoyi.common.core.enums; |
| | | |
| | | import lombok.Getter; |
| | | |
| | | /** |
| | | * @Description |
| | | * @Author xiaochen |
| | | * @Date 2023/6/8 16:42 |
| | | */ |
| | | public enum CarColorEnum { |
| | | |
| | | /*1=白色、2=黑色、3=银色、4=灰色、5=红色、6=蓝色、7=绿色、8=黄色、9=金色、10=紫色、11=橙色、12=其他*/ |
| | | |
| | | WHITE(1, "白色"), |
| | | BLACK(2, "黑色"), |
| | | SILVERY(3, "银色"), |
| | | GREY(4, "灰色"), |
| | | RED(5, "红色"), |
| | | BLUE(6, "蓝色"), |
| | | GREEN(7, "绿色"), |
| | | YELLOW(8, "黄色"), |
| | | GOLDEN(9, "金色"), |
| | | PURPLE(10, "紫色"), |
| | | ORANGE(11, "橙色"), |
| | | OTHER(12, "其他"); |
| | | |
| | | @Getter |
| | | private String desc; |
| | | |
| | | |
| | | @Getter |
| | | private int code; |
| | | |
| | | |
| | | CarColorEnum(int code, String desc) { |
| | | this.code = code; |
| | | this.desc = desc; |
| | | } |
| | | |
| | | /** |
| | | * 通过code获取枚举 |
| | | * |
| | | * @param code |
| | | * @return |
| | | */ |
| | | public static CarColorEnum fromCode(Integer code) { |
| | | CarColorEnum[] resultTypes = CarColorEnum.values(); |
| | | for (CarColorEnum resultType : resultTypes) { |
| | | if (code.equals(resultType.getCode())) { |
| | | return resultType; |
| | | } |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | } |
New file |
| | |
| | | package com.ruoyi.common.core.enums; |
| | | |
| | | import lombok.Getter; |
| | | |
| | | /** |
| | | * @Description |
| | | * @Author xiaochen |
| | | * @Date 2023/6/8 16:42 |
| | | */ |
| | | public enum CarStateEnum { |
| | | |
| | | /*状态1= 待上户、2=待办证、3=待整备、4=待租、5=已租、6=已处置*/ |
| | | |
| | | PENDING_REGISTRATION(1, "待上户"), |
| | | PENDING_CERTIFICATE(2, "待办证"), |
| | | TO_BE_PREPARED(3, "待整备"), |
| | | FOR_RENT(4, "待租"), |
| | | RENTED(5, "已租"), |
| | | DISPOSED(6, "已处置"); |
| | | |
| | | @Getter |
| | | private String desc; |
| | | |
| | | |
| | | @Getter |
| | | private int code; |
| | | |
| | | |
| | | CarStateEnum(int code, String desc) { |
| | | this.code = code; |
| | | this.desc = desc; |
| | | } |
| | | |
| | | /** |
| | | * 通过code获取枚举 |
| | | * |
| | | * @param code |
| | | * @return |
| | | */ |
| | | public static CarStateEnum fromCode(Integer code) { |
| | | CarStateEnum[] resultTypes = CarStateEnum.values(); |
| | | for (CarStateEnum resultType : resultTypes) { |
| | | if (code.equals(resultType.getCode())) { |
| | | return resultType; |
| | | } |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | } |
New file |
| | |
| | | package com.ruoyi.common.core.enums; |
| | | |
| | | import lombok.Getter; |
| | | |
| | | /** |
| | | * @Description |
| | | * @Author xiaochen |
| | | * @Date 2023/6/8 16:42 |
| | | */ |
| | | public enum ContractStateEnum { |
| | | |
| | | /*合同状态 1签约中 2审批拒绝 3续约中 4待执行 5执行中 6结算中 7已结束 8已作废 9即将到期 10已到期 11已撤销*/ |
| | | |
| | | SIGNING(1, "签约中"), |
| | | APPROVAL_REJECTION(2, "审批拒绝"), |
| | | UNDER_RENEWAL(3, "续约中"), |
| | | TO_BE_EXECUTED(4, "待执行"), |
| | | UNDER_EXECUTION(5, "执行中"), |
| | | SETTLEMENT_PROGRESS(6, "结算中"), |
| | | ENDED(7, "已结束"), |
| | | VOIDED(8, "已作废"), |
| | | DUE(9, "即将到期"), |
| | | EXPIRED(10, "已到期"), |
| | | REVOKED(11, "已撤销"); |
| | | |
| | | @Getter |
| | | private String desc; |
| | | |
| | | |
| | | @Getter |
| | | private int code; |
| | | |
| | | |
| | | ContractStateEnum(int code, String desc) { |
| | | this.code = code; |
| | | this.desc = desc; |
| | | } |
| | | |
| | | /** |
| | | * 通过code获取枚举 |
| | | * |
| | | * @param code |
| | | * @return |
| | | */ |
| | | public static ContractStateEnum fromCode(Integer code) { |
| | | ContractStateEnum[] resultTypes = ContractStateEnum.values(); |
| | | for (ContractStateEnum resultType : resultTypes) { |
| | | if (code.equals(resultType.getCode())) { |
| | | return resultType; |
| | | } |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | } |
New file |
| | |
| | | package com.ruoyi.common.core.enums; |
| | | |
| | | import lombok.Getter; |
| | | |
| | | /** |
| | | * @Description |
| | | * @Author xiaochen |
| | | * @Date 2023/6/8 16:42 |
| | | */ |
| | | public enum ContractTypeEnum { |
| | | |
| | | /*合同类型 1=纯租 2=以租代购 3=打工模式*/ |
| | | PURE_RENT(1, "纯租"), |
| | | CAR_LEASE(2, "以租代购"), |
| | | WORKING_MODE(3, "打工模式"); |
| | | |
| | | @Getter |
| | | private String desc; |
| | | |
| | | |
| | | @Getter |
| | | private int code; |
| | | |
| | | |
| | | ContractTypeEnum(int code, String desc) { |
| | | this.code = code; |
| | | this.desc = desc; |
| | | } |
| | | |
| | | /** |
| | | * 通过code获取枚举 |
| | | * |
| | | * @param code |
| | | * @return |
| | | */ |
| | | public static ContractTypeEnum fromCode(Integer code) { |
| | | ContractTypeEnum[] resultTypes = ContractTypeEnum.values(); |
| | | for (ContractTypeEnum resultType : resultTypes) { |
| | | if (code.equals(resultType.getCode())) { |
| | | return resultType; |
| | | } |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | } |
New file |
| | |
| | | package com.ruoyi.common.core.enums; |
| | | |
| | | import lombok.Getter; |
| | | |
| | | /** |
| | | * @author xiaochen |
| | | * @ClassName Disable |
| | | * @Description |
| | | * @date 2022-06-08 16:55 |
| | | */ |
| | | public enum DisabledEnum { |
| | | NO(0, "否"), |
| | | YES(1, "是"); |
| | | |
| | | @Getter |
| | | private String desc; |
| | | |
| | | |
| | | @Getter |
| | | private int code; |
| | | |
| | | |
| | | DisabledEnum(int code, String desc) { |
| | | this.code = code; |
| | | this.desc = desc; |
| | | } |
| | | |
| | | /** |
| | | * 通过code获取枚举 |
| | | * |
| | | * @param code |
| | | * @return |
| | | */ |
| | | public static DisabledEnum fromCode(Integer code) { |
| | | DisabledEnum[] resultTypes = DisabledEnum.values(); |
| | | for (DisabledEnum resultType : resultTypes) { |
| | | if (code.equals(resultType.getCode())) { |
| | | return resultType; |
| | | } |
| | | } |
| | | return null; |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.common.core.enums; |
| | | |
| | | import lombok.Getter; |
| | | |
| | | /** |
| | | * @Description |
| | | * @Author xiaochen |
| | | * @Date 2023/6/8 16:42 |
| | | */ |
| | | public enum HandoverStateEnum { |
| | | |
| | | /*交车状态 1待交车 2待审批 3已交车 4审批拒绝*/ |
| | | |
| | | VEHICLE_DELIVERED(1, "待交车"), |
| | | PENDING_APPROVAL(2, "待审批"), |
| | | DELIVERED(3, "已交车"), |
| | | APPROVAL_REJECTION(4, "审批拒绝"), |
| | | REVOKED(5, "已撤销"); |
| | | |
| | | @Getter |
| | | private String desc; |
| | | |
| | | |
| | | @Getter |
| | | private int code; |
| | | |
| | | |
| | | HandoverStateEnum(int code, String desc) { |
| | | this.code = code; |
| | | this.desc = desc; |
| | | } |
| | | |
| | | /** |
| | | * 通过code获取枚举 |
| | | * |
| | | * @param code |
| | | * @return |
| | | */ |
| | | public static HandoverStateEnum fromCode(Integer code) { |
| | | HandoverStateEnum[] resultTypes = HandoverStateEnum.values(); |
| | | for (HandoverStateEnum resultType : resultTypes) { |
| | | if (code.equals(resultType.getCode())) { |
| | | return resultType; |
| | | } |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | } |
New file |
| | |
| | | package com.ruoyi.common.core.enums; |
| | | |
| | | import lombok.Getter; |
| | | |
| | | /** |
| | | * @Description |
| | | * @Author xiaochen |
| | | * @Date 2023/6/8 16:42 |
| | | */ |
| | | public enum ImportTypeEnum { |
| | | |
| | | /*1=新车车辆导入 、2=已有车辆导入、3=上户导入、4=设备导入、5=违章导入、6=违章图片导入、7=保养记录导入、8=保单导入、9=合同导入*/ |
| | | |
| | | NEW_CAR(1, "新车车辆导入"), |
| | | EXIST_CAR(2, "已有车辆导入"), |
| | | WEALTHY(3, "上户导入"), |
| | | DEVICE(4, "设备导入"), |
| | | VIOLATION(5, "违章导入"), |
| | | VIOLATION_PICTURE(6, "违章图片导入"), |
| | | SERVICE(7, "保养记录导入"), |
| | | WARRANTY(8, "保单导入"), |
| | | CONTRACT(9, "合同导入"), |
| | | CERTIFICATE(10, "办证导入"), |
| | | INSPECTANNUALLY(11, "车辆年检导入"), |
| | | MAINTENANCE(12, "车辆维修导入"); |
| | | |
| | | @Getter |
| | | private String desc; |
| | | |
| | | |
| | | @Getter |
| | | private int code; |
| | | |
| | | |
| | | ImportTypeEnum(int code, String desc) { |
| | | this.code = code; |
| | | this.desc = desc; |
| | | } |
| | | |
| | | /** |
| | | * 通过code获取枚举 |
| | | * |
| | | * @param code |
| | | * @return |
| | | */ |
| | | public static ImportTypeEnum fromCode(Integer code) { |
| | | ImportTypeEnum[] resultTypes = ImportTypeEnum.values(); |
| | | for (ImportTypeEnum resultType : resultTypes) { |
| | | if (code.equals(resultType.getCode())) { |
| | | return resultType; |
| | | } |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | } |
New file |
| | |
| | | package com.ruoyi.common.core.enums; |
| | | |
| | | import lombok.Getter; |
| | | |
| | | /** |
| | | * @Description |
| | | * @Author xiaochen |
| | | * @Date 2023/6/8 16:42 |
| | | */ |
| | | public enum InsureTypeEnum { |
| | | |
| | | /*保险类型 1=商业险、2=交强险、3=承运人责任险、4=客伤险、5=盗抢险*/ |
| | | |
| | | COMMERCIAL_INSURANCE(1, "商业险"), |
| | | COMPULSORY_INSURANCE(2, "交强险"), |
| | | CARRIER_LIABILITY_INSURANCE(3, "承运人责任险"), |
| | | CUSTOMER_INJURY_INSURANCE(4, "客伤险"), |
| | | THEFT_INSURANCE(5, "盗抢险"); |
| | | |
| | | @Getter |
| | | private String desc; |
| | | |
| | | |
| | | @Getter |
| | | private int code; |
| | | |
| | | |
| | | InsureTypeEnum(int code, String desc) { |
| | | this.code = code; |
| | | this.desc = desc; |
| | | } |
| | | |
| | | /** |
| | | * 通过code获取枚举 |
| | | * |
| | | * @param code |
| | | * @return |
| | | */ |
| | | public static InsureTypeEnum fromCode(Integer code) { |
| | | InsureTypeEnum[] resultTypes = InsureTypeEnum.values(); |
| | | for (InsureTypeEnum resultType : resultTypes) { |
| | | if (code.equals(resultType.getCode())) { |
| | | return resultType; |
| | | } |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | } |
New file |
| | |
| | | package com.ruoyi.common.core.enums; |
| | | |
| | | import lombok.Getter; |
| | | |
| | | /** |
| | | * @Description |
| | | * @Author xiaochen |
| | | * @Date 2023/6/8 16:42 |
| | | */ |
| | | public enum PurchaseStateEnum { |
| | | |
| | | /*购买状态 1在保 2停保 3复保 4脱保*/ |
| | | |
| | | UNDER_PROTECTION(1, "在保"), |
| | | SUSPENSION_MAINTENANCE(2, "停保"), |
| | | REINSURANCE(3, "复保"), |
| | | DELISTING(4, "脱保"); |
| | | |
| | | @Getter |
| | | private String desc; |
| | | |
| | | |
| | | @Getter |
| | | private int code; |
| | | |
| | | |
| | | PurchaseStateEnum(int code, String desc) { |
| | | this.code = code; |
| | | this.desc = desc; |
| | | } |
| | | |
| | | /** |
| | | * 通过code获取枚举 |
| | | * |
| | | * @param code |
| | | * @return |
| | | */ |
| | | public static PurchaseStateEnum fromCode(Integer code) { |
| | | PurchaseStateEnum[] resultTypes = PurchaseStateEnum.values(); |
| | | for (PurchaseStateEnum resultType : resultTypes) { |
| | | if (code.equals(resultType.getCode())) { |
| | | return resultType; |
| | | } |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | } |
New file |
| | |
| | | package com.ruoyi.common.core.enums; |
| | | |
| | | import lombok.Getter; |
| | | |
| | | /** |
| | | * @Description |
| | | * @Author xiaochen |
| | | * @Date 2023/6/8 16:42 |
| | | */ |
| | | public enum ReturnCarTypeEnum { |
| | | |
| | | /*合同类型 合同到期、提前退车、强制收车*/ |
| | | EXPIRE(1, "合同到期"), |
| | | EARLY_WITHDRAWAL(2, "提前退车"), |
| | | COMPULSORY_COLLECTION(3, "强制收车"); |
| | | |
| | | @Getter |
| | | private String desc; |
| | | |
| | | |
| | | @Getter |
| | | private int code; |
| | | |
| | | |
| | | ReturnCarTypeEnum(int code, String desc) { |
| | | this.code = code; |
| | | this.desc = desc; |
| | | } |
| | | |
| | | /** |
| | | * 通过code获取枚举 |
| | | * |
| | | * @param code |
| | | * @return |
| | | */ |
| | | public static ReturnCarTypeEnum fromCode(Integer code) { |
| | | ReturnCarTypeEnum[] resultTypes = ReturnCarTypeEnum.values(); |
| | | for (ReturnCarTypeEnum resultType : resultTypes) { |
| | | if (code.equals(resultType.getCode())) { |
| | | return resultType; |
| | | } |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | } |
New file |
| | |
| | | package com.ruoyi.common.core.enums; |
| | | |
| | | import lombok.Getter; |
| | | |
| | | /** |
| | | * @Description |
| | | * @Author xiaochen |
| | | * @Date 2023/6/8 16:42 |
| | | */ |
| | | public enum ReturnStateEnum { |
| | | |
| | | /*退车状态 1=待验车 2=待生成账单 3=待审批 4=已退车 5=审批拒绝*/ |
| | | |
| | | VEHICLE_INSPECTED(1, "待验车"), |
| | | PENDING_BILL_GENERATION(2, "待生成账单"), |
| | | PENDING_APPROVAL(3, "待审批"), |
| | | RETURNED_VEHICLE(4, "已退车"), |
| | | APPROVAL_REJECTION(5, "审批拒绝"), |
| | | REVOKED(6, "已撤销"); |
| | | |
| | | @Getter |
| | | private String desc; |
| | | |
| | | |
| | | @Getter |
| | | private int code; |
| | | |
| | | |
| | | ReturnStateEnum(int code, String desc) { |
| | | this.code = code; |
| | | this.desc = desc; |
| | | } |
| | | |
| | | /** |
| | | * 通过code获取枚举 |
| | | * |
| | | * @param code |
| | | * @return |
| | | */ |
| | | public static ReturnStateEnum fromCode(Integer code) { |
| | | ReturnStateEnum[] resultTypes = ReturnStateEnum.values(); |
| | | for (ReturnStateEnum resultType : resultTypes) { |
| | | if (code.equals(resultType.getCode())) { |
| | | return resultType; |
| | | } |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | } |
New file |
| | |
| | | package com.ruoyi.common.core.enums; |
| | | |
| | | /** |
| | | * 用户状态 |
| | | * |
| | | * @author ruoyi |
| | | */ |
| | | public enum UserStatus |
| | | { |
| | | OK("0", "正常"), DISABLE("1", "停用"), DELETED("2", "删除"); |
| | | |
| | | private final String code; |
| | | private final String info; |
| | | |
| | | UserStatus(String code, String info) |
| | | { |
| | | this.code = code; |
| | | this.info = info; |
| | | } |
| | | |
| | | public String getCode() |
| | | { |
| | | return code; |
| | | } |
| | | |
| | | public String getInfo() |
| | | { |
| | | return info; |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.common.core.enums; |
| | | |
| | | import lombok.Getter; |
| | | |
| | | /** |
| | | * @Description |
| | | * @Author xiaochen |
| | | * @Date 2023/6/8 16:42 |
| | | */ |
| | | public enum WarrantyStateEnum { |
| | | |
| | | /*保单状态 1正常 2已脱保 3已停保 4即将到期 5建议停保*/ |
| | | |
| | | NORMAL(1, "正常"), |
| | | DELISTED(2, "已脱保"), |
| | | DISCONTINUED_WARRANTY(3, "已停保"), |
| | | DUE(4, "即将到期"), |
| | | SUGGEST_DISCONTINUING_MAINTENANCE(5, "建议停保"); |
| | | |
| | | @Getter |
| | | private String desc; |
| | | |
| | | |
| | | @Getter |
| | | private int code; |
| | | |
| | | |
| | | WarrantyStateEnum(int code, String desc) { |
| | | this.code = code; |
| | | this.desc = desc; |
| | | } |
| | | |
| | | /** |
| | | * 通过code获取枚举 |
| | | * |
| | | * @param code |
| | | * @return |
| | | */ |
| | | public static WarrantyStateEnum fromCode(Integer code) { |
| | | WarrantyStateEnum[] resultTypes = WarrantyStateEnum.values(); |
| | | for (WarrantyStateEnum resultType : resultTypes) { |
| | | if (code.equals(resultType.getCode())) { |
| | | return resultType; |
| | | } |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | } |
New file |
| | |
| | | package com.ruoyi.common.core.exception; |
| | | |
| | | /** |
| | | * 验证码错误异常类 |
| | | * |
| | | * @author ruoyi |
| | | */ |
| | | public class CaptchaException extends RuntimeException |
| | | { |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | public CaptchaException(String msg) |
| | | { |
| | | super(msg); |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.common.core.exception; |
| | | |
| | | /** |
| | | * 检查异常 |
| | | * |
| | | * @author ruoyi |
| | | */ |
| | | public class CheckedException extends RuntimeException |
| | | { |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | public CheckedException(String message) |
| | | { |
| | | super(message); |
| | | } |
| | | |
| | | public CheckedException(Throwable cause) |
| | | { |
| | | super(cause); |
| | | } |
| | | |
| | | public CheckedException(String message, Throwable cause) |
| | | { |
| | | super(message, cause); |
| | | } |
| | | |
| | | public CheckedException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) |
| | | { |
| | | super(message, cause, enableSuppression, writableStackTrace); |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.common.core.exception; |
| | | |
| | | /** |
| | | * 演示模式异常 |
| | | * |
| | | * @author ruoyi |
| | | */ |
| | | public class DemoModeException extends RuntimeException |
| | | { |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | public DemoModeException() |
| | | { |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.common.core.exception; |
| | | |
| | | /** |
| | | * 全局异常 |
| | | * |
| | | * @author ruoyi |
| | | */ |
| | | public class GlobalException extends RuntimeException |
| | | { |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | /** |
| | | * 错误提示 |
| | | */ |
| | | private String message; |
| | | |
| | | /** |
| | | * 错误明细,内部调试错误 |
| | | * |
| | | * 和 {@link CommonResult#getDetailMessage()} 一致的设计 |
| | | */ |
| | | private String detailMessage; |
| | | |
| | | /** |
| | | * 空构造方法,避免反序列化问题 |
| | | */ |
| | | public GlobalException() |
| | | { |
| | | } |
| | | |
| | | public GlobalException(String message) |
| | | { |
| | | this.message = message; |
| | | } |
| | | |
| | | public String getDetailMessage() |
| | | { |
| | | return detailMessage; |
| | | } |
| | | |
| | | public GlobalException setDetailMessage(String detailMessage) |
| | | { |
| | | this.detailMessage = detailMessage; |
| | | return this; |
| | | } |
| | | |
| | | @Override |
| | | public String getMessage() |
| | | { |
| | | return message; |
| | | } |
| | | |
| | | public GlobalException setMessage(String message) |
| | | { |
| | | this.message = message; |
| | | return this; |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.common.core.exception; |
| | | |
| | | /** |
| | | * 内部认证异常 |
| | | * |
| | | * @author ruoyi |
| | | */ |
| | | public class InnerAuthException extends RuntimeException |
| | | { |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | public InnerAuthException(String message) |
| | | { |
| | | super(message); |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.common.core.exception; |
| | | |
| | | /** |
| | | * 权限异常 |
| | | * |
| | | * @author ruoyi |
| | | */ |
| | | public class PreAuthorizeException extends RuntimeException |
| | | { |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | public PreAuthorizeException() |
| | | { |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.common.core.exception; |
| | | |
| | | /** |
| | | * 业务异常 |
| | | * |
| | | * @author ruoyi |
| | | */ |
| | | public final class ServiceException extends RuntimeException |
| | | { |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | /** |
| | | * 错误码 |
| | | */ |
| | | private Integer code; |
| | | |
| | | /** |
| | | * 错误提示 |
| | | */ |
| | | private String message; |
| | | |
| | | /** |
| | | * 错误明细,内部调试错误 |
| | | * |
| | | * 和 {@link CommonResult#getDetailMessage()} 一致的设计 |
| | | */ |
| | | private String detailMessage; |
| | | |
| | | /** |
| | | * 空构造方法,避免反序列化问题 |
| | | */ |
| | | public ServiceException() |
| | | { |
| | | } |
| | | |
| | | public ServiceException(String message) |
| | | { |
| | | this.message = message; |
| | | } |
| | | |
| | | public ServiceException(String message, Integer code) |
| | | { |
| | | this.message = message; |
| | | this.code = code; |
| | | } |
| | | |
| | | public String getDetailMessage() |
| | | { |
| | | return detailMessage; |
| | | } |
| | | |
| | | @Override |
| | | public String getMessage() |
| | | { |
| | | return message; |
| | | } |
| | | |
| | | public Integer getCode() |
| | | { |
| | | return code; |
| | | } |
| | | |
| | | public ServiceException setMessage(String message) |
| | | { |
| | | this.message = message; |
| | | return this; |
| | | } |
| | | |
| | | public ServiceException setDetailMessage(String detailMessage) |
| | | { |
| | | this.detailMessage = detailMessage; |
| | | return this; |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.common.core.exception; |
| | | |
| | | /** |
| | | * 工具类异常 |
| | | * |
| | | * @author ruoyi |
| | | */ |
| | | public class UtilException extends RuntimeException |
| | | { |
| | | private static final long serialVersionUID = 8247610319171014183L; |
| | | |
| | | public UtilException(Throwable e) |
| | | { |
| | | super(e.getMessage(), e); |
| | | } |
| | | |
| | | public UtilException(String message) |
| | | { |
| | | super(message); |
| | | } |
| | | |
| | | public UtilException(String message, Throwable throwable) |
| | | { |
| | | super(message, throwable); |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.common.core.exception.auth; |
| | | |
| | | /** |
| | | * 未能通过的登录认证异常 |
| | | * |
| | | * @author ruoyi |
| | | */ |
| | | public class NotLoginException extends RuntimeException |
| | | { |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | public NotLoginException(String message) |
| | | { |
| | | super(message); |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.common.core.exception.auth; |
| | | |
| | | import org.apache.commons.lang3.StringUtils; |
| | | |
| | | /** |
| | | * 未能通过的权限认证异常 |
| | | * |
| | | * @author ruoyi |
| | | */ |
| | | public class NotPermissionException extends RuntimeException |
| | | { |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | public NotPermissionException(String permission) |
| | | { |
| | | super(permission); |
| | | } |
| | | |
| | | public NotPermissionException(String[] permissions) |
| | | { |
| | | super(StringUtils.join(permissions, ",")); |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.common.core.exception.auth; |
| | | |
| | | import org.apache.commons.lang3.StringUtils; |
| | | |
| | | /** |
| | | * 未能通过的角色认证异常 |
| | | * |
| | | * @author ruoyi |
| | | */ |
| | | public class NotRoleException extends RuntimeException |
| | | { |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | public NotRoleException(String role) |
| | | { |
| | | super(role); |
| | | } |
| | | |
| | | public NotRoleException(String[] roles) |
| | | { |
| | | super(StringUtils.join(roles, ",")); |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.common.core.exception.base; |
| | | |
| | | /** |
| | | * 基础异常 |
| | | * |
| | | * @author ruoyi |
| | | */ |
| | | public class BaseException extends RuntimeException |
| | | { |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | /** |
| | | * 所属模块 |
| | | */ |
| | | private String module; |
| | | |
| | | /** |
| | | * 错误码 |
| | | */ |
| | | private String code; |
| | | |
| | | /** |
| | | * 错误码对应的参数 |
| | | */ |
| | | private Object[] args; |
| | | |
| | | /** |
| | | * 错误消息 |
| | | */ |
| | | private String defaultMessage; |
| | | |
| | | public BaseException(String module, String code, Object[] args, String defaultMessage) |
| | | { |
| | | this.module = module; |
| | | this.code = code; |
| | | this.args = args; |
| | | this.defaultMessage = defaultMessage; |
| | | } |
| | | |
| | | public BaseException(String module, String code, Object[] args) |
| | | { |
| | | this(module, code, args, null); |
| | | } |
| | | |
| | | public BaseException(String module, String defaultMessage) |
| | | { |
| | | this(module, null, null, defaultMessage); |
| | | } |
| | | |
| | | public BaseException(String code, Object[] args) |
| | | { |
| | | this(null, code, args, null); |
| | | } |
| | | |
| | | public BaseException(String defaultMessage) |
| | | { |
| | | this(null, null, null, defaultMessage); |
| | | } |
| | | |
| | | public String getModule() |
| | | { |
| | | return module; |
| | | } |
| | | |
| | | public String getCode() |
| | | { |
| | | return code; |
| | | } |
| | | |
| | | public Object[] getArgs() |
| | | { |
| | | return args; |
| | | } |
| | | |
| | | public String getDefaultMessage() |
| | | { |
| | | return defaultMessage; |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.common.core.exception.file; |
| | | |
| | | import com.ruoyi.common.core.exception.base.BaseException; |
| | | |
| | | /** |
| | | * 文件信息异常类 |
| | | * |
| | | * @author ruoyi |
| | | */ |
| | | public class FileException extends BaseException |
| | | { |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | public FileException(String code, Object[] args, String msg) |
| | | { |
| | | super("file", code, args, msg); |
| | | } |
| | | |
| | | } |
New file |
| | |
| | | package com.ruoyi.common.core.exception.file; |
| | | |
| | | /** |
| | | * 文件名称超长限制异常类 |
| | | * |
| | | * @author ruoyi |
| | | */ |
| | | public class FileNameLengthLimitExceededException extends FileException |
| | | { |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | public FileNameLengthLimitExceededException(int defaultFileNameLength) |
| | | { |
| | | super("upload.filename.exceed.length", new Object[] { defaultFileNameLength }, "the filename is too long"); |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.common.core.exception.file; |
| | | |
| | | /** |
| | | * 文件名大小限制异常类 |
| | | * |
| | | * @author ruoyi |
| | | */ |
| | | public class FileSizeLimitExceededException extends FileException |
| | | { |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | public FileSizeLimitExceededException(long defaultMaxSize) |
| | | { |
| | | super("upload.exceed.maxSize", new Object[] { defaultMaxSize }, "the filesize is too large"); |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.common.core.exception.file; |
| | | |
| | | import java.io.PrintStream; |
| | | import java.io.PrintWriter; |
| | | |
| | | /** |
| | | * 文件上传异常类 |
| | | * |
| | | * @author ruoyi |
| | | */ |
| | | public class FileUploadException extends Exception |
| | | { |
| | | |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | private final Throwable cause; |
| | | |
| | | public FileUploadException() |
| | | { |
| | | this(null, null); |
| | | } |
| | | |
| | | public FileUploadException(final String msg) |
| | | { |
| | | this(msg, null); |
| | | } |
| | | |
| | | public FileUploadException(String msg, Throwable cause) |
| | | { |
| | | super(msg); |
| | | this.cause = cause; |
| | | } |
| | | |
| | | @Override |
| | | public void printStackTrace(PrintStream stream) |
| | | { |
| | | super.printStackTrace(stream); |
| | | if (cause != null) |
| | | { |
| | | stream.println("Caused by:"); |
| | | cause.printStackTrace(stream); |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public void printStackTrace(PrintWriter writer) |
| | | { |
| | | super.printStackTrace(writer); |
| | | if (cause != null) |
| | | { |
| | | writer.println("Caused by:"); |
| | | cause.printStackTrace(writer); |
| | | } |
| | | } |
| | | |
| | | @Override |
| | | public Throwable getCause() |
| | | { |
| | | return cause; |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.common.core.exception.file; |
| | | |
| | | import java.util.Arrays; |
| | | |
| | | /** |
| | | * 文件上传 误异常类 |
| | | * |
| | | * @author ruoyi |
| | | */ |
| | | public class InvalidExtensionException extends FileUploadException |
| | | { |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | private String[] allowedExtension; |
| | | private String extension; |
| | | private String filename; |
| | | |
| | | public InvalidExtensionException(String[] allowedExtension, String extension, String filename) |
| | | { |
| | | super("filename : [" + filename + "], extension : [" + extension + "], allowed extension : [" + Arrays.toString(allowedExtension) + "]"); |
| | | this.allowedExtension = allowedExtension; |
| | | this.extension = extension; |
| | | this.filename = filename; |
| | | } |
| | | |
| | | public String[] getAllowedExtension() |
| | | { |
| | | return allowedExtension; |
| | | } |
| | | |
| | | public String getExtension() |
| | | { |
| | | return extension; |
| | | } |
| | | |
| | | public String getFilename() |
| | | { |
| | | return filename; |
| | | } |
| | | |
| | | public static class InvalidImageExtensionException extends InvalidExtensionException |
| | | { |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | public InvalidImageExtensionException(String[] allowedExtension, String extension, String filename) |
| | | { |
| | | super(allowedExtension, extension, filename); |
| | | } |
| | | } |
| | | |
| | | public static class InvalidFlashExtensionException extends InvalidExtensionException |
| | | { |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | public InvalidFlashExtensionException(String[] allowedExtension, String extension, String filename) |
| | | { |
| | | super(allowedExtension, extension, filename); |
| | | } |
| | | } |
| | | |
| | | public static class InvalidMediaExtensionException extends InvalidExtensionException |
| | | { |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | public InvalidMediaExtensionException(String[] allowedExtension, String extension, String filename) |
| | | { |
| | | super(allowedExtension, extension, filename); |
| | | } |
| | | } |
| | | |
| | | public static class InvalidVideoExtensionException extends InvalidExtensionException |
| | | { |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | public InvalidVideoExtensionException(String[] allowedExtension, String extension, String filename) |
| | | { |
| | | super(allowedExtension, extension, filename); |
| | | } |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.common.core.exception.job; |
| | | |
| | | /** |
| | | * 计划策略异常 |
| | | * |
| | | * @author ruoyi |
| | | */ |
| | | public class TaskException extends Exception |
| | | { |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | private Code code; |
| | | |
| | | public TaskException(String msg, Code code) |
| | | { |
| | | this(msg, code, null); |
| | | } |
| | | |
| | | public TaskException(String msg, Code code, Exception nestedEx) |
| | | { |
| | | super(msg, nestedEx); |
| | | this.code = code; |
| | | } |
| | | |
| | | public Code getCode() |
| | | { |
| | | return code; |
| | | } |
| | | |
| | | public enum Code |
| | | { |
| | | TASK_EXISTS, NO_TASK_EXISTS, TASK_ALREADY_STARTED, UNKNOWN, CONFIG_ERROR, TASK_NODE_NOT_AVAILABLE |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.common.core.exception.user; |
| | | |
| | | /** |
| | | * 验证码失效异常类 |
| | | * |
| | | * @author ruoyi |
| | | */ |
| | | public class CaptchaExpireException extends UserException |
| | | { |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | public CaptchaExpireException() |
| | | { |
| | | super("user.jcaptcha.expire", null); |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.common.core.exception.user; |
| | | |
| | | import com.ruoyi.common.core.exception.base.BaseException; |
| | | |
| | | /** |
| | | * 用户信息异常类 |
| | | * |
| | | * @author ruoyi |
| | | */ |
| | | public class UserException extends BaseException |
| | | { |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | public UserException(String code, Object[] args) |
| | | { |
| | | super("user", code, args, null); |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.common.core.exception.user; |
| | | |
| | | /** |
| | | * 用户密码不正确或不符合规范异常类 |
| | | * |
| | | * @author ruoyi |
| | | */ |
| | | public class UserPasswordNotMatchException extends UserException |
| | | { |
| | | private static final long serialVersionUID = 1L; |
| | | |
| | | public UserPasswordNotMatchException() |
| | | { |
| | | super("user.password.not.match", null); |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.common.core.query; |
| | | |
| | | |
| | | import com.fasterxml.jackson.annotation.JsonFormat; |
| | | import com.ruoyi.common.core.web.page.BasePage; |
| | | import com.ruoyi.common.core.web.page.TableDataInfo; |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | | |
| | | import java.text.SimpleDateFormat; |
| | | import java.util.Date; |
| | | import java.util.Objects; |
| | | |
| | | /** |
| | | * @author xiaochen |
| | | * @ClassName TimeRangePageDTO |
| | | * @Description |
| | | * @date 2023-06-4 14:42 |
| | | */ |
| | | @ApiModel("时间范围分页dto") |
| | | public class TimeRangePageQuery extends BasePage { |
| | | @ApiModelProperty("开始时间 格式 yyyy-MM-dd") |
| | | @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") |
| | | private Date startTime; |
| | | |
| | | @ApiModelProperty("结束时间 格式 yyyy-MM-dd") |
| | | @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") |
| | | private Date endTime; |
| | | |
| | | public String getStartTime() { |
| | | if (Objects.nonNull(startTime)) { |
| | | return new SimpleDateFormat("yyyy-MM-dd").format(startTime) + " 00:00:00"; |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | public void setStartTime(Date startTime) { |
| | | this.startTime = startTime; |
| | | } |
| | | |
| | | public String getEndTime() { |
| | | if (Objects.nonNull(endTime)) { |
| | | return new SimpleDateFormat("yyyy-MM-dd").format(endTime) + " 23:59:59"; |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | public void setEndTime(Date endTime) { |
| | | this.endTime = endTime; |
| | | } |
| | | |
| | | } |
New file |
| | |
| | | package com.ruoyi.common.core.text; |
| | | |
| | | import java.nio.charset.Charset; |
| | | import java.nio.charset.StandardCharsets; |
| | | import com.ruoyi.common.core.utils.StringUtils; |
| | | |
| | | /** |
| | | * 字符集工具类 |
| | | * |
| | | * @author ruoyi |
| | | */ |
| | | public class CharsetKit |
| | | { |
| | | /** ISO-8859-1 */ |
| | | public static final String ISO_8859_1 = "ISO-8859-1"; |
| | | /** UTF-8 */ |
| | | public static final String UTF_8 = "UTF-8"; |
| | | /** GBK */ |
| | | public static final String GBK = "GBK"; |
| | | |
| | | /** ISO-8859-1 */ |
| | | public static final Charset CHARSET_ISO_8859_1 = Charset.forName(ISO_8859_1); |
| | | /** UTF-8 */ |
| | | public static final Charset CHARSET_UTF_8 = Charset.forName(UTF_8); |
| | | /** GBK */ |
| | | public static final Charset CHARSET_GBK = Charset.forName(GBK); |
| | | |
| | | /** |
| | | * 转换为Charset对象 |
| | | * |
| | | * @param charset 字符集,为空则返回默认字符集 |
| | | * @return Charset |
| | | */ |
| | | public static Charset charset(String charset) |
| | | { |
| | | return StringUtils.isEmpty(charset) ? Charset.defaultCharset() : Charset.forName(charset); |
| | | } |
| | | |
| | | /** |
| | | * 转换字符串的字符集编码 |
| | | * |
| | | * @param source 字符串 |
| | | * @param srcCharset 源字符集,默认ISO-8859-1 |
| | | * @param destCharset 目标字符集,默认UTF-8 |
| | | * @return 转换后的字符集 |
| | | */ |
| | | public static String convert(String source, String srcCharset, String destCharset) |
| | | { |
| | | return convert(source, Charset.forName(srcCharset), Charset.forName(destCharset)); |
| | | } |
| | | |
| | | /** |
| | | * 转换字符串的字符集编码 |
| | | * |
| | | * @param source 字符串 |
| | | * @param srcCharset 源字符集,默认ISO-8859-1 |
| | | * @param destCharset 目标字符集,默认UTF-8 |
| | | * @return 转换后的字符集 |
| | | */ |
| | | public static String convert(String source, Charset srcCharset, Charset destCharset) |
| | | { |
| | | if (null == srcCharset) |
| | | { |
| | | srcCharset = StandardCharsets.ISO_8859_1; |
| | | } |
| | | |
| | | if (null == destCharset) |
| | | { |
| | | destCharset = StandardCharsets.UTF_8; |
| | | } |
| | | |
| | | if (StringUtils.isEmpty(source) || srcCharset.equals(destCharset)) |
| | | { |
| | | return source; |
| | | } |
| | | return new String(source.getBytes(srcCharset), destCharset); |
| | | } |
| | | |
| | | /** |
| | | * @return 系统字符集编码 |
| | | */ |
| | | public static String systemCharset() |
| | | { |
| | | return Charset.defaultCharset().name(); |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.common.core.text; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.math.BigInteger; |
| | | import java.nio.ByteBuffer; |
| | | import java.nio.charset.Charset; |
| | | import java.text.NumberFormat; |
| | | import java.util.Set; |
| | | import com.ruoyi.common.core.utils.StringUtils; |
| | | |
| | | /** |
| | | * 类型转换器 |
| | | * |
| | | * @author ruoyi |
| | | */ |
| | | public class Convert |
| | | { |
| | | /** |
| | | * 转换为字符串<br> |
| | | * 如果给定的值为null,或者转换失败,返回默认值<br> |
| | | * 转换失败不会报错 |
| | | * |
| | | * @param value 被转换的值 |
| | | * @param defaultValue 转换错误时的默认值 |
| | | * @return 结果 |
| | | */ |
| | | public static String toStr(Object value, String defaultValue) |
| | | { |
| | | if (null == value) |
| | | { |
| | | return defaultValue; |
| | | } |
| | | if (value instanceof String) |
| | | { |
| | | return (String) value; |
| | | } |
| | | return value.toString(); |
| | | } |
| | | |
| | | /** |
| | | * 转换为字符串<br> |
| | | * 如果给定的值为<code>null</code>,或者转换失败,返回默认值<code>null</code><br> |
| | | * 转换失败不会报错 |
| | | * |
| | | * @param value 被转换的值 |
| | | * @return 结果 |
| | | */ |
| | | public static String toStr(Object value) |
| | | { |
| | | return toStr(value, null); |
| | | } |
| | | |
| | | /** |
| | | * 转换为字符<br> |
| | | * 如果给定的值为null,或者转换失败,返回默认值<br> |
| | | * 转换失败不会报错 |
| | | * |
| | | * @param value 被转换的值 |
| | | * @param defaultValue 转换错误时的默认值 |
| | | * @return 结果 |
| | | */ |
| | | public static Character toChar(Object value, Character defaultValue) |
| | | { |
| | | if (null == value) |
| | | { |
| | | return defaultValue; |
| | | } |
| | | if (value instanceof Character) |
| | | { |
| | | return (Character) value; |
| | | } |
| | | |
| | | final String valueStr = toStr(value, null); |
| | | return StringUtils.isEmpty(valueStr) ? defaultValue : valueStr.charAt(0); |
| | | } |
| | | |
| | | /** |
| | | * 转换为字符<br> |
| | | * 如果给定的值为<code>null</code>,或者转换失败,返回默认值<code>null</code><br> |
| | | * 转换失败不会报错 |
| | | * |
| | | * @param value 被转换的值 |
| | | * @return 结果 |
| | | */ |
| | | public static Character toChar(Object value) |
| | | { |
| | | return toChar(value, null); |
| | | } |
| | | |
| | | /** |
| | | * 转换为byte<br> |
| | | * 如果给定的值为<code>null</code>,或者转换失败,返回默认值<br> |
| | | * 转换失败不会报错 |
| | | * |
| | | * @param value 被转换的值 |
| | | * @param defaultValue 转换错误时的默认值 |
| | | * @return 结果 |
| | | */ |
| | | public static Byte toByte(Object value, Byte defaultValue) |
| | | { |
| | | if (value == null) |
| | | { |
| | | return defaultValue; |
| | | } |
| | | if (value instanceof Byte) |
| | | { |
| | | return (Byte) value; |
| | | } |
| | | if (value instanceof Number) |
| | | { |
| | | return ((Number) value).byteValue(); |
| | | } |
| | | final String valueStr = toStr(value, null); |
| | | if (StringUtils.isEmpty(valueStr)) |
| | | { |
| | | return defaultValue; |
| | | } |
| | | try |
| | | { |
| | | return Byte.parseByte(valueStr); |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | return defaultValue; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 转换为byte<br> |
| | | * 如果给定的值为<code>null</code>,或者转换失败,返回默认值<code>null</code><br> |
| | | * 转换失败不会报错 |
| | | * |
| | | * @param value 被转换的值 |
| | | * @return 结果 |
| | | */ |
| | | public static Byte toByte(Object value) |
| | | { |
| | | return toByte(value, null); |
| | | } |
| | | |
| | | /** |
| | | * 转换为Short<br> |
| | | * 如果给定的值为<code>null</code>,或者转换失败,返回默认值<br> |
| | | * 转换失败不会报错 |
| | | * |
| | | * @param value 被转换的值 |
| | | * @param defaultValue 转换错误时的默认值 |
| | | * @return 结果 |
| | | */ |
| | | public static Short toShort(Object value, Short defaultValue) |
| | | { |
| | | if (value == null) |
| | | { |
| | | return defaultValue; |
| | | } |
| | | if (value instanceof Short) |
| | | { |
| | | return (Short) value; |
| | | } |
| | | if (value instanceof Number) |
| | | { |
| | | return ((Number) value).shortValue(); |
| | | } |
| | | final String valueStr = toStr(value, null); |
| | | if (StringUtils.isEmpty(valueStr)) |
| | | { |
| | | return defaultValue; |
| | | } |
| | | try |
| | | { |
| | | return Short.parseShort(valueStr.trim()); |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | return defaultValue; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 转换为Short<br> |
| | | * 如果给定的值为<code>null</code>,或者转换失败,返回默认值<code>null</code><br> |
| | | * 转换失败不会报错 |
| | | * |
| | | * @param value 被转换的值 |
| | | * @return 结果 |
| | | */ |
| | | public static Short toShort(Object value) |
| | | { |
| | | return toShort(value, null); |
| | | } |
| | | |
| | | /** |
| | | * 转换为Number<br> |
| | | * 如果给定的值为空,或者转换失败,返回默认值<br> |
| | | * 转换失败不会报错 |
| | | * |
| | | * @param value 被转换的值 |
| | | * @param defaultValue 转换错误时的默认值 |
| | | * @return 结果 |
| | | */ |
| | | public static Number toNumber(Object value, Number defaultValue) |
| | | { |
| | | if (value == null) |
| | | { |
| | | return defaultValue; |
| | | } |
| | | if (value instanceof Number) |
| | | { |
| | | return (Number) value; |
| | | } |
| | | final String valueStr = toStr(value, null); |
| | | if (StringUtils.isEmpty(valueStr)) |
| | | { |
| | | return defaultValue; |
| | | } |
| | | try |
| | | { |
| | | return NumberFormat.getInstance().parse(valueStr); |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | return defaultValue; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 转换为Number<br> |
| | | * 如果给定的值为空,或者转换失败,返回默认值<code>null</code><br> |
| | | * 转换失败不会报错 |
| | | * |
| | | * @param value 被转换的值 |
| | | * @return 结果 |
| | | */ |
| | | public static Number toNumber(Object value) |
| | | { |
| | | return toNumber(value, null); |
| | | } |
| | | |
| | | /** |
| | | * 转换为int<br> |
| | | * 如果给定的值为空,或者转换失败,返回默认值<br> |
| | | * 转换失败不会报错 |
| | | * |
| | | * @param value 被转换的值 |
| | | * @param defaultValue 转换错误时的默认值 |
| | | * @return 结果 |
| | | */ |
| | | public static Integer toInt(Object value, Integer defaultValue) |
| | | { |
| | | if (value == null) |
| | | { |
| | | return defaultValue; |
| | | } |
| | | if (value instanceof Integer) |
| | | { |
| | | return (Integer) value; |
| | | } |
| | | if (value instanceof Number) |
| | | { |
| | | return ((Number) value).intValue(); |
| | | } |
| | | final String valueStr = toStr(value, null); |
| | | if (StringUtils.isEmpty(valueStr)) |
| | | { |
| | | return defaultValue; |
| | | } |
| | | try |
| | | { |
| | | return Integer.parseInt(valueStr.trim()); |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | return defaultValue; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 转换为int<br> |
| | | * 如果给定的值为<code>null</code>,或者转换失败,返回默认值<code>null</code><br> |
| | | * 转换失败不会报错 |
| | | * |
| | | * @param value 被转换的值 |
| | | * @return 结果 |
| | | */ |
| | | public static Integer toInt(Object value) |
| | | { |
| | | return toInt(value, null); |
| | | } |
| | | |
| | | /** |
| | | * 转换为Integer数组<br> |
| | | * |
| | | * @param str 被转换的值 |
| | | * @return 结果 |
| | | */ |
| | | public static Integer[] toIntArray(String str) |
| | | { |
| | | return toIntArray(",", str); |
| | | } |
| | | |
| | | /** |
| | | * 转换为Long数组<br> |
| | | * |
| | | * @param str 被转换的值 |
| | | * @return 结果 |
| | | */ |
| | | public static Long[] toLongArray(String str) |
| | | { |
| | | return toLongArray(",", str); |
| | | } |
| | | |
| | | /** |
| | | * 转换为Integer数组<br> |
| | | * |
| | | * @param split 分隔符 |
| | | * @param str 被转换的值 |
| | | * @return 结果 |
| | | */ |
| | | public static Integer[] toIntArray(String split, String str) |
| | | { |
| | | if (StringUtils.isEmpty(str)) |
| | | { |
| | | return new Integer[] {}; |
| | | } |
| | | String[] arr = str.split(split); |
| | | final Integer[] ints = new Integer[arr.length]; |
| | | for (int i = 0; i < arr.length; i++) |
| | | { |
| | | final Integer v = toInt(arr[i], 0); |
| | | ints[i] = v; |
| | | } |
| | | return ints; |
| | | } |
| | | |
| | | /** |
| | | * 转换为Long数组<br> |
| | | * |
| | | * @param split 分隔符 |
| | | * @param str 被转换的值 |
| | | * @return 结果 |
| | | */ |
| | | public static Long[] toLongArray(String split, String str) |
| | | { |
| | | if (StringUtils.isEmpty(str)) |
| | | { |
| | | return new Long[] {}; |
| | | } |
| | | String[] arr = str.split(split); |
| | | final Long[] longs = new Long[arr.length]; |
| | | for (int i = 0; i < arr.length; i++) |
| | | { |
| | | final Long v = toLong(arr[i], null); |
| | | longs[i] = v; |
| | | } |
| | | return longs; |
| | | } |
| | | |
| | | /** |
| | | * 转换为String数组<br> |
| | | * |
| | | * @param str 被转换的值 |
| | | * @return 结果 |
| | | */ |
| | | public static String[] toStrArray(String str) |
| | | { |
| | | return toStrArray(",", str); |
| | | } |
| | | |
| | | /** |
| | | * 转换为String数组<br> |
| | | * |
| | | * @param split 分隔符 |
| | | * @param str 被转换的值 |
| | | * @return 结果 |
| | | */ |
| | | public static String[] toStrArray(String split, String str) |
| | | { |
| | | return str.split(split); |
| | | } |
| | | |
| | | /** |
| | | * 转换为long<br> |
| | | * 如果给定的值为空,或者转换失败,返回默认值<br> |
| | | * 转换失败不会报错 |
| | | * |
| | | * @param value 被转换的值 |
| | | * @param defaultValue 转换错误时的默认值 |
| | | * @return 结果 |
| | | */ |
| | | public static Long toLong(Object value, Long defaultValue) |
| | | { |
| | | if (value == null) |
| | | { |
| | | return defaultValue; |
| | | } |
| | | if (value instanceof Long) |
| | | { |
| | | return (Long) value; |
| | | } |
| | | if (value instanceof Number) |
| | | { |
| | | return ((Number) value).longValue(); |
| | | } |
| | | final String valueStr = toStr(value, null); |
| | | if (StringUtils.isEmpty(valueStr)) |
| | | { |
| | | return defaultValue; |
| | | } |
| | | try |
| | | { |
| | | // 支持科学计数法 |
| | | return new BigDecimal(valueStr.trim()).longValue(); |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | return defaultValue; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 转换为long<br> |
| | | * 如果给定的值为<code>null</code>,或者转换失败,返回默认值<code>null</code><br> |
| | | * 转换失败不会报错 |
| | | * |
| | | * @param value 被转换的值 |
| | | * @return 结果 |
| | | */ |
| | | public static Long toLong(Object value) |
| | | { |
| | | return toLong(value, null); |
| | | } |
| | | |
| | | /** |
| | | * 转换为double<br> |
| | | * 如果给定的值为空,或者转换失败,返回默认值<br> |
| | | * 转换失败不会报错 |
| | | * |
| | | * @param value 被转换的值 |
| | | * @param defaultValue 转换错误时的默认值 |
| | | * @return 结果 |
| | | */ |
| | | public static Double toDouble(Object value, Double defaultValue) |
| | | { |
| | | if (value == null) |
| | | { |
| | | return defaultValue; |
| | | } |
| | | if (value instanceof Double) |
| | | { |
| | | return (Double) value; |
| | | } |
| | | if (value instanceof Number) |
| | | { |
| | | return ((Number) value).doubleValue(); |
| | | } |
| | | final String valueStr = toStr(value, null); |
| | | if (StringUtils.isEmpty(valueStr)) |
| | | { |
| | | return defaultValue; |
| | | } |
| | | try |
| | | { |
| | | // 支持科学计数法 |
| | | return new BigDecimal(valueStr.trim()).doubleValue(); |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | return defaultValue; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 转换为double<br> |
| | | * 如果给定的值为空,或者转换失败,返回默认值<code>null</code><br> |
| | | * 转换失败不会报错 |
| | | * |
| | | * @param value 被转换的值 |
| | | * @return 结果 |
| | | */ |
| | | public static Double toDouble(Object value) |
| | | { |
| | | return toDouble(value, null); |
| | | } |
| | | |
| | | /** |
| | | * 转换为Float<br> |
| | | * 如果给定的值为空,或者转换失败,返回默认值<br> |
| | | * 转换失败不会报错 |
| | | * |
| | | * @param value 被转换的值 |
| | | * @param defaultValue 转换错误时的默认值 |
| | | * @return 结果 |
| | | */ |
| | | public static Float toFloat(Object value, Float defaultValue) |
| | | { |
| | | if (value == null) |
| | | { |
| | | return defaultValue; |
| | | } |
| | | if (value instanceof Float) |
| | | { |
| | | return (Float) value; |
| | | } |
| | | if (value instanceof Number) |
| | | { |
| | | return ((Number) value).floatValue(); |
| | | } |
| | | final String valueStr = toStr(value, null); |
| | | if (StringUtils.isEmpty(valueStr)) |
| | | { |
| | | return defaultValue; |
| | | } |
| | | try |
| | | { |
| | | return Float.parseFloat(valueStr.trim()); |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | return defaultValue; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 转换为Float<br> |
| | | * 如果给定的值为空,或者转换失败,返回默认值<code>null</code><br> |
| | | * 转换失败不会报错 |
| | | * |
| | | * @param value 被转换的值 |
| | | * @return 结果 |
| | | */ |
| | | public static Float toFloat(Object value) |
| | | { |
| | | return toFloat(value, null); |
| | | } |
| | | |
| | | /** |
| | | * 转换为boolean<br> |
| | | * String支持的值为:true、false、yes、ok、no,1,0 如果给定的值为空,或者转换失败,返回默认值<br> |
| | | * 转换失败不会报错 |
| | | * |
| | | * @param value 被转换的值 |
| | | * @param defaultValue 转换错误时的默认值 |
| | | * @return 结果 |
| | | */ |
| | | public static Boolean toBool(Object value, Boolean defaultValue) |
| | | { |
| | | if (value == null) |
| | | { |
| | | return defaultValue; |
| | | } |
| | | if (value instanceof Boolean) |
| | | { |
| | | return (Boolean) value; |
| | | } |
| | | String valueStr = toStr(value, null); |
| | | if (StringUtils.isEmpty(valueStr)) |
| | | { |
| | | return defaultValue; |
| | | } |
| | | valueStr = valueStr.trim().toLowerCase(); |
| | | switch (valueStr) |
| | | { |
| | | case "true": |
| | | case "yes": |
| | | case "ok": |
| | | case "1": |
| | | return true; |
| | | case "false": |
| | | case "no": |
| | | case "0": |
| | | return false; |
| | | default: |
| | | return defaultValue; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 转换为boolean<br> |
| | | * 如果给定的值为空,或者转换失败,返回默认值<code>null</code><br> |
| | | * 转换失败不会报错 |
| | | * |
| | | * @param value 被转换的值 |
| | | * @return 结果 |
| | | */ |
| | | public static Boolean toBool(Object value) |
| | | { |
| | | return toBool(value, null); |
| | | } |
| | | |
| | | /** |
| | | * 转换为Enum对象<br> |
| | | * 如果给定的值为空,或者转换失败,返回默认值<br> |
| | | * |
| | | * @param clazz Enum的Class |
| | | * @param value 值 |
| | | * @param defaultValue 默认值 |
| | | * @return Enum |
| | | */ |
| | | public static <E extends Enum<E>> E toEnum(Class<E> clazz, Object value, E defaultValue) |
| | | { |
| | | if (value == null) |
| | | { |
| | | return defaultValue; |
| | | } |
| | | if (clazz.isAssignableFrom(value.getClass())) |
| | | { |
| | | @SuppressWarnings("unchecked") |
| | | E myE = (E) value; |
| | | return myE; |
| | | } |
| | | final String valueStr = toStr(value, null); |
| | | if (StringUtils.isEmpty(valueStr)) |
| | | { |
| | | return defaultValue; |
| | | } |
| | | try |
| | | { |
| | | return Enum.valueOf(clazz, valueStr); |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | return defaultValue; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 转换为Enum对象<br> |
| | | * 如果给定的值为空,或者转换失败,返回默认值<code>null</code><br> |
| | | * |
| | | * @param clazz Enum的Class |
| | | * @param value 值 |
| | | * @return Enum |
| | | */ |
| | | public static <E extends Enum<E>> E toEnum(Class<E> clazz, Object value) |
| | | { |
| | | return toEnum(clazz, value, null); |
| | | } |
| | | |
| | | /** |
| | | * 转换为BigInteger<br> |
| | | * 如果给定的值为空,或者转换失败,返回默认值<br> |
| | | * 转换失败不会报错 |
| | | * |
| | | * @param value 被转换的值 |
| | | * @param defaultValue 转换错误时的默认值 |
| | | * @return 结果 |
| | | */ |
| | | public static BigInteger toBigInteger(Object value, BigInteger defaultValue) |
| | | { |
| | | if (value == null) |
| | | { |
| | | return defaultValue; |
| | | } |
| | | if (value instanceof BigInteger) |
| | | { |
| | | return (BigInteger) value; |
| | | } |
| | | if (value instanceof Long) |
| | | { |
| | | return BigInteger.valueOf((Long) value); |
| | | } |
| | | final String valueStr = toStr(value, null); |
| | | if (StringUtils.isEmpty(valueStr)) |
| | | { |
| | | return defaultValue; |
| | | } |
| | | try |
| | | { |
| | | return new BigInteger(valueStr); |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | return defaultValue; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 转换为BigInteger<br> |
| | | * 如果给定的值为空,或者转换失败,返回默认值<code>null</code><br> |
| | | * 转换失败不会报错 |
| | | * |
| | | * @param value 被转换的值 |
| | | * @return 结果 |
| | | */ |
| | | public static BigInteger toBigInteger(Object value) |
| | | { |
| | | return toBigInteger(value, null); |
| | | } |
| | | |
| | | /** |
| | | * 转换为BigDecimal<br> |
| | | * 如果给定的值为空,或者转换失败,返回默认值<br> |
| | | * 转换失败不会报错 |
| | | * |
| | | * @param value 被转换的值 |
| | | * @param defaultValue 转换错误时的默认值 |
| | | * @return 结果 |
| | | */ |
| | | public static BigDecimal toBigDecimal(Object value, BigDecimal defaultValue) |
| | | { |
| | | if (value == null) |
| | | { |
| | | return defaultValue; |
| | | } |
| | | if (value instanceof BigDecimal) |
| | | { |
| | | return (BigDecimal) value; |
| | | } |
| | | if (value instanceof Long) |
| | | { |
| | | return new BigDecimal((Long) value); |
| | | } |
| | | if (value instanceof Double) |
| | | { |
| | | return BigDecimal.valueOf((Double) value); |
| | | } |
| | | if (value instanceof Integer) |
| | | { |
| | | return new BigDecimal((Integer) value); |
| | | } |
| | | final String valueStr = toStr(value, null); |
| | | if (StringUtils.isEmpty(valueStr)) |
| | | { |
| | | return defaultValue; |
| | | } |
| | | try |
| | | { |
| | | return new BigDecimal(valueStr); |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | return defaultValue; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 转换为BigDecimal<br> |
| | | * 如果给定的值为空,或者转换失败,返回默认值<br> |
| | | * 转换失败不会报错 |
| | | * |
| | | * @param value 被转换的值 |
| | | * @return 结果 |
| | | */ |
| | | public static BigDecimal toBigDecimal(Object value) |
| | | { |
| | | return toBigDecimal(value, null); |
| | | } |
| | | |
| | | /** |
| | | * 将对象转为字符串<br> |
| | | * 1、Byte数组和ByteBuffer会被转换为对应字符串的数组 2、对象数组会调用Arrays.toString方法 |
| | | * |
| | | * @param obj 对象 |
| | | * @return 字符串 |
| | | */ |
| | | public static String utf8Str(Object obj) |
| | | { |
| | | return str(obj, CharsetKit.CHARSET_UTF_8); |
| | | } |
| | | |
| | | /** |
| | | * 将对象转为字符串<br> |
| | | * 1、Byte数组和ByteBuffer会被转换为对应字符串的数组 2、对象数组会调用Arrays.toString方法 |
| | | * |
| | | * @param obj 对象 |
| | | * @param charsetName 字符集 |
| | | * @return 字符串 |
| | | */ |
| | | public static String str(Object obj, String charsetName) |
| | | { |
| | | return str(obj, Charset.forName(charsetName)); |
| | | } |
| | | |
| | | /** |
| | | * 将对象转为字符串<br> |
| | | * 1、Byte数组和ByteBuffer会被转换为对应字符串的数组 2、对象数组会调用Arrays.toString方法 |
| | | * |
| | | * @param obj 对象 |
| | | * @param charset 字符集 |
| | | * @return 字符串 |
| | | */ |
| | | public static String str(Object obj, Charset charset) |
| | | { |
| | | if (null == obj) |
| | | { |
| | | return null; |
| | | } |
| | | |
| | | if (obj instanceof String) |
| | | { |
| | | return (String) obj; |
| | | } |
| | | else if (obj instanceof byte[] || obj instanceof Byte[]) |
| | | { |
| | | if (obj instanceof byte[]) |
| | | { |
| | | return str((byte[]) obj, charset); |
| | | } |
| | | else |
| | | { |
| | | Byte[] bytes = (Byte[]) obj; |
| | | int length = bytes.length; |
| | | byte[] dest = new byte[length]; |
| | | for (int i = 0; i < length; i++) |
| | | { |
| | | dest[i] = bytes[i]; |
| | | } |
| | | return str(dest, charset); |
| | | } |
| | | } |
| | | else if (obj instanceof ByteBuffer) |
| | | { |
| | | return str((ByteBuffer) obj, charset); |
| | | } |
| | | return obj.toString(); |
| | | } |
| | | |
| | | /** |
| | | * 将byte数组转为字符串 |
| | | * |
| | | * @param bytes byte数组 |
| | | * @param charset 字符集 |
| | | * @return 字符串 |
| | | */ |
| | | public static String str(byte[] bytes, String charset) |
| | | { |
| | | return str(bytes, StringUtils.isEmpty(charset) ? Charset.defaultCharset() : Charset.forName(charset)); |
| | | } |
| | | |
| | | /** |
| | | * 解码字节码 |
| | | * |
| | | * @param data 字符串 |
| | | * @param charset 字符集,如果此字段为空,则解码的结果取决于平台 |
| | | * @return 解码后的字符串 |
| | | */ |
| | | public static String str(byte[] data, Charset charset) |
| | | { |
| | | if (data == null) |
| | | { |
| | | return null; |
| | | } |
| | | |
| | | if (null == charset) |
| | | { |
| | | return new String(data); |
| | | } |
| | | return new String(data, charset); |
| | | } |
| | | |
| | | /** |
| | | * 将编码的byteBuffer数据转换为字符串 |
| | | * |
| | | * @param data 数据 |
| | | * @param charset 字符集,如果为空使用当前系统字符集 |
| | | * @return 字符串 |
| | | */ |
| | | public static String str(ByteBuffer data, String charset) |
| | | { |
| | | if (data == null) |
| | | { |
| | | return null; |
| | | } |
| | | |
| | | return str(data, Charset.forName(charset)); |
| | | } |
| | | |
| | | /** |
| | | * 将编码的byteBuffer数据转换为字符串 |
| | | * |
| | | * @param data 数据 |
| | | * @param charset 字符集,如果为空使用当前系统字符集 |
| | | * @return 字符串 |
| | | */ |
| | | public static String str(ByteBuffer data, Charset charset) |
| | | { |
| | | if (null == charset) |
| | | { |
| | | charset = Charset.defaultCharset(); |
| | | } |
| | | return charset.decode(data).toString(); |
| | | } |
| | | |
| | | // ----------------------------------------------------------------------- 全角半角转换 |
| | | /** |
| | | * 半角转全角 |
| | | * |
| | | * @param input String. |
| | | * @return 全角字符串. |
| | | */ |
| | | public static String toSBC(String input) |
| | | { |
| | | return toSBC(input, null); |
| | | } |
| | | |
| | | /** |
| | | * 半角转全角 |
| | | * |
| | | * @param input String |
| | | * @param notConvertSet 不替换的字符集合 |
| | | * @return 全角字符串. |
| | | */ |
| | | public static String toSBC(String input, Set<Character> notConvertSet) |
| | | { |
| | | char[] c = input.toCharArray(); |
| | | for (int i = 0; i < c.length; i++) |
| | | { |
| | | if (null != notConvertSet && notConvertSet.contains(c[i])) |
| | | { |
| | | // 跳过不替换的字符 |
| | | continue; |
| | | } |
| | | |
| | | if (c[i] == ' ') |
| | | { |
| | | c[i] = '\u3000'; |
| | | } |
| | | else if (c[i] < '\177') |
| | | { |
| | | c[i] = (char) (c[i] + 65248); |
| | | |
| | | } |
| | | } |
| | | return new String(c); |
| | | } |
| | | |
| | | /** |
| | | * 全角转半角 |
| | | * |
| | | * @param input String. |
| | | * @return 半角字符串 |
| | | */ |
| | | public static String toDBC(String input) |
| | | { |
| | | return toDBC(input, null); |
| | | } |
| | | |
| | | /** |
| | | * 替换全角为半角 |
| | | * |
| | | * @param text 文本 |
| | | * @param notConvertSet 不替换的字符集合 |
| | | * @return 替换后的字符 |
| | | */ |
| | | public static String toDBC(String text, Set<Character> notConvertSet) |
| | | { |
| | | char[] c = text.toCharArray(); |
| | | for (int i = 0; i < c.length; i++) |
| | | { |
| | | if (null != notConvertSet && notConvertSet.contains(c[i])) |
| | | { |
| | | // 跳过不替换的字符 |
| | | continue; |
| | | } |
| | | |
| | | if (c[i] == '\u3000') |
| | | { |
| | | c[i] = ' '; |
| | | } |
| | | else if (c[i] > '\uFF00' && c[i] < '\uFF5F') |
| | | { |
| | | c[i] = (char) (c[i] - 65248); |
| | | } |
| | | } |
| | | return new String(c); |
| | | } |
| | | |
| | | /** |
| | | * 数字金额大写转换 先写个完整的然后将如零拾替换成零 |
| | | * |
| | | * @param n 数字 |
| | | * @return 中文大写数字 |
| | | */ |
| | | public static String digitUppercase(double n) |
| | | { |
| | | String[] fraction = { "角", "分" }; |
| | | String[] digit = { "零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖" }; |
| | | String[][] unit = { { "元", "万", "亿" }, { "", "拾", "佰", "仟" } }; |
| | | |
| | | String head = n < 0 ? "负" : ""; |
| | | n = Math.abs(n); |
| | | |
| | | String s = ""; |
| | | for (int i = 0; i < fraction.length; i++) |
| | | { |
| | | s += (digit[(int) (Math.floor(n * 10 * Math.pow(10, i)) % 10)] + fraction[i]).replaceAll("(零.)+", ""); |
| | | } |
| | | if (s.length() < 1) |
| | | { |
| | | s = "整"; |
| | | } |
| | | int integerPart = (int) Math.floor(n); |
| | | |
| | | for (int i = 0; i < unit[0].length && integerPart > 0; i++) |
| | | { |
| | | String p = ""; |
| | | for (int j = 0; j < unit[1].length && n > 0; j++) |
| | | { |
| | | p = digit[integerPart % 10] + unit[1][j] + p; |
| | | integerPart = integerPart / 10; |
| | | } |
| | | s = p.replaceAll("(零.)*零$", "").replaceAll("^$", "零") + unit[0][i] + s; |
| | | } |
| | | return head + s.replaceAll("(零.)*零元", "元").replaceFirst("(零.)+", "").replaceAll("(零.)+", "零").replaceAll("^整$", "零元整"); |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.common.core.text; |
| | | |
| | | import com.ruoyi.common.core.utils.StringUtils; |
| | | |
| | | /** |
| | | * 字符串格式化 |
| | | * |
| | | * @author ruoyi |
| | | */ |
| | | public class StrFormatter |
| | | { |
| | | public static final String EMPTY_JSON = "{}"; |
| | | public static final char C_BACKSLASH = '\\'; |
| | | public static final char C_DELIM_START = '{'; |
| | | public static final char C_DELIM_END = '}'; |
| | | |
| | | /** |
| | | * 格式化字符串<br> |
| | | * 此方法只是简单将占位符 {} 按照顺序替换为参数<br> |
| | | * 如果想输出 {} 使用 \\转义 { 即可,如果想输出 {} 之前的 \ 使用双转义符 \\\\ 即可<br> |
| | | * 例:<br> |
| | | * 通常使用:format("this is {} for {}", "a", "b") -> this is a for b<br> |
| | | * 转义{}: format("this is \\{} for {}", "a", "b") -> this is \{} for a<br> |
| | | * 转义\: format("this is \\\\{} for {}", "a", "b") -> this is \a for b<br> |
| | | * |
| | | * @param strPattern 字符串模板 |
| | | * @param argArray 参数列表 |
| | | * @return 结果 |
| | | */ |
| | | public static String format(final String strPattern, final Object... argArray) |
| | | { |
| | | if (StringUtils.isEmpty(strPattern) || StringUtils.isEmpty(argArray)) |
| | | { |
| | | return strPattern; |
| | | } |
| | | final int strPatternLength = strPattern.length(); |
| | | |
| | | // 初始化定义好的长度以获得更好的性能 |
| | | StringBuilder sbuf = new StringBuilder(strPatternLength + 50); |
| | | |
| | | int handledPosition = 0; |
| | | int delimIndex;// 占位符所在位置 |
| | | for (int argIndex = 0; argIndex < argArray.length; argIndex++) |
| | | { |
| | | delimIndex = strPattern.indexOf(EMPTY_JSON, handledPosition); |
| | | if (delimIndex == -1) |
| | | { |
| | | if (handledPosition == 0) |
| | | { |
| | | return strPattern; |
| | | } |
| | | else |
| | | { // 字符串模板剩余部分不再包含占位符,加入剩余部分后返回结果 |
| | | sbuf.append(strPattern, handledPosition, strPatternLength); |
| | | return sbuf.toString(); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | if (delimIndex > 0 && strPattern.charAt(delimIndex - 1) == C_BACKSLASH) |
| | | { |
| | | if (delimIndex > 1 && strPattern.charAt(delimIndex - 2) == C_BACKSLASH) |
| | | { |
| | | // 转义符之前还有一个转义符,占位符依旧有效 |
| | | sbuf.append(strPattern, handledPosition, delimIndex - 1); |
| | | sbuf.append(Convert.utf8Str(argArray[argIndex])); |
| | | handledPosition = delimIndex + 2; |
| | | } |
| | | else |
| | | { |
| | | // 占位符被转义 |
| | | argIndex--; |
| | | sbuf.append(strPattern, handledPosition, delimIndex - 1); |
| | | sbuf.append(C_DELIM_START); |
| | | handledPosition = delimIndex + 1; |
| | | } |
| | | } |
| | | else |
| | | { |
| | | // 正常占位符 |
| | | sbuf.append(strPattern, handledPosition, delimIndex); |
| | | sbuf.append(Convert.utf8Str(argArray[argIndex])); |
| | | handledPosition = delimIndex + 2; |
| | | } |
| | | } |
| | | } |
| | | // 加入最后一个占位符后所有的字符 |
| | | sbuf.append(strPattern, handledPosition, strPattern.length()); |
| | | |
| | | return sbuf.toString(); |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.common.core.utils; |
| | | |
| | | import org.apache.commons.lang3.time.DateFormatUtils; |
| | | import org.apache.poi.ss.usermodel.DateUtil; |
| | | |
| | | import java.lang.management.ManagementFactory; |
| | | import java.text.ParseException; |
| | | import java.text.SimpleDateFormat; |
| | | import java.time.*; |
| | | import java.util.*; |
| | | |
| | | /** |
| | | * 时间工具类 |
| | | * |
| | | * @author ruoyi |
| | | */ |
| | | public class DateUtils extends org.apache.commons.lang3.time.DateUtils |
| | | { |
| | | private static TimeZone tz = TimeZone.getTimeZone("GMT+8"); |
| | | |
| | | public static String YYYY = "yyyy"; |
| | | |
| | | public static String YYYY_MM = "yyyy-MM"; |
| | | |
| | | public static String YYYY_MM_DD = "yyyy-MM-dd"; |
| | | |
| | | public static String YYYYMMDDHHMMSS = "yyyyMMddHHmmss"; |
| | | |
| | | public static String YYYY_MM_DD_HH_MM_SS = "yyyy-MM-dd HH:mm:ss"; |
| | | |
| | | private static String[] parsePatterns = { |
| | | "yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss", "yyyy-MM-dd HH:mm", "yyyy-MM", |
| | | "yyyy/MM/dd", "yyyy/MM/dd HH:mm:ss", "yyyy/MM/dd HH:mm", "yyyy/MM", |
| | | "yyyy.MM.dd", "yyyy.MM.dd HH:mm:ss", "yyyy.MM.dd HH:mm", "yyyy.MM"}; |
| | | |
| | | /** |
| | | * 获取当前Date型日期 |
| | | * |
| | | * @return Date() 当前日期 |
| | | */ |
| | | public static Date getNowDate() |
| | | { |
| | | return new Date(); |
| | | } |
| | | |
| | | /** |
| | | * 获取当前日期, 默认格式为yyyy-MM-dd |
| | | * |
| | | * @return String |
| | | */ |
| | | public static String getDate() |
| | | { |
| | | return dateTimeNow(YYYY_MM_DD); |
| | | } |
| | | |
| | | public static final String getTime() |
| | | { |
| | | return dateTimeNow(YYYY_MM_DD_HH_MM_SS); |
| | | } |
| | | |
| | | public static final String dateTimeNow() |
| | | { |
| | | return dateTimeNow(YYYYMMDDHHMMSS); |
| | | } |
| | | |
| | | public static final String dateTimeNow(final String format) |
| | | { |
| | | return parseDateToStr(format, new Date()); |
| | | } |
| | | |
| | | public static final String dateTime(final Date date) |
| | | { |
| | | return parseDateToStr(YYYY_MM_DD, date); |
| | | } |
| | | |
| | | public static final String parseDateToStr(final String format, final Date date) |
| | | { |
| | | return new SimpleDateFormat(format).format(date); |
| | | } |
| | | |
| | | public static final Date dateTime(final String format, final String ts) |
| | | { |
| | | try |
| | | { |
| | | return new SimpleDateFormat(format).parse(ts); |
| | | } |
| | | catch (ParseException e) |
| | | { |
| | | throw new RuntimeException(e); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 日期路径 即年/月/日 如2018/08/08 |
| | | */ |
| | | public static final String datePath() |
| | | { |
| | | Date now = new Date(); |
| | | return DateFormatUtils.format(now, "yyyy/MM/dd"); |
| | | } |
| | | |
| | | /** |
| | | * 日期路径 即年/月/日 如20180808 |
| | | */ |
| | | public static final String dateTime() |
| | | { |
| | | Date now = new Date(); |
| | | return DateFormatUtils.format(now, "yyyyMMdd"); |
| | | } |
| | | |
| | | /** |
| | | * 日期型字符串转化为日期 格式 |
| | | */ |
| | | public static Date parseDate(Object str) |
| | | { |
| | | if (str == null) |
| | | { |
| | | return null; |
| | | } |
| | | try |
| | | { |
| | | return parseDate(str.toString(), parsePatterns); |
| | | } |
| | | catch (ParseException e) |
| | | { |
| | | return null; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 获取服务器启动时间 |
| | | */ |
| | | public static Date getServerStartDate() |
| | | { |
| | | long time = ManagementFactory.getRuntimeMXBean().getStartTime(); |
| | | return new Date(time); |
| | | } |
| | | |
| | | /** |
| | | * 计算时间差 |
| | | * |
| | | * @param endTime 最后时间 |
| | | * @param startTime 开始时间 |
| | | * @return 时间差(天/小时/分钟) |
| | | */ |
| | | public static String timeDistance(Date endTime, Date startTime) |
| | | { |
| | | long nd = 1000 * 24 * 60 * 60; |
| | | long nh = 1000 * 60 * 60; |
| | | long nm = 1000 * 60; |
| | | // long ns = 1000; |
| | | // 获得两个时间的毫秒时间差异 |
| | | long diff = endTime.getTime() - startTime.getTime(); |
| | | // 计算差多少天 |
| | | long day = diff / nd; |
| | | // 计算差多少小时 |
| | | long hour = diff % nd / nh; |
| | | // 计算差多少分钟 |
| | | long min = diff % nd % nh / nm; |
| | | // 计算差多少秒//输出结果 |
| | | // long sec = diff % nd % nh % nm / ns; |
| | | return day + "天" + hour + "小时" + min + "分钟"; |
| | | } |
| | | |
| | | /** |
| | | * 增加 LocalDateTime ==> Date |
| | | */ |
| | | public static Date toDate(LocalDateTime temporalAccessor) |
| | | { |
| | | ZonedDateTime zdt = temporalAccessor.atZone(ZoneId.systemDefault()); |
| | | return Date.from(zdt.toInstant()); |
| | | } |
| | | |
| | | /** |
| | | * 增加 LocalDate ==> Date |
| | | */ |
| | | public static Date toDate(LocalDate temporalAccessor) |
| | | { |
| | | LocalDateTime localDateTime = LocalDateTime.of(temporalAccessor, LocalTime.of(0, 0, 0)); |
| | | ZonedDateTime zdt = localDateTime.atZone(ZoneId.systemDefault()); |
| | | return Date.from(zdt.toInstant()); |
| | | } |
| | | |
| | | /** |
| | | * 计算两个日期之间相差的天数 |
| | | * |
| | | * @param smdate 较小的时间 |
| | | * @param bdate 较大的时间 |
| | | * @return 相差天数 |
| | | */ |
| | | public static int daysBetween(Date smdate, Date bdate) { |
| | | Calendar cal = Calendar.getInstance(); |
| | | cal.setTime(smdate); |
| | | long time1 = cal.getTimeInMillis(); |
| | | cal.setTime(bdate); |
| | | long time2 = cal.getTimeInMillis(); |
| | | long days = (time2 - time1) / (1000 * 3600 * 24); |
| | | return Integer.parseInt(String.valueOf(days)); |
| | | } |
| | | |
| | | /** |
| | | * 得到系统日期 |
| | | * |
| | | * @return |
| | | */ |
| | | public static Date getDateTime() { |
| | | TimeZone.setDefault(tz); |
| | | return new Date(); |
| | | } |
| | | |
| | | /** |
| | | * 字符串日期转Date yyyy-MM-dd HH:mm:ss |
| | | * |
| | | * @param dateStr |
| | | * @return |
| | | */ |
| | | public static Date getDate_str3(String dateStr) { |
| | | SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); |
| | | sdf.setTimeZone(tz); |
| | | if ("".equals(dateStr)) { |
| | | dateStr = sdf.format(DateUtils.getDateTime()); |
| | | } |
| | | Date date = null; |
| | | try { |
| | | date = sdf.parse(dateStr); |
| | | } catch (ParseException e) { |
| | | e.printStackTrace(); |
| | | } |
| | | return date; |
| | | } |
| | | |
| | | /** |
| | | * 指定日期所在周的周一和周日时间 |
| | | * |
| | | * @return 结果集 |
| | | */ |
| | | public static Map<String, Date> getWeekDate(Date date) { |
| | | Map<String, Date> map = new HashMap<>(2); |
| | | Calendar cal = Calendar.getInstance(); |
| | | cal.setTime(date); |
| | | // 设置一个星期的第一天,按中国的习惯一个星期的第一天是星期一 |
| | | cal.setFirstDayOfWeek(Calendar.MONDAY); |
| | | // 获得当前日期是一个星期的第几天 |
| | | int dayWeek = cal.get(Calendar.DAY_OF_WEEK); |
| | | if (dayWeek == 1) { |
| | | dayWeek = 8; |
| | | } |
| | | // 根据日历的规则,给当前日期减去星期几与一个星期第一天的差值 |
| | | cal.add(Calendar.DATE, cal.getFirstDayOfWeek() - dayWeek); |
| | | Date mondayDate = cal.getTime(); |
| | | cal.add(Calendar.DATE, 4 + cal.getFirstDayOfWeek()); |
| | | Date sundayDate = cal.getTime(); |
| | | map.put("first", mondayDate); |
| | | map.put("last", sundayDate); |
| | | return map; |
| | | } |
| | | |
| | | /** |
| | | * 指定日期所在月的第一天/最后一天时间 |
| | | * |
| | | * @return 结果集 |
| | | */ |
| | | public static Map<String, Date> getMonthDate(Date date) { |
| | | Map<String, Date> map = new HashMap<>(2); |
| | | Calendar cal = Calendar.getInstance(); |
| | | //设置指定日期 |
| | | cal.setTime(date); |
| | | //获取当月第一天日期 |
| | | int first = cal.getActualMinimum(Calendar.DAY_OF_MONTH); |
| | | cal.set(Calendar.DAY_OF_MONTH, first); |
| | | Date firstDay = cal.getTime(); |
| | | map.put("first", firstDay); |
| | | //获取当月最后一天日期 |
| | | int last = cal.getActualMaximum(Calendar.DAY_OF_MONTH); |
| | | cal.set(Calendar.DAY_OF_MONTH, last); |
| | | Date lastDay = cal.getTime(); |
| | | map.put("last", lastDay); |
| | | return map; |
| | | } |
| | | |
| | | /** |
| | | * 指定日期所在年的第一天/最后一天时间 |
| | | * |
| | | * @return 结果集 |
| | | */ |
| | | public static Map<String, Date> getYearDate(Date date) { |
| | | Map<String, Date> map = new HashMap<>(2); |
| | | Calendar cal = Calendar.getInstance(); |
| | | //设置指定日期 |
| | | cal.setTime(date); |
| | | //获取本年第一天日期 |
| | | int first = cal.getActualMinimum(Calendar.DAY_OF_YEAR); |
| | | cal.set(Calendar.DAY_OF_YEAR, first); |
| | | Date firstDay = cal.getTime(); |
| | | map.put("first", firstDay); |
| | | //获取本年最后一天日期 |
| | | int last = cal.getActualMaximum(Calendar.DAY_OF_YEAR); |
| | | cal.set(Calendar.DAY_OF_YEAR, last); |
| | | Date lastDay = cal.getTime(); |
| | | map.put("last", lastDay); |
| | | return map; |
| | | } |
| | | |
| | | /** |
| | | * 分别获取日期中的年月日 |
| | | * |
| | | * @param date 需要获取的日期 |
| | | * @return 结果集合 |
| | | */ |
| | | public static Map<String, String> getYearMonthDay(Date date) { |
| | | String year = String.format("%tY", date); |
| | | String month = String.format("%tm", date); |
| | | String day = String.format("%td", date); |
| | | Map<String, String> result = new HashMap<>(3); |
| | | result.put("year", year); |
| | | result.put("month", month); |
| | | result.put("day", day); |
| | | result.put("time", String.valueOf(date.getTime())); |
| | | return result; |
| | | } |
| | | |
| | | /** |
| | | * Date转为LocalDateTime |
| | | * |
| | | * @param date 日期 |
| | | * @return LocalDateTime |
| | | */ |
| | | public static LocalDateTime dateToLocalDateTime(Date date) { |
| | | Instant instant = date.toInstant(); |
| | | ZoneId zoneId = ZoneId.systemDefault(); |
| | | return instant.atZone(zoneId).toLocalDateTime(); |
| | | } |
| | | |
| | | /** |
| | | * LocalDateTime转Date |
| | | * |
| | | * @param dateTime 日期 |
| | | * @return Date |
| | | */ |
| | | public static Date localDateTimeToDate(LocalDateTime dateTime) { |
| | | ZoneId zoneId = ZoneId.systemDefault(); |
| | | ZonedDateTime zdt = dateTime.atZone(zoneId); |
| | | return Date.from(zdt.toInstant()); |
| | | } |
| | | |
| | | /** |
| | | * 获取当天的00:00:00 |
| | | * |
| | | * @return |
| | | */ |
| | | public static LocalDateTime getDayStart(LocalDateTime time) { |
| | | return time.with(LocalTime.MIN); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 获取当天的23:59:59 |
| | | * |
| | | * @return |
| | | */ |
| | | public static LocalDateTime getDayEnd(LocalDateTime time) { |
| | | return time.with(LocalTime.MAX); |
| | | } |
| | | |
| | | |
| | | } |
New file |
| | |
| | | package com.ruoyi.common.core.utils; |
| | | |
| | | import java.io.PrintWriter; |
| | | import java.io.StringWriter; |
| | | import org.apache.commons.lang3.exception.ExceptionUtils; |
| | | |
| | | /** |
| | | * 错误信息处理类。 |
| | | * |
| | | * @author ruoyi |
| | | */ |
| | | public class ExceptionUtil |
| | | { |
| | | /** |
| | | * 获取exception的详细错误信息。 |
| | | */ |
| | | public static String getExceptionMessage(Throwable e) |
| | | { |
| | | StringWriter sw = new StringWriter(); |
| | | e.printStackTrace(new PrintWriter(sw, true)); |
| | | return sw.toString(); |
| | | } |
| | | |
| | | public static String getRootErrorMessage(Exception e) |
| | | { |
| | | Throwable root = ExceptionUtils.getRootCause(e); |
| | | root = (root == null ? e : root); |
| | | if (root == null) |
| | | { |
| | | return ""; |
| | | } |
| | | String msg = root.getMessage(); |
| | | if (msg == null) |
| | | { |
| | | return "null"; |
| | | } |
| | | return StringUtils.defaultString(msg); |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.common.core.utils; |
| | | |
| | | import com.alibaba.fastjson2.JSON; |
| | | import com.alibaba.fastjson2.JSONObject; |
| | | import com.baomidou.mybatisplus.extension.service.IService; |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.common.core.web.domain.AjaxResult; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | |
| | | import java.io.IOException; |
| | | import java.util.List; |
| | | |
| | | /** |
| | | * 导出返回信息 |
| | | */ |
| | | @Slf4j |
| | | public class ImportExcelUtil { |
| | | |
| | | /** |
| | | * @param errorLines 错误行数 |
| | | * @param successLines 成功行数 |
| | | * @param errorMessage 错误信息 |
| | | * @return |
| | | * @throws IOException |
| | | */ |
| | | public static R<String > importReturnMsg(int errorLines, int successLines, List<String> errorMessage) throws IOException { |
| | | if (errorLines == 0) { |
| | | return R.ok("共" + successLines + "行数据全部导入成功!"); |
| | | } else { |
| | | JSONObject result = new JSONObject(5); |
| | | int totalCount = successLines + errorLines; |
| | | result.put("totalCount", totalCount); |
| | | result.put("errorCount", errorLines); |
| | | result.put("errorMessage", errorMessage); |
| | | result.put("successCount", successLines); |
| | | result.put("msg", "总上传行数:" + totalCount + ",已导入行数:" + successLines + ",错误行数:" + errorLines); |
| | | return R.ok(JSON.toJSONString(result)); |
| | | } |
| | | } |
| | | |
| | | } |
New file |
| | |
| | | package com.ruoyi.common.core.utils; |
| | | |
| | | import java.util.Map; |
| | | import com.ruoyi.common.core.constant.SecurityConstants; |
| | | import com.ruoyi.common.core.constant.TokenConstants; |
| | | import com.ruoyi.common.core.text.Convert; |
| | | import io.jsonwebtoken.Claims; |
| | | import io.jsonwebtoken.Jwts; |
| | | import io.jsonwebtoken.SignatureAlgorithm; |
| | | |
| | | /** |
| | | * Jwt工具类 |
| | | * |
| | | * @author ruoyi |
| | | */ |
| | | public class JwtUtils |
| | | { |
| | | public static String secret = TokenConstants.SECRET; |
| | | |
| | | /** |
| | | * 从数据声明生成令牌 |
| | | * |
| | | * @param claims 数据声明 |
| | | * @return 令牌 |
| | | */ |
| | | public static String createToken(Map<String, Object> claims) |
| | | { |
| | | String token = Jwts.builder().setClaims(claims).signWith(SignatureAlgorithm.HS512, secret).compact(); |
| | | return token; |
| | | } |
| | | |
| | | /** |
| | | * 从令牌中获取数据声明 |
| | | * |
| | | * @param token 令牌 |
| | | * @return 数据声明 |
| | | */ |
| | | public static Claims parseToken(String token) |
| | | { |
| | | return Jwts.parser().setSigningKey(secret).parseClaimsJws(token).getBody(); |
| | | } |
| | | |
| | | /** |
| | | * 根据令牌获取用户标识 |
| | | * |
| | | * @param token 令牌 |
| | | * @return 用户ID |
| | | */ |
| | | public static String getUserKey(String token) |
| | | { |
| | | Claims claims = parseToken(token); |
| | | return getValue(claims, SecurityConstants.USER_KEY); |
| | | } |
| | | |
| | | /** |
| | | * 根据令牌获取用户标识 |
| | | * |
| | | * @param claims 身份信息 |
| | | * @return 用户ID |
| | | */ |
| | | public static String getUserKey(Claims claims) |
| | | { |
| | | return getValue(claims, SecurityConstants.USER_KEY); |
| | | } |
| | | |
| | | /** |
| | | * 根据令牌获取用户ID |
| | | * |
| | | * @param token 令牌 |
| | | * @return 用户ID |
| | | */ |
| | | public static String getUserId(String token) |
| | | { |
| | | Claims claims = parseToken(token); |
| | | return getValue(claims, SecurityConstants.DETAILS_USER_ID); |
| | | } |
| | | |
| | | /** |
| | | * 根据身份信息获取用户ID |
| | | * |
| | | * @param claims 身份信息 |
| | | * @return 用户ID |
| | | */ |
| | | public static String getUserId(Claims claims) |
| | | { |
| | | return getValue(claims, SecurityConstants.DETAILS_USER_ID); |
| | | } |
| | | |
| | | /** |
| | | * 根据令牌获取用户名 |
| | | * |
| | | * @param token 令牌 |
| | | * @return 用户名 |
| | | */ |
| | | public static String getUserName(String token) |
| | | { |
| | | Claims claims = parseToken(token); |
| | | return getValue(claims, SecurityConstants.DETAILS_USERNAME); |
| | | } |
| | | |
| | | /** |
| | | * 根据身份信息获取用户名 |
| | | * |
| | | * @param claims 身份信息 |
| | | * @return 用户名 |
| | | */ |
| | | public static String getUserName(Claims claims) |
| | | { |
| | | return getValue(claims, SecurityConstants.DETAILS_USERNAME); |
| | | } |
| | | |
| | | /** |
| | | * 根据身份信息获取键值 |
| | | * |
| | | * @param claims 身份信息 |
| | | * @param key 键 |
| | | * @return 值 |
| | | */ |
| | | public static String getValue(Claims claims, String key) |
| | | { |
| | | return Convert.toStr(claims.get(key), ""); |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.common.core.utils; |
| | | |
| | | import com.github.pagehelper.PageHelper; |
| | | import com.ruoyi.common.core.utils.sql.SqlUtil; |
| | | import com.ruoyi.common.core.web.page.PageDomain; |
| | | import com.ruoyi.common.core.web.page.TableSupport; |
| | | |
| | | /** |
| | | * 分页工具类 |
| | | * |
| | | * @author ruoyi |
| | | */ |
| | | public class PageUtils extends PageHelper |
| | | { |
| | | /** |
| | | * 设置请求分页数据 |
| | | */ |
| | | public static void startPage() |
| | | { |
| | | PageDomain pageDomain = TableSupport.buildPageRequest(); |
| | | Integer pageNum = pageDomain.getPageNum(); |
| | | Integer pageSize = pageDomain.getPageSize(); |
| | | String orderBy = SqlUtil.escapeOrderBySql(pageDomain.getOrderBy()); |
| | | Boolean reasonable = pageDomain.getReasonable(); |
| | | PageHelper.startPage(pageNum, pageSize, orderBy).setReasonable(reasonable); |
| | | } |
| | | |
| | | /** |
| | | * 清理分页的线程变量 |
| | | */ |
| | | public static void clearPage() |
| | | { |
| | | PageHelper.clearPage(); |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.common.core.utils; |
| | | |
| | | import java.io.IOException; |
| | | import java.io.UnsupportedEncodingException; |
| | | import java.net.URLDecoder; |
| | | import java.net.URLEncoder; |
| | | import java.util.Collections; |
| | | import java.util.Enumeration; |
| | | import java.util.HashMap; |
| | | import java.util.Map; |
| | | import javax.servlet.ServletRequest; |
| | | import javax.servlet.http.HttpServletRequest; |
| | | import javax.servlet.http.HttpServletResponse; |
| | | import javax.servlet.http.HttpSession; |
| | | import org.springframework.core.io.buffer.DataBuffer; |
| | | import org.springframework.http.HttpHeaders; |
| | | import org.springframework.http.HttpStatus; |
| | | import org.springframework.http.MediaType; |
| | | import org.springframework.http.server.reactive.ServerHttpResponse; |
| | | import org.springframework.util.LinkedCaseInsensitiveMap; |
| | | import org.springframework.web.context.request.RequestAttributes; |
| | | import org.springframework.web.context.request.RequestContextHolder; |
| | | import org.springframework.web.context.request.ServletRequestAttributes; |
| | | import com.alibaba.fastjson2.JSON; |
| | | import com.ruoyi.common.core.constant.Constants; |
| | | import com.ruoyi.common.core.domain.R; |
| | | import com.ruoyi.common.core.text.Convert; |
| | | import reactor.core.publisher.Mono; |
| | | |
| | | /** |
| | | * 客户端工具类 |
| | | * |
| | | * @author ruoyi |
| | | */ |
| | | public class ServletUtils |
| | | { |
| | | /** |
| | | * 获取String参数 |
| | | */ |
| | | public static String getParameter(String name) |
| | | { |
| | | return getRequest().getParameter(name); |
| | | } |
| | | |
| | | /** |
| | | * 获取String参数 |
| | | */ |
| | | public static String getParameter(String name, String defaultValue) |
| | | { |
| | | return Convert.toStr(getRequest().getParameter(name), defaultValue); |
| | | } |
| | | |
| | | /** |
| | | * 获取Integer参数 |
| | | */ |
| | | public static Integer getParameterToInt(String name) |
| | | { |
| | | return Convert.toInt(getRequest().getParameter(name)); |
| | | } |
| | | |
| | | /** |
| | | * 获取Integer参数 |
| | | */ |
| | | public static Integer getParameterToInt(String name, Integer defaultValue) |
| | | { |
| | | return Convert.toInt(getRequest().getParameter(name), defaultValue); |
| | | } |
| | | |
| | | /** |
| | | * 获取Boolean参数 |
| | | */ |
| | | public static Boolean getParameterToBool(String name) |
| | | { |
| | | return Convert.toBool(getRequest().getParameter(name)); |
| | | } |
| | | |
| | | /** |
| | | * 获取Boolean参数 |
| | | */ |
| | | public static Boolean getParameterToBool(String name, Boolean defaultValue) |
| | | { |
| | | return Convert.toBool(getRequest().getParameter(name), defaultValue); |
| | | } |
| | | |
| | | /** |
| | | * 获得所有请求参数 |
| | | * |
| | | * @param request 请求对象{@link ServletRequest} |
| | | * @return Map |
| | | */ |
| | | public static Map<String, String[]> getParams(ServletRequest request) |
| | | { |
| | | final Map<String, String[]> map = request.getParameterMap(); |
| | | return Collections.unmodifiableMap(map); |
| | | } |
| | | |
| | | /** |
| | | * 获得所有请求参数 |
| | | * |
| | | * @param request 请求对象{@link ServletRequest} |
| | | * @return Map |
| | | */ |
| | | public static Map<String, String> getParamMap(ServletRequest request) |
| | | { |
| | | Map<String, String> params = new HashMap<>(); |
| | | for (Map.Entry<String, String[]> entry : getParams(request).entrySet()) |
| | | { |
| | | params.put(entry.getKey(), StringUtils.join(entry.getValue(), ",")); |
| | | } |
| | | return params; |
| | | } |
| | | |
| | | /** |
| | | * 获取request |
| | | */ |
| | | public static HttpServletRequest getRequest() |
| | | { |
| | | try |
| | | { |
| | | return getRequestAttributes().getRequest(); |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | return null; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 获取response |
| | | */ |
| | | public static HttpServletResponse getResponse() |
| | | { |
| | | try |
| | | { |
| | | return getRequestAttributes().getResponse(); |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | return null; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 获取session |
| | | */ |
| | | public static HttpSession getSession() |
| | | { |
| | | return getRequest().getSession(); |
| | | } |
| | | |
| | | public static ServletRequestAttributes getRequestAttributes() |
| | | { |
| | | try |
| | | { |
| | | RequestAttributes attributes = RequestContextHolder.getRequestAttributes(); |
| | | return (ServletRequestAttributes) attributes; |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | return null; |
| | | } |
| | | } |
| | | |
| | | public static String getHeader(HttpServletRequest request, String name) |
| | | { |
| | | String value = request.getHeader(name); |
| | | if (StringUtils.isEmpty(value)) |
| | | { |
| | | return StringUtils.EMPTY; |
| | | } |
| | | return urlDecode(value); |
| | | } |
| | | |
| | | public static Map<String, String> getHeaders(HttpServletRequest request) |
| | | { |
| | | Map<String, String> map = new LinkedCaseInsensitiveMap<>(); |
| | | Enumeration<String> enumeration = request.getHeaderNames(); |
| | | if (enumeration != null) |
| | | { |
| | | while (enumeration.hasMoreElements()) |
| | | { |
| | | String key = enumeration.nextElement(); |
| | | String value = request.getHeader(key); |
| | | map.put(key, value); |
| | | } |
| | | } |
| | | return map; |
| | | } |
| | | |
| | | /** |
| | | * 将字符串渲染到客户端 |
| | | * |
| | | * @param response 渲染对象 |
| | | * @param string 待渲染的字符串 |
| | | */ |
| | | public static void renderString(HttpServletResponse response, String string) |
| | | { |
| | | try |
| | | { |
| | | response.setStatus(200); |
| | | response.setContentType("application/json"); |
| | | response.setCharacterEncoding("utf-8"); |
| | | response.getWriter().print(string); |
| | | } |
| | | catch (IOException e) |
| | | { |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 是否是Ajax异步请求 |
| | | * |
| | | * @param request |
| | | */ |
| | | public static boolean isAjaxRequest(HttpServletRequest request) |
| | | { |
| | | String accept = request.getHeader("accept"); |
| | | if (accept != null && accept.contains("application/json")) |
| | | { |
| | | return true; |
| | | } |
| | | |
| | | String xRequestedWith = request.getHeader("X-Requested-With"); |
| | | if (xRequestedWith != null && xRequestedWith.contains("XMLHttpRequest")) |
| | | { |
| | | return true; |
| | | } |
| | | |
| | | String uri = request.getRequestURI(); |
| | | if (StringUtils.inStringIgnoreCase(uri, ".json", ".xml")) |
| | | { |
| | | return true; |
| | | } |
| | | |
| | | String ajax = request.getParameter("__ajax"); |
| | | return StringUtils.inStringIgnoreCase(ajax, "json", "xml"); |
| | | } |
| | | |
| | | /** |
| | | * 内容编码 |
| | | * |
| | | * @param str 内容 |
| | | * @return 编码后的内容 |
| | | */ |
| | | public static String urlEncode(String str) |
| | | { |
| | | try |
| | | { |
| | | return URLEncoder.encode(str, Constants.UTF8); |
| | | } |
| | | catch (UnsupportedEncodingException e) |
| | | { |
| | | return StringUtils.EMPTY; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 内容解码 |
| | | * |
| | | * @param str 内容 |
| | | * @return 解码后的内容 |
| | | */ |
| | | public static String urlDecode(String str) |
| | | { |
| | | try |
| | | { |
| | | return URLDecoder.decode(str, Constants.UTF8); |
| | | } |
| | | catch (UnsupportedEncodingException e) |
| | | { |
| | | return StringUtils.EMPTY; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 设置webflux模型响应 |
| | | * |
| | | * @param response ServerHttpResponse |
| | | * @param value 响应内容 |
| | | * @return Mono<Void> |
| | | */ |
| | | public static Mono<Void> webFluxResponseWriter(ServerHttpResponse response, Object value) |
| | | { |
| | | return webFluxResponseWriter(response, HttpStatus.OK, value, R.FAIL); |
| | | } |
| | | |
| | | /** |
| | | * 设置webflux模型响应 |
| | | * |
| | | * @param response ServerHttpResponse |
| | | * @param code 响应状态码 |
| | | * @param value 响应内容 |
| | | * @return Mono<Void> |
| | | */ |
| | | public static Mono<Void> webFluxResponseWriter(ServerHttpResponse response, Object value, int code) |
| | | { |
| | | return webFluxResponseWriter(response, HttpStatus.OK, value, code); |
| | | } |
| | | |
| | | /** |
| | | * 设置webflux模型响应 |
| | | * |
| | | * @param response ServerHttpResponse |
| | | * @param status http状态码 |
| | | * @param code 响应状态码 |
| | | * @param value 响应内容 |
| | | * @return Mono<Void> |
| | | */ |
| | | public static Mono<Void> webFluxResponseWriter(ServerHttpResponse response, HttpStatus status, Object value, int code) |
| | | { |
| | | return webFluxResponseWriter(response, MediaType.APPLICATION_JSON_VALUE, status, value, code); |
| | | } |
| | | |
| | | /** |
| | | * 设置webflux模型响应 |
| | | * |
| | | * @param response ServerHttpResponse |
| | | * @param contentType content-type |
| | | * @param status http状态码 |
| | | * @param code 响应状态码 |
| | | * @param value 响应内容 |
| | | * @return Mono<Void> |
| | | */ |
| | | public static Mono<Void> webFluxResponseWriter(ServerHttpResponse response, String contentType, HttpStatus status, Object value, int code) |
| | | { |
| | | response.setStatusCode(status); |
| | | response.getHeaders().add(HttpHeaders.CONTENT_TYPE, contentType); |
| | | R<?> result = R.fail(code, value.toString()); |
| | | DataBuffer dataBuffer = response.bufferFactory().wrap(JSON.toJSONString(result).getBytes()); |
| | | return response.writeWith(Mono.just(dataBuffer)); |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.common.core.utils; |
| | | |
| | | import org.springframework.aop.framework.AopContext; |
| | | import org.springframework.beans.BeansException; |
| | | import org.springframework.beans.factory.NoSuchBeanDefinitionException; |
| | | import org.springframework.beans.factory.config.BeanFactoryPostProcessor; |
| | | import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; |
| | | import org.springframework.stereotype.Component; |
| | | |
| | | /** |
| | | * spring工具类 方便在非spring管理环境中获取bean |
| | | * |
| | | * @author ruoyi |
| | | */ |
| | | @Component |
| | | public final class SpringUtils implements BeanFactoryPostProcessor |
| | | { |
| | | /** Spring应用上下文环境 */ |
| | | private static ConfigurableListableBeanFactory beanFactory; |
| | | |
| | | @Override |
| | | public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException |
| | | { |
| | | SpringUtils.beanFactory = beanFactory; |
| | | } |
| | | |
| | | /** |
| | | * 获取对象 |
| | | * |
| | | * @param name |
| | | * @return Object 一个以所给名字注册的bean的实例 |
| | | * @throws org.springframework.beans.BeansException |
| | | * |
| | | */ |
| | | @SuppressWarnings("unchecked") |
| | | public static <T> T getBean(String name) throws BeansException |
| | | { |
| | | return (T) beanFactory.getBean(name); |
| | | } |
| | | |
| | | /** |
| | | * 获取类型为requiredType的对象 |
| | | * |
| | | * @param clz |
| | | * @return |
| | | * @throws org.springframework.beans.BeansException |
| | | * |
| | | */ |
| | | public static <T> T getBean(Class<T> clz) throws BeansException |
| | | { |
| | | T result = (T) beanFactory.getBean(clz); |
| | | return result; |
| | | } |
| | | |
| | | /** |
| | | * 如果BeanFactory包含一个与所给名称匹配的bean定义,则返回true |
| | | * |
| | | * @param name |
| | | * @return boolean |
| | | */ |
| | | public static boolean containsBean(String name) |
| | | { |
| | | return beanFactory.containsBean(name); |
| | | } |
| | | |
| | | /** |
| | | * 判断以给定名字注册的bean定义是一个singleton还是一个prototype。 如果与给定名字相应的bean定义没有被找到,将会抛出一个异常(NoSuchBeanDefinitionException) |
| | | * |
| | | * @param name |
| | | * @return boolean |
| | | * @throws org.springframework.beans.factory.NoSuchBeanDefinitionException |
| | | * |
| | | */ |
| | | public static boolean isSingleton(String name) throws NoSuchBeanDefinitionException |
| | | { |
| | | return beanFactory.isSingleton(name); |
| | | } |
| | | |
| | | /** |
| | | * @param name |
| | | * @return Class 注册对象的类型 |
| | | * @throws org.springframework.beans.factory.NoSuchBeanDefinitionException |
| | | * |
| | | */ |
| | | public static Class<?> getType(String name) throws NoSuchBeanDefinitionException |
| | | { |
| | | return beanFactory.getType(name); |
| | | } |
| | | |
| | | /** |
| | | * 如果给定的bean名字在bean定义中有别名,则返回这些别名 |
| | | * |
| | | * @param name |
| | | * @return |
| | | * @throws org.springframework.beans.factory.NoSuchBeanDefinitionException |
| | | * |
| | | */ |
| | | public static String[] getAliases(String name) throws NoSuchBeanDefinitionException |
| | | { |
| | | return beanFactory.getAliases(name); |
| | | } |
| | | |
| | | /** |
| | | * 获取aop代理对象 |
| | | * |
| | | * @param invoker |
| | | * @return |
| | | */ |
| | | @SuppressWarnings("unchecked") |
| | | public static <T> T getAopProxy(T invoker) |
| | | { |
| | | return (T) AopContext.currentProxy(); |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.common.core.utils; |
| | | |
| | | import java.util.Collection; |
| | | import java.util.List; |
| | | import java.util.Map; |
| | | import org.springframework.util.AntPathMatcher; |
| | | import com.ruoyi.common.core.constant.Constants; |
| | | import com.ruoyi.common.core.text.StrFormatter; |
| | | |
| | | /** |
| | | * 字符串工具类 |
| | | * |
| | | * @author ruoyi |
| | | */ |
| | | public class StringUtils extends org.apache.commons.lang3.StringUtils |
| | | { |
| | | /** 空字符串 */ |
| | | private static final String NULLSTR = ""; |
| | | |
| | | /** 下划线 */ |
| | | private static final char SEPARATOR = '_'; |
| | | |
| | | /** |
| | | * 获取参数不为空值 |
| | | * |
| | | * @param value defaultValue 要判断的value |
| | | * @return value 返回值 |
| | | */ |
| | | public static <T> T nvl(T value, T defaultValue) |
| | | { |
| | | return value != null ? value : defaultValue; |
| | | } |
| | | |
| | | /** |
| | | * * 判断一个Collection是否为空, 包含List,Set,Queue |
| | | * |
| | | * @param coll 要判断的Collection |
| | | * @return true:为空 false:非空 |
| | | */ |
| | | public static boolean isEmpty(Collection<?> coll) |
| | | { |
| | | return isNull(coll) || coll.isEmpty(); |
| | | } |
| | | |
| | | /** |
| | | * * 判断一个Collection是否非空,包含List,Set,Queue |
| | | * |
| | | * @param coll 要判断的Collection |
| | | * @return true:非空 false:空 |
| | | */ |
| | | public static boolean isNotEmpty(Collection<?> coll) |
| | | { |
| | | return !isEmpty(coll); |
| | | } |
| | | |
| | | /** |
| | | * * 判断一个对象数组是否为空 |
| | | * |
| | | * @param objects 要判断的对象数组 |
| | | ** @return true:为空 false:非空 |
| | | */ |
| | | public static boolean isEmpty(Object[] objects) |
| | | { |
| | | return isNull(objects) || (objects.length == 0); |
| | | } |
| | | |
| | | /** |
| | | * * 判断一个对象数组是否非空 |
| | | * |
| | | * @param objects 要判断的对象数组 |
| | | * @return true:非空 false:空 |
| | | */ |
| | | public static boolean isNotEmpty(Object[] objects) |
| | | { |
| | | return !isEmpty(objects); |
| | | } |
| | | |
| | | /** |
| | | * * 判断一个Map是否为空 |
| | | * |
| | | * @param map 要判断的Map |
| | | * @return true:为空 false:非空 |
| | | */ |
| | | public static boolean isEmpty(Map<?, ?> map) |
| | | { |
| | | return isNull(map) || map.isEmpty(); |
| | | } |
| | | |
| | | /** |
| | | * * 判断一个Map是否为空 |
| | | * |
| | | * @param map 要判断的Map |
| | | * @return true:非空 false:空 |
| | | */ |
| | | public static boolean isNotEmpty(Map<?, ?> map) |
| | | { |
| | | return !isEmpty(map); |
| | | } |
| | | |
| | | /** |
| | | * * 判断一个字符串是否为空串 |
| | | * |
| | | * @param str String |
| | | * @return true:为空 false:非空 |
| | | */ |
| | | public static boolean isEmpty(String str) |
| | | { |
| | | return isNull(str) || NULLSTR.equals(str.trim()); |
| | | } |
| | | |
| | | /** |
| | | * * 判断一个字符串是否为非空串 |
| | | * |
| | | * @param str String |
| | | * @return true:非空串 false:空串 |
| | | */ |
| | | public static boolean isNotEmpty(String str) |
| | | { |
| | | return !isEmpty(str); |
| | | } |
| | | |
| | | /** |
| | | * * 判断一个对象是否为空 |
| | | * |
| | | * @param object Object |
| | | * @return true:为空 false:非空 |
| | | */ |
| | | public static boolean isNull(Object object) |
| | | { |
| | | return object == null; |
| | | } |
| | | |
| | | /** |
| | | * * 判断一个对象是否非空 |
| | | * |
| | | * @param object Object |
| | | * @return true:非空 false:空 |
| | | */ |
| | | public static boolean isNotNull(Object object) |
| | | { |
| | | return !isNull(object); |
| | | } |
| | | |
| | | /** |
| | | * * 判断一个对象是否是数组类型(Java基本型别的数组) |
| | | * |
| | | * @param object 对象 |
| | | * @return true:是数组 false:不是数组 |
| | | */ |
| | | public static boolean isArray(Object object) |
| | | { |
| | | return isNotNull(object) && object.getClass().isArray(); |
| | | } |
| | | |
| | | /** |
| | | * 去空格 |
| | | */ |
| | | public static String trim(String str) |
| | | { |
| | | return (str == null ? "" : str.trim()); |
| | | } |
| | | |
| | | /** |
| | | * 截取字符串 |
| | | * |
| | | * @param str 字符串 |
| | | * @param start 开始 |
| | | * @return 结果 |
| | | */ |
| | | public static String substring(final String str, int start) |
| | | { |
| | | if (str == null) |
| | | { |
| | | return NULLSTR; |
| | | } |
| | | |
| | | if (start < 0) |
| | | { |
| | | start = str.length() + start; |
| | | } |
| | | |
| | | if (start < 0) |
| | | { |
| | | start = 0; |
| | | } |
| | | if (start > str.length()) |
| | | { |
| | | return NULLSTR; |
| | | } |
| | | |
| | | return str.substring(start); |
| | | } |
| | | |
| | | /** |
| | | * 截取字符串 |
| | | * |
| | | * @param str 字符串 |
| | | * @param start 开始 |
| | | * @param end 结束 |
| | | * @return 结果 |
| | | */ |
| | | public static String substring(final String str, int start, int end) |
| | | { |
| | | if (str == null) |
| | | { |
| | | return NULLSTR; |
| | | } |
| | | |
| | | if (end < 0) |
| | | { |
| | | end = str.length() + end; |
| | | } |
| | | if (start < 0) |
| | | { |
| | | start = str.length() + start; |
| | | } |
| | | |
| | | if (end > str.length()) |
| | | { |
| | | end = str.length(); |
| | | } |
| | | |
| | | if (start > end) |
| | | { |
| | | return NULLSTR; |
| | | } |
| | | |
| | | if (start < 0) |
| | | { |
| | | start = 0; |
| | | } |
| | | if (end < 0) |
| | | { |
| | | end = 0; |
| | | } |
| | | |
| | | return str.substring(start, end); |
| | | } |
| | | |
| | | /** |
| | | * 判断是否为空,并且不是空白字符 |
| | | * |
| | | * @param str 要判断的value |
| | | * @return 结果 |
| | | */ |
| | | public static boolean hasText(String str) |
| | | { |
| | | return (str != null && !str.isEmpty() && containsText(str)); |
| | | } |
| | | |
| | | private static boolean containsText(CharSequence str) |
| | | { |
| | | int strLen = str.length(); |
| | | for (int i = 0; i < strLen; i++) |
| | | { |
| | | if (!Character.isWhitespace(str.charAt(i))) |
| | | { |
| | | return true; |
| | | } |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | /** |
| | | * 格式化文本, {} 表示占位符<br> |
| | | * 此方法只是简单将占位符 {} 按照顺序替换为参数<br> |
| | | * 如果想输出 {} 使用 \\转义 { 即可,如果想输出 {} 之前的 \ 使用双转义符 \\\\ 即可<br> |
| | | * 例:<br> |
| | | * 通常使用:format("this is {} for {}", "a", "b") -> this is a for b<br> |
| | | * 转义{}: format("this is \\{} for {}", "a", "b") -> this is \{} for a<br> |
| | | * 转义\: format("this is \\\\{} for {}", "a", "b") -> this is \a for b<br> |
| | | * |
| | | * @param template 文本模板,被替换的部分用 {} 表示 |
| | | * @param params 参数值 |
| | | * @return 格式化后的文本 |
| | | */ |
| | | public static String format(String template, Object... params) |
| | | { |
| | | if (isEmpty(params) || isEmpty(template)) |
| | | { |
| | | return template; |
| | | } |
| | | return StrFormatter.format(template, params); |
| | | } |
| | | |
| | | /** |
| | | * 是否为http(s)://开头 |
| | | * |
| | | * @param link 链接 |
| | | * @return 结果 |
| | | */ |
| | | public static boolean ishttp(String link) |
| | | { |
| | | return StringUtils.startsWithAny(link, Constants.HTTP, Constants.HTTPS); |
| | | } |
| | | |
| | | /** |
| | | * 判断给定的collection列表中是否包含数组array 判断给定的数组array中是否包含给定的元素value |
| | | * |
| | | * @param collection 给定的集合 |
| | | * @param array 给定的数组 |
| | | * @return boolean 结果 |
| | | */ |
| | | public static boolean containsAny(Collection<String> collection, String... array) |
| | | { |
| | | if (isEmpty(collection) || isEmpty(array)) |
| | | { |
| | | return false; |
| | | } |
| | | else |
| | | { |
| | | for (String str : array) |
| | | { |
| | | if (collection.contains(str)) |
| | | { |
| | | return true; |
| | | } |
| | | } |
| | | return false; |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 驼峰转下划线命名 |
| | | */ |
| | | public static String toUnderScoreCase(String str) |
| | | { |
| | | if (str == null) |
| | | { |
| | | return null; |
| | | } |
| | | StringBuilder sb = new StringBuilder(); |
| | | // 前置字符是否大写 |
| | | boolean preCharIsUpperCase = true; |
| | | // 当前字符是否大写 |
| | | boolean curreCharIsUpperCase = true; |
| | | // 下一字符是否大写 |
| | | boolean nexteCharIsUpperCase = true; |
| | | for (int i = 0; i < str.length(); i++) |
| | | { |
| | | char c = str.charAt(i); |
| | | if (i > 0) |
| | | { |
| | | preCharIsUpperCase = Character.isUpperCase(str.charAt(i - 1)); |
| | | } |
| | | else |
| | | { |
| | | preCharIsUpperCase = false; |
| | | } |
| | | |
| | | curreCharIsUpperCase = Character.isUpperCase(c); |
| | | |
| | | if (i < (str.length() - 1)) |
| | | { |
| | | nexteCharIsUpperCase = Character.isUpperCase(str.charAt(i + 1)); |
| | | } |
| | | |
| | | if (preCharIsUpperCase && curreCharIsUpperCase && !nexteCharIsUpperCase) |
| | | { |
| | | sb.append(SEPARATOR); |
| | | } |
| | | else if ((i != 0 && !preCharIsUpperCase) && curreCharIsUpperCase) |
| | | { |
| | | sb.append(SEPARATOR); |
| | | } |
| | | sb.append(Character.toLowerCase(c)); |
| | | } |
| | | |
| | | return sb.toString(); |
| | | } |
| | | |
| | | /** |
| | | * 是否包含字符串 |
| | | * |
| | | * @param str 验证字符串 |
| | | * @param strs 字符串组 |
| | | * @return 包含返回true |
| | | */ |
| | | public static boolean inStringIgnoreCase(String str, String... strs) |
| | | { |
| | | if (str != null && strs != null) |
| | | { |
| | | for (String s : strs) |
| | | { |
| | | if (str.equalsIgnoreCase(trim(s))) |
| | | { |
| | | return true; |
| | | } |
| | | } |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | /** |
| | | * 将下划线大写方式命名的字符串转换为驼峰式。如果转换前的下划线大写方式命名的字符串为空,则返回空字符串。 例如:HELLO_WORLD->HelloWorld |
| | | * |
| | | * @param name 转换前的下划线大写方式命名的字符串 |
| | | * @return 转换后的驼峰式命名的字符串 |
| | | */ |
| | | public static String convertToCamelCase(String name) |
| | | { |
| | | StringBuilder result = new StringBuilder(); |
| | | // 快速检查 |
| | | if (name == null || name.isEmpty()) |
| | | { |
| | | // 没必要转换 |
| | | return ""; |
| | | } |
| | | else if (!name.contains("_")) |
| | | { |
| | | // 不含下划线,仅将首字母大写 |
| | | return name.substring(0, 1).toUpperCase() + name.substring(1); |
| | | } |
| | | // 用下划线将原始字符串分割 |
| | | String[] camels = name.split("_"); |
| | | for (String camel : camels) |
| | | { |
| | | // 跳过原始字符串中开头、结尾的下换线或双重下划线 |
| | | if (camel.isEmpty()) |
| | | { |
| | | continue; |
| | | } |
| | | // 首字母大写 |
| | | result.append(camel.substring(0, 1).toUpperCase()); |
| | | result.append(camel.substring(1).toLowerCase()); |
| | | } |
| | | return result.toString(); |
| | | } |
| | | |
| | | /** |
| | | * 驼峰式命名法 |
| | | * 例如:user_name->userName |
| | | */ |
| | | public static String toCamelCase(String s) |
| | | { |
| | | if (s == null) |
| | | { |
| | | return null; |
| | | } |
| | | if (s.indexOf(SEPARATOR) == -1) |
| | | { |
| | | return s; |
| | | } |
| | | s = s.toLowerCase(); |
| | | StringBuilder sb = new StringBuilder(s.length()); |
| | | boolean upperCase = false; |
| | | for (int i = 0; i < s.length(); i++) |
| | | { |
| | | char c = s.charAt(i); |
| | | |
| | | if (c == SEPARATOR) |
| | | { |
| | | upperCase = true; |
| | | } |
| | | else if (upperCase) |
| | | { |
| | | sb.append(Character.toUpperCase(c)); |
| | | upperCase = false; |
| | | } |
| | | else |
| | | { |
| | | sb.append(c); |
| | | } |
| | | } |
| | | return sb.toString(); |
| | | } |
| | | |
| | | /** |
| | | * 查找指定字符串是否匹配指定字符串列表中的任意一个字符串 |
| | | * |
| | | * @param str 指定字符串 |
| | | * @param strs 需要检查的字符串数组 |
| | | * @return 是否匹配 |
| | | */ |
| | | public static boolean matches(String str, List<String> strs) |
| | | { |
| | | if (isEmpty(str) || isEmpty(strs)) |
| | | { |
| | | return false; |
| | | } |
| | | for (String pattern : strs) |
| | | { |
| | | if (isMatch(pattern, str)) |
| | | { |
| | | return true; |
| | | } |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | /** |
| | | * 判断url是否与规则配置: |
| | | * ? 表示单个字符; |
| | | * * 表示一层路径内的任意字符串,不可跨层级; |
| | | * ** 表示任意层路径; |
| | | * |
| | | * @param pattern 匹配规则 |
| | | * @param url 需要匹配的url |
| | | * @return |
| | | */ |
| | | public static boolean isMatch(String pattern, String url) |
| | | { |
| | | AntPathMatcher matcher = new AntPathMatcher(); |
| | | return matcher.match(pattern, url); |
| | | } |
| | | |
| | | @SuppressWarnings("unchecked") |
| | | public static <T> T cast(Object obj) |
| | | { |
| | | return (T) obj; |
| | | } |
| | | |
| | | /** |
| | | * 数字左边补齐0,使之达到指定长度。注意,如果数字转换为字符串后,长度大于size,则只保留 最后size个字符。 |
| | | * |
| | | * @param num 数字对象 |
| | | * @param size 字符串指定长度 |
| | | * @return 返回数字的字符串格式,该字符串为指定长度。 |
| | | */ |
| | | public static final String padl(final Number num, final int size) |
| | | { |
| | | return padl(num.toString(), size, '0'); |
| | | } |
| | | |
| | | /** |
| | | * 字符串左补齐。如果原始字符串s长度大于size,则只保留最后size个字符。 |
| | | * |
| | | * @param s 原始字符串 |
| | | * @param size 字符串指定长度 |
| | | * @param c 用于补齐的字符 |
| | | * @return 返回指定长度的字符串,由原字符串左补齐或截取得到。 |
| | | */ |
| | | public static final String padl(final String s, final int size, final char c) |
| | | { |
| | | final StringBuilder sb = new StringBuilder(size); |
| | | if (s != null) |
| | | { |
| | | final int len = s.length(); |
| | | if (s.length() <= size) |
| | | { |
| | | for (int i = size - len; i > 0; i--) |
| | | { |
| | | sb.append(c); |
| | | } |
| | | sb.append(s); |
| | | } |
| | | else |
| | | { |
| | | return s.substring(len - size, len); |
| | | } |
| | | } |
| | | else |
| | | { |
| | | for (int i = size; i > 0; i--) |
| | | { |
| | | sb.append(c); |
| | | } |
| | | } |
| | | return sb.toString(); |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.common.core.utils; |
| | | |
| | | |
| | | import org.springframework.web.context.request.RequestContextHolder; |
| | | import org.springframework.web.context.request.ServletRequestAttributes; |
| | | |
| | | import javax.servlet.http.Cookie; |
| | | import javax.servlet.http.HttpServletRequest; |
| | | import javax.servlet.http.HttpServletResponse; |
| | | import javax.servlet.http.HttpSession; |
| | | import java.util.HashMap; |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * web工具类 |
| | | * |
| | | * @author liheng |
| | | */ |
| | | public final class WebUtils extends org.springframework.web.util.WebUtils { |
| | | |
| | | /** |
| | | * 当前请求 |
| | | */ |
| | | public static HttpServletRequest request() { |
| | | return contextHolder() == null ? null : contextHolder().getRequest(); |
| | | } |
| | | |
| | | /** |
| | | * 当前响应 |
| | | */ |
| | | public static HttpServletResponse response() { |
| | | return contextHolder() == null ? null : contextHolder().getResponse(); |
| | | } |
| | | |
| | | /** |
| | | * 当前session |
| | | */ |
| | | public static HttpSession session() { |
| | | return request() == null ? null : request().getSession(); |
| | | } |
| | | |
| | | /** |
| | | * 当前ServletRequest |
| | | */ |
| | | public static ServletRequestAttributes contextHolder() { |
| | | return (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); |
| | | } |
| | | |
| | | /** |
| | | * 判断请求是否为 AJAX |
| | | * |
| | | * @param request 当前请求 |
| | | */ |
| | | public static boolean isAjax(HttpServletRequest request) { |
| | | return "XMLHttpRequest".equals(request.getHeader("X-Requested-With")); |
| | | } |
| | | |
| | | /** |
| | | * 获取操作系统,浏览器及浏览器版本信息 |
| | | * |
| | | * @param request |
| | | * @return |
| | | */ |
| | | public static Map<String, String> getOsAndBrowserInfo(HttpServletRequest request) { |
| | | Map<String, String> map = new HashMap<>(2); |
| | | String browserDetails = request.getHeader("User-Agent"); |
| | | String userAgent = browserDetails; |
| | | String user = userAgent.toLowerCase(); |
| | | |
| | | String os = ""; |
| | | String browser = ""; |
| | | //=================OS Info======================= |
| | | if (userAgent.toLowerCase().contains("windows")) { |
| | | os = "Windows"; |
| | | } else if (userAgent.toLowerCase().contains("mac")) { |
| | | os = "Mac"; |
| | | } else if (userAgent.toLowerCase().contains("x11")) { |
| | | os = "Unix"; |
| | | } else if (userAgent.toLowerCase().contains("android")) { |
| | | os = "Android"; |
| | | } else if (userAgent.toLowerCase().contains("iphone")) { |
| | | os = "IPhone"; |
| | | } else { |
| | | os = "UnKnown, More-Info: " + userAgent; |
| | | } |
| | | //===============Browser=========================== |
| | | if (user.contains("edge")) { |
| | | browser = (userAgent.substring(userAgent.indexOf("Edge")).split(" ")[0]).replace("/", "-"); |
| | | } else if (user.contains("msie")) { |
| | | String substring = userAgent.substring(userAgent.indexOf("MSIE")).split(";")[0]; |
| | | browser = substring.split(" ")[0].replace("MSIE", "IE") + "-" + substring.split(" ")[1]; |
| | | } else if (user.contains("safari") && user.contains("version")) { |
| | | browser = (userAgent.substring(userAgent.indexOf("Safari")).split(" ")[0]).split("/")[0] |
| | | + "-" + (userAgent.substring(userAgent.indexOf("Version")).split(" ")[0]).split("/")[1]; |
| | | } else if (user.contains("opr") || user.contains("opera")) { |
| | | if (user.contains("opera")) { |
| | | browser = (userAgent.substring(userAgent.indexOf("Opera")).split(" ")[0]).split("/")[0] |
| | | + "-" + (userAgent.substring(userAgent.indexOf("Version")).split(" ")[0]).split("/")[1]; |
| | | } else if (user.contains("opr")) { |
| | | browser = ((userAgent.substring(userAgent.indexOf("OPR")).split(" ")[0]).replace("/", "-")) |
| | | .replace("OPR", "Opera"); |
| | | } |
| | | } else if (user.contains("chrome")) { |
| | | browser = (userAgent.substring(userAgent.indexOf("Chrome")).split(" ")[0]).replace("/", "-"); |
| | | } else if ((user.contains("mozilla/7.0")) || (user.contains("netscape6")) || |
| | | (user.contains("mozilla/4.7")) || (user.contains("mozilla/4.78")) || |
| | | (user.contains("mozilla/4.08")) || (user.contains("mozilla/3"))) { |
| | | browser = "Netscape-?"; |
| | | } else if (user.contains("firefox")) { |
| | | browser = (userAgent.substring(userAgent.indexOf("Firefox")).split(" ")[0]).replace("/", "-"); |
| | | } else if (user.contains("rv")) { |
| | | String IEVersion = (userAgent.substring(userAgent.indexOf("rv")).split(" ")[0]).replace("rv:", "-"); |
| | | browser = "IE" + IEVersion.substring(0, IEVersion.length() - 1); |
| | | } else { |
| | | browser = "UnKnown, More-Info: " + userAgent; |
| | | } |
| | | map.put("os", os); |
| | | map.put("browser", browser); |
| | | return map; |
| | | } |
| | | |
| | | /** |
| | | * 读取cookie |
| | | * |
| | | * @param name cookie name |
| | | * @return cookie value |
| | | */ |
| | | public String getCookieVal(String name) { |
| | | return getCookieVal(request(), name); |
| | | } |
| | | |
| | | /** |
| | | * 读取cookie |
| | | * |
| | | * @param request HttpServletRequest |
| | | * @param name cookie name |
| | | * @return cookie value |
| | | */ |
| | | public String getCookieVal(HttpServletRequest request, String name) { |
| | | Cookie cookie = getCookie(request, name); |
| | | return cookie != null ? cookie.getValue() : null; |
| | | } |
| | | |
| | | /** |
| | | * 清除 某个指定的cookie |
| | | * |
| | | * @param response HttpServletResponse |
| | | * @param key cookie key |
| | | */ |
| | | public void removeCookie(HttpServletResponse response, String key) { |
| | | setCookie(response, key, null, 0); |
| | | } |
| | | |
| | | /** |
| | | * 设置cookie |
| | | * |
| | | * @param response HttpServletResponse |
| | | * @param name cookie name |
| | | * @param value cookie value |
| | | * @param maxAgeInSeconds maxage |
| | | */ |
| | | public void setCookie(HttpServletResponse response, String name, String value, int maxAgeInSeconds) { |
| | | Cookie cookie = new Cookie(name, value); |
| | | cookie.setPath("/"); |
| | | cookie.setMaxAge(maxAgeInSeconds); |
| | | //cookie.setHttpOnly(true); |
| | | response.addCookie(cookie); |
| | | } |
| | | } |
New file |
| | |
| | | package com.ruoyi.common.core.utils.bean; |
| | | |
| | | import java.lang.reflect.Method; |
| | | import java.util.ArrayList; |
| | | import java.util.List; |
| | | import java.util.regex.Matcher; |
| | | import java.util.regex.Pattern; |
| | | |
| | | /** |
| | | * Bean 工具类 |
| | | * |
| | | * @author ruoyi |
| | | */ |
| | | public class BeanUtils extends org.springframework.beans.BeanUtils |
| | | { |
| | | /** Bean方法名中属性名开始的下标 */ |
| | | private static final int BEAN_METHOD_PROP_INDEX = 3; |
| | | |
| | | /** * 匹配getter方法的正则表达式 */ |
| | | private static final Pattern GET_PATTERN = Pattern.compile("get(\\p{javaUpperCase}\\w*)"); |
| | | |
| | | /** * 匹配setter方法的正则表达式 */ |
| | | private static final Pattern SET_PATTERN = Pattern.compile("set(\\p{javaUpperCase}\\w*)"); |
| | | |
| | | /** |
| | | * Bean属性复制工具方法。 |
| | | * |
| | | * @param dest 目标对象 |
| | | * @param src 源对象 |
| | | */ |
| | | public static void copyBeanProp(Object dest, Object src) |
| | | { |
| | | try |
| | | { |
| | | copyProperties(src, dest); |
| | | } |
| | | catch (Exception e) |
| | | { |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 获取对象的setter方法。 |
| | | * |
| | | * @param obj 对象 |
| | | * @return 对象的setter方法列表 |
| | | */ |
| | | public static List<Method> getSetterMethods(Object obj) |
| | | { |
| | | // setter方法列表 |
| | | List<Method> setterMethods = new ArrayList<Method>(); |
| | | |
| | | // 获取所有方法 |
| | | Method[] methods = obj.getClass().getMethods(); |
| | | |
| | | // 查找setter方法 |
| | | |
| | | for (Method method : methods) |
| | | { |
| | | Matcher m = SET_PATTERN.matcher(method.getName()); |
| | | if (m.matches() && (method.getParameterTypes().length == 1)) |
| | | { |
| | | setterMethods.add(method); |
| | | } |
| | | } |
| | | // 返回setter方法列表 |
| | | return setterMethods; |
| | | } |
| | | |
| | | /** |
| | | * 获取对象的getter方法。 |
| | | * |
| | | * @param obj 对象 |
| | | * @return 对象的getter方法列表 |
| | | */ |
| | | |
| | | public static List<Method> getGetterMethods(Object obj) |
| | | { |
| | | // getter方法列表 |
| | | List<Method> getterMethods = new ArrayList<Method>(); |
| | | // 获取所有方法 |
| | | Method[] methods = obj.getClass().getMethods(); |
| | | // 查找getter方法 |
| | | for (Method method : methods) |
| | | { |
| | | Matcher m = GET_PATTERN.matcher(method.getName()); |
| | | if (m.matches() && (method.getParameterTypes().length == 0)) |
| | | { |
| | | getterMethods.add(method); |
| | | } |
| | | } |
| | | // 返回getter方法列表 |
| | | return getterMethods; |
| | | } |
| | | |
| | | /** |
| | | * 检查Bean方法名中的属性名是否相等。<br> |
| | | * 如getName()和setName()属性名一样,getName()和setAge()属性名不一样。 |
| | | * |
| | | * @param m1 方法名1 |
| | | * @param m2 方法名2 |
| | | * @return 属性名一样返回true,否则返回false |
| | | */ |
| | | |
| | | public static boolean isMethodPropEquals(String m1, String m2) |
| | | { |
| | | return m1.substring(BEAN_METHOD_PROP_INDEX).equals(m2.substring(BEAN_METHOD_PROP_INDEX)); |
| | | } |
| | | } |
ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/bean/BeanValidators.java
ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/file/FileTypeUtils.java
ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/file/FileUtils.java
ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/file/ImageUtils.java
ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/file/MimeTypeUtils.java
ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/html/EscapeUtil.java
ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/html/HTMLFilter.java
ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/ip/IpUtils.java
ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/obs/OBSUtil.java
ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/poi/ExcelHandlerAdapter.java
ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/poi/ExcelUtil.java
ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/reflect/ReflectUtils.java
ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/sign/Base64.java
ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/sql/SqlUtil.java
ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/uuid/IdUtils.java
ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/uuid/Seq.java
ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/utils/uuid/UUID.java
ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/web/controller/BaseController.java
ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/web/domain/AjaxResult.java
ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/web/domain/BaseEntity.java
ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/web/domain/BaseModel.java
ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/web/domain/TreeEntity.java
ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/web/page/BasePage.java
ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/web/page/PageDomain.java
ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/web/page/PageInfo.java
ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/web/page/TableDataInfo.java
ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/web/page/TableSupport.java
ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/xss/Xss.java
ruoyi-common/ruoyi-common-core/src/main/java/com/ruoyi/common/core/xss/XssValidator.java
ruoyi-common/ruoyi-common-core/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
ruoyi-common/ruoyi-common-datascope/pom.xml
ruoyi-common/ruoyi-common-datascope/src/main/java/com/ruoyi/common/datascope/annotation/DataScope.java
ruoyi-common/ruoyi-common-datascope/src/main/java/com/ruoyi/common/datascope/aspect/DataScopeAspect.java
ruoyi-common/ruoyi-common-datascope/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
ruoyi-common/ruoyi-common-datasource/pom.xml
ruoyi-common/ruoyi-common-datasource/src/main/java/com/ruoyi/common/datasource/annotation/Master.java
ruoyi-common/ruoyi-common-datasource/src/main/java/com/ruoyi/common/datasource/annotation/Slave.java
ruoyi-common/ruoyi-common-log/pom.xml
ruoyi-common/ruoyi-common-log/src/main/java/com/ruoyi/common/log/annotation/Log.java
ruoyi-common/ruoyi-common-log/src/main/java/com/ruoyi/common/log/aspect/LogAspect.java
ruoyi-common/ruoyi-common-log/src/main/java/com/ruoyi/common/log/enums/BusinessStatus.java
ruoyi-common/ruoyi-common-log/src/main/java/com/ruoyi/common/log/enums/BusinessType.java
ruoyi-common/ruoyi-common-log/src/main/java/com/ruoyi/common/log/enums/OperatorType.java
ruoyi-common/ruoyi-common-log/src/main/java/com/ruoyi/common/log/filter/PropertyPreExcludeFilter.java
ruoyi-common/ruoyi-common-log/src/main/java/com/ruoyi/common/log/service/AsyncLogService.java
ruoyi-common/ruoyi-common-log/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
ruoyi-common/ruoyi-common-redis/pom.xml
ruoyi-common/ruoyi-common-redis/src/main/java/com/ruoyi/common/redis/configure/FastJson2JsonRedisSerializer.java
ruoyi-common/ruoyi-common-redis/src/main/java/com/ruoyi/common/redis/configure/RedisConfig.java
ruoyi-common/ruoyi-common-redis/src/main/java/com/ruoyi/common/redis/service/RedisService.java
ruoyi-common/ruoyi-common-redis/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
ruoyi-common/ruoyi-common-seata/pom.xml
ruoyi-common/ruoyi-common-security/pom.xml
ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/annotation/EnableCustomConfig.java
ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/annotation/EnableRyFeignClients.java
ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/annotation/InnerAuth.java
ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/annotation/Logical.java
ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/annotation/RequiresLogin.java
ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/annotation/RequiresPermissions.java
ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/annotation/RequiresRoles.java
ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/aspect/InnerAuthAspect.java
ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/aspect/PreAuthorizeAspect.java
ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/auth/AuthLogic.java
ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/auth/AuthUtil.java
ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/config/ApplicationConfig.java
ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/config/WebMvcConfig.java
ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/feign/FeignAutoConfiguration.java
ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/feign/FeignRequestInterceptor.java
ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/handler/GlobalExceptionHandler.java
ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/interceptor/HeaderInterceptor.java
ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/service/TokenService.java
ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/utils/DictUtils.java
ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/utils/SecurityUtils.java
ruoyi-common/ruoyi-common-security/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
ruoyi-common/ruoyi-common-swagger/pom.xml
ruoyi-common/ruoyi-common-swagger/src/main/java/com/ruoyi/common/swagger/annotation/EnableCustomSwagger2.java
ruoyi-common/ruoyi-common-swagger/src/main/java/com/ruoyi/common/swagger/config/SwaggerAutoConfiguration.java
ruoyi-common/ruoyi-common-swagger/src/main/java/com/ruoyi/common/swagger/config/SwaggerBeanPostProcessor.java
ruoyi-common/ruoyi-common-swagger/src/main/java/com/ruoyi/common/swagger/config/SwaggerProperties.java
ruoyi-common/ruoyi-common-swagger/src/main/java/com/ruoyi/common/swagger/config/SwaggerWebConfiguration.java
ruoyi-common/ruoyi-common-swagger/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports
ruoyi-gateway/pom.xml
ruoyi-gateway/src/main/java/com/ruoyi/gateway/RuoYiGatewayApplication.java
ruoyi-gateway/src/main/java/com/ruoyi/gateway/config/CaptchaConfig.java
ruoyi-gateway/src/main/java/com/ruoyi/gateway/config/GatewayConfig.java
ruoyi-gateway/src/main/java/com/ruoyi/gateway/config/KaptchaTextCreator.java
ruoyi-gateway/src/main/java/com/ruoyi/gateway/config/RouterFunctionConfiguration.java
ruoyi-gateway/src/main/java/com/ruoyi/gateway/config/SwaggerProvider.java
ruoyi-gateway/src/main/java/com/ruoyi/gateway/config/properties/CaptchaProperties.java
ruoyi-gateway/src/main/java/com/ruoyi/gateway/config/properties/IgnoreWhiteProperties.java
ruoyi-gateway/src/main/java/com/ruoyi/gateway/config/properties/XssProperties.java
ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/AuthFilter.java
ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/BlackListUrlFilter.java
ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/CacheRequestFilter.java
ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/ValidateCodeFilter.java
ruoyi-gateway/src/main/java/com/ruoyi/gateway/filter/XssFilter.java
ruoyi-gateway/src/main/java/com/ruoyi/gateway/handler/GatewayExceptionHandler.java
ruoyi-gateway/src/main/java/com/ruoyi/gateway/handler/SentinelFallbackHandler.java
ruoyi-gateway/src/main/java/com/ruoyi/gateway/handler/SwaggerHandler.java
ruoyi-gateway/src/main/java/com/ruoyi/gateway/handler/ValidateCodeHandler.java
ruoyi-gateway/src/main/java/com/ruoyi/gateway/service/ValidateCodeService.java
ruoyi-gateway/src/main/java/com/ruoyi/gateway/service/impl/ValidateCodeServiceImpl.java
ruoyi-gateway/src/main/resources/banner.txt
ruoyi-gateway/src/main/resources/logback.xml
ruoyi-modules/pom.xml
ruoyi-modules/ruoyi-file/pom.xml
ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/RuoYiFileApplication.java
ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/config/MinioConfig.java
ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/config/ResourcesConfig.java
ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/controller/SysFileController.java
ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/service/FastDfsSysFileServiceImpl.java
ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/service/ISysFileService.java
ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/service/LocalSysFileServiceImpl.java
ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/service/MinioSysFileServiceImpl.java
ruoyi-modules/ruoyi-file/src/main/java/com/ruoyi/file/utils/FileUploadUtils.java
ruoyi-modules/ruoyi-file/src/main/resources/banner.txt
ruoyi-modules/ruoyi-file/src/main/resources/logback.xml
ruoyi-modules/ruoyi-gen/pom.xml
ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/RuoYiGenApplication.java
ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/config/GenConfig.java
ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/controller/GenController.java
ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/domain/GenTable.java
ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/domain/GenTableColumn.java
ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/mapper/GenTableColumnMapper.java
ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/mapper/GenTableMapper.java
ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/service/GenTableColumnServiceImpl.java
ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/service/GenTableServiceImpl.java
ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/service/IGenTableColumnService.java
ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/service/IGenTableService.java
ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/util/GenUtils.java
ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/util/VelocityInitializer.java
ruoyi-modules/ruoyi-gen/src/main/java/com/ruoyi/gen/util/VelocityUtils.java
ruoyi-modules/ruoyi-gen/src/main/resources/banner.txt
ruoyi-modules/ruoyi-gen/src/main/resources/logback.xml
ruoyi-modules/ruoyi-gen/src/main/resources/mapper/generator/GenTableColumnMapper.xml
ruoyi-modules/ruoyi-gen/src/main/resources/mapper/generator/GenTableMapper.xml
ruoyi-modules/ruoyi-gen/src/main/resources/vm/java/controller.java.vm
ruoyi-modules/ruoyi-gen/src/main/resources/vm/java/domain.java.vm
ruoyi-modules/ruoyi-gen/src/main/resources/vm/java/mapper.java.vm
ruoyi-modules/ruoyi-gen/src/main/resources/vm/java/service.java.vm
ruoyi-modules/ruoyi-gen/src/main/resources/vm/java/serviceImpl.java.vm
ruoyi-modules/ruoyi-gen/src/main/resources/vm/java/sub-domain.java.vm
ruoyi-modules/ruoyi-gen/src/main/resources/vm/js/api.js.vm
ruoyi-modules/ruoyi-gen/src/main/resources/vm/sql/sql.vm
ruoyi-modules/ruoyi-gen/src/main/resources/vm/vue/index-tree.vue.vm
ruoyi-modules/ruoyi-gen/src/main/resources/vm/vue/index.vue.vm
ruoyi-modules/ruoyi-gen/src/main/resources/vm/vue/v3/index-tree.vue.vm
ruoyi-modules/ruoyi-gen/src/main/resources/vm/vue/v3/index.vue.vm
ruoyi-modules/ruoyi-gen/src/main/resources/vm/vue/v3/readme.txt
ruoyi-modules/ruoyi-gen/src/main/resources/vm/xml/mapper.xml.vm
ruoyi-modules/ruoyi-job/pom.xml
ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/RuoYiJobApplication.java
ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/config/ScheduleConfig.java
ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/controller/SysJobController.java
ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/controller/SysJobLogController.java
ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/domain/SysJob.java
ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/domain/SysJobLog.java
ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/mapper/SysJobLogMapper.java
ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/mapper/SysJobMapper.java
ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/service/ISysJobLogService.java
ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/service/ISysJobService.java
ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/service/SysJobLogServiceImpl.java
ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/service/SysJobServiceImpl.java
ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/task/RyTask.java
ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/util/AbstractQuartzJob.java
ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/util/CronUtils.java
ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/util/JobInvokeUtil.java
ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/util/QuartzDisallowConcurrentExecution.java
ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/util/QuartzJobExecution.java
ruoyi-modules/ruoyi-job/src/main/java/com/ruoyi/job/util/ScheduleUtils.java
ruoyi-modules/ruoyi-job/src/main/resources/banner.txt
ruoyi-modules/ruoyi-job/src/main/resources/logback.xml
ruoyi-modules/ruoyi-job/src/main/resources/mapper/job/SysJobLogMapper.xml
ruoyi-modules/ruoyi-job/src/main/resources/mapper/job/SysJobMapper.xml
ruoyi-modules/ruoyi-system/pom.xml
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/RuoYiSystemApplication.java
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysConfigController.java
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysDeptController.java
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysDictDataController.java
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysDictTypeController.java
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysLogininforController.java
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysMenuController.java
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysNoticeController.java
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysOperlogController.java
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysPostController.java
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysProfileController.java
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysRoleController.java
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserController.java
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserOnlineController.java
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/controller/SysUserRoleController.java
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysConfig.java
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysMenu.java
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysMenus.java
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysNotice.java
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysPost.java
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysRoleDept.java
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysRoleMenu.java
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysUserOnline.java
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysUserPost.java
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/SysUserRole.java
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/AddCompanyUserDto.java
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/IndexDto.java
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/RoleAddDto.java
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/dto/RoleUpdateDto.java
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/CompanyUserVo.java
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/MetaVo.java
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/RoleInfoVo.java
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/RouterVo.java
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/TCompanyToUserVo.java
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/TreeSelect.java
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/UserRoleVO.java
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/domain/vo/ViolationListExportVo.java
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysConfigMapper.java
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDeptMapper.java
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDictDataMapper.java
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysDictTypeMapper.java
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysLogininforMapper.java
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysMenuMapper.java
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysNoticeMapper.java
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysOperLogMapper.java
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysPostMapper.java
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleDeptMapper.java
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMapper.java
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysRoleMenuMapper.java
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserPostMapper.java
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserRoleMapper.java
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/query/SysOperLogQuery.java
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysConfigService.java
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDeptService.java
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDictDataService.java
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysDictTypeService.java
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysLogininforService.java
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysMenuService.java
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysNoticeService.java
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysOperLogService.java
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysPermissionService.java
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysPostService.java
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysRoleService.java
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserOnlineService.java
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserRoleService.java
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/ISysUserService.java
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysConfigServiceImpl.java
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDeptServiceImpl.java
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictDataServiceImpl.java
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysDictTypeServiceImpl.java
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysLogininforServiceImpl.java
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysMenuServiceImpl.java
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysNoticeServiceImpl.java
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysOperLogServiceImpl.java
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysPermissionServiceImpl.java
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysPostServiceImpl.java
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysRoleServiceImpl.java
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserOnlineServiceImpl.java
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserRoleServiceImpl.java
ruoyi-modules/ruoyi-system/src/main/java/com/ruoyi/system/service/impl/SysUserServiceImpl.java
ruoyi-modules/ruoyi-system/src/main/resources/banner.txt
ruoyi-modules/ruoyi-system/src/main/resources/logback.xml
ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysConfigMapper.xml
ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysDeptMapper.xml
ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysDictDataMapper.xml
ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysDictTypeMapper.xml
ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysLogininforMapper.xml
ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysMenuMapper.xml
ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysNoticeMapper.xml
ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysOperLogMapper.xml
ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysPostMapper.xml
ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysRoleDeptMapper.xml
ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysRoleMapper.xml
ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysRoleMenuMapper.xml
ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml
ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysUserPostMapper.xml
ruoyi-modules/ruoyi-system/src/main/resources/mapper/system/SysUserRoleMapper.xml
ruoyi-modules/ruoyi-system/src/main/resources/mybatis-config.xml
ruoyi-service/pom.xml
ruoyi-service/ruoyi-goods/.gitignore
ruoyi-service/ruoyi-goods/.mvn/wrapper/maven-wrapper.jar
ruoyi-service/ruoyi-goods/.mvn/wrapper/maven-wrapper.properties
ruoyi-service/ruoyi-goods/mvnw
ruoyi-service/ruoyi-goods/mvnw.cmd
ruoyi-service/ruoyi-goods/pom.xml
ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/RuoYiGoodsApplication.java
ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/config/DataUpdateHandlerConfig.java
ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/config/MybatisPlusConfig.java
ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/controller/TGoodsController.java
ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/TGoods.java
ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/TGoodsType.java
ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/domain/TOrder.java
ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/dto/GoodsTypeQuery.java
ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/dto/OrderQuery.java
ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/mapper/TGoodsMapper.java
ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/mapper/TGoodsTypeMapper.java
ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/mapper/TOrderMapper.java
ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/service/ITGoodsService.java
ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/service/ITGoodsTypeService.java
ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/service/ITOrderService.java
ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/TGoodsServiceImpl.java
ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/TGoodsTypeServiceImpl.java
ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/service/impl/TOrderServiceImpl.java
ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/utils/EasyPoiExcelStyleUtil.java
ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/utils/TaskUtil.java
ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/vo/TGoodsVO.java
ruoyi-service/ruoyi-goods/src/main/java/com/ruoyi/goods/vo/TOrderVO.java
ruoyi-service/ruoyi-goods/src/main/resources/mapper/goods/TGoodsMapper.xml
ruoyi-service/ruoyi-goods/src/main/resources/mapper/goods/TGoodsTypeMapper.xml
ruoyi-service/ruoyi-goods/src/main/resources/mapper/goods/TOrderMapper.xml
ruoyi-service/ruoyi-goods/src/main/resources/mybatis-config.xml
ruoyi-service/ruoyi-goods/src/test/java/com/ruoyi/management/RuoyiManagementApplicationTests.java
ruoyi-service/ruoyi-management/.gitignore
ruoyi-service/ruoyi-management/.mvn/wrapper/maven-wrapper.jar
ruoyi-service/ruoyi-management/.mvn/wrapper/maven-wrapper.properties
ruoyi-service/ruoyi-management/mvnw
ruoyi-service/ruoyi-management/mvnw.cmd
ruoyi-service/ruoyi-management/pom.xml
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/RuoYiManagementApplication.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/config/DataUpdateHandlerConfig.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/config/MybatisPlusConfig.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/controller/SysDeptController.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/controller/SysDictController.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/controller/SysDictDataController.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/controller/SysDictTypeController.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/controller/SysExpenseController.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/controller/SysJobController.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/controller/SysJobLogController.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/controller/SysLoginLogController.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/controller/SysLogininforController.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/controller/SysMenuController.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/controller/SysNoticeController.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/controller/SysOperationLogController.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/controller/SysPostController.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/controller/SysRelationController.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/controller/SysRoleController.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/controller/SysRoleDeptController.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/controller/SysRoleMenuController.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/controller/SysUserController.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/controller/SysUserPostController.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/controller/SysUserRoleController.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/controller/TFeedbackController.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/controller/TGoodsController.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/controller/TGoodsTypeController.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/controller/TOrderController.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/controller/TPageController.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/controller/TProtocolController.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/controller/TStudyController.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/controller/TSysSetController.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/controller/TUseGuideController.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/controller/TUserController.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/controller/TVipSetController.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/domain/SysDept.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/domain/SysDict.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/domain/SysDictData.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/domain/SysDictType.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/domain/SysExpense.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/domain/SysJob.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/domain/SysJobLog.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/domain/SysLoginLog.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/domain/SysLogininfor.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/domain/SysMenu.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/domain/SysNotice.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/domain/SysOperationLog.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/domain/SysPost.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/domain/SysRelation.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/domain/SysRole.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/domain/SysRoleDept.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/domain/SysRoleMenu.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/domain/SysUser.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/domain/SysUserPost.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/domain/SysUserRole.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/domain/TFeedback.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/domain/TPage.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/domain/TProtocol.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/domain/TSysSet.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/domain/TUseGuide.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/domain/TUser.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/domain/TVipOrder.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/domain/TVipSet.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/dto/AggrementDTO.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/dto/AppUserQuery.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/dto/DeptQuery.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/dto/FeedbackQuery.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/dto/OrderDTO.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/dto/OrderQuery.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/dto/UseGuidDTO.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/mapper/SysDeptMapper.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/mapper/SysDictDataMapper.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/mapper/SysDictMapper.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/mapper/SysDictTypeMapper.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/mapper/SysExpenseMapper.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/mapper/SysJobLogMapper.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/mapper/SysJobMapper.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/mapper/SysLoginLogMapper.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/mapper/SysLogininforMapper.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/mapper/SysMenuMapper.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/mapper/SysNoticeMapper.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/mapper/SysOperationLogMapper.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/mapper/SysPostMapper.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/mapper/SysRelationMapper.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/mapper/SysRoleDeptMapper.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/mapper/SysRoleMapper.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/mapper/SysRoleMenuMapper.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/mapper/SysUserMapper.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/mapper/SysUserPostMapper.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/mapper/SysUserRoleMapper.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/mapper/TFeedbackMapper.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/mapper/TGoodsMapper.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/mapper/TGoodsTypeMapper.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/mapper/TOrderMapper.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/mapper/TPageMapper.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/mapper/TProtocolMapper.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/mapper/TSysSetMapper.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/mapper/TUseGuideMapper.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/mapper/TUserMapper.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/mapper/TVipSetMapper.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/mapper/VipOrderMapper.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/service/ISysDeptService.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/service/ISysDictDataService.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/service/ISysDictService.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/service/ISysDictTypeService.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/service/ISysExpenseService.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/service/ISysJobLogService.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/service/ISysJobService.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/service/ISysLoginLogService.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/service/ISysLogininforService.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/service/ISysMenuService.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/service/ISysNoticeService.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/service/ISysOperationLogService.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/service/ISysPostService.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/service/ISysRelationService.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/service/ISysRoleDeptService.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/service/ISysRoleMenuService.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/service/ISysRoleService.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/service/ISysUserPostService.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/service/ISysUserRoleService.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/service/ISysUserService.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/service/ITFeedbackService.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/service/ITGoodsService.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/service/ITGoodsTypeService.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/service/ITOrderService.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/service/ITPageService.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/service/ITProtocolService.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/service/ITSysSetService.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/service/ITUseGuideService.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/service/ITUserService.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/service/ITVipSetService.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/service/IVipOrderService.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/service/impl/SysDeptServiceImpl.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/service/impl/SysDictDataServiceImpl.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/service/impl/SysDictServiceImpl.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/service/impl/SysDictTypeServiceImpl.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/service/impl/SysExpenseServiceImpl.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/service/impl/SysJobLogServiceImpl.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/service/impl/SysJobServiceImpl.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/service/impl/SysLoginLogServiceImpl.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/service/impl/SysLogininforServiceImpl.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/service/impl/SysMenuServiceImpl.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/service/impl/SysNoticeServiceImpl.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/service/impl/SysOperationLogServiceImpl.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/service/impl/SysPostServiceImpl.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/service/impl/SysRelationServiceImpl.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/service/impl/SysRoleDeptServiceImpl.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/service/impl/SysRoleMenuServiceImpl.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/service/impl/SysRoleServiceImpl.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/service/impl/SysUserPostServiceImpl.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/service/impl/SysUserRoleServiceImpl.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/service/impl/SysUserServiceImpl.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/service/impl/TFeedbackServiceImpl.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/service/impl/TGoodsServiceImpl.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/service/impl/TGoodsTypeServiceImpl.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/service/impl/TOrderServiceImpl.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/service/impl/TPageServiceImpl.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/service/impl/TProtocolServiceImpl.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/service/impl/TSysSetServiceImpl.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/service/impl/TUseGuideServiceImpl.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/service/impl/TUserServiceImpl.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/service/impl/TVipSetServiceImpl.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/service/impl/VipOrderServiceImpl.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/utils/EasyPoiExcelStyleUtil.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/utils/TaskUtil.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/vo/AppUserVO.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/vo/FeedbackVO.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/vo/PageVO.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/vo/SysSetVO.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/vo/TGoodsVO.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/vo/TOrderVO.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/vo/VipOrderVO.java
ruoyi-service/ruoyi-management/src/main/java/com/ruoyi/management/vo/VipSetVO.java
ruoyi-service/ruoyi-management/src/main/resources/mapper/management/src/main/resources/mapper/SysDeptMapper.xml
ruoyi-service/ruoyi-management/src/main/resources/mapper/management/src/main/resources/mapper/SysDictDataMapper.xml
ruoyi-service/ruoyi-management/src/main/resources/mapper/management/src/main/resources/mapper/SysDictMapper.xml
ruoyi-service/ruoyi-management/src/main/resources/mapper/management/src/main/resources/mapper/SysDictTypeMapper.xml
ruoyi-service/ruoyi-management/src/main/resources/mapper/management/src/main/resources/mapper/SysExpenseMapper.xml
ruoyi-service/ruoyi-management/src/main/resources/mapper/management/src/main/resources/mapper/SysJobLogMapper.xml
ruoyi-service/ruoyi-management/src/main/resources/mapper/management/src/main/resources/mapper/SysJobMapper.xml
ruoyi-service/ruoyi-management/src/main/resources/mapper/management/src/main/resources/mapper/SysLoginLogMapper.xml
ruoyi-service/ruoyi-management/src/main/resources/mapper/management/src/main/resources/mapper/SysLogininforMapper.xml
ruoyi-service/ruoyi-management/src/main/resources/mapper/management/src/main/resources/mapper/SysMenuMapper.xml
ruoyi-service/ruoyi-management/src/main/resources/mapper/management/src/main/resources/mapper/SysNoticeMapper.xml
ruoyi-service/ruoyi-management/src/main/resources/mapper/management/src/main/resources/mapper/SysOperationLogMapper.xml
ruoyi-service/ruoyi-management/src/main/resources/mapper/management/src/main/resources/mapper/SysPostMapper.xml
ruoyi-service/ruoyi-management/src/main/resources/mapper/management/src/main/resources/mapper/SysRelationMapper.xml
ruoyi-service/ruoyi-management/src/main/resources/mapper/management/src/main/resources/mapper/SysRoleDeptMapper.xml
ruoyi-service/ruoyi-management/src/main/resources/mapper/management/src/main/resources/mapper/SysRoleMapper.xml
ruoyi-service/ruoyi-management/src/main/resources/mapper/management/src/main/resources/mapper/SysRoleMenuMapper.xml
ruoyi-service/ruoyi-management/src/main/resources/mapper/management/src/main/resources/mapper/SysUserMapper.xml
ruoyi-service/ruoyi-management/src/main/resources/mapper/management/src/main/resources/mapper/SysUserPostMapper.xml
ruoyi-service/ruoyi-management/src/main/resources/mapper/management/src/main/resources/mapper/SysUserRoleMapper.xml
ruoyi-service/ruoyi-management/src/main/resources/mapper/management/src/main/resources/mapper/TFeedbackMapper.xml
ruoyi-service/ruoyi-management/src/main/resources/mapper/management/src/main/resources/mapper/TGoodsMapper.xml
ruoyi-service/ruoyi-management/src/main/resources/mapper/management/src/main/resources/mapper/TGoodsTypeMapper.xml
ruoyi-service/ruoyi-management/src/main/resources/mapper/management/src/main/resources/mapper/TOrderMapper.xml
ruoyi-service/ruoyi-management/src/main/resources/mapper/management/src/main/resources/mapper/TPageMapper.xml
ruoyi-service/ruoyi-management/src/main/resources/mapper/management/src/main/resources/mapper/TProtocolMapper.xml
ruoyi-service/ruoyi-management/src/main/resources/mapper/management/src/main/resources/mapper/TSysSetMapper.xml
ruoyi-service/ruoyi-management/src/main/resources/mapper/management/src/main/resources/mapper/TUseGuideMapper.xml
ruoyi-service/ruoyi-management/src/main/resources/mapper/management/src/main/resources/mapper/TUserMapper.xml
ruoyi-service/ruoyi-management/src/main/resources/mapper/management/src/main/resources/mapper/TVipSetMapper.xml
ruoyi-service/ruoyi-management/src/main/resources/mapper/management/src/main/resources/mapper/VipOrderMapper.xml
ruoyi-service/ruoyi-management/src/main/resources/mybatis-config.xml
ruoyi-service/ruoyi-management/src/test/java/com/ruoyi/management/RuoyiManagementApplicationTests.java
ruoyi-service/ruoyi-parent/.gitignore
ruoyi-service/ruoyi-parent/.mvn/wrapper/maven-wrapper.jar
ruoyi-service/ruoyi-parent/.mvn/wrapper/maven-wrapper.properties
ruoyi-service/ruoyi-parent/mvnw
ruoyi-service/ruoyi-parent/mvnw.cmd
ruoyi-service/ruoyi-parent/pom.xml
ruoyi-service/ruoyi-parent/src/main/java/com/ruoyi/parent/RuoYiParentApplication.java
ruoyi-service/ruoyi-parent/src/main/java/com/ruoyi/parent/config/DataUpdateHandlerConfig.java
ruoyi-service/ruoyi-parent/src/main/java/com/ruoyi/parent/config/MybatisPlusConfig.java
ruoyi-service/ruoyi-parent/src/main/java/com/ruoyi/parent/utils/EasyPoiExcelStyleUtil.java
ruoyi-service/ruoyi-parent/src/main/java/com/ruoyi/parent/utils/TaskUtil.java
ruoyi-service/ruoyi-parent/src/main/resources/mybatis-config.xml
ruoyi-service/ruoyi-parent/src/test/java/com/ruoyi/management/RuoyiManagementApplicationTests.java
ruoyi-service/ruoyi-study/.gitignore
ruoyi-service/ruoyi-study/.mvn/wrapper/maven-wrapper.jar
ruoyi-service/ruoyi-study/.mvn/wrapper/maven-wrapper.properties
ruoyi-service/ruoyi-study/mvnw
ruoyi-service/ruoyi-study/mvnw.cmd
ruoyi-service/ruoyi-study/pom.xml
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/RuoYiStudyApplication.java
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/config/DataUpdateHandlerConfig.java
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/config/MybatisPlusConfig.java
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/controller/TGameController.java
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/controller/TStoryController.java
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/controller/TStoryListenController.java
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/controller/TStudyController.java
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/controller/TStudyTypeController.java
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/controller/TSubjectController.java
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/domain/TGame.java
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/domain/TStory.java
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/domain/TStoryListen.java
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/domain/TStudy.java
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/domain/TStudyAnswer.java
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/domain/TStudyInduction.java
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/domain/TStudyListen.java
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/domain/TStudyLook.java
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/domain/TStudyPair.java
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/domain/TStudyType.java
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/domain/TSubject.java
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/dto/AddStudySetDTO.java
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/dto/AddWeekDTO.java
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/dto/ChoiceStory.java
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/dto/ChoiceSubject.java
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/dto/GameDTO.java
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/dto/StoryDTO.java
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/dto/StoryListenDTO.java
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/dto/StudyAnswerDTO.java
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/dto/StudyDTO.java
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/dto/StudyInductionDTO.java
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/dto/StudyListenDTO.java
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/dto/StudyLookDTO.java
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/dto/StudyPairDTO.java
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/dto/SubjectDTO.java
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/dto/SubjectQuery.java
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/mapper/TGameMapper.java
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/mapper/TStoryListenMapper.java
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/mapper/TStoryMapper.java
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/mapper/TStudyAnswerMapper.java
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/mapper/TStudyInductionMapper.java
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/mapper/TStudyListenMapper.java
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/mapper/TStudyLookMapper.java
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/mapper/TStudyMapper.java
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/mapper/TStudyPairMapper.java
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/mapper/TStudyTypeMapper.java
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/mapper/TSubjectMapper.java
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/ITGameService.java
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/ITStoryListenService.java
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/ITStoryService.java
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/ITStudyAnswerService.java
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/ITStudyInductionService.java
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/ITStudyListenService.java
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/ITStudyLookService.java
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/ITStudyPairService.java
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/ITStudyService.java
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/ITStudyTypeService.java
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/ITSubjectService.java
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/TGameServiceImpl.java
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/TStoryListenServiceImpl.java
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/TStoryServiceImpl.java
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/TStudyAnswerServiceImpl.java
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/TStudyInductionServiceImpl.java
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/TStudyListenServiceImpl.java
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/TStudyLookServiceImpl.java
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/TStudyPairServiceImpl.java
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/TStudyServiceImpl.java
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/TStudyTypeServiceImpl.java
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/service/impl/TSubjectServiceImpl.java
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/utils/EasyPoiExcelStyleUtil.java
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/utils/TaskUtil.java
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/vo/GameVO.java
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/vo/StoryVO.java
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/vo/StudyAnswerVO.java
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/vo/StudyInductionVO.java
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/vo/StudyListVO.java
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/vo/StudyListenVO.java
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/vo/StudyLookVO.java
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/vo/StudyPairVO.java
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/vo/StudyVO.java
ruoyi-service/ruoyi-study/src/main/java/com/ruoyi/study/vo/SubjectVO.java
ruoyi-service/ruoyi-study/src/main/resources/mapper/sutdy/TGameMapper.xml
ruoyi-service/ruoyi-study/src/main/resources/mapper/sutdy/TStoryListenMapper.xml
ruoyi-service/ruoyi-study/src/main/resources/mapper/sutdy/TStoryMapper.xml
ruoyi-service/ruoyi-study/src/main/resources/mapper/sutdy/TStudyAnswerMapper.xml
ruoyi-service/ruoyi-study/src/main/resources/mapper/sutdy/TStudyInductionMapper.xml
ruoyi-service/ruoyi-study/src/main/resources/mapper/sutdy/TStudyListenMapper.xml
ruoyi-service/ruoyi-study/src/main/resources/mapper/sutdy/TStudyLookMapper.xml
ruoyi-service/ruoyi-study/src/main/resources/mapper/sutdy/TStudyMapper.xml
ruoyi-service/ruoyi-study/src/main/resources/mapper/sutdy/TStudyPairMapper.xml
ruoyi-service/ruoyi-study/src/main/resources/mapper/sutdy/TStudyTypeMapper.xml
ruoyi-service/ruoyi-study/src/main/resources/mapper/sutdy/TSubjectMapper.xml
ruoyi-service/ruoyi-study/src/main/resources/mybatis-config.xml
ruoyi-service/ruoyi-study/src/test/java/com/ruoyi/management/RuoyiManagementApplicationTests.java
ruoyi-ui/.editorconfig
ruoyi-ui/.env.development
ruoyi-ui/.env.production
ruoyi-ui/.env.staging
ruoyi-ui/.eslintignore
ruoyi-ui/.eslintrc.js
ruoyi-ui/.gitignore
ruoyi-ui/README.md
ruoyi-ui/babel.config.js
ruoyi-ui/bin/build.bat
ruoyi-ui/bin/package.bat
ruoyi-ui/bin/run-web.bat
ruoyi-ui/build/index.js
ruoyi-ui/package.json
ruoyi-ui/public/favicon.ico
ruoyi-ui/public/html/ie.html
ruoyi-ui/public/index.html
ruoyi-ui/public/robots.txt
ruoyi-ui/src/App.vue
ruoyi-ui/src/api/login.js
ruoyi-ui/src/api/menu.js
ruoyi-ui/src/api/monitor/job.js
ruoyi-ui/src/api/monitor/jobLog.js
ruoyi-ui/src/api/monitor/online.js
ruoyi-ui/src/api/system/config.js
ruoyi-ui/src/api/system/dept.js
ruoyi-ui/src/api/system/dict/data.js
ruoyi-ui/src/api/system/dict/type.js
ruoyi-ui/src/api/system/logininfor.js
ruoyi-ui/src/api/system/menu.js
ruoyi-ui/src/api/system/notice.js
ruoyi-ui/src/api/system/operlog.js
ruoyi-ui/src/api/system/post.js
ruoyi-ui/src/api/system/role.js
ruoyi-ui/src/api/system/user.js
ruoyi-ui/src/api/tool/gen.js
ruoyi-ui/src/assets/401_images/401.gif
ruoyi-ui/src/assets/404_images/404.png
ruoyi-ui/src/assets/404_images/404_cloud.png
ruoyi-ui/src/assets/icons/index.js
ruoyi-ui/src/assets/icons/svg/404.svg
ruoyi-ui/src/assets/icons/svg/bug.svg
ruoyi-ui/src/assets/icons/svg/build.svg
ruoyi-ui/src/assets/icons/svg/button.svg
ruoyi-ui/src/assets/icons/svg/cascader.svg
ruoyi-ui/src/assets/icons/svg/chart.svg
ruoyi-ui/src/assets/icons/svg/checkbox.svg
ruoyi-ui/src/assets/icons/svg/client.svg
ruoyi-ui/src/assets/icons/svg/clipboard.svg
ruoyi-ui/src/assets/icons/svg/code.svg
ruoyi-ui/src/assets/icons/svg/color.svg
ruoyi-ui/src/assets/icons/svg/component.svg
ruoyi-ui/src/assets/icons/svg/dashboard.svg
ruoyi-ui/src/assets/icons/svg/date-range.svg
ruoyi-ui/src/assets/icons/svg/date.svg
ruoyi-ui/src/assets/icons/svg/dict.svg
ruoyi-ui/src/assets/icons/svg/documentation.svg
ruoyi-ui/src/assets/icons/svg/download.svg
ruoyi-ui/src/assets/icons/svg/drag.svg
ruoyi-ui/src/assets/icons/svg/druid.svg
ruoyi-ui/src/assets/icons/svg/edit.svg
ruoyi-ui/src/assets/icons/svg/education.svg
ruoyi-ui/src/assets/icons/svg/email.svg
ruoyi-ui/src/assets/icons/svg/example.svg
ruoyi-ui/src/assets/icons/svg/excel.svg
ruoyi-ui/src/assets/icons/svg/exit-fullscreen.svg
ruoyi-ui/src/assets/icons/svg/eye-open.svg
ruoyi-ui/src/assets/icons/svg/eye.svg
ruoyi-ui/src/assets/icons/svg/form.svg
ruoyi-ui/src/assets/icons/svg/fullscreen.svg
ruoyi-ui/src/assets/icons/svg/github.svg
ruoyi-ui/src/assets/icons/svg/guide.svg
ruoyi-ui/src/assets/icons/svg/icon.svg
ruoyi-ui/src/assets/icons/svg/input.svg
ruoyi-ui/src/assets/icons/svg/international.svg
ruoyi-ui/src/assets/icons/svg/job.svg
ruoyi-ui/src/assets/icons/svg/language.svg
ruoyi-ui/src/assets/icons/svg/link.svg
ruoyi-ui/src/assets/icons/svg/list.svg
ruoyi-ui/src/assets/icons/svg/lock.svg
ruoyi-ui/src/assets/icons/svg/log.svg
ruoyi-ui/src/assets/icons/svg/logininfor.svg
ruoyi-ui/src/assets/icons/svg/message.svg
ruoyi-ui/src/assets/icons/svg/money.svg
ruoyi-ui/src/assets/icons/svg/monitor.svg
ruoyi-ui/src/assets/icons/svg/nacos.svg
ruoyi-ui/src/assets/icons/svg/nested.svg
ruoyi-ui/src/assets/icons/svg/number.svg
ruoyi-ui/src/assets/icons/svg/online.svg
ruoyi-ui/src/assets/icons/svg/password.svg
ruoyi-ui/src/assets/icons/svg/pdf.svg
ruoyi-ui/src/assets/icons/svg/people.svg
ruoyi-ui/src/assets/icons/svg/peoples.svg
ruoyi-ui/src/assets/icons/svg/phone.svg
ruoyi-ui/src/assets/icons/svg/post.svg
ruoyi-ui/src/assets/icons/svg/qq.svg
ruoyi-ui/src/assets/icons/svg/question.svg
ruoyi-ui/src/assets/icons/svg/radio.svg
ruoyi-ui/src/assets/icons/svg/rate.svg
ruoyi-ui/src/assets/icons/svg/row.svg
ruoyi-ui/src/assets/icons/svg/search.svg
ruoyi-ui/src/assets/icons/svg/select.svg
ruoyi-ui/src/assets/icons/svg/sentinel.svg
ruoyi-ui/src/assets/icons/svg/server.svg
ruoyi-ui/src/assets/icons/svg/shopping.svg
ruoyi-ui/src/assets/icons/svg/size.svg
ruoyi-ui/src/assets/icons/svg/skill.svg
ruoyi-ui/src/assets/icons/svg/slider.svg
ruoyi-ui/src/assets/icons/svg/star.svg
ruoyi-ui/src/assets/icons/svg/swagger.svg
ruoyi-ui/src/assets/icons/svg/switch.svg
ruoyi-ui/src/assets/icons/svg/system.svg
ruoyi-ui/src/assets/icons/svg/tab.svg
ruoyi-ui/src/assets/icons/svg/table.svg
ruoyi-ui/src/assets/icons/svg/textarea.svg
ruoyi-ui/src/assets/icons/svg/theme.svg
ruoyi-ui/src/assets/icons/svg/time-range.svg
ruoyi-ui/src/assets/icons/svg/time.svg
ruoyi-ui/src/assets/icons/svg/tool.svg
ruoyi-ui/src/assets/icons/svg/tree-table.svg
ruoyi-ui/src/assets/icons/svg/tree.svg
ruoyi-ui/src/assets/icons/svg/upload.svg
ruoyi-ui/src/assets/icons/svg/user.svg
ruoyi-ui/src/assets/icons/svg/validCode.svg
ruoyi-ui/src/assets/icons/svg/wechat.svg
ruoyi-ui/src/assets/icons/svg/zip.svg
ruoyi-ui/src/assets/images/dark.svg
ruoyi-ui/src/assets/images/light.svg
ruoyi-ui/src/assets/images/login-background.jpg
ruoyi-ui/src/assets/images/profile.jpg
ruoyi-ui/src/assets/logo/logo.png
ruoyi-ui/src/assets/styles/btn.scss
ruoyi-ui/src/assets/styles/element-ui.scss
ruoyi-ui/src/assets/styles/element-variables.scss
ruoyi-ui/src/assets/styles/index.scss
ruoyi-ui/src/assets/styles/mixin.scss
ruoyi-ui/src/assets/styles/ruoyi.scss
ruoyi-ui/src/assets/styles/sidebar.scss
ruoyi-ui/src/assets/styles/transition.scss
ruoyi-ui/src/assets/styles/variables.scss
ruoyi-ui/src/components/Breadcrumb/index.vue
ruoyi-ui/src/components/Crontab/day.vue
ruoyi-ui/src/components/Crontab/hour.vue
ruoyi-ui/src/components/Crontab/index.vue
ruoyi-ui/src/components/Crontab/min.vue
ruoyi-ui/src/components/Crontab/month.vue
ruoyi-ui/src/components/Crontab/result.vue
ruoyi-ui/src/components/Crontab/second.vue
ruoyi-ui/src/components/Crontab/week.vue
ruoyi-ui/src/components/Crontab/year.vue
ruoyi-ui/src/components/DictData/index.js
ruoyi-ui/src/components/DictTag/index.vue
ruoyi-ui/src/components/Editor/index.vue
ruoyi-ui/src/components/FileUpload/index.vue
ruoyi-ui/src/components/Hamburger/index.vue
ruoyi-ui/src/components/HeaderSearch/index.vue
ruoyi-ui/src/components/IconSelect/index.vue
ruoyi-ui/src/components/IconSelect/requireIcons.js
ruoyi-ui/src/components/ImagePreview/index.vue
ruoyi-ui/src/components/ImageUpload/index.vue
ruoyi-ui/src/components/Pagination/index.vue
ruoyi-ui/src/components/PanThumb/index.vue
ruoyi-ui/src/components/ParentView/index.vue
ruoyi-ui/src/components/RightPanel/index.vue
ruoyi-ui/src/components/RightToolbar/index.vue
ruoyi-ui/src/components/RuoYi/Doc/index.vue
ruoyi-ui/src/components/RuoYi/Git/index.vue
ruoyi-ui/src/components/Screenfull/index.vue
ruoyi-ui/src/components/SizeSelect/index.vue
ruoyi-ui/src/components/SvgIcon/index.vue
ruoyi-ui/src/components/ThemePicker/index.vue
ruoyi-ui/src/components/TopNav/index.vue
ruoyi-ui/src/components/iFrame/index.vue
ruoyi-ui/src/directive/dialog/drag.js
ruoyi-ui/src/directive/dialog/dragHeight.js
ruoyi-ui/src/directive/dialog/dragWidth.js
ruoyi-ui/src/directive/index.js
ruoyi-ui/src/directive/module/clipboard.js
ruoyi-ui/src/directive/permission/hasPermi.js
ruoyi-ui/src/directive/permission/hasRole.js
ruoyi-ui/src/layout/components/AppMain.vue
ruoyi-ui/src/layout/components/IframeToggle/index.vue
ruoyi-ui/src/layout/components/InnerLink/index.vue
ruoyi-ui/src/layout/components/Navbar.vue
ruoyi-ui/src/layout/components/Settings/index.vue
ruoyi-ui/src/layout/components/Sidebar/FixiOSBug.js
ruoyi-ui/src/layout/components/Sidebar/Item.vue
ruoyi-ui/src/layout/components/Sidebar/Link.vue
ruoyi-ui/src/layout/components/Sidebar/Logo.vue
ruoyi-ui/src/layout/components/Sidebar/SidebarItem.vue
ruoyi-ui/src/layout/components/Sidebar/index.vue
ruoyi-ui/src/layout/components/TagsView/ScrollPane.vue
ruoyi-ui/src/layout/components/TagsView/index.vue
ruoyi-ui/src/layout/components/index.js
ruoyi-ui/src/layout/index.vue
ruoyi-ui/src/layout/mixin/ResizeHandler.js
ruoyi-ui/src/main.js
ruoyi-ui/src/permission.js
ruoyi-ui/src/plugins/auth.js
ruoyi-ui/src/plugins/cache.js
ruoyi-ui/src/plugins/download.js
ruoyi-ui/src/plugins/index.js
ruoyi-ui/src/plugins/modal.js
ruoyi-ui/src/plugins/tab.js
ruoyi-ui/src/router/index.js
ruoyi-ui/src/settings.js
ruoyi-ui/src/store/getters.js
ruoyi-ui/src/store/index.js
ruoyi-ui/src/store/modules/app.js
ruoyi-ui/src/store/modules/dict.js
ruoyi-ui/src/store/modules/permission.js
ruoyi-ui/src/store/modules/settings.js
ruoyi-ui/src/store/modules/tagsView.js
ruoyi-ui/src/store/modules/user.js
ruoyi-ui/src/utils/auth.js
ruoyi-ui/src/utils/dict/Dict.js
ruoyi-ui/src/utils/dict/DictConverter.js
ruoyi-ui/src/utils/dict/DictData.js
ruoyi-ui/src/utils/dict/DictMeta.js
ruoyi-ui/src/utils/dict/DictOptions.js
ruoyi-ui/src/utils/dict/index.js
ruoyi-ui/src/utils/errorCode.js
ruoyi-ui/src/utils/generator/config.js
ruoyi-ui/src/utils/generator/css.js
ruoyi-ui/src/utils/generator/drawingDefault.js
ruoyi-ui/src/utils/generator/html.js
ruoyi-ui/src/utils/generator/icon.json
ruoyi-ui/src/utils/generator/js.js
ruoyi-ui/src/utils/generator/render.js
ruoyi-ui/src/utils/index.js
ruoyi-ui/src/utils/jsencrypt.js
ruoyi-ui/src/utils/permission.js
ruoyi-ui/src/utils/request.js
ruoyi-ui/src/utils/ruoyi.js
ruoyi-ui/src/utils/scroll-to.js
ruoyi-ui/src/utils/validate.js
ruoyi-ui/src/views/components/icons/element-icons.js
ruoyi-ui/src/views/components/icons/index.vue
ruoyi-ui/src/views/components/icons/svg-icons.js
ruoyi-ui/src/views/dashboard/BarChart.vue
ruoyi-ui/src/views/dashboard/LineChart.vue
ruoyi-ui/src/views/dashboard/PanelGroup.vue
ruoyi-ui/src/views/dashboard/PieChart.vue
ruoyi-ui/src/views/dashboard/RaddarChart.vue
ruoyi-ui/src/views/dashboard/mixins/resize.js
ruoyi-ui/src/views/error/401.vue
ruoyi-ui/src/views/error/404.vue
ruoyi-ui/src/views/index.vue
ruoyi-ui/src/views/index_v1.vue
ruoyi-ui/src/views/login.vue
ruoyi-ui/src/views/monitor/job/index.vue
ruoyi-ui/src/views/monitor/job/log.vue
ruoyi-ui/src/views/monitor/online/index.vue
ruoyi-ui/src/views/redirect.vue
ruoyi-ui/src/views/register.vue
ruoyi-ui/src/views/system/config/index.vue
ruoyi-ui/src/views/system/dept/index.vue
ruoyi-ui/src/views/system/dict/data.vue
ruoyi-ui/src/views/system/dict/index.vue
ruoyi-ui/src/views/system/logininfor/index.vue
ruoyi-ui/src/views/system/menu/index.vue
ruoyi-ui/src/views/system/notice/index.vue
ruoyi-ui/src/views/system/operlog/index.vue
ruoyi-ui/src/views/system/post/index.vue
ruoyi-ui/src/views/system/role/authUser.vue
ruoyi-ui/src/views/system/role/index.vue
ruoyi-ui/src/views/system/role/selectUser.vue
ruoyi-ui/src/views/system/user/authRole.vue
ruoyi-ui/src/views/system/user/index.vue
ruoyi-ui/src/views/system/user/profile/index.vue
ruoyi-ui/src/views/system/user/profile/resetPwd.vue
ruoyi-ui/src/views/system/user/profile/userAvatar.vue
ruoyi-ui/src/views/system/user/profile/userInfo.vue
ruoyi-ui/src/views/tool/build/CodeTypeDialog.vue
ruoyi-ui/src/views/tool/build/DraggableItem.vue
ruoyi-ui/src/views/tool/build/IconsDialog.vue
ruoyi-ui/src/views/tool/build/RightPanel.vue
ruoyi-ui/src/views/tool/build/TreeNodeDialog.vue
ruoyi-ui/src/views/tool/build/index.vue
ruoyi-ui/src/views/tool/gen/basicInfoForm.vue
ruoyi-ui/src/views/tool/gen/editTable.vue
ruoyi-ui/src/views/tool/gen/genInfoForm.vue
ruoyi-ui/src/views/tool/gen/importTable.vue
ruoyi-ui/src/views/tool/gen/index.vue
ruoyi-ui/vue.config.js
ruoyi-visual/pom.xml
ruoyi-visual/ruoyi-monitor/pom.xml
ruoyi-visual/ruoyi-monitor/src/main/java/com/ruoyi/modules/monitor/RuoYiMonitorApplication.java
ruoyi-visual/ruoyi-monitor/src/main/java/com/ruoyi/modules/monitor/config/WebSecurityConfigurer.java
ruoyi-visual/ruoyi-monitor/src/main/resources/banner.txt
ruoyi-visual/ruoyi-monitor/src/main/resources/logback.xml
sql/quartz.sql
sql/ry_20230223.sql
sql/ry_config_20220929.sql
sql/ry_seata_20210128.sql |