package com.goomood.phm.mapper;

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

import com.goomood.phm.domain.FaultRecord;
import org.apache.ibatis.annotations.Param;

/**
 * 故障记录Mapper接口
 * 
 * @author goomood
 * @date 2024-11-17
 */
public interface FaultRecordMapper 
{
    /**
     * 查询故障记录
     * 
     * @param id 故障记录主键
     * @return 故障记录
     */
    public FaultRecord selectFaultRecordById(Long id);

    /**
     * 查询故障记录列表
     * 
     * @param faultRecord 故障记录
     * @return 故障记录集合
     */
    public List<FaultRecord> selectFaultRecordList(FaultRecord faultRecord);

    /**
     * 新增故障记录
     * 
     * @param faultRecord 故障记录
     * @return 结果
     */
    public int insertFaultRecord(FaultRecord faultRecord);

    /**
     * 修改故障记录
     * 
     * @param faultRecord 故障记录
     * @return 结果
     */
    public int updateFaultRecord(FaultRecord faultRecord);

    /**
     * 删除故障记录
     * 
     * @param id 故障记录主键
     * @return 结果
     */
    public int deleteFaultRecordById(Long id);

    /**
     * 批量删除故障记录
     * 
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteFaultRecordByIds(Long[] ids);


    /**
     * 获取所有机型
     * @return
     */
    List<String> getAircraftTypes();

    /**
     * 获取所有飞机号
     * @return
     */
    List<String> getAircraftNos();


    /**
     * 获取所有专业
     * @return
     */
    List<String> getSpecialties();


    /**
     * 系统故障统计
     * @param aircraftType
     * @param aircraftNo
     * @param startDate
     * @param endDate
     * @return
     */
    List<Map<String, Object>> getSystemFaultStatsByStandAlone(
            @Param("aircraftType") String aircraftType,
            @Param("aircraftNo") String aircraftNo,
            @Param("startDate") String startDate,
            @Param("endDate") String endDate
    );


    /**
     * 专业故障统计
     * @param aircraftType
     * @param aircraftNo
     * @param startDate
     * @param endDate
     * @return
     */
    List<Map<String, Object>> getSpecialtyFaultStatsByStandAlone(
            @Param("aircraftType") String aircraftType,
            @Param("aircraftNo") String aircraftNo,
            @Param("startDate") String startDate,
            @Param("endDate") String endDate
    );


    /**
     * 机件故障统计
     * @param aircraftType
     * @param aircraftNo
     * @param startDate
     * @param endDate
     * @return
     */
    List<Map<String, Object>> getPartFaultStatsByStandAlone(
            @Param("aircraftType") String aircraftType,
            @Param("aircraftNo") String aircraftNo,
            @Param("startDate") String startDate,
            @Param("endDate") String endDate
    );


    /**
     * 故障地点统计
     * @param aircraftType
     * @param aircraftNo
     * @param startDate
     * @param endDate
     * @return
     */
    List<Map<String, Object>> getLocationFaultStatsByStandAlone(
            @Param("aircraftType") String aircraftType,
            @Param("aircraftNo") String aircraftNo,
            @Param("startDate") String startDate,
            @Param("endDate") String endDate
    );





    /**
     * 单架故障统计
     *
     * @param aircraftType 机型
     * @param specialty 专业
     * @param startDate 开始时间
     * @param endDate 结束时间
     * @return 故障统计列表
     */
    List<Map<String, Object>> getAircraftFaultStatsBySpecialty(
            @Param("aircraftType") String aircraftType,
            @Param("specialty") String specialty,
            @Param("startDate") String startDate,
            @Param("endDate") String endDate
    );

    /**
     * 机件故障统计
     *
     * @param aircraftType 机型
     * @param specialty 专业
     * @param startDate 开始时间
     * @param endDate 结束时间
     * @return 故障统计列表
     */
    List<Map<String, Object>> getPartFaultStatsBySpecialty(
            @Param("aircraftType") String aircraftType,
            @Param("specialty") String specialty,
            @Param("startDate") String startDate,
            @Param("endDate") String endDate
    );

    /**
     * 专业故障统计
     *
     * @param aircraftType 机型
     * @param startDate 开始时间
     * @param endDate 结束时间
     * @return 故障统计列表
     */
    List<Map<String, Object>> getSpecialtyFaultStatsBySpecialty(
            @Param("aircraftType") String aircraftType,
            @Param("specialty") String specialty,
            @Param("startDate") String startDate,
            @Param("endDate") String endDate
    );

    /**
     * 系统故障统计
     *
     * @param aircraftType 机型
     * @param specialty 专业
     * @param startDate 开始时间
     * @param endDate 结束时间
     * @return 故障统计列表
     */
    List<Map<String, Object>> getSystemFaultStatsBySpecialty(
            @Param("aircraftType") String aircraftType,
            @Param("specialty") String specialty,
            @Param("startDate") String startDate,
            @Param("endDate") String endDate
    );
}
