From f9437464f007fff664a0b7e5f14e391f35bdf84a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B1=AA=E4=BA=91=E6=98=8A?= Date: Fri, 3 Apr 2020 17:53:14 +0800 Subject: [PATCH] =?UTF-8?q?=E7=BC=BA=E5=A4=B1=E8=B5=84=E6=BA=90=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../iservice/busi/ISysLocaleLanguageService.java | 2 +- .../iservice/busi/ISysLocaleResourceService.java | 14 ++ .../controller/base/WhiteController.java | 15 ++ .../busi/SysLocaleResourceController.java | 166 ++++++++++++++++++++- .../serviceimpl/busi/SysLocaleResourceService.java | 116 +++++++++++++- 5 files changed, 309 insertions(+), 4 deletions(-) diff --git a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysLocaleLanguageService.java b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysLocaleLanguageService.java index 6ce7a5c..a7515d2 100644 --- a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysLocaleLanguageService.java +++ b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysLocaleLanguageService.java @@ -26,7 +26,7 @@ public interface ISysLocaleLanguageService { void deleteSysLocaleLanguageById(Long id); @ApiOperation(value = "查询全部系统语言",notes = "查询全部系统语言") - List listSysLocaleLanguage(); + List listSysLocaleLanguage(); @ApiOperation(value = "系统语言复杂查询,分页,排序",notes = "系统语言复杂查询,分页,排序") ListPager querySysLocaleLanguageByPager(SysLocaleLanguage sysLocaleLanguage, Pager pager); diff --git a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysLocaleResourceService.java b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysLocaleResourceService.java index 8db93f2..40305bd 100644 --- a/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysLocaleResourceService.java +++ b/modules/i3plus-core-api/src/main/java/cn/estsh/i3plus/core/api/iservice/busi/ISysLocaleResourceService.java @@ -2,6 +2,7 @@ package cn.estsh.i3plus.core.api.iservice.busi; import cn.estsh.i3plus.pojo.base.bean.ListPager; import cn.estsh.i3plus.pojo.base.common.Pager; +import cn.estsh.i3plus.pojo.model.platform.MissResourceModel; import cn.estsh.i3plus.pojo.platform.bean.SysLocaleResource; import cn.estsh.i3plus.pojo.platform.bean.SysMenu; import io.swagger.annotations.ApiOperation; @@ -58,4 +59,17 @@ public interface ISysLocaleResourceService { @ApiOperation(value = "删除所有资源") void deleteSysLocaleResourceAll(); + + /***************************** 缺失资源管理 ******************************/ + + List listMissResourceModel(); + + MissResourceModel saveMissResourceModel(MissResourceModel missResourceModel); + + void updateMissResourceModelIsValidByKeys(String[] keys, Integer isValid); + + void doCleanInValidMissResource(); + + void doConversionMissResourceByKeys(String[] keys); + } diff --git a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/WhiteController.java b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/WhiteController.java index 37fbb61..7efeb2b 100644 --- a/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/WhiteController.java +++ b/modules/i3plus-core-apiservice/src/main/java/cn/estsh/i3plus/core/apiservice/controller/base/WhiteController.java @@ -514,4 +514,19 @@ public class WhiteController extends CoreBaseController { return ResultBean.fail(e).setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); } } + + @PostMapping(value = "/miss-resource/get") + @ApiOperation(value = "根据条件分页查询账号信息", notes = "根据条件分页查询账号信息") + public ResultBean getMissResourceByKey(String key,String soft){ + try { + LocaleUtils.saveMissResource(key, AuthUtil.getSessionLanguage().toString(), CommonEnumUtil.SOFT_TYPE.descOf(soft), + CommonEnumUtil.SYS_LOCALE_RESOURCE_TYPE.MISSING.getValue(), + CommonEnumUtil.MiSS_RESOURCE_SOURCE.SERVER.getValue()); + return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch (ImppBusiException busExcep) { + return ResultBean.fail(busExcep); + } catch (Exception e) { + return ResultBean.fail(e).setCode(ImppExceptionEnum.SYSTEM_EXCEPTION.getCode()); + } + } } 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 219f124..d6d63db 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 @@ -2,6 +2,7 @@ package cn.estsh.i3plus.core.apiservice.controller.busi; import cn.estsh.i3plus.core.api.iservice.base.ISystemInitService; import cn.estsh.i3plus.core.api.iservice.busi.ISysFileService; +import cn.estsh.i3plus.core.api.iservice.busi.ISysLocaleLanguageService; import cn.estsh.i3plus.core.api.iservice.busi.ISysLocaleResourceService; import cn.estsh.i3plus.platform.common.convert.ConvertBean; import cn.estsh.i3plus.platform.common.exception.BaseImppException; @@ -15,7 +16,9 @@ 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.ResourceEnumUtil; +import cn.estsh.i3plus.pojo.model.platform.MissResourceModel; import cn.estsh.i3plus.pojo.platform.bean.SysFile; +import cn.estsh.i3plus.pojo.platform.bean.SysLocaleLanguage; import cn.estsh.i3plus.pojo.platform.bean.SysLocaleResource; import cn.estsh.impp.framework.base.controller.CoreBaseController; import cn.estsh.impp.framework.boot.auth.AuthUtil; @@ -41,6 +44,7 @@ import javax.servlet.http.HttpServletResponse; import java.io.*; import java.nio.charset.StandardCharsets; import java.util.*; +import java.util.stream.Collectors; /** * @Description :系统语言资源服务 @@ -62,6 +66,9 @@ public class SysLocaleResourceController extends CoreBaseController { private ISysLocaleResourceService sysLocaleResourceService; @Autowired + private ISysLocaleLanguageService sysLocaleLanguageService; + + @Autowired private ISystemInitService systemInitService; @Autowired @@ -505,7 +512,6 @@ public class SysLocaleResourceController extends CoreBaseController { } catch (Exception e) { return ImppExceptionBuilder.newInstance().buildExceptionResult(e); } - } private Long getResourceKey(String resKey, String languageCode) { @@ -518,4 +524,162 @@ public class SysLocaleResourceController extends CoreBaseController { } return null; } + + /************************* 缺失资源管理 **********************/ + + @GetMapping(value = "/miss/list") + @ApiOperation(value = "缺失资源列表") + public ResultBean listMissResource(){ + try { + List missResourceModelList = sysLocaleResourceService.listMissResourceModel(); + + return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setResultList(missResourceModelList); + } catch (ImppBusiException busExcep) { + return ResultBean.fail(busExcep); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @PutMapping(value = "/miss/update") + @ApiOperation(value = "更新缺失资源信息") + public ResultBean listMissResource(MissResourceModel missResourceModel){ + try { + missResourceModel = sysLocaleResourceService.saveMissResourceModel(missResourceModel); + + return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()).setResultObject(missResourceModel); + } catch (ImppBusiException busExcep) { + return ResultBean.fail(busExcep); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @PutMapping(value = "/miss/batch-update-valid") + @ApiOperation(value = "更新缺失资源有效状态") + public ResultBean updateMissResourceIsValidByKeys(String[] keys,Integer valid){ + try { + sysLocaleResourceService.updateMissResourceModelIsValidByKeys(keys, valid); + + return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch (ImppBusiException busExcep) { + return ResultBean.fail(busExcep); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @DeleteMapping(value = "/miss/clean-invalid") + @ApiOperation(value = "更新缺失资源有效状态") + public ResultBean cleanMissResourceByInvalid(){ + try { + sysLocaleResourceService.doCleanInValidMissResource(); + + return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch (ImppBusiException busExcep) { + return ResultBean.fail(busExcep); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @PostMapping(value = "/miss/batch-conversion") + @ApiOperation(value = "批量转换缺失资源") + public ResultBean doBatchConversionMissResource(String[] keys){ + try { + sysLocaleResourceService.doConversionMissResourceByKeys(keys); + + return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch (ImppBusiException busExcep) { + return ResultBean.fail(busExcep); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } + + @GetMapping(value = "/miss/export") + @ApiOperation(value = "导出缺失资源") + public ResultBean exportMissResource(HttpServletResponse response){ + try { + List missResourceModelList = sysLocaleResourceService.listMissResourceModel(); + Map langCodeMap = sysLocaleLanguageService.listSysLocaleLanguage() + .stream() + .collect( + Collectors.toMap( + SysLocaleLanguage::getLanguageCode, + SysLocaleLanguage::getLanguageName + ) + ); + + List sysLocaleResourceList = new ArrayList<>(missResourceModelList.size()); + SysLocaleResource sysLocaleResource; + for (MissResourceModel resourceModel : missResourceModelList) { + sysLocaleResource = new SysLocaleResource(); + sysLocaleResource.setSoftType(resourceModel.getSoftType()); + sysLocaleResource.setLanguageCode(resourceModel.getLanguageCode()); + sysLocaleResource.setLanguageNameRdd(langCodeMap.get(resourceModel.getLanguageCode())); + sysLocaleResource.setResourceType(resourceModel.getResourceType()); + sysLocaleResource.setResourceKey(resourceModel.getResourceKey()); + sysLocaleResource.setResourceValue(resourceModel.getResourceValue()); + sysLocaleResource.setIsSystem(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); + + sysLocaleResourceList.add(sysLocaleResource); + } + + ExcelTool excelTool = new ExcelTool(entityManager, redisRes); + String fileName = "locale_" + System.currentTimeMillis() + ".xls"; + + File file = new File(fileName); + if (file.createNewFile()) { + throw ImppExceptionBuilder.newInstance() + .setSystemID(CommonEnumUtil.SOFT_TYPE.CORE.getCode()) + .setErrorCode(ImppExceptionEnum.IO_EXCEPTION_FILE.getCode()) + .setErrorDetail("临时文件创建失败!") + .build(); + } + File excle = excelTool.exportData(file, sysLocaleResourceList, SysLocaleResource.class, new String[]{ + "resourceType", "languageCode", "languageNameRdd", "resourceKey", "resourceValue", "softType" + }); + + String userAgent = request.getHeader("User-Agent"); + // 针对IE或者以IE为内核的浏览器: + if (userAgent.contains("MSIE") || userAgent.contains("Trident")) { + fileName = java.net.URLEncoder.encode(fileName, "UTF-8"); + } else { + // 非IE浏览器的处理: + fileName = new String(fileName.getBytes(StandardCharsets.UTF_8), StandardCharsets.ISO_8859_1); + } + + response.setContentType("application/force-download"); // 设置强制下载不打开 + response.addHeader("Content-Disposition", "attachment;fileName=" + fileName); // 设置文件名 + response.addHeader("Content-type", FileContentTypeTool.getContentType(".xls")); // 设置文件名 + + BufferedInputStream bis = null; + InputStream targetStream = null; + try { + targetStream = new DataInputStream(new FileInputStream(excle)); + bis = new BufferedInputStream(targetStream); + OutputStream os = response.getOutputStream(); + byte[] buffer = new byte[1024]; + int i = bis.read(buffer); + while (i != -1) { + os.write(buffer, 0, i); + i = bis.read(buffer); + } + } finally { + if (bis != null) { + bis.close(); + } + if (targetStream != null) { + targetStream.close(); + } + } + + return ResultBean.success("操作成功").setCode(ResourceEnumUtil.MESSAGE.SUCCESS.getCode()); + } catch (ImppBusiException busExcep) { + return ResultBean.fail(busExcep); + } catch (Exception e) { + return ImppExceptionBuilder.newInstance().buildExceptionResult(e); + } + } } 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 fc54773..5265500 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 @@ -3,6 +3,7 @@ package cn.estsh.i3plus.core.apiservice.serviceimpl.busi; import cn.estsh.i3plus.core.api.iservice.busi.ISysLocaleResourceService; import cn.estsh.i3plus.platform.common.exception.ImppExceptionEnum; import cn.estsh.i3plus.platform.common.tool.BeanCopyTool; +import cn.estsh.i3plus.platform.common.tool.JsonUtilTool; import cn.estsh.i3plus.platform.common.tool.SerializeTool; import cn.estsh.i3plus.platform.common.util.CommonConstWords; import cn.estsh.i3plus.pojo.base.bean.DdlPackBean; @@ -10,6 +11,7 @@ import cn.estsh.i3plus.pojo.base.bean.ListPager; import cn.estsh.i3plus.pojo.base.common.Pager; import cn.estsh.i3plus.pojo.base.common.PagerHelper; import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil; +import cn.estsh.i3plus.pojo.model.platform.MissResourceModel; import cn.estsh.i3plus.pojo.platform.bean.SysLocaleLanguage; import cn.estsh.i3plus.pojo.platform.bean.SysLocaleResource; import cn.estsh.i3plus.pojo.platform.bean.SysMenu; @@ -20,6 +22,7 @@ import cn.estsh.impp.framework.boot.auth.AuthUtil; import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder; import cn.estsh.impp.framework.boot.util.ImppRedis; import cn.estsh.impp.framework.boot.util.ValidatorBean; +import com.alibaba.fastjson.JSON; import io.swagger.annotations.ApiOperation; import org.apache.commons.lang3.StringUtils; import org.slf4j.Logger; @@ -28,8 +31,8 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import javax.annotation.Resource; -import java.util.List; -import java.util.Map; +import java.util.*; +import java.util.stream.Collectors; import static cn.estsh.i3plus.platform.common.util.CommonConstWords.RESOURCE_PREFIX_MENU; @@ -228,4 +231,113 @@ public class SysLocaleResourceService implements ISysLocaleResourceService { sysLocaleResourceRDao.deleteAllInBatch(); } + @Override + public List listMissResourceModel() { + List listStr = redisRes.scan(CommonConstWords.REDIS_PREFIX_CACHE_NO_RES + "*"); + MissResourceModel missResourceModel = null; + List missResourceModelList = new ArrayList<>(listStr.size()); + + // 更新状态 + for (Object missResourceStr : listStr) { + if (missResourceStr == null || StringUtils.isBlank(missResourceStr.toString())) { + continue; + } + missResourceModel = JsonUtilTool.decode(missResourceStr.toString(), MissResourceModel.class); + // 转换失败 + if(missResourceModel==null){ + continue; + } + missResourceModelList.add(missResourceModel); + } + return missResourceModelList; + } + + @Override + public MissResourceModel saveMissResourceModel(MissResourceModel missResourceModel) { + redisRes.putObject(missResourceModel.getKey(), JSON.toJSONString(missResourceModel), -1); + return missResourceModel; + } + + @Override + public void updateMissResourceModelIsValidByKeys(String[] keys, Integer valid) { + List missResourceStrList = redisRes.findObject(Arrays.asList(keys)); + MissResourceModel missResourceModel = null; + List missResourceModelList = new ArrayList<>(missResourceStrList.size()); + + // 更新状态 + for (Object missResourceStr : missResourceStrList) { + if (missResourceStr == null || StringUtils.isBlank(missResourceStr.toString())) { + continue; + } + missResourceModel = JsonUtilTool.decode(missResourceStr.toString(), MissResourceModel.class); + missResourceModel.setIsValid(valid); + missResourceModelList.add(missResourceModel); + } + + // 存入redis + for (MissResourceModel resourceModel : missResourceModelList) { + redisRes.putObject(resourceModel.getKey(), JsonUtilTool.encode(resourceModel)); + } + } + + @Override + public void doCleanInValidMissResource() { + List listStr = redisRes.scan(CommonConstWords.REDIS_PREFIX_CACHE_NO_RES + "*"); + MissResourceModel missResourceModel = null; + List cleanKeys = new ArrayList<>(listStr.size()); + + // 更新状态 + for (Object missResourceStr : listStr) { + if (missResourceStr ==null || StringUtils.isBlank(missResourceStr.toString())) { + continue; + } + missResourceModel = JsonUtilTool.decode(missResourceStr.toString(), MissResourceModel.class); + + if (missResourceModel != null && missResourceModel.getIsValid() != null + && CommonEnumUtil.IS_VAILD.INVAILD.getValue() == missResourceModel.getIsValid()) { + cleanKeys.add(missResourceModel.getKey()); + } + } + redisRes.deleteKey(cleanKeys.toArray(new String[cleanKeys.size()])); + } + + @Override + public void doConversionMissResourceByKeys(String[] keys) { + List missResourceStrList = redisRes.findObject(Arrays.asList(keys)); + MissResourceModel missResourceModel = null; + List missResourceModelList = new ArrayList<>(missResourceStrList.size()); + Map langCodeMap = sysLocaleLanguageRDao.list() + .stream() + .collect( + Collectors.toMap( + SysLocaleLanguage::getLanguageCode, + SysLocaleLanguage::getLanguageName + ) + ); + + // 类型转换 + for (Object missResourceStr : missResourceStrList) { + if (missResourceStr == null || StringUtils.isBlank(missResourceStr.toString())) { + continue; + } + missResourceModel = JsonUtilTool.decode(missResourceStr.toString(), MissResourceModel.class); + missResourceModelList.add(missResourceModel); + } + + SysLocaleResource sysLocaleResource; + for (MissResourceModel resourceModel : missResourceModelList) { + sysLocaleResource = new SysLocaleResource(); + sysLocaleResource.setSoftType(resourceModel.getSoftType()); + sysLocaleResource.setLanguageCode(resourceModel.getLanguageCode()); + sysLocaleResource.setLanguageNameRdd(langCodeMap.get(resourceModel.getLanguageCode())); + sysLocaleResource.setResourceType(resourceModel.getResourceType()); + sysLocaleResource.setResourceKey(resourceModel.getResourceKey()); + sysLocaleResource.setResourceValue(resourceModel.getResourceValue()); + sysLocaleResource.setIsSystem(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()); + + insertSysLocaleResource(sysLocaleResource); + redisRes.deleteKey(resourceModel.getKey()); + } + } + }