package com.vci.server.portal.cache; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.apache.commons.lang3.StringUtils; import com.vci.server.cache.redis.RedisUtil; import com.vci.server.portal.entity.PLTabPageEntity; import com.vci.server.portal.service.PLTabPageEntityService; import com.vci.server.portal.tools.ServerTool; import com.alibaba.fastjson.JSONObject; import com.vci.corba.common.VCIError; import com.vci.corba.portal.data.PLTabPage; public class TabPageCacheUtil extends UICacheBaseUtil{ private static volatile TabPageCacheUtil instance = null; public static void initCache() { try { getInstance().initPLTabPage(); } catch (Throwable e) { e.printStackTrace(); } } private TabPageCacheUtil() { super(UICacheNames.TABPAGE, PLTabPage.class); } public static TabPageCacheUtil getInstance() { if (instance == null) { synchronized (TabPageCacheUtil.class) { if (instance == null) { instance = new TabPageCacheUtil(); } } } return instance; } @Override public void setObject(PLTabPage obj) { if (obj == null) return; String jsonObj = JSONObject.toJSONString(obj); RedisUtil.getInstance().hset(getName(), obj.plOId, jsonObj); } @Override public PLTabPage[] getObjects() { List list = getObjectList(); return list.toArray(new PLTabPage[0]); } @Override public void delObject(PLTabPage obj) { if (obj == null || StringUtils.isBlank(obj.plOId)) return; RedisUtil.getInstance().hdel(getName(), obj.plOId); } private void initPLTabPage() throws Throwable{ RedisUtil.getInstance().del(getName()); List list = PLTabPageEntityService.getInstance().getAllTabPages(); Map> mapTemp = new HashMap>(); for(PLTabPageEntity pageEnt : list){ PLTabPage tabPage = ServerTool.getPLTabPage(pageEnt); if(tabPage != null){ setObject(tabPage); } List lstTemp = mapTemp.get(tabPage.plContextOId); if (lstTemp == null) { lstTemp = new ArrayList(); mapTemp.put(tabPage.plContextOId, lstTemp); } lstTemp.add(tabPage.plOId); } for (String key : mapTemp.keySet()) { List lstTemp = mapTemp.get(key); RedisUtil.getInstance().hset(getName(), "MAP-" + key, String.join(";", lstTemp)); } } public PLTabPage[] getTabPages(String contextId, int areaType) throws VCIError { String temp = RedisUtil.getInstance().hget(getName(), "MAP-" + contextId); if (StringUtils.isBlank(temp)) return new PLTabPage[0]; String oids[] = temp.split(";"); List lstObj = new ArrayList(); for (String oid : oids) { PLTabPage ap = getObject(oid); if (ap != null && (areaType < 0 || areaType == ap.plAreaType)) lstObj.add(ap); } return lstObj.toArray(new PLTabPage[0]); } }