package com.zt.plat.module.qms.business.bus.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.bus.controller.vo.BusinessAssayProjectAndParameterRespVO;
import com.zt.plat.module.qms.business.bus.controller.vo.BusinessQCCoefficientParameterDataPageReqVO;
import com.zt.plat.module.qms.business.bus.controller.vo.BusinessQCCoefficientParameterDataReqVO;
import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessAssayTaskParameterDataDO;
import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessQCCoefficientParameterDataDO;
import com.zt.plat.module.qms.business.config.dal.dataobject.ConfigQCSampleMethodParameterDO;
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 BusinessQCCoefficientParameterDataMapper extends BaseMapperX<BusinessQCCoefficientParameterDataDO> {

    default PageResult<BusinessQCCoefficientParameterDataDO> selectPage(BusinessQCCoefficientParameterDataPageReqVO reqVO) {
        return selectPage(reqVO, new LambdaQueryWrapperX<BusinessQCCoefficientParameterDataDO>()
                .eqIfPresent(BusinessQCCoefficientParameterDataDO::getBusinessQCCoefficientDataId, reqVO.getBusinessQCCoefficientDataId())
                .eqIfPresent(BusinessQCCoefficientParameterDataDO::getConfigQCSampleMethodParameterId, reqVO.getConfigQCSampleMethodParameterId())
                .eqIfPresent(BusinessQCCoefficientParameterDataDO::getDictionaryParameterId, reqVO.getDictionaryParameterId())
                .eqIfPresent(BusinessQCCoefficientParameterDataDO::getValue, reqVO.getValue())
                .eqIfPresent(BusinessQCCoefficientParameterDataDO::getDataType, reqVO.getDataType())
                .eqIfPresent(BusinessQCCoefficientParameterDataDO::getDecimalPosition, reqVO.getDecimalPosition())
                .eqIfPresent(BusinessQCCoefficientParameterDataDO::getSystemDepartmentCode, reqVO.getSystemDepartmentCode())
                .betweenIfPresent(BusinessQCCoefficientParameterDataDO::getCreateTime, reqVO.getCreateTime())
                .eqIfPresent(BusinessQCCoefficientParameterDataDO::getUpdateCount, reqVO.getUpdateCount())
                .eqIfPresent(BusinessQCCoefficientParameterDataDO::getRemark, reqVO.getRemark())
                .orderByDesc(BusinessQCCoefficientParameterDataDO::getId));
    }
    
    default List<BusinessAssayProjectAndParameterRespVO> selectProjectAndParameterBy(BusinessQCCoefficientParameterDataReqVO reqVO) {
    	return selectJoinList(BusinessAssayProjectAndParameterRespVO.class, new MPJLambdaWrapperX<BusinessQCCoefficientParameterDataDO>()
    			.leftJoin(ConfigQCSampleMethodParameterDO.class, ConfigQCSampleMethodParameterDO::getId, BusinessQCCoefficientParameterDataDO::getConfigQCSampleMethodParameterId)
				.leftJoin(DictionaryBusinessDO.class, DictionaryBusinessDO::getId, ConfigQCSampleMethodParameterDO::getDictionaryBusinessId)
				.selectAs(BusinessQCCoefficientParameterDataDO::getId, BusinessAssayProjectAndParameterRespVO::getId)
				.selectAs(BusinessQCCoefficientParameterDataDO::getBusinessQCCoefficientDataId, BusinessAssayProjectAndParameterRespVO::getBizId)
				.selectAs(BusinessQCCoefficientParameterDataDO::getConfigQCSampleMethodParameterId, BusinessAssayProjectAndParameterRespVO::getDicId)
				.selectAs(ConfigQCSampleMethodParameterDO::getKey, BusinessAssayProjectAndParameterRespVO::getDicKey)
				.selectAs(ConfigQCSampleMethodParameterDO::getParameterName, BusinessAssayProjectAndParameterRespVO::getName)
				.selectAs(ConfigQCSampleMethodParameterDO::getParameterName, BusinessAssayProjectAndParameterRespVO::getShowName)
				.selectAs(ConfigQCSampleMethodParameterDO::getFillingWay, BusinessAssayProjectAndParameterRespVO::getFillingWay)
				.selectAs(BusinessQCCoefficientParameterDataDO::getDataType, BusinessAssayProjectAndParameterRespVO::getDataType)
				.selectAs(BusinessQCCoefficientParameterDataDO::getDecimalPosition, BusinessAssayProjectAndParameterRespVO::getDecimalPosition)
				.selectAs(BusinessQCCoefficientParameterDataDO::getDecimalPosition, BusinessAssayProjectAndParameterRespVO::getEffectiveDigit)//有效数字位与小数位相同
				.selectAs(BusinessQCCoefficientParameterDataDO::getValue, BusinessAssayProjectAndParameterRespVO::getValue)
				.selectAs(BusinessQCCoefficientParameterDataDO::getSymbol, BusinessAssayProjectAndParameterRespVO::getSymbol)
				.selectAs(ConfigQCSampleMethodParameterDO::getUnit, BusinessAssayProjectAndParameterRespVO::getUnit)
				.selectAs(ConfigQCSampleMethodParameterDO::getIsNull, BusinessAssayProjectAndParameterRespVO::getIsNull)
				.selectAs(ConfigQCSampleMethodParameterDO::getFormula, BusinessAssayProjectAndParameterRespVO::getFormula)
				.selectAs(ConfigQCSampleMethodParameterDO::getNo, BusinessAssayProjectAndParameterRespVO::getParamNo)
				.selectAs("'parameter'", BusinessAssayProjectAndParameterRespVO::getType)
				.selectAs(ConfigQCSampleMethodParameterDO::getDictionaryBusinessId, BusinessAssayProjectAndParameterRespVO::getGroupDictionaryBusinessId)
				.selectAs(ConfigQCSampleMethodParameterDO::getDictionaryBusinessKey, BusinessAssayProjectAndParameterRespVO::getGroupDictionaryBusinessKey)
				.selectAs(DictionaryBusinessDO::getName, BusinessAssayProjectAndParameterRespVO::getGroupDictionaryBusinessName)
				.eqIfPresent(BusinessQCCoefficientParameterDataDO::getBusinessQCCoefficientDataId, reqVO.getBusinessQCCoefficientDataId())
                .eqIfPresent(BusinessQCCoefficientParameterDataDO::getConfigQCSampleMethodParameterId, reqVO.getConfigQCSampleMethodParameterId())
                .eqIfPresent(BusinessQCCoefficientParameterDataDO::getDictionaryParameterId, reqVO.getDictionaryParameterId())
                .eqIfPresent(BusinessQCCoefficientParameterDataDO::getValue, reqVO.getValue())
                .eqIfPresent(BusinessQCCoefficientParameterDataDO::getDataType, reqVO.getDataType())
                .eqIfPresent(BusinessQCCoefficientParameterDataDO::getDecimalPosition, reqVO.getDecimalPosition())
                .eqIfPresent(BusinessQCCoefficientParameterDataDO::getSystemDepartmentCode, reqVO.getSystemDepartmentCode())
                .betweenIfPresent(BusinessQCCoefficientParameterDataDO::getCreateTime, reqVO.getCreateTime())
                .eqIfPresent(BusinessQCCoefficientParameterDataDO::getUpdateCount, reqVO.getUpdateCount())
                .eqIfPresent(BusinessQCCoefficientParameterDataDO::getRemark, reqVO.getRemark())
                .orderByAsc(ConfigQCSampleMethodParameterDO::getSortNo)); 
    }
    
    default List<BusinessQCCoefficientParameterDataDO> selectByBusinessQCCoefficientDataId(Long businessQCCoefficientDataId) {
    	return selectList(new LambdaQueryWrapperX<BusinessQCCoefficientParameterDataDO>()
    			.eq(BusinessQCCoefficientParameterDataDO::getBusinessQCCoefficientDataId, businessQCCoefficientDataId));
    }
    
    default List<BusinessQCCoefficientParameterDataDO> selectByBusinessQCCoefficientDataIds(List<Long> businessQCCoefficientDataIds) {
    	return selectList(new LambdaQueryWrapperX<BusinessQCCoefficientParameterDataDO>()
    			.in(BusinessQCCoefficientParameterDataDO::getBusinessQCCoefficientDataId, businessQCCoefficientDataIds));
    }

}