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.BusinessQCManagementProjectDataDO;
import com.zt.plat.module.qms.business.config.dal.dataobject.ConfigAssayMethodProjectDO;
import com.zt.plat.module.qms.business.dic.dal.dataobject.DictionaryProjectDO;
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 BusinessQCManagementProjectDataMapper extends BaseMapperX<BusinessQCManagementProjectDataDO> {

    default PageResult<BusinessQCManagementProjectDataDO> selectPage(BusinessQCManagementProjectDataPageReqVO reqVO) {
        return selectPage(reqVO, new LambdaQueryWrapperX<BusinessQCManagementProjectDataDO>()
                .eqIfPresent(BusinessQCManagementProjectDataDO::getBusinessQCManagementDataId, reqVO.getBusinessQCManagementDataId())
                .eqIfPresent(BusinessQCManagementProjectDataDO::getConfigAssayMethodProjectId, reqVO.getConfigAssayMethodProjectId())
                .eqIfPresent(BusinessQCManagementProjectDataDO::getDictionaryProjectId, reqVO.getDictionaryProjectId())
                .eqIfPresent(BusinessQCManagementProjectDataDO::getUsage, reqVO.getUsage())
                .eqIfPresent(BusinessQCManagementProjectDataDO::getSymbol, reqVO.getSymbol())
                .eqIfPresent(BusinessQCManagementProjectDataDO::getValue, reqVO.getValue())
                .eqIfPresent(BusinessQCManagementProjectDataDO::getDataType, reqVO.getDataType())
                .eqIfPresent(BusinessQCManagementProjectDataDO::getDecimalPosition, reqVO.getDecimalPosition())
                .eqIfPresent(BusinessQCManagementProjectDataDO::getEffectiveDigit, reqVO.getEffectiveDigit())
                .eqIfPresent(BusinessQCManagementProjectDataDO::getIsNotAssessment, reqVO.getIsNotAssessment())
                .eqIfPresent(BusinessQCManagementProjectDataDO::getIsEnabled, reqVO.getIsEnabled())
                .eqIfPresent(BusinessQCManagementProjectDataDO::getUpdateCount, reqVO.getUpdateCount())
                .eqIfPresent(BusinessQCManagementProjectDataDO::getSystemDepartmentCode, reqVO.getSystemDepartmentCode())
                .betweenIfPresent(BusinessQCManagementProjectDataDO::getCreateTime, reqVO.getCreateTime())
                .eqIfPresent(BusinessQCManagementProjectDataDO::getRemark, reqVO.getRemark())
                .orderByDesc(BusinessQCManagementProjectDataDO::getId));
    }

	default List<BusinessAssayProjectAndParameterRespVO> selectProjectAndParameterBy(BusinessQCManagementProjectDataReqVO reqVO) {
		return selectJoinList(BusinessAssayProjectAndParameterRespVO.class, new MPJLambdaWrapperX<BusinessQCManagementProjectDataDO>()
				.leftJoin(ConfigAssayMethodProjectDO.class, ConfigAssayMethodProjectDO::getId, BusinessQCManagementProjectDataDO::getConfigAssayMethodProjectId)
				.leftJoin(DictionaryProjectDO.class, DictionaryProjectDO::getId, BusinessQCManagementProjectDataDO::getDictionaryProjectId)
				.leftJoin(DictionaryBusinessDO.class, DictionaryBusinessDO::getId, ConfigAssayMethodProjectDO::getDictionaryBusinessId)
				.selectAs(BusinessQCManagementProjectDataDO::getId, BusinessAssayProjectAndParameterRespVO::getId)
				.selectAs(BusinessQCManagementProjectDataDO::getBusinessQCManagementDataId, BusinessAssayProjectAndParameterRespVO::getBizId)
				.selectAs(BusinessQCManagementProjectDataDO::getDictionaryProjectId, BusinessAssayProjectAndParameterRespVO::getDicId)
				.selectAs(DictionaryProjectDO::getKey, BusinessAssayProjectAndParameterRespVO::getDicKey)
				//.selectAs(DictionaryProjectDO::getName, BusinessAssayProjectAndParameterRespVO::getName)
				.selectAs(DictionaryProjectDO::getSimpleName, BusinessAssayProjectAndParameterRespVO::getName)
				.selectAs(DictionaryProjectDO::getShowName, BusinessAssayProjectAndParameterRespVO::getShowName)
				.selectAs(BusinessQCManagementProjectDataDO::getDataType, BusinessAssayProjectAndParameterRespVO::getDataType)
				.selectAs(BusinessQCManagementProjectDataDO::getDecimalPosition, BusinessAssayProjectAndParameterRespVO::getDecimalPosition)
				.selectAs(BusinessQCManagementProjectDataDO::getEffectiveDigit, BusinessAssayProjectAndParameterRespVO::getEffectiveDigit)
				.selectAs(BusinessQCManagementProjectDataDO::getValue, BusinessAssayProjectAndParameterRespVO::getValue)
				.selectAs(BusinessQCManagementProjectDataDO::getSymbol, BusinessAssayProjectAndParameterRespVO::getSymbol)
				.selectAs(ConfigAssayMethodProjectDO::getDictionaryProjectUnit, BusinessAssayProjectAndParameterRespVO::getUnit)
				.selectAs(ConfigAssayMethodProjectDO::getIsNull, BusinessAssayProjectAndParameterRespVO::getIsNull)
				.selectAs(ConfigAssayMethodProjectDO::getFormula, BusinessAssayProjectAndParameterRespVO::getFormula)
				.selectAs(ConfigAssayMethodProjectDO::getSortNo, BusinessAssayProjectAndParameterRespVO::getParamNo)
				.selectAs("'project'", BusinessAssayProjectAndParameterRespVO::getType)
				.selectAs(ConfigAssayMethodProjectDO::getDictionaryBusinessId, BusinessAssayProjectAndParameterRespVO::getGroupDictionaryBusinessId)
				.selectAs(ConfigAssayMethodProjectDO::getDictionaryBusinessKey, BusinessAssayProjectAndParameterRespVO::getGroupDictionaryBusinessKey)
				.selectAs(DictionaryBusinessDO::getName, BusinessAssayProjectAndParameterRespVO::getGroupDictionaryBusinessName)
                .eqIfPresent(BusinessQCManagementProjectDataDO::getBusinessQCManagementDataId, reqVO.getBusinessQCManagementDataId())
                .eqIfPresent(BusinessQCManagementProjectDataDO::getConfigAssayMethodProjectId, reqVO.getConfigAssayMethodProjectId())
                .eqIfPresent(BusinessQCManagementProjectDataDO::getDictionaryProjectId, reqVO.getDictionaryProjectId())
                .eqIfPresent(BusinessQCManagementProjectDataDO::getUsage, reqVO.getUsage())
                .eqIfPresent(BusinessQCManagementProjectDataDO::getSymbol, reqVO.getSymbol())
                .eqIfPresent(BusinessQCManagementProjectDataDO::getValue, reqVO.getValue())
                .eqIfPresent(BusinessQCManagementProjectDataDO::getDataType, reqVO.getDataType())
                .eqIfPresent(BusinessQCManagementProjectDataDO::getDecimalPosition, reqVO.getDecimalPosition())
                .eqIfPresent(BusinessQCManagementProjectDataDO::getEffectiveDigit, reqVO.getEffectiveDigit())
                .eqIfPresent(BusinessQCManagementProjectDataDO::getIsNotAssessment, reqVO.getIsNotAssessment())
                .eqIfPresent(BusinessQCManagementProjectDataDO::getIsEnabled, reqVO.getIsEnabled())
                .eqIfPresent(BusinessQCManagementProjectDataDO::getUpdateCount, reqVO.getUpdateCount())
                .eqIfPresent(BusinessQCManagementProjectDataDO::getSystemDepartmentCode, reqVO.getSystemDepartmentCode())
                .betweenIfPresent(BusinessQCManagementProjectDataDO::getCreateTime, reqVO.getCreateTime())
                .eqIfPresent(BusinessQCManagementProjectDataDO::getRemark, reqVO.getRemark())
                .orderByAsc(ConfigAssayMethodProjectDO::getSortNo));
	}

	default List<BusinessAssayProjectAndParameterRespVO> selectProjectAndParameterByOld(BusinessQCManagementProjectDataReqVO reqVO) {
		return selectJoinList(BusinessAssayProjectAndParameterRespVO.class, new MPJLambdaWrapperX<BusinessQCManagementProjectDataDO>()
				.leftJoin(ConfigAssayMethodProjectDO.class, ConfigAssayMethodProjectDO::getId, BusinessQCManagementProjectDataDO::getConfigAssayMethodProjectId)
				.leftJoin(DictionaryProjectDO.class, DictionaryProjectDO::getId, BusinessQCManagementProjectDataDO::getDictionaryProjectId)
				.leftJoin(DictionaryBusinessDO.class, DictionaryBusinessDO::getId, ConfigAssayMethodProjectDO::getDictionaryBusinessId)
				.selectAs(BusinessQCManagementProjectDataDO::getId, BusinessAssayProjectAndParameterRespVO::getId)
				.selectAs(BusinessQCManagementProjectDataDO::getBusinessQCManagementDataId, BusinessAssayProjectAndParameterRespVO::getBizId)
				.selectAs(BusinessQCManagementProjectDataDO::getConfigAssayMethodProjectId, BusinessAssayProjectAndParameterRespVO::getDicId)
				.selectAs(DictionaryProjectDO::getKey, BusinessAssayProjectAndParameterRespVO::getDicKey)
				//.selectAs(DictionaryProjectDO::getName, BusinessAssayProjectAndParameterRespVO::getName)
				.selectAs(DictionaryProjectDO::getSimpleName, BusinessAssayProjectAndParameterRespVO::getName)
				.selectAs(DictionaryProjectDO::getShowName, BusinessAssayProjectAndParameterRespVO::getShowName)
				.selectAs(BusinessQCManagementProjectDataDO::getDataType, BusinessAssayProjectAndParameterRespVO::getDataType)
				.selectAs(BusinessQCManagementProjectDataDO::getDecimalPosition, BusinessAssayProjectAndParameterRespVO::getDecimalPosition)
				.selectAs(BusinessQCManagementProjectDataDO::getEffectiveDigit, BusinessAssayProjectAndParameterRespVO::getEffectiveDigit)
				.selectAs(BusinessQCManagementProjectDataDO::getValue, BusinessAssayProjectAndParameterRespVO::getValue)
				.selectAs(BusinessQCManagementProjectDataDO::getSymbol, BusinessAssayProjectAndParameterRespVO::getSymbol)
				.selectAs(ConfigAssayMethodProjectDO::getDictionaryProjectUnit, BusinessAssayProjectAndParameterRespVO::getUnit)
				.selectAs(ConfigAssayMethodProjectDO::getIsNull, BusinessAssayProjectAndParameterRespVO::getIsNull)
				.selectAs(ConfigAssayMethodProjectDO::getFormula, BusinessAssayProjectAndParameterRespVO::getFormula)
				.selectAs(ConfigAssayMethodProjectDO::getSortNo, BusinessAssayProjectAndParameterRespVO::getParamNo)
				.selectAs("'project'", BusinessAssayProjectAndParameterRespVO::getType)
				.selectAs(ConfigAssayMethodProjectDO::getDictionaryBusinessId, BusinessAssayProjectAndParameterRespVO::getGroupDictionaryBusinessId)
				.selectAs(ConfigAssayMethodProjectDO::getDictionaryBusinessKey, BusinessAssayProjectAndParameterRespVO::getGroupDictionaryBusinessKey)
				.selectAs(DictionaryBusinessDO::getName, BusinessAssayProjectAndParameterRespVO::getGroupDictionaryBusinessName)
                .eqIfPresent(BusinessQCManagementProjectDataDO::getBusinessQCManagementDataId, reqVO.getBusinessQCManagementDataId())
                .eqIfPresent(BusinessQCManagementProjectDataDO::getConfigAssayMethodProjectId, reqVO.getConfigAssayMethodProjectId())
                .eqIfPresent(BusinessQCManagementProjectDataDO::getDictionaryProjectId, reqVO.getDictionaryProjectId())
                .eqIfPresent(BusinessQCManagementProjectDataDO::getUsage, reqVO.getUsage())
                .eqIfPresent(BusinessQCManagementProjectDataDO::getSymbol, reqVO.getSymbol())
                .eqIfPresent(BusinessQCManagementProjectDataDO::getValue, reqVO.getValue())
                .eqIfPresent(BusinessQCManagementProjectDataDO::getDataType, reqVO.getDataType())
                .eqIfPresent(BusinessQCManagementProjectDataDO::getDecimalPosition, reqVO.getDecimalPosition())
                .eqIfPresent(BusinessQCManagementProjectDataDO::getEffectiveDigit, reqVO.getEffectiveDigit())
                .eqIfPresent(BusinessQCManagementProjectDataDO::getIsNotAssessment, reqVO.getIsNotAssessment())
                .eqIfPresent(BusinessQCManagementProjectDataDO::getIsEnabled, reqVO.getIsEnabled())
                .eqIfPresent(BusinessQCManagementProjectDataDO::getUpdateCount, reqVO.getUpdateCount())
                .eqIfPresent(BusinessQCManagementProjectDataDO::getSystemDepartmentCode, reqVO.getSystemDepartmentCode())
                .betweenIfPresent(BusinessQCManagementProjectDataDO::getCreateTime, reqVO.getCreateTime())
                .eqIfPresent(BusinessQCManagementProjectDataDO::getRemark, reqVO.getRemark())
                .orderByAsc(ConfigAssayMethodProjectDO::getSortNo));
	}
	
	default List<BusinessQCManagementProjectDataDO> selectByBusinessQCManagementDataId(Long businessQCManagementDataId) {
		return selectList(new LambdaQueryWrapperX<BusinessQCManagementProjectDataDO>()
				.eq(BusinessQCManagementProjectDataDO::getBusinessQCManagementDataId, businessQCManagementDataId));
	}
	
	default List<BusinessQCManagementProjectDataDO> selectByBusinessQCManagementDataIds(List<Long> businessQCManagementDataIds) {
		return selectList(new LambdaQueryWrapperX<BusinessQCManagementProjectDataDO>()
				.in(BusinessQCManagementProjectDataDO::getBusinessQCManagementDataId, businessQCManagementDataIds));
	}
}