资源加载优化

yun-zuoyi
汪云昊 5 years ago
parent 4ef23b28e5
commit c5d6607760

@ -100,4 +100,11 @@ public interface ISystemResourceService {
* @return * @return
*/ */
SysLocaleResource getSysLocaleResourceByLanguage(int resourceType,String langCode,String langKey); SysLocaleResource getSysLocaleResourceByLanguage(int resourceType,String langCode,String langKey);
/**
*
* @param res
* @return
*/
Integer getSysLocaleResourceCount(SysLocaleResource res);
} }

@ -278,9 +278,10 @@ public class WhiteController extends CoreBaseController {
@GetMapping(value = "/white/find-language-code-soft-type") @GetMapping(value = "/find-language-code-soft-type")
@ApiOperation(value = "根据语言代码查询资源") @ApiOperation(value = "根据语言代码查询资源")
public ResultBean findSysLocaleResourceByLanguageCode(String languageCode,Integer softType){ public ResultBean findSysLocaleResourceByLanguageCode(String languageCode,Integer softType,
@RequestParam(defaultValue = "2") Integer needPlatformRes){
try { try {
startMultiService(); startMultiService();
@ -302,6 +303,12 @@ public class WhiteController extends CoreBaseController {
resourceMap = redisRes.getHashMap(CommonConstWords.REDIS_PREFIX_CACHE_LANGUAGE_WEB + ":" + languageCode + ":" + softType); resourceMap = redisRes.getHashMap(CommonConstWords.REDIS_PREFIX_CACHE_LANGUAGE_WEB + ":" + languageCode + ":" + softType);
} }
if(needPlatformRes.intValue() == CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()){
Map<Object, Object> platformResMap =
redisRes.getHashMap(CommonConstWords.REDIS_PREFIX_CACHE_LANGUAGE_WEB + ":" + languageCode + ":" + CommonEnumUtil.SOFT_TYPE.IMPP.getValue());;
}
return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setResultMap(resourceMap); return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setResultMap(resourceMap);
}catch(ImppBusiException busExcep){ }catch(ImppBusiException busExcep){
return ResultBean.fail(busExcep); return ResultBean.fail(busExcep);

@ -14,10 +14,11 @@ import org.slf4j.LoggerFactory;
import org.springframework.amqp.core.Message; import org.springframework.amqp.core.Message;
import org.springframework.amqp.rabbit.annotation.RabbitListener; import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import static cn.estsh.i3plus.platform.common.util.PlatformConstWords.QUEUE_IMPP_RESOURCE; import static cn.estsh.i3plus.platform.common.util.PlatformConstWords.QUEUE_IMPP_RESOURCE;
@ -28,7 +29,7 @@ import static cn.estsh.i3plus.platform.common.util.PlatformConstWords.QUEUE_IMPP
* @CreateDate : 19-8-23 3:12 * @CreateDate : 19-8-23 3:12
* @Modify: * @Modify:
**/ **/
@Component //@Component
public class SysLocalResourceQueue { public class SysLocalResourceQueue {
private static final Logger LOGGER = LoggerFactory.getLogger(SysLocalResourceQueue.class); private static final Logger LOGGER = LoggerFactory.getLogger(SysLocalResourceQueue.class);

@ -7,13 +7,11 @@ import cn.estsh.i3plus.core.api.iservice.busi.ISystemResourceService;
import cn.estsh.i3plus.platform.common.convert.ConvertBean; import cn.estsh.i3plus.platform.common.convert.ConvertBean;
import cn.estsh.i3plus.platform.common.util.CommonConstWords; import cn.estsh.i3plus.platform.common.util.CommonConstWords;
import cn.estsh.i3plus.platform.common.util.PlatformConstWords; import cn.estsh.i3plus.platform.common.util.PlatformConstWords;
import cn.estsh.i3plus.pojo.base.bean.ListPager;
import cn.estsh.i3plus.pojo.base.common.Pager;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.enumutil.ImppEnumUtil; import cn.estsh.i3plus.pojo.base.enumutil.ImppEnumUtil;
import cn.estsh.i3plus.pojo.platform.bean.SysConfig; import cn.estsh.i3plus.pojo.platform.bean.*;
import cn.estsh.i3plus.pojo.platform.bean.SysDictionary;
import cn.estsh.i3plus.pojo.platform.bean.SysLocaleLanguage;
import cn.estsh.i3plus.pojo.platform.bean.SysLocaleResource;
import cn.estsh.i3plus.pojo.platform.bean.SysMenu;
import cn.estsh.i3plus.pojo.platform.repository.SysConfigRepository; import cn.estsh.i3plus.pojo.platform.repository.SysConfigRepository;
import cn.estsh.i3plus.pojo.platform.repository.SysDictionaryRepository; import cn.estsh.i3plus.pojo.platform.repository.SysDictionaryRepository;
import cn.estsh.i3plus.pojo.platform.repository.SysLocaleLanguageRepository; import cn.estsh.i3plus.pojo.platform.repository.SysLocaleLanguageRepository;
@ -25,6 +23,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
@ -117,79 +116,100 @@ public class SystemInitService implements ISystemInitService {
@ApiOperation(value = "加载语言数据",notes = "加载语言数据") @ApiOperation(value = "加载语言数据",notes = "加载语言数据")
public void putAndLoadSysLocaleLanguage() { public void putAndLoadSysLocaleLanguage() {
// Redis 缓存 // Redis 缓存
if(type == ImppEnumUtil.SYS_CACHE_TYPE.REDIS.getValue()){ if (type == ImppEnumUtil.SYS_CACHE_TYPE.REDIS.getValue()) {
/** /**
* *
* code <lang : value> * code <langCode : value>
* code * code
*
* hashMap
* langCode < code : value>
*
* + hashMap
* langCode + softType < code : value>
*
*/ */
HashMap<String,HashMap<String,String>> resMap = new HashMap(); HashMap<String, HashMap<String, String>> resMap = new HashMap();
HashMap<String,String> lanMap = null; HashMap<String, String> lanMap = null;
HashMap<String,HashMap<String,String>> webLangMap = new HashMap<>(); HashMap<String, HashMap<String, String>> webLangMap = new HashMap<>();
HashMap<String,String> webResMap; HashMap<String, String> webResMap;
HashMap<String,HashMap<String,String>> webSoftLangMap = new HashMap<>(); HashMap<String, HashMap<String, String>> webSoftLangMap = new HashMap<>();
HashMap<String,String> webSoftResMap; HashMap<String, String> webSoftResMap;
String softResKey=null; String softResKey = null;
Integer resCount = systemResourceService.getSysLocaleResourceCount(null);
//语言数量 //语言数量
List<SysLocaleLanguage> langList = systemResourceService.listSysLocaleLanguage(null); List<SysLocaleLanguage> langList = systemResourceService.listSysLocaleLanguage(null);
LOGGER.info("【加载平台资源】共有{}个资源,{}种语言。", resCount, langList.size());
Pager pager = new Pager(resCount, 5000);
pager.setCurrentPage(0);
//查询所有资源 //查询所有资源
List<SysLocaleResource> resourceList = systemResourceService.listSysLocaleResource(null); ListPager<SysLocaleResource> resourceList;
LOGGER.info("【加载平台资源】共有{}个资源,{}种语言。", resourceList.size(), langList.size()); do {
for (SysLocaleResource res : resourceList) { pager.next();
//遍历资源放入map中 resourceList = systemResourceService.listSysLocaleResourceByPager(null, pager);
lanMap = resMap.get(res.getResourceKey()); resMap = new HashMap();
//判断是否已存在资源信息 webLangMap = new HashMap<>();
if (lanMap == null){ webSoftLangMap = new HashMap<>();
lanMap = new HashMap();
//将key/代码放入 for (SysLocaleResource res : resourceList.getObjectList()) {
resMap.put(res.getResourceKey(), lanMap); lanMap = resMap.get(res.getResourceKey());
} //判断是否已存在资源信息
//根据语言放入 if (lanMap == null) {
lanMap.put(res.getLanguageCode(), res.getResourceValue()); lanMap = new HashMap();
//将key/代码放入
resMap.put(res.getResourceKey(), lanMap);
}
//根据语言放入
lanMap.put(res.getLanguageCode(), res.getResourceValue());
// web 资源 // web 资源
if(!webLangMap.containsKey(res.getLanguageCode())){ if (!webLangMap.containsKey(res.getLanguageCode())) {
webLangMap.put(res.getLanguageCode(), new HashMap<>()); webLangMap.put(res.getLanguageCode(), new HashMap<>());
} }
// 放入资源信息 // 放入资源信息
webResMap = webLangMap.get(res.getLanguageCode()); webResMap = webLangMap.get(res.getLanguageCode());
webResMap.put(res.getResourceKey(), res.getResourceValue()); webResMap.put(res.getResourceKey(), res.getResourceValue());
// web 模块资源 // web 模块资源
softResKey = res.getLanguageCode() + ":" + res.getSoftTypeVal(); softResKey = res.getLanguageCode() + ":" + res.getSoftTypeVal();
if(!webSoftLangMap.containsKey(softResKey)){ if (!webSoftLangMap.containsKey(softResKey)) {
webSoftLangMap.put(softResKey, new HashMap<>()); webSoftLangMap.put(softResKey, new HashMap<>());
}
// 放入模块资源信息
webSoftResMap = webSoftLangMap.get(softResKey);
webSoftResMap.put(res.getResourceKey(), res.getResourceValue());
} }
// 放入模块资源信息
webSoftResMap = webSoftLangMap.get(softResKey);
webSoftResMap.put(res.getResourceKey(), res.getResourceValue());
}
for (String key : resMap.keySet()) { for (String key : resMap.keySet()) {
//放入缓存 //放入缓存
if(resMap.get(key) != null) { if (resMap.get(key) != null) {
redisRes.putHashMap(CommonConstWords.REDIS_PREFIX_CACHE_LANGUAGE + ":" + key, resMap.get(key), 0); redisRes.putHashMap(CommonConstWords.REDIS_PREFIX_CACHE_LANGUAGE + ":" + key, resMap.get(key), 0);
}
} }
}
for(String key : webLangMap.keySet()){ for (String key : webLangMap.keySet()) {
//放入缓存 //放入缓存
if(webLangMap.get(key) != null){ if (webLangMap.get(key) != null) {
redisRes.putHashMap(CommonConstWords.REDIS_PREFIX_CACHE_LANGUAGE_WEB + ":" + key,webLangMap.get(key),0); redisRes.putHashMap(CommonConstWords.REDIS_PREFIX_CACHE_LANGUAGE + ":" + key, webLangMap.get(key), 0);
redisRes.putHashMap(CommonConstWords.REDIS_PREFIX_CACHE_LANGUAGE_WEB + ":" + key, webLangMap.get(key), 0);
}
} }
}
for(String key : webSoftLangMap.keySet()){ for (String key : webSoftLangMap.keySet()) {
//放入缓存 //放入缓存
if(webSoftLangMap.get(key) != null){ if (webSoftLangMap.get(key) != null) {
redisRes.putHashMap(CommonConstWords.REDIS_PREFIX_CACHE_LANGUAGE_WEB + ":" + key,webSoftLangMap.get(key),0); redisRes.putHashMap(CommonConstWords.REDIS_PREFIX_CACHE_LANGUAGE_WEB + ":" + key, webSoftLangMap.get(key), 0);
}
} }
}
} LOGGER.info("【加载平台资源】加载中 {} / {} ", pager.getEndRow(), pager.getTotalRows());
} while (pager.hasNext());
LOGGER.info("【加载平台资源】加载完成。");
}
//加载语言数据 //加载语言数据
putAndLoadSysMenu(); putAndLoadSysMenu();
} }
@ -207,12 +227,11 @@ public class SystemInitService implements ISystemInitService {
List<SysLocaleResource> insertList = new ArrayList<>(); List<SysLocaleResource> insertList = new ArrayList<>();
Map<String,String> redisCacheMap = new HashMap<>(); Map<String,String> redisCacheMap = new HashMap<>();
if(resource != null && resources.size() > 0){ if(resources != null && resources.size() > 0){
resources.forEach(res -> resourceKeyMap.put(StringUtils.join(res.getLanguageCode(),res.getResourceKey()),res)); resources.forEach(res -> resourceKeyMap.put(StringUtils.join(res.getLanguageCode(),res.getResourceKey()),res));
} }
if(menus != null && menus.size() > 0 if(menus != null && menus.size() > 0 && languages != null && languages.size() > 0){
&& languages != null && languages.size() > 0){
for (SysLocaleLanguage language : languages) { for (SysLocaleLanguage language : languages) {
String redisLanguageKey = CommonConstWords.REDIS_PREFIX_CACHE_LANGUAGE_MENU + ":" + language.getLanguageCode(); String redisLanguageKey = CommonConstWords.REDIS_PREFIX_CACHE_LANGUAGE_MENU + ":" + language.getLanguageCode();

@ -154,4 +154,10 @@ public class SystemResourceService implements ISystemResourceService {
return null; return null;
} }
} }
@Override
public Integer getSysLocaleResourceCount(SysLocaleResource res) {
DdlPackBean packBean = CoreHqlPack.packHqlSysLocaleResource(res);
return sysLocaleResourceRDao.findByHqlWhereCount(packBean);
}
} }

Loading…
Cancel
Save