From 462a4df8afa3e518d7d3c9041e4a6f9bb090eaef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A9=AC=E4=B8=89=E7=82=AE?= <15856818120@163.com> Date: Tue, 25 Nov 2025 13:11:00 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B8=97=E9=80=8F=E6=B5=8B=E8=AF=95=E6=BC=8F?= =?UTF-8?q?=E6=B4=9E=E4=BF=AE=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bonus/system/api/domain/SysOperLog.java | 108 +++++++++--------- .../auth/controller/TokenController.java | 11 ++ .../bonus/auth/service/SysLoginService.java | 71 +++++++++++- .../common/core/constant/CacheConstants.java | 8 ++ .../common/security/service/TokenService.java | 14 ++- .../config/RouterFunctionConfiguration.java | 18 +-- .../com/bonus/gateway/filter/AuthFilter.java | 13 ++- .../bmw/basic/controller/UserController.java | 13 ++- .../java/com/bonus/bmw/basic/dao/UserDao.java | 4 +- .../resources/mapper/basic/UserMapper.xml | 11 +- .../bmw/src/main/resources/static/js/main.js | 8 +- .../SettingManage/OperateLog/SysOperateLog.js | 34 ++++-- .../work/SettingManage/UserManage/UserForm.js | 15 ++- .../static/pages/user/changePassword.html | 21 ++-- .../static/pages/user/updateMyself.html | 30 +++-- .../static/pages/user/updateUser.html | 37 +++--- .../OperateLog/SysOperateLog.html | 7 +- .../SettingManage/UserManage/UserFrom.html | 3 +- .../basic/controller/SelectController.java | 9 +- .../logs/controller/SysOperlogController.java | 8 +- .../system/logs/dao/SysOperLogMapper.java | 1 + .../logs/service/ISysOperLogService.java | 2 + .../logs/service/SysOperLogServiceImpl.java | 16 ++- .../mapper/logs/SysOperLogMapper.xml | 57 +++++++++ 24 files changed, 388 insertions(+), 131 deletions(-) diff --git a/api/api-system/src/main/java/com/bonus/system/api/domain/SysOperLog.java b/api/api-system/src/main/java/com/bonus/system/api/domain/SysOperLog.java index 7b18c80..4354810 100644 --- a/api/api-system/src/main/java/com/bonus/system/api/domain/SysOperLog.java +++ b/api/api-system/src/main/java/com/bonus/system/api/domain/SysOperLog.java @@ -25,76 +25,78 @@ public class SysOperLog extends BaseEntity /** 用户编号 */ private String userId; + /** 操作人员 */ + @Excel(name = "用户名") + private String operName; + + /** 电话 */ + @Excel(name = "手机号") + private String phone; + + /** 业务类型(0其它 1新增 2修改 3删除) */ + private Integer businessType; + @Excel(name = "业务类型") + private String type; + /** 操作模块 */ @Excel(name = "操作模块") private String title; - /** 业务类型(0其它 1新增 2修改 3删除) */ - @Excel(name = "业务类型", readConverterExp = "0=其它,1=新增,2=修改,3=删除,4=授权,5=导出,6=导入,7=强退,8=生成代码,9=清空数据") - private Integer businessType; - - /** 业务类型数组 */ - private Integer[] businessTypes; - - /** 请求方法 */ - @Excel(name = "请求方法") - private String method; - - /** 请求方式 */ - @Excel(name = "请求方式") - private String requestMethod; - - /** 操作类别(0其它 1后台用户 2手机端用户) */ - @Excel(name = "操作类别", readConverterExp = "0=其它,1=后台用户,2=手机端用户") - private Integer operatorType; - - /** 操作人员 */ - @Excel(name = "操作人员") - private String operName; - - /** 部门名称 */ - @Excel(name = "部门名称") - private String deptName; - - /** 请求url */ - @Excel(name = "请求地址") - private String operUrl; - - /** 操作地址 */ - @Excel(name = "操作地址") - private String operIp; - - /** 请求参数 */ - @Excel(name = "请求参数") - private String operParam; - /** 返回参数 */ @Excel(name = "返回参数") private String jsonResult; + /** 操作类别(0其它 1后台用户 2手机端用户) */ + @Excel(name = "资源类型") + private String operatoType; + + private Integer operatorType; + + //新增的一些字段 fly + @Excel(name = "操作时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") + private String opersTime; + + /** 操作地址 */ + @Excel(name = "操作地址") + private String operIp; + /** 操作状态(0异常 1正常) */ - @Excel(name = "状态", readConverterExp = "0=异常,1=正常") + @Excel(name = "状态", readConverterExp = "0=请求异常,1=请求成功") private Integer status; + /** 业务类型数组 */ + private Integer[] businessTypes; + + /** 请求方法 */ + + private String method; + + /** 请求方式 */ + private String requestMethod; + + + /** 部门名称 */ + private String deptName; + + /** 请求url */ + private String operUrl; + + + /** 请求参数 */ + private String operParam; + + /** 错误消息 */ - @Excel(name = "错误消息") private String errorMsg; /** 操作时间 */ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") - @Excel(name = "操作时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss") private Date operTime; - //新增的一些字段 fly - /** 电话 */ - private String opersTime; - - /** 电话 */ - private String phone; - - private String type; - - private String operatoType; - private String statusRes; + + private String startTime; + private String endTime; + private String module; + private String result; } diff --git a/auth/src/main/java/com/bonus/auth/controller/TokenController.java b/auth/src/main/java/com/bonus/auth/controller/TokenController.java index 422939a..689e65a 100644 --- a/auth/src/main/java/com/bonus/auth/controller/TokenController.java +++ b/auth/src/main/java/com/bonus/auth/controller/TokenController.java @@ -7,6 +7,7 @@ import com.bonus.common.core.constant.SecurityConstants; import com.bonus.common.core.domain.R; import com.bonus.common.core.utils.JwtUtils; import com.bonus.common.core.utils.StringUtils; +import com.bonus.common.redis.service.RedisService; import com.bonus.common.security.auth.AuthUtil; import com.bonus.common.security.service.TokenService; import com.bonus.common.security.utils.SecurityUtils; @@ -35,6 +36,9 @@ public class TokenController @Autowired private LocalSessionManager sessionManager; + @Autowired + private RedisService redisService; + @PostMapping("login") public R login(@RequestBody LoginBody form) @@ -72,6 +76,11 @@ public class TokenController // 记录用户退出日志 sysLoginService.logout(userId); } + String userId = JwtUtils.getUserId(token); + // 删除token缓存 + redisService.deleteObject(getTokenKey(token)); + // 删除用户-token关联 + redisService.deleteObject("user:token:" + userId); return R.ok(); } @@ -95,4 +104,6 @@ public class TokenController sysLoginService.register(registerBody.getUsername(), registerBody.getPassword()); return R.ok(); } + + } diff --git a/auth/src/main/java/com/bonus/auth/service/SysLoginService.java b/auth/src/main/java/com/bonus/auth/service/SysLoginService.java index 201b2ce..dd5e058 100644 --- a/auth/src/main/java/com/bonus/auth/service/SysLoginService.java +++ b/auth/src/main/java/com/bonus/auth/service/SysLoginService.java @@ -1,5 +1,6 @@ package com.bonus.auth.service; +import com.bonus.common.core.constant.CacheConstants; import com.bonus.common.core.constant.Constants; import com.bonus.common.core.constant.SecurityConstants; import com.bonus.common.core.constant.UserConstants; @@ -16,8 +17,12 @@ import com.bonus.system.api.domain.SysUser; import com.bonus.system.api.model.LoginUser; import io.jsonwebtoken.Claims; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Component; +import javax.annotation.Resource; +import java.util.concurrent.TimeUnit; + /** * 登录校验方法 * @@ -32,6 +37,11 @@ public class SysLoginService @Autowired private RemoteUserService remoteUserService; + @Resource + private RedisTemplate redisTemplate; + + + /** * 登录 */ @@ -42,6 +52,11 @@ public class SysLoginService password = AESCBCUtils.decrypt(password);*/ username = RSAUtil.decrypt(username); password = RSAUtil.decrypt(password); + // 1. 检查用户是否被锁定 + if (isLocked(username)) { + long remainTime = redisTemplate.getExpire(CacheConstants.LOCK_KEY_PREFIX + username, TimeUnit.SECONDS); + throw new ServiceException("用户已被锁定,请" + remainTime / 60 + "分" + remainTime % 60 + "秒后重试") ; + } if(StringUtils.isNotEmpty(jwtToken)){ Claims claims = JwtUtils.parseToken(jwtToken); jwtToken = (String) claims.get(SecurityConstants.DETAILS_USERNAME); @@ -81,6 +96,7 @@ public class SysLoginService if (StringUtils.isNull(userResult) || StringUtils.isNull(userResult.getData())) { + recordLogininfor(username, Constants.LOGIN_FAIL, "登录用户不存在"); throw new ServiceException("登录用户:" + username + " 不存在"); } @@ -98,11 +114,21 @@ public class SysLoginService } if (!username.equals(jwtToken)) { if (!SecurityUtils.matchesPassword(password, user.getPassword())) { + // 登录失败,递增失败次数 + incrementFailCount(username); + long failCount = getFailCount(username); + if (failCount >= CacheConstants.FAIL_LIMIT) { + // 达到阈值,锁定用户 + lockUser(username); + throw new ServiceException("登录失败次数达到" + CacheConstants.FAIL_LIMIT + "次,用户已锁定5分钟"); + } recordLogininfor(user.getUserId() + "", Constants.LOGIN_FAIL, "用户密码错误"); - throw new ServiceException("用户不存在/密码错误"); + throw new ServiceException("用户不存在/密码错误,还有"+(CacheConstants.FAIL_LIMIT-failCount)+"次机会"); } } recordLogininfor(user.getUserId() + "", Constants.LOGIN_SUCCESS, "登录成功"); + // 3. 登录成功,重置失败次数和锁定状态 + resetLoginStatus(username); return userInfo; } @@ -171,4 +197,47 @@ public class SysLoginService } remoteLogService.saveLogininfor(logininfor, SecurityConstants.INNER); } + + /** + * 检查用户是否被锁定 + */ + private boolean isLocked(String username) { + return redisTemplate.hasKey(CacheConstants.LOCK_KEY_PREFIX + username); + } + + /** + * 递增登录失败次数 + */ + private void incrementFailCount(String username) { + String key = CacheConstants.FAIL_COUNT_KEY_PREFIX + username; + redisTemplate.opsForValue().increment(key, 1); + // 设置失败次数缓存有效期(如1小时,避免长期存储) + if (redisTemplate.getExpire(key) == -1) { + redisTemplate.expire(key, 1, TimeUnit.HOURS); + } + } + + /** + * 获取登录失败次数 + */ + private long getFailCount(String username) { + Object count = redisTemplate.opsForValue().get(CacheConstants.FAIL_COUNT_KEY_PREFIX + username); + return count == null ? 0 : Long.parseLong(count.toString()); + } + + /** + * 锁定用户 + */ + private void lockUser(String username) { + String key = CacheConstants.LOCK_KEY_PREFIX + username; + redisTemplate.opsForValue().set(key, "locked"); + redisTemplate.expire(key, CacheConstants.LOCK_MINUTES, TimeUnit.MINUTES); + } + /** + * 重置登录状态(成功后) + */ + private void resetLoginStatus(String username) { + redisTemplate.delete(CacheConstants.FAIL_COUNT_KEY_PREFIX + username); + redisTemplate.delete(CacheConstants.LOCK_KEY_PREFIX + username); + } } diff --git a/common/common-core/src/main/java/com/bonus/common/core/constant/CacheConstants.java b/common/common-core/src/main/java/com/bonus/common/core/constant/CacheConstants.java index 0c37660..ffbefde 100644 --- a/common/common-core/src/main/java/com/bonus/common/core/constant/CacheConstants.java +++ b/common/common-core/src/main/java/com/bonus/common/core/constant/CacheConstants.java @@ -21,4 +21,12 @@ public class CacheConstants * 权限缓存前缀 */ public final static String LOGIN_TOKEN_KEY = "login_tokens:"; + + // 登录失败次数阈值 + public static final int FAIL_LIMIT = 5; + // 锁定时间(分钟) + public static final long LOCK_MINUTES = 60; + // Redis键前缀 + public static final String FAIL_COUNT_KEY_PREFIX = "login:fail:count:"; + public static final String LOCK_KEY_PREFIX = "login:lock:"; } diff --git a/common/common-security/src/main/java/com/bonus/common/security/service/TokenService.java b/common/common-security/src/main/java/com/bonus/common/security/service/TokenService.java index 0cb43b0..a2c1411 100644 --- a/common/common-security/src/main/java/com/bonus/common/security/service/TokenService.java +++ b/common/common-security/src/main/java/com/bonus/common/security/service/TokenService.java @@ -55,13 +55,25 @@ public class TokenService loginUser.setUsername(userName); loginUser.setIpaddr(IpUtils.getIpAddr(ServletUtils.getRequest())); refreshToken(loginUser); + // 用户token存储key(用户ID -> 当前token) + String userTokenKey = getTokenKey(String.valueOf(userId)); + // 获取用户当前的旧token + String oldToken = redisService.getCacheObject(userTokenKey); + // 如果存在旧token,删除旧的token缓存 + if (oldToken != null) { + String oldTokenKey = getTokenKey(oldToken); + redisService.deleteObject(oldTokenKey); + } + // 存储新的token关联 + redisService.setCacheObject(userTokenKey, token, expireTime, TimeUnit.SECONDS); String userKey = getTokenKey(loginUser.getToken()); // Jwt存储信息 Map claimsMap = new HashMap(); claimsMap.put(SecurityConstants.USER_KEY, token); claimsMap.put(SecurityConstants.DETAILS_USER_ID, userId); claimsMap.put(SecurityConstants.DETAILS_USERNAME, userName); - redisService.setCacheObject(getTokenKey(userKey),loginUser); + //redisService.setCacheObject(getTokenKey(userKey),loginUser); + //redisService.setCacheObject(userKey, loginUser, expireTime, TimeUnit.SECONDS); // 接口返回信息 Map rspMap = new HashMap(); rspMap.put("access_token", JwtUtils.createToken(claimsMap)); diff --git a/gateway/src/main/java/com/bonus/gateway/config/RouterFunctionConfiguration.java b/gateway/src/main/java/com/bonus/gateway/config/RouterFunctionConfiguration.java index c658ac1..47bc1fe 100644 --- a/gateway/src/main/java/com/bonus/gateway/config/RouterFunctionConfiguration.java +++ b/gateway/src/main/java/com/bonus/gateway/config/RouterFunctionConfiguration.java @@ -11,7 +11,7 @@ import org.springframework.web.reactive.function.server.RouterFunctions; /** * 路由配置信息 - * + * * @author zys */ @Configuration @@ -20,12 +20,12 @@ public class RouterFunctionConfiguration @Autowired private ValidateCodeHandler validateCodeHandler; -// @SuppressWarnings("rawtypes") -// @Bean -// public RouterFunction routerFunction() -// { -// return RouterFunctions.route( -// RequestPredicates.GET("/code").and(RequestPredicates.accept(MediaType.TEXT_PLAIN)), -// validateCodeHandler); -// } + @SuppressWarnings("rawtypes") + @Bean + public RouterFunction routerFunction() + { + return RouterFunctions.route( + RequestPredicates.GET("/code").and(RequestPredicates.accept(MediaType.TEXT_PLAIN)), + validateCodeHandler); + } } diff --git a/gateway/src/main/java/com/bonus/gateway/filter/AuthFilter.java b/gateway/src/main/java/com/bonus/gateway/filter/AuthFilter.java index 853b8f6..55d119c 100644 --- a/gateway/src/main/java/com/bonus/gateway/filter/AuthFilter.java +++ b/gateway/src/main/java/com/bonus/gateway/filter/AuthFilter.java @@ -25,7 +25,7 @@ import reactor.core.publisher.Mono; /** * 网关鉴权 - * + * * @author zys */ @Component @@ -64,6 +64,15 @@ public class AuthFilter implements GlobalFilter, Ordered return chain.filter(exchange); } String token = getToken(request); + // 获取token中的用户ID + String userId = JwtUtils.getUserId(token); + // 获取用户当前有效的token + String currentToken = redisService.getCacheObject(CacheConstants.LOGIN_TOKEN_KEY + userId); + // 如果当前token和缓存中的token不一致,说明已被挤下线 + if (currentToken == null || !currentToken.equals(token)) { + return unauthorizedResponse(exchange,"您的账号已在其他设备登录"); + } + if (StringUtils.isEmpty(token) ) { return unauthorizedResponse(exchange, "令牌不能为空"); @@ -156,4 +165,4 @@ public class AuthFilter implements GlobalFilter, Ordered { return -200; } -} \ No newline at end of file +} diff --git a/modules/bmw/src/main/java/com/bonus/bmw/basic/controller/UserController.java b/modules/bmw/src/main/java/com/bonus/bmw/basic/controller/UserController.java index 00bd0d6..cce3667 100644 --- a/modules/bmw/src/main/java/com/bonus/bmw/basic/controller/UserController.java +++ b/modules/bmw/src/main/java/com/bonus/bmw/basic/controller/UserController.java @@ -12,6 +12,7 @@ import com.bonus.common.core.domain.R; import com.bonus.common.core.table.PageTableHandler; import com.bonus.common.core.table.PageTableRequest; import com.bonus.common.core.table.PageTableResponse; +import com.bonus.common.core.utils.RSAUtil; import com.bonus.common.core.utils.StringUtils; import com.bonus.common.log.annotation.Log; import com.bonus.common.log.enums.BusinessType; @@ -52,7 +53,12 @@ public class UserController { @PostMapping @Log(title = "用户管理-新增用户", businessType = BusinessType.INSERT) @RequiresPermissions("sys:user:add") - public R saveUser(@RequestBody UserBean userDto) { + public R saveUser(UserBean userDto) { + userDto.setUserName(RSAUtil.decrypt(userDto.getUserName())); + userDto.setPhonenumber(RSAUtil.decrypt(userDto.getPhonenumber())); + userDto.setIdNumber(RSAUtil.decrypt(userDto.getIdNumber())); + userDto.setOrgId(RSAUtil.decrypt(userDto.getOrgId())); + userDto.setRoleId(RSAUtil.decrypt(userDto.getRoleId())); String u = userService.getExistUser(userDto.getPhonenumber()); if (u != null) { throw new IllegalArgumentException(u + "手机号码已被注册"); @@ -65,6 +71,8 @@ public class UserController { @PutMapping @RequiresPermissions("sys:user:add") public R updateUser(@RequestBody UserBean userDto) { + userDto.setUserName(RSAUtil.decrypt(userDto.getUserName())); + userDto.setPhone(RSAUtil.decrypt(userDto.getPhone())); return userService.updateUser(userDto); } @@ -72,6 +80,9 @@ public class UserController { @PutMapping("/{username}") @RequiresPermissions("sys:user:password") public void changePassword(@PathVariable String username, String oldPassword, String newPassword) { + //解密 + oldPassword = RSAUtil.decrypt(oldPassword); + newPassword = RSAUtil.decrypt(newPassword); userService.changePassword(username, oldPassword, newPassword); } diff --git a/modules/bmw/src/main/java/com/bonus/bmw/basic/dao/UserDao.java b/modules/bmw/src/main/java/com/bonus/bmw/basic/dao/UserDao.java index ae741bc..f10a1db 100644 --- a/modules/bmw/src/main/java/com/bonus/bmw/basic/dao/UserDao.java +++ b/modules/bmw/src/main/java/com/bonus/bmw/basic/dao/UserDao.java @@ -28,8 +28,8 @@ public interface UserDao { List list(@Param("params") Map params, @Param("offset") Integer offset, @Param("limit") Integer limit); - @Update("update \"ynrealname\".\"sys_role_user\" set \"is_active\" = '0' where \"userId\" = #{userId}") - int deleteUserRole(int userId); + + int deleteUserRole(@Param("userId") int userId); int saveUserRoles(@Param("userId")String userId, @Param("roleId") String roleId); diff --git a/modules/bmw/src/main/resources/mapper/basic/UserMapper.xml b/modules/bmw/src/main/resources/mapper/basic/UserMapper.xml index c107517..060a3b9 100644 --- a/modules/bmw/src/main/resources/mapper/basic/UserMapper.xml +++ b/modules/bmw/src/main/resources/mapper/basic/UserMapper.xml @@ -2,6 +2,9 @@ + + update "ynrealname"."sys_role_user" set "is_active" = '0' where "userId" = #{userId} + '; return html; - }, width: "43%"}, - {"data": "operatoType", "defaultContent": "","width":"8%"}, - {"data": "opersTime", "defaultContent": "","width":"10%"}, + }, width: "37%"}, + {"data": "operatoType", "defaultContent": "","width":"7%"}, + {"data": "opersTime", "defaultContent": "","width":"8%"}, + {"data": "operIp", "defaultContent": "","width":"8%"}, + {"data": "statusRes", "defaultContent": "","width":"7%"}, ], "order": [[0, "desc"], [1, "asc"]] }); @@ -192,3 +194,19 @@ function getNowTime() { var day = time.getDate() >= 10 ? time.getDate() : '0' + time.getDate(); return year + "-" + month + "-" + day; } + +function exportData() { + var keyWord = $('#keyWord').val(); + var module = $('#module').val(); + var result = $('#result').val(); + var type = $('#type').val(); + var startTime = $('#startTime').val(); + var endTime = $('#endTime').val(); + window.location.href = DATA_URL + "/system/operlog/export?token=" + token + + "&keyword=" + keyWord + + "&module=" + module + + "&result=" + result + + "&type=" + type + + "&startTime=" + startTime + + "&endTime=" + endTime; +} diff --git a/modules/bmw/src/main/resources/static/js/work/SettingManage/UserManage/UserForm.js b/modules/bmw/src/main/resources/static/js/work/SettingManage/UserManage/UserForm.js index 523ec92..23e4eb0 100644 --- a/modules/bmw/src/main/resources/static/js/work/SettingManage/UserManage/UserForm.js +++ b/modules/bmw/src/main/resources/static/js/work/SettingManage/UserManage/UserForm.js @@ -53,9 +53,16 @@ function addUser(formData) { type: 'POST', async: false, // 默认异步true,false表示同步 url: formUrl, // 请求地址 - contentType: "application/json; charset=utf-8", - dataType: 'json', // 服务器返回数据类型 - data: JSON.stringify(formData.field), //获取提交的表单字段 + //contentType: "application/x-www-form-urlencoded", + //dataType: 'json', // 服务器返回数据类型 + //data: JSON.stringify(formData.field), //获取提交的表单字段 + data: { + userName : encryptRsa($("#userName").val()), + idNumber : encryptRsa($("#idNumber").val()), + phonenumber : encryptRsa($("#phonenumber").val()), + orgId : encryptRsa($("#orgId").val()), + roleId : encryptRsa($("#roleId").val()) + }, success: function (data) { layer.close(loadingMsg); // 关闭提示层 if(data.code == 200){ @@ -217,4 +224,4 @@ function reloading() { var index = parent.layer.getFrameIndex(window.name); //先得到当前 iframe层的索引 parent.layer.close(index); //再执行关闭 window.parent.location.reload(); -} \ No newline at end of file +} diff --git a/modules/bmw/src/main/resources/static/pages/user/changePassword.html b/modules/bmw/src/main/resources/static/pages/user/changePassword.html index af512f9..1197268 100644 --- a/modules/bmw/src/main/resources/static/pages/user/changePassword.html +++ b/modules/bmw/src/main/resources/static/pages/user/changePassword.html @@ -20,7 +20,7 @@
-
@@ -31,7 +31,7 @@ @@ -66,6 +66,7 @@ + - \ No newline at end of file + diff --git a/modules/bmw/src/main/resources/static/pages/user/updateMyself.html b/modules/bmw/src/main/resources/static/pages/user/updateMyself.html index 6bb1636..bb3306f 100644 --- a/modules/bmw/src/main/resources/static/pages/user/updateMyself.html +++ b/modules/bmw/src/main/resources/static/pages/user/updateMyself.html @@ -76,10 +76,11 @@ + - \ No newline at end of file + diff --git a/modules/bmw/src/main/resources/static/pages/user/updateUser.html b/modules/bmw/src/main/resources/static/pages/user/updateUser.html index 5be447b..bd8dbf2 100644 --- a/modules/bmw/src/main/resources/static/pages/user/updateUser.html +++ b/modules/bmw/src/main/resources/static/pages/user/updateUser.html @@ -79,7 +79,7 @@ -
+ @@ -88,6 +88,7 @@ + - \ No newline at end of file + diff --git a/modules/bmw/src/main/resources/static/pages/work/SettingManage/OperateLog/SysOperateLog.html b/modules/bmw/src/main/resources/static/pages/work/SettingManage/OperateLog/SysOperateLog.html index a265666..0310b0d 100644 --- a/modules/bmw/src/main/resources/static/pages/work/SettingManage/OperateLog/SysOperateLog.html +++ b/modules/bmw/src/main/resources/static/pages/work/SettingManage/OperateLog/SysOperateLog.html @@ -54,6 +54,9 @@ + @@ -75,6 +78,8 @@ 返回值 资源类型 操作时间 + 操作地址 + 请求结果 @@ -97,4 +102,4 @@ \ No newline at end of file + defer="defer"> diff --git a/modules/bmw/src/main/resources/static/pages/work/SettingManage/UserManage/UserFrom.html b/modules/bmw/src/main/resources/static/pages/work/SettingManage/UserManage/UserFrom.html index 039eeea..efd2894 100644 --- a/modules/bmw/src/main/resources/static/pages/work/SettingManage/UserManage/UserFrom.html +++ b/modules/bmw/src/main/resources/static/pages/work/SettingManage/UserManage/UserFrom.html @@ -111,6 +111,7 @@ + \ No newline at end of file + diff --git a/modules/system/src/main/java/com/bonus/system/basic/controller/SelectController.java b/modules/system/src/main/java/com/bonus/system/basic/controller/SelectController.java index 4646dda..bf8f082 100644 --- a/modules/system/src/main/java/com/bonus/system/basic/controller/SelectController.java +++ b/modules/system/src/main/java/com/bonus/system/basic/controller/SelectController.java @@ -64,8 +64,13 @@ public class SelectController { //@CrossOrigin @Log(title = "查询工程-orgId", businessType = BusinessType.SELECT) public R getProByOrgId(SelectBean o){ - SelfPermissionSettingUtils.getSelfPermissionByOrgId(o); - return service.getProByOrgId(o); + try{ + SelfPermissionSettingUtils.getSelfPermissionByOrgId(o); + return service.getProByOrgId(o); + } catch (Exception e) { + return R.ok("请求异常,请联系管理员"); + } + } @GetMapping("getProByTeamId") diff --git a/modules/system/src/main/java/com/bonus/system/logs/controller/SysOperlogController.java b/modules/system/src/main/java/com/bonus/system/logs/controller/SysOperlogController.java index c7890dd..55c1e29 100644 --- a/modules/system/src/main/java/com/bonus/system/logs/controller/SysOperlogController.java +++ b/modules/system/src/main/java/com/bonus/system/logs/controller/SysOperlogController.java @@ -21,7 +21,7 @@ import java.util.List; /** * 操作日志记录 - * + * * @author zys */ @RestController @@ -62,11 +62,11 @@ public class SysOperlogController extends BaseController @Log(title = "操作日志", businessType = BusinessType.EXPORT) - @RequiresPermissions("system:operlog:export") - @PostMapping("/export") + //@RequiresPermissions("system:operlog:export") + @GetMapping("/export") public void export(HttpServletResponse response, SysOperLog operLog) { - List list = operLogService.selectOperLogList(operLog); + List list = operLogService.export(operLog); ExcelUtil util = new ExcelUtil(SysOperLog.class); util.exportExcel(response, list, "操作日志"); } diff --git a/modules/system/src/main/java/com/bonus/system/logs/dao/SysOperLogMapper.java b/modules/system/src/main/java/com/bonus/system/logs/dao/SysOperLogMapper.java index 613d1d2..8dd498e 100644 --- a/modules/system/src/main/java/com/bonus/system/logs/dao/SysOperLogMapper.java +++ b/modules/system/src/main/java/com/bonus/system/logs/dao/SysOperLogMapper.java @@ -53,4 +53,5 @@ public interface SysOperLogMapper List list(@Param("params") Map params, @Param("offset") Integer offset, @Param("limit")Integer limit); + List export(SysOperLog operLog); } diff --git a/modules/system/src/main/java/com/bonus/system/logs/service/ISysOperLogService.java b/modules/system/src/main/java/com/bonus/system/logs/service/ISysOperLogService.java index 78890bd..9fb8594 100644 --- a/modules/system/src/main/java/com/bonus/system/logs/service/ISysOperLogService.java +++ b/modules/system/src/main/java/com/bonus/system/logs/service/ISysOperLogService.java @@ -52,4 +52,6 @@ public interface ISysOperLogService int count(Map params); List list(Map params, Integer offset, Integer limit); + + List export(SysOperLog operLog); } diff --git a/modules/system/src/main/java/com/bonus/system/logs/service/SysOperLogServiceImpl.java b/modules/system/src/main/java/com/bonus/system/logs/service/SysOperLogServiceImpl.java index b97f283..bad4442 100644 --- a/modules/system/src/main/java/com/bonus/system/logs/service/SysOperLogServiceImpl.java +++ b/modules/system/src/main/java/com/bonus/system/logs/service/SysOperLogServiceImpl.java @@ -10,7 +10,7 @@ import java.util.Map; /** * 操作日志 服务层处理 - * + * * @author zys */ @Service @@ -21,7 +21,7 @@ public class SysOperLogServiceImpl implements ISysOperLogService /** * 新增操作日志 - * + * * @param operLog 操作日志对象 * @return 结果 */ @@ -33,7 +33,7 @@ public class SysOperLogServiceImpl implements ISysOperLogService /** * 查询系统操作日志集合 - * + * * @param operLog 操作日志对象 * @return 操作日志集合 */ @@ -45,7 +45,7 @@ public class SysOperLogServiceImpl implements ISysOperLogService /** * 批量删除系统操作日志 - * + * * @param operIds 需要删除的操作日志ID * @return 结果 */ @@ -57,7 +57,7 @@ public class SysOperLogServiceImpl implements ISysOperLogService /** * 查询操作日志详细 - * + * * @param operId 操作ID * @return 操作日志对象 */ @@ -85,4 +85,10 @@ public class SysOperLogServiceImpl implements ISysOperLogService public List list(Map params, Integer offset, Integer limit) { return operLogMapper.list(params,offset,limit); } + + @Override + public List export(SysOperLog operLog) { + List res =operLogMapper.export(operLog); + return res; + } } diff --git a/modules/system/src/main/resources/mapper/logs/SysOperLogMapper.xml b/modules/system/src/main/resources/mapper/logs/SysOperLogMapper.xml index c85e995..ee46604 100644 --- a/modules/system/src/main/resources/mapper/logs/SysOperLogMapper.xml +++ b/modules/system/src/main/resources/mapper/logs/SysOperLogMapper.xml @@ -160,6 +160,63 @@ OFFSET #{offset} ROWS FETCH NEXT #{limit} ROWS ONLY + truncate table "ynrealname"."sys_oper_log"