package com.bonus.material.ma.mapper;

import java.util.List;

import com.bonus.material.lease.domain.LeaseOutDetails;
import com.bonus.material.ma.domain.Type;
import com.bonus.material.ma.domain.vo.MaTypeConfigVo;
import com.bonus.material.ma.domain.vo.MaTypeVo;
import com.bonus.material.ma.domain.vo.MaTypeSelectVo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

/**
 * 物资类型Mapper接口
 * @author syruan
 */
@Mapper
public interface TypeMapper {

    List<Type> selectMaTypeList(String typeName);

    /**
     * 查询物资类型
     * 
     * @param typeId 物资类型主键
     * @return 物资类型
     */
    Type selectTypeByTypeId(Long typeId);

    /**
     * 根据level层级和typeID 查询父级ID
     * @param type
     */
    List<Integer> selectParentId(MaTypeVo type);

    /**
     * 根据物资仓库的ID查询物资类型列表
     * @param houseId 物资仓库ID
     */
    List<MaTypeSelectVo> selectMaTypeListByHouseId(Long houseId);

    List<MaTypeVo> getListByTypeName(@Param("typeId") Long typeId, @Param("type") MaTypeVo type);

    /**
     * 查询物资类型下拉树结构--根据上级ID
     * @param parentId 父级ID
     */
    List<MaTypeSelectVo> getMaTypeSelectVoListByParentId(@Param("parentId") Long parentId);

    /**
     * 物资类型树形结构

     */
    List<Type> selectMaTypeTree();

    /**
     * 查询物资类型列表
     * 
     * @param type 物资类型
     * @return 物资类型集合
     */
    List<Type> selectTypeList(Type type);

    List<Type> selectTypeList4Keeper(Type type);

    List<Type> selectTypeList4Repair(Type type);


    /**
     * 查询物资类型列表 -- 并且查询当前节点的父级节点名称
     *
     * @param typeListVo 物资类型
     * @return 物资类型集合
     */
    List<MaTypeVo> selectTypeListAndParent(Type typeListVo);


    /**
     * 查询四级物资类型列表 -- 并且查询当前节点的父级节点名称
     * @param type
     * @return
     */
    List<MaTypeConfigVo> selectFourLevelTypeListAndParent(Type type);

    /**
     * 查询三级物资类型列表 -- 并且查询当前节点的父级节点名称
     * @param type
     * @return
     */
    List<MaTypeConfigVo> selectThreeLevelTypeListAndParent(Type type);

    /**
     * 新增物资类型
     * 
     * @param type 物资类型
     * @return 结果
     */
    int insertType(Type type);

    /**
     * 修改物资类型
     * 
     * @param type 物资类型
     * @return 结果
     */
    int updateType(Type type);

    /**
     * 删除物资类型 -- 真实删除
     * 
     * @param typeId 物资类型主键
     * @return 结果
     */
    int deleteTypeByTypeId(Long typeId);

    /**
     * 删除物资类型 -- 逻辑删除
     *
     * @param typeId 物资类型主键
     * @return 结果
     */
    int logicDeleteTypeByTypeId(Long typeId);

    /**
     * 批量删除物资类型 -- 逻辑删除
     * 
     * @param typeIds 需要删除的数据主键集合
     * @return 结果
     */
    int logicDeleteTypeByTypeIds(Long[] typeIds);

    Type queryByNameAndParentId(@Param("typeName") String typeName, @Param("parentId") Long parentId);

    /**
     * 根据ID查询
     * @param typeId
     * @return
     */
    List<Type> selectById(Long typeId);

    /**
     * 减少 (ma_type 设备规格表)的库存数量
     */
    int updateMaTypeStockNum(@Param("record") LeaseOutDetails leaseOutDetails);

    Type selectByTypeId(@Param("record") LeaseOutDetails record);

    Type getMaType(Long typeId);

    int getCountOfCodeMachine(@Param("record") LeaseOutDetails record);

    int getMachineByCt(LeaseOutDetails record);
}
