Просмотр исходного кода

菜单、字典国际化改为前端处理

tanbin 7 месяцев назад
Родитель
Сommit
c044e84609

+ 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;
 
     /**
      * 状态

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

@@ -1,5 +1,7 @@
 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;
@@ -11,17 +13,21 @@ 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;
 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.ArrayList;
 import java.util.List;
 
 import static com.xy.utils.Beans.copy;
@@ -44,6 +50,47 @@ 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字典数据
+     */
+    @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 +175,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 +185,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);
     }
 
     /**

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

@@ -0,0 +1,59 @@
+package com.xy.service;
+
+import com.xy.annotate.RestMappingController;
+import com.xy.dto.TranslateDto;
+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.stereotype.Service;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+
+/**
+ * 字典翻译服务
+ */
+@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);
+    }
+
+
+    /**
+     * 全量翻译
+     *
+     * @return
+     */
+    @PostMapping("/all")
+    @ApiOperation("全量翻译-已翻译的忽略")
+    public R<?> translateAll() {
+        sysDictService.translateAllDict();
+        return R.ok();
+    }
+
+
+    @PostMapping("/refreshAll")
+    @ApiOperation("全量刷新redis缓存")
+    public R<?> refreshAll() {
+        sysDictService.translateAllDict();
+        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;