Compare commits
	
		
			No commits in common. "72b835f05b0e10dd891a47a4e236ec8f184de428" and "4ee169b0c8828517b977cba47953d64d2b0e505a" have entirely different histories.
		
	
	
		
			72b835f05b
			...
			4ee169b0c8
		
	
		| 
						 | 
				
			
			@ -1 +1 @@
 | 
			
		|||
custom: http://doc.ruoyi.vip/tcctlo-vue/other/donate.html
 | 
			
		||||
custom: http://doc.ruoyi.vip/ruoyi-vue/other/donate.html
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,11 +1,11 @@
 | 
			
		|||
<p align="center">
 | 
			
		||||
	<img alt="logo" src="https://oscimg.oschina.net/oscnet/up-d3d0a9303e11d522a06cd263f3079027715.png">
 | 
			
		||||
</p>
 | 
			
		||||
<h1 align="center" style="margin: 30px 0 30px; font-weight: bold;">RuoYi v3.8.9</h1>
 | 
			
		||||
<h1 align="center" style="margin: 30px 0 30px; font-weight: bold;">RuoYi v3.8.8</h1>
 | 
			
		||||
<h4 align="center">基于SpringBoot+Vue前后端分离的Java快速开发框架</h4>
 | 
			
		||||
<p align="center">
 | 
			
		||||
	<a href="https://gitee.com/y_project/RuoYi-Vue/stargazers"><img src="https://gitee.com/y_project/RuoYi-Vue/badge/star.svg?theme=dark"></a>
 | 
			
		||||
	<a href="https://gitee.com/y_project/RuoYi-Vue"><img src="https://img.shields.io/badge/RuoYi-v3.8.9-brightgreen.svg"></a>
 | 
			
		||||
	<a href="https://gitee.com/y_project/RuoYi-Vue"><img src="https://img.shields.io/badge/RuoYi-v3.8.8-brightgreen.svg"></a>
 | 
			
		||||
	<a href="https://gitee.com/y_project/RuoYi-Vue/blob/master/LICENSE"><img src="https://img.shields.io/github/license/mashape/apistatus.svg"></a>
 | 
			
		||||
</p>
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -92,4 +92,4 @@
 | 
			
		|||
 | 
			
		||||
## 若依前后端分离交流群
 | 
			
		||||
 | 
			
		||||
QQ群: [](https://jq.qq.com/?_wv=1027&k=5bVB1og) [](https://jq.qq.com/?_wv=1027&k=5eiA4DH) [](https://jq.qq.com/?_wv=1027&k=5AxMKlC) [](https://jq.qq.com/?_wv=1027&k=51G72yr) [](https://jq.qq.com/?_wv=1027&k=VvjN2nvu) [](https://jq.qq.com/?_wv=1027&k=5vYAqA05) [](https://jq.qq.com/?_wv=1027&k=kOIINEb5) [](https://jq.qq.com/?_wv=1027&k=UKtX5jhs) [](https://jq.qq.com/?_wv=1027&k=EI9an8lJ) [](https://jq.qq.com/?_wv=1027&k=SWCtLnMz) [](https://jq.qq.com/?_wv=1027&k=96Dkdq0k) [](https://jq.qq.com/?_wv=1027&k=0fsNiYZt) [](https://jq.qq.com/?_wv=1027&k=7xw4xUG1) [](https://jq.qq.com/?_wv=1027&k=eCx8eyoJ) [](https://jq.qq.com/?_wv=1027&k=SpyH2875) [](https://jq.qq.com/?_wv=1027&k=tKEt51dz) [](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=0vBbSb0ztbBgVtn3kJS-Q4HUNYwip89G&authKey=8irq5PhutrZmWIvsUsklBxhj57l%2F1nOZqjzigkXZVoZE451GG4JHPOqW7AW6cf0T&noverify=0&group_code=143961921) [](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=ZFAPAbp09S2ltvwrJzp7wGlbopsc0rwi&authKey=HB2cxpxP2yspk%2Bo3WKTBfktRCccVkU26cgi5B16u0KcAYrVu7sBaE7XSEqmMdFQp&noverify=0&group_code=174951577) [](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=Fn2aF5IHpwsy8j6VlalNJK6qbwFLFHat&authKey=uyIT%2B97x2AXj3odyXpsSpVaPMC%2Bidw0LxG5MAtEqlrcBcWJUA%2FeS43rsF1Tg7IRJ&noverify=0&group_code=161281055) [](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=XIzkm_mV2xTsUtFxo63bmicYoDBA6Ifm&authKey=dDW%2F4qsmw3x9govoZY9w%2FoWAoC4wbHqGal%2BbqLzoS6VBarU8EBptIgPKN%2FviyC8j&noverify=0&group_code=138988063) [](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=DkugnCg68PevlycJSKSwjhFqfIgrWWwR&authKey=pR1Pa5lPIeGF%2FFtIk6d%2FGB5qFi0EdvyErtpQXULzo03zbhopBHLWcuqdpwY241R%2F&noverify=0&group_code=151450850) [](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=F58bgRa-Dp-rsQJThiJqIYv8t4-lWfXh&authKey=UmUs4CVG5OPA1whvsa4uSespOvyd8%2FAr9olEGaWAfdLmfKQk%2FVBp2YU3u2xXXt76&noverify=0&group_code=224622315) [](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=Nxb2EQ5qozWa218Wbs7zgBnjLSNk_tVT&authKey=obBKXj6SBKgrFTJZx0AqQnIYbNOvBB2kmgwWvGhzxR67RoRr84%2Bus5OadzMcdJl5&noverify=0&group_code=287842588) [](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=numtK1M_I4eVd2Gvg8qtbuL8JgX42qNh&authKey=giV9XWMaFZTY%2FqPlmWbkB9g3fi0Ev5CwEtT9Tgei0oUlFFCQLDp4ozWRiVIzubIm&noverify=0&group_code=187944233) 点击按钮入群。
 | 
			
		||||
QQ群: [](https://jq.qq.com/?_wv=1027&k=5bVB1og) [](https://jq.qq.com/?_wv=1027&k=5eiA4DH) [](https://jq.qq.com/?_wv=1027&k=5AxMKlC) [](https://jq.qq.com/?_wv=1027&k=51G72yr) [](https://jq.qq.com/?_wv=1027&k=VvjN2nvu) [](https://jq.qq.com/?_wv=1027&k=5vYAqA05) [](https://jq.qq.com/?_wv=1027&k=kOIINEb5) [](https://jq.qq.com/?_wv=1027&k=UKtX5jhs) [](https://jq.qq.com/?_wv=1027&k=EI9an8lJ) [](https://jq.qq.com/?_wv=1027&k=SWCtLnMz) [](https://jq.qq.com/?_wv=1027&k=96Dkdq0k) [](https://jq.qq.com/?_wv=1027&k=0fsNiYZt) [](https://jq.qq.com/?_wv=1027&k=7xw4xUG1) [](https://jq.qq.com/?_wv=1027&k=eCx8eyoJ) [](https://jq.qq.com/?_wv=1027&k=SpyH2875) [](https://jq.qq.com/?_wv=1027&k=tKEt51dz) [](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=0vBbSb0ztbBgVtn3kJS-Q4HUNYwip89G&authKey=8irq5PhutrZmWIvsUsklBxhj57l%2F1nOZqjzigkXZVoZE451GG4JHPOqW7AW6cf0T&noverify=0&group_code=143961921) [](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=ZFAPAbp09S2ltvwrJzp7wGlbopsc0rwi&authKey=HB2cxpxP2yspk%2Bo3WKTBfktRCccVkU26cgi5B16u0KcAYrVu7sBaE7XSEqmMdFQp&noverify=0&group_code=174951577) [](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=Fn2aF5IHpwsy8j6VlalNJK6qbwFLFHat&authKey=uyIT%2B97x2AXj3odyXpsSpVaPMC%2Bidw0LxG5MAtEqlrcBcWJUA%2FeS43rsF1Tg7IRJ&noverify=0&group_code=161281055) [](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=XIzkm_mV2xTsUtFxo63bmicYoDBA6Ifm&authKey=dDW%2F4qsmw3x9govoZY9w%2FoWAoC4wbHqGal%2BbqLzoS6VBarU8EBptIgPKN%2FviyC8j&noverify=0&group_code=138988063) [](http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=DkugnCg68PevlycJSKSwjhFqfIgrWWwR&authKey=pR1Pa5lPIeGF%2FFtIk6d%2FGB5qFi0EdvyErtpQXULzo03zbhopBHLWcuqdpwY241R%2F&noverify=0&group_code=151450850) 点击按钮入群。
 | 
			
		||||
| 
						 | 
				
			
			@ -4,11 +4,11 @@ echo [
 | 
			
		|||
echo.
 | 
			
		||||
 | 
			
		||||
cd %~dp0
 | 
			
		||||
cd ../tcctlo-admin/target
 | 
			
		||||
cd ../ruoyi-admin/target
 | 
			
		||||
 | 
			
		||||
set JAVA_OPTS=-Xms256m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m
 | 
			
		||||
 | 
			
		||||
java -jar %JAVA_OPTS% tcctlo-admin.jar
 | 
			
		||||
java -jar %JAVA_OPTS% ruoyi-admin.jar
 | 
			
		||||
 | 
			
		||||
cd bin
 | 
			
		||||
pause
 | 
			
		||||
							
								
								
									
										62
									
								
								pom.xml
								
								
								
								
							
							
						
						
									
										62
									
								
								pom.xml
								
								
								
								
							| 
						 | 
				
			
			@ -4,16 +4,16 @@
 | 
			
		|||
         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.tcctlo</groupId>
 | 
			
		||||
    <artifactId>tcctlo</artifactId>
 | 
			
		||||
    <version>3.8.9</version>
 | 
			
		||||
    <groupId>com.ruoyi</groupId>
 | 
			
		||||
    <artifactId>ruoyi</artifactId>
 | 
			
		||||
    <version>3.8.8</version>
 | 
			
		||||
 | 
			
		||||
    <name>tcctlo</name>
 | 
			
		||||
    <name>ruoyi</name>
 | 
			
		||||
    <url>http://www.ruoyi.vip</url>
 | 
			
		||||
    <description>律所OA办公系统</description>
 | 
			
		||||
    <description>若依管理系统</description>
 | 
			
		||||
    
 | 
			
		||||
    <properties>
 | 
			
		||||
        <tcctlo.version>3.8.9</tcctlo.version>
 | 
			
		||||
        <ruoyi.version>3.8.8</ruoyi.version>
 | 
			
		||||
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 | 
			
		||||
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
 | 
			
		||||
        <java.version>1.8</java.version>
 | 
			
		||||
| 
						 | 
				
			
			@ -185,57 +185,49 @@
 | 
			
		|||
 | 
			
		||||
            <!-- 定时任务-->
 | 
			
		||||
            <dependency>
 | 
			
		||||
                <groupId>com.tcctlo</groupId>
 | 
			
		||||
                <artifactId>tcctlo-quartz</artifactId>
 | 
			
		||||
                <version>${tcctlo.version}</version>
 | 
			
		||||
                <groupId>com.ruoyi</groupId>
 | 
			
		||||
                <artifactId>ruoyi-quartz</artifactId>
 | 
			
		||||
                <version>${ruoyi.version}</version>
 | 
			
		||||
            </dependency>
 | 
			
		||||
 | 
			
		||||
            <!-- 代码生成-->
 | 
			
		||||
            <dependency>
 | 
			
		||||
                <groupId>com.tcctlo</groupId>
 | 
			
		||||
                <artifactId>tcctlo-generator</artifactId>
 | 
			
		||||
                <version>${tcctlo.version}</version>
 | 
			
		||||
                <groupId>com.ruoyi</groupId>
 | 
			
		||||
                <artifactId>ruoyi-generator</artifactId>
 | 
			
		||||
                <version>${ruoyi.version}</version>
 | 
			
		||||
            </dependency>
 | 
			
		||||
 | 
			
		||||
            <!-- 核心模块-->
 | 
			
		||||
            <dependency>
 | 
			
		||||
                <groupId>com.tcctlo</groupId>
 | 
			
		||||
                <artifactId>tcctlo-framework</artifactId>
 | 
			
		||||
                <version>${tcctlo.version}</version>
 | 
			
		||||
                <groupId>com.ruoyi</groupId>
 | 
			
		||||
                <artifactId>ruoyi-framework</artifactId>
 | 
			
		||||
                <version>${ruoyi.version}</version>
 | 
			
		||||
            </dependency>
 | 
			
		||||
 | 
			
		||||
            <!-- 系统模块-->
 | 
			
		||||
            <dependency>
 | 
			
		||||
                <groupId>com.tcctlo</groupId>
 | 
			
		||||
                <artifactId>tcctlo-system</artifactId>
 | 
			
		||||
                <version>${tcctlo.version}</version>
 | 
			
		||||
                <groupId>com.ruoyi</groupId>
 | 
			
		||||
                <artifactId>ruoyi-system</artifactId>
 | 
			
		||||
                <version>${ruoyi.version}</version>
 | 
			
		||||
            </dependency>
 | 
			
		||||
 | 
			
		||||
            <!-- 通用工具-->
 | 
			
		||||
            <dependency>
 | 
			
		||||
                <groupId>com.tcctlo</groupId>
 | 
			
		||||
                <artifactId>tcctlo-common</artifactId>
 | 
			
		||||
                <version>${tcctlo.version}</version>
 | 
			
		||||
            </dependency>
 | 
			
		||||
 | 
			
		||||
            <!-- 律所OA业务模块 -->
 | 
			
		||||
            <dependency>
 | 
			
		||||
                <groupId>com.tcctlo.law</groupId>
 | 
			
		||||
                <artifactId>tcctlo-law-office</artifactId>
 | 
			
		||||
                <version>${tcctlo.version}</version>
 | 
			
		||||
                <groupId>com.ruoyi</groupId>
 | 
			
		||||
                <artifactId>ruoyi-common</artifactId>
 | 
			
		||||
                <version>${ruoyi.version}</version>
 | 
			
		||||
            </dependency>
 | 
			
		||||
 | 
			
		||||
        </dependencies>
 | 
			
		||||
    </dependencyManagement>
 | 
			
		||||
 | 
			
		||||
    <modules>
 | 
			
		||||
        <module>tcctlo-admin</module>
 | 
			
		||||
        <module>tcctlo-framework</module>
 | 
			
		||||
        <module>tcctlo-system</module>
 | 
			
		||||
        <module>tcctlo-quartz</module>
 | 
			
		||||
        <module>tcctlo-generator</module>
 | 
			
		||||
        <module>tcctlo-common</module>
 | 
			
		||||
        <module>tcctlo-law-office</module>
 | 
			
		||||
        <module>ruoyi-admin</module>
 | 
			
		||||
        <module>ruoyi-framework</module>
 | 
			
		||||
        <module>ruoyi-system</module>
 | 
			
		||||
        <module>ruoyi-quartz</module>
 | 
			
		||||
        <module>ruoyi-generator</module>
 | 
			
		||||
        <module>ruoyi-common</module>
 | 
			
		||||
    </modules>
 | 
			
		||||
    <packaging>pom</packaging>
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,103 +1,96 @@
 | 
			
		|||
<?xml version="1.0" encoding="UTF-8"?>
 | 
			
		||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
 | 
			
		||||
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 | 
			
		||||
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 | 
			
		||||
    <parent>
 | 
			
		||||
        <artifactId>tcctlo</artifactId>
 | 
			
		||||
        <groupId>com.tcctlo</groupId>
 | 
			
		||||
        <version>3.8.9</version>
 | 
			
		||||
    </parent>
 | 
			
		||||
    <modelVersion>4.0.0</modelVersion>
 | 
			
		||||
    <packaging>jar</packaging>
 | 
			
		||||
    <artifactId>tcctlo-admin</artifactId>
 | 
			
		||||
 | 
			
		||||
    <description>
 | 
			
		||||
        web服务入口
 | 
			
		||||
    </description>
 | 
			
		||||
 | 
			
		||||
    <dependencies>
 | 
			
		||||
 | 
			
		||||
        <!-- spring-boot-devtools -->
 | 
			
		||||
        <dependency>
 | 
			
		||||
            <groupId>org.springframework.boot</groupId>
 | 
			
		||||
            <artifactId>spring-boot-devtools</artifactId>
 | 
			
		||||
            <optional>true</optional> <!-- 表示依赖不会传递 -->
 | 
			
		||||
        </dependency>
 | 
			
		||||
 | 
			
		||||
        <!-- swagger3-->
 | 
			
		||||
        <dependency>
 | 
			
		||||
            <groupId>io.springfox</groupId>
 | 
			
		||||
            <artifactId>springfox-boot-starter</artifactId>
 | 
			
		||||
        </dependency>
 | 
			
		||||
 | 
			
		||||
        <!-- 防止进入swagger页面报类型转换错误,排除3.0.0中的引用,手动增加1.6.2版本 -->
 | 
			
		||||
        <dependency>
 | 
			
		||||
            <groupId>io.swagger</groupId>
 | 
			
		||||
            <artifactId>swagger-models</artifactId>
 | 
			
		||||
            <version>1.6.2</version>
 | 
			
		||||
        </dependency>
 | 
			
		||||
 | 
			
		||||
         <!-- Mysql驱动包 -->
 | 
			
		||||
        <dependency>
 | 
			
		||||
            <groupId>mysql</groupId>
 | 
			
		||||
            <artifactId>mysql-connector-java</artifactId>
 | 
			
		||||
        </dependency>
 | 
			
		||||
 | 
			
		||||
        <!-- 核心模块-->
 | 
			
		||||
        <dependency>
 | 
			
		||||
            <groupId>com.tcctlo</groupId>
 | 
			
		||||
            <artifactId>tcctlo-framework</artifactId>
 | 
			
		||||
        </dependency>
 | 
			
		||||
 | 
			
		||||
        <!-- 定时任务-->
 | 
			
		||||
        <dependency>
 | 
			
		||||
            <groupId>com.tcctlo</groupId>
 | 
			
		||||
            <artifactId>tcctlo-quartz</artifactId>
 | 
			
		||||
        </dependency>
 | 
			
		||||
 | 
			
		||||
        <!-- 代码生成-->
 | 
			
		||||
        <dependency>
 | 
			
		||||
            <groupId>com.tcctlo</groupId>
 | 
			
		||||
            <artifactId>tcctlo-generator</artifactId>
 | 
			
		||||
        </dependency>
 | 
			
		||||
 | 
			
		||||
        <!-- 律所OA业务模块 -->
 | 
			
		||||
        <dependency>
 | 
			
		||||
            <groupId>com.tcctlo.law</groupId>
 | 
			
		||||
            <artifactId>tcctlo-law-office</artifactId>
 | 
			
		||||
            <version>${tcctlo.version}</version>
 | 
			
		||||
        </dependency>
 | 
			
		||||
 | 
			
		||||
    </dependencies>
 | 
			
		||||
 | 
			
		||||
    <build>
 | 
			
		||||
        <plugins>
 | 
			
		||||
            <plugin>
 | 
			
		||||
                <groupId>org.springframework.boot</groupId>
 | 
			
		||||
                <artifactId>spring-boot-maven-plugin</artifactId>
 | 
			
		||||
                <version>2.5.15</version>
 | 
			
		||||
                <configuration>
 | 
			
		||||
                    <fork>true</fork> <!-- 如果没有该配置,devtools不会生效 -->
 | 
			
		||||
                </configuration>
 | 
			
		||||
                <executions>
 | 
			
		||||
                    <execution>
 | 
			
		||||
                        <goals>
 | 
			
		||||
                            <goal>repackage</goal>
 | 
			
		||||
                        </goals>
 | 
			
		||||
                    </execution>
 | 
			
		||||
                </executions>
 | 
			
		||||
            </plugin>
 | 
			
		||||
            <plugin>   
 | 
			
		||||
                <groupId>org.apache.maven.plugins</groupId>   
 | 
			
		||||
                <artifactId>maven-war-plugin</artifactId>   
 | 
			
		||||
                <version>3.1.0</version>   
 | 
			
		||||
                <configuration>
 | 
			
		||||
                    <failOnMissingWebXml>false</failOnMissingWebXml>
 | 
			
		||||
                    <warName>${project.artifactId}</warName>
 | 
			
		||||
                </configuration>   
 | 
			
		||||
           </plugin>   
 | 
			
		||||
        </plugins>
 | 
			
		||||
        <finalName>${project.artifactId}</finalName>
 | 
			
		||||
    </build>
 | 
			
		||||
 | 
			
		||||
<?xml version="1.0" encoding="UTF-8"?>
 | 
			
		||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
 | 
			
		||||
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 | 
			
		||||
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 | 
			
		||||
    <parent>
 | 
			
		||||
        <artifactId>ruoyi</artifactId>
 | 
			
		||||
        <groupId>com.ruoyi</groupId>
 | 
			
		||||
        <version>3.8.8</version>
 | 
			
		||||
    </parent>
 | 
			
		||||
    <modelVersion>4.0.0</modelVersion>
 | 
			
		||||
    <packaging>jar</packaging>
 | 
			
		||||
    <artifactId>ruoyi-admin</artifactId>
 | 
			
		||||
 | 
			
		||||
    <description>
 | 
			
		||||
        web服务入口
 | 
			
		||||
    </description>
 | 
			
		||||
 | 
			
		||||
    <dependencies>
 | 
			
		||||
 | 
			
		||||
        <!-- spring-boot-devtools -->
 | 
			
		||||
        <dependency>
 | 
			
		||||
            <groupId>org.springframework.boot</groupId>
 | 
			
		||||
            <artifactId>spring-boot-devtools</artifactId>
 | 
			
		||||
            <optional>true</optional> <!-- 表示依赖不会传递 -->
 | 
			
		||||
        </dependency>
 | 
			
		||||
 | 
			
		||||
        <!-- swagger3-->
 | 
			
		||||
        <dependency>
 | 
			
		||||
            <groupId>io.springfox</groupId>
 | 
			
		||||
            <artifactId>springfox-boot-starter</artifactId>
 | 
			
		||||
        </dependency>
 | 
			
		||||
 | 
			
		||||
        <!-- 防止进入swagger页面报类型转换错误,排除3.0.0中的引用,手动增加1.6.2版本 -->
 | 
			
		||||
        <dependency>
 | 
			
		||||
            <groupId>io.swagger</groupId>
 | 
			
		||||
            <artifactId>swagger-models</artifactId>
 | 
			
		||||
            <version>1.6.2</version>
 | 
			
		||||
        </dependency>
 | 
			
		||||
 | 
			
		||||
         <!-- Mysql驱动包 -->
 | 
			
		||||
        <dependency>
 | 
			
		||||
            <groupId>mysql</groupId>
 | 
			
		||||
            <artifactId>mysql-connector-java</artifactId>
 | 
			
		||||
        </dependency>
 | 
			
		||||
 | 
			
		||||
        <!-- 核心模块-->
 | 
			
		||||
        <dependency>
 | 
			
		||||
            <groupId>com.ruoyi</groupId>
 | 
			
		||||
            <artifactId>ruoyi-framework</artifactId>
 | 
			
		||||
        </dependency>
 | 
			
		||||
 | 
			
		||||
        <!-- 定时任务-->
 | 
			
		||||
        <dependency>
 | 
			
		||||
            <groupId>com.ruoyi</groupId>
 | 
			
		||||
            <artifactId>ruoyi-quartz</artifactId>
 | 
			
		||||
        </dependency>
 | 
			
		||||
 | 
			
		||||
        <!-- 代码生成-->
 | 
			
		||||
        <dependency>
 | 
			
		||||
            <groupId>com.ruoyi</groupId>
 | 
			
		||||
            <artifactId>ruoyi-generator</artifactId>
 | 
			
		||||
        </dependency>
 | 
			
		||||
 | 
			
		||||
    </dependencies>
 | 
			
		||||
 | 
			
		||||
    <build>
 | 
			
		||||
        <plugins>
 | 
			
		||||
            <plugin>
 | 
			
		||||
                <groupId>org.springframework.boot</groupId>
 | 
			
		||||
                <artifactId>spring-boot-maven-plugin</artifactId>
 | 
			
		||||
                <version>2.5.15</version>
 | 
			
		||||
                <configuration>
 | 
			
		||||
                    <fork>true</fork> <!-- 如果没有该配置,devtools不会生效 -->
 | 
			
		||||
                </configuration>
 | 
			
		||||
                <executions>
 | 
			
		||||
                    <execution>
 | 
			
		||||
                        <goals>
 | 
			
		||||
                            <goal>repackage</goal>
 | 
			
		||||
                        </goals>
 | 
			
		||||
                    </execution>
 | 
			
		||||
                </executions>
 | 
			
		||||
            </plugin>
 | 
			
		||||
            <plugin>   
 | 
			
		||||
                <groupId>org.apache.maven.plugins</groupId>   
 | 
			
		||||
                <artifactId>maven-war-plugin</artifactId>   
 | 
			
		||||
                <version>3.1.0</version>   
 | 
			
		||||
                <configuration>
 | 
			
		||||
                    <failOnMissingWebXml>false</failOnMissingWebXml>
 | 
			
		||||
                    <warName>${project.artifactId}</warName>
 | 
			
		||||
                </configuration>   
 | 
			
		||||
           </plugin>   
 | 
			
		||||
        </plugins>
 | 
			
		||||
        <finalName>${project.artifactId}</finalName>
 | 
			
		||||
    </build>
 | 
			
		||||
 | 
			
		||||
</project>
 | 
			
		||||
| 
						 | 
				
			
			@ -1,32 +1,30 @@
 | 
			
		|||
package com.tcctlo;
 | 
			
		||||
 | 
			
		||||
import org.dromara.x.file.storage.spring.EnableFileStorage;
 | 
			
		||||
import org.springframework.boot.SpringApplication;
 | 
			
		||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
 | 
			
		||||
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 启动程序
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })
 | 
			
		||||
@EnableFileStorage
 | 
			
		||||
public class TCCTLawOfficeApplication
 | 
			
		||||
{
 | 
			
		||||
    public static void main(String[] args)
 | 
			
		||||
    {
 | 
			
		||||
        // System.setProperty("spring.devtools.restart.enabled", "false");
 | 
			
		||||
        SpringApplication.run(TCCTLawOfficeApplication.class, args);
 | 
			
		||||
        System.out.println("(♥◠‿◠)ノ゙  若依启动成功   ლ(´ڡ`ლ)゙  \n" +
 | 
			
		||||
                " .-------.       ____     __        \n" +
 | 
			
		||||
                " |  _ _   \\      \\   \\   /  /    \n" +
 | 
			
		||||
                " | ( ' )  |       \\  _. /  '       \n" +
 | 
			
		||||
                " |(_ o _) /        _( )_ .'         \n" +
 | 
			
		||||
                " | (_,_).' __  ___(_ o _)'          \n" +
 | 
			
		||||
                " |  |\\ \\  |  ||   |(_,_)'         \n" +
 | 
			
		||||
                " |  | \\ `'   /|   `-'  /           \n" +
 | 
			
		||||
                " |  |  \\    /  \\      /           \n" +
 | 
			
		||||
                " ''-'   `'-'    `-..-'              ");
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
package com.ruoyi;
 | 
			
		||||
 | 
			
		||||
import org.springframework.boot.SpringApplication;
 | 
			
		||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
 | 
			
		||||
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 启动程序
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
@SpringBootApplication(exclude = { DataSourceAutoConfiguration.class })
 | 
			
		||||
public class RuoYiApplication
 | 
			
		||||
{
 | 
			
		||||
    public static void main(String[] args)
 | 
			
		||||
    {
 | 
			
		||||
        // System.setProperty("spring.devtools.restart.enabled", "false");
 | 
			
		||||
        SpringApplication.run(RuoYiApplication.class, args);
 | 
			
		||||
        System.out.println("(♥◠‿◠)ノ゙  若依启动成功   ლ(´ڡ`ლ)゙  \n" +
 | 
			
		||||
                " .-------.       ____     __        \n" +
 | 
			
		||||
                " |  _ _   \\      \\   \\   /  /    \n" +
 | 
			
		||||
                " | ( ' )  |       \\  _. /  '       \n" +
 | 
			
		||||
                " |(_ o _) /        _( )_ .'         \n" +
 | 
			
		||||
                " | (_,_).' __  ___(_ o _)'          \n" +
 | 
			
		||||
                " |  |\\ \\  |  ||   |(_,_)'         \n" +
 | 
			
		||||
                " |  | \\ `'   /|   `-'  /           \n" +
 | 
			
		||||
                " |  |  \\    /  \\      /           \n" +
 | 
			
		||||
                " ''-'   `'-'    `-..-'              ");
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,18 +1,18 @@
 | 
			
		|||
package com.tcctlo;
 | 
			
		||||
 | 
			
		||||
import org.springframework.boot.builder.SpringApplicationBuilder;
 | 
			
		||||
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * web容器中进行部署
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
public class RuoYiServletInitializer extends SpringBootServletInitializer
 | 
			
		||||
{
 | 
			
		||||
    @Override
 | 
			
		||||
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application)
 | 
			
		||||
    {
 | 
			
		||||
        return application.sources(TCCTLawOfficeApplication.class);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
package com.ruoyi;
 | 
			
		||||
 | 
			
		||||
import org.springframework.boot.builder.SpringApplicationBuilder;
 | 
			
		||||
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * web容器中进行部署
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
public class RuoYiServletInitializer extends SpringBootServletInitializer
 | 
			
		||||
{
 | 
			
		||||
    @Override
 | 
			
		||||
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application)
 | 
			
		||||
    {
 | 
			
		||||
        return application.sources(RuoYiApplication.class);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,94 +1,94 @@
 | 
			
		|||
package com.tcctlo.web.controller.common;
 | 
			
		||||
 | 
			
		||||
import java.awt.image.BufferedImage;
 | 
			
		||||
import java.io.IOException;
 | 
			
		||||
import java.util.concurrent.TimeUnit;
 | 
			
		||||
import javax.annotation.Resource;
 | 
			
		||||
import javax.imageio.ImageIO;
 | 
			
		||||
import javax.servlet.http.HttpServletResponse;
 | 
			
		||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
			
		||||
import org.springframework.util.FastByteArrayOutputStream;
 | 
			
		||||
import org.springframework.web.bind.annotation.GetMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.RestController;
 | 
			
		||||
import com.google.code.kaptcha.Producer;
 | 
			
		||||
import com.tcctlo.common.config.RuoYiConfig;
 | 
			
		||||
import com.tcctlo.common.constant.CacheConstants;
 | 
			
		||||
import com.tcctlo.common.constant.Constants;
 | 
			
		||||
import com.tcctlo.common.core.domain.AjaxResult;
 | 
			
		||||
import com.tcctlo.common.core.redis.RedisCache;
 | 
			
		||||
import com.tcctlo.common.utils.sign.Base64;
 | 
			
		||||
import com.tcctlo.common.utils.uuid.IdUtils;
 | 
			
		||||
import com.tcctlo.system.service.ISysConfigService;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 验证码操作处理
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
@RestController
 | 
			
		||||
public class CaptchaController
 | 
			
		||||
{
 | 
			
		||||
    @Resource(name = "captchaProducer")
 | 
			
		||||
    private Producer captchaProducer;
 | 
			
		||||
 | 
			
		||||
    @Resource(name = "captchaProducerMath")
 | 
			
		||||
    private Producer captchaProducerMath;
 | 
			
		||||
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private RedisCache redisCache;
 | 
			
		||||
    
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private ISysConfigService configService;
 | 
			
		||||
    /**
 | 
			
		||||
     * 生成验证码
 | 
			
		||||
     */
 | 
			
		||||
    @GetMapping("/captchaImage")
 | 
			
		||||
    public AjaxResult getCode(HttpServletResponse response) throws IOException
 | 
			
		||||
    {
 | 
			
		||||
        AjaxResult ajax = AjaxResult.success();
 | 
			
		||||
        boolean captchaEnabled = configService.selectCaptchaEnabled();
 | 
			
		||||
        ajax.put("captchaEnabled", captchaEnabled);
 | 
			
		||||
        if (!captchaEnabled)
 | 
			
		||||
        {
 | 
			
		||||
            return ajax;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // 保存验证码信息
 | 
			
		||||
        String uuid = IdUtils.simpleUUID();
 | 
			
		||||
        String verifyKey = CacheConstants.CAPTCHA_CODE_KEY + uuid;
 | 
			
		||||
 | 
			
		||||
        String capStr = null, code = null;
 | 
			
		||||
        BufferedImage image = null;
 | 
			
		||||
 | 
			
		||||
        // 生成验证码
 | 
			
		||||
        String captchaType = RuoYiConfig.getCaptchaType();
 | 
			
		||||
        if ("math".equals(captchaType))
 | 
			
		||||
        {
 | 
			
		||||
            String capText = captchaProducerMath.createText();
 | 
			
		||||
            capStr = capText.substring(0, capText.lastIndexOf("@"));
 | 
			
		||||
            code = capText.substring(capText.lastIndexOf("@") + 1);
 | 
			
		||||
            image = captchaProducerMath.createImage(capStr);
 | 
			
		||||
        }
 | 
			
		||||
        else if ("char".equals(captchaType))
 | 
			
		||||
        {
 | 
			
		||||
            capStr = code = captchaProducer.createText();
 | 
			
		||||
            image = captchaProducer.createImage(capStr);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        redisCache.setCacheObject(verifyKey, code, Constants.CAPTCHA_EXPIRATION, TimeUnit.MINUTES);
 | 
			
		||||
        // 转换流信息写出
 | 
			
		||||
        FastByteArrayOutputStream os = new FastByteArrayOutputStream();
 | 
			
		||||
        try
 | 
			
		||||
        {
 | 
			
		||||
            ImageIO.write(image, "jpg", os);
 | 
			
		||||
        }
 | 
			
		||||
        catch (IOException e)
 | 
			
		||||
        {
 | 
			
		||||
            return AjaxResult.error(e.getMessage());
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        ajax.put("uuid", uuid);
 | 
			
		||||
        ajax.put("img", Base64.encode(os.toByteArray()));
 | 
			
		||||
        return ajax;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
package com.ruoyi.web.controller.common;
 | 
			
		||||
 | 
			
		||||
import java.awt.image.BufferedImage;
 | 
			
		||||
import java.io.IOException;
 | 
			
		||||
import java.util.concurrent.TimeUnit;
 | 
			
		||||
import javax.annotation.Resource;
 | 
			
		||||
import javax.imageio.ImageIO;
 | 
			
		||||
import javax.servlet.http.HttpServletResponse;
 | 
			
		||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
			
		||||
import org.springframework.util.FastByteArrayOutputStream;
 | 
			
		||||
import org.springframework.web.bind.annotation.GetMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.RestController;
 | 
			
		||||
import com.google.code.kaptcha.Producer;
 | 
			
		||||
import com.ruoyi.common.config.RuoYiConfig;
 | 
			
		||||
import com.ruoyi.common.constant.CacheConstants;
 | 
			
		||||
import com.ruoyi.common.constant.Constants;
 | 
			
		||||
import com.ruoyi.common.core.domain.AjaxResult;
 | 
			
		||||
import com.ruoyi.common.core.redis.RedisCache;
 | 
			
		||||
import com.ruoyi.common.utils.sign.Base64;
 | 
			
		||||
import com.ruoyi.common.utils.uuid.IdUtils;
 | 
			
		||||
import com.ruoyi.system.service.ISysConfigService;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 验证码操作处理
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
@RestController
 | 
			
		||||
public class CaptchaController
 | 
			
		||||
{
 | 
			
		||||
    @Resource(name = "captchaProducer")
 | 
			
		||||
    private Producer captchaProducer;
 | 
			
		||||
 | 
			
		||||
    @Resource(name = "captchaProducerMath")
 | 
			
		||||
    private Producer captchaProducerMath;
 | 
			
		||||
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private RedisCache redisCache;
 | 
			
		||||
    
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private ISysConfigService configService;
 | 
			
		||||
    /**
 | 
			
		||||
     * 生成验证码
 | 
			
		||||
     */
 | 
			
		||||
    @GetMapping("/captchaImage")
 | 
			
		||||
    public AjaxResult getCode(HttpServletResponse response) throws IOException
 | 
			
		||||
    {
 | 
			
		||||
        AjaxResult ajax = AjaxResult.success();
 | 
			
		||||
        boolean captchaEnabled = configService.selectCaptchaEnabled();
 | 
			
		||||
        ajax.put("captchaEnabled", captchaEnabled);
 | 
			
		||||
        if (!captchaEnabled)
 | 
			
		||||
        {
 | 
			
		||||
            return ajax;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // 保存验证码信息
 | 
			
		||||
        String uuid = IdUtils.simpleUUID();
 | 
			
		||||
        String verifyKey = CacheConstants.CAPTCHA_CODE_KEY + uuid;
 | 
			
		||||
 | 
			
		||||
        String capStr = null, code = null;
 | 
			
		||||
        BufferedImage image = null;
 | 
			
		||||
 | 
			
		||||
        // 生成验证码
 | 
			
		||||
        String captchaType = RuoYiConfig.getCaptchaType();
 | 
			
		||||
        if ("math".equals(captchaType))
 | 
			
		||||
        {
 | 
			
		||||
            String capText = captchaProducerMath.createText();
 | 
			
		||||
            capStr = capText.substring(0, capText.lastIndexOf("@"));
 | 
			
		||||
            code = capText.substring(capText.lastIndexOf("@") + 1);
 | 
			
		||||
            image = captchaProducerMath.createImage(capStr);
 | 
			
		||||
        }
 | 
			
		||||
        else if ("char".equals(captchaType))
 | 
			
		||||
        {
 | 
			
		||||
            capStr = code = captchaProducer.createText();
 | 
			
		||||
            image = captchaProducer.createImage(capStr);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        redisCache.setCacheObject(verifyKey, code, Constants.CAPTCHA_EXPIRATION, TimeUnit.MINUTES);
 | 
			
		||||
        // 转换流信息写出
 | 
			
		||||
        FastByteArrayOutputStream os = new FastByteArrayOutputStream();
 | 
			
		||||
        try
 | 
			
		||||
        {
 | 
			
		||||
            ImageIO.write(image, "jpg", os);
 | 
			
		||||
        }
 | 
			
		||||
        catch (IOException e)
 | 
			
		||||
        {
 | 
			
		||||
            return AjaxResult.error(e.getMessage());
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        ajax.put("uuid", uuid);
 | 
			
		||||
        ajax.put("img", Base64.encode(os.toByteArray()));
 | 
			
		||||
        return ajax;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,179 +1,163 @@
 | 
			
		|||
package com.tcctlo.web.controller.common;
 | 
			
		||||
 | 
			
		||||
import java.time.LocalDate;
 | 
			
		||||
import java.time.format.DateTimeFormatter;
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import javax.servlet.http.HttpServletRequest;
 | 
			
		||||
import javax.servlet.http.HttpServletResponse;
 | 
			
		||||
 | 
			
		||||
import org.dromara.x.file.storage.core.FileInfo;
 | 
			
		||||
import org.dromara.x.file.storage.core.FileStorageService;
 | 
			
		||||
import org.slf4j.Logger;
 | 
			
		||||
import org.slf4j.LoggerFactory;
 | 
			
		||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
			
		||||
import org.springframework.http.MediaType;
 | 
			
		||||
import org.springframework.web.bind.annotation.GetMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.PostMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.RequestMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.RestController;
 | 
			
		||||
import org.springframework.web.multipart.MultipartFile;
 | 
			
		||||
import com.tcctlo.common.config.RuoYiConfig;
 | 
			
		||||
import com.tcctlo.common.constant.Constants;
 | 
			
		||||
import com.tcctlo.common.core.domain.AjaxResult;
 | 
			
		||||
import com.tcctlo.common.utils.StringUtils;
 | 
			
		||||
import com.tcctlo.common.utils.file.FileUploadUtils;
 | 
			
		||||
import com.tcctlo.common.utils.file.FileUtils;
 | 
			
		||||
import com.tcctlo.framework.config.ServerConfig;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 通用请求处理
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
@RestController
 | 
			
		||||
@RequestMapping("/common")
 | 
			
		||||
public class CommonController
 | 
			
		||||
{
 | 
			
		||||
    private static final Logger log = LoggerFactory.getLogger(CommonController.class);
 | 
			
		||||
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private ServerConfig serverConfig;
 | 
			
		||||
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private FileStorageService fileStorageService;//注入实列
 | 
			
		||||
 | 
			
		||||
    private static final String FILE_DELIMETER = ",";
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 通用下载请求
 | 
			
		||||
     * 
 | 
			
		||||
     * @param fileName 文件名称
 | 
			
		||||
     * @param delete 是否删除
 | 
			
		||||
     */
 | 
			
		||||
    @GetMapping("/download")
 | 
			
		||||
    public void fileDownload(String fileName, Boolean delete, HttpServletResponse response, HttpServletRequest request)
 | 
			
		||||
    {
 | 
			
		||||
        try
 | 
			
		||||
        {
 | 
			
		||||
            if (!FileUtils.checkAllowDownload(fileName))
 | 
			
		||||
            {
 | 
			
		||||
                throw new Exception(StringUtils.format("文件名称({})非法,不允许下载。 ", fileName));
 | 
			
		||||
            }
 | 
			
		||||
            String realFileName = System.currentTimeMillis() + fileName.substring(fileName.indexOf("_") + 1);
 | 
			
		||||
            String filePath = RuoYiConfig.getDownloadPath() + fileName;
 | 
			
		||||
 | 
			
		||||
            response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
 | 
			
		||||
            FileUtils.setAttachmentResponseHeader(response, realFileName);
 | 
			
		||||
            FileUtils.writeBytes(filePath, response.getOutputStream());
 | 
			
		||||
            if (delete)
 | 
			
		||||
            {
 | 
			
		||||
                FileUtils.deleteFile(filePath);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        catch (Exception e)
 | 
			
		||||
        {
 | 
			
		||||
            log.error("下载文件失败", e);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 通用上传请求(单个)
 | 
			
		||||
     */
 | 
			
		||||
    @PostMapping("/upload")
 | 
			
		||||
    public AjaxResult uploadFile(MultipartFile file) throws Exception
 | 
			
		||||
    {
 | 
			
		||||
        try
 | 
			
		||||
        {
 | 
			
		||||
            /*// 上传文件路径
 | 
			
		||||
            String filePath = RuoYiConfig.getUploadPath();
 | 
			
		||||
            // 上传并返回新文件名称
 | 
			
		||||
            String fileName = FileUploadUtils.upload(filePath, file);
 | 
			
		||||
            String url = serverConfig.getUrl() + fileName;*/
 | 
			
		||||
 | 
			
		||||
            //指定OSS保存文件路径 格式:
 | 
			
		||||
            String objectName = LocalDate.now().format(DateTimeFormatter.ofPattern("yyyy/MM/dd")) + "/";
 | 
			
		||||
 | 
			
		||||
            //上传图片,返回文件信息
 | 
			
		||||
            FileInfo fileInfo = fileStorageService.of(file)
 | 
			
		||||
                    .setPath(objectName) //保存到相对路径下,为了方便管理,不需要可以不写
 | 
			
		||||
                    .upload();  //将文件上传到对应地方
 | 
			
		||||
            AjaxResult ajax = AjaxResult.success();
 | 
			
		||||
            ajax.put("url", fileInfo.getUrl());
 | 
			
		||||
            ajax.put("fileName", fileInfo.getUrl()); //此处的值需要改为url,因为前端的访问地址会做一个判断,如果以http开头就直接显示此图片
 | 
			
		||||
            ajax.put("newFileName", FileUtils.getName(fileInfo.getUrl()));
 | 
			
		||||
            ajax.put("originalFilename", file.getOriginalFilename());
 | 
			
		||||
            return ajax;
 | 
			
		||||
        }
 | 
			
		||||
        catch (Exception e)
 | 
			
		||||
        {
 | 
			
		||||
            return AjaxResult.error(e.getMessage());
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 通用上传请求(多个)
 | 
			
		||||
     */
 | 
			
		||||
    @PostMapping("/uploads")
 | 
			
		||||
    public AjaxResult uploadFiles(List<MultipartFile> files) throws Exception
 | 
			
		||||
    {
 | 
			
		||||
        try
 | 
			
		||||
        {
 | 
			
		||||
            // 上传文件路径
 | 
			
		||||
            String filePath = RuoYiConfig.getUploadPath();
 | 
			
		||||
            List<String> urls = new ArrayList<String>();
 | 
			
		||||
            List<String> fileNames = new ArrayList<String>();
 | 
			
		||||
            List<String> newFileNames = new ArrayList<String>();
 | 
			
		||||
            List<String> originalFilenames = new ArrayList<String>();
 | 
			
		||||
            for (MultipartFile file : files)
 | 
			
		||||
            {
 | 
			
		||||
                // 上传并返回新文件名称
 | 
			
		||||
                String fileName = FileUploadUtils.upload(filePath, file);
 | 
			
		||||
                String url = serverConfig.getUrl() + fileName;
 | 
			
		||||
                urls.add(url);
 | 
			
		||||
                fileNames.add(fileName);
 | 
			
		||||
                newFileNames.add(FileUtils.getName(fileName));
 | 
			
		||||
                originalFilenames.add(file.getOriginalFilename());
 | 
			
		||||
            }
 | 
			
		||||
            AjaxResult ajax = AjaxResult.success();
 | 
			
		||||
            ajax.put("urls", StringUtils.join(urls, FILE_DELIMETER));
 | 
			
		||||
            ajax.put("fileNames", StringUtils.join(fileNames, FILE_DELIMETER));
 | 
			
		||||
            ajax.put("newFileNames", StringUtils.join(newFileNames, FILE_DELIMETER));
 | 
			
		||||
            ajax.put("originalFilenames", StringUtils.join(originalFilenames, FILE_DELIMETER));
 | 
			
		||||
            return ajax;
 | 
			
		||||
        }
 | 
			
		||||
        catch (Exception e)
 | 
			
		||||
        {
 | 
			
		||||
            return AjaxResult.error(e.getMessage());
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 本地资源通用下载
 | 
			
		||||
     */
 | 
			
		||||
    @GetMapping("/download/resource")
 | 
			
		||||
    public void resourceDownload(String resource, HttpServletRequest request, HttpServletResponse response)
 | 
			
		||||
            throws Exception
 | 
			
		||||
    {
 | 
			
		||||
        try
 | 
			
		||||
        {
 | 
			
		||||
            if (!FileUtils.checkAllowDownload(resource))
 | 
			
		||||
            {
 | 
			
		||||
                throw new Exception(StringUtils.format("资源文件({})非法,不允许下载。 ", resource));
 | 
			
		||||
            }
 | 
			
		||||
            // 本地资源路径
 | 
			
		||||
            String localPath = RuoYiConfig.getProfile();
 | 
			
		||||
            // 数据库资源地址
 | 
			
		||||
            String downloadPath = localPath + StringUtils.substringAfter(resource, Constants.RESOURCE_PREFIX);
 | 
			
		||||
            // 下载名称
 | 
			
		||||
            String downloadName = StringUtils.substringAfterLast(downloadPath, "/");
 | 
			
		||||
            response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
 | 
			
		||||
            FileUtils.setAttachmentResponseHeader(response, downloadName);
 | 
			
		||||
            FileUtils.writeBytes(downloadPath, response.getOutputStream());
 | 
			
		||||
        }
 | 
			
		||||
        catch (Exception e)
 | 
			
		||||
        {
 | 
			
		||||
            log.error("下载文件失败", e);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
package com.ruoyi.web.controller.common;
 | 
			
		||||
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import javax.servlet.http.HttpServletRequest;
 | 
			
		||||
import javax.servlet.http.HttpServletResponse;
 | 
			
		||||
import org.slf4j.Logger;
 | 
			
		||||
import org.slf4j.LoggerFactory;
 | 
			
		||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
			
		||||
import org.springframework.http.MediaType;
 | 
			
		||||
import org.springframework.web.bind.annotation.GetMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.PostMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.RequestMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.RestController;
 | 
			
		||||
import org.springframework.web.multipart.MultipartFile;
 | 
			
		||||
import com.ruoyi.common.config.RuoYiConfig;
 | 
			
		||||
import com.ruoyi.common.constant.Constants;
 | 
			
		||||
import com.ruoyi.common.core.domain.AjaxResult;
 | 
			
		||||
import com.ruoyi.common.utils.StringUtils;
 | 
			
		||||
import com.ruoyi.common.utils.file.FileUploadUtils;
 | 
			
		||||
import com.ruoyi.common.utils.file.FileUtils;
 | 
			
		||||
import com.ruoyi.framework.config.ServerConfig;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 通用请求处理
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
@RestController
 | 
			
		||||
@RequestMapping("/common")
 | 
			
		||||
public class CommonController
 | 
			
		||||
{
 | 
			
		||||
    private static final Logger log = LoggerFactory.getLogger(CommonController.class);
 | 
			
		||||
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private ServerConfig serverConfig;
 | 
			
		||||
 | 
			
		||||
    private static final String FILE_DELIMETER = ",";
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 通用下载请求
 | 
			
		||||
     * 
 | 
			
		||||
     * @param fileName 文件名称
 | 
			
		||||
     * @param delete 是否删除
 | 
			
		||||
     */
 | 
			
		||||
    @GetMapping("/download")
 | 
			
		||||
    public void fileDownload(String fileName, Boolean delete, HttpServletResponse response, HttpServletRequest request)
 | 
			
		||||
    {
 | 
			
		||||
        try
 | 
			
		||||
        {
 | 
			
		||||
            if (!FileUtils.checkAllowDownload(fileName))
 | 
			
		||||
            {
 | 
			
		||||
                throw new Exception(StringUtils.format("文件名称({})非法,不允许下载。 ", fileName));
 | 
			
		||||
            }
 | 
			
		||||
            String realFileName = System.currentTimeMillis() + fileName.substring(fileName.indexOf("_") + 1);
 | 
			
		||||
            String filePath = RuoYiConfig.getDownloadPath() + fileName;
 | 
			
		||||
 | 
			
		||||
            response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
 | 
			
		||||
            FileUtils.setAttachmentResponseHeader(response, realFileName);
 | 
			
		||||
            FileUtils.writeBytes(filePath, response.getOutputStream());
 | 
			
		||||
            if (delete)
 | 
			
		||||
            {
 | 
			
		||||
                FileUtils.deleteFile(filePath);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        catch (Exception e)
 | 
			
		||||
        {
 | 
			
		||||
            log.error("下载文件失败", e);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 通用上传请求(单个)
 | 
			
		||||
     */
 | 
			
		||||
    @PostMapping("/upload")
 | 
			
		||||
    public AjaxResult uploadFile(MultipartFile file) throws Exception
 | 
			
		||||
    {
 | 
			
		||||
        try
 | 
			
		||||
        {
 | 
			
		||||
            // 上传文件路径
 | 
			
		||||
            String filePath = RuoYiConfig.getUploadPath();
 | 
			
		||||
            // 上传并返回新文件名称
 | 
			
		||||
            String fileName = FileUploadUtils.upload(filePath, file);
 | 
			
		||||
            String url = serverConfig.getUrl() + fileName;
 | 
			
		||||
            AjaxResult ajax = AjaxResult.success();
 | 
			
		||||
            ajax.put("url", url);
 | 
			
		||||
            ajax.put("fileName", fileName);
 | 
			
		||||
            ajax.put("newFileName", FileUtils.getName(fileName));
 | 
			
		||||
            ajax.put("originalFilename", file.getOriginalFilename());
 | 
			
		||||
            return ajax;
 | 
			
		||||
        }
 | 
			
		||||
        catch (Exception e)
 | 
			
		||||
        {
 | 
			
		||||
            return AjaxResult.error(e.getMessage());
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 通用上传请求(多个)
 | 
			
		||||
     */
 | 
			
		||||
    @PostMapping("/uploads")
 | 
			
		||||
    public AjaxResult uploadFiles(List<MultipartFile> files) throws Exception
 | 
			
		||||
    {
 | 
			
		||||
        try
 | 
			
		||||
        {
 | 
			
		||||
            // 上传文件路径
 | 
			
		||||
            String filePath = RuoYiConfig.getUploadPath();
 | 
			
		||||
            List<String> urls = new ArrayList<String>();
 | 
			
		||||
            List<String> fileNames = new ArrayList<String>();
 | 
			
		||||
            List<String> newFileNames = new ArrayList<String>();
 | 
			
		||||
            List<String> originalFilenames = new ArrayList<String>();
 | 
			
		||||
            for (MultipartFile file : files)
 | 
			
		||||
            {
 | 
			
		||||
                // 上传并返回新文件名称
 | 
			
		||||
                String fileName = FileUploadUtils.upload(filePath, file);
 | 
			
		||||
                String url = serverConfig.getUrl() + fileName;
 | 
			
		||||
                urls.add(url);
 | 
			
		||||
                fileNames.add(fileName);
 | 
			
		||||
                newFileNames.add(FileUtils.getName(fileName));
 | 
			
		||||
                originalFilenames.add(file.getOriginalFilename());
 | 
			
		||||
            }
 | 
			
		||||
            AjaxResult ajax = AjaxResult.success();
 | 
			
		||||
            ajax.put("urls", StringUtils.join(urls, FILE_DELIMETER));
 | 
			
		||||
            ajax.put("fileNames", StringUtils.join(fileNames, FILE_DELIMETER));
 | 
			
		||||
            ajax.put("newFileNames", StringUtils.join(newFileNames, FILE_DELIMETER));
 | 
			
		||||
            ajax.put("originalFilenames", StringUtils.join(originalFilenames, FILE_DELIMETER));
 | 
			
		||||
            return ajax;
 | 
			
		||||
        }
 | 
			
		||||
        catch (Exception e)
 | 
			
		||||
        {
 | 
			
		||||
            return AjaxResult.error(e.getMessage());
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 本地资源通用下载
 | 
			
		||||
     */
 | 
			
		||||
    @GetMapping("/download/resource")
 | 
			
		||||
    public void resourceDownload(String resource, HttpServletRequest request, HttpServletResponse response)
 | 
			
		||||
            throws Exception
 | 
			
		||||
    {
 | 
			
		||||
        try
 | 
			
		||||
        {
 | 
			
		||||
            if (!FileUtils.checkAllowDownload(resource))
 | 
			
		||||
            {
 | 
			
		||||
                throw new Exception(StringUtils.format("资源文件({})非法,不允许下载。 ", resource));
 | 
			
		||||
            }
 | 
			
		||||
            // 本地资源路径
 | 
			
		||||
            String localPath = RuoYiConfig.getProfile();
 | 
			
		||||
            // 数据库资源地址
 | 
			
		||||
            String downloadPath = localPath + StringUtils.substringAfter(resource, Constants.RESOURCE_PREFIX);
 | 
			
		||||
            // 下载名称
 | 
			
		||||
            String downloadName = StringUtils.substringAfterLast(downloadPath, "/");
 | 
			
		||||
            response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
 | 
			
		||||
            FileUtils.setAttachmentResponseHeader(response, downloadName);
 | 
			
		||||
            FileUtils.writeBytes(downloadPath, response.getOutputStream());
 | 
			
		||||
        }
 | 
			
		||||
        catch (Exception e)
 | 
			
		||||
        {
 | 
			
		||||
            log.error("下载文件失败", e);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,121 +1,121 @@
 | 
			
		|||
package com.tcctlo.web.controller.monitor;
 | 
			
		||||
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.Collection;
 | 
			
		||||
import java.util.HashMap;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
import java.util.Properties;
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
import java.util.TreeSet;
 | 
			
		||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
			
		||||
import org.springframework.data.redis.core.RedisCallback;
 | 
			
		||||
import org.springframework.data.redis.core.RedisTemplate;
 | 
			
		||||
import org.springframework.security.access.prepost.PreAuthorize;
 | 
			
		||||
import org.springframework.web.bind.annotation.DeleteMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.GetMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.PathVariable;
 | 
			
		||||
import org.springframework.web.bind.annotation.RequestMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.RestController;
 | 
			
		||||
import com.tcctlo.common.constant.CacheConstants;
 | 
			
		||||
import com.tcctlo.common.core.domain.AjaxResult;
 | 
			
		||||
import com.tcctlo.common.utils.StringUtils;
 | 
			
		||||
import com.tcctlo.system.domain.SysCache;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 缓存监控
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
@RestController
 | 
			
		||||
@RequestMapping("/monitor/cache")
 | 
			
		||||
public class CacheController
 | 
			
		||||
{
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private RedisTemplate<String, String> redisTemplate;
 | 
			
		||||
 | 
			
		||||
    private final static List<SysCache> caches = new ArrayList<SysCache>();
 | 
			
		||||
    {
 | 
			
		||||
        caches.add(new SysCache(CacheConstants.LOGIN_TOKEN_KEY, "用户信息"));
 | 
			
		||||
        caches.add(new SysCache(CacheConstants.SYS_CONFIG_KEY, "配置信息"));
 | 
			
		||||
        caches.add(new SysCache(CacheConstants.SYS_DICT_KEY, "数据字典"));
 | 
			
		||||
        caches.add(new SysCache(CacheConstants.CAPTCHA_CODE_KEY, "验证码"));
 | 
			
		||||
        caches.add(new SysCache(CacheConstants.REPEAT_SUBMIT_KEY, "防重提交"));
 | 
			
		||||
        caches.add(new SysCache(CacheConstants.RATE_LIMIT_KEY, "限流处理"));
 | 
			
		||||
        caches.add(new SysCache(CacheConstants.PWD_ERR_CNT_KEY, "密码错误次数"));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('monitor:cache:list')")
 | 
			
		||||
    @GetMapping()
 | 
			
		||||
    public AjaxResult getInfo() throws Exception
 | 
			
		||||
    {
 | 
			
		||||
        Properties info = (Properties) redisTemplate.execute((RedisCallback<Object>) connection -> connection.info());
 | 
			
		||||
        Properties commandStats = (Properties) redisTemplate.execute((RedisCallback<Object>) connection -> connection.info("commandstats"));
 | 
			
		||||
        Object dbSize = redisTemplate.execute((RedisCallback<Object>) connection -> connection.dbSize());
 | 
			
		||||
 | 
			
		||||
        Map<String, Object> result = new HashMap<>(3);
 | 
			
		||||
        result.put("info", info);
 | 
			
		||||
        result.put("dbSize", dbSize);
 | 
			
		||||
 | 
			
		||||
        List<Map<String, String>> pieList = new ArrayList<>();
 | 
			
		||||
        commandStats.stringPropertyNames().forEach(key -> {
 | 
			
		||||
            Map<String, String> data = new HashMap<>(2);
 | 
			
		||||
            String property = commandStats.getProperty(key);
 | 
			
		||||
            data.put("name", StringUtils.removeStart(key, "cmdstat_"));
 | 
			
		||||
            data.put("value", StringUtils.substringBetween(property, "calls=", ",usec"));
 | 
			
		||||
            pieList.add(data);
 | 
			
		||||
        });
 | 
			
		||||
        result.put("commandStats", pieList);
 | 
			
		||||
        return AjaxResult.success(result);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('monitor:cache:list')")
 | 
			
		||||
    @GetMapping("/getNames")
 | 
			
		||||
    public AjaxResult cache()
 | 
			
		||||
    {
 | 
			
		||||
        return AjaxResult.success(caches);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('monitor:cache:list')")
 | 
			
		||||
    @GetMapping("/getKeys/{cacheName}")
 | 
			
		||||
    public AjaxResult getCacheKeys(@PathVariable String cacheName)
 | 
			
		||||
    {
 | 
			
		||||
        Set<String> cacheKeys = redisTemplate.keys(cacheName + "*");
 | 
			
		||||
        return AjaxResult.success(new TreeSet<>(cacheKeys));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('monitor:cache:list')")
 | 
			
		||||
    @GetMapping("/getValue/{cacheName}/{cacheKey}")
 | 
			
		||||
    public AjaxResult getCacheValue(@PathVariable String cacheName, @PathVariable String cacheKey)
 | 
			
		||||
    {
 | 
			
		||||
        String cacheValue = redisTemplate.opsForValue().get(cacheKey);
 | 
			
		||||
        SysCache sysCache = new SysCache(cacheName, cacheKey, cacheValue);
 | 
			
		||||
        return AjaxResult.success(sysCache);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('monitor:cache:list')")
 | 
			
		||||
    @DeleteMapping("/clearCacheName/{cacheName}")
 | 
			
		||||
    public AjaxResult clearCacheName(@PathVariable String cacheName)
 | 
			
		||||
    {
 | 
			
		||||
        Collection<String> cacheKeys = redisTemplate.keys(cacheName + "*");
 | 
			
		||||
        redisTemplate.delete(cacheKeys);
 | 
			
		||||
        return AjaxResult.success();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('monitor:cache:list')")
 | 
			
		||||
    @DeleteMapping("/clearCacheKey/{cacheKey}")
 | 
			
		||||
    public AjaxResult clearCacheKey(@PathVariable String cacheKey)
 | 
			
		||||
    {
 | 
			
		||||
        redisTemplate.delete(cacheKey);
 | 
			
		||||
        return AjaxResult.success();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('monitor:cache:list')")
 | 
			
		||||
    @DeleteMapping("/clearCacheAll")
 | 
			
		||||
    public AjaxResult clearCacheAll()
 | 
			
		||||
    {
 | 
			
		||||
        Collection<String> cacheKeys = redisTemplate.keys("*");
 | 
			
		||||
        redisTemplate.delete(cacheKeys);
 | 
			
		||||
        return AjaxResult.success();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
package com.ruoyi.web.controller.monitor;
 | 
			
		||||
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.Collection;
 | 
			
		||||
import java.util.HashMap;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
import java.util.Properties;
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
import java.util.TreeSet;
 | 
			
		||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
			
		||||
import org.springframework.data.redis.core.RedisCallback;
 | 
			
		||||
import org.springframework.data.redis.core.RedisTemplate;
 | 
			
		||||
import org.springframework.security.access.prepost.PreAuthorize;
 | 
			
		||||
import org.springframework.web.bind.annotation.DeleteMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.GetMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.PathVariable;
 | 
			
		||||
import org.springframework.web.bind.annotation.RequestMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.RestController;
 | 
			
		||||
import com.ruoyi.common.constant.CacheConstants;
 | 
			
		||||
import com.ruoyi.common.core.domain.AjaxResult;
 | 
			
		||||
import com.ruoyi.common.utils.StringUtils;
 | 
			
		||||
import com.ruoyi.system.domain.SysCache;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 缓存监控
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
@RestController
 | 
			
		||||
@RequestMapping("/monitor/cache")
 | 
			
		||||
public class CacheController
 | 
			
		||||
{
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private RedisTemplate<String, String> redisTemplate;
 | 
			
		||||
 | 
			
		||||
    private final static List<SysCache> caches = new ArrayList<SysCache>();
 | 
			
		||||
    {
 | 
			
		||||
        caches.add(new SysCache(CacheConstants.LOGIN_TOKEN_KEY, "用户信息"));
 | 
			
		||||
        caches.add(new SysCache(CacheConstants.SYS_CONFIG_KEY, "配置信息"));
 | 
			
		||||
        caches.add(new SysCache(CacheConstants.SYS_DICT_KEY, "数据字典"));
 | 
			
		||||
        caches.add(new SysCache(CacheConstants.CAPTCHA_CODE_KEY, "验证码"));
 | 
			
		||||
        caches.add(new SysCache(CacheConstants.REPEAT_SUBMIT_KEY, "防重提交"));
 | 
			
		||||
        caches.add(new SysCache(CacheConstants.RATE_LIMIT_KEY, "限流处理"));
 | 
			
		||||
        caches.add(new SysCache(CacheConstants.PWD_ERR_CNT_KEY, "密码错误次数"));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('monitor:cache:list')")
 | 
			
		||||
    @GetMapping()
 | 
			
		||||
    public AjaxResult getInfo() throws Exception
 | 
			
		||||
    {
 | 
			
		||||
        Properties info = (Properties) redisTemplate.execute((RedisCallback<Object>) connection -> connection.info());
 | 
			
		||||
        Properties commandStats = (Properties) redisTemplate.execute((RedisCallback<Object>) connection -> connection.info("commandstats"));
 | 
			
		||||
        Object dbSize = redisTemplate.execute((RedisCallback<Object>) connection -> connection.dbSize());
 | 
			
		||||
 | 
			
		||||
        Map<String, Object> result = new HashMap<>(3);
 | 
			
		||||
        result.put("info", info);
 | 
			
		||||
        result.put("dbSize", dbSize);
 | 
			
		||||
 | 
			
		||||
        List<Map<String, String>> pieList = new ArrayList<>();
 | 
			
		||||
        commandStats.stringPropertyNames().forEach(key -> {
 | 
			
		||||
            Map<String, String> data = new HashMap<>(2);
 | 
			
		||||
            String property = commandStats.getProperty(key);
 | 
			
		||||
            data.put("name", StringUtils.removeStart(key, "cmdstat_"));
 | 
			
		||||
            data.put("value", StringUtils.substringBetween(property, "calls=", ",usec"));
 | 
			
		||||
            pieList.add(data);
 | 
			
		||||
        });
 | 
			
		||||
        result.put("commandStats", pieList);
 | 
			
		||||
        return AjaxResult.success(result);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('monitor:cache:list')")
 | 
			
		||||
    @GetMapping("/getNames")
 | 
			
		||||
    public AjaxResult cache()
 | 
			
		||||
    {
 | 
			
		||||
        return AjaxResult.success(caches);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('monitor:cache:list')")
 | 
			
		||||
    @GetMapping("/getKeys/{cacheName}")
 | 
			
		||||
    public AjaxResult getCacheKeys(@PathVariable String cacheName)
 | 
			
		||||
    {
 | 
			
		||||
        Set<String> cacheKeys = redisTemplate.keys(cacheName + "*");
 | 
			
		||||
        return AjaxResult.success(new TreeSet<>(cacheKeys));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('monitor:cache:list')")
 | 
			
		||||
    @GetMapping("/getValue/{cacheName}/{cacheKey}")
 | 
			
		||||
    public AjaxResult getCacheValue(@PathVariable String cacheName, @PathVariable String cacheKey)
 | 
			
		||||
    {
 | 
			
		||||
        String cacheValue = redisTemplate.opsForValue().get(cacheKey);
 | 
			
		||||
        SysCache sysCache = new SysCache(cacheName, cacheKey, cacheValue);
 | 
			
		||||
        return AjaxResult.success(sysCache);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('monitor:cache:list')")
 | 
			
		||||
    @DeleteMapping("/clearCacheName/{cacheName}")
 | 
			
		||||
    public AjaxResult clearCacheName(@PathVariable String cacheName)
 | 
			
		||||
    {
 | 
			
		||||
        Collection<String> cacheKeys = redisTemplate.keys(cacheName + "*");
 | 
			
		||||
        redisTemplate.delete(cacheKeys);
 | 
			
		||||
        return AjaxResult.success();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('monitor:cache:list')")
 | 
			
		||||
    @DeleteMapping("/clearCacheKey/{cacheKey}")
 | 
			
		||||
    public AjaxResult clearCacheKey(@PathVariable String cacheKey)
 | 
			
		||||
    {
 | 
			
		||||
        redisTemplate.delete(cacheKey);
 | 
			
		||||
        return AjaxResult.success();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('monitor:cache:list')")
 | 
			
		||||
    @DeleteMapping("/clearCacheAll")
 | 
			
		||||
    public AjaxResult clearCacheAll()
 | 
			
		||||
    {
 | 
			
		||||
        Collection<String> cacheKeys = redisTemplate.keys("*");
 | 
			
		||||
        redisTemplate.delete(cacheKeys);
 | 
			
		||||
        return AjaxResult.success();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,27 +1,27 @@
 | 
			
		|||
package com.tcctlo.web.controller.monitor;
 | 
			
		||||
 | 
			
		||||
import org.springframework.security.access.prepost.PreAuthorize;
 | 
			
		||||
import org.springframework.web.bind.annotation.GetMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.RequestMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.RestController;
 | 
			
		||||
import com.tcctlo.common.core.domain.AjaxResult;
 | 
			
		||||
import com.tcctlo.framework.web.domain.Server;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 服务器监控
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
@RestController
 | 
			
		||||
@RequestMapping("/monitor/server")
 | 
			
		||||
public class ServerController
 | 
			
		||||
{
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('monitor:server:list')")
 | 
			
		||||
    @GetMapping()
 | 
			
		||||
    public AjaxResult getInfo() throws Exception
 | 
			
		||||
    {
 | 
			
		||||
        Server server = new Server();
 | 
			
		||||
        server.copyTo();
 | 
			
		||||
        return AjaxResult.success(server);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
package com.ruoyi.web.controller.monitor;
 | 
			
		||||
 | 
			
		||||
import org.springframework.security.access.prepost.PreAuthorize;
 | 
			
		||||
import org.springframework.web.bind.annotation.GetMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.RequestMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.RestController;
 | 
			
		||||
import com.ruoyi.common.core.domain.AjaxResult;
 | 
			
		||||
import com.ruoyi.framework.web.domain.Server;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 服务器监控
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
@RestController
 | 
			
		||||
@RequestMapping("/monitor/server")
 | 
			
		||||
public class ServerController
 | 
			
		||||
{
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('monitor:server:list')")
 | 
			
		||||
    @GetMapping()
 | 
			
		||||
    public AjaxResult getInfo() throws Exception
 | 
			
		||||
    {
 | 
			
		||||
        Server server = new Server();
 | 
			
		||||
        server.copyTo();
 | 
			
		||||
        return AjaxResult.success(server);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,82 +1,82 @@
 | 
			
		|||
package com.tcctlo.web.controller.monitor;
 | 
			
		||||
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import javax.servlet.http.HttpServletResponse;
 | 
			
		||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
			
		||||
import org.springframework.security.access.prepost.PreAuthorize;
 | 
			
		||||
import org.springframework.web.bind.annotation.DeleteMapping;
 | 
			
		||||
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.RequestMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.RestController;
 | 
			
		||||
import com.tcctlo.common.annotation.Log;
 | 
			
		||||
import com.tcctlo.common.core.controller.BaseController;
 | 
			
		||||
import com.tcctlo.common.core.domain.AjaxResult;
 | 
			
		||||
import com.tcctlo.common.core.page.TableDataInfo;
 | 
			
		||||
import com.tcctlo.common.enums.BusinessType;
 | 
			
		||||
import com.tcctlo.common.utils.poi.ExcelUtil;
 | 
			
		||||
import com.tcctlo.framework.web.service.SysPasswordService;
 | 
			
		||||
import com.tcctlo.system.domain.SysLogininfor;
 | 
			
		||||
import com.tcctlo.system.service.ISysLogininforService;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 系统访问记录
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
@RestController
 | 
			
		||||
@RequestMapping("/monitor/logininfor")
 | 
			
		||||
public class SysLogininforController extends BaseController
 | 
			
		||||
{
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private ISysLogininforService logininforService;
 | 
			
		||||
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private SysPasswordService passwordService;
 | 
			
		||||
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('monitor:logininfor:list')")
 | 
			
		||||
    @GetMapping("/list")
 | 
			
		||||
    public TableDataInfo list(SysLogininfor logininfor)
 | 
			
		||||
    {
 | 
			
		||||
        startPage();
 | 
			
		||||
        List<SysLogininfor> list = logininforService.selectLogininforList(logininfor);
 | 
			
		||||
        return getDataTable(list);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Log(title = "登录日志", businessType = BusinessType.EXPORT)
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('monitor:logininfor:export')")
 | 
			
		||||
    @PostMapping("/export")
 | 
			
		||||
    public void export(HttpServletResponse response, SysLogininfor logininfor)
 | 
			
		||||
    {
 | 
			
		||||
        List<SysLogininfor> list = logininforService.selectLogininforList(logininfor);
 | 
			
		||||
        ExcelUtil<SysLogininfor> util = new ExcelUtil<SysLogininfor>(SysLogininfor.class);
 | 
			
		||||
        util.exportExcel(response, list, "登录日志");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('monitor:logininfor:remove')")
 | 
			
		||||
    @Log(title = "登录日志", businessType = BusinessType.DELETE)
 | 
			
		||||
    @DeleteMapping("/{infoIds}")
 | 
			
		||||
    public AjaxResult remove(@PathVariable Long[] infoIds)
 | 
			
		||||
    {
 | 
			
		||||
        return toAjax(logininforService.deleteLogininforByIds(infoIds));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('monitor:logininfor:remove')")
 | 
			
		||||
    @Log(title = "登录日志", businessType = BusinessType.CLEAN)
 | 
			
		||||
    @DeleteMapping("/clean")
 | 
			
		||||
    public AjaxResult clean()
 | 
			
		||||
    {
 | 
			
		||||
        logininforService.cleanLogininfor();
 | 
			
		||||
        return success();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('monitor:logininfor:unlock')")
 | 
			
		||||
    @Log(title = "账户解锁", businessType = BusinessType.OTHER)
 | 
			
		||||
    @GetMapping("/unlock/{userName}")
 | 
			
		||||
    public AjaxResult unlock(@PathVariable("userName") String userName)
 | 
			
		||||
    {
 | 
			
		||||
        passwordService.clearLoginRecordCache(userName);
 | 
			
		||||
        return success();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
package com.ruoyi.web.controller.monitor;
 | 
			
		||||
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import javax.servlet.http.HttpServletResponse;
 | 
			
		||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
			
		||||
import org.springframework.security.access.prepost.PreAuthorize;
 | 
			
		||||
import org.springframework.web.bind.annotation.DeleteMapping;
 | 
			
		||||
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.RequestMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.RestController;
 | 
			
		||||
import com.ruoyi.common.annotation.Log;
 | 
			
		||||
import com.ruoyi.common.core.controller.BaseController;
 | 
			
		||||
import com.ruoyi.common.core.domain.AjaxResult;
 | 
			
		||||
import com.ruoyi.common.core.page.TableDataInfo;
 | 
			
		||||
import com.ruoyi.common.enums.BusinessType;
 | 
			
		||||
import com.ruoyi.common.utils.poi.ExcelUtil;
 | 
			
		||||
import com.ruoyi.framework.web.service.SysPasswordService;
 | 
			
		||||
import com.ruoyi.system.domain.SysLogininfor;
 | 
			
		||||
import com.ruoyi.system.service.ISysLogininforService;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 系统访问记录
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
@RestController
 | 
			
		||||
@RequestMapping("/monitor/logininfor")
 | 
			
		||||
public class SysLogininforController extends BaseController
 | 
			
		||||
{
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private ISysLogininforService logininforService;
 | 
			
		||||
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private SysPasswordService passwordService;
 | 
			
		||||
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('monitor:logininfor:list')")
 | 
			
		||||
    @GetMapping("/list")
 | 
			
		||||
    public TableDataInfo list(SysLogininfor logininfor)
 | 
			
		||||
    {
 | 
			
		||||
        startPage();
 | 
			
		||||
        List<SysLogininfor> list = logininforService.selectLogininforList(logininfor);
 | 
			
		||||
        return getDataTable(list);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Log(title = "登录日志", businessType = BusinessType.EXPORT)
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('monitor:logininfor:export')")
 | 
			
		||||
    @PostMapping("/export")
 | 
			
		||||
    public void export(HttpServletResponse response, SysLogininfor logininfor)
 | 
			
		||||
    {
 | 
			
		||||
        List<SysLogininfor> list = logininforService.selectLogininforList(logininfor);
 | 
			
		||||
        ExcelUtil<SysLogininfor> util = new ExcelUtil<SysLogininfor>(SysLogininfor.class);
 | 
			
		||||
        util.exportExcel(response, list, "登录日志");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('monitor:logininfor:remove')")
 | 
			
		||||
    @Log(title = "登录日志", businessType = BusinessType.DELETE)
 | 
			
		||||
    @DeleteMapping("/{infoIds}")
 | 
			
		||||
    public AjaxResult remove(@PathVariable Long[] infoIds)
 | 
			
		||||
    {
 | 
			
		||||
        return toAjax(logininforService.deleteLogininforByIds(infoIds));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('monitor:logininfor:remove')")
 | 
			
		||||
    @Log(title = "登录日志", businessType = BusinessType.CLEAN)
 | 
			
		||||
    @DeleteMapping("/clean")
 | 
			
		||||
    public AjaxResult clean()
 | 
			
		||||
    {
 | 
			
		||||
        logininforService.cleanLogininfor();
 | 
			
		||||
        return success();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('monitor:logininfor:unlock')")
 | 
			
		||||
    @Log(title = "账户解锁", businessType = BusinessType.OTHER)
 | 
			
		||||
    @GetMapping("/unlock/{userName}")
 | 
			
		||||
    public AjaxResult unlock(@PathVariable("userName") String userName)
 | 
			
		||||
    {
 | 
			
		||||
        passwordService.clearLoginRecordCache(userName);
 | 
			
		||||
        return success();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,69 +1,69 @@
 | 
			
		|||
package com.tcctlo.web.controller.monitor;
 | 
			
		||||
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import javax.servlet.http.HttpServletResponse;
 | 
			
		||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
			
		||||
import org.springframework.security.access.prepost.PreAuthorize;
 | 
			
		||||
import org.springframework.web.bind.annotation.DeleteMapping;
 | 
			
		||||
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.RequestMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.RestController;
 | 
			
		||||
import com.tcctlo.common.annotation.Log;
 | 
			
		||||
import com.tcctlo.common.core.controller.BaseController;
 | 
			
		||||
import com.tcctlo.common.core.domain.AjaxResult;
 | 
			
		||||
import com.tcctlo.common.core.page.TableDataInfo;
 | 
			
		||||
import com.tcctlo.common.enums.BusinessType;
 | 
			
		||||
import com.tcctlo.common.utils.poi.ExcelUtil;
 | 
			
		||||
import com.tcctlo.system.domain.SysOperLog;
 | 
			
		||||
import com.tcctlo.system.service.ISysOperLogService;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 操作日志记录
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
@RestController
 | 
			
		||||
@RequestMapping("/monitor/operlog")
 | 
			
		||||
public class SysOperlogController extends BaseController
 | 
			
		||||
{
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private ISysOperLogService operLogService;
 | 
			
		||||
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('monitor:operlog:list')")
 | 
			
		||||
    @GetMapping("/list")
 | 
			
		||||
    public TableDataInfo list(SysOperLog operLog)
 | 
			
		||||
    {
 | 
			
		||||
        startPage();
 | 
			
		||||
        List<SysOperLog> list = operLogService.selectOperLogList(operLog);
 | 
			
		||||
        return getDataTable(list);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Log(title = "操作日志", businessType = BusinessType.EXPORT)
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('monitor:operlog:export')")
 | 
			
		||||
    @PostMapping("/export")
 | 
			
		||||
    public void export(HttpServletResponse response, SysOperLog operLog)
 | 
			
		||||
    {
 | 
			
		||||
        List<SysOperLog> list = operLogService.selectOperLogList(operLog);
 | 
			
		||||
        ExcelUtil<SysOperLog> util = new ExcelUtil<SysOperLog>(SysOperLog.class);
 | 
			
		||||
        util.exportExcel(response, list, "操作日志");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Log(title = "操作日志", businessType = BusinessType.DELETE)
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('monitor:operlog:remove')")
 | 
			
		||||
    @DeleteMapping("/{operIds}")
 | 
			
		||||
    public AjaxResult remove(@PathVariable Long[] operIds)
 | 
			
		||||
    {
 | 
			
		||||
        return toAjax(operLogService.deleteOperLogByIds(operIds));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Log(title = "操作日志", businessType = BusinessType.CLEAN)
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('monitor:operlog:remove')")
 | 
			
		||||
    @DeleteMapping("/clean")
 | 
			
		||||
    public AjaxResult clean()
 | 
			
		||||
    {
 | 
			
		||||
        operLogService.cleanOperLog();
 | 
			
		||||
        return success();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
package com.ruoyi.web.controller.monitor;
 | 
			
		||||
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import javax.servlet.http.HttpServletResponse;
 | 
			
		||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
			
		||||
import org.springframework.security.access.prepost.PreAuthorize;
 | 
			
		||||
import org.springframework.web.bind.annotation.DeleteMapping;
 | 
			
		||||
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.RequestMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.RestController;
 | 
			
		||||
import com.ruoyi.common.annotation.Log;
 | 
			
		||||
import com.ruoyi.common.core.controller.BaseController;
 | 
			
		||||
import com.ruoyi.common.core.domain.AjaxResult;
 | 
			
		||||
import com.ruoyi.common.core.page.TableDataInfo;
 | 
			
		||||
import com.ruoyi.common.enums.BusinessType;
 | 
			
		||||
import com.ruoyi.common.utils.poi.ExcelUtil;
 | 
			
		||||
import com.ruoyi.system.domain.SysOperLog;
 | 
			
		||||
import com.ruoyi.system.service.ISysOperLogService;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 操作日志记录
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
@RestController
 | 
			
		||||
@RequestMapping("/monitor/operlog")
 | 
			
		||||
public class SysOperlogController extends BaseController
 | 
			
		||||
{
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private ISysOperLogService operLogService;
 | 
			
		||||
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('monitor:operlog:list')")
 | 
			
		||||
    @GetMapping("/list")
 | 
			
		||||
    public TableDataInfo list(SysOperLog operLog)
 | 
			
		||||
    {
 | 
			
		||||
        startPage();
 | 
			
		||||
        List<SysOperLog> list = operLogService.selectOperLogList(operLog);
 | 
			
		||||
        return getDataTable(list);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Log(title = "操作日志", businessType = BusinessType.EXPORT)
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('monitor:operlog:export')")
 | 
			
		||||
    @PostMapping("/export")
 | 
			
		||||
    public void export(HttpServletResponse response, SysOperLog operLog)
 | 
			
		||||
    {
 | 
			
		||||
        List<SysOperLog> list = operLogService.selectOperLogList(operLog);
 | 
			
		||||
        ExcelUtil<SysOperLog> util = new ExcelUtil<SysOperLog>(SysOperLog.class);
 | 
			
		||||
        util.exportExcel(response, list, "操作日志");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Log(title = "操作日志", businessType = BusinessType.DELETE)
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('monitor:operlog:remove')")
 | 
			
		||||
    @DeleteMapping("/{operIds}")
 | 
			
		||||
    public AjaxResult remove(@PathVariable Long[] operIds)
 | 
			
		||||
    {
 | 
			
		||||
        return toAjax(operLogService.deleteOperLogByIds(operIds));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Log(title = "操作日志", businessType = BusinessType.CLEAN)
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('monitor:operlog:remove')")
 | 
			
		||||
    @DeleteMapping("/clean")
 | 
			
		||||
    public AjaxResult clean()
 | 
			
		||||
    {
 | 
			
		||||
        operLogService.cleanOperLog();
 | 
			
		||||
        return success();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,83 +1,83 @@
 | 
			
		|||
package com.tcctlo.web.controller.monitor;
 | 
			
		||||
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.Collection;
 | 
			
		||||
import java.util.Collections;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
			
		||||
import org.springframework.security.access.prepost.PreAuthorize;
 | 
			
		||||
import org.springframework.web.bind.annotation.DeleteMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.GetMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.PathVariable;
 | 
			
		||||
import org.springframework.web.bind.annotation.RequestMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.RestController;
 | 
			
		||||
import com.tcctlo.common.annotation.Log;
 | 
			
		||||
import com.tcctlo.common.constant.CacheConstants;
 | 
			
		||||
import com.tcctlo.common.core.controller.BaseController;
 | 
			
		||||
import com.tcctlo.common.core.domain.AjaxResult;
 | 
			
		||||
import com.tcctlo.common.core.domain.model.LoginUser;
 | 
			
		||||
import com.tcctlo.common.core.page.TableDataInfo;
 | 
			
		||||
import com.tcctlo.common.core.redis.RedisCache;
 | 
			
		||||
import com.tcctlo.common.enums.BusinessType;
 | 
			
		||||
import com.tcctlo.common.utils.StringUtils;
 | 
			
		||||
import com.tcctlo.system.domain.SysUserOnline;
 | 
			
		||||
import com.tcctlo.system.service.ISysUserOnlineService;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 在线用户监控
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
@RestController
 | 
			
		||||
@RequestMapping("/monitor/online")
 | 
			
		||||
public class SysUserOnlineController extends BaseController
 | 
			
		||||
{
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private ISysUserOnlineService userOnlineService;
 | 
			
		||||
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private RedisCache redisCache;
 | 
			
		||||
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('monitor:online:list')")
 | 
			
		||||
    @GetMapping("/list")
 | 
			
		||||
    public TableDataInfo list(String ipaddr, String userName)
 | 
			
		||||
    {
 | 
			
		||||
        Collection<String> keys = redisCache.keys(CacheConstants.LOGIN_TOKEN_KEY + "*");
 | 
			
		||||
        List<SysUserOnline> userOnlineList = new ArrayList<SysUserOnline>();
 | 
			
		||||
        for (String key : keys)
 | 
			
		||||
        {
 | 
			
		||||
            LoginUser user = redisCache.getCacheObject(key);
 | 
			
		||||
            if (StringUtils.isNotEmpty(ipaddr) && StringUtils.isNotEmpty(userName))
 | 
			
		||||
            {
 | 
			
		||||
                userOnlineList.add(userOnlineService.selectOnlineByInfo(ipaddr, userName, user));
 | 
			
		||||
            }
 | 
			
		||||
            else if (StringUtils.isNotEmpty(ipaddr))
 | 
			
		||||
            {
 | 
			
		||||
                userOnlineList.add(userOnlineService.selectOnlineByIpaddr(ipaddr, user));
 | 
			
		||||
            }
 | 
			
		||||
            else if (StringUtils.isNotEmpty(userName) && StringUtils.isNotNull(user.getUser()))
 | 
			
		||||
            {
 | 
			
		||||
                userOnlineList.add(userOnlineService.selectOnlineByUserName(userName, user));
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                userOnlineList.add(userOnlineService.loginUserToUserOnline(user));
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        Collections.reverse(userOnlineList);
 | 
			
		||||
        userOnlineList.removeAll(Collections.singleton(null));
 | 
			
		||||
        return getDataTable(userOnlineList);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 强退用户
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('monitor:online:forceLogout')")
 | 
			
		||||
    @Log(title = "在线用户", businessType = BusinessType.FORCE)
 | 
			
		||||
    @DeleteMapping("/{tokenId}")
 | 
			
		||||
    public AjaxResult forceLogout(@PathVariable String tokenId)
 | 
			
		||||
    {
 | 
			
		||||
        redisCache.deleteObject(CacheConstants.LOGIN_TOKEN_KEY + tokenId);
 | 
			
		||||
        return success();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
package com.ruoyi.web.controller.monitor;
 | 
			
		||||
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.Collection;
 | 
			
		||||
import java.util.Collections;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
			
		||||
import org.springframework.security.access.prepost.PreAuthorize;
 | 
			
		||||
import org.springframework.web.bind.annotation.DeleteMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.GetMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.PathVariable;
 | 
			
		||||
import org.springframework.web.bind.annotation.RequestMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.RestController;
 | 
			
		||||
import com.ruoyi.common.annotation.Log;
 | 
			
		||||
import com.ruoyi.common.constant.CacheConstants;
 | 
			
		||||
import com.ruoyi.common.core.controller.BaseController;
 | 
			
		||||
import com.ruoyi.common.core.domain.AjaxResult;
 | 
			
		||||
import com.ruoyi.common.core.domain.model.LoginUser;
 | 
			
		||||
import com.ruoyi.common.core.page.TableDataInfo;
 | 
			
		||||
import com.ruoyi.common.core.redis.RedisCache;
 | 
			
		||||
import com.ruoyi.common.enums.BusinessType;
 | 
			
		||||
import com.ruoyi.common.utils.StringUtils;
 | 
			
		||||
import com.ruoyi.system.domain.SysUserOnline;
 | 
			
		||||
import com.ruoyi.system.service.ISysUserOnlineService;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 在线用户监控
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
@RestController
 | 
			
		||||
@RequestMapping("/monitor/online")
 | 
			
		||||
public class SysUserOnlineController extends BaseController
 | 
			
		||||
{
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private ISysUserOnlineService userOnlineService;
 | 
			
		||||
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private RedisCache redisCache;
 | 
			
		||||
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('monitor:online:list')")
 | 
			
		||||
    @GetMapping("/list")
 | 
			
		||||
    public TableDataInfo list(String ipaddr, String userName)
 | 
			
		||||
    {
 | 
			
		||||
        Collection<String> keys = redisCache.keys(CacheConstants.LOGIN_TOKEN_KEY + "*");
 | 
			
		||||
        List<SysUserOnline> userOnlineList = new ArrayList<SysUserOnline>();
 | 
			
		||||
        for (String key : keys)
 | 
			
		||||
        {
 | 
			
		||||
            LoginUser user = redisCache.getCacheObject(key);
 | 
			
		||||
            if (StringUtils.isNotEmpty(ipaddr) && StringUtils.isNotEmpty(userName))
 | 
			
		||||
            {
 | 
			
		||||
                userOnlineList.add(userOnlineService.selectOnlineByInfo(ipaddr, userName, user));
 | 
			
		||||
            }
 | 
			
		||||
            else if (StringUtils.isNotEmpty(ipaddr))
 | 
			
		||||
            {
 | 
			
		||||
                userOnlineList.add(userOnlineService.selectOnlineByIpaddr(ipaddr, user));
 | 
			
		||||
            }
 | 
			
		||||
            else if (StringUtils.isNotEmpty(userName) && StringUtils.isNotNull(user.getUser()))
 | 
			
		||||
            {
 | 
			
		||||
                userOnlineList.add(userOnlineService.selectOnlineByUserName(userName, user));
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                userOnlineList.add(userOnlineService.loginUserToUserOnline(user));
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        Collections.reverse(userOnlineList);
 | 
			
		||||
        userOnlineList.removeAll(Collections.singleton(null));
 | 
			
		||||
        return getDataTable(userOnlineList);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 强退用户
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('monitor:online:forceLogout')")
 | 
			
		||||
    @Log(title = "在线用户", businessType = BusinessType.FORCE)
 | 
			
		||||
    @DeleteMapping("/{tokenId}")
 | 
			
		||||
    public AjaxResult forceLogout(@PathVariable String tokenId)
 | 
			
		||||
    {
 | 
			
		||||
        redisCache.deleteObject(CacheConstants.LOGIN_TOKEN_KEY + tokenId);
 | 
			
		||||
        return success();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,133 +1,133 @@
 | 
			
		|||
package com.tcctlo.web.controller.system;
 | 
			
		||||
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import javax.servlet.http.HttpServletResponse;
 | 
			
		||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
			
		||||
import org.springframework.security.access.prepost.PreAuthorize;
 | 
			
		||||
import org.springframework.validation.annotation.Validated;
 | 
			
		||||
import org.springframework.web.bind.annotation.DeleteMapping;
 | 
			
		||||
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.PutMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.RequestBody;
 | 
			
		||||
import org.springframework.web.bind.annotation.RequestMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.RestController;
 | 
			
		||||
import com.tcctlo.common.annotation.Log;
 | 
			
		||||
import com.tcctlo.common.core.controller.BaseController;
 | 
			
		||||
import com.tcctlo.common.core.domain.AjaxResult;
 | 
			
		||||
import com.tcctlo.common.core.page.TableDataInfo;
 | 
			
		||||
import com.tcctlo.common.enums.BusinessType;
 | 
			
		||||
import com.tcctlo.common.utils.poi.ExcelUtil;
 | 
			
		||||
import com.tcctlo.system.domain.SysConfig;
 | 
			
		||||
import com.tcctlo.system.service.ISysConfigService;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 参数配置 信息操作处理
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
@RestController
 | 
			
		||||
@RequestMapping("/system/config")
 | 
			
		||||
public class SysConfigController extends BaseController
 | 
			
		||||
{
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private ISysConfigService configService;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获取参数配置列表
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:config:list')")
 | 
			
		||||
    @GetMapping("/list")
 | 
			
		||||
    public TableDataInfo list(SysConfig config)
 | 
			
		||||
    {
 | 
			
		||||
        startPage();
 | 
			
		||||
        List<SysConfig> list = configService.selectConfigList(config);
 | 
			
		||||
        return getDataTable(list);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Log(title = "参数管理", businessType = BusinessType.EXPORT)
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:config:export')")
 | 
			
		||||
    @PostMapping("/export")
 | 
			
		||||
    public void export(HttpServletResponse response, SysConfig config)
 | 
			
		||||
    {
 | 
			
		||||
        List<SysConfig> list = configService.selectConfigList(config);
 | 
			
		||||
        ExcelUtil<SysConfig> util = new ExcelUtil<SysConfig>(SysConfig.class);
 | 
			
		||||
        util.exportExcel(response, list, "参数数据");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 根据参数编号获取详细信息
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:config:query')")
 | 
			
		||||
    @GetMapping(value = "/{configId}")
 | 
			
		||||
    public AjaxResult getInfo(@PathVariable Long configId)
 | 
			
		||||
    {
 | 
			
		||||
        return success(configService.selectConfigById(configId));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 根据参数键名查询参数值
 | 
			
		||||
     */
 | 
			
		||||
    @GetMapping(value = "/configKey/{configKey}")
 | 
			
		||||
    public AjaxResult getConfigKey(@PathVariable String configKey)
 | 
			
		||||
    {
 | 
			
		||||
        return success(configService.selectConfigByKey(configKey));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 新增参数配置
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:config:add')")
 | 
			
		||||
    @Log(title = "参数管理", businessType = BusinessType.INSERT)
 | 
			
		||||
    @PostMapping
 | 
			
		||||
    public AjaxResult add(@Validated @RequestBody SysConfig config)
 | 
			
		||||
    {
 | 
			
		||||
        if (!configService.checkConfigKeyUnique(config))
 | 
			
		||||
        {
 | 
			
		||||
            return error("新增参数'" + config.getConfigName() + "'失败,参数键名已存在");
 | 
			
		||||
        }
 | 
			
		||||
        config.setCreateBy(getUsername());
 | 
			
		||||
        return toAjax(configService.insertConfig(config));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 修改参数配置
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:config:edit')")
 | 
			
		||||
    @Log(title = "参数管理", businessType = BusinessType.UPDATE)
 | 
			
		||||
    @PutMapping
 | 
			
		||||
    public AjaxResult edit(@Validated @RequestBody SysConfig config)
 | 
			
		||||
    {
 | 
			
		||||
        if (!configService.checkConfigKeyUnique(config))
 | 
			
		||||
        {
 | 
			
		||||
            return error("修改参数'" + config.getConfigName() + "'失败,参数键名已存在");
 | 
			
		||||
        }
 | 
			
		||||
        config.setUpdateBy(getUsername());
 | 
			
		||||
        return toAjax(configService.updateConfig(config));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 删除参数配置
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:config:remove')")
 | 
			
		||||
    @Log(title = "参数管理", businessType = BusinessType.DELETE)
 | 
			
		||||
    @DeleteMapping("/{configIds}")
 | 
			
		||||
    public AjaxResult remove(@PathVariable Long[] configIds)
 | 
			
		||||
    {
 | 
			
		||||
        configService.deleteConfigByIds(configIds);
 | 
			
		||||
        return success();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 刷新参数缓存
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:config:remove')")
 | 
			
		||||
    @Log(title = "参数管理", businessType = BusinessType.CLEAN)
 | 
			
		||||
    @DeleteMapping("/refreshCache")
 | 
			
		||||
    public AjaxResult refreshCache()
 | 
			
		||||
    {
 | 
			
		||||
        configService.resetConfigCache();
 | 
			
		||||
        return success();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
package com.ruoyi.web.controller.system;
 | 
			
		||||
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import javax.servlet.http.HttpServletResponse;
 | 
			
		||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
			
		||||
import org.springframework.security.access.prepost.PreAuthorize;
 | 
			
		||||
import org.springframework.validation.annotation.Validated;
 | 
			
		||||
import org.springframework.web.bind.annotation.DeleteMapping;
 | 
			
		||||
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.PutMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.RequestBody;
 | 
			
		||||
import org.springframework.web.bind.annotation.RequestMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.RestController;
 | 
			
		||||
import com.ruoyi.common.annotation.Log;
 | 
			
		||||
import com.ruoyi.common.core.controller.BaseController;
 | 
			
		||||
import com.ruoyi.common.core.domain.AjaxResult;
 | 
			
		||||
import com.ruoyi.common.core.page.TableDataInfo;
 | 
			
		||||
import com.ruoyi.common.enums.BusinessType;
 | 
			
		||||
import com.ruoyi.common.utils.poi.ExcelUtil;
 | 
			
		||||
import com.ruoyi.system.domain.SysConfig;
 | 
			
		||||
import com.ruoyi.system.service.ISysConfigService;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 参数配置 信息操作处理
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
@RestController
 | 
			
		||||
@RequestMapping("/system/config")
 | 
			
		||||
public class SysConfigController extends BaseController
 | 
			
		||||
{
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private ISysConfigService configService;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获取参数配置列表
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:config:list')")
 | 
			
		||||
    @GetMapping("/list")
 | 
			
		||||
    public TableDataInfo list(SysConfig config)
 | 
			
		||||
    {
 | 
			
		||||
        startPage();
 | 
			
		||||
        List<SysConfig> list = configService.selectConfigList(config);
 | 
			
		||||
        return getDataTable(list);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Log(title = "参数管理", businessType = BusinessType.EXPORT)
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:config:export')")
 | 
			
		||||
    @PostMapping("/export")
 | 
			
		||||
    public void export(HttpServletResponse response, SysConfig config)
 | 
			
		||||
    {
 | 
			
		||||
        List<SysConfig> list = configService.selectConfigList(config);
 | 
			
		||||
        ExcelUtil<SysConfig> util = new ExcelUtil<SysConfig>(SysConfig.class);
 | 
			
		||||
        util.exportExcel(response, list, "参数数据");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 根据参数编号获取详细信息
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:config:query')")
 | 
			
		||||
    @GetMapping(value = "/{configId}")
 | 
			
		||||
    public AjaxResult getInfo(@PathVariable Long configId)
 | 
			
		||||
    {
 | 
			
		||||
        return success(configService.selectConfigById(configId));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 根据参数键名查询参数值
 | 
			
		||||
     */
 | 
			
		||||
    @GetMapping(value = "/configKey/{configKey}")
 | 
			
		||||
    public AjaxResult getConfigKey(@PathVariable String configKey)
 | 
			
		||||
    {
 | 
			
		||||
        return success(configService.selectConfigByKey(configKey));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 新增参数配置
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:config:add')")
 | 
			
		||||
    @Log(title = "参数管理", businessType = BusinessType.INSERT)
 | 
			
		||||
    @PostMapping
 | 
			
		||||
    public AjaxResult add(@Validated @RequestBody SysConfig config)
 | 
			
		||||
    {
 | 
			
		||||
        if (!configService.checkConfigKeyUnique(config))
 | 
			
		||||
        {
 | 
			
		||||
            return error("新增参数'" + config.getConfigName() + "'失败,参数键名已存在");
 | 
			
		||||
        }
 | 
			
		||||
        config.setCreateBy(getUsername());
 | 
			
		||||
        return toAjax(configService.insertConfig(config));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 修改参数配置
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:config:edit')")
 | 
			
		||||
    @Log(title = "参数管理", businessType = BusinessType.UPDATE)
 | 
			
		||||
    @PutMapping
 | 
			
		||||
    public AjaxResult edit(@Validated @RequestBody SysConfig config)
 | 
			
		||||
    {
 | 
			
		||||
        if (!configService.checkConfigKeyUnique(config))
 | 
			
		||||
        {
 | 
			
		||||
            return error("修改参数'" + config.getConfigName() + "'失败,参数键名已存在");
 | 
			
		||||
        }
 | 
			
		||||
        config.setUpdateBy(getUsername());
 | 
			
		||||
        return toAjax(configService.updateConfig(config));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 删除参数配置
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:config:remove')")
 | 
			
		||||
    @Log(title = "参数管理", businessType = BusinessType.DELETE)
 | 
			
		||||
    @DeleteMapping("/{configIds}")
 | 
			
		||||
    public AjaxResult remove(@PathVariable Long[] configIds)
 | 
			
		||||
    {
 | 
			
		||||
        configService.deleteConfigByIds(configIds);
 | 
			
		||||
        return success();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 刷新参数缓存
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:config:remove')")
 | 
			
		||||
    @Log(title = "参数管理", businessType = BusinessType.CLEAN)
 | 
			
		||||
    @DeleteMapping("/refreshCache")
 | 
			
		||||
    public AjaxResult refreshCache()
 | 
			
		||||
    {
 | 
			
		||||
        configService.resetConfigCache();
 | 
			
		||||
        return success();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,132 +1,132 @@
 | 
			
		|||
package com.tcctlo.web.controller.system;
 | 
			
		||||
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import org.apache.commons.lang3.ArrayUtils;
 | 
			
		||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
			
		||||
import org.springframework.security.access.prepost.PreAuthorize;
 | 
			
		||||
import org.springframework.validation.annotation.Validated;
 | 
			
		||||
import org.springframework.web.bind.annotation.DeleteMapping;
 | 
			
		||||
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.PutMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.RequestBody;
 | 
			
		||||
import org.springframework.web.bind.annotation.RequestMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.RestController;
 | 
			
		||||
import com.tcctlo.common.annotation.Log;
 | 
			
		||||
import com.tcctlo.common.constant.UserConstants;
 | 
			
		||||
import com.tcctlo.common.core.controller.BaseController;
 | 
			
		||||
import com.tcctlo.common.core.domain.AjaxResult;
 | 
			
		||||
import com.tcctlo.common.core.domain.entity.SysDept;
 | 
			
		||||
import com.tcctlo.common.enums.BusinessType;
 | 
			
		||||
import com.tcctlo.common.utils.StringUtils;
 | 
			
		||||
import com.tcctlo.system.service.ISysDeptService;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 部门信息
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
@RestController
 | 
			
		||||
@RequestMapping("/system/dept")
 | 
			
		||||
public class SysDeptController extends BaseController
 | 
			
		||||
{
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private ISysDeptService deptService;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获取部门列表
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:dept:list')")
 | 
			
		||||
    @GetMapping("/list")
 | 
			
		||||
    public AjaxResult list(SysDept dept)
 | 
			
		||||
    {
 | 
			
		||||
        List<SysDept> depts = deptService.selectDeptList(dept);
 | 
			
		||||
        return success(depts);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 查询部门列表(排除节点)
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:dept:list')")
 | 
			
		||||
    @GetMapping("/list/exclude/{deptId}")
 | 
			
		||||
    public AjaxResult excludeChild(@PathVariable(value = "deptId", required = false) Long deptId)
 | 
			
		||||
    {
 | 
			
		||||
        List<SysDept> depts = deptService.selectDeptList(new SysDept());
 | 
			
		||||
        depts.removeIf(d -> d.getDeptId().intValue() == deptId || ArrayUtils.contains(StringUtils.split(d.getAncestors(), ","), deptId + ""));
 | 
			
		||||
        return success(depts);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 根据部门编号获取详细信息
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:dept:query')")
 | 
			
		||||
    @GetMapping(value = "/{deptId}")
 | 
			
		||||
    public AjaxResult getInfo(@PathVariable Long deptId)
 | 
			
		||||
    {
 | 
			
		||||
        deptService.checkDeptDataScope(deptId);
 | 
			
		||||
        return success(deptService.selectDeptById(deptId));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 新增部门
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:dept:add')")
 | 
			
		||||
    @Log(title = "部门管理", businessType = BusinessType.INSERT)
 | 
			
		||||
    @PostMapping
 | 
			
		||||
    public AjaxResult add(@Validated @RequestBody SysDept dept)
 | 
			
		||||
    {
 | 
			
		||||
        if (!deptService.checkDeptNameUnique(dept))
 | 
			
		||||
        {
 | 
			
		||||
            return error("新增部门'" + dept.getDeptName() + "'失败,部门名称已存在");
 | 
			
		||||
        }
 | 
			
		||||
        dept.setCreateBy(getUsername());
 | 
			
		||||
        return toAjax(deptService.insertDept(dept));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 修改部门
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:dept:edit')")
 | 
			
		||||
    @Log(title = "部门管理", businessType = BusinessType.UPDATE)
 | 
			
		||||
    @PutMapping
 | 
			
		||||
    public AjaxResult edit(@Validated @RequestBody SysDept dept)
 | 
			
		||||
    {
 | 
			
		||||
        Long deptId = dept.getDeptId();
 | 
			
		||||
        deptService.checkDeptDataScope(deptId);
 | 
			
		||||
        if (!deptService.checkDeptNameUnique(dept))
 | 
			
		||||
        {
 | 
			
		||||
            return error("修改部门'" + dept.getDeptName() + "'失败,部门名称已存在");
 | 
			
		||||
        }
 | 
			
		||||
        else if (dept.getParentId().equals(deptId))
 | 
			
		||||
        {
 | 
			
		||||
            return error("修改部门'" + dept.getDeptName() + "'失败,上级部门不能是自己");
 | 
			
		||||
        }
 | 
			
		||||
        else if (StringUtils.equals(UserConstants.DEPT_DISABLE, dept.getStatus()) && deptService.selectNormalChildrenDeptById(deptId) > 0)
 | 
			
		||||
        {
 | 
			
		||||
            return error("该部门包含未停用的子部门!");
 | 
			
		||||
        }
 | 
			
		||||
        dept.setUpdateBy(getUsername());
 | 
			
		||||
        return toAjax(deptService.updateDept(dept));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 删除部门
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:dept:remove')")
 | 
			
		||||
    @Log(title = "部门管理", businessType = BusinessType.DELETE)
 | 
			
		||||
    @DeleteMapping("/{deptId}")
 | 
			
		||||
    public AjaxResult remove(@PathVariable Long deptId)
 | 
			
		||||
    {
 | 
			
		||||
        if (deptService.hasChildByDeptId(deptId))
 | 
			
		||||
        {
 | 
			
		||||
            return warn("存在下级部门,不允许删除");
 | 
			
		||||
        }
 | 
			
		||||
        if (deptService.checkDeptExistUser(deptId))
 | 
			
		||||
        {
 | 
			
		||||
            return warn("部门存在用户,不允许删除");
 | 
			
		||||
        }
 | 
			
		||||
        deptService.checkDeptDataScope(deptId);
 | 
			
		||||
        return toAjax(deptService.deleteDeptById(deptId));
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
package com.ruoyi.web.controller.system;
 | 
			
		||||
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import org.apache.commons.lang3.ArrayUtils;
 | 
			
		||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
			
		||||
import org.springframework.security.access.prepost.PreAuthorize;
 | 
			
		||||
import org.springframework.validation.annotation.Validated;
 | 
			
		||||
import org.springframework.web.bind.annotation.DeleteMapping;
 | 
			
		||||
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.PutMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.RequestBody;
 | 
			
		||||
import org.springframework.web.bind.annotation.RequestMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.RestController;
 | 
			
		||||
import com.ruoyi.common.annotation.Log;
 | 
			
		||||
import com.ruoyi.common.constant.UserConstants;
 | 
			
		||||
import com.ruoyi.common.core.controller.BaseController;
 | 
			
		||||
import com.ruoyi.common.core.domain.AjaxResult;
 | 
			
		||||
import com.ruoyi.common.core.domain.entity.SysDept;
 | 
			
		||||
import com.ruoyi.common.enums.BusinessType;
 | 
			
		||||
import com.ruoyi.common.utils.StringUtils;
 | 
			
		||||
import com.ruoyi.system.service.ISysDeptService;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 部门信息
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
@RestController
 | 
			
		||||
@RequestMapping("/system/dept")
 | 
			
		||||
public class SysDeptController extends BaseController
 | 
			
		||||
{
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private ISysDeptService deptService;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获取部门列表
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:dept:list')")
 | 
			
		||||
    @GetMapping("/list")
 | 
			
		||||
    public AjaxResult list(SysDept dept)
 | 
			
		||||
    {
 | 
			
		||||
        List<SysDept> depts = deptService.selectDeptList(dept);
 | 
			
		||||
        return success(depts);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 查询部门列表(排除节点)
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:dept:list')")
 | 
			
		||||
    @GetMapping("/list/exclude/{deptId}")
 | 
			
		||||
    public AjaxResult excludeChild(@PathVariable(value = "deptId", required = false) Long deptId)
 | 
			
		||||
    {
 | 
			
		||||
        List<SysDept> depts = deptService.selectDeptList(new SysDept());
 | 
			
		||||
        depts.removeIf(d -> d.getDeptId().intValue() == deptId || ArrayUtils.contains(StringUtils.split(d.getAncestors(), ","), deptId + ""));
 | 
			
		||||
        return success(depts);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 根据部门编号获取详细信息
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:dept:query')")
 | 
			
		||||
    @GetMapping(value = "/{deptId}")
 | 
			
		||||
    public AjaxResult getInfo(@PathVariable Long deptId)
 | 
			
		||||
    {
 | 
			
		||||
        deptService.checkDeptDataScope(deptId);
 | 
			
		||||
        return success(deptService.selectDeptById(deptId));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 新增部门
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:dept:add')")
 | 
			
		||||
    @Log(title = "部门管理", businessType = BusinessType.INSERT)
 | 
			
		||||
    @PostMapping
 | 
			
		||||
    public AjaxResult add(@Validated @RequestBody SysDept dept)
 | 
			
		||||
    {
 | 
			
		||||
        if (!deptService.checkDeptNameUnique(dept))
 | 
			
		||||
        {
 | 
			
		||||
            return error("新增部门'" + dept.getDeptName() + "'失败,部门名称已存在");
 | 
			
		||||
        }
 | 
			
		||||
        dept.setCreateBy(getUsername());
 | 
			
		||||
        return toAjax(deptService.insertDept(dept));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 修改部门
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:dept:edit')")
 | 
			
		||||
    @Log(title = "部门管理", businessType = BusinessType.UPDATE)
 | 
			
		||||
    @PutMapping
 | 
			
		||||
    public AjaxResult edit(@Validated @RequestBody SysDept dept)
 | 
			
		||||
    {
 | 
			
		||||
        Long deptId = dept.getDeptId();
 | 
			
		||||
        deptService.checkDeptDataScope(deptId);
 | 
			
		||||
        if (!deptService.checkDeptNameUnique(dept))
 | 
			
		||||
        {
 | 
			
		||||
            return error("修改部门'" + dept.getDeptName() + "'失败,部门名称已存在");
 | 
			
		||||
        }
 | 
			
		||||
        else if (dept.getParentId().equals(deptId))
 | 
			
		||||
        {
 | 
			
		||||
            return error("修改部门'" + dept.getDeptName() + "'失败,上级部门不能是自己");
 | 
			
		||||
        }
 | 
			
		||||
        else if (StringUtils.equals(UserConstants.DEPT_DISABLE, dept.getStatus()) && deptService.selectNormalChildrenDeptById(deptId) > 0)
 | 
			
		||||
        {
 | 
			
		||||
            return error("该部门包含未停用的子部门!");
 | 
			
		||||
        }
 | 
			
		||||
        dept.setUpdateBy(getUsername());
 | 
			
		||||
        return toAjax(deptService.updateDept(dept));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 删除部门
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:dept:remove')")
 | 
			
		||||
    @Log(title = "部门管理", businessType = BusinessType.DELETE)
 | 
			
		||||
    @DeleteMapping("/{deptId}")
 | 
			
		||||
    public AjaxResult remove(@PathVariable Long deptId)
 | 
			
		||||
    {
 | 
			
		||||
        if (deptService.hasChildByDeptId(deptId))
 | 
			
		||||
        {
 | 
			
		||||
            return warn("存在下级部门,不允许删除");
 | 
			
		||||
        }
 | 
			
		||||
        if (deptService.checkDeptExistUser(deptId))
 | 
			
		||||
        {
 | 
			
		||||
            return warn("部门存在用户,不允许删除");
 | 
			
		||||
        }
 | 
			
		||||
        deptService.checkDeptDataScope(deptId);
 | 
			
		||||
        return toAjax(deptService.deleteDeptById(deptId));
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,121 +1,121 @@
 | 
			
		|||
package com.tcctlo.web.controller.system;
 | 
			
		||||
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import javax.servlet.http.HttpServletResponse;
 | 
			
		||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
			
		||||
import org.springframework.security.access.prepost.PreAuthorize;
 | 
			
		||||
import org.springframework.validation.annotation.Validated;
 | 
			
		||||
import org.springframework.web.bind.annotation.DeleteMapping;
 | 
			
		||||
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.PutMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.RequestBody;
 | 
			
		||||
import org.springframework.web.bind.annotation.RequestMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.RestController;
 | 
			
		||||
import com.tcctlo.common.annotation.Log;
 | 
			
		||||
import com.tcctlo.common.core.controller.BaseController;
 | 
			
		||||
import com.tcctlo.common.core.domain.AjaxResult;
 | 
			
		||||
import com.tcctlo.common.core.domain.entity.SysDictData;
 | 
			
		||||
import com.tcctlo.common.core.page.TableDataInfo;
 | 
			
		||||
import com.tcctlo.common.enums.BusinessType;
 | 
			
		||||
import com.tcctlo.common.utils.StringUtils;
 | 
			
		||||
import com.tcctlo.common.utils.poi.ExcelUtil;
 | 
			
		||||
import com.tcctlo.system.service.ISysDictDataService;
 | 
			
		||||
import com.tcctlo.system.service.ISysDictTypeService;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 数据字典信息
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
@RestController
 | 
			
		||||
@RequestMapping("/system/dict/data")
 | 
			
		||||
public class SysDictDataController extends BaseController
 | 
			
		||||
{
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private ISysDictDataService dictDataService;
 | 
			
		||||
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private ISysDictTypeService dictTypeService;
 | 
			
		||||
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:dict:list')")
 | 
			
		||||
    @GetMapping("/list")
 | 
			
		||||
    public TableDataInfo list(SysDictData dictData)
 | 
			
		||||
    {
 | 
			
		||||
        startPage();
 | 
			
		||||
        List<SysDictData> list = dictDataService.selectDictDataList(dictData);
 | 
			
		||||
        return getDataTable(list);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Log(title = "字典数据", businessType = BusinessType.EXPORT)
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:dict:export')")
 | 
			
		||||
    @PostMapping("/export")
 | 
			
		||||
    public void export(HttpServletResponse response, SysDictData dictData)
 | 
			
		||||
    {
 | 
			
		||||
        List<SysDictData> list = dictDataService.selectDictDataList(dictData);
 | 
			
		||||
        ExcelUtil<SysDictData> util = new ExcelUtil<SysDictData>(SysDictData.class);
 | 
			
		||||
        util.exportExcel(response, list, "字典数据");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 查询字典数据详细
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:dict:query')")
 | 
			
		||||
    @GetMapping(value = "/{dictCode}")
 | 
			
		||||
    public AjaxResult getInfo(@PathVariable Long dictCode)
 | 
			
		||||
    {
 | 
			
		||||
        return success(dictDataService.selectDictDataById(dictCode));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 根据字典类型查询字典数据信息
 | 
			
		||||
     */
 | 
			
		||||
    @GetMapping(value = "/type/{dictType}")
 | 
			
		||||
    public AjaxResult dictType(@PathVariable String dictType)
 | 
			
		||||
    {
 | 
			
		||||
        List<SysDictData> data = dictTypeService.selectDictDataByType(dictType);
 | 
			
		||||
        if (StringUtils.isNull(data))
 | 
			
		||||
        {
 | 
			
		||||
            data = new ArrayList<SysDictData>();
 | 
			
		||||
        }
 | 
			
		||||
        return success(data);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 新增字典类型
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:dict:add')")
 | 
			
		||||
    @Log(title = "字典数据", businessType = BusinessType.INSERT)
 | 
			
		||||
    @PostMapping
 | 
			
		||||
    public AjaxResult add(@Validated @RequestBody SysDictData dict)
 | 
			
		||||
    {
 | 
			
		||||
        dict.setCreateBy(getUsername());
 | 
			
		||||
        return toAjax(dictDataService.insertDictData(dict));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 修改保存字典类型
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:dict:edit')")
 | 
			
		||||
    @Log(title = "字典数据", businessType = BusinessType.UPDATE)
 | 
			
		||||
    @PutMapping
 | 
			
		||||
    public AjaxResult edit(@Validated @RequestBody SysDictData dict)
 | 
			
		||||
    {
 | 
			
		||||
        dict.setUpdateBy(getUsername());
 | 
			
		||||
        return toAjax(dictDataService.updateDictData(dict));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 删除字典类型
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:dict:remove')")
 | 
			
		||||
    @Log(title = "字典类型", businessType = BusinessType.DELETE)
 | 
			
		||||
    @DeleteMapping("/{dictCodes}")
 | 
			
		||||
    public AjaxResult remove(@PathVariable Long[] dictCodes)
 | 
			
		||||
    {
 | 
			
		||||
        dictDataService.deleteDictDataByIds(dictCodes);
 | 
			
		||||
        return success();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
package com.ruoyi.web.controller.system;
 | 
			
		||||
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import javax.servlet.http.HttpServletResponse;
 | 
			
		||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
			
		||||
import org.springframework.security.access.prepost.PreAuthorize;
 | 
			
		||||
import org.springframework.validation.annotation.Validated;
 | 
			
		||||
import org.springframework.web.bind.annotation.DeleteMapping;
 | 
			
		||||
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.PutMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.RequestBody;
 | 
			
		||||
import org.springframework.web.bind.annotation.RequestMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.RestController;
 | 
			
		||||
import com.ruoyi.common.annotation.Log;
 | 
			
		||||
import com.ruoyi.common.core.controller.BaseController;
 | 
			
		||||
import com.ruoyi.common.core.domain.AjaxResult;
 | 
			
		||||
import com.ruoyi.common.core.domain.entity.SysDictData;
 | 
			
		||||
import com.ruoyi.common.core.page.TableDataInfo;
 | 
			
		||||
import com.ruoyi.common.enums.BusinessType;
 | 
			
		||||
import com.ruoyi.common.utils.StringUtils;
 | 
			
		||||
import com.ruoyi.common.utils.poi.ExcelUtil;
 | 
			
		||||
import com.ruoyi.system.service.ISysDictDataService;
 | 
			
		||||
import com.ruoyi.system.service.ISysDictTypeService;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 数据字典信息
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
@RestController
 | 
			
		||||
@RequestMapping("/system/dict/data")
 | 
			
		||||
public class SysDictDataController extends BaseController
 | 
			
		||||
{
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private ISysDictDataService dictDataService;
 | 
			
		||||
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private ISysDictTypeService dictTypeService;
 | 
			
		||||
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:dict:list')")
 | 
			
		||||
    @GetMapping("/list")
 | 
			
		||||
    public TableDataInfo list(SysDictData dictData)
 | 
			
		||||
    {
 | 
			
		||||
        startPage();
 | 
			
		||||
        List<SysDictData> list = dictDataService.selectDictDataList(dictData);
 | 
			
		||||
        return getDataTable(list);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Log(title = "字典数据", businessType = BusinessType.EXPORT)
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:dict:export')")
 | 
			
		||||
    @PostMapping("/export")
 | 
			
		||||
    public void export(HttpServletResponse response, SysDictData dictData)
 | 
			
		||||
    {
 | 
			
		||||
        List<SysDictData> list = dictDataService.selectDictDataList(dictData);
 | 
			
		||||
        ExcelUtil<SysDictData> util = new ExcelUtil<SysDictData>(SysDictData.class);
 | 
			
		||||
        util.exportExcel(response, list, "字典数据");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 查询字典数据详细
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:dict:query')")
 | 
			
		||||
    @GetMapping(value = "/{dictCode}")
 | 
			
		||||
    public AjaxResult getInfo(@PathVariable Long dictCode)
 | 
			
		||||
    {
 | 
			
		||||
        return success(dictDataService.selectDictDataById(dictCode));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 根据字典类型查询字典数据信息
 | 
			
		||||
     */
 | 
			
		||||
    @GetMapping(value = "/type/{dictType}")
 | 
			
		||||
    public AjaxResult dictType(@PathVariable String dictType)
 | 
			
		||||
    {
 | 
			
		||||
        List<SysDictData> data = dictTypeService.selectDictDataByType(dictType);
 | 
			
		||||
        if (StringUtils.isNull(data))
 | 
			
		||||
        {
 | 
			
		||||
            data = new ArrayList<SysDictData>();
 | 
			
		||||
        }
 | 
			
		||||
        return success(data);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 新增字典类型
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:dict:add')")
 | 
			
		||||
    @Log(title = "字典数据", businessType = BusinessType.INSERT)
 | 
			
		||||
    @PostMapping
 | 
			
		||||
    public AjaxResult add(@Validated @RequestBody SysDictData dict)
 | 
			
		||||
    {
 | 
			
		||||
        dict.setCreateBy(getUsername());
 | 
			
		||||
        return toAjax(dictDataService.insertDictData(dict));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 修改保存字典类型
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:dict:edit')")
 | 
			
		||||
    @Log(title = "字典数据", businessType = BusinessType.UPDATE)
 | 
			
		||||
    @PutMapping
 | 
			
		||||
    public AjaxResult edit(@Validated @RequestBody SysDictData dict)
 | 
			
		||||
    {
 | 
			
		||||
        dict.setUpdateBy(getUsername());
 | 
			
		||||
        return toAjax(dictDataService.updateDictData(dict));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 删除字典类型
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:dict:remove')")
 | 
			
		||||
    @Log(title = "字典类型", businessType = BusinessType.DELETE)
 | 
			
		||||
    @DeleteMapping("/{dictCodes}")
 | 
			
		||||
    public AjaxResult remove(@PathVariable Long[] dictCodes)
 | 
			
		||||
    {
 | 
			
		||||
        dictDataService.deleteDictDataByIds(dictCodes);
 | 
			
		||||
        return success();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,131 +1,131 @@
 | 
			
		|||
package com.tcctlo.web.controller.system;
 | 
			
		||||
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import javax.servlet.http.HttpServletResponse;
 | 
			
		||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
			
		||||
import org.springframework.security.access.prepost.PreAuthorize;
 | 
			
		||||
import org.springframework.validation.annotation.Validated;
 | 
			
		||||
import org.springframework.web.bind.annotation.DeleteMapping;
 | 
			
		||||
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.PutMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.RequestBody;
 | 
			
		||||
import org.springframework.web.bind.annotation.RequestMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.RestController;
 | 
			
		||||
import com.tcctlo.common.annotation.Log;
 | 
			
		||||
import com.tcctlo.common.core.controller.BaseController;
 | 
			
		||||
import com.tcctlo.common.core.domain.AjaxResult;
 | 
			
		||||
import com.tcctlo.common.core.domain.entity.SysDictType;
 | 
			
		||||
import com.tcctlo.common.core.page.TableDataInfo;
 | 
			
		||||
import com.tcctlo.common.enums.BusinessType;
 | 
			
		||||
import com.tcctlo.common.utils.poi.ExcelUtil;
 | 
			
		||||
import com.tcctlo.system.service.ISysDictTypeService;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 数据字典信息
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
@RestController
 | 
			
		||||
@RequestMapping("/system/dict/type")
 | 
			
		||||
public class SysDictTypeController extends BaseController
 | 
			
		||||
{
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private ISysDictTypeService dictTypeService;
 | 
			
		||||
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:dict:list')")
 | 
			
		||||
    @GetMapping("/list")
 | 
			
		||||
    public TableDataInfo list(SysDictType dictType)
 | 
			
		||||
    {
 | 
			
		||||
        startPage();
 | 
			
		||||
        List<SysDictType> list = dictTypeService.selectDictTypeList(dictType);
 | 
			
		||||
        return getDataTable(list);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Log(title = "字典类型", businessType = BusinessType.EXPORT)
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:dict:export')")
 | 
			
		||||
    @PostMapping("/export")
 | 
			
		||||
    public void export(HttpServletResponse response, SysDictType dictType)
 | 
			
		||||
    {
 | 
			
		||||
        List<SysDictType> list = dictTypeService.selectDictTypeList(dictType);
 | 
			
		||||
        ExcelUtil<SysDictType> util = new ExcelUtil<SysDictType>(SysDictType.class);
 | 
			
		||||
        util.exportExcel(response, list, "字典类型");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 查询字典类型详细
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:dict:query')")
 | 
			
		||||
    @GetMapping(value = "/{dictId}")
 | 
			
		||||
    public AjaxResult getInfo(@PathVariable Long dictId)
 | 
			
		||||
    {
 | 
			
		||||
        return success(dictTypeService.selectDictTypeById(dictId));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 新增字典类型
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:dict:add')")
 | 
			
		||||
    @Log(title = "字典类型", businessType = BusinessType.INSERT)
 | 
			
		||||
    @PostMapping
 | 
			
		||||
    public AjaxResult add(@Validated @RequestBody SysDictType dict)
 | 
			
		||||
    {
 | 
			
		||||
        if (!dictTypeService.checkDictTypeUnique(dict))
 | 
			
		||||
        {
 | 
			
		||||
            return error("新增字典'" + dict.getDictName() + "'失败,字典类型已存在");
 | 
			
		||||
        }
 | 
			
		||||
        dict.setCreateBy(getUsername());
 | 
			
		||||
        return toAjax(dictTypeService.insertDictType(dict));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 修改字典类型
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:dict:edit')")
 | 
			
		||||
    @Log(title = "字典类型", businessType = BusinessType.UPDATE)
 | 
			
		||||
    @PutMapping
 | 
			
		||||
    public AjaxResult edit(@Validated @RequestBody SysDictType dict)
 | 
			
		||||
    {
 | 
			
		||||
        if (!dictTypeService.checkDictTypeUnique(dict))
 | 
			
		||||
        {
 | 
			
		||||
            return error("修改字典'" + dict.getDictName() + "'失败,字典类型已存在");
 | 
			
		||||
        }
 | 
			
		||||
        dict.setUpdateBy(getUsername());
 | 
			
		||||
        return toAjax(dictTypeService.updateDictType(dict));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 删除字典类型
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:dict:remove')")
 | 
			
		||||
    @Log(title = "字典类型", businessType = BusinessType.DELETE)
 | 
			
		||||
    @DeleteMapping("/{dictIds}")
 | 
			
		||||
    public AjaxResult remove(@PathVariable Long[] dictIds)
 | 
			
		||||
    {
 | 
			
		||||
        dictTypeService.deleteDictTypeByIds(dictIds);
 | 
			
		||||
        return success();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 刷新字典缓存
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:dict:remove')")
 | 
			
		||||
    @Log(title = "字典类型", businessType = BusinessType.CLEAN)
 | 
			
		||||
    @DeleteMapping("/refreshCache")
 | 
			
		||||
    public AjaxResult refreshCache()
 | 
			
		||||
    {
 | 
			
		||||
        dictTypeService.resetDictCache();
 | 
			
		||||
        return success();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获取字典选择框列表
 | 
			
		||||
     */
 | 
			
		||||
    @GetMapping("/optionselect")
 | 
			
		||||
    public AjaxResult optionselect()
 | 
			
		||||
    {
 | 
			
		||||
        List<SysDictType> dictTypes = dictTypeService.selectDictTypeAll();
 | 
			
		||||
        return success(dictTypes);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
package com.ruoyi.web.controller.system;
 | 
			
		||||
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import javax.servlet.http.HttpServletResponse;
 | 
			
		||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
			
		||||
import org.springframework.security.access.prepost.PreAuthorize;
 | 
			
		||||
import org.springframework.validation.annotation.Validated;
 | 
			
		||||
import org.springframework.web.bind.annotation.DeleteMapping;
 | 
			
		||||
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.PutMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.RequestBody;
 | 
			
		||||
import org.springframework.web.bind.annotation.RequestMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.RestController;
 | 
			
		||||
import com.ruoyi.common.annotation.Log;
 | 
			
		||||
import com.ruoyi.common.core.controller.BaseController;
 | 
			
		||||
import com.ruoyi.common.core.domain.AjaxResult;
 | 
			
		||||
import com.ruoyi.common.core.domain.entity.SysDictType;
 | 
			
		||||
import com.ruoyi.common.core.page.TableDataInfo;
 | 
			
		||||
import com.ruoyi.common.enums.BusinessType;
 | 
			
		||||
import com.ruoyi.common.utils.poi.ExcelUtil;
 | 
			
		||||
import com.ruoyi.system.service.ISysDictTypeService;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 数据字典信息
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
@RestController
 | 
			
		||||
@RequestMapping("/system/dict/type")
 | 
			
		||||
public class SysDictTypeController extends BaseController
 | 
			
		||||
{
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private ISysDictTypeService dictTypeService;
 | 
			
		||||
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:dict:list')")
 | 
			
		||||
    @GetMapping("/list")
 | 
			
		||||
    public TableDataInfo list(SysDictType dictType)
 | 
			
		||||
    {
 | 
			
		||||
        startPage();
 | 
			
		||||
        List<SysDictType> list = dictTypeService.selectDictTypeList(dictType);
 | 
			
		||||
        return getDataTable(list);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Log(title = "字典类型", businessType = BusinessType.EXPORT)
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:dict:export')")
 | 
			
		||||
    @PostMapping("/export")
 | 
			
		||||
    public void export(HttpServletResponse response, SysDictType dictType)
 | 
			
		||||
    {
 | 
			
		||||
        List<SysDictType> list = dictTypeService.selectDictTypeList(dictType);
 | 
			
		||||
        ExcelUtil<SysDictType> util = new ExcelUtil<SysDictType>(SysDictType.class);
 | 
			
		||||
        util.exportExcel(response, list, "字典类型");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 查询字典类型详细
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:dict:query')")
 | 
			
		||||
    @GetMapping(value = "/{dictId}")
 | 
			
		||||
    public AjaxResult getInfo(@PathVariable Long dictId)
 | 
			
		||||
    {
 | 
			
		||||
        return success(dictTypeService.selectDictTypeById(dictId));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 新增字典类型
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:dict:add')")
 | 
			
		||||
    @Log(title = "字典类型", businessType = BusinessType.INSERT)
 | 
			
		||||
    @PostMapping
 | 
			
		||||
    public AjaxResult add(@Validated @RequestBody SysDictType dict)
 | 
			
		||||
    {
 | 
			
		||||
        if (!dictTypeService.checkDictTypeUnique(dict))
 | 
			
		||||
        {
 | 
			
		||||
            return error("新增字典'" + dict.getDictName() + "'失败,字典类型已存在");
 | 
			
		||||
        }
 | 
			
		||||
        dict.setCreateBy(getUsername());
 | 
			
		||||
        return toAjax(dictTypeService.insertDictType(dict));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 修改字典类型
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:dict:edit')")
 | 
			
		||||
    @Log(title = "字典类型", businessType = BusinessType.UPDATE)
 | 
			
		||||
    @PutMapping
 | 
			
		||||
    public AjaxResult edit(@Validated @RequestBody SysDictType dict)
 | 
			
		||||
    {
 | 
			
		||||
        if (!dictTypeService.checkDictTypeUnique(dict))
 | 
			
		||||
        {
 | 
			
		||||
            return error("修改字典'" + dict.getDictName() + "'失败,字典类型已存在");
 | 
			
		||||
        }
 | 
			
		||||
        dict.setUpdateBy(getUsername());
 | 
			
		||||
        return toAjax(dictTypeService.updateDictType(dict));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 删除字典类型
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:dict:remove')")
 | 
			
		||||
    @Log(title = "字典类型", businessType = BusinessType.DELETE)
 | 
			
		||||
    @DeleteMapping("/{dictIds}")
 | 
			
		||||
    public AjaxResult remove(@PathVariable Long[] dictIds)
 | 
			
		||||
    {
 | 
			
		||||
        dictTypeService.deleteDictTypeByIds(dictIds);
 | 
			
		||||
        return success();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 刷新字典缓存
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:dict:remove')")
 | 
			
		||||
    @Log(title = "字典类型", businessType = BusinessType.CLEAN)
 | 
			
		||||
    @DeleteMapping("/refreshCache")
 | 
			
		||||
    public AjaxResult refreshCache()
 | 
			
		||||
    {
 | 
			
		||||
        dictTypeService.resetDictCache();
 | 
			
		||||
        return success();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获取字典选择框列表
 | 
			
		||||
     */
 | 
			
		||||
    @GetMapping("/optionselect")
 | 
			
		||||
    public AjaxResult optionselect()
 | 
			
		||||
    {
 | 
			
		||||
        List<SysDictType> dictTypes = dictTypeService.selectDictTypeAll();
 | 
			
		||||
        return success(dictTypes);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,29 +1,29 @@
 | 
			
		|||
package com.tcctlo.web.controller.system;
 | 
			
		||||
 | 
			
		||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
			
		||||
import org.springframework.web.bind.annotation.RequestMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.RestController;
 | 
			
		||||
import com.tcctlo.common.config.RuoYiConfig;
 | 
			
		||||
import com.tcctlo.common.utils.StringUtils;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 首页
 | 
			
		||||
 *
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
@RestController
 | 
			
		||||
public class SysIndexController
 | 
			
		||||
{
 | 
			
		||||
    /** 系统基础配置 */
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private RuoYiConfig ruoyiConfig;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 访问首页,提示语
 | 
			
		||||
     */
 | 
			
		||||
    @RequestMapping("/")
 | 
			
		||||
    public String index()
 | 
			
		||||
    {
 | 
			
		||||
        return StringUtils.format("欢迎使用{}后台管理框架,当前版本:v{},请通过前端地址访问。", ruoyiConfig.getName(), ruoyiConfig.getVersion());
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
package com.ruoyi.web.controller.system;
 | 
			
		||||
 | 
			
		||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
			
		||||
import org.springframework.web.bind.annotation.RequestMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.RestController;
 | 
			
		||||
import com.ruoyi.common.config.RuoYiConfig;
 | 
			
		||||
import com.ruoyi.common.utils.StringUtils;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 首页
 | 
			
		||||
 *
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
@RestController
 | 
			
		||||
public class SysIndexController
 | 
			
		||||
{
 | 
			
		||||
    /** 系统基础配置 */
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private RuoYiConfig ruoyiConfig;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 访问首页,提示语
 | 
			
		||||
     */
 | 
			
		||||
    @RequestMapping("/")
 | 
			
		||||
    public String index()
 | 
			
		||||
    {
 | 
			
		||||
        return StringUtils.format("欢迎使用{}后台管理框架,当前版本:v{},请通过前端地址访问。", ruoyiConfig.getName(), ruoyiConfig.getVersion());
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,97 +1,97 @@
 | 
			
		|||
package com.tcctlo.web.controller.system;
 | 
			
		||||
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
			
		||||
import org.springframework.web.bind.annotation.GetMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.PostMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.RequestBody;
 | 
			
		||||
import org.springframework.web.bind.annotation.RestController;
 | 
			
		||||
import com.tcctlo.common.constant.Constants;
 | 
			
		||||
import com.tcctlo.common.core.domain.AjaxResult;
 | 
			
		||||
import com.tcctlo.common.core.domain.entity.SysMenu;
 | 
			
		||||
import com.tcctlo.common.core.domain.entity.SysUser;
 | 
			
		||||
import com.tcctlo.common.core.domain.model.LoginBody;
 | 
			
		||||
import com.tcctlo.common.core.domain.model.LoginUser;
 | 
			
		||||
import com.tcctlo.common.utils.SecurityUtils;
 | 
			
		||||
import com.tcctlo.framework.web.service.SysLoginService;
 | 
			
		||||
import com.tcctlo.framework.web.service.SysPermissionService;
 | 
			
		||||
import com.tcctlo.framework.web.service.TokenService;
 | 
			
		||||
import com.tcctlo.system.service.ISysMenuService;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 登录验证
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
@RestController
 | 
			
		||||
public class SysLoginController
 | 
			
		||||
{
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private SysLoginService loginService;
 | 
			
		||||
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private ISysMenuService menuService;
 | 
			
		||||
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private SysPermissionService permissionService;
 | 
			
		||||
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private TokenService tokenService;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 登录方法
 | 
			
		||||
     * 
 | 
			
		||||
     * @param loginBody 登录信息
 | 
			
		||||
     * @return 结果
 | 
			
		||||
     */
 | 
			
		||||
    @PostMapping("/login")
 | 
			
		||||
    public AjaxResult login(@RequestBody LoginBody loginBody)
 | 
			
		||||
    {
 | 
			
		||||
        AjaxResult ajax = AjaxResult.success();
 | 
			
		||||
        // 生成令牌
 | 
			
		||||
        String token = loginService.login(loginBody.getUsername(), loginBody.getPassword(), loginBody.getCode(),
 | 
			
		||||
                loginBody.getUuid());
 | 
			
		||||
        ajax.put(Constants.TOKEN, token);
 | 
			
		||||
        return ajax;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获取用户信息
 | 
			
		||||
     * 
 | 
			
		||||
     * @return 用户信息
 | 
			
		||||
     */
 | 
			
		||||
    @GetMapping("getInfo")
 | 
			
		||||
    public AjaxResult getInfo()
 | 
			
		||||
    {
 | 
			
		||||
        LoginUser loginUser = SecurityUtils.getLoginUser();
 | 
			
		||||
        SysUser user = loginUser.getUser();
 | 
			
		||||
        // 角色集合
 | 
			
		||||
        Set<String> roles = permissionService.getRolePermission(user);
 | 
			
		||||
        // 权限集合
 | 
			
		||||
        Set<String> permissions = permissionService.getMenuPermission(user);
 | 
			
		||||
        if (!loginUser.getPermissions().equals(permissions))
 | 
			
		||||
        {
 | 
			
		||||
            loginUser.setPermissions(permissions);
 | 
			
		||||
            tokenService.refreshToken(loginUser);
 | 
			
		||||
        }
 | 
			
		||||
        AjaxResult ajax = AjaxResult.success();
 | 
			
		||||
        ajax.put("user", user);
 | 
			
		||||
        ajax.put("roles", roles);
 | 
			
		||||
        ajax.put("permissions", permissions);
 | 
			
		||||
        return ajax;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获取路由信息
 | 
			
		||||
     * 
 | 
			
		||||
     * @return 路由信息
 | 
			
		||||
     */
 | 
			
		||||
    @GetMapping("getRouters")
 | 
			
		||||
    public AjaxResult getRouters()
 | 
			
		||||
    {
 | 
			
		||||
        Long userId = SecurityUtils.getUserId();
 | 
			
		||||
        List<SysMenu> menus = menuService.selectMenuTreeByUserId(userId);
 | 
			
		||||
        return AjaxResult.success(menuService.buildMenus(menus));
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
package com.ruoyi.web.controller.system;
 | 
			
		||||
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
			
		||||
import org.springframework.web.bind.annotation.GetMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.PostMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.RequestBody;
 | 
			
		||||
import org.springframework.web.bind.annotation.RestController;
 | 
			
		||||
import com.ruoyi.common.constant.Constants;
 | 
			
		||||
import com.ruoyi.common.core.domain.AjaxResult;
 | 
			
		||||
import com.ruoyi.common.core.domain.entity.SysMenu;
 | 
			
		||||
import com.ruoyi.common.core.domain.entity.SysUser;
 | 
			
		||||
import com.ruoyi.common.core.domain.model.LoginBody;
 | 
			
		||||
import com.ruoyi.common.core.domain.model.LoginUser;
 | 
			
		||||
import com.ruoyi.common.utils.SecurityUtils;
 | 
			
		||||
import com.ruoyi.framework.web.service.SysLoginService;
 | 
			
		||||
import com.ruoyi.framework.web.service.SysPermissionService;
 | 
			
		||||
import com.ruoyi.framework.web.service.TokenService;
 | 
			
		||||
import com.ruoyi.system.service.ISysMenuService;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 登录验证
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
@RestController
 | 
			
		||||
public class SysLoginController
 | 
			
		||||
{
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private SysLoginService loginService;
 | 
			
		||||
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private ISysMenuService menuService;
 | 
			
		||||
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private SysPermissionService permissionService;
 | 
			
		||||
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private TokenService tokenService;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 登录方法
 | 
			
		||||
     * 
 | 
			
		||||
     * @param loginBody 登录信息
 | 
			
		||||
     * @return 结果
 | 
			
		||||
     */
 | 
			
		||||
    @PostMapping("/login")
 | 
			
		||||
    public AjaxResult login(@RequestBody LoginBody loginBody)
 | 
			
		||||
    {
 | 
			
		||||
        AjaxResult ajax = AjaxResult.success();
 | 
			
		||||
        // 生成令牌
 | 
			
		||||
        String token = loginService.login(loginBody.getUsername(), loginBody.getPassword(), loginBody.getCode(),
 | 
			
		||||
                loginBody.getUuid());
 | 
			
		||||
        ajax.put(Constants.TOKEN, token);
 | 
			
		||||
        return ajax;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获取用户信息
 | 
			
		||||
     * 
 | 
			
		||||
     * @return 用户信息
 | 
			
		||||
     */
 | 
			
		||||
    @GetMapping("getInfo")
 | 
			
		||||
    public AjaxResult getInfo()
 | 
			
		||||
    {
 | 
			
		||||
        LoginUser loginUser = SecurityUtils.getLoginUser();
 | 
			
		||||
        SysUser user = loginUser.getUser();
 | 
			
		||||
        // 角色集合
 | 
			
		||||
        Set<String> roles = permissionService.getRolePermission(user);
 | 
			
		||||
        // 权限集合
 | 
			
		||||
        Set<String> permissions = permissionService.getMenuPermission(user);
 | 
			
		||||
        if (!loginUser.getPermissions().equals(permissions))
 | 
			
		||||
        {
 | 
			
		||||
            loginUser.setPermissions(permissions);
 | 
			
		||||
            tokenService.refreshToken(loginUser);
 | 
			
		||||
        }
 | 
			
		||||
        AjaxResult ajax = AjaxResult.success();
 | 
			
		||||
        ajax.put("user", user);
 | 
			
		||||
        ajax.put("roles", roles);
 | 
			
		||||
        ajax.put("permissions", permissions);
 | 
			
		||||
        return ajax;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获取路由信息
 | 
			
		||||
     * 
 | 
			
		||||
     * @return 路由信息
 | 
			
		||||
     */
 | 
			
		||||
    @GetMapping("getRouters")
 | 
			
		||||
    public AjaxResult getRouters()
 | 
			
		||||
    {
 | 
			
		||||
        Long userId = SecurityUtils.getUserId();
 | 
			
		||||
        List<SysMenu> menus = menuService.selectMenuTreeByUserId(userId);
 | 
			
		||||
        return AjaxResult.success(menuService.buildMenus(menus));
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,142 +1,142 @@
 | 
			
		|||
package com.tcctlo.web.controller.system;
 | 
			
		||||
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
			
		||||
import org.springframework.security.access.prepost.PreAuthorize;
 | 
			
		||||
import org.springframework.validation.annotation.Validated;
 | 
			
		||||
import org.springframework.web.bind.annotation.DeleteMapping;
 | 
			
		||||
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.PutMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.RequestBody;
 | 
			
		||||
import org.springframework.web.bind.annotation.RequestMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.RestController;
 | 
			
		||||
import com.tcctlo.common.annotation.Log;
 | 
			
		||||
import com.tcctlo.common.constant.UserConstants;
 | 
			
		||||
import com.tcctlo.common.core.controller.BaseController;
 | 
			
		||||
import com.tcctlo.common.core.domain.AjaxResult;
 | 
			
		||||
import com.tcctlo.common.core.domain.entity.SysMenu;
 | 
			
		||||
import com.tcctlo.common.enums.BusinessType;
 | 
			
		||||
import com.tcctlo.common.utils.StringUtils;
 | 
			
		||||
import com.tcctlo.system.service.ISysMenuService;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 菜单信息
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
@RestController
 | 
			
		||||
@RequestMapping("/system/menu")
 | 
			
		||||
public class SysMenuController extends BaseController
 | 
			
		||||
{
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private ISysMenuService menuService;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获取菜单列表
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:menu:list')")
 | 
			
		||||
    @GetMapping("/list")
 | 
			
		||||
    public AjaxResult list(SysMenu menu)
 | 
			
		||||
    {
 | 
			
		||||
        List<SysMenu> menus = menuService.selectMenuList(menu, getUserId());
 | 
			
		||||
        return success(menus);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 根据菜单编号获取详细信息
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:menu:query')")
 | 
			
		||||
    @GetMapping(value = "/{menuId}")
 | 
			
		||||
    public AjaxResult getInfo(@PathVariable Long menuId)
 | 
			
		||||
    {
 | 
			
		||||
        return success(menuService.selectMenuById(menuId));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获取菜单下拉树列表
 | 
			
		||||
     */
 | 
			
		||||
    @GetMapping("/treeselect")
 | 
			
		||||
    public AjaxResult treeselect(SysMenu menu)
 | 
			
		||||
    {
 | 
			
		||||
        List<SysMenu> menus = menuService.selectMenuList(menu, getUserId());
 | 
			
		||||
        return success(menuService.buildMenuTreeSelect(menus));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 加载对应角色菜单列表树
 | 
			
		||||
     */
 | 
			
		||||
    @GetMapping(value = "/roleMenuTreeselect/{roleId}")
 | 
			
		||||
    public AjaxResult roleMenuTreeselect(@PathVariable("roleId") Long roleId)
 | 
			
		||||
    {
 | 
			
		||||
        List<SysMenu> menus = menuService.selectMenuList(getUserId());
 | 
			
		||||
        AjaxResult ajax = AjaxResult.success();
 | 
			
		||||
        ajax.put("checkedKeys", menuService.selectMenuListByRoleId(roleId));
 | 
			
		||||
        ajax.put("menus", menuService.buildMenuTreeSelect(menus));
 | 
			
		||||
        return ajax;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 新增菜单
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:menu:add')")
 | 
			
		||||
    @Log(title = "菜单管理", businessType = BusinessType.INSERT)
 | 
			
		||||
    @PostMapping
 | 
			
		||||
    public AjaxResult add(@Validated @RequestBody SysMenu menu)
 | 
			
		||||
    {
 | 
			
		||||
        if (!menuService.checkMenuNameUnique(menu))
 | 
			
		||||
        {
 | 
			
		||||
            return error("新增菜单'" + menu.getMenuName() + "'失败,菜单名称已存在");
 | 
			
		||||
        }
 | 
			
		||||
        else if (UserConstants.YES_FRAME.equals(menu.getIsFrame()) && !StringUtils.ishttp(menu.getPath()))
 | 
			
		||||
        {
 | 
			
		||||
            return error("新增菜单'" + menu.getMenuName() + "'失败,地址必须以http(s)://开头");
 | 
			
		||||
        }
 | 
			
		||||
        menu.setCreateBy(getUsername());
 | 
			
		||||
        return toAjax(menuService.insertMenu(menu));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 修改菜单
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:menu:edit')")
 | 
			
		||||
    @Log(title = "菜单管理", businessType = BusinessType.UPDATE)
 | 
			
		||||
    @PutMapping
 | 
			
		||||
    public AjaxResult edit(@Validated @RequestBody SysMenu menu)
 | 
			
		||||
    {
 | 
			
		||||
        if (!menuService.checkMenuNameUnique(menu))
 | 
			
		||||
        {
 | 
			
		||||
            return error("修改菜单'" + menu.getMenuName() + "'失败,菜单名称已存在");
 | 
			
		||||
        }
 | 
			
		||||
        else if (UserConstants.YES_FRAME.equals(menu.getIsFrame()) && !StringUtils.ishttp(menu.getPath()))
 | 
			
		||||
        {
 | 
			
		||||
            return error("修改菜单'" + menu.getMenuName() + "'失败,地址必须以http(s)://开头");
 | 
			
		||||
        }
 | 
			
		||||
        else if (menu.getMenuId().equals(menu.getParentId()))
 | 
			
		||||
        {
 | 
			
		||||
            return error("修改菜单'" + menu.getMenuName() + "'失败,上级菜单不能选择自己");
 | 
			
		||||
        }
 | 
			
		||||
        menu.setUpdateBy(getUsername());
 | 
			
		||||
        return toAjax(menuService.updateMenu(menu));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 删除菜单
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:menu:remove')")
 | 
			
		||||
    @Log(title = "菜单管理", businessType = BusinessType.DELETE)
 | 
			
		||||
    @DeleteMapping("/{menuId}")
 | 
			
		||||
    public AjaxResult remove(@PathVariable("menuId") Long menuId)
 | 
			
		||||
    {
 | 
			
		||||
        if (menuService.hasChildByMenuId(menuId))
 | 
			
		||||
        {
 | 
			
		||||
            return warn("存在子菜单,不允许删除");
 | 
			
		||||
        }
 | 
			
		||||
        if (menuService.checkMenuExistRole(menuId))
 | 
			
		||||
        {
 | 
			
		||||
            return warn("菜单已分配,不允许删除");
 | 
			
		||||
        }
 | 
			
		||||
        return toAjax(menuService.deleteMenuById(menuId));
 | 
			
		||||
    }
 | 
			
		||||
package com.ruoyi.web.controller.system;
 | 
			
		||||
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
			
		||||
import org.springframework.security.access.prepost.PreAuthorize;
 | 
			
		||||
import org.springframework.validation.annotation.Validated;
 | 
			
		||||
import org.springframework.web.bind.annotation.DeleteMapping;
 | 
			
		||||
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.PutMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.RequestBody;
 | 
			
		||||
import org.springframework.web.bind.annotation.RequestMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.RestController;
 | 
			
		||||
import com.ruoyi.common.annotation.Log;
 | 
			
		||||
import com.ruoyi.common.constant.UserConstants;
 | 
			
		||||
import com.ruoyi.common.core.controller.BaseController;
 | 
			
		||||
import com.ruoyi.common.core.domain.AjaxResult;
 | 
			
		||||
import com.ruoyi.common.core.domain.entity.SysMenu;
 | 
			
		||||
import com.ruoyi.common.enums.BusinessType;
 | 
			
		||||
import com.ruoyi.common.utils.StringUtils;
 | 
			
		||||
import com.ruoyi.system.service.ISysMenuService;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 菜单信息
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
@RestController
 | 
			
		||||
@RequestMapping("/system/menu")
 | 
			
		||||
public class SysMenuController extends BaseController
 | 
			
		||||
{
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private ISysMenuService menuService;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获取菜单列表
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:menu:list')")
 | 
			
		||||
    @GetMapping("/list")
 | 
			
		||||
    public AjaxResult list(SysMenu menu)
 | 
			
		||||
    {
 | 
			
		||||
        List<SysMenu> menus = menuService.selectMenuList(menu, getUserId());
 | 
			
		||||
        return success(menus);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 根据菜单编号获取详细信息
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:menu:query')")
 | 
			
		||||
    @GetMapping(value = "/{menuId}")
 | 
			
		||||
    public AjaxResult getInfo(@PathVariable Long menuId)
 | 
			
		||||
    {
 | 
			
		||||
        return success(menuService.selectMenuById(menuId));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获取菜单下拉树列表
 | 
			
		||||
     */
 | 
			
		||||
    @GetMapping("/treeselect")
 | 
			
		||||
    public AjaxResult treeselect(SysMenu menu)
 | 
			
		||||
    {
 | 
			
		||||
        List<SysMenu> menus = menuService.selectMenuList(menu, getUserId());
 | 
			
		||||
        return success(menuService.buildMenuTreeSelect(menus));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 加载对应角色菜单列表树
 | 
			
		||||
     */
 | 
			
		||||
    @GetMapping(value = "/roleMenuTreeselect/{roleId}")
 | 
			
		||||
    public AjaxResult roleMenuTreeselect(@PathVariable("roleId") Long roleId)
 | 
			
		||||
    {
 | 
			
		||||
        List<SysMenu> menus = menuService.selectMenuList(getUserId());
 | 
			
		||||
        AjaxResult ajax = AjaxResult.success();
 | 
			
		||||
        ajax.put("checkedKeys", menuService.selectMenuListByRoleId(roleId));
 | 
			
		||||
        ajax.put("menus", menuService.buildMenuTreeSelect(menus));
 | 
			
		||||
        return ajax;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 新增菜单
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:menu:add')")
 | 
			
		||||
    @Log(title = "菜单管理", businessType = BusinessType.INSERT)
 | 
			
		||||
    @PostMapping
 | 
			
		||||
    public AjaxResult add(@Validated @RequestBody SysMenu menu)
 | 
			
		||||
    {
 | 
			
		||||
        if (!menuService.checkMenuNameUnique(menu))
 | 
			
		||||
        {
 | 
			
		||||
            return error("新增菜单'" + menu.getMenuName() + "'失败,菜单名称已存在");
 | 
			
		||||
        }
 | 
			
		||||
        else if (UserConstants.YES_FRAME.equals(menu.getIsFrame()) && !StringUtils.ishttp(menu.getPath()))
 | 
			
		||||
        {
 | 
			
		||||
            return error("新增菜单'" + menu.getMenuName() + "'失败,地址必须以http(s)://开头");
 | 
			
		||||
        }
 | 
			
		||||
        menu.setCreateBy(getUsername());
 | 
			
		||||
        return toAjax(menuService.insertMenu(menu));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 修改菜单
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:menu:edit')")
 | 
			
		||||
    @Log(title = "菜单管理", businessType = BusinessType.UPDATE)
 | 
			
		||||
    @PutMapping
 | 
			
		||||
    public AjaxResult edit(@Validated @RequestBody SysMenu menu)
 | 
			
		||||
    {
 | 
			
		||||
        if (!menuService.checkMenuNameUnique(menu))
 | 
			
		||||
        {
 | 
			
		||||
            return error("修改菜单'" + menu.getMenuName() + "'失败,菜单名称已存在");
 | 
			
		||||
        }
 | 
			
		||||
        else if (UserConstants.YES_FRAME.equals(menu.getIsFrame()) && !StringUtils.ishttp(menu.getPath()))
 | 
			
		||||
        {
 | 
			
		||||
            return error("修改菜单'" + menu.getMenuName() + "'失败,地址必须以http(s)://开头");
 | 
			
		||||
        }
 | 
			
		||||
        else if (menu.getMenuId().equals(menu.getParentId()))
 | 
			
		||||
        {
 | 
			
		||||
            return error("修改菜单'" + menu.getMenuName() + "'失败,上级菜单不能选择自己");
 | 
			
		||||
        }
 | 
			
		||||
        menu.setUpdateBy(getUsername());
 | 
			
		||||
        return toAjax(menuService.updateMenu(menu));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 删除菜单
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:menu:remove')")
 | 
			
		||||
    @Log(title = "菜单管理", businessType = BusinessType.DELETE)
 | 
			
		||||
    @DeleteMapping("/{menuId}")
 | 
			
		||||
    public AjaxResult remove(@PathVariable("menuId") Long menuId)
 | 
			
		||||
    {
 | 
			
		||||
        if (menuService.hasChildByMenuId(menuId))
 | 
			
		||||
        {
 | 
			
		||||
            return warn("存在子菜单,不允许删除");
 | 
			
		||||
        }
 | 
			
		||||
        if (menuService.checkMenuExistRole(menuId))
 | 
			
		||||
        {
 | 
			
		||||
            return warn("菜单已分配,不允许删除");
 | 
			
		||||
        }
 | 
			
		||||
        return toAjax(menuService.deleteMenuById(menuId));
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,91 +1,91 @@
 | 
			
		|||
package com.tcctlo.web.controller.system;
 | 
			
		||||
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
			
		||||
import org.springframework.security.access.prepost.PreAuthorize;
 | 
			
		||||
import org.springframework.validation.annotation.Validated;
 | 
			
		||||
import org.springframework.web.bind.annotation.DeleteMapping;
 | 
			
		||||
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.PutMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.RequestBody;
 | 
			
		||||
import org.springframework.web.bind.annotation.RequestMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.RestController;
 | 
			
		||||
import com.tcctlo.common.annotation.Log;
 | 
			
		||||
import com.tcctlo.common.core.controller.BaseController;
 | 
			
		||||
import com.tcctlo.common.core.domain.AjaxResult;
 | 
			
		||||
import com.tcctlo.common.core.page.TableDataInfo;
 | 
			
		||||
import com.tcctlo.common.enums.BusinessType;
 | 
			
		||||
import com.tcctlo.system.domain.SysNotice;
 | 
			
		||||
import com.tcctlo.system.service.ISysNoticeService;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 公告 信息操作处理
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
@RestController
 | 
			
		||||
@RequestMapping("/system/notice")
 | 
			
		||||
public class SysNoticeController extends BaseController
 | 
			
		||||
{
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private ISysNoticeService noticeService;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获取通知公告列表
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:notice:list')")
 | 
			
		||||
    @GetMapping("/list")
 | 
			
		||||
    public TableDataInfo list(SysNotice notice)
 | 
			
		||||
    {
 | 
			
		||||
        startPage();
 | 
			
		||||
        List<SysNotice> list = noticeService.selectNoticeList(notice);
 | 
			
		||||
        return getDataTable(list);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 根据通知公告编号获取详细信息
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:notice:query')")
 | 
			
		||||
    @GetMapping(value = "/{noticeId}")
 | 
			
		||||
    public AjaxResult getInfo(@PathVariable Long noticeId)
 | 
			
		||||
    {
 | 
			
		||||
        return success(noticeService.selectNoticeById(noticeId));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 新增通知公告
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:notice:add')")
 | 
			
		||||
    @Log(title = "通知公告", businessType = BusinessType.INSERT)
 | 
			
		||||
    @PostMapping
 | 
			
		||||
    public AjaxResult add(@Validated @RequestBody SysNotice notice)
 | 
			
		||||
    {
 | 
			
		||||
        notice.setCreateBy(getUsername());
 | 
			
		||||
        return toAjax(noticeService.insertNotice(notice));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 修改通知公告
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:notice:edit')")
 | 
			
		||||
    @Log(title = "通知公告", businessType = BusinessType.UPDATE)
 | 
			
		||||
    @PutMapping
 | 
			
		||||
    public AjaxResult edit(@Validated @RequestBody SysNotice notice)
 | 
			
		||||
    {
 | 
			
		||||
        notice.setUpdateBy(getUsername());
 | 
			
		||||
        return toAjax(noticeService.updateNotice(notice));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 删除通知公告
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:notice:remove')")
 | 
			
		||||
    @Log(title = "通知公告", businessType = BusinessType.DELETE)
 | 
			
		||||
    @DeleteMapping("/{noticeIds}")
 | 
			
		||||
    public AjaxResult remove(@PathVariable Long[] noticeIds)
 | 
			
		||||
    {
 | 
			
		||||
        return toAjax(noticeService.deleteNoticeByIds(noticeIds));
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
package com.ruoyi.web.controller.system;
 | 
			
		||||
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
			
		||||
import org.springframework.security.access.prepost.PreAuthorize;
 | 
			
		||||
import org.springframework.validation.annotation.Validated;
 | 
			
		||||
import org.springframework.web.bind.annotation.DeleteMapping;
 | 
			
		||||
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.PutMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.RequestBody;
 | 
			
		||||
import org.springframework.web.bind.annotation.RequestMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.RestController;
 | 
			
		||||
import com.ruoyi.common.annotation.Log;
 | 
			
		||||
import com.ruoyi.common.core.controller.BaseController;
 | 
			
		||||
import com.ruoyi.common.core.domain.AjaxResult;
 | 
			
		||||
import com.ruoyi.common.core.page.TableDataInfo;
 | 
			
		||||
import com.ruoyi.common.enums.BusinessType;
 | 
			
		||||
import com.ruoyi.system.domain.SysNotice;
 | 
			
		||||
import com.ruoyi.system.service.ISysNoticeService;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 公告 信息操作处理
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
@RestController
 | 
			
		||||
@RequestMapping("/system/notice")
 | 
			
		||||
public class SysNoticeController extends BaseController
 | 
			
		||||
{
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private ISysNoticeService noticeService;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获取通知公告列表
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:notice:list')")
 | 
			
		||||
    @GetMapping("/list")
 | 
			
		||||
    public TableDataInfo list(SysNotice notice)
 | 
			
		||||
    {
 | 
			
		||||
        startPage();
 | 
			
		||||
        List<SysNotice> list = noticeService.selectNoticeList(notice);
 | 
			
		||||
        return getDataTable(list);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 根据通知公告编号获取详细信息
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:notice:query')")
 | 
			
		||||
    @GetMapping(value = "/{noticeId}")
 | 
			
		||||
    public AjaxResult getInfo(@PathVariable Long noticeId)
 | 
			
		||||
    {
 | 
			
		||||
        return success(noticeService.selectNoticeById(noticeId));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 新增通知公告
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:notice:add')")
 | 
			
		||||
    @Log(title = "通知公告", businessType = BusinessType.INSERT)
 | 
			
		||||
    @PostMapping
 | 
			
		||||
    public AjaxResult add(@Validated @RequestBody SysNotice notice)
 | 
			
		||||
    {
 | 
			
		||||
        notice.setCreateBy(getUsername());
 | 
			
		||||
        return toAjax(noticeService.insertNotice(notice));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 修改通知公告
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:notice:edit')")
 | 
			
		||||
    @Log(title = "通知公告", businessType = BusinessType.UPDATE)
 | 
			
		||||
    @PutMapping
 | 
			
		||||
    public AjaxResult edit(@Validated @RequestBody SysNotice notice)
 | 
			
		||||
    {
 | 
			
		||||
        notice.setUpdateBy(getUsername());
 | 
			
		||||
        return toAjax(noticeService.updateNotice(notice));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 删除通知公告
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:notice:remove')")
 | 
			
		||||
    @Log(title = "通知公告", businessType = BusinessType.DELETE)
 | 
			
		||||
    @DeleteMapping("/{noticeIds}")
 | 
			
		||||
    public AjaxResult remove(@PathVariable Long[] noticeIds)
 | 
			
		||||
    {
 | 
			
		||||
        return toAjax(noticeService.deleteNoticeByIds(noticeIds));
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,129 +1,129 @@
 | 
			
		|||
package com.tcctlo.web.controller.system;
 | 
			
		||||
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import javax.servlet.http.HttpServletResponse;
 | 
			
		||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
			
		||||
import org.springframework.security.access.prepost.PreAuthorize;
 | 
			
		||||
import org.springframework.validation.annotation.Validated;
 | 
			
		||||
import org.springframework.web.bind.annotation.DeleteMapping;
 | 
			
		||||
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.PutMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.RequestBody;
 | 
			
		||||
import org.springframework.web.bind.annotation.RequestMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.RestController;
 | 
			
		||||
import com.tcctlo.common.annotation.Log;
 | 
			
		||||
import com.tcctlo.common.core.controller.BaseController;
 | 
			
		||||
import com.tcctlo.common.core.domain.AjaxResult;
 | 
			
		||||
import com.tcctlo.common.core.page.TableDataInfo;
 | 
			
		||||
import com.tcctlo.common.enums.BusinessType;
 | 
			
		||||
import com.tcctlo.common.utils.poi.ExcelUtil;
 | 
			
		||||
import com.tcctlo.system.domain.SysPost;
 | 
			
		||||
import com.tcctlo.system.service.ISysPostService;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 岗位信息操作处理
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
@RestController
 | 
			
		||||
@RequestMapping("/system/post")
 | 
			
		||||
public class SysPostController extends BaseController
 | 
			
		||||
{
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private ISysPostService postService;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获取岗位列表
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:post:list')")
 | 
			
		||||
    @GetMapping("/list")
 | 
			
		||||
    public TableDataInfo list(SysPost post)
 | 
			
		||||
    {
 | 
			
		||||
        startPage();
 | 
			
		||||
        List<SysPost> list = postService.selectPostList(post);
 | 
			
		||||
        return getDataTable(list);
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    @Log(title = "岗位管理", businessType = BusinessType.EXPORT)
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:post:export')")
 | 
			
		||||
    @PostMapping("/export")
 | 
			
		||||
    public void export(HttpServletResponse response, SysPost post)
 | 
			
		||||
    {
 | 
			
		||||
        List<SysPost> list = postService.selectPostList(post);
 | 
			
		||||
        ExcelUtil<SysPost> util = new ExcelUtil<SysPost>(SysPost.class);
 | 
			
		||||
        util.exportExcel(response, list, "岗位数据");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 根据岗位编号获取详细信息
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:post:query')")
 | 
			
		||||
    @GetMapping(value = "/{postId}")
 | 
			
		||||
    public AjaxResult getInfo(@PathVariable Long postId)
 | 
			
		||||
    {
 | 
			
		||||
        return success(postService.selectPostById(postId));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 新增岗位
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:post:add')")
 | 
			
		||||
    @Log(title = "岗位管理", businessType = BusinessType.INSERT)
 | 
			
		||||
    @PostMapping
 | 
			
		||||
    public AjaxResult add(@Validated @RequestBody SysPost post)
 | 
			
		||||
    {
 | 
			
		||||
        if (!postService.checkPostNameUnique(post))
 | 
			
		||||
        {
 | 
			
		||||
            return error("新增岗位'" + post.getPostName() + "'失败,岗位名称已存在");
 | 
			
		||||
        }
 | 
			
		||||
        else if (!postService.checkPostCodeUnique(post))
 | 
			
		||||
        {
 | 
			
		||||
            return error("新增岗位'" + post.getPostName() + "'失败,岗位编码已存在");
 | 
			
		||||
        }
 | 
			
		||||
        post.setCreateBy(getUsername());
 | 
			
		||||
        return toAjax(postService.insertPost(post));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 修改岗位
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:post:edit')")
 | 
			
		||||
    @Log(title = "岗位管理", businessType = BusinessType.UPDATE)
 | 
			
		||||
    @PutMapping
 | 
			
		||||
    public AjaxResult edit(@Validated @RequestBody SysPost post)
 | 
			
		||||
    {
 | 
			
		||||
        if (!postService.checkPostNameUnique(post))
 | 
			
		||||
        {
 | 
			
		||||
            return error("修改岗位'" + post.getPostName() + "'失败,岗位名称已存在");
 | 
			
		||||
        }
 | 
			
		||||
        else if (!postService.checkPostCodeUnique(post))
 | 
			
		||||
        {
 | 
			
		||||
            return error("修改岗位'" + post.getPostName() + "'失败,岗位编码已存在");
 | 
			
		||||
        }
 | 
			
		||||
        post.setUpdateBy(getUsername());
 | 
			
		||||
        return toAjax(postService.updatePost(post));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 删除岗位
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:post:remove')")
 | 
			
		||||
    @Log(title = "岗位管理", businessType = BusinessType.DELETE)
 | 
			
		||||
    @DeleteMapping("/{postIds}")
 | 
			
		||||
    public AjaxResult remove(@PathVariable Long[] postIds)
 | 
			
		||||
    {
 | 
			
		||||
        return toAjax(postService.deletePostByIds(postIds));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获取岗位选择框列表
 | 
			
		||||
     */
 | 
			
		||||
    @GetMapping("/optionselect")
 | 
			
		||||
    public AjaxResult optionselect()
 | 
			
		||||
    {
 | 
			
		||||
        List<SysPost> posts = postService.selectPostAll();
 | 
			
		||||
        return success(posts);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
package com.ruoyi.web.controller.system;
 | 
			
		||||
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import javax.servlet.http.HttpServletResponse;
 | 
			
		||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
			
		||||
import org.springframework.security.access.prepost.PreAuthorize;
 | 
			
		||||
import org.springframework.validation.annotation.Validated;
 | 
			
		||||
import org.springframework.web.bind.annotation.DeleteMapping;
 | 
			
		||||
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.PutMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.RequestBody;
 | 
			
		||||
import org.springframework.web.bind.annotation.RequestMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.RestController;
 | 
			
		||||
import com.ruoyi.common.annotation.Log;
 | 
			
		||||
import com.ruoyi.common.core.controller.BaseController;
 | 
			
		||||
import com.ruoyi.common.core.domain.AjaxResult;
 | 
			
		||||
import com.ruoyi.common.core.page.TableDataInfo;
 | 
			
		||||
import com.ruoyi.common.enums.BusinessType;
 | 
			
		||||
import com.ruoyi.common.utils.poi.ExcelUtil;
 | 
			
		||||
import com.ruoyi.system.domain.SysPost;
 | 
			
		||||
import com.ruoyi.system.service.ISysPostService;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 岗位信息操作处理
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
@RestController
 | 
			
		||||
@RequestMapping("/system/post")
 | 
			
		||||
public class SysPostController extends BaseController
 | 
			
		||||
{
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private ISysPostService postService;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获取岗位列表
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:post:list')")
 | 
			
		||||
    @GetMapping("/list")
 | 
			
		||||
    public TableDataInfo list(SysPost post)
 | 
			
		||||
    {
 | 
			
		||||
        startPage();
 | 
			
		||||
        List<SysPost> list = postService.selectPostList(post);
 | 
			
		||||
        return getDataTable(list);
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    @Log(title = "岗位管理", businessType = BusinessType.EXPORT)
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:post:export')")
 | 
			
		||||
    @PostMapping("/export")
 | 
			
		||||
    public void export(HttpServletResponse response, SysPost post)
 | 
			
		||||
    {
 | 
			
		||||
        List<SysPost> list = postService.selectPostList(post);
 | 
			
		||||
        ExcelUtil<SysPost> util = new ExcelUtil<SysPost>(SysPost.class);
 | 
			
		||||
        util.exportExcel(response, list, "岗位数据");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 根据岗位编号获取详细信息
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:post:query')")
 | 
			
		||||
    @GetMapping(value = "/{postId}")
 | 
			
		||||
    public AjaxResult getInfo(@PathVariable Long postId)
 | 
			
		||||
    {
 | 
			
		||||
        return success(postService.selectPostById(postId));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 新增岗位
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:post:add')")
 | 
			
		||||
    @Log(title = "岗位管理", businessType = BusinessType.INSERT)
 | 
			
		||||
    @PostMapping
 | 
			
		||||
    public AjaxResult add(@Validated @RequestBody SysPost post)
 | 
			
		||||
    {
 | 
			
		||||
        if (!postService.checkPostNameUnique(post))
 | 
			
		||||
        {
 | 
			
		||||
            return error("新增岗位'" + post.getPostName() + "'失败,岗位名称已存在");
 | 
			
		||||
        }
 | 
			
		||||
        else if (!postService.checkPostCodeUnique(post))
 | 
			
		||||
        {
 | 
			
		||||
            return error("新增岗位'" + post.getPostName() + "'失败,岗位编码已存在");
 | 
			
		||||
        }
 | 
			
		||||
        post.setCreateBy(getUsername());
 | 
			
		||||
        return toAjax(postService.insertPost(post));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 修改岗位
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:post:edit')")
 | 
			
		||||
    @Log(title = "岗位管理", businessType = BusinessType.UPDATE)
 | 
			
		||||
    @PutMapping
 | 
			
		||||
    public AjaxResult edit(@Validated @RequestBody SysPost post)
 | 
			
		||||
    {
 | 
			
		||||
        if (!postService.checkPostNameUnique(post))
 | 
			
		||||
        {
 | 
			
		||||
            return error("修改岗位'" + post.getPostName() + "'失败,岗位名称已存在");
 | 
			
		||||
        }
 | 
			
		||||
        else if (!postService.checkPostCodeUnique(post))
 | 
			
		||||
        {
 | 
			
		||||
            return error("修改岗位'" + post.getPostName() + "'失败,岗位编码已存在");
 | 
			
		||||
        }
 | 
			
		||||
        post.setUpdateBy(getUsername());
 | 
			
		||||
        return toAjax(postService.updatePost(post));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 删除岗位
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:post:remove')")
 | 
			
		||||
    @Log(title = "岗位管理", businessType = BusinessType.DELETE)
 | 
			
		||||
    @DeleteMapping("/{postIds}")
 | 
			
		||||
    public AjaxResult remove(@PathVariable Long[] postIds)
 | 
			
		||||
    {
 | 
			
		||||
        return toAjax(postService.deletePostByIds(postIds));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获取岗位选择框列表
 | 
			
		||||
     */
 | 
			
		||||
    @GetMapping("/optionselect")
 | 
			
		||||
    public AjaxResult optionselect()
 | 
			
		||||
    {
 | 
			
		||||
        List<SysPost> posts = postService.selectPostAll();
 | 
			
		||||
        return success(posts);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,140 +1,137 @@
 | 
			
		|||
package com.tcctlo.web.controller.system;
 | 
			
		||||
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
			
		||||
import org.springframework.web.bind.annotation.GetMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.PostMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.PutMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.RequestBody;
 | 
			
		||||
import org.springframework.web.bind.annotation.RequestMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.RequestParam;
 | 
			
		||||
import org.springframework.web.bind.annotation.RestController;
 | 
			
		||||
import org.springframework.web.multipart.MultipartFile;
 | 
			
		||||
import com.tcctlo.common.annotation.Log;
 | 
			
		||||
import com.tcctlo.common.config.RuoYiConfig;
 | 
			
		||||
import com.tcctlo.common.core.controller.BaseController;
 | 
			
		||||
import com.tcctlo.common.core.domain.AjaxResult;
 | 
			
		||||
import com.tcctlo.common.core.domain.entity.SysUser;
 | 
			
		||||
import com.tcctlo.common.core.domain.model.LoginUser;
 | 
			
		||||
import com.tcctlo.common.enums.BusinessType;
 | 
			
		||||
import com.tcctlo.common.utils.SecurityUtils;
 | 
			
		||||
import com.tcctlo.common.utils.StringUtils;
 | 
			
		||||
import com.tcctlo.common.utils.file.FileUploadUtils;
 | 
			
		||||
import com.tcctlo.common.utils.file.MimeTypeUtils;
 | 
			
		||||
import com.tcctlo.framework.web.service.TokenService;
 | 
			
		||||
import com.tcctlo.system.service.ISysUserService;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 个人信息 业务处理
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
@RestController
 | 
			
		||||
@RequestMapping("/system/user/profile")
 | 
			
		||||
public class SysProfileController extends BaseController
 | 
			
		||||
{
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private ISysUserService userService;
 | 
			
		||||
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private TokenService tokenService;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 个人信息
 | 
			
		||||
     */
 | 
			
		||||
    @GetMapping
 | 
			
		||||
    public AjaxResult profile()
 | 
			
		||||
    {
 | 
			
		||||
        LoginUser loginUser = getLoginUser();
 | 
			
		||||
        SysUser user = loginUser.getUser();
 | 
			
		||||
        AjaxResult ajax = AjaxResult.success(user);
 | 
			
		||||
        ajax.put("roleGroup", userService.selectUserRoleGroup(loginUser.getUsername()));
 | 
			
		||||
        ajax.put("postGroup", userService.selectUserPostGroup(loginUser.getUsername()));
 | 
			
		||||
        return ajax;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 修改用户
 | 
			
		||||
     */
 | 
			
		||||
    @Log(title = "个人信息", businessType = BusinessType.UPDATE)
 | 
			
		||||
    @PutMapping
 | 
			
		||||
    public AjaxResult updateProfile(@RequestBody SysUser user)
 | 
			
		||||
    {
 | 
			
		||||
        LoginUser loginUser = getLoginUser();
 | 
			
		||||
        SysUser currentUser = loginUser.getUser();
 | 
			
		||||
        currentUser.setNickName(user.getNickName());
 | 
			
		||||
        currentUser.setEmail(user.getEmail());
 | 
			
		||||
        currentUser.setPhonenumber(user.getPhonenumber());
 | 
			
		||||
        currentUser.setSex(user.getSex());
 | 
			
		||||
        if (StringUtils.isNotEmpty(user.getPhonenumber()) && !userService.checkPhoneUnique(currentUser))
 | 
			
		||||
        {
 | 
			
		||||
            return error("修改用户'" + loginUser.getUsername() + "'失败,手机号码已存在");
 | 
			
		||||
        }
 | 
			
		||||
        if (StringUtils.isNotEmpty(user.getEmail()) && !userService.checkEmailUnique(currentUser))
 | 
			
		||||
        {
 | 
			
		||||
            return error("修改用户'" + loginUser.getUsername() + "'失败,邮箱账号已存在");
 | 
			
		||||
        }
 | 
			
		||||
        if (userService.updateUserProfile(currentUser) > 0)
 | 
			
		||||
        {
 | 
			
		||||
            // 更新缓存用户信息
 | 
			
		||||
            tokenService.setLoginUser(loginUser);
 | 
			
		||||
            return success();
 | 
			
		||||
        }
 | 
			
		||||
        return error("修改个人信息异常,请联系管理员");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 重置密码
 | 
			
		||||
     */
 | 
			
		||||
    @Log(title = "个人信息", businessType = BusinessType.UPDATE)
 | 
			
		||||
    @PutMapping("/updatePwd")
 | 
			
		||||
    public AjaxResult updatePwd(@RequestBody Map<String, String> params)
 | 
			
		||||
    {
 | 
			
		||||
        String oldPassword = params.get("oldPassword");
 | 
			
		||||
        String newPassword = params.get("newPassword");
 | 
			
		||||
        LoginUser loginUser = getLoginUser();
 | 
			
		||||
        String userName = loginUser.getUsername();
 | 
			
		||||
        String password = loginUser.getPassword();
 | 
			
		||||
        if (!SecurityUtils.matchesPassword(oldPassword, password))
 | 
			
		||||
        {
 | 
			
		||||
            return error("修改密码失败,旧密码错误");
 | 
			
		||||
        }
 | 
			
		||||
        if (SecurityUtils.matchesPassword(newPassword, password))
 | 
			
		||||
        {
 | 
			
		||||
            return error("新密码不能与旧密码相同");
 | 
			
		||||
        }
 | 
			
		||||
        newPassword = SecurityUtils.encryptPassword(newPassword);
 | 
			
		||||
        if (userService.resetUserPwd(userName, newPassword) > 0)
 | 
			
		||||
        {
 | 
			
		||||
            // 更新缓存用户密码
 | 
			
		||||
            loginUser.getUser().setPassword(newPassword);
 | 
			
		||||
            tokenService.setLoginUser(loginUser);
 | 
			
		||||
            return success();
 | 
			
		||||
        }
 | 
			
		||||
        return error("修改密码异常,请联系管理员");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 头像上传
 | 
			
		||||
     */
 | 
			
		||||
    @Log(title = "用户头像", businessType = BusinessType.UPDATE)
 | 
			
		||||
    @PostMapping("/avatar")
 | 
			
		||||
    public AjaxResult avatar(@RequestParam("avatarfile") MultipartFile file) throws Exception
 | 
			
		||||
    {
 | 
			
		||||
        if (!file.isEmpty())
 | 
			
		||||
        {
 | 
			
		||||
            LoginUser loginUser = getLoginUser();
 | 
			
		||||
            String avatar = FileUploadUtils.upload(RuoYiConfig.getAvatarPath(), file, MimeTypeUtils.IMAGE_EXTENSION);
 | 
			
		||||
            if (userService.updateUserAvatar(loginUser.getUsername(), avatar))
 | 
			
		||||
            {
 | 
			
		||||
                AjaxResult ajax = AjaxResult.success();
 | 
			
		||||
                ajax.put("imgUrl", avatar);
 | 
			
		||||
                // 更新缓存用户头像
 | 
			
		||||
                loginUser.getUser().setAvatar(avatar);
 | 
			
		||||
                tokenService.setLoginUser(loginUser);
 | 
			
		||||
                return ajax;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        return error("上传图片异常,请联系管理员");
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
package com.ruoyi.web.controller.system;
 | 
			
		||||
 | 
			
		||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
			
		||||
import org.springframework.web.bind.annotation.GetMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.PostMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.PutMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.RequestBody;
 | 
			
		||||
import org.springframework.web.bind.annotation.RequestMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.RequestParam;
 | 
			
		||||
import org.springframework.web.bind.annotation.RestController;
 | 
			
		||||
import org.springframework.web.multipart.MultipartFile;
 | 
			
		||||
import com.ruoyi.common.annotation.Log;
 | 
			
		||||
import com.ruoyi.common.config.RuoYiConfig;
 | 
			
		||||
import com.ruoyi.common.core.controller.BaseController;
 | 
			
		||||
import com.ruoyi.common.core.domain.AjaxResult;
 | 
			
		||||
import com.ruoyi.common.core.domain.entity.SysUser;
 | 
			
		||||
import com.ruoyi.common.core.domain.model.LoginUser;
 | 
			
		||||
import com.ruoyi.common.enums.BusinessType;
 | 
			
		||||
import com.ruoyi.common.utils.SecurityUtils;
 | 
			
		||||
import com.ruoyi.common.utils.StringUtils;
 | 
			
		||||
import com.ruoyi.common.utils.file.FileUploadUtils;
 | 
			
		||||
import com.ruoyi.common.utils.file.MimeTypeUtils;
 | 
			
		||||
import com.ruoyi.framework.web.service.TokenService;
 | 
			
		||||
import com.ruoyi.system.service.ISysUserService;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 个人信息 业务处理
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
@RestController
 | 
			
		||||
@RequestMapping("/system/user/profile")
 | 
			
		||||
public class SysProfileController extends BaseController
 | 
			
		||||
{
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private ISysUserService userService;
 | 
			
		||||
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private TokenService tokenService;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 个人信息
 | 
			
		||||
     */
 | 
			
		||||
    @GetMapping
 | 
			
		||||
    public AjaxResult profile()
 | 
			
		||||
    {
 | 
			
		||||
        LoginUser loginUser = getLoginUser();
 | 
			
		||||
        SysUser user = loginUser.getUser();
 | 
			
		||||
        AjaxResult ajax = AjaxResult.success(user);
 | 
			
		||||
        ajax.put("roleGroup", userService.selectUserRoleGroup(loginUser.getUsername()));
 | 
			
		||||
        ajax.put("postGroup", userService.selectUserPostGroup(loginUser.getUsername()));
 | 
			
		||||
        return ajax;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 修改用户
 | 
			
		||||
     */
 | 
			
		||||
    @Log(title = "个人信息", businessType = BusinessType.UPDATE)
 | 
			
		||||
    @PutMapping
 | 
			
		||||
    public AjaxResult updateProfile(@RequestBody SysUser user)
 | 
			
		||||
    {
 | 
			
		||||
        LoginUser loginUser = getLoginUser();
 | 
			
		||||
        SysUser currentUser = loginUser.getUser();
 | 
			
		||||
        currentUser.setNickName(user.getNickName());
 | 
			
		||||
        currentUser.setEmail(user.getEmail());
 | 
			
		||||
        currentUser.setPhonenumber(user.getPhonenumber());
 | 
			
		||||
        currentUser.setSex(user.getSex());
 | 
			
		||||
        if (StringUtils.isNotEmpty(user.getPhonenumber()) && !userService.checkPhoneUnique(currentUser))
 | 
			
		||||
        {
 | 
			
		||||
            return error("修改用户'" + loginUser.getUsername() + "'失败,手机号码已存在");
 | 
			
		||||
        }
 | 
			
		||||
        if (StringUtils.isNotEmpty(user.getEmail()) && !userService.checkEmailUnique(currentUser))
 | 
			
		||||
        {
 | 
			
		||||
            return error("修改用户'" + loginUser.getUsername() + "'失败,邮箱账号已存在");
 | 
			
		||||
        }
 | 
			
		||||
        if (userService.updateUserProfile(currentUser) > 0)
 | 
			
		||||
        {
 | 
			
		||||
            // 更新缓存用户信息
 | 
			
		||||
            tokenService.setLoginUser(loginUser);
 | 
			
		||||
            return success();
 | 
			
		||||
        }
 | 
			
		||||
        return error("修改个人信息异常,请联系管理员");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 重置密码
 | 
			
		||||
     */
 | 
			
		||||
    @Log(title = "个人信息", businessType = BusinessType.UPDATE)
 | 
			
		||||
    @PutMapping("/updatePwd")
 | 
			
		||||
    public AjaxResult updatePwd(String oldPassword, String newPassword)
 | 
			
		||||
    {
 | 
			
		||||
        LoginUser loginUser = getLoginUser();
 | 
			
		||||
        String userName = loginUser.getUsername();
 | 
			
		||||
        String password = loginUser.getPassword();
 | 
			
		||||
        if (!SecurityUtils.matchesPassword(oldPassword, password))
 | 
			
		||||
        {
 | 
			
		||||
            return error("修改密码失败,旧密码错误");
 | 
			
		||||
        }
 | 
			
		||||
        if (SecurityUtils.matchesPassword(newPassword, password))
 | 
			
		||||
        {
 | 
			
		||||
            return error("新密码不能与旧密码相同");
 | 
			
		||||
        }
 | 
			
		||||
        newPassword = SecurityUtils.encryptPassword(newPassword);
 | 
			
		||||
        if (userService.resetUserPwd(userName, newPassword) > 0)
 | 
			
		||||
        {
 | 
			
		||||
            // 更新缓存用户密码
 | 
			
		||||
            loginUser.getUser().setPassword(newPassword);
 | 
			
		||||
            tokenService.setLoginUser(loginUser);
 | 
			
		||||
            return success();
 | 
			
		||||
        }
 | 
			
		||||
        return error("修改密码异常,请联系管理员");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 头像上传
 | 
			
		||||
     */
 | 
			
		||||
    @Log(title = "用户头像", businessType = BusinessType.UPDATE)
 | 
			
		||||
    @PostMapping("/avatar")
 | 
			
		||||
    public AjaxResult avatar(@RequestParam("avatarfile") MultipartFile file) throws Exception
 | 
			
		||||
    {
 | 
			
		||||
        if (!file.isEmpty())
 | 
			
		||||
        {
 | 
			
		||||
            LoginUser loginUser = getLoginUser();
 | 
			
		||||
            String avatar = FileUploadUtils.upload(RuoYiConfig.getAvatarPath(), file, MimeTypeUtils.IMAGE_EXTENSION);
 | 
			
		||||
            if (userService.updateUserAvatar(loginUser.getUsername(), avatar))
 | 
			
		||||
            {
 | 
			
		||||
                AjaxResult ajax = AjaxResult.success();
 | 
			
		||||
                ajax.put("imgUrl", avatar);
 | 
			
		||||
                // 更新缓存用户头像
 | 
			
		||||
                loginUser.getUser().setAvatar(avatar);
 | 
			
		||||
                tokenService.setLoginUser(loginUser);
 | 
			
		||||
                return ajax;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        return error("上传图片异常,请联系管理员");
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,38 +1,38 @@
 | 
			
		|||
package com.tcctlo.web.controller.system;
 | 
			
		||||
 | 
			
		||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
			
		||||
import org.springframework.web.bind.annotation.PostMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.RequestBody;
 | 
			
		||||
import org.springframework.web.bind.annotation.RestController;
 | 
			
		||||
import com.tcctlo.common.core.controller.BaseController;
 | 
			
		||||
import com.tcctlo.common.core.domain.AjaxResult;
 | 
			
		||||
import com.tcctlo.common.core.domain.model.RegisterBody;
 | 
			
		||||
import com.tcctlo.common.utils.StringUtils;
 | 
			
		||||
import com.tcctlo.framework.web.service.SysRegisterService;
 | 
			
		||||
import com.tcctlo.system.service.ISysConfigService;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 注册验证
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
@RestController
 | 
			
		||||
public class SysRegisterController extends BaseController
 | 
			
		||||
{
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private SysRegisterService registerService;
 | 
			
		||||
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private ISysConfigService configService;
 | 
			
		||||
 | 
			
		||||
    @PostMapping("/register")
 | 
			
		||||
    public AjaxResult register(@RequestBody RegisterBody user)
 | 
			
		||||
    {
 | 
			
		||||
        if (!("true".equals(configService.selectConfigByKey("sys.account.registerUser"))))
 | 
			
		||||
        {
 | 
			
		||||
            return error("当前系统没有开启注册功能!");
 | 
			
		||||
        }
 | 
			
		||||
        String msg = registerService.register(user);
 | 
			
		||||
        return StringUtils.isEmpty(msg) ? success() : error(msg);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
package com.ruoyi.web.controller.system;
 | 
			
		||||
 | 
			
		||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
			
		||||
import org.springframework.web.bind.annotation.PostMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.RequestBody;
 | 
			
		||||
import org.springframework.web.bind.annotation.RestController;
 | 
			
		||||
import com.ruoyi.common.core.controller.BaseController;
 | 
			
		||||
import com.ruoyi.common.core.domain.AjaxResult;
 | 
			
		||||
import com.ruoyi.common.core.domain.model.RegisterBody;
 | 
			
		||||
import com.ruoyi.common.utils.StringUtils;
 | 
			
		||||
import com.ruoyi.framework.web.service.SysRegisterService;
 | 
			
		||||
import com.ruoyi.system.service.ISysConfigService;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 注册验证
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
@RestController
 | 
			
		||||
public class SysRegisterController extends BaseController
 | 
			
		||||
{
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private SysRegisterService registerService;
 | 
			
		||||
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private ISysConfigService configService;
 | 
			
		||||
 | 
			
		||||
    @PostMapping("/register")
 | 
			
		||||
    public AjaxResult register(@RequestBody RegisterBody user)
 | 
			
		||||
    {
 | 
			
		||||
        if (!("true".equals(configService.selectConfigByKey("sys.account.registerUser"))))
 | 
			
		||||
        {
 | 
			
		||||
            return error("当前系统没有开启注册功能!");
 | 
			
		||||
        }
 | 
			
		||||
        String msg = registerService.register(user);
 | 
			
		||||
        return StringUtils.isEmpty(msg) ? success() : error(msg);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,262 +1,262 @@
 | 
			
		|||
package com.tcctlo.web.controller.system;
 | 
			
		||||
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import javax.servlet.http.HttpServletResponse;
 | 
			
		||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
			
		||||
import org.springframework.security.access.prepost.PreAuthorize;
 | 
			
		||||
import org.springframework.validation.annotation.Validated;
 | 
			
		||||
import org.springframework.web.bind.annotation.DeleteMapping;
 | 
			
		||||
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.PutMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.RequestBody;
 | 
			
		||||
import org.springframework.web.bind.annotation.RequestMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.RestController;
 | 
			
		||||
import com.tcctlo.common.annotation.Log;
 | 
			
		||||
import com.tcctlo.common.core.controller.BaseController;
 | 
			
		||||
import com.tcctlo.common.core.domain.AjaxResult;
 | 
			
		||||
import com.tcctlo.common.core.domain.entity.SysDept;
 | 
			
		||||
import com.tcctlo.common.core.domain.entity.SysRole;
 | 
			
		||||
import com.tcctlo.common.core.domain.entity.SysUser;
 | 
			
		||||
import com.tcctlo.common.core.domain.model.LoginUser;
 | 
			
		||||
import com.tcctlo.common.core.page.TableDataInfo;
 | 
			
		||||
import com.tcctlo.common.enums.BusinessType;
 | 
			
		||||
import com.tcctlo.common.utils.StringUtils;
 | 
			
		||||
import com.tcctlo.common.utils.poi.ExcelUtil;
 | 
			
		||||
import com.tcctlo.framework.web.service.SysPermissionService;
 | 
			
		||||
import com.tcctlo.framework.web.service.TokenService;
 | 
			
		||||
import com.tcctlo.system.domain.SysUserRole;
 | 
			
		||||
import com.tcctlo.system.service.ISysDeptService;
 | 
			
		||||
import com.tcctlo.system.service.ISysRoleService;
 | 
			
		||||
import com.tcctlo.system.service.ISysUserService;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 角色信息
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
@RestController
 | 
			
		||||
@RequestMapping("/system/role")
 | 
			
		||||
public class SysRoleController extends BaseController
 | 
			
		||||
{
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private ISysRoleService roleService;
 | 
			
		||||
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private TokenService tokenService;
 | 
			
		||||
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private SysPermissionService permissionService;
 | 
			
		||||
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private ISysUserService userService;
 | 
			
		||||
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private ISysDeptService deptService;
 | 
			
		||||
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:role:list')")
 | 
			
		||||
    @GetMapping("/list")
 | 
			
		||||
    public TableDataInfo list(SysRole role)
 | 
			
		||||
    {
 | 
			
		||||
        startPage();
 | 
			
		||||
        List<SysRole> list = roleService.selectRoleList(role);
 | 
			
		||||
        return getDataTable(list);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Log(title = "角色管理", businessType = BusinessType.EXPORT)
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:role:export')")
 | 
			
		||||
    @PostMapping("/export")
 | 
			
		||||
    public void export(HttpServletResponse response, SysRole role)
 | 
			
		||||
    {
 | 
			
		||||
        List<SysRole> list = roleService.selectRoleList(role);
 | 
			
		||||
        ExcelUtil<SysRole> util = new ExcelUtil<SysRole>(SysRole.class);
 | 
			
		||||
        util.exportExcel(response, list, "角色数据");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 根据角色编号获取详细信息
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:role:query')")
 | 
			
		||||
    @GetMapping(value = "/{roleId}")
 | 
			
		||||
    public AjaxResult getInfo(@PathVariable Long roleId)
 | 
			
		||||
    {
 | 
			
		||||
        roleService.checkRoleDataScope(roleId);
 | 
			
		||||
        return success(roleService.selectRoleById(roleId));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 新增角色
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:role:add')")
 | 
			
		||||
    @Log(title = "角色管理", businessType = BusinessType.INSERT)
 | 
			
		||||
    @PostMapping
 | 
			
		||||
    public AjaxResult add(@Validated @RequestBody SysRole role)
 | 
			
		||||
    {
 | 
			
		||||
        if (!roleService.checkRoleNameUnique(role))
 | 
			
		||||
        {
 | 
			
		||||
            return error("新增角色'" + role.getRoleName() + "'失败,角色名称已存在");
 | 
			
		||||
        }
 | 
			
		||||
        else if (!roleService.checkRoleKeyUnique(role))
 | 
			
		||||
        {
 | 
			
		||||
            return error("新增角色'" + role.getRoleName() + "'失败,角色权限已存在");
 | 
			
		||||
        }
 | 
			
		||||
        role.setCreateBy(getUsername());
 | 
			
		||||
        return toAjax(roleService.insertRole(role));
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 修改保存角色
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:role:edit')")
 | 
			
		||||
    @Log(title = "角色管理", businessType = BusinessType.UPDATE)
 | 
			
		||||
    @PutMapping
 | 
			
		||||
    public AjaxResult edit(@Validated @RequestBody SysRole role)
 | 
			
		||||
    {
 | 
			
		||||
        roleService.checkRoleAllowed(role);
 | 
			
		||||
        roleService.checkRoleDataScope(role.getRoleId());
 | 
			
		||||
        if (!roleService.checkRoleNameUnique(role))
 | 
			
		||||
        {
 | 
			
		||||
            return error("修改角色'" + role.getRoleName() + "'失败,角色名称已存在");
 | 
			
		||||
        }
 | 
			
		||||
        else if (!roleService.checkRoleKeyUnique(role))
 | 
			
		||||
        {
 | 
			
		||||
            return error("修改角色'" + role.getRoleName() + "'失败,角色权限已存在");
 | 
			
		||||
        }
 | 
			
		||||
        role.setUpdateBy(getUsername());
 | 
			
		||||
        
 | 
			
		||||
        if (roleService.updateRole(role) > 0)
 | 
			
		||||
        {
 | 
			
		||||
            // 更新缓存用户权限
 | 
			
		||||
            LoginUser loginUser = getLoginUser();
 | 
			
		||||
            if (StringUtils.isNotNull(loginUser.getUser()) && !loginUser.getUser().isAdmin())
 | 
			
		||||
            {
 | 
			
		||||
                loginUser.setUser(userService.selectUserByUserName(loginUser.getUser().getUserName()));
 | 
			
		||||
                loginUser.setPermissions(permissionService.getMenuPermission(loginUser.getUser()));
 | 
			
		||||
                tokenService.setLoginUser(loginUser);
 | 
			
		||||
            }
 | 
			
		||||
            return success();
 | 
			
		||||
        }
 | 
			
		||||
        return error("修改角色'" + role.getRoleName() + "'失败,请联系管理员");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 修改保存数据权限
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:role:edit')")
 | 
			
		||||
    @Log(title = "角色管理", businessType = BusinessType.UPDATE)
 | 
			
		||||
    @PutMapping("/dataScope")
 | 
			
		||||
    public AjaxResult dataScope(@RequestBody SysRole role)
 | 
			
		||||
    {
 | 
			
		||||
        roleService.checkRoleAllowed(role);
 | 
			
		||||
        roleService.checkRoleDataScope(role.getRoleId());
 | 
			
		||||
        return toAjax(roleService.authDataScope(role));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 状态修改
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:role:edit')")
 | 
			
		||||
    @Log(title = "角色管理", businessType = BusinessType.UPDATE)
 | 
			
		||||
    @PutMapping("/changeStatus")
 | 
			
		||||
    public AjaxResult changeStatus(@RequestBody SysRole role)
 | 
			
		||||
    {
 | 
			
		||||
        roleService.checkRoleAllowed(role);
 | 
			
		||||
        roleService.checkRoleDataScope(role.getRoleId());
 | 
			
		||||
        role.setUpdateBy(getUsername());
 | 
			
		||||
        return toAjax(roleService.updateRoleStatus(role));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 删除角色
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:role:remove')")
 | 
			
		||||
    @Log(title = "角色管理", businessType = BusinessType.DELETE)
 | 
			
		||||
    @DeleteMapping("/{roleIds}")
 | 
			
		||||
    public AjaxResult remove(@PathVariable Long[] roleIds)
 | 
			
		||||
    {
 | 
			
		||||
        return toAjax(roleService.deleteRoleByIds(roleIds));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获取角色选择框列表
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:role:query')")
 | 
			
		||||
    @GetMapping("/optionselect")
 | 
			
		||||
    public AjaxResult optionselect()
 | 
			
		||||
    {
 | 
			
		||||
        return success(roleService.selectRoleAll());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 查询已分配用户角色列表
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:role:list')")
 | 
			
		||||
    @GetMapping("/authUser/allocatedList")
 | 
			
		||||
    public TableDataInfo allocatedList(SysUser user)
 | 
			
		||||
    {
 | 
			
		||||
        startPage();
 | 
			
		||||
        List<SysUser> list = userService.selectAllocatedList(user);
 | 
			
		||||
        return getDataTable(list);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 查询未分配用户角色列表
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:role:list')")
 | 
			
		||||
    @GetMapping("/authUser/unallocatedList")
 | 
			
		||||
    public TableDataInfo unallocatedList(SysUser user)
 | 
			
		||||
    {
 | 
			
		||||
        startPage();
 | 
			
		||||
        List<SysUser> list = userService.selectUnallocatedList(user);
 | 
			
		||||
        return getDataTable(list);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 取消授权用户
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:role:edit')")
 | 
			
		||||
    @Log(title = "角色管理", businessType = BusinessType.GRANT)
 | 
			
		||||
    @PutMapping("/authUser/cancel")
 | 
			
		||||
    public AjaxResult cancelAuthUser(@RequestBody SysUserRole userRole)
 | 
			
		||||
    {
 | 
			
		||||
        return toAjax(roleService.deleteAuthUser(userRole));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 批量取消授权用户
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:role:edit')")
 | 
			
		||||
    @Log(title = "角色管理", businessType = BusinessType.GRANT)
 | 
			
		||||
    @PutMapping("/authUser/cancelAll")
 | 
			
		||||
    public AjaxResult cancelAuthUserAll(Long roleId, Long[] userIds)
 | 
			
		||||
    {
 | 
			
		||||
        return toAjax(roleService.deleteAuthUsers(roleId, userIds));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 批量选择用户授权
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:role:edit')")
 | 
			
		||||
    @Log(title = "角色管理", businessType = BusinessType.GRANT)
 | 
			
		||||
    @PutMapping("/authUser/selectAll")
 | 
			
		||||
    public AjaxResult selectAuthUserAll(Long roleId, Long[] userIds)
 | 
			
		||||
    {
 | 
			
		||||
        roleService.checkRoleDataScope(roleId);
 | 
			
		||||
        return toAjax(roleService.insertAuthUsers(roleId, userIds));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获取对应角色部门树列表
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:role:query')")
 | 
			
		||||
    @GetMapping(value = "/deptTree/{roleId}")
 | 
			
		||||
    public AjaxResult deptTree(@PathVariable("roleId") Long roleId)
 | 
			
		||||
    {
 | 
			
		||||
        AjaxResult ajax = AjaxResult.success();
 | 
			
		||||
        ajax.put("checkedKeys", deptService.selectDeptListByRoleId(roleId));
 | 
			
		||||
        ajax.put("depts", deptService.selectDeptTreeList(new SysDept()));
 | 
			
		||||
        return ajax;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
package com.ruoyi.web.controller.system;
 | 
			
		||||
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import javax.servlet.http.HttpServletResponse;
 | 
			
		||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
			
		||||
import org.springframework.security.access.prepost.PreAuthorize;
 | 
			
		||||
import org.springframework.validation.annotation.Validated;
 | 
			
		||||
import org.springframework.web.bind.annotation.DeleteMapping;
 | 
			
		||||
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.PutMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.RequestBody;
 | 
			
		||||
import org.springframework.web.bind.annotation.RequestMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.RestController;
 | 
			
		||||
import com.ruoyi.common.annotation.Log;
 | 
			
		||||
import com.ruoyi.common.core.controller.BaseController;
 | 
			
		||||
import com.ruoyi.common.core.domain.AjaxResult;
 | 
			
		||||
import com.ruoyi.common.core.domain.entity.SysDept;
 | 
			
		||||
import com.ruoyi.common.core.domain.entity.SysRole;
 | 
			
		||||
import com.ruoyi.common.core.domain.entity.SysUser;
 | 
			
		||||
import com.ruoyi.common.core.domain.model.LoginUser;
 | 
			
		||||
import com.ruoyi.common.core.page.TableDataInfo;
 | 
			
		||||
import com.ruoyi.common.enums.BusinessType;
 | 
			
		||||
import com.ruoyi.common.utils.StringUtils;
 | 
			
		||||
import com.ruoyi.common.utils.poi.ExcelUtil;
 | 
			
		||||
import com.ruoyi.framework.web.service.SysPermissionService;
 | 
			
		||||
import com.ruoyi.framework.web.service.TokenService;
 | 
			
		||||
import com.ruoyi.system.domain.SysUserRole;
 | 
			
		||||
import com.ruoyi.system.service.ISysDeptService;
 | 
			
		||||
import com.ruoyi.system.service.ISysRoleService;
 | 
			
		||||
import com.ruoyi.system.service.ISysUserService;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 角色信息
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
@RestController
 | 
			
		||||
@RequestMapping("/system/role")
 | 
			
		||||
public class SysRoleController extends BaseController
 | 
			
		||||
{
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private ISysRoleService roleService;
 | 
			
		||||
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private TokenService tokenService;
 | 
			
		||||
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private SysPermissionService permissionService;
 | 
			
		||||
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private ISysUserService userService;
 | 
			
		||||
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private ISysDeptService deptService;
 | 
			
		||||
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:role:list')")
 | 
			
		||||
    @GetMapping("/list")
 | 
			
		||||
    public TableDataInfo list(SysRole role)
 | 
			
		||||
    {
 | 
			
		||||
        startPage();
 | 
			
		||||
        List<SysRole> list = roleService.selectRoleList(role);
 | 
			
		||||
        return getDataTable(list);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Log(title = "角色管理", businessType = BusinessType.EXPORT)
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:role:export')")
 | 
			
		||||
    @PostMapping("/export")
 | 
			
		||||
    public void export(HttpServletResponse response, SysRole role)
 | 
			
		||||
    {
 | 
			
		||||
        List<SysRole> list = roleService.selectRoleList(role);
 | 
			
		||||
        ExcelUtil<SysRole> util = new ExcelUtil<SysRole>(SysRole.class);
 | 
			
		||||
        util.exportExcel(response, list, "角色数据");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 根据角色编号获取详细信息
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:role:query')")
 | 
			
		||||
    @GetMapping(value = "/{roleId}")
 | 
			
		||||
    public AjaxResult getInfo(@PathVariable Long roleId)
 | 
			
		||||
    {
 | 
			
		||||
        roleService.checkRoleDataScope(roleId);
 | 
			
		||||
        return success(roleService.selectRoleById(roleId));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 新增角色
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:role:add')")
 | 
			
		||||
    @Log(title = "角色管理", businessType = BusinessType.INSERT)
 | 
			
		||||
    @PostMapping
 | 
			
		||||
    public AjaxResult add(@Validated @RequestBody SysRole role)
 | 
			
		||||
    {
 | 
			
		||||
        if (!roleService.checkRoleNameUnique(role))
 | 
			
		||||
        {
 | 
			
		||||
            return error("新增角色'" + role.getRoleName() + "'失败,角色名称已存在");
 | 
			
		||||
        }
 | 
			
		||||
        else if (!roleService.checkRoleKeyUnique(role))
 | 
			
		||||
        {
 | 
			
		||||
            return error("新增角色'" + role.getRoleName() + "'失败,角色权限已存在");
 | 
			
		||||
        }
 | 
			
		||||
        role.setCreateBy(getUsername());
 | 
			
		||||
        return toAjax(roleService.insertRole(role));
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 修改保存角色
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:role:edit')")
 | 
			
		||||
    @Log(title = "角色管理", businessType = BusinessType.UPDATE)
 | 
			
		||||
    @PutMapping
 | 
			
		||||
    public AjaxResult edit(@Validated @RequestBody SysRole role)
 | 
			
		||||
    {
 | 
			
		||||
        roleService.checkRoleAllowed(role);
 | 
			
		||||
        roleService.checkRoleDataScope(role.getRoleId());
 | 
			
		||||
        if (!roleService.checkRoleNameUnique(role))
 | 
			
		||||
        {
 | 
			
		||||
            return error("修改角色'" + role.getRoleName() + "'失败,角色名称已存在");
 | 
			
		||||
        }
 | 
			
		||||
        else if (!roleService.checkRoleKeyUnique(role))
 | 
			
		||||
        {
 | 
			
		||||
            return error("修改角色'" + role.getRoleName() + "'失败,角色权限已存在");
 | 
			
		||||
        }
 | 
			
		||||
        role.setUpdateBy(getUsername());
 | 
			
		||||
        
 | 
			
		||||
        if (roleService.updateRole(role) > 0)
 | 
			
		||||
        {
 | 
			
		||||
            // 更新缓存用户权限
 | 
			
		||||
            LoginUser loginUser = getLoginUser();
 | 
			
		||||
            if (StringUtils.isNotNull(loginUser.getUser()) && !loginUser.getUser().isAdmin())
 | 
			
		||||
            {
 | 
			
		||||
                loginUser.setUser(userService.selectUserByUserName(loginUser.getUser().getUserName()));
 | 
			
		||||
                loginUser.setPermissions(permissionService.getMenuPermission(loginUser.getUser()));
 | 
			
		||||
                tokenService.setLoginUser(loginUser);
 | 
			
		||||
            }
 | 
			
		||||
            return success();
 | 
			
		||||
        }
 | 
			
		||||
        return error("修改角色'" + role.getRoleName() + "'失败,请联系管理员");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 修改保存数据权限
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:role:edit')")
 | 
			
		||||
    @Log(title = "角色管理", businessType = BusinessType.UPDATE)
 | 
			
		||||
    @PutMapping("/dataScope")
 | 
			
		||||
    public AjaxResult dataScope(@RequestBody SysRole role)
 | 
			
		||||
    {
 | 
			
		||||
        roleService.checkRoleAllowed(role);
 | 
			
		||||
        roleService.checkRoleDataScope(role.getRoleId());
 | 
			
		||||
        return toAjax(roleService.authDataScope(role));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 状态修改
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:role:edit')")
 | 
			
		||||
    @Log(title = "角色管理", businessType = BusinessType.UPDATE)
 | 
			
		||||
    @PutMapping("/changeStatus")
 | 
			
		||||
    public AjaxResult changeStatus(@RequestBody SysRole role)
 | 
			
		||||
    {
 | 
			
		||||
        roleService.checkRoleAllowed(role);
 | 
			
		||||
        roleService.checkRoleDataScope(role.getRoleId());
 | 
			
		||||
        role.setUpdateBy(getUsername());
 | 
			
		||||
        return toAjax(roleService.updateRoleStatus(role));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 删除角色
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:role:remove')")
 | 
			
		||||
    @Log(title = "角色管理", businessType = BusinessType.DELETE)
 | 
			
		||||
    @DeleteMapping("/{roleIds}")
 | 
			
		||||
    public AjaxResult remove(@PathVariable Long[] roleIds)
 | 
			
		||||
    {
 | 
			
		||||
        return toAjax(roleService.deleteRoleByIds(roleIds));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获取角色选择框列表
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:role:query')")
 | 
			
		||||
    @GetMapping("/optionselect")
 | 
			
		||||
    public AjaxResult optionselect()
 | 
			
		||||
    {
 | 
			
		||||
        return success(roleService.selectRoleAll());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 查询已分配用户角色列表
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:role:list')")
 | 
			
		||||
    @GetMapping("/authUser/allocatedList")
 | 
			
		||||
    public TableDataInfo allocatedList(SysUser user)
 | 
			
		||||
    {
 | 
			
		||||
        startPage();
 | 
			
		||||
        List<SysUser> list = userService.selectAllocatedList(user);
 | 
			
		||||
        return getDataTable(list);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 查询未分配用户角色列表
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:role:list')")
 | 
			
		||||
    @GetMapping("/authUser/unallocatedList")
 | 
			
		||||
    public TableDataInfo unallocatedList(SysUser user)
 | 
			
		||||
    {
 | 
			
		||||
        startPage();
 | 
			
		||||
        List<SysUser> list = userService.selectUnallocatedList(user);
 | 
			
		||||
        return getDataTable(list);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 取消授权用户
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:role:edit')")
 | 
			
		||||
    @Log(title = "角色管理", businessType = BusinessType.GRANT)
 | 
			
		||||
    @PutMapping("/authUser/cancel")
 | 
			
		||||
    public AjaxResult cancelAuthUser(@RequestBody SysUserRole userRole)
 | 
			
		||||
    {
 | 
			
		||||
        return toAjax(roleService.deleteAuthUser(userRole));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 批量取消授权用户
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:role:edit')")
 | 
			
		||||
    @Log(title = "角色管理", businessType = BusinessType.GRANT)
 | 
			
		||||
    @PutMapping("/authUser/cancelAll")
 | 
			
		||||
    public AjaxResult cancelAuthUserAll(Long roleId, Long[] userIds)
 | 
			
		||||
    {
 | 
			
		||||
        return toAjax(roleService.deleteAuthUsers(roleId, userIds));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 批量选择用户授权
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:role:edit')")
 | 
			
		||||
    @Log(title = "角色管理", businessType = BusinessType.GRANT)
 | 
			
		||||
    @PutMapping("/authUser/selectAll")
 | 
			
		||||
    public AjaxResult selectAuthUserAll(Long roleId, Long[] userIds)
 | 
			
		||||
    {
 | 
			
		||||
        roleService.checkRoleDataScope(roleId);
 | 
			
		||||
        return toAjax(roleService.insertAuthUsers(roleId, userIds));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获取对应角色部门树列表
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:role:query')")
 | 
			
		||||
    @GetMapping(value = "/deptTree/{roleId}")
 | 
			
		||||
    public AjaxResult deptTree(@PathVariable("roleId") Long roleId)
 | 
			
		||||
    {
 | 
			
		||||
        AjaxResult ajax = AjaxResult.success();
 | 
			
		||||
        ajax.put("checkedKeys", deptService.selectDeptListByRoleId(roleId));
 | 
			
		||||
        ajax.put("depts", deptService.selectDeptTreeList(new SysDept()));
 | 
			
		||||
        return ajax;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,256 +1,256 @@
 | 
			
		|||
package com.tcctlo.web.controller.system;
 | 
			
		||||
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.stream.Collectors;
 | 
			
		||||
import javax.servlet.http.HttpServletResponse;
 | 
			
		||||
import org.apache.commons.lang3.ArrayUtils;
 | 
			
		||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
			
		||||
import org.springframework.security.access.prepost.PreAuthorize;
 | 
			
		||||
import org.springframework.validation.annotation.Validated;
 | 
			
		||||
import org.springframework.web.bind.annotation.DeleteMapping;
 | 
			
		||||
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.PutMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.RequestBody;
 | 
			
		||||
import org.springframework.web.bind.annotation.RequestMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.RestController;
 | 
			
		||||
import org.springframework.web.multipart.MultipartFile;
 | 
			
		||||
import com.tcctlo.common.annotation.Log;
 | 
			
		||||
import com.tcctlo.common.core.controller.BaseController;
 | 
			
		||||
import com.tcctlo.common.core.domain.AjaxResult;
 | 
			
		||||
import com.tcctlo.common.core.domain.entity.SysDept;
 | 
			
		||||
import com.tcctlo.common.core.domain.entity.SysRole;
 | 
			
		||||
import com.tcctlo.common.core.domain.entity.SysUser;
 | 
			
		||||
import com.tcctlo.common.core.page.TableDataInfo;
 | 
			
		||||
import com.tcctlo.common.enums.BusinessType;
 | 
			
		||||
import com.tcctlo.common.utils.SecurityUtils;
 | 
			
		||||
import com.tcctlo.common.utils.StringUtils;
 | 
			
		||||
import com.tcctlo.common.utils.poi.ExcelUtil;
 | 
			
		||||
import com.tcctlo.system.service.ISysDeptService;
 | 
			
		||||
import com.tcctlo.system.service.ISysPostService;
 | 
			
		||||
import com.tcctlo.system.service.ISysRoleService;
 | 
			
		||||
import com.tcctlo.system.service.ISysUserService;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 用户信息
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
@RestController
 | 
			
		||||
@RequestMapping("/system/user")
 | 
			
		||||
public class SysUserController extends BaseController
 | 
			
		||||
{
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private ISysUserService userService;
 | 
			
		||||
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private ISysRoleService roleService;
 | 
			
		||||
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private ISysDeptService deptService;
 | 
			
		||||
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private ISysPostService postService;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获取用户列表
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:user:list')")
 | 
			
		||||
    @GetMapping("/list")
 | 
			
		||||
    public TableDataInfo list(SysUser user)
 | 
			
		||||
    {
 | 
			
		||||
        startPage();
 | 
			
		||||
        List<SysUser> list = userService.selectUserList(user);
 | 
			
		||||
        return getDataTable(list);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Log(title = "用户管理", businessType = BusinessType.EXPORT)
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:user:export')")
 | 
			
		||||
    @PostMapping("/export")
 | 
			
		||||
    public void export(HttpServletResponse response, SysUser user)
 | 
			
		||||
    {
 | 
			
		||||
        List<SysUser> list = userService.selectUserList(user);
 | 
			
		||||
        ExcelUtil<SysUser> util = new ExcelUtil<SysUser>(SysUser.class);
 | 
			
		||||
        util.exportExcel(response, list, "用户数据");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Log(title = "用户管理", businessType = BusinessType.IMPORT)
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:user:import')")
 | 
			
		||||
    @PostMapping("/importData")
 | 
			
		||||
    public AjaxResult importData(MultipartFile file, boolean updateSupport) throws Exception
 | 
			
		||||
    {
 | 
			
		||||
        ExcelUtil<SysUser> util = new ExcelUtil<SysUser>(SysUser.class);
 | 
			
		||||
        List<SysUser> userList = util.importExcel(file.getInputStream());
 | 
			
		||||
        String operName = getUsername();
 | 
			
		||||
        String message = userService.importUser(userList, updateSupport, operName);
 | 
			
		||||
        return success(message);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @PostMapping("/importTemplate")
 | 
			
		||||
    public void importTemplate(HttpServletResponse response)
 | 
			
		||||
    {
 | 
			
		||||
        ExcelUtil<SysUser> util = new ExcelUtil<SysUser>(SysUser.class);
 | 
			
		||||
        util.importTemplateExcel(response, "用户数据");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 根据用户编号获取详细信息
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:user:query')")
 | 
			
		||||
    @GetMapping(value = { "/", "/{userId}" })
 | 
			
		||||
    public AjaxResult getInfo(@PathVariable(value = "userId", required = false) Long userId)
 | 
			
		||||
    {
 | 
			
		||||
        AjaxResult ajax = AjaxResult.success();
 | 
			
		||||
        if (StringUtils.isNotNull(userId))
 | 
			
		||||
        {
 | 
			
		||||
            userService.checkUserDataScope(userId);
 | 
			
		||||
            SysUser sysUser = userService.selectUserById(userId);
 | 
			
		||||
            ajax.put(AjaxResult.DATA_TAG, sysUser);
 | 
			
		||||
            ajax.put("postIds", postService.selectPostListByUserId(userId));
 | 
			
		||||
            ajax.put("roleIds", sysUser.getRoles().stream().map(SysRole::getRoleId).collect(Collectors.toList()));
 | 
			
		||||
        }
 | 
			
		||||
        List<SysRole> roles = roleService.selectRoleAll();
 | 
			
		||||
        ajax.put("roles", SysUser.isAdmin(userId) ? roles : roles.stream().filter(r -> !r.isAdmin()).collect(Collectors.toList()));
 | 
			
		||||
        ajax.put("posts", postService.selectPostAll());
 | 
			
		||||
        return ajax;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 新增用户
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:user:add')")
 | 
			
		||||
    @Log(title = "用户管理", businessType = BusinessType.INSERT)
 | 
			
		||||
    @PostMapping
 | 
			
		||||
    public AjaxResult add(@Validated @RequestBody SysUser user)
 | 
			
		||||
    {
 | 
			
		||||
        deptService.checkDeptDataScope(user.getDeptId());
 | 
			
		||||
        roleService.checkRoleDataScope(user.getRoleIds());
 | 
			
		||||
        if (!userService.checkUserNameUnique(user))
 | 
			
		||||
        {
 | 
			
		||||
            return error("新增用户'" + user.getUserName() + "'失败,登录账号已存在");
 | 
			
		||||
        }
 | 
			
		||||
        else if (StringUtils.isNotEmpty(user.getPhonenumber()) && !userService.checkPhoneUnique(user))
 | 
			
		||||
        {
 | 
			
		||||
            return error("新增用户'" + user.getUserName() + "'失败,手机号码已存在");
 | 
			
		||||
        }
 | 
			
		||||
        else if (StringUtils.isNotEmpty(user.getEmail()) && !userService.checkEmailUnique(user))
 | 
			
		||||
        {
 | 
			
		||||
            return error("新增用户'" + user.getUserName() + "'失败,邮箱账号已存在");
 | 
			
		||||
        }
 | 
			
		||||
        user.setCreateBy(getUsername());
 | 
			
		||||
        user.setPassword(SecurityUtils.encryptPassword(user.getPassword()));
 | 
			
		||||
        return toAjax(userService.insertUser(user));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 修改用户
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:user:edit')")
 | 
			
		||||
    @Log(title = "用户管理", businessType = BusinessType.UPDATE)
 | 
			
		||||
    @PutMapping
 | 
			
		||||
    public AjaxResult edit(@Validated @RequestBody SysUser user)
 | 
			
		||||
    {
 | 
			
		||||
        userService.checkUserAllowed(user);
 | 
			
		||||
        userService.checkUserDataScope(user.getUserId());
 | 
			
		||||
        deptService.checkDeptDataScope(user.getDeptId());
 | 
			
		||||
        roleService.checkRoleDataScope(user.getRoleIds());
 | 
			
		||||
        if (!userService.checkUserNameUnique(user))
 | 
			
		||||
        {
 | 
			
		||||
            return error("修改用户'" + user.getUserName() + "'失败,登录账号已存在");
 | 
			
		||||
        }
 | 
			
		||||
        else if (StringUtils.isNotEmpty(user.getPhonenumber()) && !userService.checkPhoneUnique(user))
 | 
			
		||||
        {
 | 
			
		||||
            return error("修改用户'" + user.getUserName() + "'失败,手机号码已存在");
 | 
			
		||||
        }
 | 
			
		||||
        else if (StringUtils.isNotEmpty(user.getEmail()) && !userService.checkEmailUnique(user))
 | 
			
		||||
        {
 | 
			
		||||
            return error("修改用户'" + user.getUserName() + "'失败,邮箱账号已存在");
 | 
			
		||||
        }
 | 
			
		||||
        user.setUpdateBy(getUsername());
 | 
			
		||||
        return toAjax(userService.updateUser(user));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 删除用户
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:user:remove')")
 | 
			
		||||
    @Log(title = "用户管理", businessType = BusinessType.DELETE)
 | 
			
		||||
    @DeleteMapping("/{userIds}")
 | 
			
		||||
    public AjaxResult remove(@PathVariable Long[] userIds)
 | 
			
		||||
    {
 | 
			
		||||
        if (ArrayUtils.contains(userIds, getUserId()))
 | 
			
		||||
        {
 | 
			
		||||
            return error("当前用户不能删除");
 | 
			
		||||
        }
 | 
			
		||||
        return toAjax(userService.deleteUserByIds(userIds));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 重置密码
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:user:resetPwd')")
 | 
			
		||||
    @Log(title = "用户管理", businessType = BusinessType.UPDATE)
 | 
			
		||||
    @PutMapping("/resetPwd")
 | 
			
		||||
    public AjaxResult resetPwd(@RequestBody SysUser user)
 | 
			
		||||
    {
 | 
			
		||||
        userService.checkUserAllowed(user);
 | 
			
		||||
        userService.checkUserDataScope(user.getUserId());
 | 
			
		||||
        user.setPassword(SecurityUtils.encryptPassword(user.getPassword()));
 | 
			
		||||
        user.setUpdateBy(getUsername());
 | 
			
		||||
        return toAjax(userService.resetPwd(user));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 状态修改
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:user:edit')")
 | 
			
		||||
    @Log(title = "用户管理", businessType = BusinessType.UPDATE)
 | 
			
		||||
    @PutMapping("/changeStatus")
 | 
			
		||||
    public AjaxResult changeStatus(@RequestBody SysUser user)
 | 
			
		||||
    {
 | 
			
		||||
        userService.checkUserAllowed(user);
 | 
			
		||||
        userService.checkUserDataScope(user.getUserId());
 | 
			
		||||
        user.setUpdateBy(getUsername());
 | 
			
		||||
        return toAjax(userService.updateUserStatus(user));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 根据用户编号获取授权角色
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:user:query')")
 | 
			
		||||
    @GetMapping("/authRole/{userId}")
 | 
			
		||||
    public AjaxResult authRole(@PathVariable("userId") Long userId)
 | 
			
		||||
    {
 | 
			
		||||
        AjaxResult ajax = AjaxResult.success();
 | 
			
		||||
        SysUser user = userService.selectUserById(userId);
 | 
			
		||||
        List<SysRole> roles = roleService.selectRolesByUserId(userId);
 | 
			
		||||
        ajax.put("user", user);
 | 
			
		||||
        ajax.put("roles", SysUser.isAdmin(userId) ? roles : roles.stream().filter(r -> !r.isAdmin()).collect(Collectors.toList()));
 | 
			
		||||
        return ajax;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 用户授权角色
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:user:edit')")
 | 
			
		||||
    @Log(title = "用户管理", businessType = BusinessType.GRANT)
 | 
			
		||||
    @PutMapping("/authRole")
 | 
			
		||||
    public AjaxResult insertAuthRole(Long userId, Long[] roleIds)
 | 
			
		||||
    {
 | 
			
		||||
        userService.checkUserDataScope(userId);
 | 
			
		||||
        roleService.checkRoleDataScope(roleIds);
 | 
			
		||||
        userService.insertUserAuth(userId, roleIds);
 | 
			
		||||
        return success();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获取部门树列表
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:user:list')")
 | 
			
		||||
    @GetMapping("/deptTree")
 | 
			
		||||
    public AjaxResult deptTree(SysDept dept)
 | 
			
		||||
    {
 | 
			
		||||
        return success(deptService.selectDeptTreeList(dept));
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
package com.ruoyi.web.controller.system;
 | 
			
		||||
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.stream.Collectors;
 | 
			
		||||
import javax.servlet.http.HttpServletResponse;
 | 
			
		||||
import org.apache.commons.lang3.ArrayUtils;
 | 
			
		||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
			
		||||
import org.springframework.security.access.prepost.PreAuthorize;
 | 
			
		||||
import org.springframework.validation.annotation.Validated;
 | 
			
		||||
import org.springframework.web.bind.annotation.DeleteMapping;
 | 
			
		||||
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.PutMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.RequestBody;
 | 
			
		||||
import org.springframework.web.bind.annotation.RequestMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.RestController;
 | 
			
		||||
import org.springframework.web.multipart.MultipartFile;
 | 
			
		||||
import com.ruoyi.common.annotation.Log;
 | 
			
		||||
import com.ruoyi.common.core.controller.BaseController;
 | 
			
		||||
import com.ruoyi.common.core.domain.AjaxResult;
 | 
			
		||||
import com.ruoyi.common.core.domain.entity.SysDept;
 | 
			
		||||
import com.ruoyi.common.core.domain.entity.SysRole;
 | 
			
		||||
import com.ruoyi.common.core.domain.entity.SysUser;
 | 
			
		||||
import com.ruoyi.common.core.page.TableDataInfo;
 | 
			
		||||
import com.ruoyi.common.enums.BusinessType;
 | 
			
		||||
import com.ruoyi.common.utils.SecurityUtils;
 | 
			
		||||
import com.ruoyi.common.utils.StringUtils;
 | 
			
		||||
import com.ruoyi.common.utils.poi.ExcelUtil;
 | 
			
		||||
import com.ruoyi.system.service.ISysDeptService;
 | 
			
		||||
import com.ruoyi.system.service.ISysPostService;
 | 
			
		||||
import com.ruoyi.system.service.ISysRoleService;
 | 
			
		||||
import com.ruoyi.system.service.ISysUserService;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 用户信息
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
@RestController
 | 
			
		||||
@RequestMapping("/system/user")
 | 
			
		||||
public class SysUserController extends BaseController
 | 
			
		||||
{
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private ISysUserService userService;
 | 
			
		||||
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private ISysRoleService roleService;
 | 
			
		||||
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private ISysDeptService deptService;
 | 
			
		||||
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private ISysPostService postService;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获取用户列表
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:user:list')")
 | 
			
		||||
    @GetMapping("/list")
 | 
			
		||||
    public TableDataInfo list(SysUser user)
 | 
			
		||||
    {
 | 
			
		||||
        startPage();
 | 
			
		||||
        List<SysUser> list = userService.selectUserList(user);
 | 
			
		||||
        return getDataTable(list);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Log(title = "用户管理", businessType = BusinessType.EXPORT)
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:user:export')")
 | 
			
		||||
    @PostMapping("/export")
 | 
			
		||||
    public void export(HttpServletResponse response, SysUser user)
 | 
			
		||||
    {
 | 
			
		||||
        List<SysUser> list = userService.selectUserList(user);
 | 
			
		||||
        ExcelUtil<SysUser> util = new ExcelUtil<SysUser>(SysUser.class);
 | 
			
		||||
        util.exportExcel(response, list, "用户数据");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Log(title = "用户管理", businessType = BusinessType.IMPORT)
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:user:import')")
 | 
			
		||||
    @PostMapping("/importData")
 | 
			
		||||
    public AjaxResult importData(MultipartFile file, boolean updateSupport) throws Exception
 | 
			
		||||
    {
 | 
			
		||||
        ExcelUtil<SysUser> util = new ExcelUtil<SysUser>(SysUser.class);
 | 
			
		||||
        List<SysUser> userList = util.importExcel(file.getInputStream());
 | 
			
		||||
        String operName = getUsername();
 | 
			
		||||
        String message = userService.importUser(userList, updateSupport, operName);
 | 
			
		||||
        return success(message);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @PostMapping("/importTemplate")
 | 
			
		||||
    public void importTemplate(HttpServletResponse response)
 | 
			
		||||
    {
 | 
			
		||||
        ExcelUtil<SysUser> util = new ExcelUtil<SysUser>(SysUser.class);
 | 
			
		||||
        util.importTemplateExcel(response, "用户数据");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 根据用户编号获取详细信息
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:user:query')")
 | 
			
		||||
    @GetMapping(value = { "/", "/{userId}" })
 | 
			
		||||
    public AjaxResult getInfo(@PathVariable(value = "userId", required = false) Long userId)
 | 
			
		||||
    {
 | 
			
		||||
        AjaxResult ajax = AjaxResult.success();
 | 
			
		||||
        if (StringUtils.isNotNull(userId))
 | 
			
		||||
        {
 | 
			
		||||
            userService.checkUserDataScope(userId);
 | 
			
		||||
            SysUser sysUser = userService.selectUserById(userId);
 | 
			
		||||
            ajax.put(AjaxResult.DATA_TAG, sysUser);
 | 
			
		||||
            ajax.put("postIds", postService.selectPostListByUserId(userId));
 | 
			
		||||
            ajax.put("roleIds", sysUser.getRoles().stream().map(SysRole::getRoleId).collect(Collectors.toList()));
 | 
			
		||||
        }
 | 
			
		||||
        List<SysRole> roles = roleService.selectRoleAll();
 | 
			
		||||
        ajax.put("roles", SysUser.isAdmin(userId) ? roles : roles.stream().filter(r -> !r.isAdmin()).collect(Collectors.toList()));
 | 
			
		||||
        ajax.put("posts", postService.selectPostAll());
 | 
			
		||||
        return ajax;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 新增用户
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:user:add')")
 | 
			
		||||
    @Log(title = "用户管理", businessType = BusinessType.INSERT)
 | 
			
		||||
    @PostMapping
 | 
			
		||||
    public AjaxResult add(@Validated @RequestBody SysUser user)
 | 
			
		||||
    {
 | 
			
		||||
        deptService.checkDeptDataScope(user.getDeptId());
 | 
			
		||||
        roleService.checkRoleDataScope(user.getRoleIds());
 | 
			
		||||
        if (!userService.checkUserNameUnique(user))
 | 
			
		||||
        {
 | 
			
		||||
            return error("新增用户'" + user.getUserName() + "'失败,登录账号已存在");
 | 
			
		||||
        }
 | 
			
		||||
        else if (StringUtils.isNotEmpty(user.getPhonenumber()) && !userService.checkPhoneUnique(user))
 | 
			
		||||
        {
 | 
			
		||||
            return error("新增用户'" + user.getUserName() + "'失败,手机号码已存在");
 | 
			
		||||
        }
 | 
			
		||||
        else if (StringUtils.isNotEmpty(user.getEmail()) && !userService.checkEmailUnique(user))
 | 
			
		||||
        {
 | 
			
		||||
            return error("新增用户'" + user.getUserName() + "'失败,邮箱账号已存在");
 | 
			
		||||
        }
 | 
			
		||||
        user.setCreateBy(getUsername());
 | 
			
		||||
        user.setPassword(SecurityUtils.encryptPassword(user.getPassword()));
 | 
			
		||||
        return toAjax(userService.insertUser(user));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 修改用户
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:user:edit')")
 | 
			
		||||
    @Log(title = "用户管理", businessType = BusinessType.UPDATE)
 | 
			
		||||
    @PutMapping
 | 
			
		||||
    public AjaxResult edit(@Validated @RequestBody SysUser user)
 | 
			
		||||
    {
 | 
			
		||||
        userService.checkUserAllowed(user);
 | 
			
		||||
        userService.checkUserDataScope(user.getUserId());
 | 
			
		||||
        deptService.checkDeptDataScope(user.getDeptId());
 | 
			
		||||
        roleService.checkRoleDataScope(user.getRoleIds());
 | 
			
		||||
        if (!userService.checkUserNameUnique(user))
 | 
			
		||||
        {
 | 
			
		||||
            return error("修改用户'" + user.getUserName() + "'失败,登录账号已存在");
 | 
			
		||||
        }
 | 
			
		||||
        else if (StringUtils.isNotEmpty(user.getPhonenumber()) && !userService.checkPhoneUnique(user))
 | 
			
		||||
        {
 | 
			
		||||
            return error("修改用户'" + user.getUserName() + "'失败,手机号码已存在");
 | 
			
		||||
        }
 | 
			
		||||
        else if (StringUtils.isNotEmpty(user.getEmail()) && !userService.checkEmailUnique(user))
 | 
			
		||||
        {
 | 
			
		||||
            return error("修改用户'" + user.getUserName() + "'失败,邮箱账号已存在");
 | 
			
		||||
        }
 | 
			
		||||
        user.setUpdateBy(getUsername());
 | 
			
		||||
        return toAjax(userService.updateUser(user));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 删除用户
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:user:remove')")
 | 
			
		||||
    @Log(title = "用户管理", businessType = BusinessType.DELETE)
 | 
			
		||||
    @DeleteMapping("/{userIds}")
 | 
			
		||||
    public AjaxResult remove(@PathVariable Long[] userIds)
 | 
			
		||||
    {
 | 
			
		||||
        if (ArrayUtils.contains(userIds, getUserId()))
 | 
			
		||||
        {
 | 
			
		||||
            return error("当前用户不能删除");
 | 
			
		||||
        }
 | 
			
		||||
        return toAjax(userService.deleteUserByIds(userIds));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 重置密码
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:user:resetPwd')")
 | 
			
		||||
    @Log(title = "用户管理", businessType = BusinessType.UPDATE)
 | 
			
		||||
    @PutMapping("/resetPwd")
 | 
			
		||||
    public AjaxResult resetPwd(@RequestBody SysUser user)
 | 
			
		||||
    {
 | 
			
		||||
        userService.checkUserAllowed(user);
 | 
			
		||||
        userService.checkUserDataScope(user.getUserId());
 | 
			
		||||
        user.setPassword(SecurityUtils.encryptPassword(user.getPassword()));
 | 
			
		||||
        user.setUpdateBy(getUsername());
 | 
			
		||||
        return toAjax(userService.resetPwd(user));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 状态修改
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:user:edit')")
 | 
			
		||||
    @Log(title = "用户管理", businessType = BusinessType.UPDATE)
 | 
			
		||||
    @PutMapping("/changeStatus")
 | 
			
		||||
    public AjaxResult changeStatus(@RequestBody SysUser user)
 | 
			
		||||
    {
 | 
			
		||||
        userService.checkUserAllowed(user);
 | 
			
		||||
        userService.checkUserDataScope(user.getUserId());
 | 
			
		||||
        user.setUpdateBy(getUsername());
 | 
			
		||||
        return toAjax(userService.updateUserStatus(user));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 根据用户编号获取授权角色
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:user:query')")
 | 
			
		||||
    @GetMapping("/authRole/{userId}")
 | 
			
		||||
    public AjaxResult authRole(@PathVariable("userId") Long userId)
 | 
			
		||||
    {
 | 
			
		||||
        AjaxResult ajax = AjaxResult.success();
 | 
			
		||||
        SysUser user = userService.selectUserById(userId);
 | 
			
		||||
        List<SysRole> roles = roleService.selectRolesByUserId(userId);
 | 
			
		||||
        ajax.put("user", user);
 | 
			
		||||
        ajax.put("roles", SysUser.isAdmin(userId) ? roles : roles.stream().filter(r -> !r.isAdmin()).collect(Collectors.toList()));
 | 
			
		||||
        return ajax;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 用户授权角色
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:user:edit')")
 | 
			
		||||
    @Log(title = "用户管理", businessType = BusinessType.GRANT)
 | 
			
		||||
    @PutMapping("/authRole")
 | 
			
		||||
    public AjaxResult insertAuthRole(Long userId, Long[] roleIds)
 | 
			
		||||
    {
 | 
			
		||||
        userService.checkUserDataScope(userId);
 | 
			
		||||
        roleService.checkRoleDataScope(roleIds);
 | 
			
		||||
        userService.insertUserAuth(userId, roleIds);
 | 
			
		||||
        return success();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获取部门树列表
 | 
			
		||||
     */
 | 
			
		||||
    @PreAuthorize("@ss.hasPermi('system:user:list')")
 | 
			
		||||
    @GetMapping("/deptTree")
 | 
			
		||||
    public AjaxResult deptTree(SysDept dept)
 | 
			
		||||
    {
 | 
			
		||||
        return success(deptService.selectDeptTreeList(dept));
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,183 +1,183 @@
 | 
			
		|||
package com.tcctlo.web.controller.tool;
 | 
			
		||||
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.LinkedHashMap;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
import org.springframework.web.bind.annotation.DeleteMapping;
 | 
			
		||||
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.PutMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.RequestBody;
 | 
			
		||||
import org.springframework.web.bind.annotation.RequestMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.RestController;
 | 
			
		||||
import com.tcctlo.common.core.controller.BaseController;
 | 
			
		||||
import com.tcctlo.common.core.domain.R;
 | 
			
		||||
import com.tcctlo.common.utils.StringUtils;
 | 
			
		||||
import io.swagger.annotations.Api;
 | 
			
		||||
import io.swagger.annotations.ApiImplicitParam;
 | 
			
		||||
import io.swagger.annotations.ApiImplicitParams;
 | 
			
		||||
import io.swagger.annotations.ApiModel;
 | 
			
		||||
import io.swagger.annotations.ApiModelProperty;
 | 
			
		||||
import io.swagger.annotations.ApiOperation;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * swagger 用户测试方法
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
@Api("用户信息管理")
 | 
			
		||||
@RestController
 | 
			
		||||
@RequestMapping("/test/user")
 | 
			
		||||
public class TestController extends BaseController
 | 
			
		||||
{
 | 
			
		||||
    private final static Map<Integer, UserEntity> users = new LinkedHashMap<Integer, UserEntity>();
 | 
			
		||||
    {
 | 
			
		||||
        users.put(1, new UserEntity(1, "admin", "admin123", "15888888888"));
 | 
			
		||||
        users.put(2, new UserEntity(2, "ry", "admin123", "15666666666"));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @ApiOperation("获取用户列表")
 | 
			
		||||
    @GetMapping("/list")
 | 
			
		||||
    public R<List<UserEntity>> userList()
 | 
			
		||||
    {
 | 
			
		||||
        List<UserEntity> userList = new ArrayList<UserEntity>(users.values());
 | 
			
		||||
        return R.ok(userList);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @ApiOperation("获取用户详细")
 | 
			
		||||
    @ApiImplicitParam(name = "userId", value = "用户ID", required = true, dataType = "int", paramType = "path", dataTypeClass = Integer.class)
 | 
			
		||||
    @GetMapping("/{userId}")
 | 
			
		||||
    public R<UserEntity> getUser(@PathVariable Integer userId)
 | 
			
		||||
    {
 | 
			
		||||
        if (!users.isEmpty() && users.containsKey(userId))
 | 
			
		||||
        {
 | 
			
		||||
            return R.ok(users.get(userId));
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
        {
 | 
			
		||||
            return R.fail("用户不存在");
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @ApiOperation("新增用户")
 | 
			
		||||
    @ApiImplicitParams({
 | 
			
		||||
        @ApiImplicitParam(name = "userId", value = "用户id", dataType = "Integer", dataTypeClass = Integer.class),
 | 
			
		||||
        @ApiImplicitParam(name = "username", value = "用户名称", dataType = "String", dataTypeClass = String.class),
 | 
			
		||||
        @ApiImplicitParam(name = "password", value = "用户密码", dataType = "String", dataTypeClass = String.class),
 | 
			
		||||
        @ApiImplicitParam(name = "mobile", value = "用户手机", dataType = "String", dataTypeClass = String.class)
 | 
			
		||||
    })
 | 
			
		||||
    @PostMapping("/save")
 | 
			
		||||
    public R<String> save(UserEntity user)
 | 
			
		||||
    {
 | 
			
		||||
        if (StringUtils.isNull(user) || StringUtils.isNull(user.getUserId()))
 | 
			
		||||
        {
 | 
			
		||||
            return R.fail("用户ID不能为空");
 | 
			
		||||
        }
 | 
			
		||||
        users.put(user.getUserId(), user);
 | 
			
		||||
        return R.ok();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @ApiOperation("更新用户")
 | 
			
		||||
    @PutMapping("/update")
 | 
			
		||||
    public R<String> update(@RequestBody UserEntity user)
 | 
			
		||||
    {
 | 
			
		||||
        if (StringUtils.isNull(user) || StringUtils.isNull(user.getUserId()))
 | 
			
		||||
        {
 | 
			
		||||
            return R.fail("用户ID不能为空");
 | 
			
		||||
        }
 | 
			
		||||
        if (users.isEmpty() || !users.containsKey(user.getUserId()))
 | 
			
		||||
        {
 | 
			
		||||
            return R.fail("用户不存在");
 | 
			
		||||
        }
 | 
			
		||||
        users.remove(user.getUserId());
 | 
			
		||||
        users.put(user.getUserId(), user);
 | 
			
		||||
        return R.ok();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @ApiOperation("删除用户信息")
 | 
			
		||||
    @ApiImplicitParam(name = "userId", value = "用户ID", required = true, dataType = "int", paramType = "path", dataTypeClass = Integer.class)
 | 
			
		||||
    @DeleteMapping("/{userId}")
 | 
			
		||||
    public R<String> delete(@PathVariable Integer userId)
 | 
			
		||||
    {
 | 
			
		||||
        if (!users.isEmpty() && users.containsKey(userId))
 | 
			
		||||
        {
 | 
			
		||||
            users.remove(userId);
 | 
			
		||||
            return R.ok();
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
        {
 | 
			
		||||
            return R.fail("用户不存在");
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ApiModel(value = "UserEntity", description = "用户实体")
 | 
			
		||||
class UserEntity
 | 
			
		||||
{
 | 
			
		||||
    @ApiModelProperty("用户ID")
 | 
			
		||||
    private Integer userId;
 | 
			
		||||
 | 
			
		||||
    @ApiModelProperty("用户名称")
 | 
			
		||||
    private String username;
 | 
			
		||||
 | 
			
		||||
    @ApiModelProperty("用户密码")
 | 
			
		||||
    private String password;
 | 
			
		||||
 | 
			
		||||
    @ApiModelProperty("用户手机")
 | 
			
		||||
    private String mobile;
 | 
			
		||||
 | 
			
		||||
    public UserEntity()
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public UserEntity(Integer userId, String username, String password, String mobile)
 | 
			
		||||
    {
 | 
			
		||||
        this.userId = userId;
 | 
			
		||||
        this.username = username;
 | 
			
		||||
        this.password = password;
 | 
			
		||||
        this.mobile = mobile;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Integer getUserId()
 | 
			
		||||
    {
 | 
			
		||||
        return userId;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setUserId(Integer userId)
 | 
			
		||||
    {
 | 
			
		||||
        this.userId = userId;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getUsername()
 | 
			
		||||
    {
 | 
			
		||||
        return username;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setUsername(String username)
 | 
			
		||||
    {
 | 
			
		||||
        this.username = username;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getPassword()
 | 
			
		||||
    {
 | 
			
		||||
        return password;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setPassword(String password)
 | 
			
		||||
    {
 | 
			
		||||
        this.password = password;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getMobile()
 | 
			
		||||
    {
 | 
			
		||||
        return mobile;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setMobile(String mobile)
 | 
			
		||||
    {
 | 
			
		||||
        this.mobile = mobile;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
package com.ruoyi.web.controller.tool;
 | 
			
		||||
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.LinkedHashMap;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
import org.springframework.web.bind.annotation.DeleteMapping;
 | 
			
		||||
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.PutMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.RequestBody;
 | 
			
		||||
import org.springframework.web.bind.annotation.RequestMapping;
 | 
			
		||||
import org.springframework.web.bind.annotation.RestController;
 | 
			
		||||
import com.ruoyi.common.core.controller.BaseController;
 | 
			
		||||
import com.ruoyi.common.core.domain.R;
 | 
			
		||||
import com.ruoyi.common.utils.StringUtils;
 | 
			
		||||
import io.swagger.annotations.Api;
 | 
			
		||||
import io.swagger.annotations.ApiImplicitParam;
 | 
			
		||||
import io.swagger.annotations.ApiImplicitParams;
 | 
			
		||||
import io.swagger.annotations.ApiModel;
 | 
			
		||||
import io.swagger.annotations.ApiModelProperty;
 | 
			
		||||
import io.swagger.annotations.ApiOperation;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * swagger 用户测试方法
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
@Api("用户信息管理")
 | 
			
		||||
@RestController
 | 
			
		||||
@RequestMapping("/test/user")
 | 
			
		||||
public class TestController extends BaseController
 | 
			
		||||
{
 | 
			
		||||
    private final static Map<Integer, UserEntity> users = new LinkedHashMap<Integer, UserEntity>();
 | 
			
		||||
    {
 | 
			
		||||
        users.put(1, new UserEntity(1, "admin", "admin123", "15888888888"));
 | 
			
		||||
        users.put(2, new UserEntity(2, "ry", "admin123", "15666666666"));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @ApiOperation("获取用户列表")
 | 
			
		||||
    @GetMapping("/list")
 | 
			
		||||
    public R<List<UserEntity>> userList()
 | 
			
		||||
    {
 | 
			
		||||
        List<UserEntity> userList = new ArrayList<UserEntity>(users.values());
 | 
			
		||||
        return R.ok(userList);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @ApiOperation("获取用户详细")
 | 
			
		||||
    @ApiImplicitParam(name = "userId", value = "用户ID", required = true, dataType = "int", paramType = "path", dataTypeClass = Integer.class)
 | 
			
		||||
    @GetMapping("/{userId}")
 | 
			
		||||
    public R<UserEntity> getUser(@PathVariable Integer userId)
 | 
			
		||||
    {
 | 
			
		||||
        if (!users.isEmpty() && users.containsKey(userId))
 | 
			
		||||
        {
 | 
			
		||||
            return R.ok(users.get(userId));
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
        {
 | 
			
		||||
            return R.fail("用户不存在");
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @ApiOperation("新增用户")
 | 
			
		||||
    @ApiImplicitParams({
 | 
			
		||||
        @ApiImplicitParam(name = "userId", value = "用户id", dataType = "Integer", dataTypeClass = Integer.class),
 | 
			
		||||
        @ApiImplicitParam(name = "username", value = "用户名称", dataType = "String", dataTypeClass = String.class),
 | 
			
		||||
        @ApiImplicitParam(name = "password", value = "用户密码", dataType = "String", dataTypeClass = String.class),
 | 
			
		||||
        @ApiImplicitParam(name = "mobile", value = "用户手机", dataType = "String", dataTypeClass = String.class)
 | 
			
		||||
    })
 | 
			
		||||
    @PostMapping("/save")
 | 
			
		||||
    public R<String> save(UserEntity user)
 | 
			
		||||
    {
 | 
			
		||||
        if (StringUtils.isNull(user) || StringUtils.isNull(user.getUserId()))
 | 
			
		||||
        {
 | 
			
		||||
            return R.fail("用户ID不能为空");
 | 
			
		||||
        }
 | 
			
		||||
        users.put(user.getUserId(), user);
 | 
			
		||||
        return R.ok();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @ApiOperation("更新用户")
 | 
			
		||||
    @PutMapping("/update")
 | 
			
		||||
    public R<String> update(@RequestBody UserEntity user)
 | 
			
		||||
    {
 | 
			
		||||
        if (StringUtils.isNull(user) || StringUtils.isNull(user.getUserId()))
 | 
			
		||||
        {
 | 
			
		||||
            return R.fail("用户ID不能为空");
 | 
			
		||||
        }
 | 
			
		||||
        if (users.isEmpty() || !users.containsKey(user.getUserId()))
 | 
			
		||||
        {
 | 
			
		||||
            return R.fail("用户不存在");
 | 
			
		||||
        }
 | 
			
		||||
        users.remove(user.getUserId());
 | 
			
		||||
        users.put(user.getUserId(), user);
 | 
			
		||||
        return R.ok();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @ApiOperation("删除用户信息")
 | 
			
		||||
    @ApiImplicitParam(name = "userId", value = "用户ID", required = true, dataType = "int", paramType = "path", dataTypeClass = Integer.class)
 | 
			
		||||
    @DeleteMapping("/{userId}")
 | 
			
		||||
    public R<String> delete(@PathVariable Integer userId)
 | 
			
		||||
    {
 | 
			
		||||
        if (!users.isEmpty() && users.containsKey(userId))
 | 
			
		||||
        {
 | 
			
		||||
            users.remove(userId);
 | 
			
		||||
            return R.ok();
 | 
			
		||||
        }
 | 
			
		||||
        else
 | 
			
		||||
        {
 | 
			
		||||
            return R.fail("用户不存在");
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ApiModel(value = "UserEntity", description = "用户实体")
 | 
			
		||||
class UserEntity
 | 
			
		||||
{
 | 
			
		||||
    @ApiModelProperty("用户ID")
 | 
			
		||||
    private Integer userId;
 | 
			
		||||
 | 
			
		||||
    @ApiModelProperty("用户名称")
 | 
			
		||||
    private String username;
 | 
			
		||||
 | 
			
		||||
    @ApiModelProperty("用户密码")
 | 
			
		||||
    private String password;
 | 
			
		||||
 | 
			
		||||
    @ApiModelProperty("用户手机")
 | 
			
		||||
    private String mobile;
 | 
			
		||||
 | 
			
		||||
    public UserEntity()
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public UserEntity(Integer userId, String username, String password, String mobile)
 | 
			
		||||
    {
 | 
			
		||||
        this.userId = userId;
 | 
			
		||||
        this.username = username;
 | 
			
		||||
        this.password = password;
 | 
			
		||||
        this.mobile = mobile;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Integer getUserId()
 | 
			
		||||
    {
 | 
			
		||||
        return userId;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setUserId(Integer userId)
 | 
			
		||||
    {
 | 
			
		||||
        this.userId = userId;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getUsername()
 | 
			
		||||
    {
 | 
			
		||||
        return username;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setUsername(String username)
 | 
			
		||||
    {
 | 
			
		||||
        this.username = username;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getPassword()
 | 
			
		||||
    {
 | 
			
		||||
        return password;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setPassword(String password)
 | 
			
		||||
    {
 | 
			
		||||
        this.password = password;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getMobile()
 | 
			
		||||
    {
 | 
			
		||||
        return mobile;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setMobile(String mobile)
 | 
			
		||||
    {
 | 
			
		||||
        this.mobile = mobile;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,125 +1,125 @@
 | 
			
		|||
package com.tcctlo.web.core.config;
 | 
			
		||||
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
			
		||||
import org.springframework.beans.factory.annotation.Value;
 | 
			
		||||
import org.springframework.context.annotation.Bean;
 | 
			
		||||
import org.springframework.context.annotation.Configuration;
 | 
			
		||||
import com.tcctlo.common.config.RuoYiConfig;
 | 
			
		||||
import io.swagger.annotations.ApiOperation;
 | 
			
		||||
import io.swagger.models.auth.In;
 | 
			
		||||
import springfox.documentation.builders.ApiInfoBuilder;
 | 
			
		||||
import springfox.documentation.builders.PathSelectors;
 | 
			
		||||
import springfox.documentation.builders.RequestHandlerSelectors;
 | 
			
		||||
import springfox.documentation.service.ApiInfo;
 | 
			
		||||
import springfox.documentation.service.ApiKey;
 | 
			
		||||
import springfox.documentation.service.AuthorizationScope;
 | 
			
		||||
import springfox.documentation.service.Contact;
 | 
			
		||||
import springfox.documentation.service.SecurityReference;
 | 
			
		||||
import springfox.documentation.service.SecurityScheme;
 | 
			
		||||
import springfox.documentation.spi.DocumentationType;
 | 
			
		||||
import springfox.documentation.spi.service.contexts.SecurityContext;
 | 
			
		||||
import springfox.documentation.spring.web.plugins.Docket;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Swagger2的接口配置
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
@Configuration
 | 
			
		||||
public class SwaggerConfig
 | 
			
		||||
{
 | 
			
		||||
    /** 系统基础配置 */
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private RuoYiConfig ruoyiConfig;
 | 
			
		||||
 | 
			
		||||
    /** 是否开启swagger */
 | 
			
		||||
    @Value("${swagger.enabled}")
 | 
			
		||||
    private boolean enabled;
 | 
			
		||||
 | 
			
		||||
    /** 设置请求的统一前缀 */
 | 
			
		||||
    @Value("${swagger.pathMapping}")
 | 
			
		||||
    private String pathMapping;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 创建API
 | 
			
		||||
     */
 | 
			
		||||
    @Bean
 | 
			
		||||
    public Docket createRestApi()
 | 
			
		||||
    {
 | 
			
		||||
        return new Docket(DocumentationType.OAS_30)
 | 
			
		||||
                // 是否启用Swagger
 | 
			
		||||
                .enable(enabled)
 | 
			
		||||
                // 用来创建该API的基本信息,展示在文档的页面中(自定义展示的信息)
 | 
			
		||||
                .apiInfo(apiInfo())
 | 
			
		||||
                // 设置哪些接口暴露给Swagger展示
 | 
			
		||||
                .select()
 | 
			
		||||
                // 扫描所有有注解的api,用这种方式更灵活
 | 
			
		||||
                .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
 | 
			
		||||
                // 扫描指定包中的swagger注解
 | 
			
		||||
                // .apis(RequestHandlerSelectors.basePackage("com.tcctlo.project.tool.swagger"))
 | 
			
		||||
                // 扫描所有 .apis(RequestHandlerSelectors.any())
 | 
			
		||||
                .paths(PathSelectors.any())
 | 
			
		||||
                .build()
 | 
			
		||||
                /* 设置安全模式,swagger可以设置访问token */
 | 
			
		||||
                .securitySchemes(securitySchemes())
 | 
			
		||||
                .securityContexts(securityContexts())
 | 
			
		||||
                .pathMapping(pathMapping);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 安全模式,这里指定token通过Authorization头请求头传递
 | 
			
		||||
     */
 | 
			
		||||
    private List<SecurityScheme> securitySchemes()
 | 
			
		||||
    {
 | 
			
		||||
        List<SecurityScheme> apiKeyList = new ArrayList<SecurityScheme>();
 | 
			
		||||
        apiKeyList.add(new ApiKey("Authorization", "Authorization", In.HEADER.toValue()));
 | 
			
		||||
        return apiKeyList;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 安全上下文
 | 
			
		||||
     */
 | 
			
		||||
    private List<SecurityContext> securityContexts()
 | 
			
		||||
    {
 | 
			
		||||
        List<SecurityContext> securityContexts = new ArrayList<>();
 | 
			
		||||
        securityContexts.add(
 | 
			
		||||
                SecurityContext.builder()
 | 
			
		||||
                        .securityReferences(defaultAuth())
 | 
			
		||||
                        .operationSelector(o -> o.requestMappingPattern().matches("/.*"))
 | 
			
		||||
                        .build());
 | 
			
		||||
        return securityContexts;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 默认的安全上引用
 | 
			
		||||
     */
 | 
			
		||||
    private List<SecurityReference> defaultAuth()
 | 
			
		||||
    {
 | 
			
		||||
        AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");
 | 
			
		||||
        AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
 | 
			
		||||
        authorizationScopes[0] = authorizationScope;
 | 
			
		||||
        List<SecurityReference> securityReferences = new ArrayList<>();
 | 
			
		||||
        securityReferences.add(new SecurityReference("Authorization", authorizationScopes));
 | 
			
		||||
        return securityReferences;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 添加摘要信息
 | 
			
		||||
     */
 | 
			
		||||
    private ApiInfo apiInfo()
 | 
			
		||||
    {
 | 
			
		||||
        // 用ApiInfoBuilder进行定制
 | 
			
		||||
        return new ApiInfoBuilder()
 | 
			
		||||
                // 设置标题
 | 
			
		||||
                .title("标题:若依管理系统_接口文档")
 | 
			
		||||
                // 描述
 | 
			
		||||
                .description("描述:用于管理集团旗下公司的人员信息,具体包括XXX,XXX模块...")
 | 
			
		||||
                // 作者信息
 | 
			
		||||
                .contact(new Contact(ruoyiConfig.getName(), null, null))
 | 
			
		||||
                // 版本
 | 
			
		||||
                .version("版本号:" + ruoyiConfig.getVersion())
 | 
			
		||||
                .build();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
package com.ruoyi.web.core.config;
 | 
			
		||||
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
			
		||||
import org.springframework.beans.factory.annotation.Value;
 | 
			
		||||
import org.springframework.context.annotation.Bean;
 | 
			
		||||
import org.springframework.context.annotation.Configuration;
 | 
			
		||||
import com.ruoyi.common.config.RuoYiConfig;
 | 
			
		||||
import io.swagger.annotations.ApiOperation;
 | 
			
		||||
import io.swagger.models.auth.In;
 | 
			
		||||
import springfox.documentation.builders.ApiInfoBuilder;
 | 
			
		||||
import springfox.documentation.builders.PathSelectors;
 | 
			
		||||
import springfox.documentation.builders.RequestHandlerSelectors;
 | 
			
		||||
import springfox.documentation.service.ApiInfo;
 | 
			
		||||
import springfox.documentation.service.ApiKey;
 | 
			
		||||
import springfox.documentation.service.AuthorizationScope;
 | 
			
		||||
import springfox.documentation.service.Contact;
 | 
			
		||||
import springfox.documentation.service.SecurityReference;
 | 
			
		||||
import springfox.documentation.service.SecurityScheme;
 | 
			
		||||
import springfox.documentation.spi.DocumentationType;
 | 
			
		||||
import springfox.documentation.spi.service.contexts.SecurityContext;
 | 
			
		||||
import springfox.documentation.spring.web.plugins.Docket;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Swagger2的接口配置
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
@Configuration
 | 
			
		||||
public class SwaggerConfig
 | 
			
		||||
{
 | 
			
		||||
    /** 系统基础配置 */
 | 
			
		||||
    @Autowired
 | 
			
		||||
    private RuoYiConfig ruoyiConfig;
 | 
			
		||||
 | 
			
		||||
    /** 是否开启swagger */
 | 
			
		||||
    @Value("${swagger.enabled}")
 | 
			
		||||
    private boolean enabled;
 | 
			
		||||
 | 
			
		||||
    /** 设置请求的统一前缀 */
 | 
			
		||||
    @Value("${swagger.pathMapping}")
 | 
			
		||||
    private String pathMapping;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 创建API
 | 
			
		||||
     */
 | 
			
		||||
    @Bean
 | 
			
		||||
    public Docket createRestApi()
 | 
			
		||||
    {
 | 
			
		||||
        return new Docket(DocumentationType.OAS_30)
 | 
			
		||||
                // 是否启用Swagger
 | 
			
		||||
                .enable(enabled)
 | 
			
		||||
                // 用来创建该API的基本信息,展示在文档的页面中(自定义展示的信息)
 | 
			
		||||
                .apiInfo(apiInfo())
 | 
			
		||||
                // 设置哪些接口暴露给Swagger展示
 | 
			
		||||
                .select()
 | 
			
		||||
                // 扫描所有有注解的api,用这种方式更灵活
 | 
			
		||||
                .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
 | 
			
		||||
                // 扫描指定包中的swagger注解
 | 
			
		||||
                // .apis(RequestHandlerSelectors.basePackage("com.ruoyi.project.tool.swagger"))
 | 
			
		||||
                // 扫描所有 .apis(RequestHandlerSelectors.any())
 | 
			
		||||
                .paths(PathSelectors.any())
 | 
			
		||||
                .build()
 | 
			
		||||
                /* 设置安全模式,swagger可以设置访问token */
 | 
			
		||||
                .securitySchemes(securitySchemes())
 | 
			
		||||
                .securityContexts(securityContexts())
 | 
			
		||||
                .pathMapping(pathMapping);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 安全模式,这里指定token通过Authorization头请求头传递
 | 
			
		||||
     */
 | 
			
		||||
    private List<SecurityScheme> securitySchemes()
 | 
			
		||||
    {
 | 
			
		||||
        List<SecurityScheme> apiKeyList = new ArrayList<SecurityScheme>();
 | 
			
		||||
        apiKeyList.add(new ApiKey("Authorization", "Authorization", In.HEADER.toValue()));
 | 
			
		||||
        return apiKeyList;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 安全上下文
 | 
			
		||||
     */
 | 
			
		||||
    private List<SecurityContext> securityContexts()
 | 
			
		||||
    {
 | 
			
		||||
        List<SecurityContext> securityContexts = new ArrayList<>();
 | 
			
		||||
        securityContexts.add(
 | 
			
		||||
                SecurityContext.builder()
 | 
			
		||||
                        .securityReferences(defaultAuth())
 | 
			
		||||
                        .operationSelector(o -> o.requestMappingPattern().matches("/.*"))
 | 
			
		||||
                        .build());
 | 
			
		||||
        return securityContexts;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 默认的安全上引用
 | 
			
		||||
     */
 | 
			
		||||
    private List<SecurityReference> defaultAuth()
 | 
			
		||||
    {
 | 
			
		||||
        AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");
 | 
			
		||||
        AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
 | 
			
		||||
        authorizationScopes[0] = authorizationScope;
 | 
			
		||||
        List<SecurityReference> securityReferences = new ArrayList<>();
 | 
			
		||||
        securityReferences.add(new SecurityReference("Authorization", authorizationScopes));
 | 
			
		||||
        return securityReferences;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 添加摘要信息
 | 
			
		||||
     */
 | 
			
		||||
    private ApiInfo apiInfo()
 | 
			
		||||
    {
 | 
			
		||||
        // 用ApiInfoBuilder进行定制
 | 
			
		||||
        return new ApiInfoBuilder()
 | 
			
		||||
                // 设置标题
 | 
			
		||||
                .title("标题:若依管理系统_接口文档")
 | 
			
		||||
                // 描述
 | 
			
		||||
                .description("描述:用于管理集团旗下公司的人员信息,具体包括XXX,XXX模块...")
 | 
			
		||||
                // 作者信息
 | 
			
		||||
                .contact(new Contact(ruoyiConfig.getName(), null, null))
 | 
			
		||||
                // 版本
 | 
			
		||||
                .version("版本号:" + ruoyiConfig.getVersion())
 | 
			
		||||
                .build();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,61 +1,61 @@
 | 
			
		|||
# 数据源配置
 | 
			
		||||
spring:
 | 
			
		||||
    datasource:
 | 
			
		||||
        type: com.alibaba.druid.pool.DruidDataSource
 | 
			
		||||
        driverClassName: com.mysql.cj.jdbc.Driver
 | 
			
		||||
        druid:
 | 
			
		||||
            # 主库数据源
 | 
			
		||||
            master:
 | 
			
		||||
                url: jdbc:mysql://117.72.45.219:23308/low-office-OA?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
 | 
			
		||||
                username: root
 | 
			
		||||
                password: root
 | 
			
		||||
            # 从库数据源
 | 
			
		||||
            slave:
 | 
			
		||||
                # 从数据源开关/默认关闭
 | 
			
		||||
                enabled: false
 | 
			
		||||
                url:
 | 
			
		||||
                username:
 | 
			
		||||
                password:
 | 
			
		||||
            # 初始连接数
 | 
			
		||||
            initialSize: 5
 | 
			
		||||
            # 最小连接池数量
 | 
			
		||||
            minIdle: 10
 | 
			
		||||
            # 最大连接池数量
 | 
			
		||||
            maxActive: 20
 | 
			
		||||
            # 配置获取连接等待超时的时间
 | 
			
		||||
            maxWait: 60000
 | 
			
		||||
            # 配置连接超时时间
 | 
			
		||||
            connectTimeout: 30000
 | 
			
		||||
            # 配置网络超时时间
 | 
			
		||||
            socketTimeout: 60000
 | 
			
		||||
            # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
 | 
			
		||||
            timeBetweenEvictionRunsMillis: 60000
 | 
			
		||||
            # 配置一个连接在池中最小生存的时间,单位是毫秒
 | 
			
		||||
            minEvictableIdleTimeMillis: 300000
 | 
			
		||||
            # 配置一个连接在池中最大生存的时间,单位是毫秒
 | 
			
		||||
            maxEvictableIdleTimeMillis: 900000
 | 
			
		||||
            # 配置检测连接是否有效
 | 
			
		||||
            validationQuery: SELECT 1 FROM DUAL
 | 
			
		||||
            testWhileIdle: true
 | 
			
		||||
            testOnBorrow: false
 | 
			
		||||
            testOnReturn: false
 | 
			
		||||
            webStatFilter:
 | 
			
		||||
                enabled: true
 | 
			
		||||
            statViewServlet:
 | 
			
		||||
                enabled: true
 | 
			
		||||
                # 设置白名单,不填则允许所有访问
 | 
			
		||||
                allow:
 | 
			
		||||
                url-pattern: /druid/*
 | 
			
		||||
                # 控制台管理用户名和密码
 | 
			
		||||
                login-username: ruoyi
 | 
			
		||||
                login-password: 123456
 | 
			
		||||
            filter:
 | 
			
		||||
                stat:
 | 
			
		||||
                    enabled: true
 | 
			
		||||
                    # 慢SQL记录
 | 
			
		||||
                    log-slow-sql: true
 | 
			
		||||
                    slow-sql-millis: 1000
 | 
			
		||||
                    merge-sql: true
 | 
			
		||||
                wall:
 | 
			
		||||
                    config:
 | 
			
		||||
# 数据源配置
 | 
			
		||||
spring:
 | 
			
		||||
    datasource:
 | 
			
		||||
        type: com.alibaba.druid.pool.DruidDataSource
 | 
			
		||||
        driverClassName: com.mysql.cj.jdbc.Driver
 | 
			
		||||
        druid:
 | 
			
		||||
            # 主库数据源
 | 
			
		||||
            master:
 | 
			
		||||
                url: jdbc:mysql://localhost:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
 | 
			
		||||
                username: root
 | 
			
		||||
                password: password
 | 
			
		||||
            # 从库数据源
 | 
			
		||||
            slave:
 | 
			
		||||
                # 从数据源开关/默认关闭
 | 
			
		||||
                enabled: false
 | 
			
		||||
                url: 
 | 
			
		||||
                username: 
 | 
			
		||||
                password: 
 | 
			
		||||
            # 初始连接数
 | 
			
		||||
            initialSize: 5
 | 
			
		||||
            # 最小连接池数量
 | 
			
		||||
            minIdle: 10
 | 
			
		||||
            # 最大连接池数量
 | 
			
		||||
            maxActive: 20
 | 
			
		||||
            # 配置获取连接等待超时的时间
 | 
			
		||||
            maxWait: 60000
 | 
			
		||||
            # 配置连接超时时间
 | 
			
		||||
            connectTimeout: 30000
 | 
			
		||||
            # 配置网络超时时间
 | 
			
		||||
            socketTimeout: 60000
 | 
			
		||||
            # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
 | 
			
		||||
            timeBetweenEvictionRunsMillis: 60000
 | 
			
		||||
            # 配置一个连接在池中最小生存的时间,单位是毫秒
 | 
			
		||||
            minEvictableIdleTimeMillis: 300000
 | 
			
		||||
            # 配置一个连接在池中最大生存的时间,单位是毫秒
 | 
			
		||||
            maxEvictableIdleTimeMillis: 900000
 | 
			
		||||
            # 配置检测连接是否有效
 | 
			
		||||
            validationQuery: SELECT 1 FROM DUAL
 | 
			
		||||
            testWhileIdle: true
 | 
			
		||||
            testOnBorrow: false
 | 
			
		||||
            testOnReturn: false
 | 
			
		||||
            webStatFilter: 
 | 
			
		||||
                enabled: true
 | 
			
		||||
            statViewServlet:
 | 
			
		||||
                enabled: true
 | 
			
		||||
                # 设置白名单,不填则允许所有访问
 | 
			
		||||
                allow:
 | 
			
		||||
                url-pattern: /druid/*
 | 
			
		||||
                # 控制台管理用户名和密码
 | 
			
		||||
                login-username: ruoyi
 | 
			
		||||
                login-password: 123456
 | 
			
		||||
            filter:
 | 
			
		||||
                stat:
 | 
			
		||||
                    enabled: true
 | 
			
		||||
                    # 慢SQL记录
 | 
			
		||||
                    log-slow-sql: true
 | 
			
		||||
                    slow-sql-millis: 1000
 | 
			
		||||
                    merge-sql: true
 | 
			
		||||
                wall:
 | 
			
		||||
                    config:
 | 
			
		||||
                        multi-statement-allow: true
 | 
			
		||||
| 
						 | 
				
			
			@ -1,147 +1,129 @@
 | 
			
		|||
# 项目相关配置
 | 
			
		||||
ruoyi:
 | 
			
		||||
  # 名称
 | 
			
		||||
  name: RuoYi
 | 
			
		||||
  # 版本
 | 
			
		||||
  version: 3.8.9
 | 
			
		||||
  # 版权年份
 | 
			
		||||
  copyrightYear: 2025
 | 
			
		||||
  # 文件路径 示例( Windows配置D:/ruoyi/uploadPath,Linux配置 /home/ruoyi/uploadPath)
 | 
			
		||||
  profile: D:/ruoyi/uploadPath
 | 
			
		||||
  # 获取ip地址开关
 | 
			
		||||
  addressEnabled: false
 | 
			
		||||
  # 验证码类型 math 数字计算 char 字符验证
 | 
			
		||||
  captchaType: math
 | 
			
		||||
 | 
			
		||||
# 开发环境配置
 | 
			
		||||
server:
 | 
			
		||||
  # 服务器的HTTP端口,默认为8080
 | 
			
		||||
  port: 8080
 | 
			
		||||
  servlet:
 | 
			
		||||
    # 应用的访问路径
 | 
			
		||||
    context-path: /
 | 
			
		||||
  tomcat:
 | 
			
		||||
    # tomcat的URI编码
 | 
			
		||||
    uri-encoding: UTF-8
 | 
			
		||||
    # 连接数满后的排队数,默认为100
 | 
			
		||||
    accept-count: 1000
 | 
			
		||||
    threads:
 | 
			
		||||
      # tomcat最大线程数,默认为200
 | 
			
		||||
      max: 800
 | 
			
		||||
      # Tomcat启动初始化的线程数,默认值10
 | 
			
		||||
      min-spare: 100
 | 
			
		||||
 | 
			
		||||
# 日志配置
 | 
			
		||||
logging:
 | 
			
		||||
  level:
 | 
			
		||||
    com.tcctlo: debug
 | 
			
		||||
    org.springframework: warn
 | 
			
		||||
 | 
			
		||||
# 用户配置
 | 
			
		||||
user:
 | 
			
		||||
  password:
 | 
			
		||||
    # 密码最大错误次数
 | 
			
		||||
    maxRetryCount: 5
 | 
			
		||||
    # 密码锁定时间(默认10分钟)
 | 
			
		||||
    lockTime: 10
 | 
			
		||||
 | 
			
		||||
# Spring配置
 | 
			
		||||
spring:
 | 
			
		||||
  # 资源信息
 | 
			
		||||
  messages:
 | 
			
		||||
    # 国际化资源文件路径
 | 
			
		||||
    basename: i18n/messages
 | 
			
		||||
  profiles:
 | 
			
		||||
    active: druid
 | 
			
		||||
  # 文件上传
 | 
			
		||||
  servlet:
 | 
			
		||||
    multipart:
 | 
			
		||||
      # 单个文件大小
 | 
			
		||||
      max-file-size: 10MB
 | 
			
		||||
      # 设置总上传的文件大小
 | 
			
		||||
      max-request-size: 20MB
 | 
			
		||||
  # 服务模块
 | 
			
		||||
  devtools:
 | 
			
		||||
    restart:
 | 
			
		||||
      # 热部署开关
 | 
			
		||||
      enabled: true
 | 
			
		||||
  # redis 配置
 | 
			
		||||
  redis:
 | 
			
		||||
    # 地址
 | 
			
		||||
    host: 117.72.45.219
 | 
			
		||||
    # 端口,默认为6379
 | 
			
		||||
    port: 6379
 | 
			
		||||
    # 数据库索引
 | 
			
		||||
    database: 0
 | 
			
		||||
    # 密码
 | 
			
		||||
    password: zsqCoCo0806
 | 
			
		||||
    # 连接超时时间
 | 
			
		||||
    timeout: 10s
 | 
			
		||||
    lettuce:
 | 
			
		||||
      pool:
 | 
			
		||||
        # 连接池中的最小空闲连接
 | 
			
		||||
        min-idle: 0
 | 
			
		||||
        # 连接池中的最大空闲连接
 | 
			
		||||
        max-idle: 8
 | 
			
		||||
        # 连接池的最大数据库连接数
 | 
			
		||||
        max-active: 8
 | 
			
		||||
        # #连接池最大阻塞等待时间(使用负值表示没有限制)
 | 
			
		||||
        max-wait: -1ms
 | 
			
		||||
 | 
			
		||||
# token配置
 | 
			
		||||
token:
 | 
			
		||||
  # 令牌自定义标识
 | 
			
		||||
  header: Authorization
 | 
			
		||||
  # 令牌密钥
 | 
			
		||||
  secret: abcdefghijklmnopqrstuvwxyz
 | 
			
		||||
  # 令牌有效期(默认30分钟)
 | 
			
		||||
  expireTime: 30
 | 
			
		||||
 | 
			
		||||
# MyBatis配置
 | 
			
		||||
mybatis:
 | 
			
		||||
  # 搜索指定包别名
 | 
			
		||||
  typeAliasesPackage: com.tcctlo.**.domain
 | 
			
		||||
  # 配置mapper的扫描,找到所有的mapper.xml映射文件
 | 
			
		||||
  mapperLocations: classpath*:mapper/**/*Mapper.xml
 | 
			
		||||
  # 加载全局的配置文件
 | 
			
		||||
  configLocation: classpath:mybatis/mybatis-config.xml
 | 
			
		||||
 | 
			
		||||
# PageHelper分页插件
 | 
			
		||||
pagehelper:
 | 
			
		||||
  helperDialect: mysql
 | 
			
		||||
  supportMethodsArguments: true
 | 
			
		||||
  params: count=countSql
 | 
			
		||||
 | 
			
		||||
# Swagger配置
 | 
			
		||||
swagger:
 | 
			
		||||
  # 是否开启swagger
 | 
			
		||||
  enabled: true
 | 
			
		||||
  # 请求前缀
 | 
			
		||||
  pathMapping: /dev-api
 | 
			
		||||
 | 
			
		||||
# 防止XSS攻击
 | 
			
		||||
xss:
 | 
			
		||||
  # 过滤开关
 | 
			
		||||
  enabled: true
 | 
			
		||||
  # 排除链接(多个用逗号分隔)
 | 
			
		||||
  excludes: /system/notice
 | 
			
		||||
  # 匹配链接
 | 
			
		||||
  urlPatterns: /system/*,/monitor/*,/tool/*
 | 
			
		||||
 | 
			
		||||
# 文件上传
 | 
			
		||||
dromara:
 | 
			
		||||
  x-file-storage: #文件存储配置
 | 
			
		||||
    default-platform: aliyun-oss-1 #默认使用的存储平台
 | 
			
		||||
    thumbnail-suffix: ".min.jpg" #缩略图后缀,例如【.min.jpg】【.png】
 | 
			
		||||
    #对应平台的配置写在这里,注意缩进要对齐
 | 
			
		||||
    aliyun-oss:
 | 
			
		||||
      - platform: aliyun-oss-1 # 存储平台标识
 | 
			
		||||
        enable-storage: true  # 启用存储
 | 
			
		||||
        access-key: LTAI5tL4rKPPR71Ki5CgEHme
 | 
			
		||||
        secret-key: 8OFQDahu0XHj0ctxGrywA37c81PDiU
 | 
			
		||||
        end-point: oss-cn-beijing.aliyuncs.com
 | 
			
		||||
        bucket-name: low-office
 | 
			
		||||
        domain: https://low-office.oss-cn-beijing.aliyuncs.com/ # 访问域名,注意“/”结尾,例如:https://abc.oss-cn-shanghai.aliyuncs.com/
 | 
			
		||||
        base-path: low-office-images/ # 基础路径
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
# 项目相关配置
 | 
			
		||||
ruoyi:
 | 
			
		||||
  # 名称
 | 
			
		||||
  name: RuoYi
 | 
			
		||||
  # 版本
 | 
			
		||||
  version: 3.8.8
 | 
			
		||||
  # 版权年份
 | 
			
		||||
  copyrightYear: 2024
 | 
			
		||||
  # 文件路径 示例( Windows配置D:/ruoyi/uploadPath,Linux配置 /home/ruoyi/uploadPath)
 | 
			
		||||
  profile: D:/ruoyi/uploadPath
 | 
			
		||||
  # 获取ip地址开关
 | 
			
		||||
  addressEnabled: false
 | 
			
		||||
  # 验证码类型 math 数字计算 char 字符验证
 | 
			
		||||
  captchaType: math
 | 
			
		||||
 | 
			
		||||
# 开发环境配置
 | 
			
		||||
server:
 | 
			
		||||
  # 服务器的HTTP端口,默认为8080
 | 
			
		||||
  port: 8080
 | 
			
		||||
  servlet:
 | 
			
		||||
    # 应用的访问路径
 | 
			
		||||
    context-path: /
 | 
			
		||||
  tomcat:
 | 
			
		||||
    # tomcat的URI编码
 | 
			
		||||
    uri-encoding: UTF-8
 | 
			
		||||
    # 连接数满后的排队数,默认为100
 | 
			
		||||
    accept-count: 1000
 | 
			
		||||
    threads:
 | 
			
		||||
      # tomcat最大线程数,默认为200
 | 
			
		||||
      max: 800
 | 
			
		||||
      # Tomcat启动初始化的线程数,默认值10
 | 
			
		||||
      min-spare: 100
 | 
			
		||||
 | 
			
		||||
# 日志配置
 | 
			
		||||
logging:
 | 
			
		||||
  level:
 | 
			
		||||
    com.ruoyi: debug
 | 
			
		||||
    org.springframework: warn
 | 
			
		||||
 | 
			
		||||
# 用户配置
 | 
			
		||||
user:
 | 
			
		||||
  password:
 | 
			
		||||
    # 密码最大错误次数
 | 
			
		||||
    maxRetryCount: 5
 | 
			
		||||
    # 密码锁定时间(默认10分钟)
 | 
			
		||||
    lockTime: 10
 | 
			
		||||
 | 
			
		||||
# Spring配置
 | 
			
		||||
spring:
 | 
			
		||||
  # 资源信息
 | 
			
		||||
  messages:
 | 
			
		||||
    # 国际化资源文件路径
 | 
			
		||||
    basename: i18n/messages
 | 
			
		||||
  profiles:
 | 
			
		||||
    active: druid
 | 
			
		||||
  # 文件上传
 | 
			
		||||
  servlet:
 | 
			
		||||
    multipart:
 | 
			
		||||
      # 单个文件大小
 | 
			
		||||
      max-file-size: 10MB
 | 
			
		||||
      # 设置总上传的文件大小
 | 
			
		||||
      max-request-size: 20MB
 | 
			
		||||
  # 服务模块
 | 
			
		||||
  devtools:
 | 
			
		||||
    restart:
 | 
			
		||||
      # 热部署开关
 | 
			
		||||
      enabled: true
 | 
			
		||||
  # redis 配置
 | 
			
		||||
  redis:
 | 
			
		||||
    # 地址
 | 
			
		||||
    host: localhost
 | 
			
		||||
    # 端口,默认为6379
 | 
			
		||||
    port: 6379
 | 
			
		||||
    # 数据库索引
 | 
			
		||||
    database: 0
 | 
			
		||||
    # 密码
 | 
			
		||||
    password:
 | 
			
		||||
    # 连接超时时间
 | 
			
		||||
    timeout: 10s
 | 
			
		||||
    lettuce:
 | 
			
		||||
      pool:
 | 
			
		||||
        # 连接池中的最小空闲连接
 | 
			
		||||
        min-idle: 0
 | 
			
		||||
        # 连接池中的最大空闲连接
 | 
			
		||||
        max-idle: 8
 | 
			
		||||
        # 连接池的最大数据库连接数
 | 
			
		||||
        max-active: 8
 | 
			
		||||
        # #连接池最大阻塞等待时间(使用负值表示没有限制)
 | 
			
		||||
        max-wait: -1ms
 | 
			
		||||
 | 
			
		||||
# token配置
 | 
			
		||||
token:
 | 
			
		||||
  # 令牌自定义标识
 | 
			
		||||
  header: Authorization
 | 
			
		||||
  # 令牌密钥
 | 
			
		||||
  secret: abcdefghijklmnopqrstuvwxyz
 | 
			
		||||
  # 令牌有效期(默认30分钟)
 | 
			
		||||
  expireTime: 30
 | 
			
		||||
 | 
			
		||||
# MyBatis配置
 | 
			
		||||
mybatis:
 | 
			
		||||
  # 搜索指定包别名
 | 
			
		||||
  typeAliasesPackage: com.ruoyi.**.domain
 | 
			
		||||
  # 配置mapper的扫描,找到所有的mapper.xml映射文件
 | 
			
		||||
  mapperLocations: classpath*:mapper/**/*Mapper.xml
 | 
			
		||||
  # 加载全局的配置文件
 | 
			
		||||
  configLocation: classpath:mybatis/mybatis-config.xml
 | 
			
		||||
 | 
			
		||||
# PageHelper分页插件
 | 
			
		||||
pagehelper:
 | 
			
		||||
  helperDialect: mysql
 | 
			
		||||
  supportMethodsArguments: true
 | 
			
		||||
  params: count=countSql
 | 
			
		||||
 | 
			
		||||
# Swagger配置
 | 
			
		||||
swagger:
 | 
			
		||||
  # 是否开启swagger
 | 
			
		||||
  enabled: true
 | 
			
		||||
  # 请求前缀
 | 
			
		||||
  pathMapping: /dev-api
 | 
			
		||||
 | 
			
		||||
# 防止XSS攻击
 | 
			
		||||
xss:
 | 
			
		||||
  # 过滤开关
 | 
			
		||||
  enabled: true
 | 
			
		||||
  # 排除链接(多个用逗号分隔)
 | 
			
		||||
  excludes: /system/notice
 | 
			
		||||
  # 匹配链接
 | 
			
		||||
  urlPatterns: /system/*,/monitor/*,/tool/*
 | 
			
		||||
| 
						 | 
				
			
			@ -1,24 +1,24 @@
 | 
			
		|||
Application Version: ${ruoyi.version}
 | 
			
		||||
Spring Boot Version: ${spring-boot.version}
 | 
			
		||||
////////////////////////////////////////////////////////////////////
 | 
			
		||||
//                          _ooOoo_                               //
 | 
			
		||||
//                         o8888888o                              //
 | 
			
		||||
//                         88" . "88                              //
 | 
			
		||||
//                         (| ^_^ |)                              //
 | 
			
		||||
//                         O\  =  /O                              //
 | 
			
		||||
//                      ____/`---'\____                           //
 | 
			
		||||
//                    .'  \\|     |//  `.                         //
 | 
			
		||||
//                   /  \\|||  :  |||//  \                        //
 | 
			
		||||
//                  /  _||||| -:- |||||-  \                       //
 | 
			
		||||
//                  |   | \\\  -  /// |   |                       //
 | 
			
		||||
//                  | \_|  ''\---/''  |   |                       //
 | 
			
		||||
//                  \  .-\__  `-`  ___/-. /                       //
 | 
			
		||||
//                ___`. .'  /--.--\  `. . ___                     //
 | 
			
		||||
//              ."" '<  `.___\_<|>_/___.'  >'"".                  //
 | 
			
		||||
//            | | :  `- \`.;`\ _ /`;.`/ - ` : | |                 //
 | 
			
		||||
//            \  \ `-.   \_ __\ /__ _/   .-` /  /                 //
 | 
			
		||||
//      ========`-.____`-.___\_____/___.-`____.-'========         //
 | 
			
		||||
//                           `=---='                              //
 | 
			
		||||
//      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^        //
 | 
			
		||||
//             佛祖保佑       永不宕机      永无BUG               //
 | 
			
		||||
Application Version: ${ruoyi.version}
 | 
			
		||||
Spring Boot Version: ${spring-boot.version}
 | 
			
		||||
////////////////////////////////////////////////////////////////////
 | 
			
		||||
//                          _ooOoo_                               //
 | 
			
		||||
//                         o8888888o                              //
 | 
			
		||||
//                         88" . "88                              //
 | 
			
		||||
//                         (| ^_^ |)                              //
 | 
			
		||||
//                         O\  =  /O                              //
 | 
			
		||||
//                      ____/`---'\____                           //
 | 
			
		||||
//                    .'  \\|     |//  `.                         //
 | 
			
		||||
//                   /  \\|||  :  |||//  \                        //
 | 
			
		||||
//                  /  _||||| -:- |||||-  \                       //
 | 
			
		||||
//                  |   | \\\  -  /// |   |                       //
 | 
			
		||||
//                  | \_|  ''\---/''  |   |                       //
 | 
			
		||||
//                  \  .-\__  `-`  ___/-. /                       //
 | 
			
		||||
//                ___`. .'  /--.--\  `. . ___                     //
 | 
			
		||||
//              ."" '<  `.___\_<|>_/___.'  >'"".                  //
 | 
			
		||||
//            | | :  `- \`.;`\ _ /`;.`/ - ` : | |                 //
 | 
			
		||||
//            \  \ `-.   \_ __\ /__ _/   .-` /  /                 //
 | 
			
		||||
//      ========`-.____`-.___\_____/___.-`____.-'========         //
 | 
			
		||||
//                           `=---='                              //
 | 
			
		||||
//      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^        //
 | 
			
		||||
//             佛祖保佑       永不宕机      永无BUG               //
 | 
			
		||||
////////////////////////////////////////////////////////////////////
 | 
			
		||||
| 
						 | 
				
			
			@ -1,38 +1,38 @@
 | 
			
		|||
#错误消息
 | 
			
		||||
not.null=* 必须填写
 | 
			
		||||
user.jcaptcha.error=验证码错误
 | 
			
		||||
user.jcaptcha.expire=验证码已失效
 | 
			
		||||
user.not.exists=用户不存在/密码错误
 | 
			
		||||
user.password.not.match=用户不存在/密码错误
 | 
			
		||||
user.password.retry.limit.count=密码输入错误{0}次
 | 
			
		||||
user.password.retry.limit.exceed=密码输入错误{0}次,帐户锁定{1}分钟
 | 
			
		||||
user.password.delete=对不起,您的账号已被删除
 | 
			
		||||
user.blocked=用户已封禁,请联系管理员
 | 
			
		||||
role.blocked=角色已封禁,请联系管理员
 | 
			
		||||
login.blocked=很遗憾,访问IP已被列入系统黑名单
 | 
			
		||||
user.logout.success=退出成功
 | 
			
		||||
 | 
			
		||||
length.not.valid=长度必须在{min}到{max}个字符之间
 | 
			
		||||
 | 
			
		||||
user.username.not.valid=* 2到20个汉字、字母、数字或下划线组成,且必须以非数字开头
 | 
			
		||||
user.password.not.valid=* 5-50个字符
 | 
			
		||||
 
 | 
			
		||||
user.email.not.valid=邮箱格式错误
 | 
			
		||||
user.mobile.phone.number.not.valid=手机号格式错误
 | 
			
		||||
user.login.success=登录成功
 | 
			
		||||
user.register.success=注册成功
 | 
			
		||||
user.notfound=请重新登录
 | 
			
		||||
user.forcelogout=管理员强制退出,请重新登录
 | 
			
		||||
user.unknown.error=未知错误,请重新登录
 | 
			
		||||
 | 
			
		||||
##文件上传消息
 | 
			
		||||
upload.exceed.maxSize=上传的文件大小超出限制的文件大小!<br/>允许的文件最大大小是:{0}MB!
 | 
			
		||||
upload.filename.exceed.length=上传的文件名最长{0}个字符
 | 
			
		||||
 | 
			
		||||
##权限
 | 
			
		||||
no.permission=您没有数据的权限,请联系管理员添加权限 [{0}]
 | 
			
		||||
no.create.permission=您没有创建数据的权限,请联系管理员添加权限 [{0}]
 | 
			
		||||
no.update.permission=您没有修改数据的权限,请联系管理员添加权限 [{0}]
 | 
			
		||||
no.delete.permission=您没有删除数据的权限,请联系管理员添加权限 [{0}]
 | 
			
		||||
no.export.permission=您没有导出数据的权限,请联系管理员添加权限 [{0}]
 | 
			
		||||
no.view.permission=您没有查看数据的权限,请联系管理员添加权限 [{0}]
 | 
			
		||||
#错误消息
 | 
			
		||||
not.null=* 必须填写
 | 
			
		||||
user.jcaptcha.error=验证码错误
 | 
			
		||||
user.jcaptcha.expire=验证码已失效
 | 
			
		||||
user.not.exists=用户不存在/密码错误
 | 
			
		||||
user.password.not.match=用户不存在/密码错误
 | 
			
		||||
user.password.retry.limit.count=密码输入错误{0}次
 | 
			
		||||
user.password.retry.limit.exceed=密码输入错误{0}次,帐户锁定{1}分钟
 | 
			
		||||
user.password.delete=对不起,您的账号已被删除
 | 
			
		||||
user.blocked=用户已封禁,请联系管理员
 | 
			
		||||
role.blocked=角色已封禁,请联系管理员
 | 
			
		||||
login.blocked=很遗憾,访问IP已被列入系统黑名单
 | 
			
		||||
user.logout.success=退出成功
 | 
			
		||||
 | 
			
		||||
length.not.valid=长度必须在{min}到{max}个字符之间
 | 
			
		||||
 | 
			
		||||
user.username.not.valid=* 2到20个汉字、字母、数字或下划线组成,且必须以非数字开头
 | 
			
		||||
user.password.not.valid=* 5-50个字符
 | 
			
		||||
 
 | 
			
		||||
user.email.not.valid=邮箱格式错误
 | 
			
		||||
user.mobile.phone.number.not.valid=手机号格式错误
 | 
			
		||||
user.login.success=登录成功
 | 
			
		||||
user.register.success=注册成功
 | 
			
		||||
user.notfound=请重新登录
 | 
			
		||||
user.forcelogout=管理员强制退出,请重新登录
 | 
			
		||||
user.unknown.error=未知错误,请重新登录
 | 
			
		||||
 | 
			
		||||
##文件上传消息
 | 
			
		||||
upload.exceed.maxSize=上传的文件大小超出限制的文件大小!<br/>允许的文件最大大小是:{0}MB!
 | 
			
		||||
upload.filename.exceed.length=上传的文件名最长{0}个字符
 | 
			
		||||
 | 
			
		||||
##权限
 | 
			
		||||
no.permission=您没有数据的权限,请联系管理员添加权限 [{0}]
 | 
			
		||||
no.create.permission=您没有创建数据的权限,请联系管理员添加权限 [{0}]
 | 
			
		||||
no.update.permission=您没有修改数据的权限,请联系管理员添加权限 [{0}]
 | 
			
		||||
no.delete.permission=您没有删除数据的权限,请联系管理员添加权限 [{0}]
 | 
			
		||||
no.export.permission=您没有导出数据的权限,请联系管理员添加权限 [{0}]
 | 
			
		||||
no.view.permission=您没有查看数据的权限,请联系管理员添加权限 [{0}]
 | 
			
		||||
| 
						 | 
				
			
			@ -1,93 +1,93 @@
 | 
			
		|||
<?xml version="1.0" encoding="UTF-8"?>
 | 
			
		||||
<configuration>
 | 
			
		||||
    <!-- 日志存放路径 -->
 | 
			
		||||
	<property name="log.path" value="/home/ruoyi/logs" />
 | 
			
		||||
    <!-- 日志输出格式 -->
 | 
			
		||||
	<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}/sys-info.log</file>
 | 
			
		||||
        <!-- 循环政策:基于时间创建日志文件 -->
 | 
			
		||||
		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
 | 
			
		||||
            <!-- 日志文件名格式 -->
 | 
			
		||||
			<fileNamePattern>${log.path}/sys-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}/sys-error.log</file>
 | 
			
		||||
        <!-- 循环政策:基于时间创建日志文件 -->
 | 
			
		||||
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
 | 
			
		||||
            <!-- 日志文件名格式 -->
 | 
			
		||||
            <fileNamePattern>${log.path}/sys-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>
 | 
			
		||||
	
 | 
			
		||||
	<!-- 用户访问日志输出  -->
 | 
			
		||||
    <appender name="sys-user" class="ch.qos.logback.core.rolling.RollingFileAppender">
 | 
			
		||||
		<file>${log.path}/sys-user.log</file>
 | 
			
		||||
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
 | 
			
		||||
            <!-- 按天回滚 daily -->
 | 
			
		||||
            <fileNamePattern>${log.path}/sys-user.%d{yyyy-MM-dd}.log</fileNamePattern>
 | 
			
		||||
            <!-- 日志最大的历史 60天 -->
 | 
			
		||||
            <maxHistory>60</maxHistory>
 | 
			
		||||
        </rollingPolicy>
 | 
			
		||||
        <encoder>
 | 
			
		||||
            <pattern>${log.pattern}</pattern>
 | 
			
		||||
        </encoder>
 | 
			
		||||
    </appender>
 | 
			
		||||
	
 | 
			
		||||
	<!-- 系统模块日志级别控制  -->
 | 
			
		||||
	<logger name="com.tcctlo" 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>
 | 
			
		||||
	
 | 
			
		||||
	<!--系统用户操作日志-->
 | 
			
		||||
    <logger name="sys-user" level="info">
 | 
			
		||||
        <appender-ref ref="sys-user"/>
 | 
			
		||||
    </logger>
 | 
			
		||||
<?xml version="1.0" encoding="UTF-8"?>
 | 
			
		||||
<configuration>
 | 
			
		||||
    <!-- 日志存放路径 -->
 | 
			
		||||
	<property name="log.path" value="/home/ruoyi/logs" />
 | 
			
		||||
    <!-- 日志输出格式 -->
 | 
			
		||||
	<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}/sys-info.log</file>
 | 
			
		||||
        <!-- 循环政策:基于时间创建日志文件 -->
 | 
			
		||||
		<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
 | 
			
		||||
            <!-- 日志文件名格式 -->
 | 
			
		||||
			<fileNamePattern>${log.path}/sys-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}/sys-error.log</file>
 | 
			
		||||
        <!-- 循环政策:基于时间创建日志文件 -->
 | 
			
		||||
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
 | 
			
		||||
            <!-- 日志文件名格式 -->
 | 
			
		||||
            <fileNamePattern>${log.path}/sys-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>
 | 
			
		||||
	
 | 
			
		||||
	<!-- 用户访问日志输出  -->
 | 
			
		||||
    <appender name="sys-user" class="ch.qos.logback.core.rolling.RollingFileAppender">
 | 
			
		||||
		<file>${log.path}/sys-user.log</file>
 | 
			
		||||
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
 | 
			
		||||
            <!-- 按天回滚 daily -->
 | 
			
		||||
            <fileNamePattern>${log.path}/sys-user.%d{yyyy-MM-dd}.log</fileNamePattern>
 | 
			
		||||
            <!-- 日志最大的历史 60天 -->
 | 
			
		||||
            <maxHistory>60</maxHistory>
 | 
			
		||||
        </rollingPolicy>
 | 
			
		||||
        <encoder>
 | 
			
		||||
            <pattern>${log.pattern}</pattern>
 | 
			
		||||
        </encoder>
 | 
			
		||||
    </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>
 | 
			
		||||
	
 | 
			
		||||
	<!--系统用户操作日志-->
 | 
			
		||||
    <logger name="sys-user" level="info">
 | 
			
		||||
        <appender-ref ref="sys-user"/>
 | 
			
		||||
    </logger>
 | 
			
		||||
</configuration> 
 | 
			
		||||
| 
						 | 
				
			
			@ -1,20 +1,20 @@
 | 
			
		|||
<?xml version="1.0" encoding="UTF-8" ?>
 | 
			
		||||
<!DOCTYPE configuration
 | 
			
		||||
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
 | 
			
		||||
"http://mybatis.org/dtd/mybatis-3-config.dtd">
 | 
			
		||||
<configuration>
 | 
			
		||||
    <!-- 全局参数 -->
 | 
			
		||||
    <settings>
 | 
			
		||||
        <!-- 使全局的映射器启用或禁用缓存 -->
 | 
			
		||||
        <setting name="cacheEnabled"             value="true"   />
 | 
			
		||||
        <!-- 允许JDBC 支持自动生成主键 -->
 | 
			
		||||
        <setting name="useGeneratedKeys"         value="true"   />
 | 
			
		||||
        <!-- 配置默认的执行器.SIMPLE就是普通执行器;REUSE执行器会重用预处理语句(prepared statements);BATCH执行器将重用语句并执行批量更新 -->
 | 
			
		||||
        <setting name="defaultExecutorType"      value="SIMPLE" />
 | 
			
		||||
		<!-- 指定 MyBatis 所用日志的具体实现 -->
 | 
			
		||||
        <setting name="logImpl"                  value="SLF4J"  />
 | 
			
		||||
        <!-- 使用驼峰命名法转换字段 -->
 | 
			
		||||
		<!-- <setting name="mapUnderscoreToCamelCase" value="true"/> -->
 | 
			
		||||
	</settings>
 | 
			
		||||
	
 | 
			
		||||
</configuration>
 | 
			
		||||
<?xml version="1.0" encoding="UTF-8" ?>
 | 
			
		||||
<!DOCTYPE configuration
 | 
			
		||||
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
 | 
			
		||||
"http://mybatis.org/dtd/mybatis-3-config.dtd">
 | 
			
		||||
<configuration>
 | 
			
		||||
    <!-- 全局参数 -->
 | 
			
		||||
    <settings>
 | 
			
		||||
        <!-- 使全局的映射器启用或禁用缓存 -->
 | 
			
		||||
        <setting name="cacheEnabled"             value="true"   />
 | 
			
		||||
        <!-- 允许JDBC 支持自动生成主键 -->
 | 
			
		||||
        <setting name="useGeneratedKeys"         value="true"   />
 | 
			
		||||
        <!-- 配置默认的执行器.SIMPLE就是普通执行器;REUSE执行器会重用预处理语句(prepared statements);BATCH执行器将重用语句并执行批量更新 -->
 | 
			
		||||
        <setting name="defaultExecutorType"      value="SIMPLE" />
 | 
			
		||||
		<!-- 指定 MyBatis 所用日志的具体实现 -->
 | 
			
		||||
        <setting name="logImpl"                  value="SLF4J"  />
 | 
			
		||||
        <!-- 使用驼峰命名法转换字段 -->
 | 
			
		||||
		<!-- <setting name="mapUnderscoreToCamelCase" value="true"/> -->
 | 
			
		||||
	</settings>
 | 
			
		||||
	
 | 
			
		||||
</configuration>
 | 
			
		||||
| 
						 | 
				
			
			@ -1,145 +1,124 @@
 | 
			
		|||
<?xml version="1.0" encoding="UTF-8"?>
 | 
			
		||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
 | 
			
		||||
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 | 
			
		||||
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 | 
			
		||||
    <parent>
 | 
			
		||||
        <artifactId>tcctlo</artifactId>
 | 
			
		||||
        <groupId>com.tcctlo</groupId>
 | 
			
		||||
        <version>3.8.9</version>
 | 
			
		||||
    </parent>
 | 
			
		||||
    <modelVersion>4.0.0</modelVersion>
 | 
			
		||||
 | 
			
		||||
    <artifactId>tcctlo-common</artifactId>
 | 
			
		||||
 | 
			
		||||
    <description>
 | 
			
		||||
        common通用工具
 | 
			
		||||
    </description>
 | 
			
		||||
 | 
			
		||||
    <dependencies>
 | 
			
		||||
 | 
			
		||||
        <!-- Spring框架基本的核心工具 -->
 | 
			
		||||
        <dependency>
 | 
			
		||||
            <groupId>org.springframework</groupId>
 | 
			
		||||
            <artifactId>spring-context-support</artifactId>
 | 
			
		||||
        </dependency>
 | 
			
		||||
 | 
			
		||||
        <!-- SpringWeb模块 -->
 | 
			
		||||
        <dependency>
 | 
			
		||||
            <groupId>org.springframework</groupId>
 | 
			
		||||
            <artifactId>spring-web</artifactId>
 | 
			
		||||
        </dependency>
 | 
			
		||||
 | 
			
		||||
        <!-- spring security 安全认证 -->
 | 
			
		||||
        <dependency>
 | 
			
		||||
            <groupId>org.springframework.boot</groupId>
 | 
			
		||||
            <artifactId>spring-boot-starter-security</artifactId>
 | 
			
		||||
        </dependency>
 | 
			
		||||
 | 
			
		||||
        <!-- pagehelper 分页插件 -->
 | 
			
		||||
        <dependency>
 | 
			
		||||
            <groupId>com.github.pagehelper</groupId>
 | 
			
		||||
            <artifactId>pagehelper-spring-boot-starter</artifactId>
 | 
			
		||||
        </dependency>
 | 
			
		||||
 | 
			
		||||
        <!-- 自定义验证注解 -->
 | 
			
		||||
        <dependency>
 | 
			
		||||
            <groupId>org.springframework.boot</groupId>
 | 
			
		||||
            <artifactId>spring-boot-starter-validation</artifactId>
 | 
			
		||||
        </dependency>
 | 
			
		||||
 | 
			
		||||
        <!--常用工具类 -->
 | 
			
		||||
        <dependency>
 | 
			
		||||
            <groupId>org.apache.commons</groupId>
 | 
			
		||||
            <artifactId>commons-lang3</artifactId>
 | 
			
		||||
        </dependency>
 | 
			
		||||
  
 | 
			
		||||
        <!-- JSON工具类 -->
 | 
			
		||||
        <dependency>
 | 
			
		||||
            <groupId>com.fasterxml.jackson.core</groupId>
 | 
			
		||||
            <artifactId>jackson-databind</artifactId>
 | 
			
		||||
        </dependency>
 | 
			
		||||
        
 | 
			
		||||
        <!-- 阿里JSON解析器 -->
 | 
			
		||||
        <dependency>
 | 
			
		||||
            <groupId>com.alibaba.fastjson2</groupId>
 | 
			
		||||
            <artifactId>fastjson2</artifactId>
 | 
			
		||||
        </dependency>
 | 
			
		||||
 | 
			
		||||
        <!-- io常用工具类 -->
 | 
			
		||||
        <dependency>
 | 
			
		||||
            <groupId>commons-io</groupId>
 | 
			
		||||
            <artifactId>commons-io</artifactId>
 | 
			
		||||
        </dependency>
 | 
			
		||||
 | 
			
		||||
        <!-- excel工具 -->
 | 
			
		||||
        <dependency>
 | 
			
		||||
            <groupId>org.apache.poi</groupId>
 | 
			
		||||
            <artifactId>poi-ooxml</artifactId>
 | 
			
		||||
        </dependency>
 | 
			
		||||
 | 
			
		||||
        <!-- yml解析器 -->
 | 
			
		||||
        <dependency>
 | 
			
		||||
            <groupId>org.yaml</groupId>
 | 
			
		||||
            <artifactId>snakeyaml</artifactId>
 | 
			
		||||
        </dependency>
 | 
			
		||||
 | 
			
		||||
        <!-- Token生成与解析-->
 | 
			
		||||
        <dependency>
 | 
			
		||||
            <groupId>io.jsonwebtoken</groupId>
 | 
			
		||||
            <artifactId>jjwt</artifactId>
 | 
			
		||||
        </dependency>
 | 
			
		||||
 | 
			
		||||
        <!-- Jaxb -->
 | 
			
		||||
        <dependency>
 | 
			
		||||
            <groupId>javax.xml.bind</groupId>
 | 
			
		||||
            <artifactId>jaxb-api</artifactId>
 | 
			
		||||
        </dependency>
 | 
			
		||||
 | 
			
		||||
        <!-- redis 缓存操作 -->
 | 
			
		||||
        <dependency>
 | 
			
		||||
            <groupId>org.springframework.boot</groupId>
 | 
			
		||||
            <artifactId>spring-boot-starter-data-redis</artifactId>
 | 
			
		||||
        </dependency>
 | 
			
		||||
 | 
			
		||||
        <!-- pool 对象池 -->
 | 
			
		||||
        <dependency>
 | 
			
		||||
            <groupId>org.apache.commons</groupId>
 | 
			
		||||
            <artifactId>commons-pool2</artifactId>
 | 
			
		||||
        </dependency>
 | 
			
		||||
 | 
			
		||||
        <!-- 解析客户端操作系统、浏览器等 -->
 | 
			
		||||
        <dependency>
 | 
			
		||||
            <groupId>eu.bitwalker</groupId>
 | 
			
		||||
            <artifactId>UserAgentUtils</artifactId>
 | 
			
		||||
        </dependency>
 | 
			
		||||
 | 
			
		||||
        <!-- servlet包 -->
 | 
			
		||||
        <dependency>
 | 
			
		||||
            <groupId>javax.servlet</groupId>
 | 
			
		||||
            <artifactId>javax.servlet-api</artifactId>
 | 
			
		||||
        </dependency>
 | 
			
		||||
 | 
			
		||||
        <!-- 阿里云OSS -->
 | 
			
		||||
        <dependency>
 | 
			
		||||
            <groupId>com.aliyun.oss</groupId>
 | 
			
		||||
            <artifactId>aliyun-sdk-oss</artifactId>
 | 
			
		||||
            <version>3.17.4</version>
 | 
			
		||||
        </dependency>
 | 
			
		||||
 | 
			
		||||
        <!-- 文件上传 -->
 | 
			
		||||
        <dependency>
 | 
			
		||||
            <groupId>org.dromara.x-file-storage</groupId>
 | 
			
		||||
            <artifactId>x-file-storage-spring</artifactId>
 | 
			
		||||
            <version>2.2.1</version>
 | 
			
		||||
        </dependency>
 | 
			
		||||
 | 
			
		||||
        <!-- lombok -->
 | 
			
		||||
        <dependency>
 | 
			
		||||
            <groupId>org.projectlombok</groupId>
 | 
			
		||||
            <artifactId>lombok</artifactId>
 | 
			
		||||
            <version>1.18.24</version>
 | 
			
		||||
        </dependency>
 | 
			
		||||
 | 
			
		||||
    </dependencies>
 | 
			
		||||
 | 
			
		||||
<?xml version="1.0" encoding="UTF-8"?>
 | 
			
		||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
 | 
			
		||||
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 | 
			
		||||
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 | 
			
		||||
    <parent>
 | 
			
		||||
        <artifactId>ruoyi</artifactId>
 | 
			
		||||
        <groupId>com.ruoyi</groupId>
 | 
			
		||||
        <version>3.8.8</version>
 | 
			
		||||
    </parent>
 | 
			
		||||
    <modelVersion>4.0.0</modelVersion>
 | 
			
		||||
 | 
			
		||||
    <artifactId>ruoyi-common</artifactId>
 | 
			
		||||
 | 
			
		||||
    <description>
 | 
			
		||||
        common通用工具
 | 
			
		||||
    </description>
 | 
			
		||||
 | 
			
		||||
    <dependencies>
 | 
			
		||||
 | 
			
		||||
        <!-- Spring框架基本的核心工具 -->
 | 
			
		||||
        <dependency>
 | 
			
		||||
            <groupId>org.springframework</groupId>
 | 
			
		||||
            <artifactId>spring-context-support</artifactId>
 | 
			
		||||
        </dependency>
 | 
			
		||||
 | 
			
		||||
        <!-- SpringWeb模块 -->
 | 
			
		||||
        <dependency>
 | 
			
		||||
            <groupId>org.springframework</groupId>
 | 
			
		||||
            <artifactId>spring-web</artifactId>
 | 
			
		||||
        </dependency>
 | 
			
		||||
 | 
			
		||||
        <!-- spring security 安全认证 -->
 | 
			
		||||
        <dependency>
 | 
			
		||||
            <groupId>org.springframework.boot</groupId>
 | 
			
		||||
            <artifactId>spring-boot-starter-security</artifactId>
 | 
			
		||||
        </dependency>
 | 
			
		||||
 | 
			
		||||
        <!-- pagehelper 分页插件 -->
 | 
			
		||||
        <dependency>
 | 
			
		||||
            <groupId>com.github.pagehelper</groupId>
 | 
			
		||||
            <artifactId>pagehelper-spring-boot-starter</artifactId>
 | 
			
		||||
        </dependency>
 | 
			
		||||
 | 
			
		||||
        <!-- 自定义验证注解 -->
 | 
			
		||||
        <dependency>
 | 
			
		||||
            <groupId>org.springframework.boot</groupId>
 | 
			
		||||
            <artifactId>spring-boot-starter-validation</artifactId>
 | 
			
		||||
        </dependency>
 | 
			
		||||
 | 
			
		||||
        <!--常用工具类 -->
 | 
			
		||||
        <dependency>
 | 
			
		||||
            <groupId>org.apache.commons</groupId>
 | 
			
		||||
            <artifactId>commons-lang3</artifactId>
 | 
			
		||||
        </dependency>
 | 
			
		||||
  
 | 
			
		||||
        <!-- JSON工具类 -->
 | 
			
		||||
        <dependency>
 | 
			
		||||
            <groupId>com.fasterxml.jackson.core</groupId>
 | 
			
		||||
            <artifactId>jackson-databind</artifactId>
 | 
			
		||||
        </dependency>
 | 
			
		||||
        
 | 
			
		||||
        <!-- 阿里JSON解析器 -->
 | 
			
		||||
        <dependency>
 | 
			
		||||
            <groupId>com.alibaba.fastjson2</groupId>
 | 
			
		||||
            <artifactId>fastjson2</artifactId>
 | 
			
		||||
        </dependency>
 | 
			
		||||
 | 
			
		||||
        <!-- io常用工具类 -->
 | 
			
		||||
        <dependency>
 | 
			
		||||
            <groupId>commons-io</groupId>
 | 
			
		||||
            <artifactId>commons-io</artifactId>
 | 
			
		||||
        </dependency>
 | 
			
		||||
 | 
			
		||||
        <!-- excel工具 -->
 | 
			
		||||
        <dependency>
 | 
			
		||||
            <groupId>org.apache.poi</groupId>
 | 
			
		||||
            <artifactId>poi-ooxml</artifactId>
 | 
			
		||||
        </dependency>
 | 
			
		||||
 | 
			
		||||
        <!-- yml解析器 -->
 | 
			
		||||
        <dependency>
 | 
			
		||||
            <groupId>org.yaml</groupId>
 | 
			
		||||
            <artifactId>snakeyaml</artifactId>
 | 
			
		||||
        </dependency>
 | 
			
		||||
 | 
			
		||||
        <!-- Token生成与解析-->
 | 
			
		||||
        <dependency>
 | 
			
		||||
            <groupId>io.jsonwebtoken</groupId>
 | 
			
		||||
            <artifactId>jjwt</artifactId>
 | 
			
		||||
        </dependency>
 | 
			
		||||
 | 
			
		||||
        <!-- Jaxb -->
 | 
			
		||||
        <dependency>
 | 
			
		||||
            <groupId>javax.xml.bind</groupId>
 | 
			
		||||
            <artifactId>jaxb-api</artifactId>
 | 
			
		||||
        </dependency>
 | 
			
		||||
 | 
			
		||||
        <!-- redis 缓存操作 -->
 | 
			
		||||
        <dependency>
 | 
			
		||||
            <groupId>org.springframework.boot</groupId>
 | 
			
		||||
            <artifactId>spring-boot-starter-data-redis</artifactId>
 | 
			
		||||
        </dependency>
 | 
			
		||||
 | 
			
		||||
        <!-- pool 对象池 -->
 | 
			
		||||
        <dependency>
 | 
			
		||||
            <groupId>org.apache.commons</groupId>
 | 
			
		||||
            <artifactId>commons-pool2</artifactId>
 | 
			
		||||
        </dependency>
 | 
			
		||||
 | 
			
		||||
        <!-- 解析客户端操作系统、浏览器等 -->
 | 
			
		||||
        <dependency>
 | 
			
		||||
            <groupId>eu.bitwalker</groupId>
 | 
			
		||||
            <artifactId>UserAgentUtils</artifactId>
 | 
			
		||||
        </dependency>
 | 
			
		||||
 | 
			
		||||
        <!-- servlet包 -->
 | 
			
		||||
        <dependency>
 | 
			
		||||
            <groupId>javax.servlet</groupId>
 | 
			
		||||
            <artifactId>javax.servlet-api</artifactId>
 | 
			
		||||
        </dependency>
 | 
			
		||||
 | 
			
		||||
    </dependencies>
 | 
			
		||||
 | 
			
		||||
</project>
 | 
			
		||||
| 
						 | 
				
			
			@ -1,19 +1,19 @@
 | 
			
		|||
package com.tcctlo.common.annotation;
 | 
			
		||||
 | 
			
		||||
import java.lang.annotation.Documented;
 | 
			
		||||
import java.lang.annotation.ElementType;
 | 
			
		||||
import java.lang.annotation.Retention;
 | 
			
		||||
import java.lang.annotation.RetentionPolicy;
 | 
			
		||||
import java.lang.annotation.Target;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 匿名访问不鉴权注解
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
@Target({ ElementType.METHOD, ElementType.TYPE })
 | 
			
		||||
@Retention(RetentionPolicy.RUNTIME)
 | 
			
		||||
@Documented
 | 
			
		||||
public @interface Anonymous
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
package com.ruoyi.common.annotation;
 | 
			
		||||
 | 
			
		||||
import java.lang.annotation.Documented;
 | 
			
		||||
import java.lang.annotation.ElementType;
 | 
			
		||||
import java.lang.annotation.Retention;
 | 
			
		||||
import java.lang.annotation.RetentionPolicy;
 | 
			
		||||
import java.lang.annotation.Target;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 匿名访问不鉴权注解
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
@Target({ ElementType.METHOD, ElementType.TYPE })
 | 
			
		||||
@Retention(RetentionPolicy.RUNTIME)
 | 
			
		||||
@Documented
 | 
			
		||||
public @interface Anonymous
 | 
			
		||||
{
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,33 +1,33 @@
 | 
			
		|||
package com.tcctlo.common.annotation;
 | 
			
		||||
 | 
			
		||||
import java.lang.annotation.Documented;
 | 
			
		||||
import java.lang.annotation.ElementType;
 | 
			
		||||
import java.lang.annotation.Retention;
 | 
			
		||||
import java.lang.annotation.RetentionPolicy;
 | 
			
		||||
import java.lang.annotation.Target;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 数据权限过滤注解
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
@Target(ElementType.METHOD)
 | 
			
		||||
@Retention(RetentionPolicy.RUNTIME)
 | 
			
		||||
@Documented
 | 
			
		||||
public @interface DataScope
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * 部门表的别名
 | 
			
		||||
     */
 | 
			
		||||
    public String deptAlias() default "";
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 用户表的别名
 | 
			
		||||
     */
 | 
			
		||||
    public String userAlias() default "";
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 权限字符(用于多个角色匹配符合要求的权限)默认根据权限注解@ss获取,多个权限用逗号分隔开来
 | 
			
		||||
     */
 | 
			
		||||
    public String permission() default "";
 | 
			
		||||
}
 | 
			
		||||
package com.ruoyi.common.annotation;
 | 
			
		||||
 | 
			
		||||
import java.lang.annotation.Documented;
 | 
			
		||||
import java.lang.annotation.ElementType;
 | 
			
		||||
import java.lang.annotation.Retention;
 | 
			
		||||
import java.lang.annotation.RetentionPolicy;
 | 
			
		||||
import java.lang.annotation.Target;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 数据权限过滤注解
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
@Target(ElementType.METHOD)
 | 
			
		||||
@Retention(RetentionPolicy.RUNTIME)
 | 
			
		||||
@Documented
 | 
			
		||||
public @interface DataScope
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * 部门表的别名
 | 
			
		||||
     */
 | 
			
		||||
    public String deptAlias() default "";
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 用户表的别名
 | 
			
		||||
     */
 | 
			
		||||
    public String userAlias() default "";
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 权限字符(用于多个角色匹配符合要求的权限)默认根据权限注解@ss获取,多个权限用逗号分隔开来
 | 
			
		||||
     */
 | 
			
		||||
    public String permission() default "";
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,28 +1,28 @@
 | 
			
		|||
package com.tcctlo.common.annotation;
 | 
			
		||||
 | 
			
		||||
import java.lang.annotation.Documented;
 | 
			
		||||
import java.lang.annotation.ElementType;
 | 
			
		||||
import java.lang.annotation.Inherited;
 | 
			
		||||
import java.lang.annotation.Retention;
 | 
			
		||||
import java.lang.annotation.RetentionPolicy;
 | 
			
		||||
import java.lang.annotation.Target;
 | 
			
		||||
import com.tcctlo.common.enums.DataSourceType;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 自定义多数据源切换注解
 | 
			
		||||
 *
 | 
			
		||||
 * 优先级:先方法,后类,如果方法覆盖了类上的数据源类型,以方法的为准,否则以类上的为准
 | 
			
		||||
 *
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
@Target({ ElementType.METHOD, ElementType.TYPE })
 | 
			
		||||
@Retention(RetentionPolicy.RUNTIME)
 | 
			
		||||
@Documented
 | 
			
		||||
@Inherited
 | 
			
		||||
public @interface DataSource
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * 切换数据源名称
 | 
			
		||||
     */
 | 
			
		||||
    public DataSourceType value() default DataSourceType.MASTER;
 | 
			
		||||
}
 | 
			
		||||
package com.ruoyi.common.annotation;
 | 
			
		||||
 | 
			
		||||
import java.lang.annotation.Documented;
 | 
			
		||||
import java.lang.annotation.ElementType;
 | 
			
		||||
import java.lang.annotation.Inherited;
 | 
			
		||||
import java.lang.annotation.Retention;
 | 
			
		||||
import java.lang.annotation.RetentionPolicy;
 | 
			
		||||
import java.lang.annotation.Target;
 | 
			
		||||
import com.ruoyi.common.enums.DataSourceType;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 自定义多数据源切换注解
 | 
			
		||||
 *
 | 
			
		||||
 * 优先级:先方法,后类,如果方法覆盖了类上的数据源类型,以方法的为准,否则以类上的为准
 | 
			
		||||
 *
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
@Target({ ElementType.METHOD, ElementType.TYPE })
 | 
			
		||||
@Retention(RetentionPolicy.RUNTIME)
 | 
			
		||||
@Documented
 | 
			
		||||
@Inherited
 | 
			
		||||
public @interface DataSource
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * 切换数据源名称
 | 
			
		||||
     */
 | 
			
		||||
    public DataSourceType value() default DataSourceType.MASTER;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,197 +1,197 @@
 | 
			
		|||
package com.tcctlo.common.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.tcctlo.common.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 "";
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 如果是字典类型,请设置字典的type值 (如: sys_user_sex)
 | 
			
		||||
     */
 | 
			
		||||
    public String dictType() 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 boolean wrapText() default false;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 设置只能选择不能输入的列内容.
 | 
			
		||||
     */
 | 
			
		||||
    public String[] combo() default {};
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 是否从字典读数据到combo,默认不读取,如读取需要设置dictType注解.
 | 
			
		||||
     */
 | 
			
		||||
    public boolean comboReadDict() default false;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 是否需要纵向合并单元格,应对需求:含有list集合单元格)
 | 
			
		||||
     */
 | 
			
		||||
    public boolean needMerge() default false;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 是否导出数据,应对需求:有时我们需要导出一份模板,这是标题需要但内容需要用户手工填写.
 | 
			
		||||
     */
 | 
			
		||||
    public boolean isExport() default true;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 另一个类中的属性名称,支持多级获取,以小数点隔开
 | 
			
		||||
     */
 | 
			
		||||
    public String targetAttr() default "";
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 是否自动统计数据,在最后追加一行统计数据总和
 | 
			
		||||
     */
 | 
			
		||||
    public boolean isStatistics() default false;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 导出类型(0数字 1字符串 2图片)
 | 
			
		||||
     */
 | 
			
		||||
    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), TEXT(3);
 | 
			
		||||
        private final int value;
 | 
			
		||||
 | 
			
		||||
        ColumnType(int value)
 | 
			
		||||
        {
 | 
			
		||||
            this.value = value;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public int value()
 | 
			
		||||
        {
 | 
			
		||||
            return this.value;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
package com.ruoyi.common.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.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 "";
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 如果是字典类型,请设置字典的type值 (如: sys_user_sex)
 | 
			
		||||
     */
 | 
			
		||||
    public String dictType() 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 boolean wrapText() default false;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 设置只能选择不能输入的列内容.
 | 
			
		||||
     */
 | 
			
		||||
    public String[] combo() default {};
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 是否从字典读数据到combo,默认不读取,如读取需要设置dictType注解.
 | 
			
		||||
     */
 | 
			
		||||
    public boolean comboReadDict() default false;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 是否需要纵向合并单元格,应对需求:含有list集合单元格)
 | 
			
		||||
     */
 | 
			
		||||
    public boolean needMerge() default false;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 是否导出数据,应对需求:有时我们需要导出一份模板,这是标题需要但内容需要用户手工填写.
 | 
			
		||||
     */
 | 
			
		||||
    public boolean isExport() default true;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 另一个类中的属性名称,支持多级获取,以小数点隔开
 | 
			
		||||
     */
 | 
			
		||||
    public String targetAttr() default "";
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 是否自动统计数据,在最后追加一行统计数据总和
 | 
			
		||||
     */
 | 
			
		||||
    public boolean isStatistics() default false;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 导出类型(0数字 1字符串 2图片)
 | 
			
		||||
     */
 | 
			
		||||
    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), TEXT(3);
 | 
			
		||||
        private final int value;
 | 
			
		||||
 | 
			
		||||
        ColumnType(int value)
 | 
			
		||||
        {
 | 
			
		||||
            this.value = value;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public int value()
 | 
			
		||||
        {
 | 
			
		||||
            return this.value;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,18 +1,18 @@
 | 
			
		|||
package com.tcctlo.common.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
 | 
			
		||||
{
 | 
			
		||||
    public Excel[] value();
 | 
			
		||||
}
 | 
			
		||||
package com.ruoyi.common.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
 | 
			
		||||
{
 | 
			
		||||
    public Excel[] value();
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,51 +1,51 @@
 | 
			
		|||
package com.tcctlo.common.annotation;
 | 
			
		||||
 | 
			
		||||
import java.lang.annotation.Documented;
 | 
			
		||||
import java.lang.annotation.ElementType;
 | 
			
		||||
import java.lang.annotation.Retention;
 | 
			
		||||
import java.lang.annotation.RetentionPolicy;
 | 
			
		||||
import java.lang.annotation.Target;
 | 
			
		||||
import com.tcctlo.common.enums.BusinessType;
 | 
			
		||||
import com.tcctlo.common.enums.OperatorType;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 自定义操作日志记录注解
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
@Target({ ElementType.PARAMETER, ElementType.METHOD })
 | 
			
		||||
@Retention(RetentionPolicy.RUNTIME)
 | 
			
		||||
@Documented
 | 
			
		||||
public @interface Log
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * 模块
 | 
			
		||||
     */
 | 
			
		||||
    public String title() default "";
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 功能
 | 
			
		||||
     */
 | 
			
		||||
    public BusinessType businessType() default BusinessType.OTHER;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 操作人类别
 | 
			
		||||
     */
 | 
			
		||||
    public OperatorType operatorType() default OperatorType.MANAGE;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 是否保存请求的参数
 | 
			
		||||
     */
 | 
			
		||||
    public boolean isSaveRequestData() default true;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 是否保存响应的参数
 | 
			
		||||
     */
 | 
			
		||||
    public boolean isSaveResponseData() default true;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 排除指定的请求参数
 | 
			
		||||
     */
 | 
			
		||||
    public String[] excludeParamNames() default {};
 | 
			
		||||
}
 | 
			
		||||
package com.ruoyi.common.annotation;
 | 
			
		||||
 | 
			
		||||
import java.lang.annotation.Documented;
 | 
			
		||||
import java.lang.annotation.ElementType;
 | 
			
		||||
import java.lang.annotation.Retention;
 | 
			
		||||
import java.lang.annotation.RetentionPolicy;
 | 
			
		||||
import java.lang.annotation.Target;
 | 
			
		||||
import com.ruoyi.common.enums.BusinessType;
 | 
			
		||||
import com.ruoyi.common.enums.OperatorType;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 自定义操作日志记录注解
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
@Target({ ElementType.PARAMETER, ElementType.METHOD })
 | 
			
		||||
@Retention(RetentionPolicy.RUNTIME)
 | 
			
		||||
@Documented
 | 
			
		||||
public @interface Log
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * 模块
 | 
			
		||||
     */
 | 
			
		||||
    public String title() default "";
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 功能
 | 
			
		||||
     */
 | 
			
		||||
    public BusinessType businessType() default BusinessType.OTHER;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 操作人类别
 | 
			
		||||
     */
 | 
			
		||||
    public OperatorType operatorType() default OperatorType.MANAGE;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 是否保存请求的参数
 | 
			
		||||
     */
 | 
			
		||||
    public boolean isSaveRequestData() default true;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 是否保存响应的参数
 | 
			
		||||
     */
 | 
			
		||||
    public boolean isSaveResponseData() default true;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 排除指定的请求参数
 | 
			
		||||
     */
 | 
			
		||||
    public String[] excludeParamNames() default {};
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,40 +1,40 @@
 | 
			
		|||
package com.tcctlo.common.annotation;
 | 
			
		||||
 | 
			
		||||
import java.lang.annotation.Documented;
 | 
			
		||||
import java.lang.annotation.ElementType;
 | 
			
		||||
import java.lang.annotation.Retention;
 | 
			
		||||
import java.lang.annotation.RetentionPolicy;
 | 
			
		||||
import java.lang.annotation.Target;
 | 
			
		||||
import com.tcctlo.common.constant.CacheConstants;
 | 
			
		||||
import com.tcctlo.common.enums.LimitType;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 限流注解
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
@Target(ElementType.METHOD)
 | 
			
		||||
@Retention(RetentionPolicy.RUNTIME)
 | 
			
		||||
@Documented
 | 
			
		||||
public @interface RateLimiter
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * 限流key
 | 
			
		||||
     */
 | 
			
		||||
    public String key() default CacheConstants.RATE_LIMIT_KEY;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 限流时间,单位秒
 | 
			
		||||
     */
 | 
			
		||||
    public int time() default 60;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 限流次数
 | 
			
		||||
     */
 | 
			
		||||
    public int count() default 100;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 限流类型
 | 
			
		||||
     */
 | 
			
		||||
    public LimitType limitType() default LimitType.DEFAULT;
 | 
			
		||||
}
 | 
			
		||||
package com.ruoyi.common.annotation;
 | 
			
		||||
 | 
			
		||||
import java.lang.annotation.Documented;
 | 
			
		||||
import java.lang.annotation.ElementType;
 | 
			
		||||
import java.lang.annotation.Retention;
 | 
			
		||||
import java.lang.annotation.RetentionPolicy;
 | 
			
		||||
import java.lang.annotation.Target;
 | 
			
		||||
import com.ruoyi.common.constant.CacheConstants;
 | 
			
		||||
import com.ruoyi.common.enums.LimitType;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 限流注解
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
@Target(ElementType.METHOD)
 | 
			
		||||
@Retention(RetentionPolicy.RUNTIME)
 | 
			
		||||
@Documented
 | 
			
		||||
public @interface RateLimiter
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * 限流key
 | 
			
		||||
     */
 | 
			
		||||
    public String key() default CacheConstants.RATE_LIMIT_KEY;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 限流时间,单位秒
 | 
			
		||||
     */
 | 
			
		||||
    public int time() default 60;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 限流次数
 | 
			
		||||
     */
 | 
			
		||||
    public int count() default 100;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 限流类型
 | 
			
		||||
     */
 | 
			
		||||
    public LimitType limitType() default LimitType.DEFAULT;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,31 +1,31 @@
 | 
			
		|||
package com.tcctlo.common.annotation;
 | 
			
		||||
 | 
			
		||||
import java.lang.annotation.Documented;
 | 
			
		||||
import java.lang.annotation.ElementType;
 | 
			
		||||
import java.lang.annotation.Inherited;
 | 
			
		||||
import java.lang.annotation.Retention;
 | 
			
		||||
import java.lang.annotation.RetentionPolicy;
 | 
			
		||||
import java.lang.annotation.Target;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 自定义注解防止表单重复提交
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
@Inherited
 | 
			
		||||
@Target(ElementType.METHOD)
 | 
			
		||||
@Retention(RetentionPolicy.RUNTIME)
 | 
			
		||||
@Documented
 | 
			
		||||
public @interface RepeatSubmit
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * 间隔时间(ms),小于此时间视为重复提交
 | 
			
		||||
     */
 | 
			
		||||
    public int interval() default 5000;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 提示消息
 | 
			
		||||
     */
 | 
			
		||||
    public String message() default "不允许重复提交,请稍候再试";
 | 
			
		||||
}
 | 
			
		||||
package com.ruoyi.common.annotation;
 | 
			
		||||
 | 
			
		||||
import java.lang.annotation.Documented;
 | 
			
		||||
import java.lang.annotation.ElementType;
 | 
			
		||||
import java.lang.annotation.Inherited;
 | 
			
		||||
import java.lang.annotation.Retention;
 | 
			
		||||
import java.lang.annotation.RetentionPolicy;
 | 
			
		||||
import java.lang.annotation.Target;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 自定义注解防止表单重复提交
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
@Inherited
 | 
			
		||||
@Target(ElementType.METHOD)
 | 
			
		||||
@Retention(RetentionPolicy.RUNTIME)
 | 
			
		||||
@Documented
 | 
			
		||||
public @interface RepeatSubmit
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * 间隔时间(ms),小于此时间视为重复提交
 | 
			
		||||
     */
 | 
			
		||||
    public int interval() default 5000;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 提示消息
 | 
			
		||||
     */
 | 
			
		||||
    public String message() default "不允许重复提交,请稍候再试";
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,4 +1,4 @@
 | 
			
		|||
package com.tcctlo.common.annotation;
 | 
			
		||||
package com.ruoyi.common.annotation;
 | 
			
		||||
 | 
			
		||||
import java.lang.annotation.ElementType;
 | 
			
		||||
import java.lang.annotation.Retention;
 | 
			
		||||
| 
						 | 
				
			
			@ -6,8 +6,8 @@ import java.lang.annotation.RetentionPolicy;
 | 
			
		|||
import java.lang.annotation.Target;
 | 
			
		||||
import com.fasterxml.jackson.annotation.JacksonAnnotationsInside;
 | 
			
		||||
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
 | 
			
		||||
import com.tcctlo.common.config.serializer.SensitiveJsonSerializer;
 | 
			
		||||
import com.tcctlo.common.enums.DesensitizedType;
 | 
			
		||||
import com.ruoyi.common.config.serializer.SensitiveJsonSerializer;
 | 
			
		||||
import com.ruoyi.common.enums.DesensitizedType;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 数据脱敏注解
 | 
			
		||||
| 
						 | 
				
			
			@ -1,122 +1,122 @@
 | 
			
		|||
package com.tcctlo.common.config;
 | 
			
		||||
 | 
			
		||||
import org.springframework.boot.context.properties.ConfigurationProperties;
 | 
			
		||||
import org.springframework.stereotype.Component;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 读取项目相关配置
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
@Component
 | 
			
		||||
@ConfigurationProperties(prefix = "ruoyi")
 | 
			
		||||
public class RuoYiConfig
 | 
			
		||||
{
 | 
			
		||||
    /** 项目名称 */
 | 
			
		||||
    private String name;
 | 
			
		||||
 | 
			
		||||
    /** 版本 */
 | 
			
		||||
    private String version;
 | 
			
		||||
 | 
			
		||||
    /** 版权年份 */
 | 
			
		||||
    private String copyrightYear;
 | 
			
		||||
 | 
			
		||||
    /** 上传路径 */
 | 
			
		||||
    private static String profile;
 | 
			
		||||
 | 
			
		||||
    /** 获取地址开关 */
 | 
			
		||||
    private static boolean addressEnabled;
 | 
			
		||||
 | 
			
		||||
    /** 验证码类型 */
 | 
			
		||||
    private static String captchaType;
 | 
			
		||||
 | 
			
		||||
    public String getName()
 | 
			
		||||
    {
 | 
			
		||||
        return name;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setName(String name)
 | 
			
		||||
    {
 | 
			
		||||
        this.name = name;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getVersion()
 | 
			
		||||
    {
 | 
			
		||||
        return version;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setVersion(String version)
 | 
			
		||||
    {
 | 
			
		||||
        this.version = version;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getCopyrightYear()
 | 
			
		||||
    {
 | 
			
		||||
        return copyrightYear;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setCopyrightYear(String copyrightYear)
 | 
			
		||||
    {
 | 
			
		||||
        this.copyrightYear = copyrightYear;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static String getProfile()
 | 
			
		||||
    {
 | 
			
		||||
        return profile;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setProfile(String profile)
 | 
			
		||||
    {
 | 
			
		||||
        RuoYiConfig.profile = profile;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static boolean isAddressEnabled()
 | 
			
		||||
    {
 | 
			
		||||
        return addressEnabled;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setAddressEnabled(boolean addressEnabled)
 | 
			
		||||
    {
 | 
			
		||||
        RuoYiConfig.addressEnabled = addressEnabled;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static String getCaptchaType() {
 | 
			
		||||
        return captchaType;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setCaptchaType(String captchaType) {
 | 
			
		||||
        RuoYiConfig.captchaType = captchaType;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获取导入上传路径
 | 
			
		||||
     */
 | 
			
		||||
    public static String getImportPath()
 | 
			
		||||
    {
 | 
			
		||||
        return getProfile() + "/import";
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获取头像上传路径
 | 
			
		||||
     */
 | 
			
		||||
    public static String getAvatarPath()
 | 
			
		||||
    {
 | 
			
		||||
        return getProfile() + "/avatar";
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获取下载路径
 | 
			
		||||
     */
 | 
			
		||||
    public static String getDownloadPath()
 | 
			
		||||
    {
 | 
			
		||||
        return getProfile() + "/download/";
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获取上传路径
 | 
			
		||||
     */
 | 
			
		||||
    public static String getUploadPath()
 | 
			
		||||
    {
 | 
			
		||||
        return getProfile() + "/upload";
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
package com.ruoyi.common.config;
 | 
			
		||||
 | 
			
		||||
import org.springframework.boot.context.properties.ConfigurationProperties;
 | 
			
		||||
import org.springframework.stereotype.Component;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 读取项目相关配置
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
@Component
 | 
			
		||||
@ConfigurationProperties(prefix = "ruoyi")
 | 
			
		||||
public class RuoYiConfig
 | 
			
		||||
{
 | 
			
		||||
    /** 项目名称 */
 | 
			
		||||
    private String name;
 | 
			
		||||
 | 
			
		||||
    /** 版本 */
 | 
			
		||||
    private String version;
 | 
			
		||||
 | 
			
		||||
    /** 版权年份 */
 | 
			
		||||
    private String copyrightYear;
 | 
			
		||||
 | 
			
		||||
    /** 上传路径 */
 | 
			
		||||
    private static String profile;
 | 
			
		||||
 | 
			
		||||
    /** 获取地址开关 */
 | 
			
		||||
    private static boolean addressEnabled;
 | 
			
		||||
 | 
			
		||||
    /** 验证码类型 */
 | 
			
		||||
    private static String captchaType;
 | 
			
		||||
 | 
			
		||||
    public String getName()
 | 
			
		||||
    {
 | 
			
		||||
        return name;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setName(String name)
 | 
			
		||||
    {
 | 
			
		||||
        this.name = name;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getVersion()
 | 
			
		||||
    {
 | 
			
		||||
        return version;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setVersion(String version)
 | 
			
		||||
    {
 | 
			
		||||
        this.version = version;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getCopyrightYear()
 | 
			
		||||
    {
 | 
			
		||||
        return copyrightYear;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setCopyrightYear(String copyrightYear)
 | 
			
		||||
    {
 | 
			
		||||
        this.copyrightYear = copyrightYear;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static String getProfile()
 | 
			
		||||
    {
 | 
			
		||||
        return profile;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setProfile(String profile)
 | 
			
		||||
    {
 | 
			
		||||
        RuoYiConfig.profile = profile;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static boolean isAddressEnabled()
 | 
			
		||||
    {
 | 
			
		||||
        return addressEnabled;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setAddressEnabled(boolean addressEnabled)
 | 
			
		||||
    {
 | 
			
		||||
        RuoYiConfig.addressEnabled = addressEnabled;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static String getCaptchaType() {
 | 
			
		||||
        return captchaType;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setCaptchaType(String captchaType) {
 | 
			
		||||
        RuoYiConfig.captchaType = captchaType;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获取导入上传路径
 | 
			
		||||
     */
 | 
			
		||||
    public static String getImportPath()
 | 
			
		||||
    {
 | 
			
		||||
        return getProfile() + "/import";
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获取头像上传路径
 | 
			
		||||
     */
 | 
			
		||||
    public static String getAvatarPath()
 | 
			
		||||
    {
 | 
			
		||||
        return getProfile() + "/avatar";
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获取下载路径
 | 
			
		||||
     */
 | 
			
		||||
    public static String getDownloadPath()
 | 
			
		||||
    {
 | 
			
		||||
        return getProfile() + "/download/";
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获取上传路径
 | 
			
		||||
     */
 | 
			
		||||
    public static String getUploadPath()
 | 
			
		||||
    {
 | 
			
		||||
        return getProfile() + "/upload";
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,4 +1,4 @@
 | 
			
		|||
package com.tcctlo.common.config.serializer;
 | 
			
		||||
package com.ruoyi.common.config.serializer;
 | 
			
		||||
 | 
			
		||||
import java.io.IOException;
 | 
			
		||||
import java.util.Objects;
 | 
			
		||||
| 
						 | 
				
			
			@ -8,10 +8,10 @@ import com.fasterxml.jackson.databind.JsonMappingException;
 | 
			
		|||
import com.fasterxml.jackson.databind.JsonSerializer;
 | 
			
		||||
import com.fasterxml.jackson.databind.SerializerProvider;
 | 
			
		||||
import com.fasterxml.jackson.databind.ser.ContextualSerializer;
 | 
			
		||||
import com.tcctlo.common.annotation.Sensitive;
 | 
			
		||||
import com.tcctlo.common.core.domain.model.LoginUser;
 | 
			
		||||
import com.tcctlo.common.enums.DesensitizedType;
 | 
			
		||||
import com.tcctlo.common.utils.SecurityUtils;
 | 
			
		||||
import com.ruoyi.common.annotation.Sensitive;
 | 
			
		||||
import com.ruoyi.common.core.domain.model.LoginUser;
 | 
			
		||||
import com.ruoyi.common.enums.DesensitizedType;
 | 
			
		||||
import com.ruoyi.common.utils.SecurityUtils;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 数据脱敏序列化过滤
 | 
			
		||||
| 
						 | 
				
			
			@ -1,44 +1,44 @@
 | 
			
		|||
package com.tcctlo.common.constant;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 缓存的key 常量
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
public class CacheConstants
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * 登录用户 redis key
 | 
			
		||||
     */
 | 
			
		||||
    public static final 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 REPEAT_SUBMIT_KEY = "repeat_submit:";
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 限流 redis key
 | 
			
		||||
     */
 | 
			
		||||
    public static final String RATE_LIMIT_KEY = "rate_limit:";
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 登录账户密码错误次数 redis key
 | 
			
		||||
     */
 | 
			
		||||
    public static final String PWD_ERR_CNT_KEY = "pwd_err_cnt:";
 | 
			
		||||
}
 | 
			
		||||
package com.ruoyi.common.constant;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 缓存的key 常量
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
public class CacheConstants
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * 登录用户 redis key
 | 
			
		||||
     */
 | 
			
		||||
    public static final 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 REPEAT_SUBMIT_KEY = "repeat_submit:";
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 限流 redis key
 | 
			
		||||
     */
 | 
			
		||||
    public static final String RATE_LIMIT_KEY = "rate_limit:";
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 登录账户密码错误次数 redis key
 | 
			
		||||
     */
 | 
			
		||||
    public static final String PWD_ERR_CNT_KEY = "pwd_err_cnt:";
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,173 +1,173 @@
 | 
			
		|||
package com.tcctlo.common.constant;
 | 
			
		||||
 | 
			
		||||
import java.util.Locale;
 | 
			
		||||
import io.jsonwebtoken.Claims;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 通用常量信息
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
public class Constants
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * UTF-8 字符集
 | 
			
		||||
     */
 | 
			
		||||
    public static final String UTF8 = "UTF-8";
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * GBK 字符集
 | 
			
		||||
     */
 | 
			
		||||
    public static final String GBK = "GBK";
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 系统语言
 | 
			
		||||
     */
 | 
			
		||||
    public static final Locale DEFAULT_LOCALE = Locale.SIMPLIFIED_CHINESE;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * www主域
 | 
			
		||||
     */
 | 
			
		||||
    public static final String WWW = "www.";
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * http请求
 | 
			
		||||
     */
 | 
			
		||||
    public static final String HTTP = "http://";
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * https请求
 | 
			
		||||
     */
 | 
			
		||||
    public static final String HTTPS = "https://";
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 通用成功标识
 | 
			
		||||
     */
 | 
			
		||||
    public static final String SUCCESS = "0";
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 通用失败标识
 | 
			
		||||
     */
 | 
			
		||||
    public static final String FAIL = "1";
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 登录成功
 | 
			
		||||
     */
 | 
			
		||||
    public static final String 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 ALL_PERMISSION = "*:*:*";
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 管理员角色权限标识
 | 
			
		||||
     */
 | 
			
		||||
    public static final String SUPER_ADMIN = "admin";
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 角色权限分隔符
 | 
			
		||||
     */
 | 
			
		||||
    public static final String ROLE_DELIMETER = ",";
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 权限标识分隔符
 | 
			
		||||
     */
 | 
			
		||||
    public static final String PERMISSION_DELIMETER = ",";
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 验证码有效期(分钟)
 | 
			
		||||
     */
 | 
			
		||||
    public static final Integer CAPTCHA_EXPIRATION = 2;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 令牌
 | 
			
		||||
     */
 | 
			
		||||
    public static final String TOKEN = "token";
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 令牌前缀
 | 
			
		||||
     */
 | 
			
		||||
    public static final String TOKEN_PREFIX = "Bearer ";
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 令牌前缀
 | 
			
		||||
     */
 | 
			
		||||
    public static final String LOGIN_USER_KEY = "login_user_key";
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 用户ID
 | 
			
		||||
     */
 | 
			
		||||
    public static final String JWT_USERID = "userid";
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 用户名称
 | 
			
		||||
     */
 | 
			
		||||
    public static final String JWT_USERNAME = Claims.SUBJECT;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 用户头像
 | 
			
		||||
     */
 | 
			
		||||
    public static final String JWT_AVATAR = "avatar";
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 创建时间
 | 
			
		||||
     */
 | 
			
		||||
    public static final String JWT_CREATED = "created";
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 用户权限
 | 
			
		||||
     */
 | 
			
		||||
    public static final String JWT_AUTHORITIES = "authorities";
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 资源映射路径 前缀
 | 
			
		||||
     */
 | 
			
		||||
    public static final String RESOURCE_PREFIX = "/profile";
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * RMI 远程方法调用
 | 
			
		||||
     */
 | 
			
		||||
    public static final String LOOKUP_RMI = "rmi:";
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * LDAP 远程方法调用
 | 
			
		||||
     */
 | 
			
		||||
    public static final String LOOKUP_LDAP = "ldap:";
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * LDAPS 远程方法调用
 | 
			
		||||
     */
 | 
			
		||||
    public static final String LOOKUP_LDAPS = "ldaps:";
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 自动识别json对象白名单配置(仅允许解析的包名,范围越小越安全)
 | 
			
		||||
     */
 | 
			
		||||
    public static final String[] JSON_WHITELIST_STR = { "org.springframework", "com.tcctlo" };
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 定时任务白名单配置(仅允许访问的包名,如其他需要可以自行添加)
 | 
			
		||||
     */
 | 
			
		||||
    public static final String[] JOB_WHITELIST_STR = { "com.tcctlo.quartz.task" };
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 定时任务违规的字符
 | 
			
		||||
     */
 | 
			
		||||
    public static final String[] JOB_ERROR_STR = { "java.net.URL", "javax.naming.InitialContext", "org.yaml.snakeyaml",
 | 
			
		||||
            "org.springframework", "org.apache", "com.tcctlo.common.utils.file", "com.tcctlo.common.config", "com.tcctlo.generator" };
 | 
			
		||||
}
 | 
			
		||||
package com.ruoyi.common.constant;
 | 
			
		||||
 | 
			
		||||
import java.util.Locale;
 | 
			
		||||
import io.jsonwebtoken.Claims;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 通用常量信息
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
public class Constants
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * UTF-8 字符集
 | 
			
		||||
     */
 | 
			
		||||
    public static final String UTF8 = "UTF-8";
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * GBK 字符集
 | 
			
		||||
     */
 | 
			
		||||
    public static final String GBK = "GBK";
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 系统语言
 | 
			
		||||
     */
 | 
			
		||||
    public static final Locale DEFAULT_LOCALE = Locale.SIMPLIFIED_CHINESE;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * www主域
 | 
			
		||||
     */
 | 
			
		||||
    public static final String WWW = "www.";
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * http请求
 | 
			
		||||
     */
 | 
			
		||||
    public static final String HTTP = "http://";
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * https请求
 | 
			
		||||
     */
 | 
			
		||||
    public static final String HTTPS = "https://";
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 通用成功标识
 | 
			
		||||
     */
 | 
			
		||||
    public static final String SUCCESS = "0";
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 通用失败标识
 | 
			
		||||
     */
 | 
			
		||||
    public static final String FAIL = "1";
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 登录成功
 | 
			
		||||
     */
 | 
			
		||||
    public static final String 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 ALL_PERMISSION = "*:*:*";
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 管理员角色权限标识
 | 
			
		||||
     */
 | 
			
		||||
    public static final String SUPER_ADMIN = "admin";
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 角色权限分隔符
 | 
			
		||||
     */
 | 
			
		||||
    public static final String ROLE_DELIMETER = ",";
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 权限标识分隔符
 | 
			
		||||
     */
 | 
			
		||||
    public static final String PERMISSION_DELIMETER = ",";
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 验证码有效期(分钟)
 | 
			
		||||
     */
 | 
			
		||||
    public static final Integer CAPTCHA_EXPIRATION = 2;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 令牌
 | 
			
		||||
     */
 | 
			
		||||
    public static final String TOKEN = "token";
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 令牌前缀
 | 
			
		||||
     */
 | 
			
		||||
    public static final String TOKEN_PREFIX = "Bearer ";
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 令牌前缀
 | 
			
		||||
     */
 | 
			
		||||
    public static final String LOGIN_USER_KEY = "login_user_key";
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 用户ID
 | 
			
		||||
     */
 | 
			
		||||
    public static final String JWT_USERID = "userid";
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 用户名称
 | 
			
		||||
     */
 | 
			
		||||
    public static final String JWT_USERNAME = Claims.SUBJECT;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 用户头像
 | 
			
		||||
     */
 | 
			
		||||
    public static final String JWT_AVATAR = "avatar";
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 创建时间
 | 
			
		||||
     */
 | 
			
		||||
    public static final String JWT_CREATED = "created";
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 用户权限
 | 
			
		||||
     */
 | 
			
		||||
    public static final String JWT_AUTHORITIES = "authorities";
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 资源映射路径 前缀
 | 
			
		||||
     */
 | 
			
		||||
    public static final String RESOURCE_PREFIX = "/profile";
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * RMI 远程方法调用
 | 
			
		||||
     */
 | 
			
		||||
    public static final String LOOKUP_RMI = "rmi:";
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * LDAP 远程方法调用
 | 
			
		||||
     */
 | 
			
		||||
    public static final String LOOKUP_LDAP = "ldap:";
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * LDAPS 远程方法调用
 | 
			
		||||
     */
 | 
			
		||||
    public static final String LOOKUP_LDAPS = "ldaps:";
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 自动识别json对象白名单配置(仅允许解析的包名,范围越小越安全)
 | 
			
		||||
     */
 | 
			
		||||
    public static final String[] JSON_WHITELIST_STR = { "org.springframework", "com.ruoyi" };
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 定时任务白名单配置(仅允许访问的包名,如其他需要可以自行添加)
 | 
			
		||||
     */
 | 
			
		||||
    public static final String[] JOB_WHITELIST_STR = { "com.ruoyi.quartz.task" };
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 定时任务违规的字符
 | 
			
		||||
     */
 | 
			
		||||
    public static final String[] JOB_ERROR_STR = { "java.net.URL", "javax.naming.InitialContext", "org.yaml.snakeyaml",
 | 
			
		||||
            "org.springframework", "org.apache", "com.ruoyi.common.utils.file", "com.ruoyi.common.config", "com.ruoyi.generator" };
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,117 +1,117 @@
 | 
			
		|||
package com.tcctlo.common.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",
 | 
			
		||||
            "bit", "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", "children" };
 | 
			
		||||
 | 
			
		||||
    /** 文本框 */
 | 
			
		||||
    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";
 | 
			
		||||
}
 | 
			
		||||
package com.ruoyi.common.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",
 | 
			
		||||
            "bit", "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", "children" };
 | 
			
		||||
 | 
			
		||||
    /** 文本框 */
 | 
			
		||||
    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";
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,94 +1,94 @@
 | 
			
		|||
package com.tcctlo.common.constant;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 返回状态码
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
public class HttpStatus
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * 操作成功
 | 
			
		||||
     */
 | 
			
		||||
    public static final int SUCCESS = 200;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 对象创建成功
 | 
			
		||||
     */
 | 
			
		||||
    public static final int CREATED = 201;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 请求已经被接受
 | 
			
		||||
     */
 | 
			
		||||
    public static final int ACCEPTED = 202;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 操作已经执行成功,但是没有返回数据
 | 
			
		||||
     */
 | 
			
		||||
    public static final int NO_CONTENT = 204;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 资源已被移除
 | 
			
		||||
     */
 | 
			
		||||
    public static final int MOVED_PERM = 301;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 重定向
 | 
			
		||||
     */
 | 
			
		||||
    public static final int SEE_OTHER = 303;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 资源没有被修改
 | 
			
		||||
     */
 | 
			
		||||
    public static final int NOT_MODIFIED = 304;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 参数列表错误(缺少,格式不匹配)
 | 
			
		||||
     */
 | 
			
		||||
    public static final int BAD_REQUEST = 400;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 未授权
 | 
			
		||||
     */
 | 
			
		||||
    public static final int UNAUTHORIZED = 401;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 访问受限,授权过期
 | 
			
		||||
     */
 | 
			
		||||
    public static final int FORBIDDEN = 403;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 资源,服务未找到
 | 
			
		||||
     */
 | 
			
		||||
    public static final int NOT_FOUND = 404;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 不允许的http方法
 | 
			
		||||
     */
 | 
			
		||||
    public static final int BAD_METHOD = 405;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 资源冲突,或者资源被锁
 | 
			
		||||
     */
 | 
			
		||||
    public static final int CONFLICT = 409;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 不支持的数据,媒体类型
 | 
			
		||||
     */
 | 
			
		||||
    public static final int UNSUPPORTED_TYPE = 415;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 系统内部错误
 | 
			
		||||
     */
 | 
			
		||||
    public static final int ERROR = 500;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 接口未实现
 | 
			
		||||
     */
 | 
			
		||||
    public static final int NOT_IMPLEMENTED = 501;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 系统警告消息
 | 
			
		||||
     */
 | 
			
		||||
    public static final int WARN = 601;
 | 
			
		||||
}
 | 
			
		||||
package com.ruoyi.common.constant;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 返回状态码
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
public class HttpStatus
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * 操作成功
 | 
			
		||||
     */
 | 
			
		||||
    public static final int SUCCESS = 200;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 对象创建成功
 | 
			
		||||
     */
 | 
			
		||||
    public static final int CREATED = 201;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 请求已经被接受
 | 
			
		||||
     */
 | 
			
		||||
    public static final int ACCEPTED = 202;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 操作已经执行成功,但是没有返回数据
 | 
			
		||||
     */
 | 
			
		||||
    public static final int NO_CONTENT = 204;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 资源已被移除
 | 
			
		||||
     */
 | 
			
		||||
    public static final int MOVED_PERM = 301;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 重定向
 | 
			
		||||
     */
 | 
			
		||||
    public static final int SEE_OTHER = 303;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 资源没有被修改
 | 
			
		||||
     */
 | 
			
		||||
    public static final int NOT_MODIFIED = 304;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 参数列表错误(缺少,格式不匹配)
 | 
			
		||||
     */
 | 
			
		||||
    public static final int BAD_REQUEST = 400;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 未授权
 | 
			
		||||
     */
 | 
			
		||||
    public static final int UNAUTHORIZED = 401;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 访问受限,授权过期
 | 
			
		||||
     */
 | 
			
		||||
    public static final int FORBIDDEN = 403;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 资源,服务未找到
 | 
			
		||||
     */
 | 
			
		||||
    public static final int NOT_FOUND = 404;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 不允许的http方法
 | 
			
		||||
     */
 | 
			
		||||
    public static final int BAD_METHOD = 405;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 资源冲突,或者资源被锁
 | 
			
		||||
     */
 | 
			
		||||
    public static final int CONFLICT = 409;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 不支持的数据,媒体类型
 | 
			
		||||
     */
 | 
			
		||||
    public static final int UNSUPPORTED_TYPE = 415;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 系统内部错误
 | 
			
		||||
     */
 | 
			
		||||
    public static final int ERROR = 500;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 接口未实现
 | 
			
		||||
     */
 | 
			
		||||
    public static final int NOT_IMPLEMENTED = 501;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 系统警告消息
 | 
			
		||||
     */
 | 
			
		||||
    public static final int WARN = 601;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,50 +1,50 @@
 | 
			
		|||
package com.tcctlo.common.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;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
package com.ruoyi.common.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;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,81 +1,81 @@
 | 
			
		|||
package com.tcctlo.common.constant;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 用户常量信息
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
public class UserConstants
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * 平台内系统用户的唯一标志
 | 
			
		||||
     */
 | 
			
		||||
    public static final String SYS_USER = "SYS_USER";
 | 
			
		||||
 | 
			
		||||
    /** 正常状态 */
 | 
			
		||||
    public static final String NORMAL = "0";
 | 
			
		||||
 | 
			
		||||
    /** 异常状态 */
 | 
			
		||||
    public static final String EXCEPTION = "1";
 | 
			
		||||
 | 
			
		||||
    /** 用户封禁状态 */
 | 
			
		||||
    public static final String USER_DISABLE = "1";
 | 
			
		||||
 | 
			
		||||
    /** 角色正常状态 */
 | 
			
		||||
    public static final String ROLE_NORMAL = "0";
 | 
			
		||||
 | 
			
		||||
    /** 角色封禁状态 */
 | 
			
		||||
    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;
 | 
			
		||||
}
 | 
			
		||||
package com.ruoyi.common.constant;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 用户常量信息
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
public class UserConstants
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * 平台内系统用户的唯一标志
 | 
			
		||||
     */
 | 
			
		||||
    public static final String SYS_USER = "SYS_USER";
 | 
			
		||||
 | 
			
		||||
    /** 正常状态 */
 | 
			
		||||
    public static final String NORMAL = "0";
 | 
			
		||||
 | 
			
		||||
    /** 异常状态 */
 | 
			
		||||
    public static final String EXCEPTION = "1";
 | 
			
		||||
 | 
			
		||||
    /** 用户封禁状态 */
 | 
			
		||||
    public static final String USER_DISABLE = "1";
 | 
			
		||||
 | 
			
		||||
    /** 角色正常状态 */
 | 
			
		||||
    public static final String ROLE_NORMAL = "0";
 | 
			
		||||
 | 
			
		||||
    /** 角色封禁状态 */
 | 
			
		||||
    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;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,202 +1,202 @@
 | 
			
		|||
package com.tcctlo.common.core.controller;
 | 
			
		||||
 | 
			
		||||
import java.beans.PropertyEditorSupport;
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import org.slf4j.Logger;
 | 
			
		||||
import org.slf4j.LoggerFactory;
 | 
			
		||||
import org.springframework.web.bind.WebDataBinder;
 | 
			
		||||
import org.springframework.web.bind.annotation.InitBinder;
 | 
			
		||||
import com.github.pagehelper.PageHelper;
 | 
			
		||||
import com.github.pagehelper.PageInfo;
 | 
			
		||||
import com.tcctlo.common.constant.HttpStatus;
 | 
			
		||||
import com.tcctlo.common.core.domain.AjaxResult;
 | 
			
		||||
import com.tcctlo.common.core.domain.model.LoginUser;
 | 
			
		||||
import com.tcctlo.common.core.page.PageDomain;
 | 
			
		||||
import com.tcctlo.common.core.page.TableDataInfo;
 | 
			
		||||
import com.tcctlo.common.core.page.TableSupport;
 | 
			
		||||
import com.tcctlo.common.utils.DateUtils;
 | 
			
		||||
import com.tcctlo.common.utils.PageUtils;
 | 
			
		||||
import com.tcctlo.common.utils.SecurityUtils;
 | 
			
		||||
import com.tcctlo.common.utils.StringUtils;
 | 
			
		||||
import com.tcctlo.common.utils.sql.SqlUtil;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * web层通用数据处理
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
public class BaseController
 | 
			
		||||
{
 | 
			
		||||
    protected final Logger logger = LoggerFactory.getLogger(this.getClass());
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 将前台传递过来的日期格式的字符串,自动转化为Date类型
 | 
			
		||||
     */
 | 
			
		||||
    @InitBinder
 | 
			
		||||
    public void initBinder(WebDataBinder binder)
 | 
			
		||||
    {
 | 
			
		||||
        // Date 类型转换
 | 
			
		||||
        binder.registerCustomEditor(Date.class, new PropertyEditorSupport()
 | 
			
		||||
        {
 | 
			
		||||
            @Override
 | 
			
		||||
            public void setAsText(String text)
 | 
			
		||||
            {
 | 
			
		||||
                setValue(DateUtils.parseDate(text));
 | 
			
		||||
            }
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 设置请求分页数据
 | 
			
		||||
     */
 | 
			
		||||
    protected void startPage()
 | 
			
		||||
    {
 | 
			
		||||
        PageUtils.startPage();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 设置请求排序数据
 | 
			
		||||
     */
 | 
			
		||||
    protected void startOrderBy()
 | 
			
		||||
    {
 | 
			
		||||
        PageDomain pageDomain = TableSupport.buildPageRequest();
 | 
			
		||||
        if (StringUtils.isNotEmpty(pageDomain.getOrderBy()))
 | 
			
		||||
        {
 | 
			
		||||
            String orderBy = SqlUtil.escapeOrderBySql(pageDomain.getOrderBy());
 | 
			
		||||
            PageHelper.orderBy(orderBy);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 清理分页的线程变量
 | 
			
		||||
     */
 | 
			
		||||
    protected void clearPage()
 | 
			
		||||
    {
 | 
			
		||||
        PageUtils.clearPage();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 响应请求分页数据
 | 
			
		||||
     */
 | 
			
		||||
    @SuppressWarnings({ "rawtypes", "unchecked" })
 | 
			
		||||
    protected TableDataInfo getDataTable(List<?> list)
 | 
			
		||||
    {
 | 
			
		||||
        TableDataInfo rspData = new TableDataInfo();
 | 
			
		||||
        rspData.setCode(HttpStatus.SUCCESS);
 | 
			
		||||
        rspData.setMsg("查询成功");
 | 
			
		||||
        rspData.setRows(list);
 | 
			
		||||
        rspData.setTotal(new PageInfo(list).getTotal());
 | 
			
		||||
        return rspData;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 返回成功
 | 
			
		||||
     */
 | 
			
		||||
    public AjaxResult success()
 | 
			
		||||
    {
 | 
			
		||||
        return AjaxResult.success();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 返回失败消息
 | 
			
		||||
     */
 | 
			
		||||
    public AjaxResult error()
 | 
			
		||||
    {
 | 
			
		||||
        return AjaxResult.error();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 返回成功消息
 | 
			
		||||
     */
 | 
			
		||||
    public AjaxResult success(String message)
 | 
			
		||||
    {
 | 
			
		||||
        return AjaxResult.success(message);
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    /**
 | 
			
		||||
     * 返回成功消息
 | 
			
		||||
     */
 | 
			
		||||
    public AjaxResult success(Object data)
 | 
			
		||||
    {
 | 
			
		||||
        return AjaxResult.success(data);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 返回失败消息
 | 
			
		||||
     */
 | 
			
		||||
    public AjaxResult error(String message)
 | 
			
		||||
    {
 | 
			
		||||
        return AjaxResult.error(message);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 返回警告消息
 | 
			
		||||
     */
 | 
			
		||||
    public AjaxResult warn(String message)
 | 
			
		||||
    {
 | 
			
		||||
        return AjaxResult.warn(message);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 响应返回结果
 | 
			
		||||
     * 
 | 
			
		||||
     * @param rows 影响行数
 | 
			
		||||
     * @return 操作结果
 | 
			
		||||
     */
 | 
			
		||||
    protected AjaxResult toAjax(int rows)
 | 
			
		||||
    {
 | 
			
		||||
        return rows > 0 ? AjaxResult.success() : AjaxResult.error();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 响应返回结果
 | 
			
		||||
     * 
 | 
			
		||||
     * @param result 结果
 | 
			
		||||
     * @return 操作结果
 | 
			
		||||
     */
 | 
			
		||||
    protected AjaxResult toAjax(boolean result)
 | 
			
		||||
    {
 | 
			
		||||
        return result ? success() : error();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 页面跳转
 | 
			
		||||
     */
 | 
			
		||||
    public String redirect(String url)
 | 
			
		||||
    {
 | 
			
		||||
        return StringUtils.format("redirect:{}", url);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获取用户缓存信息
 | 
			
		||||
     */
 | 
			
		||||
    public LoginUser getLoginUser()
 | 
			
		||||
    {
 | 
			
		||||
        return SecurityUtils.getLoginUser();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获取登录用户id
 | 
			
		||||
     */
 | 
			
		||||
    public Long getUserId()
 | 
			
		||||
    {
 | 
			
		||||
        return getLoginUser().getUserId();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获取登录部门id
 | 
			
		||||
     */
 | 
			
		||||
    public Long getDeptId()
 | 
			
		||||
    {
 | 
			
		||||
        return getLoginUser().getDeptId();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获取登录用户名
 | 
			
		||||
     */
 | 
			
		||||
    public String getUsername()
 | 
			
		||||
    {
 | 
			
		||||
        return getLoginUser().getUsername();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
package com.ruoyi.common.core.controller;
 | 
			
		||||
 | 
			
		||||
import java.beans.PropertyEditorSupport;
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import org.slf4j.Logger;
 | 
			
		||||
import org.slf4j.LoggerFactory;
 | 
			
		||||
import org.springframework.web.bind.WebDataBinder;
 | 
			
		||||
import org.springframework.web.bind.annotation.InitBinder;
 | 
			
		||||
import com.github.pagehelper.PageHelper;
 | 
			
		||||
import com.github.pagehelper.PageInfo;
 | 
			
		||||
import com.ruoyi.common.constant.HttpStatus;
 | 
			
		||||
import com.ruoyi.common.core.domain.AjaxResult;
 | 
			
		||||
import com.ruoyi.common.core.domain.model.LoginUser;
 | 
			
		||||
import com.ruoyi.common.core.page.PageDomain;
 | 
			
		||||
import com.ruoyi.common.core.page.TableDataInfo;
 | 
			
		||||
import com.ruoyi.common.core.page.TableSupport;
 | 
			
		||||
import com.ruoyi.common.utils.DateUtils;
 | 
			
		||||
import com.ruoyi.common.utils.PageUtils;
 | 
			
		||||
import com.ruoyi.common.utils.SecurityUtils;
 | 
			
		||||
import com.ruoyi.common.utils.StringUtils;
 | 
			
		||||
import com.ruoyi.common.utils.sql.SqlUtil;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * web层通用数据处理
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
public class BaseController
 | 
			
		||||
{
 | 
			
		||||
    protected final Logger logger = LoggerFactory.getLogger(this.getClass());
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 将前台传递过来的日期格式的字符串,自动转化为Date类型
 | 
			
		||||
     */
 | 
			
		||||
    @InitBinder
 | 
			
		||||
    public void initBinder(WebDataBinder binder)
 | 
			
		||||
    {
 | 
			
		||||
        // Date 类型转换
 | 
			
		||||
        binder.registerCustomEditor(Date.class, new PropertyEditorSupport()
 | 
			
		||||
        {
 | 
			
		||||
            @Override
 | 
			
		||||
            public void setAsText(String text)
 | 
			
		||||
            {
 | 
			
		||||
                setValue(DateUtils.parseDate(text));
 | 
			
		||||
            }
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 设置请求分页数据
 | 
			
		||||
     */
 | 
			
		||||
    protected void startPage()
 | 
			
		||||
    {
 | 
			
		||||
        PageUtils.startPage();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 设置请求排序数据
 | 
			
		||||
     */
 | 
			
		||||
    protected void startOrderBy()
 | 
			
		||||
    {
 | 
			
		||||
        PageDomain pageDomain = TableSupport.buildPageRequest();
 | 
			
		||||
        if (StringUtils.isNotEmpty(pageDomain.getOrderBy()))
 | 
			
		||||
        {
 | 
			
		||||
            String orderBy = SqlUtil.escapeOrderBySql(pageDomain.getOrderBy());
 | 
			
		||||
            PageHelper.orderBy(orderBy);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 清理分页的线程变量
 | 
			
		||||
     */
 | 
			
		||||
    protected void clearPage()
 | 
			
		||||
    {
 | 
			
		||||
        PageUtils.clearPage();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 响应请求分页数据
 | 
			
		||||
     */
 | 
			
		||||
    @SuppressWarnings({ "rawtypes", "unchecked" })
 | 
			
		||||
    protected TableDataInfo getDataTable(List<?> list)
 | 
			
		||||
    {
 | 
			
		||||
        TableDataInfo rspData = new TableDataInfo();
 | 
			
		||||
        rspData.setCode(HttpStatus.SUCCESS);
 | 
			
		||||
        rspData.setMsg("查询成功");
 | 
			
		||||
        rspData.setRows(list);
 | 
			
		||||
        rspData.setTotal(new PageInfo(list).getTotal());
 | 
			
		||||
        return rspData;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 返回成功
 | 
			
		||||
     */
 | 
			
		||||
    public AjaxResult success()
 | 
			
		||||
    {
 | 
			
		||||
        return AjaxResult.success();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 返回失败消息
 | 
			
		||||
     */
 | 
			
		||||
    public AjaxResult error()
 | 
			
		||||
    {
 | 
			
		||||
        return AjaxResult.error();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 返回成功消息
 | 
			
		||||
     */
 | 
			
		||||
    public AjaxResult success(String message)
 | 
			
		||||
    {
 | 
			
		||||
        return AjaxResult.success(message);
 | 
			
		||||
    }
 | 
			
		||||
    
 | 
			
		||||
    /**
 | 
			
		||||
     * 返回成功消息
 | 
			
		||||
     */
 | 
			
		||||
    public AjaxResult success(Object data)
 | 
			
		||||
    {
 | 
			
		||||
        return AjaxResult.success(data);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 返回失败消息
 | 
			
		||||
     */
 | 
			
		||||
    public AjaxResult error(String message)
 | 
			
		||||
    {
 | 
			
		||||
        return AjaxResult.error(message);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 返回警告消息
 | 
			
		||||
     */
 | 
			
		||||
    public AjaxResult warn(String message)
 | 
			
		||||
    {
 | 
			
		||||
        return AjaxResult.warn(message);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 响应返回结果
 | 
			
		||||
     * 
 | 
			
		||||
     * @param rows 影响行数
 | 
			
		||||
     * @return 操作结果
 | 
			
		||||
     */
 | 
			
		||||
    protected AjaxResult toAjax(int rows)
 | 
			
		||||
    {
 | 
			
		||||
        return rows > 0 ? AjaxResult.success() : AjaxResult.error();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 响应返回结果
 | 
			
		||||
     * 
 | 
			
		||||
     * @param result 结果
 | 
			
		||||
     * @return 操作结果
 | 
			
		||||
     */
 | 
			
		||||
    protected AjaxResult toAjax(boolean result)
 | 
			
		||||
    {
 | 
			
		||||
        return result ? success() : error();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 页面跳转
 | 
			
		||||
     */
 | 
			
		||||
    public String redirect(String url)
 | 
			
		||||
    {
 | 
			
		||||
        return StringUtils.format("redirect:{}", url);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获取用户缓存信息
 | 
			
		||||
     */
 | 
			
		||||
    public LoginUser getLoginUser()
 | 
			
		||||
    {
 | 
			
		||||
        return SecurityUtils.getLoginUser();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获取登录用户id
 | 
			
		||||
     */
 | 
			
		||||
    public Long getUserId()
 | 
			
		||||
    {
 | 
			
		||||
        return getLoginUser().getUserId();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获取登录部门id
 | 
			
		||||
     */
 | 
			
		||||
    public Long getDeptId()
 | 
			
		||||
    {
 | 
			
		||||
        return getLoginUser().getDeptId();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获取登录用户名
 | 
			
		||||
     */
 | 
			
		||||
    public String getUsername()
 | 
			
		||||
    {
 | 
			
		||||
        return getLoginUser().getUsername();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,216 +1,216 @@
 | 
			
		|||
package com.tcctlo.common.core.domain;
 | 
			
		||||
 | 
			
		||||
import java.util.HashMap;
 | 
			
		||||
import java.util.Objects;
 | 
			
		||||
import com.tcctlo.common.constant.HttpStatus;
 | 
			
		||||
import com.tcctlo.common.utils.StringUtils;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 操作消息提醒
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
public class AjaxResult extends HashMap<String, Object>
 | 
			
		||||
{
 | 
			
		||||
    private static final long serialVersionUID = 1L;
 | 
			
		||||
 | 
			
		||||
    /** 状态码 */
 | 
			
		||||
    public static final String CODE_TAG = "code";
 | 
			
		||||
 | 
			
		||||
    /** 返回内容 */
 | 
			
		||||
    public static final String MSG_TAG = "msg";
 | 
			
		||||
 | 
			
		||||
    /** 数据对象 */
 | 
			
		||||
    public static final String DATA_TAG = "data";
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 初始化一个新创建的 AjaxResult 对象,使其表示一个空消息。
 | 
			
		||||
     */
 | 
			
		||||
    public AjaxResult()
 | 
			
		||||
    {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 初始化一个新创建的 AjaxResult 对象
 | 
			
		||||
     * 
 | 
			
		||||
     * @param code 状态码
 | 
			
		||||
     * @param msg 返回内容
 | 
			
		||||
     */
 | 
			
		||||
    public AjaxResult(int code, String msg)
 | 
			
		||||
    {
 | 
			
		||||
        super.put(CODE_TAG, code);
 | 
			
		||||
        super.put(MSG_TAG, msg);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 初始化一个新创建的 AjaxResult 对象
 | 
			
		||||
     * 
 | 
			
		||||
     * @param code 状态码
 | 
			
		||||
     * @param msg 返回内容
 | 
			
		||||
     * @param data 数据对象
 | 
			
		||||
     */
 | 
			
		||||
    public AjaxResult(int code, String msg, Object data)
 | 
			
		||||
    {
 | 
			
		||||
        super.put(CODE_TAG, code);
 | 
			
		||||
        super.put(MSG_TAG, msg);
 | 
			
		||||
        if (StringUtils.isNotNull(data))
 | 
			
		||||
        {
 | 
			
		||||
            super.put(DATA_TAG, data);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 返回成功消息
 | 
			
		||||
     * 
 | 
			
		||||
     * @return 成功消息
 | 
			
		||||
     */
 | 
			
		||||
    public static AjaxResult success()
 | 
			
		||||
    {
 | 
			
		||||
        return AjaxResult.success("操作成功");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 返回成功数据
 | 
			
		||||
     * 
 | 
			
		||||
     * @return 成功消息
 | 
			
		||||
     */
 | 
			
		||||
    public static AjaxResult success(Object data)
 | 
			
		||||
    {
 | 
			
		||||
        return AjaxResult.success("操作成功", data);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 返回成功消息
 | 
			
		||||
     * 
 | 
			
		||||
     * @param msg 返回内容
 | 
			
		||||
     * @return 成功消息
 | 
			
		||||
     */
 | 
			
		||||
    public static AjaxResult success(String msg)
 | 
			
		||||
    {
 | 
			
		||||
        return AjaxResult.success(msg, null);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 返回成功消息
 | 
			
		||||
     * 
 | 
			
		||||
     * @param msg 返回内容
 | 
			
		||||
     * @param data 数据对象
 | 
			
		||||
     * @return 成功消息
 | 
			
		||||
     */
 | 
			
		||||
    public static AjaxResult success(String msg, Object data)
 | 
			
		||||
    {
 | 
			
		||||
        return new AjaxResult(HttpStatus.SUCCESS, msg, data);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 返回警告消息
 | 
			
		||||
     *
 | 
			
		||||
     * @param msg 返回内容
 | 
			
		||||
     * @return 警告消息
 | 
			
		||||
     */
 | 
			
		||||
    public static AjaxResult warn(String msg)
 | 
			
		||||
    {
 | 
			
		||||
        return AjaxResult.warn(msg, null);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 返回警告消息
 | 
			
		||||
     *
 | 
			
		||||
     * @param msg 返回内容
 | 
			
		||||
     * @param data 数据对象
 | 
			
		||||
     * @return 警告消息
 | 
			
		||||
     */
 | 
			
		||||
    public static AjaxResult warn(String msg, Object data)
 | 
			
		||||
    {
 | 
			
		||||
        return new AjaxResult(HttpStatus.WARN, msg, data);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 返回错误消息
 | 
			
		||||
     * 
 | 
			
		||||
     * @return 错误消息
 | 
			
		||||
     */
 | 
			
		||||
    public static AjaxResult error()
 | 
			
		||||
    {
 | 
			
		||||
        return AjaxResult.error("操作失败");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 返回错误消息
 | 
			
		||||
     * 
 | 
			
		||||
     * @param msg 返回内容
 | 
			
		||||
     * @return 错误消息
 | 
			
		||||
     */
 | 
			
		||||
    public static AjaxResult error(String msg)
 | 
			
		||||
    {
 | 
			
		||||
        return AjaxResult.error(msg, null);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 返回错误消息
 | 
			
		||||
     * 
 | 
			
		||||
     * @param msg 返回内容
 | 
			
		||||
     * @param data 数据对象
 | 
			
		||||
     * @return 错误消息
 | 
			
		||||
     */
 | 
			
		||||
    public static AjaxResult error(String msg, Object data)
 | 
			
		||||
    {
 | 
			
		||||
        return new AjaxResult(HttpStatus.ERROR, msg, data);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 返回错误消息
 | 
			
		||||
     * 
 | 
			
		||||
     * @param code 状态码
 | 
			
		||||
     * @param msg 返回内容
 | 
			
		||||
     * @return 错误消息
 | 
			
		||||
     */
 | 
			
		||||
    public static AjaxResult error(int code, String msg)
 | 
			
		||||
    {
 | 
			
		||||
        return new AjaxResult(code, msg, null);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 是否为成功消息
 | 
			
		||||
     *
 | 
			
		||||
     * @return 结果
 | 
			
		||||
     */
 | 
			
		||||
    public boolean isSuccess()
 | 
			
		||||
    {
 | 
			
		||||
        return Objects.equals(HttpStatus.SUCCESS, this.get(CODE_TAG));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 是否为警告消息
 | 
			
		||||
     *
 | 
			
		||||
     * @return 结果
 | 
			
		||||
     */
 | 
			
		||||
    public boolean isWarn()
 | 
			
		||||
    {
 | 
			
		||||
        return Objects.equals(HttpStatus.WARN, this.get(CODE_TAG));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 是否为错误消息
 | 
			
		||||
     *
 | 
			
		||||
     * @return 结果
 | 
			
		||||
     */
 | 
			
		||||
    public boolean isError()
 | 
			
		||||
    {
 | 
			
		||||
        return Objects.equals(HttpStatus.ERROR, this.get(CODE_TAG));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 方便链式调用
 | 
			
		||||
     *
 | 
			
		||||
     * @param key 键
 | 
			
		||||
     * @param value 值
 | 
			
		||||
     * @return 数据对象
 | 
			
		||||
     */
 | 
			
		||||
    @Override
 | 
			
		||||
    public AjaxResult put(String key, Object value)
 | 
			
		||||
    {
 | 
			
		||||
        super.put(key, value);
 | 
			
		||||
        return this;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
package com.ruoyi.common.core.domain;
 | 
			
		||||
 | 
			
		||||
import java.util.HashMap;
 | 
			
		||||
import java.util.Objects;
 | 
			
		||||
import com.ruoyi.common.constant.HttpStatus;
 | 
			
		||||
import com.ruoyi.common.utils.StringUtils;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 操作消息提醒
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
public class AjaxResult extends HashMap<String, Object>
 | 
			
		||||
{
 | 
			
		||||
    private static final long serialVersionUID = 1L;
 | 
			
		||||
 | 
			
		||||
    /** 状态码 */
 | 
			
		||||
    public static final String CODE_TAG = "code";
 | 
			
		||||
 | 
			
		||||
    /** 返回内容 */
 | 
			
		||||
    public static final String MSG_TAG = "msg";
 | 
			
		||||
 | 
			
		||||
    /** 数据对象 */
 | 
			
		||||
    public static final String DATA_TAG = "data";
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 初始化一个新创建的 AjaxResult 对象,使其表示一个空消息。
 | 
			
		||||
     */
 | 
			
		||||
    public AjaxResult()
 | 
			
		||||
    {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 初始化一个新创建的 AjaxResult 对象
 | 
			
		||||
     * 
 | 
			
		||||
     * @param code 状态码
 | 
			
		||||
     * @param msg 返回内容
 | 
			
		||||
     */
 | 
			
		||||
    public AjaxResult(int code, String msg)
 | 
			
		||||
    {
 | 
			
		||||
        super.put(CODE_TAG, code);
 | 
			
		||||
        super.put(MSG_TAG, msg);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 初始化一个新创建的 AjaxResult 对象
 | 
			
		||||
     * 
 | 
			
		||||
     * @param code 状态码
 | 
			
		||||
     * @param msg 返回内容
 | 
			
		||||
     * @param data 数据对象
 | 
			
		||||
     */
 | 
			
		||||
    public AjaxResult(int code, String msg, Object data)
 | 
			
		||||
    {
 | 
			
		||||
        super.put(CODE_TAG, code);
 | 
			
		||||
        super.put(MSG_TAG, msg);
 | 
			
		||||
        if (StringUtils.isNotNull(data))
 | 
			
		||||
        {
 | 
			
		||||
            super.put(DATA_TAG, data);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 返回成功消息
 | 
			
		||||
     * 
 | 
			
		||||
     * @return 成功消息
 | 
			
		||||
     */
 | 
			
		||||
    public static AjaxResult success()
 | 
			
		||||
    {
 | 
			
		||||
        return AjaxResult.success("操作成功");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 返回成功数据
 | 
			
		||||
     * 
 | 
			
		||||
     * @return 成功消息
 | 
			
		||||
     */
 | 
			
		||||
    public static AjaxResult success(Object data)
 | 
			
		||||
    {
 | 
			
		||||
        return AjaxResult.success("操作成功", data);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 返回成功消息
 | 
			
		||||
     * 
 | 
			
		||||
     * @param msg 返回内容
 | 
			
		||||
     * @return 成功消息
 | 
			
		||||
     */
 | 
			
		||||
    public static AjaxResult success(String msg)
 | 
			
		||||
    {
 | 
			
		||||
        return AjaxResult.success(msg, null);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 返回成功消息
 | 
			
		||||
     * 
 | 
			
		||||
     * @param msg 返回内容
 | 
			
		||||
     * @param data 数据对象
 | 
			
		||||
     * @return 成功消息
 | 
			
		||||
     */
 | 
			
		||||
    public static AjaxResult success(String msg, Object data)
 | 
			
		||||
    {
 | 
			
		||||
        return new AjaxResult(HttpStatus.SUCCESS, msg, data);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 返回警告消息
 | 
			
		||||
     *
 | 
			
		||||
     * @param msg 返回内容
 | 
			
		||||
     * @return 警告消息
 | 
			
		||||
     */
 | 
			
		||||
    public static AjaxResult warn(String msg)
 | 
			
		||||
    {
 | 
			
		||||
        return AjaxResult.warn(msg, null);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 返回警告消息
 | 
			
		||||
     *
 | 
			
		||||
     * @param msg 返回内容
 | 
			
		||||
     * @param data 数据对象
 | 
			
		||||
     * @return 警告消息
 | 
			
		||||
     */
 | 
			
		||||
    public static AjaxResult warn(String msg, Object data)
 | 
			
		||||
    {
 | 
			
		||||
        return new AjaxResult(HttpStatus.WARN, msg, data);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 返回错误消息
 | 
			
		||||
     * 
 | 
			
		||||
     * @return 错误消息
 | 
			
		||||
     */
 | 
			
		||||
    public static AjaxResult error()
 | 
			
		||||
    {
 | 
			
		||||
        return AjaxResult.error("操作失败");
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 返回错误消息
 | 
			
		||||
     * 
 | 
			
		||||
     * @param msg 返回内容
 | 
			
		||||
     * @return 错误消息
 | 
			
		||||
     */
 | 
			
		||||
    public static AjaxResult error(String msg)
 | 
			
		||||
    {
 | 
			
		||||
        return AjaxResult.error(msg, null);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 返回错误消息
 | 
			
		||||
     * 
 | 
			
		||||
     * @param msg 返回内容
 | 
			
		||||
     * @param data 数据对象
 | 
			
		||||
     * @return 错误消息
 | 
			
		||||
     */
 | 
			
		||||
    public static AjaxResult error(String msg, Object data)
 | 
			
		||||
    {
 | 
			
		||||
        return new AjaxResult(HttpStatus.ERROR, msg, data);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 返回错误消息
 | 
			
		||||
     * 
 | 
			
		||||
     * @param code 状态码
 | 
			
		||||
     * @param msg 返回内容
 | 
			
		||||
     * @return 错误消息
 | 
			
		||||
     */
 | 
			
		||||
    public static AjaxResult error(int code, String msg)
 | 
			
		||||
    {
 | 
			
		||||
        return new AjaxResult(code, msg, null);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 是否为成功消息
 | 
			
		||||
     *
 | 
			
		||||
     * @return 结果
 | 
			
		||||
     */
 | 
			
		||||
    public boolean isSuccess()
 | 
			
		||||
    {
 | 
			
		||||
        return Objects.equals(HttpStatus.SUCCESS, this.get(CODE_TAG));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 是否为警告消息
 | 
			
		||||
     *
 | 
			
		||||
     * @return 结果
 | 
			
		||||
     */
 | 
			
		||||
    public boolean isWarn()
 | 
			
		||||
    {
 | 
			
		||||
        return Objects.equals(HttpStatus.WARN, this.get(CODE_TAG));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 是否为错误消息
 | 
			
		||||
     *
 | 
			
		||||
     * @return 结果
 | 
			
		||||
     */
 | 
			
		||||
    public boolean isError()
 | 
			
		||||
    {
 | 
			
		||||
        return Objects.equals(HttpStatus.ERROR, this.get(CODE_TAG));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 方便链式调用
 | 
			
		||||
     *
 | 
			
		||||
     * @param key 键
 | 
			
		||||
     * @param value 值
 | 
			
		||||
     * @return 数据对象
 | 
			
		||||
     */
 | 
			
		||||
    @Override
 | 
			
		||||
    public AjaxResult put(String key, Object value)
 | 
			
		||||
    {
 | 
			
		||||
        super.put(key, value);
 | 
			
		||||
        return this;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,118 +1,118 @@
 | 
			
		|||
package com.tcctlo.common.core.domain;
 | 
			
		||||
 | 
			
		||||
import java.io.Serializable;
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
import java.util.HashMap;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
import com.fasterxml.jackson.annotation.JsonFormat;
 | 
			
		||||
import com.fasterxml.jackson.annotation.JsonIgnore;
 | 
			
		||||
import com.fasterxml.jackson.annotation.JsonInclude;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Entity基类
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
public class BaseEntity implements Serializable
 | 
			
		||||
{
 | 
			
		||||
    private static final long serialVersionUID = 1L;
 | 
			
		||||
 | 
			
		||||
    /** 搜索值 */
 | 
			
		||||
    @JsonIgnore
 | 
			
		||||
    private String searchValue;
 | 
			
		||||
 | 
			
		||||
    /** 创建者 */
 | 
			
		||||
    private String createBy;
 | 
			
		||||
 | 
			
		||||
    /** 创建时间 */
 | 
			
		||||
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
 | 
			
		||||
    private Date createTime;
 | 
			
		||||
 | 
			
		||||
    /** 更新者 */
 | 
			
		||||
    private String updateBy;
 | 
			
		||||
 | 
			
		||||
    /** 更新时间 */
 | 
			
		||||
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
 | 
			
		||||
    private Date updateTime;
 | 
			
		||||
 | 
			
		||||
    /** 备注 */
 | 
			
		||||
    private String remark;
 | 
			
		||||
 | 
			
		||||
    /** 请求参数 */
 | 
			
		||||
    @JsonInclude(JsonInclude.Include.NON_EMPTY)
 | 
			
		||||
    private Map<String, Object> params;
 | 
			
		||||
 | 
			
		||||
    public String getSearchValue()
 | 
			
		||||
    {
 | 
			
		||||
        return searchValue;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setSearchValue(String searchValue)
 | 
			
		||||
    {
 | 
			
		||||
        this.searchValue = searchValue;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getCreateBy()
 | 
			
		||||
    {
 | 
			
		||||
        return createBy;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setCreateBy(String createBy)
 | 
			
		||||
    {
 | 
			
		||||
        this.createBy = createBy;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Date getCreateTime()
 | 
			
		||||
    {
 | 
			
		||||
        return createTime;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setCreateTime(Date createTime)
 | 
			
		||||
    {
 | 
			
		||||
        this.createTime = createTime;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getUpdateBy()
 | 
			
		||||
    {
 | 
			
		||||
        return updateBy;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setUpdateBy(String updateBy)
 | 
			
		||||
    {
 | 
			
		||||
        this.updateBy = updateBy;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Date getUpdateTime()
 | 
			
		||||
    {
 | 
			
		||||
        return updateTime;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setUpdateTime(Date updateTime)
 | 
			
		||||
    {
 | 
			
		||||
        this.updateTime = updateTime;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getRemark()
 | 
			
		||||
    {
 | 
			
		||||
        return remark;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setRemark(String remark)
 | 
			
		||||
    {
 | 
			
		||||
        this.remark = remark;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Map<String, Object> getParams()
 | 
			
		||||
    {
 | 
			
		||||
        if (params == null)
 | 
			
		||||
        {
 | 
			
		||||
            params = new HashMap<>();
 | 
			
		||||
        }
 | 
			
		||||
        return params;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setParams(Map<String, Object> params)
 | 
			
		||||
    {
 | 
			
		||||
        this.params = params;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
package com.ruoyi.common.core.domain;
 | 
			
		||||
 | 
			
		||||
import java.io.Serializable;
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
import java.util.HashMap;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
import com.fasterxml.jackson.annotation.JsonFormat;
 | 
			
		||||
import com.fasterxml.jackson.annotation.JsonIgnore;
 | 
			
		||||
import com.fasterxml.jackson.annotation.JsonInclude;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Entity基类
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
public class BaseEntity implements Serializable
 | 
			
		||||
{
 | 
			
		||||
    private static final long serialVersionUID = 1L;
 | 
			
		||||
 | 
			
		||||
    /** 搜索值 */
 | 
			
		||||
    @JsonIgnore
 | 
			
		||||
    private String searchValue;
 | 
			
		||||
 | 
			
		||||
    /** 创建者 */
 | 
			
		||||
    private String createBy;
 | 
			
		||||
 | 
			
		||||
    /** 创建时间 */
 | 
			
		||||
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
 | 
			
		||||
    private Date createTime;
 | 
			
		||||
 | 
			
		||||
    /** 更新者 */
 | 
			
		||||
    private String updateBy;
 | 
			
		||||
 | 
			
		||||
    /** 更新时间 */
 | 
			
		||||
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
 | 
			
		||||
    private Date updateTime;
 | 
			
		||||
 | 
			
		||||
    /** 备注 */
 | 
			
		||||
    private String remark;
 | 
			
		||||
 | 
			
		||||
    /** 请求参数 */
 | 
			
		||||
    @JsonInclude(JsonInclude.Include.NON_EMPTY)
 | 
			
		||||
    private Map<String, Object> params;
 | 
			
		||||
 | 
			
		||||
    public String getSearchValue()
 | 
			
		||||
    {
 | 
			
		||||
        return searchValue;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setSearchValue(String searchValue)
 | 
			
		||||
    {
 | 
			
		||||
        this.searchValue = searchValue;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getCreateBy()
 | 
			
		||||
    {
 | 
			
		||||
        return createBy;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setCreateBy(String createBy)
 | 
			
		||||
    {
 | 
			
		||||
        this.createBy = createBy;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Date getCreateTime()
 | 
			
		||||
    {
 | 
			
		||||
        return createTime;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setCreateTime(Date createTime)
 | 
			
		||||
    {
 | 
			
		||||
        this.createTime = createTime;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getUpdateBy()
 | 
			
		||||
    {
 | 
			
		||||
        return updateBy;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setUpdateBy(String updateBy)
 | 
			
		||||
    {
 | 
			
		||||
        this.updateBy = updateBy;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Date getUpdateTime()
 | 
			
		||||
    {
 | 
			
		||||
        return updateTime;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setUpdateTime(Date updateTime)
 | 
			
		||||
    {
 | 
			
		||||
        this.updateTime = updateTime;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getRemark()
 | 
			
		||||
    {
 | 
			
		||||
        return remark;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setRemark(String remark)
 | 
			
		||||
    {
 | 
			
		||||
        this.remark = remark;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Map<String, Object> getParams()
 | 
			
		||||
    {
 | 
			
		||||
        if (params == null)
 | 
			
		||||
        {
 | 
			
		||||
            params = new HashMap<>();
 | 
			
		||||
        }
 | 
			
		||||
        return params;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setParams(Map<String, Object> params)
 | 
			
		||||
    {
 | 
			
		||||
        this.params = params;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
package com.tcctlo.common.core.domain;
 | 
			
		||||
package com.ruoyi.common.core.domain;
 | 
			
		||||
 | 
			
		||||
import java.io.Serializable;
 | 
			
		||||
import com.tcctlo.common.constant.HttpStatus;
 | 
			
		||||
import com.ruoyi.common.constant.HttpStatus;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 响应信息主体
 | 
			
		||||
| 
						 | 
				
			
			@ -1,79 +1,79 @@
 | 
			
		|||
package com.tcctlo.common.core.domain;
 | 
			
		||||
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Tree基类
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
public class TreeEntity extends BaseEntity
 | 
			
		||||
{
 | 
			
		||||
    private static final long serialVersionUID = 1L;
 | 
			
		||||
 | 
			
		||||
    /** 父菜单名称 */
 | 
			
		||||
    private String parentName;
 | 
			
		||||
 | 
			
		||||
    /** 父菜单ID */
 | 
			
		||||
    private Long parentId;
 | 
			
		||||
 | 
			
		||||
    /** 显示顺序 */
 | 
			
		||||
    private Integer orderNum;
 | 
			
		||||
 | 
			
		||||
    /** 祖级列表 */
 | 
			
		||||
    private String ancestors;
 | 
			
		||||
 | 
			
		||||
    /** 子部门 */
 | 
			
		||||
    private List<?> children = new ArrayList<>();
 | 
			
		||||
 | 
			
		||||
    public String getParentName()
 | 
			
		||||
    {
 | 
			
		||||
        return parentName;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setParentName(String parentName)
 | 
			
		||||
    {
 | 
			
		||||
        this.parentName = parentName;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Long getParentId()
 | 
			
		||||
    {
 | 
			
		||||
        return parentId;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setParentId(Long parentId)
 | 
			
		||||
    {
 | 
			
		||||
        this.parentId = parentId;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Integer getOrderNum()
 | 
			
		||||
    {
 | 
			
		||||
        return orderNum;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setOrderNum(Integer orderNum)
 | 
			
		||||
    {
 | 
			
		||||
        this.orderNum = orderNum;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getAncestors()
 | 
			
		||||
    {
 | 
			
		||||
        return ancestors;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setAncestors(String ancestors)
 | 
			
		||||
    {
 | 
			
		||||
        this.ancestors = ancestors;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public List<?> getChildren()
 | 
			
		||||
    {
 | 
			
		||||
        return children;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setChildren(List<?> children)
 | 
			
		||||
    {
 | 
			
		||||
        this.children = children;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
package com.ruoyi.common.core.domain;
 | 
			
		||||
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Tree基类
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
public class TreeEntity extends BaseEntity
 | 
			
		||||
{
 | 
			
		||||
    private static final long serialVersionUID = 1L;
 | 
			
		||||
 | 
			
		||||
    /** 父菜单名称 */
 | 
			
		||||
    private String parentName;
 | 
			
		||||
 | 
			
		||||
    /** 父菜单ID */
 | 
			
		||||
    private Long parentId;
 | 
			
		||||
 | 
			
		||||
    /** 显示顺序 */
 | 
			
		||||
    private Integer orderNum;
 | 
			
		||||
 | 
			
		||||
    /** 祖级列表 */
 | 
			
		||||
    private String ancestors;
 | 
			
		||||
 | 
			
		||||
    /** 子部门 */
 | 
			
		||||
    private List<?> children = new ArrayList<>();
 | 
			
		||||
 | 
			
		||||
    public String getParentName()
 | 
			
		||||
    {
 | 
			
		||||
        return parentName;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setParentName(String parentName)
 | 
			
		||||
    {
 | 
			
		||||
        this.parentName = parentName;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Long getParentId()
 | 
			
		||||
    {
 | 
			
		||||
        return parentId;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setParentId(Long parentId)
 | 
			
		||||
    {
 | 
			
		||||
        this.parentId = parentId;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Integer getOrderNum()
 | 
			
		||||
    {
 | 
			
		||||
        return orderNum;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setOrderNum(Integer orderNum)
 | 
			
		||||
    {
 | 
			
		||||
        this.orderNum = orderNum;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getAncestors()
 | 
			
		||||
    {
 | 
			
		||||
        return ancestors;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setAncestors(String ancestors)
 | 
			
		||||
    {
 | 
			
		||||
        this.ancestors = ancestors;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public List<?> getChildren()
 | 
			
		||||
    {
 | 
			
		||||
        return children;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setChildren(List<?> children)
 | 
			
		||||
    {
 | 
			
		||||
        this.children = children;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,93 +1,93 @@
 | 
			
		|||
package com.tcctlo.common.core.domain;
 | 
			
		||||
 | 
			
		||||
import java.io.Serializable;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.stream.Collectors;
 | 
			
		||||
import com.fasterxml.jackson.annotation.JsonInclude;
 | 
			
		||||
import com.tcctlo.common.constant.UserConstants;
 | 
			
		||||
import com.tcctlo.common.core.domain.entity.SysDept;
 | 
			
		||||
import com.tcctlo.common.core.domain.entity.SysMenu;
 | 
			
		||||
import com.tcctlo.common.utils.StringUtils;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Treeselect树结构实体类
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
public class TreeSelect implements Serializable
 | 
			
		||||
{
 | 
			
		||||
    private static final long serialVersionUID = 1L;
 | 
			
		||||
 | 
			
		||||
    /** 节点ID */
 | 
			
		||||
    private Long id;
 | 
			
		||||
 | 
			
		||||
    /** 节点名称 */
 | 
			
		||||
    private String label;
 | 
			
		||||
 | 
			
		||||
    /** 节点禁用 */
 | 
			
		||||
    private boolean disabled = false;
 | 
			
		||||
 | 
			
		||||
    /** 子节点 */
 | 
			
		||||
    @JsonInclude(JsonInclude.Include.NON_EMPTY)
 | 
			
		||||
    private List<TreeSelect> children;
 | 
			
		||||
 | 
			
		||||
    public TreeSelect()
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public TreeSelect(SysDept dept)
 | 
			
		||||
    {
 | 
			
		||||
        this.id = dept.getDeptId();
 | 
			
		||||
        this.label = dept.getDeptName();
 | 
			
		||||
        this.disabled = StringUtils.equals(UserConstants.DEPT_DISABLE, dept.getStatus());
 | 
			
		||||
        this.children = dept.getChildren().stream().map(TreeSelect::new).collect(Collectors.toList());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public TreeSelect(SysMenu menu)
 | 
			
		||||
    {
 | 
			
		||||
        this.id = menu.getMenuId();
 | 
			
		||||
        this.label = menu.getMenuName();
 | 
			
		||||
        this.children = menu.getChildren().stream().map(TreeSelect::new).collect(Collectors.toList());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Long getId()
 | 
			
		||||
    {
 | 
			
		||||
        return id;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setId(Long id)
 | 
			
		||||
    {
 | 
			
		||||
        this.id = id;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getLabel()
 | 
			
		||||
    {
 | 
			
		||||
        return label;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setLabel(String label)
 | 
			
		||||
    {
 | 
			
		||||
        this.label = label;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isDisabled()
 | 
			
		||||
    {
 | 
			
		||||
        return disabled;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setDisabled(boolean disabled)
 | 
			
		||||
    {
 | 
			
		||||
        this.disabled = disabled;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public List<TreeSelect> getChildren()
 | 
			
		||||
    {
 | 
			
		||||
        return children;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setChildren(List<TreeSelect> children)
 | 
			
		||||
    {
 | 
			
		||||
        this.children = children;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
package com.ruoyi.common.core.domain;
 | 
			
		||||
 | 
			
		||||
import java.io.Serializable;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.stream.Collectors;
 | 
			
		||||
import com.fasterxml.jackson.annotation.JsonInclude;
 | 
			
		||||
import com.ruoyi.common.constant.UserConstants;
 | 
			
		||||
import com.ruoyi.common.core.domain.entity.SysDept;
 | 
			
		||||
import com.ruoyi.common.core.domain.entity.SysMenu;
 | 
			
		||||
import com.ruoyi.common.utils.StringUtils;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Treeselect树结构实体类
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
public class TreeSelect implements Serializable
 | 
			
		||||
{
 | 
			
		||||
    private static final long serialVersionUID = 1L;
 | 
			
		||||
 | 
			
		||||
    /** 节点ID */
 | 
			
		||||
    private Long id;
 | 
			
		||||
 | 
			
		||||
    /** 节点名称 */
 | 
			
		||||
    private String label;
 | 
			
		||||
 | 
			
		||||
    /** 节点禁用 */
 | 
			
		||||
    private boolean disabled = false;
 | 
			
		||||
 | 
			
		||||
    /** 子节点 */
 | 
			
		||||
    @JsonInclude(JsonInclude.Include.NON_EMPTY)
 | 
			
		||||
    private List<TreeSelect> children;
 | 
			
		||||
 | 
			
		||||
    public TreeSelect()
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public TreeSelect(SysDept dept)
 | 
			
		||||
    {
 | 
			
		||||
        this.id = dept.getDeptId();
 | 
			
		||||
        this.label = dept.getDeptName();
 | 
			
		||||
        this.disabled = StringUtils.equals(UserConstants.DEPT_DISABLE, dept.getStatus());
 | 
			
		||||
        this.children = dept.getChildren().stream().map(TreeSelect::new).collect(Collectors.toList());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public TreeSelect(SysMenu menu)
 | 
			
		||||
    {
 | 
			
		||||
        this.id = menu.getMenuId();
 | 
			
		||||
        this.label = menu.getMenuName();
 | 
			
		||||
        this.children = menu.getChildren().stream().map(TreeSelect::new).collect(Collectors.toList());
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Long getId()
 | 
			
		||||
    {
 | 
			
		||||
        return id;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setId(Long id)
 | 
			
		||||
    {
 | 
			
		||||
        this.id = id;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getLabel()
 | 
			
		||||
    {
 | 
			
		||||
        return label;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setLabel(String label)
 | 
			
		||||
    {
 | 
			
		||||
        this.label = label;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean isDisabled()
 | 
			
		||||
    {
 | 
			
		||||
        return disabled;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setDisabled(boolean disabled)
 | 
			
		||||
    {
 | 
			
		||||
        this.disabled = disabled;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public List<TreeSelect> getChildren()
 | 
			
		||||
    {
 | 
			
		||||
        return children;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setChildren(List<TreeSelect> children)
 | 
			
		||||
    {
 | 
			
		||||
        this.children = children;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,203 +1,203 @@
 | 
			
		|||
package com.tcctlo.common.core.domain.entity;
 | 
			
		||||
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import javax.validation.constraints.Email;
 | 
			
		||||
import javax.validation.constraints.NotBlank;
 | 
			
		||||
import javax.validation.constraints.NotNull;
 | 
			
		||||
import javax.validation.constraints.Size;
 | 
			
		||||
import org.apache.commons.lang3.builder.ToStringBuilder;
 | 
			
		||||
import org.apache.commons.lang3.builder.ToStringStyle;
 | 
			
		||||
import com.tcctlo.common.core.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;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @NotBlank(message = "部门名称不能为空")
 | 
			
		||||
    @Size(min = 0, max = 30, message = "部门名称长度不能超过30个字符")
 | 
			
		||||
    public String getDeptName()
 | 
			
		||||
    {
 | 
			
		||||
        return deptName;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setDeptName(String deptName)
 | 
			
		||||
    {
 | 
			
		||||
        this.deptName = deptName;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @NotNull(message = "显示顺序不能为空")
 | 
			
		||||
    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();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
package com.ruoyi.common.core.domain.entity;
 | 
			
		||||
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import javax.validation.constraints.Email;
 | 
			
		||||
import javax.validation.constraints.NotBlank;
 | 
			
		||||
import javax.validation.constraints.NotNull;
 | 
			
		||||
import javax.validation.constraints.Size;
 | 
			
		||||
import org.apache.commons.lang3.builder.ToStringBuilder;
 | 
			
		||||
import org.apache.commons.lang3.builder.ToStringStyle;
 | 
			
		||||
import com.ruoyi.common.core.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;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @NotBlank(message = "部门名称不能为空")
 | 
			
		||||
    @Size(min = 0, max = 30, message = "部门名称长度不能超过30个字符")
 | 
			
		||||
    public String getDeptName()
 | 
			
		||||
    {
 | 
			
		||||
        return deptName;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setDeptName(String deptName)
 | 
			
		||||
    {
 | 
			
		||||
        this.deptName = deptName;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @NotNull(message = "显示顺序不能为空")
 | 
			
		||||
    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();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,176 +1,176 @@
 | 
			
		|||
package com.tcctlo.common.core.domain.entity;
 | 
			
		||||
 | 
			
		||||
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.tcctlo.common.annotation.Excel;
 | 
			
		||||
import com.tcctlo.common.annotation.Excel.ColumnType;
 | 
			
		||||
import com.tcctlo.common.constant.UserConstants;
 | 
			
		||||
import com.tcctlo.common.core.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();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
package com.ruoyi.common.core.domain.entity;
 | 
			
		||||
 | 
			
		||||
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.annotation.Excel;
 | 
			
		||||
import com.ruoyi.common.annotation.Excel.ColumnType;
 | 
			
		||||
import com.ruoyi.common.constant.UserConstants;
 | 
			
		||||
import com.ruoyi.common.core.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();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,96 +1,96 @@
 | 
			
		|||
package com.tcctlo.common.core.domain.entity;
 | 
			
		||||
 | 
			
		||||
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.tcctlo.common.annotation.Excel;
 | 
			
		||||
import com.tcctlo.common.annotation.Excel.ColumnType;
 | 
			
		||||
import com.tcctlo.common.core.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();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
package com.ruoyi.common.core.domain.entity;
 | 
			
		||||
 | 
			
		||||
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.annotation.Excel;
 | 
			
		||||
import com.ruoyi.common.annotation.Excel.ColumnType;
 | 
			
		||||
import com.ruoyi.common.core.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();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,274 +1,274 @@
 | 
			
		|||
package com.tcctlo.common.core.domain.entity;
 | 
			
		||||
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import javax.validation.constraints.NotBlank;
 | 
			
		||||
import javax.validation.constraints.NotNull;
 | 
			
		||||
import javax.validation.constraints.Size;
 | 
			
		||||
import org.apache.commons.lang3.builder.ToStringBuilder;
 | 
			
		||||
import org.apache.commons.lang3.builder.ToStringStyle;
 | 
			
		||||
import com.tcctlo.common.core.domain.BaseEntity;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 菜单权限表 sys_menu
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
public class SysMenu extends BaseEntity
 | 
			
		||||
{
 | 
			
		||||
    private static final long serialVersionUID = 1L;
 | 
			
		||||
 | 
			
		||||
    /** 菜单ID */
 | 
			
		||||
    private Long menuId;
 | 
			
		||||
 | 
			
		||||
    /** 菜单名称 */
 | 
			
		||||
    private String menuName;
 | 
			
		||||
 | 
			
		||||
    /** 父菜单名称 */
 | 
			
		||||
    private String parentName;
 | 
			
		||||
 | 
			
		||||
    /** 父菜单ID */
 | 
			
		||||
    private Long parentId;
 | 
			
		||||
 | 
			
		||||
    /** 显示顺序 */
 | 
			
		||||
    private Integer orderNum;
 | 
			
		||||
 | 
			
		||||
    /** 路由地址 */
 | 
			
		||||
    private String path;
 | 
			
		||||
 | 
			
		||||
    /** 组件路径 */
 | 
			
		||||
    private String component;
 | 
			
		||||
 | 
			
		||||
    /** 路由参数 */
 | 
			
		||||
    private String query;
 | 
			
		||||
 | 
			
		||||
    /** 路由名称,默认和路由地址相同的驼峰格式(注意:因为vue3版本的router会删除名称相同路由,为避免名字的冲突,特殊情况可以自定义) */
 | 
			
		||||
    private String routeName;
 | 
			
		||||
 | 
			
		||||
    /** 是否为外链(0是 1否) */
 | 
			
		||||
    private String isFrame;
 | 
			
		||||
 | 
			
		||||
    /** 是否缓存(0缓存 1不缓存) */
 | 
			
		||||
    private String isCache;
 | 
			
		||||
 | 
			
		||||
    /** 类型(M目录 C菜单 F按钮) */
 | 
			
		||||
    private String menuType;
 | 
			
		||||
 | 
			
		||||
    /** 显示状态(0显示 1隐藏) */
 | 
			
		||||
    private String visible;
 | 
			
		||||
 | 
			
		||||
    /** 菜单状态(0正常 1停用) */
 | 
			
		||||
    private String status;
 | 
			
		||||
 | 
			
		||||
    /** 权限字符串 */
 | 
			
		||||
    private String perms;
 | 
			
		||||
 | 
			
		||||
    /** 菜单图标 */
 | 
			
		||||
    private String icon;
 | 
			
		||||
 | 
			
		||||
    /** 子菜单 */
 | 
			
		||||
    private List<SysMenu> children = new ArrayList<SysMenu>();
 | 
			
		||||
 | 
			
		||||
    public Long getMenuId()
 | 
			
		||||
    {
 | 
			
		||||
        return menuId;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setMenuId(Long menuId)
 | 
			
		||||
    {
 | 
			
		||||
        this.menuId = menuId;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @NotBlank(message = "菜单名称不能为空")
 | 
			
		||||
    @Size(min = 0, max = 50, message = "菜单名称长度不能超过50个字符")
 | 
			
		||||
    public String getMenuName()
 | 
			
		||||
    {
 | 
			
		||||
        return menuName;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setMenuName(String menuName)
 | 
			
		||||
    {
 | 
			
		||||
        this.menuName = menuName;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getParentName()
 | 
			
		||||
    {
 | 
			
		||||
        return parentName;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setParentName(String parentName)
 | 
			
		||||
    {
 | 
			
		||||
        this.parentName = parentName;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Long getParentId()
 | 
			
		||||
    {
 | 
			
		||||
        return parentId;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setParentId(Long parentId)
 | 
			
		||||
    {
 | 
			
		||||
        this.parentId = parentId;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @NotNull(message = "显示顺序不能为空")
 | 
			
		||||
    public Integer getOrderNum()
 | 
			
		||||
    {
 | 
			
		||||
        return orderNum;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setOrderNum(Integer orderNum)
 | 
			
		||||
    {
 | 
			
		||||
        this.orderNum = orderNum;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Size(min = 0, max = 200, message = "路由地址不能超过200个字符")
 | 
			
		||||
    public String getPath()
 | 
			
		||||
    {
 | 
			
		||||
        return path;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setPath(String path)
 | 
			
		||||
    {
 | 
			
		||||
        this.path = path;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Size(min = 0, max = 200, message = "组件路径不能超过255个字符")
 | 
			
		||||
    public String getComponent()
 | 
			
		||||
    {
 | 
			
		||||
        return component;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setComponent(String component)
 | 
			
		||||
    {
 | 
			
		||||
        this.component = component;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getQuery()
 | 
			
		||||
    {
 | 
			
		||||
        return query;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setQuery(String query)
 | 
			
		||||
    {
 | 
			
		||||
        this.query = query;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getRouteName()
 | 
			
		||||
    {
 | 
			
		||||
        return routeName;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setRouteName(String routeName)
 | 
			
		||||
    {
 | 
			
		||||
        this.routeName = routeName;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getIsFrame()
 | 
			
		||||
    {
 | 
			
		||||
        return isFrame;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setIsFrame(String isFrame)
 | 
			
		||||
    {
 | 
			
		||||
        this.isFrame = isFrame;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getIsCache()
 | 
			
		||||
    {
 | 
			
		||||
        return isCache;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setIsCache(String isCache)
 | 
			
		||||
    {
 | 
			
		||||
        this.isCache = isCache;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @NotBlank(message = "菜单类型不能为空")
 | 
			
		||||
    public String getMenuType()
 | 
			
		||||
    {
 | 
			
		||||
        return menuType;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setMenuType(String menuType)
 | 
			
		||||
    {
 | 
			
		||||
        this.menuType = menuType;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getVisible()
 | 
			
		||||
    {
 | 
			
		||||
        return visible;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setVisible(String visible)
 | 
			
		||||
    {
 | 
			
		||||
        this.visible = visible;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getStatus()
 | 
			
		||||
    {
 | 
			
		||||
        return status;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setStatus(String status)
 | 
			
		||||
    {
 | 
			
		||||
        this.status = status;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Size(min = 0, max = 100, message = "权限标识长度不能超过100个字符")
 | 
			
		||||
    public String getPerms()
 | 
			
		||||
    {
 | 
			
		||||
        return perms;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setPerms(String perms)
 | 
			
		||||
    {
 | 
			
		||||
        this.perms = perms;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getIcon()
 | 
			
		||||
    {
 | 
			
		||||
        return icon;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setIcon(String icon)
 | 
			
		||||
    {
 | 
			
		||||
        this.icon = icon;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public List<SysMenu> getChildren()
 | 
			
		||||
    {
 | 
			
		||||
        return children;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setChildren(List<SysMenu> children)
 | 
			
		||||
    {
 | 
			
		||||
        this.children = children;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public String toString() {
 | 
			
		||||
        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
 | 
			
		||||
            .append("menuId", getMenuId())
 | 
			
		||||
            .append("menuName", getMenuName())
 | 
			
		||||
            .append("parentId", getParentId())
 | 
			
		||||
            .append("orderNum", getOrderNum())
 | 
			
		||||
            .append("path", getPath())
 | 
			
		||||
            .append("component", getComponent())
 | 
			
		||||
            .append("query", getQuery())
 | 
			
		||||
            .append("routeName", getRouteName())
 | 
			
		||||
            .append("isFrame", getIsFrame())
 | 
			
		||||
            .append("IsCache", getIsCache())
 | 
			
		||||
            .append("menuType", getMenuType())
 | 
			
		||||
            .append("visible", getVisible())
 | 
			
		||||
            .append("status ", getStatus())
 | 
			
		||||
            .append("perms", getPerms())
 | 
			
		||||
            .append("icon", getIcon())
 | 
			
		||||
            .append("createBy", getCreateBy())
 | 
			
		||||
            .append("createTime", getCreateTime())
 | 
			
		||||
            .append("updateBy", getUpdateBy())
 | 
			
		||||
            .append("updateTime", getUpdateTime())
 | 
			
		||||
            .append("remark", getRemark())
 | 
			
		||||
            .toString();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
package com.ruoyi.common.core.domain.entity;
 | 
			
		||||
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import javax.validation.constraints.NotBlank;
 | 
			
		||||
import javax.validation.constraints.NotNull;
 | 
			
		||||
import javax.validation.constraints.Size;
 | 
			
		||||
import org.apache.commons.lang3.builder.ToStringBuilder;
 | 
			
		||||
import org.apache.commons.lang3.builder.ToStringStyle;
 | 
			
		||||
import com.ruoyi.common.core.domain.BaseEntity;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 菜单权限表 sys_menu
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
public class SysMenu extends BaseEntity
 | 
			
		||||
{
 | 
			
		||||
    private static final long serialVersionUID = 1L;
 | 
			
		||||
 | 
			
		||||
    /** 菜单ID */
 | 
			
		||||
    private Long menuId;
 | 
			
		||||
 | 
			
		||||
    /** 菜单名称 */
 | 
			
		||||
    private String menuName;
 | 
			
		||||
 | 
			
		||||
    /** 父菜单名称 */
 | 
			
		||||
    private String parentName;
 | 
			
		||||
 | 
			
		||||
    /** 父菜单ID */
 | 
			
		||||
    private Long parentId;
 | 
			
		||||
 | 
			
		||||
    /** 显示顺序 */
 | 
			
		||||
    private Integer orderNum;
 | 
			
		||||
 | 
			
		||||
    /** 路由地址 */
 | 
			
		||||
    private String path;
 | 
			
		||||
 | 
			
		||||
    /** 组件路径 */
 | 
			
		||||
    private String component;
 | 
			
		||||
 | 
			
		||||
    /** 路由参数 */
 | 
			
		||||
    private String query;
 | 
			
		||||
 | 
			
		||||
    /** 路由名称,默认和路由地址相同的驼峰格式(注意:因为vue3版本的router会删除名称相同路由,为避免名字的冲突,特殊情况可以自定义) */
 | 
			
		||||
    private String routeName;
 | 
			
		||||
 | 
			
		||||
    /** 是否为外链(0是 1否) */
 | 
			
		||||
    private String isFrame;
 | 
			
		||||
 | 
			
		||||
    /** 是否缓存(0缓存 1不缓存) */
 | 
			
		||||
    private String isCache;
 | 
			
		||||
 | 
			
		||||
    /** 类型(M目录 C菜单 F按钮) */
 | 
			
		||||
    private String menuType;
 | 
			
		||||
 | 
			
		||||
    /** 显示状态(0显示 1隐藏) */
 | 
			
		||||
    private String visible;
 | 
			
		||||
 | 
			
		||||
    /** 菜单状态(0正常 1停用) */
 | 
			
		||||
    private String status;
 | 
			
		||||
 | 
			
		||||
    /** 权限字符串 */
 | 
			
		||||
    private String perms;
 | 
			
		||||
 | 
			
		||||
    /** 菜单图标 */
 | 
			
		||||
    private String icon;
 | 
			
		||||
 | 
			
		||||
    /** 子菜单 */
 | 
			
		||||
    private List<SysMenu> children = new ArrayList<SysMenu>();
 | 
			
		||||
 | 
			
		||||
    public Long getMenuId()
 | 
			
		||||
    {
 | 
			
		||||
        return menuId;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setMenuId(Long menuId)
 | 
			
		||||
    {
 | 
			
		||||
        this.menuId = menuId;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @NotBlank(message = "菜单名称不能为空")
 | 
			
		||||
    @Size(min = 0, max = 50, message = "菜单名称长度不能超过50个字符")
 | 
			
		||||
    public String getMenuName()
 | 
			
		||||
    {
 | 
			
		||||
        return menuName;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setMenuName(String menuName)
 | 
			
		||||
    {
 | 
			
		||||
        this.menuName = menuName;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getParentName()
 | 
			
		||||
    {
 | 
			
		||||
        return parentName;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setParentName(String parentName)
 | 
			
		||||
    {
 | 
			
		||||
        this.parentName = parentName;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Long getParentId()
 | 
			
		||||
    {
 | 
			
		||||
        return parentId;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setParentId(Long parentId)
 | 
			
		||||
    {
 | 
			
		||||
        this.parentId = parentId;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @NotNull(message = "显示顺序不能为空")
 | 
			
		||||
    public Integer getOrderNum()
 | 
			
		||||
    {
 | 
			
		||||
        return orderNum;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setOrderNum(Integer orderNum)
 | 
			
		||||
    {
 | 
			
		||||
        this.orderNum = orderNum;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Size(min = 0, max = 200, message = "路由地址不能超过200个字符")
 | 
			
		||||
    public String getPath()
 | 
			
		||||
    {
 | 
			
		||||
        return path;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setPath(String path)
 | 
			
		||||
    {
 | 
			
		||||
        this.path = path;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Size(min = 0, max = 200, message = "组件路径不能超过255个字符")
 | 
			
		||||
    public String getComponent()
 | 
			
		||||
    {
 | 
			
		||||
        return component;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setComponent(String component)
 | 
			
		||||
    {
 | 
			
		||||
        this.component = component;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getQuery()
 | 
			
		||||
    {
 | 
			
		||||
        return query;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setQuery(String query)
 | 
			
		||||
    {
 | 
			
		||||
        this.query = query;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getRouteName()
 | 
			
		||||
    {
 | 
			
		||||
        return routeName;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setRouteName(String routeName)
 | 
			
		||||
    {
 | 
			
		||||
        this.routeName = routeName;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getIsFrame()
 | 
			
		||||
    {
 | 
			
		||||
        return isFrame;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setIsFrame(String isFrame)
 | 
			
		||||
    {
 | 
			
		||||
        this.isFrame = isFrame;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getIsCache()
 | 
			
		||||
    {
 | 
			
		||||
        return isCache;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setIsCache(String isCache)
 | 
			
		||||
    {
 | 
			
		||||
        this.isCache = isCache;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @NotBlank(message = "菜单类型不能为空")
 | 
			
		||||
    public String getMenuType()
 | 
			
		||||
    {
 | 
			
		||||
        return menuType;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setMenuType(String menuType)
 | 
			
		||||
    {
 | 
			
		||||
        this.menuType = menuType;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getVisible()
 | 
			
		||||
    {
 | 
			
		||||
        return visible;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setVisible(String visible)
 | 
			
		||||
    {
 | 
			
		||||
        this.visible = visible;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getStatus()
 | 
			
		||||
    {
 | 
			
		||||
        return status;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setStatus(String status)
 | 
			
		||||
    {
 | 
			
		||||
        this.status = status;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Size(min = 0, max = 100, message = "权限标识长度不能超过100个字符")
 | 
			
		||||
    public String getPerms()
 | 
			
		||||
    {
 | 
			
		||||
        return perms;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setPerms(String perms)
 | 
			
		||||
    {
 | 
			
		||||
        this.perms = perms;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getIcon()
 | 
			
		||||
    {
 | 
			
		||||
        return icon;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setIcon(String icon)
 | 
			
		||||
    {
 | 
			
		||||
        this.icon = icon;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public List<SysMenu> getChildren()
 | 
			
		||||
    {
 | 
			
		||||
        return children;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setChildren(List<SysMenu> children)
 | 
			
		||||
    {
 | 
			
		||||
        this.children = children;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public String toString() {
 | 
			
		||||
        return new ToStringBuilder(this,ToStringStyle.MULTI_LINE_STYLE)
 | 
			
		||||
            .append("menuId", getMenuId())
 | 
			
		||||
            .append("menuName", getMenuName())
 | 
			
		||||
            .append("parentId", getParentId())
 | 
			
		||||
            .append("orderNum", getOrderNum())
 | 
			
		||||
            .append("path", getPath())
 | 
			
		||||
            .append("component", getComponent())
 | 
			
		||||
            .append("query", getQuery())
 | 
			
		||||
            .append("routeName", getRouteName())
 | 
			
		||||
            .append("isFrame", getIsFrame())
 | 
			
		||||
            .append("IsCache", getIsCache())
 | 
			
		||||
            .append("menuType", getMenuType())
 | 
			
		||||
            .append("visible", getVisible())
 | 
			
		||||
            .append("status ", getStatus())
 | 
			
		||||
            .append("perms", getPerms())
 | 
			
		||||
            .append("icon", getIcon())
 | 
			
		||||
            .append("createBy", getCreateBy())
 | 
			
		||||
            .append("createTime", getCreateTime())
 | 
			
		||||
            .append("updateBy", getUpdateBy())
 | 
			
		||||
            .append("updateTime", getUpdateTime())
 | 
			
		||||
            .append("remark", getRemark())
 | 
			
		||||
            .toString();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,241 +1,241 @@
 | 
			
		|||
package com.tcctlo.common.core.domain.entity;
 | 
			
		||||
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
import javax.validation.constraints.NotBlank;
 | 
			
		||||
import javax.validation.constraints.NotNull;
 | 
			
		||||
import javax.validation.constraints.Size;
 | 
			
		||||
import org.apache.commons.lang3.builder.ToStringBuilder;
 | 
			
		||||
import org.apache.commons.lang3.builder.ToStringStyle;
 | 
			
		||||
import com.tcctlo.common.annotation.Excel;
 | 
			
		||||
import com.tcctlo.common.annotation.Excel.ColumnType;
 | 
			
		||||
import com.tcctlo.common.core.domain.BaseEntity;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 角色表 sys_role
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
public class SysRole extends BaseEntity
 | 
			
		||||
{
 | 
			
		||||
    private static final long serialVersionUID = 1L;
 | 
			
		||||
 | 
			
		||||
    /** 角色ID */
 | 
			
		||||
    @Excel(name = "角色序号", cellType = ColumnType.NUMERIC)
 | 
			
		||||
    private Long roleId;
 | 
			
		||||
 | 
			
		||||
    /** 角色名称 */
 | 
			
		||||
    @Excel(name = "角色名称")
 | 
			
		||||
    private String roleName;
 | 
			
		||||
 | 
			
		||||
    /** 角色权限 */
 | 
			
		||||
    @Excel(name = "角色权限")
 | 
			
		||||
    private String roleKey;
 | 
			
		||||
 | 
			
		||||
    /** 角色排序 */
 | 
			
		||||
    @Excel(name = "角色排序")
 | 
			
		||||
    private Integer roleSort;
 | 
			
		||||
 | 
			
		||||
    /** 数据范围(1:所有数据权限;2:自定义数据权限;3:本部门数据权限;4:本部门及以下数据权限;5:仅本人数据权限) */
 | 
			
		||||
    @Excel(name = "数据范围", readConverterExp = "1=所有数据权限,2=自定义数据权限,3=本部门数据权限,4=本部门及以下数据权限,5=仅本人数据权限")
 | 
			
		||||
    private String dataScope;
 | 
			
		||||
 | 
			
		||||
    /** 菜单树选择项是否关联显示( 0:父子不互相关联显示 1:父子互相关联显示) */
 | 
			
		||||
    private boolean menuCheckStrictly;
 | 
			
		||||
 | 
			
		||||
    /** 部门树选择项是否关联显示(0:父子不互相关联显示 1:父子互相关联显示 ) */
 | 
			
		||||
    private boolean deptCheckStrictly;
 | 
			
		||||
 | 
			
		||||
    /** 角色状态(0正常 1停用) */
 | 
			
		||||
    @Excel(name = "角色状态", readConverterExp = "0=正常,1=停用")
 | 
			
		||||
    private String status;
 | 
			
		||||
 | 
			
		||||
    /** 删除标志(0代表存在 2代表删除) */
 | 
			
		||||
    private String delFlag;
 | 
			
		||||
 | 
			
		||||
    /** 用户是否存在此角色标识 默认不存在 */
 | 
			
		||||
    private boolean flag = false;
 | 
			
		||||
 | 
			
		||||
    /** 菜单组 */
 | 
			
		||||
    private Long[] menuIds;
 | 
			
		||||
 | 
			
		||||
    /** 部门组(数据权限) */
 | 
			
		||||
    private Long[] deptIds;
 | 
			
		||||
 | 
			
		||||
    /** 角色菜单权限 */
 | 
			
		||||
    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();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
package com.ruoyi.common.core.domain.entity;
 | 
			
		||||
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
import javax.validation.constraints.NotBlank;
 | 
			
		||||
import javax.validation.constraints.NotNull;
 | 
			
		||||
import javax.validation.constraints.Size;
 | 
			
		||||
import org.apache.commons.lang3.builder.ToStringBuilder;
 | 
			
		||||
import org.apache.commons.lang3.builder.ToStringStyle;
 | 
			
		||||
import com.ruoyi.common.annotation.Excel;
 | 
			
		||||
import com.ruoyi.common.annotation.Excel.ColumnType;
 | 
			
		||||
import com.ruoyi.common.core.domain.BaseEntity;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 角色表 sys_role
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
public class SysRole extends BaseEntity
 | 
			
		||||
{
 | 
			
		||||
    private static final long serialVersionUID = 1L;
 | 
			
		||||
 | 
			
		||||
    /** 角色ID */
 | 
			
		||||
    @Excel(name = "角色序号", cellType = ColumnType.NUMERIC)
 | 
			
		||||
    private Long roleId;
 | 
			
		||||
 | 
			
		||||
    /** 角色名称 */
 | 
			
		||||
    @Excel(name = "角色名称")
 | 
			
		||||
    private String roleName;
 | 
			
		||||
 | 
			
		||||
    /** 角色权限 */
 | 
			
		||||
    @Excel(name = "角色权限")
 | 
			
		||||
    private String roleKey;
 | 
			
		||||
 | 
			
		||||
    /** 角色排序 */
 | 
			
		||||
    @Excel(name = "角色排序")
 | 
			
		||||
    private Integer roleSort;
 | 
			
		||||
 | 
			
		||||
    /** 数据范围(1:所有数据权限;2:自定义数据权限;3:本部门数据权限;4:本部门及以下数据权限;5:仅本人数据权限) */
 | 
			
		||||
    @Excel(name = "数据范围", readConverterExp = "1=所有数据权限,2=自定义数据权限,3=本部门数据权限,4=本部门及以下数据权限,5=仅本人数据权限")
 | 
			
		||||
    private String dataScope;
 | 
			
		||||
 | 
			
		||||
    /** 菜单树选择项是否关联显示( 0:父子不互相关联显示 1:父子互相关联显示) */
 | 
			
		||||
    private boolean menuCheckStrictly;
 | 
			
		||||
 | 
			
		||||
    /** 部门树选择项是否关联显示(0:父子不互相关联显示 1:父子互相关联显示 ) */
 | 
			
		||||
    private boolean deptCheckStrictly;
 | 
			
		||||
 | 
			
		||||
    /** 角色状态(0正常 1停用) */
 | 
			
		||||
    @Excel(name = "角色状态", readConverterExp = "0=正常,1=停用")
 | 
			
		||||
    private String status;
 | 
			
		||||
 | 
			
		||||
    /** 删除标志(0代表存在 2代表删除) */
 | 
			
		||||
    private String delFlag;
 | 
			
		||||
 | 
			
		||||
    /** 用户是否存在此角色标识 默认不存在 */
 | 
			
		||||
    private boolean flag = false;
 | 
			
		||||
 | 
			
		||||
    /** 菜单组 */
 | 
			
		||||
    private Long[] menuIds;
 | 
			
		||||
 | 
			
		||||
    /** 部门组(数据权限) */
 | 
			
		||||
    private Long[] deptIds;
 | 
			
		||||
 | 
			
		||||
    /** 角色菜单权限 */
 | 
			
		||||
    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();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,324 +1,324 @@
 | 
			
		|||
package com.tcctlo.common.core.domain.entity;
 | 
			
		||||
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import javax.validation.constraints.*;
 | 
			
		||||
import org.apache.commons.lang3.builder.ToStringBuilder;
 | 
			
		||||
import org.apache.commons.lang3.builder.ToStringStyle;
 | 
			
		||||
import com.tcctlo.common.annotation.Excel;
 | 
			
		||||
import com.tcctlo.common.annotation.Excel.ColumnType;
 | 
			
		||||
import com.tcctlo.common.annotation.Excel.Type;
 | 
			
		||||
import com.tcctlo.common.annotation.Excels;
 | 
			
		||||
import com.tcctlo.common.core.domain.BaseEntity;
 | 
			
		||||
import com.tcctlo.common.xss.Xss;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 用户对象 sys_user
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
public class SysUser extends BaseEntity
 | 
			
		||||
{
 | 
			
		||||
    private static final long serialVersionUID = 1L;
 | 
			
		||||
 | 
			
		||||
    /** 用户ID */
 | 
			
		||||
    @Excel(name = "用户序号", type = Type.EXPORT, cellType = ColumnType.NUMERIC, prompt = "用户编号")
 | 
			
		||||
    private Long userId;
 | 
			
		||||
 | 
			
		||||
    /** 部门ID */
 | 
			
		||||
    @Excel(name = "部门编号", type = Type.IMPORT)
 | 
			
		||||
    private Long deptId;
 | 
			
		||||
 | 
			
		||||
    /** 用户账号 */
 | 
			
		||||
    @Excel(name = "登录名称")
 | 
			
		||||
    private String userName;
 | 
			
		||||
 | 
			
		||||
    /** 用户昵称 */
 | 
			
		||||
    @Excel(name = "用户名称")
 | 
			
		||||
    private String nickName;
 | 
			
		||||
 | 
			
		||||
    /** 用户邮箱 */
 | 
			
		||||
    @Excel(name = "用户邮箱")
 | 
			
		||||
    private String email;
 | 
			
		||||
 | 
			
		||||
    /** 手机号码 */
 | 
			
		||||
    @Excel(name = "手机号码", cellType = ColumnType.TEXT)
 | 
			
		||||
    private String phonenumber;
 | 
			
		||||
 | 
			
		||||
    /** 用户性别 */
 | 
			
		||||
    @Excel(name = "用户性别", readConverterExp = "0=男,1=女,2=未知")
 | 
			
		||||
    private String sex;
 | 
			
		||||
 | 
			
		||||
    /** 用户头像 */
 | 
			
		||||
    private String avatar;
 | 
			
		||||
 | 
			
		||||
    /** 密码 */
 | 
			
		||||
    private String password;
 | 
			
		||||
 | 
			
		||||
    /** 帐号状态(0正常 1停用) */
 | 
			
		||||
    @Excel(name = "帐号状态", readConverterExp = "0=正常,1=停用")
 | 
			
		||||
    private String status;
 | 
			
		||||
 | 
			
		||||
    /** 删除标志(0代表存在 2代表删除) */
 | 
			
		||||
    private String delFlag;
 | 
			
		||||
 | 
			
		||||
    /** 最后登录IP */
 | 
			
		||||
    @Excel(name = "最后登录IP", type = Type.EXPORT)
 | 
			
		||||
    private String loginIp;
 | 
			
		||||
 | 
			
		||||
    /** 最后登录时间 */
 | 
			
		||||
    @Excel(name = "最后登录时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss", type = Type.EXPORT)
 | 
			
		||||
    private Date loginDate;
 | 
			
		||||
 | 
			
		||||
    /** 部门对象 */
 | 
			
		||||
    @Excels({
 | 
			
		||||
        @Excel(name = "部门名称", targetAttr = "deptName", type = Type.EXPORT),
 | 
			
		||||
        @Excel(name = "部门负责人", targetAttr = "leader", type = Type.EXPORT)
 | 
			
		||||
    })
 | 
			
		||||
    private SysDept dept;
 | 
			
		||||
 | 
			
		||||
    /** 角色对象 */
 | 
			
		||||
    private List<SysRole> roles;
 | 
			
		||||
 | 
			
		||||
    /** 角色组 */
 | 
			
		||||
    private Long[] roleIds;
 | 
			
		||||
 | 
			
		||||
    /** 岗位组 */
 | 
			
		||||
    private Long[] postIds;
 | 
			
		||||
 | 
			
		||||
    /** 角色ID */
 | 
			
		||||
    private Long roleId;
 | 
			
		||||
 | 
			
		||||
    public SysUser()
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public SysUser(Long userId)
 | 
			
		||||
    {
 | 
			
		||||
        this.userId = userId;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    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 = "用户账号不能包含脚本字符")
 | 
			
		||||
    @NotBlank(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();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
package com.ruoyi.common.core.domain.entity;
 | 
			
		||||
 | 
			
		||||
import java.util.Date;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import javax.validation.constraints.*;
 | 
			
		||||
import org.apache.commons.lang3.builder.ToStringBuilder;
 | 
			
		||||
import org.apache.commons.lang3.builder.ToStringStyle;
 | 
			
		||||
import com.ruoyi.common.annotation.Excel;
 | 
			
		||||
import com.ruoyi.common.annotation.Excel.ColumnType;
 | 
			
		||||
import com.ruoyi.common.annotation.Excel.Type;
 | 
			
		||||
import com.ruoyi.common.annotation.Excels;
 | 
			
		||||
import com.ruoyi.common.core.domain.BaseEntity;
 | 
			
		||||
import com.ruoyi.common.xss.Xss;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 用户对象 sys_user
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
public class SysUser extends BaseEntity
 | 
			
		||||
{
 | 
			
		||||
    private static final long serialVersionUID = 1L;
 | 
			
		||||
 | 
			
		||||
    /** 用户ID */
 | 
			
		||||
    @Excel(name = "用户序号", type = Type.EXPORT, cellType = ColumnType.NUMERIC, prompt = "用户编号")
 | 
			
		||||
    private Long userId;
 | 
			
		||||
 | 
			
		||||
    /** 部门ID */
 | 
			
		||||
    @Excel(name = "部门编号", type = Type.IMPORT)
 | 
			
		||||
    private Long deptId;
 | 
			
		||||
 | 
			
		||||
    /** 用户账号 */
 | 
			
		||||
    @Excel(name = "登录名称")
 | 
			
		||||
    private String userName;
 | 
			
		||||
 | 
			
		||||
    /** 用户昵称 */
 | 
			
		||||
    @Excel(name = "用户名称")
 | 
			
		||||
    private String nickName;
 | 
			
		||||
 | 
			
		||||
    /** 用户邮箱 */
 | 
			
		||||
    @Excel(name = "用户邮箱")
 | 
			
		||||
    private String email;
 | 
			
		||||
 | 
			
		||||
    /** 手机号码 */
 | 
			
		||||
    @Excel(name = "手机号码", cellType = ColumnType.TEXT)
 | 
			
		||||
    private String phonenumber;
 | 
			
		||||
 | 
			
		||||
    /** 用户性别 */
 | 
			
		||||
    @Excel(name = "用户性别", readConverterExp = "0=男,1=女,2=未知")
 | 
			
		||||
    private String sex;
 | 
			
		||||
 | 
			
		||||
    /** 用户头像 */
 | 
			
		||||
    private String avatar;
 | 
			
		||||
 | 
			
		||||
    /** 密码 */
 | 
			
		||||
    private String password;
 | 
			
		||||
 | 
			
		||||
    /** 帐号状态(0正常 1停用) */
 | 
			
		||||
    @Excel(name = "帐号状态", readConverterExp = "0=正常,1=停用")
 | 
			
		||||
    private String status;
 | 
			
		||||
 | 
			
		||||
    /** 删除标志(0代表存在 2代表删除) */
 | 
			
		||||
    private String delFlag;
 | 
			
		||||
 | 
			
		||||
    /** 最后登录IP */
 | 
			
		||||
    @Excel(name = "最后登录IP", type = Type.EXPORT)
 | 
			
		||||
    private String loginIp;
 | 
			
		||||
 | 
			
		||||
    /** 最后登录时间 */
 | 
			
		||||
    @Excel(name = "最后登录时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss", type = Type.EXPORT)
 | 
			
		||||
    private Date loginDate;
 | 
			
		||||
 | 
			
		||||
    /** 部门对象 */
 | 
			
		||||
    @Excels({
 | 
			
		||||
        @Excel(name = "部门名称", targetAttr = "deptName", type = Type.EXPORT),
 | 
			
		||||
        @Excel(name = "部门负责人", targetAttr = "leader", type = Type.EXPORT)
 | 
			
		||||
    })
 | 
			
		||||
    private SysDept dept;
 | 
			
		||||
 | 
			
		||||
    /** 角色对象 */
 | 
			
		||||
    private List<SysRole> roles;
 | 
			
		||||
 | 
			
		||||
    /** 角色组 */
 | 
			
		||||
    private Long[] roleIds;
 | 
			
		||||
 | 
			
		||||
    /** 岗位组 */
 | 
			
		||||
    private Long[] postIds;
 | 
			
		||||
 | 
			
		||||
    /** 角色ID */
 | 
			
		||||
    private Long roleId;
 | 
			
		||||
 | 
			
		||||
    public SysUser()
 | 
			
		||||
    {
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public SysUser(Long userId)
 | 
			
		||||
    {
 | 
			
		||||
        this.userId = userId;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    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 = "用户账号不能包含脚本字符")
 | 
			
		||||
    @NotBlank(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();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,69 +1,69 @@
 | 
			
		|||
package com.tcctlo.common.core.domain.model;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 用户登录对象
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
public class LoginBody
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * 用户名
 | 
			
		||||
     */
 | 
			
		||||
    private String username;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 用户密码
 | 
			
		||||
     */
 | 
			
		||||
    private String password;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 验证码
 | 
			
		||||
     */
 | 
			
		||||
    private String code;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 唯一标识
 | 
			
		||||
     */
 | 
			
		||||
    private String uuid;
 | 
			
		||||
 | 
			
		||||
    public String getUsername()
 | 
			
		||||
    {
 | 
			
		||||
        return username;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setUsername(String username)
 | 
			
		||||
    {
 | 
			
		||||
        this.username = username;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getPassword()
 | 
			
		||||
    {
 | 
			
		||||
        return password;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setPassword(String password)
 | 
			
		||||
    {
 | 
			
		||||
        this.password = password;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getCode()
 | 
			
		||||
    {
 | 
			
		||||
        return code;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setCode(String code)
 | 
			
		||||
    {
 | 
			
		||||
        this.code = code;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getUuid()
 | 
			
		||||
    {
 | 
			
		||||
        return uuid;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setUuid(String uuid)
 | 
			
		||||
    {
 | 
			
		||||
        this.uuid = uuid;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
package com.ruoyi.common.core.domain.model;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 用户登录对象
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
public class LoginBody
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * 用户名
 | 
			
		||||
     */
 | 
			
		||||
    private String username;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 用户密码
 | 
			
		||||
     */
 | 
			
		||||
    private String password;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 验证码
 | 
			
		||||
     */
 | 
			
		||||
    private String code;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 唯一标识
 | 
			
		||||
     */
 | 
			
		||||
    private String uuid;
 | 
			
		||||
 | 
			
		||||
    public String getUsername()
 | 
			
		||||
    {
 | 
			
		||||
        return username;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setUsername(String username)
 | 
			
		||||
    {
 | 
			
		||||
        this.username = username;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getPassword()
 | 
			
		||||
    {
 | 
			
		||||
        return password;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setPassword(String password)
 | 
			
		||||
    {
 | 
			
		||||
        this.password = password;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getCode()
 | 
			
		||||
    {
 | 
			
		||||
        return code;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setCode(String code)
 | 
			
		||||
    {
 | 
			
		||||
        this.code = code;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getUuid()
 | 
			
		||||
    {
 | 
			
		||||
        return uuid;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setUuid(String uuid)
 | 
			
		||||
    {
 | 
			
		||||
        this.uuid = uuid;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,266 +1,266 @@
 | 
			
		|||
package com.tcctlo.common.core.domain.model;
 | 
			
		||||
 | 
			
		||||
import com.alibaba.fastjson2.annotation.JSONField;
 | 
			
		||||
import com.tcctlo.common.core.domain.entity.SysUser;
 | 
			
		||||
import org.springframework.security.core.GrantedAuthority;
 | 
			
		||||
import org.springframework.security.core.userdetails.UserDetails;
 | 
			
		||||
import java.util.Collection;
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 登录用户身份权限
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
public class LoginUser implements UserDetails
 | 
			
		||||
{
 | 
			
		||||
    private static final long serialVersionUID = 1L;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 用户ID
 | 
			
		||||
     */
 | 
			
		||||
    private Long userId;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 部门ID
 | 
			
		||||
     */
 | 
			
		||||
    private Long deptId;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 用户唯一标识
 | 
			
		||||
     */
 | 
			
		||||
    private String token;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 登录时间
 | 
			
		||||
     */
 | 
			
		||||
    private Long loginTime;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 过期时间
 | 
			
		||||
     */
 | 
			
		||||
    private Long expireTime;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 登录IP地址
 | 
			
		||||
     */
 | 
			
		||||
    private String ipaddr;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 登录地点
 | 
			
		||||
     */
 | 
			
		||||
    private String loginLocation;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 浏览器类型
 | 
			
		||||
     */
 | 
			
		||||
    private String browser;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 操作系统
 | 
			
		||||
     */
 | 
			
		||||
    private String os;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 权限列表
 | 
			
		||||
     */
 | 
			
		||||
    private Set<String> permissions;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 用户信息
 | 
			
		||||
     */
 | 
			
		||||
    private SysUser user;
 | 
			
		||||
 | 
			
		||||
    public LoginUser()
 | 
			
		||||
    {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public LoginUser(SysUser user, Set<String> permissions)
 | 
			
		||||
    {
 | 
			
		||||
        this.user = user;
 | 
			
		||||
        this.permissions = permissions;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public LoginUser(Long userId, Long deptId, SysUser user, Set<String> permissions)
 | 
			
		||||
    {
 | 
			
		||||
        this.userId = userId;
 | 
			
		||||
        this.deptId = deptId;
 | 
			
		||||
        this.user = user;
 | 
			
		||||
        this.permissions = permissions;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Long getUserId()
 | 
			
		||||
    {
 | 
			
		||||
        return userId;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setUserId(Long userId)
 | 
			
		||||
    {
 | 
			
		||||
        this.userId = userId;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Long getDeptId()
 | 
			
		||||
    {
 | 
			
		||||
        return deptId;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setDeptId(Long deptId)
 | 
			
		||||
    {
 | 
			
		||||
        this.deptId = deptId;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getToken()
 | 
			
		||||
    {
 | 
			
		||||
        return token;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setToken(String token)
 | 
			
		||||
    {
 | 
			
		||||
        this.token = token;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @JSONField(serialize = false)
 | 
			
		||||
    @Override
 | 
			
		||||
    public String getPassword()
 | 
			
		||||
    {
 | 
			
		||||
        return user.getPassword();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public String getUsername()
 | 
			
		||||
    {
 | 
			
		||||
        return user.getUserName();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 账户是否未过期,过期无法验证
 | 
			
		||||
     */
 | 
			
		||||
    @JSONField(serialize = false)
 | 
			
		||||
    @Override
 | 
			
		||||
    public boolean isAccountNonExpired()
 | 
			
		||||
    {
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 指定用户是否解锁,锁定的用户无法进行身份验证
 | 
			
		||||
     * 
 | 
			
		||||
     * @return
 | 
			
		||||
     */
 | 
			
		||||
    @JSONField(serialize = false)
 | 
			
		||||
    @Override
 | 
			
		||||
    public boolean isAccountNonLocked()
 | 
			
		||||
    {
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 指示是否已过期的用户的凭据(密码),过期的凭据防止认证
 | 
			
		||||
     * 
 | 
			
		||||
     * @return
 | 
			
		||||
     */
 | 
			
		||||
    @JSONField(serialize = false)
 | 
			
		||||
    @Override
 | 
			
		||||
    public boolean isCredentialsNonExpired()
 | 
			
		||||
    {
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 是否可用 ,禁用的用户不能身份验证
 | 
			
		||||
     * 
 | 
			
		||||
     * @return
 | 
			
		||||
     */
 | 
			
		||||
    @JSONField(serialize = false)
 | 
			
		||||
    @Override
 | 
			
		||||
    public boolean isEnabled()
 | 
			
		||||
    {
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Long getLoginTime()
 | 
			
		||||
    {
 | 
			
		||||
        return loginTime;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setLoginTime(Long loginTime)
 | 
			
		||||
    {
 | 
			
		||||
        this.loginTime = loginTime;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getIpaddr()
 | 
			
		||||
    {
 | 
			
		||||
        return ipaddr;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setIpaddr(String ipaddr)
 | 
			
		||||
    {
 | 
			
		||||
        this.ipaddr = ipaddr;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getLoginLocation()
 | 
			
		||||
    {
 | 
			
		||||
        return loginLocation;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setLoginLocation(String loginLocation)
 | 
			
		||||
    {
 | 
			
		||||
        this.loginLocation = loginLocation;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getBrowser()
 | 
			
		||||
    {
 | 
			
		||||
        return browser;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setBrowser(String browser)
 | 
			
		||||
    {
 | 
			
		||||
        this.browser = browser;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getOs()
 | 
			
		||||
    {
 | 
			
		||||
        return os;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setOs(String os)
 | 
			
		||||
    {
 | 
			
		||||
        this.os = os;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Long getExpireTime()
 | 
			
		||||
    {
 | 
			
		||||
        return expireTime;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setExpireTime(Long expireTime)
 | 
			
		||||
    {
 | 
			
		||||
        this.expireTime = expireTime;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Set<String> getPermissions()
 | 
			
		||||
    {
 | 
			
		||||
        return permissions;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setPermissions(Set<String> permissions)
 | 
			
		||||
    {
 | 
			
		||||
        this.permissions = permissions;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public SysUser getUser()
 | 
			
		||||
    {
 | 
			
		||||
        return user;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setUser(SysUser user)
 | 
			
		||||
    {
 | 
			
		||||
        this.user = user;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public Collection<? extends GrantedAuthority> getAuthorities()
 | 
			
		||||
    {
 | 
			
		||||
        return null;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
package com.ruoyi.common.core.domain.model;
 | 
			
		||||
 | 
			
		||||
import com.alibaba.fastjson2.annotation.JSONField;
 | 
			
		||||
import com.ruoyi.common.core.domain.entity.SysUser;
 | 
			
		||||
import org.springframework.security.core.GrantedAuthority;
 | 
			
		||||
import org.springframework.security.core.userdetails.UserDetails;
 | 
			
		||||
import java.util.Collection;
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 登录用户身份权限
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
public class LoginUser implements UserDetails
 | 
			
		||||
{
 | 
			
		||||
    private static final long serialVersionUID = 1L;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 用户ID
 | 
			
		||||
     */
 | 
			
		||||
    private Long userId;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 部门ID
 | 
			
		||||
     */
 | 
			
		||||
    private Long deptId;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 用户唯一标识
 | 
			
		||||
     */
 | 
			
		||||
    private String token;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 登录时间
 | 
			
		||||
     */
 | 
			
		||||
    private Long loginTime;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 过期时间
 | 
			
		||||
     */
 | 
			
		||||
    private Long expireTime;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 登录IP地址
 | 
			
		||||
     */
 | 
			
		||||
    private String ipaddr;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 登录地点
 | 
			
		||||
     */
 | 
			
		||||
    private String loginLocation;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 浏览器类型
 | 
			
		||||
     */
 | 
			
		||||
    private String browser;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 操作系统
 | 
			
		||||
     */
 | 
			
		||||
    private String os;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 权限列表
 | 
			
		||||
     */
 | 
			
		||||
    private Set<String> permissions;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 用户信息
 | 
			
		||||
     */
 | 
			
		||||
    private SysUser user;
 | 
			
		||||
 | 
			
		||||
    public LoginUser()
 | 
			
		||||
    {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public LoginUser(SysUser user, Set<String> permissions)
 | 
			
		||||
    {
 | 
			
		||||
        this.user = user;
 | 
			
		||||
        this.permissions = permissions;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public LoginUser(Long userId, Long deptId, SysUser user, Set<String> permissions)
 | 
			
		||||
    {
 | 
			
		||||
        this.userId = userId;
 | 
			
		||||
        this.deptId = deptId;
 | 
			
		||||
        this.user = user;
 | 
			
		||||
        this.permissions = permissions;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Long getUserId()
 | 
			
		||||
    {
 | 
			
		||||
        return userId;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setUserId(Long userId)
 | 
			
		||||
    {
 | 
			
		||||
        this.userId = userId;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Long getDeptId()
 | 
			
		||||
    {
 | 
			
		||||
        return deptId;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setDeptId(Long deptId)
 | 
			
		||||
    {
 | 
			
		||||
        this.deptId = deptId;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getToken()
 | 
			
		||||
    {
 | 
			
		||||
        return token;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setToken(String token)
 | 
			
		||||
    {
 | 
			
		||||
        this.token = token;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @JSONField(serialize = false)
 | 
			
		||||
    @Override
 | 
			
		||||
    public String getPassword()
 | 
			
		||||
    {
 | 
			
		||||
        return user.getPassword();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public String getUsername()
 | 
			
		||||
    {
 | 
			
		||||
        return user.getUserName();
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 账户是否未过期,过期无法验证
 | 
			
		||||
     */
 | 
			
		||||
    @JSONField(serialize = false)
 | 
			
		||||
    @Override
 | 
			
		||||
    public boolean isAccountNonExpired()
 | 
			
		||||
    {
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 指定用户是否解锁,锁定的用户无法进行身份验证
 | 
			
		||||
     * 
 | 
			
		||||
     * @return
 | 
			
		||||
     */
 | 
			
		||||
    @JSONField(serialize = false)
 | 
			
		||||
    @Override
 | 
			
		||||
    public boolean isAccountNonLocked()
 | 
			
		||||
    {
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 指示是否已过期的用户的凭据(密码),过期的凭据防止认证
 | 
			
		||||
     * 
 | 
			
		||||
     * @return
 | 
			
		||||
     */
 | 
			
		||||
    @JSONField(serialize = false)
 | 
			
		||||
    @Override
 | 
			
		||||
    public boolean isCredentialsNonExpired()
 | 
			
		||||
    {
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 是否可用 ,禁用的用户不能身份验证
 | 
			
		||||
     * 
 | 
			
		||||
     * @return
 | 
			
		||||
     */
 | 
			
		||||
    @JSONField(serialize = false)
 | 
			
		||||
    @Override
 | 
			
		||||
    public boolean isEnabled()
 | 
			
		||||
    {
 | 
			
		||||
        return true;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Long getLoginTime()
 | 
			
		||||
    {
 | 
			
		||||
        return loginTime;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setLoginTime(Long loginTime)
 | 
			
		||||
    {
 | 
			
		||||
        this.loginTime = loginTime;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getIpaddr()
 | 
			
		||||
    {
 | 
			
		||||
        return ipaddr;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setIpaddr(String ipaddr)
 | 
			
		||||
    {
 | 
			
		||||
        this.ipaddr = ipaddr;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getLoginLocation()
 | 
			
		||||
    {
 | 
			
		||||
        return loginLocation;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setLoginLocation(String loginLocation)
 | 
			
		||||
    {
 | 
			
		||||
        this.loginLocation = loginLocation;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getBrowser()
 | 
			
		||||
    {
 | 
			
		||||
        return browser;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setBrowser(String browser)
 | 
			
		||||
    {
 | 
			
		||||
        this.browser = browser;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getOs()
 | 
			
		||||
    {
 | 
			
		||||
        return os;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setOs(String os)
 | 
			
		||||
    {
 | 
			
		||||
        this.os = os;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Long getExpireTime()
 | 
			
		||||
    {
 | 
			
		||||
        return expireTime;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setExpireTime(Long expireTime)
 | 
			
		||||
    {
 | 
			
		||||
        this.expireTime = expireTime;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Set<String> getPermissions()
 | 
			
		||||
    {
 | 
			
		||||
        return permissions;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setPermissions(Set<String> permissions)
 | 
			
		||||
    {
 | 
			
		||||
        this.permissions = permissions;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public SysUser getUser()
 | 
			
		||||
    {
 | 
			
		||||
        return user;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setUser(SysUser user)
 | 
			
		||||
    {
 | 
			
		||||
        this.user = user;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public Collection<? extends GrantedAuthority> getAuthorities()
 | 
			
		||||
    {
 | 
			
		||||
        return null;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,11 +1,11 @@
 | 
			
		|||
package com.tcctlo.common.core.domain.model;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 用户注册对象
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
public class RegisterBody extends LoginBody
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
package com.ruoyi.common.core.domain.model;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 用户注册对象
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
public class RegisterBody extends LoginBody
 | 
			
		||||
{
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,6 +1,6 @@
 | 
			
		|||
package com.tcctlo.common.core.page;
 | 
			
		||||
package com.ruoyi.common.core.page;
 | 
			
		||||
 | 
			
		||||
import com.tcctlo.common.utils.StringUtils;
 | 
			
		||||
import com.ruoyi.common.utils.StringUtils;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 分页数据
 | 
			
		||||
| 
						 | 
				
			
			@ -1,85 +1,85 @@
 | 
			
		|||
package com.tcctlo.common.core.page;
 | 
			
		||||
 | 
			
		||||
import java.io.Serializable;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 表格分页数据对象
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
public class TableDataInfo implements Serializable
 | 
			
		||||
{
 | 
			
		||||
    private static final long serialVersionUID = 1L;
 | 
			
		||||
 | 
			
		||||
    /** 总记录数 */
 | 
			
		||||
    private long total;
 | 
			
		||||
 | 
			
		||||
    /** 列表数据 */
 | 
			
		||||
    private List<?> rows;
 | 
			
		||||
 | 
			
		||||
    /** 消息状态码 */
 | 
			
		||||
    private int code;
 | 
			
		||||
 | 
			
		||||
    /** 消息内容 */
 | 
			
		||||
    private String msg;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 表格数据对象
 | 
			
		||||
     */
 | 
			
		||||
    public TableDataInfo()
 | 
			
		||||
    {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 分页
 | 
			
		||||
     * 
 | 
			
		||||
     * @param list 列表数据
 | 
			
		||||
     * @param total 总记录数
 | 
			
		||||
     */
 | 
			
		||||
    public TableDataInfo(List<?> list, int total)
 | 
			
		||||
    {
 | 
			
		||||
        this.rows = list;
 | 
			
		||||
        this.total = total;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public long getTotal()
 | 
			
		||||
    {
 | 
			
		||||
        return total;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setTotal(long total)
 | 
			
		||||
    {
 | 
			
		||||
        this.total = total;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public List<?> getRows()
 | 
			
		||||
    {
 | 
			
		||||
        return rows;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setRows(List<?> rows)
 | 
			
		||||
    {
 | 
			
		||||
        this.rows = rows;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public int getCode()
 | 
			
		||||
    {
 | 
			
		||||
        return code;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setCode(int code)
 | 
			
		||||
    {
 | 
			
		||||
        this.code = code;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getMsg()
 | 
			
		||||
    {
 | 
			
		||||
        return msg;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setMsg(String msg)
 | 
			
		||||
    {
 | 
			
		||||
        this.msg = msg;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
package com.ruoyi.common.core.page;
 | 
			
		||||
 | 
			
		||||
import java.io.Serializable;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 表格分页数据对象
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
public class TableDataInfo implements Serializable
 | 
			
		||||
{
 | 
			
		||||
    private static final long serialVersionUID = 1L;
 | 
			
		||||
 | 
			
		||||
    /** 总记录数 */
 | 
			
		||||
    private long total;
 | 
			
		||||
 | 
			
		||||
    /** 列表数据 */
 | 
			
		||||
    private List<?> rows;
 | 
			
		||||
 | 
			
		||||
    /** 消息状态码 */
 | 
			
		||||
    private int code;
 | 
			
		||||
 | 
			
		||||
    /** 消息内容 */
 | 
			
		||||
    private String msg;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 表格数据对象
 | 
			
		||||
     */
 | 
			
		||||
    public TableDataInfo()
 | 
			
		||||
    {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 分页
 | 
			
		||||
     * 
 | 
			
		||||
     * @param list 列表数据
 | 
			
		||||
     * @param total 总记录数
 | 
			
		||||
     */
 | 
			
		||||
    public TableDataInfo(List<?> list, int total)
 | 
			
		||||
    {
 | 
			
		||||
        this.rows = list;
 | 
			
		||||
        this.total = total;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public long getTotal()
 | 
			
		||||
    {
 | 
			
		||||
        return total;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setTotal(long total)
 | 
			
		||||
    {
 | 
			
		||||
        this.total = total;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public List<?> getRows()
 | 
			
		||||
    {
 | 
			
		||||
        return rows;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setRows(List<?> rows)
 | 
			
		||||
    {
 | 
			
		||||
        this.rows = rows;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public int getCode()
 | 
			
		||||
    {
 | 
			
		||||
        return code;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setCode(int code)
 | 
			
		||||
    {
 | 
			
		||||
        this.code = code;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getMsg()
 | 
			
		||||
    {
 | 
			
		||||
        return msg;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public void setMsg(String msg)
 | 
			
		||||
    {
 | 
			
		||||
        this.msg = msg;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,56 +1,56 @@
 | 
			
		|||
package com.tcctlo.common.core.page;
 | 
			
		||||
 | 
			
		||||
import com.tcctlo.common.core.text.Convert;
 | 
			
		||||
import com.tcctlo.common.utils.ServletUtils;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 表格数据处理
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
public class TableSupport
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * 当前记录起始索引
 | 
			
		||||
     */
 | 
			
		||||
    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 String REASONABLE = "reasonable";
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 封装分页对象
 | 
			
		||||
     */
 | 
			
		||||
    public static PageDomain getPageDomain()
 | 
			
		||||
    {
 | 
			
		||||
        PageDomain pageDomain = new PageDomain();
 | 
			
		||||
        pageDomain.setPageNum(Convert.toInt(ServletUtils.getParameter(PAGE_NUM), 1));
 | 
			
		||||
        pageDomain.setPageSize(Convert.toInt(ServletUtils.getParameter(PAGE_SIZE), 10));
 | 
			
		||||
        pageDomain.setOrderByColumn(ServletUtils.getParameter(ORDER_BY_COLUMN));
 | 
			
		||||
        pageDomain.setIsAsc(ServletUtils.getParameter(IS_ASC));
 | 
			
		||||
        pageDomain.setReasonable(ServletUtils.getParameterToBool(REASONABLE));
 | 
			
		||||
        return pageDomain;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static PageDomain buildPageRequest()
 | 
			
		||||
    {
 | 
			
		||||
        return getPageDomain();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
package com.ruoyi.common.core.page;
 | 
			
		||||
 | 
			
		||||
import com.ruoyi.common.core.text.Convert;
 | 
			
		||||
import com.ruoyi.common.utils.ServletUtils;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 表格数据处理
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
public class TableSupport
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * 当前记录起始索引
 | 
			
		||||
     */
 | 
			
		||||
    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 String REASONABLE = "reasonable";
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 封装分页对象
 | 
			
		||||
     */
 | 
			
		||||
    public static PageDomain getPageDomain()
 | 
			
		||||
    {
 | 
			
		||||
        PageDomain pageDomain = new PageDomain();
 | 
			
		||||
        pageDomain.setPageNum(Convert.toInt(ServletUtils.getParameter(PAGE_NUM), 1));
 | 
			
		||||
        pageDomain.setPageSize(Convert.toInt(ServletUtils.getParameter(PAGE_SIZE), 10));
 | 
			
		||||
        pageDomain.setOrderByColumn(ServletUtils.getParameter(ORDER_BY_COLUMN));
 | 
			
		||||
        pageDomain.setIsAsc(ServletUtils.getParameter(IS_ASC));
 | 
			
		||||
        pageDomain.setReasonable(ServletUtils.getParameterToBool(REASONABLE));
 | 
			
		||||
        return pageDomain;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public static PageDomain buildPageRequest()
 | 
			
		||||
    {
 | 
			
		||||
        return getPageDomain();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,268 +1,268 @@
 | 
			
		|||
package com.tcctlo.common.core.redis;
 | 
			
		||||
 | 
			
		||||
import java.util.Collection;
 | 
			
		||||
import java.util.Iterator;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
import java.util.concurrent.TimeUnit;
 | 
			
		||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
			
		||||
import org.springframework.data.redis.core.BoundSetOperations;
 | 
			
		||||
import org.springframework.data.redis.core.HashOperations;
 | 
			
		||||
import org.springframework.data.redis.core.RedisTemplate;
 | 
			
		||||
import org.springframework.data.redis.core.ValueOperations;
 | 
			
		||||
import org.springframework.stereotype.Component;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * spring redis 工具类
 | 
			
		||||
 *
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 **/
 | 
			
		||||
@SuppressWarnings(value = { "unchecked", "rawtypes" })
 | 
			
		||||
@Component
 | 
			
		||||
public class RedisCache
 | 
			
		||||
{
 | 
			
		||||
    @Autowired
 | 
			
		||||
    public RedisTemplate redisTemplate;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 缓存基本的对象,Integer、String、实体类等
 | 
			
		||||
     *
 | 
			
		||||
     * @param key 缓存的键值
 | 
			
		||||
     * @param value 缓存的值
 | 
			
		||||
     */
 | 
			
		||||
    public <T> void setCacheObject(final String key, final T value)
 | 
			
		||||
    {
 | 
			
		||||
        redisTemplate.opsForValue().set(key, value);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 缓存基本的对象,Integer、String、实体类等
 | 
			
		||||
     *
 | 
			
		||||
     * @param key 缓存的键值
 | 
			
		||||
     * @param value 缓存的值
 | 
			
		||||
     * @param timeout 时间
 | 
			
		||||
     * @param timeUnit 时间颗粒度
 | 
			
		||||
     */
 | 
			
		||||
    public <T> void setCacheObject(final String key, final T value, final Integer timeout, final TimeUnit timeUnit)
 | 
			
		||||
    {
 | 
			
		||||
        redisTemplate.opsForValue().set(key, value, timeout, timeUnit);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 设置有效时间
 | 
			
		||||
     *
 | 
			
		||||
     * @param key Redis键
 | 
			
		||||
     * @param timeout 超时时间
 | 
			
		||||
     * @return true=设置成功;false=设置失败
 | 
			
		||||
     */
 | 
			
		||||
    public boolean expire(final String key, final long timeout)
 | 
			
		||||
    {
 | 
			
		||||
        return expire(key, timeout, TimeUnit.SECONDS);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 设置有效时间
 | 
			
		||||
     *
 | 
			
		||||
     * @param key Redis键
 | 
			
		||||
     * @param timeout 超时时间
 | 
			
		||||
     * @param unit 时间单位
 | 
			
		||||
     * @return true=设置成功;false=设置失败
 | 
			
		||||
     */
 | 
			
		||||
    public boolean expire(final String key, final long timeout, final TimeUnit unit)
 | 
			
		||||
    {
 | 
			
		||||
        return redisTemplate.expire(key, timeout, unit);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获取有效时间
 | 
			
		||||
     *
 | 
			
		||||
     * @param key Redis键
 | 
			
		||||
     * @return 有效时间
 | 
			
		||||
     */
 | 
			
		||||
    public long getExpire(final String key)
 | 
			
		||||
    {
 | 
			
		||||
        return redisTemplate.getExpire(key);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 判断 key是否存在
 | 
			
		||||
     *
 | 
			
		||||
     * @param key 键
 | 
			
		||||
     * @return true 存在 false不存在
 | 
			
		||||
     */
 | 
			
		||||
    public Boolean hasKey(String key)
 | 
			
		||||
    {
 | 
			
		||||
        return redisTemplate.hasKey(key);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获得缓存的基本对象。
 | 
			
		||||
     *
 | 
			
		||||
     * @param key 缓存键值
 | 
			
		||||
     * @return 缓存键值对应的数据
 | 
			
		||||
     */
 | 
			
		||||
    public <T> T getCacheObject(final String key)
 | 
			
		||||
    {
 | 
			
		||||
        ValueOperations<String, T> operation = redisTemplate.opsForValue();
 | 
			
		||||
        return operation.get(key);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 删除单个对象
 | 
			
		||||
     *
 | 
			
		||||
     * @param key
 | 
			
		||||
     */
 | 
			
		||||
    public boolean deleteObject(final String key)
 | 
			
		||||
    {
 | 
			
		||||
        return redisTemplate.delete(key);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 删除集合对象
 | 
			
		||||
     *
 | 
			
		||||
     * @param collection 多个对象
 | 
			
		||||
     * @return
 | 
			
		||||
     */
 | 
			
		||||
    public boolean deleteObject(final Collection collection)
 | 
			
		||||
    {
 | 
			
		||||
        return redisTemplate.delete(collection) > 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 缓存List数据
 | 
			
		||||
     *
 | 
			
		||||
     * @param key 缓存的键值
 | 
			
		||||
     * @param dataList 待缓存的List数据
 | 
			
		||||
     * @return 缓存的对象
 | 
			
		||||
     */
 | 
			
		||||
    public <T> long setCacheList(final String key, final List<T> dataList)
 | 
			
		||||
    {
 | 
			
		||||
        Long count = redisTemplate.opsForList().rightPushAll(key, dataList);
 | 
			
		||||
        return count == null ? 0 : count;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获得缓存的list对象
 | 
			
		||||
     *
 | 
			
		||||
     * @param key 缓存的键值
 | 
			
		||||
     * @return 缓存键值对应的数据
 | 
			
		||||
     */
 | 
			
		||||
    public <T> List<T> getCacheList(final String key)
 | 
			
		||||
    {
 | 
			
		||||
        return redisTemplate.opsForList().range(key, 0, -1);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 缓存Set
 | 
			
		||||
     *
 | 
			
		||||
     * @param key 缓存键值
 | 
			
		||||
     * @param dataSet 缓存的数据
 | 
			
		||||
     * @return 缓存数据的对象
 | 
			
		||||
     */
 | 
			
		||||
    public <T> BoundSetOperations<String, T> setCacheSet(final String key, final Set<T> dataSet)
 | 
			
		||||
    {
 | 
			
		||||
        BoundSetOperations<String, T> setOperation = redisTemplate.boundSetOps(key);
 | 
			
		||||
        Iterator<T> it = dataSet.iterator();
 | 
			
		||||
        while (it.hasNext())
 | 
			
		||||
        {
 | 
			
		||||
            setOperation.add(it.next());
 | 
			
		||||
        }
 | 
			
		||||
        return setOperation;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获得缓存的set
 | 
			
		||||
     *
 | 
			
		||||
     * @param key
 | 
			
		||||
     * @return
 | 
			
		||||
     */
 | 
			
		||||
    public <T> Set<T> getCacheSet(final String key)
 | 
			
		||||
    {
 | 
			
		||||
        return redisTemplate.opsForSet().members(key);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 缓存Map
 | 
			
		||||
     *
 | 
			
		||||
     * @param key
 | 
			
		||||
     * @param dataMap
 | 
			
		||||
     */
 | 
			
		||||
    public <T> void setCacheMap(final String key, final Map<String, T> dataMap)
 | 
			
		||||
    {
 | 
			
		||||
        if (dataMap != null) {
 | 
			
		||||
            redisTemplate.opsForHash().putAll(key, dataMap);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获得缓存的Map
 | 
			
		||||
     *
 | 
			
		||||
     * @param key
 | 
			
		||||
     * @return
 | 
			
		||||
     */
 | 
			
		||||
    public <T> Map<String, T> getCacheMap(final String key)
 | 
			
		||||
    {
 | 
			
		||||
        return redisTemplate.opsForHash().entries(key);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 往Hash中存入数据
 | 
			
		||||
     *
 | 
			
		||||
     * @param key Redis键
 | 
			
		||||
     * @param hKey Hash键
 | 
			
		||||
     * @param value 值
 | 
			
		||||
     */
 | 
			
		||||
    public <T> void setCacheMapValue(final String key, final String hKey, final T value)
 | 
			
		||||
    {
 | 
			
		||||
        redisTemplate.opsForHash().put(key, hKey, value);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获取Hash中的数据
 | 
			
		||||
     *
 | 
			
		||||
     * @param key Redis键
 | 
			
		||||
     * @param hKey Hash键
 | 
			
		||||
     * @return Hash中的对象
 | 
			
		||||
     */
 | 
			
		||||
    public <T> T getCacheMapValue(final String key, final String hKey)
 | 
			
		||||
    {
 | 
			
		||||
        HashOperations<String, String, T> opsForHash = redisTemplate.opsForHash();
 | 
			
		||||
        return opsForHash.get(key, hKey);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获取多个Hash中的数据
 | 
			
		||||
     *
 | 
			
		||||
     * @param key Redis键
 | 
			
		||||
     * @param hKeys Hash键集合
 | 
			
		||||
     * @return Hash对象集合
 | 
			
		||||
     */
 | 
			
		||||
    public <T> List<T> getMultiCacheMapValue(final String key, final Collection<Object> hKeys)
 | 
			
		||||
    {
 | 
			
		||||
        return redisTemplate.opsForHash().multiGet(key, hKeys);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 删除Hash中的某条数据
 | 
			
		||||
     *
 | 
			
		||||
     * @param key Redis键
 | 
			
		||||
     * @param hKey Hash键
 | 
			
		||||
     * @return 是否成功
 | 
			
		||||
     */
 | 
			
		||||
    public boolean deleteCacheMapValue(final String key, final String hKey)
 | 
			
		||||
    {
 | 
			
		||||
        return redisTemplate.opsForHash().delete(key, hKey) > 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获得缓存的基本对象列表
 | 
			
		||||
     *
 | 
			
		||||
     * @param pattern 字符串前缀
 | 
			
		||||
     * @return 对象列表
 | 
			
		||||
     */
 | 
			
		||||
    public Collection<String> keys(final String pattern)
 | 
			
		||||
    {
 | 
			
		||||
        return redisTemplate.keys(pattern);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
package com.ruoyi.common.core.redis;
 | 
			
		||||
 | 
			
		||||
import java.util.Collection;
 | 
			
		||||
import java.util.Iterator;
 | 
			
		||||
import java.util.List;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
import java.util.Set;
 | 
			
		||||
import java.util.concurrent.TimeUnit;
 | 
			
		||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
			
		||||
import org.springframework.data.redis.core.BoundSetOperations;
 | 
			
		||||
import org.springframework.data.redis.core.HashOperations;
 | 
			
		||||
import org.springframework.data.redis.core.RedisTemplate;
 | 
			
		||||
import org.springframework.data.redis.core.ValueOperations;
 | 
			
		||||
import org.springframework.stereotype.Component;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * spring redis 工具类
 | 
			
		||||
 *
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 **/
 | 
			
		||||
@SuppressWarnings(value = { "unchecked", "rawtypes" })
 | 
			
		||||
@Component
 | 
			
		||||
public class RedisCache
 | 
			
		||||
{
 | 
			
		||||
    @Autowired
 | 
			
		||||
    public RedisTemplate redisTemplate;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 缓存基本的对象,Integer、String、实体类等
 | 
			
		||||
     *
 | 
			
		||||
     * @param key 缓存的键值
 | 
			
		||||
     * @param value 缓存的值
 | 
			
		||||
     */
 | 
			
		||||
    public <T> void setCacheObject(final String key, final T value)
 | 
			
		||||
    {
 | 
			
		||||
        redisTemplate.opsForValue().set(key, value);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 缓存基本的对象,Integer、String、实体类等
 | 
			
		||||
     *
 | 
			
		||||
     * @param key 缓存的键值
 | 
			
		||||
     * @param value 缓存的值
 | 
			
		||||
     * @param timeout 时间
 | 
			
		||||
     * @param timeUnit 时间颗粒度
 | 
			
		||||
     */
 | 
			
		||||
    public <T> void setCacheObject(final String key, final T value, final Integer timeout, final TimeUnit timeUnit)
 | 
			
		||||
    {
 | 
			
		||||
        redisTemplate.opsForValue().set(key, value, timeout, timeUnit);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 设置有效时间
 | 
			
		||||
     *
 | 
			
		||||
     * @param key Redis键
 | 
			
		||||
     * @param timeout 超时时间
 | 
			
		||||
     * @return true=设置成功;false=设置失败
 | 
			
		||||
     */
 | 
			
		||||
    public boolean expire(final String key, final long timeout)
 | 
			
		||||
    {
 | 
			
		||||
        return expire(key, timeout, TimeUnit.SECONDS);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 设置有效时间
 | 
			
		||||
     *
 | 
			
		||||
     * @param key Redis键
 | 
			
		||||
     * @param timeout 超时时间
 | 
			
		||||
     * @param unit 时间单位
 | 
			
		||||
     * @return true=设置成功;false=设置失败
 | 
			
		||||
     */
 | 
			
		||||
    public boolean expire(final String key, final long timeout, final TimeUnit unit)
 | 
			
		||||
    {
 | 
			
		||||
        return redisTemplate.expire(key, timeout, unit);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获取有效时间
 | 
			
		||||
     *
 | 
			
		||||
     * @param key Redis键
 | 
			
		||||
     * @return 有效时间
 | 
			
		||||
     */
 | 
			
		||||
    public long getExpire(final String key)
 | 
			
		||||
    {
 | 
			
		||||
        return redisTemplate.getExpire(key);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 判断 key是否存在
 | 
			
		||||
     *
 | 
			
		||||
     * @param key 键
 | 
			
		||||
     * @return true 存在 false不存在
 | 
			
		||||
     */
 | 
			
		||||
    public Boolean hasKey(String key)
 | 
			
		||||
    {
 | 
			
		||||
        return redisTemplate.hasKey(key);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获得缓存的基本对象。
 | 
			
		||||
     *
 | 
			
		||||
     * @param key 缓存键值
 | 
			
		||||
     * @return 缓存键值对应的数据
 | 
			
		||||
     */
 | 
			
		||||
    public <T> T getCacheObject(final String key)
 | 
			
		||||
    {
 | 
			
		||||
        ValueOperations<String, T> operation = redisTemplate.opsForValue();
 | 
			
		||||
        return operation.get(key);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 删除单个对象
 | 
			
		||||
     *
 | 
			
		||||
     * @param key
 | 
			
		||||
     */
 | 
			
		||||
    public boolean deleteObject(final String key)
 | 
			
		||||
    {
 | 
			
		||||
        return redisTemplate.delete(key);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 删除集合对象
 | 
			
		||||
     *
 | 
			
		||||
     * @param collection 多个对象
 | 
			
		||||
     * @return
 | 
			
		||||
     */
 | 
			
		||||
    public boolean deleteObject(final Collection collection)
 | 
			
		||||
    {
 | 
			
		||||
        return redisTemplate.delete(collection) > 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 缓存List数据
 | 
			
		||||
     *
 | 
			
		||||
     * @param key 缓存的键值
 | 
			
		||||
     * @param dataList 待缓存的List数据
 | 
			
		||||
     * @return 缓存的对象
 | 
			
		||||
     */
 | 
			
		||||
    public <T> long setCacheList(final String key, final List<T> dataList)
 | 
			
		||||
    {
 | 
			
		||||
        Long count = redisTemplate.opsForList().rightPushAll(key, dataList);
 | 
			
		||||
        return count == null ? 0 : count;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获得缓存的list对象
 | 
			
		||||
     *
 | 
			
		||||
     * @param key 缓存的键值
 | 
			
		||||
     * @return 缓存键值对应的数据
 | 
			
		||||
     */
 | 
			
		||||
    public <T> List<T> getCacheList(final String key)
 | 
			
		||||
    {
 | 
			
		||||
        return redisTemplate.opsForList().range(key, 0, -1);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 缓存Set
 | 
			
		||||
     *
 | 
			
		||||
     * @param key 缓存键值
 | 
			
		||||
     * @param dataSet 缓存的数据
 | 
			
		||||
     * @return 缓存数据的对象
 | 
			
		||||
     */
 | 
			
		||||
    public <T> BoundSetOperations<String, T> setCacheSet(final String key, final Set<T> dataSet)
 | 
			
		||||
    {
 | 
			
		||||
        BoundSetOperations<String, T> setOperation = redisTemplate.boundSetOps(key);
 | 
			
		||||
        Iterator<T> it = dataSet.iterator();
 | 
			
		||||
        while (it.hasNext())
 | 
			
		||||
        {
 | 
			
		||||
            setOperation.add(it.next());
 | 
			
		||||
        }
 | 
			
		||||
        return setOperation;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获得缓存的set
 | 
			
		||||
     *
 | 
			
		||||
     * @param key
 | 
			
		||||
     * @return
 | 
			
		||||
     */
 | 
			
		||||
    public <T> Set<T> getCacheSet(final String key)
 | 
			
		||||
    {
 | 
			
		||||
        return redisTemplate.opsForSet().members(key);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 缓存Map
 | 
			
		||||
     *
 | 
			
		||||
     * @param key
 | 
			
		||||
     * @param dataMap
 | 
			
		||||
     */
 | 
			
		||||
    public <T> void setCacheMap(final String key, final Map<String, T> dataMap)
 | 
			
		||||
    {
 | 
			
		||||
        if (dataMap != null) {
 | 
			
		||||
            redisTemplate.opsForHash().putAll(key, dataMap);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获得缓存的Map
 | 
			
		||||
     *
 | 
			
		||||
     * @param key
 | 
			
		||||
     * @return
 | 
			
		||||
     */
 | 
			
		||||
    public <T> Map<String, T> getCacheMap(final String key)
 | 
			
		||||
    {
 | 
			
		||||
        return redisTemplate.opsForHash().entries(key);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 往Hash中存入数据
 | 
			
		||||
     *
 | 
			
		||||
     * @param key Redis键
 | 
			
		||||
     * @param hKey Hash键
 | 
			
		||||
     * @param value 值
 | 
			
		||||
     */
 | 
			
		||||
    public <T> void setCacheMapValue(final String key, final String hKey, final T value)
 | 
			
		||||
    {
 | 
			
		||||
        redisTemplate.opsForHash().put(key, hKey, value);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获取Hash中的数据
 | 
			
		||||
     *
 | 
			
		||||
     * @param key Redis键
 | 
			
		||||
     * @param hKey Hash键
 | 
			
		||||
     * @return Hash中的对象
 | 
			
		||||
     */
 | 
			
		||||
    public <T> T getCacheMapValue(final String key, final String hKey)
 | 
			
		||||
    {
 | 
			
		||||
        HashOperations<String, String, T> opsForHash = redisTemplate.opsForHash();
 | 
			
		||||
        return opsForHash.get(key, hKey);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获取多个Hash中的数据
 | 
			
		||||
     *
 | 
			
		||||
     * @param key Redis键
 | 
			
		||||
     * @param hKeys Hash键集合
 | 
			
		||||
     * @return Hash对象集合
 | 
			
		||||
     */
 | 
			
		||||
    public <T> List<T> getMultiCacheMapValue(final String key, final Collection<Object> hKeys)
 | 
			
		||||
    {
 | 
			
		||||
        return redisTemplate.opsForHash().multiGet(key, hKeys);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 删除Hash中的某条数据
 | 
			
		||||
     *
 | 
			
		||||
     * @param key Redis键
 | 
			
		||||
     * @param hKey Hash键
 | 
			
		||||
     * @return 是否成功
 | 
			
		||||
     */
 | 
			
		||||
    public boolean deleteCacheMapValue(final String key, final String hKey)
 | 
			
		||||
    {
 | 
			
		||||
        return redisTemplate.opsForHash().delete(key, hKey) > 0;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 获得缓存的基本对象列表
 | 
			
		||||
     *
 | 
			
		||||
     * @param pattern 字符串前缀
 | 
			
		||||
     * @return 对象列表
 | 
			
		||||
     */
 | 
			
		||||
    public Collection<String> keys(final String pattern)
 | 
			
		||||
    {
 | 
			
		||||
        return redisTemplate.keys(pattern);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,86 +1,86 @@
 | 
			
		|||
package com.tcctlo.common.core.text;
 | 
			
		||||
 | 
			
		||||
import java.nio.charset.Charset;
 | 
			
		||||
import java.nio.charset.StandardCharsets;
 | 
			
		||||
import com.tcctlo.common.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();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
package com.ruoyi.common.core.text;
 | 
			
		||||
 | 
			
		||||
import java.nio.charset.Charset;
 | 
			
		||||
import java.nio.charset.StandardCharsets;
 | 
			
		||||
import com.ruoyi.common.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();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| 
						 | 
				
			
			@ -1,92 +1,92 @@
 | 
			
		|||
package com.tcctlo.common.core.text;
 | 
			
		||||
 | 
			
		||||
import com.tcctlo.common.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();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
package com.ruoyi.common.core.text;
 | 
			
		||||
 | 
			
		||||
import com.ruoyi.common.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();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,20 +1,20 @@
 | 
			
		|||
package com.tcctlo.common.enums;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 操作状态
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
public enum BusinessStatus
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * 成功
 | 
			
		||||
     */
 | 
			
		||||
    SUCCESS,
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 失败
 | 
			
		||||
     */
 | 
			
		||||
    FAIL,
 | 
			
		||||
}
 | 
			
		||||
package com.ruoyi.common.enums;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 操作状态
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 *
 | 
			
		||||
 */
 | 
			
		||||
public enum BusinessStatus
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * 成功
 | 
			
		||||
     */
 | 
			
		||||
    SUCCESS,
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 失败
 | 
			
		||||
     */
 | 
			
		||||
    FAIL,
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,59 +1,59 @@
 | 
			
		|||
package com.tcctlo.common.enums;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 业务操作类型
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
public enum BusinessType
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * 其它
 | 
			
		||||
     */
 | 
			
		||||
    OTHER,
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 新增
 | 
			
		||||
     */
 | 
			
		||||
    INSERT,
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 修改
 | 
			
		||||
     */
 | 
			
		||||
    UPDATE,
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 删除
 | 
			
		||||
     */
 | 
			
		||||
    DELETE,
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 授权
 | 
			
		||||
     */
 | 
			
		||||
    GRANT,
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 导出
 | 
			
		||||
     */
 | 
			
		||||
    EXPORT,
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 导入
 | 
			
		||||
     */
 | 
			
		||||
    IMPORT,
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 强退
 | 
			
		||||
     */
 | 
			
		||||
    FORCE,
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 生成代码
 | 
			
		||||
     */
 | 
			
		||||
    GENCODE,
 | 
			
		||||
    
 | 
			
		||||
    /**
 | 
			
		||||
     * 清空数据
 | 
			
		||||
     */
 | 
			
		||||
    CLEAN,
 | 
			
		||||
}
 | 
			
		||||
package com.ruoyi.common.enums;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 业务操作类型
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
public enum BusinessType
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * 其它
 | 
			
		||||
     */
 | 
			
		||||
    OTHER,
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 新增
 | 
			
		||||
     */
 | 
			
		||||
    INSERT,
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 修改
 | 
			
		||||
     */
 | 
			
		||||
    UPDATE,
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 删除
 | 
			
		||||
     */
 | 
			
		||||
    DELETE,
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 授权
 | 
			
		||||
     */
 | 
			
		||||
    GRANT,
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 导出
 | 
			
		||||
     */
 | 
			
		||||
    EXPORT,
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 导入
 | 
			
		||||
     */
 | 
			
		||||
    IMPORT,
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 强退
 | 
			
		||||
     */
 | 
			
		||||
    FORCE,
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 生成代码
 | 
			
		||||
     */
 | 
			
		||||
    GENCODE,
 | 
			
		||||
    
 | 
			
		||||
    /**
 | 
			
		||||
     * 清空数据
 | 
			
		||||
     */
 | 
			
		||||
    CLEAN,
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,19 +1,19 @@
 | 
			
		|||
package com.tcctlo.common.enums;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 数据源
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
public enum DataSourceType
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * 主库
 | 
			
		||||
     */
 | 
			
		||||
    MASTER,
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 从库
 | 
			
		||||
     */
 | 
			
		||||
    SLAVE
 | 
			
		||||
}
 | 
			
		||||
package com.ruoyi.common.enums;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 数据源
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
public enum DataSourceType
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * 主库
 | 
			
		||||
     */
 | 
			
		||||
    MASTER,
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 从库
 | 
			
		||||
     */
 | 
			
		||||
    SLAVE
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
package com.tcctlo.common.enums;
 | 
			
		||||
package com.ruoyi.common.enums;
 | 
			
		||||
 | 
			
		||||
import java.util.function.Function;
 | 
			
		||||
import com.tcctlo.common.utils.DesensitizedUtil;
 | 
			
		||||
import com.ruoyi.common.utils.DesensitizedUtil;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 脱敏类型
 | 
			
		||||
| 
						 | 
				
			
			@ -1,36 +1,36 @@
 | 
			
		|||
package com.tcctlo.common.enums;
 | 
			
		||||
 | 
			
		||||
import java.util.HashMap;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
import org.springframework.lang.Nullable;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 请求方式
 | 
			
		||||
 *
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
public enum HttpMethod
 | 
			
		||||
{
 | 
			
		||||
    GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS, TRACE;
 | 
			
		||||
 | 
			
		||||
    private static final Map<String, HttpMethod> mappings = new HashMap<>(16);
 | 
			
		||||
 | 
			
		||||
    static
 | 
			
		||||
    {
 | 
			
		||||
        for (HttpMethod httpMethod : values())
 | 
			
		||||
        {
 | 
			
		||||
            mappings.put(httpMethod.name(), httpMethod);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Nullable
 | 
			
		||||
    public static HttpMethod resolve(@Nullable String method)
 | 
			
		||||
    {
 | 
			
		||||
        return (method != null ? mappings.get(method) : null);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean matches(String method)
 | 
			
		||||
    {
 | 
			
		||||
        return (this == resolve(method));
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
package com.ruoyi.common.enums;
 | 
			
		||||
 | 
			
		||||
import java.util.HashMap;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
import org.springframework.lang.Nullable;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 请求方式
 | 
			
		||||
 *
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
public enum HttpMethod
 | 
			
		||||
{
 | 
			
		||||
    GET, HEAD, POST, PUT, PATCH, DELETE, OPTIONS, TRACE;
 | 
			
		||||
 | 
			
		||||
    private static final Map<String, HttpMethod> mappings = new HashMap<>(16);
 | 
			
		||||
 | 
			
		||||
    static
 | 
			
		||||
    {
 | 
			
		||||
        for (HttpMethod httpMethod : values())
 | 
			
		||||
        {
 | 
			
		||||
            mappings.put(httpMethod.name(), httpMethod);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Nullable
 | 
			
		||||
    public static HttpMethod resolve(@Nullable String method)
 | 
			
		||||
    {
 | 
			
		||||
        return (method != null ? mappings.get(method) : null);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public boolean matches(String method)
 | 
			
		||||
    {
 | 
			
		||||
        return (this == resolve(method));
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,20 +1,20 @@
 | 
			
		|||
package com.tcctlo.common.enums;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 限流类型
 | 
			
		||||
 *
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
public enum LimitType
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * 默认策略全局限流
 | 
			
		||||
     */
 | 
			
		||||
    DEFAULT,
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 根据请求者IP进行限流
 | 
			
		||||
     */
 | 
			
		||||
    IP
 | 
			
		||||
}
 | 
			
		||||
package com.ruoyi.common.enums;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 限流类型
 | 
			
		||||
 *
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
public enum LimitType
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * 默认策略全局限流
 | 
			
		||||
     */
 | 
			
		||||
    DEFAULT,
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 根据请求者IP进行限流
 | 
			
		||||
     */
 | 
			
		||||
    IP
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,24 +1,24 @@
 | 
			
		|||
package com.tcctlo.common.enums;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 操作人类别
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
public enum OperatorType
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * 其它
 | 
			
		||||
     */
 | 
			
		||||
    OTHER,
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 后台用户
 | 
			
		||||
     */
 | 
			
		||||
    MANAGE,
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 手机端用户
 | 
			
		||||
     */
 | 
			
		||||
    MOBILE
 | 
			
		||||
}
 | 
			
		||||
package com.ruoyi.common.enums;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 操作人类别
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
public enum OperatorType
 | 
			
		||||
{
 | 
			
		||||
    /**
 | 
			
		||||
     * 其它
 | 
			
		||||
     */
 | 
			
		||||
    OTHER,
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 后台用户
 | 
			
		||||
     */
 | 
			
		||||
    MANAGE,
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * 手机端用户
 | 
			
		||||
     */
 | 
			
		||||
    MOBILE
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,30 +1,30 @@
 | 
			
		|||
package com.tcctlo.common.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;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
package com.ruoyi.common.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;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,15 +1,15 @@
 | 
			
		|||
package com.tcctlo.common.exception;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 演示模式异常
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
public class DemoModeException extends RuntimeException
 | 
			
		||||
{
 | 
			
		||||
    private static final long serialVersionUID = 1L;
 | 
			
		||||
 | 
			
		||||
    public DemoModeException()
 | 
			
		||||
    {
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
package com.ruoyi.common.exception;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 演示模式异常
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
public class DemoModeException extends RuntimeException
 | 
			
		||||
{
 | 
			
		||||
    private static final long serialVersionUID = 1L;
 | 
			
		||||
 | 
			
		||||
    public DemoModeException()
 | 
			
		||||
    {
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,58 +1,58 @@
 | 
			
		|||
package com.tcctlo.common.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;
 | 
			
		||||
    }
 | 
			
		||||
package com.ruoyi.common.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;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,74 +1,74 @@
 | 
			
		|||
package com.tcctlo.common.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;
 | 
			
		||||
    }
 | 
			
		||||
package com.ruoyi.common.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;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,26 +1,26 @@
 | 
			
		|||
package com.tcctlo.common.exception;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 工具类异常
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
public class UtilException extends RuntimeException
 | 
			
		||||
{
 | 
			
		||||
    private static final long serialVersionUID = 8247610319171014183L;
 | 
			
		||||
 | 
			
		||||
    public UtilException(Throwable e)
 | 
			
		||||
    {
 | 
			
		||||
        super(e.getMessage(), e);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public UtilException(String message)
 | 
			
		||||
    {
 | 
			
		||||
        super(message);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public UtilException(String message, Throwable throwable)
 | 
			
		||||
    {
 | 
			
		||||
        super(message, throwable);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
package com.ruoyi.common.exception;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 工具类异常
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
public class UtilException extends RuntimeException
 | 
			
		||||
{
 | 
			
		||||
    private static final long serialVersionUID = 8247610319171014183L;
 | 
			
		||||
 | 
			
		||||
    public UtilException(Throwable e)
 | 
			
		||||
    {
 | 
			
		||||
        super(e.getMessage(), e);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public UtilException(String message)
 | 
			
		||||
    {
 | 
			
		||||
        super(message);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public UtilException(String message, Throwable throwable)
 | 
			
		||||
    {
 | 
			
		||||
        super(message, throwable);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,97 +1,97 @@
 | 
			
		|||
package com.tcctlo.common.exception.base;
 | 
			
		||||
 | 
			
		||||
import com.tcctlo.common.utils.MessageUtils;
 | 
			
		||||
import com.tcctlo.common.utils.StringUtils;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 基础异常
 | 
			
		||||
 * 
 | 
			
		||||
 * @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);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public String getMessage()
 | 
			
		||||
    {
 | 
			
		||||
        String message = null;
 | 
			
		||||
        if (!StringUtils.isEmpty(code))
 | 
			
		||||
        {
 | 
			
		||||
            message = MessageUtils.message(code, args);
 | 
			
		||||
        }
 | 
			
		||||
        if (message == null)
 | 
			
		||||
        {
 | 
			
		||||
            message = defaultMessage;
 | 
			
		||||
        }
 | 
			
		||||
        return message;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getModule()
 | 
			
		||||
    {
 | 
			
		||||
        return module;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getCode()
 | 
			
		||||
    {
 | 
			
		||||
        return code;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Object[] getArgs()
 | 
			
		||||
    {
 | 
			
		||||
        return args;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getDefaultMessage()
 | 
			
		||||
    {
 | 
			
		||||
        return defaultMessage;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
package com.ruoyi.common.exception.base;
 | 
			
		||||
 | 
			
		||||
import com.ruoyi.common.utils.MessageUtils;
 | 
			
		||||
import com.ruoyi.common.utils.StringUtils;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 基础异常
 | 
			
		||||
 * 
 | 
			
		||||
 * @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);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    @Override
 | 
			
		||||
    public String getMessage()
 | 
			
		||||
    {
 | 
			
		||||
        String message = null;
 | 
			
		||||
        if (!StringUtils.isEmpty(code))
 | 
			
		||||
        {
 | 
			
		||||
            message = MessageUtils.message(code, args);
 | 
			
		||||
        }
 | 
			
		||||
        if (message == null)
 | 
			
		||||
        {
 | 
			
		||||
            message = defaultMessage;
 | 
			
		||||
        }
 | 
			
		||||
        return message;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getModule()
 | 
			
		||||
    {
 | 
			
		||||
        return module;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getCode()
 | 
			
		||||
    {
 | 
			
		||||
        return code;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public Object[] getArgs()
 | 
			
		||||
    {
 | 
			
		||||
        return args;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public String getDefaultMessage()
 | 
			
		||||
    {
 | 
			
		||||
        return defaultMessage;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,19 +1,19 @@
 | 
			
		|||
package com.tcctlo.common.exception.file;
 | 
			
		||||
 | 
			
		||||
import com.tcctlo.common.exception.base.BaseException;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 文件信息异常类
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
public class FileException extends BaseException
 | 
			
		||||
{
 | 
			
		||||
    private static final long serialVersionUID = 1L;
 | 
			
		||||
 | 
			
		||||
    public FileException(String code, Object[] args)
 | 
			
		||||
    {
 | 
			
		||||
        super("file", code, args, null);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
package com.ruoyi.common.exception.file;
 | 
			
		||||
 | 
			
		||||
import com.ruoyi.common.exception.base.BaseException;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 文件信息异常类
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
public class FileException extends BaseException
 | 
			
		||||
{
 | 
			
		||||
    private static final long serialVersionUID = 1L;
 | 
			
		||||
 | 
			
		||||
    public FileException(String code, Object[] args)
 | 
			
		||||
    {
 | 
			
		||||
        super("file", code, args, null);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,16 +1,16 @@
 | 
			
		|||
package com.tcctlo.common.exception.file;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 文件名称超长限制异常类
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
public class FileNameLengthLimitExceededException extends FileException
 | 
			
		||||
{
 | 
			
		||||
    private static final long serialVersionUID = 1L;
 | 
			
		||||
 | 
			
		||||
    public FileNameLengthLimitExceededException(int defaultFileNameLength)
 | 
			
		||||
    {
 | 
			
		||||
        super("upload.filename.exceed.length", new Object[] { defaultFileNameLength });
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
package com.ruoyi.common.exception.file;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 文件名称超长限制异常类
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
public class FileNameLengthLimitExceededException extends FileException
 | 
			
		||||
{
 | 
			
		||||
    private static final long serialVersionUID = 1L;
 | 
			
		||||
 | 
			
		||||
    public FileNameLengthLimitExceededException(int defaultFileNameLength)
 | 
			
		||||
    {
 | 
			
		||||
        super("upload.filename.exceed.length", new Object[] { defaultFileNameLength });
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,16 +1,16 @@
 | 
			
		|||
package com.tcctlo.common.exception.file;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 文件名大小限制异常类
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
public class FileSizeLimitExceededException extends FileException
 | 
			
		||||
{
 | 
			
		||||
    private static final long serialVersionUID = 1L;
 | 
			
		||||
 | 
			
		||||
    public FileSizeLimitExceededException(long defaultMaxSize)
 | 
			
		||||
    {
 | 
			
		||||
        super("upload.exceed.maxSize", new Object[] { defaultMaxSize });
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
package com.ruoyi.common.exception.file;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 文件名大小限制异常类
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
public class FileSizeLimitExceededException extends FileException
 | 
			
		||||
{
 | 
			
		||||
    private static final long serialVersionUID = 1L;
 | 
			
		||||
 | 
			
		||||
    public FileSizeLimitExceededException(long defaultMaxSize)
 | 
			
		||||
    {
 | 
			
		||||
        super("upload.exceed.maxSize", new Object[] { defaultMaxSize });
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,4 +1,4 @@
 | 
			
		|||
package com.tcctlo.common.exception.file;
 | 
			
		||||
package com.ruoyi.common.exception.file;
 | 
			
		||||
 | 
			
		||||
import java.io.PrintStream;
 | 
			
		||||
import java.io.PrintWriter;
 | 
			
		||||
| 
						 | 
				
			
			@ -1,80 +1,80 @@
 | 
			
		|||
package com.tcctlo.common.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 + "]后缀[" + 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);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
package com.ruoyi.common.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 + "]后缀[" + 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);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,34 +1,34 @@
 | 
			
		|||
package com.tcctlo.common.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
 | 
			
		||||
    }
 | 
			
		||||
package com.ruoyi.common.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
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,4 +1,4 @@
 | 
			
		|||
package com.tcctlo.common.exception.user;
 | 
			
		||||
package com.ruoyi.common.exception.user;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 黑名单IP异常类
 | 
			
		||||
| 
						 | 
				
			
			@ -1,16 +1,16 @@
 | 
			
		|||
package com.tcctlo.common.exception.user;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 验证码错误异常类
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
public class CaptchaException extends UserException
 | 
			
		||||
{
 | 
			
		||||
    private static final long serialVersionUID = 1L;
 | 
			
		||||
 | 
			
		||||
    public CaptchaException()
 | 
			
		||||
    {
 | 
			
		||||
        super("user.jcaptcha.error", null);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
package com.ruoyi.common.exception.user;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 验证码错误异常类
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
public class CaptchaException extends UserException
 | 
			
		||||
{
 | 
			
		||||
    private static final long serialVersionUID = 1L;
 | 
			
		||||
 | 
			
		||||
    public CaptchaException()
 | 
			
		||||
    {
 | 
			
		||||
        super("user.jcaptcha.error", null);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,16 +1,16 @@
 | 
			
		|||
package com.tcctlo.common.exception.user;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 验证码失效异常类
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
public class CaptchaExpireException extends UserException
 | 
			
		||||
{
 | 
			
		||||
    private static final long serialVersionUID = 1L;
 | 
			
		||||
 | 
			
		||||
    public CaptchaExpireException()
 | 
			
		||||
    {
 | 
			
		||||
        super("user.jcaptcha.expire", null);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
package com.ruoyi.common.exception.user;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 验证码失效异常类
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
public class CaptchaExpireException extends UserException
 | 
			
		||||
{
 | 
			
		||||
    private static final long serialVersionUID = 1L;
 | 
			
		||||
 | 
			
		||||
    public CaptchaExpireException()
 | 
			
		||||
    {
 | 
			
		||||
        super("user.jcaptcha.expire", null);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,18 +1,18 @@
 | 
			
		|||
package com.tcctlo.common.exception.user;
 | 
			
		||||
 | 
			
		||||
import com.tcctlo.common.exception.base.BaseException;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 用户信息异常类
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
public class UserException extends BaseException
 | 
			
		||||
{
 | 
			
		||||
    private static final long serialVersionUID = 1L;
 | 
			
		||||
 | 
			
		||||
    public UserException(String code, Object[] args)
 | 
			
		||||
    {
 | 
			
		||||
        super("user", code, args, null);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
package com.ruoyi.common.exception.user;
 | 
			
		||||
 | 
			
		||||
import com.ruoyi.common.exception.base.BaseException;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * 用户信息异常类
 | 
			
		||||
 * 
 | 
			
		||||
 * @author ruoyi
 | 
			
		||||
 */
 | 
			
		||||
public class UserException extends BaseException
 | 
			
		||||
{
 | 
			
		||||
    private static final long serialVersionUID = 1L;
 | 
			
		||||
 | 
			
		||||
    public UserException(String code, Object[] args)
 | 
			
		||||
    {
 | 
			
		||||
        super("user", code, args, null);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
Some files were not shown because too many files have changed in this diff Show More
		Loading…
	
		Reference in New Issue