package com.hdkj.lt.si.dao;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.hdkj.lt.si.modle.FhzgStateEstimationFeeder;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

/**
* @author Annie
* @description 针对表【fhzg_state_estimation_feeder(线路日96点时序状估数据表(各时刻存储JSON结构化数据))】的数据库操作Mapper
* @createDate 2026-07-23 15:41:31
* @Entity generator.stateEstimation.FhzgStateEstimationFeeder
*
* <p>注: 工程启动类未启用 @MapperScan, 各 Mapper 需显式标注 @Mapper 才会被扫描(与 recon/bio/td 一致).</p>
*/
@Mapper
public interface FhzgStateEstimationFeederMapper extends BaseMapper<FhzgStateEstimationFeeder> {

    /**
     * 按 (feeder, data_date) 查询主键 id, 用于 upsert 存在性判断. 轻量, 不读取 96 个 JSON 列.
     *
     * @param feeder   线路 ID
     * @param dataDate 数据所属日期 yyyy-MM-dd
     * @return 主键 id, 不存在返回 null
     */
    Long selectIdByFeederAndDate(@Param("feeder") String feeder, @Param("dataDate") String dataDate);

    /**
     * 更新某条 (feeder, data_date) 行的单一时刻列.
     *
     * @param feeder       线路 ID
     * @param dataDate     数据所属日期 yyyy-MM-dd
     * @param pointColumn  时刻列名, 形如 point_time_1200 (调用方已做白名单校验, 仅这 96 个合法值之一)
     * @param json         该时刻结构化数据 JSON 字符串
     * @return 影响行数
     */
    int updatePointTime(@Param("feeder") String feeder,
                        @Param("dataDate") String dataDate,
                        @Param("pointColumn") String pointColumn,
                        @Param("json") String json);

    /**
     * 新建一条 (feeder, data_date) 行并写入单一时刻列, 其余时刻列留 null.
     *
     * @param feeder       线路 ID
     * @param dataDate     数据所属日期 yyyy-MM-dd
     * @param pointColumn  时刻列名, 形如 point_time_1200 (调用方已做白名单校验)
     * @param json         该时刻结构化数据 JSON 字符串
     * @return 影响行数
     */
    int insertPointTime(@Param("feeder") String feeder,
                        @Param("dataDate") String dataDate,
                        @Param("pointColumn") String pointColumn,
                        @Param("json") String json);
}
