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

import java.util.*;

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.module.qms.business.config.controller.vo.*;
import com.zt.plat.module.qms.business.config.dal.dataobject.ConfigQCSampleMethodDO;
import com.zt.plat.module.qms.common.dic.dal.dataobject.DictionaryBusinessDO;
import com.zt.plat.framework.mybatis.core.mapper.BaseMapperX;
import org.apache.ibatis.annotations.Mapper;

/**
 * 质控样与检测方法配置 Mapper
 *
 * @author 后台管理
 */
@Mapper
public interface ConfigQCSampleMethodMapper extends BaseMapperX<ConfigQCSampleMethodDO> {

    default PageResult<ConfigQCSampleMethodDO> selectPage(ConfigQCSampleMethodPageReqVO reqVO) {
        return selectPage(reqVO, new LambdaQueryWrapperX<ConfigQCSampleMethodDO>()
                .eqIfPresent(ConfigQCSampleMethodDO::getConfigAssayMethodId, reqVO.getConfigAssayMethodId())
                .eqIfPresent(ConfigQCSampleMethodDO::getDictionaryBusinessId, reqVO.getDictionaryBusinessId())
                .eqIfPresent(ConfigQCSampleMethodDO::getDictionaryBusinessKey, reqVO.getDictionaryBusinessKey())
                .eqIfPresent(ConfigQCSampleMethodDO::getCodeRule, reqVO.getCodeRule())
                .eqIfPresent(ConfigQCSampleMethodDO::getDefaultCount, reqVO.getDefaultCount())
                .eqIfPresent(ConfigQCSampleMethodDO::getTaskMinimumCount, reqVO.getTaskMinimumCount())
                .eqIfPresent(ConfigQCSampleMethodDO::getAssayMinimumCount, reqVO.getAssayMinimumCount())
                .eqIfPresent(ConfigQCSampleMethodDO::getIsCorrelation, reqVO.getIsCorrelation())
                .eqIfPresent(ConfigQCSampleMethodDO::getConfigInfomation, reqVO.getConfigInfomation())
                .eqIfPresent(ConfigQCSampleMethodDO::getMustProject, reqVO.getMustProject())
                .eqIfPresent(ConfigQCSampleMethodDO::getSystemDepartmentCode, reqVO.getSystemDepartmentCode())
                .betweenIfPresent(ConfigQCSampleMethodDO::getCreateTime, reqVO.getCreateTime())
                .eqIfPresent(ConfigQCSampleMethodDO::getRemark, reqVO.getRemark())
                .orderByDesc(ConfigQCSampleMethodDO::getId));
    }
    
    
    default List<ConfigQCSampleMethodExtendRespVO> selectByConfigAssayMethodId(Long configAssayMethodId) {
    	return selectJoinList(ConfigQCSampleMethodExtendRespVO.class, new MPJLambdaWrapperX<ConfigQCSampleMethodDO>()
    			.leftJoin(DictionaryBusinessDO.class, "dbd1", DictionaryBusinessDO::getId, ConfigQCSampleMethodDO::getDictionaryBusinessId)
    			.leftJoin(DictionaryBusinessDO.class, "dbd2", DictionaryBusinessDO::getId, "dbd1", DictionaryBusinessDO::getParentId)
    			.selectAll(ConfigQCSampleMethodDO.class)
    			.selectAs("dbd1", DictionaryBusinessDO::getName, ConfigQCSampleMethodExtendRespVO::getDictionaryBusinessName)
    			.selectAs("dbd1", DictionaryBusinessDO::getParentId, ConfigQCSampleMethodExtendRespVO::getParentDictionaryBusinessId)
    			.selectAs("dbd2", DictionaryBusinessDO::getKey, ConfigQCSampleMethodExtendRespVO::getParentDictionaryBusinesskey)
    			.selectAs("dbd2", DictionaryBusinessDO::getName, ConfigQCSampleMethodExtendRespVO::getParentDictionaryBusinessName)
    			.eq(ConfigQCSampleMethodDO::getConfigAssayMethodId, configAssayMethodId)
    			.orderByAsc(ConfigQCSampleMethodDO::getSortNo));
    }
    
    
    default List<ConfigQCSampleMethodExtendRespVO> selectByConfigAssayMethodIdList(List<Long> configAssayMethodIdList) {
    	return selectJoinList(ConfigQCSampleMethodExtendRespVO.class, new MPJLambdaWrapperX<ConfigQCSampleMethodDO>()
    			.leftJoin(DictionaryBusinessDO.class, "dbd1", DictionaryBusinessDO::getId, ConfigQCSampleMethodDO::getDictionaryBusinessId)
    			.leftJoin(DictionaryBusinessDO.class, "dbd2", DictionaryBusinessDO::getId, "dbd1", DictionaryBusinessDO::getParentId)
    			.selectAll(ConfigQCSampleMethodDO.class)
    			.selectAs("dbd1", DictionaryBusinessDO::getName, ConfigQCSampleMethodExtendRespVO::getDictionaryBusinessName)
    			.selectAs("dbd1", DictionaryBusinessDO::getParentId, ConfigQCSampleMethodExtendRespVO::getParentDictionaryBusinessId)
    			.selectAs("dbd2", DictionaryBusinessDO::getKey, ConfigQCSampleMethodExtendRespVO::getParentDictionaryBusinesskey)
    			.selectAs("dbd2", DictionaryBusinessDO::getName, ConfigQCSampleMethodExtendRespVO::getParentDictionaryBusinessName)
    			.in(ConfigQCSampleMethodDO::getConfigAssayMethodId, configAssayMethodIdList)
    			.orderByAsc(ConfigQCSampleMethodDO::getSortNo));
    }
    
    
    default List<ConfigQCSampleMethodExtendRespVO> selectByConfigAssayMethodIds(List<Long> configAssayMethodIds) {
    	return selectJoinList(ConfigQCSampleMethodExtendRespVO.class, new MPJLambdaWrapperX<ConfigQCSampleMethodDO>()
    			.leftJoin(DictionaryBusinessDO.class, DictionaryBusinessDO::getId, ConfigQCSampleMethodDO::getDictionaryBusinessId)
    			.selectAll(ConfigQCSampleMethodDO.class)
    			.selectAs(DictionaryBusinessDO::getName, ConfigQCSampleMethodExtendRespVO::getDictionaryBusinessName)
    			.in(ConfigQCSampleMethodDO::getConfigAssayMethodId, configAssayMethodIds)
    			.orderByAsc(ConfigQCSampleMethodDO::getSortNo));
    }
    
    default ConfigQCSampleMethodExtendRespVO selectByConfigAssayMethodIdAndDictionaryBusinessKey(Long configAssayMethodId, String dictionaryBusinessKey) {
    	return selectJoinOne(ConfigQCSampleMethodExtendRespVO.class, new MPJLambdaWrapperX<ConfigQCSampleMethodDO>()
    			.leftJoin(DictionaryBusinessDO.class, DictionaryBusinessDO::getId, ConfigQCSampleMethodDO::getDictionaryBusinessId)
    			.selectAll(ConfigQCSampleMethodDO.class)
    			.selectAs(DictionaryBusinessDO::getName, ConfigQCSampleMethodExtendRespVO::getDictionaryBusinessName)
    			.eq(ConfigQCSampleMethodDO::getConfigAssayMethodId, configAssayMethodId)
    			.eq(ConfigQCSampleMethodDO::getDictionaryBusinessKey, dictionaryBusinessKey));
    }

}