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

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");
}
}