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 hadoop 安装教程 https://www.cnblogs.com/jhno1/p/15218656.html
mongo 单节点开启事务 https://www.jianshu.com/p/5a03b956ce1c mongo 单节点开启事务 https://www.jianshu.com/p/5a03b956ce1c

View File

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

View File

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

View File

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

View File

@ -12,7 +12,7 @@ public class AssertUtil {
public 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) { if (condition) {
throw new ResultException(msg); throw new ResultException(msg);
} }

View File

@ -10,19 +10,185 @@ import java.util.Objects;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
import javax.servlet.http.HttpServletRequest; 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 com.alibaba.fastjson2.JSON;
import org.lionsoul.ip2region.xdb.Searcher;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.http.HttpHeaders; import org.springframework.http.HttpHeaders;
import org.springframework.http.server.reactive.ServerHttpRequest; import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
public class IPUtils { public class IPUtils {
private static final Logger log = LoggerFactory.getLogger(IPUtils.class); 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() { 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) { public static String clientIp(HttpServletRequest request) {
String realIps = clientIps(request); String realIps = clientIps(request);
return realIps.contains(",") ? realIps.split(",")[0] : realIps; return realIps.contains(",") ? realIps.split(",")[0] : realIps;

View File

@ -10,7 +10,7 @@ import java.io.Serializable;
*/ */
@UtilityClass @UtilityClass
public class EnumUtils { 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){ if (null == code){
return null; return null;
} }
@ -22,8 +22,8 @@ public class EnumUtils {
return null; return null;
} }
public interface CodeEnum<C,S extends Serializable> { public interface CodeEnum<S extends Serializable> {
C getCode(); Integer getCode();
S getMsg(); S getMsg();
} }
} }

View File

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

View File

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

View File

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

View File

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

View File

@ -111,9 +111,12 @@ public class CommonParam implements Serializable {
CommonParam pageDomain = new CommonParam(); CommonParam pageDomain = new CommonParam();
pageDomain.setPage(Convert.toInt(ServletUtils.getParameter(PAGE_NUM), 1)); pageDomain.setPage(Convert.toInt(ServletUtils.getParameter(PAGE_NUM), 1));
pageDomain.setLimit(Convert.toInt(ServletUtils.getParameter(PAGE_SIZE), 10)); pageDomain.setLimit(Convert.toInt(ServletUtils.getParameter(PAGE_SIZE), 10));
pageDomain.setOrderBy(ServletUtils.getParameter(ORDER_BY_COLUMN)); if (StringUtils.isNotEmpty(ServletUtils.getParameter(ORDER_BY_COLUMN)))
pageDomain.setIsAsc(ServletUtils.getParameter(IS_ASC)); pageDomain.setOrderBy(ServletUtils.getParameter(ORDER_BY_COLUMN));
pageDomain.setGroupStr(ServletUtils.getParameter(GROUP_STR)); 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; 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 rows 列表数据
* @param totalCount 总记录数 * @param total 总记录数
* @param pageSize 每页记录数 * @param pageSize 每页记录数
* @param currPage 当前页数 * @param currPage 当前页数
*/ */
public PageResult(List<?> list, long totalCount, long pageSize, long currPage) { public PageResult(List<?> rows, long total, long pageSize, long currPage) {
this.list = list; this.rows = rows;
this.totalCount = (int)totalCount; this.total = (int)total;
this.pageSize = (int)pageSize; this.pageSize = (int)pageSize;
this.currPage = (int)currPage; 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) { public PageResult(List<?> rows, IPage<?> page) {
this.list = list; this.rows = rows;
if (null != page){ if (null != page){
this.totalCount = (int)page.getTotal(); this.total = (int)page.getTotal();
this.pageSize = (int)page.getSize(); this.pageSize = (int)page.getSize();
this.currPage = (int)page.getCurrent(); 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) { public PageResult(IPage<?> page) {
this.list = page.getRecords(); this.rows = page.getRecords();
this.totalCount = (int)page.getTotal(); this.total = (int)page.getTotal();
this.pageSize = (int)page.getSize(); this.pageSize = (int)page.getSize();
this.currPage = (int)page.getCurrent(); this.currPage = (int)page.getCurrent();
this.totalPage = (int)page.getPages(); this.totalPage = (int)page.getPages();

View File

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

View File

@ -193,4 +193,12 @@ public class TokenService
log.debug("强退 {} 个用户, userId : {}.",l, userId ); 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; package com.chushang.gateway.config.properties;
import lombok.Getter;
import lombok.Setter;
import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.cloud.context.config.annotation.RefreshScope; import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
@ -9,6 +11,8 @@ import org.springframework.context.annotation.Configuration;
* *
* @author ruoyi * @author ruoyi
*/ */
@Setter
@Getter
@Configuration @Configuration
@RefreshScope @RefreshScope
@ConfigurationProperties(prefix = "security.captcha") @ConfigurationProperties(prefix = "security.captcha")
@ -24,23 +28,4 @@ public class CaptchaProperties
*/ */
private String type; 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 { }else {
token = null; token = null;
// 如果为 sanyi/job , 通过cookie 获取token // 如果为 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"); HttpCookie cookie = request.getCookies().getFirst("Admin-Token");
if (ObjectUtil.isNotEmpty(cookie)){ if (ObjectUtil.isNotEmpty(cookie)){
assert cookie != null; assert cookie != null;

View File

@ -21,6 +21,8 @@ import javax.annotation.Resource;
import javax.imageio.ImageIO; import javax.imageio.ImageIO;
import java.awt.image.BufferedImage; import java.awt.image.BufferedImage;
import java.io.IOException; import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
@ -47,44 +49,42 @@ public class ValidateCodeServiceImpl implements ValidateCodeService {
*/ */
@Override @Override
public AjaxResult createCaptcha() throws ResultException { public AjaxResult createCaptcha() throws ResultException {
AjaxResult ajax = AjaxResult.success();
boolean captchaOnOff = captchaProperties.getEnabled(); boolean captchaOnOff = captchaProperties.getEnabled();
ajax.put("captchaOnOff", captchaOnOff); Map<String, Object> resultMap = new HashMap<>();
if (!captchaOnOff) { resultMap.put("captchaEnabled", captchaOnOff);
return ajax; if (captchaOnOff) {
} // 保存验证码信息
String uuid = IdUtils.getId(32);
String verifyKey = Constants.CAPTCHA_CODE_KEY + uuid;
// 保存验证码信息 String capStr, code = null;
String uuid = IdUtils.getId(32); BufferedImage image = null;
String verifyKey = Constants.CAPTCHA_CODE_KEY + uuid;
String capStr, code = null; String captchaType = captchaProperties.getType();
BufferedImage image = null; // 生成验证码
if ("math".equals(captchaType)) {
String captchaType = captchaProperties.getType(); String capText = captchaProducerMath.createText();
// 生成验证码 capStr = capText.substring(0, capText.lastIndexOf("@"));
if ("math".equals(captchaType)) { code = capText.substring(capText.lastIndexOf("@") + 1);
String capText = captchaProducerMath.createText(); image = captchaProducerMath.createImage(capStr);
capStr = capText.substring(0, capText.lastIndexOf("@")); } else if ("char".equals(captchaType)) {
code = capText.substring(capText.lastIndexOf("@") + 1); code = capStr = captchaProducer.createText();
image = captchaProducerMath.createImage(capStr); image = captchaProducer.createImage(capStr);
} else if ("char".equals(captchaType)) { }
code = capStr = captchaProducer.createText(); redissonClient.getBucket(verifyKey)
image = captchaProducer.createImage(capStr); .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) return AjaxResult.success(resultMap);
.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;
} }
/** /**

View File

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

View File

@ -35,7 +35,7 @@ public class ListDictDTO {
private String isDefault; 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 * 部门id
*/ */
private Integer deptId; private Integer deptId;
private Integer status;
private String phone;
} }

View File

@ -12,7 +12,7 @@ import lombok.Getter;
*/ */
@Getter @Getter
@AllArgsConstructor @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 "), APP(1, "appData","项目授权", " select id from sanyi_app "),
PLATFORM(2, "platformData","平台授权", " select id from sanyi_platform "), 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 @Getter
@AllArgsConstructor @AllArgsConstructor
public enum LoginStatusEnum implements EnumUtils.CodeEnum<Integer, String>, IEnum<Integer> { public enum LoginStatusEnum implements IEnum<Integer> {
LOGIN_SUCCESS(0, "登录成功"), LOGIN_SUCCESS(0, "登录成功"),
LOGOUT_SUCCESS(1, "注销成功"), LOGOUT_SUCCESS(1, "登录失败"),
REGISTER_SUCCESS(2, "注册成功成功"), REGISTER_SUCCESS(2, "注册成功"),
LOGIN_FAIL_STATUS(3, "登录失败"), LOGIN_FAIL_STATUS(3, "注销成功"),
; ;
@JsonValue @JsonValue
@ -28,9 +28,4 @@ public enum LoginStatusEnum implements EnumUtils.CodeEnum<Integer, String>, IEnu
public Integer getValue() { public Integer getValue() {
return this.code; return this.code;
} }
@Override
public String getMsg() {
return this.desc;
}
} }

View File

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

View File

@ -69,10 +69,11 @@ public class SysDictData extends BaseEntity {
private String isDefault; private String isDefault;
/** /**
* 状态0正常 1停用 * 状态1正常 0停用
* true 正常, false 停用
*/ */
@ExcelProperty(value = "状态", index = 8) @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) @ExcelProperty(value = "字典类型", index = 2)
private String dictType; private String dictType;
/** 状态(0正常 1停用) */ /** 状态(1正常 0停用) */
@ExcelProperty(value = "状态", index = 3) @ExcelProperty(value = "状态", index = 3)
private String status; private Boolean status;
/** /**
* 创建人 * 创建人
*/ */

View File

@ -59,19 +59,19 @@ public class SysMenu extends BaseEntity {
/** /**
* 是否 外链 1 为内链, 0 为外链 * 是否 外链 1 为内链, 0 为外链
*/ */
private String frame; private Boolean frame;
/** 是否缓存1缓存 0不缓存 */ /** 是否缓存1缓存 0不缓存 */
private String cache; private Boolean cache;
/** /**
* 是否显示 1 显示 * 是否显示 1 显示
*/ */
private String visible; private Boolean visible;
/** /**
* 状态 0 停用 * 状态 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) @TableId(value = "post_id", type = IdType.AUTO)
@ExcelProperty(value = "岗位序号", index = 0) @ExcelProperty(value = "岗位序号", index = 0)
private Long postId; private Integer postId;
/** 岗位编码 */ /** 岗位编码 */
@ExcelProperty(value = "岗位编码", index = 1) @ExcelProperty(value = "岗位编码", index = 1)
@ -48,9 +48,9 @@ public class SysPost extends BaseEntity
@ExcelProperty(value = "岗位排序", index = 3) @ExcelProperty(value = "岗位排序", index = 3)
private Integer postSort; private Integer postSort;
/** 状态(0正常 1停用) */ /** 状态(1正常 0停用) */
@ExcelProperty(value = "状态", index = 4) @ExcelProperty(value = "状态", index = 4)
private String status; private Boolean status;
/** /**
* 创建人 * 创建人

View File

@ -57,6 +57,25 @@ public class SysUser extends BaseEntity {
* 所属部门id * 所属部门id
*/ */
private Integer deptId; 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 { public static void main(String[] args) throws Exception {
log.info(AppStartType.START_FORMAT, AppStartType.main.type(), APP_NAME); log.info(AppStartType.START_FORMAT, AppStartType.main.type(), APP_NAME);
SpringApplication.run(SystemApplication.class, args); SpringApplication.run(SystemApplication.class, args);
log.info(AppStartType.END_FORMAT, AppStartType.main.type(), APP_NAME); 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.core.web.AjaxResult;
import com.chushang.common.log.annotation.SysLog; import com.chushang.common.log.annotation.SysLog;
import com.chushang.common.log.enums.BusinessType;
import com.chushang.security.annotation.RequiresPermissions; import com.chushang.security.annotation.RequiresPermissions;
import com.chushang.security.utils.SecurityUtils; import com.chushang.security.utils.SecurityUtils;
import com.chushang.system.entity.dto.ListDeptDTO; import com.chushang.system.entity.dto.ListDeptDTO;
@ -31,7 +32,7 @@ public class DeptController {
* 获取部门列表 * 获取部门列表
*/ */
@GetMapping("/list") @GetMapping("/list")
@RequiresPermissions("sys:dept:list") @RequiresPermissions("system:dept:list")
public AjaxResult list(ListDeptDTO listDept) public AjaxResult list(ListDeptDTO listDept)
{ {
return AjaxResult.success(sysDeptService.selectDeptList(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}") @GetMapping("/list/exclude/{deptId}")
public AjaxResult excludeChild(@PathVariable(value = "deptId", required = false) Integer 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}") @GetMapping(value = "/{deptId}")
public AjaxResult getInfo(@PathVariable Integer deptId) public AjaxResult getInfo(@PathVariable Integer deptId)
{ {
@ -76,8 +77,8 @@ public class DeptController {
/** /**
* 加载对应角色部门列表树 * 加载对应角色部门列表树
*/ */
@GetMapping(value = "/roleDept/tree/select/{roleId}") @GetMapping(value = "/roleDept/tree/{roleId}")
@RequiresPermissions("sys:role:query") @RequiresPermissions("system:role:query")
public AjaxResult roleDeptTreeSelect(@PathVariable("roleId") Integer roleId) public AjaxResult roleDeptTreeSelect(@PathVariable("roleId") Integer roleId)
{ {
List<SysDept> deptList = sysDeptService.selectDeptList(new ListDeptDTO()); List<SysDept> deptList = sysDeptService.selectDeptList(new ListDeptDTO());
@ -89,8 +90,8 @@ public class DeptController {
/** /**
* 新增部门 * 新增部门
*/ */
@RequiresPermissions("sys:dept:add") @RequiresPermissions("system:dept:add")
@SysLog("新增部门") @SysLog(value = "部门", businessType = BusinessType.INSERT)
@PostMapping @PostMapping
public AjaxResult add(@Valid @RequestBody SysDept dept) public AjaxResult add(@Valid @RequestBody SysDept dept)
{ {
@ -107,8 +108,8 @@ public class DeptController {
/** /**
* 修改部门 * 修改部门
*/ */
@RequiresPermissions("sys:dept:edit") @RequiresPermissions("system:dept:edit")
@SysLog("修改部门") @SysLog(value = "部门", businessType = BusinessType.UPDATE)
@PutMapping @PutMapping
public AjaxResult edit(@Valid @RequestBody SysDept dept) public AjaxResult edit(@Valid @RequestBody SysDept dept)
{ {
@ -138,8 +139,8 @@ public class DeptController {
/** /**
* 删除部门 * 删除部门
*/ */
@RequiresPermissions("sys:dept:remove") @RequiresPermissions("system:dept:remove")
@SysLog("删除部门") @SysLog(value = "部门", businessType = BusinessType.DELETE)
@DeleteMapping("/{deptId}") @DeleteMapping("/{deptId}")
public AjaxResult remove(@PathVariable Integer deptId) public AjaxResult remove(@PathVariable Integer deptId)
{ {

View File

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

View File

@ -24,6 +24,7 @@ import java.util.List;
/** /**
* @auther: zhao * @auther: zhao
* @date: 2024/5/9 15:54 * @date: 2024/5/9 15:54
* todo 加入缓存
*/ */
@RestController @RestController
@RequestMapping(value = "/dict/type") @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) @SysLog(value = "字典类型", businessType = BusinessType.CLEAN)
@DeleteMapping("/refreshCache") @DeleteMapping("/refreshCache")
public AjaxResult 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.util.StringUtils;
import com.chushang.common.core.web.AjaxResult; import com.chushang.common.core.web.AjaxResult;
import com.chushang.common.log.annotation.SysLog; import com.chushang.common.log.annotation.SysLog;
import com.chushang.common.log.enums.BusinessType;
import com.chushang.security.annotation.RequiresPermissions; import com.chushang.security.annotation.RequiresPermissions;
import com.chushang.security.utils.SecurityUtils; import com.chushang.security.utils.SecurityUtils;
import com.chushang.system.entity.dto.ListMenuDTO; import com.chushang.system.entity.dto.ListMenuDTO;
@ -30,7 +31,7 @@ public class MenuController {
/** /**
* 获取菜单列表 * 获取菜单列表
*/ */
@RequiresPermissions("sys:menu:list") @RequiresPermissions("system:menu:list")
@GetMapping("/list") @GetMapping("/list")
public AjaxResult list(ListMenuDTO listMenu) public AjaxResult list(ListMenuDTO listMenu)
{ {
@ -42,7 +43,7 @@ public class MenuController {
/** /**
* 根据菜单编号获取详细信息 * 根据菜单编号获取详细信息
*/ */
@RequiresPermissions("sys:menu:query") @RequiresPermissions("system:menu:query")
@GetMapping(value = "/{menuId}") @GetMapping(value = "/{menuId}")
public AjaxResult getInfo(@PathVariable Integer menuId) public AjaxResult getInfo(@PathVariable Integer menuId)
{ {
@ -77,8 +78,8 @@ public class MenuController {
/** /**
* 新增菜单 * 新增菜单
*/ */
@RequiresPermissions("sys:menu:add") @RequiresPermissions("system:menu:add")
@SysLog("新增菜单") @SysLog(value = "菜单", businessType = BusinessType.INSERT)
@PostMapping @PostMapping
public AjaxResult add(@Validated @RequestBody SysMenu menu) public AjaxResult add(@Validated @RequestBody SysMenu menu)
{ {
@ -87,7 +88,7 @@ public class MenuController {
return AjaxResult.error("新增菜单'" + menu.getMenuName() + "'失败,菜单名称已存在"); 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)://开头"); return AjaxResult.error("新增菜单'" + menu.getMenuName() + "'失败地址必须以http(s)://开头");
} }
@ -101,8 +102,8 @@ public class MenuController {
/** /**
* 修改菜单 * 修改菜单
*/ */
@RequiresPermissions("sys:menu:edit") @RequiresPermissions("system:menu:edit")
@SysLog("修改菜单") @SysLog(value = "修改菜单", businessType = BusinessType.UPDATE)
@PutMapping @PutMapping
public AjaxResult edit(@Validated @RequestBody SysMenu menu) public AjaxResult edit(@Validated @RequestBody SysMenu menu)
{ {
@ -111,7 +112,7 @@ public class MenuController {
return AjaxResult.error("修改菜单'" + menu.getMenuName() + "'失败,菜单名称已存在"); 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)://开头"); return AjaxResult.error("修改菜单'" + menu.getMenuName() + "'失败地址必须以http(s)://开头");
} }
@ -129,7 +130,7 @@ public class MenuController {
/** /**
* 删除菜单 * 删除菜单
*/ */
@RequiresPermissions("sys:menu:remove") @RequiresPermissions("system:menu:remove")
@SysLog("删除菜单") @SysLog("删除菜单")
@DeleteMapping("/{menuId}") @DeleteMapping("/{menuId}")
public AjaxResult remove(@PathVariable("menuId") Integer 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.security.utils.SecurityUtils;
import com.chushang.system.entity.po.SysPost; import com.chushang.system.entity.po.SysPost;
import com.chushang.system.service.ISysPostService; import com.chushang.system.service.ISysPostService;
import lombok.extern.java.Log;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
@ -43,7 +42,7 @@ public class PostController {
return AjaxResult.success(pageResult); return AjaxResult.success(pageResult);
} }
@SysLog(value = "岗位管理", businessType = BusinessType.EXPORT) @SysLog(value = "岗位", businessType = BusinessType.EXPORT)
@RequiresPermissions("system:post:export") @RequiresPermissions("system:post:export")
@PostMapping("/export") @PostMapping("/export")
public void export(HttpServletResponse response, SysPost post) public void export(HttpServletResponse response, SysPost post)
@ -67,18 +66,17 @@ public class PostController {
* 新增岗位 * 新增岗位
*/ */
@RequiresPermissions("system:post:add") @RequiresPermissions("system:post:add")
@SysLog(value = "岗位管理", businessType = BusinessType.INSERT) @SysLog(value = "岗位", businessType = BusinessType.INSERT)
@PostMapping @PostMapping
public AjaxResult add(@Validated @RequestBody SysPost post) public AjaxResult add(@Validated @RequestBody SysPost post)
{ {
CommonParam commonParam = CommonParam.buildAllRequest();
SysPost postName = new SysPost(); SysPost postName = new SysPost();
postName.setPostName(post.getPostName()); postName.setPostName(post.getPostName());
postName.setPostCode(null); postName.setPostCode(null);
AssertUtil.invalidate(postService.checkPostCodeUnique(postName, commonParam), "新增岗位'" + post.getPostName() + "'失败,岗位名称已存在"); AssertUtil.invalidate(postService.checkPostUnique(postName), "新增岗位'" + post.getPostName() + "'失败,岗位名称已存在");
postName.setPostCode(post.getPostCode()); postName.setPostCode(post.getPostCode());
postName.setPostName(null); postName.setPostName(null);
AssertUtil.invalidate(postService.checkPostCodeUnique(postName, commonParam), "新增岗位'" + post.getPostName() + "'失败,岗位编码已存在"); AssertUtil.invalidate(postService.checkPostUnique(postName), "新增岗位'" + post.getPostName() + "'失败,岗位编码已存在");
post.setCreateBy(SecurityUtils.getUsername()); post.setCreateBy(SecurityUtils.getUsername());
postService.saveOrUpdate(post); postService.saveOrUpdate(post);
return AjaxResult.success(); return AjaxResult.success();
@ -88,18 +86,18 @@ public class PostController {
* 修改岗位 * 修改岗位
*/ */
@RequiresPermissions("system:post:edit") @RequiresPermissions("system:post:edit")
@SysLog(value = "岗位管理", businessType = BusinessType.UPDATE) @SysLog(value = "岗位", businessType = BusinessType.UPDATE)
@PutMapping @PutMapping
public AjaxResult edit(@Validated @RequestBody SysPost post) public AjaxResult edit(@Validated @RequestBody SysPost post)
{ {
CommonParam commonParam = CommonParam.buildAllRequest();
SysPost postName = new SysPost(); SysPost postName = new SysPost();
postName.setPostName(post.getPostName()); postName.setPostName(post.getPostName());
postName.setPostId(post.getPostId());
postName.setPostCode(null); postName.setPostCode(null);
AssertUtil.invalidate(postService.checkPostCodeUnique(postName, commonParam), "修改岗位'" + post.getPostName() + "'失败,岗位名称已存在"); AssertUtil.invalidate(postService.checkPostUnique(postName), "修改岗位'" + post.getPostName() + "'失败,岗位名称已存在");
postName.setPostCode(post.getPostCode()); postName.setPostCode(post.getPostCode());
postName.setPostName(null); postName.setPostName(null);
AssertUtil.invalidate(postService.checkPostCodeUnique(postName, commonParam), "修改岗位'" + post.getPostName() + "'失败,岗位编码已存在"); AssertUtil.invalidate(postService.checkPostUnique(postName), "修改岗位'" + post.getPostName() + "'失败,岗位编码已存在");
post.setCreateBy(SecurityUtils.getUsername()); post.setCreateBy(SecurityUtils.getUsername());
postService.saveOrUpdate(post); postService.saveOrUpdate(post);
return AjaxResult.success(); return AjaxResult.success();
@ -109,7 +107,7 @@ public class PostController {
* 删除岗位 * 删除岗位
*/ */
@RequiresPermissions("system:post:remove") @RequiresPermissions("system:post:remove")
@SysLog(value = "岗位管理", businessType = BusinessType.DELETE) @SysLog(value = "岗位", businessType = BusinessType.DELETE)
@DeleteMapping("/{postIds}") @DeleteMapping("/{postIds}")
public AjaxResult remove(@PathVariable Long[] postIds) public AjaxResult remove(@PathVariable Long[] postIds)
{ {
@ -121,7 +119,7 @@ public class PostController {
* 获取岗位选择框列表 * 获取岗位选择框列表
*/ */
@GetMapping("/option/select") @GetMapping("/option/select")
public AjaxResult optionselect() public AjaxResult optionSelect()
{ {
CommonParam commonParam = CommonParam.buildAllRequest(); CommonParam commonParam = CommonParam.buildAllRequest();
List<SysPost> list = postService.allPostList(new SysPost(), commonParam); 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.core.web.AjaxResult;
import com.chushang.common.log.annotation.SysLog; import com.chushang.common.log.annotation.SysLog;
import com.chushang.common.log.enums.BusinessType;
import com.chushang.security.annotation.RequiresPermissions; import com.chushang.security.annotation.RequiresPermissions;
import com.chushang.security.utils.SecurityUtils; import com.chushang.security.utils.SecurityUtils;
import com.chushang.system.entity.bo.CancelUserRole; import com.chushang.system.entity.bo.CancelUserRole;
@ -29,7 +30,7 @@ public class RoleController {
@Autowired @Autowired
ISysUserService userService; ISysUserService userService;
@RequiresPermissions("sys:role:list") @RequiresPermissions("system:role:list")
@GetMapping("/list") @GetMapping("/list")
public AjaxResult list(ListRoleDTO listRole) public AjaxResult list(ListRoleDTO listRole)
{ {
@ -39,7 +40,7 @@ public class RoleController {
/** /**
* 根据角色编号获取详细信息 * 根据角色编号获取详细信息
*/ */
@RequiresPermissions("sys:role:query") @RequiresPermissions("system:role:query")
@GetMapping(value = "/{roleId}") @GetMapping(value = "/{roleId}")
public AjaxResult getInfo(@PathVariable Integer roleId) public AjaxResult getInfo(@PathVariable Integer roleId)
{ {
@ -51,8 +52,8 @@ public class RoleController {
/** /**
* 新增角色 * 新增角色
*/ */
@RequiresPermissions("sys:role:add") @RequiresPermissions("system:role:add")
@SysLog("新增角色") @SysLog(value = "新增角色",businessType = BusinessType.INSERT)
@PostMapping @PostMapping
public AjaxResult add(@Validated @RequestBody SysRole role) public AjaxResult add(@Validated @RequestBody SysRole role)
{ {
@ -75,12 +76,13 @@ public class RoleController {
/** /**
* 修改保存角色 * 修改保存角色
*/ */
@RequiresPermissions("sys:role:edit") @RequiresPermissions("system:role:edit")
@SysLog("修改角色") @SysLog(value = "修改角色",businessType = BusinessType.UPDATE)
@PutMapping @PutMapping
public AjaxResult edit(@Validated @RequestBody SysRole role) public AjaxResult edit(@Validated @RequestBody SysRole role)
{ {
if (2 == role.getRoleId()){ // 1 为超管
if (1 == role.getRoleId()){
return AjaxResult.success(); return AjaxResult.success();
} }
roleService.checkRoleAllowed(role); roleService.checkRoleAllowed(role);
@ -103,8 +105,8 @@ public class RoleController {
/** /**
* 修改保存数据权限 * 修改保存数据权限
*/ */
@RequiresPermissions("sys:role:edit") @RequiresPermissions("system:role:edit")
@SysLog("修改角色权限") @SysLog(value = "修改角色权限",businessType = BusinessType.GRANT)
@PutMapping("/dataScope") @PutMapping("/dataScope")
public AjaxResult dataScope(@RequestBody SysRole role) public AjaxResult dataScope(@RequestBody SysRole role)
{ {
@ -119,8 +121,8 @@ public class RoleController {
/** /**
* 状态修改 * 状态修改
*/ */
@RequiresPermissions("sys:role:edit") @RequiresPermissions("system:role:edit")
@SysLog("修改角色状态") @SysLog(value = "修改角色状态",businessType = BusinessType.UPDATE)
@PutMapping("/changeStatus") @PutMapping("/changeStatus")
public AjaxResult changeStatus(@RequestBody SysRole role) public AjaxResult changeStatus(@RequestBody SysRole role)
{ {
@ -137,8 +139,8 @@ public class RoleController {
/** /**
* 删除角色 * 删除角色
*/ */
@RequiresPermissions("sys:role:remove") @RequiresPermissions("system:role:remove")
@SysLog("删除角色") @SysLog(value = "删除角色",businessType = BusinessType.DELETE)
@DeleteMapping("/{roleIds}") @DeleteMapping("/{roleIds}")
public AjaxResult remove(@PathVariable Integer[] 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") @GetMapping("/option/select")
public AjaxResult optionSelect() public AjaxResult optionSelect()
{ {
@ -160,7 +162,7 @@ public class RoleController {
* 查询已分配用户角色列表 * 查询已分配用户角色列表
* 可以根据用户名称查询 * 可以根据用户名称查询
*/ */
@RequiresPermissions("sys:role:list") @RequiresPermissions("system:role:list")
@GetMapping("/authUser/allocatedList") @GetMapping("/authUser/allocatedList")
public AjaxResult allocatedList(@Valid ListUserDTO listUser) public AjaxResult allocatedList(@Valid ListUserDTO listUser)
{ {
@ -170,7 +172,7 @@ public class RoleController {
/** /**
* 查询未分配用户角色列表 * 查询未分配用户角色列表
*/ */
@RequiresPermissions("sys:role:list") @RequiresPermissions("system:role:list")
@GetMapping("/authUser/unallocatedList") @GetMapping("/authUser/unallocatedList")
public AjaxResult unallocatedList(@Valid ListUserDTO listUser) public AjaxResult unallocatedList(@Valid ListUserDTO listUser)
{ {
@ -180,8 +182,8 @@ public class RoleController {
/** /**
* 取消授权用户 * 取消授权用户
*/ */
@RequiresPermissions("sys:role:edit") @RequiresPermissions("system:role:edit")
@SysLog("取消授权用户") @SysLog(value = "取消授权用户", businessType = BusinessType.GRANT)
@PutMapping("/authUser/cancel") @PutMapping("/authUser/cancel")
public AjaxResult cancelAuthUser(@RequestBody @Valid CancelUserRole cancelUserRole) public AjaxResult cancelAuthUser(@RequestBody @Valid CancelUserRole cancelUserRole)
{ {
@ -193,8 +195,8 @@ public class RoleController {
/** /**
* 批量选择用户授权 * 批量选择用户授权
*/ */
@RequiresPermissions("sys:role:edit") @RequiresPermissions("system:role:edit")
@SysLog("用户授权") @SysLog(value = "用户授权", businessType = BusinessType.GRANT)
@PutMapping("/authUser") @PutMapping("/authUser")
public AjaxResult selectAuthUserAll(@RequestBody @Valid RoleUser roleUser) public AjaxResult selectAuthUserAll(@RequestBody @Valid RoleUser roleUser)
{ {
@ -208,4 +210,25 @@ public class RoleController {
return AjaxResult.success(); 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; 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.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.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.entity.po.SysLoginInfo;
import com.chushang.system.feign.RemoteLoginInfoService; import com.chushang.system.feign.RemoteLoginInfoService;
import com.chushang.system.service.SysLoginInfoService; import com.chushang.system.service.SysLoginInfoService;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import java.util.ArrayList;
import org.springframework.web.bind.annotation.RestController; import java.util.Arrays;
@RestController @RestController
@RequestMapping(value = "/log/login/info") @RequestMapping(value = "/log/login/info")
@ -24,4 +31,30 @@ public class SysLoginInfoController implements RemoteLoginInfoService {
public Result<Boolean> saveLoginInfo(@RequestBody SysLoginInfo sysLogininfo, String source) { public Result<Boolean> saveLoginInfo(@RequestBody SysLoginInfo sysLogininfo, String source) {
return Result.ok(sysLoginInfoService.saveLoginInfo(sysLogininfo).isSuccess()); 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; ISysUserDataService userDataService;
/** /**
* 针对用户进行授权 * todo 针对用户进行授权
* 数据权限授权
*/ */
@SysLog(value = "用户数据授权") @SysLog(value = "用户数据授权")
@PostMapping(value = "/{userId}/{dataType}") @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, public AjaxResult authData(@RequestBody Map<String, String> authDataMap,
@PathVariable Integer dataType, @PathVariable Integer dataType,
@PathVariable Integer userId) @PathVariable Integer userId)
@ -53,8 +54,11 @@ public class SysUserDataController {
return AjaxResult.success(); return AjaxResult.success();
} }
/**
* todo 数据权限授权查看
*/
@GetMapping(value = "/{userId}/{authType}") @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, public AjaxResult getAuthData(@PathVariable Integer userId,
@PathVariable Integer authType) @PathVariable Integer authType)
{ {

View File

@ -1,53 +1,59 @@
//package com.chushang.system.controller; package com.chushang.system.controller;
//
//import java.util.ArrayList; import java.util.ArrayList;
//import java.util.Collection; import java.util.Collection;
//import java.util.Collections; import java.util.Collections;
//import java.util.List; import java.util.List;
//
//import com.chushang.common.core.constant.CacheConstants; import com.chushang.common.core.constant.CacheConstants;
//import com.chushang.common.core.web.AjaxResult; import com.chushang.common.core.web.AjaxResult;
//import com.chushang.security.annotation.RequiresPermissions; import com.chushang.common.log.annotation.SysLog;
//import com.chushang.security.entity.vo.LoginUser; import com.chushang.common.log.enums.BusinessType;
//import com.chushang.system.entity.vo.SysUserOnline; import com.chushang.common.mybatis.page.CommonParam;
//import com.chushang.system.service.ISysUserOnlineService; import com.chushang.common.mybatis.utils.PageResult;
//import lombok.extern.java.Log; import com.chushang.security.annotation.RequiresPermissions;
//import org.springframework.beans.factory.annotation.Autowired; import com.chushang.security.auth.AuthUtil;
//import org.springframework.web.bind.annotation.DeleteMapping; import com.chushang.security.entity.vo.LoginUser;
//import org.springframework.web.bind.annotation.GetMapping; import com.chushang.system.entity.vo.SysUserOnline;
//import org.springframework.web.bind.annotation.PathVariable; import com.chushang.system.service.ISysUserOnlineService;
//import org.springframework.web.bind.annotation.RequestMapping; import lombok.extern.java.Log;
//import org.springframework.web.bind.annotation.RestController; 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;
// * @author ruoyi import org.springframework.web.bind.annotation.RestController;
// */
//@RestController /**
//@RequestMapping("/online") * 在线用户监控
//public class SysUserOnlineController *
//{ * @author ruoyi
// @Autowired */
// private ISysUserOnlineService userOnlineService; @RestController
// @RequestMapping("/online")
// @RequiresPermissions("monitor:online:list") public class SysUserOnlineController
// @GetMapping("/list") {
// public TableDataInfo list(String ipaddr, String userName) @Autowired
// { private ISysUserOnlineService userOnlineService;
//
// return getDataTable(userOnlineList); @RequiresPermissions("monitor:online:list")
// } @GetMapping("/list")
// public AjaxResult list(String ipaddr, String userName)
// /** {
// * 强退用户 CommonParam commonParam = CommonParam.buildPageRequest();
// */ PageResult pageResult = userOnlineService.selectOnlineByIpaddr(ipaddr, userName, commonParam);
// @RequiresPermissions("monitor:online:forceLogout") return AjaxResult.success(pageResult);
// @Log(title = "在线用户", businessType = BusinessType.FORCE) }
// @DeleteMapping("/{tokenId}")
// public AjaxResult forceLogout(@PathVariable String tokenId) /**
// { * 强退用户
// redisService.deleteObject(CacheConstants.LOGIN_TOKEN_KEY + tokenId); */
// return success(); @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.AjaxResult;
import com.chushang.common.core.web.Result; import com.chushang.common.core.web.Result;
import com.chushang.common.log.annotation.SysLog; 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.InnerAuth;
import com.chushang.security.annotation.RequiresPermissions; import com.chushang.security.annotation.RequiresPermissions;
import com.chushang.security.service.TokenService; import com.chushang.security.service.TokenService;
import com.chushang.security.utils.SecurityUtils; import com.chushang.security.utils.SecurityUtils;
import com.chushang.system.entity.bo.PasswordForm; import com.chushang.system.entity.bo.PasswordForm;
import com.chushang.system.entity.dto.ListUserDTO; 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.SysRole;
import com.chushang.system.entity.po.SysUser; import com.chushang.system.entity.po.SysUser;
import com.chushang.system.entity.po.SysUserData; import com.chushang.system.entity.po.SysUserData;
import com.chushang.security.entity.vo.LoginUser; import com.chushang.security.entity.vo.LoginUser;
import com.chushang.system.feign.RemoteUserService; import com.chushang.system.feign.RemoteUserService;
import com.chushang.system.service.ISysPermissionService; import com.chushang.system.service.*;
import com.chushang.system.service.ISysRoleService;
import com.chushang.system.service.ISysUserDataService;
import com.chushang.system.service.ISysUserService;
import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.ArrayUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.validation.Valid; import javax.validation.Valid;
import java.util.*; import java.util.*;
@ -42,6 +42,8 @@ public class UserController implements RemoteUserService {
@Autowired @Autowired
ISysRoleService sysRoleService; ISysRoleService sysRoleService;
@Autowired @Autowired
ISysPostService sysPostService;
@Autowired
ISysPermissionService permissionService; ISysPermissionService permissionService;
@Autowired @Autowired
ISysUserDataService userDataService; ISysUserDataService userDataService;
@ -53,7 +55,7 @@ public class UserController implements RemoteUserService {
*/ */
@GetMapping(value = "/list") @GetMapping(value = "/list")
// 权限校验 -- 菜单权限 // 权限校验 -- 菜单权限
@RequiresPermissions("sys:user:list") @RequiresPermissions("system:user:list")
public AjaxResult listUser(ListUserDTO listUserDTO) { public AjaxResult listUser(ListUserDTO listUserDTO) {
return sysUserService.listUser(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}"}) @GetMapping(value = {"/", "/{userId}"})
public AjaxResult getInfo(@PathVariable(value = "userId", required = false) Integer userId) { public AjaxResult getInfo(@PathVariable(value = "userId", required = false) Integer userId) {
sysUserService.checkUserDataScope(new SysUser(userId)); sysUserService.checkUserDataScope(new SysUser(userId));
AjaxResult ajax = AjaxResult.success(); AjaxResult ajax = AjaxResult.success();
List<SysRole> roles = sysRoleService.selectRoleAll(new SysRole()); 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("roles", SysUser.isAdmin(userId) || SecurityUtils.isAdmin() ? roles : roles.stream().filter(r -> !r.isAdmin()).collect(Collectors.toList()));
// 岗位
ajax.put("posts", posts);
if (StringUtils.isNotNull(userId)) { if (StringUtils.isNotNull(userId)) {
SysUser sysUser = sysUserService.selectUserById(userId); SysUser sysUser = sysUserService.selectUserById(userId);
sysUser.setPassword(""); sysUser.setPassword("");
sysUser.setSalt(""); sysUser.setSalt("");
ajax.put(AjaxResult.DATA_TAG, sysUser); ajax.put(AjaxResult.DATA_TAG, sysUser);
ajax.put("postIds", sysPostService.selectPostListByUserId(userId));
ajax.put("roleIds", sysUser.getRoles().stream().map(SysRole::getRoleId).collect(Collectors.toList())); ajax.put("roleIds", sysUser.getRoles().stream().map(SysRole::getRoleId).collect(Collectors.toList()));
} }
return ajax; return ajax;
} }
@SysLog("保存用户") @SysLog("保存用户")
@PostMapping("/save") @PostMapping("/save")
@RequiresPermissions(value = "sys:user:save") @RequiresPermissions(value = "system:user:save")
public AjaxResult save(@RequestBody SysUser user) { public AjaxResult save(@RequestBody SysUser user) {
user.setCreateBy(SecurityUtils.getUsername()); user.setCreateBy(SecurityUtils.getUsername());
@ -156,7 +164,7 @@ public class UserController implements RemoteUserService {
*/ */
@SysLog("修改用户") @SysLog("修改用户")
@PostMapping("/update") @PostMapping("/update")
@RequiresPermissions("sys:user:update") @RequiresPermissions("system:user:update")
public AjaxResult update(@RequestBody SysUser user) { public AjaxResult update(@RequestBody SysUser user) {
sysUserService.checkUserAllowed(user); sysUserService.checkUserAllowed(user);
@ -173,7 +181,7 @@ public class UserController implements RemoteUserService {
*/ */
@SysLog("删除用户") @SysLog("删除用户")
@DeleteMapping("/{userIds}") @DeleteMapping("/{userIds}")
@RequiresPermissions("sys:user:delete") @RequiresPermissions("system:user:delete")
public AjaxResult delete(@PathVariable Integer[] userIds) { public AjaxResult delete(@PathVariable Integer[] userIds) {
if (ArrayUtils.contains(userIds, 1)) { if (ArrayUtils.contains(userIds, 1)) {
return AjaxResult.error("系统管理员不能删除"); return AjaxResult.error("系统管理员不能删除");
@ -191,7 +199,7 @@ public class UserController implements RemoteUserService {
/** /**
* 修改自己的 * 修改自己的
*/ */
@RequiresPermissions("sys:user:updatePwd") @RequiresPermissions("system:user:updatePwd")
@SysLog("修改密码") @SysLog("修改密码")
@PutMapping("/updatePwd") @PutMapping("/updatePwd")
public AjaxResult updatePwd(@RequestBody @Valid PasswordForm form) 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("重置密码") @SysLog("重置密码")
@PutMapping("/resetPwd/{userId}") @PutMapping("/resetPwd/{userId}")
public AjaxResult resetPwd(@RequestBody @Valid PasswordForm form, 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("修改用户状态") @SysLog("修改用户状态")
@PutMapping("/changeStatus") @PutMapping("/changeStatus")
public AjaxResult changeStatus(@RequestBody SysUser user) 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}") @GetMapping("/authRole/{userId}")
public AjaxResult authRole(@PathVariable Integer 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("用户授权") @SysLog("用户授权")
@PutMapping("/authRole") @PutMapping("/authRole")
public AjaxResult insertAuthRole(Integer userId, Integer[] roleIds) public AjaxResult insertAuthRole(Integer userId, Integer[] roleIds)
@ -301,19 +309,46 @@ public class UserController implements RemoteUserService {
sysUserVo.setSysUser(sysUser); sysUserVo.setSysUser(sysUser);
sysUserVo.setRoles(roles); sysUserVo.setRoles(roles);
sysUserVo.setPermissions(permissions); sysUserVo.setPermissions(permissions);
// todo 用户拥有的数据权限
List<SysUserData> userDataList = userDataService.listUserData(sysUser); List<SysUserData> userDataList = userDataService.listUserData(sysUser);
// 默认传递一个空Map --> 拥有管理员 // 默认传递一个空Map --> 拥有管理员
sysUserVo.setAuthDataMap(new HashMap<>()); sysUserVo.setAuthDataMap(new HashMap<>());
if (CollectionUtil.isNotEmpty(userDataList)){ // if (CollectionUtil.isNotEmpty(userDataList)){
Map<String, Set<String>> authDataMap = new HashMap<>(); // Map<String, Set<String>> authDataMap = new HashMap<>();
// 对应的数据权限 // // 对应的数据权限
for (SysUserData sysUserData : userDataList) { // for (SysUserData sysUserData : userDataList) {
authDataMap.put(sysUserData.getDataType().getCodeType(), // authDataMap.put(sysUserData.getDataType().getCodeType(),
new HashSet<>(JSONUtil.toList(sysUserData.getDataValue(), String.class))); // new HashSet<>(JSONUtil.toList(sysUserData.getDataValue(), String.class)));
} // }
sysUserVo.setAuthDataMap(authDataMap); // sysUserVo.setAuthDataMap(authDataMap);
} // }
return Result.ok(sysUserVo); 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.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.chushang.system.entity.po.SysPost; 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 * @auther: zhao
* @date: 2024/5/9 15:49 * @date: 2024/5/9 15:49
*/ */
public interface SysPostMapper extends BaseMapper<SysPost> { 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; package com.chushang.system.service;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService; 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.page.CommonParam;
import com.chushang.common.mybatis.utils.PageResult; import com.chushang.common.mybatis.utils.PageResult;
import com.chushang.system.entity.po.SysPost; import com.chushang.system.entity.po.SysPost;
import com.chushang.system.entity.po.SysRole;
import java.util.List; import java.util.List;
import static net.sf.jsqlparser.util.validation.metadata.NamedObject.role;
/** /**
* @auther: zhao * @auther: zhao
* @date: 2024/5/9 15:53 * @date: 2024/5/9 15:53
@ -27,8 +33,21 @@ public interface ISysPostService extends IService<SysPost> {
return this.list(buildWrapper(post, commonParam)); return this.list(buildWrapper(post, commonParam));
} }
default List<SysPost> allPostList(){
default boolean checkPostCodeUnique(SysPost sysPost, CommonParam commonParam){ SysPost sysPost = new SysPost();
return this.count(buildWrapper(sysPost, commonParam)) > 0; 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; package com.chushang.system.service;
//
//import com.chushang.common.core.constant.CacheConstants; import cn.hutool.core.net.Ipv4Util;
//import com.chushang.common.core.util.StringUtils; import cn.hutool.core.util.ObjectUtil;
//import com.chushang.security.entity.vo.LoginUser; import cn.hutool.extra.servlet.ServletUtil;
//import com.chushang.system.entity.vo.SysUserOnline; import cn.hutool.system.SystemUtil;
//import lombok.extern.slf4j.Slf4j; import com.chushang.common.core.constant.CacheConstants;
//import org.redisson.api.RKeys; import com.chushang.common.core.util.IPUtils;
//import org.redisson.api.RedissonClient; import com.chushang.common.core.util.StringUtils;
//import org.springframework.stereotype.Service; import com.chushang.common.mybatis.page.CommonParam;
// import com.chushang.common.mybatis.utils.PageClass;
//import javax.annotation.Resource; import com.chushang.common.mybatis.utils.PageResult;
//import java.util.ArrayList; import com.chushang.security.auth.AuthUtil;
//import java.util.Collection; import com.chushang.security.entity.vo.LoginUser;
//import java.util.Collections; import com.chushang.security.service.TokenService;
//import java.util.List; 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;
// * @author ruoyi
// */ import javax.annotation.Resource;
//@Slf4j import java.util.ArrayList;
//@Service import java.util.Collection;
//public class ISysUserOnlineService import java.util.Collections;
//{ import java.util.List;
//
// @Resource /**
// RedissonClient redissonClient; * 在线用户 服务层
// *
// public SysUserOnline selectOnlineByIpaddr(){ * @author ruoyi
// */
// Collection<String> keys = new ArrayList<>(); @Slf4j
// redissonClient.getKeys().getKeys().forEach(key-> { @Service
// if (key.startsWith(CacheConstants.LOGIN_TOKEN_KEY)){ public class ISysUserOnlineService
// keys.add(key); {
// }
// }); @Resource
// List<SysUserOnline> userOnlineList = new ArrayList<SysUserOnline>(); RedissonClient redissonClient;
// for (String key : keys) @Resource
// { TokenService tokenService;
// LoginUser user = redisService.getCacheObject(key);
// if (StringUtils.isNotEmpty(ipaddr) && StringUtils.isNotEmpty(userName)) public PageResult selectOnlineByIpaddr(String ipaddr, String userName, CommonParam commonParam){
// { Collection<String> keys = new ArrayList<>();
// userOnlineList.add(userOnlineService.selectOnlineByInfo(ipaddr, userName, user)); redissonClient.getKeys().getKeys().forEach(key-> {
// } if (key.startsWith(CacheConstants.LOGIN_TOKEN_KEY)){
// else if (StringUtils.isNotEmpty(ipaddr)) keys.add(key);
// { }
// userOnlineList.add(userOnlineService.selectOnlineByIpaddr(ipaddr, user)); });
// } List<SysUserOnline> userOnlineList = new ArrayList<>();
// else if (StringUtils.isNotEmpty(userName)) for (String key : keys)
// { {
// userOnlineList.add(userOnlineService.selectOnlineByUserName(userName, user)); RBucket<LoginUser> bucket = redissonClient.getBucket(key);
// } if (!bucket.isExists()){
// else continue;
// { }
// userOnlineList.add(userOnlineService.loginUserToUserOnline(user)); LoginUser user = bucket.get();
// } if (StringUtils.isNotEmpty(ipaddr) && StringUtils.isNotEmpty(userName))
// } {
// Collections.reverse(userOnlineList); userOnlineList.add(selectOnlineByInfo(ipaddr, userName, user));
// userOnlineList.removeAll(Collections.singleton(null)); }
// } else if (StringUtils.isNotEmpty(ipaddr))
// {
// /** userOnlineList.add(selectOnlineByIpaddr(ipaddr, user));
// * 通过登录地址查询信息 }
// * else if (StringUtils.isNotEmpty(userName))
// * @param ipaddr 登录地址 {
// * @param user 用户信息 userOnlineList.add(selectOnlineByUserName(userName, user));
// * @return 在线用户信息 }
// */ else
// public SysUserOnline selectOnlineByIpaddr(String ipaddr, LoginUser user) {
// { userOnlineList.add(loginUserToUserOnline(user));
// if (StringUtils.equals(ipaddr, user.getIpaddr())) }
// { }
// return loginUserToUserOnline(user); Collections.reverse(userOnlineList);
// } userOnlineList.removeAll(Collections.singleton(null));
// return null; List<SysUserOnline> userOnlines = new PageClass<SysUserOnline>()
// } .page(commonParam.getPage(), commonParam.getLimit(), userOnlineList);
// return new PageResult(userOnlines, userOnlineList.size(), commonParam.getLimit(), commonParam.getPage());
// /** }
// * 通过用户名称查询信息
// * /**
// * @param userName 用户名称 * 通过登录地址查询信息
// * @param user 用户信息 *
// * @return 在线用户信息 * @param ipaddr 登录地址
// */ * @param user 用户信息
// public SysUserOnline selectOnlineByUserName(String userName, LoginUser user) * @return 在线用户信息
// { */
// if (StringUtils.equals(userName, user.getUsername())) public SysUserOnline selectOnlineByIpaddr(String ipaddr, LoginUser user)
// { {
// return loginUserToUserOnline(user); if (StringUtils.equals(ipaddr, user.getIpaddr()))
// } {
// return null; return loginUserToUserOnline(user);
// } }
// return null;
// /** }
// * 通过登录地址/用户名称查询信息
// * /**
// * @param ipaddr 登录地址 * 通过用户名称查询信息
// * @param userName 用户名称 *
// * @param user 用户信息 * @param userName 用户名称
// * @return 在线用户信息 * @param user 用户信息
// */ * @return 在线用户信息
// public SysUserOnline selectOnlineByInfo(String ipaddr, String userName, LoginUser user) */
// { public SysUserOnline selectOnlineByUserName(String userName, LoginUser user)
// if (StringUtils.equals(ipaddr, user.getIpaddr()) && StringUtils.equals(userName, user.getUsername())) {
// { if (StringUtils.equals(userName, user.getUsername()))
// return loginUserToUserOnline(user); {
// } return loginUserToUserOnline(user);
// return null; }
// } return null;
// }
// /**
// * 设置在线用户信息 /**
// * * 通过登录地址/用户名称查询信息
// * @param user 用户信息 *
// * @return 在线用户 * @param ipaddr 登录地址
// */ * @param userName 用户名称
// public SysUserOnline loginUserToUserOnline(LoginUser user) * @param user 用户信息
// { * @return 在线用户信息
// if (StringUtils.isNull(user)) */
// { public SysUserOnline selectOnlineByInfo(String ipaddr, String userName, LoginUser user)
// return null; {
// } if (StringUtils.equals(ipaddr, user.getIpaddr()) && StringUtils.equals(userName, user.getUsername()))
// SysUserOnline sysUserOnline = new SysUserOnline(); {
// sysUserOnline.setTokenId(user.getToken()); return loginUserToUserOnline(user);
// sysUserOnline.setUserName(user.getUsername()); }
// sysUserOnline.setIpaddr(user.getIpaddr()); return null;
// sysUserOnline.setLoginTime(user.getLoginTime()); }
// return sysUserOnline;
// } /**
//} * 设置在线用户信息
*
* @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; package com.chushang.system.service;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.chushang.common.core.exception.ResultException;
import com.chushang.common.core.web.AjaxResult; import com.chushang.common.core.web.AjaxResult;
import com.chushang.security.utils.SecurityUtils; import com.chushang.security.utils.SecurityUtils;
import com.chushang.system.entity.dto.ListUserDTO; import com.chushang.system.entity.dto.ListUserDTO;
@ -31,7 +33,15 @@ public interface ISysUserService extends IService<SysUser> {
void deleteBatch(Integer[] userIds); 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){ default boolean updatePassword(Integer userId, String oldPassword, String newPassword){
return this.update(SysUser.builder() return this.update(SysUser.builder()

View File

@ -1,13 +1,29 @@
package com.chushang.system.service; 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.baomidou.mybatisplus.extension.service.IService;
import com.chushang.common.core.web.AjaxResult; 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.SysLoginInfo;
import com.chushang.system.entity.po.SysPost;
public interface SysLoginInfoService extends IService<SysLoginInfo> { public interface SysLoginInfoService extends IService<SysLoginInfo> {
default AjaxResult saveLoginInfo(SysLoginInfo sysLogininfo){ default AjaxResult saveLoginInfo(SysLoginInfo sysLogininfo) {
return save(sysLogininfo) ? AjaxResult.success() : AjaxResult.error(); 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>() List<SysDictData> list = list(new LambdaQueryWrapper<SysDictData>()
.eq(SysDictData::getDictType, dictType) .eq(SysDictData::getDictType, dictType)
.eq(SysDictData::getStatus, "0") .eq(SysDictData::getStatus, true)
.orderByAsc(SysDictData::getDictSort) .orderByAsc(SysDictData::getDictSort)
); );
if (CollectionUtil.isNotEmpty(list)) { 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.getCssClass()), SysDictData::getCssClass, dictData.getCssClass())
.eq(StringUtils.isNotEmpty(dictData.getListClass()), SysDictData::getListClass, dictData.getListClass()) .eq(StringUtils.isNotEmpty(dictData.getListClass()), SysDictData::getListClass, dictData.getListClass())
.eq(StringUtils.isNotEmpty(dictData.getIsDefault()), SysDictData::getIsDefault, dictData.getIsDefault()) .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(null != dictType.getDictId(), SysDictType::getDictId, dictType.getDictId())
.eq(StringUtils.isNotEmpty(dictType.getDictType()), SysDictType::getDictType, dictType.getDictType()) .eq(StringUtils.isNotEmpty(dictType.getDictType()), SysDictType::getDictType, dictType.getDictType())
.eq(StringUtils.isNotEmpty(dictType.getDictName()), SysDictType::getDictName, dictType.getDictName()) .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; 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.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.SysLoginInfo;
import com.chushang.system.entity.po.SysPost;
import com.chushang.system.mapper.SysLoginInfoMapper; import com.chushang.system.mapper.SysLoginInfoMapper;
import com.chushang.system.service.SysLoginInfoService; import com.chushang.system.service.SysLoginInfoService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@Slf4j @Slf4j
@Service @Service
public class SysLoginInfoServiceImpl extends ServiceImpl<SysLoginInfoMapper, SysLoginInfo> implements SysLoginInfoService { 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(); RouterVo router = new RouterVo();
// visible 为1 代表显示路由 // visible 为1 代表显示路由
router.setHidden("0".equals(menu.getVisible())); router.setHidden(!menu.getVisible());
router.setName(getRouteName(menu)); router.setName(getRouteName(menu));
router.setPath(getRouterPath(menu)); router.setPath(getRouterPath(menu));
router.setComponent(getComponent(menu)); router.setComponent(getComponent(menu));
router.setQuery(menu.getQuery()); 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(); List<SysMenu> cMenus = menu.getChildren();
if (!cMenus.isEmpty() && MenuTypeEnum.CATALOG.equals(menu.getMenuType())) 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.setPath(menu.getPath());
children.setComponent(menu.getComponent()); children.setComponent(menu.getComponent());
children.setName(StringUtils.capitalize(menu.getPath())); 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()); children.setQuery(menu.getQuery());
childrenList.add(children); childrenList.add(children);
router.setChildren(childrenList); router.setChildren(childrenList);
@ -176,7 +176,7 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
*/ */
public boolean isMenuFrame(SysMenu menu) 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()) if (0 == menu.getParentId() && MenuTypeEnum.CATALOG.equals(menu.getMenuType())
&& "1".equals(menu.getFrame())) && menu.getFrame())
{ {
routerPath = "/" + menu.getPath(); routerPath = "/" + menu.getPath();
} }
@ -214,10 +214,10 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
menu.setMenuName("系统管理"); menu.setMenuName("系统管理");
menu.setPath("system"); menu.setPath("system");
menu.setMenuType(MenuTypeEnum.CATALOG); menu.setMenuType(MenuTypeEnum.CATALOG);
menu.setFrame("1"); menu.setFrame(true);
menu.setCache("1"); menu.setCache(true);
menu.setVisible("1"); menu.setVisible(true);
menu.setStatus("1"); menu.setStatus(true);
String routerPath = sysMenuService.getRouterPath(menu); String routerPath = sysMenuService.getRouterPath(menu);
System.out.println(routerPath); System.out.println(routerPath);
} }
@ -230,7 +230,7 @@ public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> impl
*/ */
public boolean isInnerLink(SysMenu menu) 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) { private List<SysMenu> buildMenuTree(List<SysMenu> menus) {
List<SysMenu> returnList = new ArrayList<>(); 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) { for (SysMenu menu : menus) {
// 如果是顶级节点, 遍历该父节点的所有子节点 // 如果是顶级节点, 遍历该父节点的所有子节点
if (!tempList.contains(menu.getParentId())) { 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) 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.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.List;
/** /**
* @auther: zhao * @auther: zhao
* @date: 2024/5/9 18:33 * @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(null != sysPost.getPostId(), SysPost::getPostId, sysPost.getPostId())
.eq(StringUtils.isNotEmpty(sysPost.getPostCode()), SysPost::getPostCode, sysPost.getPostCode()) .eq(StringUtils.isNotEmpty(sysPost.getPostCode()), SysPost::getPostCode, sysPost.getPostCode())
.eq(StringUtils.isNotEmpty(sysPost.getPostName()), SysPost::getPostName, sysPost.getPostName()) .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 @Override
@Transactional @Transactional

View File

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

View File

@ -12,6 +12,11 @@
<result property="createTime" column="create_time"/> <result property="createTime" column="create_time"/>
<result property="updateTime" column="update_time"/> <result property="updateTime" column="update_time"/>
<result property="salt" column="salt"/> <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"/> <association property="dept" resultMap="deptResult"/>
<collection property="roles" javaType="java.util.List" resultMap="RoleResult"/> <collection property="roles" javaType="java.util.List" resultMap="RoleResult"/>
</resultMap> </resultMap>
@ -36,6 +41,7 @@
<sql id="selectUserVo"> <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, 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, 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 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 from sys_user u
@ -76,7 +82,7 @@
</select> </select>
<select id="listUser" parameterType="com.chushang.system.entity.dto.ListUserDTO" resultMap="SysUserResult"> <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 from sys_user u
left join sys_dept d on u.dept_id = d.dept_id left join sys_dept d on u.dept_id = d.dept_id
where u.del_state = FALSE where u.del_state = FALSE
@ -86,6 +92,12 @@
<if test="listUser.deptId != null"> <if test="listUser.deptId != null">
AND d.dept_id = #{listUser.deptId} AND d.dept_id = #{listUser.deptId}
</if> </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} ${listUser.sqlParam.dataScope}
</select> </select>

10
pom.xml
View File

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