package com.aucma.base.mapper;

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

import com.aucma.base.domain.BaseDeviceParamVal;
import org.apache.ibatis.annotations.Param;

/**
 * 设备工艺参数当前值Mapper接口
 * 
 * @author zch
 * @date 2025-10-15
 */
public interface BaseDeviceParamValMapper 
{
    /**
     * 查询设备工艺参数当前值
     * 
     * @param recordId 设备工艺参数当前值主键
     * @return 设备工艺参数当前值
     */
    public BaseDeviceParamVal selectBaseDeviceParamValByRecordId(@Param("recordId") String recordId);

    /**
     * 查询设备工艺参数当前值列表
     * 
     * @param baseDeviceParamVal 设备工艺参数当前值
     * @return 设备工艺参数当前值集合
     */
    public List<BaseDeviceParamVal> selectBaseDeviceParamValList(BaseDeviceParamVal baseDeviceParamVal);

    /**
     * 查询每设备每参数的最新记录列表（聚合最新值）
     *
     * @param baseDeviceParamVal 查询条件
     * @return 最新记录集合
     */
    public List<BaseDeviceParamVal> selectLatestBaseDeviceParamValList(BaseDeviceParamVal baseDeviceParamVal);

    /**
     * 新增设备工艺参数当前值
     * 
     * @param baseDeviceParamVal 设备工艺参数当前值
     * @return 结果
     */
    public int insertBaseDeviceParamVal(BaseDeviceParamVal baseDeviceParamVal);

    /**
     * 向自动采集月分表插入一条设备参数记录
     *
     * @param tableName 目标月表
     * @param baseDeviceParamVal 参数记录
     * @return 结果
     */
    public int insertPartitionBaseDeviceParamVal(@Param("tableName") String tableName,
                                                 @Param("entity") BaseDeviceParamVal baseDeviceParamVal);

    /**
     * 修改设备工艺参数当前值
     * 
     * @param baseDeviceParamVal 设备工艺参数当前值
     * @return 结果
     */
    public int updateBaseDeviceParamVal(BaseDeviceParamVal baseDeviceParamVal);

    /**
     * 删除设备工艺参数当前值
     * 
     * @param recordId 设备工艺参数当前值主键
     * @return 结果
     */
    public int deleteBaseDeviceParamValByRecordId(@Param("recordId") String recordId);

    /**
     * 批量删除设备工艺参数当前值
     * 
     * @param recordIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteBaseDeviceParamValByRecordIds(@Param("recordIds") String[] recordIds);

    /**
     * 查询设备状态统计（基于三色灯参数）
     *
     * @return 设备状态统计Map
     */
    public Map<String, Object> selectDeviceStatusStatistics(Map<String, Object> params);

    /**
     * 获取每个设备的编号、名称、三色灯状态
     *
     * @return 设备状态列表
     */
    public List<Map<String, Object>> selectDeviceStatusList(Map<String, Object> params);

    /**
     * 获取每个设备的开机时间当天最新值
     *
     * @return 设备开机时间列表
     */
    public List<Map<String, Object>> selectDeviceStartTimeList(Map<String, Object> params);

    /**
     * 参数追溯查询（按时间范围）
     *
     * @param params 查询参数（deviceCode, paramCode, startTime, endTime）
     * @return 参数记录列表
     */
    public List<BaseDeviceParamVal> selectTraceList(Map<String, Object> params);

    /**
     * 查询SPC分析数据（参数历史值）
     *
     * @param params 查询参数（deviceCode, paramCode, startTime, endTime）
     * @return 参数值列表
     */
    public List<Double> selectParamHistoryValues(Map<String, Object> params);

    /**
     * 查询双源条件下的参数名称
     *
     * @param params 查询参数
     * @return 参数名称
     */
    public String selectParamNameByCodeFromSources(Map<String, Object> params);

    /**
     * 查询参数名称
     *
     * @param paramCode 参数编号
     * @return 参数名称
     */
    public String selectParamNameByCode(@Param("paramCode") String paramCode);
}
