1、新增组织、用户、角色、短信日志、短信模版、token管理easyexcel导出国际化,i18n文件整理;2、新增字典cache支持多语言;

This commit is contained in:
gaoqr
2025-11-24 14:18:50 +08:00
parent ae1341b6ff
commit c2181de374
19 changed files with 312 additions and 113 deletions
@@ -37,6 +37,17 @@ public interface DictDataApi {
CommonResult<DictDataRespDTO> 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<DictDataRespDTO> getDictI18nData(@RequestParam("dictType") String dictType,
@RequestParam("value") String value,
@RequestParam("language") String language);
@GetMapping(PREFIX + "/parse")
@Operation(summary = "解析获得指定的字典数据")
@Parameters({
@@ -33,6 +33,12 @@ public class DictDataApiImpl implements DictDataApi {
return success(BeanUtils.toBean(dictData, DictDataRespDTO.class));
}
@Override
public CommonResult<DictDataRespDTO> getDictI18nData(String dictType, String value, String language) {
DictDataDO dictData = dictDataService.getDictI18nData(dictType, value, language);
return success(BeanUtils.toBean(dictData, DictDataRespDTO.class));
}
@Override
public CommonResult<DictDataRespDTO> parseDictData(String dictType, String label) {
DictDataDO dictData = dictDataService.parseDictData(dictType, label);
@@ -238,18 +238,10 @@ public class OrganController {
return;
}
Set<Long> organIds = list.stream().map(OrganizationDO::getId).collect(Collectors.toSet());
Set<Long> packageIds = list.stream().map(OrganizationDO::getPackageId).collect(Collectors.toSet());
List<TenantPackageDO> tenantPackageDOS = tenantPackageMapper.selectBatchIds(packageIds);
List<OrganExportRespVO> organExportRespVOS = BeanUtils.toBean(list, OrganExportRespVO.class);
List<OrganAdminUserRespDTO> 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)
@@ -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;
}
@@ -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<Long> dataScopeDeptIds;
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED, example = "时间戳格式")
@ExcelProperty("创建时间")
@ExcelProperty("excel.export.head.role.createTime")
@ColumnWidth(20)
private LocalDateTime createTime;
@@ -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;
}
@@ -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<String> 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;
}
@@ -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;
@@ -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<UserPostDTO> userPostDTOS = postMapper.selectJoinList(UserPostDTO.class, new MPJLambdaWrapperX<PostDO>()
.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<Long, List<UserPostDTO>> listMap = userPostDTOS.stream().collect(Collectors.groupingBy(UserPostDTO::getUserId));
// 输出 Excel
Map<Long, DeptDO> deptMap = CollectionUtils.convertMap(deptService.getDeptList(convertList(list, AdminUserDO::getDeptId)), DeptDO::getId);
List<UserExportRespVO> userRespVOS = UserConvert.INSTANCE.convertExportList(list, deptMap);
userRespVOS.forEach(e-> {
List<UserPostDTO> 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);
}
@@ -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<Long> 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;
@@ -33,4 +33,14 @@ public interface DictDataI18nMapper extends BaseMapperX<DictDatai18nDO> {
* @return
*/
List<DictDataDO> 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);
}
@@ -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);
/**
* 解析获得指定的字典数据,从缓存中
*
@@ -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);
@@ -31,4 +31,15 @@
where d.deleted = false
and d.dict_type = #{dictType}
</select>
<select id="selectI18nByDictTypeAndValue" resultType="com.cf.imes.module.system.dal.dataobject.dict.DictDataDO">
select
coalesce(i.label, d.label) as label
from system_dict_data d
left join system_dict_data_i18n i
on d.id = i.dict_data_id and i.locale = #{locale}
where d.deleted = false
and d.dict_type = #{dictType}
and d.value = #{value}
</select>
</mapper>
@@ -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=产品有效时间
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=短信类型
@@ -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=短信類型
@@ -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
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