package com.jeeplus.finance.program.configuration.projectList.mapper;

import com.baomidou.mybatisplus.annotation.InterceptorIgnore;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.jeeplus.finance.program.configuration.projectList.service.dto.ContractDto;
import com.jeeplus.finance.program.configuration.projectList.service.dto.ExportFileDto;
import com.jeeplus.finance.reimbursementApproval.approvalInfo.domain.ProgramProjectListInfo;
import com.jeeplus.finance.workContract.domain.WorkContractInfo;
import com.jeeplus.sys.service.dto.UserDTO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;


@Mapper
public interface ProjectListMapper extends BaseMapper<ProgramProjectListInfo> {

    /**
     * 根据人员查询该人员是否存在超期未归档或超期归档中的项目信息
     * @param currentUser
     * @return
     */
    Integer getOverArchiveFlag(@Param("currentUser") UserDTO currentUser);

    IPage<WorkContractInfo> findContractPageList(Page<WorkContractInfo> page, @Param("dto") ContractDto dto);

    void updateStatusById(@Param("id")String id, @Param("status")String status);

    //@InterceptorIgnore(tenantLine = "true")
    IPage<ProgramProjectListInfo> findPageList(Page<ProgramProjectListInfo> page, @Param(Constants.WRAPPER) QueryWrapper<ProgramProjectListInfo> wrapper);
    /**
     * 项目登记列表,和上面findPageList接口是一样的，目的时跳过findPageList mapper接口的数据规则（比如仅部门可见、仅自己可见之类的）
     */
    IPage<ProgramProjectListInfo> findPageList2(Page<ProgramProjectListInfo> page, @Param(Constants.WRAPPER) QueryWrapper<ProgramProjectListInfo> wrapper);

    List<ProgramProjectListInfo> findInfoList(@Param(Constants.WRAPPER) QueryWrapper<ProgramProjectListInfo> wrapper);

    List<ExportFileDto> findList(@Param("infoList")List<ProgramProjectListInfo> infoList);

    IPage<ProgramProjectListInfo> findPage(Page<ProgramProjectListInfo> page, @Param(Constants.WRAPPER) QueryWrapper<ProgramProjectListInfo> wrapper);

    String selectInvoiceFlag(@Param("id") String id);

    @InterceptorIgnore(tenantLine = "true")
    ProgramProjectListInfo getById(@Param("id")String id);

    List<String> getHaveProjectIds(@Param("currentUser") UserDTO currentUser);

    /**
     * 根据id集合查询项目信息
     * 过滤限制保留
     * @param idList
     * @return
     */
    @InterceptorIgnore(tenantLine = "true")
    List<ProgramProjectListInfo> getListByidList(@Param("idList") List<String> idList);

    /**
     * 修改报告归档 归档状态信息
     * @param id
     * @param archiveStatus 归档状态
     * @param overArchiveStatus 超期归档状态值（over_archive_status：0：未超期；1：已超期）
     */
    void updateArchiveStatus(@Param("id")String id, @Param("archiveStatus")String archiveStatus, @Param("overArchiveStatus")String overArchiveStatus);

    /**
     * 查询项目签发单完成后3天未归档项目信息
     * @param threeDayAgo 签发单完成时间
     * @return
     */
    @InterceptorIgnore(tenantLine = "true")
    List<ProgramProjectListInfo> getOverdueFilingProjectList(@Param("threeDayAgo") String threeDayAgo);
}
