diff --git a/Readme.md b/Readme.md index e16dc20..47cba93 100644 --- a/Readme.md +++ b/Readme.md @@ -38,6 +38,13 @@ sanyicloud --> 大区 项目(银行) 区域 人员 商户, 人员分为员工和管理等 ``` +mysql 授权 +```sql +CREATE USER 'nacos'@'%' IDENTIFIED BY 'nacos'; +grant ALL on nacos_config.* to 'nacos'@'%'; +flush privileges; +``` + hadoop 安装教程 https://www.cnblogs.com/jhno1/p/15218656.html mongo 单节点开启事务 https://www.jianshu.com/p/5a03b956ce1c diff --git a/chushang-common/chushang-common-core/pom.xml b/chushang-common/chushang-common-core/pom.xml index 14a7909..636ac6e 100644 --- a/chushang-common/chushang-common-core/pom.xml +++ b/chushang-common/chushang-common-core/pom.xml @@ -60,6 +60,18 @@ com.alibaba.fastjson2 fastjson2 + + org.lionsoul + ip2region + + + + + src/main/resources + false + + + diff --git a/chushang-common/chushang-common-core/src/main/java/com/chushang/common/core/exception/ResultException.java b/chushang-common/chushang-common-core/src/main/java/com/chushang/common/core/exception/ResultException.java index 8336f82..3f6a3de 100644 --- a/chushang-common/chushang-common-core/src/main/java/com/chushang/common/core/exception/ResultException.java +++ b/chushang-common/chushang-common-core/src/main/java/com/chushang/common/core/exception/ResultException.java @@ -16,7 +16,7 @@ public class ResultException extends RuntimeException { private static final long serialVersionUID = 1L; private String msg; - private String code = "500"; + private Integer code = 500; private String detailMsg; public ResultException(String msg) { @@ -29,7 +29,7 @@ public class ResultException extends RuntimeException { this.msg = msg; } - public ResultException(String msg, String code) { + public ResultException(String msg, Integer code) { super(msg); this.msg = msg; this.code = code; @@ -38,20 +38,20 @@ public class ResultException extends RuntimeException { /** * 内部 展示, 应当仅用于 调试 todo 怎么做没想好 */ - public ResultException(String msg,String detailMsg, String code) { + public ResultException(String msg,String detailMsg, Integer code) { super(msg); this.msg = msg; this.detailMsg = detailMsg; this.code = code; } - public ResultException(EnumUtils.CodeEnum codeEnum){ + public ResultException(EnumUtils.CodeEnum codeEnum){ super(codeEnum.getMsg()); this.msg = codeEnum.getMsg(); this.code = codeEnum.getCode(); } - public ResultException(String msg, String code, Throwable e) { + public ResultException(String msg, Integer code, Throwable e) { super(msg, e); this.msg = msg; this.code = code; diff --git a/chushang-common/chushang-common-core/src/main/java/com/chushang/common/core/exception/enums/ExceptionEnum.java b/chushang-common/chushang-common-core/src/main/java/com/chushang/common/core/exception/enums/ExceptionEnum.java index a7afb35..213eca8 100644 --- a/chushang-common/chushang-common-core/src/main/java/com/chushang/common/core/exception/enums/ExceptionEnum.java +++ b/chushang-common/chushang-common-core/src/main/java/com/chushang/common/core/exception/enums/ExceptionEnum.java @@ -9,7 +9,7 @@ import lombok.Getter; */ @Getter @AllArgsConstructor -public enum ExceptionEnum implements EnumUtils.CodeEnum{ +public enum ExceptionEnum implements EnumUtils.CodeEnum{ RESOURCE_EXIST(3404,"资源不存在"), APP_RESOURCE_EXIST(3404,"产品资源不存在"), PLATFORM_RESOURCE_EXIST(3404,"平台资源不存在"), diff --git a/chushang-common/chushang-common-core/src/main/java/com/chushang/common/core/exception/utils/AssertUtil.java b/chushang-common/chushang-common-core/src/main/java/com/chushang/common/core/exception/utils/AssertUtil.java index 4a25bb1..84ef343 100644 --- a/chushang-common/chushang-common-core/src/main/java/com/chushang/common/core/exception/utils/AssertUtil.java +++ b/chushang-common/chushang-common-core/src/main/java/com/chushang/common/core/exception/utils/AssertUtil.java @@ -12,7 +12,7 @@ public class AssertUtil { public AssertUtil() { } - public static void invalidate(boolean condition, EnumUtils.CodeEnum msg) { + public static void invalidate(boolean condition, EnumUtils.CodeEnum msg) { if (condition) { throw new ResultException(msg); } diff --git a/chushang-common/chushang-common-core/src/main/java/com/chushang/common/core/util/IPUtils.java b/chushang-common/chushang-common-core/src/main/java/com/chushang/common/core/util/IPUtils.java index 012c1a0..d3032a4 100644 --- a/chushang-common/chushang-common-core/src/main/java/com/chushang/common/core/util/IPUtils.java +++ b/chushang-common/chushang-common-core/src/main/java/com/chushang/common/core/util/IPUtils.java @@ -10,19 +10,185 @@ import java.util.Objects; import java.util.regex.Matcher; import java.util.regex.Pattern; import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import cn.hutool.core.io.resource.ResourceUtil; +import cn.hutool.core.net.Ipv4Util; +import cn.hutool.core.net.NetUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.extra.servlet.ServletUtil; +import cn.hutool.http.useragent.UserAgent; +import cn.hutool.http.useragent.UserAgentUtil; +import cn.hutool.system.OsInfo; +import cn.hutool.system.SystemUtil; import com.alibaba.fastjson2.JSON; +import org.lionsoul.ip2region.xdb.Searcher; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.http.HttpHeaders; import org.springframework.http.server.reactive.ServerHttpRequest; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; public class IPUtils { private static final Logger log = LoggerFactory.getLogger(IPUtils.class); + /** + * 文件地址 + */ + private static final String DB_PATE = "ip2region.xdb"; + /** + * 查询对象 + */ + private static final Searcher SEARCHER; + + static { + // 创建一个完全基于内存的查询对象 + try { + SEARCHER = Searcher.newWithBuffer(ResourceUtil.readBytes(DB_PATE)); + log.info("-------------------- ip2region初始化完成 --------------------"); + } catch (Exception e) { + log.error("ip2region.xdb初始化失败,地址:[{}]", DB_PATE, e); + throw new RuntimeException(); + } + } + + public IPUtils() { } + + /** + *

获取ip地址详细信息

+ * + * @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; + } + + /** + *

获取ip地址详细信息

+ * + * @return ip所在城市 + * @author 单傲 + * @date 2023/1/12 14:02 + */ + public static String getLocalCityInfo() { + return getLocalCityInfo(clientIp(getRequest())); + } + + + /** + *

获取ip地址详细信息

+ * + * @return ip所在城市 + * @author 单傲 + * @date 2023/1/12 14:02 + */ + public static String getLocalCityInfo(HttpServletRequest request) { + return getLocalCityInfo(clientIp(request)); + } + + /** + *

获取浏览器类型

+ * + * @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(); + } + + /** + *

是否为app

+ * + * @author 单傲 + * @date 2023/1/12 14:02 + */ + public static boolean isMobile() { + UserAgent parse = UserAgentUtil.parse(Objects.requireNonNull(getRequest()).getHeader("User-Agent")); + return parse.isMobile(); + } + + /** + *

获取浏览器类型

+ * + * @return 类型 + * @author 单傲 + * @date 2023/1/12 14:02 + */ + public static String getBrowser() { + return getBrowser(getRequest()); + } + + /** + *

Servlet 请求属性

+ * + * @author 单傲 + * @date 2023/3/15 10:41 + */ + public static ServletRequestAttributes getRequestAttributes() { + try { + return (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); + } catch (Exception e) { + return null; + } + } + + + /** + *

获取request

+ * + * @author 单傲 + * @date 2023/3/15 10:41 + */ + public static HttpServletRequest getRequest() { + try { + return getRequestAttributes().getRequest(); + } catch (Exception e) { + return null; + } + } + + /** + *

获取response

+ * + * @author 单傲 + * @date 2023/3/15 10:41 + */ + public static HttpServletResponse getResponse() { + try { + return getRequestAttributes().getResponse(); + } catch (Exception e) { + return null; + } + } + public static String clientIp(HttpServletRequest request) { String realIps = clientIps(request); return realIps.contains(",") ? realIps.split(",")[0] : realIps; diff --git a/chushang-common/chushang-common-core/src/main/java/com/chushang/common/core/web/EnumUtils.java b/chushang-common/chushang-common-core/src/main/java/com/chushang/common/core/web/EnumUtils.java index 370d77e..5552826 100644 --- a/chushang-common/chushang-common-core/src/main/java/com/chushang/common/core/web/EnumUtils.java +++ b/chushang-common/chushang-common-core/src/main/java/com/chushang/common/core/web/EnumUtils.java @@ -10,7 +10,7 @@ import java.io.Serializable; */ @UtilityClass public class EnumUtils { - public static > T getByCode(Serializable code, Class tClass) { + public static > T getByCode(Serializable code, Class tClass) { if (null == code){ return null; } @@ -22,8 +22,8 @@ public class EnumUtils { return null; } - public interface CodeEnum { - C getCode(); + public interface CodeEnum { + Integer getCode(); S getMsg(); } } diff --git a/chushang-common/chushang-common-core/src/main/resources/ip2region.xdb b/chushang-common/chushang-common-core/src/main/resources/ip2region.xdb new file mode 100644 index 0000000..c78b792 Binary files /dev/null and b/chushang-common/chushang-common-core/src/main/resources/ip2region.xdb differ diff --git a/chushang-common/chushang-common-log/src/main/java/com/chushang/common/log/annotation/SysLog.java b/chushang-common/chushang-common-log/src/main/java/com/chushang/common/log/annotation/SysLog.java index 17e8267..f9d81a5 100644 --- a/chushang-common/chushang-common-log/src/main/java/com/chushang/common/log/annotation/SysLog.java +++ b/chushang-common/chushang-common-log/src/main/java/com/chushang/common/log/annotation/SysLog.java @@ -24,12 +24,6 @@ public @interface SysLog { String value() default ""; - /** - * 请求参数 - * 判断参数下标 -- 需要与 参数下标一一对应 - * 0 - Integer.MAX_VALUE 代表 参数下标 - */ - int index() default -1; /** * 操作类型 */ @@ -37,4 +31,9 @@ public @interface SysLog { boolean export() default false; + /** + * 是否 入库 + */ + boolean isDatabase() default true; + } diff --git a/chushang-common/chushang-common-log/src/main/java/com/chushang/common/log/aspect/SysLogAspect.java b/chushang-common/chushang-common-log/src/main/java/com/chushang/common/log/aspect/SysLogAspect.java index aa70e7a..dc20fc2 100644 --- a/chushang-common/chushang-common-log/src/main/java/com/chushang/common/log/aspect/SysLogAspect.java +++ b/chushang-common/chushang-common-log/src/main/java/com/chushang/common/log/aspect/SysLogAspect.java @@ -9,6 +9,7 @@ package com.chushang.common.log.aspect; import cn.hutool.core.util.URLUtil; +import com.alibaba.fastjson2.JSONObject; import com.chushang.common.core.exception.ResultException; import com.chushang.common.core.jackson.JacksonUtils; import com.chushang.common.core.util.IPUtils; @@ -106,7 +107,7 @@ public class SysLogAspect { String value = syslog.value(); BusinessType businessType = syslog.businessType(); if (null != businessType){ - value += businessType.getDesc(); + value = businessType.getDesc() + value; sysLogEntity.setOperationType(businessType.getCode()); } sysLogEntity.setOperation(value); @@ -155,7 +156,11 @@ public class SysLogAspect { // 日志类型 sysLogEntity.setType(type); sysLogEntity.setException(ex); - sysLogService.save(sysLogEntity); + if (syslog.isDatabase()){ + sysLogService.save(sysLogEntity); + }else { + log.info("log {}", JSONObject.toJSONString(sysLogEntity)); + } } catch (Exception e) { HttpServletRequest request = ServletUtils.getRequest(); // 保存日志失败 不应当影响 正常的操作 diff --git a/chushang-common/chushang-common-log/src/main/java/com/chushang/common/log/controller/SysLogController.java b/chushang-common/chushang-common-log/src/main/java/com/chushang/common/log/controller/SysLogController.java index e9419ed..d288bba 100644 --- a/chushang-common/chushang-common-log/src/main/java/com/chushang/common/log/controller/SysLogController.java +++ b/chushang-common/chushang-common-log/src/main/java/com/chushang/common/log/controller/SysLogController.java @@ -36,7 +36,7 @@ public class SysLogController { */ @ResponseBody @GetMapping("/list") - @RequiresPermissions("sys:log:list") + @RequiresPermissions("system:log:list") public AjaxResult list(ListLogDTO params){ PageResult page = sysLogService.queryPage(params); return AjaxResult.success(page); diff --git a/chushang-common/chushang-common-log/src/main/java/com/chushang/common/log/enums/LogTypeEnum.java b/chushang-common/chushang-common-log/src/main/java/com/chushang/common/log/enums/LogTypeEnum.java index 01a0fe7..7191a86 100644 --- a/chushang-common/chushang-common-log/src/main/java/com/chushang/common/log/enums/LogTypeEnum.java +++ b/chushang-common/chushang-common-log/src/main/java/com/chushang/common/log/enums/LogTypeEnum.java @@ -9,7 +9,7 @@ import lombok.Getter; */ @Getter @AllArgsConstructor -public enum LogTypeEnum implements EnumUtils.CodeEnum, IEnum { +public enum LogTypeEnum implements EnumUtils.CodeEnum, IEnum { NORMAL(0,"正常日志"), ERROR(9,"错误日志") ; diff --git a/chushang-common/chushang-common-mybatis/src/main/java/com/chushang/common/mybatis/page/CommonParam.java b/chushang-common/chushang-common-mybatis/src/main/java/com/chushang/common/mybatis/page/CommonParam.java index 973fbf6..9e31bf5 100644 --- a/chushang-common/chushang-common-mybatis/src/main/java/com/chushang/common/mybatis/page/CommonParam.java +++ b/chushang-common/chushang-common-mybatis/src/main/java/com/chushang/common/mybatis/page/CommonParam.java @@ -111,9 +111,12 @@ public class CommonParam implements Serializable { CommonParam pageDomain = new CommonParam(); pageDomain.setPage(Convert.toInt(ServletUtils.getParameter(PAGE_NUM), 1)); pageDomain.setLimit(Convert.toInt(ServletUtils.getParameter(PAGE_SIZE), 10)); - pageDomain.setOrderBy(ServletUtils.getParameter(ORDER_BY_COLUMN)); - pageDomain.setIsAsc(ServletUtils.getParameter(IS_ASC)); - pageDomain.setGroupStr(ServletUtils.getParameter(GROUP_STR)); + if (StringUtils.isNotEmpty(ServletUtils.getParameter(ORDER_BY_COLUMN))) + pageDomain.setOrderBy(ServletUtils.getParameter(ORDER_BY_COLUMN)); + if (StringUtils.isNotEmpty(ServletUtils.getParameter(IS_ASC))) + pageDomain.setIsAsc(ServletUtils.getParameter(IS_ASC)); + if (StringUtils.isNotEmpty(ServletUtils.getParameter(GROUP_STR))) + pageDomain.setGroupStr(ServletUtils.getParameter(GROUP_STR)); return pageDomain; } diff --git a/chushang-common/chushang-common-mybatis/src/main/java/com/chushang/common/mybatis/utils/PageResult.java b/chushang-common/chushang-common-mybatis/src/main/java/com/chushang/common/mybatis/utils/PageResult.java index 250dbf3..d56c58a 100644 --- a/chushang-common/chushang-common-mybatis/src/main/java/com/chushang/common/mybatis/utils/PageResult.java +++ b/chushang-common/chushang-common-mybatis/src/main/java/com/chushang/common/mybatis/utils/PageResult.java @@ -26,7 +26,7 @@ public class PageResult implements Serializable { /** * 总记录数 */ - private int totalCount; + private int total; /** * 每页记录数 */ @@ -42,29 +42,29 @@ public class PageResult implements Serializable { /** * 列表数据 */ - private List list; + private List rows; /** * 分页 - * @param list 列表数据 - * @param totalCount 总记录数 + * @param rows 列表数据 + * @param total 总记录数 * @param pageSize 每页记录数 * @param currPage 当前页数 */ - public PageResult(List list, long totalCount, long pageSize, long currPage) { - this.list = list; - this.totalCount = (int)totalCount; + public PageResult(List rows, long total, long pageSize, long currPage) { + this.rows = rows; + this.total = (int)total; this.pageSize = (int)pageSize; this.currPage = (int)currPage; - this.totalPage = (int)Math.ceil((double)totalCount/pageSize); + this.totalPage = (int)Math.ceil((double)total/pageSize); } - public PageResult(List list, IPage page) { - this.list = list; + public PageResult(List rows, IPage page) { + this.rows = rows; if (null != page){ - this.totalCount = (int)page.getTotal(); + this.total = (int)page.getTotal(); this.pageSize = (int)page.getSize(); this.currPage = (int)page.getCurrent(); - this.totalPage = (int)Math.ceil((double)totalCount/pageSize); + this.totalPage = (int)Math.ceil((double)total/pageSize); } } @@ -72,8 +72,8 @@ public class PageResult implements Serializable { * 分页 */ public PageResult(IPage page) { - this.list = page.getRecords(); - this.totalCount = (int)page.getTotal(); + this.rows = page.getRecords(); + this.total = (int)page.getTotal(); this.pageSize = (int)page.getSize(); this.currPage = (int)page.getCurrent(); this.totalPage = (int)page.getPages(); diff --git a/chushang-common/chushang-common-security/src/main/java/com/chushang/security/auth/AuthLogic.java b/chushang-common/chushang-common-security/src/main/java/com/chushang/security/auth/AuthLogic.java index cf37458..3898871 100644 --- a/chushang-common/chushang-common-security/src/main/java/com/chushang/security/auth/AuthLogic.java +++ b/chushang-common/chushang-common-security/src/main/java/com/chushang/security/auth/AuthLogic.java @@ -38,7 +38,6 @@ public class AuthLogic { tokenService.delLoginUser(token); } - /** * 检验用户是否已经登录,如未登录,则抛出异常 */ diff --git a/chushang-common/chushang-common-security/src/main/java/com/chushang/security/service/TokenService.java b/chushang-common/chushang-common-security/src/main/java/com/chushang/security/service/TokenService.java index adbed13..a872f6c 100644 --- a/chushang-common/chushang-common-security/src/main/java/com/chushang/security/service/TokenService.java +++ b/chushang-common/chushang-common-security/src/main/java/com/chushang/security/service/TokenService.java @@ -193,4 +193,12 @@ public class TokenService log.debug("强退 {} 个用户, userId : {}.",l, userId ); } } + + public void forcedRetreatByTokenKey(String tokenKey){ + RKeys rKeys = redissonClient.getKeys(); + long l = rKeys.deleteByPattern(CacheConstants.LOGIN_TOKEN_KEY + tokenKey); + if (log.isDebugEnabled()){ + log.debug("强退 {} 个用户, userId : {}.",l, tokenKey.split("#")[1] ); + } + } } diff --git a/chushang-modules/chushang-module-gateway/src/main/java/com/chushang/gateway/config/properties/CaptchaProperties.java b/chushang-modules/chushang-module-gateway/src/main/java/com/chushang/gateway/config/properties/CaptchaProperties.java index ad80492..65bb69e 100644 --- a/chushang-modules/chushang-module-gateway/src/main/java/com/chushang/gateway/config/properties/CaptchaProperties.java +++ b/chushang-modules/chushang-module-gateway/src/main/java/com/chushang/gateway/config/properties/CaptchaProperties.java @@ -1,5 +1,7 @@ package com.chushang.gateway.config.properties; +import lombok.Getter; +import lombok.Setter; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.cloud.context.config.annotation.RefreshScope; import org.springframework.context.annotation.Configuration; @@ -9,6 +11,8 @@ import org.springframework.context.annotation.Configuration; * * @author ruoyi */ +@Setter +@Getter @Configuration @RefreshScope @ConfigurationProperties(prefix = "security.captcha") @@ -24,23 +28,4 @@ public class CaptchaProperties */ private String type; - public Boolean getEnabled() - { - return enabled; - } - - public void setEnabled(Boolean enabled) - { - this.enabled = enabled; - } - - public String getType() - { - return type; - } - - public void setType(String type) - { - this.type = type; - } } diff --git a/chushang-modules/chushang-module-gateway/src/main/java/com/chushang/gateway/filter/AuthFilter.java b/chushang-modules/chushang-module-gateway/src/main/java/com/chushang/gateway/filter/AuthFilter.java index 142ebbb..44c9cfe 100644 --- a/chushang-modules/chushang-module-gateway/src/main/java/com/chushang/gateway/filter/AuthFilter.java +++ b/chushang-modules/chushang-module-gateway/src/main/java/com/chushang/gateway/filter/AuthFilter.java @@ -150,7 +150,7 @@ public class AuthFilter implements GlobalFilter, Ordered }else { token = null; // 如果为 sanyi/job 时, 通过cookie 获取token - if (StringUtils.matches(newPath, List.of("/sanyi/job/**"))){ + if (StringUtils.matches(newPath, List.of("/chushang/job/**"))){ HttpCookie cookie = request.getCookies().getFirst("Admin-Token"); if (ObjectUtil.isNotEmpty(cookie)){ assert cookie != null; diff --git a/chushang-modules/chushang-module-gateway/src/main/java/com/chushang/gateway/service/impl/ValidateCodeServiceImpl.java b/chushang-modules/chushang-module-gateway/src/main/java/com/chushang/gateway/service/impl/ValidateCodeServiceImpl.java index 2116a50..2827e50 100644 --- a/chushang-modules/chushang-module-gateway/src/main/java/com/chushang/gateway/service/impl/ValidateCodeServiceImpl.java +++ b/chushang-modules/chushang-module-gateway/src/main/java/com/chushang/gateway/service/impl/ValidateCodeServiceImpl.java @@ -21,6 +21,8 @@ import javax.annotation.Resource; import javax.imageio.ImageIO; import java.awt.image.BufferedImage; import java.io.IOException; +import java.util.HashMap; +import java.util.Map; import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; @@ -47,44 +49,42 @@ public class ValidateCodeServiceImpl implements ValidateCodeService { */ @Override public AjaxResult createCaptcha() throws ResultException { - AjaxResult ajax = AjaxResult.success(); boolean captchaOnOff = captchaProperties.getEnabled(); - ajax.put("captchaOnOff", captchaOnOff); - if (!captchaOnOff) { - return ajax; - } + Map resultMap = new HashMap<>(); + resultMap.put("captchaEnabled", captchaOnOff); + if (captchaOnOff) { + // 保存验证码信息 + String uuid = IdUtils.getId(32); + String verifyKey = Constants.CAPTCHA_CODE_KEY + uuid; - // 保存验证码信息 - String uuid = IdUtils.getId(32); - String verifyKey = Constants.CAPTCHA_CODE_KEY + uuid; + String capStr, code = null; + BufferedImage image = null; - String capStr, code = null; - BufferedImage image = null; - - String captchaType = captchaProperties.getType(); - // 生成验证码 - if ("math".equals(captchaType)) { - String capText = captchaProducerMath.createText(); - capStr = capText.substring(0, capText.lastIndexOf("@")); - code = capText.substring(capText.lastIndexOf("@") + 1); - image = captchaProducerMath.createImage(capStr); - } else if ("char".equals(captchaType)) { - code = capStr = captchaProducer.createText(); - image = captchaProducer.createImage(capStr); + String captchaType = captchaProperties.getType(); + // 生成验证码 + if ("math".equals(captchaType)) { + String capText = captchaProducerMath.createText(); + capStr = capText.substring(0, capText.lastIndexOf("@")); + code = capText.substring(capText.lastIndexOf("@") + 1); + image = captchaProducerMath.createImage(capStr); + } else if ("char".equals(captchaType)) { + code = capStr = captchaProducer.createText(); + image = captchaProducer.createImage(capStr); + } + redissonClient.getBucket(verifyKey) + .set(code, Constants.CAPTCHA_EXPIRATION, TimeUnit.MINUTES); + // 转换流信息写出 + FastByteArrayOutputStream os = new FastByteArrayOutputStream(); + try { + assert image != null; + ImageIO.write(image, "jpg", os); + } catch (IOException e) { + return AjaxResult.error(e.getMessage()); + } + resultMap.put("uuid", uuid); + resultMap.put("img", Base64.encode(os.toByteArray())); } - redissonClient.getBucket(verifyKey) - .set(code, Constants.CAPTCHA_EXPIRATION, TimeUnit.MINUTES); - // 转换流信息写出 - FastByteArrayOutputStream os = new FastByteArrayOutputStream(); - try { - assert image != null; - ImageIO.write(image, "jpg", os); - } catch (IOException e) { - return AjaxResult.error(e.getMessage()); - } - ajax.put("uuid", uuid); - ajax.put("img", Base64.encode(os.toByteArray())); - return ajax; + return AjaxResult.success(resultMap); } /** diff --git a/chushang-modules/chushang-module-gateway/src/main/resources/logback-nacos.xml b/chushang-modules/chushang-module-gateway/src/main/resources/logback-nacos.xml index 6495d04..a51d9a9 100644 --- a/chushang-modules/chushang-module-gateway/src/main/resources/logback-nacos.xml +++ b/chushang-modules/chushang-module-gateway/src/main/resources/logback-nacos.xml @@ -100,7 +100,7 @@ - + diff --git a/chushang-modules/chushang-module-system/system-feign/src/main/java/com/chushang/system/entity/dto/ListDictDTO.java b/chushang-modules/chushang-module-system/system-feign/src/main/java/com/chushang/system/entity/dto/ListDictDTO.java index 20bbea1..4064d0a 100644 --- a/chushang-modules/chushang-module-system/system-feign/src/main/java/com/chushang/system/entity/dto/ListDictDTO.java +++ b/chushang-modules/chushang-module-system/system-feign/src/main/java/com/chushang/system/entity/dto/ListDictDTO.java @@ -35,7 +35,7 @@ public class ListDictDTO { private String isDefault; /** - * 状态(0正常 1停用) + * 状态(1正常 0停用) */ - private String status; + private Boolean status; } diff --git a/chushang-modules/chushang-module-system/system-feign/src/main/java/com/chushang/system/entity/dto/ListLoginLogDTO.java b/chushang-modules/chushang-module-system/system-feign/src/main/java/com/chushang/system/entity/dto/ListLoginLogDTO.java new file mode 100644 index 0000000..9369d50 --- /dev/null +++ b/chushang-modules/chushang-module-system/system-feign/src/main/java/com/chushang/system/entity/dto/ListLoginLogDTO.java @@ -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; + +} diff --git a/chushang-modules/chushang-module-system/system-feign/src/main/java/com/chushang/system/entity/dto/ListUserDTO.java b/chushang-modules/chushang-module-system/system-feign/src/main/java/com/chushang/system/entity/dto/ListUserDTO.java index c1d8b05..f400c22 100644 --- a/chushang-modules/chushang-module-system/system-feign/src/main/java/com/chushang/system/entity/dto/ListUserDTO.java +++ b/chushang-modules/chushang-module-system/system-feign/src/main/java/com/chushang/system/entity/dto/ListUserDTO.java @@ -17,4 +17,7 @@ public class ListUserDTO extends CommonParam { * 部门id */ private Integer deptId; + + private Integer status; + private String phone; } diff --git a/chushang-modules/chushang-module-system/system-feign/src/main/java/com/chushang/system/entity/enums/AuthTypeEnum.java b/chushang-modules/chushang-module-system/system-feign/src/main/java/com/chushang/system/entity/enums/AuthTypeEnum.java index 7dcab2a..015f408 100644 --- a/chushang-modules/chushang-module-system/system-feign/src/main/java/com/chushang/system/entity/enums/AuthTypeEnum.java +++ b/chushang-modules/chushang-module-system/system-feign/src/main/java/com/chushang/system/entity/enums/AuthTypeEnum.java @@ -12,7 +12,7 @@ import lombok.Getter; */ @Getter @AllArgsConstructor -public enum AuthTypeEnum implements EnumUtils.CodeEnum, IEnum { +public enum AuthTypeEnum implements EnumUtils.CodeEnum, IEnum { APP(1, "appData","项目授权", " select id from sanyi_app "), PLATFORM(2, "platformData","平台授权", " select id from sanyi_platform "), /** diff --git a/chushang-modules/chushang-module-system/system-feign/src/main/java/com/chushang/system/entity/enums/DataTypeEnum.java b/chushang-modules/chushang-module-system/system-feign/src/main/java/com/chushang/system/entity/enums/DataTypeEnum.java deleted file mode 100644 index b318ad1..0000000 --- a/chushang-modules/chushang-module-system/system-feign/src/main/java/com/chushang/system/entity/enums/DataTypeEnum.java +++ /dev/null @@ -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, IEnum { - 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; - } -} diff --git a/chushang-modules/chushang-module-system/system-feign/src/main/java/com/chushang/system/entity/enums/LoginStatusEnum.java b/chushang-modules/chushang-module-system/system-feign/src/main/java/com/chushang/system/entity/enums/LoginStatusEnum.java index 2e6d668..432be0a 100644 --- a/chushang-modules/chushang-module-system/system-feign/src/main/java/com/chushang/system/entity/enums/LoginStatusEnum.java +++ b/chushang-modules/chushang-module-system/system-feign/src/main/java/com/chushang/system/entity/enums/LoginStatusEnum.java @@ -12,11 +12,11 @@ import lombok.Getter; */ @Getter @AllArgsConstructor -public enum LoginStatusEnum implements EnumUtils.CodeEnum, IEnum { +public enum LoginStatusEnum implements IEnum { LOGIN_SUCCESS(0, "登录成功"), - LOGOUT_SUCCESS(1, "注销成功"), - REGISTER_SUCCESS(2, "注册成功成功"), - LOGIN_FAIL_STATUS(3, "登录失败"), + LOGOUT_SUCCESS(1, "登录失败"), + REGISTER_SUCCESS(2, "注册成功"), + LOGIN_FAIL_STATUS(3, "注销成功"), ; @JsonValue @@ -28,9 +28,4 @@ public enum LoginStatusEnum implements EnumUtils.CodeEnum, IEnu public Integer getValue() { return this.code; } - - @Override - public String getMsg() { - return this.desc; - } } diff --git a/chushang-modules/chushang-module-system/system-feign/src/main/java/com/chushang/system/entity/enums/PermTypeEnum.java b/chushang-modules/chushang-module-system/system-feign/src/main/java/com/chushang/system/entity/enums/PermTypeEnum.java index cd19cdd..bcdf00c 100644 --- a/chushang-modules/chushang-module-system/system-feign/src/main/java/com/chushang/system/entity/enums/PermTypeEnum.java +++ b/chushang-modules/chushang-module-system/system-feign/src/main/java/com/chushang/system/entity/enums/PermTypeEnum.java @@ -16,7 +16,7 @@ import lombok.Getter; */ @AllArgsConstructor @Getter -public enum PermTypeEnum implements EnumUtils.CodeEnum, IEnum { +public enum PermTypeEnum implements IEnum { ALL(0,"超级管理员 -> 查看全部"), DEPT_AND_CHILD(1,"部门及以下数据权限"), DEPT(2,"部门"), @@ -32,9 +32,4 @@ public enum PermTypeEnum implements EnumUtils.CodeEnum, IEnum deptList = sysDeptService.selectDeptList(new ListDeptDTO()); @@ -89,8 +90,8 @@ public class DeptController { /** * 新增部门 */ - @RequiresPermissions("sys:dept:add") - @SysLog("新增部门") + @RequiresPermissions("system:dept:add") + @SysLog(value = "部门", businessType = BusinessType.INSERT) @PostMapping public AjaxResult add(@Valid @RequestBody SysDept dept) { @@ -107,8 +108,8 @@ public class DeptController { /** * 修改部门 */ - @RequiresPermissions("sys:dept:edit") - @SysLog("修改部门") + @RequiresPermissions("system:dept:edit") + @SysLog(value = "部门", businessType = BusinessType.UPDATE) @PutMapping public AjaxResult edit(@Valid @RequestBody SysDept dept) { @@ -138,8 +139,8 @@ public class DeptController { /** * 删除部门 */ - @RequiresPermissions("sys:dept:remove") - @SysLog("删除部门") + @RequiresPermissions("system:dept:remove") + @SysLog(value = "部门", businessType = BusinessType.DELETE) @DeleteMapping("/{deptId}") public AjaxResult remove(@PathVariable Integer deptId) { diff --git a/chushang-modules/chushang-module-system/system-service/src/main/java/com/chushang/system/controller/DictController.java b/chushang-modules/chushang-module-system/system-service/src/main/java/com/chushang/system/controller/DictController.java index e07518c..c12ef09 100644 --- a/chushang-modules/chushang-module-system/system-service/src/main/java/com/chushang/system/controller/DictController.java +++ b/chushang-modules/chushang-module-system/system-service/src/main/java/com/chushang/system/controller/DictController.java @@ -51,7 +51,7 @@ public class DictController { return AjaxResult.success(dictDataService.pageDictDataList(dictData, pageParam)); } - @SysLog(value = "导出字典数据") + @SysLog(value = "字典数据", businessType = BusinessType.EXPORT) @RequiresPermissions("system:dict:export") @PostMapping("/export") public void export(HttpServletResponse response, ListDictDTO dictData) diff --git a/chushang-modules/chushang-module-system/system-service/src/main/java/com/chushang/system/controller/DictTypeController.java b/chushang-modules/chushang-module-system/system-service/src/main/java/com/chushang/system/controller/DictTypeController.java index 9da6eb1..162b816 100644 --- a/chushang-modules/chushang-module-system/system-service/src/main/java/com/chushang/system/controller/DictTypeController.java +++ b/chushang-modules/chushang-module-system/system-service/src/main/java/com/chushang/system/controller/DictTypeController.java @@ -24,6 +24,7 @@ import java.util.List; /** * @auther: zhao * @date: 2024/5/9 15:54 + * todo 加入缓存 */ @RestController @RequestMapping(value = "/dict/type") @@ -107,9 +108,9 @@ public class DictTypeController { } /** - * 刷新字典缓存 TODO + * TODO 刷新字典缓存 */ - @RequiresPermissions("system:dict:remove") + @RequiresPermissions("system:dict:refresh") @SysLog(value = "字典类型", businessType = BusinessType.CLEAN) @DeleteMapping("/refreshCache") public AjaxResult refreshCache() diff --git a/chushang-modules/chushang-module-system/system-service/src/main/java/com/chushang/system/controller/MenuController.java b/chushang-modules/chushang-module-system/system-service/src/main/java/com/chushang/system/controller/MenuController.java index cce8e74..173847b 100644 --- a/chushang-modules/chushang-module-system/system-service/src/main/java/com/chushang/system/controller/MenuController.java +++ b/chushang-modules/chushang-module-system/system-service/src/main/java/com/chushang/system/controller/MenuController.java @@ -4,6 +4,7 @@ import com.chushang.common.core.constant.Constants; import com.chushang.common.core.util.StringUtils; import com.chushang.common.core.web.AjaxResult; import com.chushang.common.log.annotation.SysLog; +import com.chushang.common.log.enums.BusinessType; import com.chushang.security.annotation.RequiresPermissions; import com.chushang.security.utils.SecurityUtils; import com.chushang.system.entity.dto.ListMenuDTO; @@ -30,7 +31,7 @@ public class MenuController { /** * 获取菜单列表 */ - @RequiresPermissions("sys:menu:list") + @RequiresPermissions("system:menu:list") @GetMapping("/list") public AjaxResult list(ListMenuDTO listMenu) { @@ -42,7 +43,7 @@ public class MenuController { /** * 根据菜单编号获取详细信息 */ - @RequiresPermissions("sys:menu:query") + @RequiresPermissions("system:menu:query") @GetMapping(value = "/{menuId}") public AjaxResult getInfo(@PathVariable Integer menuId) { @@ -77,8 +78,8 @@ public class MenuController { /** * 新增菜单 */ - @RequiresPermissions("sys:menu:add") - @SysLog("新增菜单") + @RequiresPermissions("system:menu:add") + @SysLog(value = "菜单", businessType = BusinessType.INSERT) @PostMapping public AjaxResult add(@Validated @RequestBody SysMenu menu) { @@ -87,7 +88,7 @@ public class MenuController { return AjaxResult.error("新增菜单'" + menu.getMenuName() + "'失败,菜单名称已存在"); } // 外链 - else if ("0".equals(menu.getFrame()) && ! StringUtils.startsWithAny(menu.getPath(), Constants.HTTP, Constants.HTTPS)) + else if (!menu.getFrame() && ! StringUtils.startsWithAny(menu.getPath(), Constants.HTTP, Constants.HTTPS)) { return AjaxResult.error("新增菜单'" + menu.getMenuName() + "'失败,地址必须以http(s)://开头"); } @@ -101,8 +102,8 @@ public class MenuController { /** * 修改菜单 */ - @RequiresPermissions("sys:menu:edit") - @SysLog("修改菜单") + @RequiresPermissions("system:menu:edit") + @SysLog(value = "修改菜单", businessType = BusinessType.UPDATE) @PutMapping public AjaxResult edit(@Validated @RequestBody SysMenu menu) { @@ -111,7 +112,7 @@ public class MenuController { return AjaxResult.error("修改菜单'" + menu.getMenuName() + "'失败,菜单名称已存在"); } // 外链 - else if ("0".equals(menu.getFrame()) && !StringUtils.startsWithAny(menu.getPath(), Constants.HTTP, Constants.HTTPS)) + else if (!menu.getFrame() && !StringUtils.startsWithAny(menu.getPath(), Constants.HTTP, Constants.HTTPS)) { return AjaxResult.error("修改菜单'" + menu.getMenuName() + "'失败,地址必须以http(s)://开头"); } @@ -129,7 +130,7 @@ public class MenuController { /** * 删除菜单 */ - @RequiresPermissions("sys:menu:remove") + @RequiresPermissions("system:menu:remove") @SysLog("删除菜单") @DeleteMapping("/{menuId}") public AjaxResult remove(@PathVariable("menuId") Integer menuId) diff --git a/chushang-modules/chushang-module-system/system-service/src/main/java/com/chushang/system/controller/PostController.java b/chushang-modules/chushang-module-system/system-service/src/main/java/com/chushang/system/controller/PostController.java index 1014ef4..0562409 100644 --- a/chushang-modules/chushang-module-system/system-service/src/main/java/com/chushang/system/controller/PostController.java +++ b/chushang-modules/chushang-module-system/system-service/src/main/java/com/chushang/system/controller/PostController.java @@ -11,7 +11,6 @@ import com.chushang.security.annotation.RequiresPermissions; import com.chushang.security.utils.SecurityUtils; import com.chushang.system.entity.po.SysPost; import com.chushang.system.service.ISysPostService; -import lombok.extern.java.Log; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @@ -43,7 +42,7 @@ public class PostController { return AjaxResult.success(pageResult); } - @SysLog(value = "岗位管理", businessType = BusinessType.EXPORT) + @SysLog(value = "岗位", businessType = BusinessType.EXPORT) @RequiresPermissions("system:post:export") @PostMapping("/export") public void export(HttpServletResponse response, SysPost post) @@ -67,18 +66,17 @@ public class PostController { * 新增岗位 */ @RequiresPermissions("system:post:add") - @SysLog(value = "岗位管理", businessType = BusinessType.INSERT) + @SysLog(value = "岗位", businessType = BusinessType.INSERT) @PostMapping public AjaxResult add(@Validated @RequestBody SysPost post) { - CommonParam commonParam = CommonParam.buildAllRequest(); SysPost postName = new SysPost(); postName.setPostName(post.getPostName()); postName.setPostCode(null); - AssertUtil.invalidate(postService.checkPostCodeUnique(postName, commonParam), "新增岗位'" + post.getPostName() + "'失败,岗位名称已存在"); + AssertUtil.invalidate(postService.checkPostUnique(postName), "新增岗位'" + post.getPostName() + "'失败,岗位名称已存在"); postName.setPostCode(post.getPostCode()); postName.setPostName(null); - AssertUtil.invalidate(postService.checkPostCodeUnique(postName, commonParam), "新增岗位'" + post.getPostName() + "'失败,岗位编码已存在"); + AssertUtil.invalidate(postService.checkPostUnique(postName), "新增岗位'" + post.getPostName() + "'失败,岗位编码已存在"); post.setCreateBy(SecurityUtils.getUsername()); postService.saveOrUpdate(post); return AjaxResult.success(); @@ -88,18 +86,18 @@ public class PostController { * 修改岗位 */ @RequiresPermissions("system:post:edit") - @SysLog(value = "岗位管理", businessType = BusinessType.UPDATE) + @SysLog(value = "岗位", businessType = BusinessType.UPDATE) @PutMapping public AjaxResult edit(@Validated @RequestBody SysPost post) { - CommonParam commonParam = CommonParam.buildAllRequest(); SysPost postName = new SysPost(); postName.setPostName(post.getPostName()); + postName.setPostId(post.getPostId()); postName.setPostCode(null); - AssertUtil.invalidate(postService.checkPostCodeUnique(postName, commonParam), "修改岗位'" + post.getPostName() + "'失败,岗位名称已存在"); + AssertUtil.invalidate(postService.checkPostUnique(postName), "修改岗位'" + post.getPostName() + "'失败,岗位名称已存在"); postName.setPostCode(post.getPostCode()); postName.setPostName(null); - AssertUtil.invalidate(postService.checkPostCodeUnique(postName, commonParam), "修改岗位'" + post.getPostName() + "'失败,岗位编码已存在"); + AssertUtil.invalidate(postService.checkPostUnique(postName), "修改岗位'" + post.getPostName() + "'失败,岗位编码已存在"); post.setCreateBy(SecurityUtils.getUsername()); postService.saveOrUpdate(post); return AjaxResult.success(); @@ -109,7 +107,7 @@ public class PostController { * 删除岗位 */ @RequiresPermissions("system:post:remove") - @SysLog(value = "岗位管理", businessType = BusinessType.DELETE) + @SysLog(value = "岗位", businessType = BusinessType.DELETE) @DeleteMapping("/{postIds}") public AjaxResult remove(@PathVariable Long[] postIds) { @@ -121,7 +119,7 @@ public class PostController { * 获取岗位选择框列表 */ @GetMapping("/option/select") - public AjaxResult optionselect() + public AjaxResult optionSelect() { CommonParam commonParam = CommonParam.buildAllRequest(); List list = postService.allPostList(new SysPost(), commonParam); diff --git a/chushang-modules/chushang-module-system/system-service/src/main/java/com/chushang/system/controller/RoleController.java b/chushang-modules/chushang-module-system/system-service/src/main/java/com/chushang/system/controller/RoleController.java index 25145f8..d8791e5 100644 --- a/chushang-modules/chushang-module-system/system-service/src/main/java/com/chushang/system/controller/RoleController.java +++ b/chushang-modules/chushang-module-system/system-service/src/main/java/com/chushang/system/controller/RoleController.java @@ -2,6 +2,7 @@ package com.chushang.system.controller; import com.chushang.common.core.web.AjaxResult; import com.chushang.common.log.annotation.SysLog; +import com.chushang.common.log.enums.BusinessType; import com.chushang.security.annotation.RequiresPermissions; import com.chushang.security.utils.SecurityUtils; import com.chushang.system.entity.bo.CancelUserRole; @@ -29,7 +30,7 @@ public class RoleController { @Autowired ISysUserService userService; - @RequiresPermissions("sys:role:list") + @RequiresPermissions("system:role:list") @GetMapping("/list") public AjaxResult list(ListRoleDTO listRole) { @@ -39,7 +40,7 @@ public class RoleController { /** * 根据角色编号获取详细信息 */ - @RequiresPermissions("sys:role:query") + @RequiresPermissions("system:role:query") @GetMapping(value = "/{roleId}") public AjaxResult getInfo(@PathVariable Integer roleId) { @@ -51,8 +52,8 @@ public class RoleController { /** * 新增角色 */ - @RequiresPermissions("sys:role:add") - @SysLog("新增角色") + @RequiresPermissions("system:role:add") + @SysLog(value = "新增角色",businessType = BusinessType.INSERT) @PostMapping public AjaxResult add(@Validated @RequestBody SysRole role) { @@ -75,12 +76,13 @@ public class RoleController { /** * 修改保存角色 */ - @RequiresPermissions("sys:role:edit") - @SysLog("修改角色") + @RequiresPermissions("system:role:edit") + @SysLog(value = "修改角色",businessType = BusinessType.UPDATE) @PutMapping public AjaxResult edit(@Validated @RequestBody SysRole role) { - if (2 == role.getRoleId()){ + // 1 为超管 + if (1 == role.getRoleId()){ return AjaxResult.success(); } roleService.checkRoleAllowed(role); @@ -103,8 +105,8 @@ public class RoleController { /** * 修改保存数据权限 */ - @RequiresPermissions("sys:role:edit") - @SysLog("修改角色权限") + @RequiresPermissions("system:role:edit") + @SysLog(value = "修改角色权限",businessType = BusinessType.GRANT) @PutMapping("/dataScope") public AjaxResult dataScope(@RequestBody SysRole role) { @@ -119,8 +121,8 @@ public class RoleController { /** * 状态修改 */ - @RequiresPermissions("sys:role:edit") - @SysLog("修改角色状态") + @RequiresPermissions("system:role:edit") + @SysLog(value = "修改角色状态",businessType = BusinessType.UPDATE) @PutMapping("/changeStatus") public AjaxResult changeStatus(@RequestBody SysRole role) { @@ -137,8 +139,8 @@ public class RoleController { /** * 删除角色 */ - @RequiresPermissions("sys:role:remove") - @SysLog("删除角色") + @RequiresPermissions("system:role:remove") + @SysLog(value = "删除角色",businessType = BusinessType.DELETE) @DeleteMapping("/{roleIds}") public AjaxResult remove(@PathVariable Integer[] roleIds) { @@ -150,7 +152,7 @@ public class RoleController { /** * 获取角色选择框列表 */ - @RequiresPermissions("sys:role:query") + @RequiresPermissions("system:role:query") @GetMapping("/option/select") public AjaxResult optionSelect() { @@ -160,7 +162,7 @@ public class RoleController { * 查询已分配用户角色列表 * 可以根据用户名称查询 */ - @RequiresPermissions("sys:role:list") + @RequiresPermissions("system:role:list") @GetMapping("/authUser/allocatedList") public AjaxResult allocatedList(@Valid ListUserDTO listUser) { @@ -170,7 +172,7 @@ public class RoleController { /** * 查询未分配用户角色列表 */ - @RequiresPermissions("sys:role:list") + @RequiresPermissions("system:role:list") @GetMapping("/authUser/unallocatedList") public AjaxResult unallocatedList(@Valid ListUserDTO listUser) { @@ -180,8 +182,8 @@ public class RoleController { /** * 取消授权用户 */ - @RequiresPermissions("sys:role:edit") - @SysLog("取消授权用户") + @RequiresPermissions("system:role:edit") + @SysLog(value = "取消授权用户", businessType = BusinessType.GRANT) @PutMapping("/authUser/cancel") public AjaxResult cancelAuthUser(@RequestBody @Valid CancelUserRole cancelUserRole) { @@ -193,8 +195,8 @@ public class RoleController { /** * 批量选择用户授权 */ - @RequiresPermissions("sys:role:edit") - @SysLog("用户授权") + @RequiresPermissions("system:role:edit") + @SysLog(value = "用户授权", businessType = BusinessType.GRANT) @PutMapping("/authUser") public AjaxResult selectAuthUserAll(@RequestBody @Valid RoleUser roleUser) { @@ -208,4 +210,25 @@ public class RoleController { return AjaxResult.success(); } + /** + * todo 角色导出 + * @return + */ + @SysLog(value = "角色", businessType = BusinessType.EXPORT) + @GetMapping("/export") + @RequiresPermissions("system:role:export") + public AjaxResult exportRole(){ + return AjaxResult.error("暂未开放"); + } + + /** + * todo 角色导入 + */ + @GetMapping("/import") + @RequiresPermissions("system:role:import") + @SysLog(value = "角色", businessType = BusinessType.IMPORT) + public AjaxResult importRole(){ + return AjaxResult.error("暂未开放"); + } + } diff --git a/chushang-modules/chushang-module-system/system-service/src/main/java/com/chushang/system/controller/SysLoginInfoController.java b/chushang-modules/chushang-module-system/system-service/src/main/java/com/chushang/system/controller/SysLoginInfoController.java index 84e05f4..1822921 100644 --- a/chushang-modules/chushang-module-system/system-service/src/main/java/com/chushang/system/controller/SysLoginInfoController.java +++ b/chushang-modules/chushang-module-system/system-service/src/main/java/com/chushang/system/controller/SysLoginInfoController.java @@ -1,15 +1,22 @@ package com.chushang.system.controller; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.chushang.common.core.web.AjaxResult; import com.chushang.common.core.web.Result; +import com.chushang.common.log.annotation.SysLog; +import com.chushang.common.log.enums.BusinessType; +import com.chushang.common.mybatis.page.CommonParam; import com.chushang.security.annotation.InnerAuth; +import com.chushang.security.annotation.RequiresPermissions; +import com.chushang.system.entity.dto.ListLoginLogDTO; import com.chushang.system.entity.po.SysLoginInfo; import com.chushang.system.feign.RemoteLoginInfoService; import com.chushang.system.service.SysLoginInfoService; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; + +import java.util.ArrayList; +import java.util.Arrays; @RestController @RequestMapping(value = "/log/login/info") @@ -24,4 +31,30 @@ public class SysLoginInfoController implements RemoteLoginInfoService { public Result saveLoginInfo(@RequestBody SysLoginInfo sysLogininfo, String source) { return Result.ok(sysLoginInfoService.saveLoginInfo(sysLogininfo).isSuccess()); } + + @GetMapping(value = "/list") + @RequiresPermissions("system:log:list") + public AjaxResult listLoginInfo(SysLoginInfo loginInfo){ + CommonParam commonParam = CommonParam.buildPageRequest(); + return AjaxResult.success(sysLoginInfoService.pagePostList(loginInfo, commonParam)); + } + + @DeleteMapping(value = "/{infoId}") + @SysLog(value = "登录日志", businessType = BusinessType.DELETE) + @RequiresPermissions("system:log:del") + public AjaxResult delLoginInfo(@PathVariable String infoId){ + sysLoginInfoService.removeBatchByIds(Arrays.stream(infoId.split(",")).toList()); + return AjaxResult.success(); + } + + /** + * 清除登录日志 + */ + @DeleteMapping(value = "clean") + @SysLog(value = "登录日志", businessType = BusinessType.DELETE) + @RequiresPermissions("system:log:del") + public AjaxResult cleanLoginInfo(){ + sysLoginInfoService.remove(new LambdaQueryWrapper<>()); + return AjaxResult.success(); + } } diff --git a/chushang-modules/chushang-module-system/system-service/src/main/java/com/chushang/system/controller/SysUserDataController.java b/chushang-modules/chushang-module-system/system-service/src/main/java/com/chushang/system/controller/SysUserDataController.java index 9147295..24368f2 100644 --- a/chushang-modules/chushang-module-system/system-service/src/main/java/com/chushang/system/controller/SysUserDataController.java +++ b/chushang-modules/chushang-module-system/system-service/src/main/java/com/chushang/system/controller/SysUserDataController.java @@ -27,11 +27,12 @@ public class SysUserDataController { ISysUserDataService userDataService; /** - * 针对用户进行授权 + * todo 针对用户进行授权 + * 数据权限授权 */ @SysLog(value = "用户数据授权") @PostMapping(value = "/{userId}/{dataType}") - @RequiresPermissions(value = {"sys:app:auth","sys:platform:auth"}, logical = Logical.OR) + @RequiresPermissions(value = {"system:app:auth","system:platform:auth"}, logical = Logical.OR) public AjaxResult authData(@RequestBody Map authDataMap, @PathVariable Integer dataType, @PathVariable Integer userId) @@ -53,8 +54,11 @@ public class SysUserDataController { return AjaxResult.success(); } + /** + * todo 数据权限授权查看 + */ @GetMapping(value = "/{userId}/{authType}") - @RequiresPermissions(value = {"sys:app:auth","sys:platform:auth"}, logical = Logical.OR) + @RequiresPermissions(value = {"system:app:auth","system:platform:auth"}, logical = Logical.OR) public AjaxResult getAuthData(@PathVariable Integer userId, @PathVariable Integer authType) { diff --git a/chushang-modules/chushang-module-system/system-service/src/main/java/com/chushang/system/controller/SysUserOnlineController.java b/chushang-modules/chushang-module-system/system-service/src/main/java/com/chushang/system/controller/SysUserOnlineController.java index a6e659f..8880ce6 100644 --- a/chushang-modules/chushang-module-system/system-service/src/main/java/com/chushang/system/controller/SysUserOnlineController.java +++ b/chushang-modules/chushang-module-system/system-service/src/main/java/com/chushang/system/controller/SysUserOnlineController.java @@ -1,53 +1,59 @@ -//package com.chushang.system.controller; -// -//import java.util.ArrayList; -//import java.util.Collection; -//import java.util.Collections; -//import java.util.List; -// -//import com.chushang.common.core.constant.CacheConstants; -//import com.chushang.common.core.web.AjaxResult; -//import com.chushang.security.annotation.RequiresPermissions; -//import com.chushang.security.entity.vo.LoginUser; -//import com.chushang.system.entity.vo.SysUserOnline; -//import com.chushang.system.service.ISysUserOnlineService; -//import lombok.extern.java.Log; -//import org.springframework.beans.factory.annotation.Autowired; -//import org.springframework.web.bind.annotation.DeleteMapping; -//import org.springframework.web.bind.annotation.GetMapping; -//import org.springframework.web.bind.annotation.PathVariable; -//import org.springframework.web.bind.annotation.RequestMapping; -//import org.springframework.web.bind.annotation.RestController; -// -///** -// * 在线用户监控 -// * -// * @author ruoyi -// */ -//@RestController -//@RequestMapping("/online") -//public class SysUserOnlineController -//{ -// @Autowired -// private ISysUserOnlineService userOnlineService; -// -// @RequiresPermissions("monitor:online:list") -// @GetMapping("/list") -// public TableDataInfo list(String ipaddr, String userName) -// { -// -// return getDataTable(userOnlineList); -// } -// -// /** -// * 强退用户 -// */ -// @RequiresPermissions("monitor:online:forceLogout") -// @Log(title = "在线用户", businessType = BusinessType.FORCE) -// @DeleteMapping("/{tokenId}") -// public AjaxResult forceLogout(@PathVariable String tokenId) -// { -// redisService.deleteObject(CacheConstants.LOGIN_TOKEN_KEY + tokenId); -// return success(); -// } -//} +package com.chushang.system.controller; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.List; + +import com.chushang.common.core.constant.CacheConstants; +import com.chushang.common.core.web.AjaxResult; +import com.chushang.common.log.annotation.SysLog; +import com.chushang.common.log.enums.BusinessType; +import com.chushang.common.mybatis.page.CommonParam; +import com.chushang.common.mybatis.utils.PageResult; +import com.chushang.security.annotation.RequiresPermissions; +import com.chushang.security.auth.AuthUtil; +import com.chushang.security.entity.vo.LoginUser; +import com.chushang.system.entity.vo.SysUserOnline; +import com.chushang.system.service.ISysUserOnlineService; +import lombok.extern.java.Log; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +/** + * 在线用户监控 + * + * @author ruoyi + */ +@RestController +@RequestMapping("/online") +public class SysUserOnlineController +{ + @Autowired + private ISysUserOnlineService userOnlineService; + + @RequiresPermissions("monitor:online:list") + @GetMapping("/list") + public AjaxResult list(String ipaddr, String userName) + { + CommonParam commonParam = CommonParam.buildPageRequest(); + PageResult pageResult = userOnlineService.selectOnlineByIpaddr(ipaddr, userName, commonParam); + return AjaxResult.success(pageResult); + } + + /** + * 强退用户 + */ + @RequiresPermissions("monitor:online:forceLogout") + @SysLog(value = "在线用户", businessType = BusinessType.FORCE) + @DeleteMapping("/{tokenId}") + public AjaxResult forceLogout(@PathVariable String tokenId) + { + userOnlineService.forceLogout(tokenId); + return AjaxResult.success(); + } +} diff --git a/chushang-modules/chushang-module-system/system-service/src/main/java/com/chushang/system/controller/UserController.java b/chushang-modules/chushang-module-system/system-service/src/main/java/com/chushang/system/controller/UserController.java index 402e061..fe69ffa 100644 --- a/chushang-modules/chushang-module-system/system-service/src/main/java/com/chushang/system/controller/UserController.java +++ b/chushang-modules/chushang-module-system/system-service/src/main/java/com/chushang/system/controller/UserController.java @@ -7,24 +7,24 @@ import com.chushang.common.core.util.StringUtils; import com.chushang.common.core.web.AjaxResult; import com.chushang.common.core.web.Result; import com.chushang.common.log.annotation.SysLog; +import com.chushang.common.mybatis.page.CommonParam; import com.chushang.security.annotation.InnerAuth; import com.chushang.security.annotation.RequiresPermissions; import com.chushang.security.service.TokenService; import com.chushang.security.utils.SecurityUtils; import com.chushang.system.entity.bo.PasswordForm; import com.chushang.system.entity.dto.ListUserDTO; +import com.chushang.system.entity.po.SysPost; import com.chushang.system.entity.po.SysRole; import com.chushang.system.entity.po.SysUser; import com.chushang.system.entity.po.SysUserData; import com.chushang.security.entity.vo.LoginUser; import com.chushang.system.feign.RemoteUserService; -import com.chushang.system.service.ISysPermissionService; -import com.chushang.system.service.ISysRoleService; -import com.chushang.system.service.ISysUserDataService; -import com.chushang.system.service.ISysUserService; +import com.chushang.system.service.*; import org.apache.commons.lang3.ArrayUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import javax.validation.Valid; import java.util.*; @@ -42,6 +42,8 @@ public class UserController implements RemoteUserService { @Autowired ISysRoleService sysRoleService; @Autowired + ISysPostService sysPostService; + @Autowired ISysPermissionService permissionService; @Autowired ISysUserDataService userDataService; @@ -53,7 +55,7 @@ public class UserController implements RemoteUserService { */ @GetMapping(value = "/list") // 权限校验 -- 菜单权限 - @RequiresPermissions("sys:user:list") + @RequiresPermissions("system:user:list") public AjaxResult listUser(ListUserDTO listUserDTO) { return sysUserService.listUser(listUserDTO); } @@ -120,27 +122,33 @@ public class UserController implements RemoteUserService { /** * 根据用户编号获取详细信息 */ - @RequiresPermissions("sys:user:query") + @RequiresPermissions("system:user:query") @GetMapping(value = {"/", "/{userId}"}) public AjaxResult getInfo(@PathVariable(value = "userId", required = false) Integer userId) { sysUserService.checkUserDataScope(new SysUser(userId)); AjaxResult ajax = AjaxResult.success(); List roles = sysRoleService.selectRoleAll(new SysRole()); + + List posts = sysPostService.allPostList(); // 角色 ajax.put("roles", SysUser.isAdmin(userId) || SecurityUtils.isAdmin() ? roles : roles.stream().filter(r -> !r.isAdmin()).collect(Collectors.toList())); + // 岗位 + ajax.put("posts", posts); if (StringUtils.isNotNull(userId)) { SysUser sysUser = sysUserService.selectUserById(userId); sysUser.setPassword(""); sysUser.setSalt(""); ajax.put(AjaxResult.DATA_TAG, sysUser); + ajax.put("postIds", sysPostService.selectPostListByUserId(userId)); ajax.put("roleIds", sysUser.getRoles().stream().map(SysRole::getRoleId).collect(Collectors.toList())); + } return ajax; } @SysLog("保存用户") @PostMapping("/save") - @RequiresPermissions(value = "sys:user:save") + @RequiresPermissions(value = "system:user:save") public AjaxResult save(@RequestBody SysUser user) { user.setCreateBy(SecurityUtils.getUsername()); @@ -156,7 +164,7 @@ public class UserController implements RemoteUserService { */ @SysLog("修改用户") @PostMapping("/update") - @RequiresPermissions("sys:user:update") + @RequiresPermissions("system:user:update") public AjaxResult update(@RequestBody SysUser user) { sysUserService.checkUserAllowed(user); @@ -173,7 +181,7 @@ public class UserController implements RemoteUserService { */ @SysLog("删除用户") @DeleteMapping("/{userIds}") - @RequiresPermissions("sys:user:delete") + @RequiresPermissions("system:user:delete") public AjaxResult delete(@PathVariable Integer[] userIds) { if (ArrayUtils.contains(userIds, 1)) { return AjaxResult.error("系统管理员不能删除"); @@ -191,7 +199,7 @@ public class UserController implements RemoteUserService { /** * 修改自己的 */ - @RequiresPermissions("sys:user:updatePwd") + @RequiresPermissions("system:user:updatePwd") @SysLog("修改密码") @PutMapping("/updatePwd") public AjaxResult updatePwd(@RequestBody @Valid PasswordForm form) @@ -219,7 +227,7 @@ public class UserController implements RemoteUserService { /** * 重置密码 别人的 */ - @RequiresPermissions("sys:user:resetPwd") + @RequiresPermissions("system:user:resetPwd") @SysLog("重置密码") @PutMapping("/resetPwd/{userId}") public AjaxResult resetPwd(@RequestBody @Valid PasswordForm form, @@ -238,7 +246,7 @@ public class UserController implements RemoteUserService { /** * 状态修改 */ - @RequiresPermissions("sys:user:changeStatus") + @RequiresPermissions("system:user:changeStatus") @SysLog("修改用户状态") @PutMapping("/changeStatus") public AjaxResult changeStatus(@RequestBody SysUser user) @@ -253,7 +261,7 @@ public class UserController implements RemoteUserService { /** * 根据用户编号获取授权角色 */ - @RequiresPermissions("sys:user:query") + @RequiresPermissions("system:user:query") @GetMapping("/authRole/{userId}") public AjaxResult authRole(@PathVariable Integer userId) { @@ -271,7 +279,7 @@ public class UserController implements RemoteUserService { /** * 用户授权角色 */ - @RequiresPermissions("sys:user:auth") + @RequiresPermissions("system:user:auth") @SysLog("用户授权") @PutMapping("/authRole") public AjaxResult insertAuthRole(Integer userId, Integer[] roleIds) @@ -301,19 +309,46 @@ public class UserController implements RemoteUserService { sysUserVo.setSysUser(sysUser); sysUserVo.setRoles(roles); sysUserVo.setPermissions(permissions); - + // todo 用户拥有的数据权限 List userDataList = userDataService.listUserData(sysUser); // 默认传递一个空Map --> 拥有管理员 sysUserVo.setAuthDataMap(new HashMap<>()); - if (CollectionUtil.isNotEmpty(userDataList)){ - Map> authDataMap = new HashMap<>(); - // 对应的数据权限 - for (SysUserData sysUserData : userDataList) { - authDataMap.put(sysUserData.getDataType().getCodeType(), - new HashSet<>(JSONUtil.toList(sysUserData.getDataValue(), String.class))); - } - sysUserVo.setAuthDataMap(authDataMap); - } +// if (CollectionUtil.isNotEmpty(userDataList)){ +// Map> authDataMap = new HashMap<>(); +// // 对应的数据权限 +// for (SysUserData sysUserData : userDataList) { +// authDataMap.put(sysUserData.getDataType().getCodeType(), +// new HashSet<>(JSONUtil.toList(sysUserData.getDataValue(), String.class))); +// } +// sysUserVo.setAuthDataMap(authDataMap); +// } return Result.ok(sysUserVo); } + + /** + * todo 导入用户 + */ + @PostMapping(value = "/import") + @RequiresPermissions("system:user:import") + public AjaxResult importUser(MultipartFile file){ + return AjaxResult.error("暂未开放"); + } + + /** + * todo 导出用户 + */ + @GetMapping(value = "/export") + @RequiresPermissions("system:user:export") + public AjaxResult exportUser(){ + return AjaxResult.error("暂未开放"); + } + + /** + * todo 下载导入模版 + */ + @GetMapping(value = "/import/template") + @RequiresPermissions("system:user:import") + public AjaxResult importTemplate(){ + return AjaxResult.error("暂未开放"); + } } diff --git a/chushang-modules/chushang-module-system/system-service/src/main/java/com/chushang/system/mapper/SysPostMapper.java b/chushang-modules/chushang-module-system/system-service/src/main/java/com/chushang/system/mapper/SysPostMapper.java index 9e0a778..f97022a 100644 --- a/chushang-modules/chushang-module-system/system-service/src/main/java/com/chushang/system/mapper/SysPostMapper.java +++ b/chushang-modules/chushang-module-system/system-service/src/main/java/com/chushang/system/mapper/SysPostMapper.java @@ -2,10 +2,17 @@ package com.chushang.system.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.chushang.system.entity.po.SysPost; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; + +import java.util.List; /** * @auther: zhao * @date: 2024/5/9 15:49 */ public interface SysPostMapper extends BaseMapper { + @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 selectPostListByUserId(@Param("userId") Integer userId); } diff --git a/chushang-modules/chushang-module-system/system-service/src/main/java/com/chushang/system/service/ISysPostService.java b/chushang-modules/chushang-module-system/system-service/src/main/java/com/chushang/system/service/ISysPostService.java index f8daca7..30b0bd4 100644 --- a/chushang-modules/chushang-module-system/system-service/src/main/java/com/chushang/system/service/ISysPostService.java +++ b/chushang-modules/chushang-module-system/system-service/src/main/java/com/chushang/system/service/ISysPostService.java @@ -1,14 +1,20 @@ package com.chushang.system.service; +import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; +import com.chushang.common.core.util.StringUtils; +import com.chushang.common.mybatis.enums.Operator; import com.chushang.common.mybatis.page.CommonParam; import com.chushang.common.mybatis.utils.PageResult; import com.chushang.system.entity.po.SysPost; +import com.chushang.system.entity.po.SysRole; import java.util.List; +import static net.sf.jsqlparser.util.validation.metadata.NamedObject.role; + /** * @auther: zhao * @date: 2024/5/9 15:53 @@ -27,8 +33,21 @@ public interface ISysPostService extends IService { return this.list(buildWrapper(post, commonParam)); } - - default boolean checkPostCodeUnique(SysPost sysPost, CommonParam commonParam){ - return this.count(buildWrapper(sysPost, commonParam)) > 0; + default List allPostList(){ + SysPost sysPost = new SysPost(); + sysPost.setStatus(true); + return allPostList(sysPost, CommonParam.buildAllRequest()); } + + + default boolean checkPostUnique(SysPost post){ + int postId = ObjectUtil.isNull(post.getPostId()) ? -1 : post.getPostId(); + SysPost info = getOne(new LambdaQueryWrapper() + .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 selectPostListByUserId(Integer userId); } diff --git a/chushang-modules/chushang-module-system/system-service/src/main/java/com/chushang/system/service/ISysUserOnlineService.java b/chushang-modules/chushang-module-system/system-service/src/main/java/com/chushang/system/service/ISysUserOnlineService.java index cd0fd84..5c14d77 100644 --- a/chushang-modules/chushang-module-system/system-service/src/main/java/com/chushang/system/service/ISysUserOnlineService.java +++ b/chushang-modules/chushang-module-system/system-service/src/main/java/com/chushang/system/service/ISysUserOnlineService.java @@ -1,132 +1,157 @@ -//package com.chushang.system.service; -// -//import com.chushang.common.core.constant.CacheConstants; -//import com.chushang.common.core.util.StringUtils; -//import com.chushang.security.entity.vo.LoginUser; -//import com.chushang.system.entity.vo.SysUserOnline; -//import lombok.extern.slf4j.Slf4j; -//import org.redisson.api.RKeys; -//import org.redisson.api.RedissonClient; -//import org.springframework.stereotype.Service; -// -//import javax.annotation.Resource; -//import java.util.ArrayList; -//import java.util.Collection; -//import java.util.Collections; -//import java.util.List; -// -///** -// * 在线用户 服务层 -// * -// * @author ruoyi -// */ -//@Slf4j -//@Service -//public class ISysUserOnlineService -//{ -// -// @Resource -// RedissonClient redissonClient; -// -// public SysUserOnline selectOnlineByIpaddr(){ -// -// Collection keys = new ArrayList<>(); -// redissonClient.getKeys().getKeys().forEach(key-> { -// if (key.startsWith(CacheConstants.LOGIN_TOKEN_KEY)){ -// keys.add(key); -// } -// }); -// List userOnlineList = new ArrayList(); -// for (String key : keys) -// { -// LoginUser user = redisService.getCacheObject(key); -// if (StringUtils.isNotEmpty(ipaddr) && StringUtils.isNotEmpty(userName)) -// { -// userOnlineList.add(userOnlineService.selectOnlineByInfo(ipaddr, userName, user)); -// } -// else if (StringUtils.isNotEmpty(ipaddr)) -// { -// userOnlineList.add(userOnlineService.selectOnlineByIpaddr(ipaddr, user)); -// } -// else if (StringUtils.isNotEmpty(userName)) -// { -// userOnlineList.add(userOnlineService.selectOnlineByUserName(userName, user)); -// } -// else -// { -// userOnlineList.add(userOnlineService.loginUserToUserOnline(user)); -// } -// } -// Collections.reverse(userOnlineList); -// userOnlineList.removeAll(Collections.singleton(null)); -// } -// -// /** -// * 通过登录地址查询信息 -// * -// * @param ipaddr 登录地址 -// * @param user 用户信息 -// * @return 在线用户信息 -// */ -// public SysUserOnline selectOnlineByIpaddr(String ipaddr, LoginUser user) -// { -// if (StringUtils.equals(ipaddr, user.getIpaddr())) -// { -// return loginUserToUserOnline(user); -// } -// return null; -// } -// -// /** -// * 通过用户名称查询信息 -// * -// * @param userName 用户名称 -// * @param user 用户信息 -// * @return 在线用户信息 -// */ -// public SysUserOnline selectOnlineByUserName(String userName, LoginUser user) -// { -// if (StringUtils.equals(userName, user.getUsername())) -// { -// return loginUserToUserOnline(user); -// } -// return null; -// } -// -// /** -// * 通过登录地址/用户名称查询信息 -// * -// * @param ipaddr 登录地址 -// * @param userName 用户名称 -// * @param user 用户信息 -// * @return 在线用户信息 -// */ -// public SysUserOnline selectOnlineByInfo(String ipaddr, String userName, LoginUser user) -// { -// if (StringUtils.equals(ipaddr, user.getIpaddr()) && StringUtils.equals(userName, user.getUsername())) -// { -// return loginUserToUserOnline(user); -// } -// return null; -// } -// -// /** -// * 设置在线用户信息 -// * -// * @param user 用户信息 -// * @return 在线用户 -// */ -// public SysUserOnline loginUserToUserOnline(LoginUser user) -// { -// if (StringUtils.isNull(user)) -// { -// return null; -// } -// SysUserOnline sysUserOnline = new SysUserOnline(); -// sysUserOnline.setTokenId(user.getToken()); -// sysUserOnline.setUserName(user.getUsername()); -// sysUserOnline.setIpaddr(user.getIpaddr()); -// sysUserOnline.setLoginTime(user.getLoginTime()); -// return sysUserOnline; -// } -//} +package com.chushang.system.service; + +import cn.hutool.core.net.Ipv4Util; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.extra.servlet.ServletUtil; +import cn.hutool.system.SystemUtil; +import com.chushang.common.core.constant.CacheConstants; +import com.chushang.common.core.util.IPUtils; +import com.chushang.common.core.util.StringUtils; +import com.chushang.common.mybatis.page.CommonParam; +import com.chushang.common.mybatis.utils.PageClass; +import com.chushang.common.mybatis.utils.PageResult; +import com.chushang.security.auth.AuthUtil; +import com.chushang.security.entity.vo.LoginUser; +import com.chushang.security.service.TokenService; +import com.chushang.system.entity.vo.SysUserOnline; +import lombok.extern.slf4j.Slf4j; +import org.redisson.api.RBucket; +import org.redisson.api.RedissonClient; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.List; + +/** + * 在线用户 服务层 + * + * @author ruoyi + */ +@Slf4j +@Service +public class ISysUserOnlineService +{ + + @Resource + RedissonClient redissonClient; + @Resource + TokenService tokenService; + + public PageResult selectOnlineByIpaddr(String ipaddr, String userName, CommonParam commonParam){ + Collection keys = new ArrayList<>(); + redissonClient.getKeys().getKeys().forEach(key-> { + if (key.startsWith(CacheConstants.LOGIN_TOKEN_KEY)){ + keys.add(key); + } + }); + List userOnlineList = new ArrayList<>(); + for (String key : keys) + { + RBucket bucket = redissonClient.getBucket(key); + if (!bucket.isExists()){ + continue; + } + LoginUser user = bucket.get(); + if (StringUtils.isNotEmpty(ipaddr) && StringUtils.isNotEmpty(userName)) + { + userOnlineList.add(selectOnlineByInfo(ipaddr, userName, user)); + } + else if (StringUtils.isNotEmpty(ipaddr)) + { + userOnlineList.add(selectOnlineByIpaddr(ipaddr, user)); + } + else if (StringUtils.isNotEmpty(userName)) + { + userOnlineList.add(selectOnlineByUserName(userName, user)); + } + else + { + userOnlineList.add(loginUserToUserOnline(user)); + } + } + Collections.reverse(userOnlineList); + userOnlineList.removeAll(Collections.singleton(null)); + List userOnlines = new PageClass() + .page(commonParam.getPage(), commonParam.getLimit(), userOnlineList); + return new PageResult(userOnlines, userOnlineList.size(), commonParam.getLimit(), commonParam.getPage()); + } + + /** + * 通过登录地址查询信息 + * + * @param ipaddr 登录地址 + * @param user 用户信息 + * @return 在线用户信息 + */ + public SysUserOnline selectOnlineByIpaddr(String ipaddr, LoginUser user) + { + if (StringUtils.equals(ipaddr, user.getIpaddr())) + { + return loginUserToUserOnline(user); + } + return null; + } + + /** + * 通过用户名称查询信息 + * + * @param userName 用户名称 + * @param user 用户信息 + * @return 在线用户信息 + */ + public SysUserOnline selectOnlineByUserName(String userName, LoginUser user) + { + if (StringUtils.equals(userName, user.getUsername())) + { + return loginUserToUserOnline(user); + } + return null; + } + + /** + * 通过登录地址/用户名称查询信息 + * + * @param ipaddr 登录地址 + * @param userName 用户名称 + * @param user 用户信息 + * @return 在线用户信息 + */ + public SysUserOnline selectOnlineByInfo(String ipaddr, String userName, LoginUser user) + { + if (StringUtils.equals(ipaddr, user.getIpaddr()) && StringUtils.equals(userName, user.getUsername())) + { + return loginUserToUserOnline(user); + } + return null; + } + + /** + * 设置在线用户信息 + * + * @param user 用户信息 + * @return 在线用户 + */ + public SysUserOnline loginUserToUserOnline(LoginUser user) + { + if (StringUtils.isNull(user)) + { + return null; + } + SysUserOnline sysUserOnline = new SysUserOnline(); + sysUserOnline.setTokenId(user.getToken()); + sysUserOnline.setUserName(user.getUsername()); + sysUserOnline.setIpaddr(user.getIpaddr()); + sysUserOnline.setLoginTime(user.getLoginTime()); + sysUserOnline.setLoginLocation(IPUtils.getLocalCityInfo(user.getIpaddr())); + sysUserOnline.setBrowser(IPUtils.getBrowser()); + sysUserOnline.setOs(IPUtils.osName()); + return sysUserOnline; + } + + public void forceLogout(String tokenId) { + tokenService.forcedRetreatByTokenKey(tokenId); + } +} diff --git a/chushang-modules/chushang-module-system/system-service/src/main/java/com/chushang/system/service/ISysUserService.java b/chushang-modules/chushang-module-system/system-service/src/main/java/com/chushang/system/service/ISysUserService.java index 2d83ff6..11105e7 100644 --- a/chushang-modules/chushang-module-system/system-service/src/main/java/com/chushang/system/service/ISysUserService.java +++ b/chushang-modules/chushang-module-system/system-service/src/main/java/com/chushang/system/service/ISysUserService.java @@ -1,7 +1,9 @@ package com.chushang.system.service; +import cn.hutool.core.util.ObjectUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.IService; +import com.chushang.common.core.exception.ResultException; import com.chushang.common.core.web.AjaxResult; import com.chushang.security.utils.SecurityUtils; import com.chushang.system.entity.dto.ListUserDTO; @@ -31,7 +33,15 @@ public interface ISysUserService extends IService { void deleteBatch(Integer[] userIds); - void checkUserAllowed(SysUser sysUser); + /** + * 判断是否为超级管理员 账号 + */ + default void checkUserAllowed(SysUser sysUser){ + // 不为空, 不允许修改时, 应该是判断, 当前用户是否为超级管理员 + if (ObjectUtil.isNotNull(sysUser.getUserId()) && SysUser.isAdmin(sysUser.getUserId())){ + throw new ResultException("不允许操作超级管理员用户"); + } + } default boolean updatePassword(Integer userId, String oldPassword, String newPassword){ return this.update(SysUser.builder() diff --git a/chushang-modules/chushang-module-system/system-service/src/main/java/com/chushang/system/service/SysLoginInfoService.java b/chushang-modules/chushang-module-system/system-service/src/main/java/com/chushang/system/service/SysLoginInfoService.java index 44e1b08..a754952 100644 --- a/chushang-modules/chushang-module-system/system-service/src/main/java/com/chushang/system/service/SysLoginInfoService.java +++ b/chushang-modules/chushang-module-system/system-service/src/main/java/com/chushang/system/service/SysLoginInfoService.java @@ -1,13 +1,29 @@ package com.chushang.system.service; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.service.IService; import com.chushang.common.core.web.AjaxResult; +import com.chushang.common.mybatis.page.CommonParam; +import com.chushang.common.mybatis.utils.PageResult; +import com.chushang.system.entity.dto.ListLoginLogDTO; +import com.chushang.system.entity.po.SysDictType; import com.chushang.system.entity.po.SysLoginInfo; +import com.chushang.system.entity.po.SysPost; public interface SysLoginInfoService extends IService { - default AjaxResult saveLoginInfo(SysLoginInfo sysLogininfo){ + default AjaxResult saveLoginInfo(SysLoginInfo sysLogininfo) { return save(sysLogininfo) ? AjaxResult.success() : AjaxResult.error(); } + LambdaQueryWrapper buildWrapper(SysLoginInfo loginInfo, CommonParam commonParam); + + default PageResult pagePostList(SysLoginInfo loginInfo, CommonParam commonParam) { + IPage page = this.page( + new com.baomidou.mybatisplus.extension.plugins.pagination.Page<>(commonParam.getPage(), commonParam.getLimit()), + buildWrapper(loginInfo, commonParam) + ); + return new PageResult(page); + } } diff --git a/chushang-modules/chushang-module-system/system-service/src/main/java/com/chushang/system/service/impl/SysDictDataServiceImpl.java b/chushang-modules/chushang-module-system/system-service/src/main/java/com/chushang/system/service/impl/SysDictDataServiceImpl.java index 398c844..6c5645d 100644 --- a/chushang-modules/chushang-module-system/system-service/src/main/java/com/chushang/system/service/impl/SysDictDataServiceImpl.java +++ b/chushang-modules/chushang-module-system/system-service/src/main/java/com/chushang/system/service/impl/SysDictDataServiceImpl.java @@ -43,7 +43,7 @@ public class SysDictDataServiceImpl extends ServiceImpl list = list(new LambdaQueryWrapper() .eq(SysDictData::getDictType, dictType) - .eq(SysDictData::getStatus, "0") + .eq(SysDictData::getStatus, true) .orderByAsc(SysDictData::getDictSort) ); if (CollectionUtil.isNotEmpty(list)) { @@ -80,7 +80,7 @@ public class SysDictDataServiceImpl extends ServiceImpl implements SysLoginInfoService { + @Override + public LambdaQueryWrapper buildWrapper(SysLoginInfo loginInfo, CommonParam commonParam) { + return new QueryWrapper() + .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()); + } } diff --git a/chushang-modules/chushang-module-system/system-service/src/main/java/com/chushang/system/service/impl/SysMenuServiceImpl.java b/chushang-modules/chushang-module-system/system-service/src/main/java/com/chushang/system/service/impl/SysMenuServiceImpl.java index 86f64bd..4eec104 100644 --- a/chushang-modules/chushang-module-system/system-service/src/main/java/com/chushang/system/service/impl/SysMenuServiceImpl.java +++ b/chushang-modules/chushang-module-system/system-service/src/main/java/com/chushang/system/service/impl/SysMenuServiceImpl.java @@ -106,12 +106,12 @@ public class SysMenuServiceImpl extends ServiceImpl impl { RouterVo router = new RouterVo(); // visible 为1 代表显示路由 - router.setHidden("0".equals(menu.getVisible())); + router.setHidden(!menu.getVisible()); router.setName(getRouteName(menu)); router.setPath(getRouterPath(menu)); router.setComponent(getComponent(menu)); router.setQuery(menu.getQuery()); - router.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon(), "0".equals(menu.getCache()), menu.getPath())); + router.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon(), !menu.getCache(), menu.getPath())); List cMenus = menu.getChildren(); if (!cMenus.isEmpty() && MenuTypeEnum.CATALOG.equals(menu.getMenuType())) { @@ -127,7 +127,7 @@ public class SysMenuServiceImpl extends ServiceImpl impl children.setPath(menu.getPath()); children.setComponent(menu.getComponent()); children.setName(StringUtils.capitalize(menu.getPath())); - children.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon(), "0".equals(menu.getCache()), menu.getPath())); + children.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon(), !menu.getCache(), menu.getPath())); children.setQuery(menu.getQuery()); childrenList.add(children); router.setChildren(childrenList); @@ -176,7 +176,7 @@ public class SysMenuServiceImpl extends ServiceImpl impl */ public boolean isMenuFrame(SysMenu menu) { - return menu.getParentId() == 0 && MenuTypeEnum.MENU.equals(menu.getMenuType()) && "1".equals(menu.getFrame()); + return menu.getParentId() == 0 && MenuTypeEnum.MENU.equals(menu.getMenuType()) && menu.getFrame(); } /** @@ -195,7 +195,7 @@ public class SysMenuServiceImpl extends ServiceImpl impl } // 非外链并且是一级目录(类型为目录) if (0 == menu.getParentId() && MenuTypeEnum.CATALOG.equals(menu.getMenuType()) - && "1".equals(menu.getFrame())) + && menu.getFrame()) { routerPath = "/" + menu.getPath(); } @@ -214,10 +214,10 @@ public class SysMenuServiceImpl extends ServiceImpl impl menu.setMenuName("系统管理"); menu.setPath("system"); menu.setMenuType(MenuTypeEnum.CATALOG); - menu.setFrame("1"); - menu.setCache("1"); - menu.setVisible("1"); - menu.setStatus("1"); + menu.setFrame(true); + menu.setCache(true); + menu.setVisible(true); + menu.setStatus(true); String routerPath = sysMenuService.getRouterPath(menu); System.out.println(routerPath); } @@ -230,7 +230,7 @@ public class SysMenuServiceImpl extends ServiceImpl impl */ public boolean isInnerLink(SysMenu menu) { - return "1".equals(menu.getFrame()) && StringUtils.startsWithAny(menu.getPath(), Constants.HTTP, Constants.HTTPS); + return menu.getFrame() && StringUtils.startsWithAny(menu.getPath(), Constants.HTTP, Constants.HTTPS); } /** @@ -295,7 +295,7 @@ public class SysMenuServiceImpl extends ServiceImpl impl private List buildMenuTree(List menus) { List returnList = new ArrayList<>(); - List tempList = menus.stream().map(SysMenu::getMenuId).collect(Collectors.toList()); + List tempList = menus.stream().map(SysMenu::getMenuId).toList(); for (SysMenu menu : menus) { // 如果是顶级节点, 遍历该父节点的所有子节点 if (!tempList.contains(menu.getParentId())) { @@ -341,7 +341,7 @@ public class SysMenuServiceImpl extends ServiceImpl impl private boolean hasChild(List list, SysMenu t) { - return getChildList(list, t).size() > 0; + return !getChildList(list, t).isEmpty(); } /** diff --git a/chushang-modules/chushang-module-system/system-service/src/main/java/com/chushang/system/service/impl/SysPostServiceImpl.java b/chushang-modules/chushang-module-system/system-service/src/main/java/com/chushang/system/service/impl/SysPostServiceImpl.java index af789c2..12a1f76 100644 --- a/chushang-modules/chushang-module-system/system-service/src/main/java/com/chushang/system/service/impl/SysPostServiceImpl.java +++ b/chushang-modules/chushang-module-system/system-service/src/main/java/com/chushang/system/service/impl/SysPostServiceImpl.java @@ -13,6 +13,8 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; +import java.util.List; + /** * @auther: zhao * @date: 2024/5/9 18:33 @@ -28,6 +30,11 @@ public class SysPostServiceImpl extends ServiceImpl impl .eq(null != sysPost.getPostId(), SysPost::getPostId, sysPost.getPostId()) .eq(StringUtils.isNotEmpty(sysPost.getPostCode()), SysPost::getPostCode, sysPost.getPostCode()) .eq(StringUtils.isNotEmpty(sysPost.getPostName()), SysPost::getPostName, sysPost.getPostName()) - .eq(StringUtils.isNotEmpty(sysPost.getStatus()), SysPost::getStatus, sysPost.getStatus()); + .eq(null != sysPost.getStatus(), SysPost::getStatus, sysPost.getStatus()); + } + + @Override + public List selectPostListByUserId(Integer userId) { + return baseMapper.selectPostListByUserId(userId); } } diff --git a/chushang-modules/chushang-module-system/system-service/src/main/java/com/chushang/system/service/impl/SysUserServiceImpl.java b/chushang-modules/chushang-module-system/system-service/src/main/java/com/chushang/system/service/impl/SysUserServiceImpl.java index 65e37a9..6c5f9bf 100644 --- a/chushang-modules/chushang-module-system/system-service/src/main/java/com/chushang/system/service/impl/SysUserServiceImpl.java +++ b/chushang-modules/chushang-module-system/system-service/src/main/java/com/chushang/system/service/impl/SysUserServiceImpl.java @@ -144,15 +144,6 @@ public class SysUserServiceImpl extends ServiceImpl impl } - /** - * 校验用户是否允许操作 - */ - @Override - public void checkUserAllowed(SysUser sysUser) { - if (ObjectUtil.isNotNull(sysUser.getUserId()) && sysUser.isAdmin()){ - throw new ResultException("不允许操作超级管理员用户"); - } - } @Override @Transactional diff --git a/chushang-modules/chushang-module-system/system-service/src/main/resources/application.yml b/chushang-modules/chushang-module-system/system-service/src/main/resources/application.yml index 74ce3f8..bcc09a7 100644 --- a/chushang-modules/chushang-module-system/system-service/src/main/resources/application.yml +++ b/chushang-modules/chushang-module-system/system-service/src/main/resources/application.yml @@ -55,7 +55,7 @@ mybatis-plus: call-setters-on-nulls: true jdbc-type-for-null: 'null' default-enum-type-handler: com.baomidou.mybatisplus.core.handlers.MybatisEnumTypeHandler - #log-impl: org.apache.ibatis.logging.stdout.StdOutImpl + log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # feign 配置 feign: sentinel: @@ -87,5 +87,6 @@ management: # 日志监听配置 -- 如果启用的话,需要配置 kafka 的路径 logging: config: classpath:logback-nacos.xml - - +pagehelper: + async-count: + banner: false diff --git a/chushang-modules/chushang-module-system/system-service/src/main/resources/mapper/SysUserMapper.xml b/chushang-modules/chushang-module-system/system-service/src/main/resources/mapper/SysUserMapper.xml index b2b6b26..9c7f117 100644 --- a/chushang-modules/chushang-module-system/system-service/src/main/resources/mapper/SysUserMapper.xml +++ b/chushang-modules/chushang-module-system/system-service/src/main/resources/mapper/SysUserMapper.xml @@ -12,6 +12,11 @@ + + + + + @@ -36,6 +41,7 @@ select u.user_id, u.dept_id, u.username, u.password, u.status, u.del_state, u.create_by, u.create_time,u.update_time,u.salt, + u.phone,u.nick_name,u.gender,u.avatar,u.email, d.parent_dept_id, d.ancestors, d.dept_name, d.order_num as dept_order_num,d.status as dept_status, r.role_id, r.role_name, r.role_key,r.order_num as role_order_num, r.data_scope, r.status as role_status from sys_user u @@ -76,7 +82,7 @@ diff --git a/pom.xml b/pom.xml index 23d7282..f686a0e 100644 --- a/pom.xml +++ b/pom.xml @@ -33,7 +33,7 @@ local local - 192.168.116.115:8848 + 127.0.0.1:8848 ece94e7d-4792-48d2-b1f8-06334b530944 DEFAULT_GROUP nacos @@ -99,7 +99,7 @@ 3.10.0 0.1.55 2.0.43 - + 2.7.0 3.11.0 3.1.0 @@ -555,6 +555,12 @@ fastjson2 ${fastjson2.version} + + + org.lionsoul + ip2region + ${ip2region.version} +