调整操作日志查询条件,优化登录日志采集逻辑

This commit is contained in:
2026-08-07 15:59:03 +08:00
parent 4e2c7d51e4
commit 7c6b0f84ea
5 changed files with 39 additions and 40 deletions
@@ -40,6 +40,7 @@ import java.util.HashSet;
import java.util.Objects; import java.util.Objects;
import java.util.Set; import java.util.Set;
import static xtools.base.config.Constants.CP_LINE;
import static xtools.base.config.Constants.CP_NUM1; import static xtools.base.config.Constants.CP_NUM1;
import static xtools.base.config.Constants.CP_NUM200; import static xtools.base.config.Constants.CP_NUM200;
@@ -193,18 +194,8 @@ public class AuthFilter extends BaseFilter implements Ordered, BootCommonConstan
// 校验登录白名单 // 校验登录白名单
if (checkLoginWhiteList(uri)) { if (checkLoginWhiteList(uri)) {
filterChain.doFilter(request, response); filterChain.doFilter(request, response);
// 记录登录日志 // 保存登录日志
if (LOGIN_URI.contains(uri)) { saveLoginLog(uri, log);
LoginUserDto loginUser = AuthUtils.getDefNull();
if (loginUser == null) {
log.setTitle("系统登录-密码登录失败");
} else {
log.setAccountId(loginUser.getId());
log.setAccount(loginUser.getAccount());
log.setTitle("系统登录-密码登录成功");
}
saveOptLog(log);
}
return; return;
} }
@@ -244,6 +235,29 @@ public class AuthFilter extends BaseFilter implements Ordered, BootCommonConstan
saveOptLog(log); saveOptLog(log);
} }
/**
* 保存登录日志
*
* @param uri 访问uri
* @param log 日志
*/
private void saveLoginLog(String uri, OptLogDto log) {
if (!LOGIN_URI.contains(uri)) {
return;
}
LoginUserDto loginUser = AuthUtils.getDefNull();
if (loginUser == null) {
log.setAccountId(0L);
log.setAccount(CP_LINE);
log.setTitle("系统登录-登录失败");
} else {
log.setAccountId(loginUser.getId());
log.setAccount(loginUser.getAccount());
log.setTitle("系统登录-登录成功");
}
saveOptLog(log);
}
/** /**
* 保存操作日志 * 保存操作日志
* *
@@ -37,13 +37,13 @@ public interface SysOptLogMapper extends BaseMapper<SysOptLog> {
/** /**
* 获取该账号的操作日志 * 获取该账号的操作日志
* *
* @param accountId 账号ID * @param account 账号
* @param startTime 开始时间(包含) * @param startTime 开始时间(包含)
* @param endTime 结束时间(包含) * @param endTime 结束时间(包含)
* @return 操作日志 * @return 操作日志
*/ */
List<SysOptLogTitleCountResp> getOptCount( List<SysOptLogTitleCountResp> getOptCount(
@Param("accountId") Long accountId, @Param("account") String account,
@Param("startTime") Instant startTime, @Param("startTime") Instant startTime,
@Param("endTime") Instant endTime @Param("endTime") Instant endTime
); );
@@ -24,10 +24,10 @@ import java.time.Instant;
public class SysOptLogAccountReq implements Serializable { public class SysOptLogAccountReq implements Serializable {
/** /**
* 账号ID * 账号
*/ */
@Schema(description = "账号ID") @Schema(description = "账号")
private Long accountId; private String account;
/** /**
* 创建时间范围[开始时间(包含),结束时间(包含)],不能为空且需同时包含开始,结束时间 * 创建时间范围[开始时间(包含),结束时间(包含)],不能为空且需同时包含开始,结束时间
@@ -247,32 +247,17 @@ public class SysOptLogServiceImpl implements SysOptLogService {
if (startTime.isAfter(endTime)) { if (startTime.isAfter(endTime)) {
throw new BizWarning("开始时间不能大于结束时间"); throw new BizWarning("开始时间不能大于结束时间");
} }
Long accountId = req.getAccountId(); String account = req.getAccount();
if (Objects.isNull(accountId)) { if (StringUtils.isBlank(account)) {
throw new BizWarning("账号ID不能为空"); throw new BizWarning("账号ID不能为空");
} }
// 获取该账号的操作日志 // 获取该账号的操作日志
List<SysOptLogTitleCountResp> list = sysOptLogBaseService.getBaseMapper().getOptCount(accountId, startTime, endTime); List<SysOptLogTitleCountResp> list = sysOptLogBaseService.getBaseMapper().getOptCount(account, startTime, endTime);
SysOptLogTitleTreeResp root = buildOptTree(list); SysOptLogTitleTreeResp root = buildOptTree(list);
root.setTitle(getAccount(accountId)); root.setTitle(account);
return Result.ok(root); return Result.ok(root);
} }
/**
* 查询账号名称
*
* @param accountId 账号ID
* @return 账号名称
*/
private String getAccount(Long accountId) {
LambdaQueryWrapper<SysOptLog> query = new LambdaQueryWrapper<>();
query.select(SysOptLog::getAccount);
query.eq(SysOptLog::getAccountId, accountId);
query.last("LIMIT 1");
SysOptLog data = sysOptLogBaseService.getOne(query);
return Objects.isNull(data) ? null : data.getAccount();
}
/** /**
* 构建操作统计树 * 构建操作统计树
* *
@@ -4,12 +4,12 @@
<!-- 获取操作账号列表 --> <!-- 获取操作账号列表 -->
<select id="getOptAccountList" resultType="xtools.app.sys.model.dto.resp.SysOptLogAccountResp"> <select id="getOptAccountList" resultType="xtools.app.sys.model.dto.resp.SysOptLogAccountResp">
SELECT account_id AS accountId, SELECT MAX(account_id) AS accountId,
MAX(account) AS account, account AS account,
COUNT(*) AS `count` COUNT(*) AS `count`
FROM sys_opt_log FROM sys_opt_log
WHERE gmt_create BETWEEN #{startTime} AND #{endTime} WHERE gmt_create BETWEEN #{startTime} AND #{endTime}
GROUP BY account_id GROUP BY account
ORDER BY COUNT(*) DESC ORDER BY COUNT(*) DESC
</select> </select>
@@ -18,7 +18,7 @@
SELECT title, SELECT title,
COUNT(*) AS `count` COUNT(*) AS `count`
FROM sys_opt_log FROM sys_opt_log
WHERE account_id = #{accountId} WHERE account = #{account}
AND gmt_create BETWEEN #{startTime} AND #{endTime} AND gmt_create BETWEEN #{startTime} AND #{endTime}
GROUP BY title GROUP BY title
</select> </select>