package com.ruoyi.system.mapper.fieldchangerecord;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.ruoyi.system.domain.fieldchangerecord.vo.FieldChangeRecordQuery;
import com.ruoyi.system.domain.fieldchangerecord.vo.FieldChangeRecordVO;
import com.ruoyi.system.domain.fieldchangerecord.vo.FieldChangeSummaryRow;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 字段级变更查询 Mapper。
 *
 * <p>和 {@link DataFieldChangeRecordMapper}（只负责 batchInsert）分开，职责清晰：
 * 写入用拦截器走 batchInsert；读取由此 Mapper 承担，包含 HR 侧和 BE 侧两条
 * 完全独立的查询路径。</p>
 */
public interface DataFieldChangeRecordQueryMapper {

    /** HR 侧明细，分页。走 data_field_change_record JOIN house_resource。 */
    IPage<FieldChangeRecordVO> selectHouseResourceFieldChanges(
            IPage<FieldChangeRecordVO> page,
            @Param("query") FieldChangeRecordQuery query);

    /** HR 侧汇总，按 (fieldCode, operationType) 分组。 */
    List<FieldChangeSummaryRow> selectHouseResourceFieldChangeSummary(
            @Param("query") FieldChangeRecordQuery query);

    /** BE 侧明细，分页。走 data_field_change_record JOIN bei + mapping + hr。 */
    IPage<FieldChangeRecordVO> selectBusinessEntityFieldChanges(
            IPage<FieldChangeRecordVO> page,
            @Param("query") FieldChangeRecordQuery query);

    /** BE 侧汇总。为避免 JOIN 膨胀，对日志 id 做 distinct 计数。 */
    List<FieldChangeSummaryRow> selectBusinessEntityFieldChangeSummary(
            @Param("query") FieldChangeRecordQuery query);
}
