package cn.iocoder.yudao.module.iot.dal.mysql.recipe;

import java.util.*;
import java.util.stream.Collectors;

import com.alibaba.excel.util.StringUtils;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
//import cn.iocoder.yudao.framework.common.util.StringUtils;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.yudao.module.iot.dal.dataobject.recipe.RecipeDO;
import org.apache.ibatis.annotations.Mapper;
import cn.iocoder.yudao.module.iot.controller.admin.recipe.vo.RecipePageReqVO;

/**
 * 配方管理主 Mapper
 *
 * @author 内蒙必硕
 */
@Mapper
public interface RecipeMapper extends BaseMapperX<RecipeDO> {

    default PageResult<RecipeDO> selectPage(RecipePageReqVO reqVO) {
        // 1. 先创建查询条件对象
        LambdaQueryWrapperX<RecipeDO> queryWrapper = new LambdaQueryWrapperX<RecipeDO>()
                // 原有所有查询条件（保留不变）
                .likeIfPresent(RecipeDO::getName, reqVO.getName())
                .likeIfPresent(RecipeDO::getRecipeCode, reqVO.getRecipeCode())
                .eqIfPresent(RecipeDO::getRecipeType, reqVO.getRecipeType())
                .likeIfPresent(RecipeDO::getProductName, reqVO.getProductName())
                .likeIfPresent(RecipeDO::getMachineName, reqVO.getMachineName())
                .eqIfPresent(RecipeDO::getRecipeDesc, reqVO.getRecipeDesc())
                .eqIfPresent(RecipeDO::getIsEnable, reqVO.getIsEnable())
                .betweenIfPresent(RecipeDO::getCreateTime, reqVO.getCreateTime())
                .eqIfPresent(RecipeDO::getDataUnit, reqVO.getDataUnit())
                .orderByDesc(RecipeDO::getId);

        // 2. 新增：处理ids多选导出条件（和参考代码逻辑一致）
        if (StringUtils.isNotBlank(reqVO.getIds())) {
            // 将逗号分隔的ids字符串转为Long类型的List
            List<Long> idList = Arrays.stream(reqVO.getIds().split(","))
                    .map(String::trim) // 去除空格，避免空字符导致转换失败
                    .map(Long::valueOf) // 转为Long类型
                    .collect(Collectors.toList());
            // 添加idIn条件，只查询指定ids的记录
            queryWrapper.in(RecipeDO::getId, idList);
        }

        // 3. 执行分页查询
        return selectPage(reqVO, queryWrapper);
    }

}