Browse Source

first commit

master
blank 7 months ago
commit
b42b9ed697
  1. 47
      .gitignore
  2. 20
      LICENSE
  3. 0
      README.md
  4. 12
      bin/clean.bat
  5. 12
      bin/package.bat
  6. 14
      bin/run.bat
  7. BIN
      doc/若依环境使用手册.docx
  8. 256
      pom.xml
  9. 100
      ruoyi-admin/pom.xml
  10. 21
      ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java
  11. 18
      ruoyi-admin/src/main/java/com/ruoyi/RuoYiServletInitializer.java
  12. 94
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CaptchaController.java
  13. 163
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CommonController.java
  14. 120
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/CacheController.java
  15. 27
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/ServerController.java
  16. 69
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysLogininforController.java
  17. 69
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysOperlogController.java
  18. 92
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysUserOnlineController.java
  19. 134
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysConfigController.java
  20. 165
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDeptController.java
  21. 121
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDictDataController.java
  22. 132
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDictTypeController.java
  23. 29
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysIndexController.java
  24. 149
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java
  25. 142
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysMenuController.java
  26. 91
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysNoticeController.java
  27. 130
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysPostController.java
  28. 142
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysProfileController.java
  29. 38
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRegisterController.java
  30. 245
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java
  31. 237
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java
  32. 24
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/SwaggerController.java
  33. 183
      ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/TestController.java
  34. 121
      ruoyi-admin/src/main/java/com/ruoyi/web/core/config/SwaggerConfig.java
  35. 1
      ruoyi-admin/src/main/resources/META-INF/spring-devtools.properties
  36. 57
      ruoyi-admin/src/main/resources/application-druid.yml
  37. 146
      ruoyi-admin/src/main/resources/application.yml
  38. 9
      ruoyi-admin/src/main/resources/banner.txt
  39. 37
      ruoyi-admin/src/main/resources/i18n/messages.properties
  40. 93
      ruoyi-admin/src/main/resources/logback.xml
  41. 20
      ruoyi-admin/src/main/resources/mybatis/mybatis-config.xml
  42. 30
      ruoyi-code/pom.xml
  43. 98
      ruoyi-code/src/main/java/com/ruoyi/code/basic/controller/EquipDeptController.java
  44. 102
      ruoyi-code/src/main/java/com/ruoyi/code/basic/controller/EquipRoleController.java
  45. 126
      ruoyi-code/src/main/java/com/ruoyi/code/basic/controller/EquipUserController.java
  46. 49
      ruoyi-code/src/main/java/com/ruoyi/code/basic/domain/EquipDept.java
  47. 31
      ruoyi-code/src/main/java/com/ruoyi/code/basic/domain/EquipRole.java
  48. 105
      ruoyi-code/src/main/java/com/ruoyi/code/basic/domain/EquipUser.java
  49. 17
      ruoyi-code/src/main/java/com/ruoyi/code/basic/mapper/EquipDeptMapper.java
  50. 17
      ruoyi-code/src/main/java/com/ruoyi/code/basic/mapper/EquipRoleMapper.java
  51. 43
      ruoyi-code/src/main/java/com/ruoyi/code/basic/mapper/EquipUserMapper.java
  52. 22
      ruoyi-code/src/main/java/com/ruoyi/code/basic/seriver/IEquipDeptService.java
  53. 21
      ruoyi-code/src/main/java/com/ruoyi/code/basic/seriver/IEquipRoleService.java
  54. 44
      ruoyi-code/src/main/java/com/ruoyi/code/basic/seriver/IEquipUserService.java
  55. 34
      ruoyi-code/src/main/java/com/ruoyi/code/basic/seriver/impl/EquipDeptServiceImpl.java
  56. 33
      ruoyi-code/src/main/java/com/ruoyi/code/basic/seriver/impl/EquipRoleServiceImpl.java
  57. 87
      ruoyi-code/src/main/java/com/ruoyi/code/basic/seriver/impl/EquipUserServiceImpl.java
  58. 374
      ruoyi-code/src/main/java/com/ruoyi/code/equip/controller/AppController.java
  59. 98
      ruoyi-code/src/main/java/com/ruoyi/code/equip/controller/CustomerController.java
  60. 97
      ruoyi-code/src/main/java/com/ruoyi/code/equip/controller/EquipDamageController.java
  61. 136
      ruoyi-code/src/main/java/com/ruoyi/code/equip/controller/EquipInController.java
  62. 128
      ruoyi-code/src/main/java/com/ruoyi/code/equip/controller/EquipOutController.java
  63. 102
      ruoyi-code/src/main/java/com/ruoyi/code/equip/controller/EquipPositionController.java
  64. 136
      ruoyi-code/src/main/java/com/ruoyi/code/equip/controller/EquipPurchaseController.java
  65. 139
      ruoyi-code/src/main/java/com/ruoyi/code/equip/controller/EquipStockController.java
  66. 98
      ruoyi-code/src/main/java/com/ruoyi/code/equip/controller/EquipSupplierController.java
  67. 114
      ruoyi-code/src/main/java/com/ruoyi/code/equip/controller/EquipUntitledController.java
  68. 98
      ruoyi-code/src/main/java/com/ruoyi/code/equip/controller/EquipVoucherController.java
  69. 109
      ruoyi-code/src/main/java/com/ruoyi/code/equip/controller/EquipmentController.java
  70. 87
      ruoyi-code/src/main/java/com/ruoyi/code/equip/controller/IndexController.java
  71. 46
      ruoyi-code/src/main/java/com/ruoyi/code/equip/domain/AppData.java
  72. 45
      ruoyi-code/src/main/java/com/ruoyi/code/equip/domain/Customer.java
  73. 70
      ruoyi-code/src/main/java/com/ruoyi/code/equip/domain/EquipDamage.java
  74. 81
      ruoyi-code/src/main/java/com/ruoyi/code/equip/domain/EquipIn.java
  75. 33
      ruoyi-code/src/main/java/com/ruoyi/code/equip/domain/EquipJournalAccount.java
  76. 66
      ruoyi-code/src/main/java/com/ruoyi/code/equip/domain/EquipOut.java
  77. 35
      ruoyi-code/src/main/java/com/ruoyi/code/equip/domain/EquipPosition.java
  78. 91
      ruoyi-code/src/main/java/com/ruoyi/code/equip/domain/EquipPurchase.java
  79. 64
      ruoyi-code/src/main/java/com/ruoyi/code/equip/domain/EquipStock.java
  80. 48
      ruoyi-code/src/main/java/com/ruoyi/code/equip/domain/EquipSupplier.java
  81. 67
      ruoyi-code/src/main/java/com/ruoyi/code/equip/domain/EquipUntitled.java
  82. 34
      ruoyi-code/src/main/java/com/ruoyi/code/equip/domain/EquipVoucher.java
  83. 70
      ruoyi-code/src/main/java/com/ruoyi/code/equip/domain/Equipment.java
  84. 14
      ruoyi-code/src/main/java/com/ruoyi/code/equip/domain/IndexData.java
  85. 12
      ruoyi-code/src/main/java/com/ruoyi/code/equip/domain/ParamsDto.java
  86. 37
      ruoyi-code/src/main/java/com/ruoyi/code/equip/mapper/AppMapper.java
  87. 17
      ruoyi-code/src/main/java/com/ruoyi/code/equip/mapper/CustomerMapper.java
  88. 27
      ruoyi-code/src/main/java/com/ruoyi/code/equip/mapper/EquipDamageMapper.java
  89. 41
      ruoyi-code/src/main/java/com/ruoyi/code/equip/mapper/EquipInMapper.java
  90. 46
      ruoyi-code/src/main/java/com/ruoyi/code/equip/mapper/EquipOutMapper.java
  91. 17
      ruoyi-code/src/main/java/com/ruoyi/code/equip/mapper/EquipPositionMapper.java
  92. 26
      ruoyi-code/src/main/java/com/ruoyi/code/equip/mapper/EquipPurchaseMapper.java
  93. 42
      ruoyi-code/src/main/java/com/ruoyi/code/equip/mapper/EquipStockMapper.java
  94. 17
      ruoyi-code/src/main/java/com/ruoyi/code/equip/mapper/EquipSupplierMapper.java
  95. 33
      ruoyi-code/src/main/java/com/ruoyi/code/equip/mapper/EquipUntitledMapper.java
  96. 17
      ruoyi-code/src/main/java/com/ruoyi/code/equip/mapper/EquipVoucherMapper.java
  97. 35
      ruoyi-code/src/main/java/com/ruoyi/code/equip/mapper/EquipmentMapper.java
  98. 24
      ruoyi-code/src/main/java/com/ruoyi/code/equip/mapper/IndexMapper.java
  99. 35
      ruoyi-code/src/main/java/com/ruoyi/code/equip/service/AppService.java
  100. 22
      ruoyi-code/src/main/java/com/ruoyi/code/equip/service/ICustomerService.java
  101. Some files were not shown because too many files have changed in this diff Show More

47
.gitignore vendored

@ -0,0 +1,47 @@ @@ -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

20
LICENSE

@ -0,0 +1,20 @@ @@ -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.

12
bin/clean.bat

@ -0,0 +1,12 @@ @@ -0,0 +1,12 @@
@echo off
echo.
echo [信息] 清理工程target生成路径。
echo.
%~d0
cd %~dp0
cd ..
call mvn clean
pause

12
bin/package.bat

@ -0,0 +1,12 @@ @@ -0,0 +1,12 @@
@echo off
echo.
echo [信息] 打包Web工程,生成war/jar包文件。
echo.
%~d0
cd %~dp0
cd ..
call mvn clean package -Dmaven.test.skip=true
pause

14
bin/run.bat

@ -0,0 +1,14 @@ @@ -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

BIN
doc/若依环境使用手册.docx

Binary file not shown.

256
pom.xml

@ -0,0 +1,256 @@ @@ -0,0 +1,256 @@
<?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.3</version>
<name>ruoyi</name>
<url>http://www.ruoyi.vip</url>
<description>设备出入库管理系统</description>
<properties>
<ruoyi.version>3.8.3</ruoyi.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<maven-jar-plugin.version>3.1.1</maven-jar-plugin.version>
<druid.version>1.2.11</druid.version>
<bitwalker.version>1.21</bitwalker.version>
<swagger.version>3.0.0</swagger.version>
<kaptcha.version>2.3.2</kaptcha.version>
<mybatis-spring-boot.version>2.2.2</mybatis-spring-boot.version>
<pagehelper.boot.version>1.4.3</pagehelper.boot.version>
<fastjson.version>2.0.9</fastjson.version>
<oshi.version>6.2.1</oshi.version>
<commons.io.version>2.11.0</commons.io.version>
<commons.fileupload.version>1.4</commons.fileupload.version>
<commons.collections.version>3.2.2</commons.collections.version>
<poi.version>4.1.2</poi.version>
<velocity.version>2.3</velocity.version>
<jwt.version>0.9.1</jwt.version>
</properties>
<!-- 依赖声明 -->
<dependencyManagement>
<dependencies>
<!-- SpringBoot的依赖配置-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.5.14</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>
<!-- SpringBoot集成mybatis框架 -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>${mybatis-spring-boot.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>
<!-- 文件上传工具类 -->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>${commons.fileupload.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>
<!-- collections工具类 -->
<dependency>
<groupId>commons-collections</groupId>
<artifactId>commons-collections</artifactId>
<version>${commons.collections.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>com.github.penggle</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-code</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-code</module>
</modules>
<packaging>pom</packaging>
<dependencies>
</dependencies>
<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>

100
ruoyi-admin/pom.xml

@ -0,0 +1,100 @@ @@ -0,0 +1,100 @@
<?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.3</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<packaging>jar</packaging>
<artifactId>ruoyi-admin</artifactId>
<description>
web服务入口
</description>
<dependencies>
<!-- spring-boot-devtools -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional> <!-- 表示依赖不会传递 -->
</dependency>
<!-- swagger3-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-boot-starter</artifactId>
</dependency>
<!-- 防止进入swagger页面报类型转换错误,排除3.0.0中的引用,手动增加1.6.2版本 -->
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-models</artifactId>
<version>1.6.2</version>
</dependency>
<!-- Mysql驱动包 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- 核心模块-->
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-framework</artifactId>
</dependency>
<!-- 定时任务-->
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-quartz</artifactId>
</dependency>
<!-- 代码生成-->
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-generator</artifactId>
</dependency>
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-code</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.1.1.RELEASE</version>
<configuration>
<fork>true</fork> <!-- 如果没有该配置,devtools不会生效 -->
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.1.0</version>
<configuration>
<failOnMissingWebXml>false</failOnMissingWebXml>
<warName>${project.artifactId}</warName>
</configuration>
</plugin>
</plugins>
<finalName>${project.artifactId}</finalName>
</build>
</project>

21
ruoyi-admin/src/main/java/com/ruoyi/RuoYiApplication.java

@ -0,0 +1,21 @@ @@ -0,0 +1,21 @@
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("设备出入库启动完成!");
}
}

18
ruoyi-admin/src/main/java/com/ruoyi/RuoYiServletInitializer.java

@ -0,0 +1,18 @@ @@ -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);
}
}

94
ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CaptchaController.java

@ -0,0 +1,94 @@ @@ -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;
}
}

163
ruoyi-admin/src/main/java/com/ruoyi/web/controller/common/CommonController.java

@ -0,0 +1,163 @@ @@ -0,0 +1,163 @@
package com.ruoyi.web.controller.common;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import com.ruoyi.common.config.RuoYiConfig;
import com.ruoyi.common.constant.Constants;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.file.FileUploadUtils;
import com.ruoyi.common.utils.file.FileUtils;
import com.ruoyi.framework.config.ServerConfig;
/**
* 通用请求处理
*
* @author ruoyi
*/
@RestController
@RequestMapping("/common")
public class CommonController
{
private static final Logger log = LoggerFactory.getLogger(CommonController.class);
@Autowired
private ServerConfig serverConfig;
private static final String FILE_DELIMETER = ",";
/**
* 通用下载请求
*
* @param fileName 文件名称
* @param delete 是否删除
*/
@GetMapping("/download")
public void fileDownload(String fileName, Boolean delete, HttpServletResponse response, HttpServletRequest request)
{
try
{
if (!FileUtils.checkAllowDownload(fileName))
{
throw new Exception(StringUtils.format("文件名称({})非法,不允许下载。 ", fileName));
}
String realFileName = System.currentTimeMillis() + fileName.substring(fileName.indexOf("_") + 1);
String filePath = RuoYiConfig.getDownloadPath() + fileName;
response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
FileUtils.setAttachmentResponseHeader(response, realFileName);
FileUtils.writeBytes(filePath, response.getOutputStream());
if (delete)
{
FileUtils.deleteFile(filePath);
}
}
catch (Exception e)
{
log.error("下载文件失败", e);
}
}
/**
* 通用上传请求单个
*/
@PostMapping("/upload")
public AjaxResult uploadFile(MultipartFile file) throws Exception
{
try
{
// 上传文件路径
String filePath = RuoYiConfig.getUploadPath();
// 上传并返回新文件名称
String fileName = FileUploadUtils.upload(filePath, file);
String url = serverConfig.getUrl() + fileName;
AjaxResult ajax = AjaxResult.success();
ajax.put("url", url);
ajax.put("fileName", fileName);
ajax.put("newFileName", FileUtils.getName(fileName));
ajax.put("originalFilename", file.getOriginalFilename());
return ajax;
}
catch (Exception e)
{
return AjaxResult.error(e.getMessage());
}
}
/**
* 通用上传请求多个
*/
@PostMapping("/uploads")
public AjaxResult uploadFiles(List<MultipartFile> files) throws Exception
{
try
{
// 上传文件路径
String filePath = RuoYiConfig.getUploadPath();
List<String> urls = new ArrayList<String>();
List<String> fileNames = new ArrayList<String>();
List<String> newFileNames = new ArrayList<String>();
List<String> originalFilenames = new ArrayList<String>();
for (MultipartFile file : files)
{
// 上传并返回新文件名称
String fileName = FileUploadUtils.upload(filePath, file);
String url = serverConfig.getUrl() + fileName;
urls.add(url);
fileNames.add(fileName);
newFileNames.add(FileUtils.getName(fileName));
originalFilenames.add(file.getOriginalFilename());
}
AjaxResult ajax = AjaxResult.success();
ajax.put("urls", StringUtils.join(urls, FILE_DELIMETER));
ajax.put("fileNames", StringUtils.join(fileNames, FILE_DELIMETER));
ajax.put("newFileNames", StringUtils.join(newFileNames, FILE_DELIMETER));
ajax.put("originalFilenames", StringUtils.join(originalFilenames, FILE_DELIMETER));
return ajax;
}
catch (Exception e)
{
return AjaxResult.error(e.getMessage());
}
}
/**
* 本地资源通用下载
*/
@GetMapping("/download/resource")
public void resourceDownload(String resource, HttpServletRequest request, HttpServletResponse response)
throws Exception
{
try
{
if (!FileUtils.checkAllowDownload(resource))
{
throw new Exception(StringUtils.format("资源文件({})非法,不允许下载。 ", resource));
}
// 本地资源路径
String localPath = RuoYiConfig.getProfile();
// 数据库资源地址
String downloadPath = localPath + StringUtils.substringAfter(resource, Constants.RESOURCE_PREFIX);
// 下载名称
String downloadName = StringUtils.substringAfterLast(downloadPath, "/");
response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
FileUtils.setAttachmentResponseHeader(response, downloadName);
FileUtils.writeBytes(downloadPath, response.getOutputStream());
}
catch (Exception e)
{
log.error("下载文件失败", e);
}
}
}

120
ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/CacheController.java

@ -0,0 +1,120 @@ @@ -0,0 +1,120 @@
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 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(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();
}
}

27
ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/ServerController.java

@ -0,0 +1,27 @@ @@ -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);
}
}

69
ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysLogininforController.java

@ -0,0 +1,69 @@ @@ -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.SysLogininfor;
import com.ruoyi.system.service.ISysLogininforService;
/**
* 系统访问记录
*
* @author ruoyi
*/
@RestController
@RequestMapping("/monitor/logininfor")
public class SysLogininforController extends BaseController
{
@Autowired
private ISysLogininforService logininforService;
@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 AjaxResult.success();
}
}

69
ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysOperlogController.java

@ -0,0 +1,69 @@ @@ -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 AjaxResult.success();
}
}

92
ruoyi-admin/src/main/java/com/ruoyi/web/controller/monitor/SysUserOnlineController.java

@ -0,0 +1,92 @@ @@ -0,0 +1,92 @@
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))
{
if (StringUtils.equals(ipaddr, user.getIpaddr()) && StringUtils.equals(userName, user.getUsername()))
{
userOnlineList.add(userOnlineService.selectOnlineByInfo(ipaddr, userName, user));
}
}
else if (StringUtils.isNotEmpty(ipaddr))
{
if (StringUtils.equals(ipaddr, user.getIpaddr()))
{
userOnlineList.add(userOnlineService.selectOnlineByIpaddr(ipaddr, user));
}
}
else if (StringUtils.isNotEmpty(userName) && StringUtils.isNotNull(user.getUser()))
{
if (StringUtils.equals(userName, user.getUsername()))
{
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 AjaxResult.success();
}
}

134
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysConfigController.java

@ -0,0 +1,134 @@ @@ -0,0 +1,134 @@
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.constant.UserConstants;
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 AjaxResult.success(configService.selectConfigById(configId));
}
/**
* 根据参数键名查询参数值
*/
@GetMapping(value = "/configKey/{configKey}")
public AjaxResult getConfigKey(@PathVariable String configKey)
{
return AjaxResult.success(configService.selectConfigByKey(configKey));
}
/**
* 新增参数配置
*/
@PreAuthorize("@ss.hasPermi('system:config:add')")
@Log(title = "参数管理", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@Validated @RequestBody SysConfig config)
{
if (UserConstants.NOT_UNIQUE.equals(configService.checkConfigKeyUnique(config)))
{
return AjaxResult.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 (UserConstants.NOT_UNIQUE.equals(configService.checkConfigKeyUnique(config)))
{
return AjaxResult.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 AjaxResult.success();
}
}

165
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDeptController.java

@ -0,0 +1,165 @@ @@ -0,0 +1,165 @@
package com.ruoyi.web.controller.system;
import java.util.Iterator;
import java.util.List;
import org.apache.commons.lang3.ArrayUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.constant.UserConstants;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.entity.SysDept;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.system.service.ISysDeptService;
/**
* 部门信息
*
* @author ruoyi
*/
@RestController
@RequestMapping("/system/dept")
public class SysDeptController extends BaseController
{
@Autowired
private ISysDeptService deptService;
/**
* 获取部门列表
*/
@PreAuthorize("@ss.hasPermi('system:dept:list')")
@GetMapping("/list")
public AjaxResult list(SysDept dept)
{
List<SysDept> depts = deptService.selectDeptList(dept);
return AjaxResult.success(depts);
}
/**
* 查询部门列表排除节点
*/
@PreAuthorize("@ss.hasPermi('system:dept:list')")
@GetMapping("/list/exclude/{deptId}")
public AjaxResult excludeChild(@PathVariable(value = "deptId", required = false) Long deptId)
{
List<SysDept> depts = deptService.selectDeptList(new SysDept());
Iterator<SysDept> it = depts.iterator();
while (it.hasNext())
{
SysDept d = (SysDept) it.next();
if (d.getDeptId().intValue() == deptId
|| ArrayUtils.contains(StringUtils.split(d.getAncestors(), ","), deptId + ""))
{
it.remove();
}
}
return AjaxResult.success(depts);
}
/**
* 根据部门编号获取详细信息
*/
@PreAuthorize("@ss.hasPermi('system:dept:query')")
@GetMapping(value = "/{deptId}")
public AjaxResult getInfo(@PathVariable Long deptId)
{
deptService.checkDeptDataScope(deptId);
return AjaxResult.success(deptService.selectDeptById(deptId));
}
/**
* 获取部门下拉树列表
*/
@GetMapping("/treeselect")
public AjaxResult treeselect(SysDept dept)
{
List<SysDept> depts = deptService.selectDeptList(dept);
return AjaxResult.success(deptService.buildDeptTreeSelect(depts));
}
/**
* 加载对应角色部门列表树
*/
@GetMapping(value = "/roleDeptTreeselect/{roleId}")
public AjaxResult roleDeptTreeselect(@PathVariable("roleId") Long roleId)
{
List<SysDept> depts = deptService.selectDeptList(new SysDept());
AjaxResult ajax = AjaxResult.success();
ajax.put("checkedKeys", deptService.selectDeptListByRoleId(roleId));
ajax.put("depts", deptService.buildDeptTreeSelect(depts));
return ajax;
}
/**
* 新增部门
*/
@PreAuthorize("@ss.hasPermi('system:dept:add')")
@Log(title = "部门管理", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@Validated @RequestBody SysDept dept)
{
if (UserConstants.NOT_UNIQUE.equals(deptService.checkDeptNameUnique(dept)))
{
return AjaxResult.error("新增部门'" + dept.getDeptName() + "'失败,部门名称已存在");
}
dept.setCreateBy(getUsername());
return toAjax(deptService.insertDept(dept));
}
/**
* 修改部门
*/
@PreAuthorize("@ss.hasPermi('system:dept:edit')")
@Log(title = "部门管理", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@Validated @RequestBody SysDept dept)
{
Long deptId = dept.getDeptId();
deptService.checkDeptDataScope(deptId);
if (UserConstants.NOT_UNIQUE.equals(deptService.checkDeptNameUnique(dept)))
{
return AjaxResult.error("修改部门'" + dept.getDeptName() + "'失败,部门名称已存在");
}
else if (dept.getParentId().equals(deptId))
{
return AjaxResult.error("修改部门'" + dept.getDeptName() + "'失败,上级部门不能是自己");
}
else if (StringUtils.equals(UserConstants.DEPT_DISABLE, dept.getStatus()) && deptService.selectNormalChildrenDeptById(deptId) > 0)
{
return AjaxResult.error("该部门包含未停用的子部门!");
}
dept.setUpdateBy(getUsername());
return toAjax(deptService.updateDept(dept));
}
/**
* 删除部门
*/
@PreAuthorize("@ss.hasPermi('system:dept:remove')")
@Log(title = "部门管理", businessType = BusinessType.DELETE)
@DeleteMapping("/{deptId}")
public AjaxResult remove(@PathVariable Long deptId)
{
if (deptService.hasChildByDeptId(deptId))
{
return AjaxResult.error("存在下级部门,不允许删除");
}
if (deptService.checkDeptExistUser(deptId))
{
return AjaxResult.error("部门存在用户,不允许删除");
}
deptService.checkDeptDataScope(deptId);
return toAjax(deptService.deleteDeptById(deptId));
}
}

121
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDictDataController.java

@ -0,0 +1,121 @@ @@ -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 AjaxResult.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 AjaxResult.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();
}
}

132
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysDictTypeController.java

@ -0,0 +1,132 @@ @@ -0,0 +1,132 @@
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.constant.UserConstants;
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 AjaxResult.success(dictTypeService.selectDictTypeById(dictId));
}
/**
* 新增字典类型
*/
@PreAuthorize("@ss.hasPermi('system:dict:add')")
@Log(title = "字典类型", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@Validated @RequestBody SysDictType dict)
{
if (UserConstants.NOT_UNIQUE.equals(dictTypeService.checkDictTypeUnique(dict)))
{
return AjaxResult.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 (UserConstants.NOT_UNIQUE.equals(dictTypeService.checkDictTypeUnique(dict)))
{
return AjaxResult.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 AjaxResult.success();
}
/**
* 获取字典选择框列表
*/
@GetMapping("/optionselect")
public AjaxResult optionselect()
{
List<SysDictType> dictTypes = dictTypeService.selectDictTypeAll();
return AjaxResult.success(dictTypes);
}
}

29
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysIndexController.java

@ -0,0 +1,29 @@ @@ -0,0 +1,29 @@
package com.ruoyi.web.controller.system;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.common.config.RuoYiConfig;
import com.ruoyi.common.utils.StringUtils;
/**
* 首页
*
* @author ruoyi
*/
@RestController
public class SysIndexController
{
/** 系统基础配置 */
@Autowired
private RuoYiConfig ruoyiConfig;
/**
* 访问首页提示语
*/
@RequestMapping("/")
public String index()
{
return StringUtils.format("欢迎使用{}后台管理框架,当前版本:v{},请通过前端地址访问。", ruoyiConfig.getName(), ruoyiConfig.getVersion());
}
}

149
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java

@ -0,0 +1,149 @@ @@ -0,0 +1,149 @@
package com.ruoyi.web.controller.system;
import com.aliyun.dingtalkcontact_1_0.models.GetUserHeaders;
import com.aliyun.dingtalkcontact_1_0.models.GetUserResponse;
import com.aliyun.dingtalkoauth2_1_0.models.GetUserTokenRequest;
import com.aliyun.dingtalkoauth2_1_0.models.GetUserTokenResponse;
import com.aliyun.teaopenapi.models.Config;
import com.aliyun.teautil.models.RuntimeOptions;
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.utils.SecurityUtils;
import com.ruoyi.framework.web.service.SysLoginService;
import com.ruoyi.framework.web.service.SysPermissionService;
import com.ruoyi.system.service.ISysMenuService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Set;
/**
* 登录验证
*
* @author ruoyi
*/
@RestController
public class SysLoginController
{
@Autowired
private SysLoginService loginService;
@Autowired
private ISysMenuService menuService;
@Autowired
private SysPermissionService permissionService;
@Value("${Ding.clientID}")
private String clientID;
@Value("${Ding.clientSecret}")
private String clientSecret;
/**
* 登录方法
*
* @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;
}
/**
* 钉钉扫码登录
* @param authCode
* @return
* @throws Exception
*/
@PostMapping("/auth")
public AjaxResult auth(@RequestParam("authCode") String authCode) throws Exception {
// 通过授权码获取access_token
GetUserTokenResponse userTokenResponse = getUserAccessToken(clientID, clientSecret, authCode, "authorization_code");
// 通过token获取当前用户信息
GetUserResponse me = getUserWithOptions(userTokenResponse.getBody().getAccessToken(), "me");
// 手机号
String mobile = me.getBody().getMobile();
AjaxResult ajax = AjaxResult.success();
// 生成令牌
String token = loginService.auth(mobile);
ajax.put(Constants.TOKEN, token);
return ajax;
}
public GetUserResponse getUserWithOptions(String accessToken, String unionId) throws Exception {
// 准备请求配置参数
Config config = new Config();
// 设置请求协议
config.protocol = "https";
// 设置请求区域
config.regionId = "central";
// 初始化账号Client
com.aliyun.dingtalkcontact_1_0.Client client = new com.aliyun.dingtalkcontact_1_0.Client(config);
GetUserHeaders getUserHeaders = new GetUserHeaders();
getUserHeaders.xAcsDingtalkAccessToken = accessToken;
return client.getUserWithOptions(unionId, getUserHeaders, new RuntimeOptions());
}
public GetUserTokenResponse getUserAccessToken(String appKey, String appSecret, String authCode, String grantType) throws Exception {
// 准备请求配置参数
Config config = new Config();
// 设置请求协议
config.protocol = "https";
// 设置请求区域
config.regionId = "central";
// 初始化账号Client
com.aliyun.dingtalkoauth2_1_0.Client client = new com.aliyun.dingtalkoauth2_1_0.Client(config);
GetUserTokenRequest getUserTokenRequest = new GetUserTokenRequest()
.setClientId(appKey)
.setClientSecret(appSecret)
.setCode(authCode)
.setGrantType(grantType);
return client.getUserToken(getUserTokenRequest);
}
/**
* 获取用户信息
*
* @return 用户信息
*/
@GetMapping("getInfo")
public AjaxResult getInfo()
{
SysUser user = SecurityUtils.getLoginUser().getUser();
// 角色集合
Set<String> roles = permissionService.getRolePermission(user);
// 权限集合
Set<String> permissions = permissionService.getMenuPermission(user);
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));
}
}

142
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysMenuController.java

@ -0,0 +1,142 @@ @@ -0,0 +1,142 @@
package com.ruoyi.web.controller.system;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.constant.UserConstants;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.entity.SysMenu;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.system.service.ISysMenuService;
/**
* 菜单信息
*
* @author ruoyi
*/
@RestController
@RequestMapping("/system/menu")
public class SysMenuController extends BaseController
{
@Autowired
private ISysMenuService menuService;
/**
* 获取菜单列表
*/
@PreAuthorize("@ss.hasPermi('system:menu:list')")
@GetMapping("/list")
public AjaxResult list(SysMenu menu)
{
List<SysMenu> menus = menuService.selectMenuList(menu, getUserId());
return AjaxResult.success(menus);
}
/**
* 根据菜单编号获取详细信息
*/
@PreAuthorize("@ss.hasPermi('system:menu:query')")
@GetMapping(value = "/{menuId}")
public AjaxResult getInfo(@PathVariable Long menuId)
{
return AjaxResult.success(menuService.selectMenuById(menuId));
}
/**
* 获取菜单下拉树列表
*/
@GetMapping("/treeselect")
public AjaxResult treeselect(SysMenu menu)
{
List<SysMenu> menus = menuService.selectMenuList(menu, getUserId());
return AjaxResult.success(menuService.buildMenuTreeSelect(menus));
}
/**
* 加载对应角色菜单列表树
*/
@GetMapping(value = "/roleMenuTreeselect/{roleId}")
public AjaxResult roleMenuTreeselect(@PathVariable("roleId") Long roleId)
{
List<SysMenu> menus = menuService.selectMenuList(getUserId());
AjaxResult ajax = AjaxResult.success();
ajax.put("checkedKeys", menuService.selectMenuListByRoleId(roleId));
ajax.put("menus", menuService.buildMenuTreeSelect(menus));
return ajax;
}
/**
* 新增菜单
*/
@PreAuthorize("@ss.hasPermi('system:menu:add')")
@Log(title = "菜单管理", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@Validated @RequestBody SysMenu menu)
{
if (UserConstants.NOT_UNIQUE.equals(menuService.checkMenuNameUnique(menu)))
{
return AjaxResult.error("新增菜单'" + menu.getMenuName() + "'失败,菜单名称已存在");
}
else if (UserConstants.YES_FRAME.equals(menu.getIsFrame()) && !StringUtils.ishttp(menu.getPath()))
{
return AjaxResult.error("新增菜单'" + menu.getMenuName() + "'失败,地址必须以http(s)://开头");
}
menu.setCreateBy(getUsername());
return toAjax(menuService.insertMenu(menu));
}
/**
* 修改菜单
*/
@PreAuthorize("@ss.hasPermi('system:menu:edit')")
@Log(title = "菜单管理", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@Validated @RequestBody SysMenu menu)
{
if (UserConstants.NOT_UNIQUE.equals(menuService.checkMenuNameUnique(menu)))
{
return AjaxResult.error("修改菜单'" + menu.getMenuName() + "'失败,菜单名称已存在");
}
else if (UserConstants.YES_FRAME.equals(menu.getIsFrame()) && !StringUtils.ishttp(menu.getPath()))
{
return AjaxResult.error("修改菜单'" + menu.getMenuName() + "'失败,地址必须以http(s)://开头");
}
else if (menu.getMenuId().equals(menu.getParentId()))
{
return AjaxResult.error("修改菜单'" + menu.getMenuName() + "'失败,上级菜单不能选择自己");
}
menu.setUpdateBy(getUsername());
return toAjax(menuService.updateMenu(menu));
}
/**
* 删除菜单
*/
@PreAuthorize("@ss.hasPermi('system:menu:remove')")
@Log(title = "菜单管理", businessType = BusinessType.DELETE)
@DeleteMapping("/{menuId}")
public AjaxResult remove(@PathVariable("menuId") Long menuId)
{
if (menuService.hasChildByMenuId(menuId))
{
return AjaxResult.error("存在子菜单,不允许删除");
}
if (menuService.checkMenuExistRole(menuId))
{
return AjaxResult.error("菜单已分配,不允许删除");
}
return toAjax(menuService.deleteMenuById(menuId));
}
}

91
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysNoticeController.java

@ -0,0 +1,91 @@ @@ -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 AjaxResult.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));
}
}

130
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysPostController.java

@ -0,0 +1,130 @@ @@ -0,0 +1,130 @@
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.constant.UserConstants;
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 AjaxResult.success(postService.selectPostById(postId));
}
/**
* 新增岗位
*/
@PreAuthorize("@ss.hasPermi('system:post:add')")
@Log(title = "岗位管理", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@Validated @RequestBody SysPost post)
{
if (UserConstants.NOT_UNIQUE.equals(postService.checkPostNameUnique(post)))
{
return AjaxResult.error("新增岗位'" + post.getPostName() + "'失败,岗位名称已存在");
}
else if (UserConstants.NOT_UNIQUE.equals(postService.checkPostCodeUnique(post)))
{
return AjaxResult.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 (UserConstants.NOT_UNIQUE.equals(postService.checkPostNameUnique(post)))
{
return AjaxResult.error("修改岗位'" + post.getPostName() + "'失败,岗位名称已存在");
}
else if (UserConstants.NOT_UNIQUE.equals(postService.checkPostCodeUnique(post)))
{
return AjaxResult.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 AjaxResult.success(posts);
}
}

142
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysProfileController.java

@ -0,0 +1,142 @@ @@ -0,0 +1,142 @@
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.constant.UserConstants;
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 sysUser = loginUser.getUser();
user.setUserName(sysUser.getUserName());
if (StringUtils.isNotEmpty(user.getPhonenumber())
&& UserConstants.NOT_UNIQUE.equals(userService.checkPhoneUnique(user)))
{
return AjaxResult.error("修改用户'" + user.getUserName() + "'失败,手机号码已存在");
}
if (StringUtils.isNotEmpty(user.getEmail())
&& UserConstants.NOT_UNIQUE.equals(userService.checkEmailUnique(user)))
{
return AjaxResult.error("修改用户'" + user.getUserName() + "'失败,邮箱账号已存在");
}
user.setUserId(sysUser.getUserId());
user.setPassword(null);
if (userService.updateUserProfile(user) > 0)
{
// 更新缓存用户信息
sysUser.setNickName(user.getNickName());
sysUser.setPhonenumber(user.getPhonenumber());
sysUser.setEmail(user.getEmail());
sysUser.setSex(user.getSex());
tokenService.setLoginUser(loginUser);
return AjaxResult.success();
}
return AjaxResult.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 AjaxResult.error("修改密码失败,旧密码错误");
}
if (SecurityUtils.matchesPassword(newPassword, password))
{
return AjaxResult.error("新密码不能与旧密码相同");
}
if (userService.resetUserPwd(userName, SecurityUtils.encryptPassword(newPassword)) > 0)
{
// 更新缓存用户密码
loginUser.getUser().setPassword(SecurityUtils.encryptPassword(newPassword));
tokenService.setLoginUser(loginUser);
return AjaxResult.success();
}
return AjaxResult.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 AjaxResult.error("上传图片异常,请联系管理员");
}
}

38
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRegisterController.java

@ -0,0 +1,38 @@ @@ -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);
}
}

245
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysRoleController.java

@ -0,0 +1,245 @@ @@ -0,0 +1,245 @@
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.constant.UserConstants;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
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.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;
@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 AjaxResult.success(roleService.selectRoleById(roleId));
}
/**
* 新增角色
*/
@PreAuthorize("@ss.hasPermi('system:role:add')")
@Log(title = "角色管理", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@Validated @RequestBody SysRole role)
{
if (UserConstants.NOT_UNIQUE.equals(roleService.checkRoleNameUnique(role)))
{
return AjaxResult.error("新增角色'" + role.getRoleName() + "'失败,角色名称已存在");
}
else if (UserConstants.NOT_UNIQUE.equals(roleService.checkRoleKeyUnique(role)))
{
return AjaxResult.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 (UserConstants.NOT_UNIQUE.equals(roleService.checkRoleNameUnique(role)))
{
return AjaxResult.error("修改角色'" + role.getRoleName() + "'失败,角色名称已存在");
}
else if (UserConstants.NOT_UNIQUE.equals(roleService.checkRoleKeyUnique(role)))
{
return AjaxResult.error("修改角色'" + role.getRoleName() + "'失败,角色权限已存在");
}
role.setUpdateBy(getUsername());
if (roleService.updateRole(role) > 0)
{
// 更新缓存用户权限
LoginUser loginUser = getLoginUser();
if (StringUtils.isNotNull(loginUser.getUser()) && !loginUser.getUser().isAdmin())
{
loginUser.setPermissions(permissionService.getMenuPermission(loginUser.getUser()));
loginUser.setUser(userService.selectUserByUserName(loginUser.getUser().getUserName()));
tokenService.setLoginUser(loginUser);
}
return AjaxResult.success();
}
return AjaxResult.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 AjaxResult.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));
}
}

237
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysUserController.java

@ -0,0 +1,237 @@ @@ -0,0 +1,237 @@
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.constant.UserConstants;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
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.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 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 AjaxResult.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)
{
if (UserConstants.NOT_UNIQUE.equals(userService.checkUserNameUnique(user.getUserName())))
{
return AjaxResult.error("新增用户'" + user.getUserName() + "'失败,登录账号已存在");
}
else if (StringUtils.isNotEmpty(user.getPhonenumber())
&& UserConstants.NOT_UNIQUE.equals(userService.checkPhoneUnique(user)))
{
return AjaxResult.error("新增用户'" + user.getUserName() + "'失败,手机号码已存在");
}
else if (StringUtils.isNotEmpty(user.getEmail())
&& UserConstants.NOT_UNIQUE.equals(userService.checkEmailUnique(user)))
{
return AjaxResult.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());
if (StringUtils.isNotEmpty(user.getPhonenumber())
&& UserConstants.NOT_UNIQUE.equals(userService.checkPhoneUnique(user)))
{
return AjaxResult.error("修改用户'" + user.getUserName() + "'失败,手机号码已存在");
}
else if (StringUtils.isNotEmpty(user.getEmail())
&& UserConstants.NOT_UNIQUE.equals(userService.checkEmailUnique(user)))
{
return AjaxResult.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);
userService.insertUserAuth(userId, roleIds);
return success();
}
}

24
ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/SwaggerController.java

@ -0,0 +1,24 @@ @@ -0,0 +1,24 @@
package com.ruoyi.web.controller.tool;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import com.ruoyi.common.core.controller.BaseController;
/**
* swagger 接口
*
* @author ruoyi
*/
@Controller
@RequestMapping("/tool/swagger")
public class SwaggerController extends BaseController
{
@PreAuthorize("@ss.hasPermi('tool:swagger:view')")
@GetMapping()
public String index()
{
return redirect("/swagger-ui.html");
}
}

183
ruoyi-admin/src/main/java/com/ruoyi/web/controller/tool/TestController.java

@ -0,0 +1,183 @@ @@ -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;
}
}

121
ruoyi-admin/src/main/java/com/ruoyi/web/core/config/SwaggerConfig.java

@ -0,0 +1,121 @@ @@ -0,0 +1,121 @@
package com.ruoyi.web.core.config;
import com.ruoyi.common.config.RuoYiConfig;
import io.swagger.annotations.ApiOperation;
import io.swagger.models.auth.In;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.ApiInfoBuilder;
import springfox.documentation.builders.PathSelectors;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.service.*;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spi.service.contexts.SecurityContext;
import springfox.documentation.spring.web.plugins.Docket;
import java.util.ArrayList;
import java.util.List;
/**
* Swagger2的接口配置
*
* @author ruoyi
*/
@Configuration
public class SwaggerConfig
{
/** 系统基础配置 */
@Autowired
private RuoYiConfig ruoyiConfig;
/** 是否开启swagger */
@Value("${swagger.enabled}")
private boolean enabled;
/** 设置请求的统一前缀 */
@Value("${swagger.pathMapping}")
private String pathMapping;
/**
* 创建API
*/
@Bean
public Docket createRestApi()
{
return new Docket(DocumentationType.OAS_30)
// 是否启用Swagger
.enable(enabled)
// 用来创建该API的基本信息,展示在文档的页面中(自定义展示的信息)
.apiInfo(apiInfo())
// 设置哪些接口暴露给Swagger展示
.select()
// 扫描所有有注解的api,用这种方式更灵活
.apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
// 扫描指定包中的swagger注解
// .apis(RequestHandlerSelectors.basePackage("com.ruoyi.project.tool.swagger"))
// 扫描所有 .apis(RequestHandlerSelectors.any())
.paths(PathSelectors.any())
.build()
/* 设置安全模式,swagger可以设置访问token */
.securitySchemes(securitySchemes())
.securityContexts(securityContexts())
.pathMapping(pathMapping);
}
/**
* 安全模式这里指定token通过Authorization头请求头传递
*/
private List<SecurityScheme> securitySchemes()
{
List<SecurityScheme> apiKeyList = new ArrayList<SecurityScheme>();
apiKeyList.add(new ApiKey("Authorization", "Authorization", In.HEADER.toValue()));
return apiKeyList;
}
/**
* 安全上下文
*/
private List<SecurityContext> securityContexts()
{
List<SecurityContext> securityContexts = new ArrayList<>();
securityContexts.add(
SecurityContext.builder()
.securityReferences(defaultAuth())
.operationSelector(o -> o.requestMappingPattern().matches("/.*"))
.build());
return securityContexts;
}
/**
* 默认的安全上引用
*/
private List<SecurityReference> defaultAuth()
{
AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");
AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
authorizationScopes[0] = authorizationScope;
List<SecurityReference> securityReferences = new ArrayList<>();
securityReferences.add(new SecurityReference("Authorization", authorizationScopes));
return securityReferences;
}
/**
* 添加摘要信息
*/
private ApiInfo apiInfo()
{
// 用ApiInfoBuilder进行定制
return new ApiInfoBuilder()
// 设置标题
.title("标题:华双管理系统_接口文档")
// 描述
.description("描述:具体包括XXX,XXX模块...")
// 作者信息
.contact(new Contact(ruoyiConfig.getName(), null, null))
// 版本
.version("版本号:" + ruoyiConfig.getVersion())
.build();
}
}

1
ruoyi-admin/src/main/resources/META-INF/spring-devtools.properties

@ -0,0 +1 @@ @@ -0,0 +1 @@
restart.include.json=/com.alibaba.fastjson.*.jar

57
ruoyi-admin/src/main/resources/application-druid.yml

@ -0,0 +1,57 @@ @@ -0,0 +1,57 @@
# 数据源配置
spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driverClassName: com.mysql.cj.jdbc.Driver
druid:
# 主库数据源
master:
url: jdbc:mysql://localhost:3306/crk?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
username: crk
password: crk123
# 从库数据源
slave:
# 从数据源开关/默认关闭
enabled: false
url:
username:
password:
# 初始连接数
initialSize: 5
# 最小连接池数量
minIdle: 10
# 最大连接池数量
maxActive: 20
# 配置获取连接等待超时的时间
maxWait: 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

146
ruoyi-admin/src/main/resources/application.yml

@ -0,0 +1,146 @@ @@ -0,0 +1,146 @@
# 项目相关配置
ruoyi:
# 名称
name: Huas
# 版本
version: 3.8.3
# 版权年份
copyrightYear: 2023
# 实例演示开关
demoEnabled: true
# 文件路径 示例( Windows配置D:/huas/uploadPath,Linux配置 /home/huas/uploadPath)
profile: D:/huas/uploadPath
# 获取ip地址开关
addressEnabled: false
# 验证码类型 math 数组计算 char 字符验证
captchaType: math
# 开发环境配置
server:
# 服务器的HTTP端口,默认为8080
port: 8011
servlet:
# 应用的访问路径
context-path: /crk
tomcat:
# tomcat的URI编码
uri-encoding: UTF-8
# 连接数满后的排队数,默认为100
accept-count: 1000
threads:
# tomcat最大线程数,默认为200
max: 800
# Tomcat启动初始化的线程数,默认值10
min-spare: 100
# 日志配置
logging:
level:
com.ruoyi: debug
org.springframework: warn
# 用户配置
user:
password:
# 密码最大错误次数
maxRetryCount: 5
# 密码锁定时间(默认10分钟)
lockTime: 10
# Spring配置
spring:
# 资源信息
messages:
# 国际化资源文件路径
basename: i18n/messages
profiles:
active: druid
# 文件上传
servlet:
multipart:
# 单个文件大小
max-file-size: 10MB
# 设置总上传的文件大小
max-request-size: 20MB
# 服务模块
devtools:
restart:
# 热部署开关
enabled: true
# redis 配置
redis:
# 地址
host: localhost
# 端口,默认为6379
port: 6379
# 数据库索引
database: 9
# 密码
password:
# 连接超时时间
timeout: 10s
lettuce:
pool:
# 连接池中的最小空闲连接
min-idle: 0
# 连接池中的最大空闲连接
max-idle: 8
# 连接池的最大数据库连接数
max-active: 8
# #连接池最大阻塞等待时间(使用负值表示没有限制)
max-wait: -1ms
# token配置
token:
# 令牌自定义标识
header: Authorization
# 令牌密钥
secret: abcdefghijklmnopqrstuvwxyz
# 令牌有效期(默认30分钟)
expireTime: 30
# MyBatis Plus配置
mybatis-plus:
# 搜索指定包别名
typeAliasesPackage: com.ruoyi.**.domain
# 配置mapper的扫描,找到所有的mapper.xml映射文件
mapperLocations: classpath*:mapper/**/*Mapper.xml
# 加载全局的配置文件
configLocation: classpath:mybatis/mybatis-config.xml
# PageHelper分页插件
pagehelper:
helperDialect: mysql
supportMethodsArguments: true
params: count=countSql
# Swagger配置
swagger:
# 是否开启swagger
enabled: true
# 请求前缀
pathMapping: /dev-api
# 防止XSS攻击
xss:
# 过滤开关
enabled: true
# 排除链接(多个用逗号分隔)
excludes: /system/notice
# 匹配链接
urlPatterns: /system/*,/monitor/*,/tool/*
audience:
clientId: 08793e0d9c361bbc460cff558807af8a
# 密钥, 经过Base64加密, 可自行替换。Base64加解密工具:http://tool.chinaz.com/Tools/Base64.aspx
base64Secret: dG9uZ3dlaXRpYW5jYWk=
# JWT的签发主体,存入issuer
iss: issued by tt
# 过期时间毫秒
expiresSecond: 604800000
#Dingding扫码配置
Ding:
# ClientID (原 AppKey 和 SuiteKey)
clientID: "ding7znlbbvf7lv7idpp"
# ClientSecret (原 AppSecret 和 SuiteSecret)
clientSecret: "noqjdlW6xwADgvJmg_UeGTlX-3LhJ4gobrUzEW_XypMr7kA9Wnj_pDeJErVZzCrZ"

9
ruoyi-admin/src/main/resources/banner.txt

@ -0,0 +1,9 @@ @@ -0,0 +1,9 @@
Application Version: ${ruoyi.version}
Spring Boot Version: ${spring-boot.version}
________ ________ ___ __
|\ ____\|\ __ \|\ \|\ \
\ \ \___|\ \ \|\ \ \ \/ /|_
\ \ \ \ \ _ _\ \ ___ \
\ \ \____\ \ \\ \\ \ \\ \ \
\ \_______\ \__\\ _\\ \__\\ \__\
\|_______|\|__|\|__|\|__| \|__|

37
ruoyi-admin/src/main/resources/i18n/messages.properties

@ -0,0 +1,37 @@ @@ -0,0 +1,37 @@
#错误消息
not.null=* 必须填写
user.jcaptcha.error=验证码错误
user.jcaptcha.expire=验证码已失效
user.not.exists=用户不存在/密码错误
user.password.not.match=用户不存在/密码错误
user.password.retry.limit.count=密码输入错误{0}次
user.password.retry.limit.exceed=密码输入错误{0}次,帐户锁定{1}分钟
user.password.delete=对不起,您的账号已被删除
user.blocked=用户已封禁,请联系管理员
role.blocked=角色已封禁,请联系管理员
user.logout.success=退出成功
length.not.valid=长度必须在{min}到{max}个字符之间
user.username.not.valid=* 2到20个汉字、字母、数字或下划线组成,且必须以非数字开头
user.password.not.valid=* 5-50个字符
user.email.not.valid=邮箱格式错误
user.mobile.phone.number.not.valid=手机号格式错误
user.login.success=登录成功
user.register.success=注册成功
user.notfound=请重新登录
user.forcelogout=管理员强制退出,请重新登录
user.unknown.error=未知错误,请重新登录
##文件上传消息
upload.exceed.maxSize=上传的文件大小超出限制的文件大小!<br/>允许的文件最大大小是:{0}MB!
upload.filename.exceed.length=上传的文件名最长{0}个字符
##权限
no.permission=您没有数据的权限,请联系管理员添加权限 [{0}]
no.create.permission=您没有创建数据的权限,请联系管理员添加权限 [{0}]
no.update.permission=您没有修改数据的权限,请联系管理员添加权限 [{0}]
no.delete.permission=您没有删除数据的权限,请联系管理员添加权限 [{0}]
no.export.permission=您没有导出数据的权限,请联系管理员添加权限 [{0}]
no.view.permission=您没有查看数据的权限,请联系管理员添加权限 [{0}]

93
ruoyi-admin/src/main/resources/logback.xml

@ -0,0 +1,93 @@ @@ -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>

20
ruoyi-admin/src/main/resources/mybatis/mybatis-config.xml

@ -0,0 +1,20 @@ @@ -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>

30
ruoyi-code/pom.xml

@ -0,0 +1,30 @@ @@ -0,0 +1,30 @@
<?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.3</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>ruoyi-code</artifactId>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<!-- 通用工具-->
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-common</artifactId>
</dependency>
<dependency>
<groupId>com.ruoyi</groupId>
<artifactId>ruoyi-framework</artifactId>
</dependency>
</dependencies>
</project>

98
ruoyi-code/src/main/java/com/ruoyi/code/basic/controller/EquipDeptController.java

@ -0,0 +1,98 @@ @@ -0,0 +1,98 @@
package com.ruoyi.code.basic.controller;
import com.ruoyi.code.basic.domain.EquipDept;
import com.ruoyi.code.basic.seriver.IEquipDeptService;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.page.R;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.poi.ExcelUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
/**
* 部门管理Controller
*
* @author ruoyi
* @date 2023-08-03
*/
@RestController
@RequestMapping("/basic/dept")
public class EquipDeptController extends BaseController
{
@Autowired
private IEquipDeptService equipDeptService;
/**
* 查询列表
*/
@PreAuthorize("@ss.hasPermi('basic:dept:list')")
@RequestMapping("/list")
public R list(@RequestParam Map<String, Object> params){
return equipDeptService.queryPage(params);
}
/**
* 获取详细信息
*/
@RequestMapping("/info/{id}")
@PreAuthorize("@ss.hasPermi('basic:dept:query')")
public R info(@PathVariable("id") Long id){
EquipDept equipDept = equipDeptService.getById(id);
return R.ok().put("data", equipDept);
}
/**
* 导出列表
*/
@PreAuthorize("@ss.hasPermi('basic:dept:export')")
@Log(title = "列表", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(HttpServletResponse response, EquipDept equipDept)
{
List<EquipDept> list = equipDeptService.list();
ExcelUtil<EquipDept> util = new ExcelUtil<EquipDept>(EquipDept.class);
util.exportExcel(response, list, "列表数据");
}
/**
* 新增
*/
@RequestMapping("/add")
@Log(title = "EquipDept", businessType = BusinessType.INSERT)
@PreAuthorize("@ss.hasPermi('basic:dept:add')")
public R add(@RequestBody EquipDept equipDept){
equipDeptService.save(equipDept);
return R.ok();
}
/**
* 修改
*/
@RequestMapping("/edit")
@PreAuthorize("@ss.hasPermi('basic:dept:edit')")
@Log(title = "EquipDept", businessType = BusinessType.UPDATE)
public R edit(@RequestBody EquipDept equipDept){
equipDeptService.updateById(equipDept);
return R.ok();
}
/**
* 删除
*/
@RequestMapping("/delete/{ids}")
@PreAuthorize("@ss.hasPermi('basic:dept:remove')")
@Log(title = "EquipDept", businessType = BusinessType.DELETE)
public R delete(@PathVariable Long[] ids){
equipDeptService.removeByIds(Arrays.asList(ids));
return R.ok();
}
}

102
ruoyi-code/src/main/java/com/ruoyi/code/basic/controller/EquipRoleController.java

@ -0,0 +1,102 @@ @@ -0,0 +1,102 @@
package com.ruoyi.code.basic.controller;
import java.util.List;
import java.util.Arrays;
import java.util.Map;
import javax.servlet.http.HttpServletResponse;
import com.ruoyi.common.core.page.R;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PathVariable;
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 com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.code.basic.domain.EquipRole;
import com.ruoyi.code.basic.seriver.IEquipRoleService;
import com.ruoyi.common.utils.poi.ExcelUtil;
/**
* 角色管理Controller
*
* @author ruoyi
* @date 2023-08-03
*/
@RestController
@RequestMapping("/basic/role")
public class EquipRoleController extends BaseController
{
@Autowired
private IEquipRoleService equipRoleService;
/**
* 查询列表
*/
@PreAuthorize("@ss.hasPermi('basic:role:list')")
@RequestMapping("/list")
public R list(@RequestParam Map<String, Object> params){
return equipRoleService.queryPage(params);
}
/**
* 获取详细信息
*/
@RequestMapping("/info/{id}")
@PreAuthorize("@ss.hasPermi('basic:role:query')")
public R info(@PathVariable("id") Long id){
EquipRole equipRole = equipRoleService.getById(id);
return R.ok().put("data", equipRole);
}
/**
* 导出列表
*/
@PreAuthorize("@ss.hasPermi('basic:role:export')")
@Log(title = "列表", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(HttpServletResponse response, EquipRole equipRole)
{
List<EquipRole> list = equipRoleService.list();
ExcelUtil<EquipRole> util = new ExcelUtil<EquipRole>(EquipRole.class);
util.exportExcel(response, list, "列表数据");
}
/**
* 新增
*/
@RequestMapping("/add")
@Log(title = "EquipRole", businessType = BusinessType.INSERT)
@PreAuthorize("@ss.hasPermi('basic:role:add')")
public R add(@RequestBody EquipRole equipRole){
equipRoleService.save(equipRole);
return R.ok();
}
/**
* 修改
*/
@RequestMapping("/edit")
@PreAuthorize("@ss.hasPermi('basic:role:edit')")
@Log(title = "EquipRole", businessType = BusinessType.UPDATE)
public R edit(@RequestBody EquipRole equipRole){
equipRoleService.updateById(equipRole);
return R.ok();
}
/**
* 删除
*/
@RequestMapping("/delete/{ids}")
@PreAuthorize("@ss.hasPermi('basic:role:remove')")
@Log(title = "EquipRole", businessType = BusinessType.DELETE)
public R delete(@PathVariable Long[] ids){
equipRoleService.removeByIds(Arrays.asList(ids));
return R.ok();
}
}

126
ruoyi-code/src/main/java/com/ruoyi/code/basic/controller/EquipUserController.java

@ -0,0 +1,126 @@ @@ -0,0 +1,126 @@
package com.ruoyi.code.basic.controller;
import com.ruoyi.code.basic.domain.EquipUser;
import com.ruoyi.code.basic.seriver.IEquipUserService;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.constant.UserConstants;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.page.R;
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 org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
/**
* 资产盘点用户信息Controller
*
* @author ruoyi
* @date 2023-03-22
*/
@RestController
@RequestMapping("/basic/user")
public class EquipUserController extends BaseController
{
@Resource
private IEquipUserService equipUserService;
/**
* 查询列表
*/
@PreAuthorize("@ss.hasPermi('basic:user:list')")
@RequestMapping("/list")
public R list(@RequestParam Map<String, Object> params){
return equipUserService.queryPage(params);
}
/**
* 查询列表
*/
@PreAuthorize("@ss.hasPermi('basic:user:list')")
@RequestMapping("/getUListByDeptId/{deptId}")
public R list(@PathVariable("deptId") Long deptId){
return equipUserService.getUListByDeptId(deptId);
}
/**
* 获取详细信息
*/
@RequestMapping("/info/{id}")
@PreAuthorize("@ss.hasPermi('basic:user:query')")
public R info(@PathVariable("id") Long id){
EquipUser equipUser = equipUserService.getById(id);
return R.ok().put("data", equipUser);
}
/**
* 导出列表
*/
@PreAuthorize("@ss.hasPermi('basic:user:export')")
@Log(title = "列表", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(HttpServletResponse response, EquipUser equipUser)
{
List<EquipUser> list = equipUserService.listAll();
ExcelUtil<EquipUser> util = new ExcelUtil<EquipUser>(EquipUser.class);
util.exportExcel(response, list, "列表数据");
}
/**
* 新增
*/
@RequestMapping("/add")
@Log(title = "EquipUser", businessType = BusinessType.INSERT)
@PreAuthorize("@ss.hasPermi('basic:user:add')")
public R add(@RequestBody EquipUser equipUser){
if (UserConstants.NOT_UNIQUE.equals(equipUserService.checkUserNameUnique(equipUser.getUserName())))
{
return R.error("新增用户'" + equipUser.getUserName() + "'失败,登录账号已存在");
}else if (StringUtils.isNotEmpty(equipUser.getPhonenumber())
&& UserConstants.NOT_UNIQUE.equals(equipUserService.checkPhoneUnique(equipUser)))
{
return R.error("新增用户'" + equipUser.getUserName() + "'失败,手机号码已存在");
}
equipUser.setCreateBy(SecurityUtils.getLoginUser().getUsername());
equipUserService.save(equipUser);
return R.ok("添加成功!");
}
/**
* 修改
*/
@RequestMapping("/edit")
@PreAuthorize("@ss.hasPermi('basic:user:edit')")
@Log(title = "EquipUser", businessType = BusinessType.UPDATE)
public R edit(@RequestBody EquipUser equipUser){
equipUserService.updateById(equipUser);
return R.ok();
}
/**
* 删除
*/
@RequestMapping("/delete/{ids}")
@PreAuthorize("@ss.hasPermi('basic:user:remove')")
@Log(title = "EquipUser", businessType = BusinessType.DELETE)
public R delete(@PathVariable Long[] ids){
equipUserService.removeByIds(Arrays.asList(ids));
return R.ok();
}
@RequestMapping("/generate5min")
public R generate5min(){
equipUserService.generate5min();
return R.ok();
}
}

49
ruoyi-code/src/main/java/com/ruoyi/code/basic/domain/EquipDept.java

@ -0,0 +1,49 @@ @@ -0,0 +1,49 @@
package com.ruoyi.code.basic.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.io.Serializable;
/**
* 部门管理对象 equip_dept
*
* @author ruoyi
* @date 2023-08-03
*/
@Data
@TableName("equip_dept")
public class EquipDept implements Serializable
{
private static final long serialVersionUID = 1L;
/** 部门id */
@TableId(type = IdType.INPUT)
private Long id;
/** 父部门id */
private Long parentId;
/** 部门名称 */
private String deptName;
/** 负责人 */
private String leader;
/** 联系电话 */
private String phone;
/** 邮箱 */
private String email;
/** 部门状态(0正常 1停用) */
private String status;
/** 删除标志(0代表存在 2代表删除) */
private String delFlag;
}

31
ruoyi-code/src/main/java/com/ruoyi/code/basic/domain/EquipRole.java

@ -0,0 +1,31 @@ @@ -0,0 +1,31 @@
package com.ruoyi.code.basic.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.TableId;
import com.ruoyi.common.annotation.Excel;
import java.io.Serializable;
import lombok.Data;
/**
* 角色管理对象 equip_role
*
* @author ruoyi
* @date 2023-08-03
*/
@Data
@TableName("equip_role")
public class EquipRole implements Serializable
{
private static final long serialVersionUID = 1L;
/** id */
@TableId(type = IdType.INPUT)
private Long id;
/** 角色名称 */
private String name;
}

105
ruoyi-code/src/main/java/com/ruoyi/code/basic/domain/EquipUser.java

@ -0,0 +1,105 @@ @@ -0,0 +1,105 @@
package com.ruoyi.code.basic.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* 设备出入库用户信息对象 equip_user
*
* @author ruoyi
* @date 2023-08-01
*/
@Data
@TableName("equip_user")
public class EquipUser implements Serializable
{
private static final long serialVersionUID = 1L;
/** 用户ID */
@TableId(type = IdType.AUTO)
private Long id;
/** 部门ID */
private Long deptId;
/** 角色ID */
private Long roleId;
/** 用户账号 */
@Excel(name = "用户账号")
private String userName;
/** 用户昵称 */
@Excel(name = "用户昵称")
private String nickName;
@TableField(exist = false)
@Excel(name = "角色")
private String roleName;
@TableField(exist = false)
@Excel(name = "部门")
private String deptName;
/** 用户类型(00系统用户) */
private String userType;
/** 用户邮箱 */
@Excel(name = "用户邮箱")
private String email;
/** 手机号码 */
@Excel(name = "手机号码")
private String phonenumber;
/** 用户性别(0男 1女 2未知) */
@Excel(name = "用户性别", readConverterExp = "0=男,1=女,2=未知")
private String sex;
/** 头像地址 */
private String avatar;
/** 密码 */
private String password;
/** 创建者 */
// @Excel(name = "创建者")
private String createBy;
/** 创建时间 */
@Excel(name = "创建时间",width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
@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;
/** 帐号状态(0正常 1停用) */
@Excel(name = "帐号状态",readConverterExp = "0=正常,1=停用")
private String status;
/** 删除标志(0代表存在 2代表删除) */
private String delFlag;
/** 最后登录时间 */
private Date loginDate;
/** 微信小程序用户id */
private String openId;
}

17
ruoyi-code/src/main/java/com/ruoyi/code/basic/mapper/EquipDeptMapper.java

@ -0,0 +1,17 @@ @@ -0,0 +1,17 @@
package com.ruoyi.code.basic.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.code.basic.domain.EquipDept;
import org.apache.ibatis.annotations.Mapper;
/**
* Mapper接口
*
* @author ruoyi
* @date 2023-08-03
*/
@Mapper
public interface EquipDeptMapper extends BaseMapper<EquipDept>
{
}

17
ruoyi-code/src/main/java/com/ruoyi/code/basic/mapper/EquipRoleMapper.java

@ -0,0 +1,17 @@ @@ -0,0 +1,17 @@
package com.ruoyi.code.basic.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import com.ruoyi.code.basic.domain.EquipRole;
/**
* Mapper接口
*
* @author ruoyi
* @date 2023-08-03
*/
@Mapper
public interface EquipRoleMapper extends BaseMapper<EquipRole>
{
}

43
ruoyi-code/src/main/java/com/ruoyi/code/basic/mapper/EquipUserMapper.java

@ -0,0 +1,43 @@ @@ -0,0 +1,43 @@
package com.ruoyi.code.basic.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.code.basic.domain.EquipUser;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* Mapper接口
*
* @author ruoyi
* @date 2023-03-22
*/
@Mapper
public interface EquipUserMapper extends BaseMapper<EquipUser>
{
/**
* 校验用户名称是否唯一
*
* @param userName 用户名称
* @return 结果
*/
public int checkUserNameUnique(String userName);
/**
* 校验手机号码是否唯一
*
* @param phonenumber 手机号码
* @return 结果
*/
public EquipUser checkPhoneUnique(String phonenumber);
List<EquipUser> listAll();
List<String> getDay();
List<String> generate5min(@Param("startTime") String startTime,@Param("endTime") String endTime);
void addTime(@Param("date5minList") List<String> date5minList);
}

22
ruoyi-code/src/main/java/com/ruoyi/code/basic/seriver/IEquipDeptService.java

@ -0,0 +1,22 @@ @@ -0,0 +1,22 @@
package com.ruoyi.code.basic.seriver;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.code.basic.domain.EquipDept;
import com.ruoyi.common.core.page.R;
import java.util.Map;
/**
* Service接口
*
* @author ruoyi
* @date 2023-08-03
*/
public interface IEquipDeptService extends IService<EquipDept>
{
/**
* 查询
*/
R queryPage(Map<String, Object> params);
}

21
ruoyi-code/src/main/java/com/ruoyi/code/basic/seriver/IEquipRoleService.java

@ -0,0 +1,21 @@ @@ -0,0 +1,21 @@
package com.ruoyi.code.basic.seriver;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.common.core.page.R;
import java.util.Map;
import com.ruoyi.code.basic.domain.EquipRole;
/**
* Service接口
*
* @author ruoyi
* @date 2023-08-03
*/
public interface IEquipRoleService extends IService<EquipRole>
{
/**
* 查询
*/
R queryPage(Map<String, Object> params);
}

44
ruoyi-code/src/main/java/com/ruoyi/code/basic/seriver/IEquipUserService.java

@ -0,0 +1,44 @@ @@ -0,0 +1,44 @@
package com.ruoyi.code.basic.seriver;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.code.basic.domain.EquipUser;
import com.ruoyi.common.core.page.R;
import java.util.List;
import java.util.Map;
/**
* Service接口
*
* @author ruoyi
* @date 2023-03-22
*/
public interface IEquipUserService extends IService<EquipUser>
{
/**
* 查询
*/
R queryPage(Map<String, Object> params);
/**
* 校验用户名称是否唯一
*
* @param userName 用户名称
* @return 结果
*/
public String checkUserNameUnique(String userName);
/**
* 校验手机号码是否唯一
*
* @param user 用户信息
* @return 结果
*/
public String checkPhoneUnique(EquipUser user);
R getUListByDeptId(Long deptId);
List<EquipUser> listAll();
void generate5min();
}

34
ruoyi-code/src/main/java/com/ruoyi/code/basic/seriver/impl/EquipDeptServiceImpl.java

@ -0,0 +1,34 @@ @@ -0,0 +1,34 @@
package com.ruoyi.code.basic.seriver.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.code.basic.domain.EquipDept;
import com.ruoyi.code.basic.mapper.EquipDeptMapper;
import com.ruoyi.code.basic.seriver.IEquipDeptService;
import com.ruoyi.common.core.page.R;
import com.ruoyi.common.utils.Query;
import org.springframework.stereotype.Service;
import java.util.Map;
/**
* Service业务层处理
*
* @author ruoyi
* @date 2023-08-03
*/
@Service("equipDeptService")
public class EquipDeptServiceImpl extends ServiceImpl<EquipDeptMapper, EquipDept> implements IEquipDeptService
{
@Override
public R queryPage(Map<String, Object> params) {
IPage<EquipDept> page = this.page(
new Query<EquipDept>().getPage(params),
new QueryWrapper<EquipDept>()
);
return R.ok().put("count", page.getTotal()).put("data", page.getRecords());
}
}

33
ruoyi-code/src/main/java/com/ruoyi/code/basic/seriver/impl/EquipRoleServiceImpl.java

@ -0,0 +1,33 @@ @@ -0,0 +1,33 @@
package com.ruoyi.code.basic.seriver.impl;
import java.util.Map;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.common.core.page.R;
import com.ruoyi.common.utils.Query;
import org.springframework.stereotype.Service;
import com.ruoyi.code.basic.mapper.EquipRoleMapper;
import com.ruoyi.code.basic.domain.EquipRole;
import com.ruoyi.code.basic.seriver.IEquipRoleService;
/**
* Service业务层处理
*
* @author ruoyi
* @date 2023-08-03
*/
@Service("equipRoleService")
public class EquipRoleServiceImpl extends ServiceImpl<EquipRoleMapper, EquipRole> implements IEquipRoleService
{
@Override
public R queryPage(Map<String, Object> params) {
IPage<EquipRole> page = this.page(
new Query<EquipRole>().getPage(params),
new QueryWrapper<EquipRole>()
);
return R.ok().put("count", page.getTotal()).put("data", page.getRecords());
}
}

87
ruoyi-code/src/main/java/com/ruoyi/code/basic/seriver/impl/EquipUserServiceImpl.java

@ -0,0 +1,87 @@ @@ -0,0 +1,87 @@
package com.ruoyi.code.basic.seriver.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.code.basic.domain.EquipUser;
import com.ruoyi.code.basic.mapper.EquipUserMapper;
import com.ruoyi.code.basic.seriver.IEquipUserService;
import com.ruoyi.common.constant.UserConstants;
import com.ruoyi.common.core.page.R;
import com.ruoyi.common.utils.Query;
import com.ruoyi.common.utils.StringUtils;
import org.apache.commons.lang3.ObjectUtils;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
/**
* Service业务层处理
*
* @author ruoyi
* @date 2023-03-22
*/
@Service("equipUserService")
public class EquipUserServiceImpl extends ServiceImpl<EquipUserMapper, EquipUser> implements IEquipUserService
{
@Override
public R queryPage(Map<String, Object> params) {
IPage<EquipUser> page = this.page(
new Query<EquipUser>().getPage(params),
new QueryWrapper<EquipUser>().like(ObjectUtils.isNotEmpty(params.get("nickName")),
"nick_name",params.get("nickName"))
.eq("del_flag","0")
);
return R.ok().put("count", page.getTotal()).put("data", page.getRecords());
}
@Override
public String checkUserNameUnique(String userName) {
int count = baseMapper.checkUserNameUnique(userName);
if (count > 0) {
return UserConstants.NOT_UNIQUE;
}
return UserConstants.UNIQUE;
}
@Override
public String checkPhoneUnique(EquipUser user) {
Long userId = StringUtils.isNull(user.getId()) ? -1L : user.getId();
EquipUser info = baseMapper.checkPhoneUnique(user.getPhonenumber());
if (StringUtils.isNotNull(info) && info.getId().longValue() != userId.longValue())
{
return UserConstants.NOT_UNIQUE;
}
return UserConstants.UNIQUE;
}
@Override
public R getUListByDeptId(Long deptId) {
QueryWrapper<EquipUser> wrapper = new QueryWrapper<>();
wrapper.eq("dept_id",deptId);
List<EquipUser> list = baseMapper.selectList(wrapper);
return R.ok().put("data", list);
}
@Override
public List<EquipUser> listAll() {
return baseMapper.listAll();
}
/**
* 生成每5分钟的时间
*/
@Override
public void generate5min() {
// 需要使用root用户才可以执行
List<String> dateList = baseMapper.getDay();
for (String day : dateList) {
String startTime = day + " 00:00:00";
String endTime = day + " 23:59:59";
List<String> date5minList = baseMapper.generate5min(startTime,endTime);
baseMapper.addTime(date5minList);
}
}
}

374
ruoyi-code/src/main/java/com/ruoyi/code/equip/controller/AppController.java

@ -0,0 +1,374 @@ @@ -0,0 +1,374 @@
package com.ruoyi.code.equip.controller;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.ruoyi.code.basic.domain.EquipUser;
import com.ruoyi.code.basic.seriver.IEquipUserService;
import com.ruoyi.code.equip.domain.*;
import com.ruoyi.code.equip.service.*;
import com.ruoyi.code.utils.WeChatUtil;
import com.ruoyi.common.config.RuoYiConfig;
import com.ruoyi.common.core.page.R;
import com.ruoyi.common.utils.file.FileUploadUtils;
import com.ruoyi.framework.config.ServerConfig;
import com.ruoyi.framework.web.domain.Audience;
import com.ruoyi.framework.web.service.JwtTokenUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletResponse;
import java.util.Map;
@Slf4j
@RestController
@RequestMapping("/app")
public class AppController {
@Autowired
private Audience audience;
@Autowired
private AppService appService;
@Autowired
private IEquipmentService equipmentService;
@Autowired
private ServerConfig serverConfig;
@Autowired
private IEquipPurchaseService purchaseService;
@Autowired
private IEquipPurchaseService equipPurchaseService;
@Autowired
private IEquipInService equipInService;
@Autowired
private IEquipOutService equipOutService;
@Autowired
private IEquipUntitledService equipUntitledService;
@Autowired
private IEquipDamageService equipDamageService;
@Autowired
private ICustomerService customerService;
@Autowired
private IEquipPositionService positionService;
@Autowired
private IEquipSupplierService supplierService;
@Resource
private WeChatUtil weChatUtil;
@Autowired
private IEquipUserService equipUserService;
/**
* 设备列表
* @return
*/
@RequestMapping("/equipList")
public R getEquipList(@RequestBody Equipment equipment) {
return appService.getEquipList(equipment.getName());
}
/**
* 设备采购列表
* @return
*/
@RequestMapping("/purchaseList")
public R getPurchaseList(@RequestBody Map<String, Object> params) {
return appService.getPurchaseList(params);
}
/**
* 设备采购记录数量
* @return
*/
@RequestMapping("/purchaseCGCount")
public R getPurchaseCGCount() {
return appService.getPurchaseCGCount();
}
/**
* 设备已购记录
* @return
*/
@RequestMapping("/purchaseYGCount")
public R getPurchaseYGCount() {
return appService.getPurchaseYGCount();
}
/**
* 设备报损列表
* @return
*/
@RequestMapping("/damageList")
public R getDamageList(@RequestBody Map<String, Object> params) {
return appService.getDamageList(params);
}
/**
* 设备退回列表
* @return
*/
@RequestMapping("/untitledList")
public R getUntitledList(@RequestBody Map<String, Object> params) {
return appService.getUntitledList(params);
}
/**
* 设备出库列表
* @return
*/
@RequestMapping("/outList")
public R getOutList(@RequestBody Map<String, Object> params) {
return appService.getOutList(params);
}
/**
* 设备入库列表
* @return
*/
@RequestMapping("/inList")
public R getInList(@RequestBody Map<String, Object> params) {
return equipInService.list(params);
}
/**
* 查询凭证图片
*/
@RequestMapping("/voucherList")
public R getVoucherList(@RequestBody Map<String, Object> params) {
return appService.getVoucherList((String) params.get("pId"));
}
/**
* 位置列表
* @return
*/
@RequestMapping("/positionList")
public R getPositionList(@RequestBody EquipPosition position) {
return appService.positionList(position);
}
/**
* 供应商列表
* @return
*/
@RequestMapping("/supplierList")
public R getSupplierList(@RequestBody EquipSupplier supplier) {
return appService.getSupplierList(supplier);
}
/**
* 客户列表
* @return
*/
@RequestMapping("/customerList")
public R getCustomerList(@RequestBody Customer customer) {
return appService.getCustomerList(customer);
}
/**
* 新增设备
*/
@RequestMapping("/addEquip")
public R add(@RequestBody Equipment equipment){
return equipmentService.saveEquipment(equipment);
}
/**
* 修改设备
*/
@RequestMapping("/updateEquip")
public R edit(@RequestBody Equipment equipment){
equipmentService.updateById(equipment);
return R.ok("修改成功!");
}
/**
* 新增采购
*/
@RequestMapping("/addPurchase")
public R add(@RequestBody EquipPurchase equipPurchase){
return appService.addPurchase(equipPurchase);
}
/** 图片上传 */
@PostMapping("/upload")
public R uploadFile(MultipartFile file) throws Exception
{
try
{
// 上传文件路径
String filePath = RuoYiConfig.getProfile() + "/app";
// 上传并返回新文件名称
String fileName = FileUploadUtils.upload(filePath, file);
String url = serverConfig.getUrl() + fileName;
return R.ok().put("url", url).put("fileName",fileName);
}
catch (Exception e)
{
return R.error(e.getMessage());
}
}
/**
* 采购
*/
@RequestMapping("/cg")
public R cg(@RequestBody EquipPurchase equipPurchase){
return purchaseService.cg(equipPurchase);
}
/**
* 取消入库
*/
@RequestMapping("/cancelPurchase/{id}")
public R cancelPurchase(@PathVariable("id") Long id){
EquipPurchase equipPurchase = equipPurchaseService.getById(id);
equipPurchase.setStatus("3");
equipPurchaseService.updateById(equipPurchase);
return R.ok("取消入库成功!");
}
/**
* 入库操作
*/
@RequestMapping("/warehousing/{id}")
public R warehousing(@PathVariable("id") Long id){
return equipPurchaseService.warehousing(id);
}
/**
* 出库设备退回
*/
@RequestMapping("/addUntitled")
public R add(@RequestBody EquipUntitled equipUntitled){
return equipUntitledService.add(equipUntitled);
}
/**
* 出库设备报损
*/
@RequestMapping("/addEquipDamage")
public R add(@RequestBody EquipDamage equipDamage){
return equipDamageService.saveDamage(equipDamage);
}
/**
* 新增 设备入库记录
*/
@RequestMapping("/addEquipIn")
public R addEquipIn(@RequestBody EquipIn equipIn){
return equipInService.saveEquipIn(equipIn);
}
/**
* 新增 设备出库记录
*/
@RequestMapping("/addEquipOut")
public R add(@RequestBody EquipOut equipOut){
return equipOutService.saveEquipOut(equipOut);
}
/**
* 新增 客户信息
*/
@RequestMapping("/addCustomer")
public R add(@RequestBody Customer customer){
boolean flag = customerService.save(customer);
if (flag){
return R.ok("添加客户成功!");
}
return R.error("添加客户失败!");
}
/**
* 新增位置
*/
@RequestMapping("/addPosition")
public R addPosition(@RequestBody EquipPosition position){
boolean flag = positionService.save(position);
if (flag){
return R.ok("添加位置成功!");
}
return R.error("添加位置失败!");
}
/**
* 修改位置
*/
@RequestMapping("/updatePosition")
public R updatePosition(@RequestBody EquipPosition position){
positionService.updateById(position);
return R.ok("修改成功!");
}
/**
* 新增供应商
*/
@RequestMapping("/addSupplier")
public R addSupplier(@RequestBody EquipSupplier supplier){
boolean flag = supplierService.save(supplier);
if (flag){
return R.ok("添加供应商成功!");
}
return R.error("添加供应商失败!");
}
/**
* 获取首页 本月的出库和入库的总数
* @return
*/
@RequestMapping("/getIndexInAndOutNum")
public R getIndexInAndOutNum(){
return appService.getIndexInAndOutNum();
}
@RequestMapping("/getOpenId")
public R getOpenId(@RequestBody ParamsDto dto){
String content = weChatUtil.getWxData(dto.getCode());
JSONObject object = JSON.parseObject(content);
String openId = object.getString("openid");
String sessionKey = object.getString("session_key");
return R.ok().put("openId",openId).put("sessionKey",sessionKey);
}
/**
* 登录方法
* @param dto
* @param response
* @return
*/
@RequestMapping("/login")
public R login(@RequestBody ParamsDto dto, HttpServletResponse response){
EquipUser user = equipUserService.getOne(new QueryWrapper<EquipUser>().eq("phonenumber",dto.getCode()));
if(user==null){
return R.error("无权限访问");
}
user.setOpenId(dto.getKeyword());
equipUserService.updateById(user);
log.info("### 用户信息, user={} ###", user);
String token = JwtTokenUtil.createJWT(user.getId().toString(), user.getUserName(), audience);
log.info("### 登录成功, token={} ###", token);
// 将token放在响应头
response.setHeader(JwtTokenUtil.AUTH_HEADER_KEY, JwtTokenUtil.TOKEN_PREFIX + token);
return R.ok().put("data",user).put("token",token);
}
}

98
ruoyi-code/src/main/java/com/ruoyi/code/equip/controller/CustomerController.java

@ -0,0 +1,98 @@ @@ -0,0 +1,98 @@
package com.ruoyi.code.equip.controller;
import com.ruoyi.code.equip.domain.Customer;
import com.ruoyi.code.equip.service.ICustomerService;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.page.R;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.poi.ExcelUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
/**
* 客户管理Controller
*
* @author blank
* @date 2023-01-09
*/
@RestController
@RequestMapping("/equip/customer")
public class CustomerController extends BaseController
{
@Autowired
private ICustomerService customerService;
/**
* 查询列表
*/
@PreAuthorize("@ss.hasPermi('equip:customer:list')")
@RequestMapping("/list")
public R list(@RequestParam Map<String, Object> params){
return customerService.queryPage(params);
}
/**
* 获取详细信息
*/
@RequestMapping("/info/{id}")
@PreAuthorize("@ss.hasPermi('equip:customer:query')")
public R info(@PathVariable("id") Long id){
Customer customer = customerService.getById(id);
return R.ok().put("data", customer);
}
/**
* 导出列表
*/
@PreAuthorize("@ss.hasPermi('equip:customer:export')")
@Log(title = "列表", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(HttpServletResponse response, Customer customer)
{
List<Customer> list = customerService.list();
ExcelUtil<Customer> util = new ExcelUtil<Customer>(Customer.class);
util.exportExcel(response, list, "列表数据");
}
/**
* 新增
*/
@RequestMapping("/add")
@Log(title = "Customer", businessType = BusinessType.INSERT)
@PreAuthorize("@ss.hasPermi('equip:customer:add')")
public R add(@RequestBody Customer customer){
customerService.save(customer);
return R.ok();
}
/**
* 修改
*/
@RequestMapping("/edit")
@PreAuthorize("@ss.hasPermi('equip:customer:edit')")
@Log(title = "Customer", businessType = BusinessType.UPDATE)
public R edit(@RequestBody Customer customer){
customerService.updateById(customer);
return R.ok();
}
/**
* 删除
*/
@RequestMapping("/delete/{ids}")
@PreAuthorize("@ss.hasPermi('equip:customer:remove')")
@Log(title = "Customer", businessType = BusinessType.DELETE)
public R delete(@PathVariable Long[] ids){
customerService.removeByIds(Arrays.asList(ids));
return R.ok();
}
}

97
ruoyi-code/src/main/java/com/ruoyi/code/equip/controller/EquipDamageController.java

@ -0,0 +1,97 @@ @@ -0,0 +1,97 @@
package com.ruoyi.code.equip.controller;
import com.ruoyi.code.equip.domain.EquipDamage;
import com.ruoyi.code.equip.service.IEquipDamageService;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.page.R;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.poi.ExcelUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
/**
* 设备报损记录Controller
*
* @author ruoyi
* @date 2023-02-07
*/
@RestController
@RequestMapping("/equip/damage")
public class EquipDamageController extends BaseController
{
@Autowired
private IEquipDamageService equipDamageService;
/**
* 查询列表
*/
@PreAuthorize("@ss.hasPermi('equip:damage:list')")
@RequestMapping("/list")
public R list(@RequestParam Map<String, Object> params){
return equipDamageService.queryPage(params);
}
/**
* 获取详细信息
*/
@RequestMapping("/info/{id}")
@PreAuthorize("@ss.hasPermi('equip:damage:query')")
public R info(@PathVariable("id") Long id){
EquipDamage equipDamage = equipDamageService.getById(id);
return R.ok().put("data", equipDamage);
}
/**
* 导出列表
*/
@PreAuthorize("@ss.hasPermi('equip:damage:export')")
@Log(title = "列表", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(HttpServletResponse response, @RequestParam Map<String, Object> params)
{
List<EquipDamage> list = equipDamageService.list2(params);
ExcelUtil<EquipDamage> util = new ExcelUtil<EquipDamage>(EquipDamage.class);
util.exportExcel(response, list, "列表数据");
}
/**
* 新增
*/
@RequestMapping("/add")
@Log(title = "EquipDamage", businessType = BusinessType.INSERT)
@PreAuthorize("@ss.hasPermi('equip:damage:add')")
public R add(@RequestBody EquipDamage equipDamage){
return equipDamageService.saveDamage(equipDamage);
}
/**
* 修改
*/
@RequestMapping("/edit")
@PreAuthorize("@ss.hasPermi('equip:damage:edit')")
@Log(title = "EquipDamage", businessType = BusinessType.UPDATE)
public R edit(@RequestBody EquipDamage equipDamage){
equipDamageService.updateById(equipDamage);
return R.ok();
}
/**
* 删除
*/
@RequestMapping("/delete/{ids}")
@PreAuthorize("@ss.hasPermi('equip:damage:remove')")
@Log(title = "EquipDamage", businessType = BusinessType.DELETE)
public R delete(@PathVariable Long[] ids){
equipDamageService.removeByIds(Arrays.asList(ids));
return R.ok();
}
}

136
ruoyi-code/src/main/java/com/ruoyi/code/equip/controller/EquipInController.java

@ -0,0 +1,136 @@ @@ -0,0 +1,136 @@
package com.ruoyi.code.equip.controller;
import com.ruoyi.code.equip.domain.EquipIn;
import com.ruoyi.code.equip.service.IEquipInService;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.page.R;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.poi.ExcelUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
/**
* 设备入库管理Controller
*
* @author blank
* @date 2023-01-05
*/
@RestController
@RequestMapping("/equip/in")
public class EquipInController extends BaseController
{
@Autowired
private IEquipInService equipInService;
/**
* 查询列表
*/
@PreAuthorize("@ss.hasPermi('equip:in:list')")
@RequestMapping("/list")
public R list(@RequestParam Map<String, Object> params){
return equipInService.queryPage(params);
}
/**
* 查询列表2 不分页
*/
@PreAuthorize("@ss.hasPermi('equip:in:list')")
@RequestMapping("/list2")
public R list2(@RequestParam Map<String, Object> params){
return equipInService.list(params);
}
/**
* 查询这个月的入库记录
*/
@PreAuthorize("@ss.hasPermi('equip:in:list')")
@RequestMapping("/getMonthEquipInList")
public R getMonthEquipInList(){
return equipInService.getMonthEquipInList();
}
/**
* 查询近半年的入库记录
*/
@PreAuthorize("@ss.hasPermi('equip:in:list')")
@RequestMapping("/getYearEquipInList")
public R getYearEquipInList(){
return equipInService.getYearEquipInList();
}
/**
* 获取详细信息
*/
@RequestMapping("/info/{id}")
@PreAuthorize("@ss.hasPermi('equip:in:query')")
public R info(@PathVariable("id") Long id){
EquipIn equipIn = equipInService.getById(id);
return R.ok().put("data", equipIn);
}
/**
* 获取某一批次的剩余数量
*/
@RequestMapping("/getRnum")
public R getRnum(@RequestParam("eNo") String eNo,@RequestParam("batch") String batch){
return R.ok().put("data", equipInService.getRnum(eNo,batch));
}
/**
* 根据设备编号查询设备信息
* @param eNo
* @return
*/
@RequestMapping("/getListByNo")
public R getListByNo(@RequestParam("equipNo") String eNo){
return R.ok().put("data", equipInService.getListByNo(eNo));
}
/**
* 导出列表
*/
@PreAuthorize("@ss.hasPermi('equip:in:export')")
@Log(title = "列表", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(HttpServletResponse response, @RequestParam Map<String, Object> params)
{
R r = equipInService.list(params);
List<EquipIn> list = (List<EquipIn>) r.get("data");
ExcelUtil<EquipIn> util = new ExcelUtil<EquipIn>(EquipIn.class);
util.exportExcel(response, list, "列表数据");
}
/**
* 新增
*/
@RequestMapping("/add")
@Log(title = "EquipIn", businessType = BusinessType.INSERT)
@PreAuthorize("@ss.hasPermi('equip:in:add')")
public R add(@RequestBody EquipIn equipIn){
return equipInService.saveEquipIn(equipIn);
}
/**
* 修改
*/
@RequestMapping("/edit")
@PreAuthorize("@ss.hasPermi('equip:in:edit')")
@Log(title = "EquipIn", businessType = BusinessType.UPDATE)
public R edit(@RequestBody EquipIn equipIn){
equipInService.updateById(equipIn);
return R.ok();
}
/**
* 删除
*/
@RequestMapping("/delete/{ids}")
@PreAuthorize("@ss.hasPermi('equip:in:remove')")
@Log(title = "EquipIn", businessType = BusinessType.DELETE)
public R delete(@PathVariable Long[] ids){
equipInService.removeByIds(Arrays.asList(ids));
return R.ok();
}
}

128
ruoyi-code/src/main/java/com/ruoyi/code/equip/controller/EquipOutController.java

@ -0,0 +1,128 @@ @@ -0,0 +1,128 @@
package com.ruoyi.code.equip.controller;
import com.ruoyi.code.equip.domain.EquipOut;
import com.ruoyi.code.equip.service.IEquipOutService;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.page.R;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.poi.ExcelUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;
/**
* 设备出库Controller
*
* @author blank
* @date 2023-01-05
*/
@RestController
@RequestMapping("/equip/out")
public class EquipOutController extends BaseController
{
@Autowired
private IEquipOutService equipOutService;
/**
* 查询列表
*/
@PreAuthorize("@ss.hasPermi('equip:out:list')")
@RequestMapping("/list")
public R list(@RequestParam Map<String, Object> params){
return equipOutService.queryPage(params);
}
/**
* 查询列表2 不分页
*/
@PreAuthorize("@ss.hasPermi('equip:out:list')")
@RequestMapping("/list2")
public R list2(@RequestParam Map<String, Object> params){
return equipOutService.list(params);
}
/**
* 查询这个月的出库记录
*/
@PreAuthorize("@ss.hasPermi('equip:out:list')")
@RequestMapping("/getMonthEquipOutList")
public R getMonthEquipOutList(){
return equipOutService.getMonthEquipOutList();
}
/**
* 查询近半年的出库记录
*/
@PreAuthorize("@ss.hasPermi('equip:out:list')")
@RequestMapping("/getYearEquipOutList")
public R getYearEquipOutList(){
return equipOutService.getYearEquipOutList();
}
/**
* 获取详细信息
*/
@RequestMapping("/info/{id}")
@PreAuthorize("@ss.hasPermi('equip:out:query')")
public R info(@PathVariable("id") Long id){
EquipOut equipOut = equipOutService.getById(id);
return R.ok().put("data", equipOut);
}
/**
* 获取出库价格
*/
@RequestMapping("/getOutPrice/{eNo}")
public R getOutPrice(@PathVariable("eNo") String eNo){
return R.ok().put("data", equipOutService.getOutPrice(eNo));
}
/**
* 导出列表
*/
@PreAuthorize("@ss.hasPermi('equip:out:export')")
@Log(title = "列表", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(HttpServletResponse response, @RequestParam Map<String, Object> params)
{
R r = equipOutService.list(params);
List<EquipOut> list = (List<EquipOut>) r.get("data");
ExcelUtil<EquipOut> util = new ExcelUtil<EquipOut>(EquipOut.class);
util.exportExcel(response, list, "列表数据");
}
/**
* 新增
*/
@RequestMapping("/add")
@Log(title = "EquipOut", businessType = BusinessType.INSERT)
@PreAuthorize("@ss.hasPermi('equip:out:add')")
public R add(@RequestBody EquipOut equipOut){
return equipOutService.saveEquipOut(equipOut);
}
/**
* 修改
*/
@RequestMapping("/edit")
@PreAuthorize("@ss.hasPermi('equip:out:edit')")
@Log(title = "EquipOut", businessType = BusinessType.UPDATE)
public R edit(@RequestBody EquipOut equipOut){
equipOutService.updateById(equipOut);
return R.ok();
}
/**
* 删除
*/
@RequestMapping("/delete/{ids}")
@PreAuthorize("@ss.hasPermi('equip:out:remove')")
@Log(title = "EquipOut", businessType = BusinessType.DELETE)
public R delete(@PathVariable Long[] ids){
return equipOutService.removeByIds(ids);
}
}

102
ruoyi-code/src/main/java/com/ruoyi/code/equip/controller/EquipPositionController.java

@ -0,0 +1,102 @@ @@ -0,0 +1,102 @@
package com.ruoyi.code.equip.controller;
import java.util.List;
import java.util.Arrays;
import java.util.Map;
import javax.servlet.http.HttpServletResponse;
import com.ruoyi.common.core.page.R;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PathVariable;
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 com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.code.equip.domain.EquipPosition;
import com.ruoyi.code.equip.service.IEquipPositionService;
import com.ruoyi.common.utils.poi.ExcelUtil;
/**
* 位置管理Controller
*
* @author blank
* @date 2023-01-04
*/
@RestController
@RequestMapping("/equip/position")
public class EquipPositionController extends BaseController
{
@Autowired
private IEquipPositionService equipPositionService;
/**
* 查询列表
*/
@PreAuthorize("@ss.hasPermi('equip:position:list')")
@RequestMapping("/list")
public R list(@RequestParam Map<String, Object> params){
return equipPositionService.queryPage(params);
}
/**
* 获取详细信息
*/
@RequestMapping("/info/{id}")
@PreAuthorize("@ss.hasPermi('equip:position:query')")
public R info(@PathVariable("id") Long id){
EquipPosition equipPosition = equipPositionService.getById(id);
return R.ok().put("data", equipPosition);
}
/**
* 导出列表
*/
@PreAuthorize("@ss.hasPermi('equip:position:export')")
@Log(title = "列表", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(HttpServletResponse response, EquipPosition equipPosition)
{
List<EquipPosition> list = equipPositionService.list();
ExcelUtil<EquipPosition> util = new ExcelUtil<EquipPosition>(EquipPosition.class);
util.exportExcel(response, list, "列表数据");
}
/**
* 新增
*/
@RequestMapping("/add")
@Log(title = "EquipPosition", businessType = BusinessType.INSERT)
@PreAuthorize("@ss.hasPermi('equip:position:add')")
public R add(@RequestBody EquipPosition equipPosition){
equipPositionService.save(equipPosition);
return R.ok();
}
/**
* 修改
*/
@RequestMapping("/edit")
@PreAuthorize("@ss.hasPermi('equip:position:edit')")
@Log(title = "EquipPosition", businessType = BusinessType.UPDATE)
public R edit(@RequestBody EquipPosition equipPosition){
equipPositionService.updateById(equipPosition);
return R.ok();
}
/**
* 删除
*/
@RequestMapping("/delete/{ids}")
@PreAuthorize("@ss.hasPermi('equip:position:remove')")
@Log(title = "EquipPosition", businessType = BusinessType.DELETE)
public R delete(@PathVariable Long[] ids){
equipPositionService.removeByIds(Arrays.asList(ids));
return R.ok();
}
}

136
ruoyi-code/src/main/java/com/ruoyi/code/equip/controller/EquipPurchaseController.java

@ -0,0 +1,136 @@ @@ -0,0 +1,136 @@
package com.ruoyi.code.equip.controller;
import com.ruoyi.code.equip.domain.EquipPurchase;
import com.ruoyi.code.equip.service.IEquipPurchaseService;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.page.R;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.poi.ExcelUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
/**
* 设备采购管理Controller
*
* @author blank
* @date 2023-01-12
*/
@RestController
@RequestMapping("/equip/purchase")
public class EquipPurchaseController extends BaseController
{
@Autowired
private IEquipPurchaseService equipPurchaseService;
/**
* 查询列表
*/
@PreAuthorize("@ss.hasPermi('equip:purchase:list')")
@RequestMapping("/list")
public R list(@RequestParam Map<String, Object> params){
return equipPurchaseService.queryPage(params);
}
/**
* 查询列表
*/
@PreAuthorize("@ss.hasPermi('equip:purchase:list')")
@RequestMapping("/list2")
public R list2(@RequestParam Map<String, Object> params){
return equipPurchaseService.list(params);
}
/**
* 获取详细信息
*/
@RequestMapping("/info/{id}")
@PreAuthorize("@ss.hasPermi('equip:purchase:query')")
public R info(@PathVariable("id") Long id){
EquipPurchase equipPurchase = equipPurchaseService.getById(id);
return R.ok().put("data", equipPurchase);
}
/**
* 导出列表
*/
@PreAuthorize("@ss.hasPermi('equip:purchase:export')")
@Log(title = "列表", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(HttpServletResponse response, @RequestParam Map<String, Object> params)
{
R r = equipPurchaseService.list(params);
List<EquipPurchase> list = (List<EquipPurchase>) r.get("data");
ExcelUtil<EquipPurchase> util = new ExcelUtil<EquipPurchase>(EquipPurchase.class);
util.exportExcel(response, list, "列表数据");
}
/**
* 新增
*/
@RequestMapping("/add")
@Log(title = "EquipPurchase", businessType = BusinessType.INSERT)
@PreAuthorize("@ss.hasPermi('equip:purchase:add')")
public R add(@RequestBody EquipPurchase equipPurchase){
return equipPurchaseService.saveEP(equipPurchase);
}
/**
* 修改
*/
@RequestMapping("/edit")
@PreAuthorize("@ss.hasPermi('equip:purchase:edit')")
@Log(title = "EquipPurchase", businessType = BusinessType.UPDATE)
public R edit(@RequestBody EquipPurchase equipPurchase){
equipPurchaseService.updateById(equipPurchase);
return R.ok();
}
/**
* 采购
*/
@RequestMapping("/cg")
@PreAuthorize("@ss.hasPermi('equip:purchase:edit')")
public R cg(@RequestBody EquipPurchase equipPurchase){
return equipPurchaseService.cg(equipPurchase);
}
/**
* 取消采购
*/
@RequestMapping("/cancelPurchase/{id}")
@PreAuthorize("@ss.hasPermi('equip:purchase:edit')")
public R equipPurchase(@PathVariable("id") Long id){
EquipPurchase equipPurchase = equipPurchaseService.getById(id);
equipPurchase.setStatus("3");
equipPurchaseService.updateById(equipPurchase);
return R.ok("审核不通过!");
}
/**
* 入库操作
*/
@RequestMapping("/warehousing/{id}")
@PreAuthorize("@ss.hasPermi('equip:purchase:edit')")
public R warehousing(@PathVariable("id") Long id){
return equipPurchaseService.warehousing(id);
}
/**
* 删除
*/
@RequestMapping("/delete/{ids}")
@PreAuthorize("@ss.hasPermi('equip:purchase:remove')")
@Log(title = "EquipPurchase", businessType = BusinessType.DELETE)
public R delete(@PathVariable Long[] ids){
equipPurchaseService.removeByIds(Arrays.asList(ids));
return R.ok();
}
}

139
ruoyi-code/src/main/java/com/ruoyi/code/equip/controller/EquipStockController.java

@ -0,0 +1,139 @@ @@ -0,0 +1,139 @@
package com.ruoyi.code.equip.controller;
import com.ruoyi.code.equip.domain.EquipJournalAccount;
import com.ruoyi.code.equip.domain.EquipStock;
import com.ruoyi.code.equip.service.IEquipStockService;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.page.R;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.poi.ExcelUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.util.Arrays;
import java.util.Calendar;
import java.util.List;
import java.util.Map;
/**
* 设备库存Controller
*
* @author blank
* @date 2023-01-05
*/
@RestController
@RequestMapping("/equip/stock")
public class EquipStockController extends BaseController
{
@Autowired
private IEquipStockService equipStockService;
/**
* 查询列表
*/
@PreAuthorize("@ss.hasPermi('equip:stock:list')")
@RequestMapping("/list")
public R list(@RequestParam Map<String, Object> params){
return equipStockService.queryPage(params);
}
/**
* 查询列表2
*/
@PreAuthorize("@ss.hasPermi('equip:stock:list')")
@RequestMapping("/list2")
public R list2(@RequestParam Map<String, Object> params){
return equipStockService.list(params);
}
/**
* 获取详细信息
*/
@RequestMapping("/info/{id}")
@PreAuthorize("@ss.hasPermi('equip:stock:query')")
public R info(@PathVariable("id") Long id){
EquipStock equipStock = equipStockService.getById(id);
return R.ok().put("data", equipStock);
}
/**
* 导出列表
*/
@PreAuthorize("@ss.hasPermi('equip:stock:export')")
@Log(title = "列表", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(HttpServletResponse response, @RequestParam Map<String, Object> params)
{
R r = equipStockService.list(params);
List<EquipStock> list = (List<EquipStock>) r.get("data");
ExcelUtil<EquipStock> util = new ExcelUtil<EquipStock>(EquipStock.class);
util.exportExcel(response, list, "列表数据");
}
/**
* 新增
*/
@RequestMapping("/add")
@Log(title = "EquipStock", businessType = BusinessType.INSERT)
@PreAuthorize("@ss.hasPermi('equip:stock:add')")
public R add(@RequestBody EquipStock equipStock){
equipStockService.save(equipStock);
return R.ok();
}
/**
* 修改
*/
@RequestMapping("/edit")
@PreAuthorize("@ss.hasPermi('equip:stock:edit')")
@Log(title = "EquipStock", businessType = BusinessType.UPDATE)
public R edit(@RequestBody EquipStock equipStock){
equipStockService.updateById(equipStock);
return R.ok();
}
/**
* 删除
*/
@RequestMapping("/delete/{ids}")
@PreAuthorize("@ss.hasPermi('equip:stock:remove')")
@Log(title = "EquipStock", businessType = BusinessType.DELETE)
public R delete(@PathVariable Long[] ids){
equipStockService.removeByIds(Arrays.asList(ids));
return R.ok();
}
/**
* 根据设备编号查询设备流水
* @param params
* @return
*/
@RequestMapping("/equipFlow")
public R getEquipFlow(@RequestParam Map<String, Object> params){
return equipStockService.getEquipFlow(params);
}
/**
* 导出设备流水列表
*/
@PreAuthorize("@ss.hasPermi('equip:stock:export')")
@PostMapping("/export2")
public void export2(HttpServletResponse response, @RequestParam Map<String, Object> params)
{
R r = equipStockService.getEquipFlow(params);
List<EquipJournalAccount> list = (List<EquipJournalAccount>) r.get("data");
ExcelUtil<EquipJournalAccount> util = new ExcelUtil<>(EquipJournalAccount.class);
util.exportExcel(response, list, "列表数据");
}
public static void main(String[] args) {
Calendar cal = Calendar.getInstance();
int jyear = cal.get(Calendar.YEAR); //当前年
for (int i = jyear-4; i <=jyear; i++) {
System.out.println(i);
}
}
}

98
ruoyi-code/src/main/java/com/ruoyi/code/equip/controller/EquipSupplierController.java

@ -0,0 +1,98 @@ @@ -0,0 +1,98 @@
package com.ruoyi.code.equip.controller;
import com.ruoyi.code.equip.domain.EquipSupplier;
import com.ruoyi.code.equip.service.IEquipSupplierService;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.page.R;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.poi.ExcelUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
/**
* 供应商管理Controller
*
* @author blank
* @date 2023-01-04
*/
@RestController
@RequestMapping("/equip/supplier")
public class EquipSupplierController extends BaseController
{
@Autowired
private IEquipSupplierService equipSupplierService;
/**
* 查询列表
*/
@PreAuthorize("@ss.hasPermi('equip:supplier:list')")
@RequestMapping("/list")
public R list(@RequestParam Map<String, Object> params){
return equipSupplierService.queryPage(params);
}
/**
* 获取详细信息
*/
@RequestMapping("/info/{id}")
@PreAuthorize("@ss.hasPermi('equip:supplier:query')")
public R info(@PathVariable("id") Long id){
EquipSupplier equipSupplier = equipSupplierService.getById(id);
return R.ok().put("data", equipSupplier);
}
/**
* 导出列表
*/
@PreAuthorize("@ss.hasPermi('equip:supplier:export')")
@Log(title = "列表", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(HttpServletResponse response, EquipSupplier equipSupplier)
{
List<EquipSupplier> list = equipSupplierService.list();
ExcelUtil<EquipSupplier> util = new ExcelUtil<EquipSupplier>(EquipSupplier.class);
util.exportExcel(response, list, "列表数据");
}
/**
* 新增
*/
@RequestMapping("/add")
@Log(title = "EquipSupplier", businessType = BusinessType.INSERT)
@PreAuthorize("@ss.hasPermi('equip:supplier:add')")
public R add(@RequestBody EquipSupplier equipSupplier){
equipSupplierService.save(equipSupplier);
return R.ok();
}
/**
* 修改
*/
@RequestMapping("/edit")
@PreAuthorize("@ss.hasPermi('equip:supplier:edit')")
@Log(title = "EquipSupplier", businessType = BusinessType.UPDATE)
public R edit(@RequestBody EquipSupplier equipSupplier){
equipSupplierService.updateById(equipSupplier);
return R.ok();
}
/**
* 删除
*/
@RequestMapping("/delete/{ids}")
@PreAuthorize("@ss.hasPermi('equip:supplier:remove')")
@Log(title = "EquipSupplier", businessType = BusinessType.DELETE)
public R delete(@PathVariable Long[] ids){
equipSupplierService.removeByIds(Arrays.asList(ids));
return R.ok();
}
}

114
ruoyi-code/src/main/java/com/ruoyi/code/equip/controller/EquipUntitledController.java

@ -0,0 +1,114 @@ @@ -0,0 +1,114 @@
package com.ruoyi.code.equip.controller;
import com.ruoyi.code.equip.domain.EquipUntitled;
import com.ruoyi.code.equip.service.IEquipUntitledService;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.page.R;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.poi.ExcelUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
/**
* 设备退回Controller
*
* @author blank
* @date 2023-01-06
*/
@RestController
@RequestMapping("/equip/untitled")
public class EquipUntitledController extends BaseController
{
@Autowired
private IEquipUntitledService equipUntitledService;
/**
* 查询列表
*/
@PreAuthorize("@ss.hasPermi('equip:untitled:list')")
@RequestMapping("/list")
public R list(@RequestParam Map<String, Object> params){
return equipUntitledService.queryPage(params);
}
/**
* 查询列表2 不分页
*/
@PreAuthorize("@ss.hasPermi('equip:untitled:list')")
@RequestMapping("/list2")
public R list2(@RequestParam Map<String, Object> params){
return equipUntitledService.list(params);
}
/**
* 查询设备退回记录 最近30条
*/
@PreAuthorize("@ss.hasPermi('equip:untitled:list')")
@RequestMapping("/getEquipUntitledList")
public R getEquipUntitledList(){
return equipUntitledService.getEquipUntitledList();
}
/**
* 获取详细信息
*/
@RequestMapping("/info/{id}")
@PreAuthorize("@ss.hasPermi('equip:untitled:query')")
public R info(@PathVariable("id") Long id){
EquipUntitled equipUntitled = equipUntitledService.getById(id);
return R.ok().put("data", equipUntitled);
}
/**
* 导出列表
*/
@PreAuthorize("@ss.hasPermi('equip:untitled:export')")
@Log(title = "列表", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(HttpServletResponse response, @RequestParam Map<String, Object> params)
{
R r = equipUntitledService.list(params);
List<EquipUntitled> list = (List<EquipUntitled>) r.get("data");
ExcelUtil<EquipUntitled> util = new ExcelUtil<EquipUntitled>(EquipUntitled.class);
util.exportExcel(response, list, "列表数据");
}
/**
* 新增
*/
@RequestMapping("/add")
@Log(title = "EquipUntitled", businessType = BusinessType.INSERT)
@PreAuthorize("@ss.hasPermi('equip:untitled:add')")
public R add(@RequestBody EquipUntitled equipUntitled){
return equipUntitledService.add(equipUntitled);
}
/**
* 修改
*/
@RequestMapping("/edit")
@PreAuthorize("@ss.hasPermi('equip:untitled:edit')")
@Log(title = "EquipUntitled", businessType = BusinessType.UPDATE)
public R edit(@RequestBody EquipUntitled equipUntitled){
equipUntitledService.updateById(equipUntitled);
return R.ok();
}
/**
* 删除
*/
@RequestMapping("/delete/{ids}")
@PreAuthorize("@ss.hasPermi('equip:untitled:remove')")
@Log(title = "EquipUntitled", businessType = BusinessType.DELETE)
public R delete(@PathVariable Long[] ids){
equipUntitledService.removeByIds(Arrays.asList(ids));
return R.ok();
}
}

98
ruoyi-code/src/main/java/com/ruoyi/code/equip/controller/EquipVoucherController.java

@ -0,0 +1,98 @@ @@ -0,0 +1,98 @@
package com.ruoyi.code.equip.controller;
import com.ruoyi.code.equip.domain.EquipVoucher;
import com.ruoyi.code.equip.service.IEquipVoucherService;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.page.R;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.poi.ExcelUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
/**
* 凭证信息Controller
*
* @author blank
* @date 2023-01-12
*/
@RestController
@RequestMapping("/equip/voucher")
public class EquipVoucherController extends BaseController
{
@Autowired
private IEquipVoucherService equipVoucherService;
/**
* 查询列表
*/
@PreAuthorize("@ss.hasPermi('equip:voucher:list')")
@RequestMapping("/list")
public R list(@RequestParam Map<String, Object> params){
return equipVoucherService.queryPage(params);
}
/**
* 获取详细信息
*/
@RequestMapping("/info/{id}")
@PreAuthorize("@ss.hasPermi('equip:voucher:query')")
public R info(@PathVariable("id") Long id){
EquipVoucher equipVoucher = equipVoucherService.getById(id);
return R.ok().put("data", equipVoucher);
}
/**
* 导出列表
*/
@PreAuthorize("@ss.hasPermi('equip:voucher:export')")
@Log(title = "列表", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(HttpServletResponse response, EquipVoucher equipVoucher)
{
List<EquipVoucher> list = equipVoucherService.list();
ExcelUtil<EquipVoucher> util = new ExcelUtil<EquipVoucher>(EquipVoucher.class);
util.exportExcel(response, list, "列表数据");
}
/**
* 新增
*/
@RequestMapping("/add")
@Log(title = "EquipVoucher", businessType = BusinessType.INSERT)
@PreAuthorize("@ss.hasPermi('equip:voucher:add')")
public R add(@RequestBody EquipVoucher equipVoucher){
equipVoucherService.save(equipVoucher);
return R.ok();
}
/**
* 修改
*/
@RequestMapping("/edit")
@PreAuthorize("@ss.hasPermi('equip:voucher:edit')")
@Log(title = "EquipVoucher", businessType = BusinessType.UPDATE)
public R edit(@RequestBody EquipVoucher equipVoucher){
equipVoucherService.updateById(equipVoucher);
return R.ok();
}
/**
* 删除
*/
@RequestMapping("/delete/{ids}")
@PreAuthorize("@ss.hasPermi('equip:voucher:remove')")
@Log(title = "EquipVoucher", businessType = BusinessType.DELETE)
public R delete(@PathVariable Long[] ids){
equipVoucherService.removeByIds(Arrays.asList(ids));
return R.ok();
}
}

109
ruoyi-code/src/main/java/com/ruoyi/code/equip/controller/EquipmentController.java

@ -0,0 +1,109 @@ @@ -0,0 +1,109 @@
package com.ruoyi.code.equip.controller;
import com.ruoyi.code.equip.domain.Equipment;
import com.ruoyi.code.equip.service.IEquipmentService;
import com.ruoyi.common.annotation.Log;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.page.R;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.poi.ExcelUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
/**
* 设备信息Controller
*
* @author blank
* @date 2023-01-05
*/
@RestController
@RequestMapping("/equip/equipment")
public class EquipmentController extends BaseController
{
@Autowired
private IEquipmentService equipmentService;
/**
* 查询列表
*/
@PreAuthorize("@ss.hasPermi('equip:equipment:list')")
@RequestMapping("/list")
public R list(@RequestParam Map<String, Object> params){
return equipmentService.queryPage(params);
}
/**
* 查询列表2
*/
@PreAuthorize("@ss.hasPermi('equip:equipment:list')")
@RequestMapping("/list2")
public R list2(@RequestParam Map<String, Object> params){
return equipmentService.list(params);
}
/**
* 获取详细信息
*/
@RequestMapping("/info/{eId}")
@PreAuthorize("@ss.hasPermi('equip:equipment:query')")
public R info(@PathVariable("eId") Long eId){
Equipment equipment = equipmentService.getById(eId);
return R.ok().put("data", equipment);
}
/**
* 导出列表
*/
@PreAuthorize("@ss.hasPermi('equip:equipment:export')")
@Log(title = "列表", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(HttpServletResponse response, @RequestParam Map<String, Object> params)
{
R r = equipmentService.list(params);
List<Equipment> list = (List<Equipment>) r.get("data");
ExcelUtil<Equipment> util = new ExcelUtil<Equipment>(Equipment.class);
util.exportExcel(response, list, "列表数据");
}
/**
* 新增
*/
@RequestMapping("/add")
@Log(title = "Equipment", businessType = BusinessType.INSERT)
@PreAuthorize("@ss.hasPermi('equip:equipment:add')")
public R add(@RequestBody Equipment equipment){
return equipmentService.saveEquipment(equipment);
}
/**
* 修改
*/
@RequestMapping("/edit")
@PreAuthorize("@ss.hasPermi('equip:equipment:edit')")
@Log(title = "Equipment", businessType = BusinessType.UPDATE)
public R edit(@RequestBody Equipment equipment){
try {
equipmentService.updateById(equipment);
} catch (Exception e) {
throw new RuntimeException("设备名称重复!");
}
return R.ok();
}
/**
* 删除
*/
@RequestMapping("/delete/{eIds}")
@PreAuthorize("@ss.hasPermi('equip:equipment:remove')")
@Log(title = "Equipment", businessType = BusinessType.DELETE)
public R delete(@PathVariable Long[] eIds){
equipmentService.removeByIds(Arrays.asList(eIds));
return R.ok();
}
}

87
ruoyi-code/src/main/java/com/ruoyi/code/equip/controller/IndexController.java

@ -0,0 +1,87 @@ @@ -0,0 +1,87 @@
package com.ruoyi.code.equip.controller;
import com.ruoyi.code.equip.service.IndexService;
import com.ruoyi.common.core.page.R;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RequestMapping("/index")
@RestController
public class IndexController {
@Autowired
private IndexService indexService;
/**
* 获取 设备库存总览
* @return
*/
@RequestMapping("/getEquipStock")
public R getEquipStock(){
return indexService.getEquipStock();
}
/**
* 获取 设备入库top5
* @return
*/
@RequestMapping("/getEquipInTop5")
public R getEquipInTop5(){
return indexService.getEquipInTop5();
}
/**
* 获取 设备出库top5
* @return
*/
@RequestMapping("/getEquipOutTop5")
public R getEquipOutTop5(){
return indexService.getEquipOutTop5();
}
/**
* 获取 设备出库入库情况对比
* @return
*/
@RequestMapping("/getEquipOutInDb")
public R getEquipOutInDb(){
return indexService.getEquipOutInDb();
}
/**
* 获取 设出库入库设备占比情况
* @return
*/
@RequestMapping("/getEquipOutInZb")
public R getEquipOutInZb(){
return indexService.getEquipOutInZb();
}
/**
* 获取 设备库存库存预警对比
* @return
*/
@RequestMapping("/getEquipStockDb")
public R getEquipStockDb(){
return indexService.getEquipStockDb();
}
/**
* 获取 近三年设备采购数
* @return
*/
@RequestMapping("/get3yearEquipCount")
public R get3yearEquipCount(){
return indexService.get3yearEquipCount();
}
/**
* 获取 设备报损退回数统计
* @return
*/
@RequestMapping("/getEquipReturnAndDamage")
public R getEquipReturnAndDamage(){
return indexService.getEquipReturnAndDamage();
}
}

46
ruoyi-code/src/main/java/com/ruoyi/code/equip/domain/AppData.java

@ -0,0 +1,46 @@ @@ -0,0 +1,46 @@
package com.ruoyi.code.equip.domain;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class AppData {
private Long eId;
private Long stockId;
/** 设备编号 */
private String eNo;
/** 设备名称 */
private String name;
/** 供应商 */
private Long supplierId;
/** 规格 */
private String spec;
/** 存放位置 */
private Long positionId;
/** 供应商名称 */
private String supplierName;
/** 存放位置 */
private String positionName;
/** 库存预警 */
private Long warning;
/** 出库价格 */
private BigDecimal outPrice;
/** 备注 */
private String remark;
/** 设备库存 */
private Integer StockNum;
}

45
ruoyi-code/src/main/java/com/ruoyi/code/equip/domain/Customer.java

@ -0,0 +1,45 @@ @@ -0,0 +1,45 @@
package com.ruoyi.code.equip.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.ruoyi.common.annotation.Excel;
import lombok.Data;
import java.io.Serializable;
/**
* 客户管理对象 customer
*
* @author blank
* @date 2023-01-09
*/
@Data
@TableName("customer")
public class Customer implements Serializable
{
private static final long serialVersionUID = 1L;
/** id */
@TableId(type = IdType.INPUT)
private Long id;
/** 客户名称 */
@Excel(name = "客户名称")
private String name;
/** 联系人 */
@Excel(name = "联系人")
private String user;
/** 联系电话 */
@Excel(name = "联系电话")
private String phone;
/** 客户地址 */
@Excel(name = "客户地址")
private String address;
}

70
ruoyi-code/src/main/java/com/ruoyi/code/equip/domain/EquipDamage.java

@ -0,0 +1,70 @@ @@ -0,0 +1,70 @@
package com.ruoyi.code.equip.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
import lombok.Data;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import java.io.Serializable;
import java.util.Date;
/**
* 设备报损记录对象 equip_damage
*
* @author ruoyi
* @date 2023-02-07
*/
@Data
@TableName("equip_damage")
public class EquipDamage implements Serializable
{
private static final long serialVersionUID = 1L;
/** 主键id */
@TableId(type = IdType.AUTO)
private Long id;
/** 设备编号 */
@Excel(name = "设备编号")
private String equipNo;
/** 设备名称 */
@Excel(name = "设备名称")
private String equipName;
/** 批次 */
@Excel(name = "批次")
private String batch;
/** 客户 */
private Long cId;
/** 客户名称 */
@Excel(name = "客户名称")
@TableField(exist = false)
private String cName;
/** 类型 0 出库 1 入库 */
@Excel(name = "类型",readConverterExp = "0=出库,1=入库")
private String type;
/** 报损数量 */
@Excel(name = "报损数量")
private Long damageNum;
/** 报损日期 */
@Excel(name = "报损日期", width = 30, dateFormat = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd")
private Date damageTime;
/** 报损原因 */
@Excel(name = "报损原因", width = 30, height = 20,align = HorizontalAlignment.JUSTIFY)
private String damageReason;
}

81
ruoyi-code/src/main/java/com/ruoyi/code/equip/domain/EquipIn.java

@ -0,0 +1,81 @@ @@ -0,0 +1,81 @@
package com.ruoyi.code.equip.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
/**
* 设备入库管理对象 equip_in
*
* @author blank
* @date 2023-01-05
*/
@Data
@TableName("equip_in")
public class EquipIn implements Serializable
{
private static final long serialVersionUID = 1L;
/** 主键id */
@TableId(type = IdType.INPUT)
private Long id;
/** 设备编号 */
@Excel(name = "设备编号")
private String equipNo;
/** 设备名称 */
@Excel(name = "设备名称")
private String equipName;
/** 供应商 */
private Long supplierId;
@Excel(name = "供应商")
@TableField(exist = false)
private String supplierName;
/** 入库时间 */
@Excel(name = "入库时间", width = 30, dateFormat = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd")
private Date inTime;
/** 批次 */
@Excel(name = "批次")
private String batch;
/** 数量 */
@Excel(name = "数量")
private Long num;
/** 剩余数量 */
@Excel(name = "剩余数量")
private Long rnum;
/** 入库价格 */
@Excel(name = "入库价格(元)")
private BigDecimal price;
/** 库存*/
private Long stockId;
/** 总价 */
@TableField(exist = false)
private BigDecimal totalPrice;
/** 生产时间 */
@Excel(name = "生产时间", width = 30, dateFormat = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd")
private Date productionTime;
}

33
ruoyi-code/src/main/java/com/ruoyi/code/equip/domain/EquipJournalAccount.java

@ -0,0 +1,33 @@ @@ -0,0 +1,33 @@
package com.ruoyi.code.equip.domain;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
import lombok.Data;
import java.util.Date;
/**
* 流水记录
*/
@Data
public class EquipJournalAccount{
@Excel(name = "类型")
private String type;
@Excel(name = "设备编号")
private String equipNo;
@Excel(name = "设备名称")
private String equipName;
@JsonFormat(pattern = "yyyy-MM-dd")
@Excel(name = "操作时间",width = 30, dateFormat = "yyyy-MM-dd")
private Date time;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createTime;
@Excel(name = "数量")
private Long num;
}

66
ruoyi-code/src/main/java/com/ruoyi/code/equip/domain/EquipOut.java

@ -0,0 +1,66 @@ @@ -0,0 +1,66 @@
package com.ruoyi.code.equip.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
/**
* 设备出库对象 equip_out
*
* @author blank
* @date 2023-01-05
*/
@Data
@TableName("equip_out")
public class EquipOut implements Serializable
{
private static final long serialVersionUID = 1L;
/** 主键id */
@TableId(type = IdType.AUTO)
private Long id;
/** 设备编号 */
@Excel(name = "设备编号")
private String equipNo;
/** 设备名称 */
@Excel(name = "设备名称")
private String equipName;
/** 出库时间 */
@Excel(name = "出库时间", width = 30, dateFormat = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd")
private Date outTime;
/** 批次 */
@Excel(name = "批次")
private String batch;
/** 数量 */
@Excel(name = "数量")
private Long num;
/** 总价 */
@Excel(name = "总价(元)")
private BigDecimal totalprice;
/**
* 客户id
*/
private Long cId;
/** 客户 */
@Excel(name = "客户")
@TableField(exist = false)
private String customerName;
}

35
ruoyi-code/src/main/java/com/ruoyi/code/equip/domain/EquipPosition.java

@ -0,0 +1,35 @@ @@ -0,0 +1,35 @@
package com.ruoyi.code.equip.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.ruoyi.common.annotation.Excel;
import lombok.Data;
import java.io.Serializable;
/**
* 位置管理对象 equip_position
*
* @author blank
* @date 2023-01-04
*/
@Data
@TableName("equip_position")
public class EquipPosition implements Serializable
{
private static final long serialVersionUID = 1L;
/** 自增id */
@TableId(type = IdType.INPUT)
private Long id;
/** 位置名称 */
@Excel(name = "位置名称")
private String name;
/** 位置详情 */
@Excel(name = "位置详情",width = 80)
private String details;
}

91
ruoyi-code/src/main/java/com/ruoyi/code/equip/domain/EquipPurchase.java

@ -0,0 +1,91 @@ @@ -0,0 +1,91 @@
package com.ruoyi.code.equip.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
/**
* 设备采购管理对象 equip_purchase
*
* @author blank
* @date 2023-01-12
*/
@Data
@TableName("equip_purchase")
public class EquipPurchase implements Serializable
{
private static final long serialVersionUID = 1L;
/** 主键id */
@TableId(type = IdType.INPUT)
private Long id;
/** 设备编号 */
@Excel(name = "设备编号")
private String equipNo;
/** 设备名称 */
@Excel(name = "设备名称")
private String equipName;
/** 供应商 */
private Long supplierId;
/**
* 供应商名称
*/
@Excel(name = "供应商")
@TableField(exist = false)
private String supplierName;
/** 采购时间 */
@Excel(name = "采购时间",width = 30, dateFormat = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd")
private Date purchaseTime;
/** 生产时间 */
@JsonFormat(pattern = "yyyy-MM-dd")
private Date productionTime;
/** 批次 */
@Excel(name = "批次")
private String batch;
/** 数量 */
@Excel(name = "数量")
private Long num;
/** 采购价格 */
@Excel(name = "采购价格")
private BigDecimal price;
/** 入库时间 */
@Excel(name = "入库时间",width = 30, dateFormat = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd")
private Date inTime;
/**
* 采购状态
*/
private String Status;
@Excel(name = "采购状态")
@TableField(exist = false)
private String statusName;
/**
* 凭证图片地址
*/
@TableField(exist = false)
private String pzImg;
}

64
ruoyi-code/src/main/java/com/ruoyi/code/equip/domain/EquipStock.java

@ -0,0 +1,64 @@ @@ -0,0 +1,64 @@
package com.ruoyi.code.equip.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.ruoyi.common.annotation.Excel;
import lombok.Data;
import java.io.Serializable;
/**
* 设备库存对象 equip_stock
*
* @author blank
* @date 2023-01-05
*/
@Data
@TableName("equip_stock")
public class EquipStock implements Serializable
{
private static final long serialVersionUID = 1L;
/** 主键id */
@TableId(type = IdType.AUTO)
private Long id;
/** 设备编号 */
@Excel(name = "设备编号")
private String equipNo;
/** 设备名称 */
@Excel(name = "设备名称")
private String equipName;
/** 库存 */
@Excel(name = "库存量")
@TableField(exist = false)
private Integer stockNum;
/**
* 存放位置
*/
@Excel(name = "存放位置")
@TableField(exist = false)
private String pname;
/**
* 供应商
*/
@Excel(name = "供应商")
@TableField(exist = false)
private String sname;
/**
* 库存预警值
*/
@Excel(name = "库存预警值")
@TableField(exist = false)
private Long warning;
}

48
ruoyi-code/src/main/java/com/ruoyi/code/equip/domain/EquipSupplier.java

@ -0,0 +1,48 @@ @@ -0,0 +1,48 @@
package com.ruoyi.code.equip.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.ruoyi.common.annotation.Excel;
import lombok.Data;
import java.io.Serializable;
/**
* 供应商管理对象 equip_supplier
*
* @author blank
* @date 2023-01-04
*/
@Data
@TableName("equip_supplier")
public class EquipSupplier implements Serializable
{
private static final long serialVersionUID = 1L;
/** 主键id */
@TableId(type = IdType.INPUT)
private Long id;
/** 供应商名称 */
@Excel(name = "名称")
private String name;
/** 供应商地址 */
@Excel(name = "地址")
private String address;
/** 联系人 */
@Excel(name = "联系人")
private String user;
/** 联系电话 */
@Excel(name = "联系电话")
private Long phone;
/** 备注 */
@Excel(name = "备注")
private String remark;
}

67
ruoyi-code/src/main/java/com/ruoyi/code/equip/domain/EquipUntitled.java

@ -0,0 +1,67 @@ @@ -0,0 +1,67 @@
package com.ruoyi.code.equip.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.annotation.Excel;
import lombok.Data;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import java.io.Serializable;
import java.util.Date;
/**
* 设备退回对象 equip_untitled
*
* @author blank
* @date 2023-01-06
*/
@Data
@TableName("equip_untitled")
public class EquipUntitled implements Serializable
{
private static final long serialVersionUID = 1L;
/** 主键id */
@TableId(type = IdType.AUTO)
private Long id;
/** 设备编号 */
@Excel(name = "设备编号")
private String equipNo;
/** 设备名称 */
@Excel(name = "设备名称")
private String equipName;
/** 客户 */
private Long cId;
/** 客户 */
@Excel(name = "客户")
@TableField(exist = false)
private String customerName;
/** 退回数量 */
@Excel(name = "退回数量")
private Long returnNum;
/** 退货日期 */
@Excel(name = "退货日期", width = 30, dateFormat = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd")
private Date untreadTime;
/** 退货原因 */
@Excel(name = "退货原因", width = 30, height = 20,align = HorizontalAlignment.JUSTIFY)
private String untreadReason;
/** 批次 */
@TableField(exist = false)
private String batch;
}

34
ruoyi-code/src/main/java/com/ruoyi/code/equip/domain/EquipVoucher.java

@ -0,0 +1,34 @@ @@ -0,0 +1,34 @@
package com.ruoyi.code.equip.domain;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.io.Serializable;
/**
* 凭证信息对象 equip_voucher
*
* @author blank
* @date 2023-01-12
*/
@Data
@TableName("equip_voucher")
public class EquipVoucher implements Serializable
{
private static final long serialVersionUID = 1L;
/** 主键id */
@TableId(type = IdType.INPUT)
private Long id;
/** 凭证图片 */
private String img;
/** 采购id */
private Long purchaseId;
}

70
ruoyi-code/src/main/java/com/ruoyi/code/equip/domain/Equipment.java

@ -0,0 +1,70 @@ @@ -0,0 +1,70 @@
package com.ruoyi.code.equip.domain;
import com.baomidou.mybatisplus.annotation.*;
import com.ruoyi.common.annotation.Excel;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
/**
* 设备信息对象 equipment
*
* @author blank
* @date 2023-01-05
*/
@Data
@TableName("equipment")
public class Equipment implements Serializable
{
private static final long serialVersionUID = 1L;
/** 设备id */
@TableId(type = IdType.INPUT)
private Long eId;
/** 设备编号 */
@Excel(name = "设备编号")
private String eNo;
/** 设备名称 */
@Excel(name = "设备名称")
private String name;
/** 供应商 */
private Long supplierId;
/** 规格 */
@Excel(name = "规格")
private String spec;
/** 存放位置 */
private Long positionId;
@Excel(name = "供应商")
@TableField(exist = false)
private String supplierName;
@Excel(name = "存放位置")
@TableField(exist = false)
private String positionName;
/** 库存预警 */
@Excel(name = "库存预警")
private Long warning;
/** 出库价格 */
@Excel(name = "出库价格")
private BigDecimal outPrice;
/** 备注 */
@Excel(name = "备注")
private String remark;
/** 是否删除,0未删除,1已删除 */
@TableLogic
private String deleted;
}

14
ruoyi-code/src/main/java/com/ruoyi/code/equip/domain/IndexData.java

@ -0,0 +1,14 @@ @@ -0,0 +1,14 @@
package com.ruoyi.code.equip.domain;
import lombok.Data;
@Data
public class IndexData {
private Long id;
private String name;
private Integer value;
private Integer value2;
private Integer warning;
}

12
ruoyi-code/src/main/java/com/ruoyi/code/equip/domain/ParamsDto.java

@ -0,0 +1,12 @@ @@ -0,0 +1,12 @@
package com.ruoyi.code.equip.domain;
import lombok.Data;
@Data
public class ParamsDto {
private Long id;
private String code;
private String keyword;
}

37
ruoyi-code/src/main/java/com/ruoyi/code/equip/mapper/AppMapper.java

@ -0,0 +1,37 @@ @@ -0,0 +1,37 @@
package com.ruoyi.code.equip.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.code.equip.domain.*;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
@Mapper
public interface AppMapper extends BaseMapper<AppData> {
List<AppData> getEquipList(@Param("name") String name);
List<EquipPosition> getPositionList(EquipPosition position);
List<EquipSupplier> getSupplierList(EquipSupplier supplier);
List<EquipPurchase> getPurchaseList(@Param("params") Map<String, Object> params);
List<EquipVoucher> getVoucherList(@Param("pId") String pId);
List<EquipDamage> getDamageList(@Param("params") Map<String, Object> params);
List<EquipUntitled> getUntitledList(@Param("params") Map<String, Object> params);
List<EquipOut> getOutList(@Param("params") Map<String, Object> params);
List<Customer> getCustomerList(Customer customer);
List<String> getIndexInAndOutNum();
int getPurchaseCGCount();
int getPurchaseYGCount();
}

17
ruoyi-code/src/main/java/com/ruoyi/code/equip/mapper/CustomerMapper.java

@ -0,0 +1,17 @@ @@ -0,0 +1,17 @@
package com.ruoyi.code.equip.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import com.ruoyi.code.equip.domain.Customer;
/**
* Mapper接口
*
* @author blank
* @date 2023-01-09
*/
@Mapper
public interface CustomerMapper extends BaseMapper<Customer>
{
}

27
ruoyi-code/src/main/java/com/ruoyi/code/equip/mapper/EquipDamageMapper.java

@ -0,0 +1,27 @@ @@ -0,0 +1,27 @@
package com.ruoyi.code.equip.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.code.equip.domain.EquipDamage;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
/**
* Mapper接口
*
* @author ruoyi
* @date 2023-02-07
*/
@Mapper
public interface EquipDamageMapper extends BaseMapper<EquipDamage>
{
/**
* 根据条件查询报损记录不分页
* @param params
* @return
*/
List<EquipDamage> list2(@Param("params") Map<String, Object> params);
}

41
ruoyi-code/src/main/java/com/ruoyi/code/equip/mapper/EquipInMapper.java

@ -0,0 +1,41 @@ @@ -0,0 +1,41 @@
package com.ruoyi.code.equip.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.code.equip.domain.EquipIn;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
/**
* Mapper接口
*
* @author blank
* @date 2023-01-05
*/
@Mapper
public interface EquipInMapper extends BaseMapper<EquipIn>
{
Integer selectRnumByStockId(@Param("stockId") Long stockId);
/**
* 查询这个月的入库记录
* @return
*/
List<EquipIn> getMonthEquipInList();
/**
* 查询近半年的入库记录
* @return
*/
List<EquipIn> getYearEquipInList();
/**
* 查询列表2 不分页
* @param params
* @return
*/
List<EquipIn> list(@Param("params") Map<String, Object> params);
}

46
ruoyi-code/src/main/java/com/ruoyi/code/equip/mapper/EquipOutMapper.java

@ -0,0 +1,46 @@ @@ -0,0 +1,46 @@
package com.ruoyi.code.equip.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.code.equip.domain.EquipOut;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
/**
* Mapper接口
*
* @author blank
* @date 2023-01-05
*/
@Mapper
public interface EquipOutMapper extends BaseMapper<EquipOut>
{
/**
* 获取出库价格
* @param eNo
* @return
*/
Double selectOutPrice(@Param("eNo") String eNo);
/**
* 查询这个月的出库记录
* @return
*/
List<EquipOut> getMonthEquipOutList();
/**
* 查询近半年的出库记录
* @return
*/
List<EquipOut> getYearEquipOutList();
/**
* 查询列表2 不分页
* @param params
* @return
*/
List<EquipOut> list(@Param("params") Map<String, Object> params);
}

17
ruoyi-code/src/main/java/com/ruoyi/code/equip/mapper/EquipPositionMapper.java

@ -0,0 +1,17 @@ @@ -0,0 +1,17 @@
package com.ruoyi.code.equip.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import com.ruoyi.code.equip.domain.EquipPosition;
/**
* Mapper接口
*
* @author blank
* @date 2023-01-04
*/
@Mapper
public interface EquipPositionMapper extends BaseMapper<EquipPosition>
{
}

26
ruoyi-code/src/main/java/com/ruoyi/code/equip/mapper/EquipPurchaseMapper.java

@ -0,0 +1,26 @@ @@ -0,0 +1,26 @@
package com.ruoyi.code.equip.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.ruoyi.code.equip.domain.EquipPurchase;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
/**
* Mapper接口
*
* @author blank
* @date 2023-01-12
*/
@Mapper
public interface EquipPurchaseMapper extends BaseMapper<EquipPurchase>
{
List<EquipPurchase> list(@Param("params") Map<String, Object> params);
IPage<EquipPurchase> queryPage(Page page, @Param("params") Map<String, Object> params);
}

42
ruoyi-code/src/main/java/com/ruoyi/code/equip/mapper/EquipStockMapper.java

@ -0,0 +1,42 @@ @@ -0,0 +1,42 @@
package com.ruoyi.code.equip.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.code.equip.domain.EquipJournalAccount;
import com.ruoyi.code.equip.domain.EquipStock;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
/**
* Mapper接口
*
* @author blank
* @date 2023-01-05
*/
@Mapper
public interface EquipStockMapper extends BaseMapper<EquipStock>
{
/**
* 查询库存信息列表
* @param params
* @return
*/
List<EquipStock> list(@Param("params") Map<String, Object> params);
/**
* 根据设备编号查询设备流水
* @param params
* @return
*/
List<EquipJournalAccount> selectEquipFlow(@Param("params") Map<String, Object> params);
/**
* 根据设备编号查询设备流水记录总数
* @param params
* @return
*/
Integer selectEquipFlowCount(@Param("params") Map<String, Object> params);
}

17
ruoyi-code/src/main/java/com/ruoyi/code/equip/mapper/EquipSupplierMapper.java

@ -0,0 +1,17 @@ @@ -0,0 +1,17 @@
package com.ruoyi.code.equip.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import com.ruoyi.code.equip.domain.EquipSupplier;
/**
* Mapper接口
*
* @author blank
* @date 2023-01-04
*/
@Mapper
public interface EquipSupplierMapper extends BaseMapper<EquipSupplier>
{
}

33
ruoyi-code/src/main/java/com/ruoyi/code/equip/mapper/EquipUntitledMapper.java

@ -0,0 +1,33 @@ @@ -0,0 +1,33 @@
package com.ruoyi.code.equip.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.code.equip.domain.EquipUntitled;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
/**
* Mapper接口
*
* @author blank
* @date 2023-01-06
*/
@Mapper
public interface EquipUntitledMapper extends BaseMapper<EquipUntitled>
{
/**
* 查询设备退回记录 最近30条
* @return
*/
List<EquipUntitled> getEquipUntitledList();
/**
* 查询列表2 不分页
* @param params
* @return
*/
List<EquipUntitled> list(@Param("params") Map<String, Object> params);
}

17
ruoyi-code/src/main/java/com/ruoyi/code/equip/mapper/EquipVoucherMapper.java

@ -0,0 +1,17 @@ @@ -0,0 +1,17 @@
package com.ruoyi.code.equip.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.code.equip.domain.EquipVoucher;
import org.apache.ibatis.annotations.Mapper;
/**
* Mapper接口
*
* @author blank
* @date 2023-01-12
*/
@Mapper
public interface EquipVoucherMapper extends BaseMapper<EquipVoucher>
{
}

35
ruoyi-code/src/main/java/com/ruoyi/code/equip/mapper/EquipmentMapper.java

@ -0,0 +1,35 @@ @@ -0,0 +1,35 @@
package com.ruoyi.code.equip.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.code.equip.domain.Equipment;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
/**
* Mapper接口
*
* @author blank
* @date 2023-01-05
*/
@Mapper
public interface EquipmentMapper extends BaseMapper<Equipment>
{
/**
* 查询设备信息列表2
* @param params
* @return
*/
List<Equipment> list(@Param("params") Map<String, Object> params);
int saveEquipment(Equipment equipment);
/**
* 获取序列
* @return
*/
int getSequence();
}

24
ruoyi-code/src/main/java/com/ruoyi/code/equip/mapper/IndexMapper.java

@ -0,0 +1,24 @@ @@ -0,0 +1,24 @@
package com.ruoyi.code.equip.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.ruoyi.code.equip.domain.IndexData;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@Mapper
public interface IndexMapper extends BaseMapper<IndexData> {
List<IndexData> getEquipStock();
List<IndexData> getEquipInTop5();
List<IndexData> getEquipOutTop5();
List<IndexData> getEquipOutInDb();
List<IndexData> getEquipOutInZb();
List<IndexData> get3yearEquipCount();
List<IndexData> getEquipReturnAndDamage();
}

35
ruoyi-code/src/main/java/com/ruoyi/code/equip/service/AppService.java

@ -0,0 +1,35 @@ @@ -0,0 +1,35 @@
package com.ruoyi.code.equip.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.code.equip.domain.*;
import com.ruoyi.common.core.page.R;
import java.util.Map;
public interface AppService extends IService<AppData> {
R getEquipList(String name);
R positionList(EquipPosition position);
R getSupplierList(EquipSupplier supplier);
R addPurchase(EquipPurchase equipPurchase);
R getPurchaseList(Map<String, Object> params);
R getVoucherList(String pId);
R getDamageList(Map<String, Object> params);
R getUntitledList(Map<String, Object> params);
R getOutList(Map<String, Object> params);
R getCustomerList(Customer customer);
R getIndexInAndOutNum();
R getPurchaseCGCount();
R getPurchaseYGCount();
}

22
ruoyi-code/src/main/java/com/ruoyi/code/equip/service/ICustomerService.java

@ -0,0 +1,22 @@ @@ -0,0 +1,22 @@
package com.ruoyi.code.equip.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.ruoyi.code.equip.domain.Customer;
import com.ruoyi.common.core.page.R;
import java.util.Map;
/**
* Service接口
*
* @author blank
* @date 2023-01-09
*/
public interface ICustomerService extends IService<Customer>
{
/**
* 查询
*/
R queryPage(Map<String, Object> params);
}

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save