package cn.iocoder.yudao.module.system.dal.mysql.worklog;

import cn.iocoder.yudao.framework.datapermission.core.annotation.DataPermission;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.module.system.controller.admin.worklog.vo.loginstance.LogInstancePageReqVO;
import cn.iocoder.yudao.module.system.controller.admin.worklog.vo.loginstance.LogInstanceRespVO;
import cn.iocoder.yudao.module.system.dal.dataobject.worklog.LogInstanceDO;
import cn.iocoder.yudao.module.system.service.worklog.dto.LogReadUserRespDTO;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 日志实例的拓展 Mapper
 *
 * @author 符溶馨
 */
@Mapper
public interface LogInstanceMapper extends BaseMapperX<LogInstanceDO> {


    default List<LogInstanceDO> getUpLog(Long userId, Long formId) {

        return selectList(new LambdaQueryWrapperX<LogInstanceDO>()
                .eq(LogInstanceDO::getStartUserId, userId)
                .eqIfPresent(LogInstanceDO::getFormId, formId)
                .orderByDesc(LogInstanceDO::getCreateTime));
    }

    default Long getLogByType(Integer type, Long userId, List<String> dateList) {

        return selectCount(new LambdaQueryWrapperX<LogInstanceDO>()
                .eq(LogInstanceDO::getType, type)
                .eq(LogInstanceDO::getStartUserId, userId)
                .in(LogInstanceDO::getTime, dateList));
    }

    IPage<LogInstanceRespVO> selectPageResult(@Param("page") Page<LogInstanceRespVO> page, @Param("reqVO") LogInstancePageReqVO reqVO,
                                              @Param("userId") Long userId, @Param("pagingType") Integer pagingType,
                                              @Param("userIds") List<Long> userIds);

    @DataPermission(enable = false)
    List<LogReadUserRespDTO> selectRaedUser(@Param("userId")Long userId, @Param("deptId")Long deptId);

    /**
     * 获取上一篇下一篇
     *
     * @param dto
     * @param id
     * @param userId
     * @param type
     * @return
     */
    LogInstanceRespVO getNextOrUp(@Param("reqVO") LogInstancePageReqVO dto,
                                  @Param("id") Long id, @Param("userId") Long userId,
                                  @Param("type") Integer type,
                                  @Param("pagingType") Integer pagingType,
                                  @Param("userIds") List<Long> userIds);
}