1. 修改部分bug

This commit is contained in:
ant 2024-05-22 19:17:53 +08:00
parent cef8d8f42f
commit 2a4fa24e45
58 changed files with 1352 additions and 461 deletions

View File

@ -38,6 +38,13 @@ sanyicloud -->
大区 项目(银行) 区域 人员 商户, 人员分为员工和管理等
```
mysql 授权
```sql
CREATE USER 'nacos'@'%' IDENTIFIED BY 'nacos';
grant ALL on nacos_config.* to 'nacos'@'%';
flush privileges;
```
hadoop 安装教程 https://www.cnblogs.com/jhno1/p/15218656.html
mongo 单节点开启事务 https://www.jianshu.com/p/5a03b956ce1c

View File

@ -60,6 +60,18 @@
<groupId>com.alibaba.fastjson2</groupId>
<artifactId>fastjson2</artifactId>
</dependency>
<dependency>
<groupId>org.lionsoul</groupId>
<artifactId>ip2region</artifactId>
</dependency>
</dependencies>
<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>false</filtering>
</resource>
</resources>
</build>
</project>

View File

@ -16,7 +16,7 @@ public class ResultException extends RuntimeException {
private static final long serialVersionUID = 1L;
private String msg;
private String code = "500";
private Integer code = 500;
private String detailMsg;
public ResultException(String msg) {
@ -29,7 +29,7 @@ public class ResultException extends RuntimeException {
this.msg = msg;
}
public ResultException(String msg, String code) {
public ResultException(String msg, Integer code) {
super(msg);
this.msg = msg;
this.code = code;
@ -38,20 +38,20 @@ public class ResultException extends RuntimeException {
/**
* 内部 展示, 应当仅用于 调试 todo 怎么做没想好
*/
public ResultException(String msg,String detailMsg, String code) {
public ResultException(String msg,String detailMsg, Integer code) {
super(msg);
this.msg = msg;
this.detailMsg = detailMsg;
this.code = code;
}
public ResultException(EnumUtils.CodeEnum<String, String> codeEnum){
public ResultException(EnumUtils.CodeEnum<String> codeEnum){
super(codeEnum.getMsg());
this.msg = codeEnum.getMsg();
this.code = codeEnum.getCode();
}
public ResultException(String msg, String code, Throwable e) {
public ResultException(String msg, Integer code, Throwable e) {
super(msg, e);
this.msg = msg;
this.code = code;

View File

@ -9,7 +9,7 @@ import lombok.Getter;
*/
@Getter
@AllArgsConstructor
public enum ExceptionEnum implements EnumUtils.CodeEnum<Integer, String>{
public enum ExceptionEnum implements EnumUtils.CodeEnum<String>{
RESOURCE_EXIST(3404,"资源不存在"),
APP_RESOURCE_EXIST(3404,"产品资源不存在"),
PLATFORM_RESOURCE_EXIST(3404,"平台资源不存在"),

View File

@ -12,7 +12,7 @@ public class AssertUtil {
public AssertUtil() {
}
public static void invalidate(boolean condition, EnumUtils.CodeEnum<String, String> msg) {
public static void invalidate(boolean condition, EnumUtils.CodeEnum<String> msg) {
if (condition) {
throw new ResultException(msg);
}

View File

@ -10,19 +10,185 @@ import java.util.Objects;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import cn.hutool.core.io.resource.ResourceUtil;
import cn.hutool.core.net.Ipv4Util;
import cn.hutool.core.net.NetUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.extra.servlet.ServletUtil;
import cn.hutool.http.useragent.UserAgent;
import cn.hutool.http.useragent.UserAgentUtil;
import cn.hutool.system.OsInfo;
import cn.hutool.system.SystemUtil;
import com.alibaba.fastjson2.JSON;
import org.lionsoul.ip2region.xdb.Searcher;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpHeaders;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
public class IPUtils {
private static final Logger log = LoggerFactory.getLogger(IPUtils.class);
/**
* 文件地址
*/
private static final String DB_PATE = "ip2region.xdb";
/**
* 查询对象
*/
private static final Searcher SEARCHER;
static {
// 创建一个完全基于内存的查询对象
try {
SEARCHER = Searcher.newWithBuffer(ResourceUtil.readBytes(DB_PATE));
log.info("-------------------- ip2region初始化完成 --------------------");
} catch (Exception e) {
log.error("ip2region.xdb初始化失败,地址:[{}]", DB_PATE, e);
throw new RuntimeException();
}
}
public IPUtils() {
}
/**
* <h2>获取ip地址详细信息</h2>
*
* @param ip ip地址
* @return ip所在城市
* @author 单傲
* @date 2023/1/12 14:02
*/
public static String getLocalCityInfo(String ip) {
try {
if (!ip.contains(":")) {
return NetUtil.isInnerIP(ip) ? "内网IP" : SEARCHER.search(ip).replace("|", "-").replace("-0", StrUtil.EMPTY);
} else {
return "未知IP";
}
} catch (Exception e) {
log.error("ip地址解析失败【{}】", ip, e);
}
return null;
}
/**
* <h2>获取ip地址详细信息</h2>
*
* @return ip所在城市
* @author 单傲
* @date 2023/1/12 14:02
*/
public static String getLocalCityInfo() {
return getLocalCityInfo(clientIp(getRequest()));
}
/**
* <h2>获取ip地址详细信息</h2>
*
* @return ip所在城市
* @author 单傲
* @date 2023/1/12 14:02
*/
public static String getLocalCityInfo(HttpServletRequest request) {
return getLocalCityInfo(clientIp(request));
}
/**
* <h2>获取浏览器类型</h2>
*
* @param request 请求
* @return 类型
* @author 单傲
* @date 2023/1/12 14:02
*/
public static String getBrowser(HttpServletRequest request) {
if (ObjectUtil.isEmpty(request) && StrUtil.isBlank(request.getHeader("User-Agent"))) {
return StrUtil.EMPTY;
}
UserAgent parse = UserAgentUtil.parse(request.getHeader("User-Agent"));
return parse.isMobile() ? parse.getOs().toString() : parse.getBrowser().toString();
}
public static String osName(){
UserAgent parse = UserAgentUtil.parse(Objects.requireNonNull(getRequest()).getHeader("User-Agent"));
return parse.getOs().getName();
}
/**
* <h2>是否为app</h2>
*
* @author 单傲
* @date 2023/1/12 14:02
*/
public static boolean isMobile() {
UserAgent parse = UserAgentUtil.parse(Objects.requireNonNull(getRequest()).getHeader("User-Agent"));
return parse.isMobile();
}
/**
* <h2>获取浏览器类型</h2>
*
* @return 类型
* @author 单傲
* @date 2023/1/12 14:02
*/
public static String getBrowser() {
return getBrowser(getRequest());
}
/**
* <h2>Servlet 请求属性</h2>
*
* @author 单傲
* @date 2023/3/15 10:41
*/
public static ServletRequestAttributes getRequestAttributes() {
try {
return (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
} catch (Exception e) {
return null;
}
}
/**
* <h2>获取request</h2>
*
* @author 单傲
* @date 2023/3/15 10:41
*/
public static HttpServletRequest getRequest() {
try {
return getRequestAttributes().getRequest();
} catch (Exception e) {
return null;
}
}
/**
* <h2>获取response</h2>
*
* @author 单傲
* @date 2023/3/15 10:41
*/
public static HttpServletResponse getResponse() {
try {
return getRequestAttributes().getResponse();
} catch (Exception e) {
return null;
}
}
public static String clientIp(HttpServletRequest request) {
String realIps = clientIps(request);
return realIps.contains(",") ? realIps.split(",")[0] : realIps;

View File

@ -10,7 +10,7 @@ import java.io.Serializable;
*/
@UtilityClass
public class EnumUtils {
public static <T extends CodeEnum<?, ?>> T getByCode(Serializable code, Class<T> tClass) {
public static <T extends CodeEnum<?>> T getByCode(Serializable code, Class<T> tClass) {
if (null == code){
return null;
}
@ -22,8 +22,8 @@ public class EnumUtils {
return null;
}
public interface CodeEnum<C,S extends Serializable> {
C getCode();
public interface CodeEnum<S extends Serializable> {
Integer getCode();
S getMsg();
}
}

View File

@ -24,12 +24,6 @@ public @interface SysLog {
String value() default "";
/**
* 请求参数
* 判断参数下标 -- 需要与 参数下标一一对应
* 0 - Integer.MAX_VALUE 代表 参数下标
*/
int index() default -1;
/**
* 操作类型
*/
@ -37,4 +31,9 @@ public @interface SysLog {
boolean export() default false;
/**
* 是否 入库
*/
boolean isDatabase() default true;
}

View File

@ -9,6 +9,7 @@
package com.chushang.common.log.aspect;
import cn.hutool.core.util.URLUtil;
import com.alibaba.fastjson2.JSONObject;
import com.chushang.common.core.exception.ResultException;
import com.chushang.common.core.jackson.JacksonUtils;
import com.chushang.common.core.util.IPUtils;
@ -106,7 +107,7 @@ public class SysLogAspect {
String value = syslog.value();
BusinessType businessType = syslog.businessType();
if (null != businessType){
value += businessType.getDesc();
value = businessType.getDesc() + value;
sysLogEntity.setOperationType(businessType.getCode());
}
sysLogEntity.setOperation(value);
@ -155,7 +156,11 @@ public class SysLogAspect {
// 日志类型
sysLogEntity.setType(type);
sysLogEntity.setException(ex);
sysLogService.save(sysLogEntity);
if (syslog.isDatabase()){
sysLogService.save(sysLogEntity);
}else {
log.info("log {}", JSONObject.toJSONString(sysLogEntity));
}
} catch (Exception e) {
HttpServletRequest request = ServletUtils.getRequest();
// 保存日志失败 不应当影响 正常的操作

View File

@ -36,7 +36,7 @@ public class SysLogController {
*/
@ResponseBody
@GetMapping("/list")
@RequiresPermissions("sys:log:list")
@RequiresPermissions("system:log:list")
public AjaxResult list(ListLogDTO params){
PageResult page = sysLogService.queryPage(params);
return AjaxResult.success(page);

View File

@ -9,7 +9,7 @@ import lombok.Getter;
*/
@Getter
@AllArgsConstructor
public enum LogTypeEnum implements EnumUtils.CodeEnum<Integer, String>, IEnum<Integer> {
public enum LogTypeEnum implements EnumUtils.CodeEnum<String>, IEnum<Integer> {
NORMAL(0,"正常日志"),
ERROR(9,"错误日志")
;

View File

@ -111,9 +111,12 @@ public class CommonParam implements Serializable {
CommonParam pageDomain = new CommonParam();
pageDomain.setPage(Convert.toInt(ServletUtils.getParameter(PAGE_NUM), 1));
pageDomain.setLimit(Convert.toInt(ServletUtils.getParameter(PAGE_SIZE), 10));
pageDomain.setOrderBy(ServletUtils.getParameter(ORDER_BY_COLUMN));
pageDomain.setIsAsc(ServletUtils.getParameter(IS_ASC));
pageDomain.setGroupStr(ServletUtils.getParameter(GROUP_STR));
if (StringUtils.isNotEmpty(ServletUtils.getParameter(ORDER_BY_COLUMN)))
pageDomain.setOrderBy(ServletUtils.getParameter(ORDER_BY_COLUMN));
if (StringUtils.isNotEmpty(ServletUtils.getParameter(IS_ASC)))
pageDomain.setIsAsc(ServletUtils.getParameter(IS_ASC));
if (StringUtils.isNotEmpty(ServletUtils.getParameter(GROUP_STR)))
pageDomain.setGroupStr(ServletUtils.getParameter(GROUP_STR));
return pageDomain;
}

View File

@ -26,7 +26,7 @@ public class PageResult implements Serializable {
/**
* 总记录数
*/
private int totalCount;
private int total;
/**
* 每页记录数
*/
@ -42,29 +42,29 @@ public class PageResult implements Serializable {
/**
* 列表数据
*/
private List<?> list;
private List<?> rows;
/**
* 分页
* @param list 列表数据
* @param totalCount 总记录数
* @param rows 列表数据
* @param total 总记录数
* @param pageSize 每页记录数
* @param currPage 当前页数
*/
public PageResult(List<?> list, long totalCount, long pageSize, long currPage) {
this.list = list;
this.totalCount = (int)totalCount;
public PageResult(List<?> rows, long total, long pageSize, long currPage) {
this.rows = rows;
this.total = (int)total;
this.pageSize = (int)pageSize;
this.currPage = (int)currPage;
this.totalPage = (int)Math.ceil((double)totalCount/pageSize);
this.totalPage = (int)Math.ceil((double)total/pageSize);
}
public PageResult(List<?> list, IPage<?> page) {
this.list = list;
public PageResult(List<?> rows, IPage<?> page) {
this.rows = rows;
if (null != page){
this.totalCount = (int)page.getTotal();
this.total = (int)page.getTotal();
this.pageSize = (int)page.getSize();
this.currPage = (int)page.getCurrent();
this.totalPage = (int)Math.ceil((double)totalCount/pageSize);
this.totalPage = (int)Math.ceil((double)total/pageSize);
}
}
@ -72,8 +72,8 @@ public class PageResult implements Serializable {
* 分页
*/
public PageResult(IPage<?> page) {
this.list = page.getRecords();
this.totalCount = (int)page.getTotal();
this.rows = page.getRecords();
this.total = (int)page.getTotal();
this.pageSize = (int)page.getSize();
this.currPage = (int)page.getCurrent();
this.totalPage = (int)page.getPages();

View File

@ -38,7 +38,6 @@ public class AuthLogic
{
tokenService.delLoginUser(token);
}
/**
* 检验用户是否已经登录如未登录则抛出异常
*/

View File

@ -193,4 +193,12 @@ public class TokenService
log.debug("强退 {} 个用户, userId : {}.",l, userId );
}
}
public void forcedRetreatByTokenKey(String tokenKey){
RKeys rKeys = redissonClient.getKeys();
long l = rKeys.deleteByPattern(CacheConstants.LOGIN_TOKEN_KEY + tokenKey);
if (log.isDebugEnabled()){
log.debug("强退 {} 个用户, userId : {}.",l, tokenKey.split("#")[1] );
}
}
}

View File

@ -1,5 +1,7 @@
package com.chushang.gateway.config.properties;
import lombok.Getter;
import lombok.Setter;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.context.annotation.Configuration;
@ -9,6 +11,8 @@ import org.springframework.context.annotation.Configuration;
*
* @author ruoyi
*/
@Setter
@Getter
@Configuration
@RefreshScope
@ConfigurationProperties(prefix = "security.captcha")
@ -24,23 +28,4 @@ public class CaptchaProperties
*/
private String type;
public Boolean getEnabled()
{
return enabled;
}
public void setEnabled(Boolean enabled)
{
this.enabled = enabled;
}
public String getType()
{
return type;
}
public void setType(String type)
{
this.type = type;
}
}

View File

@ -150,7 +150,7 @@ public class AuthFilter implements GlobalFilter, Ordered
}else {
token = null;
// 如果为 sanyi/job , 通过cookie 获取token
if (StringUtils.matches(newPath, List.of("/sanyi/job/**"))){
if (StringUtils.matches(newPath, List.of("/chushang/job/**"))){
HttpCookie cookie = request.getCookies().getFirst("Admin-Token");
if (ObjectUtil.isNotEmpty(cookie)){
assert cookie != null;

View File

@ -21,6 +21,8 @@ import javax.annotation.Resource;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
@ -47,44 +49,42 @@ public class ValidateCodeServiceImpl implements ValidateCodeService {
*/
@Override
public AjaxResult createCaptcha() throws ResultException {
AjaxResult ajax = AjaxResult.success();
boolean captchaOnOff = captchaProperties.getEnabled();
ajax.put("captchaOnOff", captchaOnOff);
if (!captchaOnOff) {
return ajax;
}
Map<String, Object> resultMap = new HashMap<>();
resultMap.put("captchaEnabled", captchaOnOff);
if (captchaOnOff) {
// 保存验证码信息
String uuid = IdUtils.getId(32);
String verifyKey = Constants.CAPTCHA_CODE_KEY + uuid;
// 保存验证码信息
String uuid = IdUtils.getId(32);
String verifyKey = Constants.CAPTCHA_CODE_KEY + uuid;
String capStr, code = null;
BufferedImage image = null;
String capStr, code = null;
BufferedImage image = null;
String captchaType = captchaProperties.getType();
// 生成验证码
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)) {
code = capStr = captchaProducer.createText();
image = captchaProducer.createImage(capStr);
String captchaType = captchaProperties.getType();
// 生成验证码
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)) {
code = capStr = captchaProducer.createText();
image = captchaProducer.createImage(capStr);
}
redissonClient.getBucket(verifyKey)
.set(code, Constants.CAPTCHA_EXPIRATION, TimeUnit.MINUTES);
// 转换流信息写出
FastByteArrayOutputStream os = new FastByteArrayOutputStream();
try {
assert image != null;
ImageIO.write(image, "jpg", os);
} catch (IOException e) {
return AjaxResult.error(e.getMessage());
}
resultMap.put("uuid", uuid);
resultMap.put("img", Base64.encode(os.toByteArray()));
}
redissonClient.getBucket(verifyKey)
.set(code, Constants.CAPTCHA_EXPIRATION, TimeUnit.MINUTES);
// 转换流信息写出
FastByteArrayOutputStream os = new FastByteArrayOutputStream();
try {
assert image != null;
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;
return AjaxResult.success(resultMap);
}
/**

View File

@ -100,7 +100,7 @@
<!-- </appender>-->
<!-- Level: FATAL 0 ERROR 3 WARN 4 INFO 6 DEBUG 7 -->
<root level="debug">
<root level="info">
<appender-ref ref="console"/>
<appender-ref ref="info"/>
<appender-ref ref="debug"/>

View File

@ -35,7 +35,7 @@ public class ListDictDTO {
private String isDefault;
/**
* 状态0正常 1停用
* 状态1正常 0停用
*/
private String status;
private Boolean status;
}

View File

@ -0,0 +1,15 @@
package com.chushang.system.entity.dto;
import lombok.Data;
@Data
public class ListLoginLogDTO {
private String userName;
private String ipaddr;
/**
* 登录状态
*/
private String status;
}

View File

@ -17,4 +17,7 @@ public class ListUserDTO extends CommonParam {
* 部门id
*/
private Integer deptId;
private Integer status;
private String phone;
}

View File

@ -12,7 +12,7 @@ import lombok.Getter;
*/
@Getter
@AllArgsConstructor
public enum AuthTypeEnum implements EnumUtils.CodeEnum<Integer, String>, IEnum<Integer> {
public enum AuthTypeEnum implements EnumUtils.CodeEnum<String>, IEnum<Integer> {
APP(1, "appData","项目授权", " select id from sanyi_app "),
PLATFORM(2, "platformData","平台授权", " select id from sanyi_platform "),
/**

View File

@ -1,32 +0,0 @@
package com.chushang.system.entity.enums;
import com.baomidou.mybatisplus.annotation.EnumValue;
import com.baomidou.mybatisplus.annotation.IEnum;
import com.fasterxml.jackson.annotation.JsonValue;
import com.chushang.common.core.web.EnumUtils;
import lombok.AllArgsConstructor;
import lombok.Getter;
/**
* @author by zhaowenyuan create 2022/8/18 18:25
*/
@AllArgsConstructor
@Getter
public enum DataTypeEnum implements EnumUtils.CodeEnum<Integer, String>, IEnum<Integer> {
BI(1, "bi 平台"),
;
@EnumValue
@JsonValue
private final Integer code;
private final String desc;
@Override
public Integer getValue() {
return this.code;
}
@Override
public String getMsg() {
return this.desc;
}
}

View File

@ -12,11 +12,11 @@ import lombok.Getter;
*/
@Getter
@AllArgsConstructor
public enum LoginStatusEnum implements EnumUtils.CodeEnum<Integer, String>, IEnum<Integer> {
public enum LoginStatusEnum implements IEnum<Integer> {
LOGIN_SUCCESS(0, "登录成功"),
LOGOUT_SUCCESS(1, "注销成功"),
REGISTER_SUCCESS(2, "注册成功成功"),
LOGIN_FAIL_STATUS(3, "登录失败"),
LOGOUT_SUCCESS(1, "登录失败"),
REGISTER_SUCCESS(2, "注册成功"),
LOGIN_FAIL_STATUS(3, "注销成功"),
;
@JsonValue
@ -28,9 +28,4 @@ public enum LoginStatusEnum implements EnumUtils.CodeEnum<Integer, String>, IEnu
public Integer getValue() {
return this.code;
}
@Override
public String getMsg() {
return this.desc;
}
}

View File

@ -16,7 +16,7 @@ import lombok.Getter;
*/
@AllArgsConstructor
@Getter
public enum PermTypeEnum implements EnumUtils.CodeEnum<Integer, String>, IEnum<Integer> {
public enum PermTypeEnum implements IEnum<Integer> {
ALL(0,"超级管理员 -> 查看全部"),
DEPT_AND_CHILD(1,"部门及以下数据权限"),
DEPT(2,"部门"),
@ -32,9 +32,4 @@ public enum PermTypeEnum implements EnumUtils.CodeEnum<Integer, String>, IEnum<I
public Integer getValue() {
return this.code;
}
@Override
public String getMsg() {
return this.desc;
}
}

View File

@ -69,10 +69,11 @@ public class SysDictData extends BaseEntity {
private String isDefault;
/**
* 状态0正常 1停用
* 状态1正常 0停用
* true 正常, false 停用
*/
@ExcelProperty(value = "状态", index = 8)
private String status;
private Boolean status;
/**
* 创建人

View File

@ -45,9 +45,9 @@ public class SysDictType extends BaseEntity
@ExcelProperty(value = "字典类型", index = 2)
private String dictType;
/** 状态(0正常 1停用) */
/** 状态(1正常 0停用) */
@ExcelProperty(value = "状态", index = 3)
private String status;
private Boolean status;
/**
* 创建人
*/

View File

@ -59,19 +59,19 @@ public class SysMenu extends BaseEntity {
/**
* 是否 外链 1 为内链, 0 为外链
*/
private String frame;
private Boolean frame;
/** 是否缓存1缓存 0不缓存 */
private String cache;
private Boolean cache;
/**
* 是否显示 1 显示
*/
private String visible;
private Boolean visible;
/**
* 状态 0 停用
*/
private String status;
private Boolean status;
/**
* 拥有权限

View File

@ -34,7 +34,7 @@ public class SysPost extends BaseEntity
/** 岗位序号 */
@TableId(value = "post_id", type = IdType.AUTO)
@ExcelProperty(value = "岗位序号", index = 0)
private Long postId;
private Integer postId;
/** 岗位编码 */
@ExcelProperty(value = "岗位编码", index = 1)
@ -48,9 +48,9 @@ public class SysPost extends BaseEntity
@ExcelProperty(value = "岗位排序", index = 3)
private Integer postSort;
/** 状态(0正常 1停用) */
/** 状态(1正常 0停用) */
@ExcelProperty(value = "状态", index = 4)
private String status;
private Boolean status;
/**
* 创建人

View File

@ -57,6 +57,25 @@ public class SysUser extends BaseEntity {
* 所属部门id
*/
private Integer deptId;
/**
* 头像
*/
private String avatar;
/**
* 性别
*/
private Integer gender;
/**
* 手机号
*/
private String phone;
/**
* 昵称
*/
private String email;
@TableField(value = "nick_name")
private String nickName;
/**
* 创建人角色
*/

View File

@ -0,0 +1,498 @@
/*
Navicat Premium Data Transfer
Source Server : 192.168.116.115
Source Server Type : MySQL
Source Server Version : 80027
Source Host : 192.168.116.115:3306
Source Schema : tb_order_system
Target Server Type : MySQL
Target Server Version : 80027
File Encoding : 65001
Date: 17/05/2024 14:22:18
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for sys_config
-- ----------------------------
DROP TABLE IF EXISTS `sys_config`;
CREATE TABLE `sys_config` (
`config_id` int NOT NULL AUTO_INCREMENT COMMENT '参数主键',
`config_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT '' COMMENT '参数名称',
`config_key` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT '' COMMENT '参数键名',
`config_value` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT '' COMMENT '参数键值',
`config_type` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT 'N' COMMENT '系统内置Y是 N否',
`create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT '' COMMENT '创建者',
`create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
`update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT '' COMMENT '更新者',
`update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
`remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '备注',
`version` int NULL DEFAULT 0,
`del_status` tinyint(1) NULL DEFAULT 0,
PRIMARY KEY (`config_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 5 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '参数配置表' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of sys_config
-- ----------------------------
INSERT INTO `sys_config` VALUES (1, '主框架页-默认皮肤样式名称', 'sys.index.skinName', 'skin-blue', 'Y', 'admin', '2024-05-09 14:42:10', '', NULL, '蓝色 skin-blue、绿色 skin-green、紫色 skin-purple、红色 skin-red、黄色 skin-yellow', 0, 0);
INSERT INTO `sys_config` VALUES (2, '用户管理-账号初始密码', 'sys.user.initPassword', '123456', 'Y', 'admin', '2024-05-09 14:42:10', '', NULL, '初始化密码 123456', 0, 0);
INSERT INTO `sys_config` VALUES (3, '主框架页-侧边栏主题', 'sys.index.sideTheme', 'theme-dark', 'Y', 'admin', '2024-05-09 14:42:10', '', NULL, '深色主题theme-dark浅色主题theme-light', 0, 0);
INSERT INTO `sys_config` VALUES (4, '账号自助-是否开启用户注册功能', 'sys.account.registerUser', 'false', 'Y', 'admin', '2024-05-09 14:42:10', '', NULL, '是否开启注册用户功能true开启false关闭', 0, 0);
INSERT INTO `sys_config` VALUES (5, '用户登录-黑名单列表', 'sys.login.blackIPList', '', 'Y', 'admin', '2024-05-09 14:42:10', '', NULL, '设置登录IP黑名单限制多个匹配项以;分隔,支持匹配(*通配、网段)', 0, 0);
-- ----------------------------
-- Table structure for sys_dept
-- ----------------------------
DROP TABLE IF EXISTS `sys_dept`;
CREATE TABLE `sys_dept` (
`dept_id` int NOT NULL AUTO_INCREMENT COMMENT '部门id',
`parent_dept_id` int NULL DEFAULT 0 COMMENT '父部门id',
`ancestors` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT '' COMMENT '祖级列表',
`dept_name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT '' COMMENT '部门名称',
`order_num` int NULL DEFAULT 0 COMMENT '显示顺序',
`status` tinyint(1) NULL DEFAULT 1 COMMENT '部门状态0停用 1正常',
`del_state` tinyint NULL DEFAULT 0 COMMENT '删除标志0代表存在 2代表删除',
`create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT '' COMMENT '创建者',
`create_time` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT '' COMMENT '更新者',
`update_time` datetime NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`version` bigint NULL DEFAULT 0,
PRIMARY KEY (`dept_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 200 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '部门表' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of sys_dept
-- ----------------------------
INSERT INTO `sys_dept` VALUES (200, 0, '0', '楚商', 0, 1, 0, 'admin', '2022-08-25 16:45:59', 'admin', '2024-04-29 14:44:24', 0);
-- ----------------------------
-- Table structure for sys_dict_data
-- ----------------------------
DROP TABLE IF EXISTS `sys_dict_data`;
CREATE TABLE `sys_dict_data` (
`dict_code` int NOT NULL AUTO_INCREMENT COMMENT '字典编码',
`dict_sort` int NULL DEFAULT 0 COMMENT '字典排序',
`dict_label` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT '' COMMENT '字典标签',
`dict_value` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT '' COMMENT '字典键值',
`dict_type` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT '' COMMENT '字典类型',
`css_class` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '样式属性(其他样式扩展)',
`list_class` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '表格回显样式',
`is_default` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT 'N' COMMENT '是否默认Y是 N否',
`status` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT '0' COMMENT '状态0正常 1停用',
`create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,
`update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,
`create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP,
`update_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`del_status` tinyint(1) NULL DEFAULT 0,
`version` int NULL DEFAULT 0,
PRIMARY KEY (`dict_code`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 105 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '字典数据表' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of sys_dict_data
-- ----------------------------
INSERT INTO `sys_dict_data` VALUES (1, 1, '', '0', 'sys_user_sex', '', '', 'Y', '0', NULL, NULL, NULL, NULL, 0, 0);
INSERT INTO `sys_dict_data` VALUES (2, 2, '', '1', 'sys_user_sex', '', '', 'N', '0', NULL, NULL, NULL, NULL, 0, 0);
INSERT INTO `sys_dict_data` VALUES (3, 3, '未知', '2', 'sys_user_sex', '', '', 'N', '0', NULL, NULL, NULL, NULL, 0, 0);
INSERT INTO `sys_dict_data` VALUES (4, 1, '显示', '1', 'sys_show_hide', '', 'primary', 'Y', '0', NULL, NULL, NULL, NULL, 0, 0);
INSERT INTO `sys_dict_data` VALUES (5, 2, '隐藏', '0', 'sys_show_hide', '', 'danger', 'N', '0', NULL, NULL, NULL, NULL, 0, 0);
INSERT INTO `sys_dict_data` VALUES (6, 1, '正常', '1', 'sys_normal_disable', '', 'primary', 'Y', '0', NULL, NULL, NULL, NULL, 0, 0);
INSERT INTO `sys_dict_data` VALUES (7, 2, '停用', '0', 'sys_normal_disable', '', 'danger', 'N', '0', NULL, NULL, NULL, NULL, 0, 0);
INSERT INTO `sys_dict_data` VALUES (8, 1, '正常', '1', 'sys_job_status', '', 'primary', 'Y', '0', NULL, NULL, NULL, NULL, 0, 0);
INSERT INTO `sys_dict_data` VALUES (9, 2, '暂停', '0', 'sys_job_status', '', 'danger', 'N', '0', NULL, NULL, NULL, NULL, 0, 0);
INSERT INTO `sys_dict_data` VALUES (10, 1, '默认', 'DEFAULT', 'sys_job_group', '', '', 'Y', '0', NULL, NULL, NULL, NULL, 0, 0);
INSERT INTO `sys_dict_data` VALUES (11, 2, '系统', 'SYSTEM', 'sys_job_group', '', '', 'N', '0', NULL, NULL, NULL, NULL, 0, 0);
INSERT INTO `sys_dict_data` VALUES (12, 1, '', 'Y', 'sys_yes_no', '', 'primary', 'Y', '0', NULL, NULL, NULL, NULL, 0, 0);
INSERT INTO `sys_dict_data` VALUES (13, 2, '', 'N', 'sys_yes_no', '', 'danger', 'N', '0', NULL, NULL, NULL, NULL, 0, 0);
INSERT INTO `sys_dict_data` VALUES (14, 1, '通知', '1', 'sys_notice_type', '', 'warning', 'Y', '0', NULL, NULL, NULL, NULL, 0, 0);
INSERT INTO `sys_dict_data` VALUES (15, 2, '公告', '2', 'sys_notice_type', '', 'success', 'N', '0', NULL, NULL, NULL, NULL, 0, 0);
INSERT INTO `sys_dict_data` VALUES (16, 1, '正常', '1', 'sys_notice_status', '', 'primary', 'Y', '0', NULL, NULL, NULL, NULL, 0, 0);
INSERT INTO `sys_dict_data` VALUES (17, 2, '关闭', '0', 'sys_notice_status', '', 'danger', 'N', '0', NULL, NULL, NULL, NULL, 0, 0);
INSERT INTO `sys_dict_data` VALUES (18, 1, '新增', '1', 'sys_oper_type', '', 'info', 'N', '0', NULL, NULL, NULL, NULL, 0, 0);
INSERT INTO `sys_dict_data` VALUES (19, 2, '修改', '2', 'sys_oper_type', '', 'info', 'N', '0', NULL, NULL, NULL, NULL, 0, 0);
INSERT INTO `sys_dict_data` VALUES (20, 3, '删除', '3', 'sys_oper_type', '', 'danger', 'N', '0', NULL, NULL, NULL, NULL, 0, 0);
INSERT INTO `sys_dict_data` VALUES (21, 4, '授权', '4', 'sys_oper_type', '', 'primary', 'N', '0', NULL, NULL, NULL, NULL, 0, 0);
INSERT INTO `sys_dict_data` VALUES (22, 5, '导出', '5', 'sys_oper_type', '', 'warning', 'N', '0', NULL, NULL, NULL, NULL, 0, 0);
INSERT INTO `sys_dict_data` VALUES (23, 6, '导入', '6', 'sys_oper_type', '', 'warning', 'N', '0', NULL, NULL, NULL, NULL, 0, 0);
INSERT INTO `sys_dict_data` VALUES (24, 7, '强退', '7', 'sys_oper_type', '', 'danger', 'N', '0', NULL, NULL, NULL, NULL, 0, 0);
INSERT INTO `sys_dict_data` VALUES (25, 8, '生成代码', '8', 'sys_oper_type', '', 'warning', 'N', '0', NULL, NULL, NULL, NULL, 0, 0);
INSERT INTO `sys_dict_data` VALUES (26, 9, '清空数据', '9', 'sys_oper_type', '', 'danger', 'N', '0', NULL, NULL, NULL, NULL, 0, 0);
INSERT INTO `sys_dict_data` VALUES (27, 1, '成功', '0', 'sys_common_status', '', 'primary', 'N', '0', NULL, NULL, NULL, NULL, 0, 0);
INSERT INTO `sys_dict_data` VALUES (28, 2, '失败', '1', 'sys_common_status', '', 'danger', 'N', '0', NULL, NULL, NULL, NULL, 0, 0);
INSERT INTO `sys_dict_data` VALUES (100, 1, '停用', '0', 'sys_menu_status', '', 'danger', 'N', '0', NULL, NULL, NULL, NULL, 0, 0);
INSERT INTO `sys_dict_data` VALUES (101, 2, '启用', '1', 'sys_menu_status', '', 'primary', 'Y', '0', NULL, NULL, NULL, NULL, 0, 0);
INSERT INTO `sys_dict_data` VALUES (102, 0, '缓存', '1', 'sys_cache_nocache', NULL, 'primary', 'Y', '0', NULL, NULL, NULL, NULL, 0, 0);
INSERT INTO `sys_dict_data` VALUES (103, 1, '不缓存', '0', 'sys_cache_nocache', NULL, 'danger', 'N', '0', NULL, NULL, NULL, NULL, 0, 0);
INSERT INTO `sys_dict_data` VALUES (104, 0, '内链', '1', 'sys_frame_no', NULL, 'primary', 'Y', '0', NULL, NULL, NULL, NULL, 0, 0);
INSERT INTO `sys_dict_data` VALUES (105, 1, '外链', '0', 'sys_frame_no', NULL, 'danger', 'N', '0', NULL, NULL, NULL, NULL, 0, 0);
-- ----------------------------
-- Table structure for sys_dict_type
-- ----------------------------
DROP TABLE IF EXISTS `sys_dict_type`;
CREATE TABLE `sys_dict_type` (
`dict_id` bigint NOT NULL AUTO_INCREMENT COMMENT '字典主键',
`dict_name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT '' COMMENT '字典名称',
`dict_type` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT '' COMMENT '字典类型',
`status` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT '0' COMMENT '状态0正常 1停用',
`create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT '' COMMENT '创建者',
`create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
`update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT '' COMMENT '更新者',
`update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
`remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '备注',
`version` int NULL DEFAULT 0,
`del_status` tinyint(1) NULL DEFAULT 0,
PRIMARY KEY (`dict_id`) USING BTREE,
UNIQUE INDEX `dict_type`(`dict_type` ASC) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '字典类型表' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of sys_dict_type
-- ----------------------------
-- ----------------------------
-- Table structure for sys_log
-- ----------------------------
DROP TABLE IF EXISTS `sys_log`;
CREATE TABLE `sys_log` (
`id` bigint NOT NULL AUTO_INCREMENT,
`type` smallint NULL DEFAULT NULL COMMENT '日志类型',
`remote_addr` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '操作ip',
`user_agent` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '用户代理',
`request_uri` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '请求uri',
`method` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '请求方法',
`params` varchar(5000) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '请求参数',
`time` bigint NULL DEFAULT NULL COMMENT '执行时间 毫秒',
`exception` varchar(5000) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '异常信息',
`user_id` bigint NULL DEFAULT NULL COMMENT '操作用户id',
`username` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,
`operation` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '用户操作',
`create_time` datetime NULL DEFAULT CURRENT_TIMESTAMP,
`update_time` datetime NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`del_state` tinyint(1) NULL DEFAULT 0,
`operation_type` tinyint NULL DEFAULT NULL COMMENT '操作类型',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '系统日志' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of sys_log
-- ----------------------------
-- ----------------------------
-- Table structure for sys_login_info
-- ----------------------------
DROP TABLE IF EXISTS `sys_login_info`;
CREATE TABLE `sys_login_info` (
`info_id` bigint NOT NULL AUTO_INCREMENT,
`username` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,
`status` smallint NULL DEFAULT NULL,
`ipaddr` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,
`msg` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,
`access_time` datetime NULL DEFAULT CURRENT_TIMESTAMP,
`create_time` datetime NULL DEFAULT CURRENT_TIMESTAMP,
`update_time` datetime NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`del_state` tinyint(1) NULL DEFAULT 0,
`version` bigint NULL DEFAULT 0,
PRIMARY KEY (`info_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 15 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of sys_login_info
-- ----------------------------
INSERT INTO `sys_login_info` VALUES (1, 'admin', 0, '127.0.0.1', '登录成功', '2024-05-08 10:53:33', '2024-05-08 10:53:36', '2024-05-08 10:53:36', 0, NULL);
INSERT INTO `sys_login_info` VALUES (2, 'admin', 1, '127.0.0.1', '退出成功', '2024-05-08 10:53:33', '2024-05-08 10:53:36', '2024-05-08 10:53:36', 0, NULL);
INSERT INTO `sys_login_info` VALUES (3, 'admin', 0, '127.0.0.1', '登录成功', '2024-05-08 10:58:12', '2024-05-08 10:58:15', '2024-05-08 10:58:15', 0, NULL);
INSERT INTO `sys_login_info` VALUES (4, 'admin', 1, '127.0.0.1', '退出成功', '2024-05-08 11:06:41', '2024-05-08 11:06:44', '2024-05-08 11:06:44', 0, NULL);
INSERT INTO `sys_login_info` VALUES (5, 'admin', 0, '127.0.0.1', '登录成功', '2024-05-08 11:42:47', '2024-05-08 11:42:50', '2024-05-08 11:42:50', 0, NULL);
INSERT INTO `sys_login_info` VALUES (6, 'admin', 1, '127.0.0.1', '退出成功', '2024-05-09 09:41:40', '2024-05-09 09:41:43', '2024-05-09 09:41:43', 0, NULL);
INSERT INTO `sys_login_info` VALUES (7, 'admin', 3, '127.0.0.1', '用户密码错误', '2024-05-09 09:41:52', '2024-05-09 09:41:54', '2024-05-09 09:41:54', 0, NULL);
INSERT INTO `sys_login_info` VALUES (8, 'admin', 0, '127.0.0.1', '登录成功', '2024-05-09 09:41:57', '2024-05-09 09:42:00', '2024-05-09 09:42:00', 0, NULL);
INSERT INTO `sys_login_info` VALUES (9, 'admin', 1, '127.0.0.1', '退出成功', '2024-05-09 10:54:49', '2024-05-09 10:54:52', '2024-05-09 10:54:52', 0, NULL);
INSERT INTO `sys_login_info` VALUES (10, 'admin', 0, '127.0.0.1', '登录成功', '2024-05-09 10:54:54', '2024-05-09 10:54:57', '2024-05-09 10:54:57', 0, NULL);
INSERT INTO `sys_login_info` VALUES (11, 'admin', 1, '127.0.0.1', '退出成功', '2024-05-09 11:50:34', '2024-05-09 11:50:37', '2024-05-09 11:50:37', 0, NULL);
INSERT INTO `sys_login_info` VALUES (12, 'admin', 0, '127.0.0.1', '登录成功', '2024-05-09 11:50:38', '2024-05-09 11:50:42', '2024-05-09 11:50:42', 0, NULL);
INSERT INTO `sys_login_info` VALUES (13, 'admin', 0, '127.0.0.1', '登录成功', '2024-05-10 15:24:00', '2024-05-10 15:24:04', '2024-05-10 15:24:04', 0, NULL);
INSERT INTO `sys_login_info` VALUES (14, 'admin', 0, '127.0.0.1', '登录成功', '2024-05-10 15:40:34', '2024-05-10 15:40:37', '2024-05-10 15:40:37', 0, NULL);
INSERT INTO `sys_login_info` VALUES (15, 'admin', 0, '127.0.0.1', '登录成功', '2024-05-10 15:43:01', '2024-05-10 15:43:05', '2024-05-10 15:43:05', 0, NULL);
-- ----------------------------
-- Table structure for sys_menu
-- ----------------------------
DROP TABLE IF EXISTS `sys_menu`;
CREATE TABLE `sys_menu` (
`menu_id` int NOT NULL AUTO_INCREMENT COMMENT '菜单ID',
`menu_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '菜单名称',
`parent_id` int NULL DEFAULT 0 COMMENT '父菜单ID',
`order_num` int NULL DEFAULT 0 COMMENT '显示顺序',
`path` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT '' COMMENT '路由地址',
`component` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '组件路径',
`query` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '路由参数',
`frame` tinyint(1) NULL DEFAULT 1 COMMENT '是否为外链0是 1否',
`cache` tinyint(1) NULL DEFAULT 0 COMMENT '是否缓存0缓存 1不缓存',
`menu_type` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT '' COMMENT '菜单类型M目录 C菜单 F按钮',
`visible` tinyint(1) NULL DEFAULT 0 COMMENT '菜单状态0隐藏 1显示0 false 1true',
`status` tinyint(1) NULL DEFAULT 1 COMMENT '菜单状态1正常 0停用1true 0false',
`perms` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '权限标识',
`icon` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT '#' COMMENT '菜单图标',
`create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT '' COMMENT '创建者',
`create_time` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT '' COMMENT '更新者',
`update_time` datetime NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT '' COMMENT '备注',
`del_state` tinyint(1) NULL DEFAULT 0 COMMENT '删除状态',
`version` bigint NULL DEFAULT 0,
PRIMARY KEY (`menu_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1060 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '菜单权限表' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of sys_menu
-- ----------------------------
INSERT INTO `sys_menu` VALUES (1, '系统管理', 0, 1, 'system', NULL, '', 1, 0, 'M', 1, 1, '', 'system', 'admin', '2024-05-09 14:42:09', '', '2024-05-09 16:10:01', '系统管理目录', 0, 0);
INSERT INTO `sys_menu` VALUES (2, '系统监控', 0, 2, 'monitor', NULL, '', 1, 0, 'M', 1, 1, '', 'monitor', 'admin', '2024-05-09 14:42:09', '', '2024-05-09 16:10:01', '系统监控目录', 0, 0);
INSERT INTO `sys_menu` VALUES (3, '系统工具', 0, 3, 'tool', NULL, '', 1, 0, 'M', 1, 1, '', 'tool', 'admin', '2024-05-09 14:42:09', '', '2024-05-09 16:10:01', '系统工具目录', 0, 0);
INSERT INTO `sys_menu` VALUES (4, '若依官网', 0, 4, 'http://ruoyi.vip', NULL, '', 0, 0, 'M', 1, 1, '', 'guide', 'admin', '2024-05-09 14:42:09', '', '2024-05-09 16:10:28', '若依官网地址', 1, 0);
INSERT INTO `sys_menu` VALUES (100, '用户管理', 1, 1, 'user', 'system/user/index', '', 1, 0, 'C', 1, 1, 'system:user:list', 'user', 'admin', '2024-05-09 14:42:09', '', '2024-05-09 16:10:01', '用户管理菜单', 0, 0);
INSERT INTO `sys_menu` VALUES (101, '角色管理', 1, 2, 'role', 'system/role/index', '', 1, 0, 'C', 1, 1, 'system:role:list', 'peoples', 'admin', '2024-05-09 14:42:09', '', '2024-05-09 16:10:01', '角色管理菜单', 0, 0);
INSERT INTO `sys_menu` VALUES (102, '菜单管理', 1, 3, 'menu', 'system/menu/index', '', 1, 0, 'C', 1, 1, 'system:menu:list', 'tree-table', 'admin', '2024-05-09 14:42:09', '', '2024-05-09 16:10:01', '菜单管理菜单', 0, 0);
INSERT INTO `sys_menu` VALUES (103, '部门管理', 1, 4, 'dept', 'system/dept/index', '', 1, 0, 'C', 1, 1, 'system:dept:list', 'tree', 'admin', '2024-05-09 14:42:09', '', '2024-05-09 16:10:01', '部门管理菜单', 0, 0);
INSERT INTO `sys_menu` VALUES (104, '岗位管理', 1, 5, 'post', 'system/post/index', '', 1, 0, 'C', 1, 1, 'system:post:list', 'post', 'admin', '2024-05-09 14:42:09', '', '2024-05-09 16:10:01', '岗位管理菜单', 0, 0);
INSERT INTO `sys_menu` VALUES (105, '字典管理', 1, 6, 'dict', 'system/dict/index', '', 1, 0, 'C', 1, 1, 'system:dict:list', 'dict', 'admin', '2024-05-09 14:42:09', '', '2024-05-09 16:10:01', '字典管理菜单', 0, 0);
INSERT INTO `sys_menu` VALUES (106, '参数设置', 1, 7, 'config', 'system/config/index', '', 1, 0, 'C', 1, 1, 'system:config:list', 'edit', 'admin', '2024-05-09 14:42:09', '', '2024-05-09 16:10:01', '参数设置菜单', 0, 0);
INSERT INTO `sys_menu` VALUES (107, '通知公告', 1, 8, 'notice', 'system/notice/index', '', 1, 0, 'C', 1, 1, 'system:notice:list', 'message', 'admin', '2024-05-09 14:42:09', '', '2024-05-09 16:10:01', '通知公告菜单', 0, 0);
INSERT INTO `sys_menu` VALUES (108, '日志管理', 1, 9, 'log', '', '', 1, 0, 'M', 1, 1, '', 'log', 'admin', '2024-05-09 14:42:09', '', '2024-05-09 16:10:01', '日志管理菜单', 0, 0);
INSERT INTO `sys_menu` VALUES (109, '在线用户', 2, 1, 'online', 'monitor/online/index', '', 1, 0, 'C', 1, 1, 'monitor:online:list', 'online', 'admin', '2024-05-09 14:42:09', '', '2024-05-09 16:10:01', '在线用户菜单', 0, 0);
INSERT INTO `sys_menu` VALUES (110, '定时任务', 2, 2, 'job', 'monitor/job/index', '', 1, 0, 'C', 1, 1, 'monitor:job:list', 'job', 'admin', '2024-05-09 14:42:09', '', '2024-05-09 16:10:01', '定时任务菜单', 0, 0);
INSERT INTO `sys_menu` VALUES (111, 'Sentinel控制台', 2, 3, 'http://localhost:8718', '', '', 0, 0, 'C', 1, 1, 'monitor:sentinel:list', 'sentinel', 'admin', '2024-05-09 14:42:09', '', '2024-05-09 16:10:01', '流量控制菜单', 0, 0);
INSERT INTO `sys_menu` VALUES (112, 'Nacos控制台', 2, 4, 'http://localhost:8848/nacos', '', '', 0, 0, 'C', 1, 1, 'monitor:nacos:list', 'nacos', 'admin', '2024-05-09 14:42:09', '', '2024-05-09 16:10:01', '服务治理菜单', 0, 0);
INSERT INTO `sys_menu` VALUES (113, 'Admin控制台', 2, 5, 'http://localhost:9100/login', '', '', 0, 0, 'C', 1, 1, 'monitor:server:list', 'server', 'admin', '2024-05-09 14:42:09', '', '2024-05-09 16:10:01', '服务监控菜单', 0, 0);
INSERT INTO `sys_menu` VALUES (114, '表单构建', 3, 1, 'build', 'tool/build/index', '', 1, 0, 'C', 1, 1, 'tool:build:list', 'build', 'admin', '2024-05-09 14:42:09', '', '2024-05-09 16:10:01', '表单构建菜单', 0, 0);
INSERT INTO `sys_menu` VALUES (115, '代码生成', 3, 2, 'gen', 'tool/gen/index', '', 1, 0, 'C', 1, 1, 'tool:gen:list', 'code', 'admin', '2024-05-09 14:42:09', '', '2024-05-09 16:10:01', '代码生成菜单', 0, 0);
INSERT INTO `sys_menu` VALUES (116, '系统接口', 3, 3, 'http://localhost:8080/swagger-ui/index.html', '', '', 0, 0, 'C', 1, 1, 'tool:swagger:list', 'swagger', 'admin', '2024-05-09 14:42:09', '', '2024-05-09 16:10:01', '系统接口菜单', 0, 0);
INSERT INTO `sys_menu` VALUES (500, '操作日志', 108, 1, 'operlog', 'system/operlog/index', '', 1, 0, 'C', 1, 1, 'system:operlog:list', 'form', 'admin', '2024-05-09 14:42:09', '', '2024-05-09 16:10:01', '操作日志菜单', 0, 0);
INSERT INTO `sys_menu` VALUES (501, '登录日志', 108, 2, 'logininfor', 'system/logininfor/index', '', 1, 0, 'C', 1, 1, 'system:logininfor:list', 'logininfor', 'admin', '2024-05-09 14:42:09', '', '2024-05-09 16:10:01', '登录日志菜单', 0, 0);
INSERT INTO `sys_menu` VALUES (1000, '用户查询', 100, 1, '', '', '', 1, 0, 'F', 1, 1, 'system:user:query', '#', 'admin', '2024-05-09 14:42:09', '', '2024-05-09 16:10:01', '', 0, 0);
INSERT INTO `sys_menu` VALUES (1001, '用户新增', 100, 2, '', '', '', 1, 0, 'F', 1, 1, 'system:user:add', '#', 'admin', '2024-05-09 14:42:09', '', '2024-05-09 16:10:01', '', 0, 0);
INSERT INTO `sys_menu` VALUES (1002, '用户修改', 100, 3, '', '', '', 1, 0, 'F', 1, 1, 'system:user:edit', '#', 'admin', '2024-05-09 14:42:09', '', '2024-05-09 16:10:01', '', 0, 0);
INSERT INTO `sys_menu` VALUES (1003, '用户删除', 100, 4, '', '', '', 1, 0, 'F', 1, 1, 'system:user:remove', '#', 'admin', '2024-05-09 14:42:09', '', '2024-05-09 16:10:01', '', 0, 0);
INSERT INTO `sys_menu` VALUES (1004, '用户导出', 100, 5, '', '', '', 1, 0, 'F', 1, 1, 'system:user:export', '#', 'admin', '2024-05-09 14:42:09', '', '2024-05-09 16:10:01', '', 0, 0);
INSERT INTO `sys_menu` VALUES (1005, '用户导入', 100, 6, '', '', '', 1, 0, 'F', 1, 1, 'system:user:import', '#', 'admin', '2024-05-09 14:42:09', '', '2024-05-09 16:10:01', '', 0, 0);
INSERT INTO `sys_menu` VALUES (1006, '重置密码', 100, 7, '', '', '', 1, 0, 'F', 1, 1, 'system:user:resetPwd', '#', 'admin', '2024-05-09 14:42:09', '', '2024-05-09 16:10:01', '', 0, 0);
INSERT INTO `sys_menu` VALUES (1007, '角色查询', 101, 1, '', '', '', 1, 0, 'F', 1, 1, 'system:role:query', '#', 'admin', '2024-05-09 14:42:09', '', '2024-05-09 16:10:01', '', 0, 0);
INSERT INTO `sys_menu` VALUES (1008, '角色新增', 101, 2, '', '', '', 1, 0, 'F', 1, 1, 'system:role:add', '#', 'admin', '2024-05-09 14:42:09', '', '2024-05-09 16:10:01', '', 0, 0);
INSERT INTO `sys_menu` VALUES (1009, '角色修改', 101, 3, '', '', '', 1, 0, 'F', 1, 1, 'system:role:edit', '#', 'admin', '2024-05-09 14:42:09', '', '2024-05-09 16:10:01', '', 0, 0);
INSERT INTO `sys_menu` VALUES (1010, '角色删除', 101, 4, '', '', '', 1, 0, 'F', 1, 1, 'system:role:remove', '#', 'admin', '2024-05-09 14:42:09', '', '2024-05-09 16:10:01', '', 0, 0);
INSERT INTO `sys_menu` VALUES (1011, '角色导出', 101, 5, '', '', '', 1, 0, 'F', 1, 1, 'system:role:export', '#', 'admin', '2024-05-09 14:42:09', '', '2024-05-09 16:10:01', '', 0, 0);
INSERT INTO `sys_menu` VALUES (1012, '菜单查询', 102, 1, '', '', '', 1, 0, 'F', 1, 1, 'system:menu:query', '#', 'admin', '2024-05-09 14:42:09', '', '2024-05-09 16:10:01', '', 0, 0);
INSERT INTO `sys_menu` VALUES (1013, '菜单新增', 102, 2, '', '', '', 1, 0, 'F', 1, 1, 'system:menu:add', '#', 'admin', '2024-05-09 14:42:09', '', '2024-05-09 16:10:01', '', 0, 0);
INSERT INTO `sys_menu` VALUES (1014, '菜单修改', 102, 3, '', '', '', 1, 0, 'F', 1, 1, 'system:menu:edit', '#', 'admin', '2024-05-09 14:42:09', '', '2024-05-09 16:10:01', '', 0, 0);
INSERT INTO `sys_menu` VALUES (1015, '菜单删除', 102, 4, '', '', '', 1, 0, 'F', 1, 1, 'system:menu:remove', '#', 'admin', '2024-05-09 14:42:09', '', '2024-05-09 16:10:01', '', 0, 0);
INSERT INTO `sys_menu` VALUES (1016, '部门查询', 103, 1, '', '', '', 1, 0, 'F', 1, 1, 'system:dept:query', '#', 'admin', '2024-05-09 14:42:09', '', '2024-05-09 16:10:01', '', 0, 0);
INSERT INTO `sys_menu` VALUES (1017, '部门新增', 103, 2, '', '', '', 1, 0, 'F', 1, 1, 'system:dept:add', '#', 'admin', '2024-05-09 14:42:09', '', '2024-05-09 16:10:01', '', 0, 0);
INSERT INTO `sys_menu` VALUES (1018, '部门修改', 103, 3, '', '', '', 1, 0, 'F', 1, 1, 'system:dept:edit', '#', 'admin', '2024-05-09 14:42:09', '', '2024-05-09 16:10:01', '', 0, 0);
INSERT INTO `sys_menu` VALUES (1019, '部门删除', 103, 4, '', '', '', 1, 0, 'F', 1, 1, 'system:dept:remove', '#', 'admin', '2024-05-09 14:42:09', '', '2024-05-09 16:10:01', '', 0, 0);
INSERT INTO `sys_menu` VALUES (1020, '岗位查询', 104, 1, '', '', '', 1, 0, 'F', 1, 1, 'system:post:query', '#', 'admin', '2024-05-09 14:42:09', '', '2024-05-09 16:10:01', '', 0, 0);
INSERT INTO `sys_menu` VALUES (1021, '岗位新增', 104, 2, '', '', '', 1, 0, 'F', 1, 1, 'system:post:add', '#', 'admin', '2024-05-09 14:42:09', '', '2024-05-09 16:10:01', '', 0, 0);
INSERT INTO `sys_menu` VALUES (1022, '岗位修改', 104, 3, '', '', '', 1, 0, 'F', 1, 1, 'system:post:edit', '#', 'admin', '2024-05-09 14:42:09', '', '2024-05-09 16:10:01', '', 0, 0);
INSERT INTO `sys_menu` VALUES (1023, '岗位删除', 104, 4, '', '', '', 1, 0, 'F', 1, 1, 'system:post:remove', '#', 'admin', '2024-05-09 14:42:09', '', '2024-05-09 16:10:01', '', 0, 0);
INSERT INTO `sys_menu` VALUES (1024, '岗位导出', 104, 5, '', '', '', 1, 0, 'F', 1, 1, 'system:post:export', '#', 'admin', '2024-05-09 14:42:09', '', '2024-05-09 16:10:01', '', 0, 0);
INSERT INTO `sys_menu` VALUES (1025, '字典查询', 105, 1, '#', '', '', 1, 0, 'F', 1, 1, 'system:dict:query', '#', 'admin', '2024-05-09 14:42:09', '', '2024-05-09 16:10:01', '', 0, 0);
INSERT INTO `sys_menu` VALUES (1026, '字典新增', 105, 2, '#', '', '', 1, 0, 'F', 1, 1, 'system:dict:add', '#', 'admin', '2024-05-09 14:42:09', '', '2024-05-09 16:10:01', '', 0, 0);
INSERT INTO `sys_menu` VALUES (1027, '字典修改', 105, 3, '#', '', '', 1, 0, 'F', 1, 1, 'system:dict:edit', '#', 'admin', '2024-05-09 14:42:10', '', '2024-05-09 16:10:01', '', 0, 0);
INSERT INTO `sys_menu` VALUES (1028, '字典删除', 105, 4, '#', '', '', 1, 0, 'F', 1, 1, 'system:dict:remove', '#', 'admin', '2024-05-09 14:42:10', '', '2024-05-09 16:10:01', '', 0, 0);
INSERT INTO `sys_menu` VALUES (1029, '字典导出', 105, 5, '#', '', '', 1, 0, 'F', 1, 1, 'system:dict:export', '#', 'admin', '2024-05-09 14:42:10', '', '2024-05-09 16:10:01', '', 0, 0);
INSERT INTO `sys_menu` VALUES (1030, '参数查询', 106, 1, '#', '', '', 1, 0, 'F', 1, 1, 'system:config:query', '#', 'admin', '2024-05-09 14:42:10', '', '2024-05-09 16:10:01', '', 0, 0);
INSERT INTO `sys_menu` VALUES (1031, '参数新增', 106, 2, '#', '', '', 1, 0, 'F', 1, 1, 'system:config:add', '#', 'admin', '2024-05-09 14:42:10', '', '2024-05-09 16:10:01', '', 0, 0);
INSERT INTO `sys_menu` VALUES (1032, '参数修改', 106, 3, '#', '', '', 1, 0, 'F', 1, 1, 'system:config:edit', '#', 'admin', '2024-05-09 14:42:10', '', '2024-05-09 16:10:01', '', 0, 0);
INSERT INTO `sys_menu` VALUES (1033, '参数删除', 106, 4, '#', '', '', 1, 0, 'F', 1, 1, 'system:config:remove', '#', 'admin', '2024-05-09 14:42:10', '', '2024-05-09 16:10:01', '', 0, 0);
INSERT INTO `sys_menu` VALUES (1034, '参数导出', 106, 5, '#', '', '', 1, 0, 'F', 1, 1, 'system:config:export', '#', 'admin', '2024-05-09 14:42:10', '', '2024-05-09 16:10:01', '', 0, 0);
INSERT INTO `sys_menu` VALUES (1035, '公告查询', 107, 1, '#', '', '', 1, 0, 'F', 1, 1, 'system:notice:query', '#', 'admin', '2024-05-09 14:42:10', '', '2024-05-09 16:10:01', '', 0, 0);
INSERT INTO `sys_menu` VALUES (1036, '公告新增', 107, 2, '#', '', '', 1, 0, 'F', 1, 1, 'system:notice:add', '#', 'admin', '2024-05-09 14:42:10', '', '2024-05-09 16:10:01', '', 0, 0);
INSERT INTO `sys_menu` VALUES (1037, '公告修改', 107, 3, '#', '', '', 1, 0, 'F', 1, 1, 'system:notice:edit', '#', 'admin', '2024-05-09 14:42:10', '', '2024-05-09 16:10:01', '', 0, 0);
INSERT INTO `sys_menu` VALUES (1038, '公告删除', 107, 4, '#', '', '', 1, 0, 'F', 1, 1, 'system:notice:remove', '#', 'admin', '2024-05-09 14:42:10', '', '2024-05-09 16:10:01', '', 0, 0);
INSERT INTO `sys_menu` VALUES (1039, '操作查询', 500, 1, '#', '', '', 1, 0, 'F', 1, 1, 'system:operlog:query', '#', 'admin', '2024-05-09 14:42:10', '', '2024-05-09 16:10:01', '', 0, 0);
INSERT INTO `sys_menu` VALUES (1040, '操作删除', 500, 2, '#', '', '', 1, 0, 'F', 1, 1, 'system:operlog:remove', '#', 'admin', '2024-05-09 14:42:10', '', '2024-05-09 16:10:01', '', 0, 0);
INSERT INTO `sys_menu` VALUES (1041, '日志导出', 500, 3, '#', '', '', 1, 0, 'F', 1, 1, 'system:operlog:export', '#', 'admin', '2024-05-09 14:42:10', '', '2024-05-09 16:10:01', '', 0, 0);
INSERT INTO `sys_menu` VALUES (1042, '登录查询', 501, 1, '#', '', '', 1, 0, 'F', 1, 1, 'system:logininfor:query', '#', 'admin', '2024-05-09 14:42:10', '', '2024-05-09 16:10:01', '', 0, 0);
INSERT INTO `sys_menu` VALUES (1043, '登录删除', 501, 2, '#', '', '', 1, 0, 'F', 1, 1, 'system:logininfor:remove', '#', 'admin', '2024-05-09 14:42:10', '', '2024-05-09 16:10:01', '', 0, 0);
INSERT INTO `sys_menu` VALUES (1044, '日志导出', 501, 3, '#', '', '', 1, 0, 'F', 1, 1, 'system:logininfor:export', '#', 'admin', '2024-05-09 14:42:10', '', '2024-05-09 16:10:01', '', 0, 0);
INSERT INTO `sys_menu` VALUES (1045, '账户解锁', 501, 4, '#', '', '', 1, 0, 'F', 1, 1, 'system:logininfor:unlock', '#', 'admin', '2024-05-09 14:42:10', '', '2024-05-09 16:10:01', '', 0, 0);
INSERT INTO `sys_menu` VALUES (1046, '在线查询', 109, 1, '#', '', '', 1, 0, 'F', 1, 1, 'monitor:online:query', '#', 'admin', '2024-05-09 14:42:10', '', '2024-05-09 16:10:01', '', 0, 0);
INSERT INTO `sys_menu` VALUES (1047, '批量强退', 109, 2, '#', '', '', 1, 0, 'F', 1, 1, 'monitor:online:batchLogout', '#', 'admin', '2024-05-09 14:42:10', '', '2024-05-09 16:10:01', '', 0, 0);
INSERT INTO `sys_menu` VALUES (1048, '单条强退', 109, 3, '#', '', '', 1, 0, 'F', 1, 1, 'monitor:online:forceLogout', '#', 'admin', '2024-05-09 14:42:10', '', '2024-05-09 16:10:01', '', 0, 0);
INSERT INTO `sys_menu` VALUES (1049, '任务查询', 110, 1, '#', '', '', 1, 0, 'F', 1, 1, 'monitor:job:query', '#', 'admin', '2024-05-09 14:42:10', '', '2024-05-09 16:10:01', '', 0, 0);
INSERT INTO `sys_menu` VALUES (1050, '任务新增', 110, 2, '#', '', '', 1, 0, 'F', 1, 1, 'monitor:job:add', '#', 'admin', '2024-05-09 14:42:10', '', '2024-05-09 16:10:01', '', 0, 0);
INSERT INTO `sys_menu` VALUES (1051, '任务修改', 110, 3, '#', '', '', 1, 0, 'F', 1, 1, 'monitor:job:edit', '#', 'admin', '2024-05-09 14:42:10', '', '2024-05-09 16:10:01', '', 0, 0);
INSERT INTO `sys_menu` VALUES (1052, '任务删除', 110, 4, '#', '', '', 1, 0, 'F', 1, 1, 'monitor:job:remove', '#', 'admin', '2024-05-09 14:42:10', '', '2024-05-09 16:10:01', '', 0, 0);
INSERT INTO `sys_menu` VALUES (1053, '状态修改', 110, 5, '#', '', '', 1, 0, 'F', 1, 1, 'monitor:job:changeStatus', '#', 'admin', '2024-05-09 14:42:10', '', '2024-05-09 16:10:01', '', 0, 0);
INSERT INTO `sys_menu` VALUES (1054, '任务导出', 110, 6, '#', '', '', 1, 0, 'F', 1, 1, 'monitor:job:export', '#', 'admin', '2024-05-09 14:42:10', '', '2024-05-09 16:10:01', '', 0, 0);
INSERT INTO `sys_menu` VALUES (1055, '生成查询', 115, 1, '#', '', '', 1, 0, 'F', 1, 1, 'tool:gen:query', '#', 'admin', '2024-05-09 14:42:10', '', '2024-05-09 16:10:01', '', 0, 0);
INSERT INTO `sys_menu` VALUES (1056, '生成修改', 115, 2, '#', '', '', 1, 0, 'F', 1, 1, 'tool:gen:edit', '#', 'admin', '2024-05-09 14:42:10', '', '2024-05-09 16:10:01', '', 0, 0);
INSERT INTO `sys_menu` VALUES (1057, '生成删除', 115, 3, '#', '', '', 1, 0, 'F', 1, 1, 'tool:gen:remove', '#', 'admin', '2024-05-09 14:42:10', '', '2024-05-09 16:10:01', '', 0, 0);
INSERT INTO `sys_menu` VALUES (1058, '导入代码', 115, 2, '#', '', '', 1, 0, 'F', 1, 1, 'tool:gen:import', '#', 'admin', '2024-05-09 14:42:10', '', '2024-05-09 16:10:01', '', 0, 0);
INSERT INTO `sys_menu` VALUES (1059, '预览代码', 115, 4, '#', '', '', 1, 0, 'F', 1, 1, 'tool:gen:preview', '#', 'admin', '2024-05-09 14:42:10', '', '2024-05-09 16:10:01', '', 0, 0);
INSERT INTO `sys_menu` VALUES (1060, '生成代码', 115, 5, '#', '', '', 1, 0, 'F', 1, 1, 'tool:gen:code', '#', 'admin', '2024-05-09 14:42:10', '', '2024-05-09 16:10:01', '', 0, 0);
-- ----------------------------
-- Table structure for sys_post
-- ----------------------------
DROP TABLE IF EXISTS `sys_post`;
CREATE TABLE `sys_post` (
`post_id` bigint NOT NULL AUTO_INCREMENT COMMENT '岗位ID',
`post_code` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '岗位编码',
`post_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '岗位名称',
`post_sort` int NOT NULL COMMENT '显示顺序',
`status` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '状态0正常 1停用',
`create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT '' COMMENT '创建者',
`create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
`update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT '' COMMENT '更新者',
`update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
`remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '备注',
`version` int NULL DEFAULT 0,
`del_status` tinyint(1) NULL DEFAULT 0,
PRIMARY KEY (`post_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '岗位信息表' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of sys_post
-- ----------------------------
INSERT INTO `sys_post` VALUES (1, 'ceo', '董事长', 1, '0', 'admin', '2024-05-09 14:42:09', '', NULL, '', 0, 0);
INSERT INTO `sys_post` VALUES (2, 'se', '项目经理', 2, '0', 'admin', '2024-05-09 14:42:09', '', NULL, '', 0, 0);
INSERT INTO `sys_post` VALUES (3, 'hr', '人力资源', 3, '0', 'admin', '2024-05-09 14:42:09', '', NULL, '', 0, 0);
INSERT INTO `sys_post` VALUES (4, 'user', '普通员工', 4, '0', 'admin', '2024-05-09 14:42:09', '', NULL, '', 0, 0);
-- ----------------------------
-- Table structure for sys_role
-- ----------------------------
DROP TABLE IF EXISTS `sys_role`;
CREATE TABLE `sys_role` (
`role_id` int NOT NULL AUTO_INCREMENT COMMENT '角色ID',
`role_name` varchar(30) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '角色名称',
`role_key` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '角色权限字符串',
`order_num` int NOT NULL DEFAULT 0 COMMENT '显示顺序',
`data_scope` char(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT '4' COMMENT '数据范围1全部数据权限 2自定数据权限 3本部门数据权限 4本部门及以下数据权限',
`menu_check_strictly` tinyint(1) NULL DEFAULT 1 COMMENT '菜单树选择项是否关联显示',
`dept_check_strictly` tinyint(1) NULL DEFAULT 1 COMMENT '部门树选择项是否关联显示',
`status` tinyint(1) NOT NULL DEFAULT 1 COMMENT '角色状态1正常 0停用',
`del_state` tinyint(1) NULL DEFAULT 0 COMMENT '删除标志0代表存在 2代表删除',
`create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT '' COMMENT '创建者',
`create_time` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT '' COMMENT '更新者',
`update_time` datetime NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '备注',
`dept_id` int NULL DEFAULT NULL COMMENT '对应部门id',
`version` bigint NULL DEFAULT 0,
PRIMARY KEY (`role_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '角色信息表' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of sys_role
-- ----------------------------
INSERT INTO `sys_role` VALUES (1, '超级管理员', 'admin', 1, '1', 1, 1, 1, 0, 'admin', '2022-08-25 15:08:02', '', '2022-09-27 17:18:54', '超级管理员', 200, 0);
-- ----------------------------
-- Table structure for sys_role_dept
-- ----------------------------
DROP TABLE IF EXISTS `sys_role_dept`;
CREATE TABLE `sys_role_dept` (
`role_id` int NOT NULL COMMENT '角色ID',
`dept_id` int NOT NULL COMMENT '部门ID',
PRIMARY KEY (`role_id`, `dept_id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '角色和部门关联表' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of sys_role_dept
-- ----------------------------
-- ----------------------------
-- Table structure for sys_role_menu
-- ----------------------------
DROP TABLE IF EXISTS `sys_role_menu`;
CREATE TABLE `sys_role_menu` (
`role_id` int NOT NULL COMMENT '角色ID',
`menu_id` int NOT NULL COMMENT '菜单ID',
PRIMARY KEY (`role_id`, `menu_id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '角色和菜单关联表' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of sys_role_menu
-- ----------------------------
-- ----------------------------
-- Table structure for sys_user
-- ----------------------------
DROP TABLE IF EXISTS `sys_user`;
CREATE TABLE `sys_user` (
`user_id` int NOT NULL AUTO_INCREMENT,
`username` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL COMMENT '用户名',
`password` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '密码',
`status` tinyint NULL DEFAULT 1 COMMENT '状态 0禁用 1正常',
`salt` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '',
`dept_id` int NULL DEFAULT NULL COMMENT '部门id',
`create_by` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '创建人',
`update_by` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL COMMENT '修改人',
`create_time` datetime NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` datetime NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
`del_state` tinyint(1) NULL DEFAULT 0 COMMENT '删除状态',
`version` bigint NULL DEFAULT 0,
PRIMARY KEY (`user_id`) USING BTREE,
INDEX `username`(`username` ASC) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '系统用户' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of sys_user
-- ----------------------------
INSERT INTO `sys_user` VALUES (1, 'admin', '$2a$10$mT7Ismory0OeHYhmXMk2O.0Y/qaKt2VBn6bwQiKUvttQHW0/naveC', 1, 'h2HheUVZmF', 200, 'admin', 'admin', '2022-08-25 16:43:40', '2024-05-08 10:48:46', 0, 0);
-- ----------------------------
-- Table structure for sys_user_data
-- ----------------------------
DROP TABLE IF EXISTS `sys_user_data`;
CREATE TABLE `sys_user_data` (
`user_id` int NOT NULL COMMENT '用户id',
`data_type` smallint NOT NULL COMMENT '数据类型 -- 应当是一个 枚举',
`data_value` json NULL COMMENT '数据对应id, 多个以数组形式存在',
PRIMARY KEY (`user_id`, `data_type`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of sys_user_data
-- ----------------------------
-- ----------------------------
-- Table structure for sys_user_post
-- ----------------------------
DROP TABLE IF EXISTS `sys_user_post`;
CREATE TABLE `sys_user_post` (
`user_id` bigint NOT NULL COMMENT '用户ID',
`post_id` bigint NOT NULL COMMENT '岗位ID',
PRIMARY KEY (`user_id`, `post_id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '用户与岗位关联表' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of sys_user_post
-- ----------------------------
INSERT INTO `sys_user_post` VALUES (1, 1);
INSERT INTO `sys_user_post` VALUES (2, 2);
-- ----------------------------
-- Table structure for sys_user_role
-- ----------------------------
DROP TABLE IF EXISTS `sys_user_role`;
CREATE TABLE `sys_user_role` (
`user_id` int NOT NULL COMMENT '用户ID',
`role_id` int NOT NULL COMMENT '角色ID',
PRIMARY KEY (`user_id`, `role_id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_bin COMMENT = '用户和角色关联表' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of sys_user_role
-- ----------------------------
INSERT INTO `sys_user_role` VALUES (1, 1);
SET FOREIGN_KEY_CHECKS = 1;

View File

@ -40,6 +40,7 @@ public class SystemApplication extends SpringBootServletInitializer {
public static void main(String[] args) throws Exception {
log.info(AppStartType.START_FORMAT, AppStartType.main.type(), APP_NAME);
SpringApplication.run(SystemApplication.class, args);
log.info(AppStartType.END_FORMAT, AppStartType.main.type(), APP_NAME);
}
}

View File

@ -2,6 +2,7 @@ package com.chushang.system.controller;
import com.chushang.common.core.web.AjaxResult;
import com.chushang.common.log.annotation.SysLog;
import com.chushang.common.log.enums.BusinessType;
import com.chushang.security.annotation.RequiresPermissions;
import com.chushang.security.utils.SecurityUtils;
import com.chushang.system.entity.dto.ListDeptDTO;
@ -31,7 +32,7 @@ public class DeptController {
* 获取部门列表
*/
@GetMapping("/list")
@RequiresPermissions("sys:dept:list")
@RequiresPermissions("system:dept:list")
public AjaxResult list(ListDeptDTO listDept)
{
return AjaxResult.success(sysDeptService.selectDeptList(listDept));
@ -40,7 +41,7 @@ public class DeptController {
/**
* 查询部门列表排除节点
*/
@RequiresPermissions("sys:dept:list")
@RequiresPermissions("system:dept:list")
@GetMapping("/list/exclude/{deptId}")
public AjaxResult excludeChild(@PathVariable(value = "deptId", required = false) Integer deptId)
{
@ -53,7 +54,7 @@ public class DeptController {
/**
* 根据部门编号获取详细信息
*/
@RequiresPermissions("sys:dept:query")
@RequiresPermissions("system:dept:query")
@GetMapping(value = "/{deptId}")
public AjaxResult getInfo(@PathVariable Integer deptId)
{
@ -76,8 +77,8 @@ public class DeptController {
/**
* 加载对应角色部门列表树
*/
@GetMapping(value = "/roleDept/tree/select/{roleId}")
@RequiresPermissions("sys:role:query")
@GetMapping(value = "/roleDept/tree/{roleId}")
@RequiresPermissions("system:role:query")
public AjaxResult roleDeptTreeSelect(@PathVariable("roleId") Integer roleId)
{
List<SysDept> deptList = sysDeptService.selectDeptList(new ListDeptDTO());
@ -89,8 +90,8 @@ public class DeptController {
/**
* 新增部门
*/
@RequiresPermissions("sys:dept:add")
@SysLog("新增部门")
@RequiresPermissions("system:dept:add")
@SysLog(value = "部门", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@Valid @RequestBody SysDept dept)
{
@ -107,8 +108,8 @@ public class DeptController {
/**
* 修改部门
*/
@RequiresPermissions("sys:dept:edit")
@SysLog("修改部门")
@RequiresPermissions("system:dept:edit")
@SysLog(value = "部门", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@Valid @RequestBody SysDept dept)
{
@ -138,8 +139,8 @@ public class DeptController {
/**
* 删除部门
*/
@RequiresPermissions("sys:dept:remove")
@SysLog("删除部门")
@RequiresPermissions("system:dept:remove")
@SysLog(value = "部门", businessType = BusinessType.DELETE)
@DeleteMapping("/{deptId}")
public AjaxResult remove(@PathVariable Integer deptId)
{

View File

@ -51,7 +51,7 @@ public class DictController {
return AjaxResult.success(dictDataService.pageDictDataList(dictData, pageParam));
}
@SysLog(value = "导出字典数据")
@SysLog(value = "字典数据", businessType = BusinessType.EXPORT)
@RequiresPermissions("system:dict:export")
@PostMapping("/export")
public void export(HttpServletResponse response, ListDictDTO dictData)

View File

@ -24,6 +24,7 @@ import java.util.List;
/**
* @auther: zhao
* @date: 2024/5/9 15:54
* todo 加入缓存
*/
@RestController
@RequestMapping(value = "/dict/type")
@ -107,9 +108,9 @@ public class DictTypeController {
}
/**
* 刷新字典缓存 TODO
* TODO 刷新字典缓存
*/
@RequiresPermissions("system:dict:remove")
@RequiresPermissions("system:dict:refresh")
@SysLog(value = "字典类型", businessType = BusinessType.CLEAN)
@DeleteMapping("/refreshCache")
public AjaxResult refreshCache()

View File

@ -4,6 +4,7 @@ import com.chushang.common.core.constant.Constants;
import com.chushang.common.core.util.StringUtils;
import com.chushang.common.core.web.AjaxResult;
import com.chushang.common.log.annotation.SysLog;
import com.chushang.common.log.enums.BusinessType;
import com.chushang.security.annotation.RequiresPermissions;
import com.chushang.security.utils.SecurityUtils;
import com.chushang.system.entity.dto.ListMenuDTO;
@ -30,7 +31,7 @@ public class MenuController {
/**
* 获取菜单列表
*/
@RequiresPermissions("sys:menu:list")
@RequiresPermissions("system:menu:list")
@GetMapping("/list")
public AjaxResult list(ListMenuDTO listMenu)
{
@ -42,7 +43,7 @@ public class MenuController {
/**
* 根据菜单编号获取详细信息
*/
@RequiresPermissions("sys:menu:query")
@RequiresPermissions("system:menu:query")
@GetMapping(value = "/{menuId}")
public AjaxResult getInfo(@PathVariable Integer menuId)
{
@ -77,8 +78,8 @@ public class MenuController {
/**
* 新增菜单
*/
@RequiresPermissions("sys:menu:add")
@SysLog("新增菜单")
@RequiresPermissions("system:menu:add")
@SysLog(value = "菜单", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@Validated @RequestBody SysMenu menu)
{
@ -87,7 +88,7 @@ public class MenuController {
return AjaxResult.error("新增菜单'" + menu.getMenuName() + "'失败,菜单名称已存在");
}
// 外链
else if ("0".equals(menu.getFrame()) && ! StringUtils.startsWithAny(menu.getPath(), Constants.HTTP, Constants.HTTPS))
else if (!menu.getFrame() && ! StringUtils.startsWithAny(menu.getPath(), Constants.HTTP, Constants.HTTPS))
{
return AjaxResult.error("新增菜单'" + menu.getMenuName() + "'失败地址必须以http(s)://开头");
}
@ -101,8 +102,8 @@ public class MenuController {
/**
* 修改菜单
*/
@RequiresPermissions("sys:menu:edit")
@SysLog("修改菜单")
@RequiresPermissions("system:menu:edit")
@SysLog(value = "修改菜单", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@Validated @RequestBody SysMenu menu)
{
@ -111,7 +112,7 @@ public class MenuController {
return AjaxResult.error("修改菜单'" + menu.getMenuName() + "'失败,菜单名称已存在");
}
// 外链
else if ("0".equals(menu.getFrame()) && !StringUtils.startsWithAny(menu.getPath(), Constants.HTTP, Constants.HTTPS))
else if (!menu.getFrame() && !StringUtils.startsWithAny(menu.getPath(), Constants.HTTP, Constants.HTTPS))
{
return AjaxResult.error("修改菜单'" + menu.getMenuName() + "'失败地址必须以http(s)://开头");
}
@ -129,7 +130,7 @@ public class MenuController {
/**
* 删除菜单
*/
@RequiresPermissions("sys:menu:remove")
@RequiresPermissions("system:menu:remove")
@SysLog("删除菜单")
@DeleteMapping("/{menuId}")
public AjaxResult remove(@PathVariable("menuId") Integer menuId)

View File

@ -11,7 +11,6 @@ import com.chushang.security.annotation.RequiresPermissions;
import com.chushang.security.utils.SecurityUtils;
import com.chushang.system.entity.po.SysPost;
import com.chushang.system.service.ISysPostService;
import lombok.extern.java.Log;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
@ -43,7 +42,7 @@ public class PostController {
return AjaxResult.success(pageResult);
}
@SysLog(value = "岗位管理", businessType = BusinessType.EXPORT)
@SysLog(value = "岗位", businessType = BusinessType.EXPORT)
@RequiresPermissions("system:post:export")
@PostMapping("/export")
public void export(HttpServletResponse response, SysPost post)
@ -67,18 +66,17 @@ public class PostController {
* 新增岗位
*/
@RequiresPermissions("system:post:add")
@SysLog(value = "岗位管理", businessType = BusinessType.INSERT)
@SysLog(value = "岗位", businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@Validated @RequestBody SysPost post)
{
CommonParam commonParam = CommonParam.buildAllRequest();
SysPost postName = new SysPost();
postName.setPostName(post.getPostName());
postName.setPostCode(null);
AssertUtil.invalidate(postService.checkPostCodeUnique(postName, commonParam), "新增岗位'" + post.getPostName() + "'失败,岗位名称已存在");
AssertUtil.invalidate(postService.checkPostUnique(postName), "新增岗位'" + post.getPostName() + "'失败,岗位名称已存在");
postName.setPostCode(post.getPostCode());
postName.setPostName(null);
AssertUtil.invalidate(postService.checkPostCodeUnique(postName, commonParam), "新增岗位'" + post.getPostName() + "'失败,岗位编码已存在");
AssertUtil.invalidate(postService.checkPostUnique(postName), "新增岗位'" + post.getPostName() + "'失败,岗位编码已存在");
post.setCreateBy(SecurityUtils.getUsername());
postService.saveOrUpdate(post);
return AjaxResult.success();
@ -88,18 +86,18 @@ public class PostController {
* 修改岗位
*/
@RequiresPermissions("system:post:edit")
@SysLog(value = "岗位管理", businessType = BusinessType.UPDATE)
@SysLog(value = "岗位", businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@Validated @RequestBody SysPost post)
{
CommonParam commonParam = CommonParam.buildAllRequest();
SysPost postName = new SysPost();
postName.setPostName(post.getPostName());
postName.setPostId(post.getPostId());
postName.setPostCode(null);
AssertUtil.invalidate(postService.checkPostCodeUnique(postName, commonParam), "修改岗位'" + post.getPostName() + "'失败,岗位名称已存在");
AssertUtil.invalidate(postService.checkPostUnique(postName), "修改岗位'" + post.getPostName() + "'失败,岗位名称已存在");
postName.setPostCode(post.getPostCode());
postName.setPostName(null);
AssertUtil.invalidate(postService.checkPostCodeUnique(postName, commonParam), "修改岗位'" + post.getPostName() + "'失败,岗位编码已存在");
AssertUtil.invalidate(postService.checkPostUnique(postName), "修改岗位'" + post.getPostName() + "'失败,岗位编码已存在");
post.setCreateBy(SecurityUtils.getUsername());
postService.saveOrUpdate(post);
return AjaxResult.success();
@ -109,7 +107,7 @@ public class PostController {
* 删除岗位
*/
@RequiresPermissions("system:post:remove")
@SysLog(value = "岗位管理", businessType = BusinessType.DELETE)
@SysLog(value = "岗位", businessType = BusinessType.DELETE)
@DeleteMapping("/{postIds}")
public AjaxResult remove(@PathVariable Long[] postIds)
{
@ -121,7 +119,7 @@ public class PostController {
* 获取岗位选择框列表
*/
@GetMapping("/option/select")
public AjaxResult optionselect()
public AjaxResult optionSelect()
{
CommonParam commonParam = CommonParam.buildAllRequest();
List<SysPost> list = postService.allPostList(new SysPost(), commonParam);

View File

@ -2,6 +2,7 @@ package com.chushang.system.controller;
import com.chushang.common.core.web.AjaxResult;
import com.chushang.common.log.annotation.SysLog;
import com.chushang.common.log.enums.BusinessType;
import com.chushang.security.annotation.RequiresPermissions;
import com.chushang.security.utils.SecurityUtils;
import com.chushang.system.entity.bo.CancelUserRole;
@ -29,7 +30,7 @@ public class RoleController {
@Autowired
ISysUserService userService;
@RequiresPermissions("sys:role:list")
@RequiresPermissions("system:role:list")
@GetMapping("/list")
public AjaxResult list(ListRoleDTO listRole)
{
@ -39,7 +40,7 @@ public class RoleController {
/**
* 根据角色编号获取详细信息
*/
@RequiresPermissions("sys:role:query")
@RequiresPermissions("system:role:query")
@GetMapping(value = "/{roleId}")
public AjaxResult getInfo(@PathVariable Integer roleId)
{
@ -51,8 +52,8 @@ public class RoleController {
/**
* 新增角色
*/
@RequiresPermissions("sys:role:add")
@SysLog("新增角色")
@RequiresPermissions("system:role:add")
@SysLog(value = "新增角色",businessType = BusinessType.INSERT)
@PostMapping
public AjaxResult add(@Validated @RequestBody SysRole role)
{
@ -75,12 +76,13 @@ public class RoleController {
/**
* 修改保存角色
*/
@RequiresPermissions("sys:role:edit")
@SysLog("修改角色")
@RequiresPermissions("system:role:edit")
@SysLog(value = "修改角色",businessType = BusinessType.UPDATE)
@PutMapping
public AjaxResult edit(@Validated @RequestBody SysRole role)
{
if (2 == role.getRoleId()){
// 1 为超管
if (1 == role.getRoleId()){
return AjaxResult.success();
}
roleService.checkRoleAllowed(role);
@ -103,8 +105,8 @@ public class RoleController {
/**
* 修改保存数据权限
*/
@RequiresPermissions("sys:role:edit")
@SysLog("修改角色权限")
@RequiresPermissions("system:role:edit")
@SysLog(value = "修改角色权限",businessType = BusinessType.GRANT)
@PutMapping("/dataScope")
public AjaxResult dataScope(@RequestBody SysRole role)
{
@ -119,8 +121,8 @@ public class RoleController {
/**
* 状态修改
*/
@RequiresPermissions("sys:role:edit")
@SysLog("修改角色状态")
@RequiresPermissions("system:role:edit")
@SysLog(value = "修改角色状态",businessType = BusinessType.UPDATE)
@PutMapping("/changeStatus")
public AjaxResult changeStatus(@RequestBody SysRole role)
{
@ -137,8 +139,8 @@ public class RoleController {
/**
* 删除角色
*/
@RequiresPermissions("sys:role:remove")
@SysLog("删除角色")
@RequiresPermissions("system:role:remove")
@SysLog(value = "删除角色",businessType = BusinessType.DELETE)
@DeleteMapping("/{roleIds}")
public AjaxResult remove(@PathVariable Integer[] roleIds)
{
@ -150,7 +152,7 @@ public class RoleController {
/**
* 获取角色选择框列表
*/
@RequiresPermissions("sys:role:query")
@RequiresPermissions("system:role:query")
@GetMapping("/option/select")
public AjaxResult optionSelect()
{
@ -160,7 +162,7 @@ public class RoleController {
* 查询已分配用户角色列表
* 可以根据用户名称查询
*/
@RequiresPermissions("sys:role:list")
@RequiresPermissions("system:role:list")
@GetMapping("/authUser/allocatedList")
public AjaxResult allocatedList(@Valid ListUserDTO listUser)
{
@ -170,7 +172,7 @@ public class RoleController {
/**
* 查询未分配用户角色列表
*/
@RequiresPermissions("sys:role:list")
@RequiresPermissions("system:role:list")
@GetMapping("/authUser/unallocatedList")
public AjaxResult unallocatedList(@Valid ListUserDTO listUser)
{
@ -180,8 +182,8 @@ public class RoleController {
/**
* 取消授权用户
*/
@RequiresPermissions("sys:role:edit")
@SysLog("取消授权用户")
@RequiresPermissions("system:role:edit")
@SysLog(value = "取消授权用户", businessType = BusinessType.GRANT)
@PutMapping("/authUser/cancel")
public AjaxResult cancelAuthUser(@RequestBody @Valid CancelUserRole cancelUserRole)
{
@ -193,8 +195,8 @@ public class RoleController {
/**
* 批量选择用户授权
*/
@RequiresPermissions("sys:role:edit")
@SysLog("用户授权")
@RequiresPermissions("system:role:edit")
@SysLog(value = "用户授权", businessType = BusinessType.GRANT)
@PutMapping("/authUser")
public AjaxResult selectAuthUserAll(@RequestBody @Valid RoleUser roleUser)
{
@ -208,4 +210,25 @@ public class RoleController {
return AjaxResult.success();
}
/**
* todo 角色导出
* @return
*/
@SysLog(value = "角色", businessType = BusinessType.EXPORT)
@GetMapping("/export")
@RequiresPermissions("system:role:export")
public AjaxResult exportRole(){
return AjaxResult.error("暂未开放");
}
/**
* todo 角色导入
*/
@GetMapping("/import")
@RequiresPermissions("system:role:import")
@SysLog(value = "角色", businessType = BusinessType.IMPORT)
public AjaxResult importRole(){
return AjaxResult.error("暂未开放");
}
}

View File

@ -1,15 +1,22 @@
package com.chushang.system.controller;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.chushang.common.core.web.AjaxResult;
import com.chushang.common.core.web.Result;
import com.chushang.common.log.annotation.SysLog;
import com.chushang.common.log.enums.BusinessType;
import com.chushang.common.mybatis.page.CommonParam;
import com.chushang.security.annotation.InnerAuth;
import com.chushang.security.annotation.RequiresPermissions;
import com.chushang.system.entity.dto.ListLoginLogDTO;
import com.chushang.system.entity.po.SysLoginInfo;
import com.chushang.system.feign.RemoteLoginInfoService;
import com.chushang.system.service.SysLoginInfoService;
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 org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.Arrays;
@RestController
@RequestMapping(value = "/log/login/info")
@ -24,4 +31,30 @@ public class SysLoginInfoController implements RemoteLoginInfoService {
public Result<Boolean> saveLoginInfo(@RequestBody SysLoginInfo sysLogininfo, String source) {
return Result.ok(sysLoginInfoService.saveLoginInfo(sysLogininfo).isSuccess());
}
@GetMapping(value = "/list")
@RequiresPermissions("system:log:list")
public AjaxResult listLoginInfo(SysLoginInfo loginInfo){
CommonParam commonParam = CommonParam.buildPageRequest();
return AjaxResult.success(sysLoginInfoService.pagePostList(loginInfo, commonParam));
}
@DeleteMapping(value = "/{infoId}")
@SysLog(value = "登录日志", businessType = BusinessType.DELETE)
@RequiresPermissions("system:log:del")
public AjaxResult delLoginInfo(@PathVariable String infoId){
sysLoginInfoService.removeBatchByIds(Arrays.stream(infoId.split(",")).toList());
return AjaxResult.success();
}
/**
* 清除登录日志
*/
@DeleteMapping(value = "clean")
@SysLog(value = "登录日志", businessType = BusinessType.DELETE)
@RequiresPermissions("system:log:del")
public AjaxResult cleanLoginInfo(){
sysLoginInfoService.remove(new LambdaQueryWrapper<>());
return AjaxResult.success();
}
}

View File

@ -27,11 +27,12 @@ public class SysUserDataController {
ISysUserDataService userDataService;
/**
* 针对用户进行授权
* todo 针对用户进行授权
* 数据权限授权
*/
@SysLog(value = "用户数据授权")
@PostMapping(value = "/{userId}/{dataType}")
@RequiresPermissions(value = {"sys:app:auth","sys:platform:auth"}, logical = Logical.OR)
@RequiresPermissions(value = {"system:app:auth","system:platform:auth"}, logical = Logical.OR)
public AjaxResult authData(@RequestBody Map<String, String> authDataMap,
@PathVariable Integer dataType,
@PathVariable Integer userId)
@ -53,8 +54,11 @@ public class SysUserDataController {
return AjaxResult.success();
}
/**
* todo 数据权限授权查看
*/
@GetMapping(value = "/{userId}/{authType}")
@RequiresPermissions(value = {"sys:app:auth","sys:platform:auth"}, logical = Logical.OR)
@RequiresPermissions(value = {"system:app:auth","system:platform:auth"}, logical = Logical.OR)
public AjaxResult getAuthData(@PathVariable Integer userId,
@PathVariable Integer authType)
{

View File

@ -1,53 +1,59 @@
//package com.chushang.system.controller;
//
//import java.util.ArrayList;
//import java.util.Collection;
//import java.util.Collections;
//import java.util.List;
//
//import com.chushang.common.core.constant.CacheConstants;
//import com.chushang.common.core.web.AjaxResult;
//import com.chushang.security.annotation.RequiresPermissions;
//import com.chushang.security.entity.vo.LoginUser;
//import com.chushang.system.entity.vo.SysUserOnline;
//import com.chushang.system.service.ISysUserOnlineService;
//import lombok.extern.java.Log;
//import org.springframework.beans.factory.annotation.Autowired;
//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;
//
///**
// * 在线用户监控
// *
// * @author ruoyi
// */
//@RestController
//@RequestMapping("/online")
//public class SysUserOnlineController
//{
// @Autowired
// private ISysUserOnlineService userOnlineService;
//
// @RequiresPermissions("monitor:online:list")
// @GetMapping("/list")
// public TableDataInfo list(String ipaddr, String userName)
// {
//
// return getDataTable(userOnlineList);
// }
//
// /**
// * 强退用户
// */
// @RequiresPermissions("monitor:online:forceLogout")
// @Log(title = "在线用户", businessType = BusinessType.FORCE)
// @DeleteMapping("/{tokenId}")
// public AjaxResult forceLogout(@PathVariable String tokenId)
// {
// redisService.deleteObject(CacheConstants.LOGIN_TOKEN_KEY + tokenId);
// return success();
// }
//}
package com.chushang.system.controller;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import com.chushang.common.core.constant.CacheConstants;
import com.chushang.common.core.web.AjaxResult;
import com.chushang.common.log.annotation.SysLog;
import com.chushang.common.log.enums.BusinessType;
import com.chushang.common.mybatis.page.CommonParam;
import com.chushang.common.mybatis.utils.PageResult;
import com.chushang.security.annotation.RequiresPermissions;
import com.chushang.security.auth.AuthUtil;
import com.chushang.security.entity.vo.LoginUser;
import com.chushang.system.entity.vo.SysUserOnline;
import com.chushang.system.service.ISysUserOnlineService;
import lombok.extern.java.Log;
import org.springframework.beans.factory.annotation.Autowired;
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;
/**
* 在线用户监控
*
* @author ruoyi
*/
@RestController
@RequestMapping("/online")
public class SysUserOnlineController
{
@Autowired
private ISysUserOnlineService userOnlineService;
@RequiresPermissions("monitor:online:list")
@GetMapping("/list")
public AjaxResult list(String ipaddr, String userName)
{
CommonParam commonParam = CommonParam.buildPageRequest();
PageResult pageResult = userOnlineService.selectOnlineByIpaddr(ipaddr, userName, commonParam);
return AjaxResult.success(pageResult);
}
/**
* 强退用户
*/
@RequiresPermissions("monitor:online:forceLogout")
@SysLog(value = "在线用户", businessType = BusinessType.FORCE)
@DeleteMapping("/{tokenId}")
public AjaxResult forceLogout(@PathVariable String tokenId)
{
userOnlineService.forceLogout(tokenId);
return AjaxResult.success();
}
}

View File

@ -7,24 +7,24 @@ import com.chushang.common.core.util.StringUtils;
import com.chushang.common.core.web.AjaxResult;
import com.chushang.common.core.web.Result;
import com.chushang.common.log.annotation.SysLog;
import com.chushang.common.mybatis.page.CommonParam;
import com.chushang.security.annotation.InnerAuth;
import com.chushang.security.annotation.RequiresPermissions;
import com.chushang.security.service.TokenService;
import com.chushang.security.utils.SecurityUtils;
import com.chushang.system.entity.bo.PasswordForm;
import com.chushang.system.entity.dto.ListUserDTO;
import com.chushang.system.entity.po.SysPost;
import com.chushang.system.entity.po.SysRole;
import com.chushang.system.entity.po.SysUser;
import com.chushang.system.entity.po.SysUserData;
import com.chushang.security.entity.vo.LoginUser;
import com.chushang.system.feign.RemoteUserService;
import com.chushang.system.service.ISysPermissionService;
import com.chushang.system.service.ISysRoleService;
import com.chushang.system.service.ISysUserDataService;
import com.chushang.system.service.ISysUserService;
import com.chushang.system.service.*;
import org.apache.commons.lang3.ArrayUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.validation.Valid;
import java.util.*;
@ -42,6 +42,8 @@ public class UserController implements RemoteUserService {
@Autowired
ISysRoleService sysRoleService;
@Autowired
ISysPostService sysPostService;
@Autowired
ISysPermissionService permissionService;
@Autowired
ISysUserDataService userDataService;
@ -53,7 +55,7 @@ public class UserController implements RemoteUserService {
*/
@GetMapping(value = "/list")
// 权限校验 -- 菜单权限
@RequiresPermissions("sys:user:list")
@RequiresPermissions("system:user:list")
public AjaxResult listUser(ListUserDTO listUserDTO) {
return sysUserService.listUser(listUserDTO);
}
@ -120,27 +122,33 @@ public class UserController implements RemoteUserService {
/**
* 根据用户编号获取详细信息
*/
@RequiresPermissions("sys:user:query")
@RequiresPermissions("system:user:query")
@GetMapping(value = {"/", "/{userId}"})
public AjaxResult getInfo(@PathVariable(value = "userId", required = false) Integer userId) {
sysUserService.checkUserDataScope(new SysUser(userId));
AjaxResult ajax = AjaxResult.success();
List<SysRole> roles = sysRoleService.selectRoleAll(new SysRole());
List<SysPost> posts = sysPostService.allPostList();
// 角色
ajax.put("roles", SysUser.isAdmin(userId) || SecurityUtils.isAdmin() ? roles : roles.stream().filter(r -> !r.isAdmin()).collect(Collectors.toList()));
// 岗位
ajax.put("posts", posts);
if (StringUtils.isNotNull(userId)) {
SysUser sysUser = sysUserService.selectUserById(userId);
sysUser.setPassword("");
sysUser.setSalt("");
ajax.put(AjaxResult.DATA_TAG, sysUser);
ajax.put("postIds", sysPostService.selectPostListByUserId(userId));
ajax.put("roleIds", sysUser.getRoles().stream().map(SysRole::getRoleId).collect(Collectors.toList()));
}
return ajax;
}
@SysLog("保存用户")
@PostMapping("/save")
@RequiresPermissions(value = "sys:user:save")
@RequiresPermissions(value = "system:user:save")
public AjaxResult save(@RequestBody SysUser user) {
user.setCreateBy(SecurityUtils.getUsername());
@ -156,7 +164,7 @@ public class UserController implements RemoteUserService {
*/
@SysLog("修改用户")
@PostMapping("/update")
@RequiresPermissions("sys:user:update")
@RequiresPermissions("system:user:update")
public AjaxResult update(@RequestBody SysUser user) {
sysUserService.checkUserAllowed(user);
@ -173,7 +181,7 @@ public class UserController implements RemoteUserService {
*/
@SysLog("删除用户")
@DeleteMapping("/{userIds}")
@RequiresPermissions("sys:user:delete")
@RequiresPermissions("system:user:delete")
public AjaxResult delete(@PathVariable Integer[] userIds) {
if (ArrayUtils.contains(userIds, 1)) {
return AjaxResult.error("系统管理员不能删除");
@ -191,7 +199,7 @@ public class UserController implements RemoteUserService {
/**
* 修改自己的
*/
@RequiresPermissions("sys:user:updatePwd")
@RequiresPermissions("system:user:updatePwd")
@SysLog("修改密码")
@PutMapping("/updatePwd")
public AjaxResult updatePwd(@RequestBody @Valid PasswordForm form)
@ -219,7 +227,7 @@ public class UserController implements RemoteUserService {
/**
* 重置密码 别人的
*/
@RequiresPermissions("sys:user:resetPwd")
@RequiresPermissions("system:user:resetPwd")
@SysLog("重置密码")
@PutMapping("/resetPwd/{userId}")
public AjaxResult resetPwd(@RequestBody @Valid PasswordForm form,
@ -238,7 +246,7 @@ public class UserController implements RemoteUserService {
/**
* 状态修改
*/
@RequiresPermissions("sys:user:changeStatus")
@RequiresPermissions("system:user:changeStatus")
@SysLog("修改用户状态")
@PutMapping("/changeStatus")
public AjaxResult changeStatus(@RequestBody SysUser user)
@ -253,7 +261,7 @@ public class UserController implements RemoteUserService {
/**
* 根据用户编号获取授权角色
*/
@RequiresPermissions("sys:user:query")
@RequiresPermissions("system:user:query")
@GetMapping("/authRole/{userId}")
public AjaxResult authRole(@PathVariable Integer userId)
{
@ -271,7 +279,7 @@ public class UserController implements RemoteUserService {
/**
* 用户授权角色
*/
@RequiresPermissions("sys:user:auth")
@RequiresPermissions("system:user:auth")
@SysLog("用户授权")
@PutMapping("/authRole")
public AjaxResult insertAuthRole(Integer userId, Integer[] roleIds)
@ -301,19 +309,46 @@ public class UserController implements RemoteUserService {
sysUserVo.setSysUser(sysUser);
sysUserVo.setRoles(roles);
sysUserVo.setPermissions(permissions);
// todo 用户拥有的数据权限
List<SysUserData> userDataList = userDataService.listUserData(sysUser);
// 默认传递一个空Map --> 拥有管理员
sysUserVo.setAuthDataMap(new HashMap<>());
if (CollectionUtil.isNotEmpty(userDataList)){
Map<String, Set<String>> authDataMap = new HashMap<>();
// 对应的数据权限
for (SysUserData sysUserData : userDataList) {
authDataMap.put(sysUserData.getDataType().getCodeType(),
new HashSet<>(JSONUtil.toList(sysUserData.getDataValue(), String.class)));
}
sysUserVo.setAuthDataMap(authDataMap);
}
// if (CollectionUtil.isNotEmpty(userDataList)){
// Map<String, Set<String>> authDataMap = new HashMap<>();
// // 对应的数据权限
// for (SysUserData sysUserData : userDataList) {
// authDataMap.put(sysUserData.getDataType().getCodeType(),
// new HashSet<>(JSONUtil.toList(sysUserData.getDataValue(), String.class)));
// }
// sysUserVo.setAuthDataMap(authDataMap);
// }
return Result.ok(sysUserVo);
}
/**
* todo 导入用户
*/
@PostMapping(value = "/import")
@RequiresPermissions("system:user:import")
public AjaxResult importUser(MultipartFile file){
return AjaxResult.error("暂未开放");
}
/**
* todo 导出用户
*/
@GetMapping(value = "/export")
@RequiresPermissions("system:user:export")
public AjaxResult exportUser(){
return AjaxResult.error("暂未开放");
}
/**
* todo 下载导入模版
*/
@GetMapping(value = "/import/template")
@RequiresPermissions("system:user:import")
public AjaxResult importTemplate(){
return AjaxResult.error("暂未开放");
}
}

View File

@ -2,10 +2,17 @@ package com.chushang.system.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.chushang.system.entity.po.SysPost;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import java.util.List;
/**
* @auther: zhao
* @date: 2024/5/9 15:49
*/
public interface SysPostMapper extends BaseMapper<SysPost> {
@Select("select p.post_id from sys_post p left join sys_user_post up on up.post_id = p.post_id " +
"left join sys_user u on u.user_id = up.user_id where u.user_id = #{userId}")
List<Long> selectPostListByUserId(@Param("userId") Integer userId);
}

View File

@ -1,14 +1,20 @@
package com.chushang.system.service;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.chushang.common.core.util.StringUtils;
import com.chushang.common.mybatis.enums.Operator;
import com.chushang.common.mybatis.page.CommonParam;
import com.chushang.common.mybatis.utils.PageResult;
import com.chushang.system.entity.po.SysPost;
import com.chushang.system.entity.po.SysRole;
import java.util.List;
import static net.sf.jsqlparser.util.validation.metadata.NamedObject.role;
/**
* @auther: zhao
* @date: 2024/5/9 15:53
@ -27,8 +33,21 @@ public interface ISysPostService extends IService<SysPost> {
return this.list(buildWrapper(post, commonParam));
}
default boolean checkPostCodeUnique(SysPost sysPost, CommonParam commonParam){
return this.count(buildWrapper(sysPost, commonParam)) > 0;
default List<SysPost> allPostList(){
SysPost sysPost = new SysPost();
sysPost.setStatus(true);
return allPostList(sysPost, CommonParam.buildAllRequest());
}
default boolean checkPostUnique(SysPost post){
int postId = ObjectUtil.isNull(post.getPostId()) ? -1 : post.getPostId();
SysPost info = getOne(new LambdaQueryWrapper<SysPost>()
.eq(StringUtils.isNotEmpty(post.getPostName()),SysPost::getPostName, post.getPostName())
.eq(StringUtils.isNotEmpty(post.getPostCode()),SysPost::getPostCode, post.getPostCode())
.last(Operator.LIMIT_ONE.getCharacter()));
return ObjectUtil.isNotNull(info) && info.getPostId() != postId;
}
List<Long> selectPostListByUserId(Integer userId);
}

View File

@ -1,132 +1,157 @@
//package com.chushang.system.service;
//
//import com.chushang.common.core.constant.CacheConstants;
//import com.chushang.common.core.util.StringUtils;
//import com.chushang.security.entity.vo.LoginUser;
//import com.chushang.system.entity.vo.SysUserOnline;
//import lombok.extern.slf4j.Slf4j;
//import org.redisson.api.RKeys;
//import org.redisson.api.RedissonClient;
//import org.springframework.stereotype.Service;
//
//import javax.annotation.Resource;
//import java.util.ArrayList;
//import java.util.Collection;
//import java.util.Collections;
//import java.util.List;
//
///**
// * 在线用户 服务层
// *
// * @author ruoyi
// */
//@Slf4j
//@Service
//public class ISysUserOnlineService
//{
//
// @Resource
// RedissonClient redissonClient;
//
// public SysUserOnline selectOnlineByIpaddr(){
//
// Collection<String> keys = new ArrayList<>();
// redissonClient.getKeys().getKeys().forEach(key-> {
// if (key.startsWith(CacheConstants.LOGIN_TOKEN_KEY)){
// keys.add(key);
// }
// });
// List<SysUserOnline> userOnlineList = new ArrayList<SysUserOnline>();
// for (String key : keys)
// {
// LoginUser user = redisService.getCacheObject(key);
// if (StringUtils.isNotEmpty(ipaddr) && StringUtils.isNotEmpty(userName))
// {
// userOnlineList.add(userOnlineService.selectOnlineByInfo(ipaddr, userName, user));
// }
// else if (StringUtils.isNotEmpty(ipaddr))
// {
// userOnlineList.add(userOnlineService.selectOnlineByIpaddr(ipaddr, user));
// }
// else if (StringUtils.isNotEmpty(userName))
// {
// userOnlineList.add(userOnlineService.selectOnlineByUserName(userName, user));
// }
// else
// {
// userOnlineList.add(userOnlineService.loginUserToUserOnline(user));
// }
// }
// Collections.reverse(userOnlineList);
// userOnlineList.removeAll(Collections.singleton(null));
// }
//
// /**
// * 通过登录地址查询信息
// *
// * @param ipaddr 登录地址
// * @param user 用户信息
// * @return 在线用户信息
// */
// public SysUserOnline selectOnlineByIpaddr(String ipaddr, LoginUser user)
// {
// if (StringUtils.equals(ipaddr, user.getIpaddr()))
// {
// return loginUserToUserOnline(user);
// }
// return null;
// }
//
// /**
// * 通过用户名称查询信息
// *
// * @param userName 用户名称
// * @param user 用户信息
// * @return 在线用户信息
// */
// public SysUserOnline selectOnlineByUserName(String userName, LoginUser user)
// {
// if (StringUtils.equals(userName, user.getUsername()))
// {
// return loginUserToUserOnline(user);
// }
// return null;
// }
//
// /**
// * 通过登录地址/用户名称查询信息
// *
// * @param ipaddr 登录地址
// * @param userName 用户名称
// * @param user 用户信息
// * @return 在线用户信息
// */
// public SysUserOnline selectOnlineByInfo(String ipaddr, String userName, LoginUser user)
// {
// if (StringUtils.equals(ipaddr, user.getIpaddr()) && StringUtils.equals(userName, user.getUsername()))
// {
// return loginUserToUserOnline(user);
// }
// return null;
// }
//
// /**
// * 设置在线用户信息
// *
// * @param user 用户信息
// * @return 在线用户
// */
// public SysUserOnline loginUserToUserOnline(LoginUser user)
// {
// if (StringUtils.isNull(user))
// {
// return null;
// }
// SysUserOnline sysUserOnline = new SysUserOnline();
// sysUserOnline.setTokenId(user.getToken());
// sysUserOnline.setUserName(user.getUsername());
// sysUserOnline.setIpaddr(user.getIpaddr());
// sysUserOnline.setLoginTime(user.getLoginTime());
// return sysUserOnline;
// }
//}
package com.chushang.system.service;
import cn.hutool.core.net.Ipv4Util;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.extra.servlet.ServletUtil;
import cn.hutool.system.SystemUtil;
import com.chushang.common.core.constant.CacheConstants;
import com.chushang.common.core.util.IPUtils;
import com.chushang.common.core.util.StringUtils;
import com.chushang.common.mybatis.page.CommonParam;
import com.chushang.common.mybatis.utils.PageClass;
import com.chushang.common.mybatis.utils.PageResult;
import com.chushang.security.auth.AuthUtil;
import com.chushang.security.entity.vo.LoginUser;
import com.chushang.security.service.TokenService;
import com.chushang.system.entity.vo.SysUserOnline;
import lombok.extern.slf4j.Slf4j;
import org.redisson.api.RBucket;
import org.redisson.api.RedissonClient;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
/**
* 在线用户 服务层
*
* @author ruoyi
*/
@Slf4j
@Service
public class ISysUserOnlineService
{
@Resource
RedissonClient redissonClient;
@Resource
TokenService tokenService;
public PageResult selectOnlineByIpaddr(String ipaddr, String userName, CommonParam commonParam){
Collection<String> keys = new ArrayList<>();
redissonClient.getKeys().getKeys().forEach(key-> {
if (key.startsWith(CacheConstants.LOGIN_TOKEN_KEY)){
keys.add(key);
}
});
List<SysUserOnline> userOnlineList = new ArrayList<>();
for (String key : keys)
{
RBucket<LoginUser> bucket = redissonClient.getBucket(key);
if (!bucket.isExists()){
continue;
}
LoginUser user = bucket.get();
if (StringUtils.isNotEmpty(ipaddr) && StringUtils.isNotEmpty(userName))
{
userOnlineList.add(selectOnlineByInfo(ipaddr, userName, user));
}
else if (StringUtils.isNotEmpty(ipaddr))
{
userOnlineList.add(selectOnlineByIpaddr(ipaddr, user));
}
else if (StringUtils.isNotEmpty(userName))
{
userOnlineList.add(selectOnlineByUserName(userName, user));
}
else
{
userOnlineList.add(loginUserToUserOnline(user));
}
}
Collections.reverse(userOnlineList);
userOnlineList.removeAll(Collections.singleton(null));
List<SysUserOnline> userOnlines = new PageClass<SysUserOnline>()
.page(commonParam.getPage(), commonParam.getLimit(), userOnlineList);
return new PageResult(userOnlines, userOnlineList.size(), commonParam.getLimit(), commonParam.getPage());
}
/**
* 通过登录地址查询信息
*
* @param ipaddr 登录地址
* @param user 用户信息
* @return 在线用户信息
*/
public SysUserOnline selectOnlineByIpaddr(String ipaddr, LoginUser user)
{
if (StringUtils.equals(ipaddr, user.getIpaddr()))
{
return loginUserToUserOnline(user);
}
return null;
}
/**
* 通过用户名称查询信息
*
* @param userName 用户名称
* @param user 用户信息
* @return 在线用户信息
*/
public SysUserOnline selectOnlineByUserName(String userName, LoginUser user)
{
if (StringUtils.equals(userName, user.getUsername()))
{
return loginUserToUserOnline(user);
}
return null;
}
/**
* 通过登录地址/用户名称查询信息
*
* @param ipaddr 登录地址
* @param userName 用户名称
* @param user 用户信息
* @return 在线用户信息
*/
public SysUserOnline selectOnlineByInfo(String ipaddr, String userName, LoginUser user)
{
if (StringUtils.equals(ipaddr, user.getIpaddr()) && StringUtils.equals(userName, user.getUsername()))
{
return loginUserToUserOnline(user);
}
return null;
}
/**
* 设置在线用户信息
*
* @param user 用户信息
* @return 在线用户
*/
public SysUserOnline loginUserToUserOnline(LoginUser user)
{
if (StringUtils.isNull(user))
{
return null;
}
SysUserOnline sysUserOnline = new SysUserOnline();
sysUserOnline.setTokenId(user.getToken());
sysUserOnline.setUserName(user.getUsername());
sysUserOnline.setIpaddr(user.getIpaddr());
sysUserOnline.setLoginTime(user.getLoginTime());
sysUserOnline.setLoginLocation(IPUtils.getLocalCityInfo(user.getIpaddr()));
sysUserOnline.setBrowser(IPUtils.getBrowser());
sysUserOnline.setOs(IPUtils.osName());
return sysUserOnline;
}
public void forceLogout(String tokenId) {
tokenService.forcedRetreatByTokenKey(tokenId);
}
}

View File

@ -1,7 +1,9 @@
package com.chushang.system.service;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.IService;
import com.chushang.common.core.exception.ResultException;
import com.chushang.common.core.web.AjaxResult;
import com.chushang.security.utils.SecurityUtils;
import com.chushang.system.entity.dto.ListUserDTO;
@ -31,7 +33,15 @@ public interface ISysUserService extends IService<SysUser> {
void deleteBatch(Integer[] userIds);
void checkUserAllowed(SysUser sysUser);
/**
* 判断是否为超级管理员 账号
*/
default void checkUserAllowed(SysUser sysUser){
// 不为空, 不允许修改时, 应该是判断, 当前用户是否为超级管理员
if (ObjectUtil.isNotNull(sysUser.getUserId()) && SysUser.isAdmin(sysUser.getUserId())){
throw new ResultException("不允许操作超级管理员用户");
}
}
default boolean updatePassword(Integer userId, String oldPassword, String newPassword){
return this.update(SysUser.builder()

View File

@ -1,13 +1,29 @@
package com.chushang.system.service;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.chushang.common.core.web.AjaxResult;
import com.chushang.common.mybatis.page.CommonParam;
import com.chushang.common.mybatis.utils.PageResult;
import com.chushang.system.entity.dto.ListLoginLogDTO;
import com.chushang.system.entity.po.SysDictType;
import com.chushang.system.entity.po.SysLoginInfo;
import com.chushang.system.entity.po.SysPost;
public interface SysLoginInfoService extends IService<SysLoginInfo> {
default AjaxResult saveLoginInfo(SysLoginInfo sysLogininfo){
default AjaxResult saveLoginInfo(SysLoginInfo sysLogininfo) {
return save(sysLogininfo) ? AjaxResult.success() : AjaxResult.error();
}
LambdaQueryWrapper<SysLoginInfo> buildWrapper(SysLoginInfo loginInfo, CommonParam commonParam);
default PageResult pagePostList(SysLoginInfo loginInfo, CommonParam commonParam) {
IPage<SysLoginInfo> page = this.page(
new com.baomidou.mybatisplus.extension.plugins.pagination.Page<>(commonParam.getPage(), commonParam.getLimit()),
buildWrapper(loginInfo, commonParam)
);
return new PageResult(page);
}
}

View File

@ -43,7 +43,7 @@ public class SysDictDataServiceImpl extends ServiceImpl<SysDictDataMapper, SysDi
}
List<SysDictData> list = list(new LambdaQueryWrapper<SysDictData>()
.eq(SysDictData::getDictType, dictType)
.eq(SysDictData::getStatus, "0")
.eq(SysDictData::getStatus, true)
.orderByAsc(SysDictData::getDictSort)
);
if (CollectionUtil.isNotEmpty(list)) {
@ -80,7 +80,7 @@ public class SysDictDataServiceImpl extends ServiceImpl<SysDictDataMapper, SysDi
.eq(StringUtils.isNotEmpty(dictData.getCssClass()), SysDictData::getCssClass, dictData.getCssClass())
.eq(StringUtils.isNotEmpty(dictData.getListClass()), SysDictData::getListClass, dictData.getListClass())
.eq(StringUtils.isNotEmpty(dictData.getIsDefault()), SysDictData::getIsDefault, dictData.getIsDefault())
.eq(StringUtils.isNotEmpty(dictData.getStatus()), SysDictData::getStatus, dictData.getStatus());
.eq(null != dictData.getStatus(), SysDictData::getStatus, dictData.getStatus());
}
}

View File

@ -40,6 +40,6 @@ public class SysDictTypeServiceImpl extends ServiceImpl<SysDictTypeMapper, SysDi
.eq(null != dictType.getDictId(), SysDictType::getDictId, dictType.getDictId())
.eq(StringUtils.isNotEmpty(dictType.getDictType()), SysDictType::getDictType, dictType.getDictType())
.eq(StringUtils.isNotEmpty(dictType.getDictName()), SysDictType::getDictName, dictType.getDictName())
.eq(StringUtils.isNotEmpty(dictType.getStatus()), SysDictType::getStatus, dictType.getStatus());
.eq(null != dictType.getStatus(), SysDictType::getStatus, dictType.getStatus());
}
}

View File

@ -1,14 +1,30 @@
package com.chushang.system.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.chushang.common.mybatis.page.CommonParam;
import com.chushang.system.entity.po.SysDictType;
import com.chushang.system.entity.po.SysLoginInfo;
import com.chushang.system.entity.po.SysPost;
import com.chushang.system.mapper.SysLoginInfoMapper;
import com.chushang.system.service.SysLoginInfoService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
@Slf4j
@Service
public class SysLoginInfoServiceImpl extends ServiceImpl<SysLoginInfoMapper, SysLoginInfo> implements SysLoginInfoService {
@Override
public LambdaQueryWrapper<SysLoginInfo> buildWrapper(SysLoginInfo loginInfo, CommonParam commonParam) {
return new QueryWrapper<SysLoginInfo>()
.orderBy(true, "asc".equals(commonParam.getIsAsc()), commonParam.getOrderBy())
.lambda()
.eq(null != loginInfo.getInfoId(), SysLoginInfo::getInfoId, loginInfo.getInfoId())
.eq(StringUtils.isNotEmpty(loginInfo.getUserName()), SysLoginInfo::getUserName, loginInfo.getUserName())
.eq(StringUtils.isNotEmpty(loginInfo.getIpaddr()), SysLoginInfo::getIpaddr, loginInfo.getIpaddr())
.eq(null != loginInfo.getStatus(), SysLoginInfo::getStatus, loginInfo.getStatus());
}
}

View File

@ -106,12 +106,12 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
{
RouterVo router = new RouterVo();
// visible 为1 代表显示路由
router.setHidden("0".equals(menu.getVisible()));
router.setHidden(!menu.getVisible());
router.setName(getRouteName(menu));
router.setPath(getRouterPath(menu));
router.setComponent(getComponent(menu));
router.setQuery(menu.getQuery());
router.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon(), "0".equals(menu.getCache()), menu.getPath()));
router.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon(), !menu.getCache(), menu.getPath()));
List<SysMenu> cMenus = menu.getChildren();
if (!cMenus.isEmpty() && MenuTypeEnum.CATALOG.equals(menu.getMenuType()))
{
@ -127,7 +127,7 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
children.setPath(menu.getPath());
children.setComponent(menu.getComponent());
children.setName(StringUtils.capitalize(menu.getPath()));
children.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon(), "0".equals(menu.getCache()), menu.getPath()));
children.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon(), !menu.getCache(), menu.getPath()));
children.setQuery(menu.getQuery());
childrenList.add(children);
router.setChildren(childrenList);
@ -176,7 +176,7 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
*/
public boolean isMenuFrame(SysMenu menu)
{
return menu.getParentId() == 0 && MenuTypeEnum.MENU.equals(menu.getMenuType()) && "1".equals(menu.getFrame());
return menu.getParentId() == 0 && MenuTypeEnum.MENU.equals(menu.getMenuType()) && menu.getFrame();
}
/**
@ -195,7 +195,7 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
}
// 非外链并且是一级目录类型为目录
if (0 == menu.getParentId() && MenuTypeEnum.CATALOG.equals(menu.getMenuType())
&& "1".equals(menu.getFrame()))
&& menu.getFrame())
{
routerPath = "/" + menu.getPath();
}
@ -214,10 +214,10 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
menu.setMenuName("系统管理");
menu.setPath("system");
menu.setMenuType(MenuTypeEnum.CATALOG);
menu.setFrame("1");
menu.setCache("1");
menu.setVisible("1");
menu.setStatus("1");
menu.setFrame(true);
menu.setCache(true);
menu.setVisible(true);
menu.setStatus(true);
String routerPath = sysMenuService.getRouterPath(menu);
System.out.println(routerPath);
}
@ -230,7 +230,7 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
*/
public boolean isInnerLink(SysMenu menu)
{
return "1".equals(menu.getFrame()) && StringUtils.startsWithAny(menu.getPath(), Constants.HTTP, Constants.HTTPS);
return menu.getFrame() && StringUtils.startsWithAny(menu.getPath(), Constants.HTTP, Constants.HTTPS);
}
/**
@ -295,7 +295,7 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
private List<SysMenu> buildMenuTree(List<SysMenu> menus) {
List<SysMenu> returnList = new ArrayList<>();
List<Integer> tempList = menus.stream().map(SysMenu::getMenuId).collect(Collectors.toList());
List<Integer> tempList = menus.stream().map(SysMenu::getMenuId).toList();
for (SysMenu menu : menus) {
// 如果是顶级节点, 遍历该父节点的所有子节点
if (!tempList.contains(menu.getParentId())) {
@ -341,7 +341,7 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
private boolean hasChild(List<SysMenu> list, SysMenu t)
{
return getChildList(list, t).size() > 0;
return !getChildList(list, t).isEmpty();
}
/**

View File

@ -13,6 +13,8 @@ import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* @auther: zhao
* @date: 2024/5/9 18:33
@ -28,6 +30,11 @@ public class SysPostServiceImpl extends ServiceImpl<SysPostMapper, SysPost> impl
.eq(null != sysPost.getPostId(), SysPost::getPostId, sysPost.getPostId())
.eq(StringUtils.isNotEmpty(sysPost.getPostCode()), SysPost::getPostCode, sysPost.getPostCode())
.eq(StringUtils.isNotEmpty(sysPost.getPostName()), SysPost::getPostName, sysPost.getPostName())
.eq(StringUtils.isNotEmpty(sysPost.getStatus()), SysPost::getStatus, sysPost.getStatus());
.eq(null != sysPost.getStatus(), SysPost::getStatus, sysPost.getStatus());
}
@Override
public List<Long> selectPostListByUserId(Integer userId) {
return baseMapper.selectPostListByUserId(userId);
}
}

View File

@ -144,15 +144,6 @@ public class SysUserServiceImpl extends ServiceImpl<SysUserMapper, SysUser> impl
}
/**
* 校验用户是否允许操作
*/
@Override
public void checkUserAllowed(SysUser sysUser) {
if (ObjectUtil.isNotNull(sysUser.getUserId()) && sysUser.isAdmin()){
throw new ResultException("不允许操作超级管理员用户");
}
}
@Override
@Transactional

View File

@ -55,7 +55,7 @@ mybatis-plus:
call-setters-on-nulls: true
jdbc-type-for-null: 'null'
default-enum-type-handler: com.baomidou.mybatisplus.core.handlers.MybatisEnumTypeHandler
#log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
# feign 配置
feign:
sentinel:
@ -87,5 +87,6 @@ management:
# 日志监听配置 -- 如果启用的话,需要配置 kafka 的路径
logging:
config: classpath:logback-nacos.xml
pagehelper:
async-count:
banner: false

View File

@ -12,6 +12,11 @@
<result property="createTime" column="create_time"/>
<result property="updateTime" column="update_time"/>
<result property="salt" column="salt"/>
<result property="phone" column="phone"/>
<result property="email" column="email"/>
<result property="nickName" column="nick_name"/>
<result property="gender" column="gender"/>
<result property="avatar" column="avatar"/>
<association property="dept" resultMap="deptResult"/>
<collection property="roles" javaType="java.util.List" resultMap="RoleResult"/>
</resultMap>
@ -36,6 +41,7 @@
<sql id="selectUserVo">
select u.user_id, u.dept_id, u.username, u.password, u.status, u.del_state, u.create_by, u.create_time,u.update_time,u.salt,
u.phone,u.nick_name,u.gender,u.avatar,u.email,
d.parent_dept_id, d.ancestors, d.dept_name, d.order_num as dept_order_num,d.status as dept_status,
r.role_id, r.role_name, r.role_key,r.order_num as role_order_num, r.data_scope, r.status as role_status
from sys_user u
@ -76,7 +82,7 @@
</select>
<select id="listUser" parameterType="com.chushang.system.entity.dto.ListUserDTO" resultMap="SysUserResult">
select u.user_id, u.dept_id, u.username, u.status, u.del_state, u.create_by, u.create_time, d.dept_name
select u.user_id, u.dept_id, u.username, u.phone,u.nick_name,u.gender,u.email,u.avatar, u.status, u.del_state, u.create_by, u.create_time, d.dept_name
from sys_user u
left join sys_dept d on u.dept_id = d.dept_id
where u.del_state = FALSE
@ -86,6 +92,12 @@
<if test="listUser.deptId != null">
AND d.dept_id = #{listUser.deptId}
</if>
<if test="listUser.status != null">
AND u.status = #{listUser.status}
</if>
<if test="listUser.phone != null and listUser.phone != ''">
AND u.phone like concat('%', #{listUser.phone} , '%')
</if>
${listUser.sqlParam.dataScope}
</select>

10
pom.xml
View File

@ -33,7 +33,7 @@
<id>local</id>
<properties>
<profiles.active>local</profiles.active>
<nacos.host>192.168.116.115:8848</nacos.host>
<nacos.host>127.0.0.1:8848</nacos.host>
<nacos.namespace>ece94e7d-4792-48d2-b1f8-06334b530944</nacos.namespace>
<nacos.group>DEFAULT_GROUP</nacos.group>
<nacos.username>nacos</nacos.username>
@ -99,7 +99,7 @@
<commons-net.version>3.10.0</commons-net.version>
<com-jcraft-jsch.version>0.1.55</com-jcraft-jsch.version>
<fastjson2.version>2.0.43</fastjson2.version>
<ip2region.version>2.7.0</ip2region.version>
<maven-compiler-plugin.version>3.11.0</maven-compiler-plugin.version>
<maven-surefire-plugin.version>3.1.0</maven-surefire-plugin.version>
@ -555,6 +555,12 @@
<artifactId>fastjson2</artifactId>
<version>${fastjson2.version}</version>
</dependency>
<!--ip地址解析-->
<dependency>
<groupId>org.lionsoul</groupId>
<artifactId>ip2region</artifactId>
<version>${ip2region.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<build>