parent
f9a3f5c3f8
commit
98283a25e6
@ -0,0 +1 @@
|
||||
custom: http://doc.ruoyi.vip/ruoyi-vue/other/donate.html
|
@ -0,0 +1,47 @@
|
||||
######################################################################
|
||||
# Build Tools
|
||||
|
||||
.gradle
|
||||
/build/
|
||||
!gradle/wrapper/gradle-wrapper.jar
|
||||
|
||||
target/
|
||||
!.mvn/wrapper/maven-wrapper.jar
|
||||
|
||||
######################################################################
|
||||
# IDE
|
||||
|
||||
### STS ###
|
||||
.apt_generated
|
||||
.classpath
|
||||
.factorypath
|
||||
.project
|
||||
.settings
|
||||
.springBeans
|
||||
|
||||
### IntelliJ IDEA ###
|
||||
.idea
|
||||
*.iws
|
||||
*.iml
|
||||
*.ipr
|
||||
|
||||
### JRebel ###
|
||||
rebel.xml
|
||||
|
||||
### NetBeans ###
|
||||
nbproject/private/
|
||||
build/*
|
||||
nbbuild/
|
||||
dist/
|
||||
nbdist/
|
||||
.nb-gradle/
|
||||
|
||||
######################################################################
|
||||
# Others
|
||||
*.log
|
||||
*.xml.versionsBackup
|
||||
*.swp
|
||||
|
||||
!*/build/*.java
|
||||
!*/build/*.html
|
||||
!*/build/*.xml
|
@ -0,0 +1,20 @@
|
||||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2018 RuoYi
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||
this software and associated documentation files (the "Software"), to deal in
|
||||
the Software without restriction, including without limitation the rights to
|
||||
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||
the Software, and to permit persons to whom the Software is furnished to do so,
|
||||
subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
@ -0,0 +1,12 @@
|
||||
@echo off
|
||||
echo.
|
||||
echo [信息] 清理工程target生成路径。
|
||||
echo.
|
||||
|
||||
%~d0
|
||||
cd %~dp0
|
||||
|
||||
cd ..
|
||||
call mvn clean
|
||||
|
||||
pause
|
@ -0,0 +1,14 @@
|
||||
@echo off
|
||||
echo.
|
||||
echo [信息] 使用Jar命令运行Web工程。
|
||||
echo.
|
||||
|
||||
cd %~dp0
|
||||
cd ../ruoyi-admin/target
|
||||
|
||||
set JAVA_OPTS=-Xms256m -Xmx1024m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=512m
|
||||
|
||||
java -jar %JAVA_OPTS% ruoyi-admin.jar
|
||||
|
||||
cd bin
|
||||
pause
|
Binary file not shown.
@ -0,0 +1,244 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
|
||||
<groupId>com.ruoyi</groupId>
|
||||
<artifactId>ruoyi</artifactId>
|
||||
<version>3.8.8</version>
|
||||
|
||||
<name>ruoyi</name>
|
||||
<url>http://www.ruoyi.vip</url>
|
||||
<description>若依管理系统</description>
|
||||
|
||||
<properties>
|
||||
<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>8</java.version>
|
||||
<maven-jar-plugin.version>3.1.1</maven-jar-plugin.version>
|
||||
<spring-framework.version>5.3.33</spring-framework.version>
|
||||
<spring-security.version>5.7.12</spring-security.version>
|
||||
<druid.version>1.2.23</druid.version>
|
||||
<bitwalker.version>1.21</bitwalker.version>
|
||||
<swagger.version>3.0.0</swagger.version>
|
||||
<kaptcha.version>2.3.3</kaptcha.version>
|
||||
<pagehelper.boot.version>1.4.7</pagehelper.boot.version>
|
||||
<fastjson.version>2.0.53</fastjson.version>
|
||||
<oshi.version>6.6.3</oshi.version>
|
||||
<commons.io.version>2.13.0</commons.io.version>
|
||||
<poi.version>4.1.2</poi.version>
|
||||
<velocity.version>2.3</velocity.version>
|
||||
<jwt.version>0.9.1</jwt.version>
|
||||
</properties>
|
||||
|
||||
<!-- 依赖声明 -->
|
||||
<dependencyManagement>
|
||||
<dependencies>
|
||||
|
||||
<!-- SpringFramework的依赖配置-->
|
||||
<dependency>
|
||||
<groupId>org.springframework</groupId>
|
||||
<artifactId>spring-framework-bom</artifactId>
|
||||
<version>${spring-framework.version}</version>
|
||||
<type>pom</type>
|
||||
<scope>import</scope>
|
||||
</dependency>
|
||||
|
||||
<!-- SpringSecurity的依赖配置-->
|
||||
<dependency>
|
||||
<groupId>org.springframework.security</groupId>
|
||||
<artifactId>spring-security-bom</artifactId>
|
||||
<version>${spring-security.version}</version>
|
||||
<type>pom</type>
|
||||
<scope>import</scope>
|
||||
</dependency>
|
||||
|
||||
<!-- SpringBoot的依赖配置-->
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-dependencies</artifactId>
|
||||
<version>2.5.15</version>
|
||||
<type>pom</type>
|
||||
<scope>import</scope>
|
||||
</dependency>
|
||||
|
||||
<!-- 阿里数据库连接池 -->
|
||||
<dependency>
|
||||
<groupId>com.alibaba</groupId>
|
||||
<artifactId>druid-spring-boot-starter</artifactId>
|
||||
<version>${druid.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- 解析客户端操作系统、浏览器等 -->
|
||||
<dependency>
|
||||
<groupId>eu.bitwalker</groupId>
|
||||
<artifactId>UserAgentUtils</artifactId>
|
||||
<version>${bitwalker.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- pagehelper 分页插件 -->
|
||||
<dependency>
|
||||
<groupId>com.github.pagehelper</groupId>
|
||||
<artifactId>pagehelper-spring-boot-starter</artifactId>
|
||||
<version>${pagehelper.boot.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- 获取系统信息 -->
|
||||
<dependency>
|
||||
<groupId>com.github.oshi</groupId>
|
||||
<artifactId>oshi-core</artifactId>
|
||||
<version>${oshi.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- Swagger3依赖 -->
|
||||
<dependency>
|
||||
<groupId>io.springfox</groupId>
|
||||
<artifactId>springfox-boot-starter</artifactId>
|
||||
<version>${swagger.version}</version>
|
||||
<exclusions>
|
||||
<exclusion>
|
||||
<groupId>io.swagger</groupId>
|
||||
<artifactId>swagger-models</artifactId>
|
||||
</exclusion>
|
||||
</exclusions>
|
||||
</dependency>
|
||||
|
||||
<!-- io常用工具类 -->
|
||||
<dependency>
|
||||
<groupId>commons-io</groupId>
|
||||
<artifactId>commons-io</artifactId>
|
||||
<version>${commons.io.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- excel工具 -->
|
||||
<dependency>
|
||||
<groupId>org.apache.poi</groupId>
|
||||
<artifactId>poi-ooxml</artifactId>
|
||||
<version>${poi.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- velocity代码生成使用模板 -->
|
||||
<dependency>
|
||||
<groupId>org.apache.velocity</groupId>
|
||||
<artifactId>velocity-engine-core</artifactId>
|
||||
<version>${velocity.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- 阿里JSON解析器 -->
|
||||
<dependency>
|
||||
<groupId>com.alibaba.fastjson2</groupId>
|
||||
<artifactId>fastjson2</artifactId>
|
||||
<version>${fastjson.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- Token生成与解析-->
|
||||
<dependency>
|
||||
<groupId>io.jsonwebtoken</groupId>
|
||||
<artifactId>jjwt</artifactId>
|
||||
<version>${jwt.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- 验证码 -->
|
||||
<dependency>
|
||||
<groupId>pro.fessional</groupId>
|
||||
<artifactId>kaptcha</artifactId>
|
||||
<version>${kaptcha.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- 定时任务-->
|
||||
<dependency>
|
||||
<groupId>com.ruoyi</groupId>
|
||||
<artifactId>ruoyi-quartz</artifactId>
|
||||
<version>${ruoyi.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- 代码生成-->
|
||||
<dependency>
|
||||
<groupId>com.ruoyi</groupId>
|
||||
<artifactId>ruoyi-generator</artifactId>
|
||||
<version>${ruoyi.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- 核心模块-->
|
||||
<dependency>
|
||||
<groupId>com.ruoyi</groupId>
|
||||
<artifactId>ruoyi-framework</artifactId>
|
||||
<version>${ruoyi.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- 系统模块-->
|
||||
<dependency>
|
||||
<groupId>com.ruoyi</groupId>
|
||||
<artifactId>ruoyi-system</artifactId>
|
||||
<version>${ruoyi.version}</version>
|
||||
</dependency>
|
||||
|
||||
<!-- 通用工具-->
|
||||
<dependency>
|
||||
<groupId>com.ruoyi</groupId>
|
||||
<artifactId>ruoyi-common</artifactId>
|
||||
<version>${ruoyi.version}</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.ruoyi</groupId>
|
||||
<artifactId>ruoyi-test</artifactId>
|
||||
<version>${ruoyi.version}</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</dependencyManagement>
|
||||
|
||||
<modules>
|
||||
<module>ruoyi-admin</module>
|
||||
<module>ruoyi-framework</module>
|
||||
<module>ruoyi-system</module>
|
||||
<module>ruoyi-quartz</module>
|
||||
<module>ruoyi-generator</module>
|
||||
<module>ruoyi-common</module>
|
||||
<module>ruoyi-test</module>
|
||||
</modules>
|
||||
<packaging>pom</packaging>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<version>3.1</version>
|
||||
<configuration>
|
||||
<source>${java.version}</source>
|
||||
<target>${java.version}</target>
|
||||
<encoding>${project.build.sourceEncoding}</encoding>
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
|
||||
<repositories>
|
||||
<repository>
|
||||
<id>public</id>
|
||||
<name>aliyun nexus</name>
|
||||
<url>https://maven.aliyun.com/repository/public</url>
|
||||
<releases>
|
||||
<enabled>true</enabled>
|
||||
</releases>
|
||||
</repository>
|
||||
</repositories>
|
||||
|
||||
<pluginRepositories>
|
||||
<pluginRepository>
|
||||
<id>public</id>
|
||||
<name>aliyun nexus</name>
|
||||
<url>https://maven.aliyun.com/repository/public</url>
|
||||
<releases>
|
||||
<enabled>true</enabled>
|
||||
</releases>
|
||||
<snapshots>
|
||||
<enabled>false</enabled>
|
||||
</snapshots>
|
||||
</pluginRepository>
|
||||
</pluginRepositories>
|
||||
|
||||
</project>
|
@ -0,0 +1,30 @@
|
||||
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" +
|
||||
" ''-' `'-' `-..-' ");
|
||||
}
|
||||
}
|
@ -0,0 +1,18 @@
|
||||
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);
|
||||
}
|
||||
}
|
@ -0,0 +1,94 @@
|
||||
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;
|
||||
}
|
||||
}
|
@ -0,0 +1,121 @@
|
||||
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();
|
||||
}
|
||||
}
|
@ -0,0 +1,27 @@
|
||||
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);
|
||||
}
|
||||
}
|
@ -0,0 +1,82 @@
|
||||
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();
|
||||
}
|
||||
}
|
@ -0,0 +1,69 @@
|
||||
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();
|
||||
}
|
||||
}
|
@ -0,0 +1,83 @@
|
||||
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();
|
||||
}
|
||||
}
|
@ -0,0 +1,133 @@
|
||||
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();
|
||||
}
|
||||
}
|
@ -0,0 +1,121 @@
|
||||
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();
|
||||
}
|
||||
}
|
@ -0,0 +1,131 @@
|
||||
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);
|
||||
}
|
||||
}
|
@ -0,0 +1,97 @@
|
||||
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));
|
||||
}
|
||||
}
|
@ -0,0 +1,91 @@
|
||||
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));
|
||||
}
|
||||
}
|
@ -0,0 +1,129 @@
|
||||
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);
|
||||
}
|
||||
}
|
@ -0,0 +1,137 @@
|
||||
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("上传图片异常,请联系管理员");
|
||||
}
|
||||
}
|
@ -0,0 +1,38 @@
|
||||
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);
|
||||
}
|
||||
}
|
@ -0,0 +1,262 @@
|
||||
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;
|
||||
}
|
||||
}
|
@ -0,0 +1,256 @@
|
||||
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)
|
||||
{
|
||||
userService.checkUserDataScope(userId);
|
||||
AjaxResult ajax = AjaxResult.success();
|
||||
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());
|
||||
if (StringUtils.isNotNull(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()));
|
||||
}
|
||||
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));
|
||||
}
|
||||
}
|
@ -0,0 +1,210 @@
|
||||
package com.ruoyi.web.controller.test;
|
||||
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.google.gson.Gson;
|
||||
import com.ruoyi.common.core.domain.R;
|
||||
import com.ruoyi.test.domain.DO.ExamCreateDO;
|
||||
import com.ruoyi.test.domain.DO.ExamDO;
|
||||
import com.ruoyi.test.domain.DO.OptionDO;
|
||||
import com.ruoyi.test.domain.DO.SingleChoiceDO;
|
||||
import com.ruoyi.test.domain.ExamCreate;
|
||||
import com.ruoyi.test.domain.Questionbank;
|
||||
import com.ruoyi.test.domain.Vo.ExamCreateVo;
|
||||
import com.ruoyi.test.domain.Vo.QuestionbankVo;
|
||||
import com.ruoyi.test.domain.Vo.QuestionbankVo1;
|
||||
import com.ruoyi.test.seriver.IExamCreateService;
|
||||
import com.ruoyi.test.seriver.IExamDOService;
|
||||
import com.ruoyi.test.seriver.IExamPaperService;
|
||||
import com.ruoyi.test.seriver.ISubjectService;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import io.swagger.models.auth.In;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Api(tags = "题库管理")
|
||||
@RestController
|
||||
@RequestMapping("/examcreate")
|
||||
public class ExamDOController {
|
||||
|
||||
@Autowired
|
||||
private IExamDOService iExamDOService;
|
||||
|
||||
@Autowired
|
||||
private IExamCreateService iExamCreateService;
|
||||
|
||||
@Autowired
|
||||
private IExamPaperService iExamPaperService;
|
||||
|
||||
@ApiOperation("题库列表")
|
||||
@GetMapping("selectList")
|
||||
public R<IPage<QuestionbankVo>> selectList(int pagenum,int pagesize){
|
||||
return R.ok(iExamDOService.selectExamDoList(pagenum,pagesize));
|
||||
}
|
||||
|
||||
@ApiOperation("预览")
|
||||
@GetMapping("preview")
|
||||
public R<QuestionbankVo1> preview(Long id){
|
||||
return R.ok(iExamDOService.preview(id));
|
||||
}
|
||||
|
||||
@ApiOperation("题目创编")
|
||||
@PostMapping("add")
|
||||
public R<String> add(@RequestBody SingleChoiceDO singleChoiceDO){
|
||||
String subject = singleChoiceDO.getSubject();
|
||||
String grade = singleChoiceDO.getGrade();
|
||||
|
||||
Long id = iExamPaperService.selectIdBySubjectAndGrade(subject,grade);
|
||||
String chance = "";
|
||||
if(singleChoiceDO.getType()==1||singleChoiceDO.getType()==2){
|
||||
List<OptionDO> optionDOS = singleChoiceDO.getList();
|
||||
Gson gson = new Gson();
|
||||
chance = gson.toJson(optionDOS);
|
||||
}
|
||||
Questionbank questionbank = new Questionbank();
|
||||
questionbank.setQuestiontype(singleChoiceDO.getType());
|
||||
questionbank.setContent(singleChoiceDO.getContent());
|
||||
questionbank.setAnswer(singleChoiceDO.getAnswer());
|
||||
questionbank.setChance(chance);
|
||||
questionbank.setDifficulty(singleChoiceDO.getDifficulty());
|
||||
questionbank.setAnalysis(singleChoiceDO.getAnalysis());
|
||||
questionbank.setScore(singleChoiceDO.getScore());
|
||||
questionbank.setSubject(singleChoiceDO.getSubject());
|
||||
if(iExamDOService.addSingleChoice(questionbank)!=0){
|
||||
return R.ok("添加成功");
|
||||
}
|
||||
return R.ok("添加失败");
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// @ApiOperation("单选创编")
|
||||
// @PostMapping("addSingleChoice")
|
||||
// public R<String> addSingleChoice(@RequestBody SingleChoiceDO singleChoiceDO){
|
||||
//
|
||||
// String subject = singleChoiceDO.getSubject();
|
||||
// String grade = singleChoiceDO.getGrade();
|
||||
//
|
||||
// Long id = iExamPaperService.selectIdBySubjectAndGrade(subject,grade);
|
||||
//
|
||||
// List<OptionDO> optionDOS = singleChoiceDO.getList();
|
||||
// Gson gson = new Gson();
|
||||
// String chance = gson.toJson(optionDOS);
|
||||
//
|
||||
// Questionbank questionbank = new Questionbank();
|
||||
// questionbank.setQuestiontype(1);
|
||||
// questionbank.setContent(singleChoiceDO.getContent());
|
||||
// questionbank.setAnswer(singleChoiceDO.getAnswer());
|
||||
// questionbank.setChance(chance);
|
||||
// questionbank.setDifficulty(singleChoiceDO.getDifficulty());
|
||||
// questionbank.setAnalysis(singleChoiceDO.getAnalysis());
|
||||
// questionbank.setScore(singleChoiceDO.getScore());
|
||||
// questionbank.setSubject(singleChoiceDO.getSubject());
|
||||
// if(iExamDOService.addSingleChoice(questionbank)!=0){
|
||||
// return R.ok("添加成功");
|
||||
// }
|
||||
// return R.ok("添加失败");
|
||||
// }
|
||||
//
|
||||
// @ApiOperation("判断创编")
|
||||
// @PostMapping("addtfQuestions")
|
||||
// public R<String> addtfQuestions(@RequestBody ExamCreateDO examCreateDO){
|
||||
//
|
||||
// String subject = examCreateDO.getSubject();
|
||||
// String grade = examCreateDO.getGrade();
|
||||
//
|
||||
// Long id = iExamPaperService.selectIdBySubjectAndGrade(subject,grade);
|
||||
//
|
||||
// Questionbank questionbank = new Questionbank();
|
||||
// questionbank.setQuestiontype(5);
|
||||
// questionbank.setContent(examCreateDO.getContent());
|
||||
// questionbank.setAnswer(examCreateDO.getAnswer());
|
||||
// questionbank.setChance(examCreateDO.getChance());
|
||||
// questionbank.setDifficulty(examCreateDO.getDifficulty());
|
||||
// questionbank.setAnalysis(examCreateDO.getAnalysis());
|
||||
// questionbank.setScore(examCreateDO.getScore());
|
||||
// questionbank.setSubject(examCreateDO.getSubject());
|
||||
// if(iExamDOService.addtfQuestions(questionbank)!=0){
|
||||
// return R.ok("添加成功");
|
||||
// }
|
||||
// return R.ok("添加失败");
|
||||
// }
|
||||
//
|
||||
// @ApiOperation("多选创编")
|
||||
// @PostMapping("addMSingleChoice")
|
||||
// public R<String> addMSingleChoice(@RequestBody SingleChoiceDO singleChoiceDO){
|
||||
//
|
||||
// String subject = singleChoiceDO.getSubject();
|
||||
// String grade = singleChoiceDO.getGrade();
|
||||
//
|
||||
// Long id = iExamPaperService.selectIdBySubjectAndGrade(subject,grade);
|
||||
//
|
||||
// List<OptionDO> optionDOS = singleChoiceDO.getList();
|
||||
// Gson gson = new Gson();
|
||||
// String chance = gson.toJson(optionDOS);
|
||||
//
|
||||
// Questionbank questionbank = new Questionbank();
|
||||
// questionbank.setQuestiontype(2);
|
||||
// questionbank.setContent(singleChoiceDO.getContent());
|
||||
// questionbank.setAnswer(singleChoiceDO.getAnswer());
|
||||
// questionbank.setChance(chance);
|
||||
// questionbank.setDifficulty(singleChoiceDO.getDifficulty());
|
||||
// questionbank.setAnalysis(singleChoiceDO.getAnalysis());
|
||||
// questionbank.setScore(singleChoiceDO.getScore());
|
||||
// questionbank.setSubject(singleChoiceDO.getSubject());
|
||||
// if(iExamDOService.addMSingleChoice(questionbank)!=0){
|
||||
// return R.ok("添加成功");
|
||||
// }
|
||||
// return R.ok("添加失败");
|
||||
// }
|
||||
//
|
||||
// @ApiOperation("填空创编")
|
||||
// @PostMapping("addGapFilling")
|
||||
// public R<String> addGapFilling(@RequestBody ExamCreateDO examCreateDO){
|
||||
//
|
||||
// String subject = examCreateDO.getSubject();
|
||||
// String grade = examCreateDO.getGrade();
|
||||
//
|
||||
// Long id = iExamPaperService.selectIdBySubjectAndGrade(subject,grade);
|
||||
//
|
||||
// Questionbank questionbank = new Questionbank();
|
||||
// questionbank.setQuestiontype(3);
|
||||
// questionbank.setContent(examCreateDO.getContent());
|
||||
// questionbank.setAnswer(examCreateDO.getAnswer());
|
||||
// questionbank.setChance(examCreateDO.getChance());
|
||||
// questionbank.setDifficulty(examCreateDO.getDifficulty());
|
||||
// questionbank.setAnalysis(examCreateDO.getAnalysis());
|
||||
// questionbank.setScore(examCreateDO.getScore());
|
||||
// questionbank.setSubject(examCreateDO.getSubject());
|
||||
// if(iExamDOService.addGapFilling(questionbank)!=0){
|
||||
// return R.ok("添加成功");
|
||||
// }
|
||||
// return R.ok("添加失败");
|
||||
// }
|
||||
//
|
||||
// @ApiOperation("解答创编")
|
||||
// @PostMapping("addfrQuestions")
|
||||
// public R<String> addfrQuestions(@RequestBody ExamCreateDO examCreateDO){
|
||||
//
|
||||
// String subject = examCreateDO.getSubject();
|
||||
// String grade = examCreateDO.getGrade();
|
||||
//
|
||||
// Long id = iExamPaperService.selectIdBySubjectAndGrade(subject,grade);
|
||||
//
|
||||
// Questionbank questionbank = new Questionbank();
|
||||
// questionbank.setQuestiontype(4);
|
||||
// questionbank.setContent(examCreateDO.getContent());
|
||||
// questionbank.setAnswer(examCreateDO.getAnswer());
|
||||
// questionbank.setChance(examCreateDO.getChance());
|
||||
// questionbank.setDifficulty(examCreateDO.getDifficulty());
|
||||
// questionbank.setAnalysis(examCreateDO.getAnalysis());
|
||||
// questionbank.setScore(examCreateDO.getScore());
|
||||
// questionbank.setSubject(examCreateDO.getSubject());
|
||||
// if(iExamDOService.addfrQuestions(questionbank)!=0){
|
||||
// return R.ok("添加成功");
|
||||
// }
|
||||
// return R.ok("添加失败");
|
||||
// }
|
||||
}
|
@ -0,0 +1,125 @@
|
||||
package com.ruoyi.web.controller.test.gl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.google.gson.Gson;
|
||||
import com.ruoyi.common.core.domain.R;
|
||||
import com.ruoyi.common.core.domain.entity.SysUser;
|
||||
import com.ruoyi.common.utils.SecurityUtils;
|
||||
import com.ruoyi.test.domain.*;
|
||||
import com.ruoyi.test.domain.DO.AnswerDO;
|
||||
import com.ruoyi.test.domain.DO.AnswerSheetDO;
|
||||
import com.ruoyi.test.domain.DO.QuestionAnswerDO;
|
||||
import com.ruoyi.test.domain.Vo.AnswerVo;
|
||||
import com.ruoyi.test.domain.Vo.QuestionanswerVo;
|
||||
import com.ruoyi.test.seriver.*;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@Api(tags = "管理端答卷管理")
|
||||
@RestController
|
||||
@RequestMapping("/gl/answerSheet")
|
||||
public class AnswerSheetController {
|
||||
|
||||
@Autowired
|
||||
private IUserService iUserService;
|
||||
|
||||
@Autowired
|
||||
private IAnswerSheetDOService iAnswerSheetDOService;
|
||||
|
||||
@Autowired
|
||||
private IAnswerService iAnswerService;
|
||||
|
||||
@Autowired
|
||||
private IExamCreateService iExamCreateService;
|
||||
|
||||
@Autowired
|
||||
private IQuestionanswerService iQuestionanswerService;
|
||||
|
||||
@Autowired
|
||||
private IMarkedtestService iMarkedtestService;
|
||||
|
||||
@ApiOperation("试卷")
|
||||
@GetMapping("testPaper")
|
||||
public R<AnswerSheetDO> testPaper(String subject, String grade, String name) {
|
||||
return R.ok(iAnswerSheetDOService.testPaper(subject, grade, name));
|
||||
}
|
||||
|
||||
@ApiOperation("答案")
|
||||
@PostMapping("answer")
|
||||
public R<String> answer(@RequestBody AnswerDO answerDO) {
|
||||
SysUser sysUser = SecurityUtils.getLoginUser().getUser();
|
||||
Long id = sysUser.getUserId();
|
||||
String sender = iUserService.user(iUserService.selectByzhid(id)).getTname();
|
||||
|
||||
List<AnswerVo> answerVos = answerDO.getList();
|
||||
Gson gson = new Gson();
|
||||
String answerVo = gson.toJson(answerVos);
|
||||
|
||||
Answer answer = new Answer();
|
||||
answer.setSender(sender);
|
||||
answer.setTestid(answerDO.getTestid());
|
||||
answer.setIdanswer(answerVo);
|
||||
answer.setTime(answerDO.getTime());
|
||||
|
||||
if (iAnswerService.answer(answer) != 0) {
|
||||
return R.ok("答案提交成功!");
|
||||
}
|
||||
return R.fail("答案提交失败!");
|
||||
}
|
||||
|
||||
//主观题自动更改
|
||||
@ApiOperation("主观题批改")
|
||||
@GetMapping("answerDisplay")
|
||||
public R<String> answerDisplay(String sender, Long id) {
|
||||
List<Questionbank> list = iExamCreateService.selectListByPid(id);
|
||||
Answer answer = iAnswerService.selectByTestId(sender, id);
|
||||
QuestionAnswerDO questionAnswerDO = iQuestionanswerService.createTest(list, answer);
|
||||
if (iQuestionanswerService.addTest(questionAnswerDO) != 0) {
|
||||
return R.ok("该学生客观题已改完!");
|
||||
}
|
||||
return R.fail("查不到该学生的考试记录!");
|
||||
}
|
||||
|
||||
|
||||
@ApiOperation("查看学生的考试情况(最新)")
|
||||
@GetMapping("selectQuestionanswer")
|
||||
public R<QuestionAnswerDO> selectQuestionanswer(String sender, Long testid) {
|
||||
return R.ok(iQuestionanswerService.selectQuestionanswer(sender,testid));
|
||||
}
|
||||
|
||||
@ApiOperation("批改客观题")
|
||||
@PostMapping("markObjectiveQuestions")
|
||||
public R<String> markObjectiveQuestions(@RequestBody QuestionAnswerDO questionAnswerDO) {
|
||||
if(iQuestionanswerService.markObjectiveQuestions(questionAnswerDO)!=0){
|
||||
return R.ok("批改完成!");
|
||||
}
|
||||
return R.fail("批改提交失败!");
|
||||
}
|
||||
|
||||
|
||||
@ApiOperation("试卷批改完毕提交")
|
||||
@PostMapping("addmarkedtest")
|
||||
public R<String> addmarkedtest(String sender,Long testid){
|
||||
if(iMarkedtestService.addmarkedtest(sender,testid)!=0){
|
||||
return R.ok("提交完成!");
|
||||
}
|
||||
return R.fail("提交失败!");
|
||||
}
|
||||
|
||||
@ApiOperation("学生成绩列表查询")
|
||||
@GetMapping("selectmarkedtest")
|
||||
public R<IPage<Markedtest>> selectmarkedtest(int pagenum){
|
||||
return R.ok(iMarkedtestService.selectmarkedtest(pagenum));
|
||||
}
|
||||
|
||||
@ApiOperation("通过学科查询学生成绩列表")
|
||||
@GetMapping("selectmarkedtestBySubject")
|
||||
public R<IPage<Markedtest>> selectmarkedtestBySubject(int pagenum,String subject){
|
||||
return R.ok(iMarkedtestService.selectmarkedtestBySubject(pagenum,subject));
|
||||
}
|
||||
}
|
@ -0,0 +1,78 @@
|
||||
package com.ruoyi.web.controller.test.gl;
|
||||
|
||||
import com.ruoyi.common.core.domain.R;
|
||||
import com.ruoyi.test.domain.DO.SubjectKnowledgeDO;
|
||||
import com.ruoyi.test.domain.KnowledgeTree;
|
||||
import com.ruoyi.test.domain.Vo.KnowledgeTreeVo;
|
||||
import com.ruoyi.test.seriver.IKnowledgeTreeService;
|
||||
import com.ruoyi.test.seriver.ISubjectKnowledgeDOService;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.apache.ibatis.annotations.Delete;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Api(tags = "管理端知识点管理")
|
||||
@RestController
|
||||
@RequestMapping("/gl/knowledgeTree")
|
||||
public class KnowledgeTreeController {
|
||||
@Autowired
|
||||
private IKnowledgeTreeService iKnowledgeTreeService;
|
||||
|
||||
@Autowired
|
||||
private ISubjectKnowledgeDOService iSubjectKnowledgeDOService;
|
||||
|
||||
// @ApiOperation("知识点列表")
|
||||
@GetMapping("selectList")
|
||||
public R<List<SubjectKnowledgeDO>> selectList(){
|
||||
return R.ok(iSubjectKnowledgeDOService.selectList());
|
||||
}
|
||||
|
||||
@ApiOperation("知识点树")
|
||||
@GetMapping("selectAll")
|
||||
public R<List<KnowledgeTree>> selectAll(String grade,String subject){
|
||||
if(grade==null||subject==null){
|
||||
return R.fail("操作失败");
|
||||
}
|
||||
return R.ok(iKnowledgeTreeService.selectAll(grade,subject));
|
||||
}
|
||||
|
||||
@ApiOperation("添加知识点")
|
||||
@PostMapping("addKnowledgeTree")
|
||||
public R<List<KnowledgeTree>> addKnowledgeTree(@RequestBody KnowledgeTreeVo knowledgeTreeVo){
|
||||
// System.out.println(knowledgeTreeVo);
|
||||
if(iKnowledgeTreeService.addKnowledgeTree(knowledgeTreeVo)>0){
|
||||
return R.ok(iKnowledgeTreeService.selectAll(knowledgeTreeVo.getGrade(),knowledgeTreeVo.getSubject()));
|
||||
}else if(iKnowledgeTreeService.addKnowledgeTree(knowledgeTreeVo)==-1){
|
||||
return R.fail("无该父节点");
|
||||
}
|
||||
return R.fail("添加失败");
|
||||
}
|
||||
|
||||
@ApiOperation("重置知识点树")
|
||||
@GetMapping("resetKnowledgeTree")
|
||||
public R<String> resetKnowledgeTree(String grade, String subject){
|
||||
if(iKnowledgeTreeService.resetKnowledgeTree(grade,subject)!=0){
|
||||
return R.ok("重置成功!");
|
||||
}
|
||||
return R.fail("重置失败!");
|
||||
}
|
||||
|
||||
//?如果删除父节点,则子节点无用,在数据库中可能造成冗余
|
||||
@ApiOperation("删除知识点树")
|
||||
@DeleteMapping("deleteKnowledgeTree")
|
||||
public R<String> deleteKnowledgeTree(String grade, String subject,Long id){
|
||||
if(iKnowledgeTreeService.deleteKnowledgeTree(grade,subject,id)!=0){
|
||||
return R.ok("删除成功!");
|
||||
}
|
||||
return R.fail("删除失败!");
|
||||
}
|
||||
|
||||
@ApiOperation("修改知识点")
|
||||
@GetMapping("update")
|
||||
public R<Integer> update(String grade,String subject,Long id,String content){
|
||||
return R.ok(iKnowledgeTreeService.update(grade,subject,id,content));
|
||||
}
|
||||
}
|
@ -0,0 +1,45 @@
|
||||
package com.ruoyi.web.controller.test.gl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.ruoyi.common.core.domain.R;
|
||||
import com.ruoyi.test.domain.Subject;
|
||||
import com.ruoyi.test.domain.Vo.SubjectVo;
|
||||
import com.ruoyi.test.seriver.ISubjectService;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Api(tags = "管理端学科管理")
|
||||
@RestController
|
||||
@RequestMapping("/gl/subject")
|
||||
public class SubjectController {
|
||||
|
||||
@Autowired
|
||||
private ISubjectService iSubjectService;
|
||||
|
||||
@ApiOperation("学科列表")
|
||||
@GetMapping("selectAll")
|
||||
public R<IPage<Subject>> selectAll(int pagenum){
|
||||
return R.ok(iSubjectService.selectAll(pagenum));
|
||||
}
|
||||
|
||||
@ApiOperation("根据年级查询学科")
|
||||
@GetMapping("selectGrade")
|
||||
public R<IPage<Subject>> selectGrade(String Grade,int pagenum){
|
||||
return R.ok(iSubjectService.selectGrade(Grade,pagenum));
|
||||
}
|
||||
|
||||
@ApiOperation("添加学科")
|
||||
@PostMapping("addSubject")
|
||||
public R<String> addSubject(@RequestBody SubjectVo subjectVo){
|
||||
if(iSubjectService.addSubject(subjectVo)==2){
|
||||
return R.fail("该年级已有该学科!");
|
||||
}else if(iSubjectService.addSubject(subjectVo)!=0){
|
||||
return R.ok("添加成功!");
|
||||
}
|
||||
return R.fail("添加失败!");
|
||||
}
|
||||
}
|
@ -0,0 +1,76 @@
|
||||
package com.ruoyi.web.controller.test.gl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.ruoyi.common.core.domain.R;
|
||||
import com.ruoyi.common.core.domain.entity.SysUser;
|
||||
import com.ruoyi.common.utils.SecurityUtils;
|
||||
import com.ruoyi.test.domain.Task;
|
||||
import com.ruoyi.test.domain.Vo.TaskVo;
|
||||
import com.ruoyi.test.seriver.ITaskService;
|
||||
import com.ruoyi.test.seriver.IUserService;
|
||||
import com.ruoyi.web.controller.tool.testTool.ResultVo;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.apache.ibatis.annotations.Delete;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Api(tags = "管理端任务管理")
|
||||
@RestController
|
||||
@RequestMapping("/gl/tesk")
|
||||
public class TaskController {
|
||||
|
||||
@Autowired
|
||||
private ITaskService iTaskService;
|
||||
|
||||
@Autowired
|
||||
private IUserService iUserService;
|
||||
|
||||
@ApiOperation("任务列表")
|
||||
@GetMapping("selectList")
|
||||
public ResultVo<IPage<Task>> selectList(int pagenum,int pagesize){
|
||||
// return R.ok(iTaskService.selectList(pagenum,pagesize));
|
||||
return ResultVo.ok(iTaskService.selectList(pagenum,pagesize));
|
||||
}
|
||||
|
||||
// @ApiOperation("根据年级获取任务列表")
|
||||
// @GetMapping("selectListByGrade")
|
||||
// public R<IPage<Task>> selectListByGrade(String grade,int pagenum){
|
||||
// return R.ok(iTaskService.selectListByGrade(grade,pagenum));
|
||||
// }
|
||||
|
||||
@ApiOperation("根据年级或学科查询任务列表")
|
||||
@GetMapping("selectListByGradeAndSubject")
|
||||
public R<IPage<Task>> selectListByGradeAndSubject(String grade,String subject,int pagenum,int pagesize){
|
||||
return R.ok(iTaskService.selectListByGradeAndSubject(grade,subject,pagenum,pagesize));
|
||||
}
|
||||
|
||||
@ApiOperation("任务创编")
|
||||
@PostMapping("addTask")
|
||||
public R<String> addTask(@RequestBody TaskVo taskVo){
|
||||
SysUser sysUser = SecurityUtils.getLoginUser().getUser();
|
||||
Long userId = sysUser.getUserId();
|
||||
String tname = iUserService.user(iUserService.selectByzhid(userId)).getTname();
|
||||
if(iTaskService.addTask(taskVo,tname)!=0){
|
||||
return R.ok("任务添加成功!");
|
||||
}
|
||||
return R.fail("任务添加失败");
|
||||
}
|
||||
|
||||
@ApiOperation("删除任务")
|
||||
@DeleteMapping("deleteTask")
|
||||
public R<String> deleteTask(Long id){
|
||||
if(iTaskService.deleteTask(id)!=0){
|
||||
return R.ok("删除成功!");
|
||||
}
|
||||
return R.fail("删除失败!");
|
||||
}
|
||||
|
||||
// @ApiOperation("根据学科获取任务列表")
|
||||
// @GetMapping("selectListBySubject")
|
||||
// public R<IPage<Task>> selectListBySubject(String subject,int pagenum){
|
||||
// return R.ok(iTaskService.selectListBySubject(subject,pagenum));
|
||||
// }
|
||||
}
|
@ -0,0 +1,158 @@
|
||||
package com.ruoyi.web.controller.test.gl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.ruoyi.common.core.domain.R;
|
||||
import com.ruoyi.common.core.domain.entity.SysUser;
|
||||
import com.ruoyi.common.utils.SecurityUtils;
|
||||
import com.ruoyi.test.domain.User;
|
||||
import com.ruoyi.test.domain.Vo.UserVo;
|
||||
import com.ruoyi.test.seriver.IUserService;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Api(tags = "管理端用户管理")
|
||||
@RestController
|
||||
@RequestMapping("/gl/users")
|
||||
public class UserController {
|
||||
@Autowired
|
||||
private IUserService iUserService;
|
||||
|
||||
/*
|
||||
获取学生列表
|
||||
*/
|
||||
@ApiOperation("学生列表")
|
||||
@GetMapping("student")
|
||||
public R<IPage<User>> selectList(int pagenum){
|
||||
return R.ok(iUserService.selectStudentList(pagenum));
|
||||
}
|
||||
/*获取学生用户名查询查询记录
|
||||
*@param name 用户名
|
||||
*/
|
||||
@ApiOperation("学生用户名查询")
|
||||
@GetMapping("/seleteStudentName")
|
||||
public R<IPage<User>> selectStudent(int pagenum,String name){
|
||||
return R.ok(iUserService.selectStudent(pagenum,name));
|
||||
}
|
||||
|
||||
/*增加学生用户信息
|
||||
*@param name 用户名
|
||||
*/
|
||||
@ApiOperation("学生添加用户")
|
||||
@PostMapping("/insertStudent")
|
||||
public R<String> inserStudent(@RequestBody UserVo userVo){
|
||||
User user = new User();
|
||||
user.setAge(userVo.getAge());
|
||||
user.setBirthday(userVo.getBirthday());
|
||||
user.setGrade(userVo.getGrade());
|
||||
user.setSex(userVo.getSex());
|
||||
user.setName(userVo.getName());
|
||||
user.setTname(userVo.getTname());
|
||||
user.setTelephone(userVo.getTelephone());
|
||||
user.setRoleKey("2");
|
||||
user.setState(0L);
|
||||
SysUser sysUser = SecurityUtils.getLoginUser().getUser();
|
||||
Long zhid = sysUser.getUserId();
|
||||
user.setZhId(zhid);
|
||||
List<User> list = iUserService.selectStudentByZhid(zhid);
|
||||
if(list.size()==0){
|
||||
if(iUserService.insertUser(user)!=0){
|
||||
return R.ok("添加成功!");
|
||||
}else{
|
||||
return R.fail("添加失败!");
|
||||
}
|
||||
}
|
||||
return R.fail("该账号已绑定用户了!");
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ApiOperation("教师列表")
|
||||
@GetMapping("/teacher")
|
||||
public R<IPage<User>> selectTeacher(int pagenum){
|
||||
return R.ok(iUserService.selectTeacherList(pagenum));
|
||||
}
|
||||
/*获取教师用户名查询查询记录
|
||||
*@param name 用户名
|
||||
*/
|
||||
@ApiOperation("教师用户名查询")
|
||||
@GetMapping("/seleteTeacherName")
|
||||
public R<IPage<User>> selectTeacher(int pagenum,String name){
|
||||
return R.ok(iUserService.selectTeacher(pagenum,name));
|
||||
}
|
||||
/*增加教师用户信息
|
||||
*@param name 用户名
|
||||
*/
|
||||
@ApiOperation("老师添加用户")
|
||||
@PostMapping("/insertTeacher")
|
||||
public R<String> insertTeacher(@RequestBody UserVo userVo){
|
||||
User user = new User();
|
||||
user.setAge(userVo.getAge());
|
||||
user.setBirthday(userVo.getBirthday());
|
||||
user.setGrade(userVo.getGrade());
|
||||
user.setSex(userVo.getSex());
|
||||
user.setName(userVo.getName());
|
||||
user.setTname(userVo.getTname());
|
||||
user.setTelephone(userVo.getTelephone());
|
||||
user.setRoleKey("3");
|
||||
user.setState(0L);
|
||||
SysUser sysUser = SecurityUtils.getLoginUser().getUser();
|
||||
Long zhid = sysUser.getUserId();
|
||||
user.setZhId(zhid);
|
||||
List<User> list = iUserService.selectStudentByZhid(zhid);
|
||||
if(list.size()==0){
|
||||
if(iUserService.insertUser(user)!=0){
|
||||
return R.ok("添加成功!");
|
||||
}else{
|
||||
return R.fail("添加失败!");
|
||||
}
|
||||
}
|
||||
return R.fail("该账号已绑定用户了!");
|
||||
}
|
||||
|
||||
@ApiOperation("管理员列表")
|
||||
@GetMapping("/Gl")
|
||||
public R<IPage<User>> selectGl(int pagenum){
|
||||
return R.ok(iUserService.selectGlList(pagenum));
|
||||
}
|
||||
/*获取管理员用户名查询查询记录
|
||||
*@param name 用户名
|
||||
*/
|
||||
@ApiOperation("管理员用户名查询")
|
||||
@GetMapping("/seleteGlName")
|
||||
public R<IPage<User>> selectGl(int pagenum,String name){
|
||||
return R.ok(iUserService.selectGl(pagenum,name));
|
||||
}
|
||||
/*增加管理员用户信息
|
||||
*@param name 用户名
|
||||
*/
|
||||
@ApiOperation("管理员添加用户")
|
||||
@PostMapping("/insertGl")
|
||||
public R<String> insertGl(@RequestBody UserVo userVo){
|
||||
User user = new User();
|
||||
user.setAge(userVo.getAge());
|
||||
user.setBirthday(userVo.getBirthday());
|
||||
user.setGrade(userVo.getGrade());
|
||||
user.setSex(userVo.getSex());
|
||||
user.setName(userVo.getName());
|
||||
user.setTname(userVo.getTname());
|
||||
user.setTelephone(userVo.getTelephone());
|
||||
user.setRoleKey("4");
|
||||
user.setState(0L);
|
||||
SysUser sysUser = SecurityUtils.getLoginUser().getUser();
|
||||
Long zhid = sysUser.getUserId();
|
||||
user.setZhId(zhid);
|
||||
List<User> list = iUserService.selectStudentByZhid(zhid);
|
||||
if(list.size()==0){
|
||||
if(iUserService.insertUser(user)!=0){
|
||||
return R.ok("添加成功!");
|
||||
}else{
|
||||
return R.fail("添加失败!");
|
||||
}
|
||||
}
|
||||
return R.fail("该账号已绑定用户了!");
|
||||
}
|
||||
}
|
@ -0,0 +1,52 @@
|
||||
package com.ruoyi.web.controller.test.gl;
|
||||
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.ruoyi.common.core.domain.R;
|
||||
import com.ruoyi.test.domain.Video;
|
||||
import com.ruoyi.test.domain.Vo.VideoVo;
|
||||
import com.ruoyi.test.seriver.IVideoService;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.apache.ibatis.annotations.Delete;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
@Api(tags = "管理端视频管理")
|
||||
@RestController
|
||||
@RequestMapping("/gl/video")
|
||||
public class VideoController {
|
||||
@Autowired
|
||||
private IVideoService iVideoService;
|
||||
|
||||
@ApiOperation("视频列表")
|
||||
@GetMapping("selectList")
|
||||
public R<IPage<Video>> selectList(int pagenum){
|
||||
return R.ok(iVideoService.selectList(pagenum));
|
||||
}
|
||||
|
||||
@ApiOperation("根据年级获取视频列表")
|
||||
@GetMapping("selectListByGrate")
|
||||
public R<IPage<Video>> selectListByGrate(String grade,int pagenum){
|
||||
return R.ok(iVideoService.selectListByGrate(grade,pagenum));
|
||||
}
|
||||
|
||||
@ApiOperation("删除视频")
|
||||
@DeleteMapping("deleteVideo")
|
||||
public R<String> deleteVideo(Long id){
|
||||
if(iVideoService.deleteVideo(id)!=0){
|
||||
return R.ok("删除成功!");
|
||||
}
|
||||
return R.fail("删除失败!");
|
||||
}
|
||||
|
||||
@ApiOperation("视频创编")
|
||||
@PostMapping("addVideo")
|
||||
public R<String> addVideo(@RequestBody VideoVo videoVo){
|
||||
if(iVideoService.addVideo(videoVo)!=0){
|
||||
return R.ok("创建成功!");
|
||||
}
|
||||
return R.fail("创建失败");
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,80 @@
|
||||
package com.ruoyi.web.controller.test.student;
|
||||
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.ruoyi.common.core.domain.R;
|
||||
import com.ruoyi.common.core.domain.entity.SysUser;
|
||||
import com.ruoyi.common.utils.SecurityUtils;
|
||||
import com.ruoyi.test.domain.Errorbook;
|
||||
import com.ruoyi.test.domain.Questionbank;
|
||||
import com.ruoyi.test.domain.Vo.ErrorbookVo;
|
||||
import com.ruoyi.test.seriver.IErrorbookService;
|
||||
import com.ruoyi.test.seriver.IMarkedtestService;
|
||||
import com.ruoyi.test.seriver.IQuestionbankService;
|
||||
import com.ruoyi.test.seriver.IUserService;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
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.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
@Api(tags = "学生端错题管理")
|
||||
@RestController
|
||||
@RequestMapping("student/errorBook")
|
||||
public class StudentErrorBookController {
|
||||
|
||||
@Autowired
|
||||
private IUserService iUserService;
|
||||
|
||||
@Autowired
|
||||
private IMarkedtestService iMarkedtestService;
|
||||
|
||||
@Autowired
|
||||
private IErrorbookService iErrorbookService;
|
||||
|
||||
@Autowired
|
||||
private IQuestionbankService iQuestionbankService;
|
||||
|
||||
@ApiOperation("新增错题")
|
||||
@GetMapping("addErrorBook")
|
||||
public R<String> addErrorBook(Long qid){
|
||||
SysUser sysUser = SecurityUtils.getLoginUser().getUser();
|
||||
Long id = sysUser.getUserId();
|
||||
String sender = iUserService.user(iUserService.selectByzhid(id)).getTname();
|
||||
Questionbank questionbank = iQuestionbankService.selectById(qid);
|
||||
Errorbook errorbook = new Errorbook();
|
||||
errorbook.setSender(sender);
|
||||
errorbook.setContent(questionbank.getContent());
|
||||
errorbook.setChance(questionbank.getChance());
|
||||
errorbook.setDifficulty(questionbank.getDifficulty());
|
||||
errorbook.setAnalysis(questionbank.getAnalysis());
|
||||
errorbook.setAnswer(questionbank.getAnswer());
|
||||
errorbook.setSubject(questionbank.getSubject());
|
||||
errorbook.setType(questionbank.getQuestiontype());
|
||||
errorbook.setScore(questionbank.getScore());
|
||||
if(iErrorbookService.addErrorBook(errorbook)!=0){
|
||||
return R.ok("错题添加成功!");
|
||||
}
|
||||
return R.fail("错题添加失败!");
|
||||
}
|
||||
|
||||
@ApiOperation("查询错题")
|
||||
@GetMapping("selectErrorBook")
|
||||
public R<IPage<ErrorbookVo>> selectErrorBook(int pagenum){
|
||||
SysUser sysUser = SecurityUtils.getLoginUser().getUser();
|
||||
Long id = sysUser.getUserId();
|
||||
String sender = iUserService.user(iUserService.selectByzhid(id)).getTname();
|
||||
return R.ok(iErrorbookService.selectErrorBook(pagenum,sender));
|
||||
}
|
||||
|
||||
@ApiOperation("查询错题(根据学科)")
|
||||
@GetMapping("selectErrorBookBySubject")
|
||||
public R<IPage<ErrorbookVo>> selectErrorBookBySubject(int pagenum,String subject){
|
||||
SysUser sysUser = SecurityUtils.getLoginUser().getUser();
|
||||
Long id = sysUser.getUserId();
|
||||
String sender = iUserService.user(iUserService.selectByzhid(id)).getTname();
|
||||
return R.ok(iErrorbookService.selectErrorBookBySubject(pagenum,sender,subject));
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,164 @@
|
||||
package com.ruoyi.web.controller.test.student;
|
||||
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.ruoyi.common.core.domain.R;
|
||||
import com.ruoyi.common.core.domain.entity.SysUser;
|
||||
import com.ruoyi.common.utils.SecurityUtils;
|
||||
import com.ruoyi.test.domain.*;
|
||||
import com.ruoyi.test.domain.DO.ExamPaperDO1;
|
||||
import com.ruoyi.test.seriver.*;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@Api(tags = "学生端试卷中心")
|
||||
@RestController
|
||||
@RequestMapping("/student/examPaper")
|
||||
public class StudentExamPaperController {
|
||||
|
||||
@Autowired
|
||||
private IUserService iUserService;
|
||||
|
||||
@Autowired
|
||||
private IStudentClassService iStudentClassService;
|
||||
|
||||
@Autowired
|
||||
private IClassExamPaperService iClassExamPaperService;
|
||||
|
||||
@Autowired
|
||||
private IExamPaperService iExamPaperService;
|
||||
|
||||
@Autowired
|
||||
private IExamCreateService iExamCreateService;
|
||||
|
||||
@ApiOperation("试卷查询")
|
||||
@GetMapping("examPaperByTypeAndSubject")
|
||||
public R<IPage<ExamPaperDO1>> examPaperByTypeAndSubject(int pagenum,int pagesize,String type,String subject){
|
||||
SysUser sysUser = SecurityUtils.getLoginUser().getUser();
|
||||
Long id = sysUser.getUserId();
|
||||
Long userid = iUserService.selectByzhid(id);
|
||||
StudentClass studentClass = iStudentClassService.selectById(userid);
|
||||
if(studentClass==null){
|
||||
return R.fail("你还没有班级或你不是学生");
|
||||
}
|
||||
String grade = studentClass.getGrade();
|
||||
String Class1 = studentClass.getClass1();
|
||||
List<ClassExamPaper> list = iClassExamPaperService.selectByGradeAndClass(grade,Class1);
|
||||
List<ExamPaperDO1> list1 = new ArrayList<>();
|
||||
for(ClassExamPaper classExamPaper : list ){
|
||||
ExamPaper examPaper = iExamPaperService.selectById(classExamPaper.getId());
|
||||
if(type!=null&&!examPaper.getType().equals(type)){
|
||||
continue;
|
||||
}
|
||||
if(subject!=null&&!examPaper.getSubject().equals(subject)){
|
||||
continue;
|
||||
}
|
||||
ExamPaperDO1 examPaperDO1 = new ExamPaperDO1();
|
||||
examPaperDO1.setName(examPaper.getName());
|
||||
examPaperDO1.setTime(examPaper.getTime());
|
||||
examPaperDO1.setSubject(examPaper.getSubject());
|
||||
examPaperDO1.setStart_time(null);
|
||||
examPaperDO1.setEnd_time(null);
|
||||
Long testid = examPaper.getId();
|
||||
List<Questionbank> list2 = iExamCreateService.selectListByPid(testid);
|
||||
examPaperDO1.setTotalquestion(list2.size());
|
||||
Double total=0.0;
|
||||
for(Questionbank questionbank : list2){
|
||||
total+=questionbank.getScore();
|
||||
}
|
||||
examPaperDO1.setTotalscore(total);
|
||||
list1.add(examPaperDO1);
|
||||
}
|
||||
Page<ExamPaperDO1> page = new Page<>(pagenum,pagesize);
|
||||
IPage<ExamPaperDO1> iPage = new Page<>(page.getCurrent(),page.getSize(),page.getTotal());
|
||||
iPage.setRecords(list1);
|
||||
return R.ok(iPage);
|
||||
}
|
||||
|
||||
|
||||
// @ApiOperation("试卷查询(试卷类型查询)")
|
||||
// @GetMapping("examPaperByType")
|
||||
// public R<IPage<ExamPaperDO1>> examPaperByType(int pagenum,String type){
|
||||
// SysUser sysUser = SecurityUtils.getLoginUser().getUser();
|
||||
// Long id = sysUser.getUserId();
|
||||
// Long userid = iUserService.selectByzhid(id);
|
||||
// StudentClass studentClass = iStudentClassService.selectById(userid);
|
||||
// String grade = studentClass.getGrade();
|
||||
// String Class1 = studentClass.getClass1();
|
||||
// List<ClassExamPaper> list = iClassExamPaperService.selectByGradeAndClass(grade,Class1);
|
||||
// List<ExamPaperDO1> list1 = new ArrayList<>();
|
||||
// for(ClassExamPaper classExamPaper : list ){
|
||||
// ExamPaper examPaper = iExamPaperService.selectById(classExamPaper.getId());
|
||||
// if(!examPaper.getType().equals(type)){
|
||||
// continue;
|
||||
// }
|
||||
// ExamPaperDO1 examPaperDO1 = new ExamPaperDO1();
|
||||
// examPaperDO1.setName(examPaper.getName());
|
||||
// examPaperDO1.setTime(examPaper.getTime());
|
||||
// examPaperDO1.setSubject(examPaper.getSubject());
|
||||
// examPaperDO1.setStart_time(null);
|
||||
// examPaperDO1.setEnd_time(null);
|
||||
// Long testid = examPaper.getId();
|
||||
// List<Questionbank> list2 = iExamCreateService.selectListByPid(testid);
|
||||
// examPaperDO1.setTotalquestion(list2.size());
|
||||
// Double total=0.0;
|
||||
// for(Questionbank questionbank : list2){
|
||||
// total+=questionbank.getScore();
|
||||
// }
|
||||
// examPaperDO1.setTotalscore(total);
|
||||
// list1.add(examPaperDO1);
|
||||
// }
|
||||
// Page<ExamPaperDO1> page = new Page<>(pagenum,10);
|
||||
// IPage<ExamPaperDO1> iPage = new Page<>(page.getCurrent(),page.getSize(),page.getTotal());
|
||||
// iPage.setRecords(list1);
|
||||
// return R.ok(iPage);
|
||||
// }
|
||||
//
|
||||
// @ApiOperation("试卷查询(学科查询)")
|
||||
// @GetMapping("examPaperBySubject")
|
||||
// public R<IPage<ExamPaperDO1>> examPaperBySubject(int pagenum,String subject){
|
||||
// SysUser sysUser = SecurityUtils.getLoginUser().getUser();
|
||||
// Long id = sysUser.getUserId();
|
||||
// Long userid = iUserService.selectByzhid(id);
|
||||
// StudentClass studentClass = iStudentClassService.selectById(userid);
|
||||
// String grade = studentClass.getGrade();
|
||||
// String Class1 = studentClass.getClass1();
|
||||
// List<ClassExamPaper> list = iClassExamPaperService.selectByGradeAndClass(grade,Class1);
|
||||
// List<ExamPaperDO1> list1 = new ArrayList<>();
|
||||
// for(ClassExamPaper classExamPaper : list ){
|
||||
// ExamPaper examPaper = iExamPaperService.selectById(classExamPaper.getId());
|
||||
// if(!examPaper.getSubject().equals(subject)){
|
||||
// continue;
|
||||
// }
|
||||
// ExamPaperDO1 examPaperDO1 = new ExamPaperDO1();
|
||||
// examPaperDO1.setName(examPaper.getName());
|
||||
// examPaperDO1.setTime(examPaper.getTime());
|
||||
// examPaperDO1.setSubject(examPaper.getSubject());
|
||||
// examPaperDO1.setStart_time(null);
|
||||
// examPaperDO1.setEnd_time(null);
|
||||
// Long testid = examPaper.getId();
|
||||
// List<Questionbank> list2 = iExamCreateService.selectListByPid(testid);
|
||||
// examPaperDO1.setTotalquestion(list2.size());
|
||||
// Double total=0.0;
|
||||
// for(Questionbank questionbank : list2){
|
||||
// total+=questionbank.getScore();
|
||||
// }
|
||||
// examPaperDO1.setTotalscore(total);
|
||||
// list1.add(examPaperDO1);
|
||||
// }
|
||||
// Page<ExamPaperDO1> page = new Page<>(pagenum,10);
|
||||
// IPage<ExamPaperDO1> iPage = new Page<>(page.getCurrent(),page.getSize(),page.getTotal());
|
||||
// iPage.setRecords(list1);
|
||||
// return R.ok(iPage);
|
||||
// }
|
||||
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,142 @@
|
||||
package com.ruoyi.web.controller.test.student;
|
||||
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.ruoyi.common.core.domain.R;
|
||||
import com.ruoyi.common.core.domain.entity.SysUser;
|
||||
import com.ruoyi.common.utils.SecurityUtils;
|
||||
import com.ruoyi.test.domain.*;
|
||||
import com.ruoyi.test.domain.DO.CorrectionDO;
|
||||
import com.ruoyi.test.domain.DO.QuestionbankDO1;
|
||||
import com.ruoyi.test.seriver.*;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@Api(tags = "学生端考试记录管理")
|
||||
@RestController
|
||||
@RequestMapping("/student/examRecord")
|
||||
public class StudentExamRecordController {
|
||||
|
||||
@Autowired
|
||||
private IUserService iUserService;
|
||||
|
||||
@Autowired
|
||||
private IClassExamPaperService iClassExamPaperService;
|
||||
|
||||
@Autowired
|
||||
private IClass1Service iClass1Service;
|
||||
|
||||
@Autowired
|
||||
private IAnswerService iAnswerService;
|
||||
|
||||
@Autowired
|
||||
private IExamPaperService iExamPaperService;
|
||||
|
||||
@Autowired
|
||||
private IExamCreateService iExamCreateService;
|
||||
|
||||
@Autowired
|
||||
private IMarkedtestService iMarkedtestService;
|
||||
|
||||
@Autowired
|
||||
private IQuestionbankService iQuestionbankService;
|
||||
|
||||
@ApiOperation("试卷批改情况")
|
||||
@GetMapping("correction")
|
||||
public R<IPage<CorrectionDO>> correction(int pagenum,int pagesize){
|
||||
SysUser sysUser = SecurityUtils.getLoginUser().getUser();
|
||||
Long id = sysUser.getUserId();
|
||||
String sender = iUserService.user(iUserService.selectByzhid(id)).getTname();
|
||||
List<Answer> list = iAnswerService.selectBySender(sender);
|
||||
List<CorrectionDO> list1 = new ArrayList<>();
|
||||
for(Answer answer : list){
|
||||
CorrectionDO correctionDO = new CorrectionDO();
|
||||
correctionDO.setFinishtime(answer.getFinishtime());
|
||||
correctionDO.setTime(answer.getTime());
|
||||
Long testid = answer.getTestid();
|
||||
ExamPaper examPaper = iExamPaperService.selectById(testid);
|
||||
correctionDO.setSubject(examPaper.getSubject());
|
||||
correctionDO.setType(examPaper.getType());
|
||||
correctionDO.setName(examPaper.getName());
|
||||
if(iMarkedtestService.selectmarkedtestBySenderAndTestid(sender,testid)!=null){
|
||||
Markedtest markedtest = iMarkedtestService.selectmarkedtestBySenderAndTestid(sender,testid);
|
||||
correctionDO.setTotalscore(markedtest.getTotalscore());
|
||||
correctionDO.setScore(markedtest.getScore());
|
||||
correctionDO.setTotalquestions(markedtest.getTotalquestions());
|
||||
correctionDO.setTquestions(markedtest.getTquestions());
|
||||
correctionDO.setState(0);
|
||||
}else{
|
||||
List<Questionbank> list2 = iExamCreateService.selectListByPid(testid);
|
||||
correctionDO.setTotalquestions(list2.size());
|
||||
Double total = 0.0;
|
||||
for(Questionbank questionbank : list2){
|
||||
total +=questionbank.getScore();
|
||||
}
|
||||
correctionDO.setTotalscore(total);
|
||||
correctionDO.setScore(null);
|
||||
correctionDO.setTquestions(null);
|
||||
correctionDO.setState(1);
|
||||
}
|
||||
list1.add(correctionDO);
|
||||
}
|
||||
Page<CorrectionDO> page = new Page<>(pagenum,pagesize);
|
||||
IPage<CorrectionDO> iPage = new Page<>(page.getCurrent(),page.getSize(),page.getTotal());
|
||||
iPage.setRecords(list1);
|
||||
return R.ok(iPage);
|
||||
}
|
||||
|
||||
@ApiOperation("试卷批改情况")
|
||||
@GetMapping("correctionBySubject")
|
||||
public R<IPage<CorrectionDO>> correctionBySubject(int pagenum,String subject){
|
||||
SysUser sysUser = SecurityUtils.getLoginUser().getUser();
|
||||
Long id = sysUser.getUserId();
|
||||
String sender = iUserService.user(iUserService.selectByzhid(id)).getTname();
|
||||
List<Answer> list = iAnswerService.selectBySender(sender);
|
||||
List<CorrectionDO> list1 = new ArrayList<>();
|
||||
for(Answer answer : list){
|
||||
Long testid = answer.getTestid();
|
||||
ExamPaper examPaper = iExamPaperService.selectById(testid);
|
||||
if(!examPaper.getSubject().equals(subject)){
|
||||
continue;
|
||||
}
|
||||
CorrectionDO correctionDO = new CorrectionDO();
|
||||
correctionDO.setFinishtime(answer.getFinishtime());
|
||||
correctionDO.setTime(answer.getTime());
|
||||
correctionDO.setSubject(examPaper.getSubject());
|
||||
correctionDO.setType(examPaper.getType());
|
||||
correctionDO.setName(examPaper.getName());
|
||||
if(iMarkedtestService.selectmarkedtestBySenderAndTestid(sender,testid)!=null){
|
||||
Markedtest markedtest = iMarkedtestService.selectmarkedtestBySenderAndTestid(sender,testid);
|
||||
correctionDO.setTotalscore(markedtest.getTotalscore());
|
||||
correctionDO.setScore(markedtest.getScore());
|
||||
correctionDO.setTotalquestions(markedtest.getTotalquestions());
|
||||
correctionDO.setTquestions(markedtest.getTquestions());
|
||||
correctionDO.setState(0);
|
||||
}else{
|
||||
List<Questionbank> list2 = iExamCreateService.selectListByPid(testid);
|
||||
correctionDO.setTotalquestions(list2.size());
|
||||
Double total = 0.0;
|
||||
for(Questionbank questionbank : list2){
|
||||
total +=questionbank.getScore();
|
||||
}
|
||||
correctionDO.setTotalscore(total);
|
||||
correctionDO.setScore(null);
|
||||
correctionDO.setTquestions(null);
|
||||
correctionDO.setState(1);
|
||||
}
|
||||
list1.add(correctionDO);
|
||||
}
|
||||
Page<CorrectionDO> page = new Page<>(pagenum,10);
|
||||
IPage<CorrectionDO> iPage = new Page<>(page.getCurrent(),page.getSize(),page.getTotal());
|
||||
iPage.setRecords(list1);
|
||||
return R.ok(iPage);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,117 @@
|
||||
package com.ruoyi.web.controller.test.student;
|
||||
|
||||
import com.google.gson.Gson;
|
||||
import com.ruoyi.common.core.domain.R;
|
||||
import com.ruoyi.common.core.domain.entity.SysUser;
|
||||
import com.ruoyi.common.utils.SecurityUtils;
|
||||
import com.ruoyi.test.domain.Answer;
|
||||
import com.ruoyi.test.domain.DO.AnswerDO;
|
||||
import com.ruoyi.test.domain.DO.AnswerSheetDO;
|
||||
import com.ruoyi.test.domain.DO.QuestionAnswerDO;
|
||||
import com.ruoyi.test.domain.Markedtest;
|
||||
import com.ruoyi.test.domain.Questionbank;
|
||||
import com.ruoyi.test.domain.Vo.AnswerVo;
|
||||
import com.ruoyi.test.seriver.*;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Api(tags = "学生端主页")
|
||||
@RestController
|
||||
@RequestMapping("/student/homepage")
|
||||
public class StudentHomePageController {
|
||||
|
||||
@Autowired
|
||||
private IUserService iUserService;
|
||||
|
||||
@Autowired
|
||||
private IAnswerService iAnswerService;
|
||||
|
||||
@Autowired
|
||||
private IMarkedtestService iMarkedtestService;
|
||||
|
||||
@Autowired
|
||||
private IAnswerSheetDOService iAnswerSheetDOService;
|
||||
|
||||
@Autowired
|
||||
private IQuestionanswerService iQuestionanswerService;
|
||||
|
||||
@Autowired
|
||||
private IExamCreateService iExamCreateService;
|
||||
|
||||
|
||||
@ApiOperation("试卷")
|
||||
@GetMapping("task_paper")
|
||||
public R<AnswerSheetDO> testPaper(String subject, String grade, String name) {
|
||||
return R.ok(iAnswerSheetDOService.testPaper(subject, grade, name));
|
||||
}
|
||||
|
||||
@ApiOperation("任务中心答题")
|
||||
@PostMapping("task_answer")
|
||||
public R<String> taskAnswer(@RequestBody AnswerDO answerDO){
|
||||
SysUser sysUser = SecurityUtils.getLoginUser().getUser();
|
||||
Long id = sysUser.getUserId();
|
||||
String sender = iUserService.user(iUserService.selectByzhid(id)).getTname();
|
||||
List<AnswerVo> answerVos = answerDO.getList();
|
||||
Gson gson = new Gson();
|
||||
String answerVo = gson.toJson(answerVos);
|
||||
|
||||
Answer answer = new Answer();
|
||||
answer.setSender(sender);
|
||||
answer.setTestid(answerDO.getTestid());
|
||||
answer.setIdanswer(answerVo);
|
||||
answer.setTime(answerDO.getTime());
|
||||
|
||||
if (iAnswerService.answer(answer) != 0) {
|
||||
return R.ok("答案提交成功!");
|
||||
}
|
||||
return R.fail("答案提交失败!");
|
||||
}
|
||||
|
||||
@ApiOperation("任务中心分数")
|
||||
@PostMapping("task_score")
|
||||
public R<Double> taskScore(Long testid){
|
||||
SysUser sysUser = SecurityUtils.getLoginUser().getUser();
|
||||
Long id = sysUser.getUserId();
|
||||
String sender = iUserService.user(iUserService.selectByzhid(id)).getTname();
|
||||
return R.ok(iMarkedtestService.selectmarkedtestBySenderAndTestid(sender,testid).getScore());
|
||||
}
|
||||
|
||||
@ApiOperation("查看学生的考试情况(最新)")
|
||||
@GetMapping("selectQuestionanswer")
|
||||
public R<QuestionAnswerDO> selectQuestionanswer(Long testid) {
|
||||
SysUser sysUser = SecurityUtils.getLoginUser().getUser();
|
||||
Long id = sysUser.getUserId();
|
||||
String sender = iUserService.user(iUserService.selectByzhid(id)).getTname();
|
||||
return R.ok(iQuestionanswerService.selectQuestionanswer(sender,testid));
|
||||
}
|
||||
|
||||
//主观题自动更改
|
||||
@ApiOperation("任务中心主观题批改")
|
||||
@GetMapping("task_answerDisplay")
|
||||
public R<String> taskAnswerDisplay(Long id) {
|
||||
SysUser sysUser = SecurityUtils.getLoginUser().getUser();
|
||||
Long id1 = sysUser.getUserId();
|
||||
String sender = iUserService.user(iUserService.selectByzhid(id1)).getTname();
|
||||
List<Questionbank> list = iExamCreateService.selectListByPid(id);
|
||||
Answer answer = iAnswerService.selectByTestId(sender, id);
|
||||
QuestionAnswerDO questionAnswerDO = iQuestionanswerService.createTest(list, answer);
|
||||
if (iQuestionanswerService.addTest(questionAnswerDO) != 0) {
|
||||
return R.ok("该学生客观题已改完!");
|
||||
}
|
||||
return R.fail("查不到该学生的考试记录!");
|
||||
}
|
||||
|
||||
@ApiOperation("任务中心批改客观题")
|
||||
@PostMapping("task_markObjectiveQuestions")
|
||||
public R<String> taskMarkObjectiveQuestions(@RequestBody QuestionAnswerDO questionAnswerDO) {
|
||||
if(iQuestionanswerService.markObjectiveQuestions(questionAnswerDO)!=0){
|
||||
return R.ok("批改完成!");
|
||||
}
|
||||
return R.fail("批改提交失败!");
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,17 @@
|
||||
package com.ruoyi.web.controller.test.student;
|
||||
|
||||
import com.ruoyi.test.seriver.IClassExamPaperService;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
@Api(tags = "学生端智慧训练")
|
||||
@RestController
|
||||
@RequestMapping("/student/intellectual")
|
||||
public class StudentIntellectualController {
|
||||
@Autowired
|
||||
private IClassExamPaperService iClassExamPaperService ;
|
||||
|
||||
}
|
@ -0,0 +1,89 @@
|
||||
package com.ruoyi.web.controller.test.student;
|
||||
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.ruoyi.common.core.domain.R;
|
||||
import com.ruoyi.common.core.domain.entity.SysUser;
|
||||
import com.ruoyi.common.utils.SecurityUtils;
|
||||
import com.ruoyi.test.domain.ClassVedio;
|
||||
import com.ruoyi.test.domain.StudentClass;
|
||||
import com.ruoyi.test.domain.Video;
|
||||
import com.ruoyi.test.seriver.IClassVedioService;
|
||||
import com.ruoyi.test.seriver.IStudentClassService;
|
||||
import com.ruoyi.test.seriver.IUserService;
|
||||
import com.ruoyi.test.seriver.IVideoService;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@Api(tags = "学生端视频课堂")
|
||||
@RestController
|
||||
@RequestMapping("/student/video")
|
||||
public class StudentVideoController {
|
||||
|
||||
@Autowired
|
||||
private IUserService iUserService;
|
||||
|
||||
@Autowired
|
||||
private IStudentClassService iStudentClassService;
|
||||
|
||||
@Autowired
|
||||
private IClassVedioService iClassVedioService;
|
||||
|
||||
@Autowired
|
||||
private IVideoService iVideoService;
|
||||
|
||||
@ApiOperation("视频列表")
|
||||
@GetMapping("vedioList")
|
||||
public R<IPage<Video>> vedioList(int pagenum,int pagesize){
|
||||
SysUser sysUser = SecurityUtils.getLoginUser().getUser();
|
||||
Long id = sysUser.getUserId();
|
||||
Long userId = iUserService.user(iUserService.selectByzhid(id)).getUserId();
|
||||
StudentClass studentClass = iStudentClassService.selectById(userId);
|
||||
String grade = studentClass.getGrade();
|
||||
String Class1 = studentClass.getClass1();
|
||||
List<ClassVedio> list= iClassVedioService.selectClassVideo(grade,Class1);
|
||||
List<Video> list1 = new ArrayList<>();
|
||||
for(ClassVedio classVedio : list) {
|
||||
Long vedioid = classVedio.getVideoid();
|
||||
Video video = iVideoService.video(vedioid);
|
||||
list1.add(video);
|
||||
}
|
||||
Page<Video> page = new Page<>(pagenum,pagesize);
|
||||
IPage<Video> iPage = new Page<>(page.getCurrent(),page.getSize(),page.getTotal());
|
||||
iPage.setRecords(list1);
|
||||
return R.ok(iPage);
|
||||
}
|
||||
|
||||
@ApiOperation("视频列表")
|
||||
@GetMapping("vedioListBySubject")
|
||||
public R<IPage<Video>> vedioListBySubject(int pagenum,String subject,int pagesize){
|
||||
SysUser sysUser = SecurityUtils.getLoginUser().getUser();
|
||||
Long id = sysUser.getUserId();
|
||||
Long userId = iUserService.user(iUserService.selectByzhid(id)).getUserId();
|
||||
StudentClass studentClass = iStudentClassService.selectById(userId);
|
||||
String grade = studentClass.getGrade();
|
||||
String Class1 = studentClass.getClass1();
|
||||
List<ClassVedio> list= iClassVedioService.selectClassVideo(grade,Class1);
|
||||
List<Video> list1 = new ArrayList<>();
|
||||
for(ClassVedio classVedio : list) {
|
||||
Long vedioid = classVedio.getVideoid();
|
||||
Video video = iVideoService.video(vedioid);
|
||||
if(!video.getSubject().equals(subject)){
|
||||
continue;
|
||||
}
|
||||
list1.add(video);
|
||||
}
|
||||
Page<Video> page = new Page<>(pagenum,pagesize);
|
||||
IPage<Video> iPage = new Page<>(page.getCurrent(),page.getSize(),page.getTotal());
|
||||
iPage.setRecords(list1);
|
||||
return R.ok(iPage);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,118 @@
|
||||
package com.ruoyi.web.controller.test.teacher;
|
||||
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.ruoyi.common.core.domain.R;
|
||||
import com.ruoyi.common.core.domain.entity.SysUser;
|
||||
import com.ruoyi.common.utils.SecurityUtils;
|
||||
import com.ruoyi.test.domain.*;
|
||||
import com.ruoyi.test.domain.DO.ClassExamPaperDO;
|
||||
import com.ruoyi.test.domain.DO.ExamPaperDO;
|
||||
import com.ruoyi.test.seriver.*;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@Api(tags = "教师端成绩分析")
|
||||
@RestController
|
||||
@RequestMapping("teacher/analysis")
|
||||
public class TeacherAnalysisController {
|
||||
|
||||
@Autowired
|
||||
private IUserService iUserService;
|
||||
|
||||
@Autowired
|
||||
private ITeacherManageClassService iTeacherManageClassService;
|
||||
|
||||
@Autowired
|
||||
private IClassExamPaperService iClassExamPaperService;
|
||||
|
||||
@Autowired
|
||||
private IClass1Service iClass1Service;
|
||||
|
||||
@Autowired
|
||||
private IExamPaperService iExamPaperService;
|
||||
|
||||
@Autowired
|
||||
private IStudentClassService iStudentClassService;
|
||||
|
||||
@Autowired
|
||||
private IMarkedtestService iMarkedtestService;
|
||||
|
||||
@ApiOperation("试卷列表")
|
||||
@GetMapping("examPaperList")
|
||||
public R<IPage<ExamPaperDO>> examPaperList(int pagenum){
|
||||
SysUser sysUser = SecurityUtils.getLoginUser().getUser();
|
||||
Long zhid = sysUser.getUserId();
|
||||
Long teacherid = iUserService.selectByzhid(zhid);
|
||||
List<TeacherManageClass> list = iTeacherManageClassService.totalClass(teacherid);
|
||||
List<ExamPaperDO> list1 = new ArrayList<>();
|
||||
Map<Long,List<String>> map = new HashMap<>();
|
||||
for(TeacherManageClass teacherManageClass : list){
|
||||
String grade = teacherManageClass.getGrade();
|
||||
String Class1 = teacherManageClass.getClass1();
|
||||
List<ClassExamPaper> classExamPaper = iClassExamPaperService.selectByGradeAndClass(grade,Class1);
|
||||
for(ClassExamPaper classExamPaper1 : classExamPaper){
|
||||
Long id = classExamPaper1.getId();
|
||||
if(!map.containsKey(id)){
|
||||
com.ruoyi.test.domain.Class1 class1 = iClass1Service.classList(grade,Class1);
|
||||
List<String> list2 = new ArrayList<>();
|
||||
list2.add(class1.getName());
|
||||
map.put(id,list2);
|
||||
}else{
|
||||
List<String> list2 = map.get(id);
|
||||
Class1 class1 = iClass1Service.classList(grade,Class1);
|
||||
list2.add(class1.getName());
|
||||
map.put(id,list2);
|
||||
}
|
||||
}
|
||||
}
|
||||
for(Map.Entry<Long,List<String>> entry : map.entrySet()){
|
||||
ExamPaperDO examPaperDO = new ExamPaperDO();
|
||||
Long id = entry.getKey();
|
||||
examPaperDO.setId(id);
|
||||
ExamPaper examPaper = iExamPaperService.selectById(id);
|
||||
examPaperDO.setSubject(examPaper.getSubject());
|
||||
examPaperDO.setGrade(examPaper.getGrade());
|
||||
examPaperDO.setName(examPaper.getName());
|
||||
examPaperDO.setCreatetime(examPaper.getCreatetime());
|
||||
list1.add(examPaperDO);
|
||||
}
|
||||
Page<ExamPaperDO> page = new Page<>(pagenum,10);
|
||||
IPage<ExamPaperDO> iPage = new Page<>(page.getCurrent(),page.getSize(),page.getTotal());
|
||||
iPage.setRecords(list1);
|
||||
return R.ok(iPage);
|
||||
}
|
||||
|
||||
@ApiOperation("班级平均分")
|
||||
@GetMapping("classAverage")
|
||||
public R<String> classAverage(Long id,Long testid){
|
||||
Class1 class1 = iClass1Service.selectClass1(id);
|
||||
String grade = class1.getGrade();
|
||||
String Class1 = class1.getClass1();
|
||||
List<StudentClass> list = iStudentClassService.selectByGradeAndClass(grade,Class1);
|
||||
System.out.println(list);
|
||||
Double sum = 0.0;
|
||||
for(StudentClass studentClass : list){
|
||||
Long studentid = studentClass.getStudentid();
|
||||
String tname = iUserService.user(studentid).getTname();
|
||||
System.out.println(tname);
|
||||
Double score = 0.0;
|
||||
if(iMarkedtestService.selectmarkedtestBySenderAndTestid(tname,testid)!=null){
|
||||
score =iMarkedtestService.selectmarkedtestBySenderAndTestid(tname,testid).getScore();
|
||||
}
|
||||
sum+=score;
|
||||
}
|
||||
String message = class1.getName()+"的平均分是"+sum/list.size();
|
||||
return R.ok(message);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,102 @@
|
||||
package com.ruoyi.web.controller.test.teacher;
|
||||
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.ruoyi.common.core.domain.R;
|
||||
import com.ruoyi.common.core.domain.entity.SysUser;
|
||||
import com.ruoyi.common.utils.SecurityUtils;
|
||||
import com.ruoyi.test.domain.DO.QuestionAnswerDO;
|
||||
import com.ruoyi.test.domain.Markedtest;
|
||||
import com.ruoyi.test.domain.StudentClass;
|
||||
import com.ruoyi.test.domain.TeacherManageClass;
|
||||
import com.ruoyi.test.seriver.*;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@Api(tags = "教师端答卷管理")
|
||||
@RestController
|
||||
@RequestMapping("/teacher/answerSheet")
|
||||
public class TeacherAnswerSheetController {
|
||||
|
||||
@Autowired
|
||||
private IUserService iUserService;
|
||||
@Autowired
|
||||
private IAnswerSheetDOService iAnswerSheetDOService;
|
||||
|
||||
@Autowired
|
||||
private IAnswerService iAnswerService;
|
||||
|
||||
@Autowired
|
||||
private IExamCreateService iExamCreateService;
|
||||
|
||||
@Autowired
|
||||
private IQuestionanswerService iQuestionanswerService;
|
||||
|
||||
@Autowired
|
||||
private IMarkedtestService iMarkedtestService;
|
||||
|
||||
@Autowired
|
||||
private IStudentClassService iStudentClassService;
|
||||
|
||||
@Autowired
|
||||
private ITeacherManageClassService iTeacherManageClassService;
|
||||
|
||||
@ApiOperation("查看学生的考试情况(最新)")
|
||||
@GetMapping("selectQuestionanswer")
|
||||
public R<QuestionAnswerDO> selectQuestionanswer(String sender, Long testid) {
|
||||
return R.ok(iQuestionanswerService.selectQuestionanswer(sender,testid));
|
||||
}
|
||||
|
||||
@ApiOperation("批改客观题")
|
||||
@PostMapping("markObjectiveQuestions")
|
||||
public R<String> markObjectiveQuestions(@RequestBody QuestionAnswerDO questionAnswerDO) {
|
||||
if(iQuestionanswerService.markObjectiveQuestions(questionAnswerDO)!=0){
|
||||
return R.ok("批改完成!");
|
||||
}
|
||||
return R.fail("批改提交失败!");
|
||||
}
|
||||
|
||||
|
||||
@ApiOperation("试卷批改完毕提交")
|
||||
@PostMapping("addmarkedtest")
|
||||
public R<String> addmarkedtest(String sender,Long testid){
|
||||
if(iMarkedtestService.addmarkedtest(sender,testid)!=0){
|
||||
return R.ok("提交完成!");
|
||||
}
|
||||
return R.fail("提交失败!");
|
||||
}
|
||||
|
||||
@ApiOperation("学生成绩列表查询")
|
||||
@GetMapping("selectmarkedtest")
|
||||
public R<IPage<Markedtest>> selectmarkedtest(int pagenum){
|
||||
SysUser sysUser = SecurityUtils.getLoginUser().getUser();
|
||||
Long zhid = sysUser.getUserId();
|
||||
Long teacherid = iUserService.selectByzhid(zhid);
|
||||
List<TeacherManageClass> list = iTeacherManageClassService.totalClass(teacherid);
|
||||
List<StudentClass> list1 = new ArrayList<>();
|
||||
for(TeacherManageClass teacherManageClass : list){
|
||||
list1.addAll(iStudentClassService.selectByGradeAndClass(teacherManageClass.getGrade(),teacherManageClass.getClass1()));
|
||||
}
|
||||
System.out.println(11111+" "+list1);
|
||||
return R.ok(iMarkedtestService.selectmarkedtest(pagenum,list1));
|
||||
}
|
||||
|
||||
@ApiOperation("通过学科查询学生成绩列表")
|
||||
@GetMapping("selectmarkedtestBySubject")
|
||||
public R<IPage<Markedtest>> selectmarkedtestBySubject(int pagenum,String subject){
|
||||
SysUser sysUser = SecurityUtils.getLoginUser().getUser();
|
||||
Long zhid = sysUser.getUserId();
|
||||
Long teacherid = iUserService.selectByzhid(zhid);
|
||||
List<TeacherManageClass> list = iTeacherManageClassService.totalClass(teacherid);
|
||||
List<StudentClass> list1 = new ArrayList<>();
|
||||
for(TeacherManageClass teacherManageClass : list){
|
||||
list1.addAll(iStudentClassService.selectByGradeAndClass(teacherManageClass.getGrade(),teacherManageClass.getClass1()));
|
||||
}
|
||||
System.out.println(11111+" "+list1);
|
||||
return R.ok(iMarkedtestService.selectmarkedtestBySubject(pagenum,list1,subject));
|
||||
}
|
||||
}
|
@ -0,0 +1,96 @@
|
||||
package com.ruoyi.web.controller.test.teacher;
|
||||
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.ruoyi.common.core.domain.R;
|
||||
import com.ruoyi.common.core.domain.entity.SysUser;
|
||||
import com.ruoyi.common.utils.SecurityUtils;
|
||||
import com.ruoyi.test.domain.Class1;
|
||||
import com.ruoyi.test.domain.DO.StudentListDO;
|
||||
import com.ruoyi.test.domain.TeacherManageClass;
|
||||
import com.ruoyi.test.seriver.IClass1Service;
|
||||
import com.ruoyi.test.seriver.IStudentClassService;
|
||||
import com.ruoyi.test.seriver.ITeacherManageClassService;
|
||||
import com.ruoyi.test.seriver.IUserService;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@Api(tags = "教师端班级管理")
|
||||
@RestController
|
||||
@RequestMapping("teacher/class")
|
||||
public class TeacherClassController {
|
||||
|
||||
@Autowired
|
||||
private IUserService iUserService;
|
||||
|
||||
@Autowired
|
||||
private ITeacherManageClassService iTeacherManageClassService;
|
||||
|
||||
@Autowired
|
||||
private IClass1Service iClass1Service;
|
||||
|
||||
@Autowired
|
||||
private IStudentClassService iStudentClassService;
|
||||
|
||||
@ApiOperation("班级列表")
|
||||
@GetMapping("classList")
|
||||
public R<IPage<Class1>> classList(int pagenum){
|
||||
SysUser sysUser = SecurityUtils.getLoginUser().getUser();
|
||||
Long zhid = sysUser.getUserId();
|
||||
Long teacherid = iUserService.selectByzhid(zhid);
|
||||
List<TeacherManageClass> list = iTeacherManageClassService.totalClass(teacherid);
|
||||
List<Class1> list1 = new ArrayList<>();
|
||||
for(TeacherManageClass teacherManageClass : list){
|
||||
String grade = teacherManageClass.getGrade();
|
||||
String Class1 = teacherManageClass.getClass1();
|
||||
list1.add(iClass1Service.classList(grade,Class1));
|
||||
}
|
||||
Page<Class1> page = new Page<>(pagenum,10);
|
||||
IPage<Class1> page1 = new Page<>(page.getCurrent(),page.getSize(),page.getTotal());
|
||||
page1.setRecords(list1);
|
||||
return R.ok(page1);
|
||||
}
|
||||
|
||||
@ApiOperation("自动更新班级人数")
|
||||
@GetMapping("updateClass")
|
||||
public R<String> updateClass(Long id){
|
||||
Class1 class1 = iClass1Service.selectClass1(id);
|
||||
Integer num = iStudentClassService.selectByGradeAndClass(class1.getGrade(), class1.getClass1()).size();
|
||||
if(iClass1Service.updateClass(id,num)!=0){
|
||||
return R.ok("更新成功!");
|
||||
}
|
||||
return R.fail("更新失败!");
|
||||
}
|
||||
|
||||
@ApiOperation("删除班级")
|
||||
@GetMapping("deleteClass")
|
||||
public R<String> deleteClass(Long id){
|
||||
Class1 class1 = iClass1Service.selectClass1(id);
|
||||
String grade = class1.getGrade();
|
||||
String Class1 = class1.getClass1();
|
||||
if(iTeacherManageClassService.deleteClass(grade,Class1)!=0){
|
||||
return R.ok("删除成功!");
|
||||
}
|
||||
return R.fail("删除失败!");
|
||||
}
|
||||
|
||||
//创建后默认加入创建账号的班级中
|
||||
@ApiOperation("班级创建")
|
||||
@GetMapping("addclass1")
|
||||
public R<String> addclass1(String name,String grade,String Class1){
|
||||
if(iClass1Service.addclass1(name,grade,Class1)!=0){
|
||||
SysUser sysUser = SecurityUtils.getLoginUser().getUser();
|
||||
Long zhid = sysUser.getUserId();
|
||||
Long teacherid = iUserService.selectByzhid(zhid);
|
||||
iTeacherManageClassService.addclass1(teacherid,grade,Class1);
|
||||
return R.ok("创建成功!");
|
||||
}
|
||||
return R.fail("创建失败!");
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,190 @@
|
||||
package com.ruoyi.web.controller.test.teacher;
|
||||
|
||||
import com.ruoyi.common.core.domain.R;
|
||||
import com.ruoyi.common.core.domain.entity.SysUser;
|
||||
import com.ruoyi.common.utils.SecurityUtils;
|
||||
import com.ruoyi.test.domain.ClassExamPaper;
|
||||
import com.ruoyi.test.domain.DO.HomepageDO;
|
||||
import com.ruoyi.test.domain.TeacherManageClass;
|
||||
import com.ruoyi.test.seriver.*;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@Api(tags = "教师端主页")
|
||||
@RestController
|
||||
@RequestMapping("/teacher/homepage")
|
||||
public class TeacherHomePageController {
|
||||
|
||||
@Autowired
|
||||
private ITeacherManageClassService iTeacherManageClassService;
|
||||
|
||||
@Autowired
|
||||
private IUserService iUserService;
|
||||
|
||||
@Autowired
|
||||
private IStudentClassService iStudentClassService;
|
||||
|
||||
@Autowired
|
||||
private IExamPaperService iExamPaperService;
|
||||
|
||||
@Autowired
|
||||
private ITeacherSubjectService iTeacherSubjectService;
|
||||
|
||||
@Autowired
|
||||
private IExamCreateService iExamCreateService;
|
||||
|
||||
@Autowired
|
||||
private IClassExamPaperService iClassExamPaperService;
|
||||
|
||||
@ApiOperation("主页数据")
|
||||
@GetMapping("homepagesuju")
|
||||
public R<HomepageDO> homepagesuju(){
|
||||
SysUser sysUser = SecurityUtils.getLoginUser().getUser();
|
||||
Long zhid = sysUser.getUserId();
|
||||
Long teacherid = iUserService.selectByzhid(zhid);
|
||||
HomepageDO homepageDO = new HomepageDO();
|
||||
Integer total = iTeacherManageClassService.totalClass(teacherid).size();
|
||||
homepageDO.setSumclass(total);
|
||||
Integer total1 = iStudentClassService.totalStudent(iTeacherManageClassService.totalClass(teacherid));
|
||||
homepageDO.setSunnumclass(total1);
|
||||
List<TeacherManageClass> list = iTeacherManageClassService.totalClass(teacherid);
|
||||
Integer total2 = 0;
|
||||
for(TeacherManageClass teacherManageClass : list){
|
||||
String grade = teacherManageClass.getGrade();
|
||||
String Class = teacherManageClass.getClass1();
|
||||
total2 += iClassExamPaperService.selectByGradeAndClass(grade,Class).size();
|
||||
}
|
||||
homepageDO.setExampapersum(total2);
|
||||
List<TeacherManageClass> list2 = iTeacherManageClassService.totalClass(teacherid);
|
||||
Integer total3 = 0;
|
||||
for(TeacherManageClass teacherManageClass : list2){
|
||||
String grade = teacherManageClass.getGrade();
|
||||
String Class = teacherManageClass.getClass1();
|
||||
List<ClassExamPaper> list1 = iClassExamPaperService.selectByGradeAndClass(grade,Class);
|
||||
for(ClassExamPaper classExamPaper : list1){
|
||||
total3 += iExamCreateService.total(classExamPaper.getId());
|
||||
}
|
||||
}
|
||||
homepageDO.setSumtimu(total3);
|
||||
List<TeacherManageClass> list3 = iTeacherManageClassService.totalClass(teacherid);
|
||||
Map<String,Integer> map = new HashMap<>();
|
||||
for(TeacherManageClass teacherManageClass : list3){
|
||||
String grade = teacherManageClass.getGrade();
|
||||
String Class = teacherManageClass.getClass1();
|
||||
String s = grade+"年"+Class+"班";
|
||||
Integer num = iStudentClassService.selectByGradeAndClass(grade,Class).size();
|
||||
map.put(s,num);
|
||||
}
|
||||
homepageDO.setClasssize(map);
|
||||
List<TeacherManageClass> list4 = iTeacherManageClassService.totalClass(teacherid);
|
||||
Map<String,Integer> map1 = new HashMap<>();
|
||||
for(TeacherManageClass teacherManageClass : list4){
|
||||
String grade = teacherManageClass.getGrade();
|
||||
String Class = teacherManageClass.getClass1();
|
||||
Integer num = iClassExamPaperService.selectByGradeAndClass(grade,Class).size();
|
||||
String s = grade+"年"+Class+"班";
|
||||
map1.put(s,num);
|
||||
}
|
||||
homepageDO.setExamPaperSize(map1);
|
||||
return R.ok(homepageDO);
|
||||
}
|
||||
// @ApiOperation("班级总数")
|
||||
// @GetMapping("totalClass")
|
||||
// public R<Integer> totalClass(){
|
||||
// SysUser sysUser = SecurityUtils.getLoginUser().getUser();
|
||||
// Long zhid = sysUser.getUserId();
|
||||
// Long teacherid = iUserService.selectByzhid(zhid);
|
||||
// Integer total = iTeacherManageClassService.totalClass(teacherid).size();
|
||||
// return R.ok(total);
|
||||
// }
|
||||
//
|
||||
// @ApiOperation("班级总人数")
|
||||
// @GetMapping("totalStudent")
|
||||
// public R<Integer> totalStudent() {
|
||||
// SysUser sysUser = SecurityUtils.getLoginUser().getUser();
|
||||
// Long zhid = sysUser.getUserId();
|
||||
// Long teacherid = iUserService.selectByzhid(zhid);
|
||||
// Integer total = iStudentClassService.totalStudent(iTeacherManageClassService.totalClass(teacherid));
|
||||
// return R.ok(total);
|
||||
// }
|
||||
//
|
||||
// @ApiOperation("试卷总数")
|
||||
// @GetMapping("totalExamPaper")
|
||||
// public R<Integer> totalExamPaper() {
|
||||
// SysUser sysUser = SecurityUtils.getLoginUser().getUser();
|
||||
// Long zhid = sysUser.getUserId();
|
||||
// Long teacherid = iUserService.selectByzhid(zhid);
|
||||
// List<TeacherManageClass> list = iTeacherManageClassService.totalClass(teacherid);
|
||||
// Integer total = 0;
|
||||
// for(TeacherManageClass teacherManageClass : list){
|
||||
// String grade = teacherManageClass.getGrade();
|
||||
// String Class = teacherManageClass.getClass1();
|
||||
// total += iClassExamPaperService.selectByGradeAndClass(grade,Class).size();
|
||||
// }
|
||||
// return R.ok(total);
|
||||
// }
|
||||
//
|
||||
// @ApiOperation("题目总数")
|
||||
// @GetMapping("totalQuestionbank")
|
||||
// public R<Integer> totalQuestionbank() {
|
||||
// SysUser sysUser = SecurityUtils.getLoginUser().getUser();
|
||||
// Long zhid = sysUser.getUserId();
|
||||
// Long teacherid = iUserService.selectByzhid(zhid);
|
||||
// List<TeacherManageClass> list = iTeacherManageClassService.totalClass(teacherid);
|
||||
// Integer total = 0;
|
||||
// for(TeacherManageClass teacherManageClass : list){
|
||||
// String grade = teacherManageClass.getGrade();
|
||||
// String Class = teacherManageClass.getClass1();
|
||||
// List<ClassExamPaper> list1 = iClassExamPaperService.selectByGradeAndClass(grade,Class);
|
||||
// for(ClassExamPaper classExamPaper : list1){
|
||||
// total += iExamCreateService.total(classExamPaper.getId());
|
||||
// }
|
||||
// }
|
||||
// return R.ok(total);
|
||||
// }
|
||||
//
|
||||
// @ApiOperation("班级人数分布")
|
||||
// @GetMapping("classSize")
|
||||
// public R<Map<String,Integer>> classSize(){
|
||||
// SysUser sysUser = SecurityUtils.getLoginUser().getUser();
|
||||
// Long zhid = sysUser.getUserId();
|
||||
// Long teacherid = iUserService.selectByzhid(zhid);
|
||||
// List<TeacherManageClass> list = iTeacherManageClassService.totalClass(teacherid);
|
||||
// Map<String,Integer> map = new HashMap<>();
|
||||
// for(TeacherManageClass teacherManageClass : list){
|
||||
// String grade = teacherManageClass.getGrade();
|
||||
// String Class = teacherManageClass.getClass1();
|
||||
// String s = grade+"年"+Class+"班";
|
||||
// Integer num = iStudentClassService.selectByGradeAndClass(grade,Class).size();
|
||||
// map.put(s,num);
|
||||
// }
|
||||
// return R.ok(map);
|
||||
// }
|
||||
//
|
||||
// @ApiOperation("班级试卷分布")
|
||||
// @GetMapping("examPaperSize")
|
||||
// public R<Map<String,Integer>> examPaperSize(){
|
||||
// SysUser sysUser = SecurityUtils.getLoginUser().getUser();
|
||||
// Long zhid = sysUser.getUserId();
|
||||
// Long teacherid = iUserService.selectByzhid(zhid);
|
||||
// List<TeacherManageClass> list = iTeacherManageClassService.totalClass(teacherid);
|
||||
// Map<String,Integer> map = new HashMap<>();
|
||||
// for(TeacherManageClass teacherManageClass : list){
|
||||
// String grade = teacherManageClass.getGrade();
|
||||
// String Class = teacherManageClass.getClass1();
|
||||
// Integer num = iClassExamPaperService.selectByGradeAndClass(grade,Class).size();
|
||||
// String s = grade+"年"+Class+"班";
|
||||
// map.put(s,num);
|
||||
// }
|
||||
// return R.ok(map);
|
||||
// }
|
||||
|
||||
}
|
@ -0,0 +1,154 @@
|
||||
package com.ruoyi.web.controller.test.teacher;
|
||||
|
||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.ruoyi.common.core.domain.R;
|
||||
import com.ruoyi.common.core.domain.entity.SysUser;
|
||||
import com.ruoyi.common.utils.SecurityUtils;
|
||||
import com.ruoyi.test.domain.DO.StudentListDO;
|
||||
import com.ruoyi.test.domain.StudentClass;
|
||||
import com.ruoyi.test.domain.TeacherManageClass;
|
||||
import com.ruoyi.test.domain.User;
|
||||
import com.ruoyi.test.seriver.IStudentClassService;
|
||||
import com.ruoyi.test.seriver.IClassExamPaperService;
|
||||
import com.ruoyi.test.seriver.ITeacherManageClassService;
|
||||
import com.ruoyi.test.seriver.IUserService;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
@Api(tags = "教师端用户管理")
|
||||
@RestController
|
||||
@RequestMapping("/teacher/users")
|
||||
public class TeacherUserController {
|
||||
|
||||
@Autowired
|
||||
private IUserService iUserService;
|
||||
|
||||
@Autowired
|
||||
private ITeacherManageClassService iTeacherManageClassService;
|
||||
|
||||
@Autowired
|
||||
private IStudentClassService iStudentClassService;
|
||||
|
||||
@Autowired
|
||||
private IClassExamPaperService iClassExamPaperService;
|
||||
|
||||
@ApiOperation("学生列表")
|
||||
@GetMapping("studentList")
|
||||
public R<IPage<StudentListDO>> studentList(int pagenum){
|
||||
SysUser sysUser = SecurityUtils.getLoginUser().getUser();
|
||||
Long zhid = sysUser.getUserId();
|
||||
Long teacherid = iUserService.selectByzhid(zhid);
|
||||
List<TeacherManageClass> list = iTeacherManageClassService.totalClass(teacherid);
|
||||
List<StudentClass> list1 = new ArrayList<>();
|
||||
for(TeacherManageClass teacherManageClass : list){
|
||||
String grade = teacherManageClass.getGrade();
|
||||
String Class = teacherManageClass.getClass1();
|
||||
list1.addAll(iStudentClassService.selectByGradeAndClass(grade,Class));
|
||||
}
|
||||
List<StudentListDO> listDOS = new ArrayList<>();
|
||||
for(StudentClass studentClass : list1){
|
||||
StudentListDO studentListDO = new StudentListDO();
|
||||
studentListDO.setId(studentClass.getStudentid());
|
||||
studentListDO.setGrade(studentClass.getGrade());
|
||||
studentListDO.setClass1(studentClass.getClass1());
|
||||
studentListDO.setAddtime(studentClass.getAddtime());
|
||||
User user = iUserService.user(studentClass.getStudentid());
|
||||
studentListDO.setName(user.getName());
|
||||
studentListDO.setTname(user.getTname());
|
||||
studentListDO.setSex(user.getSex());
|
||||
studentListDO.setTelephone(user.getTelephone());
|
||||
listDOS.add(studentListDO);
|
||||
}
|
||||
Page<StudentListDO> page = new Page<>(pagenum,10);
|
||||
IPage<StudentListDO> page1 = new Page<>(page.getCurrent(),page.getSize(),page.getTotal());
|
||||
page1.setRecords(listDOS);
|
||||
return R.ok(page1);
|
||||
}
|
||||
|
||||
@ApiOperation("学生列表(用户名查询)")
|
||||
@GetMapping("studentListByName")
|
||||
public R<IPage<StudentListDO>> studentListByName(int pagenum,String name){
|
||||
SysUser sysUser = SecurityUtils.getLoginUser().getUser();
|
||||
Long zhid = sysUser.getUserId();
|
||||
Long teacherid = iUserService.selectByzhid(zhid);
|
||||
List<TeacherManageClass> list = iTeacherManageClassService.totalClass(teacherid);
|
||||
List<StudentClass> list1 = new ArrayList<>();
|
||||
for(TeacherManageClass teacherManageClass : list){
|
||||
String grade = teacherManageClass.getGrade();
|
||||
String Class = teacherManageClass.getClass1();
|
||||
list1.addAll(iStudentClassService.selectByGradeAndClass(grade,Class));
|
||||
}
|
||||
List<StudentListDO> listDOS = new ArrayList<>();
|
||||
for(StudentClass studentClass : list1){
|
||||
User user = iUserService.user(studentClass.getStudentid());
|
||||
if(!user.getName().equals(name)){
|
||||
continue;
|
||||
}
|
||||
StudentListDO studentListDO = new StudentListDO();
|
||||
studentListDO.setId(studentClass.getStudentid());
|
||||
studentListDO.setGrade(studentClass.getGrade());
|
||||
studentListDO.setClass1(studentClass.getClass1());
|
||||
studentListDO.setAddtime(studentClass.getAddtime());
|
||||
studentListDO.setName(user.getName());
|
||||
studentListDO.setTname(user.getTname());
|
||||
studentListDO.setSex(user.getSex());
|
||||
studentListDO.setTelephone(user.getTelephone());
|
||||
listDOS.add(studentListDO);
|
||||
}
|
||||
Page<StudentListDO> page = new Page<>(pagenum,10);
|
||||
IPage<StudentListDO> page1 = new Page<>(page.getCurrent(),page.getSize(),page.getTotal());
|
||||
page1.setRecords(listDOS);
|
||||
return R.ok(page1);
|
||||
}
|
||||
|
||||
@ApiOperation("学生列表(班级查询)")
|
||||
@GetMapping("studentListByClass")
|
||||
public R<IPage<StudentListDO>> studentListByClass(int pagenum,String Class){
|
||||
SysUser sysUser = SecurityUtils.getLoginUser().getUser();
|
||||
Long zhid = sysUser.getUserId();
|
||||
Long teacherid = iUserService.selectByzhid(zhid);
|
||||
List<TeacherManageClass> list = iTeacherManageClassService.totalClass(teacherid);
|
||||
List<StudentClass> list1 = new ArrayList<>();
|
||||
for(TeacherManageClass teacherManageClass : list){
|
||||
String grade = teacherManageClass.getGrade();
|
||||
String Class1 = teacherManageClass.getClass1();
|
||||
if(Class1.equals(Class)){
|
||||
list1.addAll(iStudentClassService.selectByGradeAndClass(grade,Class));
|
||||
}
|
||||
}
|
||||
List<StudentListDO> listDOS = new ArrayList<>();
|
||||
for(StudentClass studentClass : list1){
|
||||
User user = iUserService.user(studentClass.getStudentid());
|
||||
StudentListDO studentListDO = new StudentListDO();
|
||||
studentListDO.setId(studentClass.getStudentid());
|
||||
studentListDO.setGrade(studentClass.getGrade());
|
||||
studentListDO.setClass1(studentClass.getClass1());
|
||||
studentListDO.setAddtime(studentClass.getAddtime());
|
||||
studentListDO.setName(user.getName());
|
||||
studentListDO.setTname(user.getTname());
|
||||
studentListDO.setSex(user.getSex());
|
||||
studentListDO.setTelephone(user.getTelephone());
|
||||
listDOS.add(studentListDO);
|
||||
}
|
||||
Page<StudentListDO> page = new Page<>(pagenum,10);
|
||||
IPage<StudentListDO> page1 = new Page<>(page.getCurrent(),page.getSize(),page.getTotal());
|
||||
page1.setRecords(listDOS);
|
||||
return R.ok(page1);
|
||||
}
|
||||
@ApiOperation("从学生列表删除")
|
||||
@GetMapping("deleteStudent")
|
||||
public R<String> deleteStudent(Long id){
|
||||
if(iStudentClassService.deleteStudentClass(id)!=0){
|
||||
return R.ok("删除成功!");
|
||||
}
|
||||
return R.fail("删除失败!");
|
||||
}
|
||||
}
|
@ -0,0 +1,183 @@
|
||||
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;
|
||||
}
|
||||
}
|
@ -0,0 +1,47 @@
|
||||
package com.ruoyi.web.controller.tool.testTool;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* 返回码枚举类
|
||||
*
|
||||
* @projectName: signBack
|
||||
* @package: com.sign.signback.enums
|
||||
* @className: ResultEnum
|
||||
* @author: DemoTao
|
||||
* @description: TODO
|
||||
* @date: 2023/8/20 15:02
|
||||
* @version: 1.0
|
||||
*/
|
||||
@Getter
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public enum ResultEnum {
|
||||
/**
|
||||
* 成功
|
||||
*/
|
||||
SUCCESS(200, "成功"),
|
||||
UNKNOWN_ERROR(500, "未知错误"),
|
||||
MISSING_SERVLET_REQUEST_PARAMETER_ERROR(501, "缺少Servlet请求参数异常"),
|
||||
HTTP_MESSAGE_NOT_READABLE_ERROR(502, "参数请求体异常"),
|
||||
BIND_ERROR(503, "方法参数绑定错误(实体对象传参)"),
|
||||
METHOD_ARGUMENT_NOT_VALID_ERROR(504, "方法参数无效异常(实体对象请求体传参)"),
|
||||
BIND_IS_EXISTS_ERROR(505,"绑定的用户已经存在"),
|
||||
BIND_NOT_IS_EXISTS_ERROR(506,"用户未绑定"),
|
||||
|
||||
NOT_LOGIN(403, "未登录"),
|
||||
NOT_TOKEN(403, "没有token"),
|
||||
INVALID_TOKEN(403, "无效token"),
|
||||
TOKEN_TIMEOUT(403, "token过期"),
|
||||
BE_REPLACED(405, "被挤下线"),
|
||||
KICK_OUT(403, "被踢下线"),
|
||||
|
||||
|
||||
CUSTOMIZE_ERROR(50001, "自定义异常");
|
||||
|
||||
private Integer code;
|
||||
private String message;
|
||||
|
||||
}
|
@ -0,0 +1,50 @@
|
||||
package com.ruoyi.web.controller.tool.testTool;
|
||||
|
||||
import com.ruoyi.web.controller.tool.testTool.ResultEnum;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.io.*;
|
||||
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
public class ResultVo<T> implements Serializable {
|
||||
// @Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
private Integer code;
|
||||
private String msg;
|
||||
private T data;
|
||||
|
||||
public static <T> ResultVo<T> ok(T data) {
|
||||
ResultEnum success = ResultEnum.SUCCESS;
|
||||
return new ResultVo<>(success.getCode(), success.getMessage(), data);
|
||||
}
|
||||
|
||||
public static <T> ResultVo<T> ok() {
|
||||
ResultEnum success = ResultEnum.SUCCESS;
|
||||
return new ResultVo<>(success.getCode(), success.getMessage(), null);
|
||||
}
|
||||
|
||||
public static <T> ResultVo<T> error() {
|
||||
ResultEnum success = ResultEnum.UNKNOWN_ERROR;
|
||||
return new ResultVo<>(success.getCode(), success.getMessage(), null);
|
||||
}
|
||||
|
||||
public static <T> ResultVo<T> error(ResultEnum resultEnum) {
|
||||
return new ResultVo<>(resultEnum.getCode(), resultEnum.getMessage(), null);
|
||||
}
|
||||
|
||||
public static <T> ResultVo<T> error(String msg) {
|
||||
ResultEnum customizeError = ResultEnum.CUSTOMIZE_ERROR;
|
||||
return new ResultVo<>(customizeError.getCode(), msg, null);
|
||||
}
|
||||
public static <T> ResultVo<T> error(Integer code,String msg) {
|
||||
return new ResultVo<>(code, msg, null);
|
||||
}
|
||||
public static <T> ResultVo<T> error(Integer code,String msg, T data) {
|
||||
return new ResultVo<>(code, msg, data);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1 @@
|
||||
restart.include.json=/com.alibaba.fastjson2.*.jar
|
@ -0,0 +1,62 @@
|
||||
# 数据源配置
|
||||
spring:
|
||||
datasource:
|
||||
type: com.alibaba.druid.pool.DruidDataSource
|
||||
driverClassName: com.mysql.cj.jdbc.Driver
|
||||
druid:
|
||||
# 主库数据源
|
||||
master:
|
||||
|
||||
url: jdbc:mysql://localhost:3306/ruoyi_3.8.7?useUnicode=true&characterEncoding=utf-8&useSSL=false
|
||||
username: root
|
||||
password: 123456
|
||||
# 从库数据源
|
||||
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
|
@ -0,0 +1,24 @@
|
||||
Application Version: ${ruoyi.version}
|
||||
Spring Boot Version: ${spring-boot.version}
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// _ooOoo_ //
|
||||
// o8888888o //
|
||||
// 88" . "88 //
|
||||
// (| ^_^ |) //
|
||||
// O\ = /O //
|
||||
// ____/`---'\____ //
|
||||
// .' \\| |// `. //
|
||||
// / \\||| : |||// \ //
|
||||
// / _||||| -:- |||||- \ //
|
||||
// | | \\\ - /// | | //
|
||||
// | \_| ''\---/'' | | //
|
||||
// \ .-\__ `-` ___/-. / //
|
||||
// ___`. .' /--.--\ `. . ___ //
|
||||
// ."" '< `.___\_<|>_/___.' >'"". //
|
||||
// | | : `- \`.;`\ _ /`;.`/ - ` : | | //
|
||||
// \ \ `-. \_ __\ /__ _/ .-` / / //
|
||||
// ========`-.____`-.___\_____/___.-`____.-'======== //
|
||||
// `=---=' //
|
||||
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ //
|
||||
// 佛祖保佑 永不宕机 永无BUG //
|
||||
////////////////////////////////////////////////////////////////////
|
@ -0,0 +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.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>
|
@ -0,0 +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>
|
@ -0,0 +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>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>
|
@ -0,0 +1,19 @@
|
||||
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
|
||||
{
|
||||
}
|
@ -0,0 +1,18 @@
|
||||
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();
|
||||
}
|
@ -0,0 +1,51 @@
|
||||
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 {};
|
||||
}
|
@ -0,0 +1,40 @@
|
||||
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;
|
||||
}
|
@ -0,0 +1,24 @@
|
||||
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 com.fasterxml.jackson.annotation.JacksonAnnotationsInside;
|
||||
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
|
||||
import com.ruoyi.common.config.serializer.SensitiveJsonSerializer;
|
||||
import com.ruoyi.common.enums.DesensitizedType;
|
||||
|
||||
/**
|
||||
* 数据脱敏注解
|
||||
*
|
||||
* @author ruoyi
|
||||
*/
|
||||
@Retention(RetentionPolicy.RUNTIME)
|
||||
@Target(ElementType.FIELD)
|
||||
@JacksonAnnotationsInside
|
||||
@JsonSerialize(using = SensitiveJsonSerializer.class)
|
||||
public @interface Sensitive
|
||||
{
|
||||
DesensitizedType desensitizedType();
|
||||
}
|
@ -0,0 +1,122 @@
|
||||
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";
|
||||
}
|
||||
}
|
@ -0,0 +1,67 @@
|
||||
package com.ruoyi.common.config.serializer;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Objects;
|
||||
import com.fasterxml.jackson.core.JsonGenerator;
|
||||
import com.fasterxml.jackson.databind.BeanProperty;
|
||||
import com.fasterxml.jackson.databind.JsonMappingException;
|
||||
import com.fasterxml.jackson.databind.JsonSerializer;
|
||||
import com.fasterxml.jackson.databind.SerializerProvider;
|
||||
import com.fasterxml.jackson.databind.ser.ContextualSerializer;
|
||||
import com.ruoyi.common.annotation.Sensitive;
|
||||
import com.ruoyi.common.core.domain.model.LoginUser;
|
||||
import com.ruoyi.common.enums.DesensitizedType;
|
||||
import com.ruoyi.common.utils.SecurityUtils;
|
||||
|
||||
/**
|
||||
* 数据脱敏序列化过滤
|
||||
*
|
||||
* @author ruoyi
|
||||
*/
|
||||
public class SensitiveJsonSerializer extends JsonSerializer<String> implements ContextualSerializer
|
||||
{
|
||||
private DesensitizedType desensitizedType;
|
||||
|
||||
@Override
|
||||
public void serialize(String value, JsonGenerator gen, SerializerProvider serializers) throws IOException
|
||||
{
|
||||
if (desensitization())
|
||||
{
|
||||
gen.writeString(desensitizedType.desensitizer().apply(value));
|
||||
}
|
||||
else
|
||||
{
|
||||
gen.writeString(value);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public JsonSerializer<?> createContextual(SerializerProvider prov, BeanProperty property)
|
||||
throws JsonMappingException
|
||||
{
|
||||
Sensitive annotation = property.getAnnotation(Sensitive.class);
|
||||
if (Objects.nonNull(annotation) && Objects.equals(String.class, property.getType().getRawClass()))
|
||||
{
|
||||
this.desensitizedType = annotation.desensitizedType();
|
||||
return this;
|
||||
}
|
||||
return prov.findValueSerializer(property.getType(), property);
|
||||
}
|
||||
|
||||
/**
|
||||
* 是否需要脱敏处理
|
||||
*/
|
||||
private boolean desensitization()
|
||||
{
|
||||
try
|
||||
{
|
||||
LoginUser securityUser = SecurityUtils.getLoginUser();
|
||||
// 管理员不脱敏
|
||||
return !securityUser.getUser().isAdmin();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,44 @@
|
||||
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:";
|
||||
}
|
@ -0,0 +1,117 @@
|
||||
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";
|
||||
}
|
@ -0,0 +1,50 @@
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,81 @@
|
||||
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;
|
||||
}
|
@ -0,0 +1,118 @@
|
||||
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;
|
||||
}
|
||||
}
|
@ -0,0 +1,115 @@
|
||||
package com.ruoyi.common.core.domain;
|
||||
|
||||
import java.io.Serializable;
|
||||
import com.ruoyi.common.constant.HttpStatus;
|
||||
|
||||
/**
|
||||
* 响应信息主体
|
||||
*
|
||||
* @author ruoyi
|
||||
*/
|
||||
public class R<T> implements Serializable
|
||||
{
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/** 成功 */
|
||||
public static final int SUCCESS = HttpStatus.SUCCESS;
|
||||
|
||||
/** 失败 */
|
||||
public static final int FAIL = HttpStatus.ERROR;
|
||||
|
||||
private int code;
|
||||
|
||||
private String msg;
|
||||
|
||||
private T data;
|
||||
|
||||
public static <T> R<T> ok()
|
||||
{
|
||||
return restResult(null, SUCCESS, "操作成功");
|
||||
}
|
||||
|
||||
public static <T> R<T> ok(T data)
|
||||
{
|
||||
return restResult(data, SUCCESS, "操作成功");
|
||||
}
|
||||
|
||||
public static <T> R<T> ok(T data, String msg)
|
||||
{
|
||||
return restResult(data, SUCCESS, msg);
|
||||
}
|
||||
|
||||
public static <T> R<T> fail()
|
||||
{
|
||||
return restResult(null, FAIL, "操作失败");
|
||||
}
|
||||
|
||||
public static <T> R<T> fail(String msg)
|
||||
{
|
||||
return restResult(null, FAIL, msg);
|
||||
}
|
||||
|
||||
public static <T> R<T> fail(T data)
|
||||
{
|
||||
return restResult(data, FAIL, "操作失败");
|
||||
}
|
||||
|
||||
public static <T> R<T> fail(T data, String msg)
|
||||
{
|
||||
return restResult(data, FAIL, msg);
|
||||
}
|
||||
|
||||
public static <T> R<T> fail(int code, String msg)
|
||||
{
|
||||
return restResult(null, code, msg);
|
||||
}
|
||||
|
||||
private static <T> R<T> restResult(T data, int code, String msg)
|
||||
{
|
||||
R<T> apiResult = new R<>();
|
||||
apiResult.setCode(code);
|
||||
apiResult.setData(data);
|
||||
apiResult.setMsg(msg);
|
||||
return apiResult;
|
||||
}
|
||||
|
||||
public int getCode()
|
||||
{
|
||||
return code;
|
||||
}
|
||||
|
||||
public void setCode(int code)
|
||||
{
|
||||
this.code = code;
|
||||
}
|
||||
|
||||
public String getMsg()
|
||||
{
|
||||
return msg;
|
||||
}
|
||||
|
||||
public void setMsg(String msg)
|
||||
{
|
||||
this.msg = msg;
|
||||
}
|
||||
|
||||
public T getData()
|
||||
{
|
||||
return data;
|
||||
}
|
||||
|
||||
public void setData(T data)
|
||||
{
|
||||
this.data = data;
|
||||
}
|
||||
|
||||
public static <T> Boolean isError(R<T> ret)
|
||||
{
|
||||
return !isSuccess(ret);
|
||||
}
|
||||
|
||||
public static <T> Boolean isSuccess(R<T> ret)
|
||||
{
|
||||
return R.SUCCESS == ret.getCode();
|
||||
}
|
||||
}
|
@ -0,0 +1,79 @@
|
||||
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;
|
||||
}
|
||||
}
|
@ -0,0 +1,77 @@
|
||||
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.core.domain.entity.SysDept;
|
||||
import com.ruoyi.common.core.domain.entity.SysMenu;
|
||||
|
||||
/**
|
||||
* Treeselect树结构实体类
|
||||
*
|
||||
* @author ruoyi
|
||||
*/
|
||||
public class TreeSelect implements Serializable
|
||||
{
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/** 节点ID */
|
||||
private Long id;
|
||||
|
||||
/** 节点名称 */
|
||||
private String label;
|
||||
|
||||
/** 子节点 */
|
||||
@JsonInclude(JsonInclude.Include.NON_EMPTY)
|
||||
private List<TreeSelect> children;
|
||||
|
||||
public TreeSelect()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public TreeSelect(SysDept dept)
|
||||
{
|
||||
this.id = dept.getDeptId();
|
||||
this.label = dept.getDeptName();
|
||||
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 List<TreeSelect> getChildren()
|
||||
{
|
||||
return children;
|
||||
}
|
||||
|
||||
public void setChildren(List<TreeSelect> children)
|
||||
{
|
||||
this.children = children;
|
||||
}
|
||||
}
|
@ -0,0 +1,69 @@
|
||||
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;
|
||||
}
|
||||
}
|
@ -0,0 +1,266 @@
|
||||
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;
|
||||
}
|
||||
}
|
@ -0,0 +1,11 @@
|
||||
package com.ruoyi.common.core.domain.model;
|
||||
|
||||
/**
|
||||
* 用户注册对象
|
||||
*
|
||||
* @author ruoyi
|
||||
*/
|
||||
public class RegisterBody extends LoginBody
|
||||
{
|
||||
|
||||
}
|
@ -0,0 +1,101 @@
|
||||
package com.ruoyi.common.core.page;
|
||||
|
||||
import com.ruoyi.common.utils.StringUtils;
|
||||
|
||||
/**
|
||||
* 分页数据
|
||||
*
|
||||
* @author ruoyi
|
||||
*/
|
||||
public class PageDomain
|
||||
{
|
||||
/** 当前记录起始索引 */
|
||||
private Integer pageNum;
|
||||
|
||||
/** 每页显示记录数 */
|
||||
private Integer pageSize;
|
||||
|
||||
/** 排序列 */
|
||||
private String orderByColumn;
|
||||
|
||||
/** 排序的方向desc或者asc */
|
||||
private String isAsc = "asc";
|
||||
|
||||
/** 分页参数合理化 */
|
||||
private Boolean reasonable = true;
|
||||
|
||||
public String getOrderBy()
|
||||
{
|
||||
if (StringUtils.isEmpty(orderByColumn))
|
||||
{
|
||||
return "";
|
||||
}
|
||||
return StringUtils.toUnderScoreCase(orderByColumn) + " " + isAsc;
|
||||
}
|
||||
|
||||
public Integer getPageNum()
|
||||
{
|
||||
return pageNum;
|
||||
}
|
||||
|
||||
public void setPageNum(Integer pageNum)
|
||||
{
|
||||
this.pageNum = pageNum;
|
||||
}
|
||||
|
||||
public Integer getPageSize()
|
||||
{
|
||||
return pageSize;
|
||||
}
|
||||
|
||||
public void setPageSize(Integer pageSize)
|
||||
{
|
||||
this.pageSize = pageSize;
|
||||
}
|
||||
|
||||
public String getOrderByColumn()
|
||||
{
|
||||
return orderByColumn;
|
||||
}
|
||||
|
||||
public void setOrderByColumn(String orderByColumn)
|
||||
{
|
||||
this.orderByColumn = orderByColumn;
|
||||
}
|
||||
|
||||
public String getIsAsc()
|
||||
{
|
||||
return isAsc;
|
||||
}
|
||||
|
||||
public void setIsAsc(String isAsc)
|
||||
{
|
||||
if (StringUtils.isNotEmpty(isAsc))
|
||||
{
|
||||
// 兼容前端排序类型
|
||||
if ("ascending".equals(isAsc))
|
||||
{
|
||||
isAsc = "asc";
|
||||
}
|
||||
else if ("descending".equals(isAsc))
|
||||
{
|
||||
isAsc = "desc";
|
||||
}
|
||||
this.isAsc = isAsc;
|
||||
}
|
||||
}
|
||||
|
||||
public Boolean getReasonable()
|
||||
{
|
||||
if (StringUtils.isNull(reasonable))
|
||||
{
|
||||
return Boolean.TRUE;
|
||||
}
|
||||
return reasonable;
|
||||
}
|
||||
|
||||
public void setReasonable(Boolean reasonable)
|
||||
{
|
||||
this.reasonable = reasonable;
|
||||
}
|
||||
}
|
@ -0,0 +1,85 @@
|
||||
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;
|
||||
}
|
||||
}
|
@ -0,0 +1,56 @@
|
||||
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();
|
||||
}
|
||||
}
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue