package com.aucma.base.service;

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

import com.aucma.base.domain.BaseDeviceParamVal;

/**
 * 设备工艺参数当前值Service接口
 * 
 * @author zch
 * @date 2025-10-15
 */
public interface IBaseDeviceParamValService 
{
    /**
     * 查询设备工艺参数当前值
     * 
     * @param recordId 设备工艺参数当前值主键
     * @return 设备工艺参数当前值
     */
    public BaseDeviceParamVal selectBaseDeviceParamValByRecordId(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 baseDeviceParamVal 设备工艺参数当前值
     * @return 结果
     */
    public int updateBaseDeviceParamVal(BaseDeviceParamVal baseDeviceParamVal);

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

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

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

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

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

    /**
     * 参数追溯查询（按时间范围）
     *
     * @param deviceCode 设备编号
     * @param paramCode  参数编号（可选）
     * @param startTime  开始时间
     * @param endTime    结束时间
     * @return 参数记录列表
     */
    public List<BaseDeviceParamVal> selectTraceList(String deviceCode, String paramCode, String startTime, String endTime);

    /**
     * 获取SPC分析数据
     *
     * @param deviceCode 设备编号
     * @param paramCode  参数编号
     * @param startTime  开始时间
     * @param endTime    结束时间
     * @return SPC分析结果
     */
    public Map<String, Object> getSPCData(String deviceCode, String paramCode, String startTime, String endTime);

    /**
     * 按设备与参数更新当天数据，不存在则新增
     *
     * @param baseDeviceParamVal 设备参数值
     * @return 结果
     */
    public int upsertTodayParamValue(BaseDeviceParamVal baseDeviceParamVal);
}
