Explorar o código

导出需要翻译的字典到txt文件

tanbin hai 7 meses
pai
achega
239ff6f10a

+ 0 - 35
sys-api-service/src/main/java/com/xy/service/SysDictServiceImpl.java

@@ -1,7 +1,5 @@
 package com.xy.service;
 
-import cn.hutool.core.collection.CollUtil;
-import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
@@ -13,7 +11,6 @@ import com.xy.dto.SysDictDto;
 import com.xy.entity.SysDict;
 import com.xy.entity.SysDictRedis;
 import com.xy.mapper.SysDictMapper;
-import com.xy.translate.baidu.TransApi;
 import com.xy.utils.*;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
@@ -27,7 +24,6 @@ import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 import org.springframework.web.bind.annotation.RequestHeader;
 
-import java.util.ArrayList;
 import java.util.List;
 
 import static com.xy.utils.Beans.copy;
@@ -50,37 +46,6 @@ public class SysDictServiceImpl extends ServiceImpl<SysDictMapper, SysDict> impl
 
     private RedisService<SysDictRedis> redisService;
 
-    /**
-     * 全量翻译
-     */
-    @Async
-    public void translateAllDict() {
-        List<SysDict> SysDicts = this.list();
-        List<SysDict> updateList = new ArrayList<>();
-        for (SysDict sysDict : SysDicts) {
-            String name = sysDict.getMsg();
-            String enName = sysDict.getEnMsg();
-            if (StrUtil.isEmpty(enName)) {
-                //百度api翻译
-                String translatedValue = TransApi.translate(name, "zh", "en");
-                sysDict.setEnMsg(translatedValue);
-                updateList.add(sysDict);
-                // 增加1.2秒的延迟
-                try {
-                    Thread.sleep(1800);
-                } catch (InterruptedException e) {
-                    Thread.currentThread().interrupt();
-                    log.error("线程中断异常", e);
-                    return;
-                }
-            }
-        }
-        if (CollUtil.isNotEmpty(updateList)) {
-            updateBatchById(updateList);
-            //刷新redis
-            updateList.forEach(sysDict -> refuRedis(sysDict));
-        }
-    }
 
     /**
      * 全量刷新redis字典数据

+ 49 - 10
sys-api-service/src/main/java/com/xy/service/SysDictTranslateService.java

@@ -2,17 +2,32 @@ package com.xy.service;
 
 import com.xy.annotate.RestMappingController;
 import com.xy.dto.TranslateDto;
+import com.xy.entity.SysDict;
 import com.xy.translate.baidu.TransApi;
 import com.xy.utils.R;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.RequiredArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.core.io.InputStreamResource;
+import org.springframework.core.io.Resource;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.MediaType;
+import org.springframework.http.ResponseEntity;
 import org.springframework.stereotype.Service;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
 
+import java.io.IOException;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.StandardOpenOption;
+import java.util.List;
+import java.util.stream.Collectors;
+
 /**
  * 字典翻译服务
  */
@@ -35,16 +50,40 @@ public class SysDictTranslateService {
     }
 
 
-    /**
-     * 全量翻译
-     *
-     * @return
-     */
-    @PostMapping("/all")
-    @ApiOperation("全量翻译-已翻译的忽略")
-    public R<?> translateAll() {
-        sysDictService.translateAllDict();
-        return R.ok();
+    @PostMapping("/exportTranslateTxt")
+    @ApiOperation("导出需要翻译的字典到txt文件")
+    public ResponseEntity<Resource> exportTranslateTxt() throws IOException {
+        List<SysDict> list = sysDictService.list();
+        if (list == null || list.isEmpty()) {
+            return ResponseEntity.noContent().build();
+        }
+
+        List<String> msgList = list.stream()
+                .map(SysDict::getMsg)
+                .distinct()
+                .collect(Collectors.toList());
+
+        // 对 msgList 进行处理,每一行开头拼接 "D_"
+        List<String> processedMsgList = msgList.stream()
+                .map(msg -> "D_" + msg)
+                .collect(Collectors.toList());
+
+        // 创建临时文件
+        try {
+            Path tempFile = Files.createTempFile("dict", ".txt");
+            Files.write(tempFile, processedMsgList, StandardCharsets.UTF_8, StandardOpenOption.WRITE);
+
+            InputStreamResource resource = new InputStreamResource(Files.newInputStream(tempFile.toFile().toPath()));
+
+            return ResponseEntity.ok()
+                    .header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=dict.txt")
+                    .contentType(MediaType.TEXT_PLAIN)
+                    .contentLength(tempFile.toFile().length())
+                    .body(resource);
+        } catch (IOException e) {
+            e.printStackTrace();
+            return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build();
+        }
     }