package org.xyzh.system.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.xyzh.common.core.page.PageParam;
import org.xyzh.common.dto.system.TbSysOperationLog;
import org.xyzh.common.vo.UserDeptRoleVO;

import java.util.List;

/**
 * @description 操作日志数据访问层
 * @filename SysOperationLogMapper.java
 * @author yslg
 * @copyright xyzh
 * @since 2025-10-15
 */
@Mapper
public interface SysOperationLogMapper extends BaseMapper<TbSysOperationLog> {

    /**
     * @description 插入操作日志
     * @param operationLog 操作日志对象
     * @return int 影响行数
     * @author yslg
     * @since 2025-10-30
     */
    int insertOperationLog(TbSysOperationLog operationLog);

    /**
     * @description 查询操作日志列表（带权限过滤）
     * @param operationLog 过滤条件
     * @param userDeptRoles 当前用户的部门角色列表
     * @return List<TbSysOperationLog> 操作日志列表
     * @author yslg
     * @since 2025-10-30
     */
    List<TbSysOperationLog> selectOperationLogList(@Param("operationLog") TbSysOperationLog operationLog, 
                                                   @Param("userDeptRoles") List<UserDeptRoleVO> userDeptRoles);

    /**
     * @description 分页查询操作日志列表（带权限过滤）
     * @param operationLog 过滤条件
     * @param pageParam 分页参数
     * @param userDeptRoles 当前用户的部门角色列表
     * @return List<TbSysOperationLog> 操作日志列表
     * @author yslg
     * @since 2025-10-30
     */
    List<TbSysOperationLog> selectOperationLogPage(@Param("operationLog") TbSysOperationLog operationLog,
                                                   @Param("pageParam") PageParam pageParam,
                                                   @Param("userDeptRoles") List<UserDeptRoleVO> userDeptRoles);

    /**
     * @description 统计操作日志数量（带权限过滤）
     * @param operationLog 过滤条件
     * @param userDeptRoles 当前用户的部门角色列表
     * @return int 日志数量
     * @author yslg
     * @since 2025-10-30
     */
    int countOperationLog(@Param("operationLog") TbSysOperationLog operationLog,
                         @Param("userDeptRoles") List<UserDeptRoleVO> userDeptRoles);
}
