From fd662805a6215b6b4e8ab2b44a3622501156433d Mon Sep 17 00:00:00 2001 From: huangqizhen <15552608129@163.com> Date: Sun, 18 Jan 2026 13:57:23 +0800 Subject: [PATCH] =?UTF-8?q?1.17=20=E8=B5=84=E9=87=91=E6=B5=81=E6=B0=B4?= =?UTF-8?q?=E5=AF=BC=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/example/demo/Export/ExportService.java | 2 + .../com/example/demo/Export/ExportServiceImpl.java | 22 +++++++ .../demo/controller/cash/CashRefundController.java | 69 ++++++++++++++++++++++ .../demo/controller/coin/ExportController.java | 6 +- .../demo/service/coin/ExportExcelService.java | 2 + .../example/demo/service/listen/FundListener.java | 38 ++++++++++++ .../serviceImpl/coin/ExportExcelServiceImpl.java | 25 ++++++++ 7 files changed, 162 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/example/demo/service/listen/FundListener.java diff --git a/src/main/java/com/example/demo/Export/ExportService.java b/src/main/java/com/example/demo/Export/ExportService.java index b444be6..4a6e057 100644 --- a/src/main/java/com/example/demo/Export/ExportService.java +++ b/src/main/java/com/example/demo/Export/ExportService.java @@ -34,4 +34,6 @@ public interface ExportService { Result addExportCash(CashDTO dto); //业绩归属导出 Result addExportPerformance(PerformanceDTO dto); + + Result addExportFundDTO(FundDTO dto); } diff --git a/src/main/java/com/example/demo/Export/ExportServiceImpl.java b/src/main/java/com/example/demo/Export/ExportServiceImpl.java index 2ca9580..6dc5cf7 100644 --- a/src/main/java/com/example/demo/Export/ExportServiceImpl.java +++ b/src/main/java/com/example/demo/Export/ExportServiceImpl.java @@ -143,6 +143,11 @@ public class ExportServiceImpl implements ExportService { performanceDTO.setUrl(""); performanceDTO.setFileName(generateFileName("业绩归属明细", adminName, lang)); performanceDTO.setDataNum(0); + }else if (dto instanceof FundDTO fundDTO){ + fundDTO.setAccount(Integer.valueOf(account)); + fundDTO.setUrl(""); + fundDTO.setFileName(generateFileName("资金明细", adminName, lang)); + fundDTO.setDataNum(0); } } @@ -260,6 +265,16 @@ public class ExportServiceImpl implements ExportService { performanceDTO.getFileName(), performanceDTO.getDataNum() ); + }else if (dto instanceof FundDTO fundDTO){ + goldDetailMapper.insertExportRecord( + idHolder, + account, + fundDTO.getType(), + fundDTO.getState(), + fundDTO.getUrl(), + fundDTO.getFileName(), + fundDTO.getDataNum() + ); } } @@ -295,6 +310,8 @@ public class ExportServiceImpl implements ExportService { requestData.put(requestDataKey, cashDTO.getCashCollection()); }else if (dto instanceof PerformanceDTO performanceDTO){ requestData.put(requestDataKey, performanceDTO.getPerformanceVO()); + }else if (dto instanceof FundDTO fundDTO){ + requestData.put(requestDataKey, fundDTO.getFundsDTO()); } exportData.put("requestData", requestData); @@ -367,4 +384,9 @@ public class ExportServiceImpl implements ExportService { public Result addExportPerformance(PerformanceDTO dto) { return addExport(dto, "业绩明细", "performance:queue:export_queue", "performanceVO", dto.getLang()); } + + @Override + public Result addExportFundDTO(FundDTO dto) { + return addExport(dto, "资金流水明细", "fund:queue:export_queue", "fundsDTO", dto.getLang()); + } } diff --git a/src/main/java/com/example/demo/controller/cash/CashRefundController.java b/src/main/java/com/example/demo/controller/cash/CashRefundController.java index 4be7e77..9bdad51 100644 --- a/src/main/java/com/example/demo/controller/cash/CashRefundController.java +++ b/src/main/java/com/example/demo/controller/cash/CashRefundController.java @@ -411,6 +411,73 @@ public class CashRefundController { // 如果不是中文环境,将查询条件中的翻译文本转换为中文简体 if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) { + convertTranslatedFieldsToChinese(page.getCashRecordDTO(), languageCode); + } + + // 获取当前请求对象 + HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); + String token = request.getHeader("token"); + + // 解析 token 获取用户信息 + Admin admin = (Admin) JWTUtil.getUserDetailsList(String.valueOf(token), Admin.class); + List userMarkets = Arrays.asList(StringUtils.split(admin.getMarkets(), ",")); + List markets = marketService.getMarketIds(userMarkets); + + // 校验分页参数 + if (ObjectUtils.isEmpty(page.getPageNum())) { + String errorMsg = languageTranslationUtil.translate("页码数为空!", lang); + return Result.error(errorMsg); + } + if (ObjectUtils.isEmpty(page.getPageSize())) { + String errorMsg = languageTranslationUtil.translate("页大小为空!", lang); + return Result.error(errorMsg); + } + + // 获取传入的市场列表 + List requestedMarkets = page.getCashRecordDTO() != null ? page.getCashRecordDTO().getMarkets() : null; + + // 权限校验逻辑 + if (markets.contains("9") || markets.contains("9999")) { + // 特权市场:9 或 9999,跳过权限校验,直接放行传入的 markets + // 如果业务需要,也可以在这里做空值处理 + if (page.getCashRecordDTO() != null) { + // 保持 requestedMarkets 不变,原样接受 + // 可选:如果 requestedMarkets 为 null,可设为默认值或保持 null + } + } else { + // 普通用户:必须校验权限 + if (requestedMarkets == null || requestedMarkets.isEmpty()) { + page.getCashRecordDTO().setMarkets(markets); + } + if (!markets.containsAll(requestedMarkets)) { + String errorMsg = languageTranslationUtil.translate("无权限!请求的市场不在授权范围内。", lang); + return Result.error(errorMsg); + } + // 校验通过,保持 requestedMarkets 不变 + } + + Result result = Result.success(refundService.funds(page.getPageNum(), page.getPageSize(), page.getFundsDTO())); + + // 对返回结果进行多语言转换 + if (result.getCode() == 200 && result.getData() instanceof com.github.pagehelper.PageInfo) { + com.github.pagehelper.PageInfo pageInfo = (com.github.pagehelper.PageInfo) result.getData(); + translateFundsDTOs(pageInfo, lang); + } + + return result; + } catch (Exception e) { + String errorMsg = languageTranslationUtil.translate("查询失败", lang); + return Result.error(errorMsg + ": " + e.getMessage()); + } + } + + public Result exportFund(@RequestBody Page page,@RequestHeader (defaultValue = "zh_CN") String lang) { + try { + // 解析语言代码 + String languageCode = parseLanguageCode(lang); + + // 如果不是中文环境,将查询条件中的翻译文本转换为中文简体 + if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) { convertTranslatedFundsFieldsToChinese(page.getFundsDTO(), languageCode); } @@ -642,4 +709,6 @@ public class CashRefundController { } } } + + } 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 81e58e0..9a8a05f 100644 --- a/src/main/java/com/example/demo/controller/coin/ExportController.java +++ b/src/main/java/com/example/demo/controller/coin/ExportController.java @@ -399,6 +399,9 @@ public class ExportController { redisLockUtil.unlock(lockKey, requestId); } } + /** + * 资金导出 + */ @PostMapping("/exportFunds") public Result exportFunds(@Valid @RequestBody FundDTO dto, @RequestHeader(defaultValue = "zh_CN") String lang) { String lockKey = "export:lock:" + dto.getToken(); @@ -421,8 +424,7 @@ public class ExportController { throw new BusinessException(errorMsg); } // 执行业务逻辑 -// return exportService.addExportPerformance(dto); - return null; + return exportService.addExportFundDTO(dto); } finally { // 释放锁 redisLockUtil.unlock(lockKey, requestId); 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 23fd163..7bff0f2 100644 --- a/src/main/java/com/example/demo/service/coin/ExportExcelService.java +++ b/src/main/java/com/example/demo/service/coin/ExportExcelService.java @@ -39,4 +39,6 @@ public interface ExportExcelService { Exception FinanceExcel(String message) throws Exception; Exception CashExcel(String message) throws Exception; + + Exception FundExcel(String message) throws Exception; } \ No newline at end of file diff --git a/src/main/java/com/example/demo/service/listen/FundListener.java b/src/main/java/com/example/demo/service/listen/FundListener.java new file mode 100644 index 0000000..fe8bfbd --- /dev/null +++ b/src/main/java/com/example/demo/service/listen/FundListener.java @@ -0,0 +1,38 @@ +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; + +/** + * @program: GOLD + * @ClassName FundListener + * @description: + * @author: huangqizhen + * @create: 2026−01-18 13:41 + * @Version 1.0 + **/ +@Component +public class FundListener extends BaseMessageListener{ + + @Autowired + private ExportExcelService exportExcelService; + + protected FundListener(RedisUtil redisQueueUtil) { + super(redisQueueUtil, "fund:queue:export_queue"); + } + + @Override + protected void handleMessage(String message) { + validateMessage( message); + try { + Thread.sleep(5000); + exportExcelService.FundExcel(message); + } catch (Exception e) { + handleException(e, message); + } + + + } + } 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 b84e6ca..aa5e526 100644 --- a/src/main/java/com/example/demo/serviceImpl/coin/ExportExcelServiceImpl.java +++ b/src/main/java/com/example/demo/serviceImpl/coin/ExportExcelServiceImpl.java @@ -23,6 +23,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.FundsDTO; import com.example.demo.domain.vo.cash.PerformanceVO; import com.example.demo.domain.vo.coin.*; @@ -388,6 +389,28 @@ public class ExportExcelServiceImpl implements ExportExcelService { }); } + @Override + public Exception FundExcel(String message) throws Exception { + return exportExcelGeneric(message, "fundUser", page -> { + try { + JsonNode rootNode = objectMapper.readTree(message); + JsonNode requestDataNode = rootNode.path("requestData"); + JsonNode beanRechargeNode = requestDataNode.path("fundsDTO"); + FundsDTO fundsDTO = objectMapper.treeToValue(beanRechargeNode, FundsDTO.class); + page.setFundsDTO(fundsDTO); + // 从请求数据中获取语言设置,如果没有则使用默认值 + String lang = "zh_CN"; + JsonNode langNode = requestDataNode.path("lang"); + if (langNode != null && !langNode.asText().isEmpty()) { + lang = langNode.asText(); + } + return cashRefundController.exportFund(page, lang); + } catch (Exception e) { + throw new RuntimeException(e); + } + }); + } + @Transactional @Override public Exception PerformanceExcel(String message) throws Exception { @@ -997,6 +1020,8 @@ public class ExportExcelServiceImpl implements ExportExcelService { return CashCollection.class; case "performanceUser": return PerformanceVO.class; + case "fundUser": + return FundsDTO.class; default: throw new IllegalArgumentException("不支持的导出类型: " + exportType); }