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 0316c0e..799e897 100644 --- a/src/main/java/com/example/demo/controller/cash/CashCollectionController.java +++ b/src/main/java/com/example/demo/controller/cash/CashCollectionController.java @@ -1,6 +1,7 @@ package com.example.demo.controller.cash; import com.example.demo.Util.JWTUtil; +import com.example.demo.Util.LanguageTranslationUtil; import com.example.demo.domain.entity.Admin; import com.example.demo.domain.entity.CashRecord; import com.example.demo.domain.entity.RechargeActivity; @@ -9,6 +10,7 @@ import com.example.demo.domain.vo.cash.CashCollection; import com.example.demo.domain.vo.coin.Page; import com.example.demo.domain.vo.coin.Result; import com.example.demo.service.cash.CashCollectionService; +import com.example.demo.service.coin.TranslationService; import com.github.pagehelper.PageInfo; import jakarta.servlet.http.HttpServletRequest; import lombok.RequiredArgsConstructor; @@ -39,16 +41,23 @@ public class CashCollectionController { @Autowired private CashCollectionService cashCollectionService; + @Autowired + private LanguageTranslationUtil languageTranslationUtil; + + @Autowired + private TranslationService translationService; + //根据精网号获取姓名和地区 @PostMapping("/getNameAndMarket") - public Result getNameAndMarket(@RequestBody Integer jwcode) { + public Result getNameAndMarket(@RequestBody Integer jwcode, @RequestHeader(defaultValue = "zh_CN") String lang) { try { - return Result.success(cashCollectionService.getNameAndMarket(jwcode)); } catch (Exception e) { - return Result.error(e.getMessage()); + String errorMsg = languageTranslationUtil.translate(e.getMessage(), lang); + return Result.error(errorMsg); } } + //获取收款活动列表 @PostMapping("/getActivityList") public Result getActivityList() @@ -58,108 +67,345 @@ public class CashCollectionController { } //新增收款订单 @PostMapping("/add") - public Result add(@RequestBody CashCollection cashCollection) { + public Result add(@RequestBody CashCollection cashCollection, @RequestHeader(defaultValue = "zh_CN") String lang) { try { + // 解析语言代码 + String languageCode = parseLanguageCode(lang); - return Result.success(cashCollectionService.add(cashCollection)); + // 如果不是中文环境,将查询条件中的翻译文本转换为中文简体 + if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) { + convertTranslatedFieldsToChinese(cashCollection, languageCode); + } + + String result = cashCollectionService.add(cashCollection); + String successMsg = languageTranslationUtil.translate(result, lang); + return Result.success(successMsg); } catch (Exception e) { - return Result.error(e.getMessage()); + String errorMsg = languageTranslationUtil.translate(e.getMessage(), lang); + return Result.error(errorMsg); } } + //撤回未审核的收款订单 @PostMapping("/cancel") - public Result cancel(@RequestBody CashCollection cashRecord) { + public Result cancel(@RequestBody CashCollection cashRecord, @RequestHeader(defaultValue = "zh_CN") String lang) { try { - - return Result.success( cashCollectionService.cancel(cashRecord.getOrderCode())); - }catch (Exception e){ - return Result.error(e.getMessage()); + String result = cashCollectionService.cancel(cashRecord.getOrderCode()); + String successMsg = languageTranslationUtil.translate(result, lang); + return Result.success(successMsg); + } catch (Exception e) { + String errorMsg = languageTranslationUtil.translate(e.getMessage(), lang); + return Result.error(errorMsg); } } + //重新提交审核的收款订单 @PostMapping("/reSubmit") - public Result reSubmit(@RequestBody CashRecord cashRecord) { + public Result reSubmit(@RequestBody CashRecord cashRecord, @RequestHeader(defaultValue = "zh_CN") String lang) { try { - return Result.success(cashCollectionService.reSubmit(cashRecord)); - }catch (Exception e){ - return Result.error(e.getMessage()); + // 解析语言代码 + String languageCode = parseLanguageCode(lang); + + // 如果不是中文环境,将查询条件中的翻译文本转换为中文简体 + if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) { + convertTranslatedRecordFieldsToChinese(cashRecord, languageCode); + } + + String result = cashCollectionService.reSubmit(cashRecord); + String successMsg = languageTranslationUtil.translate(result, lang); + return Result.success(successMsg); + } catch (Exception e) { + String errorMsg = languageTranslationUtil.translate(e.getMessage(), lang); + return Result.error(errorMsg); } } + //多条件查询收款订单列表 @PostMapping("/selectCollection") - public Result selectAll(@RequestBody Page page){ + public Result selectAll(@RequestBody Page page, @RequestHeader(defaultValue = "zh_CN") String lang) { try { if (ObjectUtils.isEmpty(page.getPageNum())) { - return Result.error("页码数为空!"); + String errorMsg = languageTranslationUtil.translate("页码数为空!", lang); + return Result.error(errorMsg); } if (ObjectUtils.isEmpty(page.getPageSize())) { - return Result.error("页大小为空!"); + String errorMsg = languageTranslationUtil.translate("页大小为空!", lang); + return Result.error(errorMsg); } else { - //解token权限 - HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); - String token = request.getHeader("token"); - Admin admin = (Admin) JWTUtil.getUserDetailsList(String.valueOf(token), Admin.class); - if (admin != null) { - List list = Arrays.asList(admin.getMarkets().split(",")); - page.getCashCollection().setMarkets(list);} - else{ - return Result.error("角色为空"); + //解token权限 + HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); + String token = request.getHeader("token"); + Admin admin = (Admin) JWTUtil.getUserDetailsList(String.valueOf(token), Admin.class); + if (admin != null) { + List list = Arrays.asList(admin.getMarkets().split(",")); + page.getCashCollection().setMarkets(list); + + // 解析语言代码 + String languageCode = parseLanguageCode(lang); + + // 如果不是中文环境,将查询条件中的翻译文本转换为中文简体 + if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) { + convertTranslatedCollectionFieldsToChinese(page.getCashCollection(), languageCode); + } + } else { + String errorMsg = languageTranslationUtil.translate("角色为空", lang); + return Result.error(errorMsg); } - return Result.success(cashCollectionService.selectCollection(page.getPageNum(), page.getPageSize(),page.getCashCollection())); - }} catch (Exception e) { - return Result.error(e.getMessage()); + Result result = Result.success(cashCollectionService.selectCollection(page.getPageNum(), page.getPageSize(), page.getCashCollection())); + + // 对返回结果进行多语言转换 + if (result.getCode() == 200 && result.getData() instanceof PageInfo) { + PageInfo pageInfo = (PageInfo) result.getData(); + translateCashCollections(pageInfo, lang); + } + + return result; + } + } catch (Exception e) { + String errorMsg = languageTranslationUtil.translate(e.getMessage(), lang); + return Result.error(errorMsg); + } + } - }} @PostMapping("/export") - public Result export(@RequestBody Page page) throws Exception { + public Result export(@RequestBody Page page, @RequestHeader(defaultValue = "zh_CN") String lang) throws Exception { try { if (ObjectUtils.isEmpty(page.getPageNum())) { - return Result.error("页码数为空!"); + String errorMsg = languageTranslationUtil.translate("页码数为空!", lang); + return Result.error(errorMsg); } if (ObjectUtils.isEmpty(page.getPageSize())) { - return Result.error("页大小为空!"); + String errorMsg = languageTranslationUtil.translate("页大小为空!", lang); + return Result.error(errorMsg); } - return Result.success(cashCollectionService.selectCollection(page.getPageNum(), page.getPageSize(),page.getCashCollection())); - } catch (Exception e) { - return Result.error(e.getMessage()); - } + + // 解析语言代码 + String languageCode = parseLanguageCode(lang); + + // 如果不是中文环境,将查询条件中的翻译文本转换为中文简体 + if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) { + convertTranslatedCollectionFieldsToChinese(page.getCashCollection(), languageCode); + } + + Result result = Result.success(cashCollectionService.selectCollection(page.getPageNum(), page.getPageSize(), page.getCashCollection())); + + // 对返回结果进行多语言转换 + if (result.getCode() == 200 && result.getData() instanceof PageInfo) { + PageInfo pageInfo = (PageInfo) result.getData(); + translateCashCollections(pageInfo, lang); + } + + return result; + } catch (Exception e) { + String errorMsg = languageTranslationUtil.translate(e.getMessage(), lang); + return Result.error(errorMsg); } + } //补全手续费等 @PostMapping("/complete") - public Result complete(@RequestBody CashRecord cashRecord) { + public Result complete(@RequestBody CashRecord cashRecord, @RequestHeader(defaultValue = "zh_CN") String lang) { try { - return Result.success(cashCollectionService.complete(cashRecord)); - }catch (Exception e){ - return Result.error(e.getMessage()); + String result = cashCollectionService.complete(cashRecord); + String successMsg = languageTranslationUtil.translate(result, lang); + return Result.success(successMsg); + } catch (Exception e) { + String errorMsg = languageTranslationUtil.translate(e.getMessage(), lang); + return Result.error(errorMsg); } } + //同步g_order订单到cash_record表 @PostMapping("/syncToCashRecord") - public Result syncToCashRecord() { + public Result syncToCashRecord(@RequestHeader(defaultValue = "zh_CN") String lang) { try { - return Result.success(cashCollectionService.syncToCashRecord()); - }catch (Exception e){ - return Result.error(e.getMessage()); + Object result = cashCollectionService.syncToCashRecord(); + return Result.success(result); + } catch (Exception e) { + String errorMsg = languageTranslationUtil.translate(e.getMessage(), lang); + return Result.error(errorMsg); } } + //根据id查询收款订单 @PostMapping("/selectById") - public Result selectById(@RequestBody CashCollection cashCollection) { + public Result selectById(@RequestBody CashCollection cashCollection, @RequestHeader(defaultValue = "zh_CN") String lang) { try { - return Result.success(cashCollectionService.selectById(cashCollection)); - }catch (Exception e){ - return Result.error(e.getMessage()); + CashCollection result = cashCollectionService.selectById(cashCollection); + + // 对返回结果进行多语言转换 + if (result != null) { + translateSingleCashCollection(result, lang); + } + + return Result.success(result); + } catch (Exception e) { + String errorMsg = languageTranslationUtil.translate(e.getMessage(), lang); + return Result.error(errorMsg); } } + //根据goldcoin订单号查询收款订单 @PostMapping("/selectByGoldCoinOrderCode") - public Result selectByGoldCoinOrderCode(@RequestBody String orderNo) { + public Result selectByGoldCoinOrderCode(@RequestBody String orderNo, @RequestHeader(defaultValue = "zh_CN") String lang) { try { - return Result.success(cashCollectionService.selectByGoldCoinOrderCode(orderNo)); - }catch (Exception e){ - return Result.error(e.getMessage()); + CashCollection result = cashCollectionService.selectByGoldCoinOrderCode(orderNo); + + // 对返回结果进行多语言转换 + if (result != null) { + translateSingleCashCollection(result, lang); + } + + return Result.success(result); + } catch (Exception e) { + String errorMsg = languageTranslationUtil.translate(e.getMessage(), lang); + return Result.error(errorMsg); + } + } + + /** + * 转换现金收款订单的多语言字段 + */ + private void translateCashCollections(PageInfo pageInfo, String lang) { + if (pageInfo != null && pageInfo.getList() != null) { + for (CashCollection collection : pageInfo.getList()) { + translateSingleCashCollection(collection, lang); + } + } + } + + /** + * 转换单个现金收款订单的多语言字段 + */ + private void translateSingleCashCollection(CashCollection collection, String lang) { + if (collection != null) { + // 翻译市场名称 + if (collection.getMarketName() != null) { + collection.setMarketName(languageTranslationUtil.translate(collection.getMarketName(), lang)); + } + // 翻译商品名称 + if (collection.getGoodsName() != null) { + collection.setGoodsName(languageTranslationUtil.translate(collection.getGoodsName(), lang)); + } + // 翻译支付方式 + if (collection.getPayType() != null) { + collection.setPayType(languageTranslationUtil.translate(collection.getPayType(), lang)); + } + // 翻译到账地区 + if (collection.getReceivedMarket() != null) { + collection.setReceivedMarket(languageTranslationUtil.translate(collection.getReceivedMarket(), lang)); + } + } + } + + /** + * 解析语言代码 + */ + private String parseLanguageCode(String langHeader) { + if (langHeader == null || langHeader.isEmpty()) { + return "zh"; + } + // 处理类似 "en-US" 或 "zh-TW" 的情况 + if (langHeader.contains("-")) { + String[] parts = langHeader.split("-"); + // 特殊处理中文繁体 + if ("zh".equalsIgnoreCase(parts[0]) && "TW".equalsIgnoreCase(parts[1])) { + return "zh_TW"; + } + return parts[0].toLowerCase(); + } + return langHeader.toLowerCase(); + } + + /** + * 将收款订单查询条件中的翻译字段转换为中文简体 + */ + private void convertTranslatedFieldsToChinese(CashCollection cashCollection, String languageCode) { + if (cashCollection != null) { + // 转换商品名称 + if (cashCollection.getGoodsName() != null && !cashCollection.getGoodsName().isEmpty()) { + String chineseGoodsName = translationService.findChineseSimplifiedByTranslation( + cashCollection.getGoodsName(), languageCode); + cashCollection.setGoodsName(chineseGoodsName); + } + + // 转换支付方式 + if (cashCollection.getPayType() != null && !cashCollection.getPayType().isEmpty()) { + String chinesePayType = translationService.findChineseSimplifiedByTranslation( + cashCollection.getPayType(), languageCode); + cashCollection.setPayType(chinesePayType); + } + + // 转换到账地区 + if (cashCollection.getReceivedMarket() != null && !cashCollection.getReceivedMarket().isEmpty()) { + String chineseMarket = translationService.findChineseSimplifiedByTranslation( + cashCollection.getReceivedMarket(), languageCode); + cashCollection.setReceivedMarket(chineseMarket); + } + } + } + + /** + * 将现金记录查询条件中的翻译字段转换为中文简体 + */ + private void convertTranslatedRecordFieldsToChinese(CashRecord cashRecord, String languageCode) { + if (cashRecord != null) { + // 转换商品名称 + if (cashRecord.getGoodsName() != null && !cashRecord.getGoodsName().isEmpty()) { + String chineseGoodsName = translationService.findChineseSimplifiedByTranslation( + cashRecord.getGoodsName(), languageCode); + cashRecord.setGoodsName(chineseGoodsName); + } + + // 转换支付方式 + if (cashRecord.getPayType() != null && !cashRecord.getPayType().isEmpty()) { + String chinesePayType = translationService.findChineseSimplifiedByTranslation( + cashRecord.getPayType(), languageCode); + cashRecord.setPayType(chinesePayType); + } + + // 转换到账地区 + if (cashRecord.getReceivedMarket() != null && !cashRecord.getReceivedMarket().isEmpty()) { + String chineseMarket = translationService.findChineseSimplifiedByTranslation( + cashRecord.getReceivedMarket(), languageCode); + cashRecord.setReceivedMarket(chineseMarket); + } + } + } + + /** + * 将收款订单列表查询条件中的翻译字段转换为中文简体 + */ + private void convertTranslatedCollectionFieldsToChinese(CashCollection cashCollection, String languageCode) { + if (cashCollection != null) { + // 转换商品名称 + if (cashCollection.getGoodsName() != null && !cashCollection.getGoodsName().isEmpty()) { + String chineseGoodsName = translationService.findChineseSimplifiedByTranslation( + cashCollection.getGoodsName(), languageCode); + cashCollection.setGoodsName(chineseGoodsName); + } + + // 转换支付方式 + if (cashCollection.getPayType() != null && !cashCollection.getPayType().isEmpty()) { + String chinesePayType = translationService.findChineseSimplifiedByTranslation( + cashCollection.getPayType(), languageCode); + cashCollection.setPayType(chinesePayType); + } + + // 转换到账地区 + if (cashCollection.getReceivedMarket() != null && !cashCollection.getReceivedMarket().isEmpty()) { + String chineseMarket = translationService.findChineseSimplifiedByTranslation( + cashCollection.getReceivedMarket(), languageCode); + cashCollection.setReceivedMarket(chineseMarket); + } + + // 转换支付币种 + if (cashCollection.getPaymentCurrency() != null && !cashCollection.getPaymentCurrency().isEmpty()) { + String chineseCurrency = translationService.findChineseSimplifiedByTranslation( + cashCollection.getPaymentCurrency(), languageCode); + cashCollection.setPaymentCurrency(chineseCurrency); + } } } } 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 6f0339e..0406332 100644 --- a/src/main/java/com/example/demo/controller/cash/CashRefundController.java +++ b/src/main/java/com/example/demo/controller/cash/CashRefundController.java @@ -1,7 +1,7 @@ package com.example.demo.controller.cash; - import com.example.demo.Util.JWTUtil; +import com.example.demo.Util.LanguageTranslationUtil; import com.example.demo.config.RateLimitUtil; import com.example.demo.domain.entity.Admin; import com.example.demo.domain.vo.cash.CashRecordDTO; @@ -12,6 +12,7 @@ import com.example.demo.domain.vo.coin.RechargeUser; import com.example.demo.domain.vo.coin.Result; import com.example.demo.service.cash.RefundService; import com.example.demo.service.coin.MarketService; +import com.example.demo.service.coin.TranslationService; import jakarta.annotation.Resource; import jakarta.servlet.http.HttpServletRequest; @@ -48,157 +49,242 @@ public class CashRefundController { @Autowired MarketService marketService; + @Autowired + private LanguageTranslationUtil languageTranslationUtil; -/** - * 当地财务负责人退款记录 - */ + @Autowired + private TranslationService translationService; + + /** + * 当地财务负责人退款记录 + */ @PostMapping("/select") - public Result select(@RequestBody Page page) throws Exception { - // 获取当前请求对象 - 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())) { - return Result.error("页码数为空!"); - } - if (ObjectUtils.isEmpty(page.getPageSize())) { - return Result.error("页大小为空!"); - } + public Result select(@RequestBody Page page, @RequestHeader(defaultValue = "zh_CN") String lang) throws Exception { + try { + // 解析语言代码 + String languageCode = parseLanguageCode(lang); + + // 如果不是中文环境,将查询条件中的翻译文本转换为中文简体 + if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) { + convertTranslatedFieldsToChinese(page.getCashRecordDTO(), languageCode); + } -// 获取传入的市场列表 - List requestedMarkets = page.getCashRecordDTO() != null ? page.getCashRecordDTO().getMarkets() : null; + // 获取当前请求对象 + HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); + String token = request.getHeader("token"); -// 权限校验逻辑 - if (markets.contains("9") || markets.contains("9999")) { - // 特权市场:9 或 9999,跳过权限校验,直接放行传入的 markets - // 如果业务需要,也可以在这里做空值处理 - if (page.getCashRecordDTO() != null) { - // 保持 requestedMarkets 不变,原样接受 - // 可选:如果 requestedMarkets 为 null,可设为默认值或保持 null + // 解析 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); } - } else { - // 普通用户:必须校验权限 - if (requestedMarkets == null || requestedMarkets.isEmpty()) { - page.getCashRecordDTO().setMarkets(markets); + + // 获取传入的市场列表 + 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 不变 } - if (!markets.containsAll(requestedMarkets)) { - return Result.error("无权限!请求的市场不在授权范围内。"); + + Result result = Result.success(refundService.financeSelect(page.getPageNum(), page.getPageSize(), page.getCashRecordDTO())); + + // 对返回结果进行多语言转换 + if (result.getCode() == 200 && result.getData() instanceof com.github.pagehelper.PageInfo) { + com.github.pagehelper.PageInfo pageInfo = (com.github.pagehelper.PageInfo) result.getData(); + translateCashRecordDTOs(pageInfo, lang); } - // 校验通过,保持 requestedMarkets 不变 + + return result; + } catch (Exception e) { + String errorMsg = languageTranslationUtil.translate("查询失败", lang); + return Result.error(errorMsg + ": " + e.getMessage()); } - return Result.success(refundService.financeSelect(page.getPageNum(), page.getPageSize(), page.getCashRecordDTO())); } /** * 添加退款现金记录 */ @PostMapping("/add") - public Result add(@RequestBody CashRecordRefund cashRecordRefund) throws Exception { - cashRecordRefund.setStatus(10); + public Result add(@RequestBody CashRecordRefund cashRecordRefund, @RequestHeader(defaultValue = "zh_CN") String lang) throws Exception { try { - return Result.success(refundService.add(cashRecordRefund)); + // 解析语言代码 + String languageCode = parseLanguageCode(lang); + + // 如果不是中文环境,将查询条件中的翻译文本转换为中文简体 + if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) { + convertTranslatedRefundFieldsToChinese(cashRecordRefund, languageCode); + } + + cashRecordRefund.setStatus(10); + int resultCode = refundService.add(cashRecordRefund); + String successMsg = languageTranslationUtil.translate("提交成功", lang); + return Result.success(successMsg); } catch (Exception e) { - return Result.error(e.getMessage()); + String errorMsg = languageTranslationUtil.translate(e.getMessage(), lang); + return Result.error(errorMsg); } } + /** * 执行人查看退款现金记录 */ @PostMapping("/exSelect") - public Result executor(@RequestBody Page page) throws Exception { - 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())) { - return Result.error("页码数为空!"); - } - if (ObjectUtils.isEmpty(page.getPageSize())) { - return Result.error("页大小为空!"); - } + public Result executor(@RequestBody Page page, @RequestHeader(defaultValue = "zh_CN") String lang) throws Exception { + try { + // 解析语言代码 + String languageCode = parseLanguageCode(lang); + + // 如果不是中文环境,将查询条件中的翻译文本转换为中文简体 + if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) { + convertTranslatedFieldsToChinese(page.getCashRecordDTO(), languageCode); + } -//// 获取传入的市场列表 -// 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)) { -// return Result.error("无权限!请求的市场不在授权范围内。"); -// } -// // 校验通过,保持 requestedMarkets 不变 -// } - return Result.success(refundService.exSelect(page.getPageNum(), page.getPageSize(), page.getCashRecordDTO())); + 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); + } + + Result result = Result.success(refundService.exSelect(page.getPageNum(), page.getPageSize(), page.getCashRecordDTO())); + + // 对返回结果进行多语言转换 + if (result.getCode() == 200 && result.getData() instanceof com.github.pagehelper.PageInfo) { + com.github.pagehelper.PageInfo pageInfo = (com.github.pagehelper.PageInfo) result.getData(); + translateCashRecordDTOs(pageInfo, lang); + } + + return result; + } catch (Exception e) { + String errorMsg = languageTranslationUtil.translate("查询失败", lang); + return Result.error(errorMsg + ": " + e.getMessage()); + } } + /** * 查询客服提交现金记录 */ @PostMapping("/selecta") - public Result selecta(@RequestBody Page page) { + public Result selecta(@RequestBody Page page, @RequestHeader(defaultValue = "zh_CN") String lang) { + try { + // 解析语言代码 + String languageCode = parseLanguageCode(lang); + // 如果不是中文环境,将查询条件中的翻译文本转换为中文简体 + if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) { + convertTranslatedFieldsToChinese(page.getCashRecordDTO(), languageCode); + } -// 校验分页参数 - if (ObjectUtils.isEmpty(page.getPageNum())) { - return Result.error("页码数为空!"); - } - if (ObjectUtils.isEmpty(page.getPageSize())) { - return Result.error("页大小为空!"); - } -// 获取传入的市场列表 - List requestedMarkets = page.getCashRecordDTO() != null ? page.getCashRecordDTO().getMarkets() : null; + // 校验分页参数 + 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; + + Result result = Result.success(refundService.select(page.getPageNum(), page.getPageSize(), page.getCashRecordDTO())); + + // 对返回结果进行多语言转换 + if (result.getCode() == 200 && result.getData() instanceof com.github.pagehelper.PageInfo) { + com.github.pagehelper.PageInfo pageInfo = (com.github.pagehelper.PageInfo) result.getData(); + translateCashRecordDTOs(pageInfo, lang); + } - return Result.success(refundService.select(page.getPageNum(), page.getPageSize(), page.getCashRecordDTO())); + return result; + } catch (Exception e) { + String errorMsg = languageTranslationUtil.translate("查询失败", lang); + return Result.error(errorMsg + ": " + e.getMessage()); + } } + @PostMapping("/update") - public Result update(@RequestBody CashRecordDone cashRecordDone)throws Exception { - if (cashRecordDone.getStatus() == null) { - return Result.error("状态为空"); - } - if (cashRecordDone.getStatus() == 10) { - return Result.success(refundService.withdraw(cashRecordDone)); - } - else if (cashRecordDone.getStatus() == 11) { + public Result update(@RequestBody CashRecordDone cashRecordDone, @RequestHeader(defaultValue = "zh_CN") String lang)throws Exception { + try { + if (cashRecordDone.getStatus() == null) { + String errorMsg = languageTranslationUtil.translate("状态为空", lang); + return Result.error(errorMsg); + } + if (cashRecordDone.getStatus() == 10) { + int result = refundService.withdraw(cashRecordDone); + String msg = result > 0 ? languageTranslationUtil.translate("操作成功", lang) : languageTranslationUtil.translate("操作失败", lang); + return Result.success(msg); + } + else if (cashRecordDone.getStatus() == 11) { + try { + int result = refundService.update(cashRecordDone); + String msg = result > 0 ? languageTranslationUtil.translate("操作成功", lang) : languageTranslationUtil.translate("操作失败", lang); + return Result.success(msg); + } catch (Exception e) { + String errorMsg = languageTranslationUtil.translate(e.getMessage(), lang); + return Result.error(errorMsg); + } + } - try { - return Result.success(refundService.update(cashRecordDone)); - } catch (Exception e) { - return Result.error(e.getMessage()); + else { + String errorMsg = languageTranslationUtil.translate("该订单状态无法支持此操作", lang); + return Result.error(errorMsg); } + } catch (Exception e) { + String errorMsg = languageTranslationUtil.translate("操作失败", lang); + return Result.error(errorMsg + ": " + e.getMessage()); } - - else return Result.error("该订单状态无法支持此操作"); } + @PostMapping("/review") - public Result review(@RequestBody CashRecordDone cashRecordDone){ + public Result review(@RequestBody CashRecordDone cashRecordDone, @RequestHeader(defaultValue = "zh_CN") String lang){ try { - return Result.success(refundService.review(cashRecordDone)); + int result = refundService.review(cashRecordDone); + String msg = result > 0 ? languageTranslationUtil.translate("操作成功", lang) : languageTranslationUtil.translate("操作失败", lang); + return Result.success(msg); } catch (Exception e) { - return Result.error(e.getMessage()); + String errorMsg = languageTranslationUtil.translate(e.getMessage(), lang); + return Result.error(errorMsg); } } + @PostMapping("/finalReview") - public Result finalReview(@RequestBody CashRecordDone cashRecordDone,HttpServletRequest request) { + public Result finalReview(@RequestBody CashRecordDone cashRecordDone, HttpServletRequest request, @RequestHeader(defaultValue = "zh_CN") String lang) { { // --------------- 限流逻辑开始 --------------- String limitKey = null; @@ -217,58 +303,102 @@ public class CashRefundController { // 2. 校验限流:3秒内同一key不允许重复请求 if (Objects.isNull(limitKey) || !RateLimitUtil.isAllowed(limitKey)) { - return Result.error("3秒内只能请求一次,请稍后再试"); // 限流提示 + String errorMsg = languageTranslationUtil.translate("3秒内只能请求一次,请稍后再试", lang); + return Result.error(errorMsg); // 限流提示 } // --------------- 限流逻辑结束 --------------- try { // 原有业务逻辑:执行最终审核 - return Result.success(refundService.finalreview(cashRecordDone)); + int result = refundService.finalreview(cashRecordDone); + String msg = result > 0 ? languageTranslationUtil.translate("操作成功", lang) : languageTranslationUtil.translate("审核失败", lang); + return Result.success(msg); } catch (Exception e) { // 接口执行失败时,移除限流标识(允许用户重新尝试) RateLimitUtil.removeKey(limitKey); - return Result.error("审核失败:" + e.getMessage()); + String errorMsg = languageTranslationUtil.translate("审核失败:", lang) + e.getMessage(); + return Result.error(errorMsg); } - }} + } + } + @PostMapping("/executor") - public Result executor(@RequestBody CashRecordDone cashRecordDone) throws Exception { + public Result executor(@RequestBody CashRecordDone cashRecordDone, @RequestHeader(defaultValue = "zh_CN") String lang) throws Exception { try { - return Result.success(refundService.executor(cashRecordDone)); + int result = refundService.executor(cashRecordDone); + String msg = result > 0 ? languageTranslationUtil.translate("操作成功", lang) : languageTranslationUtil.translate("操作失败", lang); + return Result.success(msg); } catch (Exception e) { - return Result.error(e.getMessage()); + String errorMsg = languageTranslationUtil.translate(e.getMessage(), lang); + return Result.error(errorMsg); } - } + /** * 新增线上退款订单 */ @PostMapping("/addOnline") - public Result addOnline(@RequestBody CashRecordRefund cashRecordRefund){ - cashRecordRefund.setStatus(20); + public Result addOnline(@RequestBody CashRecordRefund cashRecordRefund, @RequestHeader(defaultValue = "zh_CN") String lang){ try { - return Result.success(refundService.add(cashRecordRefund)); + // 解析语言代码 + String languageCode = parseLanguageCode(lang); + + // 如果不是中文环境,将查询条件中的翻译文本转换为中文简体 + if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) { + convertTranslatedRefundFieldsToChinese(cashRecordRefund, languageCode); + } + + cashRecordRefund.setStatus(20); + int resultCode = refundService.add(cashRecordRefund); + String successMsg = languageTranslationUtil.translate("提交成功", lang); + return Result.success(successMsg); } catch (Exception e) { - return Result.error(e.getMessage()); + String errorMsg = languageTranslationUtil.translate(e.getMessage(), lang); + return Result.error(errorMsg); } } @PostMapping("/export") - public Result export(@RequestBody Page page) throws Exception { + public Result export(@RequestBody Page page, @RequestHeader(defaultValue = "zh_CN") String lang) throws Exception { + try { + // 解析语言代码 + String languageCode = parseLanguageCode(lang); -// 校验分页参数 - if (ObjectUtils.isEmpty(page.getPageNum())) { - return Result.error("页码数为空!"); - } - if (ObjectUtils.isEmpty(page.getPageSize())) { - return Result.error("页大小为空!"); - } + // 如果不是中文环境,将查询条件中的翻译文本转换为中文简体 + if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) { + convertTranslatedFieldsToChinese(page.getCashRecordDTO(), languageCode); + } - return Result.success(refundService.financeSelect(page.getPageNum(), page.getPageSize(), page.getCashRecordDTO())); + // 校验分页参数 + 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); + } + + Result result = Result.success(refundService.financeSelect(page.getPageNum(), page.getPageSize(), page.getCashRecordDTO())); + + // 对返回结果进行多语言转换 + if (result.getCode() == 200 && result.getData() instanceof com.github.pagehelper.PageInfo) { + com.github.pagehelper.PageInfo pageInfo = (com.github.pagehelper.PageInfo) result.getData(); + translateCashRecordDTOs(pageInfo, lang); + } + + return result; + } catch (Exception e) { + String errorMsg = languageTranslationUtil.translate("导出失败", lang); + return Result.error(errorMsg + ": " + e.getMessage()); + } } + @PostMapping("/ceshi") - public Result ceshi() { - return Result.success("测试消息"); + public Result ceshi(@RequestHeader(defaultValue = "zh_CN") String lang) { + String msg = languageTranslationUtil.translate("测试消息", lang); + return Result.success(msg); } /** @@ -291,4 +421,108 @@ public class CashRefundController { } return ip; } + + /** + * 转换现金记录DTO的多语言字段 + */ + private void translateCashRecordDTOs(com.github.pagehelper.PageInfo pageInfo, String lang) { + if (pageInfo != null && pageInfo.getList() != null) { + for (CashRecordDTO dto : pageInfo.getList()) { + // 翻译市场名称 + if (dto.getMarketName() != null) { + dto.setMarketName(languageTranslationUtil.translate(dto.getMarketName(), lang)); + } + // 翻译商品名称 + if (dto.getGoodsName() != null) { + dto.setGoodsName(languageTranslationUtil.translate(dto.getGoodsName(), lang)); + } + // 翻译支付方式 + if (dto.getPayType() != null) { + dto.setPayType(languageTranslationUtil.translate(dto.getPayType(), lang)); + } + } + } + } + + /** + * 解析语言代码 + */ + private String parseLanguageCode(String langHeader) { + if (langHeader == null || langHeader.isEmpty()) { + return "zh"; + } + // 处理类似 "en-US" 或 "zh-TW" 的情况 + if (langHeader.contains("-")) { + String[] parts = langHeader.split("-"); + // 特殊处理中文繁体 + if ("zh".equalsIgnoreCase(parts[0]) && "TW".equalsIgnoreCase(parts[1])) { + return "zh_TW"; + } + return parts[0].toLowerCase(); + } + return langHeader.toLowerCase(); + } + + /** + * 将查询条件中的翻译字段转换为中文简体 + */ + private void convertTranslatedFieldsToChinese(CashRecordDTO cashRecordDTO, String languageCode) { + if (cashRecordDTO != null) { + // 转换商品名称 + if (cashRecordDTO.getGoodsName() != null && !cashRecordDTO.getGoodsName().isEmpty()) { + String chineseGoodsName = translationService.findChineseSimplifiedByTranslation( + cashRecordDTO.getGoodsName(), languageCode); + cashRecordDTO.setGoodsName(chineseGoodsName); + } + + // 转换支付方式 + if (cashRecordDTO.getPayType() != null && !cashRecordDTO.getPayType().isEmpty()) { + String chinesePayType = translationService.findChineseSimplifiedByTranslation( + cashRecordDTO.getPayType(), languageCode); + cashRecordDTO.setPayType(chinesePayType); + } + + // 转换支付币种 + if (cashRecordDTO.getPaymentCurrency() != null && !cashRecordDTO.getPaymentCurrency().isEmpty()) { + String chineseCurrency = translationService.findChineseSimplifiedByTranslation( + cashRecordDTO.getPaymentCurrency(), languageCode); + cashRecordDTO.setPaymentCurrency(chineseCurrency); + } + } + } + + /** + * 将退款记录查询条件中的翻译字段转换为中文简体 + */ + private void convertTranslatedRefundFieldsToChinese(CashRecordRefund cashRecordRefund, String languageCode) { + if (cashRecordRefund != null) { + // 转换退款理由 + if (cashRecordRefund.getRefundReason() != null && !cashRecordRefund.getRefundReason().isEmpty()) { + String chineseReason = translationService.findChineseSimplifiedByTranslation( + cashRecordRefund.getRefundReason(), languageCode); + cashRecordRefund.setRefundReason(chineseReason); + } + + // 转换退款备注 + if (cashRecordRefund.getRefundRemark() != null && !cashRecordRefund.getRefundRemark().isEmpty()) { + String chineseRemark = translationService.findChineseSimplifiedByTranslation( + cashRecordRefund.getRefundRemark(), languageCode); + cashRecordRefund.setRefundRemark(chineseRemark); + } + + // 转换退款途径 + if (cashRecordRefund.getRefundChannels() != null && !cashRecordRefund.getRefundChannels().isEmpty()) { + String chineseChannels = translationService.findChineseSimplifiedByTranslation( + cashRecordRefund.getRefundChannels(), languageCode); + cashRecordRefund.setRefundChannels(chineseChannels); + } + + // 转换退款币种 + if (cashRecordRefund.getRefundCurrency() != null && !cashRecordRefund.getRefundCurrency().isEmpty()) { + String chineseCurrency = translationService.findChineseSimplifiedByTranslation( + cashRecordRefund.getRefundCurrency(), languageCode); + cashRecordRefund.setRefundCurrency(chineseCurrency); + } + } + } } 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 639fe22..1598214 100644 --- a/src/main/java/com/example/demo/controller/coin/ExportController.java +++ b/src/main/java/com/example/demo/controller/coin/ExportController.java @@ -50,12 +50,8 @@ public class ExportController { private GoldDetailService goldDetailService; @Autowired private ExportService exportService; - - // 注入 TranslationService @Autowired private TranslationService translationService; - - // 注入多语言转换工具类 @Autowired private LanguageTranslationUtil languageTranslationUtil; @@ -316,13 +312,6 @@ public class ExportController { rechargeUser.setMarket(chineseMarket); } - // 转换活动名称 - if (rechargeUser.getActivity() != null && !rechargeUser.getActivity().isEmpty()) { - String chineseActivity = translationService.findChineseSimplifiedByTranslation( - rechargeUser.getActivity(), languageCode); - rechargeUser.setActivity(chineseActivity); - } - // 转换汇率名称 if (rechargeUser.getRateName() != null && !rechargeUser.getRateName().isEmpty()) { String chineseRateName = translationService.findChineseSimplifiedByTranslation( @@ -337,13 +326,6 @@ public class ExportController { rechargeUser.setPayModel(chinesePayModel); } -// // 转换支付平台 -// if (rechargeUser.getPayPlatform() != null && !rechargeUser.getPayPlatform().isEmpty()) { -// String chinesePayPlatform = translationService.findChineseSimplifiedByTranslation( -// rechargeUser.getPayPlatform(), languageCode); -// rechargeUser.setPayPlatform(chinesePayPlatform); -// } - // 转换备注 if (rechargeUser.getRemark() != null && !rechargeUser.getRemark().isEmpty()) { String chineseRemark = translationService.findChineseSimplifiedByTranslation( @@ -406,13 +388,6 @@ public class ExportController { consumeUser.getMarket(), languageCode); consumeUser.setMarket(chineseMarket); } - -// // 转换支付平台 -// if (consumeUser.getPayPlatform() != null && !consumeUser.getPayPlatform().isEmpty()) { -// String chinesePlatform = translationService.findChineseSimplifiedByTranslation( -// consumeUser.getPayPlatform(), languageCode); -// consumeUser.setPayPlatform(chinesePlatform); -// } } } }