package com.microservices.pms.product.mapper;

import com.microservices.pms.product.domain.PmsProductRequirement;
import com.microservices.pms.product.domain.vo.PmsProductRequirementBatchUpdateVo;
import com.microservices.pms.product.domain.vo.ProductReqSpecsSearchVo;
import com.microservices.pms.product.domain.vo.ProductUserReqSearchVo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 产品需求Mapper接口
 * 
 * @author otto
 * @date 2023-10-10
 */
@Mapper
public interface PmsProductRequirementMapper
{
    /**
     * 查询产品需求
     * 
     * @param id 产品需求主键
     * @return 产品需求
     */
    public PmsProductRequirement selectPmsProductRequirementById(Long id);

    /**
     * 查询产品需求列表
     * 
     * @param pmsProductRequirement 产品需求
     * @return 产品需求集合
     */
    public List<PmsProductRequirement> selectPmsProductRequirementList(PmsProductRequirement pmsProductRequirement);

    /**
     * 新增产品需求
     * 
     * @param pmsProductRequirement 产品需求
     * @return 结果
     */
    public int insertPmsProductRequirement(PmsProductRequirement pmsProductRequirement);

    /**
     * 修改产品需求
     * 
     * @param pmsProductRequirement 产品需求
     * @return 结果
     */
    public int updatePmsProductRequirement(PmsProductRequirement pmsProductRequirement);

    /**
     * 删除产品需求
     * 
     * @param id 产品需求主键
     * @return 结果
     */
    public int deletePmsProductRequirementById(Long id);

    /**
     * 批量删除产品需求
     * 
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    public int deletePmsProductRequirementByIds(Long[] ids);

    /**
     * 查询需求数量
     *
     * @param pmsProductRequirementSearch
     * @return
     */
    Integer selectPmsProductRequirementCount(PmsProductRequirement pmsProductRequirementSearch);

    /**
     * 获取当前产品下需求的最大索引值
     * @param pmsProductIdentifier 产品标识
     * @return 最大索引值
     */
    Long selectPmsProductRequirementMaxIndexByProductIdentifier(@Param("pmsProductIdentifier") String pmsProductIdentifier);

    /**
     * 根据产品标识和需求索引获取产品需求
     * @param productIdentifier 产品标识
     * @param index 索引
     * @return 产品需求
     */
    PmsProductRequirement selectPmsProductRequirementByProductIdentifierAndIndex(@Param("productIdentifier") String productIdentifier, @Param("index") Long index);

    /**
     * 批量更新产品需求
     *
     * @param pmsProductRequirementBatchUpdateVo 批量更新内容
     * @return 更新结果
     */
    int batchUpdatePmsProductRequirement(PmsProductRequirementBatchUpdateVo pmsProductRequirementBatchUpdateVo);

    /**
     * 查找需求列表包含的产品标识列表
     *
     * @param idList 需求Id列表
     * @return 产品标识列表
     */
    List<String> selectProductIdentifierListInRequirementIdList(@Param("idList") List<Long> idList);

    List<PmsProductRequirement> selectUserReqList(ProductUserReqSearchVo productUserReqSearchVo);

    List<PmsProductRequirement> selectReqSpecsList(ProductReqSpecsSearchVo productReqSpecsSearchVo);
}
