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 getRechargeHeaders(String lang) { Map 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 getRechargeColumnOrder() { return Arrays.asList( "name", "orderCode", "jwcode", "market", "activity", "rateName", "money", "permanentGold", "freeGold", "payModel", "payPlatform", "isRefund", "remark", "adminName", "auditTime" ); } /** * 获取消费明细的Excel表头映射 * 返回 Map<字段名, 中文表头> */ public Map getConsumeHeaders(String lang) { Map 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 getConsumeColumnOrder() { return Arrays.asList( "name", "orderCode", "jwcode", "market", "goodsName", "payPlatform", "sumGold", "permanentGold", "freeGold", "taskGold", "remark", "adminName", "isRefund", "createTime", "price" ); } /** * 获取退款明细的Excel表头映射 * 返回 Map<字段名, 中文表头> */ public Map getRefundHeaders(String lang) { Map 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 getRefundColumnOrder() { return Arrays.asList( "orderCode", "name", "jwcode", "market", "goodsName", "refundType", "refundModelDesc", "sumGold", "permanentGold", "freeGold", "taskGold", "remark", "adminName", "auditTime" ); } /** * 获取直播消费明细的Excel表头映射 * 返回 Map<字段名, 中文表头> */ public Map getBeanConsumeLiveHeaders(String lang) { Map 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 getBeanConsumeLiveColumnOrder() { return Arrays.asList( "id", "name", "jwcode", "dept", "gift", "isBackpack", "beanNum", "liveChannel", "freeBean", "buyBean", "liveName", "consumeTime" ); } /** * 获取在线充值明细的Excel表头映射 * 返回 Map<字段名, 中文表头> */ public Map getBeanOnlineRechargeHeaders(String lang) { Map 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 getBeanOnlineRechargeColumnOrder() { return Arrays.asList( "jwcode", "name", "market", "money", "num", "orderNo", "platform", "rechargeTime" ); } /** * 获取现金收款明细的Excel表头映射 * 返回 Map<字段名, 中文表头> */ public Map getCashCollectionHeaders(String lang) { Map 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 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 getCashRecordHeaders(String lang) { Map 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 getCashRecordColumnOrder() { return Arrays.asList( "goodsName", "goodsNum", "numUnit", "Submitter", "id", "jwcode", "name", "market", "status", "remark", "refundReason", "refundModel" ); } /** * 获取文章消费明细的Excel表头映射 * 返回 Map<字段名, 中文表头> */ public Map getBeanConsumeArticleHeaders(String lang) { Map 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 getBeanConsumeArticleColumnOrder() { return Arrays.asList( "id", "name", "jwcode", "dept", "type", "beanNum", "buyBean", "freeBean", "articleId", "articleName", "author", "consumeTime" ); } /** * 获取系统充值明细的Excel表头映射 * 返回 Map<字段名, 中文表头> */ public Map getBeanSystemRechargeHeaders(String lang) { Map 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 getBeanSystemRechargeColumnOrder() { return Arrays.asList( "id","jwcode", "name", "market", "freeBean", "permanentBean", "remark", "rechargeTime" ); } /** * 获取铁粉消费明细的Excel表头映射 * 返回 Map<字段名, 中文表头> */ public Map getBeanConsumeFanHeaders(String lang) { Map 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 getBeanConsumeFanColumnOrder() { return Arrays.asList( "id", "name", "jwcode", "dept", "beanNum", "freeBean", "buyBean", "channel", "type", "consumeTime" ); } /** * 获取用户金币余额的Excel表头映射 * 返回 Map<字段名, 中文表头> */ public Map getUserHeaders(String lang) { Map 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 getUserColumnOrder() { return Arrays.asList( "id", "jwcode", "name", "market", "sumGold", "currentPermanentGold", "currentFreeJune", "currentFreeDecember", "currentTaskGold", "rechargeNum", "consumeNum", "firstRecharge", "createTime", "updateTime" ); } /** * 获取金币明细的Excel表头映射 * 返回 Map<字段名, 中文表头> */ public Map getGoldDetailHeaders(String lang) { Map 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 getGoldDetailColumnOrder() { return Arrays.asList( "name", "jwcode", "market", "payPlatform", "typeDesc", "sumGold", "permanentGold", "freeGold", "taskGold", "adminName", "auditTime" ); } /** * 翻译表头 */ private Map translateHeaders(Map headers, String lang) { log.info("开始翻译表头,目标语言: {}", lang); Map translatedHeaders = new LinkedHashMap<>(); for (Map.Entry 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"); } }