Browse Source

国际化 后端(目录+环境配置+菜单)

晴为镜 1 tháng trước cách đây
mục cha
commit
3345829823

+ 12 - 9
zkqy-admin/src/main/java/com/zkqy/web/controller/system/SysMenuController.java

@@ -34,8 +34,7 @@ public class SysMenuController extends BaseController {
     //@PreAuthorize("@ss.hasPermi('system:menu:list')")
     @GetMapping("/list")
     public AjaxResult list(SysMenu menu) {
-        List<SysMenu> menus = menuService.selectMenuList(menu, getUserId());
-        return success(menus);
+        return success(menuService.selectMenuList(menu, getUserId()));
     }
 
     /**
@@ -75,12 +74,14 @@ public class SysMenuController extends BaseController {
     @Log(title = "菜单管理", businessType = BusinessType.INSERT)
     @PostMapping
     public AjaxResult add(@Validated @RequestBody SysMenu menu) {
-        if (!menuService.checkMenuNameUnique(menu)) {
-            return error("新增菜单'" + menu.getMenuName() + "'失败,菜单名称已存在");
+        menu.setMenuNameByMenuNameLocale();
+        if (!menuService.checkMenuNameUniqueMuti(menu)) {
+            return error("新增菜单'" + menu.getMenuNameLocale() + "'失败,菜单名称已存在");
         } else if (UserConstants.YES_FRAME.equals(menu.getIsFrame()) && !StringUtils.ishttp(menu.getPath())) {
-            return error("新增菜单'" + menu.getMenuName() + "'失败,地址必须以http(s)://开头");
+            return error("新增菜单'" + menu.getMenuNameLocale() + "'失败,地址必须以http(s)://开头");
         }
         menu.setCreateBy(getUsername());
+        menu.setMenuNameByMenuNameLocale();
         // 如果租户id为null 表示admin新增菜单操作
         if (menu.getTenantId() == null) {
             return toAjax(menuService.insertMenu(menu));
@@ -96,14 +97,16 @@ public class SysMenuController extends BaseController {
     @Log(title = "菜单管理", businessType = BusinessType.UPDATE)
     @PutMapping
     public AjaxResult edit(@Validated @RequestBody SysMenu menu) {
-        if (!menuService.checkMenuNameUnique(menu)) {
-            return error("修改菜单'" + menu.getMenuName() + "'失败,菜单名称已存在");
+        menu.setMenuNameByMenuNameLocale();
+        if (!menuService.checkMenuNameUniqueMuti(menu)) {
+            return error("修改菜单'" + menu.getMenuNameLocale() + "'失败,菜单名称已存在");
         } else if (UserConstants.YES_FRAME.equals(menu.getIsFrame()) && !StringUtils.ishttp(menu.getPath())) {
-            return error("修改菜单'" + menu.getMenuName() + "'失败,地址必须以http(s)://开头");
+            return error("修改菜单'" + menu.getMenuNameLocale() + "'失败,地址必须以http(s)://开头");
         } else if (menu.getMenuId().equals(menu.getParentId())) {
-            return error("修改菜单'" + menu.getMenuName() + "'失败,上级菜单不能选择自己");
+            return error("修改菜单'" + menu.getMenuNameLocale() + "'失败,上级菜单不能选择自己");
         }
         menu.setUpdateBy(getUsername());
+        menu.setMenuNameByMenuNameLocale();
         return toAjax(menuService.updateMenu(menu));
     }
 

+ 9 - 0
zkqy-admin/src/main/resources/i18n/messages_en_US.properties

@@ -0,0 +1,9 @@
+welcome.message=Welcome
+button.submit=Submit
+form=form
+table=table
+threeLevelLinkage=threeLevelLinkage
+formGroup=formGroup
+multiTableQuantity=multiTableQuantity
+client.side=client side
+tool.side=tool side

+ 8 - 0
zkqy-admin/src/main/resources/i18n/messages_zh_CN.properties

@@ -0,0 +1,8 @@
+# messages_zh_CN.properties
+form=\u8868\u5355
+table=\u8868\u683C
+threeLevelLinkage=\u4E09\u7EA7\u8054\u52A8
+formGroup=\u8868\u5355\u7EC4
+multiTableQuantity=\u591A\u8868\u6570\u91CF
+client.side=\u5BA2\u6237\u7AEF
+tool.side=\u5DE5\u5177\u7AEF

+ 60 - 3
zkqy-common/src/main/java/com/zkqy/common/core/domain/entity/SysMenu.java

@@ -7,6 +7,9 @@ import javax.validation.constraints.NotNull;
 import javax.validation.constraints.Size;
 
 import com.zkqy.common.core.domain.BaseEntity;
+import com.zkqy.common.enums.LocaleEnum;
+import com.zkqy.common.utils.MessageUtils;
+import com.zkqy.common.utils.StringUtils;
 import org.apache.commons.lang3.builder.ToStringBuilder;
 import org.apache.commons.lang3.builder.ToStringStyle;
 
@@ -22,9 +25,14 @@ public class SysMenu extends BaseEntity
     /** 菜单ID */
     private Long menuId;
 
-    /** 菜单名称 */
+    /** 菜单名称 */ // 中文
     private String menuName;
 
+    // 菜单英文名
+    private String menuNameEn;
+
+    private String menuNameLocale;
+
     /** 父菜单名称 */
     private String parentName;
 
@@ -91,8 +99,8 @@ public class SysMenu extends BaseEntity
         this.menuId = menuId;
     }
 
-    @NotBlank(message = "菜单名称不能为空")
-    @Size(min = 0, max = 50, message = "菜单名称长度不能超过50个字符")
+//    @NotBlank(message = "菜单名称不能为空")
+//    @Size(min = 0, max = 50, message = "菜单名称长度不能超过50个字符")
     public String getMenuName()
     {
         return menuName;
@@ -281,4 +289,53 @@ public class SysMenu extends BaseEntity
             .append("tenantId",getTenantId())
             .toString();
     }
+
+    public String getMenuNameEn() {
+        return menuNameEn;
+    }
+
+    public void setMenuNameEn(String menuNameEn) {
+        this.menuNameEn = menuNameEn;
+    }
+    public String getMenuNameLocale() {
+        return menuNameLocale;
+    }
+
+    public void setMenuNameLocale(String menuNameLocale) {
+        this.menuNameLocale = menuNameLocale;
+    }
+
+    public String getMenuNameLocaleByMenuName() {
+        String menuLocaleName = null;
+        if (MessageUtils.getUserLocale().equals(LocaleEnum.Chinese.getLocaleCode())){
+            menuLocaleName = menuName;
+        }else if (MessageUtils.getUserLocale().equals(LocaleEnum.English.getLocaleCode())){
+            menuLocaleName = menuNameEn;
+        }
+        return menuLocaleName;
+    }
+
+    // 无参从已有的选择一个
+    public void setMenuNameLocaleByManuName() {
+        String menuNameLocale = null;
+        if (MessageUtils.getUserLocale().equals(LocaleEnum.Chinese.getLocaleCode())){
+            menuNameLocale = menuName;
+        }else if (MessageUtils.getUserLocale().equals(LocaleEnum.English.getLocaleCode())){
+            menuNameLocale = menuNameEn;
+        }
+        this.menuNameLocale = menuNameLocale;
+    }
+    //根据前端的菜单传值 + 本地环境的判断,填充menuName 或者 menuNameEn的值
+    public void setMenuNameByMenuNameLocale(){
+        if (StringUtils.isBlank(menuNameLocale)){
+            return;
+        }
+        if (MessageUtils.getUserLocale().equals(LocaleEnum.Chinese.getLocaleCode())){
+            menuName = menuNameLocale;
+        }else if (MessageUtils.getUserLocale().equals(LocaleEnum.English.getLocaleCode())){
+            menuNameEn = menuNameLocale;
+        }
+
+    }
+
 }

+ 54 - 0
zkqy-common/src/main/java/com/zkqy/common/enums/LocaleEnum.java

@@ -0,0 +1,54 @@
+package com.zkqy.common.enums;
+
+public enum LocaleEnum {
+
+    Chinese("中国", "zh_CN"),
+    English("美国", "en_US");
+
+    private final String chineseName;
+    private final String localeCode;
+
+    LocaleEnum(String chineseName, String localeCode) {
+        this.chineseName = chineseName;
+        this.localeCode = localeCode;
+    }
+
+    /**
+     * 获取中文名称
+     */
+    public String getChineseName() {
+        return chineseName;
+    }
+
+    /**
+     * 获取地区代码
+     */
+    public String getLocaleCode() {
+        return localeCode;
+    }
+
+
+    /**
+     * 通过地区代码查找枚举
+     */
+    public static LocaleEnum fromLocaleCode(String localeCode) {
+        for (LocaleEnum locale : values()) {
+            if (locale.localeCode.equalsIgnoreCase(localeCode)) {
+                return locale;
+            }
+        }
+        throw new IllegalArgumentException("Unknown locale code: " + localeCode);
+    }
+
+    /**
+     * 通过中文名称查找枚举
+     */
+    public static LocaleEnum fromChineseName(String chineseName) {
+        for (LocaleEnum locale : values()) {
+            if (locale.chineseName.equals(chineseName)) {
+                return locale;
+            }
+        }
+        throw new IllegalArgumentException("Unknown Chinese name: " + chineseName);
+    }
+}

+ 6 - 0
zkqy-common/src/main/java/com/zkqy/common/utils/MessageUtils.java

@@ -23,4 +23,10 @@ public class MessageUtils
         MessageSource messageSource = SpringUtils.getBean(MessageSource.class);
         return messageSource.getMessage(code, args, LocaleContextHolder.getLocale());
     }
+    // 获取当前用的locale
+    public static String getUserLocale(){
+        String acceptLanguage = LocaleContextHolder.getLocale().toString();
+        String primaryLocale = acceptLanguage.split(",")[0];
+        return primaryLocale;
+    }
 }

+ 33 - 26
zkqy-custom-business/src/main/java/com/zkqy/business/service/impl/SaleOrderServiceImpl.java

@@ -893,13 +893,15 @@ public class SaleOrderServiceImpl implements ISaleOrderService {
 
         List<Map<String, Object>> addList = new ArrayList<>();
         for (Map<String, Object> retailItem : retailCount) {
-            String saleSalesman = retailItem.get("saleId").toString();
-            boolean exists = saleCount.stream()
-                    .anyMatch(saleItem ->
-                            saleSalesman.equals(saleItem.get("saleId").toString())
-                    );
-            if (!exists) {
-                addList.add(retailItem);
+            Object saleSalesman = retailItem.get("saleId");
+            if (saleSalesman != null){
+                boolean exists = saleCount.stream()
+                        .anyMatch(saleItem ->
+                                saleSalesman.toString().equals(saleItem.get("saleId").toString())
+                        );
+                if (!exists) {
+                    addList.add(retailItem);
+                }
             }
         }
 
@@ -908,7 +910,8 @@ public class SaleOrderServiceImpl implements ISaleOrderService {
             Long orderCount = (Long) saleItem.get("orderCount");
 
             for (Map<String, Object> retailItem : retailCount) {
-                if (retailItem.get("saleId").toString().equals(saleId)) {
+                Object sale = retailItem.get("saleId");
+                if (sale != null && retailItem.get("saleId").toString().equals(saleId)) {
                     Long orderCount1 = (Long) retailItem.get("orderCount");
                     orderCount += orderCount1;
                     saleItem.put("orderCount", orderCount);
@@ -922,13 +925,15 @@ public class SaleOrderServiceImpl implements ISaleOrderService {
         }
         List<Map<String, Object>> addList1 = new ArrayList<>();
         for (Map<String, Object> retailItem : retailProductCount) {
-            String saleSalesman = retailItem.get("saleId").toString();
-            boolean exists = saleProductCount.stream()
-                    .anyMatch(saleItem ->
-                            saleSalesman.equals(saleItem.get("saleId").toString())
-                    );
-            if (!exists) {
-                addList1.add(retailItem);
+            Object saleSalesman = retailItem.get("saleId");
+            if (saleSalesman != null){
+                boolean exists = saleProductCount.stream()
+                        .anyMatch(saleItem ->
+                                saleSalesman.toString().equals(saleItem.get("saleId").toString())
+                        );
+                if (!exists) {
+                    addList1.add(retailItem);
+                }
             }
         }
 
@@ -936,7 +941,7 @@ public class SaleOrderServiceImpl implements ISaleOrderService {
             String saleId = saleItem.get("saleId").toString();
             Double weight = (Double) saleItem.get("weight");
             for (Map<String, Object> retailItem : retailProductCount) {
-                if (retailItem.get("saleId").toString().equals(saleId)) {
+                if (retailItem.get("saleId") != null && retailItem.get("saleId").toString().equals(saleId)) {
                     Double weight1 = (Double) retailItem.get("weight");
                     weight += weight1;
                     saleItem.put("weight", handlingWeight(weight));
@@ -1069,15 +1074,17 @@ public class SaleOrderServiceImpl implements ISaleOrderService {
 
         List<Map<String, Object>> addList = new ArrayList<>();
         for (Map<String, Object> retailItem : retailList) {
-            String productId = retailItem.get("productId").toString();
-            String productColour = retailItem.get("productColour").toString();
-            boolean exists = saleList.stream()
-                    .anyMatch(saleItem ->
-                            productId.equals(saleItem.get("productId").toString()) &&
-                                    productColour.equals(saleItem.get("productColour").toString())
-                    );
-            if (!exists) {
-                addList.add(retailItem);
+            if (retailItem != null){
+                String productId = retailItem.get("productId").toString();
+                String productColour = retailItem.get("productColour").toString();
+                boolean exists = saleList.stream()
+                        .anyMatch(saleItem ->
+                                productId.equals(saleItem.get("productId").toString()) &&
+                                        productColour.equals(saleItem.get("productColour").toString())
+                        );
+                if (!exists) {
+                    addList.add(retailItem);
+                }
             }
         }
 
@@ -1086,7 +1093,7 @@ public class SaleOrderServiceImpl implements ISaleOrderService {
             String productColour = saleItem.get("productColour").toString();
             Double weight = (Double) saleItem.get("weight");
             for (Map<String, Object> retailItem : retailList) {
-                if (retailItem.get("productId").toString().equals(productId) && retailItem.get("productColour").toString().equals(productColour)) {
+                if (retailItem != null && retailItem.get("productId").toString().equals(productId) && retailItem.get("productColour").toString().equals(productColour)) {
                     Double weight1 = (Double) retailItem.get("weight");
                     weight += weight1;
                     saleItem.put("weight", handlingWeight(weight));

+ 15 - 0
zkqy-framework/src/main/java/com/zkqy/framework/config/LocaleConfig.java

@@ -0,0 +1,15 @@
+package com.zkqy.framework.config;
+
+import com.zkqy.framework.interceptor.LocaleInterceptor;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+
+@Configuration
+public class LocaleConfig implements WebMvcConfigurer {
+
+    @Override
+    public void addInterceptors(InterceptorRegistry registry) {
+        registry.addInterceptor(new LocaleInterceptor()).addPathPatterns("/**");
+    }
+}

+ 53 - 0
zkqy-framework/src/main/java/com/zkqy/framework/interceptor/LocaleInterceptor.java

@@ -0,0 +1,53 @@
+package com.zkqy.framework.interceptor;
+
+import org.springframework.context.i18n.LocaleContextHolder;
+import org.springframework.web.servlet.HandlerInterceptor;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.util.Locale;
+
+public class LocaleInterceptor implements HandlerInterceptor {
+
+    private static final String DEFAULT_LANGUAGE = "zh_CN";
+    private static final String LANGUAGE_COOKIE_NAME = "language";
+
+    @Override
+    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
+        // 1. 优先从Header中获取language
+        String language = getLanguageFromHeader(request);
+
+        // 2. 如果没有,使用默认值
+        if (language == null || language.isEmpty()) {
+            language = DEFAULT_LANGUAGE;
+        }
+
+        // 4. 解析语言和国家代码
+        Locale locale = parseLocale(language);
+
+        // 5. 设置到LocaleContextHolder
+        LocaleContextHolder.setLocale(locale);
+
+        return true;
+    }
+
+    private String getLanguageFromHeader(HttpServletRequest request) {
+        return request.getHeader("language"); // 直接从Header获取language字段
+    }
+
+    private Locale parseLocale(String language) {
+        if (language == null || language.isEmpty()) {
+            return Locale.SIMPLIFIED_CHINESE; // 默认简体中文
+        }
+
+        // 示例:解析 "en_US" 或 "zh_CN"
+        String[] parts = language.replace("-", "_").split("_");
+        if (parts.length == 1) {
+            return new Locale(parts[0]); // 只有语言代码(如 "en")
+        } else if (parts.length == 2) {
+            return new Locale(parts[0], parts[1]); // 语言 + 国家(如 "en_US")
+        } else {
+            return Locale.SIMPLIFIED_CHINESE; // 默认
+        }
+    }
+}

+ 1 - 1
zkqy-process-execution/src/main/java/com/zkqy/execution/produce/dispersed/service/impl/runbpm/mes/RecordQualityControlCard.java

@@ -20,7 +20,7 @@ import java.util.Map;
  */
 @Service("ca0e7a45-ea6b-45f7-b721-cfb28d106735")
 @Scope("prototype")
-public class RecordQualityControlCard implements IRunBPMService {
+public class  RecordQualityControlCard implements IRunBPMService {
 
     @Autowired
     private EchoNodeFormData echoNodeFormData;

+ 2 - 0
zkqy-system/src/main/java/com/zkqy/system/mapper/SysMenuMapper.java

@@ -154,6 +154,8 @@ public interface SysMenuMapper {
      */
     public SysMenu checkMenuNameUnique(@Param("menuName") String menuName, @Param("parentId") Long parentId, @Param("tenantId") Long tenantId);
 
+    public SysMenu checkMenuNameUniqueMuti(@Param("menuId") Long menuId, @Param("menuName") String menuName, @Param("menuNameEn") String menuNameEn, @Param("parentId") Long parentId, @Param("tenantId") Long tenantId);
+
     /**
      * 动态表格获取菜单
      */

+ 4 - 0
zkqy-system/src/main/java/com/zkqy/system/service/ISysMenuService.java

@@ -167,6 +167,8 @@ public interface ISysMenuService
      */
     public boolean checkMenuNameUnique(SysMenu menu);
 
+    public boolean checkMenuNameUniqueMuti(SysMenu menu);
+
     /**
      * 动态表格菜单列表
      */
@@ -187,4 +189,6 @@ public interface ISysMenuService
      * @return 结果
      */
     Long insertMenus(SysMenu menu,Long userId);
+
+    List<SysMenu> setMenuNameLocaleList(List<SysMenu> menus);
 }

+ 29 - 13
zkqy-system/src/main/java/com/zkqy/system/service/impl/SysMenuServiceImpl.java

@@ -1,12 +1,7 @@
 package com.zkqy.system.service.impl;
 
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Set;
+import java.util.*;
+import java.util.function.Consumer;
 import java.util.stream.Collectors;
 import java.util.stream.Stream;
 
@@ -73,6 +68,7 @@ public class SysMenuServiceImpl implements ISysMenuService {
      */
     @Override
     public List<SysMenu> selectMenuList(SysMenu menu, Long userId) {
+        menu.setMenuNameByMenuNameLocale();
         List<SysMenu> menuList = null;
         SysUser user = userService.selectUserById(userId);
         // 管理员显示所有菜单信息
@@ -91,7 +87,8 @@ public class SysMenuServiceImpl implements ISysMenuService {
         //    }
         //    return item;
         //}).collect(Collectors.toList());
-        return menuList;
+        List<SysMenu> menusWithMenu  = setMenuNameLocaleList(menuList);
+        return menusWithMenu;
     }
 
     /**
@@ -184,7 +181,7 @@ public class SysMenuServiceImpl implements ISysMenuService {
             router.setPath(getRouterPath(menu));
             router.setComponent(getComponent(menu));
             router.setQuery(menu.getQuery());
-            router.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon(), StringUtils.equals("1", menu.getIsCache()), menu.getPath()));
+            router.setMeta(new MetaVo(menu.getMenuNameLocaleByMenuName(), menu.getIcon(), StringUtils.equals("1", menu.getIsCache()), menu.getPath()));
             List<SysMenu> cMenus = menu.getChildren();
             if (StringUtils.isNotEmpty(cMenus) && UserConstants.TYPE_DIR.equals(menu.getMenuType())) {
                 router.setAlwaysShow(true);
@@ -197,12 +194,12 @@ public class SysMenuServiceImpl implements ISysMenuService {
                 children.setPath(menu.getPath());
                 children.setComponent(menu.getComponent());
                 children.setName(StringUtils.capitalize(menu.getPath()));
-                children.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon(), StringUtils.equals("1", menu.getIsCache()), menu.getPath()));
+                children.setMeta(new MetaVo(menu.getMenuNameLocaleByMenuName(), menu.getIcon(), StringUtils.equals("1", menu.getIsCache()), menu.getPath()));
                 children.setQuery(menu.getQuery());
                 childrenList.add(children);
                 router.setChildren(childrenList);
             } else if (menu.getParentId().intValue() == 0 && isInnerLink(menu)) {
-                router.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon()));
+                router.setMeta(new MetaVo(menu.getMenuNameLocaleByMenuName(), menu.getIcon()));
                 router.setPath("/");
                 List<RouterVo> childrenList = new ArrayList<RouterVo>();
                 RouterVo children = new RouterVo();
@@ -210,7 +207,7 @@ public class SysMenuServiceImpl implements ISysMenuService {
                 children.setPath(routerPath);
                 children.setComponent(UserConstants.INNER_LINK);
                 children.setName(StringUtils.capitalize(routerPath));
-                children.setMeta(new MetaVo(menu.getMenuName(), menu.getIcon(), menu.getPath()));
+                children.setMeta(new MetaVo(menu.getMenuNameLocaleByMenuName(), menu.getIcon(), menu.getPath()));
                 childrenList.add(children);
                 router.setChildren(childrenList);
             }
@@ -264,6 +261,7 @@ public class SysMenuServiceImpl implements ISysMenuService {
     @Override
     public SysMenu selectMenuById(Long menuId) {
         SysMenu sysMenu = menuMapper.selectMenuById(menuId);
+        sysMenu.setMenuNameLocaleByManuName();
         ////临时代码3
         //if(sysMenu.getMenuName().equals("门户引擎")){
         //    sysMenu.setMenuName("系统管理");
@@ -372,7 +370,16 @@ public class SysMenuServiceImpl implements ISysMenuService {
     @Override
     public boolean checkMenuNameUnique(SysMenu menu) {
         Long menuId = StringUtils.isNull(menu.getMenuId()) ? -1L : menu.getMenuId();
-        SysMenu info = menuMapper.checkMenuNameUnique(menu.getMenuName(), menu.getParentId(), menu.getTenantId());
+        SysMenu info = menuMapper.checkMenuNameUnique(menu.getMenuNameLocale(), menu.getParentId(), menu.getTenantId());
+        if (StringUtils.isNotNull(info) && info.getMenuId().longValue() != menuId.longValue()) {
+            return UserConstants.NOT_UNIQUE;
+        }
+        return UserConstants.UNIQUE;
+    }
+    @Override
+    public boolean checkMenuNameUniqueMuti(SysMenu menu) {
+        Long menuId = StringUtils.isNull(menu.getMenuId()) ? -1L : menu.getMenuId();
+        SysMenu info = menuMapper.checkMenuNameUniqueMuti(menu.getMenuId(),menu.getMenuName(),menu.getMenuNameEn(), menu.getParentId(), menu.getTenantId());
         if (StringUtils.isNotNull(info) && info.getMenuId().longValue() != menuId.longValue()) {
             return UserConstants.NOT_UNIQUE;
         }
@@ -416,6 +423,15 @@ public class SysMenuServiceImpl implements ISysMenuService {
         return i;
     }
 
+    @Override
+    public List<SysMenu> setMenuNameLocaleList(List<SysMenu> menus) {
+        if (menus != null && !menus.isEmpty()){
+            menus.forEach(sysMenu -> sysMenu.setMenuNameLocaleByManuName());
+            return menus;
+        }
+        return Collections.emptyList();
+    }
+
     /**
      * 获取路由名称
      *

+ 55 - 6
zkqy-system/src/main/resources/mapper/system/SysMenuMapper.xml

@@ -7,6 +7,7 @@
 	<resultMap type="SysMenu" id="SysMenuResult">
 		<id     property="menuId"         column="menu_id"        />
 		<result property="menuName"       column="menu_name"      />
+		<result property="menuNameEn"     column="menu_name_en"   />
 		<result property="parentName"     column="parent_name"    />
 		<result property="parentId"       column="parent_id"      />
 		<result property="orderNum"       column="order_num"      />
@@ -29,7 +30,7 @@
 	</resultMap>
 
 	<sql id="selectMenuVo">
-        select menu_id, menu_name, parent_id, order_num, path, component, `query`, is_frame, is_cache, menu_type, visible, status, ifnull(perms,'') as perms, icon, create_time 
+        select menu_id, menu_name,menu_name_en, parent_id, order_num, path, component, `query`, is_frame, is_cache, menu_type, visible, status, ifnull(perms,'') as perms, icon, create_time
 		from sys_menu
     </sql>
     
@@ -37,6 +38,7 @@
 		SELECT
 		m.menu_id,
 		m.menu_name,
+		m.menu_name_en,
 		m.parent_id,
 		m.order_num,
 		m.path,
@@ -60,6 +62,9 @@
 			<if test="menuName != null and menuName != ''">
 				AND m.menu_name like concat('%', #{menuName}, '%')
 			</if>
+			<if test="menuNameEn != null and menuNameEn != ''">
+				AND m.menu_name_en like concat('%', #{menuNameEn}, '%')
+			</if>
 			<if test="visible != null and visible != ''">
 				AND m.visible = #{visible}
 			</if>
@@ -73,7 +78,7 @@
 	</select>
 
 	<select id="selectTenantMenuList" resultMap="SysMenuResult">
-		select m.menu_id, menu_name, parent_id, order_num, path, component, `query`, is_frame, is_cache, menu_type, visible, status, ifnull(perms,'') as perms, icon, create_time, tm.`tenant_id`
+		select m.menu_id, menu_name,menu_name_en, parent_id, order_num, path, component, `query`, is_frame, is_cache, menu_type, visible, status, ifnull(perms,'') as perms, icon, create_time, tm.`tenant_id`
 		from sys_menu m
 		left join sys_tenant_menu tm on tm.menu_id = m.menu_id
 		where tm.tenant_id = #{tenantId}
@@ -82,6 +87,9 @@
 		<if test="menu.menuName != null and menu.menuName != ''">
 			AND m.menu_name like concat('%', #{menu.menuName}, '%')
 		</if>
+		<if test="menu.menuNameEn != null and menu.menuNameEn != ''">
+			AND m.menu_name_en like concat('%', #{menu.menuNameEn}, '%')
+		</if>
 		<if test="menu.status != null and menu.status != ''">
 			AND m.status = #{menu.status}
 		</if>
@@ -89,14 +97,14 @@
 	</select>
 	
 	<select id="selectMenuTreeAll" resultMap="SysMenuResult">
-		select distinct m.menu_id, m.parent_id, m.menu_name, m.path, m.component, m.`query`, m.visible, m.status, ifnull(m.perms,'') as perms, m.is_frame, m.is_cache, m.menu_type, m.icon, m.order_num, m.create_time
+		select distinct m.menu_id, m.parent_id, m.menu_name,m.menu_name_en, m.path, m.component, m.`query`, m.visible, m.status, ifnull(m.perms,'') as perms, m.is_frame, m.is_cache, m.menu_type, m.icon, m.order_num, m.create_time
 		from sys_menu m where m.menu_type in ('M', 'C') and m.status = 0
 		and m.menu_id not in (select DISTINCT menu_id from sys_tenant_menu)
 		order by m.parent_id, m.order_num
 	</select>
 
 	<select id="selectTenantMenuTreeAll" parameterType="Long" resultMap="SysMenuResult">
-		select distinct m.menu_id, m.parent_id, m.menu_name, m.path, m.component, m.`query`, m.visible, m.status, ifnull(m.perms,'') as perms, m.is_frame, m.is_cache, m.menu_type, m.icon, m.order_num, m.create_time
+		select distinct m.menu_id, m.parent_id, m.menu_name,m.menu_name_en, m.path, m.component, m.`query`, m.visible, m.status, ifnull(m.perms,'') as perms, m.is_frame, m.is_cache, m.menu_type, m.icon, m.order_num, m.create_time
 		from sys_tenant_menu tm
 		left join sys_menu m on tm.menu_id = m.menu_id
 		where m.menu_type in ('M', 'C') and m.status = 0 and tm.tenant_id = #{tenantId}
@@ -106,7 +114,7 @@
 	</select>
 	
 	<select id="selectMenuListByUserId" parameterType="SysMenu" resultMap="SysMenuResult">
-		select distinct m.menu_id, m.parent_id, m.menu_name, m.path, m.component, m.`query`, m.visible, m.status, ifnull(m.perms,'') as perms, m.is_frame, m.is_cache, m.menu_type, m.icon, m.order_num, m.create_time,t.tenant_name
+		select distinct m.menu_id, m.parent_id, m.menu_name,m.menu_name_en, m.path, m.component, m.`query`, m.visible, m.status, ifnull(m.perms,'') as perms, m.is_frame, m.is_cache, m.menu_type, m.icon, m.order_num, m.create_time,t.tenant_name
 		from sys_menu m
 		left join sys_role_menu rm on m.menu_id = rm.menu_id
 		left join sys_user_role ur on rm.role_id = ur.role_id
@@ -130,7 +138,7 @@
 	</select>
     
     <select id="selectMenuTreeByUserId" parameterType="Long" resultMap="SysMenuResult">
-		select distinct m.menu_id, m.parent_id, m.menu_name, m.path, m.component, m.`query`, m.visible, m.status, ifnull(m.perms,'') as perms, m.is_frame, m.is_cache, m.menu_type, m.icon, m.order_num, m.create_time
+		select distinct m.menu_id, m.parent_id, m.menu_name,m.menu_name_en, m.path, m.component, m.`query`, m.visible, m.status, ifnull(m.perms,'') as perms, m.is_frame, m.is_cache, m.menu_type, m.icon, m.order_num, m.create_time
 		from sys_menu m
 			 left join sys_role_menu rm on m.menu_id = rm.menu_id
 			 left join sys_user_role ur on rm.role_id = ur.role_id
@@ -195,6 +203,7 @@
 	<select id="checkMenuNameUnique" parameterType="SysMenu" resultMap="SysMenuResult">
         SELECT sys.menu_id,
         sys.menu_name,
+        sys.menu_name_en,
         sys.parent_id,
         sys.order_num,
         sys.path,
@@ -217,11 +226,48 @@
         </if>
         LIMIT 1
     </select>
+	<select id="checkMenuNameUniqueMuti" parameterType="SysMenu" resultMap="SysMenuResult">
+		SELECT sys.menu_id,
+		sys.menu_name,
+		sys.menu_name_en,
+		sys.parent_id,
+		sys.order_num,
+		sys.path,
+		sys.component,
+		sys.`query`,
+		sys.is_frame,
+		sys.is_cache,
+		sys.menu_type,
+		sys.visible,
+		sys.STATUS,
+		ifnull(sys.perms, '') AS perms,
+		sys.icon,
+		sys.create_time
+		FROM sys_menu AS sys
+		LEFT JOIN sys_tenant_menu AS tenant ON sys.menu_id = tenant.menu_id
+		WHERE sys.parent_id = #{parentId} and sys.menu_id != #{menuId}
+		<if test="tenantId != null and tenantId != ''">
+			AND tenant.tenant_id = #{tenantId}
+		</if>
+		AND (
+		<if test="menuName != null and menuName != ''">
+			sys.menu_name = #{menuName}
+		</if>
+		<if test="menuNameEn != null and menuNameEn != '' and menuName != null and menuName != ''">
+			or
+		</if>
+		<if test="menuNameEn != null and menuNameEn != ''">
+			sys.menu_name_en = #{menuNameEn}
+		</if>
+		)
+		LIMIT 1
+	</select>
 	
 	<update id="updateMenu" parameterType="SysMenu">
 		update sys_menu
 		<set>
 			<if test="menuName != null and menuName != ''">menu_name = #{menuName},</if>
+			<if test="menuNameEn != null and menuNameEn != ''">menu_name_en = #{menuNameEn},</if>
 			<if test="parentId != null">parent_id = #{parentId},</if>
 			<if test="orderNum != null">order_num = #{orderNum},</if>
 			<if test="path != null and path != ''">path = #{path},</if>
@@ -246,6 +292,7 @@
 		<if test="menuId != null and menuId != 0">menu_id,</if>
 		<if test="parentId != null and parentId != 0">parent_id,</if>
 		<if test="menuName != null and menuName != ''">menu_name,</if>
+		<if test="menuNameEn != null and menuNameEn != ''">menu_name_en,</if>
 		<if test="orderNum != null">order_num,</if>
 		<if test="path != null and path != ''">path,</if>
 		<if test="component != null and component != ''">component,</if>
@@ -264,6 +311,7 @@
 		<if test="menuId != null and menuId != 0">#{menuId},</if>
 		<if test="parentId != null and parentId != 0">#{parentId},</if>
 		<if test="menuName != null and menuName != ''">#{menuName},</if>
+		<if test="menuNameEn != null and menuNameEn != ''">#{menuNameEn},</if>
 		<if test="orderNum != null">#{orderNum},</if>
 		<if test="path != null and path != ''">#{path},</if>
 		<if test="component != null and component != ''">#{component},</if>
@@ -296,6 +344,7 @@
 		SELECT
 			m.menu_id,
 			m.menu_name,
+			m.menu_name_en,
 			m.parent_id,
 			m.order_num,
 			m.path,