浏览代码

Merge remote-tracking branch 'origin/master' into prod

tanbin 7 月之前
父节点
当前提交
b4ceaf810c

+ 4 - 0
sys-api-service/src/main/java/com/xy/entity/SysDict.java

@@ -47,6 +47,10 @@ public class SysDict extends BaseEntity3<SysDict> {
      * 编码说明
      */
     private String msg;
+    /**
+     * 编码说明(英文)
+     */
+    private String enMsg;
 
     /**
      * 状态

+ 27 - 4
sys-api-service/src/main/java/com/xy/service/SysDictServiceImpl.java

@@ -16,11 +16,13 @@ import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
 import lombok.extern.slf4j.Slf4j;
+import org.springframework.scheduling.annotation.Async;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.validation.annotation.Validated;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestHeader;
 
 import java.util.List;
 
@@ -44,6 +46,16 @@ public class SysDictServiceImpl extends ServiceImpl<SysDictMapper, SysDict> impl
 
     private RedisService<SysDictRedis> redisService;
 
+
+    /**
+     * 全量刷新redis字典数据
+     */
+    @Async
+    public void refreshAll() {
+        List<SysDict> SysDicts = this.list();
+        SysDicts.forEach(sysDict -> refuRedis(sysDict));
+    }
+
     @ApiOperation("添加")
     @PostMapping("save")
     public R save(@RequestBody @Validated SysDictDto.Save save) {
@@ -128,7 +140,7 @@ public class SysDictServiceImpl extends ServiceImpl<SysDictMapper, SysDict> impl
 
     @ApiOperation("集合查询")
     @PostMapping("list")
-    public R<List<SysDictDto.Vo>> list(@RequestBody SysDictDto.SelectList selectList) {
+    public R<List<SysDictDto.Vo>> list(@RequestHeader(value = "lang", required = false) String lang, @RequestBody SysDictDto.SelectList selectList) {
         LambdaQueryWrapper<SysDict> lambdaQueryWrapper = new MybatisPlusQuery().eqWrapper(selectList, SysDict.class)
                 .in(SysDict::getId, selectList.getIds())
                 .in(SysDict::getCode, selectList.getCodes())
@@ -138,13 +150,24 @@ public class SysDictServiceImpl extends ServiceImpl<SysDictMapper, SysDict> impl
                 .build()
                 .orderByAsc(SysDict::getOrders);
         List<SysDict> list = list(lambdaQueryWrapper);
-        return R.ok(copy(SysDictDto.Vo.class, list));
+        List<SysDictDto.Vo> voList = copy(SysDictDto.Vo.class, list);
+//        if ("en".equals(lang)) {
+//            //英文菜单
+//            voList.forEach(v -> {
+//                String enName = v.getEnMsg();
+//                if (StrUtil.isNotEmpty(enName)) {
+//                    v.setMsg(enName);
+//                }
+//            });
+//
+//        }
+        return R.ok(voList);
     }
 
     @ApiOperation("集合查询(无需授权)")
     @PostMapping("list2")
-    public R<List<SysDictDto.Vo>> list2(@RequestBody SysDictDto.SelectList selectList) {
-        return list(selectList);
+    public R<List<SysDictDto.Vo>> list2(@RequestHeader(value = "lang", required = false) String lang, @RequestBody SysDictDto.SelectList selectList) {
+        return list(lang, selectList);
     }
 
     /**

+ 98 - 0
sys-api-service/src/main/java/com/xy/service/SysDictTranslateService.java

@@ -0,0 +1,98 @@
+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;
+
+/**
+ * 字典翻译服务
+ */
+@Api(tags = "字典翻译服务")
+@Slf4j
+@Service
+@RequiredArgsConstructor
+@RestMappingController("/translate_dict")
+public class SysDictTranslateService {
+
+    private final SysDictServiceImpl sysDictService;
+
+    @PostMapping("/one")
+    @ApiOperation("单个翻译-同步返回结果")
+    public R<String> translateOne(@RequestBody @Validated TranslateDto.One one) {
+        String content = one.getContent();
+        String targetType = one.getTargetType();
+        String translatedValue = TransApi.translate(content, "zh", targetType);
+        return R.ok(translatedValue);
+    }
+
+
+    @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();
+        }
+    }
+
+
+    @PostMapping("/refreshAll")
+    @ApiOperation("全量刷新redis缓存")
+    public R<?> refreshAll() {
+        sysDictService.refreshAll();
+        return R.ok();
+    }
+
+
+}

+ 6 - 0
sys-api/src/main/java/com/xy/dto/SysDictDto.java

@@ -40,6 +40,9 @@ public class SysDictDto {
         @ApiModelProperty("编码说明")
         private String msg;
 
+        @ApiModelProperty("编码说明(英文)")
+        private String enMsg;
+
         @ApiModelProperty("排序 正序")
         private Integer orders;
 
@@ -172,6 +175,9 @@ public class SysDictDto {
         @ApiModelProperty("编码说明")
         private String msg;
 
+        @ApiModelProperty("编码说明(英文)")
+        private String enMsg;
+
         @ApiModelProperty("状态")
         private Boolean status;