From c2181de374a4e5825413eb450a6c3acfaae809a5 Mon Sep 17 00:00:00 2001 From: gaoqr <13665037151@163.com> Date: Mon, 24 Nov 2025 14:18:50 +0800 Subject: [PATCH] =?UTF-8?q?1=E3=80=81=E6=96=B0=E5=A2=9E=E7=BB=84=E7=BB=87?= =?UTF-8?q?=E3=80=81=E7=94=A8=E6=88=B7=E3=80=81=E8=A7=92=E8=89=B2=E3=80=81?= =?UTF-8?q?=E7=9F=AD=E4=BF=A1=E6=97=A5=E5=BF=97=E3=80=81=E7=9F=AD=E4=BF=A1?= =?UTF-8?q?=E6=A8=A1=E7=89=88=E3=80=81token=E7=AE=A1=E7=90=86easyexcel?= =?UTF-8?q?=E5=AF=BC=E5=87=BA=E5=9B=BD=E9=99=85=E5=8C=96=EF=BC=8Ci18n?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E6=95=B4=E7=90=86=EF=BC=9B2=E3=80=81?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E5=AD=97=E5=85=B8cache=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E5=A4=9A=E8=AF=AD=E8=A8=80=EF=BC=9B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dict/core/util/DictFrameworkUtils.java | 28 +++++++++ .../excel/core/convert/DictConvert.java | 2 +- .../module/system/api/dict/DictDataApi.java | 11 ++++ .../system/api/dict/DictDataApiImpl.java | 6 ++ .../admin/organ/OrganController.java | 8 --- .../organ/vo/organ/OrganExportRespVO.java | 37 ++++------- .../admin/permission/vo/role/RoleRespVO.java | 16 ++--- .../admin/sms/vo/log/SmsLogRespVO.java | 17 +++--- .../sms/vo/template/SmsTemplateRespVO.java | 18 +++--- .../tokenconfig/vo/TokenConfigRespVO.java | 18 +++--- .../controller/admin/user/UserController.java | 23 +------ .../admin/user/vo/user/UserExportRespVO.java | 26 +++----- .../dal/mysql/dict/DictDataI18nMapper.java | 10 +++ .../system/service/dict/DictDataService.java | 9 +++ .../service/dict/DictDataServiceImpl.java | 5 ++ .../mapper/dict/DictDataI18nMapper.xml | 11 ++++ .../main/resources/message_enum.properties | 60 +++++++++++++++++- .../resources/message_enum_cht.properties | 59 +++++++++++++++++- .../main/resources/message_enum_en.properties | 61 ++++++++++++++++++- 19 files changed, 312 insertions(+), 113 deletions(-) diff --git a/cf-framework/cf-spring-boot-starter-excel/src/main/java/com/cf/imes/framework/dict/core/util/DictFrameworkUtils.java b/cf-framework/cf-spring-boot-starter-excel/src/main/java/com/cf/imes/framework/dict/core/util/DictFrameworkUtils.java index 49a669bc9..1fcd18cdf 100644 --- a/cf-framework/cf-spring-boot-starter-excel/src/main/java/com/cf/imes/framework/dict/core/util/DictFrameworkUtils.java +++ b/cf-framework/cf-spring-boot-starter-excel/src/main/java/com/cf/imes/framework/dict/core/util/DictFrameworkUtils.java @@ -9,8 +9,11 @@ import com.google.common.cache.CacheLoader; import com.google.common.cache.LoadingCache; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.tuple.Triple; +import org.springframework.context.i18n.LocaleContextHolder; import java.time.Duration; +import java.util.Locale; /** * 字典工具类 @@ -54,6 +57,21 @@ public class DictFrameworkUtils { }); + /** + * 针对 {@link #getDictI18nDataLabel(String, String)} 的缓存 + */ + private static final LoadingCache, DictDataRespDTO> GET_DICT_DATA_CACHE_I18n = CacheUtils.buildAsyncReloadingCache( + Duration.ofMinutes(10L), // 过期时间 1 分钟 + new CacheLoader<>() { + + @Override + public DictDataRespDTO load(Triple key) { + return ObjectUtil.defaultIfNull(dictDataApi.getDictI18nData(key.getLeft(), key.getMiddle(), key.getRight()).getCheckedData(), + DICT_DATA_NULL); + } + + }); + public static void init(DictDataApi dictDataApi) { DictFrameworkUtils.dictDataApi = dictDataApi; log.info("[init][初始化 DictFrameworkUtils 成功]"); @@ -69,6 +87,16 @@ public class DictFrameworkUtils { return GET_DICT_DATA_CACHE.get(new Pair<>(dictType, value)).getLabel(); } + @SneakyThrows + public static String getDictI18nDataLabel(String dictType, String value) { + Locale locale = LocaleContextHolder.getLocale(); + if(locale == null || Locale.CHINESE.equals(locale)) { + return GET_DICT_DATA_CACHE.get(new Pair<>(dictType, value)).getLabel(); + } else { + return GET_DICT_DATA_CACHE_I18n.get(Triple.of(dictType, value, locale.getLanguage())).getLabel(); + } + } + @SneakyThrows public static String parseDictDataValue(String dictType, String label) { return PARSE_DICT_DATA_CACHE.get(new Pair<>(dictType, label)).getValue(); diff --git a/cf-framework/cf-spring-boot-starter-excel/src/main/java/com/cf/imes/framework/excel/core/convert/DictConvert.java b/cf-framework/cf-spring-boot-starter-excel/src/main/java/com/cf/imes/framework/excel/core/convert/DictConvert.java index 4ad843a35..4cd4d17bc 100644 --- a/cf-framework/cf-spring-boot-starter-excel/src/main/java/com/cf/imes/framework/excel/core/convert/DictConvert.java +++ b/cf-framework/cf-spring-boot-starter-excel/src/main/java/com/cf/imes/framework/excel/core/convert/DictConvert.java @@ -56,7 +56,7 @@ public class DictConvert implements Converter { // 使用字典格式化 String type = getType(contentProperty); String value = String.valueOf(object); - String label = DictFrameworkUtils.getDictDataLabel(type, value); + String label = DictFrameworkUtils.getDictI18nDataLabel(type, value); if (label == null) { log.error("[convertToExcelData][type({}) 转换不了 label({})]", type, value); return new WriteCellData<>(""); diff --git a/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/api/dict/DictDataApi.java b/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/api/dict/DictDataApi.java index 8a5a7ac29..5dd218ee3 100644 --- a/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/api/dict/DictDataApi.java +++ b/cf-module-system/cf-module-system-api/src/main/java/com/cf/imes/module/system/api/dict/DictDataApi.java @@ -37,6 +37,17 @@ public interface DictDataApi { CommonResult getDictData(@RequestParam("dictType") String dictType, @RequestParam("value") String value); + @GetMapping(PREFIX + "/i18n/get") + @Operation(summary = "获得指定的字典数据") + @Parameters({ + @Parameter(name = "dictType", description = "字典类型", example = "SEX", required = true), + @Parameter(name = "description", description = "字典数据值", example = "1", required = true), + @Parameter(name = "description", description = "语种", example = "en", required = true) + }) + CommonResult getDictI18nData(@RequestParam("dictType") String dictType, + @RequestParam("value") String value, + @RequestParam("language") String language); + @GetMapping(PREFIX + "/parse") @Operation(summary = "解析获得指定的字典数据") @Parameters({ diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/api/dict/DictDataApiImpl.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/api/dict/DictDataApiImpl.java index 11fe117ee..88e3c090d 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/api/dict/DictDataApiImpl.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/api/dict/DictDataApiImpl.java @@ -33,6 +33,12 @@ public class DictDataApiImpl implements DictDataApi { return success(BeanUtils.toBean(dictData, DictDataRespDTO.class)); } + @Override + public CommonResult getDictI18nData(String dictType, String value, String language) { + DictDataDO dictData = dictDataService.getDictI18nData(dictType, value, language); + return success(BeanUtils.toBean(dictData, DictDataRespDTO.class)); + } + @Override public CommonResult parseDictData(String dictType, String label) { DictDataDO dictData = dictDataService.parseDictData(dictType, label); diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/organ/OrganController.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/organ/OrganController.java index 8b8f691bc..96c1f6329 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/organ/OrganController.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/organ/OrganController.java @@ -238,18 +238,10 @@ public class OrganController { return; } Set organIds = list.stream().map(OrganizationDO::getId).collect(Collectors.toSet()); - Set packageIds = list.stream().map(OrganizationDO::getPackageId).collect(Collectors.toSet()); - List tenantPackageDOS = tenantPackageMapper.selectBatchIds(packageIds); List organExportRespVOS = BeanUtils.toBean(list, OrganExportRespVO.class); List organAdminUserRespDTOS = adminUserService.getOrganAdminByOrganIds(organIds); organExportRespVOS.forEach(e->{ - e.setPackageName(tenantPackageDOS.stream() - .filter(f-> Objects.equals(e.getPackageId(),f.getId())) - .map(TenantPackageDO::getName) - .findAny() - .orElse(null)); - e.setLargeStr(e.getLarge()? "是":"否"); e.setUsernames(organAdminUserRespDTOS.stream() .filter(f->Objects.equals(e.getId(), f.getOrganId())) .map(OrganAdminUserRespDTO::getUsername) diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/organ/vo/organ/OrganExportRespVO.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/organ/vo/organ/OrganExportRespVO.java index bb2a996a6..1c126a0eb 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/organ/vo/organ/OrganExportRespVO.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/organ/vo/organ/OrganExportRespVO.java @@ -19,63 +19,50 @@ import java.time.LocalDateTime; @Builder public class OrganExportRespVO { @Schema(description = "组织编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") - @ExcelProperty("组织编号") + @ExcelProperty("excel.export.head.organ.id") private Long id; @Schema(description = "组织名", requiredMode = Schema.RequiredMode.REQUIRED, example = "晨丰") - @ExcelProperty("组织名") + @ExcelProperty("excel.export.head.organ.name") private String name; @Schema(description = "联系人", requiredMode = Schema.RequiredMode.REQUIRED, example = "晨丰") - @ExcelProperty("联系人") + @ExcelProperty("excel.export.head.organ.contactName") private String contactName; @Schema(description = "联系手机", example = "15601691300") - @ExcelProperty("联系手机") + @ExcelProperty("excel.export.head.organ.contactMobile") private String contactMobile; @Schema(description = "组织状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") - @ExcelProperty(value = "状态", converter = DictConvert.class) + @ExcelProperty(value = "excel.export.head.organ.status", converter = DictConvert.class) @DictFormat(DictTypeConstants.COMMON_STATUS) private Integer status; @Schema(description = "绑定域名", example = "https://www.cf.com") - @ExcelProperty("绑定域名") + @ExcelProperty("excel.export.head.organ.website") private String website; - @Schema(description = "组织套餐编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") - private Long packageId; - - @Schema(description = "组织套餐", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") - @ExcelProperty("组织套餐") - private String packageName; - @Schema(description = "管理员账号") - @ExcelProperty("管理员账号") + @ExcelProperty("excel.export.head.organ.usernames") private String usernames; - @ExcelProperty("账号数量") + @Schema(description = "账号数量") + @ExcelProperty("excel.export.head.organ.accountCount") private Integer accountCount; @Schema(description = "过期时间", requiredMode = Schema.RequiredMode.REQUIRED) - @ExcelProperty("过期时间") + @ExcelProperty("excel.export.head.organ.expireTime") private LocalDateTime expireTime; @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) - @ExcelProperty("创建时间") + @ExcelProperty("excel.export.head.organ.createTime") private LocalDateTime createTime; @Schema(description = "地址") - @ExcelProperty("地址") + @ExcelProperty("excel.export.head.organ.address") private String address; - @Schema(description = "是否大型数据库") - private Boolean large; - - @Schema(description = "是否大型数据库") - @ExcelProperty("是否大型数据库") - private String largeStr; - @Schema(description = "备注") private String remark; } diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/permission/vo/role/RoleRespVO.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/permission/vo/role/RoleRespVO.java index c36c4857f..ce2a000ff 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/permission/vo/role/RoleRespVO.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/permission/vo/role/RoleRespVO.java @@ -19,33 +19,33 @@ import java.util.Set; public class RoleRespVO { @Schema(description = "角色编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") - @ExcelProperty("角色序号") + @ExcelProperty("excel.export.head.role.id") private Long id; @Schema(description = "角色名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "管理员") - @ExcelProperty("角色名称") + @ExcelProperty("excel.export.head.role.name") private String name; @NotBlank(message = "角色标志不能为空") - @ExcelProperty("角色标志") + @ExcelProperty("excel.export.head.role.code") private String code; @Schema(description = "显示顺序不能为空", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") - @ExcelProperty("角色排序") + @ExcelProperty("excel.export.head.role.sort") private Integer sort; @Schema(description = "状态,参见 CommonStatusEnum 枚举类", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") - @ExcelProperty(value = "角色状态", converter = DictConvert.class) + @ExcelProperty(value = "excel.export.head.role.status", converter = DictConvert.class) @DictFormat(DictTypeConstants.COMMON_STATUS) private Integer status; @Schema(description = "角色类型,参见 RoleTypeEnum 枚举类", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") - @ExcelProperty(value = "角色类型", converter = DictConvert.class) + @ExcelProperty(value = "excel.export.head.role.type", converter = DictConvert.class) @DictFormat(DictTypeConstants.ROLE_TYPE) private Integer type; @Schema(description = "备注", example = "我是一个角色") - @ExcelProperty("备注") + @ExcelProperty("excel.export.head.role.remark") private String remark; @Schema(description = "数据范围,参见 DataScopeEnum 枚举类", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") @@ -55,7 +55,7 @@ public class RoleRespVO { private Set dataScopeDeptIds; @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED, example = "时间戳格式") - @ExcelProperty("创建时间") + @ExcelProperty("excel.export.head.role.createTime") @ColumnWidth(20) private LocalDateTime createTime; diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/sms/vo/log/SmsLogRespVO.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/sms/vo/log/SmsLogRespVO.java index 42675b425..6707ae717 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/sms/vo/log/SmsLogRespVO.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/sms/vo/log/SmsLogRespVO.java @@ -10,7 +10,6 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; import java.time.LocalDateTime; -import java.util.Map; @Schema(description = "管理后台 - 短信日志 Response VO") @Data @@ -18,37 +17,37 @@ import java.util.Map; public class SmsLogRespVO { @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") - @ExcelProperty("编号") + @ExcelProperty("excel.export.head.sms.log.id") private Long id; @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) - @ExcelProperty("创建时间") + @ExcelProperty("excel.export.head.sms.log.createTime") @ColumnWidth(20) private LocalDateTime createTime; @Schema(description = "手机号", requiredMode = Schema.RequiredMode.REQUIRED, example = "15601691300") - @ExcelProperty("手机号") + @ExcelProperty("excel.export.head.sms.log.mobile") private String mobile; @Schema(description = "短信内容", requiredMode = Schema.RequiredMode.REQUIRED, example = "你好,你的验证码是 1024") - @ExcelProperty("短信内容") + @ExcelProperty("excel.export.head.sms.log.templateContent") private String templateContent; @Schema(description = "发送状态", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") - @ExcelProperty(value = "发送状态", converter = DictConvert.class) + @ExcelProperty(value = "excel.export.head.sms.log.sendStatus", converter = DictConvert.class) @DictFormat(DictTypeConstants.SMS_SEND_STATUS) private Integer sendStatus; @Schema(description = "模板编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "20") - @ExcelProperty("模板编号") + @ExcelProperty("excel.export.head.sms.log.templateId") private Long templateId; @Schema(description = "模板编码", requiredMode = Schema.RequiredMode.REQUIRED, example = "test-01") - @ExcelProperty("模板编码") + @ExcelProperty("excel.export.head.sms.log.templateCode") private String templateCode; @Schema(description = "短信类型", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") - @ExcelProperty(value = "短信类型", converter = DictConvert.class) + @ExcelProperty(value = "excel.export.head.sms.log.templateType", converter = DictConvert.class) @DictFormat(DictTypeConstants.SMS_TEMPLATE_TYPE) private Integer templateType; } diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/sms/vo/template/SmsTemplateRespVO.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/sms/vo/template/SmsTemplateRespVO.java index 38b2bd25f..21b84d5e5 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/sms/vo/template/SmsTemplateRespVO.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/sms/vo/template/SmsTemplateRespVO.java @@ -17,44 +17,44 @@ import java.util.List; public class SmsTemplateRespVO { @Schema(description = "编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1024") - @ExcelProperty("编号") + @ExcelProperty("excel.export.head.sms.template.id") private Long id; @Schema(description = "短信类型,参见 SmsTemplateTypeEnum 枚举类", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") - @ExcelProperty(value = "短信签名", converter = DictConvert.class) + @ExcelProperty(value = "excel.export.head.sms.template.type", converter = DictConvert.class) @DictFormat(DictTypeConstants.SMS_TEMPLATE_TYPE) private Integer type; @Schema(description = "开启状态,参见 CommonStatusEnum 枚举类", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") - @ExcelProperty(value = "开启状态", converter = DictConvert.class) + @ExcelProperty(value = "excel.export.head.sms.template.status", converter = DictConvert.class) @DictFormat(DictTypeConstants.COMMON_STATUS) private Integer status; @Schema(description = "模板编码", requiredMode = Schema.RequiredMode.REQUIRED, example = "test_01") - @ExcelProperty("模板编码") + @ExcelProperty("excel.export.head.sms.template.code") private String code; @Schema(description = "模板名称", requiredMode = Schema.RequiredMode.REQUIRED, example = "chenfeng") - @ExcelProperty("模板名称") + @ExcelProperty("excel.export.head.sms.template.name") private String name; @Schema(description = "模板内容", requiredMode = Schema.RequiredMode.REQUIRED, example = "你好,{name}。你长的太{like}啦!") - @ExcelProperty("模板内容") + @ExcelProperty("excel.export.head.sms.template.content") private String content; @Schema(description = "参数数组", example = "name,code") private List params; @Schema(description = "备注", example = "哈哈哈") - @ExcelProperty("备注") + @ExcelProperty("excel.export.head.sms.template.remark") private String remark; @Schema(description = "短信 API 的模板编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "4383920") - @ExcelProperty("短信 API 的模板编号") + @ExcelProperty("excel.export.head.sms.template.apiTemplateId") private String apiTemplateId; @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) - @ExcelProperty("创建时间") + @ExcelProperty("excel.export.head.sms.template.createTime") private LocalDateTime createTime; } diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/tokenconfig/vo/TokenConfigRespVO.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/tokenconfig/vo/TokenConfigRespVO.java index a3aa85ad3..efead7d25 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/tokenconfig/vo/TokenConfigRespVO.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/tokenconfig/vo/TokenConfigRespVO.java @@ -18,27 +18,26 @@ public class TokenConfigRespVO { @Schema(description = "配置编号") - @ExcelProperty("配置编号") + @ExcelProperty("excel.export.head.token.config.id") private Long id; @Schema(description = "应用类型") - @ExcelProperty("应用类型") private Integer appType; - @Schema(description = "用户名称") - @ExcelProperty("用户名称") + @Schema(description = "应用名称") + @ExcelProperty("excel.export.head.token.config.appName") private String appName; @Schema(description = "组织名称") - @ExcelProperty("组织名称") + @ExcelProperty("excel.export.head.token.config.organName") private String organName; @Schema(description = "应用token") - @ExcelProperty("应用token") + @ExcelProperty("excel.export.head.token.config.appToken") private String appToken; @@ -47,22 +46,21 @@ public class TokenConfigRespVO { @Schema(description = "过期时间") - @ExcelProperty("过期时间") + @ExcelProperty("excel.export.head.token.config.expiresTime") private LocalDateTime expiresTime; @Schema(description = "备注") - @ExcelProperty("备注") + @ExcelProperty("excel.export.head.token.config.remark") private String remark; @Schema(description = "组织ID") - @ExcelProperty("组织ID") private Long organId; @Schema(description = "创建时间") - @ExcelProperty("创建时间") + @ExcelProperty("excel.export.head.token.config.createTime") private LocalDateTime createTime; diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/user/UserController.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/user/UserController.java index c13705362..27b70586d 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/user/UserController.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/user/UserController.java @@ -10,16 +10,12 @@ import com.cf.imes.framework.common.pojo.PageResult; import com.cf.imes.framework.common.util.collection.CollectionUtils; import com.cf.imes.framework.common.util.object.BeanUtils; import com.cf.imes.framework.excel.core.util.ExcelUtils; -import com.cf.imes.framework.mybatis.core.query.MPJLambdaWrapperX; import com.cf.imes.framework.operatelog.core.annotations.OperateLog; import com.cf.imes.framework.organ.core.context.OrganContextHolder; import com.cf.imes.module.system.controller.admin.user.vo.user.*; import com.cf.imes.module.system.convert.user.UserConvert; import com.cf.imes.module.system.dal.dataobject.dept.DeptDO; -import com.cf.imes.module.system.dal.dataobject.dept.PostDO; -import com.cf.imes.module.system.dal.dataobject.dept.UserPostDO; import com.cf.imes.module.system.dal.dataobject.user.AdminUserDO; -import com.cf.imes.module.system.dal.mysql.dept.PostMapper; import com.cf.imes.module.system.enums.common.SexEnum; import com.cf.imes.module.system.service.dept.DeptService; import com.cf.imes.module.system.service.user.AdminUserService; @@ -42,7 +38,6 @@ import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.Set; -import java.util.stream.Collectors; import static com.cf.imes.framework.common.pojo.CommonResult.success; import static com.cf.imes.framework.common.util.collection.CollectionUtils.convertList; @@ -59,8 +54,6 @@ public class UserController { private AdminUserService userService; @Resource private DeptService deptService; - @Resource - private PostMapper postMapper; @PostMapping("/create") @Operation(summary = "新增用户") @@ -185,25 +178,11 @@ public class UserController { if (CollUtil.isEmpty(list)) { ExcelUtils.write(response, "用户数据.xls", "数据", UserExportRespVO.class, new ArrayList<>()); } - List userPostDTOS = postMapper.selectJoinList(UserPostDTO.class, new MPJLambdaWrapperX() - .select(PostDO::getName) - .leftJoin(UserPostDO.class, UserPostDO::getPostId, PostDO::getId) - .select(UserPostDO::getPostId,UserPostDO::getUserId) - .in(UserPostDO::getUserId, list.stream().map(AdminUserDO::getId).collect(Collectors.toSet())) - ); - Map> listMap = userPostDTOS.stream().collect(Collectors.groupingBy(UserPostDTO::getUserId)); // 输出 Excel Map deptMap = CollectionUtils.convertMap(deptService.getDeptList(convertList(list, AdminUserDO::getDeptId)), DeptDO::getId); List userRespVOS = UserConvert.INSTANCE.convertExportList(list, deptMap); - userRespVOS.forEach(e-> { - List userPostDTOS1 = listMap.get(e.getId()); - if(CollUtil.isNotEmpty(userPostDTOS1)) { - e.setPostName(userPostDTOS1.stream().map(UserPostDTO::getName).reduce("",(a, b) -> a + " " +b)); - }else{ - e.setPostName(""); - } - }); + ExcelUtils.write(response, "用户数据.xls", "数据", UserExportRespVO.class, userRespVOS); } diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/user/vo/user/UserExportRespVO.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/user/vo/user/UserExportRespVO.java index 6d32f4ce6..9b612674b 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/user/vo/user/UserExportRespVO.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/controller/admin/user/vo/user/UserExportRespVO.java @@ -12,7 +12,6 @@ import lombok.Data; import lombok.NoArgsConstructor; import java.time.LocalDateTime; -import java.util.Set; /** * @author Beal @@ -25,45 +24,38 @@ import java.util.Set; public class UserExportRespVO { @Schema(description = "用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") - @ExcelProperty("用户编号") + @ExcelProperty("excel.export.head.user.id") private Long id; @Schema(description = "用户账号", requiredMode = Schema.RequiredMode.REQUIRED, example = "chenfeng") - @ExcelProperty("用户名") + @ExcelProperty("excel.export.head.user.username") private String username; @Schema(description = "用户昵称", requiredMode = Schema.RequiredMode.REQUIRED, example = "晨丰") - @ExcelProperty("用户名称") + @ExcelProperty("excel.export.head.user.nickname") private String nickname; @Schema(description = "备注", example = "我是一个用户") - @ExcelProperty("备注") + @ExcelProperty("excel.export.head.user.remark") private String remark; @Schema(description = "部门ID", example = "我是一个用户") private Long deptId; @Schema(description = "部门名称", example = "IT 部") - @ExcelProperty("部门名称") + @ExcelProperty("excel.export.head.user.deptName") private String deptName; - @Schema(description = "岗位") - @ExcelProperty("岗位") - private String postName; - - @Schema(description = "岗位编号数组", example = "1") - private Set postIds; - @Schema(description = "用户邮箱", example = "chenfeng@cf.com") - @ExcelProperty("用户邮箱") + @ExcelProperty("excel.export.head.user.email") private String email; @Schema(description = "手机号码", example = "15601691300") - @ExcelProperty("手机号码") + @ExcelProperty("excel.export.head.user.mobile") private String mobile; @Schema(description = "用户性别,参见 SexEnum 枚举类", example = "1") - @ExcelProperty(value = "用户性别", converter = DictConvert.class) + @ExcelProperty(value = "excel.export.head.user.sex", converter = DictConvert.class) @DictFormat(DictTypeConstants.USER_SEX) private Integer sex; @@ -71,7 +63,7 @@ public class UserExportRespVO { private String avatar; @Schema(description = "状态,参见 CommonStatusEnum 枚举类", requiredMode = Schema.RequiredMode.REQUIRED, example = "1") - @ExcelProperty(value = "帐号状态", converter = DictConvert.class) + @ExcelProperty(value = "excel.export.head.user.status", converter = DictConvert.class) @DictFormat(DictTypeConstants.COMMON_STATUS) private Integer status; diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/dict/DictDataI18nMapper.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/dict/DictDataI18nMapper.java index 0b1061420..2ceffc4aa 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/dict/DictDataI18nMapper.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/dal/mysql/dict/DictDataI18nMapper.java @@ -33,4 +33,14 @@ public interface DictDataI18nMapper extends BaseMapperX { * @return */ List selectListByDictType(@Param("dictType") String dictType, @Param("locale") String locale); + + /** + * 查询指定字典类型下的字典i18n数据 + * + * @param dictType + * @param value + * @param locale + * @return + */ + DictDataDO selectI18nByDictTypeAndValue(@Param("dictType") String dictType, @Param("value") String value, @Param("locale") String locale); } diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/dict/DictDataService.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/dict/DictDataService.java index bd4836980..c5efb88c2 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/dict/DictDataService.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/dict/DictDataService.java @@ -93,6 +93,15 @@ public interface DictDataService { */ DictDataDO getDictData(String dictType, String value); + /** + * 获得指定的字典国际化数据 + * + * @param dictType 字典类型 + * @param value 字典数据值 + * @return 字典数据 + */ + DictDataDO getDictI18nData(String dictType, String value, String language); + /** * 解析获得指定的字典数据,从缓存中 * diff --git a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/dict/DictDataServiceImpl.java b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/dict/DictDataServiceImpl.java index b79788e27..d22cbb901 100644 --- a/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/dict/DictDataServiceImpl.java +++ b/cf-module-system/cf-module-system-biz/src/main/java/com/cf/imes/module/system/service/dict/DictDataServiceImpl.java @@ -204,6 +204,11 @@ public class DictDataServiceImpl implements DictDataService { return dictDataMapper.selectByDictTypeAndValue(dictType, value); } + @Override + public DictDataDO getDictI18nData(String dictType, String value, String language) { + return dictDatai18nMapper.selectI18nByDictTypeAndValue(dictType, value, language); + } + @Override public DictDataDO parseDictData(String dictType, String label) { return dictDataMapper.selectByDictTypeAndLabel(dictType, label); diff --git a/cf-module-system/cf-module-system-biz/src/main/resources/mapper/dict/DictDataI18nMapper.xml b/cf-module-system/cf-module-system-biz/src/main/resources/mapper/dict/DictDataI18nMapper.xml index 7f179a964..996c17a74 100644 --- a/cf-module-system/cf-module-system-biz/src/main/resources/mapper/dict/DictDataI18nMapper.xml +++ b/cf-module-system/cf-module-system-biz/src/main/resources/mapper/dict/DictDataI18nMapper.xml @@ -31,4 +31,15 @@ where d.deleted = false and d.dict_type = #{dictType} + + \ No newline at end of file diff --git a/cf-module-system/cf-module-system-biz/src/main/resources/message_enum.properties b/cf-module-system/cf-module-system-biz/src/main/resources/message_enum.properties index 2fbc87343..a8edabb60 100644 --- a/cf-module-system/cf-module-system-biz/src/main/resources/message_enum.properties +++ b/cf-module-system/cf-module-system-biz/src/main/resources/message_enum.properties @@ -45,4 +45,62 @@ excel.export.head.purchase.record.total.amount=订单总额 excel.export.head.purchase.record.external.spent=扫码支付 excel.export.head.purchase.record.create.time=购买时间 excel.export.head.purchase.record.creator=操作人 -excel.export.head.purchase.record.end.time=产品有效时间 \ No newline at end of file +excel.export.head.purchase.record.end.time=产品有效时间 + +excel.export.head.token.config.id=配置编号 +excel.export.head.token.config.appName=应用名称 +excel.export.head.token.config.organName=组织名称 +excel.export.head.token.config.appToken=应用token +excel.export.head.token.config.expiresTime=过期时间 +excel.export.head.token.config.remark=备注 +excel.export.head.token.config.createTime=创建时间 + +excel.export.head.organ.id=组织编号 +excel.export.head.organ.name=组织名称 +excel.export.head.organ.contactName=联系人 +excel.export.head.organ.contactMobile=联系手机 +excel.export.head.organ.status=状态 +excel.export.head.organ.website=绑定域名 +excel.export.head.organ.usernames=管理员账号 +excel.export.head.organ.accountCount=账号数量 +excel.export.head.organ.expireTime=过期时间 +excel.export.head.organ.createTime=创建时间 +excel.export.head.organ.address=地址 + +excel.export.head.user.id=用户编号 +excel.export.head.user.username=用户账号 +excel.export.head.user.nickname==用户昵称 +excel.export.head.user.remark=备注 +excel.export.head.user.deptName=部门名称 +excel.export.head.user.email=邮箱 +excel.export.head.user.mobile=手机号码 +excel.export.head.user.sex=性别 +excel.export.head.user.status=账号状态 + +excel.export.head.role.id=角色编号 +excel.export.head.role.name=角色名称 +excel.export.head.role.code=角色标志 +excel.export.head.role.sort=角色排序 +excel.export.head.role.status=角色状态 +excel.export.head.role.type=角色类型 +excel.export.head.role.remark=备注 +excel.export.head.role.createTime=创建时间 + +excel.export.head.sms.template.id=模板编号 +excel.export.head.sms.template.type=短信类型 +excel.export.head.sms.template.status=模板状态 +excel.export.head.sms.template.code=模板编码 +excel.export.head.sms.template.name=模板名称 +excel.export.head.sms.template.content=模板内容 +excel.export.head.sms.template.remark=模板备注 +excel.export.head.sms.template.apiTemplateId=短信 API 的模板编号 +excel.export.head.sms.template.createTime=创建时间 + +excel.export.head.sms.log.id=日志编号 +excel.export.head.sms.log.createTime=创建时间 +excel.export.head.sms.log.mobile=手机号 +excel.export.head.sms.log.templateContent=短信内容 +excel.export.head.sms.log.sendStatus=发送状态 +excel.export.head.sms.log.templateId=模板编号 +excel.export.head.sms.log.templateCode=模板编码 +excel.export.head.sms.log.templateType=短信类型 \ No newline at end of file diff --git a/cf-module-system/cf-module-system-biz/src/main/resources/message_enum_cht.properties b/cf-module-system/cf-module-system-biz/src/main/resources/message_enum_cht.properties index 0e1d13aaf..8199371d3 100644 --- a/cf-module-system/cf-module-system-biz/src/main/resources/message_enum_cht.properties +++ b/cf-module-system/cf-module-system-biz/src/main/resources/message_enum_cht.properties @@ -36,7 +36,6 @@ excel.export.head.sales.detail.createTime=交易時間 excel.export.head.purchase.record.id=訂單號 excel.export.head.purchase.record.organName=組織名稱 excel.export.head.purchase.record.product.name=產品名稱 -excel.export.head.purchase.record.order.no=訂單號 excel.export.head.purchase.record.purchase.duration=購買時長 excel.export.head.purchase.record.purchase.duration.unit=購買時長單位 excel.export.head.purchase.record.gift.duration=贈送時長 @@ -47,3 +46,61 @@ excel.export.head.purchase.record.external.spent=掃碼支付 excel.export.head.purchase.record.create.time=購買時間 excel.export.head.purchase.record.creator=操作人 excel.export.head.purchase.record.end.time=產品有效時間 + +excel.export.head.token.config.id=配置編號 +excel.export.head.token.config.appName=應用名稱 +excel.export.head.token.config.organName=組織名稱 +excel.export.head.token.config.appToken=應用 Token +excel.export.head.token.config.expiresTime=過期時間 +excel.export.head.token.config.remark=備註 +excel.export.head.token.config.createTime=創建時間 + +excel.export.head.organ.id=組織編號 +excel.export.head.organ.name=組織名稱 +excel.export.head.organ.contactName=聯絡人 +excel.export.head.organ.contactMobile=聯絡手機 +excel.export.head.organ.status=狀態 +excel.export.head.organ.website=綁定域名 +excel.export.head.organ.usernames=管理員帳號 +excel.export.head.organ.accountCount=帳號數量 +excel.export.head.organ.expireTime=過期時間 +excel.export.head.organ.createTime=創建時間 +excel.export.head.organ.address=地址 + +excel.export.head.user.id=使用者編號 +excel.export.head.user.username=使用者帳號 +excel.export.head.user.nickname=使用者暱稱 +excel.export.head.user.remark=備註 +excel.export.head.user.deptName=部門名稱 +excel.export.head.user.email=電子郵件 +excel.export.head.user.mobile=手機號碼 +excel.export.head.user.sex=性別 +excel.export.head.user.status=帳號狀態 + +excel.export.head.role.id=角色編號 +excel.export.head.role.name=角色名稱 +excel.export.head.role.code=角色標識 +excel.export.head.role.sort=角色排序 +excel.export.head.role.status=角色狀態 +excel.export.head.role.type=角色類型 +excel.export.head.role.remark=備註 +excel.export.head.role.createTime=創建時間 + +excel.export.head.sms.template.id=模板編號 +excel.export.head.sms.template.type=模板類型 +excel.export.head.sms.template.status=模板狀態 +excel.export.head.sms.template.code=模板編碼 +excel.export.head.sms.template.name=模板名稱 +excel.export.head.sms.template.content=模板內容 +excel.export.head.sms.template.remark=模板備註 +excel.export.head.sms.template.apiTemplateId=短信 API 的模板編號 +excel.export.head.sms.template.createTime=創建時間 + +excel.export.head.sms.log.id=日誌編號 +excel.export.head.sms.log.createTime=創建時間 +excel.export.head.sms.log.mobile=手機號碼 +excel.export.head.sms.log.templateContent=短信內容 +excel.export.head.sms.log.sendStatus=發送狀態 +excel.export.head.sms.log.templateId=模板編號 +excel.export.head.sms.log.templateCode=模板編碼 +excel.export.head.sms.log.templateType=短信類型 \ No newline at end of file diff --git a/cf-module-system/cf-module-system-biz/src/main/resources/message_enum_en.properties b/cf-module-system/cf-module-system-biz/src/main/resources/message_enum_en.properties index a3cd1fd25..f412889ad 100644 --- a/cf-module-system/cf-module-system-biz/src/main/resources/message_enum_en.properties +++ b/cf-module-system/cf-module-system-biz/src/main/resources/message_enum_en.properties @@ -36,7 +36,6 @@ excel.export.head.sales.detail.createTime=Transaction Time excel.export.head.purchase.record.id=Order Number excel.export.head.purchase.record.organName=Organization Name excel.export.head.purchase.record.product.name=Product Name -excel.export.head.purchase.record.order.no=Order Number excel.export.head.purchase.record.purchase.duration=Purchase Duration excel.export.head.purchase.record.purchase.duration.unit=Purchase Duration Unit excel.export.head.purchase.record.gift.duration=Gift Duration @@ -46,4 +45,62 @@ excel.export.head.purchase.record.total.amount=Total Amount excel.export.head.purchase.record.external.spent=QR Payment Amount excel.export.head.purchase.record.create.time=Purchase Time excel.export.head.purchase.record.creator=Operator -excel.export.head.purchase.record.end.time=Product Valid Until \ No newline at end of file +excel.export.head.purchase.record.end.time=Product Valid Until + +excel.export.head.token.config.id=Config ID +excel.export.head.token.config.appName=Application Name +excel.export.head.token.config.organName=Organization Name +excel.export.head.token.config.appToken=Application Token +excel.export.head.token.config.expiresTime=Expiration Time +excel.export.head.token.config.remark=Remark +excel.export.head.token.config.createTime=Creation Time + +excel.export.head.organ.id=Organization ID +excel.export.head.organ.name=Organization Name +excel.export.head.organ.contactName=Contact Person +excel.export.head.organ.contactMobile=Contact Mobile +excel.export.head.organ.status=Status +excel.export.head.organ.website=Bound Domain +excel.export.head.organ.usernames=Admin Accounts +excel.export.head.organ.accountCount=Account Count +excel.export.head.organ.expireTime=Expiration Time +excel.export.head.organ.createTime=Creation Time +excel.export.head.organ.address=Address + +excel.export.head.user.id=User ID +excel.export.head.user.username=Username +excel.export.head.user.nickname=Nickname +excel.export.head.user.remark=Remark +excel.export.head.user.deptName=Department Name +excel.export.head.user.email=Email +excel.export.head.user.mobile=Mobile Number +excel.export.head.user.sex=Gender +excel.export.head.user.status=Account Status + +excel.export.head.role.id=Role ID +excel.export.head.role.name=Role Name +excel.export.head.role.code=Role Code +excel.export.head.role.sort=Role Sort +excel.export.head.role.status=Role Status +excel.export.head.role.type=Role Type +excel.export.head.role.remark=Remark +excel.export.head.role.createTime=Creation Time + +excel.export.head.sms.template.id=Template ID +excel.export.head.sms.template.type=Template Type +excel.export.head.sms.template.status=Template Status +excel.export.head.sms.template.code=Template Code +excel.export.head.sms.template.name=Template Name +excel.export.head.sms.template.content=Template Content +excel.export.head.sms.template.remark=Template Remark +excel.export.head.sms.template.apiTemplateId=SMS API Template ID +excel.export.head.sms.template.createTime=Creation Time + +excel.export.head.sms.log.id=Log ID +excel.export.head.sms.log.createTime=Creation Time +excel.export.head.sms.log.mobile=Mobile Number +excel.export.head.sms.log.templateContent=SMS Content +excel.export.head.sms.log.sendStatus=Send Status +excel.export.head.sms.log.templateId=Template ID +excel.export.head.sms.log.templateCode=Template Code +excel.export.head.sms.log.templateType=SMS Type \ No newline at end of file