You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
527 lines
19 KiB
527 lines
19 KiB
package com.example.demo.Util;
|
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
import org.springframework.stereotype.Component;
|
|
|
|
import java.util.*;
|
|
|
|
/**
|
|
* Excel表头翻译工具类
|
|
*/
|
|
@Component
|
|
@Slf4j
|
|
public class ExcelHeaderTranslator {
|
|
|
|
@Autowired
|
|
private LanguageTranslationUtil languageTranslationUtil;
|
|
|
|
/**
|
|
* 获取充值明细的Excel表头映射
|
|
* 返回 Map<字段名, 中文表头>
|
|
*/
|
|
public Map<String, String> getRechargeHeaders(String lang) {
|
|
Map<String, String> headers = new LinkedHashMap<>();
|
|
|
|
// 定义所有表头的原始中文名称(对应 RechargeUser 类的字段)
|
|
headers.put("name", "姓名");
|
|
headers.put("orderCode", "订单号");
|
|
headers.put("jwcode", "精网号");
|
|
headers.put("market", "所属地区");
|
|
headers.put("activity", "活动名称");
|
|
headers.put("rateName", "货币名称");
|
|
headers.put("money", "充值金额");
|
|
headers.put("permanentGold", "永久金币");
|
|
headers.put("freeGold", "免费金币");
|
|
headers.put("payModel", "支付方式");
|
|
headers.put("payPlatform", "充值平台");
|
|
headers.put("isRefund", "是否已退款 0-未退款,1-已退款");
|
|
headers.put("remark", "备注");
|
|
headers.put("adminName", "提交人");
|
|
headers.put("auditTime", "充值时间");
|
|
|
|
// 如果需要翻译,则翻译表头
|
|
if (!isChineseLanguage(lang)) {
|
|
return translateHeaders(headers, lang);
|
|
}
|
|
|
|
return headers;
|
|
}
|
|
|
|
/**
|
|
* 获取表头顺序(与 RechargeUser 类中的 @ExcelProperty 注解顺序保持一致)
|
|
*/
|
|
public List<String> getRechargeColumnOrder() {
|
|
return Arrays.asList(
|
|
"name", "orderCode", "jwcode", "market", "activity",
|
|
"rateName", "money", "permanentGold", "freeGold",
|
|
"payModel", "payPlatform", "isRefund", "remark",
|
|
"adminName", "auditTime"
|
|
);
|
|
}
|
|
|
|
/**
|
|
* 获取消费明细的Excel表头映射
|
|
* 返回 Map<字段名, 中文表头>
|
|
*/
|
|
public Map<String, String> getConsumeHeaders(String lang) {
|
|
Map<String, String> headers = new LinkedHashMap<>();
|
|
|
|
// 定义所有表头的原始中文名称(对应 ConsumeUser 类的字段)
|
|
headers.put("name", "姓名");
|
|
headers.put("orderCode", "订单号");
|
|
headers.put("jwcode", "精网号");
|
|
headers.put("market", "所属地区");
|
|
headers.put("goodsName", "商品名称");
|
|
headers.put("payPlatform", "消耗平台");
|
|
headers.put("sumGold", "消耗金币总数");
|
|
headers.put("permanentGold", "永久金币");
|
|
headers.put("freeGold", "免费金币");
|
|
headers.put("taskGold", "任务金币");
|
|
headers.put("remark", "备注");
|
|
headers.put("adminName", "提交人");
|
|
headers.put("isRefund", "是否退款");
|
|
headers.put("createTime", "消耗时间");
|
|
headers.put("price", "折扣金币");
|
|
|
|
// 如果需要翻译,则翻译表头
|
|
if (!isChineseLanguage(lang)) {
|
|
return translateHeaders(headers, lang);
|
|
}
|
|
|
|
return headers;
|
|
}
|
|
|
|
/**
|
|
* 获取消费明细表头顺序
|
|
*/
|
|
public List<String> getConsumeColumnOrder() {
|
|
return Arrays.asList(
|
|
"name", "orderCode", "jwcode", "market", "goodsName",
|
|
"payPlatform", "sumGold", "permanentGold", "freeGold",
|
|
"taskGold", "remark", "adminName", "isRefund", "createTime", "price"
|
|
);
|
|
}
|
|
|
|
/**
|
|
* 获取退款明细的Excel表头映射
|
|
* 返回 Map<字段名, 中文表头>
|
|
*/
|
|
public Map<String, String> getRefundHeaders(String lang) {
|
|
Map<String, String> headers = new LinkedHashMap<>();
|
|
|
|
// 定义所有表头的原始中文名称(对应 RefundUser 类的字段)
|
|
headers.put("orderCode", "订单号");
|
|
headers.put("name", "姓名");
|
|
headers.put("jwcode", "精网号");
|
|
headers.put("market", "所属地区");
|
|
headers.put("goodsName", "商品名称");
|
|
headers.put("refundType", "退款类型");
|
|
headers.put("refundModelDesc", "退款方式");
|
|
headers.put("sumGold", "退款金币总数");
|
|
headers.put("permanentGold", "永久金币");
|
|
headers.put("freeGold", "免费金币");
|
|
headers.put("taskGold", "任务金币");
|
|
headers.put("remark", "退款原因");
|
|
headers.put("adminName", "提交人");
|
|
headers.put("auditTime", "退款时间");
|
|
|
|
// 如果需要翻译,则翻译表头
|
|
if (!isChineseLanguage(lang)) {
|
|
return translateHeaders(headers, lang);
|
|
}
|
|
|
|
return headers;
|
|
}
|
|
|
|
/**
|
|
* 获取退款明细表头顺序
|
|
*/
|
|
public List<String> getRefundColumnOrder() {
|
|
return Arrays.asList(
|
|
"orderCode", "name", "jwcode", "market", "goodsName",
|
|
"refundType", "refundModelDesc", "sumGold", "permanentGold",
|
|
"freeGold", "taskGold", "remark", "adminName", "auditTime"
|
|
);
|
|
}
|
|
|
|
/**
|
|
* 获取直播消费明细的Excel表头映射
|
|
* 返回 Map<字段名, 中文表头>
|
|
*/
|
|
public Map<String, String> getBeanConsumeLiveHeaders(String lang) {
|
|
Map<String, String> headers = new LinkedHashMap<>();
|
|
|
|
// 定义所有表头的原始中文名称(对应 BeanConsumeLive 类的字段)
|
|
headers.put("id", "ID");
|
|
headers.put("name", "姓名");
|
|
headers.put("jwcode", "精网号");
|
|
headers.put("dept", "地区");
|
|
headers.put("gift", "礼物");
|
|
headers.put("isBackpack", "是否为背包礼物");
|
|
headers.put("beanNum", "金豆数量");
|
|
headers.put("liveChannel", "频道");
|
|
headers.put("freeBean", "免费金豆");
|
|
headers.put("buyBean", "付费金豆");
|
|
headers.put("liveName", "直播间名称");
|
|
headers.put("consumeTime", "消费时间");
|
|
|
|
// 如果需要翻译,则翻译表头
|
|
if (!isChineseLanguage(lang)) {
|
|
return translateHeaders(headers, lang);
|
|
}
|
|
|
|
return headers;
|
|
}
|
|
|
|
/**
|
|
* 获取直播消费明细表头顺序
|
|
*/
|
|
public List<String> getBeanConsumeLiveColumnOrder() {
|
|
return Arrays.asList(
|
|
"id", "name", "jwcode", "dept", "gift", "isBackpack",
|
|
"beanNum", "liveChannel", "freeBean", "buyBean", "liveName", "consumeTime"
|
|
);
|
|
}
|
|
|
|
/**
|
|
* 获取在线充值明细的Excel表头映射
|
|
* 返回 Map<字段名, 中文表头>
|
|
*/
|
|
public Map<String, String> getBeanOnlineRechargeHeaders(String lang) {
|
|
Map<String, String> headers = new LinkedHashMap<>();
|
|
|
|
// 定义所有表头的原始中文名称(对应 BeanOnlineRechargeInfo 类的字段)
|
|
headers.put("jwcode", "精网号");
|
|
headers.put("name", "姓名");
|
|
headers.put("market", "所属地区");
|
|
headers.put("money", "金额");
|
|
headers.put("num", "数量");
|
|
headers.put("orderNo", "订单号");
|
|
headers.put("platform", "充值平台 PC:1 手机:2");
|
|
headers.put("rechargeTime", "充值时间");
|
|
|
|
// 如果需要翻译,则翻译表头
|
|
if (!isChineseLanguage(lang)) {
|
|
return translateHeaders(headers, lang);
|
|
}
|
|
|
|
return headers;
|
|
}
|
|
|
|
/**
|
|
* 获取在线充值明细表头顺序
|
|
*/
|
|
public List<String> getBeanOnlineRechargeColumnOrder() {
|
|
return Arrays.asList(
|
|
"jwcode", "name", "market", "money", "num", "orderNo", "platform", "rechargeTime"
|
|
);
|
|
}
|
|
|
|
/**
|
|
* 获取现金收款明细的Excel表头映射
|
|
* 返回 Map<字段名, 中文表头>
|
|
*/
|
|
public Map<String, String> getCashCollectionHeaders(String lang) {
|
|
Map<String, String> headers = new LinkedHashMap<>();
|
|
|
|
// 定义所有表头的原始中文名称(对应 CashCollection 类的字段)
|
|
headers.put("id", "序号");
|
|
headers.put("jwcode", "精网号");
|
|
headers.put("name", "姓名");
|
|
headers.put("marketName", "所属地区");
|
|
headers.put("activity", "活动名称");
|
|
headers.put("orderCode", "金币订单号");
|
|
headers.put("bankCode", "银行流水订单号");
|
|
headers.put("goodsName", "商品名称");
|
|
headers.put("goodNum", "商品数量");
|
|
headers.put("numUnit", "数量单位");
|
|
headers.put("permanentGold", "永久金币数量");
|
|
headers.put("freeGold", "免费金币数量");
|
|
headers.put("paymentCurrency", "付款币种");
|
|
headers.put("paymentAmount", "付款金额");
|
|
headers.put("receivedCurrency", "到账币种");
|
|
headers.put("receivedAmount", "到账金额");
|
|
headers.put("handlingCharge", "手续费");
|
|
headers.put("receivedMarket", "到账地区");
|
|
headers.put("payType", "支付方式");
|
|
headers.put("payTime", "付款时间");
|
|
headers.put("receivedTime", "到账时间");
|
|
headers.put("submitterName", "提交人姓名");
|
|
headers.put("voucher", "转账凭证");
|
|
headers.put("remark", "备注");
|
|
headers.put("auditName", "审核人");
|
|
|
|
// 如果需要翻译,则翻译表头
|
|
if (!isChineseLanguage(lang)) {
|
|
return translateHeaders(headers, lang);
|
|
}
|
|
|
|
return headers;
|
|
}
|
|
|
|
/**
|
|
* 获取现金收款明细表头顺序
|
|
*/
|
|
public List<String> getCashCollectionColumnOrder() {
|
|
return Arrays.asList(
|
|
"id", "jwcode", "name", "marketName", "activity", "orderCode", "bankCode",
|
|
"goodsName", "goodNum", "numUnit", "permanentGold", "freeGold", "paymentCurrency",
|
|
"paymentAmount", "receivedCurrency", "receivedAmount", "handlingCharge",
|
|
"receivedMarket", "payType", "payTime", "receivedTime", "submitterName",
|
|
"voucher", "remark", "auditName"
|
|
);
|
|
}
|
|
|
|
/**
|
|
* 获取现金退款记录的Excel表头映射
|
|
* 返回 Map<字段名, 中文表头>
|
|
*/
|
|
public Map<String, String> getCashRecordHeaders(String lang) {
|
|
Map<String, String> headers = new LinkedHashMap<>();
|
|
|
|
// 定义所有表头的原始中文名称(对应 CashRecordDTO 类的字段)
|
|
headers.put("goodsName", "产品名称");
|
|
headers.put("goodsNum", "产品数量");
|
|
headers.put("numUnit", "产品单位");
|
|
headers.put("Submitter", "提交人");
|
|
headers.put("id", "序号");
|
|
headers.put("jwcode", "精网号");
|
|
headers.put("name", "姓名");
|
|
headers.put("market", "所属地区");
|
|
headers.put("status", "订单状态");
|
|
headers.put("remark", "备注");
|
|
headers.put("refundReason", "退款理由");
|
|
headers.put("refundModel", "退款方式");
|
|
|
|
// 如果需要翻译,则翻译表头
|
|
if (!isChineseLanguage(lang)) {
|
|
return translateHeaders(headers, lang);
|
|
}
|
|
|
|
return headers;
|
|
}
|
|
|
|
/**
|
|
* 获取现金退款记录表头顺序
|
|
*/
|
|
public List<String> getCashRecordColumnOrder() {
|
|
return Arrays.asList(
|
|
"goodsName", "goodsNum", "numUnit", "Submitter", "id", "jwcode", "name", "market",
|
|
"status", "remark", "refundReason", "refundModel"
|
|
);
|
|
}
|
|
|
|
/**
|
|
* 获取文章消费明细的Excel表头映射
|
|
* 返回 Map<字段名, 中文表头>
|
|
*/
|
|
public Map<String, String> getBeanConsumeArticleHeaders(String lang) {
|
|
Map<String, String> headers = new LinkedHashMap<>();
|
|
|
|
// 定义所有表头的原始中文名称(对应 BeanConsumeArticle 类的字段)
|
|
headers.put("id", "ID");
|
|
headers.put("name", "姓名");
|
|
headers.put("jwcode", "精网号");
|
|
headers.put("dept", "地区");
|
|
headers.put("type", "类型 9-打赏 10-打赏 11-付费");
|
|
headers.put("beanNum", "金豆总数");
|
|
headers.put("buyBean", "付费金豆数");
|
|
headers.put("freeBean", "免费金豆数");
|
|
headers.put("articleId", "文章/视频ID");
|
|
headers.put("articleName", "文章/视频标题");
|
|
headers.put("author", "作者");
|
|
headers.put("consumeTime", "付费时间");
|
|
|
|
// 如果需要翻译,则翻译表头
|
|
if (!isChineseLanguage(lang)) {
|
|
return translateHeaders(headers, lang);
|
|
}
|
|
|
|
return headers;
|
|
}
|
|
|
|
/**
|
|
* 获取文章消费明细表头顺序
|
|
*/
|
|
public List<String> getBeanConsumeArticleColumnOrder() {
|
|
return Arrays.asList(
|
|
"id", "name", "jwcode", "dept", "type", "beanNum", "buyBean",
|
|
"freeBean", "articleId", "articleName", "author", "consumeTime"
|
|
);
|
|
}
|
|
|
|
/**
|
|
* 获取系统充值明细的Excel表头映射
|
|
* 返回 Map<字段名, 中文表头>
|
|
*/
|
|
public Map<String, String> getBeanSystemRechargeHeaders(String lang) {
|
|
Map<String, String> headers = new LinkedHashMap<>();
|
|
|
|
// 定义所有表头的原始中文名称(对应 BeanSystemRechargeInfo 类的字段)
|
|
headers.put("id", "ID");
|
|
headers.put("jwcode", "精网号");
|
|
headers.put("name", "姓名");
|
|
headers.put("market", "所属地区");
|
|
headers.put("freeBean", "免费金豆");
|
|
headers.put("permanentBean", "付费金豆");
|
|
headers.put("remark", "备注");
|
|
headers.put("rechargeTime", "充值时间");
|
|
|
|
// 如果需要翻译,则翻译表头
|
|
if (!isChineseLanguage(lang)) {
|
|
return translateHeaders(headers, lang);
|
|
}
|
|
|
|
return headers;
|
|
}
|
|
|
|
/**
|
|
* 获取系统充值明细表头顺序
|
|
*/
|
|
public List<String> getBeanSystemRechargeColumnOrder() {
|
|
return Arrays.asList(
|
|
"id","jwcode", "name", "market", "freeBean", "permanentBean", "remark", "rechargeTime"
|
|
);
|
|
}
|
|
|
|
/**
|
|
* 获取铁粉消费明细的Excel表头映射
|
|
* 返回 Map<字段名, 中文表头>
|
|
*/
|
|
public Map<String, String> getBeanConsumeFanHeaders(String lang) {
|
|
Map<String, String> headers = new LinkedHashMap<>();
|
|
|
|
// 定义所有表头的原始中文名称(对应 BeanConsumeFan 类的字段)
|
|
headers.put("id", "ID");
|
|
headers.put("name", "姓名");
|
|
headers.put("jwcode", "精网号");
|
|
headers.put("dept", "地区");
|
|
headers.put("beanNum", "金豆数量");
|
|
headers.put("freeBean", "免费金豆数");
|
|
headers.put("buyBean", "付费金豆数");
|
|
headers.put("channel", "频道");
|
|
headers.put("type", "会员类型");
|
|
headers.put("consumeTime", "加入时间");
|
|
|
|
// 如果需要翻译,则翻译表头
|
|
if (!isChineseLanguage(lang)) {
|
|
return translateHeaders(headers, lang);
|
|
}
|
|
|
|
return headers;
|
|
}
|
|
|
|
/**
|
|
* 获取铁粉消费明细表头顺序
|
|
*/
|
|
public List<String> getBeanConsumeFanColumnOrder() {
|
|
return Arrays.asList(
|
|
"id", "name", "jwcode", "dept", "beanNum", "freeBean", "buyBean",
|
|
"channel", "type", "consumeTime"
|
|
);
|
|
}
|
|
|
|
/**
|
|
* 获取用户金币余额的Excel表头映射
|
|
* 返回 Map<字段名, 中文表头>
|
|
*/
|
|
public Map<String, String> getUserHeaders(String lang) {
|
|
Map<String, String> headers = new LinkedHashMap<>();
|
|
|
|
// 定义所有表头的原始中文名称(对应 User 类的字段)
|
|
headers.put("id", "客户id");
|
|
headers.put("jwcode", "精网号");
|
|
headers.put("name", "姓名");
|
|
headers.put("market", "所属地区");
|
|
headers.put("sumGold", "金币总数");
|
|
headers.put("currentPermanentGold", "当前永久金币");
|
|
headers.put("currentFreeJune", "当前六月到期免费金币");
|
|
headers.put("currentFreeDecember", "当前十二月到期免费金币");
|
|
headers.put("currentTaskGold", "当前任务金币");
|
|
headers.put("rechargeNum", "充值次数(25年起)");
|
|
headers.put("consumeNum", "消费次数(25年起)");
|
|
headers.put("firstRecharge", "首充日期");
|
|
headers.put("createTime", "创建时间");
|
|
headers.put("updateTime", "更新时间");
|
|
|
|
// 如果需要翻译,则翻译表头
|
|
if (!isChineseLanguage(lang)) {
|
|
return translateHeaders(headers, lang);
|
|
}
|
|
|
|
return headers;
|
|
}
|
|
|
|
/**
|
|
* 获取用户金币余额表头顺序
|
|
*/
|
|
public List<String> getUserColumnOrder() {
|
|
return Arrays.asList(
|
|
"id", "jwcode", "name", "market", "sumGold", "currentPermanentGold",
|
|
"currentFreeJune", "currentFreeDecember", "currentTaskGold", "rechargeNum",
|
|
"consumeNum", "firstRecharge", "createTime", "updateTime"
|
|
);
|
|
}
|
|
|
|
/**
|
|
* 获取金币明细的Excel表头映射
|
|
* 返回 Map<字段名, 中文表头>
|
|
*/
|
|
public Map<String, String> getGoldDetailHeaders(String lang) {
|
|
Map<String, String> headers = new LinkedHashMap<>();
|
|
|
|
// 定义所有表头的原始中文名称(对应 GoldDetail 类的字段)
|
|
headers.put("name", "姓名");
|
|
headers.put("jwcode", "精网号");
|
|
headers.put("market", "所属地区");
|
|
headers.put("payPlatform", "平台信息");
|
|
headers.put("typeDesc", "更新类型");
|
|
headers.put("sumGold", "金币数量");
|
|
headers.put("permanentGold", "永久金币");
|
|
headers.put("freeGold", "免费金币");
|
|
headers.put("taskGold", "任务金币");
|
|
headers.put("adminName", "提交人");
|
|
headers.put("auditTime", "更新时间");
|
|
|
|
// 如果需要翻译,则翻译表头
|
|
if (!isChineseLanguage(lang)) {
|
|
return translateHeaders(headers, lang);
|
|
}
|
|
|
|
return headers;
|
|
}
|
|
|
|
/**
|
|
* 获取金币明细表头顺序
|
|
*/
|
|
public List<String> getGoldDetailColumnOrder() {
|
|
return Arrays.asList(
|
|
"name", "jwcode", "market", "payPlatform", "typeDesc", "sumGold",
|
|
"permanentGold", "freeGold", "taskGold", "adminName", "auditTime"
|
|
);
|
|
}
|
|
|
|
/**
|
|
* 翻译表头
|
|
*/
|
|
private Map<String, String> translateHeaders(Map<String, String> headers, String lang) {
|
|
log.info("开始翻译表头,目标语言: {}", lang);
|
|
Map<String, String> translatedHeaders = new LinkedHashMap<>();
|
|
for (Map.Entry<String, String> entry : headers.entrySet()) {
|
|
String translatedHeader = languageTranslationUtil.translate(entry.getValue(), lang);
|
|
log.debug("表头翻译: {} -> {}", entry.getValue(), translatedHeader);
|
|
translatedHeaders.put(entry.getKey(), translatedHeader);
|
|
}
|
|
return translatedHeaders;
|
|
}
|
|
|
|
/**
|
|
* 检查是否为中文语言
|
|
*/
|
|
private boolean isChineseLanguage(String lang) {
|
|
if (lang == null) return true;
|
|
String langLower = lang.toLowerCase();
|
|
return langLower.startsWith("zh") || langLower.equals("zh_cn") || langLower.equals("zh-tw");
|
|
}
|
|
}
|