package cn.estsh.i3plus.core.api.iservice.busi;

import cn.estsh.i3plus.pojo.base.bean.ListPager;
import cn.estsh.i3plus.pojo.base.common.Pager;
import cn.estsh.i3plus.pojo.platform.bean.SysDictionary;
import io.swagger.annotations.ApiOperation;

import java.util.List;

/**
 * @Description : 字典服务接口
 * @Reference :
 * @Author : yunhao
 * @Date : 2018-10-28 23:41
 * @Modify :
 **/
public interface ISysDictionaryService {

    /**
     * 添加字典
     * @param sysDictionary
     */
    @ApiOperation(value = "添加字典")
    void insertSysDictionary(SysDictionary sysDictionary);

    /**
     * 根据id删除字典
     * @param id
     */
    @ApiOperation(value = "根据id删除字典")
    void deleteSysDictionaryById(Long id);

    /**
     * 修改字典
     * @param sysDictionary
     */
    @ApiOperation(value = "修改字典")
    void updateSysDictionary(SysDictionary sysDictionary);

    /**
     * 查询所有字典信息
     * @return
     */
    @ApiOperation(value = "查询所有字典信息")
    List<SysDictionary> listSysDictionary();

    /**
     * 根据id查询字典信息
     * @param id
     * @return
     */
    @ApiOperation(value = "根据id查询字典信息")
    SysDictionary getSysDictionaryById(Long id);

    /**
     * 根据微服务与父级代码查询字典项
     * @param parentCode
     * @return
     */
    @ApiOperation(value = "根据微服务与父级代码查询字典项")
    List<SysDictionary> findSysDictionaryBySoftTypeAndParentCode(Integer softType,String parentCode);

    /**
     * 字典复杂查询，分页，排序
     * 默认查询非顶级字典
     */
    @ApiOperation(value = "字典复杂查询，分页，排序",notes = "默认查询非顶级字典")
    ListPager querySysDictionaryByPager(SysDictionary sysDictionary, Pager pager);

    /**
     * 查询顶级字典
     */
    @ApiOperation(value = "查询顶级字典")
    List<SysDictionary> findSysDictionaryByTop();

    /**
     * 批量删除字典
     * @param ids
     */
    @ApiOperation(value = "批量删除字典")
    void deleteSysDictionaryByIds(Long[] ids);

    /**
     * 检出文件名称是否符合系统规范
     * @param fileName
     * @return
     */
    @ApiOperation(value = "检出文件名称是否符合系统规范")
    boolean checkFileName(String fileName);

    /**
     * 根据父节点 以及当前节点CODE 获取字典信息
     * @param parentCode
     * @param code
     * @return
     */
    @ApiOperation(value = "根据父节点 以及当前节点CODE 获取字典信息")
    SysDictionary getSysDictionaryByParentCodeAndCode(String parentCode,String code);

    /**
     * 设置默认字典项
     * @param id
     */
    @ApiOperation(value = "设置默认字典项",notes = "根据id设置默认字典项")
    void updateSysDictionaryDefaultById(Long id);

    /**
     * 根据父节点 以及当前节点值 获取字典信息
     * @param parentCode 父级代码
     * @param value 字典值
     * @return
     */
    @ApiOperation(value = "根据父节点 以及当前节点值 获取字典信息")
    SysDictionary getSysDictionaryByParentCodeAndValue(String parentCode,String value);

    /**
     * 根据父节点 以及当前节点名称 获取字典信息
     * @param parentCode 父级代码
     * @param name 字典值
     * @return
     */
    @ApiOperation(value = "根据父节点 以及当前节点名称 获取字典信息")
    SysDictionary getSysDictionaryByParentCodeAndName(String parentCode,String name);

    /**
     * 根据模块查询顶级字典
     */
    @ApiOperation(value = "根据模块查询顶级字典")
    List<SysDictionary> findSysDictionaryByTopBySoftType(Integer softType);
}
