Browse Source

1.17 资金流水导出

lijianlin/feature-20260113-现金管理0109
huangqizhen 1 month ago
parent
commit
fd662805a6
  1. 2
      src/main/java/com/example/demo/Export/ExportService.java
  2. 22
      src/main/java/com/example/demo/Export/ExportServiceImpl.java
  3. 69
      src/main/java/com/example/demo/controller/cash/CashRefundController.java
  4. 6
      src/main/java/com/example/demo/controller/coin/ExportController.java
  5. 2
      src/main/java/com/example/demo/service/coin/ExportExcelService.java
  6. 38
      src/main/java/com/example/demo/service/listen/FundListener.java
  7. 25
      src/main/java/com/example/demo/serviceImpl/coin/ExportExcelServiceImpl.java

2
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);
}

22
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());
}
}

69
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<String> userMarkets = Arrays.asList(StringUtils.split(admin.getMarkets(), ","));
List<String> 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<String> 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<FundsDTO> pageInfo = (com.github.pagehelper.PageInfo<FundsDTO>) 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 {
}
}
}
}

6
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);

2
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;
}

38
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: 202601-18 13:41
* @Version 1.0
**/
@Component
public class FundListener extends BaseMessageListener<String>{
@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);
}
}
}

25
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);
}

Loading…
Cancel
Save