Browse Source

1月15日,业绩归属导出配置及多语言翻译

milestone-20260113-现金管理0109
wangguorui 1 day ago
parent
commit
a8cda58028
  1. 2
      src/main/java/com/example/demo/Export/ExportService.java
  2. 22
      src/main/java/com/example/demo/Export/ExportServiceImpl.java
  3. 36
      src/main/java/com/example/demo/Util/ExcelHeaderTranslator.java
  4. 83
      src/main/java/com/example/demo/controller/cash/CashCollectionController.java
  5. 57
      src/main/java/com/example/demo/controller/coin/ExportController.java
  6. 12
      src/main/java/com/example/demo/domain/DTO/PerformanceDTO.java
  7. 2
      src/main/java/com/example/demo/domain/vo/cash/PerformanceVO.java
  8. 3
      src/main/java/com/example/demo/domain/vo/coin/Page.java
  9. 3
      src/main/java/com/example/demo/mapper/cash/CashCollectionMapper.java
  10. 4
      src/main/java/com/example/demo/service/cash/CashCollectionService.java
  11. 1
      src/main/java/com/example/demo/service/coin/ExportExcelService.java
  12. 27
      src/main/java/com/example/demo/service/listen/PerformanceListener.java
  13. 6
      src/main/java/com/example/demo/serviceImpl/cash/CashCollectionServiceImpl.java
  14. 96
      src/main/java/com/example/demo/serviceImpl/coin/ExportExcelServiceImpl.java

2
src/main/java/com/example/demo/Export/ExportService.java

@ -32,4 +32,6 @@ public interface ExportService {
Result addExportFinance(FinanceDTO dto);
Result addExportCash(CashDTO dto);
//业绩归属导出
Result addExportPerformance(PerformanceDTO dto);
}

22
src/main/java/com/example/demo/Export/ExportServiceImpl.java

@ -138,6 +138,11 @@ public class ExportServiceImpl implements ExportService {
cashDTO.setUrl("");
cashDTO.setFileName(generateFileName("现金收款明细", adminName, lang));
cashDTO.setDataNum(0);
} else if(dto instanceof PerformanceDTO performanceDTO){
performanceDTO.setAccount(Integer.valueOf(account));
performanceDTO.setUrl("");
performanceDTO.setFileName(generateFileName("业绩归属明细", adminName, lang));
performanceDTO.setDataNum(0);
}
}
@ -245,6 +250,16 @@ public class ExportServiceImpl implements ExportService {
cashDTO.getFileName(),
cashDTO.getDataNum()
);
}else if (dto instanceof PerformanceDTO performanceDTO){
goldDetailMapper.insertExportRecord(
idHolder,
account,
performanceDTO.getType(),
performanceDTO.getState(),
performanceDTO.getUrl(),
performanceDTO.getFileName(),
performanceDTO.getDataNum()
);
}
}
@ -278,6 +293,8 @@ public class ExportServiceImpl implements ExportService {
requestData.put(requestDataKey, financeDTO.getCashRecordDTO());
}else if (dto instanceof CashDTO cashDTO){
requestData.put(requestDataKey, cashDTO.getCashCollection());
}else if (dto instanceof PerformanceDTO performanceDTO){
requestData.put(requestDataKey, performanceDTO.getPerformanceVO());
}
exportData.put("requestData", requestData);
@ -345,4 +362,9 @@ public class ExportServiceImpl implements ExportService {
public Result addExportCash(CashDTO dto) {
return addExport(dto, "现金收款明细", "cash:queue:export_queue", "cashCollection", dto.getLang());
}
@Override
public Result addExportPerformance(PerformanceDTO dto) {
return addExport(dto, "业绩明细", "performance:queue:export_queue", "performanceVO", dto.getLang());
}
}

36
src/main/java/com/example/demo/Util/ExcelHeaderTranslator.java

@ -513,6 +513,42 @@ public class ExcelHeaderTranslator {
}
/**
* 获取业绩归属的Excel表头映射
* 返回 Map<字段名, 中文表头>
*/
public Map<String, String> getPerformanceHeaders(String lang) {
Map<String, String> headers = new LinkedHashMap<>();
// 定义所有表头的原始中文名称对应 PerformanceVO 类的字段
headers.put("jwcode", "精网号");
headers.put("name", "姓名");
headers.put("marketName", "所属地区");
headers.put("orderCode", "金币订单号");
headers.put("paymentCurrency", "付款币种");
headers.put("paymentAmount", "付款金额");
headers.put("receivedCurrency", "到账币种");
headers.put("receivedAmount", "到账金额");
headers.put("handlingCharge", "手续费");
// 如果需要翻译则翻译表头
if (!isChineseLanguage(lang)) {
return translateHeaders(headers, lang);
}
return headers;
}
/**
* 获取业绩归属表头顺序
*/
public List<String> getPerformanceColumnOrder() {
return Arrays.asList(
"jwcode", "name", "marketName", "orderCode", "paymentCurrency", "paymentAmount",
"receivedCurrency", "receivedAmount", "handlingCharge"
);
}
/**
* 翻译表头
*/
private Map<String, String> translateHeaders(Map<String, String> headers, String lang) {

83
src/main/java/com/example/demo/controller/cash/CashCollectionController.java

@ -8,6 +8,7 @@ import com.example.demo.domain.entity.CashRecord;
import com.example.demo.domain.entity.RechargeActivity;
import com.example.demo.domain.entity.User;
import com.example.demo.domain.vo.cash.CashCollection;
import com.example.demo.domain.vo.cash.PerformanceVO;
import com.example.demo.domain.vo.coin.Page;
import com.example.demo.domain.vo.coin.Result;
import com.example.demo.service.cash.CashCollectionService;
@ -275,16 +276,34 @@ public class CashCollectionController {
//根据id查询收款订单
@PostMapping("/performanceSelect")
public Result performanceSelect(@RequestBody Page page) {
public Result performanceSelect(@RequestBody Page page, @RequestHeader(defaultValue = "zh_CN") String lang) {
try {
return Result.success(cashCollectionService.performanceSelect(page.getPageNum(),page.getPageSize(),page.getPerformanceDTO()));
// 解析语言代码
String languageCode = parseLanguageCode(lang);
// 如果不是中文环境将查询条件中的翻译文本转换为中文简体
if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) {
convertTranslatedPerformanceFieldsToChinese(page.getPerformanceVO(), languageCode);
}
Result result = Result.success(cashCollectionService.performanceSelect(page.getPageNum(), page.getPageSize(), page.getPerformanceVO()));
// 对返回结果进行多语言转换
if (result.getCode() == 200 && result.getData() instanceof PageInfo) {
PageInfo<PerformanceVO> pageInfo = (PageInfo<PerformanceVO>) result.getData();
translatePerformanceVOs(pageInfo, lang);
}
return result;
} catch (Exception e) {
// 推送异常到飞书核心调用工具类
System.out.println(e.getMessage());
String errorMsg = languageTranslationUtil.translate(e.getMessage(), lang);
throw new SecurityException();
}
}
/**
* 转换现金收款订单的多语言字段
*/
@ -325,6 +344,37 @@ public class CashCollectionController {
}
/**
* 转换绩效数据的多语言字段
*/
private void translatePerformanceVOs(PageInfo<PerformanceVO> pageInfo, String lang) {
if (pageInfo != null && pageInfo.getList() != null) {
for (PerformanceVO performance : pageInfo.getList()) {
translateSinglePerformanceVO(performance, lang);
}
}
}
/**
* 转换单个绩效数据的多语言字段
*/
private void translateSinglePerformanceVO(PerformanceVO performance, String lang) {
if (performance != null) {
// 翻译市场名称
if (performance.getMarketName() != null) {
performance.setMarketName(languageTranslationUtil.translate(performance.getMarketName(), lang));
}
// 翻译支付币种
if (performance.getPaymentCurrency() != null) {
performance.setPaymentCurrency(languageTranslationUtil.translate(performance.getPaymentCurrency(), lang));
}
// 翻译到账币种
if (performance.getReceivedCurrency() != null) {
performance.setReceivedCurrency(languageTranslationUtil.translate(performance.getReceivedCurrency(), lang));
}
}
}
/**
* 解析语言代码
*/
private String parseLanguageCode(String langHeader) {
@ -433,4 +483,33 @@ public class CashCollectionController {
}
}
}
/**
* 将绩效查询条件中的翻译字段转换为中文简体
*/
private void convertTranslatedPerformanceFieldsToChinese(PerformanceVO performanceVO, String languageCode) {
if (performanceVO != null) {
// 转换市场名称
if (performanceVO.getMarketName() != null && !performanceVO.getMarketName().isEmpty()) {
String chineseMarketName = translationService.findChineseSimplifiedByTranslation(
performanceVO.getMarketName(), languageCode);
performanceVO.setMarketName(chineseMarketName);
}
// 转换支付币种
if (performanceVO.getPaymentCurrency() != null && !performanceVO.getPaymentCurrency().isEmpty()) {
String chinesePaymentCurrency = translationService.findChineseSimplifiedByTranslation(
performanceVO.getPaymentCurrency(), languageCode);
performanceVO.setPaymentCurrency(chinesePaymentCurrency);
}
// 转换到账币种
if (performanceVO.getReceivedCurrency() != null && !performanceVO.getReceivedCurrency().isEmpty()) {
String chineseReceivedCurrency = translationService.findChineseSimplifiedByTranslation(
performanceVO.getReceivedCurrency(), languageCode);
performanceVO.setReceivedCurrency(chineseReceivedCurrency);
}
}
}
}

57
src/main/java/com/example/demo/controller/coin/ExportController.java

@ -11,12 +11,12 @@ import com.example.demo.domain.DTO.CashDTO;
import com.example.demo.domain.vo.bean.*;
import com.example.demo.domain.vo.cash.CashCollection;
import com.example.demo.domain.vo.cash.CashRecordDTO;
import com.example.demo.domain.vo.cash.PerformanceVO;
import com.example.demo.domain.vo.coin.ConsumeUser;
import com.example.demo.domain.vo.coin.RechargeUser;
import com.example.demo.domain.vo.coin.RefundUser;
import com.example.demo.domain.vo.coin.Result;
import com.example.demo.service.coin.ExportExcelService;
import com.example.demo.service.coin.GoldDetailService;
import com.example.demo.Export.ExportService;
import com.example.demo.service.coin.TranslationService;
import jakarta.servlet.http.HttpServletRequest;
@ -370,6 +370,35 @@ public class ExportController {
}
}
@PostMapping("/exportPerformance")
public Result exportPerformance(@Valid @RequestBody PerformanceDTO dto, @RequestHeader(defaultValue = "zh_CN") String lang) {
String lockKey = "export:lock:" + dto.getToken();
String requestId = UUID.randomUUID().toString();
long expireTime = 5000;
dto.setLang(lang);// 设置语言参数
// 解析语言代码
String languageCode = parseLanguageCode(lang);
// 如果非中文环境将查询条件中的翻译文本转换为中文简体
if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) {
convertPerformanceTranslatedFieldsToChinese(dto.getPerformanceVO(), languageCode);
}
try {
// 尝试获取锁
if (!redisLockUtil.tryLock(lockKey, requestId, expireTime)) {
String errorMsg = languageTranslationUtil.translate("操作太频繁,请稍后重试", lang);
throw new BusinessException(errorMsg);
}
// 执行业务逻辑
return exportService.addExportPerformance(dto);
} finally {
// 释放锁
redisLockUtil.unlock(lockKey, requestId);
}
}
/**
* 解析语言代码
*/
@ -724,4 +753,30 @@ public class ExportController {
}
}
}
/**
* 将业绩归属条件中的翻译字段转换为中文简体
*/
private void convertPerformanceTranslatedFieldsToChinese(PerformanceVO performanceVO, String languageCode) {
if (performanceVO != null) {
// 翻译地区
if (performanceVO.getMarketName() != null && !performanceVO.getMarketName().isEmpty()) {
String chineseMarketName = translationService.findChineseSimplifiedByTranslation(
performanceVO.getMarketName(), languageCode);
performanceVO.setMarketName(chineseMarketName);
}
// 翻译付款币种
if (performanceVO.getPaymentCurrency() != null && !performanceVO.getPaymentCurrency().isEmpty()) {
String chinesePaymentCurrency = translationService.findChineseSimplifiedByTranslation(
performanceVO.getPaymentCurrency(), languageCode);
performanceVO.setPaymentCurrency(chinesePaymentCurrency);
}
// 翻译到账币种
if (performanceVO.getReceivedCurrency() != null && !performanceVO.getReceivedCurrency().isEmpty()) {
String chineseReceivedCurrency = translationService.findChineseSimplifiedByTranslation(
performanceVO.getReceivedCurrency(), languageCode);
performanceVO.setReceivedCurrency(chineseReceivedCurrency);
}
}
}
}

12
src/main/java/com/example/demo/domain/DTO/PerformanceDTO.java

@ -1,5 +1,6 @@
package com.example.demo.domain.DTO;
import com.example.demo.domain.vo.cash.PerformanceVO;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
@ -18,6 +19,14 @@ import java.util.List;
@Data
public class PerformanceDTO {
private String token;
private Integer account;
private String url = "";
private String fileName = "";
private Integer dataNum = 0;
private Integer type = 14; //类型
private Integer state = 0; //状态
List<String> adminMarket;
String jwcode;
List<String> customerMarket;
@ -25,5 +34,6 @@ public class PerformanceDTO {
private Date startTime; // 支付时间
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Shanghai")
private Date endTime; // 支付时间
private String lang;
private PerformanceVO performanceVO;
}

2
src/main/java/com/example/demo/domain/vo/cash/PerformanceVO.java

@ -25,7 +25,7 @@ public class PerformanceVO {
private Integer jwcode; // 精网号
private String name; // 姓名
@ExcelIgnore
private String market; // 所属地区
private Integer market; // 所属地区
private String marketName; // 所属地区
private String orderCode; // 金币订单号
private String paymentCurrency; // 付款币种

3
src/main/java/com/example/demo/domain/vo/coin/Page.java

@ -7,6 +7,7 @@ import com.example.demo.domain.vo.bean.*;
import com.example.demo.domain.vo.cash.CashCollection;
import com.example.demo.domain.vo.cash.CashRecordDTO;
import com.example.demo.domain.vo.cash.CashRecordDone;
import com.example.demo.domain.vo.cash.PerformanceVO;
import lombok.Data;
import lombok.NoArgsConstructor;
@ -51,6 +52,6 @@ public class Page {
private CashRecordDone cashRecordDone;
private RechargeActivity rechargeActivity; //充值活动
private CashRecordDTO cashRecordDTO;
private PerformanceDTO performanceDTO;//业绩归属
private PerformanceVO performanceVO;//业绩归属
}

3
src/main/java/com/example/demo/mapper/cash/CashCollectionMapper.java

@ -1,7 +1,6 @@
package com.example.demo.mapper.cash;
//import com.example.demo.domain.DTO.PaymentDTO;
import com.example.demo.domain.DTO.PerformanceDTO;
import com.example.demo.domain.entity.CashRecord;
import com.example.demo.domain.entity.GOrder;
import com.example.demo.domain.entity.RechargeActivity;
@ -71,5 +70,5 @@ public interface CashCollectionMapper {
@Param("auditId") Integer auditId,
@Param("version") Integer version);
List<PerformanceVO> performanceSelect(PerformanceDTO performanceDTO);
List<PerformanceVO> performanceSelect(PerformanceVO performanceDTO);
}

4
src/main/java/com/example/demo/service/cash/CashCollectionService.java

@ -1,13 +1,11 @@
package com.example.demo.service.cash;
import com.example.demo.domain.DTO.PerformanceDTO;
import com.example.demo.domain.entity.CashRecord;
import com.example.demo.domain.entity.GOrder;
import com.example.demo.domain.entity.RechargeActivity;
import com.example.demo.domain.entity.User;
import com.example.demo.domain.vo.cash.CashCollection;
import com.example.demo.domain.vo.cash.PerformanceVO;
import com.example.demo.domain.vo.coin.Result;
import com.github.pagehelper.PageInfo;
import java.util.List;
@ -47,6 +45,6 @@ public interface CashCollectionService {
//同步事务方法
void processBatch(List<GOrder> gOrders);
PageInfo<PerformanceVO> performanceSelect(Integer pageNum, Integer pageSize, PerformanceDTO performanceDTO);
PageInfo<PerformanceVO> performanceSelect(Integer pageNum, Integer pageSize, PerformanceVO performanceDTO);
}

1
src/main/java/com/example/demo/service/coin/ExportExcelService.java

@ -26,6 +26,7 @@ public interface ExportExcelService {
Exception LiveExcel(String message) throws Exception;
Exception FanExcel(String message) throws Exception;
Exception ArticleExcel(String message) throws Exception;
Exception PerformanceExcel(String message) throws Exception;
List<Export> getExcel(Export export);
Exception BeanExcel(String message) throws Exception;

27
src/main/java/com/example/demo/service/listen/PerformanceListener.java

@ -0,0 +1,27 @@
package com.example.demo.service.listen;
import com.example.demo.Util.RedisUtil;
import com.example.demo.service.coin.ExportExcelService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class PerformanceListener extends BaseMessageListener<String>{
@Autowired
private ExportExcelService exportExcelService;
protected PerformanceListener(RedisUtil redisQueueUtil) {
super(redisQueueUtil,"performance:queue:export_queue");
}
@Override
protected void handleMessage(String message) {
validateMessage( message);
try {
Thread.sleep(5000);
exportExcelService.PerformanceExcel(message);
} catch (Exception e) {
handleException(e, message);
}
}
}

6
src/main/java/com/example/demo/serviceImpl/cash/CashCollectionServiceImpl.java

@ -3,14 +3,12 @@ package com.example.demo.serviceImpl.cash;
import com.example.demo.Util.JWTUtil;
import com.example.demo.Util.LanguageTranslationUtil;
import com.example.demo.config.RabbitMQConfig;
import com.example.demo.domain.DTO.PerformanceDTO;
import com.example.demo.domain.entity.*;
import com.example.demo.domain.vo.cash.CashCollection;
import com.example.demo.domain.vo.cash.CashCollectionMessage;
import com.example.demo.domain.vo.cash.PerformanceVO;
import com.example.demo.domain.vo.coin.GoldUser;
import com.example.demo.domain.vo.coin.Messages;
import com.example.demo.domain.vo.coin.Result;
import com.example.demo.mapper.cash.CashCollectionMapper;
import com.example.demo.mapper.coin.MarketMapper;
import com.example.demo.mapper.coin.UserMapper;
@ -516,9 +514,9 @@ public User getNameAndMarket(Integer jwcode) {
//多条件查询收款订单列表
@Override
public PageInfo<PerformanceVO> performanceSelect(Integer pageNum, Integer pageSize, PerformanceDTO performanceDTO) {
public PageInfo<PerformanceVO> performanceSelect(Integer pageNum, Integer pageSize, PerformanceVO performanceVO) {
PageHelper.startPage(pageNum, pageSize); //必须要直接跟mapper
List<PerformanceVO> performanceVOs = cashCollectionMapper.performanceSelect(performanceDTO);
List<PerformanceVO> performanceVOs = cashCollectionMapper.performanceSelect(performanceVO);
return new PageInfo<>(performanceVOs);
}

96
src/main/java/com/example/demo/serviceImpl/coin/ExportExcelServiceImpl.java

@ -3,10 +3,7 @@ package com.example.demo.serviceImpl.coin;
import cn.hutool.log.AbstractLog;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.write.handler.SheetWriteHandler;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.alibaba.excel.write.metadata.holder.WriteSheetHolder;
import com.alibaba.excel.write.metadata.holder.WriteWorkbookHolder;
import com.example.demo.Util.ExcelHeaderTranslator;
import com.example.demo.Util.ExcelUploadUtil;
import com.example.demo.Util.JWTUtil;
@ -22,18 +19,15 @@ import com.example.demo.controller.coin.RefundController;
import com.example.demo.domain.entity.Admin;
import com.example.demo.domain.entity.Export;
import com.example.demo.domain.entity.User;
import com.example.demo.domain.export.Goldmingxi;
import com.example.demo.domain.vo.bean.*;
import com.example.demo.domain.vo.cash.CashCollection;
import com.example.demo.domain.vo.cash.CashRecordDTO;
import com.example.demo.domain.vo.cash.PerformanceVO;
import com.example.demo.domain.vo.coin.*;
import com.example.demo.mapper.cash.CashRefundMapper;
import com.example.demo.mapper.coin.ExportMapper;
import com.example.demo.service.cash.RefundService;
import com.example.demo.service.coin.ExportExcelService;
import com.example.demo.serviceImpl.cash.CashRefundServiceImpl;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
@ -42,19 +36,13 @@ import com.example.demo.service.coin.AiEmotionService;
import com.github.pagehelper.PageInfo;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.ss.formula.functions.Finance;
import org.apache.xmlbeans.impl.xb.xsdschema.Attribute;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.io.*;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.function.Function;
@ -239,6 +227,7 @@ public class ExportExcelServiceImpl implements ExportExcelService {
});
}
@Transactional
@Override
public Exception LiveExcel(String message) throws Exception {
return exportExcelGeneric(message, "liveUser", page -> {
@ -261,6 +250,7 @@ public class ExportExcelServiceImpl implements ExportExcelService {
});
}
@Transactional
@Override
public Exception FanExcel(String message) throws Exception {
return exportExcelGeneric(message, "fanUser", page -> {
@ -283,6 +273,7 @@ public class ExportExcelServiceImpl implements ExportExcelService {
});
}
@Transactional
@Override
public Exception ArticleExcel(String message) throws Exception {
return exportExcelGeneric(message, "articleUser", page -> {
@ -305,6 +296,7 @@ public class ExportExcelServiceImpl implements ExportExcelService {
});
}
@Transactional
@Override
public Exception BeanExcel(String message) throws Exception {
return exportExcelGeneric(message, "beanUser", page -> {
@ -327,6 +319,7 @@ public class ExportExcelServiceImpl implements ExportExcelService {
});
}
@Transactional
@Override
public Exception OnlineExcel(String message) throws Exception {
return exportExcelGeneric(message, "onlineUser", page -> {
@ -349,6 +342,7 @@ public class ExportExcelServiceImpl implements ExportExcelService {
});
}
@Transactional
@Override
public Exception FinanceExcel(String message) throws Exception {
return exportExcelGeneric(message, "financeUser", page -> {
@ -371,6 +365,7 @@ public class ExportExcelServiceImpl implements ExportExcelService {
});
}
@Transactional
@Override
public Exception CashExcel(String message) throws Exception {
return exportExcelGeneric(message, "cashUser", page -> {
@ -393,6 +388,29 @@ public class ExportExcelServiceImpl implements ExportExcelService {
});
}
@Transactional
@Override
public Exception PerformanceExcel(String message) throws Exception {
return exportExcelGeneric(message, "performanceUser", page -> {
try {
JsonNode rootNode = objectMapper.readTree(message);
JsonNode requestDataNode = rootNode.path("requestData");
JsonNode beanRechargeNode = requestDataNode.path("performanceVO");
PerformanceVO performanceVO = objectMapper.treeToValue(beanRechargeNode, PerformanceVO.class);
page.setPerformanceVO(performanceVO);
// 从请求数据中获取语言设置如果没有则使用默认值
String lang = "zh_CN";
JsonNode langNode = requestDataNode.path("lang");
if (langNode != null && !langNode.asText().isEmpty()) {
lang = langNode.asText();
}
return cashCollectionController.performanceSelect(page, lang);
} catch (Exception e) {
throw new RuntimeException(e);
}
});
}
@Override
public List<Export> getExcel(Export export) {
List<Export> list = exportMapper.getExportRecord(export.getAccount(),export.getType());
@ -702,6 +720,26 @@ public class ExportExcelServiceImpl implements ExportExcelService {
writeSheet = EasyExcel.writerSheet("Sheet1")
.head(head)
.build();
}
// 如果是业绩归属表添加动态表头处理器
else if ("performanceUser".equals(exportType)) {
Map<String, String> headers = excelHeaderTranslator.getPerformanceHeaders(lang);
List<String> columnOrder = excelHeaderTranslator.getPerformanceColumnOrder();
// 构建自定义表头
List<List<String>> head = new ArrayList<>();
for (String fieldName : columnOrder) {
String headerText = headers.get(fieldName);
if (headerText != null) {
List<String> headItems = new ArrayList<>();
headItems.add(headerText);
head.add(headItems);
}
}
writeSheet = EasyExcel.writerSheet("Sheet1")
.head(head)
.build();
} else {
writeSheet = EasyExcel.writerSheet("Sheet1").build();
}
@ -804,6 +842,11 @@ public class ExportExcelServiceImpl implements ExportExcelService {
translateUserList((List<User>) list, lang);
}
// 添加业绩归属翻译支持
if ("performanceUser".equals(exportType) && list.get(0) instanceof PerformanceVO) {
translatePerformanceList((List<PerformanceVO>) list, lang);
}
excelWriter.write(list, writeSheet);
page.setPageNum(page.getPageNum() + 1);
totalCount += list.size();
@ -952,6 +995,8 @@ public class ExportExcelServiceImpl implements ExportExcelService {
return CashRecordDTO.class;
case "cashUser":
return CashCollection.class;
case "performanceUser":
return PerformanceVO.class;
default:
throw new IllegalArgumentException("不支持的导出类型: " + exportType);
}
@ -1516,4 +1561,29 @@ public class ExportExcelServiceImpl implements ExportExcelService {
}
}
}
/**
* 翻译业绩归属列表
*/
private void translatePerformanceList(List<PerformanceVO> list, String lang) {
if (list == null || list.isEmpty() || "zh_CN".equalsIgnoreCase(lang) || "zh".equalsIgnoreCase(lang)) {
return;
}
for (PerformanceVO item : list) {
// 翻译所属地区名称
if (item.getMarketName() != null && !item.getMarketName().isEmpty()) {
item.setMarketName(languageTranslationUtil.translate(item.getMarketName(), lang));
}
// 翻译付款币种
if (item.getPaymentCurrency() != null && !item.getPaymentCurrency().isEmpty()) {
item.setPaymentCurrency(languageTranslationUtil.translate(item.getPaymentCurrency(), lang));
}
// 翻译到账币种
if (item.getReceivedCurrency() != null && !item.getReceivedCurrency().isEmpty()) {
item.setReceivedCurrency(languageTranslationUtil.translate(item.getReceivedCurrency(), lang));
}
}
}
}
Loading…
Cancel
Save