package com.ktg.mes.md.mapper;

import com.ktg.common.core.domain.entity.ItemType;
import org.apache.ibatis.annotations.Param;

import java.util.List;

public interface ItemTypeMapper {

    /**
     * 根据条件查询物料分类
     * @param itemType
     * @return
     */
    public List<ItemType> selectItemTypeList(ItemType itemType);

    /**
     * 根据主键查询物料分类
     * @param itemTypeId
     * @return
     */
    public ItemType selectItemTypeById(Long itemTypeId);

    /**
     * 根据分类名称查找分类
     * 在重名的情况下，支持按【上级分类】/【下级分类】的模式进行查找
     * @param itemTypeName
     * @return
     */
    public List<ItemType> selectItemTypeByName(String itemTypeName);

    /**
     * 根据父类ID查询是否有子类
     * @param parentTypeId
     * @return
     */
    public Integer hasChildByItemTypeId(Long parentTypeId);


    /**
     * 根据物料分类查询是否有对应的物料和产品
     * @param itemTypeId
     * @return
     */
    public Integer hasItemByItemTypeId(Long itemTypeId);

    /**
     * 根据父类查询所有子类
     * @param parentTypeId
     * @return
     */
    public List<ItemType> selectChildrenItemTypeById(Long parentTypeId);


    /**
     * 查询是否有可用的子类
     * @param parentTypeId
     * @return
     */
    public Integer selectNormalChildrenItemTypeById(Long parentTypeId);

    /**
     * 检查同一个父类下子类名称是否重复
     * @param itemTypeName
     * @param parentTypeId
     * @return
     */
    public ItemType checkItemTypeNameUnique(@Param("itemTypeName") String itemTypeName,@Param("parentTypeId") Long parentTypeId);

    /**
     * 检查同一个父类下子类编码是否重复
     * @param itemTypeCode
     * @param parentTypeId
     * @return
     */
    public ItemType checkItemTypeCodeUnique(@Param("itemTypeCode") String itemTypeCode,@Param("parentTypeId") Long parentTypeId);

    /**
     * 新增物料分类
     * @param itemType
     * @return
     */
    public Integer insertItemType(ItemType itemType);

    /**
     * 更新物料分类
     * @param itemType
     * @return
     */
    public Integer updateItemType(ItemType itemType);

    /**
     * 设置物料分类不可用
     * @param itemTypeIds
     */
    public void updateItemTypeStatusNormal(Long[] itemTypeIds);

    /**
     * 根据主键删除物料分类
     * @param itemTypeId
     * @return
     */
    public Integer deleteItemTypeById(Long itemTypeId);

    /**
     * 批量删除物料分类
     * @param itemTypeIds
     * @return
     */
    public Integer deleteItemTypeByIds(Long[] itemTypeIds);

}
