package com.chinaweal.aiccs.aicepsqy.mapper.datamove;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.chinaweal.aiccs.aicepsqy.entity.datamove.TrcorrectionsModel;
import org.apache.ibatis.annotations.Param;
import java.util.List;

/**
 * 修正记录Mapper（动态表名：基于reportYear字段，表名格式如 trcorrections_2025）
 * 核心：查询/删除 基于 主键correctionsid + 年度reportYear 双条件
 * @author lwd
 * @since 2025-11-21
 */
public interface TrcorrectionsMapper extends BaseMapper<TrcorrectionsModel> {

    /**
     * 动态表名 - 插入修正记录
     * @param model 修正记录实体（需包含 reportYear 字段，用于拼接表名）
     * @return 影响行数
     */
    int insertDynamic(TrcorrectionsModel model);

    int insertDynamiczs(TrcorrectionsModel model);

    /**
     * 动态表名 - 根据 主键correctionsid + 年度reportYear 查询单条记录
     * @param correctionsid 修正记录ID（主键）
     * @param reportYear 报告年度（用于拼接表名）
     * @return 单条修正记录
     */
    TrcorrectionsModel selectByPrimaryKey(
            @Param("correctionsid") String correctionsid,
            @Param("reportYear") String reportYear
    );

    /**
     * 动态表名 - 条件查询（支持主键+多条件组合）
     * @param model 查询条件实体（可包含 correctionsid、entid、subitemid 等，reportYear 必传）
     * @return 修正记录列表
     */
    List<TrcorrectionsModel> selectByCondition(TrcorrectionsModel model);

    /**
     * 动态表名 - 根据 主键correctionsid + 年度reportYear 删除单条记录
     * @param correctionsid 修正记录ID（主键）
     * @param reportYear 报告年度（用于拼接表名）
     * @return 影响行数
     */
    int deleteByPrimaryKey(
            @Param("correctionsid") String correctionsid,
            @Param("reportYear") String reportYear
    );

    int deleteByPrimaryKeyzs(
            @Param("correctionsid") String correctionsid,
            @Param("reportYear") String reportYear
    );

    /**
     * 动态表名 - 批量删除（根据 多个correctionsid + 统一reportYear）
     * @param correctionsids 主键列表（correctionsid集合）
     * @param reportYear 报告年度（用于拼接表名，所有主键对应同一年度表）
     * @return 影响行数
     */
    int deleteBatchByPrimaryKeys(
            @Param("correctionsids") List<String> correctionsids,
            @Param("reportYear") String reportYear
    );

    /**
     * 动态表名 - 清空指定年度的修正记录（谨慎使用）
     * @param reportYear 报告年度（用于拼接表名）
     * @return 影响行数
     */
    int truncateDynamic(@Param("reportYear") String reportYear);
}
