package com.ibeetl.admin.core.service; import java.util.HashMap; import java.util.List; import java.util.Map; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.cache.annotation.Cacheable; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.ibeetl.admin.core.dao.CoreDictDao; import com.ibeetl.admin.core.entity.CoreDict; import com.ibeetl.admin.core.util.enums.DelFlagEnum; /** * 描述: 字典 service,包含常规字典和级联字典的操作。 * @author : xiandafu */ @Service @Transactional public class CoreDictService extends CoreBaseService { private static final Logger LOGGER = LoggerFactory.getLogger(CoreDictService.class); @Autowired private CoreDictDao dictDao; @Autowired CorePlatformService platformService; @Autowired CoreDictService self ; /** * 根据类型获取字典集合 * @param type 字典类型, * @return List */ @Cacheable(value = CorePlatformService.DICT_CACHE_TYPE) public List findAllByType(String type) { return dictDao.findAllList(type); } /** * 级联字典查询,必须提供一个字典类型 * @param group * @param value * @return */ @Cacheable(value = CorePlatformService.DICT_CACHE_CHILDREN) public List findAllByGroup(String type,String value) { List list = self.findAllByType(type); return _search(list,value); } /** * 级联字段下一级的字段列表 * @param parentValue * @return */ @Cacheable(value = CorePlatformService.DICT_CACHE_CHILDREN) public List findChildByParent(Long id) { return dictDao.findChildByParent(id); } @Cacheable(value = CorePlatformService.DICT_CACHE_VALUE) public CoreDict findCoreDict(String type,String value) { List list = self.findAllByGroup(type, value); if(list==null) { return null; } for(CoreDict dict:list) { if(dict.getValue().equals(value)) { return dict; } } return null; } /*通过名字反向查找数据字典,通常用于excel导入*/ public Map mapDictByName(String type){ List list = self.findAllByType(type); Map map = new HashMap(); for(CoreDict dict:list) { map.put(dict.getName(), dict); } return map; } /*递归查找*/ private List _search(List list,String value) { for(CoreDict dict:list) { if(dict.getValue().equals(value)) { return list; }else { List children = findChildByParent(dict.getId()); if(children.isEmpty()) { continue; }else { List ret = _search(children,value); if(ret!=null) { return ret; } } } } return null; } /** * 查询字段类型列表 * @return */ public List> findTypeList() { return dictDao.findTypeList(DelFlagEnum.NORMAL.getValue()); } public String findNameByType(String value){ return dictDao.findNameByType(value); } }