You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

153 lines
6.2 KiB

  1. package com.example.demo.controller.coin;
  2. import com.example.demo.config.interfac.Log;
  3. import com.example.demo.domain.DTO.TranslationQueryRequest;
  4. import com.example.demo.domain.entity.Translation;
  5. import com.example.demo.domain.vo.coin.Result;
  6. import com.example.demo.service.coin.TranslationService;
  7. import com.example.demo.Util.LanguageTranslationUtil;
  8. import com.github.pagehelper.PageHelper;
  9. import com.github.pagehelper.PageInfo;
  10. import lombok.RequiredArgsConstructor;
  11. import lombok.extern.slf4j.Slf4j;
  12. import org.springframework.web.bind.annotation.*;
  13. import java.util.HashMap;
  14. import java.util.List;
  15. import java.util.Map;
  16. @RestController
  17. @RequestMapping("/language")
  18. @RequiredArgsConstructor
  19. @Slf4j
  20. @CrossOrigin
  21. public class TranslationController {
  22. private final TranslationService translationService;
  23. private final LanguageTranslationUtil languageTranslationUtil;
  24. // 查询所有翻译记录(可加条件)
  25. @PostMapping("/getTranslation")
  26. public Result getTranslations(@RequestBody TranslationQueryRequest request) {
  27. try {
  28. // 设置分页参数
  29. PageHelper.startPage(request.getPageNum(), request.getPageSize());
  30. String chineseSimplified = request.getChineseSimplified();
  31. String languageStatus = request.getLanguageStatus();
  32. List<Translation> translations;
  33. if (chineseSimplified != null && !chineseSimplified.isEmpty() &&
  34. languageStatus != null && !languageStatus.isEmpty()) {
  35. // 同时存在模糊查询和语言状态查询
  36. String[] parts = languageStatus.split("/");
  37. if (parts.length != 2) {
  38. return Result.error("languageStatus 参数格式错误,应为 'language/isTranslated'");
  39. }
  40. String language = parts[0];
  41. boolean isTranslated = Boolean.parseBoolean(parts[1]);
  42. translations = translationService.findByChineseSimplifiedAndLanguageStatus(
  43. chineseSimplified, language, isTranslated);
  44. } else if (chineseSimplified != null && !chineseSimplified.isEmpty()) {
  45. // 只进行模糊查询
  46. translations = translationService.findByChineseSimplifiedLike(chineseSimplified);
  47. } else if (languageStatus != null && !languageStatus.isEmpty()) {
  48. // 只进行语言状态查询
  49. String[] parts = languageStatus.split("/");
  50. if (parts.length != 2) {
  51. return Result.error("languageStatus 参数格式错误,应为 'language/isTranslated'");
  52. }
  53. String language = parts[0];
  54. boolean isTranslated = Boolean.parseBoolean(parts[1]);
  55. translations = translationService.findByLanguageAndTranslationStatus(language, isTranslated);
  56. } else {
  57. // 查询所有
  58. translations = translationService.findAll();
  59. }
  60. // 使用 PageInfo 封装分页结果
  61. PageInfo<Translation> pageInfo = new PageInfo<>(translations);
  62. // 构造返回数据
  63. Map<String, Object> resultData = new HashMap<>();
  64. resultData.put("list", pageInfo.getList());
  65. resultData.put("total", pageInfo.getTotal());
  66. resultData.put("pageNum", pageInfo.getPageNum());
  67. resultData.put("pageSize", pageInfo.getPageSize());
  68. return Result.success(resultData);
  69. } catch (IllegalArgumentException e) {
  70. return Result.error("参数错误:" + e.getMessage());
  71. } catch (Exception e) {
  72. log.error("查询翻译记录失败", e);
  73. return Result.error("查询翻译记录失败");
  74. }
  75. }
  76. // 添加新的翻译记录
  77. @Log("添加翻译记录")
  78. @PostMapping("/addTranslation")
  79. public Result addTranslation(@RequestBody Translation translation) {
  80. try {
  81. boolean result = translationService.add(translation);
  82. if (result) {
  83. return Result.success("添加翻译记录成功");
  84. } else {
  85. return Result.error("添加翻译记录失败");
  86. }
  87. } catch (RuntimeException e) {
  88. // 捕获重复插入异常
  89. if ("简体中文已存在".equals(e.getMessage())) {
  90. return Result.error("添加翻译记录失败:简体中文已存在");
  91. } else {
  92. log.error("添加翻译记录失败", e);
  93. return Result.error("添加翻译记录失败");
  94. }
  95. }
  96. }
  97. // 更新翻译记录
  98. @Log("更新翻译记录")
  99. @PostMapping("/updateTranslation")
  100. public Result updateTranslation(@RequestBody Translation translation) {
  101. try {
  102. boolean result = translationService.update(translation);
  103. if (result) {
  104. // 更新成功后刷新缓存
  105. languageTranslationUtil.refreshAllCache();
  106. return Result.success("更新翻译记录成功");
  107. } else {
  108. return Result.error("更新翻译记录失败");
  109. }
  110. } catch (Exception e) {
  111. log.error("更新翻译记录失败", e);
  112. return Result.error("更新翻译记录失败");
  113. }
  114. }
  115. // 删除翻译记录
  116. @Log("删除翻译记录")
  117. @PostMapping("/deleteTranslation")
  118. public Result deleteTranslation(@RequestBody Translation request) {
  119. try {
  120. // 先获取要删除的记录,用于后续清理缓存
  121. Translation translationToDelete = translationService.findById(request.getId());
  122. boolean result = translationService.deleteById(request.getId());
  123. if (result) {
  124. // 删除成功后清理相关缓存
  125. if (translationToDelete != null) {
  126. languageTranslationUtil.removeFromCache(translationToDelete.getChineseSimplified());
  127. }
  128. return Result.success("删除翻译记录成功");
  129. } else {
  130. return Result.error("删除翻译记录失败");
  131. }
  132. } catch (Exception e) {
  133. log.error("删除翻译记录失败", e);
  134. return Result.error("删除翻译记录失败");
  135. }
  136. }
  137. }