diff --git a/src/main/java/com/example/demo/Export/ExportService.java b/src/main/java/com/example/demo/Export/ExportService.java index f190b38..b444be6 100644 --- a/src/main/java/com/example/demo/Export/ExportService.java +++ b/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); } diff --git a/src/main/java/com/example/demo/Export/ExportServiceImpl.java b/src/main/java/com/example/demo/Export/ExportServiceImpl.java index 265a339..2ca9580 100644 --- a/src/main/java/com/example/demo/Export/ExportServiceImpl.java +++ b/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()); + } } diff --git a/src/main/java/com/example/demo/Util/ExcelHeaderTranslator.java b/src/main/java/com/example/demo/Util/ExcelHeaderTranslator.java index 66c9b8c..1ab7269 100644 --- a/src/main/java/com/example/demo/Util/ExcelHeaderTranslator.java +++ b/src/main/java/com/example/demo/Util/ExcelHeaderTranslator.java @@ -513,6 +513,42 @@ public class ExcelHeaderTranslator { } /** + * 获取业绩归属的Excel表头映射 + * 返回 Map<字段名, 中文表头> + */ + public Map getPerformanceHeaders(String lang) { + Map 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 getPerformanceColumnOrder() { + return Arrays.asList( + "jwcode", "name", "marketName", "orderCode", "paymentCurrency", "paymentAmount", + "receivedCurrency", "receivedAmount", "handlingCharge" + ); + } + + /** * 翻译表头 */ private Map translateHeaders(Map headers, String lang) { diff --git a/src/main/java/com/example/demo/controller/cash/CashCollectionController.java b/src/main/java/com/example/demo/controller/cash/CashCollectionController.java index e2266ce..5edd41f 100644 --- a/src/main/java/com/example/demo/controller/cash/CashCollectionController.java +++ b/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 pageInfo = (PageInfo) 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 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); + } + } + } + } diff --git a/src/main/java/com/example/demo/controller/coin/ExportController.java b/src/main/java/com/example/demo/controller/coin/ExportController.java index 8fe9993..babbba4 100644 --- a/src/main/java/com/example/demo/controller/coin/ExportController.java +++ b/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); + } + } + } } diff --git a/src/main/java/com/example/demo/domain/DTO/PerformanceDTO.java b/src/main/java/com/example/demo/domain/DTO/PerformanceDTO.java index 4ab48ff..c6ba52f 100644 --- a/src/main/java/com/example/demo/domain/DTO/PerformanceDTO.java +++ b/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 adminMarket; String jwcode; List 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; } diff --git a/src/main/java/com/example/demo/domain/vo/cash/PerformanceVO.java b/src/main/java/com/example/demo/domain/vo/cash/PerformanceVO.java index 5161c72..bbcf9de 100644 --- a/src/main/java/com/example/demo/domain/vo/cash/PerformanceVO.java +++ b/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; // 付款币种 diff --git a/src/main/java/com/example/demo/domain/vo/coin/Page.java b/src/main/java/com/example/demo/domain/vo/coin/Page.java index 5317271..491d6f2 100644 --- a/src/main/java/com/example/demo/domain/vo/coin/Page.java +++ b/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;//业绩归属 } diff --git a/src/main/java/com/example/demo/mapper/cash/CashCollectionMapper.java b/src/main/java/com/example/demo/mapper/cash/CashCollectionMapper.java index 0645c61..7de0669 100644 --- a/src/main/java/com/example/demo/mapper/cash/CashCollectionMapper.java +++ b/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 performanceSelect(PerformanceDTO performanceDTO); + List performanceSelect(PerformanceVO performanceDTO); } diff --git a/src/main/java/com/example/demo/service/cash/CashCollectionService.java b/src/main/java/com/example/demo/service/cash/CashCollectionService.java index 56e960b..f4146e6 100644 --- a/src/main/java/com/example/demo/service/cash/CashCollectionService.java +++ b/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 gOrders); - PageInfo performanceSelect(Integer pageNum, Integer pageSize, PerformanceDTO performanceDTO); + PageInfo performanceSelect(Integer pageNum, Integer pageSize, PerformanceVO performanceDTO); } diff --git a/src/main/java/com/example/demo/service/coin/ExportExcelService.java b/src/main/java/com/example/demo/service/coin/ExportExcelService.java index c65b87e..23fd163 100644 --- a/src/main/java/com/example/demo/service/coin/ExportExcelService.java +++ b/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 getExcel(Export export); Exception BeanExcel(String message) throws Exception; diff --git a/src/main/java/com/example/demo/service/listen/PerformanceListener.java b/src/main/java/com/example/demo/service/listen/PerformanceListener.java new file mode 100644 index 0000000..03d61ed --- /dev/null +++ b/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{ + @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); + } + } +} diff --git a/src/main/java/com/example/demo/serviceImpl/cash/CashCollectionServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/cash/CashCollectionServiceImpl.java index 1751c1e..7790a5d 100644 --- a/src/main/java/com/example/demo/serviceImpl/cash/CashCollectionServiceImpl.java +++ b/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 performanceSelect(Integer pageNum, Integer pageSize, PerformanceDTO performanceDTO) { + public PageInfo performanceSelect(Integer pageNum, Integer pageSize, PerformanceVO performanceVO) { PageHelper.startPage(pageNum, pageSize); //必须要直接跟mapper - List performanceVOs = cashCollectionMapper.performanceSelect(performanceDTO); + List performanceVOs = cashCollectionMapper.performanceSelect(performanceVO); return new PageInfo<>(performanceVOs); } diff --git a/src/main/java/com/example/demo/serviceImpl/coin/ExportExcelServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/coin/ExportExcelServiceImpl.java index ccd0e2e..b84e6ca 100644 --- a/src/main/java/com/example/demo/serviceImpl/coin/ExportExcelServiceImpl.java +++ b/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 getExcel(Export export) { List 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 headers = excelHeaderTranslator.getPerformanceHeaders(lang); + List columnOrder = excelHeaderTranslator.getPerformanceColumnOrder(); + + // 构建自定义表头 + List> head = new ArrayList<>(); + for (String fieldName : columnOrder) { + String headerText = headers.get(fieldName); + if (headerText != null) { + List 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) list, lang); } + // 添加业绩归属翻译支持 + if ("performanceUser".equals(exportType) && list.get(0) instanceof PerformanceVO) { + translatePerformanceList((List) 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 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)); + } + } + } }