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

package com.example.demo.controller.coin;
import com.example.demo.config.interfac.Log;
import com.example.demo.domain.DTO.TranslationQueryRequest;
import com.example.demo.domain.entity.Translation;
import com.example.demo.domain.vo.coin.Result;
import com.example.demo.service.coin.TranslationService;
import com.example.demo.Util.LanguageTranslationUtil;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@RestController
@RequestMapping("/language")
@RequiredArgsConstructor
@Slf4j
@CrossOrigin
public class TranslationController {
private final TranslationService translationService;
private final LanguageTranslationUtil languageTranslationUtil;
// 查询所有翻译记录(可加条件)
@PostMapping("/getTranslation")
public Result getTranslations(@RequestBody TranslationQueryRequest request) {
try {
// 设置分页参数
PageHelper.startPage(request.getPageNum(), request.getPageSize());
String chineseSimplified = request.getChineseSimplified();
String languageStatus = request.getLanguageStatus();
List<Translation> translations;
if (chineseSimplified != null && !chineseSimplified.isEmpty() &&
languageStatus != null && !languageStatus.isEmpty()) {
// 同时存在模糊查询和语言状态查询
String[] parts = languageStatus.split("/");
if (parts.length != 2) {
return Result.error("languageStatus 参数格式错误,应为 'language/isTranslated'");
}
String language = parts[0];
boolean isTranslated = Boolean.parseBoolean(parts[1]);
translations = translationService.findByChineseSimplifiedAndLanguageStatus(
chineseSimplified, language, isTranslated);
} else if (chineseSimplified != null && !chineseSimplified.isEmpty()) {
// 只进行模糊查询
translations = translationService.findByChineseSimplifiedLike(chineseSimplified);
} else if (languageStatus != null && !languageStatus.isEmpty()) {
// 只进行语言状态查询
String[] parts = languageStatus.split("/");
if (parts.length != 2) {
return Result.error("languageStatus 参数格式错误,应为 'language/isTranslated'");
}
String language = parts[0];
boolean isTranslated = Boolean.parseBoolean(parts[1]);
translations = translationService.findByLanguageAndTranslationStatus(language, isTranslated);
} else {
// 查询所有
translations = translationService.findAll();
}
// 使用 PageInfo 封装分页结果
PageInfo<Translation> pageInfo = new PageInfo<>(translations);
// 构造返回数据
Map<String, Object> resultData = new HashMap<>();
resultData.put("list", pageInfo.getList());
resultData.put("total", pageInfo.getTotal());
resultData.put("pageNum", pageInfo.getPageNum());
resultData.put("pageSize", pageInfo.getPageSize());
return Result.success(resultData);
} catch (IllegalArgumentException e) {
return Result.error("参数错误:" + e.getMessage());
} catch (Exception e) {
log.error("查询翻译记录失败", e);
return Result.error("查询翻译记录失败");
}
}
// 添加新的翻译记录
@Log("添加翻译记录")
@PostMapping("/addTranslation")
public Result addTranslation(@RequestBody Translation translation) {
try {
boolean result = translationService.add(translation);
if (result) {
return Result.success("添加翻译记录成功");
} else {
return Result.error("添加翻译记录失败");
}
} catch (RuntimeException e) {
// 捕获重复插入异常
if ("简体中文已存在".equals(e.getMessage())) {
return Result.error("添加翻译记录失败:简体中文已存在");
} else {
log.error("添加翻译记录失败", e);
return Result.error("添加翻译记录失败");
}
}
}
// 更新翻译记录
@Log("更新翻译记录")
@PostMapping("/updateTranslation")
public Result updateTranslation(@RequestBody Translation translation) {
try {
boolean result = translationService.update(translation);
if (result) {
// 更新成功后刷新缓存
languageTranslationUtil.refreshAllCache();
return Result.success("更新翻译记录成功");
} else {
return Result.error("更新翻译记录失败");
}
} catch (Exception e) {
log.error("更新翻译记录失败", e);
return Result.error("更新翻译记录失败");
}
}
// 删除翻译记录
@Log("删除翻译记录")
@PostMapping("/deleteTranslation")
public Result deleteTranslation(@RequestBody Translation request) {
try {
// 先获取要删除的记录,用于后续清理缓存
Translation translationToDelete = translationService.findById(request.getId());
boolean result = translationService.deleteById(request.getId());
if (result) {
// 删除成功后清理相关缓存
if (translationToDelete != null) {
languageTranslationUtil.removeFromCache(translationToDelete.getChineseSimplified());
}
return Result.success("删除翻译记录成功");
} else {
return Result.error("删除翻译记录失败");
}
} catch (Exception e) {
log.error("删除翻译记录失败", e);
return Result.error("删除翻译记录失败");
}
}
}