
package org.sky.scientific.mapper;

import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.apache.ibatis.annotations.Param;
import org.sky.core.tenant.annotation.TenantIgnore;
import org.sky.scientific.excel.XmExcel;
import org.sky.scientific.pojo.dto.XmDTO;
import org.sky.scientific.pojo.dto.XmUpdateDto;
import org.sky.scientific.pojo.entity.XmEntity;
import org.sky.scientific.pojo.vo.XmSummary;
import org.sky.scientific.pojo.vo.XmVO;
import org.sky.scientific.pojo.vo.XmYszbVO;

import java.util.List;
import java.util.Map;

/**
 * 科研项目 Mapper 接口
 *
 * @author Kd
 * @since 2025-06-29
 */
public interface XmMapper extends BaseMapper<XmEntity> {

	/**
	 * 自定义分页
	 *
	 * @param page 分页参数
	 * @param xm 查询参数
	 * @return List<XmVO>
	 */
	List<XmEntity> selectXmPage(IPage page, @Param("ew")XmDTO xm);

	/**
	 * 项目列表,查询年度项目
	 * @param year
	 * @return
	 */
	List<XmEntity> selectXmListByYear(@Param("year") String year);


	/**
	 * 获取导出数据
	 *
	 * @param queryWrapper 查询条件
	 * @return List<XmExcel>
	 */
	List<XmExcel> exportXm(@Param("ew") Wrapper<XmEntity> queryWrapper);

	/**
	 * 获取汇总表
	 *
	 * @param page 分页参数
	 * @param xm 查询参数
	 * @return List<XmVO>
	 */
	@TenantIgnore
	List<XmSummary> summaryPage(IPage<XmSummary> page, @Param("ew") XmDTO xm);

	/**
	 * 获取项目预算总表
	 * @param xmId
	 * @return
	 */
	XmYszbVO selectYszb(@Param("xmId") Long xmId);

	/**
	 * 根据项目id和年月查询项目最新信息
	 * @param xmId
	 * @param yearAndMonth
	 * @return
	 */
	XmVO selectByXmIdAndYearMonth(Map map);

	/**
	 * 根据项目id和年月查询项目最新信息
	 * @param xmId
	 * @param yearAndMonth
	 * @return
	 */
	XmVO selectByXmIdAndDay(Map map);

	/**
	 * 查询项目信息，结合变更
	 * @param xmId
	 * @return
	 */
	XmVO selectByXmId(Long xmId);

	Long getXmIdByXmmcOrXmbh(@Param("yearAndMonth") String yearAndMonth,@Param("xmmc") String xmmc, @Param("xmbh") String xmbh);

	/**
	 * 查询项目列表-开发周期包含yearAndMonth的
	 * @param yearAndMonth
	 * @return
	 */
    List<XmEntity> listByYearAndMonth(String yearAndMonth);

	List<JSONObject> selectAssistList(IPage<JSONObject> page, @Param("ew") XmDTO xm);

	boolean updateXm(XmUpdateDto dto);


}
