diff --git a/src/main/java/com/example/demo/Export/ExportServiceImpl.java b/src/main/java/com/example/demo/Export/ExportServiceImpl.java index 8995263..265a339 100644 --- a/src/main/java/com/example/demo/Export/ExportServiceImpl.java +++ b/src/main/java/com/example/demo/Export/ExportServiceImpl.java @@ -1,6 +1,7 @@ package com.example.demo.Export; import com.example.demo.Util.JWTUtil; +import com.example.demo.Util.LanguageTranslationUtil; import com.example.demo.domain.DTO.*; import com.example.demo.domain.entity.Admin; import com.example.demo.domain.vo.coin.Result; @@ -37,6 +38,8 @@ public class ExportServiceImpl implements ExportService { private RedisUtil redisUtil; @Autowired private AdminService adminService; + @Autowired + private LanguageTranslationUtil languageTranslationUtil; /** * 通用导出逻辑 @@ -59,7 +62,7 @@ public class ExportServiceImpl implements ExportService { String adminName = admin.getAdminName(); // 设置 DTO 的通用字段 - setCommonFields(dto, account, adminName); + setCommonFields(dto, account, adminName, exportType, lang); // 插入导出记录并获取主键 GoldDetailMapper.ExportRecordIdHolder idHolder = new GoldDetailMapper.ExportRecordIdHolder(); @@ -84,56 +87,56 @@ public class ExportServiceImpl implements ExportService { /** * 设置 DTO 的通用字段 */ - private void setCommonFields(Object dto, Integer account,String adminName) throws Exception { + private void setCommonFields(Object dto, Integer account,String adminName, String exportType, String lang) throws Exception { if (dto instanceof RechargeDTO rechargeDTO) { rechargeDTO.setAccount(Integer.valueOf(account)); rechargeDTO.setUrl(""); - rechargeDTO.setFileName(generateFileName("充值明细", adminName)); + rechargeDTO.setFileName(generateFileName("充值明细", adminName, lang)); rechargeDTO.setDataNum(0); } else if (dto instanceof RefundDTO refundDTO) { refundDTO.setAccount(Integer.valueOf(account)); refundDTO.setUrl(""); - refundDTO.setFileName(generateFileName("退款明细", adminName)); + refundDTO.setFileName(generateFileName("退款明细", adminName, lang)); refundDTO.setDataNum(0); } else if (dto instanceof ConsumeDTO consumeDTO) { consumeDTO.setAccount(Integer.valueOf(account)); consumeDTO.setUrl(""); - consumeDTO.setFileName(generateFileName("消耗明细", adminName)); + consumeDTO.setFileName(generateFileName("消耗明细", adminName, lang)); consumeDTO.setDataNum(0); } else if (dto instanceof LiveDTO liveDTO) { liveDTO.setAccount(Integer.valueOf(account)); liveDTO.setUrl(""); - liveDTO.setFileName(generateFileName("直播明细", adminName)); + liveDTO.setFileName(generateFileName("直播明细", adminName, lang)); liveDTO.setDataNum(0); } else if (dto instanceof FanDTO fanDTO) { fanDTO.setAccount(Integer.valueOf(account)); fanDTO.setUrl(""); - fanDTO.setFileName(generateFileName("铁粉明细", adminName)); + fanDTO.setFileName(generateFileName("铁粉明细", adminName, lang)); fanDTO.setDataNum(0); } else if (dto instanceof BeanRechargeDTO beanRechargeDTO){ beanRechargeDTO.setAccount(Integer.valueOf(account)); beanRechargeDTO.setUrl(""); - beanRechargeDTO.setFileName(generateFileName("金豆充值明细", adminName)); + beanRechargeDTO.setFileName(generateFileName("金豆充值明细", adminName, lang)); beanRechargeDTO.setDataNum(0); } else if(dto instanceof OnlineDTO onlineDTO){ onlineDTO.setAccount(Integer.valueOf(account)); onlineDTO.setUrl(""); - onlineDTO.setFileName(generateFileName("在线明细", adminName)); + onlineDTO.setFileName(generateFileName("在线明细", adminName, lang)); onlineDTO.setDataNum(0); } else if(dto instanceof ArticleDTO articleDTO){ articleDTO.setAccount(Integer.valueOf(account)); articleDTO.setUrl(""); - articleDTO.setFileName(generateFileName("文章明细", adminName)); + articleDTO.setFileName(generateFileName("文章明细", adminName, lang)); articleDTO.setDataNum(0); } else if(dto instanceof FinanceDTO financeDTO){ financeDTO.setAccount(Integer.valueOf(account)); financeDTO.setUrl(""); - financeDTO.setFileName(generateFileName("现金退款明细", adminName)); + financeDTO.setFileName(generateFileName("现金退款明细", adminName, lang)); financeDTO.setDataNum(0); } else if(dto instanceof CashDTO cashDTO){ cashDTO.setAccount(Integer.valueOf(account)); cashDTO.setUrl(""); - cashDTO.setFileName(generateFileName("现金收款明细", adminName)); + cashDTO.setFileName(generateFileName("现金收款明细", adminName, lang)); cashDTO.setDataNum(0); } } @@ -284,9 +287,11 @@ public class ExportServiceImpl implements ExportService { /** * 生成文件名 */ - private String generateFileName(String exportType, String adminName) { + private String generateFileName(String exportType, String adminName,String lang) { + // 对导出类型进行多语言转换 + String translatedExportType = languageTranslationUtil.translate(exportType, lang); return String.format("%s_%s_%s.xlsx", - exportType, + translatedExportType, adminName, LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); } diff --git a/src/main/java/com/example/demo/Util/ExcelHeaderTranslator.java b/src/main/java/com/example/demo/Util/ExcelHeaderTranslator.java index 753fd2d..8d3ed02 100644 --- a/src/main/java/com/example/demo/Util/ExcelHeaderTranslator.java +++ b/src/main/java/com/example/demo/Util/ExcelHeaderTranslator.java @@ -192,6 +192,7 @@ public class ExcelHeaderTranslator { Map headers = new LinkedHashMap<>(); // 定义所有表头的原始中文名称(对应 BeanOnlineRechargeInfo 类的字段) + headers.put("id", "ID"); headers.put("jwcode", "精网号"); headers.put("name", "姓名"); headers.put("market", "所属地区"); @@ -214,7 +215,7 @@ public class ExcelHeaderTranslator { */ public List getBeanOnlineRechargeColumnOrder() { return Arrays.asList( - "jwcode", "name", "market", "money", "num", "orderNo", "platform", "rechargeTime" + "id","jwcode", "name", "market", "money", "num", "orderNo", "platform", "rechargeTime" ); } 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 8ce9a89..f060727 100644 --- a/src/main/java/com/example/demo/controller/coin/GoldDetailController.java +++ b/src/main/java/com/example/demo/controller/coin/GoldDetailController.java @@ -127,7 +127,6 @@ public class GoldDetailController { return result; } - @Log("客户金币明细金币合计数统计") @PostMapping("/getTotal") public Result getTotal(@RequestBody Page page) throws Exception { @@ -138,14 +137,14 @@ public class GoldDetailController { 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); -// 获取传入的市场列表 + // 获取传入的市场列表 List requestedMarkets = page.getGoldDetail() != null ? page.getGoldDetail().getMarkets() : null; -// 权限校验逻辑 + // 权限校验逻辑 if (markets.contains("9") || markets.contains("9999")) { // 特权市场:9 或 9999,跳过权限校验,直接放行传入的 markets // 如果业务需要,也可以在这里做空值处理 @@ -166,6 +165,7 @@ public class GoldDetailController { return Result.success(goldDetailService.sumGold(pageNum,pageSize,goldDetail)); } + @Log("客户金币余额金币合计数统计") @PostMapping("/goldTotal") public Result GoldTotal(@RequestBody User user) throws Exception { @@ -173,16 +173,16 @@ public class GoldDetailController { 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); -// 获取传入的市场列表 + // 获取传入的市场列表 List requestedMarkets = user != null ? user.getMarkets() : null; -// 权限校验逻辑 + // 权限校验逻辑 if (markets.contains("9") || markets.contains("9999")) { // 特权市场:9 或 9999,跳过权限校验,直接放行传入的 markets // 如果业务需要,也可以在这里做空值处理 @@ -203,6 +203,7 @@ public class GoldDetailController { return Result.success(goldDetailService.GoldTotal(user)); } + @Log("获取客户金币余额记录") @PostMapping("/getGold") public Result getGold(@RequestBody Page page, @RequestHeader(defaultValue = "zh_CN") String lang) throws Exception { @@ -264,7 +265,6 @@ public class GoldDetailController { return result; } - @PostMapping("/export") public Result export(@Valid @RequestBody GoldDetailDTO dto, @RequestHeader(defaultValue = "zh_CN") String lang) { String lockKey = "export:lock:" + dto.getToken(); // 锁的 Key(可按用户/业务区分) @@ -292,6 +292,7 @@ public class GoldDetailController { redisLockUtil.unlock(lockKey, requestId); } } + @PostMapping("/exportGold") public Result export(@Valid @RequestBody GoldUserDTO dto, @RequestHeader(defaultValue = "zh_CN") String lang) { String lockKey = "export:lock:" + dto.getToken(); // 锁的 Key(可按用户/业务区分) @@ -319,6 +320,7 @@ public class GoldDetailController { redisLockUtil.unlock(lockKey, requestId); } } + @PostMapping("/exportqqq") public Result ExcelGoldDetail(@RequestBody Page page, @RequestHeader(defaultValue = "zh_CN") String lang) throws Exception { // 解析语言代码 @@ -350,7 +352,6 @@ public class GoldDetailController { } } - public Result ExcelGold(@RequestBody Page page, @RequestHeader(defaultValue = "zh_CN") String lang) throws Exception { // 解析语言代码 String languageCode = parseLanguageCode(lang); @@ -380,9 +381,7 @@ public class GoldDetailController { return result; } - /* - 更新用户消费次数 - */ + //更新用户消费次数 @PostMapping("/updateConsumeNum") public Result updateConsumeNum() { return goldDetailService.updateConsumeNum(); @@ -420,9 +419,10 @@ public class GoldDetailController { case 0: return "充值"; case 1: return "消耗"; case 2: return "退款"; - default: return "未知类型"; + default: return "其他"; } } + /** * 转换用户信息的多语言字段 */ @@ -436,6 +436,7 @@ public class GoldDetailController { } } } + /** * 解析语言代码 */ diff --git a/src/main/java/com/example/demo/domain/entity/User.java b/src/main/java/com/example/demo/domain/entity/User.java index 38886d1..255bbc4 100644 --- a/src/main/java/com/example/demo/domain/entity/User.java +++ b/src/main/java/com/example/demo/domain/entity/User.java @@ -7,6 +7,7 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import lombok.Data; import lombok.NoArgsConstructor; +import java.io.Serial; import java.io.Serializable; import java.math.BigDecimal; import java.util.Date; @@ -18,6 +19,7 @@ import java.util.Set; @NoArgsConstructor @JsonIgnoreProperties(ignoreUnknown = true) public class User implements Serializable { + @Serial private static final long serialVersionUID = 1L; private Integer id; // 客户id diff --git a/src/main/java/com/example/demo/domain/vo/bean/BeanConsumeArticle.java b/src/main/java/com/example/demo/domain/vo/bean/BeanConsumeArticle.java index d2c180b..a38977a 100644 --- a/src/main/java/com/example/demo/domain/vo/bean/BeanConsumeArticle.java +++ b/src/main/java/com/example/demo/domain/vo/bean/BeanConsumeArticle.java @@ -1,12 +1,13 @@ package com.example.demo.domain.vo.bean; import com.alibaba.excel.annotation.ExcelIgnore; -import com.alibaba.excel.annotation.ExcelProperty; import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import lombok.Data; import lombok.NoArgsConstructor; +import java.io.Serial; +import java.io.Serializable; import java.util.Date; /** @@ -20,7 +21,8 @@ import java.util.Date; @Data @NoArgsConstructor @JsonIgnoreProperties(ignoreUnknown = true) -public class BeanConsumeArticle { +public class BeanConsumeArticle implements Serializable { + @Serial private static final long serialVersionUID = 1L; private Integer id; private String name; //姓名 diff --git a/src/main/java/com/example/demo/domain/vo/bean/BeanConsumeFan.java b/src/main/java/com/example/demo/domain/vo/bean/BeanConsumeFan.java index 91c46a6..2ce82cb 100644 --- a/src/main/java/com/example/demo/domain/vo/bean/BeanConsumeFan.java +++ b/src/main/java/com/example/demo/domain/vo/bean/BeanConsumeFan.java @@ -8,6 +8,8 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import lombok.Data; import lombok.NoArgsConstructor; +import java.io.Serial; +import java.io.Serializable; import java.util.Date; /** @@ -21,7 +23,8 @@ import java.util.Date; @Data @NoArgsConstructor @JsonIgnoreProperties(ignoreUnknown = true) -public class BeanConsumeFan { +public class BeanConsumeFan implements Serializable { + @Serial private static final long serialVersionUID = 1L; private Integer id; private String name; //姓名 diff --git a/src/main/java/com/example/demo/domain/vo/bean/BeanConsumeLive.java b/src/main/java/com/example/demo/domain/vo/bean/BeanConsumeLive.java index 241386d..85fa4ec 100644 --- a/src/main/java/com/example/demo/domain/vo/bean/BeanConsumeLive.java +++ b/src/main/java/com/example/demo/domain/vo/bean/BeanConsumeLive.java @@ -10,6 +10,7 @@ import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import lombok.Data; import lombok.NoArgsConstructor; +import java.io.Serial; import java.io.Serializable; import java.util.Date; import java.util.List; @@ -26,6 +27,7 @@ import java.util.List; @NoArgsConstructor @JsonIgnoreProperties(ignoreUnknown = true) public class BeanConsumeLive implements Serializable { + @Serial private static final long serialVersionUID = 1L; private Integer id; @ExcelIgnore diff --git a/src/main/java/com/example/demo/domain/vo/cash/CashCollection.java b/src/main/java/com/example/demo/domain/vo/cash/CashCollection.java index 3d7b75e..28233c3 100644 --- a/src/main/java/com/example/demo/domain/vo/cash/CashCollection.java +++ b/src/main/java/com/example/demo/domain/vo/cash/CashCollection.java @@ -8,6 +8,7 @@ import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; +import java.io.Serial; import java.io.Serializable; import java.math.BigDecimal; import java.time.LocalDateTime; @@ -26,6 +27,7 @@ import java.util.List; @NoArgsConstructor @AllArgsConstructor public class CashCollection implements Serializable { + @Serial private static final long serialVersionUID = 1L; private Integer id; @ExcelIgnore diff --git a/src/main/java/com/example/demo/domain/vo/coin/ConsumeUser.java b/src/main/java/com/example/demo/domain/vo/coin/ConsumeUser.java index bbe717d..d119dee 100644 --- a/src/main/java/com/example/demo/domain/vo/coin/ConsumeUser.java +++ b/src/main/java/com/example/demo/domain/vo/coin/ConsumeUser.java @@ -9,6 +9,7 @@ import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; +import java.io.Serial; import java.io.Serializable; import java.math.BigDecimal; import java.util.Date; @@ -27,7 +28,7 @@ import java.util.List; @NoArgsConstructor @AllArgsConstructor public class ConsumeUser implements Serializable { - + @Serial private static final long serialVersionUID = 1L; private String name; // 客户姓名 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 cdcfdf0..97cbead 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 @@ -7,6 +7,8 @@ import lombok.Data; import lombok.NoArgsConstructor; import org.springframework.format.annotation.DateTimeFormat; +import java.io.Serial; +import java.io.Serializable; import java.math.BigDecimal; import java.util.Date; import java.util.List; @@ -21,7 +23,8 @@ import java.util.List; **/ @Data @NoArgsConstructor -public class GoldDetail { +public class GoldDetail implements Serializable { + @Serial private static final long serialVersionUID = 1L; @ExcelIgnore diff --git a/src/main/java/com/example/demo/domain/vo/coin/RechargeUser.java b/src/main/java/com/example/demo/domain/vo/coin/RechargeUser.java index d7b9514..ba67c7e 100644 --- a/src/main/java/com/example/demo/domain/vo/coin/RechargeUser.java +++ b/src/main/java/com/example/demo/domain/vo/coin/RechargeUser.java @@ -7,6 +7,7 @@ import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; +import java.io.Serial; import java.io.Serializable; import java.math.BigDecimal; import java.util.Date; @@ -24,7 +25,7 @@ import java.util.List; @Data @NoArgsConstructor public class RechargeUser implements Serializable { - + @Serial private static final long serialVersionUID = 1L; private String name; // 客户姓名 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 bcdeba4..6a686d4 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 @@ -1,12 +1,12 @@ package com.example.demo.domain.vo.coin; import com.alibaba.excel.annotation.ExcelIgnore; -import com.alibaba.excel.annotation.ExcelProperty; import com.fasterxml.jackson.annotation.JsonFormat; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; +import java.io.Serial; import java.io.Serializable; import java.math.BigDecimal; import java.util.Date; @@ -25,7 +25,7 @@ import java.util.List; @NoArgsConstructor @AllArgsConstructor public class RefundUser implements Serializable { - + @Serial private static final long serialVersionUID = 1L; private String orderCode; // 订单号 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 f6d8a9e..dfcd533 100644 --- a/src/main/java/com/example/demo/serviceImpl/coin/ExportExcelServiceImpl.java +++ b/src/main/java/com/example/demo/serviceImpl/coin/ExportExcelServiceImpl.java @@ -972,7 +972,7 @@ public class ExportExcelServiceImpl implements ExportExcelService { case 0: return "充值"; case 1: return "消耗"; case 2: return "退款"; - default: return "未知类型"; + default: return "其他"; } } 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 936f9cf..fcc480e 100644 --- a/src/main/java/com/example/demo/serviceImpl/coin/GoldDetailServiceImpl.java +++ b/src/main/java/com/example/demo/serviceImpl/coin/GoldDetailServiceImpl.java @@ -1,6 +1,7 @@ package com.example.demo.serviceImpl.coin; import com.example.demo.Util.JWTUtil; +import com.example.demo.Util.LanguageTranslationUtil; import com.example.demo.Util.RedisUtil; import com.example.demo.domain.DTO.GoldDetailDTO; import com.example.demo.domain.DTO.GoldUserDTO; @@ -45,6 +46,8 @@ public class GoldDetailServiceImpl implements GoldDetailService { private RedisUtil redisUtil; @Autowired private AdminService adminService; + @Autowired + private LanguageTranslationUtil languageTranslationUtil; @Override public PageInfo getGoldDetail(Integer pageNum, Integer pageSize, GoldDetail goldDetail) { @@ -95,9 +98,11 @@ public class GoldDetailServiceImpl implements GoldDetailService { throw new RuntimeException(e.getMessage()); } String admin = adminService.getName(String.valueOf(dto.getAccount())); - // 生成文件名 + // 生成文件名(多语言转换) + String exportType = "客户金币明细"; + String translatedExportType = languageTranslationUtil.translate(exportType, dto.getLang()); String fileName = String.format("%s_%s_%s.xlsx", - "客户金币明细", + translatedExportType, admin, LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); System.out.println(fileName); @@ -153,9 +158,11 @@ public class GoldDetailServiceImpl implements GoldDetailService { throw new RuntimeException(e.getMessage()); } String admin = adminService.getName(String.valueOf(dto.getAccount())); - // 生成文件名 + // 生成文件名(多语言转换) + String exportType = "金币余额明细"; + String translatedExportType = languageTranslationUtil.translate(exportType, dto.getLang()); String fileName = String.format("%s_%s_%s.xlsx", - "金币余额明细", + translatedExportType, admin, LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"))); System.out.println(fileName); @@ -207,7 +214,7 @@ public class GoldDetailServiceImpl implements GoldDetailService { case 0: return "充值"; case 1: return "消耗"; case 2: return "退款"; - default: return "未知类型"; + default: return "其他"; } }