diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysLocaleResourceController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysLocaleResourceController.java index cee0da5..3389e40 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysLocaleResourceController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/busi/SysLocaleResourceController.java @@ -302,9 +302,10 @@ public class SysLocaleResourceController extends CoreBaseController { // 初始化数据,资源去重 Map itemMap = new HashMap<>(); String resourceKey; + String userName = AuthUtil.getSessionUser().getUserName(); for (SysLocaleResource localeResource : sysLocaleResourceList) { localeResource.setIsSystem(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); - ConvertBean.modelInitialize(localeResource, AuthUtil.getSessionUser()); + ConvertBean.serviceModelInitialize(localeResource, userName); resourceKey = localeResource.getResourceKey() + localeResource.getLanguageCode(); @@ -325,7 +326,7 @@ public class SysLocaleResourceController extends CoreBaseController { } // 重新加载资源 - systemInitService.putAndLoadSysLocaleLanguage(); +// systemInitService.putAndLoadSysLocaleLanguage(); return ResultBean.success("导入成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); } catch (ImppBusiException busExcep) { return ResultBean.fail(busExcep); @@ -415,29 +416,31 @@ public class SysLocaleResourceController extends CoreBaseController { LOGGER.info("增量导入 数据量 {}, ExcelTool耗时 {}", sysLocaleResourceList.size(), excelToolExecuteTime - startTime); // 数据去重并初始化 - Set resourceSet = new HashSet<>(); + + // 初始化数据,资源去重 + Map itemMap = new HashMap<>(); String resourceKey; - for (SysLocaleResource resource : sysLocaleResourceList) { - // 资源去重 - resourceKey = resource.getResourceKey() + resource.getLanguageCode(); - if(resourceSet.contains(resourceKey)){ - continue; - } else { - resourceSet.add(resourceKey); - } + String userName = AuthUtil.getSessionUser().getUserName(); + for (SysLocaleResource localeResource : sysLocaleResourceList) { // 初始化 - resource.setId(getResourceKey(resource.getResourceKey(),resource.getLanguageCode())); - resource.setIsSystem(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); - ConvertBean.modelInitialize(resource, AuthUtil.getSessionUser()); + localeResource.setId(getResourceKey(localeResource.getResourceKey(),localeResource.getLanguageCode())); + localeResource.setIsSystem(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()); + ConvertBean.serviceModelInitialize(localeResource, userName); + + resourceKey = localeResource.getResourceKey() + localeResource.getLanguageCode(); + + itemMap.put(resourceKey, localeResource); } + List importDataList = new ArrayList<>(itemMap.values()); + long deduplicationExecuteTime = System.currentTimeMillis(); LOGGER.info("数据去重完毕, 数据去重耗时 {}", deduplicationExecuteTime - excelToolExecuteTime); // 分批导入 int size = 1000; int i = 0; - for (List resourceList : ListUtils.partition(sysLocaleResourceList, size)) { + for (List resourceList : ListUtils.partition(importDataList, size)) { new Thread(){ @Override public void run() { @@ -487,6 +490,22 @@ public class SysLocaleResourceController extends CoreBaseController { } } + @GetMapping(value = "/update-cache") + @ApiOperation(value = "更新资源缓存") + public ResultBean updateResourceCache(){ + try { + // 重新加载资源 + systemInitService.putAndLoadSysLocaleLanguage(); + + return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch (ImppBusiException busExcep) { + return ResultBean.fail(busExcep); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + + } + private Long getResourceKey(String resKey, String languageCode) { if (redisRes.checkKey(CommonConstWords.REDIS_PREFIX_CACHE_LANGUAGE + ":" + resKey, languageCode)) { LOGGER.info("查询到已存在资源 {}:{}",resKey,languageCode); diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/SystemInitService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/SystemInitService.java index bd536f6..e8e879b 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/SystemInitService.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/base/SystemInitService.java @@ -232,14 +232,20 @@ public class SystemInitService implements ISystemInitService { if(resources != null && resources.size() > 0){ resources.forEach(res -> resourceKeyMap.put(StringUtils.join(res.getLanguageCode(),res.getResourceKey()),res)); } - + String redisLanguageKey; + SysLocaleResource res; if(menus != null && menus.size() > 0 && languages != null && languages.size() > 0){ for (SysLocaleLanguage language : languages) { - String redisLanguageKey = CommonConstWords.REDIS_PREFIX_CACHE_LANGUAGE_MENU + ":" + language.getLanguageCode(); + redisLanguageKey = CommonConstWords.REDIS_PREFIX_CACHE_LANGUAGE_MENU + ":" + language.getLanguageCode(); for (SysMenu menu : menus) { - SysLocaleResource res = resourceKeyMap.get( - StringUtils.join(language.getLanguageCode(),RESOURCE_PREFIX_MENU,menu.getName())); + // 多次校验 + res = resourceKeyMap.get(StringUtils.join(language.getLanguageCode(),RESOURCE_PREFIX_MENU,menu.getName())); + if(res == null){ + res = localeResourceService.getSysLocaleResourceByLanguageCodeAndResKey(language.getLanguageCode(), + RESOURCE_PREFIX_MENU + menu.getName()); + } + if(res == null){ // 当系统没有相应的功能权限资源时创建资源 res = new SysLocaleResource(); diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysLocaleResourceService.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysLocaleResourceService.java index 81ee7f8..b100e6a 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysLocaleResourceService.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/serviceimpl/busi/SysLocaleResourceService.java @@ -230,7 +230,7 @@ public class SysLocaleResourceService implements ISysLocaleResourceService { @Override public void deleteSysLocaleResourceAll() { - sysLocaleResourceRDao.deleteAll(); + sysLocaleResourceRDao.deleteAllInBatch(); } }