package com.zt.plat.module.qms.resource.material.dal.mapper;

import com.zt.plat.framework.common.pojo.PageResult;
import com.zt.plat.framework.mybatis.core.mapper.BaseMapperX;
import com.zt.plat.framework.mybatis.core.query.LambdaQueryWrapperX;
import com.zt.plat.framework.mybatis.core.query.MPJLambdaWrapperX;
import com.zt.plat.module.qms.resource.material.controller.vo.MaterialUseEndReusePageReqVO;
import com.zt.plat.module.qms.resource.material.dal.dataobject.MaterialInfomationDO;
import com.zt.plat.module.qms.resource.material.dal.dataobject.MaterialProductDO;
import com.zt.plat.module.qms.resource.material.dal.dataobject.MaterialUseEndReuseDO;
import com.zt.plat.module.qms.resource.material.dal.dataobject.MaterialUseEndReuseDetailDO;
import org.apache.ibatis.annotations.Mapper;

import java.util.List;

/**
 * 物料用完标记或清洗回收 Mapper
 *
 * @author 后台管理
 */
@Mapper
public interface MaterialUseEndReuseMapper extends BaseMapperX<MaterialUseEndReuseDO> {

    default PageResult<MaterialUseEndReuseDO> selectPage(MaterialUseEndReusePageReqVO reqVO) {
        return selectPage(reqVO, new LambdaQueryWrapperX<MaterialUseEndReuseDO>()
                .eqIfPresent(MaterialUseEndReuseDO::getBusinessType, reqVO.getBusinessType())
                .eqIfPresent(MaterialUseEndReuseDO::getOperator, reqVO.getOperator())
                .eqIfPresent(MaterialUseEndReuseDO::getOperatorId, reqVO.getOperatorId())
                .betweenIfPresent(MaterialUseEndReuseDO::getOperatorDate, reqVO.getOperatorDate())
                .eqIfPresent(MaterialUseEndReuseDO::getSystemDepartmentCode, reqVO.getSystemDepartmentCode())
                .eqIfPresent(MaterialUseEndReuseDO::getRemark, reqVO.getRemark())
                .betweenIfPresent(MaterialUseEndReuseDO::getCreateTime, reqVO.getCreateTime())
                .orderByDesc(MaterialUseEndReuseDO::getId));
    }

    default PageResult<MaterialUseEndReuseDO> selectPage(MaterialUseEndReusePageReqVO reqVO, List<Long> pdtIds) {

        MPJLambdaWrapperX<MaterialUseEndReuseDO> wrapper = new MPJLambdaWrapperX<MaterialUseEndReuseDO>()
                .selectAll(MaterialUseEndReuseDO.class)
                .leftJoin(MaterialUseEndReuseDetailDO.class, MaterialUseEndReuseDetailDO::getParentId, MaterialUseEndReuseDO::getId)
                .leftJoin(MaterialInfomationDO.class, MaterialInfomationDO::getId, MaterialUseEndReuseDetailDO::getInfomationId)
                .leftJoin(MaterialProductDO.class, MaterialProductDO::getId, MaterialInfomationDO::getProductId)
                .in(MaterialProductDO::getId, pdtIds)
                .eqIfPresent(MaterialUseEndReuseDO::getBusinessType, reqVO.getBusinessType())
                .eqIfPresent(MaterialUseEndReuseDO::getOperator, reqVO.getOperator())
                .eqIfPresent(MaterialUseEndReuseDO::getOperatorId, reqVO.getOperatorId())
                .betweenIfPresent(MaterialUseEndReuseDO::getOperatorDate, reqVO.getOperatorDate())
                .eqIfPresent(MaterialUseEndReuseDO::getSystemDepartmentCode, reqVO.getSystemDepartmentCode())
                .eqIfPresent(MaterialUseEndReuseDO::getRemark, reqVO.getRemark())
                .betweenIfPresent(MaterialUseEndReuseDO::getCreateTime, reqVO.getCreateTime())
                .orderByDesc(MaterialUseEndReuseDO::getId);

        return selectJoinPage(reqVO, MaterialUseEndReuseDO.class, wrapper);
    }
}