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.*;
import com.zt.plat.module.qms.business.bus.dal.dataobject.BusinessQCManagementSampleParameterDataDO;
import com.zt.plat.module.qms.business.config.dal.dataobject.ConfigAssayMethodParameterDO;
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;

/**
 * 质控管理样检测任务参数业务表,与子样检测任务参数业务表T_BSN_ASY_TSK_PRM_DAT一样，针对标准样、管理样、质控样、监控样等样品的参数 Mapper
 *
 * @author 后台管理-1
 */
@Mapper
public interface BusinessQCManagementSampleParameterDataMapper extends BaseMapperX<BusinessQCManagementSampleParameterDataDO> {

    default PageResult<BusinessQCManagementSampleParameterDataDO> selectPage(BusinessQCManagementSampleParameterDataPageReqVO reqVO) {
        return selectPage(reqVO, new LambdaQueryWrapperX<BusinessQCManagementSampleParameterDataDO>()
                .eqIfPresent(BusinessQCManagementSampleParameterDataDO::getBusinessQCManagementDataId, reqVO.getBusinessQCManagementDataId())
                .eqIfPresent(BusinessQCManagementSampleParameterDataDO::getConfigAssayMethodParameterId, reqVO.getConfigAssayMethodParameterId())
                .eqIfPresent(BusinessQCManagementSampleParameterDataDO::getValue, reqVO.getValue())
                .eqIfPresent(BusinessQCManagementSampleParameterDataDO::getDataType, reqVO.getDataType())
                .eqIfPresent(BusinessQCManagementSampleParameterDataDO::getDecimalPosition, reqVO.getDecimalPosition())
                .eqIfPresent(BusinessQCManagementSampleParameterDataDO::getUpdateCount, reqVO.getUpdateCount())
                .eqIfPresent(BusinessQCManagementSampleParameterDataDO::getSystemDepartmentCode, reqVO.getSystemDepartmentCode())
                .betweenIfPresent(BusinessQCManagementSampleParameterDataDO::getCreateTime, reqVO.getCreateTime())
                .eqIfPresent(BusinessQCManagementSampleParameterDataDO::getRemark, reqVO.getRemark())
                .orderByDesc(BusinessQCManagementSampleParameterDataDO::getId));
    }

	default List<BusinessAssayProjectAndParameterRespVO> selectByBusinessQCManagementDataIds(List<Long> businessQCManagementDataIdList) {
		return selectJoinList(BusinessAssayProjectAndParameterRespVO.class, new MPJLambdaWrapperX<BusinessQCManagementSampleParameterDataDO>()
				.leftJoin(ConfigAssayMethodParameterDO.class, ConfigAssayMethodParameterDO::getId, BusinessQCManagementSampleParameterDataDO::getConfigAssayMethodParameterId)
				.leftJoin(DictionaryBusinessDO.class, DictionaryBusinessDO::getId, ConfigAssayMethodParameterDO::getDictionaryBusinessId)
				.selectAs(BusinessQCManagementSampleParameterDataDO::getId, BusinessAssayProjectAndParameterRespVO::getId)
				.selectAs(BusinessQCManagementSampleParameterDataDO::getBusinessQCManagementDataId, BusinessAssayProjectAndParameterRespVO::getBizId)
				.selectAs(BusinessQCManagementSampleParameterDataDO::getConfigAssayMethodParameterId, BusinessAssayProjectAndParameterRespVO::getDicId)
				.selectAs(ConfigAssayMethodParameterDO::getKey, BusinessAssayProjectAndParameterRespVO::getDicKey)
				.selectAs(ConfigAssayMethodParameterDO::getParameterName, BusinessAssayProjectAndParameterRespVO::getName)
				.selectAs(ConfigAssayMethodParameterDO::getParameterName, BusinessAssayProjectAndParameterRespVO::getShowName)
				.selectAs(ConfigAssayMethodParameterDO::getFillingWay, BusinessAssayProjectAndParameterRespVO::getFillingWay)
				.selectAs(BusinessQCManagementSampleParameterDataDO::getDataType, BusinessAssayProjectAndParameterRespVO::getDataType)
				.selectAs(BusinessQCManagementSampleParameterDataDO::getDecimalPosition, BusinessAssayProjectAndParameterRespVO::getDecimalPosition)
				.selectAs(BusinessQCManagementSampleParameterDataDO::getDecimalPosition, BusinessAssayProjectAndParameterRespVO::getEffectiveDigit)
				.selectAs(BusinessQCManagementSampleParameterDataDO::getValue, BusinessAssayProjectAndParameterRespVO::getValue)
				.selectAs(ConfigAssayMethodParameterDO::getUnit, BusinessAssayProjectAndParameterRespVO::getUnit)
				.selectAs(ConfigAssayMethodParameterDO::getIsNull, BusinessAssayProjectAndParameterRespVO::getIsNull)
				.selectAs(ConfigAssayMethodParameterDO::getFormula, BusinessAssayProjectAndParameterRespVO::getFormula)
				.selectAs(ConfigAssayMethodParameterDO::getSortNo, BusinessAssayProjectAndParameterRespVO::getParamNo)
				.selectAs("'attribute'", BusinessAssayProjectAndParameterRespVO::getType)
				.selectAs(ConfigAssayMethodParameterDO::getDictionaryBusinessId, BusinessAssayProjectAndParameterRespVO::getGroupDictionaryBusinessId)
				.selectAs(ConfigAssayMethodParameterDO::getDictionaryBusinessKey, BusinessAssayProjectAndParameterRespVO::getGroupDictionaryBusinessKey)
				.selectAs(DictionaryBusinessDO::getName, BusinessAssayProjectAndParameterRespVO::getGroupDictionaryBusinessName)
				.in(BusinessQCManagementSampleParameterDataDO::getBusinessQCManagementDataId, businessQCManagementDataIdList)
                .orderByAsc(ConfigAssayMethodParameterDO::getSortNo));
	}
	
	
	default List<BusinessQCManagementSampleParameterDataExtendRespVO> selectExtendByBusinessQCManagementDataIds(List<Long> businessQCManagementDataIdList) {
		return selectJoinList(BusinessQCManagementSampleParameterDataExtendRespVO.class, new MPJLambdaWrapperX<BusinessQCManagementSampleParameterDataDO>()
				.leftJoin(ConfigAssayMethodParameterDO.class, ConfigAssayMethodParameterDO::getId, BusinessQCManagementSampleParameterDataDO::getConfigAssayMethodParameterId)
				.selectAll(BusinessQCManagementSampleParameterDataDO.class)
				.selectAs(ConfigAssayMethodParameterDO::getConfigAssayMethodId, BusinessQCManagementSampleParameterDataExtendRespVO::getConfigAssayMethodId)
				.selectAs(ConfigAssayMethodParameterDO::getParameterName, BusinessQCManagementSampleParameterDataExtendRespVO::getParameterName)
				.selectAs(ConfigAssayMethodParameterDO::getShortName, BusinessQCManagementSampleParameterDataExtendRespVO::getShortName)
				.selectAs(ConfigAssayMethodParameterDO::getKey, BusinessQCManagementSampleParameterDataExtendRespVO::getKey)
				.selectAs(ConfigAssayMethodParameterDO::getNo, BusinessQCManagementSampleParameterDataExtendRespVO::getNo)
				.in(BusinessQCManagementSampleParameterDataDO::getBusinessQCManagementDataId, businessQCManagementDataIdList)
				);
	}

}