springboot基本框架。config:控制器前后端处理请求。constant:静态设置,Excel导出。dynamicquery:动态查询sql。exception:异常处理。model:前端分页,页面响应控件。mqtt:消息协议相关。shiro:安全框架,身份验证,密码注册。util:通用工具包,日期时间处理、文件操作、加密解密。pom.xml配置导入
parent
6484bae8a9
commit
2b42c0a734
@ -0,0 +1,38 @@
|
||||
target/
|
||||
!.mvn/wrapper/maven-wrapper.jar
|
||||
!**/src/main/**/target/
|
||||
!**/src/test/**/target/
|
||||
|
||||
### IntelliJ IDEA ###
|
||||
.idea/modules.xml
|
||||
.idea/jarRepositories.xml
|
||||
.idea/compiler.xml
|
||||
.idea/libraries/
|
||||
*.iws
|
||||
*.iml
|
||||
*.ipr
|
||||
|
||||
### Eclipse ###
|
||||
.apt_generated
|
||||
.classpath
|
||||
.factorypath
|
||||
.project
|
||||
.settings
|
||||
.springBeans
|
||||
.sts4-cache
|
||||
|
||||
### NetBeans ###
|
||||
/nbproject/private/
|
||||
/nbbuild/
|
||||
/dist/
|
||||
/nbdist/
|
||||
/.nb-gradle/
|
||||
build/
|
||||
!**/src/main/**/build/
|
||||
!**/src/test/**/build/
|
||||
|
||||
### VS Code ###
|
||||
.vscode/
|
||||
|
||||
### Mac OS ###
|
||||
.DS_Store
|
@ -0,0 +1,143 @@
|
||||
<?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.smart</groupId>
|
||||
<artifactId>Smart-Parking</artifactId>
|
||||
<version>1.0-SNAPSHOT</version>
|
||||
<packaging>war</packaging>
|
||||
|
||||
<properties>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
<java.version>1.8</java.version>
|
||||
</properties>
|
||||
|
||||
<parent>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-parent</artifactId>
|
||||
<version>2.2.6.RELEASE</version>
|
||||
<relativePath/>
|
||||
</parent>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-web</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-tomcat</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-thymeleaf</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>net.sourceforge.nekohtml</groupId>
|
||||
<artifactId>nekohtml</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-data-jpa</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>mysql</groupId>
|
||||
<artifactId>mysql-connector-java</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>cn.hutool</groupId>
|
||||
<artifactId>hutool-all</artifactId>
|
||||
<version>4.6.10</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.shiro</groupId>
|
||||
<artifactId>shiro-spring-boot-web-starter</artifactId>
|
||||
<version>1.7.1</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.commons</groupId>
|
||||
<artifactId>commons-lang3</artifactId>
|
||||
<version>3.11</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.github.theborakompanioni</groupId>
|
||||
<artifactId>thymeleaf-extras-shiro</artifactId>
|
||||
<version>2.0.0</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.projectlombok</groupId>
|
||||
<artifactId>lombok</artifactId>
|
||||
<version>1.16.18</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.google.guava</groupId>
|
||||
<artifactId>guava</artifactId>
|
||||
<version>25.1-jre</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>com.github.whvcse</groupId>
|
||||
<artifactId>easy-captcha</artifactId>
|
||||
<version>1.6.2</version>
|
||||
</dependency>
|
||||
|
||||
|
||||
<!-- Excel相关 -->
|
||||
<dependency>
|
||||
<groupId>org.apache.poi</groupId>
|
||||
<artifactId>poi</artifactId>
|
||||
<version>4.0.1</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.poi</groupId>
|
||||
<artifactId>poi-ooxml</artifactId>
|
||||
<version>4.0.1</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.apache.poi</groupId>
|
||||
<artifactId>poi-ooxml-schemas</artifactId>
|
||||
<version>4.0.1</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-integration</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.integration</groupId>
|
||||
<artifactId>spring-integration-stream</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.integration</groupId>
|
||||
<artifactId>spring-integration-mqtt</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-devtools</artifactId>
|
||||
<scope>runtime</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.projectlombok</groupId>
|
||||
<artifactId>lombok</artifactId>
|
||||
<version>1.18.20</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
<build>
|
||||
<finalName>Smart-Parking</finalName>
|
||||
<plugins>
|
||||
<plugin>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-maven-plugin</artifactId>
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>org.springframework</groupId>
|
||||
<artifactId>springloaded</artifactId>
|
||||
<version>1.2.7.RELEASE</version>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
</plugin>
|
||||
</plugins>
|
||||
</build>
|
||||
</project>
|
@ -0,0 +1,33 @@
|
||||
package com.smart.common.constant;
|
||||
|
||||
/**
|
||||
* Excel导入导出数据类型枚举
|
||||
*/
|
||||
public enum ExcelDataType {
|
||||
// 字符串类型
|
||||
STRING("String"),
|
||||
// 数值类型
|
||||
INTEGER("Integer"),
|
||||
// Long类型
|
||||
LONG("Long"),
|
||||
// Double类型
|
||||
DOUBLE("Double"),
|
||||
// BigDecimal类型
|
||||
BIG_DECIMAL("BigDecimal"),
|
||||
// Float类型
|
||||
FLOAT("Float"),
|
||||
// Date类型
|
||||
DATE("Date"),
|
||||
// Timestamp
|
||||
TIMESTAMP("Timestamp"),
|
||||
// Macro类型
|
||||
MACRO("Macro"),
|
||||
// Money类型
|
||||
MONEY("Money");
|
||||
|
||||
public String dataType;
|
||||
|
||||
ExcelDataType(String dataType) {
|
||||
this.dataType = dataType;
|
||||
}
|
||||
}
|
@ -0,0 +1,22 @@
|
||||
package com.smart.common.constant;
|
||||
/**
|
||||
* 系统提示静态变量
|
||||
*/
|
||||
public class MsgConstant {
|
||||
|
||||
/**
|
||||
* 操作成功
|
||||
*/
|
||||
public static final String MSG_OPERATION_SUCCESS = "操作成功!";
|
||||
|
||||
/**
|
||||
* 操作失败
|
||||
*/
|
||||
public static final String MSG_OPERATION_FAILED = "操作失败!";
|
||||
|
||||
/**
|
||||
* 加载表单数据错误提示
|
||||
*/
|
||||
public static final String MSG_INIT_FORM = "初始化表单数据失败,请重试!";
|
||||
|
||||
}
|
@ -0,0 +1,58 @@
|
||||
package com.smart.common.exception;
|
||||
/**
|
||||
* 自定义异常
|
||||
*/
|
||||
public class RrException extends RuntimeException {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
private String msg; //存储异常的详细信息
|
||||
|
||||
private int code = 500; //存储异常的错误码,默认为 500
|
||||
|
||||
//指定的异常信息构造异常对象
|
||||
public RrException(String msg) {
|
||||
super(msg);
|
||||
this.msg = msg;
|
||||
}
|
||||
|
||||
//指定的异常信息和原始异常对象构造异常对象
|
||||
public RrException(String msg, Throwable e) {
|
||||
super(msg, e);
|
||||
this.msg = msg;
|
||||
}
|
||||
|
||||
//指定的异常信息和错误码构造异常对象
|
||||
public RrException(String msg, int code) {
|
||||
super(msg);
|
||||
this.msg = msg;
|
||||
this.code = code;
|
||||
}
|
||||
|
||||
//指定的异常信息、错误码和原始异常对象构造异常对象
|
||||
public RrException(String msg, int code, Throwable e) {
|
||||
super(msg, e);
|
||||
this.msg = msg;
|
||||
this.code = code;
|
||||
}
|
||||
|
||||
//获取异常的详细信息
|
||||
public String getMsg() {
|
||||
return msg;
|
||||
}
|
||||
|
||||
//设置异常的详细信息
|
||||
public void setMsg(String msg) {
|
||||
this.msg = msg;
|
||||
}
|
||||
|
||||
//获取异常的错误码
|
||||
public int getCode() {
|
||||
return code;
|
||||
}
|
||||
|
||||
//设置异常的错误码
|
||||
public void setCode(int code) {
|
||||
this.code = code;
|
||||
}
|
||||
}
|
@ -0,0 +1,56 @@
|
||||
package com.smart.common.exception;
|
||||
|
||||
import com.smart.common.model.Result;
|
||||
import org.apache.shiro.authz.AuthorizationException;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.dao.DuplicateKeyException;
|
||||
import org.springframework.validation.BindException;
|
||||
import org.springframework.web.bind.annotation.ExceptionHandler;
|
||||
import org.springframework.web.bind.annotation.RestControllerAdvice;
|
||||
|
||||
/**
|
||||
* 异常处理器
|
||||
*/
|
||||
@RestControllerAdvice
|
||||
public class RrExceptionHandler {
|
||||
|
||||
private Logger logger = LoggerFactory.getLogger(getClass());
|
||||
|
||||
/**
|
||||
* 自定义异常
|
||||
*/
|
||||
@ExceptionHandler(RrException.class)
|
||||
public Result handleRRException(RrException e){
|
||||
Result r = new Result();
|
||||
r.put("code", e.getCode());
|
||||
r.put("msg", e.getMessage());
|
||||
return r;
|
||||
}
|
||||
|
||||
@ExceptionHandler(DuplicateKeyException.class)
|
||||
public Result handleDuplicateKeyException(DuplicateKeyException e){
|
||||
logger.error(e.getMessage(), e);
|
||||
return Result.error("数据库中已存在该记录!");
|
||||
}
|
||||
|
||||
@ExceptionHandler(AuthorizationException.class)
|
||||
public Result handleDuplicateKeyException(AuthorizationException e){
|
||||
logger.error(e.getMessage(), e);
|
||||
return Result.error("抱歉,你没有权限进行操作!");
|
||||
}
|
||||
|
||||
@ExceptionHandler(Exception.class)
|
||||
public Result handleException(Exception e){
|
||||
logger.error(e.getMessage(), e);
|
||||
return Result.error();
|
||||
}
|
||||
|
||||
/**
|
||||
* 异常处理参数
|
||||
*/
|
||||
@ExceptionHandler(value = {BindException.class})
|
||||
public Result bindException(BindException e) {
|
||||
return Result.error(e.getAllErrors().toString());
|
||||
}
|
||||
}
|
@ -0,0 +1,69 @@
|
||||
package com.smart.common.model;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 页面响应
|
||||
*/
|
||||
public class Result extends HashMap<String, Object> {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
public Result() {
|
||||
put("code", 0);
|
||||
}
|
||||
|
||||
public static Result error() {
|
||||
return error(500, "未知异常,请联系管理员");
|
||||
}
|
||||
|
||||
public static Result error(String msg) {
|
||||
return error(500, msg);
|
||||
}
|
||||
|
||||
public static Result error(int code, String msg) {
|
||||
Result r = new Result();
|
||||
r.put("code", code);
|
||||
r.put("msg", msg);
|
||||
return r;
|
||||
}
|
||||
|
||||
public static Result ok(Object msg) {
|
||||
Result r = new Result();
|
||||
r.put("msg", msg);
|
||||
return r;
|
||||
}
|
||||
|
||||
public static Result ok(Object msg,Object data) {
|
||||
Result r = new Result();
|
||||
r.put("msg", msg);
|
||||
r.put("data", data);
|
||||
return r;
|
||||
}
|
||||
|
||||
public static Result ok(Map<String, Object> map) {
|
||||
Result r = new Result();
|
||||
r.putAll(map);
|
||||
return r;
|
||||
}
|
||||
|
||||
public static Result ok() {
|
||||
Result r = new Result();
|
||||
r.put("msg", "操作成功");
|
||||
return r;
|
||||
}
|
||||
|
||||
public static Boolean isOk(Result r) {
|
||||
if(r.get("code").toString().equals("0")){
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Result put(String key, Object value) {
|
||||
super.put(key, value);
|
||||
return this;
|
||||
}
|
||||
}
|
@ -0,0 +1,121 @@
|
||||
package com.smart.common.util;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import com.smart.common.constant.MsgConstant;
|
||||
import com.smart.common.constant.SystemConstant;
|
||||
import com.smart.common.model.Result;
|
||||
|
||||
import javax.imageio.ImageIO;
|
||||
import java.awt.image.BufferedImage;
|
||||
import java.io.File;
|
||||
import java.io.FileNotFoundException;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.net.HttpURLConnection;
|
||||
import java.net.URL;
|
||||
import java.net.URLConnection;
|
||||
|
||||
/**
|
||||
* 通用工具类
|
||||
*/
|
||||
public class CommonUtils {
|
||||
|
||||
/**
|
||||
* 判断对象是否为空
|
||||
*
|
||||
* @param obj
|
||||
* @return
|
||||
*/
|
||||
public static boolean isNullOrEmpty(Object obj) {
|
||||
if (obj == null) {
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询详情提示
|
||||
*
|
||||
* @param data
|
||||
* @return
|
||||
*/
|
||||
public static Result msg(Object data) {
|
||||
if (isNullOrEmpty(data)) {
|
||||
return Result.error(MsgConstant.MSG_INIT_FORM); // 如果数据为空,返回带有错误消息的结果对象
|
||||
}
|
||||
return Result.ok(data); // 如果数据不为空,返回包含数据的成功结果对象
|
||||
}
|
||||
|
||||
/**
|
||||
* 返回数据
|
||||
*
|
||||
* @param data
|
||||
* @return
|
||||
*/
|
||||
public static Result msgNotCheckNull(Object data) {
|
||||
return Result.ok().put(SystemConstant.DATA_ROWS, data); // 直接返回一个成功的结果对象,包含传入的数据
|
||||
}
|
||||
|
||||
/**
|
||||
* 使用正则表达式去掉多余的小数点和0
|
||||
*
|
||||
* @param s
|
||||
* @return
|
||||
*/
|
||||
public static String subZeroAndDot(String s) {
|
||||
if (s.indexOf(".") > 0) { // 如果字符串中包含小数点
|
||||
s = s.replaceAll("0+?$", ""); // 去掉末尾多余的0
|
||||
s = s.replaceAll("[.]$", ""); // 如果最后一位是小数点,也去掉
|
||||
}
|
||||
return s;
|
||||
}
|
||||
|
||||
/**
|
||||
* 下载图片
|
||||
*
|
||||
* @param imgUrl 图片的URL地址
|
||||
* @param imgPath 下载保存的本地路径
|
||||
*/
|
||||
public static void downLoadImg(String imgUrl, String imgPath) {
|
||||
BufferedImage bufferedImage;
|
||||
try {
|
||||
URL url = new URL(imgUrl); // 创建URL对象
|
||||
URLConnection urlConnection = url.openConnection(); // 打开URL连接
|
||||
HttpURLConnection httpURLConnection = (HttpURLConnection) urlConnection; // 强制转换为HttpURLConnection类型
|
||||
httpURLConnection.connect(); // 连接URL
|
||||
if (httpURLConnection.getResponseCode() == HttpURLConnection.HTTP_OK) { // 如果连接成功
|
||||
InputStream inputStream = httpURLConnection.getInputStream(); // 获取输入流
|
||||
bufferedImage = ImageIO.read(inputStream); // 读取图片
|
||||
ImageIO.write(bufferedImage, "png", new File(imgPath)); // 将图片写入本地文件
|
||||
} else {
|
||||
System.out.println("连接失败");
|
||||
}
|
||||
} catch (FileNotFoundException e) {
|
||||
e.printStackTrace();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 创建多级文件夹
|
||||
*
|
||||
* @param filePath 文件路径
|
||||
* @return 最终的父级文件夹
|
||||
*/
|
||||
public static File createParentFile(String filePath) {
|
||||
File parentFile = new File(filePath + SystemConstant.SF_FILE_SEPARATOR + DateUtil.thisYear()); // 创建年份父级文件夹
|
||||
if (!parentFile.exists()) { // 如果父级文件夹不存在
|
||||
parentFile.mkdirs(); // 创建父级文件夹
|
||||
}
|
||||
parentFile = new File(parentFile, (DateUtil.thisMonth() + 1) + ""); // 创建月份父级文件夹
|
||||
if (!parentFile.exists()) { // 如果父级文件夹不存在
|
||||
parentFile.mkdirs(); // 创建父级文件夹
|
||||
}
|
||||
parentFile = new File(parentFile, DateUtil.thisDayOfMonth() + ""); // 创建日期父级文件夹
|
||||
if (!parentFile.exists()) { // 如果父级文件夹不存在
|
||||
parentFile.mkdirs(); // 创建父级文件夹
|
||||
}
|
||||
return parentFile; // 返回最终的父级文件夹
|
||||
}
|
||||
}
|
@ -0,0 +1,99 @@
|
||||
package com.smart.common.util;
|
||||
|
||||
import java.sql.Timestamp;
|
||||
import java.text.ParseException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 日期处理工具类
|
||||
*/
|
||||
public class DateUtils {
|
||||
|
||||
/** 时间格式(yyyy-MM-dd) */
|
||||
public final static String DATE_PATTERN = "yyyy-MM-dd";
|
||||
|
||||
/** 时间格式(yyyy-MM-dd HH:mm:ss) */
|
||||
public final static String DATE_TIME_PATTERN = "yyyy-MM-dd HH:mm:ss";
|
||||
|
||||
/**
|
||||
* 格式化日期为指定的字符串格式
|
||||
*
|
||||
* @param date 要格式化的日期
|
||||
* @return 格式化后的日期字符串
|
||||
*/
|
||||
public static String format(Date date) {
|
||||
return format(date, DATE_PATTERN); // 使用默认日期格式进行格式化
|
||||
}
|
||||
|
||||
/**
|
||||
* 格式化日期为指定的字符串格式
|
||||
*
|
||||
* @param date 要格式化的日期
|
||||
* @param pattern 指定的日期格式
|
||||
* @return 格式化后的日期字符串
|
||||
*/
|
||||
public static String format(Date date, String pattern) {
|
||||
if (date != null) {
|
||||
SimpleDateFormat df = new SimpleDateFormat(pattern); // 创建指定格式的日期格式化对象
|
||||
return df.format(date); // 格式化日期并返回字符串
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 格式化时间戳为指定的字符串格式
|
||||
*
|
||||
* @param date 时间戳
|
||||
* @param pattern 指定的日期格式
|
||||
* @return 格式化后的日期字符串
|
||||
*/
|
||||
public static String format(Timestamp date, String pattern) {
|
||||
if (date != null) {
|
||||
SimpleDateFormat df = new SimpleDateFormat(pattern); // 创建指定格式的日期格式化对象
|
||||
return df.format(date); // 格式化日期并返回字符串
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 解析字符串为日期对象
|
||||
*
|
||||
* @param str 要解析的日期字符串
|
||||
* @param pattern 指定的日期格式
|
||||
* @return 解析后的日期对象
|
||||
*/
|
||||
public static Date parse(String str, String pattern) {
|
||||
if (str != null) {
|
||||
SimpleDateFormat df = new SimpleDateFormat(pattern); // 创建指定格式的日期格式化对象
|
||||
try {
|
||||
return df.parse(str); // 解析日期字符串并返回日期对象
|
||||
} catch (ParseException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取当前时间戳
|
||||
*
|
||||
* @return 当前时间戳
|
||||
*/
|
||||
public static Timestamp getTimestamp() {
|
||||
return new Timestamp(System.currentTimeMillis()); // 创建当前时间的时间戳对象
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取当前时间
|
||||
*
|
||||
* @return 当前时间的字符串表示
|
||||
*/
|
||||
public static String getTime() {
|
||||
return format(new Timestamp(System.currentTimeMillis()), DATE_TIME_PATTERN); // 使用默认日期时间格式格式化当前时间
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
System.out.println(System.currentTimeMillis()); // 打印当前系统时间的毫秒数
|
||||
}
|
||||
}
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,36 @@
|
||||
package com.smart.module.sys.entity;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import javax.persistence.*;
|
||||
import java.io.Serializable;
|
||||
|
||||
/**
|
||||
* sys_role_org 实体类
|
||||
*/
|
||||
@Data
|
||||
@Entity
|
||||
@Table(name = "sys_role_org")
|
||||
public class SysRoleOrg implements Serializable{
|
||||
/**
|
||||
* 记录id
|
||||
*/
|
||||
@Id
|
||||
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||
@Column(name = "id", nullable = false, length = 20)
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 角色ID
|
||||
*/
|
||||
@Column(name = "role_id", length = 20)
|
||||
private Long roleId;
|
||||
|
||||
/**
|
||||
* 机构ID
|
||||
*/
|
||||
@Column(name = "org_id", length = 20)
|
||||
private Long orgId;
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,14 @@
|
||||
package com.smart.module.sys.repository;
|
||||
|
||||
import com.smart.module.sys.entity.SysConfig;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
/**
|
||||
* sys_user Repository
|
||||
*/
|
||||
@Repository //CRUD
|
||||
public interface SysConfigRepository extends JpaRepository<SysConfig, Long> {
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,16 @@
|
||||
package com.smart.module.sys.repository;
|
||||
|
||||
import com.smart.module.sys.entity.SysInterface;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
/**
|
||||
* sys_interface Repository
|
||||
*/
|
||||
@Repository //CRUD
|
||||
public interface SysInterfaceRepository extends JpaRepository<SysInterface, Long> {
|
||||
|
||||
SysInterface getByType(String type);
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,13 @@
|
||||
package com.smart.module.sys.repository;
|
||||
|
||||
import com.smart.module.sys.entity.SysLandingRecords;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
/**
|
||||
* sys_landing_records Repository
|
||||
*/
|
||||
@Repository //CRUD
|
||||
public interface SysLandingRecordsRepository extends JpaRepository<SysLandingRecords, Long> {
|
||||
}
|
||||
|
@ -0,0 +1,13 @@
|
||||
package com.smart.module.sys.repository;
|
||||
|
||||
import com.smart.module.sys.entity.SysLog;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
/**
|
||||
* sys_log Repository
|
||||
*/
|
||||
@Repository //CRUD
|
||||
public interface SysLogRepository extends JpaRepository<SysLog, Long> {
|
||||
}
|
||||
|
@ -0,0 +1,13 @@
|
||||
package com.smart.module.sys.repository;
|
||||
|
||||
import com.smart.module.sys.entity.SysMenu;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
/**
|
||||
* sys_menu Repository
|
||||
*/
|
||||
@Repository //CRUD
|
||||
public interface SysMenuRepository extends JpaRepository<SysMenu, Long> {
|
||||
}
|
||||
|
@ -0,0 +1,13 @@
|
||||
package com.smart.module.sys.repository;
|
||||
|
||||
import com.smart.module.sys.entity.SysOrg;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
/**
|
||||
* sys_org Repository
|
||||
*/
|
||||
@Repository //CRUD
|
||||
public interface SysOrgRepository extends JpaRepository<SysOrg, Long> {
|
||||
}
|
||||
|
@ -0,0 +1,13 @@
|
||||
package com.smart.module.sys.repository;
|
||||
|
||||
import com.smart.module.sys.entity.SysRoleMenu;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
/**
|
||||
* sys_role_menu Repository
|
||||
*/
|
||||
@Repository //CRUD
|
||||
public interface SysRoleMenuRepository extends JpaRepository<SysRoleMenu, Long> {
|
||||
}
|
||||
|
@ -0,0 +1,13 @@
|
||||
package com.smart.module.sys.repository;
|
||||
|
||||
import com.smart.module.sys.entity.SysRoleOrg;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
/**
|
||||
* sys_role_org Repository
|
||||
*/
|
||||
@Repository //CRUD
|
||||
public interface SysRoleOrgRepository extends JpaRepository<SysRoleOrg, Long> {
|
||||
}
|
||||
|
@ -0,0 +1,13 @@
|
||||
package com.smart.module.sys.repository;
|
||||
|
||||
import com.smart.module.sys.entity.SysRole;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
/**
|
||||
* sys_role Repository
|
||||
*/
|
||||
@Repository //CRUD
|
||||
public interface SysRoleRepository extends JpaRepository<SysRole, Long> {
|
||||
}
|
||||
|
@ -0,0 +1,13 @@
|
||||
package com.smart.module.sys.repository;
|
||||
|
||||
import com.smart.module.sys.entity.SysUser;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
/**
|
||||
* sys_user Repository
|
||||
*/
|
||||
@Repository //CRUD
|
||||
public interface SysUserRepository extends JpaRepository<SysUser, Long> {
|
||||
}
|
||||
|
@ -0,0 +1,13 @@
|
||||
package com.smart.module.sys.repository;
|
||||
|
||||
import com.smart.module.sys.entity.SysUserRole;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
/**
|
||||
* sys_user_role Repository
|
||||
*/
|
||||
@Repository //CRUD
|
||||
public interface SysUserRoleRepository extends JpaRepository<SysUserRole, Long> {
|
||||
}
|
||||
|
@ -0,0 +1,45 @@
|
||||
package com.smart.module.sys.service;
|
||||
|
||||
import com.smart.common.model.Result;
|
||||
import com.smart.module.sys.entity.SysConfig;
|
||||
|
||||
/**
|
||||
* 配置管理
|
||||
*/
|
||||
public interface SysConfigService {
|
||||
|
||||
/**
|
||||
* 保存配置信息
|
||||
* @param config 配置对象
|
||||
* @return 返回保存结果
|
||||
*/
|
||||
Result save(SysConfig config);
|
||||
|
||||
/**
|
||||
* 根据ID获取配置信息
|
||||
* @param id 配置ID
|
||||
* @return 返回配置信息结果
|
||||
*/
|
||||
Result get(Long id);
|
||||
|
||||
/**
|
||||
* 根据ID删除配置信息
|
||||
* @param id 配置ID
|
||||
* @return 返回删除结果
|
||||
*/
|
||||
Result delete(Long id);
|
||||
|
||||
/**
|
||||
* 获取配置信息列表
|
||||
* @param config 查询条件
|
||||
* @return 返回配置信息列表结果
|
||||
*/
|
||||
Result list(SysConfig config);
|
||||
|
||||
/**
|
||||
* 根据配置键获取配置值
|
||||
* @param key 配置键
|
||||
* @return 返回配置值
|
||||
*/
|
||||
Object getByKey(String key);
|
||||
}
|
@ -0,0 +1,45 @@
|
||||
package com.smart.module.sys.service;
|
||||
|
||||
import com.smart.common.model.Result;
|
||||
import com.smart.module.sys.entity.SysInterface;
|
||||
|
||||
/**
|
||||
* 接口管理
|
||||
*/
|
||||
public interface SysInterfaceService {
|
||||
|
||||
/**
|
||||
* 保存接口信息
|
||||
* @param entity 接口对象
|
||||
* @return 返回保存结果
|
||||
*/
|
||||
Result save(SysInterface entity);
|
||||
|
||||
/**
|
||||
* 根据ID获取接口信息
|
||||
* @param id 接口ID
|
||||
* @return 返回接口信息结果
|
||||
*/
|
||||
Result get(Long id);
|
||||
|
||||
/**
|
||||
* 根据ID删除接口信息
|
||||
* @param id 接口ID
|
||||
* @return 返回删除结果
|
||||
*/
|
||||
Result delete(Long id);
|
||||
|
||||
/**
|
||||
* 获取接口信息列表
|
||||
* @param entity 查询条件
|
||||
* @return 返回接口信息列表结果
|
||||
*/
|
||||
Result list(SysInterface entity);
|
||||
|
||||
/**
|
||||
* 根据条件查询接口信息
|
||||
* @param entity 查询条件
|
||||
* @return 返回接口信息查询结果
|
||||
*/
|
||||
Result query(SysInterface entity);
|
||||
}
|
@ -0,0 +1,133 @@
|
||||
package com.smart.module.sys.service.impl;
|
||||
|
||||
import com.smart.common.constant.SystemConstant;
|
||||
import com.smart.common.dynamicquery.DynamicQuery;
|
||||
import com.smart.common.model.PageBean;
|
||||
import com.smart.common.model.Result;
|
||||
import com.smart.common.util.DateUtils;
|
||||
import com.smart.common.util.ShiroUtils;
|
||||
import com.smart.module.sys.entity.SysInterface;
|
||||
import com.smart.module.sys.repository.SysInterfaceRepository;
|
||||
import com.smart.module.sys.service.SysInterfaceService;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.data.domain.PageRequest;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@Service // 表明该类是一个Service组件
|
||||
public class SysInterfaceServiceImpl implements SysInterfaceService {
|
||||
|
||||
@Autowired // 自动装配DynamicQuery对象
|
||||
private DynamicQuery dynamicQuery;
|
||||
@Autowired // 自动装配SysInterfaceRepository对象
|
||||
private SysInterfaceRepository sysInterfaceRepository;
|
||||
|
||||
/**
|
||||
* 保存接口信息
|
||||
* @param entity
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class) // 添加事务注解,当出现异常时进行回滚
|
||||
public Result save(SysInterface entity) {
|
||||
String nativeSql = "SELECT * FROM sys_interface WHERE type=?";
|
||||
SysInterface sysInterface = dynamicQuery.nativeQuerySingleResult(
|
||||
SysInterface.class,nativeSql,new Object[]{entity.getType()});
|
||||
if(sysInterface!=null){
|
||||
if(!entity.getId().equals(sysInterface.getId())){
|
||||
return Result.error("配置类型重复");
|
||||
}
|
||||
}else{
|
||||
entity.setGmtCreate(DateUtils.getTimestamp()); // 设置接口信息的创建时间
|
||||
}
|
||||
entity.setUserIdCreate(ShiroUtils.getUserId()); // 设置创建接口信息的用户ID
|
||||
sysInterfaceRepository.saveAndFlush(entity); // 保存接口信息并立即刷新到数据库
|
||||
return Result.ok("保存成功");
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据ID获取接口信息
|
||||
* @param id
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public Result get(Long id) {
|
||||
SysInterface entity = sysInterfaceRepository.getOne(id); // 根据ID从数据库中获取接口信息
|
||||
return Result.ok(entity);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据ID删除接口信息
|
||||
* @param id
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public Result delete(Long id) {
|
||||
sysInterfaceRepository.deleteById(id); // 根据ID删除接口信息
|
||||
return Result.ok("删除成功");
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取接口信息列表
|
||||
* @param entity
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public Result list(SysInterface entity) {
|
||||
String nativeSql = "SELECT COUNT(*) FROM sys_interface "; // 统计接口信息的总数
|
||||
nativeSql += common(entity); // 根据条件构建通用的SQL语句片段
|
||||
Long count = dynamicQuery.nativeQueryCount(nativeSql); // 使用DynamicQuery执行原生SQL查询语句得到结果
|
||||
PageBean<SysInterface> data = new PageBean<>();
|
||||
if(count>0){
|
||||
nativeSql = "SELECT * FROM sys_interface "; // 查询接口信息列表
|
||||
nativeSql += common(entity); // 根据条件构建通用的SQL语句片段
|
||||
nativeSql += "ORDER BY gmt_create desc"; // 按创建时间降序排序
|
||||
Pageable pageable = PageRequest.of(entity.getPageNo(),entity.getPageSize()); // 创建分页请求对象
|
||||
List<SysInterface> list = dynamicQuery.nativeQueryPagingList(SysInterface.class,pageable,nativeSql); // 使用DynamicQuery执行原生SQL查询语句得到分页结果
|
||||
data = new PageBean(list,count); // 构建分页数据对象
|
||||
}
|
||||
return Result.ok(data);
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据接口类型获取接口数据
|
||||
* @param entity
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
@Transactional(readOnly = true)
|
||||
public Result query(SysInterface entity) {
|
||||
SysInterface sysInterface = sysInterfaceRepository.getByType(entity.getType()); // 根据类型从数据库中获取接口信息
|
||||
if(sysInterface!=null){
|
||||
if(sysInterface.getStatus().shortValue() == SystemConstant.StatusType.ENABLE.getValue()){ // 判断接口是否启用
|
||||
String query = sysInterface.getQuery(); // 获取接口的查询语句
|
||||
Object[] params = null;
|
||||
if(StringUtils.isNotBlank(entity.getParams())){
|
||||
params = entity.getParams().split(";"); // 解析参数字符串为数组
|
||||
}
|
||||
List<Map<String,Object>> list = dynamicQuery.nativeQueryListMap(query,params); // 使用DynamicQuery执行原生SQL查询语句得到结果
|
||||
return Result.ok(list);
|
||||
}else{
|
||||
return Result.error("接口已被禁用");
|
||||
}
|
||||
}else{
|
||||
return Result.error("接口类型不存在");
|
||||
}
|
||||
}
|
||||
|
||||
public String common(SysInterface entity){
|
||||
String description = entity.getDescription(); // 获取接口信息的描述
|
||||
String commonSql = "";
|
||||
if(StringUtils.isNotBlank(description)){
|
||||
commonSql += "WHERE type like '"+description+"%' "; // 根据描述模糊查询type字段
|
||||
commonSql += "OR name like '"+description+"%' "; // 根据描述模糊查询name字段
|
||||
}
|
||||
return commonSql;
|
||||
}
|
||||
}
|
@ -0,0 +1,50 @@
|
||||
package com.smart.module.sys.service.impl;
|
||||
|
||||
import com.smart.common.dynamicquery.DynamicQuery;
|
||||
import com.smart.common.model.PageBean;
|
||||
import com.smart.common.model.Result;
|
||||
import com.smart.module.sys.entity.SysLog;
|
||||
import com.smart.module.sys.service.SysLogService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.data.domain.PageRequest;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Service // 表明该类是一个Service组件
|
||||
public class SysLogServiceImpl implements SysLogService {
|
||||
|
||||
@Autowired // 自动装配DynamicQuery对象
|
||||
private DynamicQuery dynamicQuery;
|
||||
|
||||
/**
|
||||
* 获取日志信息列表
|
||||
* @param log
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public Result list(SysLog log) {
|
||||
String nativeSql = "SELECT COUNT(*) FROM sys_log "; // 统计日志信息的总数
|
||||
Long count = dynamicQuery.nativeQueryCount(nativeSql); // 使用DynamicQuery执行原生SQL查询语句得到结果
|
||||
PageBean<SysLog> data = new PageBean<>();
|
||||
if(count>0){
|
||||
nativeSql = "SELECT * FROM sys_log ORDER BY gmt_create desc"; // 查询日志信息列表
|
||||
Pageable pageable = PageRequest.of(log.getPageNo(),log.getPageSize()); // 创建分页请求对象
|
||||
List<SysLog> list = dynamicQuery.nativeQueryPagingList(SysLog.class,pageable,nativeSql); // 使用DynamicQuery执行原生SQL查询语句得到分页结果
|
||||
data = new PageBean(list,count); // 构建分页数据对象
|
||||
}
|
||||
return Result.ok(data);
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存日志信息
|
||||
* @param log
|
||||
*/
|
||||
@Override
|
||||
@Transactional(rollbackFor=Exception.class) // 添加事务注解,当出现异常时进行回滚
|
||||
public void save(SysLog log) {
|
||||
dynamicQuery.save(log); // 保存日志信息到数据库
|
||||
}
|
||||
}
|
@ -0,0 +1,154 @@
|
||||
package com.smart.module.sys.service.impl;
|
||||
|
||||
import com.smart.common.dynamicquery.DynamicQuery;
|
||||
import com.smart.common.model.PageBean;
|
||||
import com.smart.common.model.Result;
|
||||
import com.smart.common.util.DateUtils;
|
||||
import com.smart.common.util.ShiroUtils;
|
||||
import com.smart.module.sys.entity.SysRole;
|
||||
import com.smart.module.sys.entity.SysRoleMenu;
|
||||
import com.smart.module.sys.entity.SysRoleOrg;
|
||||
import com.smart.module.sys.repository.SysRoleRepository;
|
||||
import com.smart.module.sys.service.SysRoleService;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.data.domain.PageRequest;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Service
|
||||
public class SysRoleServiceImpl implements SysRoleService {
|
||||
|
||||
@Autowired
|
||||
private DynamicQuery dynamicQuery; // 动态SQL查询工具
|
||||
|
||||
@Autowired
|
||||
private SysRoleRepository sysRoleRepository; // 角色仓库
|
||||
|
||||
// 查询角色列表并分页
|
||||
@Override
|
||||
public Result list(SysRole role) {
|
||||
String nativeSql = "SELECT COUNT(*) FROM sys_role ";
|
||||
nativeSql += common(role); // 构建通用SQL查询条件
|
||||
Long count = dynamicQuery.nativeQueryCount(nativeSql); // 统计记录总数
|
||||
PageBean<SysRole> data = new PageBean<>(); // 创建一个分页数据对象
|
||||
if(count>0){
|
||||
nativeSql = "SELECT * FROM sys_role ";
|
||||
nativeSql += common(role); // 构建通用SQL查询条件
|
||||
nativeSql += "ORDER BY gmt_create desc ";
|
||||
Pageable pageable = PageRequest.of(role.getPageNo(),role.getPageSize()); // 构建分页参数
|
||||
List<SysRole> list = dynamicQuery.nativeQueryPagingList(SysRole.class, pageable, nativeSql); // 分页查询角色列表
|
||||
data = new PageBean(list, count); // 将分页数据放入PageBean对象中
|
||||
}
|
||||
return Result.ok(data); // 返回结果
|
||||
}
|
||||
|
||||
// 构建通用SQL查询条件
|
||||
public String common(SysRole role){
|
||||
String description = role.getDescription();
|
||||
String commonSql = "";
|
||||
if(StringUtils.isNotBlank(description)){
|
||||
commonSql += "WHERE role_name like '"+description+"%' ";
|
||||
commonSql += "OR role_sign like '"+description+"%' ";
|
||||
}
|
||||
return commonSql;
|
||||
}
|
||||
|
||||
// 查询所有角色
|
||||
@Override
|
||||
public Result select() {
|
||||
String nativeSql = "SELECT * FROM sys_role";
|
||||
List<SysRole> list = dynamicQuery.query(SysRole.class, nativeSql, new Object[]{});
|
||||
return Result.ok(list);
|
||||
}
|
||||
|
||||
// 保存角色信息
|
||||
@Override
|
||||
@Transactional
|
||||
public Result save(SysRole role) {
|
||||
String nativeSql = "SELECT * FROM sys_role WHERE role_sign=?";
|
||||
SysRole sysRole = dynamicQuery.nativeQuerySingleResult(SysRole.class, nativeSql, new Object[]{role.getRoleSign()});
|
||||
if(sysRole!=null){
|
||||
if(!sysRole.getRoleSign().equals(role.getRoleSign())){
|
||||
return Result.error("角色账号重复");
|
||||
}
|
||||
}else{
|
||||
role.setGmtCreate(DateUtils.getTimestamp()); // 设置创建时间
|
||||
}
|
||||
role.setGmtModified(DateUtils.getTimestamp()); // 设置修改时间
|
||||
role.setOrgId((long)-1); // 设置组织ID
|
||||
role.setUserIdCreate(ShiroUtils.getUserId()); // 设置创建人的用户ID
|
||||
sysRoleRepository.saveAndFlush(role); // 保存角色信息
|
||||
return Result.ok("保存成功");
|
||||
}
|
||||
|
||||
// 删除角色
|
||||
@Override
|
||||
@Transactional(rollbackFor=Exception.class)
|
||||
public Result delete(Long roleId) {
|
||||
String nativeSql = "DELETE FROM sys_role_menu WHERE role_id=?";
|
||||
dynamicQuery.nativeExecuteUpdate(nativeSql,new Object[]{roleId}); // 删除角色与菜单的关联记录
|
||||
nativeSql = "DELETE FROM sys_role WHERE role_id=?";
|
||||
dynamicQuery.nativeExecuteUpdate(nativeSql,new Object[]{roleId}); // 删除角色记录
|
||||
nativeSql = "DELETE FROM sys_user_role WHERE role_id=?";
|
||||
dynamicQuery.nativeExecuteUpdate(nativeSql,new Object[]{roleId}); // 删除用户与角色的关联记录
|
||||
return Result.ok("删除成功");
|
||||
}
|
||||
|
||||
// 获取角色所关联的菜单信息
|
||||
@Override
|
||||
public Result getMenu(Long roleId) {
|
||||
String nativeSql = "SELECT menu_id FROM sys_role_menu WHERE role_id=?";
|
||||
List<String> list = dynamicQuery.query(nativeSql,new Object[]{roleId});
|
||||
return Result.ok(list);
|
||||
}
|
||||
|
||||
// 保存角色与菜单的关联关系
|
||||
@Override
|
||||
@Transactional(rollbackFor=Exception.class)
|
||||
public Result saveMenu(SysRole role) {
|
||||
Long roleId = role.getRoleId();
|
||||
String nativeSql = "DELETE FROM sys_role_menu WHERE role_id=?";
|
||||
dynamicQuery.nativeExecuteUpdate(nativeSql,new Object[]{roleId}); // 先删除角色与菜单的关联记录
|
||||
List<Long> menuIdList = role.getMenuIdList();
|
||||
if(menuIdList!=null){
|
||||
menuIdList.forEach(menuId->{
|
||||
SysRoleMenu roleMenu = new SysRoleMenu();
|
||||
roleMenu.setMenuId(menuId);
|
||||
roleMenu.setRoleId(roleId);
|
||||
dynamicQuery.save(roleMenu); // 保存角色与菜单的关联记录
|
||||
});
|
||||
}
|
||||
return Result.ok("保存成功");
|
||||
}
|
||||
|
||||
// 获取角色所关联的组织信息
|
||||
@Override
|
||||
public Result getOrg(Long roleId) {
|
||||
String nativeSql = "SELECT org_id FROM sys_role_org WHERE role_id=?";
|
||||
List<String> list = dynamicQuery.query(nativeSql,new Object[]{roleId});
|
||||
return Result.ok(list);
|
||||
}
|
||||
|
||||
// 保存角色与组织的关联关系
|
||||
@Override
|
||||
@Transactional(rollbackFor=Exception.class)
|
||||
public Result saveOrg(SysRole role) {
|
||||
Long roleId = role.getRoleId();
|
||||
String nativeSql = "DELETE FROM sys_role_org WHERE role_id=?";
|
||||
dynamicQuery.nativeExecuteUpdate(nativeSql,new Object[]{roleId}); // 先删除角色与组织的关联记录
|
||||
List<Long> orgIdList = role.getOrgIdList();
|
||||
if(orgIdList!=null){
|
||||
orgIdList.forEach(orgId->{
|
||||
SysRoleOrg roleOrg = new SysRoleOrg();
|
||||
roleOrg.setOrgId(orgId);
|
||||
roleOrg.setRoleId(roleId);
|
||||
dynamicQuery.save(roleOrg); // 保存角色与组织的关联记录
|
||||
});
|
||||
}
|
||||
return Result.ok("保存成功");
|
||||
}
|
||||
}
|
@ -0,0 +1,57 @@
|
||||
package com.smart.module.sys.web; // 定义了该类所在的包名
|
||||
|
||||
import com.smart.common.model.Result;
|
||||
import com.smart.module.sys.entity.SysConfig;
|
||||
import com.smart.module.sys.service.SysConfigService;
|
||||
import org.apache.shiro.authz.annotation.RequiresRoles;
|
||||
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.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
/**
|
||||
* 参数设置
|
||||
*/
|
||||
@RestController // 声明该类为一个 RESTful 风格的控制器
|
||||
@RequestMapping("/sys/config") // 指定基本的请求路径为 "/sys/config"
|
||||
public class ConfigController {
|
||||
|
||||
@Autowired
|
||||
private SysConfigService sysConfigService; // 使用自动装配特性将 SysConfigService 注入到该类中
|
||||
|
||||
/**
|
||||
* 参数列表
|
||||
*/
|
||||
@PostMapping("/list") // 处理 HTTP POST 请求,请求路径为 "/list"
|
||||
public Result list(SysConfig config){ // 接收一个 SysConfig 对象作为参数
|
||||
return sysConfigService.list(config); // 调用 SysConfigService 的 list 方法,传入 config 参数,并返回结果
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取
|
||||
*/
|
||||
@PostMapping("/get") // 处理 HTTP POST 请求,请求路径为 "/get"
|
||||
public Result get(Long id){ // 接收一个 Long 类型的参数 id
|
||||
return sysConfigService.get(id); // 调用 SysConfigService 的 get 方法,传入 id 参数,并返回结果
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存
|
||||
*/
|
||||
@PostMapping("/save") // 处理 HTTP POST 请求,请求路径为 "/save"
|
||||
@RequiresRoles("admin") // 需要具有 "admin" 角色才能访问该方法
|
||||
public Result save(@RequestBody SysConfig config){ // 使用 RequestBody 注解将请求体中的数据绑定到 SysConfig 对象上
|
||||
return sysConfigService.save(config); // 调用 SysConfigService 的 save 方法,传入 config 参数,并返回结果
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除
|
||||
*/
|
||||
@PostMapping("/delete") // 处理 HTTP POST 请求,请求路径为 "/delete"
|
||||
@RequiresRoles("admin") // 需要具有 "admin" 角色才能访问该方法
|
||||
public Result delete(Long id){ // 接收一个 Long 类型的参数 id
|
||||
return sysConfigService.delete(id); // 调用 SysConfigService 的 delete 方法,传入 id 参数,并返回结果
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,29 @@
|
||||
package com.smart.module.sys.web;
|
||||
|
||||
import com.smart.common.model.Result;
|
||||
import com.smart.module.sys.entity.SysLog;
|
||||
import com.smart.module.sys.service.SysLogService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
/**
|
||||
* 日志管理
|
||||
*/
|
||||
@RestController // 声明该类为一个 RESTful 风格的控制器
|
||||
@RequestMapping("/sys/log") // 指定基本的请求路径为 "/sys/log"
|
||||
public class LogController {
|
||||
|
||||
@Autowired
|
||||
private SysLogService sysLogService; // 使用自动装配特性将 SysLogService 注入到该类中
|
||||
|
||||
/**
|
||||
* 日志列表
|
||||
*/
|
||||
@PostMapping("/list") // 处理 HTTP POST 请求,请求路径为 "/list"
|
||||
public Result list(SysLog log){ // 接收一个 SysLog 对象作为参数
|
||||
return sysLogService.list(log); // 调用 SysLogService 的 list 方法,传入 log 参数,并返回结果
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,66 @@
|
||||
package com.smart.module.sys.web;
|
||||
|
||||
|
||||
import com.smart.common.model.Result;
|
||||
import com.smart.common.util.MD5Utils;
|
||||
import com.smart.common.util.ShiroUtils;
|
||||
import com.smart.module.sys.entity.SysUser;
|
||||
import com.smart.module.sys.service.SysUserService;
|
||||
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.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 个人设置
|
||||
*/
|
||||
@RestController // 声明该类为一个控制器类,同时每个方法的返回值都会被转换成 JSON 格式的响应体
|
||||
@RequestMapping("/member") // 指定基本的请求路径为 "/member"
|
||||
public class MemberController {
|
||||
|
||||
@Autowired
|
||||
private SysUserService sysUserService; // 使用自动装配特性将 SysUserService 注入到该类中
|
||||
|
||||
/**
|
||||
* 修改密码
|
||||
* @param user 用户信息
|
||||
* @return 返回结果信息
|
||||
*/
|
||||
@PostMapping("/updatePwd") // 处理 HTTP POST 请求,请求路径为 "/updatePwd"
|
||||
public Result updatePwd(@RequestBody SysUser user){
|
||||
SysUser entity = ShiroUtils.getUserEntity(); // 获取当前登录用户信息
|
||||
String password = MD5Utils.encrypt(entity.getUsername(),user.getOldPassword()); // 对旧密码进行加密
|
||||
if(entity.getPassword().equals(password)){ // 判断旧密码是否正确
|
||||
entity.setPassword(user.getPassword()); // 更新用户的密码
|
||||
return sysUserService.updatePwd(entity); // 调用系统用户服务更新密码
|
||||
}else{
|
||||
return Result.error("原密码不正确"); // 返回错误结果
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取当前用户信息
|
||||
* @return 当前用户信息
|
||||
*/
|
||||
@PostMapping("/info") // 处理 HTTP POST 请求,请求路径为 "/info"
|
||||
public Result info(){
|
||||
return sysUserService.get(ShiroUtils.getUserId()); // 调用系统用户服务获取当前用户信息
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新用户信息
|
||||
* @param user 用户信息
|
||||
* @return 返回结果信息
|
||||
*/
|
||||
@PostMapping("/update") // 处理 HTTP POST 请求,请求路径为 "/update"
|
||||
public Result update(@RequestBody SysUser user){
|
||||
SysUser entity = ShiroUtils.getUserEntity(); // 获取当前登录用户信息
|
||||
entity.setEmail(user.getEmail()); // 更新用户的邮箱
|
||||
entity.setMobile(user.getMobile()); // 更新用户的手机号码
|
||||
entity.setNickname(user.getNickname()); // 更新用户的昵称
|
||||
return sysUserService.update(user); // 调用系统用户服务更新用户信息
|
||||
}
|
||||
}
|
@ -0,0 +1,85 @@
|
||||
package com.smart.module.sys.web;
|
||||
|
||||
import com.smart.common.model.Result;
|
||||
import com.smart.common.util.ShiroUtils;
|
||||
import com.smart.module.sys.entity.SysMenu;
|
||||
import com.smart.module.sys.repository.SysMenuRepository;
|
||||
import com.smart.module.sys.service.SysMenuService;
|
||||
import org.apache.shiro.authz.annotation.RequiresRoles;
|
||||
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.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 菜单管理
|
||||
*/
|
||||
@RestController // 声明该类为一个控制器类,同时每个方法的返回值都会被转换成 JSON 格式的响应体
|
||||
@RequestMapping("/sys/menu") // 指定基本的请求路径为 "/sys/menu"
|
||||
public class MenuController {
|
||||
|
||||
@Autowired
|
||||
private SysMenuService sysMenuService; // 使用自动装配特性将 SysMenuService 注入到该类中
|
||||
|
||||
@Autowired
|
||||
private SysMenuRepository sysMenuRepository; // 使用自动装配特性将 SysMenuRepository 注入到该类中
|
||||
|
||||
/**
|
||||
* 列表
|
||||
*/
|
||||
@RequestMapping("/list") // 处理 HTTP 请求,请求路径为 "/list"
|
||||
public Result list(SysMenu menu){
|
||||
return sysMenuService.list(menu); // 调用系统菜单服务获取菜单列表
|
||||
}
|
||||
|
||||
/**
|
||||
* 树结构
|
||||
*/
|
||||
@RequestMapping("/select") // 处理 HTTP 请求,请求路径为 "/select"
|
||||
@RequiresRoles("admin") // 需要 "admin" 角色才能访问该方法
|
||||
public Result select(Long parentId){
|
||||
List<SysMenu> list = sysMenuService.select(parentId); // 获取指定父菜单的子菜单列表
|
||||
return Result.ok(list); // 返回结果列表
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存
|
||||
*/
|
||||
@PostMapping("/save") // 处理 HTTP POST 请求,请求路径为 "/save"
|
||||
@RequiresRoles("admin") // 需要 "admin" 角色才能访问该方法
|
||||
public Result save(@RequestBody SysMenu menu){
|
||||
sysMenuRepository.saveAndFlush(menu); // 保存更新菜单信息
|
||||
return Result.ok("保存成功"); // 返回保存成功的结果
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除
|
||||
*/
|
||||
@PostMapping("/delete") // 处理 HTTP POST 请求,请求路径为 "/delete"
|
||||
@RequiresRoles("admin") // 需要 "admin" 角色才能访问该方法
|
||||
public Result delete(Long menuId){
|
||||
return sysMenuService.delete(menuId); // 调用系统菜单服务删除指定菜单
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 获取菜单
|
||||
*/
|
||||
@RequestMapping("/getByUser") // 处理 HTTP 请求,请求路径为 "/getByUser"
|
||||
public List<SysMenu> getByUser(){
|
||||
return sysMenuService.getByUserId(ShiroUtils.getUserId()); // 获取当前登录用户的菜单列表
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 列表
|
||||
*/
|
||||
@RequestMapping("/drop") // 处理 HTTP 请求,请求路径为 "/drop"
|
||||
@RequiresRoles("admin") // 需要 "admin" 角色才能访问该方法
|
||||
public Result drop(Long parentId,Long menuId){
|
||||
return sysMenuService.drop(parentId,menuId); // 获取指定父菜单下的子菜单及子菜单的子菜单列表
|
||||
}
|
||||
}
|
@ -0,0 +1,56 @@
|
||||
package com.smart.module.sys.web;
|
||||
|
||||
import com.smart.common.model.Result;
|
||||
import com.smart.module.sys.entity.SysOrg;
|
||||
import com.smart.module.sys.service.SysOrgService;
|
||||
import org.apache.shiro.authz.annotation.RequiresRoles;
|
||||
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.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
/**
|
||||
* 机构管理
|
||||
*/
|
||||
@RestController // 声明该类为一个控制器类,同时每个方法的返回值都会被转换成 JSON 格式的响应体
|
||||
@RequestMapping("/sys/org") // 指定基本的请求路径为 "/sys/org"
|
||||
public class OrgController {
|
||||
|
||||
@Autowired
|
||||
private SysOrgService sysOrgService; // 使用自动装配特性将 SysOrgService 注入到该类中
|
||||
|
||||
/**
|
||||
* 机构列表
|
||||
*/
|
||||
@PostMapping("/list") // 处理 HTTP POST 请求,请求路径为 "/list"
|
||||
public Result list(SysOrg sysOrg){
|
||||
return sysOrgService.list(sysOrg); // 调用系统机构服务获取机构列表
|
||||
}
|
||||
|
||||
/**
|
||||
* 树结构
|
||||
*/
|
||||
@RequestMapping("/select") // 处理 HTTP 请求,请求路径为 "/select"
|
||||
public Result select(Long parentId){
|
||||
return sysOrgService.select(parentId); // 获取指定父机构的子机构列表
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存
|
||||
*/
|
||||
@PostMapping("/save") // 处理 HTTP POST 请求,请求路径为 "/save"
|
||||
@RequiresRoles("admin") // 需要 "admin" 角色才能访问该方法
|
||||
public Result save(@RequestBody SysOrg org){
|
||||
return sysOrgService.save(org); // 保存更新机构信息
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除
|
||||
*/
|
||||
@PostMapping("/delete") // 处理 HTTP POST 请求,请求路径为 "/delete"
|
||||
@RequiresRoles("admin") // 需要 "admin" 角色才能访问该方法
|
||||
public Result delete(Long orgId){
|
||||
return sysOrgService.delete(orgId); // 调用系统机构服务删除指定机构
|
||||
}
|
||||
}
|
@ -0,0 +1,98 @@
|
||||
package com.smart.module.sys.web;
|
||||
|
||||
import com.smart.common.model.Result;
|
||||
import com.smart.module.sys.entity.SysRole;
|
||||
import com.smart.module.sys.service.SysRoleService;
|
||||
import org.apache.shiro.authz.annotation.RequiresRoles;
|
||||
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.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
/**
|
||||
* 角色管理
|
||||
*/
|
||||
@RestController // 声明该类为一个控制器类,同时每个方法的返回值都会被转换成 JSON 格式的响应体
|
||||
@RequestMapping("/sys/role") // 指定基本的请求路径为 "/sys/role"
|
||||
public class RoleController {
|
||||
|
||||
@Autowired
|
||||
private SysRoleService sysRoleService; // 使用自动装配特性将 SysRoleService 注入到该类中
|
||||
|
||||
/**
|
||||
* 角色列表
|
||||
*/
|
||||
@PostMapping("/list") // 处理 HTTP POST 请求,请求路径为 "/list"
|
||||
public Result list(SysRole role){
|
||||
return sysRoleService.list(role); // 调用系统角色服务获取角色列表
|
||||
}
|
||||
|
||||
/**
|
||||
* 角色选择
|
||||
*/
|
||||
@PostMapping("/select") // 处理 HTTP POST 请求,请求路径为 "/select"
|
||||
public Result select(){
|
||||
return sysRoleService.select(); // 获取所有角色列表
|
||||
}
|
||||
|
||||
/**
|
||||
* 角色选择
|
||||
*/
|
||||
@PostMapping("/selectByUser") // 处理 HTTP POST 请求,请求路径为 "/selectByUser"
|
||||
public Result selectByUser(){
|
||||
return sysRoleService.select(); // 根据用户获取对应的角色列表
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存
|
||||
*/
|
||||
@PostMapping("/save") // 处理 HTTP POST 请求,请求路径为 "/save"
|
||||
@RequiresRoles("admin") // 需要 "admin" 角色才能访问该方法
|
||||
public Result save(@RequestBody SysRole role){
|
||||
return sysRoleService.save(role); // 保存更新角色信息
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除
|
||||
*/
|
||||
@PostMapping("/delete") // 处理 HTTP POST 请求,请求路径为 "/delete"
|
||||
@RequiresRoles("admin") // 需要 "admin" 角色才能访问该方法
|
||||
public Result delete(Long roleId){
|
||||
return sysRoleService.delete(roleId); // 调用系统角色服务删除指定角色
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据角色ID获取菜单
|
||||
*/
|
||||
@PostMapping("/getMenu") // 处理 HTTP POST 请求,请求路径为 "/getMenu"
|
||||
public Result getMenu(Long roleId){
|
||||
return sysRoleService.getMenu(roleId); // 获取指定角色的菜单列表
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据角色保存菜单
|
||||
*/
|
||||
@PostMapping("/saveMenu") // 处理 HTTP POST 请求,请求路径为 "/saveMenu"
|
||||
@RequiresRoles("admin") // 需要 "admin" 角色才能访问该方法
|
||||
public Result saveMenu(@RequestBody SysRole role){
|
||||
return sysRoleService.saveMenu(role); // 保存指定角色的菜单权限信息
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据角色ID获取机构
|
||||
*/
|
||||
@PostMapping("/getOrg") // 处理 HTTP POST 请求,请求路径为 "/getOrg"
|
||||
public Result getOrg(Long roleId){
|
||||
return sysRoleService.getOrg(roleId); // 获取指定角色的机构列表
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据角色保存机构
|
||||
*/
|
||||
@PostMapping("/saveOrg") // 处理 HTTP POST 请求,请求路径为 "/saveOrg"
|
||||
@RequiresRoles("admin") // 需要 "admin" 角色才能访问该方法
|
||||
public Result saveOrg(@RequestBody SysRole role){
|
||||
return sysRoleService.saveOrg(role); // 保存指定角色的机构权限信息
|
||||
}
|
||||
}
|
@ -0,0 +1,83 @@
|
||||
package com.smart.module.sys.web;
|
||||
|
||||
import com.smart.common.model.Result;
|
||||
import com.smart.common.util.ShiroUtils;
|
||||
import com.smart.module.sys.entity.SysUser;
|
||||
import com.smart.module.sys.service.SysUserService;
|
||||
import org.apache.shiro.authz.annotation.RequiresRoles;
|
||||
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.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
/**
|
||||
* 用户管理
|
||||
*/
|
||||
@RestController // 声明该类为一个控制器类,同时每个方法的返回值都会被转换成 JSON 格式的响应体
|
||||
@RequestMapping("/sys/user") // 指定基本的请求路径为 "/sys/user"
|
||||
public class UserController {
|
||||
|
||||
@Autowired
|
||||
private SysUserService sysUserService; // 使用自动装配特性将 SysUserService 注入到该类中
|
||||
|
||||
/**
|
||||
* 用户列表
|
||||
*/
|
||||
@PostMapping("/list") // 处理 HTTP POST 请求,请求路径为 "/list"
|
||||
public Result list(SysUser user){
|
||||
return sysUserService.list(user); // 调用系统用户服务获取用户列表
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取
|
||||
*/
|
||||
@PostMapping("/get") // 处理 HTTP POST 请求,请求路径为 "/get"
|
||||
public Result get(Long userId){
|
||||
return sysUserService.get(userId); // 根据用户ID获取用户信息
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存
|
||||
*/
|
||||
@PostMapping("/save") // 处理 HTTP POST 请求,请求路径为 "/save"
|
||||
@RequiresRoles("admin") // 需要 "admin" 角色才能访问该方法
|
||||
public Result save(@RequestBody SysUser user){
|
||||
return sysUserService.save(user); // 保存更新用户信息
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除
|
||||
*/
|
||||
@PostMapping("/delete") // 处理 HTTP POST 请求,请求路径为 "/delete"
|
||||
@RequiresRoles("admin") // 需要 "admin" 角色才能访问该方法
|
||||
public Result delete(Long userId){
|
||||
return sysUserService.delete(userId); // 删除指定用户
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改密码
|
||||
*/
|
||||
@PostMapping("/updatePwd") // 处理 HTTP POST 请求,请求路径为 "/updatePwd"
|
||||
@RequiresRoles("admin") // 需要 "admin" 角色才能访问该方法
|
||||
public Result updatePwd(SysUser user){
|
||||
return sysUserService.updatePwd(user); // 修改用户密码
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取当前用户信息
|
||||
*/
|
||||
@PostMapping("/info") // 处理 HTTP POST 请求,请求路径为 "/info"
|
||||
public Result info(){
|
||||
return sysUserService.get(ShiroUtils.getUserId()); // 获取当前用户的信息
|
||||
}
|
||||
|
||||
/**
|
||||
* 更新用户信息
|
||||
*/
|
||||
@PostMapping("/update") // 处理 HTTP POST 请求,请求路径为 "/update"
|
||||
@RequiresRoles("admin") // 需要 "admin" 角色才能访问该方法
|
||||
public Result update(@RequestBody SysUser user){
|
||||
return sysUserService.update(user); // 更新用户信息
|
||||
}
|
||||
}
|
@ -0,0 +1,68 @@
|
||||
server.servlet.context-path=/
|
||||
# ???????????????????
|
||||
|
||||
server.port=8080
|
||||
# ??????????
|
||||
|
||||
server.session-timeout=60
|
||||
# ??????
|
||||
|
||||
server.tomcat.max-threads=100
|
||||
# Tomcat????????
|
||||
|
||||
server.tomcat.uri-encoding=UTF-8
|
||||
# URI????
|
||||
|
||||
server.servlet.session.tracking-modes = cookie
|
||||
server.servlet.session.cookie.http-only =true
|
||||
# ??cookie???????????cookie?http-only???true???????
|
||||
|
||||
spring.servlet.multipart.enabled =true
|
||||
spring.servlet.multipart.max-request-size=20MB
|
||||
spring.servlet.multipart.max-file-size=20MB
|
||||
# ??????????????????????????20MB
|
||||
|
||||
spring.mvc.static-path-pattern=/**
|
||||
# ???????????????????????
|
||||
|
||||
spring.aop.proxy-target-class=true
|
||||
# ??CGLIB??????AOP
|
||||
|
||||
spring.thymeleaf.mode=HTML
|
||||
# Thymeleaf?????????????HTML??
|
||||
|
||||
spring.devtools.livereload.enabled=true
|
||||
# ????????????
|
||||
|
||||
spring.thymeleaf.cache=false
|
||||
spring.thymeleaf.cache-period=0
|
||||
spring.thymeleaf.template.cache=false
|
||||
# ??Thymeleaf???????
|
||||
|
||||
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/smart-parking?characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai
|
||||
spring.datasource.username=root
|
||||
spring.datasource.password=SASAKIDS
|
||||
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
|
||||
# ??????????URL?????????????
|
||||
|
||||
spring.jpa.database = MYSQL
|
||||
# ?????????????MySQL
|
||||
|
||||
spring.jpa.show-sql = false
|
||||
spring.jpa.open-in-view = false
|
||||
# ????SQL?????OpenInView?????
|
||||
|
||||
spring.jpa.hibernate.ddl-auto = update
|
||||
# Hibernate?DDL??????????????
|
||||
|
||||
spring.jpa.hibernate.naming.implicit-strategy=org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyJpaImpl
|
||||
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
|
||||
# Hibernate??????????????????????????
|
||||
|
||||
spring.datasource.hikari.minimum-idle=3
|
||||
spring.datasource.hikari.maximum-pool-size=10
|
||||
spring.datasource.hikari.max-lifetime =30000
|
||||
# ??????????????????????????????????
|
||||
|
||||
spring.datasource.hikari.connection-test-query=SELECT 1
|
||||
# ??????????????????
|
@ -0,0 +1,3 @@
|
||||
spring:
|
||||
profiles:
|
||||
active: dev
|
Loading…
Reference in new issue