package com.hdkj.lt.core.sys.service;

import com.hdkj.lt.core.sys.model.po.DicSingle;
import com.hdkj.lt.core.sys.model.vo.DicLevelTreeVo;
import com.hdkj.lt.core.sys.model.vo.DicVo;
import com.hdkj.lt.core.sys.model.vo.DictVo;

import java.util.List;
import java.util.Map;

/**
 * @Description:
 * @Author: wenhao
 * @Create: 2024/04/03 13:40
 * @Version: 1.0
 */
public interface ISysDictService {

    /**
     * 所有数据字典信息放入缓存
     */
    void putAllToCache();

    /**
     * 根据字典编码获取字典缓存信息
     */
    Map<String, Map<String, String>> getCacheByTypeNames(String... typeNames);

    /**
     * 根据字典值获取字典描述
     *
     * @param typeName 字典类型
     * @param value    字典值
     * @return 字典描述
     */
    String getLabelByValue(String typeName, String value);

    /**
     * 接口获取字典信息根据字典编码
     *
     * @param typeNames
     * @return
     */
    List<DictVo> getDictVosByTypeNames(String... typeNames);

    /**
     * 获取字典描述
     *
     * @param dictMap
     * @param dictType
     * @param dictValue
     * @return
     */
    String getDictLabel(Map<String, Map<String, String>> dictMap, String dictType, String dictValue);

    /**
     * 接口查询多级字典根据字典编码
     *
     * @param typeName
     * @return
     */
    List<DicLevelTreeVo> getLevelDictByTypeName(String typeName);

    /**
     * 将拼接的字典值转换为字典描述
     *
     * @param valueStr 拼接的字典值
     * @param splitStr 拼接符号
     * @param dictMap  字典Map集合
     * @return 拼接的字典描述
     */
    String valuesConvertLabels(String valueStr, String splitStr, Map<String, String> dictMap);

    /**
     * 将其他拼接字典值描述转换英文分号拼接
     *
     * @param valueStr
     * @param typeName
     * @param splitStr
     * @return
     */
    String valuesConvertLabels(String valueStr, String typeName, String splitStr);

    /**
     * 字典值排序后的首个字典值
     *
     * @param dictSingles
     * @param value
     * @return
     */
    Integer dictValueToSort(List<DicSingle> dictSingles, String value);

    /**
     * 根据字典值编码获取字典名称为key的字典值键值对对象
     *
     * @param typeNames
     * @return
     */
    Map<String, Map<String, String>> getDictVosByTypeNamesLabelToKey(String... typeNames);

    /**
     * 字典（设备运行状态）
     */
    List<DictVo> getPsrState(String zxbType);

    /**
     * 根据单个类型名称查询字典集合
     *
     * @param typeName 字典类型名称
     * @return 字典集合
     */
    List<DicVo> getDicListByType(String typeName);
}
