12 changed files with 675 additions and 161 deletions
-
447src/main/java/com/example/demo/Util/ExcelHeaderTranslator.java
-
13src/main/java/com/example/demo/domain/vo/bean/BeanConsumeArticle.java
-
11src/main/java/com/example/demo/domain/vo/bean/BeanConsumeFan.java
-
17src/main/java/com/example/demo/domain/vo/bean/BeanConsumeLive.java
-
12src/main/java/com/example/demo/domain/vo/bean/BeanOnlineRechargeInfo.java
-
9src/main/java/com/example/demo/domain/vo/bean/BeanSystemRechargeInfo.java
-
34src/main/java/com/example/demo/domain/vo/cash/CashCollection.java
-
15src/main/java/com/example/demo/domain/vo/cash/CashRecordDTO.java
-
17src/main/java/com/example/demo/domain/vo/coin/ConsumeUser.java
-
25src/main/java/com/example/demo/domain/vo/coin/RechargeUser.java
-
18src/main/java/com/example/demo/domain/vo/coin/RefundUser.java
-
218src/main/java/com/example/demo/serviceImpl/coin/ExportExcelServiceImpl.java
@ -0,0 +1,447 @@ |
|||
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" |
|||
); |
|||
} |
|||
|
|||
/** |
|||
* 翻译表头 |
|||
*/ |
|||
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"); |
|||
} |
|||
} |
|||
Write
Preview
Loading…
Cancel
Save
Reference in new issue