

package com.lutao.cloud.oil.mapper;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.lutao.cloud.common.core.util.MessageInfo;
import com.lutao.cloud.common.data.datascope.CloudBaseMapper;
import com.lutao.cloud.oil.pojo.param.BaseParam;
import com.lutao.cloud.oil.pojo.param.EquipTypeParam;
import com.lutao.cloud.oil.pojo.vo.*;
import com.lutao.entity.EquipmentInfo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 专业设备
 *
 * @author guoyc
 * @date 2023-07-20 10:58:39
 */
@Mapper
public interface EquipmentInfoMapper extends CloudBaseMapper<EquipmentInfo> {

    /**
     * 专业设备名称和数量
     *
     * @param baseParam 基本参数
     * @return {@link List}<{@link EquipmentNameAndNumberVO}>
     */
    List<EquipmentNameAndNumberVO> selectEquipmentNameAndNumber(@Param("param") BaseParam baseParam);

    /**
     * 大屏设备名称和数量
     *
     * @param baseParam 基本参数
     * @param page      页面
     * @return {@link IPage}<{@link ScreenDisplayEquipmentNameAndNumber}>
     */
    IPage<ScreenDisplayEquipmentNameAndNumber> getScreenEquipmentNameAndNumber(Page page,@Param("param") BaseParam baseParam);

    /**
     * 专业设备分类
     *
     * @param page  页面
     * @param param 参数
     * @return {@link IPage}<{@link EquipmentTypeVO}>
     */
    IPage<EquipmentTypeVO> selectEquipTypePage(Page page,@Param("param") EquipTypeParam param);


    /**
     * 设备类型数量
     *
     * @return {@link Integer}
     */
    Integer getDistinctEquipTypeCount(@Param("param")BaseParam param);

    /**
     * 年检设备分布
     *
     * @param baseParam 基本参数
     * @return {@link MessageInfo}<{@link YearInspectionDistributionVO}>
     */
    List<YearInspectionDistributionVO> getEquipmentAnnuallyInspectDistribution(@Param("param")BaseParam baseParam);

    /**
     * 定检设备分布
     *
     * @param baseParam 基本参数
     * @return {@link MessageInfo}<{@link YearInspectionDistributionVO}>
     */
    List<YearInspectionDistributionVO> getEquipmentPeriodicalInspectDistribution(@Param("param")BaseParam baseParam);


    /**
     * 即将过期年检 数量
     *
     * @param param 参数
     * @return {@link Long}
     */
    Long getWillExpireYearInspectNumber(@Param("param") BaseParam param);

    /**
     * 已经过期年检数量
     *
     * @param param 参数
     * @return {@link Long}
     */
    Long getExpireYearInspectNumber(@Param("param") BaseParam param);

    /**
     * 即将过期定检数量
     *
     * @param param 参数
     * @return {@link Long}
     */
    Long getWillExpirePeriodicalInspect(@Param("param") BaseParam param);

    /**
     * 已经过期定检数量
     *
     * @param param 参数
     * @return {@link Long}
     */
    Long getExpirePeriodicalInspectNumber(@Param("param") BaseParam param);

    //近三个月需要年检数量
    Long getRecentThreeMonthYearInspectNumber(@Param("param") BaseParam param);

    //近三个月需要定检数量
    Long getRecentThreeMonthPeriodicalInspectNumber(@Param("param") BaseParam param);

    /**
     * 设备类型下拉选
     *
     * @return {@link List}<{@link EquipTypeNameVO}>
     */
    List<EquipTypeNameVO> selectEquipmentTypeNameList();

    /**
     * 即将过期设备数量
     *
     * @param param param
     * @return {@link Long}
     */
    Long getWillExpireNumber(@Param("param")BaseParam param);
}
