package com.zt.plat.module.qms.business.config.dal.mapper;

import com.zt.plat.framework.common.pojo.PageResult;
import com.zt.plat.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.zt.plat.framework.mybatis.core.query.MPJLambdaWrapperX;
import com.zt.plat.framework.mybatis.core.mapper.BaseMapperX;
import com.zt.plat.module.qms.business.config.controller.vo.ConfigSampleReportPageReqVO;
import com.zt.plat.module.qms.business.config.dal.dataobject.ConfigReportTypeDO;
import com.zt.plat.module.qms.business.config.dal.dataobject.ConfigSampleReportDO;

import java.util.List;

import org.apache.ibatis.annotations.Mapper;
import com.zt.plat.module.qms.business.config.controller.vo.*;

/**
 * 样品报表关系 Mapper
 *
 * @author 后台管理
 */
@Mapper
public interface ConfigSampleReportMapper extends BaseMapperX<ConfigSampleReportDO> {

    default PageResult<ConfigSampleReportDO> selectPage(ConfigSampleReportPageReqVO reqVO) {
        return selectPage(reqVO, new LambdaQueryWrapperX<ConfigSampleReportDO>()
                .eqIfPresent(ConfigSampleReportDO::getConfigReportTypeId, reqVO.getConfigReportTypeId())
                .eqIfPresent(ConfigSampleReportDO::getConfigBaseSampleId, reqVO.getConfigBaseSampleId())
                .likeIfPresent(ConfigSampleReportDO::getSampleName, reqVO.getSampleName())
                .eqIfPresent(ConfigSampleReportDO::getDataSource, reqVO.getDataSource())
                .eqIfPresent(ConfigSampleReportDO::getSystemDepartmentCode, reqVO.getSystemDepartmentCode())
                .betweenIfPresent(ConfigSampleReportDO::getCreateTime, reqVO.getCreateTime())
                .eqIfPresent(ConfigSampleReportDO::getRemark, reqVO.getRemark())
                .eqIfPresent(ConfigSampleReportDO::getVersion, reqVO.getVersion())
                .orderByDesc(ConfigSampleReportDO::getId));
    }

    default List<ConfigSampleReportExtendRespVO> selectList(ConfigSampleReportReqVO reqVO) {    	
    	return selectJoinList(ConfigSampleReportExtendRespVO.class, new MPJLambdaWrapperX<ConfigSampleReportDO>()
    			.leftJoin(ConfigReportTypeDO.class, ConfigReportTypeDO::getId, ConfigSampleReportDO::getConfigReportTypeId)
    			.selectAll(ConfigSampleReportDO.class)
    			.selectAs(ConfigReportTypeDO::getId, ConfigSampleReportExtendRespVO::getConfigReportTypeId)
    			.selectAs(ConfigReportTypeDO::getKey, ConfigSampleReportExtendRespVO::getConfigReportTypeKey)
    			.selectAs(ConfigReportTypeDO::getName, ConfigSampleReportExtendRespVO::getConfigReportTypeName)
    			.eqIfPresent(ConfigSampleReportDO::getConfigReportTypeId, reqVO.getConfigReportTypeId())
                .eqIfPresent(ConfigSampleReportDO::getConfigBaseSampleId, reqVO.getConfigBaseSampleId())
                .likeIfPresent(ConfigSampleReportDO::getSampleName, reqVO.getSampleName())
                .eqIfPresent(ConfigSampleReportDO::getDataSource, reqVO.getDataSource())
                .eqIfPresent(ConfigSampleReportDO::getSystemDepartmentCode, reqVO.getSystemDepartmentCode())
                .betweenIfPresent(ConfigSampleReportDO::getCreateTime, reqVO.getCreateTime())
                .eqIfPresent(ConfigSampleReportDO::getRemark, reqVO.getRemark())
                .eqIfPresent(ConfigSampleReportDO::getVersion, reqVO.getVersion())
                .orderByDesc(ConfigSampleReportDO::getId));
    }
    
    default List<ConfigSampleReportDO> selectByConfigBaseSampleIds(List<Long> configBaseSampleIds) {
    	return selectList(new LambdaQueryWrapperX<ConfigSampleReportDO>()
    			.in(ConfigSampleReportDO::getConfigBaseSampleId, configBaseSampleIds));
    }
}