package com.vci.server.omd.qt.cache; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.Map; import org.apache.commons.lang3.StringUtils; import org.hibernate.SQLQuery; import org.hibernate.Session; import com.alibaba.fastjson.JSONObject; import com.vci.corba.omd.qtm.QTD; import com.vci.corba.omd.qtm.QTInfo; import com.vci.server.base.persistence.dao.HibernateSessionFactory; import com.vci.server.cache.CacheNames; import com.vci.server.cache.redis.RedisUtil; import com.vci.server.omd.qt.dao.impl.QTDaoImpl; import com.vci.server.omd.qt.entity.QTEntity; public class QTDServerCacheUtil { private DateFormat dFormat = new SimpleDateFormat("yyyy-MM-dd"); private static volatile QTDServerCacheUtil instance = null; public static void initCache() { clearCache(); getInstance().initQTD(); getInstance().initQt(); } public static void clearCache() { RedisUtil.getInstance().del(CacheNames.QTCACHE); RedisUtil.getInstance().del(CacheNames.QTDCACHE); } public static void setQTemplate(QTInfo qt) { if (qt == null) return; String jsonObj = JSONObject.toJSONString(qt); RedisUtil.getInstance().hset(CacheNames.QTCACHE, qt.qtName.toLowerCase(), jsonObj); } public static void setQTD(QTD qtd) { if (qtd == null) return; String jsonObj = JSONObject.toJSONString(qtd); RedisUtil.getInstance().hset(CacheNames.QTDCACHE, qtd.name.toLowerCase(), jsonObj); } public static void delQTemplate(String name) { if (StringUtils.isBlank(name)) return; RedisUtil.getInstance().hdel(CacheNames.QTCACHE, name.toLowerCase()); } public static void delQTD(String name) { if (StringUtils.isBlank(name)) return; RedisUtil.getInstance().hdel(CacheNames.QTDCACHE, name.toLowerCase()); } public static QTD getQTD(String name) { String attrObj = RedisUtil.getInstance().hget(CacheNames.QTDCACHE, name.toLowerCase()); if (StringUtils.isBlank(attrObj)) return null; return JSONObject.parseObject(attrObj, QTD.class); } public static boolean isExistsQTD(String name) { String json = RedisUtil.getInstance().hget(CacheNames.QTDCACHE, name.toLowerCase()); if (StringUtils.isBlank(json)) return false; return true; } public static QTD[] getBizTypeQTDs(String name) { Map map = RedisUtil.getInstance().hgetAll(CacheNames.QTDCACHE); List lstItem = new ArrayList(); String[] items = map.values().toArray(new String[0]); for (int i = 0; i < items.length; i++) { QTD qtd = JSONObject.parseObject(items[i], QTD.class); if (qtd.btmName.equalsIgnoreCase(name)) lstItem.add(qtd); } return lstItem.toArray(new QTD[0]); } public static QTD[] getLinkTypeQTDs(String name) { Map map = RedisUtil.getInstance().hgetAll(CacheNames.QTDCACHE); List lstItem = new ArrayList(); String[] items = map.values().toArray(new String[0]); for (int i = 0; i < items.length; i++) { QTD qtd = JSONObject.parseObject(items[i], QTD.class); if (qtd.linkTypeName.equalsIgnoreCase(name)) lstItem.add(qtd); } return lstItem.toArray(new QTD[0]); } public static QTD[] getAllQTD() { Map map = RedisUtil.getInstance().hgetAll(CacheNames.QTDCACHE); List lstItem = new ArrayList(); String[] items = map.values().toArray(new String[0]); for (int i = 0; i < items.length; i++) { lstItem.add(JSONObject.parseObject(items[i], QTD.class)); } return lstItem.toArray(new QTD[0]); } public static QTInfo getQTemplate(String name) { String attrObj = RedisUtil.getInstance().hget(CacheNames.QTCACHE, name.toLowerCase()); if (StringUtils.isBlank(attrObj)) return null; return JSONObject.parseObject(attrObj, QTInfo.class); } public static QTInfo[] getObjTypeQTs(String name) { Map map = RedisUtil.getInstance().hgetAll(CacheNames.QTCACHE); List lstItem = new ArrayList(); String[] items = map.values().toArray(new String[0]); for (int i = 0; i < items.length; i++) { lstItem.add(JSONObject.parseObject(items[i], QTInfo.class)); } return lstItem.toArray(new QTInfo[0]); } public static QTInfo[] getAllQTemplate() { Map allVols = RedisUtil.getInstance().hgetAll(CacheNames.QTCACHE); List lstItem = new ArrayList(); String[] items = allVols.values().toArray(new String[0]); for (int i = 0; i < items.length; i++) { lstItem.add(JSONObject.parseObject(items[i], QTInfo.class)); } return lstItem.toArray(new QTInfo[0]); } public static boolean isExistsQT(String name) { String json = RedisUtil.getInstance().hget(CacheNames.QTCACHE, name.toLowerCase()); if (StringUtils.isBlank(json)) return false; return true; } private QTDServerCacheUtil() { } private static QTDServerCacheUtil getInstance() { if (instance == null) { synchronized (QTDServerCacheUtil.class) { if (instance == null) { instance = new QTDServerCacheUtil(); } } } return instance; } private void initQTD() { String sql = "select * from PL_QTEMPLATEDEF t where 1=1"; try{ Session session = HibernateSessionFactory.getSession(); SQLQuery query = session.createSQLQuery(sql); List list = query.list(); for(int i = 0; i < list.size(); i++){ QTD qtd = new QTD(); Object[] obj = (Object[]) list.get(i); qtd.name = (String)obj[0]; qtd.creator = (String)obj[1]; qtd.createTime = ((Date)obj[2]).getTime(); qtd.btmName = (String)obj[3] == null ? "" : (String)obj[3]; String abNames = ((String)obj[4]); if(abNames == null || abNames.equals("")){ qtd.abNames = new String[0]; }else{ qtd.abNames = ((String)obj[4]).split(","); } qtd.linkTypeName = (String)obj[5] == null ? "" : (String)obj[5]; setQTD(qtd); } }catch(Throwable e){ e.printStackTrace(); //throw getLocalVciError("PLMQTD-00003", e); } } private void initQt() { String hsql = "from QTEntity"; List qtEntityList = new QTDaoImpl().findEntities(hsql); //qts = new QTInfo[qtEntityList.size()]; for (int i = 0; i < qtEntityList.size(); i++) { QTInfo wapper = getQTWrapper(qtEntityList.get(i)); setQTemplate(wapper); } } private QTInfo getQTWrapper(QTEntity qtEntity){ if(qtEntity == null){ return null; } QTInfo qtWrapper = new QTInfo(); qtWrapper.qtName = qtEntity.getQtName(); qtWrapper.btmName = qtEntity.getBtmName(); qtWrapper.creator = qtEntity.getCreator(); qtWrapper.createTime = qtEntity.getCreateTime().getTime(); qtWrapper.levelFlag = qtEntity.getLevelFlag(); String qtUIText = qtEntity.getQtUIText(); qtWrapper.qtUIText = (qtUIText == null ? "" : qtUIText); String qtText = qtEntity.getQtText(); qtWrapper.qtText = (qtText == null ? "" : qtText); return qtWrapper; } }