package com.iailab.module.infra.dal.mysql.logger; import com.iailab.framework.common.pojo.PageResult; import com.iailab.framework.mybatis.core.mapper.BaseMapperX; import com.iailab.framework.mybatis.core.query.LambdaQueryWrapperX; import com.iailab.module.infra.controller.admin.logger.vo.apiaccesslog.ApiAccessLogPageReqVO; import com.iailab.module.infra.dal.dataobject.logger.ApiAccessLogDO; import org.apache.ibatis.annotations.Delete; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import java.time.LocalDateTime; /** * API 访问日志 Mapper * * @author iailab */ @Mapper public interface ApiAccessLogMapper extends BaseMapperX { default PageResult selectPage(ApiAccessLogPageReqVO reqVO) { return selectPage(reqVO, new LambdaQueryWrapperX() .eqIfPresent(ApiAccessLogDO::getUserId, reqVO.getUserId()) .eqIfPresent(ApiAccessLogDO::getUserType, reqVO.getUserType()) .eqIfPresent(ApiAccessLogDO::getApplicationName, reqVO.getApplicationName()) .likeIfPresent(ApiAccessLogDO::getRequestUrl, reqVO.getRequestUrl()) .betweenIfPresent(ApiAccessLogDO::getBeginTime, reqVO.getBeginTime()) .geIfPresent(ApiAccessLogDO::getDuration, reqVO.getDuration()) .eqIfPresent(ApiAccessLogDO::getResultCode, reqVO.getResultCode()) .orderByDesc(ApiAccessLogDO::getId) ); } /** * 物理删除指定时间之前的日志 * * @param createTime 最大时间 * @param limit 删除条数,防止一次删除太多 * @return 删除条数 */ @Delete("DELETE FROM infra_api_access_log WHERE create_time < #{createTime} LIMIT #{limit}") Integer deleteByCreateTimeLt(@Param("createTime") LocalDateTime createTime, @Param("limit") Integer limit); }