package com.ots.project.tool; import cn.hutool.cache.Cache; import cn.hutool.cache.CacheUtil; import com.ots.project.exam.domain.TLibraryCode; import com.ots.project.exam.service.impl.TLibraryCodeServiceImpl; import lombok.extern.slf4j.Slf4j; import java.util.List; import java.util.Objects; import java.util.stream.Collectors; /** * 缓存报告字典 */ @Slf4j public class CacheServiceFactory { private static final String MAQ_REPORT_LIBRARY = "MAQ_REPORT_LIBRARY"; volatile private static CacheServiceFactory instance; private static Cache> lruCache = CacheUtil.newLRUCache(5); private CacheServiceFactory() { } /** * 获取缓存实例 * @return */ public static CacheServiceFactory getInstance() { if (Objects.isNull(instance)) { synchronized (CacheServiceFactory.class) { if (Objects.isNull(instance)) { instance = new CacheServiceFactory(); } } } return instance; } /** * 清除缓存 */ public void reLoad() { lruCache.clear(); lruCache.put(MAQ_REPORT_LIBRARY, null); } /** * 获取所有报告缓存字典 * @return */ public List getMAQReportLibrary() { List maqReportLibraries = lruCache.get(MAQ_REPORT_LIBRARY); if (Objects.isNull(maqReportLibraries)) { maqReportLibraries = loadExcel(); } return maqReportLibraries; } /** * 根据报告字典ID获取报告字典 * @param coreId * @return */ public TLibraryCode getMAQReportLibrary(String coreId) { List maqReportLibrary = getMAQReportLibrary(); TLibraryCode library = null; try { List collect = maqReportLibrary.stream().filter(item -> Objects.equals(item.getLibraryCode(), coreId)).collect(Collectors.toList()); if (collect.isEmpty()) { log.error("未加载到Report_Library 参数coreId={} ", coreId); return library; } library = collect.get(0); } catch (Exception ex) { log.error("加载MAQ_Report_Library模板参数coreId={} 失败:{}", coreId, ex); } return library; } /** * 获取所有报告字典 加入缓存 * @return */ private List loadExcel() { TLibraryCodeServiceImpl itLibraryCodeService = AppUtil.getObject("iTLibraryCodeService", TLibraryCodeServiceImpl.class); TLibraryCode libraryCode = new TLibraryCode(); List userList = itLibraryCodeService.selectTLibraryCodeList(libraryCode); if (Objects.isNull(userList) && userList.size() == 0) { return null; } lruCache.put(MAQ_REPORT_LIBRARY, userList); return userList; } }