package com.example.demo.controller.coin; import com.example.demo.Util.JWTUtil; import com.example.demo.Util.LanguageTranslationUtil; import com.example.demo.config.interfac.Log; import com.example.demo.domain.entity.Admin; import com.example.demo.service.coin.RefundService; import com.example.demo.service.coin.TranslationService; import com.github.pagehelper.PageInfo; import jakarta.servlet.http.HttpServletRequest; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.util.ObjectUtils; import org.springframework.web.bind.annotation.*; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import com.example.demo.domain.vo.coin.*; import java.util.Arrays; import java.util.List; /** * @program: gold-java * @ClassName RefundMapper.xml * @description: * @author: Double * @create: 2025−06-26 11:28 * @Version 1.0 **/ @RestController @RequestMapping("/refund") @RequiredArgsConstructor @Slf4j @CrossOrigin public class RefundController { @Autowired private RefundService refundService; // 注入 TranslationService @Autowired private TranslationService translationService; // 注入多语言转换工具类 @Autowired private LanguageTranslationUtil languageTranslationUtil; //退款明细 @Log("获取全部退款明细") @PostMapping("/selectAll") public Result selectAll(@RequestBody Page page, @RequestHeader(defaultValue = "zh") String lang) { try { // 解析语言代码 String languageCode = parseLanguageCode(lang); // 如果不是中文环境,将查询条件中的翻译文本转换为中文简体 if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) { convertRefundTranslatedFieldsToChinese(page.getRefundUser(), languageCode); } 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 { //解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.getRefundUser().setMarkets(list); } else { String errorMsg = languageTranslationUtil.translate("角色为空", lang); return Result.error(errorMsg); } Result result = Result.success(refundService.selectAll(page.getPageNum(), page.getPageSize(), page.getRefundUser())); // 对返回结果进行多语言转换 if (result.getCode() == 200 && result.getData() instanceof PageInfo) { PageInfo pageInfo = (PageInfo) result.getData(); translateRefundUsers(pageInfo, lang); } return result; } } catch (Exception e) { String errorMsg = languageTranslationUtil.translate("请检查筛选数据的格式", lang); return Result.error(errorMsg); } } //退款筛选 @Log("退款明细筛选") @PostMapping("/selectBy") public Result selectBy(@RequestBody Page page, @RequestHeader(defaultValue = "zh") String lang) { try { // 解析语言代码 String languageCode = parseLanguageCode(lang); // 如果不是中文环境,将查询条件中的翻译文本转换为中文简体 if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) { convertRefundTranslatedFieldsToChinese(page.getRefundUser(), languageCode); } 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 { //解token权限 if(page.getRefundUser().getMarkets()==null||page.getRefundUser().getMarkets().isEmpty()) { HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); String token = request.getHeader("token"); Admin admin = (Admin) JWTUtil.getUserDetailsList(String.valueOf(token), Admin.class); List markets = Arrays.asList(StringUtils.split(admin.getMarkets(), ",")); page.getRefundUser().setMarkets(markets); } Result result = Result.success(refundService.selectBy(page.getPageNum(), page.getPageSize(), page.getRefundUser())); // 对返回结果进行多语言转换 if (result.getCode() == 200 && result.getData() instanceof PageInfo) { PageInfo pageInfo = (PageInfo) result.getData(); translateRefundUsers(pageInfo, lang); } return result; } } catch (Exception e) { String errorMsg = languageTranslationUtil.translate("请检查筛选数据的格式", lang); return Result.error(errorMsg); } } //退款金币统计 @Log("退款金币合计数统计") @PostMapping("/statsGold") public Result statsGold(@RequestBody RefundUser refundUser, @RequestHeader(defaultValue = "zh") String lang) { try { // 解析语言代码 String languageCode = parseLanguageCode(lang); // 如果不是中文环境,将查询条件中的翻译文本转换为中文简体 if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) { convertRefundTranslatedFieldsToChinese(refundUser, languageCode); } //解token权限 if(refundUser.getMarkets()==null||refundUser.getMarkets().isEmpty()) { HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); String token = request.getHeader("token"); Admin admin = (Admin) JWTUtil.getUserDetailsList(String.valueOf(token), Admin.class); List markets = Arrays.asList(StringUtils.split(admin.getMarkets(), ",")); refundUser.setMarkets(markets); } Gold gold = refundService.statsGold(refundUser); return Result.success(gold); } catch (Exception e) { String errorMsg = languageTranslationUtil.translate("请检查数据的格式", lang); return Result.error(errorMsg); } } //获取退款类型 @Log("获取退款类型") @PostMapping("/refundType") public Result getRefundType(@RequestHeader(defaultValue = "zh") String lang) { // 解析语言代码 String languageCode = parseLanguageCode(lang); List list = refundService.getRefundType(lang); // 如果不是中文环境,先将翻译后的退款类型转换为中文简体进行处理 if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) { convertTranslatedRefundTypesToChinese(list, languageCode); } // 对退款类型进行多语言转换 translateRefundTypes(list, lang); return Result.success(list); } //筛选产品 // @Log("筛选商品") @PostMapping("/selectGoods") public Result getSelectGoods(@RequestBody RefundUser refundUser, @RequestHeader(defaultValue = "zh") String lang) { // 解析语言代码 String languageCode = parseLanguageCode(lang); // 如果不是中文环境,将查询条件中的翻译文本转换为中文简体 if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) { convertRefundTranslatedFieldsToChinese(refundUser, languageCode); } List list = refundService.selectGoods(refundUser, lang); return Result.success(list); } //消耗金币退款 @Log("新增金币退款") @PostMapping("/add") public Result add(@RequestBody RefundUser refundUser, @RequestHeader(defaultValue = "zh") String lang) { try { // 解析语言代码 String languageCode = parseLanguageCode(lang); // 如果不是中文环境,将查询条件中的翻译文本转换为中文简体 if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) { convertRefundTranslatedFieldsToChinese(refundUser, languageCode); } return refundService.add(refundUser, lang); } catch (Exception e) { e.printStackTrace(); String errorMsg = languageTranslationUtil.translate(e.getMessage(), lang); return Result.error(errorMsg); } } public Result select(@RequestBody Page page, @RequestHeader(defaultValue = "zh") String lang) { try { // 解析语言代码 String languageCode = parseLanguageCode(lang); // 如果不是中文环境,将查询条件中的翻译文本转换为中文简体 if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) { convertRefundTranslatedFieldsToChinese(page.getRefundUser(), languageCode); } 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 { Result result = Result.success(refundService.selectBy(page.getPageNum(), page.getPageSize(), page.getRefundUser())); // 对返回结果进行多语言转换 if (result.getCode() == 200 && result.getData() instanceof PageInfo) { PageInfo pageInfo = (PageInfo) result.getData(); translateRefundUsers(pageInfo, lang); } return result; } } catch (Exception e) { e.printStackTrace(); String errorMsg = languageTranslationUtil.translate("请检查筛选数据的格式", lang); return Result.error(errorMsg); } } /** * 解析语言代码 */ 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 convertRefundTranslatedFieldsToChinese(RefundUser refundUser, String languageCode) { if (refundUser != null) { // 转换市场名称 if (refundUser.getMarket() != null && !refundUser.getMarket().isEmpty()) { String chineseMarket = translationService.findChineseSimplifiedByTranslation( refundUser.getMarket(), languageCode); refundUser.setMarket(chineseMarket); } // 转换商品名称 if (refundUser.getGoodsName() != null && !refundUser.getGoodsName().isEmpty()) { String chineseGoodsName = translationService.findChineseSimplifiedByTranslation( refundUser.getGoodsName(), languageCode); refundUser.setGoodsName(chineseGoodsName); } // 转换退款类型 if (refundUser.getRefundType() != null && !refundUser.getRefundType().isEmpty()) { String chineseRefundType = translationService.findChineseSimplifiedByTranslation( refundUser.getRefundType(), languageCode); refundUser.setRefundType(chineseRefundType); } } } /** * 将翻译后的退款类型转换为中文简体 */ private void convertTranslatedRefundTypesToChinese(List refundTypes, String languageCode) { if (refundTypes != null && !refundTypes.isEmpty()) { for (int i = 0; i < refundTypes.size(); i++) { String chineseType = translationService.findChineseSimplifiedByTranslation( refundTypes.get(i), languageCode); refundTypes.set(i, chineseType); } } } /** * 转换退款用户信息的多语言字段 */ private void translateRefundUsers(PageInfo pageInfo, String lang) { if (pageInfo != null && pageInfo.getList() != null) { for (RefundUser user : pageInfo.getList()) { // 翻译市场名称 if (user.getMarket() != null) { user.setMarket(languageTranslationUtil.translate(user.getMarket(), lang)); } // 翻译商品名称 if (user.getGoodsName() != null) { user.setGoodsName(languageTranslationUtil.translate(user.getGoodsName(), lang)); } // 翻译退款类型 if (user.getRefundType() != null) { user.setRefundType(languageTranslationUtil.translate(user.getRefundType(), lang)); } // 翻译退款模型描述 if (user.getRefundModel() != null) { String refundModelDesc = convertRefundModelToString(user.getRefundModel()); user.setRefundModelDesc(languageTranslationUtil.translate(refundModelDesc, lang)); } } } } /** * 转换退款类型列表的多语言字段 */ private void translateRefundTypes(List refundTypes, String lang) { if (refundTypes != null && !refundTypes.isEmpty()) { for (int i = 0; i < refundTypes.size(); i++) { String translatedType = languageTranslationUtil.translate(refundTypes.get(i), lang); refundTypes.set(i, translatedType); } } } /** * 将退款模型数字转换为中文描述 */ private String convertRefundModelToString(Byte refundModel) { if (refundModel == null) return ""; switch (refundModel) { case 0: return "全部退款"; case 1: return "部分退款"; default: return "未知退款方式"; } } }