package cn.iocoder.yudao.module.iot.dal.mysql.alertrecord;

import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.module.iot.controller.admin.alertrecord.vo.AlertRecordPageReqVO;
import cn.iocoder.yudao.module.iot.dal.dataobject.alertrecord.AlertRecordDO;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.apache.ibatis.annotations.Mapper;

/**
 * 告警记录 Mapper
 *
 * @author 内蒙必硕
 */
@Mapper
public interface AlertRecordMapper extends BaseMapperX<AlertRecordDO> {

    default PageResult<AlertRecordDO> selectPage(AlertRecordPageReqVO reqVO) {
        return selectPage(reqVO, new LambdaQueryWrapperX<AlertRecordDO>()
                .eqIfPresent(AlertRecordDO::getAlertCode, reqVO.getAlertCode())
                .likeIfPresent(AlertRecordDO::getAlertName, reqVO.getAlertName())
                .eqIfPresent(AlertRecordDO::getAlertType, reqVO.getAlertType())
                .eqIfPresent(AlertRecordDO::getAlertLevel, reqVO.getAlertLevel())
                .eqIfPresent(AlertRecordDO::getContent, reqVO.getContent())
                .eqIfPresent(AlertRecordDO::getConditionInfo, reqVO.getConditionInfo())
                .eqIfPresent(AlertRecordDO::getConditionFormula, reqVO.getConditionFormula())
                .eqIfPresent(AlertRecordDO::getDataValue, reqVO.getDataValue())
                .eqIfPresent(AlertRecordDO::getDataType, reqVO.getDataType())
                .eqIfPresent(AlertRecordDO::getDataUnit, reqVO.getDataUnit())
                .eqIfPresent(AlertRecordDO::getDataTypeRemark, reqVO.getDataTypeRemark())
                .betweenIfPresent(AlertRecordDO::getCreateTime, reqVO.getCreateTime())
                .eqIfPresent(AlertRecordDO::getAlertId, reqVO.getAlertId())
                .eqIfPresent(AlertRecordDO::getAlertAudio, reqVO.getAlertAudio())
                .eqIfPresent(AlertRecordDO::getIsRepeat, reqVO.getIsRepeat())
                .eqIfPresent(AlertRecordDO::getNoRepeatDuration, reqVO.getNoRepeatDuration())
                .eqIfPresent(AlertRecordDO::getDataId, reqVO.getDataId())
                .eqIfPresent(AlertRecordDO::getDataCode, reqVO.getDataCode())
                .likeIfPresent(AlertRecordDO::getDataName, reqVO.getDataName())
                .orderByDesc(AlertRecordDO::getId));
    }
    default PageResult<AlertRecordDO> selectPage(PageParam reqVO, Long alertId) {
        return selectPage(reqVO, new LambdaQueryWrapperX<AlertRecordDO>()
                .eq(AlertRecordDO::getAlertId, alertId)
                .orderByDesc(AlertRecordDO::getId));
    }

    default int deleteByAlertId(Long alertId) {
        return delete(AlertRecordDO::getAlertId, alertId);
    }

    default AlertRecordDO selectLastOne(AlertRecordPageReqVO reqVO) {
        return selectOne(new QueryWrapper<AlertRecordDO>()
                .eq(reqVO.getAlertId()!=null,"alert_id", reqVO.getAlertId())
                .eq(reqVO.getDataId()!=null,"data_id", reqVO.getDataId())
                .orderByDesc("id")
                .last("limit 1"));
    }
}