From 7e8cfbb13e58ad016c22b551fdbfc19ad7f6d30a Mon Sep 17 00:00:00 2001 From: lijianlin Date: Wed, 26 Nov 2025 17:32:49 +0800 Subject: [PATCH 01/18] =?UTF-8?q?11-25=20=E5=B0=8F=E9=BB=84=E8=BD=A6?= =?UTF-8?q?=E7=AD=9B=E9=80=89=20=E5=B8=82=E5=9C=BA=E6=94=B9=E4=B8=BAid?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/mapper/BeanRechargeMapper1.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/mapper/BeanRechargeMapper1.xml b/src/main/resources/mapper/BeanRechargeMapper1.xml index 5469861..569ea3f 100644 --- a/src/main/resources/mapper/BeanRechargeMapper1.xml +++ b/src/main/resources/mapper/BeanRechargeMapper1.xml @@ -39,7 +39,7 @@ and co.jwcode =#{jwcode} - and m.name = #{market} + and m.id = #{market} and pd.name = #{productName} From 6e4b9a3b2df93ea6df1d22c46405aaed31e1eefb Mon Sep 17 00:00:00 2001 From: lijianlin Date: Sat, 29 Nov 2025 15:04:34 +0800 Subject: [PATCH 02/18] =?UTF-8?q?11-29=20=E5=B0=8F=E9=BB=84=E8=BD=A6?= =?UTF-8?q?=E6=B6=88=E8=B4=B9=E6=95=B0=E6=8D=AE=E6=95=B0=E6=8D=AE=E5=BA=93?= =?UTF-8?q?=E8=A1=A8=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/example/demo/Export/ExportServiceImpl.java | 2 +- .../java/com/example/demo/controller/bean/BeanConsumeController.java | 5 +++++ src/main/resources/mapper/BeanRechargeMapper1.xml | 2 +- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/example/demo/Export/ExportServiceImpl.java b/src/main/java/com/example/demo/Export/ExportServiceImpl.java index e86d041..66c7797 100644 --- a/src/main/java/com/example/demo/Export/ExportServiceImpl.java +++ b/src/main/java/com/example/demo/Export/ExportServiceImpl.java @@ -306,7 +306,7 @@ public class ExportServiceImpl implements ExportService { @Override public Result addExportLive(LiveDTO dto) { - return addExport(dto, "直播明细", "lives:queue:export_queue", "beanConsumeLive"); + return addExport(dto, "打赏明细", "lives:queue:export_queue", "beanConsumeLive"); } @Override diff --git a/src/main/java/com/example/demo/controller/bean/BeanConsumeController.java b/src/main/java/com/example/demo/controller/bean/BeanConsumeController.java index 3506db5..aa8d631 100644 --- a/src/main/java/com/example/demo/controller/bean/BeanConsumeController.java +++ b/src/main/java/com/example/demo/controller/bean/BeanConsumeController.java @@ -1,5 +1,6 @@ package com.example.demo.controller.bean; +import com.example.demo.config.interfac.Log; import com.example.demo.domain.vo.bean.BeanConsume; import com.example.demo.domain.vo.bean.BeanConsumeGold; import com.example.demo.domain.vo.bean.BeanRecharge; @@ -58,6 +59,7 @@ public class BeanConsumeController { } } //筛选查询直播消费记录 + @Log("查询直播消费记录") @PostMapping("/selectLiveBy") public Result selectLiveBy(@RequestBody Page page){ try { @@ -76,6 +78,7 @@ public class BeanConsumeController { return Result.error(e.toString()); }} //筛选查询铁粉消费记录 + @Log("查询铁粉消费记录") @PostMapping("/selectFanBy") public Result selectFanBy(@RequestBody Page page){ try { @@ -94,6 +97,7 @@ public class BeanConsumeController { }} //筛选查询文章消费记录 + @Log("查询文章消费记录") @PostMapping("/selectArticleBy") public Result selectArticleBy(@RequestBody Page page){ try { @@ -112,6 +116,7 @@ public class BeanConsumeController { }} //筛选查询小黄车消费记录 + @Log("查询小黄车消费记录") @PostMapping("/selectCartBy") public Result selectCartBy(@RequestBody Page page){ try { diff --git a/src/main/resources/mapper/BeanRechargeMapper1.xml b/src/main/resources/mapper/BeanRechargeMapper1.xml index 569ea3f..587c7ea 100644 --- a/src/main/resources/mapper/BeanRechargeMapper1.xml +++ b/src/main/resources/mapper/BeanRechargeMapper1.xml @@ -30,7 +30,7 @@ + SELECT * FROM translation ORDER BY config_time DESC + + + + + INSERT INTO translation ( + chinese_simplified, + english, + thai, + chinese_traditional, + malay, + vietnamese, + config_time + ) VALUES ( + #{chineseSimplified}, + #{english}, + #{thai}, + #{chineseTraditional}, + #{malay}, + #{vietnamese}, + NOW() + ) + + + + + UPDATE translation + + chinese_simplified = #{chineseSimplified}, + english = #{english}, + thai = #{thai}, + chinese_traditional = #{chineseTraditional}, + malay = #{malay}, + vietnamese = #{vietnamese}, + config_time = NOW() + + WHERE id = #{id} + + + + + DELETE FROM translation WHERE id = #{id} + + + + + + + + + + + + + From 487f08a81d2fb19ac32a9d617f060b0a156bfd28 Mon Sep 17 00:00:00 2001 From: lijianlin Date: Mon, 1 Dec 2025 14:41:12 +0800 Subject: [PATCH 05/18] =?UTF-8?q?12-01=20=E5=90=8C=E6=AD=A5=E7=BA=BF?= =?UTF-8?q?=E4=B8=8A=E6=94=B6=E6=AC=BE=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cash/CashCollectionServiceImpl.java | 27 ++++++++++++++++++---- .../resources/cashMapper/CashCollectionMapper.xml | 3 ++- 2 files changed, 24 insertions(+), 6 deletions(-) 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 b78c735..4431284 100644 --- a/src/main/java/com/example/demo/serviceImpl/cash/CashCollectionServiceImpl.java +++ b/src/main/java/com/example/demo/serviceImpl/cash/CashCollectionServiceImpl.java @@ -341,11 +341,32 @@ public User getNameAndMarket(Integer jwcode) { } for (GOrder gOrder : gOrders) { CashRecord cashRecord = new CashRecord(); + //构建基础信息 cashRecord.setOrderType(1); cashRecord.setJwcode(gOrder.getJwcode()); - cashRecord.setName(cashCollectionMapper.getNameByJwcode(gOrder.getJwcode())); + String name=cashCollectionMapper.getNameByJwcode(gOrder.getJwcode()); + if (name!=null){ + cashRecord.setName(name); + }else cashRecord.setName("未知"); + cashRecord.setMarket(cashCollectionMapper.getMarketByJwcode(gOrder.getJwcode())); + if (gOrder.getType().equals("gold")){ //充金豆 cashRecord.setActivity("Link日常充值"); + cashRecord.setGoodsName("Link充值金豆"); + cashRecord.setRemark("Link充值金豆"); + cashRecord.setNumUnit("个"); + cashRecord.setPermanentGold(0); + cashRecord.setGoodNum(gOrder.getCount()); + + } + if (gOrder.getType().equals("gold_coin")){//充金币 + cashRecord.setActivity("Link日常充值"); + cashRecord.setGoodsName("Link充值金币"); + cashRecord.setRemark("Link充值金币"); + cashRecord.setPermanentGold(gOrder.getCount()); + cashRecord.setGoodNum(0); + + } cashRecord.setOrderCode(gOrder.getOrderNo()); if (gOrder != null) { switch (gOrder.getPayStyle()) { @@ -374,16 +395,12 @@ public User getNameAndMarket(Integer jwcode) { break; } } - cashRecord.setGoodsName("Link充值金币"); - cashRecord.setGoodNum(0); - cashRecord.setPermanentGold(gOrder.getCount()); cashRecord.setFreeGold(0); cashRecord.setPaymentCurrency(""); cashRecord.setPaymentAmount(BigDecimal.valueOf(0)); cashRecord.setPayTime(LocalDateTime.ofEpochSecond(gOrder.getSuccessTime(), 0, ZoneOffset.UTC)); cashRecord.setStatus(3); cashRecord.setSubmitterId(99999); - cashRecord.setRemark("Link充值金币"); //存入现金库 cashCollectionMapper.add(cashRecord); cashCollectionMapper.markSynced(gOrder.getId()); diff --git a/src/main/resources/cashMapper/CashCollectionMapper.xml b/src/main/resources/cashMapper/CashCollectionMapper.xml index 220bf91..e021a96 100644 --- a/src/main/resources/cashMapper/CashCollectionMapper.xml +++ b/src/main/resources/cashMapper/CashCollectionMapper.xml @@ -230,7 +230,8 @@ success_time,ios_environment,ios_transaction_id,ios_receipt_data, add_time,is_synced from g_order - where is_synced=0 and state=1 and type='gold_coin' and pay_style in(3,5,6,7,9) + where is_synced=0 and state=1 and pay_style in(3,5,6,7,9) + and success_time>1765246960 limit #{size} - SELECT ugr.*, + SELECT ugr.id,ugr.order_code,ugr.jwcode,ugr.activity, + ugr.rate_id,ugr.money,ugr.sum_gold,ugr.permanent_gold,ugr.free_june,ugr.free_december, + ugr.task_gold,ugr.remark,ugr.pay_model,ugr.pay_platform,ugr.voucher, + ugr.goods_name,ugr.type,ugr.is_refund,ugr.admin_id,ugr.audit_id, + ugr.audit_status,ugr.reject_reason,ugr.pay_time, + ugr.create_time,ugr.audit_time,ugr.update_time, (COALESCE(ugr.free_june, 0) + COALESCE(ugr.free_december, 0)) AS freeGold, u.name as name, m.name as market, @@ -63,12 +68,18 @@ AND ugr.activity = #{rechargeAudit.activity} - + + + AND u.market IN + + #{market} + AND ugr.pay_model = #{rechargeAudit.payModel} @@ -77,7 +88,7 @@ AND ugr.rate_id = #{rechargeAudit.rateId} --> - AND m.name = #{rechargeAudit.market} + AND m.id = #{rechargeAudit.market} AND ugr.audit_time between #{rechargeAudit.startTime} and #{rechargeAudit.endTime} @@ -145,7 +156,7 @@ AND ugr.audit_time between #{refundAudit.startTime} and #{refundAudit.endTime} - AND m.name = #{refundAudit.market} + AND m.id = #{refundAudit.market} From c00c460f8408a377ce08d8220dff0542a9d8eda9 Mon Sep 17 00:00:00 2001 From: wangguorui <2069821375@qq.com> Date: Mon, 1 Dec 2025 18:03:46 +0800 Subject: [PATCH 09/18] =?UTF-8?q?12=E6=9C=881=E6=97=A5=E7=8E=B0=E9=87=91?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E5=A4=9A=E8=AF=AD=E8=A8=80=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=EF=BC=8C=E4=BF=AE=E6=94=B9msg?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../demo/controller/coin/AdminController.java | 26 +++++--- .../demo/controller/coin/RefundController.java | 58 +++++++++------- .../example/demo/service/coin/AdminService.java | 5 +- .../example/demo/service/coin/RefundService.java | 7 +- .../demo/serviceImpl/coin/AdminServiceImpl.java | 45 +++++++++---- .../serviceImpl/coin/ExportExcelServiceImpl.java | 2 +- .../demo/serviceImpl/coin/RefundServiceImpl.java | 78 +++++++++++++--------- 7 files changed, 133 insertions(+), 88 deletions(-) diff --git a/src/main/java/com/example/demo/controller/coin/AdminController.java b/src/main/java/com/example/demo/controller/coin/AdminController.java index b821128..32ca95c 100644 --- a/src/main/java/com/example/demo/controller/coin/AdminController.java +++ b/src/main/java/com/example/demo/controller/coin/AdminController.java @@ -46,7 +46,7 @@ public class AdminController { @Log("用户登录") @PostMapping("/login") - public Result login(@RequestBody Admin admin) { + public Result login(@RequestBody Admin admin, @RequestHeader(defaultValue = "zh") String lang) { try { admin = adminService.login(admin); @@ -58,14 +58,15 @@ public class AdminController { } catch (Exception e) { e.printStackTrace(); log.error(e.getMessage()); - return Result.error(e.getMessage()); + String translatedErrorMsg = languageTranslationUtil.translate(e.getMessage(), lang); + return Result.error(translatedErrorMsg); } } @Log("查看用户信息") @PostMapping("/userinfo") public UserDetails getUserInfo(@RequestHeader("token") String token1, - @RequestHeader(defaultValue = "zh_CN") String lang) { + @RequestHeader(defaultValue = "zh") String lang) { //String token = token1.getToken(); String token = token1; @@ -86,26 +87,28 @@ public class AdminController { //获取管理员ID @Log("获取用户ID") @PostMapping("/adminId") - public Result selectId(@RequestBody Admin admin) { + public Result selectId(@RequestBody Admin admin, @RequestHeader(defaultValue = "zh") String lang) { try { String ID = adminService.getId(admin.getAccount()); return Result.success(ID); } catch (Exception e) { log.error(e.getMessage()); - return Result.error(e.getMessage()); + String translatedErrorMsg = languageTranslationUtil.translate(e.getMessage(), lang); + return Result.error(translatedErrorMsg); } } //更新用户密码 @Log("更新用户密码") @PostMapping("/password") - public Result updatePassword(@RequestBody Password password){ + public Result updatePassword(@RequestBody Password password, @RequestHeader(defaultValue = "zh") String lang){ try { - return adminService.updatePassword(password); + return adminService.updatePassword(password, lang); } catch (Exception e) { - return Result.error("服务器波动,请稍作等待"); + String translatedErrorMsg = languageTranslationUtil.translate("服务器波动,请稍作等待", lang); + return Result.error(translatedErrorMsg); } } @@ -113,12 +116,13 @@ public class AdminController { //更新用户密码 @Log("重置用户密码") @PostMapping("/reset") - public Result resetPassword(@RequestBody Password password){ + public Result resetPassword(@RequestBody Password password, @RequestHeader(defaultValue = "zh") String lang){ try { - return adminService.resetPassword(password); + return adminService.resetPassword(password, lang); } catch (Exception e) { - return Result.error("重置失败"); + String translatedErrorMsg = languageTranslationUtil.translate("重置失败", lang); + return Result.error(translatedErrorMsg); } } diff --git a/src/main/java/com/example/demo/controller/coin/RefundController.java b/src/main/java/com/example/demo/controller/coin/RefundController.java index a912810..f5c195e 100644 --- a/src/main/java/com/example/demo/controller/coin/RefundController.java +++ b/src/main/java/com/example/demo/controller/coin/RefundController.java @@ -45,13 +45,15 @@ public class RefundController { //退款明细 @Log("获取全部退款明细") @PostMapping("/selectAll") - public Result selcetAll(@RequestBody Page page) { + public Result selectAll(@RequestBody Page page, @RequestHeader(defaultValue = "zh") 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(); @@ -61,12 +63,14 @@ public class RefundController { List list = Arrays.asList(admin.getMarkets().split(",")); page.getRefundUser().setMarkets(list); } else { - return Result.error("角色为空"); + String errorMsg = languageTranslationUtil.translate("角色为空", lang); + return Result.error(errorMsg); } return Result.success(refundService.selectAll(page.getPageNum(), page.getPageSize(), page.getRefundUser())); } } catch (Exception e) { - return Result.error("请检查筛选数据的格式"); + String errorMsg = languageTranslationUtil.translate("请检查筛选数据的格式", lang); + return Result.error(errorMsg); } } @@ -74,13 +78,15 @@ public class RefundController { //退款筛选 @Log("退款明细筛选") @PostMapping("/selectBy") - public Result selcetBy(@RequestBody Page page, @RequestHeader(defaultValue = "zh_CN") String lang) { + public Result selectBy(@RequestBody Page page, @RequestHeader(defaultValue = "zh") 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权限 if(page.getRefundUser().getMarkets()==null||page.getRefundUser().getMarkets().isEmpty()) { @@ -99,7 +105,8 @@ public class RefundController { return result; } } catch (Exception e) { - return Result.error("请检查筛选数据的格式"); + String errorMsg = languageTranslationUtil.translate("请检查筛选数据的格式", lang); + return Result.error(errorMsg); } } @@ -107,7 +114,7 @@ public class RefundController { //退款金币统计 @Log("退款金币合计数统计") @PostMapping("/statsGold") - public Result statsGold(@RequestBody RefundUser refundUser) { + public Result statsGold(@RequestBody RefundUser refundUser, @RequestHeader(defaultValue = "zh") String lang) { try { //解token权限 if(refundUser.getMarkets()==null||refundUser.getMarkets().isEmpty()) { @@ -120,15 +127,16 @@ public class RefundController { Gold gold = refundService.statsGold(refundUser); return Result.success(gold); } catch (Exception e) { - return Result.error("请检查数据的格式"); + String errorMsg = languageTranslationUtil.translate("请检查数据的格式", lang); + return Result.error(errorMsg); } } //获取退款类型 @Log("获取退款类型") @PostMapping("/refundType") - public Result getRefundType(@RequestHeader(defaultValue = "zh_CN") String lang) { - List list = refundService.getRefundType(); + public Result getRefundType(@RequestHeader(defaultValue = "zh") String lang) { + List list = refundService.getRefundType(lang); // 对退款类型进行多语言转换 translateRefundTypes(list, lang); return Result.success(list); @@ -137,36 +145,40 @@ public class RefundController { //筛选产品 // @Log("筛选商品") @PostMapping("/selectGoods") - public Result getSelectGoods(@RequestBody RefundUser refundUser) { - List list = refundService.selectGoods(refundUser); + public Result getSelectGoods(@RequestBody RefundUser refundUser, @RequestHeader(defaultValue = "zh") String lang) { + List list = refundService.selectGoods(refundUser, lang); return Result.success(list); } //消耗金币退款 @Log("新增金币退款") @PostMapping("/add") - public Result add(@RequestBody RefundUser refundUser) { + public Result add(@RequestBody RefundUser refundUser, @RequestHeader(defaultValue = "zh") String lang) { try { - return refundService.add(refundUser); + return refundService.add(refundUser, lang); } catch (Exception e) { e.printStackTrace(); - return Result.error(e.getMessage()); + String errorMsg = languageTranslationUtil.translate(e.getMessage(), lang); + return Result.error(errorMsg); } } - public Result selcet(@RequestBody Page page) { + + public Result select(@RequestBody Page page, @RequestHeader(defaultValue = "zh") 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 { - return Result.success(refundService.selectBy(page.getPageNum(), page.getPageSize(), page.getRefundUser())); } } catch (Exception e) { e.printStackTrace(); - return Result.error("请检查筛选数据的格式"); + String errorMsg = languageTranslationUtil.translate("请检查筛选数据的格式", lang); + return Result.error(errorMsg); } } diff --git a/src/main/java/com/example/demo/service/coin/AdminService.java b/src/main/java/com/example/demo/service/coin/AdminService.java index 8f1665e..2a0dea1 100644 --- a/src/main/java/com/example/demo/service/coin/AdminService.java +++ b/src/main/java/com/example/demo/service/coin/AdminService.java @@ -20,12 +20,11 @@ public interface AdminService { String getName(String account); //更新密码 - Result updatePassword(Password password); + Result updatePassword(Password password, String lang); //重置密码 - Result resetPassword(Password password); + Result resetPassword(Password password, String lang); //获取当前登录的管理员账号 String getCurrentAdminAccount(); } - diff --git a/src/main/java/com/example/demo/service/coin/RefundService.java b/src/main/java/com/example/demo/service/coin/RefundService.java index b52546d..f4a00bc 100644 --- a/src/main/java/com/example/demo/service/coin/RefundService.java +++ b/src/main/java/com/example/demo/service/coin/RefundService.java @@ -1,6 +1,5 @@ package com.example.demo.service.coin; - import com.example.demo.domain.vo.coin.ConsumeUser; import com.example.demo.domain.vo.coin.Gold; import com.example.demo.domain.vo.coin.RefundUser; @@ -30,12 +29,12 @@ public interface RefundService { PageInfo selectBy(Integer pageNum, Integer pageSize, RefundUser refundUser)throws Exception; //添加退款记录 - Result add(RefundUser refundUser); + Result add(RefundUser refundUser, String lang); //获取退款类型 - List getRefundType(); + List getRefundType(String lang); //查找退款商品 - List selectGoods(RefundUser refundUser); + List selectGoods(RefundUser refundUser, String lang); } diff --git a/src/main/java/com/example/demo/serviceImpl/coin/AdminServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/coin/AdminServiceImpl.java index b28b1a4..96fe0fa 100644 --- a/src/main/java/com/example/demo/serviceImpl/coin/AdminServiceImpl.java +++ b/src/main/java/com/example/demo/serviceImpl/coin/AdminServiceImpl.java @@ -5,6 +5,7 @@ import com.example.demo.domain.vo.coin.Password; import com.example.demo.domain.vo.coin.Result; import com.example.demo.mapper.coin.AdminMapper; import com.example.demo.service.coin.AdminService; +import com.example.demo.Util.LanguageTranslationUtil; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.authentication.AuthenticationManager; @@ -27,6 +28,10 @@ public class AdminServiceImpl implements AdminService { private AuthenticationManager authenticationManager; private final AdminMapper adminMapper; + // 注入多语言工具类 + @Autowired + private LanguageTranslationUtil languageTranslationUtil; + @Override public Admin login(Admin admin) throws Exception { String account = admin.getAccount(); @@ -93,29 +98,34 @@ public class AdminServiceImpl implements AdminService { //更新密码 @Override - public Result updatePassword(Password password) { + public Result updatePassword(Password password, String lang) { String oldPassword = password.getOldPassword(); String newPassword = password.getNewPassword(); String againPassword = password.getAgainPassword(); // 校验输入参数是否为空(账号、旧密码、新密码、确认密码均不可为空) if(oldPassword == null || newPassword == null || againPassword == null ||password.getAccount() == null) { - return Result.error("输入不能为空"); + String errorMsg = languageTranslationUtil.translate("输入不能为空", lang); + return Result.error(errorMsg); } // 检查两次输入的新密码是否一致 if (!newPassword.equals(againPassword)) { - return Result.error("两次输入的新密码不一致,请核对后重新输入"); + String errorMsg = languageTranslationUtil.translate("两次输入的新密码不一致,请核对后重新输入", lang); + return Result.error(errorMsg); } // 检查新密码是否符合复杂度要求 if (!PASSWORD_PATTERN.matcher(newPassword).matches()) { - return Result.error("新密码必须为8-16位数字、字母或符号组成,且至少包含其中两种"); + String errorMsg = languageTranslationUtil.translate("新密码必须为8-16位数字、字母或符号组成,且至少包含其中两种", lang); + return Result.error(errorMsg); } if(adminMapper.getAdmin(password.getAccount())==null) { - return Result.error("用户不存在"); + String errorMsg = languageTranslationUtil.translate("用户不存在", lang); + return Result.error(errorMsg); } // 校验新密码是否与旧密码相同(不允许相同) if (oldPassword.equals(newPassword)) { - return Result.error("新密码与历史密码重复"); + String errorMsg = languageTranslationUtil.translate("新密码与历史密码重复", lang); + return Result.error(errorMsg); } try { // 创建认证令牌并验证旧密码 @@ -136,29 +146,34 @@ public class AdminServiceImpl implements AdminService { admin.setPassword(encodedPassword); admin.setUpdateTime(new Date()); // 更新修改时间 adminMapper.updatePassword(admin); - return Result.success("密码修改成功"); + String successMsg = languageTranslationUtil.translate("密码修改成功", lang); + return Result.success(successMsg); } catch (BadCredentialsException e) { // 旧密码验证失败 - return Result.error("原密码错误,请重新输入"); + String errorMsg = languageTranslationUtil.translate("原密码错误,请重新输入", lang); + return Result.error(errorMsg); } catch (Exception e) { - return Result.error("密码更新失败"); + String errorMsg = languageTranslationUtil.translate("密码更新失败", lang); + return Result.error(errorMsg); } } //重置密码 @Override - public Result resetPassword(Password password) { + public Result resetPassword(Password password, String lang) { String newPassword = "123456"; if(password.getAccount() == null) { - return Result.error("账户未输入"); + String errorMsg = languageTranslationUtil.translate("账户未输入", lang); + return Result.error(errorMsg); } if(adminMapper.getAdmin(password.getAccount())==null) { - return Result.error("账户查找不到"); + String errorMsg = languageTranslationUtil.translate("账户查找不到", lang); + return Result.error(errorMsg); } try { // 获取认证后的用户信息 @@ -173,10 +188,12 @@ public class AdminServiceImpl implements AdminService { admin.setUpdateTime(new Date()); // 更新修改时间 adminMapper.updatePassword(admin); - return Result.success("密码重置成功"); + String successMsg = languageTranslationUtil.translate("密码重置成功", lang); + return Result.success(successMsg); } catch (Exception e) { - return Result.error("其他错误"); + String errorMsg = languageTranslationUtil.translate("其他错误", lang); + return Result.error(errorMsg); } } 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 c5ed708..efefdaa 100644 --- a/src/main/java/com/example/demo/serviceImpl/coin/ExportExcelServiceImpl.java +++ b/src/main/java/com/example/demo/serviceImpl/coin/ExportExcelServiceImpl.java @@ -187,7 +187,7 @@ public class ExportExcelServiceImpl implements ExportExcelService { List markets = Arrays.asList(StringUtils.split(admin.getMarkets(), ",")); refundUser.setMarkets(markets); page.setRefundUser(refundUser); - return refundController.selcet(page); + return refundController.select(page, String.join(",", markets)); } catch (Exception e) { throw new RuntimeException(e); } diff --git a/src/main/java/com/example/demo/serviceImpl/coin/RefundServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/coin/RefundServiceImpl.java index 0401b67..0bfdc87 100644 --- a/src/main/java/com/example/demo/serviceImpl/coin/RefundServiceImpl.java +++ b/src/main/java/com/example/demo/serviceImpl/coin/RefundServiceImpl.java @@ -4,6 +4,7 @@ import com.example.demo.domain.entity.UserGoldRecord; import com.example.demo.mapper.coin.*; import com.example.demo.service.coin.MarketService; import com.example.demo.service.coin.RefundService; +import com.example.demo.Util.LanguageTranslationUtil; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import org.springframework.beans.factory.annotation.Autowired; @@ -40,12 +41,16 @@ public class RefundServiceImpl implements RefundService { @Autowired private UserMapper userMapper; - @Autowired private MarketMapper marketMapper; + @Autowired private RechargeMapper rechargeMapper; + // 注入多语言工具类 + @Autowired + private LanguageTranslationUtil languageTranslationUtil; + //查找全部退款 @Override public PageInfo selectAll(Integer pageNum, Integer pageSize, RefundUser refundUser) throws Exception { @@ -84,29 +89,34 @@ public class RefundServiceImpl implements RefundService { //添加退款记录 @Transactional @Override - public Result add(RefundUser refundUser) { + public Result add(RefundUser refundUser, String lang) { if (refundUser.getTaskGold() == null || refundUser.getFreeGold() == null || refundUser.getPermanentGold() == null) { - return Result.error("金币不能为空"); + String errorMsg = languageTranslationUtil.translate("金币不能为空", lang); + return Result.error(errorMsg); } if (refundUser.getTaskGold().compareTo(BigDecimal.ZERO) < 0 || refundUser.getFreeGold().compareTo(BigDecimal.ZERO) < 0 || refundUser.getPermanentGold().compareTo(BigDecimal.ZERO) < 0) { - return Result.error("金币不能为负数"); + String errorMsg = languageTranslationUtil.translate("金币不能为负数", lang); + return Result.error(errorMsg); } if (refundUser.getJwcode() < 10000000 || refundUser.getJwcode() > 99999999) { - return Result.error("精网号位数小于8位或大于8位"); + String errorMsg = languageTranslationUtil.translate("精网号位数小于8位或大于8位", lang); + return Result.error(errorMsg); } GoldUser goldUser = userMapper.selectUser(refundUser.getJwcode().toString()); if (goldUser == null) { - return Result.error("用户不存在"); + String errorMsg = languageTranslationUtil.translate("用户不存在", lang); + return Result.error(errorMsg); } UserGoldRecord userGoldRecord = new UserGoldRecord(); if(refundUser.getOrderCode()==null|| refundUser.getOrderCode().isEmpty()){ - return Result.error("订单号不能为空"); + String errorMsg = languageTranslationUtil.translate("订单号不能为空", lang); + return Result.error(errorMsg); } String goodsName = ""; if(refundUser.getGoodsName()==null|| refundUser.getGoodsName().isEmpty()){ - goodsName = "空"; + goodsName = languageTranslationUtil.translate("空", lang); }else { goodsName = refundUser.getGoodsName(); } @@ -138,7 +148,8 @@ public class RefundServiceImpl implements RefundService { if (refundUser.getFreeGold().compareTo(gold.getNowFreeDecember().add(gold.getNowFreeJune())) > 0 || refundUser.getPermanentGold().compareTo(gold.getNowPermanentGold()) > 0 || refundUser.getTaskGold().compareTo(gold.getNowTaskGold()) > 0) { - return Result.error("金币数量不足"); + String errorMsg = languageTranslationUtil.translate("金币数量不足", lang); + return Result.error(errorMsg); } // 根据当前月份设置对应字段 if (currentMonth >= 1 && currentMonth <= 6) { @@ -166,8 +177,6 @@ public class RefundServiceImpl implements RefundService { userGoldRecord.setSumGold(-refundUser.getSumGold().intValue()); } - - userGoldRecord.setPayPlatform("金币系统"); userGoldRecord.setRemark(refundUser.getRemark()); userGoldRecord.setAdminId(refundUser.getAdminId()); @@ -178,49 +187,57 @@ public class RefundServiceImpl implements RefundService { List list1 = consumeMapper.selectOrderCodeByJwcode(refundUser); List list2 = rechargeMapper.selectOrderCodeByJwcode(refundUser); if(Objects.equals(refundUser.getRefundType(), "商品退款")){ - //消费订单号校验 - if (list1 == null || list1.isEmpty()) { - return Result.error("该用户没有该订单号"); - } else if (list1.size() == 1) { - ConsumeUser consumeUser = list1.getFirst(); - if (consumeUser.getIsRefund().equals(1)) { - return Result.error("该订单已被退款或待审核"); + //消费订单号校验 + if (list1 == null || list1.isEmpty()) { + String errorMsg = languageTranslationUtil.translate("该用户没有该订单号", lang); + return Result.error(errorMsg); + } else if (list1.size() == 1) { + ConsumeUser consumeUser = list1.getFirst(); + if (consumeUser.getIsRefund().equals(1)) { + String errorMsg = languageTranslationUtil.translate("该订单已被退款或待审核", lang); + return Result.error(errorMsg); + } + } else { + String errorMsg = languageTranslationUtil.translate("订单重复", lang); + return Result.error(errorMsg); } - } else { - return Result.error("订单重复"); - } }else{ //充值订单号校验 if (list2 == null || list2.isEmpty()) { - return Result.error("该用户没有该订单号"); + String errorMsg = languageTranslationUtil.translate("该用户没有该订单号", lang); + return Result.error(errorMsg); } else if (list2.size() == 1) { RechargeUser rechargeUser = list2.getFirst(); if (rechargeUser.getIsRefund().equals(1)) { - return Result.error("该订单已被退款或待审核"); + String errorMsg = languageTranslationUtil.translate("该订单已被退款或待审核", lang); + return Result.error(errorMsg); } } else { - return Result.error("订单重复"); + String errorMsg = languageTranslationUtil.translate("订单重复", lang); + return Result.error(errorMsg); } } refundMapper.add(userGoldRecord); consumeMapper.updateIsRefund(orderCode); - return Result.success(); + String successMsg = languageTranslationUtil.translate("操作成功", lang); + return Result.success(successMsg); } //获取退款类型 @Override - public List getRefundType() { + public List getRefundType(String lang) { List list = refundMapper.getRefundType(); List filteredList = list.stream() .filter(Objects::nonNull) // 过滤掉 null 值 .filter(str -> !str.trim().isEmpty()) // 过滤掉空字符串和仅包含空白字符的字符串 + .map(type -> languageTranslationUtil.translate(type, lang)) // 翻译每个类型 .collect(Collectors.toList()); return filteredList; } //查找退款商品 @Override - public List selectGoods(RefundUser refundUser) { + public List selectGoods(RefundUser refundUser, String lang) { List refundUsers = refundMapper.selectGoods(refundUser); List list = new ArrayList<>(); for (RefundUser record : refundUsers) { @@ -228,16 +245,13 @@ public class RefundServiceImpl implements RefundService { continue; } - String orderCode = record.getOrderCode() != null ? record.getOrderCode() : "无订单号"; - String goodsName = record.getGoodsName() != null ? record.getGoodsName() : "无商品名"; + String orderCode = record.getOrderCode() != null ? record.getOrderCode() : languageTranslationUtil.translate("无订单号", lang); + String goodsName = record.getGoodsName() != null ? record.getGoodsName() : languageTranslationUtil.translate("无商品名", lang); BigDecimal permanentGold = record.getPermanentGold() != null ? record.getPermanentGold() : BigDecimal.ZERO; BigDecimal freeGold = record.getFreeGold() != null ? record.getFreeGold() : BigDecimal.ZERO; BigDecimal taskGold = record.getTaskGold() != null ? record.getTaskGold() : BigDecimal.ZERO; -// 计算总和 - // 拼接格式:订单号_商品名(例如:XF20250629_商品BC) - String combined = orderCode + "_" + goodsName; RefundUser newRefundUser = new RefundUser(); newRefundUser.setOrderCode(orderCode); newRefundUser.setGoodsName(goodsName); From a878abc6022888d52dc3058c0bb554ee77e43650 Mon Sep 17 00:00:00 2001 From: wangguorui <2069821375@qq.com> Date: Mon, 1 Dec 2025 18:20:15 +0800 Subject: [PATCH 10/18] =?UTF-8?q?12=E6=9C=881=E6=97=A5=E7=8E=B0=E9=87=91?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E5=A4=9A=E8=AF=AD=E8=A8=80=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=EF=BC=8C=E4=BF=AE=E6=94=B9msg?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../demo/controller/coin/AuditController.java | 8 +++---- .../demo/controller/coin/GeneralController.java | 26 +++++++++++----------- .../demo/controller/coin/RechargeController.java | 8 +++---- 3 files changed, 21 insertions(+), 21 deletions(-) diff --git a/src/main/java/com/example/demo/controller/coin/AuditController.java b/src/main/java/com/example/demo/controller/coin/AuditController.java index f393799..058a89d 100644 --- a/src/main/java/com/example/demo/controller/coin/AuditController.java +++ b/src/main/java/com/example/demo/controller/coin/AuditController.java @@ -150,10 +150,10 @@ public class AuditController { if (audit.getPayModel() != null) { audit.setPayModel(languageTranslationUtil.translate(audit.getPayModel(), lang)); } - // 翻译活动名称 - if (audit.getActivity() != null) { - audit.setActivity(languageTranslationUtil.translate(audit.getActivity(), lang)); - } +// // 翻译活动名称 +// if (audit.getActivity() != null) { +// audit.setActivity(languageTranslationUtil.translate(audit.getActivity(), lang)); +// } // 翻译备注 if (audit.getRemark() != null) { audit.setRemark(languageTranslationUtil.translate(audit.getRemark(), lang)); diff --git a/src/main/java/com/example/demo/controller/coin/GeneralController.java b/src/main/java/com/example/demo/controller/coin/GeneralController.java index 6e4985c..fc765b0 100644 --- a/src/main/java/com/example/demo/controller/coin/GeneralController.java +++ b/src/main/java/com/example/demo/controller/coin/GeneralController.java @@ -90,8 +90,8 @@ public class GeneralController { public Result getActivity(@RequestHeader(defaultValue = "zh_CN") String lang) { List list = generalService.getActivity(); - // 对活动名称进行多语言转换 - translateActivityNames(list, lang); +// // 对活动名称进行多语言转换 +// translateActivityNames(list, lang); return Result.success(list); } //获取汇率 @@ -134,17 +134,17 @@ public class GeneralController { } } - /** - * 转换活动名称为指定语言 - */ - private void translateActivityNames(List activityNames, String lang) { - if (activityNames != null && !activityNames.isEmpty()) { - for (int i = 0; i < activityNames.size(); i++) { - String translatedName = languageTranslationUtil.translate(activityNames.get(i), lang); - activityNames.set(i, translatedName); - } - } - } +// /** +// * 转换活动名称为指定语言 +// */ +// private void translateActivityNames(List activityNames, String lang) { +// if (activityNames != null && !activityNames.isEmpty()) { +// for (int i = 0; i < activityNames.size(); i++) { +// String translatedName = languageTranslationUtil.translate(activityNames.get(i), lang); +// activityNames.set(i, translatedName); +// } +// } +// } /** * 转换汇率名称为指定语言 diff --git a/src/main/java/com/example/demo/controller/coin/RechargeController.java b/src/main/java/com/example/demo/controller/coin/RechargeController.java index 44dd4de..801f5fe 100644 --- a/src/main/java/com/example/demo/controller/coin/RechargeController.java +++ b/src/main/java/com/example/demo/controller/coin/RechargeController.java @@ -174,10 +174,10 @@ public class RechargeController { if (user.getMarket() != null) { user.setMarket(languageTranslationUtil.translate(user.getMarket(), lang)); } - // 翻译活动名称 - if (user.getActivity() != null) { - user.setActivity(languageTranslationUtil.translate(user.getActivity(), lang)); - } +// // 翻译活动名称 +// if (user.getActivity() != null) { +// user.setActivity(languageTranslationUtil.translate(user.getActivity(), lang)); +// } // 翻译汇率名称 if (user.getRateName() != null) { user.setRateName(languageTranslationUtil.translate(user.getRateName(), lang)); From 100cacf53c8c93e02540c55bd7691fa566049682 Mon Sep 17 00:00:00 2001 From: lijianlin Date: Tue, 2 Dec 2025 09:43:22 +0800 Subject: [PATCH 11/18] =?UTF-8?q?12-01=20=E7=BA=BF=E4=B8=8A=E8=AE=A2?= =?UTF-8?q?=E5=8D=95=E5=90=8C=E6=AD=A5=EF=BC=8C=E8=A1=A5=E5=85=85=E5=AD=97?= =?UTF-8?q?=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/example/demo/domain/entity/CashRecord.java | 1 + src/main/java/com/example/demo/domain/entity/GOrder.java | 2 ++ .../example/demo/serviceImpl/cash/CashCollectionServiceImpl.java | 6 ++++++ 3 files changed, 9 insertions(+) diff --git a/src/main/java/com/example/demo/domain/entity/CashRecord.java b/src/main/java/com/example/demo/domain/entity/CashRecord.java index c161eeb..a097493 100644 --- a/src/main/java/com/example/demo/domain/entity/CashRecord.java +++ b/src/main/java/com/example/demo/domain/entity/CashRecord.java @@ -39,6 +39,7 @@ public class CashRecord implements Serializable { private String NumUnit; // 数量单位 个/月/年 private Integer permanentGold; // 永久金币数量 private Integer freeGold; // 免费金币数量 + private String payload; //平台 // 金额信息 private String paymentCurrency; // 付款币种 diff --git a/src/main/java/com/example/demo/domain/entity/GOrder.java b/src/main/java/com/example/demo/domain/entity/GOrder.java index 3677adf..183b86e 100644 --- a/src/main/java/com/example/demo/domain/entity/GOrder.java +++ b/src/main/java/com/example/demo/domain/entity/GOrder.java @@ -33,4 +33,6 @@ public class GOrder { private Integer addTime; // 创建时间 private Integer updTime; // 更新时间 private Integer isSynced; // 0未同步 1已同步 + private String firstdataIpgTransactionId; // FirstData订单号 + } \ No newline at end of file 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 4431284..14df521 100644 --- a/src/main/java/com/example/demo/serviceImpl/cash/CashCollectionServiceImpl.java +++ b/src/main/java/com/example/demo/serviceImpl/cash/CashCollectionServiceImpl.java @@ -374,22 +374,28 @@ public User getNameAndMarket(Integer jwcode) { cashRecord.setPayType("IOS内购"); cashRecord.setBankCode(gOrder.getIosTransactionId()); cashRecord.setReceivedMarket("3"); + cashRecord.setPayload("IOS"); break; case 5: cashRecord.setPayType("Stripe-链接收款"); cashRecord.setReceivedMarket("13"); + cashRecord.setPayload("Stripe"); break; case 6: cashRecord.setPayType("PaymentAsia-链接收款"); cashRecord.setReceivedMarket("13"); + cashRecord.setPayload("PaymentAsia"); break; case 7: cashRecord.setPayType("Ipay88-链接收款"); cashRecord.setReceivedMarket("5"); + cashRecord.setPayload("Ipay88"); break; case 9: cashRecord.setPayType("FistData"); cashRecord.setReceivedMarket("4"); + cashRecord.setBankCode(gOrder.getFirstdataIpgTransactionId()); + cashRecord.setPayload("FistData"); break; default: break; From 24788325b75c2268e0e01ca06e378370c7f6f1ab Mon Sep 17 00:00:00 2001 From: sunjiabei Date: Tue, 2 Dec 2025 09:43:42 +0800 Subject: [PATCH 12/18] =?UTF-8?q?12=E6=9C=882=E6=97=A5=E5=9C=B0=E5=8C=BA?= =?UTF-8?q?=E4=BC=A0=E5=80=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/mapper/BeanAuditMapper.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/resources/mapper/BeanAuditMapper.xml b/src/main/resources/mapper/BeanAuditMapper.xml index 3756014..f147e0f 100644 --- a/src/main/resources/mapper/BeanAuditMapper.xml +++ b/src/main/resources/mapper/BeanAuditMapper.xml @@ -27,7 +27,7 @@ AND a.jwcode = #{jwcode} - AND m.name = #{market} + AND m.id = #{market} AND a.create_time BETWEEN #{createStartTime} AND #{createEndTime} From 54926b0cb5d49ebdede4c37472cceeb7d2a8ee1d Mon Sep 17 00:00:00 2001 From: sunjiabei Date: Tue, 2 Dec 2025 09:45:49 +0800 Subject: [PATCH 13/18] =?UTF-8?q?12=E6=9C=882=E6=97=A5=E5=90=8C=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/example/demo/controller/cash/Bank.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/com/example/demo/controller/cash/Bank.java b/src/main/java/com/example/demo/controller/cash/Bank.java index 7b95437..6d2cedf 100644 --- a/src/main/java/com/example/demo/controller/cash/Bank.java +++ b/src/main/java/com/example/demo/controller/cash/Bank.java @@ -11,4 +11,6 @@ package com.example.demo.controller.cash; public class Bank { + + } From c3b169f02dad8c84b0755951d91783ee7ff773e5 Mon Sep 17 00:00:00 2001 From: wangguorui <2069821375@qq.com> Date: Tue, 2 Dec 2025 12:17:58 +0800 Subject: [PATCH 14/18] =?UTF-8?q?12=E6=9C=882=E6=97=A5=E7=8E=B0=E9=87=91?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E5=A4=9A=E8=AF=AD=E8=A8=80=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=EF=BC=8C=E5=8F=8D=E5=90=91=E6=9F=A5=E8=AF=A2=E4=B8=AD=E6=96=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../demo/controller/coin/AdminController.java | 66 +++++++++- .../demo/controller/coin/AuditController.java | 114 +++++++++++++++++ .../demo/controller/coin/ConsumeController.java | 95 ++++++++++++-- .../demo/controller/coin/GeneralController.java | 96 ++++++++++++-- .../demo/controller/coin/GoldDetailController.java | 99 ++++++++++++-- .../demo/controller/coin/MarketController.java | 53 +++++++- .../demo/controller/coin/MenuController.java | 52 +++++++- .../demo/controller/coin/RechargeController.java | 96 +++++++++++++- .../demo/controller/coin/RefundController.java | 142 ++++++++++++++++++++- .../demo/controller/coin/UserController.java | 46 +++++++ .../demo/controller/coin/WorkbenchController.java | 76 ++++++++++- .../demo/mapper/coin/TranslationMapper.java | 6 + .../demo/service/coin/TranslationService.java | 3 + .../serviceImpl/coin/TranslationServiceImpl.java | 25 ++++ src/main/resources/mapper/TranslationMapper.xml | 21 +++ 15 files changed, 944 insertions(+), 46 deletions(-) diff --git a/src/main/java/com/example/demo/controller/coin/AdminController.java b/src/main/java/com/example/demo/controller/coin/AdminController.java index 32ca95c..dd1c326 100644 --- a/src/main/java/com/example/demo/controller/coin/AdminController.java +++ b/src/main/java/com/example/demo/controller/coin/AdminController.java @@ -8,6 +8,7 @@ import com.example.demo.domain.vo.coin.Password; import com.example.demo.domain.vo.coin.Result; import com.example.demo.mapper.coin.AdminMapper; import com.example.demo.service.coin.AdminService; +import com.example.demo.service.coin.TranslationService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -37,6 +38,9 @@ public class AdminController { @Autowired private LanguageTranslationUtil languageTranslationUtil; + @Autowired + private TranslationService translationService; + @PostMapping("/test") public void testGetAdmin() { Admin admin = adminMapper.getAdmin("14518"); @@ -67,8 +71,6 @@ public class AdminController { @PostMapping("/userinfo") public UserDetails getUserInfo(@RequestHeader("token") String token1, @RequestHeader(defaultValue = "zh") String lang) { - - //String token = token1.getToken(); String token = token1; try { @@ -76,6 +78,11 @@ public class AdminController { // 对用户信息进行多语言转换 if (userDetails instanceof Admin) { Admin admin = (Admin) userDetails; + // 如果不是中文环境,先将翻译后的文本转换回中文进行处理 + String languageCode = parseLanguageCode(lang); + if (!"zh".equalsIgnoreCase(languageCode)) { + convertTranslatedFieldsToChinese(admin, languageCode); + } translateAdminInfo(admin, lang); } return userDetails; @@ -84,6 +91,7 @@ public class AdminController { } } + //获取管理员ID @Log("获取用户ID") @PostMapping("/adminId") @@ -157,4 +165,58 @@ public class AdminController { } } } + /** + * 解析语言代码 + */ + 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(Admin admin, String languageCode) { + if (admin != null) { + // 转换市场权限信息 + if (admin.getMarkets() != null && !admin.getMarkets().isEmpty()) { + String[] markets = admin.getMarkets().split(","); + StringBuilder convertedMarkets = new StringBuilder(); + for (int i = 0; i < markets.length; i++) { + if (i > 0) { + convertedMarkets.append(","); + } + String chineseMarket = translationService.findChineseSimplifiedByTranslation( + markets[i].trim(), languageCode); + convertedMarkets.append(chineseMarket); + } + admin.setMarkets(convertedMarkets.toString()); + } + + // 转换职位信息 + if (admin.getPostiton() != null && !admin.getPostiton().isEmpty()) { + String chinesePosition = translationService.findChineseSimplifiedByTranslation( + admin.getPostiton(), languageCode); + admin.setPostiton(chinesePosition); + } + + // 转换备注 + if (admin.getRemark() != null && !admin.getRemark().isEmpty()) { + String chineseRemark = translationService.findChineseSimplifiedByTranslation( + admin.getRemark(), languageCode); + admin.setRemark(chineseRemark); + } + } + } } diff --git a/src/main/java/com/example/demo/controller/coin/AuditController.java b/src/main/java/com/example/demo/controller/coin/AuditController.java index 058a89d..a923d73 100644 --- a/src/main/java/com/example/demo/controller/coin/AuditController.java +++ b/src/main/java/com/example/demo/controller/coin/AuditController.java @@ -5,6 +5,7 @@ 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.AuditService; +import com.example.demo.service.coin.TranslationService; import com.github.pagehelper.PageInfo; import jakarta.servlet.http.HttpServletRequest; import lombok.RequiredArgsConstructor; @@ -42,6 +43,9 @@ public class AuditController { @Autowired private LanguageTranslationUtil languageTranslationUtil; + @Autowired + private TranslationService translationService; + //审核订单 @Log("审核订单") @PostMapping("audit") @@ -60,6 +64,15 @@ public class AuditController { Integer pageNum = page.getPageNum(); Integer pageSize = page.getPageSize(); RechargeAudit rechargeAudit = page.getRechargeAudit(); + + // 解析语言代码 + String languageCode = parseLanguageCode(lang); + + // 如果不是中文环境,将查询条件中的翻译文本转换为中文简体 + if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) { + convertRechargeTranslatedFieldsToChinese(rechargeAudit, languageCode); + } + //解token权限 HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); String token = request.getHeader("token"); @@ -75,6 +88,7 @@ public class AuditController { return pageInfo; } + //多条件查询退款审核订单列表 @Log("查询退款审核订单列表") @PostMapping("selectRefund") @@ -84,6 +98,15 @@ public class AuditController { Integer pageNum = page.getPageNum(); Integer pageSize = page.getPageSize(); RefundAudit refundAudit = page.getRefundAudit(); + + // 解析语言代码 + String languageCode = parseLanguageCode(lang); + + // 如果不是中文环境,将查询条件中的翻译文本转换为中文简体 + if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) { + convertRefundTranslatedFieldsToChinese(refundAudit, languageCode); + } + //解token权限 HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); String token = request.getHeader("token"); @@ -98,6 +121,7 @@ public class AuditController { translateRefundAuditResults(pageInfo, lang); return pageInfo; } + //充值审核合计数 @Log("充值审核合计数") @PostMapping("sumRechargeGold") @@ -208,4 +232,94 @@ public class AuditController { return "未知退款方式"; } } + + /** + * 解析语言代码 + */ + 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 convertRechargeTranslatedFieldsToChinese(RechargeAudit rechargeAudit, String languageCode) { + if (rechargeAudit != null) { + // 转换市场名称 + if (rechargeAudit.getMarket() != null && !rechargeAudit.getMarket().isEmpty()) { + String chineseMarket = translationService.findChineseSimplifiedByTranslation( + rechargeAudit.getMarket(), languageCode); + rechargeAudit.setMarket(chineseMarket); + } + + // 转换汇率名称 + if (rechargeAudit.getRateName() != null && !rechargeAudit.getRateName().isEmpty()) { + String chineseRateName = translationService.findChineseSimplifiedByTranslation( + rechargeAudit.getRateName(), languageCode); + rechargeAudit.setRateName(chineseRateName); + } + + // 转换支付方式 + if (rechargeAudit.getPayModel() != null && !rechargeAudit.getPayModel().isEmpty()) { + String chinesePayModel = translationService.findChineseSimplifiedByTranslation( + rechargeAudit.getPayModel(), languageCode); + rechargeAudit.setPayModel(chinesePayModel); + } + + // 转换备注 + if (rechargeAudit.getRemark() != null && !rechargeAudit.getRemark().isEmpty()) { + String chineseRemark = translationService.findChineseSimplifiedByTranslation( + rechargeAudit.getRemark(), languageCode); + rechargeAudit.setRemark(chineseRemark); + } + } + } + + /** + * 将退款审核查询条件中的翻译字段转换为中文简体 + */ + private void convertRefundTranslatedFieldsToChinese(RefundAudit refundAudit, String languageCode) { + if (refundAudit != null) { + // 转换市场名称 + if (refundAudit.getMarket() != null && !refundAudit.getMarket().isEmpty()) { + String chineseMarket = translationService.findChineseSimplifiedByTranslation( + refundAudit.getMarket(), languageCode); + refundAudit.setMarket(chineseMarket); + } + + // 转换商品名称 + if (refundAudit.getGoodsName() != null && !refundAudit.getGoodsName().isEmpty()) { + String chineseGoodsName = translationService.findChineseSimplifiedByTranslation( + refundAudit.getGoodsName(), languageCode); + refundAudit.setGoodsName(chineseGoodsName); + } + + // 转换退款类型 + if (refundAudit.getRefundType() != null && !refundAudit.getRefundType().isEmpty()) { + String chineseRefundType = translationService.findChineseSimplifiedByTranslation( + refundAudit.getRefundType(), languageCode); + refundAudit.setRefundType(chineseRefundType); + } + + // 转换备注 + if (refundAudit.getRemark() != null && !refundAudit.getRemark().isEmpty()) { + String chineseRemark = translationService.findChineseSimplifiedByTranslation( + refundAudit.getRemark(), languageCode); + refundAudit.setRemark(chineseRemark); + } + } + } + } \ No newline at end of file diff --git a/src/main/java/com/example/demo/controller/coin/ConsumeController.java b/src/main/java/com/example/demo/controller/coin/ConsumeController.java index e1ae638..4c99aa4 100644 --- a/src/main/java/com/example/demo/controller/coin/ConsumeController.java +++ b/src/main/java/com/example/demo/controller/coin/ConsumeController.java @@ -9,6 +9,7 @@ import com.example.demo.domain.vo.coin.Gold; import com.example.demo.domain.vo.coin.Page; import com.example.demo.domain.vo.coin.Result; import com.example.demo.service.coin.ConsumeService; +import com.example.demo.service.coin.TranslationService; import com.github.pagehelper.PageInfo; import jakarta.servlet.http.HttpServletRequest; import lombok.RequiredArgsConstructor; @@ -46,6 +47,9 @@ public class ConsumeController { @Autowired private LanguageTranslationUtil languageTranslationUtil; + @Autowired + private TranslationService translationService; + //消耗明细 @Log("查看所有消耗明细") @PostMapping("/selectAll") @@ -80,8 +84,6 @@ public class ConsumeController { } - - //消耗明细筛选 @Log("筛选查询消耗明细") @PostMapping("/selectBy") public Result selectBy(@RequestBody Page page, @RequestHeader(defaultValue = "zh_CN") String lang) { @@ -94,6 +96,14 @@ public class ConsumeController { if (ObjectUtils.isEmpty(page.getPageSize())) { return Result.error("页大小为空!"); } else { + // 解析语言参数,提取语言代码 + String languageCode = parseLanguageCode(lang); + + // 如果不是中文,则尝试将查询条件中的翻译文本转换为中文简体 + if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) { + convertTranslatedFieldsToChinese(page.getConsumeUser(), languageCode); + } + //解token权限 if(page.getConsumeUser().getMarkets()==null||page.getConsumeUser().getMarkets().isEmpty()) { HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); @@ -119,9 +129,9 @@ public class ConsumeController { e.printStackTrace(); return Result.error("请检查筛选数据的格式"); } - } + //消耗金币统计 @Log("消耗金币合计数统计") @PostMapping("/statsGold") @@ -150,9 +160,27 @@ public class ConsumeController { //消耗金币增加 @Log("新增金币消耗") @PostMapping("/add") - public Result add(@RequestBody ConsumeUser consumeUser) { + public Result add(@RequestBody ConsumeUser consumeUser, @RequestHeader(defaultValue = "zh_CN") String lang) { try { - return consumeService.add(consumeUser); + // 解析语言参数,提取语言代码 + String languageCode = parseLanguageCode(lang); + + // 如果不是中文,则尝试将输入的翻译文本转换为中文简体 + if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) { + convertTranslatedFieldsToChinese(consumeUser, languageCode); + } + + Result result = consumeService.add(consumeUser); + + // 如果操作成功,对返回消息进行多语言转换 + if (result.getCode() == 200) { + String translatedMsg = languageTranslationUtil.translate("添加成功", lang); + return Result.success(translatedMsg); + } else { + // 对错误消息进行多语言转换 + String translatedErrorMsg = languageTranslationUtil.translate(result.getMsg(), lang); + return Result.error(translatedErrorMsg); + } // if(consumeUser.getJwcode().equals(94226013)) // { // return consumeService.add(consumeUser); @@ -162,7 +190,8 @@ public class ConsumeController { // } catch (Exception e) { e.printStackTrace(); - return Result.error("请查看后端报错信息"); + String translatedErrorMsg = languageTranslationUtil.translate("请查看后端报错信息", lang); + return Result.error(translatedErrorMsg); } } @@ -219,10 +248,10 @@ public class ConsumeController { if (user.getGoodsName() != null) { user.setGoodsName(languageTranslationUtil.translate(user.getGoodsName(), lang)); } - // 翻译支付平台 - if (user.getPayPlatform() != null) { - user.setPayPlatform(languageTranslationUtil.translate(user.getPayPlatform(), lang)); - } +// // 翻译支付平台 +// if (user.getPayPlatform() != null) { +// user.setPayPlatform(languageTranslationUtil.translate(user.getPayPlatform(), lang)); +// } // 翻译退款状态 if (user.getIsRefund() != null) { if (user.getIsRefund() == 1) { @@ -234,5 +263,51 @@ public class ConsumeController { } } } + /** + * 解析语言代码 + */ + private String parseLanguageCode(String langHeader) { + if (langHeader == null || langHeader.isEmpty()) { + return "zh_CN"; + } + // 处理类似 "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(ConsumeUser consumeUser, String languageCode) { + if (consumeUser != null) { + // 转换商品名称 + if (consumeUser.getGoodsName() != null && !consumeUser.getGoodsName().isEmpty()) { + String chineseName = translationService.findChineseSimplifiedByTranslation( + consumeUser.getGoodsName(), languageCode); + consumeUser.setGoodsName(chineseName); + } + + // 转换市场名称 + if (consumeUser.getMarket() != null && !consumeUser.getMarket().isEmpty()) { + String chineseMarket = translationService.findChineseSimplifiedByTranslation( + consumeUser.getMarket(), languageCode); + consumeUser.setMarket(chineseMarket); + } + +// // 转换支付平台 +// if (consumeUser.getPayPlatform() != null && !consumeUser.getPayPlatform().isEmpty()) { +// String chinesePlatform = translationService.findChineseSimplifiedByTranslation( +// consumeUser.getPayPlatform(), languageCode); +// consumeUser.setPayPlatform(chinesePlatform); +// } + } + } } diff --git a/src/main/java/com/example/demo/controller/coin/GeneralController.java b/src/main/java/com/example/demo/controller/coin/GeneralController.java index fc765b0..cb2fbc3 100644 --- a/src/main/java/com/example/demo/controller/coin/GeneralController.java +++ b/src/main/java/com/example/demo/controller/coin/GeneralController.java @@ -7,6 +7,7 @@ import com.example.demo.domain.vo.coin.Result; import com.example.demo.domain.vo.coin.RoleVo; import com.example.demo.service.coin.GeneralService; import com.example.demo.Util.LanguageTranslationUtil; +import com.example.demo.service.coin.TranslationService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -36,6 +37,9 @@ public class GeneralController { @Autowired private LanguageTranslationUtil languageTranslationUtil; + @Autowired + private TranslationService translationService; + // @Log("获取全部地区") @PostMapping("/market") public Result getMarket() @@ -70,8 +74,8 @@ public class GeneralController { public Result getPlatform(@RequestHeader(defaultValue = "zh_CN") String lang) { List list = generalService.getPlatform(); - // 对平台名称进行多语言转换 - translatePlatformNames(list, lang); +// // 对平台名称进行多语言转换 +// translatePlatformNames(list, lang); return Result.success(list); } //获取商品名称 @@ -79,7 +83,16 @@ public class GeneralController { @PostMapping("/goods") public Result getGoods(@RequestHeader(defaultValue = "zh_CN") String lang) { + // 解析语言代码 + String languageCode = parseLanguageCode(lang); + List list = generalService.getGoods(); + + // 如果不是中文环境,先将翻译后的商品名称转换为中文简体进行处理 + if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) { + convertTranslatedGoodsNamesToChinese(list, languageCode); + } + // 对商品名称进行多语言转换 translateGoodsNames(list, lang); return Result.success(list); @@ -98,12 +111,22 @@ public class GeneralController { @PostMapping("/getRate") public Result getRate(@RequestHeader(defaultValue = "zh_CN") String lang) { + // 解析语言代码 + String languageCode = parseLanguageCode(lang); + List rates = generalService.getRate(); + + // 如果不是中文环境,先将翻译后的汇率名称转换为中文简体进行处理 + if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) { + convertTranslatedRateNamesToChinese(rates, languageCode); + } + // 对汇率名称进行多语言转换 translateRateNames(rates, lang); return Result.success(rates); } + //手动同步link商品表 @PostMapping("/syncLinkProducts") public void syncLinkProducts(){ @@ -122,17 +145,17 @@ public class GeneralController { } } - /** - * 转换平台名称为指定语言 - */ - private void translatePlatformNames(List platformNames, String lang) { - if (platformNames != null && !platformNames.isEmpty()) { - for (int i = 0; i < platformNames.size(); i++) { - String translatedName = languageTranslationUtil.translate(platformNames.get(i), lang); - platformNames.set(i, translatedName); - } - } - } +// /** +// * 转换平台名称为指定语言 +// */ +// private void translatePlatformNames(List platformNames, String lang) { +// if (platformNames != null && !platformNames.isEmpty()) { +// for (int i = 0; i < platformNames.size(); i++) { +// String translatedName = languageTranslationUtil.translate(platformNames.get(i), lang); +// platformNames.set(i, translatedName); +// } +// } +// } // /** // * 转换活动名称为指定语言 @@ -159,4 +182,51 @@ public class GeneralController { } } } + /** + * 解析语言代码 + */ + 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 convertTranslatedGoodsNamesToChinese(List goodsNames, String languageCode) { + if (goodsNames != null && !goodsNames.isEmpty()) { + for (int i = 0; i < goodsNames.size(); i++) { + String chineseName = translationService.findChineseSimplifiedByTranslation( + goodsNames.get(i), languageCode); + goodsNames.set(i, chineseName); + } + } + } + + /** + * 将翻译后的汇率名称转换为中文简体 + */ + private void convertTranslatedRateNamesToChinese(List rates, String languageCode) { + if (rates != null && !rates.isEmpty()) { + for (Rate rate : rates) { + if (rate.getRateName() != null && !rate.getRateName().isEmpty()) { + String chineseName = translationService.findChineseSimplifiedByTranslation( + rate.getRateName(), languageCode); + rate.setRateName(chineseName); + } + } + } + } + } diff --git a/src/main/java/com/example/demo/controller/coin/GoldDetailController.java b/src/main/java/com/example/demo/controller/coin/GoldDetailController.java index a259751..5a597fc 100644 --- a/src/main/java/com/example/demo/controller/coin/GoldDetailController.java +++ b/src/main/java/com/example/demo/controller/coin/GoldDetailController.java @@ -15,6 +15,7 @@ import com.example.demo.domain.vo.coin.Page; import com.example.demo.domain.vo.coin.Result; import com.example.demo.service.coin.GoldDetailService; import com.example.demo.service.coin.MarketService; +import com.example.demo.service.coin.TranslationService; import com.example.demo.serviceImpl.coin.AiEmotionServiceImpl; import com.github.pagehelper.PageInfo; import jakarta.servlet.http.HttpServletRequest; @@ -60,21 +61,30 @@ public class GoldDetailController { private AiEmotionServiceImpl aiEmotionServiceImpl; @Autowired MarketService marketService; - + @Autowired + private TranslationService translationService; @Log("获取金币明细") @PostMapping("/getGoldDetail") public Result getGoldDetail(@RequestBody Page page, @RequestHeader(defaultValue = "zh_CN") String lang) throws Exception { + // 解析语言代码 + String languageCode = parseLanguageCode(lang); + + // 如果不是中文环境,将查询条件中的翻译文本转换为中文简体 + if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) { + convertGoldDetailTranslatedFieldsToChinese(page.getGoldDetail(), languageCode); + } + // 获取当前请求对象 HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); String token = request.getHeader("token"); -// 解析 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("页码数为空!"); } @@ -82,10 +92,10 @@ public class GoldDetailController { return Result.error("页大小为空!"); } -// 获取传入的市场列表 + // 获取传入的市场列表 List requestedMarkets = page.getGoldDetail() != null ? page.getGoldDetail().getMarkets() : null; -// 权限校验逻辑 + // 权限校验逻辑 if (markets.contains("9") || markets.contains("9999")) { // 特权市场:9 或 9999,跳过权限校验,直接放行传入的 markets // 如果业务需要,也可以在这里做空值处理 @@ -104,7 +114,7 @@ public class GoldDetailController { // 校验通过,保持 requestedMarkets 不变 } -// 返回详情数据 + // 返回详情数据 Result result = Result.success(goldDetailService.getGoldDetail( page.getPageNum(), page.getPageSize(), @@ -120,6 +130,7 @@ public class GoldDetailController { return result; } + @Log("客户金币明细金币合计数统计") @PostMapping("/getTotal") public Result getTotal(@RequestBody Page page) throws Exception { @@ -198,6 +209,14 @@ public class GoldDetailController { @Log("获取客户金币余额记录") @PostMapping("/getGold") public Result getGold(@RequestBody Page page, @RequestHeader(defaultValue = "zh_CN") String lang) throws Exception { + // 解析语言代码 + String languageCode = parseLanguageCode(lang); + + // 如果不是中文环境,将查询条件中的翻译文本转换为中文简体 + if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) { + convertUserTranslatedFieldsToChinese(page.getUser(), languageCode); + } + // 获取当前请求对象 HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); String token = request.getHeader("token"); @@ -248,6 +267,7 @@ public class GoldDetailController { return result; } + @PostMapping("/export") public Result export(@Valid @RequestBody GoldDetailDTO dto) { String lockKey = "export:lock:" + dto.getToken(); // 锁的 Key(可按用户/业务区分) @@ -326,10 +346,10 @@ public class GoldDetailController { if (detail.getMarket() != null) { detail.setMarket(languageTranslationUtil.translate(detail.getMarket(), lang)); } - // 翻译支付平台("平台信息") - if (detail.getPayPlatform() != null) { - detail.setPayPlatform(languageTranslationUtil.translate(detail.getPayPlatform(), lang)); - } +// // 翻译支付平台("平台信息") +// if (detail.getPayPlatform() != null) { +// detail.setPayPlatform(languageTranslationUtil.translate(detail.getPayPlatform(), lang)); +// } // 翻译类型("更新类型") - 需要根据type的值进行转换 if (detail.getType() != null) { String typeDesc = convertTypeToString(detail.getType()); @@ -368,5 +388,64 @@ public class GoldDetailController { } } } + /** + * 解析语言代码 + */ + 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 convertGoldDetailTranslatedFieldsToChinese(GoldDetail goldDetail, String languageCode) { + if (goldDetail != null) { + // 转换市场名称 + if (goldDetail.getMarket() != null && !goldDetail.getMarket().isEmpty()) { + String chineseMarket = translationService.findChineseSimplifiedByTranslation( + goldDetail.getMarket(), languageCode); + goldDetail.setMarket(chineseMarket); + } + + // 转换商品名称 + if (goldDetail.getGoodsName() != null && !goldDetail.getGoodsName().isEmpty()) { + String chineseGoodsName = translationService.findChineseSimplifiedByTranslation( + goldDetail.getGoodsName(), languageCode); + goldDetail.setGoodsName(chineseGoodsName); + } + // 转换支付平台 + if (goldDetail.getPayPlatform() != null && !goldDetail.getPayPlatform().isEmpty()) { + String chinesePayPlatform = translationService.findChineseSimplifiedByTranslation( + goldDetail.getPayPlatform(), languageCode); + goldDetail.setPayPlatform(chinesePayPlatform); + } + } + } + + /** + * 将用户查询条件中的翻译字段转换为中文简体 + */ + private void convertUserTranslatedFieldsToChinese(User user, String languageCode) { + if (user != null) { + // 转换市场名称 + if (user.getMarket() != null && !user.getMarket().isEmpty()) { + String chineseMarket = translationService.findChineseSimplifiedByTranslation( + user.getMarket(), languageCode); + user.setMarket(chineseMarket); + } + } + } } diff --git a/src/main/java/com/example/demo/controller/coin/MarketController.java b/src/main/java/com/example/demo/controller/coin/MarketController.java index 127f19d..c060c0c 100644 --- a/src/main/java/com/example/demo/controller/coin/MarketController.java +++ b/src/main/java/com/example/demo/controller/coin/MarketController.java @@ -5,6 +5,7 @@ import com.example.demo.domain.entity.Market; import com.example.demo.domain.vo.coin.Result; import com.example.demo.service.coin.MarketService; import com.example.demo.Util.LanguageTranslationUtil; +import com.example.demo.service.coin.TranslationService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -24,12 +25,22 @@ public class MarketController { // 注入多语言转换工具类 @Autowired private LanguageTranslationUtil languageTranslationUtil; - + @Autowired + private TranslationService translationService; // @Log("获取市场") @RequestMapping("/selectMarket") public Result selectMarket(@RequestHeader(defaultValue = "zh_CN") String lang) { try { + // 解析语言代码 + String languageCode = parseLanguageCode(lang); + List markets = marketService.selectMarket(); + + // 如果不是中文环境,先将翻译后的市场名称转换为中文简体进行处理 + if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) { + convertTranslatedMarketNamesToChinese(markets, languageCode); + } + // 对市场名称进行多语言转换 translateMarketNames(markets, lang); return Result.success(markets); @@ -39,6 +50,7 @@ public class MarketController { } } + /** * 递归转换市场名称为指定语言 */ @@ -56,4 +68,43 @@ public class MarketController { } } } + /** + * 解析语言代码 + */ + 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 convertTranslatedMarketNamesToChinese(List markets, String languageCode) { + if (markets != null) { + for (Market market : markets) { + if (market.getName() != null && !market.getName().isEmpty()) { + String chineseName = translationService.findChineseSimplifiedByTranslation( + market.getName(), languageCode); + market.setName(chineseName); + } + + // 递归处理子市场 + if (market.getChildren() != null && !market.getChildren().isEmpty()) { + convertTranslatedMarketNamesToChinese(market.getChildren(), languageCode); + } + } + } + } + } \ No newline at end of file diff --git a/src/main/java/com/example/demo/controller/coin/MenuController.java b/src/main/java/com/example/demo/controller/coin/MenuController.java index bd7d186..34d0105 100644 --- a/src/main/java/com/example/demo/controller/coin/MenuController.java +++ b/src/main/java/com/example/demo/controller/coin/MenuController.java @@ -6,6 +6,7 @@ import com.example.demo.domain.vo.coin.Result; import com.example.demo.domain.vo.coin.RoleVo; import com.example.demo.service.coin.MenuService; import com.example.demo.Util.LanguageTranslationUtil; +import com.example.demo.service.coin.TranslationService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; @@ -35,17 +36,28 @@ public class MenuController { // 注入多语言转换工具类 @Autowired private LanguageTranslationUtil languageTranslationUtil; - + @Autowired + private TranslationService translationService; //获取权限树 // @Log("获取权限树") @PostMapping("/tree") public Result getPermissionTree(@RequestBody RoleVo roleVo, @RequestHeader(defaultValue = "zh_CN") String lang) { + // 解析语言代码 + String languageCode = parseLanguageCode(lang); + List permissionTree = menuService.getPermissionTree(roleVo.getId()); + + // 如果不是中文环境,先将翻译后的菜单名称转换为中文简体进行处理 + if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) { + convertTranslatedMenuNamesToChinese(permissionTree, languageCode); + } + // 对菜单名称进行多语言转换 translateMenuNames(permissionTree, lang); return Result.success(permissionTree); } + //新增权限 @Log("新增权限") @PostMapping("/add") @@ -78,4 +90,42 @@ public class MenuController { } } } + /** + * 解析语言代码 + */ + 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 convertTranslatedMenuNamesToChinese(List menus, String languageCode) { + if (menus != null) { + for (MenuVo menu : menus) { + if (menu.getMenuName() != null && !menu.getMenuName().isEmpty()) { + String chineseName = translationService.findChineseSimplifiedByTranslation( + menu.getMenuName(), languageCode); + menu.setMenuName(chineseName); + } + + // 递归处理子菜单 + if (menu.getChildren() != null && !menu.getChildren().isEmpty()) { + convertTranslatedMenuNamesToChinese(menu.getChildren(), languageCode); + } + } + } + } } diff --git a/src/main/java/com/example/demo/controller/coin/RechargeController.java b/src/main/java/com/example/demo/controller/coin/RechargeController.java index 801f5fe..8882bc4 100644 --- a/src/main/java/com/example/demo/controller/coin/RechargeController.java +++ b/src/main/java/com/example/demo/controller/coin/RechargeController.java @@ -6,6 +6,7 @@ import com.example.demo.config.interfac.Log; import com.example.demo.domain.entity.Admin; import com.example.demo.domain.vo.coin.*; import com.example.demo.service.coin.RechargeService; +import com.example.demo.service.coin.TranslationService; import com.github.pagehelper.PageInfo; import jakarta.servlet.http.HttpServletRequest; import lombok.RequiredArgsConstructor; @@ -43,7 +44,8 @@ public class RechargeController { // 注入多语言转换工具类 @Autowired private LanguageTranslationUtil languageTranslationUtil; - + @Autowired + private TranslationService translationService; //充值明细 @Log("获取全部充值明细") @PostMapping("/selectAll") @@ -55,6 +57,14 @@ public class RechargeController { if (ObjectUtils.isEmpty(page.getPageSize())) { return Result.error("页大小为空!"); } else { + // 解析语言代码 + String languageCode = parseLanguageCode(lang); + + // 如果不是中文环境,将查询条件中的翻译文本转换为中文简体 + if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) { + convertRechargeTranslatedFieldsToChinese(page.getRechargeUser(), languageCode); + } + //解token权限 HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); String token = request.getHeader("token"); @@ -90,6 +100,14 @@ public class RechargeController { if (ObjectUtils.isEmpty(page.getPageSize())) { return Result.error("页大小为空!"); } else { + // 解析语言代码 + String languageCode = parseLanguageCode(lang); + + // 如果不是中文环境,将查询条件中的翻译文本转换为中文简体 + if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) { + convertRechargeTranslatedFieldsToChinese(page.getRechargeUser(), languageCode); + } + //解token权限 if(page.getRechargeUser().getMarkets()==null||page.getRechargeUser().getMarkets().isEmpty()){ HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); @@ -186,10 +204,10 @@ public class RechargeController { if (user.getPayModel() != null) { user.setPayModel(languageTranslationUtil.translate(user.getPayModel(), lang)); } - // 翻译支付平台 - if (user.getPayPlatform() != null) { - user.setPayPlatform(languageTranslationUtil.translate(user.getPayPlatform(), lang)); - } +// // 翻译支付平台 +// if (user.getPayPlatform() != null) { +// user.setPayPlatform(languageTranslationUtil.translate(user.getPayPlatform(), lang)); +// } // 翻译备注 if (user.getRemark() != null) { user.setRemark(languageTranslationUtil.translate(user.getRemark(), lang)); @@ -197,4 +215,72 @@ public class RechargeController { } } } + /** + * 解析语言代码 + */ + 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 convertRechargeTranslatedFieldsToChinese(RechargeUser rechargeUser, String languageCode) { + if (rechargeUser != null) { + // 转换市场名称 + if (rechargeUser.getMarket() != null && !rechargeUser.getMarket().isEmpty()) { + String chineseMarket = translationService.findChineseSimplifiedByTranslation( + rechargeUser.getMarket(), languageCode); + 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( + rechargeUser.getRateName(), languageCode); + rechargeUser.setRateName(chineseRateName); + } + + // 转换支付方式 + if (rechargeUser.getPayModel() != null && !rechargeUser.getPayModel().isEmpty()) { + String chinesePayModel = translationService.findChineseSimplifiedByTranslation( + rechargeUser.getPayModel(), languageCode); + 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( + rechargeUser.getRemark(), languageCode); + rechargeUser.setRemark(chineseRemark); + } + } + } + } diff --git a/src/main/java/com/example/demo/controller/coin/RefundController.java b/src/main/java/com/example/demo/controller/coin/RefundController.java index f5c195e..e77f690 100644 --- a/src/main/java/com/example/demo/controller/coin/RefundController.java +++ b/src/main/java/com/example/demo/controller/coin/RefundController.java @@ -5,6 +5,7 @@ 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; @@ -38,6 +39,10 @@ public class RefundController { @Autowired private RefundService refundService; + // 注入 TranslationService + @Autowired + private TranslationService translationService; + // 注入多语言转换工具类 @Autowired private LanguageTranslationUtil languageTranslationUtil; @@ -47,6 +52,14 @@ public class RefundController { @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); @@ -66,7 +79,15 @@ public class RefundController { String errorMsg = languageTranslationUtil.translate("角色为空", lang); return Result.error(errorMsg); } - return Result.success(refundService.selectAll(page.getPageNum(), page.getPageSize(), page.getRefundUser())); + 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); @@ -80,6 +101,14 @@ public class RefundController { @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); @@ -116,6 +145,14 @@ public class RefundController { @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(); @@ -136,7 +173,16 @@ public class RefundController { @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); @@ -146,6 +192,14 @@ public class RefundController { // @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); } @@ -155,6 +209,14 @@ public class RefundController { @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(); @@ -165,6 +227,14 @@ public class RefundController { 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); @@ -173,7 +243,15 @@ public class RefundController { String errorMsg = languageTranslationUtil.translate("页大小为空!", lang); return Result.error(errorMsg); } else { - return Result.success(refundService.selectBy(page.getPageNum(), page.getPageSize(), page.getRefundUser())); + 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(); @@ -184,6 +262,66 @@ public class RefundController { } /** + * 解析语言代码 + */ + 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) { diff --git a/src/main/java/com/example/demo/controller/coin/UserController.java b/src/main/java/com/example/demo/controller/coin/UserController.java index 66b915b..f31f245 100644 --- a/src/main/java/com/example/demo/controller/coin/UserController.java +++ b/src/main/java/com/example/demo/controller/coin/UserController.java @@ -5,6 +5,7 @@ import com.example.demo.domain.entity.User; import com.example.demo.domain.vo.coin.GoldUser; import com.example.demo.domain.vo.coin.Result; import com.example.demo.service.coin.UserService; +import com.example.demo.service.coin.TranslationService; import com.example.demo.Util.LanguageTranslationUtil; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -30,6 +31,10 @@ public class UserController { @Autowired private UserService userService; + // 注入 TranslationService + @Autowired + private TranslationService translationService; + // 注入多语言转换工具类 @Autowired private LanguageTranslationUtil languageTranslationUtil; @@ -39,6 +44,14 @@ public class UserController { @PostMapping("/selectUser") public Result selectUser(@RequestBody GoldUser user, @RequestHeader(defaultValue = "zh_CN") String lang) { try { + // 解析语言代码 + String languageCode = parseLanguageCode(lang); + + // 如果不是中文环境,将查询条件中的翻译文本转换为中文简体 + if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) { + convertTranslatedFieldsToChinese(user, languageCode); + } + Result result = userService.selectUser(user.getJwcode().toString()); // 对返回结果进行多语言转换 if (result.getCode() == 200 && result.getData() instanceof GoldUser) { @@ -96,6 +109,39 @@ public class UserController { } /** + * 解析语言代码 + */ + 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(GoldUser user, String languageCode) { + if (user != null) { + // 转换市场名称 + if (user.getMarket() != null && !user.getMarket().isEmpty()) { + String chineseMarket = translationService.findChineseSimplifiedByTranslation( + user.getMarket(), languageCode); + user.setMarket(chineseMarket); + } + } + } + + /** * 转换用户信息的多语言字段 */ private void translateGoldUser(GoldUser goldUser, String lang) { diff --git a/src/main/java/com/example/demo/controller/coin/WorkbenchController.java b/src/main/java/com/example/demo/controller/coin/WorkbenchController.java index bbb9464..685fe87 100644 --- a/src/main/java/com/example/demo/controller/coin/WorkbenchController.java +++ b/src/main/java/com/example/demo/controller/coin/WorkbenchController.java @@ -10,6 +10,7 @@ import com.example.demo.mapper.coin.StatisticsMapper; import com.example.demo.service.coin.GeneralService; import com.example.demo.service.coin.StatisticsService; import com.example.demo.service.coin.WorkbenchService; +import com.example.demo.service.coin.TranslationService; import jakarta.servlet.http.HttpServletRequest; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; @@ -38,17 +39,29 @@ public class WorkbenchController { @Autowired private StatisticsMapper statisticsMapper; + // 注入 TranslationService + @Autowired + private TranslationService translationService; + // 注入多语言转换工具类 @Autowired private LanguageTranslationUtil languageTranslationUtil; /** - 获取各地区工作台卡片的数据 + 获取各地区工作台卡片的数据 */ @Log("获取工作台卡片数据") @PostMapping("/getCard") public ResponseEntity card1(@RequestBody WorkbenchCard workbench, @RequestHeader(defaultValue = "zh_CN") String lang) throws Exception { + // 解析语言代码 + String languageCode = parseLanguageCode(lang); + + // 如果不是中文环境,将查询条件中的翻译文本转换为中文简体 + if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) { + convertTranslatedFieldsToChinese(workbench, languageCode); + } + HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); String token = request.getHeader("token"); Admin admin = (Admin) JWTUtil.getUserDetailsList(String.valueOf(token), Admin.class); @@ -70,13 +83,21 @@ public class WorkbenchController { } /** - 获取各地区工作台图表的数据 + 获取各地区工作台图表的数据 */ @Log("获取工作台图表数据") @PostMapping("/getGraph") public ResponseEntity graph1(@RequestBody WorkbenchCard workbench, @AuthenticationPrincipal Admin admin, @RequestHeader(defaultValue = "zh_CN") String lang) { + // 解析语言代码 + String languageCode = parseLanguageCode(lang); + + // 如果不是中文环境,将查询条件中的翻译文本转换为中文简体 + if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) { + convertTranslatedFieldsToChinese(workbench, languageCode); + } + String account = admin.getAccount(); List markets = workbenchService.getAdminMarket(account); @@ -94,6 +115,14 @@ public class WorkbenchController { public ResponseEntity> getTotalRevenue(@RequestBody WorkbenchCard workbench, @AuthenticationPrincipal Admin admin, @RequestHeader(defaultValue = "zh_CN") String lang) { + // 解析语言代码 + String languageCode = parseLanguageCode(lang); + + // 如果不是中文环境,将查询条件中的翻译文本转换为中文简体 + if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) { + convertTranslatedFieldsToChinese(workbench, languageCode); + } + String account = admin.getAccount(); List markets = workbenchService.getRevenueMarket(account); @@ -112,6 +141,14 @@ public class WorkbenchController { public ResponseEntity singleGraph1(@RequestBody WorkbenchCard workbench, @AuthenticationPrincipal Admin admin, @RequestHeader(defaultValue = "zh_CN") String lang) { + // 解析语言代码 + String languageCode = parseLanguageCode(lang); + + // 如果不是中文环境,将查询条件中的翻译文本转换为中文简体 + if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) { + convertTranslatedFieldsToChinese(workbench, languageCode); + } + String account = admin.getAccount(); List markets = workbenchService.getAdminMarket(account); @@ -123,6 +160,41 @@ public class WorkbenchController { } /** + * 解析语言代码 + */ + 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(WorkbenchCard workbenchCard, String languageCode) { + if (workbenchCard != null) { + // 转换市场列表中的市场名称 + if (workbenchCard.getMarkets() != null) { + for (int i = 0; i < workbenchCard.getMarkets().size(); i++) { + String chineseMarket = translationService.findChineseSimplifiedByTranslation( + workbenchCard.getMarkets().get(i), languageCode); + workbenchCard.getMarkets().set(i, chineseMarket); + } + } + } + } + + /** * 转换工作台卡片的多语言字段 */ private void translateWorkbenchCard(WorkbenchCard workbenchCard, String lang) { diff --git a/src/main/java/com/example/demo/mapper/coin/TranslationMapper.java b/src/main/java/com/example/demo/mapper/coin/TranslationMapper.java index ea369a6..587228a 100644 --- a/src/main/java/com/example/demo/mapper/coin/TranslationMapper.java +++ b/src/main/java/com/example/demo/mapper/coin/TranslationMapper.java @@ -39,4 +39,10 @@ public interface TranslationMapper { ); Translation findById(Integer id); + Translation findByEnglish(String english); + Translation findByThai(String thai); + Translation findByChineseTraditional(String chineseTraditional); + Translation findByMalay(String malay); + Translation findByVietnamese(String vietnamese); + } diff --git a/src/main/java/com/example/demo/service/coin/TranslationService.java b/src/main/java/com/example/demo/service/coin/TranslationService.java index 867b036..e96fc33 100644 --- a/src/main/java/com/example/demo/service/coin/TranslationService.java +++ b/src/main/java/com/example/demo/service/coin/TranslationService.java @@ -33,4 +33,7 @@ public interface TranslationService { ); Translation findById(Integer id); + + // TranslationService.java + String findChineseSimplifiedByTranslation(String translatedText, String language); } diff --git a/src/main/java/com/example/demo/serviceImpl/coin/TranslationServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/coin/TranslationServiceImpl.java index a0bfdb3..78842d9 100644 --- a/src/main/java/com/example/demo/serviceImpl/coin/TranslationServiceImpl.java +++ b/src/main/java/com/example/demo/serviceImpl/coin/TranslationServiceImpl.java @@ -94,4 +94,29 @@ public class TranslationServiceImpl implements TranslationService { public Translation findById(Integer id) { return translationMapper.findById(id); } + + @Override + public String findChineseSimplifiedByTranslation(String translatedText, String language) { + Translation translation = null; + switch (language.toLowerCase()) { + case "en": + translation = translationMapper.findByEnglish(translatedText); + break; + case "th": + translation = translationMapper.findByThai(translatedText); + break; + case "zh_tw": + translation = translationMapper.findByChineseTraditional(translatedText); + break; + case "ms": + translation = translationMapper.findByMalay(translatedText); + break; + case "vi": + translation = translationMapper.findByVietnamese(translatedText); + break; + default: + return translatedText; // 如果不是支持的语言,默认原样返回 + } + return translation != null ? translation.getChineseSimplified() : translatedText; + } } diff --git a/src/main/resources/mapper/TranslationMapper.xml b/src/main/resources/mapper/TranslationMapper.xml index 15ab516..a8cc4ac 100644 --- a/src/main/resources/mapper/TranslationMapper.xml +++ b/src/main/resources/mapper/TranslationMapper.xml @@ -103,4 +103,25 @@ + + + + + + + + + + + From 2464be73485df83a125a3abee25701a173216b4a Mon Sep 17 00:00:00 2001 From: wangguorui <2069821375@qq.com> Date: Tue, 2 Dec 2025 19:56:23 +0800 Subject: [PATCH 15/18] =?UTF-8?q?12=E6=9C=882=E6=97=A5=E7=8E=B0=E9=87=91?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E5=A4=9A=E8=AF=AD=E8=A8=80=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=EF=BC=8C=E5=8F=8D=E5=90=91=E6=9F=A5=E8=AF=A2=E4=B8=AD=E6=96=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../demo/controller/coin/ExportController.java | 190 ++++++++++++++++++++- .../example/demo/domain/vo/coin/GoldDetail.java | 3 +- .../serviceImpl/coin/ExportExcelServiceImpl.java | 33 ++++ .../serviceImpl/coin/GoldDetailServiceImpl.java | 27 +++ 4 files changed, 248 insertions(+), 5 deletions(-) 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 07b9eca..639fe22 100644 --- a/src/main/java/com/example/demo/controller/coin/ExportController.java +++ b/src/main/java/com/example/demo/controller/coin/ExportController.java @@ -2,15 +2,20 @@ package com.example.demo.controller.coin; import com.example.demo.Util.BusinessException; import com.example.demo.Util.JWTUtil; +import com.example.demo.Util.LanguageTranslationUtil; import com.example.demo.Util.RedisLockUtil; import com.example.demo.domain.DTO.*; import com.example.demo.domain.entity.Admin; import com.example.demo.domain.entity.Export; import com.example.demo.domain.DTO.CashDTO; +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; import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; @@ -45,6 +50,15 @@ public class ExportController { private GoldDetailService goldDetailService; @Autowired private ExportService exportService; + + // 注入 TranslationService + @Autowired + private TranslationService translationService; + + // 注入多语言转换工具类 + @Autowired + private LanguageTranslationUtil languageTranslationUtil; + @PostMapping("/export") public Result export(@Valid @RequestBody Export export, @RequestHeader("token") String token) throws Exception { try { @@ -56,14 +70,24 @@ public class ExportController { return Result.error("导出失败" + e.getMessage()); } } + @PostMapping("/exportRecharge") - public Result export(@Valid @RequestBody RechargeDTO dto) { + public Result export(@Valid @RequestBody RechargeDTO dto, @RequestHeader(defaultValue = "zh_CN") String lang) { String lockKey = "export:lock:" + dto.getToken(); // 锁的 Key(可按用户/业务区分) String requestId = UUID.randomUUID().toString(); // 请求 ID(防止误删锁) long expireTime = 5000; // 锁过期时间(5秒)s HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); String token = request.getHeader("token"); dto.setToken(token); + + // 解析语言代码 + String languageCode = parseLanguageCode(lang); + + // 如果不是中文环境,将查询条件中的翻译文本转换为中文简体 + if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) { + convertRechargeTranslatedFieldsToChinese(dto.getRechargeUser(), languageCode); + } + try { // 尝试获取锁 if (!redisLockUtil.tryLock(lockKey, requestId, expireTime)) { @@ -76,14 +100,24 @@ public class ExportController { redisLockUtil.unlock(lockKey, requestId); } } + @PostMapping("/exportRefund") - public Result export(@Valid @RequestBody RefundDTO dto) { + public Result export(@Valid @RequestBody RefundDTO dto, @RequestHeader(defaultValue = "zh_CN") String lang) { String lockKey = "export:lock:" + dto.getToken(); // 锁的 Key(可按用户/业务区分) String requestId = UUID.randomUUID().toString(); // 请求 ID(防止误删锁) long expireTime = 5000; // 锁过期时间(5秒)s HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); String token = request.getHeader("token"); dto.setToken(token); + + // 解析语言代码 + String languageCode = parseLanguageCode(lang); + + // 如果不是中文环境,将查询条件中的翻译文本转换为中文简体 + if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) { + convertRefundTranslatedFieldsToChinese(dto.getRefundUser(), languageCode); + } + try { // 尝试获取锁 if (!redisLockUtil.tryLock(lockKey, requestId, expireTime)) { @@ -96,14 +130,24 @@ public class ExportController { redisLockUtil.unlock(lockKey, requestId); } } + @PostMapping("/exportConsume") - public Result export(@Valid @RequestBody ConsumeDTO dto) { + public Result export(@Valid @RequestBody ConsumeDTO dto, @RequestHeader(defaultValue = "zh_CN") String lang) { String lockKey = "export:lock:" + dto.getToken(); // 锁的 Key(可按用户/业务区分) String requestId = UUID.randomUUID().toString(); // 请求 ID(防止误删锁) long expireTime = 5000; // 锁过期时间(5秒)s HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); String token = request.getHeader("token"); dto.setToken(token); + + // 解析语言代码 + String languageCode = parseLanguageCode(lang); + + // 如果不是中文环境,将查询条件中的翻译文本转换为中文简体 + if (!"zh".equalsIgnoreCase(languageCode) && !"zh_cn".equalsIgnoreCase(languageCode)) { + convertConsumeTranslatedFieldsToChinese(dto.getConsumeUser(), languageCode); + } + try { return exportService.addExportConsume(dto); } finally { @@ -111,6 +155,7 @@ public class ExportController { redisLockUtil.unlock(lockKey, requestId); } } + @PostMapping("/exportLive") public Result export(@Valid @RequestBody LiveDTO dto) { String lockKey = "export:lock:" + dto.getToken(); @@ -128,6 +173,7 @@ public class ExportController { redisLockUtil.unlock(lockKey, requestId); } } + @PostMapping("/exportFan") public Result export(@Valid @RequestBody FanDTO dto){ String lockKey = "export:lock:" + dto.getToken(); @@ -145,6 +191,7 @@ public class ExportController { redisLockUtil.unlock(lockKey, requestId); } } + @PostMapping("/exportArticle") public Result export(@Valid @RequestBody ArticleDTO dto){ String lockKey = "export:lock:" + dto.getToken(); @@ -162,6 +209,7 @@ public class ExportController { redisLockUtil.unlock(lockKey, requestId); } } + @PostMapping("/exportBean") public Result export(@Valid @RequestBody BeanRechargeDTO dto){ String lockKey = "export:lock:" + dto.getToken(); @@ -179,6 +227,7 @@ public class ExportController { redisLockUtil.unlock(lockKey, requestId); } } + @PostMapping("/exportol") public Result exportol(@Valid @RequestBody OnlineDTO dto) throws Exception { String lockKey = "export:lock:" + dto.getToken(); @@ -196,6 +245,7 @@ public class ExportController { redisLockUtil.unlock(lockKey, requestId); } } + /** * 负责人退款导出 */ @@ -216,6 +266,7 @@ public class ExportController { redisLockUtil.unlock(lockKey, requestId); } } + @PostMapping("/exportCash") public Result exportCash(@Valid @RequestBody CashDTO dto) { String lockKey = "export:lock:" + dto.getToken(); @@ -233,4 +284,135 @@ public class ExportController { redisLockUtil.unlock(lockKey, requestId); } } -} \ No newline at end of file + + /** + * 解析语言代码 + */ + 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 convertRechargeTranslatedFieldsToChinese(RechargeUser rechargeUser, String languageCode) { + if (rechargeUser != null) { + // 转换市场名称 + if (rechargeUser.getMarket() != null && !rechargeUser.getMarket().isEmpty()) { + String chineseMarket = translationService.findChineseSimplifiedByTranslation( + rechargeUser.getMarket(), languageCode); + 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( + rechargeUser.getRateName(), languageCode); + rechargeUser.setRateName(chineseRateName); + } + + // 转换支付方式 + if (rechargeUser.getPayModel() != null && !rechargeUser.getPayModel().isEmpty()) { + String chinesePayModel = translationService.findChineseSimplifiedByTranslation( + rechargeUser.getPayModel(), languageCode); + 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( + rechargeUser.getRemark(), languageCode); + rechargeUser.setRemark(chineseRemark); + } + } + } + + /** + * 将退款查询条件中的翻译字段转换为中文简体 + */ + 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); + } + + // 转换备注 + if (refundUser.getRemark() != null && !refundUser.getRemark().isEmpty()) { + String chineseRemark = translationService.findChineseSimplifiedByTranslation( + refundUser.getRemark(), languageCode); + refundUser.setRemark(chineseRemark); + } + } + } + + /** + * 将消费查询条件中的翻译字段转换为中文简体 + */ + private void convertConsumeTranslatedFieldsToChinese(ConsumeUser consumeUser, String languageCode) { + if (consumeUser != null) { + // 转换商品名称 + if (consumeUser.getGoodsName() != null && !consumeUser.getGoodsName().isEmpty()) { + String chineseName = translationService.findChineseSimplifiedByTranslation( + consumeUser.getGoodsName(), languageCode); + consumeUser.setGoodsName(chineseName); + } + + // 转换市场名称 + if (consumeUser.getMarket() != null && !consumeUser.getMarket().isEmpty()) { + String chineseMarket = translationService.findChineseSimplifiedByTranslation( + consumeUser.getMarket(), languageCode); + consumeUser.setMarket(chineseMarket); + } + +// // 转换支付平台 +// if (consumeUser.getPayPlatform() != null && !consumeUser.getPayPlatform().isEmpty()) { +// String chinesePlatform = translationService.findChineseSimplifiedByTranslation( +// consumeUser.getPayPlatform(), languageCode); +// consumeUser.setPayPlatform(chinesePlatform); +// } + } + } +} diff --git a/src/main/java/com/example/demo/domain/vo/coin/GoldDetail.java b/src/main/java/com/example/demo/domain/vo/coin/GoldDetail.java index 63314ed..467cefe 100644 --- a/src/main/java/com/example/demo/domain/vo/coin/GoldDetail.java +++ b/src/main/java/com/example/demo/domain/vo/coin/GoldDetail.java @@ -34,8 +34,9 @@ public class GoldDetail { private String market; // 所属地区 @ExcelProperty("平台信息") private String payPlatform; // 支付平台 - @ExcelProperty("更新类型") + @ExcelIgnore private Integer type; // 类型 + @ExcelProperty("更新类型") private String typeDesc; // 类型描述(用于多语言翻译) @ExcelProperty("金币数量") private BigDecimal sumGold; // 总金币 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 efefdaa..d38878d 100644 --- a/src/main/java/com/example/demo/serviceImpl/coin/ExportExcelServiceImpl.java +++ b/src/main/java/com/example/demo/serviceImpl/coin/ExportExcelServiceImpl.java @@ -374,6 +374,7 @@ public class ExportExcelServiceImpl implements ExportExcelService { Integer totalCount = 0; boolean hasMore = true; + // 在 exportExcelGeneric 方法中的适当位置添加类型转换 while (hasMore) { Result pageResult = dataFetcher.apply(page); Integer code = pageResult.getCode(); @@ -394,6 +395,11 @@ public class ExportExcelServiceImpl implements ExportExcelService { if (list == null || list.isEmpty()) { hasMore = false; } else { + // 在这里添加类型转换逻辑 + if ("goldDetail".equals(exportType) && list.get(0) instanceof GoldDetail) { + fillGoldDetailTypeDescriptions((List) list); + } + excelWriter.write(list, writeSheet); page.setPageNum(page.getPageNum() + 1); totalCount += list.size(); @@ -406,6 +412,7 @@ public class ExportExcelServiceImpl implements ExportExcelService { } } + // 7. 完成Excel写入 if (excelWriter != null) { excelWriter.finish(); @@ -549,4 +556,30 @@ public class ExportExcelServiceImpl implements ExportExcelService { throw new IllegalArgumentException("不支持的导出类型: " + exportType); } } + /** + * 填充金币明细数据的类型描述 + */ + private void fillGoldDetailTypeDescriptions(List goldDetails) { + if (goldDetails != null && !goldDetails.isEmpty()) { + for (GoldDetail detail : goldDetails) { + if (detail.getType() != null) { + detail.setTypeDesc(convertTypeToString(detail.getType())); + } + } + } + } + + /** + * 将类型数字转换为中文描述 + */ + private String convertTypeToString(Integer type) { + if (type == null) return ""; + switch (type) { + case 0: return "充值"; + case 1: return "消耗"; + case 2: return "退款"; + default: return "未知类型"; + } + } + } \ No newline at end of file diff --git a/src/main/java/com/example/demo/serviceImpl/coin/GoldDetailServiceImpl.java b/src/main/java/com/example/demo/serviceImpl/coin/GoldDetailServiceImpl.java index e8cf03b..8c5c12e 100644 --- a/src/main/java/com/example/demo/serviceImpl/coin/GoldDetailServiceImpl.java +++ b/src/main/java/com/example/demo/serviceImpl/coin/GoldDetailServiceImpl.java @@ -194,6 +194,33 @@ public class GoldDetailServiceImpl implements GoldDetailService { } return Result.success(); } + // 在 GoldDetailServiceImpl.java 中添加以下方法 + /** + * 将类型数字转换为中文描述 + */ + private String convertTypeToString(Integer type) { + if (type == null) return ""; + switch (type) { + case 0: return "充值"; + case 1: return "消耗"; + case 2: return "退款"; + default: return "未知类型"; + } + } + + /** + * 填充金币明细数据的类型描述 + */ + private void fillTypeDescriptions(List goldDetails) { + if (goldDetails != null && !goldDetails.isEmpty()) { + for (GoldDetail detail : goldDetails) { + if (detail.getType() != null) { + detail.setTypeDesc(convertTypeToString(detail.getType())); + } + } + } + } + //更新用户消费次数 @Override public Result updateConsumeNum() { From 01c919175fee90e1504819c196c7ca981b9abb5f Mon Sep 17 00:00:00 2001 From: wangguorui <2069821375@qq.com> Date: Wed, 3 Dec 2025 10:38:16 +0800 Subject: [PATCH 16/18] =?UTF-8?q?12=E6=9C=883=E6=97=A5=E7=8E=B0=E9=87=91?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E5=A4=9A=E8=AF=AD=E8=A8=80=E9=85=8D=E7=BD=AE?= =?UTF-8?q?,=E4=BC=98=E5=8C=96=E9=80=80=E6=AC=BE=E6=96=B9=E5=BC=8F?= =?UTF-8?q?=E5=AF=BC=E5=87=BAExcel?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/example/demo/domain/vo/coin/RefundUser.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/example/demo/domain/vo/coin/RefundUser.java b/src/main/java/com/example/demo/domain/vo/coin/RefundUser.java index 4c19cf7..0fa7442 100644 --- a/src/main/java/com/example/demo/domain/vo/coin/RefundUser.java +++ b/src/main/java/com/example/demo/domain/vo/coin/RefundUser.java @@ -39,9 +39,10 @@ public class RefundUser { private String goodsName; // 商品名称 @ExcelProperty("退款类型") private String refundType; // 退款类型 - @ExcelProperty("退款方式") + @ExcelIgnore private Byte refundModel; // 退款方式(0全部/1部分退款) - private String refundModelDesc; + @ExcelProperty("退款方式") + private String refundModelDesc; // 退款方式描述(用于多语言翻译) @ExcelProperty("退款金币总数") private BigDecimal sumGold; // 金币总数 @ExcelProperty("永久金币") From 9b9ffd55ac9e8bfa00c3a94020065d514c12ecc9 Mon Sep 17 00:00:00 2001 From: wangguorui <2069821375@qq.com> Date: Wed, 3 Dec 2025 15:41:10 +0800 Subject: [PATCH 17/18] =?UTF-8?q?12=E6=9C=883=E6=97=A5=E7=8E=B0=E9=87=91?= =?UTF-8?q?=E7=AE=A1=E7=90=86=E5=A4=9A=E8=AF=AD=E8=A8=80=E9=85=8D=E7=BD=AE?= =?UTF-8?q?,=E4=BC=98=E5=8C=96=E9=80=80=E6=AC=BE=E6=96=B9=E5=BC=8F?= =?UTF-8?q?=E5=AF=BC=E5=87=BAExcel=EF=BC=882=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../serviceImpl/coin/ExportExcelServiceImpl.java | 51 ++++++++++++++++------ 1 file changed, 37 insertions(+), 14 deletions(-) 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 d38878d..cd7e398 100644 --- a/src/main/java/com/example/demo/serviceImpl/coin/ExportExcelServiceImpl.java +++ b/src/main/java/com/example/demo/serviceImpl/coin/ExportExcelServiceImpl.java @@ -32,8 +32,6 @@ import com.example.demo.serviceImpl.cash.CashRefundServiceImpl; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; - - import com.example.demo.service.coin.AiEmotionService; import com.github.pagehelper.PageInfo; @@ -57,7 +55,6 @@ import java.util.Date; import java.util.List; import java.util.function.Function; - @Service @Slf4j public class ExportExcelServiceImpl implements ExportExcelService { @@ -93,8 +90,6 @@ public class ExportExcelServiceImpl implements ExportExcelService { @Autowired private ExportMapper exportMapper; - - @Transactional @Override public Exception handleExcelExportData(String message) throws Exception { @@ -150,6 +145,7 @@ public class ExportExcelServiceImpl implements ExportExcelService { } }); } + @Transactional @Override public Exception consumeExcel(String message) throws Exception { @@ -241,6 +237,7 @@ public class ExportExcelServiceImpl implements ExportExcelService { } }); } + @Override public Exception BeanExcel(String message) throws Exception { return exportExcelGeneric(message, "beanUser", page -> { @@ -256,6 +253,7 @@ public class ExportExcelServiceImpl implements ExportExcelService { } }); } + @Override public Exception OnlineExcel(String message) throws Exception { return exportExcelGeneric(message, "onlineUser", page -> { @@ -306,13 +304,11 @@ public class ExportExcelServiceImpl implements ExportExcelService { @Override public List getExcel(Export export) { - List list = exportMapper.getExportRecord(export.getAccount(),export.getType()); + List list = exportMapper.getExportRecord(export.getAccount(),export.getType()); System.out.println(list+"-------------------------------"); - return list; + return list; } - - /** * 验证导出记录 */ @@ -400,6 +396,11 @@ public class ExportExcelServiceImpl implements ExportExcelService { fillGoldDetailTypeDescriptions((List) list); } + // 添加退款方式转换逻辑 + if ("refundUser".equals(exportType) && list.get(0) instanceof RefundUser) { + fillRefundUserModelDescriptions((List) list); + } + excelWriter.write(list, writeSheet); page.setPageNum(page.getPageNum() + 1); totalCount += list.size(); @@ -412,7 +413,6 @@ public class ExportExcelServiceImpl implements ExportExcelService { } } - // 7. 完成Excel写入 if (excelWriter != null) { excelWriter.finish(); @@ -523,9 +523,6 @@ public class ExportExcelServiceImpl implements ExportExcelService { return null; } - - - private Class getExportClass(String exportType) { switch (exportType) { case "goldDetail": @@ -556,6 +553,7 @@ public class ExportExcelServiceImpl implements ExportExcelService { throw new IllegalArgumentException("不支持的导出类型: " + exportType); } } + /** * 填充金币明细数据的类型描述 */ @@ -582,4 +580,29 @@ public class ExportExcelServiceImpl implements ExportExcelService { } } -} \ No newline at end of file + /** + * 填充退款用户数据的退款方式描述 + */ + private void fillRefundUserModelDescriptions(List refundUsers) { + if (refundUsers != null && !refundUsers.isEmpty()) { + for (RefundUser user : refundUsers) { + if (user.getRefundModel() != null) { + String modelDesc = convertRefundModelToString(user.getRefundModel()); + user.setRefundModelDesc(modelDesc); + } + } + } + } + + /** + * 将退款模型数字转换为中文描述 + */ + private String convertRefundModelToString(Byte refundModel) { + if (refundModel == null) return ""; + switch (refundModel) { + case 0: return "全部退款"; + case 1: return "部分退款"; + default: return "未知退款方式"; + } + } +} From c1122e5124a62388472a38f5e66b8b9e8e478c2c Mon Sep 17 00:00:00 2001 From: lijianlin Date: Wed, 3 Dec 2025 17:11:49 +0800 Subject: [PATCH 18/18] =?UTF-8?q?12-03=20=E7=BA=BF=E4=B8=8A=E8=AE=A2?= =?UTF-8?q?=E5=8D=95=E5=90=8C=E6=AD=A5=EF=BC=8C=E7=BB=A7=E7=BB=AD=E8=A1=A5?= =?UTF-8?q?=E5=85=85=E5=AD=97=E6=AE=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/example/demo/domain/entity/CashRecord.java | 2 +- src/main/resources/cashMapper/CashCollectionMapper.xml | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/main/java/com/example/demo/domain/entity/CashRecord.java b/src/main/java/com/example/demo/domain/entity/CashRecord.java index a097493..90e3377 100644 --- a/src/main/java/com/example/demo/domain/entity/CashRecord.java +++ b/src/main/java/com/example/demo/domain/entity/CashRecord.java @@ -36,7 +36,7 @@ public class CashRecord implements Serializable { private String bankCode; // 银行流水订单号 private String goodsName; // 商品名称 private Integer goodNum; // 产品数量 - private String NumUnit; // 数量单位 个/月/年 + private String numUnit; // 数量单位 个/月/年 private Integer permanentGold; // 永久金币数量 private Integer freeGold; // 免费金币数量 private String payload; //平台 diff --git a/src/main/resources/cashMapper/CashCollectionMapper.xml b/src/main/resources/cashMapper/CashCollectionMapper.xml index e021a96..f534bc9 100644 --- a/src/main/resources/cashMapper/CashCollectionMapper.xml +++ b/src/main/resources/cashMapper/CashCollectionMapper.xml @@ -7,14 +7,14 @@ useGeneratedKeys="true" keyProperty="id"> insert into cash_record_collection(order_type,jwcode,name,market,activity, - order_code,goods_name,good_num,num_unit,permanent_gold,free_gold, + order_code,bank_code,goods_name,good_num,num_unit,permanent_gold,free_gold, payment_currency,payment_amount,received_market, - pay_type,pay_time,status,submitter_id,submitter_market, + pay_type,pay_time,status,submitter_id,submitter_market,payload, voucher,remark) values(#{orderType},#{jwcode},#{name},#{market},#{activity}, - #{orderCode},#{goodsName},#{goodNum},#{numUnit},#{permanentGold},#{freeGold},#{paymentCurrency}, + #{orderCode},#{bankCode},#{goodsName},#{goodNum},#{numUnit},#{permanentGold},#{freeGold},#{paymentCurrency}, #{paymentAmount},#{receivedMarket},#{payType},#{payTime}, - #{status},#{submitterId},#{submitterMarket},#{voucher},#{remark}) + #{status},#{submitterId},#{submitterMarket},#{payload},#{voucher},#{remark})